From aefd868566b0c1e63c485c07571ad5a0ddc2ecd1 Mon Sep 17 00:00:00 2001 From: diminator Date: Wed, 10 May 2017 09:36:07 +0200 Subject: [PATCH] rebuild + add node dist --- dist/bundle/bundle.js | 200 +++++++++++------- dist/node/Ed25519Keypair.js | 43 ++++ dist/node/baseRequest.js | 106 ++++++++++ dist/node/connection/getApiUrls.js | 18 ++ dist/node/connection/getBlock.js | 30 +++ dist/node/connection/getStatus.js | 30 +++ dist/node/connection/getTransaction.js | 30 +++ dist/node/connection/index.js | 54 +++++ dist/node/connection/listBlocks.js | 35 +++ dist/node/connection/listOutputs.js | 37 ++++ dist/node/connection/listTransactions.js | 35 +++ dist/node/connection/listVotes.js | 30 +++ .../pollStatusAndFetchTransaction.js | 44 ++++ dist/node/connection/postTransaction.js | 30 +++ dist/node/format_text.js | 109 ++++++++++ dist/node/request.js | 61 ++++++ dist/node/sanitize.js | 97 +++++++++ dist/node/sha256Hash.js | 17 ++ dist/node/stringify_as_query_param.js | 70 ++++++ dist/node/transaction/hashTransaction.js | 28 +++ dist/node/transaction/index.js | 64 ++++++ .../node/transaction/makeCreateTransaction.js | 52 +++++ dist/node/transaction/makeEd25519Condition.js | 45 ++++ dist/node/transaction/makeInputTemplate.js | 18 ++ dist/node/transaction/makeOutput.js | 24 +++ dist/node/transaction/makeSha256Condition.js | 38 ++++ .../transaction/makeThresholdCondition.js | 44 ++++ dist/node/transaction/makeTransaction.js | 42 ++++ .../transaction/makeTransferTransaction.js | 59 ++++++ ...serializeTransactionIntoCanonicalString.js | 33 +++ dist/node/transaction/signTransaction.js | 59 ++++++ dist/node/transaction/utils/ccJsonLoad.js | 60 ++++++ dist/node/transaction/utils/ccJsonify.js | 75 +++++++ package.json | 2 +- webpack.config.js | 2 +- 35 files changed, 1641 insertions(+), 80 deletions(-) create mode 100644 dist/node/Ed25519Keypair.js create mode 100644 dist/node/baseRequest.js create mode 100644 dist/node/connection/getApiUrls.js create mode 100644 dist/node/connection/getBlock.js create mode 100644 dist/node/connection/getStatus.js create mode 100644 dist/node/connection/getTransaction.js create mode 100644 dist/node/connection/index.js create mode 100644 dist/node/connection/listBlocks.js create mode 100644 dist/node/connection/listOutputs.js create mode 100644 dist/node/connection/listTransactions.js create mode 100644 dist/node/connection/listVotes.js create mode 100644 dist/node/connection/pollStatusAndFetchTransaction.js create mode 100644 dist/node/connection/postTransaction.js create mode 100644 dist/node/format_text.js create mode 100644 dist/node/request.js create mode 100644 dist/node/sanitize.js create mode 100644 dist/node/sha256Hash.js create mode 100644 dist/node/stringify_as_query_param.js create mode 100644 dist/node/transaction/hashTransaction.js create mode 100644 dist/node/transaction/index.js create mode 100644 dist/node/transaction/makeCreateTransaction.js create mode 100644 dist/node/transaction/makeEd25519Condition.js create mode 100644 dist/node/transaction/makeInputTemplate.js create mode 100644 dist/node/transaction/makeOutput.js create mode 100644 dist/node/transaction/makeSha256Condition.js create mode 100644 dist/node/transaction/makeThresholdCondition.js create mode 100644 dist/node/transaction/makeTransaction.js create mode 100644 dist/node/transaction/makeTransferTransaction.js create mode 100644 dist/node/transaction/serializeTransactionIntoCanonicalString.js create mode 100644 dist/node/transaction/signTransaction.js create mode 100644 dist/node/transaction/utils/ccJsonLoad.js create mode 100644 dist/node/transaction/utils/ccJsonify.js diff --git a/dist/bundle/bundle.js b/dist/bundle/bundle.js index e53406f..f50f728 100644 --- a/dist/bundle/bundle.js +++ b/dist/bundle/bundle.js @@ -4,9 +4,9 @@ else if(typeof define === 'function' && define.amd) define([], factory); else if(typeof exports === 'object') - exports["js-bigchaindb-quickstart"] = factory(); + exports["js-bigchaindb-driver"] = factory(); else - root["js-bigchaindb-quickstart"] = factory(); + root["js-bigchaindb-driver"] = factory(); })(this, function() { return /******/ (function(modules) { // webpackBootstrap /******/ // The module cache @@ -16,9 +16,9 @@ return /******/ (function(modules) { // webpackBootstrap /******/ function __webpack_require__(moduleId) { /******/ /******/ // Check if module is in cache -/******/ if(installedModules[moduleId]) +/******/ if(installedModules[moduleId]) { /******/ return installedModules[moduleId].exports; -/******/ +/******/ } /******/ // Create a new module (and put it into the cache) /******/ var module = installedModules[moduleId] = { /******/ i: moduleId, @@ -99,9 +99,9 @@ function getApiUrls(API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = request; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__baseRequest__ = __webpack_require__(28); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sanitize__ = __webpack_require__(38); -/* harmony export (immutable) */ __webpack_exports__["a"] = request; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; @@ -2004,9 +2004,9 @@ r++):r&&(t.splice(n,1),r--)}if(e)for(;r--;r)t.unshift("..");return t}function n( /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonify; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__); -/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonify; /** @@ -2076,8 +2076,8 @@ function ccJsonify(fulfillment) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hashTransaction__ = __webpack_require__(41); /* harmony export (immutable) */ __webpack_exports__["a"] = makeTransaction; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__hashTransaction__ = __webpack_require__(41); function makeTransactionTemplate() { @@ -2114,11 +2114,11 @@ function makeTransaction(operation, asset) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = serializeTransactionIntoCanonicalString; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__ = __webpack_require__(85); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_json_stable_stringify___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_json_stable_stringify__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_clone__); -/* harmony export (immutable) */ __webpack_exports__["a"] = serializeTransactionIntoCanonicalString; @@ -2356,6 +2356,10 @@ process.off = noop; process.removeListener = noop; process.removeAllListeners = noop; process.emit = noop; +process.prependListener = noop; +process.prependOnceListener = noop; + +process.listeners = function (name) { return [] } process.binding = function (name) { throw new Error('process.binding is not supported'); @@ -2400,9 +2404,9 @@ module.exports = g; /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getStatus; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = getStatus; @@ -2424,9 +2428,9 @@ function getStatus(tx_id, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = getTransaction; @@ -3327,15 +3331,23 @@ module.exports = function(it){ /* 25 */ /***/ (function(module, exports, __webpack_require__) { +var __WEBPACK_AMD_DEFINE_RESULT__;/* globals window, exports, define */ + (function(window) { + 'use strict' + var re = { not_string: /[^s]/, + not_bool: /[^t]/, + not_type: /[^T]/, + not_primitive: /[^v]/, number: /[diefg]/, + numeric_arg: /[bcdiefguxX]/, json: /[j]/, not_json: /[^j]/, text: /^[^\x25]+/, modulo: /^\x25{2}/, - placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijosuxX])/, + placeholder: /^\x25(?:([1-9]\d*)\$|\(([^\)]+)\))?(\+)?(0|'[^$])?(-)?(\d+)?(?:\.(\d+))?([b-gijostTuvxX])/, key: /^([a-z_][a-z_\d]*)/i, key_access: /^\.([a-z_][a-z_\d]*)/i, index_access: /^\[(\d+)\]/, @@ -3344,26 +3356,26 @@ module.exports = function(it){ function sprintf() { var key = arguments[0], cache = sprintf.cache - if (!(cache[key] && cache.hasOwnProperty(key))) { + if (!(cache[key])) { cache[key] = sprintf.parse(key) } return sprintf.format.call(null, cache[key], arguments) } sprintf.format = function(parse_tree, argv) { - var cursor = 1, tree_length = parse_tree.length, node_type = "", arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = "" + var cursor = 1, tree_length = parse_tree.length, node_type = '', arg, output = [], i, k, match, pad, pad_character, pad_length, is_positive = true, sign = '' for (i = 0; i < tree_length; i++) { node_type = get_type(parse_tree[i]) - if (node_type === "string") { + if (node_type === 'string') { output[output.length] = parse_tree[i] } - else if (node_type === "array") { + else if (node_type === 'array') { match = parse_tree[i] // convenience purposes only if (match[2]) { // keyword argument arg = argv[cursor] for (k = 0; k < match[2].length; k++) { if (!arg.hasOwnProperty(match[2][k])) { - throw new Error(sprintf("[sprintf] property '%s' does not exist", match[2][k])) + throw new Error(sprintf('[sprintf] property "%s" does not exist', match[2][k])) } arg = arg[match[2][k]] } @@ -3375,11 +3387,11 @@ module.exports = function(it){ arg = argv[cursor++] } - if (get_type(arg) == "function") { + if (re.not_type.test(match[8]) && re.not_primitive.test(match[8]) && get_type(arg) == 'function') { arg = arg() } - if (re.not_string.test(match[8]) && re.not_json.test(match[8]) && (get_type(arg) != "number" && isNaN(arg))) { + if (re.numeric_arg.test(match[8]) && (get_type(arg) != 'number' && isNaN(arg))) { throw new TypeError(sprintf("[sprintf] expecting number but found %s", get_type(arg))) } @@ -3388,42 +3400,55 @@ module.exports = function(it){ } switch (match[8]) { - case "b": - arg = arg.toString(2) + case 'b': + arg = parseInt(arg, 10).toString(2) break - case "c": - arg = String.fromCharCode(arg) + case 'c': + arg = String.fromCharCode(parseInt(arg, 10)) break - case "d": - case "i": + case 'd': + case 'i': arg = parseInt(arg, 10) break - case "j": + case 'j': arg = JSON.stringify(arg, null, match[6] ? parseInt(match[6]) : 0) break - case "e": - arg = match[7] ? arg.toExponential(match[7]) : arg.toExponential() + case 'e': + arg = match[7] ? parseFloat(arg).toExponential(match[7]) : parseFloat(arg).toExponential() break - case "f": + case 'f': arg = match[7] ? parseFloat(arg).toFixed(match[7]) : parseFloat(arg) break - case "g": + case 'g': arg = match[7] ? parseFloat(arg).toPrecision(match[7]) : parseFloat(arg) break - case "o": + case 'o': arg = arg.toString(8) break - case "s": - arg = ((arg = String(arg)) && match[7] ? arg.substring(0, match[7]) : arg) + case 's': + arg = String(arg) + arg = (match[7] ? arg.substring(0, match[7]) : arg) break - case "u": - arg = arg >>> 0 + case 't': + arg = String(!!arg) + arg = (match[7] ? arg.substring(0, match[7]) : arg) break - case "x": - arg = arg.toString(16) + case 'T': + arg = get_type(arg) + arg = (match[7] ? arg.substring(0, match[7]) : arg) break - case "X": - arg = arg.toString(16).toUpperCase() + case 'u': + arg = parseInt(arg, 10) >>> 0 + break + case 'v': + arg = arg.valueOf() + arg = (match[7] ? arg.substring(0, match[7]) : arg) + break + case 'x': + arg = parseInt(arg, 10).toString(16) + break + case 'X': + arg = parseInt(arg, 10).toString(16).toUpperCase() break } if (re.json.test(match[8])) { @@ -3431,23 +3456,23 @@ module.exports = function(it){ } else { if (re.number.test(match[8]) && (!is_positive || match[3])) { - sign = is_positive ? "+" : "-" - arg = arg.toString().replace(re.sign, "") + sign = is_positive ? '+' : '-' + arg = arg.toString().replace(re.sign, '') } else { - sign = "" + sign = '' } - pad_character = match[4] ? match[4] === "0" ? "0" : match[4].charAt(1) : " " + pad_character = match[4] ? match[4] === '0' ? '0' : match[4].charAt(1) : ' ' pad_length = match[6] - (sign + arg).length - pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : "") : "" - output[output.length] = match[5] ? sign + arg + pad : (pad_character === "0" ? sign + pad + arg : pad + sign + arg) + pad = match[6] ? (pad_length > 0 ? str_repeat(pad_character, pad_length) : '') : '' + output[output.length] = match[5] ? sign + arg + pad : (pad_character === '0' ? sign + pad + arg : pad + sign + arg) } } } - return output.join("") + return output.join('') } - sprintf.cache = {} + sprintf.cache = Object.create(null) sprintf.parse = function(fmt) { var _fmt = fmt, match = [], parse_tree = [], arg_names = 0 @@ -3456,7 +3481,7 @@ module.exports = function(it){ parse_tree[parse_tree.length] = match[0] } else if ((match = re.modulo.exec(_fmt)) !== null) { - parse_tree[parse_tree.length] = "%" + parse_tree[parse_tree.length] = '%' } else if ((match = re.placeholder.exec(_fmt)) !== null) { if (match[2]) { @@ -3464,7 +3489,7 @@ module.exports = function(it){ var field_list = [], replacement_field = match[2], field_match = [] if ((field_match = re.key.exec(replacement_field)) !== null) { field_list[field_list.length] = field_match[1] - while ((replacement_field = replacement_field.substring(field_match[0].length)) !== "") { + while ((replacement_field = replacement_field.substring(field_match[0].length)) !== '') { if ((field_match = re.key_access.exec(replacement_field)) !== null) { field_list[field_list.length] = field_match[1] } @@ -3507,10 +3532,26 @@ module.exports = function(it){ * helpers */ function get_type(variable) { - return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + if (typeof variable === 'number') { + return 'number' + } + else if (typeof variable === 'string') { + return 'string' + } + else { + return Object.prototype.toString.call(variable).slice(8, -1).toLowerCase() + } } + var preformattedPadding = { + '0': ['', '0', '00', '000', '0000', '00000', '000000', '0000000'], + ' ': ['', ' ', ' ', ' ', ' ', ' ', ' ', ' '], + '_': ['', '_', '__', '___', '____', '_____', '______', '_______'], + } function str_repeat(input, multiplier) { + if (multiplier >= 0 && multiplier <= 7 && preformattedPadding[input]) { + return preformattedPadding[input][multiplier] + } return Array(multiplier + 1).join(input) } @@ -3521,20 +3562,21 @@ module.exports = function(it){ exports.sprintf = sprintf exports.vsprintf = vsprintf } - else { + if (typeof window !== 'undefined') { window.sprintf = sprintf window.vsprintf = vsprintf - if (typeof define === "function" && define.amd) { - define(function() { + if (true) { + !(__WEBPACK_AMD_DEFINE_RESULT__ = function() { return { sprintf: sprintf, vsprintf: vsprintf } - }) + }.call(exports, __webpack_require__, exports, module), + __WEBPACK_AMD_DEFINE_RESULT__ !== undefined && (module.exports = __WEBPACK_AMD_DEFINE_RESULT__)) } } -})(typeof window === "undefined" ? this : window); +})(typeof window === 'undefined' ? this : window); /***/ }), @@ -3561,13 +3603,13 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = Ed25519Keypair; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl__ = __webpack_require__(92); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_tweetnacl___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_tweetnacl__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3__ = __webpack_require__(24); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_js_sha3__); -/* harmony export (immutable) */ __webpack_exports__["a"] = Ed25519Keypair; @@ -3599,7 +3641,8 @@ function Ed25519Keypair(secret) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; -/* WEBPACK VAR INJECTION */(function(process) {/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise__ = __webpack_require__(81); +/* WEBPACK VAR INJECTION */(function(process) {/* harmony export (immutable) */ __webpack_exports__["a"] = baseRequest; +/* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise__ = __webpack_require__(81); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_es6_promise___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_es6_promise__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__ = __webpack_require__(82); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_fetch_ponyfill__); @@ -3607,7 +3650,6 @@ function Ed25519Keypair(secret) { /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_sprintf_js__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__format_text__ = __webpack_require__(37); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__stringify_as_query_param__ = __webpack_require__(40); -/* harmony export (immutable) */ __webpack_exports__["a"] = baseRequest; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } @@ -3702,9 +3744,9 @@ function baseRequest(url) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = getBlock; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = getBlock; @@ -3769,9 +3811,9 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listBlocks; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = listBlocks; @@ -3798,9 +3840,9 @@ function listBlocks(_ref, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listOutputs; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = listOutputs; @@ -3829,9 +3871,9 @@ function listOutputs(_ref, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listTransactions; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = listTransactions; @@ -3858,9 +3900,9 @@ function listTransactions(_ref, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = listVotes; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = listVotes; @@ -3918,9 +3960,9 @@ function listVotes(block_id, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = postTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__getApiUrls__ = __webpack_require__(0); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__request__ = __webpack_require__(1); -/* harmony export (immutable) */ __webpack_exports__["a"] = postTransaction; @@ -3942,9 +3984,9 @@ function postTransaction(transaction, API_PATH) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = formatText; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js__ = __webpack_require__(25); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_sprintf_js___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_sprintf_js__); -/* harmony export (immutable) */ __webpack_exports__["a"] = formatText; var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; @@ -4051,11 +4093,11 @@ function formatText(s) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = sanitize; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__ = __webpack_require__(53); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_array_includes__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_core_js_library_fn_object_entries__); -/* harmony export (immutable) */ __webpack_exports__["a"] = sanitize; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; @@ -4143,9 +4185,9 @@ function sanitize(obj) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = sha256Hash; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3__ = __webpack_require__(24); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_js_sha3___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_js_sha3__); -/* harmony export (immutable) */ __webpack_exports__["a"] = sha256Hash; function sha256Hash(data) { @@ -4157,13 +4199,13 @@ function sha256Hash(data) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = stringifyAsQueryParam; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__ = __webpack_require__(19); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_core_js_library_fn_object_entries__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize__ = __webpack_require__(80); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_decamelize___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_decamelize__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string__ = __webpack_require__(90); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_query_string___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_query_string__); -/* harmony export (immutable) */ __webpack_exports__["a"] = stringifyAsQueryParam; var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; @@ -4221,9 +4263,9 @@ function stringifyAsQueryParam(obj) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = hashTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__serializeTransactionIntoCanonicalString__ = __webpack_require__(7); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__sha256Hash__ = __webpack_require__(39); -/* harmony export (immutable) */ __webpack_exports__["a"] = hashTransaction; var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; @@ -4293,9 +4335,9 @@ Object.defineProperty(__webpack_exports__, "__esModule", { value: true }); /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeCreateTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(6); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeCreateTransaction; @@ -4339,6 +4381,7 @@ function makeCreateTransaction(asset, metadata, outputs) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeEd25519Condition; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(3); @@ -4346,7 +4389,6 @@ function makeCreateTransaction(asset, metadata, outputs) { /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_five_bells_condition__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3__utils_ccJsonify__ = __webpack_require__(5); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeEd25519Condition; @@ -4405,12 +4447,12 @@ function makeOutput(condition) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeSha256Condition; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_five_bells_condition__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2__utils_ccJsonify__ = __webpack_require__(5); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeSha256Condition; @@ -4441,10 +4483,10 @@ function makeSha256Condition(preimage) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeThresholdCondition; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_five_bells_condition__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_five_bells_condition__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__utils_ccJsonify__ = __webpack_require__(5); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeThresholdCondition; @@ -4481,9 +4523,9 @@ function makeThresholdCondition(threshold) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransferTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0__makeInputTemplate__ = __webpack_require__(17); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1__makeTransaction__ = __webpack_require__(6); -/* harmony export (immutable) */ __webpack_exports__["a"] = makeTransferTransaction; @@ -4534,6 +4576,7 @@ function makeTransferTransaction(unspentTransaction, metadata, outputs) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = signTransaction; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_buffer__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_bs58__ = __webpack_require__(3); @@ -4543,7 +4586,6 @@ function makeTransferTransaction(unspentTransaction, metadata, outputs) { /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone__ = __webpack_require__(18); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_3_clone___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_3_clone__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_4__serializeTransactionIntoCanonicalString__ = __webpack_require__(7); -/* harmony export (immutable) */ __webpack_exports__["a"] = signTransaction; @@ -4588,13 +4630,13 @@ function signTransaction(transaction) { /***/ (function(module, __webpack_exports__, __webpack_require__) { "use strict"; +/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonLoad; /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58__ = __webpack_require__(3); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_0_bs58___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_0_bs58__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition__ = __webpack_require__(4); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_1_five_bells_condition___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_1_five_bells_condition__); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_buffer__ = __webpack_require__(2); /* harmony import */ var __WEBPACK_IMPORTED_MODULE_2_buffer___default = __webpack_require__.n(__WEBPACK_IMPORTED_MODULE_2_buffer__); -/* harmony export (immutable) */ __webpack_exports__["a"] = ccJsonLoad; @@ -7688,12 +7730,14 @@ function parserForArrayFormat(opts) { case 'bracket': return function (key, value, accumulator) { result = /(\[\])$/.exec(key); - key = key.replace(/\[\]$/, ''); - if (!result || accumulator[key] === undefined) { + if (!result) { accumulator[key] = value; return; + } else if (accumulator[key] === undefined) { + accumulator[key] = [value]; + return; } accumulator[key] = [].concat(accumulator[key], value); @@ -10255,4 +10299,4 @@ module.exports = __webpack_require__(26); /***/ }) /******/ ]); }); -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCA3NDhjMWVmZDk0ZGExNjgzMzM5OSIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRBcGlVcmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iczU4L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vdXRpbHMvY2NKc29uaWZ5LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2dldFN0YXR1cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jbG9uZS9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzLXNoYTMvc3JjL3NoYTMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwid2VicGFjazovLy8uL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmFzZVJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vZ2V0QmxvY2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vbGlzdEJsb2Nrcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0T3V0cHV0cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2xpc3RWb3Rlcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb2xsU3RhdHVzQW5kRmV0Y2hUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb3N0VHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Zvcm1hdF90ZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9zYW5pdGl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2hhMjU2SGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9oYXNoVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VDcmVhdGVUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUVkMjU1MTlDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VPdXRwdXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VTaGEyNTZDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUaHJlc2hvbGRDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3V0aWxzL2NjSnNvbkxvYWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlLXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2RlY2FtZWxpemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwid2VicGFjazovLy8uL34vZmV0Y2gtcG9ueWZpbGwvYnVpbGQvZmV0Y2gtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL34vb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly8vdmVydHggKGlnbm9yZWQpIiwid2VicGFjazovLy9jcnlwdG8gKGlnbm9yZWQpIl0sIm5hbWVzIjpbImdldEFwaVVybHMiLCJBUElfUEFUSCIsIkRFRkFVTFRfUkVRVUVTVF9DT05GSUciLCJjcmVkZW50aWFscyIsImhlYWRlcnMiLCJyZXF1ZXN0IiwidXJsIiwiY29uZmlnIiwib25seUpzb25SZXNwb25zZSIsInJlcXVlc3RDb25maWciLCJxdWVyeSIsInNhbml0aXplIiwiYXBpVXJsIiwianNvbkJvZHkiLCJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJiYXNlUmVxdWVzdCIsInRoZW4iLCJyZXMiLCJqc29uIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjY0pzb25pZnkiLCJmdWxmaWxsbWVudCIsImNvbmRpdGlvblVyaSIsImdldENvbmRpdGlvblVyaSIsInNlcmlhbGl6ZVVyaSIsImdldFR5cGVJZCIsImRldGFpbHMiLCJ0eXBlX2lkIiwiYml0bWFzayIsInByZWltYWdlIiwidG9TdHJpbmciLCJ0eXBlIiwiZ2V0Qml0bWFzayIsInRocmVzaG9sZCIsInN1YmNvbmRpdGlvbnMiLCJtYXAiLCJzdWJjb25kaXRpb24iLCJzdWJjb25kaXRpb25Kc29uIiwiYm9keSIsIndlaWdodCIsInNpZ25hdHVyZSIsInB1YmxpY19rZXkiLCJiYXNlNTgiLCJlbmNvZGUiLCJwdWJsaWNLZXkiLCJoYXNoIiwibWF4X2Z1bGZpbGxtZW50X2xlbmd0aCIsIm1heEZ1bGZpbGxtZW50TGVuZ3RoIiwibWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUiLCJtYWtlVHJhbnNhY3Rpb24iLCJvcGVyYXRpb24iLCJhc3NldCIsIm1ldGFkYXRhIiwib3V0cHV0cyIsImlucHV0cyIsInR4IiwiaWQiLCJoYXNoVHJhbnNhY3Rpb24iLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImNsb25lIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJnZXRTdGF0dXMiLCJ0eF9pZCIsImdldFRyYW5zYWN0aW9uIiwidHhJZCIsInVybFRlbXBsYXRlU3BlYyIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiRWQyNTUxOUtleXBhaXIiLCJzZWNyZXQiLCJrZXlQYWlyIiwic2VjcmV0SGFzaCIsInNoYTMiLCJzaGEzXzI1NiIsImNyZWF0ZSIsInVwZGF0ZSIsImFycmF5IiwibmFjbCIsInNpZ24iLCJmcm9tU2VlZCIsIlVpbnQ4QXJyYXkiLCJwcml2YXRlS2V5Iiwic2VjcmV0S2V5Iiwic2xpY2UiLCJmZXRjaCIsImZldGNoUG9ueWZpbGwiLCJmZXRjaENvbmZpZyIsImV4cGFuZGVkVXJsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidnNwcmludGYiLCJPYmplY3QiLCJrZXlzIiwiZm9ybWF0VGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm4iLCJzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0iLCJKU09OIiwic3RyaW5naWZ5Iiwib2siLCJnZXRCbG9jayIsImJsb2NrSWQiLCJsaXN0QmxvY2tzIiwic3RhdHVzIiwibGlzdE91dHB1dHMiLCJ1bnNwZW50IiwibGlzdFRyYW5zYWN0aW9ucyIsImFzc2V0X2lkIiwibGlzdFZvdGVzIiwiYmxvY2tfaWQiLCJyZXNvbHZlIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImxvZyIsImNsZWFySW50ZXJ2YWwiLCJwb3N0VHJhbnNhY3Rpb24iLCJtZXRob2QiLCJSZWdleCIsIlRFTVBMQVRFX0xJVEVSQUwiLCJLRVkiLCJLRVlfQUNDRVNTIiwiSU5ERVhfQUNDRVNTIiwicyIsImV4cGFuZGVkRm9ybWF0U3RyIiwiYXJndiIsInRlbXBsYXRlU3BlY09iaiIsInJlcGxhY2UiLCJtYXRjaCIsInJlcGxhY2VtZW50IiwiaW50ZXJwb2xhdGlvbkxlZnQiLCJ2YWx1ZSIsImN1ck1hdGNoIiwiZXhlYyIsInN1YnN0cmluZyIsIlN5bnRheEVycm9yIiwic3ByaW50ZiIsImZpbHRlckZyb21PYmplY3QiLCJvYmoiLCJmaWx0ZXIiLCJpc0luY2x1c2lvbiIsImFwcGx5RmlsdGVyT25PYmplY3QiLCJfIiwiY29yZUluY2x1ZGVzIiwiZmlsdGVyRm4iLCJmaWx0ZXJlZE9iaiIsImNvcmVPYmplY3RFbnRyaWVzIiwiZm9yRWFjaCIsInZhbCIsInNlbGVjdEZyb21PYmplY3QiLCJzaGEyNTZIYXNoIiwiZGF0YSIsImhleCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkS2V5c09iaiIsInJlZHVjZSIsInBhcmFtc09iaiIsInF1ZXJ5U3RyaW5nIiwibWFrZUNyZWF0ZVRyYW5zYWN0aW9uIiwiYXNzZXREZWZpbml0aW9uIiwiaXNzdWVycyIsImlzc3VlciIsIm1ha2VFZDI1NTE5Q29uZGl0aW9uIiwicHVibGljS2V5QnVmZmVyIiwiZGVjb2RlIiwiZWQyNTUxOUZ1bGZpbGxtZW50IiwiY2MiLCJFZDI1NTE5Iiwic2V0UHVibGljS2V5IiwibWFrZU91dHB1dCIsImNvbmRpdGlvbiIsImFtb3VudCIsImhhc093blByb3BlcnR5IiwibWFrZVNoYTI1NkNvbmRpdGlvbiIsInNoYTI1NkZ1bGZpbGxtZW50IiwiUHJlaW1hZ2VTaGEyNTYiLCJtYWtlVGhyZXNob2xkQ29uZGl0aW9uIiwidGhyZXNob2xkQ29uZGl0aW9uIiwiVGhyZXNob2xkU2hhMjU2IiwiYWRkU3ViZnVsZmlsbG1lbnQiLCJtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbiIsInVuc3BlbnRUcmFuc2FjdGlvbiIsImZ1bGZpbGxlZE91dHB1dHMiLCJvdXRwdXRJbmRleCIsImZ1bGZpbGxlZE91dHB1dCIsInRyYW5zYWN0aW9uTGluayIsInB1YmxpY19rZXlzIiwiYXNzZXRMaW5rIiwic2lnblRyYW5zYWN0aW9uIiwicHJpdmF0ZUtleXMiLCJzaWduZWRUeCIsImlucHV0IiwiaW5kZXgiLCJwcml2YXRlS2V5QnVmZmVyIiwic2VyaWFsaXplZFRyYW5zYWN0aW9uIiwiZnVsZmlsbG1lbnRVcmkiLCJjY0pzb25Mb2FkIiwiY29uZGl0aW9uSnNvbiIsIkNvbmRpdGlvbiIsInBhcnNlSW50Iiwic3ViZnVsZmlsbG1lbnRzIiwic3ViZnVsZmlsbG1lbnQiLCJhZGRTdWJjb25kaXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7O0FBR0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EsbURBQTJDLGNBQWM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsbUNBQTJCLDBCQUEwQixFQUFFO0FBQ3ZELHlDQUFpQyxlQUFlO0FBQ2hEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDhEQUFzRCwrREFBK0Q7O0FBRXJIO0FBQ0E7O0FBRUE7QUFDQTs7Ozs7Ozs7O0FDaEVlLFNBQVNBLFVBQVQsQ0FBb0JDLFFBQXBCLEVBQThCO0FBQ3pDLFdBQU87QUFDSCxrQkFBVUEsV0FBVyxRQURsQjtBQUVILHlCQUFpQkEsV0FBVyxvQkFGekI7QUFHSCxtQkFBV0EsV0FBVyxTQUhuQjtBQUlILG9CQUFZQSxXQUFXLFVBSnBCO0FBS0gsd0JBQWdCQSxXQUFXLGNBTHhCO0FBTUgsK0JBQXVCQSxXQUFXLHVCQU4vQjtBQU9ILGlCQUFTQSxXQUFXO0FBUGpCLEtBQVA7QUFTSCxDOzs7Ozs7Ozs7Ozs7QUNWRDtBQUNBOztBQUdBLElBQU1DLHlCQUF5QjtBQUMzQkMsaUJBQWEsU0FEYztBQUUzQkMsYUFBUztBQUNMLGtCQUFVO0FBREw7QUFGa0IsQ0FBL0I7O0FBT0E7Ozs7QUFJZSxTQUFTQyxPQUFULENBQWlCQyxHQUFqQixFQUEwRDtBQUFBLFFBQXBDQyxNQUFvQyx1RUFBM0IsRUFBMkI7QUFBQSxRQUF2QkMsZ0JBQXVCLHVFQUFOLElBQU07O0FBQ3JFO0FBQ0EsUUFBTUMsZ0JBQWdCLFNBQWMsRUFBZCxFQUFrQlAsc0JBQWxCLEVBQTBDSyxNQUExQyxFQUFrRDtBQUNwRUcsZUFBT0gsT0FBT0csS0FBUCxJQUFnQixpRkFBQUMsQ0FBU0osT0FBT0csS0FBaEI7QUFENkMsS0FBbEQsQ0FBdEI7QUFHQSxRQUFJRSxTQUFTTixHQUFiOztBQUVBLFFBQUlHLGNBQWNJLFFBQWxCLEVBQTRCO0FBQ3hCSixzQkFBY0wsT0FBZCxHQUF3QixTQUFjLEVBQWQsRUFBa0JLLGNBQWNMLE9BQWhDLEVBQXlDO0FBQzdELDRCQUFnQjtBQUQ2QyxTQUF6QyxDQUF4QjtBQUdIO0FBQ0QsUUFBSSxDQUFDRSxHQUFMLEVBQVU7QUFDTixlQUFPUSxRQUFRQyxNQUFSLENBQWUsSUFBSUMsS0FBSixDQUFVLDhCQUFWLENBQWYsQ0FBUDtBQUNIOztBQUVELFdBQU8sb0ZBQUFDLENBQVlMLE1BQVosRUFBb0JILGFBQXBCLEVBQ0ZTLElBREUsQ0FDRyxVQUFDQyxHQUFELEVBQVM7QUFDWCxlQUFPWCxtQkFBbUJXLElBQUlDLElBQUosRUFBbkIsR0FDSDtBQUNJQSxrQkFBTUQsSUFBSUMsSUFBSixFQURWO0FBRUlkLGlCQUFLYSxJQUFJYjtBQUZiLFNBREo7QUFLSCxLQVBFLEVBUUZlLEtBUkUsQ0FRSSxVQUFDQyxHQUFELEVBQVM7QUFDWkMsZ0JBQVFDLEtBQVIsQ0FBY0YsR0FBZDtBQUNBLGNBQU1BLEdBQU47QUFDSCxLQVhFLENBQVA7QUFZSCxDOzs7Ozs7O0FDM0NEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EscUJBQXFCLG1EQUFtRDtBQUN4RTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLFVBQVU7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLDBCQUEwQjtBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQSx1Q0FBdUMsU0FBUztBQUNoRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLGlCQUFpQjtBQUNoQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsaUJBQWlCO0FBQzlCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdEQUFnRCxFQUFFO0FBQ2xEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBLGlCQUFpQixTQUFTO0FBQzFCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSx5Q0FBeUM7QUFDekM7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHdCQUF3QixlQUFlO0FBQ3ZDO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLHdCQUF3QixRQUFRO0FBQ2hDO0FBQ0EscUJBQXFCLGVBQWU7QUFDcEM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFlBQVk7QUFDN0I7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQixTQUFTO0FBQzlCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsa0JBQWtCO0FBQ25DO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxtQkFBbUIsY0FBYztBQUNqQztBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsdURBQXVELE9BQU87QUFDOUQ7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBLGtCQUFrQjtBQUNsQjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHFCQUFxQixRQUFRO0FBQzdCO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxlQUFlLFNBQVM7QUFDeEI7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxtQkFBbUIsU0FBUztBQUM1QjtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxpQkFBaUIsWUFBWTtBQUM3Qjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtB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QUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxHQUFHO0FBQ0gs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QUFDQSxFOzs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDaEJBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDTkEsY0FBYyxzQjs7Ozs7O0FDQWQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxFOzs7Ozs7QUNmQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEU7Ozs7OztBQ1BBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDSkE7QUFDQTtBQUNBLG1EQUFtRDtBQUNuRDtBQUNBLHVDQUF1QztBQUN2QyxFOzs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNOQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDJEQUEyRDtBQUMzRCxFOzs7Ozs7QUNMQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRTs7Ozs7O0FDWEE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7O0FDSkE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVELG9DOzs7Ozs7QUNYQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLEU7Ozs7Ozs7QUNSRDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7dURDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHFCQUFxQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGOztBQUVqRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEIsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFlBQVksU0FBUztBQUNyQixZQUFZLFNBQVM7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQztBQUNEOzs7Ozs7OztBQ3JvQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYTs7QUFFYixXQUFXO0FBQ1g7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7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Q0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLFFBQVE7QUFDekI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxPQUFPO0FBQ3RCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUM7QUFDQSw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3REO0FBQ0Esc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQ7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FB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QUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQSxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pEOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxNQUFNO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUI7QUFDckIscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQixxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLHFCQUFxQjtBQUNyQixx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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsYUFBYSxzQkFBc0I7QUFDbkM7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixnQkFBZ0I7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxVQUFVO0FBQ1Y7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esd0RBQXdEO0FBQ3hEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGNBQWM7QUFDL0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsZ0JBQWdCO0FBQ2pDO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSx1QkFBdUI7QUFDcEMsYUFBYSxnQkFBZ0I7QUFDN0I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFVBQVU7QUFDVjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGVBQWU7QUFDaEMsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0EsVUFBVTtBQUNWOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTtBQUNBLGlCQUFpQixPQUFPO0FBQ3hCO0FBQ0EsS0FBSztBQUNMLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsbUJBQW1CLE9BQU87QUFDMUI7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLENBQUM7O0FBRUQsQ0FBQyxpR0FBaUc7Ozs7Ozs7QUNuMUVsRyxlOzs7Ozs7QUNBQSxlIiwiZmlsZSI6ImJ1bmRsZS5qcyIsInNvdXJjZXNDb250ZW50IjpbIihmdW5jdGlvbiB3ZWJwYWNrVW5pdmVyc2FsTW9kdWxlRGVmaW5pdGlvbihyb290LCBmYWN0b3J5KSB7XG5cdGlmKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0Jylcblx0XHRtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKTtcblx0ZWxzZSBpZih0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpXG5cdFx0ZGVmaW5lKFtdLCBmYWN0b3J5KTtcblx0ZWxzZSBpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXG5cdFx0ZXhwb3J0c1tcImpzLWJpZ2NoYWluZGItcXVpY2tzdGFydFwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJqcy1iaWdjaGFpbmRiLXF1aWNrc3RhcnRcIl0gPSBmYWN0b3J5KCk7XG59KSh0aGlzLCBmdW5jdGlvbigpIHtcbnJldHVybiBcblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwiIFx0Ly8gVGhlIG1vZHVsZSBjYWNoZVxuIFx0dmFyIGluc3RhbGxlZE1vZHVsZXMgPSB7fTtcblxuIFx0Ly8gVGhlIHJlcXVpcmUgZnVuY3Rpb25cbiBcdGZ1bmN0aW9uIF9fd2VicGFja19yZXF1aXJlX18obW9kdWxlSWQpIHtcblxuIFx0XHQvLyBDaGVjayBpZiBtb2R1bGUgaXMgaW4gY2FjaGVcbiBcdFx0aWYoaW5zdGFsbGVkTW9kdWxlc1ttb2R1bGVJZF0pXG4gXHRcdFx0cmV0dXJuIGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdLmV4cG9ydHM7XG5cbiBcdFx0Ly8gQ3JlYXRlIGEgbmV3IG1vZHVsZSAoYW5kIHB1dCBpdCBpbnRvIHRoZSBjYWNoZSlcbiBcdFx0dmFyIG1vZHVsZSA9IGluc3RhbGxlZE1vZHVsZXNbbW9kdWxlSWRdID0ge1xuIFx0XHRcdGk6IG1vZHVsZUlkLFxuIFx0XHRcdGw6IGZhbHNlLFxuIFx0XHRcdGV4cG9ydHM6IHt9XG4gXHRcdH07XG5cbiBcdFx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG4gXHRcdG1vZHVsZXNbbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG4gXHRcdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcbiBcdFx0bW9kdWxlLmwgPSB0cnVlO1xuXG4gXHRcdC8vIFJldHVybiB0aGUgZXhwb3J0cyBvZiB0aGUgbW9kdWxlXG4gXHRcdHJldHVybiBtb2R1bGUuZXhwb3J0cztcbiBcdH1cblxuXG4gXHQvLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5tID0gbW9kdWxlcztcblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGUgY2FjaGVcbiBcdF9fd2VicGFja19yZXF1aXJlX18uYyA9IGluc3RhbGxlZE1vZHVsZXM7XG5cbiBcdC8vIGlkZW50aXR5IGZ1bmN0aW9uIGZvciBjYWxsaW5nIGhhcm1vbnkgaW1wb3J0cyB3aXRoIHRoZSBjb3JyZWN0IGNvbnRleHRcbiBcdF9fd2VicGFja19yZXF1aXJlX18uaSA9IGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuIFx0Ly8gZGVmaW5lIGdldHRlciBmdW5jdGlvbiBmb3IgaGFybW9ueSBleHBvcnRzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSBmdW5jdGlvbihleHBvcnRzLCBuYW1lLCBnZXR0ZXIpIHtcbiBcdFx0aWYoIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBuYW1lKSkge1xuIFx0XHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBuYW1lLCB7XG4gXHRcdFx0XHRjb25maWd1cmFibGU6IGZhbHNlLFxuIFx0XHRcdFx0ZW51bWVyYWJsZTogdHJ1ZSxcbiBcdFx0XHRcdGdldDogZ2V0dGVyXG4gXHRcdFx0fSk7XG4gXHRcdH1cbiBcdH07XG5cbiBcdC8vIGdldERlZmF1bHRFeHBvcnQgZnVuY3Rpb24gZm9yIGNvbXBhdGliaWxpdHkgd2l0aCBub24taGFybW9ueSBtb2R1bGVzXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm4gPSBmdW5jdGlvbihtb2R1bGUpIHtcbiBcdFx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0RGVmYXVsdCgpIHsgcmV0dXJuIG1vZHVsZVsnZGVmYXVsdCddOyB9IDpcbiBcdFx0XHRmdW5jdGlvbiBnZXRNb2R1bGVFeHBvcnRzKCkgeyByZXR1cm4gbW9kdWxlOyB9O1xuIFx0XHRfX3dlYnBhY2tfcmVxdWlyZV9fLmQoZ2V0dGVyLCAnYScsIGdldHRlcik7XG4gXHRcdHJldHVybiBnZXR0ZXI7XG4gXHR9O1xuXG4gXHQvLyBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGxcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubyA9IGZ1bmN0aW9uKG9iamVjdCwgcHJvcGVydHkpIHsgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmplY3QsIHByb3BlcnR5KTsgfTtcblxuIFx0Ly8gX193ZWJwYWNrX3B1YmxpY19wYXRoX19cbiBcdF9fd2VicGFja19yZXF1aXJlX18ucCA9IFwiXCI7XG5cbiBcdC8vIExvYWQgZW50cnkgbW9kdWxlIGFuZCByZXR1cm4gZXhwb3J0c1xuIFx0cmV0dXJuIF9fd2VicGFja19yZXF1aXJlX18oX193ZWJwYWNrX3JlcXVpcmVfXy5zID0gOTUpO1xuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIHdlYnBhY2svYm9vdHN0cmFwIDc0OGMxZWZkOTRkYTE2ODMzMzk5IiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QXBpVXJscyhBUElfUEFUSCkge1xuICAgIHJldHVybiB7XG4gICAgICAgICdibG9ja3MnOiBBUElfUEFUSCArICdibG9ja3MnLFxuICAgICAgICAnYmxvY2tzX2RldGFpbCc6IEFQSV9QQVRIICsgJ2Jsb2Nrcy8lKGJsb2NrSWQpcycsXG4gICAgICAgICdvdXRwdXRzJzogQVBJX1BBVEggKyAnb3V0cHV0cycsXG4gICAgICAgICdzdGF0dXNlcyc6IEFQSV9QQVRIICsgJ3N0YXR1c2VzJyxcbiAgICAgICAgJ3RyYW5zYWN0aW9ucyc6IEFQSV9QQVRIICsgJ3RyYW5zYWN0aW9ucycsXG4gICAgICAgICd0cmFuc2FjdGlvbnNfZGV0YWlsJzogQVBJX1BBVEggKyAndHJhbnNhY3Rpb25zLyUodHhJZClzJyxcbiAgICAgICAgJ3ZvdGVzJzogQVBJX1BBVEggKyAndm90ZXMnXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9nZXRBcGlVcmxzLmpzIiwiaW1wb3J0IGJhc2VSZXF1ZXN0IGZyb20gJy4vYmFzZVJlcXVlc3QnO1xuaW1wb3J0IHNhbml0aXplIGZyb20gJy4vc2FuaXRpemUnO1xuXG5cbmNvbnN0IERFRkFVTFRfUkVRVUVTVF9DT05GSUcgPSB7XG4gICAgY3JlZGVudGlhbHM6ICdpbmNsdWRlJyxcbiAgICBoZWFkZXJzOiB7XG4gICAgICAgICdBY2NlcHQnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICB9XG59O1xuXG4vKipcbiAqIFNtYWxsIHdyYXBwZXIgYXJvdW5kIGpzLXV0aWxpdHktYmVsdCdzIHJlcXVlc3QgdGhhdCBwcm92aWRlcyB1cmwgcmVzb2x2aW5nLCBkZWZhdWx0IHNldHRpbmdzLCBhbmRcbiAqIHJlc3BvbnNlIGhhbmRsaW5nLlxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiByZXF1ZXN0KHVybCwgY29uZmlnID0ge30sIG9ubHlKc29uUmVzcG9uc2U9dHJ1ZSkge1xuICAgIC8vIExvYWQgZGVmYXVsdCBmZXRjaCBjb25maWd1cmF0aW9uIGFuZCByZW1vdmUgYW55IGZhbHN5IHF1ZXJ5IHBhcmFtZXRlcnNcbiAgICBjb25zdCByZXF1ZXN0Q29uZmlnID0gT2JqZWN0LmFzc2lnbih7fSwgREVGQVVMVF9SRVFVRVNUX0NPTkZJRywgY29uZmlnLCB7XG4gICAgICAgIHF1ZXJ5OiBjb25maWcucXVlcnkgJiYgc2FuaXRpemUoY29uZmlnLnF1ZXJ5KVxuICAgIH0pO1xuICAgIGxldCBhcGlVcmwgPSB1cmw7XG5cbiAgICBpZiAocmVxdWVzdENvbmZpZy5qc29uQm9keSkge1xuICAgICAgICByZXF1ZXN0Q29uZmlnLmhlYWRlcnMgPSBPYmplY3QuYXNzaWduKHt9LCByZXF1ZXN0Q29uZmlnLmhlYWRlcnMsIHtcbiAgICAgICAgICAgICdDb250ZW50LVR5cGUnOiAnYXBwbGljYXRpb24vanNvbidcbiAgICAgICAgfSk7XG4gICAgfVxuICAgIGlmICghdXJsKSB7XG4gICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1JlcXVlc3Qgd2FzIG5vdCBnaXZlbiBhIHVybC4nKSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIGJhc2VSZXF1ZXN0KGFwaVVybCwgcmVxdWVzdENvbmZpZylcbiAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgcmV0dXJuIG9ubHlKc29uUmVzcG9uc2UgPyByZXMuanNvbigpIDpcbiAgICAgICAgICAgICAgICB7XG4gICAgICAgICAgICAgICAgICAgIGpzb246IHJlcy5qc29uKCksXG4gICAgICAgICAgICAgICAgICAgIHVybDogcmVzLnVybFxuICAgICAgICAgICAgICAgIH07XG4gICAgICAgIH0pXG4gICAgICAgIC5jYXRjaCgoZXJyKSA9PiB7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGVycik7XG4gICAgICAgICAgICB0aHJvdyBlcnI7XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvcmVxdWVzdC5qcyIsIi8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbi8qIGVzbGludC1kaXNhYmxlIG5vLXByb3RvICovXG5cbid1c2Ugc3RyaWN0J1xuXG52YXIgYmFzZTY0ID0gcmVxdWlyZSgnYmFzZTY0LWpzJylcbnZhciBpZWVlNzU0ID0gcmVxdWlyZSgnaWVlZTc1NCcpXG52YXIgaXNBcnJheSA9IHJlcXVpcmUoJ2lzYXJyYXknKVxuXG5leHBvcnRzLkJ1ZmZlciA9IEJ1ZmZlclxuZXhwb3J0cy5TbG93QnVmZmVyID0gU2xvd0J1ZmZlclxuZXhwb3J0cy5JTlNQRUNUX01BWF9CWVRFUyA9IDUwXG5cbi8qKlxuICogSWYgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYDpcbiAqICAgPT09IHRydWUgICAgVXNlIFVpbnQ4QXJyYXkgaW1wbGVtZW50YXRpb24gKGZhc3Rlc3QpXG4gKiAgID09PSBmYWxzZSAgIFVzZSBPYmplY3QgaW1wbGVtZW50YXRpb24gKG1vc3QgY29tcGF0aWJsZSwgZXZlbiBJRTYpXG4gKlxuICogQnJvd3NlcnMgdGhhdCBzdXBwb3J0IHR5cGVkIGFycmF5cyBhcmUgSUUgMTArLCBGaXJlZm94IDQrLCBDaHJvbWUgNyssIFNhZmFyaSA1LjErLFxuICogT3BlcmEgMTEuNissIGlPUyA0LjIrLlxuICpcbiAqIER1ZSB0byB2YXJpb3VzIGJyb3dzZXIgYnVncywgc29tZXRpbWVzIHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24gd2lsbCBiZSB1c2VkIGV2ZW5cbiAqIHdoZW4gdGhlIGJyb3dzZXIgc3VwcG9ydHMgdHlwZWQgYXJyYXlzLlxuICpcbiAqIE5vdGU6XG4gKlxuICogICAtIEZpcmVmb3ggNC0yOSBsYWNrcyBzdXBwb3J0IGZvciBhZGRpbmcgbmV3IHByb3BlcnRpZXMgdG8gYFVpbnQ4QXJyYXlgIGluc3RhbmNlcyxcbiAqICAgICBTZWU6IGh0dHBzOi8vYnVnemlsbGEubW96aWxsYS5vcmcvc2hvd19idWcuY2dpP2lkPTY5NTQzOC5cbiAqXG4gKiAgIC0gQ2hyb21lIDktMTAgaXMgbWlzc2luZyB0aGUgYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbi5cbiAqXG4gKiAgIC0gSUUxMCBoYXMgYSBicm9rZW4gYFR5cGVkQXJyYXkucHJvdG90eXBlLnN1YmFycmF5YCBmdW5jdGlvbiB3aGljaCByZXR1cm5zIGFycmF5cyBvZlxuICogICAgIGluY29ycmVjdCBsZW5ndGggaW4gc29tZSBzaXR1YXRpb25zLlxuXG4gKiBXZSBkZXRlY3QgdGhlc2UgYnVnZ3kgYnJvd3NlcnMgYW5kIHNldCBgQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlRgIHRvIGBmYWxzZWAgc28gdGhleVxuICogZ2V0IHRoZSBPYmplY3QgaW1wbGVtZW50YXRpb24sIHdoaWNoIGlzIHNsb3dlciBidXQgYmVoYXZlcyBjb3JyZWN0bHkuXG4gKi9cbkJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUID0gZ2xvYmFsLlRZUEVEX0FSUkFZX1NVUFBPUlQgIT09IHVuZGVmaW5lZFxuICA/IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gIDogdHlwZWRBcnJheVN1cHBvcnQoKVxuXG4vKlxuICogRXhwb3J0IGtNYXhMZW5ndGggYWZ0ZXIgdHlwZWQgYXJyYXkgc3VwcG9ydCBpcyBkZXRlcm1pbmVkLlxuICovXG5leHBvcnRzLmtNYXhMZW5ndGggPSBrTWF4TGVuZ3RoKClcblxuZnVuY3Rpb24gdHlwZWRBcnJheVN1cHBvcnQgKCkge1xuICB0cnkge1xuICAgIHZhciBhcnIgPSBuZXcgVWludDhBcnJheSgxKVxuICAgIGFyci5fX3Byb3RvX18gPSB7X19wcm90b19fOiBVaW50OEFycmF5LnByb3RvdHlwZSwgZm9vOiBmdW5jdGlvbiAoKSB7IHJldHVybiA0MiB9fVxuICAgIHJldHVybiBhcnIuZm9vKCkgPT09IDQyICYmIC8vIHR5cGVkIGFycmF5IGluc3RhbmNlcyBjYW4gYmUgYXVnbWVudGVkXG4gICAgICAgIHR5cGVvZiBhcnIuc3ViYXJyYXkgPT09ICdmdW5jdGlvbicgJiYgLy8gY2hyb21lIDktMTAgbGFjayBgc3ViYXJyYXlgXG4gICAgICAgIGFyci5zdWJhcnJheSgxLCAxKS5ieXRlTGVuZ3RoID09PSAwIC8vIGllMTAgaGFzIGJyb2tlbiBgc3ViYXJyYXlgXG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gZmFsc2VcbiAgfVxufVxuXG5mdW5jdGlvbiBrTWF4TGVuZ3RoICgpIHtcbiAgcmV0dXJuIEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUXG4gICAgPyAweDdmZmZmZmZmXG4gICAgOiAweDNmZmZmZmZmXG59XG5cbmZ1bmN0aW9uIGNyZWF0ZUJ1ZmZlciAodGhhdCwgbGVuZ3RoKSB7XG4gIGlmIChrTWF4TGVuZ3RoKCkgPCBsZW5ndGgpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW52YWxpZCB0eXBlZCBhcnJheSBsZW5ndGgnKVxuICB9XG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBuZXcgVWludDhBcnJheShsZW5ndGgpXG4gICAgdGhhdC5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgLy8gRmFsbGJhY2s6IFJldHVybiBhbiBvYmplY3QgaW5zdGFuY2Ugb2YgdGhlIEJ1ZmZlciBjbGFzc1xuICAgIGlmICh0aGF0ID09PSBudWxsKSB7XG4gICAgICB0aGF0ID0gbmV3IEJ1ZmZlcihsZW5ndGgpXG4gICAgfVxuICAgIHRoYXQubGVuZ3RoID0gbGVuZ3RoXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIFRoZSBCdWZmZXIgY29uc3RydWN0b3IgcmV0dXJucyBpbnN0YW5jZXMgb2YgYFVpbnQ4QXJyYXlgIHRoYXQgaGF2ZSB0aGVpclxuICogcHJvdG90eXBlIGNoYW5nZWQgdG8gYEJ1ZmZlci5wcm90b3R5cGVgLiBGdXJ0aGVybW9yZSwgYEJ1ZmZlcmAgaXMgYSBzdWJjbGFzcyBvZlxuICogYFVpbnQ4QXJyYXlgLCBzbyB0aGUgcmV0dXJuZWQgaW5zdGFuY2VzIHdpbGwgaGF2ZSBhbGwgdGhlIG5vZGUgYEJ1ZmZlcmAgbWV0aG9kc1xuICogYW5kIHRoZSBgVWludDhBcnJheWAgbWV0aG9kcy4gU3F1YXJlIGJyYWNrZXQgbm90YXRpb24gd29ya3MgYXMgZXhwZWN0ZWQgLS0gaXRcbiAqIHJldHVybnMgYSBzaW5nbGUgb2N0ZXQuXG4gKlxuICogVGhlIGBVaW50OEFycmF5YCBwcm90b3R5cGUgcmVtYWlucyB1bm1vZGlmaWVkLlxuICovXG5cbmZ1bmN0aW9uIEJ1ZmZlciAoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJiAhKHRoaXMgaW5zdGFuY2VvZiBCdWZmZXIpKSB7XG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICAvLyBDb21tb24gY2FzZS5cbiAgaWYgKHR5cGVvZiBhcmcgPT09ICdudW1iZXInKSB7XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZ09yT2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgICAnSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcnXG4gICAgICApXG4gICAgfVxuICAgIHJldHVybiBhbGxvY1Vuc2FmZSh0aGlzLCBhcmcpXG4gIH1cbiAgcmV0dXJuIGZyb20odGhpcywgYXJnLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wb29sU2l6ZSA9IDgxOTIgLy8gbm90IHVzZWQgYnkgdGhpcyBpbXBsZW1lbnRhdGlvblxuXG4vLyBUT0RPOiBMZWdhY3ksIG5vdCBuZWVkZWQgYW55bW9yZS4gUmVtb3ZlIGluIG5leHQgbWFqb3IgdmVyc2lvbi5cbkJ1ZmZlci5fYXVnbWVudCA9IGZ1bmN0aW9uIChhcnIpIHtcbiAgYXJyLl9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgcmV0dXJuIGFyclxufVxuXG5mdW5jdGlvbiBmcm9tICh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICh0eXBlb2YgdmFsdWUgPT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJylcbiAgfVxuXG4gIGlmICh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmIHZhbHVlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHtcbiAgICByZXR1cm4gZnJvbUFycmF5QnVmZmVyKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAodHlwZW9mIHZhbHVlID09PSAnc3RyaW5nJykge1xuICAgIHJldHVybiBmcm9tU3RyaW5nKHRoYXQsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0KVxuICB9XG5cbiAgcmV0dXJuIGZyb21PYmplY3QodGhhdCwgdmFsdWUpXG59XG5cbi8qKlxuICogRnVuY3Rpb25hbGx5IGVxdWl2YWxlbnQgdG8gQnVmZmVyKGFyZywgZW5jb2RpbmcpIGJ1dCB0aHJvd3MgYSBUeXBlRXJyb3JcbiAqIGlmIHZhbHVlIGlzIGEgbnVtYmVyLlxuICogQnVmZmVyLmZyb20oc3RyWywgZW5jb2RpbmddKVxuICogQnVmZmVyLmZyb20oYXJyYXkpXG4gKiBCdWZmZXIuZnJvbShidWZmZXIpXG4gKiBCdWZmZXIuZnJvbShhcnJheUJ1ZmZlclssIGJ5dGVPZmZzZXRbLCBsZW5ndGhdXSlcbiAqKi9cbkJ1ZmZlci5mcm9tID0gZnVuY3Rpb24gKHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGZyb20obnVsbCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aClcbn1cblxuaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gIEJ1ZmZlci5wcm90b3R5cGUuX19wcm90b19fID0gVWludDhBcnJheS5wcm90b3R5cGVcbiAgQnVmZmVyLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXlcbiAgaWYgKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC5zcGVjaWVzICYmXG4gICAgICBCdWZmZXJbU3ltYm9sLnNwZWNpZXNdID09PSBCdWZmZXIpIHtcbiAgICAvLyBGaXggc3ViYXJyYXkoKSBpbiBFUzIwMTYuIFNlZTogaHR0cHM6Ly9naXRodWIuY29tL2Zlcm9zcy9idWZmZXIvcHVsbC85N1xuICAgIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShCdWZmZXIsIFN5bWJvbC5zcGVjaWVzLCB7XG4gICAgICB2YWx1ZTogbnVsbCxcbiAgICAgIGNvbmZpZ3VyYWJsZTogdHJ1ZVxuICAgIH0pXG4gIH1cbn1cblxuZnVuY3Rpb24gYXNzZXJ0U2l6ZSAoc2l6ZSkge1xuICBpZiAodHlwZW9mIHNpemUgIT09ICdudW1iZXInKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpXG4gIH0gZWxzZSBpZiAoc2l6ZSA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKVxuICB9XG59XG5cbmZ1bmN0aW9uIGFsbG9jICh0aGF0LCBzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICBhc3NlcnRTaXplKHNpemUpXG4gIGlmIChzaXplIDw9IDApIHtcbiAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG4gIH1cbiAgaWYgKGZpbGwgIT09IHVuZGVmaW5lZCkge1xuICAgIC8vIE9ubHkgcGF5IGF0dGVudGlvbiB0byBlbmNvZGluZyBpZiBpdCdzIGEgc3RyaW5nLiBUaGlzXG4gICAgLy8gcHJldmVudHMgYWNjaWRlbnRhbGx5IHNlbmRpbmcgaW4gYSBudW1iZXIgdGhhdCB3b3VsZFxuICAgIC8vIGJlIGludGVycHJldHRlZCBhcyBhIHN0YXJ0IG9mZnNldC5cbiAgICByZXR1cm4gdHlwZW9mIGVuY29kaW5nID09PSAnc3RyaW5nJ1xuICAgICAgPyBjcmVhdGVCdWZmZXIodGhhdCwgc2l6ZSkuZmlsbChmaWxsLCBlbmNvZGluZylcbiAgICAgIDogY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbClcbiAgfVxuICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpXG59XG5cbi8qKlxuICogQ3JlYXRlcyBhIG5ldyBmaWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICogYWxsb2Moc2l6ZVssIGZpbGxbLCBlbmNvZGluZ11dKVxuICoqL1xuQnVmZmVyLmFsbG9jID0gZnVuY3Rpb24gKHNpemUsIGZpbGwsIGVuY29kaW5nKSB7XG4gIHJldHVybiBhbGxvYyhudWxsLCBzaXplLCBmaWxsLCBlbmNvZGluZylcbn1cblxuZnVuY3Rpb24gYWxsb2NVbnNhZmUgKHRoYXQsIHNpemUpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICB0aGF0ID0gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUgPCAwID8gMCA6IGNoZWNrZWQoc2l6ZSkgfCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaXplOyArK2kpIHtcbiAgICAgIHRoYXRbaV0gPSAwXG4gICAgfVxuICB9XG4gIHJldHVybiB0aGF0XG59XG5cbi8qKlxuICogRXF1aXZhbGVudCB0byBCdWZmZXIobnVtKSwgYnkgZGVmYXVsdCBjcmVhdGVzIGEgbm9uLXplcm8tZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqICovXG5CdWZmZXIuYWxsb2NVbnNhZmUgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cbi8qKlxuICogRXF1aXZhbGVudCB0byBTbG93QnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKi9cbkJ1ZmZlci5hbGxvY1Vuc2FmZVNsb3cgPSBmdW5jdGlvbiAoc2l6ZSkge1xuICByZXR1cm4gYWxsb2NVbnNhZmUobnVsbCwgc2l6ZSlcbn1cblxuZnVuY3Rpb24gZnJvbVN0cmluZyAodGhhdCwgc3RyaW5nLCBlbmNvZGluZykge1xuICBpZiAodHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJyB8fCBlbmNvZGluZyA9PT0gJycpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICB9XG5cbiAgaWYgKCFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpXG4gIH1cblxuICB2YXIgbGVuZ3RoID0gYnl0ZUxlbmd0aChzdHJpbmcsIGVuY29kaW5nKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG5cbiAgdmFyIGFjdHVhbCA9IHRoYXQud3JpdGUoc3RyaW5nLCBlbmNvZGluZylcblxuICBpZiAoYWN0dWFsICE9PSBsZW5ndGgpIHtcbiAgICAvLyBXcml0aW5nIGEgaGV4IHN0cmluZywgZm9yIGV4YW1wbGUsIHRoYXQgY29udGFpbnMgaW52YWxpZCBjaGFyYWN0ZXJzIHdpbGxcbiAgICAvLyBjYXVzZSBldmVyeXRoaW5nIGFmdGVyIHRoZSBmaXJzdCBpbnZhbGlkIGNoYXJhY3RlciB0byBiZSBpZ25vcmVkLiAoZS5nLlxuICAgIC8vICdhYnh4Y2QnIHdpbGwgYmUgdHJlYXRlZCBhcyAnYWInKVxuICAgIHRoYXQgPSB0aGF0LnNsaWNlKDAsIGFjdHVhbClcbiAgfVxuXG4gIHJldHVybiB0aGF0XG59XG5cbmZ1bmN0aW9uIGZyb21BcnJheUxpa2UgKHRoYXQsIGFycmF5KSB7XG4gIHZhciBsZW5ndGggPSBhcnJheS5sZW5ndGggPCAwID8gMCA6IGNoZWNrZWQoYXJyYXkubGVuZ3RoKSB8IDBcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW5ndGgpXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICB0aGF0W2ldID0gYXJyYXlbaV0gJiAyNTVcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlCdWZmZXIgKHRoYXQsIGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpIHtcbiAgYXJyYXkuYnl0ZUxlbmd0aCAvLyB0aGlzIHRocm93cyBpZiBgYXJyYXlgIGlzIG5vdCBhIHZhbGlkIEFycmF5QnVmZmVyXG5cbiAgaWYgKGJ5dGVPZmZzZXQgPCAwIHx8IGFycmF5LmJ5dGVMZW5ndGggPCBieXRlT2Zmc2V0KSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ29mZnNldFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCArIChsZW5ndGggfHwgMCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignXFwnbGVuZ3RoXFwnIGlzIG91dCBvZiBib3VuZHMnKVxuICB9XG5cbiAgaWYgKGJ5dGVPZmZzZXQgPT09IHVuZGVmaW5lZCAmJiBsZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXkpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0KVxuICB9IGVsc2Uge1xuICAgIGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoYXJyYXksIGJ5dGVPZmZzZXQsIGxlbmd0aClcbiAgfVxuXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIFJldHVybiBhbiBhdWdtZW50ZWQgYFVpbnQ4QXJyYXlgIGluc3RhbmNlLCBmb3IgYmVzdCBwZXJmb3JtYW5jZVxuICAgIHRoYXQgPSBhcnJheVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICB0aGF0ID0gZnJvbUFycmF5TGlrZSh0aGF0LCBhcnJheSlcbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tT2JqZWN0ICh0aGF0LCBvYmopIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihvYmopKSB7XG4gICAgdmFyIGxlbiA9IGNoZWNrZWQob2JqLmxlbmd0aCkgfCAwXG4gICAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBsZW4pXG5cbiAgICBpZiAodGhhdC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiB0aGF0XG4gICAgfVxuXG4gICAgb2JqLmNvcHkodGhhdCwgMCwgMCwgbGVuKVxuICAgIHJldHVybiB0aGF0XG4gIH1cblxuICBpZiAob2JqKSB7XG4gICAgaWYgKCh0eXBlb2YgQXJyYXlCdWZmZXIgIT09ICd1bmRlZmluZWQnICYmXG4gICAgICAgIG9iai5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikgfHwgJ2xlbmd0aCcgaW4gb2JqKSB7XG4gICAgICBpZiAodHlwZW9mIG9iai5sZW5ndGggIT09ICdudW1iZXInIHx8IGlzbmFuKG9iai5sZW5ndGgpKSB7XG4gICAgICAgIHJldHVybiBjcmVhdGVCdWZmZXIodGhhdCwgMClcbiAgICAgIH1cbiAgICAgIHJldHVybiBmcm9tQXJyYXlMaWtlKHRoYXQsIG9iailcbiAgICB9XG5cbiAgICBpZiAob2JqLnR5cGUgPT09ICdCdWZmZXInICYmIGlzQXJyYXkob2JqLmRhdGEpKSB7XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmouZGF0YSlcbiAgICB9XG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuJylcbn1cblxuZnVuY3Rpb24gY2hlY2tlZCAobGVuZ3RoKSB7XG4gIC8vIE5vdGU6IGNhbm5vdCB1c2UgYGxlbmd0aCA8IGtNYXhMZW5ndGgoKWAgaGVyZSBiZWNhdXNlIHRoYXQgZmFpbHMgd2hlblxuICAvLyBsZW5ndGggaXMgTmFOICh3aGljaCBpcyBvdGhlcndpc2UgY29lcmNlZCB0byB6ZXJvLilcbiAgaWYgKGxlbmd0aCA+PSBrTWF4TGVuZ3RoKCkpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSAnICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAnc2l6ZTogMHgnICsga01heExlbmd0aCgpLnRvU3RyaW5nKDE2KSArICcgYnl0ZXMnKVxuICB9XG4gIHJldHVybiBsZW5ndGggfCAwXG59XG5cbmZ1bmN0aW9uIFNsb3dCdWZmZXIgKGxlbmd0aCkge1xuICBpZiAoK2xlbmd0aCAhPSBsZW5ndGgpIHsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBlcWVxZXFcbiAgICBsZW5ndGggPSAwXG4gIH1cbiAgcmV0dXJuIEJ1ZmZlci5hbGxvYygrbGVuZ3RoKVxufVxuXG5CdWZmZXIuaXNCdWZmZXIgPSBmdW5jdGlvbiBpc0J1ZmZlciAoYikge1xuICByZXR1cm4gISEoYiAhPSBudWxsICYmIGIuX2lzQnVmZmVyKVxufVxuXG5CdWZmZXIuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKGEsIGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYSkgfHwgIUJ1ZmZlci5pc0J1ZmZlcihiKSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGEgPT09IGIpIHJldHVybiAwXG5cbiAgdmFyIHggPSBhLmxlbmd0aFxuICB2YXIgeSA9IGIubGVuZ3RoXG5cbiAgZm9yICh2YXIgaSA9IDAsIGxlbiA9IE1hdGgubWluKHgsIHkpOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAoYVtpXSAhPT0gYltpXSkge1xuICAgICAgeCA9IGFbaV1cbiAgICAgIHkgPSBiW2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuQnVmZmVyLmlzRW5jb2RpbmcgPSBmdW5jdGlvbiBpc0VuY29kaW5nIChlbmNvZGluZykge1xuICBzd2l0Y2ggKFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKSkge1xuICAgIGNhc2UgJ2hleCc6XG4gICAgY2FzZSAndXRmOCc6XG4gICAgY2FzZSAndXRmLTgnOlxuICAgIGNhc2UgJ2FzY2lpJzpcbiAgICBjYXNlICdsYXRpbjEnOlxuICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgY2FzZSAnYmFzZTY0JzpcbiAgICBjYXNlICd1Y3MyJzpcbiAgICBjYXNlICd1Y3MtMic6XG4gICAgY2FzZSAndXRmMTZsZSc6XG4gICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgcmV0dXJuIHRydWVcbiAgICBkZWZhdWx0OlxuICAgICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuQnVmZmVyLmNvbmNhdCA9IGZ1bmN0aW9uIGNvbmNhdCAobGlzdCwgbGVuZ3RoKSB7XG4gIGlmICghaXNBcnJheShsaXN0KSkge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gIH1cblxuICBpZiAobGlzdC5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm4gQnVmZmVyLmFsbG9jKDApXG4gIH1cblxuICB2YXIgaVxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBsZW5ndGggPSAwXG4gICAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICAgIGxlbmd0aCArPSBsaXN0W2ldLmxlbmd0aFxuICAgIH1cbiAgfVxuXG4gIHZhciBidWZmZXIgPSBCdWZmZXIuYWxsb2NVbnNhZmUobGVuZ3RoKVxuICB2YXIgcG9zID0gMFxuICBmb3IgKGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7ICsraSkge1xuICAgIHZhciBidWYgPSBsaXN0W2ldXG4gICAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYnVmKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJylcbiAgICB9XG4gICAgYnVmLmNvcHkoYnVmZmVyLCBwb3MpXG4gICAgcG9zICs9IGJ1Zi5sZW5ndGhcbiAgfVxuICByZXR1cm4gYnVmZmVyXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcihzdHJpbmcpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5sZW5ndGhcbiAgfVxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3ID09PSAnZnVuY3Rpb24nICYmXG4gICAgICAoQXJyYXlCdWZmZXIuaXNWaWV3KHN0cmluZykgfHwgc3RyaW5nIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSB7XG4gICAgcmV0dXJuIHN0cmluZy5ieXRlTGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBzdHJpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgc3RyaW5nID0gJycgKyBzdHJpbmdcbiAgfVxuXG4gIHZhciBsZW4gPSBzdHJpbmcubGVuZ3RoXG4gIGlmIChsZW4gPT09IDApIHJldHVybiAwXG5cbiAgLy8gVXNlIGEgZm9yIGxvb3AgdG8gYXZvaWQgcmVjdXJzaW9uXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxlblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICBjYXNlIHVuZGVmaW5lZDpcbiAgICAgICAgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gbGVuICogMlxuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGxlbiA+Pj4gMVxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFRvQnl0ZXMoc3RyaW5nKS5sZW5ndGhcbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgcmV0dXJuIHV0ZjhUb0J5dGVzKHN0cmluZykubGVuZ3RoIC8vIGFzc3VtZSB1dGY4XG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5CdWZmZXIuYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGhcblxuZnVuY3Rpb24gc2xvd1RvU3RyaW5nIChlbmNvZGluZywgc3RhcnQsIGVuZCkge1xuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuXG4gIC8vIE5vIG5lZWQgdG8gdmVyaWZ5IHRoYXQgXCJ0aGlzLmxlbmd0aCA8PSBNQVhfVUlOVDMyXCIgc2luY2UgaXQncyBhIHJlYWQtb25seVxuICAvLyBwcm9wZXJ0eSBvZiBhIHR5cGVkIGFycmF5LlxuXG4gIC8vIFRoaXMgYmVoYXZlcyBuZWl0aGVyIGxpa2UgU3RyaW5nIG5vciBVaW50OEFycmF5IGluIHRoYXQgd2Ugc2V0IHN0YXJ0L2VuZFxuICAvLyB0byB0aGVpciB1cHBlci9sb3dlciBib3VuZHMgaWYgdGhlIHZhbHVlIHBhc3NlZCBpcyBvdXQgb2YgcmFuZ2UuXG4gIC8vIHVuZGVmaW5lZCBpcyBoYW5kbGVkIHNwZWNpYWxseSBhcyBwZXIgRUNNQS0yNjIgNnRoIEVkaXRpb24sXG4gIC8vIFNlY3Rpb24gMTMuMy4zLjcgUnVudGltZSBTZW1hbnRpY3M6IEtleWVkQmluZGluZ0luaXRpYWxpemF0aW9uLlxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCB8fCBzdGFydCA8IDApIHtcbiAgICBzdGFydCA9IDBcbiAgfVxuICAvLyBSZXR1cm4gZWFybHkgaWYgc3RhcnQgPiB0aGlzLmxlbmd0aC4gRG9uZSBoZXJlIHRvIHByZXZlbnQgcG90ZW50aWFsIHVpbnQzMlxuICAvLyBjb2VyY2lvbiBmYWlsIGJlbG93LlxuICBpZiAoc3RhcnQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkIHx8IGVuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChlbmQgPD0gMCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgLy8gRm9yY2UgY29lcnNpb24gdG8gdWludDMyLiBUaGlzIHdpbGwgYWxzbyBjb2VyY2UgZmFsc2V5L05hTiB2YWx1ZXMgdG8gMC5cbiAgZW5kID4+Pj0gMFxuICBzdGFydCA+Pj49IDBcblxuICBpZiAoZW5kIDw9IHN0YXJ0KSB7XG4gICAgcmV0dXJuICcnXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHdoaWxlICh0cnVlKSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnaGV4JzpcbiAgICAgICAgcmV0dXJuIGhleFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgICByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2FzY2lpJzpcbiAgICAgICAgcmV0dXJuIGFzY2lpU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsYXRpbjFTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdiYXNlNjQnOlxuICAgICAgICByZXR1cm4gYmFzZTY0U2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIHV0ZjE2bGVTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICAgICAgZW5jb2RpbmcgPSAoZW5jb2RpbmcgKyAnJykudG9Mb3dlckNhc2UoKVxuICAgICAgICBsb3dlcmVkQ2FzZSA9IHRydWVcbiAgICB9XG4gIH1cbn1cblxuLy8gVGhlIHByb3BlcnR5IGlzIHVzZWQgYnkgYEJ1ZmZlci5pc0J1ZmZlcmAgYW5kIGBpcy1idWZmZXJgIChpbiBTYWZhcmkgNS03KSB0byBkZXRlY3Rcbi8vIEJ1ZmZlciBpbnN0YW5jZXMuXG5CdWZmZXIucHJvdG90eXBlLl9pc0J1ZmZlciA9IHRydWVcblxuZnVuY3Rpb24gc3dhcCAoYiwgbiwgbSkge1xuICB2YXIgaSA9IGJbbl1cbiAgYltuXSA9IGJbbV1cbiAgYlttXSA9IGlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwMTYgPSBmdW5jdGlvbiBzd2FwMTYgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDIgIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDE2LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyAxKVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDMyID0gZnVuY3Rpb24gc3dhcDMyICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSA0ICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSA0KSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMylcbiAgICBzd2FwKHRoaXMsIGkgKyAxLCBpICsgMilcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXA2NCA9IGZ1bmN0aW9uIHN3YXA2NCAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgOCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gOCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDcpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDYpXG4gICAgc3dhcCh0aGlzLCBpICsgMiwgaSArIDUpXG4gICAgc3dhcCh0aGlzLCBpICsgMywgaSArIDQpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS50b1N0cmluZyA9IGZ1bmN0aW9uIHRvU3RyaW5nICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoIHwgMFxuICBpZiAobGVuZ3RoID09PSAwKSByZXR1cm4gJydcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPT09IDApIHJldHVybiB1dGY4U2xpY2UodGhpcywgMCwgbGVuZ3RoKVxuICByZXR1cm4gc2xvd1RvU3RyaW5nLmFwcGx5KHRoaXMsIGFyZ3VtZW50cylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5lcXVhbHMgPSBmdW5jdGlvbiBlcXVhbHMgKGIpIHtcbiAgaWYgKCFCdWZmZXIuaXNCdWZmZXIoYikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ0FyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXInKVxuICBpZiAodGhpcyA9PT0gYikgcmV0dXJuIHRydWVcbiAgcmV0dXJuIEJ1ZmZlci5jb21wYXJlKHRoaXMsIGIpID09PSAwXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5zcGVjdCA9IGZ1bmN0aW9uIGluc3BlY3QgKCkge1xuICB2YXIgc3RyID0gJydcbiAgdmFyIG1heCA9IGV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVNcbiAgaWYgKHRoaXMubGVuZ3RoID4gMCkge1xuICAgIHN0ciA9IHRoaXMudG9TdHJpbmcoJ2hleCcsIDAsIG1heCkubWF0Y2goLy57Mn0vZykuam9pbignICcpXG4gICAgaWYgKHRoaXMubGVuZ3RoID4gbWF4KSBzdHIgKz0gJyAuLi4gJ1xuICB9XG4gIHJldHVybiAnPEJ1ZmZlciAnICsgc3RyICsgJz4nXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuY29tcGFyZSA9IGZ1bmN0aW9uIGNvbXBhcmUgKHRhcmdldCwgc3RhcnQsIGVuZCwgdGhpc1N0YXJ0LCB0aGlzRW5kKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKHRhcmdldCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgfVxuXG4gIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgaWYgKGVuZCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5kID0gdGFyZ2V0ID8gdGFyZ2V0Lmxlbmd0aCA6IDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzU3RhcnQgPSAwXG4gIH1cbiAgaWYgKHRoaXNFbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIHRoaXNFbmQgPSB0aGlzLmxlbmd0aFxuICB9XG5cbiAgaWYgKHN0YXJ0IDwgMCB8fCBlbmQgPiB0YXJnZXQubGVuZ3RoIHx8IHRoaXNTdGFydCA8IDAgfHwgdGhpc0VuZCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ291dCBvZiByYW5nZSBpbmRleCcpXG4gIH1cblxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQgJiYgc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDBcbiAgfVxuICBpZiAodGhpc1N0YXJ0ID49IHRoaXNFbmQpIHtcbiAgICByZXR1cm4gLTFcbiAgfVxuICBpZiAoc3RhcnQgPj0gZW5kKSB7XG4gICAgcmV0dXJuIDFcbiAgfVxuXG4gIHN0YXJ0ID4+Pj0gMFxuICBlbmQgPj4+PSAwXG4gIHRoaXNTdGFydCA+Pj49IDBcbiAgdGhpc0VuZCA+Pj49IDBcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0KSByZXR1cm4gMFxuXG4gIHZhciB4ID0gdGhpc0VuZCAtIHRoaXNTdGFydFxuICB2YXIgeSA9IGVuZCAtIHN0YXJ0XG4gIHZhciBsZW4gPSBNYXRoLm1pbih4LCB5KVxuXG4gIHZhciB0aGlzQ29weSA9IHRoaXMuc2xpY2UodGhpc1N0YXJ0LCB0aGlzRW5kKVxuICB2YXIgdGFyZ2V0Q29weSA9IHRhcmdldC5zbGljZShzdGFydCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICBpZiAodGhpc0NvcHlbaV0gIT09IHRhcmdldENvcHlbaV0pIHtcbiAgICAgIHggPSB0aGlzQ29weVtpXVxuICAgICAgeSA9IHRhcmdldENvcHlbaV1cbiAgICAgIGJyZWFrXG4gICAgfVxuICB9XG5cbiAgaWYgKHggPCB5KSByZXR1cm4gLTFcbiAgaWYgKHkgPCB4KSByZXR1cm4gMVxuICByZXR1cm4gMFxufVxuXG4vLyBGaW5kcyBlaXRoZXIgdGhlIGZpcnN0IGluZGV4IG9mIGB2YWxgIGluIGBidWZmZXJgIGF0IG9mZnNldCA+PSBgYnl0ZU9mZnNldGAsXG4vLyBPUiB0aGUgbGFzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPD0gYGJ5dGVPZmZzZXRgLlxuLy9cbi8vIEFyZ3VtZW50czpcbi8vIC0gYnVmZmVyIC0gYSBCdWZmZXIgdG8gc2VhcmNoXG4vLyAtIHZhbCAtIGEgc3RyaW5nLCBCdWZmZXIsIG9yIG51bWJlclxuLy8gLSBieXRlT2Zmc2V0IC0gYW4gaW5kZXggaW50byBgYnVmZmVyYDsgd2lsbCBiZSBjbGFtcGVkIHRvIGFuIGludDMyXG4vLyAtIGVuY29kaW5nIC0gYW4gb3B0aW9uYWwgZW5jb2RpbmcsIHJlbGV2YW50IGlzIHZhbCBpcyBhIHN0cmluZ1xuLy8gLSBkaXIgLSB0cnVlIGZvciBpbmRleE9mLCBmYWxzZSBmb3IgbGFzdEluZGV4T2ZcbmZ1bmN0aW9uIGJpZGlyZWN0aW9uYWxJbmRleE9mIChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICAvLyBFbXB0eSBidWZmZXIgbWVhbnMgbm8gbWF0Y2hcbiAgaWYgKGJ1ZmZlci5sZW5ndGggPT09IDApIHJldHVybiAtMVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0XG4gIGlmICh0eXBlb2YgYnl0ZU9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IGJ5dGVPZmZzZXRcbiAgICBieXRlT2Zmc2V0ID0gMFxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPiAweDdmZmZmZmZmKSB7XG4gICAgYnl0ZU9mZnNldCA9IDB4N2ZmZmZmZmZcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0IDwgLTB4ODAwMDAwMDApIHtcbiAgICBieXRlT2Zmc2V0ID0gLTB4ODAwMDAwMDBcbiAgfVxuICBieXRlT2Zmc2V0ID0gK2J5dGVPZmZzZXQgIC8vIENvZXJjZSB0byBOdW1iZXIuXG4gIGlmIChpc05hTihieXRlT2Zmc2V0KSkge1xuICAgIC8vIGJ5dGVPZmZzZXQ6IGl0IGl0J3MgdW5kZWZpbmVkLCBudWxsLCBOYU4sIFwiZm9vXCIsIGV0Yywgc2VhcmNoIHdob2xlIGJ1ZmZlclxuICAgIGJ5dGVPZmZzZXQgPSBkaXIgPyAwIDogKGJ1ZmZlci5sZW5ndGggLSAxKVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIGJ5dGVPZmZzZXQ6IG5lZ2F0aXZlIG9mZnNldHMgc3RhcnQgZnJvbSB0aGUgZW5kIG9mIHRoZSBidWZmZXJcbiAgaWYgKGJ5dGVPZmZzZXQgPCAwKSBieXRlT2Zmc2V0ID0gYnVmZmVyLmxlbmd0aCArIGJ5dGVPZmZzZXRcbiAgaWYgKGJ5dGVPZmZzZXQgPj0gYnVmZmVyLmxlbmd0aCkge1xuICAgIGlmIChkaXIpIHJldHVybiAtMVxuICAgIGVsc2UgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggLSAxXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IDApIHtcbiAgICBpZiAoZGlyKSBieXRlT2Zmc2V0ID0gMFxuICAgIGVsc2UgcmV0dXJuIC0xXG4gIH1cblxuICAvLyBOb3JtYWxpemUgdmFsXG4gIGlmICh0eXBlb2YgdmFsID09PSAnc3RyaW5nJykge1xuICAgIHZhbCA9IEJ1ZmZlci5mcm9tKHZhbCwgZW5jb2RpbmcpXG4gIH1cblxuICAvLyBGaW5hbGx5LCBzZWFyY2ggZWl0aGVyIGluZGV4T2YgKGlmIGRpciBpcyB0cnVlKSBvciBsYXN0SW5kZXhPZlxuICBpZiAoQnVmZmVyLmlzQnVmZmVyKHZhbCkpIHtcbiAgICAvLyBTcGVjaWFsIGNhc2U6IGxvb2tpbmcgZm9yIGVtcHR5IHN0cmluZy9idWZmZXIgYWx3YXlzIGZhaWxzXG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDApIHtcbiAgICAgIHJldHVybiAtMVxuICAgIH1cbiAgICByZXR1cm4gYXJyYXlJbmRleE9mKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9IGVsc2UgaWYgKHR5cGVvZiB2YWwgPT09ICdudW1iZXInKSB7XG4gICAgdmFsID0gdmFsICYgMHhGRiAvLyBTZWFyY2ggZm9yIGEgYnl0ZSB2YWx1ZSBbMC0yNTVdXG4gICAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUICYmXG4gICAgICAgIHR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICBpZiAoZGlyKSB7XG4gICAgICAgIHJldHVybiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9IGVsc2Uge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChidWZmZXIsIHZhbCwgYnl0ZU9mZnNldClcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIFsgdmFsIF0sIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpXG4gIH1cblxuICB0aHJvdyBuZXcgVHlwZUVycm9yKCd2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXInKVxufVxuXG5mdW5jdGlvbiBhcnJheUluZGV4T2YgKGFyciwgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKSB7XG4gIHZhciBpbmRleFNpemUgPSAxXG4gIHZhciBhcnJMZW5ndGggPSBhcnIubGVuZ3RoXG4gIHZhciB2YWxMZW5ndGggPSB2YWwubGVuZ3RoXG5cbiAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9IFN0cmluZyhlbmNvZGluZykudG9Mb3dlckNhc2UoKVxuICAgIGlmIChlbmNvZGluZyA9PT0gJ3VjczInIHx8IGVuY29kaW5nID09PSAndWNzLTInIHx8XG4gICAgICAgIGVuY29kaW5nID09PSAndXRmMTZsZScgfHwgZW5jb2RpbmcgPT09ICd1dGYtMTZsZScpIHtcbiAgICAgIGlmIChhcnIubGVuZ3RoIDwgMiB8fCB2YWwubGVuZ3RoIDwgMikge1xuICAgICAgICByZXR1cm4gLTFcbiAgICAgIH1cbiAgICAgIGluZGV4U2l6ZSA9IDJcbiAgICAgIGFyckxlbmd0aCAvPSAyXG4gICAgICB2YWxMZW5ndGggLz0gMlxuICAgICAgYnl0ZU9mZnNldCAvPSAyXG4gICAgfVxuICB9XG5cbiAgZnVuY3Rpb24gcmVhZCAoYnVmLCBpKSB7XG4gICAgaWYgKGluZGV4U2l6ZSA9PT0gMSkge1xuICAgICAgcmV0dXJuIGJ1ZltpXVxuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gYnVmLnJlYWRVSW50MTZCRShpICogaW5kZXhTaXplKVxuICAgIH1cbiAgfVxuXG4gIHZhciBpXG4gIGlmIChkaXIpIHtcbiAgICB2YXIgZm91bmRJbmRleCA9IC0xXG4gICAgZm9yIChpID0gYnl0ZU9mZnNldDsgaSA8IGFyckxlbmd0aDsgaSsrKSB7XG4gICAgICBpZiAocmVhZChhcnIsIGkpID09PSByZWFkKHZhbCwgZm91bmRJbmRleCA9PT0gLTEgPyAwIDogaSAtIGZvdW5kSW5kZXgpKSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ID09PSAtMSkgZm91bmRJbmRleCA9IGlcbiAgICAgICAgaWYgKGkgLSBmb3VuZEluZGV4ICsgMSA9PT0gdmFsTGVuZ3RoKSByZXR1cm4gZm91bmRJbmRleCAqIGluZGV4U2l6ZVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaWYgKGZvdW5kSW5kZXggIT09IC0xKSBpIC09IGkgLSBmb3VuZEluZGV4XG4gICAgICAgIGZvdW5kSW5kZXggPSAtMVxuICAgICAgfVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBpZiAoYnl0ZU9mZnNldCArIHZhbExlbmd0aCA+IGFyckxlbmd0aCkgYnl0ZU9mZnNldCA9IGFyckxlbmd0aCAtIHZhbExlbmd0aFxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPj0gMDsgaS0tKSB7XG4gICAgICB2YXIgZm91bmQgPSB0cnVlXG4gICAgICBmb3IgKHZhciBqID0gMDsgaiA8IHZhbExlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmIChyZWFkKGFyciwgaSArIGopICE9PSByZWFkKHZhbCwgaikpIHtcbiAgICAgICAgICBmb3VuZCA9IGZhbHNlXG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGZvdW5kKSByZXR1cm4gaVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiAtMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluY2x1ZGVzID0gZnVuY3Rpb24gaW5jbHVkZXMgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIHRoaXMuaW5kZXhPZih2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSAhPT0gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmRleE9mID0gZnVuY3Rpb24gaW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgdHJ1ZSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5sYXN0SW5kZXhPZiA9IGZ1bmN0aW9uIGxhc3RJbmRleE9mICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiBiaWRpcmVjdGlvbmFsSW5kZXhPZih0aGlzLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBmYWxzZSlcbn1cblxuZnVuY3Rpb24gaGV4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICBvZmZzZXQgPSBOdW1iZXIob2Zmc2V0KSB8fCAwXG4gIHZhciByZW1haW5pbmcgPSBidWYubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmICghbGVuZ3RoKSB7XG4gICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gIH0gZWxzZSB7XG4gICAgbGVuZ3RoID0gTnVtYmVyKGxlbmd0aClcbiAgICBpZiAobGVuZ3RoID4gcmVtYWluaW5nKSB7XG4gICAgICBsZW5ndGggPSByZW1haW5pbmdcbiAgICB9XG4gIH1cblxuICAvLyBtdXN0IGJlIGFuIGV2ZW4gbnVtYmVyIG9mIGRpZ2l0c1xuICB2YXIgc3RyTGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAoc3RyTGVuICUgMiAhPT0gMCkgdGhyb3cgbmV3IFR5cGVFcnJvcignSW52YWxpZCBoZXggc3RyaW5nJylcblxuICBpZiAobGVuZ3RoID4gc3RyTGVuIC8gMikge1xuICAgIGxlbmd0aCA9IHN0ckxlbiAvIDJcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgdmFyIHBhcnNlZCA9IHBhcnNlSW50KHN0cmluZy5zdWJzdHIoaSAqIDIsIDIpLCAxNilcbiAgICBpZiAoaXNOYU4ocGFyc2VkKSkgcmV0dXJuIGlcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSBwYXJzZWRcbiAgfVxuICByZXR1cm4gaVxufVxuXG5mdW5jdGlvbiB1dGY4V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcih1dGY4VG9CeXRlcyhzdHJpbmcsIGJ1Zi5sZW5ndGggLSBvZmZzZXQpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBhc2NpaVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIoYXNjaWlUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIGxhdGluMVdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGFzY2lpV3JpdGUoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBiYXNlNjRXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGJhc2U2NFRvQnl0ZXMoc3RyaW5nKSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gdWNzMldyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmMTZsZVRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZSA9IGZ1bmN0aW9uIHdyaXRlIChzdHJpbmcsIG9mZnNldCwgbGVuZ3RoLCBlbmNvZGluZykge1xuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nKVxuICBpZiAob2Zmc2V0ID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmNvZGluZyA9ICd1dGY4J1xuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBlbmNvZGluZylcbiAgfSBlbHNlIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCAmJiB0eXBlb2Ygb2Zmc2V0ID09PSAnc3RyaW5nJykge1xuICAgIGVuY29kaW5nID0gb2Zmc2V0XG4gICAgbGVuZ3RoID0gdGhpcy5sZW5ndGhcbiAgICBvZmZzZXQgPSAwXG4gIC8vIEJ1ZmZlciN3cml0ZShzdHJpbmcsIG9mZnNldFssIGxlbmd0aF1bLCBlbmNvZGluZ10pXG4gIH0gZWxzZSBpZiAoaXNGaW5pdGUob2Zmc2V0KSkge1xuICAgIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgICBpZiAoaXNGaW5pdGUobGVuZ3RoKSkge1xuICAgICAgbGVuZ3RoID0gbGVuZ3RoIHwgMFxuICAgICAgaWYgKGVuY29kaW5nID09PSB1bmRlZmluZWQpIGVuY29kaW5nID0gJ3V0ZjgnXG4gICAgfSBlbHNlIHtcbiAgICAgIGVuY29kaW5nID0gbGVuZ3RoXG4gICAgICBsZW5ndGggPSB1bmRlZmluZWRcbiAgICB9XG4gIC8vIGxlZ2FjeSB3cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXQsIGxlbmd0aCkgLSByZW1vdmUgaW4gdjAuMTNcbiAgfSBlbHNlIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoXG4gICAgICAnQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQnXG4gICAgKVxuICB9XG5cbiAgdmFyIHJlbWFpbmluZyA9IHRoaXMubGVuZ3RoIC0gb2Zmc2V0XG4gIGlmIChsZW5ndGggPT09IHVuZGVmaW5lZCB8fCBsZW5ndGggPiByZW1haW5pbmcpIGxlbmd0aCA9IHJlbWFpbmluZ1xuXG4gIGlmICgoc3RyaW5nLmxlbmd0aCA+IDAgJiYgKGxlbmd0aCA8IDAgfHwgb2Zmc2V0IDwgMCkpIHx8IG9mZnNldCA+IHRoaXMubGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gd3JpdGUgb3V0c2lkZSBidWZmZXIgYm91bmRzJylcbiAgfVxuXG4gIGlmICghZW5jb2RpbmcpIGVuY29kaW5nID0gJ3V0ZjgnXG5cbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcbiAgZm9yICg7Oykge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgLy8gV2FybmluZzogbWF4TGVuZ3RoIG5vdCB0YWtlbiBpbnRvIGFjY291bnQgaW4gYmFzZTY0V3JpdGVcbiAgICAgICAgcmV0dXJuIGJhc2U2NFdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1Y3MyV3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKCcnICsgZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9KU09OID0gZnVuY3Rpb24gdG9KU09OICgpIHtcbiAgcmV0dXJuIHtcbiAgICB0eXBlOiAnQnVmZmVyJyxcbiAgICBkYXRhOiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnIgfHwgdGhpcywgMClcbiAgfVxufVxuXG5mdW5jdGlvbiBiYXNlNjRTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGlmIChzdGFydCA9PT0gMCAmJiBlbmQgPT09IGJ1Zi5sZW5ndGgpIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmKVxuICB9IGVsc2Uge1xuICAgIHJldHVybiBiYXNlNjQuZnJvbUJ5dGVBcnJheShidWYuc2xpY2Uoc3RhcnQsIGVuZCkpXG4gIH1cbn1cblxuZnVuY3Rpb24gdXRmOFNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuICB2YXIgcmVzID0gW11cblxuICB2YXIgaSA9IHN0YXJ0XG4gIHdoaWxlIChpIDwgZW5kKSB7XG4gICAgdmFyIGZpcnN0Qnl0ZSA9IGJ1ZltpXVxuICAgIHZhciBjb2RlUG9pbnQgPSBudWxsXG4gICAgdmFyIGJ5dGVzUGVyU2VxdWVuY2UgPSAoZmlyc3RCeXRlID4gMHhFRikgPyA0XG4gICAgICA6IChmaXJzdEJ5dGUgPiAweERGKSA/IDNcbiAgICAgIDogKGZpcnN0Qnl0ZSA+IDB4QkYpID8gMlxuICAgICAgOiAxXG5cbiAgICBpZiAoaSArIGJ5dGVzUGVyU2VxdWVuY2UgPD0gZW5kKSB7XG4gICAgICB2YXIgc2Vjb25kQnl0ZSwgdGhpcmRCeXRlLCBmb3VydGhCeXRlLCB0ZW1wQ29kZVBvaW50XG5cbiAgICAgIHN3aXRjaCAoYnl0ZXNQZXJTZXF1ZW5jZSkge1xuICAgICAgICBjYXNlIDE6XG4gICAgICAgICAgaWYgKGZpcnN0Qnl0ZSA8IDB4ODApIHtcbiAgICAgICAgICAgIGNvZGVQb2ludCA9IGZpcnN0Qnl0ZVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDI6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweDFGKSA8PCAweDYgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0YpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDM6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwKSB7XG4gICAgICAgICAgICB0ZW1wQ29kZVBvaW50ID0gKGZpcnN0Qnl0ZSAmIDB4RikgPDwgMHhDIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAodGhpcmRCeXRlICYgMHgzRilcbiAgICAgICAgICAgIGlmICh0ZW1wQ29kZVBvaW50ID4gMHg3RkYgJiYgKHRlbXBDb2RlUG9pbnQgPCAweEQ4MDAgfHwgdGVtcENvZGVQb2ludCA+IDB4REZGRikpIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgICBicmVha1xuICAgICAgICBjYXNlIDQ6XG4gICAgICAgICAgc2Vjb25kQnl0ZSA9IGJ1ZltpICsgMV1cbiAgICAgICAgICB0aGlyZEJ5dGUgPSBidWZbaSArIDJdXG4gICAgICAgICAgZm91cnRoQnl0ZSA9IGJ1ZltpICsgM11cbiAgICAgICAgICBpZiAoKHNlY29uZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCAmJiAodGhpcmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKGZvdXJ0aEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4MTIgfCAoc2Vjb25kQnl0ZSAmIDB4M0YpIDw8IDB4QyB8ICh0aGlyZEJ5dGUgJiAweDNGKSA8PCAweDYgfCAoZm91cnRoQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4RkZGRiAmJiB0ZW1wQ29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgICAgICAgICAgY29kZVBvaW50ID0gdGVtcENvZGVQb2ludFxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY29kZVBvaW50ID09PSBudWxsKSB7XG4gICAgICAvLyB3ZSBkaWQgbm90IGdlbmVyYXRlIGEgdmFsaWQgY29kZVBvaW50IHNvIGluc2VydCBhXG4gICAgICAvLyByZXBsYWNlbWVudCBjaGFyIChVK0ZGRkQpIGFuZCBhZHZhbmNlIG9ubHkgMSBieXRlXG4gICAgICBjb2RlUG9pbnQgPSAweEZGRkRcbiAgICAgIGJ5dGVzUGVyU2VxdWVuY2UgPSAxXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPiAweEZGRkYpIHtcbiAgICAgIC8vIGVuY29kZSB0byB1dGYxNiAoc3Vycm9nYXRlIHBhaXIgZGFuY2UpXG4gICAgICBjb2RlUG9pbnQgLT0gMHgxMDAwMFxuICAgICAgcmVzLnB1c2goY29kZVBvaW50ID4+PiAxMCAmIDB4M0ZGIHwgMHhEODAwKVxuICAgICAgY29kZVBvaW50ID0gMHhEQzAwIHwgY29kZVBvaW50ICYgMHgzRkZcbiAgICB9XG5cbiAgICByZXMucHVzaChjb2RlUG9pbnQpXG4gICAgaSArPSBieXRlc1BlclNlcXVlbmNlXG4gIH1cblxuICByZXR1cm4gZGVjb2RlQ29kZVBvaW50c0FycmF5KHJlcylcbn1cblxuLy8gQmFzZWQgb24gaHR0cDovL3N0YWNrb3ZlcmZsb3cuY29tL2EvMjI3NDcyNzIvNjgwNzQyLCB0aGUgYnJvd3NlciB3aXRoXG4vLyB0aGUgbG93ZXN0IGxpbWl0IGlzIENocm9tZSwgd2l0aCAweDEwMDAwIGFyZ3MuXG4vLyBXZSBnbyAxIG1hZ25pdHVkZSBsZXNzLCBmb3Igc2FmZXR5XG52YXIgTUFYX0FSR1VNRU5UU19MRU5HVEggPSAweDEwMDBcblxuZnVuY3Rpb24gZGVjb2RlQ29kZVBvaW50c0FycmF5IChjb2RlUG9pbnRzKSB7XG4gIHZhciBsZW4gPSBjb2RlUG9pbnRzLmxlbmd0aFxuICBpZiAobGVuIDw9IE1BWF9BUkdVTUVOVFNfTEVOR1RIKSB7XG4gICAgcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLCBjb2RlUG9pbnRzKSAvLyBhdm9pZCBleHRyYSBzbGljZSgpXG4gIH1cblxuICAvLyBEZWNvZGUgaW4gY2h1bmtzIHRvIGF2b2lkIFwiY2FsbCBzdGFjayBzaXplIGV4Y2VlZGVkXCIuXG4gIHZhciByZXMgPSAnJ1xuICB2YXIgaSA9IDBcbiAgd2hpbGUgKGkgPCBsZW4pIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShcbiAgICAgIFN0cmluZyxcbiAgICAgIGNvZGVQb2ludHMuc2xpY2UoaSwgaSArPSBNQVhfQVJHVU1FTlRTX0xFTkdUSClcbiAgICApXG4gIH1cbiAgcmV0dXJuIHJlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVNsaWNlIChidWYsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIHJldCA9ICcnXG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcblxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIHJldCArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ1ZltpXSAmIDB4N0YpXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBsYXRpbjFTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0pXG4gIH1cbiAgcmV0dXJuIHJldFxufVxuXG5mdW5jdGlvbiBoZXhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSBidWYubGVuZ3RoXG5cbiAgaWYgKCFzdGFydCB8fCBzdGFydCA8IDApIHN0YXJ0ID0gMFxuICBpZiAoIWVuZCB8fCBlbmQgPCAwIHx8IGVuZCA+IGxlbikgZW5kID0gbGVuXG5cbiAgdmFyIG91dCA9ICcnXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgb3V0ICs9IHRvSGV4KGJ1ZltpXSlcbiAgfVxuICByZXR1cm4gb3V0XG59XG5cbmZ1bmN0aW9uIHV0ZjE2bGVTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciBieXRlcyA9IGJ1Zi5zbGljZShzdGFydCwgZW5kKVxuICB2YXIgcmVzID0gJydcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBieXRlcy5sZW5ndGg7IGkgKz0gMikge1xuICAgIHJlcyArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldICsgYnl0ZXNbaSArIDFdICogMjU2KVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zbGljZSA9IGZ1bmN0aW9uIHNsaWNlIChzdGFydCwgZW5kKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBzdGFydCA9IH5+c3RhcnRcbiAgZW5kID0gZW5kID09PSB1bmRlZmluZWQgPyBsZW4gOiB+fmVuZFxuXG4gIGlmIChzdGFydCA8IDApIHtcbiAgICBzdGFydCArPSBsZW5cbiAgICBpZiAoc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgfSBlbHNlIGlmIChzdGFydCA+IGxlbikge1xuICAgIHN0YXJ0ID0gbGVuXG4gIH1cblxuICBpZiAoZW5kIDwgMCkge1xuICAgIGVuZCArPSBsZW5cbiAgICBpZiAoZW5kIDwgMCkgZW5kID0gMFxuICB9IGVsc2UgaWYgKGVuZCA+IGxlbikge1xuICAgIGVuZCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IHN0YXJ0KSBlbmQgPSBzdGFydFxuXG4gIHZhciBuZXdCdWZcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgbmV3QnVmID0gdGhpcy5zdWJhcnJheShzdGFydCwgZW5kKVxuICAgIG5ld0J1Zi5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIH0gZWxzZSB7XG4gICAgdmFyIHNsaWNlTGVuID0gZW5kIC0gc3RhcnRcbiAgICBuZXdCdWYgPSBuZXcgQnVmZmVyKHNsaWNlTGVuLCB1bmRlZmluZWQpXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzbGljZUxlbjsgKytpKSB7XG4gICAgICBuZXdCdWZbaV0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH1cblxuICByZXR1cm4gbmV3QnVmXG59XG5cbi8qXG4gKiBOZWVkIHRvIG1ha2Ugc3VyZSB0aGF0IGJ1ZmZlciBpc24ndCB0cnlpbmcgdG8gd3JpdGUgb3V0IG9mIGJvdW5kcy5cbiAqL1xuZnVuY3Rpb24gY2hlY2tPZmZzZXQgKG9mZnNldCwgZXh0LCBsZW5ndGgpIHtcbiAgaWYgKChvZmZzZXQgJSAxKSAhPT0gMCB8fCBvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignb2Zmc2V0IGlzIG5vdCB1aW50JylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1RyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGgnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50TEUgPSBmdW5jdGlvbiByZWFkVUludExFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgYnl0ZUxlbmd0aCwgdGhpcy5sZW5ndGgpXG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0XVxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgd2hpbGUgKCsraSA8IGJ5dGVMZW5ndGggJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyBpXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50QkUgPSBmdW5jdGlvbiByZWFkVUludEJFIChvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuICB9XG5cbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXVxuICB2YXIgbXVsID0gMVxuICB3aGlsZSAoYnl0ZUxlbmd0aCA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWJ5dGVMZW5ndGhdICogbXVsXG4gIH1cblxuICByZXR1cm4gdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQ4ID0gZnVuY3Rpb24gcmVhZFVJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDE2TEUgPSBmdW5jdGlvbiByZWFkVUludDE2TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIHRoaXNbb2Zmc2V0XSB8ICh0aGlzW29mZnNldCArIDFdIDw8IDgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkJFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiAodGhpc1tvZmZzZXRdIDw8IDgpIHwgdGhpc1tvZmZzZXQgKyAxXVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRVSW50MzJMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDQsIHRoaXMubGVuZ3RoKVxuXG4gIHJldHVybiAoKHRoaXNbb2Zmc2V0XSkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOCkgfFxuICAgICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpKSArXG4gICAgICAodGhpc1tvZmZzZXQgKyAzXSAqIDB4MTAwMDAwMClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyQkUgPSBmdW5jdGlvbiByZWFkVUludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSAqIDB4MTAwMDAwMCkgK1xuICAgICgodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICB0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRMRSA9IGZ1bmN0aW9uIHJlYWRJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnRCRSA9IGZ1bmN0aW9uIHJlYWRJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciBpID0gYnl0ZUxlbmd0aFxuICB2YXIgbXVsID0gMVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAtLWldXG4gIHdoaWxlIChpID4gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIC0taV0gKiBtdWxcbiAgfVxuICBtdWwgKj0gMHg4MFxuXG4gIGlmICh2YWwgPj0gbXVsKSB2YWwgLT0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpXG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQ4ID0gZnVuY3Rpb24gcmVhZEludDggKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAxLCB0aGlzLmxlbmd0aClcbiAgaWYgKCEodGhpc1tvZmZzZXRdICYgMHg4MCkpIHJldHVybiAodGhpc1tvZmZzZXRdKVxuICByZXR1cm4gKCgweGZmIC0gdGhpc1tvZmZzZXRdICsgMSkgKiAtMSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MTZMRSA9IGZ1bmN0aW9uIHJlYWRJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxuICByZXR1cm4gKHZhbCAmIDB4ODAwMCkgPyB2YWwgfCAweEZGRkYwMDAwIDogdmFsXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2QkUgPSBmdW5jdGlvbiByZWFkSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXQgKyAxXSB8ICh0aGlzW29mZnNldF0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkxFID0gZnVuY3Rpb24gcmVhZEludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDNdIDw8IDI0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQzMkJFID0gZnVuY3Rpb24gcmVhZEludDMyQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCAyNCkgfFxuICAgICh0aGlzW29mZnNldCArIDFdIDw8IDE2KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgOCkgfFxuICAgICh0aGlzW29mZnNldCArIDNdKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdExFID0gZnVuY3Rpb24gcmVhZEZsb2F0TEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDIzLCA0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRGbG9hdEJFID0gZnVuY3Rpb24gcmVhZEZsb2F0QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlTEUgPSBmdW5jdGlvbiByZWFkRG91YmxlTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIHRydWUsIDUyLCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWREb3VibGVCRSA9IGZ1bmN0aW9uIHJlYWREb3VibGVCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDgsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gaWVlZTc1NC5yZWFkKHRoaXMsIG9mZnNldCwgZmFsc2UsIDUyLCA4KVxufVxuXG5mdW5jdGlvbiBjaGVja0ludCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpXG4gIGlmICh2YWx1ZSA+IG1heCB8fCB2YWx1ZSA8IG1pbikgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJylcbiAgaWYgKG9mZnNldCArIGV4dCA+IGJ1Zi5sZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludExFID0gZnVuY3Rpb24gd3JpdGVVSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgbXVsID0gMVxuICB2YXIgaSA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludEJFID0gZnVuY3Rpb24gd3JpdGVVSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgYnl0ZUxlbmd0aCA9IGJ5dGVMZW5ndGggfCAwXG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICB2YXIgbWF4Qnl0ZXMgPSBNYXRoLnBvdygyLCA4ICogYnl0ZUxlbmd0aCkgLSAxXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbWF4Qnl0ZXMsIDApXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICh2YWx1ZSAvIG11bCkgJiAweEZGXG4gIH1cblxuICByZXR1cm4gb2Zmc2V0ICsgYnl0ZUxlbmd0aFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDggPSBmdW5jdGlvbiB3cml0ZVVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4ZmYsIDApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgcmV0dXJuIG9mZnNldCArIDFcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MTYgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmICsgdmFsdWUgKyAxXG4gIGZvciAodmFyIGkgPSAwLCBqID0gTWF0aC5taW4oYnVmLmxlbmd0aCAtIG9mZnNldCwgMik7IGkgPCBqOyArK2kpIHtcbiAgICBidWZbb2Zmc2V0ICsgaV0gPSAodmFsdWUgJiAoMHhmZiA8PCAoOCAqIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpKSkpID4+PlxuICAgICAgKGxpdHRsZUVuZGlhbiA/IGkgOiAxIC0gaSkgKiA4XG4gIH1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVVSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweGZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuZnVuY3Rpb24gb2JqZWN0V3JpdGVVSW50MzIgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuKSB7XG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZmZmZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDQpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlID4+PiAobGl0dGxlRW5kaWFuID8gaSA6IDMgLSBpKSAqIDgpICYgMHhmZlxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVVSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweGZmZmZmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludExFID0gZnVuY3Rpb24gd3JpdGVJbnRMRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IDBcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHN1YiA9IDBcbiAgdGhpc1tvZmZzZXRdID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpIC0gMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludEJFID0gZnVuY3Rpb24gd3JpdGVJbnRCRSAodmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIGxpbWl0ID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGggLSAxKVxuXG4gICAgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgYnl0ZUxlbmd0aCwgbGltaXQgLSAxLCAtbGltaXQpXG4gIH1cblxuICB2YXIgaSA9IGJ5dGVMZW5ndGggLSAxXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0ICsgaV0gPSB2YWx1ZSAmIDB4RkZcbiAgd2hpbGUgKC0taSA+PSAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgaWYgKHZhbHVlIDwgMCAmJiBzdWIgPT09IDAgJiYgdGhpc1tvZmZzZXQgKyBpICsgMV0gIT09IDApIHtcbiAgICAgIHN1YiA9IDFcbiAgICB9XG4gICAgdGhpc1tvZmZzZXQgKyBpXSA9ICgodmFsdWUgLyBtdWwpID4+IDApIC0gc3ViICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDggPSBmdW5jdGlvbiB3cml0ZUludDggKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMSwgMHg3ZiwgLTB4ODApXG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHZhbHVlID0gTWF0aC5mbG9vcih2YWx1ZSlcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmICsgdmFsdWUgKyAxXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkxFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiA4KVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZUludDE2QkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHg3ZmZmLCAtMHg4MDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UpXG4gIH1cbiAgcmV0dXJuIG9mZnNldCArIDJcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZUludDMyTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHg3ZmZmZmZmZiwgLTB4ODAwMDAwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlID4+PiAyNClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkJFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbmZ1bmN0aW9uIGNoZWNrSUVFRTc1NCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBleHQsIG1heCwgbWluKSB7XG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbiAgaWYgKG9mZnNldCA8IDApIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbmRleCBvdXQgb2YgcmFuZ2UnKVxufVxuXG5mdW5jdGlvbiB3cml0ZUZsb2F0IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDQsIDMuNDAyODIzNDY2Mzg1Mjg4NmUrMzgsIC0zLjQwMjgyMzQ2NjM4NTI4ODZlKzM4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDIzLCA0KVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRMRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVGbG9hdEJFID0gZnVuY3Rpb24gd3JpdGVGbG9hdEJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVGbG9hdCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbmZ1bmN0aW9uIHdyaXRlRG91YmxlIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIGNoZWNrSUVFRTc1NChidWYsIHZhbHVlLCBvZmZzZXQsIDgsIDEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4LCAtMS43OTc2OTMxMzQ4NjIzMTU3RSszMDgpXG4gIH1cbiAgaWVlZTc1NC53cml0ZShidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbiwgNTIsIDgpXG4gIHJldHVybiBvZmZzZXQgKyA4XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVMRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlTEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlLCBub0Fzc2VydClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZURvdWJsZUJFID0gZnVuY3Rpb24gd3JpdGVEb3VibGVCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRG91YmxlKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlLCBub0Fzc2VydClcbn1cblxuLy8gY29weSh0YXJnZXRCdWZmZXIsIHRhcmdldFN0YXJ0PTAsIHNvdXJjZVN0YXJ0PTAsIHNvdXJjZUVuZD1idWZmZXIubGVuZ3RoKVxuQnVmZmVyLnByb3RvdHlwZS5jb3B5ID0gZnVuY3Rpb24gY29weSAodGFyZ2V0LCB0YXJnZXRTdGFydCwgc3RhcnQsIGVuZCkge1xuICBpZiAoIXN0YXJ0KSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgJiYgZW5kICE9PSAwKSBlbmQgPSB0aGlzLmxlbmd0aFxuICBpZiAodGFyZ2V0U3RhcnQgPj0gdGFyZ2V0Lmxlbmd0aCkgdGFyZ2V0U3RhcnQgPSB0YXJnZXQubGVuZ3RoXG4gIGlmICghdGFyZ2V0U3RhcnQpIHRhcmdldFN0YXJ0ID0gMFxuICBpZiAoZW5kID4gMCAmJiBlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICAvLyBDb3B5IDAgYnl0ZXM7IHdlJ3JlIGRvbmVcbiAgaWYgKGVuZCA9PT0gc3RhcnQpIHJldHVybiAwXG4gIGlmICh0YXJnZXQubGVuZ3RoID09PSAwIHx8IHRoaXMubGVuZ3RoID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIEZhdGFsIGVycm9yIGNvbmRpdGlvbnNcbiAgaWYgKHRhcmdldFN0YXJ0IDwgMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCd0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzJylcbiAgfVxuICBpZiAoc3RhcnQgPCAwIHx8IHN0YXJ0ID49IHRoaXMubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChlbmQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignc291cmNlRW5kIG91dCBvZiBib3VuZHMnKVxuXG4gIC8vIEFyZSB3ZSBvb2I/XG4gIGlmIChlbmQgPiB0aGlzLmxlbmd0aCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCA8IGVuZCAtIHN0YXJ0KSB7XG4gICAgZW5kID0gdGFyZ2V0Lmxlbmd0aCAtIHRhcmdldFN0YXJ0ICsgc3RhcnRcbiAgfVxuXG4gIHZhciBsZW4gPSBlbmQgLSBzdGFydFxuICB2YXIgaVxuXG4gIGlmICh0aGlzID09PSB0YXJnZXQgJiYgc3RhcnQgPCB0YXJnZXRTdGFydCAmJiB0YXJnZXRTdGFydCA8IGVuZCkge1xuICAgIC8vIGRlc2NlbmRpbmcgY29weSBmcm9tIGVuZFxuICAgIGZvciAoaSA9IGxlbiAtIDE7IGkgPj0gMDsgLS1pKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIGlmIChsZW4gPCAxMDAwIHx8ICFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIC8vIGFzY2VuZGluZyBjb3B5IGZyb20gc3RhcnRcbiAgICBmb3IgKGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgIHRhcmdldFtpICsgdGFyZ2V0U3RhcnRdID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKFxuICAgICAgdGFyZ2V0LFxuICAgICAgdGhpcy5zdWJhcnJheShzdGFydCwgc3RhcnQgKyBsZW4pLFxuICAgICAgdGFyZ2V0U3RhcnRcbiAgICApXG4gIH1cblxuICByZXR1cm4gbGVuXG59XG5cbi8vIFVzYWdlOlxuLy8gICAgYnVmZmVyLmZpbGwobnVtYmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChidWZmZXJbLCBvZmZzZXRbLCBlbmRdXSlcbi8vICAgIGJ1ZmZlci5maWxsKHN0cmluZ1ssIG9mZnNldFssIGVuZF1dWywgZW5jb2RpbmddKVxuQnVmZmVyLnByb3RvdHlwZS5maWxsID0gZnVuY3Rpb24gZmlsbCAodmFsLCBzdGFydCwgZW5kLCBlbmNvZGluZykge1xuICAvLyBIYW5kbGUgc3RyaW5nIGNhc2VzOlxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICBpZiAodHlwZW9mIHN0YXJ0ID09PSAnc3RyaW5nJykge1xuICAgICAgZW5jb2RpbmcgPSBzdGFydFxuICAgICAgc3RhcnQgPSAwXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH0gZWxzZSBpZiAodHlwZW9mIGVuZCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gZW5kXG4gICAgICBlbmQgPSB0aGlzLmxlbmd0aFxuICAgIH1cbiAgICBpZiAodmFsLmxlbmd0aCA9PT0gMSkge1xuICAgICAgdmFyIGNvZGUgPSB2YWwuY2hhckNvZGVBdCgwKVxuICAgICAgaWYgKGNvZGUgPCAyNTYpIHtcbiAgICAgICAgdmFsID0gY29kZVxuICAgICAgfVxuICAgIH1cbiAgICBpZiAoZW5jb2RpbmcgIT09IHVuZGVmaW5lZCAmJiB0eXBlb2YgZW5jb2RpbmcgIT09ICdzdHJpbmcnKSB7XG4gICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdlbmNvZGluZyBtdXN0IGJlIGEgc3RyaW5nJylcbiAgICB9XG4gICAgaWYgKHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZycgJiYgIUJ1ZmZlci5pc0VuY29kaW5nKGVuY29kaW5nKSkge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgIH1cbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDI1NVxuICB9XG5cbiAgLy8gSW52YWxpZCByYW5nZXMgYXJlIG5vdCBzZXQgdG8gYSBkZWZhdWx0LCBzbyBjYW4gcmFuZ2UgY2hlY2sgZWFybHkuXG4gIGlmIChzdGFydCA8IDAgfHwgdGhpcy5sZW5ndGggPCBzdGFydCB8fCB0aGlzLmxlbmd0aCA8IGVuZCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdPdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiB0aGlzXG4gIH1cblxuICBzdGFydCA9IHN0YXJ0ID4+PiAwXG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gdGhpcy5sZW5ndGggOiBlbmQgPj4+IDBcblxuICBpZiAoIXZhbCkgdmFsID0gMFxuXG4gIHZhciBpXG4gIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICAgIHRoaXNbaV0gPSB2YWxcbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgdmFyIGJ5dGVzID0gQnVmZmVyLmlzQnVmZmVyKHZhbClcbiAgICAgID8gdmFsXG4gICAgICA6IHV0ZjhUb0J5dGVzKG5ldyBCdWZmZXIodmFsLCBlbmNvZGluZykudG9TdHJpbmcoKSlcbiAgICB2YXIgbGVuID0gYnl0ZXMubGVuZ3RoXG4gICAgZm9yIChpID0gMDsgaSA8IGVuZCAtIHN0YXJ0OyArK2kpIHtcbiAgICAgIHRoaXNbaSArIHN0YXJ0XSA9IGJ5dGVzW2kgJSBsZW5dXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIHRoaXNcbn1cblxuLy8gSEVMUEVSIEZVTkNUSU9OU1xuLy8gPT09PT09PT09PT09PT09PVxuXG52YXIgSU5WQUxJRF9CQVNFNjRfUkUgPSAvW14rXFwvMC05QS1aYS16LV9dL2dcblxuZnVuY3Rpb24gYmFzZTY0Y2xlYW4gKHN0cikge1xuICAvLyBOb2RlIHN0cmlwcyBvdXQgaW52YWxpZCBjaGFyYWN0ZXJzIGxpa2UgXFxuIGFuZCBcXHQgZnJvbSB0aGUgc3RyaW5nLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgc3RyID0gc3RyaW5ndHJpbShzdHIpLnJlcGxhY2UoSU5WQUxJRF9CQVNFNjRfUkUsICcnKVxuICAvLyBOb2RlIGNvbnZlcnRzIHN0cmluZ3Mgd2l0aCBsZW5ndGggPCAyIHRvICcnXG4gIGlmIChzdHIubGVuZ3RoIDwgMikgcmV0dXJuICcnXG4gIC8vIE5vZGUgYWxsb3dzIGZvciBub24tcGFkZGVkIGJhc2U2NCBzdHJpbmdzIChtaXNzaW5nIHRyYWlsaW5nID09PSksIGJhc2U2NC1qcyBkb2VzIG5vdFxuICB3aGlsZSAoc3RyLmxlbmd0aCAlIDQgIT09IDApIHtcbiAgICBzdHIgPSBzdHIgKyAnPSdcbiAgfVxuICByZXR1cm4gc3RyXG59XG5cbmZ1bmN0aW9uIHN0cmluZ3RyaW0gKHN0cikge1xuICBpZiAoc3RyLnRyaW0pIHJldHVybiBzdHIudHJpbSgpXG4gIHJldHVybiBzdHIucmVwbGFjZSgvXlxccyt8XFxzKyQvZywgJycpXG59XG5cbmZ1bmN0aW9uIHRvSGV4IChuKSB7XG4gIGlmIChuIDwgMTYpIHJldHVybiAnMCcgKyBuLnRvU3RyaW5nKDE2KVxuICByZXR1cm4gbi50b1N0cmluZygxNilcbn1cblxuZnVuY3Rpb24gdXRmOFRvQnl0ZXMgKHN0cmluZywgdW5pdHMpIHtcbiAgdW5pdHMgPSB1bml0cyB8fCBJbmZpbml0eVxuICB2YXIgY29kZVBvaW50XG4gIHZhciBsZW5ndGggPSBzdHJpbmcubGVuZ3RoXG4gIHZhciBsZWFkU3Vycm9nYXRlID0gbnVsbFxuICB2YXIgYnl0ZXMgPSBbXVxuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBjb2RlUG9pbnQgPSBzdHJpbmcuY2hhckNvZGVBdChpKVxuXG4gICAgLy8gaXMgc3Vycm9nYXRlIGNvbXBvbmVudFxuICAgIGlmIChjb2RlUG9pbnQgPiAweEQ3RkYgJiYgY29kZVBvaW50IDwgMHhFMDAwKSB7XG4gICAgICAvLyBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCFsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAgIC8vIG5vIGxlYWQgeWV0XG4gICAgICAgIGlmIChjb2RlUG9pbnQgPiAweERCRkYpIHtcbiAgICAgICAgICAvLyB1bmV4cGVjdGVkIHRyYWlsXG4gICAgICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgICAgICAgY29udGludWVcbiAgICAgICAgfSBlbHNlIGlmIChpICsgMSA9PT0gbGVuZ3RoKSB7XG4gICAgICAgICAgLy8gdW5wYWlyZWQgbGVhZFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH1cblxuICAgICAgICAvLyB2YWxpZCBsZWFkXG4gICAgICAgIGxlYWRTdXJyb2dhdGUgPSBjb2RlUG9pbnRcblxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyAyIGxlYWRzIGluIGEgcm93XG4gICAgICBpZiAoY29kZVBvaW50IDwgMHhEQzAwKSB7XG4gICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG4gICAgICAgIGNvbnRpbnVlXG4gICAgICB9XG5cbiAgICAgIC8vIHZhbGlkIHN1cnJvZ2F0ZSBwYWlyXG4gICAgICBjb2RlUG9pbnQgPSAobGVhZFN1cnJvZ2F0ZSAtIDB4RDgwMCA8PCAxMCB8IGNvZGVQb2ludCAtIDB4REMwMCkgKyAweDEwMDAwXG4gICAgfSBlbHNlIGlmIChsZWFkU3Vycm9nYXRlKSB7XG4gICAgICAvLyB2YWxpZCBibXAgY2hhciwgYnV0IGxhc3QgY2hhciB3YXMgYSBsZWFkXG4gICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICB9XG5cbiAgICBsZWFkU3Vycm9nYXRlID0gbnVsbFxuXG4gICAgLy8gZW5jb2RlIHV0ZjhcbiAgICBpZiAoY29kZVBvaW50IDwgMHg4MCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAxKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKGNvZGVQb2ludClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4ODAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgfCAweEMwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMDAwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAzKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDIHwgMHhFMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4NiAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgJiAweDNGIHwgMHg4MFxuICAgICAgKVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50IDwgMHgxMTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gNCkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4MTIgfCAweEYwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHhDICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2Uge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNvZGUgcG9pbnQnKVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiBieXRlc1xufVxuXG5mdW5jdGlvbiBhc2NpaVRvQnl0ZXMgKHN0cikge1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICAvLyBOb2RlJ3MgY29kZSBzZWVtcyB0byBiZSBkb2luZyB0aGlzIGFuZCBub3QgJiAweDdGLi5cbiAgICBieXRlQXJyYXkucHVzaChzdHIuY2hhckNvZGVBdChpKSAmIDB4RkYpXG4gIH1cbiAgcmV0dXJuIGJ5dGVBcnJheVxufVxuXG5mdW5jdGlvbiB1dGYxNmxlVG9CeXRlcyAoc3RyLCB1bml0cykge1xuICB2YXIgYywgaGksIGxvXG4gIHZhciBieXRlQXJyYXkgPSBbXVxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN0ci5sZW5ndGg7ICsraSkge1xuICAgIGlmICgodW5pdHMgLT0gMikgPCAwKSBicmVha1xuXG4gICAgYyA9IHN0ci5jaGFyQ29kZUF0KGkpXG4gICAgaGkgPSBjID4+IDhcbiAgICBsbyA9IGMgJSAyNTZcbiAgICBieXRlQXJyYXkucHVzaChsbylcbiAgICBieXRlQXJyYXkucHVzaChoaSlcbiAgfVxuXG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gYmFzZTY0VG9CeXRlcyAoc3RyKSB7XG4gIHJldHVybiBiYXNlNjQudG9CeXRlQXJyYXkoYmFzZTY0Y2xlYW4oc3RyKSlcbn1cblxuZnVuY3Rpb24gYmxpdEJ1ZmZlciAoc3JjLCBkc3QsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKGkgKyBvZmZzZXQgPj0gZHN0Lmxlbmd0aCkgfHwgKGkgPj0gc3JjLmxlbmd0aCkpIGJyZWFrXG4gICAgZHN0W2kgKyBvZmZzZXRdID0gc3JjW2ldXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gaXNuYW4gKHZhbCkge1xuICByZXR1cm4gdmFsICE9PSB2YWwgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby1zZWxmLWNvbXBhcmVcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9ub2RlLWxpYnMtYnJvd3Nlci9+L2J1ZmZlci9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYmFzZXggPSByZXF1aXJlKCdiYXNlLXgnKVxudmFyIEFMUEhBQkVUID0gJzEyMzQ1Njc4OUFCQ0RFRkdISktMTU5QUVJTVFVWV1hZWmFiY2RlZmdoaWprbW5vcHFyc3R1dnd4eXonXG5cbm1vZHVsZS5leHBvcnRzID0gYmFzZXgoQUxQSEFCRVQpXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vYnM1OC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIhZnVuY3Rpb24odCxlKXtcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cyYmXCJvYmplY3RcIj09dHlwZW9mIG1vZHVsZT9tb2R1bGUuZXhwb3J0cz1lKCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kP2RlZmluZShcIkZpdmVCZWxsc0NvbmRpdGlvblwiLFtdLGUpOlwib2JqZWN0XCI9PXR5cGVvZiBleHBvcnRzP2V4cG9ydHMuRml2ZUJlbGxzQ29uZGl0aW9uPWUoKTp0LkZpdmVCZWxsc0NvbmRpdGlvbj1lKCl9KHRoaXMsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShuKXtpZihyW25dKXJldHVybiByW25dLmV4cG9ydHM7dmFyIGk9cltuXT17aTpuLGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIHRbbl0uY2FsbChpLmV4cG9ydHMsaSxpLmV4cG9ydHMsZSksaS5sPSEwLGkuZXhwb3J0c312YXIgcj17fTtyZXR1cm4gZS5tPXQsZS5jPXIsZS5pPWZ1bmN0aW9uKHQpe3JldHVybiB0fSxlLmQ9ZnVuY3Rpb24odCxlLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpyfSl9LGUubj1mdW5jdGlvbih0KXt2YXIgcj10JiZ0Ll9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gdC5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiB0fTtyZXR1cm4gZS5kKHIsXCJhXCIscikscn0sZS5vPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfSxlLnA9XCJcIixlKGUucz02MTMpfShbZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDMyKSxvPXIoMTQpLGE9cigxNSksZj1yKDMzKSxzPVwicHJvdG90eXBlXCIsdT1mdW5jdGlvbih0LGUscil7dmFyIGgsYyxkLGwscD10JnUuRixiPXQmdS5HLHY9dCZ1LlMseT10JnUuUCxtPXQmdS5CLGc9Yj9uOnY/bltlXXx8KG5bZV09e30pOihuW2VdfHx7fSlbc10sdz1iP2k6aVtlXXx8KGlbZV09e30pLF89d1tzXXx8KHdbc109e30pO2ImJihyPWUpO2ZvcihoIGluIHIpYz0hcCYmZyYmdm9pZCAwIT09Z1toXSxkPShjP2c6cilbaF0sbD1tJiZjP2YoZCxuKTp5JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBkP2YoRnVuY3Rpb24uY2FsbCxkKTpkLGcmJmEoZyxoLGQsdCZ1LlUpLHdbaF0hPWQmJm8odyxoLGwpLHkmJl9baF0hPWQmJihfW2hdPWQpfTtuLmNvcmU9aSx1LkY9MSx1Lkc9Mix1LlM9NCx1LlA9OCx1LkI9MTYsdS5XPTMyLHUuVT02NCx1LlI9MTI4LHQuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSgpe3RyeXt2YXIgdD1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gdC5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PXQuZm9vKCkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuc3ViYXJyYXkmJjA9PT10LnN1YmFycmF5KDEsMSkuYnl0ZUxlbmd0aH1jYXRjaCh0KXtyZXR1cm4hMX19ZnVuY3Rpb24gbygpe3JldHVybiB0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/MjE0NzQ4MzY0NzoxMDczNzQxODIzfWZ1bmN0aW9uIGEoZSxyKXtpZihvKCk8cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoXCIpO3JldHVybiB0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkociksZS5fX3Byb3RvX189dC5wcm90b3R5cGUpOihudWxsPT09ZSYmKGU9bmV3IHQocikpLGUubGVuZ3RoPXIpLGV9ZnVuY3Rpb24gdChlLHIsbil7aWYoISh0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiB0KSlyZXR1cm4gbmV3IHQoZSxyLG4pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygcil0aHJvdyBuZXcgRXJyb3IoXCJJZiBlbmNvZGluZyBpcyBzcGVjaWZpZWQgdGhlbiB0aGUgZmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtyZXR1cm4gaCh0aGlzLGUpfXJldHVybiBmKHRoaXMsZSxyLG4pfWZ1bmN0aW9uIGYodCxlLHIsbil7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7cmV0dXJuXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/bCh0LGUscixuKTpcInN0cmluZ1wiPT10eXBlb2YgZT9jKHQsZSxyKTpwKHQsZSl9ZnVuY3Rpb24gcyh0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IGJlIGEgbnVtYmVyJyk7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInNpemVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBuZWdhdGl2ZScpfWZ1bmN0aW9uIHUodCxlLHIsbil7cmV0dXJuIHMoZSksZTw9MD9hKHQsZSk6dm9pZCAwIT09cj9cInN0cmluZ1wiPT10eXBlb2Ygbj9hKHQsZSkuZmlsbChyLG4pOmEodCxlKS5maWxsKHIpOmEodCxlKX1mdW5jdGlvbiBoKGUscil7aWYocyhyKSxlPWEoZSxyPDA/MDowfGIocikpLCF0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKHZhciBuPTA7bjxyOysrbillW25dPTA7cmV0dXJuIGV9ZnVuY3Rpb24gYyhlLHIsbil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4mJlwiXCIhPT1ufHwobj1cInV0ZjhcIiksIXQuaXNFbmNvZGluZyhuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImVuY29kaW5nXCIgbXVzdCBiZSBhIHZhbGlkIHN0cmluZyBlbmNvZGluZycpO3ZhciBpPTB8eShyLG4pO2U9YShlLGkpO3ZhciBvPWUud3JpdGUocixuKTtyZXR1cm4gbyE9PWkmJihlPWUuc2xpY2UoMCxvKSksZX1mdW5jdGlvbiBkKHQsZSl7dmFyIHI9ZS5sZW5ndGg8MD8wOjB8YihlLmxlbmd0aCk7dD1hKHQscik7Zm9yKHZhciBuPTA7bjxyO24rPTEpdFtuXT0yNTUmZVtuXTtyZXR1cm4gdH1mdW5jdGlvbiBsKGUscixuLGkpe2lmKHIuYnl0ZUxlbmd0aCxuPDB8fHIuYnl0ZUxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihyLmJ5dGVMZW5ndGg8bisoaXx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3JldHVybiByPXZvaWQgMD09PW4mJnZvaWQgMD09PWk/bmV3IFVpbnQ4QXJyYXkocik6dm9pZCAwPT09aT9uZXcgVWludDhBcnJheShyLG4pOm5ldyBVaW50OEFycmF5KHIsbixpKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9cixlLl9fcHJvdG9fXz10LnByb3RvdHlwZSk6ZT1kKGUsciksZX1mdW5jdGlvbiBwKGUscil7aWYodC5pc0J1ZmZlcihyKSl7dmFyIG49MHxiKHIubGVuZ3RoKTtyZXR1cm4gZT1hKGUsbiksMD09PWUubGVuZ3RoP2U6KHIuY29weShlLDAsMCxuKSxlKX1pZihyKXtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJnIuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ8fFwibGVuZ3RoXCJpbiByKXJldHVyblwibnVtYmVyXCIhPXR5cGVvZiByLmxlbmd0aHx8WihyLmxlbmd0aCk/YShlLDApOmQoZSxyKTtpZihcIkJ1ZmZlclwiPT09ci50eXBlJiZRKHIuZGF0YSkpcmV0dXJuIGQoZSxyLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfWZ1bmN0aW9uIGIodCl7aWYodD49bygpKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byBhbGxvY2F0ZSBCdWZmZXIgbGFyZ2VyIHRoYW4gbWF4aW11bSBzaXplOiAweFwiK28oKS50b1N0cmluZygxNikrXCIgYnl0ZXNcIik7cmV0dXJuIDB8dH1mdW5jdGlvbiB2KGUpe3JldHVybitlIT1lJiYoZT0wKSx0LmFsbG9jKCtlKX1mdW5jdGlvbiB5KGUscil7aWYodC5pc0J1ZmZlcihlKSlyZXR1cm4gZS5sZW5ndGg7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDtcInN0cmluZ1wiIT10eXBlb2YgZSYmKGU9XCJcIitlKTt2YXIgbj1lLmxlbmd0aDtpZigwPT09bilyZXR1cm4gMDtmb3IodmFyIGk9ITE7Oylzd2l0Y2gocil7Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gbjtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlIHZvaWQgMDpyZXR1cm4gVihlKS5sZW5ndGg7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIDIqbjtjYXNlXCJoZXhcIjpyZXR1cm4gbj4+PjE7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIFkoZSkubGVuZ3RoO2RlZmF1bHQ6aWYoaSlyZXR1cm4gVihlKS5sZW5ndGg7cj0oXCJcIityKS50b0xvd2VyQ2FzZSgpLGk9ITB9fWZ1bmN0aW9uIG0odCxlLHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT1lfHxlPDApJiYoZT0wKSxlPnRoaXMubGVuZ3RoKXJldHVyblwiXCI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm5cIlwiO2lmKHI+Pj49MCxlPj4+PTAscjw9ZSlyZXR1cm5cIlwiO2Zvcih0fHwodD1cInV0ZjhcIik7Oylzd2l0Y2godCl7Y2FzZVwiaGV4XCI6cmV0dXJuIFQodGhpcyxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBCKHRoaXMsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBSKHRoaXMsZSxyKTtjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpyZXR1cm4gUCh0aGlzLGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIEkodGhpcyxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiBqKHRoaXMsZSxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK3QpO3Q9KHQrXCJcIikudG9Mb3dlckNhc2UoKSxuPSEwfX1mdW5jdGlvbiBnKHQsZSxyKXt2YXIgbj10W2VdO3RbZV09dFtyXSx0W3JdPW59ZnVuY3Rpb24gdyhlLHIsbixpLG8pe2lmKDA9PT1lLmxlbmd0aClyZXR1cm4tMTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbj8oaT1uLG49MCk6bj4yMTQ3NDgzNjQ3P249MjE0NzQ4MzY0NzpuPC0yMTQ3NDgzNjQ4JiYobj0tMjE0NzQ4MzY0OCksbj0rbixpc05hTihuKSYmKG49bz8wOmUubGVuZ3RoLTEpLG48MCYmKG49ZS5sZW5ndGgrbiksbj49ZS5sZW5ndGgpe2lmKG8pcmV0dXJuLTE7bj1lLmxlbmd0aC0xfWVsc2UgaWYobjwwKXtpZighbylyZXR1cm4tMTtuPTB9aWYoXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPXQuZnJvbShyLGkpKSx0LmlzQnVmZmVyKHIpKXJldHVybiAwPT09ci5sZW5ndGg/LTE6XyhlLHIsbixpLG8pO2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXJldHVybiByJj0yNTUsdC5UWVBFRF9BUlJBWV9TVVBQT1JUJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP28/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUscixuKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUscixuKTpfKGUsW3JdLG4saSxvKTt0aHJvdyBuZXcgVHlwZUVycm9yKFwidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyXCIpfWZ1bmN0aW9uIF8odCxlLHIsbixpKXtmdW5jdGlvbiBvKHQsZSl7cmV0dXJuIDE9PT1hP3RbZV06dC5yZWFkVUludDE2QkUoZSphKX12YXIgYT0xLGY9dC5sZW5ndGgscz1lLmxlbmd0aDtpZih2b2lkIDAhPT1uJiYobj1TdHJpbmcobikudG9Mb3dlckNhc2UoKSxcInVjczJcIj09PW58fFwidWNzLTJcIj09PW58fFwidXRmMTZsZVwiPT09bnx8XCJ1dGYtMTZsZVwiPT09bikpe2lmKHQubGVuZ3RoPDJ8fGUubGVuZ3RoPDIpcmV0dXJuLTE7YT0yLGYvPTIscy89MixyLz0yfXZhciB1O2lmKGkpe3ZhciBoPS0xO2Zvcih1PXI7dTxmO3UrKylpZihvKHQsdSk9PT1vKGUsaD09PS0xPzA6dS1oKSl7aWYoaD09PS0xJiYoaD11KSx1LWgrMT09PXMpcmV0dXJuIGgqYX1lbHNlIGghPT0tMSYmKHUtPXUtaCksaD0tMX1lbHNlIGZvcihyK3M+ZiYmKHI9Zi1zKSx1PXI7dT49MDt1LS0pe2Zvcih2YXIgYz0hMCxkPTA7ZDxzO2QrKylpZihvKHQsdStkKSE9PW8oZSxkKSl7Yz0hMTticmVha31pZihjKXJldHVybiB1fXJldHVybi0xfWZ1bmN0aW9uIE0odCxlLHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGk9dC5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSxuPmkmJihuPWkpKTpuPWk7dmFyIG89ZS5sZW5ndGg7aWYobyUyIT09MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCBoZXggc3RyaW5nXCIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBmPXBhcnNlSW50KGUuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4oZikpcmV0dXJuIGE7dFtyK2FdPWZ9cmV0dXJuIGF9ZnVuY3Rpb24gUyh0LGUscixuKXtyZXR1cm4gVyhWKGUsdC5sZW5ndGgtciksdCxyLG4pfWZ1bmN0aW9uIEUodCxlLHIsbil7cmV0dXJuIFcoSChlKSx0LHIsbil9ZnVuY3Rpb24gQSh0LGUscixuKXtyZXR1cm4gRSh0LGUscixuKX1mdW5jdGlvbiBrKHQsZSxyLG4pe3JldHVybiBXKFkoZSksdCxyLG4pfWZ1bmN0aW9uIHgodCxlLHIsbil7cmV0dXJuIFcoWChlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBJKHQsZSxyKXtyZXR1cm4gMD09PWUmJnI9PT10Lmxlbmd0aD9KLmZyb21CeXRlQXJyYXkodCk6Si5mcm9tQnl0ZUFycmF5KHQuc2xpY2UoZSxyKSl9ZnVuY3Rpb24gQih0LGUscil7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIG49W10saT1lO2k8cjspe3ZhciBvPXRbaV0sYT1udWxsLGY9bz4yMzk/NDpvPjIyMz8zOm8+MTkxPzI6MTtpZihpK2Y8PXIpe3ZhciBzLHUsaCxjO3N3aXRjaChmKXtjYXNlIDE6bzwxMjgmJihhPW8pO2JyZWFrO2Nhc2UgMjpzPXRbaSsxXSwxMjg9PT0oMTkyJnMpJiYoYz0oMzEmbyk8PDZ8NjMmcyxjPjEyNyYmKGE9YykpO2JyZWFrO2Nhc2UgMzpzPXRbaSsxXSx1PXRbaSsyXSwxMjg9PT0oMTkyJnMpJiYxMjg9PT0oMTkyJnUpJiYoYz0oMTUmbyk8PDEyfCg2MyZzKTw8Nnw2MyZ1LGM+MjA0NyYmKGM8NTUyOTZ8fGM+NTczNDMpJiYoYT1jKSk7YnJlYWs7Y2FzZSA0OnM9dFtpKzFdLHU9dFtpKzJdLGg9dFtpKzNdLDEyOD09PSgxOTImcykmJjEyOD09PSgxOTImdSkmJjEyOD09PSgxOTImaCkmJihjPSgxNSZvKTw8MTh8KDYzJnMpPDwxMnwoNjMmdSk8PDZ8NjMmaCxjPjY1NTM1JiZjPDExMTQxMTImJihhPWMpKX19bnVsbD09PWE/KGE9NjU1MzMsZj0xKTphPjY1NTM1JiYoYS09NjU1MzYsbi5wdXNoKGE+Pj4xMCYxMDIzfDU1Mjk2KSxhPTU2MzIwfDEwMjMmYSksbi5wdXNoKGEpLGkrPWZ9cmV0dXJuIE8obil9ZnVuY3Rpb24gTyh0KXt2YXIgZT10Lmxlbmd0aDtpZihlPD10dClyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdCk7Zm9yKHZhciByPVwiXCIsbj0wO248ZTspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsdC5zbGljZShuLG4rPXR0KSk7cmV0dXJuIHJ9ZnVuY3Rpb24gUih0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSgxMjcmdFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gUCh0LGUscil7dmFyIG49XCJcIjtyPU1hdGgubWluKHQubGVuZ3RoLHIpO2Zvcih2YXIgaT1lO2k8cjsrK2kpbis9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gbn1mdW5jdGlvbiBUKHQsZSxyKXt2YXIgbj10Lmxlbmd0aDsoIWV8fGU8MCkmJihlPTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGk9XCJcIixvPWU7bzxyOysrbylpKz1HKHRbb10pO3JldHVybiBpfWZ1bmN0aW9uIGoodCxlLHIpe2Zvcih2YXIgbj10LnNsaWNlKGUsciksaT1cIlwiLG89MDtvPG4ubGVuZ3RoO28rPTIpaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuW29dKzI1NipuW28rMV0pO3JldHVybiBpfWZ1bmN0aW9uIEModCxlLHIpe2lmKHQlMSE9PTB8fHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm9mZnNldCBpcyBub3QgdWludFwiKTtpZih0K2U+cil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIlRyeWluZyB0byBhY2Nlc3MgYmV5b25kIGJ1ZmZlciBsZW5ndGhcIil9ZnVuY3Rpb24gTihlLHIsbixpLG8sYSl7aWYoIXQuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJidWZmZXJcIiBhcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIGluc3RhbmNlJyk7aWYocj5vfHxyPGEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBpcyBvdXQgb2YgYm91bmRzJyk7aWYobitpPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpfWZ1bmN0aW9uIEwodCxlLHIsbil7ZTwwJiYoZT02NTUzNStlKzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgtciwyKTtpPG87KytpKXRbcitpXT0oZSYyNTU8PDgqKG4/aToxLWkpKT4+PjgqKG4/aToxLWkpfWZ1bmN0aW9uIFUodCxlLHIsbil7ZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSk7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aC1yLDQpO2k8bzsrK2kpdFtyK2ldPWU+Pj44KihuP2k6My1pKSYyNTV9ZnVuY3Rpb24geih0LGUscixuLGksbyl7aWYocituPnQubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiSW5kZXggb3V0IG9mIHJhbmdlXCIpO2lmKHI8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBEKHQsZSxyLG4saSl7cmV0dXJuIGl8fHoodCxlLHIsNCwzLjQwMjgyMzQ2NjM4NTI4ODZlMzgsLTMuNDAyODIzNDY2Mzg1Mjg4NmUzOCksJC53cml0ZSh0LGUscixuLDIzLDQpLHIrNH1mdW5jdGlvbiBxKHQsZSxyLG4saSl7cmV0dXJuIGl8fHoodCxlLHIsOCwxLjc5NzY5MzEzNDg2MjMxNTdlMzA4LC0xLjc5NzY5MzEzNDg2MjMxNTdlMzA4KSwkLndyaXRlKHQsZSxyLG4sNTIsOCkscis4fWZ1bmN0aW9uIEYodCl7aWYodD1LKHQpLnJlcGxhY2UoZXQsXCJcIiksdC5sZW5ndGg8MilyZXR1cm5cIlwiO2Zvcig7dC5sZW5ndGglNCE9PTA7KXQrPVwiPVwiO3JldHVybiB0fWZ1bmN0aW9uIEsodCl7cmV0dXJuIHQudHJpbT90LnRyaW0oKTp0LnJlcGxhY2UoL15cXHMrfFxccyskL2csXCJcIil9ZnVuY3Rpb24gRyh0KXtyZXR1cm4gdDwxNj9cIjBcIit0LnRvU3RyaW5nKDE2KTp0LnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBWKHQsZSl7ZT1lfHwxLzA7Zm9yKHZhciByLG49dC5sZW5ndGgsaT1udWxsLG89W10sYT0wO2E8bjsrK2Epe2lmKHI9dC5jaGFyQ29kZUF0KGEpLHI+NTUyOTUmJnI8NTczNDQpe2lmKCFpKXtpZihyPjU2MzE5KXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSk7Y29udGludWV9aWYoYSsxPT09bil7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWk9cjtjb250aW51ZX1pZihyPDU2MzIwKXsoZS09Myk+LTEmJm8ucHVzaCgyMzksMTkxLDE4OSksaT1yO2NvbnRpbnVlfXI9KGktNTUyOTY8PDEwfHItNTYzMjApKzY1NTM2fWVsc2UgaSYmKGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2lmKGk9bnVsbCxyPDEyOCl7aWYoKGUtPTEpPDApYnJlYWs7by5wdXNoKHIpfWVsc2UgaWYocjwyMDQ4KXtpZigoZS09Mik8MClicmVhaztvLnB1c2gocj4+NnwxOTIsNjMmcnwxMjgpfWVsc2UgaWYocjw2NTUzNil7aWYoKGUtPTMpPDApYnJlYWs7by5wdXNoKHI+PjEyfDIyNCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9ZWxzZXtpZighKHI8MTExNDExMikpdGhyb3cgbmV3IEVycm9yKFwiSW52YWxpZCBjb2RlIHBvaW50XCIpO2lmKChlLT00KTwwKWJyZWFrO28ucHVzaChyPj4xOHwyNDAscj4+MTImNjN8MTI4LHI+PjYmNjN8MTI4LDYzJnJ8MTI4KX19cmV0dXJuIG99ZnVuY3Rpb24gSCh0KXtmb3IodmFyIGU9W10scj0wO3I8dC5sZW5ndGg7KytyKWUucHVzaCgyNTUmdC5jaGFyQ29kZUF0KHIpKTtyZXR1cm4gZX1mdW5jdGlvbiBYKHQsZSl7Zm9yKHZhciByLG4saSxvPVtdLGE9MDthPHQubGVuZ3RoJiYhKChlLT0yKTwwKTsrK2Epcj10LmNoYXJDb2RlQXQoYSksbj1yPj44LGk9ciUyNTYsby5wdXNoKGkpLG8ucHVzaChuKTtyZXR1cm4gb31mdW5jdGlvbiBZKHQpe3JldHVybiBKLnRvQnl0ZUFycmF5KEYodCkpfWZ1bmN0aW9uIFcodCxlLHIsbil7Zm9yKHZhciBpPTA7aTxuJiYhKGkrcj49ZS5sZW5ndGh8fGk+PXQubGVuZ3RoKTsrK2kpZVtpK3JdPXRbaV07cmV0dXJuIGl9ZnVuY3Rpb24gWih0KXtyZXR1cm4gdCE9PXR9dmFyIEo9cig0OTApLCQ9cig0OTEpLFE9cig0OTIpO2UuQnVmZmVyPXQsZS5TbG93QnVmZmVyPXYsZS5JTlNQRUNUX01BWF9CWVRFUz01MCx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09bi5UWVBFRF9BUlJBWV9TVVBQT1JUP24uVFlQRURfQVJSQVlfU1VQUE9SVDppKCksZS5rTWF4TGVuZ3RoPW8oKSx0LnBvb2xTaXplPTgxOTIsdC5fYXVnbWVudD1mdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX189dC5wcm90b3R5cGUsZX0sdC5mcm9tPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZihudWxsLHQsZSxyKX0sdC5UWVBFRF9BUlJBWV9TVVBQT1JUJiYodC5wcm90b3R5cGUuX19wcm90b19fPVVpbnQ4QXJyYXkucHJvdG90eXBlLHQuX19wcm90b19fPVVpbnQ4QXJyYXksXCJ1bmRlZmluZWRcIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnRbU3ltYm9sLnNwZWNpZXNdPT09dCYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHQuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB1KG51bGwsdCxlLHIpfSx0LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe3JldHVybiBoKG51bGwsdCl9LHQuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKHQpe3JldHVybiBoKG51bGwsdCl9LHQuaXNCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIShudWxsPT10fHwhdC5faXNCdWZmZXIpfSx0LmNvbXBhcmU9ZnVuY3Rpb24oZSxyKXtpZighdC5pc0J1ZmZlcihlKXx8IXQuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnNcIik7aWYoZT09PXIpcmV0dXJuIDA7Zm9yKHZhciBuPWUubGVuZ3RoLGk9ci5sZW5ndGgsbz0wLGE9TWF0aC5taW4obixpKTtvPGE7KytvKWlmKGVbb10hPT1yW29dKXtuPWVbb10saT1yW29dO2JyZWFrfXJldHVybiBuPGk/LTE6aTxuPzE6MH0sdC5pc0VuY29kaW5nPWZ1bmN0aW9uKHQpe3N3aXRjaChTdHJpbmcodCkudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJsYXRpbjFcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdC5jb25jYXQ9ZnVuY3Rpb24oZSxyKXtpZighUShlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIHQuYWxsb2MoMCk7dmFyIG47aWYodm9pZCAwPT09cilmb3Iocj0wLG49MDtuPGUubGVuZ3RoOysrbilyKz1lW25dLmxlbmd0aDt2YXIgaT10LmFsbG9jVW5zYWZlKHIpLG89MDtmb3Iobj0wO248ZS5sZW5ndGg7KytuKXt2YXIgYT1lW25dO2lmKCF0LmlzQnVmZmVyKGEpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2EuY29weShpLG8pLG8rPWEubGVuZ3RofXJldHVybiBpfSx0LmJ5dGVMZW5ndGg9eSx0LnByb3RvdHlwZS5faXNCdWZmZXI9ITAsdC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCUyIT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz0yKWcodGhpcyxlLGUrMSk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9NClnKHRoaXMsZSxlKzMpLGcodGhpcyxlKzEsZSsyKTtyZXR1cm4gdGhpc30sdC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5sZW5ndGg7aWYodCU4IT09MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzXCIpO2Zvcih2YXIgZT0wO2U8dDtlKz04KWcodGhpcyxlLGUrNyksZyh0aGlzLGUrMSxlKzYpLGcodGhpcyxlKzIsZSs1KSxnKHRoaXMsZSszLGUrNCk7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIHQ9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PXQ/XCJcIjowPT09YXJndW1lbnRzLmxlbmd0aD9CKHRoaXMsMCx0KTptLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdC5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO3JldHVybiB0aGlzPT09ZXx8MD09PXQuY29tcGFyZSh0aGlzLGUpfSx0LnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9XCJcIixyPWUuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJih0PXRoaXMudG9TdHJpbmcoXCJoZXhcIiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oXCIgXCIpLHRoaXMubGVuZ3RoPnImJih0Kz1cIiAuLi4gXCIpKSxcIjxCdWZmZXIgXCIrdCtcIj5cIn0sdC5wcm90b3R5cGUuY29tcGFyZT1mdW5jdGlvbihlLHIsbixpLG8pe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKHZvaWQgMD09PXImJihyPTApLHZvaWQgMD09PW4mJihuPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09aSYmKGk9MCksdm9pZCAwPT09byYmKG89dGhpcy5sZW5ndGgpLHI8MHx8bj5lLmxlbmd0aHx8aTwwfHxvPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwib3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKGk+PW8mJnI+PW4pcmV0dXJuIDA7aWYoaT49bylyZXR1cm4tMTtpZihyPj1uKXJldHVybiAxO2lmKHI+Pj49MCxuPj4+PTAsaT4+Pj0wLG8+Pj49MCx0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGE9by1pLGY9bi1yLHM9TWF0aC5taW4oYSxmKSx1PXRoaXMuc2xpY2UoaSxvKSxoPWUuc2xpY2UocixuKSxjPTA7YzxzOysrYylpZih1W2NdIT09aFtjXSl7YT11W2NdLGY9aFtjXTticmVha31yZXR1cm4gYTxmPy0xOmY8YT8xOjB9LHQucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5pbmRleE9mKHQsZSxyKSE9PS0xfSx0LnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCEwKX0sdC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB3KHRoaXMsdCxlLHIsITEpfSx0LnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscixuKXtpZih2b2lkIDA9PT1lKW49XCJ1dGY4XCIscj10aGlzLmxlbmd0aCxlPTA7ZWxzZSBpZih2b2lkIDA9PT1yJiZcInN0cmluZ1wiPT10eXBlb2YgZSluPWUscj10aGlzLmxlbmd0aCxlPTA7ZWxzZXtpZighaXNGaW5pdGUoZSkpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVyLndyaXRlKHN0cmluZywgZW5jb2RpbmcsIG9mZnNldFssIGxlbmd0aF0pIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWRcIik7ZXw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj1cInV0ZjhcIikpOihuPXIscj12b2lkIDApfXZhciBpPXRoaXMubGVuZ3RoLWU7aWYoKHZvaWQgMD09PXJ8fHI+aSkmJihyPWkpLHQubGVuZ3RoPjAmJihyPDB8fGU8MCl8fGU+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kc1wiKTtufHwobj1cInV0ZjhcIik7Zm9yKHZhciBvPSExOzspc3dpdGNoKG4pe2Nhc2VcImhleFwiOnJldHVybiBNKHRoaXMsdCxlLHIpO2Nhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOnJldHVybiBTKHRoaXMsdCxlLHIpO2Nhc2VcImFzY2lpXCI6cmV0dXJuIEUodGhpcyx0LGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIEEodGhpcyx0LGUscik7Y2FzZVwiYmFzZTY0XCI6cmV0dXJuIGsodGhpcyx0LGUscik7Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuIHgodGhpcyx0LGUscik7ZGVmYXVsdDppZihvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIituKTtuPShcIlwiK24pLnRvTG93ZXJDYXNlKCksbz0hMH19LHQucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybnt0eXBlOlwiQnVmZmVyXCIsZGF0YTpBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbCh0aGlzLl9hcnJ8fHRoaXMsMCl9fTt2YXIgdHQ9NDA5Njt0LnByb3RvdHlwZS5zbGljZT1mdW5jdGlvbihlLHIpe3ZhciBuPXRoaXMubGVuZ3RoO2U9fn5lLHI9dm9pZCAwPT09cj9uOn5+cixlPDA/KGUrPW4sZTwwJiYoZT0wKSk6ZT5uJiYoZT1uKSxyPDA/KHIrPW4scjwwJiYocj0wKSk6cj5uJiYocj1uKSxyPGUmJihyPWUpO3ZhciBpO2lmKHQuVFlQRURfQVJSQVlfU1VQUE9SVClpPXRoaXMuc3ViYXJyYXkoZSxyKSxpLl9fcHJvdG9fXz10LnByb3RvdHlwZTtlbHNle3ZhciBvPXItZTtpPW5ldyB0KG8sdm9pZCAwKTtmb3IodmFyIGE9MDthPG87KythKWlbYV09dGhpc1thK2VdfXJldHVybiBpfSx0LnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW3RdLGk9MSxvPTA7KytvPGUmJihpKj0yNTYpOyluKz10aGlzW3Qrb10qaTtyZXR1cm4gbn0sdC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0Ky0tZV0saT0xO2U+MCYmKGkqPTI1Nik7KW4rPXRoaXNbdCstLWVdKmk7cmV0dXJuIG59LHQucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMSx0aGlzLmxlbmd0aCksdGhpc1t0XX0sdC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdfHRoaXNbdCsxXTw8OH0sdC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwyLHRoaXMubGVuZ3RoKSx0aGlzW3RdPDw4fHRoaXNbdCsxXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwodGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNikrMTY3NzcyMTYqdGhpc1t0KzNdfSx0LnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbdF0rKHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXSl9LHQucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIGkqPTEyOCxuPj1pJiYobi09TWF0aC5wb3coMiw4KmUpKSxufSx0LnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPWUsaT0xLG89dGhpc1t0Ky0tbl07bj4wJiYoaSo9MjU2KTspbys9dGhpc1t0Ky0tbl0qaTtyZXR1cm4gaSo9MTI4LG8+PWkmJihvLT1NYXRoLnBvdygyLDgqZSkpLG99LHQucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1t0XT8oMjU1LXRoaXNbdF0rMSkqLTE6dGhpc1t0XX0sdC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24odCxlKXtlfHxDKHQsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1t0XXx0aGlzW3QrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LHQucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKHQsZSl7ZXx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdCsxXXx0aGlzW3RdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx0LnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh8dGhpc1t0KzJdPDwxNnx0aGlzW3QrM108PDI0fSx0LnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksdGhpc1t0XTw8MjR8dGhpc1t0KzFdPDwxNnx0aGlzW3QrMl08PDh8dGhpc1t0KzNdfSx0LnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMCwyMyw0KX0sdC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITEsMjMsNCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsOCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMCw1Miw4KX0sdC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw4LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCExLDUyLDgpfSx0LnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAscnw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnIpLTE7Tih0aGlzLHQsZSxyLGksMCl9dmFyIG89MSxhPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KythPHImJihvKj0yNTYpOyl0aGlzW2UrYV09dC9vJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZVVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAscnw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnIpLTE7Tih0aGlzLHQsZSxyLGksMCl9dmFyIG89ci0xLGE9MTtmb3IodGhpc1tlK29dPTI1NSZ0Oy0tbz49MCYmKGEqPTI1Nik7KXRoaXNbZStvXT10L2EmMjU1O3JldHVybiBlK3J9LHQucHJvdG90eXBlLndyaXRlVUludDg9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwxLDI1NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLHRoaXNbcl09MjU1JmUscisxfSx0LnByb3RvdHlwZS53cml0ZVVJbnQxNkxFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiw2NTUzNSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JmUsdGhpc1tyKzFdPWU+Pj44KTpMKHRoaXMsZSxyLCEwKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlVUludDE2QkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDY1NTM1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+OCx0aGlzW3IrMV09MjU1JmUpOkwodGhpcyxlLHIsITEpLHIrMn0sdC5wcm90b3R5cGUud3JpdGVVSW50MzJMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbciszXT1lPj4+MjQsdGhpc1tyKzJdPWU+Pj4xNix0aGlzW3IrMV09ZT4+PjgsdGhpc1tyXT0yNTUmZSk6VSh0aGlzLGUsciwhMCkscis0fSx0LnByb3RvdHlwZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCw0Mjk0OTY3Mjk1LDApLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT1lPj4+MjQsdGhpc1tyKzFdPWU+Pj4xNix0aGlzW3IrMl09ZT4+PjgsdGhpc1tyKzNdPTI1NSZlKTpVKHRoaXMsZSxyLCExKSxyKzR9LHQucHJvdG90eXBlLndyaXRlSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLCFuKXt2YXIgaT1NYXRoLnBvdygyLDgqci0xKTtOKHRoaXMsdCxlLHIsaS0xLC1pKX12YXIgbz0wLGE9MSxmPTA7Zm9yKHRoaXNbZV09MjU1JnQ7KytvPHImJihhKj0yNTYpOyl0PDAmJjA9PT1mJiYwIT09dGhpc1tlK28tMV0mJihmPTEpLHRoaXNbZStvXT0odC9hPj4wKS1mJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZUludEJFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIG89ci0xLGE9MSxmPTA7Zm9yKHRoaXNbZStvXT0yNTUmdDstLW8+PTAmJihhKj0yNTYpOyl0PDAmJjA9PT1mJiYwIT09dGhpc1tlK28rMV0mJihmPTEpLHRoaXNbZStvXT0odC9hPj4wKS1mJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZUludDg9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwxLDEyNywtMTI4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlR8fChlPU1hdGguZmxvb3IoZSkpLGU8MCYmKGU9MjU1K2UrMSksdGhpc1tyXT0yNTUmZSxyKzF9LHQucHJvdG90eXBlLndyaXRlSW50MTZMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsMzI3NjcsLTMyNzY4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09MjU1JmUsdGhpc1tyKzFdPWU+Pj44KTpMKHRoaXMsZSxyLCEwKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlSW50MTZCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsMzI3NjcsLTMyNzY4KSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjgsdGhpc1tyKzFdPTI1NSZlKTpMKHRoaXMsZSxyLCExKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlSW50MzJMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCx0aGlzW3IrMl09ZT4+PjE2LHRoaXNbciszXT1lPj4+MjQpOlUodGhpcyxlLHIsITApLHIrNH0sdC5wcm90b3R5cGUud3JpdGVJbnQzMkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsNCwyMTQ3NDgzNjQ3LC0yMTQ3NDgzNjQ4KSxlPDAmJihlPTQyOTQ5NjcyOTUrZSsxKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjI0LHRoaXNbcisxXT1lPj4+MTYsdGhpc1tyKzJdPWU+Pj44LHRoaXNbciszXT0yNTUmZSk6VSh0aGlzLGUsciwhMSkscis0fSx0LnByb3RvdHlwZS53cml0ZUZsb2F0TEU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCEwLHIpfSx0LnByb3RvdHlwZS53cml0ZUZsb2F0QkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBEKHRoaXMsdCxlLCExLHIpfSx0LnByb3RvdHlwZS53cml0ZURvdWJsZUxFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gcSh0aGlzLHQsZSwhMCxyKX0sdC5wcm90b3R5cGUud3JpdGVEb3VibGVCRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHEodGhpcyx0LGUsITEscil9LHQucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24oZSxyLG4saSl7aWYobnx8KG49MCksaXx8MD09PWl8fChpPXRoaXMubGVuZ3RoKSxyPj1lLmxlbmd0aCYmKHI9ZS5sZW5ndGgpLHJ8fChyPTApLGk+MCYmaTxuJiYoaT1uKSxpPT09bilyZXR1cm4gMDtpZigwPT09ZS5sZW5ndGh8fDA9PT10aGlzLmxlbmd0aClyZXR1cm4gMDtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKG48MHx8bj49dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VTdGFydCBvdXQgb2YgYm91bmRzXCIpO2lmKGk8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNvdXJjZUVuZCBvdXQgb2YgYm91bmRzXCIpO2k+dGhpcy5sZW5ndGgmJihpPXRoaXMubGVuZ3RoKSxlLmxlbmd0aC1yPGktbiYmKGk9ZS5sZW5ndGgtcituKTt2YXIgbyxhPWktbjtpZih0aGlzPT09ZSYmbjxyJiZyPGkpZm9yKG89YS0xO28+PTA7LS1vKWVbbytyXT10aGlzW28rbl07ZWxzZSBpZihhPDFlM3x8IXQuVFlQRURfQVJSQVlfU1VQUE9SVClmb3Iobz0wO288YTsrK28pZVtvK3JdPXRoaXNbbytuXTtlbHNlIFVpbnQ4QXJyYXkucHJvdG90eXBlLnNldC5jYWxsKGUsdGhpcy5zdWJhcnJheShuLG4rYSkscik7cmV0dXJuIGF9LHQucHJvdG90eXBlLmZpbGw9ZnVuY3Rpb24oZSxyLG4saSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiByPyhpPXIscj0wLG49dGhpcy5sZW5ndGgpOlwic3RyaW5nXCI9PXR5cGVvZiBuJiYoaT1uLG49dGhpcy5sZW5ndGgpLDE9PT1lLmxlbmd0aCl7dmFyIG89ZS5jaGFyQ29kZUF0KDApO288MjU2JiYoZT1vKX1pZih2b2lkIDAhPT1pJiZcInN0cmluZ1wiIT10eXBlb2YgaSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmIXQuaXNFbmNvZGluZyhpKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIraSl9ZWxzZVwibnVtYmVyXCI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZihyPDB8fHRoaXMubGVuZ3RoPHJ8fHRoaXMubGVuZ3RoPG4pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJPdXQgb2YgcmFuZ2UgaW5kZXhcIik7aWYobjw9cilyZXR1cm4gdGhpcztyPj4+PTAsbj12b2lkIDA9PT1uP3RoaXMubGVuZ3RoOm4+Pj4wLGV8fChlPTApO3ZhciBhO2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKWZvcihhPXI7YTxuOysrYSl0aGlzW2FdPWU7ZWxzZXt2YXIgZj10LmlzQnVmZmVyKGUpP2U6VihuZXcgdChlLGkpLnRvU3RyaW5nKCkpLHM9Zi5sZW5ndGg7Zm9yKGE9MDthPG4tcjsrK2EpdGhpc1thK3JdPWZbYSVzXX1yZXR1cm4gdGhpc307dmFyIGV0PS9bXitcXC8wLTlBLVphLXotX10vZ30pLmNhbGwoZSxyKDEpLkJ1ZmZlcixyKDM5KSl9LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKCFuKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhbiBvYmplY3QhXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4NykoXCJ3a3NcIiksaT1yKDQ4KSxvPXIoNCkuU3ltYm9sLGE9XCJmdW5jdGlvblwiPT10eXBlb2YgbyxmPXQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XXx8KG5bdF09YSYmb1t0XXx8KGE/bzppKShcIlN5bWJvbC5cIit0KSl9O2Yuc3RvcmU9bn0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcig1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyksaT1yKDE3NCksbz1yKDI5KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cig4KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24odCxlLHIpe2lmKG4odCksZT1vKGUsITApLG4ociksaSl0cnl7cmV0dXJuIGEodCxlLHIpfWNhdGNoKHQpe31pZihcImdldFwiaW4gcnx8XCJzZXRcImluIHIpdGhyb3cgVHlwZUVycm9yKFwiQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhXCIpO3JldHVyblwidmFsdWVcImluIHImJih0W2VdPXIudmFsdWUpLHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzOCksaT1NYXRoLm1pbjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ+MD9pKG4odCksOTAwNzE5OTI1NDc0MDk5MSk6MH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIE9iamVjdChuKHQpKX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30uaGFzT3duUHJvcGVydHk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHIuY2FsbCh0LGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBmdW5jdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KSxpPXIoMzcpO3QuZXhwb3J0cz1yKDgpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbi5mKHQsZSxpKDEscikpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRbZV09cix0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDE0KSxvPXIoMTIpLGE9cig0OCkoXCJzcmNcIiksZj1cInRvU3RyaW5nXCIscz1GdW5jdGlvbltmXSx1PShcIlwiK3MpLnNwbGl0KGYpO3IoMzIpLmluc3BlY3RTb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIHMuY2FsbCh0KX0sKHQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmKXt2YXIgcz1cImZ1bmN0aW9uXCI9PXR5cGVvZiByO3MmJihvKHIsXCJuYW1lXCIpfHxpKHIsXCJuYW1lXCIsZSkpLHRbZV0hPT1yJiYocyYmKG8ocixhKXx8aShyLGEsdFtlXT9cIlwiK3RbZV06dS5qb2luKFN0cmluZyhlKSkpKSx0PT09bj90W2VdPXI6Zj90W2VdP3RbZV09cjppKHQsZSxyKTooZGVsZXRlIHRbZV0saSh0LGUscikpKX0pKEZ1bmN0aW9uLnByb3RvdHlwZSxmLGZ1bmN0aW9uKCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcyYmdGhpc1thXXx8cy5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig1KSxvPXIoMjQpLGE9L1wiL2csZj1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1TdHJpbmcobyh0KSksZj1cIjxcIitlO3JldHVyblwiXCIhPT1yJiYoZis9XCIgXCIrcisnPVwiJytTdHJpbmcobikucmVwbGFjZShhLFwiJnF1b3Q7XCIpKydcIicpLGYrXCI+XCIraStcIjwvXCIrZStcIj5cIn07dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9e307clt0XT1lKGYpLG4obi5QK24uRippKGZ1bmN0aW9uKCl7dmFyIGU9XCJcIlt0XSgnXCInKTtyZXR1cm4gZSE9PWUudG9Mb3dlckNhc2UoKXx8ZS5zcGxpdCgnXCInKS5sZW5ndGg+M30pLFwiU3RyaW5nXCIscil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NSksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG4oaSh0KSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLFxuaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxkLnByb3RvdHlwZS5wZXJtdXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXtmb3IodmFyIGE9MDthPG87YSsrKW5bYV09ZVt0W2FdXSxpW2FdPXJbdFthXV19LGQucHJvdG90eXBlLnRyYW5zZm9ybT1mdW5jdGlvbih0LGUscixuLGksbyl7dGhpcy5wZXJtdXRlKG8sdCxlLHIsbixpKTtmb3IodmFyIGE9MTthPGk7YTw8PTEpZm9yKHZhciBmPWE8PDEscz1NYXRoLmNvcygyKk1hdGguUEkvZiksdT1NYXRoLnNpbigyKk1hdGguUEkvZiksaD0wO2g8aTtoKz1mKWZvcih2YXIgYz1zLGQ9dSxsPTA7bDxhO2wrKyl7dmFyIHA9cltoK2xdLGI9bltoK2xdLHY9cltoK2wrYV0seT1uW2grbCthXSxtPWMqdi1kKnk7eT1jKnkrZCp2LHY9bSxyW2grbF09cCt2LG5baCtsXT1iK3kscltoK2wrYV09cC12LG5baCtsK2FdPWIteSxsIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO1xucmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24udmVyc2lvbj1yKDQ2NSkudmVyc2lvbixuLnV0aWxzPXIoNTIxKSxuLnJhbmQ9cig1MjIpLG4uaG1hY0RSQkc9cig1MTkpLG4uY3VydmU9cig5OSksbi5jdXJ2ZXM9cig1MTIpLG4uZWM9cig1MTMpLG4uZWRkc2E9cig1MTYpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2NiksaT1yKDM3KSxvPXIoMTcpLGE9cigyOSksZj1yKDEyKSxzPXIoMTc0KSx1PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I7ZS5mPXIoOCk/dTpmdW5jdGlvbih0LGUpe2lmKHQ9byh0KSxlPWEoZSwhMCkscyl0cnl7cmV0dXJuIHUodCxlKX1jYXRjaCh0KXt9aWYoZih0LGUpKXJldHVybiBpKCFuLmYuY2FsbCh0LGUpLHRbZV0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTIpLGk9cigxMSksbz1yKDEzMykoXCJJRV9QUk9UT1wiKSxhPU9iamVjdC5wcm90b3R5cGU7dC5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24odCl7cmV0dXJuIHQ9aSh0KSxuKHQsbyk/dFtvXTpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvbnN0cnVjdG9yJiZ0IGluc3RhbmNlb2YgdC5jb25zdHJ1Y3Rvcj90LmNvbnN0cnVjdG9yLnByb3RvdHlwZTp0IGluc3RhbmNlb2YgT2JqZWN0P2E6bnVsbH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24udmVyc2lvbj1yKDQ2NykudmVyc2lvbixuLnV0aWxzPXIoNTU4KSxuLnJhbmQ9cig1NTkpLG4uaG1hY0RSQkc9cig1NTYpLG4uY3VydmU9cigxMDQpLG4uY3VydmVzPXIoNTQ5KSxuLmVjPXIoNTUwKSxuLmVkZHNhPXIoNTUzKX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHIuY2FsbCh0KS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09dCl0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjYWxsIG1ldGhvZCBvbiAgXCIrdCk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4hIXQmJm4oZnVuY3Rpb24oKXtlP3QuY2FsbChudWxsLGZ1bmN0aW9uKCl7fSwxKTp0LmNhbGwobnVsbCl9KX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3Rocm93IG5ldyBFcnJvcihcInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gbigpe3Rocm93IG5ldyBFcnJvcihcImNsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZFwiKX1mdW5jdGlvbiBpKHQpe2lmKGg9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KHQsMCk7aWYoKGg9PT1yfHwhaCkmJnNldFRpbWVvdXQpcmV0dXJuIGg9c2V0VGltZW91dCxzZXRUaW1lb3V0KHQsMCk7dHJ5e3JldHVybiBoKHQsMCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBoLmNhbGwobnVsbCx0LDApfWNhdGNoKGUpe3JldHVybiBoLmNhbGwodGhpcyx0LDApfX19ZnVuY3Rpb24gbyh0KXtpZihjPT09Y2xlYXJUaW1lb3V0KXJldHVybiBjbGVhclRpbWVvdXQodCk7aWYoKGM9PT1ufHwhYykmJmNsZWFyVGltZW91dClyZXR1cm4gYz1jbGVhclRpbWVvdXQsY2xlYXJUaW1lb3V0KHQpO3RyeXtyZXR1cm4gYyh0KX1jYXRjaChlKXt0cnl7cmV0dXJuIGMuY2FsbChudWxsLHQpfWNhdGNoKGUpe3JldHVybiBjLmNhbGwodGhpcyx0KX19fWZ1bmN0aW9uIGEoKXtiJiZsJiYoYj0hMSxsLmxlbmd0aD9wPWwuY29uY2F0KHApOnY9LTEscC5sZW5ndGgmJmYoKSl9ZnVuY3Rpb24gZigpe2lmKCFiKXt2YXIgdD1pKGEpO2I9ITA7Zm9yKHZhciBlPXAubGVuZ3RoO2U7KXtmb3IobD1wLHA9W107Kyt2PGU7KWwmJmxbdl0ucnVuKCk7dj0tMSxlPXAubGVuZ3RofWw9bnVsbCxiPSExLG8odCl9fWZ1bmN0aW9uIHModCxlKXt0aGlzLmZ1bj10LHRoaXMuYXJyYXk9ZX1mdW5jdGlvbiB1KCl7fXZhciBoLGMsZD10LmV4cG9ydHM9e307IWZ1bmN0aW9uKCl7dHJ5e2g9XCJmdW5jdGlvblwiPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnJ9Y2F0Y2godCl7aD1yfXRyeXtjPVwiZnVuY3Rpb25cIj09dHlwZW9mIGNsZWFyVGltZW91dD9jbGVhclRpbWVvdXQ6bn1jYXRjaCh0KXtjPW59fSgpO3ZhciBsLHA9W10sYj0hMSx2PS0xO2QubmV4dFRpY2s9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGgtMSk7aWYoYXJndW1lbnRzLmxlbmd0aD4xKWZvcih2YXIgcj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZVtyLTFdPWFyZ3VtZW50c1tyXTtwLnB1c2gobmV3IHModCxlKSksMSE9PXAubGVuZ3RofHxifHxpKGYpfSxzLnByb3RvdHlwZS5ydW49ZnVuY3Rpb24oKXt0aGlzLmZ1bi5hcHBseShudWxsLHRoaXMuYXJyYXkpfSxkLnRpdGxlPVwiYnJvd3NlclwiLGQuYnJvd3Nlcj0hMCxkLmVudj17fSxkLmFyZ3Y9W10sZC52ZXJzaW9uPVwiXCIsZC52ZXJzaW9ucz17fSxkLm9uPXUsZC5hZGRMaXN0ZW5lcj11LGQub25jZT11LGQub2ZmPXUsZC5yZW1vdmVMaXN0ZW5lcj11LGQucmVtb3ZlQWxsTGlzdGVuZXJzPXUsZC5lbWl0PXUsZC5iaW5kaW5nPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkXCIpfSxkLmN3ZD1mdW5jdGlvbigpe3JldHVyblwiL1wifSxkLmNoZGlyPWZ1bmN0aW9uKHQpe3Rocm93IG5ldyBFcnJvcihcInByb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZFwiKX0sZC51bWFzaz1mdW5jdGlvbigpe3JldHVybiAwfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzMpLGk9cig2NSksbz1yKDExKSxhPXIoMTApLGY9cigyODMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPTE9PXQscz0yPT10LHU9Mz09dCxoPTQ9PXQsYz02PT10LGQ9NT09dHx8YyxsPWV8fGY7cmV0dXJuIGZ1bmN0aW9uKGUsZixwKXtmb3IodmFyIGIsdix5PW8oZSksbT1pKHkpLGc9bihmLHAsMyksdz1hKG0ubGVuZ3RoKSxfPTAsTT1yP2woZSx3KTpzP2woZSwwKTp2b2lkIDA7dz5fO18rKylpZigoZHx8XyBpbiBtKSYmKGI9bVtfXSx2PWcoYixfLHkpLHQpKWlmKHIpTVtfXT12O2Vsc2UgaWYodilzd2l0Y2godCl7Y2FzZSAzOnJldHVybiEwO2Nhc2UgNTpyZXR1cm4gYjtjYXNlIDY6cmV0dXJuIF87Y2FzZSAyOk0ucHVzaChiKX1lbHNlIGlmKGgpcmV0dXJuITE7cmV0dXJuIGM/LTE6dXx8aD9oOk19fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDMyKSxvPXIoNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9KGkuT2JqZWN0fHx7fSlbdF18fE9iamVjdFt0XSxhPXt9O2FbdF09ZShyKSxuKG4uUytuLkYqbyhmdW5jdGlvbigpe3IoMSl9KSxcIk9iamVjdFwiLGEpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksXG50aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe2kuY2FsbCh0aGlzKX10LmV4cG9ydHM9bjt2YXIgaT1yKDExMCkuRXZlbnRFbWl0dGVyLG89cig2MDMpO28obixpKSxuLlJlYWRhYmxlPXIoNjAwKSxuLldyaXRhYmxlPXIoNjAyKSxuLkR1cGxleD1yKDU5NSksbi5UcmFuc2Zvcm09cig2MDEpLG4uUGFzc1Rocm91Z2g9cig1OTkpLG4uU3RyZWFtPW4sbi5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoZSl7dC53cml0YWJsZSYmITE9PT10LndyaXRlKGUpJiZ1LnBhdXNlJiZ1LnBhdXNlKCl9ZnVuY3Rpb24gbigpe3UucmVhZGFibGUmJnUucmVzdW1lJiZ1LnJlc3VtZSgpfWZ1bmN0aW9uIG8oKXtofHwoaD0hMCx0LmVuZCgpKX1mdW5jdGlvbiBhKCl7aHx8KGg9ITAsXCJmdW5jdGlvblwiPT10eXBlb2YgdC5kZXN0cm95JiZ0LmRlc3Ryb3koKSl9ZnVuY3Rpb24gZih0KXtpZihzKCksMD09PWkubGlzdGVuZXJDb3VudCh0aGlzLFwiZXJyb3JcIikpdGhyb3cgdH1mdW5jdGlvbiBzKCl7dS5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixyKSx0LnJlbW92ZUxpc3RlbmVyKFwiZHJhaW5cIixuKSx1LnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbyksdS5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsYSksdS5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIsZiksdS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLHMpLHUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHMpLHQucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLHMpfXZhciB1PXRoaXM7dS5vbihcImRhdGFcIixyKSx0Lm9uKFwiZHJhaW5cIixuKSx0Ll9pc1N0ZGlvfHxlJiZlLmVuZD09PSExfHwodS5vbihcImVuZFwiLG8pLHUub24oXCJjbG9zZVwiLGEpKTt2YXIgaD0hMTtyZXR1cm4gdS5vbihcImVycm9yXCIsZiksdC5vbihcImVycm9yXCIsZiksdS5vbihcImVuZFwiLHMpLHUub24oXCJjbG9zZVwiLHMpLHQub24oXCJjbG9zZVwiLHMpLHQuZW1pdChcInBpcGVcIix1KSx0fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjQuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTApLGk9cigwKSxvPXIoODcpKFwibWV0YWRhdGFcIiksYT1vLnN0b3JlfHwoby5zdG9yZT1uZXcocigxOTMpKSksZj1mdW5jdGlvbih0LGUscil7dmFyIGk9YS5nZXQodCk7aWYoIWkpe2lmKCFyKXJldHVybjthLnNldCh0LGk9bmV3IG4pfXZhciBvPWkuZ2V0KGUpO2lmKCFvKXtpZighcilyZXR1cm47aS5zZXQoZSxvPW5ldyBuKX1yZXR1cm4gb30scz1mdW5jdGlvbih0LGUscil7dmFyIG49ZihlLHIsITEpO3JldHVybiB2b2lkIDAhPT1uJiZuLmhhcyh0KX0sdT1mdW5jdGlvbih0LGUscil7dmFyIG49ZihlLHIsITEpO3JldHVybiB2b2lkIDA9PT1uP3ZvaWQgMDpuLmdldCh0KX0saD1mdW5jdGlvbih0LGUscixuKXtmKHIsbiwhMCkuc2V0KHQsZSl9LGM9ZnVuY3Rpb24odCxlKXt2YXIgcj1mKHQsZSwhMSksbj1bXTtyZXR1cm4gciYmci5mb3JFYWNoKGZ1bmN0aW9uKHQsZSl7bi5wdXNoKGUpfSksbn0sZD1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dHx8XCJzeW1ib2xcIj09dHlwZW9mIHQ/dDpTdHJpbmcodCl9LGw9ZnVuY3Rpb24odCl7aShpLlMsXCJSZWZsZWN0XCIsdCl9O3QuZXhwb3J0cz17c3RvcmU6YSxtYXA6ZixoYXM6cyxnZXQ6dSxzZXQ6aCxrZXlzOmMsa2V5OmQsZXhwOmx9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7aWYocig4KSl7dmFyIG49cig0MSksaT1yKDQpLG89cig1KSxhPXIoMCksZj1yKDg4KSxzPXIoMTQwKSx1PXIoMzMpLGg9cig0MCksYz1yKDM3KSxkPXIoMTQpLGw9cig0NSkscD1yKDM4KSxiPXIoMTApLHY9cig0NykseT1yKDI5KSxtPXIoMTIpLGc9cigxODcpLHc9cig2NCksXz1yKDYpLE09cigxMSksUz1yKDEyNSksRT1yKDQyKSxBPXIoMjEpLGs9cig0MykuZix4PXIoMTQyKSxJPXIoNDgpLEI9cig3KSxPPXIoMjcpLFI9cig3OCksUD1yKDEzNCksVD1yKDE0Myksaj1yKDU2KSxDPXIoODQpLE49cig0NiksTD1yKDExOCksVT1yKDE2Nyksej1yKDkpLEQ9cigyMCkscT16LmYsRj1ELmYsSz1pLlJhbmdlRXJyb3IsRz1pLlR5cGVFcnJvcixWPWkuVWludDhBcnJheSxIPVwiQXJyYXlCdWZmZXJcIixYPVwiU2hhcmVkXCIrSCxZPVwiQllURVNfUEVSX0VMRU1FTlRcIixXPVwicHJvdG90eXBlXCIsWj1BcnJheVtXXSxKPXMuQXJyYXlCdWZmZXIsJD1zLkRhdGFWaWV3LFE9TygwKSx0dD1PKDIpLGV0PU8oMykscnQ9Tyg0KSxudD1PKDUpLGl0PU8oNiksb3Q9UighMCksYXQ9UighMSksZnQ9VC52YWx1ZXMsc3Q9VC5rZXlzLHV0PVQuZW50cmllcyxodD1aLmxhc3RJbmRleE9mLGN0PVoucmVkdWNlLGR0PVoucmVkdWNlUmlnaHQsbHQ9Wi5qb2luLHB0PVouc29ydCxidD1aLnNsaWNlLHZ0PVoudG9TdHJpbmcseXQ9Wi50b0xvY2FsZVN0cmluZyxtdD1CKFwiaXRlcmF0b3JcIiksZ3Q9QihcInRvU3RyaW5nVGFnXCIpLHd0PUkoXCJ0eXBlZF9jb25zdHJ1Y3RvclwiKSxfdD1JKFwiZGVmX2NvbnN0cnVjdG9yXCIpLE10PWYuQ09OU1RSLFN0PWYuVFlQRUQsRXQ9Zi5WSUVXLEF0PVwiV3JvbmcgbGVuZ3RoIVwiLGt0PU8oMSxmdW5jdGlvbih0LGUpe3JldHVybiBQdChQKHQsdFtfdF0pLGUpfSkseHQ9byhmdW5jdGlvbigpe3JldHVybiAxPT09bmV3IFYobmV3IFVpbnQxNkFycmF5KFsxXSkuYnVmZmVyKVswXX0pLEl0PSEhViYmISFWW1ddLnNldCYmbyhmdW5jdGlvbigpe25ldyBWKDEpLnNldCh7fSl9KSxCdD1mdW5jdGlvbih0LGUpe2lmKHZvaWQgMD09PXQpdGhyb3cgRyhBdCk7dmFyIHI9K3Qsbj1iKHQpO2lmKGUmJiFnKHIsbikpdGhyb3cgSyhBdCk7cmV0dXJuIG59LE90PWZ1bmN0aW9uKHQsZSl7dmFyIHI9cCh0KTtpZihyPDB8fHIlZSl0aHJvdyBLKFwiV3Jvbmcgb2Zmc2V0IVwiKTtyZXR1cm4gcn0sUnQ9ZnVuY3Rpb24odCl7aWYoXyh0KSYmU3QgaW4gdClyZXR1cm4gdDt0aHJvdyBHKHQrXCIgaXMgbm90IGEgdHlwZWQgYXJyYXkhXCIpfSxQdD1mdW5jdGlvbih0LGUpe2lmKCEoXyh0KSYmd3QgaW4gdCkpdGhyb3cgRyhcIkl0IGlzIG5vdCBhIHR5cGVkIGFycmF5IGNvbnN0cnVjdG9yIVwiKTtyZXR1cm4gbmV3IHQoZSl9LFR0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGp0KFAodCx0W190XSksZSl9LGp0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj1lLmxlbmd0aCxpPVB0KHQsbik7bj5yOylpW3JdPWVbcisrXTtyZXR1cm4gaX0sQ3Q9ZnVuY3Rpb24odCxlLHIpe3EodCxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZFtyXX19KX0sTnQ9ZnVuY3Rpb24odCl7dmFyIGUscixuLGksbyxhLGY9TSh0KSxzPWFyZ3VtZW50cy5sZW5ndGgsaD1zPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxjPXZvaWQgMCE9PWgsZD14KGYpO2lmKHZvaWQgMCE9ZCYmIVMoZCkpe2ZvcihhPWQuY2FsbChmKSxuPVtdLGU9MDshKG89YS5uZXh0KCkpLmRvbmU7ZSsrKW4ucHVzaChvLnZhbHVlKTtmPW59Zm9yKGMmJnM+MiYmKGg9dShoLGFyZ3VtZW50c1syXSwyKSksZT0wLHI9YihmLmxlbmd0aCksaT1QdCh0aGlzLHIpO3I+ZTtlKyspaVtlXT1jP2goZltlXSxlKTpmW2VdO3JldHVybiBpfSxMdD1mdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPVB0KHRoaXMsZSk7ZT50OylyW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiByfSxVdD0hIVYmJm8oZnVuY3Rpb24oKXt5dC5jYWxsKG5ldyBWKDEpKX0pLHp0PWZ1bmN0aW9uKCl7cmV0dXJuIHl0LmFwcGx5KFV0P2J0LmNhbGwoUnQodGhpcykpOlJ0KHRoaXMpLGFyZ3VtZW50cyl9LER0PXtjb3B5V2l0aGluOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIFUuY2FsbChSdCh0aGlzKSx0LGUsYXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDApfSxldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gcnQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZpbGw6ZnVuY3Rpb24odCl7cmV0dXJuIEwuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0sZmlsdGVyOmZ1bmN0aW9uKHQpe3JldHVybiBUdCh0aGlzLHR0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApKX0sZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gbnQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gaXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGZvckVhY2g6ZnVuY3Rpb24odCl7UShSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0saW5kZXhPZjpmdW5jdGlvbih0KXtyZXR1cm4gYXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGluY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBvdChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKX0sam9pbjpmdW5jdGlvbih0KXtyZXR1cm4gbHQuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0sbGFzdEluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGh0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LG1hcDpmdW5jdGlvbih0KXtyZXR1cm4ga3QoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LHJlZHVjZTpmdW5jdGlvbih0KXtyZXR1cm4gY3QuYXBwbHkoUnQodGhpcyksYXJndW1lbnRzKX0scmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGR0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LHJldmVyc2U6ZnVuY3Rpb24oKXtmb3IodmFyIHQsZT10aGlzLHI9UnQoZSkubGVuZ3RoLG49TWF0aC5mbG9vcihyLzIpLGk9MDtpPG47KXQ9ZVtpXSxlW2krK109ZVstLXJdLGVbcl09dDtyZXR1cm4gZX0sc29tZTpmdW5jdGlvbih0KXtyZXR1cm4gZXQoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LHNvcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIHB0LmNhbGwoUnQodGhpcyksdCl9LHN1YmFycmF5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9UnQodGhpcyksbj1yLmxlbmd0aCxpPXYodCxuKTtyZXR1cm4gbmV3KFAocixyW190XSkpKHIuYnVmZmVyLHIuYnl0ZU9mZnNldCtpKnIuQllURVNfUEVSX0VMRU1FTlQsYigodm9pZCAwPT09ZT9uOnYoZSxuKSktaSkpfX0scXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gVHQodGhpcyxidC5jYWxsKFJ0KHRoaXMpLHQsZSkpfSxGdD1mdW5jdGlvbih0KXtSdCh0aGlzKTt2YXIgZT1PdChhcmd1bWVudHNbMV0sMSkscj10aGlzLmxlbmd0aCxuPU0odCksaT1iKG4ubGVuZ3RoKSxvPTA7aWYoaStlPnIpdGhyb3cgSyhBdCk7Zm9yKDtvPGk7KXRoaXNbZStvXT1uW28rK119LEt0PXtlbnRyaWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHV0LmNhbGwoUnQodGhpcykpfSxrZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIHN0LmNhbGwoUnQodGhpcykpfSx2YWx1ZXM6ZnVuY3Rpb24oKXtyZXR1cm4gZnQuY2FsbChSdCh0aGlzKSl9fSxHdD1mdW5jdGlvbih0LGUpe3JldHVybiBfKHQpJiZ0W1N0XSYmXCJzeW1ib2xcIiE9dHlwZW9mIGUmJmUgaW4gdCYmU3RyaW5nKCtlKT09U3RyaW5nKGUpfSxWdD1mdW5jdGlvbih0LGUpe3JldHVybiBHdCh0LGU9eShlLCEwKSk/YygyLHRbZV0pOkYodCxlKX0sSHQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiEoR3QodCxlPXkoZSwhMCkpJiZfKHIpJiZtKHIsXCJ2YWx1ZVwiKSl8fG0ocixcImdldFwiKXx8bShyLFwic2V0XCIpfHxyLmNvbmZpZ3VyYWJsZXx8bShyLFwid3JpdGFibGVcIikmJiFyLndyaXRhYmxlfHxtKHIsXCJlbnVtZXJhYmxlXCIpJiYhci5lbnVtZXJhYmxlP3EodCxlLHIpOih0W2VdPXIudmFsdWUsdCl9O010fHwoRC5mPVZ0LHouZj1IdCksYShhLlMrYS5GKiFNdCxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6VnQsZGVmaW5lUHJvcGVydHk6SHR9KSxvKGZ1bmN0aW9uKCl7dnQuY2FsbCh7fSl9KSYmKHZ0PXl0PWZ1bmN0aW9uKCl7cmV0dXJuIGx0LmNhbGwodGhpcyl9KTt2YXIgWHQ9bCh7fSxEdCk7bChYdCxLdCksZChYdCxtdCxLdC52YWx1ZXMpLGwoWHQse3NsaWNlOnF0LHNldDpGdCxjb25zdHJ1Y3RvcjpmdW5jdGlvbigpe30sdG9TdHJpbmc6dnQsdG9Mb2NhbGVTdHJpbmc6enR9KSxDdChYdCxcImJ1ZmZlclwiLFwiYlwiKSxDdChYdCxcImJ5dGVPZmZzZXRcIixcIm9cIiksQ3QoWHQsXCJieXRlTGVuZ3RoXCIsXCJsXCIpLEN0KFh0LFwibGVuZ3RoXCIsXCJlXCIpLHEoWHQsZ3Qse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW1N0XX19KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIscyl7cz0hIXM7dmFyIHU9dCsocz9cIkNsYW1wZWRcIjpcIlwiKStcIkFycmF5XCIsYz1cIlVpbnQ4QXJyYXlcIiE9dSxsPVwiZ2V0XCIrdCxwPVwic2V0XCIrdCx2PWlbdV0seT12fHx7fSxtPXYmJkEodiksZz0hdnx8IWYuQUJWLE09e30sUz12JiZ2W1ddLHg9ZnVuY3Rpb24odCxyKXt2YXIgbj10Ll9kO3JldHVybiBuLnZbbF0ociplK24ubyx4dCl9LEk9ZnVuY3Rpb24odCxyLG4pe3ZhciBpPXQuX2Q7cyYmKG49KG49TWF0aC5yb3VuZChuKSk8MD8wOm4+MjU1PzI1NToyNTUmbiksaS52W3BdKHIqZStpLm8sbix4dCl9LEI9ZnVuY3Rpb24odCxlKXtxKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHgodGhpcyxlKX0sc2V0OmZ1bmN0aW9uKHQpe3JldHVybiBJKHRoaXMsZSx0KX0sZW51bWVyYWJsZTohMH0pfTtnPyh2PXIoZnVuY3Rpb24odCxyLG4saSl7aCh0LHYsdSxcIl9kXCIpO3ZhciBvLGEsZixzLGM9MCxsPTA7aWYoXyhyKSl7aWYoIShyIGluc3RhbmNlb2YgSnx8KHM9dyhyKSk9PUh8fHM9PVgpKXJldHVybiBTdCBpbiByP2p0KHYscik6TnQuY2FsbCh2LHIpO289cixsPU90KG4sZSk7dmFyIHA9ci5ieXRlTGVuZ3RoO2lmKHZvaWQgMD09PWkpe2lmKHAlZSl0aHJvdyBLKEF0KTtpZihhPXAtbCxhPDApdGhyb3cgSyhBdCl9ZWxzZSBpZihhPWIoaSkqZSxhK2w+cCl0aHJvdyBLKEF0KTtmPWEvZX1lbHNlIGY9QnQociwhMCksYT1mKmUsbz1uZXcgSihhKTtmb3IoZCh0LFwiX2RcIix7YjpvLG86bCxsOmEsZTpmLHY6bmV3ICQobyl9KTtjPGY7KUIodCxjKyspfSksUz12W1ddPUUoWHQpLGQoUyxcImNvbnN0cnVjdG9yXCIsdikpOkMoZnVuY3Rpb24odCl7bmV3IHYobnVsbCksbmV3IHYodCl9LCEwKXx8KHY9cihmdW5jdGlvbih0LHIsbixpKXtoKHQsdix1KTt2YXIgbztyZXR1cm4gXyhyKT9yIGluc3RhbmNlb2YgSnx8KG89dyhyKSk9PUh8fG89PVg/dm9pZCAwIT09aT9uZXcgeShyLE90KG4sZSksaSk6dm9pZCAwIT09bj9uZXcgeShyLE90KG4sZSkpOm5ldyB5KHIpOlN0IGluIHI/anQodixyKTpOdC5jYWxsKHYscik6bmV3IHkoQnQocixjKSl9KSxRKG0hPT1GdW5jdGlvbi5wcm90b3R5cGU/ayh5KS5jb25jYXQoayhtKSk6ayh5KSxmdW5jdGlvbih0KXt0IGluIHZ8fGQodix0LHlbdF0pfSksdltXXT1TLG58fChTLmNvbnN0cnVjdG9yPXYpKTt2YXIgTz1TW210XSxSPSEhTyYmKFwidmFsdWVzXCI9PU8ubmFtZXx8dm9pZCAwPT1PLm5hbWUpLFA9S3QudmFsdWVzO2Qodix3dCwhMCksZChTLFN0LHUpLGQoUyxFdCwhMCksZChTLF90LHYpLChzP25ldyB2KDEpW2d0XT09dTpndCBpbiBTKXx8cShTLGd0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdX19KSxNW3VdPXYsYShhLkcrYS5XK2EuRioodiE9eSksTSksYShhLlMsdSx7QllURVNfUEVSX0VMRU1FTlQ6ZSxmcm9tOk50LG9mOkx0fSksWSBpbiBTfHxkKFMsWSxlKSxhKGEuUCx1LER0KSxOKHUpLGEoYS5QK2EuRipJdCx1LHtzZXQ6RnR9KSxhKGEuUCthLkYqIVIsdSxLdCksYShhLlArYS5GKihTLnRvU3RyaW5nIT12dCksdSx7dG9TdHJpbmc6dnR9KSxhKGEuUCthLkYqbyhmdW5jdGlvbigpe25ldyB2KDEpLnNsaWNlKCl9KSx1LHtzbGljZTpxdH0pLGEoYS5QK2EuRioobyhmdW5jdGlvbigpe3JldHVyblsxLDJdLnRvTG9jYWxlU3RyaW5nKCkhPW5ldyB2KFsxLDJdKS50b0xvY2FsZVN0cmluZygpfSl8fCFvKGZ1bmN0aW9uKCl7Uy50b0xvY2FsZVN0cmluZy5jYWxsKFsxLDJdKX0pKSx1LHt0b0xvY2FsZVN0cmluZzp6dH0pLGpbdV09Uj9POlAsbnx8Unx8ZChTLG10LFApfX1lbHNlIHQuZXhwb3J0cz1mdW5jdGlvbigpe319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ4KShcIm1ldGFcIiksaT1yKDYpLG89cigxMiksYT1yKDkpLmYsZj0wLHM9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH0sdT0hcig1KShmdW5jdGlvbigpe3JldHVybiBzKE9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucyh7fSkpfSksaD1mdW5jdGlvbih0KXthKHQsbix7dmFsdWU6e2k6XCJPXCIrICsrZix3Ont9fX0pfSxjPWZ1bmN0aW9uKHQsZSl7aWYoIWkodCkpcmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHQ/dDooXCJzdHJpbmdcIj09dHlwZW9mIHQ/XCJTXCI6XCJQXCIpK3Q7aWYoIW8odCxuKSl7aWYoIXModCkpcmV0dXJuXCJGXCI7aWYoIWUpcmV0dXJuXCJFXCI7aCh0KX1yZXR1cm4gdFtuXS5pfSxkPWZ1bmN0aW9uKHQsZSl7aWYoIW8odCxuKSl7aWYoIXModCkpcmV0dXJuITA7aWYoIWUpcmV0dXJuITE7aCh0KX1yZXR1cm4gdFtuXS53fSxsPWZ1bmN0aW9uKHQpe3JldHVybiB1JiZwLk5FRUQmJnModCkmJiFvKHQsbikmJmgodCksdH0scD10LmV4cG9ydHM9e0tFWTpuLE5FRUQ6ITEsZmFzdEtleTpjLGdldFdlYWs6ZCxvbkZyZWV6ZTpsfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUpe3ZhciByPU1hdGguY2VpbCxuPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpc05hTih0PSt0KT8wOih0PjA/bjpyKSh0KX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI7cj1mdW5jdGlvbigpe3JldHVybiB0aGlzfSgpO3RyeXtyPXJ8fEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKXx8KDAsZXZhbCkoXCJ0aGlzXCIpfWNhdGNoKHQpe1wib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJihyPXdpbmRvdyl9dC5leHBvcnRzPXJ9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKCEodCBpbnN0YW5jZW9mIGUpfHx2b2lkIDAhPT1uJiZuIGluIHQpdGhyb3cgVHlwZUVycm9yKHIrXCI6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPSExfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKSxpPXIoMTgwKSxvPXIoMTIxKSxhPXIoMTMzKShcIklFX1BST1RPXCIpLGY9ZnVuY3Rpb24oKXt9LHM9XCJwcm90b3R5cGVcIix1PWZ1bmN0aW9uKCl7dmFyIHQsZT1yKDEyMCkoXCJpZnJhbWVcIiksbj1vLmxlbmd0aCxpPVwiPFwiLGE9XCI+XCI7Zm9yKGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixyKDEyMykuYXBwZW5kQ2hpbGQoZSksZS5zcmM9XCJqYXZhc2NyaXB0OlwiLHQ9ZS5jb250ZW50V2luZG93LmRvY3VtZW50LHQub3BlbigpLHQud3JpdGUoaStcInNjcmlwdFwiK2ErXCJkb2N1bWVudC5GPU9iamVjdFwiK2krXCIvc2NyaXB0XCIrYSksdC5jbG9zZSgpLHU9dC5GO24tLTspZGVsZXRlIHVbc11bb1tuXV07cmV0dXJuIHUoKX07dC5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKHQsZSl7dmFyIHI7cmV0dXJuIG51bGwhPT10PyhmW3NdPW4odCkscj1uZXcgZixmW3NdPW51bGwsclthXT10KTpyPXUoKSx2b2lkIDA9PT1lP3I6aShyLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTgyKSxpPXIoMTIxKS5jb25jYXQoXCJsZW5ndGhcIixcInByb3RvdHlwZVwiKTtlLmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxODIpLGk9cigxMjEpO3QuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24odCl7cmV0dXJuIG4odCxpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE1KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgaSBpbiBlKW4odCxpLGVbaV0scik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoOSksbz1yKDgpLGE9cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW5bdF07byYmZSYmIWVbYV0mJmkuZihlLGEse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc319KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM4KSxpPU1hdGgubWF4LG89TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9bih0KSx0PDA/aSh0K2UsMCk6byh0LGUpfX0sZnVuY3Rpb24odCxlKXt2YXIgcj0wLG49TWF0aC5yYW5kb20oKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJTeW1ib2woXCIuY29uY2F0KHZvaWQgMD09PXQ/XCJcIjp0LFwiKV9cIiwoKytyK24pLnRvU3RyaW5nKDM2KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLnV0aWxzPXIoNTI3KSxuLmNvbW1vbj1yKDUyMyksbi5zaGE9cig1MjYpLG4ucmlwZW1kPXIoNTI1KSxuLmhtYWM9cig1MjQpLG4uc2hhMT1uLnNoYS5zaGExLG4uc2hhMjU2PW4uc2hhLnNoYTI1NixuLnNoYTIyND1uLnNoYS5zaGEyMjQsbi5zaGEzODQ9bi5zaGEuc2hhMzg0LG4uc2hhNTEyPW4uc2hhLnNoYTUxMixuLnJpcGVtZDE2MD1uLnJpcGVtZC5yaXBlbWQxNjB9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24udXRpbHM9cig1NjQpLG4uY29tbW9uPXIoNTYwKSxuLnNoYT1yKDU2Myksbi5yaXBlbWQ9cig1NjIpLG4uaG1hYz1yKDU2MSksbi5zaGExPW4uc2hhLnNoYTEsbi5zaGEyNTY9bi5zaGEuc2hhMjU2LG4uc2hhMjI0PW4uc2hhLnNoYTIyNCxuLnNoYTM4ND1uLnNoYS5zaGEzODQsbi5zaGE1MTI9bi5zaGEuc2hhNTEyLG4ucmlwZW1kMTYwPW4ucmlwZW1kLnJpcGVtZDE2MH0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyx0KSxoLmNhbGwodGhpcyx0KSx0JiZ0LnJlYWRhYmxlPT09ITEmJih0aGlzLnJlYWRhYmxlPSExKSx0JiZ0LndyaXRhYmxlPT09ITEmJih0aGlzLndyaXRhYmxlPSExKSx0aGlzLmFsbG93SGFsZk9wZW49ITAsdCYmdC5hbGxvd0hhbGZPcGVuPT09ITEmJih0aGlzLmFsbG93SGFsZk9wZW49ITEpLHZvaWQgdGhpcy5vbmNlKFwiZW5kXCIsaSkpOm5ldyBuKHQpfWZ1bmN0aW9uIGkoKXt0aGlzLmFsbG93SGFsZk9wZW58fHRoaXMuX3dyaXRhYmxlU3RhdGUuZW5kZWR8fGYobyx0aGlzKX1mdW5jdGlvbiBvKHQpe3QuZW5kKCl9dmFyIGE9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX07dC5leHBvcnRzPW47dmFyIGY9cigxNTcpLHM9cig3Myk7cy5pbmhlcml0cz1yKDc0KTt2YXIgdT1yKDI1MCksaD1yKDE1NSk7cy5pbmhlcml0cyhuLHUpO2Zvcih2YXIgYz1hKGgucHJvdG90eXBlKSxkPTA7ZDxjLmxlbmd0aDtkKyspe3ZhciBsPWNbZF07bi5wcm90b3R5cGVbbF18fChuLnByb3RvdHlwZVtsXT1oLnByb3RvdHlwZVtsXSl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtpZih0JiYhcyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0LnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpfWZ1bmN0aW9uIG8odCl7dGhpcy5jaGFyUmVjZWl2ZWQ9dC5sZW5ndGglMix0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ/MjowfWZ1bmN0aW9uIGEodCl7dGhpcy5jaGFyUmVjZWl2ZWQ9dC5sZW5ndGglMyx0aGlzLmNoYXJMZW5ndGg9dGhpcy5jaGFyUmVjZWl2ZWQ/MzowfXZhciBmPXIoMSkuQnVmZmVyLHM9Zi5pc0VuY29kaW5nfHxmdW5jdGlvbih0KXtzd2l0Y2godCYmdC50b0xvd2VyQ2FzZSgpKXtjYXNlXCJoZXhcIjpjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpjYXNlXCJhc2NpaVwiOmNhc2VcImJpbmFyeVwiOmNhc2VcImJhc2U2NFwiOmNhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOmNhc2VcInJhd1wiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fSx1PWUuU3RyaW5nRGVjb2Rlcj1mdW5jdGlvbih0KXtzd2l0Y2godGhpcy5lbmNvZGluZz0odHx8XCJ1dGY4XCIpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXS8sXCJcIiksbih0KSx0aGlzLmVuY29kaW5nKXtjYXNlXCJ1dGY4XCI6dGhpcy5zdXJyb2dhdGVTaXplPTM7YnJlYWs7Y2FzZVwidWNzMlwiOmNhc2VcInV0ZjE2bGVcIjp0aGlzLnN1cnJvZ2F0ZVNpemU9Mix0aGlzLmRldGVjdEluY29tcGxldGVDaGFyPW87YnJlYWs7Y2FzZVwiYmFzZTY0XCI6dGhpcy5zdXJyb2dhdGVTaXplPTMsdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcj1hO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIHZvaWQodGhpcy53cml0ZT1pKX10aGlzLmNoYXJCdWZmZXI9bmV3IGYoNiksdGhpcy5jaGFyUmVjZWl2ZWQ9MCx0aGlzLmNoYXJMZW5ndGg9MH07dS5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPVwiXCI7dGhpcy5jaGFyTGVuZ3RoOyl7dmFyIHI9dC5sZW5ndGg+PXRoaXMuY2hhckxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZD90aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ6dC5sZW5ndGg7aWYodC5jb3B5KHRoaXMuY2hhckJ1ZmZlcix0aGlzLmNoYXJSZWNlaXZlZCwwLHIpLHRoaXMuY2hhclJlY2VpdmVkKz1yLHRoaXMuY2hhclJlY2VpdmVkPHRoaXMuY2hhckxlbmd0aClyZXR1cm5cIlwiO3Q9dC5zbGljZShyLHQubGVuZ3RoKSxlPXRoaXMuY2hhckJ1ZmZlci5zbGljZSgwLHRoaXMuY2hhckxlbmd0aCkudG9TdHJpbmcodGhpcy5lbmNvZGluZyk7dmFyIG49ZS5jaGFyQ29kZUF0KGUubGVuZ3RoLTEpO2lmKCEobj49NTUyOTYmJm48PTU2MzE5KSl7aWYodGhpcy5jaGFyUmVjZWl2ZWQ9dGhpcy5jaGFyTGVuZ3RoPTAsMD09PXQubGVuZ3RoKXJldHVybiBlO2JyZWFrfXRoaXMuY2hhckxlbmd0aCs9dGhpcy5zdXJyb2dhdGVTaXplLGU9XCJcIn10aGlzLmRldGVjdEluY29tcGxldGVDaGFyKHQpO3ZhciBpPXQubGVuZ3RoO3RoaXMuY2hhckxlbmd0aCYmKHQuY29weSh0aGlzLmNoYXJCdWZmZXIsMCx0Lmxlbmd0aC10aGlzLmNoYXJSZWNlaXZlZCxpKSxpLT10aGlzLmNoYXJSZWNlaXZlZCksZSs9dC50b1N0cmluZyh0aGlzLmVuY29kaW5nLDAsaSk7dmFyIGk9ZS5sZW5ndGgtMSxuPWUuY2hhckNvZGVBdChpKTtpZihuPj01NTI5NiYmbjw9NTYzMTkpe3ZhciBvPXRoaXMuc3Vycm9nYXRlU2l6ZTtyZXR1cm4gdGhpcy5jaGFyTGVuZ3RoKz1vLHRoaXMuY2hhclJlY2VpdmVkKz1vLHRoaXMuY2hhckJ1ZmZlci5jb3B5KHRoaXMuY2hhckJ1ZmZlcixvLDAsbyksdC5jb3B5KHRoaXMuY2hhckJ1ZmZlciwwLDAsbyksZS5zdWJzdHJpbmcoMCxpKX1yZXR1cm4gZX0sdS5wcm90b3R5cGUuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXQubGVuZ3RoPj0zPzM6dC5sZW5ndGg7ZT4wO2UtLSl7dmFyIHI9dFt0Lmxlbmd0aC1lXTtpZigxPT1lJiZyPj41PT02KXt0aGlzLmNoYXJMZW5ndGg9MjticmVha31pZihlPD0yJiZyPj40PT0xNCl7dGhpcy5jaGFyTGVuZ3RoPTM7YnJlYWt9aWYoZTw9MyYmcj4+Mz09MzApe3RoaXMuY2hhckxlbmd0aD00O2JyZWFrfX10aGlzLmNoYXJSZWNlaXZlZD1lfSx1LnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCl7dmFyIGU9XCJcIjtpZih0JiZ0Lmxlbmd0aCYmKGU9dGhpcy53cml0ZSh0KSksdGhpcy5jaGFyUmVjZWl2ZWQpe3ZhciByPXRoaXMuY2hhclJlY2VpdmVkLG49dGhpcy5jaGFyQnVmZmVyLGk9dGhpcy5lbmNvZGluZztlKz1uLnNsaWNlKDAscikudG9TdHJpbmcoaSl9cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtcbnJldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwidW5zY29wYWJsZXNcIiksaT1BcnJheS5wcm90b3R5cGU7dm9pZCAwPT1pW25dJiZyKDE0KShpLG4se30pLHQuZXhwb3J0cz1mdW5jdGlvbih0KXtpW25dW3RdPSEwfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzMpLGk9cigxNzYpLG89cigxMjUpLGE9cigzKSxmPXIoMTApLHM9cigxNDIpLHU9e30saD17fSxlPXQuZXhwb3J0cz1mdW5jdGlvbih0LGUscixjLGQpe3ZhciBsLHAsYix2LHk9ZD9mdW5jdGlvbigpe3JldHVybiB0fTpzKHQpLG09bihyLGMsZT8yOjEpLGc9MDtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB5KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBpdGVyYWJsZSFcIik7aWYobyh5KSl7Zm9yKGw9Zih0Lmxlbmd0aCk7bD5nO2crKylpZih2PWU/bShhKHA9dFtnXSlbMF0scFsxXSk6bSh0W2ddKSx2PT09dXx8dj09PWgpcmV0dXJuIHZ9ZWxzZSBmb3IoYj15LmNhbGwodCk7IShwPWIubmV4dCgpKS5kb25lOylpZih2PWkoYixtLHAudmFsdWUsZSksdj09PXV8fHY9PT1oKXJldHVybiB2fTtlLkJSRUFLPXUsZS5SRVRVUk49aH0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e319LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLmYsaT1yKDEyKSxvPXIoNykoXCJ0b1N0cmluZ1RhZ1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3QmJiFpKHQ9cj90OnQucHJvdG90eXBlLG8pJiZuKHQsbyx7Y29uZmlndXJhYmxlOiEwLHZhbHVlOmV9KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyNCksbz1yKDUpLGE9cigxMzgpLGY9XCJbXCIrYStcIl1cIixzPVwi4oCLwoVcIix1PVJlZ0V4cChcIl5cIitmK2YrXCIqXCIpLGg9UmVnRXhwKGYrZitcIiokXCIpLGM9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXt9LGY9byhmdW5jdGlvbigpe3JldHVybiEhYVt0XSgpfHxzW3RdKCkhPXN9KSx1PWlbdF09Zj9lKGQpOmFbdF07ciYmKGlbcl09dSksbihuLlArbi5GKmYsXCJTdHJpbmdcIixpKX0sZD1jLnRyaW09ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1TdHJpbmcoaSh0KSksMSZlJiYodD10LnJlcGxhY2UodSxcIlwiKSksMiZlJiYodD10LnJlcGxhY2UoaCxcIlwiKSksdH07dC5leHBvcnRzPWN9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt1LmNhbGwodGhpcyxcImRpZ2VzdFwiKSx0aGlzLl9oYXNoPXQsdGhpcy5idWZmZXJzPVtdfWZ1bmN0aW9uIGkodCl7dS5jYWxsKHRoaXMsXCJkaWdlc3RcIiksdGhpcy5faGFzaD10fXZhciBvPXIoMiksYT1yKDEwNSksZj1yKDU2Nykscz1yKDU2OCksdT1yKDU2Nik7byhuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5idWZmZXJzLnB1c2godCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PWUuY29uY2F0KHRoaXMuYnVmZmVycykscj10aGlzLl9oYXNoKHQpO3JldHVybiB0aGlzLmJ1ZmZlcnM9bnVsbCxyfSxvKGksdSksaS5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLl9oYXNoLnVwZGF0ZSh0KX0saS5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hhc2guZGlnZXN0KCl9LHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdD10LnRvTG93ZXJDYXNlKCksXCJtZDVcIj09PXQ/bmV3IG4oYSk6XCJybWQxNjBcIj09PXR8fFwicmlwZW1kMTYwXCI9PT10P25ldyBuKGYpOm5ldyBpKHModCkpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe3RoaXMuX2Jsb2NrPW5ldyBlKHQpLHRoaXMuX2ZpbmFsU2l6ZT1yLHRoaXMuX2Jsb2NrU2l6ZT10LHRoaXMuX2xlbj0wLHRoaXMuX3M9MH1yLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHI9cnx8XCJ1dGY4XCIsdD1uZXcgZSh0LHIpKTtmb3IodmFyIG49dGhpcy5fbGVuKz10Lmxlbmd0aCxpPXRoaXMuX3N8fDAsbz0wLGE9dGhpcy5fYmxvY2s7aTxuOyl7Zm9yKHZhciBmPU1hdGgubWluKHQubGVuZ3RoLG8rdGhpcy5fYmxvY2tTaXplLWkldGhpcy5fYmxvY2tTaXplKSxzPWYtbyx1PTA7dTxzO3UrKylhW2kldGhpcy5fYmxvY2tTaXplK3VdPXRbdStvXTtpKz1zLG8rPXMsaSV0aGlzLl9ibG9ja1NpemU9PT0wJiZ0aGlzLl91cGRhdGUoYSl9cmV0dXJuIHRoaXMuX3M9aSx0aGlzfSxyLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9OCp0aGlzLl9sZW47dGhpcy5fYmxvY2tbdGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZV09MTI4LHRoaXMuX2Jsb2NrLmZpbGwoMCx0aGlzLl9sZW4ldGhpcy5fYmxvY2tTaXplKzEpLGUlKDgqdGhpcy5fYmxvY2tTaXplKT49OCp0aGlzLl9maW5hbFNpemUmJih0aGlzLl91cGRhdGUodGhpcy5fYmxvY2spLHRoaXMuX2Jsb2NrLmZpbGwoMCkpLHRoaXMuX2Jsb2NrLndyaXRlSW50MzJCRShlLHRoaXMuX2Jsb2NrU2l6ZS00KTt2YXIgcj10aGlzLl91cGRhdGUodGhpcy5fYmxvY2spfHx0aGlzLl9oYXNoKCk7cmV0dXJuIHQ/ci50b1N0cmluZyh0KTpyfSxyLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiX3VwZGF0ZSBtdXN0IGJlIGltcGxlbWVudGVkIGJ5IHN1YmNsYXNzXCIpfSx0LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSxyLG4pe2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZWN1cmUgcmFuZG9tIG51bWJlciBnZW5lcmF0aW9uIG5vdCBzdXBwb3J0ZWQgYnkgdGhpcyBicm93c2VyXFxudXNlIGNocm9tZSwgRmlyZUZveCBvciBJbnRlcm5ldCBFeHBsb3JlciAxMVwiKX1mdW5jdGlvbiBvKHQsaSl7aWYodD42NTUzNil0aHJvdyBuZXcgRXJyb3IoXCJyZXF1ZXN0ZWQgdG9vIG1hbnkgcmFuZG9tIGJ5dGVzXCIpO3ZhciBvPW5ldyBlLlVpbnQ4QXJyYXkodCk7dD4wJiZhLmdldFJhbmRvbVZhbHVlcyhvKTt2YXIgZj1uZXcgcihvLmJ1ZmZlcik7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgaT9uLm5leHRUaWNrKGZ1bmN0aW9uKCl7aShudWxsLGYpfSk6Zn12YXIgYT1lLmNyeXB0b3x8ZS5tc0NyeXB0bzthJiZhLmdldFJhbmRvbVZhbHVlcz90LmV4cG9ydHM9bzp0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDM5KSxyKDEpLkJ1ZmZlcixyKDI2KSl9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIGkodCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKTt2YXIgaT1uKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmNhbGwodGhpcykpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm1lc3NhZ2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwIT09dD9TdHJpbmcodCk6XCJcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTppLmNvbnN0cnVjdG9yLm5hbWV9KSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoaSxpLmNvbnN0cnVjdG9yKSxpfXJldHVybiBpKGUsdCksZX0oRXJyb3IpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTE1KSxhPXIoNzUpLGY9cig5MCkscz1yKDkxKSx1PXIoMjAxKSxoPXIoMTE2KSxjPXIoMTU5KSxkPXIoMTEzKSxsPS9eY2Y6KFsxLTlhLWZdWzAtOWEtZl17MCwzfXwwKTpbYS16QS1aMC05Xy1dKiQvLHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsW3trZXk6XCJnZXRUeXBlSWRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLlRZUEVfSUR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuRkVBVFVSRV9CSVRNQVNLfX0se2tleTpcImdldENvbmRpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGE7cmV0dXJuIHQuc2V0VHlwZUlkKHRoaXMuZ2V0VHlwZUlkKCkpLHQuc2V0Qml0bWFzayh0aGlzLmdldEJpdG1hc2soKSksdC5zZXRIYXNoKHRoaXMuZ2VuZXJhdGVIYXNoKCkpLHQuc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgodGhpcy5jYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aCgpKSx0fX0se2tleTpcImdldENvbmRpdGlvblVyaVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uKCkuc2VyaWFsaXplVXJpKCl9fSx7a2V5OlwiZ2V0Q29uZGl0aW9uQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRDb25kaXRpb24oKS5zZXJpYWxpemVCaW5hcnkoKX19LHtrZXk6XCJnZW5lcmF0ZUhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIlRoaXMgbWV0aG9kIHNob3VsZCBiZSBpbXBsZW1lbnRlZCBieSBhIHN1YmNsYXNzXCIpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZjtyZXR1cm4gdGhpcy53cml0ZVBheWxvYWQodCksdC5nZXRTaXplKCl9fSx7a2V5Olwic2VyaWFsaXplVXJpXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImNmOlwiK3RoaXMuZ2V0VHlwZUlkKCkudG9TdHJpbmcoMTYpK1wiOlwiK2guZW5jb2RlKHRoaXMuc2VyaWFsaXplUGF5bG9hZCgpKX19LHtrZXk6XCJzZXJpYWxpemVCaW5hcnlcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBzO3JldHVybiB0LndyaXRlVUludDE2KHRoaXMuZ2V0VHlwZUlkKCkpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnNlcmlhbGl6ZVBheWxvYWQoKSksdC5nZXRCdWZmZXIoKX19LHtrZXk6XCJzZXJpYWxpemVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcztyZXR1cm4gdGhpcy53cml0ZVBheWxvYWQodCksdC5nZXRCdWZmZXIoKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfX1dLFt7a2V5OlwiZnJvbVVyaVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGUgaW5zdGFuY2VvZiB0KXJldHVybiBlO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBlKXRocm93IG5ldyBFcnJvcihcIlNlcmlhbGl6ZWQgZnVsZmlsbG1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTt2YXIgcj1lLnNwbGl0KFwiOlwiKTtpZihcImNmXCIhPT1yWzBdKXRocm93IG5ldyBjKCdTZXJpYWxpemVkIGZ1bGZpbGxtZW50IG11c3Qgc3RhcnQgd2l0aCBcImNmOlwiJyk7aWYoIXQuUkVHRVguZXhlYyhlKSl0aHJvdyBuZXcgZChcIkludmFsaWQgZnVsZmlsbG1lbnQgZm9ybWF0XCIpO3ZhciBuPXBhcnNlSW50KHJbMV0sMTYpLGk9aC5kZWNvZGUoclsyXSksYT1vLmdldENsYXNzRnJvbVR5cGVJZChuKSxmPW5ldyBhO3JldHVybiBmLnBhcnNlUGF5bG9hZCh1LmZyb20oaSksaS5sZW5ndGgpLGZ9fSx7a2V5OlwiZnJvbUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3Q9dS5mcm9tKHQpO3ZhciBlPW8uZ2V0Q2xhc3NGcm9tVHlwZUlkKHQucmVhZFVJbnQxNigpKSxyPW5ldyBlLG49dC5yZWFkTGVuZ3RoUHJlZml4KCk7cmV0dXJuIHIucGFyc2VQYXlsb2FkKHQsbikscn19XSksdH0oKTtwLlJFR0VYPWwsdC5leHBvcnRzPXB9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKSxpPXIoNykoXCJ0b1N0cmluZ1RhZ1wiKSxvPVwiQXJndW1lbnRzXCI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKSxhPWZ1bmN0aW9uKHQsZSl7dHJ5e3JldHVybiB0W2VdfWNhdGNoKHQpe319O3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZSxyLGY7cmV0dXJuIHZvaWQgMD09PXQ/XCJVbmRlZmluZWRcIjpudWxsPT09dD9cIk51bGxcIjpcInN0cmluZ1wiPT10eXBlb2Yocj1hKGU9T2JqZWN0KHQpLGkpKT9yOm8/bihlKTpcIk9iamVjdFwiPT0oZj1uKGUpKSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZS5jYWxsZWU/XCJBcmd1bWVudHNcIjpmfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpO3QuZXhwb3J0cz1PYmplY3QoXCJ6XCIpLnByb3BlcnR5SXNFbnVtZXJhYmxlKDApP09iamVjdDpmdW5jdGlvbih0KXtyZXR1cm5cIlN0cmluZ1wiPT1uKHQpP3Quc3BsaXQoXCJcIik6T2JqZWN0KHQpfX0sZnVuY3Rpb24odCxlKXtlLmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSxpPW5ldyBlKG4pLG89MDtvPG47KytvKWlbb109dFtvXV5yW29dO3JldHVybiBpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uUmVwb3J0ZXI9cig1MzIpLlJlcG9ydGVyLG4uRGVjb2RlckJ1ZmZlcj1yKDIxNCkuRGVjb2RlckJ1ZmZlcixuLkVuY29kZXJCdWZmZXI9cigyMTQpLkVuY29kZXJCdWZmZXIsbi5Ob2RlPXIoNTMxKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobiksbz0wO288bjsrK28paVtvXT10W29dXnJbb107cmV0dXJuIGl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LFxuZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5SZXBvcnRlcj1yKDU4MikuUmVwb3J0ZXIsbi5EZWNvZGVyQnVmZmVyPXIoMjM0KS5EZWNvZGVyQnVmZmVyLG4uRW5jb2RlckJ1ZmZlcj1yKDIzNCkuRW5jb2RlckJ1ZmZlcixuLk5vZGU9cig1ODEpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksaT1uZXcgZShuKSxvPTA7bzxuOysrbylpW29dPXRbb11ecltvXTtyZXR1cm4gaX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIEFycmF5LmlzQXJyYXk/QXJyYXkuaXNBcnJheSh0KTpcIltvYmplY3QgQXJyYXldXCI9PT12KHQpfWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIG8odCl7cmV0dXJuIG51bGw9PXR9ZnVuY3Rpb24gYSh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdH1mdW5jdGlvbiBmKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHModCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdSh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBoKHQpe3JldHVyblwiW29iamVjdCBSZWdFeHBdXCI9PT12KHQpfWZ1bmN0aW9uIGModCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIGQodCl7cmV0dXJuXCJbb2JqZWN0IERhdGVdXCI9PT12KHQpfWZ1bmN0aW9uIGwodCl7cmV0dXJuXCJbb2JqZWN0IEVycm9yXVwiPT09dih0KXx8dCBpbnN0YW5jZW9mIEVycm9yfWZ1bmN0aW9uIHAodCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiBiKHQpe3JldHVybiBudWxsPT09dHx8XCJib29sZWFuXCI9PXR5cGVvZiB0fHxcIm51bWJlclwiPT10eXBlb2YgdHx8XCJzdHJpbmdcIj09dHlwZW9mIHR8fFwic3ltYm9sXCI9PXR5cGVvZiB0fHxcInVuZGVmaW5lZFwiPT10eXBlb2YgdH1mdW5jdGlvbiB2KHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZS5pc0FycmF5PXIsZS5pc0Jvb2xlYW49bixlLmlzTnVsbD1pLGUuaXNOdWxsT3JVbmRlZmluZWQ9byxlLmlzTnVtYmVyPWEsZS5pc1N0cmluZz1mLGUuaXNTeW1ib2w9cyxlLmlzVW5kZWZpbmVkPXUsZS5pc1JlZ0V4cD1oLGUuaXNPYmplY3Q9YyxlLmlzRGF0ZT1kLGUuaXNFcnJvcj1sLGUuaXNGdW5jdGlvbj1wLGUuaXNQcmltaXRpdmU9YixlLmlzQnVmZmVyPXQuaXNCdWZmZXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTE1KSxhPXIoMTU5KSxmPXIoMTEzKSxzPXIoNTMpLHU9cigxMTYpLGg9cigyMDEpLGM9cig5MSksZD1yKDE2MiksbD0vXmNjOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6WzEtOWEtZl1bMC05YS1mXXswLDE1fTpbYS16QS1aMC05Xy1dezAsODZ9OihbMS05XVswLTldezAsMTd9fDApJC8scD0vXmNjOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6WzEtOWEtZl1bMC05YS1mXXswLDd9OlthLXpBLVowLTlfLV17MCw4Nn06KFsxLTldWzAtOV17MCwxN318MCkkLyxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LFt7a2V5OlwiZ2V0VHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50eXBlfX0se2tleTpcInNldFR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMudHlwZT10fX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmJpdG1hc2t9fSx7a2V5Olwic2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuYml0bWFzaz10fX0se2tleTpcImdldEhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmhhc2gpdGhyb3cgbmV3IHMoXCJIYXNoIG5vdCBzZXRcIik7cmV0dXJuIHRoaXMuaGFzaH19LHtrZXk6XCJzZXRIYXNoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkhhc2ggbXVzdCBiZSBhIEJ1ZmZlclwiKTt0aGlzLmhhc2g9dH19LHtrZXk6XCJnZXRNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHRoaXMubWF4RnVsZmlsbG1lbnRMZW5ndGgpdGhyb3cgbmV3IHMoXCJNYXhpbXVtIGZ1bGZpbGxtZW50IGxlbmd0aCBub3Qgc2V0XCIpO3JldHVybiB0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RofX0se2tleTpcInNldE1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWQodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkZ1bGZpbGxtZW50IGxlbmd0aCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdWxmaWxsbWVudCBsZW5ndGggbXVzdCBiZSBwb3NpdGl2ZSBvciB6ZXJvXCIpO3RoaXMubWF4RnVsZmlsbG1lbnRMZW5ndGg9dH19LHtrZXk6XCJzZXJpYWxpemVVcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblwiY2M6XCIrdGhpcy5nZXRUeXBlSWQoKS50b1N0cmluZygxNikrXCI6XCIrdGhpcy5nZXRCaXRtYXNrKCkudG9TdHJpbmcoMTYpK1wiOlwiK3UuZW5jb2RlKHRoaXMuZ2V0SGFzaCgpKStcIjpcIit0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCl9fSx7a2V5Olwic2VyaWFsaXplQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYztyZXR1cm4gdC53cml0ZVVJbnQxNih0aGlzLmdldFR5cGVJZCgpKSx0LndyaXRlVmFyVUludCh0aGlzLmdldEJpdG1hc2soKSksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMuZ2V0SGFzaCgpKSx0LndyaXRlVmFyVUludCh0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCkpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5OlwicGFyc2VCaW5hcnlcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFR5cGVJZCh0LnJlYWRVSW50MTYoKSksdGhpcy5zZXRCaXRtYXNrKHQucmVhZFZhclVJbnQoKSksdGhpcy5zZXRIYXNoKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgodC5yZWFkVmFyVUludCgpKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoby5nZXRDbGFzc0Zyb21UeXBlSWQodGhpcy5nZXRUeXBlSWQoKSksdGhpcy5nZXRCaXRtYXNrKCk+dC5NQVhfU0FGRV9CSVRNQVNLKXRocm93IG5ldyBFcnJvcihcIkJpdG1hc2sgdG9vIGxhcmdlIHRvIGJlIHNhZmVseSByZXByZXNlbnRlZFwiKTtpZih0aGlzLmdldEJpdG1hc2soKSZ+dC5TVVBQT1JURURfQklUTUFTSyl0aHJvdyBuZXcgRXJyb3IoXCJDb25kaXRpb24gcmVxdWVzdGVkIHVuc3VwcG9ydGVkIGZlYXR1cmUgc3VpdGVzXCIpO2lmKHRoaXMuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKT50Lk1BWF9GVUxGSUxMTUVOVF9MRU5HVEgpdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uIHJlcXVlc3RlZCB0b28gbGFyZ2Ugb2YgYSBtYXggZnVsZmlsbG1lbnQgc2l6ZVwiKTtyZXR1cm4hMH19XSxbe2tleTpcImZyb21VcmlcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4gZTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJTZXJpYWxpemVkIGNvbmRpdGlvbiBtdXN0IGJlIGEgc3RyaW5nXCIpO3ZhciByPWUuc3BsaXQoXCI6XCIpO2lmKFwiY2NcIiE9PXJbMF0pdGhyb3cgbmV3IGEoJ1NlcmlhbGl6ZWQgY29uZGl0aW9uIG11c3Qgc3RhcnQgd2l0aCBcImNjOlwiJyk7aWYoIXQuUkVHRVhfU1RSSUNULmV4ZWMoZSkpdGhyb3cgbmV3IGYoXCJJbnZhbGlkIGNvbmRpdGlvbiBmb3JtYXRcIik7dmFyIG49bmV3IHQ7cmV0dXJuIG4uc2V0VHlwZUlkKHBhcnNlSW50KHJbMV0sMTYpKSxuLnNldEJpdG1hc2socGFyc2VJbnQoclsyXSwxNikpLG4uc2V0SGFzaCh1LmRlY29kZShyWzNdKSksbi5zZXRNYXhGdWxmaWxsbWVudExlbmd0aChwYXJzZUludChyWzRdLDEwKSksbn19LHtrZXk6XCJmcm9tQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZT1oLmZyb20oZSk7dmFyIHI9bmV3IHQ7cmV0dXJuIHIucGFyc2VCaW5hcnkoZSkscn19XSksdH0oKTtiLk1BWF9TQUZFX0JJVE1BU0s9NDI5NDk2NzI5NSxiLlNVUFBPUlRFRF9CSVRNQVNLPTYzLGIuTUFYX0ZVTEZJTExNRU5UX0xFTkdUSD02NTUzNSxiLlJFR0VYPWwsYi5SRUdFWF9TVFJJQ1Q9cCx0LmV4cG9ydHM9Yn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDYzKSxzPXIoMTE0KSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGEoZSxbe2tleTpcImdlbmVyYXRlSGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHMoXCJzaGEyNTZcIik7cmV0dXJuIHRoaXMud3JpdGVIYXNoUGF5bG9hZCh0KSx0LmdldERpZ2VzdCgpfX1dKSxlfShmKTt0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE3KSxpPXIoMTApLG89cig0Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsYSl7dmFyIGYscz1uKGUpLHU9aShzLmxlbmd0aCksaD1vKGEsdSk7aWYodCYmciE9cil7Zm9yKDt1Pmg7KWlmKGY9c1toKytdLGYhPWYpcmV0dXJuITB9ZWxzZSBmb3IoO3U+aDtoKyspaWYoKHR8fGggaW4gcykmJnNbaF09PT1yKXJldHVybiB0fHxofHwwO3JldHVybiF0JiYtMX19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMCksbz1yKDE1KSxhPXIoNDUpLGY9cigzNikscz1yKDU1KSx1PXIoNDApLGg9cig2KSxjPXIoNSksZD1yKDg0KSxsPXIoNTcpLHA9cigxMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixiLHYseSl7dmFyIG09blt0XSxnPW0sdz12P1wic2V0XCI6XCJhZGRcIixfPWcmJmcucHJvdG90eXBlLE09e30sUz1mdW5jdGlvbih0KXt2YXIgZT1fW3RdO28oXyx0LFwiZGVsZXRlXCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuISh5JiYhaCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OlwiaGFzXCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuISh5JiYhaCh0KSkmJmUuY2FsbCh0aGlzLDA9PT10PzA6dCl9OlwiZ2V0XCI9PXQ/ZnVuY3Rpb24odCl7cmV0dXJuIHkmJiFoKHQpP3ZvaWQgMDplLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImFkZFwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQpLHRoaXN9OmZ1bmN0aW9uKHQscil7cmV0dXJuIGUuY2FsbCh0aGlzLDA9PT10PzA6dCxyKSx0aGlzfSl9O2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGcmJih5fHxfLmZvckVhY2gmJiFjKGZ1bmN0aW9uKCl7KG5ldyBnKS5lbnRyaWVzKCkubmV4dCgpfSkpKXt2YXIgRT1uZXcgZyxBPUVbd10oeT97fTotMCwxKSE9RSxrPWMoZnVuY3Rpb24oKXtFLmhhcygxKX0pLHg9ZChmdW5jdGlvbih0KXtuZXcgZyh0KX0pLEk9IXkmJmMoZnVuY3Rpb24oKXtmb3IodmFyIHQ9bmV3IGcsZT01O2UtLTspdFt3XShlLGUpO3JldHVybiF0LmhhcygtMCl9KTt4fHwoZz1lKGZ1bmN0aW9uKGUscil7dShlLGcsdCk7dmFyIG49cChuZXcgbSxlLGcpO3JldHVybiB2b2lkIDAhPXImJnMocix2LG5bd10sbiksbn0pLGcucHJvdG90eXBlPV8sXy5jb25zdHJ1Y3Rvcj1nKSwoa3x8SSkmJihTKFwiZGVsZXRlXCIpLFMoXCJoYXNcIiksdiYmUyhcImdldFwiKSksKEl8fEEpJiZTKHcpLHkmJl8uY2xlYXImJmRlbGV0ZSBfLmNsZWFyfWVsc2UgZz1iLmdldENvbnN0cnVjdG9yKGUsdCx2LHcpLGEoZy5wcm90b3R5cGUsciksZi5ORUVEPSEwO3JldHVybiBsKGcsdCksTVt0XT1nLGkoaS5HK2kuVytpLkYqKGchPW0pLE0pLHl8fGIuc2V0U3Ryb25nKGcsdCx2KSxnfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTQpLGk9cigxNSksbz1yKDUpLGE9cigyNCksZj1yKDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIHM9Zih0KSx1PXIoYSxzLFwiXCJbdF0pLGg9dVswXSxjPXVbMV07byhmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybiBlW3NdPWZ1bmN0aW9uKCl7cmV0dXJuIDd9LDchPVwiXCJbdF0oZSl9KSYmKGkoU3RyaW5nLnByb3RvdHlwZSx0LGgpLG4oUmVnRXhwLnByb3RvdHlwZSxzLDI9PWU/ZnVuY3Rpb24odCxlKXtyZXR1cm4gYy5jYWxsKHQsdGhpcyxlKX06ZnVuY3Rpb24odCl7cmV0dXJuIGMuY2FsbCh0LHRoaXMpfSkpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIHQ9bih0aGlzKSxlPVwiXCI7cmV0dXJuIHQuZ2xvYmFsJiYoZSs9XCJnXCIpLHQuaWdub3JlQ2FzZSYmKGUrPVwiaVwiKSx0Lm11bHRpbGluZSYmKGUrPVwibVwiKSx0LnVuaWNvZGUmJihlKz1cInVcIiksdC5zdGlja3kmJihlKz1cInlcIiksZX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP3QoKTp0LmNhbGwocik7Y2FzZSAxOnJldHVybiBuP3QoZVswXSk6dC5jYWxsKHIsZVswXSk7Y2FzZSAyOnJldHVybiBuP3QoZVswXSxlWzFdKTp0LmNhbGwocixlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbj90KGVbMF0sZVsxXSxlWzJdKTp0LmNhbGwocixlWzBdLGVbMV0sZVsyXSk7Y2FzZSA0OnJldHVybiBuP3QoZVswXSxlWzFdLGVbMl0sZVszXSk6dC5jYWxsKHIsZVswXSxlWzFdLGVbMl0sZVszXSl9cmV0dXJuIHQuYXBwbHkocixlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigyMyksbz1yKDcpKFwibWF0Y2hcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBuKHQpJiYodm9pZCAwIT09KGU9dFtvXSk/ISFlOlwiUmVnRXhwXCI9PWkodCkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJpdGVyYXRvclwiKSxpPSExO3RyeXt2YXIgbz1bN11bbl0oKTtvLnJldHVybj1mdW5jdGlvbigpe2k9ITB9LEFycmF5LmZyb20obyxmdW5jdGlvbigpe3Rocm93IDJ9KX1jYXRjaCh0KXt9dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIWUmJiFpKXJldHVybiExO3ZhciByPSExO3RyeXt2YXIgbz1bN10sYT1vW25dKCk7YS5uZXh0PWZ1bmN0aW9uKCl7cmV0dXJue2RvbmU6cj0hMH19LG9bbl09ZnVuY3Rpb24oKXtyZXR1cm4gYX0sdChvKX1jYXRjaCh0KXt9cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNDEpfHwhcig1KShmdW5jdGlvbigpe3ZhciB0PU1hdGgucmFuZG9tKCk7X19kZWZpbmVTZXR0ZXJfXy5jYWxsKG51bGwsdCxmdW5jdGlvbigpe30pLGRlbGV0ZSByKDQpW3RdfSl9LGZ1bmN0aW9uKHQsZSl7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9XCJfX2NvcmUtanNfc2hhcmVkX19cIixvPW5baV18fChuW2ldPXt9KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG9bdF18fChvW3RdPXt9KX19LGZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1yKDQpLG89cigxNCksYT1yKDQ4KSxmPWEoXCJ0eXBlZF9hcnJheVwiKSxzPWEoXCJ2aWV3XCIpLHU9ISghaS5BcnJheUJ1ZmZlcnx8IWkuRGF0YVZpZXcpLGg9dSxjPTAsZD05LGw9XCJJbnQ4QXJyYXksVWludDhBcnJheSxVaW50OENsYW1wZWRBcnJheSxJbnQxNkFycmF5LFVpbnQxNkFycmF5LEludDMyQXJyYXksVWludDMyQXJyYXksRmxvYXQzMkFycmF5LEZsb2F0NjRBcnJheVwiLnNwbGl0KFwiLFwiKTtjPGQ7KShuPWlbbFtjKytdXSk/KG8obi5wcm90b3R5cGUsZiwhMCksbyhuLnByb3RvdHlwZSxzLCEwKSk6aD0hMTt0LmV4cG9ydHM9e0FCVjp1LENPTlNUUjpoLFRZUEVEOmYsVklFVzpzfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQ/bnVsbCE9PXQ6XCJmdW5jdGlvblwiPT10eXBlb2YgdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9cig0NzIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXIoNDc0KX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQud2VicGFja1BvbHlmaWxsfHwodC5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LHQucGF0aHM9W10sdC5jaGlsZHJlbnx8KHQuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwibG9hZGVkXCIse2VudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiExLGdldDpmdW5jdGlvbigpe3JldHVybiB0Lmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsXCJpZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5pfX0pLHQud2VicGFja1BvbHlmaWxsPTEpLHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS5yYW5kb21CeXRlcz1lLnJuZz1lLnBzZXVkb1JhbmRvbUJ5dGVzPWUucHJuZz1yKDYxKSxlLmNyZWF0ZUhhc2g9ZS5IYXNoPXIoNTkpLGUuY3JlYXRlSG1hYz1lLkhtYWM9cigxNDkpO3ZhciBuPVtcInNoYTFcIixcInNoYTIyNFwiLFwic2hhMjU2XCIsXCJzaGEzODRcIixcInNoYTUxMlwiLFwibWQ1XCIsXCJybWQxNjBcIl0uY29uY2F0KE9iamVjdC5rZXlzKHIoMjExKSkpO2UuZ2V0SGFzaGVzPWZ1bmN0aW9uKCl7cmV0dXJuIG59O3ZhciBpPXIoMTUxKTtlLnBia2RmMj1pLnBia2RmMixlLnBia2RmMlN5bmM9aS5wYmtkZjJTeW5jO3ZhciBvPXIoNDkzKTtbXCJDaXBoZXJcIixcImNyZWF0ZUNpcGhlclwiLFwiQ2lwaGVyaXZcIixcImNyZWF0ZUNpcGhlcml2XCIsXCJEZWNpcGhlclwiLFwiY3JlYXRlRGVjaXBoZXJcIixcIkRlY2lwaGVyaXZcIixcImNyZWF0ZURlY2lwaGVyaXZcIixcImdldENpcGhlcnNcIixcImxpc3RDaXBoZXJzXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1vW3RdfSk7dmFyIGE9cig1NzMpO1tcIkRpZmZpZUhlbGxtYW5Hcm91cFwiLFwiY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwXCIsXCJnZXREaWZmaWVIZWxsbWFuXCIsXCJjcmVhdGVEaWZmaWVIZWxsbWFuXCIsXCJEaWZmaWVIZWxsbWFuXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1hW3RdfSk7dmFyIGY9cig1MDYpO1tcImNyZWF0ZVNpZ25cIixcIlNpZ25cIixcImNyZWF0ZVZlcmlmeVwiLFwiVmVyaWZ5XCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mW3RdfSksZS5jcmVhdGVFQ0RIPXIoNTQ0KTt2YXIgcz1yKDU3Nyk7W1wicHVibGljRW5jcnlwdFwiLFwicHJpdmF0ZUVuY3J5cHRcIixcInB1YmxpY0RlY3J5cHRcIixcInByaXZhdGVEZWNyeXB0XCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1zW3RdfSksW1wiY3JlYXRlQ3JlZGVudGlhbHNcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtlW3RdPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFtcInNvcnJ5LCBcIit0K1wiIGlzIG5vdCBpbXBsZW1lbnRlZCB5ZXRcIixcIndlIGFjY2VwdCBwdWxsIHJlcXVlc3RzXCIsXCJodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvLWJyb3dzZXJpZnkvY3J5cHRvLWJyb3dzZXJpZnlcIl0uam9pbihcIlxcblwiKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO1xucmV0dXJuITB9LGEucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2tleVNjaGVkdWxlLHMuU1VCX01JWCxzLlNCT1gpLG49bmV3IHQoMTYpO3JldHVybiBuLndyaXRlVUludDMyQkUoclswXSwwKSxuLndyaXRlVUludDMyQkUoclsxXSw0KSxuLndyaXRlVUludDMyQkUoclsyXSw4KSxuLndyaXRlVUludDMyQkUoclszXSwxMiksbn0sYS5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9W2VbM10sZVsxXV07ZVsxXT1yWzBdLGVbM109clsxXTt2YXIgbj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxzLklOVl9TVUJfTUlYLHMuSU5WX1NCT1gpLGk9bmV3IHQoMTYpO3JldHVybiBpLndyaXRlVUludDMyQkUoblswXSwwKSxpLndyaXRlVUludDMyQkUoblszXSw0KSxpLndyaXRlVUludDMyQkUoblsyXSw4KSxpLndyaXRlVUludDMyQkUoblsxXSwxMiksaX0sYS5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtuKHRoaXMuX2tleVNjaGVkdWxlKSxuKHRoaXMuX2ludktleVNjaGVkdWxlKSxuKHRoaXMuX2tleSl9LGEucHJvdG90eXBlLl9kb0NyeXB0QmxvY2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxmLHMsdSxoLGMsZCxsO2E9dFswXV5lWzBdLGY9dFsxXV5lWzFdLHM9dFsyXV5lWzJdLHU9dFszXV5lWzNdLG89NDtmb3IodmFyIHA9MTtwPHRoaXMuX25Sb3VuZHM7cCsrKWg9blswXVthPj4+MjRdXm5bMV1bZj4+PjE2JjI1NV1eblsyXVtzPj4+OCYyNTVdXm5bM11bMjU1JnVdXmVbbysrXSxjPW5bMF1bZj4+PjI0XV5uWzFdW3M+Pj4xNiYyNTVdXm5bMl1bdT4+PjgmMjU1XV5uWzNdWzI1NSZhXV5lW28rK10sZD1uWzBdW3M+Pj4yNF1eblsxXVt1Pj4+MTYmMjU1XV5uWzJdW2E+Pj44JjI1NV1eblszXVsyNTUmZl1eZVtvKytdLGw9blswXVt1Pj4+MjRdXm5bMV1bYT4+PjE2JjI1NV1eblsyXVtmPj4+OCYyNTVdXm5bM11bMjU1JnNdXmVbbysrXSxhPWgsZj1jLHM9ZCx1PWw7cmV0dXJuIGg9KGlbYT4+PjI0XTw8MjR8aVtmPj4+MTYmMjU1XTw8MTZ8aVtzPj4+OCYyNTVdPDw4fGlbMjU1JnVdKV5lW28rK10sYz0oaVtmPj4+MjRdPDwyNHxpW3M+Pj4xNiYyNTVdPDwxNnxpW3U+Pj44JjI1NV08PDh8aVsyNTUmYV0pXmVbbysrXSxkPShpW3M+Pj4yNF08PDI0fGlbdT4+PjE2JjI1NV08PDE2fGlbYT4+PjgmMjU1XTw8OHxpWzI1NSZmXSleZVtvKytdLGw9KGlbdT4+PjI0XTw8MjR8aVthPj4+MTYmMjU1XTw8MTZ8aVtmPj4+OCYyNTVdPDw4fGlbMjU1JnNdKV5lW28rK10sW3IoaCkscihjKSxyKGQpLHIobCldfSxlLkFFUz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiYWVzLTEyOC1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTEyOC1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlLmFlczEyOD1lW1wiYWVzLTEyOC1jYmNcIl0sZS5hZXMxOTI9ZVtcImFlcy0xOTItY2JjXCJdLGUuYWVzMjU2PWVbXCJhZXMtMjU2LWNiY1wiXSxlW1wiYWVzLTEyOC1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMTkyLWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0yNTYtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoO3ItLTspe2lmKGU9dC5yZWFkVUludDgociksMjU1IT09ZSl7ZSsrLHQud3JpdGVVSW50OChlLHIpO2JyZWFrfXQud3JpdGVVSW50OCgwLHIpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldik7cmV0dXJuIG4odC5fcHJldiksZX12YXIgbz1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLGkoZSldKTt2YXIgbj1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLG8ocixuKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24uYmFzZT1yKDUwOCksbi5zaG9ydD1yKDUxMSksbi5tb250PXIoNTEwKSxuLmVkd2FyZHM9cig1MDkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmJpZ251bT1yKDE4KSxuLmRlZmluZT1yKDUzMCkuZGVmaW5lLG4uYmFzZT1yKDY4KSxuLmNvbnN0YW50cz1yKDIxNSksbi5kZWNvZGVycz1yKDUzNCksbi5lbmNvZGVycz1yKDUzNil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO3JldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPWU7bi5iYXNlPXIoNTQ1KSxuLnNob3J0PXIoNTQ4KSxuLm1vbnQ9cig1NDcpLG4uZWR3YXJkcz1yKDU0Nil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dFtlPj41XXw9MTI4PDxlJTMyLHRbKGUrNjQ+Pj45PDw0KSsxNF09ZTtmb3IodmFyIHI9MTczMjU4NDE5MyxuPS0yNzE3MzM4NzksaT0tMTczMjU4NDE5NCxoPTI3MTczMzg3OCxjPTA7Yzx0Lmxlbmd0aDtjKz0xNil7dmFyIGQ9cixsPW4scD1pLGI9aDtyPW8ocixuLGksaCx0W2MrMF0sNywtNjgwODc2OTM2KSxoPW8oaCxyLG4saSx0W2MrMV0sMTIsLTM4OTU2NDU4NiksaT1vKGksaCxyLG4sdFtjKzJdLDE3LDYwNjEwNTgxOSksbj1vKG4saSxoLHIsdFtjKzNdLDIyLC0xMDQ0NTI1MzMwKSxyPW8ocixuLGksaCx0W2MrNF0sNywtMTc2NDE4ODk3KSxoPW8oaCxyLG4saSx0W2MrNV0sMTIsMTIwMDA4MDQyNiksaT1vKGksaCxyLG4sdFtjKzZdLDE3LC0xNDczMjMxMzQxKSxuPW8obixpLGgscix0W2MrN10sMjIsLTQ1NzA1OTgzKSxyPW8ocixuLGksaCx0W2MrOF0sNywxNzcwMDM1NDE2KSxoPW8oaCxyLG4saSx0W2MrOV0sMTIsLTE5NTg0MTQ0MTcpLGk9byhpLGgscixuLHRbYysxMF0sMTcsLTQyMDYzKSxuPW8obixpLGgscix0W2MrMTFdLDIyLC0xOTkwNDA0MTYyKSxyPW8ocixuLGksaCx0W2MrMTJdLDcsMTgwNDYwMzY4MiksaD1vKGgscixuLGksdFtjKzEzXSwxMiwtNDAzNDExMDEpLGk9byhpLGgscixuLHRbYysxNF0sMTcsLTE1MDIwMDIyOTApLG49byhuLGksaCxyLHRbYysxNV0sMjIsMTIzNjUzNTMyOSkscj1hKHIsbixpLGgsdFtjKzFdLDUsLTE2NTc5NjUxMCksaD1hKGgscixuLGksdFtjKzZdLDksLTEwNjk1MDE2MzIpLGk9YShpLGgscixuLHRbYysxMV0sMTQsNjQzNzE3NzEzKSxuPWEobixpLGgscix0W2MrMF0sMjAsLTM3Mzg5NzMwMikscj1hKHIsbixpLGgsdFtjKzVdLDUsLTcwMTU1ODY5MSksaD1hKGgscixuLGksdFtjKzEwXSw5LDM4MDE2MDgzKSxpPWEoaSxoLHIsbix0W2MrMTVdLDE0LC02NjA0NzgzMzUpLG49YShuLGksaCxyLHRbYys0XSwyMCwtNDA1NTM3ODQ4KSxyPWEocixuLGksaCx0W2MrOV0sNSw1Njg0NDY0MzgpLGg9YShoLHIsbixpLHRbYysxNF0sOSwtMTAxOTgwMzY5MCksaT1hKGksaCxyLG4sdFtjKzNdLDE0LC0xODczNjM5NjEpLG49YShuLGksaCxyLHRbYys4XSwyMCwxMTYzNTMxNTAxKSxyPWEocixuLGksaCx0W2MrMTNdLDUsLTE0NDQ2ODE0NjcpLGg9YShoLHIsbixpLHRbYysyXSw5LC01MTQwMzc4NCksaT1hKGksaCxyLG4sdFtjKzddLDE0LDE3MzUzMjg0NzMpLG49YShuLGksaCxyLHRbYysxMl0sMjAsLTE5MjY2MDc3MzQpLHI9ZihyLG4saSxoLHRbYys1XSw0LC0zNzg1NTgpLGg9ZihoLHIsbixpLHRbYys4XSwxMSwtMjAyMjU3NDQ2MyksaT1mKGksaCxyLG4sdFtjKzExXSwxNiwxODM5MDMwNTYyKSxuPWYobixpLGgscix0W2MrMTRdLDIzLC0zNTMwOTU1Nikscj1mKHIsbixpLGgsdFtjKzFdLDQsLTE1MzA5OTIwNjApLGg9ZihoLHIsbixpLHRbYys0XSwxMSwxMjcyODkzMzUzKSxpPWYoaSxoLHIsbix0W2MrN10sMTYsLTE1NTQ5NzYzMiksbj1mKG4saSxoLHIsdFtjKzEwXSwyMywtMTA5NDczMDY0MCkscj1mKHIsbixpLGgsdFtjKzEzXSw0LDY4MTI3OTE3NCksaD1mKGgscixuLGksdFtjKzBdLDExLC0zNTg1MzcyMjIpLGk9ZihpLGgscixuLHRbYyszXSwxNiwtNzIyNTIxOTc5KSxuPWYobixpLGgscix0W2MrNl0sMjMsNzYwMjkxODkpLHI9ZihyLG4saSxoLHRbYys5XSw0LC02NDAzNjQ0ODcpLGg9ZihoLHIsbixpLHRbYysxMl0sMTEsLTQyMTgxNTgzNSksaT1mKGksaCxyLG4sdFtjKzE1XSwxNiw1MzA3NDI1MjApLG49ZihuLGksaCxyLHRbYysyXSwyMywtOTk1MzM4NjUxKSxyPXMocixuLGksaCx0W2MrMF0sNiwtMTk4NjMwODQ0KSxoPXMoaCxyLG4saSx0W2MrN10sMTAsMTEyNjg5MTQxNSksaT1zKGksaCxyLG4sdFtjKzE0XSwxNSwtMTQxNjM1NDkwNSksbj1zKG4saSxoLHIsdFtjKzVdLDIxLC01NzQzNDA1NSkscj1zKHIsbixpLGgsdFtjKzEyXSw2LDE3MDA0ODU1NzEpLGg9cyhoLHIsbixpLHRbYyszXSwxMCwtMTg5NDk4NjYwNiksaT1zKGksaCxyLG4sdFtjKzEwXSwxNSwtMTA1MTUyMyksbj1zKG4saSxoLHIsdFtjKzFdLDIxLC0yMDU0OTIyNzk5KSxyPXMocixuLGksaCx0W2MrOF0sNiwxODczMzEzMzU5KSxoPXMoaCxyLG4saSx0W2MrMTVdLDEwLC0zMDYxMTc0NCksaT1zKGksaCxyLG4sdFtjKzZdLDE1LC0xNTYwMTk4MzgwKSxuPXMobixpLGgscix0W2MrMTNdLDIxLDEzMDkxNTE2NDkpLHI9cyhyLG4saSxoLHRbYys0XSw2LC0xNDU1MjMwNzApLGg9cyhoLHIsbixpLHRbYysxMV0sMTAsLTExMjAyMTAzNzkpLGk9cyhpLGgscixuLHRbYysyXSwxNSw3MTg3ODcyNTkpLG49cyhuLGksaCxyLHRbYys5XSwyMSwtMzQzNDg1NTUxKSxyPXUocixkKSxuPXUobixsKSxpPXUoaSxwKSxoPXUoaCxiKX1yZXR1cm4gQXJyYXkocixuLGksaCl9ZnVuY3Rpb24gaSh0LGUscixuLGksbyl7cmV0dXJuIHUoaCh1KHUoZSx0KSx1KG4sbykpLGkpLHIpfWZ1bmN0aW9uIG8odCxlLHIsbixvLGEsZil7cmV0dXJuIGkoZSZyfH5lJm4sdCxlLG8sYSxmKX1mdW5jdGlvbiBhKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKGUmbnxyJn5uLHQsZSxvLGEsZil9ZnVuY3Rpb24gZih0LGUscixuLG8sYSxmKXtyZXR1cm4gaShlXnJebix0LGUsbyxhLGYpfWZ1bmN0aW9uIHModCxlLHIsbixvLGEsZil7cmV0dXJuIGkocl4oZXx+biksdCxlLG8sYSxmKX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9KDY1NTM1JnQpKyg2NTUzNSZlKSxuPSh0Pj4xNikrKGU+PjE2KSsocj4+MTYpO3JldHVybiBuPDwxNnw2NTUzNSZyfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX12YXIgYz1yKDU2NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBjLmhhc2godCxuLDE2KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uYmlnbnVtPXIoNzApLG4uZGVmaW5lPXIoNTgwKS5kZWZpbmUsbi5iYXNlPXIoNzEpLG4uY29uc3RhbnRzPXIoMjM1KSxuLmRlY29kZXJzPXIoNTg0KSxuLmVuY29kZXJzPXIoNTg2KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5mfHx0PDA/KHI9TWF0aC5hYnModCklZix0PDA/Zi1yOnIpOnR9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO3QrKyl0W2VdPTA7cmV0dXJuITF9ZnVuY3Rpb24gaSgpe3RoaXMuU0JPWD1bXSx0aGlzLklOVl9TQk9YPVtdLHRoaXMuU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuSU5WX1NVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLmluaXQoKSx0aGlzLlJDT049WzAsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTRdfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubGVuZ3RoLzQscj1uZXcgQXJyYXkoZSksbj0tMTsrK248ZTspcltuXT10LnJlYWRVSW50MzJCRSg0Km4pO3JldHVybiByfWZ1bmN0aW9uIGEodCl7dGhpcy5fa2V5PW8odCksdGhpcy5fZG9SZXNldCgpfXZhciBmPU1hdGgucG93KDIsMzIpO2kucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG8sYSxmLHMsdTtmb3IodD1mdW5jdGlvbigpe3ZhciB0LHI7Zm9yKHI9W10sZT10PTA7dDwyNTY7ZT0rK3QpZTwxMjg/ci5wdXNoKGU8PDEpOnIucHVzaChlPDwxXjI4Myk7cmV0dXJuIHJ9KCksaT0wLHM9MCxlPXU9MDt1PDI1NjtlPSsrdSlyPXNeczw8MV5zPDwyXnM8PDNeczw8NCxyPXI+Pj44XjI1NSZyXjk5LHRoaXMuU0JPWFtpXT1yLHRoaXMuSU5WX1NCT1hbcl09aSxvPXRbaV0sYT10W29dLGY9dFthXSxuPTI1Nyp0W3JdXjE2ODQzMDA4KnIsdGhpcy5TVUJfTUlYWzBdW2ldPW48PDI0fG4+Pj44LHRoaXMuU1VCX01JWFsxXVtpXT1uPDwxNnxuPj4+MTYsdGhpcy5TVUJfTUlYWzJdW2ldPW48PDh8bj4+PjI0LHRoaXMuU1VCX01JWFszXVtpXT1uLG49MTY4NDMwMDkqZl42NTUzNyphXjI1NypvXjE2ODQzMDA4KmksdGhpcy5JTlZfU1VCX01JWFswXVtyXT1uPDwyNHxuPj4+OCx0aGlzLklOVl9TVUJfTUlYWzFdW3JdPW48PDE2fG4+Pj4xNix0aGlzLklOVl9TVUJfTUlYWzJdW3JdPW48PDh8bj4+PjI0LHRoaXMuSU5WX1NVQl9NSVhbM11bcl09biwwPT09aT9pPXM9MTooaT1vXnRbdFt0W2Zeb11dXSxzXj10W3Rbc11dKTtyZXR1cm4hMH07dmFyIHM9bmV3IGk7YS5ibG9ja1NpemU9MTYsYS5wcm90b3R5cGUuYmxvY2tTaXplPWEuYmxvY2tTaXplLGEua2V5U2l6ZT0zMixhLnByb3RvdHlwZS5rZXlTaXplPWEua2V5U2l6ZSxhLnByb3RvdHlwZS5fZG9SZXNldD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbztmb3Iocj10aGlzLl9rZXksZT1yLmxlbmd0aCx0aGlzLl9uUm91bmRzPWUrNixpPTQqKHRoaXMuX25Sb3VuZHMrMSksdGhpcy5fa2V5U2NoZWR1bGU9W10sbj0wO248aTtuKyspdGhpcy5fa2V5U2NoZWR1bGVbbl09bjxlP3Jbbl06KG89dGhpcy5fa2V5U2NoZWR1bGVbbi0xXSxuJWU9PT0wPyhvPW88PDh8bz4+PjI0LG89cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXSxvXj1zLlJDT05bbi9lfDBdPDwyNCk6ZT42JiZuJWU9PT00P289cy5TQk9YW28+Pj4yNF08PDI0fHMuU0JPWFtvPj4+MTYmMjU1XTw8MTZ8cy5TQk9YW28+Pj44JjI1NV08PDh8cy5TQk9YWzI1NSZvXTp2b2lkIDAsdGhpcy5fa2V5U2NoZWR1bGVbbi1lXV5vKTtmb3IodGhpcy5faW52S2V5U2NoZWR1bGU9W10sdD0wO3Q8aTt0Kyspbj1pLXQsbz10aGlzLl9rZXlTY2hlZHVsZVtuLSh0JTQ/MDo0KV0sdGhpcy5faW52S2V5U2NoZWR1bGVbdF09dDw0fHxuPD00P286cy5JTlZfU1VCX01JWFswXVtzLlNCT1hbbz4+PjI0XV1ecy5JTlZfU1VCX01JWFsxXVtzLlNCT1hbbz4+PjE2JjI1NV1dXnMuSU5WX1NVQl9NSVhbMl1bcy5TQk9YW28+Pj44JjI1NV1dXnMuSU5WX1NVQl9NSVhbM11bcy5TQk9YWzI1NSZvXV07cmV0dXJuITB9LGEucHJvdG90eXBlLmVuY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2tleVNjaGVkdWxlLHMuU1VCX01JWCxzLlNCT1gpLG49bmV3IHQoMTYpO3JldHVybiBuLndyaXRlVUludDMyQkUoclswXSwwKSxuLndyaXRlVUludDMyQkUoclsxXSw0KSxuLndyaXRlVUludDMyQkUoclsyXSw4KSxuLndyaXRlVUludDMyQkUoclszXSwxMiksbn0sYS5wcm90b3R5cGUuZGVjcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9W2VbM10sZVsxXV07ZVsxXT1yWzBdLGVbM109clsxXTt2YXIgbj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9pbnZLZXlTY2hlZHVsZSxzLklOVl9TVUJfTUlYLHMuSU5WX1NCT1gpLGk9bmV3IHQoMTYpO3JldHVybiBpLndyaXRlVUludDMyQkUoblswXSwwKSxpLndyaXRlVUludDMyQkUoblszXSw0KSxpLndyaXRlVUludDMyQkUoblsyXSw4KSxpLndyaXRlVUludDMyQkUoblsxXSwxMiksaX0sYS5wcm90b3R5cGUuc2NydWI9ZnVuY3Rpb24oKXtuKHRoaXMuX2tleVNjaGVkdWxlKSxuKHRoaXMuX2ludktleVNjaGVkdWxlKSxuKHRoaXMuX2tleSl9LGEucHJvdG90eXBlLl9kb0NyeXB0QmxvY2s9ZnVuY3Rpb24odCxlLG4saSl7dmFyIG8sYSxmLHMsdSxoLGMsZCxsO2E9dFswXV5lWzBdLGY9dFsxXV5lWzFdLHM9dFsyXV5lWzJdLHU9dFszXV5lWzNdLG89NDtmb3IodmFyIHA9MTtwPHRoaXMuX25Sb3VuZHM7cCsrKWg9blswXVthPj4+MjRdXm5bMV1bZj4+PjE2JjI1NV1eblsyXVtzPj4+OCYyNTVdXm5bM11bMjU1JnVdXmVbbysrXSxjPW5bMF1bZj4+PjI0XV5uWzFdW3M+Pj4xNiYyNTVdXm5bMl1bdT4+PjgmMjU1XV5uWzNdWzI1NSZhXV5lW28rK10sZD1uWzBdW3M+Pj4yNF1eblsxXVt1Pj4+MTYmMjU1XV5uWzJdW2E+Pj44JjI1NV1eblszXVsyNTUmZl1eZVtvKytdLGw9blswXVt1Pj4+MjRdXm5bMV1bYT4+PjE2JjI1NV1eblsyXVtmPj4+OCYyNTVdXm5bM11bMjU1JnNdXmVbbysrXSxhPWgsZj1jLHM9ZCx1PWw7cmV0dXJuIGg9KGlbYT4+PjI0XTw8MjR8aVtmPj4+MTYmMjU1XTw8MTZ8aVtzPj4+OCYyNTVdPDw4fGlbMjU1JnVdKV5lW28rK10sYz0oaVtmPj4+MjRdPDwyNHxpW3M+Pj4xNiYyNTVdPDwxNnxpW3U+Pj44JjI1NV08PDh8aVsyNTUmYV0pXmVbbysrXSxkPShpW3M+Pj4yNF08PDI0fGlbdT4+PjE2JjI1NV08PDE2fGlbYT4+PjgmMjU1XTw8OHxpWzI1NSZmXSleZVtvKytdLGw9KGlbdT4+PjI0XTw8MjR8aVthPj4+MTYmMjU1XTw8MTZ8aVtmPj4+OCYyNTVdPDw4fGlbMjU1JnNdKV5lW28rK10sW3IoaCkscihjKSxyKGQpLHIobCldfSxlLkFFUz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoO3ItLTspe2lmKGU9dC5yZWFkVUludDgociksMjU1IT09ZSl7ZSsrLHQud3JpdGVVSW50OChlLHIpO2JyZWFrfXQud3JpdGVVSW50OCgwLHIpfX1mdW5jdGlvbiBpKHQpe3ZhciBlPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldik7cmV0dXJuIG4odC5fcHJldiksZX12YXIgbz1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLGkoZSldKTt2YXIgbj1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLG8ocixuKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLl9ldmVudHM9dGhpcy5fZXZlbnRzfHx7fSx0aGlzLl9tYXhMaXN0ZW5lcnM9dGhpcy5fbWF4TGlzdGVuZXJzfHx2b2lkIDB9ZnVuY3Rpb24gbih0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGkodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gbyh0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmbnVsbCE9PXR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdm9pZCAwPT09dH10LmV4cG9ydHM9cixyLkV2ZW50RW1pdHRlcj1yLHIucHJvdG90eXBlLl9ldmVudHM9dm9pZCAwLHIucHJvdG90eXBlLl9tYXhMaXN0ZW5lcnM9dm9pZCAwLHIuZGVmYXVsdE1heExpc3RlbmVycz0xMCxyLnByb3RvdHlwZS5zZXRNYXhMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7aWYoIWkodCl8fHQ8MHx8aXNOYU4odCkpdGhyb3cgVHlwZUVycm9yKFwibiBtdXN0IGJlIGEgcG9zaXRpdmUgbnVtYmVyXCIpO3JldHVybiB0aGlzLl9tYXhMaXN0ZW5lcnM9dCx0aGlzfSxyLnByb3RvdHlwZS5lbWl0PWZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxmLHMsdTtpZih0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLFwiZXJyb3JcIj09PXQmJighdGhpcy5fZXZlbnRzLmVycm9yfHxvKHRoaXMuX2V2ZW50cy5lcnJvcikmJiF0aGlzLl9ldmVudHMuZXJyb3IubGVuZ3RoKSl7aWYoZT1hcmd1bWVudHNbMV0sZSBpbnN0YW5jZW9mIEVycm9yKXRocm93IGU7dmFyIGg9bmV3IEVycm9yKCdVbmNhdWdodCwgdW5zcGVjaWZpZWQgXCJlcnJvclwiIGV2ZW50LiAoJytlK1wiKVwiKTt0aHJvdyBoLmNvbnRleHQ9ZSxofWlmKHI9dGhpcy5fZXZlbnRzW3RdLGEocikpcmV0dXJuITE7aWYobihyKSlzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAxOnIuY2FsbCh0aGlzKTticmVhaztjYXNlIDI6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdKTticmVhaztjYXNlIDM6ci5jYWxsKHRoaXMsYXJndW1lbnRzWzFdLGFyZ3VtZW50c1syXSk7YnJlYWs7ZGVmYXVsdDpmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSxyLmFwcGx5KHRoaXMsZil9ZWxzZSBpZihvKHIpKWZvcihmPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKSx1PXIuc2xpY2UoKSxpPXUubGVuZ3RoLHM9MDtzPGk7cysrKXVbc10uYXBwbHkodGhpcyxmKTtyZXR1cm4hMH0sci5wcm90b3R5cGUuYWRkTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgaTtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7cmV0dXJuIHRoaXMuX2V2ZW50c3x8KHRoaXMuX2V2ZW50cz17fSksdGhpcy5fZXZlbnRzLm5ld0xpc3RlbmVyJiZ0aGlzLmVtaXQoXCJuZXdMaXN0ZW5lclwiLHQsbihlLmxpc3RlbmVyKT9lLmxpc3RlbmVyOmUpLHRoaXMuX2V2ZW50c1t0XT9vKHRoaXMuX2V2ZW50c1t0XSk/dGhpcy5fZXZlbnRzW3RdLnB1c2goZSk6dGhpcy5fZXZlbnRzW3RdPVt0aGlzLl9ldmVudHNbdF0sZV06dGhpcy5fZXZlbnRzW3RdPWUsbyh0aGlzLl9ldmVudHNbdF0pJiYhdGhpcy5fZXZlbnRzW3RdLndhcm5lZCYmKGk9YSh0aGlzLl9tYXhMaXN0ZW5lcnMpP3IuZGVmYXVsdE1heExpc3RlbmVyczp0aGlzLl9tYXhMaXN0ZW5lcnMsaSYmaT4wJiZ0aGlzLl9ldmVudHNbdF0ubGVuZ3RoPmkmJih0aGlzLl9ldmVudHNbdF0ud2FybmVkPSEwLGNvbnNvbGUuZXJyb3IoXCIobm9kZSkgd2FybmluZzogcG9zc2libGUgRXZlbnRFbWl0dGVyIG1lbW9yeSBsZWFrIGRldGVjdGVkLiAlZCBsaXN0ZW5lcnMgYWRkZWQuIFVzZSBlbWl0dGVyLnNldE1heExpc3RlbmVycygpIHRvIGluY3JlYXNlIGxpbWl0LlwiLHRoaXMuX2V2ZW50c1t0XS5sZW5ndGgpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGNvbnNvbGUudHJhY2UmJmNvbnNvbGUudHJhY2UoKSkpLHRoaXN9LHIucHJvdG90eXBlLm9uPXIucHJvdG90eXBlLmFkZExpc3RlbmVyLHIucHJvdG90eXBlLm9uY2U9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5yZW1vdmVMaXN0ZW5lcih0LHIpLGl8fChpPSEwLGUuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1pZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7dmFyIGk9ITE7cmV0dXJuIHIubGlzdGVuZXI9ZSx0aGlzLm9uKHQsciksdGhpc30sci5wcm90b3R5cGUucmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24odCxlKXt2YXIgcixpLGEsZjtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoXCJsaXN0ZW5lciBtdXN0IGJlIGEgZnVuY3Rpb25cIik7aWYoIXRoaXMuX2V2ZW50c3x8IXRoaXMuX2V2ZW50c1t0XSlyZXR1cm4gdGhpcztpZihyPXRoaXMuX2V2ZW50c1t0XSxhPXIubGVuZ3RoLGk9LTEscj09PWV8fG4oci5saXN0ZW5lcikmJnIubGlzdGVuZXI9PT1lKWRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyJiZ0aGlzLmVtaXQoXCJyZW1vdmVMaXN0ZW5lclwiLHQsZSk7ZWxzZSBpZihvKHIpKXtmb3IoZj1hO2YtLSA+MDspaWYocltmXT09PWV8fHJbZl0ubGlzdGVuZXImJnJbZl0ubGlzdGVuZXI9PT1lKXtpPWY7YnJlYWt9aWYoaTwwKXJldHVybiB0aGlzOzE9PT1yLmxlbmd0aD8oci5sZW5ndGg9MCxkZWxldGUgdGhpcy5fZXZlbnRzW3RdKTpyLnNwbGljZShpLDEpLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LGUpfXJldHVybiB0aGlzfSxyLnByb3RvdHlwZS5yZW1vdmVBbGxMaXN0ZW5lcnM9ZnVuY3Rpb24odCl7dmFyIGUscjtpZighdGhpcy5fZXZlbnRzKXJldHVybiB0aGlzO2lmKCF0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXIpcmV0dXJuIDA9PT1hcmd1bWVudHMubGVuZ3RoP3RoaXMuX2V2ZW50cz17fTp0aGlzLl9ldmVudHNbdF0mJmRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpcztpZigwPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKGUgaW4gdGhpcy5fZXZlbnRzKVwicmVtb3ZlTGlzdGVuZXJcIiE9PWUmJnRoaXMucmVtb3ZlQWxsTGlzdGVuZXJzKGUpO3JldHVybiB0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhcInJlbW92ZUxpc3RlbmVyXCIpLHRoaXMuX2V2ZW50cz17fSx0aGlzfWlmKHI9dGhpcy5fZXZlbnRzW3RdLG4ocikpdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHIpO2Vsc2UgaWYocilmb3IoO3IubGVuZ3RoOyl0aGlzLnJlbW92ZUxpc3RlbmVyKHQscltyLmxlbmd0aC0xXSk7cmV0dXJuIGRlbGV0ZSB0aGlzLl9ldmVudHNbdF0sdGhpc30sci5wcm90b3R5cGUubGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBlPXRoaXMuX2V2ZW50cyYmdGhpcy5fZXZlbnRzW3RdP24odGhpcy5fZXZlbnRzW3RdKT9bdGhpcy5fZXZlbnRzW3RdXTp0aGlzLl9ldmVudHNbdF0uc2xpY2UoKTpbXX0sci5wcm90b3R5cGUubGlzdGVuZXJDb3VudD1mdW5jdGlvbih0KXtpZih0aGlzLl9ldmVudHMpe3ZhciBlPXRoaXMuX2V2ZW50c1t0XTtpZihuKGUpKXJldHVybiAxO2lmKGUpcmV0dXJuIGUubGVuZ3RofXJldHVybiAwfSxyLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lckNvdW50KGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25ld0ludmFsaWRBc24xRXJyb3I6ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEVycm9yO3JldHVybiBlLm5hbWU9XCJJbnZhbGlkQXNuMUVycm9yXCIsZS5tZXNzYWdlPXR8fFwiXCIsZX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17RU9DOjAsQm9vbGVhbjoxLEludGVnZXI6MixCaXRTdHJpbmc6MyxPY3RldFN0cmluZzo0LE51bGw6NSxPSUQ6NixPYmplY3REZXNjcmlwdG9yOjcsRXh0ZXJuYWw6OCxSZWFsOjksRW51bWVyYXRpb246MTAsUERWOjExLFV0ZjhTdHJpbmc6MTIsUmVsYXRpdmVPSUQ6MTMsU2VxdWVuY2U6MTYsU2V0OjE3LE51bWVyaWNTdHJpbmc6MTgsUHJpbnRhYmxlU3RyaW5nOjE5LFQ2MVN0cmluZzoyMCxWaWRlb3RleFN0cmluZzoyMSxJQTVTdHJpbmc6MjIsVVRDVGltZToyMyxHZW5lcmFsaXplZFRpbWU6MjQsR3JhcGhpY1N0cmluZzoyNSxWaXNpYmxlU3RyaW5nOjI2LEdlbmVyYWxTdHJpbmc6MjgsVW5pdmVyc2FsU3RyaW5nOjI5LENoYXJhY3RlclN0cmluZzozMCxCTVBTdHJpbmc6MzEsQ29uc3RydWN0b3I6MzIsQ29udGV4dDoxMjh9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig5Mykscz1yKDkxKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUodCl7bih0aGlzLGUpO3ZhciByPWkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHIuaGFzaD1mLmNyZWF0ZUhhc2godCkscn1yZXR1cm4gbyhlLHQpLGEoZSxbe2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5oYXNoLnVwZGF0ZSh0KX19LHtrZXk6XCJnZXREaWdlc3RcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2guZGlnZXN0KCl9fV0sW3trZXk6XCJnZXRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gZi5jcmVhdGVIYXNoKHQpLmRpZ2VzdCgpLmxlbmd0aH19XSksZX0ocyk7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigyNjEpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpfXJldHVybiBpKHQsbnVsbCxbe2tleTpcImdldENsYXNzRnJvbVR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKGU+TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpdGhyb3cgbmV3IG8oXCJUeXBlIFwiK2UrXCIgaXMgbm90IHN1cHBvcnRlZFwiKTt2YXIgcj0hMCxuPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIGEsZj10LnJlZ2lzdGVyZWRUeXBlc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShhPWYubmV4dCgpKS5kb25lKTtyPSEwKXt2YXIgcz1hLnZhbHVlO2lmKGU9PT1zLnR5cGVJZClyZXR1cm4gcy5DbGFzc319Y2F0Y2godCl7bj0hMCxpPXR9ZmluYWxseXt0cnl7IXImJmYucmV0dXJuJiZmLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX10aHJvdyBuZXcgbyhcIlR5cGUgXCIrZStcIiBpcyBub3Qgc3VwcG9ydGVkXCIpfX0se2tleTpcInJlZ2lzdGVyVHlwZVwiLHZhbHVlOmZ1bmN0aW9uKGUpe3QucmVnaXN0ZXJlZFR5cGVzLnB1c2goe3R5cGVJZDplLlRZUEVfSUQsQ2xhc3M6ZX0pfX1dKSx0fSgpO2EucmVnaXN0ZXJlZFR5cGVzPVtdLHQuZXhwb3J0cz1hfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtyKHRoaXMsdCl9cmV0dXJuIG4odCxudWxsLFt7a2V5OlwiZGVjb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5yZXBsYWNlKC9cXC0vZyxcIitcIikucmVwbGFjZSgvXy9nLFwiL1wiKTtyZXR1cm4gbmV3IGUocixcImJhc2U2NFwiKX19LHtrZXk6XCJlbmNvZGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC50b1N0cmluZyhcImJhc2U2NFwiKS5yZXBsYWNlKC89L2csXCJcIikucmVwbGFjZSgvXFwrL2csXCItXCIpLnJlcGxhY2UoL1xcLy9nLFwiX1wiKX19XSksdH0oKTt0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTY0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTEpLGk9cig0Nyksbz1yKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW4odGhpcykscj1vKGUubGVuZ3RoKSxhPWFyZ3VtZW50cy5sZW5ndGgsZj1pKGE+MT9hcmd1bWVudHNbMV06dm9pZCAwLHIpLHM9YT4yP2FyZ3VtZW50c1syXTp2b2lkIDAsdT12b2lkIDA9PT1zP3I6aShzLHIpO3U+ZjspZVtmKytdPXQ7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig5KSxpPXIoMzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7ZSBpbiB0P24uZih0LGUsaSgwLHIpKTp0W2VdPXJ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoNCkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mXCIuc3BsaXQoXCIsXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT0vLi87dHJ5e1wiLy4vXCJbdF0oZSl9Y2F0Y2gocil7dHJ5e3JldHVybiBlW25dPSExLCFcIi8uL1wiW3RdKGUpfWNhdGNoKHQpe319cmV0dXJuITB9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNCkuZG9jdW1lbnQmJmRvY3VtZW50LmRvY3VtZW50RWxlbWVudH0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDEzMikuc2V0O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG8sYT1lLmNvbnN0cnVjdG9yO3JldHVybiBhIT09ciYmXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKG89YS5wcm90b3R5cGUpIT09ci5wcm90b3R5cGUmJm4obykmJmkmJmkodCxvKSx0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNTYpLGk9cig3KShcIml0ZXJhdG9yXCIpLG89QXJyYXkucHJvdG90eXBlO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwIT09dCYmKG4uQXJyYXk9PT10fHxvW2ldPT09dCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyk7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiQXJyYXlcIj09bih0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQyKSxpPXIoMzcpLG89cig1NyksYT17fTtyKDE0KShhLHIoNykoXCJpdGVyYXRvclwiKSxmdW5jdGlvbigpe3JldHVybiB0aGlzfSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt0LnByb3RvdHlwZT1uKGEse25leHQ6aSgxLHIpfSksbyh0LGUrXCIgSXRlcmF0b3JcIil9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0MSksaT1yKDApLG89cigxNSksYT1yKDE0KSxmPXIoMTIpLHM9cig1NiksdT1yKDEyNyksaD1yKDU3KSxjPXIoMjEpLGQ9cig3KShcIml0ZXJhdG9yXCIpLGw9IShbXS5rZXlzJiZcIm5leHRcImluW10ua2V5cygpKSxwPVwiQEBpdGVyYXRvclwiLGI9XCJrZXlzXCIsdj1cInZhbHVlc1wiLHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLG0sZyx3LF8pe3UocixlLG0pO3ZhciBNLFMsRSxBPWZ1bmN0aW9uKHQpe2lmKCFsJiZ0IGluIEIpcmV0dXJuIEJbdF07c3dpdGNoKHQpe2Nhc2UgYjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX07Y2FzZSB2OnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLHQpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX19LGs9ZStcIiBJdGVyYXRvclwiLHg9Zz09dixJPSExLEI9dC5wcm90b3R5cGUsTz1CW2RdfHxCW3BdfHxnJiZCW2ddLFI9T3x8QShnKSxQPWc/eD9BKFwiZW50cmllc1wiKTpSOnZvaWQgMCxUPVwiQXJyYXlcIj09ZT9CLmVudHJpZXN8fE86TztpZihUJiYoRT1jKFQuY2FsbChuZXcgdCkpLEUhPT1PYmplY3QucHJvdG90eXBlJiYoaChFLGssITApLG58fGYoRSxkKXx8YShFLGQseSkpKSx4JiZPJiZPLm5hbWUhPT12JiYoST0hMCxSPWZ1bmN0aW9uKCl7cmV0dXJuIE8uY2FsbCh0aGlzKX0pLG4mJiFffHwhbCYmIUkmJkJbZF18fGEoQixkLFIpLHNbZV09UixzW2tdPXksZylpZihNPXt2YWx1ZXM6eD9SOkEodiksa2V5czp3P1I6QShiKSxlbnRyaWVzOlB9LF8pZm9yKFMgaW4gTSlTIGluIEJ8fG8oQixTLE1bU10pO2Vsc2UgaShpLlAraS5GKihsfHxJKSxlLE0pO3JldHVybiBNfX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmV4cG0xO3QuZXhwb3J0cz0hcnx8cigxMCk+MjIwMjUuNDY1Nzk0ODA2NzE4fHxyKDEwKTwyMjAyNS40NjU3OTQ4MDY3MTh8fHIoLTJlLTE3KSE9LTJlLTE3P2Z1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDp0Pi0xZS02JiZ0PDFlLTY/dCt0KnQvMjpNYXRoLmV4cCh0KS0xfTpyfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1NYXRoLnNpZ258fGZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCl8fHQhPXQ/dDp0PDA/LTE6MX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxMzkpLnNldCxvPW4uTXV0YXRpb25PYnNlcnZlcnx8bi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLGE9bi5wcm9jZXNzLGY9bi5Qcm9taXNlLHM9XCJwcm9jZXNzXCI9PXIoMjMpKGEpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0LGUscix1PWZ1bmN0aW9uKCl7dmFyIG4saTtmb3IocyYmKG49YS5kb21haW4pJiZuLmV4aXQoKTt0Oyl7aT10LmZuLHQ9dC5uZXh0O3RyeXtpKCl9Y2F0Y2gobil7dGhyb3cgdD9yKCk6ZT12b2lkIDAsbn19ZT12b2lkIDAsbiYmbi5lbnRlcigpfTtpZihzKXI9ZnVuY3Rpb24oKXthLm5leHRUaWNrKHUpfTtlbHNlIGlmKG8pe3ZhciBoPSEwLGM9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoXCJcIik7bmV3IG8odSkub2JzZXJ2ZShjLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2MuZGF0YT1oPSFofX1lbHNlIGlmKGYmJmYucmVzb2x2ZSl7dmFyIGQ9Zi5yZXNvbHZlKCk7cj1mdW5jdGlvbigpe2QudGhlbih1KX19ZWxzZSByPWZ1bmN0aW9uKCl7aS5jYWxsKG4sdSl9O3JldHVybiBmdW5jdGlvbihuKXt2YXIgaT17Zm46bixuZXh0OnZvaWQgMH07ZSYmKGUubmV4dD1pKSx0fHwodD1pLHIoKSksZT1pfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzKSxvPWZ1bmN0aW9uKHQsZSl7aWYoaSh0KSwhbihlKSYmbnVsbCE9PWUpdGhyb3cgVHlwZUVycm9yKGUrXCI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhXCIpfTt0LmV4cG9ydHM9e3NldDpPYmplY3Quc2V0UHJvdG90eXBlT2Z8fChcIl9fcHJvdG9fX1wiaW57fT9mdW5jdGlvbih0LGUsbil7dHJ5e249cigzMykoRnVuY3Rpb24uY2FsbCxyKDIwKS5mKE9iamVjdC5wcm90b3R5cGUsXCJfX3Byb3RvX19cIikuc2V0LDIpLG4odCxbXSksZT0hKHQgaW5zdGFuY2VvZiBBcnJheSl9Y2F0Y2godCl7ZT0hMH1yZXR1cm4gZnVuY3Rpb24odCxyKXtyZXR1cm4gbyh0LHIpLGU/dC5fX3Byb3RvX189cjpuKHQsciksdH19KHt9LCExKTp2b2lkIDApLGNoZWNrOm99fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4NykoXCJrZXlzXCIpLGk9cig0OCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuW3RdfHwoblt0XT1pKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpLGk9cigxMyksbz1yKDcpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixhPW4odCkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PWF8fHZvaWQgMD09KHI9bihhKVtvXSk/ZTppKHIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzgpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIpe3ZhciBvLGEsZj1TdHJpbmcoaShlKSkscz1uKHIpLHU9Zi5sZW5ndGg7cmV0dXJuIHM8MHx8cz49dT90P1wiXCI6dm9pZCAwOihvPWYuY2hhckNvZGVBdChzKSxvPDU1Mjk2fHxvPjU2MzE5fHxzKzE9PT11fHwoYT1mLmNoYXJDb2RlQXQocysxKSk8NTYzMjB8fGE+NTczNDM/dD9mLmNoYXJBdChzKTpvOnQ/Zi5zbGljZShzLHMrMik6KG8tNTUyOTY8PDEwKSsoYS01NjMyMCkrNjU1MzYpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDgzKSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobihlKSl0aHJvdyBUeXBlRXJyb3IoXCJTdHJpbmcjXCIrcitcIiBkb2Vzbid0IGFjY2VwdCByZWdleCFcIik7cmV0dXJuIFN0cmluZyhpKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDM4KSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1TdHJpbmcoaSh0aGlzKSkscj1cIlwiLG89bih0KTtpZihvPDB8fG89PTEvMCl0aHJvdyBSYW5nZUVycm9yKFwiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmVcIik7Zm9yKDtvPjA7KG8+Pj49MSkmJihlKz1lKSkxJm8mJihyKz1lKTtyZXR1cm4gcn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPVwiXFx0XFxuXFx2XFxmXFxyIMKg4ZqA4aCO4oCA4oCB4oCC4oCD4oCE4oCF4oCG4oCH4oCI4oCJ4oCK4oCv4oGf44CAXFx1MjAyOFxcdTIwMjlcXHVmZWZmXCJ9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT1yKDMzKSxmPXIoODIpLHM9cigxMjMpLHU9cigxMjApLGg9cig0KSxjPWgucHJvY2VzcyxkPWguc2V0SW1tZWRpYXRlLGw9aC5jbGVhckltbWVkaWF0ZSxwPWguTWVzc2FnZUNoYW5uZWwsYj0wLHY9e30seT1cIm9ucmVhZHlzdGF0ZWNoYW5nZVwiLG09ZnVuY3Rpb24oKXt2YXIgdD0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KHQpKXt2YXIgZT12W3RdO2RlbGV0ZSB2W3RdLGUoKX19LGc9ZnVuY3Rpb24odCl7bS5jYWxsKHQuZGF0YSl9O2QmJmx8fChkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyllLnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrYl09ZnVuY3Rpb24oKXtmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpGdW5jdGlvbih0KSxlKX0sbihiKSxifSxsPWZ1bmN0aW9uKHQpe2RlbGV0ZSB2W3RdfSxcInByb2Nlc3NcIj09cigyMykoYyk/bj1mdW5jdGlvbih0KXtjLm5leHRUaWNrKGEobSx0LDEpKX06cD8oaT1uZXcgcCxvPWkucG9ydDIsaS5wb3J0MS5vbm1lc3NhZ2U9ZyxuPWEoby5wb3N0TWVzc2FnZSxvLDEpKTpoLmFkZEV2ZW50TGlzdGVuZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIHBvc3RNZXNzYWdlJiYhaC5pbXBvcnRTY3JpcHRzPyhuPWZ1bmN0aW9uKHQpe2gucG9zdE1lc3NhZ2UodCtcIlwiLFwiKlwiKX0saC5hZGRFdmVudExpc3RlbmVyKFwibWVzc2FnZVwiLGcsITEpKTpuPXkgaW4gdShcInNjcmlwdFwiKT9mdW5jdGlvbih0KXtzLmFwcGVuZENoaWxkKHUoXCJzY3JpcHRcIikpW3ldPWZ1bmN0aW9uKCl7cy5yZW1vdmVDaGlsZCh0aGlzKSxtLmNhbGwodCl9fTpmdW5jdGlvbih0KXtzZXRUaW1lb3V0KGEobSx0LDEpLDApfSksdC5leHBvcnRzPXtzZXQ6ZCxjbGVhcjpsfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDgpLG89cig0MSksYT1yKDg4KSxmPXIoMTQpLHM9cig0NSksdT1yKDUpLGg9cig0MCksYz1yKDM4KSxkPXIoMTApLGw9cig0MykuZixwPXIoOSkuZixiPXIoMTE4KSx2PXIoNTcpLHk9XCJBcnJheUJ1ZmZlclwiLG09XCJEYXRhVmlld1wiLGc9XCJwcm90b3R5cGVcIix3PVwiV3JvbmcgbGVuZ3RoIVwiLF89XCJXcm9uZyBpbmRleCFcIixNPW5beV0sUz1uW21dLEU9bi5NYXRoLEE9bi5SYW5nZUVycm9yLGs9bi5JbmZpbml0eSx4PU0sST1FLmFicyxCPUUucG93LE89RS5mbG9vcixSPUUubG9nLFA9RS5MTjIsVD1cImJ1ZmZlclwiLGo9XCJieXRlTGVuZ3RoXCIsQz1cImJ5dGVPZmZzZXRcIixOPWk/XCJfYlwiOlQsTD1pP1wiX2xcIjpqLFU9aT9cIl9vXCI6Qyx6PWZ1bmN0aW9uKHQsZSxyKXtcbnZhciBuLGksbyxhPUFycmF5KHIpLGY9OCpyLWUtMSxzPSgxPDxmKS0xLHU9cz4+MSxoPTIzPT09ZT9CKDIsLTI0KS1CKDIsLTc3KTowLGM9MCxkPXQ8MHx8MD09PXQmJjEvdDwwPzE6MDtmb3IodD1JKHQpLHQhPXR8fHQ9PT1rPyhpPXQhPXQ/MTowLG49cyk6KG49TyhSKHQpL1ApLHQqKG89QigyLC1uKSk8MSYmKG4tLSxvKj0yKSx0Kz1uK3U+PTE/aC9vOmgqQigyLDEtdSksdCpvPj0yJiYobisrLG8vPTIpLG4rdT49cz8oaT0wLG49cyk6bit1Pj0xPyhpPSh0Km8tMSkqQigyLGUpLG4rPXUpOihpPXQqQigyLHUtMSkqQigyLGUpLG49MCkpO2U+PTg7YVtjKytdPTI1NSZpLGkvPTI1NixlLT04KTtmb3Iobj1uPDxlfGksZis9ZTtmPjA7YVtjKytdPTI1NSZuLG4vPTI1NixmLT04KTtyZXR1cm4gYVstLWNdfD0xMjgqZCxhfSxEPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPTgqci1lLTEsbz0oMTw8aSktMSxhPW8+PjEsZj1pLTcscz1yLTEsdT10W3MtLV0saD0xMjcmdTtmb3IodT4+PTc7Zj4wO2g9MjU2KmgrdFtzXSxzLS0sZi09OCk7Zm9yKG49aCYoMTw8LWYpLTEsaD4+PS1mLGYrPWU7Zj4wO249MjU2Km4rdFtzXSxzLS0sZi09OCk7aWYoMD09PWgpaD0xLWE7ZWxzZXtpZihoPT09bylyZXR1cm4gbj9OYU46dT8tazprO24rPUIoMixlKSxoLT1hfXJldHVybih1Py0xOjEpKm4qQigyLGgtZSl9LHE9ZnVuY3Rpb24odCl7cmV0dXJuIHRbM108PDI0fHRbMl08PDE2fHRbMV08PDh8dFswXX0sRj1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnRdfSxLPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NV19LEc9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0LHQ+PjgmMjU1LHQ+PjE2JjI1NSx0Pj4yNCYyNTVdfSxWPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQsNTIsOCl9LEg9ZnVuY3Rpb24odCl7cmV0dXJuIHoodCwyMyw0KX0sWD1mdW5jdGlvbih0LGUscil7cCh0W2ddLGUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzW3JdfX0pfSxZPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPStyLG89YyhpKTtpZihpIT1vfHxvPDB8fG8rZT50W0xdKXRocm93IEEoXyk7dmFyIGE9dFtOXS5fYixmPW8rdFtVXSxzPWEuc2xpY2UoZixmK2UpO3JldHVybiBuP3M6cy5yZXZlcnNlKCl9LFc9ZnVuY3Rpb24odCxlLHIsbixpLG8pe3ZhciBhPStyLGY9YyhhKTtpZihhIT1mfHxmPDB8fGYrZT50W0xdKXRocm93IEEoXyk7Zm9yKHZhciBzPXRbTl0uX2IsdT1mK3RbVV0saD1uKCtpKSxkPTA7ZDxlO2QrKylzW3UrZF09aFtvP2Q6ZS1kLTFdfSxaPWZ1bmN0aW9uKHQsZSl7aCh0LE0seSk7dmFyIHI9K2Usbj1kKHIpO2lmKHIhPW4pdGhyb3cgQSh3KTtyZXR1cm4gbn07aWYoYS5BQlYpe2lmKCF1KGZ1bmN0aW9uKCl7bmV3IE19KXx8IXUoZnVuY3Rpb24oKXtuZXcgTSguNSl9KSl7TT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHgoWih0aGlzLHQpKX07Zm9yKHZhciBKLCQ9TVtnXT14W2ddLFE9bCh4KSx0dD0wO1EubGVuZ3RoPnR0OykoSj1RW3R0KytdKWluIE18fGYoTSxKLHhbSl0pO298fCgkLmNvbnN0cnVjdG9yPU0pfXZhciBldD1uZXcgUyhuZXcgTSgyKSkscnQ9U1tnXS5zZXRJbnQ4O2V0LnNldEludDgoMCwyMTQ3NDgzNjQ4KSxldC5zZXRJbnQ4KDEsMjE0NzQ4MzY0OSksIWV0LmdldEludDgoMCkmJmV0LmdldEludDgoMSl8fHMoU1tnXSx7c2V0SW50ODpmdW5jdGlvbih0LGUpe3J0LmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7cnQuY2FsbCh0aGlzLHQsZTw8MjQ+PjI0KX19LCEwKX1lbHNlIE09ZnVuY3Rpb24odCl7dmFyIGU9Wih0aGlzLHQpO3RoaXMuX2I9Yi5jYWxsKEFycmF5KGUpLDApLHRoaXNbTF09ZX0sUz1mdW5jdGlvbih0LGUscil7aCh0aGlzLFMsbSksaCh0LE0sbSk7dmFyIG49dFtMXSxpPWMoZSk7aWYoaTwwfHxpPm4pdGhyb3cgQShcIldyb25nIG9mZnNldCFcIik7aWYocj12b2lkIDA9PT1yP24taTpkKHIpLGkrcj5uKXRocm93IEEodyk7dGhpc1tOXT10LHRoaXNbVV09aSx0aGlzW0xdPXJ9LGkmJihYKE0saixcIl9sXCIpLFgoUyxULFwiX2JcIiksWChTLGosXCJfbFwiKSxYKFMsQyxcIl9vXCIpKSxzKFNbZ10se2dldEludDg6ZnVuY3Rpb24odCl7cmV0dXJuIFkodGhpcywxLHQpWzBdPDwyND4+MjR9LGdldFVpbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBZKHRoaXMsMSx0KVswXX0sZ2V0SW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9WSh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybihlWzFdPDw4fGVbMF0pPDwxNj4+MTZ9LGdldFVpbnQxNjpmdW5jdGlvbih0KXt2YXIgZT1ZKHRoaXMsMix0LGFyZ3VtZW50c1sxXSk7cmV0dXJuIGVbMV08PDh8ZVswXX0sZ2V0SW50MzI6ZnVuY3Rpb24odCl7cmV0dXJuIHEoWSh0aGlzLDQsdCxhcmd1bWVudHNbMV0pKX0sZ2V0VWludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBxKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSk+Pj4wfSxnZXRGbG9hdDMyOmZ1bmN0aW9uKHQpe3JldHVybiBEKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSwyMyw0KX0sZ2V0RmxvYXQ2NDpmdW5jdGlvbih0KXtyZXR1cm4gRChZKHRoaXMsOCx0LGFyZ3VtZW50c1sxXSksNTIsOCl9LHNldEludDg6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMSx0LEYsZSl9LHNldFVpbnQ4OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDEsdCxGLGUpfSxzZXRJbnQxNjpmdW5jdGlvbih0LGUpe1codGhpcywyLHQsSyxlLGFyZ3VtZW50c1syXSl9LHNldFVpbnQxNjpmdW5jdGlvbih0LGUpe1codGhpcywyLHQsSyxlLGFyZ3VtZW50c1syXSl9LHNldEludDMyOmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDQsdCxHLGUsYXJndW1lbnRzWzJdKX0sc2V0VWludDMyOmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDQsdCxHLGUsYXJndW1lbnRzWzJdKX0sc2V0RmxvYXQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsSCxlLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0NjQ6ZnVuY3Rpb24odCxlKXtXKHRoaXMsOCx0LFYsZSxhcmd1bWVudHNbMl0pfX0pO3YoTSx5KSx2KFMsbSksZihTW2ddLGEuVklFVywhMCksZVt5XT1NLGVbbV09U30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDMyKSxvPXIoNDEpLGE9cigxODkpLGY9cig5KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1pLlN5bWJvbHx8KGkuU3ltYm9sPW8/e306bi5TeW1ib2x8fHt9KTtcIl9cIj09dC5jaGFyQXQoMCl8fHQgaW4gZXx8ZihlLHQse3ZhbHVlOmEuZih0KX0pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjQpLGk9cig3KShcIml0ZXJhdG9yXCIpLG89cig1Nik7dC5leHBvcnRzPXIoMzIpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKHQpe2lmKHZvaWQgMCE9dClyZXR1cm4gdFtpXXx8dFtcIkBAaXRlcmF0b3JcIl18fG9bbih0KV19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig1NCksaT1yKDE3Nyksbz1yKDU2KSxhPXIoMTcpO3QuZXhwb3J0cz1yKDEyOCkoQXJyYXksXCJBcnJheVwiLGZ1bmN0aW9uKHQsZSl7dGhpcy5fdD1hKHQpLHRoaXMuX2k9MCx0aGlzLl9rPWV9LGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fdCxlPXRoaXMuX2sscj10aGlzLl9pKys7cmV0dXJuIXR8fHI+PXQubGVuZ3RoPyh0aGlzLl90PXZvaWQgMCxpKDEpKTpcImtleXNcIj09ZT9pKDAscik6XCJ2YWx1ZXNcIj09ZT9pKDAsdFtyXSk6aSgwLFtyLHRbcl1dKX0sXCJ2YWx1ZXNcIiksby5Bcmd1bWVudHM9by5BcnJheSxuKFwia2V5c1wiKSxuKFwidmFsdWVzXCIpLG4oXCJlbnRyaWVzXCIpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE5OSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtlLnV0aWxzPXIoNTA1KSxlLkNpcGhlcj1yKDUwMiksZS5ERVM9cig1MDMpLGUuQ0JDPXIoNTAxKSxlLkVERT1yKDUwNCl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe2EuY2FsbCh0aGlzKSx0PXQudG9Mb3dlckNhc2UoKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IGUocikpO3ZhciBuPVwic2hhNTEyXCI9PT10fHxcInNoYTM4NFwiPT09dD8xMjg6NjQ7dGhpcy5fYWxnPXQsdGhpcy5fa2V5PXIsci5sZW5ndGg+bj9yPWkodCkudXBkYXRlKHIpLmRpZ2VzdCgpOnIubGVuZ3RoPG4mJihyPWUuY29uY2F0KFtyLGZdLG4pKTtmb3IodmFyIG89dGhpcy5faXBhZD1uZXcgZShuKSxzPXRoaXMuX29wYWQ9bmV3IGUobiksdT0wO3U8bjt1Kyspb1t1XT01NF5yW3VdLHNbdV09OTJeclt1XTt0aGlzLl9oYXNoPWkodCkudXBkYXRlKG8pfXZhciBpPXIoNTkpLG89cigyKSxhPXIoMzEpLlRyYW5zZm9ybSxmPW5ldyBlKDEyOCk7Zi5maWxsKDApLG8obixhKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5faGFzaC51cGRhdGUodCxlKSx0aGlzfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYXNoLnVwZGF0ZSh0KSxyKCl9LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt0aGlzLnB1c2godGhpcy5kaWdlc3QoKSksdCgpfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faGFzaC5kaWdlc3QoKTtyZXR1cm4gaSh0aGlzLl9hbGcpLnVwZGF0ZSh0aGlzLl9vcGFkKS51cGRhdGUoZSkuZGlnZXN0KHQpfSx0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpeyFmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIGkodCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiBvLmlzQk4odCk/dDoodGhpcy5uZWdhdGl2ZT0wLHRoaXMud29yZHM9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMucmVkPW51bGwsdm9pZChudWxsIT09dCYmKFwibGVcIiE9PWUmJlwiYmVcIiE9PWV8fChyPWUsZT0xMCksdGhpcy5faW5pdCh0fHwwLGV8fDEwLHJ8fFwiYmVcIikpKSl9ZnVuY3Rpb24gYSh0LGUscil7Zm9yKHZhciBuPTAsaT1NYXRoLm1pbih0Lmxlbmd0aCxyKSxvPWU7bzxpO28rKyl7dmFyIGE9dC5jaGFyQ29kZUF0KG8pLTQ4O248PD00LG58PWE+PTQ5JiZhPD01ND9hLTQ5KzEwOmE+PTE3JiZhPD0yMj9hLTE3KzEwOjE1JmF9cmV0dXJuIG59ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLHIpLGE9ZTthPG87YSsrKXt2YXIgZj10LmNoYXJDb2RlQXQoYSktNDg7aSo9bixpKz1mPj00OT9mLTQ5KzEwOmY+PTE3P2YtMTcrMTA6Zn1yZXR1cm4gaX1mdW5jdGlvbiBzKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodC5iaXRMZW5ndGgoKSkscj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1yLzI2fDAsaT1yJTI2O2Vbcl09KHQud29yZHNbbl0mMTw8aSk+Pj5pfXJldHVybiBlfWZ1bmN0aW9uIHUodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlO3ZhciBuPXQubGVuZ3RoK2UubGVuZ3RofDA7ci5sZW5ndGg9bixuPW4tMXwwO3ZhciBpPTB8dC53b3Jkc1swXSxvPTB8ZS53b3Jkc1swXSxhPWkqbyxmPTY3MTA4ODYzJmEscz1hLzY3MTA4ODY0fDA7ci53b3Jkc1swXT1mO2Zvcih2YXIgdT0xO3U8bjt1Kyspe2Zvcih2YXIgaD1zPj4+MjYsYz02NzEwODg2MyZzLGQ9TWF0aC5taW4odSxlLmxlbmd0aC0xKSxsPU1hdGgubWF4KDAsdS10Lmxlbmd0aCsxKTtsPD1kO2wrKyl7dmFyIHA9dS1sfDA7aT0wfHQud29yZHNbcF0sbz0wfGUud29yZHNbbF0sYT1pKm8rYyxoKz1hLzY3MTA4ODY0fDAsYz02NzEwODg2MyZhfXIud29yZHNbdV09MHxjLHM9MHxofXJldHVybiAwIT09cz9yLndvcmRzW3VdPTB8czpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBoKHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aDtmb3IodmFyIG49MCxpPTAsbz0wO288ci5sZW5ndGgtMTtvKyspe3ZhciBhPWk7aT0wO2Zvcih2YXIgZj02NzEwODg2MyZuLHM9TWF0aC5taW4obyxlLmxlbmd0aC0xKSx1PU1hdGgubWF4KDAsby10Lmxlbmd0aCsxKTt1PD1zO3UrKyl7dmFyIGg9by11LGM9MHx0LndvcmRzW2hdLGQ9MHxlLndvcmRzW3VdLGw9YypkLHA9NjcxMDg4NjMmbDthPWErKGwvNjcxMDg4NjR8MCl8MCxwPXArZnwwLGY9NjcxMDg4NjMmcCxhPWErKHA+Pj4yNil8MCxpKz1hPj4+MjYsYSY9NjcxMDg4NjN9ci53b3Jkc1tvXT1mLG49YSxhPWl9cmV0dXJuIDAhPT1uP3Iud29yZHNbb109bjpyLmxlbmd0aC0tLHIuc3RyaXAoKX1mdW5jdGlvbiBjKHQsZSxyKXt2YXIgbj1uZXcgZDtyZXR1cm4gbi5tdWxwKHQsZSxyKX1mdW5jdGlvbiBkKHQsZSl7dGhpcy54PXQsdGhpcy55PWV9ZnVuY3Rpb24gbCh0LGUpe3RoaXMubmFtZT10LHRoaXMucD1uZXcgbyhlLDE2KSx0aGlzLm49dGhpcy5wLmJpdExlbmd0aCgpLHRoaXMuaz1uZXcgbygxKS5pdXNobG4odGhpcy5uKS5pc3ViKHRoaXMucCksdGhpcy50bXA9dGhpcy5fdG1wKCl9ZnVuY3Rpb24gcCgpe2wuY2FsbCh0aGlzLFwiazI1NlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIil9ZnVuY3Rpb24gYigpe2wuY2FsbCh0aGlzLFwicDIyNFwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIil9ZnVuY3Rpb24gdigpe2wuY2FsbCh0aGlzLFwicDE5MlwiLFwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIil9ZnVuY3Rpb24geSgpe2wuY2FsbCh0aGlzLFwiMjU1MTlcIixcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIil9ZnVuY3Rpb24gbSh0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7dmFyIGU9by5fcHJpbWUodCk7dGhpcy5tPWUucCx0aGlzLnByaW1lPWV9ZWxzZSBuKHQuZ3RuKDEpLFwibW9kdWx1cyBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAxXCIpLHRoaXMubT10LHRoaXMucHJpbWU9bnVsbH1mdW5jdGlvbiBnKHQpe20uY2FsbCh0aGlzLHQpLHRoaXMuc2hpZnQ9dGhpcy5tLmJpdExlbmd0aCgpLHRoaXMuc2hpZnQlMjYhPT0wJiYodGhpcy5zaGlmdCs9MjYtdGhpcy5zaGlmdCUyNiksdGhpcy5yPW5ldyBvKDEpLml1c2hsbih0aGlzLnNoaWZ0KSx0aGlzLnIyPXRoaXMuaW1vZCh0aGlzLnIuc3FyKCkpLHRoaXMucmludj10aGlzLnIuX2ludm1wKHRoaXMubSksdGhpcy5taW52PXRoaXMucmludi5tdWwodGhpcy5yKS5pc3VibigxKS5kaXYodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5taW52LnVtb2QodGhpcy5yKSx0aGlzLm1pbnY9dGhpcy5yLnN1Yih0aGlzLm1pbnYpfVwib2JqZWN0XCI9PXR5cGVvZiB0P3QuZXhwb3J0cz1vOmUuQk49byxvLkJOPW8sby53b3JkU2l6ZT0yNjt2YXIgdzt0cnl7dz1yKDEpLkJ1ZmZlcn1jYXRjaCh0KXt9by5pc0JOPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2Ygb3x8bnVsbCE9PXQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yLndvcmRTaXplPT09by53b3JkU2l6ZSYmQXJyYXkuaXNBcnJheSh0LndvcmRzKX0sby5tYXg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk+MD90OmV9LG8ubWluPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPDA/dDplfSxvLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7aWYoXCJudW1iZXJcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXROdW1iZXIodCxlLHIpO2lmKFwib2JqZWN0XCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0QXJyYXkodCxlLHIpO1wiaGV4XCI9PT1lJiYoZT0xNiksbihlPT09KDB8ZSkmJmU+PTImJmU8PTM2KSx0PXQudG9TdHJpbmcoKS5yZXBsYWNlKC9cXHMrL2csXCJcIik7dmFyIGk9MDtcIi1cIj09PXRbMF0mJmkrKywxNj09PWU/dGhpcy5fcGFyc2VIZXgodCxpKTp0aGlzLl9wYXJzZUJhc2UodCxlLGkpLFwiLVwiPT09dFswXSYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdE51bWJlcj1mdW5jdGlvbih0LGUscil7dDwwJiYodGhpcy5uZWdhdGl2ZT0xLHQ9LXQpLHQ8NjcxMDg4NjQ/KHRoaXMud29yZHM9WzY3MTA4ODYzJnRdLHRoaXMubGVuZ3RoPTEpOnQ8NDUwMzU5OTYyNzM3MDQ5Nj8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzXSx0aGlzLmxlbmd0aD0yKToobih0PDkwMDcxOTkyNTQ3NDA5OTIpLHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2MywxXSx0aGlzLmxlbmd0aD0zKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXRBcnJheT1mdW5jdGlvbih0LGUscil7aWYobihcIm51bWJlclwiPT10eXBlb2YgdC5sZW5ndGgpLHQubGVuZ3RoPD0wKXJldHVybiB0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xLHRoaXM7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKHQubGVuZ3RoLzMpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGk9MDtpPHRoaXMubGVuZ3RoO2krKyl0aGlzLndvcmRzW2ldPTA7dmFyIG8sYSxmPTA7aWYoXCJiZVwiPT09cilmb3IoaT10Lmxlbmd0aC0xLG89MDtpPj0wO2ktPTMpYT10W2ldfHRbaS0xXTw8OHx0W2ktMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtlbHNlIGlmKFwibGVcIj09PXIpZm9yKGk9MCxvPTA7aTx0Lmxlbmd0aDtpKz0zKWE9dFtpXXx0W2krMV08PDh8dFtpKzJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlSGV4PWZ1bmN0aW9uKHQsZSl7dGhpcy5sZW5ndGg9TWF0aC5jZWlsKCh0Lmxlbmd0aC1lKS82KSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciByPTA7cjx0aGlzLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT0wO3ZhciBuLGksbz0wO2ZvcihyPXQubGVuZ3RoLTYsbj0wO3I+PWU7ci09NilpPWEodCxyLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMsbys9MjQsbz49MjYmJihvLT0yNixuKyspO3IrNiE9PWUmJihpPWEodCxlLHIrNiksdGhpcy53b3Jkc1tuXXw9aTw8byY2NzEwODg2Myx0aGlzLndvcmRzW24rMV18PWk+Pj4yNi1vJjQxOTQzMDMpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3BhcnNlQmFzZT1mdW5jdGlvbih0LGUscil7dGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MTtmb3IodmFyIG49MCxpPTE7aTw9NjcxMDg4NjM7aSo9ZSluKys7bi0tLGk9aS9lfDA7Zm9yKHZhciBvPXQubGVuZ3RoLXIsYT1vJW4scz1NYXRoLm1pbihvLG8tYSkrcix1PTAsaD1yO2g8cztoKz1uKXU9Zih0LGgsaCtuLGUpLHRoaXMuaW11bG4oaSksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSk7aWYoMCE9PWEpe3ZhciBjPTE7Zm9yKHU9Zih0LGgsdC5sZW5ndGgsZSksaD0wO2g8YTtoKyspYyo9ZTt0aGlzLmltdWxuKGMpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpfX0sby5wcm90b3R5cGUuY29weT1mdW5jdGlvbih0KXt0LndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aDtlKyspdC53b3Jkc1tlXT10aGlzLndvcmRzW2VdO3QubGVuZ3RoPXRoaXMubGVuZ3RoLHQubmVnYXRpdmU9dGhpcy5uZWdhdGl2ZSx0LnJlZD10aGlzLnJlZH0sby5wcm90b3R5cGUuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdGhpcy5jb3B5KHQpLHR9LG8ucHJvdG90eXBlLl9leHBhbmQ9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Oyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLnN0cmlwPWZ1bmN0aW9uKCl7Zm9yKDt0aGlzLmxlbmd0aD4xJiYwPT09dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXTspdGhpcy5sZW5ndGgtLTtyZXR1cm4gdGhpcy5fbm9ybVNpZ24oKX0sby5wcm90b3R5cGUuX25vcm1TaWduPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF0mJih0aGlzLm5lZ2F0aXZlPTApLHRoaXN9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4odGhpcy5yZWQ/XCI8Qk4tUjogXCI6XCI8Qk46IFwiKSt0aGlzLnRvU3RyaW5nKDE2KStcIj5cIn07dmFyIF89W1wiXCIsXCIwXCIsXCIwMFwiLFwiMDAwXCIsXCIwMDAwXCIsXCIwMDAwMFwiLFwiMDAwMDAwXCIsXCIwMDAwMDAwXCIsXCIwMDAwMDAwMFwiLFwiMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCJdLE09WzAsMCwyNSwxNiwxMiwxMSwxMCw5LDgsOCw3LDcsNyw3LDYsNiw2LDYsNiw2LDYsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNV0sUz1bMCwwLDMzNTU0NDMyLDQzMDQ2NzIxLDE2Nzc3MjE2LDQ4ODI4MTI1LDYwNDY2MTc2LDQwMzUzNjA3LDE2Nzc3MjE2LDQzMDQ2NzIxLDFlNywxOTQ4NzE3MSwzNTgzMTgwOCw2Mjc0ODUxNyw3NTI5NTM2LDExMzkwNjI1LDE2Nzc3MjE2LDI0MTM3NTY5LDM0MDEyMjI0LDQ3MDQ1ODgxLDY0ZTYsNDA4NDEwMSw1MTUzNjMyLDY0MzYzNDMsNzk2MjYyNCw5NzY1NjI1LDExODgxMzc2LDE0MzQ4OTA3LDE3MjEwMzY4LDIwNTExMTQ5LDI0M2U1LDI4NjI5MTUxLDMzNTU0NDMyLDM5MTM1MzkzLDQ1NDM1NDI0LDUyNTIxODc1LDYwNDY2MTc2XTtvLnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbih0LGUpe3Q9dHx8MTAsZT0wfGV8fDE7dmFyIHI7aWYoMTY9PT10fHxcImhleFwiPT09dCl7cj1cIlwiO2Zvcih2YXIgaT0wLG89MCxhPTA7YTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPXRoaXMud29yZHNbYV0scz0oMTY3NzcyMTUmKGY8PGl8bykpLnRvU3RyaW5nKDE2KTtvPWY+Pj4yNC1pJjE2Nzc3MjE1LHI9MCE9PW98fGEhPT10aGlzLmxlbmd0aC0xP19bNi1zLmxlbmd0aF0rcytyOnMrcixpKz0yLGk+PTI2JiYoaS09MjYsYS0tKX1mb3IoMCE9PW8mJihyPW8udG9TdHJpbmcoMTYpK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfWlmKHQ9PT0oMHx0KSYmdD49MiYmdDw9MzYpe3ZhciB1PU1bdF0saD1TW3RdO3I9XCJcIjt2YXIgYz10aGlzLmNsb25lKCk7Zm9yKGMubmVnYXRpdmU9MDshYy5pc1plcm8oKTspe3ZhciBkPWMubW9kbihoKS50b1N0cmluZyh0KTtjPWMuaWRpdm4oaCkscj1jLmlzWmVybygpP2QrcjpfW3UtZC5sZW5ndGhdK2Qrcn1mb3IodGhpcy5pc1plcm8oKSYmKHI9XCIwXCIrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9bighMSxcIkJhc2Ugc2hvdWxkIGJlIGJldHdlZW4gMiBhbmQgMzZcIil9LG8ucHJvdG90eXBlLnRvTnVtYmVyPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1swXTtyZXR1cm4gMj09PXRoaXMubGVuZ3RoP3QrPTY3MTA4ODY0KnRoaXMud29yZHNbMV06Mz09PXRoaXMubGVuZ3RoJiYxPT09dGhpcy53b3Jkc1syXT90Kz00NTAzNTk5NjI3MzcwNDk2KzY3MTA4ODY0KnRoaXMud29yZHNbMV06dGhpcy5sZW5ndGg+MiYmbighMSxcIk51bWJlciBjYW4gb25seSBzYWZlbHkgc3RvcmUgdXAgdG8gNTMgYml0c1wiKSwwIT09dGhpcy5uZWdhdGl2ZT8tdDp0fSxvLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50b1N0cmluZygxNil9LG8ucHJvdG90eXBlLnRvQnVmZmVyPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHcpLHRoaXMudG9BcnJheUxpa2Uodyx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudG9BcnJheUxpa2UoQXJyYXksdCxlKX0sby5wcm90b3R5cGUudG9BcnJheUxpa2U9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPXRoaXMuYnl0ZUxlbmd0aCgpLG89cnx8TWF0aC5tYXgoMSxpKTtuKGk8PW8sXCJieXRlIGFycmF5IGxvbmdlciB0aGFuIGRlc2lyZWQgbGVuZ3RoXCIpLG4obz4wLFwiUmVxdWVzdGVkIGFycmF5IGxlbmd0aCA8PSAwXCIpLHRoaXMuc3RyaXAoKTt2YXIgYSxmLHM9XCJsZVwiPT09ZSx1PW5ldyB0KG8pLGg9dGhpcy5jbG9uZSgpO2lmKHMpe2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbZl09YTtmb3IoO2Y8bztmKyspdVtmXT0wfWVsc2V7Zm9yKGY9MDtmPG8taTtmKyspdVtmXT0wO2ZvcihmPTA7IWguaXNaZXJvKCk7ZisrKWE9aC5hbmRsbigyNTUpLGguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksXG5sIT09ZiYmKG09cypjLXUqZCxkPXMqZCt1KmMsYz1tKX19LGQucHJvdG90eXBlLmd1ZXNzTGVuMTNiPWZ1bmN0aW9uKHQsZSl7dmFyIHI9MXxNYXRoLm1heChlLHQpLG49MSZyLGk9MDtmb3Iocj1yLzJ8MDtyO3I+Pj49MSlpKys7cmV0dXJuIDE8PGkrMStufSxkLnByb3RvdHlwZS5jb25qdWdhdGU9ZnVuY3Rpb24odCxlLHIpe2lmKCEocjw9MSkpZm9yKHZhciBuPTA7bjxyLzI7bisrKXt2YXIgaT10W25dO3Rbbl09dFtyLW4tMV0sdFtyLW4tMV09aSxpPWVbbl0sZVtuXT0tZVtyLW4tMV0sZVtyLW4tMV09LWl9fSxkLnByb3RvdHlwZS5ub3JtYWxpemUxM2I9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxuPTA7bjxlLzI7bisrKXt2YXIgaT04MTkyKk1hdGgucm91bmQodFsyKm4rMV0vZSkrTWF0aC5yb3VuZCh0WzIqbl0vZSkrcjt0W25dPTY3MTA4ODYzJmkscj1pPDY3MTA4ODY0PzA6aS82NzEwODg2NHwwfXJldHVybiB0fSxkLnByb3RvdHlwZS5jb252ZXJ0MTNiPWZ1bmN0aW9uKHQsZSxyLGkpe2Zvcih2YXIgbz0wLGE9MDthPGU7YSsrKW8rPTB8dFthXSxyWzIqYV09ODE5MSZvLG8+Pj49MTMsclsyKmErMV09ODE5MSZvLG8+Pj49MTM7Zm9yKGE9MiplO2E8aTsrK2EpclthXT0wO24oMD09PW8pLG4oMD09PShvJi04MTkyKSl9LGQucHJvdG90eXBlLnN0dWI9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPTA7cjx0O3IrKyllW3JdPTA7cmV0dXJuIGV9LGQucHJvdG90eXBlLm11bHA9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTIqdGhpcy5ndWVzc0xlbjEzYih0Lmxlbmd0aCxlLmxlbmd0aCksaT10aGlzLm1ha2VSQlQobiksbz10aGlzLnN0dWIobiksYT1uZXcgQXJyYXkobiksZj1uZXcgQXJyYXkobikscz1uZXcgQXJyYXkobiksdT1uZXcgQXJyYXkobiksaD1uZXcgQXJyYXkobiksYz1uZXcgQXJyYXkobiksZD1yLndvcmRzO2QubGVuZ3RoPW4sdGhpcy5jb252ZXJ0MTNiKHQud29yZHMsdC5sZW5ndGgsYSxuKSx0aGlzLmNvbnZlcnQxM2IoZS53b3JkcyxlLmxlbmd0aCx1LG4pLHRoaXMudHJhbnNmb3JtKGEsbyxmLHMsbixpKSx0aGlzLnRyYW5zZm9ybSh1LG8saCxjLG4saSk7Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIHA9ZltsXSpoW2xdLXNbbF0qY1tsXTtzW2xdPWZbbF0qY1tsXStzW2xdKmhbbF0sZltsXT1wfXJldHVybiB0aGlzLmNvbmp1Z2F0ZShmLHMsbiksdGhpcy50cmFuc2Zvcm0oZixzLGQsbyxuLGkpLHRoaXMuY29uanVnYXRlKGQsbyxuKSx0aGlzLm5vcm1hbGl6ZTEzYihkLG4pLHIubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoLHIuc3RyaXAoKX0sby5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksdGhpcy5tdWxUbyh0LGUpfSxvLnByb3RvdHlwZS5tdWxmPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBvKG51bGwpO3JldHVybiBlLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCt0Lmxlbmd0aCksYyh0aGlzLHQsZSl9LG8ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5tdWxUbyh0LHRoaXMpfSxvLnByb3RvdHlwZS5pbXVsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpO2Zvcih2YXIgZT0wLHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkqdCxvPSg2NzEwODg2MyZpKSsoNjcxMDg4NjMmZSk7ZT4+PTI2LGUrPWkvNjcxMDg4NjR8MCxlKz1vPj4+MjYsdGhpcy53b3Jkc1tyXT02NzEwODg2MyZvfXJldHVybiAwIT09ZSYmKHRoaXMud29yZHNbcl09ZSx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5tdWxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW11bG4odCl9LG8ucHJvdG90eXBlLnNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLm11bCh0aGlzKX0sby5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbigpe3JldHVybiB0aGlzLmltdWwodGhpcy5jbG9uZSgpKX0sby5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQpe3ZhciBlPXModCk7aWYoMD09PWUubGVuZ3RoKXJldHVybiBuZXcgbygxKTtmb3IodmFyIHI9dGhpcyxuPTA7bjxlLmxlbmd0aCYmMD09PWVbbl07bisrLHI9ci5zcXIoKSk7aWYoKytuPGUubGVuZ3RoKWZvcih2YXIgaT1yLnNxcigpO248ZS5sZW5ndGg7bisrLGk9aS5zcXIoKSkwIT09ZVtuXSYmKHI9ci5tdWwoaSkpO3JldHVybiByfSxvLnByb3RvdHlwZS5pdXNobG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGUscj10JTI2LGk9KHQtcikvMjYsbz02NzEwODg2Mz4+PjI2LXI8PDI2LXI7aWYoMCE9PXIpe3ZhciBhPTA7Zm9yKGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIGY9dGhpcy53b3Jkc1tlXSZvLHM9KDB8dGhpcy53b3Jkc1tlXSktZjw8cjt0aGlzLndvcmRzW2VdPXN8YSxhPWY+Pj4yNi1yfWEmJih0aGlzLndvcmRzW2VdPWEsdGhpcy5sZW5ndGgrKyl9aWYoMCE9PWkpe2ZvcihlPXRoaXMubGVuZ3RoLTE7ZT49MDtlLS0pdGhpcy53b3Jkc1tlK2ldPXRoaXMud29yZHNbZV07Zm9yKGU9MDtlPGk7ZSsrKXRoaXMud29yZHNbZV09MDt0aGlzLmxlbmd0aCs9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNobG4odCl9LG8ucHJvdG90eXBlLml1c2hybj1mdW5jdGlvbih0LGUscil7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGk7aT1lPyhlLWUlMjYpLzI2OjA7dmFyIG89dCUyNixhPU1hdGgubWluKCh0LW8pLzI2LHRoaXMubGVuZ3RoKSxmPTY3MTA4ODYzXjY3MTA4ODYzPj4+bzw8byxzPXI7aWYoaS09YSxpPU1hdGgubWF4KDAsaSkscyl7Zm9yKHZhciB1PTA7dTxhO3UrKylzLndvcmRzW3VdPXRoaXMud29yZHNbdV07cy5sZW5ndGg9YX1pZigwPT09YSk7ZWxzZSBpZih0aGlzLmxlbmd0aD5hKWZvcih0aGlzLmxlbmd0aC09YSx1PTA7dTx0aGlzLmxlbmd0aDt1KyspdGhpcy53b3Jkc1t1XT10aGlzLndvcmRzW3UrYV07ZWxzZSB0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MTt2YXIgaD0wO2Zvcih1PXRoaXMubGVuZ3RoLTE7dT49MCYmKDAhPT1ofHx1Pj1pKTt1LS0pe3ZhciBjPTB8dGhpcy53b3Jkc1t1XTt0aGlzLndvcmRzW3VdPWg8PDI2LW98Yz4+Pm8saD1jJmZ9cmV0dXJuIHMmJjAhPT1oJiYocy53b3Jkc1tzLmxlbmd0aCsrXT1oKSwwPT09dGhpcy5sZW5ndGgmJih0aGlzLndvcmRzWzBdPTAsdGhpcy5sZW5ndGg9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pc2hybj1mdW5jdGlvbih0LGUscil7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaHJuKHQsZSxyKX0sby5wcm90b3R5cGUuc2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaGxuKHQpfSxvLnByb3RvdHlwZS51c2hsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hsbih0KX0sby5wcm90b3R5cGUuc2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzaHJuKHQpfSxvLnByb3RvdHlwZS51c2hybj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLml1c2hybih0KX0sby5wcm90b3R5cGUudGVzdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4hMTt2YXIgbz10aGlzLndvcmRzW3JdO3JldHVybiEhKG8maSl9LG8ucHJvdG90eXBlLmltYXNrbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjY7aWYobigwPT09dGhpcy5uZWdhdGl2ZSxcImltYXNrbiB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmUgbnVtYmVyc1wiKSx0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcztpZigwIT09ZSYmcisrLHRoaXMubGVuZ3RoPU1hdGgubWluKHIsdGhpcy5sZW5ndGgpLDAhPT1lKXt2YXIgaT02NzEwODg2M142NzEwODg2Mz4+PmU8PGU7dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSY9aX1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5tYXNrbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltYXNrbih0KX0sby5wcm90b3R5cGUuaWFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwP3RoaXMuaXN1Ym4oLXQpOjAhPT10aGlzLm5lZ2F0aXZlPzE9PT10aGlzLmxlbmd0aCYmKDB8dGhpcy53b3Jkc1swXSk8dD8odGhpcy53b3Jkc1swXT10LSgwfHRoaXMud29yZHNbMF0pLHRoaXMubmVnYXRpdmU9MCx0aGlzKToodGhpcy5uZWdhdGl2ZT0wLHRoaXMuaXN1Ym4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMpOnRoaXMuX2lhZGRuKHQpfSxvLnByb3RvdHlwZS5faWFkZG49ZnVuY3Rpb24odCl7dGhpcy53b3Jkc1swXSs9dDtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPj02NzEwODg2NDtlKyspdGhpcy53b3Jkc1tlXS09NjcxMDg4NjQsZT09PXRoaXMubGVuZ3RoLTE/dGhpcy53b3Jkc1tlKzFdPTE6dGhpcy53b3Jkc1tlKzFdKys7cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGUrMSksdGhpc30sby5wcm90b3R5cGUuaXN1Ym49ZnVuY3Rpb24odCl7aWYobihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDApcmV0dXJuIHRoaXMuaWFkZG4oLXQpO2lmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkbih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcztpZih0aGlzLndvcmRzWzBdLT10LDE9PT10aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1swXTwwKXRoaXMud29yZHNbMF09LXRoaXMud29yZHNbMF0sdGhpcy5uZWdhdGl2ZT0xO2Vsc2UgZm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXTwwO2UrKyl0aGlzLndvcmRzW2VdKz02NzEwODg2NCx0aGlzLndvcmRzW2UrMV0tPTE7cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhZGRuKHQpfSxvLnByb3RvdHlwZS5zdWJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Ym4odCl9LG8ucHJvdG90eXBlLmlhYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXN9LG8ucHJvdG90eXBlLmFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaWFicygpfSxvLnByb3RvdHlwZS5faXNobG5zdWJtdWw9ZnVuY3Rpb24odCxlLHIpe3ZhciBpLG89dC5sZW5ndGgrcjt0aGlzLl9leHBhbmQobyk7dmFyIGEsZj0wO2ZvcihpPTA7aTx0Lmxlbmd0aDtpKyspe2E9KDB8dGhpcy53b3Jkc1tpK3JdKStmO3ZhciBzPSgwfHQud29yZHNbaV0pKmU7YS09NjcxMDg4NjMmcyxmPShhPj4yNiktKHMvNjcxMDg4NjR8MCksdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmF9Zm9yKDtpPHRoaXMubGVuZ3RoLXI7aSsrKWE9KDB8dGhpcy53b3Jkc1tpK3JdKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpK3JdPTY3MTA4ODYzJmE7aWYoMD09PWYpcmV0dXJuIHRoaXMuc3RyaXAoKTtmb3IobihmPT09LTEpLGY9MCxpPTA7aTx0aGlzLmxlbmd0aDtpKyspYT0tKDB8dGhpcy53b3Jkc1tpXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaV09NjcxMDg4NjMmYTtyZXR1cm4gdGhpcy5uZWdhdGl2ZT0xLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuX3dvcmREaXY9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmxlbmd0aC10Lmxlbmd0aCxuPXRoaXMuY2xvbmUoKSxpPXQsYT0wfGkud29yZHNbaS5sZW5ndGgtMV0sZj10aGlzLl9jb3VudEJpdHMoYSk7cj0yNi1mLDAhPT1yJiYoaT1pLnVzaGxuKHIpLG4uaXVzaGxuKHIpLGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdKTt2YXIgcyx1PW4ubGVuZ3RoLWkubGVuZ3RoO2lmKFwibW9kXCIhPT1lKXtzPW5ldyBvKG51bGwpLHMubGVuZ3RoPXUrMSxzLndvcmRzPW5ldyBBcnJheShzLmxlbmd0aCk7Zm9yKHZhciBoPTA7aDxzLmxlbmd0aDtoKyspcy53b3Jkc1toXT0wfXZhciBjPW4uY2xvbmUoKS5faXNobG5zdWJtdWwoaSwxLHUpOzA9PT1jLm5lZ2F0aXZlJiYobj1jLHMmJihzLndvcmRzW3VdPTEpKTtmb3IodmFyIGQ9dS0xO2Q+PTA7ZC0tKXt2YXIgbD02NzEwODg2NCooMHxuLndvcmRzW2kubGVuZ3RoK2RdKSsoMHxuLndvcmRzW2kubGVuZ3RoK2QtMV0pO2ZvcihsPU1hdGgubWluKGwvYXwwLDY3MTA4ODYzKSxuLl9pc2hsbnN1Ym11bChpLGwsZCk7MCE9PW4ubmVnYXRpdmU7KWwtLSxuLm5lZ2F0aXZlPTAsbi5faXNobG5zdWJtdWwoaSwxLGQpLG4uaXNaZXJvKCl8fChuLm5lZ2F0aXZlXj0xKTtzJiYocy53b3Jkc1tkXT1sKX1yZXR1cm4gcyYmcy5zdHJpcCgpLG4uc3RyaXAoKSxcImRpdlwiIT09ZSYmMCE9PXImJm4uaXVzaHJuKHIpLHtkaXY6c3x8bnVsbCxtb2Q6bn19LG8ucHJvdG90eXBlLmRpdm1vZD1mdW5jdGlvbih0LGUscil7aWYobighdC5pc1plcm8oKSksdGhpcy5pc1plcm8oKSlyZXR1cm57ZGl2Om5ldyBvKDApLG1vZDpuZXcgbygwKX07dmFyIGksYSxmO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmU/KGY9dGhpcy5uZWcoKS5kaXZtb2QodCxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pYWRkKHQpKSx7ZGl2OmksbW9kOmF9KTowPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmU/KGY9dGhpcy5kaXZtb2QodC5uZWcoKSxlKSxcIm1vZFwiIT09ZSYmKGk9Zi5kaXYubmVnKCkpLHtkaXY6aSxtb2Q6Zi5tb2R9KTowIT09KHRoaXMubmVnYXRpdmUmdC5uZWdhdGl2ZSk/KGY9dGhpcy5uZWcoKS5kaXZtb2QodC5uZWcoKSxlKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaXN1Yih0KSkse2RpdjpmLmRpdixtb2Q6YX0pOnQubGVuZ3RoPnRoaXMubGVuZ3RofHx0aGlzLmNtcCh0KTwwP3tkaXY6bmV3IG8oMCksbW9kOnRoaXN9OjE9PT10Lmxlbmd0aD9cImRpdlwiPT09ZT97ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bnVsbH06XCJtb2RcIj09PWU/e2RpdjpudWxsLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp7ZGl2OnRoaXMuZGl2bih0LndvcmRzWzBdKSxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06dGhpcy5fd29yZERpdih0LGUpfSxvLnByb3RvdHlwZS5kaXY9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJkaXZcIiwhMSkuZGl2fSxvLnByb3RvdHlwZS5tb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMSkubW9kfSxvLnByb3RvdHlwZS51bW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITApLm1vZH0sby5wcm90b3R5cGUuZGl2Um91bmQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5kaXZtb2QodCk7aWYoZS5tb2QuaXNaZXJvKCkpcmV0dXJuIGUuZGl2O3ZhciByPTAhPT1lLmRpdi5uZWdhdGl2ZT9lLm1vZC5pc3ViKHQpOmUubW9kLG49dC51c2hybigxKSxpPXQuYW5kbG4oMSksbz1yLmNtcChuKTtyZXR1cm4gbzwwfHwxPT09aSYmMD09PW8/ZS5kaXY6MCE9PWUuZGl2Lm5lZ2F0aXZlP2UuZGl2LmlzdWJuKDEpOmUuZGl2LmlhZGRuKDEpfSxvLnByb3RvdHlwZS5tb2RuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0oMTw8MjYpJXQscj0wLGk9dGhpcy5sZW5ndGgtMTtpPj0wO2ktLSlyPShlKnIrKDB8dGhpcy53b3Jkc1tpXSkpJXQ7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmlkaXZuPWZ1bmN0aW9uKHQpe24odDw9NjcxMDg4NjMpO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIGk9KDB8dGhpcy53b3Jkc1tyXSkrNjcxMDg4NjQqZTt0aGlzLndvcmRzW3JdPWkvdHwwLGU9aSV0fXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmRpdm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pZGl2bih0KX0sby5wcm90b3R5cGUuZWdjZD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPW5ldyBvKDApLHM9bmV3IG8oMSksdT0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7KWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpLCsrdTtmb3IodmFyIGg9ci5jbG9uZSgpLGM9ZS5jbG9uZSgpOyFlLmlzWmVybygpOyl7Zm9yKHZhciBkPTAsbD0xOzA9PT0oZS53b3Jkc1swXSZsKSYmZDwyNjsrK2QsbDw8PTEpO2lmKGQ+MClmb3IoZS5pdXNocm4oZCk7ZC0tID4wOykoaS5pc09kZCgpfHxhLmlzT2RkKCkpJiYoaS5pYWRkKGgpLGEuaXN1YihjKSksaS5pdXNocm4oMSksYS5pdXNocm4oMSk7Zm9yKHZhciBwPTAsYj0xOzA9PT0oci53b3Jkc1swXSZiKSYmcDwyNjsrK3AsYjw8PTEpO2lmKHA+MClmb3Ioci5pdXNocm4ocCk7cC0tID4wOykoZi5pc09kZCgpfHxzLmlzT2RkKCkpJiYoZi5pYWRkKGgpLHMuaXN1YihjKSksZi5pdXNocm4oMSkscy5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoZiksYS5pc3ViKHMpKTooci5pc3ViKGUpLGYuaXN1YihpKSxzLmlzdWIoYSkpfXJldHVybnthOmYsYjpzLGdjZDpyLml1c2hsbih1KX19LG8ucHJvdG90eXBlLl9pbnZtcD1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlKSxuKCF0LmlzWmVybygpKTt2YXIgZT10aGlzLHI9dC5jbG9uZSgpO2U9MCE9PWUubmVnYXRpdmU/ZS51bW9kKHQpOmUuY2xvbmUoKTtmb3IodmFyIGk9bmV3IG8oMSksYT1uZXcgbygwKSxmPXIuY2xvbmUoKTtlLmNtcG4oMSk+MCYmci5jbXBuKDEpPjA7KXtmb3IodmFyIHM9MCx1PTE7MD09PShlLndvcmRzWzBdJnUpJiZzPDI2Oysrcyx1PDw9MSk7aWYocz4wKWZvcihlLml1c2hybihzKTtzLS0gPjA7KWkuaXNPZGQoKSYmaS5pYWRkKGYpLGkuaXVzaHJuKDEpO2Zvcih2YXIgaD0wLGM9MTswPT09KHIud29yZHNbMF0mYykmJmg8MjY7KytoLGM8PD0xKTtpZihoPjApZm9yKHIuaXVzaHJuKGgpO2gtLSA+MDspYS5pc09kZCgpJiZhLmlhZGQoZiksYS5pdXNocm4oMSk7ZS5jbXAocik+PTA/KGUuaXN1YihyKSxpLmlzdWIoYSkpOihyLmlzdWIoZSksYS5pc3ViKGkpKX12YXIgZDtyZXR1cm4gZD0wPT09ZS5jbXBuKDEpP2k6YSxkLmNtcG4oMCk8MCYmZC5pYWRkKHQpLGR9LG8ucHJvdG90eXBlLmdjZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzWmVybygpKXJldHVybiB0LmFicygpO2lmKHQuaXNaZXJvKCkpcmV0dXJuIHRoaXMuYWJzKCk7dmFyIGU9dGhpcy5jbG9uZSgpLHI9dC5jbG9uZSgpO2UubmVnYXRpdmU9MCxyLm5lZ2F0aXZlPTA7Zm9yKHZhciBuPTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTtuKyspZS5pdXNocm4oMSksci5pdXNocm4oMSk7Zm9yKDs7KXtmb3IoO2UuaXNFdmVuKCk7KWUuaXVzaHJuKDEpO2Zvcig7ci5pc0V2ZW4oKTspci5pdXNocm4oMSk7dmFyIGk9ZS5jbXAocik7aWYoaTwwKXt2YXIgbz1lO2U9cixyPW99ZWxzZSBpZigwPT09aXx8MD09PXIuY21wbigxKSlicmVhaztlLmlzdWIocil9cmV0dXJuIHIuaXVzaGxuKG4pfSxvLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVnY2QodCkuYS51bW9kKHQpfSxvLnByb3RvdHlwZS5pc0V2ZW49ZnVuY3Rpb24oKXtyZXR1cm4gMD09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5pc09kZD1mdW5jdGlvbigpe3JldHVybiAxPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmFuZGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLndvcmRzWzBdJnR9LG8ucHJvdG90eXBlLmJpbmNuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLHRoaXMud29yZHNbcl18PWksdGhpcztmb3IodmFyIG89aSxhPXI7MCE9PW8mJmE8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj0wfHRoaXMud29yZHNbYV07Zis9byxvPWY+Pj4yNixmJj02NzEwODg2Myx0aGlzLndvcmRzW2FdPWZ9cmV0dXJuIDAhPT1vJiYodGhpcy53b3Jkc1thXT1vLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLmlzWmVybz1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdfSxvLnByb3RvdHlwZS5jbXBuPWZ1bmN0aW9uKHQpe3ZhciBlPXQ8MDtpZigwIT09dGhpcy5uZWdhdGl2ZSYmIWUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJmUpcmV0dXJuIDE7dGhpcy5zdHJpcCgpO3ZhciByO2lmKHRoaXMubGVuZ3RoPjEpcj0xO2Vsc2V7ZSYmKHQ9LXQpLG4odDw9NjcxMDg4NjMsXCJOdW1iZXIgaXMgdG9vIGJpZ1wiKTt2YXIgaT0wfHRoaXMud29yZHNbMF07cj1pPT09dD8wOmk8dD8tMToxfXJldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1yOnJ9LG8ucHJvdG90eXBlLmNtcD1mdW5jdGlvbih0KXtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuLTE7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiAxO3ZhciBlPXRoaXMudWNtcCh0KTtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtZTplfSxvLnByb3RvdHlwZS51Y21wPWZ1bmN0aW9uKHQpe2lmKHRoaXMubGVuZ3RoPnQubGVuZ3RoKXJldHVybiAxO2lmKHRoaXMubGVuZ3RoPHQubGVuZ3RoKXJldHVybi0xO2Zvcih2YXIgZT0wLHI9dGhpcy5sZW5ndGgtMTtyPj0wO3ItLSl7dmFyIG49MHx0aGlzLndvcmRzW3JdLGk9MHx0LndvcmRzW3JdO2lmKG4hPT1pKXtuPGk/ZT0tMTpuPmkmJihlPTEpO2JyZWFrfX1yZXR1cm4gZX0sby5wcm90b3R5cGUuZ3RuPWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5ndD1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wKHQpfSxvLnByb3RvdHlwZS5ndGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk+PTB9LG8ucHJvdG90eXBlLmd0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk+PTB9LG8ucHJvdG90eXBlLmx0bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT09PS0xfSxvLnByb3RvdHlwZS5sdGVuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk8PTB9LG8ucHJvdG90eXBlLmx0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk8PTB9LG8ucHJvdG90eXBlLmVxbj1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcCh0KX0sby5yZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBtKHQpfSxvLnByb3RvdHlwZS50b1JlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLG4oMD09PXRoaXMubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSx0LmNvbnZlcnRUbyh0aGlzKS5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLmZyb21SZWQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcImZyb21SZWQgd29ya3Mgb25seSB3aXRoIG51bWJlcnMgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5yZWQuY29udmVydEZyb20odGhpcyl9LG8ucHJvdG90eXBlLl9mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWQ9dCx0aGlzfSxvLnByb3RvdHlwZS5mb3JjZVJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbighdGhpcy5yZWQsXCJBbHJlYWR5IGEgbnVtYmVyIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5yZWRBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSUFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaWFkZCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuaXN1Yih0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTaGw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTaGwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLnNobCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQubXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElNdWw9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRNdWwgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkyKHRoaXMsdCksdGhpcy5yZWQuaW11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pc3FyKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRTcXJ0PWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXJ0IHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXJ0KHRoaXMpfSxvLnByb3RvdHlwZS5yZWRJbnZtPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJbnZtIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5pbnZtKHRoaXMpfSxvLnByb3RvdHlwZS5yZWROZWc9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE5lZyB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQubmVnKHRoaXMpfSxvLnByb3RvdHlwZS5yZWRQb3c9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQmJiF0LnJlZCxcInJlZFBvdyhub3JtYWxOdW0pXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnBvdyh0aGlzLHQpfTt2YXIgQT17azI1NjpudWxsLHAyMjQ6bnVsbCxwMTkyOm51bGwscDI1NTE5Om51bGx9O2wucHJvdG90eXBlLl90bXA9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbyhudWxsKTtyZXR1cm4gdC53b3Jkcz1uZXcgQXJyYXkoTWF0aC5jZWlsKHRoaXMubi8xMykpLHR9LGwucHJvdG90eXBlLmlyZWR1Y2U9ZnVuY3Rpb24odCl7dmFyIGUscj10O2RvIHRoaXMuc3BsaXQocix0aGlzLnRtcCkscj10aGlzLmltdWxLKHIpLHI9ci5pYWRkKHRoaXMudG1wKSxlPXIuYml0TGVuZ3RoKCk7d2hpbGUoZT50aGlzLm4pO3ZhciBuPWU8dGhpcy5uPy0xOnIudWNtcCh0aGlzLnApO3JldHVybiAwPT09bj8oci53b3Jkc1swXT0wLHIubGVuZ3RoPTEpOm4+MD9yLmlzdWIodGhpcy5wKTpyLnN0cmlwKCkscn0sbC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXt0Lml1c2hybih0aGlzLm4sMCxlKX0sbC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaW11bCh0aGlzLmspfSxpKHAsbCkscC5wcm90b3R5cGUuc3BsaXQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9NDE5NDMwMyxuPU1hdGgubWluKHQubGVuZ3RoLDkpLGk9MDtpPG47aSsrKWUud29yZHNbaV09dC53b3Jkc1tpXTtpZihlLmxlbmd0aD1uLHQubGVuZ3RoPD05KXJldHVybiB0LndvcmRzWzBdPTAsdm9pZCh0Lmxlbmd0aD0xKTt2YXIgbz10LndvcmRzWzldO2ZvcihlLndvcmRzW2UubGVuZ3RoKytdPW8mcixpPTEwO2k8dC5sZW5ndGg7aSsrKXt2YXIgYT0wfHQud29yZHNbaV07dC53b3Jkc1tpLTEwXT0oYSZyKTw8NHxvPj4+MjIsbz1hfW8+Pj49MjIsdC53b3Jkc1tpLTEwXT1vLDA9PT1vJiZ0Lmxlbmd0aD4xMD90Lmxlbmd0aC09MTA6dC5sZW5ndGgtPTl9LHAucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3Qud29yZHNbdC5sZW5ndGhdPTAsdC53b3Jkc1t0Lmxlbmd0aCsxXT0wLHQubGVuZ3RoKz0yO2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MHx0LndvcmRzW3JdO2UrPTk3NypuLHQud29yZHNbcl09NjcxMDg4NjMmZSxlPTY0Km4rKGUvNjcxMDg4NjR8MCl9cmV0dXJuIDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiYodC5sZW5ndGgtLSwwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmdC5sZW5ndGgtLSksdH0saShiLGwpLGkodixsKSxpKHksbCkseS5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0xOSooMHx0LndvcmRzW3JdKStlLGk9NjcxMDg4NjMmbjtuPj4+PTI2LHQud29yZHNbcl09aSxlPW59cmV0dXJuIDAhPT1lJiYodC53b3Jkc1t0Lmxlbmd0aCsrXT1lKSx0fSxvLl9wcmltZT1mdW5jdGlvbiB0KGUpe2lmKEFbZV0pcmV0dXJuIEFbZV07dmFyIHQ7aWYoXCJrMjU2XCI9PT1lKXQ9bmV3IHA7ZWxzZSBpZihcInAyMjRcIj09PWUpdD1uZXcgYjtlbHNlIGlmKFwicDE5MlwiPT09ZSl0PW5ldyB2O2Vsc2V7aWYoXCJwMjU1MTlcIiE9PWUpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwcmltZSBcIitlKTt0PW5ldyB5fXJldHVybiBBW2VdPXQsdH0sbS5wcm90b3R5cGUuX3ZlcmlmeTE9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5fdmVyaWZ5Mj1mdW5jdGlvbih0LGUpe24oMD09PSh0Lm5lZ2F0aXZlfGUubmVnYXRpdmUpLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCYmdC5yZWQ9PT1lLnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLmltb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucHJpbWU/dGhpcy5wcmltZS5pcmVkdWNlKHQpLl9mb3JjZVJlZCh0aGlzKTp0LnVtb2QodGhpcy5tKS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pc1plcm8oKT90LmNsb25lKCk6dGhpcy5tLnN1Yih0KS5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7dmFyIGk9cigxNDkpLG89cig1NzYpO2UucGJrZGYyPWZ1bmN0aW9uKHQscixuLGksYSxmKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBhJiYoZj1hLGE9dm9pZCAwKSxvKG4saSksXCJmdW5jdGlvblwiIT10eXBlb2YgZil0aHJvdyBuZXcgRXJyb3IoXCJObyBjYWxsYmFjayBwcm92aWRlZCB0byBwYmtkZjJcIik7c2V0VGltZW91dChmdW5jdGlvbigpe2YobnVsbCxlLnBia2RmMlN5bmModCxyLG4saSxhKSl9KX07dmFyIGE7aWYodC5icm93c2VyKWE9XCJ1dGYtOFwiO2Vsc2V7dmFyIGY9cGFyc2VJbnQodC52ZXJzaW9uLnNwbGl0KFwiLlwiKVswXS5zbGljZSgxKSwxMCk7YT1mPj02P1widXRmLThcIjpcImJpbmFyeVwifWUucGJrZGYyU3luYz1mdW5jdGlvbih0LGUscixmLHMpe24uaXNCdWZmZXIodCl8fCh0PW5ldyBuKHQsYSkpLG4uaXNCdWZmZXIoZSl8fChlPW5ldyBuKGUsYSkpLG8ocixmKSxzPXN8fFwic2hhMVwiO3ZhciB1LGg9MSxjPW5ldyBuKGYpLGQ9bmV3IG4oZS5sZW5ndGgrNCk7ZS5jb3B5KGQsMCwwLGUubGVuZ3RoKTtmb3IodmFyIGwscCxiPTE7Yjw9aDtiKyspe2Qud3JpdGVVSW50MzJCRShiLGUubGVuZ3RoKTt2YXIgdj1pKHMsdCkudXBkYXRlKGQpLmRpZ2VzdCgpO3V8fCh1PXYubGVuZ3RoLHA9bmV3IG4odSksaD1NYXRoLmNlaWwoZi91KSxsPWYtKGgtMSkqdSksdi5jb3B5KHAsMCwwLHUpO2Zvcih2YXIgeT0xO3k8cjt5Kyspe3Y9aShzLHQpLnVwZGF0ZSh2KS5kaWdlc3QoKTtmb3IodmFyIG09MDttPHU7bSsrKXBbbV1ePXZbbV19dmFyIGc9KGItMSkqdSx3PWI9PT1oP2w6dTtwLmNvcHkoYyxnLDAsdyl9cmV0dXJuIGN9fSkuY2FsbChlLHIoMjYpLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiYWVzLTEyOC1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTEyOC1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1jYmNcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNCQ1wiLHR5cGU6XCJibG9ja1wifSxlLmFlczEyOD1lW1wiYWVzLTEyOC1jYmNcIl0sZS5hZXMxOTI9ZVtcImFlcy0xOTItY2JjXCJdLGUuYWVzMjU2PWVbXCJhZXMtMjU2LWNiY1wiXSxlW1wiYWVzLTEyOC1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmI4XCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkI4XCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmIxXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkIxXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTEyOC1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMTkyLWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0yNTYtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLG8pe2UuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQsXCJiaW5hcnlcIikpLHImJiFlLmlzQnVmZmVyKHIpJiYocj1uZXcgZShyLFwiYmluYXJ5XCIpKSxuLz04LG89b3x8MDtmb3IodmFyIGEsZixzPTAsdT0wLGg9bmV3IGUobiksYz1uZXcgZShvKSxkPTAsbD1bXTs7KXtpZihkKys+MCYmbC5wdXNoKGEpLGwucHVzaCh0KSxyJiZsLnB1c2gociksYT1pKGUuY29uY2F0KGwpKSxsPVtdLGY9MCxuPjApZm9yKDs7KXtpZigwPT09bilicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7aFtzKytdPWFbZl0sbi0tLGYrK31pZihvPjAmJmYhPT1hLmxlbmd0aClmb3IoOzspe2lmKDA9PT1vKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztjW3UrK109YVtmXSxvLS0sZisrfWlmKDA9PT1uJiYwPT09bylicmVha31mb3IoZj0wO2Y8YS5sZW5ndGg7ZisrKWFbZl09MDtyZXR1cm57a2V5OmgsaXY6Y319dmFyIGk9cigxMDUpO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5hZnRlclRyYW5zZm9ybT1mdW5jdGlvbihlLHIpe3JldHVybiBpKHQsZSxyKX0sdGhpcy5uZWVkVHJhbnNmb3JtPSExLHRoaXMudHJhbnNmb3JtaW5nPSExLHRoaXMud3JpdGVjYj1udWxsLHRoaXMud3JpdGVjaHVuaz1udWxsLHRoaXMud3JpdGVlbmNvZGluZz1udWxsfWZ1bmN0aW9uIGkodCxlLHIpe3ZhciBuPXQuX3RyYW5zZm9ybVN0YXRlO24udHJhbnNmb3JtaW5nPSExO3ZhciBpPW4ud3JpdGVjYjtpZighaSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJubyB3cml0ZWNiIGluIFRyYW5zZm9ybSBjbGFzc1wiKSk7bi53cml0ZWNodW5rPW51bGwsbi53cml0ZWNiPW51bGwsbnVsbCE9PXImJnZvaWQgMCE9PXImJnQucHVzaChyKSxpKGUpO3ZhciBvPXQuX3JlYWRhYmxlU3RhdGU7by5yZWFkaW5nPSExLChvLm5lZWRSZWFkYWJsZXx8by5sZW5ndGg8by5oaWdoV2F0ZXJNYXJrKSYmdC5fcmVhZChvLmhpZ2hXYXRlck1hcmspfWZ1bmN0aW9uIG8odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbykpcmV0dXJuIG5ldyBvKHQpO2YuY2FsbCh0aGlzLHQpLHRoaXMuX3RyYW5zZm9ybVN0YXRlPW5ldyBuKHRoaXMpO3ZhciBlPXRoaXM7dGhpcy5fcmVhZGFibGVTdGF0ZS5uZWVkUmVhZGFibGU9ITAsdGhpcy5fcmVhZGFibGVTdGF0ZS5zeW5jPSExLHQmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnRyYW5zZm9ybSYmKHRoaXMuX3RyYW5zZm9ybT10LnRyYW5zZm9ybSksXCJmdW5jdGlvblwiPT10eXBlb2YgdC5mbHVzaCYmKHRoaXMuX2ZsdXNoPXQuZmx1c2gpKSx0aGlzLm9uY2UoXCJwcmVmaW5pc2hcIixmdW5jdGlvbigpe1wiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMuX2ZsdXNoP3RoaXMuX2ZsdXNoKGZ1bmN0aW9uKHQpe2EoZSx0KX0pOmEoZSl9KX1mdW5jdGlvbiBhKHQsZSl7aWYoZSlyZXR1cm4gdC5lbWl0KFwiZXJyb3JcIixlKTt2YXIgcj10Ll93cml0YWJsZVN0YXRlLG49dC5fdHJhbnNmb3JtU3RhdGU7aWYoci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQ2FsbGluZyB0cmFuc2Zvcm0gZG9uZSB3aGVuIHdzLmxlbmd0aCAhPSAwXCIpO2lmKG4udHJhbnNmb3JtaW5nKXRocm93IG5ldyBFcnJvcihcIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiBzdGlsbCB0cmFuc2Zvcm1pbmdcIik7cmV0dXJuIHQucHVzaChudWxsKX10LmV4cG9ydHM9bzt2YXIgZj1yKDUxKSxzPXIoNzMpO3MuaW5oZXJpdHM9cig3NCkscy5pbmhlcml0cyhvLGYpLG8ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdHJhbnNmb3JtU3RhdGUubmVlZFRyYW5zZm9ybT0hMSxmLnByb3RvdHlwZS5wdXNoLmNhbGwodGhpcyx0LGUpfSxvLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG8ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fdHJhbnNmb3JtU3RhdGU7aWYobi53cml0ZWNiPXIsbi53cml0ZWNodW5rPXQsbi53cml0ZWVuY29kaW5nPWUsIW4udHJhbnNmb3JtaW5nKXt2YXIgaT10aGlzLl9yZWFkYWJsZVN0YXRlOyhuLm5lZWRUcmFuc2Zvcm18fGkubmVlZFJlYWRhYmxlfHxpLmxlbmd0aDxpLmhpZ2hXYXRlck1hcmspJiZ0aGlzLl9yZWFkKGkuaGlnaFdhdGVyTWFyayl9fSxvLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdGF0ZTtudWxsIT09ZS53cml0ZWNodW5rJiZlLndyaXRlY2ImJiFlLnRyYW5zZm9ybWluZz8oZS50cmFuc2Zvcm1pbmc9ITAsdGhpcy5fdHJhbnNmb3JtKGUud3JpdGVjaHVuayxlLndyaXRlZW5jb2RpbmcsZS5hZnRlclRyYW5zZm9ybSkpOmUubmVlZFRyYW5zZm9ybT0hMH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSxuKXtmdW5jdGlvbiBpKCl7fWZ1bmN0aW9uIG8odCxlLHIpe3RoaXMuY2h1bms9dCx0aGlzLmVuY29kaW5nPWUsdGhpcy5jYWxsYmFjaz1yLHRoaXMubmV4dD1udWxsfWZ1bmN0aW9uIGEodCxlKXtSPVJ8fHIoNTEpLHQ9dHx8e30sdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLGUgaW5zdGFuY2VvZiBSJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LndyaXRhYmxlT2JqZWN0TW9kZSk7dmFyIG49dC5oaWdoV2F0ZXJNYXJrLGk9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ufHwwPT09bj9uOmksdGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrLHRoaXMubmVlZERyYWluPSExLHRoaXMuZW5kaW5nPSExLHRoaXMuZW5kZWQ9ITEsdGhpcy5maW5pc2hlZD0hMTt2YXIgbz10LmRlY29kZVN0cmluZ3M9PT0hMTt0aGlzLmRlY29kZVN0cmluZ3M9IW8sdGhpcy5kZWZhdWx0RW5jb2Rpbmc9dC5kZWZhdWx0RW5jb2Rpbmd8fFwidXRmOFwiLHRoaXMubGVuZ3RoPTAsdGhpcy53cml0aW5nPSExLHRoaXMuY29ya2VkPTAsdGhpcy5zeW5jPSEwLHRoaXMuYnVmZmVyUHJvY2Vzc2luZz0hMSx0aGlzLm9ud3JpdGU9ZnVuY3Rpb24odCl7YihlLHQpfSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlbGVuPTAsdGhpcy5idWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLmxhc3RCdWZmZXJlZFJlcXVlc3Q9bnVsbCx0aGlzLnBlbmRpbmdjYj0wLHRoaXMucHJlZmluaXNoZWQ9ITEsdGhpcy5lcnJvckVtaXR0ZWQ9ITEsdGhpcy5idWZmZXJlZFJlcXVlc3RDb3VudD0wLHRoaXMuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBTKHRoaXMpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIFI9Unx8cig1MSksdGhpcyBpbnN0YW5jZW9mIGZ8fHRoaXMgaW5zdGFuY2VvZiBSPyh0aGlzLl93cml0YWJsZVN0YXRlPW5ldyBhKHQsdGhpcyksdGhpcy53cml0YWJsZT0hMCx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC53cml0ZSYmKHRoaXMuX3dyaXRlPXQud3JpdGUpLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGV2JiYodGhpcy5fd3JpdGV2PXQud3JpdGV2KSksdm9pZCB4LmNhbGwodGhpcykpOm5ldyBmKHQpfWZ1bmN0aW9uIHModCxlKXt2YXIgcj1uZXcgRXJyb3IoXCJ3cml0ZSBhZnRlciBlbmRcIik7dC5lbWl0KFwiZXJyb3JcIixyKSxFKGUscil9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT0hMCxvPSExO3JldHVybiBudWxsPT09cj9vPW5ldyBUeXBlRXJyb3IoXCJNYXkgbm90IHdyaXRlIG51bGwgdmFsdWVzIHRvIHN0cmVhbVwiKTpCLmlzQnVmZmVyKHIpfHxcInN0cmluZ1wiPT10eXBlb2Ygcnx8dm9pZCAwPT09cnx8ZS5vYmplY3RNb2RlfHwobz1uZXcgVHlwZUVycm9yKFwiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVua1wiKSksbyYmKHQuZW1pdChcImVycm9yXCIsbyksRShuLG8pLGk9ITEpLGl9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHQub2JqZWN0TW9kZXx8dC5kZWNvZGVTdHJpbmdzPT09ITF8fFwic3RyaW5nXCIhPXR5cGVvZiBlfHwoZT1PLmZyb20oZSxyKSksZX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7cj1oKGUscixuKSxCLmlzQnVmZmVyKHIpJiYobj1cImJ1ZmZlclwiKTt2YXIgYT1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aDtlLmxlbmd0aCs9YTt2YXIgZj1lLmxlbmd0aDxlLmhpZ2hXYXRlck1hcms7aWYoZnx8KGUubmVlZERyYWluPSEwKSxlLndyaXRpbmd8fGUuY29ya2VkKXt2YXIgcz1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q7ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW5ldyBvKHIsbixpKSxzP3MubmV4dD1lLmxhc3RCdWZmZXJlZFJlcXVlc3Q6ZS5idWZmZXJlZFJlcXVlc3Q9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0LGUuYnVmZmVyZWRSZXF1ZXN0Q291bnQrPTF9ZWxzZSBkKHQsZSwhMSxhLHIsbixpKTtyZXR1cm4gZn1mdW5jdGlvbiBkKHQsZSxyLG4saSxvLGEpe2Uud3JpdGVsZW49bixlLndyaXRlY2I9YSxlLndyaXRpbmc9ITAsZS5zeW5jPSEwLHI/dC5fd3JpdGV2KGksZS5vbndyaXRlKTp0Ll93cml0ZShpLG8sZS5vbndyaXRlKSxlLnN5bmM9ITF9ZnVuY3Rpb24gbCh0LGUscixuLGkpey0tZS5wZW5kaW5nY2Iscj9FKGksbik6aShuKSx0Ll93cml0YWJsZVN0YXRlLmVycm9yRW1pdHRlZD0hMCx0LmVtaXQoXCJlcnJvclwiLG4pfWZ1bmN0aW9uIHAodCl7dC53cml0aW5nPSExLHQud3JpdGVjYj1udWxsLHQubGVuZ3RoLT10LndyaXRlbGVuLHQud3JpdGVsZW49MH1mdW5jdGlvbiBiKHQsZSl7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZSxuPXIuc3luYyxpPXIud3JpdGVjYjtpZihwKHIpLGUpbCh0LHIsbixlLGkpO2Vsc2V7dmFyIG89ZyhyKTtvfHxyLmNvcmtlZHx8ci5idWZmZXJQcm9jZXNzaW5nfHwhci5idWZmZXJlZFJlcXVlc3R8fG0odCxyKSxuP0Eodix0LHIsbyxpKTp2KHQscixvLGkpfX1mdW5jdGlvbiB2KHQsZSxyLG4pe3J8fHkodCxlKSxlLnBlbmRpbmdjYi0tLG4oKSxfKHQsZSl9ZnVuY3Rpb24geSh0LGUpezA9PT1lLmxlbmd0aCYmZS5uZWVkRHJhaW4mJihlLm5lZWREcmFpbj0hMSx0LmVtaXQoXCJkcmFpblwiKSl9ZnVuY3Rpb24gbSh0LGUpe2UuYnVmZmVyUHJvY2Vzc2luZz0hMDt2YXIgcj1lLmJ1ZmZlcmVkUmVxdWVzdDtpZih0Ll93cml0ZXYmJnImJnIubmV4dCl7dmFyIG49ZS5idWZmZXJlZFJlcXVlc3RDb3VudCxpPW5ldyBBcnJheShuKSxvPWUuY29ya2VkUmVxdWVzdHNGcmVlO28uZW50cnk9cjtmb3IodmFyIGE9MDtyOylpW2FdPXIscj1yLm5leHQsYSs9MTtkKHQsZSwhMCxlLmxlbmd0aCxpLFwiXCIsby5maW5pc2gpLGUucGVuZGluZ2NiKyssZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsby5uZXh0PyhlLmNvcmtlZFJlcXVlc3RzRnJlZT1vLm5leHQsby5uZXh0PW51bGwpOmUuY29ya2VkUmVxdWVzdHNGcmVlPW5ldyBTKGUpfWVsc2V7Zm9yKDtyOyl7dmFyIGY9ci5jaHVuayxzPXIuZW5jb2RpbmcsdT1yLmNhbGxiYWNrLGg9ZS5vYmplY3RNb2RlPzE6Zi5sZW5ndGg7aWYoZCh0LGUsITEsaCxmLHMsdSkscj1yLm5leHQsZS53cml0aW5nKWJyZWFrfW51bGw9PT1yJiYoZS5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwpfWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCxlLmJ1ZmZlcmVkUmVxdWVzdD1yLGUuYnVmZmVyUHJvY2Vzc2luZz0hMX1mdW5jdGlvbiBnKHQpe3JldHVybiB0LmVuZGluZyYmMD09PXQubGVuZ3RoJiZudWxsPT09dC5idWZmZXJlZFJlcXVlc3QmJiF0LmZpbmlzaGVkJiYhdC53cml0aW5nfWZ1bmN0aW9uIHcodCxlKXtlLnByZWZpbmlzaGVkfHwoZS5wcmVmaW5pc2hlZD0hMCx0LmVtaXQoXCJwcmVmaW5pc2hcIikpfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1nKGUpO3JldHVybiByJiYoMD09PWUucGVuZGluZ2NiPyh3KHQsZSksZS5maW5pc2hlZD0hMCx0LmVtaXQoXCJmaW5pc2hcIikpOncodCxlKSkscn1mdW5jdGlvbiBNKHQsZSxyKXtlLmVuZGluZz0hMCxfKHQsZSksciYmKGUuZmluaXNoZWQ/RShyKTp0Lm9uY2UoXCJmaW5pc2hcIixyKSksZS5lbmRlZD0hMCx0LndyaXRhYmxlPSExfWZ1bmN0aW9uIFModCl7dmFyIGU9dGhpczt0aGlzLm5leHQ9bnVsbCx0aGlzLmVudHJ5PW51bGwsdGhpcy5maW5pc2g9ZnVuY3Rpb24ocil7dmFyIG49ZS5lbnRyeTtmb3IoZS5lbnRyeT1udWxsO247KXt2YXIgaT1uLmNhbGxiYWNrO3QucGVuZGluZ2NiLS0saShyKSxuPW4ubmV4dH10LmNvcmtlZFJlcXVlc3RzRnJlZT90LmNvcmtlZFJlcXVlc3RzRnJlZS5uZXh0PWU6dC5jb3JrZWRSZXF1ZXN0c0ZyZWU9ZX19dC5leHBvcnRzPWY7dmFyIEU9cigxNTcpLEE9IWUuYnJvd3NlciYmW1widjAuMTBcIixcInYwLjkuXCJdLmluZGV4T2YoZS52ZXJzaW9uLnNsaWNlKDAsNSkpPi0xP246RTtmLldyaXRhYmxlU3RhdGU9YTt2YXIgaz1yKDczKTtrLmluaGVyaXRzPXIoNzQpO3ZhciB4LEk9e2RlcHJlY2F0ZTpyKDU5OCl9OyFmdW5jdGlvbigpe3RyeXt4PXIoMzEpfWNhdGNoKHQpe31maW5hbGx5e3h8fCh4PXIoMTEwKS5FdmVudEVtaXR0ZXIpfX0oKTt2YXIgQj1yKDEpLkJ1ZmZlcixPPXIoMTU2KTtrLmluaGVyaXRzKGYseCk7dmFyIFI7YS5wcm90b3R5cGUuZ2V0QnVmZmVyPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuYnVmZmVyZWRSZXF1ZXN0LGU9W107dDspZS5wdXNoKHQpLHQ9dC5uZXh0O3JldHVybiBlfSxmdW5jdGlvbigpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OkkuZGVwcmVjYXRlKGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0QnVmZmVyKCl9LFwiX3dyaXRhYmxlU3RhdGUuYnVmZmVyIGlzIGRlcHJlY2F0ZWQuIFVzZSBfd3JpdGFibGVTdGF0ZS5nZXRCdWZmZXIgaW5zdGVhZC5cIil9KX1jYXRjaCh0KXt9fSgpO3ZhciBSO2YucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24oKXt0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIkNhbm5vdCBwaXBlLCBub3QgcmVhZGFibGVcIikpfSxmLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZSxvPSExO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxCLmlzQnVmZmVyKHQpP2U9XCJidWZmZXJcIjplfHwoZT1uLmRlZmF1bHRFbmNvZGluZyksXCJmdW5jdGlvblwiIT10eXBlb2YgciYmKHI9aSksbi5lbmRlZD9zKHRoaXMscik6dSh0aGlzLG4sdCxyKSYmKG4ucGVuZGluZ2NiKyssbz1jKHRoaXMsbix0LGUscikpLG99LGYucHJvdG90eXBlLmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkKyt9LGYucHJvdG90eXBlLnVuY29yaz1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3dyaXRhYmxlU3RhdGU7dC5jb3JrZWQmJih0LmNvcmtlZC0tLHQud3JpdGluZ3x8dC5jb3JrZWR8fHQuZmluaXNoZWR8fHQuYnVmZmVyUHJvY2Vzc2luZ3x8IXQuYnVmZmVyZWRSZXF1ZXN0fHxtKHRoaXMsdCkpfSxmLnByb3RvdHlwZS5zZXREZWZhdWx0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PXQudG9Mb3dlckNhc2UoKSksIShbXCJoZXhcIixcInV0ZjhcIixcInV0Zi04XCIsXCJhc2NpaVwiLFwiYmluYXJ5XCIsXCJiYXNlNjRcIixcInVjczJcIixcInVjcy0yXCIsXCJ1dGYxNmxlXCIsXCJ1dGYtMTZsZVwiLFwicmF3XCJdLmluZGV4T2YoKHQrXCJcIikudG9Mb3dlckNhc2UoKSk+LTEpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTtyZXR1cm4gdGhpcy5fd3JpdGFibGVTdGF0ZS5kZWZhdWx0RW5jb2Rpbmc9dCx0aGlzfSxmLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3IobmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpKX0sZi5wcm90b3R5cGUuX3dyaXRldj1udWxsLGYucHJvdG90eXBlLmVuZD1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fd3JpdGFibGVTdGF0ZTtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0PyhyPXQsdD1udWxsLGU9bnVsbCk6XCJmdW5jdGlvblwiPT10eXBlb2YgZSYmKHI9ZSxlPW51bGwpLG51bGwhPT10JiZ2b2lkIDAhPT10JiZ0aGlzLndyaXRlKHQsZSksbi5jb3JrZWQmJihuLmNvcmtlZD0xLHRoaXMudW5jb3JrKCkpLG4uZW5kaW5nfHxuLmZpbmlzaGVkfHxNKHRoaXMsbixyKX19KS5jYWxsKGUscigyNikscigxNTgpLnNldEltbWVkaWF0ZSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7dmFyIG49cigxKSxpPW4uQnVmZmVyLG89bi5TbG93QnVmZmVyLGE9bi5rTWF4TGVuZ3RofHwyMTQ3NDgzNjQ3O2UuYWxsb2M9ZnVuY3Rpb24odCxlLHIpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuYWxsb2MpcmV0dXJuIGkuYWxsb2ModCxlLHIpO2lmKFwibnVtYmVyXCI9PXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJlbmNvZGluZyBtdXN0IG5vdCBiZSBudW1iZXJcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzaXplIGlzIHRvbyBsYXJnZVwiKTt2YXIgbj1yLG89ZTt2b2lkIDA9PT1vJiYobj12b2lkIDAsbz0wKTt2YXIgZj1uZXcgaSh0KTtpZihcInN0cmluZ1wiPT10eXBlb2Ygbylmb3IodmFyIHM9bmV3IGkobyxuKSx1PXMubGVuZ3RoLGg9LTE7KytoPHQ7KWZbaF09c1toJXVdO2Vsc2UgZi5maWxsKG8pO3JldHVybiBmfSxlLmFsbG9jVW5zYWZlPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuYWxsb2NVbnNhZmUpcmV0dXJuIGkuYWxsb2NVbnNhZmUodCk7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0PmEpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzaXplIGlzIHRvbyBsYXJnZVwiKTtyZXR1cm4gbmV3IGkodCl9LGUuZnJvbT1mdW5jdGlvbihlLHIsbil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5mcm9tJiYoIXQuVWludDhBcnJheXx8VWludDhBcnJheS5mcm9tIT09aS5mcm9tKSlyZXR1cm4gaS5mcm9tKGUscixuKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSlyZXR1cm4gbmV3IGkoZSxyKTtpZihcInVuZGVmaW5lZFwiIT10eXBlb2YgQXJyYXlCdWZmZXImJmUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7dmFyIG89cjtpZigxPT09YXJndW1lbnRzLmxlbmd0aClyZXR1cm4gbmV3IGkoZSk7XCJ1bmRlZmluZWRcIj09dHlwZW9mIG8mJihvPTApO3ZhciBhPW47aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGEmJihhPWUuYnl0ZUxlbmd0aC1vKSxvPj1lLmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInb2Zmc2V0JyBpcyBvdXQgb2YgYm91bmRzXCIpO2lmKGE+ZS5ieXRlTGVuZ3RoLW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCInbGVuZ3RoJyBpcyBvdXQgb2YgYm91bmRzXCIpO3JldHVybiBuZXcgaShlLnNsaWNlKG8sbythKSl9aWYoaS5pc0J1ZmZlcihlKSl7dmFyIGY9bmV3IGkoZS5sZW5ndGgpO3JldHVybiBlLmNvcHkoZiwwLDAsZS5sZW5ndGgpLGZ9aWYoZSl7aWYoQXJyYXkuaXNBcnJheShlKXx8XCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxcImxlbmd0aFwiaW4gZSlyZXR1cm4gbmV3IGkoZSk7aWYoXCJCdWZmZXJcIj09PWUudHlwZSYmQXJyYXkuaXNBcnJheShlLmRhdGEpKXJldHVybiBuZXcgaShlLmRhdGEpfXRocm93IG5ldyBUeXBlRXJyb3IoXCJGaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nLCBCdWZmZXIsIEFycmF5QnVmZmVyLCBBcnJheSwgb3IgYXJyYXktbGlrZSBvYmplY3QuXCIpfSxlLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jVW5zYWZlU2xvdylyZXR1cm4gaS5hbGxvY1Vuc2FmZVNsb3codCk7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcInNpemUgbXVzdCBiZSBhIG51bWJlclwiKTtpZih0Pj1hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7cmV0dXJuIG5ldyBvKHQpfX0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIsbixpKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiY2FsbGJhY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTt2YXIgbyxhLGY9YXJndW1lbnRzLmxlbmd0aDtzd2l0Y2goZil7Y2FzZSAwOmNhc2UgMTpyZXR1cm4gZS5uZXh0VGljayh0KTtjYXNlIDI6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyKX0pO2Nhc2UgMzpyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuY2FsbChudWxsLHIsbil9KTtjYXNlIDQ6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyLG4saSl9KTtkZWZhdWx0OmZvcihvPW5ldyBBcnJheShmLTEpLGE9MDthPG8ubGVuZ3RoOylvW2ErK109YXJndW1lbnRzW2FdO3JldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5hcHBseShudWxsLG8pfSl9fSFlLnZlcnNpb258fDA9PT1lLnZlcnNpb24uaW5kZXhPZihcInYwLlwiKXx8MD09PWUudmVyc2lvbi5pbmRleE9mKFwidjEuXCIpJiYwIT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MS44LlwiKT90LmV4cG9ydHM9cjp0LmV4cG9ydHM9ZS5uZXh0VGljaztcbn0pLmNhbGwoZSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKHQsZSl7dGhpcy5faWQ9dCx0aGlzLl9jbGVhckZuPWV9dmFyIG89cigyNikubmV4dFRpY2ssYT1GdW5jdGlvbi5wcm90b3R5cGUuYXBwbHksZj1BcnJheS5wcm90b3R5cGUuc2xpY2Uscz17fSx1PTA7ZS5zZXRUaW1lb3V0PWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKGEuY2FsbChzZXRUaW1lb3V0LHdpbmRvdyxhcmd1bWVudHMpLGNsZWFyVGltZW91dCl9LGUuc2V0SW50ZXJ2YWw9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkoYS5jYWxsKHNldEludGVydmFsLHdpbmRvdyxhcmd1bWVudHMpLGNsZWFySW50ZXJ2YWwpfSxlLmNsZWFyVGltZW91dD1lLmNsZWFySW50ZXJ2YWw9ZnVuY3Rpb24odCl7dC5jbG9zZSgpfSxpLnByb3RvdHlwZS51bnJlZj1pLnByb3RvdHlwZS5yZWY9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLmNsb3NlPWZ1bmN0aW9uKCl7dGhpcy5fY2xlYXJGbi5jYWxsKHdpbmRvdyx0aGlzLl9pZCl9LGUuZW5yb2xsPWZ1bmN0aW9uKHQsZSl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpLHQuX2lkbGVUaW1lb3V0PWV9LGUudW5lbnJvbGw9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpLHQuX2lkbGVUaW1lb3V0PS0xfSxlLl91bnJlZkFjdGl2ZT1lLmFjdGl2ZT1mdW5jdGlvbih0KXtjbGVhclRpbWVvdXQodC5faWRsZVRpbWVvdXRJZCk7dmFyIGU9dC5faWRsZVRpbWVvdXQ7ZT49MCYmKHQuX2lkbGVUaW1lb3V0SWQ9c2V0VGltZW91dChmdW5jdGlvbigpe3QuX29uVGltZW91dCYmdC5fb25UaW1lb3V0KCl9LGUpKX0sZS5zZXRJbW1lZGlhdGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdD90OmZ1bmN0aW9uKHQpe3ZhciByPXUrKyxuPSEoYXJndW1lbnRzLmxlbmd0aDwyKSYmZi5jYWxsKGFyZ3VtZW50cywxKTtyZXR1cm4gc1tyXT0hMCxvKGZ1bmN0aW9uKCl7c1tyXSYmKG4/dC5hcHBseShudWxsLG4pOnQuY2FsbChudWxsKSxlLmNsZWFySW1tZWRpYXRlKHIpKX0pLHJ9LGUuY2xlYXJJbW1lZGlhdGU9XCJmdW5jdGlvblwiPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKHQpe2RlbGV0ZSBzW3RdfX0pLmNhbGwoZSxyKDE1OCkuc2V0SW1tZWRpYXRlLHIoMTU4KS5jbGVhckltbWVkaWF0ZSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMjU3KS5CZXIsYT02NTUzNyxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LG51bGwsW3trZXk6XCJtb2R1bHVzVG9QZW1cIix2YWx1ZTpmdW5jdGlvbih0KXtpZigwPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG1heSBub3Qgc3RhcnQgd2l0aCB6ZXJvXCIpOzEyOCZ0WzBdJiYodD1lLmNvbmNhdChbbmV3IGUoWzBdKSx0XSkpO3ZhciByPW5ldyBvLldyaXRlcjtyZXR1cm4gci5zdGFydFNlcXVlbmNlKCksci53cml0ZUJ1ZmZlcih0LDIpLHIud3JpdGVJbnQoYSksci5lbmRTZXF1ZW5jZSgpLFwiLS0tLS1CRUdJTiBSU0EgUFVCTElDIEtFWS0tLS0tXFxuXCIrci5idWZmZXIudG9TdHJpbmcoXCJiYXNlNjRcIikubWF0Y2goLy57MSw2NH0vZykuam9pbihcIlxcblwiKStcIlxcbi0tLS0tRU5EIFJTQSBQVUJMSUMgS0VZLS0tLS1cXG5cIn19LHtrZXk6XCJtb2R1bHVzRnJvbVByaXZhdGVLZXlcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj10LnJlcGxhY2UoXCItLS0tLUJFR0lOIFJTQSBQUklWQVRFIEtFWS0tLS0tXCIsXCJcIikucmVwbGFjZShcIi0tLS0tRU5EIFJTQSBQUklWQVRFIEtFWS0tLS0tXCIsXCJcIikucmVwbGFjZSgvXFxzK3xcXG5cXHJ8XFxufFxcciQvZ20sXCJcIiksbj1uZXcgZShyLFwiYmFzZTY0XCIpLGk9bmV3IG8uUmVhZGVyKG4pO2kucmVhZFNlcXVlbmNlKCksaS5yZWFkU3RyaW5nKDIsITApO3ZhciBhPWkucmVhZFN0cmluZygyLCEwKTtyZXR1cm4gMD09PWFbMF0/YS5zbGljZSgxKTphfX1dKSx0fSgpO3QuZXhwb3J0cz1mfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3IoMjgxKSx0LmV4cG9ydHM9cigxNjMpLk51bWJlci5pc0ludGVnZXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCYmXCJOdW1iZXJcIiE9bih0KSl0aHJvdyBUeXBlRXJyb3IoZSk7cmV0dXJuK3R9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMSksaT1yKDQ3KSxvPXIoMTApO3QuZXhwb3J0cz1bXS5jb3B5V2l0aGlufHxmdW5jdGlvbih0LGUpe3ZhciByPW4odGhpcyksYT1vKHIubGVuZ3RoKSxmPWkodCxhKSxzPWkoZSxhKSx1PWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwLGg9TWF0aC5taW4oKHZvaWQgMD09PXU/YTppKHUsYSkpLXMsYS1mKSxjPTE7Zm9yKHM8ZiYmZjxzK2gmJihjPS0xLHMrPWgtMSxmKz1oLTEpO2gtLSA+MDspcyBpbiByP3JbZl09cltzXTpkZWxldGUgcltmXSxmKz1jLHMrPWM7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig1NSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9W107cmV0dXJuIG4odCwhMSxyLnB1c2gscixlKSxyfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTMpLGk9cigxMSksbz1yKDY1KSxhPXIoMTApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixmLHMpe24oZSk7dmFyIHU9aSh0KSxoPW8odSksYz1hKHUubGVuZ3RoKSxkPXM/Yy0xOjAsbD1zPy0xOjE7aWYocjwyKWZvcig7Oyl7aWYoZCBpbiBoKXtmPWhbZF0sZCs9bDticmVha31pZihkKz1sLHM/ZDwwOmM8PWQpdGhyb3cgVHlwZUVycm9yKFwiUmVkdWNlIG9mIGVtcHR5IGFycmF5IHdpdGggbm8gaW5pdGlhbCB2YWx1ZVwiKX1mb3IoO3M/ZD49MDpjPmQ7ZCs9bClkIGluIGgmJihmPWUoZixoW2RdLGQsdSkpO3JldHVybiBmfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTMpLGk9cig2KSxvPXIoODIpLGE9W10uc2xpY2UsZj17fSxzPWZ1bmN0aW9uKHQsZSxyKXtpZighKGUgaW4gZikpe2Zvcih2YXIgbj1bXSxpPTA7aTxlO2krKyluW2ldPVwiYVtcIitpK1wiXVwiO2ZbZV09RnVuY3Rpb24oXCJGLGFcIixcInJldHVybiBuZXcgRihcIituLmpvaW4oXCIsXCIpK1wiKVwiKX1yZXR1cm4gZltlXSh0LHIpfTt0LmV4cG9ydHM9RnVuY3Rpb24uYmluZHx8ZnVuY3Rpb24odCl7dmFyIGU9bih0aGlzKSxyPWEuY2FsbChhcmd1bWVudHMsMSksZj1mdW5jdGlvbigpe3ZhciBuPXIuY29uY2F0KGEuY2FsbChhcmd1bWVudHMpKTtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/cyhlLG4ubGVuZ3RoLG4pOm8oZSxuLHQpfTtyZXR1cm4gaShlLnByb3RvdHlwZSkmJihmLnByb3RvdHlwZT1lLnByb3RvdHlwZSksZn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDkpLmYsaT1yKDQyKSxvPXIoNDUpLGE9cigzMyksZj1yKDQwKSxzPXIoMjQpLHU9cig1NSksaD1yKDEyOCksYz1yKDE3NyksZD1yKDQ2KSxsPXIoOCkscD1yKDM2KS5mYXN0S2V5LGI9bD9cIl9zXCI6XCJzaXplXCIsdj1mdW5jdGlvbih0LGUpe3ZhciByLG49cChlKTtpZihcIkZcIiE9PW4pcmV0dXJuIHQuX2lbbl07Zm9yKHI9dC5fZjtyO3I9ci5uKWlmKHIuaz09ZSlyZXR1cm4gcn07dC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUscixoKXt2YXIgYz10KGZ1bmN0aW9uKHQsbil7Zih0LGMsZSxcIl9pXCIpLHQuX2k9aShudWxsKSx0Ll9mPXZvaWQgMCx0Ll9sPXZvaWQgMCx0W2JdPTAsdm9pZCAwIT1uJiZ1KG4scix0W2hdLHQpfSk7cmV0dXJuIG8oYy5wcm90b3R5cGUse2NsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10Ll9pLHI9dC5fZjtyO3I9ci5uKXIucj0hMCxyLnAmJihyLnA9ci5wLm49dm9pZCAwKSxkZWxldGUgZVtyLmldO3QuX2Y9dC5fbD12b2lkIDAsdFtiXT0wfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXYoZSx0KTtpZihyKXt2YXIgbj1yLm4saT1yLnA7ZGVsZXRlIGUuX2lbci5pXSxyLnI9ITAsaSYmKGkubj1uKSxuJiYobi5wPWkpLGUuX2Y9PXImJihlLl9mPW4pLGUuX2w9PXImJihlLl9sPWkpLGVbYl0tLX1yZXR1cm4hIXJ9LGZvckVhY2g6ZnVuY3Rpb24odCl7Zih0aGlzLGMsXCJmb3JFYWNoXCIpO2Zvcih2YXIgZSxyPWEodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwzKTtlPWU/ZS5uOnRoaXMuX2Y7KWZvcihyKGUudixlLmssdGhpcyk7ZSYmZS5yOyllPWUucH0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhdih0aGlzLHQpfX0pLGwmJm4oYy5wcm90b3R5cGUsXCJzaXplXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBzKHRoaXNbYl0pfX0pLGN9LGRlZjpmdW5jdGlvbih0LGUscil7dmFyIG4saSxvPXYodCxlKTtyZXR1cm4gbz9vLnY9cjoodC5fbD1vPXtpOmk9cChlLCEwKSxrOmUsdjpyLHA6bj10Ll9sLG46dm9pZCAwLHI6ITF9LHQuX2Z8fCh0Ll9mPW8pLG4mJihuLm49byksdFtiXSsrLFwiRlwiIT09aSYmKHQuX2lbaV09bykpLHR9LGdldEVudHJ5OnYsc2V0U3Ryb25nOmZ1bmN0aW9uKHQsZSxyKXtoKHQsZSxmdW5jdGlvbih0LGUpe3RoaXMuX3Q9dCx0aGlzLl9rPWUsdGhpcy5fbD12b2lkIDB9LGZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMsZT10Ll9rLHI9dC5fbDtyJiZyLnI7KXI9ci5wO3JldHVybiB0Ll90JiYodC5fbD1yPXI/ci5uOnQuX3QuX2YpP1wia2V5c1wiPT1lP2MoMCxyLmspOlwidmFsdWVzXCI9PWU/YygwLHIudik6YygwLFtyLmssci52XSk6KHQuX3Q9dm9pZCAwLGMoMSkpfSxyP1wiZW50cmllc1wiOlwidmFsdWVzXCIsIXIsITApLGQoZSl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjQpLGk9cigxNjgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtpZihuKHRoaXMpIT10KXRocm93IFR5cGVFcnJvcih0K1wiI3RvSlNPTiBpc24ndCBnZW5lcmljXCIpO3JldHVybiBpKHRoaXMpfX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQ1KSxpPXIoMzYpLmdldFdlYWssbz1yKDMpLGE9cig2KSxmPXIoNDApLHM9cig1NSksdT1yKDI3KSxoPXIoMTIpLGM9dSg1KSxkPXUoNiksbD0wLHA9ZnVuY3Rpb24odCl7cmV0dXJuIHQuX2x8fCh0Ll9sPW5ldyBiKX0sYj1mdW5jdGlvbigpe3RoaXMuYT1bXX0sdj1mdW5jdGlvbih0LGUpe3JldHVybiBjKHQuYSxmdW5jdGlvbih0KXtyZXR1cm4gdFswXT09PWV9KX07Yi5wcm90b3R5cGU9e2dldDpmdW5jdGlvbih0KXt2YXIgZT12KHRoaXMsdCk7aWYoZSlyZXR1cm4gZVsxXX0saGFzOmZ1bmN0aW9uKHQpe3JldHVybiEhdih0aGlzLHQpfSxzZXQ6ZnVuY3Rpb24odCxlKXt2YXIgcj12KHRoaXMsdCk7cj9yWzFdPWU6dGhpcy5hLnB1c2goW3QsZV0pfSxkZWxldGU6ZnVuY3Rpb24odCl7dmFyIGU9ZCh0aGlzLmEsZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSk7cmV0dXJufmUmJnRoaXMuYS5zcGxpY2UoZSwxKSwhIX5lfX0sdC5leHBvcnRzPXtnZXRDb25zdHJ1Y3RvcjpmdW5jdGlvbih0LGUscixvKXt2YXIgdT10KGZ1bmN0aW9uKHQsbil7Zih0LHUsZSxcIl9pXCIpLHQuX2k9bCsrLHQuX2w9dm9pZCAwLHZvaWQgMCE9biYmcyhuLHIsdFtvXSx0KX0pO3JldHVybiBuKHUucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtyZXR1cm4gZT09PSEwP3AodGhpcykuZGVsZXRlKHQpOmUmJmgoZSx0aGlzLl9pKSYmZGVsZXRlIGVbdGhpcy5faV19LGhhczpmdW5jdGlvbih0KXtpZighYSh0KSlyZXR1cm4hMTt2YXIgZT1pKHQpO3JldHVybiBlPT09ITA/cCh0aGlzKS5oYXModCk6ZSYmaChlLHRoaXMuX2kpfX0pLHV9LGRlZjpmdW5jdGlvbih0LGUscil7dmFyIG49aShvKGUpLCEwKTtyZXR1cm4gbj09PSEwP3AodCkuc2V0KGUscik6blt0Ll9pXT1yLHR9LHVmc3RvcmU6cH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoOCkmJiFyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eShyKDEyMCkoXCJkaXZcIiksXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiA3fX0pLmF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLGkpe3RyeXtyZXR1cm4gaT9lKG4ocilbMF0sclsxXSk6ZShyKX1jYXRjaChlKXt2YXIgbz10LnJldHVybjt0aHJvdyB2b2lkIDAhPT1vJiZuKG8uY2FsbCh0KSksZX19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybnt2YWx1ZTplLGRvbmU6ISF0fX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPU1hdGgubG9nMXB8fGZ1bmN0aW9uKHQpe3JldHVybih0PSt0KT4tMWUtOCYmdDwxZS04P3QtdCp0LzI6TWF0aC5sb2coMSt0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQ0KSxpPXIoODYpLG89cig2NiksYT1yKDExKSxmPXIoNjUpLHM9T2JqZWN0LmFzc2lnbjt0LmV4cG9ydHM9IXN8fHIoNSkoZnVuY3Rpb24oKXt2YXIgdD17fSxlPXt9LHI9U3ltYm9sKCksbj1cImFiY2RlZmdoaWprbG1ub3BxcnN0XCI7cmV0dXJuIHRbcl09NyxuLnNwbGl0KFwiXCIpLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT10fSksNyE9cyh7fSx0KVtyXXx8T2JqZWN0LmtleXMocyh7fSxlKSkuam9pbihcIlwiKSE9bn0pP2Z1bmN0aW9uKHQsZSl7Zm9yKHZhciByPWEodCkscz1hcmd1bWVudHMubGVuZ3RoLHU9MSxoPWkuZixjPW8uZjtzPnU7KWZvcih2YXIgZCxsPWYoYXJndW1lbnRzW3UrK10pLHA9aD9uKGwpLmNvbmNhdChoKGwpKTpuKGwpLGI9cC5sZW5ndGgsdj0wO2I+djspYy5jYWxsKGwsZD1wW3YrK10pJiYocltkXT1sW2RdKTtyZXR1cm4gcn06c30sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDMpLG89cig0NCk7dC5leHBvcnRzPXIoOCk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24odCxlKXtpKHQpO2Zvcih2YXIgcixhPW8oZSksZj1hLmxlbmd0aCxzPTA7Zj5zOyluLmYodCxyPWFbcysrXSxlW3JdKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE3KSxpPXIoNDMpLmYsbz17fS50b1N0cmluZyxhPVwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXSxmPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4gaSh0KX1jYXRjaCh0KXtyZXR1cm4gYS5zbGljZSgpfX07dC5leHBvcnRzLmY9ZnVuY3Rpb24odCl7cmV0dXJuIGEmJlwiW29iamVjdCBXaW5kb3ddXCI9PW8uY2FsbCh0KT9mKHQpOmkobih0KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMiksaT1yKDE3KSxvPXIoNzgpKCExKSxhPXIoMTMzKShcIklFX1BST1RPXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByLGY9aSh0KSxzPTAsdT1bXTtmb3IociBpbiBmKXIhPWEmJm4oZixyKSYmdS5wdXNoKHIpO2Zvcig7ZS5sZW5ndGg+czspbihmLHI9ZVtzKytdKSYmKH5vKHUscil8fHUucHVzaChyKSk7cmV0dXJuIHV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NCksaT1yKDE3KSxvPXIoNjYpLmY7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHIsYT1pKGUpLGY9bihhKSxzPWYubGVuZ3RoLHU9MCxoPVtdO3M+dTspby5jYWxsKGEscj1mW3UrK10pJiZoLnB1c2godD9bcixhW3JdXTphW3JdKTtyZXR1cm4gaH19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0MyksaT1yKDg2KSxvPXIoMyksYT1yKDQpLlJlZmxlY3Q7dC5leHBvcnRzPWEmJmEub3duS2V5c3x8ZnVuY3Rpb24odCl7dmFyIGU9bi5mKG8odCkpLHI9aS5mO3JldHVybiByP2UuY29uY2F0KHIodCkpOmV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KS5wYXJzZUZsb2F0LGk9cig1OCkudHJpbTt0LmV4cG9ydHM9MS9uKHIoMTM4KStcIi0wXCIpIT09LSgxLzApP2Z1bmN0aW9uKHQpe3ZhciBlPWkoU3RyaW5nKHQpLDMpLHI9bihlKTtyZXR1cm4gMD09PXImJlwiLVwiPT1lLmNoYXJBdCgwKT8tMDpyfTpufSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KS5wYXJzZUludCxpPXIoNTgpLnRyaW0sbz1yKDEzOCksYT0vXltcXC0rXT8wW3hYXS87dC5leHBvcnRzPTghPT1uKG8rXCIwOFwiKXx8MjIhPT1uKG8rXCIweDE2XCIpP2Z1bmN0aW9uKHQsZSl7dmFyIHI9aShTdHJpbmcodCksMyk7cmV0dXJuIG4ocixlPj4+MHx8KGEudGVzdChyKT8xNjoxMCkpfTpufSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1PYmplY3QuaXN8fGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9PT1lPzAhPT10fHwxL3Q9PT0xL2U6dCE9dCYmZSE9ZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwKSxpPXIoMTM3KSxvPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixhKXt2YXIgZj1TdHJpbmcobyh0KSkscz1mLmxlbmd0aCx1PXZvaWQgMD09PXI/XCIgXCI6U3RyaW5nKHIpLGg9bihlKTtpZihoPD1zfHxcIlwiPT11KXJldHVybiBmO3ZhciBjPWgtcyxkPWkuY2FsbCh1LE1hdGguY2VpbChjL3UubGVuZ3RoKSk7cmV0dXJuIGQubGVuZ3RoPmMmJihkPWQuc2xpY2UoMCxjKSksYT9kK2Y6ZitkfX0sZnVuY3Rpb24odCxlLHIpe2UuZj1yKDcpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzEpO3QuZXhwb3J0cz1yKDc5KShcIk1hcFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2dldDpmdW5jdGlvbih0KXt2YXIgZT1uLmdldEVudHJ5KHRoaXMsdCk7cmV0dXJuIGUmJmUudn0sc2V0OmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZGVmKHRoaXMsMD09PXQ/MDp0LGUpfX0sbiwhMCl9LGZ1bmN0aW9uKHQsZSxyKXtyKDgpJiZcImdcIiE9Ly4vZy5mbGFncyYmcig5KS5mKFJlZ0V4cC5wcm90b3R5cGUsXCJmbGFnc1wiLHtjb25maWd1cmFibGU6ITAsZ2V0OnIoODEpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE3MSk7dC5leHBvcnRzPXIoNzkpKFwiU2V0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx7YWRkOmZ1bmN0aW9uKHQpe3JldHVybiBuLmRlZih0aGlzLHQ9MD09PXQ/MDp0LHQpfX0sbil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpPXIoMjcpKDApLG89cigxNSksYT1yKDM2KSxmPXIoMTc5KSxzPXIoMTczKSx1PXIoNiksaD1hLmdldFdlYWssYz1PYmplY3QuaXNFeHRlbnNpYmxlLGQ9cy51ZnN0b3JlLGw9e30scD1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LGI9e2dldDpmdW5jdGlvbih0KXtpZih1KHQpKXt2YXIgZT1oKHQpO3JldHVybiBlPT09ITA/ZCh0aGlzKS5nZXQodCk6ZT9lW3RoaXMuX2ldOnZvaWQgMH19LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBzLmRlZih0aGlzLHQsZSl9fSx2PXQuZXhwb3J0cz1yKDc5KShcIldlYWtNYXBcIixwLGIscywhMCwhMCk7NyE9KG5ldyB2KS5zZXQoKE9iamVjdC5mcmVlemV8fE9iamVjdCkobCksNykuZ2V0KGwpJiYobj1zLmdldENvbnN0cnVjdG9yKHApLGYobi5wcm90b3R5cGUsYiksYS5ORUVEPSEwLGkoW1wiZGVsZXRlXCIsXCJoYXNcIixcImdldFwiLFwic2V0XCJdLGZ1bmN0aW9uKHQpe3ZhciBlPXYucHJvdG90eXBlLHI9ZVt0XTtvKGUsdCxmdW5jdGlvbihlLGkpe2lmKHUoZSkmJiFjKGUpKXt0aGlzLl9mfHwodGhpcy5fZj1uZXcgbik7dmFyIG89dGhpcy5fZlt0XShlLGkpO3JldHVyblwic2V0XCI9PXQ/dGhpczpvfXJldHVybiByLmNhbGwodGhpcyxlLGkpfSl9KSl9LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0KXt0aHJvdyBuZXcgRXJyb3IoXCJDYW5ub3QgZmluZCBtb2R1bGUgJ1wiK3QrXCInLlwiKX1yLmtleXM9ZnVuY3Rpb24oKXtyZXR1cm5bXX0sci5yZXNvbHZlPXIsdC5leHBvcnRzPXIsci5pZD0xOTR9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIGkodCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgbz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe3IodGhpcyxlKTt2YXIgaT1uKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmNhbGwodGhpcykpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm1lc3NhZ2VcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6dm9pZCAwIT09dD9TdHJpbmcodCk6XCJcIn0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShpLFwibmFtZVwiLHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMSx2YWx1ZTppLmNvbnN0cnVjdG9yLm5hbWV9KSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UoaSxpLmNvbnN0cnVjdG9yKSxpfXJldHVybiBpKGUsdCksZX0oRXJyb3IpO3QuZXhwb3J0cz1vfSxmdW5jdGlvbih0LGUscil7cig0ODYpLHQuZXhwb3J0cz1yKDE5NykuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9e3ZlcnNpb246XCIyLjQuMFwifTtcIm51bWJlclwiPT10eXBlb2YgX19lJiYoX19lPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMDApLGk9cigxOTcpLG89cig0NzgpLGE9cig0ODApLGY9XCJwcm90b3R5cGVcIixzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoLGMsZD10JnMuRixsPXQmcy5HLHA9dCZzLlMsYj10JnMuUCx2PXQmcy5CLHk9dCZzLlcsbT1sP2k6aVtlXXx8KGlbZV09e30pLGc9bVtmXSx3PWw/bjpwP25bZV06KG5bZV18fHt9KVtmXTtsJiYocj1lKTtmb3IodSBpbiByKWg9IWQmJncmJnZvaWQgMCE9PXdbdV0saCYmdSBpbiBtfHwoYz1oP3dbdV06clt1XSxtW3VdPWwmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHdbdV0/clt1XTp2JiZoP28oYyxuKTp5JiZ3W3VdPT1jP2Z1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKGUscixuKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGUscil9cmV0dXJuIG5ldyB0KGUscixuKX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlW2ZdPXRbZl0sZX0oYyk6YiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYz9vKEZ1bmN0aW9uLmNhbGwsYyk6YyxiJiYoKG0udmlydHVhbHx8KG0udmlydHVhbD17fSkpW3VdPWMsdCZzLlImJmcmJiFnW3VdJiZhKGcsdSxjKSkpfTtzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHMuVT02NCxzLlI9MTI4LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXt0cnl7cmV0dXJuISF0KCl9Y2F0Y2godCl7cmV0dXJuITB9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj10LmV4cG9ydHM9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PU1hdGg/d2luZG93OlwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCk7XCJudW1iZXJcIj09dHlwZW9mIF9fZyYmKF9fZz1yKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1yKDQ3Myl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7LyohXG4gKiBUaGUgYnVmZmVyIG1vZHVsZSBmcm9tIG5vZGUuanMsIGZvciB0aGUgYnJvd3Nlci5cbiAqXG4gKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz5cbiAqIEBsaWNlbnNlICBNSVRcbiAqL1xuZnVuY3Rpb24gbih0LGUpe2lmKHQ9PT1lKXJldHVybiAwO2Zvcih2YXIgcj10Lmxlbmd0aCxuPWUubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZih0W2ldIT09ZVtpXSl7cj10W2ldLG49ZVtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gZS5CdWZmZXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQnVmZmVyLmlzQnVmZmVyP2UuQnVmZmVyLmlzQnVmZmVyKHQpOiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX1mdW5jdGlvbiBvKHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4haSh0KSYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGUuQXJyYXlCdWZmZXImJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXc/QXJyYXlCdWZmZXIuaXNWaWV3KHQpOiEhdCYmKHQgaW5zdGFuY2VvZiBEYXRhVmlld3x8ISEodC5idWZmZXImJnQuYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKSkpfWZ1bmN0aW9uIGYodCl7aWYody5pc0Z1bmN0aW9uKHQpKXtpZihTKXJldHVybiB0Lm5hbWU7dmFyIGU9dC50b1N0cmluZygpLHI9ZS5tYXRjaChBKTtyZXR1cm4gciYmclsxXX19ZnVuY3Rpb24gcyh0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P3QubGVuZ3RoPGU/dDp0LnNsaWNlKDAsZSk6dH1mdW5jdGlvbiB1KHQpe2lmKFN8fCF3LmlzRnVuY3Rpb24odCkpcmV0dXJuIHcuaW5zcGVjdCh0KTt2YXIgZT1mKHQpLHI9ZT9cIjogXCIrZTpcIlwiO3JldHVyblwiW0Z1bmN0aW9uXCIrcitcIl1cIn1mdW5jdGlvbiBoKHQpe3JldHVybiBzKHUodC5hY3R1YWwpLDEyOCkrXCIgXCIrdC5vcGVyYXRvcitcIiBcIitzKHUodC5leHBlY3RlZCksMTI4KX1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dGhyb3cgbmV3IEUuQXNzZXJ0aW9uRXJyb3Ioe21lc3NhZ2U6cixhY3R1YWw6dCxleHBlY3RlZDplLG9wZXJhdG9yOm4sc3RhY2tTdGFydEZ1bmN0aW9uOml9KX1mdW5jdGlvbiBkKHQsZSl7dHx8Yyh0LCEwLGUsXCI9PVwiLEUub2spfWZ1bmN0aW9uIGwodCxlLHIsZil7aWYodD09PWUpcmV0dXJuITA7aWYoaSh0KSYmaShlKSlyZXR1cm4gMD09PW4odCxlKTtpZih3LmlzRGF0ZSh0KSYmdy5pc0RhdGUoZSkpcmV0dXJuIHQuZ2V0VGltZSgpPT09ZS5nZXRUaW1lKCk7aWYody5pc1JlZ0V4cCh0KSYmdy5pc1JlZ0V4cChlKSlyZXR1cm4gdC5zb3VyY2U9PT1lLnNvdXJjZSYmdC5nbG9iYWw9PT1lLmdsb2JhbCYmdC5tdWx0aWxpbmU9PT1lLm11bHRpbGluZSYmdC5sYXN0SW5kZXg9PT1lLmxhc3RJbmRleCYmdC5pZ25vcmVDYXNlPT09ZS5pZ25vcmVDYXNlO2lmKG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdHx8bnVsbCE9PWUmJlwib2JqZWN0XCI9PXR5cGVvZiBlKXtpZihhKHQpJiZhKGUpJiZvKHQpPT09byhlKSYmISh0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5fHx0IGluc3RhbmNlb2YgRmxvYXQ2NEFycmF5KSlyZXR1cm4gMD09PW4obmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSk7aWYoaSh0KSE9PWkoZSkpcmV0dXJuITE7Zj1mfHx7YWN0dWFsOltdLGV4cGVjdGVkOltdfTt2YXIgcz1mLmFjdHVhbC5pbmRleE9mKHQpO3JldHVybiBzIT09LTEmJnM9PT1mLmV4cGVjdGVkLmluZGV4T2YoZSl8fChmLmFjdHVhbC5wdXNoKHQpLGYuZXhwZWN0ZWQucHVzaChlKSxiKHQsZSxyLGYpKX1yZXR1cm4gcj90PT09ZTp0PT1lfWZ1bmN0aW9uIHAodCl7cmV0dXJuXCJbb2JqZWN0IEFyZ3VtZW50c11cIj09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGIodCxlLHIsbil7aWYobnVsbD09PXR8fHZvaWQgMD09PXR8fG51bGw9PT1lfHx2b2lkIDA9PT1lKXJldHVybiExO2lmKHcuaXNQcmltaXRpdmUodCl8fHcuaXNQcmltaXRpdmUoZSkpcmV0dXJuIHQ9PT1lO2lmKHImJk9iamVjdC5nZXRQcm90b3R5cGVPZih0KSE9PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSlyZXR1cm4hMTt2YXIgaT1wKHQpLG89cChlKTtpZihpJiYhb3x8IWkmJm8pcmV0dXJuITE7aWYoaSlyZXR1cm4gdD1NLmNhbGwodCksZT1NLmNhbGwoZSksbCh0LGUscik7dmFyIGEsZixzPWsodCksdT1rKGUpO2lmKHMubGVuZ3RoIT09dS5sZW5ndGgpcmV0dXJuITE7Zm9yKHMuc29ydCgpLHUuc29ydCgpLGY9cy5sZW5ndGgtMTtmPj0wO2YtLSlpZihzW2ZdIT09dVtmXSlyZXR1cm4hMTtmb3IoZj1zLmxlbmd0aC0xO2Y+PTA7Zi0tKWlmKGE9c1tmXSwhbCh0W2FdLGVbYV0scixuKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiB2KHQsZSxyKXtsKHQsZSwhMCkmJmModCxlLHIsXCJub3REZWVwU3RyaWN0RXF1YWxcIix2KX1mdW5jdGlvbiB5KHQsZSl7aWYoIXR8fCFlKXJldHVybiExO2lmKFwiW29iamVjdCBSZWdFeHBdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gZS50ZXN0KHQpO3RyeXtpZih0IGluc3RhbmNlb2YgZSlyZXR1cm4hMH1jYXRjaCh0KXt9cmV0dXJuIUVycm9yLmlzUHJvdG90eXBlT2YoZSkmJmUuY2FsbCh7fSx0KT09PSEwfWZ1bmN0aW9uIG0odCl7dmFyIGU7dHJ5e3QoKX1jYXRjaCh0KXtlPXR9cmV0dXJuIGV9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaTtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYmxvY2tcIiBhcmd1bWVudCBtdXN0IGJlIGEgZnVuY3Rpb24nKTtcInN0cmluZ1wiPT10eXBlb2YgciYmKG49cixyPW51bGwpLGk9bShlKSxuPShyJiZyLm5hbWU/XCIgKFwiK3IubmFtZStcIikuXCI6XCIuXCIpKyhuP1wiIFwiK246XCIuXCIpLHQmJiFpJiZjKGkscixcIk1pc3NpbmcgZXhwZWN0ZWQgZXhjZXB0aW9uXCIrbik7dmFyIG89XCJzdHJpbmdcIj09dHlwZW9mIG4sYT0hdCYmdy5pc0Vycm9yKGkpLGY9IXQmJmkmJiFyO2lmKChhJiZvJiZ5KGkscil8fGYpJiZjKGkscixcIkdvdCB1bndhbnRlZCBleGNlcHRpb25cIituKSx0JiZpJiZyJiYheShpLHIpfHwhdCYmaSl0aHJvdyBpfXZhciB3PXIoNjA2KSxfPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksTT1BcnJheS5wcm90b3R5cGUuc2xpY2UsUz1mdW5jdGlvbigpe3JldHVyblwiZm9vXCI9PT1mdW5jdGlvbigpe30ubmFtZX0oKSxFPXQuZXhwb3J0cz1kLEE9L1xccypmdW5jdGlvblxccysoW15cXChcXHNdKilcXHMqLztFLkFzc2VydGlvbkVycm9yPWZ1bmN0aW9uKHQpe3RoaXMubmFtZT1cIkFzc2VydGlvbkVycm9yXCIsdGhpcy5hY3R1YWw9dC5hY3R1YWwsdGhpcy5leHBlY3RlZD10LmV4cGVjdGVkLHRoaXMub3BlcmF0b3I9dC5vcGVyYXRvcix0Lm1lc3NhZ2U/KHRoaXMubWVzc2FnZT10Lm1lc3NhZ2UsdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSExKToodGhpcy5tZXNzYWdlPWgodGhpcyksdGhpcy5nZW5lcmF0ZWRNZXNzYWdlPSEwKTt2YXIgZT10LnN0YWNrU3RhcnRGdW5jdGlvbnx8YztpZihFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSlFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGUpO2Vsc2V7dmFyIHI9bmV3IEVycm9yO2lmKHIuc3RhY2spe3ZhciBuPXIuc3RhY2ssaT1mKGUpLG89bi5pbmRleE9mKFwiXFxuXCIraSk7aWYobz49MCl7dmFyIGE9bi5pbmRleE9mKFwiXFxuXCIsbysxKTtuPW4uc3Vic3RyaW5nKGErMSl9dGhpcy5zdGFjaz1ufX19LHcuaW5oZXJpdHMoRS5Bc3NlcnRpb25FcnJvcixFcnJvciksRS5mYWlsPWMsRS5vaz1kLEUuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe3QhPWUmJmModCxlLHIsXCI9PVwiLEUuZXF1YWwpfSxFLm5vdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT1lJiZjKHQsZSxyLFwiIT1cIixFLm5vdEVxdWFsKX0sRS5kZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCExKXx8Yyh0LGUscixcImRlZXBFcXVhbFwiLEUuZGVlcEVxdWFsKX0sRS5kZWVwU3RyaWN0RXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCEwKXx8Yyh0LGUscixcImRlZXBTdHJpY3RFcXVhbFwiLEUuZGVlcFN0cmljdEVxdWFsKX0sRS5ub3REZWVwRXF1YWw9ZnVuY3Rpb24odCxlLHIpe2wodCxlLCExKSYmYyh0LGUscixcIm5vdERlZXBFcXVhbFwiLEUubm90RGVlcEVxdWFsKX0sRS5ub3REZWVwU3RyaWN0RXF1YWw9dixFLnN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT09ZSYmYyh0LGUscixcIj09PVwiLEUuc3RyaWN0RXF1YWwpfSxFLm5vdFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0PT09ZSYmYyh0LGUscixcIiE9PVwiLEUubm90U3RyaWN0RXF1YWwpfSxFLnRocm93cz1mdW5jdGlvbih0LGUscil7ZyghMCx0LGUscil9LEUuZG9lc05vdFRocm93PWZ1bmN0aW9uKHQsZSxyKXtnKCExLHQsZSxyKX0sRS5pZkVycm9yPWZ1bmN0aW9uKHQpe2lmKHQpdGhyb3cgdH07dmFyIGs9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KV8uY2FsbCh0LHIpJiZlLnB1c2gocik7cmV0dXJuIGV9fSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixpLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LHIsaSk7YS5jYWxsKHRoaXMpLHRoaXMuX2ZpbklEPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwxXSldKSxpPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwyXSldKSx0aGlzLl9jaXBoZXI9bmV3IG8uQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoaS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9Zix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsaS5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9dDt2YXIgdT1uZXcgZSg0KTt1LmZpbGwoMCksdGhpcy5fZ2hhc2g9bmV3IHModGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh1KSksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MDt0Lmxlbmd0aCE9PWUubGVuZ3RoJiZyKys7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPS0xOysraTxuOylyKz10W2ldXmVbaV07cmV0dXJuIHJ9dmFyIG89cig5NCksYT1yKDk3KSxmPXIoMikscz1yKDQ5NyksdT1yKDY3KTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDY3KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoOTQpLG89cig5NyksYT1yKDIpO2EobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2VbXCJSU0EtU0hBMjI0XCJdPWUuc2hhMjI0V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMjI0XCIsaWQ6bmV3IHQoXCIzMDJkMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDQwNTAwMDQxY1wiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTI1NlwiXT1lLnNoYTI1NldpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTI1NlwiLGlkOm5ldyB0KFwiMzAzMTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAxMDUwMDA0MjBcIixcImhleFwiKX0sZVtcIlJTQS1TSEEzODRcIl09ZS5zaGEzODRXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpuZXcgdChcIjMwNDEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMjA1MDAwNDMwXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBNTEyXCJdPWUuc2hhNTEyV2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhNTEyXCIsaWQ6bmV3IHQoXCIzMDUxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDMwNTAwMDQ0MFwiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTFcIl09e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMVwiLGlkOm5ldyB0KFwiMzAyMTMwMDkwNjA1MmIwZTAzMDIxYTA1MDAwNDE0XCIsXCJoZXhcIil9LGVbXCJlY2RzYS13aXRoLVNIQTFcIl09e3NpZ246XCJlY2RzYVwiLGhhc2g6XCJzaGExXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZS5EU0E9ZVtcIkRTQS1TSEExXCJdPWVbXCJEU0EtU0hBXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTFcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTIyNFwiXT1lW1wiRFNBLVdJVEgtU0hBMjI0XCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTIyNFwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBMjU2XCJdPWVbXCJEU0EtV0lUSC1TSEEyNTZcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMjU2XCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEEzODRcIl09ZVtcIkRTQS1XSVRILVNIQTM4NFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEzODRcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTUxMlwiXT1lW1wiRFNBLVdJVEgtU0hBNTEyXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTUxMlwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtUklQRU1EMTYwXCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInJtZDE2MFwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJSU0EtUklQRU1EMTYwXCJdPWUucmlwZW1kMTYwV2l0aFJTQT17c2lnbjpcInJzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpuZXcgdChcIjMwMjEzMDA5MDYwNTJiMjQwMzAyMDEwNTAwMDQxNFwiLFwiaGV4XCIpfSxlW1wiUlNBLU1ENVwiXT1lLm1kNVdpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcIm1kNVwiLGlkOm5ldyB0KFwiMzAyMDMwMGMwNjA4MmE4NjQ4ODZmNzBkMDIwNTA1MDAwNDEwXCIsXCJoZXhcIil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtlW1wiMS4zLjEzMi4wLjEwXCJdPVwic2VjcDI1NmsxXCIsZVtcIjEuMy4xMzIuMC4zM1wiXT1cInAyMjRcIixlW1wiMS4yLjg0MC4xMDA0NS4zLjEuMVwiXT1cInAxOTJcIixlW1wiMS4yLjg0MC4xMDA0NS4zLjEuN1wiXT1cInAyNTZcIixlW1wiMS4zLjEzMi4wLjM0XCJdPVwicDM4NFwiLGVbXCIxLjMuMTMyLjAuMzVcIl09XCJwNTIxXCJ9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcjtcIm9iamVjdFwiIT10eXBlb2YgdHx8ZS5pc0J1ZmZlcih0KXx8KHI9dC5wYXNzcGhyYXNlLHQ9dC5rZXkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0KSk7dmFyIG4sYSxzPWYodCxyKSx1PXMudGFnLGg9cy5kYXRhO3N3aXRjaCh1KXtjYXNlXCJQVUJMSUMgS0VZXCI6c3dpdGNoKGE9by5QdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybiBhLnN1YmplY3RQcml2YXRlS2V5PWEuc3ViamVjdFB1YmxpY0tleSx7dHlwZTpcImVjXCIsZGF0YTphfTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKSx7dHlwZTpcImRzYVwiLGRhdGE6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCI6aD1vLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksaD1pKGgscik7Y2FzZVwiUFJJVkFURSBLRVlcIjpzd2l0Y2goYT1vLlByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybntjdXJ2ZTphLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5Om8uRUNQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLnByaXZhdGVLZXl9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIscGFyYW1zOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIlJTQSBQVUJMSUMgS0VZXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIlJTQSBQUklWQVRFIEtFWVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiRFNBIFBSSVZBVEUgS0VZXCI6cmV0dXJue3R5cGU6XCJkc2FcIixwYXJhbXM6by5EU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpfTtjYXNlXCJFQyBQUklWQVRFIEtFWVwiOnJldHVybiBoPW8uRUNQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLHtjdXJ2ZTpoLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpoLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LGk9cGFyc2VJbnQodC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLG89YVt0LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oXCIuXCIpXSxmPXQuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGg9dC5zdWJqZWN0UHJpdmF0ZUtleSxjPXBhcnNlSW50KG8uc3BsaXQoXCItXCIpWzFdLDEwKS84LGQ9dS5wYmtkZjJTeW5jKHIsbixpLGMpLGw9cy5jcmVhdGVEZWNpcGhlcml2KG8sZCxmKSxwPVtdO3JldHVybiBwLnB1c2gobC51cGRhdGUoaCkpLHAucHVzaChsLmZpbmFsKCkpLGUuY29uY2F0KHApfXZhciBvPXIoNTI4KSxhPXIoNDY2KSxmPXIoNTI5KSxzPXIoMjE5KSx1PXIoMTUxKTt0LmV4cG9ydHM9bixuLnNpZ25hdHVyZT1vLnNpZ25hdHVyZX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEuY2FsbCh0aGlzLGUpLGYuaXNCdWZmZXIodCk/KHRoaXMuYmFzZT10LHRoaXMub2Zmc2V0PTAsdm9pZCh0aGlzLmxlbmd0aD10Lmxlbmd0aCkpOnZvaWQgdGhpcy5lcnJvcihcIklucHV0IG5vdCBCdWZmZXJcIil9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8KHQ9bmV3IGkodCxlKSksdGhpcy5sZW5ndGgrPXQubGVuZ3RoLHR9LHRoaXMpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKCEoMDw9dCYmdDw9MjU1KSlyZXR1cm4gZS5lcnJvcihcIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWVcIik7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPTF9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9Zi5ieXRlTGVuZ3RoKHQpO2Vsc2V7aWYoIWYuaXNCdWZmZXIodCkpcmV0dXJuIGUuZXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlOiBcIit0eXBlb2YgdCk7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPXQubGVuZ3RofX12YXIgbz1yKDIpLGE9cig2OCkuUmVwb3J0ZXIsZj1yKDEpLkJ1ZmZlcjtvKG4sYSksZS5EZWNvZGVyQnVmZmVyPW4sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6YS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbih0aGlzLmJhc2UpO3JldHVybiBlLm9mZnNldD10Lm9mZnNldCxlLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD10Lm9mZnNldCxhLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx0LnJlcG9ydGVyKSxlfSxuLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKHR8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpfSxuLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzLm9mZnNldCt0PD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoZXx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIik7dmFyIHI9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gci5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHIub2Zmc2V0PXRoaXMub2Zmc2V0LHIubGVuZ3RoPXRoaXMub2Zmc2V0K3QsdGhpcy5vZmZzZXQrPXQscn0sbi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UodD90Lm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LGUuRW5jb2RlckJ1ZmZlcj1pLGkucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHx8KHQ9bmV3IGYodGhpcy5sZW5ndGgpKSxlfHwoZT0wKSwwPT09dGhpcy5sZW5ndGg/dDooQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24ocil7ci5qb2luKHQsZSksZSs9ci5sZW5ndGh9KTooXCJudW1iZXJcIj09dHlwZW9mIHRoaXMudmFsdWU/dFtlXT10aGlzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3Qud3JpdGUodGhpcy52YWx1ZSxlKTpmLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkodCxlKSxlKz10aGlzLmxlbmd0aCksdCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLl9yZXZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSxuLmRlcj1yKDUzMyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe3UuTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5yZWFkVUludDgoZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWMudGFnQ2xhc3Nbcj4+Nl0saT0wPT09KDMyJnIpO2lmKDMxPT09KDMxJnIpKXt2YXIgbz1yO2ZvcihyPTA7MTI4PT09KDEyOCZvKTspe2lmKG89dC5yZWFkVUludDgoZSksdC5pc0Vycm9yKG8pKXJldHVybiBvO3I8PD03LHJ8PTEyNyZvfX1lbHNlIHImPTMxO3ZhciBhPWMudGFnW3JdO3JldHVybntjbHM6bixwcmltaXRpdmU6aSx0YWc6cix0YWdTdHI6YX19ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKCFlJiYxMjg9PT1uKXJldHVybiBudWxsO2lmKDA9PT0oMTI4Jm4pKXJldHVybiBuO3ZhciBpPTEyNyZuO2lmKGk+PTQpcmV0dXJuIHQuZXJyb3IoXCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nXCIpO249MDtmb3IodmFyIG89MDtvPGk7bysrKXtuPDw9ODt2YXIgYT10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IoYSkpcmV0dXJuIGE7bnw9YX1yZXR1cm4gbn12YXIgZj1yKDIpLHM9cigxMDApLHU9cy5iYXNlLGg9cy5iaWdudW0sYz1zLmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1LkRlY29kZXJCdWZmZXJ8fCh0PW5ldyB1LkRlY29kZXJCdWZmZXIodCxlKSksdGhpcy50cmVlLl9kZWNvZGUodCxlKX0sZihpLHUuTm9kZSksaS5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaXNFbXB0eSgpKXJldHVybiExO3ZhciBuPXQuc2F2ZSgpLGk9byh0LCdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJytlKydcIicpO3JldHVybiB0LmlzRXJyb3IoaSk/aToodC5yZXN0b3JlKG4pLGkudGFnPT09ZXx8aS50YWdTdHI9PT1lfHxpLnRhZ1N0citcIm9mXCI9PT1lfHxyKX0saS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbih0LGUscil7dmFyIG49byh0LCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk9YSh0LG4ucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoIXImJm4udGFnIT09ZSYmbi50YWdTdHIhPT1lJiZuLnRhZ1N0citcIm9mXCIhPT1lKXJldHVybiB0LmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicrZSsnXCInKTtpZihuLnByaW1pdGl2ZXx8bnVsbCE9PWkpcmV0dXJuIHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJyk7dmFyIGY9dC5zYXZlKCkscz10aGlzLl9za2lwVW50aWxFbmQodCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogXCInK3RoaXMudGFnKydcIicpO3JldHVybiB0LmlzRXJyb3Iocyk/czooaT10Lm9mZnNldC1mLm9mZnNldCx0LnJlc3RvcmUoZiksdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKSl9LGkucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24odCxlKXtmb3IoOzspe3ZhciByPW8odCxlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49YSh0LHIucHJpbWl0aXZlLGUpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaTtpZihpPXIucHJpbWl0aXZlfHxudWxsIT09bj90LnNraXAobik6dGhpcy5fc2tpcFVudGlsRW5kKHQsZSksdC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKFwiZW5kXCI9PT1yLnRhZ1N0cilicmVha319LGkucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1bXTshdC5pc0VtcHR5KCk7KXt2YXIgbz10aGlzLl9wZWVrVGFnKHQsXCJlbmRcIik7aWYodC5pc0Vycm9yKG8pKXJldHVybiBvO3ZhciBhPXIuZGVjb2RlKHQsXCJkZXJcIixuKTtpZih0LmlzRXJyb3IoYSkmJm8pYnJlYWs7aS5wdXNoKGEpfXJldHVybiBpfSxpLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpe3ZhciByPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihyKT9yOnt1bnVzZWQ6cixkYXRhOnQucmF3KCl9fWlmKFwiYm1wc3RyXCI9PT1lKXt2YXIgbj10LnJhdygpO2lmKG4ubGVuZ3RoJTI9PT0xKXJldHVybiB0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2hcIik7Zm9yKHZhciBpPVwiXCIsbz0wO288bi5sZW5ndGgvMjtvKyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuLnJlYWRVSW50MTZCRSgyKm8pKTtyZXR1cm4gaX1pZihcIm51bXN0clwiPT09ZSl7dmFyIGE9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc051bXN0cihhKT9hOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9aWYoXCJvY3RzdHJcIj09PWUpcmV0dXJuIHQucmF3KCk7aWYoXCJwcmludHN0clwiPT09ZSl7dmFyIGY9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKGYpP2Y6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfXJldHVybi9zdHIkLy50ZXN0KGUpP3QucmF3KCkudG9TdHJpbmcoKTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9W10sbz0wOyF0LmlzRW1wdHkoKTspe3ZhciBhPXQucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBmPWlbMF0vNDB8MCxzPWlbMF0lNDA7aWYobj1yP2k6W2Ysc10uY29uY2F0KGkuc2xpY2UoMSkpLGUpe3ZhciB1PWVbbi5qb2luKFwiIFwiKV07dm9pZCAwPT09dSYmKHU9ZVtuLmpvaW4oXCIuXCIpXSksdm9pZCAwIT09dSYmKG49dSl9cmV0dXJuIG59LGkucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKS50b1N0cmluZygpO2lmKFwiZ2VudGltZVwiPT09ZSl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCksZj0wfHIuc2xpY2UoMTAsMTIpLHM9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKFwidXRjdGltZVwiIT09ZSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTt2YXIgbj0wfHIuc2xpY2UoMCwyKSxpPTB8ci5zbGljZSgyLDQpLG89MHxyLnNsaWNlKDQsNiksYT0wfHIuc2xpY2UoNiw4KSxmPTB8ci5zbGljZSg4LDEwKSxzPTB8ci5zbGljZSgxMCwxMik7bj1uPDcwPzJlMytuOjE5MDArbn1yZXR1cm4gRGF0ZS5VVEMobixpLTEsbyxhLGYscywwKX0saS5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihlKT9lOjAhPT1lfSxpLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKSxuPW5ldyBoKHIpO3JldHVybiBlJiYobj1lW24udG9TdHJpbmcoMTApXXx8biksbn0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldERlY29kZXIoXCJkZXJcIikudHJlZX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe2guTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDEwP1wiMFwiK3Q6dH1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpO2lmKFwic2Vxb2ZcIj09PXQ/dD1cInNlcVwiOlwic2V0b2ZcIj09PXQmJih0PVwic2V0XCIpLGMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHQpKWk9Yy50YWdCeU5hbWVbdF07ZWxzZXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8KDB8dCkhPT10KXJldHVybiBuLmVycm9yKFwiVW5rbm93biB0YWc6IFwiK3QpO2k9dH1yZXR1cm4gaT49MzE/bi5lcnJvcihcIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZFwiKTooZXx8KGl8PTMyKSxpfD1jLnRhZ0NsYXNzQnlOYW1lW3J8fFwidW5pdmVyc2FsXCJdPDw2KX12YXIgZj1yKDIpLHM9cigxKS5CdWZmZXIsdT1yKDEwMCksaD11LmJhc2UsYz11LmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKHQsZSkuam9pbigpfSxmKGksaC5Ob2RlKSxpLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWEodCxlLHIsdGhpcy5yZXBvcnRlcik7aWYobi5sZW5ndGg8MTI4KXt2YXIgbz1uZXcgcygyKTtyZXR1cm4gb1swXT1pLG9bMV09bi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9Zm9yKHZhciBmPTEsdT1uLmxlbmd0aDt1Pj0yNTY7dT4+PTgpZisrO3ZhciBvPW5ldyBzKDIrZik7b1swXT1pLG9bMV09MTI4fGY7Zm9yKHZhciB1PTErZixoPW4ubGVuZ3RoO2g+MDt1LS0saD4+PTgpb1t1XT0yNTUmaDtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGkucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHx0LnVudXNlZCx0LmRhdGFdKTtpZihcImJtcHN0clwiPT09ZSl7Zm9yKHZhciByPW5ldyBzKDIqdC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyLndyaXRlVUludDE2QkUodC5jaGFyQ29kZUF0KG4pLDIqbik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocil9cmV0dXJuXCJudW1zdHJcIj09PWU/dGhpcy5faXNOdW1zdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2VcIik6XCJwcmludHN0clwiPT09ZT90aGlzLl9pc1ByaW50c3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrXCIpOi9zdHIkLy50ZXN0KGUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmRcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcFwiKTt0PWVbdF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dD10LnNsaWNlKCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogXCIrSlNPTi5zdHJpbmdpZnkodCkpO2lmKCFyKXtpZih0WzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQlwiKTt0LnNwbGljZSgwLDIsNDAqdFswXSt0WzFdKX1mb3IodmFyIGk9MCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07Zm9yKGkrKztvPj0xMjg7bz4+PTcpaSsrfWZvcih2YXIgYT1uZXcgcyhpKSxmPWEubGVuZ3RoLTEsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz10W25dO2ZvcihhW2YtLV09MTI3Jm87KG8+Pj03KT4wOylhW2YtLV09MTI4fDEyNyZvfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpfSxpLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByLG49bmV3IERhdGUodCk7cmV0dXJuXCJnZW50aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6XCJ1dGN0aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpJTEwMCksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIiksdGhpcy5fZW5jb2RlU3RyKHIsXCJvY3RzdHJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoXCJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46IFwiK0pTT04uc3RyaW5naWZ5KHQpKTt0PWVbdF19aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJiFzLmlzQnVmZmVyKHQpKXt2YXIgcj10LnRvQXJyYXkoKTshdC5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLHQ9bmV3IHMocil9aWYocy5pc0J1ZmZlcih0KSl7dmFyIG49dC5sZW5ndGg7MD09PXQubGVuZ3RoJiZuKys7dmFyIGk9bmV3IHMobik7cmV0dXJuIHQuY29weShpKSwwPT09dC5sZW5ndGgmJihpWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaSl9aWYodDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7aWYodDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsdF0pO2Zvcih2YXIgbj0xLG89dDtvPj0yNTY7bz4+PTgpbisrO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksbz1pLmxlbmd0aC0xO28+PTA7by0tKWlbb109MjU1JnQsdD4+PTg7cmV0dXJuIDEyOCZpWzBdJiZpLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgcyhpKSl9LGkucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQ/MjU1OjApfSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RW5jb2RlcihcImRlclwiKS50cmVlfSxpLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuITE7dmFyIG89dC5qb2luKCk7aWYodm9pZCAwPT09aS5kZWZhdWx0QnVmZmVyJiYoaS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKGkuZGVmYXVsdCxlLHIpLmpvaW4oKSksby5sZW5ndGghPT1pLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspaWYob1tuXSE9PWkuZGVmYXVsdEJ1ZmZlcltuXSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoMTAxKSxhPXIoMTAzKSxmPXIoMikscz1yKDU0MSksdT1yKDY5KTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNTQwKTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDUzOSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cigxNDcpO2UubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPW59LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDY5KTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoMTAxKSxvPXIoMTAzKSxhPXIoMik7YShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9bCxjLmNhbGwodGhpcyw2NCw1Nil9ZnVuY3Rpb24gaSh0LGUscil7cmV0dXJuIHJedCYoZV5yKX1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gdCZlfHImKHR8ZSl9ZnVuY3Rpb24gYSh0KXtyZXR1cm4odD4+PjJ8dDw8MzApXih0Pj4+MTN8dDw8MTkpXih0Pj4+MjJ8dDw8MTApfWZ1bmN0aW9uIGYodCl7cmV0dXJuKHQ+Pj42fHQ8PDI2KV4odD4+PjExfHQ8PDIxKV4odD4+PjI1fHQ8PDcpfWZ1bmN0aW9uIHModCl7cmV0dXJuKHQ+Pj43fHQ8PDI1KV4odD4+PjE4fHQ8PDE0KV50Pj4+M31mdW5jdGlvbiB1KHQpe3JldHVybih0Pj4+MTd8dDw8MTUpXih0Pj4+MTl8dDw8MTMpXnQ+Pj4xMH12YXIgaD1yKDIpLGM9cig2MCksZD1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxsPW5ldyBBcnJheSg2NCk7aChuLGMpLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0xNzc5MDMzNzAzLHRoaXMuX2I9MzE0NDEzNDI3Nyx0aGlzLl9jPTEwMTM5MDQyNDIsdGhpcy5fZD0yNzczNDgwNzYyLHRoaXMuX2U9MTM1OTg5MzExOSx0aGlzLl9mPTI2MDA4MjI5MjQsdGhpcy5fZz01Mjg3MzQ2MzUsdGhpcy5faD0xNTQxNDU5MjI1LHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2Esbj0wfHRoaXMuX2IsaD0wfHRoaXMuX2MsYz0wfHRoaXMuX2QsbD0wfHRoaXMuX2UscD0wfHRoaXMuX2YsYj0wfHRoaXMuX2csdj0wfHRoaXMuX2gseT0wO3k8MTY7Kyt5KWVbeV09dC5yZWFkSW50MzJCRSg0KnkpO2Zvcig7eTw2NDsrK3kpZVt5XT11KGVbeS0yXSkrZVt5LTddK3MoZVt5LTE1XSkrZVt5LTE2XXwwO2Zvcih2YXIgbT0wO208NjQ7KyttKXt2YXIgZz12K2YobCkraShsLHAsYikrZFttXStlW21dfDAsdz1hKHIpK28ocixuLGgpfDA7dj1iLGI9cCxwPWwsbD1jK2d8MCxjPWgsaD1uLG49cixyPWcrd3wwfXRoaXMuX2E9cit0aGlzLl9hfDAsdGhpcy5fYj1uK3RoaXMuX2J8MCx0aGlzLl9jPWgrdGhpcy5fY3wwLHRoaXMuX2Q9Yyt0aGlzLl9kfDAsdGhpcy5fZT1sK3RoaXMuX2V8MCx0aGlzLl9mPXArdGhpcy5fZnwwLHRoaXMuX2c9Yit0aGlzLl9nfDAsdGhpcy5faD12K3RoaXMuX2h8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgzMik7cmV0dXJuIHQud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUodGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2gsMjgpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz12LHAuY2FsbCh0aGlzLDEyOCwxMTIpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiByXnQmKGVecil9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHQmZXxyJih0fGUpfWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4odD4+PjI4fGU8PDQpXihlPj4+Mnx0PDwzMCleKGU+Pj43fHQ8PDI1KX1mdW5jdGlvbiBmKHQsZSl7cmV0dXJuKHQ+Pj4xNHxlPDwxOCleKHQ+Pj4xOHxlPDwxNCleKGU+Pj45fHQ8PDIzKX1mdW5jdGlvbiBzKHQsZSl7cmV0dXJuKHQ+Pj4xfGU8PDMxKV4odD4+Pjh8ZTw8MjQpXnQ+Pj43fWZ1bmN0aW9uIHUodCxlKXtyZXR1cm4odD4+PjF8ZTw8MzEpXih0Pj4+OHxlPDwyNCleKHQ+Pj43fGU8PDI1KX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuKHQ+Pj4xOXxlPDwxMyleKGU+Pj4yOXx0PDwzKV50Pj4+Nn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuKHQ+Pj4xOXxlPDwxMyleKGU+Pj4yOXx0PDwzKV4odD4+PjZ8ZTw8MjYpfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdD4+PjA8ZT4+PjA/MTowfXZhciBsPXIoMikscD1yKDYwKSxiPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sdj1uZXcgQXJyYXkoMTYwKTtsKG4scCksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0xNzc5MDMzNzAzLHRoaXMuX2JoPTMxNDQxMzQyNzcsdGhpcy5fY2g9MTAxMzkwNDI0Mix0aGlzLl9kaD0yNzczNDgwNzYyLHRoaXMuX2VoPTEzNTk4OTMxMTksdGhpcy5fZmg9MjYwMDgyMjkyNCx0aGlzLl9naD01Mjg3MzQ2MzUsdGhpcy5faGg9MTU0MTQ1OTIyNSx0aGlzLl9hbD00MDg5MjM1NzIwLHRoaXMuX2JsPTIyMjc4NzM1OTUsdGhpcy5fY2w9NDI3MTE3NTcyMyx0aGlzLl9kbD0xNTk1NzUwMTI5LHRoaXMuX2VsPTI5MTc1NjUxMzcsdGhpcy5fZmw9NzI1NTExMTk5LHRoaXMuX2dsPTQyMTUzODk1NDcsdGhpcy5faGw9MzI3MDMzMjA5LHRoaXN9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMuX3cscj0wfHRoaXMuX2FoLG49MHx0aGlzLl9iaCxsPTB8dGhpcy5fY2gscD0wfHRoaXMuX2RoLHY9MHx0aGlzLl9laCx5PTB8dGhpcy5fZmgsbT0wfHRoaXMuX2doLGc9MHx0aGlzLl9oaCx3PTB8dGhpcy5fYWwsXz0wfHRoaXMuX2JsLE09MHx0aGlzLl9jbCxTPTB8dGhpcy5fZGwsRT0wfHRoaXMuX2VsLEE9MHx0aGlzLl9mbCxrPTB8dGhpcy5fZ2wseD0wfHRoaXMuX2hsLEk9MDtJPDMyO0krPTIpZVtJXT10LnJlYWRJbnQzMkJFKDQqSSksZVtJKzFdPXQucmVhZEludDMyQkUoNCpJKzQpO2Zvcig7STwxNjA7SSs9Mil7dmFyIEI9ZVtJLTMwXSxPPWVbSS0zMCsxXSxSPXMoQixPKSxQPXUoTyxCKTtcbkI9ZVtJLTRdLE89ZVtJLTQrMV07dmFyIFQ9aChCLE8pLGo9YyhPLEIpLEM9ZVtJLTE0XSxOPWVbSS0xNCsxXSxMPWVbSS0zMl0sVT1lW0ktMzIrMV0sej1QK058MCxEPVIrQytkKHosUCl8MDt6PXoranwwLEQ9RCtUK2QoeixqKXwwLHo9eitVfDAsRD1EK0wrZCh6LFUpfDAsZVtJXT1ELGVbSSsxXT16fWZvcih2YXIgcT0wO3E8MTYwO3ErPTIpe0Q9ZVtxXSx6PWVbcSsxXTt2YXIgRj1vKHIsbixsKSxLPW8odyxfLE0pLEc9YShyLHcpLFY9YSh3LHIpLEg9Zih2LEUpLFg9ZihFLHYpLFk9YltxXSxXPWJbcSsxXSxaPWkodix5LG0pLEo9aShFLEEsayksJD14K1h8MCxRPWcrSCtkKCQseCl8MDskPSQrSnwwLFE9UStaK2QoJCxKKXwwLCQ9JCtXfDAsUT1RK1krZCgkLFcpfDAsJD0kK3p8MCxRPVErRCtkKCQseil8MDt2YXIgdHQ9VitLfDAsZXQ9RytGK2QodHQsVil8MDtnPW0seD1rLG09eSxrPUEseT12LEE9RSxFPVMrJHwwLHY9cCtRK2QoRSxTKXwwLHA9bCxTPU0sbD1uLE09XyxuPXIsXz13LHc9JCt0dHwwLHI9UStldCtkKHcsJCl8MH10aGlzLl9hbD10aGlzLl9hbCt3fDAsdGhpcy5fYmw9dGhpcy5fYmwrX3wwLHRoaXMuX2NsPXRoaXMuX2NsK018MCx0aGlzLl9kbD10aGlzLl9kbCtTfDAsdGhpcy5fZWw9dGhpcy5fZWwrRXwwLHRoaXMuX2ZsPXRoaXMuX2ZsK0F8MCx0aGlzLl9nbD10aGlzLl9nbCtrfDAsdGhpcy5faGw9dGhpcy5faGwreHwwLHRoaXMuX2FoPXRoaXMuX2FoK3IrZCh0aGlzLl9hbCx3KXwwLHRoaXMuX2JoPXRoaXMuX2JoK24rZCh0aGlzLl9ibCxfKXwwLHRoaXMuX2NoPXRoaXMuX2NoK2wrZCh0aGlzLl9jbCxNKXwwLHRoaXMuX2RoPXRoaXMuX2RoK3ArZCh0aGlzLl9kbCxTKXwwLHRoaXMuX2VoPXRoaXMuX2VoK3YrZCh0aGlzLl9lbCxFKXwwLHRoaXMuX2ZoPXRoaXMuX2ZoK3krZCh0aGlzLl9mbCxBKXwwLHRoaXMuX2doPXRoaXMuX2doK20rZCh0aGlzLl9nbCxrKXwwLHRoaXMuX2hoPXRoaXMuX2hoK2crZCh0aGlzLl9obCx4KXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4pe3Iud3JpdGVJbnQzMkJFKHQsbiksci53cml0ZUludDMyQkUoZSxuKzQpfXZhciByPW5ldyBlKDY0KTtyZXR1cm4gdCh0aGlzLl9haCx0aGlzLl9hbCwwKSx0KHRoaXMuX2JoLHRoaXMuX2JsLDgpLHQodGhpcy5fY2gsdGhpcy5fY2wsMTYpLHQodGhpcy5fZGgsdGhpcy5fZGwsMjQpLHQodGhpcy5fZWgsdGhpcy5fZWwsMzIpLHQodGhpcy5fZmgsdGhpcy5fZmwsNDApLHQodGhpcy5fZ2gsdGhpcy5fZ2wsNDgpLHQodGhpcy5faGgsdGhpcy5faGwsNTYpLHJ9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtpZihudWxsIT09ZylyZXR1cm4gZzt2YXIgdD0xMDQ4NTc2LGU9W107ZVswXT0yO2Zvcih2YXIgcj0xLG49MztuPHQ7bis9Mil7Zm9yKHZhciBpPU1hdGguY2VpbChNYXRoLnNxcnQobikpLG89MDtvPHImJmVbb108PWkmJm4lZVtvXSE9PTA7bysrKTtyIT09byYmZVtvXTw9aXx8KGVbcisrXT1uKX1yZXR1cm4gZz1lLGV9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9bigpLHI9MDtyPGUubGVuZ3RoO3IrKylpZigwPT09dC5tb2RuKGVbcl0pKXJldHVybiAwPT09dC5jbXBuKGVbcl0pO3JldHVybiEwfWZ1bmN0aW9uIG8odCl7dmFyIGU9cy5tb250KHQpO3JldHVybiAwPT09bC50b1JlZChlKS5yZWRQb3codC5zdWJuKDEpKS5mcm9tUmVkKCkuY21wbigxKX1mdW5jdGlvbiBhKHQsZSl7aWYodDwxNilyZXR1cm4gbmV3IHMoMj09PWV8fDU9PT1lP1sxNDAsMTIzXTpbMTQwLDM5XSk7ZT1uZXcgcyhlKTtmb3IodmFyIHIsbjs7KXtmb3Iocj1uZXcgcyhmKE1hdGguY2VpbCh0LzgpKSk7ci5iaXRMZW5ndGgoKT50OylyLmlzaHJuKDEpO2lmKHIuaXNFdmVuKCkmJnIuaWFkZChkKSxyLnRlc3RuKDEpfHxyLmlhZGQobCksZS5jbXAobCkpe2lmKCFlLmNtcChwKSlmb3IoO3IubW9kKGIpLmNtcCh2KTspci5pYWRkKG0pfWVsc2UgZm9yKDtyLm1vZCh1KS5jbXAoeSk7KXIuaWFkZChtKTtpZihuPXIuc2hybigxKSxpKG4pJiZpKHIpJiZvKG4pJiZvKHIpJiZjLnRlc3QobikmJmMudGVzdChyKSlyZXR1cm4gcn19dmFyIGY9cig2MSk7dC5leHBvcnRzPWEsYS5zaW1wbGVTaWV2ZT1pLGEuZmVybWF0VGVzdD1vO3ZhciBzPXIoMTUwKSx1PW5ldyBzKDI0KSxoPXIoMjMwKSxjPW5ldyBoLGQ9bmV3IHMoMSksbD1uZXcgcygyKSxwPW5ldyBzKDUpLGI9KG5ldyBzKDE2KSxuZXcgcyg4KSxuZXcgcygxMCkpLHY9bmV3IHMoMykseT0obmV3IHMoNyksbmV3IHMoMTEpKSxtPW5ldyBzKDQpLGc9KG5ldyBzKDEyKSxudWxsKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR8fG5ldyBvLlJhbmR9dmFyIGk9cigxNTApLG89cig1NzUpO3QuZXhwb3J0cz1uLG4uY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX0sbi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5iaXRMZW5ndGgoKSxyPXRoaXMucmFuZC5nZW5lcmF0ZShNYXRoLmNlaWwoZS84KSk7clswXXw9Mzt2YXIgbj03JmU7cmV0dXJuIDAhPT1uJiYocltyLmxlbmd0aC0xXT4+PTctbiksbmV3IGkocil9LG4ucHJvdG90eXBlLnRlc3Q9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuYml0TGVuZ3RoKCksbz1pLm1vbnQodCksYT1uZXcgaSgxKS50b1JlZChvKTtlfHwoZT1NYXRoLm1heCgxLG4vNDh8MCkpO2Zvcih2YXIgZj10LnN1Ym4oMSkscz1mLnN1Ym4oMSksdT0wOyFmLnRlc3RuKHUpO3UrKyk7Zm9yKHZhciBoPXQuc2hybih1KSxjPWYudG9SZWQobyksZD0hMDtlPjA7ZS0tKXt2YXIgbD10aGlzLl9yYW5kKHMpO3ImJnIobCk7dmFyIHA9bC50b1JlZChvKS5yZWRQb3coaCk7aWYoMCE9PXAuY21wKGEpJiYwIT09cC5jbXAoYykpe2Zvcih2YXIgYj0xO2I8dTtiKyspe2lmKHA9cC5yZWRTcXIoKSwwPT09cC5jbXAoYSkpcmV0dXJuITE7aWYoMD09PXAuY21wKGMpKWJyZWFrfWlmKGI9PT11KXJldHVybiExfX1yZXR1cm4gZH0sbi5wcm90b3R5cGUuZ2V0RGl2aXNvcj1mdW5jdGlvbih0LGUpe3ZhciByPXQuYml0TGVuZ3RoKCksbj1pLm1vbnQodCksbz1uZXcgaSgxKS50b1JlZChuKTtlfHwoZT1NYXRoLm1heCgxLHIvNDh8MCkpO2Zvcih2YXIgYT10LnN1Ym4oMSksZj1hLnN1Ym4oMSkscz0wOyFhLnRlc3RuKHMpO3MrKyk7Zm9yKHZhciB1PXQuc2hybihzKSxoPWEudG9SZWQobik7ZT4wO2UtLSl7dmFyIGM9dGhpcy5fcmFuZChmKSxkPXQuZ2NkKGMpO2lmKDAhPT1kLmNtcG4oMSkpcmV0dXJuIGQ7dmFyIGw9Yy50b1JlZChuKS5yZWRQb3codSk7aWYoMCE9PWwuY21wKG8pJiYwIT09bC5jbXAoaCkpe2Zvcih2YXIgcD0xO3A8cztwKyspe2lmKGw9bC5yZWRTcXIoKSwwPT09bC5jbXAobykpcmV0dXJuIGwuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHQpO2lmKDA9PT1sLmNtcChoKSlicmVha31pZihwPT09cylyZXR1cm4gbD1sLnJlZFNxcigpLGwuZnJvbVJlZCgpLnN1Ym4oMSkuZ2NkKHQpfX1yZXR1cm4hMX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcj1uZXcgZSg0KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHQsMCkscn12YXIgaT1yKDU5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG8sYT1uZXcgZShcIlwiKSxmPTA7YS5sZW5ndGg8cjspbz1uKGYrKyksYT1lLmNvbmNhdChbYSxpKFwic2hhMVwiKS51cGRhdGUodCkudXBkYXRlKG8pLmRpZ2VzdCgpXSk7cmV0dXJuIGEuc2xpY2UoMCxyKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIGU9byh0KSxyPWUudG9SZWQoYS5tb250KHQubW9kdWx1cykpLnJlZFBvdyhuZXcgYSh0LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO3JldHVybntibGluZGVyOnIsdW5ibGluZGVyOmUuaW52bSh0Lm1vZHVsdXMpfX1mdW5jdGlvbiBpKHQscil7dmFyIGk9bihyKSxvPXIubW9kdWx1cy5ieXRlTGVuZ3RoKCksZj0oYS5tb250KHIubW9kdWx1cyksbmV3IGEodCkubXVsKGkuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpKSxzPWYudG9SZWQoYS5tb250KHIucHJpbWUxKSksdT1mLnRvUmVkKGEubW9udChyLnByaW1lMikpLGg9ci5jb2VmZmljaWVudCxjPXIucHJpbWUxLGQ9ci5wcmltZTIsbD1zLnJlZFBvdyhyLmV4cG9uZW50MSkscD11LnJlZFBvdyhyLmV4cG9uZW50Mik7bD1sLmZyb21SZWQoKSxwPXAuZnJvbVJlZCgpO3ZhciBiPWwuaXN1YihwKS5pbXVsKGgpLnVtb2QoYyk7cmV0dXJuIGIuaW11bChkKSxwLmlhZGQoYiksbmV3IGUocC5pbXVsKGkudW5ibGluZGVyKS51bW9kKHIubW9kdWx1cykudG9BcnJheSghMSxvKSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxyPW5ldyBhKGYoZSkpO3IuY21wKHQubW9kdWx1cyk+PTB8fCFyLnVtb2QodC5wcmltZTEpfHwhci51bW9kKHQucHJpbWUyKTspcj1uZXcgYShmKGUpKTtyZXR1cm4gcn12YXIgYT1yKDcwKSxmPXIoNjEpO3QuZXhwb3J0cz1pLGkuZ2V0cj1vfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciByO1wib2JqZWN0XCIhPXR5cGVvZiB0fHxlLmlzQnVmZmVyKHQpfHwocj10LnBhc3NwaHJhc2UsdD10LmtleSksXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQpKTt2YXIgbixhLHM9Zih0LHIpLHU9cy50YWcsaD1zLmRhdGE7c3dpdGNoKHUpe2Nhc2VcIlBVQkxJQyBLRVlcIjpzd2l0Y2goYT1vLlB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJuIGEuc3ViamVjdFByaXZhdGVLZXk9YS5zdWJqZWN0UHVibGljS2V5LHt0eXBlOlwiZWNcIixkYXRhOmF9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wdWJfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFB1YmxpY0tleS5kYXRhLFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIsZGF0YTphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJFTkNSWVBURUQgUFJJVkFURSBLRVlcIjpoPW8uRW5jcnlwdGVkUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxoPWkoaCxyKTtjYXNlXCJQUklWQVRFIEtFWVwiOnN3aXRjaChhPW8uUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSxuPWEuYWxnb3JpdGhtLmFsZ29yaXRobS5qb2luKFwiLlwiKSl7Y2FzZVwiMS4yLjg0MC4xMTM1NDkuMS4xLjFcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpO2Nhc2VcIjEuMi44NDAuMTAwNDUuMi4xXCI6cmV0dXJue2N1cnZlOmEuYWxnb3JpdGhtLmN1cnZlLHByaXZhdGVLZXk6by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikucHJpdmF0ZUtleX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnByaXZfa2V5PW8uRFNBcGFyYW0uZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIikse3R5cGU6XCJkc2FcIixwYXJhbXM6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiUlNBIFBVQkxJQyBLRVlcIjpyZXR1cm4gby5SU0FQdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiUlNBIFBSSVZBVEUgS0VZXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJEU0EgUFJJVkFURSBLRVlcIjpyZXR1cm57dHlwZTpcImRzYVwiLHBhcmFtczpvLkRTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIil9O2Nhc2VcIkVDIFBSSVZBVEUgS0VZXCI6cmV0dXJuIGg9by5FQ1ByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIikse2N1cnZlOmgucGFyYW1ldGVycy52YWx1ZSxwcml2YXRlS2V5OmgucHJpdmF0ZUtleX07ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpfX1mdW5jdGlvbiBpKHQscil7dmFyIG49dC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLnNhbHQsaT1wYXJzZUludCh0LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuaXRlcnMudG9TdHJpbmcoKSwxMCksbz1hW3QuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLmFsZ28uam9pbihcIi5cIildLGY9dC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuaXYsaD10LnN1YmplY3RQcml2YXRlS2V5LGM9cGFyc2VJbnQoby5zcGxpdChcIi1cIilbMV0sMTApLzgsZD11LnBia2RmMlN5bmMocixuLGksYyksbD1zLmNyZWF0ZURlY2lwaGVyaXYobyxkLGYpLHA9W107cmV0dXJuIHAucHVzaChsLnVwZGF0ZShoKSkscC5wdXNoKGwuZmluYWwoKSksZS5jb25jYXQocCl9dmFyIG89cig1NzgpLGE9cig0NjkpLGY9cig1NzkpLHM9cigyMzkpLHU9cigxNTEpO3QuZXhwb3J0cz1uLG4uc2lnbmF0dXJlPW8uc2lnbmF0dXJlfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gYS5jYWxsKHRoaXMsZSksZi5pc0J1ZmZlcih0KT8odGhpcy5iYXNlPXQsdGhpcy5vZmZzZXQ9MCx2b2lkKHRoaXMubGVuZ3RoPXQubGVuZ3RoKSk6dm9pZCB0aGlzLmVycm9yKFwiSW5wdXQgbm90IEJ1ZmZlclwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSl0aGlzLmxlbmd0aD0wLHRoaXMudmFsdWU9dC5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfHwodD1uZXcgaSh0LGUpKSx0aGlzLmxlbmd0aCs9dC5sZW5ndGgsdH0sdGhpcyk7ZWxzZSBpZihcIm51bWJlclwiPT10eXBlb2YgdCl7aWYoISgwPD10JiZ0PD0yNTUpKXJldHVybiBlLmVycm9yKFwibm9uLWJ5dGUgRW5jb2RlckJ1ZmZlciB2YWx1ZVwiKTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9MX1lbHNlIGlmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXRoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD1mLmJ5dGVMZW5ndGgodCk7ZWxzZXtpZighZi5pc0J1ZmZlcih0KSlyZXR1cm4gZS5lcnJvcihcIlVuc3VwcG9ydGVkIHR5cGU6IFwiK3R5cGVvZiB0KTt0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9dC5sZW5ndGh9fXZhciBvPXIoMiksYT1yKDcxKS5SZXBvcnRlcixmPXIoMSkuQnVmZmVyO28obixhKSxlLkRlY29kZXJCdWZmZXI9bixuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7cmV0dXJue29mZnNldDp0aGlzLm9mZnNldCxyZXBvcnRlcjphLnByb3RvdHlwZS5zYXZlLmNhbGwodGhpcyl9fSxuLnByb3RvdHlwZS5yZXN0b3JlPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIGUub2Zmc2V0PXQub2Zmc2V0LGUubGVuZ3RoPXRoaXMub2Zmc2V0LHRoaXMub2Zmc2V0PXQub2Zmc2V0LGEucHJvdG90eXBlLnJlc3RvcmUuY2FsbCh0aGlzLHQucmVwb3J0ZXIpLGV9LG4ucHJvdG90eXBlLmlzRW1wdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vZmZzZXQ9PT10aGlzLmxlbmd0aH0sbi5wcm90b3R5cGUucmVhZFVJbnQ4PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9mZnNldCsxPD10aGlzLmxlbmd0aD90aGlzLmJhc2UucmVhZFVJbnQ4KHRoaXMub2Zmc2V0KyssITApOnRoaXMuZXJyb3IodHx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIil9LG4ucHJvdG90eXBlLnNraXA9ZnVuY3Rpb24odCxlKXtpZighKHRoaXMub2Zmc2V0K3Q8PXRoaXMubGVuZ3RoKSlyZXR1cm4gdGhpcy5lcnJvcihlfHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKTt2YXIgcj1uZXcgbih0aGlzLmJhc2UpO3JldHVybiByLl9yZXBvcnRlclN0YXRlPXRoaXMuX3JlcG9ydGVyU3RhdGUsci5vZmZzZXQ9dGhpcy5vZmZzZXQsci5sZW5ndGg9dGhpcy5vZmZzZXQrdCx0aGlzLm9mZnNldCs9dCxyfSxuLnByb3RvdHlwZS5yYXc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuYmFzZS5zbGljZSh0P3Qub2Zmc2V0OnRoaXMub2Zmc2V0LHRoaXMubGVuZ3RoKX0sZS5FbmNvZGVyQnVmZmVyPWksaS5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0fHwodD1uZXcgZih0aGlzLmxlbmd0aCkpLGV8fChlPTApLDA9PT10aGlzLmxlbmd0aD90OihBcnJheS5pc0FycmF5KHRoaXMudmFsdWUpP3RoaXMudmFsdWUuZm9yRWFjaChmdW5jdGlvbihyKXtyLmpvaW4odCxlKSxlKz1yLmxlbmd0aH0pOihcIm51bWJlclwiPT10eXBlb2YgdGhpcy52YWx1ZT90W2VdPXRoaXMudmFsdWU6XCJzdHJpbmdcIj09dHlwZW9mIHRoaXMudmFsdWU/dC53cml0ZSh0aGlzLnZhbHVlLGUpOmYuaXNCdWZmZXIodGhpcy52YWx1ZSkmJnRoaXMudmFsdWUuY29weSh0LGUpLGUrPXRoaXMubGVuZ3RoKSx0KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uX3JldmVyc2U9ZnVuY3Rpb24odCl7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7KDB8cik9PXImJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9LG4uZGVyPXIoNTgzKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7dS5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10LnJlYWRVSW50OChlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49Yy50YWdDbGFzc1tyPj42XSxpPTA9PT0oMzImcik7aWYoMzE9PT0oMzEmcikpe3ZhciBvPXI7Zm9yKHI9MDsxMjg9PT0oMTI4Jm8pOyl7aWYobz10LnJlYWRVSW50OChlKSx0LmlzRXJyb3IobykpcmV0dXJuIG87cjw8PTcscnw9MTI3Jm99fWVsc2UgciY9MzE7dmFyIGE9Yy50YWdbcl07cmV0dXJue2NsczpuLHByaW1pdGl2ZTppLHRhZzpyLHRhZ1N0cjphfX1mdW5jdGlvbiBhKHQsZSxyKXt2YXIgbj10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoIWUmJjEyOD09PW4pcmV0dXJuIG51bGw7aWYoMD09PSgxMjgmbikpcmV0dXJuIG47dmFyIGk9MTI3Jm47aWYoaT49NClyZXR1cm4gdC5lcnJvcihcImxlbmd0aCBvY3RlY3QgaXMgdG9vIGxvbmdcIik7bj0wO2Zvcih2YXIgbz0wO288aTtvKyspe248PD04O3ZhciBhPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihhKSlyZXR1cm4gYTtufD1hfXJldHVybiBufXZhciBmPXIoMikscz1yKDEwNiksdT1zLmJhc2UsaD1zLmJpZ251bSxjPXMuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIHUuRGVjb2RlckJ1ZmZlcnx8KHQ9bmV3IHUuRGVjb2RlckJ1ZmZlcih0LGUpKSx0aGlzLnRyZWUuX2RlY29kZSh0LGUpfSxmKGksdS5Ob2RlKSxpLnByb3RvdHlwZS5fcGVla1RhZz1mdW5jdGlvbih0LGUscil7aWYodC5pc0VtcHR5KCkpcmV0dXJuITE7dmFyIG49dC5zYXZlKCksaT1vKHQsJ0ZhaWxlZCB0byBwZWVrIHRhZzogXCInK2UrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihpKT9pOih0LnJlc3RvcmUobiksaS50YWc9PT1lfHxpLnRhZ1N0cj09PWV8fGkudGFnU3RyK1wib2ZcIj09PWV8fHIpfSxpLnByb3RvdHlwZS5fZGVjb2RlVGFnPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1vKHQsJ0ZhaWxlZCB0byBkZWNvZGUgdGFnIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaT1hKHQsbi5wcmltaXRpdmUsJ0ZhaWxlZCB0byBnZXQgbGVuZ3RoIG9mIFwiJytlKydcIicpO2lmKHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZighciYmbi50YWchPT1lJiZuLnRhZ1N0ciE9PWUmJm4udGFnU3RyK1wib2ZcIiE9PWUpcmV0dXJuIHQuZXJyb3IoJ0ZhaWxlZCB0byBtYXRjaCB0YWc6IFwiJytlKydcIicpO2lmKG4ucHJpbWl0aXZlfHxudWxsIT09aSlyZXR1cm4gdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKTt2YXIgZj10LnNhdmUoKSxzPXRoaXMuX3NraXBVbnRpbEVuZCh0LCdGYWlsZWQgdG8gc2tpcCBpbmRlZmluaXRlIGxlbmd0aCBib2R5OiBcIicrdGhpcy50YWcrJ1wiJyk7cmV0dXJuIHQuaXNFcnJvcihzKT9zOihpPXQub2Zmc2V0LWYub2Zmc2V0LHQucmVzdG9yZShmKSx0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpKX0saS5wcm90b3R5cGUuX3NraXBVbnRpbEVuZD1mdW5jdGlvbih0LGUpe2Zvcig7Oyl7dmFyIHI9byh0LGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1hKHQsci5wcmltaXRpdmUsZSk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpO2lmKGk9ci5wcmltaXRpdmV8fG51bGwhPT1uP3Quc2tpcChuKTp0aGlzLl9za2lwVW50aWxFbmQodCxlKSx0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoXCJlbmRcIj09PXIudGFnU3RyKWJyZWFrfX0saS5wcm90b3R5cGUuX2RlY29kZUxpc3Q9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPVtdOyF0LmlzRW1wdHkoKTspe3ZhciBvPXRoaXMuX3BlZWtUYWcodCxcImVuZFwiKTtpZih0LmlzRXJyb3IobykpcmV0dXJuIG87dmFyIGE9ci5kZWNvZGUodCxcImRlclwiLG4pO2lmKHQuaXNFcnJvcihhKSYmbylicmVhaztpLnB1c2goYSl9cmV0dXJuIGl9LGkucHJvdG90eXBlLl9kZWNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSl7dmFyIHI9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKHIpP3I6e3VudXNlZDpyLGRhdGE6dC5yYXcoKX19aWYoXCJibXBzdHJcIj09PWUpe3ZhciBuPXQucmF3KCk7aWYobi5sZW5ndGglMj09PTEpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogYm1wc3RyIGxlbmd0aCBtaXNtYXRjaFwiKTtmb3IodmFyIGk9XCJcIixvPTA7bzxuLmxlbmd0aC8yO28rKylpKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4ucmVhZFVJbnQxNkJFKDIqbykpO3JldHVybiBpfWlmKFwibnVtc3RyXCI9PT1lKXt2YXIgYT10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzTnVtc3RyKGEpP2E6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1pZihcIm9jdHN0clwiPT09ZSlyZXR1cm4gdC5yYXcoKTtpZihcInByaW50c3RyXCI9PT1lKXt2YXIgZj10LnJhdygpLnRvU3RyaW5nKFwiYXNjaWlcIik7cmV0dXJuIHRoaXMuX2lzUHJpbnRzdHIoZik/Zjp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9cmV0dXJuL3N0ciQvLnRlc3QoZSk/dC5yYXcoKS50b1N0cmluZygpOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2RlY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saT1bXSxvPTA7IXQuaXNFbXB0eSgpOyl7dmFyIGE9dC5yZWFkVUludDgoKTtvPDw9NyxvfD0xMjcmYSwwPT09KDEyOCZhKSYmKGkucHVzaChvKSxvPTApfTEyOCZhJiZpLnB1c2gobyk7dmFyIGY9aVswXS80MHwwLHM9aVswXSU0MDtpZihuPXI/aTpbZixzXS5jb25jYXQoaS5zbGljZSgxKSksZSl7dmFyIHU9ZVtuLmpvaW4oXCIgXCIpXTt2b2lkIDA9PT11JiYodT1lW24uam9pbihcIi5cIildKSx2b2lkIDAhPT11JiYobj11KX1yZXR1cm4gbn0saS5wcm90b3R5cGUuX2RlY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLnRvU3RyaW5nKCk7aWYoXCJnZW50aW1lXCI9PT1lKXZhciBuPTB8ci5zbGljZSgwLDQpLGk9MHxyLnNsaWNlKDQsNiksbz0wfHIuc2xpY2UoNiw4KSxhPTB8ci5zbGljZSg4LDEwKSxmPTB8ci5zbGljZSgxMCwxMikscz0wfHIuc2xpY2UoMTIsMTQpO2Vsc2V7aWYoXCJ1dGN0aW1lXCIhPT1lKXJldHVybiB0LmVycm9yKFwiRGVjb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpO3ZhciBuPTB8ci5zbGljZSgwLDIpLGk9MHxyLnNsaWNlKDIsNCksbz0wfHIuc2xpY2UoNCw2KSxhPTB8ci5zbGljZSg2LDgpLGY9MHxyLnNsaWNlKDgsMTApLHM9MHxyLnNsaWNlKDEwLDEyKTtuPW48NzA/MmUzK246MTkwMCtufXJldHVybiBEYXRlLlVUQyhuLGktMSxvLGEsZixzLDApfSxpLnByb3RvdHlwZS5fZGVjb2RlTnVsbD1mdW5jdGlvbih0KXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuX2RlY29kZUJvb2w9ZnVuY3Rpb24odCl7dmFyIGU9dC5yZWFkVUludDgoKTtyZXR1cm4gdC5pc0Vycm9yKGUpP2U6MCE9PWV9LGkucHJvdG90eXBlLl9kZWNvZGVJbnQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10LnJhdygpLG49bmV3IGgocik7cmV0dXJuIGUmJihuPWVbbi50b1N0cmluZygxMCldfHxuKSxufSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RGVjb2RlcihcImRlclwiKS50cmVlfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5lbmM9XCJkZXJcIix0aGlzLm5hbWU9dC5uYW1lLHRoaXMuZW50aXR5PXQsdGhpcy50cmVlPW5ldyBpLHRoaXMudHJlZS5faW5pdCh0LmJvZHkpfWZ1bmN0aW9uIGkodCl7aC5Ob2RlLmNhbGwodGhpcyxcImRlclwiLHQpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8MTA/XCIwXCIrdDp0fWZ1bmN0aW9uIGEodCxlLHIsbil7dmFyIGk7aWYoXCJzZXFvZlwiPT09dD90PVwic2VxXCI6XCJzZXRvZlwiPT09dCYmKHQ9XCJzZXRcIiksYy50YWdCeU5hbWUuaGFzT3duUHJvcGVydHkodCkpaT1jLnRhZ0J5TmFtZVt0XTtlbHNle2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0fHwoMHx0KSE9PXQpcmV0dXJuIG4uZXJyb3IoXCJVbmtub3duIHRhZzogXCIrdCk7aT10fXJldHVybiBpPj0zMT9uLmVycm9yKFwiTXVsdGktb2N0ZXQgdGFnIGVuY29kaW5nIHVuc3VwcG9ydGVkXCIpOihlfHwoaXw9MzIpLGl8PWMudGFnQ2xhc3NCeU5hbWVbcnx8XCJ1bml2ZXJzYWxcIl08PDYpfXZhciBmPXIoMikscz1yKDEpLkJ1ZmZlcix1PXIoMTA2KSxoPXUuYmFzZSxjPXUuY29uc3RhbnRzLmRlcjt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50cmVlLl9lbmNvZGUodCxlKS5qb2luKCl9LGYoaSxoLk5vZGUpLGkucHJvdG90eXBlLl9lbmNvZGVDb21wb3NpdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9YSh0LGUscix0aGlzLnJlcG9ydGVyKTtpZihuLmxlbmd0aDwxMjgpe3ZhciBvPW5ldyBzKDIpO3JldHVybiBvWzBdPWksb1sxXT1uLmxlbmd0aCx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX1mb3IodmFyIGY9MSx1PW4ubGVuZ3RoO3U+PTI1Njt1Pj49OClmKys7dmFyIG89bmV3IHMoMitmKTtvWzBdPWksb1sxXT0xMjh8Zjtmb3IodmFyIHU9MStmLGg9bi5sZW5ndGg7aD4wO3UtLSxoPj49OClvW3VdPTI1NSZoO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFtvLG5dKX0saS5wcm90b3R5cGUuX2VuY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswfHQudW51c2VkLHQuZGF0YV0pO2lmKFwiYm1wc3RyXCI9PT1lKXtmb3IodmFyIHI9bmV3IHMoMip0Lmxlbmd0aCksbj0wO248dC5sZW5ndGg7bisrKXIud3JpdGVVSW50MTZCRSh0LmNoYXJDb2RlQXQobiksMipuKTtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihyKX1yZXR1cm5cIm51bXN0clwiPT09ZT90aGlzLl9pc051bXN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHN1cHBvcnRzIG9ubHkgZGlnaXRzIGFuZCBzcGFjZVwiKTpcInByaW50c3RyXCI9PT1lP3RoaXMuX2lzUHJpbnRzdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IHByaW50c3RyIHN1cHBvcnRzIG9ubHkgbGF0aW4gdXBwZXIgYW5kIGxvd2VyIGNhc2UgbGV0dGVycywgZGlnaXRzLCBzcGFjZSwgYXBvc3Ryb3BoZSwgbGVmdCBhbmQgcmlndGggcGFyZW50aGVzaXMsIHBsdXMgc2lnbiwgY29tbWEsIGh5cGhlbiwgZG90LCBzbGFzaCwgY29sb24sIGVxdWFsIHNpZ24sIHF1ZXN0aW9uIG1hcmtcIik6L3N0ciQvLnRlc3QoZSk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9lbmNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwic3RyaW5nIG9iamlkIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcCBmb3VuZFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkIG5vdCBmb3VuZCBpbiB2YWx1ZXMgbWFwXCIpO3Q9ZVt0XS5zcGxpdCgvW1xcc1xcLl0rL2cpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKXt0PXQuc2xpY2UoKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWlmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQoKSBzaG91bGQgYmUgZWl0aGVyIGFycmF5IG9yIHN0cmluZywgZ290OiBcIitKU09OLnN0cmluZ2lmeSh0KSk7aWYoIXIpe2lmKHRbMV0+PTQwKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU2Vjb25kIG9iamlkIGlkZW50aWZpZXIgT09CXCIpO3Quc3BsaWNlKDAsMiw0MCp0WzBdK3RbMV0pfWZvcih2YXIgaT0wLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIG89dFtuXTtmb3IoaSsrO28+PTEyODtvPj49NylpKyt9Zm9yKHZhciBhPW5ldyBzKGkpLGY9YS5sZW5ndGgtMSxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBvPXRbbl07Zm9yKGFbZi0tXT0xMjcmbzsobz4+PTcpPjA7KWFbZi0tXT0xMjh8MTI3Jm99cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoYSl9LGkucHJvdG90eXBlLl9lbmNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj1uZXcgRGF0ZSh0KTtyZXR1cm5cImdlbnRpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCkpLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTpcInV0Y3RpbWVcIj09PWU/cj1bbyhuLmdldEZ1bGxZZWFyKCklMTAwKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKSx0aGlzLl9lbmNvZGVTdHIocixcIm9jdHN0clwiKX0saS5wcm90b3R5cGUuX2VuY29kZU51bGw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihcIlwiKX0saS5wcm90b3R5cGUuX2VuY29kZUludD1mdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlN0cmluZyBpbnQgb3IgZW51bSBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXBcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJWYWx1ZXMgbWFwIGRvZXNuJ3QgY29udGFpbjogXCIrSlNPTi5zdHJpbmdpZnkodCkpO3Q9ZVt0XX1pZihcIm51bWJlclwiIT10eXBlb2YgdCYmIXMuaXNCdWZmZXIodCkpe3ZhciByPXQudG9BcnJheSgpOyF0LnNpZ24mJjEyOCZyWzBdJiZyLnVuc2hpZnQoMCksdD1uZXcgcyhyKX1pZihzLmlzQnVmZmVyKHQpKXt2YXIgbj10Lmxlbmd0aDswPT09dC5sZW5ndGgmJm4rKzt2YXIgaT1uZXcgcyhuKTtyZXR1cm4gdC5jb3B5KGkpLDA9PT10Lmxlbmd0aCYmKGlbMF09MCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihpKX1pZih0PDEyOClyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTtpZih0PDI1NilyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMCx0XSk7Zm9yKHZhciBuPTEsbz10O28+PTI1NjtvPj49OCluKys7Zm9yKHZhciBpPW5ldyBBcnJheShuKSxvPWkubGVuZ3RoLTE7bz49MDtvLS0paVtvXT0yNTUmdCx0Pj49ODtyZXR1cm4gMTI4JmlbMF0mJmkudW5zaGlmdCgwKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKG5ldyBzKGkpKX0saS5wcm90b3R5cGUuX2VuY29kZUJvb2w9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodD8yNTU6MCl9LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXRFbmNvZGVyKFwiZGVyXCIpLnRyZWV9LGkucHJvdG90eXBlLl9za2lwRGVmYXVsdD1mdW5jdGlvbih0LGUscil7dmFyIG4saT10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PWkuZGVmYXVsdClyZXR1cm4hMTt2YXIgbz10LmpvaW4oKTtpZih2b2lkIDA9PT1pLmRlZmF1bHRCdWZmZXImJihpLmRlZmF1bHRCdWZmZXI9dGhpcy5fZW5jb2RlVmFsdWUoaS5kZWZhdWx0LGUscikuam9pbigpKSxvLmxlbmd0aCE9PWkuZGVmYXVsdEJ1ZmZlci5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPG8ubGVuZ3RoO24rKylpZihvW25dIT09aS5kZWZhdWx0QnVmZmVyW25dKXJldHVybiExO3JldHVybiEwfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixpLGYpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0LHIsaSk7YS5jYWxsKHRoaXMpLHRoaXMuX2ZpbklEPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwxXSldKSxpPWUuY29uY2F0KFtpLG5ldyBlKFswLDAsMCwyXSldKSx0aGlzLl9jaXBoZXI9bmV3IG8uQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoaS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9Zix0aGlzLl9hbGVuPTAsdGhpcy5fbGVuPTAsaS5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9dDt2YXIgdT1uZXcgZSg0KTt1LmZpbGwoMCksdGhpcy5fZ2hhc2g9bmV3IHModGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh1KSksdGhpcy5fYXV0aFRhZz1udWxsLHRoaXMuX2NhbGxlZD0hMX1mdW5jdGlvbiBpKHQsZSl7dmFyIHI9MDt0Lmxlbmd0aCE9PWUubGVuZ3RoJiZyKys7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLGUubGVuZ3RoKSxpPS0xOysraTxuOylyKz10W2ldXmVbaV07cmV0dXJuIHJ9dmFyIG89cigxMDcpLGE9cigxMDkpLGY9cigyKSxzPXIoNTkxKSx1PXIoNzIpO2YobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9jYWxsZWQmJnRoaXMuX2FsZW4pe3ZhciByPTE2LXRoaXMuX2FsZW4lMTY7cjwxNiYmKHI9bmV3IGUociksci5maWxsKDApLHRoaXMuX2doYXNoLnVwZGF0ZShyKSl9dGhpcy5fY2FsbGVkPSEwO3ZhciBuPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpO3JldHVybiB0aGlzLl9kZWNyeXB0P3RoaXMuX2doYXNoLnVwZGF0ZSh0KTp0aGlzLl9naGFzaC51cGRhdGUobiksdGhpcy5fbGVuKz10Lmxlbmd0aCxufSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXtpZih0aGlzLl9kZWNyeXB0JiYhdGhpcy5fYXV0aFRhZyl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIik7dmFyIHQ9dSh0aGlzLl9naGFzaC5maW5hbCg4KnRoaXMuX2FsZW4sOCp0aGlzLl9sZW4pLHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodGhpcy5fZmluSUQpKTtpZih0aGlzLl9kZWNyeXB0KXtpZihpKHQsdGhpcy5fYXV0aFRhZykpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpfWVsc2UgdGhpcy5fYXV0aFRhZz10O3RoaXMuX2NpcGhlci5zY3J1YigpfSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7aWYoIXRoaXMuX2RlY3J5cHQmJmUuaXNCdWZmZXIodGhpcy5fYXV0aFRhZykpcmV0dXJuIHRoaXMuX2F1dGhUYWc7dGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2RlY3J5cHQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fYXV0aFRhZz10fSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fY2FsbGVkKXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IEFBRCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9naGFzaC51cGRhdGUodCksdGhpcy5fYWxlbis9dC5sZW5ndGh9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9dmFyIGk9cig1OTApO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPWkuY3JlYXRlQ2lwaGVyLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1pLmNyZWF0ZUNpcGhlcml2O3ZhciBvPXIoNTg5KTtlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9by5jcmVhdGVEZWNpcGhlcixlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PW8uY3JlYXRlRGVjaXBoZXJpdjt2YXIgYT1yKDE1Mik7ZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9bn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPW4oZSx0Ll9wcmV2KTtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHIpLHQuX3ByZXZ9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3ZhciByPXQuX3ByZXY7dC5fcHJldj1lO3ZhciBpPXQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSk7cmV0dXJuIG4oaSxyKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbil7dmFyIG89ci5sZW5ndGgsYT1pKHIsZS5fY2FjaGUpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShvKSxlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LG4/cjphXSksYX12YXIgaT1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyLGkpe2Zvcih2YXIgbyxhPW5ldyB0KFwiXCIpO3IubGVuZ3RoOyl7aWYoMD09PWUuX2NhY2hlLmxlbmd0aCYmKGUuX2NhY2hlPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksZS5fcHJldj1uZXcgdChcIlwiKSksIShlLl9jYWNoZS5sZW5ndGg8PXIubGVuZ3RoKSl7YT10LmNvbmNhdChbYSxuKGUscixpKV0pO2JyZWFrfW89ZS5fY2FjaGUubGVuZ3RoLGE9dC5jb25jYXQoW2EsbihlLHIuc2xpY2UoMCxvKSxpKV0pLHI9ci5zbGljZShvKX1yZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlLHIpe2Zvcih2YXIgaSxvLGEsZj0tMSxzPTgsdT0wOysrZjxzOylpPXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksbz1lJjE8PDctZj8xMjg6MCxhPWlbMF1ebyx1Kz0oMTI4JmEpPj5mJTgsdC5fcHJldj1uKHQuX3ByZXYscj9vOmEpO3JldHVybiB1fWZ1bmN0aW9uIG4oZSxyKXt2YXIgbj1lLmxlbmd0aCxpPS0xLG89bmV3IHQoZS5sZW5ndGgpO2ZvcihlPXQuY29uY2F0KFtlLG5ldyB0KFtyXSldKTsrK2k8bjspb1tpXT1lW2ldPDwxfGVbaSsxXT4+NztyZXR1cm4gb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscixuKXt2YXIgaT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLG89aVswXV5yO3JldHVybiBlLl9wcmV2PXQuY29uY2F0KFtlLl9wcmV2LnNsaWNlKDEpLG5ldyB0KFtuP3I6b10pXSksb31lLmVuY3J5cHQ9ZnVuY3Rpb24oZSxuLGkpe2Zvcih2YXIgbz1uLmxlbmd0aCxhPW5ldyB0KG8pLGY9LTE7KytmPG87KWFbZl09cihlLG5bZl0saSk7cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmVuY3J5cHRCbG9jayhlKX0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5kZWNyeXB0QmxvY2soZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSx0Ll9wcmV2fXZhciBpPXIoNzIpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsbihlKV0pO3ZhciBvPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksaShyLG8pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsYSxmKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KG8uY2FsbCh0aGlzKSx0aGlzLl9jaXBoZXI9bmV3IGkuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IGUoYS5sZW5ndGgpLHRoaXMuX2NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX3NlY0NhY2hlPW5ldyBlKFwiXCIpLHRoaXMuX2RlY3J5cHQ9ZixhLmNvcHkodGhpcy5fcHJldiksdm9pZCh0aGlzLl9tb2RlPXQpKTpuZXcgbih0LHIsYSl9dmFyIGk9cigxMDcpLG89cigxMDkpLGE9cigyKTthKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCx0aGlzLl9kZWNyeXB0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7cmV0dXJuIG5ldyBlKHQudG9SZWQoaS5tb250KHIubW9kdWx1cykpLnJlZFBvdyhuZXcgaShyLnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpLnRvQXJyYXkoKSl9dmFyIGk9cig3MCk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aCxuPS0xOysrbjxyOyl0W25dXj1lW25dO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuP3ZvaWQgaS5jYWxsKHRoaXMsdCk6bmV3IG4odCl9dC5leHBvcnRzPW47dmFyIGk9cigxNTQpLG89cig3Myk7by5pbmhlcml0cz1yKDc0KSxvLmluaGVyaXRzKG4saSksbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7cihudWxsLHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnByZXBlbmRMaXN0ZW5lcj90LnByZXBlbmRMaXN0ZW5lcihlLHIpOnZvaWQodC5fZXZlbnRzJiZ0Ll9ldmVudHNbZV0/Tyh0Ll9ldmVudHNbZV0pP3QuX2V2ZW50c1tlXS51bnNoaWZ0KHIpOnQuX2V2ZW50c1tlXT1bcix0Ll9ldmVudHNbZV1dOnQub24oZSxyKSl9ZnVuY3Rpb24gaSh0LGUpe0Q9RHx8cig1MSksdD10fHx7fSx0aGlzLm9iamVjdE1vZGU9ISF0Lm9iamVjdE1vZGUsZSBpbnN0YW5jZW9mIEQmJih0aGlzLm9iamVjdE1vZGU9dGhpcy5vYmplY3RNb2RlfHwhIXQucmVhZGFibGVPYmplY3RNb2RlKTt2YXIgbj10LmhpZ2hXYXRlck1hcmssaT10aGlzLm9iamVjdE1vZGU/MTY6MTYzODQ7dGhpcy5oaWdoV2F0ZXJNYXJrPW58fDA9PT1uP246aSx0aGlzLmhpZ2hXYXRlck1hcms9fn50aGlzLmhpZ2hXYXRlck1hcmssdGhpcy5idWZmZXI9bmV3IHosdGhpcy5sZW5ndGg9MCx0aGlzLnBpcGVzPW51bGwsdGhpcy5waXBlc0NvdW50PTAsdGhpcy5mbG93aW5nPW51bGwsdGhpcy5lbmRlZD0hMSx0aGlzLmVuZEVtaXR0ZWQ9ITEsdGhpcy5yZWFkaW5nPSExLHRoaXMuc3luYz0hMCx0aGlzLm5lZWRSZWFkYWJsZT0hMSx0aGlzLmVtaXR0ZWRSZWFkYWJsZT0hMSx0aGlzLnJlYWRhYmxlTGlzdGVuaW5nPSExLHRoaXMucmVzdW1lU2NoZWR1bGVkPSExLHRoaXMuZGVmYXVsdEVuY29kaW5nPXQuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLnJhbk91dD0hMSx0aGlzLmF3YWl0RHJhaW49MCx0aGlzLnJlYWRpbmdNb3JlPSExLHRoaXMuZGVjb2Rlcj1udWxsLHRoaXMuZW5jb2Rpbmc9bnVsbCx0LmVuY29kaW5nJiYoVXx8KFU9cig1MikuU3RyaW5nRGVjb2RlciksdGhpcy5kZWNvZGVyPW5ldyBVKHQuZW5jb2RpbmcpLHRoaXMuZW5jb2Rpbmc9dC5lbmNvZGluZyl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gRD1EfHxyKDUxKSx0aGlzIGluc3RhbmNlb2Ygbz8odGhpcy5fcmVhZGFibGVTdGF0ZT1uZXcgaSh0LHRoaXMpLHRoaXMucmVhZGFibGU9ITAsdCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkJiYodGhpcy5fcmVhZD10LnJlYWQpLHZvaWQgUi5jYWxsKHRoaXMpKTpuZXcgbyh0KX1mdW5jdGlvbiBhKHQsZSxyLG4saSl7dmFyIG89aChlLHIpO2lmKG8pdC5lbWl0KFwiZXJyb3JcIixvKTtlbHNlIGlmKG51bGw9PT1yKWUucmVhZGluZz0hMSxjKHQsZSk7ZWxzZSBpZihlLm9iamVjdE1vZGV8fHImJnIubGVuZ3RoPjApaWYoZS5lbmRlZCYmIWkpe3ZhciBhPW5ldyBFcnJvcihcInN0cmVhbS5wdXNoKCkgYWZ0ZXIgRU9GXCIpO3QuZW1pdChcImVycm9yXCIsYSl9ZWxzZSBpZihlLmVuZEVtaXR0ZWQmJmkpe3ZhciBzPW5ldyBFcnJvcihcInN0cmVhbS51bnNoaWZ0KCkgYWZ0ZXIgZW5kIGV2ZW50XCIpO3QuZW1pdChcImVycm9yXCIscyl9ZWxzZXt2YXIgdTshZS5kZWNvZGVyfHxpfHxufHwocj1lLmRlY29kZXIud3JpdGUociksdT0hZS5vYmplY3RNb2RlJiYwPT09ci5sZW5ndGgpLGl8fChlLnJlYWRpbmc9ITEpLHV8fChlLmZsb3dpbmcmJjA9PT1lLmxlbmd0aCYmIWUuc3luYz8odC5lbWl0KFwiZGF0YVwiLHIpLHQucmVhZCgwKSk6KGUubGVuZ3RoKz1lLm9iamVjdE1vZGU/MTpyLmxlbmd0aCxpP2UuYnVmZmVyLnVuc2hpZnQocik6ZS5idWZmZXIucHVzaChyKSxlLm5lZWRSZWFkYWJsZSYmZCh0KSkpLHAodCxlKX1lbHNlIGl8fChlLnJlYWRpbmc9ITEpO3JldHVybiBmKGUpfWZ1bmN0aW9uIGYodCl7cmV0dXJuIXQuZW5kZWQmJih0Lm5lZWRSZWFkYWJsZXx8dC5sZW5ndGg8dC5oaWdoV2F0ZXJNYXJrfHwwPT09dC5sZW5ndGgpfWZ1bmN0aW9uIHModCl7cmV0dXJuIHQ+PXE/dD1xOih0LS0sdHw9dD4+PjEsdHw9dD4+PjIsdHw9dD4+PjQsdHw9dD4+PjgsdHw9dD4+PjE2LHQrKyksdH1mdW5jdGlvbiB1KHQsZSl7cmV0dXJuIHQ8PTB8fDA9PT1lLmxlbmd0aCYmZS5lbmRlZD8wOmUub2JqZWN0TW9kZT8xOnQhPT10P2UuZmxvd2luZyYmZS5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhLmxlbmd0aDplLmxlbmd0aDoodD5lLmhpZ2hXYXRlck1hcmsmJihlLmhpZ2hXYXRlck1hcms9cyh0KSksdDw9ZS5sZW5ndGg/dDplLmVuZGVkP2UubGVuZ3RoOihlLm5lZWRSZWFkYWJsZT0hMCwwKSl9ZnVuY3Rpb24gaCh0LGUpe3ZhciByPW51bGw7cmV0dXJuIFQuaXNCdWZmZXIoZSl8fFwic3RyaW5nXCI9PXR5cGVvZiBlfHxudWxsPT09ZXx8dm9pZCAwPT09ZXx8dC5vYmplY3RNb2RlfHwocj1uZXcgVHlwZUVycm9yKFwiSW52YWxpZCBub24tc3RyaW5nL2J1ZmZlciBjaHVua1wiKSkscn1mdW5jdGlvbiBjKHQsZSl7aWYoIWUuZW5kZWQpe2lmKGUuZGVjb2Rlcil7dmFyIHI9ZS5kZWNvZGVyLmVuZCgpO3ImJnIubGVuZ3RoJiYoZS5idWZmZXIucHVzaChyKSxlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgpfWUuZW5kZWQ9ITAsZCh0KX19ZnVuY3Rpb24gZCh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2UubmVlZFJlYWRhYmxlPSExLGUuZW1pdHRlZFJlYWRhYmxlfHwoTChcImVtaXRSZWFkYWJsZVwiLGUuZmxvd2luZyksZS5lbWl0dGVkUmVhZGFibGU9ITAsZS5zeW5jP0IobCx0KTpsKHQpKX1mdW5jdGlvbiBsKHQpe0woXCJlbWl0IHJlYWRhYmxlXCIpLHQuZW1pdChcInJlYWRhYmxlXCIpLHcodCl9ZnVuY3Rpb24gcCh0LGUpe2UucmVhZGluZ01vcmV8fChlLnJlYWRpbmdNb3JlPSEwLEIoYix0LGUpKX1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciByPWUubGVuZ3RoOyFlLnJlYWRpbmcmJiFlLmZsb3dpbmcmJiFlLmVuZGVkJiZlLmxlbmd0aDxlLmhpZ2hXYXRlck1hcmsmJihMKFwibWF5YmVSZWFkTW9yZSByZWFkIDBcIiksdC5yZWFkKDApLHIhPT1lLmxlbmd0aCk7KXI9ZS5sZW5ndGg7ZS5yZWFkaW5nTW9yZT0hMX1mdW5jdGlvbiB2KHQpe3JldHVybiBmdW5jdGlvbigpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7TChcInBpcGVPbkRyYWluXCIsZS5hd2FpdERyYWluKSxlLmF3YWl0RHJhaW4mJmUuYXdhaXREcmFpbi0tLDA9PT1lLmF3YWl0RHJhaW4mJlAodCxcImRhdGFcIikmJihlLmZsb3dpbmc9ITAsdyh0KSl9fWZ1bmN0aW9uIHkodCl7TChcInJlYWRhYmxlIG5leHR0aWNrIHJlYWQgMFwiKSx0LnJlYWQoMCl9ZnVuY3Rpb24gbSh0LGUpe2UucmVzdW1lU2NoZWR1bGVkfHwoZS5yZXN1bWVTY2hlZHVsZWQ9ITAsQihnLHQsZSkpfWZ1bmN0aW9uIGcodCxlKXtlLnJlYWRpbmd8fChMKFwicmVzdW1lIHJlYWQgMFwiKSx0LnJlYWQoMCkpLGUucmVzdW1lU2NoZWR1bGVkPSExLGUuYXdhaXREcmFpbj0wLHQuZW1pdChcInJlc3VtZVwiKSx3KHQpLGUuZmxvd2luZyYmIWUucmVhZGluZyYmdC5yZWFkKDApfWZ1bmN0aW9uIHcodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtmb3IoTChcImZsb3dcIixlLmZsb3dpbmcpO2UuZmxvd2luZyYmbnVsbCE9PXQucmVhZCgpOyk7fWZ1bmN0aW9uIF8odCxlKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG51bGw7dmFyIHI7cmV0dXJuIGUub2JqZWN0TW9kZT9yPWUuYnVmZmVyLnNoaWZ0KCk6IXR8fHQ+PWUubGVuZ3RoPyhyPWUuZGVjb2Rlcj9lLmJ1ZmZlci5qb2luKFwiXCIpOjE9PT1lLmJ1ZmZlci5sZW5ndGg/ZS5idWZmZXIuaGVhZC5kYXRhOmUuYnVmZmVyLmNvbmNhdChlLmxlbmd0aCksZS5idWZmZXIuY2xlYXIoKSk6cj1NKHQsZS5idWZmZXIsZS5kZWNvZGVyKSxyfWZ1bmN0aW9uIE0odCxlLHIpe3ZhciBuO3JldHVybiB0PGUuaGVhZC5kYXRhLmxlbmd0aD8obj1lLmhlYWQuZGF0YS5zbGljZSgwLHQpLGUuaGVhZC5kYXRhPWUuaGVhZC5kYXRhLnNsaWNlKHQpKTpuPXQ9PT1lLmhlYWQuZGF0YS5sZW5ndGg/ZS5zaGlmdCgpOnI/Uyh0LGUpOkUodCxlKSxufWZ1bmN0aW9uIFModCxlKXt2YXIgcj1lLmhlYWQsbj0xLGk9ci5kYXRhO2Zvcih0LT1pLmxlbmd0aDtyPXIubmV4dDspe3ZhciBvPXIuZGF0YSxhPXQ+by5sZW5ndGg/by5sZW5ndGg6dDtpZihpKz1hPT09by5sZW5ndGg/bzpvLnNsaWNlKDAsdCksdC09YSwwPT09dCl7YT09PW8ubGVuZ3RoPygrK24sci5uZXh0P2UuaGVhZD1yLm5leHQ6ZS5oZWFkPWUudGFpbD1udWxsKTooZS5oZWFkPXIsci5kYXRhPW8uc2xpY2UoYSkpO2JyZWFrfSsrbn1yZXR1cm4gZS5sZW5ndGgtPW4saX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI9ai5hbGxvY1Vuc2FmZSh0KSxuPWUuaGVhZCxpPTE7Zm9yKG4uZGF0YS5jb3B5KHIpLHQtPW4uZGF0YS5sZW5ndGg7bj1uLm5leHQ7KXt2YXIgbz1uLmRhdGEsYT10Pm8ubGVuZ3RoP28ubGVuZ3RoOnQ7aWYoby5jb3B5KHIsci5sZW5ndGgtdCwwLGEpLHQtPWEsMD09PXQpe2E9PT1vLmxlbmd0aD8oKytpLG4ubmV4dD9lLmhlYWQ9bi5uZXh0OmUuaGVhZD1lLnRhaWw9bnVsbCk6KGUuaGVhZD1uLG4uZGF0YT1vLnNsaWNlKGEpKTticmVha30rK2l9cmV0dXJuIGUubGVuZ3RoLT1pLHJ9ZnVuY3Rpb24gQSh0KXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO2lmKGUubGVuZ3RoPjApdGhyb3cgbmV3IEVycm9yKCdcImVuZFJlYWRhYmxlKClcIiBjYWxsZWQgb24gbm9uLWVtcHR5IHN0cmVhbScpO2UuZW5kRW1pdHRlZHx8KGUuZW5kZWQ9ITAsQihrLGUsdCkpfWZ1bmN0aW9uIGsodCxlKXt0LmVuZEVtaXR0ZWR8fDAhPT10Lmxlbmd0aHx8KHQuZW5kRW1pdHRlZD0hMCxlLnJlYWRhYmxlPSExLGUuZW1pdChcImVuZFwiKSl9ZnVuY3Rpb24geCh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKyllKHRbcl0scil9ZnVuY3Rpb24gSSh0LGUpe2Zvcih2YXIgcj0wLG49dC5sZW5ndGg7cjxuO3IrKylpZih0W3JdPT09ZSlyZXR1cm4gcjtyZXR1cm4tMX10LmV4cG9ydHM9bzt2YXIgQj1yKDE1NyksTz1yKDU5Nyk7by5SZWFkYWJsZVN0YXRlPWk7dmFyIFIsUD0ocigxMTApLkV2ZW50RW1pdHRlcixmdW5jdGlvbih0LGUpe3JldHVybiB0Lmxpc3RlbmVycyhlKS5sZW5ndGh9KTshZnVuY3Rpb24oKXt0cnl7Uj1yKDMxKX1jYXRjaCh0KXt9ZmluYWxseXtSfHwoUj1yKDExMCkuRXZlbnRFbWl0dGVyKX19KCk7dmFyIFQ9cigxKS5CdWZmZXIsaj1yKDE1NiksQz1yKDczKTtDLmluaGVyaXRzPXIoNzQpO3ZhciBOPXIoNjEyKSxMPXZvaWQgMDtMPU4mJk4uZGVidWdsb2c/Ti5kZWJ1Z2xvZyhcInN0cmVhbVwiKTpmdW5jdGlvbigpe307dmFyIFUsej1yKDU5Nik7Qy5pbmhlcml0cyhvLFIpO3ZhciBELEQ7by5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHIub2JqZWN0TW9kZXx8XCJzdHJpbmdcIiE9dHlwZW9mIHR8fChlPWV8fHIuZGVmYXVsdEVuY29kaW5nLGUhPT1yLmVuY29kaW5nJiYodD1qLmZyb20odCxlKSxlPVwiXCIpKSxhKHRoaXMscix0LGUsITEpfSxvLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIGEodGhpcyxlLHQsXCJcIiwhMCl9LG8ucHJvdG90eXBlLmlzUGF1c2VkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZz09PSExfSxvLnByb3RvdHlwZS5zZXRFbmNvZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gVXx8KFU9cig1MikuU3RyaW5nRGVjb2RlciksdGhpcy5fcmVhZGFibGVTdGF0ZS5kZWNvZGVyPW5ldyBVKHQpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZW5jb2Rpbmc9dCx0aGlzfTt2YXIgcT04Mzg4NjA4O28ucHJvdG90eXBlLnJlYWQ9ZnVuY3Rpb24odCl7TChcInJlYWRcIix0KSx0PXBhcnNlSW50KHQsMTApO3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj10O2lmKDAhPT10JiYoZS5lbWl0dGVkUmVhZGFibGU9ITEpLDA9PT10JiZlLm5lZWRSZWFkYWJsZSYmKGUubGVuZ3RoPj1lLmhpZ2hXYXRlck1hcmt8fGUuZW5kZWQpKXJldHVybiBMKFwicmVhZDogZW1pdFJlYWRhYmxlXCIsZS5sZW5ndGgsZS5lbmRlZCksMD09PWUubGVuZ3RoJiZlLmVuZGVkP0EodGhpcyk6ZCh0aGlzKSxudWxsO2lmKHQ9dSh0LGUpLDA9PT10JiZlLmVuZGVkKXJldHVybiAwPT09ZS5sZW5ndGgmJkEodGhpcyksbnVsbDt2YXIgbj1lLm5lZWRSZWFkYWJsZTtMKFwibmVlZCByZWFkYWJsZVwiLG4pLCgwPT09ZS5sZW5ndGh8fGUubGVuZ3RoLXQ8ZS5oaWdoV2F0ZXJNYXJrKSYmKG49ITAsTChcImxlbmd0aCBsZXNzIHRoYW4gd2F0ZXJtYXJrXCIsbikpLGUuZW5kZWR8fGUucmVhZGluZz8obj0hMSxMKFwicmVhZGluZyBvciBlbmRlZFwiLG4pKTpuJiYoTChcImRvIHJlYWRcIiksZS5yZWFkaW5nPSEwLGUuc3luYz0hMCwwPT09ZS5sZW5ndGgmJihlLm5lZWRSZWFkYWJsZT0hMCksdGhpcy5fcmVhZChlLmhpZ2hXYXRlck1hcmspLGUuc3luYz0hMSxlLnJlYWRpbmd8fCh0PXUocixlKSkpO3ZhciBpO3JldHVybiBpPXQ+MD9fKHQsZSk6bnVsbCxudWxsPT09aT8oZS5uZWVkUmVhZGFibGU9ITAsdD0wKTplLmxlbmd0aC09dCwwPT09ZS5sZW5ndGgmJihlLmVuZGVkfHwoZS5uZWVkUmVhZGFibGU9ITApLHIhPT10JiZlLmVuZGVkJiZBKHRoaXMpKSxudWxsIT09aSYmdGhpcy5lbWl0KFwiZGF0YVwiLGkpLGl9LG8ucHJvdG90eXBlLl9yZWFkPWZ1bmN0aW9uKHQpe3RoaXMuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwibm90IGltcGxlbWVudGVkXCIpKX0sby5wcm90b3R5cGUucGlwZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIGkodCl7TChcIm9udW5waXBlXCIpLHQ9PT1kJiZhKCl9ZnVuY3Rpb24gbygpe0woXCJvbmVuZFwiKSx0LmVuZCgpfWZ1bmN0aW9uIGEoKXtMKFwiY2xlYW51cFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KSx0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIseSksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIscyksdC5yZW1vdmVMaXN0ZW5lcihcInVucGlwZVwiLGkpLGQucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixvKSxkLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsYSksZC5yZW1vdmVMaXN0ZW5lcihcImRhdGFcIixmKSxtPSEwLCFsLmF3YWl0RHJhaW58fHQuX3dyaXRhYmxlU3RhdGUmJiF0Ll93cml0YWJsZVN0YXRlLm5lZWREcmFpbnx8eSgpfWZ1bmN0aW9uIGYoZSl7TChcIm9uZGF0YVwiKSxnPSExO3ZhciByPXQud3JpdGUoZSk7ITEhPT1yfHxnfHwoKDE9PT1sLnBpcGVzQ291bnQmJmwucGlwZXM9PT10fHxsLnBpcGVzQ291bnQ+MSYmSShsLnBpcGVzLHQpIT09LTEpJiYhbSYmKEwoXCJmYWxzZSB3cml0ZSByZXNwb25zZSwgcGF1c2VcIixkLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4pLGQuX3JlYWRhYmxlU3RhdGUuYXdhaXREcmFpbisrLGc9ITApLGQucGF1c2UoKSl9ZnVuY3Rpb24gcyhlKXtMKFwib25lcnJvclwiLGUpLGMoKSx0LnJlbW92ZUxpc3RlbmVyKFwiZXJyb3JcIixzKSwwPT09UCh0LFwiZXJyb3JcIikmJnQuZW1pdChcImVycm9yXCIsZSl9ZnVuY3Rpb24gdSgpe3QucmVtb3ZlTGlzdGVuZXIoXCJmaW5pc2hcIixoKSxjKCl9ZnVuY3Rpb24gaCgpe0woXCJvbmZpbmlzaFwiKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIix1KSxjKCl9ZnVuY3Rpb24gYygpe0woXCJ1bnBpcGVcIiksZC51bnBpcGUodCl9dmFyIGQ9dGhpcyxsPXRoaXMuX3JlYWRhYmxlU3RhdGU7c3dpdGNoKGwucGlwZXNDb3VudCl7Y2FzZSAwOmwucGlwZXM9dDticmVhaztjYXNlIDE6bC5waXBlcz1bbC5waXBlcyx0XTticmVhaztkZWZhdWx0OmwucGlwZXMucHVzaCh0KX1sLnBpcGVzQ291bnQrPTEsTChcInBpcGUgY291bnQ9JWQgb3B0cz0lalwiLGwucGlwZXNDb3VudCxyKTt2YXIgcD0oIXJ8fHIuZW5kIT09ITEpJiZ0IT09ZS5zdGRvdXQmJnQhPT1lLnN0ZGVycixiPXA/bzphO2wuZW5kRW1pdHRlZD9CKGIpOmQub25jZShcImVuZFwiLGIpLHQub24oXCJ1bnBpcGVcIixpKTt2YXIgeT12KGQpO3Qub24oXCJkcmFpblwiLHkpO3ZhciBtPSExLGc9ITE7cmV0dXJuIGQub24oXCJkYXRhXCIsZiksbih0LFwiZXJyb3JcIixzKSx0Lm9uY2UoXCJjbG9zZVwiLHUpLHQub25jZShcImZpbmlzaFwiLGgpLHQuZW1pdChcInBpcGVcIixkKSxsLmZsb3dpbmd8fChMKFwicGlwZSByZXN1bWVcIiksZC5yZXN1bWUoKSksdH0sby5wcm90b3R5cGUudW5waXBlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGU7aWYoMD09PWUucGlwZXNDb3VudClyZXR1cm4gdGhpcztpZigxPT09ZS5waXBlc0NvdW50KXJldHVybiB0JiZ0IT09ZS5waXBlcz90aGlzOih0fHwodD1lLnBpcGVzKSxlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExLHQmJnQuZW1pdChcInVucGlwZVwiLHRoaXMpLHRoaXMpO2lmKCF0KXt2YXIgcj1lLnBpcGVzLG49ZS5waXBlc0NvdW50O2UucGlwZXM9bnVsbCxlLnBpcGVzQ291bnQ9MCxlLmZsb3dpbmc9ITE7Zm9yKHZhciBpPTA7aTxuO2krKylyW2ldLmVtaXQoXCJ1bnBpcGVcIix0aGlzKTtyZXR1cm4gdGhpc312YXIgbz1JKGUucGlwZXMsdCk7cmV0dXJuIG89PT0tMT90aGlzOihlLnBpcGVzLnNwbGljZShvLDEpLGUucGlwZXNDb3VudC09MSwxPT09ZS5waXBlc0NvdW50JiYoZS5waXBlcz1lLnBpcGVzWzBdKSx0LmVtaXQoXCJ1bnBpcGVcIix0aGlzKSx0aGlzKX0sby5wcm90b3R5cGUub249ZnVuY3Rpb24odCxlKXt2YXIgcj1SLnByb3RvdHlwZS5vbi5jYWxsKHRoaXMsdCxlKTtpZihcImRhdGFcIj09PXQpdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nIT09ITEmJnRoaXMucmVzdW1lKCk7ZWxzZSBpZihcInJlYWRhYmxlXCI9PT10KXt2YXIgbj10aGlzLl9yZWFkYWJsZVN0YXRlO24uZW5kRW1pdHRlZHx8bi5yZWFkYWJsZUxpc3RlbmluZ3x8KG4ucmVhZGFibGVMaXN0ZW5pbmc9bi5uZWVkUmVhZGFibGU9ITAsbi5lbWl0dGVkUmVhZGFibGU9ITEsbi5yZWFkaW5nP24ubGVuZ3RoJiZkKHRoaXMsbik6Qih5LHRoaXMpKX1yZXR1cm4gcn0sby5wcm90b3R5cGUuYWRkTGlzdGVuZXI9by5wcm90b3R5cGUub24sby5wcm90b3R5cGUucmVzdW1lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVhZGFibGVTdGF0ZTtyZXR1cm4gdC5mbG93aW5nfHwoTChcInJlc3VtZVwiKSx0LmZsb3dpbmc9ITAsbSh0aGlzLHQpKSx0aGlzfSxvLnByb3RvdHlwZS5wYXVzZT1mdW5jdGlvbigpe3JldHVybiBMKFwiY2FsbCBwYXVzZSBmbG93aW5nPSVqXCIsdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nKSwhMSE9PXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyYmKEwoXCJwYXVzZVwiKSx0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9ITEsdGhpcy5lbWl0KFwicGF1c2VcIikpLHRoaXN9LG8ucHJvdG90eXBlLndyYXA9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVhZGFibGVTdGF0ZSxyPSExLG49dGhpczt0Lm9uKFwiZW5kXCIsZnVuY3Rpb24oKXtpZihMKFwid3JhcHBlZCBlbmRcIiksZS5kZWNvZGVyJiYhZS5lbmRlZCl7dmFyIHQ9ZS5kZWNvZGVyLmVuZCgpO3QmJnQubGVuZ3RoJiZuLnB1c2godCl9bi5wdXNoKG51bGwpfSksdC5vbihcImRhdGFcIixmdW5jdGlvbihpKXtpZihMKFwid3JhcHBlZCBkYXRhXCIpLGUuZGVjb2RlciYmKGk9ZS5kZWNvZGVyLndyaXRlKGkpKSwoIWUub2JqZWN0TW9kZXx8bnVsbCE9PWkmJnZvaWQgMCE9PWkpJiYoZS5vYmplY3RNb2RlfHxpJiZpLmxlbmd0aCkpe3ZhciBvPW4ucHVzaChpKTtvfHwocj0hMCx0LnBhdXNlKCkpfX0pO2Zvcih2YXIgaSBpbiB0KXZvaWQgMD09PXRoaXNbaV0mJlwiZnVuY3Rpb25cIj09dHlwZW9mIHRbaV0mJih0aGlzW2ldPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0W2VdLmFwcGx5KHQsYXJndW1lbnRzKX19KGkpKTt2YXIgbz1bXCJlcnJvclwiLFwiY2xvc2VcIixcImRlc3Ryb3lcIixcInBhdXNlXCIsXCJyZXN1bWVcIl07cmV0dXJuIHgobyxmdW5jdGlvbihlKXt0Lm9uKGUsbi5lbWl0LmJpbmQobixlKSl9KSxuLl9yZWFkPWZ1bmN0aW9uKGUpe0woXCJ3cmFwcGVkIF9yZWFkXCIsZSksciYmKHI9ITEsdC5yZXN1bWUoKSl9LG59LG8uX2Zyb21MaXN0PV99KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbihtb2R1bGUsZXhwb3J0cyxfX3dlYnBhY2tfcmVxdWlyZV9fKXtmdW5jdGlvbiBDb250ZXh0KCl7fXZhciBpbmRleE9mPV9fd2VicGFja19yZXF1aXJlX18oNjA3KSxPYmplY3Rfa2V5cz1mdW5jdGlvbih0KXtpZihPYmplY3Qua2V5cylyZXR1cm4gT2JqZWN0LmtleXModCk7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlfSxmb3JFYWNoPWZ1bmN0aW9uKHQsZSl7aWYodC5mb3JFYWNoKXJldHVybiB0LmZvckVhY2goZSk7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspZSh0W3JdLHIsdCl9LGRlZmluZVByb3A9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcIl9cIix7fSksZnVuY3Rpb24odCxlLHIpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUse3dyaXRhYmxlOiEwLGVudW1lcmFibGU6ITEsXG5jb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfX1jYXRjaCh0KXtyZXR1cm4gZnVuY3Rpb24odCxlLHIpe3RbZV09cn19fSgpLGdsb2JhbHM9W1wiQXJyYXlcIixcIkJvb2xlYW5cIixcIkRhdGVcIixcIkVycm9yXCIsXCJFdmFsRXJyb3JcIixcIkZ1bmN0aW9uXCIsXCJJbmZpbml0eVwiLFwiSlNPTlwiLFwiTWF0aFwiLFwiTmFOXCIsXCJOdW1iZXJcIixcIk9iamVjdFwiLFwiUmFuZ2VFcnJvclwiLFwiUmVmZXJlbmNlRXJyb3JcIixcIlJlZ0V4cFwiLFwiU3RyaW5nXCIsXCJTeW50YXhFcnJvclwiLFwiVHlwZUVycm9yXCIsXCJVUklFcnJvclwiLFwiZGVjb2RlVVJJXCIsXCJkZWNvZGVVUklDb21wb25lbnRcIixcImVuY29kZVVSSVwiLFwiZW5jb2RlVVJJQ29tcG9uZW50XCIsXCJlc2NhcGVcIixcImV2YWxcIixcImlzRmluaXRlXCIsXCJpc05hTlwiLFwicGFyc2VGbG9hdFwiLFwicGFyc2VJbnRcIixcInVuZGVmaW5lZFwiLFwidW5lc2NhcGVcIl07Q29udGV4dC5wcm90b3R5cGU9e307dmFyIFNjcmlwdD1leHBvcnRzLlNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIFNjcmlwdD92b2lkKHRoaXMuY29kZT10KTpuZXcgU2NyaXB0KHQpfTtTY3JpcHQucHJvdG90eXBlLnJ1bkluQ29udGV4dD1mdW5jdGlvbih0KXtpZighKHQgaW5zdGFuY2VvZiBDb250ZXh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwibmVlZHMgYSAnY29udGV4dCcgYXJndW1lbnQuXCIpO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpZnJhbWVcIik7ZS5zdHlsZXx8KGUuc3R5bGU9e30pLGUuc3R5bGUuZGlzcGxheT1cIm5vbmVcIixkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGUpO3ZhciByPWUuY29udGVudFdpbmRvdyxuPXIuZXZhbCxpPXIuZXhlY1NjcmlwdDshbiYmaSYmKGkuY2FsbChyLFwibnVsbFwiKSxuPXIuZXZhbCksZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihlKXtyW2VdPXRbZV19KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24oZSl7dFtlXSYmKHJbZV09dFtlXSl9KTt2YXIgbz1PYmplY3Rfa2V5cyhyKSxhPW4uY2FsbChyLHRoaXMuY29kZSk7cmV0dXJuIGZvckVhY2goT2JqZWN0X2tleXMociksZnVuY3Rpb24oZSl7KGUgaW4gdHx8aW5kZXhPZihvLGUpPT09LTEpJiYodFtlXT1yW2VdKX0pLGZvckVhY2goZ2xvYmFscyxmdW5jdGlvbihlKXtlIGluIHR8fGRlZmluZVByb3AodCxlLHJbZV0pfSksZG9jdW1lbnQuYm9keS5yZW1vdmVDaGlsZChlKSxhfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluVGhpc0NvbnRleHQ9ZnVuY3Rpb24oKXtyZXR1cm4gZXZhbCh0aGlzLmNvZGUpfSxTY3JpcHQucHJvdG90eXBlLnJ1bkluTmV3Q29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT1TY3JpcHQuY3JlYXRlQ29udGV4dCh0KSxyPXRoaXMucnVuSW5Db250ZXh0KGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKGUpLGZ1bmN0aW9uKHIpe3Rbcl09ZVtyXX0pLHJ9LGZvckVhY2goT2JqZWN0X2tleXMoU2NyaXB0LnByb3RvdHlwZSksZnVuY3Rpb24odCl7ZXhwb3J0c1t0XT1TY3JpcHRbdF09ZnVuY3Rpb24oZSl7dmFyIHI9U2NyaXB0KGUpO3JldHVybiByW3RdLmFwcGx5KHIsW10uc2xpY2UuY2FsbChhcmd1bWVudHMsMSkpfX0pLGV4cG9ydHMuY3JlYXRlU2NyaXB0PWZ1bmN0aW9uKHQpe3JldHVybiBleHBvcnRzLlNjcmlwdCh0KX0sZXhwb3J0cy5jcmVhdGVDb250ZXh0PVNjcmlwdC5jcmVhdGVDb250ZXh0PWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBDb250ZXh0O3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZmb3JFYWNoKE9iamVjdF9rZXlzKHQpLGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pLGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoNzUpLGk9cig2Myksbz1yKDExNSksYT1yKDI2NCksZj1yKDI2Mykscz1yKDI2NiksdT1yKDI2NSksaD1yKDI2MiksYz1yKDExNiksZD1uZXcgZSgwKSxsPWZ1bmN0aW9uKHQpe3ZhciBlPW4uZnJvbVVyaSh0KTtyZXR1cm4gZS52YWxpZGF0ZSgpfSxwPWZ1bmN0aW9uKHQscixuKXtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgbiYmKG49ZCksIWUuaXNCdWZmZXIobikpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgQnVmZmVyXCIpO3ZhciBvPWkuZnJvbVVyaSh0KSxhPW8uZ2V0Q29uZGl0aW9uVXJpKCk7aWYoYSE9PXIpdGhyb3cgbmV3IEVycm9yKFwiRnVsZmlsbG1lbnQgZG9lcyBub3QgbWF0Y2ggY29uZGl0aW9uIChleHBlY3RlZDogXCIrcitcIiwgYWN0dWFsOiBcIithK1wiKVwiKTtyZXR1cm4gby52YWxpZGF0ZShuKX0sYj1mdW5jdGlvbih0KXt2YXIgZT1pLmZyb21VcmkodCk7cmV0dXJuIGUuZ2V0Q29uZGl0aW9uVXJpKCl9O28ucmVnaXN0ZXJUeXBlKGEpLG8ucmVnaXN0ZXJUeXBlKGYpLG8ucmVnaXN0ZXJUeXBlKHMpLG8ucmVnaXN0ZXJUeXBlKHUpLG8ucmVnaXN0ZXJUeXBlKGgpLHQuZXhwb3J0cz17Q29uZGl0aW9uOm4sRnVsZmlsbG1lbnQ6aSxUeXBlUmVnaXN0cnk6byxQcmVpbWFnZVNoYTI1NjphLFJzYVNoYTI1Njp1LFByZWZpeFNoYTI1NjpmLFRocmVzaG9sZFNoYTI1NjpzLEVkMjU1MTk6aCx2YWxpZGF0ZUNvbmRpdGlvbjpsLHZhbGlkYXRlRnVsZmlsbG1lbnQ6cCxmdWxmaWxsbWVudFRvQ29uZGl0aW9uOmIsYmFzZTY0dXJsOmMsZnJvbUNvbmRpdGlvblVyaTpuLmZyb21VcmkuYmluZChuKSxmcm9tQ29uZGl0aW9uQmluYXJ5Om4uZnJvbUJpbmFyeS5iaW5kKG4pLGZyb21GdWxmaWxsbWVudFVyaTppLmZyb21VcmkuYmluZChpKSxmcm9tRnVsZmlsbG1lbnRCaW5hcnk6aS5mcm9tQmluYXJ5LmJpbmQoaSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQsZSxyKXt0W2VdfHxPYmplY3Rbbl0odCxlLHt3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITAsdmFsdWU6cn0pfWlmKHIoNDYxKSxyKDI2OCkscigyNjkpLHQuX2JhYmVsUG9seWZpbGwpdGhyb3cgbmV3IEVycm9yKFwib25seSBvbmUgaW5zdGFuY2Ugb2YgYmFiZWwtcG9seWZpbGwgaXMgYWxsb3dlZFwiKTt0Ll9iYWJlbFBvbHlmaWxsPSEwO3ZhciBuPVwiZGVmaW5lUHJvcGVydHlcIjtlKFN0cmluZy5wcm90b3R5cGUsXCJwYWRMZWZ0XCIsXCJcIi5wYWRTdGFydCksZShTdHJpbmcucHJvdG90eXBlLFwicGFkUmlnaHRcIixcIlwiLnBhZEVuZCksXCJwb3AscmV2ZXJzZSxzaGlmdCxrZXlzLHZhbHVlcyxlbnRyaWVzLGluZGV4T2YsZXZlcnksc29tZSxmb3JFYWNoLG1hcCxmaWx0ZXIsZmluZCxmaW5kSW5kZXgsaW5jbHVkZXMsam9pbixzbGljZSxjb25jYXQscHVzaCxzcGxpY2UsdW5zaGlmdCxzb3J0LGxhc3RJbmRleE9mLHJlZHVjZSxyZWR1Y2VSaWdodCxjb3B5V2l0aGluLGZpbGxcIi5zcGxpdChcIixcIikuZm9yRWFjaChmdW5jdGlvbih0KXtbXVt0XSYmZShBcnJheSx0LEZ1bmN0aW9uLmNhbGwuYmluZChbXVt0XSkpfSl9KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMTEpLGk9cigxMTIpLG89cigyNTUpLGE9cigyNTYpO3QuZXhwb3J0cz17UmVhZGVyOm8sV3JpdGVyOmF9O2Zvcih2YXIgZiBpbiBpKWkuaGFzT3duUHJvcGVydHkoZikmJih0LmV4cG9ydHNbZl09aVtmXSk7Zm9yKHZhciBzIGluIG4pbi5oYXNPd25Qcm9wZXJ0eShzKSYmKHQuZXhwb3J0c1tzXT1uW3NdKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2lmKCF0fHwhZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiZGF0YSBtdXN0IGJlIGEgbm9kZSBCdWZmZXJcIik7dGhpcy5fYnVmPXQsdGhpcy5fc2l6ZT10Lmxlbmd0aCx0aGlzLl9sZW49MCx0aGlzLl9vZmZzZXQ9MH12YXIgaT1yKDIwMiksbz1yKDExMiksYT1yKDExMSksZj1hLm5ld0ludmFsaWRBc24xRXJyb3I7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwibGVuZ3RoXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xlbn19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJvZmZzZXRcIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fb2Zmc2V0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcInJlbWFpblwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2l6ZS10aGlzLl9vZmZzZXR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0KX19KSxuLnByb3RvdHlwZS5yZWFkQnl0ZT1mdW5jdGlvbih0KXtpZih0aGlzLl9zaXplLXRoaXMuX29mZnNldDwxKXJldHVybiBudWxsO3ZhciBlPTI1NSZ0aGlzLl9idWZbdGhpcy5fb2Zmc2V0XTtyZXR1cm4gdHx8KHRoaXMuX29mZnNldCs9MSksZX0sbi5wcm90b3R5cGUucGVlaz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCeXRlKCEwKX0sbi5wcm90b3R5cGUucmVhZExlbmd0aD1mdW5jdGlvbih0KXtpZih2b2lkIDA9PT10JiYodD10aGlzLl9vZmZzZXQpLHQ+PXRoaXMuX3NpemUpcmV0dXJuIG51bGw7dmFyIGU9MjU1JnRoaXMuX2J1Zlt0KytdO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKDEyOD09KDEyOCZlKSl7aWYoZSY9MTI3LDA9PWUpdGhyb3cgZihcIkluZGVmaW5pdGUgbGVuZ3RoIG5vdCBzdXBwb3J0ZWRcIik7aWYoZT40KXRocm93IGYoXCJlbmNvZGluZyB0b28gbG9uZ1wiKTtpZih0aGlzLl9zaXplLXQ8ZSlyZXR1cm4gbnVsbDt0aGlzLl9sZW49MDtmb3IodmFyIHI9MDtyPGU7cisrKXRoaXMuX2xlbj0odGhpcy5fbGVuPDw4KSsoMjU1JnRoaXMuX2J1Zlt0KytdKX1lbHNlIHRoaXMuX2xlbj1lO3JldHVybiB0fSxuLnByb3RvdHlwZS5yZWFkU2VxdWVuY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZWVrKCk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7aWYodm9pZCAwIT09dCYmdCE9PWUpdGhyb3cgZihcIkV4cGVjdGVkIDB4XCIrdC50b1N0cmluZygxNikrXCI6IGdvdCAweFwiK2UudG9TdHJpbmcoMTYpKTt2YXIgcj10aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0KzEpO3JldHVybiBudWxsPT09cj9udWxsOih0aGlzLl9vZmZzZXQ9cixlKX0sbi5wcm90b3R5cGUucmVhZEludD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkVGFnKG8uSW50ZWdlcil9LG4ucHJvdG90eXBlLnJlYWRCb29sZWFuPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLl9yZWFkVGFnKG8uQm9vbGVhbil9LG4ucHJvdG90eXBlLnJlYWRFbnVtZXJhdGlvbj1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkVGFnKG8uRW51bWVyYXRpb24pfSxuLnByb3RvdHlwZS5yZWFkU3RyaW5nPWZ1bmN0aW9uKHQscil7dHx8KHQ9by5PY3RldFN0cmluZyk7dmFyIG49dGhpcy5wZWVrKCk7aWYobnVsbD09PW4pcmV0dXJuIG51bGw7aWYobiE9PXQpdGhyb3cgZihcIkV4cGVjdGVkIDB4XCIrdC50b1N0cmluZygxNikrXCI6IGdvdCAweFwiK24udG9TdHJpbmcoMTYpKTt2YXIgaT10aGlzLnJlYWRMZW5ndGgodGhpcy5fb2Zmc2V0KzEpO2lmKG51bGw9PT1pKXJldHVybiBudWxsO2lmKHRoaXMubGVuZ3RoPnRoaXMuX3NpemUtaSlyZXR1cm4gbnVsbDtpZih0aGlzLl9vZmZzZXQ9aSwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIHI/bmV3IGUoMCk6XCJcIjt2YXIgYT10aGlzLl9idWYuc2xpY2UodGhpcy5fb2Zmc2V0LHRoaXMuX29mZnNldCt0aGlzLmxlbmd0aCk7cmV0dXJuIHRoaXMuX29mZnNldCs9dGhpcy5sZW5ndGgscj9hOmEudG9TdHJpbmcoXCJ1dGY4XCIpfSxuLnByb3RvdHlwZS5yZWFkT0lEPWZ1bmN0aW9uKHQpe3R8fCh0PW8uT0lEKTt2YXIgZT10aGlzLnJlYWRTdHJpbmcodCwhMCk7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7Zm9yKHZhciByPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKyspe3ZhciBhPTI1NSZlW2ldO248PD03LG4rPTEyNyZhLDA9PSgxMjgmYSkmJihyLnB1c2gobiksbj0wKX1yZXR1cm4gbj1yLnNoaWZ0KCksci51bnNoaWZ0KG4lNDApLHIudW5zaGlmdChuLzQwPj4wKSxyLmpvaW4oXCIuXCIpfSxuLnByb3RvdHlwZS5fcmVhZFRhZz1mdW5jdGlvbih0KXtpLm9rKHZvaWQgMCE9PXQpO3ZhciBlPXRoaXMucGVlaygpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKGUhPT10KXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIitlLnRvU3RyaW5nKDE2KSk7dmFyIHI9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtpZihudWxsPT09cilyZXR1cm4gbnVsbDtpZih0aGlzLmxlbmd0aD40KXRocm93IGYoXCJJbnRlZ2VyIHRvbyBsb25nOiBcIit0aGlzLmxlbmd0aCk7aWYodGhpcy5sZW5ndGg+dGhpcy5fc2l6ZS1yKXJldHVybiBudWxsO3RoaXMuX29mZnNldD1yO2Zvcih2YXIgbj10aGlzLl9idWZbdGhpcy5fb2Zmc2V0XSxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKW88PD04LG98PTI1NSZ0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdO3JldHVybiAxMjg9PSgxMjgmbikmJjQhPT1hJiYoby09MTw8OCphKSxvPj4wfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe28ub2sodCksby5lcXVhbCh0eXBlb2YgdCxcIm9iamVjdFwiKSxvLm9rKGUpLG8uZXF1YWwodHlwZW9mIGUsXCJvYmplY3RcIik7dmFyIHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCk7cmV0dXJuIHIuZm9yRWFjaChmdW5jdGlvbihyKXtpZighZVtyXSl7dmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcih0LHIpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHIsbil9fSksZX1mdW5jdGlvbiBpKHQpe3Q9bihzLHR8fHt9KSx0aGlzLl9idWY9bmV3IGUodC5zaXplfHwxMDI0KSx0aGlzLl9zaXplPXRoaXMuX2J1Zi5sZW5ndGgsdGhpcy5fb2Zmc2V0PTAsdGhpcy5fb3B0aW9ucz10LHRoaXMuX3NlcT1bXX12YXIgbz1yKDIwMiksYT1yKDExMiksZj1yKDExMSkscz0oZi5uZXdJbnZhbGlkQXNuMUVycm9yLHtzaXplOjEwMjQsZ3Jvd3RoRmFjdG9yOjh9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoaS5wcm90b3R5cGUsXCJidWZmZXJcIix7Z2V0OmZ1bmN0aW9uKCl7aWYodGhpcy5fc2VxLmxlbmd0aCl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcih0aGlzLl9zZXEubGVuZ3RoK1wiIHVuZW5kZWQgc2VxdWVuY2UocylcIik7cmV0dXJuIHRoaXMuX2J1Zi5zbGljZSgwLHRoaXMuX29mZnNldCl9fSksaS5wcm90b3R5cGUud3JpdGVCeXRlPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO3RoaXMuX2Vuc3VyZSgxKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXR9LGkucHJvdG90eXBlLndyaXRlSW50PWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7XCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuSW50ZWdlcik7Zm9yKHZhciByPTQ7KDA9PT0oNDI4NjU3ODY4OCZ0KXx8KDQyODY1Nzg2ODgmdCk9PT0tODM4ODYwOCkmJnI+MTspci0tLHQ8PD04O2lmKHI+NCl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcihcIkJFUiBpbnRzIGNhbm5vdCBiZSA+IDB4ZmZmZmZmZmZcIik7Zm9yKHRoaXMuX2Vuc3VyZSgyK3IpLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109ZSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXI7ci0tID4wOyl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPSg0Mjc4MTkwMDgwJnQpPj4+MjQsdDw8PTh9LGkucHJvdG90eXBlLndyaXRlTnVsbD1mdW5jdGlvbigpe3RoaXMud3JpdGVCeXRlKGEuTnVsbCksdGhpcy53cml0ZUJ5dGUoMCl9LGkucHJvdG90eXBlLndyaXRlRW51bWVyYXRpb249ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTtyZXR1cm5cIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5FbnVtZXJhdGlvbiksdGhpcy53cml0ZUludCh0LGUpfSxpLnByb3RvdHlwZS53cml0ZUJvb2xlYW49ZnVuY3Rpb24odCxlKXtpZihcImJvb2xlYW5cIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBCb29sZWFuXCIpO1wibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLkJvb2xlYW4pLHRoaXMuX2Vuc3VyZSgzKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPWUsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD8yNTU6MH0saS5wcm90b3R5cGUud3JpdGVTdHJpbmc9ZnVuY3Rpb24odCxyKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZyAod2FzOiBcIit0eXBlb2YgdCtcIilcIik7XCJudW1iZXJcIiE9dHlwZW9mIHImJihyPWEuT2N0ZXRTdHJpbmcpO3ZhciBuPWUuYnl0ZUxlbmd0aCh0KTt0aGlzLndyaXRlQnl0ZShyKSx0aGlzLndyaXRlTGVuZ3RoKG4pLG4mJih0aGlzLl9lbnN1cmUobiksdGhpcy5fYnVmLndyaXRlKHQsdGhpcy5fb2Zmc2V0KSx0aGlzLl9vZmZzZXQrPW4pfSxpLnByb3RvdHlwZS53cml0ZUJ1ZmZlcj1mdW5jdGlvbih0LHIpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiByKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ0YWcgbXVzdCBiZSBhIG51bWJlclwiKTtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIGJ1ZmZlclwiKTt0aGlzLndyaXRlQnl0ZShyKSx0aGlzLndyaXRlTGVuZ3RoKHQubGVuZ3RoKSx0aGlzLl9lbnN1cmUodC5sZW5ndGgpLHQuY29weSh0aGlzLl9idWYsdGhpcy5fb2Zmc2V0LDAsdC5sZW5ndGgpLHRoaXMuX29mZnNldCs9dC5sZW5ndGh9LGkucHJvdG90eXBlLndyaXRlU3RyaW5nQXJyYXk9ZnVuY3Rpb24odCl7aWYoIXQgaW5zdGFuY2VvZiBBcnJheSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheVtTdHJpbmddXCIpO3ZhciBlPXRoaXM7dC5mb3JFYWNoKGZ1bmN0aW9uKHQpe2Uud3JpdGVTdHJpbmcodCl9KX0saS5wcm90b3R5cGUud3JpdGVPSUQ9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7ZTwxMjg/dC5wdXNoKGUpOmU8MTYzODQ/KHQucHVzaChlPj4+N3wxMjgpLHQucHVzaCgxMjcmZSkpOmU8MjA5NzE1Mj8odC5wdXNoKGU+Pj4xNHwxMjgpLHQucHVzaCgyNTUmKGU+Pj43fDEyOCkpLHQucHVzaCgxMjcmZSkpOmU8MjY4NDM1NDU2Pyh0LnB1c2goZT4+PjIxfDEyOCksdC5wdXNoKDI1NSYoZT4+PjE0fDEyOCkpLHQucHVzaCgyNTUmKGU+Pj43fDEyOCkpLHQucHVzaCgxMjcmZSkpOih0LnB1c2goMjU1JihlPj4+Mjh8MTI4KSksdC5wdXNoKDI1NSYoZT4+PjIxfDEyOCkpLHQucHVzaCgyNTUmKGU+Pj4xNHwxMjgpKSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKX1pZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZ1wiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5PSUQpLCEvXihbMC05XStcXC4pezMsfVswLTldKyQvLnRlc3QodCkpdGhyb3cgbmV3IEVycm9yKFwiYXJndW1lbnQgaXMgbm90IGEgdmFsaWQgT0lEIHN0cmluZ1wiKTt2YXIgbj10LnNwbGl0KFwiLlwiKSxpPVtdO2kucHVzaCg0MCpwYXJzZUludChuWzBdLDEwKStwYXJzZUludChuWzFdLDEwKSksbi5zbGljZSgyKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe3IoaSxwYXJzZUludCh0LDEwKSl9KTt2YXIgbz10aGlzO3RoaXMuX2Vuc3VyZSgyK2kubGVuZ3RoKSx0aGlzLndyaXRlQnl0ZShlKSx0aGlzLndyaXRlTGVuZ3RoKGkubGVuZ3RoKSxpLmZvckVhY2goZnVuY3Rpb24odCl7by53cml0ZUJ5dGUodCl9KX0saS5wcm90b3R5cGUud3JpdGVMZW5ndGg9ZnVuY3Rpb24odCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7aWYodGhpcy5fZW5zdXJlKDQpLHQ8PTEyNyl0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ7ZWxzZSBpZih0PD0yNTUpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xMjksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10O2Vsc2UgaWYodDw9NjU1MzUpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0xMzAsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10Pj44LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dDtlbHNle2lmKCEodDw9MTY3NzcyMTUpKXRocm93IG5ldyBJbnZhbGlkQXNuMUVScm9yKFwiTGVuZ3RoIHRvbyBsb25nICg+IDQgYnl0ZXMpXCIpO3RoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTMxLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+MTYsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10Pj44LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dH19LGkucHJvdG90eXBlLnN0YXJ0U2VxdWVuY2U9ZnVuY3Rpb24odCl7XCJudW1iZXJcIiE9dHlwZW9mIHQmJih0PWEuU2VxdWVuY2V8YS5Db25zdHJ1Y3RvciksdGhpcy53cml0ZUJ5dGUodCksdGhpcy5fc2VxLnB1c2godGhpcy5fb2Zmc2V0KSx0aGlzLl9lbnN1cmUoMyksdGhpcy5fb2Zmc2V0Kz0zfSxpLnByb3RvdHlwZS5lbmRTZXF1ZW5jZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3NlcS5wb3AoKSxlPXQrMyxyPXRoaXMuX29mZnNldC1lO2lmKHI8PTEyNyl0aGlzLl9zaGlmdChlLHIsLTIpLHRoaXMuX2J1Zlt0XT1yO2Vsc2UgaWYocjw9MjU1KXRoaXMuX3NoaWZ0KGUsciwtMSksdGhpcy5fYnVmW3RdPTEyOSx0aGlzLl9idWZbdCsxXT1yO2Vsc2UgaWYocjw9NjU1MzUpdGhpcy5fYnVmW3RdPTEzMCx0aGlzLl9idWZbdCsxXT1yPj44LHRoaXMuX2J1Zlt0KzJdPXI7ZWxzZXtpZighKHI8PTE2Nzc3MjE1KSl0aHJvdyBuZXcgSW52YWxpZEFzbjFFcnJvcihcIlNlcXVlbmNlIHRvbyBsb25nXCIpO3RoaXMuX3NoaWZ0KGUsciwxKSx0aGlzLl9idWZbdF09MTMxLHRoaXMuX2J1Zlt0KzFdPXI+PjE2LHRoaXMuX2J1Zlt0KzJdPXI+PjgsdGhpcy5fYnVmW3QrM109cn19LGkucHJvdG90eXBlLl9zaGlmdD1mdW5jdGlvbih0LGUscil7by5vayh2b2lkIDAhPT10KSxvLm9rKHZvaWQgMCE9PWUpLG8ub2sociksdGhpcy5fYnVmLmNvcHkodGhpcy5fYnVmLHQrcix0LHQrZSksdGhpcy5fb2Zmc2V0Kz1yfSxpLnByb3RvdHlwZS5fZW5zdXJlPWZ1bmN0aW9uKHQpe2lmKG8ub2sodCksdGhpcy5fc2l6ZS10aGlzLl9vZmZzZXQ8dCl7dmFyIHI9dGhpcy5fc2l6ZSp0aGlzLl9vcHRpb25zLmdyb3d0aEZhY3RvcjtyLXRoaXMuX29mZnNldDx0JiYocis9dCk7dmFyIG49bmV3IGUocik7dGhpcy5fYnVmLmNvcHkobiwwLDAsdGhpcy5fb2Zmc2V0KSx0aGlzLl9idWY9bix0aGlzLl9zaXplPXJ9fSx0LmV4cG9ydHM9aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI1NCk7dC5leHBvcnRzPXtCZXI6bixCZXJSZWFkZXI6bi5SZWFkZXIsQmVyV3JpdGVyOm4uV3JpdGVyfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig5MyksYT1yKDExNCksZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLGU9ZXx8e30sdGhpcy5oYXNoQWxnb3JpdGhtPWUuaGFzaEFsZ29yaXRobXx8XCJzaGEyNTZcIix0aGlzLmhhc2hMZW5ndGg9YS5nZXRMZW5ndGgodGhpcy5oYXNoQWxnb3JpdGhtKSx0aGlzLnNhbHRMZW5ndGg9dGhpcy5oYXNoTGVuZ3RofXJldHVybiBpKHQsW3trZXk6XCJnZW5lcmF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPW5ldyBlKHIpLGk9TWF0aC5jZWlsKHIvdGhpcy5oYXNoTGVuZ3RoKSxhPTA7YTxpO2ErKyl7dmFyIGY9bmV3IGUoNCk7Zi53cml0ZUludDMyQkUoYSwwKTt2YXIgcz1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUodCkudXBkYXRlKGYpLmRpZ2VzdCgpO3MuY29weShuLGEqdGhpcy5oYXNoTGVuZ3RoKX1yZXR1cm4gbn19XSksdH0oKTt0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoOTMpLGE9cigyNTgpLGY9cigyNjcpLHM9cigxMTQpLHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSxlPWV8fHt9LHRoaXMuaGFzaEFsZ29yaXRobT1lLmhhc2hBbGdvcml0aG18fFwic2hhMjU2XCIsdGhpcy5oYXNoTGVuZ3RoPXMuZ2V0TGVuZ3RoKHRoaXMuaGFzaEFsZ29yaXRobSksdGhpcy5zYWx0TGVuZ3RoPXRoaXMuaGFzaExlbmd0aH1yZXR1cm4gaSh0LFt7a2V5OlwiZW5jb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCxyKXt2YXIgbj1NYXRoLmNlaWwoci84KSxpPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZSh0KS5kaWdlc3QoKTtpZihuPHRoaXMuaGFzaExlbmd0aCt0aGlzLnNhbHRMZW5ndGgrMil0aHJvdyBuZXcgRXJyb3IoXCJFbmNvZGluZyBlcnJvcjogUlNBIG1vZHVsdXMgaXMgdG9vIHNtYWxsIGZvciBcIit0aGlzLmhhc2hBbGdvcml0aG0pO3ZhciBzPW8ucmFuZG9tQnl0ZXModGhpcy5zYWx0TGVuZ3RoKSx1PW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZShuZXcgZSg4KS5maWxsKDApKS51cGRhdGUoaSkudXBkYXRlKHMpLmRpZ2VzdCgpLGg9ZS5jb25jYXQoW25ldyBlKG4tdGhpcy5zYWx0TGVuZ3RoLXRoaXMuaGFzaExlbmd0aC0yKS5maWxsKDApLG5ldyBlKFsxXSksc10pLGM9bmV3IGEoe2hhc2hBbGdvcml0aG06dGhpcy5oYXNoQWxnb3JpdGhtfSksZD1jLmdlbmVyYXRlKHUsbi10aGlzLmhhc2hMZW5ndGgtMSksbD1mKGgsZCk7cmV0dXJuIGxbMF0mPTI1NT4+Pjgqbi1yLGUuY29uY2F0KFtsLHUsbmV3IGUoWzE4OF0pXSl9fSx7a2V5OlwidmVyaWZ5XCIsdmFsdWU6ZnVuY3Rpb24odCxyLG4pe3ZhciBpPU1hdGguY2VpbChuLzgpLHM9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKHQpLmRpZ2VzdCgpO2lmKGk8dGhpcy5oYXNoTGVuZ3RoK3RoaXMuc2FsdExlbmd0aCsyKXJldHVybiExO2lmKDE4OCE9PXJbci5sZW5ndGgtMV0pcmV0dXJuITE7dmFyIHU9aS10aGlzLmhhc2hMZW5ndGgtMSxoPXIuc2xpY2UoMCx1KSxjPXIuc2xpY2UodSx1K3RoaXMuaGFzaExlbmd0aCksZD0yNTU+Pj44KmktbjtpZihoWzBdJn5kKXJldHVybiExO3ZhciBsPW5ldyBhKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pLHA9bC5nZW5lcmF0ZShjLGktdGhpcy5oYXNoTGVuZ3RoLTEpLGI9ZihoLHApO2JbMF0mPWQ7Zm9yKHZhciB2PWktdGhpcy5oYXNoTGVuZ3RoLXRoaXMuc2FsdExlbmd0aC0yLHk9MDt5PHY7eSsrKWlmKDAhPT1iW3ldKXJldHVybiExO2lmKDEhPT1iW3ZdKXJldHVybiExO3ZhciBtPWIuc2xpY2UoYi5sZW5ndGgtdGhpcy5zYWx0TGVuZ3RoKSxnPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZShuZXcgZSg4KS5maWxsKDApKS51cGRhdGUocykudXBkYXRlKG0pLmRpZ2VzdCgpO3JldHVybiAwPT09ZS5jb21wYXJlKGMsZyl9fV0pLHR9KCk7dS5FTVBUWV9CVUZGRVI9bmV3IGUoMCksdC5leHBvcnRzPXV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDkzKSxhPXIoNDY0KSxmPXIoMjU5KSxzPXIoMTYxKSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksZT1lfHx7fSx0aGlzLmhhc2hBbGdvcml0aG09ZS5oYXNoQWxnb3JpdGhtfHxcInNoYTI1NlwiLHRoaXMucHNzPW5ldyBmKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pfXJldHVybiBpKHQsW3trZXk6XCJzaWduXCIsdmFsdWU6ZnVuY3Rpb24ocixuKXt2YXIgaT1zLm1vZHVsdXNGcm9tUHJpdmF0ZUtleShyKSxmPWlbMF0udG9TdHJpbmcoMikubGVuZ3RoLHU9OCooaS5sZW5ndGgtMSkrZixoPXRoaXMucHNzLmVuY29kZShuLHUtMSksYz1oLmxlbmd0aDxpLmxlbmd0aD9lLmNvbmNhdChbdC5aRVJPX0JZVEUsaF0pOmg7cmV0dXJuIG8ucHJpdmF0ZUVuY3J5cHQoe2tleTpyLHBhZGRpbmc6YS5SU0FfTk9fUEFERElOR30sYyl9fSx7a2V5OlwidmVyaWZ5XCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXMubW9kdWx1c1RvUGVtKHQpLGk9by5wdWJsaWNEZWNyeXB0KHtrZXk6bixwYWRkaW5nOmEuUlNBX05PX1BBRERJTkd9LHIpLGY9dFswXS50b1N0cmluZygyKS5sZW5ndGgsdT04Kih0Lmxlbmd0aC0xKStmLGg9dSU4PT09MT9pLnNsaWNlKDEpOmk7cmV0dXJuIHRoaXMucHNzLnZlcmlmeShlLGgsdS0xKX19XSksdH0oKTt1LlpFUk9fQllURT1uZXcgZShbMF0pLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDQ4OCkscz1yKDYzKSx1PXIoNTMpLGg9cigxNjApLGM9dm9pZCAwO3RyeXtjPXIoNDYyKX1jYXRjaCh0KXt9dmFyIGQ9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnB1YmxpY0tleT1udWxsLHQuc2lnbmF0dXJlPW51bGwsdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcInNldFB1YmxpY0tleVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQdWJsaWMga2V5IG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrdCk7aWYoMzIhPT10Lmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJQdWJsaWMga2V5IG11c3QgYmUgMzIgYnl0ZXMsIHdhczogXCIrdC5sZW5ndGgpO3RoaXMucHVibGljS2V5PXR9fSx7a2V5Olwic2V0U2lnbmF0dXJlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlNpZ25hdHVyZSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO2lmKDY0IT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiU2lnbmF0dXJlIG11c3QgYmUgNjQgYnl0ZXMsIHdhczogXCIrdC5sZW5ndGgpO3RoaXMuc2lnbmF0dXJlPXR9fSx7a2V5Olwic2lnblwiLHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IHUoXCJNZXNzYWdlIG11c3QgYmUgYSBCdWZmZXJcIik7aWYoIWUuaXNCdWZmZXIocikpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByaXZhdGUga2V5IG11c3QgYmUgYSBCdWZmZXIsIHdhczogXCIrcik7aWYoMzIhPT1yLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJQcml2YXRlIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCB3YXM6IFwiK3IubGVuZ3RoKTtpZihjKXt2YXIgbj1jLk1ha2VLZXlwYWlyKHIpO3RoaXMuc2V0UHVibGljS2V5KG4ucHVibGljS2V5KSx0aGlzLnNpZ25hdHVyZT1jLlNpZ24odCxuKX1lbHNle3ZhciBpPWYuc2lnbi5rZXlQYWlyLmZyb21TZWVkKHIpO3RoaXMuc2V0UHVibGljS2V5KG5ldyBlKGkucHVibGljS2V5KSksdGhpcy5zaWduYXR1cmU9bmV3IGUoZi5zaWduLmRldGFjaGVkKHQsaS5zZWNyZXRLZXkpKX19fSx7a2V5OlwiZ2VuZXJhdGVIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5wdWJsaWNLZXkpdGhyb3cgbmV3IHUoXCJSZXF1aXJlcyBhIHB1YmxpYyBrZXlcIik7cmV0dXJuIHRoaXMucHVibGljS2V5fX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0UHVibGljS2V5KHQucmVhZE9jdGV0U3RyaW5nKHIuUFVCS0VZX0xFTkdUSCkpLHRoaXMuc2V0U2lnbmF0dXJlKHQucmVhZE9jdGV0U3RyaW5nKHIuU0lHTkFUVVJFX0xFTkdUSCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3Qud3JpdGVPY3RldFN0cmluZyh0aGlzLnB1YmxpY0tleSxyLlBVQktFWV9MRU5HVEgpLHQud3JpdGVPY3RldFN0cmluZyh0aGlzLnNpZ25hdHVyZSxyLlNJR05BVFVSRV9MRU5HVEgpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gci5GVUxGSUxMTUVOVF9MRU5HVEh9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIGEgQnVmZmVyXCIpO3ZhciByPXZvaWQgMDtpZihyPWM/Yy5WZXJpZnkodCx0aGlzLnNpZ25hdHVyZSx0aGlzLnB1YmxpY0tleSk6Zi5zaWduLmRldGFjaGVkLnZlcmlmeSh0LHRoaXMuc2lnbmF0dXJlLHRoaXMucHVibGljS2V5KSxyIT09ITApdGhyb3cgbmV3IGgoXCJJbnZhbGlkIGVkMjU1MTkgc2lnbmF0dXJlXCIpO3JldHVybiEwfX1dKSxyfShzKTtkLlRZUEVfSUQ9NCxkLkZFQVRVUkVfQklUTUFTSz0zMixkLlBVQktFWV9MRU5HVEg9MzIsZC5TSUdOQVRVUkVfTEVOR1RIPTY0LGQuRlVMRklMTE1FTlRfTEVOR1RIPWQuUFVCS0VZX0xFTkdUSCtkLlNJR05BVFVSRV9MRU5HVEgsdC5leHBvcnRzPWR9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPWZ1bmN0aW9uIHQoZSxyLG4pe251bGw9PT1lJiYoZT1GdW5jdGlvbi5wcm90b3R5cGUpO3ZhciBpPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSxyKTtpZih2b2lkIDA9PT1pKXt2YXIgbz1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSk7cmV0dXJuIG51bGw9PT1vP3ZvaWQgMDp0KG8scixuKX1pZihcInZhbHVlXCJpbiBpKXJldHVybiBpLnZhbHVlO3ZhciBhPWkuZ2V0O2lmKHZvaWQgMCE9PWEpcmV0dXJuIGEuY2FsbChuKX0scz1yKDc1KSx1PXIoNjMpLGg9cig3NiksYz1yKDkwKSxkPXIoNTMpLGw9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnN1YmNvbmRpdGlvbj1udWxsLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJzZXRTdWJjb25kaXRpb25cIix2YWx1ZTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXMuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHMpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbnMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBDb25kaXRpb25cIik7dGhpcy5zdWJjb25kaXRpb249dH19LHtrZXk6XCJzZXRTdWJmdWxmaWxsbWVudFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXQ9dS5mcm9tVXJpKHQpO2Vsc2UgaWYoISh0IGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViZnVsZmlsbG1lbnRzIG11c3QgYmUgb2JqZWN0cyBvZiB0eXBlIEZ1bGZpbGxtZW50XCIpO3RoaXMuc3ViY29uZGl0aW9uPXR9fSx7a2V5Olwic2V0UHJlZml4XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByZWZpeCBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO3RoaXMucHJlZml4PXR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGYoci5wcm90b3R5cGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2Yoci5wcm90b3R5cGUpLFwiZ2V0Qml0bWFza1wiLHRoaXMpLmNhbGwodGhpcyl8dGhpcy5zdWJjb25kaXRpb24uZ2V0Qml0bWFzaygpfX0se2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5zdWJjb25kaXRpb24pdGhyb3cgbmV3IGQoXCJSZXF1aXJlcyBzdWJjb25kaXRpb25cIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSx0LndyaXRlKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2Ygcz90aGlzLnN1YmNvbmRpdGlvbi5zZXJpYWxpemVCaW5hcnkoKTp0aGlzLnN1YmNvbmRpdGlvbi5nZXRDb25kaXRpb25CaW5hcnkoKSl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2Ygcz90aGlzLnN1YmNvbmRpdGlvbi5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpOnRoaXMuc3ViY29uZGl0aW9uLmdldENvbmRpdGlvbigpLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCksZT1uZXcgYztyZXR1cm4gZS53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSxlLnNraXAodCksZS5nZXRTaXplKCl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRQcmVmaXgodC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSksdGhpcy5zZXRTdWJmdWxmaWxsbWVudCh1LmZyb21CaW5hcnkodCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb24gbXVzdCBiZSBmdWxmaWxsZWRcIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMucHJlZml4KSx0LndyaXRlKHRoaXMuc3ViY29uZGl0aW9uLnNlcmlhbGl6ZUJpbmFyeSgpKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCEodGhpcy5zdWJjb25kaXRpb24gaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb24gaXMgbm90IGEgZnVsZmlsbG1lbnRcIik7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IEVycm9yKFwiTWVzc2FnZSBtdXN0IGJlIHByb3ZpZGVkIGFzIGEgQnVmZmVyLCB3YXM6IFwiK3QpO3JldHVybiB0aGlzLnN1YmNvbmRpdGlvbi52YWxpZGF0ZShlLmNvbmNhdChbdGhpcy5wcmVmaXgsdF0pKX19XSkscn0oaCk7bC5UWVBFX0lEPTEsbC5GRUFUVVJFX0JJVE1BU0s9NSxsLnByb3RvdHlwZS5zZXRTdWJjb25kaXRpb25Vcmk9bC5wcm90b3R5cGUuc2V0U3ViY29uZGl0aW9uLGwucHJvdG90eXBlLnNldFN1YmZ1bGZpbGxtZW50VXJpPWwucHJvdG90eXBlLnNldFN1YmZ1bGZpbGxtZW50LHQuZXhwb3J0cz1sfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDc2KSxzPXIoNTMpLHU9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe3JldHVybiBuKHRoaXMsciksaSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWltYWdlKXRocm93IG5ldyBzKFwiQ291bGQgbm90IGNhbGN1bGF0ZSBoYXNoLCBubyBwcmVpbWFnZSBwcm92aWRlZFwiKTt0LndyaXRlKHRoaXMucHJlaW1hZ2UpfX0se2tleTpcInNldFByZWltYWdlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlByZWltYWdlIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7dGhpcy5wcmVpbWFnZT10fX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5zZXRQcmVpbWFnZSh0LnJlYWQoZSkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWltYWdlKXRocm93IG5ldyBzKFwiUHJlaW1hZ2UgbXVzdCBiZSBzcGVjaWZpZWRcIik7dC53cml0ZSh0aGlzLnByZWltYWdlKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiEwfX1dKSxyfShmKTt1LlRZUEVfSUQ9MCx1LkZFQVRVUkVfQklUTUFTSz0zLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1yKDI2MCkscz1yKDE2MSksdT1yKDc2KSxoPXIoOTApLGM9cig1MyksZD1yKDE2MCksbD1uZXcgZixwPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5tb2R1bHVzPW51bGwsdC5zaWduYXR1cmU9bnVsbCx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwid3JpdGVDb21tb25IZWFkZXJcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5tb2R1bHVzKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBwdWJsaWMgbW9kdWx1c1wiKTt0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5tb2R1bHVzKX19LHtrZXk6XCJzZXRQdWJsaWNNb2R1bHVzXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1vZHVsdXMgbXVzdCBiZSBhIGJ1ZmZlciwgd2FzOiBcIit0KTtpZigwPT09dFswXSl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG1heSBub3QgY29udGFpbiBsZWFkaW5nIHplcm9zXCIpO2lmKHQubGVuZ3RoPjUxMnx8dC5sZW5ndGg8MTI4KXRocm93IG5ldyBFcnJvcihcIk1vZHVsdXMgbXVzdCBiZSBiZXR3ZWVuIDEyOCBieXRlcyAoMTAxNyBiaXRzKSBhbmQgNTEyIGJ5dGVzICg0MDk2IGJpdHMpLCB3YXM6IFwiK3QubGVuZ3RoK1wiIGJ5dGVzXCIpO3RoaXMubW9kdWx1cz10fX0se2tleTpcInNldFNpZ25hdHVyZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTaWduYXR1cmUgbXVzdCBiZSBhIGJ1ZmZlciwgd2FzOiBcIit0KTt0aGlzLnNpZ25hdHVyZT10fX0se2tleTpcInNpZ25cIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMubW9kdWx1c3x8dGhpcy5zZXRQdWJsaWNNb2R1bHVzKHMubW9kdWx1c0Zyb21Qcml2YXRlS2V5KGUpKSx0aGlzLnNpZ25hdHVyZT1sLnNpZ24oZSx0KX19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFB1YmxpY01vZHVsdXModC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSksdGhpcy5zZXRTaWduYXR1cmUodC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSl9fSx7a2V5Olwid3JpdGVQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc2lnbmF0dXJlKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBzaWduYXR1cmVcIik7dGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5zaWduYXR1cmUpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgaDtpZighdGhpcy5tb2R1bHVzKXRocm93IG5ldyBjKFwiUmVxdWlyZXMgYSBwdWJsaWMgbW9kdWx1c1wiKTtyZXR1cm4gdGhpcy53cml0ZUNvbW1vbkhlYWRlcih0KSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5tb2R1bHVzKSx0LmdldFNpemUoKX19LHtrZXk6XCJ2YWxpZGF0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlciwgd2FzOiBcIit0KTt2YXIgcj1sLnZlcmlmeSh0aGlzLm1vZHVsdXMsdCx0aGlzLnNpZ25hdHVyZSk7aWYoIXIpdGhyb3cgbmV3IGQoXCJJbnZhbGlkIFJTQSBzaWduYXR1cmVcIik7cmV0dXJuITB9fV0pLHJ9KHUpO3AuVFlQRV9JRD0zLHAuRkVBVFVSRV9CSVRNQVNLPTE3LHQuZXhwb3J0cz1wfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1mdW5jdGlvbiB0KGUscixuKXtudWxsPT09ZSYmKGU9RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7aWYodm9pZCAwPT09aSl7dmFyIG89T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09bz92b2lkIDA6dChvLHIsbil9aWYoXCJ2YWx1ZVwiaW4gaSlyZXR1cm4gaS52YWx1ZTt2YXIgYT1pLmdldDtpZih2b2lkIDAhPT1hKXJldHVybiBhLmNhbGwobil9LHM9cig3NSksdT1yKDYzKSxoPXIoNzYpLGM9cig5MCksZD1yKDkxKSxsPXIoNTMpLHA9cigxMTMpLGI9cigxNjIpLHY9bmV3IGUoMCkseT1cImNvbmRpdGlvblwiLG09XCJmdWxmaWxsbWVudFwiLGc9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gcigpe24odGhpcyxyKTt2YXIgdD1pKHRoaXMsKHIuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YocikpLmNhbGwodGhpcykpO3JldHVybiB0LnRocmVzaG9sZD1udWxsLHQuc3ViY29uZGl0aW9ucz1bXSx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5OlwiYWRkU3ViY29uZGl0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXMuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHMpKXRocm93IG5ldyBFcnJvcihcIlN1YmNvbmRpdGlvbnMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBDb25kaXRpb25cIik7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIGUpZT0xO2Vsc2UgaWYoIWIoZSl8fGU8MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSW52YWxpZCB3ZWlnaHQsIG5vdCBhbiBpbnRlZ2VyOiBcIitlKTt0aGlzLnN1YmNvbmRpdGlvbnMucHVzaCh7dHlwZTp5LGJvZHk6dCx3ZWlnaHQ6ZX0pfX0se2tleTpcImFkZFN1YmZ1bGZpbGxtZW50XCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXUuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmZ1bGZpbGxtZW50cyBtdXN0IGJlIFVSSXMgb3Igb2JqZWN0cyBvZiB0eXBlIEZ1bGZpbGxtZW50XCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKWU9MTtlbHNlIGlmKCFiKGUpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgd2VpZ2h0LCBub3QgYW4gaW50ZWdlcjogXCIrZSk7dGhpcy5zdWJjb25kaXRpb25zLnB1c2goe3R5cGU6bSxib2R5OnQsd2VpZ2h0OmV9KX19LHtrZXk6XCJzZXRUaHJlc2hvbGRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighYih0KXx8dDwxKXRocm93IG5ldyBUeXBlRXJyb3IoXCJUaHJlc2hvbGQgbXVzdCBiZSBhIGludGVnZXIgZ3JlYXRlciB0aGFuIHplcm8sIHdhczogXCIrdCk7dGhpcy50aHJlc2hvbGQ9dH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1mKHIucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIucHJvdG90eXBlKSxcImdldEJpdG1hc2tcIix0aGlzKS5jYWxsKHRoaXMpLGU9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLGE9dGhpcy5zdWJjb25kaXRpb25zW1N5bWJvbC5pdGVyYXRvcl0oKTshKGU9KG89YS5uZXh0KCkpLmRvbmUpO2U9ITApe3ZhciBzPW8udmFsdWU7dHw9cy5ib2R5LmdldEJpdG1hc2soKX19Y2F0Y2godCl7bj0hMCxpPXR9ZmluYWxseXt0cnl7IWUmJmEucmV0dXJuJiZhLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBpfX1yZXR1cm4gdH19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc3ViY29uZGl0aW9ucy5sZW5ndGgpdGhyb3cgbmV3IGwoXCJSZXF1aXJlcyBzdWJjb25kaXRpb25zXCIpO3ZhciBlPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCl7dmFyIGU9bmV3IGQ7cmV0dXJuIGUud3JpdGVWYXJVSW50KHQud2VpZ2h0KSxlLndyaXRlKHQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbkJpbmFyeSgpOnQuYm9keS5zZXJpYWxpemVCaW5hcnkoKSksZS5nZXRCdWZmZXIoKX0pLHI9dGhpcy5jb25zdHJ1Y3Rvci5zb3J0QnVmZmVycyhlKTt0LndyaXRlVUludDMyKHRoaXMudGhyZXNob2xkKSx0LndyaXRlVmFyVUludChyLmxlbmd0aCksci5mb3JFYWNoKGZ1bmN0aW9uKGUpe3JldHVybiB0LndyaXRlKGUpfSl9fSx7a2V5OlwiY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMsZT0wLHI9dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbihyKXt2YXIgbj10LmNvbnN0cnVjdG9yLnByZWRpY3RTdWJjb25kaXRpb25MZW5ndGgociksaT10LmNvbnN0cnVjdG9yLnByZWRpY3RTdWJmdWxmaWxsbWVudExlbmd0aChyKTtyZXR1cm4gZSs9bix7d2VpZ2h0OnIud2VpZ2h0LHNpemU6aS1ufX0pLnNvcnQoZnVuY3Rpb24odCxlKXtyZXR1cm4gZS53ZWlnaHQtdC53ZWlnaHR9KSxuPWUrdGhpcy5jb25zdHJ1Y3Rvci5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodGhpcy50aHJlc2hvbGQscik7aWYobj09PS0oMS8wKSl0aHJvdyBuZXcgbChcIkluc3VmZmljaWVudCBzdWJjb25kaXRpb25zL3dlaWdodHMgdG8gbWVldCB0aGUgdGhyZXNob2xkXCIpO3ZhciBpPW5ldyBjO3JldHVybiBpLndyaXRlVUludDMyKHRoaXMudGhyZXNob2xkKSxpLndyaXRlVmFyVUludCh0aGlzLnN1YmNvbmRpdGlvbnMubGVuZ3RoKSx0aGlzLnN1YmNvbmRpdGlvbnMuZm9yRWFjaChmdW5jdGlvbih0KXtpLndyaXRlVUludDgoKSwxIT09dC53ZWlnaHQmJmkud3JpdGVVSW50MzIodC53ZWlnaHQpfSksaS5za2lwKG4pLGkuZ2V0U2l6ZSgpfX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0VGhyZXNob2xkKHQucmVhZFZhclVJbnQoKSk7Zm9yKHZhciBlPXQucmVhZFZhclVJbnQoKSxyPTA7cjxlO3IrKyl7dmFyIG49dC5yZWFkVmFyVUludCgpLGk9dC5yZWFkVmFyT2N0ZXRTdHJpbmcoKSxvPXQucmVhZFZhck9jdGV0U3RyaW5nKCk7aWYoaS5sZW5ndGgmJm8ubGVuZ3RoKXRocm93IG5ldyBwKFwiU3ViY29uZGl0aW9ucyBtYXkgbm90IHByb3ZpZGUgYm90aCBzdWJjb25kaXRpb24gYW5kIGZ1bGZpbGxtZW50LlwiKTtpZihpLmxlbmd0aCl0aGlzLmFkZFN1YmZ1bGZpbGxtZW50KHUuZnJvbUJpbmFyeShpKSxuKTtlbHNle2lmKCFvLmxlbmd0aCl0aHJvdyBuZXcgcChcIlN1YmNvbmRpdGlvbnMgbXVzdCBwcm92aWRlIGVpdGhlciBzdWJjb25kaXRpb24gb3IgZnVsZmlsbG1lbnQuXCIpO3RoaXMuYWRkU3ViY29uZGl0aW9uKHMuZnJvbUJpbmFyeShvKSxuKX19fX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50eXBlPT09bT9PYmplY3QuYXNzaWduKHt9LHQse2luZGV4OmUsc2l6ZTp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkubGVuZ3RoLG9taXRTaXplOnQuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKS5sZW5ndGh9KTpudWxsfSkuZmlsdGVyKEJvb2xlYW4pLHI9dGhpcy5jb25zdHJ1Y3Rvci5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodGhpcy50aHJlc2hvbGQsZSkuc2V0LG49dGhpcy5zdWJjb25kaXRpb25zLm1hcChmdW5jdGlvbih0LGUpe3JldHVybiB0LnR5cGU9PT1tJiZyLmluZGV4T2YoZSk9PT0tMT9PYmplY3QuYXNzaWduKHt9LHQse3R5cGU6eSxib2R5OnQuYm9keS5nZXRDb25kaXRpb24oKX0pOnR9KSxpPW4ubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkO3JldHVybiBlLndyaXRlVmFyVUludCh0LndlaWdodCksZS53cml0ZVZhck9jdGV0U3RyaW5nKHQudHlwZT09PW0/dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpOnYpLGUud3JpdGVWYXJPY3RldFN0cmluZyh0LnR5cGU9PT15P3QuYm9keS5zZXJpYWxpemVCaW5hcnkoKTp2KSxlLmdldEJ1ZmZlcigpfSksbz10aGlzLmNvbnN0cnVjdG9yLnNvcnRCdWZmZXJzKGkpO3Qud3JpdGVWYXJVSW50KHRoaXMudGhyZXNob2xkKSx0LndyaXRlVmFyVUludChvLmxlbmd0aCksby5mb3JFYWNoKHQud3JpdGUuYmluZCh0KSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1tfSkscj0xLzAsbj1lLnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiByPU1hdGgubWluKHIsZS53ZWlnaHQpLHQrZS53ZWlnaHR9LDApO2lmKG48dGhpcy50aHJlc2hvbGQpdGhyb3cgbmV3IEVycm9yKFwiVGhyZXNob2xkIG5vdCBtZXRcIik7aWYodGhpcy50aHJlc2hvbGQrcjw9bil0aHJvdyBuZXcgRXJyb3IoXCJGdWxmaWxsbWVudCBpcyBub3QgbWluaW1hbFwiKTtyZXR1cm4gZS5ldmVyeShmdW5jdGlvbihlKXtyZXR1cm4gZS5ib2R5LnZhbGlkYXRlKHQpfSl9fV0sW3trZXk6XCJwcmVkaWN0U3ViY29uZGl0aW9uTGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbkJpbmFyeSgpLmxlbmd0aDp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkubGVuZ3RofX0se2tleTpcInByZWRpY3RTdWJmdWxmaWxsbWVudExlbmd0aFwiLFxudmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dC50eXBlPT09bT90LmJvZHkuZ2V0Q29uZGl0aW9uKCkuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKTp0LmJvZHkuZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKSxyPW5ldyBjO3JldHVybiByLndyaXRlVUludDE2KCksci53cml0ZVZhck9jdGV0U3RyaW5nKHtsZW5ndGg6ZX0pLHIuZ2V0U2l6ZSgpfX0se2tleTpcImNhbGN1bGF0ZVdvcnN0Q2FzZUxlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXtpZihyPXJ8fDAsdDw9MClyZXR1cm4gMDtpZihyPGUubGVuZ3RoKXt2YXIgbj1lW3JdO3JldHVybiBNYXRoLm1heChuLnNpemUrdGhpcy5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodC1uLndlaWdodCxlLHIrMSksdGhpcy5jYWxjdWxhdGVXb3JzdENhc2VMZW5ndGgodCxlLHIrMSkpfXJldHVybi0oMS8wKX19LHtrZXk6XCJjYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXRcIix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYocj1yfHx7aW5kZXg6MCxzaXplOjAsc2V0OltdfSx0PD0wKXJldHVybntzaXplOnIuc2l6ZSxzZXQ6ci5zZXR9O2lmKHIuaW5kZXg8ZS5sZW5ndGgpe3ZhciBuPWVbci5pbmRleF0saT10aGlzLmNhbGN1bGF0ZVNtYWxsZXN0VmFsaWRGdWxmaWxsbWVudFNldCh0LW4ud2VpZ2h0LGUse3NpemU6ci5zaXplK24uc2l6ZSxpbmRleDpyLmluZGV4KzEsc2V0OnIuc2V0LmNvbmNhdChuLmluZGV4KX0pLG89dGhpcy5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodCxlLHtzaXplOnIuc2l6ZStuLm9taXRTaXplLGluZGV4OnIuaW5kZXgrMSxzZXQ6ci5zZXR9KTtyZXR1cm4gaS5zaXplPG8uc2l6ZT9pOm99cmV0dXJue3NpemU6MS8wfX19LHtrZXk6XCJzb3J0QnVmZmVyc1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnNsaWNlKCkuc29ydChmdW5jdGlvbih0LHIpe3JldHVybiB0Lmxlbmd0aCE9PXIubGVuZ3RoP3QubGVuZ3RoLXIubGVuZ3RoOmUuY29tcGFyZSh0LHIpfSl9fV0pLHJ9KGgpO2cuVFlQRV9JRD0yLGcuRkVBVFVSRV9CSVRNQVNLPTksZy5wcm90b3R5cGUuYWRkU3ViY29uZGl0aW9uVXJpPWcucHJvdG90eXBlLmFkZFN1YmNvbmRpdGlvbixnLnByb3RvdHlwZS5hZGRTdWJmdWxmaWxsbWVudFVyaT1nLnByb3RvdHlwZS5hZGRTdWJmdWxmaWxsbWVudCx0LmV4cG9ydHM9Z30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LHIpe2lmKCFlLmlzQnVmZmVyKHQpfHwhZS5pc0J1ZmZlcihyKSl0aHJvdyBuZXcgRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBidWZmZXJzXCIpO2lmKHQubGVuZ3RoIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiQnVmZmVycyBtdXN0IGJlIHRoZSBzYW1lIGxlbmd0aFwiKTtmb3IodmFyIG49bmV3IGUodC5sZW5ndGgpLGk9MDtpPHQubGVuZ3RoO2krKyluW2ldPXRbaV1ecltpXTtyZXR1cm4gbn10LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSxyKXshZnVuY3Rpb24oZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgaT1PYmplY3QuY3JlYXRlKChlfHxvKS5wcm90b3R5cGUpLGE9bmV3IHAobnx8W10pO3JldHVybiBpLl9pbnZva2U9Yyh0LHIsYSksaX1mdW5jdGlvbiBpKHQsZSxyKXt0cnl7cmV0dXJue3R5cGU6XCJub3JtYWxcIixhcmc6dC5jYWxsKGUscil9fWNhdGNoKHQpe3JldHVybnt0eXBlOlwidGhyb3dcIixhcmc6dH19fWZ1bmN0aW9uIG8oKXt9ZnVuY3Rpb24gYSgpe31mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIHModCl7W1wibmV4dFwiLFwidGhyb3dcIixcInJldHVyblwiXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RbZV09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2ludm9rZShlLHQpfX0pfWZ1bmN0aW9uIHUodCl7dGhpcy5hcmc9dH1mdW5jdGlvbiBoKHQpe2Z1bmN0aW9uIGUocixuLG8sYSl7dmFyIGY9aSh0W3JdLHQsbik7aWYoXCJ0aHJvd1wiIT09Zi50eXBlKXt2YXIgcz1mLmFyZyxoPXMudmFsdWU7cmV0dXJuIGggaW5zdGFuY2VvZiB1P1Byb21pc2UucmVzb2x2ZShoLmFyZykudGhlbihmdW5jdGlvbih0KXtlKFwibmV4dFwiLHQsbyxhKX0sZnVuY3Rpb24odCl7ZShcInRocm93XCIsdCxvLGEpfSk6UHJvbWlzZS5yZXNvbHZlKGgpLnRoZW4oZnVuY3Rpb24odCl7cy52YWx1ZT10LG8ocyl9LGEpfWEoZi5hcmcpfWZ1bmN0aW9uIG4odCxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKG4saSl7ZSh0LHIsbixpKX0pfXJldHVybiBvPW8/by50aGVuKG4sbik6bigpfVwib2JqZWN0XCI9PXR5cGVvZiByJiZyLmRvbWFpbiYmKGU9ci5kb21haW4uYmluZChlKSk7dmFyIG87dGhpcy5faW52b2tlPW59ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49RTtyZXR1cm4gZnVuY3Rpb24obyxhKXtpZihuPT09ayl0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nXCIpO2lmKG49PT14KXtpZihcInRocm93XCI9PT1vKXRocm93IGE7cmV0dXJuIHYoKX1mb3IoOzspe3ZhciBmPXIuZGVsZWdhdGU7aWYoZil7aWYoXCJyZXR1cm5cIj09PW98fFwidGhyb3dcIj09PW8mJmYuaXRlcmF0b3Jbb109PT15KXtyLmRlbGVnYXRlPW51bGw7dmFyIHM9Zi5pdGVyYXRvci5yZXR1cm47aWYocyl7dmFyIHU9aShzLGYuaXRlcmF0b3IsYSk7aWYoXCJ0aHJvd1wiPT09dS50eXBlKXtvPVwidGhyb3dcIixhPXUuYXJnO2NvbnRpbnVlfX1pZihcInJldHVyblwiPT09byljb250aW51ZX12YXIgdT1pKGYuaXRlcmF0b3Jbb10sZi5pdGVyYXRvcixhKTtpZihcInRocm93XCI9PT11LnR5cGUpe3IuZGVsZWdhdGU9bnVsbCxvPVwidGhyb3dcIixhPXUuYXJnO2NvbnRpbnVlfW89XCJuZXh0XCIsYT15O3ZhciBoPXUuYXJnO2lmKCFoLmRvbmUpcmV0dXJuIG49QSxoO3JbZi5yZXN1bHROYW1lXT1oLnZhbHVlLHIubmV4dD1mLm5leHRMb2Msci5kZWxlZ2F0ZT1udWxsfWlmKFwibmV4dFwiPT09bylyLnNlbnQ9ci5fc2VudD1hO2Vsc2UgaWYoXCJ0aHJvd1wiPT09byl7aWYobj09PUUpdGhyb3cgbj14LGE7ci5kaXNwYXRjaEV4Y2VwdGlvbihhKSYmKG89XCJuZXh0XCIsYT15KX1lbHNlXCJyZXR1cm5cIj09PW8mJnIuYWJydXB0KFwicmV0dXJuXCIsYSk7bj1rO3ZhciB1PWkodCxlLHIpO2lmKFwibm9ybWFsXCI9PT11LnR5cGUpe249ci5kb25lP3g6QTt2YXIgaD17dmFsdWU6dS5hcmcsZG9uZTpyLmRvbmV9O2lmKHUuYXJnIT09SSlyZXR1cm4gaDtyLmRlbGVnYXRlJiZcIm5leHRcIj09PW8mJihhPXkpfWVsc2VcInRocm93XCI9PT11LnR5cGUmJihuPXgsbz1cInRocm93XCIsYT11LmFyZyl9fX1mdW5jdGlvbiBkKHQpe3ZhciBlPXt0cnlMb2M6dFswXX07MSBpbiB0JiYoZS5jYXRjaExvYz10WzFdKSwyIGluIHQmJihlLmZpbmFsbHlMb2M9dFsyXSxlLmFmdGVyTG9jPXRbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKGUpfWZ1bmN0aW9uIGwodCl7dmFyIGU9dC5jb21wbGV0aW9ufHx7fTtlLnR5cGU9XCJub3JtYWxcIixkZWxldGUgZS5hcmcsdC5jb21wbGV0aW9uPWV9ZnVuY3Rpb24gcCh0KXt0aGlzLnRyeUVudHJpZXM9W3t0cnlMb2M6XCJyb290XCJ9XSx0LmZvckVhY2goZCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBiKHQpe2lmKHQpe3ZhciBlPXRbd107aWYoZSlyZXR1cm4gZS5jYWxsKHQpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQubmV4dClyZXR1cm4gdDtpZighaXNOYU4odC5sZW5ndGgpKXt2YXIgcj0tMSxuPWZ1bmN0aW9uIGUoKXtmb3IoOysrcjx0Lmxlbmd0aDspaWYobS5jYWxsKHQscikpcmV0dXJuIGUudmFsdWU9dFtyXSxlLmRvbmU9ITEsZTtyZXR1cm4gZS52YWx1ZT15LGUuZG9uZT0hMCxlfTtyZXR1cm4gbi5uZXh0PW59fXJldHVybntuZXh0OnZ9fWZ1bmN0aW9uIHYoKXtyZXR1cm57dmFsdWU6eSxkb25lOiEwfX12YXIgeSxtPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksZz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LHc9Zy5pdGVyYXRvcnx8XCJAQGl0ZXJhdG9yXCIsXz1nLnRvU3RyaW5nVGFnfHxcIkBAdG9TdHJpbmdUYWdcIixNPVwib2JqZWN0XCI9PXR5cGVvZiB0LFM9ZS5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoUylyZXR1cm4gdm9pZChNJiYodC5leHBvcnRzPVMpKTtTPWUucmVnZW5lcmF0b3JSdW50aW1lPU0/dC5leHBvcnRzOnt9LFMud3JhcD1uO3ZhciBFPVwic3VzcGVuZGVkU3RhcnRcIixBPVwic3VzcGVuZGVkWWllbGRcIixrPVwiZXhlY3V0aW5nXCIseD1cImNvbXBsZXRlZFwiLEk9e30sQj1mLnByb3RvdHlwZT1vLnByb3RvdHlwZTthLnByb3RvdHlwZT1CLmNvbnN0cnVjdG9yPWYsZi5jb25zdHJ1Y3Rvcj1hLGZbX109YS5kaXNwbGF5TmFtZT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIsUy5pc0dlbmVyYXRvckZ1bmN0aW9uPWZ1bmN0aW9uKHQpe3ZhciBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3I7cmV0dXJuISFlJiYoZT09PWF8fFwiR2VuZXJhdG9yRnVuY3Rpb25cIj09PShlLmRpc3BsYXlOYW1lfHxlLm5hbWUpKX0sUy5tYXJrPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZik6KHQuX19wcm90b19fPWYsXyBpbiB0fHwodFtfXT1cIkdlbmVyYXRvckZ1bmN0aW9uXCIpKSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEIpLHR9LFMuYXdyYXA9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB1KHQpfSxzKGgucHJvdG90eXBlKSxTLmFzeW5jPWZ1bmN0aW9uKHQsZSxyLGkpe3ZhciBvPW5ldyBoKG4odCxlLHIsaSkpO3JldHVybiBTLmlzR2VuZXJhdG9yRnVuY3Rpb24oZSk/bzpvLm5leHQoKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiB0LmRvbmU/dC52YWx1ZTpvLm5leHQoKX0pfSxzKEIpLEJbd109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sQltfXT1cIkdlbmVyYXRvclwiLEIudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgR2VuZXJhdG9yXVwifSxTLmtleXM9ZnVuY3Rpb24odCl7dmFyIGU9W107Zm9yKHZhciByIGluIHQpZS5wdXNoKHIpO3JldHVybiBlLnJldmVyc2UoKSxmdW5jdGlvbiByKCl7Zm9yKDtlLmxlbmd0aDspe3ZhciBuPWUucG9wKCk7aWYobiBpbiB0KXJldHVybiByLnZhbHVlPW4sci5kb25lPSExLHJ9cmV0dXJuIHIuZG9uZT0hMCxyfX0sUy52YWx1ZXM9YixwLnByb3RvdHlwZT17Y29uc3RydWN0b3I6cCxyZXNldDpmdW5jdGlvbih0KXtpZih0aGlzLnByZXY9MCx0aGlzLm5leHQ9MCx0aGlzLnNlbnQ9dGhpcy5fc2VudD15LHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy50cnlFbnRyaWVzLmZvckVhY2gobCksIXQpZm9yKHZhciBlIGluIHRoaXMpXCJ0XCI9PT1lLmNoYXJBdCgwKSYmbS5jYWxsKHRoaXMsZSkmJiFpc05hTigrZS5zbGljZSgxKSkmJih0aGlzW2VdPXkpfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciB0PXRoaXMudHJ5RW50cmllc1swXSxlPXQuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShlLG4pe3JldHVybiBvLnR5cGU9XCJ0aHJvd1wiLG8uYXJnPXQsci5uZXh0PWUsISFufWlmKHRoaXMuZG9uZSl0aHJvdyB0O2Zvcih2YXIgcj10aGlzLG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl0sbz1pLmNvbXBsZXRpb247aWYoXCJyb290XCI9PT1pLnRyeUxvYylyZXR1cm4gZShcImVuZFwiKTtpZihpLnRyeUxvYzw9dGhpcy5wcmV2KXt2YXIgYT1tLmNhbGwoaSxcImNhdGNoTG9jXCIpLGY9bS5jYWxsKGksXCJmaW5hbGx5TG9jXCIpO2lmKGEmJmYpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBlKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIGUoaS5maW5hbGx5TG9jKX1lbHNlIGlmKGEpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBlKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWYpdGhyb3cgbmV3IEVycm9yKFwidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHlcIik7aWYodGhpcy5wcmV2PGkuZmluYWxseUxvYylyZXR1cm4gZShpLmZpbmFsbHlMb2MpfX19fSxhYnJ1cHQ6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3I+PTA7LS1yKXt2YXIgbj10aGlzLnRyeUVudHJpZXNbcl07aWYobi50cnlMb2M8PXRoaXMucHJldiYmbS5jYWxsKG4sXCJmaW5hbGx5TG9jXCIpJiZ0aGlzLnByZXY8bi5maW5hbGx5TG9jKXt2YXIgaT1uO2JyZWFrfX1pJiYoXCJicmVha1wiPT09dHx8XCJjb250aW51ZVwiPT09dCkmJmkudHJ5TG9jPD1lJiZlPD1pLmZpbmFsbHlMb2MmJihpPW51bGwpO3ZhciBvPWk/aS5jb21wbGV0aW9uOnt9O3JldHVybiBvLnR5cGU9dCxvLmFyZz1lLGk/dGhpcy5uZXh0PWkuZmluYWxseUxvYzp0aGlzLmNvbXBsZXRlKG8pLEl9LGNvbXBsZXRlOmZ1bmN0aW9uKHQsZSl7aWYoXCJ0aHJvd1wiPT09dC50eXBlKXRocm93IHQuYXJnO1wiYnJlYWtcIj09PXQudHlwZXx8XCJjb250aW51ZVwiPT09dC50eXBlP3RoaXMubmV4dD10LmFyZzpcInJldHVyblwiPT09dC50eXBlPyh0aGlzLnJ2YWw9dC5hcmcsdGhpcy5uZXh0PVwiZW5kXCIpOlwibm9ybWFsXCI9PT10LnR5cGUmJmUmJih0aGlzLm5leHQ9ZSl9LGZpbmlzaDpmdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO2U+PTA7LS1lKXt2YXIgcj10aGlzLnRyeUVudHJpZXNbZV07aWYoci5maW5hbGx5TG9jPT09dClyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksbChyKSxJfX0sY2F0Y2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIudHJ5TG9jPT09dCl7dmFyIG49ci5jb21wbGV0aW9uO2lmKFwidGhyb3dcIj09PW4udHlwZSl7dmFyIGk9bi5hcmc7bChyKX1yZXR1cm4gaX19dGhyb3cgbmV3IEVycm9yKFwiaWxsZWdhbCBjYXRjaCBhdHRlbXB0XCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6Yih0KSxyZXN1bHROYW1lOmUsbmV4dExvYzpyfSxJfX19KFwib2JqZWN0XCI9PXR5cGVvZiBlP2U6XCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdz93aW5kb3c6XCJvYmplY3RcIj09dHlwZW9mIHNlbGY/c2VsZjp0aGlzKX0pLmNhbGwoZSxyKDM5KSxyKDI2KSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDI5MCksdC5leHBvcnRzPXIoMzIpLlJlZ0V4cC5lc2NhcGV9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3MCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3NyksaT1yKDE2NSkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE2NSksaT1yKDE2Myksbz1yKDI3MiksYT1yKDI3NSksZj1cInByb3RvdHlwZVwiLHM9ZnVuY3Rpb24odCxlLHIpe3ZhciB1LGgsYyxkPXQmcy5GLGw9dCZzLkcscD10JnMuUyxiPXQmcy5QLHY9dCZzLkIseT10JnMuVyxtPWw/aTppW2VdfHwoaVtlXT17fSksZz1tW2ZdLHc9bD9uOnA/bltlXToobltlXXx8e30pW2ZdO2wmJihyPWUpO2Zvcih1IGluIHIpaD0hZCYmdyYmdm9pZCAwIT09d1t1XSxoJiZ1IGluIG18fChjPWg/d1t1XTpyW3VdLG1bdV09bCYmXCJmdW5jdGlvblwiIT10eXBlb2Ygd1t1XT9yW3VdOnYmJmg/byhjLG4pOnkmJndbdV09PWM/ZnVuY3Rpb24odCl7dmFyIGU9ZnVuY3Rpb24oZSxyLG4pe2lmKHRoaXMgaW5zdGFuY2VvZiB0KXtzd2l0Y2goYXJndW1lbnRzLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGUpO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZSxyKX1yZXR1cm4gbmV3IHQoZSxyLG4pfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX07cmV0dXJuIGVbZl09dFtmXSxlfShjKTpiJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBjP28oRnVuY3Rpb24uY2FsbCxjKTpjLGImJigobS52aXJ0dWFsfHwobS52aXJ0dWFsPXt9KSlbdV09Yyx0JnMuUiYmZyYmIWdbdV0mJmEoZyx1LGMpKSl9O3MuRj0xLHMuRz0yLHMuUz00LHMuUD04LHMuQj0xNixzLlc9MzIscy5VPTY0LHMuUj0xMjgsdC5leHBvcnRzPXN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI3OCksaT1yKDI3OSk7dC5leHBvcnRzPXIoMTE3KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTE3KSYmIXIoMTY0KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigyNzMpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFuKHQpJiZpc0Zpbml0ZSh0KSYmaSh0KT09PXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzEpLGk9cigyNzYpLG89cigyODApLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yKDExNyk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzQpO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDI3Nyl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDEyNiksbz1yKDcpKFwic3BlY2llc1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIGkodCkmJihlPXQuY29uc3RydWN0b3IsXCJmdW5jdGlvblwiIT10eXBlb2YgZXx8ZSE9PUFycmF5JiYhaShlLnByb3RvdHlwZSl8fChlPXZvaWQgMCksbihlKSYmKGU9ZVtvXSxudWxsPT09ZSYmKGU9dm9pZCAwKSkpLHZvaWQgMD09PWU/QXJyYXk6ZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDI4Mik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyhuKHQpKShlKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDMpLGk9cigyOSksbz1cIm51bWJlclwiO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcInN0cmluZ1wiIT09dCYmdCE9PW8mJlwiZGVmYXVsdFwiIT09dCl0aHJvdyBUeXBlRXJyb3IoXCJJbmNvcnJlY3QgaGludFwiKTtyZXR1cm4gaShuKHRoaXMpLHQhPW8pfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cig4Niksbz1yKDY2KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9bih0KSxyPWkuZjtpZihyKWZvcih2YXIgYSxmPXIodCkscz1vLmYsdT0wO2YubGVuZ3RoPnU7KXMuY2FsbCh0LGE9Zlt1KytdKSYmZS5wdXNoKGEpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cigxNyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByLG89aSh0KSxhPW4obyksZj1hLmxlbmd0aCxzPTA7Zj5zOylpZihvW3I9YVtzKytdXT09PWUpcmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigyODgpLGk9cig4Miksbz1yKDEzKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9byh0aGlzKSxlPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShlKSxhPTAsZj1uLl8scz0hMTtlPmE7KShyW2FdPWFyZ3VtZW50c1thKytdKT09PWYmJihzPSEwKTtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgbixvPXRoaXMsYT1hcmd1bWVudHMubGVuZ3RoLHU9MCxoPTA7aWYoIXMmJiFhKXJldHVybiBpKHQscixvKTtpZihuPXIuc2xpY2UoKSxzKWZvcig7ZT51O3UrKyluW3VdPT09ZiYmKG5bdV09YXJndW1lbnRzW2grK10pO2Zvcig7YT5oOyluLnB1c2goYXJndW1lbnRzW2grK10pO3JldHVybiBpKHQsbixvKX19fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHI9ZT09PU9iamVjdChlKT9mdW5jdGlvbih0KXtyZXR1cm4gZVt0XX06ZTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKHQscil9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDI4OSkoL1tcXFxcXiQqKz8uKCl8W1xcXXt9XS9nLFwiXFxcXCQmXCIpO24obi5TLFwiUmVnRXhwXCIse2VzY2FwZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJBcnJheVwiLHtjb3B5V2l0aGluOnIoMTY3KX0pLHIoNTQpKFwiY29weVdpdGhpblwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSg0KTtuKG4uUCtuLkYqIXIoMjUpKFtdLmV2ZXJ5LCEwKSxcIkFycmF5XCIse2V2ZXJ5OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIkFycmF5XCIse2ZpbGw6cigxMTgpfSkscig1NCkoXCJmaWxsXCIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDIpO24obi5QK24uRiohcigyNSkoW10uZmlsdGVyLCEwKSxcIkFycmF5XCIse2ZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSg2KSxvPVwiZmluZEluZGV4XCIsYT0hMDtvIGluW10mJkFycmF5KDEpW29dKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLFwiQXJyYXlcIix7ZmluZEluZGV4OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkobyl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNSksbz1cImZpbmRcIixhPSEwO28gaW5bXSYmQXJyYXkoMSlbb10oZnVuY3Rpb24oKXthPSExfSksbihuLlArbi5GKmEsXCJBcnJheVwiLHtmaW5kOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkobyl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMCksbz1yKDI1KShbXS5mb3JFYWNoLCEwKTtuKG4uUCtuLkYqIW8sXCJBcnJheVwiLHtmb3JFYWNoOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHNbMV0pfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzMyksaT1yKDApLG89cigxMSksYT1yKDE3NiksZj1yKDEyNSkscz1yKDEwKSx1PXIoMTE5KSxoPXIoMTQyKTtpKGkuUytpLkYqIXIoODQpKGZ1bmN0aW9uKHQpe0FycmF5LmZyb20odCl9KSxcIkFycmF5XCIse2Zyb206ZnVuY3Rpb24odCl7dmFyIGUscixpLGMsZD1vKHQpLGw9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHA9YXJndW1lbnRzLmxlbmd0aCxiPXA+MT9hcmd1bWVudHNbMV06dm9pZCAwLHY9dm9pZCAwIT09Yix5PTAsbT1oKGQpO2lmKHYmJihiPW4oYixwPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksdm9pZCAwPT1tfHxsPT1BcnJheSYmZihtKSlmb3IoZT1zKGQubGVuZ3RoKSxyPW5ldyBsKGUpO2U+eTt5KyspdShyLHksdj9iKGRbeV0seSk6ZFt5XSk7ZWxzZSBmb3IoYz1tLmNhbGwoZCkscj1uZXcgbDshKGk9Yy5uZXh0KCkpLmRvbmU7eSsrKXUocix5LHY/YShjLGIsW2kudmFsdWUseV0sITApOmkudmFsdWUpO3JldHVybiByLmxlbmd0aD15LHJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig3OCkoITEpLG89W10uaW5kZXhPZixhPSEhbyYmMS9bMV0uaW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooYXx8IXIoMjUpKG8pKSxcIkFycmF5XCIse2luZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGE/by5hcHBseSh0aGlzLGFyZ3VtZW50cyl8fDA6aSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJBcnJheVwiLHtpc0FycmF5OnIoMTI2KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTcpLG89W10uam9pbjtuKG4uUCtuLkYqKHIoNjUpIT1PYmplY3R8fCFyKDI1KShvKSksXCJBcnJheVwiLHtqb2luOmZ1bmN0aW9uKHQpe3JldHVybiBvLmNhbGwoaSh0aGlzKSx2b2lkIDA9PT10P1wiLFwiOnQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTcpLG89cigzOCksYT1yKDEwKSxmPVtdLmxhc3RJbmRleE9mLHM9ISFmJiYxL1sxXS5sYXN0SW5kZXhPZigxLC0wKTwwO24obi5QK24uRiooc3x8IXIoMjUpKGYpKSxcIkFycmF5XCIse2xhc3RJbmRleE9mOmZ1bmN0aW9uKHQpe2lmKHMpcmV0dXJuIGYuYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwO3ZhciBlPWkodGhpcykscj1hKGUubGVuZ3RoKSxuPXItMTtmb3IoYXJndW1lbnRzLmxlbmd0aD4xJiYobj1NYXRoLm1pbihuLG8oYXJndW1lbnRzWzFdKSkpLG48MCYmKG49cituKTtuPj0wO24tLSlpZihuIGluIGUmJmVbbl09PT10KXJldHVybiBufHwwO3JldHVybi0xfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDEpO24obi5QK24uRiohcigyNSkoW10ubWFwLCEwKSxcIkFycmF5XCIse21hcDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExOSk7bihuLlMrbi5GKnIoNSkoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoQXJyYXkub2YuY2FsbCh0KWluc3RhbmNlb2YgdCl9KSxcIkFycmF5XCIse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3KFwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSkoZSk7ZT50OylpKHIsdCxhcmd1bWVudHNbdCsrXSk7cmV0dXJuIHIubGVuZ3RoPWUscn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE2OSk7bihuLlArbi5GKiFyKDI1KShbXS5yZWR1Y2VSaWdodCwhMCksXCJBcnJheVwiLHtyZWR1Y2VSaWdodDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aCxhcmd1bWVudHNbMV0sITApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTY5KTtuKG4uUCtuLkYqIXIoMjUpKFtdLnJlZHVjZSwhMCksXCJBcnJheVwiLHtyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCExKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEyMyksbz1yKDIzKSxhPXIoNDcpLGY9cigxMCkscz1bXS5zbGljZTtuKG4uUCtuLkYqcig1KShmdW5jdGlvbigpe2kmJnMuY2FsbChpKX0pLFwiQXJyYXlcIix7c2xpY2U6ZnVuY3Rpb24odCxlKXt2YXIgcj1mKHRoaXMubGVuZ3RoKSxuPW8odGhpcyk7aWYoZT12b2lkIDA9PT1lP3I6ZSxcIkFycmF5XCI9PW4pcmV0dXJuIHMuY2FsbCh0aGlzLHQsZSk7Zm9yKHZhciBpPWEodCxyKSx1PWEoZSxyKSxoPWYodS1pKSxjPUFycmF5KGgpLGQ9MDtkPGg7ZCsrKWNbZF09XCJTdHJpbmdcIj09bj90aGlzLmNoYXJBdChpK2QpOnRoaXNbaStkXTtyZXR1cm4gY319KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgzKTtuKG4uUCtuLkYqIXIoMjUpKFtdLnNvbWUsITApLFwiQXJyYXlcIix7c29tZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzKSxvPXIoMTEpLGE9cig1KSxmPVtdLnNvcnQscz1bMSwyLDNdO24obi5QK24uRiooYShmdW5jdGlvbigpe3Muc29ydCh2b2lkIDApfSl8fCFhKGZ1bmN0aW9uKCl7cy5zb3J0KG51bGwpfSl8fCFyKDI1KShmKSksXCJBcnJheVwiLHtzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiB2b2lkIDA9PT10P2YuY2FsbChvKHRoaXMpKTpmLmNhbGwobyh0aGlzKSxpKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoNDYpKFwiQXJyYXlcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiRGF0ZVwiLHtub3c6ZnVuY3Rpb24oKXtyZXR1cm4obmV3IERhdGUpLmdldFRpbWUoKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDUpLG89RGF0ZS5wcm90b3R5cGUuZ2V0VGltZSxhPWZ1bmN0aW9uKHQpe3JldHVybiB0Pjk/dDpcIjBcIit0fTtuKG4uUCtuLkYqKGkoZnVuY3Rpb24oKXtyZXR1cm5cIjAzODUtMDctMjVUMDc6MDY6MzkuOTk5WlwiIT1uZXcgRGF0ZSgtNWUxMy0xKS50b0lTT1N0cmluZygpfSl8fCFpKGZ1bmN0aW9uKCl7bmV3IERhdGUoTmFOKS50b0lTT1N0cmluZygpfSkpLFwiRGF0ZVwiLHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe2lmKCFpc0Zpbml0ZShvLmNhbGwodGhpcykpKXRocm93IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHRpbWUgdmFsdWVcIik7dmFyIHQ9dGhpcyxlPXQuZ2V0VVRDRnVsbFllYXIoKSxyPXQuZ2V0VVRDTWlsbGlzZWNvbmRzKCksbj1lPDA/XCItXCI6ZT45OTk5P1wiK1wiOlwiXCI7cmV0dXJuIG4rKFwiMDAwMDBcIitNYXRoLmFicyhlKSkuc2xpY2Uobj8tNjotNCkrXCItXCIrYSh0LmdldFVUQ01vbnRoKCkrMSkrXCItXCIrYSh0LmdldFVUQ0RhdGUoKSkrXCJUXCIrYSh0LmdldFVUQ0hvdXJzKCkpK1wiOlwiK2EodC5nZXRVVENNaW51dGVzKCkpK1wiOlwiK2EodC5nZXRVVENTZWNvbmRzKCkpK1wiLlwiKyhyPjk5P3I6XCIwXCIrYShyKSkrXCJaXCJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDI5KTtuKG4uUCtuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiBudWxsIT09bmV3IERhdGUoTmFOKS50b0pTT04oKXx8MSE9PURhdGUucHJvdG90eXBlLnRvSlNPTi5jYWxsKHt0b0lTT1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAxfX0pfSksXCJEYXRlXCIse3RvSlNPTjpmdW5jdGlvbih0KXt2YXIgZT1pKHRoaXMpLHI9byhlKTtyZXR1cm5cIm51bWJlclwiIT10eXBlb2Ygcnx8aXNGaW5pdGUocik/ZS50b0lTT1N0cmluZygpOm51bGx9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwidG9QcmltaXRpdmVcIiksaT1EYXRlLnByb3RvdHlwZTtuIGluIGl8fHIoMTQpKGksbixyKDI4NCkpfSxmdW5jdGlvbih0LGUscil7dmFyIG49RGF0ZS5wcm90b3R5cGUsaT1cIkludmFsaWQgRGF0ZVwiLG89XCJ0b1N0cmluZ1wiLGE9bltvXSxmPW4uZ2V0VGltZTtuZXcgRGF0ZShOYU4pK1wiXCIhPWkmJnIoMTUpKG4sbyxmdW5jdGlvbigpe3ZhciB0PWYuY2FsbCh0aGlzKTtyZXR1cm4gdD09PXQ/YS5jYWxsKHRoaXMpOml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJGdW5jdGlvblwiLHtiaW5kOnIoMTcwKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2KSxpPXIoMjEpLG89cig3KShcImhhc0luc3RhbmNlXCIpLGE9RnVuY3Rpb24ucHJvdG90eXBlO28gaW4gYXx8cig5KS5mKGEsbyx7dmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdGhpc3x8IW4odCkpcmV0dXJuITE7aWYoIW4odGhpcy5wcm90b3R5cGUpKXJldHVybiB0IGluc3RhbmNlb2YgdGhpcztmb3IoO3Q9aSh0KTspaWYodGhpcy5wcm90b3R5cGU9PT10KXJldHVybiEwO3JldHVybiExfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KS5mLGk9cigzNyksbz1yKDEyKSxhPUZ1bmN0aW9uLnByb3RvdHlwZSxmPS9eXFxzKmZ1bmN0aW9uIChbXiAoXSopLyxzPVwibmFtZVwiLHU9T2JqZWN0LmlzRXh0ZW5zaWJsZXx8ZnVuY3Rpb24oKXtyZXR1cm4hMH07cyBpbiBhfHxyKDgpJiZuKGEscyx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3RyeXt2YXIgdD10aGlzLGU9KFwiXCIrdCkubWF0Y2goZilbMV07cmV0dXJuIG8odCxzKXx8IXUodCl8fG4odCxzLGkoNSxlKSksZX1jYXRjaCh0KXtyZXR1cm5cIlwifX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3OCksbz1NYXRoLnNxcnQsYT1NYXRoLmFjb3NoO24obi5TK24uRiohKGEmJjcxMD09TWF0aC5mbG9vcihhKE51bWJlci5NQVhfVkFMVUUpKSYmYSgxLzApPT0xLzApLFwiTWF0aFwiLHthY29zaDpmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk8MT9OYU46dD45NDkwNjI2NS42MjQyNTE1Nj9NYXRoLmxvZyh0KStNYXRoLkxOMjppKHQtMStvKHQtMSkqbyh0KzEpKX19KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7cmV0dXJuIGlzRmluaXRlKHQ9K3QpJiYwIT10P3Q8MD8tbigtdCk6TWF0aC5sb2codCtNYXRoLnNxcnQodCp0KzEpKTp0fXZhciBpPXIoMCksbz1NYXRoLmFzaW5oO2koaS5TK2kuRiohKG8mJjEvbygwKT4wKSxcIk1hdGhcIix7YXNpbmg6bn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguYXRhbmg7bihuLlMrbi5GKiEoaSYmMS9pKC0wKTwwKSxcIk1hdGhcIix7YXRhbmg6ZnVuY3Rpb24odCl7cmV0dXJuIDA9PSh0PSt0KT90Ok1hdGgubG9nKCgxK3QpLygxLXQpKS8yfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMwKTtuKG4uUyxcIk1hdGhcIix7Y2JydDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0PSt0KSpNYXRoLnBvdyhNYXRoLmFicyh0KSwxLzMpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7Y2x6MzI6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+Pj49MCk/MzEtTWF0aC5mbG9vcihNYXRoLmxvZyh0Ky41KSpNYXRoLkxPRzJFKTozMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmV4cDtuKG4uUyxcIk1hdGhcIix7Y29zaDpmdW5jdGlvbih0KXtyZXR1cm4oaSh0PSt0KStpKC10KSkvMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEyOSk7bihuLlMrbi5GKihpIT1NYXRoLmV4cG0xKSxcIk1hdGhcIix7ZXhwbTE6aX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMwKSxvPU1hdGgucG93LGE9bygyLC01MiksZj1vKDIsLTIzKSxzPW8oMiwxMjcpKigyLWYpLHU9bygyLC0xMjYpLGg9ZnVuY3Rpb24odCl7cmV0dXJuIHQrMS9hLTEvYX07bihuLlMsXCJNYXRoXCIse2Zyb3VuZDpmdW5jdGlvbih0KXt2YXIgZSxyLG49TWF0aC5hYnModCksbz1pKHQpO3JldHVybiBuPHU/bypoKG4vdS9mKSp1KmY6KGU9KDErZi9hKSpuLHI9ZS0oZS1uKSxyPnN8fHIhPXI/byooMS8wKTpvKnIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguYWJzO24obi5TLFwiTWF0aFwiLHtoeXBvdDpmdW5jdGlvbih0LGUpe2Zvcih2YXIgcixuLG89MCxhPTAsZj1hcmd1bWVudHMubGVuZ3RoLHM9MDthPGY7KXI9aShhcmd1bWVudHNbYSsrXSksczxyPyhuPXMvcixvPW8qbipuKzEscz1yKTpyPjA/KG49ci9zLG8rPW4qbik6bys9cjtyZXR1cm4gcz09PTEvMD8xLzA6cypNYXRoLnNxcnQobyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5pbXVsO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIGkoNDI5NDk2NzI5NSw1KSE9LTV8fDIhPWkubGVuZ3RofSksXCJNYXRoXCIse2ltdWw6ZnVuY3Rpb24odCxlKXt2YXIgcj02NTUzNSxuPSt0LGk9K2Usbz1yJm4sYT1yJmk7cmV0dXJuIDB8byphKygociZuPj4+MTYpKmErbyoociZpPj4+MTYpPDwxNj4+PjApfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7bG9nMTA6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4xMH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzFwOnIoMTc4KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7bG9nMjpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5sb2codCkvTWF0aC5MTjJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtzaWduOnIoMTMwKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTI5KSxvPU1hdGguZXhwO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIU1hdGguc2luaCgtMmUtMTcpIT0tMmUtMTd9KSxcIk1hdGhcIix7c2luaDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5hYnModD0rdCk8MT8oaSh0KS1pKC10KSkvMjoobyh0LTEpLW8oLXQtMSkpKihNYXRoLkUvMil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMjkpLG89TWF0aC5leHA7bihuLlMsXCJNYXRoXCIse3Rhbmg6ZnVuY3Rpb24odCl7dmFyIGU9aSh0PSt0KSxyPWkoLXQpO3JldHVybiBlPT0xLzA/MTpyPT0xLzA/LTE6KGUtcikvKG8odCkrbygtdCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7dHJ1bmM6ZnVuY3Rpb24odCl7cmV0dXJuKHQ+MD9NYXRoLmZsb29yOk1hdGguY2VpbCkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigxMiksbz1yKDIzKSxhPXIoMTI0KSxmPXIoMjkpLHM9cig1KSx1PXIoNDMpLmYsaD1yKDIwKS5mLGM9cig5KS5mLGQ9cig1OCkudHJpbSxsPVwiTnVtYmVyXCIscD1uW2xdLGI9cCx2PXAucHJvdG90eXBlLHk9byhyKDQyKSh2KSk9PWwsbT1cInRyaW1cImluIFN0cmluZy5wcm90b3R5cGUsZz1mdW5jdGlvbih0KXt2YXIgZT1mKHQsITEpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlJiZlLmxlbmd0aD4yKXtlPW0/ZS50cmltKCk6ZChlLDMpO3ZhciByLG4saSxvPWUuY2hhckNvZGVBdCgwKTtpZig0Mz09PW98fDQ1PT09byl7aWYocj1lLmNoYXJDb2RlQXQoMiksODg9PT1yfHwxMjA9PT1yKXJldHVybiBOYU59ZWxzZSBpZig0OD09PW8pe3N3aXRjaChlLmNoYXJDb2RlQXQoMSkpe2Nhc2UgNjY6Y2FzZSA5ODpuPTIsaT00OTticmVhaztjYXNlIDc5OmNhc2UgMTExOm49OCxpPTU1O2JyZWFrO2RlZmF1bHQ6cmV0dXJuK2V9Zm9yKHZhciBhLHM9ZS5zbGljZSgyKSx1PTAsaD1zLmxlbmd0aDt1PGg7dSsrKWlmKGE9cy5jaGFyQ29kZUF0KHUpLGE8NDh8fGE+aSlyZXR1cm4gTmFOO3JldHVybiBwYXJzZUludChzLG4pfX1yZXR1cm4rZX07aWYoIXAoXCIgMG8xXCIpfHwhcChcIjBiMVwiKXx8cChcIisweDFcIikpe3A9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDwxPzA6dCxyPXRoaXM7cmV0dXJuIHIgaW5zdGFuY2VvZiBwJiYoeT9zKGZ1bmN0aW9uKCl7di52YWx1ZU9mLmNhbGwocil9KTpvKHIpIT1sKT9hKG5ldyBiKGcoZSkpLHIscCk6ZyhlKX07Zm9yKHZhciB3LF89cig4KT91KGIpOlwiTUFYX1ZBTFVFLE1JTl9WQUxVRSxOYU4sTkVHQVRJVkVfSU5GSU5JVFksUE9TSVRJVkVfSU5GSU5JVFksRVBTSUxPTixpc0Zpbml0ZSxpc0ludGVnZXIsaXNOYU4saXNTYWZlSW50ZWdlcixNQVhfU0FGRV9JTlRFR0VSLE1JTl9TQUZFX0lOVEVHRVIscGFyc2VGbG9hdCxwYXJzZUludCxpc0ludGVnZXJcIi5zcGxpdChcIixcIiksTT0wO18ubGVuZ3RoPk07TSsrKWkoYix3PV9bTV0pJiYhaShwLHcpJiZjKHAsdyxoKGIsdykpO3AucHJvdG90eXBlPXYsdi5jb25zdHJ1Y3Rvcj1wLHIoMTUpKG4sbCxwKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse0VQU0lMT046TWF0aC5wb3coMiwtNTIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig0KS5pc0Zpbml0ZTtuKG4uUyxcIk51bWJlclwiLHtpc0Zpbml0ZTpmdW5jdGlvbih0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdCYmaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7aXNJbnRlZ2VyOnIoMTc1KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtpc05hTjpmdW5jdGlvbih0KXtyZXR1cm4gdCE9dH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3NSksbz1NYXRoLmFicztuKG4uUyxcIk51bWJlclwiLHtpc1NhZmVJbnRlZ2VyOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpJiZvKHQpPD05MDA3MTk5MjU0NzQwOTkxfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7TUlOX1NBRkVfSU5URUdFUjotOTAwNzE5OTI1NDc0MDk5MX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg1KTtuKG4uUytuLkYqKE51bWJlci5wYXJzZUZsb2F0IT1pKSxcIk51bWJlclwiLHtwYXJzZUZsb2F0Oml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4Nik7bihuLlMrbi5GKihOdW1iZXIucGFyc2VJbnQhPWkpLFwiTnVtYmVyXCIse3BhcnNlSW50Oml9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDM4KSxvPXIoMTY2KSxhPXIoMTM3KSxmPTEuLnRvRml4ZWQscz1NYXRoLmZsb29yLHU9WzAsMCwwLDAsMCwwXSxoPVwiTnVtYmVyLnRvRml4ZWQ6IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiLGM9XCIwXCIsZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0tMSxuPWU7KytyPDY7KW4rPXQqdVtyXSx1W3JdPW4lMWU3LG49cyhuLzFlNyl9LGw9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTYscj0wOy0tZT49MDspcis9dVtlXSx1W2VdPXMoci90KSxyPXIldCoxZTd9LHA9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9NixlPVwiXCI7LS10Pj0wOylpZihcIlwiIT09ZXx8MD09PXR8fDAhPT11W3RdKXt2YXIgcj1TdHJpbmcodVt0XSk7ZT1cIlwiPT09ZT9yOmUrYS5jYWxsKGMsNy1yLmxlbmd0aCkrcn1yZXR1cm4gZX0sYj1mdW5jdGlvbih0LGUscil7cmV0dXJuIDA9PT1lP3I6ZSUyPT09MT9iKHQsZS0xLHIqdCk6Yih0KnQsZS8yLHIpfSx2PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9dDtyPj00MDk2OyllKz0xMixyLz00MDk2O2Zvcig7cj49MjspZSs9MSxyLz0yO3JldHVybiBlfTtuKG4uUCtuLkYqKCEhZiYmKFwiMC4wMDBcIiE9PThlLTUudG9GaXhlZCgzKXx8XCIxXCIhPT0uOS50b0ZpeGVkKDApfHxcIjEuMjVcIiE9PTEuMjU1LnRvRml4ZWQoMil8fFwiMTAwMDAwMDAwMDAwMDAwMDEyOFwiIT09KDB4ZGUwYjZiM2E3NjQwMDgwKS50b0ZpeGVkKDApKXx8IXIoNSkoZnVuY3Rpb24oKXtmLmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvRml4ZWQ6ZnVuY3Rpb24odCl7dmFyIGUscixuLGYscz1vKHRoaXMsaCksdT1pKHQpLHk9XCJcIixtPWM7aWYodTwwfHx1PjIwKXRocm93IFJhbmdlRXJyb3IoaCk7aWYocyE9cylyZXR1cm5cIk5hTlwiO2lmKHM8PS0xZTIxfHxzPj0xZTIxKXJldHVybiBTdHJpbmcocyk7aWYoczwwJiYoeT1cIi1cIixzPS1zKSxzPjFlLTIxKWlmKGU9dihzKmIoMiw2OSwxKSktNjkscj1lPDA/cypiKDIsLWUsMSk6cy9iKDIsZSwxKSxyKj00NTAzNTk5NjI3MzcwNDk2LGU9NTItZSxlPjApe2ZvcihkKDAsciksbj11O24+PTc7KWQoMWU3LDApLG4tPTc7Zm9yKGQoYigxMCxuLDEpLDApLG49ZS0xO24+PTIzOylsKDE8PDIzKSxuLT0yMztsKDE8PG4pLGQoMSwxKSxsKDIpLG09cCgpfWVsc2UgZCgwLHIpLGQoMTw8LWUsMCksbT1wKCkrYS5jYWxsKGMsdSk7cmV0dXJuIHU+MD8oZj1tLmxlbmd0aCxtPXkrKGY8PXU/XCIwLlwiK2EuY2FsbChjLHUtZikrbTptLnNsaWNlKDAsZi11KStcIi5cIittLnNsaWNlKGYtdSkpKTptPXkrbSxtfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNSksbz1yKDE2NiksYT0xLi50b1ByZWNpc2lvbjtuKG4uUCtuLkYqKGkoZnVuY3Rpb24oKXtyZXR1cm5cIjFcIiE9PWEuY2FsbCgxLHZvaWQgMCl9KXx8IWkoZnVuY3Rpb24oKXthLmNhbGwoe30pfSkpLFwiTnVtYmVyXCIse3RvUHJlY2lzaW9uOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyxcIk51bWJlciN0b1ByZWNpc2lvbjogaW5jb3JyZWN0IGludm9jYXRpb24hXCIpO3JldHVybiB2b2lkIDA9PT10P2EuY2FsbChlKTphLmNhbGwoZSx0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMrbi5GLFwiT2JqZWN0XCIse2Fzc2lnbjpyKDE3OSl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7Y3JlYXRlOnIoNDIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TK24uRiohcig4KSxcIk9iamVjdFwiLHtkZWZpbmVQcm9wZXJ0aWVzOnIoMTgwKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUytuLkYqIXIoOCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydHk6cig5KS5mfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJmcmVlemVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm4oZSk/dChpKGUpKTplfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDIwKS5mO3IoMjgpKFwiZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gaShuKHQpLGUpfX0pfSxmdW5jdGlvbih0LGUscil7cigyOCkoXCJnZXRPd25Qcm9wZXJ0eU5hbWVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gcigxODEpLmZ9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTEpLGk9cigyMSk7cigyOCkoXCJnZXRQcm90b3R5cGVPZlwiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTtyKDI4KShcImlzRXh0ZW5zaWJsZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hIW4oZSkmJighdHx8dChlKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3IoMjgpKFwiaXNGcm96ZW5cIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIW4oZSl8fCEhdCYmdChlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7cigyOCkoXCJpc1NlYWxlZFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4hbihlKXx8ISF0JiZ0KGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk9iamVjdFwiLHtpczpyKDE4Nyl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTEpLGk9cig0NCk7cigyOCkoXCJrZXlzXCIsZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGkobih0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJwcmV2ZW50RXh0ZW5zaW9uc1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmbihlKT90KGkoZSkpOmV9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigzNikub25GcmVlemU7cigyOCkoXCJzZWFsXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiZuKGUpP3QoaShlKSk6ZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7c2V0UHJvdG90eXBlT2Y6cigxMzIpLnNldH0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig2NCksaT17fTtpW3IoNykoXCJ0b1N0cmluZ1RhZ1wiKV09XCJ6XCIsaStcIlwiIT1cIltvYmplY3Qgel1cIiYmcigxNSkoT2JqZWN0LnByb3RvdHlwZSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm5cIltvYmplY3QgXCIrbih0aGlzKStcIl1cIn0sITApfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg1KTtuKG4uRytuLkYqKHBhcnNlRmxvYXQhPWkpLHtwYXJzZUZsb2F0Oml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4Nik7bihuLkcrbi5GKihwYXJzZUludCE9aSkse3BhcnNlSW50Oml9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuLGksbyxhPXIoNDEpLGY9cig0KSxzPXIoMzMpLHU9cig2NCksaD1yKDApLGM9cig2KSxkPXIoMTMpLGw9cig0MCkscD1yKDU1KSxiPXIoMTM0KSx2PXIoMTM5KS5zZXQseT1yKDEzMSkoKSxtPVwiUHJvbWlzZVwiLGc9Zi5UeXBlRXJyb3Isdz1mLnByb2Nlc3MsXz1mW21dLHc9Zi5wcm9jZXNzLE09XCJwcm9jZXNzXCI9PXUodyksUz1mdW5jdGlvbigpe30sRT0hIWZ1bmN0aW9uKCl7dHJ5e3ZhciB0PV8ucmVzb2x2ZSgxKSxlPSh0LmNvbnN0cnVjdG9yPXt9KVtyKDcpKFwic3BlY2llc1wiKV09ZnVuY3Rpb24odCl7dChTLFMpfTtyZXR1cm4oTXx8XCJmdW5jdGlvblwiPT10eXBlb2YgUHJvbWlzZVJlamVjdGlvbkV2ZW50KSYmdC50aGVuKFMpaW5zdGFuY2VvZiBlfWNhdGNoKHQpe319KCksQT1mdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZXx8dD09PV8mJmU9PT1vfSxrPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiEoIWModCl8fFwiZnVuY3Rpb25cIiE9dHlwZW9mKGU9dC50aGVuKSkmJmV9LHg9ZnVuY3Rpb24odCl7cmV0dXJuIEEoXyx0KT9uZXcgSSh0KTpuZXcgaSh0KX0sST1pPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5wcm9taXNlPW5ldyB0KGZ1bmN0aW9uKHQsbil7aWYodm9pZCAwIT09ZXx8dm9pZCAwIT09cil0aHJvdyBnKFwiQmFkIFByb21pc2UgY29uc3RydWN0b3JcIik7ZT10LHI9bn0pLHRoaXMucmVzb2x2ZT1kKGUpLHRoaXMucmVqZWN0PWQocil9LEI9ZnVuY3Rpb24odCl7dHJ5e3QoKX1jYXRjaCh0KXtyZXR1cm57ZXJyb3I6dH19fSxPPWZ1bmN0aW9uKHQsZSl7aWYoIXQuX24pe3QuX249ITA7dmFyIHI9dC5fYzt5KGZ1bmN0aW9uKCl7Zm9yKHZhciBuPXQuX3YsaT0xPT10Ll9zLG89MCxhPWZ1bmN0aW9uKGUpe3ZhciByLG8sYT1pP2Uub2s6ZS5mYWlsLGY9ZS5yZXNvbHZlLHM9ZS5yZWplY3QsdT1lLmRvbWFpbjt0cnl7YT8oaXx8KDI9PXQuX2gmJlQodCksdC5faD0xKSxhPT09ITA/cj1uOih1JiZ1LmVudGVyKCkscj1hKG4pLHUmJnUuZXhpdCgpKSxyPT09ZS5wcm9taXNlP3MoZyhcIlByb21pc2UtY2hhaW4gY3ljbGVcIikpOihvPWsocikpP28uY2FsbChyLGYscyk6ZihyKSk6cyhuKX1jYXRjaCh0KXtzKHQpfX07ci5sZW5ndGg+bzspYShyW28rK10pO3QuX2M9W10sdC5fbj0hMSxlJiYhdC5faCYmUih0KX0pfX0sUj1mdW5jdGlvbih0KXt2LmNhbGwoZixmdW5jdGlvbigpe3ZhciBlLHIsbixpPXQuX3Y7aWYoUCh0KSYmKGU9QihmdW5jdGlvbigpe00/dy5lbWl0KFwidW5oYW5kbGVkUmVqZWN0aW9uXCIsaSx0KToocj1mLm9udW5oYW5kbGVkcmVqZWN0aW9uKT9yKHtwcm9taXNlOnQscmVhc29uOml9KToobj1mLmNvbnNvbGUpJiZuLmVycm9yJiZuLmVycm9yKFwiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uXCIsaSl9KSx0Ll9oPU18fFAodCk/MjoxKSx0Ll9hPXZvaWQgMCxlKXRocm93IGUuZXJyb3J9KX0sUD1mdW5jdGlvbih0KXtpZigxPT10Ll9oKXJldHVybiExO2Zvcih2YXIgZSxyPXQuX2F8fHQuX2Msbj0wO3IubGVuZ3RoPm47KWlmKGU9cltuKytdLGUuZmFpbHx8IVAoZS5wcm9taXNlKSlyZXR1cm4hMTtyZXR1cm4hMH0sVD1mdW5jdGlvbih0KXt2LmNhbGwoZixmdW5jdGlvbigpe3ZhciBlO00/dy5lbWl0KFwicmVqZWN0aW9uSGFuZGxlZFwiLHQpOihlPWYub25yZWplY3Rpb25oYW5kbGVkKSYmZSh7cHJvbWlzZTp0LHJlYXNvbjp0Ll92fSl9KX0saj1mdW5jdGlvbih0KXt2YXIgZT10aGlzO2UuX2R8fChlLl9kPSEwLGU9ZS5fd3x8ZSxlLl92PXQsZS5fcz0yLGUuX2F8fChlLl9hPWUuX2Muc2xpY2UoKSksTyhlLCEwKSl9LEM9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzO2lmKCFyLl9kKXtyLl9kPSEwLHI9ci5fd3x8cjt0cnl7aWYocj09PXQpdGhyb3cgZyhcIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmXCIpOyhlPWsodCkpP3koZnVuY3Rpb24oKXt2YXIgbj17X3c6cixfZDohMX07dHJ5e2UuY2FsbCh0LHMoQyxuLDEpLHMoaixuLDEpKX1jYXRjaCh0KXtqLmNhbGwobix0KX19KTooci5fdj10LHIuX3M9MSxPKHIsITEpKX1jYXRjaCh0KXtqLmNhbGwoe193OnIsX2Q6ITF9LHQpfX19O0V8fChfPWZ1bmN0aW9uKHQpe2wodGhpcyxfLG0sXCJfaFwiKSxkKHQpLG4uY2FsbCh0aGlzKTt0cnl7dChzKEMsdGhpcywxKSxzKGosdGhpcywxKSl9Y2F0Y2godCl7ai5jYWxsKHRoaXMsdCl9fSxuPWZ1bmN0aW9uKHQpe3RoaXMuX2M9W10sdGhpcy5fYT12b2lkIDAsdGhpcy5fcz0wLHRoaXMuX2Q9ITEsdGhpcy5fdj12b2lkIDAsdGhpcy5faD0wLHRoaXMuX249ITF9LG4ucHJvdG90eXBlPXIoNDUpKF8ucHJvdG90eXBlLHt0aGVuOmZ1bmN0aW9uKHQsZSl7dmFyIHI9eChiKHRoaXMsXykpO3JldHVybiByLm9rPVwiZnVuY3Rpb25cIiE9dHlwZW9mIHR8fHQsci5mYWlsPVwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJmUsci5kb21haW49TT93LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZPKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsdCl9fSksST1mdW5jdGlvbigpe3ZhciB0PW5ldyBuO3RoaXMucHJvbWlzZT10LHRoaXMucmVzb2x2ZT1zKEMsdCwxKSx0aGlzLnJlamVjdD1zKGosdCwxKX0pLGgoaC5HK2guVytoLkYqIUUse1Byb21pc2U6X30pLHIoNTcpKF8sbSkscig0NikobSksbz1yKDMyKVttXSxoKGguUytoLkYqIUUsbSx7cmVqZWN0OmZ1bmN0aW9uKHQpe3ZhciBlPXgodGhpcykscj1lLnJlamVjdDtyZXR1cm4gcih0KSxlLnByb21pc2V9fSksaChoLlMraC5GKihhfHwhRSksbSx7cmVzb2x2ZTpmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgXyYmQSh0LmNvbnN0cnVjdG9yLHRoaXMpKXJldHVybiB0O3ZhciBlPXgodGhpcykscj1lLnJlc29sdmU7cmV0dXJuIHIodCksZS5wcm9taXNlfX0pLGgoaC5TK2guRiohKEUmJnIoODQpKGZ1bmN0aW9uKHQpe18uYWxsKHQpLmNhdGNoKFMpfSkpLG0se2FsbDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLHI9eChlKSxuPXIucmVzb2x2ZSxpPXIucmVqZWN0LG89QihmdW5jdGlvbigpe3ZhciByPVtdLG89MCxhPTE7cCh0LCExLGZ1bmN0aW9uKHQpe3ZhciBmPW8rKyxzPSExO3IucHVzaCh2b2lkIDApLGErKyxlLnJlc29sdmUodCkudGhlbihmdW5jdGlvbih0KXtzfHwocz0hMCxyW2ZdPXQsLS1hfHxuKHIpKX0saSl9KSwtLWF8fG4ocil9KTtyZXR1cm4gbyYmaShvLmVycm9yKSxyLnByb21pc2V9LHJhY2U6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXgoZSksbj1yLnJlamVjdCxpPUIoZnVuY3Rpb24oKXtwKHQsITEsZnVuY3Rpb24odCl7ZS5yZXNvbHZlKHQpLnRoZW4oci5yZXNvbHZlLG4pfSl9KTtyZXR1cm4gaSYmbihpLmVycm9yKSxyLnByb21pc2V9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMyksbz1yKDMpLGE9KHIoNCkuUmVmbGVjdHx8e30pLmFwcGx5LGY9RnVuY3Rpb24uYXBwbHk7bihuLlMrbi5GKiFyKDUpKGZ1bmN0aW9uKCl7YShmdW5jdGlvbigpe30pfSksXCJSZWZsZWN0XCIse2FwcGx5OmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1pKHQpLHM9byhyKTtyZXR1cm4gYT9hKG4sZSxzKTpmLmNhbGwobixlLHMpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNDIpLG89cigxMyksYT1yKDMpLGY9cig2KSxzPXIoNSksdT1yKDE3MCksaD0ocig0KS5SZWZsZWN0fHx7fSkuY29uc3RydWN0LGM9cyhmdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXt9cmV0dXJuIShoKGZ1bmN0aW9uKCl7fSxbXSx0KWluc3RhbmNlb2YgdCl9KSxkPSFzKGZ1bmN0aW9uKCl7aChmdW5jdGlvbigpe30pfSk7bihuLlMrbi5GKihjfHxkKSxcIlJlZmxlY3RcIix7Y29uc3RydWN0OmZ1bmN0aW9uKHQsZSl7byh0KSxhKGUpO3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mz90Om8oYXJndW1lbnRzWzJdKTtpZihkJiYhYylyZXR1cm4gaCh0LGUscik7aWYodD09cil7c3dpdGNoKGUubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZVswXSk7Y2FzZSAyOnJldHVybiBuZXcgdChlWzBdLGVbMV0pO2Nhc2UgMzpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbmV3IHQoZVswXSxlWzFdLGVbMl0sZVszXSl9dmFyIG49W251bGxdO3JldHVybiBuLnB1c2guYXBwbHkobixlKSxuZXcodS5hcHBseSh0LG4pKX12YXIgcz1yLnByb3RvdHlwZSxsPWkoZihzKT9zOk9iamVjdC5wcm90b3R5cGUpLHA9RnVuY3Rpb24uYXBwbHkuY2FsbCh0LGwsZSk7cmV0dXJuIGYocCk/cDpsfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KSxpPXIoMCksbz1yKDMpLGE9cigyOSk7aShpLlMraS5GKnIoNSkoZnVuY3Rpb24oKXtSZWZsZWN0LmRlZmluZVByb3BlcnR5KG4uZih7fSwxLHt2YWx1ZToxfSksMSx7dmFsdWU6Mn0pfSksXCJSZWZsZWN0XCIse2RlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtvKHQpLGU9YShlLCEwKSxvKHIpO3RyeXtyZXR1cm4gbi5mKHQsZSxyKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyMCkuZixvPXIoMyk7bihuLlMsXCJSZWZsZWN0XCIse2RlbGV0ZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSl7dmFyIHI9aShvKHQpLGUpO3JldHVybiEociYmIXIuY29uZmlndXJhYmxlKSYmZGVsZXRlIHRbZV19fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigzKSxvPWZ1bmN0aW9uKHQpe3RoaXMuX3Q9aSh0KSx0aGlzLl9pPTA7dmFyIGUscj10aGlzLl9rPVtdO2ZvcihlIGluIHQpci5wdXNoKGUpfTtyKDEyNykobyxcIk9iamVjdFwiLGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLHI9ZS5faztkbyBpZihlLl9pPj1yLmxlbmd0aClyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9O3doaWxlKCEoKHQ9cltlLl9pKytdKWluIGUuX3QpKTtyZXR1cm57dmFsdWU6dCxkb25lOiExfX0pLG4obi5TLFwiUmVmbGVjdFwiLHtlbnVtZXJhdGU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMCksaT1yKDApLG89cigzKTtpKGkuUyxcIlJlZmxlY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG4uZihvKHQpLGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjEpLG89cigzKTtuKG4uUyxcIlJlZmxlY3RcIix7Z2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGkobyh0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsZixoPWFyZ3VtZW50cy5sZW5ndGg8Mz90OmFyZ3VtZW50c1syXTtyZXR1cm4gdSh0KT09PWg/dFtlXToocj1pLmYodCxlKSk/YShyLFwidmFsdWVcIik/ci52YWx1ZTp2b2lkIDAhPT1yLmdldD9yLmdldC5jYWxsKGgpOnZvaWQgMDpzKGY9byh0KSk/bihmLGUsaCk6dm9pZCAwfXZhciBpPXIoMjApLG89cigyMSksYT1yKDEyKSxmPXIoMCkscz1yKDYpLHU9cigzKTtmKGYuUyxcIlJlZmxlY3RcIix7Z2V0Om59KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJSZWZsZWN0XCIse2hhczpmdW5jdGlvbih0LGUpe3JldHVybiBlIGluIHR9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzKSxvPU9iamVjdC5pc0V4dGVuc2libGU7bihuLlMsXCJSZWZsZWN0XCIse2lzRXh0ZW5zaWJsZTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSwhb3x8byh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJSZWZsZWN0XCIse293bktleXM6cigxODQpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzKSxvPU9iamVjdC5wcmV2ZW50RXh0ZW5zaW9ucztuKG4uUyxcIlJlZmxlY3RcIix7cHJldmVudEV4dGVuc2lvbnM6ZnVuY3Rpb24odCl7aSh0KTt0cnl7cmV0dXJuIG8mJm8odCksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMyKTtpJiZuKG4uUyxcIlJlZmxlY3RcIix7c2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24odCxlKXtpLmNoZWNrKHQsZSk7dHJ5e3JldHVybiBpLnNldCh0LGUpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3ZhciBzLGQsbD1hcmd1bWVudHMubGVuZ3RoPDQ/dDphcmd1bWVudHNbM10scD1vLmYoaCh0KSxlKTtpZighcCl7aWYoYyhkPWEodCkpKXJldHVybiBuKGQsZSxyLGwpO3A9dSgwKX1yZXR1cm4gZihwLFwidmFsdWVcIik/IShwLndyaXRhYmxlPT09ITF8fCFjKGwpKSYmKHM9by5mKGwsZSl8fHUoMCkscy52YWx1ZT1yLGkuZihsLGUscyksITApOnZvaWQgMCE9PXAuc2V0JiYocC5zZXQuY2FsbChsLHIpLCEwKX12YXIgaT1yKDkpLG89cigyMCksYT1yKDIxKSxmPXIoMTIpLHM9cigwKSx1PXIoMzcpLGg9cigzKSxjPXIoNik7cyhzLlMsXCJSZWZsZWN0XCIse3NldDpufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxMjQpLG89cig5KS5mLGE9cig0MykuZixmPXIoODMpLHM9cig4MSksdT1uLlJlZ0V4cCxoPXUsYz11LnByb3RvdHlwZSxkPS9hL2csbD0vYS9nLHA9bmV3IHUoZCkhPT1kO2lmKHIoOCkmJighcHx8cig1KShmdW5jdGlvbigpe3JldHVybiBsW3IoNykoXCJtYXRjaFwiKV09ITEsdShkKSE9ZHx8dShsKT09bHx8XCIvYS9pXCIhPXUoZCxcImlcIil9KSkpe3U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzIGluc3RhbmNlb2YgdSxuPWYodCksbz12b2lkIDA9PT1lO3JldHVybiFyJiZuJiZ0LmNvbnN0cnVjdG9yPT09dSYmbz90OmkocD9uZXcgaChuJiYhbz90LnNvdXJjZTp0LGUpOmgoKG49dCBpbnN0YW5jZW9mIHUpP3Quc291cmNlOnQsbiYmbz9zLmNhbGwodCk6ZSkscj90aGlzOmMsdSl9O2Zvcih2YXIgYj0oZnVuY3Rpb24odCl7dCBpbiB1fHxvKHUsdCx7Y29uZmlndXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBoW3RdfSxzZXQ6ZnVuY3Rpb24oZSl7aFt0XT1lfX0pfSksdj1hKGgpLHk9MDt2Lmxlbmd0aD55OyliKHZbeSsrXSk7Yy5jb25zdHJ1Y3Rvcj11LHUucHJvdG90eXBlPWMscigxNSkobixcIlJlZ0V4cFwiLHUpfXIoNDYpKFwiUmVnRXhwXCIpfSxmdW5jdGlvbih0LGUscil7cig4MCkoXCJtYXRjaFwiLDEsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KHRoaXMpLGk9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChyLG4pOm5ldyBSZWdFeHAocilbZV0oU3RyaW5nKG4pKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe1xucig4MCkoXCJyZXBsYWNlXCIsMixmdW5jdGlvbih0LGUscil7cmV0dXJuW2Z1bmN0aW9uKG4saSl7XCJ1c2Ugc3RyaWN0XCI7dmFyIG89dCh0aGlzKSxhPXZvaWQgMD09bj92b2lkIDA6bltlXTtyZXR1cm4gdm9pZCAwIT09YT9hLmNhbGwobixvLGkpOnIuY2FsbChTdHJpbmcobyksbixpKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwic2VhcmNoXCIsMSxmdW5jdGlvbih0LGUscil7cmV0dXJuW2Z1bmN0aW9uKHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXQodGhpcyksaT12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWk/aS5jYWxsKHIsbik6bmV3IFJlZ0V4cChyKVtlXShTdHJpbmcobikpfSxyXX0pfSxmdW5jdGlvbih0LGUscil7cig4MCkoXCJzcGxpdFwiLDIsZnVuY3Rpb24odCxlLG4pe1widXNlIHN0cmljdFwiO3ZhciBpPXIoODMpLG89bixhPVtdLnB1c2gsZj1cInNwbGl0XCIscz1cImxlbmd0aFwiLHU9XCJsYXN0SW5kZXhcIjtpZihcImNcIj09XCJhYmJjXCJbZl0oLyhiKSovKVsxXXx8NCE9XCJ0ZXN0XCJbZl0oLyg/OikvLC0xKVtzXXx8MiE9XCJhYlwiW2ZdKC8oPzphYikqLylbc118fDQhPVwiLlwiW2ZdKC8oLj8pKC4/KS8pW3NdfHxcIi5cIltmXSgvKCkoKS8pW3NdPjF8fFwiXCJbZl0oLy4/Lylbc10pe3ZhciBoPXZvaWQgMD09PS8oKT8/Ly5leGVjKFwiXCIpWzFdO249ZnVuY3Rpb24odCxlKXt2YXIgcj1TdHJpbmcodGhpcyk7aWYodm9pZCAwPT09dCYmMD09PWUpcmV0dXJuW107aWYoIWkodCkpcmV0dXJuIG8uY2FsbChyLHQsZSk7dmFyIG4sZixjLGQsbCxwPVtdLGI9KHQuaWdub3JlQ2FzZT9cImlcIjpcIlwiKSsodC5tdWx0aWxpbmU/XCJtXCI6XCJcIikrKHQudW5pY29kZT9cInVcIjpcIlwiKSsodC5zdGlja3k/XCJ5XCI6XCJcIiksdj0wLHk9dm9pZCAwPT09ZT80Mjk0OTY3Mjk1OmU+Pj4wLG09bmV3IFJlZ0V4cCh0LnNvdXJjZSxiK1wiZ1wiKTtmb3IoaHx8KG49bmV3IFJlZ0V4cChcIl5cIittLnNvdXJjZStcIiQoPyFcXFxccylcIixiKSk7KGY9bS5leGVjKHIpKSYmKGM9Zi5pbmRleCtmWzBdW3NdLCEoYz52JiYocC5wdXNoKHIuc2xpY2UodixmLmluZGV4KSksIWgmJmZbc10+MSYmZlswXS5yZXBsYWNlKG4sZnVuY3Rpb24oKXtmb3IobD0xO2w8YXJndW1lbnRzW3NdLTI7bCsrKXZvaWQgMD09PWFyZ3VtZW50c1tsXSYmKGZbbF09dm9pZCAwKX0pLGZbc10+MSYmZi5pbmRleDxyW3NdJiZhLmFwcGx5KHAsZi5zbGljZSgxKSksZD1mWzBdW3NdLHY9YyxwW3NdPj15KSkpOyltW3VdPT09Zi5pbmRleCYmbVt1XSsrO3JldHVybiB2PT09cltzXT8hZCYmbS50ZXN0KFwiXCIpfHxwLnB1c2goXCJcIik6cC5wdXNoKHIuc2xpY2UodikpLHBbc10+eT9wLnNsaWNlKDAseSk6cH19ZWxzZVwiMFwiW2ZdKHZvaWQgMCwwKVtzXSYmKG49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdm9pZCAwPT09dCYmMD09PWU/W106by5jYWxsKHRoaXMsdCxlKX0pO3JldHVybltmdW5jdGlvbihyLGkpe3ZhciBvPXQodGhpcyksYT12b2lkIDA9PXI/dm9pZCAwOnJbZV07cmV0dXJuIHZvaWQgMCE9PWE/YS5jYWxsKHIsbyxpKTpuLmNhbGwoU3RyaW5nKG8pLHIsaSl9LG5dfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE5MSk7dmFyIG49cigzKSxpPXIoODEpLG89cig4KSxhPVwidG9TdHJpbmdcIixmPS8uL1thXSxzPWZ1bmN0aW9uKHQpe3IoMTUpKFJlZ0V4cC5wcm90b3R5cGUsYSx0LCEwKX07cig1KShmdW5jdGlvbigpe3JldHVyblwiL2EvYlwiIT1mLmNhbGwoe3NvdXJjZTpcImFcIixmbGFnczpcImJcIn0pfSk/cyhmdW5jdGlvbigpe3ZhciB0PW4odGhpcyk7cmV0dXJuXCIvXCIuY29uY2F0KHQuc291cmNlLFwiL1wiLFwiZmxhZ3NcImluIHQ/dC5mbGFnczohbyYmdCBpbnN0YW5jZW9mIFJlZ0V4cD9pLmNhbGwodCk6dm9pZCAwKX0pOmYubmFtZSE9YSYmcyhmdW5jdGlvbigpe3JldHVybiBmLmNhbGwodGhpcyl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYW5jaG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJhXCIsXCJuYW1lXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImJpZ1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJiaWdcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJibGlua1wiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJibGlua1wiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImJvbGRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYlwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMzUpKCExKTtuKG4uUCxcIlN0cmluZ1wiLHtjb2RlUG9pbnRBdDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTApLG89cigxMzYpLGE9XCJlbmRzV2l0aFwiLGY9XCJcIlthXTtuKG4uUCtuLkYqcigxMjIpKGEpLFwiU3RyaW5nXCIse2VuZHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyx0LGEpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbj1pKGUubGVuZ3RoKSxzPXZvaWQgMD09PXI/bjpNYXRoLm1pbihpKHIpLG4pLHU9U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLHUscyk6ZS5zbGljZShzLXUubGVuZ3RoLHMpPT09dX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiZml4ZWRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwidHRcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJmb250Y29sb3JcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImZvbnRcIixcImNvbG9yXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImZvbnRzaXplXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJmb250XCIsXCJzaXplXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cig0Nyksbz1TdHJpbmcuZnJvbUNoYXJDb2RlLGE9U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIWEmJjEhPWEubGVuZ3RoKSxcIlN0cmluZ1wiLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPVtdLG49YXJndW1lbnRzLmxlbmd0aCxhPTA7bj5hOyl7aWYoZT0rYXJndW1lbnRzW2ErK10saShlLDExMTQxMTEpIT09ZSl0aHJvdyBSYW5nZUVycm9yKGUrXCIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludFwiKTtyLnB1c2goZTw2NTUzNj9vKGUpOm8oKChlLT02NTUzNik+PjEwKSs1NTI5NixlJTEwMjQrNTYzMjApKX1yZXR1cm4gci5qb2luKFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTM2KSxvPVwiaW5jbHVkZXNcIjtuKG4uUCtuLkYqcigxMjIpKG8pLFwiU3RyaW5nXCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiEhfmkodGhpcyx0LG8pLmluZGV4T2YodCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcIml0YWxpY3NcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiaVwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDEzNSkoITApO3IoMTI4KShTdHJpbmcsXCJTdHJpbmdcIixmdW5jdGlvbih0KXt0aGlzLl90PVN0cmluZyh0KSx0aGlzLl9pPTB9LGZ1bmN0aW9uKCl7dmFyIHQsZT10aGlzLl90LHI9dGhpcy5faTtyZXR1cm4gcj49ZS5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfToodD1uKGUsciksdGhpcy5faSs9dC5sZW5ndGgse3ZhbHVlOnQsZG9uZTohMX0pfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImxpbmtcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQodGhpcyxcImFcIixcImhyZWZcIixlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMTApO24obi5TLFwiU3RyaW5nXCIse3JhdzpmdW5jdGlvbih0KXtmb3IodmFyIGU9aSh0LnJhdykscj1vKGUubGVuZ3RoKSxuPWFyZ3VtZW50cy5sZW5ndGgsYT1bXSxmPTA7cj5mOylhLnB1c2goU3RyaW5nKGVbZisrXSkpLGY8biYmYS5wdXNoKFN0cmluZyhhcmd1bWVudHNbZl0pKTtyZXR1cm4gYS5qb2luKFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCxcIlN0cmluZ1wiLHtyZXBlYXQ6cigxMzcpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInNtYWxsXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInNtYWxsXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEwKSxvPXIoMTM2KSxhPVwic3RhcnRzV2l0aFwiLGY9XCJcIlthXTtuKG4uUCtuLkYqcigxMjIpKGEpLFwiU3RyaW5nXCIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24odCl7dmFyIGU9byh0aGlzLHQsYSkscj1pKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLGUubGVuZ3RoKSksbj1TdHJpbmcodCk7cmV0dXJuIGY/Zi5jYWxsKGUsbixyKTplLnNsaWNlKHIscituLmxlbmd0aCk9PT1ufX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzdHJpa2VcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3RyaWtlXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic3ViXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN1YlwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInN1cFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdXBcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cig1OCkoXCJ0cmltXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywzKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDEyKSxvPXIoOCksYT1yKDApLGY9cigxNSkscz1yKDM2KS5LRVksdT1yKDUpLGg9cig4NyksYz1yKDU3KSxkPXIoNDgpLGw9cig3KSxwPXIoMTg5KSxiPXIoMTQxKSx2PXIoMjg2KSx5PXIoMjg1KSxtPXIoMTI2KSxnPXIoMyksdz1yKDE3KSxfPXIoMjkpLE09cigzNyksUz1yKDQyKSxFPXIoMTgxKSxBPXIoMjApLGs9cig5KSx4PXIoNDQpLEk9QS5mLEI9ay5mLE89RS5mLFI9bi5TeW1ib2wsUD1uLkpTT04sVD1QJiZQLnN0cmluZ2lmeSxqPVwicHJvdG90eXBlXCIsQz1sKFwiX2hpZGRlblwiKSxOPWwoXCJ0b1ByaW1pdGl2ZVwiKSxMPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLFU9aChcInN5bWJvbC1yZWdpc3RyeVwiKSx6PWgoXCJzeW1ib2xzXCIpLEQ9aChcIm9wLXN5bWJvbHNcIikscT1PYmplY3Rbal0sRj1cImZ1bmN0aW9uXCI9PXR5cGVvZiBSLEs9bi5RT2JqZWN0LEc9IUt8fCFLW2pdfHwhS1tqXS5maW5kQ2hpbGQsVj1vJiZ1KGZ1bmN0aW9uKCl7cmV0dXJuIDchPVMoQih7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIEIodGhpcyxcImFcIix7dmFsdWU6N30pLmF9fSkpLmF9KT9mdW5jdGlvbih0LGUscil7dmFyIG49SShxLGUpO24mJmRlbGV0ZSBxW2VdLEIodCxlLHIpLG4mJnQhPT1xJiZCKHEsZSxuKX06QixIPWZ1bmN0aW9uKHQpe3ZhciBlPXpbdF09UyhSW2pdKTtyZXR1cm4gZS5faz10LGV9LFg9RiYmXCJzeW1ib2xcIj09dHlwZW9mIFIuaXRlcmF0b3I/ZnVuY3Rpb24odCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9OmZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgUn0sWT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHQ9PT1xJiZZKEQsZSxyKSxnKHQpLGU9XyhlLCEwKSxnKHIpLGkoeixlKT8oci5lbnVtZXJhYmxlPyhpKHQsQykmJnRbQ11bZV0mJih0W0NdW2VdPSExKSxyPVMocix7ZW51bWVyYWJsZTpNKDAsITEpfSkpOihpKHQsQyl8fEIodCxDLE0oMSx7fSkpLHRbQ11bZV09ITApLFYodCxlLHIpKTpCKHQsZSxyKX0sVz1mdW5jdGlvbih0LGUpe2codCk7Zm9yKHZhciByLG49eShlPXcoZSkpLGk9MCxvPW4ubGVuZ3RoO28+aTspWSh0LHI9bltpKytdLGVbcl0pO3JldHVybiB0fSxaPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PWU/Uyh0KTpXKFModCksZSl9LEo9ZnVuY3Rpb24odCl7dmFyIGU9TC5jYWxsKHRoaXMsdD1fKHQsITApKTtyZXR1cm4hKHRoaXM9PT1xJiZpKHosdCkmJiFpKEQsdCkpJiYoIShlfHwhaSh0aGlzLHQpfHwhaSh6LHQpfHxpKHRoaXMsQykmJnRoaXNbQ11bdF0pfHxlKX0sJD1mdW5jdGlvbih0LGUpe2lmKHQ9dyh0KSxlPV8oZSwhMCksdCE9PXF8fCFpKHosZSl8fGkoRCxlKSl7dmFyIHI9SSh0LGUpO3JldHVybiFyfHwhaSh6LGUpfHxpKHQsQykmJnRbQ11bZV18fChyLmVudW1lcmFibGU9ITApLHJ9fSxRPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPU8odyh0KSksbj1bXSxvPTA7ci5sZW5ndGg+bzspaSh6LGU9cltvKytdKXx8ZT09Q3x8ZT09c3x8bi5wdXNoKGUpO3JldHVybiBufSx0dD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj10PT09cSxuPU8ocj9EOncodCkpLG89W10sYT0wO24ubGVuZ3RoPmE7KSFpKHosZT1uW2ErK10pfHxyJiYhaShxLGUpfHxvLnB1c2goeltlXSk7cmV0dXJuIG99O0Z8fChSPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIFIpdGhyb3cgVHlwZUVycm9yKFwiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yIVwiKTt2YXIgdD1kKGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKSxlPWZ1bmN0aW9uKHIpe3RoaXM9PT1xJiZlLmNhbGwoRCxyKSxpKHRoaXMsQykmJmkodGhpc1tDXSx0KSYmKHRoaXNbQ11bdF09ITEpLFYodGhpcyx0LE0oMSxyKSl9O3JldHVybiBvJiZHJiZWKHEsdCx7Y29uZmlndXJhYmxlOiEwLHNldDplfSksSCh0KX0sZihSW2pdLFwidG9TdHJpbmdcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSksQS5mPSQsay5mPVkscig0MykuZj1FLmY9USxyKDY2KS5mPUoscig4NikuZj10dCxvJiYhcig0MSkmJmYocSxcInByb3BlcnR5SXNFbnVtZXJhYmxlXCIsSiwhMCkscC5mPWZ1bmN0aW9uKHQpe3JldHVybiBIKGwodCkpfSksYShhLkcrYS5XK2EuRiohRix7U3ltYm9sOlJ9KTtmb3IodmFyIGV0PVwiaGFzSW5zdGFuY2UsaXNDb25jYXRTcHJlYWRhYmxlLGl0ZXJhdG9yLG1hdGNoLHJlcGxhY2Usc2VhcmNoLHNwZWNpZXMsc3BsaXQsdG9QcmltaXRpdmUsdG9TdHJpbmdUYWcsdW5zY29wYWJsZXNcIi5zcGxpdChcIixcIikscnQ9MDtldC5sZW5ndGg+cnQ7KWwoZXRbcnQrK10pO2Zvcih2YXIgZXQ9eChsLnN0b3JlKSxydD0wO2V0Lmxlbmd0aD5ydDspYihldFtydCsrXSk7YShhLlMrYS5GKiFGLFwiU3ltYm9sXCIse2ZvcjpmdW5jdGlvbih0KXtyZXR1cm4gaShVLHQrPVwiXCIpP1VbdF06VVt0XT1SKHQpfSxrZXlGb3I6ZnVuY3Rpb24odCl7aWYoWCh0KSlyZXR1cm4gdihVLHQpO3Rocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHN5bWJvbCFcIil9LHVzZVNldHRlcjpmdW5jdGlvbigpe0c9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0c9ITF9fSksYShhLlMrYS5GKiFGLFwiT2JqZWN0XCIse2NyZWF0ZTpaLGRlZmluZVByb3BlcnR5OlksZGVmaW5lUHJvcGVydGllczpXLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjokLGdldE93blByb3BlcnR5TmFtZXM6USxnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6dHR9KSxQJiZhKGEuUythLkYqKCFGfHx1KGZ1bmN0aW9uKCl7dmFyIHQ9UigpO3JldHVyblwiW251bGxdXCIhPVQoW3RdKXx8XCJ7fVwiIT1UKHthOnR9KXx8XCJ7fVwiIT1UKE9iamVjdCh0KSl9KSksXCJKU09OXCIse3N0cmluZ2lmeTpmdW5jdGlvbih0KXtpZih2b2lkIDAhPT10JiYhWCh0KSl7Zm9yKHZhciBlLHIsbj1bdF0saT0xO2FyZ3VtZW50cy5sZW5ndGg+aTspbi5wdXNoKGFyZ3VtZW50c1tpKytdKTtyZXR1cm4gZT1uWzFdLFwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUpLCFyJiZtKGUpfHwoZT1mdW5jdGlvbih0LGUpe2lmKHImJihlPXIuY2FsbCh0aGlzLHQsZSkpLCFYKGUpKXJldHVybiBlfSksblsxXT1lLFQuYXBwbHkoUCxuKX19fSksUltqXVtOXXx8cigxNCkoUltqXSxOLFJbal0udmFsdWVPZiksYyhSLFwiU3ltYm9sXCIpLGMoTWF0aCxcIk1hdGhcIiwhMCksYyhuLkpTT04sXCJKU09OXCIsITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoODgpLG89cigxNDApLGE9cigzKSxmPXIoNDcpLHM9cigxMCksdT1yKDYpLGg9cig0KS5BcnJheUJ1ZmZlcixjPXIoMTM0KSxkPW8uQXJyYXlCdWZmZXIsbD1vLkRhdGFWaWV3LHA9aS5BQlYmJmguaXNWaWV3LGI9ZC5wcm90b3R5cGUuc2xpY2Usdj1pLlZJRVcseT1cIkFycmF5QnVmZmVyXCI7bihuLkcrbi5XK24uRiooaCE9PWQpLHtBcnJheUJ1ZmZlcjpkfSksbihuLlMrbi5GKiFpLkNPTlNUUix5LHtpc1ZpZXc6ZnVuY3Rpb24odCl7cmV0dXJuIHAmJnAodCl8fHUodCkmJnYgaW4gdH19KSxuKG4uUCtuLlUrbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4hbmV3IGQoMikuc2xpY2UoMSx2b2lkIDApLmJ5dGVMZW5ndGh9KSx5LHtzbGljZTpmdW5jdGlvbih0LGUpe2lmKHZvaWQgMCE9PWImJnZvaWQgMD09PWUpcmV0dXJuIGIuY2FsbChhKHRoaXMpLHQpO2Zvcih2YXIgcj1hKHRoaXMpLmJ5dGVMZW5ndGgsbj1mKHQsciksaT1mKHZvaWQgMD09PWU/cjplLHIpLG89bmV3KGModGhpcyxkKSkocyhpLW4pKSx1PW5ldyBsKHRoaXMpLGg9bmV3IGwobykscD0wO248aTspaC5zZXRVaW50OChwKyssdS5nZXRVaW50OChuKyspKTtyZXR1cm4gb319KSxyKDQ2KSh5KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLkcrbi5XK24uRiohcig4OCkuQUJWLHtEYXRhVmlldzpyKDE0MCkuRGF0YVZpZXd9KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiRmxvYXQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiRmxvYXQ2NFwiLDgsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiSW50MTZcIiwyLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkludDMyXCIsNCxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJJbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50MTZcIiwyLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDhcIiwxLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0sITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzMpO3IoNzkpKFwiV2Vha1NldFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbi5kZWYodGhpcyx0LCEwKX19LG4sITEsITApfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNzgpKCEwKTtuKG4uUCxcIkFycmF5XCIse2luY2x1ZGVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSkscig1NCkoXCJpbmNsdWRlc1wiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMSkoKSxvPXIoNCkucHJvY2VzcyxhPVwicHJvY2Vzc1wiPT1yKDIzKShvKTtuKG4uRyx7YXNhcDpmdW5jdGlvbih0KXt2YXIgZT1hJiZvLmRvbWFpbjtpKGU/ZS5iaW5kKHQpOnQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjMpO24obi5TLFwiRXJyb3JcIix7aXNFcnJvcjpmdW5jdGlvbih0KXtyZXR1cm5cIkVycm9yXCI9PT1pKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUCtuLlIsXCJNYXBcIix7dG9KU09OOnIoMTcyKShcIk1hcFwiKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7aWFkZGg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dD4+PjAsbz1lPj4+MCxhPXI+Pj4wO3JldHVybiBvKyhuPj4+MCkrKChpJmF8KGl8YSkmfihpK2E+Pj4wKSk+Pj4zMSl8MH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2ltdWxoOmZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzUsbj0rdCxpPStlLG89biZyLGE9aSZyLGY9bj4+MTYscz1pPj4xNix1PShmKmE+Pj4wKSsobyphPj4+MTYpO3JldHVybiBmKnMrKHU+PjE2KSsoKG8qcz4+PjApKyh1JnIpPj4xNil9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtpc3ViaDpmdW5jdGlvbih0LGUscixuKXt2YXIgaT10Pj4+MCxvPWU+Pj4wLGE9cj4+PjA7cmV0dXJuIG8tKG4+Pj4wKS0oKH5pJmF8fihpXmEpJmktYT4+PjApPj4+MzEpfDB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHt1bXVsaDpmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1LG49K3QsaT0rZSxvPW4mcixhPWkmcixmPW4+Pj4xNixzPWk+Pj4xNix1PShmKmE+Pj4wKSsobyphPj4+MTYpO3JldHVybiBmKnMrKHU+Pj4xNikrKChvKnM+Pj4wKSsodSZyKT4+PjE2KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMTMpLGE9cig5KTtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2RlZmluZUdldHRlcl9fOmZ1bmN0aW9uKHQsZSl7YS5mKGkodGhpcyksdCx7Z2V0Om8oZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMTMpLGE9cig5KTtyKDgpJiZuKG4uUCtyKDg1KSxcIk9iamVjdFwiLHtfX2RlZmluZVNldHRlcl9fOmZ1bmN0aW9uKHQsZSl7YS5mKGkodGhpcyksdCx7c2V0Om8oZSksZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4MykoITApO24obi5TLFwiT2JqZWN0XCIse2VudHJpZXM6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODQpLG89cigxNyksYT1yKDIwKSxmPXIoMTE5KTtuKG4uUyxcIk9iamVjdFwiLHtnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPW8odCksbj1hLmYscz1pKHIpLHU9e30saD0wO3MubGVuZ3RoPmg7KWYodSxlPXNbaCsrXSxuKHIsZSkpO3JldHVybiB1fX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSksYT1yKDIxKSxmPXIoMjApLmY7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19sb29rdXBHZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxyPWkodGhpcyksbj1vKHQsITApO2RvIGlmKGU9ZihyLG4pKXJldHVybiBlLmdldDt3aGlsZShyPWEocikpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSksYT1yKDIxKSxmPXIoMjApLmY7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19sb29rdXBTZXR0ZXJfXzpmdW5jdGlvbih0KXt2YXIgZSxyPWkodGhpcyksbj1vKHQsITApO2RvIGlmKGU9ZihyLG4pKXJldHVybiBlLnNldDt3aGlsZShyPWEocikpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTgzKSghMSk7bihuLlMsXCJPYmplY3RcIix7dmFsdWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNCksbz1yKDMyKSxhPXIoMTMxKSgpLGY9cig3KShcIm9ic2VydmFibGVcIikscz1yKDEzKSx1PXIoMyksaD1yKDQwKSxjPXIoNDUpLGQ9cigxNCksbD1yKDU1KSxwPWwuUkVUVVJOLGI9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGw9PXQ/dm9pZCAwOnModCl9LHY9ZnVuY3Rpb24odCl7dmFyIGU9dC5fYztlJiYodC5fYz12b2lkIDAsZSgpKX0seT1mdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dC5fb30sbT1mdW5jdGlvbih0KXt5KHQpfHwodC5fbz12b2lkIDAsdih0KSl9LGc9ZnVuY3Rpb24odCxlKXt1KHQpLHRoaXMuX2M9dm9pZCAwLHRoaXMuX289dCx0PW5ldyB3KHRoaXMpO3RyeXt2YXIgcj1lKHQpLG49cjtudWxsIT1yJiYoXCJmdW5jdGlvblwiPT10eXBlb2Ygci51bnN1YnNjcmliZT9yPWZ1bmN0aW9uKCl7bi51bnN1YnNjcmliZSgpfTpzKHIpLHRoaXMuX2M9cil9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgdC5lcnJvcihlKX15KHRoaXMpJiZ2KHRoaXMpfTtnLnByb3RvdHlwZT1jKHt9LHt1bnN1YnNjcmliZTpmdW5jdGlvbigpe20odGhpcyl9fSk7dmFyIHc9ZnVuY3Rpb24odCl7dGhpcy5fcz10fTt3LnByb3RvdHlwZT1jKHt9LHtuZXh0OmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoIXkoZSkpe3ZhciByPWUuX287dHJ5e3ZhciBuPWIoci5uZXh0KTtpZihuKXJldHVybiBuLmNhbGwocix0KX1jYXRjaCh0KXt0cnl7bShlKX1maW5hbGx5e3Rocm93IHR9fX19LGVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoeShlKSl0aHJvdyB0O3ZhciByPWUuX287ZS5fbz12b2lkIDA7dHJ5e3ZhciBuPWIoci5lcnJvcik7aWYoIW4pdGhyb3cgdDt0PW4uY2FsbChyLHQpfWNhdGNoKHQpe3RyeXt2KGUpfWZpbmFsbHl7dGhyb3cgdH19cmV0dXJuIHYoZSksdH0sY29tcGxldGU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcztpZigheShlKSl7dmFyIHI9ZS5fbztlLl9vPXZvaWQgMDt0cnl7dmFyIG49YihyLmNvbXBsZXRlKTt0PW4/bi5jYWxsKHIsdCk6dm9pZCAwfWNhdGNoKHQpe3RyeXt2KGUpfWZpbmFsbHl7dGhyb3cgdH19cmV0dXJuIHYoZSksdH19fSk7dmFyIF89ZnVuY3Rpb24odCl7aCh0aGlzLF8sXCJPYnNlcnZhYmxlXCIsXCJfZlwiKS5fZj1zKHQpfTtjKF8ucHJvdG90eXBlLHtzdWJzY3JpYmU6ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQsdGhpcy5fZil9LGZvckVhY2g6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztyZXR1cm4gbmV3KG8uUHJvbWlzZXx8aS5Qcm9taXNlKShmdW5jdGlvbihyLG4pe3ModCk7dmFyIGk9ZS5zdWJzY3JpYmUoe25leHQ6ZnVuY3Rpb24oZSl7dHJ5e3JldHVybiB0KGUpfWNhdGNoKHQpe24odCksaS51bnN1YnNjcmliZSgpfX0sZXJyb3I6bixjb21wbGV0ZTpyfSl9KX19KSxjKF8se2Zyb206ZnVuY3Rpb24odCl7dmFyIGU9XCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOl8scj1iKHUodClbZl0pO2lmKHIpe3ZhciBuPXUoci5jYWxsKHQpKTtyZXR1cm4gbi5jb25zdHJ1Y3Rvcj09PWU/bjpuZXcgZShmdW5jdGlvbih0KXtyZXR1cm4gbi5zdWJzY3JpYmUodCl9KX1yZXR1cm4gbmV3IGUoZnVuY3Rpb24oZSl7dmFyIHI9ITE7cmV0dXJuIGEoZnVuY3Rpb24oKXtpZighcil7dHJ5e2lmKGwodCwhMSxmdW5jdGlvbih0KXtpZihlLm5leHQodCkscilyZXR1cm4gcH0pPT09cClyZXR1cm59Y2F0Y2godCl7aWYocil0aHJvdyB0O3JldHVybiB2b2lkIGUuZXJyb3IodCl9ZS5jb21wbGV0ZSgpfX0pLGZ1bmN0aW9uKCl7cj0hMH19KX0sb2Y6ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj1BcnJheShlKTt0PGU7KXJbdF09YXJndW1lbnRzW3QrK107cmV0dXJuIG5ldyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6XykoZnVuY3Rpb24odCl7dmFyIGU9ITE7cmV0dXJuIGEoZnVuY3Rpb24oKXtpZighZSl7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDsrK24paWYodC5uZXh0KHJbbl0pLGUpcmV0dXJuO3QuY29tcGxldGUoKX19KSxmdW5jdGlvbigpe2U9ITB9fSl9fSksZChfLnByb3RvdHlwZSxmLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KSxuKG4uRyx7T2JzZXJ2YWJsZTpffSkscig0NikoXCJPYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5rZXksYT1uLnNldDtuLmV4cCh7ZGVmaW5lTWV0YWRhdGE6ZnVuY3Rpb24odCxlLHIsbil7YSh0LGUsaShyKSxvKG4pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5LGE9bi5tYXAsZj1uLnN0b3JlO24uZXhwKHtkZWxldGVNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6byhhcmd1bWVudHNbMl0pLG49YShpKGUpLHIsITEpO2lmKHZvaWQgMD09PW58fCFuLmRlbGV0ZSh0KSlyZXR1cm4hMTtpZihuLnNpemUpcmV0dXJuITA7dmFyIHM9Zi5nZXQoZSk7cmV0dXJuIHMuZGVsZXRlKHIpLCEhcy5zaXplfHxmLmRlbGV0ZShlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTkyKSxpPXIoMTY4KSxvPXIoMzQpLGE9cigzKSxmPXIoMjEpLHM9by5rZXlzLHU9by5rZXksaD1mdW5jdGlvbih0LGUpe3ZhciByPXModCxlKSxvPWYodCk7aWYobnVsbD09PW8pcmV0dXJuIHI7dmFyIGE9aChvLGUpO3JldHVybiBhLmxlbmd0aD9yLmxlbmd0aD9pKG5ldyBuKHIuY29uY2F0KGEpKSk6YTpyfTtvLmV4cCh7Z2V0TWV0YWRhdGFLZXlzOmZ1bmN0aW9uKHQpe3JldHVybiBoKGEodCksYXJndW1lbnRzLmxlbmd0aDwyP3ZvaWQgMDp1KGFyZ3VtZW50c1sxXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89cigyMSksYT1uLmhhcyxmPW4uZ2V0LHM9bi5rZXksdT1mdW5jdGlvbih0LGUscil7dmFyIG49YSh0LGUscik7aWYobilyZXR1cm4gZih0LGUscik7dmFyIGk9byhlKTtyZXR1cm4gbnVsbCE9PWk/dSh0LGkscik6dm9pZCAwfTtuLmV4cCh7Z2V0TWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gdSh0LGkoZSksYXJndW1lbnRzLmxlbmd0aDwzP3ZvaWQgMDpzKGFyZ3VtZW50c1syXSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzNCksaT1yKDMpLG89bi5rZXlzLGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gbyhpKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6YShhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4uZ2V0LGE9bi5rZXk7bi5leHAoe2dldE93bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMjEpLGE9bi5oYXMsZj1uLmtleSxzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1hKHQsZSxyKTtpZihuKXJldHVybiEwO3ZhciBpPW8oZSk7cmV0dXJuIG51bGwhPT1pJiZzKHQsaSxyKX07bi5leHAoe2hhc01ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHModCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6Zihhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4uaGFzLGE9bi5rZXk7bi5leHAoe2hhc093bk1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIG8odCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6YShhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMTMpLGE9bi5rZXksZj1uLnNldDtuLmV4cCh7bWV0YWRhdGE6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZnVuY3Rpb24ocixuKXtmKHQsZSwodm9pZCAwIT09bj9pOm8pKHIpLGEobikpfX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlArbi5SLFwiU2V0XCIse3RvSlNPTjpyKDE3MikoXCJTZXRcIil9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNSkoITApO24obi5QLFwiU3RyaW5nXCIse2F0OmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNCksbz1yKDEwKSxhPXIoODMpLGY9cig4MSkscz1SZWdFeHAucHJvdG90eXBlLHU9ZnVuY3Rpb24odCxlKXt0aGlzLl9yPXQsdGhpcy5fcz1lfTtyKDEyNykodSxcIlJlZ0V4cCBTdHJpbmdcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3IuZXhlYyh0aGlzLl9zKTtyZXR1cm57dmFsdWU6dCxkb25lOm51bGw9PT10fX0pLG4obi5QLFwiU3RyaW5nXCIse21hdGNoQWxsOmZ1bmN0aW9uKHQpe2lmKGkodGhpcyksIWEodCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgcmVnZXhwIVwiKTt2YXIgZT1TdHJpbmcodGhpcykscj1cImZsYWdzXCJpbiBzP1N0cmluZyh0LmZsYWdzKTpmLmNhbGwodCksbj1uZXcgUmVnRXhwKHQuc291cmNlLH5yLmluZGV4T2YoXCJnXCIpP3I6XCJnXCIrcik7cmV0dXJuIG4ubGFzdEluZGV4PW8odC5sYXN0SW5kZXgpLG5ldyB1KG4sZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxODgpO24obi5QLFwiU3RyaW5nXCIse3BhZEVuZDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITEpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTg4KTtuKG4uUCxcIlN0cmluZ1wiLHtwYWRTdGFydDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cig1OCkoXCJ0cmltTGVmdFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMSl9fSxcInRyaW1TdGFydFwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbVJpZ2h0XCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcywyKX19LFwidHJpbUVuZFwiKX0sZnVuY3Rpb24odCxlLHIpe3IoMTQxKShcImFzeW5jSXRlcmF0b3JcIil9LGZ1bmN0aW9uKHQsZSxyKXtyKDE0MSkoXCJvYnNlcnZhYmxlXCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIlN5c3RlbVwiLHtnbG9iYWw6cig0KX0pfSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXIoMTQzKSxpPXIoMTUpLG89cig0KSxhPXIoMTQpLGY9cig1Nikscz1yKDcpLHU9cyhcIml0ZXJhdG9yXCIpLGg9cyhcInRvU3RyaW5nVGFnXCIpLGM9Zi5BcnJheSxkPVtcIk5vZGVMaXN0XCIsXCJET01Ub2tlbkxpc3RcIixcIk1lZGlhTGlzdFwiLFwiU3R5bGVTaGVldExpc3RcIixcIkNTU1J1bGVMaXN0XCJdLGw9MDtsPDU7bCsrKXt2YXIgcCxiPWRbbF0sdj1vW2JdLHk9diYmdi5wcm90b3R5cGU7aWYoeSl7eVt1XXx8YSh5LHUsYykseVtoXXx8YSh5LGgsYiksZltiXT1jO2ZvcihwIGluIG4peVtwXXx8aSh5LHAsbltwXSwhMCl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzOSk7bihuLkcrbi5CLHtzZXRJbW1lZGlhdGU6aS5zZXQsY2xlYXJJbW1lZGlhdGU6aS5jbGVhcn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMCksbz1yKDgyKSxhPXIoMjg3KSxmPW4ubmF2aWdhdG9yLHM9ISFmJiYvTVNJRSAuXFwuLy50ZXN0KGYudXNlckFnZW50KSx1PWZ1bmN0aW9uKHQpe3JldHVybiBzP2Z1bmN0aW9uKGUscil7cmV0dXJuIHQobyhhLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDIpLFwiZnVuY3Rpb25cIj09dHlwZW9mIGU/ZTpGdW5jdGlvbihlKSkscil9OnR9O2koaS5HK2kuQitpLkYqcyx7c2V0VGltZW91dDp1KG4uc2V0VGltZW91dCksc2V0SW50ZXJ2YWw6dShuLnNldEludGVydmFsKX0pfSxmdW5jdGlvbih0LGUscil7cig0MTApLHIoMzQ5KSxyKDM1MSkscigzNTApLHIoMzUzKSxyKDM1NSkscigzNjApLHIoMzU0KSxyKDM1MikscigzNjIpLHIoMzYxKSxyKDM1NykscigzNTgpLHIoMzU2KSxyKDM0OCkscigzNTkpLHIoMzYzKSxyKDM2NCkscigzMTYpLHIoMzE4KSxyKDMxNykscigzNjYpLHIoMzY1KSxyKDMzNikscigzNDYpLHIoMzQ3KSxyKDMzNykscigzMzgpLHIoMzM5KSxyKDM0MCkscigzNDEpLHIoMzQyKSxyKDM0MykscigzNDQpLHIoMzQ1KSxyKDMxOSkscigzMjApLHIoMzIxKSxyKDMyMikscigzMjMpLHIoMzI0KSxyKDMyNSkscigzMjYpLHIoMzI3KSxyKDMyOCkscigzMjkpLHIoMzMwKSxyKDMzMSkscigzMzIpLHIoMzMzKSxyKDMzNCkscigzMzUpLHIoMzk3KSxyKDQwMikscig0MDkpLHIoNDAwKSxyKDM5MikscigzOTMpLHIoMzk4KSxyKDQwMykscig0MDUpLHIoMzg4KSxyKDM4OSkscigzOTApLHIoMzkxKSxyKDM5NCkscigzOTUpLHIoMzk2KSxyKDM5OSkscig0MDEpLHIoNDA0KSxyKDQwNikscig0MDcpLHIoNDA4KSxyKDMxMSkscigzMTMpLHIoMzEyKSxyKDMxNSkscigzMTQpLHIoMzAwKSxyKDI5OCkscigzMDQpLHIoMzAxKSxyKDMwNykscigzMDkpLHIoMjk3KSxyKDMwMykscigyOTQpLHIoMzA4KSxyKDI5MikscigzMDYpLHIoMzA1KSxyKDI5OSkscigzMDIpLHIoMjkxKSxyKDI5MykscigyOTYpLHIoMjk1KSxyKDMxMCkscigxNDMpLHIoMzgyKSxyKDM4NykscigxOTEpLHIoMzgzKSxyKDM4NCkscigzODUpLHIoMzg2KSxyKDM2NykscigxOTApLHIoMTkyKSxyKDE5Mykscig0MjIpLHIoNDExKSxyKDQxMikscig0MTcpLHIoNDIwKSxyKDQyMSkscig0MTUpLHIoNDE4KSxyKDQxNikscig0MTkpLHIoNDEzKSxyKDQxNCkscigzNjgpLHIoMzY5KSxyKDM3MCkscigzNzEpLHIoMzcyKSxyKDM3NSkscigzNzMpLHIoMzc0KSxyKDM3NikscigzNzcpLHIoMzc4KSxyKDM3OSkscigzODEpLHIoMzgwKSxyKDQyMykscig0NDkpLHIoNDUyKSxyKDQ1MSkscig0NTMpLHIoNDU0KSxyKDQ1MCkscig0NTUpLHIoNDU2KSxyKDQzNCkscig0MzcpLHIoNDMzKSxyKDQzMSkscig0MzIpLHIoNDM1KSxyKDQzNikscig0MjYpLHIoNDQ4KSxyKDQ1Nykscig0MjUpLHIoNDI3KSxyKDQyOSkscig0MjgpLHIoNDMwKSxyKDQzOSkscig0NDApLHIoNDQyKSxyKDQ0MSkscig0NDQpLHIoNDQzKSxyKDQ0NSkscig0NDYpLHIoNDQ3KSxyKDQyNCkscig0MzgpLHIoNDYwKSxyKDQ1OSkscig0NTgpLHQuZXhwb3J0cz1yKDMyKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQ2MykoXCJlZDI1NTE5XCIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gbyh0KXtcInN0cmluZ1wiPT10eXBlb2YgdD90PXtiaW5kaW5nczp0fTp0fHwodD17fSksdC5fX3Byb3RvX189Yyx0Lm1vZHVsZV9yb290fHwodC5tb2R1bGVfcm9vdD1lLmdldFJvb3QoZS5nZXRGaWxlTmFtZSgpKSksXCIubm9kZVwiIT1mLmV4dG5hbWUodC5iaW5kaW5ncykmJih0LmJpbmRpbmdzKz1cIi5ub2RlXCIpO2Zvcih2YXIgcixuLGksbz1bXSxhPTAsdT10LnRyeS5sZW5ndGg7YTx1O2ErKyl7cj1zLmFwcGx5KG51bGwsdC50cnlbYV0ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfHxlfSkpLG8ucHVzaChyKTt0cnl7cmV0dXJuIG49dC5wYXRoPyFmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwiLlwiJyk7dGhyb3cgdC5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLHR9KCk6IWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IEVycm9yKCdDYW5ub3QgZmluZCBtb2R1bGUgXCIuXCInKTt0aHJvdyB0LmNvZGU9XCJNT0RVTEVfTk9UX0ZPVU5EXCIsdH0oKSx0LnBhdGh8fChuLnBhdGg9ciksbn1jYXRjaCh0KXtpZighL25vdCBmaW5kL2kudGVzdCh0Lm1lc3NhZ2UpKXRocm93IHR9fXRocm93IGk9bmV3IEVycm9yKFwiQ291bGQgbm90IGxvY2F0ZSB0aGUgYmluZGluZ3MgZmlsZS4gVHJpZWQ6XFxuXCIrby5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXJyb3crZX0pLmpvaW4oXCJcXG5cIikpLGkudHJpZXM9byxpfXZhciBhPXIoNDg5KSxmPXIoNTk0KSxzPWYuam9pbix1PWYuZGlybmFtZSxoPWEuZXhpc3RzU3luY3x8Zi5leGlzdHNTeW5jLGM9e2Fycm93Om4uZW52Lk5PREVfQklORElOR1NfQVJST1d8fFwiIOKGkiBcIixjb21waWxlZDpuLmVudi5OT0RFX0JJTkRJTkdTX0NPTVBJTEVEX0RJUnx8XCJjb21waWxlZFwiLHBsYXRmb3JtOm4ucGxhdGZvcm0sYXJjaDpuLmFyY2gsdmVyc2lvbjpuLnZlcnNpb25zLm5vZGUsYmluZGluZ3M6XCJiaW5kaW5ncy5ub2RlXCIsdHJ5OltbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiUmVsZWFzZVwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIm91dFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJEZWJ1Z1wiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIm91dFwiLFwiUmVsZWFzZVwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJidWlsZFwiLFwiZGVmYXVsdFwiLFwiYmluZGluZ3NcIl0sW1wibW9kdWxlX3Jvb3RcIixcImNvbXBpbGVkXCIsXCJ2ZXJzaW9uXCIsXCJwbGF0Zm9ybVwiLFwiYXJjaFwiLFwiYmluZGluZ3NcIl1dfTt0LmV4cG9ydHM9ZT1vLGUuZ2V0RmlsZU5hbWU9ZnVuY3Rpb24odCl7dmFyIGUscj1FcnJvci5wcmVwYXJlU3RhY2tUcmFjZSxuPUVycm9yLnN0YWNrVHJhY2VMaW1pdCxvPXt9O3JldHVybiBFcnJvci5zdGFja1RyYWNlTGltaXQ9MTAsRXJyb3IucHJlcGFyZVN0YWNrVHJhY2U9ZnVuY3Rpb24ocixuKXtmb3IodmFyIG89MCxhPW4ubGVuZ3RoO288YTtvKyspaWYoZT1uW29dLmdldEZpbGVOYW1lKCksZSE9PWkpe2lmKCF0KXJldHVybjtpZihlIT09dClyZXR1cm59fSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZShvKSxvLnN0YWNrLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPXIsRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PW4sZX0sZS5nZXRSb290PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyPXUodCk7Oyl7aWYoXCIuXCI9PT1yJiYocj1uLmN3ZCgpKSxoKHMocixcInBhY2thZ2UuanNvblwiKSl8fGgocyhyLFwibm9kZV9tb2R1bGVzXCIpKSlyZXR1cm4gcjtpZihlPT09cil0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBmaW5kIG1vZHVsZSByb290IGdpdmVuIGZpbGU6IFwiJyt0KydcIi4gRG8geW91IGhhdmUgYSBgcGFja2FnZS5qc29uYCBmaWxlPyAnKTtlPXIscj1zKHIsXCIuLlwiKX19fSkuY2FsbChlLHIoMjYpLFwiL2luZGV4LmpzXCIpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17T19SRE9OTFk6MCxPX1dST05MWToxLE9fUkRXUjoyLFNfSUZNVDo2MTQ0MCxTX0lGUkVHOjMyNzY4LFNfSUZESVI6MTYzODQsU19JRkNIUjo4MTkyLFNfSUZCTEs6MjQ1NzYsU19JRklGTzo0MDk2LFNfSUZMTks6NDA5NjAsU19JRlNPQ0s6NDkxNTIsT19DUkVBVDo1MTIsT19FWENMOjIwNDgsT19OT0NUVFk6MTMxMDcyLE9fVFJVTkM6MTAyNCxPX0FQUEVORDo4LE9fRElSRUNUT1JZOjEwNDg1NzYsT19OT0ZPTExPVzoyNTYsT19TWU5DOjEyOCxPX1NZTUxJTks6MjA5NzE1MixPX05PTkJMT0NLOjQsU19JUldYVTo0NDgsU19JUlVTUjoyNTYsU19JV1VTUjoxMjgsU19JWFVTUjo2NCxTX0lSV1hHOjU2LFNfSVJHUlA6MzIsU19JV0dSUDoxNixTX0lYR1JQOjgsU19JUldYTzo3LFNfSVJPVEg6NCxTX0lXT1RIOjIsU19JWE9USDoxLEUyQklHOjcsRUFDQ0VTOjEzLEVBRERSSU5VU0U6NDgsRUFERFJOT1RBVkFJTDo0OSxFQUZOT1NVUFBPUlQ6NDcsRUFHQUlOOjM1LEVBTFJFQURZOjM3LEVCQURGOjksRUJBRE1TRzo5NCxFQlVTWToxNixFQ0FOQ0VMRUQ6ODksRUNISUxEOjEwLEVDT05OQUJPUlRFRDo1MyxFQ09OTlJFRlVTRUQ6NjEsRUNPTk5SRVNFVDo1NCxFREVBRExLOjExLEVERVNUQUREUlJFUTozOSxFRE9NOjMzLEVEUVVPVDo2OSxFRVhJU1Q6MTcsRUZBVUxUOjE0LEVGQklHOjI3LEVIT1NUVU5SRUFDSDo2NSxFSURSTTo5MCxFSUxTRVE6OTIsRUlOUFJPR1JFU1M6MzYsRUlOVFI6NCxFSU5WQUw6MjIsRUlPOjUsRUlTQ09OTjo1NixFSVNESVI6MjEsRUxPT1A6NjIsRU1GSUxFOjI0LEVNTElOSzozMSxFTVNHU0laRTo0MCxFTVVMVElIT1A6OTUsRU5BTUVUT09MT05HOjYzLEVORVRET1dOOjUwLEVORVRSRVNFVDo1MixFTkVUVU5SRUFDSDo1MSxFTkZJTEU6MjMsRU5PQlVGUzo1NSxFTk9EQVRBOjk2LEVOT0RFVjoxOSxFTk9FTlQ6MixFTk9FWEVDOjgsRU5PTENLOjc3LEVOT0xJTks6OTcsRU5PTUVNOjEyLEVOT01TRzo5MSxFTk9QUk9UT09QVDo0MixFTk9TUEM6MjgsRU5PU1I6OTgsRU5PU1RSOjk5LEVOT1NZUzo3OCxFTk9UQ09OTjo1NyxFTk9URElSOjIwLEVOT1RFTVBUWTo2NixFTk9UU09DSzozOCxFTk9UU1VQOjQ1LEVOT1RUWToyNSxFTlhJTzo2LEVPUE5PVFNVUFA6MTAyLEVPVkVSRkxPVzo4NCxFUEVSTToxLEVQSVBFOjMyLEVQUk9UTzoxMDAsRVBST1RPTk9TVVBQT1JUOjQzLEVQUk9UT1RZUEU6NDEsRVJBTkdFOjM0LEVST0ZTOjMwLEVTUElQRToyOSxFU1JDSDozLEVTVEFMRTo3MCxFVElNRToxMDEsRVRJTUVET1VUOjYwLEVUWFRCU1k6MjYsRVdPVUxEQkxPQ0s6MzUsRVhERVY6MTgsU0lHSFVQOjEsU0lHSU5UOjIsU0lHUVVJVDozLFNJR0lMTDo0LFNJR1RSQVA6NSxTSUdBQlJUOjYsU0lHSU9UOjYsU0lHQlVTOjEwLFNJR0ZQRTo4LFNJR0tJTEw6OSxTSUdVU1IxOjMwLFNJR1NFR1Y6MTEsU0lHVVNSMjozMSxTSUdQSVBFOjEzLFNJR0FMUk06MTQsU0lHVEVSTToxNSxTSUdDSExEOjIwLFNJR0NPTlQ6MTksU0lHU1RPUDoxNyxTSUdUU1RQOjE4LFNJR1RUSU46MjEsU0lHVFRPVToyMixTSUdVUkc6MTYsU0lHWENQVToyNCxTSUdYRlNaOjI1LFNJR1ZUQUxSTToyNixTSUdQUk9GOjI3LFNJR1dJTkNIOjI4LFNJR0lPOjIzLFNJR1NZUzoxMixTU0xfT1BfQUxMOjIxNDc0ODY3MTksU1NMX09QX0FMTE9XX1VOU0FGRV9MRUdBQ1lfUkVORUdPVElBVElPTjoyNjIxNDQsU1NMX09QX0NJUEhFUl9TRVJWRVJfUFJFRkVSRU5DRTo0MTk0MzA0LFNTTF9PUF9DSVNDT19BTllDT05ORUNUOjMyNzY4LFNTTF9PUF9DT09LSUVfRVhDSEFOR0U6ODE5MixTU0xfT1BfQ1JZUFRPUFJPX1RMU0VYVF9CVUc6MjE0NzQ4MzY0OCxTU0xfT1BfRE9OVF9JTlNFUlRfRU1QVFlfRlJBR01FTlRTOjIwNDgsU1NMX09QX0VQSEVNRVJBTF9SU0E6MCxTU0xfT1BfTEVHQUNZX1NFUlZFUl9DT05ORUNUOjQsU1NMX09QX01JQ1JPU09GVF9CSUdfU1NMVjNfQlVGRkVSOjMyLFNTTF9PUF9NSUNST1NPRlRfU0VTU19JRF9CVUc6MSxTU0xfT1BfTVNJRV9TU0xWMl9SU0FfUEFERElORzowLFNTTF9PUF9ORVRTQ0FQRV9DQV9ETl9CVUc6NTM2ODcwOTEyLFNTTF9PUF9ORVRTQ0FQRV9DSEFMTEVOR0VfQlVHOjIsU1NMX09QX05FVFNDQVBFX0RFTU9fQ0lQSEVSX0NIQU5HRV9CVUc6MTA3Mzc0MTgyNCxTU0xfT1BfTkVUU0NBUEVfUkVVU0VfQ0lQSEVSX0NIQU5HRV9CVUc6OCxTU0xfT1BfTk9fQ09NUFJFU1NJT046MTMxMDcyLFNTTF9PUF9OT19RVUVSWV9NVFU6NDA5NixTU0xfT1BfTk9fU0VTU0lPTl9SRVNVTVBUSU9OX09OX1JFTkVHT1RJQVRJT046NjU1MzYsU1NMX09QX05PX1NTTHYyOjE2Nzc3MjE2LFNTTF9PUF9OT19TU0x2MzozMzU1NDQzMixTU0xfT1BfTk9fVElDS0VUOjE2Mzg0LFNTTF9PUF9OT19UTFN2MTo2NzEwODg2NCxTU0xfT1BfTk9fVExTdjFfMToyNjg0MzU0NTYsU1NMX09QX05PX1RMU3YxXzI6MTM0MjE3NzI4LFNTTF9PUF9QS0NTMV9DSEVDS18xOjAsU1NMX09QX1BLQ1MxX0NIRUNLXzI6MCxTU0xfT1BfU0lOR0xFX0RIX1VTRToxMDQ4NTc2LFNTTF9PUF9TSU5HTEVfRUNESF9VU0U6NTI0Mjg4LFNTTF9PUF9TU0xFQVlfMDgwX0NMSUVOVF9ESF9CVUc6MTI4LFNTTF9PUF9TU0xSRUYyX1JFVVNFX0NFUlRfVFlQRV9CVUc6MCxTU0xfT1BfVExTX0JMT0NLX1BBRERJTkdfQlVHOjUxMixTU0xfT1BfVExTX0Q1X0JVRzoyNTYsU1NMX09QX1RMU19ST0xMQkFDS19CVUc6ODM4ODYwOCxFTkdJTkVfTUVUSE9EX0RTQToyLEVOR0lORV9NRVRIT0RfREg6NCxFTkdJTkVfTUVUSE9EX1JBTkQ6OCxFTkdJTkVfTUVUSE9EX0VDREg6MTYsRU5HSU5FX01FVEhPRF9FQ0RTQTozMixFTkdJTkVfTUVUSE9EX0NJUEhFUlM6NjQsRU5HSU5FX01FVEhPRF9ESUdFU1RTOjEyOCxFTkdJTkVfTUVUSE9EX1NUT1JFOjI1NixFTkdJTkVfTUVUSE9EX1BLRVlfTUVUSFM6NTEyLEVOR0lORV9NRVRIT0RfUEtFWV9BU04xX01FVEhTOjEwMjQsRU5HSU5FX01FVEhPRF9BTEw6NjU1MzUsRU5HSU5FX01FVEhPRF9OT05FOjAsREhfQ0hFQ0tfUF9OT1RfU0FGRV9QUklNRToyLERIX0NIRUNLX1BfTk9UX1BSSU1FOjEsREhfVU5BQkxFX1RPX0NIRUNLX0dFTkVSQVRPUjo0LERIX05PVF9TVUlUQUJMRV9HRU5FUkFUT1I6OCxOUE5fRU5BQkxFRDoxLFJTQV9QS0NTMV9QQURESU5HOjEsUlNBX1NTTFYyM19QQURESU5HOjIsUlNBX05PX1BBRERJTkc6MyxSU0FfUEtDUzFfT0FFUF9QQURESU5HOjQsUlNBX1g5MzFfUEFERElORzo1LFJTQV9QS0NTMV9QU1NfUEFERElORzo2LFBPSU5UX0NPTlZFUlNJT05fQ09NUFJFU1NFRDoyLFBPSU5UX0NPTlZFUlNJT05fVU5DT01QUkVTU0VEOjQsUE9JTlRfQ09OVkVSU0lPTl9IWUJSSUQ6NixGX09LOjAsUl9PSzo0LFdfT0s6MixYX09LOjEsVVZfVURQX1JFVVNFQUREUjo0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25hbWU6XCJlbGxpcHRpY1wiLHZlcnNpb246XCI2LjMuMlwiLGRlc2NyaXB0aW9uOlwiRUMgY3J5cHRvZ3JhcGh5XCIsbWFpbjpcImxpYi9lbGxpcHRpYy5qc1wiLGZpbGVzOltcImxpYlwiXSxzY3JpcHRzOntqc2NzOlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGpzaGludDpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixsaW50OlwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsdW5pdDpcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzXCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHJlcG9zaXRvcnk6e3R5cGU6XCJnaXRcIix1cmw6XCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIn0sa2V5d29yZHM6W1wiRUNcIixcIkVsbGlwdGljXCIsXCJjdXJ2ZVwiLFwiQ3J5cHRvZ3JhcGh5XCJdLGF1dGhvcjp7bmFtZTpcIkZlZG9yIEluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGxpY2Vuc2U6XCJNSVRcIixidWdzOnt1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIn0saG9tZXBhZ2U6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpY1wiLGRldkRlcGVuZGVuY2llczp7YnJmczpcIl4xLjQuM1wiLGNvdmVyYWxsczpcIl4yLjExLjNcIixncnVudDpcIl4wLjQuNVwiLFwiZ3J1bnQtYnJvd3NlcmlmeVwiOlwiXjUuMC4wXCIsXCJncnVudC1jb250cmliLWNvbm5lY3RcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6XCJeMS4wLjFcIixcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6XCJeMy4wLjFcIixcImdydW50LXNhdWNlbGFic1wiOlwiXjguNi4yXCIsaXN0YW5idWw6XCJeMC40LjJcIixqc2NzOlwiXjIuOS4wXCIsanNoaW50OlwiXjIuNi4wXCIsbW9jaGE6XCJeMi4xLjBcIn0sZGVwZW5kZW5jaWVzOntcImJuLmpzXCI6XCJeNC40LjBcIixicm9yYW5kOlwiXjEuMC4xXCIsXCJoYXNoLmpzXCI6XCJeMS4wLjBcIixpbmhlcml0czpcIl4yLjAuMVwifSxnaXRIZWFkOlwiY2JhY2U0NjgzYTRhNTQ4ZGMwMzA2ZWYzNjc1NjE1MWEyMDI5OWNkNVwiLF9pZDpcImVsbGlwdGljQDYuMy4yXCIsX3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIixfZnJvbTpcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsX25wbVZlcnNpb246XCIzLjEwLjNcIixfbm9kZVZlcnNpb246XCI2LjMuMFwiLF9ucG1Vc2VyOntuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sZGlzdDp7c2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLHRhcmJhbGw6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifSxtYWludGFpbmVyczpbe25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifV0sX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6XCJwYWNrYWdlcy0xNi1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLHRtcDpcInRtcC9lbGxpcHRpYy02LjMuMi50Z3pfMTQ3MzkzODgzNzIwNV8wLjMxMDg5MDM0NjI5OTg1NjlcIn0sZGlyZWN0b3JpZXM6e30sX3Jlc29sdmVkOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjFcIjpcImFlcy0xMjgtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yXCI6XCJhZXMtMTI4LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuM1wiOlwiYWVzLTEyOC1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjRcIjpcImFlcy0xMjgtY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMVwiOlwiYWVzLTE5Mi1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIyXCI6XCJhZXMtMTkyLWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjNcIjpcImFlcy0xOTItb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yNFwiOlwiYWVzLTE5Mi1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQxXCI6XCJhZXMtMjU2LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDJcIjpcImFlcy0yNTYtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40M1wiOlwiYWVzLTI1Ni1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQ0XCI6XCJhZXMtMjU2LWNmYlwifX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e25hbWU6XCJlbGxpcHRpY1wiLHZlcnNpb246XCI2LjMuMlwiLGRlc2NyaXB0aW9uOlwiRUMgY3J5cHRvZ3JhcGh5XCIsbWFpbjpcImxpYi9lbGxpcHRpYy5qc1wiLGZpbGVzOltcImxpYlwiXSxzY3JpcHRzOntqc2NzOlwianNjcyBiZW5jaG1hcmtzLyouanMgbGliLyouanMgbGliLyoqLyouanMgbGliLyoqLyoqLyouanMgdGVzdC9pbmRleC5qc1wiLGpzaGludDpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixsaW50OlwibnBtIHJ1biBqc2NzICYmIG5wbSBydW4ganNoaW50XCIsdW5pdDpcImlzdGFuYnVsIHRlc3QgX21vY2hhIC0tcmVwb3J0ZXI9c3BlYyB0ZXN0L2luZGV4LmpzXCIsdGVzdDpcIm5wbSBydW4gbGludCAmJiBucG0gcnVuIHVuaXRcIix2ZXJzaW9uOlwiZ3J1bnQgZGlzdCAmJiBnaXQgYWRkIGRpc3QvXCJ9LHJlcG9zaXRvcnk6e3R5cGU6XCJnaXRcIix1cmw6XCJnaXQrc3NoOi8vZ2l0QGdpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy5naXRcIn0sa2V5d29yZHM6W1wiRUNcIixcIkVsbGlwdGljXCIsXCJjdXJ2ZVwiLFwiQ3J5cHRvZ3JhcGh5XCJdLGF1dGhvcjp7bmFtZTpcIkZlZG9yIEluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGxpY2Vuc2U6XCJNSVRcIixidWdzOnt1cmw6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpYy9pc3N1ZXNcIn0saG9tZXBhZ2U6XCJodHRwczovL2dpdGh1Yi5jb20vaW5kdXRueS9lbGxpcHRpY1wiLGRldkRlcGVuZGVuY2llczp7YnJmczpcIl4xLjQuM1wiLGNvdmVyYWxsczpcIl4yLjExLjNcIixncnVudDpcIl4wLjQuNVwiLFwiZ3J1bnQtYnJvd3NlcmlmeVwiOlwiXjUuMC4wXCIsXCJncnVudC1jb250cmliLWNvbm5lY3RcIjpcIl4xLjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb3B5XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItdWdsaWZ5XCI6XCJeMS4wLjFcIixcImdydW50LW1vY2hhLWlzdGFuYnVsXCI6XCJeMy4wLjFcIixcImdydW50LXNhdWNlbGFic1wiOlwiXjguNi4yXCIsaXN0YW5idWw6XCJeMC40LjJcIixqc2NzOlwiXjIuOS4wXCIsanNoaW50OlwiXjIuNi4wXCIsbW9jaGE6XCJeMi4xLjBcIn0sZGVwZW5kZW5jaWVzOntcImJuLmpzXCI6XCJeNC40LjBcIixicm9yYW5kOlwiXjEuMC4xXCIsXCJoYXNoLmpzXCI6XCJeMS4wLjBcIixpbmhlcml0czpcIl4yLjAuMVwifSxnaXRIZWFkOlwiY2JhY2U0NjgzYTRhNTQ4ZGMwMzA2ZWYzNjc1NjE1MWEyMDI5OWNkNVwiLF9pZDpcImVsbGlwdGljQDYuMy4yXCIsX3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIixfZnJvbTpcImVsbGlwdGljQD49Ni4wLjAgPDcuMC4wXCIsX25wbVZlcnNpb246XCIzLjEwLjNcIixfbm9kZVZlcnNpb246XCI2LjMuMFwiLF9ucG1Vc2VyOntuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn0sZGlzdDp7c2hhc3VtOlwiZTRjODFlMDgyOWNmMGE2NWFiNzBlOTk4YjgyMzI3MjNiNWMxYmM0OFwiLHRhcmJhbGw6XCJodHRwczovL3JlZ2lzdHJ5Lm5wbWpzLm9yZy9lbGxpcHRpYy8tL2VsbGlwdGljLTYuMy4yLnRnelwifSxtYWludGFpbmVyczpbe25hbWU6XCJpbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifV0sX25wbU9wZXJhdGlvbmFsSW50ZXJuYWw6e2hvc3Q6XCJwYWNrYWdlcy0xNi1lYXN0LmludGVybmFsLm5wbWpzLmNvbVwiLHRtcDpcInRtcC9lbGxpcHRpYy02LjMuMi50Z3pfMTQ3MzkzODgzNzIwNV8wLjMxMDg5MDM0NjI5OTg1NjlcIn0sZGlyZWN0b3JpZXM6e30sX3Jlc29sdmVkOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXttb2RwMTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2M2EzNjIwZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMjp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U2NTM4MWZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDU6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTIzNzMyN2ZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE0OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFjYWE2OGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE1OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkzYWQyY2FmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNjp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDA2MzE5OWZmZmZmZmZmZmZmZmZmZmZcIlxufSxtb2RwMTc6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwMjg0OTIzNmMzZmFiNGQyN2M3MDI2YzFkNGRjYjI2MDI2NDZkZWM5NzUxZTc2M2RiYTM3YmRmOGZmOTQwNmFkOWU1MzBlZTVkYjM4MmY0MTMwMDFhZWIwNmE1M2VkOTAyN2Q4MzExNzk3MjdiMDg2NWE4OTE4ZGEzZWRiZWJjZjliMTRlZDQ0Y2U2Y2JhY2VkNGJiMWJkYjdmMTQ0N2U2Y2MyNTRiMzMyMDUxNTEyYmQ3YWY0MjZmYjhmNDAxMzc4Y2QyYmY1OTgzY2EwMWM2NGI5MmVjZjAzMmVhMTVkMTcyMWQwM2Y0ODJkN2NlNmU3NGZlZjZkNTVlNzAyZjQ2OTgwYzgyYjVhODQwMzE5MDBiMWM5ZTU5ZTdjOTdmYmVjN2U4ZjMyM2E5N2E3ZTM2Y2M4OGJlMGYxZDQ1YjdmZjU4NWFjNTRiZDQwN2IyMmI0MTU0YWFjYzhmNmQ3ZWJmNDhlMWQ4MTRjYzVlZDIwZjgwMzdlMGE3OTcxNWVlZjI5YmUzMjgwNmExZDU4YmI3YzVkYTc2ZjU1MGFhM2Q4YTFmYmZmMGViMTljY2IxYTMxM2Q1NWNkYTU2YzllYzJlZjI5NjMyMzg3ZmU4ZDc2ZTNjMDQ2ODA0M2U4ZjY2M2Y0ODYwZWUxMmJmMmQ1YjBiNzQ3NGQ2ZTY5NGY5MWU2ZGNjNDAyNGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDE4OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRiZTExNTk3NGEzOTI2ZjEyZmVlNWU0Mzg3NzdjYjZhOTMyZGY4Y2Q4YmVjNGQwNzNiOTMxYmEzYmM4MzJiNjhkOWRkMzAwNzQxZmE3YmY4YWZjNDdlZDI1NzZmNjkzNmJhNDI0NjYzYWFiNjM5YzVhZTRmNTY4MzQyM2I0NzQyYmYxYzk3ODIzOGYxNmNiZTM5ZDY1MmRlM2ZkYjhiZWZjODQ4YWQ5MjIyMjJlMDRhNDAzN2MwNzEzZWI1N2E4MWEyM2YwYzczNDczZmM2NDZjZWEzMDZiNGJjYmM4ODYyZjgzODVkZGZhOWQ0YjdmYTJjMDg3ZTg3OTY4MzMwM2VkNWJkZDNhMDYyYjNjZjViM2EyNzhhNjZkMmExM2Y4M2Y0NGY4MmRkZjMxMGVlMDc0YWI2YTM2NDU5N2U4OTlhMDI1NWRjMTY0ZjMxY2M1MDg0Njg1MWRmOWFiNDgxOTVkZWQ3ZWExYjFkNTEwYmQ3ZWU3NGQ3M2ZhZjM2YmMzMWVjZmEyNjgzNTkwNDZmNGViODc5ZjkyNDAwOTQzOGI0ODFjNmNkNzg4OWEwMDJlZDVlZTM4MmJjOTE5MGRhNmZjMDI2ZTQ3OTU1OGU0NDc1Njc3ZTlhYTllMzA1MGUyNzY1Njk0ZGZjODFmNTZlODgwYjk2ZTcxNjBjOTgwZGQ5OGVkZDNkZmZmZmZmZmZmZmZmZmZmZmZcIn19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6XCJhZXMtMTI4LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOlwiYWVzLTEyOC1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjpcImFlcy0xMjgtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6XCJhZXMtMTI4LWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjpcImFlcy0xOTItZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOlwiYWVzLTE5Mi1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6XCJhZXMtMTkyLW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjpcImFlcy0xOTItY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOlwiYWVzLTI1Ni1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6XCJhZXMtMjU2LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjpcImFlcy0yNTYtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOlwiYWVzLTI1Ni1jZmJcIn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoMTk1KSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcyxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDE5NSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxOTYpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpLHRoaXMuc2l6ZT0wfXJldHVybiBpKHQsW3trZXk6XCJ3cml0ZVVJbnRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2l6ZSs9ZX19LHtrZXk6XCJ3cml0ZVZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZihlLmlzQnVmZmVyKHQpKXJldHVybiB2b2lkIHRoaXMud3JpdGVWYXJPY3RldFN0cmluZyh0KTtpZighbyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIHBvc2l0aXZlXCIpO3ZhciByPU1hdGguY2VpbCh0LnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcoe2xlbmd0aDpyfSl9fSx7a2V5Olwid3JpdGVPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7dGhpcy5za2lwKGUpfX0se2tleTpcIndyaXRlVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLnNraXAoMSksdC5sZW5ndGg+MTI3KXt2YXIgZT1NYXRoLmNlaWwodC5sZW5ndGgudG9TdHJpbmcoMikubGVuZ3RoLzgpO3RoaXMuc2tpcChlKX10aGlzLnNraXAodC5sZW5ndGgpfX0se2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zaXplKz10Lmxlbmd0aH19LHtrZXk6XCJza2lwXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zaXplKz10fX0se2tleTpcImdldFNpemVcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnNpemV9fV0pLHR9KCk7WzEsMiw0LDhdLmZvckVhY2goZnVuY3Rpb24odCl7YS5wcm90b3R5cGVbXCJ3cml0ZVVJbnRcIis4KnRdPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLndyaXRlVUludChlLHQpfX0pLHQuZXhwb3J0cz1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig0NzEpLGE9cig0NzApLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSx0aGlzLmJ1ZmZlcj1lLHRoaXMuY3Vyc29yPTAsdGhpcy5ib29rbWFya3M9W119cmV0dXJuIGkodCxbe2tleTpcImJvb2ttYXJrXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrcy5wdXNoKHRoaXMuY3Vyc29yKX19LHtrZXk6XCJyZXN0b3JlXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmN1cnNvcj10aGlzLmJvb2ttYXJrcy5wb3AoKX19LHtrZXk6XCJlbnN1cmVBdmFpbGFibGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZih0aGlzLmJ1ZmZlci5sZW5ndGg8dGhpcy5jdXJzb3IrdCl0aHJvdyBuZXcgbyhcIlRyaWVkIHRvIHJlYWQgXCIrdCtcIiBieXRlcywgYnV0IG9ubHkgXCIrKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmN1cnNvcikrXCIgYnl0ZXMgYXZhaWxhYmxlXCIpfX0se2tleTpcInJlYWRVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5wZWVrVUludCh0KTtyZXR1cm4gdGhpcy5jdXJzb3IrPXQsZX19LHtrZXk6XCJwZWVrVUludFwiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKDA9PT1lKXJldHVybiAwO2lmKGU8MCl0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byByZWFkIGludGVnZXIgd2l0aCBuZWdhdGl2ZSBsZW5ndGggKHByb3ZpZGVkOiBcIitlK1wiKVwiKTtpZihlPnQuTUFYX0lOVF9CWVRFUyl0aHJvdyBuZXcgRXJyb3IoXCJUcmllZCB0byByZWFkIHRvbyBsYXJnZSBpbnRlZ2VyIChyZXF1ZXN0ZWQ6IFwiK2UrXCIsIG1heDogXCIrdC5NQVhfSU5UX0JZVEVTK1wiKVwiKTt0aGlzLmVuc3VyZUF2YWlsYWJsZShlKTt2YXIgcj10aGlzLmJ1ZmZlci5yZWFkVUludEJFKHRoaXMuY3Vyc29yLGUpO3JldHVybiByfX0se2tleTpcInNraXBVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt0aGlzLnJlYWRVSW50MzIoKSx0aGlzLnJlYWRVSW50MzIoKV19fSx7a2V5OlwicGVla1VJbnQ2NFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFVJbnQ2NCgpO3JldHVybiB0aGlzLnJlc3RvcmUoKSx0fX0se2tleTpcInNraXBVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc2tpcCg4KX19LHtrZXk6XCJyZWFkVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkVmFyT2N0ZXRTdHJpbmcoKTtpZihlLmxlbmd0aD50Lk1BWF9JTlRfQllURVMpdGhyb3cgbmV3IGEoXCJVSW50IG9mIGxlbmd0aCBcIitlLmxlbmd0aCtcIiB0b28gbGFyZ2UgdG8gcGFyc2UgYXMgaW50ZWdlciAobWF4OiBcIit0Lk1BWF9JTlRfQllURVMrXCIpXCIpO2lmKDA9PT1lLmxlbmd0aCl0aHJvdyBuZXcgYShcIlVJbnQgb2YgbGVuZ3RoIDAgaXMgaW52YWxpZFwiKTtyZXR1cm4gZS5yZWFkVUludEJFKDAsZS5sZW5ndGgpfX0se2tleTpcInBlZWtWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrKCk7dmFyIHQ9dGhpcy5yZWFkVmFyVUludCgpO3JldHVybiB0aGlzLnJlc3RvcmUoKSx0fX0se2tleTpcInNraXBWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXBWYXJPY3RldFN0cmluZygpfX0se2tleTpcInJlYWRPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlYWQodCl9fSx7a2V5OlwicGVla09jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucGVlayh0KX19LHtrZXk6XCJza2lwT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRMZW5ndGhQcmVmaXhcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFVJbnQ4KCk7aWYoZSZ0LkhJR0hfQklUKXt2YXIgcj1lJnQuTE9XRVJfU0VWRU5fQklUUyxuPXRoaXMucmVhZFVJbnQociksaT1NYXRoLm1heCgxMjgsMTw8OCooci0xKSk7aWYobjxpKXRocm93IG5ldyBhKFwiTGVuZ3RoIHByZWZpeCBlbmNvZGluZyBpcyBub3QgY2Fub25pY2FsOiBcIituK1wiIGVuY29kZWQgaW4gXCIrcitcIiBieXRlc1wiKTtyZXR1cm4gbn1yZXR1cm4gZX19LHtrZXk6XCJyZWFkVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiB0aGlzLnJlYWQodCl9fSx7a2V5OlwicGVla1Zhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmJvb2ttYXJrKCk7dmFyIHQ9dGhpcy5yZWFkVmFyT2N0ZXRTdHJpbmcoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PXRoaXMucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiB0aGlzLnNraXAodCl9fSx7a2V5OlwicmVhZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5zdXJlQXZhaWxhYmxlKHQpO3ZhciBlPXRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuY3Vyc29yLHRoaXMuY3Vyc29yK3QpO3JldHVybiB0aGlzLmN1cnNvcis9dCxlfX0se2tleTpcInBlZWtcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbnN1cmVBdmFpbGFibGUodCksdGhpcy5idWZmZXIuc2xpY2UodGhpcy5jdXJzb3IsdGhpcy5jdXJzb3IrdCl9fSx7a2V5Olwic2tpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuZW5zdXJlQXZhaWxhYmxlKHQpLHRoaXMuY3Vyc29yKz10fX1dLFt7a2V5OlwiZnJvbVwiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKGUuaXNCdWZmZXIocikpcmV0dXJuIG5ldyB0KHIpO2lmKHIgaW5zdGFuY2VvZiB0KXJldHVybiBuZXcgdChyLmJ1ZmZlci5zbGljZShyLmN1cnNvcikpO3Rocm93IG5ldyBFcnJvcihcIlJlYWRlciBtdXN0IGJlIGdpdmVuIGEgQnVmZmVyXCIpfX1dKSx0fSgpO2YuSElHSF9CSVQ9MTI4LGYuTE9XRVJfU0VWRU5fQklUUz0xMjcsZi5NQVhfSU5UX0JZVEVTPTYsW1wicmVhZFwiLFwicGVla1wiLFwic2tpcFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe1sxLDIsNF0uZm9yRWFjaChmdW5jdGlvbihlKXtmLnByb3RvdHlwZVt0K1wiVUludFwiKzgqZV09ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1t0K1wiVUludFwiXShlKX19KX0pLHQuZXhwb3J0cz1mfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cigxOTYpLGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7bih0aGlzLHQpLHRoaXMuY29tcG9uZW50cz1bXX1yZXR1cm4gaSh0LFt7a2V5Olwid3JpdGVVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCxyKXtpZighbyh0KSl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgYW4gaW50ZWdlclwiKTtpZih0PDApdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIHBvc2l0aXZlXCIpO2lmKHI8PTApdGhyb3cgbmV3IEVycm9yKFwiVUludCBsZW5ndGggbXVzdCBiZSBncmVhdGVyIHRoYW4gemVyb1wiKTtpZih0LnRvU3RyaW5nKDIpLmxlbmd0aD44KnIpdGhyb3cgbmV3IEVycm9yKFwiVUludCBcIit0K1wiIGRvZXMgbm90IGZpdCBpbiBcIityK1wiIGJ5dGVzXCIpO3ZhciBuPW5ldyBlKHIpO24ud3JpdGVVSW50QkUodCwwLHIpLHRoaXMud3JpdGUobil9fSx7a2V5Olwid3JpdGVWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24ocil7aWYoZS5pc0J1ZmZlcihyKSlyZXR1cm4gdm9pZCB0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcocik7aWYoIW8ocikpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYocjwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTtpZihyPnQuTUFYX1NBRkVfSU5URUdFUil0aHJvdyBuZXcgRXJyb3IoXCJVSW50IGlzIHRvbyBsYXJnZVwiKTt2YXIgbj1NYXRoLmNlaWwoci50b1N0cmluZygyKS5sZW5ndGgvOCksaT1uZXcgZShuKTtpLndyaXRlVUludEJFKHIsMCxuKSx0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcoaSl9fSx7a2V5Olwid3JpdGVVSW50NjRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihvKGUpJiZlPD10Lk1BWF9TQUZFX0lOVEVHRVIpcmV0dXJuIHRoaXMud3JpdGVVSW50MzIoTWF0aC5mbG9vcihlLzQyOTQ5NjcyOTYpKSx2b2lkIHRoaXMud3JpdGVVSW50MzIoNDI5NDk2NzI5NSZlKTtpZighQXJyYXkuaXNBcnJheShlKXx8MiE9PWUubGVuZ3RofHwhbyhlWzBdKXx8IW8oZVsxXSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdGVkIDY0LWJpdCBpbnRlZ2VyIGFzIGFuIGFycmF5IG9mIHR3byAzMi1iaXQgd29yZHNcIik7dGhpcy53cml0ZVVJbnQzMihlWzBdKSx0aGlzLndyaXRlVUludDMyKGVbMV0pfX0se2tleTpcIndyaXRlT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe2lmKHQubGVuZ3RoIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJJbmNvcnJlY3QgbGVuZ3RoIGZvciBvY3RldCBzdHJpbmcgKGFjdHVhbDogXCIrdC5sZW5ndGgrXCIsIGV4cGVjdGVkOiBcIitlK1wiKVwiKTt0aGlzLndyaXRlKHQpfX0se2tleTpcIndyaXRlVmFyT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRXhwZWN0cyBhIGJ1ZmZlclwiKTt2YXIgcj0xMjg7aWYodC5sZW5ndGg8PTEyNyl0aGlzLndyaXRlVUludDgodC5sZW5ndGgpO2Vsc2V7dmFyIG49TWF0aC5jZWlsKHQubGVuZ3RoLnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLndyaXRlVUludDgocnxuKSx0aGlzLndyaXRlVUludCh0Lmxlbmd0aCxuKX10aGlzLndyaXRlKHQpfX0se2tleTpcIndyaXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5jb21wb25lbnRzLnB1c2godCl9fSx7a2V5OlwiZ2V0QnVmZmVyXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5jb25jYXQodGhpcy5jb21wb25lbnRzKX19XSksdH0oKTthLk1BWF9TQUZFX0lOVEVHRVI9cig0NzUpLFsxLDIsNF0uZm9yRWFjaChmdW5jdGlvbih0KXthLnByb3RvdHlwZVtcIndyaXRlVUludFwiKzgqdF09ZnVuY3Rpb24oZSl7dGhpcy53cml0ZVVJbnQoZSx0KX19KSx0LmV4cG9ydHM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtyKDQ4NyksdC5leHBvcnRzPTkwMDcxOTkyNTQ3NDA5OTF9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ3Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLHZvaWQgMD09PWUpcmV0dXJuIHQ7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbChlLHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIHQuY2FsbChlLHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGkpe3JldHVybiB0LmNhbGwoZSxyLG4saSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KGUsYXJndW1lbnRzKX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSksaT1yKDIwMCkuZG9jdW1lbnQsbz1uKGkpJiZuKGkuY3JlYXRlRWxlbWVudCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvP2kuY3JlYXRlRWxlbWVudCh0KTp7fX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ4MyksaT1yKDQ4NCk7dC5leHBvcnRzPXIoMTQ0KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoMTQ0KSYmIXIoMTk5KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocig0NzkpKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KSxpPU1hdGguZmxvb3I7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiFuKHQpJiZpc0Zpbml0ZSh0KSYmaSh0KT09PXR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NzcpLGk9cig0ODEpLG89cig0ODUpLGE9T2JqZWN0LmRlZmluZVByb3BlcnR5O2UuZj1yKDE0NCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57ZW51bWVyYWJsZTohKDEmdCksY29uZmlndXJhYmxlOiEoMiZ0KSx3cml0YWJsZTohKDQmdCksdmFsdWU6ZX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoIW4odCkpcmV0dXJuIHQ7dmFyIHIsaTtpZihlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnZhbHVlT2YpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7aWYoIWUmJlwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC50b1N0cmluZykmJiFuKGk9ci5jYWxsKHQpKSlyZXR1cm4gaTt0aHJvdyBUeXBlRXJyb3IoXCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWVcIil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxOTgpO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDQ4Mil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTk4KTtuKG4uUyxcIk51bWJlclwiLHtNQVhfU0FGRV9JTlRFR0VSOjkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpeyFmdW5jdGlvbih0KXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBlKHQsZSxyLG4pe3RbZV09cj4+MjQmMjU1LHRbZSsxXT1yPj4xNiYyNTUsdFtlKzJdPXI+PjgmMjU1LHRbZSszXT0yNTUmcix0W2UrNF09bj4+MjQmMjU1LHRbZSs1XT1uPj4xNiYyNTUsdFtlKzZdPW4+PjgmMjU1LHRbZSs3XT0yNTUmbn1mdW5jdGlvbiBuKHQsZSxyLG4saSl7dmFyIG8sYT0wO2ZvcihvPTA7bzxpO28rKylhfD10W2Urb11ecltuK29dO3JldHVybigxJmEtMT4+PjgpLTF9ZnVuY3Rpb24gaSh0LGUscixpKXtyZXR1cm4gbih0LGUscixpLDE2KX1mdW5jdGlvbiBvKHQsZSxyLGkpe3JldHVybiBuKHQsZSxyLGksMzIpfWZ1bmN0aW9uIGEodCxlLHIsbil7Zm9yKHZhciBpLG89MjU1Jm5bMF18KDI1NSZuWzFdKTw8OHwoMjU1Jm5bMl0pPDwxNnwoMjU1Jm5bM10pPDwyNCxhPTI1NSZyWzBdfCgyNTUmclsxXSk8PDh8KDI1NSZyWzJdKTw8MTZ8KDI1NSZyWzNdKTw8MjQsZj0yNTUmcls0XXwoMjU1JnJbNV0pPDw4fCgyNTUmcls2XSk8PDE2fCgyNTUmcls3XSk8PDI0LHM9MjU1JnJbOF18KDI1NSZyWzldKTw8OHwoMjU1JnJbMTBdKTw8MTZ8KDI1NSZyWzExXSk8PDI0LHU9MjU1JnJbMTJdfCgyNTUmclsxM10pPDw4fCgyNTUmclsxNF0pPDwxNnwoMjU1JnJbMTVdKTw8MjQsaD0yNTUmbls0XXwoMjU1Jm5bNV0pPDw4fCgyNTUmbls2XSk8PDE2fCgyNTUmbls3XSk8PDI0LGM9MjU1JmVbMF18KDI1NSZlWzFdKTw8OHwoMjU1JmVbMl0pPDwxNnwoMjU1JmVbM10pPDwyNCxkPTI1NSZlWzRdfCgyNTUmZVs1XSk8PDh8KDI1NSZlWzZdKTw8MTZ8KDI1NSZlWzddKTw8MjQsbD0yNTUmZVs4XXwoMjU1JmVbOV0pPDw4fCgyNTUmZVsxMF0pPDwxNnwoMjU1JmVbMTFdKTw8MjQscD0yNTUmZVsxMl18KDI1NSZlWzEzXSk8PDh8KDI1NSZlWzE0XSk8PDE2fCgyNTUmZVsxNV0pPDwyNCxiPTI1NSZuWzhdfCgyNTUmbls5XSk8PDh8KDI1NSZuWzEwXSk8PDE2fCgyNTUmblsxMV0pPDwyNCx2PTI1NSZyWzE2XXwoMjU1JnJbMTddKTw8OHwoMjU1JnJbMThdKTw8MTZ8KDI1NSZyWzE5XSk8PDI0LHk9MjU1JnJbMjBdfCgyNTUmclsyMV0pPDw4fCgyNTUmclsyMl0pPDwxNnwoMjU1JnJbMjNdKTw8MjQsbT0yNTUmclsyNF18KDI1NSZyWzI1XSk8PDh8KDI1NSZyWzI2XSk8PDE2fCgyNTUmclsyN10pPDwyNCxnPTI1NSZyWzI4XXwoMjU1JnJbMjldKTw8OHwoMjU1JnJbMzBdKTw8MTZ8KDI1NSZyWzMxXSk8PDI0LHc9MjU1Jm5bMTJdfCgyNTUmblsxM10pPDw4fCgyNTUmblsxNF0pPDwxNnwoMjU1Jm5bMTVdKTw8MjQsXz1vLE09YSxTPWYsRT1zLEE9dSxrPWgseD1jLEk9ZCxCPWwsTz1wLFI9YixQPXYsVD15LGo9bSxDPWcsTj13LEw9MDtMPDIwO0wrPTIpaT1fK1R8MCxBXj1pPDw3fGk+Pj4yNSxpPUErX3wwLEJePWk8PDl8aT4+PjIzLGk9QitBfDAsVF49aTw8MTN8aT4+PjE5LGk9VCtCfDAsX149aTw8MTh8aT4+PjE0LGk9aytNfDAsT149aTw8N3xpPj4+MjUsaT1PK2t8MCxqXj1pPDw5fGk+Pj4yMyxpPWorT3wwLE1ePWk8PDEzfGk+Pj4xOSxpPU0ranwwLGtePWk8PDE4fGk+Pj4xNCxpPVIreHwwLENePWk8PDd8aT4+PjI1LGk9QytSfDAsU149aTw8OXxpPj4+MjMsaT1TK0N8MCx4Xj1pPDwxM3xpPj4+MTksaT14K1N8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK1B8MCxFXj1pPDw3fGk+Pj4yNSxpPUUrTnwwLElePWk8PDl8aT4+PjIzLGk9SStFfDAsUF49aTw8MTN8aT4+PjE5LGk9UCtJfDAsTl49aTw8MTh8aT4+PjE0LGk9XytFfDAsTV49aTw8N3xpPj4+MjUsaT1NK198MCxTXj1pPDw5fGk+Pj4yMyxpPVMrTXwwLEVePWk8PDEzfGk+Pj4xOSxpPUUrU3wwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrQXwwLHhePWk8PDd8aT4+PjI1LGk9eCtrfDAsSV49aTw8OXxpPj4+MjMsaT1JK3h8MCxBXj1pPDwxM3xpPj4+MTksaT1BK0l8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK098MCxQXj1pPDw3fGk+Pj4yNSxpPVArUnwwLEJePWk8PDl8aT4+PjIzLGk9QitQfDAsT149aTw8MTN8aT4+PjE5LGk9TytCfDAsUl49aTw8MTh8aT4+PjE0LGk9TitDfDAsVF49aTw8N3xpPj4+MjUsaT1UK058MCxqXj1pPDw5fGk+Pj4yMyxpPWorVHwwLENePWk8PDEzfGk+Pj4xOSxpPUMranwwLE5ePWk8PDE4fGk+Pj4xNDtfPV8rb3wwLE09TSthfDAsUz1TK2Z8MCxFPUUrc3wwLEE9QSt1fDAsaz1rK2h8MCx4PXgrY3wwLEk9SStkfDAsQj1CK2x8MCxPPU8rcHwwLFI9UitifDAsUD1QK3Z8MCxUPVQreXwwLGo9aittfDAsQz1DK2d8MCxOPU4rd3wwLHRbMF09Xz4+PjAmMjU1LHRbMV09Xz4+PjgmMjU1LHRbMl09Xz4+PjE2JjI1NSx0WzNdPV8+Pj4yNCYyNTUsdFs0XT1NPj4+MCYyNTUsdFs1XT1NPj4+OCYyNTUsdFs2XT1NPj4+MTYmMjU1LHRbN109TT4+PjI0JjI1NSx0WzhdPVM+Pj4wJjI1NSx0WzldPVM+Pj44JjI1NSx0WzEwXT1TPj4+MTYmMjU1LHRbMTFdPVM+Pj4yNCYyNTUsdFsxMl09RT4+PjAmMjU1LHRbMTNdPUU+Pj44JjI1NSx0WzE0XT1FPj4+MTYmMjU1LHRbMTVdPUU+Pj4yNCYyNTUsdFsxNl09QT4+PjAmMjU1LHRbMTddPUE+Pj44JjI1NSx0WzE4XT1BPj4+MTYmMjU1LHRbMTldPUE+Pj4yNCYyNTUsdFsyMF09az4+PjAmMjU1LHRbMjFdPWs+Pj44JjI1NSx0WzIyXT1rPj4+MTYmMjU1LHRbMjNdPWs+Pj4yNCYyNTUsdFsyNF09eD4+PjAmMjU1LHRbMjVdPXg+Pj44JjI1NSx0WzI2XT14Pj4+MTYmMjU1LHRbMjddPXg+Pj4yNCYyNTUsdFsyOF09ST4+PjAmMjU1LHRbMjldPUk+Pj44JjI1NSx0WzMwXT1JPj4+MTYmMjU1LHRbMzFdPUk+Pj4yNCYyNTUsdFszMl09Qj4+PjAmMjU1LHRbMzNdPUI+Pj44JjI1NSx0WzM0XT1CPj4+MTYmMjU1LHRbMzVdPUI+Pj4yNCYyNTUsdFszNl09Tz4+PjAmMjU1LHRbMzddPU8+Pj44JjI1NSx0WzM4XT1PPj4+MTYmMjU1LHRbMzldPU8+Pj4yNCYyNTUsdFs0MF09Uj4+PjAmMjU1LHRbNDFdPVI+Pj44JjI1NSx0WzQyXT1SPj4+MTYmMjU1LHRbNDNdPVI+Pj4yNCYyNTUsdFs0NF09UD4+PjAmMjU1LHRbNDVdPVA+Pj44JjI1NSx0WzQ2XT1QPj4+MTYmMjU1LHRbNDddPVA+Pj4yNCYyNTUsdFs0OF09VD4+PjAmMjU1LHRbNDldPVQ+Pj44JjI1NSx0WzUwXT1UPj4+MTYmMjU1LHRbNTFdPVQ+Pj4yNCYyNTUsdFs1Ml09aj4+PjAmMjU1LHRbNTNdPWo+Pj44JjI1NSx0WzU0XT1qPj4+MTYmMjU1LHRbNTVdPWo+Pj4yNCYyNTUsdFs1Nl09Qz4+PjAmMjU1LHRbNTddPUM+Pj44JjI1NSx0WzU4XT1DPj4+MTYmMjU1LHRbNTldPUM+Pj4yNCYyNTUsdFs2MF09Tj4+PjAmMjU1LHRbNjFdPU4+Pj44JjI1NSx0WzYyXT1OPj4+MTYmMjU1LHRbNjNdPU4+Pj4yNCYyNTV9ZnVuY3Rpb24gZih0LGUscixuKXtmb3IodmFyIGksbz0yNTUmblswXXwoMjU1Jm5bMV0pPDw4fCgyNTUmblsyXSk8PDE2fCgyNTUmblszXSk8PDI0LGE9MjU1JnJbMF18KDI1NSZyWzFdKTw8OHwoMjU1JnJbMl0pPDwxNnwoMjU1JnJbM10pPDwyNCxmPTI1NSZyWzRdfCgyNTUmcls1XSk8PDh8KDI1NSZyWzZdKTw8MTZ8KDI1NSZyWzddKTw8MjQscz0yNTUmcls4XXwoMjU1JnJbOV0pPDw4fCgyNTUmclsxMF0pPDwxNnwoMjU1JnJbMTFdKTw8MjQsdT0yNTUmclsxMl18KDI1NSZyWzEzXSk8PDh8KDI1NSZyWzE0XSk8PDE2fCgyNTUmclsxNV0pPDwyNCxoPTI1NSZuWzRdfCgyNTUmbls1XSk8PDh8KDI1NSZuWzZdKTw8MTZ8KDI1NSZuWzddKTw8MjQsYz0yNTUmZVswXXwoMjU1JmVbMV0pPDw4fCgyNTUmZVsyXSk8PDE2fCgyNTUmZVszXSk8PDI0LGQ9MjU1JmVbNF18KDI1NSZlWzVdKTw8OHwoMjU1JmVbNl0pPDwxNnwoMjU1JmVbN10pPDwyNCxsPTI1NSZlWzhdfCgyNTUmZVs5XSk8PDh8KDI1NSZlWzEwXSk8PDE2fCgyNTUmZVsxMV0pPDwyNCxwPTI1NSZlWzEyXXwoMjU1JmVbMTNdKTw8OHwoMjU1JmVbMTRdKTw8MTZ8KDI1NSZlWzE1XSk8PDI0LGI9MjU1Jm5bOF18KDI1NSZuWzldKTw8OHwoMjU1Jm5bMTBdKTw8MTZ8KDI1NSZuWzExXSk8PDI0LHY9MjU1JnJbMTZdfCgyNTUmclsxN10pPDw4fCgyNTUmclsxOF0pPDwxNnwoMjU1JnJbMTldKTw8MjQseT0yNTUmclsyMF18KDI1NSZyWzIxXSk8PDh8KDI1NSZyWzIyXSk8PDE2fCgyNTUmclsyM10pPDwyNCxtPTI1NSZyWzI0XXwoMjU1JnJbMjVdKTw8OHwoMjU1JnJbMjZdKTw8MTZ8KDI1NSZyWzI3XSk8PDI0LGc9MjU1JnJbMjhdfCgyNTUmclsyOV0pPDw4fCgyNTUmclszMF0pPDwxNnwoMjU1JnJbMzFdKTw8MjQsdz0yNTUmblsxMl18KDI1NSZuWzEzXSk8PDh8KDI1NSZuWzE0XSk8PDE2fCgyNTUmblsxNV0pPDwyNCxfPW8sTT1hLFM9ZixFPXMsQT11LGs9aCx4PWMsST1kLEI9bCxPPXAsUj1iLFA9dixUPXksaj1tLEM9ZyxOPXcsTD0wO0w8MjA7TCs9MilpPV8rVHwwLEFePWk8PDd8aT4+PjI1LGk9QStffDAsQl49aTw8OXxpPj4+MjMsaT1CK0F8MCxUXj1pPDwxM3xpPj4+MTksaT1UK0J8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK018MCxPXj1pPDw3fGk+Pj4yNSxpPU8ra3wwLGpePWk8PDl8aT4+PjIzLGk9aitPfDAsTV49aTw8MTN8aT4+PjE5LGk9TStqfDAsa149aTw8MTh8aT4+PjE0LGk9Uit4fDAsQ149aTw8N3xpPj4+MjUsaT1DK1J8MCxTXj1pPDw5fGk+Pj4yMyxpPVMrQ3wwLHhePWk8PDEzfGk+Pj4xOSxpPXgrU3wwLFJePWk8PDE4fGk+Pj4xNCxpPU4rUHwwLEVePWk8PDd8aT4+PjI1LGk9RStOfDAsSV49aTw8OXxpPj4+MjMsaT1JK0V8MCxQXj1pPDwxM3xpPj4+MTksaT1QK0l8MCxOXj1pPDwxOHxpPj4+MTQsaT1fK0V8MCxNXj1pPDw3fGk+Pj4yNSxpPU0rX3wwLFNePWk8PDl8aT4+PjIzLGk9UytNfDAsRV49aTw8MTN8aT4+PjE5LGk9RStTfDAsX149aTw8MTh8aT4+PjE0LGk9aytBfDAseF49aTw8N3xpPj4+MjUsaT14K2t8MCxJXj1pPDw5fGk+Pj4yMyxpPUkreHwwLEFePWk8PDEzfGk+Pj4xOSxpPUErSXwwLGtePWk8PDE4fGk+Pj4xNCxpPVIrT3wwLFBePWk8PDd8aT4+PjI1LGk9UCtSfDAsQl49aTw8OXxpPj4+MjMsaT1CK1B8MCxPXj1pPDwxM3xpPj4+MTksaT1PK0J8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK0N8MCxUXj1pPDw3fGk+Pj4yNSxpPVQrTnwwLGpePWk8PDl8aT4+PjIzLGk9aitUfDAsQ149aTw8MTN8aT4+PjE5LGk9QytqfDAsTl49aTw8MTh8aT4+PjE0O3RbMF09Xz4+PjAmMjU1LHRbMV09Xz4+PjgmMjU1LHRbMl09Xz4+PjE2JjI1NSx0WzNdPV8+Pj4yNCYyNTUsdFs0XT1rPj4+MCYyNTUsdFs1XT1rPj4+OCYyNTUsdFs2XT1rPj4+MTYmMjU1LHRbN109az4+PjI0JjI1NSx0WzhdPVI+Pj4wJjI1NSx0WzldPVI+Pj44JjI1NSx0WzEwXT1SPj4+MTYmMjU1LHRbMTFdPVI+Pj4yNCYyNTUsdFsxMl09Tj4+PjAmMjU1LHRbMTNdPU4+Pj44JjI1NSx0WzE0XT1OPj4+MTYmMjU1LHRbMTVdPU4+Pj4yNCYyNTUsdFsxNl09eD4+PjAmMjU1LHRbMTddPXg+Pj44JjI1NSx0WzE4XT14Pj4+MTYmMjU1LHRbMTldPXg+Pj4yNCYyNTUsdFsyMF09ST4+PjAmMjU1LHRbMjFdPUk+Pj44JjI1NSx0WzIyXT1JPj4+MTYmMjU1LHRbMjNdPUk+Pj4yNCYyNTUsdFsyNF09Qj4+PjAmMjU1LHRbMjVdPUI+Pj44JjI1NSx0WzI2XT1CPj4+MTYmMjU1LHRbMjddPUI+Pj4yNCYyNTUsdFsyOF09Tz4+PjAmMjU1LHRbMjldPU8+Pj44JjI1NSx0WzMwXT1PPj4+MTYmMjU1LHRbMzFdPU8+Pj4yNCYyNTV9ZnVuY3Rpb24gcyh0LGUscixuKXthKHQsZSxyLG4pfWZ1bmN0aW9uIHUodCxlLHIsbil7Zih0LGUscixuKX1mdW5jdGlvbiBoKHQsZSxyLG4saSxvLGEpe3ZhciBmLHUsaD1uZXcgVWludDhBcnJheSgxNiksYz1uZXcgVWludDhBcnJheSg2NCk7Zm9yKHU9MDt1PDE2O3UrKyloW3VdPTA7Zm9yKHU9MDt1PDg7dSsrKWhbdV09b1t1XTtmb3IoO2k+PTY0Oyl7Zm9yKHMoYyxoLGEsZHQpLHU9MDt1PDY0O3UrKyl0W2UrdV09cltuK3VdXmNbdV07Zm9yKGY9MSx1PTg7dTwxNjt1KyspZj1mKygyNTUmaFt1XSl8MCxoW3VdPTI1NSZmLGY+Pj49ODtpLT02NCxlKz02NCxuKz02NH1pZihpPjApZm9yKHMoYyxoLGEsZHQpLHU9MDt1PGk7dSsrKXRbZSt1XT1yW24rdV1eY1t1XTtyZXR1cm4gMH1mdW5jdGlvbiBjKHQsZSxyLG4saSl7dmFyIG8sYSxmPW5ldyBVaW50OEFycmF5KDE2KSx1PW5ldyBVaW50OEFycmF5KDY0KTtmb3IoYT0wO2E8MTY7YSsrKWZbYV09MDtmb3IoYT0wO2E8ODthKyspZlthXT1uW2FdO2Zvcig7cj49NjQ7KXtmb3Iocyh1LGYsaSxkdCksYT0wO2E8NjQ7YSsrKXRbZSthXT11W2FdO2ZvcihvPTEsYT04O2E8MTY7YSsrKW89bysoMjU1JmZbYV0pfDAsZlthXT0yNTUmbyxvPj4+PTg7ci09NjQsZSs9NjR9aWYocj4wKWZvcihzKHUsZixpLGR0KSxhPTA7YTxyO2ErKyl0W2UrYV09dVthXTtyZXR1cm4gMH1mdW5jdGlvbiBkKHQsZSxyLG4saSl7dmFyIG89bmV3IFVpbnQ4QXJyYXkoMzIpO3UobyxuLGksZHQpO2Zvcih2YXIgYT1uZXcgVWludDhBcnJheSg4KSxmPTA7Zjw4O2YrKylhW2ZdPW5bZisxNl07cmV0dXJuIGModCxlLHIsYSxvKX1mdW5jdGlvbiBsKHQsZSxyLG4saSxvLGEpe3ZhciBmPW5ldyBVaW50OEFycmF5KDMyKTt1KGYsbyxhLGR0KTtmb3IodmFyIHM9bmV3IFVpbnQ4QXJyYXkoOCksYz0wO2M8ODtjKyspc1tjXT1vW2MrMTZdO3JldHVybiBoKHQsZSxyLG4saSxzLGYpfWZ1bmN0aW9uIHAodCxlLHIsbixpLG8pe3ZhciBhPW5ldyBsdChvKTtyZXR1cm4gYS51cGRhdGUocixuLGkpLGEuZmluaXNoKHQsZSksMH1mdW5jdGlvbiBiKHQsZSxyLG4sbyxhKXt2YXIgZj1uZXcgVWludDhBcnJheSgxNik7cmV0dXJuIHAoZiwwLHIsbixvLGEpLGkodCxlLGYsMCl9ZnVuY3Rpb24gdih0LGUscixuLGkpe3ZhciBvO2lmKHI8MzIpcmV0dXJuLTE7Zm9yKGwodCwwLGUsMCxyLG4saSkscCh0LDE2LHQsMzIsci0zMix0KSxvPTA7bzwxNjtvKyspdFtvXT0wO3JldHVybiAwfWZ1bmN0aW9uIHkodCxlLHIsbixpKXt2YXIgbyxhPW5ldyBVaW50OEFycmF5KDMyKTtpZihyPDMyKXJldHVybi0xO2lmKGQoYSwwLDMyLG4saSksMCE9PWIoZSwxNixlLDMyLHItMzIsYSkpcmV0dXJuLTE7Zm9yKGwodCwwLGUsMCxyLG4saSksbz0wO288MzI7bysrKXRbb109MDtyZXR1cm4gMH1mdW5jdGlvbiBtKHQsZSl7dmFyIHI7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPTB8ZVtyXX1mdW5jdGlvbiBnKHQpe3ZhciBlLHIsbj0xO2ZvcihlPTA7ZTwxNjtlKyspcj10W2VdK24rNjU1MzUsbj1NYXRoLmZsb29yKHIvNjU1MzYpLHRbZV09ci02NTUzNipuO3RbMF0rPW4tMSszNyoobi0xKX1mdW5jdGlvbiB3KHQsZSxyKXtmb3IodmFyIG4saT1+KHItMSksbz0wO288MTY7bysrKW49aSYodFtvXV5lW29dKSx0W29dXj1uLGVbb11ePW59ZnVuY3Rpb24gXyh0LGUpe3ZhciByLG4saSxvPXR0KCksYT10dCgpO2ZvcihyPTA7cjwxNjtyKyspYVtyXT1lW3JdO2ZvcihnKGEpLGcoYSksZyhhKSxuPTA7bjwyO24rKyl7Zm9yKG9bMF09YVswXS02NTUxNyxyPTE7cjwxNTtyKyspb1tyXT1hW3JdLTY1NTM1LShvW3ItMV0+PjE2JjEpLG9bci0xXSY9NjU1MzU7b1sxNV09YVsxNV0tMzI3NjctKG9bMTRdPj4xNiYxKSxpPW9bMTVdPj4xNiYxLG9bMTRdJj02NTUzNSx3KGEsbywxLWkpfWZvcihyPTA7cjwxNjtyKyspdFsyKnJdPTI1NSZhW3JdLHRbMipyKzFdPWFbcl0+Pjh9ZnVuY3Rpb24gTSh0LGUpe3ZhciByPW5ldyBVaW50OEFycmF5KDMyKSxuPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gXyhyLHQpLF8obixlKSxvKHIsMCxuLDApfWZ1bmN0aW9uIFModCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBfKGUsdCksMSZlWzBdfWZ1bmN0aW9uIEUodCxlKXt2YXIgcjtmb3Iocj0wO3I8MTY7cisrKXRbcl09ZVsyKnJdKyhlWzIqcisxXTw8OCk7dFsxNV0mPTMyNzY3fWZ1bmN0aW9uIEEodCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbbl09ZVtuXStyW25dfWZ1bmN0aW9uIGsodCxlLHIpe2Zvcih2YXIgbj0wO248MTY7bisrKXRbbl09ZVtuXS1yW25dfWZ1bmN0aW9uIHgodCxlLHIpe3ZhciBuLGksbz0wLGE9MCxmPTAscz0wLHU9MCxoPTAsYz0wLGQ9MCxsPTAscD0wLGI9MCx2PTAseT0wLG09MCxnPTAsdz0wLF89MCxNPTAsUz0wLEU9MCxBPTAsaz0wLHg9MCxJPTAsQj0wLE89MCxSPTAsUD0wLFQ9MCxqPTAsQz0wLE49clswXSxMPXJbMV0sVT1yWzJdLHo9clszXSxEPXJbNF0scT1yWzVdLEY9cls2XSxLPXJbN10sRz1yWzhdLFY9cls5XSxIPXJbMTBdLFg9clsxMV0sWT1yWzEyXSxXPXJbMTNdLFo9clsxNF0sSj1yWzE1XTtuPWVbMF0sbys9bipOLGErPW4qTCxmKz1uKlUscys9bip6LHUrPW4qRCxoKz1uKnEsYys9bipGLGQrPW4qSyxsKz1uKkcscCs9bipWLGIrPW4qSCx2Kz1uKlgseSs9bipZLG0rPW4qVyxnKz1uKlosdys9bipKLG49ZVsxXSxhKz1uKk4sZis9bipMLHMrPW4qVSx1Kz1uKnosaCs9bipELGMrPW4qcSxkKz1uKkYsbCs9bipLLHArPW4qRyxiKz1uKlYsdis9bipILHkrPW4qWCxtKz1uKlksZys9bipXLHcrPW4qWixfKz1uKkosbj1lWzJdLGYrPW4qTixzKz1uKkwsdSs9bipVLGgrPW4qeixjKz1uKkQsZCs9bipxLGwrPW4qRixwKz1uKkssYis9bipHLHYrPW4qVix5Kz1uKkgsbSs9bipYLGcrPW4qWSx3Kz1uKlcsXys9bipaLE0rPW4qSixuPWVbM10scys9bipOLHUrPW4qTCxoKz1uKlUsYys9bip6LGQrPW4qRCxsKz1uKnEscCs9bipGLGIrPW4qSyx2Kz1uKkcseSs9bipWLG0rPW4qSCxnKz1uKlgsdys9bipZLF8rPW4qVyxNKz1uKlosUys9bipKLG49ZVs0XSx1Kz1uKk4saCs9bipMLGMrPW4qVSxkKz1uKnosbCs9bipELHArPW4qcSxiKz1uKkYsdis9bipLLHkrPW4qRyxtKz1uKlYsZys9bipILHcrPW4qWCxfKz1uKlksTSs9bipXLFMrPW4qWixFKz1uKkosbj1lWzVdLGgrPW4qTixjKz1uKkwsZCs9bipVLGwrPW4qeixwKz1uKkQsYis9bipxLHYrPW4qRix5Kz1uKkssbSs9bipHLGcrPW4qVix3Kz1uKkgsXys9bipYLE0rPW4qWSxTKz1uKlcsRSs9bipaLEErPW4qSixuPWVbNl0sYys9bipOLGQrPW4qTCxsKz1uKlUscCs9bip6LGIrPW4qRCx2Kz1uKnEseSs9bipGLG0rPW4qSyxnKz1uKkcsdys9bipWLF8rPW4qSCxNKz1uKlgsUys9bipZLEUrPW4qVyxBKz1uKlosays9bipKLG49ZVs3XSxkKz1uKk4sbCs9bipMLHArPW4qVSxiKz1uKnosdis9bipELHkrPW4qcSxtKz1uKkYsZys9bipLLHcrPW4qRyxfKz1uKlYsTSs9bipILFMrPW4qWCxFKz1uKlksQSs9bipXLGsrPW4qWix4Kz1uKkosbj1lWzhdLGwrPW4qTixwKz1uKkwsYis9bipVLHYrPW4qeix5Kz1uKkQsbSs9bipxLGcrPW4qRix3Kz1uKkssXys9bipHLE0rPW4qVixTKz1uKkgsRSs9bipYLEErPW4qWSxrKz1uKlcseCs9bipaLEkrPW4qSixuPWVbOV0scCs9bipOLGIrPW4qTCx2Kz1uKlUseSs9bip6LG0rPW4qRCxnKz1uKnEsdys9bipGLF8rPW4qSyxNKz1uKkcsUys9bipWLEUrPW4qSCxBKz1uKlgsays9bipZLHgrPW4qVyxJKz1uKlosQis9bipKLG49ZVsxMF0sYis9bipOLHYrPW4qTCx5Kz1uKlUsbSs9bip6LGcrPW4qRCx3Kz1uKnEsXys9bipGLE0rPW4qSyxTKz1uKkcsRSs9bipWLEErPW4qSCxrKz1uKlgseCs9bipZLEkrPW4qVyxCKz1uKlosTys9bipKLG49ZVsxMV0sdis9bipOLHkrPW4qTCxtKz1uKlUsZys9bip6LHcrPW4qRCxfKz1uKnEsTSs9bipGLFMrPW4qSyxFKz1uKkcsQSs9bipWLGsrPW4qSCx4Kz1uKlg7SSs9bipZO0IrPW4qVyxPKz1uKlosUis9bipKLG49ZVsxMl0seSs9bipOLG0rPW4qTCxnKz1uKlUsdys9bip6LF8rPW4qRCxNKz1uKnEsUys9bipGLEUrPW4qSyxBKz1uKkcsays9bipWLHgrPW4qSCxJKz1uKlgsQis9bipZLE8rPW4qVyxSKz1uKlosUCs9bipKLG49ZVsxM10sbSs9bipOLGcrPW4qTCx3Kz1uKlUsXys9bip6LE0rPW4qRCxTKz1uKnEsRSs9bipGLEErPW4qSyxrKz1uKkcseCs9bipWLEkrPW4qSCxCKz1uKlgsTys9bipZLFIrPW4qVyxQKz1uKlosVCs9bipKLG49ZVsxNF0sZys9bipOLHcrPW4qTCxfKz1uKlUsTSs9bip6LFMrPW4qRCxFKz1uKnEsQSs9bipGLGsrPW4qSyx4Kz1uKkcsSSs9bipWLEIrPW4qSCxPKz1uKlgsUis9bipZLFArPW4qVyxUKz1uKlosais9bipKLG49ZVsxNV0sdys9bipOLF8rPW4qTCxNKz1uKlUsUys9bip6LEUrPW4qRCxBKz1uKnEsays9bipGLHgrPW4qSyxJKz1uKkcsQis9bipWLE8rPW4qSCxSKz1uKlgsUCs9bipZLFQrPW4qVyxqKz1uKlosQys9bipKLG8rPTM4Kl8sYSs9MzgqTSxmKz0zOCpTLHMrPTM4KkUsdSs9MzgqQSxoKz0zOCprLGMrPTM4KngsZCs9MzgqSSxsKz0zOCpCLHArPTM4Kk8sYis9MzgqUix2Kz0zOCpQLHkrPTM4KlQsbSs9MzgqaixnKz0zOCpDLGk9MSxuPW8raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbz1uLTY1NTM2Kmksbj1hK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGE9bi02NTUzNippLG49ZitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxmPW4tNjU1MzYqaSxuPXMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscz1uLTY1NTM2Kmksbj11K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHU9bi02NTUzNippLG49aCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxoPW4tNjU1MzYqaSxuPWMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYz1uLTY1NTM2Kmksbj1kK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGQ9bi02NTUzNippLG49bCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxsPW4tNjU1MzYqaSxuPXAraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscD1uLTY1NTM2Kmksbj1iK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGI9bi02NTUzNippLG49ditpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx2PW4tNjU1MzYqaSxuPXkraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikseT1uLTY1NTM2Kmksbj1tK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG09bi02NTUzNippLG49ZytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxnPW4tNjU1MzYqaSxuPXcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdz1uLTY1NTM2Kmksbys9aS0xKzM3KihpLTEpLGk9MSxuPW8raSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbz1uLTY1NTM2Kmksbj1hK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGE9bi02NTUzNippLG49ZitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxmPW4tNjU1MzYqaSxuPXMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscz1uLTY1NTM2Kmksbj11K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHU9bi02NTUzNippLG49aCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxoPW4tNjU1MzYqaSxuPWMraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksYz1uLTY1NTM2Kmksbj1kK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGQ9bi02NTUzNippLG49bCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxsPW4tNjU1MzYqaSxuPXAraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikscD1uLTY1NTM2Kmksbj1iK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGI9bi02NTUzNippLG49ditpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx2PW4tNjU1MzYqaSxuPXkraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNikseT1uLTY1NTM2Kmksbj1tK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG09bi02NTUzNippLG49ZytpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxnPW4tNjU1MzYqaSxuPXcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdz1uLTY1NTM2Kmksbys9aS0xKzM3KihpLTEpLHRbMF09byx0WzFdPWEsdFsyXT1mLHRbM109cyx0WzRdPXUsdFs1XT1oLHRbNl09Yyx0WzddPWQsdFs4XT1sLHRbOV09cCx0WzEwXT1iLHRbMTFdPXYsdFsxMl09eSx0WzEzXT1tO3RbMTRdPWc7dFsxNV09d31mdW5jdGlvbiBJKHQsZSl7eCh0LGUsZSl9ZnVuY3Rpb24gQih0LGUpe3ZhciByLG49dHQoKTtmb3Iocj0wO3I8MTY7cisrKW5bcl09ZVtyXTtmb3Iocj0yNTM7cj49MDtyLS0pSShuLG4pLDIhPT1yJiY0IT09ciYmeChuLG4sZSk7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPW5bcl19ZnVuY3Rpb24gTyh0LGUpe3ZhciByLG49dHQoKTtmb3Iocj0wO3I8MTY7cisrKW5bcl09ZVtyXTtmb3Iocj0yNTA7cj49MDtyLS0pSShuLG4pLDEhPT1yJiZ4KG4sbixlKTtmb3Iocj0wO3I8MTY7cisrKXRbcl09bltyXX1mdW5jdGlvbiBSKHQsZSxyKXt2YXIgbixpLG89bmV3IFVpbnQ4QXJyYXkoMzIpLGE9bmV3IEZsb2F0NjRBcnJheSg4MCksZj10dCgpLHM9dHQoKSx1PXR0KCksaD10dCgpLGM9dHQoKSxkPXR0KCk7Zm9yKGk9MDtpPDMxO2krKylvW2ldPWVbaV07Zm9yKG9bMzFdPTEyNyZlWzMxXXw2NCxvWzBdJj0yNDgsRShhLHIpLGk9MDtpPDE2O2krKylzW2ldPWFbaV0saFtpXT1mW2ldPXVbaV09MDtmb3IoZlswXT1oWzBdPTEsaT0yNTQ7aT49MDstLWkpbj1vW2k+Pj4zXT4+Pig3JmkpJjEsdyhmLHMsbiksdyh1LGgsbiksQShjLGYsdSksayhmLGYsdSksQSh1LHMsaCksayhzLHMsaCksSShoLGMpLEkoZCxmKSx4KGYsdSxmKSx4KHUscyxjKSxBKGMsZix1KSxrKGYsZix1KSxJKHMsZiksayh1LGgsZCkseChmLHUsYXQpLEEoZixmLGgpLHgodSx1LGYpLHgoZixoLGQpLHgoaCxzLGEpLEkocyxjKSx3KGYscyxuKSx3KHUsaCxuKTtmb3IoaT0wO2k8MTY7aSsrKWFbaSsxNl09ZltpXSxhW2krMzJdPXVbaV0sYVtpKzQ4XT1zW2ldLGFbaSs2NF09aFtpXTt2YXIgbD1hLnN1YmFycmF5KDMyKSxwPWEuc3ViYXJyYXkoMTYpO3JldHVybiBCKGwsbCkseChwLHAsbCksXyh0LHApLDB9ZnVuY3Rpb24gUCh0LGUpe3JldHVybiBSKHQsZSxudCl9ZnVuY3Rpb24gVCh0LGUpe3JldHVybiBldChlLDMyKSxQKHQsZSl9ZnVuY3Rpb24gaih0LGUscil7dmFyIG49bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBSKG4scixlKSx1KHQscnQsbixkdCl9ZnVuY3Rpb24gQyh0LGUscixuLGksbyl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoMzIpO3JldHVybiBqKGEsaSxvKSxwdCh0LGUscixuLGEpfWZ1bmN0aW9uIE4odCxlLHIsbixpLG8pe3ZhciBhPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gaihhLGksbyksYnQodCxlLHIsbixhKX1mdW5jdGlvbiBMKHQsZSxyLG4pe2Zvcih2YXIgaSxvLGEsZixzLHUsaCxjLGQsbCxwLGIsdix5LG0sZyx3LF8sTSxTLEUsQSxrLHgsSSxCLE89bmV3IEludDMyQXJyYXkoMTYpLFI9bmV3IEludDMyQXJyYXkoMTYpLFA9dFswXSxUPXRbMV0saj10WzJdLEM9dFszXSxOPXRbNF0sTD10WzVdLFU9dFs2XSx6PXRbN10sRD1lWzBdLHE9ZVsxXSxGPWVbMl0sSz1lWzNdLEc9ZVs0XSxWPWVbNV0sSD1lWzZdLFg9ZVs3XSxZPTA7bj49MTI4Oyl7Zm9yKE09MDtNPDE2O00rKylTPTgqTStZLE9bTV09cltTKzBdPDwyNHxyW1MrMV08PDE2fHJbUysyXTw8OHxyW1MrM10sUltNXT1yW1MrNF08PDI0fHJbUys1XTw8MTZ8cltTKzZdPDw4fHJbUys3XTtmb3IoTT0wO008ODA7TSsrKWlmKGk9UCxvPVQsYT1qLGY9QyxzPU4sdT1MLGg9VSxjPXosZD1ELGw9cSxwPUYsYj1LLHY9Ryx5PVYsbT1ILGc9WCxFPXosQT1YLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT0oTj4+PjE0fEc8PDE4KV4oTj4+PjE4fEc8PDE0KV4oRz4+Pjl8Tjw8MjMpLEE9KEc+Pj4xNHxOPDwxOCleKEc+Pj4xOHxOPDwxNCleKE4+Pj45fEc8PDIzKSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPU4mTF5+TiZVLEE9RyZWXn5HJkgsays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT12dFsyKk1dLEE9dnRbMipNKzFdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9T1tNJTE2XSxBPVJbTSUxNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdz02NTUzNSZJfEI8PDE2LF89NjU1MzUma3x4PDwxNixFPXcsQT1fLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT0oUD4+PjI4fEQ8PDQpXihEPj4+MnxQPDwzMCleKEQ+Pj43fFA8PDI1KSxBPShEPj4+Mjh8UDw8NCleKFA+Pj4yfEQ8PDMwKV4oUD4+Pjd8RDw8MjUpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9UCZUXlAmal5UJmosQT1EJnFeRCZGXnEmRixrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixjPTY1NTM1Jkl8Qjw8MTYsZz02NTUzNSZrfHg8PDE2LEU9ZixBPWIsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXcsQT1fLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LGY9NjU1MzUmSXxCPDwxNixiPTY1NTM1Jmt8eDw8MTYsVD1pLGo9byxDPWEsTj1mLEw9cyxVPXUsej1oLFA9YyxxPWQsRj1sLEs9cCxHPWIsVj12LEg9eSxYPW0sRD1nLE0lMTY9PT0xNSlmb3IoUz0wO1M8MTY7UysrKUU9T1tTXSxBPVJbU10saz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPU9bKFMrOSklMTZdLEE9UlsoUys5KSUxNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsdz1PWyhTKzEpJTE2XSxfPVJbKFMrMSklMTZdLEU9KHc+Pj4xfF88PDMxKV4odz4+Pjh8Xzw8MjQpXnc+Pj43LEE9KF8+Pj4xfHc8PDMxKV4oXz4+Pjh8dzw8MjQpXihfPj4+N3x3PDwyNSksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsdz1PWyhTKzE0KSUxNl0sXz1SWyhTKzE0KSUxNl0sRT0odz4+PjE5fF88PDEzKV4oXz4+PjI5fHc8PDMpXnc+Pj42LEE9KF8+Pj4xOXx3PDwxMyleKHc+Pj4yOXxfPDwzKV4oXz4+PjZ8dzw8MjYpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LE9bU109NjU1MzUmSXxCPDwxNixSW1NdPTY1NTM1Jmt8eDw8MTY7RT1QLEE9RCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFswXSxBPWVbMF0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFswXT1QPTY1NTM1Jkl8Qjw8MTYsZVswXT1EPTY1NTM1Jmt8eDw8MTYsRT1ULEE9cSxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFsxXSxBPWVbMV0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFsxXT1UPTY1NTM1Jkl8Qjw8MTYsZVsxXT1xPTY1NTM1Jmt8eDw8MTYsRT1qLEE9RixrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFsyXSxBPWVbMl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFsyXT1qPTY1NTM1Jkl8Qjw8MTYsZVsyXT1GPTY1NTM1Jmt8eDw8MTYsRT1DLEE9SyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFszXSxBPWVbM10says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFszXT1DPTY1NTM1Jkl8Qjw8MTYsZVszXT1LPTY1NTM1Jmt8eDw8MTYsRT1OLEE9RyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs0XSxBPWVbNF0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs0XT1OPTY1NTM1Jkl8Qjw8MTYsZVs0XT1HPTY1NTM1Jmt8eDw8MTYsRT1MLEE9VixrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs1XSxBPWVbNV0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs1XT1MPTY1NTM1Jkl8Qjw8MTYsZVs1XT1WPTY1NTM1Jmt8eDw8MTYsRT1VLEE9SCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs2XSxBPWVbNl0says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs2XT1VPTY1NTM1Jkl8Qjw8MTYsZVs2XT1IPTY1NTM1Jmt8eDw8MTYsRT16LEE9WCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9dFs3XSxBPWVbN10says9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsdFs3XT16PTY1NTM1Jkl8Qjw8MTYsZVs3XT1YPTY1NTM1Jmt8eDw8MTYsWSs9MTI4LG4tPTEyOH1yZXR1cm4gbn1mdW5jdGlvbiBVKHQscixuKXt2YXIgaSxvPW5ldyBJbnQzMkFycmF5KDgpLGE9bmV3IEludDMyQXJyYXkoOCksZj1uZXcgVWludDhBcnJheSgyNTYpLHM9bjtmb3Iob1swXT0xNzc5MDMzNzAzLG9bMV09MzE0NDEzNDI3NyxvWzJdPTEwMTM5MDQyNDIsb1szXT0yNzczNDgwNzYyLG9bNF09MTM1OTg5MzExOSxvWzVdPTI2MDA4MjI5MjQsb1s2XT01Mjg3MzQ2MzUsb1s3XT0xNTQxNDU5MjI1LGFbMF09NDA4OTIzNTcyMCxhWzFdPTIyMjc4NzM1OTUsYVsyXT00MjcxMTc1NzIzLGFbM109MTU5NTc1MDEyOSxhWzRdPTI5MTc1NjUxMzcsYVs1XT03MjU1MTExOTksYVs2XT00MjE1Mzg5NTQ3LGFbN109MzI3MDMzMjA5LEwobyxhLHIsbiksbiU9MTI4LGk9MDtpPG47aSsrKWZbaV09cltzLW4raV07Zm9yKGZbbl09MTI4LG49MjU2LTEyOCoobjwxMTI/MTowKSxmW24tOV09MCxlKGYsbi04LHMvNTM2ODcwOTEyfDAsczw8MyksTChvLGEsZixuKSxpPTA7aTw4O2krKyllKHQsOCppLG9baV0sYVtpXSk7cmV0dXJuIDB9ZnVuY3Rpb24geih0LGUpe3ZhciByPXR0KCksbj10dCgpLGk9dHQoKSxvPXR0KCksYT10dCgpLGY9dHQoKSxzPXR0KCksdT10dCgpLGg9dHQoKTtrKHIsdFsxXSx0WzBdKSxrKGgsZVsxXSxlWzBdKSx4KHIscixoKSxBKG4sdFswXSx0WzFdKSxBKGgsZVswXSxlWzFdKSx4KG4sbixoKSx4KGksdFszXSxlWzNdKSx4KGksaSxzdCkseChvLHRbMl0sZVsyXSksQShvLG8sbyksayhhLG4sciksayhmLG8saSksQShzLG8saSksQSh1LG4scikseCh0WzBdLGEsZikseCh0WzFdLHUscykseCh0WzJdLHMsZikseCh0WzNdLGEsdSl9ZnVuY3Rpb24gRCh0LGUscil7dmFyIG47Zm9yKG49MDtuPDQ7bisrKXcodFtuXSxlW25dLHIpfWZ1bmN0aW9uIHEodCxlKXt2YXIgcj10dCgpLG49dHQoKSxpPXR0KCk7QihpLGVbMl0pLHgocixlWzBdLGkpLHgobixlWzFdLGkpLF8odCxuKSx0WzMxXV49UyhyKTw8N31mdW5jdGlvbiBGKHQsZSxyKXt2YXIgbixpO2ZvcihtKHRbMF0saXQpLG0odFsxXSxvdCksbSh0WzJdLG90KSxtKHRbM10saXQpLGk9MjU1O2k+PTA7LS1pKW49cltpLzh8MF0+Pig3JmkpJjEsRCh0LGUsbikseihlLHQpLHoodCx0KSxEKHQsZSxuKX1mdW5jdGlvbiBLKHQsZSl7dmFyIHI9W3R0KCksdHQoKSx0dCgpLHR0KCldO1xubShyWzBdLHV0KSxtKHJbMV0saHQpLG0oclsyXSxvdCkseChyWzNdLHV0LGh0KSxGKHQscixlKX1mdW5jdGlvbiBHKHQsZSxyKXt2YXIgbixpPW5ldyBVaW50OEFycmF5KDY0KSxvPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtmb3Iocnx8ZXQoZSwzMiksVShpLGUsMzIpLGlbMF0mPTI0OCxpWzMxXSY9MTI3LGlbMzFdfD02NCxLKG8saSkscSh0LG8pLG49MDtuPDMyO24rKyllW24rMzJdPXRbbl07cmV0dXJuIDB9ZnVuY3Rpb24gVih0LGUpe3ZhciByLG4saSxvO2ZvcihuPTYzO24+PTMyOy0tbil7Zm9yKHI9MCxpPW4tMzIsbz1uLTEyO2k8bzsrK2kpZVtpXSs9ci0xNiplW25dKnl0W2ktKG4tMzIpXSxyPWVbaV0rMTI4Pj44LGVbaV0tPTI1NipyO2VbaV0rPXIsZVtuXT0wfWZvcihyPTAsaT0wO2k8MzI7aSsrKWVbaV0rPXItKGVbMzFdPj40KSp5dFtpXSxyPWVbaV0+PjgsZVtpXSY9MjU1O2ZvcihpPTA7aTwzMjtpKyspZVtpXS09cip5dFtpXTtmb3Iobj0wO248MzI7bisrKWVbbisxXSs9ZVtuXT4+OCx0W25dPTI1NSZlW25dfWZ1bmN0aW9uIEgodCl7dmFyIGUscj1uZXcgRmxvYXQ2NEFycmF5KDY0KTtmb3IoZT0wO2U8NjQ7ZSsrKXJbZV09dFtlXTtmb3IoZT0wO2U8NjQ7ZSsrKXRbZV09MDtWKHQscil9ZnVuY3Rpb24gWCh0LGUscixuKXt2YXIgaSxvLGE9bmV3IFVpbnQ4QXJyYXkoNjQpLGY9bmV3IFVpbnQ4QXJyYXkoNjQpLHM9bmV3IFVpbnQ4QXJyYXkoNjQpLHU9bmV3IEZsb2F0NjRBcnJheSg2NCksaD1bdHQoKSx0dCgpLHR0KCksdHQoKV07VShhLG4sMzIpLGFbMF0mPTI0OCxhWzMxXSY9MTI3LGFbMzFdfD02NDt2YXIgYz1yKzY0O2ZvcihpPTA7aTxyO2krKyl0WzY0K2ldPWVbaV07Zm9yKGk9MDtpPDMyO2krKyl0WzMyK2ldPWFbMzIraV07Zm9yKFUocyx0LnN1YmFycmF5KDMyKSxyKzMyKSxIKHMpLEsoaCxzKSxxKHQsaCksaT0zMjtpPDY0O2krKyl0W2ldPW5baV07Zm9yKFUoZix0LHIrNjQpLEgoZiksaT0wO2k8NjQ7aSsrKXVbaV09MDtmb3IoaT0wO2k8MzI7aSsrKXVbaV09c1tpXTtmb3IoaT0wO2k8MzI7aSsrKWZvcihvPTA7bzwzMjtvKyspdVtpK29dKz1mW2ldKmFbb107cmV0dXJuIFYodC5zdWJhcnJheSgzMiksdSksY31mdW5jdGlvbiBZKHQsZSl7dmFyIHI9dHQoKSxuPXR0KCksaT10dCgpLG89dHQoKSxhPXR0KCksZj10dCgpLHM9dHQoKTtyZXR1cm4gbSh0WzJdLG90KSxFKHRbMV0sZSksSShpLHRbMV0pLHgobyxpLGZ0KSxrKGksaSx0WzJdKSxBKG8sdFsyXSxvKSxJKGEsbyksSShmLGEpLHgocyxmLGEpLHgocixzLGkpLHgocixyLG8pLE8ocixyKSx4KHIscixpKSx4KHIscixvKSx4KHIscixvKSx4KHRbMF0scixvKSxJKG4sdFswXSkseChuLG4sbyksTShuLGkpJiZ4KHRbMF0sdFswXSxjdCksSShuLHRbMF0pLHgobixuLG8pLE0obixpKT8tMTooUyh0WzBdKT09PWVbMzFdPj43JiZrKHRbMF0saXQsdFswXSkseCh0WzNdLHRbMF0sdFsxXSksMCl9ZnVuY3Rpb24gVyh0LGUscixuKXt2YXIgaSxhLGY9bmV3IFVpbnQ4QXJyYXkoMzIpLHM9bmV3IFVpbnQ4QXJyYXkoNjQpLHU9W3R0KCksdHQoKSx0dCgpLHR0KCldLGg9W3R0KCksdHQoKSx0dCgpLHR0KCldO2lmKGE9LTEscjw2NClyZXR1cm4tMTtpZihZKGgsbikpcmV0dXJuLTE7Zm9yKGk9MDtpPHI7aSsrKXRbaV09ZVtpXTtmb3IoaT0wO2k8MzI7aSsrKXRbaSszMl09bltpXTtpZihVKHMsdCxyKSxIKHMpLEYodSxoLHMpLEsoaCxlLnN1YmFycmF5KDMyKSkseih1LGgpLHEoZix1KSxyLT02NCxvKGUsMCxmLDApKXtmb3IoaT0wO2k8cjtpKyspdFtpXT0wO3JldHVybi0xfWZvcihpPTA7aTxyO2krKyl0W2ldPWVbaSs2NF07cmV0dXJuIGE9cn1mdW5jdGlvbiBaKHQsZSl7aWYodC5sZW5ndGghPT1tdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQga2V5IHNpemVcIik7aWYoZS5sZW5ndGghPT1ndCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbm9uY2Ugc2l6ZVwiKX1mdW5jdGlvbiBKKHQsZSl7aWYodC5sZW5ndGghPT1FdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO2lmKGUubGVuZ3RoIT09QXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlY3JldCBrZXkgc2l6ZVwiKX1mdW5jdGlvbiAkKCl7dmFyIHQsZTtmb3IoZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspaWYoXCJbb2JqZWN0IFVpbnQ4QXJyYXldXCIhPT0odD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2VdKSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcInVuZXhwZWN0ZWQgdHlwZSBcIit0K1wiLCB1c2UgVWludDhBcnJheVwiKX1mdW5jdGlvbiBRKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV09MH12YXIgdHQ9ZnVuY3Rpb24odCl7dmFyIGUscj1uZXcgRmxvYXQ2NEFycmF5KDE2KTtpZih0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspcltlXT10W2VdO3JldHVybiByfSxldD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5vIFBSTkdcIil9LHJ0PW5ldyBVaW50OEFycmF5KDE2KSxudD1uZXcgVWludDhBcnJheSgzMik7bnRbMF09OTt2YXIgaXQ9dHQoKSxvdD10dChbMV0pLGF0PXR0KFs1NjEyOSwxXSksZnQ9dHQoWzMwODgzLDQ5NTMsMTk5MTQsMzAxODcsNTU0NjcsMTY3MDUsMjYzNywxMTIsNTk1NDQsMzA1ODUsMTY1MDUsMzYwMzksNjUxMzksMTExMTksMjc4ODYsMjA5OTVdKSxzdD10dChbNjE3ODUsOTkwNiwzOTgyOCw2MDM3NCw0NTM5OCwzMzQxMSw1Mjc0LDIyNCw1MzU1Miw2MTE3MSwzMzAxMCw2NTQyLDY0NzQzLDIyMjM5LDU1NzcyLDkyMjJdKSx1dD10dChbNTQ1NTQsMzY2NDUsMTE2MTYsNTE1NDIsNDI5MzAsMzgxODEsNTEwNDAsMjY5MjQsNTY0MTIsNjQ5ODIsNTc5MDUsNDkzMTYsMjE1MDIsNTI1OTAsMTQwMzUsODU1M10pLGh0PXR0KFsyNjIwMCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNCwyNjIxNF0pLGN0PXR0KFs0MTEzNiwxODk1OCw2OTUxLDUwNDE0LDU4NDg4LDQ0MzM1LDYxNTAsMTIwOTksNTUyMDcsMTU4NjcsMTUzLDExMDg1LDU3MDk5LDIwNDE3LDkzNDQsMTExMzldKSxkdD1uZXcgVWludDhBcnJheShbMTAxLDEyMCwxMTIsOTcsMTEwLDEwMCwzMiw1MSw1MCw0NSw5OCwxMjEsMTE2LDEwMSwzMiwxMDddKSxsdD1mdW5jdGlvbih0KXt0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5yPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5oPW5ldyBVaW50MTZBcnJheSgxMCksdGhpcy5wYWQ9bmV3IFVpbnQxNkFycmF5KDgpLHRoaXMubGVmdG92ZXI9MCx0aGlzLmZpbj0wO3ZhciBlLHIsbixpLG8sYSxmLHM7ZT0yNTUmdFswXXwoMjU1JnRbMV0pPDw4LHRoaXMuclswXT04MTkxJmUscj0yNTUmdFsyXXwoMjU1JnRbM10pPDw4LHRoaXMuclsxXT04MTkxJihlPj4+MTN8cjw8Myksbj0yNTUmdFs0XXwoMjU1JnRbNV0pPDw4LHRoaXMuclsyXT03OTM5JihyPj4+MTB8bjw8NiksaT0yNTUmdFs2XXwoMjU1JnRbN10pPDw4LHRoaXMuclszXT04MTkxJihuPj4+N3xpPDw5KSxvPTI1NSZ0WzhdfCgyNTUmdFs5XSk8PDgsdGhpcy5yWzRdPTI1NSYoaT4+PjR8bzw8MTIpLHRoaXMucls1XT1vPj4+MSY4MTkwLGE9MjU1JnRbMTBdfCgyNTUmdFsxMV0pPDw4LHRoaXMucls2XT04MTkxJihvPj4+MTR8YTw8MiksZj0yNTUmdFsxMl18KDI1NSZ0WzEzXSk8PDgsdGhpcy5yWzddPTgwNjUmKGE+Pj4xMXxmPDw1KSxzPTI1NSZ0WzE0XXwoMjU1JnRbMTVdKTw8OCx0aGlzLnJbOF09ODE5MSYoZj4+Pjh8czw8OCksdGhpcy5yWzldPXM+Pj41JjEyNyx0aGlzLnBhZFswXT0yNTUmdFsxNl18KDI1NSZ0WzE3XSk8PDgsdGhpcy5wYWRbMV09MjU1JnRbMThdfCgyNTUmdFsxOV0pPDw4LHRoaXMucGFkWzJdPTI1NSZ0WzIwXXwoMjU1JnRbMjFdKTw8OCx0aGlzLnBhZFszXT0yNTUmdFsyMl18KDI1NSZ0WzIzXSk8PDgsdGhpcy5wYWRbNF09MjU1JnRbMjRdfCgyNTUmdFsyNV0pPDw4LHRoaXMucGFkWzVdPTI1NSZ0WzI2XXwoMjU1JnRbMjddKTw8OCx0aGlzLnBhZFs2XT0yNTUmdFsyOF18KDI1NSZ0WzI5XSk8PDgsdGhpcy5wYWRbN109MjU1JnRbMzBdfCgyNTUmdFszMV0pPDw4fTtsdC5wcm90b3R5cGUuYmxvY2tzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG4saSxvLGEsZixzLHUsaCxjLGQsbCxwLGIsdix5LG0sZyx3LF8sTT10aGlzLmZpbj8wOjIwNDgsUz10aGlzLmhbMF0sRT10aGlzLmhbMV0sQT10aGlzLmhbMl0saz10aGlzLmhbM10seD10aGlzLmhbNF0sST10aGlzLmhbNV0sQj10aGlzLmhbNl0sTz10aGlzLmhbN10sUj10aGlzLmhbOF0sUD10aGlzLmhbOV0sVD10aGlzLnJbMF0saj10aGlzLnJbMV0sQz10aGlzLnJbMl0sTj10aGlzLnJbM10sTD10aGlzLnJbNF0sVT10aGlzLnJbNV0sej10aGlzLnJbNl0sRD10aGlzLnJbN10scT10aGlzLnJbOF0sRj10aGlzLnJbOV07cj49MTY7KW49MjU1JnRbZSswXXwoMjU1JnRbZSsxXSk8PDgsUys9ODE5MSZuLGk9MjU1JnRbZSsyXXwoMjU1JnRbZSszXSk8PDgsRSs9ODE5MSYobj4+PjEzfGk8PDMpLG89MjU1JnRbZSs0XXwoMjU1JnRbZSs1XSk8PDgsQSs9ODE5MSYoaT4+PjEwfG88PDYpLGE9MjU1JnRbZSs2XXwoMjU1JnRbZSs3XSk8PDgsays9ODE5MSYobz4+Pjd8YTw8OSksZj0yNTUmdFtlKzhdfCgyNTUmdFtlKzldKTw8OCx4Kz04MTkxJihhPj4+NHxmPDwxMiksSSs9Zj4+PjEmODE5MSxzPTI1NSZ0W2UrMTBdfCgyNTUmdFtlKzExXSk8PDgsQis9ODE5MSYoZj4+PjE0fHM8PDIpLHU9MjU1JnRbZSsxMl18KDI1NSZ0W2UrMTNdKTw8OCxPKz04MTkxJihzPj4+MTF8dTw8NSksaD0yNTUmdFtlKzE0XXwoMjU1JnRbZSsxNV0pPDw4LFIrPTgxOTEmKHU+Pj44fGg8PDgpLFArPWg+Pj41fE0sYz0wLGQ9YyxkKz1TKlQsZCs9RSooNSpGKSxkKz1BKig1KnEpLGQrPWsqKDUqRCksZCs9eCooNSp6KSxjPWQ+Pj4xMyxkJj04MTkxLGQrPUkqKDUqVSksZCs9QiooNSpMKSxkKz1PKig1Kk4pLGQrPVIqKDUqQyksZCs9UCooNSpqKSxjKz1kPj4+MTMsZCY9ODE5MSxsPWMsbCs9UypqLGwrPUUqVCxsKz1BKig1KkYpLGwrPWsqKDUqcSksbCs9eCooNSpEKSxjPWw+Pj4xMyxsJj04MTkxLGwrPUkqKDUqeiksbCs9QiooNSpVKSxsKz1PKig1KkwpLGwrPVIqKDUqTiksbCs9UCooNSpDKSxjKz1sPj4+MTMsbCY9ODE5MSxwPWMscCs9UypDLHArPUUqaixwKz1BKlQscCs9ayooNSpGKSxwKz14Kig1KnEpLGM9cD4+PjEzLHAmPTgxOTEscCs9SSooNSpEKSxwKz1CKig1KnopLHArPU8qKDUqVSkscCs9UiooNSpMKSxwKz1QKig1Kk4pLGMrPXA+Pj4xMyxwJj04MTkxLGI9YyxiKz1TKk4sYis9RSpDLGIrPUEqaixiKz1rKlQsYis9eCooNSpGKSxjPWI+Pj4xMyxiJj04MTkxLGIrPUkqKDUqcSksYis9QiooNSpEKSxiKz1PKig1KnopLGIrPVIqKDUqVSksYis9UCooNSpMKSxjKz1iPj4+MTMsYiY9ODE5MSx2PWMsdis9UypMLHYrPUUqTix2Kz1BKkMsdis9aypqLHYrPXgqVCxjPXY+Pj4xMyx2Jj04MTkxLHYrPUkqKDUqRiksdis9QiooNSpxKSx2Kz1PKig1KkQpLHYrPVIqKDUqeiksdis9UCooNSpVKSxjKz12Pj4+MTMsdiY9ODE5MSx5PWMseSs9UypVLHkrPUUqTCx5Kz1BKk4seSs9aypDLHkrPXgqaixjPXk+Pj4xMyx5Jj04MTkxLHkrPUkqVCx5Kz1CKig1KkYpLHkrPU8qKDUqcSkseSs9UiooNSpEKSx5Kz1QKig1KnopLGMrPXk+Pj4xMyx5Jj04MTkxLG09YyxtKz1TKnosbSs9RSpVLG0rPUEqTCxtKz1rKk4sbSs9eCpDLGM9bT4+PjEzLG0mPTgxOTEsbSs9SSpqLG0rPUIqVCxtKz1PKig1KkYpLG0rPVIqKDUqcSksbSs9UCooNSpEKSxjKz1tPj4+MTMsbSY9ODE5MSxnPWMsZys9UypELGcrPUUqeixnKz1BKlUsZys9aypMLGcrPXgqTixjPWc+Pj4xMyxnJj04MTkxLGcrPUkqQyxnKz1CKmosZys9TypULGcrPVIqKDUqRiksZys9UCooNSpxKSxjKz1nPj4+MTMsZyY9ODE5MSx3PWMsdys9UypxLHcrPUUqRCx3Kz1BKnosdys9aypVLHcrPXgqTCxjPXc+Pj4xMyx3Jj04MTkxLHcrPUkqTix3Kz1CKkMsdys9TypqLHcrPVIqVCx3Kz1QKig1KkYpLGMrPXc+Pj4xMyx3Jj04MTkxLF89YyxfKz1TKkYsXys9RSpxLF8rPUEqRCxfKz1rKnosXys9eCpVLGM9Xz4+PjEzLF8mPTgxOTEsXys9SSpMLF8rPUIqTixfKz1PKkMsXys9UipqLF8rPVAqVCxjKz1fPj4+MTMsXyY9ODE5MSxjPShjPDwyKStjfDAsYz1jK2R8MCxkPTgxOTEmYyxjPj4+PTEzLGwrPWMsUz1kLEU9bCxBPXAsaz1iLHg9dixJPXksQj1tLE89ZyxSPXcsUD1fLGUrPTE2LHItPTE2O3RoaXMuaFswXT1TLHRoaXMuaFsxXT1FLHRoaXMuaFsyXT1BLHRoaXMuaFszXT1rLHRoaXMuaFs0XT14LHRoaXMuaFs1XT1JLHRoaXMuaFs2XT1CLHRoaXMuaFs3XT1PLHRoaXMuaFs4XT1SLHRoaXMuaFs5XT1QfSxsdC5wcm90b3R5cGUuZmluaXNoPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbixpLG8sYT1uZXcgVWludDE2QXJyYXkoMTApO2lmKHRoaXMubGVmdG92ZXIpe2ZvcihvPXRoaXMubGVmdG92ZXIsdGhpcy5idWZmZXJbbysrXT0xO288MTY7bysrKXRoaXMuYnVmZmVyW29dPTA7dGhpcy5maW49MSx0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwwLDE2KX1mb3Iocj10aGlzLmhbMV0+Pj4xMyx0aGlzLmhbMV0mPTgxOTEsbz0yO288MTA7bysrKXRoaXMuaFtvXSs9cixyPXRoaXMuaFtvXT4+PjEzLHRoaXMuaFtvXSY9ODE5MTtmb3IodGhpcy5oWzBdKz01KnIscj10aGlzLmhbMF0+Pj4xMyx0aGlzLmhbMF0mPTgxOTEsdGhpcy5oWzFdKz1yLHI9dGhpcy5oWzFdPj4+MTMsdGhpcy5oWzFdJj04MTkxLHRoaXMuaFsyXSs9cixhWzBdPXRoaXMuaFswXSs1LHI9YVswXT4+PjEzLGFbMF0mPTgxOTEsbz0xO288MTA7bysrKWFbb109dGhpcy5oW29dK3Iscj1hW29dPj4+MTMsYVtvXSY9ODE5MTtmb3IoYVs5XS09ODE5MixuPSgxXnIpLTEsbz0wO288MTA7bysrKWFbb10mPW47Zm9yKG49fm4sbz0wO288MTA7bysrKXRoaXMuaFtvXT10aGlzLmhbb10mbnxhW29dO2Zvcih0aGlzLmhbMF09NjU1MzUmKHRoaXMuaFswXXx0aGlzLmhbMV08PDEzKSx0aGlzLmhbMV09NjU1MzUmKHRoaXMuaFsxXT4+PjN8dGhpcy5oWzJdPDwxMCksdGhpcy5oWzJdPTY1NTM1Jih0aGlzLmhbMl0+Pj42fHRoaXMuaFszXTw8NyksdGhpcy5oWzNdPTY1NTM1Jih0aGlzLmhbM10+Pj45fHRoaXMuaFs0XTw8NCksdGhpcy5oWzRdPTY1NTM1Jih0aGlzLmhbNF0+Pj4xMnx0aGlzLmhbNV08PDF8dGhpcy5oWzZdPDwxNCksdGhpcy5oWzVdPTY1NTM1Jih0aGlzLmhbNl0+Pj4yfHRoaXMuaFs3XTw8MTEpLHRoaXMuaFs2XT02NTUzNSYodGhpcy5oWzddPj4+NXx0aGlzLmhbOF08PDgpLHRoaXMuaFs3XT02NTUzNSYodGhpcy5oWzhdPj4+OHx0aGlzLmhbOV08PDUpLGk9dGhpcy5oWzBdK3RoaXMucGFkWzBdLHRoaXMuaFswXT02NTUzNSZpLG89MTtvPDg7bysrKWk9KHRoaXMuaFtvXSt0aGlzLnBhZFtvXXwwKSsoaT4+PjE2KXwwLHRoaXMuaFtvXT02NTUzNSZpO3RbZSswXT10aGlzLmhbMF0+Pj4wJjI1NSx0W2UrMV09dGhpcy5oWzBdPj4+OCYyNTUsdFtlKzJdPXRoaXMuaFsxXT4+PjAmMjU1LHRbZSszXT10aGlzLmhbMV0+Pj44JjI1NSx0W2UrNF09dGhpcy5oWzJdPj4+MCYyNTUsdFtlKzVdPXRoaXMuaFsyXT4+PjgmMjU1LHRbZSs2XT10aGlzLmhbM10+Pj4wJjI1NSx0W2UrN109dGhpcy5oWzNdPj4+OCYyNTUsdFtlKzhdPXRoaXMuaFs0XT4+PjAmMjU1LHRbZSs5XT10aGlzLmhbNF0+Pj44JjI1NSx0W2UrMTBdPXRoaXMuaFs1XT4+PjAmMjU1LHRbZSsxMV09dGhpcy5oWzVdPj4+OCYyNTUsdFtlKzEyXT10aGlzLmhbNl0+Pj4wJjI1NSx0W2UrMTNdPXRoaXMuaFs2XT4+PjgmMjU1LHRbZSsxNF09dGhpcy5oWzddPj4+MCYyNTUsdFtlKzE1XT10aGlzLmhbN10+Pj44JjI1NX0sbHQucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUscil7dmFyIG4saTtpZih0aGlzLmxlZnRvdmVyKXtmb3IoaT0xNi10aGlzLmxlZnRvdmVyLGk+ciYmKGk9ciksbj0wO248aTtuKyspdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlcituXT10W2Urbl07aWYoci09aSxlKz1pLHRoaXMubGVmdG92ZXIrPWksdGhpcy5sZWZ0b3ZlcjwxNilyZXR1cm47dGhpcy5ibG9ja3ModGhpcy5idWZmZXIsMCwxNiksdGhpcy5sZWZ0b3Zlcj0wfWlmKHI+PTE2JiYoaT1yLXIlMTYsdGhpcy5ibG9ja3ModCxlLGkpLGUrPWksci09aSkscil7Zm9yKG49MDtuPHI7bisrKXRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIrbl09dFtlK25dO3RoaXMubGVmdG92ZXIrPXJ9fTt2YXIgcHQ9dixidD15LHZ0PVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0seXQ9bmV3IEZsb2F0NjRBcnJheShbMjM3LDIxMSwyNDUsOTIsMjYsOTksMTgsODgsMjE0LDE1NiwyNDcsMTYyLDIyMiwyNDksMjIyLDIwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDE2XSksbXQ9MzIsZ3Q9MjQsd3Q9MzIsX3Q9MTYsTXQ9MzIsU3Q9MzIsRXQ9MzIsQXQ9MzIsa3Q9MzIseHQ9Z3QsSXQ9d3QsQnQ9X3QsT3Q9NjQsUnQ9MzIsUHQ9NjQsVHQ9MzIsanQ9NjQ7dC5sb3dsZXZlbD17Y3J5cHRvX2NvcmVfaHNhbHNhMjA6dSxjcnlwdG9fc3RyZWFtX3hvcjpsLGNyeXB0b19zdHJlYW06ZCxjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yOmgsY3J5cHRvX3N0cmVhbV9zYWxzYTIwOmMsY3J5cHRvX29uZXRpbWVhdXRoOnAsY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeTpiLGNyeXB0b192ZXJpZnlfMTY6aSxjcnlwdG9fdmVyaWZ5XzMyOm8sY3J5cHRvX3NlY3JldGJveDp2LGNyeXB0b19zZWNyZXRib3hfb3Blbjp5LGNyeXB0b19zY2FsYXJtdWx0OlIsY3J5cHRvX3NjYWxhcm11bHRfYmFzZTpQLGNyeXB0b19ib3hfYmVmb3Jlbm06aixjcnlwdG9fYm94X2FmdGVybm06cHQsY3J5cHRvX2JveDpDLGNyeXB0b19ib3hfb3BlbjpOLGNyeXB0b19ib3hfa2V5cGFpcjpULGNyeXB0b19oYXNoOlUsY3J5cHRvX3NpZ246WCxjcnlwdG9fc2lnbl9rZXlwYWlyOkcsY3J5cHRvX3NpZ25fb3BlbjpXLGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM6bXQsY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOmd0LGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOnd0LGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTOl90LGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOk10LGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOlN0LGNyeXB0b19ib3hfUFVCTElDS0VZQllURVM6RXQsY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzpBdCxjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6a3QsY3J5cHRvX2JveF9OT05DRUJZVEVTOnh0LGNyeXB0b19ib3hfWkVST0JZVEVTOkl0LGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOkJ0LGNyeXB0b19zaWduX0JZVEVTOk90LGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOlJ0LGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOlB0LGNyeXB0b19zaWduX1NFRURCWVRFUzpUdCxjcnlwdG9faGFzaF9CWVRFUzpqdH0sdC51dGlsfHwodC51dGlsPXt9LHQudXRpbC5kZWNvZGVVVEY4PXQudXRpbC5lbmNvZGVVVEY4PXQudXRpbC5lbmNvZGVCYXNlNjQ9dC51dGlsLmRlY29kZUJhc2U2ND1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIm5hY2wudXRpbCBtb3ZlZCBpbnRvIHNlcGFyYXRlIHBhY2thZ2U6IGh0dHBzOi8vZ2l0aHViLmNvbS9kY2hlc3QvdHdlZXRuYWNsLXV0aWwtanNcIil9KSx0LnJhbmRvbUJ5dGVzPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiBldChlLHQpLGV9LHQuc2VjcmV0Ym94PWZ1bmN0aW9uKHQsZSxyKXskKHQsZSxyKSxaKHIsZSk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KHd0K3QubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKSxvPTA7bzx0Lmxlbmd0aDtvKyspbltvK3d0XT10W29dO3JldHVybiB2KGksbixuLmxlbmd0aCxlLHIpLGkuc3ViYXJyYXkoX3QpfSx0LnNlY3JldGJveC5vcGVuPWZ1bmN0aW9uKHQsZSxyKXskKHQsZSxyKSxaKHIsZSk7Zm9yKHZhciBuPW5ldyBVaW50OEFycmF5KF90K3QubGVuZ3RoKSxpPW5ldyBVaW50OEFycmF5KG4ubGVuZ3RoKSxvPTA7bzx0Lmxlbmd0aDtvKyspbltvK190XT10W29dO3JldHVybiEobi5sZW5ndGg8MzIpJiYoMD09PXkoaSxuLG4ubGVuZ3RoLGUscikmJmkuc3ViYXJyYXkod3QpKX0sdC5zZWNyZXRib3gua2V5TGVuZ3RoPW10LHQuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoPWd0LHQuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoPV90LHQuc2NhbGFyTXVsdD1mdW5jdGlvbih0LGUpe2lmKCQodCxlKSx0Lmxlbmd0aCE9PVN0KXRocm93IG5ldyBFcnJvcihcImJhZCBuIHNpemVcIik7aWYoZS5sZW5ndGghPT1NdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcCBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KE10KTtyZXR1cm4gUihyLHQsZSkscn0sdC5zY2FsYXJNdWx0LmJhc2U9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVN0KXRocm93IG5ldyBFcnJvcihcImJhZCBuIHNpemVcIik7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoTXQpO3JldHVybiBQKGUsdCksZX0sdC5zY2FsYXJNdWx0LnNjYWxhckxlbmd0aD1TdCx0LnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoPU10LHQuYm94PWZ1bmN0aW9uKGUscixuLGkpe3ZhciBvPXQuYm94LmJlZm9yZShuLGkpO3JldHVybiB0LnNlY3JldGJveChlLHIsbyl9LHQuYm94LmJlZm9yZT1mdW5jdGlvbih0LGUpeyQodCxlKSxKKHQsZSk7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoa3QpO3JldHVybiBqKHIsdCxlKSxyfSx0LmJveC5hZnRlcj10LnNlY3JldGJveCx0LmJveC5vcGVuPWZ1bmN0aW9uKGUscixuLGkpe3ZhciBvPXQuYm94LmJlZm9yZShuLGkpO3JldHVybiB0LnNlY3JldGJveC5vcGVuKGUscixvKX0sdC5ib3gub3Blbi5hZnRlcj10LnNlY3JldGJveC5vcGVuLHQuYm94LmtleVBhaXI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVWludDhBcnJheShFdCksZT1uZXcgVWludDhBcnJheShBdCk7cmV0dXJuIFQodCxlKSx7cHVibGljS2V5OnQsc2VjcmV0S2V5OmV9fSx0LmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PUF0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoRXQpO3JldHVybiBQKGUsdCkse3B1YmxpY0tleTplLHNlY3JldEtleTpuZXcgVWludDhBcnJheSh0KX19LHQuYm94LnB1YmxpY0tleUxlbmd0aD1FdCx0LmJveC5zZWNyZXRLZXlMZW5ndGg9QXQsdC5ib3guc2hhcmVkS2V5TGVuZ3RoPWt0LHQuYm94Lm5vbmNlTGVuZ3RoPXh0LHQuYm94Lm92ZXJoZWFkTGVuZ3RoPXQuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoLHQuc2lnbj1mdW5jdGlvbih0LGUpe2lmKCQodCxlKSxlLmxlbmd0aCE9PVB0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpO3JldHVybiBYKHIsdCx0Lmxlbmd0aCxlKSxyfSx0LnNpZ24ub3Blbj1mdW5jdGlvbih0LGUpe2lmKDIhPT1hcmd1bWVudHMubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIm5hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT9cIik7aWYoJCh0LGUpLGUubGVuZ3RoIT09UnQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCksbj1XKHIsdCx0Lmxlbmd0aCxlKTtpZihuPDApcmV0dXJuIG51bGw7Zm9yKHZhciBpPW5ldyBVaW50OEFycmF5KG4pLG89MDtvPGkubGVuZ3RoO28rKylpW29dPXJbb107cmV0dXJuIGl9LHQuc2lnbi5kZXRhY2hlZD1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj10LnNpZ24oZSxyKSxpPW5ldyBVaW50OEFycmF5KE90KSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1uW29dO3JldHVybiBpfSx0LnNpZ24uZGV0YWNoZWQudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyKXtpZigkKHQsZSxyKSxlLmxlbmd0aCE9PU90KXRocm93IG5ldyBFcnJvcihcImJhZCBzaWduYXR1cmUgc2l6ZVwiKTtpZihyLmxlbmd0aCE9PVJ0KXRocm93IG5ldyBFcnJvcihcImJhZCBwdWJsaWMga2V5IHNpemVcIik7dmFyIG4saT1uZXcgVWludDhBcnJheShPdCt0Lmxlbmd0aCksbz1uZXcgVWludDhBcnJheShPdCt0Lmxlbmd0aCk7Zm9yKG49MDtuPE90O24rKylpW25dPWVbbl07Zm9yKG49MDtuPHQubGVuZ3RoO24rKylpW24rT3RdPXRbbl07cmV0dXJuIFcobyxpLGkubGVuZ3RoLHIpPj0wfSx0LnNpZ24ua2V5UGFpcj1mdW5jdGlvbigpe3ZhciB0PW5ldyBVaW50OEFycmF5KFJ0KSxlPW5ldyBVaW50OEFycmF5KFB0KTtyZXR1cm4gRyh0LGUpLHtwdWJsaWNLZXk6dCxzZWNyZXRLZXk6ZX19LHQuc2lnbi5rZXlQYWlyLmZyb21TZWNyZXRLZXk9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVB0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIik7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KFJ0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10WzMyK3JdO3JldHVybntwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6bmV3IFVpbnQ4QXJyYXkodCl9fSx0LnNpZ24ua2V5UGFpci5mcm9tU2VlZD1mdW5jdGlvbih0KXtpZigkKHQpLHQubGVuZ3RoIT09VHQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHNlZWQgc2l6ZVwiKTtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkoUnQpLHI9bmV3IFVpbnQ4QXJyYXkoUHQpLG49MDtuPDMyO24rKylyW25dPXRbbl07cmV0dXJuIEcoZSxyLCEwKSx7cHVibGljS2V5OmUsc2VjcmV0S2V5OnJ9fSx0LnNpZ24ucHVibGljS2V5TGVuZ3RoPVJ0LHQuc2lnbi5zZWNyZXRLZXlMZW5ndGg9UHQsdC5zaWduLnNlZWRMZW5ndGg9VHQsdC5zaWduLnNpZ25hdHVyZUxlbmd0aD1PdCx0Lmhhc2g9ZnVuY3Rpb24odCl7JCh0KTt2YXIgZT1uZXcgVWludDhBcnJheShqdCk7cmV0dXJuIFUoZSx0LHQubGVuZ3RoKSxlfSx0Lmhhc2guaGFzaExlbmd0aD1qdCx0LnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiAkKHQsZSksMCE9PXQubGVuZ3RoJiYwIT09ZS5sZW5ndGgmJih0Lmxlbmd0aD09PWUubGVuZ3RoJiYwPT09bih0LDAsZSwwLHQubGVuZ3RoKSl9LHQuc2V0UFJORz1mdW5jdGlvbih0KXtldD10fSxmdW5jdGlvbigpe3ZhciBlPVwidW5kZWZpbmVkXCIhPXR5cGVvZiBzZWxmP3NlbGYuY3J5cHRvfHxzZWxmLm1zQ3J5cHRvOm51bGw7aWYoZSYmZS5nZXRSYW5kb21WYWx1ZXMpe3ZhciBuPTY1NTM2O3Quc2V0UFJORyhmdW5jdGlvbih0LHIpe3ZhciBpLG89bmV3IFVpbnQ4QXJyYXkocik7Zm9yKGk9MDtpPHI7aSs9billLmdldFJhbmRvbVZhbHVlcyhvLnN1YmFycmF5KGksaStNYXRoLm1pbihyLWksbikpKTtmb3IoaT0wO2k8cjtpKyspdFtpXT1vW2ldO1Eobyl9KX1lbHNlIGU9cig2MDgpLGUmJmUucmFuZG9tQnl0ZXMmJnQuc2V0UFJORyhmdW5jdGlvbih0LHIpe3ZhciBuLGk9ZS5yYW5kb21CeXRlcyhyKTtmb3Iobj0wO248cjtuKyspdFtuXT1pW25dO1EoaSl9KX0oKX0oXCJ1bmRlZmluZWRcIiE9dHlwZW9mIHQmJnQuZXhwb3J0cz90LmV4cG9ydHM6c2VsZi5uYWNsPXNlbGYubmFjbHx8e30pfSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiByKHQpe3ZhciBlPXQubGVuZ3RoO2lmKGUlND4wKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDRcIik7cmV0dXJuXCI9XCI9PT10W2UtMl0/MjpcIj1cIj09PXRbZS0xXT8xOjB9ZnVuY3Rpb24gbih0KXtyZXR1cm4gMyp0Lmxlbmd0aC80LXIodCl9ZnVuY3Rpb24gaSh0KXt2YXIgZSxuLGksbyxhLGYscz10Lmxlbmd0aDthPXIodCksZj1uZXcgaCgzKnMvNC1hKSxpPWE+MD9zLTQ6czt2YXIgYz0wO2ZvcihlPTAsbj0wO2U8aTtlKz00LG4rPTMpbz11W3QuY2hhckNvZGVBdChlKV08PDE4fHVbdC5jaGFyQ29kZUF0KGUrMSldPDwxMnx1W3QuY2hhckNvZGVBdChlKzIpXTw8Nnx1W3QuY2hhckNvZGVBdChlKzMpXSxmW2MrK109bz4+MTYmMjU1LGZbYysrXT1vPj44JjI1NSxmW2MrK109MjU1Jm87cmV0dXJuIDI9PT1hPyhvPXVbdC5jaGFyQ29kZUF0KGUpXTw8Mnx1W3QuY2hhckNvZGVBdChlKzEpXT4+NCxmW2MrK109MjU1Jm8pOjE9PT1hJiYobz11W3QuY2hhckNvZGVBdChlKV08PDEwfHVbdC5jaGFyQ29kZUF0KGUrMSldPDw0fHVbdC5jaGFyQ29kZUF0KGUrMildPj4yLGZbYysrXT1vPj44JjI1NSxmW2MrK109MjU1Jm8pLGZ9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gc1t0Pj4xOCY2M10rc1t0Pj4xMiY2M10rc1t0Pj42JjYzXStzWzYzJnRdfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbixpPVtdLGE9ZTthPHI7YSs9MyluPSh0W2FdPDwxNikrKHRbYSsxXTw8OCkrdFthKzJdLGkucHVzaChvKG4pKTtyZXR1cm4gaS5qb2luKFwiXCIpfWZ1bmN0aW9uIGYodCl7Zm9yKHZhciBlLHI9dC5sZW5ndGgsbj1yJTMsaT1cIlwiLG89W10sZj0xNjM4Myx1PTAsaD1yLW47dTxoO3UrPWYpby5wdXNoKGEodCx1LHUrZj5oP2g6dStmKSk7cmV0dXJuIDE9PT1uPyhlPXRbci0xXSxpKz1zW2U+PjJdLGkrPXNbZTw8NCY2M10saSs9XCI9PVwiKToyPT09biYmKGU9KHRbci0yXTw8OCkrdFtyLTFdLGkrPXNbZT4+MTBdLGkrPXNbZT4+NCY2M10saSs9c1tlPDwyJjYzXSxpKz1cIj1cIiksby5wdXNoKGkpLG8uam9pbihcIlwiKX1lLmJ5dGVMZW5ndGg9bixlLnRvQnl0ZUFycmF5PWksZS5mcm9tQnl0ZUFycmF5PWY7Zm9yKHZhciBzPVtdLHU9W10saD1cInVuZGVmaW5lZFwiIT10eXBlb2YgVWludDhBcnJheT9VaW50OEFycmF5OkFycmF5LGM9XCJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvXCIsZD0wLGw9Yy5sZW5ndGg7ZDxsOysrZClzW2RdPWNbZF0sdVtjLmNoYXJDb2RlQXQoZCldPWQ7dVtcIi1cIi5jaGFyQ29kZUF0KDApXT02Mix1W1wiX1wiLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbih0LGUpe2UucmVhZD1mdW5jdGlvbih0LGUscixuLGkpe3ZhciBvLGEsZj04Kmktbi0xLHM9KDE8PGYpLTEsdT1zPj4xLGg9LTcsYz1yP2ktMTowLGQ9cj8tMToxLGw9dFtlK2NdO2ZvcihjKz1kLG89bCYoMTw8LWgpLTEsbD4+PS1oLGgrPWY7aD4wO289MjU2Km8rdFtlK2NdLGMrPWQsaC09OCk7Zm9yKGE9byYoMTw8LWgpLTEsbz4+PS1oLGgrPW47aD4wO2E9MjU2KmErdFtlK2NdLGMrPWQsaC09OCk7aWYoMD09PW8pbz0xLXU7ZWxzZXtpZihvPT09cylyZXR1cm4gYT9OYU46KGw/LTE6MSkqKDEvMCk7YSs9TWF0aC5wb3coMixuKSxvLT11fXJldHVybihsPy0xOjEpKmEqTWF0aC5wb3coMixvLW4pfSxlLndyaXRlPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgYSxmLHMsdT04Km8taS0xLGg9KDE8PHUpLTEsYz1oPj4xLGQ9MjM9PT1pP01hdGgucG93KDIsLTI0KS1NYXRoLnBvdygyLC03Nyk6MCxsPW4/MDpvLTEscD1uPzE6LTEsYj1lPDB8fDA9PT1lJiYxL2U8MD8xOjA7Zm9yKGU9TWF0aC5hYnMoZSksaXNOYU4oZSl8fGU9PT0xLzA/KGY9aXNOYU4oZSk/MTowLGE9aCk6KGE9TWF0aC5mbG9vcihNYXRoLmxvZyhlKS9NYXRoLkxOMiksZSoocz1NYXRoLnBvdygyLC1hKSk8MSYmKGEtLSxzKj0yKSxlKz1hK2M+PTE/ZC9zOmQqTWF0aC5wb3coMiwxLWMpLGUqcz49MiYmKGErKyxzLz0yKSxhK2M+PWg/KGY9MCxhPWgpOmErYz49MT8oZj0oZSpzLTEpKk1hdGgucG93KDIsaSksYSs9Yyk6KGY9ZSpNYXRoLnBvdygyLGMtMSkqTWF0aC5wb3coMixpKSxhPTApKTtpPj04O3RbcitsXT0yNTUmZixsKz1wLGYvPTI1NixpLT04KTtmb3IoYT1hPDxpfGYsdSs9aTt1PjA7dFtyK2xdPTI1NSZhLGwrPXAsYS89MjU2LHUtPTgpO3RbcitsLXBdfD0xMjgqYn19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKHQpe3JldHVyblwiW29iamVjdCBBcnJheV1cIj09ci5jYWxsKHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcixuO2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcj1kW3RdLmtleSxuPWRbdF0uaXY7ZWxzZXtpZighY1t0XSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3I9OCpjW3RdLmtleSxuPWNbdF0uaXZ9dmFyIGk9cyhlLCExLHIsbik7cmV0dXJuIG8odCxpLmtleSxpLml2KX1mdW5jdGlvbiBpKHQsZSl7dmFyIHIsbjtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXI9ZFt0XS5rZXksbj1kW3RdLml2O2Vsc2V7aWYoIWNbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtyPTgqY1t0XS5rZXksbj1jW3RdLml2fXZhciBpPXMoZSwhMSxyLG4pO3JldHVybiBhKHQsaS5rZXksaS5pdil9ZnVuY3Rpb24gbyh0LGUscil7aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyZXR1cm4gdS5jcmVhdGVDaXBoZXJpdih0LGUscik7aWYoY1t0XSlyZXR1cm4gbmV3IGgoe2tleTplLGl2OnIsbW9kZTp0fSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1mdW5jdGlvbiBhKHQsZSxyKXtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXJldHVybiB1LmNyZWF0ZURlY2lwaGVyaXYodCxlLHIpO2lmKGNbdF0pcmV0dXJuIG5ldyBoKHtrZXk6ZSxpdjpyLG1vZGU6dCxkZWNyeXB0OiEwfSk7dGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKX1mdW5jdGlvbiBmKCl7cmV0dXJuIE9iamVjdC5rZXlzKGMpLmNvbmNhdCh1LmdldENpcGhlcnMoKSl9dmFyIHM9cigxNDYpLHU9cig0OTQpLGg9cig0OTgpLGM9cig0OTkpLGQ9cig5NSk7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9bixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9byxlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9aSxlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PWEsZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9Zn0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gT2JqZWN0LmtleXMoYSl9dmFyIGk9cig0OTYpO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPWkuY3JlYXRlQ2lwaGVyLGUuY3JlYXRlQ2lwaGVyaXY9ZS5DaXBoZXJpdj1pLmNyZWF0ZUNpcGhlcml2O3ZhciBvPXIoNDk1KTtlLmNyZWF0ZURlY2lwaGVyPWUuRGVjaXBoZXI9by5jcmVhdGVEZWNpcGhlcixlLmNyZWF0ZURlY2lwaGVyaXY9ZS5EZWNpcGhlcml2PW8uY3JlYXRlRGVjaXBoZXJpdjt2YXIgYT1yKDk1KTtlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1ufSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgcy5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10WzE1XSxyPS0xOysrcjxlOylpZih0W3IrKDE2LWUpXSE9PWUpdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGRlY3J5cHQgZGF0YVwiKTtpZigxNiE9PWUpcmV0dXJuIHQuc2xpY2UoMCwxNi1lKX1mdW5jdGlvbiBhKGUscixpKXt2YXIgbz1jW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQoYltvLm1vZGVdLHIsaSwhMCk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwoYltvLm1vZGVdLHIsaSwhMCk6bmV3IG4oYltvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWNbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPXAoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gYSh0LG4ua2V5LG4uaXYpfXZhciBzPXIoOTQpLHU9cig5NyksaD1yKDIpLGM9cig5NSksZD1yKDIxMCksbD1yKDIwMykscD1yKDE0Nik7aChuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyluPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIG8odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCkpO2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlO3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfTt2YXIgYj17RUNCOnIoMjA4KSxDQkM6cigyMDQpLENGQjpyKDIwNSksQ0ZCODpyKDIwNyksQ0ZCMTpyKDIwNiksT0ZCOnIoMjA5KSxDVFI6cig5NiksR0NNOnIoOTYpfTtlLmNyZWF0ZURlY2lwaGVyPWYsZS5jcmVhdGVEZWNpcGhlcml2PWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8ocy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2NpcGhlcj1uZXcgZi5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKGUscixpKXt2YXIgbz1oW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQocFtvLm1vZGVdLHIsaSk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwocFtvLm1vZGVdLHIsaSk6bmV3IG4ocFtvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWhbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPWMoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gbyh0LG4ua2V5LG4uaXYpfXZhciBmPXIoOTQpLHM9cig5NyksdT1yKDIpLGg9cig5NSksYz1yKDE0NiksZD1yKDIxMCksbD1yKDIwMyk7dShuLHMpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQoKTspbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB0PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpLHRoaXMuX2NpcGhlci5zY3J1YigpLHQ7aWYoXCIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiIT09dC50b1N0cmluZyhcImhleFwiKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0fXJldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0xNi10aGlzLmNhY2hlLmxlbmd0aCxyPW5ldyB0KGUpLG49LTE7KytuPGU7KXIud3JpdGVVSW50OChlLG4pO3ZhciBpPXQuY29uY2F0KFt0aGlzLmNhY2hlLHJdKTtyZXR1cm4gaX07dmFyIHA9e0VDQjpyKDIwOCksQ0JDOnIoMjA0KSxDRkI6cigyMDUpLENGQjg6cigyMDcpLENGQjE6cigyMDYpLE9GQjpyKDIwOSksQ1RSOnIoOTYpLEdDTTpyKDk2KX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyk7dmFyIHIsbj10Lm1vZGUudG9Mb3dlckNhc2UoKSxvPWZbbl07cj10LmRlY3J5cHQ/XCJkZWNyeXB0XCI6XCJlbmNyeXB0XCI7dmFyIGE9dC5rZXk7XCJkZXMtZWRlXCIhPT1uJiZcImRlcy1lZGUtY2JjXCIhPT1ufHwoYT1lLmNvbmNhdChbYSxhLnNsaWNlKDAsOCldKSk7dmFyIHM9dC5pdjt0aGlzLl9kZXM9by5jcmVhdGUoe2tleTphLGl2OnMsdHlwZTpyfSl9dmFyIGk9cig1MDApLG89cigxNDUpLGE9cigyKSxmPXtcImRlcy1lZGUzLWNiY1wiOm8uQ0JDLmluc3RhbnRpYXRlKG8uRURFKSxcImRlcy1lZGUzXCI6by5FREUsXCJkZXMtZWRlLWNiY1wiOm8uQ0JDLmluc3RhbnRpYXRlKG8uRURFKSxcImRlcy1lZGVcIjpvLkVERSxcImRlcy1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkRFUyksXCJkZXMtZWNiXCI6by5ERVN9O2YuZGVzPWZbXCJkZXMtY2JjXCJdLGYuZGVzMz1mW1wiZGVzLWVkZTMtY2JjXCJdLHQuZXhwb3J0cz1uLGEobixpKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0aGlzLl9kZXMudXBkYXRlKHQpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBlKHRoaXMuX2Rlcy5maW5hbCgpKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJkZXMtZWNiXCJdPXtrZXk6OCxpdjowfSxlW1wiZGVzLWNiY1wiXT1lLmRlcz17a2V5OjgsaXY6OH0sZVtcImRlcy1lZGUzLWNiY1wiXT1lLmRlczM9e2tleToyNCxpdjo4fSxlW1wiZGVzLWVkZTNcIl09e2tleToyNCxpdjowfSxlW1wiZGVzLWVkZS1jYmNcIl09e2tleToxNixpdjo4fSxlW1wiZGVzLWVkZVwiXT17a2V5OjE2LGl2OjB9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtvLmVxdWFsKHQubGVuZ3RoLDgsXCJJbnZhbGlkIElWIGxlbmd0aFwiKSx0aGlzLml2PW5ldyBBcnJheSg4KTtmb3IodmFyIGU9MDtlPHRoaXMuaXYubGVuZ3RoO2UrKyl0aGlzLml2W2VdPXRbZV19ZnVuY3Rpb24gaSh0KXtmdW5jdGlvbiBlKGUpe3QuY2FsbCh0aGlzLGUpLHRoaXMuX2NiY0luaXQoKX1hKGUsdCk7Zm9yKHZhciByPU9iamVjdC5rZXlzKGYpLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIGk9cltuXTtlLnByb3RvdHlwZVtpXT1mW2ldfXJldHVybiBlLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodCl9LGV9dmFyIG89cig5OCksYT1yKDIpLGY9e307ZS5pbnN0YW50aWF0ZT1pLGYuX2NiY0luaXQ9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbih0aGlzLm9wdGlvbnMuaXYpO3RoaXMuX2NiY1N0YXRlPXR9LGYuX3VwZGF0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT10aGlzLl9jYmNTdGF0ZSxvPXRoaXMuY29uc3RydWN0b3Iuc3VwZXJfLnByb3RvdHlwZSxhPWkuaXY7aWYoXCJlbmNyeXB0XCI9PT10aGlzLnR5cGUpe2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl1ePXRbZStmXTtvLl91cGRhdGUuY2FsbCh0aGlzLGEsMCxyLG4pO2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl09cltuK2ZdfWVsc2V7by5fdXBkYXRlLmNhbGwodGhpcyx0LGUscixuKTtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylyW24rZl1ePWFbZl07Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspYVtmXT10W2UrZl19fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy5vcHRpb25zPXQsdGhpcy50eXBlPXRoaXMub3B0aW9ucy50eXBlLHRoaXMuYmxvY2tTaXplPTgsdGhpcy5faW5pdCgpLHRoaXMuYnVmZmVyPW5ldyBBcnJheSh0aGlzLmJsb2NrU2l6ZSksdGhpcy5idWZmZXJPZmY9MH12YXIgaT1yKDk4KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dC5sZW5ndGg/W106XCJkZWNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fdXBkYXRlRGVjcnlwdCh0KTp0aGlzLl91cGRhdGVFbmNyeXB0KHQpfSxuLnByb3RvdHlwZS5fYnVmZmVyPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPU1hdGgubWluKHRoaXMuYnVmZmVyLmxlbmd0aC10aGlzLmJ1ZmZlck9mZix0Lmxlbmd0aC1lKSxuPTA7bjxyO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlck9mZituXT10W2Urbl07cmV0dXJuIHRoaXMuYnVmZmVyT2ZmKz1yLHJ9LG4ucHJvdG90eXBlLl9mbHVzaEJ1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCx0LGUpLHRoaXMuYnVmZmVyT2ZmPTAsdGhpcy5ibG9ja1NpemV9LG4ucHJvdG90eXBlLl91cGRhdGVFbmNyeXB0PWZ1bmN0aW9uKHQpe3ZhciBlPTAscj0wLG49KHRoaXMuYnVmZmVyT2ZmK3QubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZXwwLGk9bmV3IEFycmF5KG4qdGhpcy5ibG9ja1NpemUpOzAhPT10aGlzLmJ1ZmZlck9mZiYmKGUrPXRoaXMuX2J1ZmZlcih0LGUpLHRoaXMuYnVmZmVyT2ZmPT09dGhpcy5idWZmZXIubGVuZ3RoJiYocis9dGhpcy5fZmx1c2hCdWZmZXIoaSxyKSkpO2Zvcih2YXIgbz10Lmxlbmd0aC0odC5sZW5ndGgtZSkldGhpcy5ibG9ja1NpemU7ZTxvO2UrPXRoaXMuYmxvY2tTaXplKXRoaXMuX3VwZGF0ZSh0LGUsaSxyKSxyKz10aGlzLmJsb2NrU2l6ZTtmb3IoO2U8dC5sZW5ndGg7ZSsrLHRoaXMuYnVmZmVyT2ZmKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmZdPXRbZV07cmV0dXJuIGl9LG4ucHJvdG90eXBlLl91cGRhdGVEZWNyeXB0PWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MCxuPU1hdGguY2VpbCgodGhpcy5idWZmZXJPZmYrdC5sZW5ndGgpL3RoaXMuYmxvY2tTaXplKS0xLGk9bmV3IEFycmF5KG4qdGhpcy5ibG9ja1NpemUpO24+MDtuLS0pZSs9dGhpcy5fYnVmZmVyKHQsZSkscis9dGhpcy5fZmx1c2hCdWZmZXIoaSxyKTtyZXR1cm4gZSs9dGhpcy5fYnVmZmVyKHQsZSksaX0sbi5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCl7dmFyIGU7dCYmKGU9dGhpcy51cGRhdGUodCkpO3ZhciByO3JldHVybiByPVwiZW5jcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX2ZpbmFsRW5jcnlwdCgpOnRoaXMuX2ZpbmFsRGVjcnlwdCgpLGU/ZS5jb25jYXQocik6cn0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih0LGUpe2lmKDA9PT1lKXJldHVybiExO2Zvcig7ZTx0Lmxlbmd0aDspdFtlKytdPTA7cmV0dXJuITB9LG4ucHJvdG90eXBlLl9maW5hbEVuY3J5cHQ9ZnVuY3Rpb24oKXtpZighdGhpcy5fcGFkKHRoaXMuYnVmZmVyLHRoaXMuYnVmZmVyT2ZmKSlyZXR1cm5bXTt2YXIgdD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl91cGRhdGUodGhpcy5idWZmZXIsMCx0LDApLHR9LG4ucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih0KXtyZXR1cm4gdH0sbi5wcm90b3R5cGUuX2ZpbmFsRGVjcnlwdD1mdW5jdGlvbigpe2kuZXF1YWwodGhpcy5idWZmZXJPZmYsdGhpcy5ibG9ja1NpemUsXCJOb3QgZW5vdWdoIGRhdGEgdG8gZGVjcnlwdFwiKTt2YXIgdD1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpO3JldHVybiB0aGlzLl9mbHVzaEJ1ZmZlcih0LDApLHRoaXMuX3VucGFkKHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXt0aGlzLnRtcD1uZXcgQXJyYXkoMiksdGhpcy5rZXlzPW51bGx9ZnVuY3Rpb24gaSh0KXt1LmNhbGwodGhpcyx0KTt2YXIgZT1uZXcgbjt0aGlzLl9kZXNTdGF0ZT1lLHRoaXMuZGVyaXZlS2V5cyhlLHQua2V5KX12YXIgbz1yKDk4KSxhPXIoMiksZj1yKDE0NSkscz1mLnV0aWxzLHU9Zi5DaXBoZXI7YShpLHUpLHQuZXhwb3J0cz1pLGkuY3JlYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgaSh0KX07dmFyIGg9WzEsMSwyLDIsMiwyLDIsMiwxLDIsMiwyLDIsMiwyLDFdO2kucHJvdG90eXBlLmRlcml2ZUtleXM9ZnVuY3Rpb24odCxlKXt0LmtleXM9bmV3IEFycmF5KDMyKSxvLmVxdWFsKGUubGVuZ3RoLHRoaXMuYmxvY2tTaXplLFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpO3ZhciByPXMucmVhZFVJbnQzMkJFKGUsMCksbj1zLnJlYWRVSW50MzJCRShlLDQpO3MucGMxKHIsbix0LnRtcCwwKSxyPXQudG1wWzBdLG49dC50bXBbMV07Zm9yKHZhciBpPTA7aTx0LmtleXMubGVuZ3RoO2krPTIpe3ZhciBhPWhbaT4+PjFdO3I9cy5yMjhzaGwocixhKSxuPXMucjI4c2hsKG4sYSkscy5wYzIocixuLHQua2V5cyxpKX19LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZGVzU3RhdGUsbz1zLnJlYWRVSW50MzJCRSh0LGUpLGE9cy5yZWFkVUludDMyQkUodCxlKzQpO3MuaXAobyxhLGkudG1wLDApLG89aS50bXBbMF0sYT1pLnRtcFsxXSxcImVuY3J5cHRcIj09PXRoaXMudHlwZT90aGlzLl9lbmNyeXB0KGksbyxhLGkudG1wLDApOnRoaXMuX2RlY3J5cHQoaSxvLGEsaS50bXAsMCksbz1pLnRtcFswXSxhPWkudG1wWzFdLHMud3JpdGVVSW50MzJCRShyLG8sbikscy53cml0ZVVJbnQzMkJFKHIsYSxuKzQpfSxpLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQubGVuZ3RoLWUsbj1lO248dC5sZW5ndGg7bisrKXRbbl09cjtyZXR1cm4hMH0saS5wcm90b3R5cGUuX3VucGFkPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10W3QubGVuZ3RoLTFdLHI9dC5sZW5ndGgtZTtyPHQubGVuZ3RoO3IrKylvLmVxdWFsKHRbcl0sZSk7cmV0dXJuIHQuc2xpY2UoMCx0Lmxlbmd0aC1lKX0saS5wcm90b3R5cGUuX2VuY3J5cHQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89ZSxhPXIsZj0wO2Y8dC5rZXlzLmxlbmd0aDtmKz0yKXt2YXIgdT10LmtleXNbZl0saD10LmtleXNbZisxXTtzLmV4cGFuZChhLHQudG1wLDApLHVePXQudG1wWzBdLGhePXQudG1wWzFdO3ZhciBjPXMuc3Vic3RpdHV0ZSh1LGgpLGQ9cy5wZXJtdXRlKGMpLGw9YTthPShvXmQpPj4+MCxvPWx9cy5yaXAoYSxvLG4saSl9LGkucHJvdG90eXBlLl9kZWNyeXB0PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXIsYT1lLGY9dC5rZXlzLmxlbmd0aC0yO2Y+PTA7Zi09Mil7dmFyIHU9dC5rZXlzW2ZdLGg9dC5rZXlzW2YrMV07cy5leHBhbmQobyx0LnRtcCwwKSx1Xj10LnRtcFswXSxoXj10LnRtcFsxXTt2YXIgYz1zLnN1YnN0aXR1dGUodSxoKSxkPXMucGVybXV0ZShjKSxsPW87bz0oYV5kKT4+PjAsYT1sfXMucmlwKG8sYSxuLGkpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtvLmVxdWFsKGUubGVuZ3RoLDI0LFwiSW52YWxpZCBrZXkgbGVuZ3RoXCIpO3ZhciByPWUuc2xpY2UoMCw4KSxuPWUuc2xpY2UoOCwxNiksaT1lLnNsaWNlKDE2LDI0KTtcImVuY3J5cHRcIj09PXQ/dGhpcy5jaXBoZXJzPVt1LmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6cn0pLHUuY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTpufSksdS5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5Oml9KV06dGhpcy5jaXBoZXJzPVt1LmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6aX0pLHUuY3JlYXRlKHt0eXBlOlwiZW5jcnlwdFwiLGtleTpufSksdS5jcmVhdGUoe3R5cGU6XCJkZWNyeXB0XCIsa2V5OnJ9KV19ZnVuY3Rpb24gaSh0KXtzLmNhbGwodGhpcyx0KTt2YXIgZT1uZXcgbih0aGlzLnR5cGUsdGhpcy5vcHRpb25zLmtleSk7dGhpcy5fZWRlU3RhdGU9ZX12YXIgbz1yKDk4KSxhPXIoMiksZj1yKDE0NSkscz1mLkNpcGhlcix1PWYuREVTO2EoaSxzKSx0LmV4cG9ydHM9aSxpLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9LGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fZWRlU3RhdGU7aS5jaXBoZXJzWzBdLl91cGRhdGUodCxlLHIsbiksaS5jaXBoZXJzWzFdLl91cGRhdGUocixuLHIsbiksaS5jaXBoZXJzWzJdLl91cGRhdGUocixuLHIsbil9LGkucHJvdG90eXBlLl9wYWQ9dS5wcm90b3R5cGUuX3BhZCxpLnByb3RvdHlwZS5fdW5wYWQ9dS5wcm90b3R5cGUuX3VucGFkfSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2UucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dFswK2VdPDwyNHx0WzErZV08PDE2fHRbMitlXTw8OHx0WzMrZV07cmV0dXJuIHI+Pj4wfSxlLndyaXRlVUludDMyQkU9ZnVuY3Rpb24odCxlLHIpe3RbMCtyXT1lPj4+MjQsdFsxK3JdPWU+Pj4xNiYyNTUsdFsyK3JdPWU+Pj44JjI1NSx0WzMrcl09MjU1JmV9LGUuaXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9NjthPj0wO2EtPTIpe2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9ZT4+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9dD4+PmYrYSYxfWZvcih2YXIgYT02O2E+PTA7YS09Mil7Zm9yKHZhciBmPTE7Zjw9MjU7Zis9OClvPDw9MSxvfD1lPj4+ZithJjE7Zm9yKHZhciBmPTE7Zjw9MjU7Zis9OClvPDw9MSxvfD10Pj4+ZithJjF9cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5yaXA9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9MDthPDQ7YSsrKWZvcih2YXIgZj0yNDtmPj0wO2YtPTgpaTw8PTEsaXw9ZT4+PmYrYSYxLGk8PD0xLGl8PXQ+Pj5mK2EmMTtmb3IodmFyIGE9NDthPDg7YSsrKWZvcih2YXIgZj0yNDtmPj0wO2YtPTgpbzw8PTEsb3w9ZT4+PmYrYSYxLG88PD0xLG98PXQ+Pj5mK2EmMTtyW24rMF09aT4+PjAscltuKzFdPW8+Pj4wfSxlLnBjMT1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9MCxvPTAsYT03O2E+PTU7YS0tKXtcbmZvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9ZT4+ZithJjE7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD10Pj5mK2EmMX1mb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+PmYrYSYxO2Zvcih2YXIgYT0xO2E8PTM7YSsrKXtmb3IodmFyIGY9MDtmPD0yNDtmKz04KW88PD0xLG98PWU+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbzw8PTEsb3w9dD4+ZithJjF9Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClvPDw9MSxvfD10Pj5mK2EmMTtyW24rMF09aT4+PjAscltuKzFdPW8+Pj4wfSxlLnIyOHNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0PDxlJjI2ODQzNTQ1NXx0Pj4+MjgtZX07dmFyIHI9WzE0LDExLDE3LDQsMjcsMjMsMjUsMCwxMywyMiw3LDE4LDUsOSwxNiwyNCwyLDIwLDEyLDIxLDEsOCwxNSwyNiwxNSw0LDI1LDE5LDksMSwyNiwxNiw1LDExLDIzLDgsMTIsNywxNywwLDIyLDMsMTAsMTQsNiwyMCwyNywyNF07ZS5wYzI9ZnVuY3Rpb24odCxlLG4saSl7Zm9yKHZhciBvPTAsYT0wLGY9ci5sZW5ndGg+Pj4xLHM9MDtzPGY7cysrKW88PD0xLG98PXQ+Pj5yW3NdJjE7Zm9yKHZhciBzPWY7czxyLmxlbmd0aDtzKyspYTw8PTEsYXw9ZT4+PnJbc10mMTtuW2krMF09bz4+PjAsbltpKzFdPWE+Pj4wfSxlLmV4cGFuZD1mdW5jdGlvbih0LGUscil7dmFyIG49MCxpPTA7bj0oMSZ0KTw8NXx0Pj4+Mjc7Zm9yKHZhciBvPTIzO28+PTE1O28tPTQpbjw8PTYsbnw9dD4+Pm8mNjM7Zm9yKHZhciBvPTExO28+PTM7by09NClpfD10Pj4+byY2MyxpPDw9NjtpfD0oMzEmdCk8PDF8dD4+PjMxLGVbciswXT1uPj4+MCxlW3IrMV09aT4+PjB9O3ZhciBuPVsxNCwwLDQsMTUsMTMsNywxLDQsMiwxNCwxNSwyLDExLDEzLDgsMSwzLDEwLDEwLDYsNiwxMiwxMiwxMSw1LDksOSw1LDAsMyw3LDgsNCwxNSwxLDEyLDE0LDgsOCwyLDEzLDQsNiw5LDIsMSwxMSw3LDE1LDUsMTIsMTEsOSwzLDcsMTQsMywxMCwxMCwwLDUsNiwwLDEzLDE1LDMsMSwxMyw4LDQsMTQsNyw2LDE1LDExLDIsMyw4LDQsMTQsOSwxMiw3LDAsMiwxLDEzLDEwLDEyLDYsMCw5LDUsMTEsMTAsNSwwLDEzLDE0LDgsNywxMCwxMSwxLDEwLDMsNCwxNSwxMyw0LDEsMiw1LDExLDgsNiwxMiw3LDYsMTIsOSwwLDMsNSwyLDE0LDE1LDksMTAsMTMsMCw3LDksMCwxNCw5LDYsMywzLDQsMTUsNiw1LDEwLDEsMiwxMyw4LDEyLDUsNywxNCwxMSwxMiw0LDExLDIsMTUsOCwxLDEzLDEsNiwxMCw0LDEzLDksMCw4LDYsMTUsOSwzLDgsMCw3LDExLDQsMSwxNSwyLDE0LDEyLDMsNSwxMSwxMCw1LDE0LDIsNywxMiw3LDEzLDEzLDgsMTQsMTEsMyw1LDAsNiw2LDE1LDksMCwxMCwzLDEsNCwyLDcsOCwyLDUsMTIsMTEsMSwxMiwxMCw0LDE0LDE1LDksMTAsMyw2LDE1LDksMCwwLDYsMTIsMTAsMTEsMSw3LDEzLDEzLDgsMTUsOSwxLDQsMyw1LDE0LDExLDUsMTIsMiw3LDgsMiw0LDE0LDIsMTQsMTIsMTEsNCwyLDEsMTIsNyw0LDEwLDcsMTEsMTMsNiwxLDgsNSw1LDAsMywxNSwxNSwxMCwxMywzLDAsOSwxNCw4LDksNiw0LDExLDIsOCwxLDEyLDExLDcsMTAsMSwxMywxNCw3LDIsOCwxMywxNSw2LDksMTUsMTIsMCw1LDksNiwxMCwzLDQsMCw1LDE0LDMsMTIsMTAsMSwxNSwxMCw0LDE1LDIsOSw3LDIsMTIsNiw5LDgsNSwwLDYsMTMsMSwzLDEzLDQsMTQsMTQsMCw3LDExLDUsMywxMSw4LDksNCwxNCwzLDE1LDIsNSwxMiwyLDksOCw1LDEyLDE1LDMsMTAsNywxMSwwLDE0LDQsMSwxMCw3LDEsNiwxMywwLDExLDgsNiwxMyw0LDEzLDExLDAsMiwxMSwxNCw3LDE1LDQsMCw5LDgsMSwxMywxMCwzLDE0LDEyLDMsOSw1LDcsMTIsNSwyLDEwLDE1LDYsOCwxLDYsMSw2LDQsMTEsMTEsMTMsMTMsOCwxMiwxLDMsNCw3LDEwLDE0LDcsMTAsOSwxNSw1LDYsMCw4LDE1LDAsMTQsNSwyLDksMywyLDEyLDEzLDEsMiwxNSw4LDEzLDQsOCw2LDEwLDE1LDMsMTEsNywxLDQsMTAsMTIsOSw1LDMsNiwxNCwxMSw1LDAsMCwxNCwxMiw5LDcsMiw3LDIsMTEsMSw0LDE0LDEsNyw5LDQsMTIsMTAsMTQsOCwyLDEzLDAsMTUsNiwxMiwxMCw5LDEzLDAsMTUsMywzLDUsNSw2LDgsMTFdO2Uuc3Vic3RpdHV0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLGk9MDtpPDQ7aSsrKXt2YXIgbz10Pj4+MTgtNippJjYzLGE9bls2NCppK29dO3I8PD00LHJ8PWF9Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIG89ZT4+PjE4LTYqaSY2MyxhPW5bMjU2KzY0Kmkrb107cjw8PTQscnw9YX1yZXR1cm4gcj4+PjB9O3ZhciBpPVsxNiwyNSwxMiwxMSwzLDIwLDQsMTUsMzEsMTcsOSw2LDI3LDE0LDEsMjIsMzAsMjQsOCwxOCwwLDUsMjksMjMsMTMsMTksMiwyNiwxMCwyMSwyOCw3XTtlLnBlcm11dGU9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPTAscj0wO3I8aS5sZW5ndGg7cisrKWU8PD0xLGV8PXQ+Pj5pW3JdJjE7cmV0dXJuIGU+Pj4wfSxlLnBhZFNwbGl0PWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dC50b1N0cmluZygyKTtuLmxlbmd0aDxlOyluPVwiMFwiK247Zm9yKHZhciBpPVtdLG89MDtvPGU7bys9cilpLnB1c2gobi5zbGljZShvLG8rcikpO3JldHVybiBpLmpvaW4oXCIgXCIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2MuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZT1sW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gbWVzc2FnZSBkaWdlc3RcIik7dGhpcy5faGFzaFR5cGU9ZS5oYXNoLHRoaXMuX2hhc2g9cyhlLmhhc2gpLHRoaXMuX3RhZz1lLmlkLHRoaXMuX3NpZ25UeXBlPWUuc2lnbn1mdW5jdGlvbiBpKHQpe2MuV3JpdGFibGUuY2FsbCh0aGlzKTt2YXIgZT1sW3RdO2lmKCFlKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gbWVzc2FnZSBkaWdlc3RcIik7dGhpcy5faGFzaD1zKGUuaGFzaCksdGhpcy5fdGFnPWUuaWQsdGhpcy5fc2lnblR5cGU9ZS5zaWdufWZ1bmN0aW9uIG8odCl7cmV0dXJuIG5ldyBuKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIG5ldyBpKHQpfXZhciBmPXIoMjExKSxzPXIoNTkpLHU9cigyKSxoPXIoNTQyKSxjPXIoMzEpLGQ9cig1NDMpLGw9e307T2JqZWN0LmtleXMoZikuZm9yRWFjaChmdW5jdGlvbih0KXtsW3RdPWxbdC50b0xvd2VyQ2FzZSgpXT1mW3RdfSksdShuLGMuV3JpdGFibGUpLG4ucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSksdGhpcy5faGFzaC51cGRhdGUodCksdGhpc30sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LHIpe3RoaXMuZW5kKCk7dmFyIG49dGhpcy5faGFzaC5kaWdlc3QoKSxpPWgoZS5jb25jYXQoW3RoaXMuX3RhZyxuXSksdCx0aGlzLl9oYXNoVHlwZSx0aGlzLl9zaWduVHlwZSk7cmV0dXJuIHI/aS50b1N0cmluZyhyKTppfSx1KGksYy5Xcml0YWJsZSksaS5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLl9oYXNoLnVwZGF0ZSh0KSxyKCl9LGkucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKSx0aGlzLl9oYXNoLnVwZGF0ZSh0KSx0aGlzfSxpLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgZShyLG4pKSx0aGlzLmVuZCgpO3ZhciBpPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGQocixlLmNvbmNhdChbdGhpcy5fdGFnLGldKSx0LHRoaXMuX3NpZ25UeXBlKX0sdC5leHBvcnRzPXtTaWduOm8sVmVyaWZ5OmEsY3JlYXRlU2lnbjpvLGNyZWF0ZVZlcmlmeTphfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgZT1vKHQpLHI9ZS50b1JlZChhLm1vbnQodC5tb2R1bHVzKSkucmVkUG93KG5ldyBhKHQucHVibGljRXhwb25lbnQpKS5mcm9tUmVkKCk7cmV0dXJue2JsaW5kZXI6cix1bmJsaW5kZXI6ZS5pbnZtKHQubW9kdWx1cyl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgaT1uKHIpLG89ci5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxmPShhLm1vbnQoci5tb2R1bHVzKSxuZXcgYSh0KS5tdWwoaS5ibGluZGVyKS51bW9kKHIubW9kdWx1cykpLHM9Zi50b1JlZChhLm1vbnQoci5wcmltZTEpKSx1PWYudG9SZWQoYS5tb250KHIucHJpbWUyKSksaD1yLmNvZWZmaWNpZW50LGM9ci5wcmltZTEsZD1yLnByaW1lMixsPXMucmVkUG93KHIuZXhwb25lbnQxKSxwPXUucmVkUG93KHIuZXhwb25lbnQyKTtsPWwuZnJvbVJlZCgpLHA9cC5mcm9tUmVkKCk7dmFyIGI9bC5pc3ViKHApLmltdWwoaCkudW1vZChjKTtyZXR1cm4gYi5pbXVsKGQpLHAuaWFkZChiKSxuZXcgZShwLmltdWwoaS51bmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKS50b0FycmF5KCExLG8pKX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpLHI9bmV3IGEoZihlKSk7ci5jbXAodC5tb2R1bHVzKT49MHx8IXIudW1vZCh0LnByaW1lMSl8fCFyLnVtb2QodC5wcmltZTIpOylyPW5ldyBhKGYoZSkpO3JldHVybiByfXZhciBhPXIoMTgpLGY9cig2MSk7dC5leHBvcnRzPWksaS5nZXRyPW99KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMudHlwZT10LHRoaXMucD1uZXcgbyhlLnAsMTYpLHRoaXMucmVkPWUucHJpbWU/by5yZWQoZS5wcmltZSk6by5tb250KHRoaXMucCksdGhpcy56ZXJvPW5ldyBvKDApLnRvUmVkKHRoaXMucmVkKSx0aGlzLm9uZT1uZXcgbygxKS50b1JlZCh0aGlzLnJlZCksdGhpcy50d289bmV3IG8oMikudG9SZWQodGhpcy5yZWQpLHRoaXMubj1lLm4mJm5ldyBvKGUubiwxNiksdGhpcy5nPWUuZyYmdGhpcy5wb2ludEZyb21KU09OKGUuZyxlLmdSZWQpLHRoaXMuX3duYWZUMT1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQyPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDM9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUND1uZXcgQXJyYXkoNCk7dmFyIHI9dGhpcy5uJiZ0aGlzLnAuZGl2KHRoaXMubik7IXJ8fHIuY21wbigxMDApPjA/dGhpcy5yZWROPW51bGw6KHRoaXMuX21heHdlbGxUcmljaz0hMCx0aGlzLnJlZE49dGhpcy5uLnRvUmVkKHRoaXMucmVkKSl9ZnVuY3Rpb24gaSh0LGUpe3RoaXMuY3VydmU9dCx0aGlzLnR5cGU9ZSx0aGlzLnByZWNvbXB1dGVkPW51bGx9dmFyIG89cigxOCksYT1yKDE5KSxmPWEudXRpbHMscz1mLmdldE5BRix1PWYuZ2V0SlNGLGg9Zi5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS5fZml4ZWROYWZNdWw9ZnVuY3Rpb24odCxlKXtoKHQucHJlY29tcHV0ZWQpO3ZhciByPXQuX2dldERvdWJsZXMoKSxuPXMoZSwxKSxpPSgxPDxyLnN0ZXArMSktKHIuc3RlcCUyPT09MD8yOjEpO2kvPTM7Zm9yKHZhciBvPVtdLGE9MDthPG4ubGVuZ3RoO2ErPXIuc3RlcCl7Zm9yKHZhciBmPTAsZT1hK3Iuc3RlcC0xO2U+PWE7ZS0tKWY9KGY8PDEpK25bZV07by5wdXNoKGYpfWZvcih2YXIgdT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksYz10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZD1pO2Q+MDtkLS0pe2Zvcih2YXIgYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgZj1vW2FdO2Y9PT1kP2M9Yy5taXhlZEFkZChyLnBvaW50c1thXSk6Zj09PS1kJiYoYz1jLm1peGVkQWRkKHIucG9pbnRzW2FdLm5lZygpKSl9dT11LmFkZChjKX1yZXR1cm4gdS50b1AoKX0sbi5wcm90b3R5cGUuX3duYWZNdWw9ZnVuY3Rpb24odCxlKXt2YXIgcj00LG49dC5fZ2V0TkFGUG9pbnRzKHIpO3I9bi53bmQ7Zm9yKHZhciBpPW4ucG9pbnRzLG89cyhlLHIpLGE9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGY9by5sZW5ndGgtMTtmPj0wO2YtLSl7Zm9yKHZhciBlPTA7Zj49MCYmMD09PW9bZl07Zi0tKWUrKztpZihmPj0wJiZlKyssYT1hLmRibHAoZSksZjwwKWJyZWFrO3ZhciB1PW9bZl07aCgwIT09dSksYT1cImFmZmluZVwiPT09dC50eXBlP3U+MD9hLm1peGVkQWRkKGlbdS0xPj4xXSk6YS5taXhlZEFkZChpWy11LTE+PjFdLm5lZygpKTp1PjA/YS5hZGQoaVt1LTE+PjFdKTphLmFkZChpWy11LTE+PjFdLm5lZygpKX1yZXR1cm5cImFmZmluZVwiPT09dC50eXBlP2EudG9QKCk6YX0sbi5wcm90b3R5cGUuX3duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIsbixpKXtmb3IodmFyIG89dGhpcy5fd25hZlQxLGE9dGhpcy5fd25hZlQyLGY9dGhpcy5fd25hZlQzLGg9MCxjPTA7YzxuO2MrKyl7dmFyIGQ9ZVtjXSxsPWQuX2dldE5BRlBvaW50cyh0KTtvW2NdPWwud25kLGFbY109bC5wb2ludHN9Zm9yKHZhciBjPW4tMTtjPj0xO2MtPTIpe3ZhciBwPWMtMSxiPWM7aWYoMT09PW9bcF0mJjE9PT1vW2JdKXt2YXIgdj1bZVtwXSxudWxsLG51bGwsZVtiXV07MD09PWVbcF0ueS5jbXAoZVtiXS55KT8odlsxXT1lW3BdLmFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpOjA9PT1lW3BdLnkuY21wKGVbYl0ueS5yZWROZWcoKSk/KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0uYWRkKGVbYl0ubmVnKCkpKToodlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk7dmFyIHk9Wy0zLC0xLC01LC03LDAsNyw1LDEsM10sbT11KHJbcF0scltiXSk7aD1NYXRoLm1heChtWzBdLmxlbmd0aCxoKSxmW3BdPW5ldyBBcnJheShoKSxmW2JdPW5ldyBBcnJheShoKTtmb3IodmFyIGc9MDtnPGg7ZysrKXt2YXIgdz0wfG1bMF1bZ10sXz0wfG1bMV1bZ107ZltwXVtnXT15WzMqKHcrMSkrKF8rMSldLGZbYl1bZ109MCxhW3BdPXZ9fWVsc2UgZltwXT1zKHJbcF0sb1twXSksZltiXT1zKHJbYl0sb1tiXSksaD1NYXRoLm1heChmW3BdLmxlbmd0aCxoKSxoPU1hdGgubWF4KGZbYl0ubGVuZ3RoLGgpfWZvcih2YXIgTT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksUz10aGlzLl93bmFmVDQsYz1oO2M+PTA7Yy0tKXtmb3IodmFyIEU9MDtjPj0wOyl7Zm9yKHZhciBBPSEwLGc9MDtnPG47ZysrKVNbZ109MHxmW2ddW2NdLDAhPT1TW2ddJiYoQT0hMSk7aWYoIUEpYnJlYWs7RSsrLGMtLX1pZihjPj0wJiZFKyssTT1NLmRibHAoRSksYzwwKWJyZWFrO2Zvcih2YXIgZz0wO2c8bjtnKyspe3ZhciBkLGs9U1tnXTswIT09ayYmKGs+MD9kPWFbZ11bay0xPj4xXTprPDAmJihkPWFbZ11bLWstMT4+MV0ubmVnKCkpLE09XCJhZmZpbmVcIj09PWQudHlwZT9NLm1peGVkQWRkKGQpOk0uYWRkKGQpKX19Zm9yKHZhciBjPTA7YzxuO2MrKylhW2NdPW51bGw7cmV0dXJuIGk/TTpNLnRvUCgpfSxuLkJhc2VQb2ludD1pLGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxpLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnZhbGlkYXRlKHRoaXMpfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0LGUpe3Q9Zi50b0FycmF5KHQsZSk7dmFyIHI9dGhpcy5wLmJ5dGVMZW5ndGgoKTtpZigoND09PXRbMF18fDY9PT10WzBdfHw3PT09dFswXSkmJnQubGVuZ3RoLTE9PT0yKnIpezY9PT10WzBdP2godFt0Lmxlbmd0aC0xXSUyPT09MCk6Nz09PXRbMF0mJmgodFt0Lmxlbmd0aC0xXSUyPT09MSk7dmFyIG49dGhpcy5wb2ludCh0LnNsaWNlKDEsMStyKSx0LnNsaWNlKDErciwxKzIqcikpO3JldHVybiBufWlmKCgyPT09dFswXXx8Mz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09cilyZXR1cm4gdGhpcy5wb2ludEZyb21YKHQuc2xpY2UoMSwxK3IpLDM9PT10WzBdKTt0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHBvaW50IGZvcm1hdFwiKX0saS5wcm90b3R5cGUuZW5jb2RlQ29tcHJlc3NlZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lbmNvZGUodCwhMCl9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSxyPXRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLGUpO3JldHVybiB0P1t0aGlzLmdldFkoKS5pc0V2ZW4oKT8yOjNdLmNvbmNhdChyKTpbNF0uY29uY2F0KHIsdGhpcy5nZXRZKCkudG9BcnJheShcImJlXCIsZSkpfSxpLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZi5lbmNvZGUodGhpcy5fZW5jb2RlKGUpLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQpcmV0dXJuIHRoaXM7dmFyIGU9e2RvdWJsZXM6bnVsbCxuYWY6bnVsbCxiZXRhOm51bGx9O3JldHVybiBlLm5hZj10aGlzLl9nZXROQUZQb2ludHMoOCksZS5kb3VibGVzPXRoaXMuX2dldERvdWJsZXMoNCx0KSxlLmJldGE9dGhpcy5fZ2V0QmV0YSgpLHRoaXMucHJlY29tcHV0ZWQ9ZSx0aGlzfSxpLnByb3RvdHlwZS5faGFzRG91Ymxlcz1mdW5jdGlvbih0KXtpZighdGhpcy5wcmVjb21wdXRlZClyZXR1cm4hMTt2YXIgZT10aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7cmV0dXJuISFlJiZlLnBvaW50cy5sZW5ndGg+PU1hdGguY2VpbCgodC5iaXRMZW5ndGgoKSsxKS9lLnN0ZXApfSxpLnByb3RvdHlwZS5fZ2V0RG91Ymxlcz1mdW5jdGlvbih0LGUpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcylyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO2Zvcih2YXIgcj1bdGhpc10sbj10aGlzLGk9MDtpPGU7aSs9dCl7Zm9yKHZhciBvPTA7bzx0O28rKyluPW4uZGJsKCk7ci5wdXNoKG4pfXJldHVybntzdGVwOnQscG9pbnRzOnJ9fSxpLnByb3RvdHlwZS5fZ2V0TkFGUG9pbnRzPWZ1bmN0aW9uKHQpe2lmKHRoaXMucHJlY29tcHV0ZWQmJnRoaXMucHJlY29tcHV0ZWQubmFmKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLm5hZjtmb3IodmFyIGU9W3RoaXNdLHI9KDE8PHQpLTEsbj0xPT09cj9udWxsOnRoaXMuZGJsKCksaT0xO2k8cjtpKyspZVtpXT1lW2ktMV0uYWRkKG4pO3JldHVybnt3bmQ6dCxwb2ludHM6ZX19LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmRibHA9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7dGhpcy50d2lzdGVkPTEhPT0oMHx0LmEpLHRoaXMubU9uZUE9dGhpcy50d2lzdGVkJiYoMHx0LmEpPT09LTEsdGhpcy5leHRlbmRlZD10aGlzLm1PbmVBLHUuY2FsbCh0aGlzLFwiZWR3YXJkc1wiLHQpLHRoaXMuYT1uZXcgZih0LmEsMTYpLnVtb2QodGhpcy5yZWQubSksdGhpcy5hPXRoaXMuYS50b1JlZCh0aGlzLnJlZCksdGhpcy5jPW5ldyBmKHQuYywxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYzI9dGhpcy5jLnJlZFNxcigpLHRoaXMuZD1uZXcgZih0LmQsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmRkPXRoaXMuZC5yZWRBZGQodGhpcy5kKSxoKCF0aGlzLnR3aXN0ZWR8fDA9PT10aGlzLmMuZnJvbVJlZCgpLmNtcG4oMSkpLHRoaXMub25lQz0xPT09KDB8dC5jKX1mdW5jdGlvbiBpKHQsZSxyLG4saSl7dS5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLnplcm8sdGhpcy55PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnQ9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMuek9uZT0hMCk6KHRoaXMueD1uZXcgZihlLDE2KSx0aGlzLnk9bmV3IGYociwxNiksdGhpcy56PW4/bmV3IGYobiwxNik6dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PWkmJm5ldyBmKGksMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMudCYmIXRoaXMudC5yZWQmJih0aGlzLnQ9dGhpcy50LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lLHRoaXMuY3VydmUuZXh0ZW5kZWQmJiF0aGlzLnQmJih0aGlzLnQ9dGhpcy54LnJlZE11bCh0aGlzLnkpLHRoaXMuek9uZXx8KHRoaXMudD10aGlzLnQucmVkTXVsKHRoaXMuei5yZWRJbnZtKCkpKSkpfXZhciBvPXIoOTkpLGE9cigxOSksZj1yKDE4KSxzPXIoMiksdT1vLmJhc2UsaD1hLnV0aWxzLmFzc2VydDtzKG4sdSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubU9uZUE/dC5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vbmVDP3Q6dGhpcy5jLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnBvaW50KHQsZSxyLG4pfSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHIpKSxpPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChyKSksbz1uLnJlZE11bChpLnJlZEludm0oKSksYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgcz1hLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhc3x8IWUmJnMpJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsYSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMub25lKSxpPXIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKTtpZigwPT09by5jbXAodGhpcy56ZXJvKSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx0KX12YXIgYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gYS5pc09kZCgpIT09ZSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChhLHQpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt0Lm5vcm1hbGl6ZSgpO3ZhciBlPXQueC5yZWRTcXIoKSxyPXQueS5yZWRTcXIoKSxuPWUucmVkTXVsKHRoaXMuYSkucmVkQWRkKHIpLGk9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoZSkucmVkTXVsKHIpKSk7cmV0dXJuIDA9PT1uLmNtcChpKX0scyhpLHUuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyLG4pfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdLGVbMl0pfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmMD09PXRoaXMueS5jbXAodGhpcy56KX0saS5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKTtyPXIucmVkSUFkZChyKTt2YXIgbj10aGlzLmN1cnZlLl9tdWxBKHQpLGk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihlKSxvPW4ucmVkQWRkKGUpLGE9by5yZWRTdWIociksZj1uLnJlZFN1YihlKSxzPWkucmVkTXVsKGEpLHU9by5yZWRNdWwoZiksaD1pLnJlZE11bChmKSxjPWEucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSxjLGgpfSxpLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxpPXRoaXMueC5yZWRTcXIoKSxvPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBhPXRoaXMuY3VydmUuX211bEEoaSksZj1hLnJlZEFkZChvKTtpZih0aGlzLnpPbmUpdD1uLnJlZFN1YihpKS5yZWRTdWIobykucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7ZWxzZXt2YXIgcz10aGlzLnoucmVkU3FyKCksdT1mLnJlZFN1YihzKS5yZWRJU3ViKHMpO3Q9bi5yZWRTdWIoaSkucmVkSVN1YihvKS5yZWRNdWwodSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZE11bCh1KX19ZWxzZXt2YXIgYT1pLnJlZEFkZChvKSxzPXRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKSx1PWEucmVkU3ViKHMpLnJlZFN1YihzKTt0PXRoaXMuY3VydmUuX211bEMobi5yZWRJU3ViKGEpKS5yZWRNdWwodSksZT10aGlzLmN1cnZlLl9tdWxDKGEpLnJlZE11bChpLnJlZElTdWIobykpLHI9YS5yZWRNdWwodSl9cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodCxlLHIpfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0saS5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHQueS5yZWRTdWIodC54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHQueS5yZWRBZGQodC54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh0LnQpLGk9dGhpcy56LnJlZE11bCh0LnoucmVkQWRkKHQueikpLG89ci5yZWRTdWIoZSksYT1pLnJlZFN1YihuKSxmPWkucmVkQWRkKG4pLHM9ci5yZWRBZGQoZSksdT1vLnJlZE11bChhKSxoPWYucmVkTXVsKHMpLGM9by5yZWRNdWwocyksZD1hLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh1LGgsZCxjKX0saS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuei5yZWRNdWwodC56KSxpPW4ucmVkU3FyKCksbz10aGlzLngucmVkTXVsKHQueCksYT10aGlzLnkucmVkTXVsKHQueSksZj10aGlzLmN1cnZlLmQucmVkTXVsKG8pLnJlZE11bChhKSxzPWkucmVkU3ViKGYpLHU9aS5yZWRBZGQoZiksaD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHQueC5yZWRBZGQodC55KSkucmVkSVN1YihvKS5yZWRJU3ViKGEpLGM9bi5yZWRNdWwocykucmVkTXVsKGgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUuX211bEEobykpKSxyPXMucmVkTXVsKHUpKTooZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIobykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhzKS5yZWRNdWwodSkpLHRoaXMuY3VydmUucG9pbnQoYyxlLHIpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3Q6dC5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh0KTp0aGlzLl9wcm9qQWRkKHQpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCExKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCEwKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHQpLHRoaXMueT10aGlzLnkucmVkTXVsKHQpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHQpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHQuZ2V0WSgpKX0saS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwO2Zvcih2YXIgcj10LmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihlLnJlZElBZGQobiksMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnRvUD1pLnByb3RvdHlwZS5ub3JtYWxpemUsaS5wcm90b3R5cGUubWl4ZWRBZGQ9aS5wcm90b3R5cGUuYWRkfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtzLmNhbGwodGhpcyxcIm1vbnRcIix0KSx0aGlzLmE9bmV3IGEodC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGEoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGkodCxlLHIpe3MuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBhKGUsMTYpLHRoaXMuej1uZXcgYShyLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXZhciBvPXIoOTkpLGE9cigxOCksZj1yKDIpLHM9by5iYXNlLHU9cigxOSksaD11LnV0aWxzO2YobixzKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vcm1hbGl6ZSgpLngscj1lLnJlZFNxcigpLG49ci5yZWRNdWwoZSkucmVkQWRkKHIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChlKSxpPW4ucmVkU3FydCgpO3JldHVybiAwPT09aS5yZWRTcXIoKS5jbXAobil9LGYoaSxzLkJhc2VQb2ludCksbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wb2ludChoLnRvQXJyYXkodCxlKSwxKX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV18fHQub25lKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkQWRkKHRoaXMueiksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZFN1Yih0aGlzLnopLG49ci5yZWRTcXIoKSxpPWUucmVkU3ViKG4pLG89ZS5yZWRNdWwobiksYT1pLnJlZE11bChuLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoaSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLngucmVkQWRkKHRoaXMueiksbj10aGlzLngucmVkU3ViKHRoaXMueiksaT10LngucmVkQWRkKHQueiksbz10LngucmVkU3ViKHQueiksYT1vLnJlZE11bChyKSxmPWkucmVkTXVsKG4pLHM9ZS56LnJlZE11bChhLnJlZEFkZChmKS5yZWRTcXIoKSksdT1lLngucmVkTXVsKGEucmVkSVN1YihmKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNsb25lKCkscj10aGlzLG49dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGk9dGhpcyxvPVtdOzAhPT1lLmNtcG4oMCk7ZS5pdXNocm4oMSkpby5wdXNoKGUuYW5kbG4oMSkpO2Zvcih2YXIgYT1vLmxlbmd0aC0xO2E+PTA7YS0tKTA9PT1vW2FdPyhyPXIuZGlmZkFkZChuLGkpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4saSkscj1yLmRibCgpKTtyZXR1cm4gbn0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtoLmNhbGwodGhpcyxcInNob3J0XCIsdCksdGhpcy5hPW5ldyBzKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgcyh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHQpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIGkodCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJhZmZpbmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksbiYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiamFjb2JpYW5cIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHMoMCkpOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLHRoaXMuej1uZXcgcyhuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfXZhciBhPXIoOTkpLGY9cigxOSkscz1yKDE4KSx1PXIoMiksaD1hLmJhc2UsYz1mLnV0aWxzLmFzc2VydDt1KG4saCksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2dldEVuZG9tb3JwaGlzbT1mdW5jdGlvbih0KXtpZih0aGlzLnplcm9BJiZ0aGlzLmcmJnRoaXMubiYmMT09PXRoaXMucC5tb2RuKDMpKXt2YXIgZSxyO2lmKHQuYmV0YSllPW5ldyBzKHQuYmV0YSwxNikudG9SZWQodGhpcy5yZWQpO2Vsc2V7dmFyIG49dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMucCk7ZT1uWzBdLmNtcChuWzFdKTwwP25bMF06blsxXSxlPWUudG9SZWQodGhpcy5yZWQpfWlmKHQubGFtYmRhKXI9bmV3IHModC5sYW1iZGEsMTYpO2Vsc2V7dmFyIGk9dGhpcy5fZ2V0RW5kb1Jvb3RzKHRoaXMubik7MD09PXRoaXMuZy5tdWwoaVswXSkueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKT9yPWlbMF06KHI9aVsxXSxjKDA9PT10aGlzLmcubXVsKHIpLnguY21wKHRoaXMuZy54LnJlZE11bChlKSkpKX12YXIgbztyZXR1cm4gbz10LmJhc2lzP3QuYmFzaXMubWFwKGZ1bmN0aW9uKHQpe3JldHVybnthOm5ldyBzKHQuYSwxNiksYjpuZXcgcyh0LmIsMTYpfX0pOnRoaXMuX2dldEVuZG9CYXNpcyhyKSx7YmV0YTplLGxhbWJkYTpyLGJhc2lzOm99fX0sbi5wcm90b3R5cGUuX2dldEVuZG9Sb290cz1mdW5jdGlvbih0KXt2YXIgZT10PT09dGhpcy5wP3RoaXMucmVkOnMubW9udCh0KSxyPW5ldyBzKDIpLnRvUmVkKGUpLnJlZEludm0oKSxuPXIucmVkTmVnKCksaT1uZXcgcygzKS50b1JlZChlKS5yZWROZWcoKS5yZWRTcXJ0KCkucmVkTXVsKHIpLG89bi5yZWRBZGQoaSkuZnJvbVJlZCgpLGE9bi5yZWRTdWIoaSkuZnJvbVJlZCgpO3JldHVybltvLGFdfSxuLnByb3RvdHlwZS5fZ2V0RW5kb0Jhc2lzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZSxyLG4saSxvLGEsZix1LGgsYz10aGlzLm4udXNocm4oTWF0aC5mbG9vcih0aGlzLm4uYml0TGVuZ3RoKCkvMikpLGQ9dCxsPXRoaXMubi5jbG9uZSgpLHA9bmV3IHMoMSksYj1uZXcgcygwKSx2PW5ldyBzKDApLHk9bmV3IHMoMSksbT0wOzAhPT1kLmNtcG4oMCk7KXt2YXIgZz1sLmRpdihkKTt1PWwuc3ViKGcubXVsKGQpKSxoPXYuc3ViKGcubXVsKHApKTt2YXIgdz15LnN1YihnLm11bChiKSk7aWYoIW4mJnUuY21wKGMpPDApZT1mLm5lZygpLHI9cCxuPXUubmVnKCksaT1oO2Vsc2UgaWYobiYmMj09PSsrbSlicmVhaztmPXUsbD1kLGQ9dSx2PXAscD1oLHk9YixiPXd9bz11Lm5lZygpLGE9aDt2YXIgXz1uLnNxcigpLmFkZChpLnNxcigpKSxNPW8uc3FyKCkuYWRkKGEuc3FyKCkpO3JldHVybiBNLmNtcChfKT49MCYmKG89ZSxhPXIpLG4ubmVnYXRpdmUmJihuPW4ubmVnKCksaT1pLm5lZygpKSxvLm5lZ2F0aXZlJiYobz1vLm5lZygpLGE9YS5uZWcoKSksW3thOm4sYjppfSx7YTpvLGI6YX1dfSxuLnByb3RvdHlwZS5fZW5kb1NwbGl0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZW5kby5iYXNpcyxyPWVbMF0sbj1lWzFdLGk9bi5iLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLG89ci5iLm5lZygpLm11bCh0KS5kaXZSb3VuZCh0aGlzLm4pLGE9aS5tdWwoci5hKSxmPW8ubXVsKG4uYSkscz1pLm11bChyLmIpLHU9by5tdWwobi5iKSxoPXQuc3ViKGEpLnN1YihmKSxjPXMuYWRkKHUpLm5lZygpO3JldHVybntrMTpoLGsyOmN9fSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgcyh0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCkucmVkTXVsKHQpLnJlZElBZGQodC5yZWRNdWwodGhpcy5hKSkucmVkSUFkZCh0aGlzLmIpLG49ci5yZWRTcXJ0KCk7aWYoMCE9PW4ucmVkU3FyKCkucmVkU3ViKHIpLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIGk9bi5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIWl8fCFlJiZpKSYmKG49bi5yZWROZWcoKSksdGhpcy5wb2ludCh0LG4pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmluZilyZXR1cm4hMDt2YXIgZT10Lngscj10Lnksbj10aGlzLmEucmVkTXVsKGUpLGk9ZS5yZWRTcXIoKS5yZWRNdWwoZSkucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuYik7cmV0dXJuIDA9PT1yLnJlZFNxcigpLnJlZElTdWIoaSkuY21wbigwKX0sbi5wcm90b3R5cGUuX2VuZG9XbmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIG49dGhpcy5fZW5kb1duYWZUMSxpPXRoaXMuX2VuZG9XbmFmVDIsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgYT10aGlzLl9lbmRvU3BsaXQoZVtvXSksZj10W29dLHM9Zi5fZ2V0QmV0YSgpO2EuazEubmVnYXRpdmUmJihhLmsxLmluZWcoKSxmPWYubmVnKCEwKSksYS5rMi5uZWdhdGl2ZSYmKGEuazIuaW5lZygpLHM9cy5uZWcoITApKSxuWzIqb109ZixuWzIqbysxXT1zLGlbMipvXT1hLmsxLGlbMipvKzFdPWEuazJ9Zm9yKHZhciB1PXRoaXMuX3duYWZNdWxBZGQoMSxuLGksMipvLHIpLGg9MDtoPDIqbztoKyspbltoXT1udWxsLGlbaF09bnVsbDtyZXR1cm4gdX0sdShpLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0LGUpfSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe2lmKHRoaXMuY3VydmUuZW5kbyl7dmFyIHQ9dGhpcy5wcmVjb21wdXRlZDtpZih0JiZ0LmJldGEpcmV0dXJuIHQuYmV0YTt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWRNdWwodGhpcy5jdXJ2ZS5lbmRvLmJldGEpLHRoaXMueSk7aWYodCl7dmFyIHI9dGhpcy5jdXJ2ZSxuPWZ1bmN0aW9uKHQpe3JldHVybiByLnBvaW50KHQueC5yZWRNdWwoci5lbmRvLmJldGEpLHQueSl9O3QuYmV0YT1lLGUucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxuYWY6dC5uYWYmJnt3bmQ6dC5uYWYud25kLHBvaW50czp0Lm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnQuZG91YmxlcyYme3N0ZXA6dC5kb3VibGVzLnN0ZXAscG9pbnRzOnQuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9fSxpLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wcmVjb21wdXRlZD9bdGhpcy54LHRoaXMueSx0aGlzLnByZWNvbXB1dGVkJiZ7ZG91Ymxlczp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMmJntzdGVwOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5zdGVwLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMucG9pbnRzLnNsaWNlKDEpfSxuYWY6dGhpcy5wcmVjb21wdXRlZC5uYWYmJnt3bmQ6dGhpcy5wcmVjb21wdXRlZC5uYWYud25kLHBvaW50czp0aGlzLnByZWNvbXB1dGVkLm5hZi5wb2ludHMuc2xpY2UoMSl9fV06W3RoaXMueCx0aGlzLnldfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKGUpe3JldHVybiB0LnBvaW50KGVbMF0sZVsxXSxyKX1cInN0cmluZ1wiPT10eXBlb2YgZSYmKGU9SlNPTi5wYXJzZShlKSk7dmFyIGk9dC5wb2ludChlWzBdLGVbMV0scik7aWYoIWVbMl0pcmV0dXJuIGk7dmFyIG89ZVsyXTtyZXR1cm4gaS5wcmVjb21wdXRlZD17YmV0YTpudWxsLGRvdWJsZXM6by5kb3VibGVzJiZ7c3RlcDpvLmRvdWJsZXMuc3RlcCxwb2ludHM6W2ldLmNvbmNhdChvLmRvdWJsZXMucG9pbnRzLm1hcChuKSl9LG5hZjpvLm5hZiYme3duZDpvLm5hZi53bmQscG9pbnRzOltpXS5jb25jYXQoby5uYWYucG9pbnRzLm1hcChuKSl9fSxpfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLmluZn0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0O2lmKHQuaW5mKXJldHVybiB0aGlzO2lmKHRoaXMuZXEodCkpcmV0dXJuIHRoaXMuZGJsKCk7aWYodGhpcy5uZWcoKS5lcSh0KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO2lmKDA9PT10aGlzLnguY21wKHQueCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLnkucmVkU3ViKHQueSk7MCE9PWUuY21wbigwKSYmKGU9ZS5yZWRNdWwodGhpcy54LnJlZFN1Yih0LngpLnJlZEludm0oKSkpO3ZhciByPWUucmVkU3FyKCkucmVkSVN1Yih0aGlzLngpLnJlZElTdWIodC54KSxuPWUucmVkTXVsKHRoaXMueC5yZWRTdWIocikpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgdD10aGlzLnkucmVkQWRkKHRoaXMueSk7aWYoMD09PXQuY21wbigwKSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMuY3VydmUuYSxyPXRoaXMueC5yZWRTcXIoKSxuPXQucmVkSW52bSgpLGk9ci5yZWRBZGQocikucmVkSUFkZChyKS5yZWRJQWRkKGUpLnJlZE11bChuKSxvPWkucmVkU3FyKCkucmVkSVN1Yih0aGlzLngucmVkQWRkKHRoaXMueCkpLGE9aS5yZWRNdWwodGhpcy54LnJlZFN1YihvKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KG8sYSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9bmV3IHModCwxNiksdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChbdGhpc10sW3RdKTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7dmFyIG49W3RoaXMsZV0saT1bdCxyXTtyZXR1cm4gdGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKG4saSwhMCk6dGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLG4saSwyLCEwKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHx0aGlzLmluZj09PXQuaW5mJiYodGhpcy5pbmZ8fDA9PT10aGlzLnguY21wKHQueCkmJjA9PT10aGlzLnkuY21wKHQueSkpfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngsdGhpcy55LnJlZE5lZygpKTtpZih0JiZ0aGlzLnByZWNvbXB1dGVkKXt2YXIgcj10aGlzLnByZWNvbXB1dGVkLG49ZnVuY3Rpb24odCl7cmV0dXJuIHQubmVnKCl9O2UucHJlY29tcHV0ZWQ9e25hZjpyLm5hZiYme3duZDpyLm5hZi53bmQscG9pbnRzOnIubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6ci5kb3VibGVzJiZ7c3RlcDpyLmRvdWJsZXMuc3RlcCxwb2ludHM6ci5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX0saS5wcm90b3R5cGUudG9KPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG51bGwsbnVsbCxudWxsKTt2YXIgdD10aGlzLmN1cnZlLmpwb2ludCh0aGlzLngsdGhpcy55LHRoaXMuY3VydmUub25lKTtyZXR1cm4gdH0sdShvLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgbyh0aGlzLHQsZSxyKX0sby5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnoucmVkSW52bSgpLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRNdWwoZSksbj10aGlzLnkucmVkTXVsKGUpLnJlZE11bCh0KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQ7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dC56LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49dGhpcy54LnJlZE11bChlKSxpPXQueC5yZWRNdWwociksbz10aGlzLnkucmVkTXVsKGUucmVkTXVsKHQueikpLGE9dC55LnJlZE11bChyLnJlZE11bCh0aGlzLnopKSxmPW4ucmVkU3ViKGkpLHM9by5yZWRTdWIoYSk7aWYoMD09PWYuY21wbigwKSlyZXR1cm4gMCE9PXMuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdT1mLnJlZFNxcigpLGg9dS5yZWRNdWwoZiksYz1uLnJlZE11bCh1KSxkPXMucmVkU3FyKCkucmVkSUFkZChoKS5yZWRJU3ViKGMpLnJlZElTdWIoYyksbD1zLnJlZE11bChjLnJlZElTdWIoZCkpLnJlZElTdWIoby5yZWRNdWwoaCkpLHA9dGhpcy56LnJlZE11bCh0LnopLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZCxsLHApfSxvLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdC50b0ooKTtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10aGlzLngsbj10LngucmVkTXVsKGUpLGk9dGhpcy55LG89dC55LnJlZE11bChlKS5yZWRNdWwodGhpcy56KSxhPXIucmVkU3ViKG4pLGY9aS5yZWRTdWIobyk7aWYoMD09PWEuY21wbigwKSlyZXR1cm4gMCE9PWYuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcz1hLnJlZFNxcigpLHU9cy5yZWRNdWwoYSksaD1yLnJlZE11bChzKSxjPWYucmVkU3FyKCkucmVkSUFkZCh1KS5yZWRJU3ViKGgpLnJlZElTdWIoaCksZD1mLnJlZE11bChoLnJlZElTdWIoYykpLnJlZElTdWIoaS5yZWRNdWwodSkpLGw9dGhpcy56LnJlZE11bChhKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9Zm9yKHZhciBuPXRoaXMuY3VydmUuYSxpPXRoaXMuY3VydmUudGludixvPXRoaXMueCxhPXRoaXMueSxmPXRoaXMueixzPWYucmVkU3FyKCkucmVkU3FyKCksdT1hLnJlZEFkZChhKSxyPTA7cjx0O3IrKyl7dmFyIGg9by5yZWRTcXIoKSxjPXUucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9aC5yZWRBZGQoaCkucmVkSUFkZChoKS5yZWRJQWRkKG4ucmVkTXVsKHMpKSxwPW8ucmVkTXVsKGMpLGI9bC5yZWRTcXIoKS5yZWRJU3ViKHAucmVkQWRkKHApKSx2PXAucmVkSVN1YihiKSx5PWwucmVkTXVsKHYpO3k9eS5yZWRJQWRkKHkpLnJlZElTdWIoZCk7dmFyIG09dS5yZWRNdWwoZik7cisxPHQmJihzPXMucmVkTXVsKGQpKSxvPWIsZj1tLHU9eX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobyx1LnJlZE11bChpKSxmKX0sby5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sby5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpLHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLHQ9cyxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMueC5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD10aGlzLngucmVkQWRkKGMpLnJlZFNxcigpLnJlZElTdWIoaCkucmVkSVN1YihkKTtsPWwucmVkSUFkZChsKTt2YXIgcD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLGI9cC5yZWRTcXIoKSx2PWQucmVkSUFkZChkKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx0PWIucmVkSVN1YihsKS5yZWRJU3ViKGwpLGU9cC5yZWRNdWwobC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpLHI9dGhpcy55LnJlZE11bCh0aGlzLnopLHI9ci5yZWRJQWRkKHIpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpO3Q9czt2YXIgdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLnoucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD10aGlzLngucmVkTXVsKGMpLGw9dGhpcy54LnJlZFN1YihoKS5yZWRNdWwodGhpcy54LnJlZEFkZChoKSk7bD1sLnJlZEFkZChsKS5yZWRJQWRkKGwpO3ZhciBwPWQucmVkSUFkZChkKTtwPXAucmVkSUFkZChwKTt2YXIgYj1wLnJlZEFkZChwKTt0PWwucmVkU3FyKCkucmVkSVN1YihiKSxyPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGMpLnJlZElTdWIoaCk7dmFyIHY9Yy5yZWRTcXIoKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSxlPWwucmVkTXVsKHAucmVkSVN1Yih0KSkucmVkSVN1Yih2KX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZS5hLGU9dGhpcy54LHI9dGhpcy55LG49dGhpcy56LGk9bi5yZWRTcXIoKS5yZWRTcXIoKSxvPWUucmVkU3FyKCksYT1yLnJlZFNxcigpLGY9by5yZWRBZGQobykucmVkSUFkZChvKS5yZWRJQWRkKHQucmVkTXVsKGkpKSxzPWUucmVkQWRkKGUpO3M9cy5yZWRJQWRkKHMpO3ZhciB1PXMucmVkTXVsKGEpLGg9Zi5yZWRTcXIoKS5yZWRJU3ViKHUucmVkQWRkKHUpKSxjPXUucmVkSVN1YihoKSxkPWEucmVkU3FyKCk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9Zi5yZWRNdWwoYykucmVkSVN1YihkKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaCxsLHApfSxvLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPWUucmVkU3FyKCksaT10LnJlZEFkZCh0KS5yZWRJQWRkKHQpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKG4pO2E9YS5yZWRJQWRkKGEpLGE9YS5yZWRBZGQoYSkucmVkSUFkZChhKSxhPWEucmVkSVN1YihvKTt2YXIgZj1hLnJlZFNxcigpLHM9bi5yZWRJQWRkKG4pO3M9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpO3ZhciB1PWkucmVkSUFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIoZikucmVkSVN1YihzKSxoPWUucmVkTXVsKHUpO2g9aC5yZWRJQWRkKGgpLGg9aC5yZWRJQWRkKGgpO3ZhciBjPXRoaXMueC5yZWRNdWwoZikucmVkSVN1YihoKTtjPWMucmVkSUFkZChjKSxjPWMucmVkSUFkZChjKTt2YXIgZD10aGlzLnkucmVkTXVsKHUucmVkTXVsKHMucmVkSVN1Yih1KSkucmVkSVN1YihhLnJlZE11bChmKSkpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPXRoaXMuei5yZWRBZGQoYSkucmVkU3FyKCkucmVkSVN1YihyKS5yZWRJU3ViKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW5ldyBzKHQsZSksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtpZihcImFmZmluZVwiPT09dC50eXBlKXJldHVybiB0aGlzLmVxKHQudG9KKCkpO2lmKHRoaXM9PT10KXJldHVybiEwO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKHQueC5yZWRNdWwoZSkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49ZS5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKHQueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIodC55LnJlZE11bChuKSkuY21wbigwKX0sby5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChlKTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49dC5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChlKTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH1yZXR1cm4hMX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSxvLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe1wic2hvcnRcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLnNob3J0KHQpOlwiZWR3YXJkc1wiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuZWR3YXJkcyh0KTp0aGlzLmN1cnZlPW5ldyBmLmN1cnZlLm1vbnQodCksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD10Lmhhc2gscyh0aGlzLmcudmFsaWRhdGUoKSxcIkludmFsaWQgY3VydmVcIikscyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLFwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE9cIil9ZnVuY3Rpb24gaSh0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPW5ldyBuKGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSkscn19KX12YXIgbz1lLGE9cig0OSksZj1yKDE5KSxzPWYudXRpbHMuYXNzZXJ0O28uUHJlc2V0Q3VydmU9bixpKFwicDE5MlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAxOTJcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjFcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMlwiLFwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTFcIl19KSxpKFwicDIyNFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAyMjRcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmVcIixiOlwiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjRcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2RcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMVwiLFwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzRcIl19KSxpKFwicDI1NlwiLHtcbnR5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIDAwMDAwMDAxIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjVhYzYzNWQ4IGFhM2E5M2U3IGIzZWJiZDU1IDc2OTg4NmJjIDY1MWQwNmIwIGNjNTNiMGY2IDNiY2UzYzNlIDI3ZDI2MDRiXCIsbjpcImZmZmZmZmZmIDAwMDAwMDAwIGZmZmZmZmZmIGZmZmZmZmZmIGJjZTZmYWFkIGE3MTc5ZTg0IGYzYjljYWMyIGZjNjMyNTUxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiNmIxN2QxZjIgZTEyYzQyNDcgZjhiY2U2ZTUgNjNhNDQwZjIgNzcwMzdkODEgMmRlYjMzYTAgZjRhMTM5NDUgZDg5OGMyOTZcIixcIjRmZTM0MmUyIGZlMWE3ZjliIDhlZTdlYjRhIDdjMGY5ZTE2IDJiY2UzMzU3IDZiMzE1ZWNlIGNiYjY0MDY4IDM3YmY1MWY1XCJdfSksaShcInAzODRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmNcIixiOlwiYjMzMTJmYTcgZTIzZWU3ZTQgOTg4ZTA1NmIgZTNmODJkMTkgMTgxZDljNmUgZmU4MTQxMTIgMDMxNDA4OGYgNTAxMzg3NWEgYzY1NjM5OGQgOGEyZWQxOWQgMmE4NWM4ZWQgZDNlYzJhZWZcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgYzc2MzRkODEgZjQzNzJkZGYgNTgxYTBkYjIgNDhiMGE3N2EgZWNlYzE5NmEgY2NjNTI5NzNcIixoYXNoOmEuc2hhMzg0LGdSZWQ6ITEsZzpbXCJhYTg3Y2EyMiBiZThiMDUzNyA4ZWIxYzcxZSBmMzIwYWQ3NCA2ZTFkM2I2MiA4YmE3OWI5OCA1OWY3NDFlMCA4MjU0MmEzOCA1NTAyZjI1ZCBiZjU1Mjk2YyAzYTU0NWUzOCA3Mjc2MGFiN1wiLFwiMzYxN2RlNGEgOTYyNjJjNmYgNWQ5ZTk4YmYgOTI5MmRjMjkgZjhmNDFkYmQgMjg5YTE0N2MgZTlkYTMxMTMgYjVmMGI4YzAgMGE2MGIxY2UgMWQ3ZTgxOWQgN2E0MzFkN2MgOTBlYTBlNWZcIl19KSxpKFwicDUyMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCIwMDAwMDA1MSA5NTNlYjk2MSA4ZTFjOWExZiA5MjlhMjFhMCBiNjg1NDBlZSBhMmRhNzI1YiA5OWIzMTVmMyBiOGI0ODk5MSA4ZWYxMDllMSA1NjE5Mzk1MSBlYzdlOTM3YiAxNjUyYzBiZCAzYmIxYmYwNyAzNTczZGY4OCAzZDJjMzRmMSBlZjQ1MWZkNCA2YjUwM2YwMFwiLG46XCIwMDAwMDFmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmYSA1MTg2ODc4MyBiZjJmOTY2YiA3ZmNjMDE0OCBmNzA5YTVkMCAzYmI1YzliOCA4OTljNDdhZSBiYjZmYjcxZSA5MTM4NjQwOVwiLGhhc2g6YS5zaGE1MTIsZ1JlZDohMSxnOltcIjAwMDAwMGM2IDg1OGUwNmI3IDA0MDRlOWNkIDllM2VjYjY2IDIzOTViNDQyIDljNjQ4MTM5IDA1M2ZiNTIxIGY4MjhhZjYwIDZiNGQzZGJhIGExNGI1ZTc3IGVmZTc1OTI4IGZlMWRjMTI3IGEyZmZhOGRlIDMzNDhiM2MxIDg1NmE0MjliIGY5N2U3ZTMxIGMyZTViZDY2XCIsXCIwMDAwMDExOCAzOTI5NmE3OCA5YTNiYzAwNCA1YzhhNWZiNCAyYzdkMWJkOSA5OGY1NDQ0OSA1NzliNDQ2OCAxN2FmYmQxNyAyNzNlNjYyYyA5N2VlNzI5OSA1ZWY0MjY0MCBjNTUwYjkwMSAzZmFkMDc2MSAzNTNjNzA4NiBhMjcyYzI0MCA4OGJlOTQ3NiA5ZmQxNjY1MFwiXX0pLGkoXCJjdXJ2ZTI1NTE5XCIse3R5cGU6XCJtb250XCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCI3NmQwNlwiLGI6XCIwXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI5XCJdfSksaShcImVkMjU1MTlcIix7dHlwZTpcImVkd2FyZHNcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIi0xXCIsYzpcIjFcIixkOlwiNTIwMzZjZWUyYjZmZmU3MyA4Y2M3NDA3OTc3NzllODk4IDAwNzAwYTRkNDE0MWQ4YWIgNzVlYjRkY2ExMzU5NzhhM1wiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMjE2OTM2ZDNjZDZlNTNmZWMwYTRlMjMxZmRkNmRjNWM2OTJjYzc2MDk1MjVhN2IyYzk1NjJkNjA4ZjI1ZDUxYVwiLFwiNjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY1OFwiXX0pO3ZhciB1O3RyeXt1PXIoNTIwKX1jYXRjaCh0KXt1PXZvaWQgMH1pKFwic2VjcDI1NmsxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOlwiazI1NlwiLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiLGE6XCIwXCIsYjpcIjdcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgYmFhZWRjZTYgYWY0OGEwM2IgYmZkMjVlOGMgZDAzNjQxNDFcIixoOlwiMVwiLGhhc2g6YS5zaGEyNTYsYmV0YTpcIjdhZTk2YTJiNjU3YzA3MTA2ZTY0NDc5ZWFjMzQzNGU5OWNmMDQ5NzUxMmY1ODk5NWMxMzk2YzI4NzE5NTAxZWVcIixsYW1iZGE6XCI1MzYzYWQ0Y2MwNWMzMGUwYTUyNjFjMDI4ODEyNjQ1YTEyMmUyMmVhMjA4MTY2NzhkZjAyOTY3YzFiMjNiZDcyXCIsYmFzaXM6W3thOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIixiOlwiLWU0NDM3ZWQ2MDEwZTg4Mjg2ZjU0N2ZhOTBhYmZlNGMzXCJ9LHthOlwiMTE0Y2E1MGY3YThlMmYzZjY1N2MxMTA4ZDlkNDRjZmQ4XCIsYjpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCJ9XSxnUmVkOiExLGc6W1wiNzliZTY2N2VmOWRjYmJhYzU1YTA2Mjk1Y2U4NzBiMDcwMjliZmNkYjJkY2UyOGQ5NTlmMjgxNWIxNmY4MTc5OFwiLFwiNDgzYWRhNzcyNmEzYzQ2NTVkYTRmYmZjMGUxMTA4YThmZDE3YjQ0OGE2ODU1NDE5OWM0N2QwOGZmYjEwZDRiOFwiLHVdfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oXCJzdHJpbmdcIj09dHlwZW9mIHQmJihmKG8uY3VydmVzLmhhc093blByb3BlcnR5KHQpLFwiVW5rbm93biBjdXJ2ZSBcIit0KSx0PW8uY3VydmVzW3RdKSx0IGluc3RhbmNlb2Ygby5jdXJ2ZXMuUHJlc2V0Q3VydmUmJih0PXtjdXJ2ZTp0fSksdGhpcy5jdXJ2ZT10LmN1cnZlLmN1cnZlLHRoaXMubj10aGlzLmN1cnZlLm4sdGhpcy5uaD10aGlzLm4udXNocm4oMSksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLmc9dC5jdXJ2ZS5nLHRoaXMuZy5wcmVjb21wdXRlKHQuY3VydmUubi5iaXRMZW5ndGgoKSsxKSx2b2lkKHRoaXMuaGFzaD10Lmhhc2h8fHQuY3VydmUuaGFzaCkpOm5ldyBuKHQpfXZhciBpPXIoMTgpLG89cigxOSksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1yKDUxNCksdT1yKDUxNSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUua2V5UGFpcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IHModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHJpdmF0ZSh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5mcm9tUHVibGljKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUuZ2VuS2V5UGFpcj1mdW5jdGlvbih0KXt0fHwodD17fSk7Zm9yKHZhciBlPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxwZXJzOnQucGVycyxlbnRyb3B5OnQuZW50cm9weXx8by5yYW5kKHRoaXMuaGFzaC5obWFjU3RyZW5ndGgpLG5vbmNlOnRoaXMubi50b0FycmF5KCl9KSxyPXRoaXMubi5ieXRlTGVuZ3RoKCksbj10aGlzLm4uc3ViKG5ldyBpKDIpKTs7KXt2YXIgYT1uZXcgaShlLmdlbmVyYXRlKHIpKTtpZighKGEuY21wKG4pPjApKXJldHVybiBhLmlhZGRuKDEpLHRoaXMua2V5RnJvbVByaXZhdGUoYSl9fSxuLnByb3RvdHlwZS5fdHJ1bmNhdGVUb049ZnVuY3Rpb24odCxlKXt2YXIgcj04KnQuYnl0ZUxlbmd0aCgpLXRoaXMubi5iaXRMZW5ndGgoKTtyZXR1cm4gcj4wJiYodD10LnVzaHJuKHIpKSwhZSYmdC5jbXAodGhpcy5uKT49MD90LnN1Yih0aGlzLm4pOnR9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIsbil7XCJvYmplY3RcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxufHwobj17fSksZT10aGlzLmtleUZyb21Qcml2YXRlKGUsciksdD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSk7Zm9yKHZhciBhPXRoaXMubi5ieXRlTGVuZ3RoKCksZj1lLmdldFByaXZhdGUoKS50b0FycmF5KFwiYmVcIixhKSxzPXQudG9BcnJheShcImJlXCIsYSksaD1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gsZW50cm9weTpmLG5vbmNlOnMscGVyczpuLnBlcnMscGVyc0VuYzpuLnBlcnNFbmN9KSxjPXRoaXMubi5zdWIobmV3IGkoMSkpLGQ9MDshMDtkKyspe3ZhciBsPW4uaz9uLmsoZCk6bmV3IGkoaC5nZW5lcmF0ZSh0aGlzLm4uYnl0ZUxlbmd0aCgpKSk7aWYobD10aGlzLl90cnVuY2F0ZVRvTihsLCEwKSwhKGwuY21wbigxKTw9MHx8bC5jbXAoYyk+PTApKXt2YXIgcD10aGlzLmcubXVsKGwpO2lmKCFwLmlzSW5maW5pdHkoKSl7dmFyIGI9cC5nZXRYKCksdj1iLnVtb2QodGhpcy5uKTtpZigwIT09di5jbXBuKDApKXt2YXIgeT1sLmludm0odGhpcy5uKS5tdWwodi5tdWwoZS5nZXRQcml2YXRlKCkpLmlhZGQodCkpO2lmKHk9eS51bW9kKHRoaXMubiksMCE9PXkuY21wbigwKSl7dmFyIG09KHAuZ2V0WSgpLmlzT2RkKCk/MTowKXwoMCE9PWIuY21wKHYpPzI6MCk7cmV0dXJuIG4uY2Fub25pY2FsJiZ5LmNtcCh0aGlzLm5oKT4wJiYoeT10aGlzLm4uc3ViKHkpLG1ePTEpLG5ldyB1KHtyOnYsczp5LHJlY292ZXJ5UGFyYW06bX0pfX19fX19LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscixuKXt0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKSxyPXRoaXMua2V5RnJvbVB1YmxpYyhyLG4pLGU9bmV3IHUoZSxcImhleFwiKTt2YXIgbz1lLnIsYT1lLnM7aWYoby5jbXBuKDEpPDB8fG8uY21wKHRoaXMubik+PTApcmV0dXJuITE7aWYoYS5jbXBuKDEpPDB8fGEuY21wKHRoaXMubik+PTApcmV0dXJuITE7dmFyIGY9YS5pbnZtKHRoaXMubikscz1mLm11bCh0KS51bW9kKHRoaXMubiksaD1mLm11bChvKS51bW9kKHRoaXMubik7aWYoIXRoaXMuY3VydmUuX21heHdlbGxUcmljayl7dmFyIGM9dGhpcy5nLm11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiYwPT09Yy5nZXRYKCkudW1vZCh0aGlzLm4pLmNtcChvKX12YXIgYz10aGlzLmcuam11bEFkZChzLHIuZ2V0UHVibGljKCksaCk7cmV0dXJuIWMuaXNJbmZpbml0eSgpJiZjLmVxWFRvUChvKX0sbi5wcm90b3R5cGUucmVjb3ZlclB1YktleT1mdW5jdGlvbih0LGUscixuKXtmKCgzJnIpPT09cixcIlRoZSByZWNvdmVyeSBwYXJhbSBpcyBtb3JlIHRoYW4gdHdvIGJpdHNcIiksZT1uZXcgdShlLG4pO3ZhciBvPXRoaXMubixhPW5ldyBpKHQpLHM9ZS5yLGg9ZS5zLGM9MSZyLGQ9cj4+MTtpZihzLmNtcCh0aGlzLmN1cnZlLnAudW1vZCh0aGlzLmN1cnZlLm4pKT49MCYmZCl0aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCBzZW5jb25kIGtleSBjYW5kaW5hdGVcIik7cz1kP3RoaXMuY3VydmUucG9pbnRGcm9tWChzLmFkZCh0aGlzLmN1cnZlLm4pLGMpOnRoaXMuY3VydmUucG9pbnRGcm9tWChzLGMpO3ZhciBsPWUuci5pbnZtKG8pLHA9by5zdWIoYSkubXVsKGwpLnVtb2QobyksYj1oLm11bChsKS51bW9kKG8pO3JldHVybiB0aGlzLmcubXVsQWRkKHAscyxiKX0sbi5wcm90b3R5cGUuZ2V0S2V5UmVjb3ZlcnlQYXJhbT1mdW5jdGlvbih0LGUscixuKXtpZihlPW5ldyB1KGUsbiksbnVsbCE9PWUucmVjb3ZlcnlQYXJhbSlyZXR1cm4gZS5yZWNvdmVyeVBhcmFtO2Zvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvO3RyeXtvPXRoaXMucmVjb3ZlclB1YktleSh0LGUsaSl9Y2F0Y2godCl7Y29udGludWV9aWYoby5lcShyKSlyZXR1cm4gaX10aHJvdyBuZXcgRXJyb3IoXCJVbmFibGUgdG8gZmluZCB2YWxpZCByZWNvdmVyeSBmYWN0b3JcIil9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWM9dCx0aGlzLnByaXY9bnVsbCx0aGlzLnB1Yj1udWxsLGUucHJpdiYmdGhpcy5faW1wb3J0UHJpdmF0ZShlLnByaXYsZS5wcml2RW5jKSxlLnB1YiYmdGhpcy5faW1wb3J0UHVibGljKGUucHViLGUucHViRW5jKX12YXIgaT1yKDE4KTt0LmV4cG9ydHM9bixuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplLHB1YkVuYzpyfSl9LG4uZnJvbVByaXZhdGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3ByaXY6ZSxwcml2RW5jOnJ9KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmdldFB1YmxpYygpO3JldHVybiB0LmlzSW5maW5pdHkoKT97cmVzdWx0OiExLHJlYXNvbjpcIkludmFsaWQgcHVibGljIGtleVwifTp0LnZhbGlkYXRlKCk/dC5tdWwodGhpcy5lYy5jdXJ2ZS5uKS5pc0luZmluaXR5KCk/e3Jlc3VsdDohMCxyZWFzb246bnVsbH06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5ICogTiAhPSBPXCJ9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSBpcyBub3QgYSBwb2ludFwifX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJihlPXQsdD1udWxsKSx0aGlzLnB1Ynx8KHRoaXMucHViPXRoaXMuZWMuZy5tdWwodGhpcy5wcml2KSksZT90aGlzLnB1Yi5lbmNvZGUoZSx0KTp0aGlzLnB1Yn0sbi5wcm90b3R5cGUuZ2V0UHJpdmF0ZT1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD90aGlzLnByaXYudG9TdHJpbmcoMTYsMik6dGhpcy5wcml2fSxuLnByb3RvdHlwZS5faW1wb3J0UHJpdmF0ZT1mdW5jdGlvbih0LGUpe3RoaXMucHJpdj1uZXcgaSh0LGV8fDE2KSx0aGlzLnByaXY9dGhpcy5wcml2LnVtb2QodGhpcy5lYy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUuX2ltcG9ydFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiB0Lnh8fHQueT92b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUucG9pbnQodC54LHQueSkpOnZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5kZWNvZGVQb2ludCh0LGUpKX0sbi5wcm90b3R5cGUuZGVyaXZlPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm11bCh0aGlzLnByaXYpLmdldFgoKX0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZWMuc2lnbih0LHRoaXMsZSxyKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWMudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVyblwiPEtleSBwcml2OiBcIisodGhpcy5wcml2JiZ0aGlzLnByaXYudG9TdHJpbmcoMTYsMikpK1wiIHB1YjogXCIrKHRoaXMucHViJiZ0aGlzLnB1Yi5pbnNwZWN0KCkpK1wiID5cIn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiBuP3Q6dm9pZCh0aGlzLl9pbXBvcnRERVIodCxlKXx8KGModC5yJiZ0LnMsXCJTaWduYXR1cmUgd2l0aG91dCByIG9yIHNcIiksdGhpcy5yPW5ldyBzKHQuciwxNiksdGhpcy5zPW5ldyBzKHQucywxNiksdm9pZCAwPT09dC5yZWNvdmVyeVBhcmFtP3RoaXMucmVjb3ZlcnlQYXJhbT1udWxsOnRoaXMucmVjb3ZlcnlQYXJhbT10LnJlY292ZXJ5UGFyYW0pKX1mdW5jdGlvbiBpKCl7dGhpcy5wbGFjZT0wfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj10W2UucGxhY2UrK107aWYoISgxMjgmcikpcmV0dXJuIHI7Zm9yKHZhciBuPTE1JnIsaT0wLG89MCxhPWUucGxhY2U7bzxuO28rKyxhKyspaTw8PTgsaXw9dFthXTtyZXR1cm4gZS5wbGFjZT1hLGl9ZnVuY3Rpb24gYSh0KXtmb3IodmFyIGU9MCxyPXQubGVuZ3RoLTE7IXRbZV0mJiEoMTI4JnRbZSsxXSkmJmU8cjspZSsrO3JldHVybiAwPT09ZT90OnQuc2xpY2UoZSl9ZnVuY3Rpb24gZih0LGUpe2lmKGU8MTI4KXJldHVybiB2b2lkIHQucHVzaChlKTt2YXIgcj0xKyhNYXRoLmxvZyhlKS9NYXRoLkxOMj4+PjMpO2Zvcih0LnB1c2goMTI4fHIpOy0tcjspdC5wdXNoKGU+Pj4ocjw8MykmMjU1KTt0LnB1c2goZSl9dmFyIHM9cigxOCksdT1yKDE5KSxoPXUudXRpbHMsYz1oLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW1wb3J0REVSPWZ1bmN0aW9uKHQsZSl7dD1oLnRvQXJyYXkodCxlKTt2YXIgcj1uZXcgaTtpZig0OCE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgbj1vKHQscik7aWYobityLnBsYWNlIT09dC5sZW5ndGgpcmV0dXJuITE7aWYoMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgYT1vKHQsciksZj10LnNsaWNlKHIucGxhY2UsYStyLnBsYWNlKTtpZihyLnBsYWNlKz1hLDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIHU9byh0LHIpO2lmKHQubGVuZ3RoIT09dStyLnBsYWNlKXJldHVybiExO3ZhciBjPXQuc2xpY2Uoci5wbGFjZSx1K3IucGxhY2UpO3JldHVybiAwPT09ZlswXSYmMTI4JmZbMV0mJihmPWYuc2xpY2UoMSkpLDA9PT1jWzBdJiYxMjgmY1sxXSYmKGM9Yy5zbGljZSgxKSksdGhpcy5yPW5ldyBzKGYpLHRoaXMucz1uZXcgcyhjKSx0aGlzLnJlY292ZXJ5UGFyYW09bnVsbCwhMH0sbi5wcm90b3R5cGUudG9ERVI9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5yLnRvQXJyYXkoKSxyPXRoaXMucy50b0FycmF5KCk7Zm9yKDEyOCZlWzBdJiYoZT1bMF0uY29uY2F0KGUpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSksZT1hKGUpLHI9YShyKTshKHJbMF18fDEyOCZyWzFdKTspcj1yLnNsaWNlKDEpO3ZhciBuPVsyXTtmKG4sZS5sZW5ndGgpLG49bi5jb25jYXQoZSksbi5wdXNoKDIpLGYobixyLmxlbmd0aCk7dmFyIGk9bi5jb25jYXQociksbz1bNDhdO3JldHVybiBmKG8saS5sZW5ndGgpLG89by5jb25jYXQoaSksaC5lbmNvZGUobyx0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKGYoXCJlZDI1NTE5XCI9PT10LFwib25seSB0ZXN0ZWQgd2l0aCBlZDI1NTE5IHNvIGZhclwiKSwhKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dmFyIHQ9by5jdXJ2ZXNbdF0uY3VydmU7dGhpcy5jdXJ2ZT10LHRoaXMuZz10LmcsdGhpcy5nLnByZWNvbXB1dGUodC5uLmJpdExlbmd0aCgpKzEpLHRoaXMucG9pbnRDbGFzcz10LnBvaW50KCkuY29uc3RydWN0b3IsdGhpcy5lbmNvZGluZ0xlbmd0aD1NYXRoLmNlaWwodC5uLmJpdExlbmd0aCgpLzgpLHRoaXMuaGFzaD1pLnNoYTUxMn12YXIgaT1yKDQ5KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5wYXJzZUJ5dGVzLHU9cig1MTcpLGg9cig1MTgpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlKXt0PXModCk7dmFyIHI9dGhpcy5rZXlGcm9tU2VjcmV0KGUpLG49dGhpcy5oYXNoSW50KHIubWVzc2FnZVByZWZpeCgpLHQpLGk9dGhpcy5nLm11bChuKSxvPXRoaXMuZW5jb2RlUG9pbnQoaSksYT10aGlzLmhhc2hJbnQobyxyLnB1YkJ5dGVzKCksdCkubXVsKHIucHJpdigpKSxmPW4uYWRkKGEpLnVtb2QodGhpcy5jdXJ2ZS5uKTtyZXR1cm4gdGhpcy5tYWtlU2lnbmF0dXJlKHtSOmksUzpmLFJlbmNvZGVkOm99KX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyKXt0PXModCksZT10aGlzLm1ha2VTaWduYXR1cmUoZSk7dmFyIG49dGhpcy5rZXlGcm9tUHVibGljKHIpLGk9dGhpcy5oYXNoSW50KGUuUmVuY29kZWQoKSxuLnB1YkJ5dGVzKCksdCksbz10aGlzLmcubXVsKGUuUygpKSxhPWUuUigpLmFkZChuLnB1YigpLm11bChpKSk7cmV0dXJuIGEuZXEobyl9LG4ucHJvdG90eXBlLmhhc2hJbnQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9dGhpcy5oYXNoKCksZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdC51cGRhdGUoYXJndW1lbnRzW2VdKTtyZXR1cm4gYS5pbnRGcm9tTEUodC5kaWdlc3QoKSkudW1vZCh0aGlzLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21QdWJsaWModGhpcyx0KX0sbi5wcm90b3R5cGUua2V5RnJvbVNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tU2VjcmV0KHRoaXMsdCl9LG4ucHJvdG90eXBlLm1ha2VTaWduYXR1cmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBoP3Q6bmV3IGgodGhpcyx0KX0sbi5wcm90b3R5cGUuZW5jb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dmFyIGU9dC5nZXRZKCkudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIGVbdGhpcy5lbmNvZGluZ0xlbmd0aC0xXXw9dC5nZXRYKCkuaXNPZGQoKT8xMjg6MCxlfSxuLnByb3RvdHlwZS5kZWNvZGVQb2ludD1mdW5jdGlvbih0KXt0PWEucGFyc2VCeXRlcyh0KTt2YXIgZT10Lmxlbmd0aC0xLHI9dC5zbGljZSgwLGUpLmNvbmNhdCh0W2VdJi0xMjkpLG49MCE9PSgxMjgmdFtlXSksaT1hLmludEZyb21MRShyKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludEZyb21ZKGksbil9LG4ucHJvdG90eXBlLmVuY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gdC50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKX0sbi5wcm90b3R5cGUuZGVjb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiBhLmludEZyb21MRSh0KX0sbi5wcm90b3R5cGUuaXNQb2ludD1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMucG9pbnRDbGFzc319LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LHRoaXMuX3NlY3JldD1mKGUuc2VjcmV0KSx0LmlzUG9pbnQoZS5wdWIpP3RoaXMuX3B1Yj1lLnB1Yjp0aGlzLl9wdWJCeXRlcz1mKGUucHViKX12YXIgaT1yKDE5KSxvPWkudXRpbHMsYT1vLmFzc2VydCxmPW8ucGFyc2VCeXRlcyxzPW8uY2FjaGVkUHJvcGVydHk7bi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmV9KX0sbi5mcm9tU2VjcmV0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7c2VjcmV0OmV9KX0sbi5wcm90b3R5cGUuc2VjcmV0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NlY3JldH0scyhuLFwicHViQnl0ZXNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMucHViKCkpfSkscyhuLFwicHViXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHViQnl0ZXM/dGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLl9wdWJCeXRlcyk6dGhpcy5lZGRzYS5nLm11bCh0aGlzLnByaXYoKSl9KSxzKG4sXCJwcml2Qnl0ZXNcIixmdW5jdGlvbigpe3ZhciB0PXRoaXMuZWRkc2EsZT10aGlzLmhhc2goKSxyPXQuZW5jb2RpbmdMZW5ndGgtMSxuPWUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gblswXSY9MjQ4LG5bcl0mPTEyNyxuW3JdfD02NCxufSkscyhuLFwicHJpdlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMucHJpdkJ5dGVzKCkpfSkscyhuLFwiaGFzaFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuaGFzaCgpLnVwZGF0ZSh0aGlzLnNlY3JldCgpKS5kaWdlc3QoKX0pLHMobixcIm1lc3NhZ2VQcmVmaXhcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmhhc2goKS5zbGljZSh0aGlzLmVkZHNhLmVuY29kaW5nTGVuZ3RoKX0pLG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBjYW4gb25seSB2ZXJpZnlcIiksdGhpcy5lZGRzYS5zaWduKHQsdGhpcyl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVkZHNhLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmdldFNlY3JldD1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGlzIHB1YmxpYyBvbmx5XCIpLG8uZW5jb2RlKHRoaXMuc2VjcmV0KCksdCl9LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gby5lbmNvZGUodGhpcy5wdWJCeXRlcygpLHQpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsXCJvYmplY3RcIiE9dHlwZW9mIGUmJihlPXUoZSkpLEFycmF5LmlzQXJyYXkoZSkmJihlPXtSOmUuc2xpY2UoMCx0LmVuY29kaW5nTGVuZ3RoKSxTOmUuc2xpY2UodC5lbmNvZGluZ0xlbmd0aCl9KSxmKGUuUiYmZS5TLFwiU2lnbmF0dXJlIHdpdGhvdXQgUiBvciBTXCIpLHQuaXNQb2ludChlLlIpJiYodGhpcy5fUj1lLlIpLGUuUyBpbnN0YW5jZW9mIGkmJih0aGlzLl9TPWUuUyksdGhpcy5fUmVuY29kZWQ9QXJyYXkuaXNBcnJheShlLlIpP2UuUjplLlJlbmNvZGVkLHRoaXMuX1NlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5TKT9lLlM6ZS5TZW5jb2RlZH12YXIgaT1yKDE4KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9YS5jYWNoZWRQcm9wZXJ0eSx1PWEucGFyc2VCeXRlcztzKG4sXCJTXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5TZW5jb2RlZCgpKX0pLHMobixcIlJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuUmVuY29kZWQoKSl9KSxzKG4sXCJSZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5SKCkpfSkscyhuLFwiU2VuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZUludCh0aGlzLlMoKSl9KSxuLnByb3RvdHlwZS50b0J5dGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuUmVuY29kZWQoKS5jb25jYXQodGhpcy5TZW5jb2RlZCgpKX0sbi5wcm90b3R5cGUudG9IZXg9ZnVuY3Rpb24oKXtyZXR1cm4gYS5lbmNvZGUodGhpcy50b0J5dGVzKCksXCJoZXhcIikudG9VcHBlckNhc2UoKX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt0aGlzLmhhc2g9dC5oYXNoLHRoaXMucHJlZFJlc2lzdD0hIXQucHJlZFJlc2lzdCx0aGlzLm91dExlbj10aGlzLmhhc2gub3V0U2l6ZSx0aGlzLm1pbkVudHJvcHk9dC5taW5FbnRyb3B5fHx0aGlzLmhhc2guaG1hY1N0cmVuZ3RoLHRoaXMucmVzZWVkPW51bGwsdGhpcy5yZXNlZWRJbnRlcnZhbD1udWxsLHRoaXMuSz1udWxsLHRoaXMuVj1udWxsO3ZhciBlPWEudG9BcnJheSh0LmVudHJvcHksdC5lbnRyb3B5RW5jKSxyPWEudG9BcnJheSh0Lm5vbmNlLHQubm9uY2VFbmMpLGk9YS50b0FycmF5KHQucGVycyx0LnBlcnNFbmMpO2YoZS5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl9pbml0KGUscixpKX12YXIgaT1yKDQ5KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmNvbmNhdChlKS5jb25jYXQocik7dGhpcy5LPW5ldyBBcnJheSh0aGlzLm91dExlbi84KSx0aGlzLlY9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpO2Zvcih2YXIgaT0wO2k8dGhpcy5WLmxlbmd0aDtpKyspdGhpcy5LW2ldPTAsdGhpcy5WW2ldPTE7dGhpcy5fdXBkYXRlKG4pLHRoaXMucmVzZWVkPTEsdGhpcy5yZXNlZWRJbnRlcnZhbD0yODE0NzQ5NzY3MTA2NTZ9LG4ucHJvdG90eXBlLl9obWFjPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpLmhtYWModGhpcy5oYXNoLHRoaXMuSyl9LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMF0pO3QmJihlPWUudXBkYXRlKHQpKSx0aGlzLks9ZS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLHQmJih0aGlzLks9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLnVwZGF0ZShbMV0pLnVwZGF0ZSh0KS5kaWdlc3QoKSx0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpKX0sbi5wcm90b3R5cGUucmVzZWVkPWZ1bmN0aW9uKHQsZSxyLG4pe1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHQ9YS50b0J1ZmZlcih0LGUpLHI9YS50b0J1ZmZlcihyLG4pLGYodC5sZW5ndGg+PXRoaXMubWluRW50cm9weS84LFwiTm90IGVub3VnaCBlbnRyb3B5LiBNaW5pbXVtIGlzOiBcIit0aGlzLm1pbkVudHJvcHkrXCIgYml0c1wiKSx0aGlzLl91cGRhdGUodC5jb25jYXQocnx8W10pKSx0aGlzLnJlc2VlZD0xfSxuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0LGUscixuKXtpZih0aGlzLnJlc2VlZD50aGlzLnJlc2VlZEludGVydmFsKXRocm93IG5ldyBFcnJvcihcIlJlc2VlZCBpcyByZXF1aXJlZFwiKTtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSxyJiYocj1hLnRvQXJyYXkocixuKSx0aGlzLl91cGRhdGUocikpO2Zvcih2YXIgaT1bXTtpLmxlbmd0aDx0Oyl0aGlzLlY9dGhpcy5faG1hYygpLnVwZGF0ZSh0aGlzLlYpLmRpZ2VzdCgpLGk9aS5jb25jYXQodGhpcy5WKTt2YXIgbz1pLnNsaWNlKDAsdCk7cmV0dXJuIHRoaXMuX3VwZGF0ZShyKSx0aGlzLnJlc2VlZCsrLGEuZW5jb2RlKG8sZSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17ZG91Ymxlczp7c3RlcDo0LHBvaW50czpbW1wiZTYwZmNlOTNiNTllOWVjNTMwMTFhYWJjMjFjMjNlOTdiMmEzMTM2OWI4N2E1YWU5YzQ0ZWU4OWUyYTZkZWMwYVwiLFwiZjdlMzUwNzM5OWU1OTU5MjlkYjk5ZjM0ZjU3OTM3MTAxMjk2ODkxZTQ0ZDIzZjBiZTFmMzJjY2U2OTYxNjgyMVwiXSxbXCI4MjgyMjYzMjEyYzYwOWQ5ZWEyYTZlM2UxNzJkZTIzOGQ4YzM5Y2FiZDVhYzFjYTEwNjQ2ZTIzZmQ1ZjUxNTA4XCIsXCIxMWY4YTgwOTg1NTdkZmU0NWU4MjU2ZTgzMGI2MGFjZTYyZDYxM2FjMmY3YjE3YmVkMzFiNmVhZmY2ZTI2Y2FmXCJdLFtcIjE3NWUxNTlmNzI4Yjg2NWE3MmY5OWNjNmM2ZmM4NDZkZTBiOTM4MzNmZDIyMjJlZDczZmNlNWI1NTFlNWI3MzlcIixcImQzNTA2ZTBkOWUzYzc5ZWJhNGVmOTdhNTFmZjcxZjVlYWNiNTk1NWFkZDI0MzQ1YzZlZmE2ZmZlZTlmZWQ2OTVcIl0sW1wiMzYzZDkwZDQ0N2IwMGM5Yzk5Y2VhYzA1YjYyNjJlZTA1MzQ0MWM3ZTU1NTUyZmZlNTI2YmFkOGY4M2ZmNDY0MFwiLFwiNGUyNzNhZGZjNzMyMjIxOTUzYjQ0NTM5N2YzMzYzMTQ1YjlhODkwMDgxOTllY2I2MjAwM2M3ZjNiZWU5ZGU5XCJdLFtcIjhiNGI1ZjE2NWRmM2MyYmU4YzYyNDRiNWI3NDU2Mzg4NDNlNGE3ODFhMTViY2QxYjY5Zjc5YTU1ZGZmZGY4MGNcIixcIjRhYWQwYTZmNjhkMzA4YjRiM2ZiZDc4MTNhYjBkYTA0ZjllMzM2NTQ2MTYyZWU1NmIzZWZmMGM2NWZkNGZkMzZcIl0sW1wiNzIzY2JhYTZlNWRiOTk2ZDZiZjc3MWMwMGJkNTQ4YzdiNzAwZGJmZmE2YzBlNzdiY2I2MTE1OTI1MjMyZmNkYVwiLFwiOTZlODY3YjU1OTVjYzQ5OGE5MjExMzc0ODg4MjRkNmUyNjYwYTA2NTM3Nzk0OTQ4MDFkYzA2OWQ5ZWIzOWY1ZlwiXSxbXCJlZWJmYTRkNDkzYmViZjk4YmE1ZmVlYzgxMmMyZDNiNTA5NDc5NjEyMzdhOTE5ODM5YTUzM2VjYTBlN2RkN2ZhXCIsXCI1ZDlhOGNhMzk3MGVmMGYyNjllZTdlZGFmMTc4MDg5ZDlhZTRjZGMzYTcxMWY3MTJkZGZkNGZkYWUxZGU4OTk5XCJdLFtcIjEwMGY0NGRhNjk2ZTcxNjcyNzkxZDBhMDliN2JkZTQ1OWYxMjE1YTI5YjNjMDNiZmVmZDc4MzViMzlhNDhkYjBcIixcImNkZDllMTMxOTJhMDBiNzcyZWM4ZjMzMDBjMDkwNjY2YjdmZjRhMThmZjUxOTVhYzBmYmQ1Y2Q2MmJjNjVhMDlcIl0sW1wiZTEwMzFiZTI2MmM3ZWQxYjFkYzkyMjdhNGEwNGMwMTdhNzdmOGQ0NDY0ZjNiMzg1MmM4YWNkZTZlNTM0ZmQyZFwiLFwiOWQ3MDYxOTI4OTQwNDA1ZTZiYjZhNDE3NjU5NzUzNWFmMjkyZGQ0MTllMWNlZDc5YTQ0ZjE4ZjI5NDU2YTAwZFwiXSxbXCJmZWVhNmNhZTQ2ZDU1YjUzMGFjMjgzOWYxNDNiZDdlYzVjZjhiMjY2YTQxZDZhZjUyZDVlNjg4ZDkwOTQ2OTZkXCIsXCJlNTdjNmI2Yzk3ZGNlMWJhYjA2ZTRlMTJiZjNlY2Q1Yzk4MWM4OTU3Y2M0MTQ0MmQzMTU1ZGViZjE4MDkwMDg4XCJdLFtcImRhNjdhOTFkOTEwNDljZGNiMzY3YmU0YmU2ZmZjYTNjZmVlZDY1N2Q4MDg1ODNkZTMzZmE5NzhiYzFlYzZjYjFcIixcIjliYWNhYTM1NDgxNjQyYmM0MWY0NjNmN2VjOTc4MGU1ZGVjN2FkYzUwOGY3NDBhMTdlOWVhOGUyN2E2OGJlMWRcIl0sW1wiNTM5MDRmYWEwYjMzNGNkZGE2ZTAwMDkzNWVmMjIxNTFlYzA4ZDBmN2JiMTEwNjlmNTc1NDVjY2MxYTM3YjdjMFwiLFwiNWJjMDg3ZDBiYzgwMTA2ZDg4YzllY2NhYzIwZDNjMWMxMzk5OTk4MWUxNDQzNDY5OWRjYjA5NmIwMjI3NzFjOFwiXSxbXCI4ZTdiY2QwYmQzNTk4M2E3NzE5Y2NhNzc2NGNhOTA2Nzc5YjUzYTA0M2E5YjhiY2FlZmY5NTlmNDNhZDg2MDQ3XCIsXCIxMGI3NzcwYjJhM2RhNGIzOTQwMzEwNDIwY2E5NTE0NTc5ZTg4ZTJlNDdmZDY4YjNlYTEwMDQ3ZTg0NjAzNzJhXCJdLFtcIjM4NWVlZDM0YzFjZGZmMjFlNmQwODE4Njg5YjgxYmRlNzFhN2Y0ZjE4Mzk3ZTY2OTBhODQxZTE1OTljNDM4NjJcIixcIjI4M2JlYmMzZThlYTIzZjU2NzAxZGUxOWU5ZWJmNDU3NmIzMDRlZWMyMDg2ZGM4Y2MwNDU4ZmU1NTQyZTU0NTNcIl0sW1wiNmY5ZDliODAzZWNmMTkxNjM3YzczYTQ0MTNkZmExODBmZGRmODRhNTk0N2ZiYzljNjA2ZWQ4NmMzZmFjM2E3XCIsXCI3YzgwYzY4ZTYwMzA1OWJhNjliOGUyYTMwZTQ1YzRkNDdlYTRkZDJmNWMyODEwMDJkODY4OTA2MDNhODQyMTYwXCJdLFtcIjMzMjJkNDAxMjQzYzRlMjU4MmEyMTQ3YzEwNGQ2ZWNiZjc3NGQxNjNkYjBmNWU1MzEzYjdlMGU3NDJkMGU2YmRcIixcIjU2ZTcwNzk3ZTk2NjRlZjViZmIwMTliYzRkZGFmOWI3MjgwNWY2M2VhMjg3M2FmNjI0ZjNhMmU5NmMyOGIyYTBcIl0sW1wiODU2NzJjN2QyZGUwYjdkYTJiZDE3NzBkODk2NjU4Njg3NDFiM2Y5YWY3NjQzMzk3NzIxZDc0ZDI4MTM0YWI4M1wiLFwiN2M0ODFiOWI1YjQzYjJlYjYzNzQwNDliZmE2MmMyZTVlNzdmMTdmY2M1Mjk4ZjQ0YzhlMzA5NGY3OTAzMTNhNlwiXSxbXCI5NDhiZjgwOWIxOTg4YTQ2YjA2YzlmMTkxOTQxM2IxMGY5MjI2YzYwZjY2ODgzMmZmZDk1OWFmNjBjODJhMGFcIixcIjUzYTU2Mjg1NmRjYjY2NDZkYzZiNzRjNWQxYzM0MThjNmQ0ZGZmMDhjOTdjZDJiZWQ0Y2I3Zjg4ZDhjOGU1ODlcIl0sW1wiNjI2MGNlN2Y0NjE4MDFjMzRmMDY3Y2UwZjAyODczYThmMWIwZTQ0ZGZjNjk3NTJhY2NlY2Q4MTlmMzhmZDhlOFwiLFwiYmMyZGE4MmI2ZmE1YjU3MWE3ZjA5MDQ5Nzc2YTFlZjdlY2QyOTIyMzgwNTFjMTk4YzFhODRlOTViMmI0YWUxN1wiXSxbXCJlNTAzN2RlMGFmYzFkOGQ0M2Q4MzQ4NDE0YmJmNDEwMzA0M2VjOGY1NzViZmRjNDMyOTUzY2M4ZDIwMzdmYTJkXCIsXCI0NTcxNTM0YmFhOTRkM2I1ZjlmOThkMDlmYjk5MGJkZGJkNWY1YjAzZWM0ODFmMTBlMGU1ZGM4NDFkNzU1YmRhXCJdLFtcImUwNjM3MmIwZjRhMjA3YWRmNWVhOTA1ZThmMTc3MWI0ZTdlOGRiZDFjNmE2YzViNzI1ODY2YTBhZTRmY2U3MjVcIixcIjdhOTA4OTc0YmNlMThjZmUxMmEyN2JiMmFkNWE0ODhjZDc0ODRhNzc4NzEwNDg3MGIyNzAzNGY5NGVlZTMxZGRcIl0sW1wiMjEzYzdhNzE1Y2Q1ZDQ1MzU4ZDBiYmY5ZGMwY2UwMjIwNGIxMGJkZGUyYTNmNTg1NDBhZDY5MDhkMDU1OTc1NFwiLFwiNGI2ZGFkMGI1YWU0NjI1MDcwMTNhZDA2MjQ1YmExOTBiYjQ4NTBmNWYzNmE3ZWVkZGZmMmMyNzUzNGI0NThmMlwiXSxbXCI0ZTdjMjcyYTdhZjRiMzRlOGRiYjkzNTJhNTQxOWE4N2UyODM4YzcwYWRjNjJjZGRmMGNjM2EzYjA4ZmJkNTNjXCIsXCIxNzc0OWM3NjZjOWQwYjE4ZTE2ZmQwOWY2ZGVmNjgxYjUzMGI5NjE0YmZmN2RkMzNlMGIzOTQxODE3ZGNhYWU2XCJdLFtcImZlYTc0ZTNkYmU3NzhiMWIxMGYyMzhhZDYxNjg2YWE1Yzc2ZTNkYjJiZTQzMDU3NjMyNDI3ZTI4NDBmYjI3YjZcIixcIjZlMDU2OGRiOWIwYjEzMjk3Y2Y2NzRkZWNjYjZhZjkzMTI2YjU5NmI5NzNmN2I3NzcwMWQzZGI3ZjIzY2I5NmZcIl0sW1wiNzZlNjQxMTNmNjc3Y2YwZTEwYTI1NzBkNTk5OTY4ZDMxNTQ0ZTE3OWI3NjA0MzI5NTJjMDJhNDQxN2JkZGUzOVwiLFwiYzkwZGRmOGRlZTRlOTVjZjU3NzA2NmQ3MDY4MWYwZDM1ZTJhMzNkMmI1NmQyMDMyYjRiMTc1MmQxOTAxYWMwMVwiXSxbXCJjNzM4YzU2YjAzYjJhYmUxZTgyODFiYWE3NDNmOGY5YThmN2NjNjQzZGYyNmNiZWUzYWIxNTAyNDJiY2JiODkxXCIsXCI4OTNmYjU3ODk1MWFkMjUzN2Y3MThmMmVhY2JmYmJiYjgyMzE0ZWVmNzg4MGNmZTkxN2U3MzVkOTY5OWE4NGMzXCJdLFtcImQ4OTU2MjY1NDhiNjViODFlMjY0Yzc2MzdjOTcyODc3ZDFkNzJlNWYzYTkyNTAxNDM3MmU5ZjY1ODhmNmMxNGJcIixcImZlYmZhYTM4ZjJiYzdlYWU3MjhlYzYwODE4YzM0MGViMDM0MjhkNjMyYmIwNjdlMTc5MzYzZWQ3NWQ3ZDk5MWZcIl0sW1wiYjhkYTk0MDMyYTk1NzUxOGViMGY2NDMzNTcxZTg3NjFjZWZmYzczNjkzZTg0ZWRkNDkxNTBhNTY0ZjY3NmUwM1wiLFwiMjgwNGRmYTQ0ODA1YTFlNGQ3Yzk5Y2M5NzYyODA4YjA5MmNjNTg0ZDk1ZmYzYjUxMTQ4OGU0ZTc0ZWZkZjZlN1wiXSxbXCJlODBmZWExNDQ0MWZiMzNhN2Q4YWRhYjk0NzVkN2ZhYjIwMTllZmZiNTE1NmE3OTJmMWExMTc3OGUzYzBkZjVkXCIsXCJlZWQxZGU3ZjYzOGUwMDc3MWU4OTc2OGNhM2NhOTQ0NzJkMTU1ZTgwYWYzMjJlYTlmY2I0MjkxYjZhYzllYzc4XCJdLFtcImEzMDE2OTdiZGZjZDcwNDMxM2JhNDhlNTFkNTY3NTQzZjJhMTgyMDMxZWZkNjkxNWRkYzA3YmJjYzRlMTYwNzBcIixcIjczNzBmOTFjZmI2N2U0ZjUwODE4MDlmYTI1ZDQwZjliMTczNWRiZjdjMGExMWExMzBjMGQxYTA0MWUxNzdlYTFcIl0sW1wiOTBhZDg1YjM4OWQ2YjkzNjQ2M2Y5ZDA1MTI2NzhkZTIwOGNjMzMwYjExMzA3ZmZmYWI3YWM2M2UzZmIwNGVkNFwiLFwiZTUwN2EzNjIwYTM4MjYxYWZmZGNiZDk0MjcyMjJiODM5YWVmYWJlMTU4Mjg5NGQ5OTFkNGQ0OGNiNmVmMTUwXCJdLFtcIjhmNjhiOWQyZjYzYjVmMzM5MjM5YzFhZDk4MWYxNjJlZTg4YzU2Nzg3MjNlYTMzNTFiN2I0NDRjOWVjNGMwZGFcIixcIjY2MmE5ZjJkYmEwNjM5ODZkZTFkOTBjMmI2YmUyMTVkYmJlYTJjZmU5NTUxMGJmZGYyM2NiZjc5NTAxZmZmODJcIl0sW1wiZTRmM2ZiMDE3NmFmODVkNjVmZjk5ZmY5MTk4YzM2MDkxZjQ4ZTg2NTAzNjgxZTNlNjY4NmZkNTA1MzIzMWUxMVwiLFwiMWU2MzYzM2FkMGVmNGYxYzE2NjFhNmQwZWEwMmI3Mjg2Y2M3ZTc0ZWM5NTFkMWM5ODIyYzM4NTc2ZmViNzNiY1wiXSxbXCI4YzAwZmE5YjE4ZWJmMzMxZWI5NjE1MzdhNDVhNDI2NmM3MDM0ZjJmMGQ0ZTFkMDcxNmZiNmVhZTIwZWFlMjllXCIsXCJlZmE0NzI2N2ZlYTUyMWExYTlkYzM0M2EzNzM2Yzk3NGMyZmFkYWZhODFlMzZjNTRlN2QyYTRjNjY3MDI0MTRiXCJdLFtcImU3YTI2Y2U2OWRkNDgyOWYzZTEwY2VjMGE5ZTk4ZWQzMTQzZDA4NGYzMDhiOTJjMDk5N2ZkZGZjNjBjYjNlNDFcIixcIjJhNzU4ZTMwMGZhNzk4NGI0NzFiMDA2YTFhYWZiYjE4ZDBhNmIyYzA0MjBlODNlMjBlOGE5NDIxY2YyY2ZkNTFcIl0sW1wiYjY0NTllMGVlMzY2MmVjOGQyMzU0MGMyMjNiY2JkYzU3MWNiY2I5NjdkNzk0MjRmM2NmMjllYjNkZTZiODBlZlwiLFwiNjdjODc2ZDA2ZjNlMDZkZTFkYWRmMTZlNTY2MWRiM2M0YjNhZTZkNDhlMzViMmZmMzBiZjBiNjFhNzFiYTQ1XCJdLFtcImQ2OGE4MGM4MjgwYmI4NDA3OTMyMzRhYTExOGYwNjIzMWQ2ZjFmYzY3ZTczYzVhNWRlZGEwZjViNDk2OTQzZThcIixcImRiOGJhOWZmZjRiNTg2ZDAwYzRiMWY5MTc3YjBlMjhiNWIwZTdiOGY3ODQ1Mjk1YTI5NGM4NDI2NmIxMzMxMjBcIl0sW1wiMzI0YWVkN2RmNjVjODA0MjUyZGMwMjcwOTA3YTMwYjA5NjEyYWViOTczNDQ5Y2VhNDA5NTk4MGZjMjhkM2Q1ZFwiLFwiNjQ4YTM2NTc3NGI2MWYyZmYxMzBjMGMzNWFlYzFmNGYxOTIxM2IwYzdlMzMyODQzOTY3MjI0YWY5NmFiN2M4NFwiXSxbXCI0ZGY5YzE0OTE5Y2RlNjFmNmQ1MWRmZGJlNWZlZTVkY2VlYzQxNDNiYThkMWNhODg4ZThiZDM3M2ZkMDU0Yzk2XCIsXCIzNWVjNTEwOTJkODcyODA1MDk3NGMyM2ExZDg1ZDRiNWQ1MDZjZGMyODg0OTAxOTJlYmFjMDZjYWQxMGQ1ZFwiXSxbXCI5YzM5MTlhODRhNDc0ODcwZmFlZDhhOWMxY2M2NjAyMTUyMzQ4OTA1NGQ3ZjAzMDhjYmZjOTljOGFjMWY5OGNkXCIsXCJkZGI4NGYwZjRhNGRkZDU3NTg0ZjA0NGJmMjYwZTY0MTkwNTMyNmY3NmM2NGM4ZTZiZTdlNWUwM2Q0ZmM1OTlkXCJdLFtcIjYwNTcxNzBiMWRkMTJmZGY4ZGUwNWYyODFkOGUwNmJiOTFlMTQ5M2E4YjkxZDRjYzVhMjEzODIxMjBhOTU5ZTVcIixcIjlhMWFmMGIyNmE2YTQ4MDdhZGQ5YTJkYWY3MWRmMjYyNDY1MTUyYmMzZWUyNGM2NWU4OTliZTkzMjM4NWEyYThcIl0sW1wiYTU3NmRmOGUyM2EwODQxMTQyMTQzOWE0NTE4ZGEzMTg4MGNlZjBmYmE3ZDRkZjEyYjFhNjk3M2VlY2I5NDI2NlwiLFwiNDBhNmJmMjBlNzY2NDBiMmM5MmI5N2FmZTU4Y2Q4MmM0MzJlMTBhN2Y1MTRkOWYzZWU4YmUxMWFlMWIyOGVjOFwiXSxbXCI3Nzc4YTc4YzI4ZGVjM2UzMGEwNWZlOTYyOWRlOGMzOGJiMzBkMWY1Y2Y5YTNhMjA4Zjc2Mzg4OWJlNThhZDcxXCIsXCIzNDYyNmQ5YWI1YTViMjJmZjcwOThlMTJmMmZmNTgwMDg3YjM4NDExZmYyNGFjNTYzYjUxM2ZjMWZkOWY0M2FjXCJdLFtcIjkyODk1NWVlNjM3YTg0NDYzNzI5ZmQzMGU3YWZkMmVkNWY5NjI3NGU1YWQ3ZTVjYjA5ZWRhOWMwNmQ5MDNhY1wiLFwiYzI1NjIxMDAzZDNmNDJhODI3Yjc4YTEzMDkzYTk1ZWVhYzNkMjZlZmE4YThkODNmYzUxODBlOTM1YmNkMDkxZlwiXSxbXCI4NWQwZmVmM2VjNmRiMTA5Mzk5MDY0ZjNhMGUzYjI4NTU2NDViNGE5MDdhZDM1NDUyN2FhZTc1MTYzZDgyNzUxXCIsXCIxZjAzNjQ4NDEzYTM4YzBiZTI5ZDQ5NmU1ODJjZjU2NjNlODc1MWU5Njg3NzMzMTU4MmMyMzdhMjRlYjFmOTYyXCJdLFtcImZmMmIwZGNlOTdlZWNlOTdjMWM5YjYwNDE3OThiODVkZmRmYjZkODg4MmRhMjAzMDhmNTQwNDgyNDUyNjA4N2VcIixcIjQ5M2QxM2ZlZjUyNGJhMTg4YWY0YzRkYzU0ZDA3OTM2YzdiN2VkNmZiOTBlMmNlYjJjOTUxZTAxZjBjMjk5MDdcIl0sW1wiODI3ZmJiZTRiMWU4ODBlYTllZDJiMmU2MzAxYjIxMmI1N2YxZWUxNDhjZDZkZDI4NzgwZTVlMmNmODU2ZTI0MVwiLFwiYzYwZjljOTIzYzcyN2IwYjcxYmVmMmM2N2QxZDEyNjg3ZmY3YTYzMTg2OTAzMTY2ZDYwNWI2OGJhZWMyOTNlY1wiXSxbXCJlYWE2NDlmMjFmNTFiZGJhZTdiZTRhZTM0Y2U2ZTUyMTdhNThmZGNlN2Y0N2Y5YWE3ZjNiNThmYTIxMjBlMmIzXCIsXCJiZTMyNzllZDViYmJiMDNhYzY5YTgwZjg5ODc5YWE1YTAxYTZiOTY1ZjEzZjdlNTlkNDdhNTMwNWJhNWFkOTNkXCJdLFtcImU0YTQyZDQzYzVjZjE2OWQ5MzkxZGY2ZGVjZjQyZWU1NDFiNmQ4ZjBjOWExMzc0MDFlMjM2MzJkZGEzNGQyNGZcIixcIjRkOWY5MmU3MTZkMWM3MzUyNmZjOTljY2ZiOGFkMzRjZTg4NmVlZGZhOGQ4ZTRmMTNhN2Y3MTMxZGViYTk0MTRcIl0sW1wiMWVjODBmZWYzNjBjYmRkOTU0MTYwZmFkYWIzNTJiNmI5MmI1MzU3NmE4OGZlYTQ5NDcxNzNiOWQ0MzAwYmYxOVwiLFwiYWVlZmU5Mzc1NmI1MzQwZDJmM2E0OTU4YTdhYmJmNWUwMTQ2ZTc3ZjYyOTVhMDdiNjcxY2RjMWNjMTA3Y2VmZFwiXSxbXCIxNDZhNzc4YzA0NjcwYzJmOTFiMDBhZjQ2ODBkZmE4YmNlMzQ5MDcxN2Q1OGJhODg5ZGRiNTkyODM2NjY0MmJlXCIsXCJiMzE4ZTBlYzMzNTQwMjhhZGQ2Njk4MjdmOWQ0YjI4NzBhYWE5NzFkMmY3ZTVlZDFkMGIyOTc0ODNkODNlZmQwXCJdLFtcImZhNTBjMGY2MWQyMmU1ZjA3ZTNhY2ViYjFhYTA3YjEyOGQwMDEyMjA5YTI4Yjk3NzZkNzZhODc5MzE4MGVlZjlcIixcIjZiODRjNjkyMjM5N2ViYTliNzJjZDI4NzIyODFhNjhhNWU2ODMyOTNhNTdhMjEzYjM4Y2Q4ZDdkM2Y0ZjI4MTFcIl0sW1wiZGExZDYxZDBjYTcyMWExMWIxYTViZjZiN2Q4OGU4NDIxYTI4OGFiNWQ1YmJhNTIyMGU1M2QzMmI1ZjA2N2VjMlwiLFwiODE1N2Y1NWE3Yzk5MzA2Yzc5YzA3NjYxNjFjOTFlMjk2NmE3Mzg5OWQyNzliNDhhNjU1ZmJhMGYxYWQ4MzZmMVwiXSxbXCJhOGUyODJmZjBjOTcwNjkwNzIxNWZmOThlOGZkNDE2NjE1MzExZGUwNDQ2ZjFlMDYyYTczYjA2MTBkMDY0ZTEzXCIsXCI3Zjk3MzU1YjhkYjgxYzA5YWJmYjdmM2M1YjI1MTU4ODhiNjc5YTNlNTBkZDZiZDZjZWY3YzczMTExZjRjYzBjXCJdLFtcIjE3NGE1M2I5YzlhMjg1ODcyZDM5ZTU2ZTY5MTNjYWIxNWQ1OWIxZmE1MTI1MDhjMDIyZjM4MmRlODMxOTQ5N2NcIixcImNjYzlkYzM3YWJmYzljMTY1N2I0MTU1ZjJjNDdmOWU2NjQ2YjNhMWQ4Y2I5ODU0MzgzZGExM2FjMDc5YWZhNzNcIl0sW1wiOTU5Mzk2OTgxOTQzNzg1YzNkM2U1N2VkZjUwMThjZGJlMDM5ZTczMGU0OTE4YjNkODg0ZmRmZjA5NDc1YjdiYVwiLFwiMmU3ZTU1Mjg4OGMzMzFkZDhiYTAzODZhNGI5Y2Q2ODQ5YzY1M2Y2NGM4NzA5Mzg1ZTliOGFiZjg3NTI0ZjJmZFwiXSxbXCJkMmE2M2E1MGFlNDAxZTU2ZDY0NWExMTUzYjEwOWE4ZmNjYTBhNDNkNTYxZmJhMmRiYjUxMzQwYzlkODJiMTUxXCIsXCJlODJkODZmYjY0NDNmY2I3NTY1YWVlNThiMjk0ODIyMGE3MGY3NTBhZjQ4NGNhNTJkNDE0MjE3NGRjZjg5NDA1XCJdLFtcIjY0NTg3ZTIzMzU0NzFlYjg5MGVlNzg5NmQ3Y2ZkYzg2NmJhY2JkYmQzODM5MzE3YjM0MzZmOWI0NTYxN2UwNzNcIixcImQ5OWZjZGQ1YmY2OTAyZTJhZTk2ZGQ2NDQ3YzI5OWExODViOTBhMzkxMzNhZWFiMzU4Mjk5ZTVlOWZhZjY1ODlcIl0sW1wiODQ4MWJkZTBlNGU0ZDg4NWIzYTU0NmQzZTU0OWRlMDQyZjBhYTZjZWEyNTBlN2ZkMzU4ZDZjODZkZDQ1ZTQ1OFwiLFwiMzhlZTdiOGNiYTU0MDRkZDg0YTI1YmYzOWNlY2IyY2E5MDBhNzljNDJiMjYyZTU1NmQ2NGIxYjU5Nzc5MDU3ZVwiXSxbXCIxMzQ2NGE1N2E3ODEwMmFhNjJiNjk3OWFlODE3ZjQ2MzdmZmNmZWQzYzRiMWNlMzBiY2Q2MzAzZjZjYWY2NjZiXCIsXCI2OWJlMTU5MDA0NjE0NTgwZWY3ZTQzMzQ1M2NjYjBjYTQ4ZjMwMGE4MWQwOTQyZTEzZjQ5NWE5MDdmNmVjYzI3XCJdLFtcImJjNGE5ZGY1YjcxM2ZlMmU5YWVmNDMwYmNjMWRjOTdhMGNkOWNjZWRlMmYyODU4OGNhZGEzYTBkMmQ4M2YzNjZcIixcImQzYTgxY2E2ZTc4NWMwNjM4MzkzN2FkZjRiNzk4Y2FhNmU4YTlmYmZhNTQ3YjE2ZDc1OGQ2NjY1ODFmMzNjMVwiXSxbXCI4YzI4YTk3YmY4Mjk4YmMwZDIzZDhjNzQ5NDUyYTMyZTY5NGI2NWUzMGE5NDcyYTM5NTRhYjMwZmU1MzI0Y2FhXCIsXCI0MGEzMDQ2M2EzMzA1MTkzMzc4ZmVkZjMxZjdjYzBlYjdhZTc4NGYwNDUxY2I5NDU5ZTcxZGM3M2NiZWY5NDgyXCJdLFtcIjhlYTk2NjYxMzk1MjdhOGMxZGQ5NGNlNGYwNzFmZDIzYzhiMzUwYzVhNGJiMzM3NDhjNGJhMTExZmFjY2FlMFwiLFwiNjIwZWZhYmJjOGVlMjc4MmUyNGU3YzBjZmI5NWM1ZDczNWI3ODNiZTljZjBmOGU5NTVhZjM0YTMwZTYyYjk0NVwiXSxbXCJkZDM2MjVmYWVmNWJhMDYwNzQ2Njk3MTZiYmQzNzg4ZDg5YmRkZTgxNTk1OTk2ODA5MmY3NmNjNGViOWE5Nzg3XCIsXCI3YTE4OGZhMzUyMGUzMGQ0NjFkYTI1MDEwNDU3MzFjYTk0MTQ2MTk4Mjg4MzM5NTkzN2Y2OGQwMGM2NDRhNTczXCJdLFtcImY3MTBkNzlkOWViOTYyMjk3ZTRmNjIzMmI0MGU4ZjdmZWIyYmM2MzgxNDYxNGQ2OTJjMTJkZTc1MjQwODIyMWVcIixcImVhOThlNjcyMzJkM2IzMjk1ZDNiNTM1NTMyMTE1Y2NhYzg2MTJjNzIxODUxNjE3NTI2YWU0N2E5Yzc3YmZjODJcIl1dfSxuYWY6e3duZDo3LHBvaW50czpbW1wiZjkzMDhhMDE5MjU4YzMxMDQ5MzQ0Zjg1Zjg5ZDUyMjliNTMxYzg0NTgzNmY5OWIwODYwMWYxMTNiY2UwMzZmOVwiLFwiMzg4ZjdiMGY2MzJkZTgxNDBmZTMzN2U2MmEzN2YzNTY2NTAwYTk5OTM0YzIyMzFiNmNiOWZkNzU4NGI4ZTY3MlwiXSxbXCIyZjhiZGU0ZDFhMDcyMDkzNTViNGE3MjUwYTVjNTEyOGU4OGI4NGJkZGM2MTlhYjdjYmE4ZDU2OWIyNDBlZmU0XCIsXCJkOGFjMjIyNjM2ZTVlM2Q2ZDRkYmE5ZGRhNmM5YzQyNmY3ODgyNzFiYWIwZDY4NDBkY2E4N2QzYWE2YWM2MmQ2XCJdLFtcIjVjYmRmMDY0NmU1ZGI0ZWFhMzk4ZjM2NWYyZWE3YTBlM2Q0MTliN2UwMzMwZTM5Y2U5MmJkZGVkY2FjNGY5YmNcIixcIjZhZWJjYTQwYmEyNTU5NjBhMzE3OGQ2ZDg2MWE1NGRiYTgxM2QwYjgxM2ZkZTdiNWE1MDgyNjI4MDg3MjY0ZGFcIl0sW1wiYWNkNDg0ZTJmMGM3ZjY1MzA5YWQxNzhhOWY1NTlhYmRlMDk3OTY5NzRjNTdlNzE0YzM1ZjExMGRmYzI3Y2NiZVwiLFwiY2MzMzg5MjFiMGE3ZDlmZDY0MzgwOTcxNzYzYjYxZTlhZGQ4ODhhNDM3NWY4ZTBmMDVjYzI2MmFjNjRmOWMzN1wiXSxbXCI3NzRhZTdmODU4YTk0MTFlNWVmNDI0NmI3MGM2NWFhYzU2NDk5ODBiZTVjMTc4OTFiYmVjMTc4OTVkYTAwOGNiXCIsXCJkOTg0YTAzMmViNmI1ZTE5MDI0M2RkNTZkN2I3YjM2NTM3MmRiMWUyZGZmOWQ2YTgzMDFkNzRjOWM5NTNjNjFiXCJdLFtcImYyODc3M2MyZDk3NTI4OGJjN2QxZDIwNWMzNzQ4NjUxYjA3NWZiYzY2MTBlNThjZGRlZWRkZjhmMTk0MDVhYThcIixcImFiMDkwMmU4ZDg4MGE4OTc1ODIxMmViNjVjZGFmNDczYTFhMDZkYTUyMWZhOTFmMjliNWNiNTJkYjAzZWQ4MVwiXSxbXCJkNzkyNGQ0ZjdkNDNlYTk2NWE0NjVhZTMwOTVmZjQxMTMxZTU5NDZmM2M4NWY3OWU0NGFkYmNmOGUyN2UwODBlXCIsXCI1ODFlMjg3MmE4NmM3MmE2ODM4NDJlYzIyOGNjNmRlZmVhNDBhZjJiZDg5NmQzYTVjNTA0ZGM5ZmY2YTI2YjU4XCJdLFtcImRlZmRlYTRjZGI2Nzc3NTBhNDIwZmVlODA3ZWFjZjIxZWI5ODk4YWU3OWI5NzY4NzY2ZTRmYWEwNGEyZDRhMzRcIixcIjQyMTFhYjA2OTQ2MzUxNjhlOTk3YjBlYWQyYTkzZGFlY2VkMWY0YTA0YTk1YzBmNmNmYjE5OWY2OWU1NmViNzdcIl0sW1wiMmI0ZWEwYTc5N2E0NDNkMjkzZWY1Y2ZmNDQ0ZjQ5NzlmMDZhY2ZlYmQ3ZTg2ZDI3NzQ3NTY1NjEzODM4NWI2Y1wiLFwiODVlODliYzAzNzk0NWQ5M2IzNDMwODNiNWExYzg2MTMxYTAxZjYwYzUwMjY5NzYzYjU3MGM4NTRlNWMwOWI3YVwiXSxbXCIzNTJiYmY0YTRjZGQxMjU2NGY5M2ZhMzMyY2UzMzMzMDFkOWFkNDAyNzFmODEwNzE4MTM0MGFlZjI1YmU1OWQ1XCIsXCIzMjFlYjQwNzUzNDhmNTM0ZDU5YzE4MjU5ZGRhM2UxZjRhMWIzYjJlNzFiMTAzOWM2N2JkM2Q4YmNmODE5OThjXCJdLFtcIjJmYTIxMDRkNmIzOGQxMWIwMjMwMDEwNTU5ODc5MTI0ZTQyYWI4ZGZlZmY1ZmYyOWRjOWNkYWRkNGVjYWNjM2ZcIixcIjJkZTEwNjgyOTVkZDg2NWI2NDU2OTMzNWJkNWRkODAxODFkNzBlY2ZjODgyNjQ4NDIzYmE3NmI1MzJiN2Q2N1wiXSxbXCI5MjQ4Mjc5YjA5YjRkNjhkYWIyMWE5YjA2NmVkZGE4MzI2M2MzZDg0ZTA5NTcyZTI2OWNhMGNkN2Y1NDUzNzE0XCIsXCI3MzAxNmY3YmYyMzRhYWRlNWQxYWE3MWJkZWEyYjFmZjNmYzBkZTJhODg3OTEyZmZlNTRhMzJjZTk3Y2IzNDAyXCJdLFtcImRhZWQ0ZjJiZTNhOGJmMjc4ZTcwMTMyZmIwYmViNzUyMmY1NzBlMTQ0YmY2MTVjMDdlOTk2ZDQ0M2RlZTg3MjlcIixcImE2OWRjZTRhN2Q2Yzk4ZThkNGExYWNhODdlZjhkNzAwM2Y4M2MyMzBmM2FmYTcyNmFiNDBlNTIyOTBiZTFjNTVcIl0sW1wiYzQ0ZDEyYzcwNjVkODEyZThhY2YyOGQ3Y2JiMTlmOTAxMWVjZDllOWZkZjI4MWIwZTZhM2I1ZTg3ZDIyZTdkYlwiLFwiMjExOWE0NjBjZTMyNmNkYzc2YzQ1OTI2Yzk4MmZkYWMwZTEwNmU4NjFlZGY2MWM1YTAzOTA2M2YwZTBlNjQ4MlwiXSxbXCI2YTI0NWJmNmRjNjk4NTA0Yzg5YTIwY2ZkZWQ2MDg1MzE1MmI2OTUzMzZjMjgwNjNiNjFjNjVjYmQyNjllNmI0XCIsXCJlMDIyY2Y0MmMyYmQ0YTcwOGIzZjUxMjZmMTZhMjRhZDhiMzNiYTQ4ZDA0MjNiNmVmZDVlNjM0ODEwMGQ4YTgyXCJdLFtcIjE2OTdmZmE2ZmQ5ZGU2MjdjMDc3ZTNkMmZlNTQxMDg0Y2UxMzMwMGIwYmVjMTE0NmY5NWFlNTdmMGQwYmQ2YTVcIixcImI5YzM5OGYxODY4MDZmNWQyNzU2MTUwNmU0NTU3NDMzYTJjZjE1MDA5ZTQ5OGFlN2FkZWU5ZDYzZDAxYjIzOTZcIl0sW1wiNjA1YmRiMDE5OTgxNzE4Yjk4NmQwZjA3ZTgzNGNiMGQ5ZGViODM2MGZmYjdmNjFkZjk4MjM0NWVmMjdhNzQ3OVwiLFwiMjk3MmQyZGU0ZjhkMjA2ODFhNzhkOTNlYzk2ZmUyM2MyNmJmYWU4NGZiMTRkYjQzYjAxZTFlOTA1NmI4YzQ5XCJdLFtcIjYyZDE0ZGFiNDE1MGJmNDk3NDAyZmRjNDVhMjE1ZTEwZGNiMDFjMzU0OTU5YjEwY2ZlMzFjN2U5ZDg3ZmYzM2RcIixcIjgwZmMwNmJkOGNjNWIwMTA5ODA4OGExOTUwZWVkMGRiMDFhYTEzMjk2N2FiNDcyMjM1ZjU2NDI0ODNiMjVlYWZcIl0sW1wiODBjNjBhZDAwNDBmMjdkYWRlNWI0YjA2YzQwOGU1NmIyYzUwZTlmNTZiOWI4YjQyNWU1NTVjMmY4NjMwOGI2ZlwiLFwiMWMzODMwM2YxY2M1YzMwZjI2ZTY2YmFkN2ZlNzJmNzBhNjVlZWQ0Y2JlNzAyNGViMWFhMDFmNTY0MzBiZDU3YVwiXSxbXCI3YTkzNzVhZDYxNjdhZDU0YWE3NGM2MzQ4Y2M1NGQzNDRjYzVkYzk0ODdkODQ3MDQ5ZDVlYWJiMGZhMDNjOGZiXCIsXCJkMGUzZmE5ZWNhODcyNjkwOTU1OWUwZDc5MjY5MDQ2YmRjNTllYTEwYzcwY2UyYjAyZDQ5OWVjMjI0ZGM3ZjdcIl0sW1wiZDUyOGVjZDliNjk2YjU0YzkwN2E5ZWQwNDU0NDdhNzliYjQwOGVjMzliNjhkZjUwNGJiNTFmNDU5YmMzZmZjOVwiLFwiZWVjZjQxMjUzMTM2ZTVmOTk5NjZmMjE4ODFmZDY1NmViYzQzNDU0MDVjNTIwZGJjMDYzNDY1YjUyMTQwOTkzM1wiXSxbXCI0OTM3MGE0YjVmNDM0MTJlYTI1ZjUxNGU4ZWNkYWQwNTI2NjExNWU0YTdlY2IxMzg3MjMxODA4ZjhiNDU5NjNcIixcIjc1OGYzZjQxYWZkNmVkNDI4YjMwODFiMDUxMmZkNjJhNTRjM2YzYWZiYjViNjc2NGI2NTMwNTJhMTI5NDljOWFcIl0sW1wiNzdmMjMwOTM2ZWU4OGNiYmQ3M2RmOTMwZDY0NzAyZWY4ODFkODExZTBlMTQ5OGUyZjFjMTNlYjFmYzM0NWQ3NFwiLFwiOTU4ZWY0MmE3ODg2YjY0MDBhMDgyNjZlOWJhMWIzNzg5NmM5NTMzMGQ5NzA3N2NiYmU4ZWIzYzc2NzFjNjBkNlwiXSxbXCJmMmRhYzk5MWNjNGNlNGI5ZWE0NDg4N2U1YzdjMGJjZTU4YzgwMDc0YWI5ZDRkYmFlYjI4NTMxYjc3MzlmNTMwXCIsXCJlMGRlZGM5YjNiMmY4ZGFkNGRhMWYzMmRlYzI1MzFkZjllYjVmYmViMDU5OGU0ZmQxYTExN2RiYTcwM2EzYzM3XCJdLFtcIjQ2M2IzZDlmNjYyNjIxZmIxYjRiZThmYmJlMjUyMDEyNWEyMTZjZGZjOWRhZTNkZWJjYmE0ODUwYzY5MGQ0NWJcIixcIjVlZDQzMGQ3OGMyOTZjMzU0MzExNDMwNmRkODYyMmQ3YzYyMmUyN2M5NzBhMWRlMzFjYjM3N2IwMWFmNzMwN2VcIl0sW1wiZjE2ZjgwNDI0NGU0NmUyYTA5MjMyZDRhZmYzYjU5OTc2Yjk4ZmFjMTQzMjhhMmQxYTMyNDk2YjQ5OTk4ZjI0N1wiLFwiY2VkYWJkOWI4MjIwM2Y3ZTEzZDIwNmZjZGY0ZTMzZDkyYTZjNTNjMjZlNWNjZTI2ZDY1Nzk5NjJjNGUzMWRmNlwiXSxbXCJjYWY3NTQyNzJkYzg0NTYzYjAzNTJiN2ExNDMxMWFmNTVkMjQ1MzE1YWNlMjdjNjUzNjllMTVmNzE1MWQ0MWQxXCIsXCJjYjQ3NDY2MGVmMzVmNWYyYTQxYjY0M2ZhNWU0NjA1NzVmNGZhOWI3OTYyMjMyYTVjMzJmOTA4MzE4YTA0NDc2XCJdLFtcIjI2MDBjYTRiMjgyY2I5ODZmODVkMGYxNzA5OTc5ZDhiNDRhMDljMDdjYjg2ZDdjMTI0NDk3YmM4NmYwODIxMjBcIixcIjQxMTliODg3NTNjMTViZDZhNjkzYjAzZmNkZGJiNDVkNWFjNmJlNzRhYjVmMGVmNDRiMGJlOTQ3NWE3ZTRiNDBcIl0sW1wiNzYzNWNhNzJkN2U4NDMyYzMzOGVjNTNjZDEyMjIwYmMwMWM0ODY4NWUyNGY3ZGM4YzYwMmE3NzQ2OTk4ZTQzNVwiLFwiOTFiNjQ5NjA5NDg5ZDYxM2QxZDVlNTkwZjc4ZTZkNzRlY2ZjMDYxZDU3MDQ4YmFkOWU3NmYzMDJjNWI5YzYxXCJdLFtcIjc1NGUzMjM5ZjMyNTU3MGNkYmJmNGE4N2RlZWU4YTY2YjdmMmIzMzQ3OWQ0NjhmYmMxYTUwNzQzYmY1NmNjMThcIixcIjY3M2ZiODZlNWJkYTMwZmIzY2QwZWQzMDRlYTQ5YTAyM2VlMzNkMDE5N2E2OTVkMGM1ZDk4MDkzYzUzNjY4M1wiXSxbXCJlM2U2YmQxMDcxYTFlOTZhZmY1Nzg1OWM4MmQ1NzBmMDMzMDgwMDY2MWQxYzk1MmY5ZmUyNjk0NjkxZDliOWU4XCIsXCI1OWM5ZTBiYmEzOTRlNzZmNDBjMGFhNTgzNzlhM2NiNmE1YTIyODM5OTNlOTBjNDE2NzAwMmFmNDkyMGUzN2Y1XCJdLFtcIjE4NmI0ODNkMDU2YTAzMzgyNmFlNzNkODhmNzMyOTg1YzRjY2IxZjMyYmEzNWY0YjRjYzQ3ZmRjZjA0YWE2ZWJcIixcIjNiOTUyZDMyYzY3Y2Y3N2UyZTE3NDQ2ZTIwNDE4MGFiMjFmYjgwOTA4OTUxMzhiNGE0YTc5N2Y4NmU4MDg4OGJcIl0sW1wiZGY5ZDcwYTZiOTg3NmNlNTQ0Yzk4NTYxZjRiZTRmNzI1NDQyZTZkMmI3MzdkOWM5MWE4MzIxNzI0Y2UwOTYzZlwiLFwiNTVlYjJkYWZkODRkNmNjZDVmODYyYjc4NWRjMzlkNGFiMTU3MjIyNzIwZWY5ZGEyMTdiOGM0NWNmMmJhMjQxN1wiXSxbXCI1ZWRkNWNjMjNjNTFlODdhNDk3Y2E4MTVkNWRjZTBmOGFiNTI1NTRmODQ5ZWQ4OTk1ZGU2NGM1ZjM0Y2U3MTQzXCIsXCJlZmFlOWM4ZGJjMTQxMzA2NjFlOGNlYzAzMGM4OWFkMGMxM2M2NmMwZDE3YTI5MDVjZGM3MDZhYjczOTlhODY4XCJdLFtcIjI5MDc5OGMyYjY0NzY4MzBkYTEyZmUwMjI4N2U5ZTc3N2FhM2ZiYTFjMzU1YjE3YTcyMmQzNjJmODQ2MTRmYmFcIixcImUzOGRhNzZkY2Q0NDA2MjE5ODhkMDBiY2Y3OWFmMjVkNWIyOWMwOTRkYjJhMjMxNDZkMDAzYWZkNDE5NDNlN2FcIl0sW1wiYWYzYzQyM2E5NWQ5ZjViMzA1NDc1NGVmYTE1MGFjMzljZDI5NTUyZmUzNjAyNTczNjJkZmRlY2VmNDA1M2I0NVwiLFwiZjk4YTNmZDgzMWViMmI3NDlhOTNiMGU2ZjM1Y2ZiNDBjOGNkNWFhNjY3YTE1NTgxYmMyZmVkZWQ0OThmZDljNlwiXSxbXCI3NjZkYmIyNGQxMzRlNzQ1Y2NjYWEyOGM5OWJmMjc0OTA2YmI2NmIyNmRjZjk4ZGY4ZDJmZWQ1MGQ4ODQyNDlhXCIsXCI3NDRiMTE1MmVhY2JlNWUzOGRjYzg4Nzk4MGRhMzhiODk3NTg0YTY1ZmEwNmNlZGQyYzkyNGY5N2NiYWM1OTk2XCJdLFtcIjU5ZGJmNDZmOGM5NDc1OWJhMjEyNzdjMzM3ODRmNDE2NDVmN2I0NGY2YzU5NmE1OGNlOTJlNjY2MTkxYWJlM2VcIixcImM1MzRhZDQ0MTc1ZmJjMzAwZjRlYTZjZTY0ODMwOWEwNDJjZTczOWE3OTE5Nzk4Y2Q4NWUyMTZjNGEzMDdmNmVcIl0sW1wiZjEzYWRhOTUxMDNjNDUzNzMwNWU2OTFlNzRlOWE0YThkZDY0N2U3MTFhOTVlNzNjYjYyZGM2MDE4Y2ZkODdiOFwiLFwiZTEzODE3YjQ0ZWUxNGRlNjYzYmY0YmM4MDgzNDFmMzI2OTQ5ZTIxYTZhNzVjMjU3MDc3ODQxOWJkYWY1NzMzZFwiXSxbXCI3NzU0YjRmYTBlOGFjZWQwNmQ0MTY3YTJjNTljY2E0Y2RhMTg2OWMwNmViYWRmYjY0ODg1NTAwMTVhODg1MjJjXCIsXCIzMGU5M2U4NjRlNjY5ZDgyMjI0Yjk2N2MzMDIwYjhmYThkMWU0ZTM1MGI2Y2JjYzUzN2E0OGI1Nzg0MTE2M2EyXCJdLFtcIjk0OGRjYWRmNTk5MGUwNDhhYTM4NzRkNDZhYmVmOWQ3MDE4NThmOTVkZTgwNDFkMmE2ODI4Yzk5ZTIyNjI1MTlcIixcImU0OTFhNDI1MzdmNmU1OTdkNWQyOGEzMjI0YjFiYzI1ZGY5MTU0ZWZiZDJlZjFkMmNiYmEyY2FlNTM0N2Q1N2VcIl0sW1wiNzk2MjQxNDQ1MGM3NmMxNjg5YzdiNDhmODIwMmVjMzdmYjIyNGNmNWFjMGJmYTE1NzAzMjhhOGEzZDdjNzdhYlwiLFwiMTAwYjYxMGVjNGZmYjQ3NjBkNWMxZmMxMzNlZjZmNmIxMjUwN2EwNTFmMDRhYzU3NjBhZmE1YjI5ZGI4MzQzN1wiXSxbXCIzNTE0MDg3ODM0OTY0YjU0YjE1YjE2MDY0NGQ5MTU0ODVhMTY5NzcyMjViODg0N2JiMGRkMDg1MTM3ZWM0N2NhXCIsXCJlZjBhZmJiMjA1NjIwNTQ0OGUxNjUyYzQ4ZTgxMjdmYzYwMzllNzdjMTVjMjM3OGI3ZTdkMTVhMGRlMjkzMzExXCJdLFtcImQzY2MzMGFkNmI0ODNlNGJjNzljZTJjOWRkOGJjNTQ5OTNlOTQ3ZWI4ZGY3ODdiNDQyOTQzZDNmN2I1MjdlYWZcIixcIjhiMzc4YTIyZDgyNzI3OGQ4OWM1ZTliZThmOTUwOGFlM2MyYWQ0NjI5MDM1ODYzMGFmYjM0ZGIwNGVlZGUwYTRcIl0sW1wiMTYyNGQ4NDc4MDczMjg2MGNlMWM3OGZjYmZlZmUwOGIyYjI5ODIzZGI5MTNmNjQ5Mzk3NWJhMGZmNDg0NzYxMFwiLFwiNjg2NTFjZjliNmRhOTAzZTA5MTQ0NDhjNmNkOWQ0Y2E4OTY4NzhmNTI4MmJlNGM4Y2MwNmUyYTQwNDA3ODU3NVwiXSxbXCI3MzNjZTgwZGE5NTVhOGEyNjkwMmM5NTYzM2U2MmE5ODUxOTI0NzRiNWFmMjA3ZGE2ZGY3YjRmZDVmYzYxY2Q0XCIsXCJmNTQzNWEyYmQyYmFkZjdkNDg1YTRkOGI4ZGI5ZmNjZTNlMWVmOGUwMjAxZTQ1NzhjNTQ2NzNiYzFkYzVlYTFkXCJdLFtcIjE1ZDk0NDEyNTQ5NDUwNjRjZjFhMWMzM2JiZDNiNDlmODk2NmM1MDkyMTcxZTY5OWVmMjU4ZGZhYjgxYzA0NWNcIixcImQ1NmViMzBiNjk0NjNlNzIzNGY1MTM3YjczYjg0MTc3NDM0ODAwYmFjZWJmYzY4NWZjMzdiYmU5ZWZlNDA3MGRcIl0sW1wiYTFkMGZjZjJlYzlkZTY3NWI2MTIxMzZlNWNlNzBkMjcxYzIxNDE3YzlkMmI4YWFhYWMxMzg1OTlkMDcxNzk0MFwiLFwiZWRkNzdmNTBiY2I1YTNjYWIyZTkwNzM3MzA5NjY3ZjI2NDE0NjJhNTQwNzBmM2Q1MTkyMTJkMzljMTk3YTYyOVwiXSxbXCJlMjJmYmUxNWMwYWY4Y2NjNTc4MGMwNzM1Zjg0ZGJlOWE3OTBiYWRlZTgyNDVjMDZjN2NhMzczMzFjYjM2OTgwXCIsXCJhODU1YmFiYWQ1Y2Q2MGM4OGI0MzBhNjlmNTNhMWE3YTM4Mjg5MTU0OTY0Nzk5YmU0M2QwNmQ3N2QzMWRhMDZcIl0sW1wiMzExMDkxZGQ5ODYwZThlMjBlZTEzNDczYzExNTVmNWY2OTYzNWUzOTQ3MDRlYWE3NDAwOTQ1MjI0NmNmYTliM1wiLFwiNjZkYjY1NmY4N2QxZjA0ZmZmZDFmMDQ3ODhjMDY4MzA4NzFlYzVhNjRmZWVlNjg1YmQ4MGYwYjEyODZkODM3NFwiXSxbXCIzNGMxZmQwNGQzMDFiZTg5YjMxYzA0NDJkM2U2YWMyNDg4MzkyOGI0NWE5MzQwNzgxODY3ZDQyMzJlYzJkYmRmXCIsXCI5NDE0Njg1ZTk3YjFiNTk1NGJkNDZmNzMwMTc0MTM2ZDU3ZjFjZWViNDg3NDQzZGM1MzIxODU3YmE3M2FiZWVcIl0sW1wiZjIxOWVhNWQ2YjU0NzAxYzFjMTRkZTViNTU3ZWI0MmE4ZDEzZjNhYmJjZDA4YWZmY2MyYTVlNmIwNDliOGQ2M1wiLFwiNGNiOTU5NTdlODNkNDBiMGY3M2FmNDU0NGNjY2Y2YjFmNGIwOGQzYzA3YjI3ZmI4ZDhjMjk2MmE0MDA3NjZkMVwiXSxbXCJkN2I4NzQwZjc0YThmYmFhYjFmNjgzZGI4ZjQ1ZGUyNjU0M2E1NDkwYmNhNjI3MDg3MjM2OTEyNDY5YTBiNDQ4XCIsXCJmYTc3OTY4MTI4ZDljOTJlZTEwMTBmMzM3YWQ0NzE3ZWZmMTVkYjVlZDNjMDQ5YjM0MTFlMDMxNWVhYTQ1OTNiXCJdLFtcIjMyZDMxYzIyMmY4ZjZmMGVmODZmN2M5OGQzYTMzMzVlYWQ1YmNkMzJhYmRkOTQyODlmZTRkMzA5MWFhODI0YmZcIixcIjVmMzAzMmY1ODkyMTU2ZTM5Y2NkM2Q3OTE1YjllMWRhMmU2ZGFjOWU2ZjI2ZTk2MTExOGQxNGI4NDYyZTE2NjFcIl0sW1wiNzQ2MWYzNzE5MTRhYjMyNjcxMDQ1YTE1NWQ5ODMxZWE4NzkzZDc3Y2Q1OTU5MmM0MzQwZjg2Y2JjMTgzNDdiNVwiLFwiOGVjMGJhMjM4Yjk2YmVjMGNiZGRkY2FlMGFhNDQyNTQyZWVlMWZmNTBjOTg2ZWE2YjM5ODQ3YjNjYzA5MmZmNlwiXSxbXCJlZTA3OWFkYjFkZjE4NjAwNzQzNTZhMjVhYTM4MjA2YTZkNzE2YjJjM2U2NzQ1M2QyODc2OThiYWQ3YjJiMmQ2XCIsXCI4ZGMyNDEyYWFmZTNiZTVjNGM1ZjM3ZTBlY2M1ZjlmNmE0NDY5ODlhZjA0YzRlMjVlYmFhYzQ3OWVjMWM4YzFlXCJdLFtcIjE2ZWM5M2U0NDdlYzgzZjA0NjdiMTgzMDJlZTYyMGY3ZTY1ZGUzMzE4NzRjOWRjNzJiZmQ4NjE2YmE5ZGE2YjVcIixcIjVlNDYzMTE1MGU2MmZiNDBkMGU4YzJhN2NhNTgwNGEzOWQ1ODE4NmE1MGU0OTcxMzk2MjY3NzhlMjViMDY3NGRcIl0sW1wiZWFhNWY5ODBjMjQ1ZjZmMDM4OTc4MjkwYWZhNzBiNmJkODg1NTg5N2Y5OGI2YWE0ODViOTYwNjVkNTM3YmQ5OVwiLFwiZjY1ZjVkM2UyOTJjMmUwODE5YTUyODM5MWM5OTQ2MjRkNzg0ODY5ZDdlNmVhNjdmYjE4MDQxMDI0ZWRjMDdkY1wiXSxbXCI3OGM5NDA3NTQ0YWMxMzI2OTJlZTE5MTBhMDI0Mzk5NThhZTA0ODc3MTUxMzQyZWE5NmM0YjZiMzVhNDlmNTFcIixcImYzZTAzMTkxNjllYjliODVkNTQwNDc5NTUzOWE1ZTY4ZmExZmJkNTgzYzA2NGQyNDYyYjY3NWYxOTRhM2RkYjRcIl0sW1wiNDk0ZjRiZTIxOWExYTc3MDE2ZGNkODM4NDMxYWVhMDAwMWNkYzhhZTdhNmZjNjg4NzI2NTc4ZDk3MDI4NTdhNVwiLFwiNDIyNDJhOTY5MjgzYTVmMzM5YmE3ZjA3NWUzNmJhMmFmOTI1Y2UzMGQ3NjdlZDZlNTVmNGIwMzE4ODBkNTYyY1wiXSxbXCJhNTk4YTgwMzBkYTZkODZjNmJjN2YyZjUxNDRlYTU0OWQyODIxMWVhNThmYWE3MGViZjRjMWU2NjVjMWZlOWI1XCIsXCIyMDRiNWQ2Zjg0ODIyYzMwN2U0YjRhNzE0MDczN2FlYzIzZmM2M2I2NWIzNWY4NmExMDAyNmRiZDJkODY0ZTZiXCJdLFtcImM0MTkxNjM2NWFiYjJiNWQwOTE5MmY1ZjJkYmVhZmVjMjA4ZjAyMGYxMjU3MGExODRkYmFkYzNlNTg1OTU5OTdcIixcIjRmMTQzNTFkMDA4N2VmYTQ5ZDI0NWIzMjg5ODQ5ODlkNWNhZjk0NTBmMzRiZmMwZWQxNmU5NmI1OGZhOTkxM1wiXSxbXCI4NDFkNjA2M2E1ODZmYTQ3NWE3MjQ2MDRkYTAzYmM1YjkyYTJlMGQyZTBhMzZhY2ZlNGM3M2E1NTE0NzQyODgxXCIsXCI3Mzg2N2Y1OWMwNjU5ZTgxOTA0ZjlhMWM3NTQzNjk4ZTYyNTYyZDY3NDRjMTY5Y2U3YTM2ZGUwMWE4ZDYxNTRcIl0sW1wiNWU5NWJiMzk5YTY5NzFkMzc2MDI2OTQ3Zjg5YmRlMmYyODJiMzM4MTA5MjhiZTRkZWQxMTJhYzRkNzBlMjBkNVwiLFwiMzlmMjNmMzY2ODA5MDg1YmVlYmZjNzExODEzMTM3NzVhOTljOWFlZDdkOGJhMzhiMTYxMzg0Yzc0NjAxMjg2NVwiXSxbXCIzNmU0NjQxYTUzOTQ4ZmQ0NzZjMzlmOGE5OWZkOTc0ZTVlYzA3NTY0YjUzMTVkOGJmOTk0NzFiY2EwZWYyZjY2XCIsXCJkMjQyNGIxYjFhYmU0ZWI4MTY0MjI3YjA4NWM5YWE5NDU2ZWExMzQ5M2ZkNTYzZTA2ZmQ1MWNmNTY5NGM3OGZjXCJdLFtcIjMzNjU4MWVhN2JmYmJiMjkwYzE5MWEyZjUwN2E0MWNmNTY0Mzg0MjE3MGU5MTRmYWVhYjI3YzJjNTc5ZjcyNlwiLFwiZWFkMTIxNjg1OTVmZTFiZTk5MjUyMTI5YjZlNTZiMzM5MWY3YWIxNDEwY2QxZTBlZjNkY2RjYWJkMmZkYTIyNFwiXSxbXCI4YWI4OTgxNmRhZGZkNmI2YTFmMjYzNGZjZjAwZWM4NDAzNzgxMDI1ZWQ2ODkwYzQ4NDk3NDI3MDZiZDQzZWRlXCIsXCI2ZmRjZWYwOWYyZjZkMGEwNDRlNjU0YWVmNjI0MTM2ZjUwM2Q0NTljM2U4OTg0NTg1OGE0N2E5MTI5Y2RkMjRlXCJdLFtcIjFlMzNmMWE3NDZjOWM1Nzc4MTMzMzQ0ZDkyOTlmY2FhMjBiMDkzOGU4YWNmZjI1NDRiYjQwMjg0YjhjNWZiOTRcIixcIjYwNjYwMjU3ZGQxMWIzYWE5YzhlZDYxOGQyNGVkZmYyMzA2ZDMyMGYxZDAzMDEwZTMzYTdkMjA1N2YzYjNiNlwiXSxbXCI4NWI3YzFkY2IzY2VjMWI3ZWU3ZjMwZGVkNzlkZDIwYTBlZDFmNGNjMThjYmNmY2ZhNDEwMzYxZmQ4ZjA4ZjMxXCIsXCIzZDk4YTljZGQwMjZkZDQzZjM5MDQ4ZjI1YTg4NDdmNGZjYWZhZDE4OTVkN2E2MzNjNmZlZDNjMzVlOTk5NTExXCJdLFtcIjI5ZGY5ZmJkOGQ5ZTQ2NTA5Mjc1ZjRiMTI1ZDZkNDVkN2ZiZTlhM2I4NzhhN2FmODcyYTI4MDA2NjFhYzVmNTFcIixcImI0YzRmZTk5Yzc3NWE2MDZlMmQ4ODYyMTc5MTM5ZmZkYTYxZGM4NjFjMDE5ZTU1Y2QyODc2ZWIyYTI3ZDg0YlwiXSxbXCJhMGIxY2FlMDZiMGE4NDdhM2ZlYTZlNjcxYWFmOGFkZmRmZTU4Y2EyZjc2ODEwNWM4MDgyYjJlNDQ5ZmNlMjUyXCIsXCJhZTQzNDEwMmVkZGUwOTU4ZWM0YjE5ZDkxN2E2YTI4ZTZiNzJkYTE4MzRhZmYwZTY1MGYwNDk1MDNhMjk2Y2YyXCJdLFtcIjRlOGNlYWZiOWIzZTlhMTM2ZGM3ZmY2N2U4NDAyOTViNDk5ZGZiM2IyMTMzZTRiYTExM2YyZTRjMGUxMjFlNVwiLFwiY2YyMTc0MTE4YzhiNmQ3YTRiNDhmNmQ1MzRjZTVjNzk0MjJjMDg2YTYzNDYwNTAyYjgyN2NlNjJhMzI2NjgzY1wiXSxbXCJkMjRhNDRlMDQ3ZTE5YjZmNWFmYjgxYzdjYTJmNjkwODBhNTA3NjY4OWEwMTA5MTlmNDI3MjVjMmI3ODlhMzNiXCIsXCI2ZmI4ZDU1OTFiNDY2ZjhmYzYzZGI1MGYxYzBmMWM2OTAxM2Y5OTY4ODdiODI0NGQyY2RlYzQxN2FmZWE4ZmEzXCJdLFtcImVhMDE2MDZhN2E2YzljZGQyNDlmZGZjZmFjYjk5NTg0MDAxZWRkMjhhYmJhYjc3YjUxMDRlOThlOGUzYjM1ZDRcIixcIjMyMmFmNDkwOGM3MzEyYjBjZmJmZTM2OWY3YTdiM2NkYjdkNDQ5NGJjMjgyMzcwMGNmZDY1MjE4OGEzZWE5OGRcIl0sW1wiYWY4YWRkYmYyYjY2MWM4YTZjNjMyODY1NWViOTY2NTEyNTIwMDdkOGM1ZWEzMWJlNGFkMTk2ZGU4Y2UyMTMxZlwiLFwiNjc0OWU2N2MwMjliODVmNTJhMDM0ZWFmZDA5NjgzNmIyNTIwODE4NjgwZTI2YWM4ZjNkZmJjZGI3MTc0OTcwMFwiXSxbXCJlM2FlMTk3NDU2NmNhMDZjYzUxNmQ0N2UwZmIxNjVhNjc0YTNkYWJjZmNhMTVlNzIyZjBlMzQ1MGY0NTg4OVwiLFwiMmFlYWJlN2U0NTMxNTEwMTE2MjE3ZjA3YmY0ZDA3MzAwZGU5N2U0ODc0ZjgxZjUzMzQyMGE3MmVlYjBiZDZhNFwiXSxbXCI1OTFlZTM1NTMxM2Q5OTcyMWNmNjk5M2ZmZWQxZTNlMzAxOTkzZmYzZWQyNTg4MDIwNzVlYThjZWQzOTdlMjQ2XCIsXCJiMGVhNTU4YTExM2MzMGJlYTYwZmM0Nzc1NDYwYzc5MDFmZjBiMDUzZDI1Y2EyYmRlZWU5OGYxYTRiZTVkMTk2XCJdLFtcIjExMzk2ZDU1ZmRhNTRjNDlmMTlhYTk3MzE4ZDhkYTYxZmE4NTg0ZTQ3YjA4NDk0NTA3N2NmMDMyNTViNTI5ODRcIixcIjk5OGM3NGE4Y2Q0NWFjMDEyODlkNTgzM2E3YmViNDc0NGZmNTM2YjAxYjI1N2JlNGM1NzY3YmVhOTNlYTU3YTRcIl0sW1wiM2M1ZDJhMWJhMzljNWExNzkwMDAwNzM4YzllMGM0MGI4ZGNkZmQ1NDY4NzU0YjY0MDU1NDAxNTdlMDE3YWE3YVwiLFwiYjIyODQyNzk5OTVhMzRlMmY5ZDRkZTczOTZmYzE4YjgwZjliOGI5ZmRkMjcwZjY2NjFmNzljYTRjODFiZDI1N1wiXSxbXCJjYzg3MDRiOGE2MGEwZGVmYTNhOTlhNzI5OWYyZTljM2ZiYzM5NWFmYjA0YWMwNzg0MjVlZjhhMTc5M2NjMDMwXCIsXCJiZGQ0NjAzOWZlZWQxNzg4MWQxZTA4NjJkYjM0N2Y4Y2YzOTViNzRmYzRiY2RjNGU5NDBiNzRlM2FjMWYxYjEzXCJdLFtcImM1MzNlNGY3ZWE4NTU1YWFjZDk3NzdhYzVjYWQyOWI5N2RkNGRlZmNjYzUzZWU3ZWEyMDQxMTliMjg4OWIxOTdcIixcIjZmMGEyNTZiYzVlZmRmNDI5YTJmYjYyNDJmMWE0M2EyZDliOTI1YmI0YTRiM2EyNmJiOGUwZjQ1ZWI1OTYwOTZcIl0sW1wiYzE0ZjhmMmNjYjI3ZDZmMTA5ZjZkMDhkMDNjYzk2YTY5YmE4YzM0ZWVjMDdiYmNmNTY2ZDQ4ZTMzZGE2NTkzXCIsXCJjMzU5ZDY5MjNiYjM5OGY3ZmQ0NDczZTE2ZmUxYzI4NDc1Yjc0MGRkMDk4MDc1ZTZjMGU4NjQ5MTEzZGMzYTM4XCJdLFtcImE2Y2JjMzA0NmJjNmE0NTBiYWMyNDc4OWZhMTcxMTVhNGM5NzM5ZWQ3NWY4ZjIxY2U0NDFmNzJlMGI5MGU2ZWZcIixcIjIxYWU3ZjQ2ODBlODg5YmIxMzA2MTllMmMwZjk1YTM2MGNlYjU3M2M3MDYwMzEzOTg2MmFmZDYxN2ZhOWI5ZlwiXSxbXCIzNDdkNmQ5YTAyYzQ4OTI3ZWJmYjg2YzEzNTliMWNhZjEzMGEzYzAyNjdkMTFjZTYzNDRiMzlmOTlkNDNjYzM4XCIsXCI2MGVhN2Y2MWEzNTM1MjRkMWM5ODdmNmVjZWM5MmYwODZkNTY1YWI2ODc4NzBjYjEyNjg5ZmYxZTMxYzc0NDQ4XCJdLFtcImRhNjU0NWQyMTgxZGI4ZDk4M2Y3ZGNiMzc1ZWY1ODY2ZDQ3YzY3YjFiZjMxYzhjZjg1NWVmNzQzN2I3MjY1NmFcIixcIjQ5Yjk2NzE1YWI2ODc4YTc5ZTc4ZjA3Y2U1NjgwYzVkNjY3MzA1MWI0OTM1YmQ4OTdmZWE4MjRiNzdkYzIwOGFcIl0sW1wiYzQwNzQ3Y2M5ZDAxMmNiMWExM2I4MTQ4MzA5YzZkZTdlYzI1ZDY5NDVkNjU3MTQ2YjlkNTk5NGI4ZmViMTExMVwiLFwiNWNhNTYwNzUzYmUyYTEyZmM2ZGU2Y2FmMmNiNDg5NTY1ZGI5MzYxNTZiOTUxNGUxYmI1ZTgzMDM3ZTBmYTJkNFwiXSxbXCI0ZTQyYzhlYzgyYzk5Nzk4Y2NmM2E2MTBiZTg3MGU3ODMzOGM3ZjcxMzM0OGJkMzRjODIwM2VmNDAzN2YzNTAyXCIsXCI3NTcxZDc0ZWU1ZTBmYjkyYTdhOGIzM2EwNzc4MzM0MWE1NDkyMTQ0Y2M1NGJjYzQwYTk0NDczNjkzNjA2NDM3XCJdLFtcIjM3NzVhYjcwODliYzZhZjgyM2FiYTJlMWFmNzBiMjM2ZDI1MWNhZGIwYzg2NzQzMjg3NTIyYTFiM2IwZGVkZWFcIixcImJlNTJkMTA3YmNmYTA5ZDhiY2I5NzM2YTgyOGNmYTdmYWM4ZGIxN2JmN2E3NmEyYzQyYWQ5NjE0MDkwMThjZjdcIl0sW1wiY2VlMzFjYmY3ZTM0ZWMzNzlkOTRmYjgxNGQzZDc3NWFkOTU0NTk1ZDEzMTRiYTg4NDY5NTllM2U4MmY3NGUyNlwiLFwiOGZkNjRhMTRjMDZiNTg5YzI2Yjk0N2FlMmJjZjZiZmEwMTQ5ZWYwYmUxNGVkNGQ4MGY0NDhhMDFjNDNiMWM2ZFwiXSxbXCJiNGY5ZWFlYTA5YjY5MTc2MTlmNmVhNmE0ZWI1NDY0ZWZkZGI1OGZkNDViMWViZWZjZGMxYTAxZDA4YjQ3OTg2XCIsXCIzOWU1Yzk5MjViNWE1NGIwNzQzM2E0ZjE4YzYxNzI2ZjhiYjEzMWMwMTJjYTU0MmViMjRhOGFjMDcyMDA2ODJhXCJdLFtcImQ0MjYzZGZjM2QyZGY5MjNhMDE3OWE0ODk2NmQzMGNlODRlMjUxNWFmYzNkY2NjMWI3NzkwNzc5MmViY2M2MGVcIixcIjYyZGZhZjA3YTBmNzhmZWIzMGUzMGQ2Mjk1ODUzY2UxODllMTI3NzYwYWQ2Y2Y3ZmFlMTY0ZTEyMmEyMDhkNTRcIl0sW1wiNDg0NTc1MjQ4MjBmYTY1YTRmOGQzNWViNjkzMDg1N2MwMDMyYWNjMGE0YTJkZTQyMjIzM2VlZGE4OTc2MTJjNFwiLFwiMjVhNzQ4YWIzNjc5NzlkOTg3MzNjMzhhMWZhMWMyZTdkYzZjYzA3ZGIyZDYwYTlhZTdhNzZhYWE0OWJkMGY3N1wiXSxbXCJkZmVlZWYxODgxMTAxZjJjYjExNjQ0ZjNhMmFmZGZjMjA0NWUxOTkxOTE1MjkyM2YzNjdhMTc2N2MxMWNjZWRhXCIsXCJlY2ZiNzA1NmNmMWRlMDQyZjk0MjBiYWIzOTY3OTNjMGMzOTBiZGU3NGI0YmJkZmYxNmE4M2FlMDlhOWE3NTE3XCJdLFtcIjZkN2VmNmIxNzU0M2Y4MzczYzU3M2Y0NGUxZjM4OTgzNWQ4OWJjYmM2MDYyY2VkMzZjODJkZjgzYjhmYWU4NTlcIixcImNkNDUwZWMzMzU0Mzg5ODZkZmVmYTEwYzU3ZmVhOWJjYzUyMWEwOTU5YjJkODBiYmY3NGIxOTBkY2E3MTJkMTBcIl0sW1wiZTc1NjA1ZDU5MTAyYTVhMjY4NDUwMGQzYjk5MWYyZTNmM2M4OGI5MzIyNTU0NzAzNWFmMjVhZjY2ZTA0NTQxZlwiLFwiZjVjNTQ3NTRhOGY3MWVlNTQwYjliNDg3Mjg0NzNlMzE0ZjcyOWFjNTMwOGIwNjkzODM2MDk5MGUyYmZhZDEyNVwiXSxbXCJlYjk4NjYwZjRjNGRmYWEwNmEyYmU0NTNkNTAyMGJjOTlhMGMyZTYwYWJlMzg4NDU3ZGQ0M2ZlZmIxZWQ2MjBjXCIsXCI2Y2I5YTg4NzZkOWNiODUyMDYwOWFmM2FkZDI2Y2QyMGEwYTdjZDhhOTQxMTEzMWNlODVmNDQxMDAwOTkyMjNlXCJdLFtcIjEzZTg3YjAyN2Q4NTE0ZDM1OTM5ZjJlNjg5MmIxOTkyMjE1NDU5Njk0MTg4ODMzNmRjMzU2M2UzYjhkYmE5NDJcIixcImZlZjVhM2M2ODA1OWE2ZGVjNWQ2MjQxMTRiZjFlOTFhYWMyYjlkYTU2OGQ2YWJlYjI1NzBkNTU2NDZiOGFkZjFcIl0sW1wiZWUxNjMwMjZlOWZkNmZlMDE3YzM4ZjA2YTViZTZmYzEyNTQyNGIzNzFjZTI3MDhlN2JmNDQ5MTY5MWU1NzY0YVwiLFwiMWFjYjI1MGYyNTVkZDYxYzQzZDk0Y2NjNjcwZDBmNThmNDlhZTNmYTE1Yjk2NjIzZTU0MzBkYTBhZDZjNjJiMlwiXSxbXCJiMjY4ZjVlZjlhZDUxZTRkNzhkZTNhNzUwYzJkYzg5YjFlNjI2ZDQzNTA1ODY3OTk5OTMyZTVkYjMzYWYzZDgwXCIsXCI1ZjMxMGQ0YjNjOTliOWViYjE5Zjc3ZDQxYzFkZWUwMThjZjBkMzRmZDQxOTE2MTQwMDNlOTQ1YTEyMTZlNDIzXCJdLFtcImZmMDdmMzExOGE5ZGYwMzVlOWZhZDg1ZWI2YzdiZmU0MmIwMmYwMWNhOTljZWVhM2JmN2ZmZGJhOTNjNDc1MGRcIixcIjQzODEzNmQ2MDNlODU4YTNhNWM0NDBjMzhlY2NiYWRkYzFkMjk0MjExNGUyZWRkZDQ3NDBkMDk4Y2VkMWYwZDhcIl0sW1wiOGQ4Yjk4NTVjN2MwNTJhMzQxNDZmZDIwZmZiNjU4YmVhNGI5ZjY5ZTBkODI1ZWJlYzE2ZThjM2NlMmI1MjZhMVwiLFwiY2RiNTU5ZWVkYzJkNzlmOTI2YmFmNDRmYjg0ZWE0ZDQ0YmNmNTBmZWU1MWQ3Y2ViMzBlMmU3ZjQ2MzAzNjc1OFwiXSxbXCI1MmRiMGI1Mzg0ZGZiZjA1YmZhOWQ0NzJkN2FlMjZkZmU0Yjg1MWNlY2E5MWIxZWJhNTQyNjMxODBkYTMyYjYzXCIsXCJjM2I5OTdkMDUwZWU1ZDQyM2ViYWY2NmE2ZGI5ZjU3YjMxODBjOTAyODc1Njc5ZGU5MjRiNjlkODRhN2IzNzVcIl0sW1wiZTYyZjk0OTBkM2Q1MWRhNjM5NWVmZDI0ZTgwOTE5Y2M3ZDBmMjljM2YzZmE0OGM2ZmZmNTQzYmVjYmQ0MzM1MlwiLFwiNmQ4OWFkN2JhNDg3NmIwYjIyYzJjYTI4MGM2ODI4NjJmMzQyYzg1OTFmMWRhZjUxNzBlMDdiZmQ5Y2NhZmE3ZFwiXSxbXCI3ZjMwZWEyNDc2YjM5OWI0OTU3NTA5Yzg4Zjc3ZDAxOTFhZmEyZmY1Y2I3YjE0ZmQ2ZDhlN2Q2NWFhYWIxMTkzXCIsXCJjYTVlZjdkNGIyMzFjOTRjM2IxNTM4OWE1ZjYzMTFlOWRhZmY3YmI2N2IxMDNlOTg4MGVmNGJmZjYzN2FjYWVjXCJdLFtcIjUwOThmZjFlMWQ5ZjE0ZmI0NmEyMTBmYWRhNmM5MDNmZWYwZmI3YjRhMWRkMWQ5YWM2MGEwMzYxODAwYjdhMDBcIixcIjk3MzExNDFkODFmYzhmODA4NGQzN2M2ZTc1NDIwMDZiM2VlMWI0MGQ2MGRmZTUzNjJhNWIxMzJmZDE3ZGRjMFwiXSxbXCIzMmI3OGM3ZGU5ZWU1MTJhNzI4OTViZTZiOWNiZWZhNmUyZjNjNGNjY2U0NDVjOTZiOWYyYzgxZTI3NzhhZDU4XCIsXCJlZTE4NDlmNTEzZGY3MWUzMmVmYzM4OTZlZTI4MjYwYzczYmI4MDU0N2FlMjI3NWJhNDk3MjM3Nzk0Yzg3NTNjXCJdLFtcImUyY2I3NGZkZGM4ZTlmYmNkMDc2ZWVmMmE3YzcyYjBjZTM3ZDUwZjA4MjY5ZGZjMDc0YjU4MTU1MDU0N2E0ZjdcIixcImQzYWEyZWQ3MWM5ZGQyMjQ3YTYyZGYwNjI3MzZlYjBiYWRkZWE5ZTM2MTIyZDJiZTg2NDFhYmNiMDA1Y2M0YTRcIl0sW1wiODQzODQ0NzU2NmQ0ZDdiZWRhZGMyOTk0OTZhYjM1NzQyNjAwOWEzNWYyMzVjYjE0MWJlMGQ5OWNkMTBhZTNhOFwiLFwiYzRlMTAyMDkxNjk4MGE0ZGE1ZDAxYWM1ZTZhZDMzMDczNGVmMGQ3OTA2NjMxYzRmMjM5MDQyNmIyZWRkNzkxZlwiXSxbXCI0MTYyZDQ4OGI4OTQwMjAzOWI1ODRjNmZjNmMzMDg4NzA1ODdkOWM0NmY2NjBiODc4YWI2NWM4MmM3MTFkNjdlXCIsXCI2NzE2M2U5MDMyMzYyODlmNzc2ZjIyYzI1ZmI4YTNhZmMxNzMyZjJiODRiNGU5NWRiZGE0N2FlNWEwODUyNjQ5XCJdLFtcIjNmYWQzZmE4NGNhZjBmMzRmMGY4OWJmZDJkY2Y1NGZjMTc1ZDc2N2FlYzNlNTA2ODRmM2JhNGE0YmY1ZjY4M2RcIixcImNkMWJjN2NiNmNjNDA3YmIyZjBjYTY0N2M3MThhNzMwY2Y3MTg3MmU3ZDBkMmE1M2ZhMjBlZmNkZmU2MTgyNlwiXSxbXCI2NzRmMjYwMGEzMDA3YTAwNTY4YzFhN2NlMDVkMDgxNmMxZmI4NGJmMTM3MDc5OGYxYzY5NTMyZmFlYjFhODZiXCIsXCIyOTlkMjFmOTQxM2YzM2IzZWRmNDNiMjU3MDA0NTgwYjcwZGI1N2RhMGIxODIyNTllMDllZWNjNjllMGQzOGE1XCJdLFtcImQzMmY0ZGE1NGFkZTc0YWJiODFiODE1YWQxZmIzYjI2M2Q4MmQ2YzY5MjcxNGJjZmY4N2QyOWJkNWVlOWYwOGZcIixcImY5NDI5ZTczOGI4ZTUzYjk2OGU5OTAxNmMwNTk3MDc3ODJlMTRmNDUzNTM1OWQ1ODJmYzQxNjkxMGIzZWVhODdcIl0sW1wiMzBlNGU2NzA0MzUzODU1NTZlNTkzNjU3MTM1ODQ1ZDM2ZmJiNjkzMWY3MmIwOGNiMWVkOTU0ZjFlM2NlM2ZmNlwiLFwiNDYyZjliY2U2MTk4OTg2Mzg0OTkzNTAxMTNiYmM5YjEwYTg3OGQzNWRhNzA3NDBkYzY5NWE1NTllYjg4ZGI3YlwiXSxbXCJiZTIwNjIwMDNjNTFjYzMwMDQ2ODI5MDQzMzBlNGRlZTdmM2RjZDEwYjAxZTU4MGJmMTk3MWIwNGQ0Y2FkMjk3XCIsXCI2MjE4OGJjNDlkNjFlNTQyODU3M2Q0OGE3NGUxYzY1NWIxYzYxMDkwOTA1NjgyYTBkNTU1OGVkNzJkY2NiOWJjXCJdLFtcIjkzMTQ0NDIzYWNlMzQ1MWVkMjllMGZiOWFjMmFmMjExY2I2ZTg0YTYwMWRmNTk5M2M0MTk4NTlmZmY1ZGYwNGFcIixcIjdjMTBkZmIxNjRjMzQyNWY1YzcxYTNmOWQ3OTkyMDM4ZjEwNjUyMjRmNzJiYjlkMWQ5MDJhNmQxMzAzN2I0N2NcIl0sW1wiYjAxNWY4MDQ0ZjVmY2JkY2YyMWNhMjZkNmMzNGZiODE5NzgyOTIwNWM3YjdkMmE3Y2I2NjQxOGMxNTdiMTEyY1wiLFwiYWI4YzFlMDg2ZDA0ZTgxMzc0NGE2NTViMmRmOGQ1ZjgzYjNjZGM2ZmFhMzA4OGMxZDNhZWExNDU0ZTNhMWQ1ZlwiXSxbXCJkNWU5ZTFkYTY0OWQ5N2Q4OWU0ODY4MTE3YTQ2NWEzYTRmOGExOGRlNTdhMTQwZDM2YjNmMmFmMzQxYTIxYjUyXCIsXCI0Y2IwNDQzN2YzOTFlZDczMTExYTEzY2MxZDRkZDBkYjE2OTM0NjVjMjI0MDQ4MGQ4OTU1ZTg1OTJmMjc0NDdhXCJdLFtcImQzYWU0MTA0N2RkN2NhMDY1ZGJmOGVkNzdiOTkyNDM5OTgzMDA1Y2Q3MmUxNmQ2Zjk5NmE1MzE2ZDM2OTY2YmJcIixcImJkMWFlYjIxYWQyMmViYjIyYTEwZjAzMDM0MTdjNmQ5NjRmOGNkZDdkZjBhY2E2MTRiMTBkYzE0ZDEyNWFjNDZcIl0sW1wiNDYzZTI3NjNkODg1Zjk1OGZjNjZjZGQyMjgwMGYwYTQ4NzE5N2QwYTgyZTM3N2I0OWY4MGFmODdjODk3YjA2NVwiLFwiYmZlZmFjZGIwZTVkMGZkN2RmM2EzMTFhOTRkZTA2MmIyNmI4MGM2MWZiYzk3NTA4Yjc5OTkyNjcxZWY3Y2E3ZlwiXSxbXCI3OTg1ZmRmZDEyN2MwNTY3YzZmNTNlYzFiYjYzZWMzMTU4ZTU5N2M0MGJmZTc0N2M4M2NkZGZjOTEwNjQxOTE3XCIsXCI2MDNjMTJkYWYzZDk4NjJlZjJiMjVmZTFkZTI4OWFlZDI0ZWQyOTFlMGVjNjcwODcwM2E1YmQ1NjdmMzJlZDAzXCJdLFtcIjc0YTFhZDZiNWY3NmUzOWRiMmRkMjQ5NDEwZWFjN2Y5OWU3NGM1OWNiODNkMmQwZWQ1ZmYxNTQzZGE3NzAzZTlcIixcImNjNjE1N2VmMThjOWM2M2NkNjE5M2Q4MzYzMWJiZWEwMDkzZTA5Njg5NDJlOGMzM2Q1NzM3ZmQ3OTBlMGRiMDhcIl0sW1wiMzA2ODJhNTA3MDMzNzVmNjAyZDQxNjY2NGJhMTliN2ZjOWJhYjQyYzcyNzQ3NDYzYTcxZDA4OTZiMjJmNmRhM1wiLFwiNTUzZTA0ZjZiMDE4YjRmYTZjOGYzOWU3ZjMxMWQzMTc2MjkwZDBlMGYxOWNhNzNmMTc3MTRkOTk3N2EyMmZmOFwiXSxbXCI5ZTIxNThmMGQ3YzBkNWYyNmMzNzkxZWZlZmE3OTU5NzY1NGU3YTJiMjQ2NGY1MmIxZWU2YzEzNDc3NjllZjU3XCIsXCI3MTJmY2RkMWI5MDUzZjA5MDAzYTM0ODFmYTc3NjJlOWZmZDdjOGVmMzVhMzg1MDllMmZiZjI2MjkwMDgzNzNcIl0sW1wiMTc2ZTI2OTg5YTQzYzljZmViYTQwMjljMjAyNTM4YzI4MTcyZTU2NmUzYzRmY2U3MzIyODU3ZjNiZTMyN2Q2NlwiLFwiZWQ4Y2M5ZDA0YjI5ZWI4NzdkMjcwYjQ4NzhkYzQzYzE5YWVmZDMxZjRlZWUwOWVlN2I0NzgzNGMxZmE0YjFjM1wiXSxbXCI3NWQ0NmVmZWEzNzcxZTZlNjhhYmI4OWExM2FkNzQ3ZWNmMTg5MjM5M2RmYzRmMWI3MDA0Nzg4YzUwMzc0ZGE4XCIsXCI5ODUyMzkwYTk5NTA3Njc5ZmQwYjg2ZmQyYjM5YTg2OGQ3ZWZjMjIxNTEzNDZlMWEzY2E0NzI2NTg2YTZiZWQ4XCJdLFtcIjgwOWEyMGM2N2Q2NDkwMGZmYjY5OGM0YzgyNWY2ZDVmMjMxMGZiMDQ1MWM4NjkzNDViNzMxOWY2NDU2MDU3MjFcIixcIjllOTk0OTgwZDk5MTdlMjJiNzZiMDYxOTI3ZmEwNDE0M2QwOTZjY2M1NDk2M2U2YTVlYmZhNWYzZjhlMjg2YzFcIl0sW1wiMWIzODkwM2E0M2Y3ZjExNGVkNDUwMGI0ZWFjNzA4M2ZkZWZlY2UxY2YyOWM2MzUyOGQ1NjM0NDZmOTcyYzE4MFwiLFwiNDAzNmVkYzkzMWE2MGFlODg5MzUzZjc3ZmQ1M2RlNGEyNzA4YjI2YjZmNWRhNzJhZDMzOTQxMTlkYWY0MDhmOVwiXV1cbn19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9aWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1yZXR1cm4gcn1mdW5jdGlvbiBpKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWkodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9W10sbj0xPDxlKzEsaT10LmNsb25lKCk7aS5jbXBuKDEpPj0wOyl7dmFyIG87aWYoaS5pc09kZCgpKXt2YXIgYT1pLmFuZGxuKG4tMSk7bz1hPihuPj4xKS0xPyhuPj4xKS1hOmEsaS5pc3VibihvKX1lbHNlIG89MDtyLnB1c2gobyk7Zm9yKHZhciBmPTAhPT1pLmNtcG4oMCkmJjA9PT1pLmFuZGxuKG4tMSk/ZSsxOjEscz0xO3M8ZjtzKyspci5wdXNoKDApO2kuaXVzaHJuKGYpfXJldHVybiByfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1bW10sW11dO3Q9dC5jbG9uZSgpLGU9ZS5jbG9uZSgpO2Zvcih2YXIgbj0wLGk9MDt0LmNtcG4oLW4pPjB8fGUuY21wbigtaSk+MDspe3ZhciBvPXQuYW5kbG4oMykrbiYzLGE9ZS5hbmRsbigzKStpJjM7Mz09PW8mJihvPS0xKSwzPT09YSYmKGE9LTEpO3ZhciBmO2lmKDA9PT0oMSZvKSlmPTA7ZWxzZXt2YXIgcz10LmFuZGxuKDcpK24mNztmPTMhPT1zJiY1IT09c3x8MiE9PWE/bzotb31yWzBdLnB1c2goZik7dmFyIHU7aWYoMD09PSgxJmEpKXU9MDtlbHNle3ZhciBzPWUuYW5kbG4oNykraSY3O3U9MyE9PXMmJjUhPT1zfHwyIT09bz9hOi1hfXJbMV0ucHVzaCh1KSwyKm49PT1mKzEmJihuPTEtbiksMippPT09dSsxJiYoaT0xLWkpLHQuaXVzaHJuKDEpLGUuaXVzaHJuKDEpfXJldHVybiByfWZ1bmN0aW9uIHModCxlLHIpe3ZhciBuPVwiX1wiK2U7dC5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXtyZXR1cm4gdm9pZCAwIT09dGhpc1tuXT90aGlzW25dOnRoaXNbbl09ci5jYWxsKHRoaXMpfX1mdW5jdGlvbiB1KHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0P2MudG9BcnJheSh0LFwiaGV4XCIpOnR9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gbmV3IGQodCxcImhleFwiLFwibGVcIil9dmFyIGM9ZSxkPXIoMTgpO2MuYXNzZXJ0PWZ1bmN0aW9uKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX0sYy50b0FycmF5PW4sYy56ZXJvMj1pLGMudG9IZXg9byxjLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVyblwiaGV4XCI9PT1lP28odCk6dH0sYy5nZXROQUY9YSxjLmdldEpTRj1mLGMuY2FjaGVkUHJvcGVydHk9cyxjLnBhcnNlQnl0ZXM9dSxjLmludEZyb21MRT1ofSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dH12YXIgaTtpZih0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGl8fChpPW5ldyBuKG51bGwpKSxpLmdlbmVyYXRlKHQpfSx0LmV4cG9ydHMuUmFuZD1uLG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYW5kKHQpfSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTp3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfTtlbHNlIHRyeXt2YXIgbz1yKDYwOSk7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZG9tQnl0ZXModCl9fWNhdGNoKHQpe24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBlfX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7dGhpcy5wZW5kaW5nPW51bGwsdGhpcy5wZW5kaW5nVG90YWw9MCx0aGlzLmJsb2NrU2l6ZT10aGlzLmNvbnN0cnVjdG9yLmJsb2NrU2l6ZSx0aGlzLm91dFNpemU9dGhpcy5jb25zdHJ1Y3Rvci5vdXRTaXplLHRoaXMuaG1hY1N0cmVuZ3RoPXRoaXMuY29uc3RydWN0b3IuaG1hY1N0cmVuZ3RoLHRoaXMucGFkTGVuZ3RoPXRoaXMuY29uc3RydWN0b3IucGFkTGVuZ3RoLzgsdGhpcy5lbmRpYW49XCJiaWdcIix0aGlzLl9kZWx0YTg9dGhpcy5ibG9ja1NpemUvOCx0aGlzLl9kZWx0YTMyPXRoaXMuYmxvY2tTaXplLzMyfXZhciBpPXIoNDkpLG89aS51dGlscyxhPW8uYXNzZXJ0O2UuQmxvY2tIYXNoPW4sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7aWYodD1vLnRvQXJyYXkodCxlKSx0aGlzLnBlbmRpbmc/dGhpcy5wZW5kaW5nPXRoaXMucGVuZGluZy5jb25jYXQodCk6dGhpcy5wZW5kaW5nPXQsdGhpcy5wZW5kaW5nVG90YWwrPXQubGVuZ3RoLHRoaXMucGVuZGluZy5sZW5ndGg+PXRoaXMuX2RlbHRhOCl7dD10aGlzLnBlbmRpbmc7dmFyIHI9dC5sZW5ndGgldGhpcy5fZGVsdGE4O3RoaXMucGVuZGluZz10LnNsaWNlKHQubGVuZ3RoLXIsdC5sZW5ndGgpLDA9PT10aGlzLnBlbmRpbmcubGVuZ3RoJiYodGhpcy5wZW5kaW5nPW51bGwpLHQ9by5qb2luMzIodCwwLHQubGVuZ3RoLXIsdGhpcy5lbmRpYW4pO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9dGhpcy5fZGVsdGEzMil0aGlzLl91cGRhdGUodCxuLG4rdGhpcy5fZGVsdGEzMil9cmV0dXJuIHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy51cGRhdGUodGhpcy5fcGFkKCkpLGEobnVsbD09PXRoaXMucGVuZGluZyksdGhpcy5fZGlnZXN0KHQpfSxuLnByb3RvdHlwZS5fcGFkPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5wZW5kaW5nVG90YWwsZT10aGlzLl9kZWx0YTgscj1lLSh0K3RoaXMucGFkTGVuZ3RoKSVlLG49bmV3IEFycmF5KHIrdGhpcy5wYWRMZW5ndGgpO25bMF09MTI4O2Zvcih2YXIgaT0xO2k8cjtpKyspbltpXT0wO2lmKHQ8PD0zLFwiYmlnXCI9PT10aGlzLmVuZGlhbil7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTA7bltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj44JjI1NSxuW2krK109MjU1JnR9ZWxzZXtuW2krK109MjU1JnQsbltpKytdPXQ+Pj44JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjI0JjI1NSxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MDtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MH1yZXR1cm4gbn19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHRoaXMuSGFzaD10LHRoaXMuYmxvY2tTaXplPXQuYmxvY2tTaXplLzgsdGhpcy5vdXRTaXplPXQub3V0U2l6ZS84LHRoaXMuaW5uZXI9bnVsbCx0aGlzLm91dGVyPW51bGwsdm9pZCB0aGlzLl9pbml0KG8udG9BcnJheShlLHIpKSk6bmV3IG4odCxlLHIpfXZhciBpPXIoNDkpLG89aS51dGlscyxhPW8uYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3QubGVuZ3RoPnRoaXMuYmxvY2tTaXplJiYodD0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpLmRpZ2VzdCgpKSxhKHQubGVuZ3RoPD10aGlzLmJsb2NrU2l6ZSk7Zm9yKHZhciBlPXQubGVuZ3RoO2U8dGhpcy5ibG9ja1NpemU7ZSsrKXQucHVzaCgwKTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj01NDt0aGlzLmlubmVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49MTA2O3RoaXMub3V0ZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuaW5uZXIudXBkYXRlKHQsZSksdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm91dGVyLnVwZGF0ZSh0aGlzLmlubmVyLmRpZ2VzdCgpKSx0aGlzLm91dGVyLmRpZ2VzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhsLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLmVuZGlhbj1cImxpdHRsZVwiKSk6bmV3IG59ZnVuY3Rpb24gaSh0LGUscixuKXtyZXR1cm4gdDw9MTU/ZV5yXm46dDw9MzE/ZSZyfH5lJm46dDw9NDc/KGV8fnIpXm46dDw9NjM/ZSZufHImfm46ZV4ocnx+bil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDw9MTU/MDp0PD0zMT8xNTE4NTAwMjQ5OnQ8PTQ3PzE4NTk3NzUzOTM6dDw9NjM/MjQwMDk1OTcwODoyODQwODUzODM4fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQ8PTE1PzEzNTI4Mjk5MjY6dDw9MzE/MTU0ODYwMzY4NDp0PD00Nz8xODM2MDcyNjkxOnQ8PTYzPzIwNTM5OTQyMTc6MH12YXIgZj1yKDQ5KSxzPWYudXRpbHMsdT1zLnJvdGwzMixoPXMuc3VtMzIsYz1zLnN1bTMyXzMsZD1zLnN1bTMyXzQsbD1mLmNvbW1vbi5CbG9ja0hhc2g7cy5pbmhlcml0cyhuLGwpLGUucmlwZW1kMTYwPW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0xNjAsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5oWzBdLG49dGhpcy5oWzFdLGY9dGhpcy5oWzJdLHM9dGhpcy5oWzNdLGw9dGhpcy5oWzRdLG09cixnPW4sdz1mLF89cyxNPWwsUz0wO1M8ODA7UysrKXt2YXIgRT1oKHUoZChyLGkoUyxuLGYscyksdFtwW1NdK2VdLG8oUykpLHZbU10pLGwpO3I9bCxsPXMscz11KGYsMTApLGY9bixuPUUsRT1oKHUoZChtLGkoNzktUyxnLHcsXyksdFtiW1NdK2VdLGEoUykpLHlbU10pLE0pLG09TSxNPV8sXz11KHcsMTApLHc9ZyxnPUV9RT1jKHRoaXMuaFsxXSxmLF8pLHRoaXMuaFsxXT1jKHRoaXMuaFsyXSxzLE0pLHRoaXMuaFsyXT1jKHRoaXMuaFszXSxsLG0pLHRoaXMuaFszXT1jKHRoaXMuaFs0XSxyLGcpLHRoaXMuaFs0XT1jKHRoaXMuaFswXSxuLHcpLHRoaXMuaFswXT1FfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3MudG9IZXgzMih0aGlzLmgsXCJsaXR0bGVcIik6cy5zcGxpdDMyKHRoaXMuaCxcImxpdHRsZVwiKX07dmFyIHA9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sYj1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSx2PVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSx5PVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsMzE0NDEzNDI3NywxMDEzOTA0MjQyLDI3NzM0ODA3NjIsMTM1OTg5MzExOSwyNjAwODIyOTI0LDUyODczNDYzNSwxNTQxNDU5MjI1XSx0aGlzLms9WSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoNjQpKSk6bmV3IG59ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT8obi5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszMjM4MzcxMDMyLDkxNDE1MDY2Myw4MTI3MDI5OTksNDE0NDkxMjY5Nyw0MjkwNzc1ODU3LDE3NTA2MDMwMjUsMTY5NDA3NjgzOSwzMjA0MDc1NDI4XSkpOm5ldyBpfWZ1bmN0aW9uIG8oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG8/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3NzkwMzM3MDMsNDA4OTIzNTcyMCwzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUsMTAxMzkwNDI0Miw0MjcxMTc1NzIzLDI3NzM0ODA3NjIsMTU5NTc1MDEyOSwxMzU5ODkzMTE5LDI5MTc1NjUxMzcsMjYwMDgyMjkyNCw3MjU1MTExOTksNTI4NzM0NjM1LDQyMTUzODk1NDcsMTU0MTQ1OTIyNSwzMjcwMzMyMDldLHRoaXMuaz1XLHZvaWQodGhpcy5XPW5ldyBBcnJheSgxNjApKSk6bmV3IG99ZnVuY3Rpb24gYSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgYT8oby5jYWxsKHRoaXMpLHZvaWQodGhpcy5oPVszNDE4MDcwMzY1LDMyMzgzNzEwMzIsMTY1NDI3MDI1MCw5MTQxNTA2NjMsMjQzODUyOTM3MCw4MTI3MDI5OTksMzU1NDYyMzYwLDQxNDQ5MTI2OTcsMTczMTQwNTQxNSw0MjkwNzc1ODU3LDIzOTQxODAyMzEsMTc1MDYwMzAyNSwzNjc1MDA4NTI1LDE2OTQwNzY4MzksMTIwMzA2MjgxMywzMjA0MDc1NDI4XSkpOm5ldyBhfWZ1bmN0aW9uIGYoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGY/KFguY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoODApKSk6bmV3IGZ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQmZV5+dCZyfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB0JmVedCZyXmUmcn1mdW5jdGlvbiBoKHQsZSxyKXtyZXR1cm4gdF5lXnJ9ZnVuY3Rpb24gYyh0KXtyZXR1cm4gUih0LDIpXlIodCwxMyleUih0LDIyKX1mdW5jdGlvbiBkKHQpe3JldHVybiBSKHQsNileUih0LDExKV5SKHQsMjUpfWZ1bmN0aW9uIGwodCl7cmV0dXJuIFIodCw3KV5SKHQsMTgpXnQ+Pj4zfWZ1bmN0aW9uIHAodCl7cmV0dXJuIFIodCwxNyleUih0LDE5KV50Pj4+MTB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gMD09PXQ/cyhlLHIsbik6MT09PXR8fDM9PT10P2goZSxyLG4pOjI9PT10P3UoZSxyLG4pOnZvaWQgMH1mdW5jdGlvbiB2KHQsZSxyLG4saSxvKXt2YXIgYT10JnJefnQmaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB5KHQsZSxyLG4saSxvKXt2YXIgYT1lJm5efmUmbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBtKHQsZSxyLG4saSxvKXt2YXIgYT10JnJedCZpXnImaTtyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiBnKHQsZSxyLG4saSxvKXt2YXIgYT1lJm5eZSZvXm4mbztyZXR1cm4gYTwwJiYoYSs9NDI5NDk2NzI5NiksYX1mdW5jdGlvbiB3KHQsZSl7dmFyIHI9Tih0LGUsMjgpLG49TihlLHQsMiksaT1OKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIF8odCxlKXt2YXIgcj1MKHQsZSwyOCksbj1MKGUsdCwyKSxpPUwoZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gTSh0LGUpe3ZhciByPU4odCxlLDE0KSxuPU4odCxlLDE4KSxpPU4oZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gUyh0LGUpe3ZhciByPUwodCxlLDE0KSxuPUwodCxlLDE4KSxpPUwoZSx0LDkpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gRSh0LGUpe3ZhciByPU4odCxlLDEpLG49Tih0LGUsOCksaT1VKHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEEodCxlKXt2YXIgcj1MKHQsZSwxKSxuPUwodCxlLDgpLGk9eih0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBrKHQsZSl7dmFyIHI9Tih0LGUsMTkpLG49TihlLHQsMjkpLGk9VSh0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiB4KHQsZSl7dmFyIHI9TCh0LGUsMTkpLG49TChlLHQsMjkpLGk9eih0LGUsNiksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb312YXIgST1yKDQ5KSxCPUkudXRpbHMsTz1CLmFzc2VydCxSPUIucm90cjMyLFA9Qi5yb3RsMzIsVD1CLnN1bTMyLGo9Qi5zdW0zMl80LEM9Qi5zdW0zMl81LE49Qi5yb3RyNjRfaGksTD1CLnJvdHI2NF9sbyxVPUIuc2hyNjRfaGksej1CLnNocjY0X2xvLEQ9Qi5zdW02NCxxPUIuc3VtNjRfaGksRj1CLnN1bTY0X2xvLEs9Qi5zdW02NF80X2hpLEc9Qi5zdW02NF80X2xvLFY9Qi5zdW02NF81X2hpLEg9Qi5zdW02NF81X2xvLFg9SS5jb21tb24uQmxvY2tIYXNoLFk9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sVz1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLFo9WzE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDMzOTU0Njk3ODJdO0IuaW5oZXJpdHMobixYKSxlLnNoYTI1Nj1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MjU2LG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPWoocChyW24tMl0pLHJbbi03XSxsKHJbbi0xNV0pLHJbbi0xNl0pO3ZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxoPXRoaXMuaFs0XSxiPXRoaXMuaFs1XSx2PXRoaXMuaFs2XSx5PXRoaXMuaFs3XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBtPUMoeSxkKGgpLHMoaCxiLHYpLHRoaXMua1tuXSxyW25dKSxnPVQoYyhpKSx1KGksbyxhKSk7eT12LHY9YixiPWgsaD1UKGYsbSksZj1hLGE9byxvPWksaT1UKG0sZyl9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxoKSx0aGlzLmhbNV09VCh0aGlzLmhbNV0sYiksdGhpcy5oWzZdPVQodGhpcy5oWzZdLHYpLHRoaXMuaFs3XT1UKHRoaXMuaFs3XSx5KX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoaSxuKSxlLnNoYTIyND1pLGkuYmxvY2tTaXplPTUxMixpLm91dFNpemU9MjI0LGkuaG1hY1N0cmVuZ3RoPTE5MixpLnBhZExlbmd0aD02NCxpLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIil9LEIuaW5oZXJpdHMobyxYKSxlLnNoYTUxMj1vLG8uYmxvY2tTaXplPTEwMjQsby5vdXRTaXplPTUxMixvLmhtYWNTdHJlbmd0aD0xOTIsby5wYWRMZW5ndGg9MTI4LG8ucHJvdG90eXBlLl9wcmVwYXJlQmxvY2s9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDMyO24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bis9Mil7dmFyIGk9ayhyW24tNF0scltuLTNdKSxvPXgocltuLTRdLHJbbi0zXSksYT1yW24tMTRdLGY9cltuLTEzXSxzPUUocltuLTMwXSxyW24tMjldKSx1PUEocltuLTMwXSxyW24tMjldKSxoPXJbbi0zMl0sYz1yW24tMzFdO3Jbbl09SyhpLG8sYSxmLHMsdSxoLGMpLHJbbisxXT1HKGksbyxhLGYscyx1LGgsYyl9fSxvLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcHJlcGFyZUJsb2NrKHQsZSk7dmFyIHI9dGhpcy5XLG49dGhpcy5oWzBdLGk9dGhpcy5oWzFdLG89dGhpcy5oWzJdLGE9dGhpcy5oWzNdLGY9dGhpcy5oWzRdLHM9dGhpcy5oWzVdLHU9dGhpcy5oWzZdLGg9dGhpcy5oWzddLGM9dGhpcy5oWzhdLGQ9dGhpcy5oWzldLGw9dGhpcy5oWzEwXSxwPXRoaXMuaFsxMV0sYj10aGlzLmhbMTJdLEU9dGhpcy5oWzEzXSxBPXRoaXMuaFsxNF0saz10aGlzLmhbMTVdO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIHg9MDt4PHIubGVuZ3RoO3grPTIpe3ZhciBJPUEsQj1rLFI9TShjLGQpLFA9UyhjLGQpLFQ9dihjLGQsbCxwLGIsRSksaj15KGMsZCxsLHAsYixFKSxDPXRoaXMua1t4XSxOPXRoaXMua1t4KzFdLEw9clt4XSxVPXJbeCsxXSx6PVYoSSxCLFIsUCxULGosQyxOLEwsVSksSz1IKEksQixSLFAsVCxqLEMsTixMLFUpLEk9dyhuLGkpLEI9XyhuLGkpLFI9bShuLGksbyxhLGYscyksUD1nKG4saSxvLGEsZixzKSxHPXEoSSxCLFIsUCksWD1GKEksQixSLFApO0E9YixrPUUsYj1sLEU9cCxsPWMscD1kLGM9cSh1LGgseixLKSxkPUYoaCxoLHosSyksdT1mLGg9cyxmPW8scz1hLG89bixhPWksbj1xKHosSyxHLFgpLGk9Rih6LEssRyxYKX1EKHRoaXMuaCwwLG4saSksRCh0aGlzLmgsMixvLGEpLEQodGhpcy5oLDQsZixzKSxEKHRoaXMuaCw2LHUsaCksRCh0aGlzLmgsOCxjLGQpLEQodGhpcy5oLDEwLGwscCksRCh0aGlzLmgsMTIsYixFKSxEKHRoaXMuaCwxNCxBLGspfSxvLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhhLG8pLGUuc2hhMzg0PWEsYS5ibG9ja1NpemU9MTAyNCxhLm91dFNpemU9Mzg0LGEuaG1hY1N0cmVuZ3RoPTE5MixhLnBhZExlbmd0aD0xMjgsYS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIil9LEIuaW5oZXJpdHMoZixYKSxlLnNoYTE9ZixmLmJsb2NrU2l6ZT01MTIsZi5vdXRTaXplPTE2MCxmLmhtYWNTdHJlbmd0aD04MCxmLnBhZExlbmd0aD02NCxmLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwxNjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rKylyW25dPVAocltuLTNdXnJbbi04XV5yW24tMTRdXnJbbi0xNl0sMSk7Zm9yKHZhciBpPXRoaXMuaFswXSxvPXRoaXMuaFsxXSxhPXRoaXMuaFsyXSxmPXRoaXMuaFszXSxzPXRoaXMuaFs0XSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciB1PX5+KG4vMjApLGg9QyhQKGksNSksYih1LG8sYSxmKSxzLHJbbl0sWlt1XSk7cz1mLGY9YSxhPVAobywzMCksbz1pLGk9aH10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLHMpfSxmLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1mdW5jdGlvbiBpKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1mKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBvKHQpe3ZhciBlPXQ+Pj4yNHx0Pj4+OCY2NTI4MHx0PDw4JjE2NzExNjgwfCgyNTUmdCk8PDI0O3JldHVybiBlPj4+MH1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVwiXCIsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10W25dO1wibGl0dGxlXCI9PT1lJiYoaT1vKGkpKSxyKz1zKGkudG9TdHJpbmcoMTYpKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQpe3JldHVybiAxPT09dC5sZW5ndGg/XCIwXCIrdDp0fWZ1bmN0aW9uIHModCl7cmV0dXJuIDc9PT10Lmxlbmd0aD9cIjBcIit0OjY9PT10Lmxlbmd0aD9cIjAwXCIrdDo1PT09dC5sZW5ndGg/XCIwMDBcIit0OjQ9PT10Lmxlbmd0aD9cIjAwMDBcIit0OjM9PT10Lmxlbmd0aD9cIjAwMDAwXCIrdDoyPT09dC5sZW5ndGg/XCIwMDAwMDBcIit0OjE9PT10Lmxlbmd0aD9cIjAwMDAwMDBcIit0OnR9ZnVuY3Rpb24gdSh0LGUscixuKXt2YXIgaT1yLWU7eShpJTQ9PT0wKTtmb3IodmFyIG89bmV3IEFycmF5KGkvNCksYT0wLGY9ZTthPG8ubGVuZ3RoO2ErKyxmKz00KXt2YXIgcztzPVwiYmlnXCI9PT1uP3RbZl08PDI0fHRbZisxXTw8MTZ8dFtmKzJdPDw4fHRbZiszXTp0W2YrM108PDI0fHRbZisyXTw8MTZ8dFtmKzFdPDw4fHRbZl0sb1thXT1zPj4+MH1yZXR1cm4gb31mdW5jdGlvbiBoKHQsZSl7Zm9yKHZhciByPW5ldyBBcnJheSg0KnQubGVuZ3RoKSxuPTAsaT0wO248dC5sZW5ndGg7bisrLGkrPTQpe3ZhciBvPXRbbl07XCJiaWdcIj09PWU/KHJbaV09bz4+PjI0LHJbaSsxXT1vPj4+MTYmMjU1LHJbaSsyXT1vPj4+OCYyNTUscltpKzNdPTI1NSZvKToocltpKzNdPW8+Pj4yNCxyW2krMl09bz4+PjE2JjI1NSxyW2krMV09bz4+PjgmMjU1LHJbaV09MjU1Jm8pfXJldHVybiByfWZ1bmN0aW9uIGModCxlKXtyZXR1cm4gdD4+PmV8dDw8MzItZX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gbCh0LGUpe3JldHVybiB0K2U+Pj4wfWZ1bmN0aW9uIHAodCxlLHIpe3JldHVybiB0K2Urcj4+PjB9ZnVuY3Rpb24gYih0LGUscixuKXtyZXR1cm4gdCtlK3Irbj4+PjB9ZnVuY3Rpb24gdih0LGUscixuLGkpe3JldHVybiB0K2UrcituK2k+Pj4wfWZ1bmN0aW9uIHkodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfWZ1bmN0aW9uIG0odCxlLHIsbil7dmFyIGk9dFtlXSxvPXRbZSsxXSxhPW4rbz4+PjAsZj0oYTxuPzE6MCkrcitpO3RbZV09Zj4+PjAsdFtlKzFdPWF9ZnVuY3Rpb24gZyh0LGUscixuKXt2YXIgaT1lK24+Pj4wLG89KGk8ZT8xOjApK3QrcjtyZXR1cm4gbz4+PjB9ZnVuY3Rpb24gdyh0LGUscixuKXt2YXIgaT1lK247cmV0dXJuIGk+Pj4wfWZ1bmN0aW9uIF8odCxlLHIsbixpLG8sYSxmKXt2YXIgcz0wLHU9ZTt1PXUrbj4+PjAscys9dTxlPzE6MCx1PXUrbz4+PjAscys9dTxvPzE6MCx1PXUrZj4+PjAscys9dTxmPzE6MDt2YXIgaD10K3IraSthK3M7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIE0odCxlLHIsbixpLG8sYSxmKXt2YXIgcz1lK24rbytmO3JldHVybiBzPj4+MH1mdW5jdGlvbiBTKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPTAsYz1lO2M9YytuPj4+MCxoKz1jPGU/MTowLGM9YytvPj4+MCxoKz1jPG8/MTowLGM9YytmPj4+MCxoKz1jPGY/MTowLGM9Yyt1Pj4+MCxoKz1jPHU/MTowO3ZhciBkPXQrcitpK2ErcytoO3JldHVybiBkPj4+MH1mdW5jdGlvbiBFKHQsZSxyLG4saSxvLGEsZixzLHUpe3ZhciBoPWUrbitvK2YrdTtyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gQSh0LGUscil7dmFyIG49ZTw8MzItcnx0Pj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24gayh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9ZnVuY3Rpb24geCh0LGUscil7cmV0dXJuIHQ+Pj5yfWZ1bmN0aW9uIEkodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfXZhciBCPWUsTz1yKDIpO0IudG9BcnJheT1uLEIudG9IZXg9aSxCLmh0b25sPW8sQi50b0hleDMyPWEsQi56ZXJvMj1mLEIuemVybzg9cyxCLmpvaW4zMj11LEIuc3BsaXQzMj1oLEIucm90cjMyPWMsQi5yb3RsMzI9ZCxCLnN1bTMyPWwsQi5zdW0zMl8zPXAsQi5zdW0zMl80PWIsQi5zdW0zMl81PXYsQi5hc3NlcnQ9eSxCLmluaGVyaXRzPU8sZS5zdW02ND1tLGUuc3VtNjRfaGk9ZyxlLnN1bTY0X2xvPXcsZS5zdW02NF80X2hpPV8sZS5zdW02NF80X2xvPU0sZS5zdW02NF81X2hpPVMsZS5zdW02NF81X2xvPUUsZS5yb3RyNjRfaGk9QSxlLnJvdHI2NF9sbz1rLGUuc2hyNjRfaGk9eCxlLnNocjY0X2xvPUl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwMCksaT1uLmRlZmluZShcIlJTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMVwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMlwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MVwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MlwiKS5pbnQoKSx0aGlzLmtleShcImNvZWZmaWNpZW50XCIpLmludCgpKX0pO2UuUlNBUHJpdmF0ZUtleT1pO3ZhciBvPW4uZGVmaW5lKFwiUlNBUHVibGljS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSl9KTtlLlJTQVB1YmxpY0tleT1vO3ZhciBhPW4uZGVmaW5lKFwiU3ViamVjdFB1YmxpY0tleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQdWJsaWNLZXlcIikuYml0c3RyKCkpfSk7ZS5QdWJsaWNLZXk9YTt2YXIgZj1uLmRlZmluZShcIkFsZ29yaXRobUlkZW50aWZpZXJcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLm9iamlkKCksdGhpcy5rZXkoXCJub25lXCIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleShcImN1cnZlXCIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleShcInBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCkpLm9wdGlvbmFsKCkpfSkscz1uLmRlZmluZShcIlByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5Qcml2YXRlS2V5PXM7dmFyIHU9bi5kZWZpbmUoXCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImRlY3J5cHRcIikuc2VxKCkub2JqKHRoaXMua2V5KFwia2RlXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJrZGVwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwic2FsdFwiKS5vY3RzdHIoKSx0aGlzLmtleShcIml0ZXJzXCIpLmludCgpKSksdGhpcy5rZXkoXCJjaXBoZXJcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb1wiKS5vYmppZCgpLHRoaXMua2V5KFwiaXZcIikub2N0c3RyKCkpKSksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLkVuY3J5cHRlZFByaXZhdGVLZXk9dTt2YXIgaD1uLmRlZmluZShcIkRTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSx0aGlzLmtleShcInB1Yl9rZXlcIikuaW50KCksdGhpcy5rZXkoXCJwcml2X2tleVwiKS5pbnQoKSl9KTtlLkRTQVByaXZhdGVLZXk9aCxlLkRTQXBhcmFtPW4uZGVmaW5lKFwiRFNBcGFyYW1cIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgYz1uLmRlZmluZShcIkVDUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUtleVwiKS5vY3RzdHIoKSx0aGlzLmtleShcInBhcmFtZXRlcnNcIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoZCksdGhpcy5rZXkoXCJwdWJsaWNLZXlcIikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtlLkVDUHJpdmF0ZUtleT1jO3ZhciBkPW4uZGVmaW5lKFwiRUNQYXJhbWV0ZXJzXCIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO2Uuc2lnbmF0dXJlPW4uZGVmaW5lKFwic2lnbmF0dXJlXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInJcIikuaW50KCksdGhpcy5rZXkoXCJzXCIpLmludCgpKX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3ZhciBuPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxyP1xcbkRFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylcXHI/XFxuXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi9tLGk9L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuL20sbz0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4tLS0tLUVORCBcXDEgS0VZLS0tLS0kL20sYT1yKDE0OCksZj1yKDIxOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7dmFyIHMsdT10LnRvU3RyaW5nKCksaD11Lm1hdGNoKG4pO2lmKGgpe3ZhciBjPVwiYWVzXCIraFsxXSxkPW5ldyBlKGhbMl0sXCJoZXhcIiksbD1uZXcgZShoWzNdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKSxwPWEocixkLnNsaWNlKDAsOCkscGFyc2VJbnQoaFsxXSwxMCkpLmtleSxiPVtdLHY9Zi5jcmVhdGVEZWNpcGhlcml2KGMscCxkKTtiLnB1c2godi51cGRhdGUobCkpLGIucHVzaCh2LmZpbmFsKCkpLHM9ZS5jb25jYXQoYil9ZWxzZXt2YXIgeT11Lm1hdGNoKG8pO3M9bmV3IGUoeVsyXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIil9dmFyIG09dS5tYXRjaChpKVsxXStcIiBLRVlcIjtyZXR1cm57dGFnOm0sZGF0YTpzfX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3RoaXMubmFtZT10LHRoaXMuYm9keT1lLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX12YXIgaT1yKDEwMCksbz1yKDIpLGE9ZTthLmRlZmluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0LGUpfSxuLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9cigyNTEpLnJ1bkluVGhpc0NvbnRleHQoXCIoZnVuY3Rpb24gXCIrdGhpcy5uYW1lK1wiKGVudGl0eSkge1xcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxufSlcIil9Y2F0Y2godCl7ZT1mdW5jdGlvbih0KXt0aGlzLl9pbml0TmFtZWQodCl9fXJldHVybiBvKGUsdCksZS5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlKX0sbmV3IGUodGhpcyl9LG4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZGVjb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5kZWNvZGVyc1t0XSkpLHRoaXMuZGVjb2RlcnNbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoZSkuZGVjb2RlKHQscil9LG4ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZW5jb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5lbmNvZGVyc1t0XSkpLHRoaXMuZW5jb2RlcnNbdF19LG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZSkuZW5jb2RlKHQscil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPXQsci5wYXJlbnQ9ZXx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX12YXIgaT1yKDY4KS5SZXBvcnRlcixvPXIoNjgpLkVuY29kZXJCdWZmZXIsYT1yKDY4KS5EZWNvZGVyQnVmZmVyLGY9cig1MzgpLHM9W1wic2VxXCIsXCJzZXFvZlwiLFwic2V0XCIsXCJzZXRvZlwiLFwib2JqaWRcIixcImJvb2xcIixcImdlbnRpbWVcIixcInV0Y3RpbWVcIixcIm51bGxfXCIsXCJlbnVtXCIsXCJpbnRcIixcImJpdHN0clwiLFwiYm1wc3RyXCIsXCJjaGFyc3RyXCIsXCJnZW5zdHJcIixcImdyYXBoc3RyXCIsXCJpYTVzdHJcIixcImlzbzY0NnN0clwiLFwibnVtc3RyXCIsXCJvY3RzdHJcIixcInByaW50c3RyXCIsXCJ0NjFzdHJcIixcInVuaXN0clwiLFwidXRmOHN0clwiLFwidmlkZW9zdHJcIl0sdT1bXCJrZXlcIixcIm9ialwiLFwidXNlXCIsXCJvcHRpb25hbFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJkZWZcIixcImNob2ljZVwiLFwiYW55XCIsXCJjb250YWluc1wiXS5jb25jYXQocyksaD1bXCJfcGVla1RhZ1wiLFwiX2RlY29kZVRhZ1wiLFwiX3VzZVwiLFwiX2RlY29kZVN0clwiLFwiX2RlY29kZU9iamlkXCIsXCJfZGVjb2RlVGltZVwiLFwiX2RlY29kZU51bGxcIixcIl9kZWNvZGVJbnRcIixcIl9kZWNvZGVCb29sXCIsXCJfZGVjb2RlTGlzdFwiLFwiX2VuY29kZUNvbXBvc2l0ZVwiLFwiX2VuY29kZVN0clwiLFwiX2VuY29kZU9iamlkXCIsXCJfZW5jb2RlVGltZVwiLFwiX2VuY29kZU51bGxcIixcIl9lbmNvZGVJbnRcIixcIl9lbmNvZGVCb29sXCJdO3QuZXhwb3J0cz1uO3ZhciBjPVtcImVuY1wiLFwicGFyZW50XCIsXCJjaGlsZHJlblwiLFwidGFnXCIsXCJhcmdzXCIsXCJyZXZlcnNlQXJnc1wiLFwiY2hvaWNlXCIsXCJvcHRpb25hbFwiLFwiYW55XCIsXCJvYmpcIixcInVzZVwiLFwiYWx0ZXJlZFVzZVwiLFwia2V5XCIsXCJkZWZhdWx0XCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImNvbnRhaW5zXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPWUscn0sbi5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXNbZV09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gdC5jaGlsZHJlbi5wdXNoKHIpLHJbZV0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtmKG51bGw9PT1lLnBhcmVudCksdC5jYWxsKHRoaXMpLGUuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxmLmVxdWFsKGUuY2hpbGRyZW4ubGVuZ3RoLDEsXCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGRcIil9LG4ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PXIubGVuZ3RoJiYoZihudWxsPT09ZS5jaGlsZHJlbiksZS5jaGlsZHJlbj1yLHIuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09dC5sZW5ndGgmJihmKG51bGw9PT1lLmFyZ3MpLGUuYXJncz10LGUucmV2ZXJzZUFyZ3M9dC5tYXAoZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fHQuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIHQ7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9KSl9LGguZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IodCtcIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiBcIitlLmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gZihudWxsPT09ZS50YWcpLGUudGFnPXQsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLG4ucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLnVzZT10LHRoaXN9LG4ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0Lm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmRlZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZGVmYXVsdCksZS5kZWZhdWx0PXQsZS5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmV4cGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5pbXBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHQub2JqPSEwLDAhPT1lLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhlKSx0aGlzfSxuLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmtleSksZS5rZXk9dCx0aGlzfSxuLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQuYW55PSEwLHRoaXN9LG4ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuY2hvaWNlKSxlLmNob2ljZT10LHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLHRoaXN9LG4ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUuY29udGFpbnM9dCx0aGlzfSxuLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1yLnBhcmVudClyZXR1cm4gdC53cmFwUmVzdWx0KHIuY2hpbGRyZW5bMF0uX2RlY29kZSh0LGUpKTt2YXIgbj1yLmRlZmF1bHQsaT0hMCxvPW51bGw7aWYobnVsbCE9PXIua2V5JiYobz10LmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIGY9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD9mPXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/Zj1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKGY9ci50YWcpLG51bGwhPT1mfHxyLmFueSl7aWYoaT10aGlzLl9wZWVrVGFnKHQsZixyLmFueSksdC5pc0Vycm9yKGkpKXJldHVybiBpfWVsc2V7dmFyIHM9dC5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksaT0hMH1jYXRjaCh0KXtpPSExfXQucmVzdG9yZShzKX19dmFyIHU7aWYoci5vYmomJmkmJih1PXQuZW50ZXJPYmplY3QoKSksaSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBoPXRoaXMuX2RlY29kZVRhZyh0LHIuZXhwbGljaXQpO2lmKHQuaXNFcnJvcihoKSlyZXR1cm4gaDt0PWh9dmFyIGM9dC5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KXZhciBzPXQuc2F2ZSgpO3ZhciBkPXRoaXMuX2RlY29kZVRhZyh0LG51bGwhPT1yLmltcGxpY2l0P3IuaW1wbGljaXQ6ci50YWcsci5hbnkpO2lmKHQuaXNFcnJvcihkKSlyZXR1cm4gZDtyLmFueT9uPXQucmF3KHMpOnQ9ZH1pZihlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksYyx0Lmxlbmd0aCxcInRhZ2dlZFwiKSxlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksdC5vZmZzZXQsdC5sZW5ndGgsXCJjb250ZW50XCIpLG49ci5hbnk/bjpudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZihyLmFueXx8bnVsbCE9PXIuY2hvaWNlfHxudWxsPT09ci5jaGlsZHJlbnx8ci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuX2RlY29kZSh0LGUpfSksci5jb250YWlucyYmKFwib2N0c3RyXCI9PT1yLnRhZ3x8XCJiaXRzdHJcIj09PXIudGFnKSl7dmFyIGw9bmV3IGEobik7bj10aGlzLl9nZXRVc2Uoci5jb250YWlucyx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShsLGUpfX1yZXR1cm4gci5vYmomJmkmJihuPXQubGVhdmVPYmplY3QodSkpLG51bGw9PT1yLmtleXx8bnVsbD09PW4mJmkhPT0hMD9udWxsIT09byYmdC5leGl0S2V5KG8pOnQubGVhdmVLZXkobyxyLmtleSxuKSxufSxuLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVyblwic2VxXCI9PT10fHxcInNldFwiPT09dD9udWxsOlwic2Vxb2ZcIj09PXR8fFwic2V0b2ZcIj09PXQ/dGhpcy5fZGVjb2RlTGlzdChlLHQsbi5hcmdzWzBdLHIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2RlY29kZVN0cihlLHQscik6XCJvYmppZFwiPT09dCYmbi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKGUsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTpcIm9iamlkXCI9PT10P3RoaXMuX2RlY29kZU9iamlkKGUsbnVsbCxudWxsLHIpOlwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10P3RoaXMuX2RlY29kZVRpbWUoZSx0LHIpOlwibnVsbF9cIj09PXQ/dGhpcy5fZGVjb2RlTnVsbChlLHIpOlwiYm9vbFwiPT09dD90aGlzLl9kZWNvZGVCb29sKGUscik6XCJpbnRcIj09PXR8fFwiZW51bVwiPT09dD90aGlzLl9kZWNvZGVJbnQoZSxuLmFyZ3MmJm4uYXJnc1swXSxyKTpudWxsIT09bi51c2U/dGhpcy5fZ2V0VXNlKG4udXNlLGUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGUscik6ZS5lcnJvcihcInVua25vd24gdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gci51c2VEZWNvZGVyPXRoaXMuX3VzZSh0LGUpLGYobnVsbD09PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHIuaW1wbGljaXQhPT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuY2xvbmUoKSxyLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1yLmltcGxpY2l0KSxyLnVzZURlY29kZXJ9LG4ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1udWxsLGk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKHIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKG8pe3ZhciBhPXQuc2F2ZSgpLGY9ci5jaG9pY2Vbb107dHJ5e3ZhciBzPWYuX2RlY29kZSh0LGUpO2lmKHQuaXNFcnJvcihzKSlyZXR1cm4hMTtuPXt0eXBlOm8sdmFsdWU6c30saT0hMH1jYXRjaChlKXtyZXR1cm4gdC5yZXN0b3JlKGEpLCExfXJldHVybiEwfSx0aGlzKSxpP246dC5lcnJvcihcIkNob2ljZSBub3QgbWF0Y2hlZFwiKX0sbi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsdGhpcy5yZXBvcnRlcil9LG4ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT10KXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZSh0LGUscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksZSxyKSlyZXR1cm4gaX19LG4ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLnBhcmVudClyZXR1cm4gbi5jaGlsZHJlblswXS5fZW5jb2RlKHQsZXx8bmV3IGkpO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj1lLG4ub3B0aW9uYWwmJnZvaWQgMD09PXQpe2lmKG51bGw9PT1uLmRlZmF1bHQpcmV0dXJuO3Q9bi5kZWZhdWx0fXZhciBhPW51bGwsZj0hMTtpZihuLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7ZWxzZSBpZihuLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZSh0LGUpO2Vsc2UgaWYobi5jb250YWlucylhPXRoaXMuX2dldFVzZShuLmNvbnRhaW5zLHIpLl9lbmNvZGUodCxlKSxmPSEwO2Vsc2UgaWYobi5jaGlsZHJlbilhPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKFwibnVsbF9cIj09PXIuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHIuX2VuY29kZShudWxsLGUsdCk7aWYobnVsbD09PXIuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleVwiKTt2YXIgbj1lLmVudGVyS2V5KHIuX2Jhc2VTdGF0ZS5rZXkpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0XCIpO3ZhciBpPXIuX2VuY29kZSh0W3IuX2Jhc2VTdGF0ZS5rZXldLGUsdCk7cmV0dXJuIGUubGVhdmVLZXkobiksaX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpO2Vsc2UgaWYoXCJzZXFvZlwiPT09bi50YWd8fFwic2V0b2ZcIj09PW4udGFnKXtpZighbi5hcmdzfHwxIT09bi5hcmdzLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIlRvbyBtYW55IGFyZ3MgZm9yIDogXCIrbi50YWcpO2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmVycm9yKFwic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheVwiKTt2YXIgcz10aGlzLmNsb25lKCk7cy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSx0KS5fZW5jb2RlKHIsZSl9LHMpKX1lbHNlIG51bGwhPT1uLnVzZT9vPXRoaXMuX2dldFVzZShuLnVzZSxyKS5fZW5jb2RlKHQsZSk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKG4udGFnLHQpLGY9ITApO3ZhciBvO2lmKCFuLmFueSYmbnVsbD09PW4uY2hvaWNlKXt2YXIgdT1udWxsIT09bi5pbXBsaWNpdD9uLmltcGxpY2l0Om4udGFnLGg9bnVsbD09PW4uaW1wbGljaXQ/XCJ1bml2ZXJzYWxcIjpcImNvbnRleHRcIjtudWxsPT09dT9udWxsPT09bi51c2UmJmUuZXJyb3IoXCJUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKClcIik6bnVsbD09PW4udXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUodSxmLGgsYSkpfXJldHVybiBudWxsIT09bi5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG4uZXhwbGljaXQsITEsXCJjb250ZXh0XCIsbykpLG99LG4ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1yLmNob2ljZVt0LnR5cGVdO3JldHVybiBufHxmKCExLHQudHlwZStcIiBub3QgZm91bmQgaW4gXCIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoci5jaG9pY2UpKSksbi5fZW5jb2RlKHQudmFsdWUsZSl9LG4ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QodCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihlLHQpO2lmKFwib2JqaWRcIj09PXQmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoXCJvYmppZFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxudWxsLG51bGwpO2lmKFwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKGUsdCk7aWYoXCJudWxsX1wiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKFwiaW50XCI9PT10fHxcImVudW1cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUludChlLHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoXCJib29sXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGUpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KHQpfSxuLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczp0fHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGkodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnJldGhyb3coZSl9dmFyIG89cigyKTtlLlJlcG9ydGVyPW4sbi5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl9LG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dC5vYmoscGF0aExlbjp0LnBhdGgubGVuZ3RofX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2Uub2JqPXQub2JqLGUucGF0aD1lLnBhdGguc2xpY2UoMCx0LnBhdGhMZW4pfSxuLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godCl9LG4ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC0xKX0sbi5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHQpLG51bGwhPT1uLm9iaiYmKG4ub2JqW2VdPXIpfSxuLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKFwiL1wiKX0sbi5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLGU9dC5vYmo7cmV0dXJuIHQub2JqPXt9LGV9LG4ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGUscj1lLm9iajtyZXR1cm4gZS5vYmo9dCxyfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX3JlcG9ydGVyU3RhdGUsbj10IGluc3RhbmNlb2YgaTtpZihlPW4/dDpuZXcgaShyLnBhdGgubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK0pTT04uc3RyaW5naWZ5KHQpK1wiXVwifSkuam9pbihcIlwiKSx0Lm1lc3NhZ2V8fHQsdC5zdGFjayksIXIub3B0aW9ucy5wYXJ0aWFsKXRocm93IGU7cmV0dXJuIG58fHIuZXJyb3JzLnB1c2goZSksZX0sbi5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBlLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih0KT9udWxsOnQsZXJyb3JzOmUuZXJyb3JzfTp0fSxvKGksRXJyb3IpLGkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odCl7aWYodGhpcy5tZXNzYWdlPXQrXCIgYXQ6IFwiKyh0aGlzLnBhdGh8fFwiKHNoYWxsb3cpXCIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGkpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMTUpO2UudGFnQ2xhc3M9ezA6XCJ1bml2ZXJzYWxcIiwxOlwiYXBwbGljYXRpb25cIiwyOlwiY29udGV4dFwiLDM6XCJwcml2YXRlXCJ9LGUudGFnQ2xhc3NCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZ0NsYXNzKSxlLnRhZz17MDpcImVuZFwiLDE6XCJib29sXCIsMjpcImludFwiLDM6XCJiaXRzdHJcIiw0Olwib2N0c3RyXCIsNTpcIm51bGxfXCIsNjpcIm9iamlkXCIsNzpcIm9iakRlc2NcIiw4OlwiZXh0ZXJuYWxcIiw5OlwicmVhbFwiLDEwOlwiZW51bVwiLDExOlwiZW1iZWRcIiwxMjpcInV0ZjhzdHJcIiwxMzpcInJlbGF0aXZlT2lkXCIsMTY6XCJzZXFcIiwxNzpcInNldFwiLDE4OlwibnVtc3RyXCIsMTk6XCJwcmludHN0clwiLDIwOlwidDYxc3RyXCIsXG4yMTpcInZpZGVvc3RyXCIsMjI6XCJpYTVzdHJcIiwyMzpcInV0Y3RpbWVcIiwyNDpcImdlbnRpbWVcIiwyNTpcImdyYXBoc3RyXCIsMjY6XCJpc282NDZzdHJcIiwyNzpcImdlbnN0clwiLDI4OlwidW5pc3RyXCIsMjk6XCJjaGFyc3RyXCIsMzA6XCJibXBzdHJcIn0sZS50YWdCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZyl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjE2KSxuLnBlbT1yKDUzNSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe2EuY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMSkuQnVmZmVyLGE9cigyMTYpO2kobixhKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC50b1N0cmluZygpLnNwbGl0KC9bXFxyXFxuXSsvZyksbj1lLmxhYmVsLnRvVXBwZXJDYXNlKCksaT0vXi0tLS0tKEJFR0lOfEVORCkgKFteLV0rKS0tLS0tJC8sZj0tMSxzPS0xLHU9MDt1PHIubGVuZ3RoO3UrKyl7dmFyIGg9clt1XS5tYXRjaChpKTtpZihudWxsIT09aCYmaFsyXT09PW4pe2lmKGYhPT0tMSl7aWYoXCJFTkRcIiE9PWhbMV0pYnJlYWs7cz11O2JyZWFrfWlmKFwiQkVHSU5cIiE9PWhbMV0pYnJlYWs7Zj11fX1pZihmPT09LTF8fHM9PT0tMSl0aHJvdyBuZXcgRXJyb3IoXCJQRU0gc2VjdGlvbiBub3QgZm91bmQgZm9yOiBcIituKTt2YXIgYz1yLnNsaWNlKGYrMSxzKS5qb2luKFwiXCIpO2MucmVwbGFjZSgvW15hLXowLTlcXCtcXC89XSsvZ2ksXCJcIik7dmFyIGQ9bmV3IG8oYyxcImJhc2U2NFwiKTtyZXR1cm4gYS5wcm90b3R5cGUuZGVjb2RlLmNhbGwodGhpcyxkLGUpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMTcpLG4ucGVtPXIoNTM3KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7by5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigyMTcpO2kobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9by5wcm90b3R5cGUuZW5jb2RlLmNhbGwodGhpcyx0KSxuPXIudG9TdHJpbmcoXCJiYXNlNjRcIiksaT1bXCItLS0tLUJFR0lOIFwiK2UubGFiZWwrXCItLS0tLVwiXSxhPTA7YTxuLmxlbmd0aDthKz02NClpLnB1c2gobi5zbGljZShhLGErNjQpKTtyZXR1cm4gaS5wdXNoKFwiLS0tLS1FTkQgXCIrZS5sYWJlbCtcIi0tLS0tXCIpLGkuam9pbihcIlxcblwiKX19LGZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9dC5leHBvcnRzPXIsci5lcXVhbD1mdW5jdGlvbih0LGUscil7aWYodCE9ZSl0aHJvdyBuZXcgRXJyb3Iocnx8XCJBc3NlcnRpb24gZmFpbGVkOiBcIit0K1wiICE9IFwiK2UpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHMuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dFsxNV0scj0tMTsrK3I8ZTspaWYodFtyKygxNi1lKV0hPT1lKXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTYhPT1lKXJldHVybiB0LnNsaWNlKDAsMTYtZSl9ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG89Y1tlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKGJbby5tb2RlXSxyLGksITApOlwiYXV0aFwiPT09by50eXBlP25ldyBsKGJbby5tb2RlXSxyLGksITApOm5ldyBuKGJbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1jW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1wKGUsITEsci5rZXksci5pdik7cmV0dXJuIGEodCxuLmtleSxuLml2KX12YXIgcz1yKDEwMSksdT1yKDEwMyksaD1yKDIpLGM9cigxNDcpLGQ9cigyMjYpLGw9cigyMTgpLHA9cigxNDgpO2gobix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspbj10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBvKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHQpKTtpZih0KXRocm93IG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZTtpZih0KXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX07dmFyIGI9e0VDQjpyKDIyNCksQ0JDOnIoMjIwKSxDRkI6cigyMjEpLENGQjg6cigyMjMpLENGQjE6cigyMjIpLE9GQjpyKDIyNSksQ1RSOnIoMTAyKSxHQ006cigxMDIpfTtlLmNyZWF0ZURlY2lwaGVyPWYsZS5jcmVhdGVEZWNpcGhlcml2PWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8ocy5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2NpcGhlcj1uZXcgZi5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKGUscixpKXt2YXIgbz1oW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQocFtvLm1vZGVdLHIsaSk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwocFtvLm1vZGVdLHIsaSk6bmV3IG4ocFtvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gYSh0LGUpe3ZhciByPWhbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPWMoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gbyh0LG4ua2V5LG4uaXYpfXZhciBmPXIoMTAxKSxzPXIoMTAzKSx1PXIoMiksaD1yKDE0NyksYz1yKDE0OCksZD1yKDIyNiksbD1yKDIxOCk7dShuLHMpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQoKTspbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiB0PXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQpLHRoaXMuX2NpcGhlci5zY3J1YigpLHQ7aWYoXCIxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMFwiIT09dC50b1N0cmluZyhcImhleFwiKSl0aHJvdyB0aGlzLl9jaXBoZXIuc2NydWIoKSxuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNSl7dmFyIHQ9dGhpcy5jYWNoZS5zbGljZSgwLDE2KTtyZXR1cm4gdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0fXJldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2Zvcih2YXIgZT0xNi10aGlzLmNhY2hlLmxlbmd0aCxyPW5ldyB0KGUpLG49LTE7KytuPGU7KXIud3JpdGVVSW50OChlLG4pO3ZhciBpPXQuY29uY2F0KFt0aGlzLmNhY2hlLHJdKTtyZXR1cm4gaX07dmFyIHA9e0VDQjpyKDIyNCksQ0JDOnIoMjIwKSxDRkI6cigyMjEpLENGQjg6cigyMjMpLENGQjE6cigyMjIpLE9GQjpyKDIyNSksQ1RSOnIoMTAyKSxHQ006cigxMDIpfTtlLmNyZWF0ZUNpcGhlcml2PW8sZS5jcmVhdGVDaXBoZXI9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0KXt0aGlzLmg9dCx0aGlzLnN0YXRlPW5ldyBlKDE2KSx0aGlzLnN0YXRlLmZpbGwoMCksdGhpcy5jYWNoZT1uZXcgZShcIlwiKX1mdW5jdGlvbiBuKHQpe3JldHVyblt0LnJlYWRVSW50MzJCRSgwKSx0LnJlYWRVSW50MzJCRSg0KSx0LnJlYWRVSW50MzJCRSg4KSx0LnJlYWRVSW50MzJCRSgxMildfWZ1bmN0aW9uIGkodCl7dD10Lm1hcChvKTt2YXIgcj1uZXcgZSgxNik7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0WzBdLDApLHIud3JpdGVVSW50MzJCRSh0WzFdLDQpLHIud3JpdGVVSW50MzJCRSh0WzJdLDgpLHIud3JpdGVVSW50MzJCRSh0WzNdLDEyKSxyfWZ1bmN0aW9uIG8odCl7dmFyIGUscjtyZXR1cm4gZT10PnN8fHQ8MD8ocj1NYXRoLmFicyh0KSVzLHQ8MD9zLXI6cik6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuW3RbMF1eZVswXSx0WzFdXmVbMV0sdFsyXV5lWzJdLHRbM11eZVszXV19dmFyIGY9bmV3IGUoMTYpO2YuZmlsbCgwKSx0LmV4cG9ydHM9cixyLnByb3RvdHlwZS5naGFzaD1mdW5jdGlvbih0KXtmb3IodmFyIGU9LTE7KytlPHQubGVuZ3RoOyl0aGlzLnN0YXRlW2VdXj10W2VdO3RoaXMuX211bHRpcGx5KCl9LHIucHJvdG90eXBlLl9tdWx0aXBseT1mdW5jdGlvbigpe2Zvcih2YXIgdCxlLHIsbz1uKHRoaXMuaCksZj1bMCwwLDAsMF0scz0tMTsrK3M8MTI4Oyl7Zm9yKGU9MCE9PSh0aGlzLnN0YXRlW35+KHMvOCldJjE8PDctcyU4KSxlJiYoZj1hKGYsbykpLHI9MCE9PSgxJm9bM10pLHQ9Mzt0PjA7dC0tKW9bdF09b1t0XT4+PjF8KDEmb1t0LTFdKTw8MzE7b1swXT1vWzBdPj4+MSxyJiYob1swXT1vWzBdXjIyNTw8MjQpfXRoaXMuc3RhdGU9aShmKX0sci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuY2FjaGU9ZS5jb25jYXQoW3RoaXMuY2FjaGUsdF0pO2Zvcih2YXIgcjt0aGlzLmNhY2hlLmxlbmd0aD49MTY7KXI9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHRoaXMuZ2hhc2gocil9LHIucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMuY2FjaGUubGVuZ3RoJiZ0aGlzLmdoYXNoKGUuY29uY2F0KFt0aGlzLmNhY2hlLGZdLDE2KSksdGhpcy5naGFzaChpKFswLHQsMCxyXSkpLHRoaXMuc3RhdGV9O3ZhciBzPU1hdGgucG93KDIsMzIpfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSxyLG4pe3ZhciBhPXYoZSk7aWYoYS5jdXJ2ZSl7aWYoXCJlY2RzYVwiIT09bil0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwcml2YXRlIGtleSB0eXBlXCIpO3JldHVybiBpKHQsYSl9aWYoXCJkc2FcIj09PWEudHlwZSl7aWYoXCJkc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtyZXR1cm4gbyh0LGEscil9aWYoXCJyc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtmb3IodmFyIGY9YS5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxzPVswLDFdO3QubGVuZ3RoK3MubGVuZ3RoKzE8Zjspcy5wdXNoKDI1NSk7cy5wdXNoKDApO2Zvcih2YXIgdT0tMTsrK3U8dC5sZW5ndGg7KXMucHVzaCh0W3VdKTt2YXIgaD1sKHMsYSk7cmV0dXJuIGh9ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXBbci5jdXJ2ZS5qb2luKFwiLlwiKV07aWYoIW4pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBjdXJ2ZSBcIityLmN1cnZlLmpvaW4oXCIuXCIpKTt2YXIgaT1uZXcgbShuKSxvPWkuZ2VuS2V5UGFpcigpO28uX2ltcG9ydFByaXZhdGUoci5wcml2YXRlS2V5KTt2YXIgYT1vLnNpZ24odCk7cmV0dXJuIG5ldyBlKGEudG9ERVIoKSl9ZnVuY3Rpb24gbyh0LGUscil7Zm9yKHZhciBuLGk9ZS5wYXJhbXMucHJpdl9rZXksbz1lLnBhcmFtcy5wLHU9ZS5wYXJhbXMucSxkPWUucGFyYW1zLmcsbD1uZXcgeSgwKSxwPXModCx1KS5tb2QodSksYj0hMSx2PWYoaSx1LHQscik7Yj09PSExOyluPWgodSx2LHIpLGw9YyhkLG4sbyx1KSxiPW4uaW52bSh1KS5pbXVsKHAuYWRkKGkubXVsKGwpKSkubW9kKHUpLGIuY21wbigwKXx8KGI9ITEsbD1uZXcgeSgwKSk7cmV0dXJuIGEobCxiKX1mdW5jdGlvbiBhKHQscil7dD10LnRvQXJyYXkoKSxyPXIudG9BcnJheSgpLDEyOCZ0WzBdJiYodD1bMF0uY29uY2F0KHQpKSwxMjgmclswXSYmKHI9WzBdLmNvbmNhdChyKSk7dmFyIG49dC5sZW5ndGgrci5sZW5ndGgrNCxpPVs0OCxuLDIsdC5sZW5ndGhdO3JldHVybiBpPWkuY29uY2F0KHQsWzIsci5sZW5ndGhdLHIpLG5ldyBlKGkpfWZ1bmN0aW9uIGYodCxyLG4saSl7aWYodD1uZXcgZSh0LnRvQXJyYXkoKSksdC5sZW5ndGg8ci5ieXRlTGVuZ3RoKCkpe3ZhciBvPW5ldyBlKHIuYnl0ZUxlbmd0aCgpLXQubGVuZ3RoKTtvLmZpbGwoMCksdD1lLmNvbmNhdChbbyx0XSl9dmFyIGE9bi5sZW5ndGgsZj11KG4scikscz1uZXcgZShhKTtzLmZpbGwoMSk7dmFyIGg9bmV3IGUoYSk7cmV0dXJuIGguZmlsbCgwKSxoPWQoaSxoKS51cGRhdGUocykudXBkYXRlKG5ldyBlKFswXSkpLnVwZGF0ZSh0KS51cGRhdGUoZikuZGlnZXN0KCkscz1kKGksaCkudXBkYXRlKHMpLmRpZ2VzdCgpLGg9ZChpLGgpLnVwZGF0ZShzKS51cGRhdGUobmV3IGUoWzFdKSkudXBkYXRlKHQpLnVwZGF0ZShmKS5kaWdlc3QoKSxzPWQoaSxoKS51cGRhdGUocykuZGlnZXN0KCkse2s6aCx2OnN9fWZ1bmN0aW9uIHModCxlKXt2YXIgcj1uZXcgeSh0KSxuPSh0Lmxlbmd0aDw8MyktZS5iaXRMZW5ndGgoKTtyZXR1cm4gbj4wJiZyLmlzaHJuKG4pLHJ9ZnVuY3Rpb24gdSh0LHIpe3Q9cyh0LHIpLHQ9dC5tb2Qocik7dmFyIG49bmV3IGUodC50b0FycmF5KCkpO2lmKG4ubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgaT1uZXcgZShyLmJ5dGVMZW5ndGgoKS1uLmxlbmd0aCk7aS5maWxsKDApLG49ZS5jb25jYXQoW2ksbl0pfXJldHVybiBufWZ1bmN0aW9uIGgodCxyLG4pe3ZhciBpLG87ZG97Zm9yKGk9bmV3IGUoXCJcIik7OCppLmxlbmd0aDx0LmJpdExlbmd0aCgpOylyLnY9ZChuLHIuaykudXBkYXRlKHIudikuZGlnZXN0KCksaT1lLmNvbmNhdChbaSxyLnZdKTtvPXMoaSx0KSxyLms9ZChuLHIuaykudXBkYXRlKHIudikudXBkYXRlKG5ldyBlKFswXSkpLmRpZ2VzdCgpLHIudj1kKG4sci5rKS51cGRhdGUoci52KS5kaWdlc3QoKX13aGlsZShvLmNtcCh0KSE9PS0xKTtyZXR1cm4gb31mdW5jdGlvbiBjKHQsZSxyLG4pe3JldHVybiB0LnRvUmVkKHkubW9udChyKSkucmVkUG93KGUpLmZyb21SZWQoKS5tb2Qobil9dmFyIGQ9cigxNDkpLGw9cig1MDcpLHA9cigyMTIpLGI9cigxOSksdj1yKDIxMykseT1yKDE4KSxtPWIuZWM7dC5leHBvcnRzPW4sdC5leHBvcnRzLmdldEtleT1mLHQuZXhwb3J0cy5tYWtlS2V5PWh9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sYSl7dmFyIGY9dShuKTtpZihcImVjXCI9PT1mLnR5cGUpe2lmKFwiZWNkc2FcIiE9PWEpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO3JldHVybiBpKHQscixmKX1pZihcImRzYVwiPT09Zi50eXBlKXtpZihcImRzYVwiIT09YSl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7cmV0dXJuIG8odCxyLGYpfWlmKFwicnNhXCIhPT1hKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtmb3IodmFyIHM9Zi5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxjPVsxXSxkPTA7ci5sZW5ndGgrYy5sZW5ndGgrMjxzOyljLnB1c2goMjU1KSxkKys7Yy5wdXNoKDApO2Zvcih2YXIgbD0tMTsrK2w8ci5sZW5ndGg7KWMucHVzaChyW2xdKTtjPW5ldyBlKGMpO3ZhciBwPWgubW9udChmLm1vZHVsdXMpO3Q9bmV3IGgodCkudG9SZWQocCksdD10LnJlZFBvdyhuZXcgaChmLnB1YmxpY0V4cG9uZW50KSksdD1uZXcgZSh0LmZyb21SZWQoKS50b0FycmF5KCkpO3ZhciBiPTA7Zm9yKGQ8OCYmKGI9MSkscz1NYXRoLm1pbih0Lmxlbmd0aCxjLmxlbmd0aCksdC5sZW5ndGghPT1jLmxlbmd0aCYmKGI9MSksbD0tMTsrK2w8czspYnw9dFtsXV5jW2xdO3JldHVybiAwPT09Yn1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj1mW3IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbihcIi5cIildO2lmKCFuKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY3VydmUgXCIrci5kYXRhLmFsZ29yaXRobS5jdXJ2ZS5qb2luKFwiLlwiKSk7dmFyIGk9bmV3IGMobiksbz1yLmRhdGEuc3ViamVjdFByaXZhdGVLZXkuZGF0YTtyZXR1cm4gaS52ZXJpZnkoZSx0LG8pfWZ1bmN0aW9uIG8odCxlLHIpe3ZhciBuPXIuZGF0YS5wLGk9ci5kYXRhLnEsbz1yLmRhdGEuZyxmPXIuZGF0YS5wdWJfa2V5LHM9dS5zaWduYXR1cmUuZGVjb2RlKHQsXCJkZXJcIiksYz1zLnMsZD1zLnI7YShjLGkpLGEoZCxpKTt2YXIgbD1oLm1vbnQobikscD1jLmludm0oaSksYj1vLnRvUmVkKGwpLnJlZFBvdyhuZXcgaChlKS5tdWwocCkubW9kKGkpKS5mcm9tUmVkKCkubXVsKGYudG9SZWQobCkucmVkUG93KGQubXVsKHApLm1vZChpKSkuZnJvbVJlZCgpKS5tb2QobikubW9kKGkpO3JldHVybiFiLmNtcChkKX1mdW5jdGlvbiBhKHQsZSl7aWYodC5jbXBuKDApPD0wKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2lnXCIpO2lmKHQuY21wKGUpPj1lKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgc2lnXCIpfXZhciBmPXIoMjEyKSxzPXIoMTkpLHU9cigyMTMpLGg9cigxOCksYz1zLmVjO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3RoaXMuY3VydmVUeXBlPWZbdF0sdGhpcy5jdXJ2ZVR5cGV8fCh0aGlzLmN1cnZlVHlwZT17bmFtZTp0fSksdGhpcy5jdXJ2ZT1uZXcgby5lYyh0aGlzLmN1cnZlVHlwZS5uYW1lKSx0aGlzLmtleXM9dm9pZCAwfWZ1bmN0aW9uIGkodCxyLG4pe0FycmF5LmlzQXJyYXkodCl8fCh0PXQudG9BcnJheSgpKTt2YXIgaT1uZXcgZSh0KTtpZihuJiZpLmxlbmd0aDxuKXt2YXIgbz1uZXcgZShuLWkubGVuZ3RoKTtvLmZpbGwoMCksaT1lLmNvbmNhdChbbyxpXSl9cmV0dXJuIHI/aS50b1N0cmluZyhyKTppfXZhciBvPXIoMjIpLGE9cigzMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbih0KX07dmFyIGY9e3NlY3AyNTZrMTp7bmFtZTpcInNlY3AyNTZrMVwiLGJ5dGVMZW5ndGg6MzJ9LHNlY3AyMjRyMTp7bmFtZTpcInAyMjRcIixieXRlTGVuZ3RoOjI4fSxwcmltZTI1NnYxOntuYW1lOlwicDI1NlwiLGJ5dGVMZW5ndGg6MzJ9LHByaW1lMTkydjE6e25hbWU6XCJwMTkyXCIsYnl0ZUxlbmd0aDoyNH0sZWQyNTUxOTp7bmFtZTpcImVkMjU1MTlcIixieXRlTGVuZ3RoOjMyfSxzZWNwMzg0cjE6e25hbWU6XCJwMzg0XCIsYnl0ZUxlbmd0aDo0OH0sc2VjcDUyMXIxOntuYW1lOlwicDUyMVwiLGJ5dGVMZW5ndGg6NjZ9fTtmLnAyMjQ9Zi5zZWNwMjI0cjEsZi5wMjU2PWYuc2VjcDI1NnIxPWYucHJpbWUyNTZ2MSxmLnAxOTI9Zi5zZWNwMTkycjE9Zi5wcmltZTE5MnYxLGYucDM4ND1mLnNlY3AzODRyMSxmLnA1MjE9Zi5zZWNwNTIxcjEsbi5wcm90b3R5cGUuZ2VuZXJhdGVLZXlzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMua2V5cz10aGlzLmN1cnZlLmdlbktleVBhaXIoKSx0aGlzLmdldFB1YmxpY0tleSh0LGUpfSxuLnByb3RvdHlwZS5jb21wdXRlU2VjcmV0PWZ1bmN0aW9uKHQscixuKXtyPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpO3ZhciBvPXRoaXMuY3VydmUua2V5RnJvbVB1YmxpYyh0KS5nZXRQdWJsaWMoKSxhPW8ubXVsKHRoaXMua2V5cy5nZXRQcml2YXRlKCkpLmdldFgoKTtyZXR1cm4gaShhLG4sdGhpcy5jdXJ2ZVR5cGUuYnl0ZUxlbmd0aCl9LG4ucHJvdG90eXBlLmdldFB1YmxpY0tleT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMua2V5cy5nZXRQdWJsaWMoXCJjb21wcmVzc2VkXCI9PT1lLCEwKTtyZXR1cm5cImh5YnJpZFwiPT09ZSYmKHJbci5sZW5ndGgtMV0lMj9yWzBdPTc6clswXT02KSxpKHIsdCl9LG4ucHJvdG90eXBlLmdldFByaXZhdGVLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcy5rZXlzLmdldFByaXZhdGUoKSx0KX0sbi5wcm90b3R5cGUuc2V0UHVibGljS2V5PWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5rZXlzLl9pbXBvcnRQdWJsaWModCksdGhpc30sbi5wcm90b3R5cGUuc2V0UHJpdmF0ZUtleT1mdW5jdGlvbih0LHIpe3I9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSk7dmFyIG49bmV3IGEodCk7cmV0dXJuIG49bi50b1N0cmluZygxNiksdGhpcy5rZXlzLl9pbXBvcnRQcml2YXRlKG4pLHRoaXN9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnA9bmV3IG8oZS5wLDE2KSx0aGlzLnJlZD1lLnByaW1lP28ucmVkKGUucHJpbWUpOm8ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbygwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG8oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBvKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ZS5uJiZuZXcgbyhlLm4sMTYpLHRoaXMuZz1lLmcmJnRoaXMucG9pbnRGcm9tSlNPTihlLmcsZS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpO3ZhciByPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFyfHxyLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIGkodCxlKXt0aGlzLmN1cnZlPXQsdGhpcy50eXBlPWUsdGhpcy5wcmVjb21wdXRlZD1udWxsfXZhciBvPXIoMzApLGE9cigyMiksZj1hLnV0aWxzLHM9Zi5nZXROQUYsdT1mLmdldEpTRixoPWYuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHQsZSl7aCh0LnByZWNvbXB1dGVkKTt2YXIgcj10Ll9nZXREb3VibGVzKCksbj1zKGUsMSksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09PTA/MjoxKTtpLz0zO2Zvcih2YXIgbz1bXSxhPTA7YTxuLmxlbmd0aDthKz1yLnN0ZXApe2Zvcih2YXIgZj0wLGU9YStyLnN0ZXAtMTtlPj1hO2UtLSlmPShmPDwxKStuW2VdO28ucHVzaChmKX1mb3IodmFyIHU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGM9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGQ9aTtkPjA7ZC0tKXtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTtmPT09ZD9jPWMubWl4ZWRBZGQoci5wb2ludHNbYV0pOmY9PT0tZCYmKGM9Yy5taXhlZEFkZChyLnBvaW50c1thXS5uZWcoKSkpfXU9dS5hZGQoYyl9cmV0dXJuIHUudG9QKCl9LG4ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9NCxuPXQuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxvPXMoZSxyKSxhPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxmPW8ubGVuZ3RoLTE7Zj49MDtmLS0pe2Zvcih2YXIgZT0wO2Y+PTAmJjA9PT1vW2ZdO2YtLSllKys7aWYoZj49MCYmZSsrLGE9YS5kYmxwKGUpLGY8MClicmVhazt2YXIgdT1vW2ZdO2goMCE9PXUpLGE9XCJhZmZpbmVcIj09PXQudHlwZT91PjA/YS5taXhlZEFkZChpW3UtMT4+MV0pOmEubWl4ZWRBZGQoaVstdS0xPj4xXS5uZWcoKSk6dT4wP2EuYWRkKGlbdS0xPj4xXSk6YS5hZGQoaVstdS0xPj4xXS5uZWcoKSl9cmV0dXJuXCJhZmZpbmVcIj09PXQudHlwZT9hLnRvUCgpOmF9LG4ucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXRoaXMuX3duYWZUMSxhPXRoaXMuX3duYWZUMixmPXRoaXMuX3duYWZUMyxoPTAsYz0wO2M8bjtjKyspe3ZhciBkPWVbY10sbD1kLl9nZXROQUZQb2ludHModCk7b1tjXT1sLnduZCxhW2NdPWwucG9pbnRzfWZvcih2YXIgYz1uLTE7Yz49MTtjLT0yKXt2YXIgcD1jLTEsYj1jO2lmKDE9PT1vW3BdJiYxPT09b1tiXSl7dmFyIHY9W2VbcF0sbnVsbCxudWxsLGVbYl1dOzA9PT1lW3BdLnkuY21wKGVbYl0ueSk/KHZbMV09ZVtwXS5hZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTowPT09ZVtwXS55LmNtcChlW2JdLnkucmVkTmVnKCkpPyh2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLmFkZChlW2JdLm5lZygpKSk6KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpO3ZhciB5PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLG09dShyW3BdLHJbYl0pO2g9TWF0aC5tYXgobVswXS5sZW5ndGgsaCksZltwXT1uZXcgQXJyYXkoaCksZltiXT1uZXcgQXJyYXkoaCk7Zm9yKHZhciBnPTA7ZzxoO2crKyl7dmFyIHc9MHxtWzBdW2ddLF89MHxtWzFdW2ddO2ZbcF1bZ109eVszKih3KzEpKyhfKzEpXSxmW2JdW2ddPTAsYVtwXT12fX1lbHNlIGZbcF09cyhyW3BdLG9bcF0pLGZbYl09cyhyW2JdLG9bYl0pLGg9TWF0aC5tYXgoZltwXS5sZW5ndGgsaCksaD1NYXRoLm1heChmW2JdLmxlbmd0aCxoKX1mb3IodmFyIE09dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFM9dGhpcy5fd25hZlQ0LGM9aDtjPj0wO2MtLSl7Zm9yKHZhciBFPTA7Yz49MDspe2Zvcih2YXIgQT0hMCxnPTA7ZzxuO2crKylTW2ddPTB8ZltnXVtjXSwwIT09U1tnXSYmKEE9ITEpO2lmKCFBKWJyZWFrO0UrKyxjLS19aWYoYz49MCYmRSsrLE09TS5kYmxwKEUpLGM8MClicmVhaztmb3IodmFyIGc9MDtnPG47ZysrKXt2YXIgZCxrPVNbZ107MCE9PWsmJihrPjA/ZD1hW2ddW2stMT4+MV06azwwJiYoZD1hW2ddWy1rLTE+PjFdLm5lZygpKSxNPVwiYWZmaW5lXCI9PT1kLnR5cGU/TS5taXhlZEFkZChkKTpNLmFkZChkKSl9fWZvcih2YXIgYz0wO2M8bjtjKyspYVtjXT1udWxsO3JldHVybiBpP006TS50b1AoKX0sbi5CYXNlUG9pbnQ9aSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0saS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXt0PWYudG9BcnJheSh0LGUpO3ZhciByPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT10WzBdfHw2PT09dFswXXx8Nz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09MipyKXs2PT09dFswXT9oKHRbdC5sZW5ndGgtMV0lMj09PTApOjc9PT10WzBdJiZoKHRbdC5sZW5ndGgtMV0lMj09PTEpO3ZhciBuPXRoaXMucG9pbnQodC5zbGljZSgxLDErciksdC5zbGljZSgxK3IsMSsyKnIpKTtyZXR1cm4gbn1pZigoMj09PXRbMF18fDM9PT10WzBdKSYmdC5sZW5ndGgtMT09PXIpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh0LnNsaWNlKDEsMStyKSwzPT09dFswXSk7dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwb2ludCBmb3JtYXRcIil9LGkucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5jb2RlKHQsITApfSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkscj10aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIixlKTtyZXR1cm4gdD9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQocik6WzRdLmNvbmNhdChyLHRoaXMuZ2V0WSgpLnRvQXJyYXkoXCJiZVwiLGUpKX0saS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuZW5jb2RlKHRoaXMuX2VuY29kZShlKSx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBlPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gZS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLGUuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsdCksZS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPWUsdGhpc30saS5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIGU9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhZSYmZS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHQuYml0TGVuZ3RoKCkrMSkvZS5zdGVwKX0saS5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHI9W3RoaXNdLG49dGhpcyxpPTA7aTxlO2krPXQpe2Zvcih2YXIgbz0wO288dDtvKyspbj1uLmRibCgpO3IucHVzaChuKX1yZXR1cm57c3RlcDp0LHBvaW50czpyfX0saS5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBlPVt0aGlzXSxyPSgxPDx0KS0xLG49MT09PXI/bnVsbDp0aGlzLmRibCgpLGk9MTtpPHI7aSsrKWVbaV09ZVtpLTFdLmFkZChuKTtyZXR1cm57d25kOnQscG9pbnRzOmV9fSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMudHdpc3RlZD0xIT09KDB8dC5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmKDB8dC5hKT09PS0xLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSx1LmNhbGwodGhpcyxcImVkd2FyZHNcIix0KSx0aGlzLmE9bmV3IGYodC5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgZih0LmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IGYodC5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksaCghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09PSgwfHQuYyl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3UuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGYoZSwxNiksdGhpcy55PW5ldyBmKHIsMTYpLHRoaXMuej1uP25ldyBmKG4sMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1pJiZuZXcgZihpLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX12YXIgbz1yKDEwNCksYT1yKDIyKSxmPXIoMzApLHM9cigyKSx1PW8uYmFzZSxoPWEudXRpbHMuYXNzZXJ0O3Mobix1KSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fbXVsQT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tT25lQT90LnJlZE5lZygpOnRoaXMuYS5yZWRNdWwodCl9LG4ucHJvdG90eXBlLl9tdWxDPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm9uZUM/dDp0aGlzLmMucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIHRoaXMucG9pbnQodCxlLHIsbil9LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXRoaXMuYzIucmVkU3ViKHRoaXMuYS5yZWRNdWwocikpLGk9dGhpcy5vbmUucmVkU3ViKHRoaXMuYzIucmVkTXVsKHRoaXMuZCkucmVkTXVsKHIpKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKSxhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBzPWEuZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFzfHwhZSYmcykmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQodCxhKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWT1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49ci5yZWRTdWIodGhpcy5vbmUpLGk9ci5yZWRNdWwodGhpcy5kKS5yZWRBZGQodGhpcy5vbmUpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpO2lmKDA9PT1vLmNtcCh0aGlzLnplcm8pKXtpZihlKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIHRoaXMucG9pbnQodGhpcy56ZXJvLHQpfXZhciBhPW8ucmVkU3FydCgpO2lmKDAhPT1hLnJlZFNxcigpLnJlZFN1YihvKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiBhLmlzT2RkKCkhPT1lJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KGEsdCl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiEwO3Qubm9ybWFsaXplKCk7dmFyIGU9dC54LnJlZFNxcigpLHI9dC55LnJlZFNxcigpLG49ZS5yZWRNdWwodGhpcy5hKS5yZWRBZGQociksaT10aGlzLmMyLnJlZE11bCh0aGlzLm9uZS5yZWRBZGQodGhpcy5kLnJlZE11bChlKS5yZWRNdWwocikpKTtyZXR1cm4gMD09PW4uY21wKGkpfSxzKGksdS5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCl7cmV0dXJuIGkuZnJvbUpTT04odGhpcyx0KX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIsbil7cmV0dXJuIG5ldyBpKHRoaXMsdCxlLHIsbil9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV0sZVsyXSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMueC5jbXBuKDApJiYwPT09dGhpcy55LmNtcCh0aGlzLnopfSxpLnByb3RvdHlwZS5fZXh0RGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZFNxcigpLGU9dGhpcy55LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpO3I9ci5yZWRJQWRkKHIpO3ZhciBuPXRoaXMuY3VydmUuX211bEEodCksaT10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKGUpLG89bi5yZWRBZGQoZSksYT1vLnJlZFN1YihyKSxmPW4ucmVkU3ViKGUpLHM9aS5yZWRNdWwoYSksdT1vLnJlZE11bChmKSxoPWkucmVkTXVsKGYpLGM9YS5yZWRNdWwobyk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1LGMsaCl9LGkucHJvdG90eXBlLl9wcm9qRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG49dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLGk9dGhpcy54LnJlZFNxcigpLG89dGhpcy55LnJlZFNxcigpO2lmKHRoaXMuY3VydmUudHdpc3RlZCl7dmFyIGE9dGhpcy5jdXJ2ZS5fbXVsQShpKSxmPWEucmVkQWRkKG8pO2lmKHRoaXMuek9uZSl0PW4ucmVkU3ViKGkpLnJlZFN1YihvKS5yZWRNdWwoZi5yZWRTdWIodGhpcy5jdXJ2ZS50d28pKSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkU3FyKCkucmVkU3ViKGYpLnJlZFN1YihmKTtlbHNle3ZhciBzPXRoaXMuei5yZWRTcXIoKSx1PWYucmVkU3ViKHMpLnJlZElTdWIocyk7dD1uLnJlZFN1YihpKS5yZWRJU3ViKG8pLnJlZE11bCh1KSxlPWYucmVkTXVsKGEucmVkU3ViKG8pKSxyPWYucmVkTXVsKHUpfX1lbHNle3ZhciBhPWkucmVkQWRkKG8pLHM9dGhpcy5jdXJ2ZS5fbXVsQyh0aGlzLmMucmVkTXVsKHRoaXMueikpLnJlZFNxcigpLHU9YS5yZWRTdWIocykucmVkU3ViKHMpO3Q9dGhpcy5jdXJ2ZS5fbXVsQyhuLnJlZElTdWIoYSkpLnJlZE11bCh1KSxlPXRoaXMuY3VydmUuX211bEMoYSkucmVkTXVsKGkucmVkSVN1YihvKSkscj1hLnJlZE11bCh1KX1yZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0LGUscil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0RGJsKCk6dGhpcy5fcHJvakRibCgpfSxpLnByb3RvdHlwZS5fZXh0QWRkPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMueS5yZWRTdWIodGhpcy54KS5yZWRNdWwodC55LnJlZFN1Yih0LngpKSxyPXRoaXMueS5yZWRBZGQodGhpcy54KS5yZWRNdWwodC55LnJlZEFkZCh0LngpKSxuPXRoaXMudC5yZWRNdWwodGhpcy5jdXJ2ZS5kZCkucmVkTXVsKHQudCksaT10aGlzLnoucmVkTXVsKHQuei5yZWRBZGQodC56KSksbz1yLnJlZFN1YihlKSxhPWkucmVkU3ViKG4pLGY9aS5yZWRBZGQobikscz1yLnJlZEFkZChlKSx1PW8ucmVkTXVsKGEpLGg9Zi5yZWRNdWwocyksYz1vLnJlZE11bChzKSxkPWEucmVkTXVsKGYpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHUsaCxkLGMpfSxpLnByb3RvdHlwZS5fcHJvakFkZD1mdW5jdGlvbih0KXt2YXIgZSxyLG49dGhpcy56LnJlZE11bCh0LnopLGk9bi5yZWRTcXIoKSxvPXRoaXMueC5yZWRNdWwodC54KSxhPXRoaXMueS5yZWRNdWwodC55KSxmPXRoaXMuY3VydmUuZC5yZWRNdWwobykucmVkTXVsKGEpLHM9aS5yZWRTdWIoZiksdT1pLnJlZEFkZChmKSxoPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRNdWwodC54LnJlZEFkZCh0LnkpKS5yZWRJU3ViKG8pLnJlZElTdWIoYSksYz1uLnJlZE11bChzKS5yZWRNdWwoaCk7cmV0dXJuIHRoaXMuY3VydmUudHdpc3RlZD8oZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIodGhpcy5jdXJ2ZS5fbXVsQShvKSkpLHI9cy5yZWRNdWwodSkpOihlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1YihvKSkscj10aGlzLmN1cnZlLl9tdWxDKHMpLnJlZE11bCh1KSksdGhpcy5jdXJ2ZS5wb2ludChjLGUscil9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dDp0LmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuZXh0ZW5kZWQ/dGhpcy5fZXh0QWRkKHQpOnRoaXMuX3Byb2pBZGQodCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5faGFzRG91Ymxlcyh0KT90aGlzLmN1cnZlLl9maXhlZE5hZk11bCh0aGlzLHQpOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITEpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5jdXJ2ZS5fd25hZk11bEFkZCgxLFt0aGlzLGVdLFt0LHJdLDIsITApfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtpZih0aGlzLnpPbmUpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy56LnJlZEludm0oKTtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodCksdGhpcy55PXRoaXMueS5yZWRNdWwodCksdGhpcy50JiYodGhpcy50PXRoaXMudC5yZWRNdWwodCkpLHRoaXMuej10aGlzLmN1cnZlLm9uZSx0aGlzLnpPbmU9ITAsdGhpc30saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE5lZygpLHRoaXMueSx0aGlzLnosdGhpcy50JiZ0aGlzLnQucmVkTmVnKCkpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy54LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZ2V0WT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8MD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSkmJjA9PT10aGlzLmdldFkoKS5jbXAodC5nZXRZKCkpfSxpLnByb3RvdHlwZS5lcVhUb1A9ZnVuY3Rpb24odCl7dmFyIGU9dC50b1JlZCh0aGlzLmN1cnZlLnJlZCkucmVkTXVsKHRoaXMueik7aWYoMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITA7Zm9yKHZhciByPXQuY2xvbmUoKSxuPXRoaXMuY3VydmUucmVkTi5yZWRNdWwodGhpcy56KTs7KXtpZihyLmlhZGQodGhpcy5jdXJ2ZS5uKSxyLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKGUucmVkSUFkZChuKSwwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMH1yZXR1cm4hMX0saS5wcm90b3R5cGUudG9QPWkucHJvdG90eXBlLm5vcm1hbGl6ZSxpLnByb3RvdHlwZS5taXhlZEFkZD1pLnByb3RvdHlwZS5hZGR9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3MuY2FsbCh0aGlzLFwibW9udFwiLHQpLHRoaXMuYT1uZXcgYSh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IGEodC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5pND1uZXcgYSg0KS50b1JlZCh0aGlzLnJlZCkucmVkSW52bSgpLHRoaXMudHdvPW5ldyBhKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmEyND10aGlzLmk0LnJlZE11bCh0aGlzLmEucmVkQWRkKHRoaXMudHdvKSl9ZnVuY3Rpb24gaSh0LGUscil7cy5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJwcm9qZWN0aXZlXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMuej10aGlzLmN1cnZlLnplcm8pOih0aGlzLng9bmV3IGEoZSwxNiksdGhpcy56PW5ldyBhKHIsMTYpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSl9dmFyIG89cigxMDQpLGE9cigzMCksZj1yKDIpLHM9by5iYXNlLHU9cigyMiksaD11LnV0aWxzO2YobixzKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10Lm5vcm1hbGl6ZSgpLngscj1lLnJlZFNxcigpLG49ci5yZWRNdWwoZSkucmVkQWRkKHIucmVkTXVsKHRoaXMuYSkpLnJlZEFkZChlKSxpPW4ucmVkU3FydCgpO3JldHVybiAwPT09aS5yZWRTcXIoKS5jbXAobil9LGYoaSxzLkJhc2VQb2ludCksbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5wb2ludChoLnRvQXJyYXkodCxlKSwxKX0sbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24oKXt9LGkucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsdGhpcy5jdXJ2ZS5wLmJ5dGVMZW5ndGgoKSl9LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IGkodCxlWzBdLGVbMV18fHQub25lKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuei5jbXBuKDApfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkQWRkKHRoaXMueiksZT10LnJlZFNxcigpLHI9dGhpcy54LnJlZFN1Yih0aGlzLnopLG49ci5yZWRTcXIoKSxpPWUucmVkU3ViKG4pLG89ZS5yZWRNdWwobiksYT1pLnJlZE11bChuLnJlZEFkZCh0aGlzLmN1cnZlLmEyNC5yZWRNdWwoaSkpKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3Qgc3VwcG9ydGVkIG9uIE1vbnRnb21lcnkgY3VydmVcIil9LGkucHJvdG90eXBlLmRpZmZBZGQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLngucmVkQWRkKHRoaXMueiksbj10aGlzLngucmVkU3ViKHRoaXMueiksaT10LngucmVkQWRkKHQueiksbz10LngucmVkU3ViKHQueiksYT1vLnJlZE11bChyKSxmPWkucmVkTXVsKG4pLHM9ZS56LnJlZE11bChhLnJlZEFkZChmKS5yZWRTcXIoKSksdT1lLngucmVkTXVsKGEucmVkSVN1YihmKS5yZWRTcXIoKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocyx1KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10LmNsb25lKCkscj10aGlzLG49dGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpLGk9dGhpcyxvPVtdOzAhPT1lLmNtcG4oMCk7ZS5pdXNocm4oMSkpby5wdXNoKGUuYW5kbG4oMSkpO2Zvcih2YXIgYT1vLmxlbmd0aC0xO2E+PTA7YS0tKTA9PT1vW2FdPyhyPXIuZGlmZkFkZChuLGkpLG49bi5kYmwoKSk6KG49ci5kaWZmQWRkKG4saSkscj1yLmRibCgpKTtyZXR1cm4gbn0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5qdW1sQWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuZ2V0WCgpLmNtcCh0LmdldFgoKSl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpc30saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtoLmNhbGwodGhpcyxcInNob3J0XCIsdCksdGhpcy5hPW5ldyBzKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgcyh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnRpbnY9dGhpcy50d28ucmVkSW52bSgpLHRoaXMuemVyb0E9MD09PXRoaXMuYS5mcm9tUmVkKCkuY21wbigwKSx0aGlzLnRocmVlQT0wPT09dGhpcy5hLmZyb21SZWQoKS5zdWIodGhpcy5wKS5jbXBuKC0zKSx0aGlzLmVuZG89dGhpcy5fZ2V0RW5kb21vcnBoaXNtKHQpLHRoaXMuX2VuZG9XbmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX2VuZG9XbmFmVDI9bmV3IEFycmF5KDQpfWZ1bmN0aW9uIGkodCxlLHIsbil7aC5CYXNlUG9pbnQuY2FsbCh0aGlzLHQsXCJhZmZpbmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9bnVsbCx0aGlzLnk9bnVsbCx0aGlzLmluZj0hMCk6KHRoaXMueD1uZXcgcyhlLDE2KSx0aGlzLnk9bmV3IHMociwxNiksbiYmKHRoaXMueC5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCksdGhpcy55LmZvcmNlUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuaW5mPSExKX1mdW5jdGlvbiBvKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiamFjb2JpYW5cIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUub25lLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9bmV3IHMoMCkpOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLHRoaXMuej1uZXcgcyhuLDE2KSksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56T25lPXRoaXMuej09PXRoaXMuY3VydmUub25lfXZhciBhPXIoMTA0KSxmPXIoMjIpLHM9cigzMCksdT1yKDIpLGg9YS5iYXNlLGM9Zi51dGlscy5hc3NlcnQ7dShuLGgpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24odCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGUscjtpZih0LmJldGEpZT1uZXcgcyh0LmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBuPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2U9blswXS5jbXAoblsxXSk8MD9uWzBdOm5bMV0sZT1lLnRvUmVkKHRoaXMucmVkKX1pZih0LmxhbWJkYSlyPW5ldyBzKHQubGFtYmRhLDE2KTtlbHNle3ZhciBpPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGlbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChlKSk/cj1pWzBdOihyPWlbMV0sYygwPT09dGhpcy5nLm11bChyKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpKSl9dmFyIG87cmV0dXJuIG89dC5iYXNpcz90LmJhc2lzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57YTpuZXcgcyh0LmEsMTYpLGI6bmV3IHModC5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocikse2JldGE6ZSxsYW1iZGE6cixiYXNpczpvfX19LG4ucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXRoaXMucD90aGlzLnJlZDpzLm1vbnQodCkscj1uZXcgcygyKS50b1JlZChlKS5yZWRJbnZtKCksbj1yLnJlZE5lZygpLGk9bmV3IHMoMykudG9SZWQoZSkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChyKSxvPW4ucmVkQWRkKGkpLmZyb21SZWQoKSxhPW4ucmVkU3ViKGkpLmZyb21SZWQoKTtyZXR1cm5bbyxhXX0sbi5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksbyxhLGYsdSxoLGM9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxkPXQsbD10aGlzLm4uY2xvbmUoKSxwPW5ldyBzKDEpLGI9bmV3IHMoMCksdj1uZXcgcygwKSx5PW5ldyBzKDEpLG09MDswIT09ZC5jbXBuKDApOyl7dmFyIGc9bC5kaXYoZCk7dT1sLnN1YihnLm11bChkKSksaD12LnN1YihnLm11bChwKSk7dmFyIHc9eS5zdWIoZy5tdWwoYikpO2lmKCFuJiZ1LmNtcChjKTwwKWU9Zi5uZWcoKSxyPXAsbj11Lm5lZygpLGk9aDtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7Zj11LGw9ZCxkPXUsdj1wLHA9aCx5PWIsYj13fW89dS5uZWcoKSxhPWg7dmFyIF89bi5zcXIoKS5hZGQoaS5zcXIoKSksTT1vLnNxcigpLmFkZChhLnNxcigpKTtyZXR1cm4gTS5jbXAoXyk+PTAmJihvPWUsYT1yKSxuLm5lZ2F0aXZlJiYobj1uLm5lZygpLGk9aS5uZWcoKSksby5uZWdhdGl2ZSYmKG89by5uZWcoKSxhPWEubmVnKCkpLFt7YTpuLGI6aX0se2E6byxiOmF9XX0sbi5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVuZG8uYmFzaXMscj1lWzBdLG49ZVsxXSxpPW4uYi5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxvPXIuYi5uZWcoKS5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxhPWkubXVsKHIuYSksZj1vLm11bChuLmEpLHM9aS5tdWwoci5iKSx1PW8ubXVsKG4uYiksaD10LnN1YihhKS5zdWIoZiksYz1zLmFkZCh1KS5uZWcoKTtyZXR1cm57azE6aCxrMjpjfX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IHModCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKHQucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBpPW4uZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFpfHwhZSYmaSkmJihuPW4ucmVkTmVnKCkpLHRoaXMucG9pbnQodCxuKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pbmYpcmV0dXJuITA7dmFyIGU9dC54LHI9dC55LG49dGhpcy5hLnJlZE11bChlKSxpPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09ci5yZWRTcXIoKS5yZWRJU3ViKGkpLmNtcG4oMCl9LG4ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuX2VuZG9XbmFmVDEsaT10aGlzLl9lbmRvV25hZlQyLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dGhpcy5fZW5kb1NwbGl0KGVbb10pLGY9dFtvXSxzPWYuX2dldEJldGEoKTthLmsxLm5lZ2F0aXZlJiYoYS5rMS5pbmVnKCksZj1mLm5lZyghMCkpLGEuazIubmVnYXRpdmUmJihhLmsyLmluZWcoKSxzPXMubmVnKCEwKSksblsyKm9dPWYsblsyKm8rMV09cyxpWzIqb109YS5rMSxpWzIqbysxXT1hLmsyfWZvcih2YXIgdT10aGlzLl93bmFmTXVsQWRkKDEsbixpLDIqbyxyKSxoPTA7aDwyKm87aCsrKW5baF09bnVsbCxpW2hdPW51bGw7cmV0dXJuIHV9LHUoaSxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCxlKX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciB0PXRoaXMucHJlY29tcHV0ZWQ7aWYodCYmdC5iZXRhKXJldHVybiB0LmJldGE7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKHQpe3ZhciByPXRoaXMuY3VydmUsbj1mdW5jdGlvbih0KXtyZXR1cm4gci5wb2ludCh0LngucmVkTXVsKHIuZW5kby5iZXRhKSx0LnkpfTt0LmJldGE9ZSxlLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOnQubmFmJiZ7d25kOnQubmFmLnduZCxwb2ludHM6dC5uYWYucG9pbnRzLm1hcChuKX0sZG91Ymxlczp0LmRvdWJsZXMmJntzdGVwOnQuZG91Ymxlcy5zdGVwLHBvaW50czp0LmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5wb2ludChlWzBdLGVbMV0scil9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPUpTT04ucGFyc2UoZSkpO3ZhciBpPXQucG9pbnQoZVswXSxlWzFdLHIpO2lmKCFlWzJdKXJldHVybiBpO3ZhciBvPWVbMl07cmV0dXJuIGkucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltpXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAobikpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbaV0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAobikpfX0saX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdDtpZih0LmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKHQpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEodCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcCh0LngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy55LnJlZFN1Yih0LnkpOzAhPT1lLmNtcG4oMCkmJihlPWUucmVkTXVsKHRoaXMueC5yZWRTdWIodC54KS5yZWRJbnZtKCkpKTt2YXIgcj1lLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHQueCksbj1lLnJlZE11bCh0aGlzLngucmVkU3ViKHIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLmN1cnZlLmEscj10aGlzLngucmVkU3FyKCksbj10LnJlZEludm0oKSxpPXIucmVkQWRkKHIpLnJlZElBZGQocikucmVkSUFkZChlKS5yZWRNdWwobiksbz1pLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxhPWkucmVkTXVsKHRoaXMueC5yZWRTdWIobykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5ldyBzKHQsMTYpLHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFt0XSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGkpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMil9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGksITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMiwhMCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8dGhpcy5pbmY9PT10LmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcCh0LngpJiYwPT09dGhpcy55LmNtcCh0LnkpKX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYodCYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIHI9dGhpcy5wcmVjb21wdXRlZCxuPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZygpfTtlLnByZWNvbXB1dGVkPXtuYWY6ci5uYWYmJnt3bmQ6ci5uYWYud25kLHBvaW50czpyLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnIuZG91YmxlcyYme3N0ZXA6ci5kb3VibGVzLnN0ZXAscG9pbnRzOnIuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9LGkucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSk7cmV0dXJuIHR9LFxudShvLGguQmFzZVBvaW50KSxuLnByb3RvdHlwZS5qcG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgbyh0aGlzLHQsZSxyKX0sby5wcm90b3R5cGUudG9QPWZ1bmN0aW9uKCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgdD10aGlzLnoucmVkSW52bSgpLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRNdWwoZSksbj10aGlzLnkucmVkTXVsKGUpLnJlZE11bCh0KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChyLG4pfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSx0aGlzLnopfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQ7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dC56LnJlZFNxcigpLHI9dGhpcy56LnJlZFNxcigpLG49dGhpcy54LnJlZE11bChlKSxpPXQueC5yZWRNdWwociksbz10aGlzLnkucmVkTXVsKGUucmVkTXVsKHQueikpLGE9dC55LnJlZE11bChyLnJlZE11bCh0aGlzLnopKSxmPW4ucmVkU3ViKGkpLHM9by5yZWRTdWIoYSk7aWYoMD09PWYuY21wbigwKSlyZXR1cm4gMCE9PXMuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgdT1mLnJlZFNxcigpLGg9dS5yZWRNdWwoZiksYz1uLnJlZE11bCh1KSxkPXMucmVkU3FyKCkucmVkSUFkZChoKS5yZWRJU3ViKGMpLnJlZElTdWIoYyksbD1zLnJlZE11bChjLnJlZElTdWIoZCkpLnJlZElTdWIoby5yZWRNdWwoaCkpLHA9dGhpcy56LnJlZE11bCh0LnopLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoZCxsLHApfSxvLnByb3RvdHlwZS5taXhlZEFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdC50b0ooKTtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpczt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10aGlzLngsbj10LngucmVkTXVsKGUpLGk9dGhpcy55LG89dC55LnJlZE11bChlKS5yZWRNdWwodGhpcy56KSxhPXIucmVkU3ViKG4pLGY9aS5yZWRTdWIobyk7aWYoMD09PWEuY21wbigwKSlyZXR1cm4gMCE9PWYuY21wbigwKT90aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk6dGhpcy5kYmwoKTt2YXIgcz1hLnJlZFNxcigpLHU9cy5yZWRNdWwoYSksaD1yLnJlZE11bChzKSxjPWYucmVkU3FyKCkucmVkSUFkZCh1KS5yZWRJU3ViKGgpLnJlZElTdWIoaCksZD1mLnJlZE11bChoLnJlZElTdWIoYykpLnJlZElTdWIoaS5yZWRNdWwodSkpLGw9dGhpcy56LnJlZE11bChhKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiB0aGlzO2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO2lmKCF0KXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMuY3VydmUuemVyb0F8fHRoaXMuY3VydmUudGhyZWVBKXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9Zm9yKHZhciBuPXRoaXMuY3VydmUuYSxpPXRoaXMuY3VydmUudGludixvPXRoaXMueCxhPXRoaXMueSxmPXRoaXMueixzPWYucmVkU3FyKCkucmVkU3FyKCksdT1hLnJlZEFkZChhKSxyPTA7cjx0O3IrKyl7dmFyIGg9by5yZWRTcXIoKSxjPXUucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9aC5yZWRBZGQoaCkucmVkSUFkZChoKS5yZWRJQWRkKG4ucmVkTXVsKHMpKSxwPW8ucmVkTXVsKGMpLGI9bC5yZWRTcXIoKS5yZWRJU3ViKHAucmVkQWRkKHApKSx2PXAucmVkSVN1YihiKSx5PWwucmVkTXVsKHYpO3k9eS5yZWRJQWRkKHkpLnJlZElTdWIoZCk7dmFyIG09dS5yZWRNdWwoZik7cisxPHQmJihzPXMucmVkTXVsKGQpKSxvPWIsZj1tLHU9eX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobyx1LnJlZE11bChpKSxmKX0sby5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS56ZXJvQT90aGlzLl96ZXJvRGJsKCk6dGhpcy5jdXJ2ZS50aHJlZUE/dGhpcy5fdGhyZWVEYmwoKTp0aGlzLl9kYmwoKX0sby5wcm90b3R5cGUuX3plcm9EYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpLHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLHQ9cyxlPWYucmVkTXVsKGEucmVkSVN1YihzKSkucmVkSVN1Yih1KSxyPXRoaXMueS5yZWRBZGQodGhpcy55KX1lbHNle3ZhciBoPXRoaXMueC5yZWRTcXIoKSxjPXRoaXMueS5yZWRTcXIoKSxkPWMucmVkU3FyKCksbD10aGlzLngucmVkQWRkKGMpLnJlZFNxcigpLnJlZElTdWIoaCkucmVkSVN1YihkKTtsPWwucmVkSUFkZChsKTt2YXIgcD1oLnJlZEFkZChoKS5yZWRJQWRkKGgpLGI9cC5yZWRTcXIoKSx2PWQucmVkSUFkZChkKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx0PWIucmVkSVN1YihsKS5yZWRJU3ViKGwpLGU9cC5yZWRNdWwobC5yZWRJU3ViKHQpKS5yZWRJU3ViKHYpLHI9dGhpcy55LnJlZE11bCh0aGlzLnopLHI9ci5yZWRJQWRkKHIpfXJldHVybiB0aGlzLmN1cnZlLmpwb2ludCh0LGUscil9LG8ucHJvdG90eXBlLl90aHJlZURibD1mdW5jdGlvbigpe3ZhciB0LGUscjtpZih0aGlzLnpPbmUpe3ZhciBuPXRoaXMueC5yZWRTcXIoKSxpPXRoaXMueS5yZWRTcXIoKSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGkpLnJlZFNxcigpLnJlZElTdWIobikucmVkSVN1YihvKTthPWEucmVkSUFkZChhKTt2YXIgZj1uLnJlZEFkZChuKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5jdXJ2ZS5hKSxzPWYucmVkU3FyKCkucmVkSVN1YihhKS5yZWRJU3ViKGEpO3Q9czt2YXIgdT1vLnJlZElBZGQobyk7dT11LnJlZElBZGQodSksdT11LnJlZElBZGQodSksZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLnoucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD10aGlzLngucmVkTXVsKGMpLGw9dGhpcy54LnJlZFN1YihoKS5yZWRNdWwodGhpcy54LnJlZEFkZChoKSk7bD1sLnJlZEFkZChsKS5yZWRJQWRkKGwpO3ZhciBwPWQucmVkSUFkZChkKTtwPXAucmVkSUFkZChwKTt2YXIgYj1wLnJlZEFkZChwKTt0PWwucmVkU3FyKCkucmVkSVN1YihiKSxyPXRoaXMueS5yZWRBZGQodGhpcy56KS5yZWRTcXIoKS5yZWRJU3ViKGMpLnJlZElTdWIoaCk7dmFyIHY9Yy5yZWRTcXIoKTt2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSx2PXYucmVkSUFkZCh2KSxlPWwucmVkTXVsKHAucmVkSVN1Yih0KSkucmVkSVN1Yih2KX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jdXJ2ZS5hLGU9dGhpcy54LHI9dGhpcy55LG49dGhpcy56LGk9bi5yZWRTcXIoKS5yZWRTcXIoKSxvPWUucmVkU3FyKCksYT1yLnJlZFNxcigpLGY9by5yZWRBZGQobykucmVkSUFkZChvKS5yZWRJQWRkKHQucmVkTXVsKGkpKSxzPWUucmVkQWRkKGUpO3M9cy5yZWRJQWRkKHMpO3ZhciB1PXMucmVkTXVsKGEpLGg9Zi5yZWRTcXIoKS5yZWRJU3ViKHUucmVkQWRkKHUpKSxjPXUucmVkSVN1YihoKSxkPWEucmVkU3FyKCk7ZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCksZD1kLnJlZElBZGQoZCk7dmFyIGw9Zi5yZWRNdWwoYykucmVkSVN1YihkKSxwPXIucmVkQWRkKHIpLnJlZE11bChuKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoaCxsLHApfSxvLnByb3RvdHlwZS50cnBsPWZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VydmUuemVyb0EpcmV0dXJuIHRoaXMuZGJsKCkuYWRkKHRoaXMpO3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPWUucmVkU3FyKCksaT10LnJlZEFkZCh0KS5yZWRJQWRkKHQpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoZSkucmVkU3FyKCkucmVkSVN1Yih0KS5yZWRJU3ViKG4pO2E9YS5yZWRJQWRkKGEpLGE9YS5yZWRBZGQoYSkucmVkSUFkZChhKSxhPWEucmVkSVN1YihvKTt2YXIgZj1hLnJlZFNxcigpLHM9bi5yZWRJQWRkKG4pO3M9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpLHM9cy5yZWRJQWRkKHMpO3ZhciB1PWkucmVkSUFkZChhKS5yZWRTcXIoKS5yZWRJU3ViKG8pLnJlZElTdWIoZikucmVkSVN1YihzKSxoPWUucmVkTXVsKHUpO2g9aC5yZWRJQWRkKGgpLGg9aC5yZWRJQWRkKGgpO3ZhciBjPXRoaXMueC5yZWRNdWwoZikucmVkSVN1YihoKTtjPWMucmVkSUFkZChjKSxjPWMucmVkSUFkZChjKTt2YXIgZD10aGlzLnkucmVkTXVsKHUucmVkTXVsKHMucmVkSVN1Yih1KSkucmVkSVN1YihhLnJlZE11bChmKSkpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPXRoaXMuei5yZWRBZGQoYSkucmVkU3FyKCkucmVkSVN1YihyKS5yZWRJU3ViKGYpO3JldHVybiB0aGlzLmN1cnZlLmpwb2ludChjLGQsbCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0PW5ldyBzKHQsZSksdGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtpZihcImFmZmluZVwiPT09dC50eXBlKXJldHVybiB0aGlzLmVxKHQudG9KKCkpO2lmKHRoaXM9PT10KXJldHVybiEwO3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQuei5yZWRTcXIoKTtpZigwIT09dGhpcy54LnJlZE11bChyKS5yZWRJU3ViKHQueC5yZWRNdWwoZSkpLmNtcG4oMCkpcmV0dXJuITE7dmFyIG49ZS5yZWRNdWwodGhpcy56KSxpPXIucmVkTXVsKHQueik7cmV0dXJuIDA9PT10aGlzLnkucmVkTXVsKGkpLnJlZElTdWIodC55LnJlZE11bChuKSkuY21wbigwKX0sby5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuei5yZWRTcXIoKSxyPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bChlKTtpZigwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMDtmb3IodmFyIG49dC5jbG9uZSgpLGk9dGhpcy5jdXJ2ZS5yZWROLnJlZE11bChlKTs7KXtpZihuLmlhZGQodGhpcy5jdXJ2ZS5uKSxuLmNtcCh0aGlzLmN1cnZlLnApPj0wKXJldHVybiExO2lmKHIucmVkSUFkZChpKSwwPT09dGhpcy54LmNtcChyKSlyZXR1cm4hMH1yZXR1cm4hMX0sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBKUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgSlBvaW50IHg6IFwiK3RoaXMueC50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LnRvU3RyaW5nKDE2LDIpK1wiPlwifSxvLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe1wic2hvcnRcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLnNob3J0KHQpOlwiZWR3YXJkc1wiPT09dC50eXBlP3RoaXMuY3VydmU9bmV3IGYuY3VydmUuZWR3YXJkcyh0KTp0aGlzLmN1cnZlPW5ldyBmLmN1cnZlLm1vbnQodCksdGhpcy5nPXRoaXMuY3VydmUuZyx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMuaGFzaD10Lmhhc2gscyh0aGlzLmcudmFsaWRhdGUoKSxcIkludmFsaWQgY3VydmVcIikscyh0aGlzLmcubXVsKHRoaXMubikuaXNJbmZpbml0eSgpLFwiSW52YWxpZCBjdXJ2ZSwgRypOICE9IE9cIil9ZnVuY3Rpb24gaSh0LGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShvLHQse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3ZhciByPW5ldyBuKGUpO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCx2YWx1ZTpyfSkscn19KX12YXIgbz1lLGE9cig1MCksZj1yKDIyKSxzPWYudXRpbHMuYXNzZXJ0O28uUHJlc2V0Q3VydmU9bixpKFwicDE5MlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAxOTJcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNjQyMTA1MTkgZTU5YzgwZTcgMGZhN2U5YWIgNzIyNDMwNDkgZmViOGRlZWMgYzE0NmI5YjFcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgOTlkZWY4MzYgMTQ2YmM5YjEgYjRkMjI4MzFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIxODhkYTgwZSBiMDMwOTBmNiA3Y2JmMjBlYiA0M2ExODgwMCBmNGZmMGFmZCA4MmZmMTAxMlwiLFwiMDcxOTJiOTUgZmZjOGRhNzggNjMxMDExZWQgNmIyNGNkZDUgNzNmOTc3YTEgMWU3OTQ4MTFcIl19KSxpKFwicDIyNFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcInAyMjRcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDFcIixhOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmVcIixiOlwiYjQwNTBhODUgMGMwNGIzYWIgZjU0MTMyNTYgNTA0NGIwYjcgZDdiZmQ4YmEgMjcwYjM5NDMgMjM1NWZmYjRcIixuOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZjE2YTIgZTBiOGYwM2UgMTNkZDI5NDUgNWM1YzJhM2RcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCJiNzBlMGNiZCA2YmI0YmY3ZiAzMjEzOTBiOSA0YTAzYzFkMyA1NmMyMTEyMiAzNDMyODBkNiAxMTVjMWQyMVwiLFwiYmQzNzYzODggYjVmNzIzZmIgNGMyMmRmZTYgY2Q0Mzc1YTAgNWEwNzQ3NjQgNDRkNTgxOTkgODUwMDdlMzRcIl19KSxpKFwicDI1NlwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YlwiLG46XCJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2XCIsXCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNVwiXX0pLGkoXCJwMzg0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjXCIsYjpcImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczXCIsaGFzaDphLnNoYTM4NCxnUmVkOiExLGc6W1wiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjdcIixcIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmXCJdfSksaShcInA1MjFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDBcIixuOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDlcIixoYXNoOmEuc2hhNTEyLGdSZWQ6ITEsZzpbXCIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NlwiLFwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTBcIl19KSxpKFwiY3VydmUyNTUxOVwiLHt0eXBlOlwibW9udFwiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiNzZkMDZcIixiOlwiMFwiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiOVwiXX0pLGkoXCJlZDI1NTE5XCIse3R5cGU6XCJlZHdhcmRzXCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCItMVwiLGM6XCIxXCIsZDpcIjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTNcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWFcIixcIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NThcIl19KTt2YXIgdTt0cnl7dT1yKDU1Nyl9Y2F0Y2godCl7dT12b2lkIDB9aShcInNlY3AyNTZrMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcImsyNTZcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIixhOlwiMFwiLGI6XCI3XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxXCIsaDpcIjFcIixoYXNoOmEuc2hhMjU2LGJldGE6XCI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlXCIsbGFtYmRhOlwiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MlwiLGJhc2lzOlt7YTpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCIsYjpcIi1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjM1wifSx7YTpcIjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOFwiLGI6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwifV0sZ1JlZDohMSxnOltcIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OThcIixcIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjhcIix1XX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZihvLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eSh0KSxcIlVua25vd24gY3VydmUgXCIrdCksdD1vLmN1cnZlc1t0XSksdCBpbnN0YW5jZW9mIG8uY3VydmVzLlByZXNldEN1cnZlJiYodD17Y3VydmU6dH0pLHRoaXMuY3VydmU9dC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPXQuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZSh0LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdm9pZCh0aGlzLmhhc2g9dC5oYXNofHx0LmN1cnZlLmhhc2gpKTpuZXcgbih0KX12YXIgaT1yKDMwKSxvPXIoMjIpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9cig1NTEpLHU9cig1NTIpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVByaXZhdGUodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVB1YmxpYyh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24odCl7dHx8KHQ9e30pO2Zvcih2YXIgZT1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gscGVyczp0LnBlcnMsZW50cm9weTp0LmVudHJvcHl8fG8ucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxub25jZTp0aGlzLm4udG9BcnJheSgpfSkscj10aGlzLm4uYnl0ZUxlbmd0aCgpLG49dGhpcy5uLnN1YihuZXcgaSgyKSk7Oyl7dmFyIGE9bmV3IGkoZS5nZW5lcmF0ZShyKSk7aWYoIShhLmNtcChuKT4wKSlyZXR1cm4gYS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKGEpfX0sbi5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCp0LmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHI+MCYmKHQ9dC51c2hybihyKSksIWUmJnQuY21wKHRoaXMubik+PTA/dC5zdWIodGhpcy5uKTp0fSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksbnx8KG49e30pLGU9dGhpcy5rZXlGcm9tUHJpdmF0ZShlLHIpLHQ9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpO2Zvcih2YXIgYT10aGlzLm4uYnl0ZUxlbmd0aCgpLGY9ZS5nZXRQcml2YXRlKCkudG9BcnJheShcImJlXCIsYSkscz10LnRvQXJyYXkoXCJiZVwiLGEpLGg9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6Zixub25jZTpzLHBlcnM6bi5wZXJzLHBlcnNFbmM6bi5wZXJzRW5jfSksYz10aGlzLm4uc3ViKG5ldyBpKDEpKSxkPTA7ITA7ZCsrKXt2YXIgbD1uLms/bi5rKGQpOm5ldyBpKGguZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKGw9dGhpcy5fdHJ1bmNhdGVUb04obCwhMCksIShsLmNtcG4oMSk8PTB8fGwuY21wKGMpPj0wKSl7dmFyIHA9dGhpcy5nLm11bChsKTtpZighcC5pc0luZmluaXR5KCkpe3ZhciBiPXAuZ2V0WCgpLHY9Yi51bW9kKHRoaXMubik7aWYoMCE9PXYuY21wbigwKSl7dmFyIHk9bC5pbnZtKHRoaXMubikubXVsKHYubXVsKGUuZ2V0UHJpdmF0ZSgpKS5pYWRkKHQpKTtpZih5PXkudW1vZCh0aGlzLm4pLDAhPT15LmNtcG4oMCkpe3ZhciBtPShwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1iLmNtcCh2KT8yOjApO3JldHVybiBuLmNhbm9uaWNhbCYmeS5jbXAodGhpcy5uaCk+MCYmKHk9dGhpcy5uLnN1Yih5KSxtXj0xKSxuZXcgdSh7cjp2LHM6eSxyZWNvdmVyeVBhcmFtOm19KX19fX19fSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIsbil7dD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSkscj10aGlzLmtleUZyb21QdWJsaWMocixuKSxlPW5ldyB1KGUsXCJoZXhcIik7dmFyIG89ZS5yLGE9ZS5zO2lmKG8uY21wbigxKTwwfHxvLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO2lmKGEuY21wbigxKTwwfHxhLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBmPWEuaW52bSh0aGlzLm4pLHM9Zi5tdWwodCkudW1vZCh0aGlzLm4pLGg9Zi5tdWwobykudW1vZCh0aGlzLm4pO2lmKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spe3ZhciBjPXRoaXMuZy5tdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmMD09PWMuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAobyl9dmFyIGM9dGhpcy5nLmptdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmYy5lcVhUb1Aobyl9LG4ucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24odCxlLHIsbil7ZigoMyZyKT09PXIsXCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzXCIpLGU9bmV3IHUoZSxuKTt2YXIgbz10aGlzLm4sYT1uZXcgaSh0KSxzPWUucixoPWUucyxjPTEmcixkPXI+PjE7aWYocy5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmQpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlXCIpO3M9ZD90aGlzLmN1cnZlLnBvaW50RnJvbVgocy5hZGQodGhpcy5jdXJ2ZS5uKSxjKTp0aGlzLmN1cnZlLnBvaW50RnJvbVgocyxjKTt2YXIgbD1lLnIuaW52bShvKSxwPW8uc3ViKGEpLm11bChsKS51bW9kKG8pLGI9aC5tdWwobCkudW1vZChvKTtyZXR1cm4gdGhpcy5nLm11bEFkZChwLHMsYil9LG4ucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24odCxlLHIsbil7aWYoZT1uZXcgdShlLG4pLG51bGwhPT1lLnJlY292ZXJ5UGFyYW0pcmV0dXJuIGUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgbzt0cnl7bz10aGlzLnJlY292ZXJQdWJLZXkodCxlLGkpfWNhdGNoKHQpe2NvbnRpbnVlfWlmKG8uZXEocikpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVjPXQsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxlLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoZS5wcml2LGUucHJpdkVuYyksZS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhlLnB1YixlLnB1YkVuYyl9dmFyIGk9cigzMCk7dC5leHBvcnRzPW4sbi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZSxwdWJFbmM6cn0pfSxuLmZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwcml2OmUscHJpdkVuYzpyfSl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gdC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06dC52YWxpZGF0ZSgpP3QubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZT10LHQ9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLGU/dGhpcy5wdWIuZW5jb2RlKGUsdCk6dGhpcy5wdWJ9LG4ucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLnByaXY9bmV3IGkodCxlfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54fHx0Lnk/dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KHQueCx0LnkpKTp2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQodCxlKSl9LG4ucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVjLnNpZ24odCx0aGlzLGUscil9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVjLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIjxLZXkgcHJpdjogXCIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKStcIiBwdWI6IFwiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKStcIiA+XCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90OnZvaWQodGhpcy5faW1wb3J0REVSKHQsZSl8fChjKHQuciYmdC5zLFwiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzXCIpLHRoaXMucj1uZXcgcyh0LnIsMTYpLHRoaXMucz1uZXcgcyh0LnMsMTYpLHZvaWQgMD09PXQucmVjb3ZlcnlQYXJhbT90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09dC5yZWNvdmVyeVBhcmFtKSl9ZnVuY3Rpb24gaSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dFtlLnBsYWNlKytdO2lmKCEoMTI4JnIpKXJldHVybiByO2Zvcih2YXIgbj0xNSZyLGk9MCxvPTAsYT1lLnBsYWNlO288bjtvKyssYSsrKWk8PD04LGl8PXRbYV07cmV0dXJuIGUucGxhY2U9YSxpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xOyF0W2VdJiYhKDEyOCZ0W2UrMV0pJiZlPHI7KWUrKztyZXR1cm4gMD09PWU/dDp0LnNsaWNlKGUpfWZ1bmN0aW9uIGYodCxlKXtpZihlPDEyOClyZXR1cm4gdm9pZCB0LnB1c2goZSk7dmFyIHI9MSsoTWF0aC5sb2coZSkvTWF0aC5MTjI+Pj4zKTtmb3IodC5wdXNoKDEyOHxyKTstLXI7KXQucHVzaChlPj4+KHI8PDMpJjI1NSk7dC5wdXNoKGUpfXZhciBzPXIoMzApLHU9cigyMiksaD11LnV0aWxzLGM9aC5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbih0LGUpe3Q9aC50b0FycmF5KHQsZSk7dmFyIHI9bmV3IGk7aWYoNDghPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIG49byh0LHIpO2lmKG4rci5wbGFjZSE9PXQubGVuZ3RoKXJldHVybiExO2lmKDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGE9byh0LHIpLGY9dC5zbGljZShyLnBsYWNlLGErci5wbGFjZSk7aWYoci5wbGFjZSs9YSwyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciB1PW8odCxyKTtpZih0Lmxlbmd0aCE9PXUrci5wbGFjZSlyZXR1cm4hMTt2YXIgYz10LnNsaWNlKHIucGxhY2UsdStyLnBsYWNlKTtyZXR1cm4gMD09PWZbMF0mJjEyOCZmWzFdJiYoZj1mLnNsaWNlKDEpKSwwPT09Y1swXSYmMTI4JmNbMV0mJihjPWMuc2xpY2UoMSkpLHRoaXMucj1uZXcgcyhmKSx0aGlzLnM9bmV3IHMoYyksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LG4ucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuci50b0FycmF5KCkscj10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLGU9YShlKSxyPWEocik7IShyWzBdfHwxMjgmclsxXSk7KXI9ci5zbGljZSgxKTt2YXIgbj1bMl07ZihuLGUubGVuZ3RoKSxuPW4uY29uY2F0KGUpLG4ucHVzaCgyKSxmKG4sci5sZW5ndGgpO3ZhciBpPW4uY29uY2F0KHIpLG89WzQ4XTtyZXR1cm4gZihvLGkubGVuZ3RoKSxvPW8uY29uY2F0KGkpLGguZW5jb2RlKG8sdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZihmKFwiZWQyNTUxOVwiPT09dCxcIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXJcIiksISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3ZhciB0PW8uY3VydmVzW3RdLmN1cnZlO3RoaXMuY3VydmU9dCx0aGlzLmc9dC5nLHRoaXMuZy5wcmVjb21wdXRlKHQubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9dC5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHQubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9aS5zaGE1MTJ9dmFyIGk9cig1MCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEucGFyc2VCeXRlcyx1PXIoNTU0KSxoPXIoNTU1KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSl7dD1zKHQpO3ZhciByPXRoaXMua2V5RnJvbVNlY3JldChlKSxuPXRoaXMuaGFzaEludChyLm1lc3NhZ2VQcmVmaXgoKSx0KSxpPXRoaXMuZy5tdWwobiksbz10aGlzLmVuY29kZVBvaW50KGkpLGE9dGhpcy5oYXNoSW50KG8sci5wdWJCeXRlcygpLHQpLm11bChyLnByaXYoKSksZj1uLmFkZChhKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjppLFM6ZixSZW5jb2RlZDpvfSl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscil7dD1zKHQpLGU9dGhpcy5tYWtlU2lnbmF0dXJlKGUpO3ZhciBuPXRoaXMua2V5RnJvbVB1YmxpYyhyKSxpPXRoaXMuaGFzaEludChlLlJlbmNvZGVkKCksbi5wdWJCeXRlcygpLHQpLG89dGhpcy5nLm11bChlLlMoKSksYT1lLlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpO3JldHVybiBhLmVxKG8pfSxuLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaGFzaCgpLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQudXBkYXRlKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGEuaW50RnJvbUxFKHQuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tUHVibGljKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVNlY3JldCh0aGlzLHQpfSxuLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaD90Om5ldyBoKHRoaXMsdCl9LG4ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBlW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PXQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsZX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dD1hLnBhcnNlQnl0ZXModCk7dmFyIGU9dC5sZW5ndGgtMSxyPXQuc2xpY2UoMCxlKS5jb25jYXQodFtlXSYtMTI5KSxuPTAhPT0oMTI4JnRbZV0pLGk9YS5pbnRGcm9tTEUocik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShpLG4pfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LG4ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gYS5pbnRGcm9tTEUodCl9LG4ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCx0aGlzLl9zZWNyZXQ9ZihlLnNlY3JldCksdC5pc1BvaW50KGUucHViKT90aGlzLl9wdWI9ZS5wdWI6dGhpcy5fcHViQnl0ZXM9ZihlLnB1Yil9dmFyIGk9cigyMiksbz1pLnV0aWxzLGE9by5hc3NlcnQsZj1vLnBhcnNlQnl0ZXMscz1vLmNhY2hlZFByb3BlcnR5O24uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplfSl9LG4uZnJvbVNlY3JldD1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3NlY3JldDplfSl9LG4ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LHMobixcInB1YkJ5dGVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLHMobixcInB1YlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkscyhuLFwicHJpdkJ5dGVzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZHNhLGU9dGhpcy5oYXNoKCkscj10LmVuY29kaW5nTGVuZ3RoLTEsbj1lLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLHMobixcInByaXZcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLHMobixcImhhc2hcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxzKG4sXCJtZXNzYWdlUHJlZml4XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5XCIpLHRoaXMuZWRkc2Euc2lnbih0LHRoaXMpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBpcyBwdWJsaWMgb25seVwiKSxvLmVuY29kZSh0aGlzLnNlY3JldCgpLHQpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSx0KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT11KGUpKSxBcnJheS5pc0FycmF5KGUpJiYoZT17UjplLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCksUzplLnNsaWNlKHQuZW5jb2RpbmdMZW5ndGgpfSksZihlLlImJmUuUyxcIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgU1wiKSx0LmlzUG9pbnQoZS5SKSYmKHRoaXMuX1I9ZS5SKSxlLlMgaW5zdGFuY2VvZiBpJiYodGhpcy5fUz1lLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5SKT9lLlI6ZS5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUyk/ZS5TOmUuU2VuY29kZWR9dmFyIGk9cigzMCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEuY2FjaGVkUHJvcGVydHksdT1hLnBhcnNlQnl0ZXM7cyhuLFwiU1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxzKG4sXCJSXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkscyhuLFwiUmVuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLHMobixcIlNlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksbi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LG4ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZW5jb2RlKHRoaXMudG9CeXRlcygpLFwiaGV4XCIpLnRvVXBwZXJDYXNlKCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dGhpcy5oYXNoPXQuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF0LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXQubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLnJlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1hLnRvQXJyYXkodC5lbnRyb3B5LHQuZW50cm9weUVuYykscj1hLnRvQXJyYXkodC5ub25jZSx0Lm5vbmNlRW5jKSxpPWEudG9BcnJheSh0LnBlcnMsdC5wZXJzRW5jKTtmKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5faW5pdChlLHIsaSl9dmFyIGk9cig1MCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLnJlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxuLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTt0JiYoZT1lLnVwZGF0ZSh0KSksdGhpcy5LPWUuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSx0JiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUodCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LG4ucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbih0LGUscixuKXtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSx0PWEudG9CdWZmZXIodCxlKSxyPWEudG9CdWZmZXIocixuKSxmKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5fdXBkYXRlKHQuY29uY2F0KHJ8fFtdKSksdGhpcy5yZXNlZWQ9MX0sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoXCJSZXNlZWQgaXMgcmVxdWlyZWRcIik7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksciYmKHI9YS50b0FycmF5KHIsbiksdGhpcy5fdXBkYXRlKHIpKTtmb3IodmFyIGk9W107aS5sZW5ndGg8dDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxpPWkuY29uY2F0KHRoaXMuVik7dmFyIG89aS5zbGljZSgwLHQpO3JldHVybiB0aGlzLl91cGRhdGUociksdGhpcy5yZXNlZWQrKyxhLmVuY29kZShvLGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1tcImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGFcIixcImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjFcIl0sW1wiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOFwiLFwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZlwiXSxbXCIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5XCIsXCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1XCJdLFtcIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDBcIixcIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOVwiXSxbXCI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjXCIsXCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2XCJdLFtcIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGFcIixcIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWZcIl0sW1wiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYVwiLFwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OVwiXSxbXCIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwXCIsXCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5XCJdLFtcImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmRcIixcIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGRcIl0sW1wiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZFwiLFwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OFwiXSxbXCJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxXCIsXCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkXCJdLFtcIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzBcIixcIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzhcIl0sW1wiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0N1wiLFwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYVwiXSxbXCIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyXCIsXCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzXCJdLFtcIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhN1wiLFwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MFwiXSxbXCIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkXCIsXCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwXCJdLFtcIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODNcIixcIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTZcIl0sW1wiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhXCIsXCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5XCJdLFtcIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZThcIixcImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTdcIl0sW1wiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZFwiLFwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYVwiXSxbXCJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1XCIsXCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkXCJdLFtcIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTRcIixcIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjJcIl0sW1wiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzY1wiLFwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNlwiXSxbXCJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2XCIsXCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmXCJdLFtcIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzlcIixcImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDFcIl0sW1wiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MVwiLFwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjM1wiXSxbXCJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiXCIsXCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmXCJdLFtcImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDNcIixcIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTdcIl0sW1wiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZFwiLFwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OFwiXSxbXCJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwXCIsXCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExXCJdLFtcIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDRcIixcImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MFwiXSxbXCI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhXCIsXCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyXCJdLFtcImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTFcIixcIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmNcIl0sW1wiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZVwiLFwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YlwiXSxbXCJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxXCIsXCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxXCJdLFtcImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWZcIixcIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NVwiXSxbXCJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4XCIsXCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwXCJdLFtcIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWRcIixcIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODRcIl0sW1wiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NlwiLFwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWRcIl0sW1wiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZFwiLFwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZFwiXSxbXCI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1XCIsXCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4XCJdLFtcImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjZcIixcIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzhcIl0sW1wiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MVwiLFwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhY1wiXSxbXCI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWNcIixcImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWZcIl0sW1wiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MVwiLFwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MlwiXSxbXCJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlXCIsXCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3XCJdLFtcIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDFcIixcImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWNcIl0sW1wiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiM1wiLFwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZFwiXSxbXCJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmXCIsXCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0XCJdLFtcIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTlcIixcImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmRcIl0sW1wiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZVwiLFwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMFwiXSxbXCJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5XCIsXCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExXCJdLFtcImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzJcIixcIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjFcIl0sW1wiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxM1wiLFwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwY1wiXSxbXCIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjXCIsXCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczXCJdLFtcIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmFcIixcIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmRcIl0sW1wiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MVwiLFwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNVwiXSxbXCI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczXCIsXCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5XCJdLFtcIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NThcIixcIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2VcIl0sW1wiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YlwiLFwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyN1wiXSxbXCJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2XCIsXCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzFcIl0sW1wiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYVwiLFwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MlwiXSxbXCI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTBcIixcIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDVcIl0sW1wiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4N1wiLFwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3M1wiXSxbXCJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlXCIsXCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyXCJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1tcImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjlcIixcIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzJcIl0sW1wiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNFwiLFwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNlwiXSxbXCI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjXCIsXCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhXCJdLFtcImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmVcIixcImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzdcIl0sW1wiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYlwiLFwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYlwiXSxbXCJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4XCIsXCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODFcIl0sW1wiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZVwiLFwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OFwiXSxbXCJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0XCIsXCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3XCJdLFtcIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmNcIixcIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2FcIl0sW1wiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNVwiLFwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4Y1wiXSxbXCIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmXCIsXCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjdcIl0sW1wiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNFwiLFwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMlwiXSxbXCJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5XCIsXCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1XCJdLFtcImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGJcIixcIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODJcIl0sW1wiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNFwiLFwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MlwiXSxbXCIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1XCIsXCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2XCJdLFtcIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzlcIixcIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OVwiXSxbXCI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkXCIsXCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmXCJdLFtcIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmZcIixcIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2FcIl0sW1wiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYlwiLFwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3XCJdLFtcImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzlcIixcImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzNcIl0sW1wiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzXCIsXCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhXCJdLFtcIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzRcIixcIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDZcIl0sW1wiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMFwiLFwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzN1wiXSxbXCI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViXCIsXCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlXCJdLFtcImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDdcIixcImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjZcIl0sW1wiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMVwiLFwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NlwiXSxbXCIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwXCIsXCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwXCJdLFtcIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzVcIixcIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MVwiXSxbXCI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4XCIsXCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODNcIl0sW1wiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOFwiLFwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNVwiXSxbXCIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViXCIsXCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiXCJdLFtcImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2ZcIixcIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTdcIl0sW1wiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0M1wiLFwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OFwiXSxbXCIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhXCIsXCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhXCJdLFtcImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDVcIixcImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzZcIl0sW1wiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YVwiLFwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NlwiXSxbXCI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlXCIsXCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlXCJdLFtcImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjhcIixcImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2RcIl0sW1wiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyY1wiLFwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMlwiXSxbXCI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5XCIsXCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlXCJdLFtcIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWJcIixcIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzdcIl0sW1wiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYVwiLFwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMVwiXSxbXCJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmXCIsXCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0XCJdLFtcIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTBcIixcIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzVcIl0sW1wiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNFwiLFwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZFwiXSxbXCIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjXCIsXCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkXCJdLFtcImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDBcIixcImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjlcIl0sW1wiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MFwiLFwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2XCJdLFtcIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjNcIixcIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzRcIl0sW1wiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZlwiLFwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlXCJdLFtcImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjNcIixcIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDFcIl0sW1wiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OFwiLFwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYlwiXSxbXCIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmXCIsXCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxXCJdLFtcIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjVcIixcIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjZcIl0sW1wiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNlwiLFwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZVwiXSxbXCIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1XCIsXCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkXCJdLFtcImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTlcIixcImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGNcIl0sW1wiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxXCIsXCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0XCJdLFtcIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTVcIixcIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmNcIl0sW1wiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNVwiLFwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YlwiXSxbXCJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3XCIsXCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTNcIl0sW1wiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MVwiLFwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0XCJdLFtcIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDVcIixcIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjVcIl0sW1wiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NlwiLFwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmY1wiXSxbXCIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjZcIixcImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjRcIl0sW1wiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZVwiLFwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZVwiXSxbXCIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0XCIsXCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjZcIl0sW1wiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMVwiLFwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMVwiXSxbXCIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxXCIsXCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGJcIl0sW1wiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MlwiLFwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMlwiXSxbXCI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTVcIixcImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2NcIl0sW1wiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYlwiLFwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhM1wiXSxbXCJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0XCIsXCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkXCJdLFtcImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWZcIixcIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDBcIl0sW1wiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODlcIixcIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTRcIl0sW1wiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NlwiLFwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NlwiXSxbXCIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0XCIsXCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0XCJdLFtcIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2FcIixcImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTdcIl0sW1wiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMFwiLFwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxM1wiXSxbXCJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3XCIsXCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2XCJdLFtcImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5M1wiLFwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOFwiXSxbXCJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmXCIsXCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWZcIl0sW1wiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOFwiLFwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OFwiXSxbXCJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhXCIsXCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhXCJdLFtcImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTFcIixcIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDRcIl0sW1wiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMlwiLFwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzN1wiXSxbXCIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhXCIsXCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3XCJdLFtcImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjZcIixcIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmRcIl0sW1wiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NlwiLFwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYVwiXSxbXCJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlXCIsXCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0XCJdLFtcIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzRcIixcIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzdcIl0sW1wiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYVwiLFwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxN1wiXSxbXCI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5XCIsXCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwXCJdLFtcImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWZcIixcImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjVcIl0sW1wiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwY1wiLFwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZVwiXSxbXCIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyXCIsXCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxXCJdLFtcImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGFcIixcIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjJcIl0sW1wiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MFwiLFwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyM1wiXSxbXCJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkXCIsXCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4XCJdLFtcIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTFcIixcImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NThcIl0sW1wiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2M1wiLFwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1XCJdLFtcImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTJcIixcIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2RcIl0sW1wiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5M1wiLFwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlY1wiXSxbXCI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwXCIsXCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzBcIl0sW1wiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OFwiLFwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzY1wiXSxbXCJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3XCIsXCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0XCJdLFtcIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYThcIixcImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWZcIl0sW1wiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZVwiLFwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OVwiXSxbXCIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkXCIsXCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjZcIl0sW1wiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YlwiLFwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNVwiXSxbXCJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmXCIsXCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3XCJdLFtcIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjZcIixcIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2JcIl0sW1wiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5N1wiLFwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliY1wiXSxbXCI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhXCIsXCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjXCJdLFtcImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmNcIixcImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWZcIl0sW1wiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MlwiLFwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YVwiXSxbXCJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiXCIsXCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2XCJdLFtcIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjVcIixcImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2ZcIl0sW1wiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxN1wiLFwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwM1wiXSxbXCI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5XCIsXCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4XCJdLFtcIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTNcIixcIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjhcIl0sW1wiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1N1wiLFwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczXCJdLFtcIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjZcIixcImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzNcIl0sW1wiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOFwiLFwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOFwiXSxbXCI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxXCIsXCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxXCJdLFtcIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODBcIixcIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjlcIl1dXG59fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1pKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLG49MTw8ZSsxLGk9dC5jbG9uZSgpO2kuY21wbigxKT49MDspe3ZhciBvO2lmKGkuaXNPZGQoKSl7dmFyIGE9aS5hbmRsbihuLTEpO289YT4obj4+MSktMT8obj4+MSktYTphLGkuaXN1Ym4obyl9ZWxzZSBvPTA7ci5wdXNoKG8pO2Zvcih2YXIgZj0wIT09aS5jbXBuKDApJiYwPT09aS5hbmRsbihuLTEpP2UrMToxLHM9MTtzPGY7cysrKXIucHVzaCgwKTtpLml1c2hybihmKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG49MCxpPTA7dC5jbXBuKC1uKT4wfHxlLmNtcG4oLWkpPjA7KXt2YXIgbz10LmFuZGxuKDMpK24mMyxhPWUuYW5kbG4oMykraSYzOzM9PT1vJiYobz0tMSksMz09PWEmJihhPS0xKTt2YXIgZjtpZigwPT09KDEmbykpZj0wO2Vsc2V7dmFyIHM9dC5hbmRsbig3KStuJjc7Zj0zIT09cyYmNSE9PXN8fDIhPT1hP286LW99clswXS5wdXNoKGYpO3ZhciB1O2lmKDA9PT0oMSZhKSl1PTA7ZWxzZXt2YXIgcz1lLmFuZGxuKDcpK2kmNzt1PTMhPT1zJiY1IT09c3x8MiE9PW8/YTotYX1yWzFdLnB1c2godSksMipuPT09ZisxJiYobj0xLW4pLDIqaT09PXUrMSYmKGk9MS1pKSx0Lml1c2hybigxKSxlLml1c2hybigxKX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1cIl9cIitlO3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbbl0/dGhpc1tuXTp0aGlzW25dPXIuY2FsbCh0aGlzKX19ZnVuY3Rpb24gdSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9jLnRvQXJyYXkodCxcImhleFwiKTp0fWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBkKHQsXCJoZXhcIixcImxlXCIpfXZhciBjPWUsZD1yKDMwKTtjLmFzc2VydD1mdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9LGMudG9BcnJheT1uLGMuemVybzI9aSxjLnRvSGV4PW8sYy5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhleFwiPT09ZT9vKHQpOnR9LGMuZ2V0TkFGPWEsYy5nZXRKU0Y9ZixjLmNhY2hlZFByb3BlcnR5PXMsYy5wYXJzZUJ5dGVzPXUsYy5pbnRGcm9tTEU9aH0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR9dmFyIGk7aWYodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpfHwoaT1uZXcgbihudWxsKSksaS5nZW5lcmF0ZSh0KX0sdC5leHBvcnRzLlJhbmQ9bixuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFuZCh0KX0sXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyl3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06d2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9Om4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX07ZWxzZSB0cnl7dmFyIG89cig2MTApO24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHQpfX1jYXRjaCh0KXtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gZX19fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPVwiYmlnXCIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn12YXIgaT1yKDUwKSxvPWkudXRpbHMsYT1vLmFzc2VydDtlLkJsb2NrSGFzaD1uLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQ9by50b0FycmF5KHQsZSksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KHQpOnRoaXMucGVuZGluZz10LHRoaXMucGVuZGluZ1RvdGFsKz10Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3Q9dGhpcy5wZW5kaW5nO3ZhciByPXQubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dC5zbGljZSh0Lmxlbmd0aC1yLHQubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx0PW8uam9pbjMyKHQsMCx0Lmxlbmd0aC1yLHRoaXMuZW5kaWFuKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHQsbixuK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxhKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh0KX0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGVuZGluZ1RvdGFsLGU9dGhpcy5fZGVsdGE4LHI9ZS0odCt0aGlzLnBhZExlbmd0aCklZSxuPW5ldyBBcnJheShyK3RoaXMucGFkTGVuZ3RoKTtuWzBdPTEyODtmb3IodmFyIGk9MTtpPHI7aSsrKW5baV09MDtpZih0PDw9MyxcImJpZ1wiPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wO25baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPTI1NSZ0fWVsc2V7bltpKytdPTI1NSZ0LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTA7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTB9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh0aGlzLkhhc2g9dCx0aGlzLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT10Lm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHZvaWQgdGhpcy5faW5pdChvLnRvQXJyYXkoZSxyKSkpOm5ldyBuKHQsZSxyKX12YXIgaT1yKDUwKSxvPWkudXRpbHMsYT1vLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt0Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHQ9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KS5kaWdlc3QoKSksYSh0Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgZT10Lmxlbmd0aDtlPHRoaXMuYmxvY2tTaXplO2UrKyl0LnB1c2goMCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49NTQ7dGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh0LGUpLHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8obC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5lbmRpYW49XCJsaXR0bGVcIikpOm5ldyBufWZ1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuIHQ8PTE1P2Vecl5uOnQ8PTMxP2Umcnx+ZSZuOnQ8PTQ3PyhlfH5yKV5uOnQ8PTYzP2UmbnxyJn5uOmVeKHJ8fm4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTE1PzA6dDw9MzE/MTUxODUwMDI0OTp0PD00Nz8xODU5Nzc1MzkzOnQ8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBhKHQpe3JldHVybiB0PD0xNT8xMzUyODI5OTI2OnQ8PTMxPzE1NDg2MDM2ODQ6dDw9NDc/MTgzNjA3MjY5MTp0PD02Mz8yMDUzOTk0MjE3OjB9dmFyIGY9cig1MCkscz1mLnV0aWxzLHU9cy5yb3RsMzIsaD1zLnN1bTMyLGM9cy5zdW0zMl8zLGQ9cy5zdW0zMl80LGw9Zi5jb21tb24uQmxvY2tIYXNoO3MuaW5oZXJpdHMobixsKSxlLnJpcGVtZDE2MD1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MTYwLG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuaFswXSxuPXRoaXMuaFsxXSxmPXRoaXMuaFsyXSxzPXRoaXMuaFszXSxsPXRoaXMuaFs0XSxtPXIsZz1uLHc9ZixfPXMsTT1sLFM9MDtTPDgwO1MrKyl7dmFyIEU9aCh1KGQocixpKFMsbixmLHMpLHRbcFtTXStlXSxvKFMpKSx2W1NdKSxsKTtyPWwsbD1zLHM9dShmLDEwKSxmPW4sbj1FLEU9aCh1KGQobSxpKDc5LVMsZyx3LF8pLHRbYltTXStlXSxhKFMpKSx5W1NdKSxNKSxtPU0sTT1fLF89dSh3LDEwKSx3PWcsZz1FfUU9Yyh0aGlzLmhbMV0sZixfKSx0aGlzLmhbMV09Yyh0aGlzLmhbMl0scyxNKSx0aGlzLmhbMl09Yyh0aGlzLmhbM10sbCxtKSx0aGlzLmhbM109Yyh0aGlzLmhbNF0scixnKSx0aGlzLmhbNF09Yyh0aGlzLmhbMF0sbix3KSx0aGlzLmhbMF09RX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9zLnRvSGV4MzIodGhpcy5oLFwibGl0dGxlXCIpOnMuc3BsaXQzMih0aGlzLmgsXCJsaXR0bGVcIil9O3ZhciBwPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0seT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdm9pZCh0aGlzLlc9bmV3IEFycmF5KDY0KSkpOm5ldyBufWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/KG4uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF0pKTpuZXcgaX1mdW5jdGlvbiBvKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9Vyx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoMTYwKSkpOm5ldyBvfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/KG8uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF0pKTpuZXcgYX1mdW5jdGlvbiBmKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLlc9bmV3IEFycmF5KDgwKSkpOm5ldyBmfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiB0JmVefnQmcn1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gdCZlXnQmcl5lJnJ9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGModCl7cmV0dXJuIFIodCwyKV5SKHQsMTMpXlIodCwyMil9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gUih0LDYpXlIodCwxMSleUih0LDI1KX1mdW5jdGlvbiBsKHQpe3JldHVybiBSKHQsNyleUih0LDE4KV50Pj4+M31mdW5jdGlvbiBwKHQpe3JldHVybiBSKHQsMTcpXlIodCwxOSledD4+PjEwfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIDA9PT10P3MoZSxyLG4pOjE9PT10fHwzPT09dD9oKGUscixuKToyPT09dD91KGUscixuKTp2b2lkIDB9ZnVuY3Rpb24gdih0LGUscixuLGksbyl7dmFyIGE9dCZyXn50Jmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24geSh0LGUscixuLGksbyl7dmFyIGE9ZSZuXn5lJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gbSh0LGUscixuLGksbyl7dmFyIGE9dCZyXnQmaV5yJmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gZyh0LGUscixuLGksbyl7dmFyIGE9ZSZuXmUmb15uJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPU4odCxlLDI4KSxuPU4oZSx0LDIpLGk9TihlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBfKHQsZSl7dmFyIHI9TCh0LGUsMjgpLG49TChlLHQsMiksaT1MKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1OKHQsZSwxNCksbj1OKHQsZSwxOCksaT1OKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1MKHQsZSwxNCksbj1MKHQsZSwxOCksaT1MKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1OKHQsZSwxKSxuPU4odCxlLDgpLGk9VSh0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBBKHQsZSl7dmFyIHI9TCh0LGUsMSksbj1MKHQsZSw4KSxpPXoodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gayh0LGUpe3ZhciByPU4odCxlLDE5KSxuPU4oZSx0LDI5KSxpPVUodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24geCh0LGUpe3ZhciByPUwodCxlLDE5KSxuPUwoZSx0LDI5KSxpPXoodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99dmFyIEk9cig1MCksQj1JLnV0aWxzLE89Qi5hc3NlcnQsUj1CLnJvdHIzMixQPUIucm90bDMyLFQ9Qi5zdW0zMixqPUIuc3VtMzJfNCxDPUIuc3VtMzJfNSxOPUIucm90cjY0X2hpLEw9Qi5yb3RyNjRfbG8sVT1CLnNocjY0X2hpLHo9Qi5zaHI2NF9sbyxEPUIuc3VtNjQscT1CLnN1bTY0X2hpLEY9Qi5zdW02NF9sbyxLPUIuc3VtNjRfNF9oaSxHPUIuc3VtNjRfNF9sbyxWPUIuc3VtNjRfNV9oaSxIPUIuc3VtNjRfNV9sbyxYPUkuY29tbW9uLkJsb2NrSGFzaCxZPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFc9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxaPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtCLmluaGVyaXRzKG4sWCksZS5zaGEyNTY9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTI1NixuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1qKHAocltuLTJdKSxyW24tN10sbChyW24tMTVdKSxyW24tMTZdKTt2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10saD10aGlzLmhbNF0sYj10aGlzLmhbNV0sdj10aGlzLmhbNl0seT10aGlzLmhbN107Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbT1DKHksZChoKSxzKGgsYix2KSx0aGlzLmtbbl0scltuXSksZz1UKGMoaSksdShpLG8sYSkpO3k9dix2PWIsYj1oLGg9VChmLG0pLGY9YSxhPW8sbz1pLGk9VChtLGcpfXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0saCksdGhpcy5oWzVdPVQodGhpcy5oWzVdLGIpLHRoaXMuaFs2XT1UKHRoaXMuaFs2XSx2KSx0aGlzLmhbN109VCh0aGlzLmhbN10seSl9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGksbiksZS5zaGEyMjQ9aSxpLmJsb2NrU2l6ZT01MTIsaS5vdXRTaXplPTIyNCxpLmhtYWNTdHJlbmd0aD0xOTIsaS5wYWRMZW5ndGg9NjQsaS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfSxCLmluaGVyaXRzKG8sWCksZS5zaGE1MTI9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT01MTIsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwzMjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rPTIpe3ZhciBpPWsocltuLTRdLHJbbi0zXSksbz14KHJbbi00XSxyW24tM10pLGE9cltuLTE0XSxmPXJbbi0xM10scz1FKHJbbi0zMF0scltuLTI5XSksdT1BKHJbbi0zMF0scltuLTI5XSksaD1yW24tMzJdLGM9cltuLTMxXTtyW25dPUsoaSxvLGEsZixzLHUsaCxjKSxyW24rMV09RyhpLG8sYSxmLHMsdSxoLGMpfX0sby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ByZXBhcmVCbG9jayh0LGUpO3ZhciByPXRoaXMuVyxuPXRoaXMuaFswXSxpPXRoaXMuaFsxXSxvPXRoaXMuaFsyXSxhPXRoaXMuaFszXSxmPXRoaXMuaFs0XSxzPXRoaXMuaFs1XSx1PXRoaXMuaFs2XSxoPXRoaXMuaFs3XSxjPXRoaXMuaFs4XSxkPXRoaXMuaFs5XSxsPXRoaXMuaFsxMF0scD10aGlzLmhbMTFdLGI9dGhpcy5oWzEyXSxFPXRoaXMuaFsxM10sQT10aGlzLmhbMTRdLGs9dGhpcy5oWzE1XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciB4PTA7eDxyLmxlbmd0aDt4Kz0yKXt2YXIgST1BLEI9ayxSPU0oYyxkKSxQPVMoYyxkKSxUPXYoYyxkLGwscCxiLEUpLGo9eShjLGQsbCxwLGIsRSksQz10aGlzLmtbeF0sTj10aGlzLmtbeCsxXSxMPXJbeF0sVT1yW3grMV0sej1WKEksQixSLFAsVCxqLEMsTixMLFUpLEs9SChJLEIsUixQLFQsaixDLE4sTCxVKSxJPXcobixpKSxCPV8obixpKSxSPW0obixpLG8sYSxmLHMpLFA9ZyhuLGksbyxhLGYscyksRz1xKEksQixSLFApLFg9RihJLEIsUixQKTtBPWIsaz1FLGI9bCxFPXAsbD1jLHA9ZCxjPXEodSxoLHosSyksZD1GKGgsaCx6LEspLHU9ZixoPXMsZj1vLHM9YSxvPW4sYT1pLG49cSh6LEssRyxYKSxpPUYoeixLLEcsWCl9RCh0aGlzLmgsMCxuLGkpLEQodGhpcy5oLDIsbyxhKSxEKHRoaXMuaCw0LGYscyksRCh0aGlzLmgsNix1LGgpLEQodGhpcy5oLDgsYyxkKSxEKHRoaXMuaCwxMCxsLHApLEQodGhpcy5oLDEyLGIsRSksRCh0aGlzLmgsMTQsQSxrKX0sby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoYSxvKSxlLnNoYTM4ND1hLGEuYmxvY2tTaXplPTEwMjQsYS5vdXRTaXplPTM4NCxhLmhtYWNTdHJlbmd0aD0xOTIsYS5wYWRMZW5ndGg9MTI4LGEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpfSxCLmluaGVyaXRzKGYsWCksZS5zaGExPWYsZi5ibG9ja1NpemU9NTEyLGYub3V0U2l6ZT0xNjAsZi5obWFjU3RyZW5ndGg9ODAsZi5wYWRMZW5ndGg9NjQsZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1QKHJbbi0zXV5yW24tOF1ecltuLTE0XV5yW24tMTZdLDEpO2Zvcih2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10scz10aGlzLmhbNF0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgdT1+fihuLzIwKSxoPUMoUChpLDUpLGIodSxvLGEsZikscyxyW25dLFpbdV0pO3M9ZixmPWEsYT1QKG8sMzApLG89aSxpPWh9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxzKX0sZi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9Zih0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXt2YXIgZT10Pj4+MjR8dD4+PjgmNjUyODB8dDw8OCYxNjcxMTY4MHwoMjU1JnQpPDwyNDtyZXR1cm4gZT4+PjB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1cIlwiLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcImxpdHRsZVwiPT09ZSYmKGk9byhpKSkscis9cyhpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBzKHQpe3JldHVybiA3PT09dC5sZW5ndGg/XCIwXCIrdDo2PT09dC5sZW5ndGg/XCIwMFwiK3Q6NT09PXQubGVuZ3RoP1wiMDAwXCIrdDo0PT09dC5sZW5ndGg/XCIwMDAwXCIrdDozPT09dC5sZW5ndGg/XCIwMDAwMFwiK3Q6Mj09PXQubGVuZ3RoP1wiMDAwMDAwXCIrdDoxPT09dC5sZW5ndGg/XCIwMDAwMDAwXCIrdDp0fWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ci1lO3koaSU0PT09MCk7Zm9yKHZhciBvPW5ldyBBcnJheShpLzQpLGE9MCxmPWU7YTxvLmxlbmd0aDthKyssZis9NCl7dmFyIHM7cz1cImJpZ1wiPT09bj90W2ZdPDwyNHx0W2YrMV08PDE2fHRbZisyXTw8OHx0W2YrM106dFtmKzNdPDwyNHx0W2YrMl08PDE2fHRbZisxXTw8OHx0W2ZdLG9bYV09cz4+PjB9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoNCp0Lmxlbmd0aCksbj0wLGk9MDtuPHQubGVuZ3RoO24rKyxpKz00KXt2YXIgbz10W25dO1wiYmlnXCI9PT1lPyhyW2ldPW8+Pj4yNCxyW2krMV09bz4+PjE2JjI1NSxyW2krMl09bz4+PjgmMjU1LHJbaSszXT0yNTUmbyk6KHJbaSszXT1vPj4+MjQscltpKzJdPW8+Pj4xNiYyNTUscltpKzFdPW8+Pj44JjI1NSxyW2ldPTI1NSZvKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCtlPj4+MH1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gdCtlK3I+Pj4wfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIHQrZStyK24+Pj4wfWZ1bmN0aW9uIHYodCxlLHIsbixpKXtyZXR1cm4gdCtlK3IrbitpPj4+MH1mdW5jdGlvbiB5KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPXRbZV0sbz10W2UrMV0sYT1uK28+Pj4wLGY9KGE8bj8xOjApK3IraTt0W2VdPWY+Pj4wLHRbZSsxXT1hfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ZStuPj4+MCxvPShpPGU/MTowKSt0K3I7cmV0dXJuIG8+Pj4wfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9ZStuO3JldHVybiBpPj4+MH1mdW5jdGlvbiBfKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9MCx1PWU7dT11K24+Pj4wLHMrPXU8ZT8xOjAsdT11K28+Pj4wLHMrPXU8bz8xOjAsdT11K2Y+Pj4wLHMrPXU8Zj8xOjA7dmFyIGg9dCtyK2krYStzO3JldHVybiBoPj4+MH1mdW5jdGlvbiBNKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9ZStuK28rZjtyZXR1cm4gcz4+PjB9ZnVuY3Rpb24gUyh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD0wLGM9ZTtjPWMrbj4+PjAsaCs9YzxlPzE6MCxjPWMrbz4+PjAsaCs9YzxvPzE6MCxjPWMrZj4+PjAsaCs9YzxmPzE6MCxjPWMrdT4+PjAsaCs9Yzx1PzE6MDt2YXIgZD10K3IraSthK3MraDtyZXR1cm4gZD4+PjB9ZnVuY3Rpb24gRSh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD1lK24rbytmK3U7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWU8PDMyLXJ8dD4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiB0Pj4+cn1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH12YXIgQj1lLE89cigyKTtCLnRvQXJyYXk9bixCLnRvSGV4PWksQi5odG9ubD1vLEIudG9IZXgzMj1hLEIuemVybzI9ZixCLnplcm84PXMsQi5qb2luMzI9dSxCLnNwbGl0MzI9aCxCLnJvdHIzMj1jLEIucm90bDMyPWQsQi5zdW0zMj1sLEIuc3VtMzJfMz1wLEIuc3VtMzJfND1iLEIuc3VtMzJfNT12LEIuYXNzZXJ0PXksQi5pbmhlcml0cz1PLGUuc3VtNjQ9bSxlLnN1bTY0X2hpPWcsZS5zdW02NF9sbz13LGUuc3VtNjRfNF9oaT1fLGUuc3VtNjRfNF9sbz1NLGUuc3VtNjRfNV9oaT1TLGUuc3VtNjRfNV9sbz1FLGUucm90cjY0X2hpPUEsZS5yb3RyNjRfbG89ayxlLnNocjY0X2hpPXgsZS5zaHI2NF9sbz1JfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyKXtpZihlLmxlbmd0aCVvIT09MCl7dmFyIG49ZS5sZW5ndGgrKG8tZS5sZW5ndGglbyk7ZT10LmNvbmNhdChbZSxhXSxuKX1mb3IodmFyIGk9W10sZj1yP2UucmVhZEludDMyQkU6ZS5yZWFkSW50MzJMRSxzPTA7czxlLmxlbmd0aDtzKz1vKWkucHVzaChmLmNhbGwoZSxzKSk7cmV0dXJuIGl9ZnVuY3Rpb24gbihlLHIsbil7Zm9yKHZhciBpPW5ldyB0KHIpLG89bj9pLndyaXRlSW50MzJCRTppLndyaXRlSW50MzJMRSxhPTA7YTxlLmxlbmd0aDthKyspby5jYWxsKGksZVthXSw0KmEsITApO3JldHVybiBpfWZ1bmN0aW9uIGkoZSxpLG8sYSl7dC5pc0J1ZmZlcihlKXx8KGU9bmV3IHQoZSkpO3ZhciBzPWkocihlLGEpLGUubGVuZ3RoKmYpO3JldHVybiBuKHMsbyxhKX12YXIgbz00LGE9bmV3IHQobyk7YS5maWxsKDApO3ZhciBmPTg7ZS5oYXNoPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpLHRoaXMuaGFzaE1vZGU9XCJzdHJpbmdcIj09dHlwZW9mIHQsdGhpcy5oYXNoTW9kZT90aGlzW3RdPXRoaXMuX2ZpbmFsT3JEaWdlc3Q6dGhpcy5maW5hbD10aGlzLl9maW5hbE9yRGlnZXN0LHRoaXMuX2RlY29kZXI9bnVsbCx0aGlzLl9lbmNvZGluZz1udWxsfXZhciBpPXIoMzEpLlRyYW5zZm9ybSxvPXIoMiksYT1yKDUyKS5TdHJpbmdEZWNvZGVyO3QuZXhwb3J0cz1uLG8obixpKSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyLG4pe1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LHIpKTt2YXIgaT10aGlzLl91cGRhdGUodCk7cmV0dXJuIHRoaXMuaGFzaE1vZGU/dGhpczoobiYmKGk9dGhpcy5fdG9TdHJpbmcoaSxuKSksaSl9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKCl7fSxuLnByb3RvdHlwZS5nZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBzZXQgYWFkIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5fdHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbjt0cnl7dGhpcy5oYXNoTW9kZT90aGlzLl91cGRhdGUodCk6dGhpcy5wdXNoKHRoaXMuX3VwZGF0ZSh0KSl9Y2F0Y2godCl7bj10fWZpbmFsbHl7cihuKX19LG4ucHJvdG90eXBlLl9mbHVzaD1mdW5jdGlvbih0KXt2YXIgZTt0cnl7dGhpcy5wdXNoKHRoaXMuX2ZpbmFsKCkpfWNhdGNoKHQpe2U9dH1maW5hbGx5e3QoZSl9fSxuLnByb3RvdHlwZS5fZmluYWxPckRpZ2VzdD1mdW5jdGlvbih0KXt2YXIgcj10aGlzLl9maW5hbCgpfHxuZXcgZShcIlwiKTtyZXR1cm4gdCYmKHI9dGhpcy5fdG9TdHJpbmcocix0LCEwKSkscn0sbi5wcm90b3R5cGUuX3RvU3RyaW5nPWZ1bmN0aW9uKHQsZSxyKXtpZih0aGlzLl9kZWNvZGVyfHwodGhpcy5fZGVjb2Rlcj1uZXcgYShlKSx0aGlzLl9lbmNvZGluZz1lKSx0aGlzLl9lbmNvZGluZyE9PWUpdGhyb3cgbmV3IEVycm9yKFwiY2FuJ3Qgc3dpdGNoIGVuY29kaW5nc1wiKTt2YXIgbj10aGlzLl9kZWNvZGVyLndyaXRlKHQpO3JldHVybiByJiYobis9dGhpcy5fZGVjb2Rlci5lbmQoKSksbn19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7Zm9yKHZhciBlPVtdLHI9MCxuPTA7cjx0Lmxlbmd0aDtyKyssbis9OCllW24+Pj41XXw9dFtyXTw8MjQtbiUzMjtyZXR1cm4gZX1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT1bXSxyPTA7cjwzMip0Lmxlbmd0aDtyKz04KWUucHVzaCh0W3I+Pj41XT4+PjI0LXIlMzImMjU1KTtyZXR1cm4gZX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl7dmFyIGk9cituLGM9ZVtpXTtlW2ldPTE2NzExOTM1JihjPDw4fGM+Pj4yNCl8NDI3ODI1NTM2MCYoYzw8MjR8Yz4+PjgpfXZhciBtLGcsdyxfLE0sUyxFLEEsayx4O1M9bT10WzBdLEU9Zz10WzFdLEE9dz10WzJdLGs9Xz10WzNdLHg9TT10WzRdO3ZhciBJO2ZvcihuPTA7bjw4MDtuKz0xKUk9bStlW3IrZFtuXV18MCxJKz1uPDE2P28oZyx3LF8pK3ZbMF06bjwzMj9hKGcsdyxfKSt2WzFdOm48NDg/ZihnLHcsXykrdlsyXTpuPDY0P3MoZyx3LF8pK3ZbM106dShnLHcsXykrdls0XSxJfD0wLEk9aChJLHBbbl0pLEk9SStNfDAsbT1NLE09XyxfPWgodywxMCksdz1nLGc9SSxJPVMrZVtyK2xbbl1dfDAsSSs9bjwxNj91KEUsQSxrKSt5WzBdOm48MzI/cyhFLEEsaykreVsxXTpuPDQ4P2YoRSxBLGspK3lbMl06bjw2ND9hKEUsQSxrKSt5WzNdOm8oRSxBLGspK3lbNF0sSXw9MCxJPWgoSSxiW25dKSxJPUkreHwwLFM9eCx4PWssaz1oKEEsMTApLEE9RSxFPUk7ST10WzFdK3cra3wwLHRbMV09dFsyXStfK3h8MCx0WzJdPXRbM10rTStTfDAsdFszXT10WzRdK20rRXwwLHRbNF09dFswXStnK0F8MCx0WzBdPUl9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGEodCxlLHIpe3JldHVybiB0JmV8fnQmcn1mdW5jdGlvbiBmKHQsZSxyKXtyZXR1cm4odHx+ZSlecn1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gdCZyfGUmfnJ9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHReKGV8fnIpfWZ1bmN0aW9uIGgodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBjKHQpe3ZhciBvPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF07XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQsXCJ1dGY4XCIpKTt2YXIgYT1yKHQpLGY9OCp0Lmxlbmd0aCxzPTgqdC5sZW5ndGg7YVtmPj4+NV18PTEyODw8MjQtZiUzMixhWyhmKzY0Pj4+OTw8NCkrMTRdPTE2NzExOTM1JihzPDw4fHM+Pj4yNCl8NDI3ODI1NTM2MCYoczw8MjR8cz4+PjgpO2Zvcih2YXIgdT0wO3U8YS5sZW5ndGg7dSs9MTYpaShvLGEsdSk7Zm9yKHU9MDt1PDU7dSsrKXt2YXIgaD1vW3VdO29bdV09MTY3MTE5MzUmKGg8PDh8aD4+PjI0KXw0Mjc4MjU1MzYwJihoPDwyNHxoPj4+OCl9dmFyIGM9bihvKTtyZXR1cm4gbmV3IGUoYyl9LyoqIEBwcmVzZXJ2ZVxuKGMpIDIwMTIgYnkgQ8OpZHJpYyBNZXNuaWwuIEFsbCByaWdodHMgcmVzZXJ2ZWQuXG5cblJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dCBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMgYXJlIG1ldDpcblxuICAgIC0gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuICAgIC0gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZSBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG5USElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIEhPTERFUiBPUiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG4qL1xudmFyIGQ9WzAsMSwyLDMsNCw1LDYsNyw4LDksMTAsMTEsMTIsMTMsMTQsMTUsNyw0LDEzLDEsMTAsNiwxNSwzLDEyLDAsOSw1LDIsMTQsMTEsOCwzLDEwLDE0LDQsOSwxNSw4LDEsMiw3LDAsNiwxMywxMSw1LDEyLDEsOSwxMSwxMCwwLDgsMTIsNCwxMywzLDcsMTUsMTQsNSw2LDIsNCwwLDUsOSw3LDEyLDIsMTAsMTQsMSwzLDgsMTEsNiwxNSwxM10sbD1bNSwxNCw3LDAsOSwyLDExLDQsMTMsNiwxNSw4LDEsMTAsMywxMiw2LDExLDMsNywwLDEzLDUsMTAsMTQsMTUsOCwxMiw0LDksMSwyLDE1LDUsMSwzLDcsMTQsNiw5LDExLDgsMTIsMiwxMCwwLDQsMTMsOCw2LDQsMSwzLDExLDE1LDAsNSwxMiwyLDEzLDksNywxMCwxNCwxMiwxNSwxMCw0LDEsNSw4LDcsNiwyLDEzLDE0LDAsMyw5LDExXSxwPVsxMSwxNCwxNSwxMiw1LDgsNyw5LDExLDEzLDE0LDE1LDYsNyw5LDgsNyw2LDgsMTMsMTEsOSw3LDE1LDcsMTIsMTUsOSwxMSw3LDEzLDEyLDExLDEzLDYsNywxNCw5LDEzLDE1LDE0LDgsMTMsNiw1LDEyLDcsNSwxMSwxMiwxNCwxNSwxNCwxNSw5LDgsOSwxNCw1LDYsOCw2LDUsMTIsOSwxNSw1LDExLDYsOCwxMywxMiw1LDEyLDEzLDE0LDExLDgsNSw2XSxiPVs4LDksOSwxMSwxMywxNSwxNSw1LDcsNyw4LDExLDE0LDE0LDEyLDYsOSwxMywxNSw3LDEyLDgsOSwxMSw3LDcsMTIsNyw2LDE1LDEzLDExLDksNywxNSwxMSw4LDYsNiwxNCwxMiwxMyw1LDE0LDEzLDEzLDcsNSwxNSw1LDgsMTEsMTQsMTQsNiwxNCw2LDksMTIsOSwxMiw1LDE1LDgsOCw1LDEyLDksMTIsNSwxNCw2LDgsMTMsNiw1LDE1LDEzLDExLDExXSx2PVswLDE1MTg1MDAyNDksMTg1OTc3NTM5MywyNDAwOTU5NzA4LDI4NDA4NTM4MzhdLHk9WzEzNTI4Mjk5MjYsMTU0ODYwMzY4NCwxODM2MDcyNjkxLDIwNTM5OTQyMTcsMF07dC5leHBvcnRzPWN9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIGU9dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3Q9dC50b0xvd2VyQ2FzZSgpO3ZhciByPWVbdF07aWYoIXIpdGhyb3cgbmV3IEVycm9yKHQrXCIgaXMgbm90IHN1cHBvcnRlZCAod2UgYWNjZXB0IHB1bGwgcmVxdWVzdHMpXCIpO3JldHVybiBuZXcgcn07ZS5zaGE9cig1NjkpLGUuc2hhMT1yKDU3MCksZS5zaGEyMjQ9cig1NzEpLGUuc2hhMjU2PXIoMjI3KSxlLnNoYTM4ND1yKDU3MiksZS5zaGE1MTI9cigyMjgpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWgscy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8PDV8dD4+PjI3fWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PDMwfHQ+Pj4yfWZ1bmN0aW9uIGEodCxlLHIsbil7cmV0dXJuIDA9PT10P2Umcnx+ZSZuOjI9PT10P2UmcnxlJm58ciZuOmVecl5ufXZhciBmPXIoMikscz1yKDYwKSx1PVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0saD1uZXcgQXJyYXkoODApO2YobixzKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLGY9MHx0aGlzLl9jLHM9MHx0aGlzLl9kLGg9MHx0aGlzLl9lLGM9MDtjPDE2OysrYyllW2NdPXQucmVhZEludDMyQkUoNCpjKTtmb3IoO2M8ODA7KytjKWVbY109ZVtjLTNdXmVbYy04XV5lW2MtMTRdXmVbYy0xNl07Zm9yKHZhciBkPTA7ZDw4MDsrK2Qpe3ZhciBsPX5+KGQvMjApLHA9aShyKSthKGwsbixmLHMpK2grZVtkXSt1W2xdfDA7aD1zLHM9ZixmPW8obiksbj1yLHI9cH10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1mK3RoaXMuX2N8MCx0aGlzLl9kPXMrdGhpcy5fZHwwLHRoaXMuX2U9aCt0aGlzLl9lfDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjApO3JldHVybiB0LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWMsdS5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCl7cmV0dXJuIHQ8PDF8dD4+PjMxfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PDV8dD4+PjI3fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHQ8PDMwfHQ+Pj4yfWZ1bmN0aW9uIGYodCxlLHIsbil7cmV0dXJuIDA9PT10P2Umcnx+ZSZuOjI9PT10P2UmcnxlJm58ciZuOmVecl5ufXZhciBzPXIoMiksdT1yKDYwKSxoPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsLTE4OTQwMDc1ODgsLTg5OTQ5NzUxNF0sYz1uZXcgQXJyYXkoODApO3Mobix1KSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTczMjU4NDE5Myx0aGlzLl9iPTQwMjMyMzM0MTcsdGhpcy5fYz0yNTYyMzgzMTAyLHRoaXMuX2Q9MjcxNzMzODc4LHRoaXMuX2U9MzI4NTM3NzUyMCx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLHM9MHx0aGlzLl9jLHU9MHx0aGlzLl9kLGM9MHx0aGlzLl9lLGQ9MDtkPDE2OysrZCllW2RdPXQucmVhZEludDMyQkUoNCpkKTtmb3IoO2Q8ODA7KytkKWVbZF09aShlW2QtM11eZVtkLThdXmVbZC0xNF1eZVtkLTE2XSk7Zm9yKHZhciBsPTA7bDw4MDsrK2wpe3ZhciBwPX5+KGwvMjApLGI9byhyKStmKHAsbixzLHUpK2MrZVtsXStoW3BdfDA7Yz11LHU9cyxzPWEobiksbj1yLHI9Yn10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1zK3RoaXMuX2N8MCx0aGlzLl9kPXUrdGhpcy5fZHwwLHRoaXMuX2U9Yyt0aGlzLl9lfDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjApO3JldHVybiB0LndyaXRlSW50MzJCRSgwfHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9iLDQpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fZSwxNiksdH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWYsYS5jYWxsKHRoaXMsNjQsNTYpfXZhciBpPXIoMiksbz1yKDIyNyksYT1yKDYwKSxmPW5ldyBBcnJheSg2NCk7aShuLG8pLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYT0zMjM4MzcxMDMyLHRoaXMuX2I9OTE0MTUwNjYzLHRoaXMuX2M9ODEyNzAyOTk5LHRoaXMuX2Q9NDE0NDkxMjY5Nyx0aGlzLl9lPTQyOTA3NzU4NTcsdGhpcy5fZj0xNzUwNjAzMDI1LHRoaXMuX2c9MTY5NDA3NjgzOSx0aGlzLl9oPTMyMDQwNzU0MjgsdGhpc30sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgZSgyOCk7cmV0dXJuIHQud3JpdGVJbnQzMkJFKHRoaXMuX2EsMCksdC53cml0ZUludDMyQkUodGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9jLDgpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2QsMTIpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2UsMTYpLHQud3JpdGVJbnQzMkJFKHRoaXMuX2YsMjApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2csMjQpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLGEuY2FsbCh0aGlzLDEyOCwxMTIpfXZhciBpPXIoMiksbz1yKDIyOCksYT1yKDYwKSxmPW5ldyBBcnJheSgxNjApO2kobixvKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2FoPTM0MTgwNzAzNjUsdGhpcy5fYmg9MTY1NDI3MDI1MCx0aGlzLl9jaD0yNDM4NTI5MzcwLHRoaXMuX2RoPTM1NTQ2MjM2MCx0aGlzLl9laD0xNzMxNDA1NDE1LHRoaXMuX2ZoPTIzOTQxODAyMzEsdGhpcy5fZ2g9MzY3NTAwODUyNSx0aGlzLl9oaD0xMjAzMDYyODEzLHRoaXMuX2FsPTMyMzgzNzEwMzIsdGhpcy5fYmw9OTE0MTUwNjYzLHRoaXMuX2NsPTgxMjcwMjk5OSx0aGlzLl9kbD00MTQ0OTEyNjk3LHRoaXMuX2VsPTQyOTA3NzU4NTcsdGhpcy5fZmw9MTc1MDYwMzAyNSx0aGlzLl9nbD0xNjk0MDc2ODM5LHRoaXMuX2hsPTMyMDQwNzU0MjgsdGhpc30sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtyLndyaXRlSW50MzJCRSh0LG4pLHIud3JpdGVJbnQzMkJFKGUsbis0KX12YXIgcj1uZXcgZSg0OCk7cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSxyfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlKXt2YXIgcj1uZXcgdChhW2VdLnByaW1lLFwiaGV4XCIpLG49bmV3IHQoYVtlXS5nZW4sXCJoZXhcIik7cmV0dXJuIG5ldyBmKHIsbil9ZnVuY3Rpb24gaShlLHIsbixhKXtyZXR1cm4gdC5pc0J1ZmZlcihyKXx8dm9pZCAwPT09c1tyXT9pKGUsXCJiaW5hcnlcIixyLG4pOihyPXJ8fFwiYmluYXJ5XCIsYT1hfHxcImJpbmFyeVwiLG49bnx8bmV3IHQoWzJdKSx0LmlzQnVmZmVyKG4pfHwobj1uZXcgdChuLGEpKSxcIm51bWJlclwiPT10eXBlb2YgZT9uZXcgZihvKGUsbiksbiwhMCk6KHQuaXNCdWZmZXIoZSl8fChlPW5ldyB0KGUscikpLG5ldyBmKGUsbiwhMCkpKX12YXIgbz1yKDIyOSksYT1yKDQ2OCksZj1yKDU3NCkscz17YmluYXJ5OiEwLGhleDohMCxiYXNlNjQ6ITB9O2UuRGlmZmllSGVsbG1hbkdyb3VwPWUuY3JlYXRlRGlmZmllSGVsbG1hbkdyb3VwPWUuZ2V0RGlmZmllSGVsbG1hbj1uLGUuY3JlYXRlRGlmZmllSGVsbG1hbj1lLkRpZmZpZUhlbGxtYW49aX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMuX3B1Yj1uZXcgcyh0KSx0aGlzfWZ1bmN0aW9uIGkodCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLl9wcml2PW5ldyBzKHQpLHRoaXN9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWUudG9TdHJpbmcoXCJoZXhcIiksbj1bcix0LnRvU3RyaW5nKDE2KV0uam9pbihcIl9cIik7aWYobiBpbiBtKXJldHVybiBtW25dO3ZhciBpPTA7aWYodC5pc0V2ZW4oKXx8IXYuc2ltcGxlU2lldmV8fCF2LmZlcm1hdFRlc3QodCl8fCFoLnRlc3QodCkpcmV0dXJuIGkrPTEsaSs9XCIwMlwiPT09cnx8XCIwNVwiPT09cj84OjQsbVtuXT1pLGk7aC50ZXN0KHQuc2hybigxKSl8fChpKz0yKTt2YXIgbztzd2l0Y2gocil7Y2FzZVwiMDJcIjp0Lm1vZChjKS5jbXAoZCkmJihpKz04KTticmVhaztjYXNlXCIwNVwiOm89dC5tb2QobCksby5jbXAocCkmJm8uY21wKGIpJiYoaSs9OCk7YnJlYWs7ZGVmYXVsdDppKz00fXJldHVybiBtW25dPWksaX1mdW5jdGlvbiBhKHQsZSxyKXt0aGlzLnNldEdlbmVyYXRvcihlKSx0aGlzLl9fcHJpbWU9bmV3IHModCksdGhpcy5fcHJpbWU9cy5tb250KHRoaXMuX19wcmltZSksdGhpcy5fcHJpbWVMZW49dC5sZW5ndGgsdGhpcy5fcHViPXZvaWQgMCx0aGlzLl9wcml2PXZvaWQgMCx0aGlzLl9wcmltZUNvZGU9dm9pZCAwLHI/KHRoaXMuc2V0UHVibGljS2V5PW4sdGhpcy5zZXRQcml2YXRlS2V5PWkpOnRoaXMuX3ByaW1lQ29kZT04fWZ1bmN0aW9uIGYodCxyKXt2YXIgbj1uZXcgZSh0LnRvQXJyYXkoKSk7cmV0dXJuIHI/bi50b1N0cmluZyhyKTpufXZhciBzPXIoMTUwKSx1PXIoMjMwKSxoPW5ldyB1LGM9bmV3IHMoMjQpLGQ9bmV3IHMoMTEpLGw9bmV3IHMoMTApLHA9bmV3IHMoMyksYj1uZXcgcyg3KSx2PXIoMjI5KSx5PXIoNjEpO3QuZXhwb3J0cz1hO3ZhciBtPXt9O09iamVjdC5kZWZpbmVQcm9wZXJ0eShhLnByb3RvdHlwZSxcInZlcmlmeUVycm9yXCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHRoaXMuX3ByaW1lQ29kZSYmKHRoaXMuX3ByaW1lQ29kZT1vKHRoaXMuX19wcmltZSx0aGlzLl9fZ2VuKSksdGhpcy5fcHJpbWVDb2RlfX0pLGEucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9wcml2fHwodGhpcy5fcHJpdj1uZXcgcyh5KHRoaXMuX3ByaW1lTGVuKSkpLHRoaXMuX3B1Yj10aGlzLl9nZW4udG9SZWQodGhpcy5fcHJpbWUpLnJlZFBvdyh0aGlzLl9wcml2KS5mcm9tUmVkKCksdGhpcy5nZXRQdWJsaWNLZXkoKX0sYS5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbih0KXt0PW5ldyBzKHQpLHQ9dC50b1JlZCh0aGlzLl9wcmltZSk7dmFyIHI9dC5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLG49bmV3IGUoci50b0FycmF5KCkpLGk9dGhpcy5nZXRQcmltZSgpO2lmKG4ubGVuZ3RoPGkubGVuZ3RoKXt2YXIgbz1uZXcgZShpLmxlbmd0aC1uLmxlbmd0aCk7by5maWxsKDApLG49ZS5jb25jYXQoW28sbl0pfXJldHVybiBufSxhLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIGYodGhpcy5fcHViLHQpfSxhLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3ByaXYsdCl9LGEucHJvdG90eXBlLmdldFByaW1lPWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX19wcmltZSx0KX0sYS5wcm90b3R5cGUuZ2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX2dlbix0KX0sYS5wcm90b3R5cGUuc2V0R2VuZXJhdG9yPWZ1bmN0aW9uKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5fX2dlbj10LHRoaXMuX2dlbj1uZXcgcyh0KSx0aGlzfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fXZhciBpO2lmKHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXx8KGk9bmV3IG4obnVsbCkpLGkuZ2VuZXJhdGUodCl9LHQuZXhwb3J0cy5SYW5kPW4sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhbmQodCl9LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpd2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9OndpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTpuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIil9O2Vsc2UgdHJ5e3ZhciBvPXIoNjExKTtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5kb21CeXRlcyh0KX19Y2F0Y2godCl7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLnBvdygyLDMwKS0xO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJJdGVyYXRpb25zIG5vdCBhIG51bWJlclwiKTtpZih0PDApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhZCBpdGVyYXRpb25zXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoXCJLZXkgbGVuZ3RoIG5vdCBhIG51bWJlclwiKTtpZihlPDB8fGU+cnx8ZSE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkJhZCBrZXkgbGVuZ3RoXCIpfX0sZnVuY3Rpb24odCxlLHIpe2UucHVibGljRW5jcnlwdD1yKDU5MyksZS5wcml2YXRlRGVjcnlwdD1yKDU5MiksZS5wcml2YXRlRW5jcnlwdD1mdW5jdGlvbih0LHIpe3JldHVybiBlLnB1YmxpY0VuY3J5cHQodCxyLCEwKX0sZS5wdWJsaWNEZWNyeXB0PWZ1bmN0aW9uKHQscil7cmV0dXJuIGUucHJpdmF0ZURlY3J5cHQodCxyLCEwKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEwNiksaT1uLmRlZmluZShcIlJTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVFeHBvbmVudFwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMVwiKS5pbnQoKSx0aGlzLmtleShcInByaW1lMlwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MVwiKS5pbnQoKSx0aGlzLmtleShcImV4cG9uZW50MlwiKS5pbnQoKSx0aGlzLmtleShcImNvZWZmaWNpZW50XCIpLmludCgpKX0pO2UuUlNBUHJpdmF0ZUtleT1pO3ZhciBvPW4uZGVmaW5lKFwiUlNBUHVibGljS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcIm1vZHVsdXNcIikuaW50KCksdGhpcy5rZXkoXCJwdWJsaWNFeHBvbmVudFwiKS5pbnQoKSl9KTtlLlJTQVB1YmxpY0tleT1vO3ZhciBhPW4uZGVmaW5lKFwiU3ViamVjdFB1YmxpY0tleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQdWJsaWNLZXlcIikuYml0c3RyKCkpfSk7ZS5QdWJsaWNLZXk9YTt2YXIgZj1uLmRlZmluZShcIkFsZ29yaXRobUlkZW50aWZpZXJcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLm9iamlkKCksdGhpcy5rZXkoXCJub25lXCIpLm51bGxfKCkub3B0aW9uYWwoKSx0aGlzLmtleShcImN1cnZlXCIpLm9iamlkKCkub3B0aW9uYWwoKSx0aGlzLmtleShcInBhcmFtc1wiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCkpLm9wdGlvbmFsKCkpfSkscz1uLmRlZmluZShcIlByaXZhdGVLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJhbGdvcml0aG1cIikudXNlKGYpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5Qcml2YXRlS2V5PXM7dmFyIHU9bi5kZWZpbmUoXCJFbmNyeXB0ZWRQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJhbGdvcml0aG1cIikuc2VxKCkub2JqKHRoaXMua2V5KFwiaWRcIikub2JqaWQoKSx0aGlzLmtleShcImRlY3J5cHRcIikuc2VxKCkub2JqKHRoaXMua2V5KFwia2RlXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJrZGVwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwic2FsdFwiKS5vY3RzdHIoKSx0aGlzLmtleShcIml0ZXJzXCIpLmludCgpKSksdGhpcy5rZXkoXCJjaXBoZXJcIikuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb1wiKS5vYmppZCgpLHRoaXMua2V5KFwiaXZcIikub2N0c3RyKCkpKSksdGhpcy5rZXkoXCJzdWJqZWN0UHJpdmF0ZUtleVwiKS5vY3RzdHIoKSl9KTtlLkVuY3J5cHRlZFByaXZhdGVLZXk9dTt2YXIgaD1uLmRlZmluZShcIkRTQVByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInBcIikuaW50KCksdGhpcy5rZXkoXCJxXCIpLmludCgpLHRoaXMua2V5KFwiZ1wiKS5pbnQoKSx0aGlzLmtleShcInB1Yl9rZXlcIikuaW50KCksdGhpcy5rZXkoXCJwcml2X2tleVwiKS5pbnQoKSl9KTtlLkRTQVByaXZhdGVLZXk9aCxlLkRTQXBhcmFtPW4uZGVmaW5lKFwiRFNBcGFyYW1cIixmdW5jdGlvbigpe3RoaXMuaW50KCl9KTt2YXIgYz1uLmRlZmluZShcIkVDUHJpdmF0ZUtleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwicHJpdmF0ZUtleVwiKS5vY3RzdHIoKSx0aGlzLmtleShcInBhcmFtZXRlcnNcIikub3B0aW9uYWwoKS5leHBsaWNpdCgwKS51c2UoZCksdGhpcy5rZXkoXCJwdWJsaWNLZXlcIikub3B0aW9uYWwoKS5leHBsaWNpdCgxKS5iaXRzdHIoKSl9KTtlLkVDUHJpdmF0ZUtleT1jO3ZhciBkPW4uZGVmaW5lKFwiRUNQYXJhbWV0ZXJzXCIsZnVuY3Rpb24oKXt0aGlzLmNob2ljZSh7bmFtZWRDdXJ2ZTp0aGlzLm9iamlkKCl9KX0pO2Uuc2lnbmF0dXJlPW4uZGVmaW5lKFwic2lnbmF0dXJlXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInJcIikuaW50KCksdGhpcy5rZXkoXCJzXCIpLmludCgpKX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3ZhciBuPS9Qcm9jLVR5cGU6IDQsRU5DUllQVEVEXFxyP1xcbkRFSy1JbmZvOiBBRVMtKCg/OjEyOCl8KD86MTkyKXwoPzoyNTYpKS1DQkMsKFswLTlBLUhdKylcXHI/XFxuXFxyP1xcbihbMC05QS16XFxuXFxyXFwrXFwvXFw9XSspXFxyP1xcbi9tLGk9L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuL20sbz0vXi0tLS0tQkVHSU4gKC4qKSBLRVktLS0tLVxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4tLS0tLUVORCBcXDEgS0VZLS0tLS0kL20sYT1yKDE1MyksZj1yKDIzOSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7dmFyIHMsdT10LnRvU3RyaW5nKCksaD11Lm1hdGNoKG4pO2lmKGgpe3ZhciBjPVwiYWVzXCIraFsxXSxkPW5ldyBlKGhbMl0sXCJoZXhcIiksbD1uZXcgZShoWzNdLnJlcGxhY2UoL1xccj9cXG4vZyxcIlwiKSxcImJhc2U2NFwiKSxwPWEocixkLnNsaWNlKDAsOCkscGFyc2VJbnQoaFsxXSwxMCkpLmtleSxiPVtdLHY9Zi5jcmVhdGVEZWNpcGhlcml2KGMscCxkKTtiLnB1c2godi51cGRhdGUobCkpLGIucHVzaCh2LmZpbmFsKCkpLHM9ZS5jb25jYXQoYil9ZWxzZXt2YXIgeT11Lm1hdGNoKG8pO3M9bmV3IGUoeVsyXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIil9dmFyIG09dS5tYXRjaChpKVsxXStcIiBLRVlcIjtyZXR1cm57dGFnOm0sZGF0YTpzfX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3RoaXMubmFtZT10LHRoaXMuYm9keT1lLHRoaXMuZGVjb2RlcnM9e30sdGhpcy5lbmNvZGVycz17fX12YXIgaT1yKDEwNiksbz1yKDIpLGE9ZTthLmRlZmluZT1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgbih0LGUpfSxuLnByb3RvdHlwZS5fY3JlYXRlTmFtZWQ9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e2U9cigyNTEpLnJ1bkluVGhpc0NvbnRleHQoXCIoZnVuY3Rpb24gXCIrdGhpcy5uYW1lK1wiKGVudGl0eSkge1xcbiAgdGhpcy5faW5pdE5hbWVkKGVudGl0eSk7XFxufSlcIil9Y2F0Y2godCl7ZT1mdW5jdGlvbih0KXt0aGlzLl9pbml0TmFtZWQodCl9fXJldHVybiBvKGUsdCksZS5wcm90b3R5cGUuX2luaXROYW1lZD1mdW5jdGlvbihlKXt0LmNhbGwodGhpcyxlKX0sbmV3IGUodGhpcyl9LG4ucHJvdG90eXBlLl9nZXREZWNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5kZWNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZGVjb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5kZWNvZGVyc1t0XSkpLHRoaXMuZGVjb2RlcnNbdF19LG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldERlY29kZXIoZSkuZGVjb2RlKHQscil9LG4ucHJvdG90eXBlLl9nZXRFbmNvZGVyPWZ1bmN0aW9uKHQpe3JldHVybiB0PXR8fFwiZGVyXCIsdGhpcy5lbmNvZGVycy5oYXNPd25Qcm9wZXJ0eSh0KXx8KHRoaXMuZW5jb2RlcnNbdF09dGhpcy5fY3JlYXRlTmFtZWQoaS5lbmNvZGVyc1t0XSkpLHRoaXMuZW5jb2RlcnNbdF19LG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuX2dldEVuY29kZXIoZSkuZW5jb2RlKHQscil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByPXt9O3RoaXMuX2Jhc2VTdGF0ZT1yLHIuZW5jPXQsci5wYXJlbnQ9ZXx8bnVsbCxyLmNoaWxkcmVuPW51bGwsci50YWc9bnVsbCxyLmFyZ3M9bnVsbCxyLnJldmVyc2VBcmdzPW51bGwsci5jaG9pY2U9bnVsbCxyLm9wdGlvbmFsPSExLHIuYW55PSExLHIub2JqPSExLHIudXNlPW51bGwsci51c2VEZWNvZGVyPW51bGwsci5rZXk9bnVsbCxyLmRlZmF1bHQ9bnVsbCxyLmV4cGxpY2l0PW51bGwsci5pbXBsaWNpdD1udWxsLHIuY29udGFpbnM9bnVsbCxyLnBhcmVudHx8KHIuY2hpbGRyZW49W10sdGhpcy5fd3JhcCgpKX12YXIgaT1yKDcxKS5SZXBvcnRlcixvPXIoNzEpLkVuY29kZXJCdWZmZXIsYT1yKDcxKS5EZWNvZGVyQnVmZmVyLGY9cig1ODgpLHM9W1wic2VxXCIsXCJzZXFvZlwiLFwic2V0XCIsXCJzZXRvZlwiLFwib2JqaWRcIixcImJvb2xcIixcImdlbnRpbWVcIixcInV0Y3RpbWVcIixcIm51bGxfXCIsXCJlbnVtXCIsXCJpbnRcIixcImJpdHN0clwiLFwiYm1wc3RyXCIsXCJjaGFyc3RyXCIsXCJnZW5zdHJcIixcImdyYXBoc3RyXCIsXCJpYTVzdHJcIixcImlzbzY0NnN0clwiLFwibnVtc3RyXCIsXCJvY3RzdHJcIixcInByaW50c3RyXCIsXCJ0NjFzdHJcIixcInVuaXN0clwiLFwidXRmOHN0clwiLFwidmlkZW9zdHJcIl0sdT1bXCJrZXlcIixcIm9ialwiLFwidXNlXCIsXCJvcHRpb25hbFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJkZWZcIixcImNob2ljZVwiLFwiYW55XCIsXCJjb250YWluc1wiXS5jb25jYXQocyksaD1bXCJfcGVla1RhZ1wiLFwiX2RlY29kZVRhZ1wiLFwiX3VzZVwiLFwiX2RlY29kZVN0clwiLFwiX2RlY29kZU9iamlkXCIsXCJfZGVjb2RlVGltZVwiLFwiX2RlY29kZU51bGxcIixcIl9kZWNvZGVJbnRcIixcIl9kZWNvZGVCb29sXCIsXCJfZGVjb2RlTGlzdFwiLFwiX2VuY29kZUNvbXBvc2l0ZVwiLFwiX2VuY29kZVN0clwiLFwiX2VuY29kZU9iamlkXCIsXCJfZW5jb2RlVGltZVwiLFwiX2VuY29kZU51bGxcIixcIl9lbmNvZGVJbnRcIixcIl9lbmNvZGVCb29sXCJdO3QuZXhwb3J0cz1uO3ZhciBjPVtcImVuY1wiLFwicGFyZW50XCIsXCJjaGlsZHJlblwiLFwidGFnXCIsXCJhcmdzXCIsXCJyZXZlcnNlQXJnc1wiLFwiY2hvaWNlXCIsXCJvcHRpb25hbFwiLFwiYW55XCIsXCJvYmpcIixcInVzZVwiLFwiYWx0ZXJlZFVzZVwiLFwia2V5XCIsXCJkZWZhdWx0XCIsXCJleHBsaWNpdFwiLFwiaW1wbGljaXRcIixcImNvbnRhaW5zXCJdO24ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlLGU9e307Yy5mb3JFYWNoKGZ1bmN0aW9uKHIpe2Vbcl09dFtyXX0pO3ZhciByPW5ldyB0aGlzLmNvbnN0cnVjdG9yKGUucGFyZW50KTtyZXR1cm4gci5fYmFzZVN0YXRlPWUscn0sbi5wcm90b3R5cGUuX3dyYXA9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7dS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3RoaXNbZV09ZnVuY3Rpb24oKXt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3Rvcih0aGlzKTtyZXR1cm4gdC5jaGlsZHJlbi5wdXNoKHIpLHJbZV0uYXBwbHkocixhcmd1bWVudHMpfX0sdGhpcyl9LG4ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtmKG51bGw9PT1lLnBhcmVudCksdC5jYWxsKHRoaXMpLGUuY2hpbGRyZW49ZS5jaGlsZHJlbi5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuIHQuX2Jhc2VTdGF0ZS5wYXJlbnQ9PT10aGlzfSx0aGlzKSxmLmVxdWFsKGUuY2hpbGRyZW4ubGVuZ3RoLDEsXCJSb290IG5vZGUgY2FuIGhhdmUgb25seSBvbmUgY2hpbGRcIil9LG4ucHJvdG90eXBlLl91c2VBcmdzPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPXQuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcn0sdGhpcyk7dD10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4hKHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKX0sdGhpcyksMCE9PXIubGVuZ3RoJiYoZihudWxsPT09ZS5jaGlsZHJlbiksZS5jaGlsZHJlbj1yLHIuZm9yRWFjaChmdW5jdGlvbih0KXt0Ll9iYXNlU3RhdGUucGFyZW50PXRoaXN9LHRoaXMpKSwwIT09dC5sZW5ndGgmJihmKG51bGw9PT1lLmFyZ3MpLGUuYXJncz10LGUucmV2ZXJzZUFyZ3M9dC5tYXAoZnVuY3Rpb24odCl7aWYoXCJvYmplY3RcIiE9dHlwZW9mIHR8fHQuY29uc3RydWN0b3IhPT1PYmplY3QpcmV0dXJuIHQ7dmFyIGU9e307cmV0dXJuIE9iamVjdC5rZXlzKHQpLmZvckVhY2goZnVuY3Rpb24ocil7cj09KDB8cikmJihyfD0wKTt2YXIgbj10W3JdO2Vbbl09cn0pLGV9KSl9LGguZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTt0aHJvdyBuZXcgRXJyb3IodCtcIiBub3QgaW1wbGVtZW50ZWQgZm9yIGVuY29kaW5nOiBcIitlLmVuYyl9fSkscy5mb3JFYWNoKGZ1bmN0aW9uKHQpe24ucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlLHI9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gZihudWxsPT09ZS50YWcpLGUudGFnPXQsdGhpcy5fdXNlQXJncyhyKSx0aGlzfX0pLG4ucHJvdG90eXBlLnVzZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLnVzZT10LHRoaXN9LG4ucHJvdG90eXBlLm9wdGlvbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0Lm9wdGlvbmFsPSEwLHRoaXN9LG4ucHJvdG90eXBlLmRlZj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZGVmYXVsdCksZS5kZWZhdWx0PXQsZS5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5leHBsaWNpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuZXhwbGljaXQmJm51bGw9PT1lLmltcGxpY2l0KSxlLmV4cGxpY2l0PXQsdGhpc30sbi5wcm90b3R5cGUuaW1wbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5pbXBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLm9iaj1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIHQub2JqPSEwLDAhPT1lLmxlbmd0aCYmdGhpcy5fdXNlQXJncyhlKSx0aGlzfSxuLnByb3RvdHlwZS5rZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmtleSksZS5rZXk9dCx0aGlzfSxuLnByb3RvdHlwZS5hbnk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHQuYW55PSEwLHRoaXN9LG4ucHJvdG90eXBlLmNob2ljZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUuY2hvaWNlKSxlLmNob2ljZT10LHRoaXMuX3VzZUFyZ3MoT2JqZWN0LmtleXModCkubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfSkpLHRoaXN9LG4ucHJvdG90eXBlLmNvbnRhaW5zPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS51c2UpLGUuY29udGFpbnM9dCx0aGlzfSxuLnByb3RvdHlwZS5fZGVjb2RlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1yLnBhcmVudClyZXR1cm4gdC53cmFwUmVzdWx0KHIuY2hpbGRyZW5bMF0uX2RlY29kZSh0LGUpKTt2YXIgbj1yLmRlZmF1bHQsaT0hMCxvPW51bGw7aWYobnVsbCE9PXIua2V5JiYobz10LmVudGVyS2V5KHIua2V5KSksci5vcHRpb25hbCl7dmFyIGY9bnVsbDtpZihudWxsIT09ci5leHBsaWNpdD9mPXIuZXhwbGljaXQ6bnVsbCE9PXIuaW1wbGljaXQ/Zj1yLmltcGxpY2l0Om51bGwhPT1yLnRhZyYmKGY9ci50YWcpLG51bGwhPT1mfHxyLmFueSl7aWYoaT10aGlzLl9wZWVrVGFnKHQsZixyLmFueSksdC5pc0Vycm9yKGkpKXJldHVybiBpfWVsc2V7dmFyIHM9dC5zYXZlKCk7dHJ5e251bGw9PT1yLmNob2ljZT90aGlzLl9kZWNvZGVHZW5lcmljKHIudGFnLHQsZSk6dGhpcy5fZGVjb2RlQ2hvaWNlKHQsZSksaT0hMH1jYXRjaCh0KXtpPSExfXQucmVzdG9yZShzKX19dmFyIHU7aWYoci5vYmomJmkmJih1PXQuZW50ZXJPYmplY3QoKSksaSl7aWYobnVsbCE9PXIuZXhwbGljaXQpe3ZhciBoPXRoaXMuX2RlY29kZVRhZyh0LHIuZXhwbGljaXQpO2lmKHQuaXNFcnJvcihoKSlyZXR1cm4gaDt0PWh9dmFyIGM9dC5vZmZzZXQ7aWYobnVsbD09PXIudXNlJiZudWxsPT09ci5jaG9pY2Upe2lmKHIuYW55KXZhciBzPXQuc2F2ZSgpO3ZhciBkPXRoaXMuX2RlY29kZVRhZyh0LG51bGwhPT1yLmltcGxpY2l0P3IuaW1wbGljaXQ6ci50YWcsci5hbnkpO2lmKHQuaXNFcnJvcihkKSlyZXR1cm4gZDtyLmFueT9uPXQucmF3KHMpOnQ9ZH1pZihlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksYyx0Lmxlbmd0aCxcInRhZ2dlZFwiKSxlJiZlLnRyYWNrJiZudWxsIT09ci50YWcmJmUudHJhY2sodC5wYXRoKCksdC5vZmZzZXQsdC5sZW5ndGgsXCJjb250ZW50XCIpLG49ci5hbnk/bjpudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZihyLmFueXx8bnVsbCE9PXIuY2hvaWNlfHxudWxsPT09ci5jaGlsZHJlbnx8ci5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKHIpe3IuX2RlY29kZSh0LGUpfSksci5jb250YWlucyYmKFwib2N0c3RyXCI9PT1yLnRhZ3x8XCJiaXRzdHJcIj09PXIudGFnKSl7dmFyIGw9bmV3IGEobik7bj10aGlzLl9nZXRVc2Uoci5jb250YWlucyx0Ll9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShsLGUpfX1yZXR1cm4gci5vYmomJmkmJihuPXQubGVhdmVPYmplY3QodSkpLG51bGw9PT1yLmtleXx8bnVsbD09PW4mJmkhPT0hMD9udWxsIT09byYmdC5leGl0S2V5KG8pOnQubGVhdmVLZXkobyxyLmtleSxuKSxufSxuLnByb3RvdHlwZS5fZGVjb2RlR2VuZXJpYz1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO3JldHVyblwic2VxXCI9PT10fHxcInNldFwiPT09dD9udWxsOlwic2Vxb2ZcIj09PXR8fFwic2V0b2ZcIj09PXQ/dGhpcy5fZGVjb2RlTGlzdChlLHQsbi5hcmdzWzBdLHIpOi9zdHIkLy50ZXN0KHQpP3RoaXMuX2RlY29kZVN0cihlLHQscik6XCJvYmppZFwiPT09dCYmbi5hcmdzP3RoaXMuX2RlY29kZU9iamlkKGUsbi5hcmdzWzBdLG4uYXJnc1sxXSxyKTpcIm9iamlkXCI9PT10P3RoaXMuX2RlY29kZU9iamlkKGUsbnVsbCxudWxsLHIpOlwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10P3RoaXMuX2RlY29kZVRpbWUoZSx0LHIpOlwibnVsbF9cIj09PXQ/dGhpcy5fZGVjb2RlTnVsbChlLHIpOlwiYm9vbFwiPT09dD90aGlzLl9kZWNvZGVCb29sKGUscik6XCJpbnRcIj09PXR8fFwiZW51bVwiPT09dD90aGlzLl9kZWNvZGVJbnQoZSxuLmFyZ3MmJm4uYXJnc1swXSxyKTpudWxsIT09bi51c2U/dGhpcy5fZ2V0VXNlKG4udXNlLGUuX3JlcG9ydGVyU3RhdGUub2JqKS5fZGVjb2RlKGUscik6ZS5lcnJvcihcInVua25vd24gdGFnOiBcIit0KX0sbi5wcm90b3R5cGUuX2dldFVzZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gci51c2VEZWNvZGVyPXRoaXMuX3VzZSh0LGUpLGYobnVsbD09PXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLnBhcmVudCksci51c2VEZWNvZGVyPXIudXNlRGVjb2Rlci5fYmFzZVN0YXRlLmNoaWxkcmVuWzBdLHIuaW1wbGljaXQhPT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdCYmKHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuY2xvbmUoKSxyLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1yLmltcGxpY2l0KSxyLnVzZURlY29kZXJ9LG4ucHJvdG90eXBlLl9kZWNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1udWxsLGk9ITE7cmV0dXJuIE9iamVjdC5rZXlzKHIuY2hvaWNlKS5zb21lKGZ1bmN0aW9uKG8pe3ZhciBhPXQuc2F2ZSgpLGY9ci5jaG9pY2Vbb107dHJ5e3ZhciBzPWYuX2RlY29kZSh0LGUpO2lmKHQuaXNFcnJvcihzKSlyZXR1cm4hMTtuPXt0eXBlOm8sdmFsdWU6c30saT0hMH1jYXRjaChlKXtyZXR1cm4gdC5yZXN0b3JlKGEpLCExfXJldHVybiEwfSx0aGlzKSxpP246dC5lcnJvcihcIkNob2ljZSBub3QgbWF0Y2hlZFwiKX0sbi5wcm90b3R5cGUuX2NyZWF0ZUVuY29kZXJCdWZmZXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBvKHQsdGhpcy5yZXBvcnRlcil9LG4ucHJvdG90eXBlLl9lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5kZWZhdWx0fHxuLmRlZmF1bHQhPT10KXt2YXIgaT10aGlzLl9lbmNvZGVWYWx1ZSh0LGUscik7aWYodm9pZCAwIT09aSYmIXRoaXMuX3NraXBEZWZhdWx0KGksZSxyKSlyZXR1cm4gaX19LG4ucHJvdG90eXBlLl9lbmNvZGVWYWx1ZT1mdW5jdGlvbih0LGUscil7dmFyIG49dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1uLnBhcmVudClyZXR1cm4gbi5jaGlsZHJlblswXS5fZW5jb2RlKHQsZXx8bmV3IGkpO3ZhciBvPW51bGw7aWYodGhpcy5yZXBvcnRlcj1lLG4ub3B0aW9uYWwmJnZvaWQgMD09PXQpe2lmKG51bGw9PT1uLmRlZmF1bHQpcmV0dXJuO3Q9bi5kZWZhdWx0fXZhciBhPW51bGwsZj0hMTtpZihuLmFueSlvPXRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7ZWxzZSBpZihuLmNob2ljZSlvPXRoaXMuX2VuY29kZUNob2ljZSh0LGUpO2Vsc2UgaWYobi5jb250YWlucylhPXRoaXMuX2dldFVzZShuLmNvbnRhaW5zLHIpLl9lbmNvZGUodCxlKSxmPSEwO2Vsc2UgaWYobi5jaGlsZHJlbilhPW4uY2hpbGRyZW4ubWFwKGZ1bmN0aW9uKHIpe2lmKFwibnVsbF9cIj09PXIuX2Jhc2VTdGF0ZS50YWcpcmV0dXJuIHIuX2VuY29kZShudWxsLGUsdCk7aWYobnVsbD09PXIuX2Jhc2VTdGF0ZS5rZXkpcmV0dXJuIGUuZXJyb3IoXCJDaGlsZCBzaG91bGQgaGF2ZSBhIGtleVwiKTt2YXIgbj1lLmVudGVyS2V5KHIuX2Jhc2VTdGF0ZS5rZXkpO2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgZXhwZWN0ZWQsIGJ1dCBpbnB1dCBpcyBub3Qgb2JqZWN0XCIpO3ZhciBpPXIuX2VuY29kZSh0W3IuX2Jhc2VTdGF0ZS5rZXldLGUsdCk7cmV0dXJuIGUubGVhdmVLZXkobiksaX0sdGhpcykuZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0fSksYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpO2Vsc2UgaWYoXCJzZXFvZlwiPT09bi50YWd8fFwic2V0b2ZcIj09PW4udGFnKXtpZighbi5hcmdzfHwxIT09bi5hcmdzLmxlbmd0aClyZXR1cm4gZS5lcnJvcihcIlRvbyBtYW55IGFyZ3MgZm9yIDogXCIrbi50YWcpO2lmKCFBcnJheS5pc0FycmF5KHQpKXJldHVybiBlLmVycm9yKFwic2Vxb2Yvc2V0b2YsIGJ1dCBkYXRhIGlzIG5vdCBBcnJheVwiKTt2YXIgcz10aGlzLmNsb25lKCk7cy5fYmFzZVN0YXRlLmltcGxpY2l0PW51bGwsYT10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQubWFwKGZ1bmN0aW9uKHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdGhpcy5fZ2V0VXNlKG4uYXJnc1swXSx0KS5fZW5jb2RlKHIsZSl9LHMpKX1lbHNlIG51bGwhPT1uLnVzZT9vPXRoaXMuX2dldFVzZShuLnVzZSxyKS5fZW5jb2RlKHQsZSk6KGE9dGhpcy5fZW5jb2RlUHJpbWl0aXZlKG4udGFnLHQpLGY9ITApO3ZhciBvO2lmKCFuLmFueSYmbnVsbD09PW4uY2hvaWNlKXt2YXIgdT1udWxsIT09bi5pbXBsaWNpdD9uLmltcGxpY2l0Om4udGFnLGg9bnVsbD09PW4uaW1wbGljaXQ/XCJ1bml2ZXJzYWxcIjpcImNvbnRleHRcIjtudWxsPT09dT9udWxsPT09bi51c2UmJmUuZXJyb3IoXCJUYWcgY291bGQgYmUgb21taXRlZCBvbmx5IGZvciAudXNlKClcIik6bnVsbD09PW4udXNlJiYobz10aGlzLl9lbmNvZGVDb21wb3NpdGUodSxmLGgsYSkpfXJldHVybiBudWxsIT09bi5leHBsaWNpdCYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKG4uZXhwbGljaXQsITEsXCJjb250ZXh0XCIsbykpLG99LG4ucHJvdG90eXBlLl9lbmNvZGVDaG9pY2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGUsbj1yLmNob2ljZVt0LnR5cGVdO3JldHVybiBufHxmKCExLHQudHlwZStcIiBub3QgZm91bmQgaW4gXCIrSlNPTi5zdHJpbmdpZnkoT2JqZWN0LmtleXMoci5jaG9pY2UpKSksbi5fZW5jb2RlKHQudmFsdWUsZSl9LG4ucHJvdG90eXBlLl9lbmNvZGVQcmltaXRpdmU9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7aWYoL3N0ciQvLnRlc3QodCkpcmV0dXJuIHRoaXMuX2VuY29kZVN0cihlLHQpO2lmKFwib2JqaWRcIj09PXQmJnIuYXJncylyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxyLnJldmVyc2VBcmdzWzBdLHIuYXJnc1sxXSk7aWYoXCJvYmppZFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlT2JqaWQoZSxudWxsLG51bGwpO2lmKFwiZ2VudGltZVwiPT09dHx8XCJ1dGN0aW1lXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVUaW1lKGUsdCk7aWYoXCJudWxsX1wiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlTnVsbCgpO2lmKFwiaW50XCI9PT10fHxcImVudW1cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZUludChlLHIuYXJncyYmci5yZXZlcnNlQXJnc1swXSk7aWYoXCJib29sXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVCb29sKGUpO3Rocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9pc051bXN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXlswLTkgXSokLy50ZXN0KHQpfSxuLnByb3RvdHlwZS5faXNQcmludHN0cj1mdW5jdGlvbih0KXtyZXR1cm4vXltBLVphLXowLTkgJ1xcKFxcKVxcKyxcXC1cXC5cXC86PVxcP10qJC8udGVzdCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuX3JlcG9ydGVyU3RhdGU9e29iajpudWxsLHBhdGg6W10sb3B0aW9uczp0fHx7fSxlcnJvcnM6W119fWZ1bmN0aW9uIGkodCxlKXt0aGlzLnBhdGg9dCx0aGlzLnJldGhyb3coZSl9dmFyIG89cigyKTtlLlJlcG9ydGVyPW4sbi5wcm90b3R5cGUuaXNFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl9LG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybntvYmo6dC5vYmoscGF0aExlbjp0LnBhdGgubGVuZ3RofX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO2Uub2JqPXQub2JqLGUucGF0aD1lLnBhdGguc2xpY2UoMCx0LnBhdGhMZW4pfSxuLnByb3RvdHlwZS5lbnRlcktleT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmVwb3J0ZXJTdGF0ZS5wYXRoLnB1c2godCl9LG4ucHJvdG90eXBlLmV4aXRLZXk9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC0xKX0sbi5wcm90b3R5cGUubGVhdmVLZXk9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3JlcG9ydGVyU3RhdGU7dGhpcy5leGl0S2V5KHQpLG51bGwhPT1uLm9iaiYmKG4ub2JqW2VdPXIpfSxuLnByb3RvdHlwZS5wYXRoPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5qb2luKFwiL1wiKX0sbi5wcm90b3R5cGUuZW50ZXJPYmplY3Q9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yZXBvcnRlclN0YXRlLGU9dC5vYmo7cmV0dXJuIHQub2JqPXt9LGV9LG4ucHJvdG90eXBlLmxlYXZlT2JqZWN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGUscj1lLm9iajtyZXR1cm4gZS5vYmo9dCxyfSxuLnByb3RvdHlwZS5lcnJvcj1mdW5jdGlvbih0KXt2YXIgZSxyPXRoaXMuX3JlcG9ydGVyU3RhdGUsbj10IGluc3RhbmNlb2YgaTtpZihlPW4/dDpuZXcgaShyLnBhdGgubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiW1wiK0pTT04uc3RyaW5naWZ5KHQpK1wiXVwifSkuam9pbihcIlwiKSx0Lm1lc3NhZ2V8fHQsdC5zdGFjayksIXIub3B0aW9ucy5wYXJ0aWFsKXRocm93IGU7cmV0dXJuIG58fHIuZXJyb3JzLnB1c2goZSksZX0sbi5wcm90b3R5cGUud3JhcFJlc3VsdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlO3JldHVybiBlLm9wdGlvbnMucGFydGlhbD97cmVzdWx0OnRoaXMuaXNFcnJvcih0KT9udWxsOnQsZXJyb3JzOmUuZXJyb3JzfTp0fSxvKGksRXJyb3IpLGkucHJvdG90eXBlLnJldGhyb3c9ZnVuY3Rpb24odCl7aWYodGhpcy5tZXNzYWdlPXQrXCIgYXQ6IFwiKyh0aGlzLnBhdGh8fFwiKHNoYWxsb3cpXCIpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlJiZFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLGkpLCF0aGlzLnN0YWNrKXRyeXt0aHJvdyBuZXcgRXJyb3IodGhpcy5tZXNzYWdlKX1jYXRjaCh0KXt0aGlzLnN0YWNrPXQuc3RhY2t9cmV0dXJuIHRoaXN9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMzUpO2UudGFnQ2xhc3M9ezA6XCJ1bml2ZXJzYWxcIiwxOlwiYXBwbGljYXRpb25cIiwyOlwiY29udGV4dFwiLDM6XCJwcml2YXRlXCJ9LGUudGFnQ2xhc3NCeU5hbWU9bi5fcmV2ZXJzZShlLnRhZ0NsYXNzKSxlLnRhZz17MDpcImVuZFwiLDE6XCJib29sXCIsMjpcImludFwiLDM6XCJiaXRzdHJcIiw0Olwib2N0c3RyXCIsNTpcIm51bGxfXCIsNjpcIm9iamlkXCIsNzpcIm9iakRlc2NcIiw4OlwiZXh0ZXJuYWxcIiw5OlwicmVhbFwiLDEwOlwiZW51bVwiLDExOlwiZW1iZWRcIiwxMjpcInV0ZjhzdHJcIiwxMzpcInJlbGF0aXZlT2lkXCIsMTY6XCJzZXFcIiwxNzpcInNldFwiLDE4OlwibnVtc3RyXCIsMTk6XCJwcmludHN0clwiLDIwOlwidDYxc3RyXCIsMjE6XCJ2aWRlb3N0clwiLDIyOlwiaWE1c3RyXCIsMjM6XCJ1dGN0aW1lXCIsMjQ6XCJnZW50aW1lXCIsMjU6XCJncmFwaHN0clwiLDI2OlwiaXNvNjQ2c3RyXCIsMjc6XCJnZW5zdHJcIiwyODpcInVuaXN0clwiLDI5OlwiY2hhcnN0clwiLDMwOlwiYm1wc3RyXCJ9LGUudGFnQnlOYW1lPW4uX3JldmVyc2UoZS50YWcpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIzNiksbi5wZW09cig1ODUpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXthLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDEpLkJ1ZmZlcixhPXIoMjM2KTtpKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpLG49ZS5sYWJlbC50b1VwcGVyQ2FzZSgpLGk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLGY9LTEscz0tMSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0ubWF0Y2goaSk7aWYobnVsbCE9PWgmJmhbMl09PT1uKXtpZihmIT09LTEpe2lmKFwiRU5EXCIhPT1oWzFdKWJyZWFrO3M9dTticmVha31pZihcIkJFR0lOXCIhPT1oWzFdKWJyZWFrO2Y9dX19aWYoZj09PS0xfHxzPT09LTEpdGhyb3cgbmV3IEVycm9yKFwiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogXCIrbik7dmFyIGM9ci5zbGljZShmKzEscykuam9pbihcIlwiKTtjLnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLFwiXCIpO3ZhciBkPW5ldyBvKGMsXCJiYXNlNjRcIik7cmV0dXJuIGEucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZCxlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjM3KSxuLnBlbT1yKDU4Nyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe28uY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMjM3KTtpKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdCksbj1yLnRvU3RyaW5nKFwiYmFzZTY0XCIpLGk9W1wiLS0tLS1CRUdJTiBcIitlLmxhYmVsK1wiLS0tLS1cIl0sYT0wO2E8bi5sZW5ndGg7YSs9NjQpaS5wdXNoKG4uc2xpY2UoYSxhKzY0KSk7cmV0dXJuIGkucHVzaChcIi0tLS0tRU5EIFwiK2UubGFiZWwrXCItLS0tLVwiKSxpLmpvaW4oXCJcXG5cIil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBzLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXRbMTVdLHI9LTE7KytyPGU7KWlmKHRbcisoMTYtZSldIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhXCIpO2lmKDE2IT09ZSlyZXR1cm4gdC5zbGljZSgwLDE2LWUpfWZ1bmN0aW9uIGEoZSxyLGkpe3ZhciBvPWNbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChiW28ubW9kZV0scixpLCEwKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChiW28ubW9kZV0scixpLCEwKTpuZXcgbihiW28ubW9kZV0scixpKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9Y1t0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49cChlLCExLHIua2V5LHIuaXYpO3JldHVybiBhKHQsbi5rZXksbi5pdil9dmFyIHM9cigxMDcpLHU9cigxMDkpLGg9cigyKSxjPXIoMTUyKSxkPXIoMjQ2KSxsPXIoMjM4KSxwPXIoMTUzKTtoKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KW49dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gbyh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyx0KSk7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYodCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGV9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGU7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9O3ZhciBiPXtFQ0I6cigyNDQpLENCQzpyKDI0MCksQ0ZCOnIoMjQxKSxDRkI4OnIoMjQzKSxDRkIxOnIoMjQyKSxPRkI6cigyNDUpLENUUjpyKDEwOCksR0NNOnIoMTA4KX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDEwNykscz1yKDEwOSksdT1yKDIpLGg9cigxNTIpLGM9cigxNTMpLGQ9cigyNDYpLGw9cigyMzgpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyNDQpLENCQzpyKDI0MCksQ0ZCOnIoMjQxKSxDRkI4OnIoMjQzKSxDRkIxOnIoMjQyKSxPRkI6cigyNDUpLENUUjpyKDEwOCksR0NNOnIoMTA4KX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPSh0Lm1vZHVsdXMsdC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSksaT0oci5sZW5ndGgsYyhcInNoYTFcIikudXBkYXRlKG5ldyBlKFwiXCIpKS5kaWdlc3QoKSksYT1pLmxlbmd0aDtpZigwIT09clswXSl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3ZhciB1PXIuc2xpY2UoMSxhKzEpLGg9ci5zbGljZShhKzEpLGQ9cyh1LGYoaCxhKSksbD1zKGgsZihkLG4tYS0xKSk7aWYobyhpLGwuc2xpY2UoMCxhKSkpdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtmb3IodmFyIHA9YTswPT09bFtwXTspcCsrO2lmKDEhPT1sW3ArK10pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTtyZXR1cm4gbC5zbGljZShwKX1mdW5jdGlvbiBpKHQsZSxyKXtmb3IodmFyIG49ZS5zbGljZSgwLDIpLGk9MixvPTA7MCE9PWVbaSsrXTspaWYoaT49ZS5sZW5ndGgpe28rKzticmVha312YXIgYT1lLnNsaWNlKDIsaS0xKTtlLnNsaWNlKGktMSxpKTtpZigoXCIwMDAyXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiYhcnx8XCIwMDAxXCIhPT1uLnRvU3RyaW5nKFwiaGV4XCIpJiZyKSYmbysrLGEubGVuZ3RoPDgmJm8rKyxvKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7cmV0dXJuIGUuc2xpY2UoaSl9ZnVuY3Rpb24gbyh0LHIpe3Q9bmV3IGUodCkscj1uZXcgZShyKTt2YXIgbj0wLGk9dC5sZW5ndGg7dC5sZW5ndGghPT1yLmxlbmd0aCYmKG4rKyxpPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSk7Zm9yKHZhciBvPS0xOysrbzxpOyluKz10W29dXnJbb107cmV0dXJuIG59dmFyIGE9cigyMzMpLGY9cigyMzEpLHM9cigyNDgpLHU9cig3MCksaD1yKDIzMiksYz1yKDU5KSxkPXIoMjQ3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyLG8pe3ZhciBmO2Y9dC5wYWRkaW5nP3QucGFkZGluZzpvPzE6NDt2YXIgcz1hKHQpLGM9cy5tb2R1bHVzLmJ5dGVMZW5ndGgoKTtpZihyLmxlbmd0aD5jfHxuZXcgdShyKS5jbXAocy5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3ZhciBsO2w9bz9kKG5ldyB1KHIpLHMpOmgocixzKTt2YXIgcD1uZXcgZShjLWwubGVuZ3RoKTtpZihwLmZpbGwoMCksbD1lLmNvbmNhdChbcCxsXSxjKSw0PT09ZilyZXR1cm4gbihzLGwpO2lmKDE9PT1mKXJldHVybiBpKHMsbCxvKTtpZigzPT09ZilyZXR1cm4gbDt0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscil7dmFyIG49dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxpPXIubGVuZ3RoLG89cyhcInNoYTFcIikudXBkYXRlKG5ldyBlKFwiXCIpKS5kaWdlc3QoKSxhPW8ubGVuZ3RoLGQ9MiphO2lmKGk+bi1kLTIpdGhyb3cgbmV3IEVycm9yKFwibWVzc2FnZSB0b28gbG9uZ1wiKTt2YXIgbD1uZXcgZShuLWktZC0yKTtsLmZpbGwoMCk7dmFyIHA9bi1hLTEsYj1mKGEpLHY9aChlLmNvbmNhdChbbyxsLG5ldyBlKFsxXSkscl0scCksdShiLHApKSx5PWgoYix1KHYsYSkpO3JldHVybiBuZXcgYyhlLmNvbmNhdChbbmV3IGUoWzBdKSx5LHZdLG4pKX1mdW5jdGlvbiBpKHQscixuKXt2YXIgaT1yLmxlbmd0aCxhPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoaT5hLTExKXRocm93IG5ldyBFcnJvcihcIm1lc3NhZ2UgdG9vIGxvbmdcIik7dmFyIGY7cmV0dXJuIG4/KGY9bmV3IGUoYS1pLTMpLGYuZmlsbCgyNTUpKTpmPW8oYS1pLTMpLG5ldyBjKGUuY29uY2F0KFtuZXcgZShbMCxuPzE6Ml0pLGYsbmV3IGUoWzBdKSxyXSxhKSl9ZnVuY3Rpb24gbyh0LHIpe2Zvcih2YXIgbixpPW5ldyBlKHQpLG89MCxhPWYoMip0KSxzPTA7bzx0OylzPT09YS5sZW5ndGgmJihhPWYoMip0KSxzPTApLG49YVtzKytdLG4mJihpW28rK109bik7cmV0dXJuIGl9dmFyIGE9cigyMzMpLGY9cig2MSkscz1yKDU5KSx1PXIoMjMxKSxoPXIoMjQ4KSxjPXIoNzApLGQ9cigyNDcpLGw9cigyMzIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG87bz10LnBhZGRpbmc/dC5wYWRkaW5nOnI/MTo0O3ZhciBmLHM9YSh0KTtpZig0PT09bylmPW4ocyxlKTtlbHNlIGlmKDE9PT1vKWY9aShzLGUscik7ZWxzZXtpZigzIT09byl0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIHBhZGRpbmdcIik7aWYoZj1uZXcgYyhlKSxmLmNtcChzLm1vZHVsdXMpPj0wKXRocm93IG5ldyBFcnJvcihcImRhdGEgdG9vIGxvbmcgZm9yIG1vZHVsdXNcIil9cmV0dXJuIHI/bChmLHMpOmQoZixzKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoLTE7bj49MDtuLS0pe3ZhciBpPXRbbl07XCIuXCI9PT1pP3Quc3BsaWNlKG4sMSk6XCIuLlwiPT09aT8odC5zcGxpY2UobiwxKSxcbnIrKyk6ciYmKHQuc3BsaWNlKG4sMSksci0tKX1pZihlKWZvcig7ci0tO3IpdC51bnNoaWZ0KFwiLi5cIik7cmV0dXJuIHR9ZnVuY3Rpb24gbih0LGUpe2lmKHQuZmlsdGVyKXJldHVybiB0LmZpbHRlcihlKTtmb3IodmFyIHI9W10sbj0wO248dC5sZW5ndGg7bisrKWUodFtuXSxuLHQpJiZyLnB1c2godFtuXSk7cmV0dXJuIHJ9dmFyIGk9L14oXFwvP3wpKFtcXHNcXFNdKj8pKCg/OlxcLnsxLDJ9fFteXFwvXSs/fCkoXFwuW14uXFwvXSp8KSkoPzpbXFwvXSopJC8sbz1mdW5jdGlvbih0KXtyZXR1cm4gaS5leGVjKHQpLnNsaWNlKDEpfTtlLnJlc29sdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9XCJcIixpPSExLG89YXJndW1lbnRzLmxlbmd0aC0xO28+PS0xJiYhaTtvLS0pe3ZhciBhPW8+PTA/YXJndW1lbnRzW29dOnQuY3dkKCk7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkFyZ3VtZW50cyB0byBwYXRoLnJlc29sdmUgbXVzdCBiZSBzdHJpbmdzXCIpO2EmJihlPWErXCIvXCIrZSxpPVwiL1wiPT09YS5jaGFyQXQoMCkpfXJldHVybiBlPXIobihlLnNwbGl0KFwiL1wiKSxmdW5jdGlvbih0KXtyZXR1cm4hIXR9KSwhaSkuam9pbihcIi9cIiksKGk/XCIvXCI6XCJcIikrZXx8XCIuXCJ9LGUubm9ybWFsaXplPWZ1bmN0aW9uKHQpe3ZhciBpPWUuaXNBYnNvbHV0ZSh0KSxvPVwiL1wiPT09YSh0LC0xKTtyZXR1cm4gdD1yKG4odC5zcGxpdChcIi9cIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oXCIvXCIpLHR8fGl8fCh0PVwiLlwiKSx0JiZvJiYodCs9XCIvXCIpLChpP1wiL1wiOlwiXCIpK3R9LGUuaXNBYnNvbHV0ZT1mdW5jdGlvbih0KXtyZXR1cm5cIi9cIj09PXQuY2hhckF0KDApfSxlLmpvaW49ZnVuY3Rpb24oKXt2YXIgdD1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7cmV0dXJuIGUubm9ybWFsaXplKG4odCxmdW5jdGlvbih0LGUpe2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgdG8gcGF0aC5qb2luIG11c3QgYmUgc3RyaW5nc1wiKTtyZXR1cm4gdH0pLmpvaW4oXCIvXCIpKX0sZS5yZWxhdGl2ZT1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aCYmXCJcIj09PXRbZV07ZSsrKTtmb3IodmFyIHI9dC5sZW5ndGgtMTtyPj0wJiZcIlwiPT09dFtyXTtyLS0pO3JldHVybiBlPnI/W106dC5zbGljZShlLHItZSsxKX10PWUucmVzb2x2ZSh0KS5zdWJzdHIoMSkscj1lLnJlc29sdmUocikuc3Vic3RyKDEpO2Zvcih2YXIgaT1uKHQuc3BsaXQoXCIvXCIpKSxvPW4oci5zcGxpdChcIi9cIikpLGE9TWF0aC5taW4oaS5sZW5ndGgsby5sZW5ndGgpLGY9YSxzPTA7czxhO3MrKylpZihpW3NdIT09b1tzXSl7Zj1zO2JyZWFrfWZvcih2YXIgdT1bXSxzPWY7czxpLmxlbmd0aDtzKyspdS5wdXNoKFwiLi5cIik7cmV0dXJuIHU9dS5jb25jYXQoby5zbGljZShmKSksdS5qb2luKFwiL1wiKX0sZS5zZXA9XCIvXCIsZS5kZWxpbWl0ZXI9XCI6XCIsZS5kaXJuYW1lPWZ1bmN0aW9uKHQpe3ZhciBlPW8odCkscj1lWzBdLG49ZVsxXTtyZXR1cm4gcnx8bj8obiYmKG49bi5zdWJzdHIoMCxuLmxlbmd0aC0xKSkscituKTpcIi5cIn0sZS5iYXNlbmFtZT1mdW5jdGlvbih0LGUpe3ZhciByPW8odClbMl07cmV0dXJuIGUmJnIuc3Vic3RyKC0xKmUubGVuZ3RoKT09PWUmJihyPXIuc3Vic3RyKDAsci5sZW5ndGgtZS5sZW5ndGgpKSxyfSxlLmV4dG5hbWU9ZnVuY3Rpb24odCl7cmV0dXJuIG8odClbM119O3ZhciBhPVwiYlwiPT09XCJhYlwiLnN1YnN0cigtMSk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0LnN1YnN0cihlLHIpfTpmdW5jdGlvbih0LGUscil7cmV0dXJuIGU8MCYmKGU9dC5sZW5ndGgrZSksdC5zdWJzdHIoZSxyKX19KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoNTEpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbigpe3RoaXMuaGVhZD1udWxsLHRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9dmFyIGk9KHIoMSkuQnVmZmVyLHIoMTU2KSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0KXt2YXIgZT17ZGF0YTp0LG5leHQ6bnVsbH07dGhpcy5sZW5ndGg+MD90aGlzLnRhaWwubmV4dD1lOnRoaXMuaGVhZD1lLHRoaXMudGFpbD1lLCsrdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnVuc2hpZnQ9ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0OnRoaXMuaGVhZH07MD09PXRoaXMubGVuZ3RoJiYodGhpcy50YWlsPWUpLHRoaXMuaGVhZD1lLCsrdGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnNoaWZ0PWZ1bmN0aW9uKCl7aWYoMCE9PXRoaXMubGVuZ3RoKXt2YXIgdD10aGlzLmhlYWQuZGF0YTtyZXR1cm4gMT09PXRoaXMubGVuZ3RoP3RoaXMuaGVhZD10aGlzLnRhaWw9bnVsbDp0aGlzLmhlYWQ9dGhpcy5oZWFkLm5leHQsLS10aGlzLmxlbmd0aCx0fX0sbi5wcm90b3R5cGUuY2xlYXI9ZnVuY3Rpb24oKXt0aGlzLmhlYWQ9dGhpcy50YWlsPW51bGwsdGhpcy5sZW5ndGg9MH0sbi5wcm90b3R5cGUuam9pbj1mdW5jdGlvbih0KXtpZigwPT09dGhpcy5sZW5ndGgpcmV0dXJuXCJcIjtmb3IodmFyIGU9dGhpcy5oZWFkLHI9XCJcIitlLmRhdGE7ZT1lLm5leHQ7KXIrPXQrZS5kYXRhO3JldHVybiByfSxuLnByb3RvdHlwZS5jb25jYXQ9ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVybiBpLmFsbG9jKDApO2lmKDE9PT10aGlzLmxlbmd0aClyZXR1cm4gdGhpcy5oZWFkLmRhdGE7Zm9yKHZhciBlPWkuYWxsb2NVbnNhZmUodD4+PjApLHI9dGhpcy5oZWFkLG49MDtyOylyLmRhdGEuY29weShlLG4pLG4rPXIuZGF0YS5sZW5ndGgscj1yLm5leHQ7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PXIuY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gcih0LGUpe2Z1bmN0aW9uIHIoKXtpZighaSl7aWYobihcInRocm93RGVwcmVjYXRpb25cIikpdGhyb3cgbmV3IEVycm9yKGUpO24oXCJ0cmFjZURlcHJlY2F0aW9uXCIpP2NvbnNvbGUudHJhY2UoZSk6Y29uc29sZS53YXJuKGUpLGk9ITB9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKG4oXCJub0RlcHJlY2F0aW9uXCIpKXJldHVybiB0O3ZhciBpPSExO3JldHVybiByfWZ1bmN0aW9uIG4odCl7dHJ5e2lmKCFlLmxvY2FsU3RvcmFnZSlyZXR1cm4hMX1jYXRjaCh0KXtyZXR1cm4hMX12YXIgcj1lLmxvY2FsU3RvcmFnZVt0XTtyZXR1cm4gbnVsbCE9ciYmXCJ0cnVlXCI9PT1TdHJpbmcocikudG9Mb3dlckNhc2UoKX10LmV4cG9ydHM9cn0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cigyNDkpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKG4pe3ZhciBpPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiByKDMxKX1jYXRjaCh0KXt9fSgpO2U9dC5leHBvcnRzPXIoMjUwKSxlLlN0cmVhbT1pfHxlLGUuUmVhZGFibGU9ZSxlLldyaXRhYmxlPXIoMTU1KSxlLkR1cGxleD1yKDUxKSxlLlRyYW5zZm9ybT1yKDE1NCksZS5QYXNzVGhyb3VnaD1yKDI0OSksIW4uYnJvd3NlciYmXCJkaXNhYmxlXCI9PT1uLmVudi5SRUFEQUJMRV9TVFJFQU0mJmkmJih0LmV4cG9ydHM9aSl9KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoMTU0KX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDE1NSl9LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gdCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuY29weSYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5maWxsJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnJlYWRVSW50OH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCxuKXtmdW5jdGlvbiBpKHQscil7dmFyIG49e3NlZW46W10sc3R5bGl6ZTphfTtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD49MyYmKG4uZGVwdGg9YXJndW1lbnRzWzJdKSxhcmd1bWVudHMubGVuZ3RoPj00JiYobi5jb2xvcnM9YXJndW1lbnRzWzNdKSxiKHIpP24uc2hvd0hpZGRlbj1yOnImJmUuX2V4dGVuZChuLHIpLF8obi5zaG93SGlkZGVuKSYmKG4uc2hvd0hpZGRlbj0hMSksXyhuLmRlcHRoKSYmKG4uZGVwdGg9MiksXyhuLmNvbG9ycykmJihuLmNvbG9ycz0hMSksXyhuLmN1c3RvbUluc3BlY3QpJiYobi5jdXN0b21JbnNwZWN0PSEwKSxuLmNvbG9ycyYmKG4uc3R5bGl6ZT1vKSxzKG4sdCxuLmRlcHRoKX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9aS5zdHlsZXNbZV07cmV0dXJuIHI/XCJcdTAwMWJbXCIraS5jb2xvcnNbcl1bMF0rXCJtXCIrdCtcIlx1MDAxYltcIitpLmNvbG9yc1tyXVsxXStcIm1cIjp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm4gdH1mdW5jdGlvbiBmKHQpe3ZhciBlPXt9O3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24odCxyKXtlW3RdPSEwfSksZX1mdW5jdGlvbiBzKHQscixuKXtpZih0LmN1c3RvbUluc3BlY3QmJnImJmsoci5pbnNwZWN0KSYmci5pbnNwZWN0IT09ZS5pbnNwZWN0JiYoIXIuY29uc3RydWN0b3J8fHIuY29uc3RydWN0b3IucHJvdG90eXBlIT09cikpe3ZhciBpPXIuaW5zcGVjdChuLHQpO3JldHVybiBnKGkpfHwoaT1zKHQsaSxuKSksaX12YXIgbz11KHQscik7aWYobylyZXR1cm4gbzt2YXIgYT1PYmplY3Qua2V5cyhyKSxiPWYoYSk7aWYodC5zaG93SGlkZGVuJiYoYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhyKSksQShyKSYmKGEuaW5kZXhPZihcIm1lc3NhZ2VcIik+PTB8fGEuaW5kZXhPZihcImRlc2NyaXB0aW9uXCIpPj0wKSlyZXR1cm4gaChyKTtpZigwPT09YS5sZW5ndGgpe2lmKGsocikpe3ZhciB2PXIubmFtZT9cIjogXCIrci5uYW1lOlwiXCI7cmV0dXJuIHQuc3R5bGl6ZShcIltGdW5jdGlvblwiK3YrXCJdXCIsXCJzcGVjaWFsXCIpfWlmKE0ocikpcmV0dXJuIHQuc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJyZWdleHBcIik7aWYoRShyKSlyZXR1cm4gdC5zdHlsaXplKERhdGUucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJkYXRlXCIpO2lmKEEocikpcmV0dXJuIGgocil9dmFyIHk9XCJcIixtPSExLHc9W1wie1wiLFwifVwiXTtpZihwKHIpJiYobT0hMCx3PVtcIltcIixcIl1cIl0pLGsocikpe3ZhciBfPXIubmFtZT9cIjogXCIrci5uYW1lOlwiXCI7eT1cIiBbRnVuY3Rpb25cIitfK1wiXVwifWlmKE0ocikmJih5PVwiIFwiK1JlZ0V4cC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChyKSksRShyKSYmKHk9XCIgXCIrRGF0ZS5wcm90b3R5cGUudG9VVENTdHJpbmcuY2FsbChyKSksQShyKSYmKHk9XCIgXCIraChyKSksMD09PWEubGVuZ3RoJiYoIW18fDA9PXIubGVuZ3RoKSlyZXR1cm4gd1swXSt5K3dbMV07aWYobjwwKXJldHVybiBNKHIpP3Quc3R5bGl6ZShSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwociksXCJyZWdleHBcIik6dC5zdHlsaXplKFwiW09iamVjdF1cIixcInNwZWNpYWxcIik7dC5zZWVuLnB1c2gocik7dmFyIFM7cmV0dXJuIFM9bT9jKHQscixuLGIsYSk6YS5tYXAoZnVuY3Rpb24oZSl7cmV0dXJuIGQodCxyLG4sYixlLG0pfSksdC5zZWVuLnBvcCgpLGwoUyx5LHcpfWZ1bmN0aW9uIHUodCxlKXtpZihfKGUpKXJldHVybiB0LnN0eWxpemUoXCJ1bmRlZmluZWRcIixcInVuZGVmaW5lZFwiKTtpZihnKGUpKXt2YXIgcj1cIidcIitKU09OLnN0cmluZ2lmeShlKS5yZXBsYWNlKC9eXCJ8XCIkL2csXCJcIikucmVwbGFjZSgvJy9nLFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykrXCInXCI7cmV0dXJuIHQuc3R5bGl6ZShyLFwic3RyaW5nXCIpfXJldHVybiBtKGUpP3Quc3R5bGl6ZShcIlwiK2UsXCJudW1iZXJcIik6YihlKT90LnN0eWxpemUoXCJcIitlLFwiYm9vbGVhblwiKTp2KGUpP3Quc3R5bGl6ZShcIm51bGxcIixcIm51bGxcIik6dm9pZCAwfWZ1bmN0aW9uIGgodCl7cmV0dXJuXCJbXCIrRXJyb3IucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodCkrXCJdXCJ9ZnVuY3Rpb24gYyh0LGUscixuLGkpe2Zvcih2YXIgbz1bXSxhPTAsZj1lLmxlbmd0aDthPGY7KythKVIoZSxTdHJpbmcoYSkpP28ucHVzaChkKHQsZSxyLG4sU3RyaW5nKGEpLCEwKSk6by5wdXNoKFwiXCIpO3JldHVybiBpLmZvckVhY2goZnVuY3Rpb24oaSl7aS5tYXRjaCgvXlxcZCskLyl8fG8ucHVzaChkKHQsZSxyLG4saSwhMCkpfSksb31mdW5jdGlvbiBkKHQsZSxyLG4saSxvKXt2YXIgYSxmLHU7aWYodT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsaSl8fHt2YWx1ZTplW2ldfSx1LmdldD9mPXUuc2V0P3Quc3R5bGl6ZShcIltHZXR0ZXIvU2V0dGVyXVwiLFwic3BlY2lhbFwiKTp0LnN0eWxpemUoXCJbR2V0dGVyXVwiLFwic3BlY2lhbFwiKTp1LnNldCYmKGY9dC5zdHlsaXplKFwiW1NldHRlcl1cIixcInNwZWNpYWxcIikpLFIobixpKXx8KGE9XCJbXCIraStcIl1cIiksZnx8KHQuc2Vlbi5pbmRleE9mKHUudmFsdWUpPDA/KGY9dihyKT9zKHQsdS52YWx1ZSxudWxsKTpzKHQsdS52YWx1ZSxyLTEpLGYuaW5kZXhPZihcIlxcblwiKT4tMSYmKGY9bz9mLnNwbGl0KFwiXFxuXCIpLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIiAgXCIrdH0pLmpvaW4oXCJcXG5cIikuc3Vic3RyKDIpOlwiXFxuXCIrZi5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgICBcIit0fSkuam9pbihcIlxcblwiKSkpOmY9dC5zdHlsaXplKFwiW0NpcmN1bGFyXVwiLFwic3BlY2lhbFwiKSksXyhhKSl7aWYobyYmaS5tYXRjaCgvXlxcZCskLykpcmV0dXJuIGY7YT1KU09OLnN0cmluZ2lmeShcIlwiK2kpLGEubWF0Y2goL15cIihbYS16QS1aX11bYS16QS1aXzAtOV0qKVwiJC8pPyhhPWEuc3Vic3RyKDEsYS5sZW5ndGgtMiksYT10LnN0eWxpemUoYSxcIm5hbWVcIikpOihhPWEucmVwbGFjZSgvJy9nLFwiXFxcXCdcIikucmVwbGFjZSgvXFxcXFwiL2csJ1wiJykucmVwbGFjZSgvKF5cInxcIiQpL2csXCInXCIpLGE9dC5zdHlsaXplKGEsXCJzdHJpbmdcIikpfXJldHVybiBhK1wiOiBcIitmfWZ1bmN0aW9uIGwodCxlLHIpe3ZhciBuPTAsaT10LnJlZHVjZShmdW5jdGlvbih0LGUpe3JldHVybiBuKyssZS5pbmRleE9mKFwiXFxuXCIpPj0wJiZuKyssdCtlLnJlcGxhY2UoL1xcdTAwMWJcXFtcXGRcXGQ/bS9nLFwiXCIpLmxlbmd0aCsxfSwwKTtyZXR1cm4gaT42MD9yWzBdKyhcIlwiPT09ZT9cIlwiOmUrXCJcXG4gXCIpK1wiIFwiK3Quam9pbihcIixcXG4gIFwiKStcIiBcIityWzFdOnJbMF0rZStcIiBcIit0LmpvaW4oXCIsIFwiKStcIiBcIityWzFdfWZ1bmN0aW9uIHAodCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCl9ZnVuY3Rpb24gYih0KXtyZXR1cm5cImJvb2xlYW5cIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gbnVsbD09PXR9ZnVuY3Rpb24geSh0KXtyZXR1cm4gbnVsbD09dH1mdW5jdGlvbiBtKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIGcodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdyh0KXtyZXR1cm5cInN5bWJvbFwiPT10eXBlb2YgdH1mdW5jdGlvbiBfKHQpe3JldHVybiB2b2lkIDA9PT10fWZ1bmN0aW9uIE0odCl7cmV0dXJuIFModCkmJlwiW29iamVjdCBSZWdFeHBdXCI9PT1JKHQpfWZ1bmN0aW9uIFModCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIEUodCl7cmV0dXJuIFModCkmJlwiW29iamVjdCBEYXRlXVwiPT09SSh0KX1mdW5jdGlvbiBBKHQpe3JldHVybiBTKHQpJiYoXCJbb2JqZWN0IEVycm9yXVwiPT09SSh0KXx8dCBpbnN0YW5jZW9mIEVycm9yKX1mdW5jdGlvbiBrKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24geCh0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9ZnVuY3Rpb24gSSh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIEIodCl7cmV0dXJuIHQ8MTA/XCIwXCIrdC50b1N0cmluZygxMCk6dC50b1N0cmluZygxMCl9ZnVuY3Rpb24gTygpe3ZhciB0PW5ldyBEYXRlLGU9W0IodC5nZXRIb3VycygpKSxCKHQuZ2V0TWludXRlcygpKSxCKHQuZ2V0U2Vjb25kcygpKV0uam9pbihcIjpcIik7cmV0dXJuW3QuZ2V0RGF0ZSgpLENbdC5nZXRNb250aCgpXSxlXS5qb2luKFwiIFwiKX1mdW5jdGlvbiBSKHQsZSl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbCh0LGUpfXZhciBQPS8lW3NkaiVdL2c7ZS5mb3JtYXQ9ZnVuY3Rpb24odCl7aWYoIWcodCkpe2Zvcih2YXIgZT1bXSxyPTA7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyllLnB1c2goaShhcmd1bWVudHNbcl0pKTtyZXR1cm4gZS5qb2luKFwiIFwiKX1mb3IodmFyIHI9MSxuPWFyZ3VtZW50cyxvPW4ubGVuZ3RoLGE9U3RyaW5nKHQpLnJlcGxhY2UoUCxmdW5jdGlvbih0KXtpZihcIiUlXCI9PT10KXJldHVyblwiJVwiO2lmKHI+PW8pcmV0dXJuIHQ7c3dpdGNoKHQpe2Nhc2VcIiVzXCI6cmV0dXJuIFN0cmluZyhuW3IrK10pO2Nhc2VcIiVkXCI6cmV0dXJuIE51bWJlcihuW3IrK10pO2Nhc2VcIiVqXCI6dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeShuW3IrK10pfWNhdGNoKHQpe3JldHVyblwiW0NpcmN1bGFyXVwifWRlZmF1bHQ6cmV0dXJuIHR9fSksZj1uW3JdO3I8bztmPW5bKytyXSlhKz12KGYpfHwhUyhmKT9cIiBcIitmOlwiIFwiK2koZik7cmV0dXJuIGF9LGUuZGVwcmVjYXRlPWZ1bmN0aW9uKHIsaSl7ZnVuY3Rpb24gbygpe2lmKCFhKXtpZihuLnRocm93RGVwcmVjYXRpb24pdGhyb3cgbmV3IEVycm9yKGkpO24udHJhY2VEZXByZWNhdGlvbj9jb25zb2xlLnRyYWNlKGkpOmNvbnNvbGUuZXJyb3IoaSksYT0hMH1yZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9aWYoXyh0LnByb2Nlc3MpKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmRlcHJlY2F0ZShyLGkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX07aWYobi5ub0RlcHJlY2F0aW9uPT09ITApcmV0dXJuIHI7dmFyIGE9ITE7cmV0dXJuIG99O3ZhciBULGo9e307ZS5kZWJ1Z2xvZz1mdW5jdGlvbih0KXtpZihfKFQpJiYoVD1uLmVudi5OT0RFX0RFQlVHfHxcIlwiKSx0PXQudG9VcHBlckNhc2UoKSwhalt0XSlpZihuZXcgUmVnRXhwKFwiXFxcXGJcIit0K1wiXFxcXGJcIixcImlcIikudGVzdChUKSl7dmFyIHI9bi5waWQ7alt0XT1mdW5jdGlvbigpe3ZhciBuPWUuZm9ybWF0LmFwcGx5KGUsYXJndW1lbnRzKTtjb25zb2xlLmVycm9yKFwiJXMgJWQ6ICVzXCIsdCxyLG4pfX1lbHNlIGpbdF09ZnVuY3Rpb24oKXt9O3JldHVybiBqW3RdfSxlLmluc3BlY3Q9aSxpLmNvbG9ycz17Ym9sZDpbMSwyMl0saXRhbGljOlszLDIzXSx1bmRlcmxpbmU6WzQsMjRdLGludmVyc2U6WzcsMjddLHdoaXRlOlszNywzOV0sZ3JleTpbOTAsMzldLGJsYWNrOlszMCwzOV0sYmx1ZTpbMzQsMzldLGN5YW46WzM2LDM5XSxncmVlbjpbMzIsMzldLG1hZ2VudGE6WzM1LDM5XSxyZWQ6WzMxLDM5XSx5ZWxsb3c6WzMzLDM5XX0saS5zdHlsZXM9e3NwZWNpYWw6XCJjeWFuXCIsbnVtYmVyOlwieWVsbG93XCIsYm9vbGVhbjpcInllbGxvd1wiLHVuZGVmaW5lZDpcImdyZXlcIixudWxsOlwiYm9sZFwiLHN0cmluZzpcImdyZWVuXCIsZGF0ZTpcIm1hZ2VudGFcIixyZWdleHA6XCJyZWRcIn0sZS5pc0FycmF5PXAsZS5pc0Jvb2xlYW49YixlLmlzTnVsbD12LGUuaXNOdWxsT3JVbmRlZmluZWQ9eSxlLmlzTnVtYmVyPW0sZS5pc1N0cmluZz1nLGUuaXNTeW1ib2w9dyxlLmlzVW5kZWZpbmVkPV8sZS5pc1JlZ0V4cD1NLGUuaXNPYmplY3Q9UyxlLmlzRGF0ZT1FLGUuaXNFcnJvcj1BLGUuaXNGdW5jdGlvbj1rLGUuaXNQcmltaXRpdmU9eCxlLmlzQnVmZmVyPXIoNjA1KTt2YXIgQz1bXCJKYW5cIixcIkZlYlwiLFwiTWFyXCIsXCJBcHJcIixcIk1heVwiLFwiSnVuXCIsXCJKdWxcIixcIkF1Z1wiLFwiU2VwXCIsXCJPY3RcIixcIk5vdlwiLFwiRGVjXCJdO2UubG9nPWZ1bmN0aW9uKCl7Y29uc29sZS5sb2coXCIlcyAtICVzXCIsTygpLGUuZm9ybWF0LmFwcGx5KGUsYXJndW1lbnRzKSl9LGUuaW5oZXJpdHM9cig2MDQpLGUuX2V4dGVuZD1mdW5jdGlvbih0LGUpe2lmKCFlfHwhUyhlKSlyZXR1cm4gdDtmb3IodmFyIHI9T2JqZWN0LmtleXMoZSksbj1yLmxlbmd0aDtuLS07KXRbcltuXV09ZVtyW25dXTtyZXR1cm4gdH19KS5jYWxsKGUscigzOSkscigyNikpfSxmdW5jdGlvbih0LGUpe3ZhciByPVtdLmluZGV4T2Y7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYocilyZXR1cm4gdC5pbmRleE9mKGUpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKHRbbl09PT1lKXJldHVybiBuO3JldHVybi0xfX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUscil7cigyNTMpLHQuZXhwb3J0cz1yKDI1Mil9XSl9KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gNFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIFNlcmlhbGl6ZXMgYSBjcnlwdG8tY29uZGl0aW9uIGNsYXNzIChDb25kaXRpb24gb3IgRnVsZmlsbG1lbnQpIGludG8gYSBCaWdjaGFpbkRCLWNvbXBhdGlibGUgSlNPTlxuICogQHBhcmFtIHtjYy5GdWxmaWxsbWVudH0gZnVsZmlsbG1lbnQgYmFzZTU4IGVuY29kZWQgRWQyNTUxOSBwdWJsaWMga2V5IGZvciB0aGUgcmVjaXBpZW50IG9mIHRoZSBUcmFuc2FjdGlvblxuICogQHJldHVybnMge29iamVjdH0gRWQyNTUxOSBDb25kaXRpb24gKHRoYXQgd2lsbCBuZWVkIHRvIHdyYXBwZWQgaW4gYW4gT3V0cHV0KVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBjY0pzb25pZnkoZnVsZmlsbG1lbnQpIHtcblxuICAgIGxldCBjb25kaXRpb25Vcmk7XG5cbiAgICBpZiAoJ2dldENvbmRpdGlvblVyaScgaW4gZnVsZmlsbG1lbnQpXG4gICAgICAgIGNvbmRpdGlvblVyaSA9IGZ1bGZpbGxtZW50LmdldENvbmRpdGlvblVyaSgpO1xuICAgIGVsc2UgaWYgKCdzZXJpYWxpemVVcmknIGluIGZ1bGZpbGxtZW50KVxuICAgICAgICBjb25kaXRpb25VcmkgPSBmdWxmaWxsbWVudC5zZXJpYWxpemVVcmkoKTtcblxuICAgIGxldCBqc29uQm9keSA9IHtcbiAgICAgICAgJ2RldGFpbHMnOiB7fSxcbiAgICAgICAgJ3VyaSc6IGNvbmRpdGlvblVyaSxcbiAgICB9O1xuXG4gICAgaWYgKGZ1bGZpbGxtZW50LmdldFR5cGVJZCgpID09PSAwKSB7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZV9pZCA9IDA7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMuYml0bWFzayA9IDM7XG5cbiAgICAgICAgaWYgKCdwcmVpbWFnZScgaW4gZnVsZmlsbG1lbnQpIHtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMucHJlaW1hZ2UgPSBmdWxmaWxsbWVudC5wcmVpbWFnZS50b1N0cmluZygpO1xuICAgICAgICAgICAganNvbkJvZHkuZGV0YWlscy50eXBlID0gJ2Z1bGZpbGxtZW50JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmIChmdWxmaWxsbWVudC5nZXRUeXBlSWQoKSA9PT0gMilcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICdkZXRhaWxzJzoge1xuICAgICAgICAgICAgICAgICd0eXBlX2lkJzogMixcbiAgICAgICAgICAgICAgICAndHlwZSc6ICdmdWxmaWxsbWVudCcsXG4gICAgICAgICAgICAgICAgJ2JpdG1hc2snOiBmdWxmaWxsbWVudC5nZXRCaXRtYXNrKCksXG4gICAgICAgICAgICAgICAgJ3RocmVzaG9sZCc6IGZ1bGZpbGxtZW50LnRocmVzaG9sZCxcbiAgICAgICAgICAgICAgICAnc3ViZnVsZmlsbG1lbnRzJzogZnVsZmlsbG1lbnQuc3ViY29uZGl0aW9ucy5tYXAoKHN1YmNvbmRpdGlvbikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBzdWJjb25kaXRpb25Kc29uID0gY2NKc29uaWZ5KHN1YmNvbmRpdGlvbi5ib2R5KTtcbiAgICAgICAgICAgICAgICAgICAgc3ViY29uZGl0aW9uSnNvbi5kZXRhaWxzLndlaWdodCA9IDE7XG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzdWJjb25kaXRpb25Kc29uLmRldGFpbHM7XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgIH0sXG4gICAgICAgICAgICAndXJpJzogY29uZGl0aW9uVXJpLFxuICAgICAgICB9O1xuXG4gICAgaWYgKGZ1bGZpbGxtZW50LmdldFR5cGVJZCgpID09PSA0KSB7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZV9pZCA9IDQ7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMuYml0bWFzayA9IDMyO1xuXG4gICAgICAgIGlmICgncHVibGljS2V5JyBpbiBmdWxmaWxsbWVudCkge1xuICAgICAgICAgICAganNvbkJvZHkuZGV0YWlscy5zaWduYXR1cmUgPSBudWxsO1xuICAgICAgICAgICAganNvbkJvZHkuZGV0YWlscy5wdWJsaWNfa2V5ID0gYmFzZTU4LmVuY29kZShmdWxmaWxsbWVudC5wdWJsaWNLZXkpO1xuICAgICAgICAgICAganNvbkJvZHkuZGV0YWlscy50eXBlID0gJ2Z1bGZpbGxtZW50JztcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGlmICgnaGFzaCcgaW4gZnVsZmlsbG1lbnQpIHtcbiAgICAgICAganNvbkJvZHkuZGV0YWlscy5oYXNoID0gYmFzZTU4LmVuY29kZShmdWxmaWxsbWVudC5oYXNoKTtcbiAgICAgICAganNvbkJvZHkuZGV0YWlscy5tYXhfZnVsZmlsbG1lbnRfbGVuZ3RoID0gZnVsZmlsbG1lbnQubWF4RnVsZmlsbG1lbnRMZW5ndGg7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZSA9ICdjb25kaXRpb24nO1xuICAgIH1cblxuICAgIHJldHVybiBqc29uQm9keTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi91dGlscy9jY0pzb25pZnkuanMiLCJpbXBvcnQgaGFzaFRyYW5zYWN0aW9uIGZyb20gJy4vaGFzaFRyYW5zYWN0aW9uJztcblxuXG5mdW5jdGlvbiBtYWtlVHJhbnNhY3Rpb25UZW1wbGF0ZSgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAnaWQnOiBudWxsLFxuICAgICAgICAnb3BlcmF0aW9uJzogbnVsbCxcbiAgICAgICAgJ291dHB1dHMnOiBbXSxcbiAgICAgICAgJ2lucHV0cyc6IFtdLFxuICAgICAgICAnbWV0YWRhdGEnOiBudWxsLFxuICAgICAgICAnYXNzZXQnOiBudWxsLFxuICAgICAgICAndmVyc2lvbic6ICcwLjknLFxuICAgIH07XG59XG5cblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRyYW5zYWN0aW9uKG9wZXJhdGlvbiwgYXNzZXQsIG1ldGFkYXRhID0gbnVsbCwgb3V0cHV0cyA9IFtdLCBpbnB1dHMgPSBbXSkge1xuICAgIGNvbnN0IHR4ID0gbWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUoKTtcbiAgICB0eC5vcGVyYXRpb24gPSBvcGVyYXRpb247XG4gICAgdHguYXNzZXQgPSBhc3NldDtcbiAgICB0eC5tZXRhZGF0YSA9IG1ldGFkYXRhO1xuICAgIHR4LmlucHV0cyA9IGlucHV0cztcbiAgICB0eC5vdXRwdXRzID0gb3V0cHV0cztcblxuICAgIC8vIEhhc2hpbmcgbXVzdCBiZSBkb25lIGFmdGVyLCBhcyB0aGUgaGFzaCBpcyBvZiB0aGUgVHJhbnNhY3Rpb24gKHVwIHRvIG5vdylcbiAgICB0eC5pZCA9IGhhc2hUcmFuc2FjdGlvbih0eCk7XG4gICAgcmV0dXJuIHR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2FjdGlvbi5qcyIsImltcG9ydCBzdGFibGVTdHJpbmdpZnkgZnJvbSAnanNvbi1zdGFibGUtc3RyaW5naWZ5JztcbmltcG9ydCBjbG9uZSBmcm9tICdjbG9uZSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDYW5vbmljYWxseSBzZXJpYWxpemVzIGEgdHJhbnNhY3Rpb24gaW50byBhIHN0cmluZyBieSBzb3J0aW5nIHRoZSBrZXlzXG4gKiBAcGFyYW0ge29iamVjdH0gKHRyYW5zYWN0aW9uKVxuICogQHJldHVybiB7c3RyaW5nfSBhIGNhbm9uaWNhbGx5IHNlcmlhbGl6ZWQgVHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nKHRyYW5zYWN0aW9uKSB7XG4gICAgLy8gQmlnY2hhaW5EQiBzaWducyBmdWxmaWxsbWVudHMgYnkgc2VyaWFsaXppbmcgdHJhbnNhY3Rpb25zIGludG8gYSBcImNhbm9uaWNhbFwiIGZvcm1hdCB3aGVyZVxuICAgIGNvbnN0IHR4ID0gY2xvbmUodHJhbnNhY3Rpb24pO1xuICAgIC8vIFRPRE86IHNldCBmdWxmaWxsbWVudHMgdG8gbnVsbFxuICAgIC8vIFNvcnQgdGhlIGtleXNcbiAgICByZXR1cm4gc3RhYmxlU3RyaW5naWZ5KHR4LCAoYSwgYikgPT4gKGEua2V5ID4gYi5rZXkgPyAxIDogLTEpKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vc2VyaWFsaXplVHJhbnNhY3Rpb25JbnRvQ2Fub25pY2FsU3RyaW5nLmpzIiwidmFyIGNvcmUgPSBtb2R1bGUuZXhwb3J0cyA9IHt2ZXJzaW9uOiAnMi40LjAnfTtcbmlmKHR5cGVvZiBfX2UgPT0gJ251bWJlcicpX19lID0gY29yZTsgLy8gZXNsaW50LWRpc2FibGUtbGluZSBuby11bmRlZlxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fY29yZS5qc1xuLy8gbW9kdWxlIGlkID0gOFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBUaGFuaydzIElFOCBmb3IgaGlzIGZ1bm55IGRlZmluZVByb3BlcnR5XG5tb2R1bGUuZXhwb3J0cyA9ICFyZXF1aXJlKCcuL19mYWlscycpKGZ1bmN0aW9uKCl7XG4gIHJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sICdhJywge2dldDogZnVuY3Rpb24oKXsgcmV0dXJuIDc7IH19KS5hICE9IDc7XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzXG4vLyBtb2R1bGUgaWQgPSA5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGh0dHBzOi8vZ2l0aHViLmNvbS96bG9pcm9jay9jb3JlLWpzL2lzc3Vlcy84NiNpc3N1ZWNvbW1lbnQtMTE1NzU5MDI4XG52YXIgZ2xvYmFsID0gbW9kdWxlLmV4cG9ydHMgPSB0eXBlb2Ygd2luZG93ICE9ICd1bmRlZmluZWQnICYmIHdpbmRvdy5NYXRoID09IE1hdGhcbiAgPyB3aW5kb3cgOiB0eXBlb2Ygc2VsZiAhPSAndW5kZWZpbmVkJyAmJiBzZWxmLk1hdGggPT0gTWF0aCA/IHNlbGYgOiBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuaWYodHlwZW9mIF9fZyA9PSAnbnVtYmVyJylfX2cgPSBnbG9iYWw7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCl7XG4gIHJldHVybiB0eXBlb2YgaXQgPT09ICdvYmplY3QnID8gaXQgIT09IG51bGwgOiB0eXBlb2YgaXQgPT09ICdmdW5jdGlvbic7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faXMtb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSAxMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyB0byBpbmRleGVkIG9iamVjdCwgdG9PYmplY3Qgd2l0aCBmYWxsYmFjayBmb3Igbm9uLWFycmF5LWxpa2UgRVMzIHN0cmluZ3NcbnZhciBJT2JqZWN0ID0gcmVxdWlyZSgnLi9faW9iamVjdCcpXG4gICwgZGVmaW5lZCA9IHJlcXVpcmUoJy4vX2RlZmluZWQnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gSU9iamVjdChkZWZpbmVkKGl0KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gc2hpbSBmb3IgdXNpbmcgcHJvY2VzcyBpbiBicm93c2VyXG52YXIgcHJvY2VzcyA9IG1vZHVsZS5leHBvcnRzID0ge307XG5cbi8vIGNhY2hlZCBmcm9tIHdoYXRldmVyIGdsb2JhbCBpcyBwcmVzZW50IHNvIHRoYXQgdGVzdCBydW5uZXJzIHRoYXQgc3R1YiBpdFxuLy8gZG9uJ3QgYnJlYWsgdGhpbmdzLiAgQnV0IHdlIG5lZWQgdG8gd3JhcCBpdCBpbiBhIHRyeSBjYXRjaCBpbiBjYXNlIGl0IGlzXG4vLyB3cmFwcGVkIGluIHN0cmljdCBtb2RlIGNvZGUgd2hpY2ggZG9lc24ndCBkZWZpbmUgYW55IGdsb2JhbHMuICBJdCdzIGluc2lkZSBhXG4vLyBmdW5jdGlvbiBiZWNhdXNlIHRyeS9jYXRjaGVzIGRlb3B0aW1pemUgaW4gY2VydGFpbiBlbmdpbmVzLlxuXG52YXIgY2FjaGVkU2V0VGltZW91dDtcbnZhciBjYWNoZWRDbGVhclRpbWVvdXQ7XG5cbmZ1bmN0aW9uIGRlZmF1bHRTZXRUaW1vdXQoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkJyk7XG59XG5mdW5jdGlvbiBkZWZhdWx0Q2xlYXJUaW1lb3V0ICgpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2NsZWFyVGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuKGZ1bmN0aW9uICgpIHtcbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIHNldFRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IGRlZmF1bHRTZXRUaW1vdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICBpZiAodHlwZW9mIGNsZWFyVGltZW91dCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICAgICAgfVxuICAgIH0gY2F0Y2ggKGUpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gZGVmYXVsdENsZWFyVGltZW91dDtcbiAgICB9XG59ICgpKVxuZnVuY3Rpb24gcnVuVGltZW91dChmdW4pIHtcbiAgICBpZiAoY2FjaGVkU2V0VGltZW91dCA9PT0gc2V0VGltZW91dCkge1xuICAgICAgICAvL25vcm1hbCBlbnZpcm9tZW50cyBpbiBzYW5lIHNpdHVhdGlvbnNcbiAgICAgICAgcmV0dXJuIHNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9XG4gICAgLy8gaWYgc2V0VGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZFNldFRpbWVvdXQgPT09IGRlZmF1bHRTZXRUaW1vdXQgfHwgIWNhY2hlZFNldFRpbWVvdXQpICYmIHNldFRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkU2V0VGltZW91dCA9IHNldFRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQoZnVuLCAwKTtcbiAgICB9IGNhdGNoKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0IHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkU2V0VGltZW91dC5jYWxsKG51bGwsIGZ1biwgMCk7XG4gICAgICAgIH0gY2F0Y2goZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvclxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbCh0aGlzLCBmdW4sIDApO1xuICAgICAgICB9XG4gICAgfVxuXG5cbn1cbmZ1bmN0aW9uIHJ1bkNsZWFyVGltZW91dChtYXJrZXIpIHtcbiAgICBpZiAoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgLy8gaWYgY2xlYXJUaW1lb3V0IHdhc24ndCBhdmFpbGFibGUgYnV0IHdhcyBsYXR0ZXIgZGVmaW5lZFxuICAgIGlmICgoY2FjaGVkQ2xlYXJUaW1lb3V0ID09PSBkZWZhdWx0Q2xlYXJUaW1lb3V0IHx8ICFjYWNoZWRDbGVhclRpbWVvdXQpICYmIGNsZWFyVGltZW91dCkge1xuICAgICAgICBjYWNoZWRDbGVhclRpbWVvdXQgPSBjbGVhclRpbWVvdXQ7XG4gICAgICAgIHJldHVybiBjbGVhclRpbWVvdXQobWFya2VyKTtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgLy8gd2hlbiB3aGVuIHNvbWVib2R5IGhhcyBzY3Jld2VkIHdpdGggc2V0VGltZW91dCBidXQgbm8gSS5FLiBtYWRkbmVzc1xuICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfSBjYXRjaCAoZSl7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICAvLyBXaGVuIHdlIGFyZSBpbiBJLkUuIGJ1dCB0aGUgc2NyaXB0IGhhcyBiZWVuIGV2YWxlZCBzbyBJLkUuIGRvZXNuJ3QgIHRydXN0IHRoZSBnbG9iYWwgb2JqZWN0IHdoZW4gY2FsbGVkIG5vcm1hbGx5XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwobnVsbCwgbWFya2VyKTtcbiAgICAgICAgfSBjYXRjaCAoZSl7XG4gICAgICAgICAgICAvLyBzYW1lIGFzIGFib3ZlIGJ1dCB3aGVuIGl0J3MgYSB2ZXJzaW9uIG9mIEkuRS4gdGhhdCBtdXN0IGhhdmUgdGhlIGdsb2JhbCBvYmplY3QgZm9yICd0aGlzJywgaG9wZnVsbHkgb3VyIGNvbnRleHQgY29ycmVjdCBvdGhlcndpc2UgaXQgd2lsbCB0aHJvdyBhIGdsb2JhbCBlcnJvci5cbiAgICAgICAgICAgIC8vIFNvbWUgdmVyc2lvbnMgb2YgSS5FLiBoYXZlIGRpZmZlcmVudCBydWxlcyBmb3IgY2xlYXJUaW1lb3V0IHZzIHNldFRpbWVvdXRcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRDbGVhclRpbWVvdXQuY2FsbCh0aGlzLCBtYXJrZXIpO1xuICAgICAgICB9XG4gICAgfVxuXG5cblxufVxudmFyIHF1ZXVlID0gW107XG52YXIgZHJhaW5pbmcgPSBmYWxzZTtcbnZhciBjdXJyZW50UXVldWU7XG52YXIgcXVldWVJbmRleCA9IC0xO1xuXG5mdW5jdGlvbiBjbGVhblVwTmV4dFRpY2soKSB7XG4gICAgaWYgKCFkcmFpbmluZyB8fCAhY3VycmVudFF1ZXVlKSB7XG4gICAgICAgIHJldHVybjtcbiAgICB9XG4gICAgZHJhaW5pbmcgPSBmYWxzZTtcbiAgICBpZiAoY3VycmVudFF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBxdWV1ZSA9IGN1cnJlbnRRdWV1ZS5jb25jYXQocXVldWUpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICB9XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCkge1xuICAgICAgICBkcmFpblF1ZXVlKCk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBkcmFpblF1ZXVlKCkge1xuICAgIGlmIChkcmFpbmluZykge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIHZhciB0aW1lb3V0ID0gcnVuVGltZW91dChjbGVhblVwTmV4dFRpY2spO1xuICAgIGRyYWluaW5nID0gdHJ1ZTtcblxuICAgIHZhciBsZW4gPSBxdWV1ZS5sZW5ndGg7XG4gICAgd2hpbGUobGVuKSB7XG4gICAgICAgIGN1cnJlbnRRdWV1ZSA9IHF1ZXVlO1xuICAgICAgICBxdWV1ZSA9IFtdO1xuICAgICAgICB3aGlsZSAoKytxdWV1ZUluZGV4IDwgbGVuKSB7XG4gICAgICAgICAgICBpZiAoY3VycmVudFF1ZXVlKSB7XG4gICAgICAgICAgICAgICAgY3VycmVudFF1ZXVlW3F1ZXVlSW5kZXhdLnJ1bigpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHF1ZXVlSW5kZXggPSAtMTtcbiAgICAgICAgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIH1cbiAgICBjdXJyZW50UXVldWUgPSBudWxsO1xuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgcnVuQ2xlYXJUaW1lb3V0KHRpbWVvdXQpO1xufVxuXG5wcm9jZXNzLm5leHRUaWNrID0gZnVuY3Rpb24gKGZ1bikge1xuICAgIHZhciBhcmdzID0gbmV3IEFycmF5KGFyZ3VtZW50cy5sZW5ndGggLSAxKTtcbiAgICBpZiAoYXJndW1lbnRzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBhcmd1bWVudHMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGFyZ3NbaSAtIDFdID0gYXJndW1lbnRzW2ldO1xuICAgICAgICB9XG4gICAgfVxuICAgIHF1ZXVlLnB1c2gobmV3IEl0ZW0oZnVuLCBhcmdzKSk7XG4gICAgaWYgKHF1ZXVlLmxlbmd0aCA9PT0gMSAmJiAhZHJhaW5pbmcpIHtcbiAgICAgICAgcnVuVGltZW91dChkcmFpblF1ZXVlKTtcbiAgICB9XG59O1xuXG4vLyB2OCBsaWtlcyBwcmVkaWN0aWJsZSBvYmplY3RzXG5mdW5jdGlvbiBJdGVtKGZ1biwgYXJyYXkpIHtcbiAgICB0aGlzLmZ1biA9IGZ1bjtcbiAgICB0aGlzLmFycmF5ID0gYXJyYXk7XG59XG5JdGVtLnByb3RvdHlwZS5ydW4gPSBmdW5jdGlvbiAoKSB7XG4gICAgdGhpcy5mdW4uYXBwbHkobnVsbCwgdGhpcy5hcnJheSk7XG59O1xucHJvY2Vzcy50aXRsZSA9ICdicm93c2VyJztcbnByb2Nlc3MuYnJvd3NlciA9IHRydWU7XG5wcm9jZXNzLmVudiA9IHt9O1xucHJvY2Vzcy5hcmd2ID0gW107XG5wcm9jZXNzLnZlcnNpb24gPSAnJzsgLy8gZW1wdHkgc3RyaW5nIHRvIGF2b2lkIHJlZ2V4cCBpc3N1ZXNcbnByb2Nlc3MudmVyc2lvbnMgPSB7fTtcblxuZnVuY3Rpb24gbm9vcCgpIHt9XG5cbnByb2Nlc3Mub24gPSBub29wO1xucHJvY2Vzcy5hZGRMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLm9uY2UgPSBub29wO1xucHJvY2Vzcy5vZmYgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVMaXN0ZW5lciA9IG5vb3A7XG5wcm9jZXNzLnJlbW92ZUFsbExpc3RlbmVycyA9IG5vb3A7XG5wcm9jZXNzLmVtaXQgPSBub29wO1xuXG5wcm9jZXNzLmJpbmRpbmcgPSBmdW5jdGlvbiAobmFtZSkge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5iaW5kaW5nIGlzIG5vdCBzdXBwb3J0ZWQnKTtcbn07XG5cbnByb2Nlc3MuY3dkID0gZnVuY3Rpb24gKCkgeyByZXR1cm4gJy8nIH07XG5wcm9jZXNzLmNoZGlyID0gZnVuY3Rpb24gKGRpcikge1xuICAgIHRocm93IG5ldyBFcnJvcigncHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xucHJvY2Vzcy51bWFzayA9IGZ1bmN0aW9uKCkgeyByZXR1cm4gMDsgfTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9wcm9jZXNzL2Jyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDEzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBnO1xyXG5cclxuLy8gVGhpcyB3b3JrcyBpbiBub24tc3RyaWN0IG1vZGVcclxuZyA9IChmdW5jdGlvbigpIHtcclxuXHRyZXR1cm4gdGhpcztcclxufSkoKTtcclxuXHJcbnRyeSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiBldmFsIGlzIGFsbG93ZWQgKHNlZSBDU1ApXHJcblx0ZyA9IGcgfHwgRnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpIHx8ICgxLGV2YWwpKFwidGhpc1wiKTtcclxufSBjYXRjaChlKSB7XHJcblx0Ly8gVGhpcyB3b3JrcyBpZiB0aGUgd2luZG93IHJlZmVyZW5jZSBpcyBhdmFpbGFibGVcclxuXHRpZih0eXBlb2Ygd2luZG93ID09PSBcIm9iamVjdFwiKVxyXG5cdFx0ZyA9IHdpbmRvdztcclxufVxyXG5cclxuLy8gZyBjYW4gc3RpbGwgYmUgdW5kZWZpbmVkLCBidXQgbm90aGluZyB0byBkbyBhYm91dCBpdC4uLlxyXG4vLyBXZSByZXR1cm4gdW5kZWZpbmVkLCBpbnN0ZWFkIG9mIG5vdGhpbmcgaGVyZSwgc28gaXQnc1xyXG4vLyBlYXNpZXIgdG8gaGFuZGxlIHRoaXMgY2FzZS4gaWYoIWdsb2JhbCkgeyAuLi59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGc7XHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vICh3ZWJwYWNrKS9idWlsZGluL2dsb2JhbC5qc1xuLy8gbW9kdWxlIGlkID0gMTRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eF9pZFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFN0YXR1cyh0eF9pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnc3RhdHVzZXMnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9nZXRTdGF0dXMuanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICogQHBhcmFtIHR4SWRcbiAqIEBwYXJhbSBBUElfUEFUSFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRUcmFuc2FjdGlvbih0eElkLCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWyd0cmFuc2FjdGlvbnNfZGV0YWlsJ10sIHtcbiAgICAgICAgICAgIHVybFRlbXBsYXRlU3BlYzoge1xuICAgICAgICAgICAgICAgIHR4SWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9nZXRUcmFuc2FjdGlvbi5qcyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VJbnB1dFRlbXBsYXRlKHB1YmxpY0tleXMgPSBbXSwgZnVsZmlsbHMgPSBudWxsLCBmdWxmaWxsbWVudCA9IG51bGwpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBmdWxmaWxsbWVudCxcbiAgICAgICAgZnVsZmlsbHMsXG4gICAgICAgICdvd25lcnNfYmVmb3JlJzogcHVibGljS2V5cyxcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlSW5wdXRUZW1wbGF0ZS5qcyIsInZhciBjbG9uZSA9IChmdW5jdGlvbigpIHtcbid1c2Ugc3RyaWN0JztcblxuZnVuY3Rpb24gX2luc3RhbmNlb2Yob2JqLCB0eXBlKSB7XG4gIHJldHVybiB0eXBlICE9IG51bGwgJiYgb2JqIGluc3RhbmNlb2YgdHlwZTtcbn1cblxudmFyIG5hdGl2ZU1hcDtcbnRyeSB7XG4gIG5hdGl2ZU1hcCA9IE1hcDtcbn0gY2F0Y2goXykge1xuICAvLyBtYXliZSBhIHJlZmVyZW5jZSBlcnJvciBiZWNhdXNlIG5vIGBNYXBgLiBHaXZlIGl0IGEgZHVtbXkgdmFsdWUgdGhhdCBub1xuICAvLyB2YWx1ZSB3aWxsIGV2ZXIgYmUgYW4gaW5zdGFuY2VvZi5cbiAgbmF0aXZlTWFwID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVNldDtcbnRyeSB7XG4gIG5hdGl2ZVNldCA9IFNldDtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVTZXQgPSBmdW5jdGlvbigpIHt9O1xufVxuXG52YXIgbmF0aXZlUHJvbWlzZTtcbnRyeSB7XG4gIG5hdGl2ZVByb21pc2UgPSBQcm9taXNlO1xufSBjYXRjaChfKSB7XG4gIG5hdGl2ZVByb21pc2UgPSBmdW5jdGlvbigpIHt9O1xufVxuXG4vKipcbiAqIENsb25lcyAoY29waWVzKSBhbiBPYmplY3QgdXNpbmcgZGVlcCBjb3B5aW5nLlxuICpcbiAqIFRoaXMgZnVuY3Rpb24gc3VwcG9ydHMgY2lyY3VsYXIgcmVmZXJlbmNlcyBieSBkZWZhdWx0LCBidXQgaWYgeW91IGFyZSBjZXJ0YWluXG4gKiB0aGVyZSBhcmUgbm8gY2lyY3VsYXIgcmVmZXJlbmNlcyBpbiB5b3VyIG9iamVjdCwgeW91IGNhbiBzYXZlIHNvbWUgQ1BVIHRpbWVcbiAqIGJ5IGNhbGxpbmcgY2xvbmUob2JqLCBmYWxzZSkuXG4gKlxuICogQ2F1dGlvbjogaWYgYGNpcmN1bGFyYCBpcyBmYWxzZSBhbmQgYHBhcmVudGAgY29udGFpbnMgY2lyY3VsYXIgcmVmZXJlbmNlcyxcbiAqIHlvdXIgcHJvZ3JhbSBtYXkgZW50ZXIgYW4gaW5maW5pdGUgbG9vcCBhbmQgY3Jhc2guXG4gKlxuICogQHBhcmFtIGBwYXJlbnRgIC0gdGhlIG9iamVjdCB0byBiZSBjbG9uZWRcbiAqIEBwYXJhbSBgY2lyY3VsYXJgIC0gc2V0IHRvIHRydWUgaWYgdGhlIG9iamVjdCB0byBiZSBjbG9uZWQgbWF5IGNvbnRhaW5cbiAqICAgIGNpcmN1bGFyIHJlZmVyZW5jZXMuIChvcHRpb25hbCAtIHRydWUgYnkgZGVmYXVsdClcbiAqIEBwYXJhbSBgZGVwdGhgIC0gc2V0IHRvIGEgbnVtYmVyIGlmIHRoZSBvYmplY3QgaXMgb25seSB0byBiZSBjbG9uZWQgdG9cbiAqICAgIGEgcGFydGljdWxhciBkZXB0aC4gKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gSW5maW5pdHkpXG4gKiBAcGFyYW0gYHByb3RvdHlwZWAgLSBzZXRzIHRoZSBwcm90b3R5cGUgdG8gYmUgdXNlZCB3aGVuIGNsb25pbmcgYW4gb2JqZWN0LlxuICogICAgKG9wdGlvbmFsIC0gZGVmYXVsdHMgdG8gcGFyZW50IHByb3RvdHlwZSkuXG4gKiBAcGFyYW0gYGluY2x1ZGVOb25FbnVtZXJhYmxlYCAtIHNldCB0byB0cnVlIGlmIHRoZSBub24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzXG4gKiAgICBzaG91bGQgYmUgY2xvbmVkIGFzIHdlbGwuIE5vbi1lbnVtZXJhYmxlIHByb3BlcnRpZXMgb24gdGhlIHByb3RvdHlwZVxuICogICAgY2hhaW4gd2lsbCBiZSBpZ25vcmVkLiAob3B0aW9uYWwgLSBmYWxzZSBieSBkZWZhdWx0KVxuKi9cbmZ1bmN0aW9uIGNsb25lKHBhcmVudCwgY2lyY3VsYXIsIGRlcHRoLCBwcm90b3R5cGUsIGluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gIGlmICh0eXBlb2YgY2lyY3VsYXIgPT09ICdvYmplY3QnKSB7XG4gICAgZGVwdGggPSBjaXJjdWxhci5kZXB0aDtcbiAgICBwcm90b3R5cGUgPSBjaXJjdWxhci5wcm90b3R5cGU7XG4gICAgaW5jbHVkZU5vbkVudW1lcmFibGUgPSBjaXJjdWxhci5pbmNsdWRlTm9uRW51bWVyYWJsZTtcbiAgICBjaXJjdWxhciA9IGNpcmN1bGFyLmNpcmN1bGFyO1xuICB9XG4gIC8vIG1haW50YWluIHR3byBhcnJheXMgZm9yIGNpcmN1bGFyIHJlZmVyZW5jZXMsIHdoZXJlIGNvcnJlc3BvbmRpbmcgcGFyZW50c1xuICAvLyBhbmQgY2hpbGRyZW4gaGF2ZSB0aGUgc2FtZSBpbmRleFxuICB2YXIgYWxsUGFyZW50cyA9IFtdO1xuICB2YXIgYWxsQ2hpbGRyZW4gPSBbXTtcblxuICB2YXIgdXNlQnVmZmVyID0gdHlwZW9mIEJ1ZmZlciAhPSAndW5kZWZpbmVkJztcblxuICBpZiAodHlwZW9mIGNpcmN1bGFyID09ICd1bmRlZmluZWQnKVxuICAgIGNpcmN1bGFyID0gdHJ1ZTtcblxuICBpZiAodHlwZW9mIGRlcHRoID09ICd1bmRlZmluZWQnKVxuICAgIGRlcHRoID0gSW5maW5pdHk7XG5cbiAgLy8gcmVjdXJzZSB0aGlzIGZ1bmN0aW9uIHNvIHdlIGRvbid0IHJlc2V0IGFsbFBhcmVudHMgYW5kIGFsbENoaWxkcmVuXG4gIGZ1bmN0aW9uIF9jbG9uZShwYXJlbnQsIGRlcHRoKSB7XG4gICAgLy8gY2xvbmluZyBudWxsIGFsd2F5cyByZXR1cm5zIG51bGxcbiAgICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgICAgcmV0dXJuIG51bGw7XG5cbiAgICBpZiAoZGVwdGggPT09IDApXG4gICAgICByZXR1cm4gcGFyZW50O1xuXG4gICAgdmFyIGNoaWxkO1xuICAgIHZhciBwcm90bztcbiAgICBpZiAodHlwZW9mIHBhcmVudCAhPSAnb2JqZWN0Jykge1xuICAgICAgcmV0dXJuIHBhcmVudDtcbiAgICB9XG5cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVNYXApKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVNYXAoKTtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlU2V0KCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVByb21pc2UpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBuYXRpdmVQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgcGFyZW50LnRoZW4oZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgICByZXNvbHZlKF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0sIGZ1bmN0aW9uKGVycikge1xuICAgICAgICAgIHJlamVjdChfY2xvbmUoZXJyLCBkZXB0aCAtIDEpKTtcbiAgICAgICAgfSk7XG4gICAgICB9KTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNBcnJheShwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IFtdO1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc1JlZ0V4cChwYXJlbnQpKSB7XG4gICAgICBjaGlsZCA9IG5ldyBSZWdFeHAocGFyZW50LnNvdXJjZSwgX19nZXRSZWdFeHBGbGFncyhwYXJlbnQpKTtcbiAgICAgIGlmIChwYXJlbnQubGFzdEluZGV4KSBjaGlsZC5sYXN0SW5kZXggPSBwYXJlbnQubGFzdEluZGV4O1xuICAgIH0gZWxzZSBpZiAoY2xvbmUuX19pc0RhdGUocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgRGF0ZShwYXJlbnQuZ2V0VGltZSgpKTtcbiAgICB9IGVsc2UgaWYgKHVzZUJ1ZmZlciAmJiBCdWZmZXIuaXNCdWZmZXIocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgQnVmZmVyKHBhcmVudC5sZW5ndGgpO1xuICAgICAgcGFyZW50LmNvcHkoY2hpbGQpO1xuICAgICAgcmV0dXJuIGNoaWxkO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBFcnJvcikpIHtcbiAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwYXJlbnQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAodHlwZW9mIHByb3RvdHlwZSA9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBwcm90byA9IE9iamVjdC5nZXRQcm90b3R5cGVPZihwYXJlbnQpO1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG8pO1xuICAgICAgfVxuICAgICAgZWxzZSB7XG4gICAgICAgIGNoaWxkID0gT2JqZWN0LmNyZWF0ZShwcm90b3R5cGUpO1xuICAgICAgICBwcm90byA9IHByb3RvdHlwZTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoY2lyY3VsYXIpIHtcbiAgICAgIHZhciBpbmRleCA9IGFsbFBhcmVudHMuaW5kZXhPZihwYXJlbnQpO1xuXG4gICAgICBpZiAoaW5kZXggIT0gLTEpIHtcbiAgICAgICAgcmV0dXJuIGFsbENoaWxkcmVuW2luZGV4XTtcbiAgICAgIH1cbiAgICAgIGFsbFBhcmVudHMucHVzaChwYXJlbnQpO1xuICAgICAgYWxsQ2hpbGRyZW4ucHVzaChjaGlsZCk7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUsIGtleSkge1xuICAgICAgICB2YXIga2V5Q2hpbGQgPSBfY2xvbmUoa2V5LCBkZXB0aCAtIDEpO1xuICAgICAgICB2YXIgdmFsdWVDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuc2V0KGtleUNoaWxkLCB2YWx1ZUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVTZXQpKSB7XG4gICAgICBwYXJlbnQuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSkge1xuICAgICAgICB2YXIgZW50cnlDaGlsZCA9IF9jbG9uZSh2YWx1ZSwgZGVwdGggLSAxKTtcbiAgICAgICAgY2hpbGQuYWRkKGVudHJ5Q2hpbGQpO1xuICAgICAgfSk7XG4gICAgfVxuXG4gICAgZm9yICh2YXIgaSBpbiBwYXJlbnQpIHtcbiAgICAgIHZhciBhdHRycztcbiAgICAgIGlmIChwcm90bykge1xuICAgICAgICBhdHRycyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocHJvdG8sIGkpO1xuICAgICAgfVxuXG4gICAgICBpZiAoYXR0cnMgJiYgYXR0cnMuc2V0ID09IG51bGwpIHtcbiAgICAgICAgY29udGludWU7XG4gICAgICB9XG4gICAgICBjaGlsZFtpXSA9IF9jbG9uZShwYXJlbnRbaV0sIGRlcHRoIC0gMSk7XG4gICAgfVxuXG4gICAgaWYgKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpIHtcbiAgICAgIHZhciBzeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzeW1ib2xzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIC8vIERvbid0IG5lZWQgdG8gd29ycnkgYWJvdXQgY2xvbmluZyBhIHN5bWJvbCBiZWNhdXNlIGl0IGlzIGEgcHJpbWl0aXZlLFxuICAgICAgICAvLyBsaWtlIGEgbnVtYmVyIG9yIHN0cmluZy5cbiAgICAgICAgdmFyIHN5bWJvbCA9IHN5bWJvbHNbaV07XG4gICAgICAgIHZhciBkZXNjcmlwdG9yID0gT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihwYXJlbnQsIHN5bWJvbCk7XG4gICAgICAgIGlmIChkZXNjcmlwdG9yICYmICFkZXNjcmlwdG9yLmVudW1lcmFibGUgJiYgIWluY2x1ZGVOb25FbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbc3ltYm9sXSA9IF9jbG9uZShwYXJlbnRbc3ltYm9sXSwgZGVwdGggLSAxKTtcbiAgICAgICAgaWYgKCFkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHN5bWJvbCwge1xuICAgICAgICAgICAgZW51bWVyYWJsZTogZmFsc2VcbiAgICAgICAgICB9KTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cblxuICAgIGlmIChpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgdmFyIGFsbFByb3BlcnR5TmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwYXJlbnQpO1xuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGxQcm9wZXJ0eU5hbWVzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHZhciBwcm9wZXJ0eU5hbWUgPSBhbGxQcm9wZXJ0eU5hbWVzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBwcm9wZXJ0eU5hbWUpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiBkZXNjcmlwdG9yLmVudW1lcmFibGUpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgfVxuICAgICAgICBjaGlsZFtwcm9wZXJ0eU5hbWVdID0gX2Nsb25lKHBhcmVudFtwcm9wZXJ0eU5hbWVdLCBkZXB0aCAtIDEpO1xuICAgICAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoY2hpbGQsIHByb3BlcnR5TmFtZSwge1xuICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgIH0pO1xuICAgICAgfVxuICAgIH1cblxuICAgIHJldHVybiBjaGlsZDtcbiAgfVxuXG4gIHJldHVybiBfY2xvbmUocGFyZW50LCBkZXB0aCk7XG59XG5cbi8qKlxuICogU2ltcGxlIGZsYXQgY2xvbmUgdXNpbmcgcHJvdG90eXBlLCBhY2NlcHRzIG9ubHkgb2JqZWN0cywgdXNlZnVsbCBmb3IgcHJvcGVydHlcbiAqIG92ZXJyaWRlIG9uIEZMQVQgY29uZmlndXJhdGlvbiBvYmplY3QgKG5vIG5lc3RlZCBwcm9wcykuXG4gKlxuICogVVNFIFdJVEggQ0FVVElPTiEgVGhpcyBtYXkgbm90IGJlaGF2ZSBhcyB5b3Ugd2lzaCBpZiB5b3UgZG8gbm90IGtub3cgaG93IHRoaXNcbiAqIHdvcmtzLlxuICovXG5jbG9uZS5jbG9uZVByb3RvdHlwZSA9IGZ1bmN0aW9uIGNsb25lUHJvdG90eXBlKHBhcmVudCkge1xuICBpZiAocGFyZW50ID09PSBudWxsKVxuICAgIHJldHVybiBudWxsO1xuXG4gIHZhciBjID0gZnVuY3Rpb24gKCkge307XG4gIGMucHJvdG90eXBlID0gcGFyZW50O1xuICByZXR1cm4gbmV3IGMoKTtcbn07XG5cbi8vIHByaXZhdGUgdXRpbGl0eSBmdW5jdGlvbnNcblxuZnVuY3Rpb24gX19vYmpUb1N0cihvKSB7XG4gIHJldHVybiBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwobyk7XG59XG5jbG9uZS5fX29ialRvU3RyID0gX19vYmpUb1N0cjtcblxuZnVuY3Rpb24gX19pc0RhdGUobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IERhdGVdJztcbn1cbmNsb25lLl9faXNEYXRlID0gX19pc0RhdGU7XG5cbmZ1bmN0aW9uIF9faXNBcnJheShvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn1cbmNsb25lLl9faXNBcnJheSA9IF9faXNBcnJheTtcblxuZnVuY3Rpb24gX19pc1JlZ0V4cChvKSB7XG4gIHJldHVybiB0eXBlb2YgbyA9PT0gJ29iamVjdCcgJiYgX19vYmpUb1N0cihvKSA9PT0gJ1tvYmplY3QgUmVnRXhwXSc7XG59XG5jbG9uZS5fX2lzUmVnRXhwID0gX19pc1JlZ0V4cDtcblxuZnVuY3Rpb24gX19nZXRSZWdFeHBGbGFncyhyZSkge1xuICB2YXIgZmxhZ3MgPSAnJztcbiAgaWYgKHJlLmdsb2JhbCkgZmxhZ3MgKz0gJ2cnO1xuICBpZiAocmUuaWdub3JlQ2FzZSkgZmxhZ3MgKz0gJ2knO1xuICBpZiAocmUubXVsdGlsaW5lKSBmbGFncyArPSAnbSc7XG4gIHJldHVybiBmbGFncztcbn1cbmNsb25lLl9fZ2V0UmVnRXhwRmxhZ3MgPSBfX2dldFJlZ0V4cEZsYWdzO1xuXG5yZXR1cm4gY2xvbmU7XG59KSgpO1xuXG5pZiAodHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHMpIHtcbiAgbW9kdWxlLmV4cG9ydHMgPSBjbG9uZTtcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jbG9uZS9jbG9uZS5qc1xuLy8gbW9kdWxlIGlkID0gMThcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwicmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9lczcub2JqZWN0LmVudHJpZXMnKTtcbm1vZHVsZS5leHBvcnRzID0gcmVxdWlyZSgnLi4vLi4vbW9kdWxlcy9fY29yZScpLk9iamVjdC5lbnRyaWVzO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMuanNcbi8vIG1vZHVsZSBpZCA9IDE5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIGZhbHNlIC0+IEFycmF5I2luZGV4T2Zcbi8vIHRydWUgIC0+IEFycmF5I2luY2x1ZGVzXG52YXIgdG9JT2JqZWN0ID0gcmVxdWlyZSgnLi9fdG8taW9iamVjdCcpXG4gICwgdG9MZW5ndGggID0gcmVxdWlyZSgnLi9fdG8tbGVuZ3RoJylcbiAgLCB0b0luZGV4ICAgPSByZXF1aXJlKCcuL190by1pbmRleCcpO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihJU19JTkNMVURFUyl7XG4gIHJldHVybiBmdW5jdGlvbigkdGhpcywgZWwsIGZyb21JbmRleCl7XG4gICAgdmFyIE8gICAgICA9IHRvSU9iamVjdCgkdGhpcylcbiAgICAgICwgbGVuZ3RoID0gdG9MZW5ndGgoTy5sZW5ndGgpXG4gICAgICAsIGluZGV4ICA9IHRvSW5kZXgoZnJvbUluZGV4LCBsZW5ndGgpXG4gICAgICAsIHZhbHVlO1xuICAgIC8vIEFycmF5I2luY2x1ZGVzIHVzZXMgU2FtZVZhbHVlWmVybyBlcXVhbGl0eSBhbGdvcml0aG1cbiAgICBpZihJU19JTkNMVURFUyAmJiBlbCAhPSBlbCl3aGlsZShsZW5ndGggPiBpbmRleCl7XG4gICAgICB2YWx1ZSA9IE9baW5kZXgrK107XG4gICAgICBpZih2YWx1ZSAhPSB2YWx1ZSlyZXR1cm4gdHJ1ZTtcbiAgICAvLyBBcnJheSN0b0luZGV4IGlnbm9yZXMgaG9sZXMsIEFycmF5I2luY2x1ZGVzIC0gbm90XG4gICAgfSBlbHNlIGZvcig7bGVuZ3RoID4gaW5kZXg7IGluZGV4KyspaWYoSVNfSU5DTFVERVMgfHwgaW5kZXggaW4gTyl7XG4gICAgICBpZihPW2luZGV4XSA9PT0gZWwpcmV0dXJuIElTX0lOQ0xVREVTIHx8IGluZGV4IHx8IDA7XG4gICAgfSByZXR1cm4gIUlTX0lOQ0xVREVTICYmIC0xO1xuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FycmF5LWluY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSAyMFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2xvYmFsICAgID0gcmVxdWlyZSgnLi9fZ2xvYmFsJylcbiAgLCBjb3JlICAgICAgPSByZXF1aXJlKCcuL19jb3JlJylcbiAgLCBjdHggICAgICAgPSByZXF1aXJlKCcuL19jdHgnKVxuICAsIGhpZGUgICAgICA9IHJlcXVpcmUoJy4vX2hpZGUnKVxuICAsIFBST1RPVFlQRSA9ICdwcm90b3R5cGUnO1xuXG52YXIgJGV4cG9ydCA9IGZ1bmN0aW9uKHR5cGUsIG5hbWUsIHNvdXJjZSl7XG4gIHZhciBJU19GT1JDRUQgPSB0eXBlICYgJGV4cG9ydC5GXG4gICAgLCBJU19HTE9CQUwgPSB0eXBlICYgJGV4cG9ydC5HXG4gICAgLCBJU19TVEFUSUMgPSB0eXBlICYgJGV4cG9ydC5TXG4gICAgLCBJU19QUk9UTyAgPSB0eXBlICYgJGV4cG9ydC5QXG4gICAgLCBJU19CSU5EICAgPSB0eXBlICYgJGV4cG9ydC5CXG4gICAgLCBJU19XUkFQICAgPSB0eXBlICYgJGV4cG9ydC5XXG4gICAgLCBleHBvcnRzICAgPSBJU19HTE9CQUwgPyBjb3JlIDogY29yZVtuYW1lXSB8fCAoY29yZVtuYW1lXSA9IHt9KVxuICAgICwgZXhwUHJvdG8gID0gZXhwb3J0c1tQUk9UT1RZUEVdXG4gICAgLCB0YXJnZXQgICAgPSBJU19HTE9CQUwgPyBnbG9iYWwgOiBJU19TVEFUSUMgPyBnbG9iYWxbbmFtZV0gOiAoZ2xvYmFsW25hbWVdIHx8IHt9KVtQUk9UT1RZUEVdXG4gICAgLCBrZXksIG93biwgb3V0O1xuICBpZihJU19HTE9CQUwpc291cmNlID0gbmFtZTtcbiAgZm9yKGtleSBpbiBzb3VyY2Upe1xuICAgIC8vIGNvbnRhaW5zIGluIG5hdGl2ZVxuICAgIG93biA9ICFJU19GT1JDRUQgJiYgdGFyZ2V0ICYmIHRhcmdldFtrZXldICE9PSB1bmRlZmluZWQ7XG4gICAgaWYob3duICYmIGtleSBpbiBleHBvcnRzKWNvbnRpbnVlO1xuICAgIC8vIGV4cG9ydCBuYXRpdmUgb3IgcGFzc2VkXG4gICAgb3V0ID0gb3duID8gdGFyZ2V0W2tleV0gOiBzb3VyY2Vba2V5XTtcbiAgICAvLyBwcmV2ZW50IGdsb2JhbCBwb2xsdXRpb24gZm9yIG5hbWVzcGFjZXNcbiAgICBleHBvcnRzW2tleV0gPSBJU19HTE9CQUwgJiYgdHlwZW9mIHRhcmdldFtrZXldICE9ICdmdW5jdGlvbicgPyBzb3VyY2Vba2V5XVxuICAgIC8vIGJpbmQgdGltZXJzIHRvIGdsb2JhbCBmb3IgY2FsbCBmcm9tIGV4cG9ydCBjb250ZXh0XG4gICAgOiBJU19CSU5EICYmIG93biA/IGN0eChvdXQsIGdsb2JhbClcbiAgICAvLyB3cmFwIGdsb2JhbCBjb25zdHJ1Y3RvcnMgZm9yIHByZXZlbnQgY2hhbmdlIHRoZW0gaW4gbGlicmFyeVxuICAgIDogSVNfV1JBUCAmJiB0YXJnZXRba2V5XSA9PSBvdXQgPyAoZnVuY3Rpb24oQyl7XG4gICAgICB2YXIgRiA9IGZ1bmN0aW9uKGEsIGIsIGMpe1xuICAgICAgICBpZih0aGlzIGluc3RhbmNlb2YgQyl7XG4gICAgICAgICAgc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe1xuICAgICAgICAgICAgY2FzZSAwOiByZXR1cm4gbmV3IEM7XG4gICAgICAgICAgICBjYXNlIDE6IHJldHVybiBuZXcgQyhhKTtcbiAgICAgICAgICAgIGNhc2UgMjogcmV0dXJuIG5ldyBDKGEsIGIpO1xuICAgICAgICAgIH0gcmV0dXJuIG5ldyBDKGEsIGIsIGMpO1xuICAgICAgICB9IHJldHVybiBDLmFwcGx5KHRoaXMsIGFyZ3VtZW50cyk7XG4gICAgICB9O1xuICAgICAgRltQUk9UT1RZUEVdID0gQ1tQUk9UT1RZUEVdO1xuICAgICAgcmV0dXJuIEY7XG4gICAgLy8gbWFrZSBzdGF0aWMgdmVyc2lvbnMgZm9yIHByb3RvdHlwZSBtZXRob2RzXG4gICAgfSkob3V0KSA6IElTX1BST1RPICYmIHR5cGVvZiBvdXQgPT0gJ2Z1bmN0aW9uJyA/IGN0eChGdW5jdGlvbi5jYWxsLCBvdXQpIDogb3V0O1xuICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5tZXRob2RzLiVOQU1FJVxuICAgIGlmKElTX1BST1RPKXtcbiAgICAgIChleHBvcnRzLnZpcnR1YWwgfHwgKGV4cG9ydHMudmlydHVhbCA9IHt9KSlba2V5XSA9IG91dDtcbiAgICAgIC8vIGV4cG9ydCBwcm90byBtZXRob2RzIHRvIGNvcmUuJUNPTlNUUlVDVE9SJS5wcm90b3R5cGUuJU5BTUUlXG4gICAgICBpZih0eXBlICYgJGV4cG9ydC5SICYmIGV4cFByb3RvICYmICFleHBQcm90b1trZXldKWhpZGUoZXhwUHJvdG8sIGtleSwgb3V0KTtcbiAgICB9XG4gIH1cbn07XG4vLyB0eXBlIGJpdG1hcFxuJGV4cG9ydC5GID0gMTsgICAvLyBmb3JjZWRcbiRleHBvcnQuRyA9IDI7ICAgLy8gZ2xvYmFsXG4kZXhwb3J0LlMgPSA0OyAgIC8vIHN0YXRpY1xuJGV4cG9ydC5QID0gODsgICAvLyBwcm90b1xuJGV4cG9ydC5CID0gMTY7ICAvLyBiaW5kXG4kZXhwb3J0LlcgPSAzMjsgIC8vIHdyYXBcbiRleHBvcnQuVSA9IDY0OyAgLy8gc2FmZVxuJGV4cG9ydC5SID0gMTI4OyAvLyByZWFsIHByb3RvIG1ldGhvZCBmb3IgYGxpYnJhcnlgIFxubW9kdWxlLmV4cG9ydHMgPSAkZXhwb3J0O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZXhwb3J0LmpzXG4vLyBtb2R1bGUgaWQgPSAyMVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGV4ZWMpe1xuICB0cnkge1xuICAgIHJldHVybiAhIWV4ZWMoKTtcbiAgfSBjYXRjaChlKXtcbiAgICByZXR1cm4gdHJ1ZTtcbiAgfVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2ZhaWxzLmpzXG4vLyBtb2R1bGUgaWQgPSAyMlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuNCBUb0ludGVnZXJcbnZhciBjZWlsICA9IE1hdGguY2VpbFxuICAsIGZsb29yID0gTWF0aC5mbG9vcjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXNOYU4oaXQgPSAraXQpID8gMCA6IChpdCA+IDAgPyBmbG9vciA6IGNlaWwpKGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbnRlZ2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAyM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKipcclxuICogW2pzLXNoYTNde0BsaW5rIGh0dHBzOi8vZ2l0aHViLmNvbS9lbW4xNzgvanMtc2hhM31cclxuICpcclxuICogQHZlcnNpb24gMC41LjdcclxuICogQGF1dGhvciBDaGVuLCBZaS1DeXVhbiBbZW1uMTc4QGdtYWlsLmNvbV1cclxuICogQGNvcHlyaWdodCBDaGVuLCBZaS1DeXVhbiAyMDE1LTIwMTZcclxuICogQGxpY2Vuc2UgTUlUXHJcbiAqL1xyXG4vKmpzbGludCBiaXR3aXNlOiB0cnVlICovXHJcbihmdW5jdGlvbiAoKSB7XHJcbiAgJ3VzZSBzdHJpY3QnO1xyXG5cclxuICB2YXIgcm9vdCA9IHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnID8gd2luZG93IDoge307XHJcbiAgdmFyIE5PREVfSlMgPSAhcm9vdC5KU19TSEEzX05PX05PREVfSlMgJiYgdHlwZW9mIHByb2Nlc3MgPT09ICdvYmplY3QnICYmIHByb2Nlc3MudmVyc2lvbnMgJiYgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlO1xyXG4gIGlmIChOT0RFX0pTKSB7XHJcbiAgICByb290ID0gZ2xvYmFsO1xyXG4gIH1cclxuICB2YXIgQ09NTU9OX0pTID0gIXJvb3QuSlNfU0hBM19OT19DT01NT05fSlMgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcgJiYgbW9kdWxlLmV4cG9ydHM7XHJcbiAgdmFyIEhFWF9DSEFSUyA9ICcwMTIzNDU2Nzg5YWJjZGVmJy5zcGxpdCgnJyk7XHJcbiAgdmFyIFNIQUtFX1BBRERJTkcgPSBbMzEsIDc5MzYsIDIwMzE2MTYsIDUyMDA5MzY5Nl07XHJcbiAgdmFyIEtFQ0NBS19QQURESU5HID0gWzEsIDI1NiwgNjU1MzYsIDE2Nzc3MjE2XTtcclxuICB2YXIgUEFERElORyA9IFs2LCAxNTM2LCAzOTMyMTYsIDEwMDY2MzI5Nl07XHJcbiAgdmFyIFNISUZUID0gWzAsIDgsIDE2LCAyNF07XHJcbiAgdmFyIFJDID0gWzEsIDAsIDMyODk4LCAwLCAzMjkwNiwgMjE0NzQ4MzY0OCwgMjE0NzUxNjQxNiwgMjE0NzQ4MzY0OCwgMzI5MDcsIDAsIDIxNDc0ODM2NDksXHJcbiAgICAgICAgICAgIDAsIDIxNDc1MTY1NDUsIDIxNDc0ODM2NDgsIDMyNzc3LCAyMTQ3NDgzNjQ4LCAxMzgsIDAsIDEzNiwgMCwgMjE0NzUxNjQyNSwgMCxcclxuICAgICAgICAgICAgMjE0NzQ4MzY1OCwgMCwgMjE0NzUxNjU1NSwgMCwgMTM5LCAyMTQ3NDgzNjQ4LCAzMjkwNSwgMjE0NzQ4MzY0OCwgMzI3NzEsXHJcbiAgICAgICAgICAgIDIxNDc0ODM2NDgsIDMyNzcwLCAyMTQ3NDgzNjQ4LCAxMjgsIDIxNDc0ODM2NDgsIDMyNzc4LCAwLCAyMTQ3NDgzNjU4LCAyMTQ3NDgzNjQ4LFxyXG4gICAgICAgICAgICAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjg5NiwgMjE0NzQ4MzY0OCwgMjE0NzQ4MzY0OSwgMCwgMjE0NzUxNjQyNCwgMjE0NzQ4MzY0OF07XHJcbiAgdmFyIEJJVFMgPSBbMjI0LCAyNTYsIDM4NCwgNTEyXTtcclxuICB2YXIgU0hBS0VfQklUUyA9IFsxMjgsIDI1Nl07XHJcbiAgdmFyIE9VVFBVVF9UWVBFUyA9IFsnaGV4JywgJ2J1ZmZlcicsICdhcnJheUJ1ZmZlcicsICdhcnJheSddO1xyXG5cclxuICB2YXIgY3JlYXRlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcsIG91dHB1dFR5cGUpIHtcclxuICAgIHJldHVybiBmdW5jdGlvbiAobWVzc2FnZSwgb3V0cHV0Qml0cykge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKS51cGRhdGUobWVzc2FnZSlbb3V0cHV0VHlwZV0oKTtcclxuICAgIH07XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZU1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nKSB7XHJcbiAgICB2YXIgbWV0aG9kID0gY3JlYXRlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcclxuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgIHJldHVybiBuZXcgS2VjY2FrKGJpdHMsIHBhZGRpbmcsIGJpdHMpO1xyXG4gICAgfTtcclxuICAgIG1ldGhvZC51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgICByZXR1cm4gbWV0aG9kLmNyZWF0ZSgpLnVwZGF0ZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xyXG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcclxuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsIHR5cGUpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIG1ldGhvZDtcclxuICB9O1xyXG5cclxuICB2YXIgY3JlYXRlU2hha2VNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZVNoYWtlT3V0cHV0TWV0aG9kKGJpdHMsIHBhZGRpbmcsICdoZXgnKTtcclxuICAgIG1ldGhvZC5jcmVhdGUgPSBmdW5jdGlvbiAob3V0cHV0Qml0cykge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUob3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpO1xyXG4gICAgfTtcclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgT1VUUFVUX1RZUEVTLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHZhciB0eXBlID0gT1VUUFVUX1RZUEVTW2ldO1xyXG4gICAgICBtZXRob2RbdHlwZV0gPSBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGFsZ29yaXRobXMgPSBbXHJcbiAgICB7bmFtZTogJ2tlY2NhaycsIHBhZGRpbmc6IEtFQ0NBS19QQURESU5HLCBiaXRzOiBCSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZU1ldGhvZH0sXHJcbiAgICB7bmFtZTogJ3NoYTMnLCBwYWRkaW5nOiBQQURESU5HLCBiaXRzOiBCSVRTLCBjcmVhdGVNZXRob2Q6IGNyZWF0ZU1ldGhvZH0sXHJcbiAgICB7bmFtZTogJ3NoYWtlJywgcGFkZGluZzogU0hBS0VfUEFERElORywgYml0czogU0hBS0VfQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVTaGFrZU1ldGhvZH1cclxuICBdO1xyXG5cclxuICB2YXIgbWV0aG9kcyA9IHt9LCBtZXRob2ROYW1lcyA9IFtdO1xyXG5cclxuICBmb3IgKHZhciBpID0gMDsgaSA8IGFsZ29yaXRobXMubGVuZ3RoOyArK2kpIHtcclxuICAgIHZhciBhbGdvcml0aG0gPSBhbGdvcml0aG1zW2ldO1xyXG4gICAgdmFyIGJpdHMgID0gYWxnb3JpdGhtLmJpdHM7XHJcbiAgICBmb3IgKHZhciBqID0gMDsgaiA8IGJpdHMubGVuZ3RoOyArK2opIHtcclxuICAgICAgdmFyIG1ldGhvZE5hbWUgPSBhbGdvcml0aG0ubmFtZSArJ18nICsgYml0c1tqXTtcclxuICAgICAgbWV0aG9kTmFtZXMucHVzaChtZXRob2ROYW1lKTtcclxuICAgICAgbWV0aG9kc1ttZXRob2ROYW1lXSA9IGFsZ29yaXRobS5jcmVhdGVNZXRob2QoYml0c1tqXSwgYWxnb3JpdGhtLnBhZGRpbmcpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgZnVuY3Rpb24gS2VjY2FrKGJpdHMsIHBhZGRpbmcsIG91dHB1dEJpdHMpIHtcclxuICAgIHRoaXMuYmxvY2tzID0gW107XHJcbiAgICB0aGlzLnMgPSBbXTtcclxuICAgIHRoaXMucGFkZGluZyA9IHBhZGRpbmc7XHJcbiAgICB0aGlzLm91dHB1dEJpdHMgPSBvdXRwdXRCaXRzO1xyXG4gICAgdGhpcy5yZXNldCA9IHRydWU7XHJcbiAgICB0aGlzLmJsb2NrID0gMDtcclxuICAgIHRoaXMuc3RhcnQgPSAwO1xyXG4gICAgdGhpcy5ibG9ja0NvdW50ID0gKDE2MDAgLSAoYml0cyA8PCAxKSkgPj4gNTtcclxuICAgIHRoaXMuYnl0ZUNvdW50ID0gdGhpcy5ibG9ja0NvdW50IDw8IDI7XHJcbiAgICB0aGlzLm91dHB1dEJsb2NrcyA9IG91dHB1dEJpdHMgPj4gNTtcclxuICAgIHRoaXMuZXh0cmFCeXRlcyA9IChvdXRwdXRCaXRzICYgMzEpID4+IDM7XHJcblxyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCA1MDsgKytpKSB7XHJcbiAgICAgIHRoaXMuc1tpXSA9IDA7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlKSB7XHJcbiAgICB2YXIgbm90U3RyaW5nID0gdHlwZW9mIG1lc3NhZ2UgIT09ICdzdHJpbmcnO1xyXG4gICAgaWYgKG5vdFN0cmluZyAmJiBtZXNzYWdlLmNvbnN0cnVjdG9yID09PSBBcnJheUJ1ZmZlcikge1xyXG4gICAgICBtZXNzYWdlID0gbmV3IFVpbnQ4QXJyYXkobWVzc2FnZSk7XHJcbiAgICB9XHJcbiAgICB2YXIgbGVuZ3RoID0gbWVzc2FnZS5sZW5ndGgsIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBieXRlQ291bnQgPSB0aGlzLmJ5dGVDb3VudCxcclxuICAgICAgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgaW5kZXggPSAwLCBzID0gdGhpcy5zLCBpLCBjb2RlO1xyXG5cclxuICAgIHdoaWxlIChpbmRleCA8IGxlbmd0aCkge1xyXG4gICAgICBpZiAodGhpcy5yZXNldCkge1xyXG4gICAgICAgIHRoaXMucmVzZXQgPSBmYWxzZTtcclxuICAgICAgICBibG9ja3NbMF0gPSB0aGlzLmJsb2NrO1xyXG4gICAgICAgIGZvciAoaSA9IDE7IGkgPCBibG9ja0NvdW50ICsgMTsgKytpKSB7XHJcbiAgICAgICAgICBibG9ja3NbaV0gPSAwO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICBpZiAobm90U3RyaW5nKSB7XHJcbiAgICAgICAgZm9yIChpID0gdGhpcy5zdGFydDsgaW5kZXggPCBsZW5ndGggJiYgaSA8IGJ5dGVDb3VudDsgKytpbmRleCkge1xyXG4gICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gbWVzc2FnZVtpbmRleF0gPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgfVxyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgIGNvZGUgPSBtZXNzYWdlLmNoYXJDb2RlQXQoaW5kZXgpO1xyXG4gICAgICAgICAgaWYgKGNvZGUgPCAweDgwKSB7XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IGNvZGUgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweDgwMCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhjMCB8IChjb2RlID4+IDYpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH0gZWxzZSBpZiAoY29kZSA8IDB4ZDgwMCB8fCBjb2RlID49IDB4ZTAwMCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhlMCB8IChjb2RlID4+IDEyKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgY29kZSA9IDB4MTAwMDAgKyAoKChjb2RlICYgMHgzZmYpIDw8IDEwKSB8IChtZXNzYWdlLmNoYXJDb2RlQXQoKytpbmRleCkgJiAweDNmZikpO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHhmMCB8IChjb2RlID4+IDE4KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDEyKSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoKGNvZGUgPj4gNikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHRoaXMubGFzdEJ5dGVJbmRleCA9IGk7XHJcbiAgICAgIGlmIChpID49IGJ5dGVDb3VudCkge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBpIC0gYnl0ZUNvdW50O1xyXG4gICAgICAgIHRoaXMuYmxvY2sgPSBibG9ja3NbYmxvY2tDb3VudF07XHJcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQ7ICsraSkge1xyXG4gICAgICAgICAgc1tpXSBePSBibG9ja3NbaV07XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGYocyk7XHJcbiAgICAgICAgdGhpcy5yZXNldCA9IHRydWU7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGhpcy5zdGFydCA9IGk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiB0aGlzO1xyXG4gIH07XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUuZmluYWxpemUgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB2YXIgYmxvY2tzID0gdGhpcy5ibG9ja3MsIGkgPSB0aGlzLmxhc3RCeXRlSW5kZXgsIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnM7XHJcbiAgICBibG9ja3NbaSA+PiAyXSB8PSB0aGlzLnBhZGRpbmdbaSAmIDNdO1xyXG4gICAgaWYgKHRoaXMubGFzdEJ5dGVJbmRleCA9PT0gdGhpcy5ieXRlQ291bnQpIHtcclxuICAgICAgYmxvY2tzWzBdID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xyXG4gICAgICBmb3IgKGkgPSAxOyBpIDwgYmxvY2tDb3VudCArIDE7ICsraSkge1xyXG4gICAgICAgIGJsb2Nrc1tpXSA9IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGJsb2Nrc1tibG9ja0NvdW50IC0gMV0gfD0gMHg4MDAwMDAwMDtcclxuICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcclxuICAgICAgc1tpXSBePSBibG9ja3NbaV07XHJcbiAgICB9XHJcbiAgICBmKHMpO1xyXG4gIH07XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUudG9TdHJpbmcgPSBLZWNjYWsucHJvdG90eXBlLmhleCA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGhleCA9ICcnLCBibG9jaztcclxuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XHJcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXSArXHJcbiAgICAgICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMTIpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDgpICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAxNikgJiAweDBGXSArXHJcbiAgICAgICAgICAgICAgIEhFWF9DSEFSU1soYmxvY2sgPj4gMjgpICYgMHgwRl0gKyBIRVhfQ0hBUlNbKGJsb2NrID4+IDI0KSAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgICAgaSA9IDA7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAwKSB7XHJcbiAgICAgICAgaGV4ICs9IEhFWF9DSEFSU1soYmxvY2sgPj4gNCkgJiAweDBGXSArIEhFWF9DSEFSU1tibG9jayAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMikge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDIwKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAxNikgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGhleDtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdGhpcy5maW5hbGl6ZSgpO1xyXG5cclxuICAgIHZhciBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zLCBvdXRwdXRCbG9ja3MgPSB0aGlzLm91dHB1dEJsb2NrcyxcclxuICAgICAgICBleHRyYUJ5dGVzID0gdGhpcy5leHRyYUJ5dGVzLCBpID0gMCwgaiA9IDA7XHJcbiAgICB2YXIgYnl0ZXMgPSB0aGlzLm91dHB1dEJpdHMgPj4gMztcclxuICAgIHZhciBidWZmZXI7XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIoKG91dHB1dEJsb2NrcyArIDEpIDw8IDIpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHZhciBhcnJheSA9IG5ldyBVaW50MzJBcnJheShidWZmZXIpO1xyXG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcclxuICAgICAgICBhcnJheVtqXSA9IHNbaV07XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGogJSBibG9ja0NvdW50ID09PSAwKSB7XHJcbiAgICAgICAgZihzKTtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcclxuICAgICAgYXJyYXlbaV0gPSBzW2ldO1xyXG4gICAgICBidWZmZXIgPSBidWZmZXIuc2xpY2UoMCwgYnl0ZXMpO1xyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ1ZmZlcjtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmJ1ZmZlciA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXlCdWZmZXI7XHJcblxyXG4gIEtlY2Nhay5wcm90b3R5cGUuZGlnZXN0ID0gS2VjY2FrLnByb3RvdHlwZS5hcnJheSA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGFycmF5ID0gW10sIG9mZnNldCwgYmxvY2s7XHJcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xyXG4gICAgICAgIG9mZnNldCA9IGogPDwgMjtcclxuICAgICAgICBibG9jayA9IHNbaV07XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAzXSA9IChibG9jayA+PiAyNCkgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIG9mZnNldCA9IGogPDwgMjtcclxuICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDApIHtcclxuICAgICAgICBhcnJheVtvZmZzZXRdID0gYmxvY2sgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMSkge1xyXG4gICAgICAgIGFycmF5W29mZnNldCArIDFdID0gKGJsb2NrID4+IDgpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAyXSA9IChibG9jayA+PiAxNikgJiAweEZGO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gYXJyYXk7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGYgPSBmdW5jdGlvbiAocykge1xyXG4gICAgdmFyIGgsIGwsIG4sIGMwLCBjMSwgYzIsIGMzLCBjNCwgYzUsIGM2LCBjNywgYzgsIGM5LFxyXG4gICAgICAgIGIwLCBiMSwgYjIsIGIzLCBiNCwgYjUsIGI2LCBiNywgYjgsIGI5LCBiMTAsIGIxMSwgYjEyLCBiMTMsIGIxNCwgYjE1LCBiMTYsIGIxNyxcclxuICAgICAgICBiMTgsIGIxOSwgYjIwLCBiMjEsIGIyMiwgYjIzLCBiMjQsIGIyNSwgYjI2LCBiMjcsIGIyOCwgYjI5LCBiMzAsIGIzMSwgYjMyLCBiMzMsXHJcbiAgICAgICAgYjM0LCBiMzUsIGIzNiwgYjM3LCBiMzgsIGIzOSwgYjQwLCBiNDEsIGI0MiwgYjQzLCBiNDQsIGI0NSwgYjQ2LCBiNDcsIGI0OCwgYjQ5O1xyXG4gICAgZm9yIChuID0gMDsgbiA8IDQ4OyBuICs9IDIpIHtcclxuICAgICAgYzAgPSBzWzBdIF4gc1sxMF0gXiBzWzIwXSBeIHNbMzBdIF4gc1s0MF07XHJcbiAgICAgIGMxID0gc1sxXSBeIHNbMTFdIF4gc1syMV0gXiBzWzMxXSBeIHNbNDFdO1xyXG4gICAgICBjMiA9IHNbMl0gXiBzWzEyXSBeIHNbMjJdIF4gc1szMl0gXiBzWzQyXTtcclxuICAgICAgYzMgPSBzWzNdIF4gc1sxM10gXiBzWzIzXSBeIHNbMzNdIF4gc1s0M107XHJcbiAgICAgIGM0ID0gc1s0XSBeIHNbMTRdIF4gc1syNF0gXiBzWzM0XSBeIHNbNDRdO1xyXG4gICAgICBjNSA9IHNbNV0gXiBzWzE1XSBeIHNbMjVdIF4gc1szNV0gXiBzWzQ1XTtcclxuICAgICAgYzYgPSBzWzZdIF4gc1sxNl0gXiBzWzI2XSBeIHNbMzZdIF4gc1s0Nl07XHJcbiAgICAgIGM3ID0gc1s3XSBeIHNbMTddIF4gc1syN10gXiBzWzM3XSBeIHNbNDddO1xyXG4gICAgICBjOCA9IHNbOF0gXiBzWzE4XSBeIHNbMjhdIF4gc1szOF0gXiBzWzQ4XTtcclxuICAgICAgYzkgPSBzWzldIF4gc1sxOV0gXiBzWzI5XSBeIHNbMzldIF4gc1s0OV07XHJcblxyXG4gICAgICBoID0gYzggXiAoKGMyIDw8IDEpIHwgKGMzID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzkgXiAoKGMzIDw8IDEpIHwgKGMyID4+PiAzMSkpO1xyXG4gICAgICBzWzBdIF49IGg7XHJcbiAgICAgIHNbMV0gXj0gbDtcclxuICAgICAgc1sxMF0gXj0gaDtcclxuICAgICAgc1sxMV0gXj0gbDtcclxuICAgICAgc1syMF0gXj0gaDtcclxuICAgICAgc1syMV0gXj0gbDtcclxuICAgICAgc1szMF0gXj0gaDtcclxuICAgICAgc1szMV0gXj0gbDtcclxuICAgICAgc1s0MF0gXj0gaDtcclxuICAgICAgc1s0MV0gXj0gbDtcclxuICAgICAgaCA9IGMwIF4gKChjNCA8PCAxKSB8IChjNSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGMxIF4gKChjNSA8PCAxKSB8IChjNCA+Pj4gMzEpKTtcclxuICAgICAgc1syXSBePSBoO1xyXG4gICAgICBzWzNdIF49IGw7XHJcbiAgICAgIHNbMTJdIF49IGg7XHJcbiAgICAgIHNbMTNdIF49IGw7XHJcbiAgICAgIHNbMjJdIF49IGg7XHJcbiAgICAgIHNbMjNdIF49IGw7XHJcbiAgICAgIHNbMzJdIF49IGg7XHJcbiAgICAgIHNbMzNdIF49IGw7XHJcbiAgICAgIHNbNDJdIF49IGg7XHJcbiAgICAgIHNbNDNdIF49IGw7XHJcbiAgICAgIGggPSBjMiBeICgoYzYgPDwgMSkgfCAoYzcgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjMyBeICgoYzcgPDwgMSkgfCAoYzYgPj4+IDMxKSk7XHJcbiAgICAgIHNbNF0gXj0gaDtcclxuICAgICAgc1s1XSBePSBsO1xyXG4gICAgICBzWzE0XSBePSBoO1xyXG4gICAgICBzWzE1XSBePSBsO1xyXG4gICAgICBzWzI0XSBePSBoO1xyXG4gICAgICBzWzI1XSBePSBsO1xyXG4gICAgICBzWzM0XSBePSBoO1xyXG4gICAgICBzWzM1XSBePSBsO1xyXG4gICAgICBzWzQ0XSBePSBoO1xyXG4gICAgICBzWzQ1XSBePSBsO1xyXG4gICAgICBoID0gYzQgXiAoKGM4IDw8IDEpIHwgKGM5ID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzUgXiAoKGM5IDw8IDEpIHwgKGM4ID4+PiAzMSkpO1xyXG4gICAgICBzWzZdIF49IGg7XHJcbiAgICAgIHNbN10gXj0gbDtcclxuICAgICAgc1sxNl0gXj0gaDtcclxuICAgICAgc1sxN10gXj0gbDtcclxuICAgICAgc1syNl0gXj0gaDtcclxuICAgICAgc1syN10gXj0gbDtcclxuICAgICAgc1szNl0gXj0gaDtcclxuICAgICAgc1szN10gXj0gbDtcclxuICAgICAgc1s0Nl0gXj0gaDtcclxuICAgICAgc1s0N10gXj0gbDtcclxuICAgICAgaCA9IGM2IF4gKChjMCA8PCAxKSB8IChjMSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM3IF4gKChjMSA8PCAxKSB8IChjMCA+Pj4gMzEpKTtcclxuICAgICAgc1s4XSBePSBoO1xyXG4gICAgICBzWzldIF49IGw7XHJcbiAgICAgIHNbMThdIF49IGg7XHJcbiAgICAgIHNbMTldIF49IGw7XHJcbiAgICAgIHNbMjhdIF49IGg7XHJcbiAgICAgIHNbMjldIF49IGw7XHJcbiAgICAgIHNbMzhdIF49IGg7XHJcbiAgICAgIHNbMzldIF49IGw7XHJcbiAgICAgIHNbNDhdIF49IGg7XHJcbiAgICAgIHNbNDldIF49IGw7XHJcblxyXG4gICAgICBiMCA9IHNbMF07XHJcbiAgICAgIGIxID0gc1sxXTtcclxuICAgICAgYjMyID0gKHNbMTFdIDw8IDQpIHwgKHNbMTBdID4+PiAyOCk7XHJcbiAgICAgIGIzMyA9IChzWzEwXSA8PCA0KSB8IChzWzExXSA+Pj4gMjgpO1xyXG4gICAgICBiMTQgPSAoc1syMF0gPDwgMykgfCAoc1syMV0gPj4+IDI5KTtcclxuICAgICAgYjE1ID0gKHNbMjFdIDw8IDMpIHwgKHNbMjBdID4+PiAyOSk7XHJcbiAgICAgIGI0NiA9IChzWzMxXSA8PCA5KSB8IChzWzMwXSA+Pj4gMjMpO1xyXG4gICAgICBiNDcgPSAoc1szMF0gPDwgOSkgfCAoc1szMV0gPj4+IDIzKTtcclxuICAgICAgYjI4ID0gKHNbNDBdIDw8IDE4KSB8IChzWzQxXSA+Pj4gMTQpO1xyXG4gICAgICBiMjkgPSAoc1s0MV0gPDwgMTgpIHwgKHNbNDBdID4+PiAxNCk7XHJcbiAgICAgIGIyMCA9IChzWzJdIDw8IDEpIHwgKHNbM10gPj4+IDMxKTtcclxuICAgICAgYjIxID0gKHNbM10gPDwgMSkgfCAoc1syXSA+Pj4gMzEpO1xyXG4gICAgICBiMiA9IChzWzEzXSA8PCAxMikgfCAoc1sxMl0gPj4+IDIwKTtcclxuICAgICAgYjMgPSAoc1sxMl0gPDwgMTIpIHwgKHNbMTNdID4+PiAyMCk7XHJcbiAgICAgIGIzNCA9IChzWzIyXSA8PCAxMCkgfCAoc1syM10gPj4+IDIyKTtcclxuICAgICAgYjM1ID0gKHNbMjNdIDw8IDEwKSB8IChzWzIyXSA+Pj4gMjIpO1xyXG4gICAgICBiMTYgPSAoc1szM10gPDwgMTMpIHwgKHNbMzJdID4+PiAxOSk7XHJcbiAgICAgIGIxNyA9IChzWzMyXSA8PCAxMykgfCAoc1szM10gPj4+IDE5KTtcclxuICAgICAgYjQ4ID0gKHNbNDJdIDw8IDIpIHwgKHNbNDNdID4+PiAzMCk7XHJcbiAgICAgIGI0OSA9IChzWzQzXSA8PCAyKSB8IChzWzQyXSA+Pj4gMzApO1xyXG4gICAgICBiNDAgPSAoc1s1XSA8PCAzMCkgfCAoc1s0XSA+Pj4gMik7XHJcbiAgICAgIGI0MSA9IChzWzRdIDw8IDMwKSB8IChzWzVdID4+PiAyKTtcclxuICAgICAgYjIyID0gKHNbMTRdIDw8IDYpIHwgKHNbMTVdID4+PiAyNik7XHJcbiAgICAgIGIyMyA9IChzWzE1XSA8PCA2KSB8IChzWzE0XSA+Pj4gMjYpO1xyXG4gICAgICBiNCA9IChzWzI1XSA8PCAxMSkgfCAoc1syNF0gPj4+IDIxKTtcclxuICAgICAgYjUgPSAoc1syNF0gPDwgMTEpIHwgKHNbMjVdID4+PiAyMSk7XHJcbiAgICAgIGIzNiA9IChzWzM0XSA8PCAxNSkgfCAoc1szNV0gPj4+IDE3KTtcclxuICAgICAgYjM3ID0gKHNbMzVdIDw8IDE1KSB8IChzWzM0XSA+Pj4gMTcpO1xyXG4gICAgICBiMTggPSAoc1s0NV0gPDwgMjkpIHwgKHNbNDRdID4+PiAzKTtcclxuICAgICAgYjE5ID0gKHNbNDRdIDw8IDI5KSB8IChzWzQ1XSA+Pj4gMyk7XHJcbiAgICAgIGIxMCA9IChzWzZdIDw8IDI4KSB8IChzWzddID4+PiA0KTtcclxuICAgICAgYjExID0gKHNbN10gPDwgMjgpIHwgKHNbNl0gPj4+IDQpO1xyXG4gICAgICBiNDIgPSAoc1sxN10gPDwgMjMpIHwgKHNbMTZdID4+PiA5KTtcclxuICAgICAgYjQzID0gKHNbMTZdIDw8IDIzKSB8IChzWzE3XSA+Pj4gOSk7XHJcbiAgICAgIGIyNCA9IChzWzI2XSA8PCAyNSkgfCAoc1syN10gPj4+IDcpO1xyXG4gICAgICBiMjUgPSAoc1syN10gPDwgMjUpIHwgKHNbMjZdID4+PiA3KTtcclxuICAgICAgYjYgPSAoc1szNl0gPDwgMjEpIHwgKHNbMzddID4+PiAxMSk7XHJcbiAgICAgIGI3ID0gKHNbMzddIDw8IDIxKSB8IChzWzM2XSA+Pj4gMTEpO1xyXG4gICAgICBiMzggPSAoc1s0N10gPDwgMjQpIHwgKHNbNDZdID4+PiA4KTtcclxuICAgICAgYjM5ID0gKHNbNDZdIDw8IDI0KSB8IChzWzQ3XSA+Pj4gOCk7XHJcbiAgICAgIGIzMCA9IChzWzhdIDw8IDI3KSB8IChzWzldID4+PiA1KTtcclxuICAgICAgYjMxID0gKHNbOV0gPDwgMjcpIHwgKHNbOF0gPj4+IDUpO1xyXG4gICAgICBiMTIgPSAoc1sxOF0gPDwgMjApIHwgKHNbMTldID4+PiAxMik7XHJcbiAgICAgIGIxMyA9IChzWzE5XSA8PCAyMCkgfCAoc1sxOF0gPj4+IDEyKTtcclxuICAgICAgYjQ0ID0gKHNbMjldIDw8IDcpIHwgKHNbMjhdID4+PiAyNSk7XHJcbiAgICAgIGI0NSA9IChzWzI4XSA8PCA3KSB8IChzWzI5XSA+Pj4gMjUpO1xyXG4gICAgICBiMjYgPSAoc1szOF0gPDwgOCkgfCAoc1szOV0gPj4+IDI0KTtcclxuICAgICAgYjI3ID0gKHNbMzldIDw8IDgpIHwgKHNbMzhdID4+PiAyNCk7XHJcbiAgICAgIGI4ID0gKHNbNDhdIDw8IDE0KSB8IChzWzQ5XSA+Pj4gMTgpO1xyXG4gICAgICBiOSA9IChzWzQ5XSA8PCAxNCkgfCAoc1s0OF0gPj4+IDE4KTtcclxuXHJcbiAgICAgIHNbMF0gPSBiMCBeICh+YjIgJiBiNCk7XHJcbiAgICAgIHNbMV0gPSBiMSBeICh+YjMgJiBiNSk7XHJcbiAgICAgIHNbMTBdID0gYjEwIF4gKH5iMTIgJiBiMTQpO1xyXG4gICAgICBzWzExXSA9IGIxMSBeICh+YjEzICYgYjE1KTtcclxuICAgICAgc1syMF0gPSBiMjAgXiAofmIyMiAmIGIyNCk7XHJcbiAgICAgIHNbMjFdID0gYjIxIF4gKH5iMjMgJiBiMjUpO1xyXG4gICAgICBzWzMwXSA9IGIzMCBeICh+YjMyICYgYjM0KTtcclxuICAgICAgc1szMV0gPSBiMzEgXiAofmIzMyAmIGIzNSk7XHJcbiAgICAgIHNbNDBdID0gYjQwIF4gKH5iNDIgJiBiNDQpO1xyXG4gICAgICBzWzQxXSA9IGI0MSBeICh+YjQzICYgYjQ1KTtcclxuICAgICAgc1syXSA9IGIyIF4gKH5iNCAmIGI2KTtcclxuICAgICAgc1szXSA9IGIzIF4gKH5iNSAmIGI3KTtcclxuICAgICAgc1sxMl0gPSBiMTIgXiAofmIxNCAmIGIxNik7XHJcbiAgICAgIHNbMTNdID0gYjEzIF4gKH5iMTUgJiBiMTcpO1xyXG4gICAgICBzWzIyXSA9IGIyMiBeICh+YjI0ICYgYjI2KTtcclxuICAgICAgc1syM10gPSBiMjMgXiAofmIyNSAmIGIyNyk7XHJcbiAgICAgIHNbMzJdID0gYjMyIF4gKH5iMzQgJiBiMzYpO1xyXG4gICAgICBzWzMzXSA9IGIzMyBeICh+YjM1ICYgYjM3KTtcclxuICAgICAgc1s0Ml0gPSBiNDIgXiAofmI0NCAmIGI0Nik7XHJcbiAgICAgIHNbNDNdID0gYjQzIF4gKH5iNDUgJiBiNDcpO1xyXG4gICAgICBzWzRdID0gYjQgXiAofmI2ICYgYjgpO1xyXG4gICAgICBzWzVdID0gYjUgXiAofmI3ICYgYjkpO1xyXG4gICAgICBzWzE0XSA9IGIxNCBeICh+YjE2ICYgYjE4KTtcclxuICAgICAgc1sxNV0gPSBiMTUgXiAofmIxNyAmIGIxOSk7XHJcbiAgICAgIHNbMjRdID0gYjI0IF4gKH5iMjYgJiBiMjgpO1xyXG4gICAgICBzWzI1XSA9IGIyNSBeICh+YjI3ICYgYjI5KTtcclxuICAgICAgc1szNF0gPSBiMzQgXiAofmIzNiAmIGIzOCk7XHJcbiAgICAgIHNbMzVdID0gYjM1IF4gKH5iMzcgJiBiMzkpO1xyXG4gICAgICBzWzQ0XSA9IGI0NCBeICh+YjQ2ICYgYjQ4KTtcclxuICAgICAgc1s0NV0gPSBiNDUgXiAofmI0NyAmIGI0OSk7XHJcbiAgICAgIHNbNl0gPSBiNiBeICh+YjggJiBiMCk7XHJcbiAgICAgIHNbN10gPSBiNyBeICh+YjkgJiBiMSk7XHJcbiAgICAgIHNbMTZdID0gYjE2IF4gKH5iMTggJiBiMTApO1xyXG4gICAgICBzWzE3XSA9IGIxNyBeICh+YjE5ICYgYjExKTtcclxuICAgICAgc1syNl0gPSBiMjYgXiAofmIyOCAmIGIyMCk7XHJcbiAgICAgIHNbMjddID0gYjI3IF4gKH5iMjkgJiBiMjEpO1xyXG4gICAgICBzWzM2XSA9IGIzNiBeICh+YjM4ICYgYjMwKTtcclxuICAgICAgc1szN10gPSBiMzcgXiAofmIzOSAmIGIzMSk7XHJcbiAgICAgIHNbNDZdID0gYjQ2IF4gKH5iNDggJiBiNDApO1xyXG4gICAgICBzWzQ3XSA9IGI0NyBeICh+YjQ5ICYgYjQxKTtcclxuICAgICAgc1s4XSA9IGI4IF4gKH5iMCAmIGIyKTtcclxuICAgICAgc1s5XSA9IGI5IF4gKH5iMSAmIGIzKTtcclxuICAgICAgc1sxOF0gPSBiMTggXiAofmIxMCAmIGIxMik7XHJcbiAgICAgIHNbMTldID0gYjE5IF4gKH5iMTEgJiBiMTMpO1xyXG4gICAgICBzWzI4XSA9IGIyOCBeICh+YjIwICYgYjIyKTtcclxuICAgICAgc1syOV0gPSBiMjkgXiAofmIyMSAmIGIyMyk7XHJcbiAgICAgIHNbMzhdID0gYjM4IF4gKH5iMzAgJiBiMzIpO1xyXG4gICAgICBzWzM5XSA9IGIzOSBeICh+YjMxICYgYjMzKTtcclxuICAgICAgc1s0OF0gPSBiNDggXiAofmI0MCAmIGI0Mik7XHJcbiAgICAgIHNbNDldID0gYjQ5IF4gKH5iNDEgJiBiNDMpO1xyXG5cclxuICAgICAgc1swXSBePSBSQ1tuXTtcclxuICAgICAgc1sxXSBePSBSQ1tuICsgMV07XHJcbiAgICB9XHJcbiAgfTtcclxuXHJcbiAgaWYgKENPTU1PTl9KUykge1xyXG4gICAgbW9kdWxlLmV4cG9ydHMgPSBtZXRob2RzO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IG1ldGhvZE5hbWVzLmxlbmd0aDsgKytpKSB7XHJcbiAgICAgIHJvb3RbbWV0aG9kTmFtZXNbaV1dID0gbWV0aG9kc1ttZXRob2ROYW1lc1tpXV07XHJcbiAgICB9XHJcbiAgfVxyXG59KSgpO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanMtc2hhMy9zcmMvc2hhMy5qc1xuLy8gbW9kdWxlIGlkID0gMjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiKGZ1bmN0aW9uKHdpbmRvdykge1xuICAgIHZhciByZSA9IHtcbiAgICAgICAgbm90X3N0cmluZzogL1tec10vLFxuICAgICAgICBudW1iZXI6IC9bZGllZmddLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW15cXCldKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdXhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXltcXCtcXC1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoKSB7XG4gICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbMF0sIGNhY2hlID0gc3ByaW50Zi5jYWNoZVxuICAgICAgICBpZiAoIShjYWNoZVtrZXldICYmIGNhY2hlLmhhc093blByb3BlcnR5KGtleSkpKSB7XG4gICAgICAgICAgICBjYWNoZVtrZXldID0gc3ByaW50Zi5wYXJzZShrZXkpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHNwcmludGYuZm9ybWF0LmNhbGwobnVsbCwgY2FjaGVba2V5XSwgYXJndW1lbnRzKVxuICAgIH1cblxuICAgIHNwcmludGYuZm9ybWF0ID0gZnVuY3Rpb24ocGFyc2VfdHJlZSwgYXJndikge1xuICAgICAgICB2YXIgY3Vyc29yID0gMSwgdHJlZV9sZW5ndGggPSBwYXJzZV90cmVlLmxlbmd0aCwgbm9kZV90eXBlID0gXCJcIiwgYXJnLCBvdXRwdXQgPSBbXSwgaSwgaywgbWF0Y2gsIHBhZCwgcGFkX2NoYXJhY3RlciwgcGFkX2xlbmd0aCwgaXNfcG9zaXRpdmUgPSB0cnVlLCBzaWduID0gXCJcIlxuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9kZV90eXBlID0gZ2V0X3R5cGUocGFyc2VfdHJlZVtpXSlcbiAgICAgICAgICAgIGlmIChub2RlX3R5cGUgPT09IFwic3RyaW5nXCIpIHtcbiAgICAgICAgICAgICAgICBvdXRwdXRbb3V0cHV0Lmxlbmd0aF0gPSBwYXJzZV90cmVlW2ldXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIGlmIChub2RlX3R5cGUgPT09IFwiYXJyYXlcIikge1xuICAgICAgICAgICAgICAgIG1hdGNoID0gcGFyc2VfdHJlZVtpXSAvLyBjb252ZW5pZW5jZSBwdXJwb3NlcyBvbmx5XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7IC8vIGtleXdvcmQgYXJndW1lbnRcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3JdXG4gICAgICAgICAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBtYXRjaFsyXS5sZW5ndGg7IGsrKykge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFhcmcuaGFzT3duUHJvcGVydHkobWF0Y2hbMl1ba10pKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKHNwcmludGYoXCJbc3ByaW50Zl0gcHJvcGVydHkgJyVzJyBkb2VzIG5vdCBleGlzdFwiLCBtYXRjaFsyXVtrXSkpXG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmdbbWF0Y2hbMl1ba11dXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAobWF0Y2hbMV0pIHsgLy8gcG9zaXRpb25hbCBhcmd1bWVudCAoZXhwbGljaXQpXG4gICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ3ZbbWF0Y2hbMV1dXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2UgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChpbXBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndltjdXJzb3IrK11cbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAoZ2V0X3R5cGUoYXJnKSA9PSBcImZ1bmN0aW9uXCIpIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJnKClcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubm90X3N0cmluZy50ZXN0KG1hdGNoWzhdKSAmJiByZS5ub3RfanNvbi50ZXN0KG1hdGNoWzhdKSAmJiAoZ2V0X3R5cGUoYXJnKSAhPSBcIm51bWJlclwiICYmIGlzTmFOKGFyZykpKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3Ioc3ByaW50ZihcIltzcHJpbnRmXSBleHBlY3RpbmcgbnVtYmVyIGJ1dCBmb3VuZCAlc1wiLCBnZXRfdHlwZShhcmcpKSlcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBpZiAocmUubnVtYmVyLnRlc3QobWF0Y2hbOF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIGlzX3Bvc2l0aXZlID0gYXJnID49IDBcbiAgICAgICAgICAgICAgICB9XG5cbiAgICAgICAgICAgICAgICBzd2l0Y2ggKG1hdGNoWzhdKSB7XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJiXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoMilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZy5mcm9tQ2hhckNvZGUoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZFwiOlxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiaVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcImpcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IEpTT04uc3RyaW5naWZ5KGFyZywgbnVsbCwgbWF0Y2hbNl0gPyBwYXJzZUludChtYXRjaFs2XSkgOiAwKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZVwiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gbWF0Y2hbN10gPyBhcmcudG9FeHBvbmVudGlhbChtYXRjaFs3XSkgOiBhcmcudG9FeHBvbmVudGlhbCgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJmXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXRjaFs3XSA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlIFwiZ1wiOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gbWF0Y2hbN10gPyBwYXJzZUZsb2F0KGFyZykudG9QcmVjaXNpb24obWF0Y2hbN10pIDogcGFyc2VGbG9hdChhcmcpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJvXCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoOClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInNcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9ICgoYXJnID0gU3RyaW5nKGFyZykpICYmIG1hdGNoWzddID8gYXJnLnN1YnN0cmluZygwLCBtYXRjaFs3XSkgOiBhcmcpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJ1XCI6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcgPj4+IDBcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcInhcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygxNilcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBcIlhcIjpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygxNikudG9VcHBlckNhc2UoKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAocmUuanNvbi50ZXN0KG1hdGNoWzhdKSkge1xuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbb3V0cHV0Lmxlbmd0aF0gPSBhcmdcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChyZS5udW1iZXIudGVzdChtYXRjaFs4XSkgJiYgKCFpc19wb3NpdGl2ZSB8fCBtYXRjaFszXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBpc19wb3NpdGl2ZSA/IFwiK1wiIDogXCItXCJcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZygpLnJlcGxhY2UocmUuc2lnbiwgXCJcIilcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNpZ24gPSBcIlwiXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IG1hdGNoWzRdID8gbWF0Y2hbNF0gPT09IFwiMFwiID8gXCIwXCIgOiBtYXRjaFs0XS5jaGFyQXQoMSkgOiBcIiBcIlxuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gbWF0Y2hbNl0gLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IG1hdGNoWzZdID8gKHBhZF9sZW5ndGggPiAwID8gc3RyX3JlcGVhdChwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoKSA6IFwiXCIpIDogXCJcIlxuICAgICAgICAgICAgICAgICAgICBvdXRwdXRbb3V0cHV0Lmxlbmd0aF0gPSBtYXRjaFs1XSA/IHNpZ24gKyBhcmcgKyBwYWQgOiAocGFkX2NoYXJhY3RlciA9PT0gXCIwXCIgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKFwiXCIpXG4gICAgfVxuXG4gICAgc3ByaW50Zi5jYWNoZSA9IHt9XG5cbiAgICBzcHJpbnRmLnBhcnNlID0gZnVuY3Rpb24oZm10KSB7XG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCA9IFtdLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBtYXRjaFswXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBcIiVcIlxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUucGxhY2Vob2xkZXIuZXhlYyhfZm10KSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDFcbiAgICAgICAgICAgICAgICAgICAgdmFyIGZpZWxkX2xpc3QgPSBbXSwgcmVwbGFjZW1lbnRfZmllbGQgPSBtYXRjaFsyXSwgZmllbGRfbWF0Y2ggPSBbXVxuICAgICAgICAgICAgICAgICAgICBpZiAoKGZpZWxkX21hdGNoID0gcmUua2V5LmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdFtmaWVsZF9saXN0Lmxlbmd0aF0gPSBmaWVsZF9tYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgd2hpbGUgKChyZXBsYWNlbWVudF9maWVsZCA9IHJlcGxhY2VtZW50X2ZpZWxkLnN1YnN0cmluZyhmaWVsZF9tYXRjaFswXS5sZW5ndGgpKSAhPT0gXCJcIikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoZmllbGRfbWF0Y2ggPSByZS5rZXlfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0W2ZpZWxkX2xpc3QubGVuZ3RoXSA9IGZpZWxkX21hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmluZGV4X2FjY2Vzcy5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmllbGRfbGlzdFtmaWVsZF9saXN0Lmxlbmd0aF0gPSBmaWVsZF9tYXRjaFsxXVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXlcIilcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleVwiKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIG1hdGNoWzJdID0gZmllbGRfbGlzdFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgYXJnX25hbWVzIHw9IDJcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKGFyZ19uYW1lcyA9PT0gMykge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoXCJbc3ByaW50Zl0gbWl4aW5nIHBvc2l0aW9uYWwgYW5kIG5hbWVkIHBsYWNlaG9sZGVycyBpcyBub3QgKHlldCkgc3VwcG9ydGVkXCIpXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIHBhcnNlX3RyZWVbcGFyc2VfdHJlZS5sZW5ndGhdID0gbWF0Y2hcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSB1bmV4cGVjdGVkIHBsYWNlaG9sZGVyXCIpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBfZm10ID0gX2ZtdC5zdWJzdHJpbmcobWF0Y2hbMF0ubGVuZ3RoKVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBwYXJzZV90cmVlXG4gICAgfVxuXG4gICAgdmFyIHZzcHJpbnRmID0gZnVuY3Rpb24oZm10LCBhcmd2LCBfYXJndikge1xuICAgICAgICBfYXJndiA9IChhcmd2IHx8IFtdKS5zbGljZSgwKVxuICAgICAgICBfYXJndi5zcGxpY2UoMCwgMCwgZm10KVxuICAgICAgICByZXR1cm4gc3ByaW50Zi5hcHBseShudWxsLCBfYXJndilcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBoZWxwZXJzXG4gICAgICovXG4gICAgZnVuY3Rpb24gZ2V0X3R5cGUodmFyaWFibGUpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh2YXJpYWJsZSkuc2xpY2UoOCwgLTEpLnRvTG93ZXJDYXNlKClcbiAgICB9XG5cbiAgICBmdW5jdGlvbiBzdHJfcmVwZWF0KGlucHV0LCBtdWx0aXBsaWVyKSB7XG4gICAgICAgIHJldHVybiBBcnJheShtdWx0aXBsaWVyICsgMSkuam9pbihpbnB1dClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBleHBvcnRzLnNwcmludGYgPSBzcHJpbnRmXG4gICAgICAgIGV4cG9ydHMudnNwcmludGYgPSB2c3ByaW50ZlxuICAgIH1cbiAgICBlbHNlIHtcbiAgICAgICAgd2luZG93LnNwcmludGYgPSBzcHJpbnRmXG4gICAgICAgIHdpbmRvdy52c3ByaW50ZiA9IHZzcHJpbnRmXG5cbiAgICAgICAgaWYgKHR5cGVvZiBkZWZpbmUgPT09IFwiZnVuY3Rpb25cIiAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgICAgICBkZWZpbmUoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICAgICAgc3ByaW50Zjogc3ByaW50ZixcbiAgICAgICAgICAgICAgICAgICAgdnNwcmludGY6IHZzcHJpbnRmXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgIH1cbn0pKHR5cGVvZiB3aW5kb3cgPT09IFwidW5kZWZpbmVkXCIgPyB0aGlzIDogd2luZG93KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBjbGFzcyBLZXlwYWlyIEVkMjU1MTkga2V5cGFpciBpbiBiYXNlNTggKGFzIEJpZ2NoYWluREIgZXhwZWN0cyBiYXNlNTgga2V5cylcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcGFyYW0ge251bWJlcn0gW3NlY3JldF0gQSBzZWVkIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdWJsaWNLZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVkMjU1MTlLZXlwYWlyKHNlY3JldCkge1xuICAgIGxldCBrZXlQYWlyO1xuICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgLy8gUXVpY2sgYW5kIGRpcnR5OiB1c2Uga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaW5zdGVhZFxuICAgICAgICBjb25zdCBzZWNyZXRIYXNoID0gc2hhMy5zaGEzXzI1NlxuICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgIC5hcnJheSgpO1xuICAgICAgICBrZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQobmV3IFVpbnQ4QXJyYXkoc2VjcmV0SGFzaCkpXG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyKCk7XG4gICAgfVxuICAgIHRoaXMucHVibGljS2V5ID0gYmFzZTU4LmVuY29kZShrZXlQYWlyLnB1YmxpY0tleSk7XG4gICAgLy8gdHdlZXRuYWNsJ3MgZ2VuZXJhdGVkIHNlY3JldCBrZXkgaXMgdGhlIHNlY3JldCBrZXkgKyBwdWJsaWMga2V5IChyZXN1bHRpbmcgaW4gYSA2NC1ieXRlIGJ1ZmZlcilcbiAgICB0aGlzLnByaXZhdGVLZXkgPSBiYXNlNTguZW5jb2RlKGtleVBhaXIuc2VjcmV0S2V5LnNsaWNlKDAsIDMyKSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRWQyNTUxOUtleXBhaXIuanMiLCJpbXBvcnQgeyBQcm9taXNlIH0gZnJvbSAnZXM2LXByb21pc2UnO1xuaW1wb3J0IGZldGNoUG9ueWZpbGwgZnJvbSAnZmV0Y2gtcG9ueWZpbGwnO1xuaW1wb3J0IHsgdnNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IGZvcm1hdFRleHQgZnJvbSAnLi9mb3JtYXRfdGV4dCc7XG5cbmltcG9ydCBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0gZnJvbSAnLi9zdHJpbmdpZnlfYXNfcXVlcnlfcGFyYW0nO1xuXG5cbmNvbnN0IGZldGNoID0gZmV0Y2hQb255ZmlsbChQcm9taXNlKTtcblxuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEdsb2JhbCBmZXRjaCB3cmFwcGVyIHRoYXQgYWRkcyBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIGFuZCBlYXNlIG9mIHVzZSBlbmhhbmNlbWVudHMuXG4gKiBDb25zaWRlcnMgYW55IG5vbi0yeHggcmVzcG9uc2UgYXMgYW4gZXJyb3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZmV0Y2gsIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2guXG4gKlxuICogRXhwZWN0cyBmZXRjaCB0byBhbHJlYWR5IGJlIGF2YWlsYWJsZSAoZWl0aGVyIGluIGEgRVM2IGVudmlyb25tZW50LCBidW5kbGVkIHRocm91Z2ggd2VicGFjaywgb3JcbiAqIGluamVjdGVkIHRocm91Z2ggYSBwb2x5ZmlsbCkuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgdXJsICAgIFVybCB0byByZXF1ZXN0LiBDYW4gYmUgc3BlY2lmaWVkIGFzIGEgc3ByaW50ZiBmb3JtYXQgc3RyaW5nIChzZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMpIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB1c2luZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBjb25maWcudXJsVGVtcGxhdGVTcGVjYC5cbiAqIEBwYXJhbSAge29iamVjdH0gIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIG1vc3RseSBwYXNzZWQgdG8gZmV0Y2ggYXMgaXRzICdpbml0JyBjb25maWdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxGZXRjaC9mZXRjaCNQYXJhbWV0ZXJzKS5cbiAqIEBwYXJhbSAgeyp9ICAgICAgICAgICAgIGNvbmZpZy5qc29uQm9keSAgICAgICAgSnNvbiBwYXlsb2FkIHRvIHRoZSByZXF1ZXN0LiBXaWxsIGF1dG9tYXRpY2FsbHkgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKS1lZCBhbmQgb3ZlcnJpZGUgYGNvbmZpZy5ib2R5YC5cbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IGNvbmZpZy5xdWVyeSAgICAgICAgICAgUXVlcnkgcGFyYW1ldGVyIHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSB1cmwuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNwZWNpZmllZCBhcyBhbiBvYmplY3QsIGtleXMgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNhbWVsaXplZCBpbnRvIHNuYWtlIGNhc2UgZmlyc3QuXG4gKiBAcGFyYW0gIHsqW118b2JqZWN0fSAgICBjb25maWcudXJsVGVtcGxhdGVTcGVjIEZvcm1hdCBzcGVjIHRvIHVzZSB0byBleHBhbmQgdGhlIHVybCAoc2VlIHNwcmludGYpLlxuICogQHBhcmFtICB7Kn0gICAgICAgICAgICAgY29uZmlnLiogICAgICAgICAgICAgICBBbGwgb3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gZmV0Y2guXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCB0aGUgcmVzcG9uc2UgaWYgaXRzIHN0YXR1cyB3YXMgMnh4O1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSByZWplY3RzIHdpdGggdGhlIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VSZXF1ZXN0KHVybCwgeyBqc29uQm9keSwgcXVlcnksIHVybFRlbXBsYXRlU3BlYywgLi4uZmV0Y2hDb25maWcgfSA9IHt9KSB7XG4gICAgbGV0IGV4cGFuZGVkVXJsID0gdXJsO1xuXG4gICAgaWYgKHVybFRlbXBsYXRlU3BlYyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybFRlbXBsYXRlU3BlYykgJiYgdXJsVGVtcGxhdGVTcGVjLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVXNlIHZzcHJpbnRmIGZvciB0aGUgYXJyYXkgY2FsbCBzaWduYXR1cmVcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gdnNwcmludGYodXJsLCB1cmxUZW1wbGF0ZVNwZWMpO1xuICAgICAgICB9IGVsc2UgaWYgKHVybFRlbXBsYXRlU3BlYyAmJlxuICAgICAgICAgICAgICAgICAgIHR5cGVvZiB1cmxUZW1wbGF0ZVNwZWMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModXJsVGVtcGxhdGVTcGVjKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gZm9ybWF0VGV4dCh1cmwsIHVybFRlbXBsYXRlU3BlYyk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgdXJsVGVtcGxhdGVTcGVjIHdhcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0LiBJZ25vcmluZy4uLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHF1ZXJ5O1xuICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5ICYmIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHN0cmluZ2lmeUFzUXVlcnlQYXJhbShxdWVyeSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgcXVlcnkgd2FzIG5vdCBhIHN0cmluZyBvciBvYmplY3QuIElnbm9yaW5nLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoanNvbkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaENvbmZpZy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbkJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBmZXRjaC5mZXRjaChleHBhbmRlZFVybCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHN0YXR1cyBpcyBub3QgYSAyeHggKGJhc2VkIG9uIFJlc3BvbnNlLm9rKSwgYXNzdW1lIGl0J3MgYW4gZXJyb3JcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2hcbiAgICAgICAgICAgIGlmICghKHJlcyAmJiByZXMub2spKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2VSZXF1ZXN0LmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja0lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmxvY2soYmxvY2tJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnYmxvY2tzX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICBibG9ja0lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2dldEJsb2NrLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eF9pZFxuICogQHBhcmFtIHN0YXR1c1xuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RCbG9ja3Moe3R4X2lkLCBzdGF0dXN9LCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydibG9ja3MnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZCxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0QmxvY2tzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBwdWJsaWNfa2V5XG4gKiBAcGFyYW0gdW5zcGVudFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKiBAcGFyYW0gb25seUpzb25SZXNwb25zZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0T3V0cHV0cyh7IHB1YmxpY19rZXksIHVuc3BlbnQgfSwgQVBJX1BBVEgsIG9ubHlKc29uUmVzcG9uc2U9dHJ1ZSkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydvdXRwdXRzJ10sIHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIHB1YmxpY19rZXksXG4gICAgICAgICAgICB1bnNwZW50XG4gICAgICAgIH1cbiAgICB9LCBvbmx5SnNvblJlc3BvbnNlKVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2xpc3RPdXRwdXRzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBhc3NldF9pZFxuICogQHBhcmFtIG9wZXJhdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RUcmFuc2FjdGlvbnMoeyBhc3NldF9pZCwgb3BlcmF0aW9uIH0sIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ3RyYW5zYWN0aW9ucyddLCB7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBhc3NldF9pZCxcbiAgICAgICAgICAgIG9wZXJhdGlvblxuICAgICAgICB9XG4gICAgfSlcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja19pZFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RWb3RlcyhibG9ja19pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndm90ZXMnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICBibG9ja19pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vbGlzdFZvdGVzLmpzIiwiaW1wb3J0IGdldFRyYW5zYWN0aW9uIGZyb20gJy4vZ2V0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IGdldFN0YXR1cyBmcm9tICcuL2dldFN0YXR1cyc7XG5cbi8qKlxuICogQHB1YmxpY1xuICogQHBhcmFtIHR4X2lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0eF9pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGdldFN0YXR1cyh0eF9pZCwgQVBJX1BBVEgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmV0Y2hlZCB0cmFuc2FjdGlvbiBzdGF0dXM6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICd2YWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJhbnNhY3Rpb24odHhfaWQsIEFQSV9QQVRIKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgdHJhbnNhY3Rpb246JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMClcbiAgICB9KVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vcG9sbFN0YXR1c0FuZEZldGNoVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvc3RUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zJ10sIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGpzb25Cb2R5OiB0cmFuc2FjdGlvblxuICAgIH0pXG59XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL3Bvc3RUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuXG4vLyBSZWdleGVzIHRha2VuIGZyb20gb3IgaW5zcGlyZWQgYnkgc3ByaW50Zi1qc1xuY29uc3QgUmVnZXggPSB7XG4gICAgVEVNUExBVEVfTElURVJBTDogL1xcJHsoW15cXCldKz8pfS9nLFxuICAgIEtFWTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICBLRVlfQUNDRVNTOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgIElOREVYX0FDQ0VTUzogL15cXFsoXFxkKylcXF0vXG59O1xuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEZvcm1hdHMgc3RyaW5ncyBzaW1pbGFybHkgdG8gQydzIHNwcmludGYsIHdpdGggdGhlIGFkZGl0aW9uIG9mICckey4uLn0nIGZvcm1hdHMuXG4gKlxuICogTWFrZXMgYSBmaXJzdCBwYXNzIHJlcGxhY2luZyAnJHsuLi59JyBmb3JtYXRzIGJlZm9yZSBwYXNzaW5nIHRoZSBleHBhbmRlZCBzdHJpbmcgYW5kIG90aGVyXG4gKiBhcmd1bWVudHMgdG8gc3ByaW50Zi1qcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCBzcHJpbnRmIGNhbiBkbywgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgIGZvcm1hdFRleHQoJ0hpIHRoZXJlICR7ZGltaX0hJywgeyBkaW1pOiAnRGltaScgfSlcbiAqICAgICAgID0+ICdIaSB0aGVyZSBEaW1pISdcbiAqXG4gKiAgIGZvcm1hdFRleHQoJyR7ZGF0YWJhc2V9IGlzICUoc3RhdHVzKXMnLCB7IGRhdGFiYXNlOiAnQmlnY2hhaW5EQicsIHN0YXR1czogJ2JpZycgfSlcbiAqICAgICAgID0+ICdCaWdjaGFpbkRCIGlzIGJpZydcbiAqXG4gKiBMaWtlIHNwcmludGYtanMsIHN0cmluZyBpbnRlcnBvbGF0aW9uIGZvciBrZXl3b3JkcyBhbmQgaW5kZXhlcyBpcyBzdXBwb3J0ZWQgdG9vOlxuICogICBmb3JtYXRUZXh0KCdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzICR7YmVybGluLnRvcEtub3duRm9yWzBdLm5hbWV9Jywge1xuICogICAgICAgYmVybGluOiB7XG4gKiAgICAgICAgICAgdG9wS25vd25Gb3I6IFt7XG4gKiAgICAgICAgICAgICAgIG5hbWU6ICdDdXJyeXd1cnN0J1xuICogICAgICAgICAgIH0sIC4uLlxuICogICAgICAgICAgIF1cbiAqICAgICAgIH1cbiAqICAgfSlcbiAqICAgICAgID0+ICdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzIEN1cnJ5d3Vyc3QnXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFRleHQocywgLi4uYXJndikge1xuICAgIGxldCBleHBhbmRlZEZvcm1hdFN0ciA9IHM7XG5cbiAgICAvLyBUcnkgdG8gcmVwbGFjZSBmb3JtYXRzIG9mIHRoZSBmb3JtICckey4uLn0nIGlmIG5hbWVkIHJlcGxhY2VtZW50IGZpZWxkcyBhcmUgdXNlZFxuICAgIGlmIChzICYmIGFyZ3YubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd2WzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVNwZWNPYmogPSBhcmd2WzBdO1xuXG4gICAgICAgIGV4cGFuZGVkRm9ybWF0U3RyID0gcy5yZXBsYWNlKFJlZ2V4LlRFTVBMQVRFX0xJVEVSQUwsIChtYXRjaCwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uTGVmdCA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEludGVycG9sYXRpb24gYWxnb3JpdGhtIGluc3BpcmVkIGJ5IHNwcmludGYtanMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogR29lcyB0aHJvdWdoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgZ2V0dGluZyB0aGUgbGVmdC1tb3N0IGtleSBvciBpbmRleCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICogb24gZWFjaCBwYXNzLiBgdmFsdWVgIGF0IGVhY2ggc3RlcCBob2xkcyB0aGUgbGFzdCBpbnRlcnBvbGF0aW9uIHJlc3VsdCwgYGN1ck1hdGNoYCBpc1xuICAgICAgICAgICAgICogdGhlIGN1cnJlbnQgcHJvcGVydHkgbWF0Y2gsIGFuZCBgaW50ZXJwb2xhdGlvbkxlZnRgIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgICogc3RyaW5nIHN0aWxsIHRvIGJlIGludGVycG9sYXRlZC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBJdCdzIHVzZWZ1bCB0byBub3RlIHRoYXQgUmVnRXhwLmV4ZWMoKSByZXR1cm5zIHdpdGggYW4gYXJyYXkgaG9sZGluZzpcbiAgICAgICAgICAgICAqICAgWzBdOiAgRnVsbCBzdHJpbmcgbWF0Y2hlZFxuICAgICAgICAgICAgICogICBbMStdOiBNYXRjaGluZyBncm91cHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBBbmQgdGhhdCBpbiB0aGUgcmVnZXhlcyBkZWZpbmVkLCB0aGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgICAgICAgICAgICogcHJvcGVydHkgbWF0Y2hlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgbGV0IGN1ck1hdGNoID0gUmVnZXguS0VZLmV4ZWMoaW50ZXJwb2xhdGlvbkxlZnQpO1xuICAgICAgICAgICAgaWYgKGN1ck1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wbGF0ZVNwZWNPYmpbY3VyTWF0Y2hbMV1dO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduaW5nIGluIHRoZSBjb25kaXRpb25hbHMgaGVyZSBtYWtlcyB0aGUgY29kZSBsZXNzIGJsb2F0ZWRcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgICAgIHdoaWxlICgoaW50ZXJwb2xhdGlvbkxlZnQgPSBpbnRlcnBvbGF0aW9uTGVmdC5zdWJzdHJpbmcoY3VyTWF0Y2hbMF0ubGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGN1ck1hdGNoID0gUmVnZXguS0VZX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJNYXRjaCA9IFJlZ2V4LklOREVYX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFueXRoaW5nIGxlZnQgdG8gaW50ZXJwb2xhdGUgYnkgdGhlIGVuZCB0aGVuIHdlJ3ZlIGZhaWxlZCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbkxlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgW2Zvcm1hdFRleHRdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXk6ICR7cmVwbGFjZW1lbnR9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwcmludGYoZXhwYW5kZWRGb3JtYXRTdHIsIC4uLmFyZ3YpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9mb3JtYXRfdGV4dC5qcyIsImltcG9ydCBjb3JlSW5jbHVkZXMgZnJvbSAnY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzJztcbmltcG9ydCBjb3JlT2JqZWN0RW50cmllcyBmcm9tICdjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMnO1xuXG5cbi8qKlxuICogQWJzdHJhY3Rpb24gZm9yIHNlbGVjdEZyb21PYmplY3QgYW5kIG9taXRGcm9tT2JqZWN0IGZvciBEUlluZXNzLlxuICogU2V0IGlzSW5jbHVzaW9uIHRvIHRydWUgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgZm9yIGluY2x1ZGluZyB0aGUgZmlsdGVyZWQgaXRlbXMgKGllLiBzZWxlY3RpbmdcbiAqIG9ubHkgdGhlbSB2cyBvbWl0dGluZyBvbmx5IHRoZW0pLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyLCB7IGlzSW5jbHVzaW9uID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoZmlsdGVyICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICByZXR1cm4gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGlzSW5jbHVzaW9uID8gKChfLCBrZXkpID0+IGNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKF8sIGtleSkgPT4gIWNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZsaXAgdGhlIGZpbHRlciBmbidzIHJldHVybiBpZiBpdCdzIGZvciBpbmNsdXNpb25cbiAgICAgICAgcmV0dXJuIGFwcGx5RmlsdGVyT25PYmplY3Qob2JqLCBpc0luY2x1c2lvbiA/IGZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKC4uLmFyZ3MpID0+ICFmaWx0ZXIoLi4uYXJncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIGZpbHRlciBpcyBub3QgYW4gYXJyYXkgb3IgZnVuY3Rpb24uIEV4Y2x1ZGUgYWJvcnRlZCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZmlsdGVyZWQgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3Mgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyAobm8gaW5oZXJpdGVkXG4gKiBwcm9wZXJ0aWVzKSwga2VlcGluZyBhbnkga2V5cyB0aGF0IHBhc3MgdGhlIGdpdmVuIGZpbHRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGZpbHRlckZuKSB7XG4gICAgaWYgKGZpbHRlckZuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRPYmogPSB7fTtcbiAgICBjb3JlT2JqZWN0RW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckZuKHZhbCwga2V5KSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkT2JqO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gbG9kYXNoJ3MgXy5waWNrKCksIHRoaXMgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCdzXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNlbGVjdGluZyBvbmx5IHRoZSBrZXlzIGluXG4gKiB0aGUgZ2l2ZW4gYXJyYXkgb3Igd2hvc2UgdmFsdWUgcGFzcyB0aGUgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgIG9iaiAgICBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0gIHthcnJheXxmdW5jdGlvbn0gZmlsdGVyIEFycmF5IG9mIGtleSBuYW1lcyB0byBzZWxlY3Qgb3IgZnVuY3Rpb24gdG8gaW52b2tlIHBlciBpdGVyYXRpb25cbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgICAgICAgVGhlIG5ldyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0RnJvbU9iamVjdChvYmosIGZpbHRlcikge1xuICAgIHJldHVybiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBHbG9yaWZpZWQgc2VsZWN0RnJvbU9iamVjdC4gVGFrZXMgYW4gb2JqZWN0IGFuZCByZXR1cm5zIGEgZmlsdGVyZWQgc2hhbGxvdyBjb3B5IHRoYXQgc3RyaXBzIG91dFxuICogYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZmFsc3kgKGluY2x1ZGluZyBjb2VyY2lvbnMsIGllLiB1bmRlZmluZWQsIG51bGwsICcnLCAwLCAuLi4pLlxuICogRG9lcyBub3QgbW9kaWZ5IHRoZSBwYXNzZWQgaW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqICAgICAgSmF2YXNjcmlwdCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgU2FuaXRpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNhbml0aXplKG9iaikge1xuICAgIHJldHVybiBzZWxlY3RGcm9tT2JqZWN0KG9iaiwgKHZhbCkgPT4gISF2YWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Nhbml0aXplLmpzIiwiaW1wb3J0IHNoYTMgZnJvbSAnanMtc2hhMyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYTI1Nkhhc2goZGF0YSkge1xuICAgIHJldHVybiBzaGEzLnNoYTNfMjU2XG4gICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAudXBkYXRlKGRhdGEpXG4gICAgICAgIC5oZXgoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zaGEyNTZIYXNoLmpzIiwiaW1wb3J0IGNvcmVPYmplY3RFbnRyaWVzIGZyb20gJ2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcyc7XG5pbXBvcnQgZGVjYW1lbGl6ZSBmcm9tICdkZWNhbWVsaXplJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG5cbi8qKlxuICogaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmlnY2hhaW5kYi9qcy11dGlsaXR5LWJlbHQvXG4gKlxuICogVGFrZXMgYSBrZXktdmFsdWUgZGljdGlvbmFyeSAoaWUuIG9iamVjdCkgYW5kIGNvbnZlcnRzIGl0IHRvIGEgcXVlcnktcGFyYW1ldGVyIHN0cmluZyB0aGF0IHlvdVxuICogY2FuIGRpcmVjdGx5IGFwcGVuZCBpbnRvIGEgVVJMLlxuICpcbiAqIEV4dGVuZHMgcXVlcnlTdHJpbmcuc3RyaW5naWZ5IGJ5IGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IGEgYHRyYW5zZm9ybWAgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gKiBpbnZva2VkIG9uIGVhY2ggb2YgdGhlIGRpY3Rpb25hcnkncyBrZXlzIGJlZm9yZSBiZWluZyBzdHJpbmdpZmllZCBpbnRvIHRoZSBxdWVyeS1wYXJhbWV0ZXJcbiAqIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0IGB0cmFuc2Zvcm1gIGlzIGBkZWNhbWVsaXplYCwgc28gYSBkaWN0aW9uYXJ5IG9mIHRoZSBmb3JtOlxuICpcbiAqICAge1xuICogICAgICBwYWdlOiAxLFxuICogICAgICBwYWdlU2l6ZTogMTBcbiAqICAgfVxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGxpa2U6XG4gKlxuICogICA/cGFnZT0xJnBhZ2Vfc2l6ZT0xMFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmogICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtcyBkaWN0aW9uYXJ5XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gW3RyYW5zZm9ybT1kZWNhbWVsaXplXSBUcmFuc2Zvcm0gZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHBhcmFtIGtleXNcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtIHN0cmluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0ob2JqLCB0cmFuc2Zvcm0gPSBkZWNhbWVsaXplKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKG9iaikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEtleXNPYmogPSBjb3JlT2JqZWN0RW50cmllcyhvYmopLnJlZHVjZSgocGFyYW1zT2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgcGFyYW1zT2JqW3RyYW5zZm9ybShrZXkpXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcGFyYW1zT2JqO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBgPyR7cXVlcnlTdHJpbmcuc3RyaW5naWZ5KHRyYW5zZm9ybWVkS2V5c09iail9YDtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwiaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5pbXBvcnQgc2hhMjU2SGFzaCBmcm9tICcuLi9zaGEyNTZIYXNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7XG4gICAgLy8gU2FmZWx5IHJlbW92ZSBhbnkgdHggaWQgZnJvbSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gZm9yIGhhc2hpbmdcbiAgICBjb25zdCB0eCA9IHsgLi4udHJhbnNhY3Rpb24gfTtcbiAgICBkZWxldGUgdHguaWQ7XG5cbiAgICByZXR1cm4gc2hhMjU2SGFzaChzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHgpKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBDUkVBVEVgIHRyYW5zYWN0aW9uIGhvbGRpbmcgdGhlIGBhc3NldGAsIGBtZXRhZGF0YWAsIGFuZCBgb3V0cHV0c2AsIHRvIGJlIHNpZ25lZCBieVxuICogdGhlIGBpc3N1ZXJzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhc3NldCBDcmVhdGVkIGFzc2V0J3MgZGF0YVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBDUkVBVEVgIFRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGEgbGlzdCBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIHdyYXBwaW5nIEVkMjU1MTkgQ29uZGl0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgaXNzdWVycycgcHVibGljXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgKHNvIHRoYXQgdGhlIGlzc3VlcnMgYXJlIHRoZSByZWNpcGllbnRzIG9mIHRoZSBjcmVhdGVkIGFzc2V0KS5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nW119IGlzc3VlcnMgUHVibGljIGtleSBvZiBvbmUgb3IgbW9yZSBpc3N1ZXJzIHRvIHRoZSBhc3NldCBiZWluZyBjcmVhdGVkIGJ5IHRoaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IEVhY2ggb2YgdGhlIHByaXZhdGUga2V5cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwdWJsaWNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyBNVVNUIGJlIHVzZWQgbGF0ZXIgKGFuZCBpbiB0aGUgc2FtZSBvcmRlcikgd2hlbiBzaWduaW5nIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ3JlYXRlVHJhbnNhY3Rpb24oYXNzZXQsIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5pc3N1ZXJzKSB7XG4gICAgY29uc3QgYXNzZXREZWZpbml0aW9uID0ge1xuICAgICAgICAnZGF0YSc6IGFzc2V0IHx8IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCBpbnB1dHMgPSBpc3N1ZXJzLm1hcCgoaXNzdWVyKSA9PiBtYWtlSW5wdXRUZW1wbGF0ZShbaXNzdWVyXSkpO1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignQ1JFQVRFJywgYXNzZXREZWZpbml0aW9uLCBtZXRhZGF0YSwgb3V0cHV0cywgaW5wdXRzKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUNyZWF0ZVRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcbmltcG9ydCBjYyBmcm9tICdmaXZlLWJlbGxzLWNvbmRpdGlvbic7XG5cbmltcG9ydCBjY0pzb25pZnkgZnJvbSAnLi91dGlscy9jY0pzb25pZnknO1xuXG5cbi8qKlxuICogQHB1YmxpY1xuICogQ3JlYXRlIGFuIEVkMjU1MTkgQ3J5cHRvY29uZGl0aW9uIGZyb20gYW4gRWQyNTUxOSBwdWJsaWMga2V5IHRvIHB1dCBpbnRvIGFuIE91dHB1dCBvZiBhIFRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IGJhc2U1OCBlbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBmb3IgdGhlIHJlY2lwaWVudCBvZiB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2pzb249dHJ1ZV0gSWYgdHJ1ZSByZXR1cm5zIGEganNvbiBvYmplY3Qgb3RoZXJ3aXNlIGEgY3J5cHRvLWNvbmRpdGlvbiB0eXBlXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VFZDI1NTE5Q29uZGl0aW9uKHB1YmxpY0tleSwganNvbj10cnVlKSB7XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKHB1YmxpY0tleSkpO1xuXG4gICAgY29uc3QgZWQyNTUxOUZ1bGZpbGxtZW50ID0gbmV3IGNjLkVkMjU1MTkoKTtcbiAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2V0UHVibGljS2V5KHB1YmxpY0tleUJ1ZmZlcik7XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgICByZXR1cm4gY2NKc29uaWZ5KGVkMjU1MTlGdWxmaWxsbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gZWQyNTUxOUZ1bGZpbGxtZW50O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwiLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gT3V0cHV0IGZyb20gYSBDb25kaXRpb24uXG4gKiBOb3RlOiBBc3N1bWVzIHRoZSBnaXZlbiBDb25kaXRpb24gd2FzIGdlbmVyYXRlZCBmcm9tIGEgc2luZ2xlIHB1YmxpYyBrZXkgKGUuZy4gYSBFZDI1NTE5IENvbmRpdGlvbilcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb24gQ29uZGl0aW9uIChlLmcuIGEgRWQyNTUxOSBDb25kaXRpb24gZnJvbSBgbWFrZUVkMjU1MTlDb25kaXRpb24oKWApXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFtb3VudCBvZiB0aGUgb3V0cHV0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBPdXRwdXQgdXNhYmxlIGluIGEgVHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZU91dHB1dChjb25kaXRpb24sIGFtb3VudCA9IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IEpTT04uc3RyaW5naWZ5KGFtb3VudCksXG4gICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgJ3B1YmxpY19rZXlzJzogY29uZGl0aW9uLmRldGFpbHMuaGFzT3duUHJvcGVydHkoJ3B1YmxpY19rZXknKSA/XG4gICAgICAgICAgICBbY29uZGl0aW9uLmRldGFpbHMucHVibGljX2tleV0gOiBbXSxcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYSBQcmVpbWFnZS1TaGEyNTYgQ3J5cHRvY29uZGl0aW9uIGZyb20gYSBzZWNyZXQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVpbWFnZSBQcmVpbWFnZSB0byBiZSBoYXNoZWQgYW5kIHdyYXBwZWQgaW4gYSBjcnlwdG8tY29uZGl0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqc29uPXRydWVdIElmIHRydWUgcmV0dXJucyBhIGpzb24gb2JqZWN0IG90aGVyd2lzZSBhIGNyeXB0by1jb25kaXRpb24gdHlwZVxuICogQHJldHVybnMge29iamVjdH0gUHJlaW1hZ2UtU2hhMjU2IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VTaGEyNTZDb25kaXRpb24ocHJlaW1hZ2UsIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHNoYTI1NkZ1bGZpbGxtZW50ID0gbmV3IGNjLlByZWltYWdlU2hhMjU2KCk7XG4gICAgc2hhMjU2RnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKHByZWltYWdlKTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkoc2hhMjU2RnVsZmlsbG1lbnQpXG4gICAgfVxuICAgIHJldHVybiBzaGEyNTZGdWxmaWxsbWVudDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlU2hhMjU2Q29uZGl0aW9uLmpzIiwiaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gU2hhMjU2IFRocmVzaG9sZCBDcnlwdG9jb25kaXRpb24gZnJvbSB0aHJlc2hvbGQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGRcbiAqIEBwYXJhbSB7QXJyYXl9IFtzdWJjb25kaXRpb25zPVtdXVxuICogQHBhcmFtIHtib29sZWFufSBbanNvbj10cnVlXSBJZiB0cnVlIHJldHVybnMgYSBqc29uIG9iamVjdCBvdGhlcndpc2UgYSBjcnlwdG8tY29uZGl0aW9uIHR5cGVcbiAqIEByZXR1cm5zIHtvYmplY3R9IFNoYTI1NiBUaHJlc2hvbGQgQ29uZGl0aW9uICh0aGF0IHdpbGwgbmVlZCB0byB3cmFwcGVkIGluIGFuIE91dHB1dClcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRocmVzaG9sZENvbmRpdGlvbih0aHJlc2hvbGQsIHN1YmNvbmRpdGlvbnM9W10sIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZENvbmRpdGlvbiA9IG5ldyBjYy5UaHJlc2hvbGRTaGEyNTYoKTtcbiAgICB0aHJlc2hvbGRDb25kaXRpb24udGhyZXNob2xkID0gdGhyZXNob2xkO1xuXG4gICAgc3ViY29uZGl0aW9ucy5mb3JFYWNoKChzdWJjb25kaXRpb24pID0+IHtcbiAgICAgICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIENvbmRpdGlvbiBhbmQgVVJJc1xuICAgICAgICB0aHJlc2hvbGRDb25kaXRpb24uYWRkU3ViZnVsZmlsbG1lbnQoc3ViY29uZGl0aW9uKTtcbiAgICB9KTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkodGhyZXNob2xkQ29uZGl0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB0aHJlc2hvbGRDb25kaXRpb25cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVGhyZXNob2xkQ29uZGl0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBUUkFOU0ZFUmAgdHJhbnNhY3Rpb24gaG9sZGluZyB0aGUgYGFzc2V0YCwgYG1ldGFkYXRhYCwgYW5kIGBvdXRwdXRzYCwgdGhhdCBmdWxmaWxsc1xuICogdGhlIGBmdWxmaWxsZWRPdXRwdXRzYCBvZiBgdW5zcGVudFRyYW5zYWN0aW9uYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB1bnNwZW50VHJhbnNhY3Rpb24gUHJldmlvdXMgVHJhbnNhY3Rpb24geW91IGhhdmUgY29udHJvbCBvdmVyIChpLmUuIGNhbiBmdWxmaWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBPdXRwdXQgQ29uZGl0aW9uKVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBUUkFOU0ZFUmAgVHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgYSBsaXN0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHMgd3JhcHBpbmcgRWQyNTUxOSBDb25kaXRpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSBwdWJsaWMga2V5cyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBpZW50cy5cbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSBmdWxmaWxsZWRPdXRwdXRzIEluZGljZXMgb2YgdGhlIE91dHB1dHMgaW4gYHVuc3BlbnRUcmFuc2FjdGlvbmAgdGhhdCB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBmdWxmaWxscy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgcHVibGljIGtleXMgbGlzdGVkIGluIHRoZSBmdWxmaWxsZWQgT3V0cHV0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB1c2VkIChhbmQgaW4gdGhlIHNhbWUgb3JkZXIpIHRvIHNpZ24gdGhlIFRyYW5zYWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbih1bnNwZW50VHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5mdWxmaWxsZWRPdXRwdXRzKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZnVsZmlsbGVkT3V0cHV0cy5tYXAoKG91dHB1dEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGZpbGxlZE91dHB1dCA9IHVuc3BlbnRUcmFuc2FjdGlvbi5vdXRwdXRzW291dHB1dEluZGV4XTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25MaW5rID0ge1xuICAgICAgICAgICAgJ291dHB1dCc6IG91dHB1dEluZGV4LFxuICAgICAgICAgICAgJ3R4aWQnOiB1bnNwZW50VHJhbnNhY3Rpb24uaWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG1ha2VJbnB1dFRlbXBsYXRlKGZ1bGZpbGxlZE91dHB1dC5wdWJsaWNfa2V5cywgdHJhbnNhY3Rpb25MaW5rKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2V0TGluayA9IHtcbiAgICAgICAgJ2lkJzogdW5zcGVudFRyYW5zYWN0aW9uLm9wZXJhdGlvbiA9PT0gJ0NSRUFURScgPyB1bnNwZW50VHJhbnNhY3Rpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bnNwZW50VHJhbnNhY3Rpb24uYXNzZXQuaWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignVFJBTlNGRVInLCBhc3NldExpbmssIG1ldGFkYXRhLCBvdXRwdXRzLCBpbnB1dHMpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IGNsb25lIGZyb20gJ2Nsb25lJztcblxuaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBTaWduIHRoZSBnaXZlbiBgdHJhbnNhY3Rpb25gIHdpdGggdGhlIGdpdmVuIGBwcml2YXRlS2V5YHMsIHJldHVybmluZyBhIG5ldyBjb3B5IG9mIGB0cmFuc2FjdGlvbmBcbiAqIHRoYXQncyBiZWVuIHNpZ25lZC5cbiAqIE5vdGU6IE9ubHkgZ2VuZXJhdGVzIEVkMjU1MTkgRnVsZmlsbG1lbnRzLiBUaHJlc2hvbGRzIGFuZCBvdGhlciB0eXBlcyBvZiBGdWxmaWxsbWVudHMgYXJlIGxlZnQgYXNcbiAqIGFuIGV4ZXJjaXNlIGZvciB0aGUgdXNlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBzaWduLiBgdHJhbnNhY3Rpb25gIGlzIG5vdCBtb2RpZmllZC5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcml2YXRlS2V5cyBQcml2YXRlIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpc3N1ZXJzIG9mIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BlZCB0aHJvdWdoIHRvIGl0ZXJhdGl2ZWx5IHNpZ24gYW55IElucHV0IEZ1bGZpbGxtZW50cyBmb3VuZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHNpZ25lZCB2ZXJzaW9uIG9mIGB0cmFuc2FjdGlvbmAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgLi4ucHJpdmF0ZUtleXMpIHtcbiAgICBjb25zdCBzaWduZWRUeCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICBzaWduZWRUeC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwcml2YXRlS2V5c1tpbmRleF07XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUocHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBlZDI1NTE5RnVsZmlsbG1lbnQgPSBuZXcgY2MuRWQyNTUxOSgpO1xuICAgICAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2lnbihuZXcgQnVmZmVyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIHByaXZhdGVLZXlCdWZmZXIpO1xuICAgICAgICBjb25zdCBmdWxmaWxsbWVudFVyaSA9IGVkMjU1MTlGdWxmaWxsbWVudC5zZXJpYWxpemVVcmkoKTtcblxuICAgICAgICBpbnB1dC5mdWxmaWxsbWVudCA9IGZ1bGZpbGxtZW50VXJpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25lZFR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi5qcyIsImltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBMb2FkcyBhIGNyeXB0by1jb25kaXRpb24gY2xhc3MgKEZ1bGZpbGxtZW50IG9yIENvbmRpdGlvbikgZnJvbSBhIEJpZ2NoYWluREIgSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25Kc29uXG4gKiBAcmV0dXJucyB7Y2MuQ29uZGl0aW9ufSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjSnNvbkxvYWQoY29uZGl0aW9uSnNvbikge1xuXG4gICAgaWYgKCdoYXNoJyBpbiBjb25kaXRpb25Kc29uKSB7XG4gICAgICAgIGxldCBjb25kaXRpb24gPSBuZXcgY2MuQ29uZGl0aW9uKCk7XG4gICAgICAgIGNvbmRpdGlvbi50eXBlID0gY29uZGl0aW9uSnNvbi50eXBlX2lkO1xuICAgICAgICBjb25kaXRpb24uYml0bWFzayA9IGNvbmRpdGlvbkpzb24uYml0bWFzaztcbiAgICAgICAgY29uZGl0aW9uLmhhc2ggPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5oYXNoKSk7XG4gICAgICAgIGNvbmRpdGlvbi5tYXhGdWxmaWxsbWVudExlbmd0aCA9IHBhcnNlSW50KGNvbmRpdGlvbkpzb24ubWF4X2Z1bGZpbGxtZW50X2xlbmd0aCwgMTApO1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGZ1bGZpbGxtZW50O1xuXG4gICAgICAgIGlmIChjb25kaXRpb25Kc29uLnR5cGVfaWQgPT09IDIpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxtZW50ID0gbmV3IGNjLlRocmVzaG9sZFNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQudGhyZXNob2xkID0gY29uZGl0aW9uSnNvbi50aHJlc2hvbGQ7XG4gICAgICAgICAgICBjb25kaXRpb25Kc29uLnN1YmZ1bGZpbGxtZW50cy5mb3JFYWNoKChzdWJmdWxmaWxsbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmZ1bGZpbGxtZW50ID0gY2NKc29uTG9hZChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCdnZXRDb25kaXRpb25VcmknIGluIHN1YmZ1bGZpbGxtZW50KVxuICAgICAgICAgICAgICAgICAgICBmdWxmaWxsbWVudC5hZGRTdWJmdWxmaWxsbWVudChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ3NlcmlhbGl6ZVVyaScgaW4gc3ViZnVsZmlsbG1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxtZW50LmFkZFN1YmNvbmRpdGlvbihzdWJmdWxmaWxsbWVudClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5QcmVpbWFnZVNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKGNvbmRpdGlvbkpzb24ucHJlaW1hZ2UpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSA0KSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5FZDI1NTE5KCk7XG4gICAgICAgICAgICBmdWxmaWxsbWVudC5wdWJsaWNLZXkgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5wdWJsaWNfa2V5KSk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi5zaWduYXR1cmUpXG4gICAgICAgICAgICAgICAgZnVsZmlsbG1lbnQuc2lnbmF0dXJlID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKGNvbmRpdGlvbkpzb24uc2lnbmF0dXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGZpbGxtZW50O1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi91dGlscy9jY0pzb25Mb2FkLmpzIiwiLy8gYmFzZS14IGVuY29kaW5nXG4vLyBGb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvY29pbmpzL2JzNThcbi8vIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWtlIEhlYXJuIGZvciBCaXRjb2luSlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmNcbi8vIFBvcnRlZCB0byBKYXZhU2NyaXB0IGJ5IFN0ZWZhbiBUaG9tYXNcbi8vIE1lcmdlZCBCdWZmZXIgcmVmYWN0b3JpbmdzIGZyb20gYmFzZTU4LW5hdGl2ZSBieSBTdGVwaGVuIFBhaXJcbi8vIENvcHlyaWdodCAoYykgMjAxMyBCaXRQYXkgSW5jXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZSAoQUxQSEFCRVQpIHtcbiAgdmFyIEFMUEhBQkVUX01BUCA9IHt9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcblxuICAvLyBwcmUtY29tcHV0ZSBsb29rdXAgdGFibGVcbiAgZm9yICh2YXIgeiA9IDA7IHogPCBBTFBIQUJFVC5sZW5ndGg7IHorKykge1xuICAgIHZhciB4ID0gQUxQSEFCRVQuY2hhckF0KHopXG5cbiAgICBpZiAoQUxQSEFCRVRfTUFQW3hdICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgYW1iaWd1b3VzJylcbiAgICBBTFBIQUJFVF9NQVBbeF0gPSB6XG4gIH1cblxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm4gJydcblxuICAgIHZhciBkaWdpdHMgPSBbMF1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gc291cmNlW2ldOyBqIDwgZGlnaXRzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tqXSA8PCA4XG4gICAgICAgIGRpZ2l0c1tqXSA9IGNhcnJ5ICUgQkFTRVxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIEJBU0UpIHwgMFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGRpZ2l0cy5wdXNoKGNhcnJ5ICUgQkFTRSlcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gJydcblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHNvdXJjZVtrXSA9PT0gMCAmJiBrIDwgc291cmNlLmxlbmd0aCAtIDE7ICsraykgc3RyaW5nICs9IEFMUEhBQkVUWzBdXG4gICAgLy8gY29udmVydCBkaWdpdHMgdG8gYSBzdHJpbmdcbiAgICBmb3IgKHZhciBxID0gZGlnaXRzLmxlbmd0aCAtIDE7IHEgPj0gMDsgLS1xKSBzdHJpbmcgKz0gQUxQSEFCRVRbZGlnaXRzW3FdXVxuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlIChzdHJpbmcpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBCdWZmZXIoMClcblxuICAgIHZhciBieXRlcyA9IFswXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBBTFBIQUJFVF9NQVBbc3RyaW5nW2ldXVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVyblxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgY2FycnkgPSB2YWx1ZTsgaiA8IGJ5dGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGJ5dGVzW2pdICogQkFTRVxuICAgICAgICBieXRlc1tqXSA9IGNhcnJ5ICYgMHhmZlxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGJ5dGVzLnB1c2goY2FycnkgJiAweGZmKVxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHN0cmluZ1trXSA9PT0gTEVBREVSICYmIGsgPCBzdHJpbmcubGVuZ3RoIC0gMTsgKytrKSB7XG4gICAgICBieXRlcy5wdXNoKDApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYnl0ZXMucmV2ZXJzZSgpKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gYnVmZmVyXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlLXgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlNjQtanMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pbmNsdWRlcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDYyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzXG4vLyBtb2R1bGUgaWQgPSA2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGlzRW51bSAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc0VudHJpZXMpe1xuICByZXR1cm4gZnVuY3Rpb24oaXQpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoaXQpXG4gICAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaSAgICAgID0gMFxuICAgICAgLCByZXN1bHQgPSBbXVxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKXtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gNzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IDc2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiwgZnJvbUluZGV4ID0gMCAqLyl7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KXtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIHNlcCkge1xuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuXHR9XG5cblx0c2VwID0gdHlwZW9mIHNlcCA9PT0gJ3VuZGVmaW5lZCcgPyAnXycgOiBzZXA7XG5cblx0cmV0dXJuIHN0clxuXHRcdC5yZXBsYWNlKC8oW2EtelxcZF0pKFtBLVpdKS9nLCAnJDEnICsgc2VwICsgJyQyJylcblx0XHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XFxkXSspL2csICckMScgKyBzZXAgKyAnJDInKVxuXHRcdC50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9kZWNhbWVsaXplL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDQuMS4wXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICBpZiAodHlwZW9mIHZlcnR4TmV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgICAgR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlLmVycm9yID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlLnBvbHlmaWxsID0gcG9seWZpbGw7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuXG5yZXR1cm4gUHJvbWlzZTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNi1wcm9taXNlLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDgxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoc2VsZikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gZmV0Y2hQb255ZmlsbChvcHRpb25zKSB7XG4gICAgdmFyIFByb21pc2UgPSBvcHRpb25zICYmIG9wdGlvbnMuUHJvbWlzZSB8fCBzZWxmLlByb21pc2U7XG4gICAgdmFyIFhNTEh0dHBSZXF1ZXN0ID0gb3B0aW9ucyAmJiBvcHRpb25zLlhNTEh0dHBSZXF1ZXN0IHx8IHNlbGYuWE1MSHR0cFJlcXVlc3Q7XG4gICAgdmFyIGdsb2JhbCA9IHNlbGY7XG5cbiAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxmID0gT2JqZWN0LmNyZWF0ZShnbG9iYWwsIHtcbiAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoZnVuY3Rpb24oc2VsZikge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKHNlbGYuZmV0Y2gpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ID0ge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICAgICAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICAgICAgICBibG9iOiAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJiAnQmxvYicgaW4gc2VsZiAmJiAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgICAgICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgICAgICAgXVxuXG4gICAgICAgICAgdmFyIGlzRGF0YVZpZXcgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcCA9IHt9XG5cbiAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICAgICAgICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gW11cbiAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKSB9KVxuICAgICAgICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgICAgICAgfVxuXG4gICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7IGl0ZW1zLnB1c2godmFsdWUpIH0pXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSkgfSlcbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgICAgICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICAgICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQm9keSgpIHtcbiAgICAgICAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAgICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gICAgICAgIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgICAgICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ29taXQnXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpXG4gICAgICAgIH1cblxuICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICBib2R5LnRyaW0oKS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGZvcm1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gICAgICAgICAgcmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICAgICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSAnc3RhdHVzJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXMgOiAyMDBcbiAgICAgICAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snXG4gICAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgICAgICAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICAgICAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgICAgICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnNcbiAgICAgICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdFxuICAgICAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2VcblxuICAgICAgICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICAgICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuICAgICAgfSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoOiBzZWxmLmZldGNoLFxuICAgICAgICBIZWFkZXJzOiBzZWxmLkhlYWRlcnMsXG4gICAgICAgIFJlcXVlc3Q6IHNlbGYuUmVxdWVzdCxcbiAgICAgICAgUmVzcG9uc2U6IHNlbGYuUmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSgpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZldGNoUG9ueWZpbGw7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaFBvbnlmaWxsO1xuICB9IGVsc2Uge1xuICAgIHNlbGYuZmV0Y2hQb255ZmlsbCA9IGZldGNoUG9ueWZpbGw7XG4gIH1cbn0odHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnID8gdGhpcyA6IHNlbGYpKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZldGNoLXBvbnlmaWxsL2J1aWxkL2ZldGNoLWJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDgyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2lzYXJyYXkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBqc29uID0gdHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnID8gSlNPTiA6IHJlcXVpcmUoJ2pzb25pZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgc3BhY2UgPSBvcHRzLnNwYWNlIHx8ICcnO1xuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSBzcGFjZSA9IEFycmF5KHNwYWNlKzEpLmpvaW4oJyAnKTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG4gICAgdmFyIHJlcGxhY2VyID0gb3B0cy5yZXBsYWNlciB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKHBhcmVudCwga2V5LCBub2RlLCBsZXZlbCkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3BhY2UgPyAoJ1xcbicgKyBuZXcgQXJyYXkobGV2ZWwgKyAxKS5qb2luKHNwYWNlKSkgOiAnJztcbiAgICAgICAgdmFyIGNvbG9uU2VwYXJhdG9yID0gc3BhY2UgPyAnOiAnIDogJzonO1xuXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgbm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24uc3RyaW5naWZ5KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHN0cmluZ2lmeShub2RlLCBpLCBub2RlW2ldLCBsZXZlbCsxKSB8fCBqc29uLnN0cmluZ2lmeShudWxsKTtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdbJyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBqc29uLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBzZWVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZlbCsxKTtcblxuICAgICAgICAgICAgICAgIGlmKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBqc29uLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgICAgICAgICsgY29sb25TZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBrZXlWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLnNwbGljZShzZWVuLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KSh7ICcnOiBvYmogfSwgJycsIG9iaiwgMCk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZScpO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uaWZ5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanNvbmlmeS9saWIvcGFyc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZ2FwLFxuICAgIGluZGVudCxcbiAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgfSxcbiAgICByZXA7XG5cbmZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuICAgIC8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbiAgICAvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuICAgIC8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuICAgIC8vIHNlcXVlbmNlcy5cbiAgICBcbiAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyA/IGMgOlxuICAgICAgICAgICAgJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG59XG5cbmZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuICAgIC8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cbiAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICBcbiAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbiAgICAvLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuICAgICAgICAgICAgLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFycmF5LmlzQXJyYXlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB0aGVtIGluIGJyYWNrZXRzLlxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBnYXAgP1xuICAgICAgICAgICAgICAgICAgICAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJyA6XG4gICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZVxuICAgICAgICAgICAgLy8gc3RyaW5naWZpZWQuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG4gICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuICAgICAgICAvLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDogZ2FwID9cbiAgICAgICAgICAgICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nIDpcbiAgICAgICAgICAgICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICB2YXIgaTtcbiAgICBnYXAgPSAnJztcbiAgICBpbmRlbnQgPSAnJztcbiAgICBcbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4gICAgLy8gbWFueSBzcGFjZXMuXG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuICAgIGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG4gICAgcmVwID0gcmVwbGFjZXI7XG4gICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICYmICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cbiAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb25pZnkvbGliL3N0cmluZ2lmeS5qc1xuLy8gbW9kdWxlIGlkID0gODhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbmZ1bmN0aW9uIGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHN3aXRjaCAob3B0cy5hcnJheUZvcm1hdCkge1xuXHRcdGNhc2UgJ2luZGV4Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRpbmRleCxcblx0XHRcdFx0XHQnXSdcblx0XHRcdFx0XS5qb2luKCcnKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnWycsXG5cdFx0XHRcdFx0ZW5jb2RlKGluZGV4LCBvcHRzKSxcblx0XHRcdFx0XHQnXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnW109Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHZhciByZXN1bHQ7XG5cblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBhY2N1bXVsYXRvcikge1xuXHRcdFx0XHRyZXN1bHQgPSAvXFxbKFxcZCopXFxdJC8uZXhlYyhrZXkpO1xuXG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFtcXGQqXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XVtyZXN1bHRbMV1dID0gdmFsdWU7XG5cdFx0XHR9O1xuXG5cdFx0Y2FzZSAnYnJhY2tldCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC8oXFxbXFxdKSQvLmV4ZWMoa2V5KTtcblxuXHRcdFx0XHRrZXkgPSBrZXkucmVwbGFjZSgvXFxbXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCB8fCBhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgYWNjdW11bGF0b3IpIHtcblx0XHRcdFx0aWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gW10uY29uY2F0KGFjY3VtdWxhdG9yW2tleV0sIHZhbHVlKTtcblx0XHRcdH07XG5cdH1cbn1cblxuZnVuY3Rpb24gZW5jb2RlKHZhbHVlLCBvcHRzKSB7XG5cdGlmIChvcHRzLmVuY29kZSkge1xuXHRcdHJldHVybiBvcHRzLnN0cmljdCA/IHN0cmljdFVyaUVuY29kZSh2YWx1ZSkgOiBlbmNvZGVVUklDb21wb25lbnQodmFsdWUpO1xuXHR9XG5cblx0cmV0dXJuIHZhbHVlO1xufVxuXG5mdW5jdGlvbiBrZXlzU29ydGVyKGlucHV0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGlucHV0KSkge1xuXHRcdHJldHVybiBpbnB1dC5zb3J0KCk7XG5cdH0gZWxzZSBpZiAodHlwZW9mIGlucHV0ID09PSAnb2JqZWN0Jykge1xuXHRcdHJldHVybiBrZXlzU29ydGVyKE9iamVjdC5rZXlzKGlucHV0KSkuc29ydChmdW5jdGlvbiAoYSwgYikge1xuXHRcdFx0cmV0dXJuIE51bWJlcihhKSAtIE51bWJlcihiKTtcblx0XHR9KS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdFx0cmV0dXJuIGlucHV0W2tleV07XG5cdFx0fSk7XG5cdH1cblxuXHRyZXR1cm4gaW5wdXQ7XG59XG5cbmV4cG9ydHMuZXh0cmFjdCA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIHN0ci5zcGxpdCgnPycpWzFdIHx8ICcnO1xufTtcblxuZXhwb3J0cy5wYXJzZSA9IGZ1bmN0aW9uIChzdHIsIG9wdHMpIHtcblx0b3B0cyA9IG9iamVjdEFzc2lnbih7YXJyYXlGb3JtYXQ6ICdub25lJ30sIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKTtcblxuXHQvLyBDcmVhdGUgYW4gb2JqZWN0IHdpdGggbm8gcHJvdG90eXBlXG5cdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL2lzc3Vlcy80N1xuXHR2YXIgcmV0ID0gT2JqZWN0LmNyZWF0ZShudWxsKTtcblxuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHRyZXR1cm4gcmV0O1xuXHR9XG5cblx0c3RyID0gc3RyLnRyaW0oKS5yZXBsYWNlKC9eKFxcP3wjfCYpLywgJycpO1xuXG5cdGlmICghc3RyKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ci5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24gKHBhcmFtKSB7XG5cdFx0dmFyIHBhcnRzID0gcGFyYW0ucmVwbGFjZSgvXFwrL2csICcgJykuc3BsaXQoJz0nKTtcblx0XHQvLyBGaXJlZm94IChwcmUgNDApIGRlY29kZXMgYCUzRGAgdG8gYD1gXG5cdFx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL3NpbmRyZXNvcmh1cy9xdWVyeS1zdHJpbmcvcHVsbC8zN1xuXHRcdHZhciBrZXkgPSBwYXJ0cy5zaGlmdCgpO1xuXHRcdHZhciB2YWwgPSBwYXJ0cy5sZW5ndGggPiAwID8gcGFydHMuam9pbignPScpIDogdW5kZWZpbmVkO1xuXG5cdFx0Ly8gbWlzc2luZyBgPWAgc2hvdWxkIGJlIGBudWxsYDpcblx0XHQvLyBodHRwOi8vdzMub3JnL1RSLzIwMTIvV0QtdXJsLTIwMTIwNTI0LyNjb2xsZWN0LXVybC1wYXJhbWV0ZXJzXG5cdFx0dmFsID0gdmFsID09PSB1bmRlZmluZWQgPyBudWxsIDogZGVjb2RlVVJJQ29tcG9uZW50KHZhbCk7XG5cblx0XHRmb3JtYXR0ZXIoZGVjb2RlVVJJQ29tcG9uZW50KGtleSksIHZhbCwgcmV0KTtcblx0fSk7XG5cblx0cmV0dXJuIE9iamVjdC5rZXlzKHJldCkuc29ydCgpLnJlZHVjZShmdW5jdGlvbiAocmVzdWx0LCBrZXkpIHtcblx0XHR2YXIgdmFsID0gcmV0W2tleV07XG5cdFx0aWYgKEJvb2xlYW4odmFsKSAmJiB0eXBlb2YgdmFsID09PSAnb2JqZWN0JyAmJiAhQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHQvLyBTb3J0IG9iamVjdCBrZXlzLCBub3QgdmFsdWVzXG5cdFx0XHRyZXN1bHRba2V5XSA9IGtleXNTb3J0ZXIodmFsKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0cmVzdWx0W2tleV0gPSB2YWw7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fSwgT2JqZWN0LmNyZWF0ZShudWxsKSk7XG59O1xuXG5leHBvcnRzLnN0cmluZ2lmeSA9IGZ1bmN0aW9uIChvYmosIG9wdHMpIHtcblx0dmFyIGRlZmF1bHRzID0ge1xuXHRcdGVuY29kZTogdHJ1ZSxcblx0XHRzdHJpY3Q6IHRydWUsXG5cdFx0YXJyYXlGb3JtYXQ6ICdub25lJ1xuXHR9O1xuXG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oZGVmYXVsdHMsIG9wdHMpO1xuXG5cdHZhciBmb3JtYXR0ZXIgPSBlbmNvZGVyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0cmV0dXJuIG9iaiA/IE9iamVjdC5rZXlzKG9iaikuc29ydCgpLm1hcChmdW5jdGlvbiAoa2V5KSB7XG5cdFx0dmFyIHZhbCA9IG9ialtrZXldO1xuXG5cdFx0aWYgKHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRyZXR1cm4gJyc7XG5cdFx0fVxuXG5cdFx0aWYgKHZhbCA9PT0gbnVsbCkge1xuXHRcdFx0cmV0dXJuIGVuY29kZShrZXksIG9wdHMpO1xuXHRcdH1cblxuXHRcdGlmIChBcnJheS5pc0FycmF5KHZhbCkpIHtcblx0XHRcdHZhciByZXN1bHQgPSBbXTtcblxuXHRcdFx0dmFsLnNsaWNlKCkuZm9yRWFjaChmdW5jdGlvbiAodmFsMikge1xuXHRcdFx0XHRpZiAodmFsMiA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0cmVzdWx0LnB1c2goZm9ybWF0dGVyKGtleSwgdmFsMiwgcmVzdWx0Lmxlbmd0aCkpO1xuXHRcdFx0fSk7XG5cblx0XHRcdHJldHVybiByZXN1bHQuam9pbignJicpO1xuXHRcdH1cblxuXHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKSArICc9JyArIGVuY29kZSh2YWwsIG9wdHMpO1xuXHR9KS5maWx0ZXIoZnVuY3Rpb24gKHgpIHtcblx0XHRyZXR1cm4geC5sZW5ndGggPiAwO1xuXHR9KS5qb2luKCcmJykgOiAnJztcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcXVlcnktc3RyaW5nL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIpIHtcblx0cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChzdHIpLnJlcGxhY2UoL1shJygpKl0vZywgZnVuY3Rpb24gKGMpIHtcblx0XHRyZXR1cm4gJyUnICsgYy5jaGFyQ29kZUF0KDApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpO1xuXHR9KTtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vc3RyaWN0LXVyaS1lbmNvZGUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDkxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbihuYWNsKSB7XG4ndXNlIHN0cmljdCc7XG5cbi8vIFBvcnRlZCBpbiAyMDE0IGJ5IERtaXRyeSBDaGVzdG55a2ggYW5kIERldmkgTWFuZGlyaS5cbi8vIFB1YmxpYyBkb21haW4uXG4vL1xuLy8gSW1wbGVtZW50YXRpb24gZGVyaXZlZCBmcm9tIFR3ZWV0TmFDbCB2ZXJzaW9uIDIwMTQwNDI3LlxuLy8gU2VlIGZvciBkZXRhaWxzOiBodHRwOi8vdHdlZXRuYWNsLmNyLnlwLnRvL1xuXG52YXIgZ2YgPSBmdW5jdGlvbihpbml0KSB7XG4gIHZhciBpLCByID0gbmV3IEZsb2F0NjRBcnJheSgxNik7XG4gIGlmIChpbml0KSBmb3IgKGkgPSAwOyBpIDwgaW5pdC5sZW5ndGg7IGkrKykgcltpXSA9IGluaXRbaV07XG4gIHJldHVybiByO1xufTtcblxuLy8gIFBsdWdnYWJsZSwgaW5pdGlhbGl6ZWQgaW4gaGlnaC1sZXZlbCBBUEkgYmVsb3cuXG52YXIgcmFuZG9tYnl0ZXMgPSBmdW5jdGlvbigvKiB4LCBuICovKSB7IHRocm93IG5ldyBFcnJvcignbm8gUFJORycpOyB9O1xuXG52YXIgXzAgPSBuZXcgVWludDhBcnJheSgxNik7XG52YXIgXzkgPSBuZXcgVWludDhBcnJheSgzMik7IF85WzBdID0gOTtcblxudmFyIGdmMCA9IGdmKCksXG4gICAgZ2YxID0gZ2YoWzFdKSxcbiAgICBfMTIxNjY1ID0gZ2YoWzB4ZGI0MSwgMV0pLFxuICAgIEQgPSBnZihbMHg3OGEzLCAweDEzNTksIDB4NGRjYSwgMHg3NWViLCAweGQ4YWIsIDB4NDE0MSwgMHgwYTRkLCAweDAwNzAsIDB4ZTg5OCwgMHg3Nzc5LCAweDQwNzksIDB4OGNjNywgMHhmZTczLCAweDJiNmYsIDB4NmNlZSwgMHg1MjAzXSksXG4gICAgRDIgPSBnZihbMHhmMTU5LCAweDI2YjIsIDB4OWI5NCwgMHhlYmQ2LCAweGIxNTYsIDB4ODI4MywgMHgxNDlhLCAweDAwZTAsIDB4ZDEzMCwgMHhlZWYzLCAweDgwZjIsIDB4MTk4ZSwgMHhmY2U3LCAweDU2ZGYsIDB4ZDlkYywgMHgyNDA2XSksXG4gICAgWCA9IGdmKFsweGQ1MWEsIDB4OGYyNSwgMHgyZDYwLCAweGM5NTYsIDB4YTdiMiwgMHg5NTI1LCAweGM3NjAsIDB4NjkyYywgMHhkYzVjLCAweGZkZDYsIDB4ZTIzMSwgMHhjMGE0LCAweDUzZmUsIDB4Y2Q2ZSwgMHgzNmQzLCAweDIxNjldKSxcbiAgICBZID0gZ2YoWzB4NjY1OCwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2Nl0pLFxuICAgIEkgPSBnZihbMHhhMGIwLCAweDRhMGUsIDB4MWIyNywgMHhjNGVlLCAweGU0NzgsIDB4YWQyZiwgMHgxODA2LCAweDJmNDMsIDB4ZDdhNywgMHgzZGZiLCAweDAwOTksIDB4MmI0ZCwgMHhkZjBiLCAweDRmYzEsIDB4MjQ4MCwgMHgyYjgzXSk7XG5cbmZ1bmN0aW9uIHRzNjQoeCwgaSwgaCwgbCkge1xuICB4W2ldICAgPSAoaCA+PiAyNCkgJiAweGZmO1xuICB4W2krMV0gPSAoaCA+PiAxNikgJiAweGZmO1xuICB4W2krMl0gPSAoaCA+PiAgOCkgJiAweGZmO1xuICB4W2krM10gPSBoICYgMHhmZjtcbiAgeFtpKzRdID0gKGwgPj4gMjQpICAmIDB4ZmY7XG4gIHhbaSs1XSA9IChsID4+IDE2KSAgJiAweGZmO1xuICB4W2krNl0gPSAobCA+PiAgOCkgICYgMHhmZjtcbiAgeFtpKzddID0gbCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIHZuKHgsIHhpLCB5LCB5aSwgbikge1xuICB2YXIgaSxkID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgZCB8PSB4W3hpK2ldXnlbeWkraV07XG4gIHJldHVybiAoMSAmICgoZCAtIDEpID4+PiA4KSkgLSAxO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fdmVyaWZ5XzE2KHgsIHhpLCB5LCB5aSkge1xuICByZXR1cm4gdm4oeCx4aSx5LHlpLDE2KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8zMih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwzMik7XG59XG5cbmZ1bmN0aW9uIGNvcmVfc2Fsc2EyMChvLCBwLCBrLCBjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG4gICB4MCA9ICB4MCArICBqMCB8IDA7XG4gICB4MSA9ICB4MSArICBqMSB8IDA7XG4gICB4MiA9ICB4MiArICBqMiB8IDA7XG4gICB4MyA9ICB4MyArICBqMyB8IDA7XG4gICB4NCA9ICB4NCArICBqNCB8IDA7XG4gICB4NSA9ICB4NSArICBqNSB8IDA7XG4gICB4NiA9ICB4NiArICBqNiB8IDA7XG4gICB4NyA9ICB4NyArICBqNyB8IDA7XG4gICB4OCA9ICB4OCArICBqOCB8IDA7XG4gICB4OSA9ICB4OSArICBqOSB8IDA7XG4gIHgxMCA9IHgxMCArIGoxMCB8IDA7XG4gIHgxMSA9IHgxMSArIGoxMSB8IDA7XG4gIHgxMiA9IHgxMiArIGoxMiB8IDA7XG4gIHgxMyA9IHgxMyArIGoxMyB8IDA7XG4gIHgxNCA9IHgxNCArIGoxNCB8IDA7XG4gIHgxNSA9IHgxNSArIGoxNSB8IDA7XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDEgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4MSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHgxID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDEgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgyID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDIgPj4+ICA4ICYgMHhmZjtcbiAgb1sxMF0gPSB4MiA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgyID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MyA+Pj4gIDAgJiAweGZmO1xuICBvWzEzXSA9IHgzID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDMgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTZdID0geDQgPj4+ICAwICYgMHhmZjtcbiAgb1sxN10gPSB4NCA+Pj4gIDggJiAweGZmO1xuICBvWzE4XSA9IHg0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTldID0geDQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzIwXSA9IHg1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjFdID0geDUgPj4+ICA4ICYgMHhmZjtcbiAgb1syMl0gPSB4NSA+Pj4gMTYgJiAweGZmO1xuICBvWzIzXSA9IHg1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syNF0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzI1XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjZdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1syN10gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjhdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syOV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzMwXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzFdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzMyXSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMzNdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1szNF0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzM1XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szNl0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzM3XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzhdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szOV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDBdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDFdID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDJdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDNdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0NF0gPSB4MTEgPj4+ICAwICYgMHhmZjtcbiAgb1s0NV0gPSB4MTEgPj4+ICA4ICYgMHhmZjtcbiAgb1s0Nl0gPSB4MTEgPj4+IDE2ICYgMHhmZjtcbiAgb1s0N10gPSB4MTEgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQ4XSA9IHgxMiA+Pj4gIDAgJiAweGZmO1xuICBvWzQ5XSA9IHgxMiA+Pj4gIDggJiAweGZmO1xuICBvWzUwXSA9IHgxMiA+Pj4gMTYgJiAweGZmO1xuICBvWzUxXSA9IHgxMiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTJdID0geDEzID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTNdID0geDEzID4+PiAgOCAmIDB4ZmY7XG4gIG9bNTRdID0geDEzID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTVdID0geDEzID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s1Nl0gPSB4MTQgPj4+ICAwICYgMHhmZjtcbiAgb1s1N10gPSB4MTQgPj4+ICA4ICYgMHhmZjtcbiAgb1s1OF0gPSB4MTQgPj4+IDE2ICYgMHhmZjtcbiAgb1s1OV0gPSB4MTQgPj4+IDI0ICYgMHhmZjtcblxuICBvWzYwXSA9IHgxNSA+Pj4gIDAgJiAweGZmO1xuICBvWzYxXSA9IHgxNSA+Pj4gIDggJiAweGZmO1xuICBvWzYyXSA9IHgxNSA+Pj4gMTYgJiAweGZmO1xuICBvWzYzXSA9IHgxNSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjb3JlX2hzYWxzYTIwKG8scCxrLGMpIHtcbiAgdmFyIGowICA9IGNbIDBdICYgMHhmZiB8IChjWyAxXSAmIDB4ZmYpPDw4IHwgKGNbIDJdICYgMHhmZik8PDE2IHwgKGNbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajEgID0ga1sgMF0gJiAweGZmIHwgKGtbIDFdICYgMHhmZik8PDggfCAoa1sgMl0gJiAweGZmKTw8MTYgfCAoa1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMiAgPSBrWyA0XSAmIDB4ZmYgfCAoa1sgNV0gJiAweGZmKTw8OCB8IChrWyA2XSAmIDB4ZmYpPDwxNiB8IChrWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGozICA9IGtbIDhdICYgMHhmZiB8IChrWyA5XSAmIDB4ZmYpPDw4IHwgKGtbMTBdICYgMHhmZik8PDE2IHwgKGtbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajQgID0ga1sxMl0gJiAweGZmIHwgKGtbMTNdICYgMHhmZik8PDggfCAoa1sxNF0gJiAweGZmKTw8MTYgfCAoa1sxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqNSAgPSBjWyA0XSAmIDB4ZmYgfCAoY1sgNV0gJiAweGZmKTw8OCB8IChjWyA2XSAmIDB4ZmYpPDwxNiB8IChjWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo2ICA9IHBbIDBdICYgMHhmZiB8IChwWyAxXSAmIDB4ZmYpPDw4IHwgKHBbIDJdICYgMHhmZik8PDE2IHwgKHBbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajcgID0gcFsgNF0gJiAweGZmIHwgKHBbIDVdICYgMHhmZik8PDggfCAocFsgNl0gJiAweGZmKTw8MTYgfCAocFsgN10gJiAweGZmKTw8MjQsXG4gICAgICBqOCAgPSBwWyA4XSAmIDB4ZmYgfCAocFsgOV0gJiAweGZmKTw8OCB8IChwWzEwXSAmIDB4ZmYpPDwxNiB8IChwWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo5ICA9IHBbMTJdICYgMHhmZiB8IChwWzEzXSAmIDB4ZmYpPDw4IHwgKHBbMTRdICYgMHhmZik8PDE2IHwgKHBbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajEwID0gY1sgOF0gJiAweGZmIHwgKGNbIDldICYgMHhmZik8PDggfCAoY1sxMF0gJiAweGZmKTw8MTYgfCAoY1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTEgPSBrWzE2XSAmIDB4ZmYgfCAoa1sxN10gJiAweGZmKTw8OCB8IChrWzE4XSAmIDB4ZmYpPDwxNiB8IChrWzE5XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMiA9IGtbMjBdICYgMHhmZiB8IChrWzIxXSAmIDB4ZmYpPDw4IHwgKGtbMjJdICYgMHhmZik8PDE2IHwgKGtbMjNdICYgMHhmZik8PDI0LFxuICAgICAgajEzID0ga1syNF0gJiAweGZmIHwgKGtbMjVdICYgMHhmZik8PDggfCAoa1syNl0gJiAweGZmKTw8MTYgfCAoa1syN10gJiAweGZmKTw8MjQsXG4gICAgICBqMTQgPSBrWzI4XSAmIDB4ZmYgfCAoa1syOV0gJiAweGZmKTw8OCB8IChrWzMwXSAmIDB4ZmYpPDwxNiB8IChrWzMxXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNSA9IGNbMTJdICYgMHhmZiB8IChjWzEzXSAmIDB4ZmYpPDw4IHwgKGNbMTRdICYgMHhmZik8PDE2IHwgKGNbMTVdICYgMHhmZik8PDI0O1xuXG4gIHZhciB4MCA9IGowLCB4MSA9IGoxLCB4MiA9IGoyLCB4MyA9IGozLCB4NCA9IGo0LCB4NSA9IGo1LCB4NiA9IGo2LCB4NyA9IGo3LFxuICAgICAgeDggPSBqOCwgeDkgPSBqOSwgeDEwID0gajEwLCB4MTEgPSBqMTEsIHgxMiA9IGoxMiwgeDEzID0gajEzLCB4MTQgPSBqMTQsXG4gICAgICB4MTUgPSBqMTUsIHU7XG5cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAyMDsgaSArPSAyKSB7XG4gICAgdSA9IHgwICsgeDEyIHwgMDtcbiAgICB4NCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDQgKyB4MCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDQgfCAwO1xuICAgIHgxMiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTIgKyB4OCB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHgxIHwgMDtcbiAgICB4OSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDkgKyB4NSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4OSB8IDA7XG4gICAgeDEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEgKyB4MTMgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDYgfCAwO1xuICAgIHgxNCBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDE0ICsgeDEwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MTQgfCAwO1xuICAgIHg2IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg2ICsgeDIgfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxMSB8IDA7XG4gICAgeDMgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgzICsgeDE1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4MyB8IDA7XG4gICAgeDExIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMSArIHg3IHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MCArIHgzIHwgMDtcbiAgICB4MSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEgKyB4MCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDEgfCAwO1xuICAgIHgzIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgzICsgeDIgfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4NCB8IDA7XG4gICAgeDYgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg2ICsgeDUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHg2IHwgMDtcbiAgICB4NCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NCArIHg3IHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg5IHwgMDtcbiAgICB4MTEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMSArIHgxMCB8IDA7XG4gICAgeDggXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg4ICsgeDExIHwgMDtcbiAgICB4OSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4OSArIHg4IHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTQgfCAwO1xuICAgIHgxMiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDEyICsgeDE1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHgxMiB8IDA7XG4gICAgeDE0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxNCArIHgxMyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG4gIH1cblxuICBvWyAwXSA9IHgwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDFdID0geDAgPj4+ICA4ICYgMHhmZjtcbiAgb1sgMl0gPSB4MCA+Pj4gMTYgJiAweGZmO1xuICBvWyAzXSA9IHgwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgNF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWyA1XSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDZdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1sgN10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDhdID0geDEwID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDldID0geDEwID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDEwID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTFdID0geDEwID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxMl0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1sxNF0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1sxNV0gPSB4MTUgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg2ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDYgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NiA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg2ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NyA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg3ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDcgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDggPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4OCA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg4ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDggPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg5ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDkgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4OSA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg5ID4+PiAyNCAmIDB4ZmY7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX3NhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2NvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpIHtcbiAgY29yZV9oc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbnZhciBzaWdtYSA9IG5ldyBVaW50OEFycmF5KFsxMDEsIDEyMCwgMTEyLCA5NywgMTEwLCAxMDAsIDMyLCA1MSwgNTAsIDQ1LCA5OCwgMTIxLCAxMTYsIDEwMSwgMzIsIDEwN10pO1xuICAgICAgICAgICAgLy8gXCJleHBhbmQgMzItYnl0ZSBrXCJcblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gICAgbXBvcyArPSA2NDtcbiAgfVxuICBpZiAoYiA+IDApIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYjsgaSsrKSBjW2Nwb3MraV0gPSBtW21wb3MraV0gXiB4W2ldO1xuICB9XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGIsbixrKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMTYpLCB4ID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgdSwgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHpbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB6W2ldID0gbltpXTtcbiAgd2hpbGUgKGIgPj0gNjQpIHtcbiAgICBjcnlwdG9fY29yZV9zYWxzYTIwKHgseixrLHNpZ21hKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgICB1ID0gMTtcbiAgICBmb3IgKGkgPSA4OyBpIDwgMTY7IGkrKykge1xuICAgICAgdSA9IHUgKyAoeltpXSAmIDB4ZmYpIHwgMDtcbiAgICAgIHpbaV0gPSB1ICYgMHhmZjtcbiAgICAgIHUgPj4+PSA4O1xuICAgIH1cbiAgICBiIC09IDY0O1xuICAgIGNwb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbShjLGNwb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAoYyxjcG9zLGQsc24scyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1feG9yKGMsY3BvcyxtLG1wb3MsZCxuLGspIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19jb3JlX2hzYWxzYTIwKHMsbixrLHNpZ21hKTtcbiAgdmFyIHNuID0gbmV3IFVpbnQ4QXJyYXkoOCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgODsgaSsrKSBzbltpXSA9IG5baSsxNl07XG4gIHJldHVybiBjcnlwdG9fc3RyZWFtX3NhbHNhMjBfeG9yKGMsY3BvcyxtLG1wb3MsZCxzbixzKTtcbn1cblxuLypcbiogUG9ydCBvZiBBbmRyZXcgTW9vbidzIFBvbHkxMzA1LWRvbm5hLTE2LiBQdWJsaWMgZG9tYWluLlxuKiBodHRwczovL2dpdGh1Yi5jb20vZmxvb2R5YmVycnkvcG9seTEzMDUtZG9ubmFcbiovXG5cbnZhciBwb2x5MTMwNSA9IGZ1bmN0aW9uKGtleSkge1xuICB0aGlzLmJ1ZmZlciA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgdGhpcy5yID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5oID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdGhpcy5wYWQgPSBuZXcgVWludDE2QXJyYXkoOCk7XG4gIHRoaXMubGVmdG92ZXIgPSAwO1xuICB0aGlzLmZpbiA9IDA7XG5cbiAgdmFyIHQwLCB0MSwgdDIsIHQzLCB0NCwgdDUsIHQ2LCB0NztcblxuICB0MCA9IGtleVsgMF0gJiAweGZmIHwgKGtleVsgMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMF0gPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgdDEgPSBrZXlbIDJdICYgMHhmZiB8IChrZXlbIDNdICYgMHhmZikgPDwgODsgdGhpcy5yWzFdID0gKCh0MCA+Pj4gMTMpIHwgKHQxIDw8ICAzKSkgJiAweDFmZmY7XG4gIHQyID0ga2V5WyA0XSAmIDB4ZmYgfCAoa2V5WyA1XSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsyXSA9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZjAzO1xuICB0MyA9IGtleVsgNl0gJiAweGZmIHwgKGtleVsgN10gJiAweGZmKSA8PCA4OyB0aGlzLnJbM10gPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgdDQgPSBrZXlbIDhdICYgMHhmZiB8IChrZXlbIDldICYgMHhmZikgPDwgODsgdGhpcy5yWzRdID0gKCh0MyA+Pj4gIDQpIHwgKHQ0IDw8IDEyKSkgJiAweDAwZmY7XG4gIHRoaXMucls1XSA9ICgodDQgPj4+ICAxKSkgJiAweDFmZmU7XG4gIHQ1ID0ga2V5WzEwXSAmIDB4ZmYgfCAoa2V5WzExXSAmIDB4ZmYpIDw8IDg7IHRoaXMucls2XSA9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICB0NiA9IGtleVsxMl0gJiAweGZmIHwgKGtleVsxM10gJiAweGZmKSA8PCA4OyB0aGlzLnJbN10gPSAoKHQ1ID4+PiAxMSkgfCAodDYgPDwgIDUpKSAmIDB4MWY4MTtcbiAgdDcgPSBrZXlbMTRdICYgMHhmZiB8IChrZXlbMTVdICYgMHhmZikgPDwgODsgdGhpcy5yWzhdID0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gIHRoaXMucls5XSA9ICgodDcgPj4+ICA1KSkgJiAweDAwN2Y7XG5cbiAgdGhpcy5wYWRbMF0gPSBrZXlbMTZdICYgMHhmZiB8IChrZXlbMTddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMV0gPSBrZXlbMThdICYgMHhmZiB8IChrZXlbMTldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbMl0gPSBrZXlbMjBdICYgMHhmZiB8IChrZXlbMjFdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbM10gPSBrZXlbMjJdICYgMHhmZiB8IChrZXlbMjNdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNF0gPSBrZXlbMjRdICYgMHhmZiB8IChrZXlbMjVdICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNV0gPSBrZXlbMjZdICYgMHhmZiB8IChrZXlbMjddICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbNl0gPSBrZXlbMjhdICYgMHhmZiB8IChrZXlbMjldICYgMHhmZikgPDwgODtcbiAgdGhpcy5wYWRbN10gPSBrZXlbMzBdICYgMHhmZiB8IChrZXlbMzFdICYgMHhmZikgPDwgODtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS5ibG9ja3MgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaGliaXQgPSB0aGlzLmZpbiA/IDAgOiAoMSA8PCAxMSk7XG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDcsIGM7XG4gIHZhciBkMCwgZDEsIGQyLCBkMywgZDQsIGQ1LCBkNiwgZDcsIGQ4LCBkOTtcblxuICB2YXIgaDAgPSB0aGlzLmhbMF0sXG4gICAgICBoMSA9IHRoaXMuaFsxXSxcbiAgICAgIGgyID0gdGhpcy5oWzJdLFxuICAgICAgaDMgPSB0aGlzLmhbM10sXG4gICAgICBoNCA9IHRoaXMuaFs0XSxcbiAgICAgIGg1ID0gdGhpcy5oWzVdLFxuICAgICAgaDYgPSB0aGlzLmhbNl0sXG4gICAgICBoNyA9IHRoaXMuaFs3XSxcbiAgICAgIGg4ID0gdGhpcy5oWzhdLFxuICAgICAgaDkgPSB0aGlzLmhbOV07XG5cbiAgdmFyIHIwID0gdGhpcy5yWzBdLFxuICAgICAgcjEgPSB0aGlzLnJbMV0sXG4gICAgICByMiA9IHRoaXMuclsyXSxcbiAgICAgIHIzID0gdGhpcy5yWzNdLFxuICAgICAgcjQgPSB0aGlzLnJbNF0sXG4gICAgICByNSA9IHRoaXMucls1XSxcbiAgICAgIHI2ID0gdGhpcy5yWzZdLFxuICAgICAgcjcgPSB0aGlzLnJbN10sXG4gICAgICByOCA9IHRoaXMucls4XSxcbiAgICAgIHI5ID0gdGhpcy5yWzldO1xuXG4gIHdoaWxlIChieXRlcyA+PSAxNikge1xuICAgIHQwID0gbVttcG9zKyAwXSAmIDB4ZmYgfCAobVttcG9zKyAxXSAmIDB4ZmYpIDw8IDg7IGgwICs9ICggdDAgICAgICAgICAgICAgICAgICAgICApICYgMHgxZmZmO1xuICAgIHQxID0gbVttcG9zKyAyXSAmIDB4ZmYgfCAobVttcG9zKyAzXSAmIDB4ZmYpIDw8IDg7IGgxICs9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICAgIHQyID0gbVttcG9zKyA0XSAmIDB4ZmYgfCAobVttcG9zKyA1XSAmIDB4ZmYpIDw8IDg7IGgyICs9ICgodDEgPj4+IDEwKSB8ICh0MiA8PCAgNikpICYgMHgxZmZmO1xuICAgIHQzID0gbVttcG9zKyA2XSAmIDB4ZmYgfCAobVttcG9zKyA3XSAmIDB4ZmYpIDw8IDg7IGgzICs9ICgodDIgPj4+ICA3KSB8ICh0MyA8PCAgOSkpICYgMHgxZmZmO1xuICAgIHQ0ID0gbVttcG9zKyA4XSAmIDB4ZmYgfCAobVttcG9zKyA5XSAmIDB4ZmYpIDw8IDg7IGg0ICs9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgxZmZmO1xuICAgIGg1ICs9ICgodDQgPj4+ICAxKSkgJiAweDFmZmY7XG4gICAgdDUgPSBtW21wb3MrMTBdICYgMHhmZiB8IChtW21wb3MrMTFdICYgMHhmZikgPDwgODsgaDYgKz0gKCh0NCA+Pj4gMTQpIHwgKHQ1IDw8ICAyKSkgJiAweDFmZmY7XG4gICAgdDYgPSBtW21wb3MrMTJdICYgMHhmZiB8IChtW21wb3MrMTNdICYgMHhmZikgPDwgODsgaDcgKz0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmZmY7XG4gICAgdDcgPSBtW21wb3MrMTRdICYgMHhmZiB8IChtW21wb3MrMTVdICYgMHhmZikgPDwgODsgaDggKz0gKCh0NiA+Pj4gIDgpIHwgKHQ3IDw8ICA4KSkgJiAweDFmZmY7XG4gICAgaDkgKz0gKCh0NyA+Pj4gNSkpIHwgaGliaXQ7XG5cbiAgICBjID0gMDtcblxuICAgIGQwID0gYztcbiAgICBkMCArPSBoMCAqIHIwO1xuICAgIGQwICs9IGgxICogKDUgKiByOSk7XG4gICAgZDAgKz0gaDIgKiAoNSAqIHI4KTtcbiAgICBkMCArPSBoMyAqICg1ICogcjcpO1xuICAgIGQwICs9IGg0ICogKDUgKiByNik7XG4gICAgYyA9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG4gICAgZDAgKz0gaDUgKiAoNSAqIHI1KTtcbiAgICBkMCArPSBoNiAqICg1ICogcjQpO1xuICAgIGQwICs9IGg3ICogKDUgKiByMyk7XG4gICAgZDAgKz0gaDggKiAoNSAqIHIyKTtcbiAgICBkMCArPSBoOSAqICg1ICogcjEpO1xuICAgIGMgKz0gKGQwID4+PiAxMyk7IGQwICY9IDB4MWZmZjtcblxuICAgIGQxID0gYztcbiAgICBkMSArPSBoMCAqIHIxO1xuICAgIGQxICs9IGgxICogcjA7XG4gICAgZDEgKz0gaDIgKiAoNSAqIHI5KTtcbiAgICBkMSArPSBoMyAqICg1ICogcjgpO1xuICAgIGQxICs9IGg0ICogKDUgKiByNyk7XG4gICAgYyA9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG4gICAgZDEgKz0gaDUgKiAoNSAqIHI2KTtcbiAgICBkMSArPSBoNiAqICg1ICogcjUpO1xuICAgIGQxICs9IGg3ICogKDUgKiByNCk7XG4gICAgZDEgKz0gaDggKiAoNSAqIHIzKTtcbiAgICBkMSArPSBoOSAqICg1ICogcjIpO1xuICAgIGMgKz0gKGQxID4+PiAxMyk7IGQxICY9IDB4MWZmZjtcblxuICAgIGQyID0gYztcbiAgICBkMiArPSBoMCAqIHIyO1xuICAgIGQyICs9IGgxICogcjE7XG4gICAgZDIgKz0gaDIgKiByMDtcbiAgICBkMiArPSBoMyAqICg1ICogcjkpO1xuICAgIGQyICs9IGg0ICogKDUgKiByOCk7XG4gICAgYyA9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG4gICAgZDIgKz0gaDUgKiAoNSAqIHI3KTtcbiAgICBkMiArPSBoNiAqICg1ICogcjYpO1xuICAgIGQyICs9IGg3ICogKDUgKiByNSk7XG4gICAgZDIgKz0gaDggKiAoNSAqIHI0KTtcbiAgICBkMiArPSBoOSAqICg1ICogcjMpO1xuICAgIGMgKz0gKGQyID4+PiAxMyk7IGQyICY9IDB4MWZmZjtcblxuICAgIGQzID0gYztcbiAgICBkMyArPSBoMCAqIHIzO1xuICAgIGQzICs9IGgxICogcjI7XG4gICAgZDMgKz0gaDIgKiByMTtcbiAgICBkMyArPSBoMyAqIHIwO1xuICAgIGQzICs9IGg0ICogKDUgKiByOSk7XG4gICAgYyA9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG4gICAgZDMgKz0gaDUgKiAoNSAqIHI4KTtcbiAgICBkMyArPSBoNiAqICg1ICogcjcpO1xuICAgIGQzICs9IGg3ICogKDUgKiByNik7XG4gICAgZDMgKz0gaDggKiAoNSAqIHI1KTtcbiAgICBkMyArPSBoOSAqICg1ICogcjQpO1xuICAgIGMgKz0gKGQzID4+PiAxMyk7IGQzICY9IDB4MWZmZjtcblxuICAgIGQ0ID0gYztcbiAgICBkNCArPSBoMCAqIHI0O1xuICAgIGQ0ICs9IGgxICogcjM7XG4gICAgZDQgKz0gaDIgKiByMjtcbiAgICBkNCArPSBoMyAqIHIxO1xuICAgIGQ0ICs9IGg0ICogcjA7XG4gICAgYyA9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG4gICAgZDQgKz0gaDUgKiAoNSAqIHI5KTtcbiAgICBkNCArPSBoNiAqICg1ICogcjgpO1xuICAgIGQ0ICs9IGg3ICogKDUgKiByNyk7XG4gICAgZDQgKz0gaDggKiAoNSAqIHI2KTtcbiAgICBkNCArPSBoOSAqICg1ICogcjUpO1xuICAgIGMgKz0gKGQ0ID4+PiAxMyk7IGQ0ICY9IDB4MWZmZjtcblxuICAgIGQ1ID0gYztcbiAgICBkNSArPSBoMCAqIHI1O1xuICAgIGQ1ICs9IGgxICogcjQ7XG4gICAgZDUgKz0gaDIgKiByMztcbiAgICBkNSArPSBoMyAqIHIyO1xuICAgIGQ1ICs9IGg0ICogcjE7XG4gICAgYyA9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG4gICAgZDUgKz0gaDUgKiByMDtcbiAgICBkNSArPSBoNiAqICg1ICogcjkpO1xuICAgIGQ1ICs9IGg3ICogKDUgKiByOCk7XG4gICAgZDUgKz0gaDggKiAoNSAqIHI3KTtcbiAgICBkNSArPSBoOSAqICg1ICogcjYpO1xuICAgIGMgKz0gKGQ1ID4+PiAxMyk7IGQ1ICY9IDB4MWZmZjtcblxuICAgIGQ2ID0gYztcbiAgICBkNiArPSBoMCAqIHI2O1xuICAgIGQ2ICs9IGgxICogcjU7XG4gICAgZDYgKz0gaDIgKiByNDtcbiAgICBkNiArPSBoMyAqIHIzO1xuICAgIGQ2ICs9IGg0ICogcjI7XG4gICAgYyA9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG4gICAgZDYgKz0gaDUgKiByMTtcbiAgICBkNiArPSBoNiAqIHIwO1xuICAgIGQ2ICs9IGg3ICogKDUgKiByOSk7XG4gICAgZDYgKz0gaDggKiAoNSAqIHI4KTtcbiAgICBkNiArPSBoOSAqICg1ICogcjcpO1xuICAgIGMgKz0gKGQ2ID4+PiAxMyk7IGQ2ICY9IDB4MWZmZjtcblxuICAgIGQ3ID0gYztcbiAgICBkNyArPSBoMCAqIHI3O1xuICAgIGQ3ICs9IGgxICogcjY7XG4gICAgZDcgKz0gaDIgKiByNTtcbiAgICBkNyArPSBoMyAqIHI0O1xuICAgIGQ3ICs9IGg0ICogcjM7XG4gICAgYyA9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG4gICAgZDcgKz0gaDUgKiByMjtcbiAgICBkNyArPSBoNiAqIHIxO1xuICAgIGQ3ICs9IGg3ICogcjA7XG4gICAgZDcgKz0gaDggKiAoNSAqIHI5KTtcbiAgICBkNyArPSBoOSAqICg1ICogcjgpO1xuICAgIGMgKz0gKGQ3ID4+PiAxMyk7IGQ3ICY9IDB4MWZmZjtcblxuICAgIGQ4ID0gYztcbiAgICBkOCArPSBoMCAqIHI4O1xuICAgIGQ4ICs9IGgxICogcjc7XG4gICAgZDggKz0gaDIgKiByNjtcbiAgICBkOCArPSBoMyAqIHI1O1xuICAgIGQ4ICs9IGg0ICogcjQ7XG4gICAgYyA9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG4gICAgZDggKz0gaDUgKiByMztcbiAgICBkOCArPSBoNiAqIHIyO1xuICAgIGQ4ICs9IGg3ICogcjE7XG4gICAgZDggKz0gaDggKiByMDtcbiAgICBkOCArPSBoOSAqICg1ICogcjkpO1xuICAgIGMgKz0gKGQ4ID4+PiAxMyk7IGQ4ICY9IDB4MWZmZjtcblxuICAgIGQ5ID0gYztcbiAgICBkOSArPSBoMCAqIHI5O1xuICAgIGQ5ICs9IGgxICogcjg7XG4gICAgZDkgKz0gaDIgKiByNztcbiAgICBkOSArPSBoMyAqIHI2O1xuICAgIGQ5ICs9IGg0ICogcjU7XG4gICAgYyA9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG4gICAgZDkgKz0gaDUgKiByNDtcbiAgICBkOSArPSBoNiAqIHIzO1xuICAgIGQ5ICs9IGg3ICogcjI7XG4gICAgZDkgKz0gaDggKiByMTtcbiAgICBkOSArPSBoOSAqIHIwO1xuICAgIGMgKz0gKGQ5ID4+PiAxMyk7IGQ5ICY9IDB4MWZmZjtcblxuICAgIGMgPSAoKChjIDw8IDIpICsgYykpIHwgMDtcbiAgICBjID0gKGMgKyBkMCkgfCAwO1xuICAgIGQwID0gYyAmIDB4MWZmZjtcbiAgICBjID0gKGMgPj4+IDEzKTtcbiAgICBkMSArPSBjO1xuXG4gICAgaDAgPSBkMDtcbiAgICBoMSA9IGQxO1xuICAgIGgyID0gZDI7XG4gICAgaDMgPSBkMztcbiAgICBoNCA9IGQ0O1xuICAgIGg1ID0gZDU7XG4gICAgaDYgPSBkNjtcbiAgICBoNyA9IGQ3O1xuICAgIGg4ID0gZDg7XG4gICAgaDkgPSBkOTtcblxuICAgIG1wb3MgKz0gMTY7XG4gICAgYnl0ZXMgLT0gMTY7XG4gIH1cbiAgdGhpcy5oWzBdID0gaDA7XG4gIHRoaXMuaFsxXSA9IGgxO1xuICB0aGlzLmhbMl0gPSBoMjtcbiAgdGhpcy5oWzNdID0gaDM7XG4gIHRoaXMuaFs0XSA9IGg0O1xuICB0aGlzLmhbNV0gPSBoNTtcbiAgdGhpcy5oWzZdID0gaDY7XG4gIHRoaXMuaFs3XSA9IGg3O1xuICB0aGlzLmhbOF0gPSBoODtcbiAgdGhpcy5oWzldID0gaDk7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuZmluaXNoID0gZnVuY3Rpb24obWFjLCBtYWNwb3MpIHtcbiAgdmFyIGcgPSBuZXcgVWludDE2QXJyYXkoMTApO1xuICB2YXIgYywgbWFzaywgZiwgaTtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIGkgPSB0aGlzLmxlZnRvdmVyO1xuICAgIHRoaXMuYnVmZmVyW2krK10gPSAxO1xuICAgIGZvciAoOyBpIDwgMTY7IGkrKykgdGhpcy5idWZmZXJbaV0gPSAwO1xuICAgIHRoaXMuZmluID0gMTtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICB9XG5cbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDI7IGkgPCAxMDsgaSsrKSB7XG4gICAgdGhpcy5oW2ldICs9IGM7XG4gICAgYyA9IHRoaXMuaFtpXSA+Pj4gMTM7XG4gICAgdGhpcy5oW2ldICY9IDB4MWZmZjtcbiAgfVxuICB0aGlzLmhbMF0gKz0gKGMgKiA1KTtcbiAgYyA9IHRoaXMuaFswXSA+Pj4gMTM7XG4gIHRoaXMuaFswXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsxXSArPSBjO1xuICBjID0gdGhpcy5oWzFdID4+PiAxMztcbiAgdGhpcy5oWzFdICY9IDB4MWZmZjtcbiAgdGhpcy5oWzJdICs9IGM7XG5cbiAgZ1swXSA9IHRoaXMuaFswXSArIDU7XG4gIGMgPSBnWzBdID4+PiAxMztcbiAgZ1swXSAmPSAweDFmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCAxMDsgaSsrKSB7XG4gICAgZ1tpXSA9IHRoaXMuaFtpXSArIGM7XG4gICAgYyA9IGdbaV0gPj4+IDEzO1xuICAgIGdbaV0gJj0gMHgxZmZmO1xuICB9XG4gIGdbOV0gLT0gKDEgPDwgMTMpO1xuXG4gIG1hc2sgPSAoYyBeIDEpIC0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIGdbaV0gJj0gbWFzaztcbiAgbWFzayA9IH5tYXNrO1xuICBmb3IgKGkgPSAwOyBpIDwgMTA7IGkrKykgdGhpcy5oW2ldID0gKHRoaXMuaFtpXSAmIG1hc2spIHwgZ1tpXTtcblxuICB0aGlzLmhbMF0gPSAoKHRoaXMuaFswXSAgICAgICApIHwgKHRoaXMuaFsxXSA8PCAxMykgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsxXSA9ICgodGhpcy5oWzFdID4+PiAgMykgfCAodGhpcy5oWzJdIDw8IDEwKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzJdID0gKCh0aGlzLmhbMl0gPj4+ICA2KSB8ICh0aGlzLmhbM10gPDwgIDcpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbM10gPSAoKHRoaXMuaFszXSA+Pj4gIDkpIHwgKHRoaXMuaFs0XSA8PCAgNCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs0XSA9ICgodGhpcy5oWzRdID4+PiAxMikgfCAodGhpcy5oWzVdIDw8ICAxKSB8ICh0aGlzLmhbNl0gPDwgMTQpKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzVdID0gKCh0aGlzLmhbNl0gPj4+ICAyKSB8ICh0aGlzLmhbN10gPDwgMTEpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNl0gPSAoKHRoaXMuaFs3XSA+Pj4gIDUpIHwgKHRoaXMuaFs4XSA8PCAgOCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFs3XSA9ICgodGhpcy5oWzhdID4+PiAgOCkgfCAodGhpcy5oWzldIDw8ICA1KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcblxuICBmID0gdGhpcy5oWzBdICsgdGhpcy5wYWRbMF07XG4gIHRoaXMuaFswXSA9IGYgJiAweGZmZmY7XG4gIGZvciAoaSA9IDE7IGkgPCA4OyBpKyspIHtcbiAgICBmID0gKCgodGhpcy5oW2ldICsgdGhpcy5wYWRbaV0pIHwgMCkgKyAoZiA+Pj4gMTYpKSB8IDA7XG4gICAgdGhpcy5oW2ldID0gZiAmIDB4ZmZmZjtcbiAgfVxuXG4gIG1hY1ttYWNwb3MrIDBdID0gKHRoaXMuaFswXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAxXSA9ICh0aGlzLmhbMF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMl0gPSAodGhpcy5oWzFdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDNdID0gKHRoaXMuaFsxXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA0XSA9ICh0aGlzLmhbMl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNV0gPSAodGhpcy5oWzJdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDZdID0gKHRoaXMuaFszXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA3XSA9ICh0aGlzLmhbM10gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgOF0gPSAodGhpcy5oWzRdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDldID0gKHRoaXMuaFs0XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEwXSA9ICh0aGlzLmhbNV0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMV0gPSAodGhpcy5oWzVdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTJdID0gKHRoaXMuaFs2XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEzXSA9ICh0aGlzLmhbNl0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxNF0gPSAodGhpcy5oWzddID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTVdID0gKHRoaXMuaFs3XSA+Pj4gOCkgJiAweGZmO1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLnVwZGF0ZSA9IGZ1bmN0aW9uKG0sIG1wb3MsIGJ5dGVzKSB7XG4gIHZhciBpLCB3YW50O1xuXG4gIGlmICh0aGlzLmxlZnRvdmVyKSB7XG4gICAgd2FudCA9ICgxNiAtIHRoaXMubGVmdG92ZXIpO1xuICAgIGlmICh3YW50ID4gYnl0ZXMpXG4gICAgICB3YW50ID0gYnl0ZXM7XG4gICAgZm9yIChpID0gMDsgaSA8IHdhbnQ7IGkrKylcbiAgICAgIHRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIgKyBpXSA9IG1bbXBvcytpXTtcbiAgICBieXRlcyAtPSB3YW50O1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICB0aGlzLmxlZnRvdmVyICs9IHdhbnQ7XG4gICAgaWYgKHRoaXMubGVmdG92ZXIgPCAxNilcbiAgICAgIHJldHVybjtcbiAgICB0aGlzLmJsb2Nrcyh0aGlzLmJ1ZmZlciwgMCwgMTYpO1xuICAgIHRoaXMubGVmdG92ZXIgPSAwO1xuICB9XG5cbiAgaWYgKGJ5dGVzID49IDE2KSB7XG4gICAgd2FudCA9IGJ5dGVzIC0gKGJ5dGVzICUgMTYpO1xuICAgIHRoaXMuYmxvY2tzKG0sIG1wb3MsIHdhbnQpO1xuICAgIG1wb3MgKz0gd2FudDtcbiAgICBieXRlcyAtPSB3YW50O1xuICB9XG5cbiAgaWYgKGJ5dGVzKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IGJ5dGVzOyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgdGhpcy5sZWZ0b3ZlciArPSBieXRlcztcbiAgfVxufTtcblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoKG91dCwgb3V0cG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciBzID0gbmV3IHBvbHkxMzA1KGspO1xuICBzLnVwZGF0ZShtLCBtcG9zLCBuKTtcbiAgcy5maW5pc2gob3V0LCBvdXRwb3MpO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShoLCBocG9zLCBtLCBtcG9zLCBuLCBrKSB7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xuICBjcnlwdG9fb25ldGltZWF1dGgoeCwwLG0sbXBvcyxuLGspO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8xNihoLGhwb3MseCwwKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NlY3JldGJveChjLG0sZCxuLGspIHtcbiAgdmFyIGk7XG4gIGlmIChkIDwgMzIpIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IoYywwLG0sMCxkLG4sayk7XG4gIGNyeXB0b19vbmV0aW1lYXV0aChjLCAxNiwgYywgMzIsIGQgLSAzMiwgYyk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBjW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3hfb3BlbihtLGMsZCxuLGspIHtcbiAgdmFyIGk7XG4gIHZhciB4ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW0oeCwwLDMyLG4sayk7XG4gIGlmIChjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5KGMsIDE2LGMsIDMyLGQgLSAzMix4KSAhPT0gMCkgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtX3hvcihtLDAsYywwLGQsbixrKTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIG1baV0gPSAwO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gc2V0MjU1MTkociwgYSkge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHJbaV0gPSBhW2ldfDA7XG59XG5cbmZ1bmN0aW9uIGNhcjI1NTE5KG8pIHtcbiAgdmFyIGksIHYsIGMgPSAxO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIHYgPSBvW2ldICsgYyArIDY1NTM1O1xuICAgIGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7XG4gICAgb1tpXSA9IHYgLSBjICogNjU1MzY7XG4gIH1cbiAgb1swXSArPSBjLTEgKyAzNyAqIChjLTEpO1xufVxuXG5mdW5jdGlvbiBzZWwyNTUxOShwLCBxLCBiKSB7XG4gIHZhciB0LCBjID0gfihiLTEpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB0ID0gYyAmIChwW2ldIF4gcVtpXSk7XG4gICAgcFtpXSBePSB0O1xuICAgIHFbaV0gXj0gdDtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrMjU1MTkobywgbikge1xuICB2YXIgaSwgaiwgYjtcbiAgdmFyIG0gPSBnZigpLCB0ID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHRbaV0gPSBuW2ldO1xuICBjYXIyNTUxOSh0KTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBmb3IgKGogPSAwOyBqIDwgMjsgaisrKSB7XG4gICAgbVswXSA9IHRbMF0gLSAweGZmZWQ7XG4gICAgZm9yIChpID0gMTsgaSA8IDE1OyBpKyspIHtcbiAgICAgIG1baV0gPSB0W2ldIC0gMHhmZmZmIC0gKChtW2ktMV0+PjE2KSAmIDEpO1xuICAgICAgbVtpLTFdICY9IDB4ZmZmZjtcbiAgICB9XG4gICAgbVsxNV0gPSB0WzE1XSAtIDB4N2ZmZiAtICgobVsxNF0+PjE2KSAmIDEpO1xuICAgIGIgPSAobVsxNV0+PjE2KSAmIDE7XG4gICAgbVsxNF0gJj0gMHhmZmZmO1xuICAgIHNlbDI1NTE5KHQsIG0sIDEtYik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBvWzIqaV0gPSB0W2ldICYgMHhmZjtcbiAgICBvWzIqaSsxXSA9IHRbaV0+Pjg7XG4gIH1cbn1cblxuZnVuY3Rpb24gbmVxMjU1MTkoYSwgYikge1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KDMyKSwgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGMsIGEpO1xuICBwYWNrMjU1MTkoZCwgYik7XG4gIHJldHVybiBjcnlwdG9fdmVyaWZ5XzMyKGMsIDAsIGQsIDApO1xufVxuXG5mdW5jdGlvbiBwYXIyNTUxOShhKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBwYWNrMjU1MTkoZCwgYSk7XG4gIHJldHVybiBkWzBdICYgMTtcbn1cblxuZnVuY3Rpb24gdW5wYWNrMjU1MTkobywgbikge1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBuWzIqaV0gKyAoblsyKmkrMV0gPDwgOCk7XG4gIG9bMTVdICY9IDB4N2ZmZjtcbn1cblxuZnVuY3Rpb24gQShvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gKyBiW2ldO1xufVxuXG5mdW5jdGlvbiBaKG8sIGEsIGIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gYVtpXSAtIGJbaV07XG59XG5cbmZ1bmN0aW9uIE0obywgYSwgYikge1xuICB2YXIgdiwgYyxcbiAgICAgdDAgPSAwLCAgdDEgPSAwLCAgdDIgPSAwLCAgdDMgPSAwLCAgdDQgPSAwLCAgdDUgPSAwLCAgdDYgPSAwLCAgdDcgPSAwLFxuICAgICB0OCA9IDAsICB0OSA9IDAsIHQxMCA9IDAsIHQxMSA9IDAsIHQxMiA9IDAsIHQxMyA9IDAsIHQxNCA9IDAsIHQxNSA9IDAsXG4gICAgdDE2ID0gMCwgdDE3ID0gMCwgdDE4ID0gMCwgdDE5ID0gMCwgdDIwID0gMCwgdDIxID0gMCwgdDIyID0gMCwgdDIzID0gMCxcbiAgICB0MjQgPSAwLCB0MjUgPSAwLCB0MjYgPSAwLCB0MjcgPSAwLCB0MjggPSAwLCB0MjkgPSAwLCB0MzAgPSAwLFxuICAgIGIwID0gYlswXSxcbiAgICBiMSA9IGJbMV0sXG4gICAgYjIgPSBiWzJdLFxuICAgIGIzID0gYlszXSxcbiAgICBiNCA9IGJbNF0sXG4gICAgYjUgPSBiWzVdLFxuICAgIGI2ID0gYls2XSxcbiAgICBiNyA9IGJbN10sXG4gICAgYjggPSBiWzhdLFxuICAgIGI5ID0gYls5XSxcbiAgICBiMTAgPSBiWzEwXSxcbiAgICBiMTEgPSBiWzExXSxcbiAgICBiMTIgPSBiWzEyXSxcbiAgICBiMTMgPSBiWzEzXSxcbiAgICBiMTQgPSBiWzE0XSxcbiAgICBiMTUgPSBiWzE1XTtcblxuICB2ID0gYVswXTtcbiAgdDAgKz0gdiAqIGIwO1xuICB0MSArPSB2ICogYjE7XG4gIHQyICs9IHYgKiBiMjtcbiAgdDMgKz0gdiAqIGIzO1xuICB0NCArPSB2ICogYjQ7XG4gIHQ1ICs9IHYgKiBiNTtcbiAgdDYgKz0gdiAqIGI2O1xuICB0NyArPSB2ICogYjc7XG4gIHQ4ICs9IHYgKiBiODtcbiAgdDkgKz0gdiAqIGI5O1xuICB0MTAgKz0gdiAqIGIxMDtcbiAgdDExICs9IHYgKiBiMTE7XG4gIHQxMiArPSB2ICogYjEyO1xuICB0MTMgKz0gdiAqIGIxMztcbiAgdDE0ICs9IHYgKiBiMTQ7XG4gIHQxNSArPSB2ICogYjE1O1xuICB2ID0gYVsxXTtcbiAgdDEgKz0gdiAqIGIwO1xuICB0MiArPSB2ICogYjE7XG4gIHQzICs9IHYgKiBiMjtcbiAgdDQgKz0gdiAqIGIzO1xuICB0NSArPSB2ICogYjQ7XG4gIHQ2ICs9IHYgKiBiNTtcbiAgdDcgKz0gdiAqIGI2O1xuICB0OCArPSB2ICogYjc7XG4gIHQ5ICs9IHYgKiBiODtcbiAgdDEwICs9IHYgKiBiOTtcbiAgdDExICs9IHYgKiBiMTA7XG4gIHQxMiArPSB2ICogYjExO1xuICB0MTMgKz0gdiAqIGIxMjtcbiAgdDE0ICs9IHYgKiBiMTM7XG4gIHQxNSArPSB2ICogYjE0O1xuICB0MTYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMl07XG4gIHQyICs9IHYgKiBiMDtcbiAgdDMgKz0gdiAqIGIxO1xuICB0NCArPSB2ICogYjI7XG4gIHQ1ICs9IHYgKiBiMztcbiAgdDYgKz0gdiAqIGI0O1xuICB0NyArPSB2ICogYjU7XG4gIHQ4ICs9IHYgKiBiNjtcbiAgdDkgKz0gdiAqIGI3O1xuICB0MTAgKz0gdiAqIGI4O1xuICB0MTEgKz0gdiAqIGI5O1xuICB0MTIgKz0gdiAqIGIxMDtcbiAgdDEzICs9IHYgKiBiMTE7XG4gIHQxNCArPSB2ICogYjEyO1xuICB0MTUgKz0gdiAqIGIxMztcbiAgdDE2ICs9IHYgKiBiMTQ7XG4gIHQxNyArPSB2ICogYjE1O1xuICB2ID0gYVszXTtcbiAgdDMgKz0gdiAqIGIwO1xuICB0NCArPSB2ICogYjE7XG4gIHQ1ICs9IHYgKiBiMjtcbiAgdDYgKz0gdiAqIGIzO1xuICB0NyArPSB2ICogYjQ7XG4gIHQ4ICs9IHYgKiBiNTtcbiAgdDkgKz0gdiAqIGI2O1xuICB0MTAgKz0gdiAqIGI3O1xuICB0MTEgKz0gdiAqIGI4O1xuICB0MTIgKz0gdiAqIGI5O1xuICB0MTMgKz0gdiAqIGIxMDtcbiAgdDE0ICs9IHYgKiBiMTE7XG4gIHQxNSArPSB2ICogYjEyO1xuICB0MTYgKz0gdiAqIGIxMztcbiAgdDE3ICs9IHYgKiBiMTQ7XG4gIHQxOCArPSB2ICogYjE1O1xuICB2ID0gYVs0XTtcbiAgdDQgKz0gdiAqIGIwO1xuICB0NSArPSB2ICogYjE7XG4gIHQ2ICs9IHYgKiBiMjtcbiAgdDcgKz0gdiAqIGIzO1xuICB0OCArPSB2ICogYjQ7XG4gIHQ5ICs9IHYgKiBiNTtcbiAgdDEwICs9IHYgKiBiNjtcbiAgdDExICs9IHYgKiBiNztcbiAgdDEyICs9IHYgKiBiODtcbiAgdDEzICs9IHYgKiBiOTtcbiAgdDE0ICs9IHYgKiBiMTA7XG4gIHQxNSArPSB2ICogYjExO1xuICB0MTYgKz0gdiAqIGIxMjtcbiAgdDE3ICs9IHYgKiBiMTM7XG4gIHQxOCArPSB2ICogYjE0O1xuICB0MTkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNV07XG4gIHQ1ICs9IHYgKiBiMDtcbiAgdDYgKz0gdiAqIGIxO1xuICB0NyArPSB2ICogYjI7XG4gIHQ4ICs9IHYgKiBiMztcbiAgdDkgKz0gdiAqIGI0O1xuICB0MTAgKz0gdiAqIGI1O1xuICB0MTEgKz0gdiAqIGI2O1xuICB0MTIgKz0gdiAqIGI3O1xuICB0MTMgKz0gdiAqIGI4O1xuICB0MTQgKz0gdiAqIGI5O1xuICB0MTUgKz0gdiAqIGIxMDtcbiAgdDE2ICs9IHYgKiBiMTE7XG4gIHQxNyArPSB2ICogYjEyO1xuICB0MTggKz0gdiAqIGIxMztcbiAgdDE5ICs9IHYgKiBiMTQ7XG4gIHQyMCArPSB2ICogYjE1O1xuICB2ID0gYVs2XTtcbiAgdDYgKz0gdiAqIGIwO1xuICB0NyArPSB2ICogYjE7XG4gIHQ4ICs9IHYgKiBiMjtcbiAgdDkgKz0gdiAqIGIzO1xuICB0MTAgKz0gdiAqIGI0O1xuICB0MTEgKz0gdiAqIGI1O1xuICB0MTIgKz0gdiAqIGI2O1xuICB0MTMgKz0gdiAqIGI3O1xuICB0MTQgKz0gdiAqIGI4O1xuICB0MTUgKz0gdiAqIGI5O1xuICB0MTYgKz0gdiAqIGIxMDtcbiAgdDE3ICs9IHYgKiBiMTE7XG4gIHQxOCArPSB2ICogYjEyO1xuICB0MTkgKz0gdiAqIGIxMztcbiAgdDIwICs9IHYgKiBiMTQ7XG4gIHQyMSArPSB2ICogYjE1O1xuICB2ID0gYVs3XTtcbiAgdDcgKz0gdiAqIGIwO1xuICB0OCArPSB2ICogYjE7XG4gIHQ5ICs9IHYgKiBiMjtcbiAgdDEwICs9IHYgKiBiMztcbiAgdDExICs9IHYgKiBiNDtcbiAgdDEyICs9IHYgKiBiNTtcbiAgdDEzICs9IHYgKiBiNjtcbiAgdDE0ICs9IHYgKiBiNztcbiAgdDE1ICs9IHYgKiBiODtcbiAgdDE2ICs9IHYgKiBiOTtcbiAgdDE3ICs9IHYgKiBiMTA7XG4gIHQxOCArPSB2ICogYjExO1xuICB0MTkgKz0gdiAqIGIxMjtcbiAgdDIwICs9IHYgKiBiMTM7XG4gIHQyMSArPSB2ICogYjE0O1xuICB0MjIgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOF07XG4gIHQ4ICs9IHYgKiBiMDtcbiAgdDkgKz0gdiAqIGIxO1xuICB0MTAgKz0gdiAqIGIyO1xuICB0MTEgKz0gdiAqIGIzO1xuICB0MTIgKz0gdiAqIGI0O1xuICB0MTMgKz0gdiAqIGI1O1xuICB0MTQgKz0gdiAqIGI2O1xuICB0MTUgKz0gdiAqIGI3O1xuICB0MTYgKz0gdiAqIGI4O1xuICB0MTcgKz0gdiAqIGI5O1xuICB0MTggKz0gdiAqIGIxMDtcbiAgdDE5ICs9IHYgKiBiMTE7XG4gIHQyMCArPSB2ICogYjEyO1xuICB0MjEgKz0gdiAqIGIxMztcbiAgdDIyICs9IHYgKiBiMTQ7XG4gIHQyMyArPSB2ICogYjE1O1xuICB2ID0gYVs5XTtcbiAgdDkgKz0gdiAqIGIwO1xuICB0MTAgKz0gdiAqIGIxO1xuICB0MTEgKz0gdiAqIGIyO1xuICB0MTIgKz0gdiAqIGIzO1xuICB0MTMgKz0gdiAqIGI0O1xuICB0MTQgKz0gdiAqIGI1O1xuICB0MTUgKz0gdiAqIGI2O1xuICB0MTYgKz0gdiAqIGI3O1xuICB0MTcgKz0gdiAqIGI4O1xuICB0MTggKz0gdiAqIGI5O1xuICB0MTkgKz0gdiAqIGIxMDtcbiAgdDIwICs9IHYgKiBiMTE7XG4gIHQyMSArPSB2ICogYjEyO1xuICB0MjIgKz0gdiAqIGIxMztcbiAgdDIzICs9IHYgKiBiMTQ7XG4gIHQyNCArPSB2ICogYjE1O1xuICB2ID0gYVsxMF07XG4gIHQxMCArPSB2ICogYjA7XG4gIHQxMSArPSB2ICogYjE7XG4gIHQxMiArPSB2ICogYjI7XG4gIHQxMyArPSB2ICogYjM7XG4gIHQxNCArPSB2ICogYjQ7XG4gIHQxNSArPSB2ICogYjU7XG4gIHQxNiArPSB2ICogYjY7XG4gIHQxNyArPSB2ICogYjc7XG4gIHQxOCArPSB2ICogYjg7XG4gIHQxOSArPSB2ICogYjk7XG4gIHQyMCArPSB2ICogYjEwO1xuICB0MjEgKz0gdiAqIGIxMTtcbiAgdDIyICs9IHYgKiBiMTI7XG4gIHQyMyArPSB2ICogYjEzO1xuICB0MjQgKz0gdiAqIGIxNDtcbiAgdDI1ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzExXTtcbiAgdDExICs9IHYgKiBiMDtcbiAgdDEyICs9IHYgKiBiMTtcbiAgdDEzICs9IHYgKiBiMjtcbiAgdDE0ICs9IHYgKiBiMztcbiAgdDE1ICs9IHYgKiBiNDtcbiAgdDE2ICs9IHYgKiBiNTtcbiAgdDE3ICs9IHYgKiBiNjtcbiAgdDE4ICs9IHYgKiBiNztcbiAgdDE5ICs9IHYgKiBiODtcbiAgdDIwICs9IHYgKiBiOTtcbiAgdDIxICs9IHYgKiBiMTA7XG4gIHQyMiArPSB2ICogYjExO1xuICB0MjMgKz0gdiAqIGIxMjtcbiAgdDI0ICs9IHYgKiBiMTM7XG4gIHQyNSArPSB2ICogYjE0O1xuICB0MjYgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTJdO1xuICB0MTIgKz0gdiAqIGIwO1xuICB0MTMgKz0gdiAqIGIxO1xuICB0MTQgKz0gdiAqIGIyO1xuICB0MTUgKz0gdiAqIGIzO1xuICB0MTYgKz0gdiAqIGI0O1xuICB0MTcgKz0gdiAqIGI1O1xuICB0MTggKz0gdiAqIGI2O1xuICB0MTkgKz0gdiAqIGI3O1xuICB0MjAgKz0gdiAqIGI4O1xuICB0MjEgKz0gdiAqIGI5O1xuICB0MjIgKz0gdiAqIGIxMDtcbiAgdDIzICs9IHYgKiBiMTE7XG4gIHQyNCArPSB2ICogYjEyO1xuICB0MjUgKz0gdiAqIGIxMztcbiAgdDI2ICs9IHYgKiBiMTQ7XG4gIHQyNyArPSB2ICogYjE1O1xuICB2ID0gYVsxM107XG4gIHQxMyArPSB2ICogYjA7XG4gIHQxNCArPSB2ICogYjE7XG4gIHQxNSArPSB2ICogYjI7XG4gIHQxNiArPSB2ICogYjM7XG4gIHQxNyArPSB2ICogYjQ7XG4gIHQxOCArPSB2ICogYjU7XG4gIHQxOSArPSB2ICogYjY7XG4gIHQyMCArPSB2ICogYjc7XG4gIHQyMSArPSB2ICogYjg7XG4gIHQyMiArPSB2ICogYjk7XG4gIHQyMyArPSB2ICogYjEwO1xuICB0MjQgKz0gdiAqIGIxMTtcbiAgdDI1ICs9IHYgKiBiMTI7XG4gIHQyNiArPSB2ICogYjEzO1xuICB0MjcgKz0gdiAqIGIxNDtcbiAgdDI4ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE0XTtcbiAgdDE0ICs9IHYgKiBiMDtcbiAgdDE1ICs9IHYgKiBiMTtcbiAgdDE2ICs9IHYgKiBiMjtcbiAgdDE3ICs9IHYgKiBiMztcbiAgdDE4ICs9IHYgKiBiNDtcbiAgdDE5ICs9IHYgKiBiNTtcbiAgdDIwICs9IHYgKiBiNjtcbiAgdDIxICs9IHYgKiBiNztcbiAgdDIyICs9IHYgKiBiODtcbiAgdDIzICs9IHYgKiBiOTtcbiAgdDI0ICs9IHYgKiBiMTA7XG4gIHQyNSArPSB2ICogYjExO1xuICB0MjYgKz0gdiAqIGIxMjtcbiAgdDI3ICs9IHYgKiBiMTM7XG4gIHQyOCArPSB2ICogYjE0O1xuICB0MjkgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTVdO1xuICB0MTUgKz0gdiAqIGIwO1xuICB0MTYgKz0gdiAqIGIxO1xuICB0MTcgKz0gdiAqIGIyO1xuICB0MTggKz0gdiAqIGIzO1xuICB0MTkgKz0gdiAqIGI0O1xuICB0MjAgKz0gdiAqIGI1O1xuICB0MjEgKz0gdiAqIGI2O1xuICB0MjIgKz0gdiAqIGI3O1xuICB0MjMgKz0gdiAqIGI4O1xuICB0MjQgKz0gdiAqIGI5O1xuICB0MjUgKz0gdiAqIGIxMDtcbiAgdDI2ICs9IHYgKiBiMTE7XG4gIHQyNyArPSB2ICogYjEyO1xuICB0MjggKz0gdiAqIGIxMztcbiAgdDI5ICs9IHYgKiBiMTQ7XG4gIHQzMCArPSB2ICogYjE1O1xuXG4gIHQwICArPSAzOCAqIHQxNjtcbiAgdDEgICs9IDM4ICogdDE3O1xuICB0MiAgKz0gMzggKiB0MTg7XG4gIHQzICArPSAzOCAqIHQxOTtcbiAgdDQgICs9IDM4ICogdDIwO1xuICB0NSAgKz0gMzggKiB0MjE7XG4gIHQ2ICArPSAzOCAqIHQyMjtcbiAgdDcgICs9IDM4ICogdDIzO1xuICB0OCAgKz0gMzggKiB0MjQ7XG4gIHQ5ICArPSAzOCAqIHQyNTtcbiAgdDEwICs9IDM4ICogdDI2O1xuICB0MTEgKz0gMzggKiB0Mjc7XG4gIHQxMiArPSAzOCAqIHQyODtcbiAgdDEzICs9IDM4ICogdDI5O1xuICB0MTQgKz0gMzggKiB0MzA7XG4gIC8vIHQxNSBsZWZ0IGFzIGlzXG5cbiAgLy8gZmlyc3QgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIC8vIHNlY29uZCBjYXJcbiAgYyA9IDE7XG4gIHYgPSAgdDAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0MyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDYgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDcgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0NyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDggKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSAgdDkgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7ICB0OSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTAgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTEgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMSA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTIgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMiA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTMgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxMyA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTQgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNCA9IHYgLSBjICogNjU1MzY7XG4gIHYgPSB0MTUgKyBjICsgNjU1MzU7IGMgPSBNYXRoLmZsb29yKHYgLyA2NTUzNik7IHQxNSA9IHYgLSBjICogNjU1MzY7XG4gIHQwICs9IGMtMSArIDM3ICogKGMtMSk7XG5cbiAgb1sgMF0gPSB0MDtcbiAgb1sgMV0gPSB0MTtcbiAgb1sgMl0gPSB0MjtcbiAgb1sgM10gPSB0MztcbiAgb1sgNF0gPSB0NDtcbiAgb1sgNV0gPSB0NTtcbiAgb1sgNl0gPSB0NjtcbiAgb1sgN10gPSB0NztcbiAgb1sgOF0gPSB0ODtcbiAgb1sgOV0gPSB0OTtcbiAgb1sxMF0gPSB0MTA7XG4gIG9bMTFdID0gdDExO1xuICBvWzEyXSA9IHQxMjtcbiAgb1sxM10gPSB0MTM7XG4gIG9bMTRdID0gdDE0O1xuICBvWzE1XSA9IHQxNTtcbn1cblxuZnVuY3Rpb24gUyhvLCBhKSB7XG4gIE0obywgYSwgYSk7XG59XG5cbmZ1bmN0aW9uIGludjI1NTE5KG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTM7IGEgPj0gMDsgYS0tKSB7XG4gICAgUyhjLCBjKTtcbiAgICBpZihhICE9PSAyICYmIGEgIT09IDQpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBwb3cyNTIzKG8sIGkpIHtcbiAgdmFyIGMgPSBnZigpO1xuICB2YXIgYTtcbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIGNbYV0gPSBpW2FdO1xuICBmb3IgKGEgPSAyNTA7IGEgPj0gMDsgYS0tKSB7XG4gICAgICBTKGMsIGMpO1xuICAgICAgaWYoYSAhPT0gMSkgTShjLCBjLCBpKTtcbiAgfVxuICBmb3IgKGEgPSAwOyBhIDwgMTY7IGErKykgb1thXSA9IGNbYV07XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApIHtcbiAgdmFyIHogPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg4MCksIHIsIGk7XG4gIHZhciBhID0gZ2YoKSwgYiA9IGdmKCksIGMgPSBnZigpLFxuICAgICAgZCA9IGdmKCksIGUgPSBnZigpLCBmID0gZ2YoKTtcbiAgZm9yIChpID0gMDsgaSA8IDMxOyBpKyspIHpbaV0gPSBuW2ldO1xuICB6WzMxXT0oblszMV0mMTI3KXw2NDtcbiAgelswXSY9MjQ4O1xuICB1bnBhY2syNTUxOSh4LHApO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgIGJbaV09eFtpXTtcbiAgICBkW2ldPWFbaV09Y1tpXT0wO1xuICB9XG4gIGFbMF09ZFswXT0xO1xuICBmb3IgKGk9MjU0OyBpPj0wOyAtLWkpIHtcbiAgICByPSh6W2k+Pj4zXT4+PihpJjcpKSYxO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgQShjLGIsZCk7XG4gICAgWihiLGIsZCk7XG4gICAgUyhkLGUpO1xuICAgIFMoZixhKTtcbiAgICBNKGEsYyxhKTtcbiAgICBNKGMsYixlKTtcbiAgICBBKGUsYSxjKTtcbiAgICBaKGEsYSxjKTtcbiAgICBTKGIsYSk7XG4gICAgWihjLGQsZik7XG4gICAgTShhLGMsXzEyMTY2NSk7XG4gICAgQShhLGEsZCk7XG4gICAgTShjLGMsYSk7XG4gICAgTShhLGQsZik7XG4gICAgTShkLGIseCk7XG4gICAgUyhiLGUpO1xuICAgIHNlbDI1NTE5KGEsYixyKTtcbiAgICBzZWwyNTUxOShjLGQscik7XG4gIH1cbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB4W2krMTZdPWFbaV07XG4gICAgeFtpKzMyXT1jW2ldO1xuICAgIHhbaSs0OF09YltpXTtcbiAgICB4W2krNjRdPWRbaV07XG4gIH1cbiAgdmFyIHgzMiA9IHguc3ViYXJyYXkoMzIpO1xuICB2YXIgeDE2ID0geC5zdWJhcnJheSgxNik7XG4gIGludjI1NTE5KHgzMix4MzIpO1xuICBNKHgxNix4MTYseDMyKTtcbiAgcGFjazI1NTE5KHEseDE2KTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbikge1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHQocSwgbiwgXzkpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2tleXBhaXIoeSwgeCkge1xuICByYW5kb21ieXRlcyh4LCAzMik7XG4gIHJldHVybiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHksIHgpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpIHtcbiAgdmFyIHMgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHMsIHgsIHkpO1xuICByZXR1cm4gY3J5cHRvX2NvcmVfaHNhbHNhMjAoaywgXzAsIHMsIHNpZ21hKTtcbn1cblxudmFyIGNyeXB0b19ib3hfYWZ0ZXJubSA9IGNyeXB0b19zZWNyZXRib3g7XG52YXIgY3J5cHRvX2JveF9vcGVuX2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94X29wZW47XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3goYywgbSwgZCwgbiwgeSwgeCkge1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KTtcbiAgcmV0dXJuIGNyeXB0b19ib3hfYWZ0ZXJubShjLCBtLCBkLCBuLCBrKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9vcGVuKG0sIGMsIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X29wZW5fYWZ0ZXJubShtLCBjLCBkLCBuLCBrKTtcbn1cblxudmFyIEsgPSBbXG4gIDB4NDI4YTJmOTgsIDB4ZDcyOGFlMjIsIDB4NzEzNzQ0OTEsIDB4MjNlZjY1Y2QsXG4gIDB4YjVjMGZiY2YsIDB4ZWM0ZDNiMmYsIDB4ZTliNWRiYTUsIDB4ODE4OWRiYmMsXG4gIDB4Mzk1NmMyNWIsIDB4ZjM0OGI1MzgsIDB4NTlmMTExZjEsIDB4YjYwNWQwMTksXG4gIDB4OTIzZjgyYTQsIDB4YWYxOTRmOWIsIDB4YWIxYzVlZDUsIDB4ZGE2ZDgxMTgsXG4gIDB4ZDgwN2FhOTgsIDB4YTMwMzAyNDIsIDB4MTI4MzViMDEsIDB4NDU3MDZmYmUsXG4gIDB4MjQzMTg1YmUsIDB4NGVlNGIyOGMsIDB4NTUwYzdkYzMsIDB4ZDVmZmI0ZTIsXG4gIDB4NzJiZTVkNzQsIDB4ZjI3Yjg5NmYsIDB4ODBkZWIxZmUsIDB4M2IxNjk2YjEsXG4gIDB4OWJkYzA2YTcsIDB4MjVjNzEyMzUsIDB4YzE5YmYxNzQsIDB4Y2Y2OTI2OTQsXG4gIDB4ZTQ5YjY5YzEsIDB4OWVmMTRhZDIsIDB4ZWZiZTQ3ODYsIDB4Mzg0ZjI1ZTMsXG4gIDB4MGZjMTlkYzYsIDB4OGI4Y2Q1YjUsIDB4MjQwY2ExY2MsIDB4NzdhYzljNjUsXG4gIDB4MmRlOTJjNmYsIDB4NTkyYjAyNzUsIDB4NGE3NDg0YWEsIDB4NmVhNmU0ODMsXG4gIDB4NWNiMGE5ZGMsIDB4YmQ0MWZiZDQsIDB4NzZmOTg4ZGEsIDB4ODMxMTUzYjUsXG4gIDB4OTgzZTUxNTIsIDB4ZWU2NmRmYWIsIDB4YTgzMWM2NmQsIDB4MmRiNDMyMTAsXG4gIDB4YjAwMzI3YzgsIDB4OThmYjIxM2YsIDB4YmY1OTdmYzcsIDB4YmVlZjBlZTQsXG4gIDB4YzZlMDBiZjMsIDB4M2RhODhmYzIsIDB4ZDVhNzkxNDcsIDB4OTMwYWE3MjUsXG4gIDB4MDZjYTYzNTEsIDB4ZTAwMzgyNmYsIDB4MTQyOTI5NjcsIDB4MGEwZTZlNzAsXG4gIDB4MjdiNzBhODUsIDB4NDZkMjJmZmMsIDB4MmUxYjIxMzgsIDB4NWMyNmM5MjYsXG4gIDB4NGQyYzZkZmMsIDB4NWFjNDJhZWQsIDB4NTMzODBkMTMsIDB4OWQ5NWIzZGYsXG4gIDB4NjUwYTczNTQsIDB4OGJhZjYzZGUsIDB4NzY2YTBhYmIsIDB4M2M3N2IyYTgsXG4gIDB4ODFjMmM5MmUsIDB4NDdlZGFlZTYsIDB4OTI3MjJjODUsIDB4MTQ4MjM1M2IsXG4gIDB4YTJiZmU4YTEsIDB4NGNmMTAzNjQsIDB4YTgxYTY2NGIsIDB4YmM0MjMwMDEsXG4gIDB4YzI0YjhiNzAsIDB4ZDBmODk3OTEsIDB4Yzc2YzUxYTMsIDB4MDY1NGJlMzAsXG4gIDB4ZDE5MmU4MTksIDB4ZDZlZjUyMTgsIDB4ZDY5OTA2MjQsIDB4NTU2NWE5MTAsXG4gIDB4ZjQwZTM1ODUsIDB4NTc3MTIwMmEsIDB4MTA2YWEwNzAsIDB4MzJiYmQxYjgsXG4gIDB4MTlhNGMxMTYsIDB4YjhkMmQwYzgsIDB4MWUzNzZjMDgsIDB4NTE0MWFiNTMsXG4gIDB4Mjc0ODc3NGMsIDB4ZGY4ZWViOTksIDB4MzRiMGJjYjUsIDB4ZTE5YjQ4YTgsXG4gIDB4MzkxYzBjYjMsIDB4YzVjOTVhNjMsIDB4NGVkOGFhNGEsIDB4ZTM0MThhY2IsXG4gIDB4NWI5Y2NhNGYsIDB4Nzc2M2UzNzMsIDB4NjgyZTZmZjMsIDB4ZDZiMmI4YTMsXG4gIDB4NzQ4ZjgyZWUsIDB4NWRlZmIyZmMsIDB4NzhhNTYzNmYsIDB4NDMxNzJmNjAsXG4gIDB4ODRjODc4MTQsIDB4YTFmMGFiNzIsIDB4OGNjNzAyMDgsIDB4MWE2NDM5ZWMsXG4gIDB4OTBiZWZmZmEsIDB4MjM2MzFlMjgsIDB4YTQ1MDZjZWIsIDB4ZGU4MmJkZTksXG4gIDB4YmVmOWEzZjcsIDB4YjJjNjc5MTUsIDB4YzY3MTc4ZjIsIDB4ZTM3MjUzMmIsXG4gIDB4Y2EyNzNlY2UsIDB4ZWEyNjYxOWMsIDB4ZDE4NmI4YzcsIDB4MjFjMGMyMDcsXG4gIDB4ZWFkYTdkZDYsIDB4Y2RlMGViMWUsIDB4ZjU3ZDRmN2YsIDB4ZWU2ZWQxNzgsXG4gIDB4MDZmMDY3YWEsIDB4NzIxNzZmYmEsIDB4MGE2MzdkYzUsIDB4YTJjODk4YTYsXG4gIDB4MTEzZjk4MDQsIDB4YmVmOTBkYWUsIDB4MWI3MTBiMzUsIDB4MTMxYzQ3MWIsXG4gIDB4MjhkYjc3ZjUsIDB4MjMwNDdkODQsIDB4MzJjYWFiN2IsIDB4NDBjNzI0OTMsXG4gIDB4M2M5ZWJlMGEsIDB4MTVjOWJlYmMsIDB4NDMxZDY3YzQsIDB4OWMxMDBkNGMsXG4gIDB4NGNjNWQ0YmUsIDB4Y2IzZTQyYjYsIDB4NTk3ZjI5OWMsIDB4ZmM2NTdlMmEsXG4gIDB4NWZjYjZmYWIsIDB4M2FkNmZhZWMsIDB4NmM0NDE5OGMsIDB4NGE0NzU4MTdcbl07XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbikge1xuICB2YXIgd2ggPSBuZXcgSW50MzJBcnJheSgxNiksIHdsID0gbmV3IEludDMyQXJyYXkoMTYpLFxuICAgICAgYmgwLCBiaDEsIGJoMiwgYmgzLCBiaDQsIGJoNSwgYmg2LCBiaDcsXG4gICAgICBibDAsIGJsMSwgYmwyLCBibDMsIGJsNCwgYmw1LCBibDYsIGJsNyxcbiAgICAgIHRoLCB0bCwgaSwgaiwgaCwgbCwgYSwgYiwgYywgZDtcblxuICB2YXIgYWgwID0gaGhbMF0sXG4gICAgICBhaDEgPSBoaFsxXSxcbiAgICAgIGFoMiA9IGhoWzJdLFxuICAgICAgYWgzID0gaGhbM10sXG4gICAgICBhaDQgPSBoaFs0XSxcbiAgICAgIGFoNSA9IGhoWzVdLFxuICAgICAgYWg2ID0gaGhbNl0sXG4gICAgICBhaDcgPSBoaFs3XSxcblxuICAgICAgYWwwID0gaGxbMF0sXG4gICAgICBhbDEgPSBobFsxXSxcbiAgICAgIGFsMiA9IGhsWzJdLFxuICAgICAgYWwzID0gaGxbM10sXG4gICAgICBhbDQgPSBobFs0XSxcbiAgICAgIGFsNSA9IGhsWzVdLFxuICAgICAgYWw2ID0gaGxbNl0sXG4gICAgICBhbDcgPSBobFs3XTtcblxuICB2YXIgcG9zID0gMDtcbiAgd2hpbGUgKG4gPj0gMTI4KSB7XG4gICAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICAgIGogPSA4ICogaSArIHBvcztcbiAgICAgIHdoW2ldID0gKG1baiswXSA8PCAyNCkgfCAobVtqKzFdIDw8IDE2KSB8IChtW2orMl0gPDwgOCkgfCBtW2orM107XG4gICAgICB3bFtpXSA9IChtW2orNF0gPDwgMjQpIHwgKG1bais1XSA8PCAxNikgfCAobVtqKzZdIDw8IDgpIHwgbVtqKzddO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgODA7IGkrKykge1xuICAgICAgYmgwID0gYWgwO1xuICAgICAgYmgxID0gYWgxO1xuICAgICAgYmgyID0gYWgyO1xuICAgICAgYmgzID0gYWgzO1xuICAgICAgYmg0ID0gYWg0O1xuICAgICAgYmg1ID0gYWg1O1xuICAgICAgYmg2ID0gYWg2O1xuICAgICAgYmg3ID0gYWg3O1xuXG4gICAgICBibDAgPSBhbDA7XG4gICAgICBibDEgPSBhbDE7XG4gICAgICBibDIgPSBhbDI7XG4gICAgICBibDMgPSBhbDM7XG4gICAgICBibDQgPSBhbDQ7XG4gICAgICBibDUgPSBhbDU7XG4gICAgICBibDYgPSBhbDY7XG4gICAgICBibDcgPSBhbDc7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGFoNztcbiAgICAgIGwgPSBhbDc7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTFcbiAgICAgIGggPSAoKGFoNCA+Pj4gMTQpIHwgKGFsNCA8PCAoMzItMTQpKSkgXiAoKGFoNCA+Pj4gMTgpIHwgKGFsNCA8PCAoMzItMTgpKSkgXiAoKGFsNCA+Pj4gKDQxLTMyKSkgfCAoYWg0IDw8ICgzMi0oNDEtMzIpKSkpO1xuICAgICAgbCA9ICgoYWw0ID4+PiAxNCkgfCAoYWg0IDw8ICgzMi0xNCkpKSBeICgoYWw0ID4+PiAxOCkgfCAoYWg0IDw8ICgzMi0xOCkpKSBeICgoYWg0ID4+PiAoNDEtMzIpKSB8IChhbDQgPDwgKDMyLSg0MS0zMikpKSk7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gQ2hcbiAgICAgIGggPSAoYWg0ICYgYWg1KSBeICh+YWg0ICYgYWg2KTtcbiAgICAgIGwgPSAoYWw0ICYgYWw1KSBeICh+YWw0ICYgYWw2KTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBLXG4gICAgICBoID0gS1tpKjJdO1xuICAgICAgbCA9IEtbaSoyKzFdO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIHdcbiAgICAgIGggPSB3aFtpJTE2XTtcbiAgICAgIGwgPSB3bFtpJTE2XTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgIGQgKz0gYyA+Pj4gMTY7XG5cbiAgICAgIHRoID0gYyAmIDB4ZmZmZiB8IGQgPDwgMTY7XG4gICAgICB0bCA9IGEgJiAweGZmZmYgfCBiIDw8IDE2O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSB0aDtcbiAgICAgIGwgPSB0bDtcblxuICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIFNpZ21hMFxuICAgICAgaCA9ICgoYWgwID4+PiAyOCkgfCAoYWwwIDw8ICgzMi0yOCkpKSBeICgoYWwwID4+PiAoMzQtMzIpKSB8IChhaDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFsMCA+Pj4gKDM5LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzktMzIpKSkpO1xuICAgICAgbCA9ICgoYWwwID4+PiAyOCkgfCAoYWgwIDw8ICgzMi0yOCkpKSBeICgoYWgwID4+PiAoMzQtMzIpKSB8IChhbDAgPDwgKDMyLSgzNC0zMikpKSkgXiAoKGFoMCA+Pj4gKDM5LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzktMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIE1halxuICAgICAgaCA9IChhaDAgJiBhaDEpIF4gKGFoMCAmIGFoMikgXiAoYWgxICYgYWgyKTtcbiAgICAgIGwgPSAoYWwwICYgYWwxKSBeIChhbDAgJiBhbDIpIF4gKGFsMSAmIGFsMik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIC8vIGFkZFxuICAgICAgaCA9IGJoMztcbiAgICAgIGwgPSBibDM7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICBiaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICBibDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICAgIGFoMSA9IGJoMDtcbiAgICAgIGFoMiA9IGJoMTtcbiAgICAgIGFoMyA9IGJoMjtcbiAgICAgIGFoNCA9IGJoMztcbiAgICAgIGFoNSA9IGJoNDtcbiAgICAgIGFoNiA9IGJoNTtcbiAgICAgIGFoNyA9IGJoNjtcbiAgICAgIGFoMCA9IGJoNztcblxuICAgICAgYWwxID0gYmwwO1xuICAgICAgYWwyID0gYmwxO1xuICAgICAgYWwzID0gYmwyO1xuICAgICAgYWw0ID0gYmwzO1xuICAgICAgYWw1ID0gYmw0O1xuICAgICAgYWw2ID0gYmw1O1xuICAgICAgYWw3ID0gYmw2O1xuICAgICAgYWwwID0gYmw3O1xuXG4gICAgICBpZiAoaSUxNiA9PT0gMTUpIHtcbiAgICAgICAgZm9yIChqID0gMDsgaiA8IDE2OyBqKyspIHtcbiAgICAgICAgICAvLyBhZGRcbiAgICAgICAgICBoID0gd2hbal07XG4gICAgICAgICAgbCA9IHdsW2pdO1xuXG4gICAgICAgICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICAgICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAgICAgaCA9IHdoWyhqKzkpJTE2XTtcbiAgICAgICAgICBsID0gd2xbKGorOSklMTZdO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMFxuICAgICAgICAgIHRoID0gd2hbKGorMSklMTZdO1xuICAgICAgICAgIHRsID0gd2xbKGorMSklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxKSB8ICh0bCA8PCAoMzItMSkpKSBeICgodGggPj4+IDgpIHwgKHRsIDw8ICgzMi04KSkpIF4gKHRoID4+PiA3KTtcbiAgICAgICAgICBsID0gKCh0bCA+Pj4gMSkgfCAodGggPDwgKDMyLTEpKSkgXiAoKHRsID4+PiA4KSB8ICh0aCA8PCAoMzItOCkpKSBeICgodGwgPj4+IDcpIHwgKHRoIDw8ICgzMi03KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIC8vIHNpZ21hMVxuICAgICAgICAgIHRoID0gd2hbKGorMTQpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzE0KSUxNl07XG4gICAgICAgICAgaCA9ICgodGggPj4+IDE5KSB8ICh0bCA8PCAoMzItMTkpKSkgXiAoKHRsID4+PiAoNjEtMzIpKSB8ICh0aCA8PCAoMzItKDYxLTMyKSkpKSBeICh0aCA+Pj4gNik7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDE5KSB8ICh0aCA8PCAoMzItMTkpKSkgXiAoKHRoID4+PiAoNjEtMzIpKSB8ICh0bCA8PCAoMzItKDYxLTMyKSkpKSBeICgodGwgPj4+IDYpIHwgKHRoIDw8ICgzMi02KSkpO1xuXG4gICAgICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICAgICAgYyArPSBiID4+PiAxNjtcbiAgICAgICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICAgICAgd2hbal0gPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgICAgICAgd2xbal0gPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICAvLyBhZGRcbiAgICBoID0gYWgwO1xuICAgIGwgPSBhbDA7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMF07XG4gICAgbCA9IGhsWzBdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMF0gPSBhaDAgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMF0gPSBhbDAgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgxO1xuICAgIGwgPSBhbDE7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMV07XG4gICAgbCA9IGhsWzFdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMV0gPSBhaDEgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMV0gPSBhbDEgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgyO1xuICAgIGwgPSBhbDI7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbMl07XG4gICAgbCA9IGhsWzJdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbMl0gPSBhaDIgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbMl0gPSBhbDIgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWgzO1xuICAgIGwgPSBhbDM7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbM107XG4gICAgbCA9IGhsWzNdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbM10gPSBhaDMgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbM10gPSBhbDMgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg0O1xuICAgIGwgPSBhbDQ7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNF07XG4gICAgbCA9IGhsWzRdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNF0gPSBhaDQgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNF0gPSBhbDQgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg1O1xuICAgIGwgPSBhbDU7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNV07XG4gICAgbCA9IGhsWzVdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNV0gPSBhaDUgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNV0gPSBhbDUgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg2O1xuICAgIGwgPSBhbDY7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbNl07XG4gICAgbCA9IGhsWzZdO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbNl0gPSBhaDYgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbNl0gPSBhbDYgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBoID0gYWg3O1xuICAgIGwgPSBhbDc7XG5cbiAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgIGMgPSBoICYgMHhmZmZmOyBkID0gaCA+Pj4gMTY7XG5cbiAgICBoID0gaGhbN107XG4gICAgbCA9IGhsWzddO1xuXG4gICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgYyArPSBiID4+PiAxNjtcbiAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgaGhbN10gPSBhaDcgPSAoYyAmIDB4ZmZmZikgfCAoZCA8PCAxNik7XG4gICAgaGxbN10gPSBhbDcgPSAoYSAmIDB4ZmZmZikgfCAoYiA8PCAxNik7XG5cbiAgICBwb3MgKz0gMTI4O1xuICAgIG4gLT0gMTI4O1xuICB9XG5cbiAgcmV0dXJuIG47XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19oYXNoKG91dCwgbSwgbikge1xuICB2YXIgaGggPSBuZXcgSW50MzJBcnJheSg4KSxcbiAgICAgIGhsID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICB4ID0gbmV3IFVpbnQ4QXJyYXkoMjU2KSxcbiAgICAgIGksIGIgPSBuO1xuXG4gIGhoWzBdID0gMHg2YTA5ZTY2NztcbiAgaGhbMV0gPSAweGJiNjdhZTg1O1xuICBoaFsyXSA9IDB4M2M2ZWYzNzI7XG4gIGhoWzNdID0gMHhhNTRmZjUzYTtcbiAgaGhbNF0gPSAweDUxMGU1MjdmO1xuICBoaFs1XSA9IDB4OWIwNTY4OGM7XG4gIGhoWzZdID0gMHgxZjgzZDlhYjtcbiAgaGhbN10gPSAweDViZTBjZDE5O1xuXG4gIGhsWzBdID0gMHhmM2JjYzkwODtcbiAgaGxbMV0gPSAweDg0Y2FhNzNiO1xuICBobFsyXSA9IDB4ZmU5NGY4MmI7XG4gIGhsWzNdID0gMHg1ZjFkMzZmMTtcbiAgaGxbNF0gPSAweGFkZTY4MmQxO1xuICBobFs1XSA9IDB4MmIzZTZjMWY7XG4gIGhsWzZdID0gMHhmYjQxYmQ2YjtcbiAgaGxbN10gPSAweDEzN2UyMTc5O1xuXG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgbSwgbik7XG4gIG4gJT0gMTI4O1xuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSBtW2ItbitpXTtcbiAgeFtuXSA9IDEyODtcblxuICBuID0gMjU2LTEyOCoobjwxMTI/MTowKTtcbiAgeFtuLTldID0gMDtcbiAgdHM2NCh4LCBuLTgsICAoYiAvIDB4MjAwMDAwMDApIHwgMCwgYiA8PCAzKTtcbiAgY3J5cHRvX2hhc2hibG9ja3NfaGwoaGgsIGhsLCB4LCBuKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgODsgaSsrKSB0czY0KG91dCwgOCppLCBoaFtpXSwgaGxbaV0pO1xuXG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBhZGQocCwgcSkge1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCksXG4gICAgICBnID0gZ2YoKSwgaCA9IGdmKCksIHQgPSBnZigpO1xuXG4gIFooYSwgcFsxXSwgcFswXSk7XG4gIFoodCwgcVsxXSwgcVswXSk7XG4gIE0oYSwgYSwgdCk7XG4gIEEoYiwgcFswXSwgcFsxXSk7XG4gIEEodCwgcVswXSwgcVsxXSk7XG4gIE0oYiwgYiwgdCk7XG4gIE0oYywgcFszXSwgcVszXSk7XG4gIE0oYywgYywgRDIpO1xuICBNKGQsIHBbMl0sIHFbMl0pO1xuICBBKGQsIGQsIGQpO1xuICBaKGUsIGIsIGEpO1xuICBaKGYsIGQsIGMpO1xuICBBKGcsIGQsIGMpO1xuICBBKGgsIGIsIGEpO1xuXG4gIE0ocFswXSwgZSwgZik7XG4gIE0ocFsxXSwgaCwgZyk7XG4gIE0ocFsyXSwgZywgZik7XG4gIE0ocFszXSwgZSwgaCk7XG59XG5cbmZ1bmN0aW9uIGNzd2FwKHAsIHEsIGIpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA0OyBpKyspIHtcbiAgICBzZWwyNTUxOShwW2ldLCBxW2ldLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwYWNrKHIsIHApIHtcbiAgdmFyIHR4ID0gZ2YoKSwgdHkgPSBnZigpLCB6aSA9IGdmKCk7XG4gIGludjI1NTE5KHppLCBwWzJdKTtcbiAgTSh0eCwgcFswXSwgemkpO1xuICBNKHR5LCBwWzFdLCB6aSk7XG4gIHBhY2syNTUxOShyLCB0eSk7XG4gIHJbMzFdIF49IHBhcjI1NTE5KHR4KSA8PCA3O1xufVxuXG5mdW5jdGlvbiBzY2FsYXJtdWx0KHAsIHEsIHMpIHtcbiAgdmFyIGIsIGk7XG4gIHNldDI1NTE5KHBbMF0sIGdmMCk7XG4gIHNldDI1NTE5KHBbMV0sIGdmMSk7XG4gIHNldDI1NTE5KHBbMl0sIGdmMSk7XG4gIHNldDI1NTE5KHBbM10sIGdmMCk7XG4gIGZvciAoaSA9IDI1NTsgaSA+PSAwOyAtLWkpIHtcbiAgICBiID0gKHNbKGkvOCl8MF0gPj4gKGkmNykpICYgMTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgICBhZGQocSwgcCk7XG4gICAgYWRkKHAsIHApO1xuICAgIGNzd2FwKHAsIHEsIGIpO1xuICB9XG59XG5cbmZ1bmN0aW9uIHNjYWxhcmJhc2UocCwgcykge1xuICB2YXIgcSA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgc2V0MjU1MTkocVswXSwgWCk7XG4gIHNldDI1NTE5KHFbMV0sIFkpO1xuICBzZXQyNTUxOShxWzJdLCBnZjEpO1xuICBNKHFbM10sIFgsIFkpO1xuICBzY2FsYXJtdWx0KHAsIHEsIHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgc2VlZGVkKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcbiAgdmFyIGk7XG5cbiAgaWYgKCFzZWVkZWQpIHJhbmRvbWJ5dGVzKHNrLCAzMik7XG4gIGNyeXB0b19oYXNoKGQsIHNrLCAzMik7XG4gIGRbMF0gJj0gMjQ4O1xuICBkWzMxXSAmPSAxMjc7XG4gIGRbMzFdIHw9IDY0O1xuXG4gIHNjYWxhcmJhc2UocCwgZCk7XG4gIHBhY2socGssIHApO1xuXG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpKzMyXSA9IHBrW2ldO1xuICByZXR1cm4gMDtcbn1cblxudmFyIEwgPSBuZXcgRmxvYXQ2NEFycmF5KFsweGVkLCAweGQzLCAweGY1LCAweDVjLCAweDFhLCAweDYzLCAweDEyLCAweDU4LCAweGQ2LCAweDljLCAweGY3LCAweGEyLCAweGRlLCAweGY5LCAweGRlLCAweDE0LCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAwLCAweDEwXSk7XG5cbmZ1bmN0aW9uIG1vZEwociwgeCkge1xuICB2YXIgY2FycnksIGksIGosIGs7XG4gIGZvciAoaSA9IDYzOyBpID49IDMyOyAtLWkpIHtcbiAgICBjYXJyeSA9IDA7XG4gICAgZm9yIChqID0gaSAtIDMyLCBrID0gaSAtIDEyOyBqIDwgazsgKytqKSB7XG4gICAgICB4W2pdICs9IGNhcnJ5IC0gMTYgKiB4W2ldICogTFtqIC0gKGkgLSAzMildO1xuICAgICAgY2FycnkgPSAoeFtqXSArIDEyOCkgPj4gODtcbiAgICAgIHhbal0gLT0gY2FycnkgKiAyNTY7XG4gICAgfVxuICAgIHhbal0gKz0gY2Fycnk7XG4gICAgeFtpXSA9IDA7XG4gIH1cbiAgY2FycnkgPSAwO1xuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgIHhbal0gKz0gY2FycnkgLSAoeFszMV0gPj4gNCkgKiBMW2pdO1xuICAgIGNhcnJ5ID0geFtqXSA+PiA4O1xuICAgIHhbal0gJj0gMjU1O1xuICB9XG4gIGZvciAoaiA9IDA7IGogPCAzMjsgaisrKSB4W2pdIC09IGNhcnJ5ICogTFtqXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICB4W2krMV0gKz0geFtpXSA+PiA4O1xuICAgIHJbaV0gPSB4W2ldICYgMjU1O1xuICB9XG59XG5cbmZ1bmN0aW9uIHJlZHVjZShyKSB7XG4gIHZhciB4ID0gbmV3IEZsb2F0NjRBcnJheSg2NCksIGk7XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHJbaV0gPSAwO1xuICBtb2RMKHIsIHgpO1xufVxuXG4vLyBOb3RlOiBkaWZmZXJlbmNlIGZyb20gQyAtIHNtbGVuIHJldHVybmVkLCBub3QgcGFzc2VkIGFzIGFyZ3VtZW50LlxuZnVuY3Rpb24gY3J5cHRvX3NpZ24oc20sIG0sIG4sIHNrKSB7XG4gIHZhciBkID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpLCByID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgaSwgaiwgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXTtcblxuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICB2YXIgc21sZW4gPSBuICsgNjQ7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHNtWzY0ICsgaV0gPSBtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc21bMzIgKyBpXSA9IGRbMzIgKyBpXTtcblxuICBjcnlwdG9faGFzaChyLCBzbS5zdWJhcnJheSgzMiksIG4rMzIpO1xuICByZWR1Y2Uocik7XG4gIHNjYWxhcmJhc2UocCwgcik7XG4gIHBhY2soc20sIHApO1xuXG4gIGZvciAoaSA9IDMyOyBpIDwgNjQ7IGkrKykgc21baV0gPSBza1tpXTtcbiAgY3J5cHRvX2hhc2goaCwgc20sIG4gKyA2NCk7XG4gIHJlZHVjZShoKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB4W2ldID0gcltpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykge1xuICAgICAgeFtpK2pdICs9IGhbaV0gKiBkW2pdO1xuICAgIH1cbiAgfVxuXG4gIG1vZEwoc20uc3ViYXJyYXkoMzIpLCB4KTtcbiAgcmV0dXJuIHNtbGVuO1xufVxuXG5mdW5jdGlvbiB1bnBhY2tuZWcociwgcCkge1xuICB2YXIgdCA9IGdmKCksIGNoayA9IGdmKCksIG51bSA9IGdmKCksXG4gICAgICBkZW4gPSBnZigpLCBkZW4yID0gZ2YoKSwgZGVuNCA9IGdmKCksXG4gICAgICBkZW42ID0gZ2YoKTtcblxuICBzZXQyNTUxOShyWzJdLCBnZjEpO1xuICB1bnBhY2syNTUxOShyWzFdLCBwKTtcbiAgUyhudW0sIHJbMV0pO1xuICBNKGRlbiwgbnVtLCBEKTtcbiAgWihudW0sIG51bSwgclsyXSk7XG4gIEEoZGVuLCByWzJdLCBkZW4pO1xuXG4gIFMoZGVuMiwgZGVuKTtcbiAgUyhkZW40LCBkZW4yKTtcbiAgTShkZW42LCBkZW40LCBkZW4yKTtcbiAgTSh0LCBkZW42LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG5cbiAgcG93MjUyMyh0LCB0KTtcbiAgTSh0LCB0LCBudW0pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0odCwgdCwgZGVuKTtcbiAgTShyWzBdLCB0LCBkZW4pO1xuXG4gIFMoY2hrLCByWzBdKTtcbiAgTShjaGssIGNoaywgZGVuKTtcbiAgaWYgKG5lcTI1NTE5KGNoaywgbnVtKSkgTShyWzBdLCByWzBdLCBJKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIHJldHVybiAtMTtcblxuICBpZiAocGFyMjU1MTkoclswXSkgPT09IChwWzMxXT4+NykpIFooclswXSwgZ2YwLCByWzBdKTtcblxuICBNKHJbM10sIHJbMF0sIHJbMV0pO1xuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fb3BlbihtLCBzbSwgbiwgcGspIHtcbiAgdmFyIGksIG1sZW47XG4gIHZhciB0ID0gbmV3IFVpbnQ4QXJyYXkoMzIpLCBoID0gbmV3IFVpbnQ4QXJyYXkoNjQpO1xuICB2YXIgcCA9IFtnZigpLCBnZigpLCBnZigpLCBnZigpXSxcbiAgICAgIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgbWxlbiA9IC0xO1xuICBpZiAobiA8IDY0KSByZXR1cm4gLTE7XG5cbiAgaWYgKHVucGFja25lZyhxLCBwaykpIHJldHVybiAtMTtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBtW2ldID0gc21baV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2krMzJdID0gcGtbaV07XG4gIGNyeXB0b19oYXNoKGgsIG0sIG4pO1xuICByZWR1Y2UoaCk7XG4gIHNjYWxhcm11bHQocCwgcSwgaCk7XG5cbiAgc2NhbGFyYmFzZShxLCBzbS5zdWJhcnJheSgzMikpO1xuICBhZGQocCwgcSk7XG4gIHBhY2sodCwgcCk7XG5cbiAgbiAtPSA2NDtcbiAgaWYgKGNyeXB0b192ZXJpZnlfMzIoc20sIDAsIHQsIDApKSB7XG4gICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IDA7XG4gICAgcmV0dXJuIC0xO1xuICB9XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2kgKyA2NF07XG4gIG1sZW4gPSBuO1xuICByZXR1cm4gbWxlbjtcbn1cblxudmFyIGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMgPSAyNCxcbiAgICBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTID0gMTYsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9OT05DRUJZVEVTID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTLFxuICAgIGNyeXB0b19ib3hfWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMsXG4gICAgY3J5cHRvX2JveF9CT1haRVJPQllURVMgPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyxcbiAgICBjcnlwdG9fc2lnbl9CWVRFUyA9IDY0LFxuICAgIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9TRUVEQllURVMgPSAzMixcbiAgICBjcnlwdG9faGFzaF9CWVRFUyA9IDY0O1xuXG5uYWNsLmxvd2xldmVsID0ge1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMDogY3J5cHRvX2NvcmVfaHNhbHNhMjAsXG4gIGNyeXB0b19zdHJlYW1feG9yOiBjcnlwdG9fc3RyZWFtX3hvcixcbiAgY3J5cHRvX3N0cmVhbTogY3J5cHRvX3N0cmVhbSxcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjogY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcixcbiAgY3J5cHRvX3N0cmVhbV9zYWxzYTIwOiBjcnlwdG9fc3RyZWFtX3NhbHNhMjAsXG4gIGNyeXB0b19vbmV0aW1lYXV0aDogY3J5cHRvX29uZXRpbWVhdXRoLFxuICBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5OiBjcnlwdG9fb25ldGltZWF1dGhfdmVyaWZ5LFxuICBjcnlwdG9fdmVyaWZ5XzE2OiBjcnlwdG9fdmVyaWZ5XzE2LFxuICBjcnlwdG9fdmVyaWZ5XzMyOiBjcnlwdG9fdmVyaWZ5XzMyLFxuICBjcnlwdG9fc2VjcmV0Ym94OiBjcnlwdG9fc2VjcmV0Ym94LFxuICBjcnlwdG9fc2VjcmV0Ym94X29wZW46IGNyeXB0b19zZWNyZXRib3hfb3BlbixcbiAgY3J5cHRvX3NjYWxhcm11bHQ6IGNyeXB0b19zY2FsYXJtdWx0LFxuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlOiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlLFxuICBjcnlwdG9fYm94X2JlZm9yZW5tOiBjcnlwdG9fYm94X2JlZm9yZW5tLFxuICBjcnlwdG9fYm94X2FmdGVybm06IGNyeXB0b19ib3hfYWZ0ZXJubSxcbiAgY3J5cHRvX2JveDogY3J5cHRvX2JveCxcbiAgY3J5cHRvX2JveF9vcGVuOiBjcnlwdG9fYm94X29wZW4sXG4gIGNyeXB0b19ib3hfa2V5cGFpcjogY3J5cHRvX2JveF9rZXlwYWlyLFxuICBjcnlwdG9faGFzaDogY3J5cHRvX2hhc2gsXG4gIGNyeXB0b19zaWduOiBjcnlwdG9fc2lnbixcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcjogY3J5cHRvX3NpZ25fa2V5cGFpcixcbiAgY3J5cHRvX3NpZ25fb3BlbjogY3J5cHRvX3NpZ25fb3BlbixcblxuICBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVM6IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzogY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyxcbiAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM6IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTLFxuICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTLFxuICBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM6IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyxcbiAgY3J5cHRvX2JveF9OT05DRUJZVEVTOiBjcnlwdG9fYm94X05PTkNFQllURVMsXG4gIGNyeXB0b19ib3hfWkVST0JZVEVTOiBjcnlwdG9fYm94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX2JveF9CT1haRVJPQllURVM6IGNyeXB0b19ib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2lnbl9CWVRFUzogY3J5cHRvX3NpZ25fQllURVMsXG4gIGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTOiBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM6IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTLFxuICBjcnlwdG9fc2lnbl9TRUVEQllURVM6IGNyeXB0b19zaWduX1NFRURCWVRFUyxcbiAgY3J5cHRvX2hhc2hfQllURVM6IGNyeXB0b19oYXNoX0JZVEVTXG59O1xuXG4vKiBIaWdoLWxldmVsIEFQSSAqL1xuXG5mdW5jdGlvbiBjaGVja0xlbmd0aHMoaywgbikge1xuICBpZiAoay5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIGtleSBzaXplJyk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBub25jZSBzaXplJyk7XG59XG5cbmZ1bmN0aW9uIGNoZWNrQm94TGVuZ3Rocyhwaywgc2spIHtcbiAgaWYgKHBrLmxlbmd0aCAhPT0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcHVibGljIGtleSBzaXplJyk7XG4gIGlmIChzay5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0FycmF5VHlwZXMoKSB7XG4gIHZhciB0LCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgIGlmICgodCA9IE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChhcmd1bWVudHNbaV0pKSAhPT0gJ1tvYmplY3QgVWludDhBcnJheV0nKVxuICAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ3VuZXhwZWN0ZWQgdHlwZSAnICsgdCArICcsIHVzZSBVaW50OEFycmF5Jyk7XG4gIH1cbn1cblxuZnVuY3Rpb24gY2xlYW51cChhcnIpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspIGFycltpXSA9IDA7XG59XG5cbi8vIFRPRE86IENvbXBsZXRlbHkgcmVtb3ZlIHRoaXMgaW4gdjAuMTUuXG5pZiAoIW5hY2wudXRpbCkge1xuICBuYWNsLnV0aWwgPSB7fTtcbiAgbmFjbC51dGlsLmRlY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlVVRGOCA9IG5hY2wudXRpbC5lbmNvZGVCYXNlNjQgPSBuYWNsLnV0aWwuZGVjb2RlQmFzZTY0ID0gZnVuY3Rpb24oKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzJyk7XG4gIH07XG59XG5cbm5hY2wucmFuZG9tQnl0ZXMgPSBmdW5jdGlvbihuKSB7XG4gIHZhciBiID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gIHJhbmRvbWJ5dGVzKGIsIG4pO1xuICByZXR1cm4gYjtcbn07XG5cbm5hY2wuc2VjcmV0Ym94ID0gZnVuY3Rpb24obXNnLCBub25jZSwga2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIG5vbmNlLCBrZXkpO1xuICBjaGVja0xlbmd0aHMoa2V5LCBub25jZSk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShtLmxlbmd0aCk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBtW2krY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVNdID0gbXNnW2ldO1xuICBjcnlwdG9fc2VjcmV0Ym94KGMsIG0sIG0ubGVuZ3RoLCBub25jZSwga2V5KTtcbiAgcmV0dXJuIGMuc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gub3BlbiA9IGZ1bmN0aW9uKGJveCwgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMoYm94LCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgYyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTICsgYm94Lmxlbmd0aCk7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkoYy5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGJveC5sZW5ndGg7IGkrKykgY1tpK2NyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTXSA9IGJveFtpXTtcbiAgaWYgKGMubGVuZ3RoIDwgMzIpIHJldHVybiBmYWxzZTtcbiAgaWYgKGNyeXB0b19zZWNyZXRib3hfb3BlbihtLCBjLCBjLmxlbmd0aCwgbm9uY2UsIGtleSkgIT09IDApIHJldHVybiBmYWxzZTtcbiAgcmV0dXJuIG0uc3ViYXJyYXkoY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMpO1xufTtcblxubmFjbC5zZWNyZXRib3gua2V5TGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTO1xubmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGggPSBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUztcblxubmFjbC5zY2FsYXJNdWx0ID0gZnVuY3Rpb24obiwgcCkge1xuICBjaGVja0FycmF5VHlwZXMobiwgcCk7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICBpZiAocC5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIHApO1xuICByZXR1cm4gcTtcbn07XG5cbm5hY2wuc2NhbGFyTXVsdC5iYXNlID0gZnVuY3Rpb24obikge1xuICBjaGVja0FycmF5VHlwZXMobik7XG4gIGlmIChuLmxlbmd0aCAhPT0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIG4gc2l6ZScpO1xuICB2YXIgcSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShxLCBuKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuc2NhbGFyTGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVM7XG5uYWNsLnNjYWxhck11bHQuZ3JvdXBFbGVtZW50TGVuZ3RoID0gY3J5cHRvX3NjYWxhcm11bHRfQllURVM7XG5cbm5hY2wuYm94ID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gobXNnLCBub25jZSwgayk7XG59O1xuXG5uYWNsLmJveC5iZWZvcmUgPSBmdW5jdGlvbihwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICBjaGVja0JveExlbmd0aHMocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICB2YXIgayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyk7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgcHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gaztcbn07XG5cbm5hY2wuYm94LmFmdGVyID0gbmFjbC5zZWNyZXRib3g7XG5cbm5hY2wuYm94Lm9wZW4gPSBmdW5jdGlvbihtc2csIG5vbmNlLCBwdWJsaWNLZXksIHNlY3JldEtleSkge1xuICB2YXIgayA9IG5hY2wuYm94LmJlZm9yZShwdWJsaWNLZXksIHNlY3JldEtleSk7XG4gIHJldHVybiBuYWNsLnNlY3JldGJveC5vcGVuKG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3gub3Blbi5hZnRlciA9IG5hY2wuc2VjcmV0Ym94Lm9wZW47XG5cbm5hY2wuYm94LmtleVBhaXIgPSBmdW5jdGlvbigpIHtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fYm94X2tleXBhaXIocGssIHNrKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuYm94LmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHBrLCBzZWNyZXRLZXkpO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLmJveC5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTO1xubmFjbC5ib3guc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUztcbm5hY2wuYm94LnNoYXJlZEtleUxlbmd0aCA9IGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUztcbm5hY2wuYm94Lm5vbmNlTGVuZ3RoID0gY3J5cHRvX2JveF9OT05DRUJZVEVTO1xubmFjbC5ib3gub3ZlcmhlYWRMZW5ndGggPSBuYWNsLnNlY3JldGJveC5vdmVyaGVhZExlbmd0aDtcblxubmFjbC5zaWduID0gZnVuY3Rpb24obXNnLCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgc2lnbmVkTXNnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMrbXNnLmxlbmd0aCk7XG4gIGNyeXB0b19zaWduKHNpZ25lZE1zZywgbXNnLCBtc2cubGVuZ3RoLCBzZWNyZXRLZXkpO1xuICByZXR1cm4gc2lnbmVkTXNnO1xufTtcblxubmFjbC5zaWduLm9wZW4gPSBmdW5jdGlvbihzaWduZWRNc2csIHB1YmxpY0tleSkge1xuICBpZiAoYXJndW1lbnRzLmxlbmd0aCAhPT0gMilcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ25hY2wuc2lnbi5vcGVuIGFjY2VwdHMgMiBhcmd1bWVudHM7IGRpZCB5b3UgbWVhbiB0byB1c2UgbmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeT8nKTtcbiAgY2hlY2tBcnJheVR5cGVzKHNpZ25lZE1zZywgcHVibGljS2V5KTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgdG1wID0gbmV3IFVpbnQ4QXJyYXkoc2lnbmVkTXNnLmxlbmd0aCk7XG4gIHZhciBtbGVuID0gY3J5cHRvX3NpZ25fb3Blbih0bXAsIHNpZ25lZE1zZywgc2lnbmVkTXNnLmxlbmd0aCwgcHVibGljS2V5KTtcbiAgaWYgKG1sZW4gPCAwKSByZXR1cm4gbnVsbDtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShtbGVuKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBtLmxlbmd0aDsgaSsrKSBtW2ldID0gdG1wW2ldO1xuICByZXR1cm4gbTtcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZCA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIHZhciBzaWduZWRNc2cgPSBuYWNsLnNpZ24obXNnLCBzZWNyZXRLZXkpO1xuICB2YXIgc2lnID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IHNpZy5sZW5ndGg7IGkrKykgc2lnW2ldID0gc2lnbmVkTXNnW2ldO1xuICByZXR1cm4gc2lnO1xufTtcblxubmFjbC5zaWduLmRldGFjaGVkLnZlcmlmeSA9IGZ1bmN0aW9uKG1zZywgc2lnLCBwdWJsaWNLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZywgc2lnLCBwdWJsaWNLZXkpO1xuICBpZiAoc2lnLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2lnbmF0dXJlIHNpemUnKTtcbiAgaWYgKHB1YmxpY0tleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICB2YXIgc20gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgY3J5cHRvX3NpZ25fQllURVM7IGkrKykgc21baV0gPSBzaWdbaV07XG4gIGZvciAoaSA9IDA7IGkgPCBtc2cubGVuZ3RoOyBpKyspIHNtW2krY3J5cHRvX3NpZ25fQllURVNdID0gbXNnW2ldO1xuICByZXR1cm4gKGNyeXB0b19zaWduX29wZW4obSwgc20sIHNtLmxlbmd0aCwgcHVibGljS2V5KSA+PSAwKTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgdmFyIHNrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5ID0gZnVuY3Rpb24oc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhzZWNyZXRLZXkpO1xuICBpZiAoc2VjcmV0S2V5Lmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVMpXG4gICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgc2VjcmV0IGtleSBzaXplJyk7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1BVQkxJQ0tFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBway5sZW5ndGg7IGkrKykgcGtbaV0gPSBzZWNyZXRLZXlbMzIraV07XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBuZXcgVWludDhBcnJheShzZWNyZXRLZXkpfTtcbn07XG5cbm5hY2wuc2lnbi5rZXlQYWlyLmZyb21TZWVkID0gZnVuY3Rpb24oc2VlZCkge1xuICBjaGVja0FycmF5VHlwZXMoc2VlZCk7XG4gIGlmIChzZWVkLmxlbmd0aCAhPT0gY3J5cHRvX3NpZ25fU0VFREJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlZWQgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAzMjsgaSsrKSBza1tpXSA9IHNlZWRbaV07XG4gIGNyeXB0b19zaWduX2tleXBhaXIocGssIHNrLCB0cnVlKTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IHNrfTtcbn07XG5cbm5hY2wuc2lnbi5wdWJsaWNLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWNyZXRLZXlMZW5ndGggPSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUztcbm5hY2wuc2lnbi5zZWVkTGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VFREJZVEVTO1xubmFjbC5zaWduLnNpZ25hdHVyZUxlbmd0aCA9IGNyeXB0b19zaWduX0JZVEVTO1xuXG5uYWNsLmhhc2ggPSBmdW5jdGlvbihtc2cpIHtcbiAgY2hlY2tBcnJheVR5cGVzKG1zZyk7XG4gIHZhciBoID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX2hhc2hfQllURVMpO1xuICBjcnlwdG9faGFzaChoLCBtc2csIG1zZy5sZW5ndGgpO1xuICByZXR1cm4gaDtcbn07XG5cbm5hY2wuaGFzaC5oYXNoTGVuZ3RoID0gY3J5cHRvX2hhc2hfQllURVM7XG5cbm5hY2wudmVyaWZ5ID0gZnVuY3Rpb24oeCwgeSkge1xuICBjaGVja0FycmF5VHlwZXMoeCwgeSk7XG4gIC8vIFplcm8gbGVuZ3RoIGFyZ3VtZW50cyBhcmUgY29uc2lkZXJlZCBub3QgZXF1YWwuXG4gIGlmICh4Lmxlbmd0aCA9PT0gMCB8fCB5Lmxlbmd0aCA9PT0gMCkgcmV0dXJuIGZhbHNlO1xuICBpZiAoeC5sZW5ndGggIT09IHkubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiAodm4oeCwgMCwgeSwgMCwgeC5sZW5ndGgpID09PSAwKSA/IHRydWUgOiBmYWxzZTtcbn07XG5cbm5hY2wuc2V0UFJORyA9IGZ1bmN0aW9uKGZuKSB7XG4gIHJhbmRvbWJ5dGVzID0gZm47XG59O1xuXG4oZnVuY3Rpb24oKSB7XG4gIC8vIEluaXRpYWxpemUgUFJORyBpZiBlbnZpcm9ubWVudCBwcm92aWRlcyBDU1BSTkcuXG4gIC8vIElmIG5vdCwgbWV0aG9kcyBjYWxsaW5nIHJhbmRvbWJ5dGVzIHdpbGwgdGhyb3cuXG4gIHZhciBjcnlwdG8gPSB0eXBlb2Ygc2VsZiAhPT0gJ3VuZGVmaW5lZCcgPyAoc2VsZi5jcnlwdG8gfHwgc2VsZi5tc0NyeXB0bykgOiBudWxsO1xuICBpZiAoY3J5cHRvICYmIGNyeXB0by5nZXRSYW5kb21WYWx1ZXMpIHtcbiAgICAvLyBCcm93c2Vycy5cbiAgICB2YXIgUVVPVEEgPSA2NTUzNjtcbiAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgdmFyIGksIHYgPSBuZXcgVWludDhBcnJheShuKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpICs9IFFVT1RBKSB7XG4gICAgICAgIGNyeXB0by5nZXRSYW5kb21WYWx1ZXModi5zdWJhcnJheShpLCBpICsgTWF0aC5taW4obiAtIGksIFFVT1RBKSkpO1xuICAgICAgfVxuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICBjbGVhbnVwKHYpO1xuICAgIH0pO1xuICB9IGVsc2UgaWYgKHR5cGVvZiByZXF1aXJlICE9PSAndW5kZWZpbmVkJykge1xuICAgIC8vIE5vZGUuanMuXG4gICAgY3J5cHRvID0gcmVxdWlyZSgnY3J5cHRvJyk7XG4gICAgaWYgKGNyeXB0byAmJiBjcnlwdG8ucmFuZG9tQnl0ZXMpIHtcbiAgICAgIG5hY2wuc2V0UFJORyhmdW5jdGlvbih4LCBuKSB7XG4gICAgICAgIHZhciBpLCB2ID0gY3J5cHRvLnJhbmRvbUJ5dGVzKG4pO1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gdltpXTtcbiAgICAgICAgY2xlYW51cCh2KTtcbiAgICAgIH0pO1xuICAgIH1cbiAgfVxufSkoKTtcblxufSkodHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgJiYgbW9kdWxlLmV4cG9ydHMgPyBtb2R1bGUuZXhwb3J0cyA6IChzZWxmLm5hY2wgPSBzZWxmLm5hY2wgfHwge30pKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi90d2VldG5hY2wvbmFjbC1mYXN0LmpzXG4vLyBtb2R1bGUgaWQgPSA5MlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyB2ZXJ0eCAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDkzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIChpZ25vcmVkKSAqL1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIGNyeXB0byAoaWdub3JlZClcbi8vIG1vZHVsZSBpZCA9IDk0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCJdLCJzb3VyY2VSb290IjoiIn0= \ No newline at end of file +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay91bml2ZXJzYWxNb2R1bGVEZWZpbml0aW9uIiwid2VicGFjazovLy93ZWJwYWNrL2Jvb3RzdHJhcCBmNmYxY2VkNGRkOTQyOWE2OTA4YyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRBcGlVcmxzLmpzIiwid2VicGFjazovLy8uL3NyYy9yZXF1ZXN0LmpzIiwid2VicGFjazovLy8uL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iczU4L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vZml2ZS1iZWxscy1jb25kaXRpb24vZGlzdC9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vdXRpbHMvY2NKc29uaWZ5LmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb3JlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2Rlc2NyaXB0b3JzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2dsb2JhbC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pcy1vYmplY3QuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L3Byb2Nlc3MvYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vKHdlYnBhY2spL2J1aWxkaW4vZ2xvYmFsLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2dldFN0YXR1cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9nZXRUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jbG9uZS9jbG9uZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19leHBvcnQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZmFpbHMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzLXNoYTMvc3JjL3NoYTMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzIiwid2VicGFjazovLy8uL3NyYy9FZDI1NTE5S2V5cGFpci5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvYmFzZVJlcXVlc3QuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vZ2V0QmxvY2suanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Nvbm5lY3Rpb24vbGlzdEJsb2Nrcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0T3V0cHV0cy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwid2VicGFjazovLy8uL3NyYy9jb25uZWN0aW9uL2xpc3RWb3Rlcy5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb2xsU3RhdHVzQW5kRmV0Y2hUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvY29ubmVjdGlvbi9wb3N0VHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL2Zvcm1hdF90ZXh0LmpzIiwid2VicGFjazovLy8uL3NyYy9zYW5pdGl6ZS5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc2hhMjU2SGFzaC5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9oYXNoVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VDcmVhdGVUcmFuc2FjdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUVkMjU1MTlDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VPdXRwdXQuanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VTaGEyNTZDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUaHJlc2hvbGRDb25kaXRpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwid2VicGFjazovLy8uL3NyYy90cmFuc2FjdGlvbi9zaWduVHJhbnNhY3Rpb24uanMiLCJ3ZWJwYWNrOi8vLy4vc3JjL3RyYW5zYWN0aW9uL3V0aWxzL2NjSnNvbkxvYWQuanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlLXgvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9iYXNlNjQtanMvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvZm4vYXJyYXkvaW5jbHVkZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYS1mdW5jdGlvbi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hZGQtdG8tdW5zY29wYWJsZXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fYW4tb2JqZWN0LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvZi5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZGVmaW5lZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kb20tY3JlYXRlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2VudW0tYnVnLWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faGFzLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faWU4LWRvbS1kZWZpbmUuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9faW9iamVjdC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtZHAuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMtaW50ZXJuYWwuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWtleXMuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LXBpZS5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fcHJvcGVydHktZGVzYy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19zaGFyZWQta2V5LmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1sZW5ndGguanMiLCJ3ZWJwYWNrOi8vLy4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8tcHJpbWl0aXZlLmpzIiwid2VicGFjazovLy8uL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3VpZC5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5vYmplY3QuZW50cmllcy5qcyIsIndlYnBhY2s6Ly8vLi9+L2RlY2FtZWxpemUvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9lczYtcHJvbWlzZS9kaXN0L2VzNi1wcm9taXNlLmpzIiwid2VicGFjazovLy8uL34vZmV0Y2gtcG9ueWZpbGwvYnVpbGQvZmV0Y2gtYnJvd3Nlci5qcyIsIndlYnBhY2s6Ly8vLi9+L2llZWU3NTQvaW5kZXguanMiLCJ3ZWJwYWNrOi8vLy4vfi9pc2FycmF5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbi1zdGFibGUtc3RyaW5naWZ5L2luZGV4LmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L2pzb25pZnkvbGliL3BhcnNlLmpzIiwid2VicGFjazovLy8uL34vanNvbmlmeS9saWIvc3RyaW5naWZ5LmpzIiwid2VicGFjazovLy8uL34vb2JqZWN0LWFzc2lnbi9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3F1ZXJ5LXN0cmluZy9pbmRleC5qcyIsIndlYnBhY2s6Ly8vLi9+L3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzIiwid2VicGFjazovLy8uL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qcyIsIndlYnBhY2s6Ly8vdmVydHggKGlnbm9yZWQpIiwid2VicGFjazovLy9jcnlwdG8gKGlnbm9yZWQpIl0sIm5hbWVzIjpbImdldEFwaVVybHMiLCJBUElfUEFUSCIsIkRFRkFVTFRfUkVRVUVTVF9DT05GSUciLCJjcmVkZW50aWFscyIsImhlYWRlcnMiLCJyZXF1ZXN0IiwidXJsIiwiY29uZmlnIiwib25seUpzb25SZXNwb25zZSIsInJlcXVlc3RDb25maWciLCJxdWVyeSIsInNhbml0aXplIiwiYXBpVXJsIiwianNvbkJvZHkiLCJQcm9taXNlIiwicmVqZWN0IiwiRXJyb3IiLCJiYXNlUmVxdWVzdCIsInRoZW4iLCJyZXMiLCJqc29uIiwiY2F0Y2giLCJlcnIiLCJjb25zb2xlIiwiZXJyb3IiLCJjY0pzb25pZnkiLCJmdWxmaWxsbWVudCIsImNvbmRpdGlvblVyaSIsImdldENvbmRpdGlvblVyaSIsInNlcmlhbGl6ZVVyaSIsImdldFR5cGVJZCIsImRldGFpbHMiLCJ0eXBlX2lkIiwiYml0bWFzayIsInByZWltYWdlIiwidG9TdHJpbmciLCJ0eXBlIiwiZ2V0Qml0bWFzayIsInRocmVzaG9sZCIsInN1YmNvbmRpdGlvbnMiLCJtYXAiLCJzdWJjb25kaXRpb24iLCJzdWJjb25kaXRpb25Kc29uIiwiYm9keSIsIndlaWdodCIsInNpZ25hdHVyZSIsInB1YmxpY19rZXkiLCJiYXNlNTgiLCJlbmNvZGUiLCJwdWJsaWNLZXkiLCJoYXNoIiwibWF4X2Z1bGZpbGxtZW50X2xlbmd0aCIsIm1heEZ1bGZpbGxtZW50TGVuZ3RoIiwibWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUiLCJtYWtlVHJhbnNhY3Rpb24iLCJvcGVyYXRpb24iLCJhc3NldCIsIm1ldGFkYXRhIiwib3V0cHV0cyIsImlucHV0cyIsInR4IiwiaWQiLCJoYXNoVHJhbnNhY3Rpb24iLCJzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmciLCJ0cmFuc2FjdGlvbiIsImNsb25lIiwic3RhYmxlU3RyaW5naWZ5IiwiYSIsImIiLCJrZXkiLCJnZXRTdGF0dXMiLCJ0eF9pZCIsImdldFRyYW5zYWN0aW9uIiwidHhJZCIsInVybFRlbXBsYXRlU3BlYyIsIm1ha2VJbnB1dFRlbXBsYXRlIiwicHVibGljS2V5cyIsImZ1bGZpbGxzIiwiRWQyNTUxOUtleXBhaXIiLCJzZWNyZXQiLCJrZXlQYWlyIiwic2VjcmV0SGFzaCIsInNoYTMiLCJzaGEzXzI1NiIsImNyZWF0ZSIsInVwZGF0ZSIsImFycmF5IiwibmFjbCIsInNpZ24iLCJmcm9tU2VlZCIsIlVpbnQ4QXJyYXkiLCJwcml2YXRlS2V5Iiwic2VjcmV0S2V5Iiwic2xpY2UiLCJmZXRjaCIsImZldGNoUG9ueWZpbGwiLCJmZXRjaENvbmZpZyIsImV4cGFuZGVkVXJsIiwiQXJyYXkiLCJpc0FycmF5IiwibGVuZ3RoIiwidnNwcmludGYiLCJPYmplY3QiLCJrZXlzIiwiZm9ybWF0VGV4dCIsInByb2Nlc3MiLCJlbnYiLCJOT0RFX0VOViIsIndhcm4iLCJzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0iLCJKU09OIiwic3RyaW5naWZ5Iiwib2siLCJnZXRCbG9jayIsImJsb2NrSWQiLCJsaXN0QmxvY2tzIiwic3RhdHVzIiwibGlzdE91dHB1dHMiLCJ1bnNwZW50IiwibGlzdFRyYW5zYWN0aW9ucyIsImFzc2V0X2lkIiwibGlzdFZvdGVzIiwiYmxvY2tfaWQiLCJyZXNvbHZlIiwidGltZXIiLCJzZXRJbnRlcnZhbCIsImxvZyIsImNsZWFySW50ZXJ2YWwiLCJwb3N0VHJhbnNhY3Rpb24iLCJtZXRob2QiLCJSZWdleCIsIlRFTVBMQVRFX0xJVEVSQUwiLCJLRVkiLCJLRVlfQUNDRVNTIiwiSU5ERVhfQUNDRVNTIiwicyIsImV4cGFuZGVkRm9ybWF0U3RyIiwiYXJndiIsInRlbXBsYXRlU3BlY09iaiIsInJlcGxhY2UiLCJtYXRjaCIsInJlcGxhY2VtZW50IiwiaW50ZXJwb2xhdGlvbkxlZnQiLCJ2YWx1ZSIsImN1ck1hdGNoIiwiZXhlYyIsInN1YnN0cmluZyIsIlN5bnRheEVycm9yIiwic3ByaW50ZiIsImZpbHRlckZyb21PYmplY3QiLCJvYmoiLCJmaWx0ZXIiLCJpc0luY2x1c2lvbiIsImFwcGx5RmlsdGVyT25PYmplY3QiLCJfIiwiY29yZUluY2x1ZGVzIiwiZmlsdGVyRm4iLCJmaWx0ZXJlZE9iaiIsImNvcmVPYmplY3RFbnRyaWVzIiwiZm9yRWFjaCIsInZhbCIsInNlbGVjdEZyb21PYmplY3QiLCJzaGEyNTZIYXNoIiwiZGF0YSIsImhleCIsInRyYW5zZm9ybSIsInRyYW5zZm9ybWVkS2V5c09iaiIsInJlZHVjZSIsInBhcmFtc09iaiIsInF1ZXJ5U3RyaW5nIiwibWFrZUNyZWF0ZVRyYW5zYWN0aW9uIiwiYXNzZXREZWZpbml0aW9uIiwiaXNzdWVycyIsImlzc3VlciIsIm1ha2VFZDI1NTE5Q29uZGl0aW9uIiwicHVibGljS2V5QnVmZmVyIiwiZGVjb2RlIiwiZWQyNTUxOUZ1bGZpbGxtZW50IiwiY2MiLCJFZDI1NTE5Iiwic2V0UHVibGljS2V5IiwibWFrZU91dHB1dCIsImNvbmRpdGlvbiIsImFtb3VudCIsImhhc093blByb3BlcnR5IiwibWFrZVNoYTI1NkNvbmRpdGlvbiIsInNoYTI1NkZ1bGZpbGxtZW50IiwiUHJlaW1hZ2VTaGEyNTYiLCJtYWtlVGhyZXNob2xkQ29uZGl0aW9uIiwidGhyZXNob2xkQ29uZGl0aW9uIiwiVGhyZXNob2xkU2hhMjU2IiwiYWRkU3ViZnVsZmlsbG1lbnQiLCJtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbiIsInVuc3BlbnRUcmFuc2FjdGlvbiIsImZ1bGZpbGxlZE91dHB1dHMiLCJvdXRwdXRJbmRleCIsImZ1bGZpbGxlZE91dHB1dCIsInRyYW5zYWN0aW9uTGluayIsInB1YmxpY19rZXlzIiwiYXNzZXRMaW5rIiwic2lnblRyYW5zYWN0aW9uIiwicHJpdmF0ZUtleXMiLCJzaWduZWRUeCIsImlucHV0IiwiaW5kZXgiLCJwcml2YXRlS2V5QnVmZmVyIiwic2VyaWFsaXplZFRyYW5zYWN0aW9uIiwiZnVsZmlsbG1lbnRVcmkiLCJjY0pzb25Mb2FkIiwiY29uZGl0aW9uSnNvbiIsIkNvbmRpdGlvbiIsInBhcnNlSW50Iiwic3ViZnVsZmlsbG1lbnRzIiwic3ViZnVsZmlsbG1lbnQiLCJhZGRTdWJjb25kaXRpb24iXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRCxPO0FDVkE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBLG1EQUEyQyxjQUFjOztBQUV6RDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLG1DQUEyQiwwQkFBMEIsRUFBRTtBQUN2RCx5Q0FBaUMsZUFBZTtBQUNoRDtBQUNBO0FBQ0E7O0FBRUE7QUFDQSw4REFBc0QsK0RBQStEOztBQUVySDtBQUNBOztBQUVBO0FBQ0E7Ozs7Ozs7OztBQ2hFZSxTQUFTQSxVQUFULENBQW9CQyxRQUFwQixFQUE4QjtBQUN6QyxXQUFPO0FBQ0gsa0JBQVVBLFdBQVcsUUFEbEI7QUFFSCx5QkFBaUJBLFdBQVcsb0JBRnpCO0FBR0gsbUJBQVdBLFdBQVcsU0FIbkI7QUFJSCxvQkFBWUEsV0FBVyxVQUpwQjtBQUtILHdCQUFnQkEsV0FBVyxjQUx4QjtBQU1ILCtCQUF1QkEsV0FBVyx1QkFOL0I7QUFPSCxpQkFBU0EsV0FBVztBQVBqQixLQUFQO0FBU0gsQzs7Ozs7Ozs7Ozs7O0FDVkQ7QUFDQTs7QUFHQSxJQUFNQyx5QkFBeUI7QUFDM0JDLGlCQUFhLFNBRGM7QUFFM0JDLGFBQVM7QUFDTCxrQkFBVTtBQURMO0FBRmtCLENBQS9COztBQU9BOzs7O0FBSWUsU0FBU0MsT0FBVCxDQUFpQkMsR0FBakIsRUFBMEQ7QUFBQSxRQUFwQ0MsTUFBb0MsdUVBQTNCLEVBQTJCO0FBQUEsUUFBdkJDLGdCQUF1Qix1RUFBTixJQUFNOztBQUNyRTtBQUNBLFFBQU1DLGdCQUFnQixTQUFjLEVBQWQsRUFBa0JQLHNCQUFsQixFQUEwQ0ssTUFBMUMsRUFBa0Q7QUFDcEVHLGVBQU9ILE9BQU9HLEtBQVAsSUFBZ0IsaUZBQUFDLENBQVNKLE9BQU9HLEtBQWhCO0FBRDZDLEtBQWxELENBQXRCO0FBR0EsUUFBSUUsU0FBU04sR0FBYjs7QUFFQSxRQUFJRyxjQUFjSSxRQUFsQixFQUE0QjtBQUN4Qkosc0JBQWNMLE9BQWQsR0FBd0IsU0FBYyxFQUFkLEVBQWtCSyxjQUFjTCxPQUFoQyxFQUF5QztBQUM3RCw0QkFBZ0I7QUFENkMsU0FBekMsQ0FBeEI7QUFHSDtBQUNELFFBQUksQ0FBQ0UsR0FBTCxFQUFVO0FBQ04sZUFBT1EsUUFBUUMsTUFBUixDQUFlLElBQUlDLEtBQUosQ0FBVSw4QkFBVixDQUFmLENBQVA7QUFDSDs7QUFFRCxXQUFPLG9GQUFBQyxDQUFZTCxNQUFaLEVBQW9CSCxhQUFwQixFQUNGUyxJQURFLENBQ0csVUFBQ0MsR0FBRCxFQUFTO0FBQ1gsZUFBT1gsbUJBQW1CVyxJQUFJQyxJQUFKLEVBQW5CLEdBQ0g7QUFDSUEsa0JBQU1ELElBQUlDLElBQUosRUFEVjtBQUVJZCxpQkFBS2EsSUFBSWI7QUFGYixTQURKO0FBS0gsS0FQRSxFQVFGZSxLQVJFLENBUUksVUFBQ0MsR0FBRCxFQUFTO0FBQ1pDLGdCQUFRQyxLQUFSLENBQWNGLEdBQWQ7QUFDQSxjQUFNQSxHQUFOO0FBQ0gsS0FYRSxDQUFQO0FBWUgsQzs7Ozs7OztBQzNDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQixtREFBbUQ7QUFDeEU7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG1CQUFtQixVQUFVO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQSwwQkFBMEI7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUEsdUNBQXVDLFNBQVM7QUFDaEQ7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsZUFBZSxpQkFBaUI7QUFDaEM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLGlCQUFpQjtBQUM5QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxnREFBZ0QsRUFBRTtBQUNsRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxpQkFBaUIsU0FBUztBQUMxQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EseUNBQXlDO0FBQ3pDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSx3QkFBd0IsZUFBZTtBQUN2QztBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQSx3QkFBd0IsUUFBUTtBQUNoQztBQUNBLHFCQUFxQixlQUFlO0FBQ3BDO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGlCQUFpQixZQUFZO0FBQzdCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQSxxQkFBcUIsU0FBUztBQUM5QjtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0EscUJBQXFCLFNBQVM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLGtCQUFrQjtBQUNuQztBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0EsbUJBQW1CLGNBQWM7QUFDakM7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLHVEQUF1RCxPQUFPO0FBQzlEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSx1REFBdUQsT0FBTztBQUM5RDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQSxrQkFBa0I7QUFDbEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNB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Z0IsQ0FBaEIsR0FBb0IsQ0FBQyxDQUFoQztBQUFBLEdBQXBCLENBQVA7QUFDSCxDOzs7Ozs7QUNoQkQsNkJBQTZCO0FBQzdCLHFDQUFxQyxnQzs7Ozs7O0FDRHJDO0FBQ0E7QUFDQSxpQ0FBaUMsUUFBUSxnQkFBZ0IsVUFBVSxHQUFHO0FBQ3RFLENBQUMsRTs7Ozs7O0FDSEQ7QUFDQTtBQUNBO0FBQ0EsdUNBQXVDLGdDOzs7Ozs7QUNIdkM7QUFDQTtBQUNBLEU7Ozs7OztBQ0ZBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxFOzs7Ozs7QUNMQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7QUFJQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsdUJBQXVCLHNCQUFzQjtBQUM3QztBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjtBQUNyQjs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUEscUNBQXFDOztBQUVyQztBQUNBO0FBQ0E7O0FBRUEsMkJBQTJCO0FBQzNCO0FBQ0E7QUFDQTtBQUNBLDRCQUE0QixVQUFVOzs7Ozs7O0FDdkx0Qzs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDOztBQUVEO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsNENBQTRDOztBQUU1Qzs7Ozs7Ozs7Ozs7QUNwQkE7QUFDQTs7QUFFQTs7Ozs7QUFLZSxTQUFTQyxTQUFULENBQW1CQyxLQUFuQixFQUEwQnRFLFFBQTFCLEVBQW9DO0FBQy9DLFdBQU8sZ0ZBQUFJLENBQVEsbUZBQUFMLENBQVdDLFFBQVgsRUFBcUIsVUFBckIsQ0FBUixFQUEwQztBQUN6Q1MsZUFBTztBQUNINkQ7QUFERztBQURrQyxLQUExQyxDQUFQO0FBS0gsQzs7Ozs7Ozs7OztBQ2REO0FBQ0E7O0FBRUE7Ozs7O0FBS2UsU0FBU0MsY0FBVCxDQUF3QkMsSUFBeEIsRUFBOEJ4RSxRQUE5QixFQUF3QztBQUNuRCxXQUFPLGdGQUFBSSxDQUFRLG1GQUFBTCxDQUFXQyxRQUFYLEVBQXFCLHFCQUFyQixDQUFSLEVBQXFEO0FBQ3BEeUUseUJBQWlCO0FBQ2JEO0FBRGE7QUFEbUMsS0FBckQsQ0FBUDtBQUtILEM7Ozs7Ozs7O0FDZGMsU0FBU0UsaUJBQVQsR0FBaUY7QUFBQSxRQUF0REMsVUFBc0QsdUVBQXpDLEVBQXlDO0FBQUEsUUFBckNDLFFBQXFDLHVFQUExQixJQUEwQjtBQUFBLFFBQXBCbkQsV0FBb0IsdUVBQU4sSUFBTTs7QUFDNUYsV0FBTztBQUNIQSxnQ0FERztBQUVIbUQsMEJBRkc7QUFHSCx5QkFBaUJEO0FBSGQsS0FBUDtBQUtILEM7Ozs7OztBQ05EO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLENBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxDQUFDO0FBQ0Q7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBLFNBQVM7QUFDVDtBQUNBLFNBQVM7QUFDVCxPQUFPO0FBQ1AsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFD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QTtBQUNBO0FBQ0E7QUFDQSxlQUFlLFFBQVE7QUFDdkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFD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RDtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7Ozs7Ozs7dURDWkE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxDQUFDLHFCQUFxQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsaUZBQWlGOztBQUVqRjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLDBCQUEwQixzQkFBc0I7O0FBRWhEO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsaUJBQWlCLFNBQVM7QUFDMUI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0EsQ0FBQztBQUNEO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUCxLQUFLO0FBQ0wsR0FBRztBQUNIO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLEtBQUs7O0FBRUw7QUFDQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEsaUJBQWlCLHdCQUF3QjtBQUN6QztBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQix1Q0FBdUM7QUFDeEQ7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBLEdBQUc7QUFDSDtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0E7QUFDQSxVQUFVLE1BQU07QUFDaEIsVUFBVSxPQUFPO0FBQ2pCO0FBQ0EsV0FBVyxRQUFRO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0wsR0FBRzs7QUFFSDtBQUNBO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHOztBQUVIO0FBQ0E7QUFDQSxHQUFHO0FBQ0g7QUFDQTtBQUNBLEdBQUc7QUFDSDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLFVBQVUsTUFBTTtBQUNoQjtBQUNBLFdBQVcsUUFBUTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTCxHQUFHO0FBQ0g7QUFDQTtBQUNBLHFCQUFxQixZQUFZO0FBQ2pDO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsR0FBRzs7QUFFSDtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBO0FBQ0EsVUFBVSxJQUFJO0FBQ2Q7QUFDQSxXQUFXLFFBQVE7QUFDbkI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7OztBQUdBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLEdBQUc7O0FBRUg7QUFDQTtBQUNBLEdBQUc7QUFDSDtBQUNBLEdBQUc7QUFDSDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWDtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBO0FBQ0EsR0FBRztBQUNIO0FBQ0EsR0FBRztBQUNIOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsR0FBRztBQUNIOztBQUVBO0FBQ0EsVUFBVSxTQUFTO0FBQ25CO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPO0FBQ1A7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7QUFDQTs7QUFFQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLE9BQU87QUFDUDtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWE7QUFDYjtBQUNBO0FBQ0EsZUFBZTtBQUNmO0FBQ0E7QUFDQTtBQUNBLFdBQVc7QUFDWCxTQUFTO0FBQ1Q7QUFDQTtBQUNBO0FBQ0E7QUFDQSxLQUFLO0FBQ0w7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDtBQUNBLEtBQUs7QUFDTDs7QUFFQTtBQUNBLFlBQVksU0FBUztBQUNyQixZQUFZLFNBQVM7QUFDckI7QUFDQSxhQUFhO0FBQ2I7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsS0FBSztBQUNMOztBQUVBO0FBQ0EsWUFBWSxTQUFTO0FBQ3JCO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsS0FBSztBQUNMO0FBQ0EsS0FBSztBQUNMO0FBQ0E7QUFDQSxTQUFTO0FBQ1Q7QUFDQTtBQUNBOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsU0FBUztBQUNUO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUEsQ0FBQztBQUNEOzs7Ozs7OztBQ3JvQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxPQUFPOztBQUVQO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYTtBQUNiO0FBQ0E7QUFDQSxXQUFXO0FBQ1g7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esc0JBQXNCO0FBQ3RCO0FBQ0E7O0FBRUE7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QTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsT0FBTztBQUNwQjtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsT0FBTztBQUN0QjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQSxpQkFBaUIsT0FBTztBQUN4QjtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsaUJBQWlCLE9BQU87QUFDeEI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTs7QUFFQSw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUMsOENBQThDO0FBQzlDO0FBQ0EsOENBQThDO0FBQzlDLDhDQUE4QztBQUM5Qyw4Q0FBOEM7QUFDOUM7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0Esc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3RELHNEQUFzRDtBQUN0RDtBQUNBLHNEQUFzRDtBQUN0RCxzREFBc0Q7QUFDdEQsc0RBQXNEO0FBQ3REOztBQUVBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxvQkFBb0I7QUFDcEI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxxQkFBcUI7O0FBRXJCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLG9CQUFvQjtBQUNwQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EscUJBQXFCOztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLFVBQVUsUUFBUTtBQUNsQjtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0EsYUFBYSxRQUFROztBQUVyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLE9BQU87QUFDcEI7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsVUFBVTtBQUN6QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsZUFBZSxXQUFXO0FBQzFCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsT0FBTztBQUNwQjtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBLGlCQUFpQixRQUFRO0FBQ3pCOztBQUVBO0FBQ0EsaUJBQWlCLFFBQVE7QUFDekI7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0Esc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRCxzQkFBc0IsMkJBQTJCO0FBQ2pELHNCQUFzQiwyQkFBMkI7QUFDakQsc0JBQXNCLDJCQUEyQjtBQUNqRDs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsYUFBYSxRQUFRO0FBQ3JCO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsTUFBTTtBQUNuQjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUEscUJBQXFCO0FBQ3JCLHFCQUFxQjs7QUFFckI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0QixzQkFBc0I7O0FBRXRCO0FBQ0E7QUFDQTs7QUFFQSxzQkFBc0I7QUFDdEIsc0JBQXNCOztBQUV0QjtBQUNBO0FBQ0E7O0FBRUEsc0JBQXNCO0FBQ3RCLHNCQUFzQjs7QUFFdEI7QUFDQTtBQUNBOztBQUVBLHNCQUFzQjtBQUN0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QUFFQTtBQUNBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGVBQWUsUUFBUTtBQUN2QjtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTs7QUFFQSxhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTs7QUFFQTtBQUNBO0FBQ0EsY0FBYyxTQUFTO0FBQ3ZCO0FBQ0EsZ0NBQWdDLE9BQU87QUFDdkM7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQjtBQUNBO0FBQ0E7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckI7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0EsYUFBYSxPQUFPO0FBQ3BCLGFBQWEsUUFBUTs7QUFFckI7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsY0FBYyxRQUFRO0FBQ3RCO0FBQ0E7O0FBRUEsYUFBYSxRQUFRO0FBQ3JCLGFBQWEsUUFBUTtBQUNyQixhQUFhLFFBQVE7QUFDckIsZUFBZSxRQUFRO0FBQ3ZCO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBOztBQUVBOztB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O0FBQzFCO0FBQ0EsT0FBTztBQUNQO0FBQ0E7QUFDQSxDQUFDOztBQUVELENBQUMsaUdBQWlHOzs7Ozs7O0FDbjFFbEcsZTs7Ozs7O0FDQUEsZSIsImZpbGUiOiJidW5kbGUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIoZnVuY3Rpb24gd2VicGFja1VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24ocm9vdCwgZmFjdG9yeSkge1xuXHRpZih0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSA9PT0gJ29iamVjdCcpXG5cdFx0bW9kdWxlLmV4cG9ydHMgPSBmYWN0b3J5KCk7XG5cdGVsc2UgaWYodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKVxuXHRcdGRlZmluZShbXSwgZmFjdG9yeSk7XG5cdGVsc2UgaWYodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKVxuXHRcdGV4cG9ydHNbXCJqcy1iaWdjaGFpbmRiLWRyaXZlclwiXSA9IGZhY3RvcnkoKTtcblx0ZWxzZVxuXHRcdHJvb3RbXCJqcy1iaWdjaGFpbmRiLWRyaXZlclwiXSA9IGZhY3RvcnkoKTtcbn0pKHRoaXMsIGZ1bmN0aW9uKCkge1xucmV0dXJuIFxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL3VuaXZlcnNhbE1vZHVsZURlZmluaXRpb24iLCIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDk1KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBmNmYxY2VkNGRkOTQyOWE2OTA4YyIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldEFwaVVybHMoQVBJX1BBVEgpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICAnYmxvY2tzJzogQVBJX1BBVEggKyAnYmxvY2tzJyxcbiAgICAgICAgJ2Jsb2Nrc19kZXRhaWwnOiBBUElfUEFUSCArICdibG9ja3MvJShibG9ja0lkKXMnLFxuICAgICAgICAnb3V0cHV0cyc6IEFQSV9QQVRIICsgJ291dHB1dHMnLFxuICAgICAgICAnc3RhdHVzZXMnOiBBUElfUEFUSCArICdzdGF0dXNlcycsXG4gICAgICAgICd0cmFuc2FjdGlvbnMnOiBBUElfUEFUSCArICd0cmFuc2FjdGlvbnMnLFxuICAgICAgICAndHJhbnNhY3Rpb25zX2RldGFpbCc6IEFQSV9QQVRIICsgJ3RyYW5zYWN0aW9ucy8lKHR4SWQpcycsXG4gICAgICAgICd2b3Rlcyc6IEFQSV9QQVRIICsgJ3ZvdGVzJ1xuICAgIH07XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0QXBpVXJscy5qcyIsImltcG9ydCBiYXNlUmVxdWVzdCBmcm9tICcuL2Jhc2VSZXF1ZXN0JztcbmltcG9ydCBzYW5pdGl6ZSBmcm9tICcuL3Nhbml0aXplJztcblxuXG5jb25zdCBERUZBVUxUX1JFUVVFU1RfQ09ORklHID0ge1xuICAgIGNyZWRlbnRpYWxzOiAnaW5jbHVkZScsXG4gICAgaGVhZGVyczoge1xuICAgICAgICAnQWNjZXB0JzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgfVxufTtcblxuLyoqXG4gKiBTbWFsbCB3cmFwcGVyIGFyb3VuZCBqcy11dGlsaXR5LWJlbHQncyByZXF1ZXN0IHRoYXQgcHJvdmlkZXMgdXJsIHJlc29sdmluZywgZGVmYXVsdCBzZXR0aW5ncywgYW5kXG4gKiByZXNwb25zZSBoYW5kbGluZy5cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcmVxdWVzdCh1cmwsIGNvbmZpZyA9IHt9LCBvbmx5SnNvblJlc3BvbnNlPXRydWUpIHtcbiAgICAvLyBMb2FkIGRlZmF1bHQgZmV0Y2ggY29uZmlndXJhdGlvbiBhbmQgcmVtb3ZlIGFueSBmYWxzeSBxdWVyeSBwYXJhbWV0ZXJzXG4gICAgY29uc3QgcmVxdWVzdENvbmZpZyA9IE9iamVjdC5hc3NpZ24oe30sIERFRkFVTFRfUkVRVUVTVF9DT05GSUcsIGNvbmZpZywge1xuICAgICAgICBxdWVyeTogY29uZmlnLnF1ZXJ5ICYmIHNhbml0aXplKGNvbmZpZy5xdWVyeSlcbiAgICB9KTtcbiAgICBsZXQgYXBpVXJsID0gdXJsO1xuXG4gICAgaWYgKHJlcXVlc3RDb25maWcuanNvbkJvZHkpIHtcbiAgICAgICAgcmVxdWVzdENvbmZpZy5oZWFkZXJzID0gT2JqZWN0LmFzc2lnbih7fSwgcmVxdWVzdENvbmZpZy5oZWFkZXJzLCB7XG4gICAgICAgICAgICAnQ29udGVudC1UeXBlJzogJ2FwcGxpY2F0aW9uL2pzb24nXG4gICAgICAgIH0pO1xuICAgIH1cbiAgICBpZiAoIXVybCkge1xuICAgICAgICByZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCdSZXF1ZXN0IHdhcyBub3QgZ2l2ZW4gYSB1cmwuJykpO1xuICAgIH1cblxuICAgIHJldHVybiBiYXNlUmVxdWVzdChhcGlVcmwsIHJlcXVlc3RDb25maWcpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIHJldHVybiBvbmx5SnNvblJlc3BvbnNlID8gcmVzLmpzb24oKSA6XG4gICAgICAgICAgICAgICAge1xuICAgICAgICAgICAgICAgICAgICBqc29uOiByZXMuanNvbigpLFxuICAgICAgICAgICAgICAgICAgICB1cmw6IHJlcy51cmxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICB9KVxuICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgY29uc29sZS5lcnJvcihlcnIpO1xuICAgICAgICAgICAgdGhyb3cgZXJyO1xuICAgICAgICB9KTtcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3JlcXVlc3QuanMiLCIvKiFcbiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLlxuICpcbiAqIEBhdXRob3IgICBGZXJvc3MgQWJvdWtoYWRpamVoIDxmZXJvc3NAZmVyb3NzLm9yZz4gPGh0dHA6Ly9mZXJvc3Mub3JnPlxuICogQGxpY2Vuc2UgIE1JVFxuICovXG4vKiBlc2xpbnQtZGlzYWJsZSBuby1wcm90byAqL1xuXG4ndXNlIHN0cmljdCdcblxudmFyIGJhc2U2NCA9IHJlcXVpcmUoJ2Jhc2U2NC1qcycpXG52YXIgaWVlZTc1NCA9IHJlcXVpcmUoJ2llZWU3NTQnKVxudmFyIGlzQXJyYXkgPSByZXF1aXJlKCdpc2FycmF5JylcblxuZXhwb3J0cy5CdWZmZXIgPSBCdWZmZXJcbmV4cG9ydHMuU2xvd0J1ZmZlciA9IFNsb3dCdWZmZXJcbmV4cG9ydHMuSU5TUEVDVF9NQVhfQllURVMgPSA1MFxuXG4vKipcbiAqIElmIGBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVGA6XG4gKiAgID09PSB0cnVlICAgIFVzZSBVaW50OEFycmF5IGltcGxlbWVudGF0aW9uIChmYXN0ZXN0KVxuICogICA9PT0gZmFsc2UgICBVc2UgT2JqZWN0IGltcGxlbWVudGF0aW9uIChtb3N0IGNvbXBhdGlibGUsIGV2ZW4gSUU2KVxuICpcbiAqIEJyb3dzZXJzIHRoYXQgc3VwcG9ydCB0eXBlZCBhcnJheXMgYXJlIElFIDEwKywgRmlyZWZveCA0KywgQ2hyb21lIDcrLCBTYWZhcmkgNS4xKyxcbiAqIE9wZXJhIDExLjYrLCBpT1MgNC4yKy5cbiAqXG4gKiBEdWUgdG8gdmFyaW91cyBicm93c2VyIGJ1Z3MsIHNvbWV0aW1lcyB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uIHdpbGwgYmUgdXNlZCBldmVuXG4gKiB3aGVuIHRoZSBicm93c2VyIHN1cHBvcnRzIHR5cGVkIGFycmF5cy5cbiAqXG4gKiBOb3RlOlxuICpcbiAqICAgLSBGaXJlZm94IDQtMjkgbGFja3Mgc3VwcG9ydCBmb3IgYWRkaW5nIG5ldyBwcm9wZXJ0aWVzIHRvIGBVaW50OEFycmF5YCBpbnN0YW5jZXMsXG4gKiAgICAgU2VlOiBodHRwczovL2J1Z3ppbGxhLm1vemlsbGEub3JnL3Nob3dfYnVnLmNnaT9pZD02OTU0MzguXG4gKlxuICogICAtIENocm9tZSA5LTEwIGlzIG1pc3NpbmcgdGhlIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24uXG4gKlxuICogICAtIElFMTAgaGFzIGEgYnJva2VuIGBUeXBlZEFycmF5LnByb3RvdHlwZS5zdWJhcnJheWAgZnVuY3Rpb24gd2hpY2ggcmV0dXJucyBhcnJheXMgb2ZcbiAqICAgICBpbmNvcnJlY3QgbGVuZ3RoIGluIHNvbWUgc2l0dWF0aW9ucy5cblxuICogV2UgZGV0ZWN0IHRoZXNlIGJ1Z2d5IGJyb3dzZXJzIGFuZCBzZXQgYEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUYCB0byBgZmFsc2VgIHNvIHRoZXlcbiAqIGdldCB0aGUgT2JqZWN0IGltcGxlbWVudGF0aW9uLCB3aGljaCBpcyBzbG93ZXIgYnV0IGJlaGF2ZXMgY29ycmVjdGx5LlxuICovXG5CdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCA9IGdsb2JhbC5UWVBFRF9BUlJBWV9TVVBQT1JUICE9PSB1bmRlZmluZWRcbiAgPyBnbG9iYWwuVFlQRURfQVJSQVlfU1VQUE9SVFxuICA6IHR5cGVkQXJyYXlTdXBwb3J0KClcblxuLypcbiAqIEV4cG9ydCBrTWF4TGVuZ3RoIGFmdGVyIHR5cGVkIGFycmF5IHN1cHBvcnQgaXMgZGV0ZXJtaW5lZC5cbiAqL1xuZXhwb3J0cy5rTWF4TGVuZ3RoID0ga01heExlbmd0aCgpXG5cbmZ1bmN0aW9uIHR5cGVkQXJyYXlTdXBwb3J0ICgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgYXJyID0gbmV3IFVpbnQ4QXJyYXkoMSlcbiAgICBhcnIuX19wcm90b19fID0ge19fcHJvdG9fXzogVWludDhBcnJheS5wcm90b3R5cGUsIGZvbzogZnVuY3Rpb24gKCkgeyByZXR1cm4gNDIgfX1cbiAgICByZXR1cm4gYXJyLmZvbygpID09PSA0MiAmJiAvLyB0eXBlZCBhcnJheSBpbnN0YW5jZXMgY2FuIGJlIGF1Z21lbnRlZFxuICAgICAgICB0eXBlb2YgYXJyLnN1YmFycmF5ID09PSAnZnVuY3Rpb24nICYmIC8vIGNocm9tZSA5LTEwIGxhY2sgYHN1YmFycmF5YFxuICAgICAgICBhcnIuc3ViYXJyYXkoMSwgMSkuYnl0ZUxlbmd0aCA9PT0gMCAvLyBpZTEwIGhhcyBicm9rZW4gYHN1YmFycmF5YFxuICB9IGNhdGNoIChlKSB7XG4gICAgcmV0dXJuIGZhbHNlXG4gIH1cbn1cblxuZnVuY3Rpb24ga01heExlbmd0aCAoKSB7XG4gIHJldHVybiBCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVFxuICAgID8gMHg3ZmZmZmZmZlxuICAgIDogMHgzZmZmZmZmZlxufVxuXG5mdW5jdGlvbiBjcmVhdGVCdWZmZXIgKHRoYXQsIGxlbmd0aCkge1xuICBpZiAoa01heExlbmd0aCgpIDwgbGVuZ3RoKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0ludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoJylcbiAgfVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gbmV3IFVpbnQ4QXJyYXkobGVuZ3RoKVxuICAgIHRoYXQuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIC8vIEZhbGxiYWNrOiBSZXR1cm4gYW4gb2JqZWN0IGluc3RhbmNlIG9mIHRoZSBCdWZmZXIgY2xhc3NcbiAgICBpZiAodGhhdCA9PT0gbnVsbCkge1xuICAgICAgdGhhdCA9IG5ldyBCdWZmZXIobGVuZ3RoKVxuICAgIH1cbiAgICB0aGF0Lmxlbmd0aCA9IGxlbmd0aFxuICB9XG5cbiAgcmV0dXJuIHRoYXRcbn1cblxuLyoqXG4gKiBUaGUgQnVmZmVyIGNvbnN0cnVjdG9yIHJldHVybnMgaW5zdGFuY2VzIG9mIGBVaW50OEFycmF5YCB0aGF0IGhhdmUgdGhlaXJcbiAqIHByb3RvdHlwZSBjaGFuZ2VkIHRvIGBCdWZmZXIucHJvdG90eXBlYC4gRnVydGhlcm1vcmUsIGBCdWZmZXJgIGlzIGEgc3ViY2xhc3Mgb2ZcbiAqIGBVaW50OEFycmF5YCwgc28gdGhlIHJldHVybmVkIGluc3RhbmNlcyB3aWxsIGhhdmUgYWxsIHRoZSBub2RlIGBCdWZmZXJgIG1ldGhvZHNcbiAqIGFuZCB0aGUgYFVpbnQ4QXJyYXlgIG1ldGhvZHMuIFNxdWFyZSBicmFja2V0IG5vdGF0aW9uIHdvcmtzIGFzIGV4cGVjdGVkIC0tIGl0XG4gKiByZXR1cm5zIGEgc2luZ2xlIG9jdGV0LlxuICpcbiAqIFRoZSBgVWludDhBcnJheWAgcHJvdG90eXBlIHJlbWFpbnMgdW5tb2RpZmllZC5cbiAqL1xuXG5mdW5jdGlvbiBCdWZmZXIgKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIGlmICghQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQgJiYgISh0aGlzIGluc3RhbmNlb2YgQnVmZmVyKSkge1xuICAgIHJldHVybiBuZXcgQnVmZmVyKGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgLy8gQ29tbW9uIGNhc2UuXG4gIGlmICh0eXBlb2YgYXJnID09PSAnbnVtYmVyJykge1xuICAgIGlmICh0eXBlb2YgZW5jb2RpbmdPck9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcihcbiAgICAgICAgJ0lmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nJ1xuICAgICAgKVxuICAgIH1cbiAgICByZXR1cm4gYWxsb2NVbnNhZmUodGhpcywgYXJnKVxuICB9XG4gIHJldHVybiBmcm9tKHRoaXMsIGFyZywgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxufVxuXG5CdWZmZXIucG9vbFNpemUgPSA4MTkyIC8vIG5vdCB1c2VkIGJ5IHRoaXMgaW1wbGVtZW50YXRpb25cblxuLy8gVE9ETzogTGVnYWN5LCBub3QgbmVlZGVkIGFueW1vcmUuIFJlbW92ZSBpbiBuZXh0IG1ham9yIHZlcnNpb24uXG5CdWZmZXIuX2F1Z21lbnQgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIGFyci5fX3Byb3RvX18gPSBCdWZmZXIucHJvdG90eXBlXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gZnJvbSAodGhhdCwgdmFsdWUsIGVuY29kaW5nT3JPZmZzZXQsIGxlbmd0aCkge1xuICBpZiAodHlwZW9mIHZhbHVlID09PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpXG4gIH1cblxuICBpZiAodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJiB2YWx1ZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSB7XG4gICAgcmV0dXJuIGZyb21BcnJheUJ1ZmZlcih0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKVxuICB9XG5cbiAgaWYgKHR5cGVvZiB2YWx1ZSA9PT0gJ3N0cmluZycpIHtcbiAgICByZXR1cm4gZnJvbVN0cmluZyh0aGF0LCB2YWx1ZSwgZW5jb2RpbmdPck9mZnNldClcbiAgfVxuXG4gIHJldHVybiBmcm9tT2JqZWN0KHRoYXQsIHZhbHVlKVxufVxuXG4vKipcbiAqIEZ1bmN0aW9uYWxseSBlcXVpdmFsZW50IHRvIEJ1ZmZlcihhcmcsIGVuY29kaW5nKSBidXQgdGhyb3dzIGEgVHlwZUVycm9yXG4gKiBpZiB2YWx1ZSBpcyBhIG51bWJlci5cbiAqIEJ1ZmZlci5mcm9tKHN0clssIGVuY29kaW5nXSlcbiAqIEJ1ZmZlci5mcm9tKGFycmF5KVxuICogQnVmZmVyLmZyb20oYnVmZmVyKVxuICogQnVmZmVyLmZyb20oYXJyYXlCdWZmZXJbLCBieXRlT2Zmc2V0WywgbGVuZ3RoXV0pXG4gKiovXG5CdWZmZXIuZnJvbSA9IGZ1bmN0aW9uICh2YWx1ZSwgZW5jb2RpbmdPck9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBmcm9tKG51bGwsIHZhbHVlLCBlbmNvZGluZ09yT2Zmc2V0LCBsZW5ndGgpXG59XG5cbmlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICBCdWZmZXIucHJvdG90eXBlLl9fcHJvdG9fXyA9IFVpbnQ4QXJyYXkucHJvdG90eXBlXG4gIEJ1ZmZlci5fX3Byb3RvX18gPSBVaW50OEFycmF5XG4gIGlmICh0eXBlb2YgU3ltYm9sICE9PSAndW5kZWZpbmVkJyAmJiBTeW1ib2wuc3BlY2llcyAmJlxuICAgICAgQnVmZmVyW1N5bWJvbC5zcGVjaWVzXSA9PT0gQnVmZmVyKSB7XG4gICAgLy8gRml4IHN1YmFycmF5KCkgaW4gRVMyMDE2LiBTZWU6IGh0dHBzOi8vZ2l0aHViLmNvbS9mZXJvc3MvYnVmZmVyL3B1bGwvOTdcbiAgICBPYmplY3QuZGVmaW5lUHJvcGVydHkoQnVmZmVyLCBTeW1ib2wuc3BlY2llcywge1xuICAgICAgdmFsdWU6IG51bGwsXG4gICAgICBjb25maWd1cmFibGU6IHRydWVcbiAgICB9KVxuICB9XG59XG5cbmZ1bmN0aW9uIGFzc2VydFNpemUgKHNpemUpIHtcbiAgaWYgKHR5cGVvZiBzaXplICE9PSAnbnVtYmVyJykge1xuICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3QgYmUgYSBudW1iZXInKVxuICB9IGVsc2UgaWYgKHNpemUgPCAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1wic2l6ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJylcbiAgfVxufVxuXG5mdW5jdGlvbiBhbGxvYyAodGhhdCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpIHtcbiAgYXNzZXJ0U2l6ZShzaXplKVxuICBpZiAoc2l6ZSA8PSAwKSB7XG4gICAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxuICB9XG4gIGlmIChmaWxsICE9PSB1bmRlZmluZWQpIHtcbiAgICAvLyBPbmx5IHBheSBhdHRlbnRpb24gdG8gZW5jb2RpbmcgaWYgaXQncyBhIHN0cmluZy4gVGhpc1xuICAgIC8vIHByZXZlbnRzIGFjY2lkZW50YWxseSBzZW5kaW5nIGluIGEgbnVtYmVyIHRoYXQgd291bGRcbiAgICAvLyBiZSBpbnRlcnByZXR0ZWQgYXMgYSBzdGFydCBvZmZzZXQuXG4gICAgcmV0dXJuIHR5cGVvZiBlbmNvZGluZyA9PT0gJ3N0cmluZydcbiAgICAgID8gY3JlYXRlQnVmZmVyKHRoYXQsIHNpemUpLmZpbGwoZmlsbCwgZW5jb2RpbmcpXG4gICAgICA6IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKS5maWxsKGZpbGwpXG4gIH1cbiAgcmV0dXJuIGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplKVxufVxuXG4vKipcbiAqIENyZWF0ZXMgYSBuZXcgZmlsbGVkIEJ1ZmZlciBpbnN0YW5jZS5cbiAqIGFsbG9jKHNpemVbLCBmaWxsWywgZW5jb2RpbmddXSlcbiAqKi9cbkJ1ZmZlci5hbGxvYyA9IGZ1bmN0aW9uIChzaXplLCBmaWxsLCBlbmNvZGluZykge1xuICByZXR1cm4gYWxsb2MobnVsbCwgc2l6ZSwgZmlsbCwgZW5jb2RpbmcpXG59XG5cbmZ1bmN0aW9uIGFsbG9jVW5zYWZlICh0aGF0LCBzaXplKSB7XG4gIGFzc2VydFNpemUoc2l6ZSlcbiAgdGhhdCA9IGNyZWF0ZUJ1ZmZlcih0aGF0LCBzaXplIDwgMCA/IDAgOiBjaGVja2VkKHNpemUpIHwgMClcbiAgaWYgKCFCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2l6ZTsgKytpKSB7XG4gICAgICB0aGF0W2ldID0gMFxuICAgIH1cbiAgfVxuICByZXR1cm4gdGhhdFxufVxuXG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gQnVmZmVyKG51bSksIGJ5IGRlZmF1bHQgY3JlYXRlcyBhIG5vbi16ZXJvLWZpbGxlZCBCdWZmZXIgaW5zdGFuY2UuXG4gKiAqL1xuQnVmZmVyLmFsbG9jVW5zYWZlID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG4vKipcbiAqIEVxdWl2YWxlbnQgdG8gU2xvd0J1ZmZlcihudW0pLCBieSBkZWZhdWx0IGNyZWF0ZXMgYSBub24temVyby1maWxsZWQgQnVmZmVyIGluc3RhbmNlLlxuICovXG5CdWZmZXIuYWxsb2NVbnNhZmVTbG93ID0gZnVuY3Rpb24gKHNpemUpIHtcbiAgcmV0dXJuIGFsbG9jVW5zYWZlKG51bGwsIHNpemUpXG59XG5cbmZ1bmN0aW9uIGZyb21TdHJpbmcgKHRoYXQsIHN0cmluZywgZW5jb2RpbmcpIHtcbiAgaWYgKHR5cGVvZiBlbmNvZGluZyAhPT0gJ3N0cmluZycgfHwgZW5jb2RpbmcgPT09ICcnKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgfVxuXG4gIGlmICghQnVmZmVyLmlzRW5jb2RpbmcoZW5jb2RpbmcpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKVxuICB9XG5cbiAgdmFyIGxlbmd0aCA9IGJ5dGVMZW5ndGgoc3RyaW5nLCBlbmNvZGluZykgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuXG4gIHZhciBhY3R1YWwgPSB0aGF0LndyaXRlKHN0cmluZywgZW5jb2RpbmcpXG5cbiAgaWYgKGFjdHVhbCAhPT0gbGVuZ3RoKSB7XG4gICAgLy8gV3JpdGluZyBhIGhleCBzdHJpbmcsIGZvciBleGFtcGxlLCB0aGF0IGNvbnRhaW5zIGludmFsaWQgY2hhcmFjdGVycyB3aWxsXG4gICAgLy8gY2F1c2UgZXZlcnl0aGluZyBhZnRlciB0aGUgZmlyc3QgaW52YWxpZCBjaGFyYWN0ZXIgdG8gYmUgaWdub3JlZC4gKGUuZy5cbiAgICAvLyAnYWJ4eGNkJyB3aWxsIGJlIHRyZWF0ZWQgYXMgJ2FiJylcbiAgICB0aGF0ID0gdGhhdC5zbGljZSgwLCBhY3R1YWwpXG4gIH1cblxuICByZXR1cm4gdGhhdFxufVxuXG5mdW5jdGlvbiBmcm9tQXJyYXlMaWtlICh0aGF0LCBhcnJheSkge1xuICB2YXIgbGVuZ3RoID0gYXJyYXkubGVuZ3RoIDwgMCA/IDAgOiBjaGVja2VkKGFycmF5Lmxlbmd0aCkgfCAwXG4gIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuZ3RoKVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgaSArPSAxKSB7XG4gICAgdGhhdFtpXSA9IGFycmF5W2ldICYgMjU1XG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbUFycmF5QnVmZmVyICh0aGF0LCBhcnJheSwgYnl0ZU9mZnNldCwgbGVuZ3RoKSB7XG4gIGFycmF5LmJ5dGVMZW5ndGggLy8gdGhpcyB0aHJvd3MgaWYgYGFycmF5YCBpcyBub3QgYSB2YWxpZCBBcnJheUJ1ZmZlclxuXG4gIGlmIChieXRlT2Zmc2V0IDwgMCB8fCBhcnJheS5ieXRlTGVuZ3RoIDwgYnl0ZU9mZnNldCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdcXCdvZmZzZXRcXCcgaXMgb3V0IG9mIGJvdW5kcycpXG4gIH1cblxuICBpZiAoYXJyYXkuYnl0ZUxlbmd0aCA8IGJ5dGVPZmZzZXQgKyAobGVuZ3RoIHx8IDApKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ1xcJ2xlbmd0aFxcJyBpcyBvdXQgb2YgYm91bmRzJylcbiAgfVxuXG4gIGlmIChieXRlT2Zmc2V0ID09PSB1bmRlZmluZWQgJiYgbGVuZ3RoID09PSB1bmRlZmluZWQpIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5KVxuICB9IGVsc2UgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgYXJyYXkgPSBuZXcgVWludDhBcnJheShhcnJheSwgYnl0ZU9mZnNldClcbiAgfSBlbHNlIHtcbiAgICBhcnJheSA9IG5ldyBVaW50OEFycmF5KGFycmF5LCBieXRlT2Zmc2V0LCBsZW5ndGgpXG4gIH1cblxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBSZXR1cm4gYW4gYXVnbWVudGVkIGBVaW50OEFycmF5YCBpbnN0YW5jZSwgZm9yIGJlc3QgcGVyZm9ybWFuY2VcbiAgICB0aGF0ID0gYXJyYXlcbiAgICB0aGF0Ll9fcHJvdG9fXyA9IEJ1ZmZlci5wcm90b3R5cGVcbiAgfSBlbHNlIHtcbiAgICAvLyBGYWxsYmFjazogUmV0dXJuIGFuIG9iamVjdCBpbnN0YW5jZSBvZiB0aGUgQnVmZmVyIGNsYXNzXG4gICAgdGhhdCA9IGZyb21BcnJheUxpa2UodGhhdCwgYXJyYXkpXG4gIH1cbiAgcmV0dXJuIHRoYXRcbn1cblxuZnVuY3Rpb24gZnJvbU9iamVjdCAodGhhdCwgb2JqKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIob2JqKSkge1xuICAgIHZhciBsZW4gPSBjaGVja2VkKG9iai5sZW5ndGgpIHwgMFxuICAgIHRoYXQgPSBjcmVhdGVCdWZmZXIodGhhdCwgbGVuKVxuXG4gICAgaWYgKHRoYXQubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gdGhhdFxuICAgIH1cblxuICAgIG9iai5jb3B5KHRoYXQsIDAsIDAsIGxlbilcbiAgICByZXR1cm4gdGhhdFxuICB9XG5cbiAgaWYgKG9iaikge1xuICAgIGlmICgodHlwZW9mIEFycmF5QnVmZmVyICE9PSAndW5kZWZpbmVkJyAmJlxuICAgICAgICBvYmouYnVmZmVyIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpIHx8ICdsZW5ndGgnIGluIG9iaikge1xuICAgICAgaWYgKHR5cGVvZiBvYmoubGVuZ3RoICE9PSAnbnVtYmVyJyB8fCBpc25hbihvYmoubGVuZ3RoKSkge1xuICAgICAgICByZXR1cm4gY3JlYXRlQnVmZmVyKHRoYXQsIDApXG4gICAgICB9XG4gICAgICByZXR1cm4gZnJvbUFycmF5TGlrZSh0aGF0LCBvYmopXG4gICAgfVxuXG4gICAgaWYgKG9iai50eXBlID09PSAnQnVmZmVyJyAmJiBpc0FycmF5KG9iai5kYXRhKSkge1xuICAgICAgcmV0dXJuIGZyb21BcnJheUxpa2UodGhhdCwgb2JqLmRhdGEpXG4gICAgfVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcignRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LicpXG59XG5cbmZ1bmN0aW9uIGNoZWNrZWQgKGxlbmd0aCkge1xuICAvLyBOb3RlOiBjYW5ub3QgdXNlIGBsZW5ndGggPCBrTWF4TGVuZ3RoKClgIGhlcmUgYmVjYXVzZSB0aGF0IGZhaWxzIHdoZW5cbiAgLy8gbGVuZ3RoIGlzIE5hTiAod2hpY2ggaXMgb3RoZXJ3aXNlIGNvZXJjZWQgdG8gemVyby4pXG4gIGlmIChsZW5ndGggPj0ga01heExlbmd0aCgpKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0F0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gJyArXG4gICAgICAgICAgICAgICAgICAgICAgICAgJ3NpemU6IDB4JyArIGtNYXhMZW5ndGgoKS50b1N0cmluZygxNikgKyAnIGJ5dGVzJylcbiAgfVxuICByZXR1cm4gbGVuZ3RoIHwgMFxufVxuXG5mdW5jdGlvbiBTbG93QnVmZmVyIChsZW5ndGgpIHtcbiAgaWYgKCtsZW5ndGggIT0gbGVuZ3RoKSB7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgZXFlcWVxXG4gICAgbGVuZ3RoID0gMFxuICB9XG4gIHJldHVybiBCdWZmZXIuYWxsb2MoK2xlbmd0aClcbn1cblxuQnVmZmVyLmlzQnVmZmVyID0gZnVuY3Rpb24gaXNCdWZmZXIgKGIpIHtcbiAgcmV0dXJuICEhKGIgIT0gbnVsbCAmJiBiLl9pc0J1ZmZlcilcbn1cblxuQnVmZmVyLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlIChhLCBiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGEpIHx8ICFCdWZmZXIuaXNCdWZmZXIoYikpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzJylcbiAgfVxuXG4gIGlmIChhID09PSBiKSByZXR1cm4gMFxuXG4gIHZhciB4ID0gYS5sZW5ndGhcbiAgdmFyIHkgPSBiLmxlbmd0aFxuXG4gIGZvciAodmFyIGkgPSAwLCBsZW4gPSBNYXRoLm1pbih4LCB5KTsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKGFbaV0gIT09IGJbaV0pIHtcbiAgICAgIHggPSBhW2ldXG4gICAgICB5ID0gYltpXVxuICAgICAgYnJlYWtcbiAgICB9XG4gIH1cblxuICBpZiAoeCA8IHkpIHJldHVybiAtMVxuICBpZiAoeSA8IHgpIHJldHVybiAxXG4gIHJldHVybiAwXG59XG5cbkJ1ZmZlci5pc0VuY29kaW5nID0gZnVuY3Rpb24gaXNFbmNvZGluZyAoZW5jb2RpbmcpIHtcbiAgc3dpdGNoIChTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKCkpIHtcbiAgICBjYXNlICdoZXgnOlxuICAgIGNhc2UgJ3V0ZjgnOlxuICAgIGNhc2UgJ3V0Zi04JzpcbiAgICBjYXNlICdhc2NpaSc6XG4gICAgY2FzZSAnbGF0aW4xJzpcbiAgICBjYXNlICdiaW5hcnknOlxuICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgY2FzZSAndWNzMic6XG4gICAgY2FzZSAndWNzLTInOlxuICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgIHJldHVybiB0cnVlXG4gICAgZGVmYXVsdDpcbiAgICAgIHJldHVybiBmYWxzZVxuICB9XG59XG5cbkJ1ZmZlci5jb25jYXQgPSBmdW5jdGlvbiBjb25jYXQgKGxpc3QsIGxlbmd0aCkge1xuICBpZiAoIWlzQXJyYXkobGlzdCkpIHtcbiAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKVxuICB9XG5cbiAgaWYgKGxpc3QubGVuZ3RoID09PSAwKSB7XG4gICAgcmV0dXJuIEJ1ZmZlci5hbGxvYygwKVxuICB9XG5cbiAgdmFyIGlcbiAgaWYgKGxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgbGVuZ3RoID0gMFxuICAgIGZvciAoaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgKytpKSB7XG4gICAgICBsZW5ndGggKz0gbGlzdFtpXS5sZW5ndGhcbiAgICB9XG4gIH1cblxuICB2YXIgYnVmZmVyID0gQnVmZmVyLmFsbG9jVW5zYWZlKGxlbmd0aClcbiAgdmFyIHBvcyA9IDBcbiAgZm9yIChpID0gMDsgaSA8IGxpc3QubGVuZ3RoOyArK2kpIHtcbiAgICB2YXIgYnVmID0gbGlzdFtpXVxuICAgIGlmICghQnVmZmVyLmlzQnVmZmVyKGJ1ZikpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1wibGlzdFwiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpXG4gICAgfVxuICAgIGJ1Zi5jb3B5KGJ1ZmZlciwgcG9zKVxuICAgIHBvcyArPSBidWYubGVuZ3RoXG4gIH1cbiAgcmV0dXJuIGJ1ZmZlclxufVxuXG5mdW5jdGlvbiBieXRlTGVuZ3RoIChzdHJpbmcsIGVuY29kaW5nKSB7XG4gIGlmIChCdWZmZXIuaXNCdWZmZXIoc3RyaW5nKSkge1xuICAgIHJldHVybiBzdHJpbmcubGVuZ3RoXG4gIH1cbiAgaWYgKHR5cGVvZiBBcnJheUJ1ZmZlciAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIEFycmF5QnVmZmVyLmlzVmlldyA9PT0gJ2Z1bmN0aW9uJyAmJlxuICAgICAgKEFycmF5QnVmZmVyLmlzVmlldyhzdHJpbmcpIHx8IHN0cmluZyBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkge1xuICAgIHJldHVybiBzdHJpbmcuYnl0ZUxlbmd0aFxuICB9XG4gIGlmICh0eXBlb2Ygc3RyaW5nICE9PSAnc3RyaW5nJykge1xuICAgIHN0cmluZyA9ICcnICsgc3RyaW5nXG4gIH1cblxuICB2YXIgbGVuID0gc3RyaW5nLmxlbmd0aFxuICBpZiAobGVuID09PSAwKSByZXR1cm4gMFxuXG4gIC8vIFVzZSBhIGZvciBsb29wIHRvIGF2b2lkIHJlY3Vyc2lvblxuICB2YXIgbG93ZXJlZENhc2UgPSBmYWxzZVxuICBmb3IgKDs7KSB7XG4gICAgc3dpdGNoIChlbmNvZGluZykge1xuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgY2FzZSAnbGF0aW4xJzpcbiAgICAgIGNhc2UgJ2JpbmFyeSc6XG4gICAgICAgIHJldHVybiBsZW5cbiAgICAgIGNhc2UgJ3V0ZjgnOlxuICAgICAgY2FzZSAndXRmLTgnOlxuICAgICAgY2FzZSB1bmRlZmluZWQ6XG4gICAgICAgIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aFxuICAgICAgY2FzZSAndWNzMic6XG4gICAgICBjYXNlICd1Y3MtMic6XG4gICAgICBjYXNlICd1dGYxNmxlJzpcbiAgICAgIGNhc2UgJ3V0Zi0xNmxlJzpcbiAgICAgICAgcmV0dXJuIGxlbiAqIDJcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBsZW4gPj4+IDFcbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIHJldHVybiBiYXNlNjRUb0J5dGVzKHN0cmluZykubGVuZ3RoXG4gICAgICBkZWZhdWx0OlxuICAgICAgICBpZiAobG93ZXJlZENhc2UpIHJldHVybiB1dGY4VG9CeXRlcyhzdHJpbmcpLmxlbmd0aCAvLyBhc3N1bWUgdXRmOFxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuQnVmZmVyLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5cbmZ1bmN0aW9uIHNsb3dUb1N0cmluZyAoZW5jb2RpbmcsIHN0YXJ0LCBlbmQpIHtcbiAgdmFyIGxvd2VyZWRDYXNlID0gZmFsc2VcblxuICAvLyBObyBuZWVkIHRvIHZlcmlmeSB0aGF0IFwidGhpcy5sZW5ndGggPD0gTUFYX1VJTlQzMlwiIHNpbmNlIGl0J3MgYSByZWFkLW9ubHlcbiAgLy8gcHJvcGVydHkgb2YgYSB0eXBlZCBhcnJheS5cblxuICAvLyBUaGlzIGJlaGF2ZXMgbmVpdGhlciBsaWtlIFN0cmluZyBub3IgVWludDhBcnJheSBpbiB0aGF0IHdlIHNldCBzdGFydC9lbmRcbiAgLy8gdG8gdGhlaXIgdXBwZXIvbG93ZXIgYm91bmRzIGlmIHRoZSB2YWx1ZSBwYXNzZWQgaXMgb3V0IG9mIHJhbmdlLlxuICAvLyB1bmRlZmluZWQgaXMgaGFuZGxlZCBzcGVjaWFsbHkgYXMgcGVyIEVDTUEtMjYyIDZ0aCBFZGl0aW9uLFxuICAvLyBTZWN0aW9uIDEzLjMuMy43IFJ1bnRpbWUgU2VtYW50aWNzOiBLZXllZEJpbmRpbmdJbml0aWFsaXphdGlvbi5cbiAgaWYgKHN0YXJ0ID09PSB1bmRlZmluZWQgfHwgc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgPSAwXG4gIH1cbiAgLy8gUmV0dXJuIGVhcmx5IGlmIHN0YXJ0ID4gdGhpcy5sZW5ndGguIERvbmUgaGVyZSB0byBwcmV2ZW50IHBvdGVudGlhbCB1aW50MzJcbiAgLy8gY29lcmNpb24gZmFpbCBiZWxvdy5cbiAgaWYgKHN0YXJ0ID4gdGhpcy5sZW5ndGgpIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCB8fCBlbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIGVuZCA9IHRoaXMubGVuZ3RoXG4gIH1cblxuICBpZiAoZW5kIDw9IDApIHtcbiAgICByZXR1cm4gJydcbiAgfVxuXG4gIC8vIEZvcmNlIGNvZXJzaW9uIHRvIHVpbnQzMi4gVGhpcyB3aWxsIGFsc28gY29lcmNlIGZhbHNleS9OYU4gdmFsdWVzIHRvIDAuXG4gIGVuZCA+Pj49IDBcbiAgc3RhcnQgPj4+PSAwXG5cbiAgaWYgKGVuZCA8PSBzdGFydCkge1xuICAgIHJldHVybiAnJ1xuICB9XG5cbiAgaWYgKCFlbmNvZGluZykgZW5jb2RpbmcgPSAndXRmOCdcblxuICB3aGlsZSAodHJ1ZSkge1xuICAgIHN3aXRjaCAoZW5jb2RpbmcpIHtcbiAgICAgIGNhc2UgJ2hleCc6XG4gICAgICAgIHJldHVybiBoZXhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICd1dGY4JzpcbiAgICAgIGNhc2UgJ3V0Zi04JzpcbiAgICAgICAgcmV0dXJuIHV0ZjhTbGljZSh0aGlzLCBzdGFydCwgZW5kKVxuXG4gICAgICBjYXNlICdhc2NpaSc6XG4gICAgICAgIHJldHVybiBhc2NpaVNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ2xhdGluMSc6XG4gICAgICBjYXNlICdiaW5hcnknOlxuICAgICAgICByZXR1cm4gbGF0aW4xU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgY2FzZSAnYmFzZTY0JzpcbiAgICAgICAgcmV0dXJuIGJhc2U2NFNsaWNlKHRoaXMsIHN0YXJ0LCBlbmQpXG5cbiAgICAgIGNhc2UgJ3VjczInOlxuICAgICAgY2FzZSAndWNzLTInOlxuICAgICAgY2FzZSAndXRmMTZsZSc6XG4gICAgICBjYXNlICd1dGYtMTZsZSc6XG4gICAgICAgIHJldHVybiB1dGYxNmxlU2xpY2UodGhpcywgc3RhcnQsIGVuZClcblxuICAgICAgZGVmYXVsdDpcbiAgICAgICAgaWYgKGxvd2VyZWRDYXNlKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdVbmtub3duIGVuY29kaW5nOiAnICsgZW5jb2RpbmcpXG4gICAgICAgIGVuY29kaW5nID0gKGVuY29kaW5nICsgJycpLnRvTG93ZXJDYXNlKClcbiAgICAgICAgbG93ZXJlZENhc2UgPSB0cnVlXG4gICAgfVxuICB9XG59XG5cbi8vIFRoZSBwcm9wZXJ0eSBpcyB1c2VkIGJ5IGBCdWZmZXIuaXNCdWZmZXJgIGFuZCBgaXMtYnVmZmVyYCAoaW4gU2FmYXJpIDUtNykgdG8gZGV0ZWN0XG4vLyBCdWZmZXIgaW5zdGFuY2VzLlxuQnVmZmVyLnByb3RvdHlwZS5faXNCdWZmZXIgPSB0cnVlXG5cbmZ1bmN0aW9uIHN3YXAgKGIsIG4sIG0pIHtcbiAgdmFyIGkgPSBiW25dXG4gIGJbbl0gPSBiW21dXG4gIGJbbV0gPSBpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc3dhcDE2ID0gZnVuY3Rpb24gc3dhcDE2ICgpIHtcbiAgdmFyIGxlbiA9IHRoaXMubGVuZ3RoXG4gIGlmIChsZW4gJSAyICE9PSAwKSB7XG4gICAgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0J1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAxNi1iaXRzJylcbiAgfVxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSArPSAyKSB7XG4gICAgc3dhcCh0aGlzLCBpLCBpICsgMSlcbiAgfVxuICByZXR1cm4gdGhpc1xufVxuXG5CdWZmZXIucHJvdG90eXBlLnN3YXAzMiA9IGZ1bmN0aW9uIHN3YXAzMiAoKSB7XG4gIHZhciBsZW4gPSB0aGlzLmxlbmd0aFxuICBpZiAobGVuICUgNCAhPT0gMCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMzItYml0cycpXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW47IGkgKz0gNCkge1xuICAgIHN3YXAodGhpcywgaSwgaSArIDMpXG4gICAgc3dhcCh0aGlzLCBpICsgMSwgaSArIDIpXG4gIH1cbiAgcmV0dXJuIHRoaXNcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5zd2FwNjQgPSBmdW5jdGlvbiBzd2FwNjQgKCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgaWYgKGxlbiAlIDggIT09IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDY0LWJpdHMnKVxuICB9XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDgpIHtcbiAgICBzd2FwKHRoaXMsIGksIGkgKyA3KVxuICAgIHN3YXAodGhpcywgaSArIDEsIGkgKyA2KVxuICAgIHN3YXAodGhpcywgaSArIDIsIGkgKyA1KVxuICAgIHN3YXAodGhpcywgaSArIDMsIGkgKyA0KVxuICB9XG4gIHJldHVybiB0aGlzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZyAoKSB7XG4gIHZhciBsZW5ndGggPSB0aGlzLmxlbmd0aCB8IDBcbiAgaWYgKGxlbmd0aCA9PT0gMCkgcmV0dXJuICcnXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAwKSByZXR1cm4gdXRmOFNsaWNlKHRoaXMsIDAsIGxlbmd0aClcbiAgcmV0dXJuIHNsb3dUb1N0cmluZy5hcHBseSh0aGlzLCBhcmd1bWVudHMpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuZXF1YWxzID0gZnVuY3Rpb24gZXF1YWxzIChiKSB7XG4gIGlmICghQnVmZmVyLmlzQnVmZmVyKGIpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyJylcbiAgaWYgKHRoaXMgPT09IGIpIHJldHVybiB0cnVlXG4gIHJldHVybiBCdWZmZXIuY29tcGFyZSh0aGlzLCBiKSA9PT0gMFxufVxuXG5CdWZmZXIucHJvdG90eXBlLmluc3BlY3QgPSBmdW5jdGlvbiBpbnNwZWN0ICgpIHtcbiAgdmFyIHN0ciA9ICcnXG4gIHZhciBtYXggPSBleHBvcnRzLklOU1BFQ1RfTUFYX0JZVEVTXG4gIGlmICh0aGlzLmxlbmd0aCA+IDApIHtcbiAgICBzdHIgPSB0aGlzLnRvU3RyaW5nKCdoZXgnLCAwLCBtYXgpLm1hdGNoKC8uezJ9L2cpLmpvaW4oJyAnKVxuICAgIGlmICh0aGlzLmxlbmd0aCA+IG1heCkgc3RyICs9ICcgLi4uICdcbiAgfVxuICByZXR1cm4gJzxCdWZmZXIgJyArIHN0ciArICc+J1xufVxuXG5CdWZmZXIucHJvdG90eXBlLmNvbXBhcmUgPSBmdW5jdGlvbiBjb21wYXJlICh0YXJnZXQsIHN0YXJ0LCBlbmQsIHRoaXNTdGFydCwgdGhpc0VuZCkge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcih0YXJnZXQpKSB7XG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlcicpXG4gIH1cblxuICBpZiAoc3RhcnQgPT09IHVuZGVmaW5lZCkge1xuICAgIHN0YXJ0ID0gMFxuICB9XG4gIGlmIChlbmQgPT09IHVuZGVmaW5lZCkge1xuICAgIGVuZCA9IHRhcmdldCA/IHRhcmdldC5sZW5ndGggOiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgdGhpc1N0YXJ0ID0gMFxuICB9XG4gIGlmICh0aGlzRW5kID09PSB1bmRlZmluZWQpIHtcbiAgICB0aGlzRW5kID0gdGhpcy5sZW5ndGhcbiAgfVxuXG4gIGlmIChzdGFydCA8IDAgfHwgZW5kID4gdGFyZ2V0Lmxlbmd0aCB8fCB0aGlzU3RhcnQgPCAwIHx8IHRoaXNFbmQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdvdXQgb2YgcmFuZ2UgaW5kZXgnKVxuICB9XG5cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kICYmIHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAwXG4gIH1cbiAgaWYgKHRoaXNTdGFydCA+PSB0aGlzRW5kKSB7XG4gICAgcmV0dXJuIC0xXG4gIH1cbiAgaWYgKHN0YXJ0ID49IGVuZCkge1xuICAgIHJldHVybiAxXG4gIH1cblxuICBzdGFydCA+Pj49IDBcbiAgZW5kID4+Pj0gMFxuICB0aGlzU3RhcnQgPj4+PSAwXG4gIHRoaXNFbmQgPj4+PSAwXG5cbiAgaWYgKHRoaXMgPT09IHRhcmdldCkgcmV0dXJuIDBcblxuICB2YXIgeCA9IHRoaXNFbmQgLSB0aGlzU3RhcnRcbiAgdmFyIHkgPSBlbmQgLSBzdGFydFxuICB2YXIgbGVuID0gTWF0aC5taW4oeCwgeSlcblxuICB2YXIgdGhpc0NvcHkgPSB0aGlzLnNsaWNlKHRoaXNTdGFydCwgdGhpc0VuZClcbiAgdmFyIHRhcmdldENvcHkgPSB0YXJnZXQuc2xpY2Uoc3RhcnQsIGVuZClcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgaWYgKHRoaXNDb3B5W2ldICE9PSB0YXJnZXRDb3B5W2ldKSB7XG4gICAgICB4ID0gdGhpc0NvcHlbaV1cbiAgICAgIHkgPSB0YXJnZXRDb3B5W2ldXG4gICAgICBicmVha1xuICAgIH1cbiAgfVxuXG4gIGlmICh4IDwgeSkgcmV0dXJuIC0xXG4gIGlmICh5IDwgeCkgcmV0dXJuIDFcbiAgcmV0dXJuIDBcbn1cblxuLy8gRmluZHMgZWl0aGVyIHRoZSBmaXJzdCBpbmRleCBvZiBgdmFsYCBpbiBgYnVmZmVyYCBhdCBvZmZzZXQgPj0gYGJ5dGVPZmZzZXRgLFxuLy8gT1IgdGhlIGxhc3QgaW5kZXggb2YgYHZhbGAgaW4gYGJ1ZmZlcmAgYXQgb2Zmc2V0IDw9IGBieXRlT2Zmc2V0YC5cbi8vXG4vLyBBcmd1bWVudHM6XG4vLyAtIGJ1ZmZlciAtIGEgQnVmZmVyIHRvIHNlYXJjaFxuLy8gLSB2YWwgLSBhIHN0cmluZywgQnVmZmVyLCBvciBudW1iZXJcbi8vIC0gYnl0ZU9mZnNldCAtIGFuIGluZGV4IGludG8gYGJ1ZmZlcmA7IHdpbGwgYmUgY2xhbXBlZCB0byBhbiBpbnQzMlxuLy8gLSBlbmNvZGluZyAtIGFuIG9wdGlvbmFsIGVuY29kaW5nLCByZWxldmFudCBpcyB2YWwgaXMgYSBzdHJpbmdcbi8vIC0gZGlyIC0gdHJ1ZSBmb3IgaW5kZXhPZiwgZmFsc2UgZm9yIGxhc3RJbmRleE9mXG5mdW5jdGlvbiBiaWRpcmVjdGlvbmFsSW5kZXhPZiAoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nLCBkaXIpIHtcbiAgLy8gRW1wdHkgYnVmZmVyIG1lYW5zIG5vIG1hdGNoXG4gIGlmIChidWZmZXIubGVuZ3RoID09PSAwKSByZXR1cm4gLTFcblxuICAvLyBOb3JtYWxpemUgYnl0ZU9mZnNldFxuICBpZiAodHlwZW9mIGJ5dGVPZmZzZXQgPT09ICdzdHJpbmcnKSB7XG4gICAgZW5jb2RpbmcgPSBieXRlT2Zmc2V0XG4gICAgYnl0ZU9mZnNldCA9IDBcbiAgfSBlbHNlIGlmIChieXRlT2Zmc2V0ID4gMHg3ZmZmZmZmZikge1xuICAgIGJ5dGVPZmZzZXQgPSAweDdmZmZmZmZmXG4gIH0gZWxzZSBpZiAoYnl0ZU9mZnNldCA8IC0weDgwMDAwMDAwKSB7XG4gICAgYnl0ZU9mZnNldCA9IC0weDgwMDAwMDAwXG4gIH1cbiAgYnl0ZU9mZnNldCA9ICtieXRlT2Zmc2V0ICAvLyBDb2VyY2UgdG8gTnVtYmVyLlxuICBpZiAoaXNOYU4oYnl0ZU9mZnNldCkpIHtcbiAgICAvLyBieXRlT2Zmc2V0OiBpdCBpdCdzIHVuZGVmaW5lZCwgbnVsbCwgTmFOLCBcImZvb1wiLCBldGMsIHNlYXJjaCB3aG9sZSBidWZmZXJcbiAgICBieXRlT2Zmc2V0ID0gZGlyID8gMCA6IChidWZmZXIubGVuZ3RoIC0gMSlcbiAgfVxuXG4gIC8vIE5vcm1hbGl6ZSBieXRlT2Zmc2V0OiBuZWdhdGl2ZSBvZmZzZXRzIHN0YXJ0IGZyb20gdGhlIGVuZCBvZiB0aGUgYnVmZmVyXG4gIGlmIChieXRlT2Zmc2V0IDwgMCkgYnl0ZU9mZnNldCA9IGJ1ZmZlci5sZW5ndGggKyBieXRlT2Zmc2V0XG4gIGlmIChieXRlT2Zmc2V0ID49IGJ1ZmZlci5sZW5ndGgpIHtcbiAgICBpZiAoZGlyKSByZXR1cm4gLTFcbiAgICBlbHNlIGJ5dGVPZmZzZXQgPSBidWZmZXIubGVuZ3RoIC0gMVxuICB9IGVsc2UgaWYgKGJ5dGVPZmZzZXQgPCAwKSB7XG4gICAgaWYgKGRpcikgYnl0ZU9mZnNldCA9IDBcbiAgICBlbHNlIHJldHVybiAtMVxuICB9XG5cbiAgLy8gTm9ybWFsaXplIHZhbFxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ3N0cmluZycpIHtcbiAgICB2YWwgPSBCdWZmZXIuZnJvbSh2YWwsIGVuY29kaW5nKVxuICB9XG5cbiAgLy8gRmluYWxseSwgc2VhcmNoIGVpdGhlciBpbmRleE9mIChpZiBkaXIgaXMgdHJ1ZSkgb3IgbGFzdEluZGV4T2ZcbiAgaWYgKEJ1ZmZlci5pc0J1ZmZlcih2YWwpKSB7XG4gICAgLy8gU3BlY2lhbCBjYXNlOiBsb29raW5nIGZvciBlbXB0eSBzdHJpbmcvYnVmZmVyIGFsd2F5cyBmYWlsc1xuICAgIGlmICh2YWwubGVuZ3RoID09PSAwKSB7XG4gICAgICByZXR1cm4gLTFcbiAgICB9XG4gICAgcmV0dXJuIGFycmF5SW5kZXhPZihidWZmZXIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcilcbiAgfSBlbHNlIGlmICh0eXBlb2YgdmFsID09PSAnbnVtYmVyJykge1xuICAgIHZhbCA9IHZhbCAmIDB4RkYgLy8gU2VhcmNoIGZvciBhIGJ5dGUgdmFsdWUgWzAtMjU1XVxuICAgIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCAmJlxuICAgICAgICB0eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgaWYgKGRpcikge1xuICAgICAgICByZXR1cm4gVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGJ1ZmZlciwgdmFsLCBieXRlT2Zmc2V0KVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgcmV0dXJuIFVpbnQ4QXJyYXkucHJvdG90eXBlLmxhc3RJbmRleE9mLmNhbGwoYnVmZmVyLCB2YWwsIGJ5dGVPZmZzZXQpXG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBhcnJheUluZGV4T2YoYnVmZmVyLCBbIHZhbCBdLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZGlyKVxuICB9XG5cbiAgdGhyb3cgbmV3IFR5cGVFcnJvcigndmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyJylcbn1cblxuZnVuY3Rpb24gYXJyYXlJbmRleE9mIChhcnIsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIGRpcikge1xuICB2YXIgaW5kZXhTaXplID0gMVxuICB2YXIgYXJyTGVuZ3RoID0gYXJyLmxlbmd0aFxuICB2YXIgdmFsTGVuZ3RoID0gdmFsLmxlbmd0aFxuXG4gIGlmIChlbmNvZGluZyAhPT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSBTdHJpbmcoZW5jb2RpbmcpLnRvTG93ZXJDYXNlKClcbiAgICBpZiAoZW5jb2RpbmcgPT09ICd1Y3MyJyB8fCBlbmNvZGluZyA9PT0gJ3Vjcy0yJyB8fFxuICAgICAgICBlbmNvZGluZyA9PT0gJ3V0ZjE2bGUnIHx8IGVuY29kaW5nID09PSAndXRmLTE2bGUnKSB7XG4gICAgICBpZiAoYXJyLmxlbmd0aCA8IDIgfHwgdmFsLmxlbmd0aCA8IDIpIHtcbiAgICAgICAgcmV0dXJuIC0xXG4gICAgICB9XG4gICAgICBpbmRleFNpemUgPSAyXG4gICAgICBhcnJMZW5ndGggLz0gMlxuICAgICAgdmFsTGVuZ3RoIC89IDJcbiAgICAgIGJ5dGVPZmZzZXQgLz0gMlxuICAgIH1cbiAgfVxuXG4gIGZ1bmN0aW9uIHJlYWQgKGJ1ZiwgaSkge1xuICAgIGlmIChpbmRleFNpemUgPT09IDEpIHtcbiAgICAgIHJldHVybiBidWZbaV1cbiAgICB9IGVsc2Uge1xuICAgICAgcmV0dXJuIGJ1Zi5yZWFkVUludDE2QkUoaSAqIGluZGV4U2l6ZSlcbiAgICB9XG4gIH1cblxuICB2YXIgaVxuICBpZiAoZGlyKSB7XG4gICAgdmFyIGZvdW5kSW5kZXggPSAtMVxuICAgIGZvciAoaSA9IGJ5dGVPZmZzZXQ7IGkgPCBhcnJMZW5ndGg7IGkrKykge1xuICAgICAgaWYgKHJlYWQoYXJyLCBpKSA9PT0gcmVhZCh2YWwsIGZvdW5kSW5kZXggPT09IC0xID8gMCA6IGkgLSBmb3VuZEluZGV4KSkge1xuICAgICAgICBpZiAoZm91bmRJbmRleCA9PT0gLTEpIGZvdW5kSW5kZXggPSBpXG4gICAgICAgIGlmIChpIC0gZm91bmRJbmRleCArIDEgPT09IHZhbExlbmd0aCkgcmV0dXJuIGZvdW5kSW5kZXggKiBpbmRleFNpemVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIGlmIChmb3VuZEluZGV4ICE9PSAtMSkgaSAtPSBpIC0gZm91bmRJbmRleFxuICAgICAgICBmb3VuZEluZGV4ID0gLTFcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgaWYgKGJ5dGVPZmZzZXQgKyB2YWxMZW5ndGggPiBhcnJMZW5ndGgpIGJ5dGVPZmZzZXQgPSBhcnJMZW5ndGggLSB2YWxMZW5ndGhcbiAgICBmb3IgKGkgPSBieXRlT2Zmc2V0OyBpID49IDA7IGktLSkge1xuICAgICAgdmFyIGZvdW5kID0gdHJ1ZVxuICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCB2YWxMZW5ndGg7IGorKykge1xuICAgICAgICBpZiAocmVhZChhcnIsIGkgKyBqKSAhPT0gcmVhZCh2YWwsIGopKSB7XG4gICAgICAgICAgZm91bmQgPSBmYWxzZVxuICAgICAgICAgIGJyZWFrXG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChmb3VuZCkgcmV0dXJuIGlcbiAgICB9XG4gIH1cblxuICByZXR1cm4gLTFcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5pbmNsdWRlcyA9IGZ1bmN0aW9uIGluY2x1ZGVzICh2YWwsIGJ5dGVPZmZzZXQsIGVuY29kaW5nKSB7XG4gIHJldHVybiB0aGlzLmluZGV4T2YodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykgIT09IC0xXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuaW5kZXhPZiA9IGZ1bmN0aW9uIGluZGV4T2YgKHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcpIHtcbiAgcmV0dXJuIGJpZGlyZWN0aW9uYWxJbmRleE9mKHRoaXMsIHZhbCwgYnl0ZU9mZnNldCwgZW5jb2RpbmcsIHRydWUpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUubGFzdEluZGV4T2YgPSBmdW5jdGlvbiBsYXN0SW5kZXhPZiAodmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZykge1xuICByZXR1cm4gYmlkaXJlY3Rpb25hbEluZGV4T2YodGhpcywgdmFsLCBieXRlT2Zmc2V0LCBlbmNvZGluZywgZmFsc2UpXG59XG5cbmZ1bmN0aW9uIGhleFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgb2Zmc2V0ID0gTnVtYmVyKG9mZnNldCkgfHwgMFxuICB2YXIgcmVtYWluaW5nID0gYnVmLmxlbmd0aCAtIG9mZnNldFxuICBpZiAoIWxlbmd0aCkge1xuICAgIGxlbmd0aCA9IHJlbWFpbmluZ1xuICB9IGVsc2Uge1xuICAgIGxlbmd0aCA9IE51bWJlcihsZW5ndGgpXG4gICAgaWYgKGxlbmd0aCA+IHJlbWFpbmluZykge1xuICAgICAgbGVuZ3RoID0gcmVtYWluaW5nXG4gICAgfVxuICB9XG5cbiAgLy8gbXVzdCBiZSBhbiBldmVuIG51bWJlciBvZiBkaWdpdHNcbiAgdmFyIHN0ckxlbiA9IHN0cmluZy5sZW5ndGhcbiAgaWYgKHN0ckxlbiAlIDIgIT09IDApIHRocm93IG5ldyBUeXBlRXJyb3IoJ0ludmFsaWQgaGV4IHN0cmluZycpXG5cbiAgaWYgKGxlbmd0aCA+IHN0ckxlbiAvIDIpIHtcbiAgICBsZW5ndGggPSBzdHJMZW4gLyAyXG4gIH1cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgIHZhciBwYXJzZWQgPSBwYXJzZUludChzdHJpbmcuc3Vic3RyKGkgKiAyLCAyKSwgMTYpXG4gICAgaWYgKGlzTmFOKHBhcnNlZCkpIHJldHVybiBpXG4gICAgYnVmW29mZnNldCArIGldID0gcGFyc2VkXG4gIH1cbiAgcmV0dXJuIGlcbn1cblxuZnVuY3Rpb24gdXRmOFdyaXRlIChidWYsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpIHtcbiAgcmV0dXJuIGJsaXRCdWZmZXIodXRmOFRvQnl0ZXMoc3RyaW5nLCBidWYubGVuZ3RoIC0gb2Zmc2V0KSwgYnVmLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYXNjaWlXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKGFzY2lpVG9CeXRlcyhzdHJpbmcpLCBidWYsIG9mZnNldCwgbGVuZ3RoKVxufVxuXG5mdW5jdGlvbiBsYXRpbjFXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBhc2NpaVdyaXRlKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcbn1cblxuZnVuY3Rpb24gYmFzZTY0V3JpdGUgKGJ1Ziwgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCkge1xuICByZXR1cm4gYmxpdEJ1ZmZlcihiYXNlNjRUb0J5dGVzKHN0cmluZyksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbmZ1bmN0aW9uIHVjczJXcml0ZSAoYnVmLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKSB7XG4gIHJldHVybiBibGl0QnVmZmVyKHV0ZjE2bGVUb0J5dGVzKHN0cmluZywgYnVmLmxlbmd0aCAtIG9mZnNldCksIGJ1Ziwgb2Zmc2V0LCBsZW5ndGgpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGUgPSBmdW5jdGlvbiB3cml0ZSAoc3RyaW5nLCBvZmZzZXQsIGxlbmd0aCwgZW5jb2RpbmcpIHtcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZylcbiAgaWYgKG9mZnNldCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgZW5jb2RpbmcgPSAndXRmOCdcbiAgICBsZW5ndGggPSB0aGlzLmxlbmd0aFxuICAgIG9mZnNldCA9IDBcbiAgLy8gQnVmZmVyI3dyaXRlKHN0cmluZywgZW5jb2RpbmcpXG4gIH0gZWxzZSBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIG9mZnNldCA9PT0gJ3N0cmluZycpIHtcbiAgICBlbmNvZGluZyA9IG9mZnNldFxuICAgIGxlbmd0aCA9IHRoaXMubGVuZ3RoXG4gICAgb2Zmc2V0ID0gMFxuICAvLyBCdWZmZXIjd3JpdGUoc3RyaW5nLCBvZmZzZXRbLCBsZW5ndGhdWywgZW5jb2RpbmddKVxuICB9IGVsc2UgaWYgKGlzRmluaXRlKG9mZnNldCkpIHtcbiAgICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gICAgaWYgKGlzRmluaXRlKGxlbmd0aCkpIHtcbiAgICAgIGxlbmd0aCA9IGxlbmd0aCB8IDBcbiAgICAgIGlmIChlbmNvZGluZyA9PT0gdW5kZWZpbmVkKSBlbmNvZGluZyA9ICd1dGY4J1xuICAgIH0gZWxzZSB7XG4gICAgICBlbmNvZGluZyA9IGxlbmd0aFxuICAgICAgbGVuZ3RoID0gdW5kZWZpbmVkXG4gICAgfVxuICAvLyBsZWdhY3kgd3JpdGUoc3RyaW5nLCBlbmNvZGluZywgb2Zmc2V0LCBsZW5ndGgpIC0gcmVtb3ZlIGluIHYwLjEzXG4gIH0gZWxzZSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFxuICAgICAgJ0J1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkJ1xuICAgIClcbiAgfVxuXG4gIHZhciByZW1haW5pbmcgPSB0aGlzLmxlbmd0aCAtIG9mZnNldFxuICBpZiAobGVuZ3RoID09PSB1bmRlZmluZWQgfHwgbGVuZ3RoID4gcmVtYWluaW5nKSBsZW5ndGggPSByZW1haW5pbmdcblxuICBpZiAoKHN0cmluZy5sZW5ndGggPiAwICYmIChsZW5ndGggPCAwIHx8IG9mZnNldCA8IDApKSB8fCBvZmZzZXQgPiB0aGlzLmxlbmd0aCkge1xuICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcycpXG4gIH1cblxuICBpZiAoIWVuY29kaW5nKSBlbmNvZGluZyA9ICd1dGY4J1xuXG4gIHZhciBsb3dlcmVkQ2FzZSA9IGZhbHNlXG4gIGZvciAoOzspIHtcbiAgICBzd2l0Y2ggKGVuY29kaW5nKSB7XG4gICAgICBjYXNlICdoZXgnOlxuICAgICAgICByZXR1cm4gaGV4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAndXRmOCc6XG4gICAgICBjYXNlICd1dGYtOCc6XG4gICAgICAgIHJldHVybiB1dGY4V3JpdGUodGhpcywgc3RyaW5nLCBvZmZzZXQsIGxlbmd0aClcblxuICAgICAgY2FzZSAnYXNjaWknOlxuICAgICAgICByZXR1cm4gYXNjaWlXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICdsYXRpbjEnOlxuICAgICAgY2FzZSAnYmluYXJ5JzpcbiAgICAgICAgcmV0dXJuIGxhdGluMVdyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGNhc2UgJ2Jhc2U2NCc6XG4gICAgICAgIC8vIFdhcm5pbmc6IG1heExlbmd0aCBub3QgdGFrZW4gaW50byBhY2NvdW50IGluIGJhc2U2NFdyaXRlXG4gICAgICAgIHJldHVybiBiYXNlNjRXcml0ZSh0aGlzLCBzdHJpbmcsIG9mZnNldCwgbGVuZ3RoKVxuXG4gICAgICBjYXNlICd1Y3MyJzpcbiAgICAgIGNhc2UgJ3Vjcy0yJzpcbiAgICAgIGNhc2UgJ3V0ZjE2bGUnOlxuICAgICAgY2FzZSAndXRmLTE2bGUnOlxuICAgICAgICByZXR1cm4gdWNzMldyaXRlKHRoaXMsIHN0cmluZywgb2Zmc2V0LCBsZW5ndGgpXG5cbiAgICAgIGRlZmF1bHQ6XG4gICAgICAgIGlmIChsb3dlcmVkQ2FzZSkgdGhyb3cgbmV3IFR5cGVFcnJvcignVW5rbm93biBlbmNvZGluZzogJyArIGVuY29kaW5nKVxuICAgICAgICBlbmNvZGluZyA9ICgnJyArIGVuY29kaW5nKS50b0xvd2VyQ2FzZSgpXG4gICAgICAgIGxvd2VyZWRDYXNlID0gdHJ1ZVxuICAgIH1cbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnRvSlNPTiA9IGZ1bmN0aW9uIHRvSlNPTiAoKSB7XG4gIHJldHVybiB7XG4gICAgdHlwZTogJ0J1ZmZlcicsXG4gICAgZGF0YTogQXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyIHx8IHRoaXMsIDApXG4gIH1cbn1cblxuZnVuY3Rpb24gYmFzZTY0U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICBpZiAoc3RhcnQgPT09IDAgJiYgZW5kID09PSBidWYubGVuZ3RoKSB7XG4gICAgcmV0dXJuIGJhc2U2NC5mcm9tQnl0ZUFycmF5KGJ1ZilcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gYmFzZTY0LmZyb21CeXRlQXJyYXkoYnVmLnNsaWNlKHN0YXJ0LCBlbmQpKVxuICB9XG59XG5cbmZ1bmN0aW9uIHV0ZjhTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIGVuZCA9IE1hdGgubWluKGJ1Zi5sZW5ndGgsIGVuZClcbiAgdmFyIHJlcyA9IFtdXG5cbiAgdmFyIGkgPSBzdGFydFxuICB3aGlsZSAoaSA8IGVuZCkge1xuICAgIHZhciBmaXJzdEJ5dGUgPSBidWZbaV1cbiAgICB2YXIgY29kZVBvaW50ID0gbnVsbFxuICAgIHZhciBieXRlc1BlclNlcXVlbmNlID0gKGZpcnN0Qnl0ZSA+IDB4RUYpID8gNFxuICAgICAgOiAoZmlyc3RCeXRlID4gMHhERikgPyAzXG4gICAgICA6IChmaXJzdEJ5dGUgPiAweEJGKSA/IDJcbiAgICAgIDogMVxuXG4gICAgaWYgKGkgKyBieXRlc1BlclNlcXVlbmNlIDw9IGVuZCkge1xuICAgICAgdmFyIHNlY29uZEJ5dGUsIHRoaXJkQnl0ZSwgZm91cnRoQnl0ZSwgdGVtcENvZGVQb2ludFxuXG4gICAgICBzd2l0Y2ggKGJ5dGVzUGVyU2VxdWVuY2UpIHtcbiAgICAgICAgY2FzZSAxOlxuICAgICAgICAgIGlmIChmaXJzdEJ5dGUgPCAweDgwKSB7XG4gICAgICAgICAgICBjb2RlUG9pbnQgPSBmaXJzdEJ5dGVcbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAyOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHgxRikgPDwgMHg2IHwgKHNlY29uZEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweDdGKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSAzOlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGlmICgoc2Vjb25kQnl0ZSAmIDB4QzApID09PSAweDgwICYmICh0aGlyZEJ5dGUgJiAweEMwKSA9PT0gMHg4MCkge1xuICAgICAgICAgICAgdGVtcENvZGVQb2ludCA9IChmaXJzdEJ5dGUgJiAweEYpIDw8IDB4QyB8IChzZWNvbmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKHRoaXJkQnl0ZSAmIDB4M0YpXG4gICAgICAgICAgICBpZiAodGVtcENvZGVQb2ludCA+IDB4N0ZGICYmICh0ZW1wQ29kZVBvaW50IDwgMHhEODAwIHx8IHRlbXBDb2RlUG9pbnQgPiAweERGRkYpKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgYnJlYWtcbiAgICAgICAgY2FzZSA0OlxuICAgICAgICAgIHNlY29uZEJ5dGUgPSBidWZbaSArIDFdXG4gICAgICAgICAgdGhpcmRCeXRlID0gYnVmW2kgKyAyXVxuICAgICAgICAgIGZvdXJ0aEJ5dGUgPSBidWZbaSArIDNdXG4gICAgICAgICAgaWYgKChzZWNvbmRCeXRlICYgMHhDMCkgPT09IDB4ODAgJiYgKHRoaXJkQnl0ZSAmIDB4QzApID09PSAweDgwICYmIChmb3VydGhCeXRlICYgMHhDMCkgPT09IDB4ODApIHtcbiAgICAgICAgICAgIHRlbXBDb2RlUG9pbnQgPSAoZmlyc3RCeXRlICYgMHhGKSA8PCAweDEyIHwgKHNlY29uZEJ5dGUgJiAweDNGKSA8PCAweEMgfCAodGhpcmRCeXRlICYgMHgzRikgPDwgMHg2IHwgKGZvdXJ0aEJ5dGUgJiAweDNGKVxuICAgICAgICAgICAgaWYgKHRlbXBDb2RlUG9pbnQgPiAweEZGRkYgJiYgdGVtcENvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICAgICAgICAgIGNvZGVQb2ludCA9IHRlbXBDb2RlUG9pbnRcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNvZGVQb2ludCA9PT0gbnVsbCkge1xuICAgICAgLy8gd2UgZGlkIG5vdCBnZW5lcmF0ZSBhIHZhbGlkIGNvZGVQb2ludCBzbyBpbnNlcnQgYVxuICAgICAgLy8gcmVwbGFjZW1lbnQgY2hhciAoVStGRkZEKSBhbmQgYWR2YW5jZSBvbmx5IDEgYnl0ZVxuICAgICAgY29kZVBvaW50ID0gMHhGRkZEXG4gICAgICBieXRlc1BlclNlcXVlbmNlID0gMVxuICAgIH0gZWxzZSBpZiAoY29kZVBvaW50ID4gMHhGRkZGKSB7XG4gICAgICAvLyBlbmNvZGUgdG8gdXRmMTYgKHN1cnJvZ2F0ZSBwYWlyIGRhbmNlKVxuICAgICAgY29kZVBvaW50IC09IDB4MTAwMDBcbiAgICAgIHJlcy5wdXNoKGNvZGVQb2ludCA+Pj4gMTAgJiAweDNGRiB8IDB4RDgwMClcbiAgICAgIGNvZGVQb2ludCA9IDB4REMwMCB8IGNvZGVQb2ludCAmIDB4M0ZGXG4gICAgfVxuXG4gICAgcmVzLnB1c2goY29kZVBvaW50KVxuICAgIGkgKz0gYnl0ZXNQZXJTZXF1ZW5jZVxuICB9XG5cbiAgcmV0dXJuIGRlY29kZUNvZGVQb2ludHNBcnJheShyZXMpXG59XG5cbi8vIEJhc2VkIG9uIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9hLzIyNzQ3MjcyLzY4MDc0MiwgdGhlIGJyb3dzZXIgd2l0aFxuLy8gdGhlIGxvd2VzdCBsaW1pdCBpcyBDaHJvbWUsIHdpdGggMHgxMDAwMCBhcmdzLlxuLy8gV2UgZ28gMSBtYWduaXR1ZGUgbGVzcywgZm9yIHNhZmV0eVxudmFyIE1BWF9BUkdVTUVOVFNfTEVOR1RIID0gMHgxMDAwXG5cbmZ1bmN0aW9uIGRlY29kZUNvZGVQb2ludHNBcnJheSAoY29kZVBvaW50cykge1xuICB2YXIgbGVuID0gY29kZVBvaW50cy5sZW5ndGhcbiAgaWYgKGxlbiA8PSBNQVhfQVJHVU1FTlRTX0xFTkdUSCkge1xuICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZywgY29kZVBvaW50cykgLy8gYXZvaWQgZXh0cmEgc2xpY2UoKVxuICB9XG5cbiAgLy8gRGVjb2RlIGluIGNodW5rcyB0byBhdm9pZCBcImNhbGwgc3RhY2sgc2l6ZSBleGNlZWRlZFwiLlxuICB2YXIgcmVzID0gJydcbiAgdmFyIGkgPSAwXG4gIHdoaWxlIChpIDwgbGVuKSB7XG4gICAgcmVzICs9IFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoXG4gICAgICBTdHJpbmcsXG4gICAgICBjb2RlUG9pbnRzLnNsaWNlKGksIGkgKz0gTUFYX0FSR1VNRU5UU19MRU5HVEgpXG4gICAgKVxuICB9XG4gIHJldHVybiByZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlTbGljZSAoYnVmLCBzdGFydCwgZW5kKSB7XG4gIHZhciByZXQgPSAnJ1xuICBlbmQgPSBNYXRoLm1pbihidWYubGVuZ3RoLCBlbmQpXG5cbiAgZm9yICh2YXIgaSA9IHN0YXJ0OyBpIDwgZW5kOyArK2kpIHtcbiAgICByZXQgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShidWZbaV0gJiAweDdGKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gbGF0aW4xU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgcmV0ID0gJydcbiAgZW5kID0gTWF0aC5taW4oYnVmLmxlbmd0aCwgZW5kKVxuXG4gIGZvciAodmFyIGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgcmV0ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnVmW2ldKVxuICB9XG4gIHJldHVybiByZXRcbn1cblxuZnVuY3Rpb24gaGV4U2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gYnVmLmxlbmd0aFxuXG4gIGlmICghc3RhcnQgfHwgc3RhcnQgPCAwKSBzdGFydCA9IDBcbiAgaWYgKCFlbmQgfHwgZW5kIDwgMCB8fCBlbmQgPiBsZW4pIGVuZCA9IGxlblxuXG4gIHZhciBvdXQgPSAnJ1xuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7ICsraSkge1xuICAgIG91dCArPSB0b0hleChidWZbaV0pXG4gIH1cbiAgcmV0dXJuIG91dFxufVxuXG5mdW5jdGlvbiB1dGYxNmxlU2xpY2UgKGJ1Ziwgc3RhcnQsIGVuZCkge1xuICB2YXIgYnl0ZXMgPSBidWYuc2xpY2Uoc3RhcnQsIGVuZClcbiAgdmFyIHJlcyA9ICcnXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYnl0ZXMubGVuZ3RoOyBpICs9IDIpIHtcbiAgICByZXMgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSArIGJ5dGVzW2kgKyAxXSAqIDI1NilcbiAgfVxuICByZXR1cm4gcmVzXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUuc2xpY2UgPSBmdW5jdGlvbiBzbGljZSAoc3RhcnQsIGVuZCkge1xuICB2YXIgbGVuID0gdGhpcy5sZW5ndGhcbiAgc3RhcnQgPSB+fnN0YXJ0XG4gIGVuZCA9IGVuZCA9PT0gdW5kZWZpbmVkID8gbGVuIDogfn5lbmRcblxuICBpZiAoc3RhcnQgPCAwKSB7XG4gICAgc3RhcnQgKz0gbGVuXG4gICAgaWYgKHN0YXJ0IDwgMCkgc3RhcnQgPSAwXG4gIH0gZWxzZSBpZiAoc3RhcnQgPiBsZW4pIHtcbiAgICBzdGFydCA9IGxlblxuICB9XG5cbiAgaWYgKGVuZCA8IDApIHtcbiAgICBlbmQgKz0gbGVuXG4gICAgaWYgKGVuZCA8IDApIGVuZCA9IDBcbiAgfSBlbHNlIGlmIChlbmQgPiBsZW4pIHtcbiAgICBlbmQgPSBsZW5cbiAgfVxuXG4gIGlmIChlbmQgPCBzdGFydCkgZW5kID0gc3RhcnRcblxuICB2YXIgbmV3QnVmXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIG5ld0J1ZiA9IHRoaXMuc3ViYXJyYXkoc3RhcnQsIGVuZClcbiAgICBuZXdCdWYuX19wcm90b19fID0gQnVmZmVyLnByb3RvdHlwZVxuICB9IGVsc2Uge1xuICAgIHZhciBzbGljZUxlbiA9IGVuZCAtIHN0YXJ0XG4gICAgbmV3QnVmID0gbmV3IEJ1ZmZlcihzbGljZUxlbiwgdW5kZWZpbmVkKVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2xpY2VMZW47ICsraSkge1xuICAgICAgbmV3QnVmW2ldID0gdGhpc1tpICsgc3RhcnRdXG4gICAgfVxuICB9XG5cbiAgcmV0dXJuIG5ld0J1ZlxufVxuXG4vKlxuICogTmVlZCB0byBtYWtlIHN1cmUgdGhhdCBidWZmZXIgaXNuJ3QgdHJ5aW5nIHRvIHdyaXRlIG91dCBvZiBib3VuZHMuXG4gKi9cbmZ1bmN0aW9uIGNoZWNrT2Zmc2V0IChvZmZzZXQsIGV4dCwgbGVuZ3RoKSB7XG4gIGlmICgob2Zmc2V0ICUgMSkgIT09IDAgfHwgb2Zmc2V0IDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ29mZnNldCBpcyBub3QgdWludCcpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBsZW5ndGgpIHRocm93IG5ldyBSYW5nZUVycm9yKCdUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludExFID0gZnVuY3Rpb24gcmVhZFVJbnRMRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIGJ5dGVMZW5ndGgsIHRoaXMubGVuZ3RoKVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldF1cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHdoaWxlICgrK2kgPCBieXRlTGVuZ3RoICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgaV0gKiBtdWxcbiAgfVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludEJFID0gZnVuY3Rpb24gcmVhZFVJbnRCRSAob2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcbiAgfVxuXG4gIHZhciB2YWwgPSB0aGlzW29mZnNldCArIC0tYnl0ZUxlbmd0aF1cbiAgdmFyIG11bCA9IDFcbiAgd2hpbGUgKGJ5dGVMZW5ndGggPiAwICYmIChtdWwgKj0gMHgxMDApKSB7XG4gICAgdmFsICs9IHRoaXNbb2Zmc2V0ICsgLS1ieXRlTGVuZ3RoXSAqIG11bFxuICB9XG5cbiAgcmV0dXJuIHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50OCA9IGZ1bmN0aW9uIHJlYWRVSW50OCAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDEsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gdGhpc1tvZmZzZXRdXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQxNkxFID0gZnVuY3Rpb24gcmVhZFVJbnQxNkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMiwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiB0aGlzW29mZnNldF0gfCAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRVSW50MTZCRSA9IGZ1bmN0aW9uIHJlYWRVSW50MTZCRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICByZXR1cm4gKHRoaXNbb2Zmc2V0XSA8PCA4KSB8IHRoaXNbb2Zmc2V0ICsgMV1cbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkVUludDMyTEUgPSBmdW5jdGlvbiByZWFkVUludDMyTEUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA0LCB0aGlzLmxlbmd0aClcblxuICByZXR1cm4gKCh0aGlzW29mZnNldF0pIHxcbiAgICAgICh0aGlzW29mZnNldCArIDFdIDw8IDgpIHxcbiAgICAgICh0aGlzW29mZnNldCArIDJdIDw8IDE2KSkgK1xuICAgICAgKHRoaXNbb2Zmc2V0ICsgM10gKiAweDEwMDAwMDApXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZFVJbnQzMkJFID0gZnVuY3Rpb24gcmVhZFVJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gKiAweDEwMDAwMDApICtcbiAgICAoKHRoaXNbb2Zmc2V0ICsgMV0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAyXSA8PCA4KSB8XG4gICAgdGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50TEUgPSBmdW5jdGlvbiByZWFkSW50TEUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdXG4gIHZhciBtdWwgPSAxXG4gIHZhciBpID0gMFxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHZhbCArPSB0aGlzW29mZnNldCArIGldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50QkUgPSBmdW5jdGlvbiByZWFkSW50QkUgKG9mZnNldCwgYnl0ZUxlbmd0aCwgbm9Bc3NlcnQpIHtcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBieXRlTGVuZ3RoID0gYnl0ZUxlbmd0aCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCBieXRlTGVuZ3RoLCB0aGlzLmxlbmd0aClcblxuICB2YXIgaSA9IGJ5dGVMZW5ndGhcbiAgdmFyIG11bCA9IDFcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgLS1pXVxuICB3aGlsZSAoaSA+IDAgJiYgKG11bCAqPSAweDEwMCkpIHtcbiAgICB2YWwgKz0gdGhpc1tvZmZzZXQgKyAtLWldICogbXVsXG4gIH1cbiAgbXVsICo9IDB4ODBcblxuICBpZiAodmFsID49IG11bCkgdmFsIC09IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoKVxuXG4gIHJldHVybiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50OCA9IGZ1bmN0aW9uIHJlYWRJbnQ4IChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgMSwgdGhpcy5sZW5ndGgpXG4gIGlmICghKHRoaXNbb2Zmc2V0XSAmIDB4ODApKSByZXR1cm4gKHRoaXNbb2Zmc2V0XSlcbiAgcmV0dXJuICgoMHhmZiAtIHRoaXNbb2Zmc2V0XSArIDEpICogLTEpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZEludDE2TEUgPSBmdW5jdGlvbiByZWFkSW50MTZMRSAob2Zmc2V0LCBub0Fzc2VydCkge1xuICBpZiAoIW5vQXNzZXJ0KSBjaGVja09mZnNldChvZmZzZXQsIDIsIHRoaXMubGVuZ3RoKVxuICB2YXIgdmFsID0gdGhpc1tvZmZzZXRdIHwgKHRoaXNbb2Zmc2V0ICsgMV0gPDwgOClcbiAgcmV0dXJuICh2YWwgJiAweDgwMDApID8gdmFsIHwgMHhGRkZGMDAwMCA6IHZhbFxufVxuXG5CdWZmZXIucHJvdG90eXBlLnJlYWRJbnQxNkJFID0gZnVuY3Rpb24gcmVhZEludDE2QkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCAyLCB0aGlzLmxlbmd0aClcbiAgdmFyIHZhbCA9IHRoaXNbb2Zmc2V0ICsgMV0gfCAodGhpc1tvZmZzZXRdIDw8IDgpXG4gIHJldHVybiAodmFsICYgMHg4MDAwKSA/IHZhbCB8IDB4RkZGRjAwMDAgOiB2YWxcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJMRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0pIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCA4KSB8XG4gICAgKHRoaXNbb2Zmc2V0ICsgMl0gPDwgMTYpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSA8PCAyNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkSW50MzJCRSA9IGZ1bmN0aW9uIHJlYWRJbnQzMkJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG5cbiAgcmV0dXJuICh0aGlzW29mZnNldF0gPDwgMjQpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAxXSA8PCAxNikgfFxuICAgICh0aGlzW29mZnNldCArIDJdIDw8IDgpIHxcbiAgICAodGhpc1tvZmZzZXQgKyAzXSlcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRMRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdExFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCAyMywgNClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRmxvYXRCRSA9IGZ1bmN0aW9uIHJlYWRGbG9hdEJFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgNCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCBmYWxzZSwgMjMsIDQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUucmVhZERvdWJsZUxFID0gZnVuY3Rpb24gcmVhZERvdWJsZUxFIChvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrT2Zmc2V0KG9mZnNldCwgOCwgdGhpcy5sZW5ndGgpXG4gIHJldHVybiBpZWVlNzU0LnJlYWQodGhpcywgb2Zmc2V0LCB0cnVlLCA1MiwgOClcbn1cblxuQnVmZmVyLnByb3RvdHlwZS5yZWFkRG91YmxlQkUgPSBmdW5jdGlvbiByZWFkRG91YmxlQkUgKG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tPZmZzZXQob2Zmc2V0LCA4LCB0aGlzLmxlbmd0aClcbiAgcmV0dXJuIGllZWU3NTQucmVhZCh0aGlzLCBvZmZzZXQsIGZhbHNlLCA1MiwgOClcbn1cblxuZnVuY3Rpb24gY2hlY2tJbnQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAoIUJ1ZmZlci5pc0J1ZmZlcihidWYpKSB0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJ1ZmZlclwiIGFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIgaW5zdGFuY2UnKVxuICBpZiAodmFsdWUgPiBtYXggfHwgdmFsdWUgPCBtaW4pIHRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpXG4gIGlmIChvZmZzZXQgKyBleHQgPiBidWYubGVuZ3RoKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlVUludExFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIG11bCA9IDFcbiAgdmFyIGkgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlVUludEJFICh2YWx1ZSwgb2Zmc2V0LCBieXRlTGVuZ3RoLCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoIHwgMFxuICBpZiAoIW5vQXNzZXJ0KSB7XG4gICAgdmFyIG1heEJ5dGVzID0gTWF0aC5wb3coMiwgOCAqIGJ5dGVMZW5ndGgpIC0gMVxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG1heEJ5dGVzLCAwKVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAodmFsdWUgLyBtdWwpICYgMHhGRlxuICB9XG5cbiAgcmV0dXJuIG9mZnNldCArIGJ5dGVMZW5ndGhcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZVVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVVSW50OCAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAxLCAweGZmLCAwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gIHJldHVybiBvZmZzZXQgKyAxXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDE2IChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZiArIHZhbHVlICsgMVxuICBmb3IgKHZhciBpID0gMCwgaiA9IE1hdGgubWluKGJ1Zi5sZW5ndGggLSBvZmZzZXQsIDIpOyBpIDwgajsgKytpKSB7XG4gICAgYnVmW29mZnNldCArIGldID0gKHZhbHVlICYgKDB4ZmYgPDwgKDggKiAobGl0dGxlRW5kaWFuID8gaSA6IDEgLSBpKSkpKSA+Pj5cbiAgICAgIChsaXR0bGVFbmRpYW4gPyBpIDogMSAtIGkpICogOFxuICB9XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlVUludDE2TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgMiwgMHhmZmZmLCAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MTYodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgMlxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDE2QkUgPSBmdW5jdGlvbiB3cml0ZVVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4ZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbmZ1bmN0aW9uIG9iamVjdFdyaXRlVUludDMyIChidWYsIHZhbHVlLCBvZmZzZXQsIGxpdHRsZUVuZGlhbikge1xuICBpZiAodmFsdWUgPCAwKSB2YWx1ZSA9IDB4ZmZmZmZmZmYgKyB2YWx1ZSArIDFcbiAgZm9yICh2YXIgaSA9IDAsIGogPSBNYXRoLm1pbihidWYubGVuZ3RoIC0gb2Zmc2V0LCA0KTsgaSA8IGo7ICsraSkge1xuICAgIGJ1ZltvZmZzZXQgKyBpXSA9ICh2YWx1ZSA+Pj4gKGxpdHRsZUVuZGlhbiA/IGkgOiAzIC0gaSkgKiA4KSAmIDB4ZmZcbiAgfVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlVUludDMyTEUgPSBmdW5jdGlvbiB3cml0ZVVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4ZmZmZmZmZmYsIDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgPj4+IDI0KVxuICAgIHRoaXNbb2Zmc2V0ICsgMl0gPSAodmFsdWUgPj4+IDE2KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVVSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlVUludDMyQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkgY2hlY2tJbnQodGhpcywgdmFsdWUsIG9mZnNldCwgNCwgMHhmZmZmZmZmZiwgMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiAyNClcbiAgICB0aGlzW29mZnNldCArIDFdID0gKHZhbHVlID4+PiAxNilcbiAgICB0aGlzW29mZnNldCArIDJdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgM10gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDMyKHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyA0XG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRMRSA9IGZ1bmN0aW9uIHdyaXRlSW50TEUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSAwXG4gIHZhciBtdWwgPSAxXG4gIHZhciBzdWIgPSAwXG4gIHRoaXNbb2Zmc2V0XSA9IHZhbHVlICYgMHhGRlxuICB3aGlsZSAoKytpIDwgYnl0ZUxlbmd0aCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSAtIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnRCRSA9IGZ1bmN0aW9uIHdyaXRlSW50QkUgKHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIG5vQXNzZXJ0KSB7XG4gIHZhbHVlID0gK3ZhbHVlXG4gIG9mZnNldCA9IG9mZnNldCB8IDBcbiAgaWYgKCFub0Fzc2VydCkge1xuICAgIHZhciBsaW1pdCA9IE1hdGgucG93KDIsIDggKiBieXRlTGVuZ3RoIC0gMSlcblxuICAgIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGJ5dGVMZW5ndGgsIGxpbWl0IC0gMSwgLWxpbWl0KVxuICB9XG5cbiAgdmFyIGkgPSBieXRlTGVuZ3RoIC0gMVxuICB2YXIgbXVsID0gMVxuICB2YXIgc3ViID0gMFxuICB0aGlzW29mZnNldCArIGldID0gdmFsdWUgJiAweEZGXG4gIHdoaWxlICgtLWkgPj0gMCAmJiAobXVsICo9IDB4MTAwKSkge1xuICAgIGlmICh2YWx1ZSA8IDAgJiYgc3ViID09PSAwICYmIHRoaXNbb2Zmc2V0ICsgaSArIDFdICE9PSAwKSB7XG4gICAgICBzdWIgPSAxXG4gICAgfVxuICAgIHRoaXNbb2Zmc2V0ICsgaV0gPSAoKHZhbHVlIC8gbXVsKSA+PiAwKSAtIHN1YiAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBvZmZzZXQgKyBieXRlTGVuZ3RoXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQ4ID0gZnVuY3Rpb24gd3JpdGVJbnQ4ICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDEsIDB4N2YsIC0weDgwKVxuICBpZiAoIUJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB2YWx1ZSA9IE1hdGguZmxvb3IodmFsdWUpXG4gIGlmICh2YWx1ZSA8IDApIHZhbHVlID0gMHhmZiArIHZhbHVlICsgMVxuICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICByZXR1cm4gb2Zmc2V0ICsgMVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MTZMRSA9IGZ1bmN0aW9uIHdyaXRlSW50MTZMRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCAyLCAweDdmZmYsIC0weDgwMDApXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSAmIDB4ZmYpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gOClcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQxNih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCB0cnVlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQxNkJFID0gZnVuY3Rpb24gd3JpdGVJbnQxNkJFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDIsIDB4N2ZmZiwgLTB4ODAwMClcbiAgaWYgKEJ1ZmZlci5UWVBFRF9BUlJBWV9TVVBQT1JUKSB7XG4gICAgdGhpc1tvZmZzZXRdID0gKHZhbHVlID4+PiA4KVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgJiAweGZmKVxuICB9IGVsc2Uge1xuICAgIG9iamVjdFdyaXRlVUludDE2KHRoaXMsIHZhbHVlLCBvZmZzZXQsIGZhbHNlKVxuICB9XG4gIHJldHVybiBvZmZzZXQgKyAyXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVJbnQzMkxFID0gZnVuY3Rpb24gd3JpdGVJbnQzMkxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICB2YWx1ZSA9ICt2YWx1ZVxuICBvZmZzZXQgPSBvZmZzZXQgfCAwXG4gIGlmICghbm9Bc3NlcnQpIGNoZWNrSW50KHRoaXMsIHZhbHVlLCBvZmZzZXQsIDQsIDB4N2ZmZmZmZmYsIC0weDgwMDAwMDAwKVxuICBpZiAoQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICB0aGlzW29mZnNldF0gPSAodmFsdWUgJiAweGZmKVxuICAgIHRoaXNbb2Zmc2V0ICsgMV0gPSAodmFsdWUgPj4+IDgpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAzXSA9ICh2YWx1ZSA+Pj4gMjQpXG4gIH0gZWxzZSB7XG4gICAgb2JqZWN0V3JpdGVVSW50MzIodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlSW50MzJCRSA9IGZ1bmN0aW9uIHdyaXRlSW50MzJCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgdmFsdWUgPSArdmFsdWVcbiAgb2Zmc2V0ID0gb2Zmc2V0IHwgMFxuICBpZiAoIW5vQXNzZXJ0KSBjaGVja0ludCh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCA0LCAweDdmZmZmZmZmLCAtMHg4MDAwMDAwMClcbiAgaWYgKHZhbHVlIDwgMCkgdmFsdWUgPSAweGZmZmZmZmZmICsgdmFsdWUgKyAxXG4gIGlmIChCdWZmZXIuVFlQRURfQVJSQVlfU1VQUE9SVCkge1xuICAgIHRoaXNbb2Zmc2V0XSA9ICh2YWx1ZSA+Pj4gMjQpXG4gICAgdGhpc1tvZmZzZXQgKyAxXSA9ICh2YWx1ZSA+Pj4gMTYpXG4gICAgdGhpc1tvZmZzZXQgKyAyXSA9ICh2YWx1ZSA+Pj4gOClcbiAgICB0aGlzW29mZnNldCArIDNdID0gKHZhbHVlICYgMHhmZilcbiAgfSBlbHNlIHtcbiAgICBvYmplY3RXcml0ZVVJbnQzMih0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSlcbiAgfVxuICByZXR1cm4gb2Zmc2V0ICsgNFxufVxuXG5mdW5jdGlvbiBjaGVja0lFRUU3NTQgKGJ1ZiwgdmFsdWUsIG9mZnNldCwgZXh0LCBtYXgsIG1pbikge1xuICBpZiAob2Zmc2V0ICsgZXh0ID4gYnVmLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ0luZGV4IG91dCBvZiByYW5nZScpXG4gIGlmIChvZmZzZXQgPCAwKSB0aHJvdyBuZXcgUmFuZ2VFcnJvcignSW5kZXggb3V0IG9mIHJhbmdlJylcbn1cblxuZnVuY3Rpb24gd3JpdGVGbG9hdCAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA0LCAzLjQwMjgyMzQ2NjM4NTI4ODZlKzM4LCAtMy40MDI4MjM0NjYzODUyODg2ZSszOClcbiAgfVxuICBpZWVlNzU0LndyaXRlKGJ1ZiwgdmFsdWUsIG9mZnNldCwgbGl0dGxlRW5kaWFuLCAyMywgNClcbiAgcmV0dXJuIG9mZnNldCArIDRcbn1cblxuQnVmZmVyLnByb3RvdHlwZS53cml0ZUZsb2F0TEUgPSBmdW5jdGlvbiB3cml0ZUZsb2F0TEUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZUZsb2F0KHRoaXMsIHZhbHVlLCBvZmZzZXQsIHRydWUsIG5vQXNzZXJ0KVxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRmxvYXRCRSA9IGZ1bmN0aW9uIHdyaXRlRmxvYXRCRSAodmFsdWUsIG9mZnNldCwgbm9Bc3NlcnQpIHtcbiAgcmV0dXJuIHdyaXRlRmxvYXQodGhpcywgdmFsdWUsIG9mZnNldCwgZmFsc2UsIG5vQXNzZXJ0KVxufVxuXG5mdW5jdGlvbiB3cml0ZURvdWJsZSAoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIG5vQXNzZXJ0KSB7XG4gIGlmICghbm9Bc3NlcnQpIHtcbiAgICBjaGVja0lFRUU3NTQoYnVmLCB2YWx1ZSwgb2Zmc2V0LCA4LCAxLjc5NzY5MzEzNDg2MjMxNTdFKzMwOCwgLTEuNzk3NjkzMTM0ODYyMzE1N0UrMzA4KVxuICB9XG4gIGllZWU3NTQud3JpdGUoYnVmLCB2YWx1ZSwgb2Zmc2V0LCBsaXR0bGVFbmRpYW4sIDUyLCA4KVxuICByZXR1cm4gb2Zmc2V0ICsgOFxufVxuXG5CdWZmZXIucHJvdG90eXBlLndyaXRlRG91YmxlTEUgPSBmdW5jdGlvbiB3cml0ZURvdWJsZUxFICh2YWx1ZSwgb2Zmc2V0LCBub0Fzc2VydCkge1xuICByZXR1cm4gd3JpdGVEb3VibGUodGhpcywgdmFsdWUsIG9mZnNldCwgdHJ1ZSwgbm9Bc3NlcnQpXG59XG5cbkJ1ZmZlci5wcm90b3R5cGUud3JpdGVEb3VibGVCRSA9IGZ1bmN0aW9uIHdyaXRlRG91YmxlQkUgKHZhbHVlLCBvZmZzZXQsIG5vQXNzZXJ0KSB7XG4gIHJldHVybiB3cml0ZURvdWJsZSh0aGlzLCB2YWx1ZSwgb2Zmc2V0LCBmYWxzZSwgbm9Bc3NlcnQpXG59XG5cbi8vIGNvcHkodGFyZ2V0QnVmZmVyLCB0YXJnZXRTdGFydD0wLCBzb3VyY2VTdGFydD0wLCBzb3VyY2VFbmQ9YnVmZmVyLmxlbmd0aClcbkJ1ZmZlci5wcm90b3R5cGUuY29weSA9IGZ1bmN0aW9uIGNvcHkgKHRhcmdldCwgdGFyZ2V0U3RhcnQsIHN0YXJ0LCBlbmQpIHtcbiAgaWYgKCFzdGFydCkgc3RhcnQgPSAwXG4gIGlmICghZW5kICYmIGVuZCAhPT0gMCkgZW5kID0gdGhpcy5sZW5ndGhcbiAgaWYgKHRhcmdldFN0YXJ0ID49IHRhcmdldC5sZW5ndGgpIHRhcmdldFN0YXJ0ID0gdGFyZ2V0Lmxlbmd0aFxuICBpZiAoIXRhcmdldFN0YXJ0KSB0YXJnZXRTdGFydCA9IDBcbiAgaWYgKGVuZCA+IDAgJiYgZW5kIDwgc3RhcnQpIGVuZCA9IHN0YXJ0XG5cbiAgLy8gQ29weSAwIGJ5dGVzOyB3ZSdyZSBkb25lXG4gIGlmIChlbmQgPT09IHN0YXJ0KSByZXR1cm4gMFxuICBpZiAodGFyZ2V0Lmxlbmd0aCA9PT0gMCB8fCB0aGlzLmxlbmd0aCA9PT0gMCkgcmV0dXJuIDBcblxuICAvLyBGYXRhbCBlcnJvciBjb25kaXRpb25zXG4gIGlmICh0YXJnZXRTdGFydCA8IDApIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcigndGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kcycpXG4gIH1cbiAgaWYgKHN0YXJ0IDwgMCB8fCBzdGFydCA+PSB0aGlzLmxlbmd0aCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZVN0YXJ0IG91dCBvZiBib3VuZHMnKVxuICBpZiAoZW5kIDwgMCkgdGhyb3cgbmV3IFJhbmdlRXJyb3IoJ3NvdXJjZUVuZCBvdXQgb2YgYm91bmRzJylcblxuICAvLyBBcmUgd2Ugb29iP1xuICBpZiAoZW5kID4gdGhpcy5sZW5ndGgpIGVuZCA9IHRoaXMubGVuZ3RoXG4gIGlmICh0YXJnZXQubGVuZ3RoIC0gdGFyZ2V0U3RhcnQgPCBlbmQgLSBzdGFydCkge1xuICAgIGVuZCA9IHRhcmdldC5sZW5ndGggLSB0YXJnZXRTdGFydCArIHN0YXJ0XG4gIH1cblxuICB2YXIgbGVuID0gZW5kIC0gc3RhcnRcbiAgdmFyIGlcblxuICBpZiAodGhpcyA9PT0gdGFyZ2V0ICYmIHN0YXJ0IDwgdGFyZ2V0U3RhcnQgJiYgdGFyZ2V0U3RhcnQgPCBlbmQpIHtcbiAgICAvLyBkZXNjZW5kaW5nIGNvcHkgZnJvbSBlbmRcbiAgICBmb3IgKGkgPSBsZW4gLSAxOyBpID49IDA7IC0taSkge1xuICAgICAgdGFyZ2V0W2kgKyB0YXJnZXRTdGFydF0gPSB0aGlzW2kgKyBzdGFydF1cbiAgICB9XG4gIH0gZWxzZSBpZiAobGVuIDwgMTAwMCB8fCAhQnVmZmVyLlRZUEVEX0FSUkFZX1NVUFBPUlQpIHtcbiAgICAvLyBhc2NlbmRpbmcgY29weSBmcm9tIHN0YXJ0XG4gICAgZm9yIChpID0gMDsgaSA8IGxlbjsgKytpKSB7XG4gICAgICB0YXJnZXRbaSArIHRhcmdldFN0YXJ0XSA9IHRoaXNbaSArIHN0YXJ0XVxuICAgIH1cbiAgfSBlbHNlIHtcbiAgICBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChcbiAgICAgIHRhcmdldCxcbiAgICAgIHRoaXMuc3ViYXJyYXkoc3RhcnQsIHN0YXJ0ICsgbGVuKSxcbiAgICAgIHRhcmdldFN0YXJ0XG4gICAgKVxuICB9XG5cbiAgcmV0dXJuIGxlblxufVxuXG4vLyBVc2FnZTpcbi8vICAgIGJ1ZmZlci5maWxsKG51bWJlclssIG9mZnNldFssIGVuZF1dKVxuLy8gICAgYnVmZmVyLmZpbGwoYnVmZmVyWywgb2Zmc2V0WywgZW5kXV0pXG4vLyAgICBidWZmZXIuZmlsbChzdHJpbmdbLCBvZmZzZXRbLCBlbmRdXVssIGVuY29kaW5nXSlcbkJ1ZmZlci5wcm90b3R5cGUuZmlsbCA9IGZ1bmN0aW9uIGZpbGwgKHZhbCwgc3RhcnQsIGVuZCwgZW5jb2RpbmcpIHtcbiAgLy8gSGFuZGxlIHN0cmluZyBjYXNlczpcbiAgaWYgKHR5cGVvZiB2YWwgPT09ICdzdHJpbmcnKSB7XG4gICAgaWYgKHR5cGVvZiBzdGFydCA9PT0gJ3N0cmluZycpIHtcbiAgICAgIGVuY29kaW5nID0gc3RhcnRcbiAgICAgIHN0YXJ0ID0gMFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBlbmQgPT09ICdzdHJpbmcnKSB7XG4gICAgICBlbmNvZGluZyA9IGVuZFxuICAgICAgZW5kID0gdGhpcy5sZW5ndGhcbiAgICB9XG4gICAgaWYgKHZhbC5sZW5ndGggPT09IDEpIHtcbiAgICAgIHZhciBjb2RlID0gdmFsLmNoYXJDb2RlQXQoMClcbiAgICAgIGlmIChjb2RlIDwgMjU2KSB7XG4gICAgICAgIHZhbCA9IGNvZGVcbiAgICAgIH1cbiAgICB9XG4gICAgaWYgKGVuY29kaW5nICE9PSB1bmRlZmluZWQgJiYgdHlwZW9mIGVuY29kaW5nICE9PSAnc3RyaW5nJykge1xuICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZW5jb2RpbmcgbXVzdCBiZSBhIHN0cmluZycpXG4gICAgfVxuICAgIGlmICh0eXBlb2YgZW5jb2RpbmcgPT09ICdzdHJpbmcnICYmICFCdWZmZXIuaXNFbmNvZGluZyhlbmNvZGluZykpIHtcbiAgICAgIHRocm93IG5ldyBUeXBlRXJyb3IoJ1Vua25vd24gZW5jb2Rpbmc6ICcgKyBlbmNvZGluZylcbiAgICB9XG4gIH0gZWxzZSBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICB2YWwgPSB2YWwgJiAyNTVcbiAgfVxuXG4gIC8vIEludmFsaWQgcmFuZ2VzIGFyZSBub3Qgc2V0IHRvIGEgZGVmYXVsdCwgc28gY2FuIHJhbmdlIGNoZWNrIGVhcmx5LlxuICBpZiAoc3RhcnQgPCAwIHx8IHRoaXMubGVuZ3RoIDwgc3RhcnQgfHwgdGhpcy5sZW5ndGggPCBlbmQpIHtcbiAgICB0aHJvdyBuZXcgUmFuZ2VFcnJvcignT3V0IG9mIHJhbmdlIGluZGV4JylcbiAgfVxuXG4gIGlmIChlbmQgPD0gc3RhcnQpIHtcbiAgICByZXR1cm4gdGhpc1xuICB9XG5cbiAgc3RhcnQgPSBzdGFydCA+Pj4gMFxuICBlbmQgPSBlbmQgPT09IHVuZGVmaW5lZCA/IHRoaXMubGVuZ3RoIDogZW5kID4+PiAwXG5cbiAgaWYgKCF2YWwpIHZhbCA9IDBcblxuICB2YXIgaVxuICBpZiAodHlwZW9mIHZhbCA9PT0gJ251bWJlcicpIHtcbiAgICBmb3IgKGkgPSBzdGFydDsgaSA8IGVuZDsgKytpKSB7XG4gICAgICB0aGlzW2ldID0gdmFsXG4gICAgfVxuICB9IGVsc2Uge1xuICAgIHZhciBieXRlcyA9IEJ1ZmZlci5pc0J1ZmZlcih2YWwpXG4gICAgICA/IHZhbFxuICAgICAgOiB1dGY4VG9CeXRlcyhuZXcgQnVmZmVyKHZhbCwgZW5jb2RpbmcpLnRvU3RyaW5nKCkpXG4gICAgdmFyIGxlbiA9IGJ5dGVzLmxlbmd0aFxuICAgIGZvciAoaSA9IDA7IGkgPCBlbmQgLSBzdGFydDsgKytpKSB7XG4gICAgICB0aGlzW2kgKyBzdGFydF0gPSBieXRlc1tpICUgbGVuXVxuICAgIH1cbiAgfVxuXG4gIHJldHVybiB0aGlzXG59XG5cbi8vIEhFTFBFUiBGVU5DVElPTlNcbi8vID09PT09PT09PT09PT09PT1cblxudmFyIElOVkFMSURfQkFTRTY0X1JFID0gL1teK1xcLzAtOUEtWmEtei1fXS9nXG5cbmZ1bmN0aW9uIGJhc2U2NGNsZWFuIChzdHIpIHtcbiAgLy8gTm9kZSBzdHJpcHMgb3V0IGludmFsaWQgY2hhcmFjdGVycyBsaWtlIFxcbiBhbmQgXFx0IGZyb20gdGhlIHN0cmluZywgYmFzZTY0LWpzIGRvZXMgbm90XG4gIHN0ciA9IHN0cmluZ3RyaW0oc3RyKS5yZXBsYWNlKElOVkFMSURfQkFTRTY0X1JFLCAnJylcbiAgLy8gTm9kZSBjb252ZXJ0cyBzdHJpbmdzIHdpdGggbGVuZ3RoIDwgMiB0byAnJ1xuICBpZiAoc3RyLmxlbmd0aCA8IDIpIHJldHVybiAnJ1xuICAvLyBOb2RlIGFsbG93cyBmb3Igbm9uLXBhZGRlZCBiYXNlNjQgc3RyaW5ncyAobWlzc2luZyB0cmFpbGluZyA9PT0pLCBiYXNlNjQtanMgZG9lcyBub3RcbiAgd2hpbGUgKHN0ci5sZW5ndGggJSA0ICE9PSAwKSB7XG4gICAgc3RyID0gc3RyICsgJz0nXG4gIH1cbiAgcmV0dXJuIHN0clxufVxuXG5mdW5jdGlvbiBzdHJpbmd0cmltIChzdHIpIHtcbiAgaWYgKHN0ci50cmltKSByZXR1cm4gc3RyLnRyaW0oKVxuICByZXR1cm4gc3RyLnJlcGxhY2UoL15cXHMrfFxccyskL2csICcnKVxufVxuXG5mdW5jdGlvbiB0b0hleCAobikge1xuICBpZiAobiA8IDE2KSByZXR1cm4gJzAnICsgbi50b1N0cmluZygxNilcbiAgcmV0dXJuIG4udG9TdHJpbmcoMTYpXG59XG5cbmZ1bmN0aW9uIHV0ZjhUb0J5dGVzIChzdHJpbmcsIHVuaXRzKSB7XG4gIHVuaXRzID0gdW5pdHMgfHwgSW5maW5pdHlcbiAgdmFyIGNvZGVQb2ludFxuICB2YXIgbGVuZ3RoID0gc3RyaW5nLmxlbmd0aFxuICB2YXIgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcbiAgdmFyIGJ5dGVzID0gW11cblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgY29kZVBvaW50ID0gc3RyaW5nLmNoYXJDb2RlQXQoaSlcblxuICAgIC8vIGlzIHN1cnJvZ2F0ZSBjb21wb25lbnRcbiAgICBpZiAoY29kZVBvaW50ID4gMHhEN0ZGICYmIGNvZGVQb2ludCA8IDB4RTAwMCkge1xuICAgICAgLy8gbGFzdCBjaGFyIHdhcyBhIGxlYWRcbiAgICAgIGlmICghbGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgICAvLyBubyBsZWFkIHlldFxuICAgICAgICBpZiAoY29kZVBvaW50ID4gMHhEQkZGKSB7XG4gICAgICAgICAgLy8gdW5leHBlY3RlZCB0cmFpbFxuICAgICAgICAgIGlmICgodW5pdHMgLT0gMykgPiAtMSkgYnl0ZXMucHVzaCgweEVGLCAweEJGLCAweEJEKVxuICAgICAgICAgIGNvbnRpbnVlXG4gICAgICAgIH0gZWxzZSBpZiAoaSArIDEgPT09IGxlbmd0aCkge1xuICAgICAgICAgIC8vIHVucGFpcmVkIGxlYWRcbiAgICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgICBjb250aW51ZVxuICAgICAgICB9XG5cbiAgICAgICAgLy8gdmFsaWQgbGVhZFxuICAgICAgICBsZWFkU3Vycm9nYXRlID0gY29kZVBvaW50XG5cbiAgICAgICAgY29udGludWVcbiAgICAgIH1cblxuICAgICAgLy8gMiBsZWFkcyBpbiBhIHJvd1xuICAgICAgaWYgKGNvZGVQb2ludCA8IDB4REMwMCkge1xuICAgICAgICBpZiAoKHVuaXRzIC09IDMpID4gLTEpIGJ5dGVzLnB1c2goMHhFRiwgMHhCRiwgMHhCRClcbiAgICAgICAgbGVhZFN1cnJvZ2F0ZSA9IGNvZGVQb2ludFxuICAgICAgICBjb250aW51ZVxuICAgICAgfVxuXG4gICAgICAvLyB2YWxpZCBzdXJyb2dhdGUgcGFpclxuICAgICAgY29kZVBvaW50ID0gKGxlYWRTdXJyb2dhdGUgLSAweEQ4MDAgPDwgMTAgfCBjb2RlUG9pbnQgLSAweERDMDApICsgMHgxMDAwMFxuICAgIH0gZWxzZSBpZiAobGVhZFN1cnJvZ2F0ZSkge1xuICAgICAgLy8gdmFsaWQgYm1wIGNoYXIsIGJ1dCBsYXN0IGNoYXIgd2FzIGEgbGVhZFxuICAgICAgaWYgKCh1bml0cyAtPSAzKSA+IC0xKSBieXRlcy5wdXNoKDB4RUYsIDB4QkYsIDB4QkQpXG4gICAgfVxuXG4gICAgbGVhZFN1cnJvZ2F0ZSA9IG51bGxcblxuICAgIC8vIGVuY29kZSB1dGY4XG4gICAgaWYgKGNvZGVQb2ludCA8IDB4ODApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMSkgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChjb2RlUG9pbnQpXG4gICAgfSBlbHNlIGlmIChjb2RlUG9pbnQgPCAweDgwMCkge1xuICAgICAgaWYgKCh1bml0cyAtPSAyKSA8IDApIGJyZWFrXG4gICAgICBieXRlcy5wdXNoKFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2IHwgMHhDMCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTAwMDApIHtcbiAgICAgIGlmICgodW5pdHMgLT0gMykgPCAwKSBicmVha1xuICAgICAgYnl0ZXMucHVzaChcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyB8IDB4RTAsXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDYgJiAweDNGIHwgMHg4MCxcbiAgICAgICAgY29kZVBvaW50ICYgMHgzRiB8IDB4ODBcbiAgICAgIClcbiAgICB9IGVsc2UgaWYgKGNvZGVQb2ludCA8IDB4MTEwMDAwKSB7XG4gICAgICBpZiAoKHVuaXRzIC09IDQpIDwgMCkgYnJlYWtcbiAgICAgIGJ5dGVzLnB1c2goXG4gICAgICAgIGNvZGVQb2ludCA+PiAweDEyIHwgMHhGMCxcbiAgICAgICAgY29kZVBvaW50ID4+IDB4QyAmIDB4M0YgfCAweDgwLFxuICAgICAgICBjb2RlUG9pbnQgPj4gMHg2ICYgMHgzRiB8IDB4ODAsXG4gICAgICAgIGNvZGVQb2ludCAmIDB4M0YgfCAweDgwXG4gICAgICApXG4gICAgfSBlbHNlIHtcbiAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb2RlIHBvaW50JylcbiAgICB9XG4gIH1cblxuICByZXR1cm4gYnl0ZXNcbn1cblxuZnVuY3Rpb24gYXNjaWlUb0J5dGVzIChzdHIpIHtcbiAgdmFyIGJ5dGVBcnJheSA9IFtdXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aDsgKytpKSB7XG4gICAgLy8gTm9kZSdzIGNvZGUgc2VlbXMgdG8gYmUgZG9pbmcgdGhpcyBhbmQgbm90ICYgMHg3Ri4uXG4gICAgYnl0ZUFycmF5LnB1c2goc3RyLmNoYXJDb2RlQXQoaSkgJiAweEZGKVxuICB9XG4gIHJldHVybiBieXRlQXJyYXlcbn1cblxuZnVuY3Rpb24gdXRmMTZsZVRvQnl0ZXMgKHN0ciwgdW5pdHMpIHtcbiAgdmFyIGMsIGhpLCBsb1xuICB2YXIgYnl0ZUFycmF5ID0gW11cbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcbiAgICBpZiAoKHVuaXRzIC09IDIpIDwgMCkgYnJlYWtcblxuICAgIGMgPSBzdHIuY2hhckNvZGVBdChpKVxuICAgIGhpID0gYyA+PiA4XG4gICAgbG8gPSBjICUgMjU2XG4gICAgYnl0ZUFycmF5LnB1c2gobG8pXG4gICAgYnl0ZUFycmF5LnB1c2goaGkpXG4gIH1cblxuICByZXR1cm4gYnl0ZUFycmF5XG59XG5cbmZ1bmN0aW9uIGJhc2U2NFRvQnl0ZXMgKHN0cikge1xuICByZXR1cm4gYmFzZTY0LnRvQnl0ZUFycmF5KGJhc2U2NGNsZWFuKHN0cikpXG59XG5cbmZ1bmN0aW9uIGJsaXRCdWZmZXIgKHNyYywgZHN0LCBvZmZzZXQsIGxlbmd0aCkge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbmd0aDsgKytpKSB7XG4gICAgaWYgKChpICsgb2Zmc2V0ID49IGRzdC5sZW5ndGgpIHx8IChpID49IHNyYy5sZW5ndGgpKSBicmVha1xuICAgIGRzdFtpICsgb2Zmc2V0XSA9IHNyY1tpXVxuICB9XG4gIHJldHVybiBpXG59XG5cbmZ1bmN0aW9uIGlzbmFuICh2YWwpIHtcbiAgcmV0dXJuIHZhbCAhPT0gdmFsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tc2VsZi1jb21wYXJlXG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vbm9kZS1saWJzLWJyb3dzZXIvfi9idWZmZXIvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGJhc2V4ID0gcmVxdWlyZSgnYmFzZS14JylcbnZhciBBTFBIQUJFVCA9ICcxMjM0NTY3ODlBQkNERUZHSEpLTE1OUFFSU1RVVldYWVphYmNkZWZnaGlqa21ub3BxcnN0dXZ3eHl6J1xuXG5tb2R1bGUuZXhwb3J0cyA9IGJhc2V4KEFMUEhBQkVUKVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2JzNTgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiIWZ1bmN0aW9uKHQsZSl7XCJvYmplY3RcIj09dHlwZW9mIGV4cG9ydHMmJlwib2JqZWN0XCI9PXR5cGVvZiBtb2R1bGU/bW9kdWxlLmV4cG9ydHM9ZSgpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGRlZmluZSYmZGVmaW5lLmFtZD9kZWZpbmUoXCJGaXZlQmVsbHNDb25kaXRpb25cIixbXSxlKTpcIm9iamVjdFwiPT10eXBlb2YgZXhwb3J0cz9leHBvcnRzLkZpdmVCZWxsc0NvbmRpdGlvbj1lKCk6dC5GaXZlQmVsbHNDb25kaXRpb249ZSgpfSh0aGlzLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUobil7aWYocltuXSlyZXR1cm4gcltuXS5leHBvcnRzO3ZhciBpPXJbbl09e2k6bixsOiExLGV4cG9ydHM6e319O3JldHVybiB0W25dLmNhbGwoaS5leHBvcnRzLGksaS5leHBvcnRzLGUpLGkubD0hMCxpLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIGUubT10LGUuYz1yLGUuaT1mdW5jdGlvbih0KXtyZXR1cm4gdH0sZS5kPWZ1bmN0aW9uKHQsZSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHtjb25maWd1cmFibGU6ITEsZW51bWVyYWJsZTohMCxnZXQ6cn0pfSxlLm49ZnVuY3Rpb24odCl7dmFyIHI9dCYmdC5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIHQuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gdH07cmV0dXJuIGUuZChyLFwiYVwiLHIpLHJ9LGUubz1mdW5jdGlvbih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX0sZS5wPVwiXCIsZShlLnM9NjEzKX0oW2Z1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigzMiksbz1yKDE0KSxhPXIoMTUpLGY9cigzMykscz1cInByb3RvdHlwZVwiLHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBoLGMsZCxsLHA9dCZ1LkYsYj10JnUuRyx2PXQmdS5TLHk9dCZ1LlAsbT10JnUuQixnPWI/bjp2P25bZV18fChuW2VdPXt9KToobltlXXx8e30pW3NdLHc9Yj9pOmlbZV18fChpW2VdPXt9KSxfPXdbc118fCh3W3NdPXt9KTtiJiYocj1lKTtmb3IoaCBpbiByKWM9IXAmJmcmJnZvaWQgMCE9PWdbaF0sZD0oYz9nOnIpW2hdLGw9bSYmYz9mKGQsbik6eSYmXCJmdW5jdGlvblwiPT10eXBlb2YgZD9mKEZ1bmN0aW9uLmNhbGwsZCk6ZCxnJiZhKGcsaCxkLHQmdS5VKSx3W2hdIT1kJiZvKHcsaCxsKSx5JiZfW2hdIT1kJiYoX1toXT1kKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCx0LmV4cG9ydHM9dX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0LG4pe2Z1bmN0aW9uIGkoKXt0cnl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoMSk7cmV0dXJuIHQuX19wcm90b19fPXtfX3Byb3RvX186VWludDhBcnJheS5wcm90b3R5cGUsZm9vOmZ1bmN0aW9uKCl7cmV0dXJuIDQyfX0sNDI9PT10LmZvbygpJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LnN1YmFycmF5JiYwPT09dC5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fWZ1bmN0aW9uIG8oKXtyZXR1cm4gdC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBhKGUscil7aWYobygpPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aFwiKTtyZXR1cm4gdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPW5ldyBVaW50OEFycmF5KHIpLGUuX19wcm90b19fPXQucHJvdG90eXBlKToobnVsbD09PWUmJihlPW5ldyB0KHIpKSxlLmxlbmd0aD1yKSxlfWZ1bmN0aW9uIHQoZSxyLG4pe2lmKCEodC5UWVBFRF9BUlJBWV9TVVBQT1JUfHx0aGlzIGluc3RhbmNlb2YgdCkpcmV0dXJuIG5ldyB0KGUscixuKTtpZihcIm51bWJlclwiPT10eXBlb2YgZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHIpdGhyb3cgbmV3IEVycm9yKFwiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7cmV0dXJuIGgodGhpcyxlKX1yZXR1cm4gZih0aGlzLGUscixuKX1mdW5jdGlvbiBmKHQsZSxyLG4pe2lmKFwibnVtYmVyXCI9PXR5cGVvZiBlKXRocm93IG5ldyBUeXBlRXJyb3IoJ1widmFsdWVcIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVyblwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmZSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyP2wodCxlLHIsbik6XCJzdHJpbmdcIj09dHlwZW9mIGU/Yyh0LGUscik6cCh0LGUpfWZ1bmN0aW9uIHModCl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKHQ8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignXCJzaXplXCIgYXJndW1lbnQgbXVzdCBub3QgYmUgbmVnYXRpdmUnKX1mdW5jdGlvbiB1KHQsZSxyLG4pe3JldHVybiBzKGUpLGU8PTA/YSh0LGUpOnZvaWQgMCE9PXI/XCJzdHJpbmdcIj09dHlwZW9mIG4/YSh0LGUpLmZpbGwocixuKTphKHQsZSkuZmlsbChyKTphKHQsZSl9ZnVuY3Rpb24gaChlLHIpe2lmKHMociksZT1hKGUscjwwPzA6MHxiKHIpKSwhdC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgbj0wO248cjsrK24pZVtuXT0wO3JldHVybiBlfWZ1bmN0aW9uIGMoZSxyLG4pe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBuJiZcIlwiIT09bnx8KG49XCJ1dGY4XCIpLCF0LmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJlbmNvZGluZ1wiIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgaT0wfHkocixuKTtlPWEoZSxpKTt2YXIgbz1lLndyaXRlKHIsbik7cmV0dXJuIG8hPT1pJiYoZT1lLnNsaWNlKDAsbykpLGV9ZnVuY3Rpb24gZCh0LGUpe3ZhciByPWUubGVuZ3RoPDA/MDowfGIoZS5sZW5ndGgpO3Q9YSh0LHIpO2Zvcih2YXIgbj0wO248cjtuKz0xKXRbbl09MjU1JmVbbl07cmV0dXJuIHR9ZnVuY3Rpb24gbChlLHIsbixpKXtpZihyLmJ5dGVMZW5ndGgsbjwwfHxyLmJ5dGVMZW5ndGg8bil0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHNcIik7aWYoci5ieXRlTGVuZ3RoPG4rKGl8fDApKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gcj12b2lkIDA9PT1uJiZ2b2lkIDA9PT1pP25ldyBVaW50OEFycmF5KHIpOnZvaWQgMD09PWk/bmV3IFVpbnQ4QXJyYXkocixuKTpuZXcgVWludDhBcnJheShyLG4saSksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyhlPXIsZS5fX3Byb3RvX189dC5wcm90b3R5cGUpOmU9ZChlLHIpLGV9ZnVuY3Rpb24gcChlLHIpe2lmKHQuaXNCdWZmZXIocikpe3ZhciBuPTB8YihyLmxlbmd0aCk7cmV0dXJuIGU9YShlLG4pLDA9PT1lLmxlbmd0aD9lOihyLmNvcHkoZSwwLDAsbiksZSl9aWYocil7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZyLmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyfHxcImxlbmd0aFwiaW4gcilyZXR1cm5cIm51bWJlclwiIT10eXBlb2Ygci5sZW5ndGh8fFooci5sZW5ndGgpP2EoZSwwKTpkKGUscik7aWYoXCJCdWZmZXJcIj09PXIudHlwZSYmUShyLmRhdGEpKXJldHVybiBkKGUsci5kYXRhKX10aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LlwiKX1mdW5jdGlvbiBiKHQpe2lmKHQ+PW8oKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkF0dGVtcHQgdG8gYWxsb2NhdGUgQnVmZmVyIGxhcmdlciB0aGFuIG1heGltdW0gc2l6ZTogMHhcIitvKCkudG9TdHJpbmcoMTYpK1wiIGJ5dGVzXCIpO3JldHVybiAwfHR9ZnVuY3Rpb24gdihlKXtyZXR1cm4rZSE9ZSYmKGU9MCksdC5hbGxvYygrZSl9ZnVuY3Rpb24geShlLHIpe2lmKHQuaXNCdWZmZXIoZSkpcmV0dXJuIGUubGVuZ3RoO2lmKFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihlPVwiXCIrZSk7dmFyIG49ZS5sZW5ndGg7aWYoMD09PW4pcmV0dXJuIDA7Zm9yKHZhciBpPSExOzspc3dpdGNoKHIpe2Nhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIG47Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZSB2b2lkIDA6cmV0dXJuIFYoZSkubGVuZ3RoO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiAyKm47Y2FzZVwiaGV4XCI6cmV0dXJuIG4+Pj4xO2Nhc2VcImJhc2U2NFwiOnJldHVybiBZKGUpLmxlbmd0aDtkZWZhdWx0OmlmKGkpcmV0dXJuIFYoZSkubGVuZ3RoO3I9KFwiXCIrcikudG9Mb3dlckNhc2UoKSxpPSEwfX1mdW5jdGlvbiBtKHQsZSxyKXt2YXIgbj0hMTtpZigodm9pZCAwPT09ZXx8ZTwwKSYmKGU9MCksZT50aGlzLmxlbmd0aClyZXR1cm5cIlwiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuXCJcIjtpZihyPj4+PTAsZT4+Pj0wLHI8PWUpcmV0dXJuXCJcIjtmb3IodHx8KHQ9XCJ1dGY4XCIpOzspc3dpdGNoKHQpe2Nhc2VcImhleFwiOnJldHVybiBUKHRoaXMsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gQih0aGlzLGUscik7Y2FzZVwiYXNjaWlcIjpyZXR1cm4gUih0aGlzLGUscik7Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6cmV0dXJuIFAodGhpcyxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBJKHRoaXMsZSxyKTtjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpyZXR1cm4gaih0aGlzLGUscik7ZGVmYXVsdDppZihuKXRocm93IG5ldyBUeXBlRXJyb3IoXCJVbmtub3duIGVuY29kaW5nOiBcIit0KTt0PSh0K1wiXCIpLnRvTG93ZXJDYXNlKCksbj0hMH19ZnVuY3Rpb24gZyh0LGUscil7dmFyIG49dFtlXTt0W2VdPXRbcl0sdFtyXT1ufWZ1bmN0aW9uIHcoZSxyLG4saSxvKXtpZigwPT09ZS5sZW5ndGgpcmV0dXJuLTE7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG4/KGk9bixuPTApOm4+MjE0NzQ4MzY0Nz9uPTIxNDc0ODM2NDc6bjwtMjE0NzQ4MzY0OCYmKG49LTIxNDc0ODM2NDgpLG49K24saXNOYU4obikmJihuPW8/MDplLmxlbmd0aC0xKSxuPDAmJihuPWUubGVuZ3RoK24pLG4+PWUubGVuZ3RoKXtpZihvKXJldHVybi0xO249ZS5sZW5ndGgtMX1lbHNlIGlmKG48MCl7aWYoIW8pcmV0dXJuLTE7bj0wfWlmKFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj10LmZyb20ocixpKSksdC5pc0J1ZmZlcihyKSlyZXR1cm4gMD09PXIubGVuZ3RoPy0xOl8oZSxyLG4saSxvKTtpZihcIm51bWJlclwiPT10eXBlb2YgcilyZXR1cm4gciY9MjU1LHQuVFlQRURfQVJSQVlfU1VQUE9SVCYmXCJmdW5jdGlvblwiPT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9vP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHIsbik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHIsbik6XyhlLFtyXSxuLGksbyk7dGhyb3cgbmV3IFR5cGVFcnJvcihcInZhbCBtdXN0IGJlIHN0cmluZywgbnVtYmVyIG9yIEJ1ZmZlclwiKX1mdW5jdGlvbiBfKHQsZSxyLG4saSl7ZnVuY3Rpb24gbyh0LGUpe3JldHVybiAxPT09YT90W2VdOnQucmVhZFVJbnQxNkJFKGUqYSl9dmFyIGE9MSxmPXQubGVuZ3RoLHM9ZS5sZW5ndGg7aWYodm9pZCAwIT09biYmKG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCksXCJ1Y3MyXCI9PT1ufHxcInVjcy0yXCI9PT1ufHxcInV0ZjE2bGVcIj09PW58fFwidXRmLTE2bGVcIj09PW4pKXtpZih0Lmxlbmd0aDwyfHxlLmxlbmd0aDwyKXJldHVybi0xO2E9MixmLz0yLHMvPTIsci89Mn12YXIgdTtpZihpKXt2YXIgaD0tMTtmb3IodT1yO3U8Zjt1KyspaWYobyh0LHUpPT09byhlLGg9PT0tMT8wOnUtaCkpe2lmKGg9PT0tMSYmKGg9dSksdS1oKzE9PT1zKXJldHVybiBoKmF9ZWxzZSBoIT09LTEmJih1LT11LWgpLGg9LTF9ZWxzZSBmb3IocitzPmYmJihyPWYtcyksdT1yO3U+PTA7dS0tKXtmb3IodmFyIGM9ITAsZD0wO2Q8cztkKyspaWYobyh0LHUrZCkhPT1vKGUsZCkpe2M9ITE7YnJlYWt9aWYoYylyZXR1cm4gdX1yZXR1cm4tMX1mdW5jdGlvbiBNKHQsZSxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPXQubGVuZ3RoLXI7bj8obj1OdW1iZXIobiksbj5pJiYobj1pKSk6bj1pO3ZhciBvPWUubGVuZ3RoO2lmKG8lMiE9PTApdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgaGV4IHN0cmluZ1wiKTtuPm8vMiYmKG49by8yKTtmb3IodmFyIGE9MDthPG47KythKXt2YXIgZj1wYXJzZUludChlLnN1YnN0cigyKmEsMiksMTYpO2lmKGlzTmFOKGYpKXJldHVybiBhO3RbcithXT1mfXJldHVybiBhfWZ1bmN0aW9uIFModCxlLHIsbil7cmV0dXJuIFcoVihlLHQubGVuZ3RoLXIpLHQscixuKX1mdW5jdGlvbiBFKHQsZSxyLG4pe3JldHVybiBXKEgoZSksdCxyLG4pfWZ1bmN0aW9uIEEodCxlLHIsbil7cmV0dXJuIEUodCxlLHIsbil9ZnVuY3Rpb24gayh0LGUscixuKXtyZXR1cm4gVyhZKGUpLHQscixuKX1mdW5jdGlvbiB4KHQsZSxyLG4pe3JldHVybiBXKFgoZSx0Lmxlbmd0aC1yKSx0LHIsbil9ZnVuY3Rpb24gSSh0LGUscil7cmV0dXJuIDA9PT1lJiZyPT09dC5sZW5ndGg/Si5mcm9tQnl0ZUFycmF5KHQpOkouZnJvbUJ5dGVBcnJheSh0LnNsaWNlKGUscikpfWZ1bmN0aW9uIEIodCxlLHIpe3I9TWF0aC5taW4odC5sZW5ndGgscik7Zm9yKHZhciBuPVtdLGk9ZTtpPHI7KXt2YXIgbz10W2ldLGE9bnVsbCxmPW8+MjM5PzQ6bz4yMjM/MzpvPjE5MT8yOjE7aWYoaStmPD1yKXt2YXIgcyx1LGgsYztzd2l0Y2goZil7Y2FzZSAxOm88MTI4JiYoYT1vKTticmVhaztjYXNlIDI6cz10W2krMV0sMTI4PT09KDE5MiZzKSYmKGM9KDMxJm8pPDw2fDYzJnMsYz4xMjcmJihhPWMpKTticmVhaztjYXNlIDM6cz10W2krMV0sdT10W2krMl0sMTI4PT09KDE5MiZzKSYmMTI4PT09KDE5MiZ1KSYmKGM9KDE1Jm8pPDwxMnwoNjMmcyk8PDZ8NjMmdSxjPjIwNDcmJihjPDU1Mjk2fHxjPjU3MzQzKSYmKGE9YykpO2JyZWFrO2Nhc2UgNDpzPXRbaSsxXSx1PXRbaSsyXSxoPXRbaSszXSwxMjg9PT0oMTkyJnMpJiYxMjg9PT0oMTkyJnUpJiYxMjg9PT0oMTkyJmgpJiYoYz0oMTUmbyk8PDE4fCg2MyZzKTw8MTJ8KDYzJnUpPDw2fDYzJmgsYz42NTUzNSYmYzwxMTE0MTEyJiYoYT1jKSl9fW51bGw9PT1hPyhhPTY1NTMzLGY9MSk6YT42NTUzNSYmKGEtPTY1NTM2LG4ucHVzaChhPj4+MTAmMTAyM3w1NTI5NiksYT01NjMyMHwxMDIzJmEpLG4ucHVzaChhKSxpKz1mfXJldHVybiBPKG4pfWZ1bmN0aW9uIE8odCl7dmFyIGU9dC5sZW5ndGg7aWYoZTw9dHQpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQpO2Zvcih2YXIgcj1cIlwiLG49MDtuPGU7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLHQuc2xpY2UobixuKz10dCkpO3JldHVybiByfWZ1bmN0aW9uIFIodCxlLHIpe3ZhciBuPVwiXCI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUoMTI3JnRbaV0pO3JldHVybiBufWZ1bmN0aW9uIFAodCxlLHIpe3ZhciBuPVwiXCI7cj1NYXRoLm1pbih0Lmxlbmd0aCxyKTtmb3IodmFyIGk9ZTtpPHI7KytpKW4rPVN0cmluZy5mcm9tQ2hhckNvZGUodFtpXSk7cmV0dXJuIG59ZnVuY3Rpb24gVCh0LGUscil7dmFyIG49dC5sZW5ndGg7KCFlfHxlPDApJiYoZT0wKSwoIXJ8fHI8MHx8cj5uKSYmKHI9bik7Zm9yKHZhciBpPVwiXCIsbz1lO288cjsrK28paSs9Ryh0W29dKTtyZXR1cm4gaX1mdW5jdGlvbiBqKHQsZSxyKXtmb3IodmFyIG49dC5zbGljZShlLHIpLGk9XCJcIixvPTA7bzxuLmxlbmd0aDtvKz0yKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobltvXSsyNTYqbltvKzFdKTtyZXR1cm4gaX1mdW5jdGlvbiBDKHQsZSxyKXtpZih0JTEhPT0wfHx0PDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJvZmZzZXQgaXMgbm90IHVpbnRcIik7aWYodCtlPnIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoXCIpfWZ1bmN0aW9uIE4oZSxyLG4saSxvLGEpe2lmKCF0LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoJ1wiYnVmZmVyXCIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHI+b3x8cjxhKXRocm93IG5ldyBSYW5nZUVycm9yKCdcInZhbHVlXCIgYXJndW1lbnQgaXMgb3V0IG9mIGJvdW5kcycpO2lmKG4raT5lLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKX1mdW5jdGlvbiBMKHQsZSxyLG4pe2U8MCYmKGU9NjU1MzUrZSsxKTtmb3IodmFyIGk9MCxvPU1hdGgubWluKHQubGVuZ3RoLXIsMik7aTxvOysraSl0W3IraV09KGUmMjU1PDw4KihuP2k6MS1pKSk+Pj44KihuP2k6MS1pKX1mdW5jdGlvbiBVKHQsZSxyLG4pe2U8MCYmKGU9NDI5NDk2NzI5NStlKzEpO2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgtciw0KTtpPG87KytpKXRbcitpXT1lPj4+OCoobj9pOjMtaSkmMjU1fWZ1bmN0aW9uIHoodCxlLHIsbixpLG8pe2lmKHIrbj50Lmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIkluZGV4IG91dCBvZiByYW5nZVwiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJJbmRleCBvdXQgb2YgcmFuZ2VcIil9ZnVuY3Rpb24gRCh0LGUscixuLGkpe3JldHVybiBpfHx6KHQsZSxyLDQsMy40MDI4MjM0NjYzODUyODg2ZTM4LC0zLjQwMjgyMzQ2NjM4NTI4ODZlMzgpLCQud3JpdGUodCxlLHIsbiwyMyw0KSxyKzR9ZnVuY3Rpb24gcSh0LGUscixuLGkpe3JldHVybiBpfHx6KHQsZSxyLDgsMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCwtMS43OTc2OTMxMzQ4NjIzMTU3ZTMwOCksJC53cml0ZSh0LGUscixuLDUyLDgpLHIrOH1mdW5jdGlvbiBGKHQpe2lmKHQ9Syh0KS5yZXBsYWNlKGV0LFwiXCIpLHQubGVuZ3RoPDIpcmV0dXJuXCJcIjtmb3IoO3QubGVuZ3RoJTQhPT0wOyl0Kz1cIj1cIjtyZXR1cm4gdH1mdW5jdGlvbiBLKHQpe3JldHVybiB0LnRyaW0/dC50cmltKCk6dC5yZXBsYWNlKC9eXFxzK3xcXHMrJC9nLFwiXCIpfWZ1bmN0aW9uIEcodCl7cmV0dXJuIHQ8MTY/XCIwXCIrdC50b1N0cmluZygxNik6dC50b1N0cmluZygxNil9ZnVuY3Rpb24gVih0LGUpe2U9ZXx8MS8wO2Zvcih2YXIgcixuPXQubGVuZ3RoLGk9bnVsbCxvPVtdLGE9MDthPG47KythKXtpZihyPXQuY2hhckNvZGVBdChhKSxyPjU1Mjk1JiZyPDU3MzQ0KXtpZighaSl7aWYocj41NjMxOSl7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKGErMT09PW4peyhlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1pPXI7Y29udGludWV9aWYocjw1NjMyMCl7KGUtPTMpPi0xJiZvLnB1c2goMjM5LDE5MSwxODkpLGk9cjtjb250aW51ZX1yPShpLTU1Mjk2PDwxMHxyLTU2MzIwKSs2NTUzNn1lbHNlIGkmJihlLT0zKT4tMSYmby5wdXNoKDIzOSwxOTEsMTg5KTtpZihpPW51bGwscjwxMjgpe2lmKChlLT0xKTwwKWJyZWFrO28ucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKGUtPTIpPDApYnJlYWs7by5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKChlLT0zKTwwKWJyZWFrO28ucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcihcIkludmFsaWQgY29kZSBwb2ludFwiKTtpZigoZS09NCk8MClicmVhaztvLnB1c2gocj4+MTh8MjQwLHI+PjEyJjYzfDEyOCxyPj42JjYzfDEyOCw2MyZyfDEyOCl9fXJldHVybiBvfWZ1bmN0aW9uIEgodCl7Zm9yKHZhciBlPVtdLHI9MDtyPHQubGVuZ3RoOysrcillLnB1c2goMjU1JnQuY2hhckNvZGVBdChyKSk7cmV0dXJuIGV9ZnVuY3Rpb24gWCh0LGUpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTx0Lmxlbmd0aCYmISgoZS09Mik8MCk7KythKXI9dC5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99ZnVuY3Rpb24gWSh0KXtyZXR1cm4gSi50b0J5dGVBcnJheShGKHQpKX1mdW5jdGlvbiBXKHQsZSxyLG4pe2Zvcih2YXIgaT0wO2k8biYmIShpK3I+PWUubGVuZ3RofHxpPj10Lmxlbmd0aCk7KytpKWVbaStyXT10W2ldO3JldHVybiBpfWZ1bmN0aW9uIFoodCl7cmV0dXJuIHQhPT10fXZhciBKPXIoNDkwKSwkPXIoNDkxKSxRPXIoNDkyKTtlLkJ1ZmZlcj10LGUuU2xvd0J1ZmZlcj12LGUuSU5TUEVDVF9NQVhfQllURVM9NTAsdC5UWVBFRF9BUlJBWV9TVVBQT1JUPXZvaWQgMCE9PW4uVFlQRURfQVJSQVlfU1VQUE9SVD9uLlRZUEVEX0FSUkFZX1NVUFBPUlQ6aSgpLGUua01heExlbmd0aD1vKCksdC5wb29sU2l6ZT04MTkyLHQuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXQucHJvdG90eXBlLGV9LHQuZnJvbT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGYobnVsbCx0LGUscil9LHQuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHQucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx0Ll9fcHJvdG9fXz1VaW50OEFycmF5LFwidW5kZWZpbmVkXCIhPXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5zcGVjaWVzJiZ0W1N5bWJvbC5zcGVjaWVzXT09PXQmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFN5bWJvbC5zcGVjaWVzLHt2YWx1ZTpudWxsLGNvbmZpZ3VyYWJsZTohMH0pKSx0LmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdShudWxsLHQsZSxyKX0sdC5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtyZXR1cm4gaChudWxsLHQpfSx0LmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbih0KXtyZXR1cm4gaChudWxsLHQpfSx0LmlzQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiEobnVsbD09dHx8IXQuX2lzQnVmZmVyKX0sdC5jb21wYXJlPWZ1bmN0aW9uKGUscil7aWYoIXQuaXNCdWZmZXIoZSl8fCF0LmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgbXVzdCBiZSBCdWZmZXJzXCIpO2lmKGU9PT1yKXJldHVybiAwO2Zvcih2YXIgbj1lLmxlbmd0aCxpPXIubGVuZ3RoLG89MCxhPU1hdGgubWluKG4saSk7bzxhOysrbylpZihlW29dIT09cltvXSl7bj1lW29dLGk9cltvXTticmVha31yZXR1cm4gbjxpPy0xOmk8bj8xOjB9LHQuaXNFbmNvZGluZz1mdW5jdGlvbih0KXtzd2l0Y2goU3RyaW5nKHQpLnRvTG93ZXJDYXNlKCkpe2Nhc2VcImhleFwiOmNhc2VcInV0ZjhcIjpjYXNlXCJ1dGYtOFwiOmNhc2VcImFzY2lpXCI6Y2FzZVwibGF0aW4xXCI6Y2FzZVwiYmluYXJ5XCI6Y2FzZVwiYmFzZTY0XCI6Y2FzZVwidWNzMlwiOmNhc2VcInVjcy0yXCI6Y2FzZVwidXRmMTZsZVwiOmNhc2VcInV0Zi0xNmxlXCI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LHQuY29uY2F0PWZ1bmN0aW9uKGUscil7aWYoIVEoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJsaXN0XCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0LmFsbG9jKDApO3ZhciBuO2lmKHZvaWQgMD09PXIpZm9yKHI9MCxuPTA7bjxlLmxlbmd0aDsrK24pcis9ZVtuXS5sZW5ndGg7dmFyIGk9dC5hbGxvY1Vuc2FmZShyKSxvPTA7Zm9yKG49MDtuPGUubGVuZ3RoOysrbil7dmFyIGE9ZVtuXTtpZighdC5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImxpc3RcIiBhcmd1bWVudCBtdXN0IGJlIGFuIEFycmF5IG9mIEJ1ZmZlcnMnKTthLmNvcHkoaSxvKSxvKz1hLmxlbmd0aH1yZXR1cm4gaX0sdC5ieXRlTGVuZ3RoPXksdC5wcm90b3R5cGUuX2lzQnVmZmVyPSEwLHQucHJvdG90eXBlLnN3YXAxNj1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlMiE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9MilnKHRoaXMsZSxlKzEpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS5zd2FwMzI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLmxlbmd0aDtpZih0JTQhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHNcIik7Zm9yKHZhciBlPTA7ZTx0O2UrPTQpZyh0aGlzLGUsZSszKSxnKHRoaXMsZSsxLGUrMik7cmV0dXJuIHRoaXN9LHQucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciB0PXRoaXMubGVuZ3RoO2lmKHQlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0c1wiKTtmb3IodmFyIGU9MDtlPHQ7ZSs9OClnKHRoaXMsZSxlKzcpLGcodGhpcyxlKzEsZSs2KSxnKHRoaXMsZSsyLGUrNSksZyh0aGlzLGUrMyxlKzQpO3JldHVybiB0aGlzfSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3ZhciB0PTB8dGhpcy5sZW5ndGg7cmV0dXJuIDA9PT10P1wiXCI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qih0aGlzLDAsdCk6bS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LHQucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighdC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT10LmNvbXBhcmUodGhpcyxlKX0sdC5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciB0PVwiXCIscj1lLklOU1BFQ1RfTUFYX0JZVEVTO3JldHVybiB0aGlzLmxlbmd0aD4wJiYodD10aGlzLnRvU3RyaW5nKFwiaGV4XCIsMCxyKS5tYXRjaCgvLnsyfS9nKS5qb2luKFwiIFwiKSx0aGlzLmxlbmd0aD5yJiYodCs9XCIgLi4uIFwiKSksXCI8QnVmZmVyIFwiK3QrXCI+XCJ9LHQucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSxyLG4saSxvKXtpZighdC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlclwiKTtpZih2b2lkIDA9PT1yJiYocj0wKSx2b2lkIDA9PT1uJiYobj1lP2UubGVuZ3RoOjApLHZvaWQgMD09PWkmJihpPTApLHZvaWQgMD09PW8mJihvPXRoaXMubGVuZ3RoKSxyPDB8fG4+ZS5sZW5ndGh8fGk8MHx8bz50aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcIm91dCBvZiByYW5nZSBpbmRleFwiKTtpZihpPj1vJiZyPj1uKXJldHVybiAwO2lmKGk+PW8pcmV0dXJuLTE7aWYocj49bilyZXR1cm4gMTtpZihyPj4+PTAsbj4+Pj0wLGk+Pj49MCxvPj4+PTAsdGhpcz09PWUpcmV0dXJuIDA7Zm9yKHZhciBhPW8taSxmPW4tcixzPU1hdGgubWluKGEsZiksdT10aGlzLnNsaWNlKGksbyksaD1lLnNsaWNlKHIsbiksYz0wO2M8czsrK2MpaWYodVtjXSE9PWhbY10pe2E9dVtjXSxmPWhbY107YnJlYWt9cmV0dXJuIGE8Zj8tMTpmPGE/MTowfSx0LnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuaW5kZXhPZih0LGUscikhPT0tMX0sdC5wcm90b3R5cGUuaW5kZXhPZj1mdW5jdGlvbih0LGUscil7cmV0dXJuIHcodGhpcyx0LGUsciwhMCl9LHQucHJvdG90eXBlLmxhc3RJbmRleE9mPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdyh0aGlzLHQsZSxyLCExKX0sdC5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodm9pZCAwPT09ZSluPVwidXRmOFwiLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2UgaWYodm9pZCAwPT09ciYmXCJzdHJpbmdcIj09dHlwZW9mIGUpbj1lLHI9dGhpcy5sZW5ndGgsZT0wO2Vsc2V7aWYoIWlzRmluaXRlKGUpKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkXCIpO2V8PTAsaXNGaW5pdGUocik/KHJ8PTAsdm9pZCAwPT09biYmKG49XCJ1dGY4XCIpKToobj1yLHI9dm9pZCAwKX12YXIgaT10aGlzLmxlbmd0aC1lO2lmKCh2b2lkIDA9PT1yfHxyPmkpJiYocj1pKSx0Lmxlbmd0aD4wJiYocjwwfHxlPDApfHxlPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiQXR0ZW1wdCB0byB3cml0ZSBvdXRzaWRlIGJ1ZmZlciBib3VuZHNcIik7bnx8KG49XCJ1dGY4XCIpO2Zvcih2YXIgbz0hMTs7KXN3aXRjaChuKXtjYXNlXCJoZXhcIjpyZXR1cm4gTSh0aGlzLHQsZSxyKTtjYXNlXCJ1dGY4XCI6Y2FzZVwidXRmLThcIjpyZXR1cm4gUyh0aGlzLHQsZSxyKTtjYXNlXCJhc2NpaVwiOnJldHVybiBFKHRoaXMsdCxlLHIpO2Nhc2VcImxhdGluMVwiOmNhc2VcImJpbmFyeVwiOnJldHVybiBBKHRoaXMsdCxlLHIpO2Nhc2VcImJhc2U2NFwiOnJldHVybiBrKHRoaXMsdCxlLHIpO2Nhc2VcInVjczJcIjpjYXNlXCJ1Y3MtMlwiOmNhc2VcInV0ZjE2bGVcIjpjYXNlXCJ1dGYtMTZsZVwiOnJldHVybiB4KHRoaXMsdCxlLHIpO2RlZmF1bHQ6aWYobyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrbik7bj0oXCJcIituKS50b0xvd2VyQ2FzZSgpLG89ITB9fSx0LnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZTpcIkJ1ZmZlclwiLGRhdGE6QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwodGhpcy5fYXJyfHx0aGlzLDApfX07dmFyIHR0PTQwOTY7dC5wcm90b3R5cGUuc2xpY2U9ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmxlbmd0aDtlPX5+ZSxyPXZvaWQgMD09PXI/bjp+fnIsZTwwPyhlKz1uLGU8MCYmKGU9MCkpOmU+biYmKGU9bikscjwwPyhyKz1uLHI8MCYmKHI9MCkpOnI+biYmKHI9bikscjxlJiYocj1lKTt2YXIgaTtpZih0LlRZUEVEX0FSUkFZX1NVUFBPUlQpaT10aGlzLnN1YmFycmF5KGUsciksaS5fX3Byb3RvX189dC5wcm90b3R5cGU7ZWxzZXt2YXIgbz1yLWU7aT1uZXcgdChvLHZvaWQgMCk7Zm9yKHZhciBhPTA7YTxvOysrYSlpW2FdPXRoaXNbYStlXX1yZXR1cm4gaX0sdC5wcm90b3R5cGUucmVhZFVJbnRMRT1mdW5jdGlvbih0LGUscil7dHw9MCxlfD0wLHJ8fEModCxlLHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1t0XSxpPTEsbz0wOysrbzxlJiYoaSo9MjU2KTspbis9dGhpc1t0K29dKmk7cmV0dXJuIG59LHQucHJvdG90eXBlLnJlYWRVSW50QkU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdCstLWVdLGk9MTtlPjAmJihpKj0yNTYpOyluKz10aGlzW3QrLS1lXSppO3JldHVybiBufSx0LnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDEsdGhpcy5sZW5ndGgpLHRoaXNbdF19LHQucHJvdG90eXBlLnJlYWRVSW50MTZMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XXx0aGlzW3QrMV08PDh9LHQucHJvdG90eXBlLnJlYWRVSW50MTZCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMix0aGlzLmxlbmd0aCksdGhpc1t0XTw8OHx0aGlzW3QrMV19LHQucHJvdG90eXBlLnJlYWRVSW50MzJMRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsNCx0aGlzLmxlbmd0aCksKHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTYpKzE2Nzc3MjE2KnRoaXNbdCszXX0sdC5wcm90b3R5cGUucmVhZFVJbnQzMkJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwxNjc3NzIxNip0aGlzW3RdKyh0aGlzW3QrMV08PDE2fHRoaXNbdCsyXTw8OHx0aGlzW3QrM10pfSx0LnByb3RvdHlwZS5yZWFkSW50TEU9ZnVuY3Rpb24odCxlLHIpe3R8PTAsZXw9MCxyfHxDKHQsZSx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXRoaXNbdF0saT0xLG89MDsrK288ZSYmKGkqPTI1Nik7KW4rPXRoaXNbdCtvXSppO3JldHVybiBpKj0xMjgsbj49aSYmKG4tPU1hdGgucG93KDIsOCplKSksbn0sdC5wcm90b3R5cGUucmVhZEludEJFPWZ1bmN0aW9uKHQsZSxyKXt0fD0wLGV8PTAscnx8Qyh0LGUsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj1lLGk9MSxvPXRoaXNbdCstLW5dO24+MCYmKGkqPTI1Nik7KW8rPXRoaXNbdCstLW5dKmk7cmV0dXJuIGkqPTEyOCxvPj1pJiYoby09TWF0aC5wb3coMiw4KmUpKSxvfSx0LnByb3RvdHlwZS5yZWFkSW50OD1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsMSx0aGlzLmxlbmd0aCksMTI4JnRoaXNbdF0/KDI1NS10aGlzW3RdKzEpKi0xOnRoaXNbdF19LHQucHJvdG90eXBlLnJlYWRJbnQxNkxFPWZ1bmN0aW9uKHQsZSl7ZXx8Qyh0LDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbdF18dGhpc1t0KzFdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSx0LnByb3RvdHlwZS5yZWFkSW50MTZCRT1mdW5jdGlvbih0LGUpe2V8fEModCwyLHRoaXMubGVuZ3RoKTt2YXIgcj10aGlzW3QrMV18dGhpc1t0XTw8ODtyZXR1cm4gMzI3Njgmcj80Mjk0OTAxNzYwfHI6cn0sdC5wcm90b3R5cGUucmVhZEludDMyTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF18dGhpc1t0KzFdPDw4fHRoaXNbdCsyXTw8MTZ8dGhpc1t0KzNdPDwyNH0sdC5wcm90b3R5cGUucmVhZEludDMyQkU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLHRoaXNbdF08PDI0fHRoaXNbdCsxXTw8MTZ8dGhpc1t0KzJdPDw4fHRoaXNbdCszXX0sdC5wcm90b3R5cGUucmVhZEZsb2F0TEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDQsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITAsMjMsNCl9LHQucHJvdG90eXBlLnJlYWRGbG9hdEJFPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGV8fEModCw0LHRoaXMubGVuZ3RoKSwkLnJlYWQodGhpcyx0LCExLDIzLDQpfSx0LnByb3RvdHlwZS5yZWFkRG91YmxlTEU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZXx8Qyh0LDgsdGhpcy5sZW5ndGgpLCQucmVhZCh0aGlzLHQsITAsNTIsOCl9LHQucHJvdG90eXBlLnJlYWREb3VibGVCRT1mdW5jdGlvbih0LGUpe3JldHVybiBlfHxDKHQsOCx0aGlzLmxlbmd0aCksJC5yZWFkKHRoaXMsdCwhMSw1Miw4KX0sdC5wcm90b3R5cGUud3JpdGVVSW50TEU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLHJ8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyKS0xO04odGhpcyx0LGUscixpLDApfXZhciBvPTEsYT0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrYTxyJiYobyo9MjU2KTspdGhpc1tlK2FdPXQvbyYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVVSW50QkU9ZnVuY3Rpb24odCxlLHIsbil7aWYodD0rdCxlfD0wLHJ8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyKS0xO04odGhpcyx0LGUscixpLDApfXZhciBvPXItMSxhPTE7Zm9yKHRoaXNbZStvXT0yNTUmdDstLW8+PTAmJihhKj0yNTYpOyl0aGlzW2Urb109dC9hJjI1NTtyZXR1cm4gZStyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMSwyNTUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3JdPTI1NSZlLHIrMX0sdC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDIsNjU1MzUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCk6TCh0aGlzLGUsciwhMCkscisyfSx0LnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMiw2NTUzNSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjgsdGhpc1tyKzFdPTI1NSZlKTpMKHRoaXMsZSxyLCExKSxyKzJ9LHQucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDQyOTQ5NjcyOTUsMCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3IrM109ZT4+PjI0LHRoaXNbcisyXT1lPj4+MTYsdGhpc1tyKzFdPWU+Pj44LHRoaXNbcl09MjU1JmUpOlUodGhpcyxlLHIsITApLHIrNH0sdC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsNDI5NDk2NzI5NSwwKSx0LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbcl09ZT4+PjI0LHRoaXNbcisxXT1lPj4+MTYsdGhpc1tyKzJdPWU+Pj44LHRoaXNbciszXT0yNTUmZSk6VSh0aGlzLGUsciwhMSkscis0fSx0LnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHQ9K3QsZXw9MCwhbil7dmFyIGk9TWF0aC5wb3coMiw4KnItMSk7Tih0aGlzLHQsZSxyLGktMSwtaSl9dmFyIG89MCxhPTEsZj0wO2Zvcih0aGlzW2VdPTI1NSZ0OysrbzxyJiYoYSo9MjU2KTspdDwwJiYwPT09ZiYmMCE9PXRoaXNbZStvLTFdJiYoZj0xKSx0aGlzW2Urb109KHQvYT4+MCktZiYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbih0LGUscixuKXtpZih0PSt0LGV8PTAsIW4pe3ZhciBpPU1hdGgucG93KDIsOCpyLTEpO04odGhpcyx0LGUscixpLTEsLWkpfXZhciBvPXItMSxhPTEsZj0wO2Zvcih0aGlzW2Urb109MjU1JnQ7LS1vPj0wJiYoYSo9MjU2KTspdDwwJiYwPT09ZiYmMCE9PXRoaXNbZStvKzFdJiYoZj0xKSx0aGlzW2Urb109KHQvYT4+MCktZiYyNTU7cmV0dXJuIGUrcn0sdC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gZT0rZSxyfD0wLG58fE4odGhpcyxlLHIsMSwxMjcsLTEyOCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbcl09MjU1JmUscisxfSx0LnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPTI1NSZlLHRoaXNbcisxXT1lPj4+OCk6TCh0aGlzLGUsciwhMCkscisyfSx0LnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciwyLDMyNzY3LC0zMjc2OCksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj44LHRoaXNbcisxXT0yNTUmZSk6TCh0aGlzLGUsciwhMSkscisyfSx0LnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSxyLG4pe3JldHVybiBlPStlLHJ8PTAsbnx8Tih0aGlzLGUsciw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLHQuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1tyXT0yNTUmZSx0aGlzW3IrMV09ZT4+PjgsdGhpc1tyKzJdPWU+Pj4xNix0aGlzW3IrM109ZT4+PjI0KTpVKHRoaXMsZSxyLCEwKSxyKzR9LHQucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHIsbil7cmV0dXJuIGU9K2Uscnw9MCxufHxOKHRoaXMsZSxyLDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksdC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3JdPWU+Pj4yNCx0aGlzW3IrMV09ZT4+PjE2LHRoaXNbcisyXT1lPj4+OCx0aGlzW3IrM109MjU1JmUpOlUodGhpcyxlLHIsITEpLHIrNH0sdC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMCxyKX0sdC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gRCh0aGlzLHQsZSwhMSxyKX0sdC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbih0LGUscil7cmV0dXJuIHEodGhpcyx0LGUsITAscil9LHQucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBxKHRoaXMsdCxlLCExLHIpfSx0LnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUscixuLGkpe2lmKG58fChuPTApLGl8fDA9PT1pfHwoaT10aGlzLmxlbmd0aCkscj49ZS5sZW5ndGgmJihyPWUubGVuZ3RoKSxyfHwocj0wKSxpPjAmJmk8biYmKGk9biksaT09PW4pcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYocjwwKXRocm93IG5ldyBSYW5nZUVycm9yKFwidGFyZ2V0U3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihuPDB8fG4+PXRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kc1wiKTtpZihpPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoXCJzb3VyY2VFbmQgb3V0IG9mIGJvdW5kc1wiKTtpPnRoaXMubGVuZ3RoJiYoaT10aGlzLmxlbmd0aCksZS5sZW5ndGgtcjxpLW4mJihpPWUubGVuZ3RoLXIrbik7dmFyIG8sYT1pLW47aWYodGhpcz09PWUmJm48ciYmcjxpKWZvcihvPWEtMTtvPj0wOy0tbyllW28rcl09dGhpc1tvK25dO2Vsc2UgaWYoYTwxZTN8fCF0LlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKG89MDtvPGE7KytvKWVbbytyXT10aGlzW28rbl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkobixuK2EpLHIpO3JldHVybiBhfSx0LnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUscixuLGkpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiBlKXtpZihcInN0cmluZ1wiPT10eXBlb2Ygcj8oaT1yLHI9MCxuPXRoaXMubGVuZ3RoKTpcInN0cmluZ1wiPT10eXBlb2YgbiYmKGk9bixuPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBvPWUuY2hhckNvZGVBdCgwKTtvPDI1NiYmKGU9byl9aWYodm9pZCAwIT09aSYmXCJzdHJpbmdcIiE9dHlwZW9mIGkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJiF0LmlzRW5jb2RpbmcoaSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlVua25vd24gZW5jb2Rpbmc6IFwiK2kpfWVsc2VcIm51bWJlclwiPT10eXBlb2YgZSYmKGUmPTI1NSk7aWYocjwwfHx0aGlzLmxlbmd0aDxyfHx0aGlzLmxlbmd0aDxuKXRocm93IG5ldyBSYW5nZUVycm9yKFwiT3V0IG9mIHJhbmdlIGluZGV4XCIpO2lmKG48PXIpcmV0dXJuIHRoaXM7cj4+Pj0wLG49dm9pZCAwPT09bj90aGlzLmxlbmd0aDpuPj4+MCxlfHwoZT0wKTt2YXIgYTtpZihcIm51bWJlclwiPT10eXBlb2YgZSlmb3IoYT1yO2E8bjsrK2EpdGhpc1thXT1lO2Vsc2V7dmFyIGY9dC5pc0J1ZmZlcihlKT9lOlYobmV3IHQoZSxpKS50b1N0cmluZygpKSxzPWYubGVuZ3RoO2ZvcihhPTA7YTxuLXI7KythKXRoaXNbYStyXT1mW2Elc119cmV0dXJuIHRoaXN9O3ZhciBldD0vW14rXFwvMC05QS1aYS16LV9dL2d9KS5jYWxsKGUscigxKS5CdWZmZXIscigzOSkpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZighbih0KSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYW4gb2JqZWN0IVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdD9udWxsIT09dDpcImZ1bmN0aW9uXCI9PXR5cGVvZiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODcpKFwid2tzXCIpLGk9cig0OCksbz1yKDQpLlN5bWJvbCxhPVwiZnVuY3Rpb25cIj09dHlwZW9mIG8sZj10LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIG5bdF18fChuW3RdPWEmJm9bdF18fChhP286aSkoXCJTeW1ib2wuXCIrdCkpfTtmLnN0b3JlPW59LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9IXIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpLGk9cigxNzQpLG89cigyOSksYT1PYmplY3QuZGVmaW5lUHJvcGVydHk7ZS5mPXIoOCk/T2JqZWN0LmRlZmluZVByb3BlcnR5OmZ1bmN0aW9uKHQsZSxyKXtpZihuKHQpLGU9byhlLCEwKSxuKHIpLGkpdHJ5e3JldHVybiBhKHQsZSxyKX1jYXRjaCh0KXt9aWYoXCJnZXRcImluIHJ8fFwic2V0XCJpbiByKXRocm93IFR5cGVFcnJvcihcIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkIVwiKTtyZXR1cm5cInZhbHVlXCJpbiByJiYodFtlXT1yLnZhbHVlKSx0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzgpLGk9TWF0aC5taW47dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0PjA/aShuKHQpLDkwMDcxOTkyNTQ3NDA5OTEpOjB9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBPYmplY3Qobih0KSl9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9Lmhhc093blByb3BlcnR5O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiByLmNhbGwodCxlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHQpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGEgZnVuY3Rpb24hXCIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDM3KTt0LmV4cG9ydHM9cig4KT9mdW5jdGlvbih0LGUscil7cmV0dXJuIG4uZih0LGUsaSgxLHIpKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0W2VdPXIsdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigxNCksbz1yKDEyKSxhPXIoNDgpKFwic3JjXCIpLGY9XCJ0b1N0cmluZ1wiLHM9RnVuY3Rpb25bZl0sdT0oXCJcIitzKS5zcGxpdChmKTtyKDMyKS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKHQpe3JldHVybiBzLmNhbGwodCl9LCh0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZil7dmFyIHM9XCJmdW5jdGlvblwiPT10eXBlb2YgcjtzJiYobyhyLFwibmFtZVwiKXx8aShyLFwibmFtZVwiLGUpKSx0W2VdIT09ciYmKHMmJihvKHIsYSl8fGkocixhLHRbZV0/XCJcIit0W2VdOnUuam9pbihTdHJpbmcoZSkpKSksdD09PW4/dFtlXT1yOmY/dFtlXT90W2VdPXI6aSh0LGUscik6KGRlbGV0ZSB0W2VdLGkodCxlLHIpKSl9KShGdW5jdGlvbi5wcm90b3R5cGUsZixmdW5jdGlvbigpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXMmJnRoaXNbYV18fHMuY2FsbCh0aGlzKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNSksbz1yKDI0KSxhPS9cIi9nLGY9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9U3RyaW5nKG8odCkpLGY9XCI8XCIrZTtyZXR1cm5cIlwiIT09ciYmKGYrPVwiIFwiK3IrJz1cIicrU3RyaW5nKG4pLnJlcGxhY2UoYSxcIiZxdW90O1wiKSsnXCInKSxmK1wiPlwiK2krXCI8L1wiK2UrXCI+XCJ9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPXt9O3JbdF09ZShmKSxuKG4uUCtuLkYqaShmdW5jdGlvbigpe3ZhciBlPVwiXCJbdF0oJ1wiJyk7cmV0dXJuIGUhPT1lLnRvTG93ZXJDYXNlKCl8fGUuc3BsaXQoJ1wiJykubGVuZ3RoPjN9KSxcIlN0cmluZ1wiLHIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjUpLGk9cigyNCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBuKGkodCkpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxcbmguaXVzaHJuKDgpLHVbby1mLTFdPWF9cmV0dXJuIHV9LE1hdGguY2x6MzI/by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXtyZXR1cm4gMzItTWF0aC5jbHozMih0KX06by5wcm90b3R5cGUuX2NvdW50Qml0cz1mdW5jdGlvbih0KXt2YXIgZT10LHI9MDtyZXR1cm4gZT49NDA5NiYmKHIrPTEzLGU+Pj49MTMpLGU+PTY0JiYocis9NyxlPj4+PTcpLGU+PTgmJihyKz00LGU+Pj49NCksZT49MiYmKHIrPTIsZT4+Pj0yKSxyK2V9LG8ucHJvdG90eXBlLl96ZXJvQml0cz1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gMjY7dmFyIGU9dCxyPTA7cmV0dXJuIDA9PT0oODE5MSZlKSYmKHIrPTEzLGU+Pj49MTMpLDA9PT0oMTI3JmUpJiYocis9NyxlPj4+PTcpLDA9PT0oMTUmZSkmJihyKz00LGU+Pj49NCksMD09PSgzJmUpJiYocis9MixlPj4+PTIpLDA9PT0oMSZlKSYmcisrLHJ9LG8ucHJvdG90eXBlLmJpdExlbmd0aD1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0sZT10aGlzLl9jb3VudEJpdHModCk7cmV0dXJuIDI2Kih0aGlzLmxlbmd0aC0xKStlfSxvLnByb3RvdHlwZS56ZXJvQml0cz1mdW5jdGlvbigpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIDA7Zm9yKHZhciB0PTAsZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgcj10aGlzLl96ZXJvQml0cyh0aGlzLndvcmRzW2VdKTtpZih0Kz1yLDI2IT09cilicmVha31yZXR1cm4gdH0sby5wcm90b3R5cGUuYnl0ZUxlbmd0aD1mdW5jdGlvbigpe3JldHVybiBNYXRoLmNlaWwodGhpcy5iaXRMZW5ndGgoKS84KX0sby5wcm90b3R5cGUudG9Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT90aGlzLmFicygpLmlub3RuKHQpLmlhZGRuKDEpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuZnJvbVR3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudGVzdG4odC0xKT90aGlzLm5vdG4odCkuaWFkZG4oMSkuaW5lZygpOnRoaXMuY2xvbmUoKX0sby5wcm90b3R5cGUuaXNOZWc9ZnVuY3Rpb24oKXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmV9LG8ucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmNsb25lKCkuaW5lZygpfSxvLnByb3RvdHlwZS5pbmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNaZXJvKCl8fCh0aGlzLm5lZ2F0aXZlXj0xKSx0aGlzfSxvLnByb3RvdHlwZS5pdW9yPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dC5sZW5ndGg7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0aGlzLndvcmRzW2VdPXRoaXMud29yZHNbZV18dC53b3Jkc1tlXTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pb3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1b3IodCl9LG8ucHJvdG90eXBlLm9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaW9yKHQpOnQuY2xvbmUoKS5pb3IodGhpcyl9LG8ucHJvdG90eXBlLnVvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1b3IodCk6dC5jbG9uZSgpLml1b3IodGhpcyl9LG8ucHJvdG90eXBlLml1YW5kPWZ1bmN0aW9uKHQpe3ZhciBlO2U9dGhpcy5sZW5ndGg+dC5sZW5ndGg/dDp0aGlzO2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ0LndvcmRzW3JdO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1YW5kKHQpfSxvLnByb3RvdHlwZS5hbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYW5kKHQpOnQuY2xvbmUoKS5pYW5kKHRoaXMpfSxvLnByb3RvdHlwZS51YW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVhbmQodCk6dC5jbG9uZSgpLml1YW5kKHRoaXMpfSxvLnByb3RvdHlwZS5pdXhvcj1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhlPXRoaXMscj10KTooZT10LHI9dGhpcyk7Zm9yKHZhciBuPTA7bjxyLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dXnIud29yZHNbbl07aWYodGhpcyE9PWUpZm9yKDtuPGUubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXV4b3IodCl9LG8ucHJvdG90eXBlLnhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml4b3IodCk6dC5jbG9uZSgpLml4b3IodGhpcyl9LG8ucHJvdG90eXBlLnV4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdXhvcih0KTp0LmNsb25lKCkuaXV4b3IodGhpcyl9LG8ucHJvdG90eXBlLmlub3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPTB8TWF0aC5jZWlsKHQvMjYpLHI9dCUyNjt0aGlzLl9leHBhbmQoZSkscj4wJiZlLS07Zm9yKHZhciBpPTA7aTxlO2krKyl0aGlzLndvcmRzW2ldPTY3MTA4ODYzJn50aGlzLndvcmRzW2ldO3JldHVybiByPjAmJih0aGlzLndvcmRzW2ldPX50aGlzLndvcmRzW2ldJjY3MTA4ODYzPj4yNi1yKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm5vdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbm90bih0KX0sby5wcm90b3R5cGUuc2V0bj1mdW5jdGlvbih0LGUpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciByPXQvMjZ8MCxpPXQlMjY7cmV0dXJuIHRoaXMuX2V4cGFuZChyKzEpLGU/dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdfDE8PGk6dGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJn4oMTw8aSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHRoaXMubmVnYXRpdmVePTEsdGhpcy5fbm9ybVNpZ24oKTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIHQubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKTt2YXIgcixuO3RoaXMubGVuZ3RoPnQubGVuZ3RoPyhyPXRoaXMsbj10KToocj10LG49dGhpcyk7Zm9yKHZhciBpPTAsbz0wO288bi5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkrKDB8bi53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7Zm9yKDswIT09aSYmbzxyLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtpZih0aGlzLmxlbmd0aD1yLmxlbmd0aCwwIT09aSl0aGlzLndvcmRzW3RoaXMubGVuZ3RoXT1pLHRoaXMubGVuZ3RoKys7ZWxzZSBpZihyIT09dGhpcylmb3IoO288ci5sZW5ndGg7bysrKXRoaXMud29yZHNbb109ci53b3Jkc1tvXTtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiAwIT09dC5uZWdhdGl2ZSYmMD09PXRoaXMubmVnYXRpdmU/KHQubmVnYXRpdmU9MCxlPXRoaXMuc3ViKHQpLHQubmVnYXRpdmVePTEsZSk6MD09PXQubmVnYXRpdmUmJjAhPT10aGlzLm5lZ2F0aXZlPyh0aGlzLm5lZ2F0aXZlPTAsZT10LnN1Yih0aGlzKSx0aGlzLm5lZ2F0aXZlPTEsZSk6dGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhZGQodCk6dC5jbG9uZSgpLmlhZGQodGhpcyl9LG8ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCl7aWYoMCE9PXQubmVnYXRpdmUpe3QubmVnYXRpdmU9MDt2YXIgZT10aGlzLmlhZGQodCk7cmV0dXJuIHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpfWlmKDAhPT10aGlzLm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pYWRkKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzLl9ub3JtU2lnbigpO3ZhciByPXRoaXMuY21wKHQpO2lmKDA9PT1yKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpcy5sZW5ndGg9MSx0aGlzLndvcmRzWzBdPTAsdGhpczt2YXIgbixpO3I+MD8obj10aGlzLGk9dCk6KG49dCxpPXRoaXMpO2Zvcih2YXIgbz0wLGE9MDthPGkubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pLSgwfGkud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7Zm9yKDswIT09byYmYTxuLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2lmKDA9PT1vJiZhPG4ubGVuZ3RoJiZuIT09dGhpcylmb3IoO2E8bi5sZW5ndGg7YSsrKXRoaXMud29yZHNbYV09bi53b3Jkc1thXTtyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsYSksbiE9PXRoaXMmJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXN1Yih0KX07dmFyIEU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbyxhPXQud29yZHMsZj1lLndvcmRzLHM9ci53b3Jkcyx1PTAsaD0wfGFbMF0sYz04MTkxJmgsZD1oPj4+MTMsbD0wfGFbMV0scD04MTkxJmwsYj1sPj4+MTMsdj0wfGFbMl0seT04MTkxJnYsbT12Pj4+MTMsZz0wfGFbM10sdz04MTkxJmcsXz1nPj4+MTMsTT0wfGFbNF0sUz04MTkxJk0sRT1NPj4+MTMsQT0wfGFbNV0saz04MTkxJkEseD1BPj4+MTMsST0wfGFbNl0sQj04MTkxJkksTz1JPj4+MTMsUj0wfGFbN10sUD04MTkxJlIsVD1SPj4+MTMsaj0wfGFbOF0sQz04MTkxJmosTj1qPj4+MTMsTD0wfGFbOV0sVT04MTkxJkwsej1MPj4+MTMsRD0wfGZbMF0scT04MTkxJkQsRj1EPj4+MTMsSz0wfGZbMV0sRz04MTkxJkssVj1LPj4+MTMsSD0wfGZbMl0sWD04MTkxJkgsWT1IPj4+MTMsVz0wfGZbM10sWj04MTkxJlcsSj1XPj4+MTMsJD0wfGZbNF0sUT04MTkxJiQsdHQ9JD4+PjEzLGV0PTB8Zls1XSxydD04MTkxJmV0LG50PWV0Pj4+MTMsaXQ9MHxmWzZdLG90PTgxOTEmaXQsYXQ9aXQ+Pj4xMyxmdD0wfGZbN10sc3Q9ODE5MSZmdCx1dD1mdD4+PjEzLGh0PTB8Zls4XSxjdD04MTkxJmh0LGR0PWh0Pj4+MTMsbHQ9MHxmWzldLHB0PTgxOTEmbHQsYnQ9bHQ+Pj4xMztyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD0xOSxuPU1hdGguaW11bChjLHEpLGk9TWF0aC5pbXVsKGMsRiksaT1pK01hdGguaW11bChkLHEpfDAsbz1NYXRoLmltdWwoZCxGKTt2YXIgdnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHZ0Pj4+MjYpfDAsdnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHAscSksaT1NYXRoLmltdWwocCxGKSxpPWkrTWF0aC5pbXVsKGIscSl8MCxvPU1hdGguaW11bChiLEYpLG49bitNYXRoLmltdWwoYyxHKXwwLGk9aStNYXRoLmltdWwoYyxWKXwwLGk9aStNYXRoLmltdWwoZCxHKXwwLG89bytNYXRoLmltdWwoZCxWKXwwO3ZhciB5dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeXQ+Pj4yNil8MCx5dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoeSxxKSxpPU1hdGguaW11bCh5LEYpLGk9aStNYXRoLmltdWwobSxxKXwwLG89TWF0aC5pbXVsKG0sRiksbj1uK01hdGguaW11bChwLEcpfDAsaT1pK01hdGguaW11bChwLFYpfDAsaT1pK01hdGguaW11bChiLEcpfDAsbz1vK01hdGguaW11bChiLFYpfDAsbj1uK01hdGguaW11bChjLFgpfDAsaT1pK01hdGguaW11bChjLFkpfDAsaT1pK01hdGguaW11bChkLFgpfDAsbz1vK01hdGguaW11bChkLFkpfDA7dmFyIG10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhtdD4+PjI2KXwwLG10Jj02NzEwODg2MyxuPU1hdGguaW11bCh3LHEpLGk9TWF0aC5pbXVsKHcsRiksaT1pK01hdGguaW11bChfLHEpfDAsbz1NYXRoLmltdWwoXyxGKSxuPW4rTWF0aC5pbXVsKHksRyl8MCxpPWkrTWF0aC5pbXVsKHksVil8MCxpPWkrTWF0aC5pbXVsKG0sRyl8MCxvPW8rTWF0aC5pbXVsKG0sVil8MCxuPW4rTWF0aC5pbXVsKHAsWCl8MCxpPWkrTWF0aC5pbXVsKHAsWSl8MCxpPWkrTWF0aC5pbXVsKGIsWCl8MCxvPW8rTWF0aC5pbXVsKGIsWSl8MCxuPW4rTWF0aC5pbXVsKGMsWil8MCxpPWkrTWF0aC5pbXVsKGMsSil8MCxpPWkrTWF0aC5pbXVsKGQsWil8MCxvPW8rTWF0aC5pbXVsKGQsSil8MDt2YXIgZ3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGd0Pj4+MjYpfDAsZ3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFMscSksaT1NYXRoLmltdWwoUyxGKSxpPWkrTWF0aC5pbXVsKEUscSl8MCxvPU1hdGguaW11bChFLEYpLG49bitNYXRoLmltdWwodyxHKXwwLGk9aStNYXRoLmltdWwodyxWKXwwLGk9aStNYXRoLmltdWwoXyxHKXwwLG89bytNYXRoLmltdWwoXyxWKXwwLG49bitNYXRoLmltdWwoeSxYKXwwLGk9aStNYXRoLmltdWwoeSxZKXwwLGk9aStNYXRoLmltdWwobSxYKXwwLG89bytNYXRoLmltdWwobSxZKXwwLG49bitNYXRoLmltdWwocCxaKXwwLGk9aStNYXRoLmltdWwocCxKKXwwLGk9aStNYXRoLmltdWwoYixaKXwwLG89bytNYXRoLmltdWwoYixKKXwwLG49bitNYXRoLmltdWwoYyxRKXwwLGk9aStNYXRoLmltdWwoYyx0dCl8MCxpPWkrTWF0aC5pbXVsKGQsUSl8MCxvPW8rTWF0aC5pbXVsKGQsdHQpfDA7dmFyIHd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh3dD4+PjI2KXwwLHd0Jj02NzEwODg2MyxuPU1hdGguaW11bChrLHEpLGk9TWF0aC5pbXVsKGssRiksaT1pK01hdGguaW11bCh4LHEpfDAsbz1NYXRoLmltdWwoeCxGKSxuPW4rTWF0aC5pbXVsKFMsRyl8MCxpPWkrTWF0aC5pbXVsKFMsVil8MCxpPWkrTWF0aC5pbXVsKEUsRyl8MCxvPW8rTWF0aC5pbXVsKEUsVil8MCxuPW4rTWF0aC5pbXVsKHcsWCl8MCxpPWkrTWF0aC5pbXVsKHcsWSl8MCxpPWkrTWF0aC5pbXVsKF8sWCl8MCxvPW8rTWF0aC5pbXVsKF8sWSl8MCxuPW4rTWF0aC5pbXVsKHksWil8MCxpPWkrTWF0aC5pbXVsKHksSil8MCxpPWkrTWF0aC5pbXVsKG0sWil8MCxvPW8rTWF0aC5pbXVsKG0sSil8MCxuPW4rTWF0aC5pbXVsKHAsUSl8MCxpPWkrTWF0aC5pbXVsKHAsdHQpfDAsaT1pK01hdGguaW11bChiLFEpfDAsbz1vK01hdGguaW11bChiLHR0KXwwLG49bitNYXRoLmltdWwoYyxydCl8MCxpPWkrTWF0aC5pbXVsKGMsbnQpfDAsaT1pK01hdGguaW11bChkLHJ0KXwwLG89bytNYXRoLmltdWwoZCxudCl8MDt2YXIgX3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKF90Pj4+MjYpfDAsX3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEIscSksaT1NYXRoLmltdWwoQixGKSxpPWkrTWF0aC5pbXVsKE8scSl8MCxvPU1hdGguaW11bChPLEYpLG49bitNYXRoLmltdWwoayxHKXwwLGk9aStNYXRoLmltdWwoayxWKXwwLGk9aStNYXRoLmltdWwoeCxHKXwwLG89bytNYXRoLmltdWwoeCxWKXwwLG49bitNYXRoLmltdWwoUyxYKXwwLGk9aStNYXRoLmltdWwoUyxZKXwwLGk9aStNYXRoLmltdWwoRSxYKXwwLG89bytNYXRoLmltdWwoRSxZKXwwLG49bitNYXRoLmltdWwodyxaKXwwLGk9aStNYXRoLmltdWwodyxKKXwwLGk9aStNYXRoLmltdWwoXyxaKXwwLG89bytNYXRoLmltdWwoXyxKKXwwLG49bitNYXRoLmltdWwoeSxRKXwwLGk9aStNYXRoLmltdWwoeSx0dCl8MCxpPWkrTWF0aC5pbXVsKG0sUSl8MCxvPW8rTWF0aC5pbXVsKG0sdHQpfDAsbj1uK01hdGguaW11bChwLHJ0KXwwLGk9aStNYXRoLmltdWwocCxudCl8MCxpPWkrTWF0aC5pbXVsKGIscnQpfDAsbz1vK01hdGguaW11bChiLG50KXwwLG49bitNYXRoLmltdWwoYyxvdCl8MCxpPWkrTWF0aC5pbXVsKGMsYXQpfDAsaT1pK01hdGguaW11bChkLG90KXwwLG89bytNYXRoLmltdWwoZCxhdCl8MDt2YXIgTXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE10Pj4+MjYpfDAsTXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFAscSksaT1NYXRoLmltdWwoUCxGKSxpPWkrTWF0aC5pbXVsKFQscSl8MCxvPU1hdGguaW11bChULEYpLG49bitNYXRoLmltdWwoQixHKXwwLGk9aStNYXRoLmltdWwoQixWKXwwLGk9aStNYXRoLmltdWwoTyxHKXwwLG89bytNYXRoLmltdWwoTyxWKXwwLG49bitNYXRoLmltdWwoayxYKXwwLGk9aStNYXRoLmltdWwoayxZKXwwLGk9aStNYXRoLmltdWwoeCxYKXwwLG89bytNYXRoLmltdWwoeCxZKXwwLG49bitNYXRoLmltdWwoUyxaKXwwLGk9aStNYXRoLmltdWwoUyxKKXwwLGk9aStNYXRoLmltdWwoRSxaKXwwLG89bytNYXRoLmltdWwoRSxKKXwwLG49bitNYXRoLmltdWwodyxRKXwwLGk9aStNYXRoLmltdWwodyx0dCl8MCxpPWkrTWF0aC5pbXVsKF8sUSl8MCxvPW8rTWF0aC5pbXVsKF8sdHQpfDAsbj1uK01hdGguaW11bCh5LHJ0KXwwLGk9aStNYXRoLmltdWwoeSxudCl8MCxpPWkrTWF0aC5pbXVsKG0scnQpfDAsbz1vK01hdGguaW11bChtLG50KXwwLG49bitNYXRoLmltdWwocCxvdCl8MCxpPWkrTWF0aC5pbXVsKHAsYXQpfDAsaT1pK01hdGguaW11bChiLG90KXwwLG89bytNYXRoLmltdWwoYixhdCl8MCxuPW4rTWF0aC5pbXVsKGMsc3QpfDAsaT1pK01hdGguaW11bChjLHV0KXwwLGk9aStNYXRoLmltdWwoZCxzdCl8MCxvPW8rTWF0aC5pbXVsKGQsdXQpfDA7dmFyIFN0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhTdD4+PjI2KXwwLFN0Jj02NzEwODg2MyxuPU1hdGguaW11bChDLHEpLGk9TWF0aC5pbXVsKEMsRiksaT1pK01hdGguaW11bChOLHEpfDAsbz1NYXRoLmltdWwoTixGKSxuPW4rTWF0aC5pbXVsKFAsRyl8MCxpPWkrTWF0aC5pbXVsKFAsVil8MCxpPWkrTWF0aC5pbXVsKFQsRyl8MCxvPW8rTWF0aC5pbXVsKFQsVil8MCxuPW4rTWF0aC5pbXVsKEIsWCl8MCxpPWkrTWF0aC5pbXVsKEIsWSl8MCxpPWkrTWF0aC5pbXVsKE8sWCl8MCxvPW8rTWF0aC5pbXVsKE8sWSl8MCxuPW4rTWF0aC5pbXVsKGssWil8MCxpPWkrTWF0aC5pbXVsKGssSil8MCxpPWkrTWF0aC5pbXVsKHgsWil8MCxvPW8rTWF0aC5pbXVsKHgsSil8MCxuPW4rTWF0aC5pbXVsKFMsUSl8MCxpPWkrTWF0aC5pbXVsKFMsdHQpfDAsaT1pK01hdGguaW11bChFLFEpfDAsbz1vK01hdGguaW11bChFLHR0KXwwLG49bitNYXRoLmltdWwodyxydCl8MCxpPWkrTWF0aC5pbXVsKHcsbnQpfDAsaT1pK01hdGguaW11bChfLHJ0KXwwLG89bytNYXRoLmltdWwoXyxudCl8MCxuPW4rTWF0aC5pbXVsKHksb3QpfDAsaT1pK01hdGguaW11bCh5LGF0KXwwLGk9aStNYXRoLmltdWwobSxvdCl8MCxvPW8rTWF0aC5pbXVsKG0sYXQpfDAsbj1uK01hdGguaW11bChwLHN0KXwwLGk9aStNYXRoLmltdWwocCx1dCl8MCxpPWkrTWF0aC5pbXVsKGIsc3QpfDAsbz1vK01hdGguaW11bChiLHV0KXwwLG49bitNYXRoLmltdWwoYyxjdCl8MCxpPWkrTWF0aC5pbXVsKGMsZHQpfDAsaT1pK01hdGguaW11bChkLGN0KXwwLG89bytNYXRoLmltdWwoZCxkdCl8MDt2YXIgRXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEV0Pj4+MjYpfDAsRXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscSksaT1NYXRoLmltdWwoVSxGKSxpPWkrTWF0aC5pbXVsKHoscSl8MCxvPU1hdGguaW11bCh6LEYpLG49bitNYXRoLmltdWwoQyxHKXwwLGk9aStNYXRoLmltdWwoQyxWKXwwLGk9aStNYXRoLmltdWwoTixHKXwwLG89bytNYXRoLmltdWwoTixWKXwwLG49bitNYXRoLmltdWwoUCxYKXwwLGk9aStNYXRoLmltdWwoUCxZKXwwLGk9aStNYXRoLmltdWwoVCxYKXwwLG89bytNYXRoLmltdWwoVCxZKXwwLG49bitNYXRoLmltdWwoQixaKXwwLGk9aStNYXRoLmltdWwoQixKKXwwLGk9aStNYXRoLmltdWwoTyxaKXwwLG89bytNYXRoLmltdWwoTyxKKXwwLG49bitNYXRoLmltdWwoayxRKXwwLGk9aStNYXRoLmltdWwoayx0dCl8MCxpPWkrTWF0aC5pbXVsKHgsUSl8MCxvPW8rTWF0aC5pbXVsKHgsdHQpfDAsbj1uK01hdGguaW11bChTLHJ0KXwwLGk9aStNYXRoLmltdWwoUyxudCl8MCxpPWkrTWF0aC5pbXVsKEUscnQpfDAsbz1vK01hdGguaW11bChFLG50KXwwLG49bitNYXRoLmltdWwodyxvdCl8MCxpPWkrTWF0aC5pbXVsKHcsYXQpfDAsaT1pK01hdGguaW11bChfLG90KXwwLG89bytNYXRoLmltdWwoXyxhdCl8MCxuPW4rTWF0aC5pbXVsKHksc3QpfDAsaT1pK01hdGguaW11bCh5LHV0KXwwLGk9aStNYXRoLmltdWwobSxzdCl8MCxvPW8rTWF0aC5pbXVsKG0sdXQpfDAsbj1uK01hdGguaW11bChwLGN0KXwwLGk9aStNYXRoLmltdWwocCxkdCl8MCxpPWkrTWF0aC5pbXVsKGIsY3QpfDAsbz1vK01hdGguaW11bChiLGR0KXwwLG49bitNYXRoLmltdWwoYyxwdCl8MCxpPWkrTWF0aC5pbXVsKGMsYnQpfDAsaT1pK01hdGguaW11bChkLHB0KXwwLG89bytNYXRoLmltdWwoZCxidCl8MDt2YXIgQXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEF0Pj4+MjYpfDAsQXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsRyksaT1NYXRoLmltdWwoVSxWKSxpPWkrTWF0aC5pbXVsKHosRyl8MCxvPU1hdGguaW11bCh6LFYpLG49bitNYXRoLmltdWwoQyxYKXwwLGk9aStNYXRoLmltdWwoQyxZKXwwLGk9aStNYXRoLmltdWwoTixYKXwwLG89bytNYXRoLmltdWwoTixZKXwwLG49bitNYXRoLmltdWwoUCxaKXwwLGk9aStNYXRoLmltdWwoUCxKKXwwLGk9aStNYXRoLmltdWwoVCxaKXwwLG89bytNYXRoLmltdWwoVCxKKXwwLG49bitNYXRoLmltdWwoQixRKXwwLGk9aStNYXRoLmltdWwoQix0dCl8MCxpPWkrTWF0aC5pbXVsKE8sUSl8MCxvPW8rTWF0aC5pbXVsKE8sdHQpfDAsbj1uK01hdGguaW11bChrLHJ0KXwwLGk9aStNYXRoLmltdWwoayxudCl8MCxpPWkrTWF0aC5pbXVsKHgscnQpfDAsbz1vK01hdGguaW11bCh4LG50KXwwLG49bitNYXRoLmltdWwoUyxvdCl8MCxpPWkrTWF0aC5pbXVsKFMsYXQpfDAsaT1pK01hdGguaW11bChFLG90KXwwLG89bytNYXRoLmltdWwoRSxhdCl8MCxuPW4rTWF0aC5pbXVsKHcsc3QpfDAsaT1pK01hdGguaW11bCh3LHV0KXwwLGk9aStNYXRoLmltdWwoXyxzdCl8MCxvPW8rTWF0aC5pbXVsKF8sdXQpfDAsbj1uK01hdGguaW11bCh5LGN0KXwwLGk9aStNYXRoLmltdWwoeSxkdCl8MCxpPWkrTWF0aC5pbXVsKG0sY3QpfDAsbz1vK01hdGguaW11bChtLGR0KXwwLG49bitNYXRoLmltdWwocCxwdCl8MCxpPWkrTWF0aC5pbXVsKHAsYnQpfDAsaT1pK01hdGguaW11bChiLHB0KXwwLG89bytNYXRoLmltdWwoYixidCl8MDt2YXIga3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKGt0Pj4+MjYpfDAsa3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWCksaT1NYXRoLmltdWwoVSxZKSxpPWkrTWF0aC5pbXVsKHosWCl8MCxvPU1hdGguaW11bCh6LFkpLG49bitNYXRoLmltdWwoQyxaKXwwLGk9aStNYXRoLmltdWwoQyxKKXwwLGk9aStNYXRoLmltdWwoTixaKXwwLG89bytNYXRoLmltdWwoTixKKXwwLG49bitNYXRoLmltdWwoUCxRKXwwLGk9aStNYXRoLmltdWwoUCx0dCl8MCxpPWkrTWF0aC5pbXVsKFQsUSl8MCxvPW8rTWF0aC5pbXVsKFQsdHQpfDAsbj1uK01hdGguaW11bChCLHJ0KXwwLGk9aStNYXRoLmltdWwoQixudCl8MCxpPWkrTWF0aC5pbXVsKE8scnQpfDAsbz1vK01hdGguaW11bChPLG50KXwwLG49bitNYXRoLmltdWwoayxvdCl8MCxpPWkrTWF0aC5pbXVsKGssYXQpfDAsaT1pK01hdGguaW11bCh4LG90KXwwLG89bytNYXRoLmltdWwoeCxhdCl8MCxuPW4rTWF0aC5pbXVsKFMsc3QpfDAsaT1pK01hdGguaW11bChTLHV0KXwwLGk9aStNYXRoLmltdWwoRSxzdCl8MCxvPW8rTWF0aC5pbXVsKEUsdXQpfDAsbj1uK01hdGguaW11bCh3LGN0KXwwLGk9aStNYXRoLmltdWwodyxkdCl8MCxpPWkrTWF0aC5pbXVsKF8sY3QpfDAsbz1vK01hdGguaW11bChfLGR0KXwwLG49bitNYXRoLmltdWwoeSxwdCl8MCxpPWkrTWF0aC5pbXVsKHksYnQpfDAsaT1pK01hdGguaW11bChtLHB0KXwwLG89bytNYXRoLmltdWwobSxidCl8MDt2YXIgeHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHh0Pj4+MjYpfDAseHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsWiksaT1NYXRoLmltdWwoVSxKKSxpPWkrTWF0aC5pbXVsKHosWil8MCxvPU1hdGguaW11bCh6LEopLG49bitNYXRoLmltdWwoQyxRKXwwLGk9aStNYXRoLmltdWwoQyx0dCl8MCxpPWkrTWF0aC5pbXVsKE4sUSl8MCxvPW8rTWF0aC5pbXVsKE4sdHQpfDAsbj1uK01hdGguaW11bChQLHJ0KXwwLGk9aStNYXRoLmltdWwoUCxudCl8MCxpPWkrTWF0aC5pbXVsKFQscnQpfDAsbz1vK01hdGguaW11bChULG50KXwwLG49bitNYXRoLmltdWwoQixvdCl8MCxpPWkrTWF0aC5pbXVsKEIsYXQpfDAsaT1pK01hdGguaW11bChPLG90KXwwLG89bytNYXRoLmltdWwoTyxhdCl8MCxuPW4rTWF0aC5pbXVsKGssc3QpfDAsaT1pK01hdGguaW11bChrLHV0KXwwLGk9aStNYXRoLmltdWwoeCxzdCl8MCxvPW8rTWF0aC5pbXVsKHgsdXQpfDAsbj1uK01hdGguaW11bChTLGN0KXwwLGk9aStNYXRoLmltdWwoUyxkdCl8MCxpPWkrTWF0aC5pbXVsKEUsY3QpfDAsbz1vK01hdGguaW11bChFLGR0KXwwLG49bitNYXRoLmltdWwodyxwdCl8MCxpPWkrTWF0aC5pbXVsKHcsYnQpfDAsaT1pK01hdGguaW11bChfLHB0KXwwLG89bytNYXRoLmltdWwoXyxidCl8MDt2YXIgSXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEl0Pj4+MjYpfDAsSXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsUSksaT1NYXRoLmltdWwoVSx0dCksaT1pK01hdGguaW11bCh6LFEpfDAsbz1NYXRoLmltdWwoeix0dCksbj1uK01hdGguaW11bChDLHJ0KXwwLGk9aStNYXRoLmltdWwoQyxudCl8MCxpPWkrTWF0aC5pbXVsKE4scnQpfDAsbz1vK01hdGguaW11bChOLG50KXwwLG49bitNYXRoLmltdWwoUCxvdCl8MCxpPWkrTWF0aC5pbXVsKFAsYXQpfDAsaT1pK01hdGguaW11bChULG90KXwwLG89bytNYXRoLmltdWwoVCxhdCl8MCxuPW4rTWF0aC5pbXVsKEIsc3QpfDAsaT1pK01hdGguaW11bChCLHV0KXwwLGk9aStNYXRoLmltdWwoTyxzdCl8MCxvPW8rTWF0aC5pbXVsKE8sdXQpfDAsbj1uK01hdGguaW11bChrLGN0KXwwLGk9aStNYXRoLmltdWwoayxkdCl8MCxpPWkrTWF0aC5pbXVsKHgsY3QpfDAsbz1vK01hdGguaW11bCh4LGR0KXwwLG49bitNYXRoLmltdWwoUyxwdCl8MCxpPWkrTWF0aC5pbXVsKFMsYnQpfDAsaT1pK01hdGguaW11bChFLHB0KXwwLG89bytNYXRoLmltdWwoRSxidCl8MDt2YXIgQnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKEJ0Pj4+MjYpfDAsQnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscnQpLGk9TWF0aC5pbXVsKFUsbnQpLGk9aStNYXRoLmltdWwoeixydCl8MCxvPU1hdGguaW11bCh6LG50KSxuPW4rTWF0aC5pbXVsKEMsb3QpfDAsaT1pK01hdGguaW11bChDLGF0KXwwLGk9aStNYXRoLmltdWwoTixvdCl8MCxvPW8rTWF0aC5pbXVsKE4sYXQpfDAsbj1uK01hdGguaW11bChQLHN0KXwwLGk9aStNYXRoLmltdWwoUCx1dCl8MCxpPWkrTWF0aC5pbXVsKFQsc3QpfDAsbz1vK01hdGguaW11bChULHV0KXwwLG49bitNYXRoLmltdWwoQixjdCl8MCxpPWkrTWF0aC5pbXVsKEIsZHQpfDAsaT1pK01hdGguaW11bChPLGN0KXwwLG89bytNYXRoLmltdWwoTyxkdCl8MCxuPW4rTWF0aC5pbXVsKGsscHQpfDAsaT1pK01hdGguaW11bChrLGJ0KXwwLGk9aStNYXRoLmltdWwoeCxwdCl8MCxvPW8rTWF0aC5pbXVsKHgsYnQpfDA7dmFyIE90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhPdD4+PjI2KXwwLE90Jj02NzEwODg2MyxuPU1hdGguaW11bChVLG90KSxpPU1hdGguaW11bChVLGF0KSxpPWkrTWF0aC5pbXVsKHosb3QpfDAsbz1NYXRoLmltdWwoeixhdCksbj1uK01hdGguaW11bChDLHN0KXwwLGk9aStNYXRoLmltdWwoQyx1dCl8MCxpPWkrTWF0aC5pbXVsKE4sc3QpfDAsbz1vK01hdGguaW11bChOLHV0KXwwLG49bitNYXRoLmltdWwoUCxjdCl8MCxpPWkrTWF0aC5pbXVsKFAsZHQpfDAsaT1pK01hdGguaW11bChULGN0KXwwLG89bytNYXRoLmltdWwoVCxkdCl8MCxuPW4rTWF0aC5pbXVsKEIscHQpfDAsaT1pK01hdGguaW11bChCLGJ0KXwwLGk9aStNYXRoLmltdWwoTyxwdCl8MCxvPW8rTWF0aC5pbXVsKE8sYnQpfDA7dmFyIFJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhSdD4+PjI2KXwwLFJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHN0KSxpPU1hdGguaW11bChVLHV0KSxpPWkrTWF0aC5pbXVsKHosc3QpfDAsbz1NYXRoLmltdWwoeix1dCksbj1uK01hdGguaW11bChDLGN0KXwwLGk9aStNYXRoLmltdWwoQyxkdCl8MCxpPWkrTWF0aC5pbXVsKE4sY3QpfDAsbz1vK01hdGguaW11bChOLGR0KXwwLG49bitNYXRoLmltdWwoUCxwdCl8MCxpPWkrTWF0aC5pbXVsKFAsYnQpfDAsaT1pK01hdGguaW11bChULHB0KXwwLG89bytNYXRoLmltdWwoVCxidCl8MDt2YXIgUHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFB0Pj4+MjYpfDAsUHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsY3QpLGk9TWF0aC5pbXVsKFUsZHQpLGk9aStNYXRoLmltdWwoeixjdCl8MCxvPU1hdGguaW11bCh6LGR0KSxuPW4rTWF0aC5pbXVsKEMscHQpfDAsaT1pK01hdGguaW11bChDLGJ0KXwwLGk9aStNYXRoLmltdWwoTixwdCl8MCxvPW8rTWF0aC5pbXVsKE4sYnQpfDA7dmFyIFR0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhUdD4+PjI2KXwwLFR0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHB0KSxpPU1hdGguaW11bChVLGJ0KSxpPWkrTWF0aC5pbXVsKHoscHQpfDAsbz1NYXRoLmltdWwoeixidCk7dmFyIGp0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDtyZXR1cm4gdT0obysoaT4+PjEzKXwwKSsoanQ+Pj4yNil8MCxqdCY9NjcxMDg4NjMsc1swXT12dCxzWzFdPXl0LHNbMl09bXQsc1szXT1ndCxzWzRdPXd0LHNbNV09X3Qsc1s2XT1NdCxzWzddPVN0LHNbOF09RXQsc1s5XT1BdCxzWzEwXT1rdCxzWzExXT14dCxzWzEyXT1JdCxzWzEzXT1CdCxzWzE0XT1PdCxzWzE1XT1SdCxzWzE2XT1QdCxzWzE3XT1UdCxzWzE4XT1qdCwwIT09dSYmKHNbMTldPXUsci5sZW5ndGgrKykscn07TWF0aC5pbXVsfHwoRT11KSxvLnByb3RvdHlwZS5tdWxUbz1mdW5jdGlvbih0LGUpe3ZhciByLG49dGhpcy5sZW5ndGgrdC5sZW5ndGg7cmV0dXJuIHI9MTA9PT10aGlzLmxlbmd0aCYmMTA9PT10Lmxlbmd0aD9FKHRoaXMsdCxlKTpuPDYzP3UodGhpcyx0LGUpOm48MTAyND9oKHRoaXMsdCxlKTpjKHRoaXMsdCxlKX0sZC5wcm90b3R5cGUubWFrZVJCVD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9by5wcm90b3R5cGUuX2NvdW50Qml0cyh0KS0xLG49MDtuPHQ7bisrKWVbbl09dGhpcy5yZXZCaW4obixyLHQpO3JldHVybiBlfSxkLnByb3RvdHlwZS5yZXZCaW49ZnVuY3Rpb24odCxlLHIpe2lmKDA9PT10fHx0PT09ci0xKXJldHVybiB0O2Zvcih2YXIgbj0wLGk9MDtpPGU7aSsrKW58PSgxJnQpPDxlLWktMSx0Pj49MTtyZXR1cm4gbn0sZC5wcm90b3R5cGUucGVybXV0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7Zm9yKHZhciBhPTA7YTxvO2ErKyluW2FdPWVbdFthXV0saVthXT1yW3RbYV1dfSxkLnByb3RvdHlwZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIsbixpLG8pe3RoaXMucGVybXV0ZShvLHQsZSxyLG4saSk7Zm9yKHZhciBhPTE7YTxpO2E8PD0xKWZvcih2YXIgZj1hPDwxLHM9TWF0aC5jb3MoMipNYXRoLlBJL2YpLHU9TWF0aC5zaW4oMipNYXRoLlBJL2YpLGg9MDtoPGk7aCs9Zilmb3IodmFyIGM9cyxkPXUsbD0wO2w8YTtsKyspe3ZhciBwPXJbaCtsXSxiPW5baCtsXSx2PXJbaCtsK2FdLHk9bltoK2wrYV0sbT1jKnYtZCp5O3k9Yyp5K2Qqdix2PW0scltoK2xdPXArdixuW2grbF09Yit5LHJbaCtsK2FdPXAtdixuW2grbCthXT1iLXksbCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtcbnJldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5zdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlzdWIoZSk7cmV0dXJuIHIuY21wbigwKTwwJiZyLmlhZGQodGhpcy5tKSxyfSxtLnByb3RvdHlwZS5zaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5MSh0KSx0aGlzLmltb2QodC51c2hsbihlKSl9LG0ucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0LmltdWwoZSkpfSxtLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdmVyaWZ5Mih0LGUpLHRoaXMuaW1vZCh0Lm11bChlKSl9LG0ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW11bCh0LHQuY2xvbmUoKSl9LG0ucHJvdG90eXBlLnNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5tdWwodCx0KX0sbS5wcm90b3R5cGUuc3FydD1mdW5jdGlvbih0KXtpZih0LmlzWmVybygpKXJldHVybiB0LmNsb25lKCk7dmFyIGU9dGhpcy5tLmFuZGxuKDMpO2lmKG4oZSUyPT09MSksMz09PWUpe3ZhciByPXRoaXMubS5hZGQobmV3IG8oMSkpLml1c2hybigyKTtyZXR1cm4gdGhpcy5wb3codCxyKX1mb3IodmFyIGk9dGhpcy5tLnN1Ym4oMSksYT0wOyFpLmlzWmVybygpJiYwPT09aS5hbmRsbigxKTspYSsrLGkuaXVzaHJuKDEpO24oIWkuaXNaZXJvKCkpO3ZhciBmPW5ldyBvKDEpLnRvUmVkKHRoaXMpLHM9Zi5yZWROZWcoKSx1PXRoaXMubS5zdWJuKDEpLml1c2hybigxKSxoPXRoaXMubS5iaXRMZW5ndGgoKTtmb3IoaD1uZXcgbygyKmgqaCkudG9SZWQodGhpcyk7MCE9PXRoaXMucG93KGgsdSkuY21wKHMpOyloLnJlZElBZGQocyk7Zm9yKHZhciBjPXRoaXMucG93KGgsaSksZD10aGlzLnBvdyh0LGkuYWRkbigxKS5pdXNocm4oMSkpLGw9dGhpcy5wb3codCxpKSxwPWE7MCE9PWwuY21wKGYpOyl7Zm9yKHZhciBiPWwsdj0wOzAhPT1iLmNtcChmKTt2KyspYj1iLnJlZFNxcigpO24odjxwKTt2YXIgeT10aGlzLnBvdyhjLG5ldyBvKDEpLml1c2hsbihwLXYtMSkpO2Q9ZC5yZWRNdWwoeSksYz15LnJlZFNxcigpLGw9bC5yZWRNdWwoYykscD12fXJldHVybiBkfSxtLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2ludm1wKHRoaXMubSk7cmV0dXJuIDAhPT1lLm5lZ2F0aXZlPyhlLm5lZ2F0aXZlPTAsdGhpcy5pbW9kKGUpLnJlZE5lZygpKTp0aGlzLmltb2QoZSl9LG0ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0LGUpe2lmKGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDEpO2lmKDA9PT1lLmNtcG4oMSkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgcj00LG49bmV3IEFycmF5KDE8PHIpO25bMF09bmV3IG8oMSkudG9SZWQodGhpcyksblsxXT10O2Zvcih2YXIgaT0yO2k8bi5sZW5ndGg7aSsrKW5baV09dGhpcy5tdWwobltpLTFdLHQpO3ZhciBhPW5bMF0sZj0wLHM9MCx1PWUuYml0TGVuZ3RoKCklMjY7Zm9yKDA9PT11JiYodT0yNiksaT1lLmxlbmd0aC0xO2k+PTA7aS0tKXtmb3IodmFyIGg9ZS53b3Jkc1tpXSxjPXUtMTtjPj0wO2MtLSl7dmFyIGQ9aD4+YyYxO2EhPT1uWzBdJiYoYT10aGlzLnNxcihhKSksMCE9PWR8fDAhPT1mPyhmPDw9MSxmfD1kLHMrKywocz09PXJ8fDA9PT1pJiYwPT09YykmJihhPXRoaXMubXVsKGEsbltmXSkscz0wLGY9MCkpOnM9MH11PTI2fXJldHVybiBhfSxtLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7dmFyIGU9dC51bW9kKHRoaXMubSk7cmV0dXJuIGU9PT10P2UuY2xvbmUoKTplfSxtLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10LmNsb25lKCk7cmV0dXJuIGUucmVkPW51bGwsZX0sby5tb250PWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0KX0saShnLG0pLGcucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbW9kKHQudXNobG4odGhpcy5zaGlmdCkpfSxnLnByb3RvdHlwZS5jb252ZXJ0RnJvbT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5tdWwodGhpcy5yaW52KSk7cmV0dXJuIGUucmVkPW51bGwsZX0sZy5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIHQud29yZHNbMF09MCx0Lmxlbmd0aD0xLHQ7dmFyIHI9dC5pbXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLG89aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9vPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYobz1pLmlhZGQodGhpcy5tKSksby5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe2lmKHQuaXNaZXJvKCl8fGUuaXNaZXJvKCkpcmV0dXJuIG5ldyBvKDApLl9mb3JjZVJlZCh0aGlzKTt2YXIgcj10Lm11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxhPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/YT1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKGE9aS5pYWRkKHRoaXMubSkpLGEuX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5pbnZtPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Ll9pbnZtcCh0aGlzLm0pLm11bCh0aGlzLnIyKSk7cmV0dXJuIGUuX2ZvcmNlUmVkKHRoaXMpfX0oXCJ1bmRlZmluZWRcIj09dHlwZW9mIHR8fHQsdGhpcyl9KS5jYWxsKGUscig5MikodCkpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLnZlcnNpb249cig0NjUpLnZlcnNpb24sbi51dGlscz1yKDUyMSksbi5yYW5kPXIoNTIyKSxuLmhtYWNEUkJHPXIoNTE5KSxuLmN1cnZlPXIoOTkpLG4uY3VydmVzPXIoNTEyKSxuLmVjPXIoNTEzKSxuLmVkZHNhPXIoNTE2KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNjYpLGk9cigzNyksbz1yKDE3KSxhPXIoMjkpLGY9cigxMikscz1yKDE3NCksdT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO2UuZj1yKDgpP3U6ZnVuY3Rpb24odCxlKXtpZih0PW8odCksZT1hKGUsITApLHMpdHJ5e3JldHVybiB1KHQsZSl9Y2F0Y2godCl7fWlmKGYodCxlKSlyZXR1cm4gaSghbi5mLmNhbGwodCxlKSx0W2VdKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEyKSxpPXIoMTEpLG89cigxMzMpKFwiSUVfUFJPVE9cIiksYT1PYmplY3QucHJvdG90eXBlO3QuZXhwb3J0cz1PYmplY3QuZ2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKHQpe3JldHVybiB0PWkodCksbih0LG8pP3Rbb106XCJmdW5jdGlvblwiPT10eXBlb2YgdC5jb25zdHJ1Y3RvciYmdCBpbnN0YW5jZW9mIHQuY29uc3RydWN0b3I/dC5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6dCBpbnN0YW5jZW9mIE9iamVjdD9hOm51bGx9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLnZlcnNpb249cig0NjcpLnZlcnNpb24sbi51dGlscz1yKDU1OCksbi5yYW5kPXIoNTU5KSxuLmhtYWNEUkJHPXIoNTU2KSxuLmN1cnZlPXIoMTA0KSxuLmN1cnZlcz1yKDU0OSksbi5lYz1yKDU1MCksbi5lZGRzYT1yKDU1Myl9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9e30udG9TdHJpbmc7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiByLmNhbGwodCkuc2xpY2UoOCwtMSl9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZih2b2lkIDA9PXQpdGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gIFwiK3QpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuISF0JiZuKGZ1bmN0aW9uKCl7ZT90LmNhbGwobnVsbCxmdW5jdGlvbigpe30sMSk6dC5jYWxsKG51bGwpfSl9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIoKXt0aHJvdyBuZXcgRXJyb3IoXCJzZXRUaW1lb3V0IGhhcyBub3QgYmVlbiBkZWZpbmVkXCIpfWZ1bmN0aW9uIG4oKXt0aHJvdyBuZXcgRXJyb3IoXCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWRcIil9ZnVuY3Rpb24gaSh0KXtpZihoPT09c2V0VGltZW91dClyZXR1cm4gc2V0VGltZW91dCh0LDApO2lmKChoPT09cnx8IWgpJiZzZXRUaW1lb3V0KXJldHVybiBoPXNldFRpbWVvdXQsc2V0VGltZW91dCh0LDApO3RyeXtyZXR1cm4gaCh0LDApfWNhdGNoKGUpe3RyeXtyZXR1cm4gaC5jYWxsKG51bGwsdCwwKX1jYXRjaChlKXtyZXR1cm4gaC5jYWxsKHRoaXMsdCwwKX19fWZ1bmN0aW9uIG8odCl7aWYoYz09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KHQpO2lmKChjPT09bnx8IWMpJiZjbGVhclRpbWVvdXQpcmV0dXJuIGM9Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dCh0KTt0cnl7cmV0dXJuIGModCl9Y2F0Y2goZSl7dHJ5e3JldHVybiBjLmNhbGwobnVsbCx0KX1jYXRjaChlKXtyZXR1cm4gYy5jYWxsKHRoaXMsdCl9fX1mdW5jdGlvbiBhKCl7YiYmbCYmKGI9ITEsbC5sZW5ndGg/cD1sLmNvbmNhdChwKTp2PS0xLHAubGVuZ3RoJiZmKCkpfWZ1bmN0aW9uIGYoKXtpZighYil7dmFyIHQ9aShhKTtiPSEwO2Zvcih2YXIgZT1wLmxlbmd0aDtlOyl7Zm9yKGw9cCxwPVtdOysrdjxlOylsJiZsW3ZdLnJ1bigpO3Y9LTEsZT1wLmxlbmd0aH1sPW51bGwsYj0hMSxvKHQpfX1mdW5jdGlvbiBzKHQsZSl7dGhpcy5mdW49dCx0aGlzLmFycmF5PWV9ZnVuY3Rpb24gdSgpe312YXIgaCxjLGQ9dC5leHBvcnRzPXt9OyFmdW5jdGlvbigpe3RyeXtoPVwiZnVuY3Rpb25cIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDpyfWNhdGNoKHQpe2g9cn10cnl7Yz1cImZ1bmN0aW9uXCI9PXR5cGVvZiBjbGVhclRpbWVvdXQ/Y2xlYXJUaW1lb3V0Om59Y2F0Y2godCl7Yz1ufX0oKTt2YXIgbCxwPVtdLGI9ITEsdj0tMTtkLm5leHRUaWNrPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoLTEpO2lmKGFyZ3VtZW50cy5sZW5ndGg+MSlmb3IodmFyIHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKWVbci0xXT1hcmd1bWVudHNbcl07cC5wdXNoKG5ldyBzKHQsZSkpLDEhPT1wLmxlbmd0aHx8Ynx8aShmKX0scy5wcm90b3R5cGUucnVuPWZ1bmN0aW9uKCl7dGhpcy5mdW4uYXBwbHkobnVsbCx0aGlzLmFycmF5KX0sZC50aXRsZT1cImJyb3dzZXJcIixkLmJyb3dzZXI9ITAsZC5lbnY9e30sZC5hcmd2PVtdLGQudmVyc2lvbj1cIlwiLGQudmVyc2lvbnM9e30sZC5vbj11LGQuYWRkTGlzdGVuZXI9dSxkLm9uY2U9dSxkLm9mZj11LGQucmVtb3ZlTGlzdGVuZXI9dSxkLnJlbW92ZUFsbExpc3RlbmVycz11LGQuZW1pdD11LGQuYmluZGluZz1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmJpbmRpbmcgaXMgbm90IHN1cHBvcnRlZFwiKX0sZC5jd2Q9ZnVuY3Rpb24oKXtyZXR1cm5cIi9cIn0sZC5jaGRpcj1mdW5jdGlvbih0KXt0aHJvdyBuZXcgRXJyb3IoXCJwcm9jZXNzLmNoZGlyIGlzIG5vdCBzdXBwb3J0ZWRcIil9LGQudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMzKSxpPXIoNjUpLG89cigxMSksYT1yKDEwKSxmPXIoMjgzKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcj0xPT10LHM9Mj09dCx1PTM9PXQsaD00PT10LGM9Nj09dCxkPTU9PXR8fGMsbD1lfHxmO3JldHVybiBmdW5jdGlvbihlLGYscCl7Zm9yKHZhciBiLHYseT1vKGUpLG09aSh5KSxnPW4oZixwLDMpLHc9YShtLmxlbmd0aCksXz0wLE09cj9sKGUsdyk6cz9sKGUsMCk6dm9pZCAwO3c+XztfKyspaWYoKGR8fF8gaW4gbSkmJihiPW1bX10sdj1nKGIsXyx5KSx0KSlpZihyKU1bX109djtlbHNlIGlmKHYpc3dpdGNoKHQpe2Nhc2UgMzpyZXR1cm4hMDtjYXNlIDU6cmV0dXJuIGI7Y2FzZSA2OnJldHVybiBfO2Nhc2UgMjpNLnB1c2goYil9ZWxzZSBpZihoKXJldHVybiExO3JldHVybiBjPy0xOnV8fGg/aDpNfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigzMiksbz1yKDUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPShpLk9iamVjdHx8e30pW3RdfHxPYmplY3RbdF0sYT17fTthW3RdPWUociksbihuLlMrbi5GKm8oZnVuY3Rpb24oKXtyKDEpfSksXCJPYmplY3RcIixhKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LGwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLFxudGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtpLmNhbGwodGhpcyl9dC5leHBvcnRzPW47dmFyIGk9cigxMTApLkV2ZW50RW1pdHRlcixvPXIoNjAzKTtvKG4saSksbi5SZWFkYWJsZT1yKDYwMCksbi5Xcml0YWJsZT1yKDYwMiksbi5EdXBsZXg9cig1OTUpLG4uVHJhbnNmb3JtPXIoNjAxKSxuLlBhc3NUaHJvdWdoPXIoNTk5KSxuLlN0cmVhbT1uLG4ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKGUpe3Qud3JpdGFibGUmJiExPT09dC53cml0ZShlKSYmdS5wYXVzZSYmdS5wYXVzZSgpfWZ1bmN0aW9uIG4oKXt1LnJlYWRhYmxlJiZ1LnJlc3VtZSYmdS5yZXN1bWUoKX1mdW5jdGlvbiBvKCl7aHx8KGg9ITAsdC5lbmQoKSl9ZnVuY3Rpb24gYSgpe2h8fChoPSEwLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZGVzdHJveSYmdC5kZXN0cm95KCkpfWZ1bmN0aW9uIGYodCl7aWYocygpLDA9PT1pLmxpc3RlbmVyQ291bnQodGhpcyxcImVycm9yXCIpKXRocm93IHR9ZnVuY3Rpb24gcygpe3UucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsciksdC5yZW1vdmVMaXN0ZW5lcihcImRyYWluXCIsbiksdS5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLG8pLHUucmVtb3ZlTGlzdGVuZXIoXCJjbG9zZVwiLGEpLHUucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLGYpLHUucmVtb3ZlTGlzdGVuZXIoXCJlbmRcIixzKSx1LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixzKSx0LnJlbW92ZUxpc3RlbmVyKFwiY2xvc2VcIixzKX12YXIgdT10aGlzO3Uub24oXCJkYXRhXCIsciksdC5vbihcImRyYWluXCIsbiksdC5faXNTdGRpb3x8ZSYmZS5lbmQ9PT0hMXx8KHUub24oXCJlbmRcIixvKSx1Lm9uKFwiY2xvc2VcIixhKSk7dmFyIGg9ITE7cmV0dXJuIHUub24oXCJlcnJvclwiLGYpLHQub24oXCJlcnJvclwiLGYpLHUub24oXCJlbmRcIixzKSx1Lm9uKFwiY2xvc2VcIixzKSx0Lm9uKFwiY2xvc2VcIixzKSx0LmVtaXQoXCJwaXBlXCIsdSksdH19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTkwKSxpPXIoMCksbz1yKDg3KShcIm1ldGFkYXRhXCIpLGE9by5zdG9yZXx8KG8uc3RvcmU9bmV3KHIoMTkzKSkpLGY9ZnVuY3Rpb24odCxlLHIpe3ZhciBpPWEuZ2V0KHQpO2lmKCFpKXtpZighcilyZXR1cm47YS5zZXQodCxpPW5ldyBuKX12YXIgbz1pLmdldChlKTtpZighbyl7aWYoIXIpcmV0dXJuO2kuc2V0KGUsbz1uZXcgbil9cmV0dXJuIG99LHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYoZSxyLCExKTtyZXR1cm4gdm9pZCAwIT09biYmbi5oYXModCl9LHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWYoZSxyLCExKTtyZXR1cm4gdm9pZCAwPT09bj92b2lkIDA6bi5nZXQodCl9LGg9ZnVuY3Rpb24odCxlLHIsbil7ZihyLG4sITApLnNldCh0LGUpfSxjPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Zih0LGUsITEpLG49W107cmV0dXJuIHImJnIuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaChlKX0pLG59LGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXR8fFwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6U3RyaW5nKHQpfSxsPWZ1bmN0aW9uKHQpe2koaS5TLFwiUmVmbGVjdFwiLHQpfTt0LmV4cG9ydHM9e3N0b3JlOmEsbWFwOmYsaGFzOnMsZ2V0OnUsc2V0Omgsa2V5czpjLGtleTpkLGV4cDpsfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2lmKHIoOCkpe3ZhciBuPXIoNDEpLGk9cig0KSxvPXIoNSksYT1yKDApLGY9cig4OCkscz1yKDE0MCksdT1yKDMzKSxoPXIoNDApLGM9cigzNyksZD1yKDE0KSxsPXIoNDUpLHA9cigzOCksYj1yKDEwKSx2PXIoNDcpLHk9cigyOSksbT1yKDEyKSxnPXIoMTg3KSx3PXIoNjQpLF89cig2KSxNPXIoMTEpLFM9cigxMjUpLEU9cig0MiksQT1yKDIxKSxrPXIoNDMpLmYseD1yKDE0MiksST1yKDQ4KSxCPXIoNyksTz1yKDI3KSxSPXIoNzgpLFA9cigxMzQpLFQ9cigxNDMpLGo9cig1NiksQz1yKDg0KSxOPXIoNDYpLEw9cigxMTgpLFU9cigxNjcpLHo9cig5KSxEPXIoMjApLHE9ei5mLEY9RC5mLEs9aS5SYW5nZUVycm9yLEc9aS5UeXBlRXJyb3IsVj1pLlVpbnQ4QXJyYXksSD1cIkFycmF5QnVmZmVyXCIsWD1cIlNoYXJlZFwiK0gsWT1cIkJZVEVTX1BFUl9FTEVNRU5UXCIsVz1cInByb3RvdHlwZVwiLFo9QXJyYXlbV10sSj1zLkFycmF5QnVmZmVyLCQ9cy5EYXRhVmlldyxRPU8oMCksdHQ9TygyKSxldD1PKDMpLHJ0PU8oNCksbnQ9Tyg1KSxpdD1PKDYpLG90PVIoITApLGF0PVIoITEpLGZ0PVQudmFsdWVzLHN0PVQua2V5cyx1dD1ULmVudHJpZXMsaHQ9Wi5sYXN0SW5kZXhPZixjdD1aLnJlZHVjZSxkdD1aLnJlZHVjZVJpZ2h0LGx0PVouam9pbixwdD1aLnNvcnQsYnQ9Wi5zbGljZSx2dD1aLnRvU3RyaW5nLHl0PVoudG9Mb2NhbGVTdHJpbmcsbXQ9QihcIml0ZXJhdG9yXCIpLGd0PUIoXCJ0b1N0cmluZ1RhZ1wiKSx3dD1JKFwidHlwZWRfY29uc3RydWN0b3JcIiksX3Q9SShcImRlZl9jb25zdHJ1Y3RvclwiKSxNdD1mLkNPTlNUUixTdD1mLlRZUEVELEV0PWYuVklFVyxBdD1cIldyb25nIGxlbmd0aCFcIixrdD1PKDEsZnVuY3Rpb24odCxlKXtyZXR1cm4gUHQoUCh0LHRbX3RdKSxlKX0pLHh0PW8oZnVuY3Rpb24oKXtyZXR1cm4gMT09PW5ldyBWKG5ldyBVaW50MTZBcnJheShbMV0pLmJ1ZmZlcilbMF19KSxJdD0hIVYmJiEhVltXXS5zZXQmJm8oZnVuY3Rpb24oKXtuZXcgVigxKS5zZXQoe30pfSksQnQ9ZnVuY3Rpb24odCxlKXtpZih2b2lkIDA9PT10KXRocm93IEcoQXQpO3ZhciByPSt0LG49Yih0KTtpZihlJiYhZyhyLG4pKXRocm93IEsoQXQpO3JldHVybiBufSxPdD1mdW5jdGlvbih0LGUpe3ZhciByPXAodCk7aWYocjwwfHxyJWUpdGhyb3cgSyhcIldyb25nIG9mZnNldCFcIik7cmV0dXJuIHJ9LFJ0PWZ1bmN0aW9uKHQpe2lmKF8odCkmJlN0IGluIHQpcmV0dXJuIHQ7dGhyb3cgRyh0K1wiIGlzIG5vdCBhIHR5cGVkIGFycmF5IVwiKX0sUHQ9ZnVuY3Rpb24odCxlKXtpZighKF8odCkmJnd0IGluIHQpKXRocm93IEcoXCJJdCBpcyBub3QgYSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciFcIik7cmV0dXJuIG5ldyB0KGUpfSxUdD1mdW5jdGlvbih0LGUpe3JldHVybiBqdChQKHQsdFtfdF0pLGUpfSxqdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGgsaT1QdCh0LG4pO24+cjspaVtyXT1lW3IrK107cmV0dXJuIGl9LEN0PWZ1bmN0aW9uKHQsZSxyKXtxKHQsZSx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2Rbcl19fSl9LE50PWZ1bmN0aW9uKHQpe3ZhciBlLHIsbixpLG8sYSxmPU0odCkscz1hcmd1bWVudHMubGVuZ3RoLGg9cz4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsYz12b2lkIDAhPT1oLGQ9eChmKTtpZih2b2lkIDAhPWQmJiFTKGQpKXtmb3IoYT1kLmNhbGwoZiksbj1bXSxlPTA7IShvPWEubmV4dCgpKS5kb25lO2UrKyluLnB1c2goby52YWx1ZSk7Zj1ufWZvcihjJiZzPjImJihoPXUoaCxhcmd1bWVudHNbMl0sMikpLGU9MCxyPWIoZi5sZW5ndGgpLGk9UHQodGhpcyxyKTtyPmU7ZSsrKWlbZV09Yz9oKGZbZV0sZSk6ZltlXTtyZXR1cm4gaX0sTHQ9ZnVuY3Rpb24oKXtmb3IodmFyIHQ9MCxlPWFyZ3VtZW50cy5sZW5ndGgscj1QdCh0aGlzLGUpO2U+dDspclt0XT1hcmd1bWVudHNbdCsrXTtyZXR1cm4gcn0sVXQ9ISFWJiZvKGZ1bmN0aW9uKCl7eXQuY2FsbChuZXcgVigxKSl9KSx6dD1mdW5jdGlvbigpe3JldHVybiB5dC5hcHBseShVdD9idC5jYWxsKFJ0KHRoaXMpKTpSdCh0aGlzKSxhcmd1bWVudHMpfSxEdD17Y29weVdpdGhpbjpmdW5jdGlvbih0LGUpe3JldHVybiBVLmNhbGwoUnQodGhpcyksdCxlLGFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwKX0sZXZlcnk6ZnVuY3Rpb24odCl7cmV0dXJuIHJ0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaWxsOmZ1bmN0aW9uKHQpe3JldHVybiBMLmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LGZpbHRlcjpmdW5jdGlvbih0KXtyZXR1cm4gVHQodGhpcyx0dChSdCh0aGlzKSx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwKSl9LGZpbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIG50KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmaW5kSW5kZXg6ZnVuY3Rpb24odCl7cmV0dXJuIGl0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe1EoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGluZGV4T2Y6ZnVuY3Rpb24odCl7cmV0dXJuIGF0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gb3QoUnQodGhpcyksdCxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9LGpvaW46ZnVuY3Rpb24odCl7cmV0dXJuIGx0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LGxhc3RJbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBodC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxtYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGt0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxyZWR1Y2U6ZnVuY3Rpb24odCl7cmV0dXJuIGN0LmFwcGx5KFJ0KHRoaXMpLGFyZ3VtZW50cyl9LHJlZHVjZVJpZ2h0OmZ1bmN0aW9uKHQpe3JldHVybiBkdC5hcHBseShSdCh0aGlzKSxhcmd1bWVudHMpfSxyZXZlcnNlOmZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9dGhpcyxyPVJ0KGUpLmxlbmd0aCxuPU1hdGguZmxvb3Ioci8yKSxpPTA7aTxuOyl0PWVbaV0sZVtpKytdPWVbLS1yXSxlW3JdPXQ7cmV0dXJuIGV9LHNvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGV0KFJ0KHRoaXMpLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfSxzb3J0OmZ1bmN0aW9uKHQpe3JldHVybiBwdC5jYWxsKFJ0KHRoaXMpLHQpfSxzdWJhcnJheTpmdW5jdGlvbih0LGUpe3ZhciByPVJ0KHRoaXMpLG49ci5sZW5ndGgsaT12KHQsbik7cmV0dXJuIG5ldyhQKHIscltfdF0pKShyLmJ1ZmZlcixyLmJ5dGVPZmZzZXQraSpyLkJZVEVTX1BFUl9FTEVNRU5ULGIoKHZvaWQgMD09PWU/bjp2KGUsbikpLWkpKX19LHF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFR0KHRoaXMsYnQuY2FsbChSdCh0aGlzKSx0LGUpKX0sRnQ9ZnVuY3Rpb24odCl7UnQodGhpcyk7dmFyIGU9T3QoYXJndW1lbnRzWzFdLDEpLHI9dGhpcy5sZW5ndGgsbj1NKHQpLGk9YihuLmxlbmd0aCksbz0wO2lmKGkrZT5yKXRocm93IEsoQXQpO2Zvcig7bzxpOyl0aGlzW2Urb109bltvKytdfSxLdD17ZW50cmllczpmdW5jdGlvbigpe3JldHVybiB1dC5jYWxsKFJ0KHRoaXMpKX0sa2V5czpmdW5jdGlvbigpe3JldHVybiBzdC5jYWxsKFJ0KHRoaXMpKX0sdmFsdWVzOmZ1bmN0aW9uKCl7cmV0dXJuIGZ0LmNhbGwoUnQodGhpcykpfX0sR3Q9ZnVuY3Rpb24odCxlKXtyZXR1cm4gXyh0KSYmdFtTdF0mJlwic3ltYm9sXCIhPXR5cGVvZiBlJiZlIGluIHQmJlN0cmluZygrZSk9PVN0cmluZyhlKX0sVnQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gR3QodCxlPXkoZSwhMCkpP2MoMix0W2VdKTpGKHQsZSl9LEh0PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4hKEd0KHQsZT15KGUsITApKSYmXyhyKSYmbShyLFwidmFsdWVcIikpfHxtKHIsXCJnZXRcIil8fG0ocixcInNldFwiKXx8ci5jb25maWd1cmFibGV8fG0ocixcIndyaXRhYmxlXCIpJiYhci53cml0YWJsZXx8bShyLFwiZW51bWVyYWJsZVwiKSYmIXIuZW51bWVyYWJsZT9xKHQsZSxyKToodFtlXT1yLnZhbHVlLHQpfTtNdHx8KEQuZj1WdCx6LmY9SHQpLGEoYS5TK2EuRiohTXQsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlZ0LGRlZmluZVByb3BlcnR5Okh0fSksbyhmdW5jdGlvbigpe3Z0LmNhbGwoe30pfSkmJih2dD15dD1mdW5jdGlvbigpe3JldHVybiBsdC5jYWxsKHRoaXMpfSk7dmFyIFh0PWwoe30sRHQpO2woWHQsS3QpLGQoWHQsbXQsS3QudmFsdWVzKSxsKFh0LHtzbGljZTpxdCxzZXQ6RnQsY29uc3RydWN0b3I6ZnVuY3Rpb24oKXt9LHRvU3RyaW5nOnZ0LHRvTG9jYWxlU3RyaW5nOnp0fSksQ3QoWHQsXCJidWZmZXJcIixcImJcIiksQ3QoWHQsXCJieXRlT2Zmc2V0XCIsXCJvXCIpLEN0KFh0LFwiYnl0ZUxlbmd0aFwiLFwibFwiKSxDdChYdCxcImxlbmd0aFwiLFwiZVwiKSxxKFh0LGd0LHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tTdF19fSksdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyLHMpe3M9ISFzO3ZhciB1PXQrKHM/XCJDbGFtcGVkXCI6XCJcIikrXCJBcnJheVwiLGM9XCJVaW50OEFycmF5XCIhPXUsbD1cImdldFwiK3QscD1cInNldFwiK3Qsdj1pW3VdLHk9dnx8e30sbT12JiZBKHYpLGc9IXZ8fCFmLkFCVixNPXt9LFM9diYmdltXXSx4PWZ1bmN0aW9uKHQscil7dmFyIG49dC5fZDtyZXR1cm4gbi52W2xdKHIqZStuLm8seHQpfSxJPWZ1bmN0aW9uKHQscixuKXt2YXIgaT10Ll9kO3MmJihuPShuPU1hdGgucm91bmQobikpPDA/MDpuPjI1NT8yNTU6MjU1Jm4pLGkudltwXShyKmUraS5vLG4seHQpfSxCPWZ1bmN0aW9uKHQsZSl7cSh0LGUse2dldDpmdW5jdGlvbigpe3JldHVybiB4KHRoaXMsZSl9LHNldDpmdW5jdGlvbih0KXtyZXR1cm4gSSh0aGlzLGUsdCl9LGVudW1lcmFibGU6ITB9KX07Zz8odj1yKGZ1bmN0aW9uKHQscixuLGkpe2godCx2LHUsXCJfZFwiKTt2YXIgbyxhLGYscyxjPTAsbD0wO2lmKF8ocikpe2lmKCEociBpbnN0YW5jZW9mIEp8fChzPXcocikpPT1IfHxzPT1YKSlyZXR1cm4gU3QgaW4gcj9qdCh2LHIpOk50LmNhbGwodixyKTtvPXIsbD1PdChuLGUpO3ZhciBwPXIuYnl0ZUxlbmd0aDtpZih2b2lkIDA9PT1pKXtpZihwJWUpdGhyb3cgSyhBdCk7aWYoYT1wLWwsYTwwKXRocm93IEsoQXQpfWVsc2UgaWYoYT1iKGkpKmUsYStsPnApdGhyb3cgSyhBdCk7Zj1hL2V9ZWxzZSBmPUJ0KHIsITApLGE9ZiplLG89bmV3IEooYSk7Zm9yKGQodCxcIl9kXCIse2I6byxvOmwsbDphLGU6Zix2Om5ldyAkKG8pfSk7YzxmOylCKHQsYysrKX0pLFM9dltXXT1FKFh0KSxkKFMsXCJjb25zdHJ1Y3RvclwiLHYpKTpDKGZ1bmN0aW9uKHQpe25ldyB2KG51bGwpLG5ldyB2KHQpfSwhMCl8fCh2PXIoZnVuY3Rpb24odCxyLG4saSl7aCh0LHYsdSk7dmFyIG87cmV0dXJuIF8ocik/ciBpbnN0YW5jZW9mIEp8fChvPXcocikpPT1IfHxvPT1YP3ZvaWQgMCE9PWk/bmV3IHkocixPdChuLGUpLGkpOnZvaWQgMCE9PW4/bmV3IHkocixPdChuLGUpKTpuZXcgeShyKTpTdCBpbiByP2p0KHYscik6TnQuY2FsbCh2LHIpOm5ldyB5KEJ0KHIsYykpfSksUShtIT09RnVuY3Rpb24ucHJvdG90eXBlP2soeSkuY29uY2F0KGsobSkpOmsoeSksZnVuY3Rpb24odCl7dCBpbiB2fHxkKHYsdCx5W3RdKX0pLHZbV109UyxufHwoUy5jb25zdHJ1Y3Rvcj12KSk7dmFyIE89U1ttdF0sUj0hIU8mJihcInZhbHVlc1wiPT1PLm5hbWV8fHZvaWQgMD09Ty5uYW1lKSxQPUt0LnZhbHVlcztkKHYsd3QsITApLGQoUyxTdCx1KSxkKFMsRXQsITApLGQoUyxfdCx2KSwocz9uZXcgdigxKVtndF09PXU6Z3QgaW4gUyl8fHEoUyxndCx7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHV9fSksTVt1XT12LGEoYS5HK2EuVythLkYqKHYhPXkpLE0pLGEoYS5TLHUse0JZVEVTX1BFUl9FTEVNRU5UOmUsZnJvbTpOdCxvZjpMdH0pLFkgaW4gU3x8ZChTLFksZSksYShhLlAsdSxEdCksTih1KSxhKGEuUCthLkYqSXQsdSx7c2V0OkZ0fSksYShhLlArYS5GKiFSLHUsS3QpLGEoYS5QK2EuRiooUy50b1N0cmluZyE9dnQpLHUse3RvU3RyaW5nOnZ0fSksYShhLlArYS5GKm8oZnVuY3Rpb24oKXtuZXcgdigxKS5zbGljZSgpfSksdSx7c2xpY2U6cXR9KSxhKGEuUCthLkYqKG8oZnVuY3Rpb24oKXtyZXR1cm5bMSwyXS50b0xvY2FsZVN0cmluZygpIT1uZXcgdihbMSwyXSkudG9Mb2NhbGVTdHJpbmcoKX0pfHwhbyhmdW5jdGlvbigpe1MudG9Mb2NhbGVTdHJpbmcuY2FsbChbMSwyXSl9KSksdSx7dG9Mb2NhbGVTdHJpbmc6enR9KSxqW3VdPVI/TzpQLG58fFJ8fGQoUyxtdCxQKX19ZWxzZSB0LmV4cG9ydHM9ZnVuY3Rpb24oKXt9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0OCkoXCJtZXRhXCIpLGk9cig2KSxvPXIoMTIpLGE9cig5KS5mLGY9MCxzPU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9LHU9IXIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gcyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pLGg9ZnVuY3Rpb24odCl7YSh0LG4se3ZhbHVlOntpOlwiT1wiKyArK2Ysdzp7fX19KX0sYz1mdW5jdGlvbih0LGUpe2lmKCFpKHQpKXJldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0P3Q6KFwic3RyaW5nXCI9PXR5cGVvZiB0P1wiU1wiOlwiUFwiKSt0O2lmKCFvKHQsbikpe2lmKCFzKHQpKXJldHVyblwiRlwiO2lmKCFlKXJldHVyblwiRVwiO2godCl9cmV0dXJuIHRbbl0uaX0sZD1mdW5jdGlvbih0LGUpe2lmKCFvKHQsbikpe2lmKCFzKHQpKXJldHVybiEwO2lmKCFlKXJldHVybiExO2godCl9cmV0dXJuIHRbbl0ud30sbD1mdW5jdGlvbih0KXtyZXR1cm4gdSYmcC5ORUVEJiZzKHQpJiYhbyh0LG4pJiZoKHQpLHR9LHA9dC5leHBvcnRzPXtLRVk6bixORUVEOiExLGZhc3RLZXk6YyxnZXRXZWFrOmQsb25GcmVlemU6bH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlKXt2YXIgcj1NYXRoLmNlaWwsbj1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXNOYU4odD0rdCk/MDoodD4wP246cikodCl9fSxmdW5jdGlvbih0LGUpe3ZhciByO3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30oKTt0cnl7cj1yfHxGdW5jdGlvbihcInJldHVybiB0aGlzXCIpKCl8fCgwLGV2YWwpKFwidGhpc1wiKX1jYXRjaCh0KXtcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiYocj13aW5kb3cpfXQuZXhwb3J0cz1yfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixuKXtpZighKHQgaW5zdGFuY2VvZiBlKXx8dm9pZCAwIT09biYmbiBpbiB0KXRocm93IFR5cGVFcnJvcihyK1wiOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz0hMX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMyksaT1yKDE4MCksbz1yKDEyMSksYT1yKDEzMykoXCJJRV9QUk9UT1wiKSxmPWZ1bmN0aW9uKCl7fSxzPVwicHJvdG90eXBlXCIsdT1mdW5jdGlvbigpe3ZhciB0LGU9cigxMjApKFwiaWZyYW1lXCIpLG49by5sZW5ndGgsaT1cIjxcIixhPVwiPlwiO2ZvcihlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIscigxMjMpLmFwcGVuZENoaWxkKGUpLGUuc3JjPVwiamF2YXNjcmlwdDpcIix0PWUuY29udGVudFdpbmRvdy5kb2N1bWVudCx0Lm9wZW4oKSx0LndyaXRlKGkrXCJzY3JpcHRcIithK1wiZG9jdW1lbnQuRj1PYmplY3RcIitpK1wiL3NjcmlwdFwiK2EpLHQuY2xvc2UoKSx1PXQuRjtuLS07KWRlbGV0ZSB1W3NdW29bbl1dO3JldHVybiB1KCl9O3QuZXhwb3J0cz1PYmplY3QuY3JlYXRlfHxmdW5jdGlvbih0LGUpe3ZhciByO3JldHVybiBudWxsIT09dD8oZltzXT1uKHQpLHI9bmV3IGYsZltzXT1udWxsLHJbYV09dCk6cj11KCksdm9pZCAwPT09ZT9yOmkocixlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE4MiksaT1yKDEyMSkuY29uY2F0KFwibGVuZ3RoXCIsXCJwcm90b3R5cGVcIik7ZS5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzfHxmdW5jdGlvbih0KXtyZXR1cm4gbih0LGkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTgyKSxpPXIoMTIxKTt0LmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKHQpe3JldHVybiBuKHQsaSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXtmb3IodmFyIGkgaW4gZSluKHQsaSxlW2ldLHIpO3JldHVybiB0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDkpLG89cig4KSxhPXIoNykoXCJzcGVjaWVzXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZT1uW3RdO28mJmUmJiFlW2FdJiZpLmYoZSxhLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzOCksaT1NYXRoLm1heCxvPU1hdGgubWluO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiB0PW4odCksdDwwP2kodCtlLDApOm8odCxlKX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9MCxuPU1hdGgucmFuZG9tKCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwiU3ltYm9sKFwiLmNvbmNhdCh2b2lkIDA9PT10P1wiXCI6dCxcIilfXCIsKCsrcituKS50b1N0cmluZygzNikpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi51dGlscz1yKDUyNyksbi5jb21tb249cig1MjMpLG4uc2hhPXIoNTI2KSxuLnJpcGVtZD1yKDUyNSksbi5obWFjPXIoNTI0KSxuLnNoYTE9bi5zaGEuc2hhMSxuLnNoYTI1Nj1uLnNoYS5zaGEyNTYsbi5zaGEyMjQ9bi5zaGEuc2hhMjI0LG4uc2hhMzg0PW4uc2hhLnNoYTM4NCxuLnNoYTUxMj1uLnNoYS5zaGE1MTIsbi5yaXBlbWQxNjA9bi5yaXBlbWQucmlwZW1kMTYwfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLnV0aWxzPXIoNTY0KSxuLmNvbW1vbj1yKDU2MCksbi5zaGE9cig1NjMpLG4ucmlwZW1kPXIoNTYyKSxuLmhtYWM9cig1NjEpLG4uc2hhMT1uLnNoYS5zaGExLG4uc2hhMjU2PW4uc2hhLnNoYTI1NixuLnNoYTIyND1uLnNoYS5zaGEyMjQsbi5zaGEzODQ9bi5zaGEuc2hhMzg0LG4uc2hhNTEyPW4uc2hhLnNoYTUxMixuLnJpcGVtZDE2MD1uLnJpcGVtZC5yaXBlbWQxNjB9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMsdCksaC5jYWxsKHRoaXMsdCksdCYmdC5yZWFkYWJsZT09PSExJiYodGhpcy5yZWFkYWJsZT0hMSksdCYmdC53cml0YWJsZT09PSExJiYodGhpcy53cml0YWJsZT0hMSksdGhpcy5hbGxvd0hhbGZPcGVuPSEwLHQmJnQuYWxsb3dIYWxmT3Blbj09PSExJiYodGhpcy5hbGxvd0hhbGZPcGVuPSExKSx2b2lkIHRoaXMub25jZShcImVuZFwiLGkpKTpuZXcgbih0KX1mdW5jdGlvbiBpKCl7dGhpcy5hbGxvd0hhbGZPcGVufHx0aGlzLl93cml0YWJsZVN0YXRlLmVuZGVkfHxmKG8sdGhpcyl9ZnVuY3Rpb24gbyh0KXt0LmVuZCgpfXZhciBhPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdCllLnB1c2gocik7cmV0dXJuIGV9O3QuZXhwb3J0cz1uO3ZhciBmPXIoMTU3KSxzPXIoNzMpO3MuaW5oZXJpdHM9cig3NCk7dmFyIHU9cigyNTApLGg9cigxNTUpO3MuaW5oZXJpdHMobix1KTtmb3IodmFyIGM9YShoLnByb3RvdHlwZSksZD0wO2Q8Yy5sZW5ndGg7ZCsrKXt2YXIgbD1jW2RdO24ucHJvdG90eXBlW2xdfHwobi5wcm90b3R5cGVbbF09aC5wcm90b3R5cGVbbF0pfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7aWYodCYmIXModCkpdGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCl9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gdC50b1N0cmluZyh0aGlzLmVuY29kaW5nKX1mdW5jdGlvbiBvKHQpe3RoaXMuY2hhclJlY2VpdmVkPXQubGVuZ3RoJTIsdGhpcy5jaGFyTGVuZ3RoPXRoaXMuY2hhclJlY2VpdmVkPzI6MH1mdW5jdGlvbiBhKHQpe3RoaXMuY2hhclJlY2VpdmVkPXQubGVuZ3RoJTMsdGhpcy5jaGFyTGVuZ3RoPXRoaXMuY2hhclJlY2VpdmVkPzM6MH12YXIgZj1yKDEpLkJ1ZmZlcixzPWYuaXNFbmNvZGluZ3x8ZnVuY3Rpb24odCl7c3dpdGNoKHQmJnQudG9Mb3dlckNhc2UoKSl7Y2FzZVwiaGV4XCI6Y2FzZVwidXRmOFwiOmNhc2VcInV0Zi04XCI6Y2FzZVwiYXNjaWlcIjpjYXNlXCJiaW5hcnlcIjpjYXNlXCJiYXNlNjRcIjpjYXNlXCJ1Y3MyXCI6Y2FzZVwidWNzLTJcIjpjYXNlXCJ1dGYxNmxlXCI6Y2FzZVwidXRmLTE2bGVcIjpjYXNlXCJyYXdcIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdT1lLlN0cmluZ0RlY29kZXI9ZnVuY3Rpb24odCl7c3dpdGNoKHRoaXMuZW5jb2Rpbmc9KHR8fFwidXRmOFwiKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX10vLFwiXCIpLG4odCksdGhpcy5lbmNvZGluZyl7Y2FzZVwidXRmOFwiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zO2JyZWFrO2Nhc2VcInVjczJcIjpjYXNlXCJ1dGYxNmxlXCI6dGhpcy5zdXJyb2dhdGVTaXplPTIsdGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcj1vO2JyZWFrO2Nhc2VcImJhc2U2NFwiOnRoaXMuc3Vycm9nYXRlU2l6ZT0zLHRoaXMuZGV0ZWN0SW5jb21wbGV0ZUNoYXI9YTticmVhaztkZWZhdWx0OnJldHVybiB2b2lkKHRoaXMud3JpdGU9aSl9dGhpcy5jaGFyQnVmZmVyPW5ldyBmKDYpLHRoaXMuY2hhclJlY2VpdmVkPTAsdGhpcy5jaGFyTGVuZ3RoPTB9O3UucHJvdG90eXBlLndyaXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1cIlwiO3RoaXMuY2hhckxlbmd0aDspe3ZhciByPXQubGVuZ3RoPj10aGlzLmNoYXJMZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQ/dGhpcy5jaGFyTGVuZ3RoLXRoaXMuY2hhclJlY2VpdmVkOnQubGVuZ3RoO2lmKHQuY29weSh0aGlzLmNoYXJCdWZmZXIsdGhpcy5jaGFyUmVjZWl2ZWQsMCxyKSx0aGlzLmNoYXJSZWNlaXZlZCs9cix0aGlzLmNoYXJSZWNlaXZlZDx0aGlzLmNoYXJMZW5ndGgpcmV0dXJuXCJcIjt0PXQuc2xpY2Uocix0Lmxlbmd0aCksZT10aGlzLmNoYXJCdWZmZXIuc2xpY2UoMCx0aGlzLmNoYXJMZW5ndGgpLnRvU3RyaW5nKHRoaXMuZW5jb2RpbmcpO3ZhciBuPWUuY2hhckNvZGVBdChlLmxlbmd0aC0xKTtpZighKG4+PTU1Mjk2JiZuPD01NjMxOSkpe2lmKHRoaXMuY2hhclJlY2VpdmVkPXRoaXMuY2hhckxlbmd0aD0wLDA9PT10Lmxlbmd0aClyZXR1cm4gZTticmVha310aGlzLmNoYXJMZW5ndGgrPXRoaXMuc3Vycm9nYXRlU2l6ZSxlPVwiXCJ9dGhpcy5kZXRlY3RJbmNvbXBsZXRlQ2hhcih0KTt2YXIgaT10Lmxlbmd0aDt0aGlzLmNoYXJMZW5ndGgmJih0LmNvcHkodGhpcy5jaGFyQnVmZmVyLDAsdC5sZW5ndGgtdGhpcy5jaGFyUmVjZWl2ZWQsaSksaS09dGhpcy5jaGFyUmVjZWl2ZWQpLGUrPXQudG9TdHJpbmcodGhpcy5lbmNvZGluZywwLGkpO3ZhciBpPWUubGVuZ3RoLTEsbj1lLmNoYXJDb2RlQXQoaSk7aWYobj49NTUyOTYmJm48PTU2MzE5KXt2YXIgbz10aGlzLnN1cnJvZ2F0ZVNpemU7cmV0dXJuIHRoaXMuY2hhckxlbmd0aCs9byx0aGlzLmNoYXJSZWNlaXZlZCs9byx0aGlzLmNoYXJCdWZmZXIuY29weSh0aGlzLmNoYXJCdWZmZXIsbywwLG8pLHQuY29weSh0aGlzLmNoYXJCdWZmZXIsMCwwLG8pLGUuc3Vic3RyaW5nKDAsaSl9cmV0dXJuIGV9LHUucHJvdG90eXBlLmRldGVjdEluY29tcGxldGVDaGFyPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10Lmxlbmd0aD49Mz8zOnQubGVuZ3RoO2U+MDtlLS0pe3ZhciByPXRbdC5sZW5ndGgtZV07aWYoMT09ZSYmcj4+NT09Nil7dGhpcy5jaGFyTGVuZ3RoPTI7YnJlYWt9aWYoZTw9MiYmcj4+ND09MTQpe3RoaXMuY2hhckxlbmd0aD0zO2JyZWFrfWlmKGU8PTMmJnI+PjM9PTMwKXt0aGlzLmNoYXJMZW5ndGg9NDticmVha319dGhpcy5jaGFyUmVjZWl2ZWQ9ZX0sdS5wcm90b3R5cGUuZW5kPWZ1bmN0aW9uKHQpe3ZhciBlPVwiXCI7aWYodCYmdC5sZW5ndGgmJihlPXRoaXMud3JpdGUodCkpLHRoaXMuY2hhclJlY2VpdmVkKXt2YXIgcj10aGlzLmNoYXJSZWNlaXZlZCxuPXRoaXMuY2hhckJ1ZmZlcixpPXRoaXMuZW5jb2Rpbmc7ZSs9bi5zbGljZSgwLHIpLnRvU3RyaW5nKGkpfXJldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7XG5yZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcInVuc2NvcGFibGVzXCIpLGk9QXJyYXkucHJvdG90eXBlO3ZvaWQgMD09aVtuXSYmcigxNCkoaSxuLHt9KSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aVtuXVt0XT0hMH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMzKSxpPXIoMTc2KSxvPXIoMTI1KSxhPXIoMyksZj1yKDEwKSxzPXIoMTQyKSx1PXt9LGg9e30sZT10LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYyxkKXt2YXIgbCxwLGIsdix5PWQ/ZnVuY3Rpb24oKXtyZXR1cm4gdH06cyh0KSxtPW4ocixjLGU/MjoxKSxnPTA7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgeSl0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgaXRlcmFibGUhXCIpO2lmKG8oeSkpe2ZvcihsPWYodC5sZW5ndGgpO2w+ZztnKyspaWYodj1lP20oYShwPXRbZ10pWzBdLHBbMV0pOm0odFtnXSksdj09PXV8fHY9PT1oKXJldHVybiB2fWVsc2UgZm9yKGI9eS5jYWxsKHQpOyEocD1iLm5leHQoKSkuZG9uZTspaWYodj1pKGIsbSxwLnZhbHVlLGUpLHY9PT11fHx2PT09aClyZXR1cm4gdn07ZS5CUkVBSz11LGUuUkVUVVJOPWh9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXt9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig5KS5mLGk9cigxMiksbz1yKDcpKFwidG9TdHJpbmdUYWdcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSxyKXt0JiYhaSh0PXI/dDp0LnByb3RvdHlwZSxvKSYmbih0LG8se2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTplfSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjQpLG89cig1KSxhPXIoMTM4KSxmPVwiW1wiK2ErXCJdXCIscz1cIuKAi8KFXCIsdT1SZWdFeHAoXCJeXCIrZitmK1wiKlwiKSxoPVJlZ0V4cChmK2YrXCIqJFwiKSxjPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT17fSxmPW8oZnVuY3Rpb24oKXtyZXR1cm4hIWFbdF0oKXx8c1t0XSgpIT1zfSksdT1pW3RdPWY/ZShkKTphW3RdO3ImJihpW3JdPXUpLG4obi5QK24uRipmLFwiU3RyaW5nXCIsaSl9LGQ9Yy50cmltPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQ9U3RyaW5nKGkodCkpLDEmZSYmKHQ9dC5yZXBsYWNlKHUsXCJcIikpLDImZSYmKHQ9dC5yZXBsYWNlKGgsXCJcIikpLHR9O3QuZXhwb3J0cz1jfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dS5jYWxsKHRoaXMsXCJkaWdlc3RcIiksdGhpcy5faGFzaD10LHRoaXMuYnVmZmVycz1bXX1mdW5jdGlvbiBpKHQpe3UuY2FsbCh0aGlzLFwiZGlnZXN0XCIpLHRoaXMuX2hhc2g9dH12YXIgbz1yKDIpLGE9cigxMDUpLGY9cig1NjcpLHM9cig1NjgpLHU9cig1NjYpO28obix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3RoaXMuYnVmZmVycy5wdXNoKHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD1lLmNvbmNhdCh0aGlzLmJ1ZmZlcnMpLHI9dGhpcy5faGFzaCh0KTtyZXR1cm4gdGhpcy5idWZmZXJzPW51bGwscn0sbyhpLHUpLGkucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5faGFzaC51cGRhdGUodCl9LGkucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9oYXNoLmRpZ2VzdCgpfSx0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQ9dC50b0xvd2VyQ2FzZSgpLFwibWQ1XCI9PT10P25ldyBuKGEpOlwicm1kMTYwXCI9PT10fHxcInJpcGVtZDE2MFwiPT09dD9uZXcgbihmKTpuZXcgaShzKHQpKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyKXt0aGlzLl9ibG9jaz1uZXcgZSh0KSx0aGlzLl9maW5hbFNpemU9cix0aGlzLl9ibG9ja1NpemU9dCx0aGlzLl9sZW49MCx0aGlzLl9zPTB9ci5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJihyPXJ8fFwidXRmOFwiLHQ9bmV3IGUodCxyKSk7Zm9yKHZhciBuPXRoaXMuX2xlbis9dC5sZW5ndGgsaT10aGlzLl9zfHwwLG89MCxhPXRoaXMuX2Jsb2NrO2k8bjspe2Zvcih2YXIgZj1NYXRoLm1pbih0Lmxlbmd0aCxvK3RoaXMuX2Jsb2NrU2l6ZS1pJXRoaXMuX2Jsb2NrU2l6ZSkscz1mLW8sdT0wO3U8czt1KyspYVtpJXRoaXMuX2Jsb2NrU2l6ZSt1XT10W3Urb107aSs9cyxvKz1zLGkldGhpcy5fYmxvY2tTaXplPT09MCYmdGhpcy5fdXBkYXRlKGEpfXJldHVybiB0aGlzLl9zPWksdGhpc30sci5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPTgqdGhpcy5fbGVuO3RoaXMuX2Jsb2NrW3RoaXMuX2xlbiV0aGlzLl9ibG9ja1NpemVdPTEyOCx0aGlzLl9ibG9jay5maWxsKDAsdGhpcy5fbGVuJXRoaXMuX2Jsb2NrU2l6ZSsxKSxlJSg4KnRoaXMuX2Jsb2NrU2l6ZSk+PTgqdGhpcy5fZmluYWxTaXplJiYodGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKSx0aGlzLl9ibG9jay5maWxsKDApKSx0aGlzLl9ibG9jay53cml0ZUludDMyQkUoZSx0aGlzLl9ibG9ja1NpemUtNCk7dmFyIHI9dGhpcy5fdXBkYXRlKHRoaXMuX2Jsb2NrKXx8dGhpcy5faGFzaCgpO3JldHVybiB0P3IudG9TdHJpbmcodCk6cn0sci5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIl91cGRhdGUgbXVzdCBiZSBpbXBsZW1lbnRlZCBieSBzdWJjbGFzc1wiKX0sdC5leHBvcnRzPXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUscixuKXtmdW5jdGlvbiBpKCl7dGhyb3cgbmV3IEVycm9yKFwic2VjdXJlIHJhbmRvbSBudW1iZXIgZ2VuZXJhdGlvbiBub3Qgc3VwcG9ydGVkIGJ5IHRoaXMgYnJvd3NlclxcbnVzZSBjaHJvbWUsIEZpcmVGb3ggb3IgSW50ZXJuZXQgRXhwbG9yZXIgMTFcIil9ZnVuY3Rpb24gbyh0LGkpe2lmKHQ+NjU1MzYpdGhyb3cgbmV3IEVycm9yKFwicmVxdWVzdGVkIHRvbyBtYW55IHJhbmRvbSBieXRlc1wiKTt2YXIgbz1uZXcgZS5VaW50OEFycmF5KHQpO3Q+MCYmYS5nZXRSYW5kb21WYWx1ZXMobyk7dmFyIGY9bmV3IHIoby5idWZmZXIpO3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIGk/bi5uZXh0VGljayhmdW5jdGlvbigpe2kobnVsbCxmKX0pOmZ9dmFyIGE9ZS5jcnlwdG98fGUubXNDcnlwdG87YSYmYS5nZXRSYW5kb21WYWx1ZXM/dC5leHBvcnRzPW86dC5leHBvcnRzPWl9KS5jYWxsKGUscigzOSkscigxKS5CdWZmZXIscigyNikpfSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBpKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSk7dmFyIGk9bih0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5jYWxsKHRoaXMpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJtZXNzYWdlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnZvaWQgMCE9PXQ/U3RyaW5nKHQpOlwiXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6aS5jb25zdHJ1Y3Rvci5uYW1lfSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGksaS5jb25zdHJ1Y3RvciksaX1yZXR1cm4gaShlLHQpLGV9KEVycm9yKTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDExNSksYT1yKDc1KSxmPXIoOTApLHM9cig5MSksdT1yKDIwMSksaD1yKDExNiksYz1yKDE1OSksZD1yKDExMyksbD0vXmNmOihbMS05YS1mXVswLTlhLWZdezAsM318MCk6W2EtekEtWjAtOV8tXSokLyxwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LFt7a2V5OlwiZ2V0VHlwZUlkXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5UWVBFX0lEfX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLkZFQVRVUkVfQklUTUFTS319LHtrZXk6XCJnZXRDb25kaXRpb25cIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBhO3JldHVybiB0LnNldFR5cGVJZCh0aGlzLmdldFR5cGVJZCgpKSx0LnNldEJpdG1hc2sodGhpcy5nZXRCaXRtYXNrKCkpLHQuc2V0SGFzaCh0aGlzLmdlbmVyYXRlSGFzaCgpKSx0LnNldE1heEZ1bGZpbGxtZW50TGVuZ3RoKHRoaXMuY2FsY3VsYXRlTWF4RnVsZmlsbG1lbnRMZW5ndGgoKSksdH19LHtrZXk6XCJnZXRDb25kaXRpb25VcmlcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldENvbmRpdGlvbigpLnNlcmlhbGl6ZVVyaSgpfX0se2tleTpcImdldENvbmRpdGlvbkJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0Q29uZGl0aW9uKCkuc2VyaWFsaXplQmluYXJ5KCl9fSx7a2V5OlwiZ2VuZXJhdGVIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJUaGlzIG1ldGhvZCBzaG91bGQgYmUgaW1wbGVtZW50ZWQgYnkgYSBzdWJjbGFzc1wiKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGY7cmV0dXJuIHRoaXMud3JpdGVQYXlsb2FkKHQpLHQuZ2V0U2l6ZSgpfX0se2tleTpcInNlcmlhbGl6ZVVyaVwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuXCJjZjpcIit0aGlzLmdldFR5cGVJZCgpLnRvU3RyaW5nKDE2KStcIjpcIitoLmVuY29kZSh0aGlzLnNlcmlhbGl6ZVBheWxvYWQoKSl9fSx7a2V5Olwic2VyaWFsaXplQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD1uZXcgcztyZXR1cm4gdC53cml0ZVVJbnQxNih0aGlzLmdldFR5cGVJZCgpKSx0LndyaXRlVmFyT2N0ZXRTdHJpbmcodGhpcy5zZXJpYWxpemVQYXlsb2FkKCkpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5Olwic2VyaWFsaXplUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IHM7cmV0dXJuIHRoaXMud3JpdGVQYXlsb2FkKHQpLHQuZ2V0QnVmZmVyKCl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX19XSxbe2tleTpcImZyb21VcmlcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2YgdClyZXR1cm4gZTtpZihcInN0cmluZ1wiIT10eXBlb2YgZSl0aHJvdyBuZXcgRXJyb3IoXCJTZXJpYWxpemVkIGZ1bGZpbGxtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7dmFyIHI9ZS5zcGxpdChcIjpcIik7aWYoXCJjZlwiIT09clswXSl0aHJvdyBuZXcgYygnU2VyaWFsaXplZCBmdWxmaWxsbWVudCBtdXN0IHN0YXJ0IHdpdGggXCJjZjpcIicpO2lmKCF0LlJFR0VYLmV4ZWMoZSkpdGhyb3cgbmV3IGQoXCJJbnZhbGlkIGZ1bGZpbGxtZW50IGZvcm1hdFwiKTt2YXIgbj1wYXJzZUludChyWzFdLDE2KSxpPWguZGVjb2RlKHJbMl0pLGE9by5nZXRDbGFzc0Zyb21UeXBlSWQobiksZj1uZXcgYTtyZXR1cm4gZi5wYXJzZVBheWxvYWQodS5mcm9tKGkpLGkubGVuZ3RoKSxmfX0se2tleTpcImZyb21CaW5hcnlcIix2YWx1ZTpmdW5jdGlvbih0KXt0PXUuZnJvbSh0KTt2YXIgZT1vLmdldENsYXNzRnJvbVR5cGVJZCh0LnJlYWRVSW50MTYoKSkscj1uZXcgZSxuPXQucmVhZExlbmd0aFByZWZpeCgpO3JldHVybiByLnBhcnNlUGF5bG9hZCh0LG4pLHJ9fV0pLHR9KCk7cC5SRUdFWD1sLHQuZXhwb3J0cz1wfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyksaT1yKDcpKFwidG9TdHJpbmdUYWdcIiksbz1cIkFyZ3VtZW50c1wiPT1uKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSksYT1mdW5jdGlvbih0LGUpe3RyeXtyZXR1cm4gdFtlXX1jYXRjaCh0KXt9fTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGUscixmO3JldHVybiB2b2lkIDA9PT10P1wiVW5kZWZpbmVkXCI6bnVsbD09PXQ/XCJOdWxsXCI6XCJzdHJpbmdcIj09dHlwZW9mKHI9YShlPU9iamVjdCh0KSxpKSk/cjpvP24oZSk6XCJPYmplY3RcIj09KGY9bihlKSkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIGUuY2FsbGVlP1wiQXJndW1lbnRzXCI6Zn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDIzKTt0LmV4cG9ydHM9T2JqZWN0KFwielwiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24odCl7cmV0dXJuXCJTdHJpbmdcIj09bih0KT90LnNwbGl0KFwiXCIpOk9iamVjdCh0KX19LGZ1bmN0aW9uKHQsZSl7ZS5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCksaT1uZXcgZShuKSxvPTA7bzxuOysrbylpW29dPXRbb11ecltvXTtyZXR1cm4gaX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLlJlcG9ydGVyPXIoNTMyKS5SZXBvcnRlcixuLkRlY29kZXJCdWZmZXI9cigyMTQpLkRlY29kZXJCdWZmZXIsbi5FbmNvZGVyQnVmZmVyPXIoMjE0KS5FbmNvZGVyQnVmZmVyLG4uTm9kZT1yKDUzMSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBuPU1hdGgubWluKHQubGVuZ3RoLHIubGVuZ3RoKSxpPW5ldyBlKG4pLG89MDtvPG47KytvKWlbb109dFtvXV5yW29dO3JldHVybiBpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gaSh0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIG8uaXNCTih0KT90Oih0aGlzLm5lZ2F0aXZlPTAsdGhpcy53b3Jkcz1udWxsLHRoaXMubGVuZ3RoPTAsdGhpcy5yZWQ9bnVsbCx2b2lkKG51bGwhPT10JiYoXCJsZVwiIT09ZSYmXCJiZVwiIT09ZXx8KHI9ZSxlPTEwKSx0aGlzLl9pbml0KHR8fDAsZXx8MTAscnx8XCJiZVwiKSkpKX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG49MCxpPU1hdGgubWluKHQubGVuZ3RoLHIpLG89ZTtvPGk7bysrKXt2YXIgYT10LmNoYXJDb2RlQXQobyktNDg7bjw8PTQsbnw9YT49NDkmJmE8PTU0P2EtNDkrMTA6YT49MTcmJmE8PTIyP2EtMTcrMTA6MTUmYX1yZXR1cm4gbn1mdW5jdGlvbiBmKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89TWF0aC5taW4odC5sZW5ndGgsciksYT1lO2E8bzthKyspe3ZhciBmPXQuY2hhckNvZGVBdChhKS00ODtpKj1uLGkrPWY+PTQ5P2YtNDkrMTA6Zj49MTc/Zi0xNysxMDpmfXJldHVybiBpfWZ1bmN0aW9uIHModCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0LmJpdExlbmd0aCgpKSxyPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPXIvMjZ8MCxpPXIlMjY7ZVtyXT0odC53b3Jkc1tuXSYxPDxpKT4+Pml9cmV0dXJuIGV9ZnVuY3Rpb24gdSh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmU7dmFyIG49dC5sZW5ndGgrZS5sZW5ndGh8MDtyLmxlbmd0aD1uLG49bi0xfDA7dmFyIGk9MHx0LndvcmRzWzBdLG89MHxlLndvcmRzWzBdLGE9aSpvLGY9NjcxMDg4NjMmYSxzPWEvNjcxMDg4NjR8MDtyLndvcmRzWzBdPWY7Zm9yKHZhciB1PTE7dTxuO3UrKyl7Zm9yKHZhciBoPXM+Pj4yNixjPTY3MTA4ODYzJnMsZD1NYXRoLm1pbih1LGUubGVuZ3RoLTEpLGw9TWF0aC5tYXgoMCx1LXQubGVuZ3RoKzEpO2w8PWQ7bCsrKXt2YXIgcD11LWx8MDtpPTB8dC53b3Jkc1twXSxvPTB8ZS53b3Jkc1tsXSxhPWkqbytjLGgrPWEvNjcxMDg4NjR8MCxjPTY3MTA4ODYzJmF9ci53b3Jkc1t1XT0wfGMscz0wfGh9cmV0dXJuIDAhPT1zP3Iud29yZHNbdV09MHxzOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGgodCxlLHIpe3IubmVnYXRpdmU9ZS5uZWdhdGl2ZV50Lm5lZ2F0aXZlLHIubGVuZ3RoPXQubGVuZ3RoK2UubGVuZ3RoO2Zvcih2YXIgbj0wLGk9MCxvPTA7bzxyLmxlbmd0aC0xO28rKyl7dmFyIGE9aTtpPTA7Zm9yKHZhciBmPTY3MTA4ODYzJm4scz1NYXRoLm1pbihvLGUubGVuZ3RoLTEpLHU9TWF0aC5tYXgoMCxvLXQubGVuZ3RoKzEpO3U8PXM7dSsrKXt2YXIgaD1vLXUsYz0wfHQud29yZHNbaF0sZD0wfGUud29yZHNbdV0sbD1jKmQscD02NzEwODg2MyZsO2E9YSsobC82NzEwODg2NHwwKXwwLHA9cCtmfDAsZj02NzEwODg2MyZwLGE9YSsocD4+PjI2KXwwLGkrPWE+Pj4yNixhJj02NzEwODg2M31yLndvcmRzW29dPWYsbj1hLGE9aX1yZXR1cm4gMCE9PW4/ci53b3Jkc1tvXT1uOnIubGVuZ3RoLS0sci5zdHJpcCgpfWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPW5ldyBkO3JldHVybiBuLm11bHAodCxlLHIpfWZ1bmN0aW9uIGQodCxlKXt0aGlzLng9dCx0aGlzLnk9ZX1mdW5jdGlvbiBsKHQsZSl7dGhpcy5uYW1lPXQsdGhpcy5wPW5ldyBvKGUsMTYpLHRoaXMubj10aGlzLnAuYml0TGVuZ3RoKCksdGhpcy5rPW5ldyBvKDEpLml1c2hsbih0aGlzLm4pLmlzdWIodGhpcy5wKSx0aGlzLnRtcD10aGlzLl90bXAoKX1mdW5jdGlvbiBwKCl7bC5jYWxsKHRoaXMsXCJrMjU2XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmMyZlwiKX1mdW5jdGlvbiBiKCl7bC5jYWxsKHRoaXMsXCJwMjI0XCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMVwiKX1mdW5jdGlvbiB2KCl7bC5jYWxsKHRoaXMsXCJwMTkyXCIsXCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiBmZmZmZmZmZlwiKX1mdW5jdGlvbiB5KCl7bC5jYWxsKHRoaXMsXCIyNTUxOVwiLFwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiKX1mdW5jdGlvbiBtKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXt2YXIgZT1vLl9wcmltZSh0KTt0aGlzLm09ZS5wLHRoaXMucHJpbWU9ZX1lbHNlIG4odC5ndG4oMSksXCJtb2R1bHVzIG11c3QgYmUgZ3JlYXRlciB0aGFuIDFcIiksdGhpcy5tPXQsdGhpcy5wcmltZT1udWxsfWZ1bmN0aW9uIGcodCl7bS5jYWxsKHRoaXMsdCksdGhpcy5zaGlmdD10aGlzLm0uYml0TGVuZ3RoKCksdGhpcy5zaGlmdCUyNiE9PTAmJih0aGlzLnNoaWZ0Kz0yNi10aGlzLnNoaWZ0JTI2KSx0aGlzLnI9bmV3IG8oMSkuaXVzaGxuKHRoaXMuc2hpZnQpLHRoaXMucjI9dGhpcy5pbW9kKHRoaXMuci5zcXIoKSksdGhpcy5yaW52PXRoaXMuci5faW52bXAodGhpcy5tKSx0aGlzLm1pbnY9dGhpcy5yaW52Lm11bCh0aGlzLnIpLmlzdWJuKDEpLmRpdih0aGlzLm0pLHRoaXMubWludj10aGlzLm1pbnYudW1vZCh0aGlzLnIpLHRoaXMubWludj10aGlzLnIuc3ViKHRoaXMubWludil9XCJvYmplY3RcIj09dHlwZW9mIHQ/dC5leHBvcnRzPW86ZS5CTj1vLG8uQk49byxvLndvcmRTaXplPTI2O3ZhciB3O3RyeXt3PXIoMSkuQnVmZmVyfWNhdGNoKHQpe31vLmlzQk49ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBvfHxudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHQmJnQuY29uc3RydWN0b3Iud29yZFNpemU9PT1vLndvcmRTaXplJiZBcnJheS5pc0FycmF5KHQud29yZHMpfSxvLm1heD1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKT4wP3Q6ZX0sby5taW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5jbXAoZSk8MD90OmV9LG8ucHJvdG90eXBlLl9pbml0PWZ1bmN0aW9uKHQsZSxyKXtpZihcIm51bWJlclwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdE51bWJlcih0LGUscik7aWYoXCJvYmplY3RcIj09dHlwZW9mIHQpcmV0dXJuIHRoaXMuX2luaXRBcnJheSh0LGUscik7XCJoZXhcIj09PWUmJihlPTE2KSxuKGU9PT0oMHxlKSYmZT49MiYmZTw9MzYpLHQ9dC50b1N0cmluZygpLnJlcGxhY2UoL1xccysvZyxcIlwiKTt2YXIgaT0wO1wiLVwiPT09dFswXSYmaSsrLDE2PT09ZT90aGlzLl9wYXJzZUhleCh0LGkpOnRoaXMuX3BhcnNlQmFzZSh0LGUsaSksXCItXCI9PT10WzBdJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0TnVtYmVyPWZ1bmN0aW9uKHQsZSxyKXt0PDAmJih0aGlzLm5lZ2F0aXZlPTEsdD0tdCksdDw2NzEwODg2ND8odGhpcy53b3Jkcz1bNjcxMDg4NjMmdF0sdGhpcy5sZW5ndGg9MSk6dDw0NTAzNTk5NjI3MzcwNDk2Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjNdLHRoaXMubGVuZ3RoPTIpOihuKHQ8OTAwNzE5OTI1NDc0MDk5MiksdGhpcy53b3Jkcz1bNjcxMDg4NjMmdCx0LzY3MTA4ODY0JjY3MTA4ODYzLDFdLHRoaXMubGVuZ3RoPTMpLFwibGVcIj09PXImJnRoaXMuX2luaXRBcnJheSh0aGlzLnRvQXJyYXkoKSxlLHIpfSxvLnByb3RvdHlwZS5faW5pdEFycmF5PWZ1bmN0aW9uKHQsZSxyKXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0Lmxlbmd0aCksdC5sZW5ndGg8PTApcmV0dXJuIHRoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTEsdGhpczt0aGlzLmxlbmd0aD1NYXRoLmNlaWwodC5sZW5ndGgvMyksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5sZW5ndGg7aSsrKXRoaXMud29yZHNbaV09MDt2YXIgbyxhLGY9MDtpZihcImJlXCI9PT1yKWZvcihpPXQubGVuZ3RoLTEsbz0wO2k+PTA7aS09MylhPXRbaV18dFtpLTFdPDw4fHRbaS0yXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO2Vsc2UgaWYoXCJsZVwiPT09cilmb3IoaT0wLG89MDtpPHQubGVuZ3RoO2krPTMpYT10W2ldfHRbaSsxXTw8OHx0W2krMl08PDE2LHRoaXMud29yZHNbb118PWE8PGYmNjcxMDg4NjMsdGhpcy53b3Jkc1tvKzFdPWE+Pj4yNi1mJjY3MTA4ODYzLGYrPTI0LGY+PTI2JiYoZi09MjYsbysrKTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VIZXg9ZnVuY3Rpb24odCxlKXt0aGlzLmxlbmd0aD1NYXRoLmNlaWwoKHQubGVuZ3RoLWUpLzYpLHRoaXMud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIHI9MDtyPHRoaXMubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPTA7dmFyIG4saSxvPTA7Zm9yKHI9dC5sZW5ndGgtNixuPTA7cj49ZTtyLT02KWk9YSh0LHIscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyxvKz0yNCxvPj0yNiYmKG8tPTI2LG4rKyk7cis2IT09ZSYmKGk9YSh0LGUscis2KSx0aGlzLndvcmRzW25dfD1pPDxvJjY3MTA4ODYzLHRoaXMud29yZHNbbisxXXw9aT4+PjI2LW8mNDE5NDMwMyksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fcGFyc2VCYXNlPWZ1bmN0aW9uKHQsZSxyKXt0aGlzLndvcmRzPVswXSx0aGlzLmxlbmd0aD0xO2Zvcih2YXIgbj0wLGk9MTtpPD02NzEwODg2MztpKj1lKW4rKztuLS0saT1pL2V8MDtmb3IodmFyIG89dC5sZW5ndGgtcixhPW8lbixzPU1hdGgubWluKG8sby1hKStyLHU9MCxoPXI7aDxzO2grPW4pdT1mKHQsaCxoK24sZSksdGhpcy5pbXVsbihpKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KTtpZigwIT09YSl7dmFyIGM9MTtmb3IodT1mKHQsaCx0Lmxlbmd0aCxlKSxoPTA7aDxhO2grKyljKj1lO3RoaXMuaW11bG4oYyksdGhpcy53b3Jkc1swXSt1PDY3MTA4ODY0P3RoaXMud29yZHNbMF0rPXU6dGhpcy5faWFkZG4odSl9fSxvLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKHQpe3Qud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoKTtmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl0LndvcmRzW2VdPXRoaXMud29yZHNbZV07dC5sZW5ndGg9dGhpcy5sZW5ndGgsdC5uZWdhdGl2ZT10aGlzLm5lZ2F0aXZlLHQucmVkPXRoaXMucmVkfSxvLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0aGlzLmNvcHkodCksdH0sby5wcm90b3R5cGUuX2V4cGFuZD1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQ7KXRoaXMud29yZHNbdGhpcy5sZW5ndGgrK109MDtyZXR1cm4gdGhpc30sby5wcm90b3R5cGUuc3RyaXA9ZnVuY3Rpb24oKXtmb3IoO3RoaXMubGVuZ3RoPjEmJjA9PT10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdOyl0aGlzLmxlbmd0aC0tO3JldHVybiB0aGlzLl9ub3JtU2lnbigpfSxvLnByb3RvdHlwZS5fbm9ybVNpZ249ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXSYmKHRoaXMubmVnYXRpdmU9MCksdGhpc30sby5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybih0aGlzLnJlZD9cIjxCTi1SOiBcIjpcIjxCTjogXCIpK3RoaXMudG9TdHJpbmcoMTYpK1wiPlwifTt2YXIgXz1bXCJcIixcIjBcIixcIjAwXCIsXCIwMDBcIixcIjAwMDBcIixcIjAwMDAwXCIsXCIwMDAwMDBcIixcIjAwMDAwMDBcIixcIjAwMDAwMDAwXCIsXCIwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwXCIsXCIwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIl0sTT1bMCwwLDI1LDE2LDEyLDExLDEwLDksOCw4LDcsNyw3LDcsNiw2LDYsNiw2LDYsNiw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1XSxTPVswLDAsMzM1NTQ0MzIsNDMwNDY3MjEsMTY3NzcyMTYsNDg4MjgxMjUsNjA0NjYxNzYsNDAzNTM2MDcsMTY3NzcyMTYsNDMwNDY3MjEsMWU3LDE5NDg3MTcxLDM1ODMxODA4LDYyNzQ4NTE3LDc1Mjk1MzYsMTEzOTA2MjUsMTY3NzcyMTYsMjQxMzc1NjksMzQwMTIyMjQsNDcwNDU4ODEsNjRlNiw0MDg0MTAxLDUxNTM2MzIsNjQzNjM0Myw3OTYyNjI0LDk3NjU2MjUsMTE4ODEzNzYsMTQzNDg5MDcsMTcyMTAzNjgsMjA1MTExNDksMjQzZTUsMjg2MjkxNTEsMzM1NTQ0MzIsMzkxMzUzOTMsNDU0MzU0MjQsNTI1MjE4NzUsNjA0NjYxNzZdO28ucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKHQsZSl7dD10fHwxMCxlPTB8ZXx8MTt2YXIgcjtpZigxNj09PXR8fFwiaGV4XCI9PT10KXtyPVwiXCI7Zm9yKHZhciBpPTAsbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9dGhpcy53b3Jkc1thXSxzPSgxNjc3NzIxNSYoZjw8aXxvKSkudG9TdHJpbmcoMTYpO289Zj4+PjI0LWkmMTY3NzcyMTUscj0wIT09b3x8YSE9PXRoaXMubGVuZ3RoLTE/X1s2LXMubGVuZ3RoXStzK3I6cytyLGkrPTIsaT49MjYmJihpLT0yNixhLS0pfWZvcigwIT09byYmKHI9by50b1N0cmluZygxNikrcik7ci5sZW5ndGglZSE9PTA7KXI9XCIwXCIrcjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJihyPVwiLVwiK3IpLHJ9aWYodD09PSgwfHQpJiZ0Pj0yJiZ0PD0zNil7dmFyIHU9TVt0XSxoPVNbdF07cj1cIlwiO3ZhciBjPXRoaXMuY2xvbmUoKTtmb3IoYy5uZWdhdGl2ZT0wOyFjLmlzWmVybygpOyl7dmFyIGQ9Yy5tb2RuKGgpLnRvU3RyaW5nKHQpO2M9Yy5pZGl2bihoKSxyPWMuaXNaZXJvKCk/ZCtyOl9bdS1kLmxlbmd0aF0rZCtyfWZvcih0aGlzLmlzWmVybygpJiYocj1cIjBcIityKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1uKCExLFwiQmFzZSBzaG91bGQgYmUgYmV0d2VlbiAyIGFuZCAzNlwiKX0sby5wcm90b3R5cGUudG9OdW1iZXI9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzWzBdO3JldHVybiAyPT09dGhpcy5sZW5ndGg/dCs9NjcxMDg4NjQqdGhpcy53b3Jkc1sxXTozPT09dGhpcy5sZW5ndGgmJjE9PT10aGlzLndvcmRzWzJdP3QrPTQ1MDM1OTk2MjczNzA0OTYrNjcxMDg4NjQqdGhpcy53b3Jkc1sxXTp0aGlzLmxlbmd0aD4yJiZuKCExLFwiTnVtYmVyIGNhbiBvbmx5IHNhZmVseSBzdG9yZSB1cCB0byA1MyBiaXRzXCIpLDAhPT10aGlzLm5lZ2F0aXZlPy10OnR9LG8ucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnRvU3RyaW5nKDE2KX0sby5wcm90b3R5cGUudG9CdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihcInVuZGVmaW5lZFwiIT10eXBlb2YgdyksdGhpcy50b0FycmF5TGlrZSh3LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy50b0FycmF5TGlrZShBcnJheSx0LGUpfSxvLnByb3RvdHlwZS50b0FycmF5TGlrZT1mdW5jdGlvbih0LGUscil7dmFyIGk9dGhpcy5ieXRlTGVuZ3RoKCksbz1yfHxNYXRoLm1heCgxLGkpO24oaTw9byxcImJ5dGUgYXJyYXkgbG9uZ2VyIHRoYW4gZGVzaXJlZCBsZW5ndGhcIiksbihvPjAsXCJSZXF1ZXN0ZWQgYXJyYXkgbGVuZ3RoIDw9IDBcIiksdGhpcy5zdHJpcCgpO3ZhciBhLGYscz1cImxlXCI9PT1lLHU9bmV3IHQobyksaD10aGlzLmNsb25lKCk7aWYocyl7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtmXT1hO2Zvcig7ZjxvO2YrKyl1W2ZdPTB9ZWxzZXtmb3IoZj0wO2Y8by1pO2YrKyl1W2ZdPTA7Zm9yKGY9MDshaC5pc1plcm8oKTtmKyspYT1oLmFuZGxuKDI1NSksaC5pdXNocm4oOCksdVtvLWYtMV09YX1yZXR1cm4gdX0sTWF0aC5jbHozMj9vLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3JldHVybiAzMi1NYXRoLmNsejMyKHQpfTpvLnByb3RvdHlwZS5fY291bnRCaXRzPWZ1bmN0aW9uKHQpe3ZhciBlPXQscj0wO3JldHVybiBlPj00MDk2JiYocis9MTMsZT4+Pj0xMyksZT49NjQmJihyKz03LGU+Pj49NyksZT49OCYmKHIrPTQsZT4+Pj00KSxlPj0yJiYocis9MixlPj4+PTIpLHIrZX0sby5wcm90b3R5cGUuX3plcm9CaXRzPWZ1bmN0aW9uKHQpe2lmKDA9PT10KXJldHVybiAyNjt2YXIgZT10LHI9MDtyZXR1cm4gMD09PSg4MTkxJmUpJiYocis9MTMsZT4+Pj0xMyksMD09PSgxMjcmZSkmJihyKz03LGU+Pj49NyksMD09PSgxNSZlKSYmKHIrPTQsZT4+Pj00KSwwPT09KDMmZSkmJihyKz0yLGU+Pj49MiksMD09PSgxJmUpJiZyKysscn0sby5wcm90b3R5cGUuYml0TGVuZ3RoPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy53b3Jkc1t0aGlzLmxlbmd0aC0xXSxlPXRoaXMuX2NvdW50Qml0cyh0KTtyZXR1cm4gMjYqKHRoaXMubGVuZ3RoLTEpK2V9LG8ucHJvdG90eXBlLnplcm9CaXRzPWZ1bmN0aW9uKCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gMDtmb3IodmFyIHQ9MCxlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciByPXRoaXMuX3plcm9CaXRzKHRoaXMud29yZHNbZV0pO2lmKHQrPXIsMjYhPT1yKWJyZWFrfXJldHVybiB0fSxvLnByb3RvdHlwZS5ieXRlTGVuZ3RoPWZ1bmN0aW9uKCl7cmV0dXJuIE1hdGguY2VpbCh0aGlzLmJpdExlbmd0aCgpLzgpfSxvLnByb3RvdHlwZS50b1R3b3M9ZnVuY3Rpb24odCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlP3RoaXMuYWJzKCkuaW5vdG4odCkuaWFkZG4oMSk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5mcm9tVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy50ZXN0bih0LTEpP3RoaXMubm90bih0KS5pYWRkbigxKS5pbmVnKCk6dGhpcy5jbG9uZSgpfSxvLnByb3RvdHlwZS5pc05lZz1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbmVnKCl9LG8ucHJvdG90eXBlLmluZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc1plcm8oKXx8KHRoaXMubmVnYXRpdmVePTEpLHRoaXN9LG8ucHJvdG90eXBlLml1b3I9ZnVuY3Rpb24odCl7Zm9yKDt0aGlzLmxlbmd0aDx0Lmxlbmd0aDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRoaXMud29yZHNbZV09dGhpcy53b3Jkc1tlXXx0LndvcmRzW2VdO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlvcj1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVvcih0KX0sby5wcm90b3R5cGUub3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pb3IodCk6dC5jbG9uZSgpLmlvcih0aGlzKX0sby5wcm90b3R5cGUudW9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXVvcih0KTp0LmNsb25lKCkuaXVvcih0aGlzKX0sby5wcm90b3R5cGUuaXVhbmQ9ZnVuY3Rpb24odCl7dmFyIGU7ZT10aGlzLmxlbmd0aD50Lmxlbmd0aD90OnRoaXM7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspdGhpcy53b3Jkc1tyXT10aGlzLndvcmRzW3JdJnQud29yZHNbcl07cmV0dXJuIHRoaXMubGVuZ3RoPWUubGVuZ3RoLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gbigwPT09KHRoaXMubmVnYXRpdmV8dC5uZWdhdGl2ZSkpLHRoaXMuaXVhbmQodCl9LG8ucHJvdG90eXBlLmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlhbmQodCk6dC5jbG9uZSgpLmlhbmQodGhpcyl9LG8ucHJvdG90eXBlLnVhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdWFuZCh0KTp0LmNsb25lKCkuaXVhbmQodGhpcyl9LG8ucHJvdG90eXBlLml1eG9yPWZ1bmN0aW9uKHQpe3ZhciBlLHI7dGhpcy5sZW5ndGg+dC5sZW5ndGg/KGU9dGhpcyxyPXQpOihlPXQscj10aGlzKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl0aGlzLndvcmRzW25dPWUud29yZHNbbl1eci53b3Jkc1tuXTtpZih0aGlzIT09ZSlmb3IoO248ZS5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5peG9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdXhvcih0KX0sby5wcm90b3R5cGUueG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXhvcih0KTp0LmNsb25lKCkuaXhvcih0aGlzKX0sby5wcm90b3R5cGUudXhvcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1eG9yKHQpOnQuY2xvbmUoKS5pdXhvcih0aGlzKX0sby5wcm90b3R5cGUuaW5vdG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9MHxNYXRoLmNlaWwodC8yNikscj10JTI2O3RoaXMuX2V4cGFuZChlKSxyPjAmJmUtLTtmb3IodmFyIGk9MDtpPGU7aSsrKXRoaXMud29yZHNbaV09NjcxMDg4NjMmfnRoaXMud29yZHNbaV07cmV0dXJuIHI+MCYmKHRoaXMud29yZHNbaV09fnRoaXMud29yZHNbaV0mNjcxMDg4NjM+PjI2LXIpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubm90bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlub3RuKHQpfSxvLnByb3RvdHlwZS5zZXRuPWZ1bmN0aW9uKHQsZSl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIHI9dC8yNnwwLGk9dCUyNjtyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksZT90aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl18MTw8aTp0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mfigxPDxpKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlhZGQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybiB0aGlzLm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdGhpcy5uZWdhdGl2ZV49MSx0aGlzLl9ub3JtU2lnbigpO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gdC5uZWdhdGl2ZT0wLGU9dGhpcy5pc3ViKHQpLHQubmVnYXRpdmU9MSxlLl9ub3JtU2lnbigpO3ZhciByLG47dGhpcy5sZW5ndGg+dC5sZW5ndGg/KHI9dGhpcyxuPXQpOihyPXQsbj10aGlzKTtmb3IodmFyIGk9MCxvPTA7bzxuLmxlbmd0aDtvKyspZT0oMHxyLndvcmRzW29dKSsoMHxuLndvcmRzW29dKStpLHRoaXMud29yZHNbb109NjcxMDg4NjMmZSxpPWU+Pj4yNjtmb3IoOzAhPT1pJiZvPHIubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2lmKHRoaXMubGVuZ3RoPXIubGVuZ3RoLDAhPT1pKXRoaXMud29yZHNbdGhpcy5sZW5ndGhdPWksdGhpcy5sZW5ndGgrKztlbHNlIGlmKHIhPT10aGlzKWZvcig7bzxyLmxlbmd0aDtvKyspdGhpcy53b3Jkc1tvXT1yLndvcmRzW29dO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7dmFyIGU7cmV0dXJuIDAhPT10Lm5lZ2F0aXZlJiYwPT09dGhpcy5uZWdhdGl2ZT8odC5uZWdhdGl2ZT0wLGU9dGhpcy5zdWIodCksdC5uZWdhdGl2ZV49MSxlKTowPT09dC5uZWdhdGl2ZSYmMCE9PXRoaXMubmVnYXRpdmU/KHRoaXMubmVnYXRpdmU9MCxlPXQuc3ViKHRoaXMpLHRoaXMubmVnYXRpdmU9MSxlKTp0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFkZCh0KTp0LmNsb25lKCkuaWFkZCh0aGlzKX0sby5wcm90b3R5cGUuaXN1Yj1mdW5jdGlvbih0KXtpZigwIT09dC5uZWdhdGl2ZSl7dC5uZWdhdGl2ZT0wO3ZhciBlPXRoaXMuaWFkZCh0KTtyZXR1cm4gdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCl9aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGQodCksdGhpcy5uZWdhdGl2ZT0xLHRoaXMuX25vcm1TaWduKCk7dmFyIHI9dGhpcy5jbXAodCk7aWYoMD09PXIpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmxlbmd0aD0xLHRoaXMud29yZHNbMF09MCx0aGlzO3ZhciBuLGk7cj4wPyhuPXRoaXMsaT10KToobj10LGk9dGhpcyk7Zm9yKHZhciBvPTAsYT0wO2E8aS5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSktKDB8aS53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtmb3IoOzAhPT1vJiZhPG4ubGVuZ3RoO2ErKyllPSgwfG4ud29yZHNbYV0pK28sbz1lPj4yNix0aGlzLndvcmRzW2FdPTY3MTA4ODYzJmU7aWYoMD09PW8mJmE8bi5sZW5ndGgmJm4hPT10aGlzKWZvcig7YTxuLmxlbmd0aDthKyspdGhpcy53b3Jkc1thXT1uLndvcmRzW2FdO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxhKSxuIT09dGhpcyYmKHRoaXMubmVnYXRpdmU9MSksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5zdWI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3ViKHQpfTt2YXIgRT1mdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9dC53b3JkcyxmPWUud29yZHMscz1yLndvcmRzLHU9MCxoPTB8YVswXSxjPTgxOTEmaCxkPWg+Pj4xMyxsPTB8YVsxXSxwPTgxOTEmbCxiPWw+Pj4xMyx2PTB8YVsyXSx5PTgxOTEmdixtPXY+Pj4xMyxnPTB8YVszXSx3PTgxOTEmZyxfPWc+Pj4xMyxNPTB8YVs0XSxTPTgxOTEmTSxFPU0+Pj4xMyxBPTB8YVs1XSxrPTgxOTEmQSx4PUE+Pj4xMyxJPTB8YVs2XSxCPTgxOTEmSSxPPUk+Pj4xMyxSPTB8YVs3XSxQPTgxOTEmUixUPVI+Pj4xMyxqPTB8YVs4XSxDPTgxOTEmaixOPWo+Pj4xMyxMPTB8YVs5XSxVPTgxOTEmTCx6PUw+Pj4xMyxEPTB8ZlswXSxxPTgxOTEmRCxGPUQ+Pj4xMyxLPTB8ZlsxXSxHPTgxOTEmSyxWPUs+Pj4xMyxIPTB8ZlsyXSxYPTgxOTEmSCxZPUg+Pj4xMyxXPTB8ZlszXSxaPTgxOTEmVyxKPVc+Pj4xMywkPTB8Zls0XSxRPTgxOTEmJCx0dD0kPj4+MTMsZXQ9MHxmWzVdLHJ0PTgxOTEmZXQsbnQ9ZXQ+Pj4xMyxpdD0wfGZbNl0sb3Q9ODE5MSZpdCxhdD1pdD4+PjEzLGZ0PTB8Zls3XSxzdD04MTkxJmZ0LHV0PWZ0Pj4+MTMsaHQ9MHxmWzhdLGN0PTgxOTEmaHQsZHQ9aHQ+Pj4xMyxsdD0wfGZbOV0scHQ9ODE5MSZsdCxidD1sdD4+PjEzO3IubmVnYXRpdmU9dC5uZWdhdGl2ZV5lLm5lZ2F0aXZlLHIubGVuZ3RoPTE5LG49TWF0aC5pbXVsKGMscSksaT1NYXRoLmltdWwoYyxGKSxpPWkrTWF0aC5pbXVsKGQscSl8MCxvPU1hdGguaW11bChkLEYpO3ZhciB2dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsodnQ+Pj4yNil8MCx2dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwocCxxKSxpPU1hdGguaW11bChwLEYpLGk9aStNYXRoLmltdWwoYixxKXwwLG89TWF0aC5pbXVsKGIsRiksbj1uK01hdGguaW11bChjLEcpfDAsaT1pK01hdGguaW11bChjLFYpfDAsaT1pK01hdGguaW11bChkLEcpfDAsbz1vK01hdGguaW11bChkLFYpfDA7dmFyIHl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh5dD4+PjI2KXwwLHl0Jj02NzEwODg2MyxuPU1hdGguaW11bCh5LHEpLGk9TWF0aC5pbXVsKHksRiksaT1pK01hdGguaW11bChtLHEpfDAsbz1NYXRoLmltdWwobSxGKSxuPW4rTWF0aC5pbXVsKHAsRyl8MCxpPWkrTWF0aC5pbXVsKHAsVil8MCxpPWkrTWF0aC5pbXVsKGIsRyl8MCxvPW8rTWF0aC5pbXVsKGIsVil8MCxuPW4rTWF0aC5pbXVsKGMsWCl8MCxpPWkrTWF0aC5pbXVsKGMsWSl8MCxpPWkrTWF0aC5pbXVsKGQsWCl8MCxvPW8rTWF0aC5pbXVsKGQsWSl8MDt2YXIgbXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKG10Pj4+MjYpfDAsbXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHcscSksaT1NYXRoLmltdWwodyxGKSxpPWkrTWF0aC5pbXVsKF8scSl8MCxvPU1hdGguaW11bChfLEYpLG49bitNYXRoLmltdWwoeSxHKXwwLGk9aStNYXRoLmltdWwoeSxWKXwwLGk9aStNYXRoLmltdWwobSxHKXwwLG89bytNYXRoLmltdWwobSxWKXwwLG49bitNYXRoLmltdWwocCxYKXwwLGk9aStNYXRoLmltdWwocCxZKXwwLGk9aStNYXRoLmltdWwoYixYKXwwLG89bytNYXRoLmltdWwoYixZKXwwLG49bitNYXRoLmltdWwoYyxaKXwwLGk9aStNYXRoLmltdWwoYyxKKXwwLGk9aStNYXRoLmltdWwoZCxaKXwwLG89bytNYXRoLmltdWwoZCxKKXwwO3ZhciBndD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoZ3Q+Pj4yNil8MCxndCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUyxxKSxpPU1hdGguaW11bChTLEYpLGk9aStNYXRoLmltdWwoRSxxKXwwLG89TWF0aC5pbXVsKEUsRiksbj1uK01hdGguaW11bCh3LEcpfDAsaT1pK01hdGguaW11bCh3LFYpfDAsaT1pK01hdGguaW11bChfLEcpfDAsbz1vK01hdGguaW11bChfLFYpfDAsbj1uK01hdGguaW11bCh5LFgpfDAsaT1pK01hdGguaW11bCh5LFkpfDAsaT1pK01hdGguaW11bChtLFgpfDAsbz1vK01hdGguaW11bChtLFkpfDAsbj1uK01hdGguaW11bChwLFopfDAsaT1pK01hdGguaW11bChwLEopfDAsaT1pK01hdGguaW11bChiLFopfDAsbz1vK01hdGguaW11bChiLEopfDAsbj1uK01hdGguaW11bChjLFEpfDAsaT1pK01hdGguaW11bChjLHR0KXwwLGk9aStNYXRoLmltdWwoZCxRKXwwLG89bytNYXRoLmltdWwoZCx0dCl8MDt2YXIgd3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHd0Pj4+MjYpfDAsd3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKGsscSksaT1NYXRoLmltdWwoayxGKSxpPWkrTWF0aC5pbXVsKHgscSl8MCxvPU1hdGguaW11bCh4LEYpLG49bitNYXRoLmltdWwoUyxHKXwwLGk9aStNYXRoLmltdWwoUyxWKXwwLGk9aStNYXRoLmltdWwoRSxHKXwwLG89bytNYXRoLmltdWwoRSxWKXwwLG49bitNYXRoLmltdWwodyxYKXwwLGk9aStNYXRoLmltdWwodyxZKXwwLGk9aStNYXRoLmltdWwoXyxYKXwwLG89bytNYXRoLmltdWwoXyxZKXwwLG49bitNYXRoLmltdWwoeSxaKXwwLGk9aStNYXRoLmltdWwoeSxKKXwwLGk9aStNYXRoLmltdWwobSxaKXwwLG89bytNYXRoLmltdWwobSxKKXwwLG49bitNYXRoLmltdWwocCxRKXwwLGk9aStNYXRoLmltdWwocCx0dCl8MCxpPWkrTWF0aC5pbXVsKGIsUSl8MCxvPW8rTWF0aC5pbXVsKGIsdHQpfDAsbj1uK01hdGguaW11bChjLHJ0KXwwLGk9aStNYXRoLmltdWwoYyxudCl8MCxpPWkrTWF0aC5pbXVsKGQscnQpfDAsbz1vK01hdGguaW11bChkLG50KXwwO3ZhciBfdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoX3Q+Pj4yNil8MCxfdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQixxKSxpPU1hdGguaW11bChCLEYpLGk9aStNYXRoLmltdWwoTyxxKXwwLG89TWF0aC5pbXVsKE8sRiksbj1uK01hdGguaW11bChrLEcpfDAsaT1pK01hdGguaW11bChrLFYpfDAsaT1pK01hdGguaW11bCh4LEcpfDAsbz1vK01hdGguaW11bCh4LFYpfDAsbj1uK01hdGguaW11bChTLFgpfDAsaT1pK01hdGguaW11bChTLFkpfDAsaT1pK01hdGguaW11bChFLFgpfDAsbz1vK01hdGguaW11bChFLFkpfDAsbj1uK01hdGguaW11bCh3LFopfDAsaT1pK01hdGguaW11bCh3LEopfDAsaT1pK01hdGguaW11bChfLFopfDAsbz1vK01hdGguaW11bChfLEopfDAsbj1uK01hdGguaW11bCh5LFEpfDAsaT1pK01hdGguaW11bCh5LHR0KXwwLGk9aStNYXRoLmltdWwobSxRKXwwLG89bytNYXRoLmltdWwobSx0dCl8MCxuPW4rTWF0aC5pbXVsKHAscnQpfDAsaT1pK01hdGguaW11bChwLG50KXwwLGk9aStNYXRoLmltdWwoYixydCl8MCxvPW8rTWF0aC5pbXVsKGIsbnQpfDAsbj1uK01hdGguaW11bChjLG90KXwwLGk9aStNYXRoLmltdWwoYyxhdCl8MCxpPWkrTWF0aC5pbXVsKGQsb3QpfDAsbz1vK01hdGguaW11bChkLGF0KXwwO3ZhciBNdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoTXQ+Pj4yNil8MCxNdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoUCxxKSxpPU1hdGguaW11bChQLEYpLGk9aStNYXRoLmltdWwoVCxxKXwwLG89TWF0aC5pbXVsKFQsRiksbj1uK01hdGguaW11bChCLEcpfDAsaT1pK01hdGguaW11bChCLFYpfDAsaT1pK01hdGguaW11bChPLEcpfDAsbz1vK01hdGguaW11bChPLFYpfDAsbj1uK01hdGguaW11bChrLFgpfDAsaT1pK01hdGguaW11bChrLFkpfDAsaT1pK01hdGguaW11bCh4LFgpfDAsbz1vK01hdGguaW11bCh4LFkpfDAsbj1uK01hdGguaW11bChTLFopfDAsaT1pK01hdGguaW11bChTLEopfDAsaT1pK01hdGguaW11bChFLFopfDAsbz1vK01hdGguaW11bChFLEopfDAsbj1uK01hdGguaW11bCh3LFEpfDAsaT1pK01hdGguaW11bCh3LHR0KXwwLGk9aStNYXRoLmltdWwoXyxRKXwwLG89bytNYXRoLmltdWwoXyx0dCl8MCxuPW4rTWF0aC5pbXVsKHkscnQpfDAsaT1pK01hdGguaW11bCh5LG50KXwwLGk9aStNYXRoLmltdWwobSxydCl8MCxvPW8rTWF0aC5pbXVsKG0sbnQpfDAsbj1uK01hdGguaW11bChwLG90KXwwLGk9aStNYXRoLmltdWwocCxhdCl8MCxpPWkrTWF0aC5pbXVsKGIsb3QpfDAsbz1vK01hdGguaW11bChiLGF0KXwwLG49bitNYXRoLmltdWwoYyxzdCl8MCxpPWkrTWF0aC5pbXVsKGMsdXQpfDAsaT1pK01hdGguaW11bChkLHN0KXwwLG89bytNYXRoLmltdWwoZCx1dCl8MDt2YXIgU3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFN0Pj4+MjYpfDAsU3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKEMscSksaT1NYXRoLmltdWwoQyxGKSxpPWkrTWF0aC5pbXVsKE4scSl8MCxvPU1hdGguaW11bChOLEYpLG49bitNYXRoLmltdWwoUCxHKXwwLGk9aStNYXRoLmltdWwoUCxWKXwwLGk9aStNYXRoLmltdWwoVCxHKXwwLG89bytNYXRoLmltdWwoVCxWKXwwLG49bitNYXRoLmltdWwoQixYKXwwLGk9aStNYXRoLmltdWwoQixZKXwwLGk9aStNYXRoLmltdWwoTyxYKXwwLG89bytNYXRoLmltdWwoTyxZKXwwLG49bitNYXRoLmltdWwoayxaKXwwLGk9aStNYXRoLmltdWwoayxKKXwwLGk9aStNYXRoLmltdWwoeCxaKXwwLG89bytNYXRoLmltdWwoeCxKKXwwLG49bitNYXRoLmltdWwoUyxRKXwwLGk9aStNYXRoLmltdWwoUyx0dCl8MCxpPWkrTWF0aC5pbXVsKEUsUSl8MCxvPW8rTWF0aC5pbXVsKEUsdHQpfDAsbj1uK01hdGguaW11bCh3LHJ0KXwwLGk9aStNYXRoLmltdWwodyxudCl8MCxpPWkrTWF0aC5pbXVsKF8scnQpfDAsbz1vK01hdGguaW11bChfLG50KXwwLG49bitNYXRoLmltdWwoeSxvdCl8MCxpPWkrTWF0aC5pbXVsKHksYXQpfDAsaT1pK01hdGguaW11bChtLG90KXwwLG89bytNYXRoLmltdWwobSxhdCl8MCxuPW4rTWF0aC5pbXVsKHAsc3QpfDAsaT1pK01hdGguaW11bChwLHV0KXwwLGk9aStNYXRoLmltdWwoYixzdCl8MCxvPW8rTWF0aC5pbXVsKGIsdXQpfDAsbj1uK01hdGguaW11bChjLGN0KXwwLGk9aStNYXRoLmltdWwoYyxkdCl8MCxpPWkrTWF0aC5pbXVsKGQsY3QpfDAsbz1vK01hdGguaW11bChkLGR0KXwwO3ZhciBFdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoRXQ+Pj4yNil8MCxFdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxxKSxpPU1hdGguaW11bChVLEYpLGk9aStNYXRoLmltdWwoeixxKXwwLG89TWF0aC5pbXVsKHosRiksbj1uK01hdGguaW11bChDLEcpfDAsaT1pK01hdGguaW11bChDLFYpfDAsaT1pK01hdGguaW11bChOLEcpfDAsbz1vK01hdGguaW11bChOLFYpfDAsbj1uK01hdGguaW11bChQLFgpfDAsaT1pK01hdGguaW11bChQLFkpfDAsaT1pK01hdGguaW11bChULFgpfDAsbz1vK01hdGguaW11bChULFkpfDAsbj1uK01hdGguaW11bChCLFopfDAsaT1pK01hdGguaW11bChCLEopfDAsaT1pK01hdGguaW11bChPLFopfDAsbz1vK01hdGguaW11bChPLEopfDAsbj1uK01hdGguaW11bChrLFEpfDAsaT1pK01hdGguaW11bChrLHR0KXwwLGk9aStNYXRoLmltdWwoeCxRKXwwLG89bytNYXRoLmltdWwoeCx0dCl8MCxuPW4rTWF0aC5pbXVsKFMscnQpfDAsaT1pK01hdGguaW11bChTLG50KXwwLGk9aStNYXRoLmltdWwoRSxydCl8MCxvPW8rTWF0aC5pbXVsKEUsbnQpfDAsbj1uK01hdGguaW11bCh3LG90KXwwLGk9aStNYXRoLmltdWwodyxhdCl8MCxpPWkrTWF0aC5pbXVsKF8sb3QpfDAsbz1vK01hdGguaW11bChfLGF0KXwwLG49bitNYXRoLmltdWwoeSxzdCl8MCxpPWkrTWF0aC5pbXVsKHksdXQpfDAsaT1pK01hdGguaW11bChtLHN0KXwwLG89bytNYXRoLmltdWwobSx1dCl8MCxuPW4rTWF0aC5pbXVsKHAsY3QpfDAsaT1pK01hdGguaW11bChwLGR0KXwwLGk9aStNYXRoLmltdWwoYixjdCl8MCxvPW8rTWF0aC5pbXVsKGIsZHQpfDAsbj1uK01hdGguaW11bChjLHB0KXwwLGk9aStNYXRoLmltdWwoYyxidCl8MCxpPWkrTWF0aC5pbXVsKGQscHQpfDAsbz1vK01hdGguaW11bChkLGJ0KXwwO3ZhciBBdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQXQ+Pj4yNil8MCxBdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxHKSxpPU1hdGguaW11bChVLFYpLGk9aStNYXRoLmltdWwoeixHKXwwLG89TWF0aC5pbXVsKHosViksbj1uK01hdGguaW11bChDLFgpfDAsaT1pK01hdGguaW11bChDLFkpfDAsaT1pK01hdGguaW11bChOLFgpfDAsbz1vK01hdGguaW11bChOLFkpfDAsbj1uK01hdGguaW11bChQLFopfDAsaT1pK01hdGguaW11bChQLEopfDAsaT1pK01hdGguaW11bChULFopfDAsbz1vK01hdGguaW11bChULEopfDAsbj1uK01hdGguaW11bChCLFEpfDAsaT1pK01hdGguaW11bChCLHR0KXwwLGk9aStNYXRoLmltdWwoTyxRKXwwLG89bytNYXRoLmltdWwoTyx0dCl8MCxuPW4rTWF0aC5pbXVsKGsscnQpfDAsaT1pK01hdGguaW11bChrLG50KXwwLGk9aStNYXRoLmltdWwoeCxydCl8MCxvPW8rTWF0aC5pbXVsKHgsbnQpfDAsbj1uK01hdGguaW11bChTLG90KXwwLGk9aStNYXRoLmltdWwoUyxhdCl8MCxpPWkrTWF0aC5pbXVsKEUsb3QpfDAsbz1vK01hdGguaW11bChFLGF0KXwwLG49bitNYXRoLmltdWwodyxzdCl8MCxpPWkrTWF0aC5pbXVsKHcsdXQpfDAsaT1pK01hdGguaW11bChfLHN0KXwwLG89bytNYXRoLmltdWwoXyx1dCl8MCxuPW4rTWF0aC5pbXVsKHksY3QpfDAsaT1pK01hdGguaW11bCh5LGR0KXwwLGk9aStNYXRoLmltdWwobSxjdCl8MCxvPW8rTWF0aC5pbXVsKG0sZHQpfDAsbj1uK01hdGguaW11bChwLHB0KXwwLGk9aStNYXRoLmltdWwocCxidCl8MCxpPWkrTWF0aC5pbXVsKGIscHQpfDAsbz1vK01hdGguaW11bChiLGJ0KXwwO3ZhciBrdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoa3Q+Pj4yNil8MCxrdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxYKSxpPU1hdGguaW11bChVLFkpLGk9aStNYXRoLmltdWwoeixYKXwwLG89TWF0aC5pbXVsKHosWSksbj1uK01hdGguaW11bChDLFopfDAsaT1pK01hdGguaW11bChDLEopfDAsaT1pK01hdGguaW11bChOLFopfDAsbz1vK01hdGguaW11bChOLEopfDAsbj1uK01hdGguaW11bChQLFEpfDAsaT1pK01hdGguaW11bChQLHR0KXwwLGk9aStNYXRoLmltdWwoVCxRKXwwLG89bytNYXRoLmltdWwoVCx0dCl8MCxuPW4rTWF0aC5pbXVsKEIscnQpfDAsaT1pK01hdGguaW11bChCLG50KXwwLGk9aStNYXRoLmltdWwoTyxydCl8MCxvPW8rTWF0aC5pbXVsKE8sbnQpfDAsbj1uK01hdGguaW11bChrLG90KXwwLGk9aStNYXRoLmltdWwoayxhdCl8MCxpPWkrTWF0aC5pbXVsKHgsb3QpfDAsbz1vK01hdGguaW11bCh4LGF0KXwwLG49bitNYXRoLmltdWwoUyxzdCl8MCxpPWkrTWF0aC5pbXVsKFMsdXQpfDAsaT1pK01hdGguaW11bChFLHN0KXwwLG89bytNYXRoLmltdWwoRSx1dCl8MCxuPW4rTWF0aC5pbXVsKHcsY3QpfDAsaT1pK01hdGguaW11bCh3LGR0KXwwLGk9aStNYXRoLmltdWwoXyxjdCl8MCxvPW8rTWF0aC5pbXVsKF8sZHQpfDAsbj1uK01hdGguaW11bCh5LHB0KXwwLGk9aStNYXRoLmltdWwoeSxidCl8MCxpPWkrTWF0aC5pbXVsKG0scHQpfDAsbz1vK01hdGguaW11bChtLGJ0KXwwO3ZhciB4dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoeHQ+Pj4yNil8MCx4dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxaKSxpPU1hdGguaW11bChVLEopLGk9aStNYXRoLmltdWwoeixaKXwwLG89TWF0aC5pbXVsKHosSiksbj1uK01hdGguaW11bChDLFEpfDAsaT1pK01hdGguaW11bChDLHR0KXwwLGk9aStNYXRoLmltdWwoTixRKXwwLG89bytNYXRoLmltdWwoTix0dCl8MCxuPW4rTWF0aC5pbXVsKFAscnQpfDAsaT1pK01hdGguaW11bChQLG50KXwwLGk9aStNYXRoLmltdWwoVCxydCl8MCxvPW8rTWF0aC5pbXVsKFQsbnQpfDAsbj1uK01hdGguaW11bChCLG90KXwwLGk9aStNYXRoLmltdWwoQixhdCl8MCxpPWkrTWF0aC5pbXVsKE8sb3QpfDAsbz1vK01hdGguaW11bChPLGF0KXwwLG49bitNYXRoLmltdWwoayxzdCl8MCxpPWkrTWF0aC5pbXVsKGssdXQpfDAsaT1pK01hdGguaW11bCh4LHN0KXwwLG89bytNYXRoLmltdWwoeCx1dCl8MCxuPW4rTWF0aC5pbXVsKFMsY3QpfDAsaT1pK01hdGguaW11bChTLGR0KXwwLGk9aStNYXRoLmltdWwoRSxjdCl8MCxvPW8rTWF0aC5pbXVsKEUsZHQpfDAsbj1uK01hdGguaW11bCh3LHB0KXwwLGk9aStNYXRoLmltdWwodyxidCl8MCxpPWkrTWF0aC5pbXVsKF8scHQpfDAsbz1vK01hdGguaW11bChfLGJ0KXwwO3ZhciBJdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoSXQ+Pj4yNil8MCxJdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxRKSxpPU1hdGguaW11bChVLHR0KSxpPWkrTWF0aC5pbXVsKHosUSl8MCxvPU1hdGguaW11bCh6LHR0KSxuPW4rTWF0aC5pbXVsKEMscnQpfDAsaT1pK01hdGguaW11bChDLG50KXwwLGk9aStNYXRoLmltdWwoTixydCl8MCxvPW8rTWF0aC5pbXVsKE4sbnQpfDAsbj1uK01hdGguaW11bChQLG90KXwwLGk9aStNYXRoLmltdWwoUCxhdCl8MCxpPWkrTWF0aC5pbXVsKFQsb3QpfDAsbz1vK01hdGguaW11bChULGF0KXwwLG49bitNYXRoLmltdWwoQixzdCl8MCxpPWkrTWF0aC5pbXVsKEIsdXQpfDAsaT1pK01hdGguaW11bChPLHN0KXwwLG89bytNYXRoLmltdWwoTyx1dCl8MCxuPW4rTWF0aC5pbXVsKGssY3QpfDAsaT1pK01hdGguaW11bChrLGR0KXwwLGk9aStNYXRoLmltdWwoeCxjdCl8MCxvPW8rTWF0aC5pbXVsKHgsZHQpfDAsbj1uK01hdGguaW11bChTLHB0KXwwLGk9aStNYXRoLmltdWwoUyxidCl8MCxpPWkrTWF0aC5pbXVsKEUscHQpfDAsbz1vK01hdGguaW11bChFLGJ0KXwwO3ZhciBCdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoQnQ+Pj4yNil8MCxCdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxydCksaT1NYXRoLmltdWwoVSxudCksaT1pK01hdGguaW11bCh6LHJ0KXwwLG89TWF0aC5pbXVsKHosbnQpLG49bitNYXRoLmltdWwoQyxvdCl8MCxpPWkrTWF0aC5pbXVsKEMsYXQpfDAsaT1pK01hdGguaW11bChOLG90KXwwLG89bytNYXRoLmltdWwoTixhdCl8MCxuPW4rTWF0aC5pbXVsKFAsc3QpfDAsaT1pK01hdGguaW11bChQLHV0KXwwLGk9aStNYXRoLmltdWwoVCxzdCl8MCxvPW8rTWF0aC5pbXVsKFQsdXQpfDAsbj1uK01hdGguaW11bChCLGN0KXwwLGk9aStNYXRoLmltdWwoQixkdCl8MCxpPWkrTWF0aC5pbXVsKE8sY3QpfDAsbz1vK01hdGguaW11bChPLGR0KXwwLG49bitNYXRoLmltdWwoayxwdCl8MCxpPWkrTWF0aC5pbXVsKGssYnQpfDAsaT1pK01hdGguaW11bCh4LHB0KXwwLG89bytNYXRoLmltdWwoeCxidCl8MDt2YXIgT3Q9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKE90Pj4+MjYpfDAsT3QmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsb3QpLGk9TWF0aC5pbXVsKFUsYXQpLGk9aStNYXRoLmltdWwoeixvdCl8MCxvPU1hdGguaW11bCh6LGF0KSxuPW4rTWF0aC5pbXVsKEMsc3QpfDAsaT1pK01hdGguaW11bChDLHV0KXwwLGk9aStNYXRoLmltdWwoTixzdCl8MCxvPW8rTWF0aC5pbXVsKE4sdXQpfDAsbj1uK01hdGguaW11bChQLGN0KXwwLGk9aStNYXRoLmltdWwoUCxkdCl8MCxpPWkrTWF0aC5pbXVsKFQsY3QpfDAsbz1vK01hdGguaW11bChULGR0KXwwLG49bitNYXRoLmltdWwoQixwdCl8MCxpPWkrTWF0aC5pbXVsKEIsYnQpfDAsaT1pK01hdGguaW11bChPLHB0KXwwLG89bytNYXRoLmltdWwoTyxidCl8MDt2YXIgUnQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFJ0Pj4+MjYpfDAsUnQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUsc3QpLGk9TWF0aC5pbXVsKFUsdXQpLGk9aStNYXRoLmltdWwoeixzdCl8MCxvPU1hdGguaW11bCh6LHV0KSxuPW4rTWF0aC5pbXVsKEMsY3QpfDAsaT1pK01hdGguaW11bChDLGR0KXwwLGk9aStNYXRoLmltdWwoTixjdCl8MCxvPW8rTWF0aC5pbXVsKE4sZHQpfDAsbj1uK01hdGguaW11bChQLHB0KXwwLGk9aStNYXRoLmltdWwoUCxidCl8MCxpPWkrTWF0aC5pbXVsKFQscHQpfDAsbz1vK01hdGguaW11bChULGJ0KXwwO3ZhciBQdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUHQ+Pj4yNil8MCxQdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxjdCksaT1NYXRoLmltdWwoVSxkdCksaT1pK01hdGguaW11bCh6LGN0KXwwLG89TWF0aC5pbXVsKHosZHQpLG49bitNYXRoLmltdWwoQyxwdCl8MCxpPWkrTWF0aC5pbXVsKEMsYnQpfDAsaT1pK01hdGguaW11bChOLHB0KXwwLG89bytNYXRoLmltdWwoTixidCl8MDt2YXIgVHQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKFR0Pj4+MjYpfDAsVHQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKFUscHQpLGk9TWF0aC5pbXVsKFUsYnQpLGk9aStNYXRoLmltdWwoeixwdCl8MCxvPU1hdGguaW11bCh6LGJ0KTt2YXIganQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3JldHVybiB1PShvKyhpPj4+MTMpfDApKyhqdD4+PjI2KXwwLGp0Jj02NzEwODg2MyxzWzBdPXZ0LHNbMV09eXQsc1syXT1tdCxzWzNdPWd0LHNbNF09d3Qsc1s1XT1fdCxzWzZdPU10LHNbN109U3Qsc1s4XT1FdCxzWzldPUF0LHNbMTBdPWt0LHNbMTFdPXh0LHNbMTJdPUl0LHNbMTNdPUJ0LHNbMTRdPU90LHNbMTVdPVJ0LHNbMTZdPVB0LHNbMTddPVR0LHNbMThdPWp0LDAhPT11JiYoc1sxOV09dSxyLmxlbmd0aCsrKSxyfTtNYXRoLmltdWx8fChFPXUpLG8ucHJvdG90eXBlLm11bFRvPWZ1bmN0aW9uKHQsZSl7dmFyIHIsbj10aGlzLmxlbmd0aCt0Lmxlbmd0aDtyZXR1cm4gcj0xMD09PXRoaXMubGVuZ3RoJiYxMD09PXQubGVuZ3RoP0UodGhpcyx0LGUpOm48NjM/dSh0aGlzLHQsZSk6bjwxMDI0P2godGhpcyx0LGUpOmModGhpcyx0LGUpfSxkLnByb3RvdHlwZS5tYWtlUkJUPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj1vLnByb3RvdHlwZS5fY291bnRCaXRzKHQpLTEsbj0wO248dDtuKyspZVtuXT10aGlzLnJldkJpbihuLHIsdCk7cmV0dXJuIGV9LGQucHJvdG90eXBlLnJldkJpbj1mdW5jdGlvbih0LGUscil7aWYoMD09PXR8fHQ9PT1yLTEpcmV0dXJuIHQ7Zm9yKHZhciBuPTAsaT0wO2k8ZTtpKyspbnw9KDEmdCk8PGUtaS0xLHQ+Pj0xO3JldHVybiBufSxcbmQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LGwhPT1mJiYobT1zKmMtdSpkLGQ9cypkK3UqYyxjPW0pfX0sZC5wcm90b3R5cGUuZ3Vlc3NMZW4xM2I9ZnVuY3Rpb24odCxlKXt2YXIgcj0xfE1hdGgubWF4KGUsdCksbj0xJnIsaT0wO2ZvcihyPXIvMnwwO3I7cj4+Pj0xKWkrKztyZXR1cm4gMTw8aSsxK259LGQucHJvdG90eXBlLmNvbmp1Z2F0ZT1mdW5jdGlvbih0LGUscil7aWYoIShyPD0xKSlmb3IodmFyIG49MDtuPHIvMjtuKyspe3ZhciBpPXRbbl07dFtuXT10W3Itbi0xXSx0W3Itbi0xXT1pLGk9ZVtuXSxlW25dPS1lW3Itbi0xXSxlW3Itbi0xXT0taX19LGQucHJvdG90eXBlLm5vcm1hbGl6ZTEzYj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj0wLG49MDtuPGUvMjtuKyspe3ZhciBpPTgxOTIqTWF0aC5yb3VuZCh0WzIqbisxXS9lKStNYXRoLnJvdW5kKHRbMipuXS9lKStyO3Rbbl09NjcxMDg4NjMmaSxyPWk8NjcxMDg4NjQ/MDppLzY3MTA4ODY0fDB9cmV0dXJuIHR9LGQucHJvdG90eXBlLmNvbnZlcnQxM2I9ZnVuY3Rpb24odCxlLHIsaSl7Zm9yKHZhciBvPTAsYT0wO2E8ZTthKyspbys9MHx0W2FdLHJbMiphXT04MTkxJm8sbz4+Pj0xMyxyWzIqYSsxXT04MTkxJm8sbz4+Pj0xMztmb3IoYT0yKmU7YTxpOysrYSlyW2FdPTA7bigwPT09byksbigwPT09KG8mLTgxOTIpKX0sZC5wcm90b3R5cGUuc3R1Yj1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQpLHI9MDtyPHQ7cisrKWVbcl09MDtyZXR1cm4gZX0sZC5wcm90b3R5cGUubXVscD1mdW5jdGlvbih0LGUscil7dmFyIG49Mip0aGlzLmd1ZXNzTGVuMTNiKHQubGVuZ3RoLGUubGVuZ3RoKSxpPXRoaXMubWFrZVJCVChuKSxvPXRoaXMuc3R1YihuKSxhPW5ldyBBcnJheShuKSxmPW5ldyBBcnJheShuKSxzPW5ldyBBcnJheShuKSx1PW5ldyBBcnJheShuKSxoPW5ldyBBcnJheShuKSxjPW5ldyBBcnJheShuKSxkPXIud29yZHM7ZC5sZW5ndGg9bix0aGlzLmNvbnZlcnQxM2IodC53b3Jkcyx0Lmxlbmd0aCxhLG4pLHRoaXMuY29udmVydDEzYihlLndvcmRzLGUubGVuZ3RoLHUsbiksdGhpcy50cmFuc2Zvcm0oYSxvLGYscyxuLGkpLHRoaXMudHJhbnNmb3JtKHUsbyxoLGMsbixpKTtmb3IodmFyIGw9MDtsPG47bCsrKXt2YXIgcD1mW2xdKmhbbF0tc1tsXSpjW2xdO3NbbF09ZltsXSpjW2xdK3NbbF0qaFtsXSxmW2xdPXB9cmV0dXJuIHRoaXMuY29uanVnYXRlKGYscyxuKSx0aGlzLnRyYW5zZm9ybShmLHMsZCxvLG4saSksdGhpcy5jb25qdWdhdGUoZCxvLG4pLHRoaXMubm9ybWFsaXplMTNiKGQsbiksci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGgsci5zdHJpcCgpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSx0aGlzLm11bFRvKHQsZSl9LG8ucHJvdG90eXBlLm11bGY9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG8obnVsbCk7cmV0dXJuIGUud29yZHM9bmV3IEFycmF5KHRoaXMubGVuZ3RoK3QubGVuZ3RoKSxjKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLm11bFRvKHQsdGhpcyl9LG8ucHJvdG90eXBlLmltdWxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCk7Zm9yKHZhciBlPTAscj0wO3I8dGhpcy5sZW5ndGg7cisrKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSp0LG89KDY3MTA4ODYzJmkpKyg2NzEwODg2MyZlKTtlPj49MjYsZSs9aS82NzEwODg2NHwwLGUrPW8+Pj4yNix0aGlzLndvcmRzW3JdPTY3MTA4ODYzJm99cmV0dXJuIDAhPT1lJiYodGhpcy53b3Jkc1tyXT1lLHRoaXMubGVuZ3RoKyspLHRoaXN9LG8ucHJvdG90eXBlLm11bG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbXVsbih0KX0sby5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubXVsKHRoaXMpfSxvLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW11bCh0aGlzLmNsb25lKCkpfSxvLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCl7dmFyIGU9cyh0KTtpZigwPT09ZS5sZW5ndGgpcmV0dXJuIG5ldyBvKDEpO2Zvcih2YXIgcj10aGlzLG49MDtuPGUubGVuZ3RoJiYwPT09ZVtuXTtuKysscj1yLnNxcigpKTtpZigrK248ZS5sZW5ndGgpZm9yKHZhciBpPXIuc3FyKCk7bjxlLmxlbmd0aDtuKyssaT1pLnNxcigpKTAhPT1lW25dJiYocj1yLm11bChpKSk7cmV0dXJuIHJ9LG8ucHJvdG90eXBlLml1c2hsbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZSxyPXQlMjYsaT0odC1yKS8yNixvPTY3MTA4ODYzPj4+MjYtcjw8MjYtcjtpZigwIT09cil7dmFyIGE9MDtmb3IoZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXt2YXIgZj10aGlzLndvcmRzW2VdJm8scz0oMHx0aGlzLndvcmRzW2VdKS1mPDxyO3RoaXMud29yZHNbZV09c3xhLGE9Zj4+PjI2LXJ9YSYmKHRoaXMud29yZHNbZV09YSx0aGlzLmxlbmd0aCsrKX1pZigwIT09aSl7Zm9yKGU9dGhpcy5sZW5ndGgtMTtlPj0wO2UtLSl0aGlzLndvcmRzW2UraV09dGhpcy53b3Jkc1tlXTtmb3IoZT0wO2U8aTtlKyspdGhpcy53b3Jkc1tlXT0wO3RoaXMubGVuZ3RoKz1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hsbih0KX0sby5wcm90b3R5cGUuaXVzaHJuPWZ1bmN0aW9uKHQsZSxyKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgaTtpPWU/KGUtZSUyNikvMjY6MDt2YXIgbz10JTI2LGE9TWF0aC5taW4oKHQtbykvMjYsdGhpcy5sZW5ndGgpLGY9NjcxMDg4NjNeNjcxMDg4NjM+Pj5vPDxvLHM9cjtpZihpLT1hLGk9TWF0aC5tYXgoMCxpKSxzKXtmb3IodmFyIHU9MDt1PGE7dSsrKXMud29yZHNbdV09dGhpcy53b3Jkc1t1XTtzLmxlbmd0aD1hfWlmKDA9PT1hKTtlbHNlIGlmKHRoaXMubGVuZ3RoPmEpZm9yKHRoaXMubGVuZ3RoLT1hLHU9MDt1PHRoaXMubGVuZ3RoO3UrKyl0aGlzLndvcmRzW3VdPXRoaXMud29yZHNbdSthXTtlbHNlIHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xO3ZhciBoPTA7Zm9yKHU9dGhpcy5sZW5ndGgtMTt1Pj0wJiYoMCE9PWh8fHU+PWkpO3UtLSl7dmFyIGM9MHx0aGlzLndvcmRzW3VdO3RoaXMud29yZHNbdV09aDw8MjYtb3xjPj4+byxoPWMmZn1yZXR1cm4gcyYmMCE9PWgmJihzLndvcmRzW3MubGVuZ3RoKytdPWgpLDA9PT10aGlzLmxlbmd0aCYmKHRoaXMud29yZHNbMF09MCx0aGlzLmxlbmd0aD0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmlzaHJuPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbigwPT09dGhpcy5uZWdhdGl2ZSksdGhpcy5pdXNocm4odCxlLHIpfSxvLnByb3RvdHlwZS5zaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNobG4odCl9LG8ucHJvdG90eXBlLnVzaGxuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5zaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXNocm4odCl9LG8ucHJvdG90eXBlLnVzaHJuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaXVzaHJuKHQpfSxvLnByb3RvdHlwZS50ZXN0bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiExO3ZhciBvPXRoaXMud29yZHNbcl07cmV0dXJuISEobyZpKX0sby5wcm90b3R5cGUuaW1hc2tuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNjtpZihuKDA9PT10aGlzLm5lZ2F0aXZlLFwiaW1hc2tuIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZSBudW1iZXJzXCIpLHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzO2lmKDAhPT1lJiZyKyssdGhpcy5sZW5ndGg9TWF0aC5taW4ocix0aGlzLmxlbmd0aCksMCE9PWUpe3ZhciBpPTY3MTA4ODYzXjY3MTA4ODYzPj4+ZTw8ZTt0aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdJj1pfXJldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLm1hc2tuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW1hc2tuKHQpfSxvLnByb3RvdHlwZS5pYWRkbj1mdW5jdGlvbih0KXtyZXR1cm4gbihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KSx0PDA/dGhpcy5pc3VibigtdCk6MCE9PXRoaXMubmVnYXRpdmU/MT09PXRoaXMubGVuZ3RoJiYoMHx0aGlzLndvcmRzWzBdKTx0Pyh0aGlzLndvcmRzWzBdPXQtKDB8dGhpcy53b3Jkc1swXSksdGhpcy5uZWdhdGl2ZT0wLHRoaXMpOih0aGlzLm5lZ2F0aXZlPTAsdGhpcy5pc3Vibih0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcyk6dGhpcy5faWFkZG4odCl9LG8ucHJvdG90eXBlLl9pYWRkbj1mdW5jdGlvbih0KXt0aGlzLndvcmRzWzBdKz10O2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV0+PTY3MTA4ODY0O2UrKyl0aGlzLndvcmRzW2VdLT02NzEwODg2NCxlPT09dGhpcy5sZW5ndGgtMT90aGlzLndvcmRzW2UrMV09MTp0aGlzLndvcmRzW2UrMV0rKztyZXR1cm4gdGhpcy5sZW5ndGg9TWF0aC5tYXgodGhpcy5sZW5ndGgsZSsxKSx0aGlzfSxvLnByb3RvdHlwZS5pc3Vibj1mdW5jdGlvbih0KXtpZihuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MClyZXR1cm4gdGhpcy5pYWRkbigtdCk7aWYoMCE9PXRoaXMubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzLmlhZGRuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzO2lmKHRoaXMud29yZHNbMF0tPXQsMT09PXRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzWzBdPDApdGhpcy53b3Jkc1swXT0tdGhpcy53b3Jkc1swXSx0aGlzLm5lZ2F0aXZlPTE7ZWxzZSBmb3IodmFyIGU9MDtlPHRoaXMubGVuZ3RoJiZ0aGlzLndvcmRzW2VdPDA7ZSsrKXRoaXMud29yZHNbZV0rPTY3MTA4ODY0LHRoaXMud29yZHNbZSsxXS09MTtyZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5hZGRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWFkZG4odCl9LG8ucHJvdG90eXBlLnN1Ym49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc3Vibih0KX0sby5wcm90b3R5cGUuaWFicz1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5lZ2F0aXZlPTAsdGhpc30sby5wcm90b3R5cGUuYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWJzKCl9LG8ucHJvdG90eXBlLl9pc2hsbnN1Ym11bD1mdW5jdGlvbih0LGUscil7dmFyIGksbz10Lmxlbmd0aCtyO3RoaXMuX2V4cGFuZChvKTt2YXIgYSxmPTA7Zm9yKGk9MDtpPHQubGVuZ3RoO2krKyl7YT0oMHx0aGlzLndvcmRzW2krcl0pK2Y7dmFyIHM9KDB8dC53b3Jkc1tpXSkqZTthLT02NzEwODg2MyZzLGY9KGE+PjI2KS0ocy82NzEwODg2NHwwKSx0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYX1mb3IoO2k8dGhpcy5sZW5ndGgtcjtpKyspYT0oMHx0aGlzLndvcmRzW2krcl0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2krcl09NjcxMDg4NjMmYTtpZigwPT09ZilyZXR1cm4gdGhpcy5zdHJpcCgpO2ZvcihuKGY9PT0tMSksZj0wLGk9MDtpPHRoaXMubGVuZ3RoO2krKylhPS0oMHx0aGlzLndvcmRzW2ldKStmLGY9YT4+MjYsdGhpcy53b3Jkc1tpXT02NzEwODg2MyZhO3JldHVybiB0aGlzLm5lZ2F0aXZlPTEsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5fd29yZERpdj1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMubGVuZ3RoLXQubGVuZ3RoLG49dGhpcy5jbG9uZSgpLGk9dCxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSxmPXRoaXMuX2NvdW50Qml0cyhhKTtyPTI2LWYsMCE9PXImJihpPWkudXNobG4ociksbi5pdXNobG4ociksYT0wfGkud29yZHNbaS5sZW5ndGgtMV0pO3ZhciBzLHU9bi5sZW5ndGgtaS5sZW5ndGg7aWYoXCJtb2RcIiE9PWUpe3M9bmV3IG8obnVsbCkscy5sZW5ndGg9dSsxLHMud29yZHM9bmV3IEFycmF5KHMubGVuZ3RoKTtmb3IodmFyIGg9MDtoPHMubGVuZ3RoO2grKylzLndvcmRzW2hdPTB9dmFyIGM9bi5jbG9uZSgpLl9pc2hsbnN1Ym11bChpLDEsdSk7MD09PWMubmVnYXRpdmUmJihuPWMscyYmKHMud29yZHNbdV09MSkpO2Zvcih2YXIgZD11LTE7ZD49MDtkLS0pe3ZhciBsPTY3MTA4ODY0KigwfG4ud29yZHNbaS5sZW5ndGgrZF0pKygwfG4ud29yZHNbaS5sZW5ndGgrZC0xXSk7Zm9yKGw9TWF0aC5taW4obC9hfDAsNjcxMDg4NjMpLG4uX2lzaGxuc3VibXVsKGksbCxkKTswIT09bi5uZWdhdGl2ZTspbC0tLG4ubmVnYXRpdmU9MCxuLl9pc2hsbnN1Ym11bChpLDEsZCksbi5pc1plcm8oKXx8KG4ubmVnYXRpdmVePTEpO3MmJihzLndvcmRzW2RdPWwpfXJldHVybiBzJiZzLnN0cmlwKCksbi5zdHJpcCgpLFwiZGl2XCIhPT1lJiYwIT09ciYmbi5pdXNocm4ocikse2RpdjpzfHxudWxsLG1vZDpufX0sby5wcm90b3R5cGUuZGl2bW9kPWZ1bmN0aW9uKHQsZSxyKXtpZihuKCF0LmlzWmVybygpKSx0aGlzLmlzWmVybygpKXJldHVybntkaXY6bmV3IG8oMCksbW9kOm5ldyBvKDApfTt2YXIgaSxhLGY7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZT8oZj10aGlzLm5lZygpLmRpdm1vZCh0LGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlhZGQodCkpLHtkaXY6aSxtb2Q6YX0pOjA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZT8oZj10aGlzLmRpdm1vZCh0Lm5lZygpLGUpLFwibW9kXCIhPT1lJiYoaT1mLmRpdi5uZWcoKSkse2RpdjppLG1vZDpmLm1vZH0pOjAhPT0odGhpcy5uZWdhdGl2ZSZ0Lm5lZ2F0aXZlKT8oZj10aGlzLm5lZygpLmRpdm1vZCh0Lm5lZygpLGUpLFwiZGl2XCIhPT1lJiYoYT1mLm1vZC5uZWcoKSxyJiYwIT09YS5uZWdhdGl2ZSYmYS5pc3ViKHQpKSx7ZGl2OmYuZGl2LG1vZDphfSk6dC5sZW5ndGg+dGhpcy5sZW5ndGh8fHRoaXMuY21wKHQpPDA/e2RpdjpuZXcgbygwKSxtb2Q6dGhpc306MT09PXQubGVuZ3RoP1wiZGl2XCI9PT1lP3tkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpudWxsfTpcIm1vZFwiPT09ZT97ZGl2Om51bGwsbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OntkaXY6dGhpcy5kaXZuKHQud29yZHNbMF0pLG1vZDpuZXcgbyh0aGlzLm1vZG4odC53b3Jkc1swXSkpfTp0aGlzLl93b3JkRGl2KHQsZSl9LG8ucHJvdG90eXBlLmRpdj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcImRpdlwiLCExKS5kaXZ9LG8ucHJvdG90eXBlLm1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCExKS5tb2R9LG8ucHJvdG90eXBlLnVtb2Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZGl2bW9kKHQsXCJtb2RcIiwhMCkubW9kfSxvLnByb3RvdHlwZS5kaXZSb3VuZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmRpdm1vZCh0KTtpZihlLm1vZC5pc1plcm8oKSlyZXR1cm4gZS5kaXY7dmFyIHI9MCE9PWUuZGl2Lm5lZ2F0aXZlP2UubW9kLmlzdWIodCk6ZS5tb2Qsbj10LnVzaHJuKDEpLGk9dC5hbmRsbigxKSxvPXIuY21wKG4pO3JldHVybiBvPDB8fDE9PT1pJiYwPT09bz9lLmRpdjowIT09ZS5kaXYubmVnYXRpdmU/ZS5kaXYuaXN1Ym4oMSk6ZS5kaXYuaWFkZG4oMSl9LG8ucHJvdG90eXBlLm1vZG49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPSgxPDwyNikldCxyPTAsaT10aGlzLmxlbmd0aC0xO2k+PTA7aS0tKXI9KGUqcisoMHx0aGlzLndvcmRzW2ldKSkldDtyZXR1cm4gcn0sby5wcm90b3R5cGUuaWRpdm49ZnVuY3Rpb24odCl7bih0PD02NzEwODg2Myk7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgaT0oMHx0aGlzLndvcmRzW3JdKSs2NzEwODg2NCplO3RoaXMud29yZHNbcl09aS90fDAsZT1pJXR9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuZGl2bj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlkaXZuKHQpfSxvLnByb3RvdHlwZS5lZ2NkPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9bmV3IG8oMCkscz1uZXcgbygxKSx1PTA7ZS5pc0V2ZW4oKSYmci5pc0V2ZW4oKTspZS5pdXNocm4oMSksci5pdXNocm4oMSksKyt1O2Zvcih2YXIgaD1yLmNsb25lKCksYz1lLmNsb25lKCk7IWUuaXNaZXJvKCk7KXtmb3IodmFyIGQ9MCxsPTE7MD09PShlLndvcmRzWzBdJmwpJiZkPDI2OysrZCxsPDw9MSk7aWYoZD4wKWZvcihlLml1c2hybihkKTtkLS0gPjA7KShpLmlzT2RkKCl8fGEuaXNPZGQoKSkmJihpLmlhZGQoaCksYS5pc3ViKGMpKSxpLml1c2hybigxKSxhLml1c2hybigxKTtmb3IodmFyIHA9MCxiPTE7MD09PShyLndvcmRzWzBdJmIpJiZwPDI2OysrcCxiPDw9MSk7aWYocD4wKWZvcihyLml1c2hybihwKTtwLS0gPjA7KShmLmlzT2RkKCl8fHMuaXNPZGQoKSkmJihmLmlhZGQoaCkscy5pc3ViKGMpKSxmLml1c2hybigxKSxzLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihmKSxhLmlzdWIocykpOihyLmlzdWIoZSksZi5pc3ViKGkpLHMuaXN1YihhKSl9cmV0dXJue2E6ZixiOnMsZ2NkOnIuaXVzaGxuKHUpfX0sby5wcm90b3R5cGUuX2ludm1wPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUpLG4oIXQuaXNaZXJvKCkpO3ZhciBlPXRoaXMscj10LmNsb25lKCk7ZT0wIT09ZS5uZWdhdGl2ZT9lLnVtb2QodCk6ZS5jbG9uZSgpO2Zvcih2YXIgaT1uZXcgbygxKSxhPW5ldyBvKDApLGY9ci5jbG9uZSgpO2UuY21wbigxKT4wJiZyLmNtcG4oMSk+MDspe2Zvcih2YXIgcz0wLHU9MTswPT09KGUud29yZHNbMF0mdSkmJnM8MjY7KytzLHU8PD0xKTtpZihzPjApZm9yKGUuaXVzaHJuKHMpO3MtLSA+MDspaS5pc09kZCgpJiZpLmlhZGQoZiksaS5pdXNocm4oMSk7Zm9yKHZhciBoPTAsYz0xOzA9PT0oci53b3Jkc1swXSZjKSYmaDwyNjsrK2gsYzw8PTEpO2lmKGg+MClmb3Ioci5pdXNocm4oaCk7aC0tID4wOylhLmlzT2RkKCkmJmEuaWFkZChmKSxhLml1c2hybigxKTtlLmNtcChyKT49MD8oZS5pc3ViKHIpLGkuaXN1YihhKSk6KHIuaXN1YihlKSxhLmlzdWIoaSkpfXZhciBkO3JldHVybiBkPTA9PT1lLmNtcG4oMSk/aTphLGQuY21wbigwKTwwJiZkLmlhZGQodCksZH0sby5wcm90b3R5cGUuZ2NkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNaZXJvKCkpcmV0dXJuIHQuYWJzKCk7aWYodC5pc1plcm8oKSlyZXR1cm4gdGhpcy5hYnMoKTt2YXIgZT10aGlzLmNsb25lKCkscj10LmNsb25lKCk7ZS5uZWdhdGl2ZT0wLHIubmVnYXRpdmU9MDtmb3IodmFyIG49MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpO24rKyllLml1c2hybigxKSxyLml1c2hybigxKTtmb3IoOzspe2Zvcig7ZS5pc0V2ZW4oKTspZS5pdXNocm4oMSk7Zm9yKDtyLmlzRXZlbigpOylyLml1c2hybigxKTt2YXIgaT1lLmNtcChyKTtpZihpPDApe3ZhciBvPWU7ZT1yLHI9b31lbHNlIGlmKDA9PT1pfHwwPT09ci5jbXBuKDEpKWJyZWFrO2UuaXN1YihyKX1yZXR1cm4gci5pdXNobG4obil9LG8ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZWdjZCh0KS5hLnVtb2QodCl9LG8ucHJvdG90eXBlLmlzRXZlbj1mdW5jdGlvbigpe3JldHVybiAwPT09KDEmdGhpcy53b3Jkc1swXSl9LG8ucHJvdG90eXBlLmlzT2RkPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuYW5kbG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMud29yZHNbMF0mdH0sby5wcm90b3R5cGUuYmluY249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2LGk9MTw8ZTtpZih0aGlzLmxlbmd0aDw9cilyZXR1cm4gdGhpcy5fZXhwYW5kKHIrMSksdGhpcy53b3Jkc1tyXXw9aSx0aGlzO2Zvcih2YXIgbz1pLGE9cjswIT09byYmYTx0aGlzLmxlbmd0aDthKyspe3ZhciBmPTB8dGhpcy53b3Jkc1thXTtmKz1vLG89Zj4+PjI2LGYmPTY3MTA4ODYzLHRoaXMud29yZHNbYV09Zn1yZXR1cm4gMCE9PW8mJih0aGlzLndvcmRzW2FdPW8sdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUuaXNaZXJvPWZ1bmN0aW9uKCl7cmV0dXJuIDE9PT10aGlzLmxlbmd0aCYmMD09PXRoaXMud29yZHNbMF19LG8ucHJvdG90eXBlLmNtcG49ZnVuY3Rpb24odCl7dmFyIGU9dDwwO2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYhZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmZSlyZXR1cm4gMTt0aGlzLnN0cmlwKCk7dmFyIHI7aWYodGhpcy5sZW5ndGg+MSlyPTE7ZWxzZXtlJiYodD0tdCksbih0PD02NzEwODg2MyxcIk51bWJlciBpcyB0b28gYmlnXCIpO3ZhciBpPTB8dGhpcy53b3Jkc1swXTtyPWk9PT10PzA6aTx0Py0xOjF9cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LXI6cn0sby5wcm90b3R5cGUuY21wPWZ1bmN0aW9uKHQpe2lmKDAhPT10aGlzLm5lZ2F0aXZlJiYwPT09dC5uZWdhdGl2ZSlyZXR1cm4tMTtpZigwPT09dGhpcy5uZWdhdGl2ZSYmMCE9PXQubmVnYXRpdmUpcmV0dXJuIDE7dmFyIGU9dGhpcy51Y21wKHQpO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZT8wfC1lOmV9LG8ucHJvdG90eXBlLnVjbXA9ZnVuY3Rpb24odCl7aWYodGhpcy5sZW5ndGg+dC5sZW5ndGgpcmV0dXJuIDE7aWYodGhpcy5sZW5ndGg8dC5sZW5ndGgpcmV0dXJuLTE7Zm9yKHZhciBlPTAscj10aGlzLmxlbmd0aC0xO3I+PTA7ci0tKXt2YXIgbj0wfHRoaXMud29yZHNbcl0saT0wfHQud29yZHNbcl07aWYobiE9PWkpe248aT9lPS0xOm4+aSYmKGU9MSk7YnJlYWt9fXJldHVybiBlfSxvLnByb3RvdHlwZS5ndG49ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmd0PWZ1bmN0aW9uKHQpe3JldHVybiAxPT09dGhpcy5jbXAodCl9LG8ucHJvdG90eXBlLmd0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT49MH0sby5wcm90b3R5cGUuZ3RlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KT49MH0sby5wcm90b3R5cGUubHRuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcG4odCk9PT0tMX0sby5wcm90b3R5cGUubHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPT09LTF9LG8ucHJvdG90eXBlLmx0ZW49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KTw9MH0sby5wcm90b3R5cGUubHRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNtcCh0KTw9MH0sby5wcm90b3R5cGUuZXFuPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXBuKHQpfSxvLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXRoaXMuY21wKHQpfSxvLnJlZD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG0odCl9LG8ucHJvdG90eXBlLnRvUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksbigwPT09dGhpcy5uZWdhdGl2ZSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLHQuY29udmVydFRvKHRoaXMpLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUuZnJvbVJlZD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwiZnJvbVJlZCB3b3JrcyBvbmx5IHdpdGggbnVtYmVycyBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLnJlZC5jb252ZXJ0RnJvbSh0aGlzKX0sby5wcm90b3R5cGUuX2ZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnJlZD10LHRoaXN9LG8ucHJvdG90eXBlLmZvcmNlUmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuKCF0aGlzLnJlZCxcIkFscmVhZHkgYSBudW1iZXIgaW4gcmVkdWN0aW9uIGNvbnRleHRcIiksdGhpcy5fZm9yY2VSZWQodCl9LG8ucHJvdG90eXBlLnJlZEFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEFkZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElBZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pYWRkKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFN1YiB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZElTdWI9ZnVuY3Rpb24odCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRJU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5pc3ViKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNobD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNobCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuc2hsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZE11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5tdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSU11bD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZE11bCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTIodGhpcyx0KSx0aGlzLnJlZC5pbXVsKHRoaXMsdCl9LG8ucHJvdG90eXBlLnJlZFNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FyIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5zcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZElTcXI9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmlzcXIodGhpcyl9LG8ucHJvdG90eXBlLnJlZFNxcnQ9ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZFNxcnQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcnQodGhpcyl9LG8ucHJvdG90eXBlLnJlZEludm09ZnVuY3Rpb24oKXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZEludm0gd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLmludm0odGhpcyl9LG8ucHJvdG90eXBlLnJlZE5lZz1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTmVnIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5uZWcodGhpcyl9LG8ucHJvdG90eXBlLnJlZFBvdz1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCYmIXQucmVkLFwicmVkUG93KG5vcm1hbE51bSlcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQucG93KHRoaXMsdCl9O3ZhciBBPXtrMjU2Om51bGwscDIyNDpudWxsLHAxOTI6bnVsbCxwMjU1MTk6bnVsbH07bC5wcm90b3R5cGUuX3RtcD1mdW5jdGlvbigpe3ZhciB0PW5ldyBvKG51bGwpO3JldHVybiB0LndvcmRzPW5ldyBBcnJheShNYXRoLmNlaWwodGhpcy5uLzEzKSksdH0sbC5wcm90b3R5cGUuaXJlZHVjZT1mdW5jdGlvbih0KXt2YXIgZSxyPXQ7ZG8gdGhpcy5zcGxpdChyLHRoaXMudG1wKSxyPXRoaXMuaW11bEsocikscj1yLmlhZGQodGhpcy50bXApLGU9ci5iaXRMZW5ndGgoKTt3aGlsZShlPnRoaXMubik7dmFyIG49ZTx0aGlzLm4/LTE6ci51Y21wKHRoaXMucCk7cmV0dXJuIDA9PT1uPyhyLndvcmRzWzBdPTAsci5sZW5ndGg9MSk6bj4wP3IuaXN1Yih0aGlzLnApOnIuc3RyaXAoKSxyfSxsLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe3QuaXVzaHJuKHRoaXMubiwwLGUpfSxsLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtyZXR1cm4gdC5pbXVsKHRoaXMuayl9LGkocCxsKSxwLnByb3RvdHlwZS5zcGxpdD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj00MTk0MzAzLG49TWF0aC5taW4odC5sZW5ndGgsOSksaT0wO2k8bjtpKyspZS53b3Jkc1tpXT10LndvcmRzW2ldO2lmKGUubGVuZ3RoPW4sdC5sZW5ndGg8PTkpcmV0dXJuIHQud29yZHNbMF09MCx2b2lkKHQubGVuZ3RoPTEpO3ZhciBvPXQud29yZHNbOV07Zm9yKGUud29yZHNbZS5sZW5ndGgrK109byZyLGk9MTA7aTx0Lmxlbmd0aDtpKyspe3ZhciBhPTB8dC53b3Jkc1tpXTt0LndvcmRzW2ktMTBdPShhJnIpPDw0fG8+Pj4yMixvPWF9bz4+Pj0yMix0LndvcmRzW2ktMTBdPW8sMD09PW8mJnQubGVuZ3RoPjEwP3QubGVuZ3RoLT0xMDp0Lmxlbmd0aC09OX0scC5wcm90b3R5cGUuaW11bEs9ZnVuY3Rpb24odCl7dC53b3Jkc1t0Lmxlbmd0aF09MCx0LndvcmRzW3QubGVuZ3RoKzFdPTAsdC5sZW5ndGgrPTI7Zm9yKHZhciBlPTAscj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj0wfHQud29yZHNbcl07ZSs9OTc3Km4sdC53b3Jkc1tyXT02NzEwODg2MyZlLGU9NjQqbisoZS82NzEwODg2NHwwKX1yZXR1cm4gMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJih0Lmxlbmd0aC0tLDA9PT10LndvcmRzW3QubGVuZ3RoLTFdJiZ0Lmxlbmd0aC0tKSx0fSxpKGIsbCksaSh2LGwpLGkoeSxsKSx5LnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTE5KigwfHQud29yZHNbcl0pK2UsaT02NzEwODg2MyZuO24+Pj49MjYsdC53b3Jkc1tyXT1pLGU9bn1yZXR1cm4gMCE9PWUmJih0LndvcmRzW3QubGVuZ3RoKytdPWUpLHR9LG8uX3ByaW1lPWZ1bmN0aW9uIHQoZSl7aWYoQVtlXSlyZXR1cm4gQVtlXTt2YXIgdDtpZihcImsyNTZcIj09PWUpdD1uZXcgcDtlbHNlIGlmKFwicDIyNFwiPT09ZSl0PW5ldyBiO2Vsc2UgaWYoXCJwMTkyXCI9PT1lKXQ9bmV3IHY7ZWxzZXtpZihcInAyNTUxOVwiIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIHByaW1lIFwiK2UpO3Q9bmV3IHl9cmV0dXJuIEFbZV09dCx0fSxtLnByb3RvdHlwZS5fdmVyaWZ5MT1mdW5jdGlvbih0KXtuKDA9PT10Lm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksbih0LnJlZCxcInJlZCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIil9LG0ucHJvdG90eXBlLl92ZXJpZnkyPWZ1bmN0aW9uKHQsZSl7bigwPT09KHQubmVnYXRpdmV8ZS5uZWdhdGl2ZSksXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkJiZ0LnJlZD09PWUucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuaW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5wcmltZT90aGlzLnByaW1lLmlyZWR1Y2UodCkuX2ZvcmNlUmVkKHRoaXMpOnQudW1vZCh0aGlzLm0pLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe3JldHVybiB0LmlzWmVybygpP3QuY2xvbmUoKTp0aGlzLm0uc3ViKHQpLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuYWRkKGUpO3JldHVybiByLmNtcCh0aGlzLm0pPj0wJiZyLmlzdWIodGhpcy5tKSxyLl9mb3JjZVJlZCh0aGlzKX0sbS5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LmlhZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0LGUpe3RoaXMuX3ZlcmlmeTIodCxlKTt2YXIgcj10LnN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaXN1YihlKTtyZXR1cm4gci5jbXBuKDApPDAmJnIuaWFkZCh0aGlzLm0pLHJ9LG0ucHJvdG90eXBlLnNobD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkxKHQpLHRoaXMuaW1vZCh0LnVzaGxuKGUpKX0sbS5wcm90b3R5cGUuaW11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQuaW11bChlKSl9LG0ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLl92ZXJpZnkyKHQsZSksdGhpcy5pbW9kKHQubXVsKGUpKX0sbS5wcm90b3R5cGUuaXNxcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5pbXVsKHQsdC5jbG9uZSgpKX0sbS5wcm90b3R5cGUuc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm11bCh0LHQpfSxtLnByb3RvdHlwZS5zcXJ0PWZ1bmN0aW9uKHQpe2lmKHQuaXNaZXJvKCkpcmV0dXJuIHQuY2xvbmUoKTt2YXIgZT10aGlzLm0uYW5kbG4oMyk7aWYobihlJTI9PT0xKSwzPT09ZSl7dmFyIHI9dGhpcy5tLmFkZChuZXcgbygxKSkuaXVzaHJuKDIpO3JldHVybiB0aGlzLnBvdyh0LHIpfWZvcih2YXIgaT10aGlzLm0uc3VibigxKSxhPTA7IWkuaXNaZXJvKCkmJjA9PT1pLmFuZGxuKDEpOylhKyssaS5pdXNocm4oMSk7bighaS5pc1plcm8oKSk7dmFyIGY9bmV3IG8oMSkudG9SZWQodGhpcykscz1mLnJlZE5lZygpLHU9dGhpcy5tLnN1Ym4oMSkuaXVzaHJuKDEpLGg9dGhpcy5tLmJpdExlbmd0aCgpO2ZvcihoPW5ldyBvKDIqaCpoKS50b1JlZCh0aGlzKTswIT09dGhpcy5wb3coaCx1KS5jbXAocyk7KWgucmVkSUFkZChzKTtmb3IodmFyIGM9dGhpcy5wb3coaCxpKSxkPXRoaXMucG93KHQsaS5hZGRuKDEpLml1c2hybigxKSksbD10aGlzLnBvdyh0LGkpLHA9YTswIT09bC5jbXAoZik7KXtmb3IodmFyIGI9bCx2PTA7MCE9PWIuY21wKGYpO3YrKyliPWIucmVkU3FyKCk7bih2PHApO3ZhciB5PXRoaXMucG93KGMsbmV3IG8oMSkuaXVzaGxuKHAtdi0xKSk7ZD1kLnJlZE11bCh5KSxjPXkucmVkU3FyKCksbD1sLnJlZE11bChjKSxwPXZ9cmV0dXJuIGR9LG0ucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dC5faW52bXAodGhpcy5tKTtyZXR1cm4gMCE9PWUubmVnYXRpdmU/KGUubmVnYXRpdmU9MCx0aGlzLmltb2QoZSkucmVkTmVnKCkpOnRoaXMuaW1vZChlKX0sbS5wcm90b3R5cGUucG93PWZ1bmN0aW9uKHQsZSl7aWYoZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMSk7aWYoMD09PWUuY21wbigxKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciByPTQsbj1uZXcgQXJyYXkoMTw8cik7blswXT1uZXcgbygxKS50b1JlZCh0aGlzKSxuWzFdPXQ7Zm9yKHZhciBpPTI7aTxuLmxlbmd0aDtpKyspbltpXT10aGlzLm11bChuW2ktMV0sdCk7dmFyIGE9blswXSxmPTAscz0wLHU9ZS5iaXRMZW5ndGgoKSUyNjtmb3IoMD09PXUmJih1PTI2KSxpPWUubGVuZ3RoLTE7aT49MDtpLS0pe2Zvcih2YXIgaD1lLndvcmRzW2ldLGM9dS0xO2M+PTA7Yy0tKXt2YXIgZD1oPj5jJjE7YSE9PW5bMF0mJihhPXRoaXMuc3FyKGEpKSwwIT09ZHx8MCE9PWY/KGY8PD0xLGZ8PWQscysrLChzPT09cnx8MD09PWkmJjA9PT1jKSYmKGE9dGhpcy5tdWwoYSxuW2ZdKSxzPTAsZj0wKSk6cz0wfXU9MjZ9cmV0dXJuIGF9LG0ucHJvdG90eXBlLmNvbnZlcnRUbz1mdW5jdGlvbih0KXt2YXIgZT10LnVtb2QodGhpcy5tKTtyZXR1cm4gZT09PXQ/ZS5jbG9uZSgpOmV9LG0ucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXQuY2xvbmUoKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxvLm1vbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBnKHQpfSxpKGcsbSksZy5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltb2QodC51c2hsbih0aGlzLnNoaWZ0KSl9LGcucHJvdG90eXBlLmNvbnZlcnRGcm9tPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuaW1vZCh0Lm11bCh0aGlzLnJpbnYpKTtyZXR1cm4gZS5yZWQ9bnVsbCxlfSxnLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gdC53b3Jkc1swXT0wLHQubGVuZ3RoPTEsdDt2YXIgcj10LmltdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksbz1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP289aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihvPWkuaWFkZCh0aGlzLm0pKSxvLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7aWYodC5pc1plcm8oKXx8ZS5pc1plcm8oKSlyZXR1cm4gbmV3IG8oMCkuX2ZvcmNlUmVkKHRoaXMpO3ZhciByPXQubXVsKGUpLG49ci5tYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5taW52KS5pbWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubSksaT1yLmlzdWIobikuaXVzaHJuKHRoaXMuc2hpZnQpLGE9aTtyZXR1cm4gaS5jbXAodGhpcy5tKT49MD9hPWkuaXN1Yih0aGlzLm0pOmkuY21wbigwKTwwJiYoYT1pLmlhZGQodGhpcy5tKSksYS5fZm9yY2VSZWQodGhpcyl9LGcucHJvdG90eXBlLmludm09ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQuX2ludm1wKHRoaXMubSkubXVsKHRoaXMucjIpKTtyZXR1cm4gZS5fZm9yY2VSZWQodGhpcyl9fShcInVuZGVmaW5lZFwiPT10eXBlb2YgdHx8dCx0aGlzKX0pLmNhbGwoZSxyKDkyKSh0KSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uUmVwb3J0ZXI9cig1ODIpLlJlcG9ydGVyLG4uRGVjb2RlckJ1ZmZlcj1yKDIzNCkuRGVjb2RlckJ1ZmZlcixuLkVuY29kZXJCdWZmZXI9cigyMzQpLkVuY29kZXJCdWZmZXIsbi5Ob2RlPXIoNTgxKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxyKXtmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsci5sZW5ndGgpLGk9bmV3IGUobiksbz0wO288bjsrK28paVtvXT10W29dXnJbb107cmV0dXJuIGl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQpe3JldHVybiBBcnJheS5pc0FycmF5P0FycmF5LmlzQXJyYXkodCk6XCJbb2JqZWN0IEFycmF5XVwiPT09dih0KX1mdW5jdGlvbiBuKHQpe3JldHVyblwiYm9vbGVhblwiPT10eXBlb2YgdH1mdW5jdGlvbiBpKHQpe3JldHVybiBudWxsPT09dH1mdW5jdGlvbiBvKHQpe3JldHVybiBudWxsPT10fWZ1bmN0aW9uIGEodCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHR9ZnVuY3Rpb24gZih0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdH1mdW5jdGlvbiBzKHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHUodCl7cmV0dXJuIHZvaWQgMD09PXR9ZnVuY3Rpb24gaCh0KXtyZXR1cm5cIltvYmplY3QgUmVnRXhwXVwiPT09dih0KX1mdW5jdGlvbiBjKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBkKHQpe3JldHVyblwiW29iamVjdCBEYXRlXVwiPT09dih0KX1mdW5jdGlvbiBsKHQpe3JldHVyblwiW29iamVjdCBFcnJvcl1cIj09PXYodCl8fHQgaW5zdGFuY2VvZiBFcnJvcn1mdW5jdGlvbiBwKHQpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHR9ZnVuY3Rpb24gYih0KXtyZXR1cm4gbnVsbD09PXR8fFwiYm9vbGVhblwiPT10eXBlb2YgdHx8XCJudW1iZXJcIj09dHlwZW9mIHR8fFwic3RyaW5nXCI9PXR5cGVvZiB0fHxcInN5bWJvbFwiPT10eXBlb2YgdHx8XCJ1bmRlZmluZWRcIj09dHlwZW9mIHR9ZnVuY3Rpb24gdih0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWUuaXNBcnJheT1yLGUuaXNCb29sZWFuPW4sZS5pc051bGw9aSxlLmlzTnVsbE9yVW5kZWZpbmVkPW8sZS5pc051bWJlcj1hLGUuaXNTdHJpbmc9ZixlLmlzU3ltYm9sPXMsZS5pc1VuZGVmaW5lZD11LGUuaXNSZWdFeHA9aCxlLmlzT2JqZWN0PWMsZS5pc0RhdGU9ZCxlLmlzRXJyb3I9bCxlLmlzRnVuY3Rpb249cCxlLmlzUHJpbWl0aXZlPWIsZS5pc0J1ZmZlcj10LmlzQnVmZmVyfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiBPYmplY3QuY3JlYXRlP3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWUsdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSl9OnQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3Quc3VwZXJfPWU7dmFyIHI9ZnVuY3Rpb24oKXt9O3IucHJvdG90eXBlPWUucHJvdG90eXBlLHQucHJvdG90eXBlPW5ldyByLHQucHJvdG90eXBlLmNvbnN0cnVjdG9yPXR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDExNSksYT1yKDE1OSksZj1yKDExMykscz1yKDUzKSx1PXIoMTE2KSxoPXIoMjAxKSxjPXIoOTEpLGQ9cigxNjIpLGw9L15jYzooWzEtOWEtZl1bMC05YS1mXXswLDN9fDApOlsxLTlhLWZdWzAtOWEtZl17MCwxNX06W2EtekEtWjAtOV8tXXswLDg2fTooWzEtOV1bMC05XXswLDE3fXwwKSQvLHA9L15jYzooWzEtOWEtZl1bMC05YS1mXXswLDN9fDApOlsxLTlhLWZdWzAtOWEtZl17MCw3fTpbYS16QS1aMC05Xy1dezAsODZ9OihbMS05XVswLTldezAsMTd9fDApJC8sYj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxbe2tleTpcImdldFR5cGVJZFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudHlwZX19LHtrZXk6XCJzZXRUeXBlSWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnR5cGU9dH19LHtrZXk6XCJnZXRCaXRtYXNrXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5iaXRtYXNrfX0se2tleTpcInNldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmJpdG1hc2s9dH19LHtrZXk6XCJnZXRIYXNoXCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5oYXNoKXRocm93IG5ldyBzKFwiSGFzaCBub3Qgc2V0XCIpO3JldHVybiB0aGlzLmhhc2h9fSx7a2V5Olwic2V0SGFzaFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJIYXNoIG11c3QgYmUgYSBCdWZmZXJcIik7dGhpcy5oYXNoPXR9fSx7a2V5OlwiZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbigpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RoKXRocm93IG5ldyBzKFwiTWF4aW11bSBmdWxmaWxsbWVudCBsZW5ndGggbm90IHNldFwiKTtyZXR1cm4gdGhpcy5tYXhGdWxmaWxsbWVudExlbmd0aH19LHtrZXk6XCJzZXRNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFkKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJGdWxmaWxsbWVudCBsZW5ndGggbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHQ8MCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiRnVsZmlsbG1lbnQgbGVuZ3RoIG11c3QgYmUgcG9zaXRpdmUgb3IgemVyb1wiKTt0aGlzLm1heEZ1bGZpbGxtZW50TGVuZ3RoPXR9fSx7a2V5Olwic2VyaWFsaXplVXJpXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5cImNjOlwiK3RoaXMuZ2V0VHlwZUlkKCkudG9TdHJpbmcoMTYpK1wiOlwiK3RoaXMuZ2V0Qml0bWFzaygpLnRvU3RyaW5nKDE2KStcIjpcIit1LmVuY29kZSh0aGlzLmdldEhhc2goKSkrXCI6XCIrdGhpcy5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpfX0se2tleTpcInNlcmlhbGl6ZUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGM7cmV0dXJuIHQud3JpdGVVSW50MTYodGhpcy5nZXRUeXBlSWQoKSksdC53cml0ZVZhclVJbnQodGhpcy5nZXRCaXRtYXNrKCkpLHQud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLmdldEhhc2goKSksdC53cml0ZVZhclVJbnQodGhpcy5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpKSx0LmdldEJ1ZmZlcigpfX0se2tleTpcInBhcnNlQmluYXJ5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRUeXBlSWQodC5yZWFkVUludDE2KCkpLHRoaXMuc2V0Qml0bWFzayh0LnJlYWRWYXJVSW50KCkpLHRoaXMuc2V0SGFzaCh0LnJlYWRWYXJPY3RldFN0cmluZygpKSx0aGlzLnNldE1heEZ1bGZpbGxtZW50TGVuZ3RoKHQucmVhZFZhclVJbnQoKSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbigpe2lmKG8uZ2V0Q2xhc3NGcm9tVHlwZUlkKHRoaXMuZ2V0VHlwZUlkKCkpLHRoaXMuZ2V0Qml0bWFzaygpPnQuTUFYX1NBRkVfQklUTUFTSyl0aHJvdyBuZXcgRXJyb3IoXCJCaXRtYXNrIHRvbyBsYXJnZSB0byBiZSBzYWZlbHkgcmVwcmVzZW50ZWRcIik7aWYodGhpcy5nZXRCaXRtYXNrKCkmfnQuU1VQUE9SVEVEX0JJVE1BU0spdGhyb3cgbmV3IEVycm9yKFwiQ29uZGl0aW9uIHJlcXVlc3RlZCB1bnN1cHBvcnRlZCBmZWF0dXJlIHN1aXRlc1wiKTtpZih0aGlzLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCk+dC5NQVhfRlVMRklMTE1FTlRfTEVOR1RIKXRocm93IG5ldyBFcnJvcihcIkNvbmRpdGlvbiByZXF1ZXN0ZWQgdG9vIGxhcmdlIG9mIGEgbWF4IGZ1bGZpbGxtZW50IHNpemVcIik7cmV0dXJuITB9fV0sW3trZXk6XCJmcm9tVXJpXCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuIGU7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIGUpdGhyb3cgbmV3IEVycm9yKFwiU2VyaWFsaXplZCBjb25kaXRpb24gbXVzdCBiZSBhIHN0cmluZ1wiKTt2YXIgcj1lLnNwbGl0KFwiOlwiKTtpZihcImNjXCIhPT1yWzBdKXRocm93IG5ldyBhKCdTZXJpYWxpemVkIGNvbmRpdGlvbiBtdXN0IHN0YXJ0IHdpdGggXCJjYzpcIicpO2lmKCF0LlJFR0VYX1NUUklDVC5leGVjKGUpKXRocm93IG5ldyBmKFwiSW52YWxpZCBjb25kaXRpb24gZm9ybWF0XCIpO3ZhciBuPW5ldyB0O3JldHVybiBuLnNldFR5cGVJZChwYXJzZUludChyWzFdLDE2KSksbi5zZXRCaXRtYXNrKHBhcnNlSW50KHJbMl0sMTYpKSxuLnNldEhhc2godS5kZWNvZGUoclszXSkpLG4uc2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgocGFyc2VJbnQocls0XSwxMCkpLG59fSx7a2V5OlwiZnJvbUJpbmFyeVwiLHZhbHVlOmZ1bmN0aW9uKGUpe2U9aC5mcm9tKGUpO3ZhciByPW5ldyB0O3JldHVybiByLnBhcnNlQmluYXJ5KGUpLHJ9fV0pLHR9KCk7Yi5NQVhfU0FGRV9CSVRNQVNLPTQyOTQ5NjcyOTUsYi5TVVBQT1JURURfQklUTUFTSz02MyxiLk1BWF9GVUxGSUxMTUVOVF9MRU5HVEg9NjU1MzUsYi5SRUdFWD1sLGIuUkVHRVhfU1RSSUNUPXAsdC5leHBvcnRzPWJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig2Mykscz1yKDExNCksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxhKGUsW3trZXk6XCJnZW5lcmF0ZUhhc2hcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PW5ldyBzKFwic2hhMjU2XCIpO3JldHVybiB0aGlzLndyaXRlSGFzaFBheWxvYWQodCksdC5nZXREaWdlc3QoKX19XSksZX0oZik7dC5leHBvcnRzPXV9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDEwKSxvPXIoNDcpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLGEpe3ZhciBmLHM9bihlKSx1PWkocy5sZW5ndGgpLGg9byhhLHUpO2lmKHQmJnIhPXIpe2Zvcig7dT5oOylpZihmPXNbaCsrXSxmIT1mKXJldHVybiEwfWVsc2UgZm9yKDt1Pmg7aCsrKWlmKCh0fHxoIGluIHMpJiZzW2hdPT09cilyZXR1cm4gdHx8aHx8MDtyZXR1cm4hdCYmLTF9fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNCksaT1yKDApLG89cigxNSksYT1yKDQ1KSxmPXIoMzYpLHM9cig1NSksdT1yKDQwKSxoPXIoNiksYz1yKDUpLGQ9cig4NCksbD1yKDU3KSxwPXIoMTI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYix2LHkpe3ZhciBtPW5bdF0sZz1tLHc9dj9cInNldFwiOlwiYWRkXCIsXz1nJiZnLnByb3RvdHlwZSxNPXt9LFM9ZnVuY3Rpb24odCl7dmFyIGU9X1t0XTtvKF8sdCxcImRlbGV0ZVwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoeSYmIWgodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImhhc1wiPT10P2Z1bmN0aW9uKHQpe3JldHVybiEoeSYmIWgodCkpJiZlLmNhbGwodGhpcywwPT09dD8wOnQpfTpcImdldFwiPT10P2Z1bmN0aW9uKHQpe3JldHVybiB5JiYhaCh0KT92b2lkIDA6ZS5jYWxsKHRoaXMsMD09PXQ/MDp0KX06XCJhZGRcIj09dD9mdW5jdGlvbih0KXtyZXR1cm4gZS5jYWxsKHRoaXMsMD09PXQ/MDp0KSx0aGlzfTpmdW5jdGlvbih0LHIpe3JldHVybiBlLmNhbGwodGhpcywwPT09dD8wOnQsciksdGhpc30pfTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBnJiYoeXx8Xy5mb3JFYWNoJiYhYyhmdW5jdGlvbigpeyhuZXcgZykuZW50cmllcygpLm5leHQoKX0pKSl7dmFyIEU9bmV3IGcsQT1FW3ddKHk/e306LTAsMSkhPUUsaz1jKGZ1bmN0aW9uKCl7RS5oYXMoMSl9KSx4PWQoZnVuY3Rpb24odCl7bmV3IGcodCl9KSxJPSF5JiZjKGZ1bmN0aW9uKCl7Zm9yKHZhciB0PW5ldyBnLGU9NTtlLS07KXRbd10oZSxlKTtyZXR1cm4hdC5oYXMoLTApfSk7eHx8KGc9ZShmdW5jdGlvbihlLHIpe3UoZSxnLHQpO3ZhciBuPXAobmV3IG0sZSxnKTtyZXR1cm4gdm9pZCAwIT1yJiZzKHIsdixuW3ddLG4pLG59KSxnLnByb3RvdHlwZT1fLF8uY29uc3RydWN0b3I9ZyksKGt8fEkpJiYoUyhcImRlbGV0ZVwiKSxTKFwiaGFzXCIpLHYmJlMoXCJnZXRcIikpLChJfHxBKSYmUyh3KSx5JiZfLmNsZWFyJiZkZWxldGUgXy5jbGVhcn1lbHNlIGc9Yi5nZXRDb25zdHJ1Y3RvcihlLHQsdix3KSxhKGcucHJvdG90eXBlLHIpLGYuTkVFRD0hMDtyZXR1cm4gbChnLHQpLE1bdF09ZyxpKGkuRytpLlcraS5GKihnIT1tKSxNKSx5fHxiLnNldFN0cm9uZyhnLHQsdiksZ319LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDE0KSxpPXIoMTUpLG89cig1KSxhPXIoMjQpLGY9cig3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBzPWYodCksdT1yKGEscyxcIlwiW3RdKSxoPXVbMF0sYz11WzFdO28oZnVuY3Rpb24oKXt2YXIgZT17fTtyZXR1cm4gZVtzXT1mdW5jdGlvbigpe3JldHVybiA3fSw3IT1cIlwiW3RdKGUpfSkmJihpKFN0cmluZy5wcm90b3R5cGUsdCxoKSxuKFJlZ0V4cC5wcm90b3R5cGUscywyPT1lP2Z1bmN0aW9uKHQsZSl7cmV0dXJuIGMuY2FsbCh0LHRoaXMsZSl9OmZ1bmN0aW9uKHQpe3JldHVybiBjLmNhbGwodCx0aGlzKX0pKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbigpe3ZhciB0PW4odGhpcyksZT1cIlwiO3JldHVybiB0Lmdsb2JhbCYmKGUrPVwiZ1wiKSx0Lmlnbm9yZUNhc2UmJihlKz1cImlcIiksdC5tdWx0aWxpbmUmJihlKz1cIm1cIiksdC51bmljb2RlJiYoZSs9XCJ1XCIpLHQuc3RpY2t5JiYoZSs9XCJ5XCIpLGV9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dmFyIG49dm9pZCAwPT09cjtzd2l0Y2goZS5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbj90KCk6dC5jYWxsKHIpO2Nhc2UgMTpyZXR1cm4gbj90KGVbMF0pOnQuY2FsbChyLGVbMF0pO2Nhc2UgMjpyZXR1cm4gbj90KGVbMF0sZVsxXSk6dC5jYWxsKHIsZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG4/dChlWzBdLGVbMV0sZVsyXSk6dC5jYWxsKHIsZVswXSxlWzFdLGVbMl0pO2Nhc2UgNDpyZXR1cm4gbj90KGVbMF0sZVsxXSxlWzJdLGVbM10pOnQuY2FsbChyLGVbMF0sZVsxXSxlWzJdLGVbM10pfXJldHVybiB0LmFwcGx5KHIsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMjMpLG89cig3KShcIm1hdGNoXCIpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gbih0KSYmKHZvaWQgMCE9PShlPXRbb10pPyEhZTpcIlJlZ0V4cFwiPT1pKHQpKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcpKFwiaXRlcmF0b3JcIiksaT0hMTt0cnl7dmFyIG89WzddW25dKCk7by5yZXR1cm49ZnVuY3Rpb24oKXtpPSEwfSxBcnJheS5mcm9tKG8sZnVuY3Rpb24oKXt0aHJvdyAyfSl9Y2F0Y2godCl7fXQuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFlJiYhaSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIG89WzddLGE9b1tuXSgpO2EubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fSxvW25dPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LHQobyl9Y2F0Y2godCl7fXJldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQxKXx8IXIoNSkoZnVuY3Rpb24oKXt2YXIgdD1NYXRoLnJhbmRvbSgpO19fZGVmaW5lU2V0dGVyX18uY2FsbChudWxsLHQsZnVuY3Rpb24oKXt9KSxkZWxldGUgcig0KVt0XX0pfSxmdW5jdGlvbih0LGUpe2UuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPVwiX19jb3JlLWpzX3NoYXJlZF9fXCIsbz1uW2ldfHwobltpXT17fSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBvW3RdfHwob1t0XT17fSl9fSxmdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9cig0KSxvPXIoMTQpLGE9cig0OCksZj1hKFwidHlwZWRfYXJyYXlcIikscz1hKFwidmlld1wiKSx1PSEoIWkuQXJyYXlCdWZmZXJ8fCFpLkRhdGFWaWV3KSxoPXUsYz0wLGQ9OSxsPVwiSW50OEFycmF5LFVpbnQ4QXJyYXksVWludDhDbGFtcGVkQXJyYXksSW50MTZBcnJheSxVaW50MTZBcnJheSxJbnQzMkFycmF5LFVpbnQzMkFycmF5LEZsb2F0MzJBcnJheSxGbG9hdDY0QXJyYXlcIi5zcGxpdChcIixcIik7YzxkOykobj1pW2xbYysrXV0pPyhvKG4ucHJvdG90eXBlLGYsITApLG8obi5wcm90b3R5cGUscywhMCkpOmg9ITE7dC5leHBvcnRzPXtBQlY6dSxDT05TVFI6aCxUWVBFRDpmLFZJRVc6c319LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0P251bGwhPT10OlwiZnVuY3Rpb25cIj09dHlwZW9mIHR9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dC5leHBvcnRzPXIoNDcyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3QuZXhwb3J0cz1yKDQ3NCl9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiB0LndlYnBhY2tQb2x5ZmlsbHx8KHQuZGVwcmVjYXRlPWZ1bmN0aW9uKCl7fSx0LnBhdGhzPVtdLHQuY2hpbGRyZW58fCh0LmNoaWxkcmVuPVtdKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxcImxvYWRlZFwiLHtlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdC5sfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LFwiaWRcIix7ZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITEsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHQuaX19KSx0LndlYnBhY2tQb2x5ZmlsbD0xKSx0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2UucmFuZG9tQnl0ZXM9ZS5ybmc9ZS5wc2V1ZG9SYW5kb21CeXRlcz1lLnBybmc9cig2MSksZS5jcmVhdGVIYXNoPWUuSGFzaD1yKDU5KSxlLmNyZWF0ZUhtYWM9ZS5IbWFjPXIoMTQ5KTt2YXIgbj1bXCJzaGExXCIsXCJzaGEyMjRcIixcInNoYTI1NlwiLFwic2hhMzg0XCIsXCJzaGE1MTJcIixcIm1kNVwiLFwicm1kMTYwXCJdLmNvbmNhdChPYmplY3Qua2V5cyhyKDIxMSkpKTtlLmdldEhhc2hlcz1mdW5jdGlvbigpe3JldHVybiBufTt2YXIgaT1yKDE1MSk7ZS5wYmtkZjI9aS5wYmtkZjIsZS5wYmtkZjJTeW5jPWkucGJrZGYyU3luYzt2YXIgbz1yKDQ5Myk7W1wiQ2lwaGVyXCIsXCJjcmVhdGVDaXBoZXJcIixcIkNpcGhlcml2XCIsXCJjcmVhdGVDaXBoZXJpdlwiLFwiRGVjaXBoZXJcIixcImNyZWF0ZURlY2lwaGVyXCIsXCJEZWNpcGhlcml2XCIsXCJjcmVhdGVEZWNpcGhlcml2XCIsXCJnZXRDaXBoZXJzXCIsXCJsaXN0Q2lwaGVyc1wiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09b1t0XX0pO3ZhciBhPXIoNTczKTtbXCJEaWZmaWVIZWxsbWFuR3JvdXBcIixcImNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cFwiLFwiZ2V0RGlmZmllSGVsbG1hblwiLFwiY3JlYXRlRGlmZmllSGVsbG1hblwiLFwiRGlmZmllSGVsbG1hblwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09YVt0XX0pO3ZhciBmPXIoNTA2KTtbXCJjcmVhdGVTaWduXCIsXCJTaWduXCIsXCJjcmVhdGVWZXJpZnlcIixcIlZlcmlmeVwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09Zlt0XX0pLGUuY3JlYXRlRUNESD1yKDU0NCk7dmFyIHM9cig1NzcpO1tcInB1YmxpY0VuY3J5cHRcIixcInByaXZhdGVFbmNyeXB0XCIsXCJwdWJsaWNEZWNyeXB0XCIsXCJwcml2YXRlRGVjcnlwdFwiXS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09c1t0XX0pLFtcImNyZWF0ZUNyZWRlbnRpYWxzXCJdLmZvckVhY2goZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihbXCJzb3JyeSwgXCIrdCtcIiBpcyBub3QgaW1wbGVtZW50ZWQgeWV0XCIsXCJ3ZSBhY2NlcHQgcHVsbCByZXF1ZXN0c1wiLFwiaHR0cHM6Ly9naXRodWIuY29tL2NyeXB0by1icm93c2VyaWZ5L2NyeXB0by1icm93c2VyaWZ5XCJdLmpvaW4oXCJcXG5cIikpfX0pfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dmFyIGUscjtyZXR1cm4gZT10PmZ8fHQ8MD8ocj1NYXRoLmFicyh0KSVmLHQ8MD9mLXI6cik6dH1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7dCsrKXRbZV09MDtyZXR1cm4hMX1mdW5jdGlvbiBpKCl7dGhpcy5TQk9YPVtdLHRoaXMuSU5WX1NCT1g9W10sdGhpcy5TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5JTlZfU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuaW5pdCgpLHRoaXMuUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNCxyPW5ldyBBcnJheShlKSxuPS0xOysrbjxlOylyW25dPXQucmVhZFVJbnQzMkJFKDQqbik7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0aGlzLl9rZXk9byh0KSx0aGlzLl9kb1Jlc2V0KCl9dmFyIGY9TWF0aC5wb3coMiwzMik7aS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhLGYscyx1O2Zvcih0PWZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxlPXQ9MDt0PDI1NjtlPSsrdCllPDEyOD9yLnB1c2goZTw8MSk6ci5wdXNoKGU8PDFeMjgzKTtyZXR1cm4gcn0oKSxpPTAscz0wLGU9dT0wO3U8MjU2O2U9Kyt1KXI9c15zPDwxXnM8PDJeczw8M15zPDw0LHI9cj4+PjheMjU1JnJeOTksdGhpcy5TQk9YW2ldPXIsdGhpcy5JTlZfU0JPWFtyXT1pLG89dFtpXSxhPXRbb10sZj10W2FdLG49MjU3KnRbcl1eMTY4NDMwMDgqcix0aGlzLlNVQl9NSVhbMF1baV09bjw8MjR8bj4+PjgsdGhpcy5TVUJfTUlYWzFdW2ldPW48PDE2fG4+Pj4xNix0aGlzLlNVQl9NSVhbMl1baV09bjw8OHxuPj4+MjQsdGhpcy5TVUJfTUlYWzNdW2ldPW4sbj0xNjg0MzAwOSpmXjY1NTM3KmFeMjU3Km9eMTY4NDMwMDgqaSx0aGlzLklOVl9TVUJfTUlYWzBdW3JdPW48PDI0fG4+Pj44LHRoaXMuSU5WX1NVQl9NSVhbMV1bcl09bjw8MTZ8bj4+PjE2LHRoaXMuSU5WX1NVQl9NSVhbMl1bcl09bjw8OHxuPj4+MjQsdGhpcy5JTlZfU1VCX01JWFszXVtyXT1uLDA9PT1pP2k9cz0xOihpPW9edFt0W3RbZl5vXV1dLHNePXRbdFtzXV0pO3JldHVybiEwfTt2YXIgcz1uZXcgaTthLmJsb2NrU2l6ZT0xNixhLnByb3RvdHlwZS5ibG9ja1NpemU9YS5ibG9ja1NpemUsYS5rZXlTaXplPTMyLGEucHJvdG90eXBlLmtleVNpemU9YS5rZXlTaXplLGEucHJvdG90eXBlLl9kb1Jlc2V0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvO2ZvcihyPXRoaXMuX2tleSxlPXIubGVuZ3RoLHRoaXMuX25Sb3VuZHM9ZSs2LGk9NCoodGhpcy5fblJvdW5kcysxKSx0aGlzLl9rZXlTY2hlZHVsZT1bXSxuPTA7bjxpO24rKyl0aGlzLl9rZXlTY2hlZHVsZVtuXT1uPGU/cltuXToobz10aGlzLl9rZXlTY2hlZHVsZVtuLTFdLG4lZT09PTA/KG89bzw8OHxvPj4+MjQsbz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dLG9ePXMuUkNPTltuL2V8MF08PDI0KTplPjYmJm4lZT09PTQ/bz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dOnZvaWQgMCx0aGlzLl9rZXlTY2hlZHVsZVtuLWVdXm8pO2Zvcih0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXSx0PTA7dDxpO3QrKyluPWktdCxvPXRoaXMuX2tleVNjaGVkdWxlW24tKHQlND8wOjQpXSx0aGlzLl9pbnZLZXlTY2hlZHVsZVt0XT10PDR8fG48PTQ/bzpzLklOVl9TVUJfTUlYWzBdW3MuU0JPWFtvPj4+MjRdXV5zLklOVl9TVUJfTUlYWzFdW3MuU0JPWFtvPj4+MTYmMjU1XV1ecy5JTlZfU1VCX01JWFsyXVtzLlNCT1hbbz4+PjgmMjU1XV1ecy5JTlZfU1VCX01JWFszXVtzLlNCT1hbMjU1Jm9dXTtcbnJldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX10LmV4cG9ydHM9cixyLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0IT1lKXRocm93IG5ldyBFcnJvcihyfHxcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK3QrXCIgIT0gXCIrZSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49ZTtuLmJhc2U9cig1MDgpLG4uc2hvcnQ9cig1MTEpLG4ubW9udD1yKDUxMCksbi5lZHdhcmRzPXIoNTA5KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5iaWdudW09cigxOCksbi5kZWZpbmU9cig1MzApLmRlZmluZSxuLmJhc2U9cig2OCksbi5jb25zdGFudHM9cigyMTUpLG4uZGVjb2RlcnM9cig1MzQpLG4uZW5jb2RlcnM9cig1MzYpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIodCl7dmFyIGUscjtyZXR1cm4gZT10PmZ8fHQ8MD8ocj1NYXRoLmFicyh0KSVmLHQ8MD9mLXI6cik6dH1mdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7dCsrKXRbZV09MDtyZXR1cm4hMX1mdW5jdGlvbiBpKCl7dGhpcy5TQk9YPVtdLHRoaXMuSU5WX1NCT1g9W10sdGhpcy5TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5JTlZfU1VCX01JWD1bW10sW10sW10sW11dLHRoaXMuaW5pdCgpLHRoaXMuUkNPTj1bMCwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NF19ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5sZW5ndGgvNCxyPW5ldyBBcnJheShlKSxuPS0xOysrbjxlOylyW25dPXQucmVhZFVJbnQzMkJFKDQqbik7cmV0dXJuIHJ9ZnVuY3Rpb24gYSh0KXt0aGlzLl9rZXk9byh0KSx0aGlzLl9kb1Jlc2V0KCl9dmFyIGY9TWF0aC5wb3coMiwzMik7aS5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3ZhciB0LGUscixuLGksbyxhLGYscyx1O2Zvcih0PWZ1bmN0aW9uKCl7dmFyIHQscjtmb3Iocj1bXSxlPXQ9MDt0PDI1NjtlPSsrdCllPDEyOD9yLnB1c2goZTw8MSk6ci5wdXNoKGU8PDFeMjgzKTtyZXR1cm4gcn0oKSxpPTAscz0wLGU9dT0wO3U8MjU2O2U9Kyt1KXI9c15zPDwxXnM8PDJeczw8M15zPDw0LHI9cj4+PjheMjU1JnJeOTksdGhpcy5TQk9YW2ldPXIsdGhpcy5JTlZfU0JPWFtyXT1pLG89dFtpXSxhPXRbb10sZj10W2FdLG49MjU3KnRbcl1eMTY4NDMwMDgqcix0aGlzLlNVQl9NSVhbMF1baV09bjw8MjR8bj4+PjgsdGhpcy5TVUJfTUlYWzFdW2ldPW48PDE2fG4+Pj4xNix0aGlzLlNVQl9NSVhbMl1baV09bjw8OHxuPj4+MjQsdGhpcy5TVUJfTUlYWzNdW2ldPW4sbj0xNjg0MzAwOSpmXjY1NTM3KmFeMjU3Km9eMTY4NDMwMDgqaSx0aGlzLklOVl9TVUJfTUlYWzBdW3JdPW48PDI0fG4+Pj44LHRoaXMuSU5WX1NVQl9NSVhbMV1bcl09bjw8MTZ8bj4+PjE2LHRoaXMuSU5WX1NVQl9NSVhbMl1bcl09bjw8OHxuPj4+MjQsdGhpcy5JTlZfU1VCX01JWFszXVtyXT1uLDA9PT1pP2k9cz0xOihpPW9edFt0W3RbZl5vXV1dLHNePXRbdFtzXV0pO3JldHVybiEwfTt2YXIgcz1uZXcgaTthLmJsb2NrU2l6ZT0xNixhLnByb3RvdHlwZS5ibG9ja1NpemU9YS5ibG9ja1NpemUsYS5rZXlTaXplPTMyLGEucHJvdG90eXBlLmtleVNpemU9YS5rZXlTaXplLGEucHJvdG90eXBlLl9kb1Jlc2V0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvO2ZvcihyPXRoaXMuX2tleSxlPXIubGVuZ3RoLHRoaXMuX25Sb3VuZHM9ZSs2LGk9NCoodGhpcy5fblJvdW5kcysxKSx0aGlzLl9rZXlTY2hlZHVsZT1bXSxuPTA7bjxpO24rKyl0aGlzLl9rZXlTY2hlZHVsZVtuXT1uPGU/cltuXToobz10aGlzLl9rZXlTY2hlZHVsZVtuLTFdLG4lZT09PTA/KG89bzw8OHxvPj4+MjQsbz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dLG9ePXMuUkNPTltuL2V8MF08PDI0KTplPjYmJm4lZT09PTQ/bz1zLlNCT1hbbz4+PjI0XTw8MjR8cy5TQk9YW28+Pj4xNiYyNTVdPDwxNnxzLlNCT1hbbz4+PjgmMjU1XTw8OHxzLlNCT1hbMjU1Jm9dOnZvaWQgMCx0aGlzLl9rZXlTY2hlZHVsZVtuLWVdXm8pO2Zvcih0aGlzLl9pbnZLZXlTY2hlZHVsZT1bXSx0PTA7dDxpO3QrKyluPWktdCxvPXRoaXMuX2tleVNjaGVkdWxlW24tKHQlND8wOjQpXSx0aGlzLl9pbnZLZXlTY2hlZHVsZVt0XT10PDR8fG48PTQ/bzpzLklOVl9TVUJfTUlYWzBdW3MuU0JPWFtvPj4+MjRdXV5zLklOVl9TVUJfTUlYWzFdW3MuU0JPWFtvPj4+MTYmMjU1XV1ecy5JTlZfU1VCX01JWFsyXVtzLlNCT1hbbz4+PjgmMjU1XV1ecy5JTlZfU1VCX01JWFszXVtzLlNCT1hbMjU1Jm9dXTtyZXR1cm4hMH0sYS5wcm90b3R5cGUuZW5jcnlwdEJsb2NrPWZ1bmN0aW9uKGUpe2U9byhuZXcgdChlKSk7dmFyIHI9dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5fa2V5U2NoZWR1bGUscy5TVUJfTUlYLHMuU0JPWCksbj1uZXcgdCgxNik7cmV0dXJuIG4ud3JpdGVVSW50MzJCRShyWzBdLDApLG4ud3JpdGVVSW50MzJCRShyWzFdLDQpLG4ud3JpdGVVSW50MzJCRShyWzJdLDgpLG4ud3JpdGVVSW50MzJCRShyWzNdLDEyKSxufSxhLnByb3RvdHlwZS5kZWNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj1bZVszXSxlWzFdXTtlWzFdPXJbMF0sZVszXT1yWzFdO3ZhciBuPXRoaXMuX2RvQ3J5cHRCbG9jayhlLHRoaXMuX2ludktleVNjaGVkdWxlLHMuSU5WX1NVQl9NSVgscy5JTlZfU0JPWCksaT1uZXcgdCgxNik7cmV0dXJuIGkud3JpdGVVSW50MzJCRShuWzBdLDApLGkud3JpdGVVSW50MzJCRShuWzNdLDQpLGkud3JpdGVVSW50MzJCRShuWzJdLDgpLGkud3JpdGVVSW50MzJCRShuWzFdLDEyKSxpfSxhLnByb3RvdHlwZS5zY3J1Yj1mdW5jdGlvbigpe24odGhpcy5fa2V5U2NoZWR1bGUpLG4odGhpcy5faW52S2V5U2NoZWR1bGUpLG4odGhpcy5fa2V5KX0sYS5wcm90b3R5cGUuX2RvQ3J5cHRCbG9jaz1mdW5jdGlvbih0LGUsbixpKXt2YXIgbyxhLGYscyx1LGgsYyxkLGw7YT10WzBdXmVbMF0sZj10WzFdXmVbMV0scz10WzJdXmVbMl0sdT10WzNdXmVbM10sbz00O2Zvcih2YXIgcD0xO3A8dGhpcy5fblJvdW5kcztwKyspaD1uWzBdW2E+Pj4yNF1eblsxXVtmPj4+MTYmMjU1XV5uWzJdW3M+Pj44JjI1NV1eblszXVsyNTUmdV1eZVtvKytdLGM9blswXVtmPj4+MjRdXm5bMV1bcz4+PjE2JjI1NV1eblsyXVt1Pj4+OCYyNTVdXm5bM11bMjU1JmFdXmVbbysrXSxkPW5bMF1bcz4+PjI0XV5uWzFdW3U+Pj4xNiYyNTVdXm5bMl1bYT4+PjgmMjU1XV5uWzNdWzI1NSZmXV5lW28rK10sbD1uWzBdW3U+Pj4yNF1eblsxXVthPj4+MTYmMjU1XV5uWzJdW2Y+Pj44JjI1NV1eblszXVsyNTUmc11eZVtvKytdLGE9aCxmPWMscz1kLHU9bDtyZXR1cm4gaD0oaVthPj4+MjRdPDwyNHxpW2Y+Pj4xNiYyNTVdPDwxNnxpW3M+Pj44JjI1NV08PDh8aVsyNTUmdV0pXmVbbysrXSxjPShpW2Y+Pj4yNF08PDI0fGlbcz4+PjE2JjI1NV08PDE2fGlbdT4+PjgmMjU1XTw8OHxpWzI1NSZhXSleZVtvKytdLGQ9KGlbcz4+PjI0XTw8MjR8aVt1Pj4+MTYmMjU1XTw8MTZ8aVthPj4+OCYyNTVdPDw4fGlbMjU1JmZdKV5lW28rK10sbD0oaVt1Pj4+MjRdPDwyNHxpW2E+Pj4xNiYyNTVdPDwxNnxpW2Y+Pj44JjI1NV08PDh8aVsyNTUmc10pXmVbbysrXSxbcihoKSxyKGMpLHIoZCkscihsKV19LGUuQUVTPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4odCl7Zm9yKHZhciBlLHI9dC5sZW5ndGg7ci0tOyl7aWYoZT10LnJlYWRVSW50OChyKSwyNTUhPT1lKXtlKyssdC53cml0ZVVJbnQ4KGUscik7YnJlYWt9dC53cml0ZVVJbnQ4KDAscil9fWZ1bmN0aW9uIGkodCl7dmFyIGU9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KTtyZXR1cm4gbih0Ll9wcmV2KSxlfXZhciBvPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIpe2Zvcig7ZS5fY2FjaGUubGVuZ3RoPHIubGVuZ3RoOyllLl9jYWNoZT10LmNvbmNhdChbZS5fY2FjaGUsaShlKV0pO3ZhciBuPWUuX2NhY2hlLnNsaWNlKDAsci5sZW5ndGgpO3JldHVybiBlLl9jYWNoZT1lLl9jYWNoZS5zbGljZShyLmxlbmd0aCksbyhyLG4pfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpLmNhbGwodGhpcyksdGhpcy5oYXNoTW9kZT1cInN0cmluZ1wiPT10eXBlb2YgdCx0aGlzLmhhc2hNb2RlP3RoaXNbdF09dGhpcy5fZmluYWxPckRpZ2VzdDp0aGlzLmZpbmFsPXRoaXMuX2ZpbmFsT3JEaWdlc3QsdGhpcy5fZGVjb2Rlcj1udWxsLHRoaXMuX2VuY29kaW5nPW51bGx9dmFyIGk9cigzMSkuVHJhbnNmb3JtLG89cigyKSxhPXIoNTIpLlN0cmluZ0RlY29kZXI7dC5leHBvcnRzPW4sbyhuLGkpLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LHIsbil7XCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpO3ZhciBpPXRoaXMuX3VwZGF0ZSh0KTtyZXR1cm4gdGhpcy5oYXNoTW9kZT90aGlzOihuJiYoaT10aGlzLl90b1N0cmluZyhpLG4pKSxpKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwidHJ5aW5nIHRvIHNldCBhYWQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3ZhciBuO3RyeXt0aGlzLmhhc2hNb2RlP3RoaXMuX3VwZGF0ZSh0KTp0aGlzLnB1c2godGhpcy5fdXBkYXRlKHQpKX1jYXRjaCh0KXtuPXR9ZmluYWxseXtyKG4pfX0sbi5wcm90b3R5cGUuX2ZsdXNoPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXt0aGlzLnB1c2godGhpcy5fZmluYWwoKSl9Y2F0Y2godCl7ZT10fWZpbmFsbHl7dChlKX19LG4ucHJvdG90eXBlLl9maW5hbE9yRGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuX2ZpbmFsKCl8fG5ldyBlKFwiXCIpO3JldHVybiB0JiYocj10aGlzLl90b1N0cmluZyhyLHQsITApKSxyfSxuLnByb3RvdHlwZS5fdG9TdHJpbmc9ZnVuY3Rpb24odCxlLHIpe2lmKHRoaXMuX2RlY29kZXJ8fCh0aGlzLl9kZWNvZGVyPW5ldyBhKGUpLHRoaXMuX2VuY29kaW5nPWUpLHRoaXMuX2VuY29kaW5nIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJjYW4ndCBzd2l0Y2ggZW5jb2RpbmdzXCIpO3ZhciBuPXRoaXMuX2RlY29kZXIud3JpdGUodCk7cmV0dXJuIHImJihuKz10aGlzLl9kZWNvZGVyLmVuZCgpKSxufX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1lO24uYmFzZT1yKDU0NSksbi5zaG9ydD1yKDU0OCksbi5tb250PXIoNTQ3KSxuLmVkd2FyZHM9cig1NDYpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RbZT4+NV18PTEyODw8ZSUzMix0WyhlKzY0Pj4+OTw8NCkrMTRdPWU7Zm9yKHZhciByPTE3MzI1ODQxOTMsbj0tMjcxNzMzODc5LGk9LTE3MzI1ODQxOTQsaD0yNzE3MzM4NzgsYz0wO2M8dC5sZW5ndGg7Yys9MTYpe3ZhciBkPXIsbD1uLHA9aSxiPWg7cj1vKHIsbixpLGgsdFtjKzBdLDcsLTY4MDg3NjkzNiksaD1vKGgscixuLGksdFtjKzFdLDEyLC0zODk1NjQ1ODYpLGk9byhpLGgscixuLHRbYysyXSwxNyw2MDYxMDU4MTkpLG49byhuLGksaCxyLHRbYyszXSwyMiwtMTA0NDUyNTMzMCkscj1vKHIsbixpLGgsdFtjKzRdLDcsLTE3NjQxODg5NyksaD1vKGgscixuLGksdFtjKzVdLDEyLDEyMDAwODA0MjYpLGk9byhpLGgscixuLHRbYys2XSwxNywtMTQ3MzIzMTM0MSksbj1vKG4saSxoLHIsdFtjKzddLDIyLC00NTcwNTk4Mykscj1vKHIsbixpLGgsdFtjKzhdLDcsMTc3MDAzNTQxNiksaD1vKGgscixuLGksdFtjKzldLDEyLC0xOTU4NDE0NDE3KSxpPW8oaSxoLHIsbix0W2MrMTBdLDE3LC00MjA2Myksbj1vKG4saSxoLHIsdFtjKzExXSwyMiwtMTk5MDQwNDE2Mikscj1vKHIsbixpLGgsdFtjKzEyXSw3LDE4MDQ2MDM2ODIpLGg9byhoLHIsbixpLHRbYysxM10sMTIsLTQwMzQxMTAxKSxpPW8oaSxoLHIsbix0W2MrMTRdLDE3LC0xNTAyMDAyMjkwKSxuPW8obixpLGgscix0W2MrMTVdLDIyLDEyMzY1MzUzMjkpLHI9YShyLG4saSxoLHRbYysxXSw1LC0xNjU3OTY1MTApLGg9YShoLHIsbixpLHRbYys2XSw5LC0xMDY5NTAxNjMyKSxpPWEoaSxoLHIsbix0W2MrMTFdLDE0LDY0MzcxNzcxMyksbj1hKG4saSxoLHIsdFtjKzBdLDIwLC0zNzM4OTczMDIpLHI9YShyLG4saSxoLHRbYys1XSw1LC03MDE1NTg2OTEpLGg9YShoLHIsbixpLHRbYysxMF0sOSwzODAxNjA4MyksaT1hKGksaCxyLG4sdFtjKzE1XSwxNCwtNjYwNDc4MzM1KSxuPWEobixpLGgscix0W2MrNF0sMjAsLTQwNTUzNzg0OCkscj1hKHIsbixpLGgsdFtjKzldLDUsNTY4NDQ2NDM4KSxoPWEoaCxyLG4saSx0W2MrMTRdLDksLTEwMTk4MDM2OTApLGk9YShpLGgscixuLHRbYyszXSwxNCwtMTg3MzYzOTYxKSxuPWEobixpLGgscix0W2MrOF0sMjAsMTE2MzUzMTUwMSkscj1hKHIsbixpLGgsdFtjKzEzXSw1LC0xNDQ0NjgxNDY3KSxoPWEoaCxyLG4saSx0W2MrMl0sOSwtNTE0MDM3ODQpLGk9YShpLGgscixuLHRbYys3XSwxNCwxNzM1MzI4NDczKSxuPWEobixpLGgscix0W2MrMTJdLDIwLC0xOTI2NjA3NzM0KSxyPWYocixuLGksaCx0W2MrNV0sNCwtMzc4NTU4KSxoPWYoaCxyLG4saSx0W2MrOF0sMTEsLTIwMjI1NzQ0NjMpLGk9ZihpLGgscixuLHRbYysxMV0sMTYsMTgzOTAzMDU2Miksbj1mKG4saSxoLHIsdFtjKzE0XSwyMywtMzUzMDk1NTYpLHI9ZihyLG4saSxoLHRbYysxXSw0LC0xNTMwOTkyMDYwKSxoPWYoaCxyLG4saSx0W2MrNF0sMTEsMTI3Mjg5MzM1MyksaT1mKGksaCxyLG4sdFtjKzddLDE2LC0xNTU0OTc2MzIpLG49ZihuLGksaCxyLHRbYysxMF0sMjMsLTEwOTQ3MzA2NDApLHI9ZihyLG4saSxoLHRbYysxM10sNCw2ODEyNzkxNzQpLGg9ZihoLHIsbixpLHRbYyswXSwxMSwtMzU4NTM3MjIyKSxpPWYoaSxoLHIsbix0W2MrM10sMTYsLTcyMjUyMTk3OSksbj1mKG4saSxoLHIsdFtjKzZdLDIzLDc2MDI5MTg5KSxyPWYocixuLGksaCx0W2MrOV0sNCwtNjQwMzY0NDg3KSxoPWYoaCxyLG4saSx0W2MrMTJdLDExLC00MjE4MTU4MzUpLGk9ZihpLGgscixuLHRbYysxNV0sMTYsNTMwNzQyNTIwKSxuPWYobixpLGgscix0W2MrMl0sMjMsLTk5NTMzODY1MSkscj1zKHIsbixpLGgsdFtjKzBdLDYsLTE5ODYzMDg0NCksaD1zKGgscixuLGksdFtjKzddLDEwLDExMjY4OTE0MTUpLGk9cyhpLGgscixuLHRbYysxNF0sMTUsLTE0MTYzNTQ5MDUpLG49cyhuLGksaCxyLHRbYys1XSwyMSwtNTc0MzQwNTUpLHI9cyhyLG4saSxoLHRbYysxMl0sNiwxNzAwNDg1NTcxKSxoPXMoaCxyLG4saSx0W2MrM10sMTAsLTE4OTQ5ODY2MDYpLGk9cyhpLGgscixuLHRbYysxMF0sMTUsLTEwNTE1MjMpLG49cyhuLGksaCxyLHRbYysxXSwyMSwtMjA1NDkyMjc5OSkscj1zKHIsbixpLGgsdFtjKzhdLDYsMTg3MzMxMzM1OSksaD1zKGgscixuLGksdFtjKzE1XSwxMCwtMzA2MTE3NDQpLGk9cyhpLGgscixuLHRbYys2XSwxNSwtMTU2MDE5ODM4MCksbj1zKG4saSxoLHIsdFtjKzEzXSwyMSwxMzA5MTUxNjQ5KSxyPXMocixuLGksaCx0W2MrNF0sNiwtMTQ1NTIzMDcwKSxoPXMoaCxyLG4saSx0W2MrMTFdLDEwLC0xMTIwMjEwMzc5KSxpPXMoaSxoLHIsbix0W2MrMl0sMTUsNzE4Nzg3MjU5KSxuPXMobixpLGgscix0W2MrOV0sMjEsLTM0MzQ4NTU1MSkscj11KHIsZCksbj11KG4sbCksaT11KGkscCksaD11KGgsYil9cmV0dXJuIEFycmF5KHIsbixpLGgpfWZ1bmN0aW9uIGkodCxlLHIsbixpLG8pe3JldHVybiB1KGgodSh1KGUsdCksdShuLG8pKSxpKSxyKX1mdW5jdGlvbiBvKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKGUmcnx+ZSZuLHQsZSxvLGEsZil9ZnVuY3Rpb24gYSh0LGUscixuLG8sYSxmKXtyZXR1cm4gaShlJm58ciZ+bix0LGUsbyxhLGYpfWZ1bmN0aW9uIGYodCxlLHIsbixvLGEsZil7cmV0dXJuIGkoZV5yXm4sdCxlLG8sYSxmKX1mdW5jdGlvbiBzKHQsZSxyLG4sbyxhLGYpe3JldHVybiBpKHJeKGV8fm4pLHQsZSxvLGEsZil9ZnVuY3Rpb24gdSh0LGUpe3ZhciByPSg2NTUzNSZ0KSsoNjU1MzUmZSksbj0odD4+MTYpKyhlPj4xNikrKHI+PjE2KTtyZXR1cm4gbjw8MTZ8NjU1MzUmcn1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9dmFyIGM9cig1NjUpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gYy5oYXNoKHQsbiwxNil9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmJpZ251bT1yKDcwKSxuLmRlZmluZT1yKDU4MCkuZGVmaW5lLG4uYmFzZT1yKDcxKSxuLmNvbnN0YW50cz1yKDIzNSksbi5kZWNvZGVycz1yKDU4NCksbi5lbmNvZGVycz1yKDU4Nil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0KXt2YXIgZSxyO3JldHVybiBlPXQ+Znx8dDwwPyhyPU1hdGguYWJzKHQpJWYsdDwwP2YtcjpyKTp0fWZ1bmN0aW9uIG4odCl7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDt0KyspdFtlXT0wO3JldHVybiExfWZ1bmN0aW9uIGkoKXt0aGlzLlNCT1g9W10sdGhpcy5JTlZfU0JPWD1bXSx0aGlzLlNVQl9NSVg9W1tdLFtdLFtdLFtdXSx0aGlzLklOVl9TVUJfTUlYPVtbXSxbXSxbXSxbXV0sdGhpcy5pbml0KCksdGhpcy5SQ09OPVswLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0XX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10Lmxlbmd0aC80LHI9bmV3IEFycmF5KGUpLG49LTE7KytuPGU7KXJbbl09dC5yZWFkVUludDMyQkUoNCpuKTtyZXR1cm4gcn1mdW5jdGlvbiBhKHQpe3RoaXMuX2tleT1vKHQpLHRoaXMuX2RvUmVzZXQoKX12YXIgZj1NYXRoLnBvdygyLDMyKTtpLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7dmFyIHQsZSxyLG4saSxvLGEsZixzLHU7Zm9yKHQ9ZnVuY3Rpb24oKXt2YXIgdCxyO2ZvcihyPVtdLGU9dD0wO3Q8MjU2O2U9Kyt0KWU8MTI4P3IucHVzaChlPDwxKTpyLnB1c2goZTw8MV4yODMpO3JldHVybiByfSgpLGk9MCxzPTAsZT11PTA7dTwyNTY7ZT0rK3Upcj1zXnM8PDFeczw8Ml5zPDwzXnM8PDQscj1yPj4+OF4yNTUmcl45OSx0aGlzLlNCT1hbaV09cix0aGlzLklOVl9TQk9YW3JdPWksbz10W2ldLGE9dFtvXSxmPXRbYV0sbj0yNTcqdFtyXV4xNjg0MzAwOCpyLHRoaXMuU1VCX01JWFswXVtpXT1uPDwyNHxuPj4+OCx0aGlzLlNVQl9NSVhbMV1baV09bjw8MTZ8bj4+PjE2LHRoaXMuU1VCX01JWFsyXVtpXT1uPDw4fG4+Pj4yNCx0aGlzLlNVQl9NSVhbM11baV09bixuPTE2ODQzMDA5KmZeNjU1MzcqYV4yNTcqb14xNjg0MzAwOCppLHRoaXMuSU5WX1NVQl9NSVhbMF1bcl09bjw8MjR8bj4+PjgsdGhpcy5JTlZfU1VCX01JWFsxXVtyXT1uPDwxNnxuPj4+MTYsdGhpcy5JTlZfU1VCX01JWFsyXVtyXT1uPDw4fG4+Pj4yNCx0aGlzLklOVl9TVUJfTUlYWzNdW3JdPW4sMD09PWk/aT1zPTE6KGk9b150W3RbdFtmXm9dXV0sc149dFt0W3NdXSk7cmV0dXJuITB9O3ZhciBzPW5ldyBpO2EuYmxvY2tTaXplPTE2LGEucHJvdG90eXBlLmJsb2NrU2l6ZT1hLmJsb2NrU2l6ZSxhLmtleVNpemU9MzIsYS5wcm90b3R5cGUua2V5U2l6ZT1hLmtleVNpemUsYS5wcm90b3R5cGUuX2RvUmVzZXQ9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbixpLG87Zm9yKHI9dGhpcy5fa2V5LGU9ci5sZW5ndGgsdGhpcy5fblJvdW5kcz1lKzYsaT00Kih0aGlzLl9uUm91bmRzKzEpLHRoaXMuX2tleVNjaGVkdWxlPVtdLG49MDtuPGk7bisrKXRoaXMuX2tleVNjaGVkdWxlW25dPW48ZT9yW25dOihvPXRoaXMuX2tleVNjaGVkdWxlW24tMV0sbiVlPT09MD8obz1vPDw4fG8+Pj4yNCxvPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb10sb149cy5SQ09OW24vZXwwXTw8MjQpOmU+NiYmbiVlPT09ND9vPXMuU0JPWFtvPj4+MjRdPDwyNHxzLlNCT1hbbz4+PjE2JjI1NV08PDE2fHMuU0JPWFtvPj4+OCYyNTVdPDw4fHMuU0JPWFsyNTUmb106dm9pZCAwLHRoaXMuX2tleVNjaGVkdWxlW24tZV1ebyk7Zm9yKHRoaXMuX2ludktleVNjaGVkdWxlPVtdLHQ9MDt0PGk7dCsrKW49aS10LG89dGhpcy5fa2V5U2NoZWR1bGVbbi0odCU0PzA6NCldLHRoaXMuX2ludktleVNjaGVkdWxlW3RdPXQ8NHx8bjw9ND9vOnMuSU5WX1NVQl9NSVhbMF1bcy5TQk9YW28+Pj4yNF1dXnMuSU5WX1NVQl9NSVhbMV1bcy5TQk9YW28+Pj4xNiYyNTVdXV5zLklOVl9TVUJfTUlYWzJdW3MuU0JPWFtvPj4+OCYyNTVdXV5zLklOVl9TVUJfTUlYWzNdW3MuU0JPWFsyNTUmb11dO3JldHVybiEwfSxhLnByb3RvdHlwZS5lbmNyeXB0QmxvY2s9ZnVuY3Rpb24oZSl7ZT1vKG5ldyB0KGUpKTt2YXIgcj10aGlzLl9kb0NyeXB0QmxvY2soZSx0aGlzLl9rZXlTY2hlZHVsZSxzLlNVQl9NSVgscy5TQk9YKSxuPW5ldyB0KDE2KTtyZXR1cm4gbi53cml0ZVVJbnQzMkJFKHJbMF0sMCksbi53cml0ZVVJbnQzMkJFKHJbMV0sNCksbi53cml0ZVVJbnQzMkJFKHJbMl0sOCksbi53cml0ZVVJbnQzMkJFKHJbM10sMTIpLG59LGEucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1mdW5jdGlvbihlKXtlPW8obmV3IHQoZSkpO3ZhciByPVtlWzNdLGVbMV1dO2VbMV09clswXSxlWzNdPXJbMV07dmFyIG49dGhpcy5fZG9DcnlwdEJsb2NrKGUsdGhpcy5faW52S2V5U2NoZWR1bGUscy5JTlZfU1VCX01JWCxzLklOVl9TQk9YKSxpPW5ldyB0KDE2KTtyZXR1cm4gaS53cml0ZVVJbnQzMkJFKG5bMF0sMCksaS53cml0ZVVJbnQzMkJFKG5bM10sNCksaS53cml0ZVVJbnQzMkJFKG5bMl0sOCksaS53cml0ZVVJbnQzMkJFKG5bMV0sMTIpLGl9LGEucHJvdG90eXBlLnNjcnViPWZ1bmN0aW9uKCl7bih0aGlzLl9rZXlTY2hlZHVsZSksbih0aGlzLl9pbnZLZXlTY2hlZHVsZSksbih0aGlzLl9rZXkpfSxhLnByb3RvdHlwZS5fZG9DcnlwdEJsb2NrPWZ1bmN0aW9uKHQsZSxuLGkpe3ZhciBvLGEsZixzLHUsaCxjLGQsbDthPXRbMF1eZVswXSxmPXRbMV1eZVsxXSxzPXRbMl1eZVsyXSx1PXRbM11eZVszXSxvPTQ7Zm9yKHZhciBwPTE7cDx0aGlzLl9uUm91bmRzO3ArKyloPW5bMF1bYT4+PjI0XV5uWzFdW2Y+Pj4xNiYyNTVdXm5bMl1bcz4+PjgmMjU1XV5uWzNdWzI1NSZ1XV5lW28rK10sYz1uWzBdW2Y+Pj4yNF1eblsxXVtzPj4+MTYmMjU1XV5uWzJdW3U+Pj44JjI1NV1eblszXVsyNTUmYV1eZVtvKytdLGQ9blswXVtzPj4+MjRdXm5bMV1bdT4+PjE2JjI1NV1eblsyXVthPj4+OCYyNTVdXm5bM11bMjU1JmZdXmVbbysrXSxsPW5bMF1bdT4+PjI0XV5uWzFdW2E+Pj4xNiYyNTVdXm5bMl1bZj4+PjgmMjU1XV5uWzNdWzI1NSZzXV5lW28rK10sYT1oLGY9YyxzPWQsdT1sO3JldHVybiBoPShpW2E+Pj4yNF08PDI0fGlbZj4+PjE2JjI1NV08PDE2fGlbcz4+PjgmMjU1XTw8OHxpWzI1NSZ1XSleZVtvKytdLGM9KGlbZj4+PjI0XTw8MjR8aVtzPj4+MTYmMjU1XTw8MTZ8aVt1Pj4+OCYyNTVdPDw4fGlbMjU1JmFdKV5lW28rK10sZD0oaVtzPj4+MjRdPDwyNHxpW3U+Pj4xNiYyNTVdPDwxNnxpW2E+Pj44JjI1NV08PDh8aVsyNTUmZl0pXmVbbysrXSxsPShpW3U+Pj4yNF08PDI0fGlbYT4+PjE2JjI1NV08PDE2fGlbZj4+PjgmMjU1XTw8OHxpWzI1NSZzXSleZVtvKytdLFtyKGgpLHIoYykscihkKSxyKGwpXX0sZS5BRVM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtmb3IodmFyIGUscj10Lmxlbmd0aDtyLS07KXtpZihlPXQucmVhZFVJbnQ4KHIpLDI1NSE9PWUpe2UrKyx0LndyaXRlVUludDgoZSxyKTticmVha310LndyaXRlVUludDgoMCxyKX19ZnVuY3Rpb24gaSh0KXt2YXIgZT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpO3JldHVybiBuKHQuX3ByZXYpLGV9dmFyIG89cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxpKGUpXSk7dmFyIG49ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxvKHIsbil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKCl7dGhpcy5fZXZlbnRzPXRoaXMuX2V2ZW50c3x8e30sdGhpcy5fbWF4TGlzdGVuZXJzPXRoaXMuX21heExpc3RlbmVyc3x8dm9pZCAwfWZ1bmN0aW9uIG4odCl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdH1mdW5jdGlvbiBpKHQpe3JldHVyblwibnVtYmVyXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIG8odCl7cmV0dXJuXCJvYmplY3RcIj09dHlwZW9mIHQmJm51bGwhPT10fWZ1bmN0aW9uIGEodCl7cmV0dXJuIHZvaWQgMD09PXR9dC5leHBvcnRzPXIsci5FdmVudEVtaXR0ZXI9cixyLnByb3RvdHlwZS5fZXZlbnRzPXZvaWQgMCxyLnByb3RvdHlwZS5fbWF4TGlzdGVuZXJzPXZvaWQgMCxyLmRlZmF1bHRNYXhMaXN0ZW5lcnM9MTAsci5wcm90b3R5cGUuc2V0TWF4TGlzdGVuZXJzPWZ1bmN0aW9uKHQpe2lmKCFpKHQpfHx0PDB8fGlzTmFOKHQpKXRocm93IFR5cGVFcnJvcihcIm4gbXVzdCBiZSBhIHBvc2l0aXZlIG51bWJlclwiKTtyZXR1cm4gdGhpcy5fbWF4TGlzdGVuZXJzPXQsdGhpc30sci5wcm90b3R5cGUuZW1pdD1mdW5jdGlvbih0KXt2YXIgZSxyLGksZixzLHU7aWYodGhpcy5fZXZlbnRzfHwodGhpcy5fZXZlbnRzPXt9KSxcImVycm9yXCI9PT10JiYoIXRoaXMuX2V2ZW50cy5lcnJvcnx8byh0aGlzLl9ldmVudHMuZXJyb3IpJiYhdGhpcy5fZXZlbnRzLmVycm9yLmxlbmd0aCkpe2lmKGU9YXJndW1lbnRzWzFdLGUgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBlO3ZhciBoPW5ldyBFcnJvcignVW5jYXVnaHQsIHVuc3BlY2lmaWVkIFwiZXJyb3JcIiBldmVudC4gKCcrZStcIilcIik7dGhyb3cgaC5jb250ZXh0PWUsaH1pZihyPXRoaXMuX2V2ZW50c1t0XSxhKHIpKXJldHVybiExO2lmKG4ocikpc3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMTpyLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSAyOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSk7YnJlYWs7Y2FzZSAzOnIuY2FsbCh0aGlzLGFyZ3VtZW50c1sxXSxhcmd1bWVudHNbMl0pO2JyZWFrO2RlZmF1bHQ6Zj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksci5hcHBseSh0aGlzLGYpfWVsc2UgaWYobyhyKSlmb3IoZj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSksdT1yLnNsaWNlKCksaT11Lmxlbmd0aCxzPTA7czxpO3MrKyl1W3NdLmFwcGx5KHRoaXMsZik7cmV0dXJuITB9LHIucHJvdG90eXBlLmFkZExpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIGk7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3JldHVybiB0aGlzLl9ldmVudHN8fCh0aGlzLl9ldmVudHM9e30pLHRoaXMuX2V2ZW50cy5uZXdMaXN0ZW5lciYmdGhpcy5lbWl0KFwibmV3TGlzdGVuZXJcIix0LG4oZS5saXN0ZW5lcik/ZS5saXN0ZW5lcjplKSx0aGlzLl9ldmVudHNbdF0/byh0aGlzLl9ldmVudHNbdF0pP3RoaXMuX2V2ZW50c1t0XS5wdXNoKGUpOnRoaXMuX2V2ZW50c1t0XT1bdGhpcy5fZXZlbnRzW3RdLGVdOnRoaXMuX2V2ZW50c1t0XT1lLG8odGhpcy5fZXZlbnRzW3RdKSYmIXRoaXMuX2V2ZW50c1t0XS53YXJuZWQmJihpPWEodGhpcy5fbWF4TGlzdGVuZXJzKT9yLmRlZmF1bHRNYXhMaXN0ZW5lcnM6dGhpcy5fbWF4TGlzdGVuZXJzLGkmJmk+MCYmdGhpcy5fZXZlbnRzW3RdLmxlbmd0aD5pJiYodGhpcy5fZXZlbnRzW3RdLndhcm5lZD0hMCxjb25zb2xlLmVycm9yKFwiKG5vZGUpIHdhcm5pbmc6IHBvc3NpYmxlIEV2ZW50RW1pdHRlciBtZW1vcnkgbGVhayBkZXRlY3RlZC4gJWQgbGlzdGVuZXJzIGFkZGVkLiBVc2UgZW1pdHRlci5zZXRNYXhMaXN0ZW5lcnMoKSB0byBpbmNyZWFzZSBsaW1pdC5cIix0aGlzLl9ldmVudHNbdF0ubGVuZ3RoKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBjb25zb2xlLnRyYWNlJiZjb25zb2xlLnRyYWNlKCkpKSx0aGlzfSxyLnByb3RvdHlwZS5vbj1yLnByb3RvdHlwZS5hZGRMaXN0ZW5lcixyLnByb3RvdHlwZS5vbmNlPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlTGlzdGVuZXIodCxyKSxpfHwoaT0hMCxlLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO3ZhciBpPSExO3JldHVybiByLmxpc3RlbmVyPWUsdGhpcy5vbih0LHIpLHRoaXN9LHIucHJvdG90eXBlLnJlbW92ZUxpc3RlbmVyPWZ1bmN0aW9uKHQsZSl7dmFyIHIsaSxhLGY7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKFwibGlzdGVuZXIgbXVzdCBiZSBhIGZ1bmN0aW9uXCIpO2lmKCF0aGlzLl9ldmVudHN8fCF0aGlzLl9ldmVudHNbdF0pcmV0dXJuIHRoaXM7aWYocj10aGlzLl9ldmVudHNbdF0sYT1yLmxlbmd0aCxpPS0xLHI9PT1lfHxuKHIubGlzdGVuZXIpJiZyLmxpc3RlbmVyPT09ZSlkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXMuX2V2ZW50cy5yZW1vdmVMaXN0ZW5lciYmdGhpcy5lbWl0KFwicmVtb3ZlTGlzdGVuZXJcIix0LGUpO2Vsc2UgaWYobyhyKSl7Zm9yKGY9YTtmLS0gPjA7KWlmKHJbZl09PT1lfHxyW2ZdLmxpc3RlbmVyJiZyW2ZdLmxpc3RlbmVyPT09ZSl7aT1mO2JyZWFrfWlmKGk8MClyZXR1cm4gdGhpczsxPT09ci5sZW5ndGg/KHIubGVuZ3RoPTAsZGVsZXRlIHRoaXMuX2V2ZW50c1t0XSk6ci5zcGxpY2UoaSwxKSx0aGlzLl9ldmVudHMucmVtb3ZlTGlzdGVuZXImJnRoaXMuZW1pdChcInJlbW92ZUxpc3RlbmVyXCIsdCxlKX1yZXR1cm4gdGhpc30sci5wcm90b3R5cGUucmVtb3ZlQWxsTGlzdGVuZXJzPWZ1bmN0aW9uKHQpe3ZhciBlLHI7aWYoIXRoaXMuX2V2ZW50cylyZXR1cm4gdGhpcztpZighdGhpcy5fZXZlbnRzLnJlbW92ZUxpc3RlbmVyKXJldHVybiAwPT09YXJndW1lbnRzLmxlbmd0aD90aGlzLl9ldmVudHM9e306dGhpcy5fZXZlbnRzW3RdJiZkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXM7aWYoMD09PWFyZ3VtZW50cy5sZW5ndGgpe2ZvcihlIGluIHRoaXMuX2V2ZW50cylcInJlbW92ZUxpc3RlbmVyXCIhPT1lJiZ0aGlzLnJlbW92ZUFsbExpc3RlbmVycyhlKTtyZXR1cm4gdGhpcy5yZW1vdmVBbGxMaXN0ZW5lcnMoXCJyZW1vdmVMaXN0ZW5lclwiKSx0aGlzLl9ldmVudHM9e30sdGhpc31pZihyPXRoaXMuX2V2ZW50c1t0XSxuKHIpKXRoaXMucmVtb3ZlTGlzdGVuZXIodCxyKTtlbHNlIGlmKHIpZm9yKDtyLmxlbmd0aDspdGhpcy5yZW1vdmVMaXN0ZW5lcih0LHJbci5sZW5ndGgtMV0pO3JldHVybiBkZWxldGUgdGhpcy5fZXZlbnRzW3RdLHRoaXN9LHIucHJvdG90eXBlLmxpc3RlbmVycz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gZT10aGlzLl9ldmVudHMmJnRoaXMuX2V2ZW50c1t0XT9uKHRoaXMuX2V2ZW50c1t0XSk/W3RoaXMuX2V2ZW50c1t0XV06dGhpcy5fZXZlbnRzW3RdLnNsaWNlKCk6W119LHIucHJvdG90eXBlLmxpc3RlbmVyQ291bnQ9ZnVuY3Rpb24odCl7aWYodGhpcy5fZXZlbnRzKXt2YXIgZT10aGlzLl9ldmVudHNbdF07aWYobihlKSlyZXR1cm4gMTtpZihlKXJldHVybiBlLmxlbmd0aH1yZXR1cm4gMH0sci5saXN0ZW5lckNvdW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQubGlzdGVuZXJDb3VudChlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuZXdJbnZhbGlkQXNuMUVycm9yOmZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBFcnJvcjtyZXR1cm4gZS5uYW1lPVwiSW52YWxpZEFzbjFFcnJvclwiLGUubWVzc2FnZT10fHxcIlwiLGV9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e0VPQzowLEJvb2xlYW46MSxJbnRlZ2VyOjIsQml0U3RyaW5nOjMsT2N0ZXRTdHJpbmc6NCxOdWxsOjUsT0lEOjYsT2JqZWN0RGVzY3JpcHRvcjo3LEV4dGVybmFsOjgsUmVhbDo5LEVudW1lcmF0aW9uOjEwLFBEVjoxMSxVdGY4U3RyaW5nOjEyLFJlbGF0aXZlT0lEOjEzLFNlcXVlbmNlOjE2LFNldDoxNyxOdW1lcmljU3RyaW5nOjE4LFByaW50YWJsZVN0cmluZzoxOSxUNjFTdHJpbmc6MjAsVmlkZW90ZXhTdHJpbmc6MjEsSUE1U3RyaW5nOjIyLFVUQ1RpbWU6MjMsR2VuZXJhbGl6ZWRUaW1lOjI0LEdyYXBoaWNTdHJpbmc6MjUsVmlzaWJsZVN0cmluZzoyNixHZW5lcmFsU3RyaW5nOjI4LFVuaXZlcnNhbFN0cmluZzoyOSxDaGFyYWN0ZXJTdHJpbmc6MzAsQk1QU3RyaW5nOjMxLENvbnN0cnVjdG9yOjMyLENvbnRleHQ6MTI4fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cig2MiksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxmPXIoOTMpLHM9cig5MSksdT1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKHQpe24odGhpcyxlKTt2YXIgcj1pKHRoaXMsKGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpLmNhbGwodGhpcykpO3JldHVybiByLmhhc2g9Zi5jcmVhdGVIYXNoKHQpLHJ9cmV0dXJuIG8oZSx0KSxhKGUsW3trZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuaGFzaC51cGRhdGUodCl9fSx7a2V5OlwiZ2V0RGlnZXN0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoLmRpZ2VzdCgpfX1dLFt7a2V5OlwiZ2V0TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIGYuY3JlYXRlSGFzaCh0KS5kaWdlc3QoKS5sZW5ndGh9fV0pLGV9KHMpO3QuZXhwb3J0cz11fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMjYxKSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KX1yZXR1cm4gaSh0LG51bGwsW3trZXk6XCJnZXRDbGFzc0Zyb21UeXBlSWRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZihlPk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKXRocm93IG5ldyBvKFwiVHlwZSBcIitlK1wiIGlzIG5vdCBzdXBwb3J0ZWRcIik7dmFyIHI9ITAsbj0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBhLGY9dC5yZWdpc3RlcmVkVHlwZXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oYT1mLm5leHQoKSkuZG9uZSk7cj0hMCl7dmFyIHM9YS52YWx1ZTtpZihlPT09cy50eXBlSWQpcmV0dXJuIHMuQ2xhc3N9fWNhdGNoKHQpe249ITAsaT10fWZpbmFsbHl7dHJ5eyFyJiZmLnJldHVybiYmZi5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19dGhyb3cgbmV3IG8oXCJUeXBlIFwiK2UrXCIgaXMgbm90IHN1cHBvcnRlZFwiKX19LHtrZXk6XCJyZWdpc3RlclR5cGVcIix2YWx1ZTpmdW5jdGlvbihlKXt0LnJlZ2lzdGVyZWRUeXBlcy5wdXNoKHt0eXBlSWQ6ZS5UWVBFX0lELENsYXNzOmV9KX19XSksdH0oKTthLnJlZ2lzdGVyZWRUeXBlcz1bXSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgbj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7cih0aGlzLHQpfXJldHVybiBuKHQsbnVsbCxbe2tleTpcImRlY29kZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciByPXQucmVwbGFjZSgvXFwtL2csXCIrXCIpLnJlcGxhY2UoL18vZyxcIi9cIik7cmV0dXJuIG5ldyBlKHIsXCJiYXNlNjRcIil9fSx7a2V5OlwiZW5jb2RlXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9TdHJpbmcoXCJiYXNlNjRcIikucmVwbGFjZSgvPS9nLFwiXCIpLnJlcGxhY2UoL1xcKy9nLFwiLVwiKS5yZXBsYWNlKC9cXC8vZyxcIl9cIil9fV0pLHR9KCk7dC5leHBvcnRzPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE2NCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDExKSxpPXIoNDcpLG89cigxMCk7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uKHRoaXMpLHI9byhlLmxlbmd0aCksYT1hcmd1bWVudHMubGVuZ3RoLGY9aShhPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxyKSxzPWE+Mj9hcmd1bWVudHNbMl06dm9pZCAwLHU9dm9pZCAwPT09cz9yOmkocyxyKTt1PmY7KWVbZisrXT10O3JldHVybiBlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoOSksaT1yKDM3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2UgaW4gdD9uLmYodCxlLGkoMCxyKSk6dFtlXT1yfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNiksaT1yKDQpLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1cImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZlwiLnNwbGl0KFwiLFwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNykoXCJtYXRjaFwiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9Ly4vO3RyeXtcIi8uL1wiW3RdKGUpfWNhdGNoKHIpe3RyeXtyZXR1cm4gZVtuXT0hMSwhXCIvLi9cIlt0XShlKX1jYXRjaCh0KXt9fXJldHVybiEwfX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQpLmRvY3VtZW50JiZkb2N1bWVudC5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigxMzIpLnNldDt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvLGE9ZS5jb25zdHJ1Y3RvcjtyZXR1cm4gYSE9PXImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGEmJihvPWEucHJvdG90eXBlKSE9PXIucHJvdG90eXBlJiZuKG8pJiZpJiZpKHQsbyksdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDU2KSxpPXIoNykoXCJpdGVyYXRvclwiKSxvPUFycmF5LnByb3RvdHlwZTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMCE9PXQmJihuLkFycmF5PT09dHx8b1tpXT09PXQpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjMpO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIkFycmF5XCI9PW4odCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0MiksaT1yKDM3KSxvPXIoNTcpLGE9e307cigxNCkoYSxyKDcpKFwiaXRlcmF0b3JcIiksZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pLHQuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7dC5wcm90b3R5cGU9bihhLHtuZXh0OmkoMSxyKX0pLG8odCxlK1wiIEl0ZXJhdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNDEpLGk9cigwKSxvPXIoMTUpLGE9cigxNCksZj1yKDEyKSxzPXIoNTYpLHU9cigxMjcpLGg9cig1NyksYz1yKDIxKSxkPXIoNykoXCJpdGVyYXRvclwiKSxsPSEoW10ua2V5cyYmXCJuZXh0XCJpbltdLmtleXMoKSkscD1cIkBAaXRlcmF0b3JcIixiPVwia2V5c1wiLHY9XCJ2YWx1ZXNcIix5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixtLGcsdyxfKXt1KHIsZSxtKTt2YXIgTSxTLEUsQT1mdW5jdGlvbih0KXtpZighbCYmdCBpbiBCKXJldHVybiBCW3RdO3N3aXRjaCh0KXtjYXNlIGI6cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9O2Nhc2UgdjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyx0KX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsdCl9fSxrPWUrXCIgSXRlcmF0b3JcIix4PWc9PXYsST0hMSxCPXQucHJvdG90eXBlLE89QltkXXx8QltwXXx8ZyYmQltnXSxSPU98fEEoZyksUD1nP3g/QShcImVudHJpZXNcIik6Ujp2b2lkIDAsVD1cIkFycmF5XCI9PWU/Qi5lbnRyaWVzfHxPOk87aWYoVCYmKEU9YyhULmNhbGwobmV3IHQpKSxFIT09T2JqZWN0LnByb3RvdHlwZSYmKGgoRSxrLCEwKSxufHxmKEUsZCl8fGEoRSxkLHkpKSkseCYmTyYmTy5uYW1lIT09diYmKEk9ITAsUj1mdW5jdGlvbigpe3JldHVybiBPLmNhbGwodGhpcyl9KSxuJiYhX3x8IWwmJiFJJiZCW2RdfHxhKEIsZCxSKSxzW2VdPVIsc1trXT15LGcpaWYoTT17dmFsdWVzOng/UjpBKHYpLGtleXM6dz9SOkEoYiksZW50cmllczpQfSxfKWZvcihTIGluIE0pUyBpbiBCfHxvKEIsUyxNW1NdKTtlbHNlIGkoaS5QK2kuRioobHx8SSksZSxNKTtyZXR1cm4gTX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5leHBtMTt0LmV4cG9ydHM9IXJ8fHIoMTApPjIyMDI1LjQ2NTc5NDgwNjcxOHx8cigxMCk8MjIwMjUuNDY1Nzk0ODA2NzE4fHxyKC0yZS0xNykhPS0yZS0xNz9mdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpP3Q6dD4tMWUtNiYmdDwxZS02P3QrdCp0LzI6TWF0aC5leHAodCktMX06cn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9TWF0aC5zaWdufHxmdW5jdGlvbih0KXtyZXR1cm4gMD09KHQ9K3QpfHx0IT10P3Q6dDwwPy0xOjF9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMTM5KS5zZXQsbz1uLk11dGF0aW9uT2JzZXJ2ZXJ8fG4uV2ViS2l0TXV0YXRpb25PYnNlcnZlcixhPW4ucHJvY2VzcyxmPW4uUHJvbWlzZSxzPVwicHJvY2Vzc1wiPT1yKDIzKShhKTt0LmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsdT1mdW5jdGlvbigpe3ZhciBuLGk7Zm9yKHMmJihuPWEuZG9tYWluKSYmbi5leGl0KCk7dDspe2k9dC5mbix0PXQubmV4dDt0cnl7aSgpfWNhdGNoKG4pe3Rocm93IHQ/cigpOmU9dm9pZCAwLG59fWU9dm9pZCAwLG4mJm4uZW50ZXIoKX07aWYocylyPWZ1bmN0aW9uKCl7YS5uZXh0VGljayh1KX07ZWxzZSBpZihvKXt2YXIgaD0hMCxjPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKFwiXCIpO25ldyBvKHUpLm9ic2VydmUoYyx7Y2hhcmFjdGVyRGF0YTohMH0pLHI9ZnVuY3Rpb24oKXtjLmRhdGE9aD0haH19ZWxzZSBpZihmJiZmLnJlc29sdmUpe3ZhciBkPWYucmVzb2x2ZSgpO3I9ZnVuY3Rpb24oKXtkLnRoZW4odSl9fWVsc2Ugcj1mdW5jdGlvbigpe2kuY2FsbChuLHUpfTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGk9e2ZuOm4sbmV4dDp2b2lkIDB9O2UmJihlLm5leHQ9aSksdHx8KHQ9aSxyKCkpLGU9aX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMyksbz1mdW5jdGlvbih0LGUpe2lmKGkodCksIW4oZSkmJm51bGwhPT1lKXRocm93IFR5cGVFcnJvcihlK1wiOiBjYW4ndCBzZXQgYXMgcHJvdG90eXBlIVwiKX07dC5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoXCJfX3Byb3RvX19cImlue30/ZnVuY3Rpb24odCxlLG4pe3RyeXtuPXIoMzMpKEZ1bmN0aW9uLmNhbGwscigyMCkuZihPYmplY3QucHJvdG90eXBlLFwiX19wcm90b19fXCIpLnNldCwyKSxuKHQsW10pLGU9ISh0IGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKHQpe2U9ITB9cmV0dXJuIGZ1bmN0aW9uKHQscil7cmV0dXJuIG8odCxyKSxlP3QuX19wcm90b19fPXI6bih0LHIpLHR9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazpvfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODcpKFwia2V5c1wiKSxpPXIoNDgpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gblt0XXx8KG5bdF09aSh0KSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigzKSxpPXIoMTMpLG89cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dmFyIHIsYT1uKHQpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1hfHx2b2lkIDA9PShyPW4oYSlbb10pP2U6aShyKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM4KSxpPXIoMjQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyKXt2YXIgbyxhLGY9U3RyaW5nKGkoZSkpLHM9bihyKSx1PWYubGVuZ3RoO3JldHVybiBzPDB8fHM+PXU/dD9cIlwiOnZvaWQgMDoobz1mLmNoYXJDb2RlQXQocyksbzw1NTI5Nnx8bz41NjMxOXx8cysxPT09dXx8KGE9Zi5jaGFyQ29kZUF0KHMrMSkpPDU2MzIwfHxhPjU3MzQzP3Q/Zi5jaGFyQXQocyk6bzp0P2Yuc2xpY2UocyxzKzIpOihvLTU1Mjk2PDwxMCkrKGEtNTYzMjApKzY1NTM2KX19fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4MyksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe2lmKG4oZSkpdGhyb3cgVHlwZUVycm9yKFwiU3RyaW5nI1wiK3IrXCIgZG9lc24ndCBhY2NlcHQgcmVnZXghXCIpO3JldHVybiBTdHJpbmcoaSh0KSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzOCksaT1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9U3RyaW5nKGkodGhpcykpLHI9XCJcIixvPW4odCk7aWYobzwwfHxvPT0xLzApdGhyb3cgUmFuZ2VFcnJvcihcIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlXCIpO2Zvcig7bz4wOyhvPj4+PTEpJiYoZSs9ZSkpMSZvJiYocis9ZSk7cmV0dXJuIHJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1cIlxcdFxcblxcdlxcZlxcciDCoOGagOGgjuKAgOKAgeKAguKAg+KAhOKAheKAhuKAh+KAiOKAieKAiuKAr+KBn+OAgFxcdTIwMjhcXHUyMDI5XFx1ZmVmZlwifSxmdW5jdGlvbih0LGUscil7dmFyIG4saSxvLGE9cigzMyksZj1yKDgyKSxzPXIoMTIzKSx1PXIoMTIwKSxoPXIoNCksYz1oLnByb2Nlc3MsZD1oLnNldEltbWVkaWF0ZSxsPWguY2xlYXJJbW1lZGlhdGUscD1oLk1lc3NhZ2VDaGFubmVsLGI9MCx2PXt9LHk9XCJvbnJlYWR5c3RhdGVjaGFuZ2VcIixtPWZ1bmN0aW9uKCl7dmFyIHQ9K3RoaXM7aWYodi5oYXNPd25Qcm9wZXJ0eSh0KSl7dmFyIGU9dlt0XTtkZWxldGUgdlt0XSxlKCl9fSxnPWZ1bmN0aW9uKHQpe20uY2FsbCh0LmRhdGEpfTtkJiZsfHwoZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9W10scj0xO2FyZ3VtZW50cy5sZW5ndGg+cjspZS5wdXNoKGFyZ3VtZW50c1tyKytdKTtyZXR1cm4gdlsrK2JdPWZ1bmN0aW9uKCl7ZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0P3Q6RnVuY3Rpb24odCksZSl9LG4oYiksYn0sbD1mdW5jdGlvbih0KXtkZWxldGUgdlt0XX0sXCJwcm9jZXNzXCI9PXIoMjMpKGMpP249ZnVuY3Rpb24odCl7Yy5uZXh0VGljayhhKG0sdCwxKSl9OnA/KGk9bmV3IHAsbz1pLnBvcnQyLGkucG9ydDEub25tZXNzYWdlPWcsbj1hKG8ucG9zdE1lc3NhZ2UsbywxKSk6aC5hZGRFdmVudExpc3RlbmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIWguaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbih0KXtoLnBvc3RNZXNzYWdlKHQrXCJcIixcIipcIil9LGguYWRkRXZlbnRMaXN0ZW5lcihcIm1lc3NhZ2VcIixnLCExKSk6bj15IGluIHUoXCJzY3JpcHRcIik/ZnVuY3Rpb24odCl7cy5hcHBlbmRDaGlsZCh1KFwic2NyaXB0XCIpKVt5XT1mdW5jdGlvbigpe3MucmVtb3ZlQ2hpbGQodGhpcyksbS5jYWxsKHQpfX06ZnVuY3Rpb24odCl7c2V0VGltZW91dChhKG0sdCwxKSwwKX0pLHQuZXhwb3J0cz17c2V0OmQsY2xlYXI6bH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cig4KSxvPXIoNDEpLGE9cig4OCksZj1yKDE0KSxzPXIoNDUpLHU9cig1KSxoPXIoNDApLGM9cigzOCksZD1yKDEwKSxsPXIoNDMpLmYscD1yKDkpLmYsYj1yKDExOCksdj1yKDU3KSx5PVwiQXJyYXlCdWZmZXJcIixtPVwiRGF0YVZpZXdcIixnPVwicHJvdG90eXBlXCIsdz1cIldyb25nIGxlbmd0aCFcIixfPVwiV3JvbmcgaW5kZXghXCIsTT1uW3ldLFM9blttXSxFPW4uTWF0aCxBPW4uUmFuZ2VFcnJvcixrPW4uSW5maW5pdHkseD1NLEk9RS5hYnMsQj1FLnBvdyxPPUUuZmxvb3IsUj1FLmxvZyxQPUUuTE4yLFQ9XCJidWZmZXJcIixqPVwiYnl0ZUxlbmd0aFwiLEM9XCJieXRlT2Zmc2V0XCIsTj1pP1wiX2JcIjpULEw9aT9cIl9sXCI6aixVPWk/XCJfb1wiOkMsej1mdW5jdGlvbih0LGUscil7XG52YXIgbixpLG8sYT1BcnJheShyKSxmPTgqci1lLTEscz0oMTw8ZiktMSx1PXM+PjEsaD0yMz09PWU/QigyLC0yNCktQigyLC03Nyk6MCxjPTAsZD10PDB8fDA9PT10JiYxL3Q8MD8xOjA7Zm9yKHQ9SSh0KSx0IT10fHx0PT09az8oaT10IT10PzE6MCxuPXMpOihuPU8oUih0KS9QKSx0KihvPUIoMiwtbikpPDEmJihuLS0sbyo9MiksdCs9bit1Pj0xP2gvbzpoKkIoMiwxLXUpLHQqbz49MiYmKG4rKyxvLz0yKSxuK3U+PXM/KGk9MCxuPXMpOm4rdT49MT8oaT0odCpvLTEpKkIoMixlKSxuKz11KTooaT10KkIoMix1LTEpKkIoMixlKSxuPTApKTtlPj04O2FbYysrXT0yNTUmaSxpLz0yNTYsZS09OCk7Zm9yKG49bjw8ZXxpLGYrPWU7Zj4wO2FbYysrXT0yNTUmbixuLz0yNTYsZi09OCk7cmV0dXJuIGFbLS1jXXw9MTI4KmQsYX0sRD1mdW5jdGlvbih0LGUscil7dmFyIG4saT04KnItZS0xLG89KDE8PGkpLTEsYT1vPj4xLGY9aS03LHM9ci0xLHU9dFtzLS1dLGg9MTI3JnU7Zm9yKHU+Pj03O2Y+MDtoPTI1NipoK3Rbc10scy0tLGYtPTgpO2ZvcihuPWgmKDE8PC1mKS0xLGg+Pj0tZixmKz1lO2Y+MDtuPTI1NipuK3Rbc10scy0tLGYtPTgpO2lmKDA9PT1oKWg9MS1hO2Vsc2V7aWYoaD09PW8pcmV0dXJuIG4/TmFOOnU/LWs6aztuKz1CKDIsZSksaC09YX1yZXR1cm4odT8tMToxKSpuKkIoMixoLWUpfSxxPWZ1bmN0aW9uKHQpe3JldHVybiB0WzNdPDwyNHx0WzJdPDwxNnx0WzFdPDw4fHRbMF19LEY9ZnVuY3Rpb24odCl7cmV0dXJuWzI1NSZ0XX0sSz1mdW5jdGlvbih0KXtyZXR1cm5bMjU1JnQsdD4+OCYyNTVdfSxHPWZ1bmN0aW9uKHQpe3JldHVyblsyNTUmdCx0Pj44JjI1NSx0Pj4xNiYyNTUsdD4+MjQmMjU1XX0sVj1mdW5jdGlvbih0KXtyZXR1cm4geih0LDUyLDgpfSxIPWZ1bmN0aW9uKHQpe3JldHVybiB6KHQsMjMsNCl9LFg9ZnVuY3Rpb24odCxlLHIpe3AodFtnXSxlLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc1tyXX19KX0sWT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT0rcixvPWMoaSk7aWYoaSE9b3x8bzwwfHxvK2U+dFtMXSl0aHJvdyBBKF8pO3ZhciBhPXRbTl0uX2IsZj1vK3RbVV0scz1hLnNsaWNlKGYsZitlKTtyZXR1cm4gbj9zOnMucmV2ZXJzZSgpfSxXPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt2YXIgYT0rcixmPWMoYSk7aWYoYSE9Znx8ZjwwfHxmK2U+dFtMXSl0aHJvdyBBKF8pO2Zvcih2YXIgcz10W05dLl9iLHU9Zit0W1VdLGg9bigraSksZD0wO2Q8ZTtkKyspc1t1K2RdPWhbbz9kOmUtZC0xXX0sWj1mdW5jdGlvbih0LGUpe2godCxNLHkpO3ZhciByPStlLG49ZChyKTtpZihyIT1uKXRocm93IEEodyk7cmV0dXJuIG59O2lmKGEuQUJWKXtpZighdShmdW5jdGlvbigpe25ldyBNfSl8fCF1KGZ1bmN0aW9uKCl7bmV3IE0oLjUpfSkpe009ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyB4KFoodGhpcyx0KSl9O2Zvcih2YXIgSiwkPU1bZ109eFtnXSxRPWwoeCksdHQ9MDtRLmxlbmd0aD50dDspKEo9UVt0dCsrXSlpbiBNfHxmKE0sSix4W0pdKTtvfHwoJC5jb25zdHJ1Y3Rvcj1NKX12YXIgZXQ9bmV3IFMobmV3IE0oMikpLHJ0PVNbZ10uc2V0SW50ODtldC5zZXRJbnQ4KDAsMjE0NzQ4MzY0OCksZXQuc2V0SW50OCgxLDIxNDc0ODM2NDkpLCFldC5nZXRJbnQ4KDApJiZldC5nZXRJbnQ4KDEpfHxzKFNbZ10se3NldEludDg6ZnVuY3Rpb24odCxlKXtydC5jYWxsKHRoaXMsdCxlPDwyND4+MjQpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe3J0LmNhbGwodGhpcyx0LGU8PDI0Pj4yNCl9fSwhMCl9ZWxzZSBNPWZ1bmN0aW9uKHQpe3ZhciBlPVoodGhpcyx0KTt0aGlzLl9iPWIuY2FsbChBcnJheShlKSwwKSx0aGlzW0xdPWV9LFM9ZnVuY3Rpb24odCxlLHIpe2godGhpcyxTLG0pLGgodCxNLG0pO3ZhciBuPXRbTF0saT1jKGUpO2lmKGk8MHx8aT5uKXRocm93IEEoXCJXcm9uZyBvZmZzZXQhXCIpO2lmKHI9dm9pZCAwPT09cj9uLWk6ZChyKSxpK3I+bil0aHJvdyBBKHcpO3RoaXNbTl09dCx0aGlzW1VdPWksdGhpc1tMXT1yfSxpJiYoWChNLGosXCJfbFwiKSxYKFMsVCxcIl9iXCIpLFgoUyxqLFwiX2xcIiksWChTLEMsXCJfb1wiKSkscyhTW2ddLHtnZXRJbnQ4OmZ1bmN0aW9uKHQpe3JldHVybiBZKHRoaXMsMSx0KVswXTw8MjQ+PjI0fSxnZXRVaW50ODpmdW5jdGlvbih0KXtyZXR1cm4gWSh0aGlzLDEsdClbMF19LGdldEludDE2OmZ1bmN0aW9uKHQpe3ZhciBlPVkodGhpcywyLHQsYXJndW1lbnRzWzFdKTtyZXR1cm4oZVsxXTw8OHxlWzBdKTw8MTY+PjE2fSxnZXRVaW50MTY6ZnVuY3Rpb24odCl7dmFyIGU9WSh0aGlzLDIsdCxhcmd1bWVudHNbMV0pO3JldHVybiBlWzFdPDw4fGVbMF19LGdldEludDMyOmZ1bmN0aW9uKHQpe3JldHVybiBxKFkodGhpcyw0LHQsYXJndW1lbnRzWzFdKSl9LGdldFVpbnQzMjpmdW5jdGlvbih0KXtyZXR1cm4gcShZKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSkpPj4+MH0sZ2V0RmxvYXQzMjpmdW5jdGlvbih0KXtyZXR1cm4gRChZKHRoaXMsNCx0LGFyZ3VtZW50c1sxXSksMjMsNCl9LGdldEZsb2F0NjQ6ZnVuY3Rpb24odCl7cmV0dXJuIEQoWSh0aGlzLDgsdCxhcmd1bWVudHNbMV0pLDUyLDgpfSxzZXRJbnQ4OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDEsdCxGLGUpfSxzZXRVaW50ODpmdW5jdGlvbih0LGUpe1codGhpcywxLHQsRixlKX0sc2V0SW50MTY6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMix0LEssZSxhcmd1bWVudHNbMl0pfSxzZXRVaW50MTY6ZnVuY3Rpb24odCxlKXtXKHRoaXMsMix0LEssZSxhcmd1bWVudHNbMl0pfSxzZXRJbnQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsRyxlLGFyZ3VtZW50c1syXSl9LHNldFVpbnQzMjpmdW5jdGlvbih0LGUpe1codGhpcyw0LHQsRyxlLGFyZ3VtZW50c1syXSl9LHNldEZsb2F0MzI6ZnVuY3Rpb24odCxlKXtXKHRoaXMsNCx0LEgsZSxhcmd1bWVudHNbMl0pfSxzZXRGbG9hdDY0OmZ1bmN0aW9uKHQsZSl7Vyh0aGlzLDgsdCxWLGUsYXJndW1lbnRzWzJdKX19KTt2KE0seSksdihTLG0pLGYoU1tnXSxhLlZJRVcsITApLGVbeV09TSxlW21dPVN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQpLGk9cigzMiksbz1yKDQxKSxhPXIoMTg5KSxmPXIoOSkuZjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dmFyIGU9aS5TeW1ib2x8fChpLlN5bWJvbD1vP3t9Om4uU3ltYm9sfHx7fSk7XCJfXCI9PXQuY2hhckF0KDApfHx0IGluIGV8fGYoZSx0LHt2YWx1ZTphLmYodCl9KX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY0KSxpPXIoNykoXCJpdGVyYXRvclwiKSxvPXIoNTYpO3QuZXhwb3J0cz1yKDMyKS5nZXRJdGVyYXRvck1ldGhvZD1mdW5jdGlvbih0KXtpZih2b2lkIDAhPXQpcmV0dXJuIHRbaV18fHRbXCJAQGl0ZXJhdG9yXCJdfHxvW24odCldfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNTQpLGk9cigxNzcpLG89cig1NiksYT1yKDE3KTt0LmV4cG9ydHM9cigxMjgpKEFycmF5LFwiQXJyYXlcIixmdW5jdGlvbih0LGUpe3RoaXMuX3Q9YSh0KSx0aGlzLl9pPTAsdGhpcy5faz1lfSxmdW5jdGlvbigpe3ZhciB0PXRoaXMuX3QsZT10aGlzLl9rLHI9dGhpcy5faSsrO3JldHVybiF0fHxyPj10Lmxlbmd0aD8odGhpcy5fdD12b2lkIDAsaSgxKSk6XCJrZXlzXCI9PWU/aSgwLHIpOlwidmFsdWVzXCI9PWU/aSgwLHRbcl0pOmkoMCxbcix0W3JdXSl9LFwidmFsdWVzXCIpLG8uQXJndW1lbnRzPW8uQXJyYXksbihcImtleXNcIiksbihcInZhbHVlc1wiKSxuKFwiZW50cmllc1wiKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz0hcigxOTkpKGZ1bmN0aW9uKCl7cmV0dXJuIDchPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh7fSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZS51dGlscz1yKDUwNSksZS5DaXBoZXI9cig1MDIpLGUuREVTPXIoNTAzKSxlLkNCQz1yKDUwMSksZS5FREU9cig1MDQpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sbyl7ZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxcImJpbmFyeVwiKSksciYmIWUuaXNCdWZmZXIocikmJihyPW5ldyBlKHIsXCJiaW5hcnlcIikpLG4vPTgsbz1vfHwwO2Zvcih2YXIgYSxmLHM9MCx1PTAsaD1uZXcgZShuKSxjPW5ldyBlKG8pLGQ9MCxsPVtdOzspe2lmKGQrKz4wJiZsLnB1c2goYSksbC5wdXNoKHQpLHImJmwucHVzaChyKSxhPWkoZS5jb25jYXQobCkpLGw9W10sZj0wLG4+MClmb3IoOzspe2lmKDA9PT1uKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztoW3MrK109YVtmXSxuLS0sZisrfWlmKG8+MCYmZiE9PWEubGVuZ3RoKWZvcig7Oyl7aWYoMD09PW8pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2NbdSsrXT1hW2ZdLG8tLSxmKyt9aWYoMD09PW4mJjA9PT1vKWJyZWFrfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXT0wO3JldHVybntrZXk6aCxpdjpjfX12YXIgaT1yKDEwNSk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2VbXCJhZXMtMTI4LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTI1Ni1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTI4LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMTkyLWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWNiY1wiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0JDXCIsdHlwZTpcImJsb2NrXCJ9LGUuYWVzMTI4PWVbXCJhZXMtMTI4LWNiY1wiXSxlLmFlczE5Mj1lW1wiYWVzLTE5Mi1jYmNcIl0sZS5hZXMyNTY9ZVtcImFlcy0yNTYtY2JjXCJdLGVbXCJhZXMtMTI4LWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjhcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjhcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxMjgsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMjU2LWNmYjFcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQjFcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTE5Mi1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTI4LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn0sZVtcImFlcy0xOTItZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTI1Ni1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLG4sbyl7ZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxcImJpbmFyeVwiKSksciYmIWUuaXNCdWZmZXIocikmJihyPW5ldyBlKHIsXCJiaW5hcnlcIikpLG4vPTgsbz1vfHwwO2Zvcih2YXIgYSxmLHM9MCx1PTAsaD1uZXcgZShuKSxjPW5ldyBlKG8pLGQ9MCxsPVtdOzspe2lmKGQrKz4wJiZsLnB1c2goYSksbC5wdXNoKHQpLHImJmwucHVzaChyKSxhPWkoZS5jb25jYXQobCkpLGw9W10sZj0wLG4+MClmb3IoOzspe2lmKDA9PT1uKWJyZWFrO2lmKGY9PT1hLmxlbmd0aClicmVhaztoW3MrK109YVtmXSxuLS0sZisrfWlmKG8+MCYmZiE9PWEubGVuZ3RoKWZvcig7Oyl7aWYoMD09PW8pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2NbdSsrXT1hW2ZdLG8tLSxmKyt9aWYoMD09PW4mJjA9PT1vKWJyZWFrfWZvcihmPTA7ZjxhLmxlbmd0aDtmKyspYVtmXT0wO3JldHVybntrZXk6aCxpdjpjfX12YXIgaT1yKDEwNSk7dC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXthLmNhbGwodGhpcyksdD10LnRvTG93ZXJDYXNlKCksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyBlKHIpKTt2YXIgbj1cInNoYTUxMlwiPT09dHx8XCJzaGEzODRcIj09PXQ/MTI4OjY0O3RoaXMuX2FsZz10LHRoaXMuX2tleT1yLHIubGVuZ3RoPm4/cj1pKHQpLnVwZGF0ZShyKS5kaWdlc3QoKTpyLmxlbmd0aDxuJiYocj1lLmNvbmNhdChbcixmXSxuKSk7Zm9yKHZhciBvPXRoaXMuX2lwYWQ9bmV3IGUobikscz10aGlzLl9vcGFkPW5ldyBlKG4pLHU9MDt1PG47dSsrKW9bdV09NTReclt1XSxzW3VdPTkyXnJbdV07dGhpcy5faGFzaD1pKHQpLnVwZGF0ZShvKX12YXIgaT1yKDU5KSxvPXIoMiksYT1yKDMxKS5UcmFuc2Zvcm0sZj1uZXcgZSgxMjgpO2YuZmlsbCgwKSxvKG4sYSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX2hhc2gudXBkYXRlKHQsZSksdGhpc30sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dGhpcy5wdXNoKHRoaXMuZGlnZXN0KCkpLHQoKX0sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2hhc2guZGlnZXN0KCk7cmV0dXJuIGkodGhpcy5fYWxnKS51cGRhdGUodGhpcy5fb3BhZCkudXBkYXRlKGUpLmRpZ2VzdCh0KX0sdC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBuKHQsZSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBpKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH1mdW5jdGlvbiBvKHQsZSxyKXtyZXR1cm4gby5pc0JOKHQpP3Q6KHRoaXMubmVnYXRpdmU9MCx0aGlzLndvcmRzPW51bGwsdGhpcy5sZW5ndGg9MCx0aGlzLnJlZD1udWxsLHZvaWQobnVsbCE9PXQmJihcImxlXCIhPT1lJiZcImJlXCIhPT1lfHwocj1lLGU9MTApLHRoaXMuX2luaXQodHx8MCxlfHwxMCxyfHxcImJlXCIpKSkpfWZ1bmN0aW9uIGEodCxlLHIpe2Zvcih2YXIgbj0wLGk9TWF0aC5taW4odC5sZW5ndGgsciksbz1lO288aTtvKyspe3ZhciBhPXQuY2hhckNvZGVBdChvKS00ODtuPDw9NCxufD1hPj00OSYmYTw9NTQ/YS00OSsxMDphPj0xNyYmYTw9MjI/YS0xNysxMDoxNSZhfXJldHVybiBufWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpPTAsbz1NYXRoLm1pbih0Lmxlbmd0aCxyKSxhPWU7YTxvO2ErKyl7dmFyIGY9dC5jaGFyQ29kZUF0KGEpLTQ4O2kqPW4saSs9Zj49NDk/Zi00OSsxMDpmPj0xNz9mLTE3KzEwOmZ9cmV0dXJuIGl9ZnVuY3Rpb24gcyh0KXtmb3IodmFyIGU9bmV3IEFycmF5KHQuYml0TGVuZ3RoKCkpLHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ci8yNnwwLGk9ciUyNjtlW3JdPSh0LndvcmRzW25dJjE8PGkpPj4+aX1yZXR1cm4gZX1mdW5jdGlvbiB1KHQsZSxyKXtyLm5lZ2F0aXZlPWUubmVnYXRpdmVedC5uZWdhdGl2ZTt2YXIgbj10Lmxlbmd0aCtlLmxlbmd0aHwwO3IubGVuZ3RoPW4sbj1uLTF8MDt2YXIgaT0wfHQud29yZHNbMF0sbz0wfGUud29yZHNbMF0sYT1pKm8sZj02NzEwODg2MyZhLHM9YS82NzEwODg2NHwwO3Iud29yZHNbMF09Zjtmb3IodmFyIHU9MTt1PG47dSsrKXtmb3IodmFyIGg9cz4+PjI2LGM9NjcxMDg4NjMmcyxkPU1hdGgubWluKHUsZS5sZW5ndGgtMSksbD1NYXRoLm1heCgwLHUtdC5sZW5ndGgrMSk7bDw9ZDtsKyspe3ZhciBwPXUtbHwwO2k9MHx0LndvcmRzW3BdLG89MHxlLndvcmRzW2xdLGE9aSpvK2MsaCs9YS82NzEwODg2NHwwLGM9NjcxMDg4NjMmYX1yLndvcmRzW3VdPTB8YyxzPTB8aH1yZXR1cm4gMCE9PXM/ci53b3Jkc1t1XT0wfHM6ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gaCh0LGUscil7ci5uZWdhdGl2ZT1lLm5lZ2F0aXZlXnQubmVnYXRpdmUsci5sZW5ndGg9dC5sZW5ndGgrZS5sZW5ndGg7Zm9yKHZhciBuPTAsaT0wLG89MDtvPHIubGVuZ3RoLTE7bysrKXt2YXIgYT1pO2k9MDtmb3IodmFyIGY9NjcxMDg4NjMmbixzPU1hdGgubWluKG8sZS5sZW5ndGgtMSksdT1NYXRoLm1heCgwLG8tdC5sZW5ndGgrMSk7dTw9czt1Kyspe3ZhciBoPW8tdSxjPTB8dC53b3Jkc1toXSxkPTB8ZS53b3Jkc1t1XSxsPWMqZCxwPTY3MTA4ODYzJmw7YT1hKyhsLzY3MTA4ODY0fDApfDAscD1wK2Z8MCxmPTY3MTA4ODYzJnAsYT1hKyhwPj4+MjYpfDAsaSs9YT4+PjI2LGEmPTY3MTA4ODYzfXIud29yZHNbb109ZixuPWEsYT1pfXJldHVybiAwIT09bj9yLndvcmRzW29dPW46ci5sZW5ndGgtLSxyLnN0cmlwKCl9ZnVuY3Rpb24gYyh0LGUscil7dmFyIG49bmV3IGQ7cmV0dXJuIG4ubXVscCh0LGUscil9ZnVuY3Rpb24gZCh0LGUpe3RoaXMueD10LHRoaXMueT1lfWZ1bmN0aW9uIGwodCxlKXt0aGlzLm5hbWU9dCx0aGlzLnA9bmV3IG8oZSwxNiksdGhpcy5uPXRoaXMucC5iaXRMZW5ndGgoKSx0aGlzLms9bmV3IG8oMSkuaXVzaGxuKHRoaXMubikuaXN1Yih0aGlzLnApLHRoaXMudG1wPXRoaXMuX3RtcCgpfWZ1bmN0aW9uIHAoKXtsLmNhbGwodGhpcyxcImsyNTZcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIpfWZ1bmN0aW9uIGIoKXtsLmNhbGwodGhpcyxcInAyMjRcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIpfWZ1bmN0aW9uIHYoKXtsLmNhbGwodGhpcyxcInAxOTJcIixcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIpfWZ1bmN0aW9uIHkoKXtsLmNhbGwodGhpcyxcIjI1NTE5XCIsXCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIpfWZ1bmN0aW9uIG0odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe3ZhciBlPW8uX3ByaW1lKHQpO3RoaXMubT1lLnAsdGhpcy5wcmltZT1lfWVsc2Ugbih0Lmd0bigxKSxcIm1vZHVsdXMgbXVzdCBiZSBncmVhdGVyIHRoYW4gMVwiKSx0aGlzLm09dCx0aGlzLnByaW1lPW51bGx9ZnVuY3Rpb24gZyh0KXttLmNhbGwodGhpcyx0KSx0aGlzLnNoaWZ0PXRoaXMubS5iaXRMZW5ndGgoKSx0aGlzLnNoaWZ0JTI2IT09MCYmKHRoaXMuc2hpZnQrPTI2LXRoaXMuc2hpZnQlMjYpLHRoaXMucj1uZXcgbygxKS5pdXNobG4odGhpcy5zaGlmdCksdGhpcy5yMj10aGlzLmltb2QodGhpcy5yLnNxcigpKSx0aGlzLnJpbnY9dGhpcy5yLl9pbnZtcCh0aGlzLm0pLHRoaXMubWludj10aGlzLnJpbnYubXVsKHRoaXMucikuaXN1Ym4oMSkuZGl2KHRoaXMubSksdGhpcy5taW52PXRoaXMubWludi51bW9kKHRoaXMuciksdGhpcy5taW52PXRoaXMuci5zdWIodGhpcy5taW52KX1cIm9iamVjdFwiPT10eXBlb2YgdD90LmV4cG9ydHM9bzplLkJOPW8sby5CTj1vLG8ud29yZFNpemU9MjY7dmFyIHc7dHJ5e3c9cigxKS5CdWZmZXJ9Y2F0Y2godCl7fW8uaXNCTj1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIG98fG51bGwhPT10JiZcIm9iamVjdFwiPT10eXBlb2YgdCYmdC5jb25zdHJ1Y3Rvci53b3JkU2l6ZT09PW8ud29yZFNpemUmJkFycmF5LmlzQXJyYXkodC53b3Jkcyl9LG8ubWF4PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuY21wKGUpPjA/dDplfSxvLm1pbj1mdW5jdGlvbih0LGUpe3JldHVybiB0LmNtcChlKTwwP3Q6ZX0sby5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXJldHVybiB0aGlzLl9pbml0TnVtYmVyKHQsZSxyKTtpZihcIm9iamVjdFwiPT10eXBlb2YgdClyZXR1cm4gdGhpcy5faW5pdEFycmF5KHQsZSxyKTtcImhleFwiPT09ZSYmKGU9MTYpLG4oZT09PSgwfGUpJiZlPj0yJiZlPD0zNiksdD10LnRvU3RyaW5nKCkucmVwbGFjZSgvXFxzKy9nLFwiXCIpO3ZhciBpPTA7XCItXCI9PT10WzBdJiZpKyssMTY9PT1lP3RoaXMuX3BhcnNlSGV4KHQsaSk6dGhpcy5fcGFyc2VCYXNlKHQsZSxpKSxcIi1cIj09PXRbMF0mJih0aGlzLm5lZ2F0aXZlPTEpLHRoaXMuc3RyaXAoKSxcImxlXCI9PT1yJiZ0aGlzLl9pbml0QXJyYXkodGhpcy50b0FycmF5KCksZSxyKX0sby5wcm90b3R5cGUuX2luaXROdW1iZXI9ZnVuY3Rpb24odCxlLHIpe3Q8MCYmKHRoaXMubmVnYXRpdmU9MSx0PS10KSx0PDY3MTA4ODY0Pyh0aGlzLndvcmRzPVs2NzEwODg2MyZ0XSx0aGlzLmxlbmd0aD0xKTp0PDQ1MDM1OTk2MjczNzA0OTY/KHRoaXMud29yZHM9WzY3MTA4ODYzJnQsdC82NzEwODg2NCY2NzEwODg2M10sdGhpcy5sZW5ndGg9Mik6KG4odDw5MDA3MTk5MjU0NzQwOTkyKSx0aGlzLndvcmRzPVs2NzEwODg2MyZ0LHQvNjcxMDg4NjQmNjcxMDg4NjMsMV0sdGhpcy5sZW5ndGg9MyksXCJsZVwiPT09ciYmdGhpcy5faW5pdEFycmF5KHRoaXMudG9BcnJheSgpLGUscil9LG8ucHJvdG90eXBlLl9pbml0QXJyYXk9ZnVuY3Rpb24odCxlLHIpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQubGVuZ3RoKSx0Lmxlbmd0aDw9MClyZXR1cm4gdGhpcy53b3Jkcz1bMF0sdGhpcy5sZW5ndGg9MSx0aGlzO3RoaXMubGVuZ3RoPU1hdGguY2VpbCh0Lmxlbmd0aC8zKSx0aGlzLndvcmRzPW5ldyBBcnJheSh0aGlzLmxlbmd0aCk7Zm9yKHZhciBpPTA7aTx0aGlzLmxlbmd0aDtpKyspdGhpcy53b3Jkc1tpXT0wO3ZhciBvLGEsZj0wO2lmKFwiYmVcIj09PXIpZm9yKGk9dC5sZW5ndGgtMSxvPTA7aT49MDtpLT0zKWE9dFtpXXx0W2ktMV08PDh8dFtpLTJdPDwxNix0aGlzLndvcmRzW29dfD1hPDxmJjY3MTA4ODYzLHRoaXMud29yZHNbbysxXT1hPj4+MjYtZiY2NzEwODg2MyxmKz0yNCxmPj0yNiYmKGYtPTI2LG8rKyk7ZWxzZSBpZihcImxlXCI9PT1yKWZvcihpPTAsbz0wO2k8dC5sZW5ndGg7aSs9MylhPXRbaV18dFtpKzFdPDw4fHRbaSsyXTw8MTYsdGhpcy53b3Jkc1tvXXw9YTw8ZiY2NzEwODg2Myx0aGlzLndvcmRzW28rMV09YT4+PjI2LWYmNjcxMDg4NjMsZis9MjQsZj49MjYmJihmLT0yNixvKyspO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUhleD1mdW5jdGlvbih0LGUpe3RoaXMubGVuZ3RoPU1hdGguY2VpbCgodC5sZW5ndGgtZSkvNiksdGhpcy53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgcj0wO3I8dGhpcy5sZW5ndGg7cisrKXRoaXMud29yZHNbcl09MDt2YXIgbixpLG89MDtmb3Iocj10Lmxlbmd0aC02LG49MDtyPj1lO3ItPTYpaT1hKHQscixyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzLG8rPTI0LG8+PTI2JiYoby09MjYsbisrKTtyKzYhPT1lJiYoaT1hKHQsZSxyKzYpLHRoaXMud29yZHNbbl18PWk8PG8mNjcxMDg4NjMsdGhpcy53b3Jkc1tuKzFdfD1pPj4+MjYtbyY0MTk0MzAzKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl9wYXJzZUJhc2U9ZnVuY3Rpb24odCxlLHIpe3RoaXMud29yZHM9WzBdLHRoaXMubGVuZ3RoPTE7Zm9yKHZhciBuPTAsaT0xO2k8PTY3MTA4ODYzO2kqPWUpbisrO24tLSxpPWkvZXwwO2Zvcih2YXIgbz10Lmxlbmd0aC1yLGE9byVuLHM9TWF0aC5taW4obyxvLWEpK3IsdT0wLGg9cjtoPHM7aCs9bil1PWYodCxoLGgrbixlKSx0aGlzLmltdWxuKGkpLHRoaXMud29yZHNbMF0rdTw2NzEwODg2ND90aGlzLndvcmRzWzBdKz11OnRoaXMuX2lhZGRuKHUpO2lmKDAhPT1hKXt2YXIgYz0xO2Zvcih1PWYodCxoLHQubGVuZ3RoLGUpLGg9MDtoPGE7aCsrKWMqPWU7dGhpcy5pbXVsbihjKSx0aGlzLndvcmRzWzBdK3U8NjcxMDg4NjQ/dGhpcy53b3Jkc1swXSs9dTp0aGlzLl9pYWRkbih1KX19LG8ucHJvdG90eXBlLmNvcHk9ZnVuY3Rpb24odCl7dC53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgpO2Zvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGg7ZSsrKXQud29yZHNbZV09dGhpcy53b3Jkc1tlXTt0Lmxlbmd0aD10aGlzLmxlbmd0aCx0Lm5lZ2F0aXZlPXRoaXMubmVnYXRpdmUsdC5yZWQ9dGhpcy5yZWR9LG8ucHJvdG90eXBlLmNsb25lPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHRoaXMuY29weSh0KSx0fSxvLnByb3RvdHlwZS5fZXhwYW5kPWZ1bmN0aW9uKHQpe2Zvcig7dGhpcy5sZW5ndGg8dDspdGhpcy53b3Jkc1t0aGlzLmxlbmd0aCsrXT0wO3JldHVybiB0aGlzfSxvLnByb3RvdHlwZS5zdHJpcD1mdW5jdGlvbigpe2Zvcig7dGhpcy5sZW5ndGg+MSYmMD09PXRoaXMud29yZHNbdGhpcy5sZW5ndGgtMV07KXRoaXMubGVuZ3RoLS07cmV0dXJuIHRoaXMuX25vcm1TaWduKCl9LG8ucHJvdG90eXBlLl9ub3JtU2lnbj1mdW5jdGlvbigpe3JldHVybiAxPT09dGhpcy5sZW5ndGgmJjA9PT10aGlzLndvcmRzWzBdJiYodGhpcy5uZWdhdGl2ZT0wKSx0aGlzfSxvLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMucmVkP1wiPEJOLVI6IFwiOlwiPEJOOiBcIikrdGhpcy50b1N0cmluZygxNikrXCI+XCJ9O3ZhciBfPVtcIlwiLFwiMFwiLFwiMDBcIixcIjAwMFwiLFwiMDAwMFwiLFwiMDAwMDBcIixcIjAwMDAwMFwiLFwiMDAwMDAwMFwiLFwiMDAwMDAwMDBcIixcIjAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDBcIixcIjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiLFwiMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMFwiXSxNPVswLDAsMjUsMTYsMTIsMTEsMTAsOSw4LDgsNyw3LDcsNyw2LDYsNiw2LDYsNiw2LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDUsNSw1LDVdLFM9WzAsMCwzMzU1NDQzMiw0MzA0NjcyMSwxNjc3NzIxNiw0ODgyODEyNSw2MDQ2NjE3Niw0MDM1MzYwNywxNjc3NzIxNiw0MzA0NjcyMSwxZTcsMTk0ODcxNzEsMzU4MzE4MDgsNjI3NDg1MTcsNzUyOTUzNiwxMTM5MDYyNSwxNjc3NzIxNiwyNDEzNzU2OSwzNDAxMjIyNCw0NzA0NTg4MSw2NGU2LDQwODQxMDEsNTE1MzYzMiw2NDM2MzQzLDc5NjI2MjQsOTc2NTYyNSwxMTg4MTM3NiwxNDM0ODkwNywxNzIxMDM2OCwyMDUxMTE0OSwyNDNlNSwyODYyOTE1MSwzMzU1NDQzMiwzOTEzNTM5Myw0NTQzNTQyNCw1MjUyMTg3NSw2MDQ2NjE3Nl07by5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24odCxlKXt0PXR8fDEwLGU9MHxlfHwxO3ZhciByO2lmKDE2PT09dHx8XCJoZXhcIj09PXQpe3I9XCJcIjtmb3IodmFyIGk9MCxvPTAsYT0wO2E8dGhpcy5sZW5ndGg7YSsrKXt2YXIgZj10aGlzLndvcmRzW2FdLHM9KDE2Nzc3MjE1JihmPDxpfG8pKS50b1N0cmluZygxNik7bz1mPj4+MjQtaSYxNjc3NzIxNSxyPTAhPT1vfHxhIT09dGhpcy5sZW5ndGgtMT9fWzYtcy5sZW5ndGhdK3MrcjpzK3IsaSs9MixpPj0yNiYmKGktPTI2LGEtLSl9Zm9yKDAhPT1vJiYocj1vLnRvU3RyaW5nKDE2KStyKTtyLmxlbmd0aCVlIT09MDspcj1cIjBcIityO3JldHVybiAwIT09dGhpcy5uZWdhdGl2ZSYmKHI9XCItXCIrcikscn1pZih0PT09KDB8dCkmJnQ+PTImJnQ8PTM2KXt2YXIgdT1NW3RdLGg9U1t0XTtyPVwiXCI7dmFyIGM9dGhpcy5jbG9uZSgpO2ZvcihjLm5lZ2F0aXZlPTA7IWMuaXNaZXJvKCk7KXt2YXIgZD1jLm1vZG4oaCkudG9TdHJpbmcodCk7Yz1jLmlkaXZuKGgpLHI9Yy5pc1plcm8oKT9kK3I6X1t1LWQubGVuZ3RoXStkK3J9Zm9yKHRoaXMuaXNaZXJvKCkmJihyPVwiMFwiK3IpO3IubGVuZ3RoJWUhPT0wOylyPVwiMFwiK3I7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlJiYocj1cIi1cIityKSxyfW4oITEsXCJCYXNlIHNob3VsZCBiZSBiZXR3ZWVuIDIgYW5kIDM2XCIpfSxvLnByb3RvdHlwZS50b051bWJlcj1mdW5jdGlvbigpe3ZhciB0PXRoaXMud29yZHNbMF07cmV0dXJuIDI9PT10aGlzLmxlbmd0aD90Kz02NzEwODg2NCp0aGlzLndvcmRzWzFdOjM9PT10aGlzLmxlbmd0aCYmMT09PXRoaXMud29yZHNbMl0/dCs9NDUwMzU5OTYyNzM3MDQ5Nis2NzEwODg2NCp0aGlzLndvcmRzWzFdOnRoaXMubGVuZ3RoPjImJm4oITEsXCJOdW1iZXIgY2FuIG9ubHkgc2FmZWx5IHN0b3JlIHVwIHRvIDUzIGJpdHNcIiksMCE9PXRoaXMubmVnYXRpdmU/LXQ6dH0sby5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudG9TdHJpbmcoMTYpfSxvLnByb3RvdHlwZS50b0J1ZmZlcj1mdW5jdGlvbih0LGUpe3JldHVybiBuKFwidW5kZWZpbmVkXCIhPXR5cGVvZiB3KSx0aGlzLnRvQXJyYXlMaWtlKHcsdCxlKX0sby5wcm90b3R5cGUudG9BcnJheT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRvQXJyYXlMaWtlKEFycmF5LHQsZSl9LG8ucHJvdG90eXBlLnRvQXJyYXlMaWtlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaT10aGlzLmJ5dGVMZW5ndGgoKSxvPXJ8fE1hdGgubWF4KDEsaSk7bihpPD1vLFwiYnl0ZSBhcnJheSBsb25nZXIgdGhhbiBkZXNpcmVkIGxlbmd0aFwiKSxuKG8+MCxcIlJlcXVlc3RlZCBhcnJheSBsZW5ndGggPD0gMFwiKSx0aGlzLnN0cmlwKCk7dmFyIGEsZixzPVwibGVcIj09PWUsdT1uZXcgdChvKSxoPXRoaXMuY2xvbmUoKTtpZihzKXtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W2ZdPWE7Zm9yKDtmPG87ZisrKXVbZl09MH1lbHNle2ZvcihmPTA7ZjxvLWk7ZisrKXVbZl09MDtmb3IoZj0wOyFoLmlzWmVybygpO2YrKylhPWguYW5kbG4oMjU1KSxoLml1c2hybig4KSx1W28tZi0xXT1hfXJldHVybiB1fSxNYXRoLmNsejMyP28ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7cmV0dXJuIDMyLU1hdGguY2x6MzIodCl9Om8ucHJvdG90eXBlLl9jb3VudEJpdHM9ZnVuY3Rpb24odCl7dmFyIGU9dCxyPTA7cmV0dXJuIGU+PTQwOTYmJihyKz0xMyxlPj4+PTEzKSxlPj02NCYmKHIrPTcsZT4+Pj03KSxlPj04JiYocis9NCxlPj4+PTQpLGU+PTImJihyKz0yLGU+Pj49MikscitlfSxvLnByb3RvdHlwZS5femVyb0JpdHM9ZnVuY3Rpb24odCl7aWYoMD09PXQpcmV0dXJuIDI2O3ZhciBlPXQscj0wO3JldHVybiAwPT09KDgxOTEmZSkmJihyKz0xMyxlPj4+PTEzKSwwPT09KDEyNyZlKSYmKHIrPTcsZT4+Pj03KSwwPT09KDE1JmUpJiYocis9NCxlPj4+PTQpLDA9PT0oMyZlKSYmKHIrPTIsZT4+Pj0yKSwwPT09KDEmZSkmJnIrKyxyfSxvLnByb3RvdHlwZS5iaXRMZW5ndGg9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLndvcmRzW3RoaXMubGVuZ3RoLTFdLGU9dGhpcy5fY291bnRCaXRzKHQpO3JldHVybiAyNioodGhpcy5sZW5ndGgtMSkrZX0sby5wcm90b3R5cGUuemVyb0JpdHM9ZnVuY3Rpb24oKXtpZih0aGlzLmlzWmVybygpKXJldHVybiAwO2Zvcih2YXIgdD0wLGU9MDtlPHRoaXMubGVuZ3RoO2UrKyl7dmFyIHI9dGhpcy5femVyb0JpdHModGhpcy53b3Jkc1tlXSk7aWYodCs9ciwyNiE9PXIpYnJlYWt9cmV0dXJuIHR9LG8ucHJvdG90eXBlLmJ5dGVMZW5ndGg9ZnVuY3Rpb24oKXtyZXR1cm4gTWF0aC5jZWlsKHRoaXMuYml0TGVuZ3RoKCkvOCl9LG8ucHJvdG90eXBlLnRvVHdvcz1mdW5jdGlvbih0KXtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/dGhpcy5hYnMoKS5pbm90bih0KS5pYWRkbigxKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmZyb21Ud29zPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRlc3RuKHQtMSk/dGhpcy5ub3RuKHQpLmlhZGRuKDEpLmluZWcoKTp0aGlzLmNsb25lKCl9LG8ucHJvdG90eXBlLmlzTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlfSxvLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmluZWcoKX0sby5wcm90b3R5cGUuaW5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzWmVybygpfHwodGhpcy5uZWdhdGl2ZV49MSksdGhpc30sby5wcm90b3R5cGUuaXVvcj1mdW5jdGlvbih0KXtmb3IoO3RoaXMubGVuZ3RoPHQubGVuZ3RoOyl0aGlzLndvcmRzW3RoaXMubGVuZ3RoKytdPTA7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdGhpcy53b3Jkc1tlXT10aGlzLndvcmRzW2VdfHQud29yZHNbZV07cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaW9yPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdW9yKHQpfSxvLnByb3RvdHlwZS5vcj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLmlvcih0KTp0LmNsb25lKCkuaW9yKHRoaXMpfSxvLnByb3RvdHlwZS51b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pdW9yKHQpOnQuY2xvbmUoKS5pdW9yKHRoaXMpfSxvLnByb3RvdHlwZS5pdWFuZD1mdW5jdGlvbih0KXt2YXIgZTtlPXRoaXMubGVuZ3RoPnQubGVuZ3RoP3Q6dGhpcztmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl0aGlzLndvcmRzW3JdPXRoaXMud29yZHNbcl0mdC53b3Jkc1tyXTtyZXR1cm4gdGhpcy5sZW5ndGg9ZS5sZW5ndGgsdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5pYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBuKDA9PT0odGhpcy5uZWdhdGl2ZXx0Lm5lZ2F0aXZlKSksdGhpcy5pdWFuZCh0KX0sby5wcm90b3R5cGUuYW5kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaWFuZCh0KTp0LmNsb25lKCkuaWFuZCh0aGlzKX0sby5wcm90b3R5cGUudWFuZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5sZW5ndGg+dC5sZW5ndGg/dGhpcy5jbG9uZSgpLml1YW5kKHQpOnQuY2xvbmUoKS5pdWFuZCh0aGlzKX0sby5wcm90b3R5cGUuaXV4b3I9ZnVuY3Rpb24odCl7dmFyIGUscjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8oZT10aGlzLHI9dCk6KGU9dCxyPXRoaXMpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXRoaXMud29yZHNbbl09ZS53b3Jkc1tuXV5yLndvcmRzW25dO2lmKHRoaXMhPT1lKWZvcig7bjxlLmxlbmd0aDtuKyspdGhpcy53b3Jkc1tuXT1lLndvcmRzW25dO3JldHVybiB0aGlzLmxlbmd0aD1lLmxlbmd0aCx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLml4b3I9ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PSh0aGlzLm5lZ2F0aXZlfHQubmVnYXRpdmUpKSx0aGlzLml1eG9yKHQpfSxvLnByb3RvdHlwZS54b3I9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5peG9yKHQpOnQuY2xvbmUoKS5peG9yKHRoaXMpfSxvLnByb3RvdHlwZS51eG9yPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmxlbmd0aD50Lmxlbmd0aD90aGlzLmNsb25lKCkuaXV4b3IodCk6dC5jbG9uZSgpLml1eG9yKHRoaXMpfSxvLnByb3RvdHlwZS5pbm90bj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgZT0wfE1hdGguY2VpbCh0LzI2KSxyPXQlMjY7dGhpcy5fZXhwYW5kKGUpLHI+MCYmZS0tO2Zvcih2YXIgaT0wO2k8ZTtpKyspdGhpcy53b3Jkc1tpXT02NzEwODg2MyZ+dGhpcy53b3Jkc1tpXTtyZXR1cm4gcj4wJiYodGhpcy53b3Jkc1tpXT1+dGhpcy53b3Jkc1tpXSY2NzEwODg2Mz4+MjYtciksdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5ub3RuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaW5vdG4odCl9LG8ucHJvdG90eXBlLnNldG49ZnVuY3Rpb24odCxlKXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0JiZ0Pj0wKTt2YXIgcj10LzI2fDAsaT10JTI2O3JldHVybiB0aGlzLl9leHBhbmQocisxKSxlP3RoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXXwxPDxpOnRoaXMud29yZHNbcl09dGhpcy53b3Jkc1tyXSZ+KDE8PGkpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaWFkZD1mdW5jdGlvbih0KXt2YXIgZTtpZigwIT09dGhpcy5uZWdhdGl2ZSYmMD09PXQubmVnYXRpdmUpcmV0dXJuIHRoaXMubmVnYXRpdmU9MCxlPXRoaXMuaXN1Yih0KSx0aGlzLm5lZ2F0aXZlXj0xLHRoaXMuX25vcm1TaWduKCk7aWYoMD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlKXJldHVybiB0Lm5lZ2F0aXZlPTAsZT10aGlzLmlzdWIodCksdC5uZWdhdGl2ZT0xLGUuX25vcm1TaWduKCk7dmFyIHIsbjt0aGlzLmxlbmd0aD50Lmxlbmd0aD8ocj10aGlzLG49dCk6KHI9dCxuPXRoaXMpO2Zvcih2YXIgaT0wLG89MDtvPG4ubGVuZ3RoO28rKyllPSgwfHIud29yZHNbb10pKygwfG4ud29yZHNbb10pK2ksdGhpcy53b3Jkc1tvXT02NzEwODg2MyZlLGk9ZT4+PjI2O2Zvcig7MCE9PWkmJm88ci5sZW5ndGg7bysrKWU9KDB8ci53b3Jkc1tvXSkraSx0aGlzLndvcmRzW29dPTY3MTA4ODYzJmUsaT1lPj4+MjY7aWYodGhpcy5sZW5ndGg9ci5sZW5ndGgsMCE9PWkpdGhpcy53b3Jkc1t0aGlzLmxlbmd0aF09aSx0aGlzLmxlbmd0aCsrO2Vsc2UgaWYociE9PXRoaXMpZm9yKDtvPHIubGVuZ3RoO28rKyl0aGlzLndvcmRzW29dPXIud29yZHNbb107cmV0dXJuIHRoaXN9LG8ucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4gMCE9PXQubmVnYXRpdmUmJjA9PT10aGlzLm5lZ2F0aXZlPyh0Lm5lZ2F0aXZlPTAsZT10aGlzLnN1Yih0KSx0Lm5lZ2F0aXZlXj0xLGUpOjA9PT10Lm5lZ2F0aXZlJiYwIT09dGhpcy5uZWdhdGl2ZT8odGhpcy5uZWdhdGl2ZT0wLGU9dC5zdWIodGhpcyksdGhpcy5uZWdhdGl2ZT0xLGUpOnRoaXMubGVuZ3RoPnQubGVuZ3RoP3RoaXMuY2xvbmUoKS5pYWRkKHQpOnQuY2xvbmUoKS5pYWRkKHRoaXMpfSxvLnByb3RvdHlwZS5pc3ViPWZ1bmN0aW9uKHQpe2lmKDAhPT10Lm5lZ2F0aXZlKXt0Lm5lZ2F0aXZlPTA7dmFyIGU9dGhpcy5pYWRkKHQpO3JldHVybiB0Lm5lZ2F0aXZlPTEsZS5fbm9ybVNpZ24oKX1pZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZCh0KSx0aGlzLm5lZ2F0aXZlPTEsdGhpcy5fbm9ybVNpZ24oKTt2YXIgcj10aGlzLmNtcCh0KTtpZigwPT09cilyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMubGVuZ3RoPTEsdGhpcy53b3Jkc1swXT0wLHRoaXM7dmFyIG4saTtyPjA/KG49dGhpcyxpPXQpOihuPXQsaT10aGlzKTtmb3IodmFyIG89MCxhPTA7YTxpLmxlbmd0aDthKyspZT0oMHxuLndvcmRzW2FdKS0oMHxpLndvcmRzW2FdKStvLG89ZT4+MjYsdGhpcy53b3Jkc1thXT02NzEwODg2MyZlO2Zvcig7MCE9PW8mJmE8bi5sZW5ndGg7YSsrKWU9KDB8bi53b3Jkc1thXSkrbyxvPWU+PjI2LHRoaXMud29yZHNbYV09NjcxMDg4NjMmZTtpZigwPT09byYmYTxuLmxlbmd0aCYmbiE9PXRoaXMpZm9yKDthPG4ubGVuZ3RoO2ErKyl0aGlzLndvcmRzW2FdPW4ud29yZHNbYV07cmV0dXJuIHRoaXMubGVuZ3RoPU1hdGgubWF4KHRoaXMubGVuZ3RoLGEpLG4hPT10aGlzJiYodGhpcy5uZWdhdGl2ZT0xKSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLnN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWIodCl9O3ZhciBFPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpLG8sYT10LndvcmRzLGY9ZS53b3JkcyxzPXIud29yZHMsdT0wLGg9MHxhWzBdLGM9ODE5MSZoLGQ9aD4+PjEzLGw9MHxhWzFdLHA9ODE5MSZsLGI9bD4+PjEzLHY9MHxhWzJdLHk9ODE5MSZ2LG09dj4+PjEzLGc9MHxhWzNdLHc9ODE5MSZnLF89Zz4+PjEzLE09MHxhWzRdLFM9ODE5MSZNLEU9TT4+PjEzLEE9MHxhWzVdLGs9ODE5MSZBLHg9QT4+PjEzLEk9MHxhWzZdLEI9ODE5MSZJLE89ST4+PjEzLFI9MHxhWzddLFA9ODE5MSZSLFQ9Uj4+PjEzLGo9MHxhWzhdLEM9ODE5MSZqLE49aj4+PjEzLEw9MHxhWzldLFU9ODE5MSZMLHo9TD4+PjEzLEQ9MHxmWzBdLHE9ODE5MSZELEY9RD4+PjEzLEs9MHxmWzFdLEc9ODE5MSZLLFY9Sz4+PjEzLEg9MHxmWzJdLFg9ODE5MSZILFk9SD4+PjEzLFc9MHxmWzNdLFo9ODE5MSZXLEo9Vz4+PjEzLCQ9MHxmWzRdLFE9ODE5MSYkLHR0PSQ+Pj4xMyxldD0wfGZbNV0scnQ9ODE5MSZldCxudD1ldD4+PjEzLGl0PTB8Zls2XSxvdD04MTkxJml0LGF0PWl0Pj4+MTMsZnQ9MHxmWzddLHN0PTgxOTEmZnQsdXQ9ZnQ+Pj4xMyxodD0wfGZbOF0sY3Q9ODE5MSZodCxkdD1odD4+PjEzLGx0PTB8Zls5XSxwdD04MTkxJmx0LGJ0PWx0Pj4+MTM7ci5uZWdhdGl2ZT10Lm5lZ2F0aXZlXmUubmVnYXRpdmUsci5sZW5ndGg9MTksbj1NYXRoLmltdWwoYyxxKSxpPU1hdGguaW11bChjLEYpLGk9aStNYXRoLmltdWwoZCxxKXwwLG89TWF0aC5pbXVsKGQsRik7dmFyIHZ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh2dD4+PjI2KXwwLHZ0Jj02NzEwODg2MyxuPU1hdGguaW11bChwLHEpLGk9TWF0aC5pbXVsKHAsRiksaT1pK01hdGguaW11bChiLHEpfDAsbz1NYXRoLmltdWwoYixGKSxuPW4rTWF0aC5pbXVsKGMsRyl8MCxpPWkrTWF0aC5pbXVsKGMsVil8MCxpPWkrTWF0aC5pbXVsKGQsRyl8MCxvPW8rTWF0aC5pbXVsKGQsVil8MDt2YXIgeXQ9KHUrbnwwKSsoKDgxOTEmaSk8PDEzKXwwO3U9KG8rKGk+Pj4xMyl8MCkrKHl0Pj4+MjYpfDAseXQmPTY3MTA4ODYzLG49TWF0aC5pbXVsKHkscSksaT1NYXRoLmltdWwoeSxGKSxpPWkrTWF0aC5pbXVsKG0scSl8MCxvPU1hdGguaW11bChtLEYpLG49bitNYXRoLmltdWwocCxHKXwwLGk9aStNYXRoLmltdWwocCxWKXwwLGk9aStNYXRoLmltdWwoYixHKXwwLG89bytNYXRoLmltdWwoYixWKXwwLG49bitNYXRoLmltdWwoYyxYKXwwLGk9aStNYXRoLmltdWwoYyxZKXwwLGk9aStNYXRoLmltdWwoZCxYKXwwLG89bytNYXRoLmltdWwoZCxZKXwwO3ZhciBtdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsobXQ+Pj4yNil8MCxtdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwodyxxKSxpPU1hdGguaW11bCh3LEYpLGk9aStNYXRoLmltdWwoXyxxKXwwLG89TWF0aC5pbXVsKF8sRiksbj1uK01hdGguaW11bCh5LEcpfDAsaT1pK01hdGguaW11bCh5LFYpfDAsaT1pK01hdGguaW11bChtLEcpfDAsbz1vK01hdGguaW11bChtLFYpfDAsbj1uK01hdGguaW11bChwLFgpfDAsaT1pK01hdGguaW11bChwLFkpfDAsaT1pK01hdGguaW11bChiLFgpfDAsbz1vK01hdGguaW11bChiLFkpfDAsbj1uK01hdGguaW11bChjLFopfDAsaT1pK01hdGguaW11bChjLEopfDAsaT1pK01hdGguaW11bChkLFopfDAsbz1vK01hdGguaW11bChkLEopfDA7dmFyIGd0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhndD4+PjI2KXwwLGd0Jj02NzEwODg2MyxuPU1hdGguaW11bChTLHEpLGk9TWF0aC5pbXVsKFMsRiksaT1pK01hdGguaW11bChFLHEpfDAsbz1NYXRoLmltdWwoRSxGKSxuPW4rTWF0aC5pbXVsKHcsRyl8MCxpPWkrTWF0aC5pbXVsKHcsVil8MCxpPWkrTWF0aC5pbXVsKF8sRyl8MCxvPW8rTWF0aC5pbXVsKF8sVil8MCxuPW4rTWF0aC5pbXVsKHksWCl8MCxpPWkrTWF0aC5pbXVsKHksWSl8MCxpPWkrTWF0aC5pbXVsKG0sWCl8MCxvPW8rTWF0aC5pbXVsKG0sWSl8MCxuPW4rTWF0aC5pbXVsKHAsWil8MCxpPWkrTWF0aC5pbXVsKHAsSil8MCxpPWkrTWF0aC5pbXVsKGIsWil8MCxvPW8rTWF0aC5pbXVsKGIsSil8MCxuPW4rTWF0aC5pbXVsKGMsUSl8MCxpPWkrTWF0aC5pbXVsKGMsdHQpfDAsaT1pK01hdGguaW11bChkLFEpfDAsbz1vK01hdGguaW11bChkLHR0KXwwO3ZhciB3dD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsod3Q+Pj4yNil8MCx3dCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoayxxKSxpPU1hdGguaW11bChrLEYpLGk9aStNYXRoLmltdWwoeCxxKXwwLG89TWF0aC5pbXVsKHgsRiksbj1uK01hdGguaW11bChTLEcpfDAsaT1pK01hdGguaW11bChTLFYpfDAsaT1pK01hdGguaW11bChFLEcpfDAsbz1vK01hdGguaW11bChFLFYpfDAsbj1uK01hdGguaW11bCh3LFgpfDAsaT1pK01hdGguaW11bCh3LFkpfDAsaT1pK01hdGguaW11bChfLFgpfDAsbz1vK01hdGguaW11bChfLFkpfDAsbj1uK01hdGguaW11bCh5LFopfDAsaT1pK01hdGguaW11bCh5LEopfDAsaT1pK01hdGguaW11bChtLFopfDAsbz1vK01hdGguaW11bChtLEopfDAsbj1uK01hdGguaW11bChwLFEpfDAsaT1pK01hdGguaW11bChwLHR0KXwwLGk9aStNYXRoLmltdWwoYixRKXwwLG89bytNYXRoLmltdWwoYix0dCl8MCxuPW4rTWF0aC5pbXVsKGMscnQpfDAsaT1pK01hdGguaW11bChjLG50KXwwLGk9aStNYXRoLmltdWwoZCxydCl8MCxvPW8rTWF0aC5pbXVsKGQsbnQpfDA7dmFyIF90PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhfdD4+PjI2KXwwLF90Jj02NzEwODg2MyxuPU1hdGguaW11bChCLHEpLGk9TWF0aC5pbXVsKEIsRiksaT1pK01hdGguaW11bChPLHEpfDAsbz1NYXRoLmltdWwoTyxGKSxuPW4rTWF0aC5pbXVsKGssRyl8MCxpPWkrTWF0aC5pbXVsKGssVil8MCxpPWkrTWF0aC5pbXVsKHgsRyl8MCxvPW8rTWF0aC5pbXVsKHgsVil8MCxuPW4rTWF0aC5pbXVsKFMsWCl8MCxpPWkrTWF0aC5pbXVsKFMsWSl8MCxpPWkrTWF0aC5pbXVsKEUsWCl8MCxvPW8rTWF0aC5pbXVsKEUsWSl8MCxuPW4rTWF0aC5pbXVsKHcsWil8MCxpPWkrTWF0aC5pbXVsKHcsSil8MCxpPWkrTWF0aC5pbXVsKF8sWil8MCxvPW8rTWF0aC5pbXVsKF8sSil8MCxuPW4rTWF0aC5pbXVsKHksUSl8MCxpPWkrTWF0aC5pbXVsKHksdHQpfDAsaT1pK01hdGguaW11bChtLFEpfDAsbz1vK01hdGguaW11bChtLHR0KXwwLG49bitNYXRoLmltdWwocCxydCl8MCxpPWkrTWF0aC5pbXVsKHAsbnQpfDAsaT1pK01hdGguaW11bChiLHJ0KXwwLG89bytNYXRoLmltdWwoYixudCl8MCxuPW4rTWF0aC5pbXVsKGMsb3QpfDAsaT1pK01hdGguaW11bChjLGF0KXwwLGk9aStNYXRoLmltdWwoZCxvdCl8MCxvPW8rTWF0aC5pbXVsKGQsYXQpfDA7dmFyIE10PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhNdD4+PjI2KXwwLE10Jj02NzEwODg2MyxuPU1hdGguaW11bChQLHEpLGk9TWF0aC5pbXVsKFAsRiksaT1pK01hdGguaW11bChULHEpfDAsbz1NYXRoLmltdWwoVCxGKSxuPW4rTWF0aC5pbXVsKEIsRyl8MCxpPWkrTWF0aC5pbXVsKEIsVil8MCxpPWkrTWF0aC5pbXVsKE8sRyl8MCxvPW8rTWF0aC5pbXVsKE8sVil8MCxuPW4rTWF0aC5pbXVsKGssWCl8MCxpPWkrTWF0aC5pbXVsKGssWSl8MCxpPWkrTWF0aC5pbXVsKHgsWCl8MCxvPW8rTWF0aC5pbXVsKHgsWSl8MCxuPW4rTWF0aC5pbXVsKFMsWil8MCxpPWkrTWF0aC5pbXVsKFMsSil8MCxpPWkrTWF0aC5pbXVsKEUsWil8MCxvPW8rTWF0aC5pbXVsKEUsSil8MCxuPW4rTWF0aC5pbXVsKHcsUSl8MCxpPWkrTWF0aC5pbXVsKHcsdHQpfDAsaT1pK01hdGguaW11bChfLFEpfDAsbz1vK01hdGguaW11bChfLHR0KXwwLG49bitNYXRoLmltdWwoeSxydCl8MCxpPWkrTWF0aC5pbXVsKHksbnQpfDAsaT1pK01hdGguaW11bChtLHJ0KXwwLG89bytNYXRoLmltdWwobSxudCl8MCxuPW4rTWF0aC5pbXVsKHAsb3QpfDAsaT1pK01hdGguaW11bChwLGF0KXwwLGk9aStNYXRoLmltdWwoYixvdCl8MCxvPW8rTWF0aC5pbXVsKGIsYXQpfDAsbj1uK01hdGguaW11bChjLHN0KXwwLGk9aStNYXRoLmltdWwoYyx1dCl8MCxpPWkrTWF0aC5pbXVsKGQsc3QpfDAsbz1vK01hdGguaW11bChkLHV0KXwwO3ZhciBTdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoU3Q+Pj4yNil8MCxTdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoQyxxKSxpPU1hdGguaW11bChDLEYpLGk9aStNYXRoLmltdWwoTixxKXwwLG89TWF0aC5pbXVsKE4sRiksbj1uK01hdGguaW11bChQLEcpfDAsaT1pK01hdGguaW11bChQLFYpfDAsaT1pK01hdGguaW11bChULEcpfDAsbz1vK01hdGguaW11bChULFYpfDAsbj1uK01hdGguaW11bChCLFgpfDAsaT1pK01hdGguaW11bChCLFkpfDAsaT1pK01hdGguaW11bChPLFgpfDAsbz1vK01hdGguaW11bChPLFkpfDAsbj1uK01hdGguaW11bChrLFopfDAsaT1pK01hdGguaW11bChrLEopfDAsaT1pK01hdGguaW11bCh4LFopfDAsbz1vK01hdGguaW11bCh4LEopfDAsbj1uK01hdGguaW11bChTLFEpfDAsaT1pK01hdGguaW11bChTLHR0KXwwLGk9aStNYXRoLmltdWwoRSxRKXwwLG89bytNYXRoLmltdWwoRSx0dCl8MCxuPW4rTWF0aC5pbXVsKHcscnQpfDAsaT1pK01hdGguaW11bCh3LG50KXwwLGk9aStNYXRoLmltdWwoXyxydCl8MCxvPW8rTWF0aC5pbXVsKF8sbnQpfDAsbj1uK01hdGguaW11bCh5LG90KXwwLGk9aStNYXRoLmltdWwoeSxhdCl8MCxpPWkrTWF0aC5pbXVsKG0sb3QpfDAsbz1vK01hdGguaW11bChtLGF0KXwwLG49bitNYXRoLmltdWwocCxzdCl8MCxpPWkrTWF0aC5pbXVsKHAsdXQpfDAsaT1pK01hdGguaW11bChiLHN0KXwwLG89bytNYXRoLmltdWwoYix1dCl8MCxuPW4rTWF0aC5pbXVsKGMsY3QpfDAsaT1pK01hdGguaW11bChjLGR0KXwwLGk9aStNYXRoLmltdWwoZCxjdCl8MCxvPW8rTWF0aC5pbXVsKGQsZHQpfDA7dmFyIEV0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhFdD4+PjI2KXwwLEV0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHEpLGk9TWF0aC5pbXVsKFUsRiksaT1pK01hdGguaW11bCh6LHEpfDAsbz1NYXRoLmltdWwoeixGKSxuPW4rTWF0aC5pbXVsKEMsRyl8MCxpPWkrTWF0aC5pbXVsKEMsVil8MCxpPWkrTWF0aC5pbXVsKE4sRyl8MCxvPW8rTWF0aC5pbXVsKE4sVil8MCxuPW4rTWF0aC5pbXVsKFAsWCl8MCxpPWkrTWF0aC5pbXVsKFAsWSl8MCxpPWkrTWF0aC5pbXVsKFQsWCl8MCxvPW8rTWF0aC5pbXVsKFQsWSl8MCxuPW4rTWF0aC5pbXVsKEIsWil8MCxpPWkrTWF0aC5pbXVsKEIsSil8MCxpPWkrTWF0aC5pbXVsKE8sWil8MCxvPW8rTWF0aC5pbXVsKE8sSil8MCxuPW4rTWF0aC5pbXVsKGssUSl8MCxpPWkrTWF0aC5pbXVsKGssdHQpfDAsaT1pK01hdGguaW11bCh4LFEpfDAsbz1vK01hdGguaW11bCh4LHR0KXwwLG49bitNYXRoLmltdWwoUyxydCl8MCxpPWkrTWF0aC5pbXVsKFMsbnQpfDAsaT1pK01hdGguaW11bChFLHJ0KXwwLG89bytNYXRoLmltdWwoRSxudCl8MCxuPW4rTWF0aC5pbXVsKHcsb3QpfDAsaT1pK01hdGguaW11bCh3LGF0KXwwLGk9aStNYXRoLmltdWwoXyxvdCl8MCxvPW8rTWF0aC5pbXVsKF8sYXQpfDAsbj1uK01hdGguaW11bCh5LHN0KXwwLGk9aStNYXRoLmltdWwoeSx1dCl8MCxpPWkrTWF0aC5pbXVsKG0sc3QpfDAsbz1vK01hdGguaW11bChtLHV0KXwwLG49bitNYXRoLmltdWwocCxjdCl8MCxpPWkrTWF0aC5pbXVsKHAsZHQpfDAsaT1pK01hdGguaW11bChiLGN0KXwwLG89bytNYXRoLmltdWwoYixkdCl8MCxuPW4rTWF0aC5pbXVsKGMscHQpfDAsaT1pK01hdGguaW11bChjLGJ0KXwwLGk9aStNYXRoLmltdWwoZCxwdCl8MCxvPW8rTWF0aC5pbXVsKGQsYnQpfDA7dmFyIEF0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhBdD4+PjI2KXwwLEF0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLEcpLGk9TWF0aC5pbXVsKFUsViksaT1pK01hdGguaW11bCh6LEcpfDAsbz1NYXRoLmltdWwoeixWKSxuPW4rTWF0aC5pbXVsKEMsWCl8MCxpPWkrTWF0aC5pbXVsKEMsWSl8MCxpPWkrTWF0aC5pbXVsKE4sWCl8MCxvPW8rTWF0aC5pbXVsKE4sWSl8MCxuPW4rTWF0aC5pbXVsKFAsWil8MCxpPWkrTWF0aC5pbXVsKFAsSil8MCxpPWkrTWF0aC5pbXVsKFQsWil8MCxvPW8rTWF0aC5pbXVsKFQsSil8MCxuPW4rTWF0aC5pbXVsKEIsUSl8MCxpPWkrTWF0aC5pbXVsKEIsdHQpfDAsaT1pK01hdGguaW11bChPLFEpfDAsbz1vK01hdGguaW11bChPLHR0KXwwLG49bitNYXRoLmltdWwoayxydCl8MCxpPWkrTWF0aC5pbXVsKGssbnQpfDAsaT1pK01hdGguaW11bCh4LHJ0KXwwLG89bytNYXRoLmltdWwoeCxudCl8MCxuPW4rTWF0aC5pbXVsKFMsb3QpfDAsaT1pK01hdGguaW11bChTLGF0KXwwLGk9aStNYXRoLmltdWwoRSxvdCl8MCxvPW8rTWF0aC5pbXVsKEUsYXQpfDAsbj1uK01hdGguaW11bCh3LHN0KXwwLGk9aStNYXRoLmltdWwodyx1dCl8MCxpPWkrTWF0aC5pbXVsKF8sc3QpfDAsbz1vK01hdGguaW11bChfLHV0KXwwLG49bitNYXRoLmltdWwoeSxjdCl8MCxpPWkrTWF0aC5pbXVsKHksZHQpfDAsaT1pK01hdGguaW11bChtLGN0KXwwLG89bytNYXRoLmltdWwobSxkdCl8MCxuPW4rTWF0aC5pbXVsKHAscHQpfDAsaT1pK01hdGguaW11bChwLGJ0KXwwLGk9aStNYXRoLmltdWwoYixwdCl8MCxvPW8rTWF0aC5pbXVsKGIsYnQpfDA7dmFyIGt0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhrdD4+PjI2KXwwLGt0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFgpLGk9TWF0aC5pbXVsKFUsWSksaT1pK01hdGguaW11bCh6LFgpfDAsbz1NYXRoLmltdWwoeixZKSxuPW4rTWF0aC5pbXVsKEMsWil8MCxpPWkrTWF0aC5pbXVsKEMsSil8MCxpPWkrTWF0aC5pbXVsKE4sWil8MCxvPW8rTWF0aC5pbXVsKE4sSil8MCxuPW4rTWF0aC5pbXVsKFAsUSl8MCxpPWkrTWF0aC5pbXVsKFAsdHQpfDAsaT1pK01hdGguaW11bChULFEpfDAsbz1vK01hdGguaW11bChULHR0KXwwLG49bitNYXRoLmltdWwoQixydCl8MCxpPWkrTWF0aC5pbXVsKEIsbnQpfDAsaT1pK01hdGguaW11bChPLHJ0KXwwLG89bytNYXRoLmltdWwoTyxudCl8MCxuPW4rTWF0aC5pbXVsKGssb3QpfDAsaT1pK01hdGguaW11bChrLGF0KXwwLGk9aStNYXRoLmltdWwoeCxvdCl8MCxvPW8rTWF0aC5pbXVsKHgsYXQpfDAsbj1uK01hdGguaW11bChTLHN0KXwwLGk9aStNYXRoLmltdWwoUyx1dCl8MCxpPWkrTWF0aC5pbXVsKEUsc3QpfDAsbz1vK01hdGguaW11bChFLHV0KXwwLG49bitNYXRoLmltdWwodyxjdCl8MCxpPWkrTWF0aC5pbXVsKHcsZHQpfDAsaT1pK01hdGguaW11bChfLGN0KXwwLG89bytNYXRoLmltdWwoXyxkdCl8MCxuPW4rTWF0aC5pbXVsKHkscHQpfDAsaT1pK01hdGguaW11bCh5LGJ0KXwwLGk9aStNYXRoLmltdWwobSxwdCl8MCxvPW8rTWF0aC5pbXVsKG0sYnQpfDA7dmFyIHh0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyh4dD4+PjI2KXwwLHh0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFopLGk9TWF0aC5pbXVsKFUsSiksaT1pK01hdGguaW11bCh6LFopfDAsbz1NYXRoLmltdWwoeixKKSxuPW4rTWF0aC5pbXVsKEMsUSl8MCxpPWkrTWF0aC5pbXVsKEMsdHQpfDAsaT1pK01hdGguaW11bChOLFEpfDAsbz1vK01hdGguaW11bChOLHR0KXwwLG49bitNYXRoLmltdWwoUCxydCl8MCxpPWkrTWF0aC5pbXVsKFAsbnQpfDAsaT1pK01hdGguaW11bChULHJ0KXwwLG89bytNYXRoLmltdWwoVCxudCl8MCxuPW4rTWF0aC5pbXVsKEIsb3QpfDAsaT1pK01hdGguaW11bChCLGF0KXwwLGk9aStNYXRoLmltdWwoTyxvdCl8MCxvPW8rTWF0aC5pbXVsKE8sYXQpfDAsbj1uK01hdGguaW11bChrLHN0KXwwLGk9aStNYXRoLmltdWwoayx1dCl8MCxpPWkrTWF0aC5pbXVsKHgsc3QpfDAsbz1vK01hdGguaW11bCh4LHV0KXwwLG49bitNYXRoLmltdWwoUyxjdCl8MCxpPWkrTWF0aC5pbXVsKFMsZHQpfDAsaT1pK01hdGguaW11bChFLGN0KXwwLG89bytNYXRoLmltdWwoRSxkdCl8MCxuPW4rTWF0aC5pbXVsKHcscHQpfDAsaT1pK01hdGguaW11bCh3LGJ0KXwwLGk9aStNYXRoLmltdWwoXyxwdCl8MCxvPW8rTWF0aC5pbXVsKF8sYnQpfDA7dmFyIEl0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhJdD4+PjI2KXwwLEl0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLFEpLGk9TWF0aC5pbXVsKFUsdHQpLGk9aStNYXRoLmltdWwoeixRKXwwLG89TWF0aC5pbXVsKHosdHQpLG49bitNYXRoLmltdWwoQyxydCl8MCxpPWkrTWF0aC5pbXVsKEMsbnQpfDAsaT1pK01hdGguaW11bChOLHJ0KXwwLG89bytNYXRoLmltdWwoTixudCl8MCxuPW4rTWF0aC5pbXVsKFAsb3QpfDAsaT1pK01hdGguaW11bChQLGF0KXwwLGk9aStNYXRoLmltdWwoVCxvdCl8MCxvPW8rTWF0aC5pbXVsKFQsYXQpfDAsbj1uK01hdGguaW11bChCLHN0KXwwLGk9aStNYXRoLmltdWwoQix1dCl8MCxpPWkrTWF0aC5pbXVsKE8sc3QpfDAsbz1vK01hdGguaW11bChPLHV0KXwwLG49bitNYXRoLmltdWwoayxjdCl8MCxpPWkrTWF0aC5pbXVsKGssZHQpfDAsaT1pK01hdGguaW11bCh4LGN0KXwwLG89bytNYXRoLmltdWwoeCxkdCl8MCxuPW4rTWF0aC5pbXVsKFMscHQpfDAsaT1pK01hdGguaW11bChTLGJ0KXwwLGk9aStNYXRoLmltdWwoRSxwdCl8MCxvPW8rTWF0aC5pbXVsKEUsYnQpfDA7dmFyIEJ0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhCdD4+PjI2KXwwLEJ0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLHJ0KSxpPU1hdGguaW11bChVLG50KSxpPWkrTWF0aC5pbXVsKHoscnQpfDAsbz1NYXRoLmltdWwoeixudCksbj1uK01hdGguaW11bChDLG90KXwwLGk9aStNYXRoLmltdWwoQyxhdCl8MCxpPWkrTWF0aC5pbXVsKE4sb3QpfDAsbz1vK01hdGguaW11bChOLGF0KXwwLG49bitNYXRoLmltdWwoUCxzdCl8MCxpPWkrTWF0aC5pbXVsKFAsdXQpfDAsaT1pK01hdGguaW11bChULHN0KXwwLG89bytNYXRoLmltdWwoVCx1dCl8MCxuPW4rTWF0aC5pbXVsKEIsY3QpfDAsaT1pK01hdGguaW11bChCLGR0KXwwLGk9aStNYXRoLmltdWwoTyxjdCl8MCxvPW8rTWF0aC5pbXVsKE8sZHQpfDAsbj1uK01hdGguaW11bChrLHB0KXwwLGk9aStNYXRoLmltdWwoayxidCl8MCxpPWkrTWF0aC5pbXVsKHgscHQpfDAsbz1vK01hdGguaW11bCh4LGJ0KXwwO3ZhciBPdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoT3Q+Pj4yNil8MCxPdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxvdCksaT1NYXRoLmltdWwoVSxhdCksaT1pK01hdGguaW11bCh6LG90KXwwLG89TWF0aC5pbXVsKHosYXQpLG49bitNYXRoLmltdWwoQyxzdCl8MCxpPWkrTWF0aC5pbXVsKEMsdXQpfDAsaT1pK01hdGguaW11bChOLHN0KXwwLG89bytNYXRoLmltdWwoTix1dCl8MCxuPW4rTWF0aC5pbXVsKFAsY3QpfDAsaT1pK01hdGguaW11bChQLGR0KXwwLGk9aStNYXRoLmltdWwoVCxjdCl8MCxvPW8rTWF0aC5pbXVsKFQsZHQpfDAsbj1uK01hdGguaW11bChCLHB0KXwwLGk9aStNYXRoLmltdWwoQixidCl8MCxpPWkrTWF0aC5pbXVsKE8scHQpfDAsbz1vK01hdGguaW11bChPLGJ0KXwwO3ZhciBSdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoUnQ+Pj4yNil8MCxSdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxzdCksaT1NYXRoLmltdWwoVSx1dCksaT1pK01hdGguaW11bCh6LHN0KXwwLG89TWF0aC5pbXVsKHosdXQpLG49bitNYXRoLmltdWwoQyxjdCl8MCxpPWkrTWF0aC5pbXVsKEMsZHQpfDAsaT1pK01hdGguaW11bChOLGN0KXwwLG89bytNYXRoLmltdWwoTixkdCl8MCxuPW4rTWF0aC5pbXVsKFAscHQpfDAsaT1pK01hdGguaW11bChQLGJ0KXwwLGk9aStNYXRoLmltdWwoVCxwdCl8MCxvPW8rTWF0aC5pbXVsKFQsYnQpfDA7dmFyIFB0PSh1K258MCkrKCg4MTkxJmkpPDwxMyl8MDt1PShvKyhpPj4+MTMpfDApKyhQdD4+PjI2KXwwLFB0Jj02NzEwODg2MyxuPU1hdGguaW11bChVLGN0KSxpPU1hdGguaW11bChVLGR0KSxpPWkrTWF0aC5pbXVsKHosY3QpfDAsbz1NYXRoLmltdWwoeixkdCksbj1uK01hdGguaW11bChDLHB0KXwwLGk9aStNYXRoLmltdWwoQyxidCl8MCxpPWkrTWF0aC5pbXVsKE4scHQpfDAsbz1vK01hdGguaW11bChOLGJ0KXwwO3ZhciBUdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7dT0obysoaT4+PjEzKXwwKSsoVHQ+Pj4yNil8MCxUdCY9NjcxMDg4NjMsbj1NYXRoLmltdWwoVSxwdCksaT1NYXRoLmltdWwoVSxidCksaT1pK01hdGguaW11bCh6LHB0KXwwLG89TWF0aC5pbXVsKHosYnQpO3ZhciBqdD0odStufDApKygoODE5MSZpKTw8MTMpfDA7cmV0dXJuIHU9KG8rKGk+Pj4xMyl8MCkrKGp0Pj4+MjYpfDAsanQmPTY3MTA4ODYzLHNbMF09dnQsc1sxXT15dCxzWzJdPW10LHNbM109Z3Qsc1s0XT13dCxzWzVdPV90LHNbNl09TXQsc1s3XT1TdCxzWzhdPUV0LHNbOV09QXQsc1sxMF09a3Qsc1sxMV09eHQsc1sxMl09SXQsc1sxM109QnQsc1sxNF09T3Qsc1sxNV09UnQsc1sxNl09UHQsc1sxN109VHQsc1sxOF09anQsMCE9PXUmJihzWzE5XT11LHIubGVuZ3RoKyspLHJ9O01hdGguaW11bHx8KEU9dSksby5wcm90b3R5cGUubXVsVG89ZnVuY3Rpb24odCxlKXt2YXIgcixuPXRoaXMubGVuZ3RoK3QubGVuZ3RoO3JldHVybiByPTEwPT09dGhpcy5sZW5ndGgmJjEwPT09dC5sZW5ndGg/RSh0aGlzLHQsZSk6bjw2Mz91KHRoaXMsdCxlKTpuPDEwMjQ/aCh0aGlzLHQsZSk6Yyh0aGlzLHQsZSl9LGQucHJvdG90eXBlLm1ha2VSQlQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBBcnJheSh0KSxyPW8ucHJvdG90eXBlLl9jb3VudEJpdHModCktMSxuPTA7bjx0O24rKyllW25dPXRoaXMucmV2QmluKG4scix0KTtyZXR1cm4gZX0sZC5wcm90b3R5cGUucmV2QmluPWZ1bmN0aW9uKHQsZSxyKXtpZigwPT09dHx8dD09PXItMSlyZXR1cm4gdDtmb3IodmFyIG49MCxpPTA7aTxlO2krKylufD0oMSZ0KTw8ZS1pLTEsdD4+PTE7cmV0dXJuIG59LGQucHJvdG90eXBlLnBlcm11dGU9ZnVuY3Rpb24odCxlLHIsbixpLG8pe2Zvcih2YXIgYT0wO2E8bzthKyspblthXT1lW3RbYV1dLGlbYV09clt0W2FdXX0sZC5wcm90b3R5cGUudHJhbnNmb3JtPWZ1bmN0aW9uKHQsZSxyLG4saSxvKXt0aGlzLnBlcm11dGUobyx0LGUscixuLGkpO2Zvcih2YXIgYT0xO2E8aTthPDw9MSlmb3IodmFyIGY9YTw8MSxzPU1hdGguY29zKDIqTWF0aC5QSS9mKSx1PU1hdGguc2luKDIqTWF0aC5QSS9mKSxoPTA7aDxpO2grPWYpZm9yKHZhciBjPXMsZD11LGw9MDtsPGE7bCsrKXt2YXIgcD1yW2grbF0sYj1uW2grbF0sdj1yW2grbCthXSx5PW5baCtsK2FdLG09Yyp2LWQqeTt5PWMqeStkKnYsdj1tLHJbaCtsXT1wK3YsbltoK2xdPWIreSxyW2grbCthXT1wLXYsbltoK2wrYV09Yi15LFxubCE9PWYmJihtPXMqYy11KmQsZD1zKmQrdSpjLGM9bSl9fSxkLnByb3RvdHlwZS5ndWVzc0xlbjEzYj1mdW5jdGlvbih0LGUpe3ZhciByPTF8TWF0aC5tYXgoZSx0KSxuPTEmcixpPTA7Zm9yKHI9ci8yfDA7cjtyPj4+PTEpaSsrO3JldHVybiAxPDxpKzErbn0sZC5wcm90b3R5cGUuY29uanVnYXRlPWZ1bmN0aW9uKHQsZSxyKXtpZighKHI8PTEpKWZvcih2YXIgbj0wO248ci8yO24rKyl7dmFyIGk9dFtuXTt0W25dPXRbci1uLTFdLHRbci1uLTFdPWksaT1lW25dLGVbbl09LWVbci1uLTFdLGVbci1uLTFdPS1pfX0sZC5wcm90b3R5cGUubm9ybWFsaXplMTNiPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTAsbj0wO248ZS8yO24rKyl7dmFyIGk9ODE5MipNYXRoLnJvdW5kKHRbMipuKzFdL2UpK01hdGgucm91bmQodFsyKm5dL2UpK3I7dFtuXT02NzEwODg2MyZpLHI9aTw2NzEwODg2ND8wOmkvNjcxMDg4NjR8MH1yZXR1cm4gdH0sZC5wcm90b3R5cGUuY29udmVydDEzYj1mdW5jdGlvbih0LGUscixpKXtmb3IodmFyIG89MCxhPTA7YTxlO2ErKylvKz0wfHRbYV0sclsyKmFdPTgxOTEmbyxvPj4+PTEzLHJbMiphKzFdPTgxOTEmbyxvPj4+PTEzO2ZvcihhPTIqZTthPGk7KythKXJbYV09MDtuKDA9PT1vKSxuKDA9PT0obyYtODE5MikpfSxkLnByb3RvdHlwZS5zdHViPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgQXJyYXkodCkscj0wO3I8dDtyKyspZVtyXT0wO3JldHVybiBlfSxkLnByb3RvdHlwZS5tdWxwPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj0yKnRoaXMuZ3Vlc3NMZW4xM2IodC5sZW5ndGgsZS5sZW5ndGgpLGk9dGhpcy5tYWtlUkJUKG4pLG89dGhpcy5zdHViKG4pLGE9bmV3IEFycmF5KG4pLGY9bmV3IEFycmF5KG4pLHM9bmV3IEFycmF5KG4pLHU9bmV3IEFycmF5KG4pLGg9bmV3IEFycmF5KG4pLGM9bmV3IEFycmF5KG4pLGQ9ci53b3JkcztkLmxlbmd0aD1uLHRoaXMuY29udmVydDEzYih0LndvcmRzLHQubGVuZ3RoLGEsbiksdGhpcy5jb252ZXJ0MTNiKGUud29yZHMsZS5sZW5ndGgsdSxuKSx0aGlzLnRyYW5zZm9ybShhLG8sZixzLG4saSksdGhpcy50cmFuc2Zvcm0odSxvLGgsYyxuLGkpO2Zvcih2YXIgbD0wO2w8bjtsKyspe3ZhciBwPWZbbF0qaFtsXS1zW2xdKmNbbF07c1tsXT1mW2xdKmNbbF0rc1tsXSpoW2xdLGZbbF09cH1yZXR1cm4gdGhpcy5jb25qdWdhdGUoZixzLG4pLHRoaXMudHJhbnNmb3JtKGYscyxkLG8sbixpKSx0aGlzLmNvbmp1Z2F0ZShkLG8sbiksdGhpcy5ub3JtYWxpemUxM2IoZCxuKSxyLm5lZ2F0aXZlPXQubmVnYXRpdmVeZS5uZWdhdGl2ZSxyLmxlbmd0aD10Lmxlbmd0aCtlLmxlbmd0aCxyLnN0cmlwKCl9LG8ucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLHRoaXMubXVsVG8odCxlKX0sby5wcm90b3R5cGUubXVsZj1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbyhudWxsKTtyZXR1cm4gZS53b3Jkcz1uZXcgQXJyYXkodGhpcy5sZW5ndGgrdC5sZW5ndGgpLGModGhpcyx0LGUpfSxvLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkubXVsVG8odCx0aGlzKX0sby5wcm90b3R5cGUuaW11bG49ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCksbih0PDY3MTA4ODY0KTtmb3IodmFyIGU9MCxyPTA7cjx0aGlzLmxlbmd0aDtyKyspe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKnQsbz0oNjcxMDg4NjMmaSkrKDY3MTA4ODYzJmUpO2U+Pj0yNixlKz1pLzY3MTA4ODY0fDAsZSs9bz4+PjI2LHRoaXMud29yZHNbcl09NjcxMDg4NjMmb31yZXR1cm4gMCE9PWUmJih0aGlzLndvcmRzW3JdPWUsdGhpcy5sZW5ndGgrKyksdGhpc30sby5wcm90b3R5cGUubXVsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmltdWxuKHQpfSxvLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tdWwodGhpcyl9LG8ucHJvdG90eXBlLmlzcXI9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbXVsKHRoaXMuY2xvbmUoKSl9LG8ucHJvdG90eXBlLnBvdz1mdW5jdGlvbih0KXt2YXIgZT1zKHQpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbmV3IG8oMSk7Zm9yKHZhciByPXRoaXMsbj0wO248ZS5sZW5ndGgmJjA9PT1lW25dO24rKyxyPXIuc3FyKCkpO2lmKCsrbjxlLmxlbmd0aClmb3IodmFyIGk9ci5zcXIoKTtuPGUubGVuZ3RoO24rKyxpPWkuc3FyKCkpMCE9PWVbbl0mJihyPXIubXVsKGkpKTtyZXR1cm4gcn0sby5wcm90b3R5cGUuaXVzaGxuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlLHI9dCUyNixpPSh0LXIpLzI2LG89NjcxMDg4NjM+Pj4yNi1yPDwyNi1yO2lmKDAhPT1yKXt2YXIgYT0wO2ZvcihlPTA7ZTx0aGlzLmxlbmd0aDtlKyspe3ZhciBmPXRoaXMud29yZHNbZV0mbyxzPSgwfHRoaXMud29yZHNbZV0pLWY8PHI7dGhpcy53b3Jkc1tlXT1zfGEsYT1mPj4+MjYtcn1hJiYodGhpcy53b3Jkc1tlXT1hLHRoaXMubGVuZ3RoKyspfWlmKDAhPT1pKXtmb3IoZT10aGlzLmxlbmd0aC0xO2U+PTA7ZS0tKXRoaXMud29yZHNbZStpXT10aGlzLndvcmRzW2VdO2ZvcihlPTA7ZTxpO2UrKyl0aGlzLndvcmRzW2VdPTA7dGhpcy5sZW5ndGgrPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIG4oMD09PXRoaXMubmVnYXRpdmUpLHRoaXMuaXVzaGxuKHQpfSxvLnByb3RvdHlwZS5pdXNocm49ZnVuY3Rpb24odCxlLHIpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBpO2k9ZT8oZS1lJTI2KS8yNjowO3ZhciBvPXQlMjYsYT1NYXRoLm1pbigodC1vKS8yNix0aGlzLmxlbmd0aCksZj02NzEwODg2M142NzEwODg2Mz4+Pm88PG8scz1yO2lmKGktPWEsaT1NYXRoLm1heCgwLGkpLHMpe2Zvcih2YXIgdT0wO3U8YTt1Kyspcy53b3Jkc1t1XT10aGlzLndvcmRzW3VdO3MubGVuZ3RoPWF9aWYoMD09PWEpO2Vsc2UgaWYodGhpcy5sZW5ndGg+YSlmb3IodGhpcy5sZW5ndGgtPWEsdT0wO3U8dGhpcy5sZW5ndGg7dSsrKXRoaXMud29yZHNbdV09dGhpcy53b3Jkc1t1K2FdO2Vsc2UgdGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTE7dmFyIGg9MDtmb3IodT10aGlzLmxlbmd0aC0xO3U+PTAmJigwIT09aHx8dT49aSk7dS0tKXt2YXIgYz0wfHRoaXMud29yZHNbdV07dGhpcy53b3Jkc1t1XT1oPDwyNi1vfGM+Pj5vLGg9YyZmfXJldHVybiBzJiYwIT09aCYmKHMud29yZHNbcy5sZW5ndGgrK109aCksMD09PXRoaXMubGVuZ3RoJiYodGhpcy53b3Jkc1swXT0wLHRoaXMubGVuZ3RoPTEpLHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUuaXNocm49ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuKDA9PT10aGlzLm5lZ2F0aXZlKSx0aGlzLml1c2hybih0LGUscil9LG8ucHJvdG90eXBlLnNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hsbih0KX0sby5wcm90b3R5cGUudXNobG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNobG4odCl9LG8ucHJvdG90eXBlLnNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pc2hybih0KX0sby5wcm90b3R5cGUudXNocm49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pdXNocm4odCl9LG8ucHJvdG90eXBlLnRlc3RuPWZ1bmN0aW9uKHQpe24oXCJudW1iZXJcIj09dHlwZW9mIHQmJnQ+PTApO3ZhciBlPXQlMjYscj0odC1lKS8yNixpPTE8PGU7aWYodGhpcy5sZW5ndGg8PXIpcmV0dXJuITE7dmFyIG89dGhpcy53b3Jkc1tyXTtyZXR1cm4hIShvJmkpfSxvLnByb3RvdHlwZS5pbWFza249ZnVuY3Rpb24odCl7bihcIm51bWJlclwiPT10eXBlb2YgdCYmdD49MCk7dmFyIGU9dCUyNixyPSh0LWUpLzI2O2lmKG4oMD09PXRoaXMubmVnYXRpdmUsXCJpbWFza24gd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlIG51bWJlcnNcIiksdGhpcy5sZW5ndGg8PXIpcmV0dXJuIHRoaXM7aWYoMCE9PWUmJnIrKyx0aGlzLmxlbmd0aD1NYXRoLm1pbihyLHRoaXMubGVuZ3RoKSwwIT09ZSl7dmFyIGk9NjcxMDg4NjNeNjcxMDg4NjM+Pj5lPDxlO3RoaXMud29yZHNbdGhpcy5sZW5ndGgtMV0mPWl9cmV0dXJuIHRoaXMuc3RyaXAoKX0sby5wcm90b3R5cGUubWFza249ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pbWFza24odCl9LG8ucHJvdG90eXBlLmlhZGRuPWZ1bmN0aW9uKHQpe3JldHVybiBuKFwibnVtYmVyXCI9PXR5cGVvZiB0KSxuKHQ8NjcxMDg4NjQpLHQ8MD90aGlzLmlzdWJuKC10KTowIT09dGhpcy5uZWdhdGl2ZT8xPT09dGhpcy5sZW5ndGgmJigwfHRoaXMud29yZHNbMF0pPHQ/KHRoaXMud29yZHNbMF09dC0oMHx0aGlzLndvcmRzWzBdKSx0aGlzLm5lZ2F0aXZlPTAsdGhpcyk6KHRoaXMubmVnYXRpdmU9MCx0aGlzLmlzdWJuKHQpLHRoaXMubmVnYXRpdmU9MSx0aGlzKTp0aGlzLl9pYWRkbih0KX0sby5wcm90b3R5cGUuX2lhZGRuPWZ1bmN0aW9uKHQpe3RoaXMud29yZHNbMF0rPXQ7Zm9yKHZhciBlPTA7ZTx0aGlzLmxlbmd0aCYmdGhpcy53b3Jkc1tlXT49NjcxMDg4NjQ7ZSsrKXRoaXMud29yZHNbZV0tPTY3MTA4ODY0LGU9PT10aGlzLmxlbmd0aC0xP3RoaXMud29yZHNbZSsxXT0xOnRoaXMud29yZHNbZSsxXSsrO3JldHVybiB0aGlzLmxlbmd0aD1NYXRoLm1heCh0aGlzLmxlbmd0aCxlKzEpLHRoaXN9LG8ucHJvdG90eXBlLmlzdWJuPWZ1bmN0aW9uKHQpe2lmKG4oXCJudW1iZXJcIj09dHlwZW9mIHQpLG4odDw2NzEwODg2NCksdDwwKXJldHVybiB0aGlzLmlhZGRuKC10KTtpZigwIT09dGhpcy5uZWdhdGl2ZSlyZXR1cm4gdGhpcy5uZWdhdGl2ZT0wLHRoaXMuaWFkZG4odCksdGhpcy5uZWdhdGl2ZT0xLHRoaXM7aWYodGhpcy53b3Jkc1swXS09dCwxPT09dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbMF08MCl0aGlzLndvcmRzWzBdPS10aGlzLndvcmRzWzBdLHRoaXMubmVnYXRpdmU9MTtlbHNlIGZvcih2YXIgZT0wO2U8dGhpcy5sZW5ndGgmJnRoaXMud29yZHNbZV08MDtlKyspdGhpcy53b3Jkc1tlXSs9NjcxMDg4NjQsdGhpcy53b3Jkc1tlKzFdLT0xO3JldHVybiB0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLmFkZG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY2xvbmUoKS5pYWRkbih0KX0sby5wcm90b3R5cGUuc3Vibj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlzdWJuKHQpfSxvLnByb3RvdHlwZS5pYWJzPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubmVnYXRpdmU9MCx0aGlzfSxvLnByb3RvdHlwZS5hYnM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jbG9uZSgpLmlhYnMoKX0sby5wcm90b3R5cGUuX2lzaGxuc3VibXVsPWZ1bmN0aW9uKHQsZSxyKXt2YXIgaSxvPXQubGVuZ3RoK3I7dGhpcy5fZXhwYW5kKG8pO3ZhciBhLGY9MDtmb3IoaT0wO2k8dC5sZW5ndGg7aSsrKXthPSgwfHRoaXMud29yZHNbaStyXSkrZjt2YXIgcz0oMHx0LndvcmRzW2ldKSplO2EtPTY3MTA4ODYzJnMsZj0oYT4+MjYpLShzLzY3MTA4ODY0fDApLHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhfWZvcig7aTx0aGlzLmxlbmd0aC1yO2krKylhPSgwfHRoaXMud29yZHNbaStyXSkrZixmPWE+PjI2LHRoaXMud29yZHNbaStyXT02NzEwODg2MyZhO2lmKDA9PT1mKXJldHVybiB0aGlzLnN0cmlwKCk7Zm9yKG4oZj09PS0xKSxmPTAsaT0wO2k8dGhpcy5sZW5ndGg7aSsrKWE9LSgwfHRoaXMud29yZHNbaV0pK2YsZj1hPj4yNix0aGlzLndvcmRzW2ldPTY3MTA4ODYzJmE7cmV0dXJuIHRoaXMubmVnYXRpdmU9MSx0aGlzLnN0cmlwKCl9LG8ucHJvdG90eXBlLl93b3JkRGl2PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5sZW5ndGgtdC5sZW5ndGgsbj10aGlzLmNsb25lKCksaT10LGE9MHxpLndvcmRzW2kubGVuZ3RoLTFdLGY9dGhpcy5fY291bnRCaXRzKGEpO3I9MjYtZiwwIT09ciYmKGk9aS51c2hsbihyKSxuLml1c2hsbihyKSxhPTB8aS53b3Jkc1tpLmxlbmd0aC0xXSk7dmFyIHMsdT1uLmxlbmd0aC1pLmxlbmd0aDtpZihcIm1vZFwiIT09ZSl7cz1uZXcgbyhudWxsKSxzLmxlbmd0aD11KzEscy53b3Jkcz1uZXcgQXJyYXkocy5sZW5ndGgpO2Zvcih2YXIgaD0wO2g8cy5sZW5ndGg7aCsrKXMud29yZHNbaF09MH12YXIgYz1uLmNsb25lKCkuX2lzaGxuc3VibXVsKGksMSx1KTswPT09Yy5uZWdhdGl2ZSYmKG49YyxzJiYocy53b3Jkc1t1XT0xKSk7Zm9yKHZhciBkPXUtMTtkPj0wO2QtLSl7dmFyIGw9NjcxMDg4NjQqKDB8bi53b3Jkc1tpLmxlbmd0aCtkXSkrKDB8bi53b3Jkc1tpLmxlbmd0aCtkLTFdKTtmb3IobD1NYXRoLm1pbihsL2F8MCw2NzEwODg2Myksbi5faXNobG5zdWJtdWwoaSxsLGQpOzAhPT1uLm5lZ2F0aXZlOylsLS0sbi5uZWdhdGl2ZT0wLG4uX2lzaGxuc3VibXVsKGksMSxkKSxuLmlzWmVybygpfHwobi5uZWdhdGl2ZV49MSk7cyYmKHMud29yZHNbZF09bCl9cmV0dXJuIHMmJnMuc3RyaXAoKSxuLnN0cmlwKCksXCJkaXZcIiE9PWUmJjAhPT1yJiZuLml1c2hybihyKSx7ZGl2OnN8fG51bGwsbW9kOm59fSxvLnByb3RvdHlwZS5kaXZtb2Q9ZnVuY3Rpb24odCxlLHIpe2lmKG4oIXQuaXNaZXJvKCkpLHRoaXMuaXNaZXJvKCkpcmV0dXJue2RpdjpuZXcgbygwKSxtb2Q6bmV3IG8oMCl9O3ZhciBpLGEsZjtyZXR1cm4gMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQsZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSxcImRpdlwiIT09ZSYmKGE9Zi5tb2QubmVnKCksciYmMCE9PWEubmVnYXRpdmUmJmEuaWFkZCh0KSkse2RpdjppLG1vZDphfSk6MD09PXRoaXMubmVnYXRpdmUmJjAhPT10Lm5lZ2F0aXZlPyhmPXRoaXMuZGl2bW9kKHQubmVnKCksZSksXCJtb2RcIiE9PWUmJihpPWYuZGl2Lm5lZygpKSx7ZGl2OmksbW9kOmYubW9kfSk6MCE9PSh0aGlzLm5lZ2F0aXZlJnQubmVnYXRpdmUpPyhmPXRoaXMubmVnKCkuZGl2bW9kKHQubmVnKCksZSksXCJkaXZcIiE9PWUmJihhPWYubW9kLm5lZygpLHImJjAhPT1hLm5lZ2F0aXZlJiZhLmlzdWIodCkpLHtkaXY6Zi5kaXYsbW9kOmF9KTp0Lmxlbmd0aD50aGlzLmxlbmd0aHx8dGhpcy5jbXAodCk8MD97ZGl2Om5ldyBvKDApLG1vZDp0aGlzfToxPT09dC5sZW5ndGg/XCJkaXZcIj09PWU/e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm51bGx9OlwibW9kXCI9PT1lP3tkaXY6bnVsbCxtb2Q6bmV3IG8odGhpcy5tb2RuKHQud29yZHNbMF0pKX06e2Rpdjp0aGlzLmRpdm4odC53b3Jkc1swXSksbW9kOm5ldyBvKHRoaXMubW9kbih0LndvcmRzWzBdKSl9OnRoaXMuX3dvcmREaXYodCxlKX0sby5wcm90b3R5cGUuZGl2PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwiZGl2XCIsITEpLmRpdn0sby5wcm90b3R5cGUubW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmRpdm1vZCh0LFwibW9kXCIsITEpLm1vZH0sby5wcm90b3R5cGUudW1vZD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5kaXZtb2QodCxcIm1vZFwiLCEwKS5tb2R9LG8ucHJvdG90eXBlLmRpdlJvdW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuZGl2bW9kKHQpO2lmKGUubW9kLmlzWmVybygpKXJldHVybiBlLmRpdjt2YXIgcj0wIT09ZS5kaXYubmVnYXRpdmU/ZS5tb2QuaXN1Yih0KTplLm1vZCxuPXQudXNocm4oMSksaT10LmFuZGxuKDEpLG89ci5jbXAobik7cmV0dXJuIG88MHx8MT09PWkmJjA9PT1vP2UuZGl2OjAhPT1lLmRpdi5uZWdhdGl2ZT9lLmRpdi5pc3VibigxKTplLmRpdi5pYWRkbigxKX0sby5wcm90b3R5cGUubW9kbj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9KDE8PDI2KSV0LHI9MCxpPXRoaXMubGVuZ3RoLTE7aT49MDtpLS0pcj0oZSpyKygwfHRoaXMud29yZHNbaV0pKSV0O3JldHVybiByfSxvLnByb3RvdHlwZS5pZGl2bj1mdW5jdGlvbih0KXtuKHQ8PTY3MTA4ODYzKTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBpPSgwfHRoaXMud29yZHNbcl0pKzY3MTA4ODY0KmU7dGhpcy53b3Jkc1tyXT1pL3R8MCxlPWkldH1yZXR1cm4gdGhpcy5zdHJpcCgpfSxvLnByb3RvdHlwZS5kaXZuPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmNsb25lKCkuaWRpdm4odCl9LG8ucHJvdG90eXBlLmVnY2Q9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1uZXcgbygwKSxzPW5ldyBvKDEpLHU9MDtlLmlzRXZlbigpJiZyLmlzRXZlbigpOyllLml1c2hybigxKSxyLml1c2hybigxKSwrK3U7Zm9yKHZhciBoPXIuY2xvbmUoKSxjPWUuY2xvbmUoKTshZS5pc1plcm8oKTspe2Zvcih2YXIgZD0wLGw9MTswPT09KGUud29yZHNbMF0mbCkmJmQ8MjY7KytkLGw8PD0xKTtpZihkPjApZm9yKGUuaXVzaHJuKGQpO2QtLSA+MDspKGkuaXNPZGQoKXx8YS5pc09kZCgpKSYmKGkuaWFkZChoKSxhLmlzdWIoYykpLGkuaXVzaHJuKDEpLGEuaXVzaHJuKDEpO2Zvcih2YXIgcD0wLGI9MTswPT09KHIud29yZHNbMF0mYikmJnA8MjY7KytwLGI8PD0xKTtpZihwPjApZm9yKHIuaXVzaHJuKHApO3AtLSA+MDspKGYuaXNPZGQoKXx8cy5pc09kZCgpKSYmKGYuaWFkZChoKSxzLmlzdWIoYykpLGYuaXVzaHJuKDEpLHMuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGYpLGEuaXN1YihzKSk6KHIuaXN1YihlKSxmLmlzdWIoaSkscy5pc3ViKGEpKX1yZXR1cm57YTpmLGI6cyxnY2Q6ci5pdXNobG4odSl9fSxvLnByb3RvdHlwZS5faW52bXA9ZnVuY3Rpb24odCl7bigwPT09dC5uZWdhdGl2ZSksbighdC5pc1plcm8oKSk7dmFyIGU9dGhpcyxyPXQuY2xvbmUoKTtlPTAhPT1lLm5lZ2F0aXZlP2UudW1vZCh0KTplLmNsb25lKCk7Zm9yKHZhciBpPW5ldyBvKDEpLGE9bmV3IG8oMCksZj1yLmNsb25lKCk7ZS5jbXBuKDEpPjAmJnIuY21wbigxKT4wOyl7Zm9yKHZhciBzPTAsdT0xOzA9PT0oZS53b3Jkc1swXSZ1KSYmczwyNjsrK3MsdTw8PTEpO2lmKHM+MClmb3IoZS5pdXNocm4ocyk7cy0tID4wOylpLmlzT2RkKCkmJmkuaWFkZChmKSxpLml1c2hybigxKTtmb3IodmFyIGg9MCxjPTE7MD09PShyLndvcmRzWzBdJmMpJiZoPDI2OysraCxjPDw9MSk7aWYoaD4wKWZvcihyLml1c2hybihoKTtoLS0gPjA7KWEuaXNPZGQoKSYmYS5pYWRkKGYpLGEuaXVzaHJuKDEpO2UuY21wKHIpPj0wPyhlLmlzdWIociksaS5pc3ViKGEpKTooci5pc3ViKGUpLGEuaXN1YihpKSl9dmFyIGQ7cmV0dXJuIGQ9MD09PWUuY21wbigxKT9pOmEsZC5jbXBuKDApPDAmJmQuaWFkZCh0KSxkfSxvLnByb3RvdHlwZS5nY2Q9ZnVuY3Rpb24odCl7aWYodGhpcy5pc1plcm8oKSlyZXR1cm4gdC5hYnMoKTtpZih0LmlzWmVybygpKXJldHVybiB0aGlzLmFicygpO3ZhciBlPXRoaXMuY2xvbmUoKSxyPXQuY2xvbmUoKTtlLm5lZ2F0aXZlPTAsci5uZWdhdGl2ZT0wO2Zvcih2YXIgbj0wO2UuaXNFdmVuKCkmJnIuaXNFdmVuKCk7bisrKWUuaXVzaHJuKDEpLHIuaXVzaHJuKDEpO2Zvcig7Oyl7Zm9yKDtlLmlzRXZlbigpOyllLml1c2hybigxKTtmb3IoO3IuaXNFdmVuKCk7KXIuaXVzaHJuKDEpO3ZhciBpPWUuY21wKHIpO2lmKGk8MCl7dmFyIG89ZTtlPXIscj1vfWVsc2UgaWYoMD09PWl8fDA9PT1yLmNtcG4oMSkpYnJlYWs7ZS5pc3ViKHIpfXJldHVybiByLml1c2hsbihuKX0sby5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5lZ2NkKHQpLmEudW1vZCh0KX0sby5wcm90b3R5cGUuaXNFdmVuPWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT0oMSZ0aGlzLndvcmRzWzBdKX0sby5wcm90b3R5cGUuaXNPZGQ9ZnVuY3Rpb24oKXtyZXR1cm4gMT09PSgxJnRoaXMud29yZHNbMF0pfSxvLnByb3RvdHlwZS5hbmRsbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy53b3Jkc1swXSZ0fSxvLnByb3RvdHlwZS5iaW5jbj1mdW5jdGlvbih0KXtuKFwibnVtYmVyXCI9PXR5cGVvZiB0KTt2YXIgZT10JTI2LHI9KHQtZSkvMjYsaT0xPDxlO2lmKHRoaXMubGVuZ3RoPD1yKXJldHVybiB0aGlzLl9leHBhbmQocisxKSx0aGlzLndvcmRzW3JdfD1pLHRoaXM7Zm9yKHZhciBvPWksYT1yOzAhPT1vJiZhPHRoaXMubGVuZ3RoO2ErKyl7dmFyIGY9MHx0aGlzLndvcmRzW2FdO2YrPW8sbz1mPj4+MjYsZiY9NjcxMDg4NjMsdGhpcy53b3Jkc1thXT1mfXJldHVybiAwIT09byYmKHRoaXMud29yZHNbYV09byx0aGlzLmxlbmd0aCsrKSx0aGlzfSxvLnByb3RvdHlwZS5pc1plcm89ZnVuY3Rpb24oKXtyZXR1cm4gMT09PXRoaXMubGVuZ3RoJiYwPT09dGhpcy53b3Jkc1swXX0sby5wcm90b3R5cGUuY21wbj1mdW5jdGlvbih0KXt2YXIgZT10PDA7aWYoMCE9PXRoaXMubmVnYXRpdmUmJiFlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiZlKXJldHVybiAxO3RoaXMuc3RyaXAoKTt2YXIgcjtpZih0aGlzLmxlbmd0aD4xKXI9MTtlbHNle2UmJih0PS10KSxuKHQ8PTY3MTA4ODYzLFwiTnVtYmVyIGlzIHRvbyBiaWdcIik7dmFyIGk9MHx0aGlzLndvcmRzWzBdO3I9aT09PXQ/MDppPHQ/LTE6MX1yZXR1cm4gMCE9PXRoaXMubmVnYXRpdmU/MHwtcjpyfSxvLnByb3RvdHlwZS5jbXA9ZnVuY3Rpb24odCl7aWYoMCE9PXRoaXMubmVnYXRpdmUmJjA9PT10Lm5lZ2F0aXZlKXJldHVybi0xO2lmKDA9PT10aGlzLm5lZ2F0aXZlJiYwIT09dC5uZWdhdGl2ZSlyZXR1cm4gMTt2YXIgZT10aGlzLnVjbXAodCk7cmV0dXJuIDAhPT10aGlzLm5lZ2F0aXZlPzB8LWU6ZX0sby5wcm90b3R5cGUudWNtcD1mdW5jdGlvbih0KXtpZih0aGlzLmxlbmd0aD50Lmxlbmd0aClyZXR1cm4gMTtpZih0aGlzLmxlbmd0aDx0Lmxlbmd0aClyZXR1cm4tMTtmb3IodmFyIGU9MCxyPXRoaXMubGVuZ3RoLTE7cj49MDtyLS0pe3ZhciBuPTB8dGhpcy53b3Jkc1tyXSxpPTB8dC53b3Jkc1tyXTtpZihuIT09aSl7bjxpP2U9LTE6bj5pJiYoZT0xKTticmVha319cmV0dXJuIGV9LG8ucHJvdG90eXBlLmd0bj1mdW5jdGlvbih0KXtyZXR1cm4gMT09PXRoaXMuY21wbih0KX0sby5wcm90b3R5cGUuZ3Q9ZnVuY3Rpb24odCl7cmV0dXJuIDE9PT10aGlzLmNtcCh0KX0sby5wcm90b3R5cGUuZ3Rlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPj0wfSxvLnByb3RvdHlwZS5ndGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPj0wfSxvLnByb3RvdHlwZS5sdG49ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wbih0KT09PS0xfSxvLnByb3RvdHlwZS5sdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXAodCk9PT0tMX0sby5wcm90b3R5cGUubHRlbj1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5jbXBuKHQpPD0wfSxvLnByb3RvdHlwZS5sdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuY21wKHQpPD0wfSxvLnByb3RvdHlwZS5lcW49ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmNtcG4odCl9LG8ucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiAwPT09dGhpcy5jbXAodCl9LG8ucmVkPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbSh0KX0sby5wcm90b3R5cGUudG9SZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSxuKDA9PT10aGlzLm5lZ2F0aXZlLFwicmVkIHdvcmtzIG9ubHkgd2l0aCBwb3NpdGl2ZXNcIiksdC5jb252ZXJ0VG8odGhpcykuX2ZvcmNlUmVkKHQpfSxvLnByb3RvdHlwZS5mcm9tUmVkPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJmcm9tUmVkIHdvcmtzIG9ubHkgd2l0aCBudW1iZXJzIGluIHJlZHVjdGlvbiBjb250ZXh0XCIpLHRoaXMucmVkLmNvbnZlcnRGcm9tKHRoaXMpfSxvLnByb3RvdHlwZS5fZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMucmVkPXQsdGhpc30sby5wcm90b3R5cGUuZm9yY2VSZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIG4oIXRoaXMucmVkLFwiQWxyZWFkeSBhIG51bWJlciBpbiByZWR1Y3Rpb24gY29udGV4dFwiKSx0aGlzLl9mb3JjZVJlZCh0KX0sby5wcm90b3R5cGUucmVkQWRkPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkQWRkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5hZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSUFkZD1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElBZGQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlhZGQodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3ViPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3ViIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkSVN1Yj1mdW5jdGlvbih0KXtyZXR1cm4gbih0aGlzLnJlZCxcInJlZElTdWIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLmlzdWIodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU2hsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU2hsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5zaGwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLm11bCh0aGlzLHQpfSxvLnByb3RvdHlwZS5yZWRJTXVsPWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkLFwicmVkTXVsIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKSx0aGlzLnJlZC5fdmVyaWZ5Mih0aGlzLHQpLHRoaXMucmVkLmltdWwodGhpcyx0KX0sby5wcm90b3R5cGUucmVkU3FyPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWRTcXIgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLnNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkSVNxcj1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSVNxciB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaXNxcih0aGlzKX0sby5wcm90b3R5cGUucmVkU3FydD1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkU3FydCB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuc3FydCh0aGlzKX0sby5wcm90b3R5cGUucmVkSW52bT1mdW5jdGlvbigpe3JldHVybiBuKHRoaXMucmVkLFwicmVkSW52bSB3b3JrcyBvbmx5IHdpdGggcmVkIG51bWJlcnNcIiksdGhpcy5yZWQuX3ZlcmlmeTEodGhpcyksdGhpcy5yZWQuaW52bSh0aGlzKX0sby5wcm90b3R5cGUucmVkTmVnPWZ1bmN0aW9uKCl7cmV0dXJuIG4odGhpcy5yZWQsXCJyZWROZWcgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpLHRoaXMucmVkLl92ZXJpZnkxKHRoaXMpLHRoaXMucmVkLm5lZyh0aGlzKX0sby5wcm90b3R5cGUucmVkUG93PWZ1bmN0aW9uKHQpe3JldHVybiBuKHRoaXMucmVkJiYhdC5yZWQsXCJyZWRQb3cobm9ybWFsTnVtKVwiKSx0aGlzLnJlZC5fdmVyaWZ5MSh0aGlzKSx0aGlzLnJlZC5wb3codGhpcyx0KX07dmFyIEE9e2syNTY6bnVsbCxwMjI0Om51bGwscDE5MjpudWxsLHAyNTUxOTpudWxsfTtsLnByb3RvdHlwZS5fdG1wPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG8obnVsbCk7cmV0dXJuIHQud29yZHM9bmV3IEFycmF5KE1hdGguY2VpbCh0aGlzLm4vMTMpKSx0fSxsLnByb3RvdHlwZS5pcmVkdWNlPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dDtkbyB0aGlzLnNwbGl0KHIsdGhpcy50bXApLHI9dGhpcy5pbXVsSyhyKSxyPXIuaWFkZCh0aGlzLnRtcCksZT1yLmJpdExlbmd0aCgpO3doaWxlKGU+dGhpcy5uKTt2YXIgbj1lPHRoaXMubj8tMTpyLnVjbXAodGhpcy5wKTtyZXR1cm4gMD09PW4/KHIud29yZHNbMF09MCxyLmxlbmd0aD0xKTpuPjA/ci5pc3ViKHRoaXMucCk6ci5zdHJpcCgpLHJ9LGwucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7dC5pdXNocm4odGhpcy5uLDAsZSl9LGwucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe3JldHVybiB0LmltdWwodGhpcy5rKX0saShwLGwpLHAucHJvdG90eXBlLnNwbGl0PWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPTQxOTQzMDMsbj1NYXRoLm1pbih0Lmxlbmd0aCw5KSxpPTA7aTxuO2krKyllLndvcmRzW2ldPXQud29yZHNbaV07aWYoZS5sZW5ndGg9bix0Lmxlbmd0aDw9OSlyZXR1cm4gdC53b3Jkc1swXT0wLHZvaWQodC5sZW5ndGg9MSk7dmFyIG89dC53b3Jkc1s5XTtmb3IoZS53b3Jkc1tlLmxlbmd0aCsrXT1vJnIsaT0xMDtpPHQubGVuZ3RoO2krKyl7dmFyIGE9MHx0LndvcmRzW2ldO3Qud29yZHNbaS0xMF09KGEmcik8PDR8bz4+PjIyLG89YX1vPj4+PTIyLHQud29yZHNbaS0xMF09bywwPT09byYmdC5sZW5ndGg+MTA/dC5sZW5ndGgtPTEwOnQubGVuZ3RoLT05fSxwLnByb3RvdHlwZS5pbXVsSz1mdW5jdGlvbih0KXt0LndvcmRzW3QubGVuZ3RoXT0wLHQud29yZHNbdC5sZW5ndGgrMV09MCx0Lmxlbmd0aCs9Mjtmb3IodmFyIGU9MCxyPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPTB8dC53b3Jkc1tyXTtlKz05Nzcqbix0LndvcmRzW3JdPTY3MTA4ODYzJmUsZT02NCpuKyhlLzY3MTA4ODY0fDApfXJldHVybiAwPT09dC53b3Jkc1t0Lmxlbmd0aC0xXSYmKHQubGVuZ3RoLS0sMD09PXQud29yZHNbdC5sZW5ndGgtMV0mJnQubGVuZ3RoLS0pLHR9LGkoYixsKSxpKHYsbCksaSh5LGwpLHkucHJvdG90eXBlLmltdWxLPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49MTkqKDB8dC53b3Jkc1tyXSkrZSxpPTY3MTA4ODYzJm47bj4+Pj0yNix0LndvcmRzW3JdPWksZT1ufXJldHVybiAwIT09ZSYmKHQud29yZHNbdC5sZW5ndGgrK109ZSksdH0sby5fcHJpbWU9ZnVuY3Rpb24gdChlKXtpZihBW2VdKXJldHVybiBBW2VdO3ZhciB0O2lmKFwiazI1NlwiPT09ZSl0PW5ldyBwO2Vsc2UgaWYoXCJwMjI0XCI9PT1lKXQ9bmV3IGI7ZWxzZSBpZihcInAxOTJcIj09PWUpdD1uZXcgdjtlbHNle2lmKFwicDI1NTE5XCIhPT1lKXRocm93IG5ldyBFcnJvcihcIlVua25vd24gcHJpbWUgXCIrZSk7dD1uZXcgeX1yZXR1cm4gQVtlXT10LHR9LG0ucHJvdG90eXBlLl92ZXJpZnkxPWZ1bmN0aW9uKHQpe24oMD09PXQubmVnYXRpdmUsXCJyZWQgd29ya3Mgb25seSB3aXRoIHBvc2l0aXZlc1wiKSxuKHQucmVkLFwicmVkIHdvcmtzIG9ubHkgd2l0aCByZWQgbnVtYmVyc1wiKX0sbS5wcm90b3R5cGUuX3ZlcmlmeTI9ZnVuY3Rpb24odCxlKXtuKDA9PT0odC5uZWdhdGl2ZXxlLm5lZ2F0aXZlKSxcInJlZCB3b3JrcyBvbmx5IHdpdGggcG9zaXRpdmVzXCIpLG4odC5yZWQmJnQucmVkPT09ZS5yZWQsXCJyZWQgd29ya3Mgb25seSB3aXRoIHJlZCBudW1iZXJzXCIpfSxtLnByb3RvdHlwZS5pbW9kPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnByaW1lP3RoaXMucHJpbWUuaXJlZHVjZSh0KS5fZm9yY2VSZWQodGhpcyk6dC51bW9kKHRoaXMubSkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24odCl7cmV0dXJuIHQuaXNaZXJvKCk/dC5jbG9uZSgpOnRoaXMubS5zdWIodCkuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5hZGQoZSk7cmV0dXJuIHIuY21wKHRoaXMubSk+PTAmJnIuaXN1Yih0aGlzLm0pLHIuX2ZvcmNlUmVkKHRoaXMpfSxtLnByb3RvdHlwZS5pYWRkPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuaWFkZChlKTtyZXR1cm4gci5jbXAodGhpcy5tKT49MCYmci5pc3ViKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc3ViPWZ1bmN0aW9uKHQsZSl7dGhpcy5fdmVyaWZ5Mih0LGUpO3ZhciByPXQuc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSksci5fZm9yY2VSZWQodGhpcyl9LG0ucHJvdG90eXBlLmlzdWI9ZnVuY3Rpb24odCxlKXt0aGlzLl92ZXJpZnkyKHQsZSk7dmFyIHI9dC5pc3ViKGUpO3JldHVybiByLmNtcG4oMCk8MCYmci5pYWRkKHRoaXMubSkscn0sbS5wcm90b3R5cGUuc2hsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTEodCksdGhpcy5pbW9kKHQudXNobG4oZSkpfSxtLnByb3RvdHlwZS5pbXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5pbXVsKGUpKX0sbS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3ZlcmlmeTIodCxlKSx0aGlzLmltb2QodC5tdWwoZSkpfSxtLnByb3RvdHlwZS5pc3FyPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmltdWwodCx0LmNsb25lKCkpfSxtLnByb3RvdHlwZS5zcXI9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubXVsKHQsdCl9LG0ucHJvdG90eXBlLnNxcnQ9ZnVuY3Rpb24odCl7aWYodC5pc1plcm8oKSlyZXR1cm4gdC5jbG9uZSgpO3ZhciBlPXRoaXMubS5hbmRsbigzKTtpZihuKGUlMj09PTEpLDM9PT1lKXt2YXIgcj10aGlzLm0uYWRkKG5ldyBvKDEpKS5pdXNocm4oMik7cmV0dXJuIHRoaXMucG93KHQscil9Zm9yKHZhciBpPXRoaXMubS5zdWJuKDEpLGE9MDshaS5pc1plcm8oKSYmMD09PWkuYW5kbG4oMSk7KWErKyxpLml1c2hybigxKTtuKCFpLmlzWmVybygpKTt2YXIgZj1uZXcgbygxKS50b1JlZCh0aGlzKSxzPWYucmVkTmVnKCksdT10aGlzLm0uc3VibigxKS5pdXNocm4oMSksaD10aGlzLm0uYml0TGVuZ3RoKCk7Zm9yKGg9bmV3IG8oMipoKmgpLnRvUmVkKHRoaXMpOzAhPT10aGlzLnBvdyhoLHUpLmNtcChzKTspaC5yZWRJQWRkKHMpO2Zvcih2YXIgYz10aGlzLnBvdyhoLGkpLGQ9dGhpcy5wb3codCxpLmFkZG4oMSkuaXVzaHJuKDEpKSxsPXRoaXMucG93KHQsaSkscD1hOzAhPT1sLmNtcChmKTspe2Zvcih2YXIgYj1sLHY9MDswIT09Yi5jbXAoZik7disrKWI9Yi5yZWRTcXIoKTtuKHY8cCk7dmFyIHk9dGhpcy5wb3coYyxuZXcgbygxKS5pdXNobG4ocC12LTEpKTtkPWQucmVkTXVsKHkpLGM9eS5yZWRTcXIoKSxsPWwucmVkTXVsKGMpLHA9dn1yZXR1cm4gZH0sbS5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10Ll9pbnZtcCh0aGlzLm0pO3JldHVybiAwIT09ZS5uZWdhdGl2ZT8oZS5uZWdhdGl2ZT0wLHRoaXMuaW1vZChlKS5yZWROZWcoKSk6dGhpcy5pbW9kKGUpfSxtLnByb3RvdHlwZS5wb3c9ZnVuY3Rpb24odCxlKXtpZihlLmlzWmVybygpKXJldHVybiBuZXcgbygxKTtpZigwPT09ZS5jbXBuKDEpKXJldHVybiB0LmNsb25lKCk7dmFyIHI9NCxuPW5ldyBBcnJheSgxPDxyKTtuWzBdPW5ldyBvKDEpLnRvUmVkKHRoaXMpLG5bMV09dDtmb3IodmFyIGk9MjtpPG4ubGVuZ3RoO2krKyluW2ldPXRoaXMubXVsKG5baS0xXSx0KTt2YXIgYT1uWzBdLGY9MCxzPTAsdT1lLmJpdExlbmd0aCgpJTI2O2ZvcigwPT09dSYmKHU9MjYpLGk9ZS5sZW5ndGgtMTtpPj0wO2ktLSl7Zm9yKHZhciBoPWUud29yZHNbaV0sYz11LTE7Yz49MDtjLS0pe3ZhciBkPWg+PmMmMTthIT09blswXSYmKGE9dGhpcy5zcXIoYSkpLDAhPT1kfHwwIT09Zj8oZjw8PTEsZnw9ZCxzKyssKHM9PT1yfHwwPT09aSYmMD09PWMpJiYoYT10aGlzLm11bChhLG5bZl0pLHM9MCxmPTApKTpzPTB9dT0yNn1yZXR1cm4gYX0sbS5wcm90b3R5cGUuY29udmVydFRvPWZ1bmN0aW9uKHQpe3ZhciBlPXQudW1vZCh0aGlzLm0pO3JldHVybiBlPT09dD9lLmNsb25lKCk6ZX0sbS5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dC5jbG9uZSgpO3JldHVybiBlLnJlZD1udWxsLGV9LG8ubW9udD1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGcodCl9LGkoZyxtKSxnLnByb3RvdHlwZS5jb252ZXJ0VG89ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaW1vZCh0LnVzaGxuKHRoaXMuc2hpZnQpKX0sZy5wcm90b3R5cGUuY29udmVydEZyb209ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5pbW9kKHQubXVsKHRoaXMucmludikpO3JldHVybiBlLnJlZD1udWxsLGV9LGcucHJvdG90eXBlLmltdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiB0LndvcmRzWzBdPTAsdC5sZW5ndGg9MSx0O3ZhciByPXQuaW11bChlKSxuPXIubWFza24odGhpcy5zaGlmdCkubXVsKHRoaXMubWludikuaW1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm0pLGk9ci5pc3ViKG4pLml1c2hybih0aGlzLnNoaWZ0KSxvPWk7cmV0dXJuIGkuY21wKHRoaXMubSk+PTA/bz1pLmlzdWIodGhpcy5tKTppLmNtcG4oMCk8MCYmKG89aS5pYWRkKHRoaXMubSkpLG8uX2ZvcmNlUmVkKHRoaXMpfSxnLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtpZih0LmlzWmVybygpfHxlLmlzWmVybygpKXJldHVybiBuZXcgbygwKS5fZm9yY2VSZWQodGhpcyk7dmFyIHI9dC5tdWwoZSksbj1yLm1hc2tuKHRoaXMuc2hpZnQpLm11bCh0aGlzLm1pbnYpLmltYXNrbih0aGlzLnNoaWZ0KS5tdWwodGhpcy5tKSxpPXIuaXN1YihuKS5pdXNocm4odGhpcy5zaGlmdCksYT1pO3JldHVybiBpLmNtcCh0aGlzLm0pPj0wP2E9aS5pc3ViKHRoaXMubSk6aS5jbXBuKDApPDAmJihhPWkuaWFkZCh0aGlzLm0pKSxhLl9mb3JjZVJlZCh0aGlzKX0sZy5wcm90b3R5cGUuaW52bT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmltb2QodC5faW52bXAodGhpcy5tKS5tdWwodGhpcy5yMikpO3JldHVybiBlLl9mb3JjZVJlZCh0aGlzKX19KFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fHx0LHRoaXMpfSkuY2FsbChlLHIoOTIpKHQpKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0LG4pe3ZhciBpPXIoMTQ5KSxvPXIoNTc2KTtlLnBia2RmMj1mdW5jdGlvbih0LHIsbixpLGEsZil7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgYSYmKGY9YSxhPXZvaWQgMCksbyhuLGkpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGYpdGhyb3cgbmV3IEVycm9yKFwiTm8gY2FsbGJhY2sgcHJvdmlkZWQgdG8gcGJrZGYyXCIpO3NldFRpbWVvdXQoZnVuY3Rpb24oKXtmKG51bGwsZS5wYmtkZjJTeW5jKHQscixuLGksYSkpfSl9O3ZhciBhO2lmKHQuYnJvd3NlcilhPVwidXRmLThcIjtlbHNle3ZhciBmPXBhcnNlSW50KHQudmVyc2lvbi5zcGxpdChcIi5cIilbMF0uc2xpY2UoMSksMTApO2E9Zj49Nj9cInV0Zi04XCI6XCJiaW5hcnlcIn1lLnBia2RmMlN5bmM9ZnVuY3Rpb24odCxlLHIsZixzKXtuLmlzQnVmZmVyKHQpfHwodD1uZXcgbih0LGEpKSxuLmlzQnVmZmVyKGUpfHwoZT1uZXcgbihlLGEpKSxvKHIsZikscz1zfHxcInNoYTFcIjt2YXIgdSxoPTEsYz1uZXcgbihmKSxkPW5ldyBuKGUubGVuZ3RoKzQpO2UuY29weShkLDAsMCxlLmxlbmd0aCk7Zm9yKHZhciBsLHAsYj0xO2I8PWg7YisrKXtkLndyaXRlVUludDMyQkUoYixlLmxlbmd0aCk7dmFyIHY9aShzLHQpLnVwZGF0ZShkKS5kaWdlc3QoKTt1fHwodT12Lmxlbmd0aCxwPW5ldyBuKHUpLGg9TWF0aC5jZWlsKGYvdSksbD1mLShoLTEpKnUpLHYuY29weShwLDAsMCx1KTtmb3IodmFyIHk9MTt5PHI7eSsrKXt2PWkocyx0KS51cGRhdGUodikuZGlnZXN0KCk7Zm9yKHZhciBtPTA7bTx1O20rKylwW21dXj12W21dfXZhciBnPShiLTEpKnUsdz1iPT09aD9sOnU7cC5jb3B5KGMsZywwLHcpfXJldHVybiBjfX0pLmNhbGwoZSxyKDI2KSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZVtcImFlcy0xMjgtZWNiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjAsbW9kZTpcIkVDQlwiLHR5cGU6XCJibG9ja1wifSxlW1wiYWVzLTE5Mi1lY2JcIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MCxtb2RlOlwiRUNCXCIsdHlwZTpcImJsb2NrXCJ9LGVbXCJhZXMtMjU2LWVjYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjowLG1vZGU6XCJFQ0JcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xMjgtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0xOTItY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTkyLGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZVtcImFlcy0yNTYtY2JjXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MjU2LGl2OjE2LG1vZGU6XCJDQkNcIix0eXBlOlwiYmxvY2tcIn0sZS5hZXMxMjg9ZVtcImFlcy0xMjgtY2JjXCJdLGUuYWVzMTkyPWVbXCJhZXMtMTkyLWNiY1wiXSxlLmFlczI1Nj1lW1wiYWVzLTI1Ni1jYmNcIl0sZVtcImFlcy0xMjgtY2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWNmYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNGQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiOFwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCOFwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjEyOCxpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xOTItY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0yNTYtY2ZiMVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxNixtb2RlOlwiQ0ZCMVwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtb2ZiXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJPRkJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLW9mYlwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiT0ZCXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1vZmJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIk9GQlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtY3RyXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjE2LG1vZGU6XCJDVFJcIix0eXBlOlwic3RyZWFtXCJ9LGVbXCJhZXMtMTkyLWN0clwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjE5MixpdjoxNixtb2RlOlwiQ1RSXCIsdHlwZTpcInN0cmVhbVwifSxlW1wiYWVzLTI1Ni1jdHJcIl09e2NpcGhlcjpcIkFFU1wiLGtleToyNTYsaXY6MTYsbW9kZTpcIkNUUlwiLHR5cGU6XCJzdHJlYW1cIn0sZVtcImFlcy0xMjgtZ2NtXCJdPXtjaXBoZXI6XCJBRVNcIixrZXk6MTI4LGl2OjEyLG1vZGU6XCJHQ01cIix0eXBlOlwiYXV0aFwifSxlW1wiYWVzLTE5Mi1nY21cIl09e2NpcGhlcjpcIkFFU1wiLGtleToxOTIsaXY6MTIsbW9kZTpcIkdDTVwiLHR5cGU6XCJhdXRoXCJ9LGVbXCJhZXMtMjU2LWdjbVwiXT17Y2lwaGVyOlwiQUVTXCIsa2V5OjI1NixpdjoxMixtb2RlOlwiR0NNXCIsdHlwZTpcImF1dGhcIn19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsbixvKXtlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LFwiYmluYXJ5XCIpKSxyJiYhZS5pc0J1ZmZlcihyKSYmKHI9bmV3IGUocixcImJpbmFyeVwiKSksbi89OCxvPW98fDA7Zm9yKHZhciBhLGYscz0wLHU9MCxoPW5ldyBlKG4pLGM9bmV3IGUobyksZD0wLGw9W107Oyl7aWYoZCsrPjAmJmwucHVzaChhKSxsLnB1c2godCksciYmbC5wdXNoKHIpLGE9aShlLmNvbmNhdChsKSksbD1bXSxmPTAsbj4wKWZvcig7Oyl7aWYoMD09PW4pYnJlYWs7aWYoZj09PWEubGVuZ3RoKWJyZWFrO2hbcysrXT1hW2ZdLG4tLSxmKyt9aWYobz4wJiZmIT09YS5sZW5ndGgpZm9yKDs7KXtpZigwPT09bylicmVhaztpZihmPT09YS5sZW5ndGgpYnJlYWs7Y1t1KytdPWFbZl0sby0tLGYrK31pZigwPT09biYmMD09PW8pYnJlYWt9Zm9yKGY9MDtmPGEubGVuZ3RoO2YrKylhW2ZdPTA7cmV0dXJue2tleTpoLGl2OmN9fXZhciBpPXIoMTA1KTt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMuYWZ0ZXJUcmFuc2Zvcm09ZnVuY3Rpb24oZSxyKXtyZXR1cm4gaSh0LGUscil9LHRoaXMubmVlZFRyYW5zZm9ybT0hMSx0aGlzLnRyYW5zZm9ybWluZz0hMSx0aGlzLndyaXRlY2I9bnVsbCx0aGlzLndyaXRlY2h1bms9bnVsbCx0aGlzLndyaXRlZW5jb2Rpbmc9bnVsbH1mdW5jdGlvbiBpKHQsZSxyKXt2YXIgbj10Ll90cmFuc2Zvcm1TdGF0ZTtuLnRyYW5zZm9ybWluZz0hMTt2YXIgaT1uLndyaXRlY2I7aWYoIWkpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsbmV3IEVycm9yKFwibm8gd3JpdGVjYiBpbiBUcmFuc2Zvcm0gY2xhc3NcIikpO24ud3JpdGVjaHVuaz1udWxsLG4ud3JpdGVjYj1udWxsLG51bGwhPT1yJiZ2b2lkIDAhPT1yJiZ0LnB1c2gociksaShlKTt2YXIgbz10Ll9yZWFkYWJsZVN0YXRlO28ucmVhZGluZz0hMSwoby5uZWVkUmVhZGFibGV8fG8ubGVuZ3RoPG8uaGlnaFdhdGVyTWFyaykmJnQuX3JlYWQoby5oaWdoV2F0ZXJNYXJrKX1mdW5jdGlvbiBvKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIG8pKXJldHVybiBuZXcgbyh0KTtmLmNhbGwodGhpcyx0KSx0aGlzLl90cmFuc2Zvcm1TdGF0ZT1uZXcgbih0aGlzKTt2YXIgZT10aGlzO3RoaXMuX3JlYWRhYmxlU3RhdGUubmVlZFJlYWRhYmxlPSEwLHRoaXMuX3JlYWRhYmxlU3RhdGUuc3luYz0hMSx0JiYoXCJmdW5jdGlvblwiPT10eXBlb2YgdC50cmFuc2Zvcm0mJih0aGlzLl90cmFuc2Zvcm09dC50cmFuc2Zvcm0pLFwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmx1c2gmJih0aGlzLl9mbHVzaD10LmZsdXNoKSksdGhpcy5vbmNlKFwicHJlZmluaXNoXCIsZnVuY3Rpb24oKXtcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzLl9mbHVzaD90aGlzLl9mbHVzaChmdW5jdGlvbih0KXthKGUsdCl9KTphKGUpfSl9ZnVuY3Rpb24gYSh0LGUpe2lmKGUpcmV0dXJuIHQuZW1pdChcImVycm9yXCIsZSk7dmFyIHI9dC5fd3JpdGFibGVTdGF0ZSxuPXQuX3RyYW5zZm9ybVN0YXRlO2lmKHIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkNhbGxpbmcgdHJhbnNmb3JtIGRvbmUgd2hlbiB3cy5sZW5ndGggIT0gMFwiKTtpZihuLnRyYW5zZm9ybWluZyl0aHJvdyBuZXcgRXJyb3IoXCJDYWxsaW5nIHRyYW5zZm9ybSBkb25lIHdoZW4gc3RpbGwgdHJhbnNmb3JtaW5nXCIpO3JldHVybiB0LnB1c2gobnVsbCl9dC5leHBvcnRzPW87dmFyIGY9cig1MSkscz1yKDczKTtzLmluaGVyaXRzPXIoNzQpLHMuaW5oZXJpdHMobyxmKSxvLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybVN0YXRlLm5lZWRUcmFuc2Zvcm09ITEsZi5wcm90b3R5cGUucHVzaC5jYWxsKHRoaXMsdCxlKX0sby5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxvLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3RyYW5zZm9ybVN0YXRlO2lmKG4ud3JpdGVjYj1yLG4ud3JpdGVjaHVuaz10LG4ud3JpdGVlbmNvZGluZz1lLCFuLnRyYW5zZm9ybWluZyl7dmFyIGk9dGhpcy5fcmVhZGFibGVTdGF0ZTsobi5uZWVkVHJhbnNmb3JtfHxpLm5lZWRSZWFkYWJsZXx8aS5sZW5ndGg8aS5oaWdoV2F0ZXJNYXJrKSYmdGhpcy5fcmVhZChpLmhpZ2hXYXRlck1hcmspfX0sby5wcm90b3R5cGUuX3JlYWQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fdHJhbnNmb3JtU3RhdGU7bnVsbCE9PWUud3JpdGVjaHVuayYmZS53cml0ZWNiJiYhZS50cmFuc2Zvcm1pbmc/KGUudHJhbnNmb3JtaW5nPSEwLHRoaXMuX3RyYW5zZm9ybShlLndyaXRlY2h1bmssZS53cml0ZWVuY29kaW5nLGUuYWZ0ZXJUcmFuc2Zvcm0pKTplLm5lZWRUcmFuc2Zvcm09ITB9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUsbil7ZnVuY3Rpb24gaSgpe31mdW5jdGlvbiBvKHQsZSxyKXt0aGlzLmNodW5rPXQsdGhpcy5lbmNvZGluZz1lLHRoaXMuY2FsbGJhY2s9cix0aGlzLm5leHQ9bnVsbH1mdW5jdGlvbiBhKHQsZSl7Uj1SfHxyKDUxKSx0PXR8fHt9LHRoaXMub2JqZWN0TW9kZT0hIXQub2JqZWN0TW9kZSxlIGluc3RhbmNlb2YgUiYmKHRoaXMub2JqZWN0TW9kZT10aGlzLm9iamVjdE1vZGV8fCEhdC53cml0YWJsZU9iamVjdE1vZGUpO3ZhciBuPXQuaGlnaFdhdGVyTWFyayxpPXRoaXMub2JqZWN0TW9kZT8xNjoxNjM4NDt0aGlzLmhpZ2hXYXRlck1hcms9bnx8MD09PW4/bjppLHRoaXMuaGlnaFdhdGVyTWFyaz1+fnRoaXMuaGlnaFdhdGVyTWFyayx0aGlzLm5lZWREcmFpbj0hMSx0aGlzLmVuZGluZz0hMSx0aGlzLmVuZGVkPSExLHRoaXMuZmluaXNoZWQ9ITE7dmFyIG89dC5kZWNvZGVTdHJpbmdzPT09ITE7dGhpcy5kZWNvZGVTdHJpbmdzPSFvLHRoaXMuZGVmYXVsdEVuY29kaW5nPXQuZGVmYXVsdEVuY29kaW5nfHxcInV0ZjhcIix0aGlzLmxlbmd0aD0wLHRoaXMud3JpdGluZz0hMSx0aGlzLmNvcmtlZD0wLHRoaXMuc3luYz0hMCx0aGlzLmJ1ZmZlclByb2Nlc3Npbmc9ITEsdGhpcy5vbndyaXRlPWZ1bmN0aW9uKHQpe2IoZSx0KX0sdGhpcy53cml0ZWNiPW51bGwsdGhpcy53cml0ZWxlbj0wLHRoaXMuYnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5sYXN0QnVmZmVyZWRSZXF1ZXN0PW51bGwsdGhpcy5wZW5kaW5nY2I9MCx0aGlzLnByZWZpbmlzaGVkPSExLHRoaXMuZXJyb3JFbWl0dGVkPSExLHRoaXMuYnVmZmVyZWRSZXF1ZXN0Q291bnQ9MCx0aGlzLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgUyh0aGlzKX1mdW5jdGlvbiBmKHQpe3JldHVybiBSPVJ8fHIoNTEpLHRoaXMgaW5zdGFuY2VvZiBmfHx0aGlzIGluc3RhbmNlb2YgUj8odGhpcy5fd3JpdGFibGVTdGF0ZT1uZXcgYSh0LHRoaXMpLHRoaXMud3JpdGFibGU9ITAsdCYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHQud3JpdGUmJih0aGlzLl93cml0ZT10LndyaXRlKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LndyaXRldiYmKHRoaXMuX3dyaXRldj10LndyaXRldikpLHZvaWQgeC5jYWxsKHRoaXMpKTpuZXcgZih0KX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bmV3IEVycm9yKFwid3JpdGUgYWZ0ZXIgZW5kXCIpO3QuZW1pdChcImVycm9yXCIsciksRShlLHIpfWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ITAsbz0hMTtyZXR1cm4gbnVsbD09PXI/bz1uZXcgVHlwZUVycm9yKFwiTWF5IG5vdCB3cml0ZSBudWxsIHZhbHVlcyB0byBzdHJlYW1cIik6Qi5pc0J1ZmZlcihyKXx8XCJzdHJpbmdcIj09dHlwZW9mIHJ8fHZvaWQgMD09PXJ8fGUub2JqZWN0TW9kZXx8KG89bmV3IFR5cGVFcnJvcihcIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmtcIikpLG8mJih0LmVtaXQoXCJlcnJvclwiLG8pLEUobixvKSxpPSExKSxpfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiB0Lm9iamVjdE1vZGV8fHQuZGVjb2RlU3RyaW5ncz09PSExfHxcInN0cmluZ1wiIT10eXBlb2YgZXx8KGU9Ty5mcm9tKGUscikpLGV9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3I9aChlLHIsbiksQi5pc0J1ZmZlcihyKSYmKG49XCJidWZmZXJcIik7dmFyIGE9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGg7ZS5sZW5ndGgrPWE7dmFyIGY9ZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrO2lmKGZ8fChlLm5lZWREcmFpbj0hMCksZS53cml0aW5nfHxlLmNvcmtlZCl7dmFyIHM9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0O2UubGFzdEJ1ZmZlcmVkUmVxdWVzdD1uZXcgbyhyLG4saSkscz9zLm5leHQ9ZS5sYXN0QnVmZmVyZWRSZXF1ZXN0OmUuYnVmZmVyZWRSZXF1ZXN0PWUubGFzdEJ1ZmZlcmVkUmVxdWVzdCxlLmJ1ZmZlcmVkUmVxdWVzdENvdW50Kz0xfWVsc2UgZCh0LGUsITEsYSxyLG4saSk7cmV0dXJuIGZ9ZnVuY3Rpb24gZCh0LGUscixuLGksbyxhKXtlLndyaXRlbGVuPW4sZS53cml0ZWNiPWEsZS53cml0aW5nPSEwLGUuc3luYz0hMCxyP3QuX3dyaXRldihpLGUub253cml0ZSk6dC5fd3JpdGUoaSxvLGUub253cml0ZSksZS5zeW5jPSExfWZ1bmN0aW9uIGwodCxlLHIsbixpKXstLWUucGVuZGluZ2NiLHI/RShpLG4pOmkobiksdC5fd3JpdGFibGVTdGF0ZS5lcnJvckVtaXR0ZWQ9ITAsdC5lbWl0KFwiZXJyb3JcIixuKX1mdW5jdGlvbiBwKHQpe3Qud3JpdGluZz0hMSx0LndyaXRlY2I9bnVsbCx0Lmxlbmd0aC09dC53cml0ZWxlbix0LndyaXRlbGVuPTB9ZnVuY3Rpb24gYih0LGUpe3ZhciByPXQuX3dyaXRhYmxlU3RhdGUsbj1yLnN5bmMsaT1yLndyaXRlY2I7aWYocChyKSxlKWwodCxyLG4sZSxpKTtlbHNle3ZhciBvPWcocik7b3x8ci5jb3JrZWR8fHIuYnVmZmVyUHJvY2Vzc2luZ3x8IXIuYnVmZmVyZWRSZXF1ZXN0fHxtKHQsciksbj9BKHYsdCxyLG8saSk6dih0LHIsbyxpKX19ZnVuY3Rpb24gdih0LGUscixuKXtyfHx5KHQsZSksZS5wZW5kaW5nY2ItLSxuKCksXyh0LGUpfWZ1bmN0aW9uIHkodCxlKXswPT09ZS5sZW5ndGgmJmUubmVlZERyYWluJiYoZS5uZWVkRHJhaW49ITEsdC5lbWl0KFwiZHJhaW5cIikpfWZ1bmN0aW9uIG0odCxlKXtlLmJ1ZmZlclByb2Nlc3Npbmc9ITA7dmFyIHI9ZS5idWZmZXJlZFJlcXVlc3Q7aWYodC5fd3JpdGV2JiZyJiZyLm5leHQpe3ZhciBuPWUuYnVmZmVyZWRSZXF1ZXN0Q291bnQsaT1uZXcgQXJyYXkobiksbz1lLmNvcmtlZFJlcXVlc3RzRnJlZTtvLmVudHJ5PXI7Zm9yKHZhciBhPTA7cjspaVthXT1yLHI9ci5uZXh0LGErPTE7ZCh0LGUsITAsZS5sZW5ndGgsaSxcIlwiLG8uZmluaXNoKSxlLnBlbmRpbmdjYisrLGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsLG8ubmV4dD8oZS5jb3JrZWRSZXF1ZXN0c0ZyZWU9by5uZXh0LG8ubmV4dD1udWxsKTplLmNvcmtlZFJlcXVlc3RzRnJlZT1uZXcgUyhlKX1lbHNle2Zvcig7cjspe3ZhciBmPXIuY2h1bmsscz1yLmVuY29kaW5nLHU9ci5jYWxsYmFjayxoPWUub2JqZWN0TW9kZT8xOmYubGVuZ3RoO2lmKGQodCxlLCExLGgsZixzLHUpLHI9ci5uZXh0LGUud3JpdGluZylicmVha31udWxsPT09ciYmKGUubGFzdEJ1ZmZlcmVkUmVxdWVzdD1udWxsKX1lLmJ1ZmZlcmVkUmVxdWVzdENvdW50PTAsZS5idWZmZXJlZFJlcXVlc3Q9cixlLmJ1ZmZlclByb2Nlc3Npbmc9ITF9ZnVuY3Rpb24gZyh0KXtyZXR1cm4gdC5lbmRpbmcmJjA9PT10Lmxlbmd0aCYmbnVsbD09PXQuYnVmZmVyZWRSZXF1ZXN0JiYhdC5maW5pc2hlZCYmIXQud3JpdGluZ31mdW5jdGlvbiB3KHQsZSl7ZS5wcmVmaW5pc2hlZHx8KGUucHJlZmluaXNoZWQ9ITAsdC5lbWl0KFwicHJlZmluaXNoXCIpKX1mdW5jdGlvbiBfKHQsZSl7dmFyIHI9ZyhlKTtyZXR1cm4gciYmKDA9PT1lLnBlbmRpbmdjYj8odyh0LGUpLGUuZmluaXNoZWQ9ITAsdC5lbWl0KFwiZmluaXNoXCIpKTp3KHQsZSkpLHJ9ZnVuY3Rpb24gTSh0LGUscil7ZS5lbmRpbmc9ITAsXyh0LGUpLHImJihlLmZpbmlzaGVkP0Uocik6dC5vbmNlKFwiZmluaXNoXCIscikpLGUuZW5kZWQ9ITAsdC53cml0YWJsZT0hMX1mdW5jdGlvbiBTKHQpe3ZhciBlPXRoaXM7dGhpcy5uZXh0PW51bGwsdGhpcy5lbnRyeT1udWxsLHRoaXMuZmluaXNoPWZ1bmN0aW9uKHIpe3ZhciBuPWUuZW50cnk7Zm9yKGUuZW50cnk9bnVsbDtuOyl7dmFyIGk9bi5jYWxsYmFjazt0LnBlbmRpbmdjYi0tLGkociksbj1uLm5leHR9dC5jb3JrZWRSZXF1ZXN0c0ZyZWU/dC5jb3JrZWRSZXF1ZXN0c0ZyZWUubmV4dD1lOnQuY29ya2VkUmVxdWVzdHNGcmVlPWV9fXQuZXhwb3J0cz1mO3ZhciBFPXIoMTU3KSxBPSFlLmJyb3dzZXImJltcInYwLjEwXCIsXCJ2MC45LlwiXS5pbmRleE9mKGUudmVyc2lvbi5zbGljZSgwLDUpKT4tMT9uOkU7Zi5Xcml0YWJsZVN0YXRlPWE7dmFyIGs9cig3Myk7ay5pbmhlcml0cz1yKDc0KTt2YXIgeCxJPXtkZXByZWNhdGU6cig1OTgpfTshZnVuY3Rpb24oKXt0cnl7eD1yKDMxKX1jYXRjaCh0KXt9ZmluYWxseXt4fHwoeD1yKDExMCkuRXZlbnRFbWl0dGVyKX19KCk7dmFyIEI9cigxKS5CdWZmZXIsTz1yKDE1Nik7ay5pbmhlcml0cyhmLHgpO3ZhciBSO2EucHJvdG90eXBlLmdldEJ1ZmZlcj1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmJ1ZmZlcmVkUmVxdWVzdCxlPVtdO3Q7KWUucHVzaCh0KSx0PXQubmV4dDtyZXR1cm4gZX0sZnVuY3Rpb24oKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGEucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpJLmRlcHJlY2F0ZShmdW5jdGlvbigpe3JldHVybiB0aGlzLmdldEJ1ZmZlcigpfSxcIl93cml0YWJsZVN0YXRlLmJ1ZmZlciBpcyBkZXByZWNhdGVkLiBVc2UgX3dyaXRhYmxlU3RhdGUuZ2V0QnVmZmVyIGluc3RlYWQuXCIpfSl9Y2F0Y2godCl7fX0oKTt2YXIgUjtmLnByb3RvdHlwZS5waXBlPWZ1bmN0aW9uKCl7dGhpcy5lbWl0KFwiZXJyb3JcIixuZXcgRXJyb3IoXCJDYW5ub3QgcGlwZSwgbm90IHJlYWRhYmxlXCIpKX0sZi5wcm90b3R5cGUud3JpdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGUsbz0hMTtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksQi5pc0J1ZmZlcih0KT9lPVwiYnVmZmVyXCI6ZXx8KGU9bi5kZWZhdWx0RW5jb2RpbmcpLFwiZnVuY3Rpb25cIiE9dHlwZW9mIHImJihyPWkpLG4uZW5kZWQ/cyh0aGlzLHIpOnUodGhpcyxuLHQscikmJihuLnBlbmRpbmdjYisrLG89Yyh0aGlzLG4sdCxlLHIpKSxvfSxmLnByb3RvdHlwZS5jb3JrPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fd3JpdGFibGVTdGF0ZTt0LmNvcmtlZCsrfSxmLnByb3RvdHlwZS51bmNvcms9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl93cml0YWJsZVN0YXRlO3QuY29ya2VkJiYodC5jb3JrZWQtLSx0LndyaXRpbmd8fHQuY29ya2VkfHx0LmZpbmlzaGVkfHx0LmJ1ZmZlclByb2Nlc3Npbmd8fCF0LmJ1ZmZlcmVkUmVxdWVzdHx8bSh0aGlzLHQpKX0sZi5wcm90b3R5cGUuc2V0RGVmYXVsdEVuY29kaW5nPWZ1bmN0aW9uKHQpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD10LnRvTG93ZXJDYXNlKCkpLCEoW1wiaGV4XCIsXCJ1dGY4XCIsXCJ1dGYtOFwiLFwiYXNjaWlcIixcImJpbmFyeVwiLFwiYmFzZTY0XCIsXCJ1Y3MyXCIsXCJ1Y3MtMlwiLFwidXRmMTZsZVwiLFwidXRmLTE2bGVcIixcInJhd1wiXS5pbmRleE9mKCh0K1wiXCIpLnRvTG93ZXJDYXNlKCkpPi0xKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVW5rbm93biBlbmNvZGluZzogXCIrdCk7cmV0dXJuIHRoaXMuX3dyaXRhYmxlU3RhdGUuZGVmYXVsdEVuY29kaW5nPXQsdGhpc30sZi5wcm90b3R5cGUuX3dyaXRlPWZ1bmN0aW9uKHQsZSxyKXtyKG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKSl9LGYucHJvdG90eXBlLl93cml0ZXY9bnVsbCxmLnByb3RvdHlwZS5lbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX3dyaXRhYmxlU3RhdGU7XCJmdW5jdGlvblwiPT10eXBlb2YgdD8ocj10LHQ9bnVsbCxlPW51bGwpOlwiZnVuY3Rpb25cIj09dHlwZW9mIGUmJihyPWUsZT1udWxsKSxudWxsIT09dCYmdm9pZCAwIT09dCYmdGhpcy53cml0ZSh0LGUpLG4uY29ya2VkJiYobi5jb3JrZWQ9MSx0aGlzLnVuY29yaygpKSxuLmVuZGluZ3x8bi5maW5pc2hlZHx8TSh0aGlzLG4scil9fSkuY2FsbChlLHIoMjYpLHIoMTU4KS5zZXRJbW1lZGlhdGUpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKHQpe3ZhciBuPXIoMSksaT1uLkJ1ZmZlcixvPW4uU2xvd0J1ZmZlcixhPW4ua01heExlbmd0aHx8MjE0NzQ4MzY0NztlLmFsbG9jPWZ1bmN0aW9uKHQsZSxyKXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jKXJldHVybiBpLmFsbG9jKHQsZSxyKTtpZihcIm51bWJlclwiPT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiZW5jb2RpbmcgbXVzdCBub3QgYmUgbnVtYmVyXCIpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7dmFyIG49cixvPWU7dm9pZCAwPT09byYmKG49dm9pZCAwLG89MCk7dmFyIGY9bmV3IGkodCk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIG8pZm9yKHZhciBzPW5ldyBpKG8sbiksdT1zLmxlbmd0aCxoPS0xOysraDx0OylmW2hdPXNbaCV1XTtlbHNlIGYuZmlsbChvKTtyZXR1cm4gZn0sZS5hbGxvY1Vuc2FmZT1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiBpLmFsbG9jVW5zYWZlKXJldHVybiBpLmFsbG9jVW5zYWZlKHQpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD5hKXRocm93IG5ldyBSYW5nZUVycm9yKFwic2l6ZSBpcyB0b28gbGFyZ2VcIik7cmV0dXJuIG5ldyBpKHQpfSxlLmZyb209ZnVuY3Rpb24oZSxyLG4pe2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mIGkuZnJvbSYmKCF0LlVpbnQ4QXJyYXl8fFVpbnQ4QXJyYXkuZnJvbSE9PWkuZnJvbSkpcmV0dXJuIGkuZnJvbShlLHIsbik7aWYoXCJudW1iZXJcIj09dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcignXCJ2YWx1ZVwiIGFyZ3VtZW50IG11c3Qgbm90IGJlIGEgbnVtYmVyJyk7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGUpcmV0dXJuIG5ldyBpKGUscik7aWYoXCJ1bmRlZmluZWRcIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe3ZhciBvPXI7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIG5ldyBpKGUpO1widW5kZWZpbmVkXCI9PXR5cGVvZiBvJiYobz0wKTt2YXIgYT1uO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBhJiYoYT1lLmJ5dGVMZW5ndGgtbyksbz49ZS5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ29mZnNldCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtpZihhPmUuYnl0ZUxlbmd0aC1vKXRocm93IG5ldyBSYW5nZUVycm9yKFwiJ2xlbmd0aCcgaXMgb3V0IG9mIGJvdW5kc1wiKTtyZXR1cm4gbmV3IGkoZS5zbGljZShvLG8rYSkpfWlmKGkuaXNCdWZmZXIoZSkpe3ZhciBmPW5ldyBpKGUubGVuZ3RoKTtyZXR1cm4gZS5jb3B5KGYsMCwwLGUubGVuZ3RoKSxmfWlmKGUpe2lmKEFycmF5LmlzQXJyYXkoZSl8fFwidW5kZWZpbmVkXCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmZS5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8XCJsZW5ndGhcImluIGUpcmV0dXJuIG5ldyBpKGUpO2lmKFwiQnVmZmVyXCI9PT1lLnR5cGUmJkFycmF5LmlzQXJyYXkoZS5kYXRhKSlyZXR1cm4gbmV3IGkoZS5kYXRhKX10aHJvdyBuZXcgVHlwZUVycm9yKFwiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LlwiKX0sZS5hbGxvY1Vuc2FmZVNsb3c9ZnVuY3Rpb24odCl7aWYoXCJmdW5jdGlvblwiPT10eXBlb2YgaS5hbGxvY1Vuc2FmZVNsb3cpcmV0dXJuIGkuYWxsb2NVbnNhZmVTbG93KHQpO2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJzaXplIG11c3QgYmUgYSBudW1iZXJcIik7aWYodD49YSl0aHJvdyBuZXcgUmFuZ2VFcnJvcihcInNpemUgaXMgdG9vIGxhcmdlXCIpO3JldHVybiBuZXcgbyh0KX19KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyLG4saSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImNhbGxiYWNrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7dmFyIG8sYSxmPWFyZ3VtZW50cy5sZW5ndGg7c3dpdGNoKGYpe2Nhc2UgMDpjYXNlIDE6cmV0dXJuIGUubmV4dFRpY2sodCk7Y2FzZSAyOnJldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscil9KTtjYXNlIDM6cmV0dXJuIGUubmV4dFRpY2soZnVuY3Rpb24oKXt0LmNhbGwobnVsbCxyLG4pfSk7Y2FzZSA0OnJldHVybiBlLm5leHRUaWNrKGZ1bmN0aW9uKCl7dC5jYWxsKG51bGwscixuLGkpfSk7ZGVmYXVsdDpmb3Iobz1uZXcgQXJyYXkoZi0xKSxhPTA7YTxvLmxlbmd0aDspb1thKytdPWFyZ3VtZW50c1thXTtyZXR1cm4gZS5uZXh0VGljayhmdW5jdGlvbigpe3QuYXBwbHkobnVsbCxvKX0pfX0hZS52ZXJzaW9ufHwwPT09ZS52ZXJzaW9uLmluZGV4T2YoXCJ2MC5cIil8fDA9PT1lLnZlcnNpb24uaW5kZXhPZihcInYxLlwiKSYmMCE9PWUudmVyc2lvbi5pbmRleE9mKFwidjEuOC5cIik/dC5leHBvcnRzPXI6dC5leHBvcnRzPWUubmV4dFRpY2s7XG59KS5jYWxsKGUscigyNikpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSh0LGUpe3RoaXMuX2lkPXQsdGhpcy5fY2xlYXJGbj1lfXZhciBvPXIoMjYpLm5leHRUaWNrLGE9RnVuY3Rpb24ucHJvdG90eXBlLmFwcGx5LGY9QXJyYXkucHJvdG90eXBlLnNsaWNlLHM9e30sdT0wO2Uuc2V0VGltZW91dD1mdW5jdGlvbigpe3JldHVybiBuZXcgaShhLmNhbGwoc2V0VGltZW91dCx3aW5kb3csYXJndW1lbnRzKSxjbGVhclRpbWVvdXQpfSxlLnNldEludGVydmFsPWZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBpKGEuY2FsbChzZXRJbnRlcnZhbCx3aW5kb3csYXJndW1lbnRzKSxjbGVhckludGVydmFsKX0sZS5jbGVhclRpbWVvdXQ9ZS5jbGVhckludGVydmFsPWZ1bmN0aW9uKHQpe3QuY2xvc2UoKX0saS5wcm90b3R5cGUudW5yZWY9aS5wcm90b3R5cGUucmVmPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5jbG9zZT1mdW5jdGlvbigpe3RoaXMuX2NsZWFyRm4uY2FsbCh3aW5kb3csdGhpcy5faWQpfSxlLmVucm9sbD1mdW5jdGlvbih0LGUpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD1lfSxlLnVuZW5yb2xsPWZ1bmN0aW9uKHQpe2NsZWFyVGltZW91dCh0Ll9pZGxlVGltZW91dElkKSx0Ll9pZGxlVGltZW91dD0tMX0sZS5fdW5yZWZBY3RpdmU9ZS5hY3RpdmU9ZnVuY3Rpb24odCl7Y2xlYXJUaW1lb3V0KHQuX2lkbGVUaW1lb3V0SWQpO3ZhciBlPXQuX2lkbGVUaW1lb3V0O2U+PTAmJih0Ll9pZGxlVGltZW91dElkPXNldFRpbWVvdXQoZnVuY3Rpb24oKXt0Ll9vblRpbWVvdXQmJnQuX29uVGltZW91dCgpfSxlKSl9LGUuc2V0SW1tZWRpYXRlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHQ/dDpmdW5jdGlvbih0KXt2YXIgcj11Kyssbj0hKGFyZ3VtZW50cy5sZW5ndGg8MikmJmYuY2FsbChhcmd1bWVudHMsMSk7cmV0dXJuIHNbcl09ITAsbyhmdW5jdGlvbigpe3Nbcl0mJihuP3QuYXBwbHkobnVsbCxuKTp0LmNhbGwobnVsbCksZS5jbGVhckltbWVkaWF0ZShyKSl9KSxyfSxlLmNsZWFySW1tZWRpYXRlPVwiZnVuY3Rpb25cIj09dHlwZW9mIG4/bjpmdW5jdGlvbih0KXtkZWxldGUgc1t0XX19KS5jYWxsKGUscigxNTgpLnNldEltbWVkaWF0ZSxyKDE1OCkuY2xlYXJJbW1lZGlhdGUpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDYyKSxmPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoKXtyZXR1cm4gbih0aGlzLGUpLGkodGhpcywoZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhlLHQpLGV9KGEpO3QuZXhwb3J0cz1mfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDI1NykuQmVyLGE9NjU1MzcsZj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoKXtuKHRoaXMsdCl9cmV0dXJuIGkodCxudWxsLFt7a2V5OlwibW9kdWx1c1RvUGVtXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoMD09PXRbMF0pdGhyb3cgbmV3IEVycm9yKFwiTW9kdWx1cyBtYXkgbm90IHN0YXJ0IHdpdGggemVyb1wiKTsxMjgmdFswXSYmKHQ9ZS5jb25jYXQoW25ldyBlKFswXSksdF0pKTt2YXIgcj1uZXcgby5Xcml0ZXI7cmV0dXJuIHIuc3RhcnRTZXF1ZW5jZSgpLHIud3JpdGVCdWZmZXIodCwyKSxyLndyaXRlSW50KGEpLHIuZW5kU2VxdWVuY2UoKSxcIi0tLS0tQkVHSU4gUlNBIFBVQkxJQyBLRVktLS0tLVxcblwiK3IuYnVmZmVyLnRvU3RyaW5nKFwiYmFzZTY0XCIpLm1hdGNoKC8uezEsNjR9L2cpLmpvaW4oXCJcXG5cIikrXCJcXG4tLS0tLUVORCBSU0EgUFVCTElDIEtFWS0tLS0tXFxuXCJ9fSx7a2V5OlwibW9kdWx1c0Zyb21Qcml2YXRlS2V5XCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIHI9dC5yZXBsYWNlKFwiLS0tLS1CRUdJTiBSU0EgUFJJVkFURSBLRVktLS0tLVwiLFwiXCIpLnJlcGxhY2UoXCItLS0tLUVORCBSU0EgUFJJVkFURSBLRVktLS0tLVwiLFwiXCIpLnJlcGxhY2UoL1xccyt8XFxuXFxyfFxcbnxcXHIkL2dtLFwiXCIpLG49bmV3IGUocixcImJhc2U2NFwiKSxpPW5ldyBvLlJlYWRlcihuKTtpLnJlYWRTZXF1ZW5jZSgpLGkucmVhZFN0cmluZygyLCEwKTt2YXIgYT1pLnJlYWRTdHJpbmcoMiwhMCk7cmV0dXJuIDA9PT1hWzBdP2Euc2xpY2UoMSk6YX19XSksdH0oKTt0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtyKDI4MSksdC5leHBvcnRzPXIoMTYzKS5OdW1iZXIuaXNJbnRlZ2VyfSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz17dmVyc2lvbjpcIjIuNC4wXCJ9O1wibnVtYmVyXCI9PXR5cGVvZiBfX2UmJihfX2U9cil9LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3RyeXtyZXR1cm4hIXQoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbih0LGUpe3ZhciByPXQuZXhwb3J0cz1cInVuZGVmaW5lZFwiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6XCJ1bmRlZmluZWRcIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKTtcIm51bWJlclwiPT10eXBlb2YgX19nJiYoX19nPXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyMyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJlwiTnVtYmVyXCIhPW4odCkpdGhyb3cgVHlwZUVycm9yKGUpO3JldHVybit0fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTEpLGk9cig0Nyksbz1yKDEwKTt0LmV4cG9ydHM9W10uY29weVdpdGhpbnx8ZnVuY3Rpb24odCxlKXt2YXIgcj1uKHRoaXMpLGE9byhyLmxlbmd0aCksZj1pKHQsYSkscz1pKGUsYSksdT1hcmd1bWVudHMubGVuZ3RoPjI/YXJndW1lbnRzWzJdOnZvaWQgMCxoPU1hdGgubWluKCh2b2lkIDA9PT11P2E6aSh1LGEpKS1zLGEtZiksYz0xO2ZvcihzPGYmJmY8cytoJiYoYz0tMSxzKz1oLTEsZis9aC0xKTtoLS0gPjA7KXMgaW4gcj9yW2ZdPXJbc106ZGVsZXRlIHJbZl0sZis9YyxzKz1jO3JldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNTUpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPVtdO3JldHVybiBuKHQsITEsci5wdXNoLHIsZSkscn19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDEzKSxpPXIoMTEpLG89cig2NSksYT1yKDEwKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsZixzKXtuKGUpO3ZhciB1PWkodCksaD1vKHUpLGM9YSh1Lmxlbmd0aCksZD1zP2MtMTowLGw9cz8tMToxO2lmKHI8Milmb3IoOzspe2lmKGQgaW4gaCl7Zj1oW2RdLGQrPWw7YnJlYWt9aWYoZCs9bCxzP2Q8MDpjPD1kKXRocm93IFR5cGVFcnJvcihcIlJlZHVjZSBvZiBlbXB0eSBhcnJheSB3aXRoIG5vIGluaXRpYWwgdmFsdWVcIil9Zm9yKDtzP2Q+PTA6Yz5kO2QrPWwpZCBpbiBoJiYoZj1lKGYsaFtkXSxkLHUpKTtyZXR1cm4gZn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDEzKSxpPXIoNiksbz1yKDgyKSxhPVtdLnNsaWNlLGY9e30scz1mdW5jdGlvbih0LGUscil7aWYoIShlIGluIGYpKXtmb3IodmFyIG49W10saT0wO2k8ZTtpKyspbltpXT1cImFbXCIraStcIl1cIjtmW2VdPUZ1bmN0aW9uKFwiRixhXCIsXCJyZXR1cm4gbmV3IEYoXCIrbi5qb2luKFwiLFwiKStcIilcIil9cmV0dXJuIGZbZV0odCxyKX07dC5leHBvcnRzPUZ1bmN0aW9uLmJpbmR8fGZ1bmN0aW9uKHQpe3ZhciBlPW4odGhpcykscj1hLmNhbGwoYXJndW1lbnRzLDEpLGY9ZnVuY3Rpb24oKXt2YXIgbj1yLmNvbmNhdChhLmNhbGwoYXJndW1lbnRzKSk7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmP3MoZSxuLmxlbmd0aCxuKTpvKGUsbix0KX07cmV0dXJuIGkoZS5wcm90b3R5cGUpJiYoZi5wcm90b3R5cGU9ZS5wcm90b3R5cGUpLGZ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig5KS5mLGk9cig0Miksbz1yKDQ1KSxhPXIoMzMpLGY9cig0MCkscz1yKDI0KSx1PXIoNTUpLGg9cigxMjgpLGM9cigxNzcpLGQ9cig0NiksbD1yKDgpLHA9cigzNikuZmFzdEtleSxiPWw/XCJfc1wiOlwic2l6ZVwiLHY9ZnVuY3Rpb24odCxlKXt2YXIgcixuPXAoZSk7aWYoXCJGXCIhPT1uKXJldHVybiB0Ll9pW25dO2ZvcihyPXQuX2Y7cjtyPXIubilpZihyLms9PWUpcmV0dXJuIHJ9O3QuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsaCl7dmFyIGM9dChmdW5jdGlvbih0LG4pe2YodCxjLGUsXCJfaVwiKSx0Ll9pPWkobnVsbCksdC5fZj12b2lkIDAsdC5fbD12b2lkIDAsdFtiXT0wLHZvaWQgMCE9biYmdShuLHIsdFtoXSx0KX0pO3JldHVybiBvKGMucHJvdG90eXBlLHtjbGVhcjpmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dC5faSxyPXQuX2Y7cjtyPXIubilyLnI9ITAsci5wJiYoci5wPXIucC5uPXZvaWQgMCksZGVsZXRlIGVbci5pXTt0Ll9mPXQuX2w9dm9pZCAwLHRbYl09MH0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj12KGUsdCk7aWYocil7dmFyIG49ci5uLGk9ci5wO2RlbGV0ZSBlLl9pW3IuaV0sci5yPSEwLGkmJihpLm49biksbiYmKG4ucD1pKSxlLl9mPT1yJiYoZS5fZj1uKSxlLl9sPT1yJiYoZS5fbD1pKSxlW2JdLS19cmV0dXJuISFyfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe2YodGhpcyxjLFwiZm9yRWFjaFwiKTtmb3IodmFyIGUscj1hKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsMyk7ZT1lP2Uubjp0aGlzLl9mOylmb3IocihlLnYsZS5rLHRoaXMpO2UmJmUucjspZT1lLnB9LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXYodGhpcyx0KX19KSxsJiZuKGMucHJvdG90eXBlLFwic2l6ZVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gcyh0aGlzW2JdKX19KSxjfSxkZWY6ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGksbz12KHQsZSk7cmV0dXJuIG8/by52PXI6KHQuX2w9bz17aTppPXAoZSwhMCksazplLHY6cixwOm49dC5fbCxuOnZvaWQgMCxyOiExfSx0Ll9mfHwodC5fZj1vKSxuJiYobi5uPW8pLHRbYl0rKyxcIkZcIiE9PWkmJih0Ll9pW2ldPW8pKSx0fSxnZXRFbnRyeTp2LHNldFN0cm9uZzpmdW5jdGlvbih0LGUscil7aCh0LGUsZnVuY3Rpb24odCxlKXt0aGlzLl90PXQsdGhpcy5faz1lLHRoaXMuX2w9dm9pZCAwfSxmdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLGU9dC5fayxyPXQuX2w7ciYmci5yOylyPXIucDtyZXR1cm4gdC5fdCYmKHQuX2w9cj1yP3Iubjp0Ll90Ll9mKT9cImtleXNcIj09ZT9jKDAsci5rKTpcInZhbHVlc1wiPT1lP2MoMCxyLnYpOmMoMCxbci5rLHIudl0pOih0Ll90PXZvaWQgMCxjKDEpKX0scj9cImVudHJpZXNcIjpcInZhbHVlc1wiLCFyLCEwKSxkKGUpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDY0KSxpPXIoMTY4KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7aWYobih0aGlzKSE9dCl0aHJvdyBUeXBlRXJyb3IodCtcIiN0b0pTT04gaXNuJ3QgZ2VuZXJpY1wiKTtyZXR1cm4gaSh0aGlzKX19fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0NSksaT1yKDM2KS5nZXRXZWFrLG89cigzKSxhPXIoNiksZj1yKDQwKSxzPXIoNTUpLHU9cigyNyksaD1yKDEyKSxjPXUoNSksZD11KDYpLGw9MCxwPWZ1bmN0aW9uKHQpe3JldHVybiB0Ll9sfHwodC5fbD1uZXcgYil9LGI9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHY9ZnVuY3Rpb24odCxlKXtyZXR1cm4gYyh0LmEsZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSl9O2IucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9dih0aGlzLHQpO2lmKGUpcmV0dXJuIGVbMV19LGhhczpmdW5jdGlvbih0KXtyZXR1cm4hIXYodGhpcyx0KX0sc2V0OmZ1bmN0aW9uKHQsZSl7dmFyIHI9dih0aGlzLHQpO3I/clsxXT1lOnRoaXMuYS5wdXNoKFt0LGVdKX0sZGVsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPWQodGhpcy5hLGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pO3JldHVybn5lJiZ0aGlzLmEuc3BsaWNlKGUsMSksISF+ZX19LHQuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24odCxlLHIsbyl7dmFyIHU9dChmdW5jdGlvbih0LG4pe2YodCx1LGUsXCJfaVwiKSx0Ll9pPWwrKyx0Ll9sPXZvaWQgMCx2b2lkIDAhPW4mJnMobixyLHRbb10sdCl9KTtyZXR1cm4gbih1LnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKHQpe2lmKCFhKHQpKXJldHVybiExO3ZhciBlPWkodCk7cmV0dXJuIGU9PT0hMD9wKHRoaXMpLmRlbGV0ZSh0KTplJiZoKGUsdGhpcy5faSkmJmRlbGV0ZSBlW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24odCl7aWYoIWEodCkpcmV0dXJuITE7dmFyIGU9aSh0KTtyZXR1cm4gZT09PSEwP3AodGhpcykuaGFzKHQpOmUmJmgoZSx0aGlzLl9pKX19KSx1fSxkZWY6ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWkobyhlKSwhMCk7cmV0dXJuIG49PT0hMD9wKHQpLnNldChlLHIpOm5bdC5faV09cix0fSx1ZnN0b3JlOnB9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDgpJiYhcig1KShmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxMjApKFwiZGl2XCIpLFwiYVwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9TWF0aC5mbG9vcjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIW4odCkmJmlzRmluaXRlKHQpJiZpKHQpPT09dH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDMpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscixpKXt0cnl7cmV0dXJuIGk/ZShuKHIpWzBdLHJbMV0pOmUocil9Y2F0Y2goZSl7dmFyIG89dC5yZXR1cm47dGhyb3cgdm9pZCAwIT09byYmbihvLmNhbGwodCkpLGV9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtyZXR1cm57dmFsdWU6ZSxkb25lOiEhdH19fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1NYXRoLmxvZzFwfHxmdW5jdGlvbih0KXtyZXR1cm4odD0rdCk+LTFlLTgmJnQ8MWUtOD90LXQqdC8yOk1hdGgubG9nKDErdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0NCksaT1yKDg2KSxvPXIoNjYpLGE9cigxMSksZj1yKDY1KSxzPU9iamVjdC5hc3NpZ247dC5leHBvcnRzPSFzfHxyKDUpKGZ1bmN0aW9uKCl7dmFyIHQ9e30sZT17fSxyPVN5bWJvbCgpLG49XCJhYmNkZWZnaGlqa2xtbm9wcXJzdFwiO3JldHVybiB0W3JdPTcsbi5zcGxpdChcIlwiKS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2VbdF09dH0pLDchPXMoe30sdClbcl18fE9iamVjdC5rZXlzKHMoe30sZSkpLmpvaW4oXCJcIikhPW59KT9mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1hKHQpLHM9YXJndW1lbnRzLmxlbmd0aCx1PTEsaD1pLmYsYz1vLmY7cz51Oylmb3IodmFyIGQsbD1mKGFyZ3VtZW50c1t1KytdKSxwPWg/bihsKS5jb25jYXQoaChsKSk6bihsKSxiPXAubGVuZ3RoLHY9MDtiPnY7KWMuY2FsbChsLGQ9cFt2KytdKSYmKHJbZF09bFtkXSk7cmV0dXJuIHJ9OnN9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDkpLGk9cigzKSxvPXIoNDQpO3QuZXhwb3J0cz1yKDgpP09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHQsZSl7aSh0KTtmb3IodmFyIHIsYT1vKGUpLGY9YS5sZW5ndGgscz0wO2Y+czspbi5mKHQscj1hW3MrK10sZVtyXSk7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNyksaT1yKDQzKS5mLG89e30udG9TdHJpbmcsYT1cIm9iamVjdFwiPT10eXBlb2Ygd2luZG93JiZ3aW5kb3cmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHdpbmRvdyk6W10sZj1mdW5jdGlvbih0KXt0cnl7cmV0dXJuIGkodCl9Y2F0Y2godCl7cmV0dXJuIGEuc2xpY2UoKX19O3QuZXhwb3J0cy5mPWZ1bmN0aW9uKHQpe3JldHVybiBhJiZcIltvYmplY3QgV2luZG93XVwiPT1vLmNhbGwodCk/Zih0KTppKG4odCkpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTIpLGk9cigxNyksbz1yKDc4KSghMSksYT1yKDEzMykoXCJJRV9QUk9UT1wiKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgcixmPWkodCkscz0wLHU9W107Zm9yKHIgaW4gZilyIT1hJiZuKGYscikmJnUucHVzaChyKTtmb3IoO2UubGVuZ3RoPnM7KW4oZixyPWVbcysrXSkmJih+byh1LHIpfHx1LnB1c2gocikpO3JldHVybiB1fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDQpLGk9cigxNyksbz1yKDY2KS5mO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciByLGE9aShlKSxmPW4oYSkscz1mLmxlbmd0aCx1PTAsaD1bXTtzPnU7KW8uY2FsbChhLHI9Zlt1KytdKSYmaC5wdXNoKHQ/W3IsYVtyXV06YVtyXSk7cmV0dXJuIGh9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDMpLGk9cig4Niksbz1yKDMpLGE9cig0KS5SZWZsZWN0O3QuZXhwb3J0cz1hJiZhLm93bktleXN8fGZ1bmN0aW9uKHQpe3ZhciBlPW4uZihvKHQpKSxyPWkuZjtyZXR1cm4gcj9lLmNvbmNhdChyKHQpKTplfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCkucGFyc2VGbG9hdCxpPXIoNTgpLnRyaW07dC5leHBvcnRzPTEvbihyKDEzOCkrXCItMFwiKSE9PS0oMS8wKT9mdW5jdGlvbih0KXt2YXIgZT1pKFN0cmluZyh0KSwzKSxyPW4oZSk7cmV0dXJuIDA9PT1yJiZcIi1cIj09ZS5jaGFyQXQoMCk/LTA6cn06bn0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCkucGFyc2VJbnQsaT1yKDU4KS50cmltLG89cigxMzgpLGE9L15bXFwtK10/MFt4WF0vO3QuZXhwb3J0cz04IT09bihvK1wiMDhcIil8fDIyIT09bihvK1wiMHgxNlwiKT9mdW5jdGlvbih0LGUpe3ZhciByPWkoU3RyaW5nKHQpLDMpO3JldHVybiBuKHIsZT4+PjB8fChhLnRlc3Qocik/MTY6MTApKX06bn0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9T2JqZWN0LmlzfHxmdW5jdGlvbih0LGUpe3JldHVybiB0PT09ZT8wIT09dHx8MS90PT09MS9lOnQhPXQmJmUhPWV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMCksaT1yKDEzNyksbz1yKDI0KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIsYSl7dmFyIGY9U3RyaW5nKG8odCkpLHM9Zi5sZW5ndGgsdT12b2lkIDA9PT1yP1wiIFwiOlN0cmluZyhyKSxoPW4oZSk7aWYoaDw9c3x8XCJcIj09dSlyZXR1cm4gZjt2YXIgYz1oLXMsZD1pLmNhbGwodSxNYXRoLmNlaWwoYy91Lmxlbmd0aCkpO3JldHVybiBkLmxlbmd0aD5jJiYoZD1kLnNsaWNlKDAsYykpLGE/ZCtmOmYrZH19LGZ1bmN0aW9uKHQsZSxyKXtlLmY9cig3KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTcxKTt0LmV4cG9ydHM9cig3OSkoXCJNYXBcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHtnZXQ6ZnVuY3Rpb24odCl7dmFyIGU9bi5nZXRFbnRyeSh0aGlzLHQpO3JldHVybiBlJiZlLnZ9LHNldDpmdW5jdGlvbih0LGUpe3JldHVybiBuLmRlZih0aGlzLDA9PT10PzA6dCxlKX19LG4sITApfSxmdW5jdGlvbih0LGUscil7cig4KSYmXCJnXCIhPS8uL2cuZmxhZ3MmJnIoOSkuZihSZWdFeHAucHJvdG90eXBlLFwiZmxhZ3NcIix7Y29uZmlndXJhYmxlOiEwLGdldDpyKDgxKX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxNzEpO3QuZXhwb3J0cz1yKDc5KShcIlNldFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0se2FkZDpmdW5jdGlvbih0KXtyZXR1cm4gbi5kZWYodGhpcyx0PTA9PT10PzA6dCx0KX19LG4pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG4saT1yKDI3KSgwKSxvPXIoMTUpLGE9cigzNiksZj1yKDE3OSkscz1yKDE3MyksdT1yKDYpLGg9YS5nZXRXZWFrLGM9T2JqZWN0LmlzRXh0ZW5zaWJsZSxkPXMudWZzdG9yZSxsPXt9LHA9ZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSxiPXtnZXQ6ZnVuY3Rpb24odCl7aWYodSh0KSl7dmFyIGU9aCh0KTtyZXR1cm4gZT09PSEwP2QodGhpcykuZ2V0KHQpOmU/ZVt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24odCxlKXtyZXR1cm4gcy5kZWYodGhpcyx0LGUpfX0sdj10LmV4cG9ydHM9cig3OSkoXCJXZWFrTWFwXCIscCxiLHMsITAsITApOzchPShuZXcgdikuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKGwpLDcpLmdldChsKSYmKG49cy5nZXRDb25zdHJ1Y3RvcihwKSxmKG4ucHJvdG90eXBlLGIpLGEuTkVFRD0hMCxpKFtcImRlbGV0ZVwiLFwiaGFzXCIsXCJnZXRcIixcInNldFwiXSxmdW5jdGlvbih0KXt2YXIgZT12LnByb3RvdHlwZSxyPWVbdF07byhlLHQsZnVuY3Rpb24oZSxpKXtpZih1KGUpJiYhYyhlKSl7dGhpcy5fZnx8KHRoaXMuX2Y9bmV3IG4pO3ZhciBvPXRoaXMuX2ZbdF0oZSxpKTtyZXR1cm5cInNldFwiPT10P3RoaXM6b31yZXR1cm4gci5jYWxsKHRoaXMsZSxpKX0pfSkpfSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCl7dGhyb3cgbmV3IEVycm9yKFwiQ2Fubm90IGZpbmQgbW9kdWxlICdcIit0K1wiJy5cIil9ci5rZXlzPWZ1bmN0aW9uKCl7cmV0dXJuW119LHIucmVzb2x2ZT1yLHQuZXhwb3J0cz1yLHIuaWQ9MTk0fSxmdW5jdGlvbih0LGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIHIodCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIG4odCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBpKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIG89ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0KXtyKHRoaXMsZSk7dmFyIGk9bih0aGlzLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5jYWxsKHRoaXMpKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGksXCJtZXNzYWdlXCIse2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHZhbHVlOnZvaWQgMCE9PXQ/U3RyaW5nKHQpOlwiXCJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoaSxcIm5hbWVcIix7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITEsdmFsdWU6aS5jb25zdHJ1Y3Rvci5uYW1lfSksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UmJkVycm9yLmNhcHR1cmVTdGFja1RyYWNlKGksaS5jb25zdHJ1Y3RvciksaX1yZXR1cm4gaShlLHQpLGV9KEVycm9yKTt0LmV4cG9ydHM9b30sZnVuY3Rpb24odCxlLHIpe3IoNDg2KSx0LmV4cG9ydHM9cigxOTcpLk51bWJlci5pc0ludGVnZXJ9LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPXt2ZXJzaW9uOlwiMi40LjBcIn07XCJudW1iZXJcIj09dHlwZW9mIF9fZSYmKF9fZT1yKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjAwKSxpPXIoMTk3KSxvPXIoNDc4KSxhPXIoNDgwKSxmPVwicHJvdG90eXBlXCIscz1mdW5jdGlvbih0LGUscil7dmFyIHUsaCxjLGQ9dCZzLkYsbD10JnMuRyxwPXQmcy5TLGI9dCZzLlAsdj10JnMuQix5PXQmcy5XLG09bD9pOmlbZV18fChpW2VdPXt9KSxnPW1bZl0sdz1sP246cD9uW2VdOihuW2VdfHx7fSlbZl07bCYmKHI9ZSk7Zm9yKHUgaW4gciloPSFkJiZ3JiZ2b2lkIDAhPT13W3VdLGgmJnUgaW4gbXx8KGM9aD93W3VdOnJbdV0sbVt1XT1sJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiB3W3VdP3JbdV06diYmaD9vKGMsbik6eSYmd1t1XT09Yz9mdW5jdGlvbih0KXt2YXIgZT1mdW5jdGlvbihlLHIsbil7aWYodGhpcyBpbnN0YW5jZW9mIHQpe3N3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtjYXNlIDA6cmV0dXJuIG5ldyB0O2Nhc2UgMTpyZXR1cm4gbmV3IHQoZSk7Y2FzZSAyOnJldHVybiBuZXcgdChlLHIpfXJldHVybiBuZXcgdChlLHIsbil9cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfTtyZXR1cm4gZVtmXT10W2ZdLGV9KGMpOmImJlwiZnVuY3Rpb25cIj09dHlwZW9mIGM/byhGdW5jdGlvbi5jYWxsLGMpOmMsYiYmKChtLnZpcnR1YWx8fChtLnZpcnR1YWw9e30pKVt1XT1jLHQmcy5SJiZnJiYhZ1t1XSYmYShnLHUsYykpKX07cy5GPTEscy5HPTIscy5TPTQscy5QPTgscy5CPTE2LHMuVz0zMixzLlU9NjQscy5SPTEyOCx0LmV4cG9ydHM9c30sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7dHJ5e3JldHVybiEhdCgpfWNhdGNoKHQpe3JldHVybiEwfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5leHBvcnRzPVwidW5kZWZpbmVkXCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzpcInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZiYmc2VsZi5NYXRoPT1NYXRoP3NlbGY6RnVuY3Rpb24oXCJyZXR1cm4gdGhpc1wiKSgpO1wibnVtYmVyXCI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt0LmV4cG9ydHM9cig0NzMpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpey8qIVxuICogVGhlIGJ1ZmZlciBtb2R1bGUgZnJvbSBub2RlLmpzLCBmb3IgdGhlIGJyb3dzZXIuXG4gKlxuICogQGF1dGhvciAgIEZlcm9zcyBBYm91a2hhZGlqZWggPGZlcm9zc0BmZXJvc3Mub3JnPiA8aHR0cDovL2Zlcm9zcy5vcmc+XG4gKiBAbGljZW5zZSAgTUlUXG4gKi9cbmZ1bmN0aW9uIG4odCxlKXtpZih0PT09ZSlyZXR1cm4gMDtmb3IodmFyIHI9dC5sZW5ndGgsbj1lLmxlbmd0aCxpPTAsbz1NYXRoLm1pbihyLG4pO2k8bzsrK2kpaWYodFtpXSE9PWVbaV0pe3I9dFtpXSxuPWVbaV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfWZ1bmN0aW9uIGkodCl7cmV0dXJuIGUuQnVmZmVyJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkJ1ZmZlci5pc0J1ZmZlcj9lLkJ1ZmZlci5pc0J1ZmZlcih0KTohKG51bGw9PXR8fCF0Ll9pc0J1ZmZlcil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpfWZ1bmN0aW9uIGEodCl7cmV0dXJuIWkodCkmJihcImZ1bmN0aW9uXCI9PXR5cGVvZiBlLkFycmF5QnVmZmVyJiYoXCJmdW5jdGlvblwiPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3P0FycmF5QnVmZmVyLmlzVmlldyh0KTohIXQmJih0IGluc3RhbmNlb2YgRGF0YVZpZXd8fCEhKHQuYnVmZmVyJiZ0LmJ1ZmZlciBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKSkpKX1mdW5jdGlvbiBmKHQpe2lmKHcuaXNGdW5jdGlvbih0KSl7aWYoUylyZXR1cm4gdC5uYW1lO3ZhciBlPXQudG9TdHJpbmcoKSxyPWUubWF0Y2goQSk7cmV0dXJuIHImJnJbMV19fWZ1bmN0aW9uIHModCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD90Lmxlbmd0aDxlP3Q6dC5zbGljZSgwLGUpOnR9ZnVuY3Rpb24gdSh0KXtpZihTfHwhdy5pc0Z1bmN0aW9uKHQpKXJldHVybiB3Lmluc3BlY3QodCk7dmFyIGU9Zih0KSxyPWU/XCI6IFwiK2U6XCJcIjtyZXR1cm5cIltGdW5jdGlvblwiK3IrXCJdXCJ9ZnVuY3Rpb24gaCh0KXtyZXR1cm4gcyh1KHQuYWN0dWFsKSwxMjgpK1wiIFwiK3Qub3BlcmF0b3IrXCIgXCIrcyh1KHQuZXhwZWN0ZWQpLDEyOCl9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3Rocm93IG5ldyBFLkFzc2VydGlvbkVycm9yKHttZXNzYWdlOnIsYWN0dWFsOnQsZXhwZWN0ZWQ6ZSxvcGVyYXRvcjpuLHN0YWNrU3RhcnRGdW5jdGlvbjppfSl9ZnVuY3Rpb24gZCh0LGUpe3R8fGModCwhMCxlLFwiPT1cIixFLm9rKX1mdW5jdGlvbiBsKHQsZSxyLGYpe2lmKHQ9PT1lKXJldHVybiEwO2lmKGkodCkmJmkoZSkpcmV0dXJuIDA9PT1uKHQsZSk7aWYody5pc0RhdGUodCkmJncuaXNEYXRlKGUpKXJldHVybiB0LmdldFRpbWUoKT09PWUuZ2V0VGltZSgpO2lmKHcuaXNSZWdFeHAodCkmJncuaXNSZWdFeHAoZSkpcmV0dXJuIHQuc291cmNlPT09ZS5zb3VyY2UmJnQuZ2xvYmFsPT09ZS5nbG9iYWwmJnQubXVsdGlsaW5lPT09ZS5tdWx0aWxpbmUmJnQubGFzdEluZGV4PT09ZS5sYXN0SW5kZXgmJnQuaWdub3JlQ2FzZT09PWUuaWdub3JlQ2FzZTtpZihudWxsIT09dCYmXCJvYmplY3RcIj09dHlwZW9mIHR8fG51bGwhPT1lJiZcIm9iamVjdFwiPT10eXBlb2YgZSl7aWYoYSh0KSYmYShlKSYmbyh0KT09PW8oZSkmJiEodCBpbnN0YW5jZW9mIEZsb2F0MzJBcnJheXx8dCBpbnN0YW5jZW9mIEZsb2F0NjRBcnJheSkpcmV0dXJuIDA9PT1uKG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxuZXcgVWludDhBcnJheShlLmJ1ZmZlcikpO2lmKGkodCkhPT1pKGUpKXJldHVybiExO2Y9Znx8e2FjdHVhbDpbXSxleHBlY3RlZDpbXX07dmFyIHM9Zi5hY3R1YWwuaW5kZXhPZih0KTtyZXR1cm4gcyE9PS0xJiZzPT09Zi5leHBlY3RlZC5pbmRleE9mKGUpfHwoZi5hY3R1YWwucHVzaCh0KSxmLmV4cGVjdGVkLnB1c2goZSksYih0LGUscixmKSl9cmV0dXJuIHI/dD09PWU6dD09ZX1mdW5jdGlvbiBwKHQpe3JldHVyblwiW29iamVjdCBBcmd1bWVudHNdXCI9PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBiKHQsZSxyLG4pe2lmKG51bGw9PT10fHx2b2lkIDA9PT10fHxudWxsPT09ZXx8dm9pZCAwPT09ZSlyZXR1cm4hMTtpZih3LmlzUHJpbWl0aXZlKHQpfHx3LmlzUHJpbWl0aXZlKGUpKXJldHVybiB0PT09ZTtpZihyJiZPYmplY3QuZ2V0UHJvdG90eXBlT2YodCkhPT1PYmplY3QuZ2V0UHJvdG90eXBlT2YoZSkpcmV0dXJuITE7dmFyIGk9cCh0KSxvPXAoZSk7aWYoaSYmIW98fCFpJiZvKXJldHVybiExO2lmKGkpcmV0dXJuIHQ9TS5jYWxsKHQpLGU9TS5jYWxsKGUpLGwodCxlLHIpO3ZhciBhLGYscz1rKHQpLHU9ayhlKTtpZihzLmxlbmd0aCE9PXUubGVuZ3RoKXJldHVybiExO2ZvcihzLnNvcnQoKSx1LnNvcnQoKSxmPXMubGVuZ3RoLTE7Zj49MDtmLS0paWYoc1tmXSE9PXVbZl0pcmV0dXJuITE7Zm9yKGY9cy5sZW5ndGgtMTtmPj0wO2YtLSlpZihhPXNbZl0sIWwodFthXSxlW2FdLHIsbikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdih0LGUscil7bCh0LGUsITApJiZjKHQsZSxyLFwibm90RGVlcFN0cmljdEVxdWFsXCIsdil9ZnVuY3Rpb24geSh0LGUpe2lmKCF0fHwhZSlyZXR1cm4hMTtpZihcIltvYmplY3QgUmVnRXhwXVwiPT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSkpcmV0dXJuIGUudGVzdCh0KTt0cnl7aWYodCBpbnN0YW5jZW9mIGUpcmV0dXJuITB9Y2F0Y2godCl7fXJldHVybiFFcnJvci5pc1Byb3RvdHlwZU9mKGUpJiZlLmNhbGwoe30sdCk9PT0hMH1mdW5jdGlvbiBtKHQpe3ZhciBlO3RyeXt0KCl9Y2F0Y2godCl7ZT10fXJldHVybiBlfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCdcImJsb2NrXCIgYXJndW1lbnQgbXVzdCBiZSBhIGZ1bmN0aW9uJyk7XCJzdHJpbmdcIj09dHlwZW9mIHImJihuPXIscj1udWxsKSxpPW0oZSksbj0ociYmci5uYW1lP1wiIChcIityLm5hbWUrXCIpLlwiOlwiLlwiKSsobj9cIiBcIituOlwiLlwiKSx0JiYhaSYmYyhpLHIsXCJNaXNzaW5nIGV4cGVjdGVkIGV4Y2VwdGlvblwiK24pO3ZhciBvPVwic3RyaW5nXCI9PXR5cGVvZiBuLGE9IXQmJncuaXNFcnJvcihpKSxmPSF0JiZpJiYhcjtpZigoYSYmbyYmeShpLHIpfHxmKSYmYyhpLHIsXCJHb3QgdW53YW50ZWQgZXhjZXB0aW9uXCIrbiksdCYmaSYmciYmIXkoaSxyKXx8IXQmJmkpdGhyb3cgaX12YXIgdz1yKDYwNiksXz1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LE09QXJyYXkucHJvdG90eXBlLnNsaWNlLFM9ZnVuY3Rpb24oKXtyZXR1cm5cImZvb1wiPT09ZnVuY3Rpb24oKXt9Lm5hbWV9KCksRT10LmV4cG9ydHM9ZCxBPS9cXHMqZnVuY3Rpb25cXHMrKFteXFwoXFxzXSopXFxzKi87RS5Bc3NlcnRpb25FcnJvcj1mdW5jdGlvbih0KXt0aGlzLm5hbWU9XCJBc3NlcnRpb25FcnJvclwiLHRoaXMuYWN0dWFsPXQuYWN0dWFsLHRoaXMuZXhwZWN0ZWQ9dC5leHBlY3RlZCx0aGlzLm9wZXJhdG9yPXQub3BlcmF0b3IsdC5tZXNzYWdlPyh0aGlzLm1lc3NhZ2U9dC5tZXNzYWdlLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMSk6KHRoaXMubWVzc2FnZT1oKHRoaXMpLHRoaXMuZ2VuZXJhdGVkTWVzc2FnZT0hMCk7dmFyIGU9dC5zdGFja1N0YXJ0RnVuY3Rpb258fGM7aWYoRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UpRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxlKTtlbHNle3ZhciByPW5ldyBFcnJvcjtpZihyLnN0YWNrKXt2YXIgbj1yLnN0YWNrLGk9ZihlKSxvPW4uaW5kZXhPZihcIlxcblwiK2kpO2lmKG8+PTApe3ZhciBhPW4uaW5kZXhPZihcIlxcblwiLG8rMSk7bj1uLnN1YnN0cmluZyhhKzEpfXRoaXMuc3RhY2s9bn19fSx3LmluaGVyaXRzKEUuQXNzZXJ0aW9uRXJyb3IsRXJyb3IpLEUuZmFpbD1jLEUub2s9ZCxFLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXt0IT1lJiZjKHQsZSxyLFwiPT1cIixFLmVxdWFsKX0sRS5ub3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09ZSYmYyh0LGUscixcIiE9XCIsRS5ub3RFcXVhbCl9LEUuZGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMSl8fGModCxlLHIsXCJkZWVwRXF1YWxcIixFLmRlZXBFcXVhbCl9LEUuZGVlcFN0cmljdEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMCl8fGModCxlLHIsXCJkZWVwU3RyaWN0RXF1YWxcIixFLmRlZXBTdHJpY3RFcXVhbCl9LEUubm90RGVlcEVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtsKHQsZSwhMSkmJmModCxlLHIsXCJub3REZWVwRXF1YWxcIixFLm5vdERlZXBFcXVhbCl9LEUubm90RGVlcFN0cmljdEVxdWFsPXYsRS5zdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dCE9PWUmJmModCxlLHIsXCI9PT1cIixFLnN0cmljdEVxdWFsKX0sRS5ub3RTdHJpY3RFcXVhbD1mdW5jdGlvbih0LGUscil7dD09PWUmJmModCxlLHIsXCIhPT1cIixFLm5vdFN0cmljdEVxdWFsKX0sRS50aHJvd3M9ZnVuY3Rpb24odCxlLHIpe2coITAsdCxlLHIpfSxFLmRvZXNOb3RUaHJvdz1mdW5jdGlvbih0LGUscil7ZyghMSx0LGUscil9LEUuaWZFcnJvcj1mdW5jdGlvbih0KXtpZih0KXRocm93IHR9O3ZhciBrPU9iamVjdC5rZXlzfHxmdW5jdGlvbih0KXt2YXIgZT1bXTtmb3IodmFyIHIgaW4gdClfLmNhbGwodCxyKSYmZS5wdXNoKHIpO3JldHVybiBlfX0pLmNhbGwoZSxyKDM5KSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoOTQpLGE9cig5NyksZj1yKDIpLHM9cig0OTcpLHU9cig2Nyk7ZihuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIHI9MTYtdGhpcy5fYWxlbiUxNjtyPDE2JiYocj1uZXcgZShyKSxyLmZpbGwoMCksdGhpcy5fZ2hhc2gudXBkYXRlKHIpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKHQpOnRoaXMuX2doYXNoLnVwZGF0ZShuKSx0aGlzLl9sZW4rPXQubGVuZ3RoLG59LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt2YXIgdD11KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQpe2lmKGkodCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIil9ZWxzZSB0aGlzLl9hdXRoVGFnPXQ7dGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVjcnlwdCYmZS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSlyZXR1cm4gdGhpcy5fYXV0aFRhZzt0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbih0KXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPXR9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbih0KXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZSh0KSx0aGlzLl9hbGVuKz10Lmxlbmd0aH19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlLHQuX3ByZXYpO3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sociksdC5fcHJldn0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJldjt0Ll9wcmV2PWU7dmFyIGk9dC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKTtyZXR1cm4gbihpLHIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixuKXt2YXIgbz1yLmxlbmd0aCxhPWkocixlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKG8pLGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYsbj9yOmFdKSxhfXZhciBpPXIoNjcpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIsaSl7Zm9yKHZhciBvLGE9bmV3IHQoXCJcIik7ci5sZW5ndGg7KXtpZigwPT09ZS5fY2FjaGUubGVuZ3RoJiYoZS5fY2FjaGU9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2PW5ldyB0KFwiXCIpKSwhKGUuX2NhY2hlLmxlbmd0aDw9ci5sZW5ndGgpKXthPXQuY29uY2F0KFthLG4oZSxyLGkpXSk7YnJlYWt9bz1lLl9jYWNoZS5sZW5ndGgsYT10LmNvbmNhdChbYSxuKGUsci5zbGljZSgwLG8pLGkpXSkscj1yLnNsaWNlKG8pfXJldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBpLG8sYSxmPS0xLHM9OCx1PTA7KytmPHM7KWk9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSxvPWUmMTw8Ny1mPzEyODowLGE9aVswXV5vLHUrPSgxMjgmYSk+PmYlOCx0Ll9wcmV2PW4odC5fcHJldixyP286YSk7cmV0dXJuIHV9ZnVuY3Rpb24gbihlLHIpe3ZhciBuPWUubGVuZ3RoLGk9LTEsbz1uZXcgdChlLmxlbmd0aCk7Zm9yKGU9dC5jb25jYXQoW2UsbmV3IHQoW3JdKV0pOysraTxuOylvW2ldPWVbaV08PDF8ZVtpKzFdPj43O3JldHVybiBvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyLG4pe3ZhciBpPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksbz1pWzBdXnI7cmV0dXJuIGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYuc2xpY2UoMSksbmV3IHQoW24/cjpvXSldKSxvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGUpfSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLHQuX3ByZXZ9dmFyIGk9cig2Nyk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxuKGUpXSk7dmFyIG89ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxpKHIsbyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixhLGYpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oby5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgaS5BRVMociksdGhpcy5fcHJldj1uZXcgZShhLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLGEuY29weSh0aGlzLl9wcmV2KSx2b2lkKHRoaXMuX21vZGU9dCkpOm5ldyBuKHQscixhKX12YXIgaT1yKDk0KSxvPXIoOTcpLGE9cigyKTthKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCx0aGlzLl9kZWNyeXB0KX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dGhpcy5fY2lwaGVyLnNjcnViKCl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtlW1wiUlNBLVNIQTIyNFwiXT1lLnNoYTIyNFdpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTIyNFwiLGlkOm5ldyB0KFwiMzAyZDMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjA0MDUwMDA0MWNcIixcImhleFwiKX0sZVtcIlJTQS1TSEEyNTZcIl09ZS5zaGEyNTZXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJzaGEyNTZcIixpZDpuZXcgdChcIjMwMzEzMDBkMDYwOTYwODY0ODAxNjUwMzA0MDIwMTA1MDAwNDIwXCIsXCJoZXhcIil9LGVbXCJSU0EtU0hBMzg0XCJdPWUuc2hhMzg0V2l0aFJTQUVuY3J5cHRpb249e3NpZ246XCJyc2FcIixoYXNoOlwic2hhMzg0XCIsaWQ6bmV3IHQoXCIzMDQxMzAwZDA2MDk2MDg2NDgwMTY1MDMwNDAyMDIwNTAwMDQzMFwiLFwiaGV4XCIpfSxlW1wiUlNBLVNIQTUxMlwiXT1lLnNoYTUxMldpdGhSU0FFbmNyeXB0aW9uPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTUxMlwiLGlkOm5ldyB0KFwiMzA1MTMwMGQwNjA5NjA4NjQ4MDE2NTAzMDQwMjAzMDUwMDA0NDBcIixcImhleFwiKX0sZVtcIlJTQS1TSEExXCJdPXtzaWduOlwicnNhXCIsaGFzaDpcInNoYTFcIixpZDpuZXcgdChcIjMwMjEzMDA5MDYwNTJiMGUwMzAyMWEwNTAwMDQxNFwiLFwiaGV4XCIpfSxlW1wiZWNkc2Etd2l0aC1TSEExXCJdPXtzaWduOlwiZWNkc2FcIixoYXNoOlwic2hhMVwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGUuRFNBPWVbXCJEU0EtU0hBMVwiXT1lW1wiRFNBLVNIQVwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGExXCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEEyMjRcIl09ZVtcIkRTQS1XSVRILVNIQTIyNFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGEyMjRcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVNIQTI1NlwiXT1lW1wiRFNBLVdJVEgtU0hBMjU2XCJdPXtzaWduOlwiZHNhXCIsaGFzaDpcInNoYTI1NlwiLGlkOm5ldyB0KFwiXCIsXCJoZXhcIil9LGVbXCJEU0EtU0hBMzg0XCJdPWVbXCJEU0EtV0lUSC1TSEEzODRcIl09e3NpZ246XCJkc2FcIixoYXNoOlwic2hhMzg0XCIsaWQ6bmV3IHQoXCJcIixcImhleFwiKX0sZVtcIkRTQS1TSEE1MTJcIl09ZVtcIkRTQS1XSVRILVNIQTUxMlwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJzaGE1MTJcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiRFNBLVJJUEVNRDE2MFwiXT17c2lnbjpcImRzYVwiLGhhc2g6XCJybWQxNjBcIixpZDpuZXcgdChcIlwiLFwiaGV4XCIpfSxlW1wiUlNBLVJJUEVNRDE2MFwiXT1lLnJpcGVtZDE2MFdpdGhSU0E9e3NpZ246XCJyc2FcIixoYXNoOlwicm1kMTYwXCIsaWQ6bmV3IHQoXCIzMDIxMzAwOTA2MDUyYjI0MDMwMjAxMDUwMDA0MTRcIixcImhleFwiKX0sZVtcIlJTQS1NRDVcIl09ZS5tZDVXaXRoUlNBRW5jcnlwdGlvbj17c2lnbjpcInJzYVwiLGhhc2g6XCJtZDVcIixpZDpuZXcgdChcIjMwMjAzMDBjMDYwODJhODY0ODg2ZjcwZDAyMDUwNTAwMDQxMFwiLFwiaGV4XCIpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZVtcIjEuMy4xMzIuMC4xMFwiXT1cInNlY3AyNTZrMVwiLGVbXCIxLjMuMTMyLjAuMzNcIl09XCJwMjI0XCIsZVtcIjEuMi44NDAuMTAwNDUuMy4xLjFcIl09XCJwMTkyXCIsZVtcIjEuMi44NDAuMTAwNDUuMy4xLjdcIl09XCJwMjU2XCIsZVtcIjEuMy4xMzIuMC4zNFwiXT1cInAzODRcIixlW1wiMS4zLjEzMi4wLjM1XCJdPVwicDUyMVwifSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI7XCJvYmplY3RcIiE9dHlwZW9mIHR8fGUuaXNCdWZmZXIodCl8fChyPXQucGFzc3BocmFzZSx0PXQua2V5KSxcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCkpO3ZhciBuLGEscz1mKHQsciksdT1zLnRhZyxoPXMuZGF0YTtzd2l0Y2godSl7Y2FzZVwiUFVCTElDIEtFWVwiOnN3aXRjaChhPW8uUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm4gYS5zdWJqZWN0UHJpdmF0ZUtleT1hLnN1YmplY3RQdWJsaWNLZXkse3R5cGU6XCJlY1wiLGRhdGE6YX07Y2FzZVwiMS4yLjg0MC4xMDA0MC40LjFcIjpyZXR1cm4gYS5hbGdvcml0aG0ucGFyYW1zLnB1Yl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHVibGljS2V5LmRhdGEsXCJkZXJcIikse3R5cGU6XCJkc2FcIixkYXRhOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIkVOQ1JZUFRFRCBQUklWQVRFIEtFWVwiOmg9by5FbmNyeXB0ZWRQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLGg9aShoLHIpO2Nhc2VcIlBSSVZBVEUgS0VZXCI6c3dpdGNoKGE9by5Qcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLG49YS5hbGdvcml0aG0uYWxnb3JpdGhtLmpvaW4oXCIuXCIpKXtjYXNlXCIxLjIuODQwLjExMzU0OS4xLjEuMVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGEuc3ViamVjdFByaXZhdGVLZXksXCJkZXJcIik7Y2FzZVwiMS4yLjg0MC4xMDA0NS4yLjFcIjpyZXR1cm57Y3VydmU6YS5hbGdvcml0aG0uY3VydmUscHJpdmF0ZUtleTpvLkVDUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKS5wcml2YXRlS2V5fTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHJpdl9rZXk9by5EU0FwYXJhbS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKSx7dHlwZTpcImRzYVwiLHBhcmFtczphLmFsZ29yaXRobS5wYXJhbXN9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgaWQgXCIrbil9dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KTtjYXNlXCJSU0EgUFVCTElDIEtFWVwiOnJldHVybiBvLlJTQVB1YmxpY0tleS5kZWNvZGUoaCxcImRlclwiKTtjYXNlXCJSU0EgUFJJVkFURSBLRVlcIjpyZXR1cm4gby5SU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIkRTQSBQUklWQVRFIEtFWVwiOnJldHVybnt0eXBlOlwiZHNhXCIscGFyYW1zOm8uRFNBUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKX07Y2FzZVwiRUMgUFJJVkFURSBLRVlcIjpyZXR1cm4gaD1vLkVDUHJpdmF0ZUtleS5kZWNvZGUoaCxcImRlclwiKSx7Y3VydmU6aC5wYXJhbWV0ZXJzLnZhbHVlLHByaXZhdGVLZXk6aC5wcml2YXRlS2V5fTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSl9fWZ1bmN0aW9uIGkodCxyKXt2YXIgbj10LmFsZ29yaXRobS5kZWNyeXB0LmtkZS5rZGVwYXJhbXMuc2FsdCxpPXBhcnNlSW50KHQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5pdGVycy50b1N0cmluZygpLDEwKSxvPWFbdC5hbGdvcml0aG0uZGVjcnlwdC5jaXBoZXIuYWxnby5qb2luKFwiLlwiKV0sZj10LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5pdixoPXQuc3ViamVjdFByaXZhdGVLZXksYz1wYXJzZUludChvLnNwbGl0KFwiLVwiKVsxXSwxMCkvOCxkPXUucGJrZGYyU3luYyhyLG4saSxjKSxsPXMuY3JlYXRlRGVjaXBoZXJpdihvLGQsZikscD1bXTtyZXR1cm4gcC5wdXNoKGwudXBkYXRlKGgpKSxwLnB1c2gobC5maW5hbCgpKSxlLmNvbmNhdChwKX12YXIgbz1yKDUyOCksYT1yKDQ2NiksZj1yKDUyOSkscz1yKDIxOSksdT1yKDE1MSk7dC5leHBvcnRzPW4sbi5zaWduYXR1cmU9by5zaWduYXR1cmV9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3JldHVybiBhLmNhbGwodGhpcyxlKSxmLmlzQnVmZmVyKHQpPyh0aGlzLmJhc2U9dCx0aGlzLm9mZnNldD0wLHZvaWQodGhpcy5sZW5ndGg9dC5sZW5ndGgpKTp2b2lkIHRoaXMuZXJyb3IoXCJJbnB1dCBub3QgQnVmZmVyXCIpfWZ1bmN0aW9uIGkodCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXRoaXMubGVuZ3RoPTAsdGhpcy52YWx1ZT10Lm1hcChmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGl8fCh0PW5ldyBpKHQsZSkpLHRoaXMubGVuZ3RoKz10Lmxlbmd0aCx0fSx0aGlzKTtlbHNlIGlmKFwibnVtYmVyXCI9PXR5cGVvZiB0KXtpZighKDA8PXQmJnQ8PTI1NSkpcmV0dXJuIGUuZXJyb3IoXCJub24tYnl0ZSBFbmNvZGVyQnVmZmVyIHZhbHVlXCIpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD0xfWVsc2UgaWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPWYuYnl0ZUxlbmd0aCh0KTtlbHNle2lmKCFmLmlzQnVmZmVyKHQpKXJldHVybiBlLmVycm9yKFwiVW5zdXBwb3J0ZWQgdHlwZTogXCIrdHlwZW9mIHQpO3RoaXMudmFsdWU9dCx0aGlzLmxlbmd0aD10Lmxlbmd0aH19dmFyIG89cigyKSxhPXIoNjgpLlJlcG9ydGVyLGY9cigxKS5CdWZmZXI7byhuLGEpLGUuRGVjb2RlckJ1ZmZlcj1uLG4ucHJvdG90eXBlLnNhdmU9ZnVuY3Rpb24oKXtyZXR1cm57b2Zmc2V0OnRoaXMub2Zmc2V0LHJlcG9ydGVyOmEucHJvdG90eXBlLnNhdmUuY2FsbCh0aGlzKX19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gZS5vZmZzZXQ9dC5vZmZzZXQsZS5sZW5ndGg9dGhpcy5vZmZzZXQsdGhpcy5vZmZzZXQ9dC5vZmZzZXQsYS5wcm90b3R5cGUucmVzdG9yZS5jYWxsKHRoaXMsdC5yZXBvcnRlciksZX0sbi5wcm90b3R5cGUuaXNFbXB0eT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm9mZnNldD09PXRoaXMubGVuZ3RofSxuLnByb3RvdHlwZS5yZWFkVUludDg9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub2Zmc2V0KzE8PXRoaXMubGVuZ3RoP3RoaXMuYmFzZS5yZWFkVUludDgodGhpcy5vZmZzZXQrKywhMCk6dGhpcy5lcnJvcih0fHxcIkRlY29kZXJCdWZmZXIgb3ZlcnJ1blwiKX0sbi5wcm90b3R5cGUuc2tpcD1mdW5jdGlvbih0LGUpe2lmKCEodGhpcy5vZmZzZXQrdDw9dGhpcy5sZW5ndGgpKXJldHVybiB0aGlzLmVycm9yKGV8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpO3ZhciByPW5ldyBuKHRoaXMuYmFzZSk7cmV0dXJuIHIuX3JlcG9ydGVyU3RhdGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxyLm9mZnNldD10aGlzLm9mZnNldCxyLmxlbmd0aD10aGlzLm9mZnNldCt0LHRoaXMub2Zmc2V0Kz10LHJ9LG4ucHJvdG90eXBlLnJhdz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5iYXNlLnNsaWNlKHQ/dC5vZmZzZXQ6dGhpcy5vZmZzZXQsdGhpcy5sZW5ndGgpfSxlLkVuY29kZXJCdWZmZXI9aSxpLnByb3RvdHlwZS5qb2luPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHR8fCh0PW5ldyBmKHRoaXMubGVuZ3RoKSksZXx8KGU9MCksMD09PXRoaXMubGVuZ3RoP3Q6KEFycmF5LmlzQXJyYXkodGhpcy52YWx1ZSk/dGhpcy52YWx1ZS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3Iuam9pbih0LGUpLGUrPXIubGVuZ3RofSk6KFwibnVtYmVyXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3RbZV09dGhpcy52YWx1ZTpcInN0cmluZ1wiPT10eXBlb2YgdGhpcy52YWx1ZT90LndyaXRlKHRoaXMudmFsdWUsZSk6Zi5pc0J1ZmZlcih0aGlzLnZhbHVlKSYmdGhpcy52YWx1ZS5jb3B5KHQsZSksZSs9dGhpcy5sZW5ndGgpLHQpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5fcmV2ZXJzZT1mdW5jdGlvbih0KXt2YXIgZT17fTtyZXR1cm4gT2JqZWN0LmtleXModCkuZm9yRWFjaChmdW5jdGlvbihyKXsoMHxyKT09ciYmKHJ8PTApO3ZhciBuPXRbcl07ZVtuXT1yfSksZX0sbi5kZXI9cig1MzMpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXt1Lk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXQucmVhZFVJbnQ4KGUpO2lmKHQuaXNFcnJvcihyKSlyZXR1cm4gcjt2YXIgbj1jLnRhZ0NsYXNzW3I+PjZdLGk9MD09PSgzMiZyKTtpZigzMT09PSgzMSZyKSl7dmFyIG89cjtmb3Iocj0wOzEyOD09PSgxMjgmbyk7KXtpZihvPXQucmVhZFVJbnQ4KGUpLHQuaXNFcnJvcihvKSlyZXR1cm4gbztyPDw9NyxyfD0xMjcmb319ZWxzZSByJj0zMTt2YXIgYT1jLnRhZ1tyXTtyZXR1cm57Y2xzOm4scHJpbWl0aXZlOmksdGFnOnIsdGFnU3RyOmF9fWZ1bmN0aW9uIGEodCxlLHIpe3ZhciBuPXQucmVhZFVJbnQ4KHIpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjtpZighZSYmMTI4PT09bilyZXR1cm4gbnVsbDtpZigwPT09KDEyOCZuKSlyZXR1cm4gbjt2YXIgaT0xMjcmbjtpZihpPj00KXJldHVybiB0LmVycm9yKFwibGVuZ3RoIG9jdGVjdCBpcyB0b28gbG9uZ1wiKTtuPTA7Zm9yKHZhciBvPTA7bzxpO28rKyl7bjw8PTg7dmFyIGE9dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKGEpKXJldHVybiBhO258PWF9cmV0dXJuIG59dmFyIGY9cigyKSxzPXIoMTAwKSx1PXMuYmFzZSxoPXMuYmlnbnVtLGM9cy5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2YgdS5EZWNvZGVyQnVmZmVyfHwodD1uZXcgdS5EZWNvZGVyQnVmZmVyKHQsZSkpLHRoaXMudHJlZS5fZGVjb2RlKHQsZSl9LGYoaSx1Lk5vZGUpLGkucHJvdG90eXBlLl9wZWVrVGFnPWZ1bmN0aW9uKHQsZSxyKXtpZih0LmlzRW1wdHkoKSlyZXR1cm4hMTt2YXIgbj10LnNhdmUoKSxpPW8odCwnRmFpbGVkIHRvIHBlZWsgdGFnOiBcIicrZSsnXCInKTtyZXR1cm4gdC5pc0Vycm9yKGkpP2k6KHQucmVzdG9yZShuKSxpLnRhZz09PWV8fGkudGFnU3RyPT09ZXx8aS50YWdTdHIrXCJvZlwiPT09ZXx8cil9LGkucHJvdG90eXBlLl9kZWNvZGVUYWc9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPW8odCwnRmFpbGVkIHRvIGRlY29kZSB0YWcgb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO3ZhciBpPWEodCxuLnByaW1pdGl2ZSwnRmFpbGVkIHRvIGdldCBsZW5ndGggb2YgXCInK2UrJ1wiJyk7aWYodC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKCFyJiZuLnRhZyE9PWUmJm4udGFnU3RyIT09ZSYmbi50YWdTdHIrXCJvZlwiIT09ZSlyZXR1cm4gdC5lcnJvcignRmFpbGVkIHRvIG1hdGNoIHRhZzogXCInK2UrJ1wiJyk7aWYobi5wcmltaXRpdmV8fG51bGwhPT1pKXJldHVybiB0LnNraXAoaSwnRmFpbGVkIHRvIG1hdGNoIGJvZHkgb2Y6IFwiJytlKydcIicpO3ZhciBmPXQuc2F2ZSgpLHM9dGhpcy5fc2tpcFVudGlsRW5kKHQsJ0ZhaWxlZCB0byBza2lwIGluZGVmaW5pdGUgbGVuZ3RoIGJvZHk6IFwiJyt0aGlzLnRhZysnXCInKTtyZXR1cm4gdC5pc0Vycm9yKHMpP3M6KGk9dC5vZmZzZXQtZi5vZmZzZXQsdC5yZXN0b3JlKGYpLHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJykpfSxpLnByb3RvdHlwZS5fc2tpcFVudGlsRW5kPWZ1bmN0aW9uKHQsZSl7Zm9yKDs7KXt2YXIgcj1vKHQsZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWEodCxyLnByaW1pdGl2ZSxlKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk7aWYoaT1yLnByaW1pdGl2ZXx8bnVsbCE9PW4/dC5za2lwKG4pOnRoaXMuX3NraXBVbnRpbEVuZCh0LGUpLHQuaXNFcnJvcihpKSlyZXR1cm4gaTtpZihcImVuZFwiPT09ci50YWdTdHIpYnJlYWt9fSxpLnByb3RvdHlwZS5fZGVjb2RlTGlzdD1mdW5jdGlvbih0LGUscixuKXtmb3IodmFyIGk9W107IXQuaXNFbXB0eSgpOyl7dmFyIG89dGhpcy5fcGVla1RhZyh0LFwiZW5kXCIpO2lmKHQuaXNFcnJvcihvKSlyZXR1cm4gbzt2YXIgYT1yLmRlY29kZSh0LFwiZGVyXCIsbik7aWYodC5pc0Vycm9yKGEpJiZvKWJyZWFrO2kucHVzaChhKX1yZXR1cm4gaX0saS5wcm90b3R5cGUuX2RlY29kZVN0cj1mdW5jdGlvbih0LGUpe2lmKFwiYml0c3RyXCI9PT1lKXt2YXIgcj10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3Iocik/cjp7dW51c2VkOnIsZGF0YTp0LnJhdygpfX1pZihcImJtcHN0clwiPT09ZSl7dmFyIG49dC5yYXcoKTtpZihuLmxlbmd0aCUyPT09MSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBibXBzdHIgbGVuZ3RoIG1pc21hdGNoXCIpO2Zvcih2YXIgaT1cIlwiLG89MDtvPG4ubGVuZ3RoLzI7bysrKWkrPVN0cmluZy5mcm9tQ2hhckNvZGUobi5yZWFkVUludDE2QkUoMipvKSk7cmV0dXJuIGl9aWYoXCJudW1zdHJcIj09PWUpe3ZhciBhPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNOdW1zdHIoYSk/YTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfWlmKFwib2N0c3RyXCI9PT1lKXJldHVybiB0LnJhdygpO2lmKFwicHJpbnRzdHJcIj09PWUpe3ZhciBmPXQucmF3KCkudG9TdHJpbmcoXCJhc2NpaVwiKTtyZXR1cm4gdGhpcy5faXNQcmludHN0cihmKT9mOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgdW5zdXBwb3J0ZWQgY2hhcmFjdGVyc1wiKX1yZXR1cm4vc3RyJC8udGVzdChlKT90LnJhdygpLnRvU3RyaW5nKCk6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZGVjb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbixpPVtdLG89MDshdC5pc0VtcHR5KCk7KXt2YXIgYT10LnJlYWRVSW50OCgpO288PD03LG98PTEyNyZhLDA9PT0oMTI4JmEpJiYoaS5wdXNoKG8pLG89MCl9MTI4JmEmJmkucHVzaChvKTt2YXIgZj1pWzBdLzQwfDAscz1pWzBdJTQwO2lmKG49cj9pOltmLHNdLmNvbmNhdChpLnNsaWNlKDEpKSxlKXt2YXIgdT1lW24uam9pbihcIiBcIildO3ZvaWQgMD09PXUmJih1PWVbbi5qb2luKFwiLlwiKV0pLHZvaWQgMCE9PXUmJihuPXUpfXJldHVybiBufSxpLnByb3RvdHlwZS5fZGVjb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCkudG9TdHJpbmcoKTtpZihcImdlbnRpbWVcIj09PWUpdmFyIG49MHxyLnNsaWNlKDAsNCksaT0wfHIuc2xpY2UoNCw2KSxvPTB8ci5zbGljZSg2LDgpLGE9MHxyLnNsaWNlKDgsMTApLGY9MHxyLnNsaWNlKDEwLDEyKSxzPTB8ci5zbGljZSgxMiwxNCk7ZWxzZXtpZihcInV0Y3RpbWVcIiE9PWUpcmV0dXJuIHQuZXJyb3IoXCJEZWNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIik7dmFyIG49MHxyLnNsaWNlKDAsMiksaT0wfHIuc2xpY2UoMiw0KSxvPTB8ci5zbGljZSg0LDYpLGE9MHxyLnNsaWNlKDYsOCksZj0wfHIuc2xpY2UoOCwxMCkscz0wfHIuc2xpY2UoMTAsMTIpO249bjw3MD8yZTMrbjoxOTAwK259cmV0dXJuIERhdGUuVVRDKG4saS0xLG8sYSxmLHMsMCl9LGkucHJvdG90eXBlLl9kZWNvZGVOdWxsPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5fZGVjb2RlQm9vbD1mdW5jdGlvbih0KXt2YXIgZT10LnJlYWRVSW50OCgpO3JldHVybiB0LmlzRXJyb3IoZSk/ZTowIT09ZX0saS5wcm90b3R5cGUuX2RlY29kZUludD1mdW5jdGlvbih0LGUpe3ZhciByPXQucmF3KCksbj1uZXcgaChyKTtyZXR1cm4gZSYmKG49ZVtuLnRvU3RyaW5nKDEwKV18fG4pLG59LGkucHJvdG90eXBlLl91c2U9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiYodD10KGUpKSx0Ll9nZXREZWNvZGVyKFwiZGVyXCIpLnRyZWV9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLmVuYz1cImRlclwiLHRoaXMubmFtZT10Lm5hbWUsdGhpcy5lbnRpdHk9dCx0aGlzLnRyZWU9bmV3IGksdGhpcy50cmVlLl9pbml0KHQuYm9keSl9ZnVuY3Rpb24gaSh0KXtoLk5vZGUuY2FsbCh0aGlzLFwiZGVyXCIsdCl9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gdDwxMD9cIjBcIit0OnR9ZnVuY3Rpb24gYSh0LGUscixuKXt2YXIgaTtpZihcInNlcW9mXCI9PT10P3Q9XCJzZXFcIjpcInNldG9mXCI9PT10JiYodD1cInNldFwiKSxjLnRhZ0J5TmFtZS5oYXNPd25Qcm9wZXJ0eSh0KSlpPWMudGFnQnlOYW1lW3RdO2Vsc2V7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHR8fCgwfHQpIT09dClyZXR1cm4gbi5lcnJvcihcIlVua25vd24gdGFnOiBcIit0KTtpPXR9cmV0dXJuIGk+PTMxP24uZXJyb3IoXCJNdWx0aS1vY3RldCB0YWcgZW5jb2RpbmcgdW5zdXBwb3J0ZWRcIik6KGV8fChpfD0zMiksaXw9Yy50YWdDbGFzc0J5TmFtZVtyfHxcInVuaXZlcnNhbFwiXTw8Nil9dmFyIGY9cigyKSxzPXIoMSkuQnVmZmVyLHU9cigxMDApLGg9dS5iYXNlLGM9dS5jb25zdGFudHMuZGVyO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLnRyZWUuX2VuY29kZSh0LGUpLmpvaW4oKX0sZihpLGguTm9kZSksaS5wcm90b3R5cGUuX2VuY29kZUNvbXBvc2l0ZT1mdW5jdGlvbih0LGUscixuKXt2YXIgaT1hKHQsZSxyLHRoaXMucmVwb3J0ZXIpO2lmKG4ubGVuZ3RoPDEyOCl7dmFyIG89bmV3IHMoMik7cmV0dXJuIG9bMF09aSxvWzFdPW4ubGVuZ3RoLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfWZvcih2YXIgZj0xLHU9bi5sZW5ndGg7dT49MjU2O3U+Pj04KWYrKzt2YXIgbz1uZXcgcygyK2YpO29bMF09aSxvWzFdPTEyOHxmO2Zvcih2YXIgdT0xK2YsaD1uLmxlbmd0aDtoPjA7dS0tLGg+Pj04KW9bdV09MjU1Jmg7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoW28sbl0pfSxpLnByb3RvdHlwZS5fZW5jb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzB8dC51bnVzZWQsdC5kYXRhXSk7aWYoXCJibXBzdHJcIj09PWUpe2Zvcih2YXIgcj1uZXcgcygyKnQubGVuZ3RoKSxuPTA7bjx0Lmxlbmd0aDtuKyspci53cml0ZVVJbnQxNkJFKHQuY2hhckNvZGVBdChuKSwyKm4pO3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHIpfXJldHVyblwibnVtc3RyXCI9PT1lP3RoaXMuX2lzTnVtc3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBudW1zdHIgc3VwcG9ydHMgb25seSBkaWdpdHMgYW5kIHNwYWNlXCIpOlwicHJpbnRzdHJcIj09PWU/dGhpcy5faXNQcmludHN0cih0KT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogcHJpbnRzdHIgc3VwcG9ydHMgb25seSBsYXRpbiB1cHBlciBhbmQgbG93ZXIgY2FzZSBsZXR0ZXJzLCBkaWdpdHMsIHNwYWNlLCBhcG9zdHJvcGhlLCBsZWZ0IGFuZCByaWd0aCBwYXJlbnRoZXNpcywgcGx1cyBzaWduLCBjb21tYSwgaHlwaGVuLCBkb3QsIHNsYXNoLCBjb2xvbiwgZXF1YWwgc2lnbiwgcXVlc3Rpb24gbWFya1wiKTovc3RyJC8udGVzdChlKT90aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBvZiBzdHJpbmcgdHlwZTogXCIrZStcIiB1bnN1cHBvcnRlZFwiKX0saS5wcm90b3R5cGUuX2VuY29kZU9iamlkPWZ1bmN0aW9uKHQsZSxyKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJzdHJpbmcgb2JqaWQgZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwIGZvdW5kXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwib2JqaWQgbm90IGZvdW5kIGluIHZhbHVlcyBtYXBcIik7dD1lW3RdLnNwbGl0KC9bXFxzXFwuXSsvZyk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1lbHNlIGlmKEFycmF5LmlzQXJyYXkodCkpe3Q9dC5zbGljZSgpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXRbbl18PTB9aWYoIUFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCgpIHNob3VsZCBiZSBlaXRoZXIgYXJyYXkgb3Igc3RyaW5nLCBnb3Q6IFwiK0pTT04uc3RyaW5naWZ5KHQpKTtpZighcil7aWYodFsxXT49NDApcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTZWNvbmQgb2JqaWQgaWRlbnRpZmllciBPT0JcIik7dC5zcGxpY2UoMCwyLDQwKnRbMF0rdFsxXSl9Zm9yKHZhciBpPTAsbj0wO248dC5sZW5ndGg7bisrKXt2YXIgbz10W25dO2ZvcihpKys7bz49MTI4O28+Pj03KWkrK31mb3IodmFyIGE9bmV3IHMoaSksZj1hLmxlbmd0aC0xLG49dC5sZW5ndGgtMTtuPj0wO24tLSl7dmFyIG89dFtuXTtmb3IoYVtmLS1dPTEyNyZvOyhvPj49Nyk+MDspYVtmLS1dPTEyOHwxMjcmb31yZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKX0saS5wcm90b3R5cGUuX2VuY29kZVRpbWU9ZnVuY3Rpb24odCxlKXt2YXIgcixuPW5ldyBEYXRlKHQpO3JldHVyblwiZ2VudGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOlwidXRjdGltZVwiPT09ZT9yPVtvKG4uZ2V0RnVsbFllYXIoKSUxMDApLG8obi5nZXRVVENNb250aCgpKzEpLG8obi5nZXRVVENEYXRlKCkpLG8obi5nZXRVVENIb3VycygpKSxvKG4uZ2V0VVRDTWludXRlcygpKSxvKG4uZ2V0VVRDU2Vjb25kcygpKSxcIlpcIl0uam9pbihcIlwiKTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2RpbmcgXCIrZStcIiB0aW1lIGlzIG5vdCBzdXBwb3J0ZWQgeWV0XCIpLHRoaXMuX2VuY29kZVN0cihyLFwib2N0c3RyXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlTnVsbD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFwiXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlSW50PWZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpe2lmKCFlKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiU3RyaW5nIGludCBvciBlbnVtIGdpdmVuLCBidXQgbm8gdmFsdWVzIG1hcFwiKTtpZighZS5oYXNPd25Qcm9wZXJ0eSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlZhbHVlcyBtYXAgZG9lc24ndCBjb250YWluOiBcIitKU09OLnN0cmluZ2lmeSh0KSk7dD1lW3RdfWlmKFwibnVtYmVyXCIhPXR5cGVvZiB0JiYhcy5pc0J1ZmZlcih0KSl7dmFyIHI9dC50b0FycmF5KCk7IXQuc2lnbiYmMTI4JnJbMF0mJnIudW5zaGlmdCgwKSx0PW5ldyBzKHIpfWlmKHMuaXNCdWZmZXIodCkpe3ZhciBuPXQubGVuZ3RoOzA9PT10Lmxlbmd0aCYmbisrO3ZhciBpPW5ldyBzKG4pO3JldHVybiB0LmNvcHkoaSksMD09PXQubGVuZ3RoJiYoaVswXT0wKSx0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGkpfWlmKHQ8MTI4KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2lmKHQ8MjU2KXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKFswLHRdKTtmb3IodmFyIG49MSxvPXQ7bz49MjU2O28+Pj04KW4rKztmb3IodmFyIGk9bmV3IEFycmF5KG4pLG89aS5sZW5ndGgtMTtvPj0wO28tLSlpW29dPTI1NSZ0LHQ+Pj04O3JldHVybiAxMjgmaVswXSYmaS51bnNoaWZ0KDApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIobmV3IHMoaSkpfSxpLnByb3RvdHlwZS5fZW5jb2RlQm9vbD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0PzI1NTowKX0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldEVuY29kZXIoXCJkZXJcIikudHJlZX0saS5wcm90b3R5cGUuX3NraXBEZWZhdWx0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbixpPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09aS5kZWZhdWx0KXJldHVybiExO3ZhciBvPXQuam9pbigpO2lmKHZvaWQgMD09PWkuZGVmYXVsdEJ1ZmZlciYmKGkuZGVmYXVsdEJ1ZmZlcj10aGlzLl9lbmNvZGVWYWx1ZShpLmRlZmF1bHQsZSxyKS5qb2luKCkpLG8ubGVuZ3RoIT09aS5kZWZhdWx0QnVmZmVyLmxlbmd0aClyZXR1cm4hMTtmb3Iobj0wO248by5sZW5ndGg7bisrKWlmKG9bbl0hPT1pLmRlZmF1bHRCdWZmZXJbbl0pcmV0dXJuITE7cmV0dXJuITB9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGksZil7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQscixpKTthLmNhbGwodGhpcyksdGhpcy5fZmluSUQ9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDFdKV0pLGk9ZS5jb25jYXQoW2ksbmV3IGUoWzAsMCwwLDJdKV0pLHRoaXMuX2NpcGhlcj1uZXcgby5BRVMociksdGhpcy5fcHJldj1uZXcgZShpLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLHRoaXMuX2FsZW49MCx0aGlzLl9sZW49MCxpLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT10O3ZhciB1PW5ldyBlKDQpO3UuZmlsbCgwKSx0aGlzLl9naGFzaD1uZXcgcyh0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHUpKSx0aGlzLl9hdXRoVGFnPW51bGwsdGhpcy5fY2FsbGVkPSExfWZ1bmN0aW9uIGkodCxlKXt2YXIgcj0wO3QubGVuZ3RoIT09ZS5sZW5ndGgmJnIrKztmb3IodmFyIG49TWF0aC5taW4odC5sZW5ndGgsZS5sZW5ndGgpLGk9LTE7KytpPG47KXIrPXRbaV1eZVtpXTtyZXR1cm4gcn12YXIgbz1yKDEwMSksYT1yKDEwMyksZj1yKDIpLHM9cig1NDEpLHU9cig2OSk7ZihuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7aWYoIXRoaXMuX2NhbGxlZCYmdGhpcy5fYWxlbil7dmFyIHI9MTYtdGhpcy5fYWxlbiUxNjtyPDE2JiYocj1uZXcgZShyKSxyLmZpbGwoMCksdGhpcy5fZ2hhc2gudXBkYXRlKHIpKX10aGlzLl9jYWxsZWQ9ITA7dmFyIG49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCk7cmV0dXJuIHRoaXMuX2RlY3J5cHQ/dGhpcy5fZ2hhc2gudXBkYXRlKHQpOnRoaXMuX2doYXNoLnVwZGF0ZShuKSx0aGlzLl9sZW4rPXQubGVuZ3RoLG59LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe2lmKHRoaXMuX2RlY3J5cHQmJiF0aGlzLl9hdXRoVGFnKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKTt2YXIgdD11KHRoaXMuX2doYXNoLmZpbmFsKDgqdGhpcy5fYWxlbiw4KnRoaXMuX2xlbiksdGhpcy5fY2lwaGVyLmVuY3J5cHRCbG9jayh0aGlzLl9maW5JRCkpO2lmKHRoaXMuX2RlY3J5cHQpe2lmKGkodCx0aGlzLl9hdXRoVGFnKSl0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCBzdGF0ZSBvciB1bmFibGUgdG8gYXV0aGVudGljYXRlIGRhdGFcIil9ZWxzZSB0aGlzLl9hdXRoVGFnPXQ7dGhpcy5fY2lwaGVyLnNjcnViKCl9LG4ucHJvdG90eXBlLmdldEF1dGhUYWc9ZnVuY3Rpb24oKXtpZighdGhpcy5fZGVjcnlwdCYmZS5pc0J1ZmZlcih0aGlzLl9hdXRoVGFnKSlyZXR1cm4gdGhpcy5fYXV0aFRhZzt0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIGdldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuc2V0QXV0aFRhZz1mdW5jdGlvbih0KXtpZighdGhpcy5fZGVjcnlwdCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBhdXRoIHRhZyBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKTt0aGlzLl9hdXRoVGFnPXR9LG4ucHJvdG90eXBlLnNldEFBRD1mdW5jdGlvbih0KXtpZih0aGlzLl9jYWxsZWQpdGhyb3cgbmV3IEVycm9yKFwiQXR0ZW1wdGluZyB0byBzZXQgQUFEIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2doYXNoLnVwZGF0ZSh0KSx0aGlzLl9hbGVuKz10Lmxlbmd0aH19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiBPYmplY3Qua2V5cyhhKX12YXIgaT1yKDU0MCk7ZS5jcmVhdGVDaXBoZXI9ZS5DaXBoZXI9aS5jcmVhdGVDaXBoZXIsZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PWkuY3JlYXRlQ2lwaGVyaXY7dmFyIG89cig1MzkpO2UuY3JlYXRlRGVjaXBoZXI9ZS5EZWNpcGhlcj1vLmNyZWF0ZURlY2lwaGVyLGUuY3JlYXRlRGVjaXBoZXJpdj1lLkRlY2lwaGVyaXY9by5jcmVhdGVEZWNpcGhlcml2O3ZhciBhPXIoMTQ3KTtlLmxpc3RDaXBoZXJzPWUuZ2V0Q2lwaGVycz1ufSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9bihlLHQuX3ByZXYpO3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sociksdC5fcHJldn0sZS5kZWNyeXB0PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5fcHJldjt0Ll9wcmV2PWU7dmFyIGk9dC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKTtyZXR1cm4gbihpLHIpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixuKXt2YXIgbz1yLmxlbmd0aCxhPWkocixlLl9jYWNoZSk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKG8pLGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYsbj9yOmFdKSxhfXZhciBpPXIoNjkpO2UuZW5jcnlwdD1mdW5jdGlvbihlLHIsaSl7Zm9yKHZhciBvLGE9bmV3IHQoXCJcIik7ci5sZW5ndGg7KXtpZigwPT09ZS5fY2FjaGUubGVuZ3RoJiYoZS5fY2FjaGU9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxlLl9wcmV2PW5ldyB0KFwiXCIpKSwhKGUuX2NhY2hlLmxlbmd0aDw9ci5sZW5ndGgpKXthPXQuY29uY2F0KFthLG4oZSxyLGkpXSk7YnJlYWt9bz1lLl9jYWNoZS5sZW5ndGgsYT10LmNvbmNhdChbYSxuKGUsci5zbGljZSgwLG8pLGkpXSkscj1yLnNsaWNlKG8pfXJldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcih0LGUscil7Zm9yKHZhciBpLG8sYSxmPS0xLHM9OCx1PTA7KytmPHM7KWk9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayh0Ll9wcmV2KSxvPWUmMTw8Ny1mPzEyODowLGE9aVswXV5vLHUrPSgxMjgmYSk+PmYlOCx0Ll9wcmV2PW4odC5fcHJldixyP286YSk7cmV0dXJuIHV9ZnVuY3Rpb24gbihlLHIpe3ZhciBuPWUubGVuZ3RoLGk9LTEsbz1uZXcgdChlLmxlbmd0aCk7Zm9yKGU9dC5jb25jYXQoW2UsbmV3IHQoW3JdKV0pOysraTxuOylvW2ldPWVbaV08PDF8ZVtpKzFdPj43O3JldHVybiBvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoZSxyLG4pe3ZhciBpPWUuX2NpcGhlci5lbmNyeXB0QmxvY2soZS5fcHJldiksbz1pWzBdXnI7cmV0dXJuIGUuX3ByZXY9dC5jb25jYXQoW2UuX3ByZXYuc2xpY2UoMSksbmV3IHQoW24/cjpvXSldKSxvfWUuZW5jcnlwdD1mdW5jdGlvbihlLG4saSl7Zm9yKHZhciBvPW4ubGVuZ3RoLGE9bmV3IHQobyksZj0tMTsrK2Y8bzspYVtmXT1yKGUsbltmXSxpKTtyZXR1cm4gYX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUpe2UuZW5jcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKGUpfSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5fY2lwaGVyLmRlY3J5cHRCbG9jayhlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdC5fcHJldj10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLHQuX3ByZXZ9dmFyIGk9cig2OSk7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscil7Zm9yKDtlLl9jYWNoZS5sZW5ndGg8ci5sZW5ndGg7KWUuX2NhY2hlPXQuY29uY2F0KFtlLl9jYWNoZSxuKGUpXSk7dmFyIG89ZS5fY2FjaGUuc2xpY2UoMCxyLmxlbmd0aCk7cmV0dXJuIGUuX2NhY2hlPWUuX2NhY2hlLnNsaWNlKHIubGVuZ3RoKSxpKHIsbyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixhLGYpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oby5jYWxsKHRoaXMpLHRoaXMuX2NpcGhlcj1uZXcgaS5BRVMociksdGhpcy5fcHJldj1uZXcgZShhLmxlbmd0aCksdGhpcy5fY2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fc2VjQ2FjaGU9bmV3IGUoXCJcIiksdGhpcy5fZGVjcnlwdD1mLGEuY29weSh0aGlzLl9wcmV2KSx2b2lkKHRoaXMuX21vZGU9dCkpOm5ldyBuKHQscixhKX12YXIgaT1yKDEwMSksbz1yKDEwMyksYT1yKDIpO2EobixvKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0LHRoaXMuX2RlY3J5cHQpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt0aGlzLl9jaXBoZXIuc2NydWIoKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4oKXt0aGlzLmluaXQoKSx0aGlzLl93PWwsYy5jYWxsKHRoaXMsNjQsNTYpfWZ1bmN0aW9uIGkodCxlLHIpe3JldHVybiByXnQmKGVecil9ZnVuY3Rpb24gbyh0LGUscil7cmV0dXJuIHQmZXxyJih0fGUpfWZ1bmN0aW9uIGEodCl7cmV0dXJuKHQ+Pj4yfHQ8PDMwKV4odD4+PjEzfHQ8PDE5KV4odD4+PjIyfHQ8PDEwKX1mdW5jdGlvbiBmKHQpe3JldHVybih0Pj4+Nnx0PDwyNileKHQ+Pj4xMXx0PDwyMSleKHQ+Pj4yNXx0PDw3KX1mdW5jdGlvbiBzKHQpe3JldHVybih0Pj4+N3x0PDwyNSleKHQ+Pj4xOHx0PDwxNCledD4+PjN9ZnVuY3Rpb24gdSh0KXtyZXR1cm4odD4+PjE3fHQ8PDE1KV4odD4+PjE5fHQ8PDEzKV50Pj4+MTB9dmFyIGg9cigyKSxjPXIoNjApLGQ9WzExMTYzNTI0MDgsMTg5OTQ0NzQ0MSwzMDQ5MzIzNDcxLDM5MjEwMDk1NzMsOTYxOTg3MTYzLDE1MDg5NzA5OTMsMjQ1MzYzNTc0OCwyODcwNzYzMjIxLDM2MjQzODEwODAsMzEwNTk4NDAxLDYwNzIyNTI3OCwxNDI2ODgxOTg3LDE5MjUwNzgzODgsMjE2MjA3ODIwNiwyNjE0ODg4MTAzLDMyNDgyMjI1ODAsMzgzNTM5MDQwMSw0MDIyMjI0Nzc0LDI2NDM0NzA3OCw2MDQ4MDc2MjgsNzcwMjU1OTgzLDEyNDkxNTAxMjIsMTU1NTA4MTY5MiwxOTk2MDY0OTg2LDI1NTQyMjA4ODIsMjgyMTgzNDM0OSwyOTUyOTk2ODA4LDMyMTAzMTM2NzEsMzMzNjU3MTg5MSwzNTg0NTI4NzExLDExMzkyNjk5MywzMzgyNDE4OTUsNjY2MzA3MjA1LDc3MzUyOTkxMiwxMjk0NzU3MzcyLDEzOTYxODIyOTEsMTY5NTE4MzcwMCwxOTg2NjYxMDUxLDIxNzcwMjYzNTAsMjQ1Njk1NjAzNywyNzMwNDg1OTIxLDI4MjAzMDI0MTEsMzI1OTczMDgwMCwzMzQ1NzY0NzcxLDM1MTYwNjU4MTcsMzYwMDM1MjgwNCw0MDk0NTcxOTA5LDI3NTQyMzM0NCw0MzAyMjc3MzQsNTA2OTQ4NjE2LDY1OTA2MDU1Niw4ODM5OTc4NzcsOTU4MTM5NTcxLDEzMjI4MjIyMTgsMTUzNzAwMjA2MywxNzQ3ODczNzc5LDE5NTU1NjIyMjIsMjAyNDEwNDgxNSwyMjI3NzMwNDUyLDIzNjE4NTI0MjQsMjQyODQzNjQ3NCwyNzU2NzM0MTg3LDMyMDQwMzE0NzksMzMyOTMyNTI5OF0sbD1uZXcgQXJyYXkoNjQpO2gobixjKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MTc3OTAzMzcwMyx0aGlzLl9iPTMxNDQxMzQyNzcsdGhpcy5fYz0xMDEzOTA0MjQyLHRoaXMuX2Q9Mjc3MzQ4MDc2Mix0aGlzLl9lPTEzNTk4OTMxMTksdGhpcy5fZj0yNjAwODIyOTI0LHRoaXMuX2c9NTI4NzM0NjM1LHRoaXMuX2g9MTU0MTQ1OTIyNSx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9hLG49MHx0aGlzLl9iLGg9MHx0aGlzLl9jLGM9MHx0aGlzLl9kLGw9MHx0aGlzLl9lLHA9MHx0aGlzLl9mLGI9MHx0aGlzLl9nLHY9MHx0aGlzLl9oLHk9MDt5PDE2OysreSllW3ldPXQucmVhZEludDMyQkUoNCp5KTtmb3IoO3k8NjQ7Kyt5KWVbeV09dShlW3ktMl0pK2VbeS03XStzKGVbeS0xNV0pK2VbeS0xNl18MDtmb3IodmFyIG09MDttPDY0OysrbSl7dmFyIGc9ditmKGwpK2kobCxwLGIpK2RbbV0rZVttXXwwLHc9YShyKStvKHIsbixoKXwwO3Y9YixiPXAscD1sLGw9YytnfDAsYz1oLGg9bixuPXIscj1nK3d8MH10aGlzLl9hPXIrdGhpcy5fYXwwLHRoaXMuX2I9bit0aGlzLl9ifDAsdGhpcy5fYz1oK3RoaXMuX2N8MCx0aGlzLl9kPWMrdGhpcy5fZHwwLHRoaXMuX2U9bCt0aGlzLl9lfDAsdGhpcy5fZj1wK3RoaXMuX2Z8MCx0aGlzLl9nPWIrdGhpcy5fZ3wwLHRoaXMuX2g9dit0aGlzLl9ofDB9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMzIpO3JldHVybiB0LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUodGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSx0LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSx0LndyaXRlSW50MzJCRSh0aGlzLl9oLDI4KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9dixwLmNhbGwodGhpcywxMjgsMTEyKX1mdW5jdGlvbiBpKHQsZSxyKXtyZXR1cm4gcl50JihlXnIpfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiB0JmV8ciYodHxlKX1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuKHQ+Pj4yOHxlPDw0KV4oZT4+PjJ8dDw8MzApXihlPj4+N3x0PDwyNSl9ZnVuY3Rpb24gZih0LGUpe3JldHVybih0Pj4+MTR8ZTw8MTgpXih0Pj4+MTh8ZTw8MTQpXihlPj4+OXx0PDwyMyl9ZnVuY3Rpb24gcyh0LGUpe3JldHVybih0Pj4+MXxlPDwzMSleKHQ+Pj44fGU8PDI0KV50Pj4+N31mdW5jdGlvbiB1KHQsZSl7cmV0dXJuKHQ+Pj4xfGU8PDMxKV4odD4+Pjh8ZTw8MjQpXih0Pj4+N3xlPDwyNSl9ZnVuY3Rpb24gaCh0LGUpe3JldHVybih0Pj4+MTl8ZTw8MTMpXihlPj4+Mjl8dDw8MyledD4+PjZ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybih0Pj4+MTl8ZTw8MTMpXihlPj4+Mjl8dDw8MyleKHQ+Pj42fGU8PDI2KX1mdW5jdGlvbiBkKHQsZSl7cmV0dXJuIHQ+Pj4wPGU+Pj4wPzE6MH12YXIgbD1yKDIpLHA9cig2MCksYj1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHY9bmV3IEFycmF5KDE2MCk7bChuLHApLG4ucHJvdG90eXBlLmluaXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYWg9MTc3OTAzMzcwMyx0aGlzLl9iaD0zMTQ0MTM0Mjc3LHRoaXMuX2NoPTEwMTM5MDQyNDIsdGhpcy5fZGg9Mjc3MzQ4MDc2Mix0aGlzLl9laD0xMzU5ODkzMTE5LHRoaXMuX2ZoPTI2MDA4MjI5MjQsdGhpcy5fZ2g9NTI4NzM0NjM1LHRoaXMuX2hoPTE1NDE0NTkyMjUsdGhpcy5fYWw9NDA4OTIzNTcyMCx0aGlzLl9ibD0yMjI3ODczNTk1LHRoaXMuX2NsPTQyNzExNzU3MjMsdGhpcy5fZGw9MTU5NTc1MDEyOSx0aGlzLl9lbD0yOTE3NTY1MTM3LHRoaXMuX2ZsPTcyNTUxMTE5OSx0aGlzLl9nbD00MjE1Mzg5NTQ3LHRoaXMuX2hsPTMyNzAzMzIwOSx0aGlzfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLl93LHI9MHx0aGlzLl9haCxuPTB8dGhpcy5fYmgsbD0wfHRoaXMuX2NoLHA9MHx0aGlzLl9kaCx2PTB8dGhpcy5fZWgseT0wfHRoaXMuX2ZoLG09MHx0aGlzLl9naCxnPTB8dGhpcy5faGgsdz0wfHRoaXMuX2FsLF89MHx0aGlzLl9ibCxNPTB8dGhpcy5fY2wsUz0wfHRoaXMuX2RsLEU9MHx0aGlzLl9lbCxBPTB8dGhpcy5fZmwsaz0wfHRoaXMuX2dsLHg9MHx0aGlzLl9obCxJPTA7STwzMjtJKz0yKWVbSV09dC5yZWFkSW50MzJCRSg0KkkpLGVbSSsxXT10LnJlYWRJbnQzMkJFKDQqSSs0KTtmb3IoO0k8MTYwO0krPTIpe3ZhciBCPWVbSS0zMF0sTz1lW0ktMzArMV0sUj1zKEIsTyksUD11KE8sQik7XG5CPWVbSS00XSxPPWVbSS00KzFdO3ZhciBUPWgoQixPKSxqPWMoTyxCKSxDPWVbSS0xNF0sTj1lW0ktMTQrMV0sTD1lW0ktMzJdLFU9ZVtJLTMyKzFdLHo9UCtOfDAsRD1SK0MrZCh6LFApfDA7ej16K2p8MCxEPUQrVCtkKHosail8MCx6PXorVXwwLEQ9RCtMK2QoeixVKXwwLGVbSV09RCxlW0krMV09en1mb3IodmFyIHE9MDtxPDE2MDtxKz0yKXtEPWVbcV0sej1lW3ErMV07dmFyIEY9byhyLG4sbCksSz1vKHcsXyxNKSxHPWEocix3KSxWPWEodyxyKSxIPWYodixFKSxYPWYoRSx2KSxZPWJbcV0sVz1iW3ErMV0sWj1pKHYseSxtKSxKPWkoRSxBLGspLCQ9eCtYfDAsUT1nK0grZCgkLHgpfDA7JD0kK0p8MCxRPVErWitkKCQsSil8MCwkPSQrV3wwLFE9UStZK2QoJCxXKXwwLCQ9JCt6fDAsUT1RK0QrZCgkLHopfDA7dmFyIHR0PVYrS3wwLGV0PUcrRitkKHR0LFYpfDA7Zz1tLHg9ayxtPXksaz1BLHk9dixBPUUsRT1TKyR8MCx2PXArUStkKEUsUyl8MCxwPWwsUz1NLGw9bixNPV8sbj1yLF89dyx3PSQrdHR8MCxyPVErZXQrZCh3LCQpfDB9dGhpcy5fYWw9dGhpcy5fYWwrd3wwLHRoaXMuX2JsPXRoaXMuX2JsK198MCx0aGlzLl9jbD10aGlzLl9jbCtNfDAsdGhpcy5fZGw9dGhpcy5fZGwrU3wwLHRoaXMuX2VsPXRoaXMuX2VsK0V8MCx0aGlzLl9mbD10aGlzLl9mbCtBfDAsdGhpcy5fZ2w9dGhpcy5fZ2wra3wwLHRoaXMuX2hsPXRoaXMuX2hsK3h8MCx0aGlzLl9haD10aGlzLl9haCtyK2QodGhpcy5fYWwsdyl8MCx0aGlzLl9iaD10aGlzLl9iaCtuK2QodGhpcy5fYmwsXyl8MCx0aGlzLl9jaD10aGlzLl9jaCtsK2QodGhpcy5fY2wsTSl8MCx0aGlzLl9kaD10aGlzLl9kaCtwK2QodGhpcy5fZGwsUyl8MCx0aGlzLl9laD10aGlzLl9laCt2K2QodGhpcy5fZWwsRSl8MCx0aGlzLl9maD10aGlzLl9maCt5K2QodGhpcy5fZmwsQSl8MCx0aGlzLl9naD10aGlzLl9naCttK2QodGhpcy5fZ2wsayl8MCx0aGlzLl9oaD10aGlzLl9oaCtnK2QodGhpcy5faGwseCl8MH0sbi5wcm90b3R5cGUuX2hhc2g9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtyLndyaXRlSW50MzJCRSh0LG4pLHIud3JpdGVJbnQzMkJFKGUsbis0KX12YXIgcj1uZXcgZSg2NCk7cmV0dXJuIHQodGhpcy5fYWgsdGhpcy5fYWwsMCksdCh0aGlzLl9iaCx0aGlzLl9ibCw4KSx0KHRoaXMuX2NoLHRoaXMuX2NsLDE2KSx0KHRoaXMuX2RoLHRoaXMuX2RsLDI0KSx0KHRoaXMuX2VoLHRoaXMuX2VsLDMyKSx0KHRoaXMuX2ZoLHRoaXMuX2ZsLDQwKSx0KHRoaXMuX2doLHRoaXMuX2dsLDQ4KSx0KHRoaXMuX2hoLHRoaXMuX2hsLDU2KSxyfSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7aWYobnVsbCE9PWcpcmV0dXJuIGc7dmFyIHQ9MTA0ODU3NixlPVtdO2VbMF09Mjtmb3IodmFyIHI9MSxuPTM7bjx0O24rPTIpe2Zvcih2YXIgaT1NYXRoLmNlaWwoTWF0aC5zcXJ0KG4pKSxvPTA7bzxyJiZlW29dPD1pJiZuJWVbb10hPT0wO28rKyk7ciE9PW8mJmVbb108PWl8fChlW3IrK109bil9cmV0dXJuIGc9ZSxlfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPW4oKSxyPTA7cjxlLmxlbmd0aDtyKyspaWYoMD09PXQubW9kbihlW3JdKSlyZXR1cm4gMD09PXQuY21wbihlW3JdKTtyZXR1cm4hMH1mdW5jdGlvbiBvKHQpe3ZhciBlPXMubW9udCh0KTtyZXR1cm4gMD09PWwudG9SZWQoZSkucmVkUG93KHQuc3VibigxKSkuZnJvbVJlZCgpLmNtcG4oMSl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQ8MTYpcmV0dXJuIG5ldyBzKDI9PT1lfHw1PT09ZT9bMTQwLDEyM106WzE0MCwzOV0pO2U9bmV3IHMoZSk7Zm9yKHZhciByLG47Oyl7Zm9yKHI9bmV3IHMoZihNYXRoLmNlaWwodC84KSkpO3IuYml0TGVuZ3RoKCk+dDspci5pc2hybigxKTtpZihyLmlzRXZlbigpJiZyLmlhZGQoZCksci50ZXN0bigxKXx8ci5pYWRkKGwpLGUuY21wKGwpKXtpZighZS5jbXAocCkpZm9yKDtyLm1vZChiKS5jbXAodik7KXIuaWFkZChtKX1lbHNlIGZvcig7ci5tb2QodSkuY21wKHkpOylyLmlhZGQobSk7aWYobj1yLnNocm4oMSksaShuKSYmaShyKSYmbyhuKSYmbyhyKSYmYy50ZXN0KG4pJiZjLnRlc3QocikpcmV0dXJuIHJ9fXZhciBmPXIoNjEpO3QuZXhwb3J0cz1hLGEuc2ltcGxlU2lldmU9aSxhLmZlcm1hdFRlc3Q9bzt2YXIgcz1yKDE1MCksdT1uZXcgcygyNCksaD1yKDIzMCksYz1uZXcgaCxkPW5ldyBzKDEpLGw9bmV3IHMoMikscD1uZXcgcyg1KSxiPShuZXcgcygxNiksbmV3IHMoOCksbmV3IHMoMTApKSx2PW5ldyBzKDMpLHk9KG5ldyBzKDcpLG5ldyBzKDExKSksbT1uZXcgcyg0KSxnPShuZXcgcygxMiksbnVsbCl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fHxuZXcgby5SYW5kfXZhciBpPXIoMTUwKSxvPXIoNTc1KTt0LmV4cG9ydHM9bixuLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9LG4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPXQuYml0TGVuZ3RoKCkscj10aGlzLnJhbmQuZ2VuZXJhdGUoTWF0aC5jZWlsKGUvOCkpO3JbMF18PTM7dmFyIG49NyZlO3JldHVybiAwIT09biYmKHJbci5sZW5ndGgtMV0+Pj03LW4pLG5ldyBpKHIpfSxuLnByb3RvdHlwZS50ZXN0PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10LmJpdExlbmd0aCgpLG89aS5tb250KHQpLGE9bmV3IGkoMSkudG9SZWQobyk7ZXx8KGU9TWF0aC5tYXgoMSxuLzQ4fDApKTtmb3IodmFyIGY9dC5zdWJuKDEpLHM9Zi5zdWJuKDEpLHU9MDshZi50ZXN0bih1KTt1KyspO2Zvcih2YXIgaD10LnNocm4odSksYz1mLnRvUmVkKG8pLGQ9ITA7ZT4wO2UtLSl7dmFyIGw9dGhpcy5fcmFuZChzKTtyJiZyKGwpO3ZhciBwPWwudG9SZWQobykucmVkUG93KGgpO2lmKDAhPT1wLmNtcChhKSYmMCE9PXAuY21wKGMpKXtmb3IodmFyIGI9MTtiPHU7YisrKXtpZihwPXAucmVkU3FyKCksMD09PXAuY21wKGEpKXJldHVybiExO2lmKDA9PT1wLmNtcChjKSlicmVha31pZihiPT09dSlyZXR1cm4hMX19cmV0dXJuIGR9LG4ucHJvdG90eXBlLmdldERpdmlzb3I9ZnVuY3Rpb24odCxlKXt2YXIgcj10LmJpdExlbmd0aCgpLG49aS5tb250KHQpLG89bmV3IGkoMSkudG9SZWQobik7ZXx8KGU9TWF0aC5tYXgoMSxyLzQ4fDApKTtmb3IodmFyIGE9dC5zdWJuKDEpLGY9YS5zdWJuKDEpLHM9MDshYS50ZXN0bihzKTtzKyspO2Zvcih2YXIgdT10LnNocm4ocyksaD1hLnRvUmVkKG4pO2U+MDtlLS0pe3ZhciBjPXRoaXMuX3JhbmQoZiksZD10LmdjZChjKTtpZigwIT09ZC5jbXBuKDEpKXJldHVybiBkO3ZhciBsPWMudG9SZWQobikucmVkUG93KHUpO2lmKDAhPT1sLmNtcChvKSYmMCE9PWwuY21wKGgpKXtmb3IodmFyIHA9MTtwPHM7cCsrKXtpZihsPWwucmVkU3FyKCksMD09PWwuY21wKG8pKXJldHVybiBsLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh0KTtpZigwPT09bC5jbXAoaCkpYnJlYWt9aWYocD09PXMpcmV0dXJuIGw9bC5yZWRTcXIoKSxsLmZyb21SZWQoKS5zdWJuKDEpLmdjZCh0KX19cmV0dXJuITF9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIHI9bmV3IGUoNCk7cmV0dXJuIHIud3JpdGVVSW50MzJCRSh0LDApLHJ9dmFyIGk9cig1OSk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscil7Zm9yKHZhciBvLGE9bmV3IGUoXCJcIiksZj0wO2EubGVuZ3RoPHI7KW89bihmKyspLGE9ZS5jb25jYXQoW2EsaShcInNoYTFcIikudXBkYXRlKHQpLnVwZGF0ZShvKS5kaWdlc3QoKV0pO3JldHVybiBhLnNsaWNlKDAscil9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe3ZhciBlPW8odCkscj1lLnRvUmVkKGEubW9udCh0Lm1vZHVsdXMpKS5yZWRQb3cobmV3IGEodC5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKTtyZXR1cm57YmxpbmRlcjpyLHVuYmxpbmRlcjplLmludm0odC5tb2R1bHVzKX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBpPW4ociksbz1yLm1vZHVsdXMuYnl0ZUxlbmd0aCgpLGY9KGEubW9udChyLm1vZHVsdXMpLG5ldyBhKHQpLm11bChpLmJsaW5kZXIpLnVtb2Qoci5tb2R1bHVzKSkscz1mLnRvUmVkKGEubW9udChyLnByaW1lMSkpLHU9Zi50b1JlZChhLm1vbnQoci5wcmltZTIpKSxoPXIuY29lZmZpY2llbnQsYz1yLnByaW1lMSxkPXIucHJpbWUyLGw9cy5yZWRQb3coci5leHBvbmVudDEpLHA9dS5yZWRQb3coci5leHBvbmVudDIpO2w9bC5mcm9tUmVkKCkscD1wLmZyb21SZWQoKTt2YXIgYj1sLmlzdWIocCkuaW11bChoKS51bW9kKGMpO3JldHVybiBiLmltdWwoZCkscC5pYWRkKGIpLG5ldyBlKHAuaW11bChpLnVuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpLnRvQXJyYXkoITEsbykpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCkscj1uZXcgYShmKGUpKTtyLmNtcCh0Lm1vZHVsdXMpPj0wfHwhci51bW9kKHQucHJpbWUxKXx8IXIudW1vZCh0LnByaW1lMik7KXI9bmV3IGEoZihlKSk7cmV0dXJuIHJ9dmFyIGE9cig3MCksZj1yKDYxKTt0LmV4cG9ydHM9aSxpLmdldHI9b30pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt2YXIgcjtcIm9iamVjdFwiIT10eXBlb2YgdHx8ZS5pc0J1ZmZlcih0KXx8KHI9dC5wYXNzcGhyYXNlLHQ9dC5rZXkpLFwic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0KSk7dmFyIG4sYSxzPWYodCxyKSx1PXMudGFnLGg9cy5kYXRhO3N3aXRjaCh1KXtjYXNlXCJQVUJMSUMgS0VZXCI6c3dpdGNoKGE9by5QdWJsaWNLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybiBhLnN1YmplY3RQcml2YXRlS2V5PWEuc3ViamVjdFB1YmxpY0tleSx7dHlwZTpcImVjXCIsZGF0YTphfTtjYXNlXCIxLjIuODQwLjEwMDQwLjQuMVwiOnJldHVybiBhLmFsZ29yaXRobS5wYXJhbXMucHViX2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQdWJsaWNLZXkuZGF0YSxcImRlclwiKSx7dHlwZTpcImRzYVwiLGRhdGE6YS5hbGdvcml0aG0ucGFyYW1zfTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IGlkIFwiK24pfXRocm93IG5ldyBFcnJvcihcInVua25vd24ga2V5IHR5cGUgXCIrdSk7Y2FzZVwiRU5DUllQVEVEIFBSSVZBVEUgS0VZXCI6aD1vLkVuY3J5cHRlZFByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksaD1pKGgscik7Y2FzZVwiUFJJVkFURSBLRVlcIjpzd2l0Y2goYT1vLlByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIiksbj1hLmFsZ29yaXRobS5hbGdvcml0aG0uam9pbihcIi5cIikpe2Nhc2VcIjEuMi44NDAuMTEzNTQ5LjEuMS4xXCI6cmV0dXJuIG8uUlNBUHJpdmF0ZUtleS5kZWNvZGUoYS5zdWJqZWN0UHJpdmF0ZUtleSxcImRlclwiKTtjYXNlXCIxLjIuODQwLjEwMDQ1LjIuMVwiOnJldHVybntjdXJ2ZTphLmFsZ29yaXRobS5jdXJ2ZSxwcml2YXRlS2V5Om8uRUNQcml2YXRlS2V5LmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLnByaXZhdGVLZXl9O2Nhc2VcIjEuMi44NDAuMTAwNDAuNC4xXCI6cmV0dXJuIGEuYWxnb3JpdGhtLnBhcmFtcy5wcml2X2tleT1vLkRTQXBhcmFtLmRlY29kZShhLnN1YmplY3RQcml2YXRlS2V5LFwiZGVyXCIpLHt0eXBlOlwiZHNhXCIscGFyYW1zOmEuYWxnb3JpdGhtLnBhcmFtc307ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSBpZCBcIituKX10aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGtleSB0eXBlIFwiK3UpO2Nhc2VcIlJTQSBQVUJMSUMgS0VZXCI6cmV0dXJuIG8uUlNBUHVibGljS2V5LmRlY29kZShoLFwiZGVyXCIpO2Nhc2VcIlJTQSBQUklWQVRFIEtFWVwiOnJldHVybiBvLlJTQVByaXZhdGVLZXkuZGVjb2RlKGgsXCJkZXJcIik7Y2FzZVwiRFNBIFBSSVZBVEUgS0VZXCI6cmV0dXJue3R5cGU6XCJkc2FcIixwYXJhbXM6by5EU0FQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpfTtjYXNlXCJFQyBQUklWQVRFIEtFWVwiOnJldHVybiBoPW8uRUNQcml2YXRlS2V5LmRlY29kZShoLFwiZGVyXCIpLHtjdXJ2ZTpoLnBhcmFtZXRlcnMudmFsdWUscHJpdmF0ZUtleTpoLnByaXZhdGVLZXl9O2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBrZXkgdHlwZSBcIit1KX19ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXQuYWxnb3JpdGhtLmRlY3J5cHQua2RlLmtkZXBhcmFtcy5zYWx0LGk9cGFyc2VJbnQodC5hbGdvcml0aG0uZGVjcnlwdC5rZGUua2RlcGFyYW1zLml0ZXJzLnRvU3RyaW5nKCksMTApLG89YVt0LmFsZ29yaXRobS5kZWNyeXB0LmNpcGhlci5hbGdvLmpvaW4oXCIuXCIpXSxmPXQuYWxnb3JpdGhtLmRlY3J5cHQuY2lwaGVyLml2LGg9dC5zdWJqZWN0UHJpdmF0ZUtleSxjPXBhcnNlSW50KG8uc3BsaXQoXCItXCIpWzFdLDEwKS84LGQ9dS5wYmtkZjJTeW5jKHIsbixpLGMpLGw9cy5jcmVhdGVEZWNpcGhlcml2KG8sZCxmKSxwPVtdO3JldHVybiBwLnB1c2gobC51cGRhdGUoaCkpLHAucHVzaChsLmZpbmFsKCkpLGUuY29uY2F0KHApfXZhciBvPXIoNTc4KSxhPXIoNDY5KSxmPXIoNTc5KSxzPXIoMjM5KSx1PXIoMTUxKTt0LmV4cG9ydHM9bixuLnNpZ25hdHVyZT1vLnNpZ25hdHVyZX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7cmV0dXJuIGEuY2FsbCh0aGlzLGUpLGYuaXNCdWZmZXIodCk/KHRoaXMuYmFzZT10LHRoaXMub2Zmc2V0PTAsdm9pZCh0aGlzLmxlbmd0aD10Lmxlbmd0aCkpOnZvaWQgdGhpcy5lcnJvcihcIklucHV0IG5vdCBCdWZmZXJcIil9ZnVuY3Rpb24gaSh0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpdGhpcy5sZW5ndGg9MCx0aGlzLnZhbHVlPXQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaXx8KHQ9bmV3IGkodCxlKSksdGhpcy5sZW5ndGgrPXQubGVuZ3RoLHR9LHRoaXMpO2Vsc2UgaWYoXCJudW1iZXJcIj09dHlwZW9mIHQpe2lmKCEoMDw9dCYmdDw9MjU1KSlyZXR1cm4gZS5lcnJvcihcIm5vbi1ieXRlIEVuY29kZXJCdWZmZXIgdmFsdWVcIik7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPTF9ZWxzZSBpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0aGlzLnZhbHVlPXQsdGhpcy5sZW5ndGg9Zi5ieXRlTGVuZ3RoKHQpO2Vsc2V7aWYoIWYuaXNCdWZmZXIodCkpcmV0dXJuIGUuZXJyb3IoXCJVbnN1cHBvcnRlZCB0eXBlOiBcIit0eXBlb2YgdCk7dGhpcy52YWx1ZT10LHRoaXMubGVuZ3RoPXQubGVuZ3RofX12YXIgbz1yKDIpLGE9cig3MSkuUmVwb3J0ZXIsZj1yKDEpLkJ1ZmZlcjtvKG4sYSksZS5EZWNvZGVyQnVmZmVyPW4sbi5wcm90b3R5cGUuc2F2ZT1mdW5jdGlvbigpe3JldHVybntvZmZzZXQ6dGhpcy5vZmZzZXQscmVwb3J0ZXI6YS5wcm90b3R5cGUuc2F2ZS5jYWxsKHRoaXMpfX0sbi5wcm90b3R5cGUucmVzdG9yZT1mdW5jdGlvbih0KXt2YXIgZT1uZXcgbih0aGlzLmJhc2UpO3JldHVybiBlLm9mZnNldD10Lm9mZnNldCxlLmxlbmd0aD10aGlzLm9mZnNldCx0aGlzLm9mZnNldD10Lm9mZnNldCxhLnByb3RvdHlwZS5yZXN0b3JlLmNhbGwodGhpcyx0LnJlcG9ydGVyKSxlfSxuLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMub2Zmc2V0PT09dGhpcy5sZW5ndGh9LG4ucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vZmZzZXQrMTw9dGhpcy5sZW5ndGg/dGhpcy5iYXNlLnJlYWRVSW50OCh0aGlzLm9mZnNldCsrLCEwKTp0aGlzLmVycm9yKHR8fFwiRGVjb2RlckJ1ZmZlciBvdmVycnVuXCIpfSxuLnByb3RvdHlwZS5za2lwPWZ1bmN0aW9uKHQsZSl7aWYoISh0aGlzLm9mZnNldCt0PD10aGlzLmxlbmd0aCkpcmV0dXJuIHRoaXMuZXJyb3IoZXx8XCJEZWNvZGVyQnVmZmVyIG92ZXJydW5cIik7dmFyIHI9bmV3IG4odGhpcy5iYXNlKTtyZXR1cm4gci5fcmVwb3J0ZXJTdGF0ZT10aGlzLl9yZXBvcnRlclN0YXRlLHIub2Zmc2V0PXRoaXMub2Zmc2V0LHIubGVuZ3RoPXRoaXMub2Zmc2V0K3QsdGhpcy5vZmZzZXQrPXQscn0sbi5wcm90b3R5cGUucmF3PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmJhc2Uuc2xpY2UodD90Lm9mZnNldDp0aGlzLm9mZnNldCx0aGlzLmxlbmd0aCl9LGUuRW5jb2RlckJ1ZmZlcj1pLGkucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCxlKXtyZXR1cm4gdHx8KHQ9bmV3IGYodGhpcy5sZW5ndGgpKSxlfHwoZT0wKSwwPT09dGhpcy5sZW5ndGg/dDooQXJyYXkuaXNBcnJheSh0aGlzLnZhbHVlKT90aGlzLnZhbHVlLmZvckVhY2goZnVuY3Rpb24ocil7ci5qb2luKHQsZSksZSs9ci5sZW5ndGh9KTooXCJudW1iZXJcIj09dHlwZW9mIHRoaXMudmFsdWU/dFtlXT10aGlzLnZhbHVlOlwic3RyaW5nXCI9PXR5cGVvZiB0aGlzLnZhbHVlP3Qud3JpdGUodGhpcy52YWx1ZSxlKTpmLmlzQnVmZmVyKHRoaXMudmFsdWUpJiZ0aGlzLnZhbHVlLmNvcHkodCxlKSxlKz10aGlzLmxlbmd0aCksdCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLl9yZXZlcnNlPWZ1bmN0aW9uKHQpe3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpeygwfHIpPT1yJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSxuLmRlcj1yKDU4Myl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe3UuTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dC5yZWFkVUludDgoZSk7aWYodC5pc0Vycm9yKHIpKXJldHVybiByO3ZhciBuPWMudGFnQ2xhc3Nbcj4+Nl0saT0wPT09KDMyJnIpO2lmKDMxPT09KDMxJnIpKXt2YXIgbz1yO2ZvcihyPTA7MTI4PT09KDEyOCZvKTspe2lmKG89dC5yZWFkVUludDgoZSksdC5pc0Vycm9yKG8pKXJldHVybiBvO3I8PD03LHJ8PTEyNyZvfX1lbHNlIHImPTMxO3ZhciBhPWMudGFnW3JdO3JldHVybntjbHM6bixwcmltaXRpdmU6aSx0YWc6cix0YWdTdHI6YX19ZnVuY3Rpb24gYSh0LGUscil7dmFyIG49dC5yZWFkVUludDgocik7aWYodC5pc0Vycm9yKG4pKXJldHVybiBuO2lmKCFlJiYxMjg9PT1uKXJldHVybiBudWxsO2lmKDA9PT0oMTI4Jm4pKXJldHVybiBuO3ZhciBpPTEyNyZuO2lmKGk+PTQpcmV0dXJuIHQuZXJyb3IoXCJsZW5ndGggb2N0ZWN0IGlzIHRvbyBsb25nXCIpO249MDtmb3IodmFyIG89MDtvPGk7bysrKXtuPDw9ODt2YXIgYT10LnJlYWRVSW50OChyKTtpZih0LmlzRXJyb3IoYSkpcmV0dXJuIGE7bnw9YX1yZXR1cm4gbn12YXIgZj1yKDIpLHM9cigxMDYpLHU9cy5iYXNlLGg9cy5iaWdudW0sYz1zLmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQgaW5zdGFuY2VvZiB1LkRlY29kZXJCdWZmZXJ8fCh0PW5ldyB1LkRlY29kZXJCdWZmZXIodCxlKSksdGhpcy50cmVlLl9kZWNvZGUodCxlKX0sZihpLHUuTm9kZSksaS5wcm90b3R5cGUuX3BlZWtUYWc9ZnVuY3Rpb24odCxlLHIpe2lmKHQuaXNFbXB0eSgpKXJldHVybiExO3ZhciBuPXQuc2F2ZSgpLGk9byh0LCdGYWlsZWQgdG8gcGVlayB0YWc6IFwiJytlKydcIicpO3JldHVybiB0LmlzRXJyb3IoaSk/aToodC5yZXN0b3JlKG4pLGkudGFnPT09ZXx8aS50YWdTdHI9PT1lfHxpLnRhZ1N0citcIm9mXCI9PT1lfHxyKX0saS5wcm90b3R5cGUuX2RlY29kZVRhZz1mdW5jdGlvbih0LGUscil7dmFyIG49byh0LCdGYWlsZWQgdG8gZGVjb2RlIHRhZyBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IobikpcmV0dXJuIG47dmFyIGk9YSh0LG4ucHJpbWl0aXZlLCdGYWlsZWQgdG8gZ2V0IGxlbmd0aCBvZiBcIicrZSsnXCInKTtpZih0LmlzRXJyb3IoaSkpcmV0dXJuIGk7aWYoIXImJm4udGFnIT09ZSYmbi50YWdTdHIhPT1lJiZuLnRhZ1N0citcIm9mXCIhPT1lKXJldHVybiB0LmVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggdGFnOiBcIicrZSsnXCInKTtpZihuLnByaW1pdGl2ZXx8bnVsbCE9PWkpcmV0dXJuIHQuc2tpcChpLCdGYWlsZWQgdG8gbWF0Y2ggYm9keSBvZjogXCInK2UrJ1wiJyk7dmFyIGY9dC5zYXZlKCkscz10aGlzLl9za2lwVW50aWxFbmQodCwnRmFpbGVkIHRvIHNraXAgaW5kZWZpbml0ZSBsZW5ndGggYm9keTogXCInK3RoaXMudGFnKydcIicpO3JldHVybiB0LmlzRXJyb3Iocyk/czooaT10Lm9mZnNldC1mLm9mZnNldCx0LnJlc3RvcmUoZiksdC5za2lwKGksJ0ZhaWxlZCB0byBtYXRjaCBib2R5IG9mOiBcIicrZSsnXCInKSl9LGkucHJvdG90eXBlLl9za2lwVW50aWxFbmQ9ZnVuY3Rpb24odCxlKXtmb3IoOzspe3ZhciByPW8odCxlKTtpZih0LmlzRXJyb3IocikpcmV0dXJuIHI7dmFyIG49YSh0LHIucHJpbWl0aXZlLGUpO2lmKHQuaXNFcnJvcihuKSlyZXR1cm4gbjt2YXIgaTtpZihpPXIucHJpbWl0aXZlfHxudWxsIT09bj90LnNraXAobik6dGhpcy5fc2tpcFVudGlsRW5kKHQsZSksdC5pc0Vycm9yKGkpKXJldHVybiBpO2lmKFwiZW5kXCI9PT1yLnRhZ1N0cilicmVha319LGkucHJvdG90eXBlLl9kZWNvZGVMaXN0PWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT1bXTshdC5pc0VtcHR5KCk7KXt2YXIgbz10aGlzLl9wZWVrVGFnKHQsXCJlbmRcIik7aWYodC5pc0Vycm9yKG8pKXJldHVybiBvO3ZhciBhPXIuZGVjb2RlKHQsXCJkZXJcIixuKTtpZih0LmlzRXJyb3IoYSkmJm8pYnJlYWs7aS5wdXNoKGEpfXJldHVybiBpfSxpLnByb3RvdHlwZS5fZGVjb2RlU3RyPWZ1bmN0aW9uKHQsZSl7aWYoXCJiaXRzdHJcIj09PWUpe3ZhciByPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihyKT9yOnt1bnVzZWQ6cixkYXRhOnQucmF3KCl9fWlmKFwiYm1wc3RyXCI9PT1lKXt2YXIgbj10LnJhdygpO2lmKG4ubGVuZ3RoJTI9PT0xKXJldHVybiB0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IGJtcHN0ciBsZW5ndGggbWlzbWF0Y2hcIik7Zm9yKHZhciBpPVwiXCIsbz0wO288bi5sZW5ndGgvMjtvKyspaSs9U3RyaW5nLmZyb21DaGFyQ29kZShuLnJlYWRVSW50MTZCRSgyKm8pKTtyZXR1cm4gaX1pZihcIm51bXN0clwiPT09ZSl7dmFyIGE9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc051bXN0cihhKT9hOnQuZXJyb3IoXCJEZWNvZGluZyBvZiBzdHJpbmcgdHlwZTogbnVtc3RyIHVuc3VwcG9ydGVkIGNoYXJhY3RlcnNcIil9aWYoXCJvY3RzdHJcIj09PWUpcmV0dXJuIHQucmF3KCk7aWYoXCJwcmludHN0clwiPT09ZSl7dmFyIGY9dC5yYXcoKS50b1N0cmluZyhcImFzY2lpXCIpO3JldHVybiB0aGlzLl9pc1ByaW50c3RyKGYpP2Y6dC5lcnJvcihcIkRlY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciB1bnN1cHBvcnRlZCBjaGFyYWN0ZXJzXCIpfXJldHVybi9zdHIkLy50ZXN0KGUpP3QucmF3KCkudG9TdHJpbmcoKTp0LmVycm9yKFwiRGVjb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IFwiK2UrXCIgdW5zdXBwb3J0ZWRcIil9LGkucHJvdG90eXBlLl9kZWNvZGVPYmppZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGk9W10sbz0wOyF0LmlzRW1wdHkoKTspe3ZhciBhPXQucmVhZFVJbnQ4KCk7bzw8PTcsb3w9MTI3JmEsMD09PSgxMjgmYSkmJihpLnB1c2gobyksbz0wKX0xMjgmYSYmaS5wdXNoKG8pO3ZhciBmPWlbMF0vNDB8MCxzPWlbMF0lNDA7aWYobj1yP2k6W2Ysc10uY29uY2F0KGkuc2xpY2UoMSkpLGUpe3ZhciB1PWVbbi5qb2luKFwiIFwiKV07dm9pZCAwPT09dSYmKHU9ZVtuLmpvaW4oXCIuXCIpXSksdm9pZCAwIT09dSYmKG49dSl9cmV0dXJuIG59LGkucHJvdG90eXBlLl9kZWNvZGVUaW1lPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKS50b1N0cmluZygpO2lmKFwiZ2VudGltZVwiPT09ZSl2YXIgbj0wfHIuc2xpY2UoMCw0KSxpPTB8ci5zbGljZSg0LDYpLG89MHxyLnNsaWNlKDYsOCksYT0wfHIuc2xpY2UoOCwxMCksZj0wfHIuc2xpY2UoMTAsMTIpLHM9MHxyLnNsaWNlKDEyLDE0KTtlbHNle2lmKFwidXRjdGltZVwiIT09ZSlyZXR1cm4gdC5lcnJvcihcIkRlY29kaW5nIFwiK2UrXCIgdGltZSBpcyBub3Qgc3VwcG9ydGVkIHlldFwiKTt2YXIgbj0wfHIuc2xpY2UoMCwyKSxpPTB8ci5zbGljZSgyLDQpLG89MHxyLnNsaWNlKDQsNiksYT0wfHIuc2xpY2UoNiw4KSxmPTB8ci5zbGljZSg4LDEwKSxzPTB8ci5zbGljZSgxMCwxMik7bj1uPDcwPzJlMytuOjE5MDArbn1yZXR1cm4gRGF0ZS5VVEMobixpLTEsbyxhLGYscywwKX0saS5wcm90b3R5cGUuX2RlY29kZU51bGw9ZnVuY3Rpb24odCl7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLl9kZWNvZGVCb29sPWZ1bmN0aW9uKHQpe3ZhciBlPXQucmVhZFVJbnQ4KCk7cmV0dXJuIHQuaXNFcnJvcihlKT9lOjAhPT1lfSxpLnByb3RvdHlwZS5fZGVjb2RlSW50PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dC5yYXcoKSxuPW5ldyBoKHIpO3JldHVybiBlJiYobj1lW24udG9TdHJpbmcoMTApXXx8biksbn0saS5wcm90b3R5cGUuX3VzZT1mdW5jdGlvbih0LGUpe3JldHVyblwiZnVuY3Rpb25cIj09dHlwZW9mIHQmJih0PXQoZSkpLHQuX2dldERlY29kZXIoXCJkZXJcIikudHJlZX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMuZW5jPVwiZGVyXCIsdGhpcy5uYW1lPXQubmFtZSx0aGlzLmVudGl0eT10LHRoaXMudHJlZT1uZXcgaSx0aGlzLnRyZWUuX2luaXQodC5ib2R5KX1mdW5jdGlvbiBpKHQpe2guTm9kZS5jYWxsKHRoaXMsXCJkZXJcIix0KX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDEwP1wiMFwiK3Q6dH1mdW5jdGlvbiBhKHQsZSxyLG4pe3ZhciBpO2lmKFwic2Vxb2ZcIj09PXQ/dD1cInNlcVwiOlwic2V0b2ZcIj09PXQmJih0PVwic2V0XCIpLGMudGFnQnlOYW1lLmhhc093blByb3BlcnR5KHQpKWk9Yy50YWdCeU5hbWVbdF07ZWxzZXtpZihcIm51bWJlclwiIT10eXBlb2YgdHx8KDB8dCkhPT10KXJldHVybiBuLmVycm9yKFwiVW5rbm93biB0YWc6IFwiK3QpO2k9dH1yZXR1cm4gaT49MzE/bi5lcnJvcihcIk11bHRpLW9jdGV0IHRhZyBlbmNvZGluZyB1bnN1cHBvcnRlZFwiKTooZXx8KGl8PTMyKSxpfD1jLnRhZ0NsYXNzQnlOYW1lW3J8fFwidW5pdmVyc2FsXCJdPDw2KX12YXIgZj1yKDIpLHM9cigxKS5CdWZmZXIsdT1yKDEwNiksaD11LmJhc2UsYz11LmNvbnN0YW50cy5kZXI7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMudHJlZS5fZW5jb2RlKHQsZSkuam9pbigpfSxmKGksaC5Ob2RlKSxpLnByb3RvdHlwZS5fZW5jb2RlQ29tcG9zaXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPWEodCxlLHIsdGhpcy5yZXBvcnRlcik7aWYobi5sZW5ndGg8MTI4KXt2YXIgbz1uZXcgcygyKTtyZXR1cm4gb1swXT1pLG9bMV09bi5sZW5ndGgsdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9Zm9yKHZhciBmPTEsdT1uLmxlbmd0aDt1Pj0yNTY7dT4+PTgpZisrO3ZhciBvPW5ldyBzKDIrZik7b1swXT1pLG9bMV09MTI4fGY7Zm9yKHZhciB1PTErZixoPW4ubGVuZ3RoO2g+MDt1LS0saD4+PTgpb1t1XT0yNTUmaDtyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbbyxuXSl9LGkucHJvdG90eXBlLl9lbmNvZGVTdHI9ZnVuY3Rpb24odCxlKXtpZihcImJpdHN0clwiPT09ZSlyZXR1cm4gdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihbMHx0LnVudXNlZCx0LmRhdGFdKTtpZihcImJtcHN0clwiPT09ZSl7Zm9yKHZhciByPW5ldyBzKDIqdC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rKylyLndyaXRlVUludDE2QkUodC5jaGFyQ29kZUF0KG4pLDIqbik7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIocil9cmV0dXJuXCJudW1zdHJcIj09PWU/dGhpcy5faXNOdW1zdHIodCk/dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0KTp0aGlzLnJlcG9ydGVyLmVycm9yKFwiRW5jb2Rpbmcgb2Ygc3RyaW5nIHR5cGU6IG51bXN0ciBzdXBwb3J0cyBvbmx5IGRpZ2l0cyBhbmQgc3BhY2VcIik6XCJwcmludHN0clwiPT09ZT90aGlzLl9pc1ByaW50c3RyKHQpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBwcmludHN0ciBzdXBwb3J0cyBvbmx5IGxhdGluIHVwcGVyIGFuZCBsb3dlciBjYXNlIGxldHRlcnMsIGRpZ2l0cywgc3BhY2UsIGFwb3N0cm9waGUsIGxlZnQgYW5kIHJpZ3RoIHBhcmVudGhlc2lzLCBwbHVzIHNpZ24sIGNvbW1hLCBoeXBoZW4sIGRvdCwgc2xhc2gsIGNvbG9uLCBlcXVhbCBzaWduLCBxdWVzdGlvbiBtYXJrXCIpOi9zdHIkLy50ZXN0KGUpP3RoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk6dGhpcy5yZXBvcnRlci5lcnJvcihcIkVuY29kaW5nIG9mIHN0cmluZyB0eXBlOiBcIitlK1wiIHVuc3VwcG9ydGVkXCIpfSxpLnByb3RvdHlwZS5fZW5jb2RlT2JqaWQ9ZnVuY3Rpb24odCxlLHIpe2lmKFwic3RyaW5nXCI9PXR5cGVvZiB0KXtpZighZSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcInN0cmluZyBvYmppZCBnaXZlbiwgYnV0IG5vIHZhbHVlcyBtYXAgZm91bmRcIik7aWYoIWUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJvYmppZCBub3QgZm91bmQgaW4gdmFsdWVzIG1hcFwiKTt0PWVbdF0uc3BsaXQoL1tcXHNcXC5dKy9nKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl0W25dfD0wfWVsc2UgaWYoQXJyYXkuaXNBcnJheSh0KSl7dD10LnNsaWNlKCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspdFtuXXw9MH1pZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIm9iamlkKCkgc2hvdWxkIGJlIGVpdGhlciBhcnJheSBvciBzdHJpbmcsIGdvdDogXCIrSlNPTi5zdHJpbmdpZnkodCkpO2lmKCFyKXtpZih0WzFdPj00MClyZXR1cm4gdGhpcy5yZXBvcnRlci5lcnJvcihcIlNlY29uZCBvYmppZCBpZGVudGlmaWVyIE9PQlwiKTt0LnNwbGljZSgwLDIsNDAqdFswXSt0WzFdKX1mb3IodmFyIGk9MCxuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBvPXRbbl07Zm9yKGkrKztvPj0xMjg7bz4+PTcpaSsrfWZvcih2YXIgYT1uZXcgcyhpKSxmPWEubGVuZ3RoLTEsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgbz10W25dO2ZvcihhW2YtLV09MTI3Jm87KG8+Pj03KT4wOylhW2YtLV09MTI4fDEyNyZvfXJldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKGEpfSxpLnByb3RvdHlwZS5fZW5jb2RlVGltZT1mdW5jdGlvbih0LGUpe3ZhciByLG49bmV3IERhdGUodCk7cmV0dXJuXCJnZW50aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpKSxvKG4uZ2V0VVRDTW9udGgoKSsxKSxvKG4uZ2V0VVRDRGF0ZSgpKSxvKG4uZ2V0VVRDSG91cnMoKSksbyhuLmdldFVUQ01pbnV0ZXMoKSksbyhuLmdldFVUQ1NlY29uZHMoKSksXCJaXCJdLmpvaW4oXCJcIik6XCJ1dGN0aW1lXCI9PT1lP3I9W28obi5nZXRGdWxsWWVhcigpJTEwMCksbyhuLmdldFVUQ01vbnRoKCkrMSksbyhuLmdldFVUQ0RhdGUoKSksbyhuLmdldFVUQ0hvdXJzKCkpLG8obi5nZXRVVENNaW51dGVzKCkpLG8obi5nZXRVVENTZWNvbmRzKCkpLFwiWlwiXS5qb2luKFwiXCIpOnRoaXMucmVwb3J0ZXIuZXJyb3IoXCJFbmNvZGluZyBcIitlK1wiIHRpbWUgaXMgbm90IHN1cHBvcnRlZCB5ZXRcIiksdGhpcy5fZW5jb2RlU3RyKHIsXCJvY3RzdHJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVOdWxsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoXCJcIil9LGkucHJvdG90eXBlLl9lbmNvZGVJbnQ9ZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl7aWYoIWUpcmV0dXJuIHRoaXMucmVwb3J0ZXIuZXJyb3IoXCJTdHJpbmcgaW50IG9yIGVudW0gZ2l2ZW4sIGJ1dCBubyB2YWx1ZXMgbWFwXCIpO2lmKCFlLmhhc093blByb3BlcnR5KHQpKXJldHVybiB0aGlzLnJlcG9ydGVyLmVycm9yKFwiVmFsdWVzIG1hcCBkb2Vzbid0IGNvbnRhaW46IFwiK0pTT04uc3RyaW5naWZ5KHQpKTt0PWVbdF19aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQmJiFzLmlzQnVmZmVyKHQpKXt2YXIgcj10LnRvQXJyYXkoKTshdC5zaWduJiYxMjgmclswXSYmci51bnNoaWZ0KDApLHQ9bmV3IHMocil9aWYocy5pc0J1ZmZlcih0KSl7dmFyIG49dC5sZW5ndGg7MD09PXQubGVuZ3RoJiZuKys7dmFyIGk9bmV3IHMobik7cmV0dXJuIHQuY29weShpKSwwPT09dC5sZW5ndGgmJihpWzBdPTApLHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoaSl9aWYodDwxMjgpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIodCk7aWYodDwyNTYpcmV0dXJuIHRoaXMuX2NyZWF0ZUVuY29kZXJCdWZmZXIoWzAsdF0pO2Zvcih2YXIgbj0xLG89dDtvPj0yNTY7bz4+PTgpbisrO2Zvcih2YXIgaT1uZXcgQXJyYXkobiksbz1pLmxlbmd0aC0xO28+PTA7by0tKWlbb109MjU1JnQsdD4+PTg7cmV0dXJuIDEyOCZpWzBdJiZpLnVuc2hpZnQoMCksdGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihuZXcgcyhpKSl9LGkucHJvdG90eXBlLl9lbmNvZGVCb29sPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQ/MjU1OjApfSxpLnByb3RvdHlwZS5fdXNlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdCYmKHQ9dChlKSksdC5fZ2V0RW5jb2RlcihcImRlclwiKS50cmVlfSxpLnByb3RvdHlwZS5fc2tpcERlZmF1bHQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk9dGhpcy5fYmFzZVN0YXRlO2lmKG51bGw9PT1pLmRlZmF1bHQpcmV0dXJuITE7dmFyIG89dC5qb2luKCk7aWYodm9pZCAwPT09aS5kZWZhdWx0QnVmZmVyJiYoaS5kZWZhdWx0QnVmZmVyPXRoaXMuX2VuY29kZVZhbHVlKGkuZGVmYXVsdCxlLHIpLmpvaW4oKSksby5sZW5ndGghPT1pLmRlZmF1bHRCdWZmZXIubGVuZ3RoKXJldHVybiExO2ZvcihuPTA7bjxvLmxlbmd0aDtuKyspaWYob1tuXSE9PWkuZGVmYXVsdEJ1ZmZlcltuXSlyZXR1cm4hMTtyZXR1cm4hMH19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIsaSxmKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCxyLGkpO2EuY2FsbCh0aGlzKSx0aGlzLl9maW5JRD1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMV0pXSksaT1lLmNvbmNhdChbaSxuZXcgZShbMCwwLDAsMl0pXSksdGhpcy5fY2lwaGVyPW5ldyBvLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGkubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsdGhpcy5fYWxlbj0wLHRoaXMuX2xlbj0wLGkuY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPXQ7dmFyIHU9bmV3IGUoNCk7dS5maWxsKDApLHRoaXMuX2doYXNoPW5ldyBzKHRoaXMuX2NpcGhlci5lbmNyeXB0QmxvY2sodSkpLHRoaXMuX2F1dGhUYWc9bnVsbCx0aGlzLl9jYWxsZWQ9ITF9ZnVuY3Rpb24gaSh0LGUpe3ZhciByPTA7dC5sZW5ndGghPT1lLmxlbmd0aCYmcisrO2Zvcih2YXIgbj1NYXRoLm1pbih0Lmxlbmd0aCxlLmxlbmd0aCksaT0tMTsrK2k8bjspcis9dFtpXV5lW2ldO3JldHVybiByfXZhciBvPXIoMTA3KSxhPXIoMTA5KSxmPXIoMikscz1yKDU5MSksdT1yKDcyKTtmKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtpZighdGhpcy5fY2FsbGVkJiZ0aGlzLl9hbGVuKXt2YXIgcj0xNi10aGlzLl9hbGVuJTE2O3I8MTYmJihyPW5ldyBlKHIpLHIuZmlsbCgwKSx0aGlzLl9naGFzaC51cGRhdGUocikpfXRoaXMuX2NhbGxlZD0hMDt2YXIgbj10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KTtyZXR1cm4gdGhpcy5fZGVjcnlwdD90aGlzLl9naGFzaC51cGRhdGUodCk6dGhpcy5fZ2hhc2gudXBkYXRlKG4pLHRoaXMuX2xlbis9dC5sZW5ndGgsbn0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7aWYodGhpcy5fZGVjcnlwdCYmIXRoaXMuX2F1dGhUYWcpdGhyb3cgbmV3IEVycm9yKFwiVW5zdXBwb3J0ZWQgc3RhdGUgb3IgdW5hYmxlIHRvIGF1dGhlbnRpY2F0ZSBkYXRhXCIpO3ZhciB0PXUodGhpcy5fZ2hhc2guZmluYWwoOCp0aGlzLl9hbGVuLDgqdGhpcy5fbGVuKSx0aGlzLl9jaXBoZXIuZW5jcnlwdEJsb2NrKHRoaXMuX2ZpbklEKSk7aWYodGhpcy5fZGVjcnlwdCl7aWYoaSh0LHRoaXMuX2F1dGhUYWcpKXRocm93IG5ldyBFcnJvcihcIlVuc3VwcG9ydGVkIHN0YXRlIG9yIHVuYWJsZSB0byBhdXRoZW50aWNhdGUgZGF0YVwiKX1lbHNlIHRoaXMuX2F1dGhUYWc9dDt0aGlzLl9jaXBoZXIuc2NydWIoKX0sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe2lmKCF0aGlzLl9kZWNyeXB0JiZlLmlzQnVmZmVyKHRoaXMuX2F1dGhUYWcpKXJldHVybiB0aGlzLl9hdXRoVGFnO3Rocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gZ2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRoVGFnPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLl9kZWNyeXB0KXRocm93IG5ldyBFcnJvcihcIkF0dGVtcHRpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpO3RoaXMuX2F1dGhUYWc9dH0sbi5wcm90b3R5cGUuc2V0QUFEPWZ1bmN0aW9uKHQpe2lmKHRoaXMuX2NhbGxlZCl0aHJvdyBuZXcgRXJyb3IoXCJBdHRlbXB0aW5nIHRvIHNldCBBQUQgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIik7dGhpcy5fZ2hhc2gudXBkYXRlKHQpLHRoaXMuX2FsZW4rPXQubGVuZ3RofX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNTkwKTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDU4OSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cigxNTIpO2UubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPW59LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj1uKGUsdC5fcHJldik7cmV0dXJuIHQuX3ByZXY9dC5fY2lwaGVyLmVuY3J5cHRCbG9jayhyKSx0Ll9wcmV2fSxlLmRlY3J5cHQ9ZnVuY3Rpb24odCxlKXt2YXIgcj10Ll9wcmV2O3QuX3ByZXY9ZTt2YXIgaT10Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpO3JldHVybiBuKGkscil9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG4pe3ZhciBvPXIubGVuZ3RoLGE9aShyLGUuX2NhY2hlKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2UobyksZS5fcHJldj10LmNvbmNhdChbZS5fcHJldixuP3I6YV0pLGF9dmFyIGk9cig3Mik7ZS5lbmNyeXB0PWZ1bmN0aW9uKGUscixpKXtmb3IodmFyIG8sYT1uZXcgdChcIlwiKTtyLmxlbmd0aDspe2lmKDA9PT1lLl9jYWNoZS5sZW5ndGgmJihlLl9jYWNoZT1lLl9jaXBoZXIuZW5jcnlwdEJsb2NrKGUuX3ByZXYpLGUuX3ByZXY9bmV3IHQoXCJcIikpLCEoZS5fY2FjaGUubGVuZ3RoPD1yLmxlbmd0aCkpe2E9dC5jb25jYXQoW2EsbihlLHIsaSldKTticmVha31vPWUuX2NhY2hlLmxlbmd0aCxhPXQuY29uY2F0KFthLG4oZSxyLnNsaWNlKDAsbyksaSldKSxyPXIuc2xpY2Uobyl9cmV0dXJuIGF9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSxyKXtmb3IodmFyIGksbyxhLGY9LTEscz04LHU9MDsrK2Y8czspaT10Ll9jaXBoZXIuZW5jcnlwdEJsb2NrKHQuX3ByZXYpLG89ZSYxPDw3LWY/MTI4OjAsYT1pWzBdXm8sdSs9KDEyOCZhKT4+ZiU4LHQuX3ByZXY9bih0Ll9wcmV2LHI/bzphKTtyZXR1cm4gdX1mdW5jdGlvbiBuKGUscil7dmFyIG49ZS5sZW5ndGgsaT0tMSxvPW5ldyB0KGUubGVuZ3RoKTtmb3IoZT10LmNvbmNhdChbZSxuZXcgdChbcl0pXSk7KytpPG47KW9baV09ZVtpXTw8MXxlW2krMV0+Pjc7cmV0dXJuIG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHIsbil7dmFyIGk9ZS5fY2lwaGVyLmVuY3J5cHRCbG9jayhlLl9wcmV2KSxvPWlbMF1ecjtyZXR1cm4gZS5fcHJldj10LmNvbmNhdChbZS5fcHJldi5zbGljZSgxKSxuZXcgdChbbj9yOm9dKV0pLG99ZS5lbmNyeXB0PWZ1bmN0aW9uKGUsbixpKXtmb3IodmFyIG89bi5sZW5ndGgsYT1uZXcgdChvKSxmPS0xOysrZjxvOylhW2ZdPXIoZSxuW2ZdLGkpO3JldHVybiBhfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSl7ZS5lbmNyeXB0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQuX2NpcGhlci5lbmNyeXB0QmxvY2soZSl9LGUuZGVjcnlwdD1mdW5jdGlvbih0LGUpe3JldHVybiB0Ll9jaXBoZXIuZGVjcnlwdEJsb2NrKGUpfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKHQpe3JldHVybiB0Ll9wcmV2PXQuX2NpcGhlci5lbmNyeXB0QmxvY2sodC5fcHJldiksdC5fcHJldn12YXIgaT1yKDcyKTtlLmVuY3J5cHQ9ZnVuY3Rpb24oZSxyKXtmb3IoO2UuX2NhY2hlLmxlbmd0aDxyLmxlbmd0aDspZS5fY2FjaGU9dC5jb25jYXQoW2UuX2NhY2hlLG4oZSldKTt2YXIgbz1lLl9jYWNoZS5zbGljZSgwLHIubGVuZ3RoKTtyZXR1cm4gZS5fY2FjaGU9ZS5fY2FjaGUuc2xpY2Uoci5sZW5ndGgpLGkocixvKX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyLGEsZil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhvLmNhbGwodGhpcyksdGhpcy5fY2lwaGVyPW5ldyBpLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyBlKGEubGVuZ3RoKSx0aGlzLl9jYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9zZWNDYWNoZT1uZXcgZShcIlwiKSx0aGlzLl9kZWNyeXB0PWYsYS5jb3B5KHRoaXMuX3ByZXYpLHZvaWQodGhpcy5fbW9kZT10KSk6bmV3IG4odCxyLGEpfXZhciBpPXIoMTA3KSxvPXIoMTA5KSxhPXIoMik7YShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHQsdGhpcy5fZGVjcnlwdCl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3RoaXMuX2NpcGhlci5zY3J1YigpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3JldHVybiBuZXcgZSh0LnRvUmVkKGkubW9udChyLm1vZHVsdXMpKS5yZWRQb3cobmV3IGkoci5wdWJsaWNFeHBvbmVudCkpLmZyb21SZWQoKS50b0FycmF5KCkpfXZhciBpPXIoNzApO3QuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dC5sZW5ndGgsbj0tMTsrK248cjspdFtuXV49ZVtuXTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj92b2lkIGkuY2FsbCh0aGlzLHQpOm5ldyBuKHQpfXQuZXhwb3J0cz1uO3ZhciBpPXIoMTU0KSxvPXIoNzMpO28uaW5oZXJpdHM9cig3NCksby5pbmhlcml0cyhuLGkpLG4ucHJvdG90eXBlLl90cmFuc2Zvcm09ZnVuY3Rpb24odCxlLHIpe3IobnVsbCx0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuXCJmdW5jdGlvblwiPT10eXBlb2YgdC5wcmVwZW5kTGlzdGVuZXI/dC5wcmVwZW5kTGlzdGVuZXIoZSxyKTp2b2lkKHQuX2V2ZW50cyYmdC5fZXZlbnRzW2VdP08odC5fZXZlbnRzW2VdKT90Ll9ldmVudHNbZV0udW5zaGlmdChyKTp0Ll9ldmVudHNbZV09W3IsdC5fZXZlbnRzW2VdXTp0Lm9uKGUscikpfWZ1bmN0aW9uIGkodCxlKXtEPUR8fHIoNTEpLHQ9dHx8e30sdGhpcy5vYmplY3RNb2RlPSEhdC5vYmplY3RNb2RlLGUgaW5zdGFuY2VvZiBEJiYodGhpcy5vYmplY3RNb2RlPXRoaXMub2JqZWN0TW9kZXx8ISF0LnJlYWRhYmxlT2JqZWN0TW9kZSk7dmFyIG49dC5oaWdoV2F0ZXJNYXJrLGk9dGhpcy5vYmplY3RNb2RlPzE2OjE2Mzg0O3RoaXMuaGlnaFdhdGVyTWFyaz1ufHwwPT09bj9uOmksdGhpcy5oaWdoV2F0ZXJNYXJrPX5+dGhpcy5oaWdoV2F0ZXJNYXJrLHRoaXMuYnVmZmVyPW5ldyB6LHRoaXMubGVuZ3RoPTAsdGhpcy5waXBlcz1udWxsLHRoaXMucGlwZXNDb3VudD0wLHRoaXMuZmxvd2luZz1udWxsLHRoaXMuZW5kZWQ9ITEsdGhpcy5lbmRFbWl0dGVkPSExLHRoaXMucmVhZGluZz0hMSx0aGlzLnN5bmM9ITAsdGhpcy5uZWVkUmVhZGFibGU9ITEsdGhpcy5lbWl0dGVkUmVhZGFibGU9ITEsdGhpcy5yZWFkYWJsZUxpc3RlbmluZz0hMSx0aGlzLnJlc3VtZVNjaGVkdWxlZD0hMSx0aGlzLmRlZmF1bHRFbmNvZGluZz10LmRlZmF1bHRFbmNvZGluZ3x8XCJ1dGY4XCIsdGhpcy5yYW5PdXQ9ITEsdGhpcy5hd2FpdERyYWluPTAsdGhpcy5yZWFkaW5nTW9yZT0hMSx0aGlzLmRlY29kZXI9bnVsbCx0aGlzLmVuY29kaW5nPW51bGwsdC5lbmNvZGluZyYmKFV8fChVPXIoNTIpLlN0cmluZ0RlY29kZXIpLHRoaXMuZGVjb2Rlcj1uZXcgVSh0LmVuY29kaW5nKSx0aGlzLmVuY29kaW5nPXQuZW5jb2RpbmcpfWZ1bmN0aW9uIG8odCl7cmV0dXJuIEQ9RHx8cig1MSksdGhpcyBpbnN0YW5jZW9mIG8/KHRoaXMuX3JlYWRhYmxlU3RhdGU9bmV3IGkodCx0aGlzKSx0aGlzLnJlYWRhYmxlPSEwLHQmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQucmVhZCYmKHRoaXMuX3JlYWQ9dC5yZWFkKSx2b2lkIFIuY2FsbCh0aGlzKSk6bmV3IG8odCl9ZnVuY3Rpb24gYSh0LGUscixuLGkpe3ZhciBvPWgoZSxyKTtpZihvKXQuZW1pdChcImVycm9yXCIsbyk7ZWxzZSBpZihudWxsPT09cillLnJlYWRpbmc9ITEsYyh0LGUpO2Vsc2UgaWYoZS5vYmplY3RNb2RlfHxyJiZyLmxlbmd0aD4wKWlmKGUuZW5kZWQmJiFpKXt2YXIgYT1uZXcgRXJyb3IoXCJzdHJlYW0ucHVzaCgpIGFmdGVyIEVPRlwiKTt0LmVtaXQoXCJlcnJvclwiLGEpfWVsc2UgaWYoZS5lbmRFbWl0dGVkJiZpKXt2YXIgcz1uZXcgRXJyb3IoXCJzdHJlYW0udW5zaGlmdCgpIGFmdGVyIGVuZCBldmVudFwiKTt0LmVtaXQoXCJlcnJvclwiLHMpfWVsc2V7dmFyIHU7IWUuZGVjb2Rlcnx8aXx8bnx8KHI9ZS5kZWNvZGVyLndyaXRlKHIpLHU9IWUub2JqZWN0TW9kZSYmMD09PXIubGVuZ3RoKSxpfHwoZS5yZWFkaW5nPSExKSx1fHwoZS5mbG93aW5nJiYwPT09ZS5sZW5ndGgmJiFlLnN5bmM/KHQuZW1pdChcImRhdGFcIixyKSx0LnJlYWQoMCkpOihlLmxlbmd0aCs9ZS5vYmplY3RNb2RlPzE6ci5sZW5ndGgsaT9lLmJ1ZmZlci51bnNoaWZ0KHIpOmUuYnVmZmVyLnB1c2gociksZS5uZWVkUmVhZGFibGUmJmQodCkpKSxwKHQsZSl9ZWxzZSBpfHwoZS5yZWFkaW5nPSExKTtyZXR1cm4gZihlKX1mdW5jdGlvbiBmKHQpe3JldHVybiF0LmVuZGVkJiYodC5uZWVkUmVhZGFibGV8fHQubGVuZ3RoPHQuaGlnaFdhdGVyTWFya3x8MD09PXQubGVuZ3RoKX1mdW5jdGlvbiBzKHQpe3JldHVybiB0Pj1xP3Q9cToodC0tLHR8PXQ+Pj4xLHR8PXQ+Pj4yLHR8PXQ+Pj40LHR8PXQ+Pj44LHR8PXQ+Pj4xNix0KyspLHR9ZnVuY3Rpb24gdSh0LGUpe3JldHVybiB0PD0wfHwwPT09ZS5sZW5ndGgmJmUuZW5kZWQ/MDplLm9iamVjdE1vZGU/MTp0IT09dD9lLmZsb3dpbmcmJmUubGVuZ3RoP2UuYnVmZmVyLmhlYWQuZGF0YS5sZW5ndGg6ZS5sZW5ndGg6KHQ+ZS5oaWdoV2F0ZXJNYXJrJiYoZS5oaWdoV2F0ZXJNYXJrPXModCkpLHQ8PWUubGVuZ3RoP3Q6ZS5lbmRlZD9lLmxlbmd0aDooZS5uZWVkUmVhZGFibGU9ITAsMCkpfWZ1bmN0aW9uIGgodCxlKXt2YXIgcj1udWxsO3JldHVybiBULmlzQnVmZmVyKGUpfHxcInN0cmluZ1wiPT10eXBlb2YgZXx8bnVsbD09PWV8fHZvaWQgMD09PWV8fHQub2JqZWN0TW9kZXx8KHI9bmV3IFR5cGVFcnJvcihcIkludmFsaWQgbm9uLXN0cmluZy9idWZmZXIgY2h1bmtcIikpLHJ9ZnVuY3Rpb24gYyh0LGUpe2lmKCFlLmVuZGVkKXtpZihlLmRlY29kZXIpe3ZhciByPWUuZGVjb2Rlci5lbmQoKTtyJiZyLmxlbmd0aCYmKGUuYnVmZmVyLnB1c2gociksZS5sZW5ndGgrPWUub2JqZWN0TW9kZT8xOnIubGVuZ3RoKX1lLmVuZGVkPSEwLGQodCl9fWZ1bmN0aW9uIGQodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtlLm5lZWRSZWFkYWJsZT0hMSxlLmVtaXR0ZWRSZWFkYWJsZXx8KEwoXCJlbWl0UmVhZGFibGVcIixlLmZsb3dpbmcpLGUuZW1pdHRlZFJlYWRhYmxlPSEwLGUuc3luYz9CKGwsdCk6bCh0KSl9ZnVuY3Rpb24gbCh0KXtMKFwiZW1pdCByZWFkYWJsZVwiKSx0LmVtaXQoXCJyZWFkYWJsZVwiKSx3KHQpfWZ1bmN0aW9uIHAodCxlKXtlLnJlYWRpbmdNb3JlfHwoZS5yZWFkaW5nTW9yZT0hMCxCKGIsdCxlKSl9ZnVuY3Rpb24gYih0LGUpe2Zvcih2YXIgcj1lLmxlbmd0aDshZS5yZWFkaW5nJiYhZS5mbG93aW5nJiYhZS5lbmRlZCYmZS5sZW5ndGg8ZS5oaWdoV2F0ZXJNYXJrJiYoTChcIm1heWJlUmVhZE1vcmUgcmVhZCAwXCIpLHQucmVhZCgwKSxyIT09ZS5sZW5ndGgpOylyPWUubGVuZ3RoO2UucmVhZGluZ01vcmU9ITF9ZnVuY3Rpb24gdih0KXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgZT10Ll9yZWFkYWJsZVN0YXRlO0woXCJwaXBlT25EcmFpblwiLGUuYXdhaXREcmFpbiksZS5hd2FpdERyYWluJiZlLmF3YWl0RHJhaW4tLSwwPT09ZS5hd2FpdERyYWluJiZQKHQsXCJkYXRhXCIpJiYoZS5mbG93aW5nPSEwLHcodCkpfX1mdW5jdGlvbiB5KHQpe0woXCJyZWFkYWJsZSBuZXh0dGljayByZWFkIDBcIiksdC5yZWFkKDApfWZ1bmN0aW9uIG0odCxlKXtlLnJlc3VtZVNjaGVkdWxlZHx8KGUucmVzdW1lU2NoZWR1bGVkPSEwLEIoZyx0LGUpKX1mdW5jdGlvbiBnKHQsZSl7ZS5yZWFkaW5nfHwoTChcInJlc3VtZSByZWFkIDBcIiksdC5yZWFkKDApKSxlLnJlc3VtZVNjaGVkdWxlZD0hMSxlLmF3YWl0RHJhaW49MCx0LmVtaXQoXCJyZXN1bWVcIiksdyh0KSxlLmZsb3dpbmcmJiFlLnJlYWRpbmcmJnQucmVhZCgwKX1mdW5jdGlvbiB3KHQpe3ZhciBlPXQuX3JlYWRhYmxlU3RhdGU7Zm9yKEwoXCJmbG93XCIsZS5mbG93aW5nKTtlLmZsb3dpbmcmJm51bGwhPT10LnJlYWQoKTspO31mdW5jdGlvbiBfKHQsZSl7aWYoMD09PWUubGVuZ3RoKXJldHVybiBudWxsO3ZhciByO3JldHVybiBlLm9iamVjdE1vZGU/cj1lLmJ1ZmZlci5zaGlmdCgpOiF0fHx0Pj1lLmxlbmd0aD8ocj1lLmRlY29kZXI/ZS5idWZmZXIuam9pbihcIlwiKToxPT09ZS5idWZmZXIubGVuZ3RoP2UuYnVmZmVyLmhlYWQuZGF0YTplLmJ1ZmZlci5jb25jYXQoZS5sZW5ndGgpLGUuYnVmZmVyLmNsZWFyKCkpOnI9TSh0LGUuYnVmZmVyLGUuZGVjb2Rlcikscn1mdW5jdGlvbiBNKHQsZSxyKXt2YXIgbjtyZXR1cm4gdDxlLmhlYWQuZGF0YS5sZW5ndGg/KG49ZS5oZWFkLmRhdGEuc2xpY2UoMCx0KSxlLmhlYWQuZGF0YT1lLmhlYWQuZGF0YS5zbGljZSh0KSk6bj10PT09ZS5oZWFkLmRhdGEubGVuZ3RoP2Uuc2hpZnQoKTpyP1ModCxlKTpFKHQsZSksbn1mdW5jdGlvbiBTKHQsZSl7dmFyIHI9ZS5oZWFkLG49MSxpPXIuZGF0YTtmb3IodC09aS5sZW5ndGg7cj1yLm5leHQ7KXt2YXIgbz1yLmRhdGEsYT10Pm8ubGVuZ3RoP28ubGVuZ3RoOnQ7aWYoaSs9YT09PW8ubGVuZ3RoP286by5zbGljZSgwLHQpLHQtPWEsMD09PXQpe2E9PT1vLmxlbmd0aD8oKytuLHIubmV4dD9lLmhlYWQ9ci5uZXh0OmUuaGVhZD1lLnRhaWw9bnVsbCk6KGUuaGVhZD1yLHIuZGF0YT1vLnNsaWNlKGEpKTticmVha30rK259cmV0dXJuIGUubGVuZ3RoLT1uLGl9ZnVuY3Rpb24gRSh0LGUpe3ZhciByPWouYWxsb2NVbnNhZmUodCksbj1lLmhlYWQsaT0xO2ZvcihuLmRhdGEuY29weShyKSx0LT1uLmRhdGEubGVuZ3RoO249bi5uZXh0Oyl7dmFyIG89bi5kYXRhLGE9dD5vLmxlbmd0aD9vLmxlbmd0aDp0O2lmKG8uY29weShyLHIubGVuZ3RoLXQsMCxhKSx0LT1hLDA9PT10KXthPT09by5sZW5ndGg/KCsraSxuLm5leHQ/ZS5oZWFkPW4ubmV4dDplLmhlYWQ9ZS50YWlsPW51bGwpOihlLmhlYWQ9bixuLmRhdGE9by5zbGljZShhKSk7YnJlYWt9KytpfXJldHVybiBlLmxlbmd0aC09aSxyfWZ1bmN0aW9uIEEodCl7dmFyIGU9dC5fcmVhZGFibGVTdGF0ZTtpZihlLmxlbmd0aD4wKXRocm93IG5ldyBFcnJvcignXCJlbmRSZWFkYWJsZSgpXCIgY2FsbGVkIG9uIG5vbi1lbXB0eSBzdHJlYW0nKTtlLmVuZEVtaXR0ZWR8fChlLmVuZGVkPSEwLEIoayxlLHQpKX1mdW5jdGlvbiBrKHQsZSl7dC5lbmRFbWl0dGVkfHwwIT09dC5sZW5ndGh8fCh0LmVuZEVtaXR0ZWQ9ITAsZS5yZWFkYWJsZT0hMSxlLmVtaXQoXCJlbmRcIikpfWZ1bmN0aW9uIHgodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZSh0W3JdLHIpfWZ1bmN0aW9uIEkodCxlKXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspaWYodFtyXT09PWUpcmV0dXJuIHI7cmV0dXJuLTF9dC5leHBvcnRzPW87dmFyIEI9cigxNTcpLE89cig1OTcpO28uUmVhZGFibGVTdGF0ZT1pO3ZhciBSLFA9KHIoMTEwKS5FdmVudEVtaXR0ZXIsZnVuY3Rpb24odCxlKXtyZXR1cm4gdC5saXN0ZW5lcnMoZSkubGVuZ3RofSk7IWZ1bmN0aW9uKCl7dHJ5e1I9cigzMSl9Y2F0Y2godCl7fWZpbmFsbHl7Unx8KFI9cigxMTApLkV2ZW50RW1pdHRlcil9fSgpO3ZhciBUPXIoMSkuQnVmZmVyLGo9cigxNTYpLEM9cig3Myk7Qy5pbmhlcml0cz1yKDc0KTt2YXIgTj1yKDYxMiksTD12b2lkIDA7TD1OJiZOLmRlYnVnbG9nP04uZGVidWdsb2coXCJzdHJlYW1cIik6ZnVuY3Rpb24oKXt9O3ZhciBVLHo9cig1OTYpO0MuaW5oZXJpdHMobyxSKTt2YXIgRCxEO28ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiByLm9iamVjdE1vZGV8fFwic3RyaW5nXCIhPXR5cGVvZiB0fHwoZT1lfHxyLmRlZmF1bHRFbmNvZGluZyxlIT09ci5lbmNvZGluZyYmKHQ9ai5mcm9tKHQsZSksZT1cIlwiKSksYSh0aGlzLHIsdCxlLCExKX0sby5wcm90b3R5cGUudW5zaGlmdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO3JldHVybiBhKHRoaXMsZSx0LFwiXCIsITApfSxvLnByb3RvdHlwZS5pc1BhdXNlZD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmc9PT0hMX0sby5wcm90b3R5cGUuc2V0RW5jb2Rpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIFV8fChVPXIoNTIpLlN0cmluZ0RlY29kZXIpLHRoaXMuX3JlYWRhYmxlU3RhdGUuZGVjb2Rlcj1uZXcgVSh0KSx0aGlzLl9yZWFkYWJsZVN0YXRlLmVuY29kaW5nPXQsdGhpc307dmFyIHE9ODM4ODYwODtvLnByb3RvdHlwZS5yZWFkPWZ1bmN0aW9uKHQpe0woXCJyZWFkXCIsdCksdD1wYXJzZUludCh0LDEwKTt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlLHI9dDtpZigwIT09dCYmKGUuZW1pdHRlZFJlYWRhYmxlPSExKSwwPT09dCYmZS5uZWVkUmVhZGFibGUmJihlLmxlbmd0aD49ZS5oaWdoV2F0ZXJNYXJrfHxlLmVuZGVkKSlyZXR1cm4gTChcInJlYWQ6IGVtaXRSZWFkYWJsZVwiLGUubGVuZ3RoLGUuZW5kZWQpLDA9PT1lLmxlbmd0aCYmZS5lbmRlZD9BKHRoaXMpOmQodGhpcyksbnVsbDtpZih0PXUodCxlKSwwPT09dCYmZS5lbmRlZClyZXR1cm4gMD09PWUubGVuZ3RoJiZBKHRoaXMpLG51bGw7dmFyIG49ZS5uZWVkUmVhZGFibGU7TChcIm5lZWQgcmVhZGFibGVcIixuKSwoMD09PWUubGVuZ3RofHxlLmxlbmd0aC10PGUuaGlnaFdhdGVyTWFyaykmJihuPSEwLEwoXCJsZW5ndGggbGVzcyB0aGFuIHdhdGVybWFya1wiLG4pKSxlLmVuZGVkfHxlLnJlYWRpbmc/KG49ITEsTChcInJlYWRpbmcgb3IgZW5kZWRcIixuKSk6biYmKEwoXCJkbyByZWFkXCIpLGUucmVhZGluZz0hMCxlLnN5bmM9ITAsMD09PWUubGVuZ3RoJiYoZS5uZWVkUmVhZGFibGU9ITApLHRoaXMuX3JlYWQoZS5oaWdoV2F0ZXJNYXJrKSxlLnN5bmM9ITEsZS5yZWFkaW5nfHwodD11KHIsZSkpKTt2YXIgaTtyZXR1cm4gaT10PjA/Xyh0LGUpOm51bGwsbnVsbD09PWk/KGUubmVlZFJlYWRhYmxlPSEwLHQ9MCk6ZS5sZW5ndGgtPXQsMD09PWUubGVuZ3RoJiYoZS5lbmRlZHx8KGUubmVlZFJlYWRhYmxlPSEwKSxyIT09dCYmZS5lbmRlZCYmQSh0aGlzKSksbnVsbCE9PWkmJnRoaXMuZW1pdChcImRhdGFcIixpKSxpfSxvLnByb3RvdHlwZS5fcmVhZD1mdW5jdGlvbih0KXt0aGlzLmVtaXQoXCJlcnJvclwiLG5ldyBFcnJvcihcIm5vdCBpbXBsZW1lbnRlZFwiKSl9LG8ucHJvdG90eXBlLnBpcGU9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBpKHQpe0woXCJvbnVucGlwZVwiKSx0PT09ZCYmYSgpfWZ1bmN0aW9uIG8oKXtMKFwib25lbmRcIiksdC5lbmQoKX1mdW5jdGlvbiBhKCl7TChcImNsZWFudXBcIiksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSksdC5yZW1vdmVMaXN0ZW5lcihcImZpbmlzaFwiLGgpLHQucmVtb3ZlTGlzdGVuZXIoXCJkcmFpblwiLHkpLHQucmVtb3ZlTGlzdGVuZXIoXCJlcnJvclwiLHMpLHQucmVtb3ZlTGlzdGVuZXIoXCJ1bnBpcGVcIixpKSxkLnJlbW92ZUxpc3RlbmVyKFwiZW5kXCIsbyksZC5yZW1vdmVMaXN0ZW5lcihcImVuZFwiLGEpLGQucmVtb3ZlTGlzdGVuZXIoXCJkYXRhXCIsZiksbT0hMCwhbC5hd2FpdERyYWlufHx0Ll93cml0YWJsZVN0YXRlJiYhdC5fd3JpdGFibGVTdGF0ZS5uZWVkRHJhaW58fHkoKX1mdW5jdGlvbiBmKGUpe0woXCJvbmRhdGFcIiksZz0hMTt2YXIgcj10LndyaXRlKGUpOyExIT09cnx8Z3x8KCgxPT09bC5waXBlc0NvdW50JiZsLnBpcGVzPT09dHx8bC5waXBlc0NvdW50PjEmJkkobC5waXBlcyx0KSE9PS0xKSYmIW0mJihMKFwiZmFsc2Ugd3JpdGUgcmVzcG9uc2UsIHBhdXNlXCIsZC5fcmVhZGFibGVTdGF0ZS5hd2FpdERyYWluKSxkLl9yZWFkYWJsZVN0YXRlLmF3YWl0RHJhaW4rKyxnPSEwKSxkLnBhdXNlKCkpfWZ1bmN0aW9uIHMoZSl7TChcIm9uZXJyb3JcIixlKSxjKCksdC5yZW1vdmVMaXN0ZW5lcihcImVycm9yXCIscyksMD09PVAodCxcImVycm9yXCIpJiZ0LmVtaXQoXCJlcnJvclwiLGUpfWZ1bmN0aW9uIHUoKXt0LnJlbW92ZUxpc3RlbmVyKFwiZmluaXNoXCIsaCksYygpfWZ1bmN0aW9uIGgoKXtMKFwib25maW5pc2hcIiksdC5yZW1vdmVMaXN0ZW5lcihcImNsb3NlXCIsdSksYygpfWZ1bmN0aW9uIGMoKXtMKFwidW5waXBlXCIpLGQudW5waXBlKHQpfXZhciBkPXRoaXMsbD10aGlzLl9yZWFkYWJsZVN0YXRlO3N3aXRjaChsLnBpcGVzQ291bnQpe2Nhc2UgMDpsLnBpcGVzPXQ7YnJlYWs7Y2FzZSAxOmwucGlwZXM9W2wucGlwZXMsdF07YnJlYWs7ZGVmYXVsdDpsLnBpcGVzLnB1c2godCl9bC5waXBlc0NvdW50Kz0xLEwoXCJwaXBlIGNvdW50PSVkIG9wdHM9JWpcIixsLnBpcGVzQ291bnQscik7dmFyIHA9KCFyfHxyLmVuZCE9PSExKSYmdCE9PWUuc3Rkb3V0JiZ0IT09ZS5zdGRlcnIsYj1wP286YTtsLmVuZEVtaXR0ZWQ/QihiKTpkLm9uY2UoXCJlbmRcIixiKSx0Lm9uKFwidW5waXBlXCIsaSk7dmFyIHk9dihkKTt0Lm9uKFwiZHJhaW5cIix5KTt2YXIgbT0hMSxnPSExO3JldHVybiBkLm9uKFwiZGF0YVwiLGYpLG4odCxcImVycm9yXCIscyksdC5vbmNlKFwiY2xvc2VcIix1KSx0Lm9uY2UoXCJmaW5pc2hcIixoKSx0LmVtaXQoXCJwaXBlXCIsZCksbC5mbG93aW5nfHwoTChcInBpcGUgcmVzdW1lXCIpLGQucmVzdW1lKCkpLHR9LG8ucHJvdG90eXBlLnVucGlwZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZWFkYWJsZVN0YXRlO2lmKDA9PT1lLnBpcGVzQ291bnQpcmV0dXJuIHRoaXM7aWYoMT09PWUucGlwZXNDb3VudClyZXR1cm4gdCYmdCE9PWUucGlwZXM/dGhpczoodHx8KHQ9ZS5waXBlcyksZS5waXBlcz1udWxsLGUucGlwZXNDb3VudD0wLGUuZmxvd2luZz0hMSx0JiZ0LmVtaXQoXCJ1bnBpcGVcIix0aGlzKSx0aGlzKTtpZighdCl7dmFyIHI9ZS5waXBlcyxuPWUucGlwZXNDb3VudDtlLnBpcGVzPW51bGwsZS5waXBlc0NvdW50PTAsZS5mbG93aW5nPSExO2Zvcih2YXIgaT0wO2k8bjtpKyspcltpXS5lbWl0KFwidW5waXBlXCIsdGhpcyk7cmV0dXJuIHRoaXN9dmFyIG89SShlLnBpcGVzLHQpO3JldHVybiBvPT09LTE/dGhpczooZS5waXBlcy5zcGxpY2UobywxKSxlLnBpcGVzQ291bnQtPTEsMT09PWUucGlwZXNDb3VudCYmKGUucGlwZXM9ZS5waXBlc1swXSksdC5lbWl0KFwidW5waXBlXCIsdGhpcyksdGhpcyl9LG8ucHJvdG90eXBlLm9uPWZ1bmN0aW9uKHQsZSl7dmFyIHI9Ui5wcm90b3R5cGUub24uY2FsbCh0aGlzLHQsZSk7aWYoXCJkYXRhXCI9PT10KXRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyE9PSExJiZ0aGlzLnJlc3VtZSgpO2Vsc2UgaWYoXCJyZWFkYWJsZVwiPT09dCl7dmFyIG49dGhpcy5fcmVhZGFibGVTdGF0ZTtuLmVuZEVtaXR0ZWR8fG4ucmVhZGFibGVMaXN0ZW5pbmd8fChuLnJlYWRhYmxlTGlzdGVuaW5nPW4ubmVlZFJlYWRhYmxlPSEwLG4uZW1pdHRlZFJlYWRhYmxlPSExLG4ucmVhZGluZz9uLmxlbmd0aCYmZCh0aGlzLG4pOkIoeSx0aGlzKSl9cmV0dXJuIHJ9LG8ucHJvdG90eXBlLmFkZExpc3RlbmVyPW8ucHJvdG90eXBlLm9uLG8ucHJvdG90eXBlLnJlc3VtZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX3JlYWRhYmxlU3RhdGU7cmV0dXJuIHQuZmxvd2luZ3x8KEwoXCJyZXN1bWVcIiksdC5mbG93aW5nPSEwLG0odGhpcyx0KSksdGhpc30sby5wcm90b3R5cGUucGF1c2U9ZnVuY3Rpb24oKXtyZXR1cm4gTChcImNhbGwgcGF1c2UgZmxvd2luZz0lalwiLHRoaXMuX3JlYWRhYmxlU3RhdGUuZmxvd2luZyksITEhPT10aGlzLl9yZWFkYWJsZVN0YXRlLmZsb3dpbmcmJihMKFwicGF1c2VcIiksdGhpcy5fcmVhZGFibGVTdGF0ZS5mbG93aW5nPSExLHRoaXMuZW1pdChcInBhdXNlXCIpKSx0aGlzfSxvLnByb3RvdHlwZS53cmFwPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlYWRhYmxlU3RhdGUscj0hMSxuPXRoaXM7dC5vbihcImVuZFwiLGZ1bmN0aW9uKCl7aWYoTChcIndyYXBwZWQgZW5kXCIpLGUuZGVjb2RlciYmIWUuZW5kZWQpe3ZhciB0PWUuZGVjb2Rlci5lbmQoKTt0JiZ0Lmxlbmd0aCYmbi5wdXNoKHQpfW4ucHVzaChudWxsKX0pLHQub24oXCJkYXRhXCIsZnVuY3Rpb24oaSl7aWYoTChcIndyYXBwZWQgZGF0YVwiKSxlLmRlY29kZXImJihpPWUuZGVjb2Rlci53cml0ZShpKSksKCFlLm9iamVjdE1vZGV8fG51bGwhPT1pJiZ2b2lkIDAhPT1pKSYmKGUub2JqZWN0TW9kZXx8aSYmaS5sZW5ndGgpKXt2YXIgbz1uLnB1c2goaSk7b3x8KHI9ITAsdC5wYXVzZSgpKX19KTtmb3IodmFyIGkgaW4gdCl2b2lkIDA9PT10aGlzW2ldJiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0W2ldJiYodGhpc1tpXT1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdFtlXS5hcHBseSh0LGFyZ3VtZW50cyl9fShpKSk7dmFyIG89W1wiZXJyb3JcIixcImNsb3NlXCIsXCJkZXN0cm95XCIsXCJwYXVzZVwiLFwicmVzdW1lXCJdO3JldHVybiB4KG8sZnVuY3Rpb24oZSl7dC5vbihlLG4uZW1pdC5iaW5kKG4sZSkpfSksbi5fcmVhZD1mdW5jdGlvbihlKXtMKFwid3JhcHBlZCBfcmVhZFwiLGUpLHImJihyPSExLHQucmVzdW1lKCkpfSxufSxvLl9mcm9tTGlzdD1ffSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24obW9kdWxlLGV4cG9ydHMsX193ZWJwYWNrX3JlcXVpcmVfXyl7ZnVuY3Rpb24gQ29udGV4dCgpe312YXIgaW5kZXhPZj1fX3dlYnBhY2tfcmVxdWlyZV9fKDYwNyksT2JqZWN0X2tleXM9ZnVuY3Rpb24odCl7aWYoT2JqZWN0LmtleXMpcmV0dXJuIE9iamVjdC5rZXlzKHQpO3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZX0sZm9yRWFjaD1mdW5jdGlvbih0LGUpe2lmKHQuZm9yRWFjaClyZXR1cm4gdC5mb3JFYWNoKGUpO2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKWUodFtyXSxyLHQpfSxkZWZpbmVQcm9wPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoe30sXCJfXCIse30pLGZ1bmN0aW9uKHQsZSxyKXtPYmplY3QuZGVmaW5lUHJvcGVydHkodCxlLHt3cml0YWJsZTohMCxlbnVtZXJhYmxlOiExLFxuY29uZmlndXJhYmxlOiEwLHZhbHVlOnJ9KX19Y2F0Y2godCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXt0W2VdPXJ9fX0oKSxnbG9iYWxzPVtcIkFycmF5XCIsXCJCb29sZWFuXCIsXCJEYXRlXCIsXCJFcnJvclwiLFwiRXZhbEVycm9yXCIsXCJGdW5jdGlvblwiLFwiSW5maW5pdHlcIixcIkpTT05cIixcIk1hdGhcIixcIk5hTlwiLFwiTnVtYmVyXCIsXCJPYmplY3RcIixcIlJhbmdlRXJyb3JcIixcIlJlZmVyZW5jZUVycm9yXCIsXCJSZWdFeHBcIixcIlN0cmluZ1wiLFwiU3ludGF4RXJyb3JcIixcIlR5cGVFcnJvclwiLFwiVVJJRXJyb3JcIixcImRlY29kZVVSSVwiLFwiZGVjb2RlVVJJQ29tcG9uZW50XCIsXCJlbmNvZGVVUklcIixcImVuY29kZVVSSUNvbXBvbmVudFwiLFwiZXNjYXBlXCIsXCJldmFsXCIsXCJpc0Zpbml0ZVwiLFwiaXNOYU5cIixcInBhcnNlRmxvYXRcIixcInBhcnNlSW50XCIsXCJ1bmRlZmluZWRcIixcInVuZXNjYXBlXCJdO0NvbnRleHQucHJvdG90eXBlPXt9O3ZhciBTY3JpcHQ9ZXhwb3J0cy5TY3JpcHQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBTY3JpcHQ/dm9pZCh0aGlzLmNvZGU9dCk6bmV3IFNjcmlwdCh0KX07U2NyaXB0LnByb3RvdHlwZS5ydW5JbkNvbnRleHQ9ZnVuY3Rpb24odCl7aWYoISh0IGluc3RhbmNlb2YgQ29udGV4dCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIm5lZWRzIGEgJ2NvbnRleHQnIGFyZ3VtZW50LlwiKTt2YXIgZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaWZyYW1lXCIpO2Uuc3R5bGV8fChlLnN0eWxlPXt9KSxlLnN0eWxlLmRpc3BsYXk9XCJub25lXCIsZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChlKTt2YXIgcj1lLmNvbnRlbnRXaW5kb3csbj1yLmV2YWwsaT1yLmV4ZWNTY3JpcHQ7IW4mJmkmJihpLmNhbGwocixcIm51bGxcIiksbj1yLmV2YWwpLGZvckVhY2goT2JqZWN0X2tleXModCksZnVuY3Rpb24oZSl7cltlXT10W2VdfSksZm9yRWFjaChnbG9iYWxzLGZ1bmN0aW9uKGUpe3RbZV0mJihyW2VdPXRbZV0pfSk7dmFyIG89T2JqZWN0X2tleXMociksYT1uLmNhbGwocix0aGlzLmNvZGUpO3JldHVybiBmb3JFYWNoKE9iamVjdF9rZXlzKHIpLGZ1bmN0aW9uKGUpeyhlIGluIHR8fGluZGV4T2YobyxlKT09PS0xKSYmKHRbZV09cltlXSl9KSxmb3JFYWNoKGdsb2JhbHMsZnVuY3Rpb24oZSl7ZSBpbiB0fHxkZWZpbmVQcm9wKHQsZSxyW2VdKX0pLGRvY3VtZW50LmJvZHkucmVtb3ZlQ2hpbGQoZSksYX0sU2NyaXB0LnByb3RvdHlwZS5ydW5JblRoaXNDb250ZXh0PWZ1bmN0aW9uKCl7cmV0dXJuIGV2YWwodGhpcy5jb2RlKX0sU2NyaXB0LnByb3RvdHlwZS5ydW5Jbk5ld0NvbnRleHQ9ZnVuY3Rpb24odCl7dmFyIGU9U2NyaXB0LmNyZWF0ZUNvbnRleHQodCkscj10aGlzLnJ1bkluQ29udGV4dChlKTtyZXR1cm4gZm9yRWFjaChPYmplY3Rfa2V5cyhlKSxmdW5jdGlvbihyKXt0W3JdPWVbcl19KSxyfSxmb3JFYWNoKE9iamVjdF9rZXlzKFNjcmlwdC5wcm90b3R5cGUpLGZ1bmN0aW9uKHQpe2V4cG9ydHNbdF09U2NyaXB0W3RdPWZ1bmN0aW9uKGUpe3ZhciByPVNjcmlwdChlKTtyZXR1cm4gclt0XS5hcHBseShyLFtdLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKX19KSxleHBvcnRzLmNyZWF0ZVNjcmlwdD1mdW5jdGlvbih0KXtyZXR1cm4gZXhwb3J0cy5TY3JpcHQodCl9LGV4cG9ydHMuY3JlYXRlQ29udGV4dD1TY3JpcHQuY3JlYXRlQ29udGV4dD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgQ29udGV4dDtyZXR1cm5cIm9iamVjdFwiPT10eXBlb2YgdCYmZm9yRWFjaChPYmplY3Rfa2V5cyh0KSxmdW5jdGlvbihyKXtlW3JdPXRbcl19KSxlfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXt2YXIgbj1yKDc1KSxpPXIoNjMpLG89cigxMTUpLGE9cigyNjQpLGY9cigyNjMpLHM9cigyNjYpLHU9cigyNjUpLGg9cigyNjIpLGM9cigxMTYpLGQ9bmV3IGUoMCksbD1mdW5jdGlvbih0KXt2YXIgZT1uLmZyb21VcmkodCk7cmV0dXJuIGUudmFsaWRhdGUoKX0scD1mdW5jdGlvbih0LHIsbil7aWYoXCJ1bmRlZmluZWRcIj09dHlwZW9mIG4mJihuPWQpLCFlLmlzQnVmZmVyKG4pKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlclwiKTt2YXIgbz1pLmZyb21VcmkodCksYT1vLmdldENvbmRpdGlvblVyaSgpO2lmKGEhPT1yKXRocm93IG5ldyBFcnJvcihcIkZ1bGZpbGxtZW50IGRvZXMgbm90IG1hdGNoIGNvbmRpdGlvbiAoZXhwZWN0ZWQ6IFwiK3IrXCIsIGFjdHVhbDogXCIrYStcIilcIik7cmV0dXJuIG8udmFsaWRhdGUobil9LGI9ZnVuY3Rpb24odCl7dmFyIGU9aS5mcm9tVXJpKHQpO3JldHVybiBlLmdldENvbmRpdGlvblVyaSgpfTtvLnJlZ2lzdGVyVHlwZShhKSxvLnJlZ2lzdGVyVHlwZShmKSxvLnJlZ2lzdGVyVHlwZShzKSxvLnJlZ2lzdGVyVHlwZSh1KSxvLnJlZ2lzdGVyVHlwZShoKSx0LmV4cG9ydHM9e0NvbmRpdGlvbjpuLEZ1bGZpbGxtZW50OmksVHlwZVJlZ2lzdHJ5Om8sUHJlaW1hZ2VTaGEyNTY6YSxSc2FTaGEyNTY6dSxQcmVmaXhTaGEyNTY6ZixUaHJlc2hvbGRTaGEyNTY6cyxFZDI1NTE5OmgsdmFsaWRhdGVDb25kaXRpb246bCx2YWxpZGF0ZUZ1bGZpbGxtZW50OnAsZnVsZmlsbG1lbnRUb0NvbmRpdGlvbjpiLGJhc2U2NHVybDpjLGZyb21Db25kaXRpb25Vcmk6bi5mcm9tVXJpLmJpbmQobiksZnJvbUNvbmRpdGlvbkJpbmFyeTpuLmZyb21CaW5hcnkuYmluZChuKSxmcm9tRnVsZmlsbG1lbnRVcmk6aS5mcm9tVXJpLmJpbmQoaSksZnJvbUZ1bGZpbGxtZW50QmluYXJ5OmkuZnJvbUJpbmFyeS5iaW5kKGkpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSh0LGUscil7dFtlXXx8T2JqZWN0W25dKHQsZSx7d3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwLHZhbHVlOnJ9KX1pZihyKDQ2MSkscigyNjgpLHIoMjY5KSx0Ll9iYWJlbFBvbHlmaWxsKXRocm93IG5ldyBFcnJvcihcIm9ubHkgb25lIGluc3RhbmNlIG9mIGJhYmVsLXBvbHlmaWxsIGlzIGFsbG93ZWRcIik7dC5fYmFiZWxQb2x5ZmlsbD0hMDt2YXIgbj1cImRlZmluZVByb3BlcnR5XCI7ZShTdHJpbmcucHJvdG90eXBlLFwicGFkTGVmdFwiLFwiXCIucGFkU3RhcnQpLGUoU3RyaW5nLnByb3RvdHlwZSxcInBhZFJpZ2h0XCIsXCJcIi5wYWRFbmQpLFwicG9wLHJldmVyc2Usc2hpZnQsa2V5cyx2YWx1ZXMsZW50cmllcyxpbmRleE9mLGV2ZXJ5LHNvbWUsZm9yRWFjaCxtYXAsZmlsdGVyLGZpbmQsZmluZEluZGV4LGluY2x1ZGVzLGpvaW4sc2xpY2UsY29uY2F0LHB1c2gsc3BsaWNlLHVuc2hpZnQsc29ydCxsYXN0SW5kZXhPZixyZWR1Y2UscmVkdWNlUmlnaHQsY29weVdpdGhpbixmaWxsXCIuc3BsaXQoXCIsXCIpLmZvckVhY2goZnVuY3Rpb24odCl7W11bdF0mJmUoQXJyYXksdCxGdW5jdGlvbi5jYWxsLmJpbmQoW11bdF0pKX0pfSkuY2FsbChlLHIoMzkpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTExKSxpPXIoMTEyKSxvPXIoMjU1KSxhPXIoMjU2KTt0LmV4cG9ydHM9e1JlYWRlcjpvLFdyaXRlcjphfTtmb3IodmFyIGYgaW4gaSlpLmhhc093blByb3BlcnR5KGYpJiYodC5leHBvcnRzW2ZdPWlbZl0pO2Zvcih2YXIgcyBpbiBuKW4uaGFzT3duUHJvcGVydHkocykmJih0LmV4cG9ydHNbc109bltzXSl9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtpZighdHx8IWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImRhdGEgbXVzdCBiZSBhIG5vZGUgQnVmZmVyXCIpO3RoaXMuX2J1Zj10LHRoaXMuX3NpemU9dC5sZW5ndGgsdGhpcy5fbGVuPTAsdGhpcy5fb2Zmc2V0PTB9dmFyIGk9cigyMDIpLG89cigxMTIpLGE9cigxMTEpLGY9YS5uZXdJbnZhbGlkQXNuMUVycm9yO09iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcImxlbmd0aFwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9sZW59fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KG4ucHJvdG90eXBlLFwib2Zmc2V0XCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX29mZnNldH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsXCJyZW1haW5cIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3NpemUtdGhpcy5fb2Zmc2V0fX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxcImJ1ZmZlclwiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCl9fSksbi5wcm90b3R5cGUucmVhZEJ5dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5fc2l6ZS10aGlzLl9vZmZzZXQ8MSlyZXR1cm4gbnVsbDt2YXIgZT0yNTUmdGhpcy5fYnVmW3RoaXMuX29mZnNldF07cmV0dXJuIHR8fCh0aGlzLl9vZmZzZXQrPTEpLGV9LG4ucHJvdG90eXBlLnBlZWs9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yZWFkQnl0ZSghMCl9LG4ucHJvdG90eXBlLnJlYWRMZW5ndGg9ZnVuY3Rpb24odCl7aWYodm9pZCAwPT09dCYmKHQ9dGhpcy5fb2Zmc2V0KSx0Pj10aGlzLl9zaXplKXJldHVybiBudWxsO3ZhciBlPTI1NSZ0aGlzLl9idWZbdCsrXTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtpZigxMjg9PSgxMjgmZSkpe2lmKGUmPTEyNywwPT1lKXRocm93IGYoXCJJbmRlZmluaXRlIGxlbmd0aCBub3Qgc3VwcG9ydGVkXCIpO2lmKGU+NCl0aHJvdyBmKFwiZW5jb2RpbmcgdG9vIGxvbmdcIik7aWYodGhpcy5fc2l6ZS10PGUpcmV0dXJuIG51bGw7dGhpcy5fbGVuPTA7Zm9yKHZhciByPTA7cjxlO3IrKyl0aGlzLl9sZW49KHRoaXMuX2xlbjw8OCkrKDI1NSZ0aGlzLl9idWZbdCsrXSl9ZWxzZSB0aGlzLl9sZW49ZTtyZXR1cm4gdH0sbi5wcm90b3R5cGUucmVhZFNlcXVlbmNlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGVlaygpO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2lmKHZvaWQgMCE9PXQmJnQhPT1lKXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIitlLnRvU3RyaW5nKDE2KSk7dmFyIHI9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtyZXR1cm4gbnVsbD09PXI/bnVsbDoodGhpcy5fb2Zmc2V0PXIsZSl9LG4ucHJvdG90eXBlLnJlYWRJbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZFRhZyhvLkludGVnZXIpfSxuLnByb3RvdHlwZS5yZWFkQm9vbGVhbj1mdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5fcmVhZFRhZyhvLkJvb2xlYW4pfSxuLnByb3RvdHlwZS5yZWFkRW51bWVyYXRpb249ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcmVhZFRhZyhvLkVudW1lcmF0aW9uKX0sbi5wcm90b3R5cGUucmVhZFN0cmluZz1mdW5jdGlvbih0LHIpe3R8fCh0PW8uT2N0ZXRTdHJpbmcpO3ZhciBuPXRoaXMucGVlaygpO2lmKG51bGw9PT1uKXJldHVybiBudWxsO2lmKG4hPT10KXRocm93IGYoXCJFeHBlY3RlZCAweFwiK3QudG9TdHJpbmcoMTYpK1wiOiBnb3QgMHhcIituLnRvU3RyaW5nKDE2KSk7dmFyIGk9dGhpcy5yZWFkTGVuZ3RoKHRoaXMuX29mZnNldCsxKTtpZihudWxsPT09aSlyZXR1cm4gbnVsbDtpZih0aGlzLmxlbmd0aD50aGlzLl9zaXplLWkpcmV0dXJuIG51bGw7aWYodGhpcy5fb2Zmc2V0PWksMD09PXRoaXMubGVuZ3RoKXJldHVybiByP25ldyBlKDApOlwiXCI7dmFyIGE9dGhpcy5fYnVmLnNsaWNlKHRoaXMuX29mZnNldCx0aGlzLl9vZmZzZXQrdGhpcy5sZW5ndGgpO3JldHVybiB0aGlzLl9vZmZzZXQrPXRoaXMubGVuZ3RoLHI/YTphLnRvU3RyaW5nKFwidXRmOFwiKX0sbi5wcm90b3R5cGUucmVhZE9JRD1mdW5jdGlvbih0KXt0fHwodD1vLk9JRCk7dmFyIGU9dGhpcy5yZWFkU3RyaW5nKHQsITApO2lmKG51bGw9PT1lKXJldHVybiBudWxsO2Zvcih2YXIgcj1bXSxuPTAsaT0wO2k8ZS5sZW5ndGg7aSsrKXt2YXIgYT0yNTUmZVtpXTtuPDw9NyxuKz0xMjcmYSwwPT0oMTI4JmEpJiYoci5wdXNoKG4pLG49MCl9cmV0dXJuIG49ci5zaGlmdCgpLHIudW5zaGlmdChuJTQwKSxyLnVuc2hpZnQobi80MD4+MCksci5qb2luKFwiLlwiKX0sbi5wcm90b3R5cGUuX3JlYWRUYWc9ZnVuY3Rpb24odCl7aS5vayh2b2lkIDAhPT10KTt2YXIgZT10aGlzLnBlZWsoKTtpZihudWxsPT09ZSlyZXR1cm4gbnVsbDtpZihlIT09dCl0aHJvdyBmKFwiRXhwZWN0ZWQgMHhcIit0LnRvU3RyaW5nKDE2KStcIjogZ290IDB4XCIrZS50b1N0cmluZygxNikpO3ZhciByPXRoaXMucmVhZExlbmd0aCh0aGlzLl9vZmZzZXQrMSk7aWYobnVsbD09PXIpcmV0dXJuIG51bGw7aWYodGhpcy5sZW5ndGg+NCl0aHJvdyBmKFwiSW50ZWdlciB0b28gbG9uZzogXCIrdGhpcy5sZW5ndGgpO2lmKHRoaXMubGVuZ3RoPnRoaXMuX3NpemUtcilyZXR1cm4gbnVsbDt0aGlzLl9vZmZzZXQ9cjtmb3IodmFyIG49dGhpcy5fYnVmW3RoaXMuX29mZnNldF0sbz0wLGE9MDthPHRoaXMubGVuZ3RoO2ErKylvPDw9OCxvfD0yNTUmdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXTtyZXR1cm4gMTI4PT0oMTI4Jm4pJiY0IT09YSYmKG8tPTE8PDgqYSksbz4+MH0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtvLm9rKHQpLG8uZXF1YWwodHlwZW9mIHQsXCJvYmplY3RcIiksby5vayhlKSxvLmVxdWFsKHR5cGVvZiBlLFwib2JqZWN0XCIpO3ZhciByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHQpO3JldHVybiByLmZvckVhY2goZnVuY3Rpb24ocil7aWYoIWVbcl0pe3ZhciBuPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IodCxyKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyLG4pfX0pLGV9ZnVuY3Rpb24gaSh0KXt0PW4ocyx0fHx7fSksdGhpcy5fYnVmPW5ldyBlKHQuc2l6ZXx8MTAyNCksdGhpcy5fc2l6ZT10aGlzLl9idWYubGVuZ3RoLHRoaXMuX29mZnNldD0wLHRoaXMuX29wdGlvbnM9dCx0aGlzLl9zZXE9W119dmFyIG89cigyMDIpLGE9cigxMTIpLGY9cigxMTEpLHM9KGYubmV3SW52YWxpZEFzbjFFcnJvcix7c2l6ZToxMDI0LGdyb3d0aEZhY3Rvcjo4fSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGkucHJvdG90eXBlLFwiYnVmZmVyXCIse2dldDpmdW5jdGlvbigpe2lmKHRoaXMuX3NlcS5sZW5ndGgpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IodGhpcy5fc2VxLmxlbmd0aCtcIiB1bmVuZGVkIHNlcXVlbmNlKHMpXCIpO3JldHVybiB0aGlzLl9idWYuc2xpY2UoMCx0aGlzLl9vZmZzZXQpfX0pLGkucHJvdG90eXBlLndyaXRlQnl0ZT1mdW5jdGlvbih0KXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiYXJndW1lbnQgbXVzdCBiZSBhIE51bWJlclwiKTt0aGlzLl9lbnN1cmUoMSksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10fSxpLnByb3RvdHlwZS53cml0ZUludD1mdW5jdGlvbih0LGUpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO1wibnVtYmVyXCIhPXR5cGVvZiBlJiYoZT1hLkludGVnZXIpO2Zvcih2YXIgcj00OygwPT09KDQyODY1Nzg2ODgmdCl8fCg0Mjg2NTc4Njg4JnQpPT09LTgzODg2MDgpJiZyPjE7KXItLSx0PDw9ODtpZihyPjQpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IoXCJCRVIgaW50cyBjYW5ub3QgYmUgPiAweGZmZmZmZmZmXCIpO2Zvcih0aGlzLl9lbnN1cmUoMityKSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPWUsdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT1yO3ItLSA+MDspdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT0oNDI3ODE5MDA4MCZ0KT4+PjI0LHQ8PD04fSxpLnByb3RvdHlwZS53cml0ZU51bGw9ZnVuY3Rpb24oKXt0aGlzLndyaXRlQnl0ZShhLk51bGwpLHRoaXMud3JpdGVCeXRlKDApfSxpLnByb3RvdHlwZS53cml0ZUVudW1lcmF0aW9uPWZ1bmN0aW9uKHQsZSl7aWYoXCJudW1iZXJcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBOdW1iZXJcIik7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuRW51bWVyYXRpb24pLHRoaXMud3JpdGVJbnQodCxlKX0saS5wcm90b3R5cGUud3JpdGVCb29sZWFuPWZ1bmN0aW9uKHQsZSl7aWYoXCJib29sZWFuXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgQm9vbGVhblwiKTtcIm51bWJlclwiIT10eXBlb2YgZSYmKGU9YS5Cb29sZWFuKSx0aGlzLl9lbnN1cmUoMyksdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT1lLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ/MjU1OjB9LGkucHJvdG90eXBlLndyaXRlU3RyaW5nPWZ1bmN0aW9uKHQscil7aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcgKHdhczogXCIrdHlwZW9mIHQrXCIpXCIpO1wibnVtYmVyXCIhPXR5cGVvZiByJiYocj1hLk9jdGV0U3RyaW5nKTt2YXIgbj1lLmJ5dGVMZW5ndGgodCk7dGhpcy53cml0ZUJ5dGUociksdGhpcy53cml0ZUxlbmd0aChuKSxuJiYodGhpcy5fZW5zdXJlKG4pLHRoaXMuX2J1Zi53cml0ZSh0LHRoaXMuX29mZnNldCksdGhpcy5fb2Zmc2V0Kz1uKX0saS5wcm90b3R5cGUud3JpdGVCdWZmZXI9ZnVuY3Rpb24odCxyKXtpZihcIm51bWJlclwiIT10eXBlb2Ygcil0aHJvdyBuZXcgVHlwZUVycm9yKFwidGFnIG11c3QgYmUgYSBudW1iZXJcIik7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBidWZmZXJcIik7dGhpcy53cml0ZUJ5dGUociksdGhpcy53cml0ZUxlbmd0aCh0Lmxlbmd0aCksdGhpcy5fZW5zdXJlKHQubGVuZ3RoKSx0LmNvcHkodGhpcy5fYnVmLHRoaXMuX29mZnNldCwwLHQubGVuZ3RoKSx0aGlzLl9vZmZzZXQrPXQubGVuZ3RofSxpLnByb3RvdHlwZS53cml0ZVN0cmluZ0FycmF5PWZ1bmN0aW9uKHQpe2lmKCF0IGluc3RhbmNlb2YgQXJyYXkpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXlbU3RyaW5nXVwiKTt2YXIgZT10aGlzO3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLndyaXRlU3RyaW5nKHQpfSl9LGkucHJvdG90eXBlLndyaXRlT0lEPWZ1bmN0aW9uKHQsZSl7ZnVuY3Rpb24gcih0LGUpe2U8MTI4P3QucHVzaChlKTplPDE2Mzg0Pyh0LnB1c2goZT4+Pjd8MTI4KSx0LnB1c2goMTI3JmUpKTplPDIwOTcxNTI/KHQucHVzaChlPj4+MTR8MTI4KSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKTplPDI2ODQzNTQ1Nj8odC5wdXNoKGU+Pj4yMXwxMjgpLHQucHVzaCgyNTUmKGU+Pj4xNHwxMjgpKSx0LnB1c2goMjU1JihlPj4+N3wxMjgpKSx0LnB1c2goMTI3JmUpKToodC5wdXNoKDI1NSYoZT4+PjI4fDEyOCkpLHQucHVzaCgyNTUmKGU+Pj4yMXwxMjgpKSx0LnB1c2goMjU1JihlPj4+MTR8MTI4KSksdC5wdXNoKDI1NSYoZT4+Pjd8MTI4KSksdC5wdXNoKDEyNyZlKSl9aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcihcImFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmdcIik7aWYoXCJudW1iZXJcIiE9dHlwZW9mIGUmJihlPWEuT0lEKSwhL14oWzAtOV0rXFwuKXszLH1bMC05XSskLy50ZXN0KHQpKXRocm93IG5ldyBFcnJvcihcImFyZ3VtZW50IGlzIG5vdCBhIHZhbGlkIE9JRCBzdHJpbmdcIik7dmFyIG49dC5zcGxpdChcIi5cIiksaT1bXTtpLnB1c2goNDAqcGFyc2VJbnQoblswXSwxMCkrcGFyc2VJbnQoblsxXSwxMCkpLG4uc2xpY2UoMikuZm9yRWFjaChmdW5jdGlvbih0KXtyKGkscGFyc2VJbnQodCwxMCkpfSk7dmFyIG89dGhpczt0aGlzLl9lbnN1cmUoMitpLmxlbmd0aCksdGhpcy53cml0ZUJ5dGUoZSksdGhpcy53cml0ZUxlbmd0aChpLmxlbmd0aCksaS5mb3JFYWNoKGZ1bmN0aW9uKHQpe28ud3JpdGVCeXRlKHQpfSl9LGkucHJvdG90eXBlLndyaXRlTGVuZ3RoPWZ1bmN0aW9uKHQpe2lmKFwibnVtYmVyXCIhPXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoXCJhcmd1bWVudCBtdXN0IGJlIGEgTnVtYmVyXCIpO2lmKHRoaXMuX2Vuc3VyZSg0KSx0PD0xMjcpdGhpcy5fYnVmW3RoaXMuX29mZnNldCsrXT10O2Vsc2UgaWYodDw9MjU1KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTI5LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dDtlbHNlIGlmKHQ8PTY1NTM1KXRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109MTMwLHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+OCx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ7ZWxzZXtpZighKHQ8PTE2Nzc3MjE1KSl0aHJvdyBuZXcgSW52YWxpZEFzbjFFUnJvcihcIkxlbmd0aCB0b28gbG9uZyAoPiA0IGJ5dGVzKVwiKTt0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPTEzMSx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXQ+PjE2LHRoaXMuX2J1Zlt0aGlzLl9vZmZzZXQrK109dD4+OCx0aGlzLl9idWZbdGhpcy5fb2Zmc2V0KytdPXR9fSxpLnByb3RvdHlwZS5zdGFydFNlcXVlbmNlPWZ1bmN0aW9uKHQpe1wibnVtYmVyXCIhPXR5cGVvZiB0JiYodD1hLlNlcXVlbmNlfGEuQ29uc3RydWN0b3IpLHRoaXMud3JpdGVCeXRlKHQpLHRoaXMuX3NlcS5wdXNoKHRoaXMuX29mZnNldCksdGhpcy5fZW5zdXJlKDMpLHRoaXMuX29mZnNldCs9M30saS5wcm90b3R5cGUuZW5kU2VxdWVuY2U9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9zZXEucG9wKCksZT10KzMscj10aGlzLl9vZmZzZXQtZTtpZihyPD0xMjcpdGhpcy5fc2hpZnQoZSxyLC0yKSx0aGlzLl9idWZbdF09cjtlbHNlIGlmKHI8PTI1NSl0aGlzLl9zaGlmdChlLHIsLTEpLHRoaXMuX2J1Zlt0XT0xMjksdGhpcy5fYnVmW3QrMV09cjtlbHNlIGlmKHI8PTY1NTM1KXRoaXMuX2J1Zlt0XT0xMzAsdGhpcy5fYnVmW3QrMV09cj4+OCx0aGlzLl9idWZbdCsyXT1yO2Vsc2V7aWYoIShyPD0xNjc3NzIxNSkpdGhyb3cgbmV3IEludmFsaWRBc24xRXJyb3IoXCJTZXF1ZW5jZSB0b28gbG9uZ1wiKTt0aGlzLl9zaGlmdChlLHIsMSksdGhpcy5fYnVmW3RdPTEzMSx0aGlzLl9idWZbdCsxXT1yPj4xNix0aGlzLl9idWZbdCsyXT1yPj44LHRoaXMuX2J1Zlt0KzNdPXJ9fSxpLnByb3RvdHlwZS5fc2hpZnQ9ZnVuY3Rpb24odCxlLHIpe28ub2sodm9pZCAwIT09dCksby5vayh2b2lkIDAhPT1lKSxvLm9rKHIpLHRoaXMuX2J1Zi5jb3B5KHRoaXMuX2J1Zix0K3IsdCx0K2UpLHRoaXMuX29mZnNldCs9cn0saS5wcm90b3R5cGUuX2Vuc3VyZT1mdW5jdGlvbih0KXtpZihvLm9rKHQpLHRoaXMuX3NpemUtdGhpcy5fb2Zmc2V0PHQpe3ZhciByPXRoaXMuX3NpemUqdGhpcy5fb3B0aW9ucy5ncm93dGhGYWN0b3I7ci10aGlzLl9vZmZzZXQ8dCYmKHIrPXQpO3ZhciBuPW5ldyBlKHIpO3RoaXMuX2J1Zi5jb3B5KG4sMCwwLHRoaXMuX29mZnNldCksdGhpcy5fYnVmPW4sdGhpcy5fc2l6ZT1yfX0sdC5leHBvcnRzPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNTQpO3QuZXhwb3J0cz17QmVyOm4sQmVyUmVhZGVyOm4uUmVhZGVyLEJlcldyaXRlcjpuLldyaXRlcn19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoOTMpLGE9cigxMTQpLGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KGUpe24odGhpcyx0KSxlPWV8fHt9LHRoaXMuaGFzaEFsZ29yaXRobT1lLmhhc2hBbGdvcml0aG18fFwic2hhMjU2XCIsdGhpcy5oYXNoTGVuZ3RoPWEuZ2V0TGVuZ3RoKHRoaXMuaGFzaEFsZ29yaXRobSksdGhpcy5zYWx0TGVuZ3RoPXRoaXMuaGFzaExlbmd0aH1yZXR1cm4gaSh0LFt7a2V5OlwiZ2VuZXJhdGVcIix2YWx1ZTpmdW5jdGlvbih0LHIpe2Zvcih2YXIgbj1uZXcgZShyKSxpPU1hdGguY2VpbChyL3RoaXMuaGFzaExlbmd0aCksYT0wO2E8aTthKyspe3ZhciBmPW5ldyBlKDQpO2Yud3JpdGVJbnQzMkJFKGEsMCk7dmFyIHM9by5jcmVhdGVIYXNoKHRoaXMuaGFzaEFsZ29yaXRobSkudXBkYXRlKHQpLnVwZGF0ZShmKS5kaWdlc3QoKTtzLmNvcHkobixhKnRoaXMuaGFzaExlbmd0aCl9cmV0dXJuIG59fV0pLHR9KCk7dC5leHBvcnRzPWZ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfXZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksbz1yKDkzKSxhPXIoMjU4KSxmPXIoMjY3KSxzPXIoMTE0KSx1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksZT1lfHx7fSx0aGlzLmhhc2hBbGdvcml0aG09ZS5oYXNoQWxnb3JpdGhtfHxcInNoYTI1NlwiLHRoaXMuaGFzaExlbmd0aD1zLmdldExlbmd0aCh0aGlzLmhhc2hBbGdvcml0aG0pLHRoaXMuc2FsdExlbmd0aD10aGlzLmhhc2hMZW5ndGh9cmV0dXJuIGkodCxbe2tleTpcImVuY29kZVwiLHZhbHVlOmZ1bmN0aW9uKHQscil7dmFyIG49TWF0aC5jZWlsKHIvOCksaT1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUodCkuZGlnZXN0KCk7aWYobjx0aGlzLmhhc2hMZW5ndGgrdGhpcy5zYWx0TGVuZ3RoKzIpdGhyb3cgbmV3IEVycm9yKFwiRW5jb2RpbmcgZXJyb3I6IFJTQSBtb2R1bHVzIGlzIHRvbyBzbWFsbCBmb3IgXCIrdGhpcy5oYXNoQWxnb3JpdGhtKTt2YXIgcz1vLnJhbmRvbUJ5dGVzKHRoaXMuc2FsdExlbmd0aCksdT1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUobmV3IGUoOCkuZmlsbCgwKSkudXBkYXRlKGkpLnVwZGF0ZShzKS5kaWdlc3QoKSxoPWUuY29uY2F0KFtuZXcgZShuLXRoaXMuc2FsdExlbmd0aC10aGlzLmhhc2hMZW5ndGgtMikuZmlsbCgwKSxuZXcgZShbMV0pLHNdKSxjPW5ldyBhKHtoYXNoQWxnb3JpdGhtOnRoaXMuaGFzaEFsZ29yaXRobX0pLGQ9Yy5nZW5lcmF0ZSh1LG4tdGhpcy5oYXNoTGVuZ3RoLTEpLGw9ZihoLGQpO3JldHVybiBsWzBdJj0yNTU+Pj44Km4tcixlLmNvbmNhdChbbCx1LG5ldyBlKFsxODhdKV0pfX0se2tleTpcInZlcmlmeVwiLHZhbHVlOmZ1bmN0aW9uKHQscixuKXt2YXIgaT1NYXRoLmNlaWwobi84KSxzPW8uY3JlYXRlSGFzaCh0aGlzLmhhc2hBbGdvcml0aG0pLnVwZGF0ZSh0KS5kaWdlc3QoKTtpZihpPHRoaXMuaGFzaExlbmd0aCt0aGlzLnNhbHRMZW5ndGgrMilyZXR1cm4hMTtpZigxODghPT1yW3IubGVuZ3RoLTFdKXJldHVybiExO3ZhciB1PWktdGhpcy5oYXNoTGVuZ3RoLTEsaD1yLnNsaWNlKDAsdSksYz1yLnNsaWNlKHUsdSt0aGlzLmhhc2hMZW5ndGgpLGQ9MjU1Pj4+OCppLW47aWYoaFswXSZ+ZClyZXR1cm4hMTt2YXIgbD1uZXcgYSh7aGFzaEFsZ29yaXRobTp0aGlzLmhhc2hBbGdvcml0aG19KSxwPWwuZ2VuZXJhdGUoYyxpLXRoaXMuaGFzaExlbmd0aC0xKSxiPWYoaCxwKTtiWzBdJj1kO2Zvcih2YXIgdj1pLXRoaXMuaGFzaExlbmd0aC10aGlzLnNhbHRMZW5ndGgtMix5PTA7eTx2O3krKylpZigwIT09Ylt5XSlyZXR1cm4hMTtpZigxIT09Ylt2XSlyZXR1cm4hMTt2YXIgbT1iLnNsaWNlKGIubGVuZ3RoLXRoaXMuc2FsdExlbmd0aCksZz1vLmNyZWF0ZUhhc2godGhpcy5oYXNoQWxnb3JpdGhtKS51cGRhdGUobmV3IGUoOCkuZmlsbCgwKSkudXBkYXRlKHMpLnVwZGF0ZShtKS5kaWdlc3QoKTtyZXR1cm4gMD09PWUuY29tcGFyZShjLGcpfX1dKSx0fSgpO3UuRU1QVFlfQlVGRkVSPW5ldyBlKDApLHQuZXhwb3J0cz11fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLG89cig5MyksYT1yKDQ2NCksZj1yKDI1OSkscz1yKDE2MSksdT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQoZSl7bih0aGlzLHQpLGU9ZXx8e30sdGhpcy5oYXNoQWxnb3JpdGhtPWUuaGFzaEFsZ29yaXRobXx8XCJzaGEyNTZcIix0aGlzLnBzcz1uZXcgZih7aGFzaEFsZ29yaXRobTp0aGlzLmhhc2hBbGdvcml0aG19KX1yZXR1cm4gaSh0LFt7a2V5Olwic2lnblwiLHZhbHVlOmZ1bmN0aW9uKHIsbil7dmFyIGk9cy5tb2R1bHVzRnJvbVByaXZhdGVLZXkociksZj1pWzBdLnRvU3RyaW5nKDIpLmxlbmd0aCx1PTgqKGkubGVuZ3RoLTEpK2YsaD10aGlzLnBzcy5lbmNvZGUobix1LTEpLGM9aC5sZW5ndGg8aS5sZW5ndGg/ZS5jb25jYXQoW3QuWkVST19CWVRFLGhdKTpoO3JldHVybiBvLnByaXZhdGVFbmNyeXB0KHtrZXk6cixwYWRkaW5nOmEuUlNBX05PX1BBRERJTkd9LGMpfX0se2tleTpcInZlcmlmeVwiLHZhbHVlOmZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1zLm1vZHVsdXNUb1BlbSh0KSxpPW8ucHVibGljRGVjcnlwdCh7a2V5Om4scGFkZGluZzphLlJTQV9OT19QQURESU5HfSxyKSxmPXRbMF0udG9TdHJpbmcoMikubGVuZ3RoLHU9OCoodC5sZW5ndGgtMSkrZixoPXUlOD09PTE/aS5zbGljZSgxKTppO3JldHVybiB0aGlzLnBzcy52ZXJpZnkoZSxoLHUtMSl9fV0pLHR9KCk7dS5aRVJPX0JZVEU9bmV3IGUoWzBdKSx0LmV4cG9ydHM9dX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPXIoNjIpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLChlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig0ODgpLHM9cig2MyksdT1yKDUzKSxoPXIoMTYwKSxjPXZvaWQgMDt0cnl7Yz1yKDQ2Mil9Y2F0Y2godCl7fXZhciBkPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5wdWJsaWNLZXk9bnVsbCx0LnNpZ25hdHVyZT1udWxsLHR9cmV0dXJuIG8ocix0KSxhKHIsW3trZXk6XCJzZXRQdWJsaWNLZXlcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiUHVibGljIGtleSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3QpO2lmKDMyIT09dC5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiUHVibGljIGtleSBtdXN0IGJlIDMyIGJ5dGVzLCB3YXM6IFwiK3QubGVuZ3RoKTt0aGlzLnB1YmxpY0tleT10fX0se2tleTpcInNldFNpZ25hdHVyZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTaWduYXR1cmUgbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIit0KTtpZig2NCE9PXQubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIlNpZ25hdHVyZSBtdXN0IGJlIDY0IGJ5dGVzLCB3YXM6IFwiK3QubGVuZ3RoKTt0aGlzLnNpZ25hdHVyZT10fX0se2tleTpcInNpZ25cIix2YWx1ZTpmdW5jdGlvbih0LHIpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyB1KFwiTWVzc2FnZSBtdXN0IGJlIGEgQnVmZmVyXCIpO2lmKCFlLmlzQnVmZmVyKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcml2YXRlIGtleSBtdXN0IGJlIGEgQnVmZmVyLCB3YXM6IFwiK3IpO2lmKDMyIT09ci5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKFwiUHJpdmF0ZSBrZXkgbXVzdCBiZSAzMiBieXRlcywgd2FzOiBcIityLmxlbmd0aCk7aWYoYyl7dmFyIG49Yy5NYWtlS2V5cGFpcihyKTt0aGlzLnNldFB1YmxpY0tleShuLnB1YmxpY0tleSksdGhpcy5zaWduYXR1cmU9Yy5TaWduKHQsbil9ZWxzZXt2YXIgaT1mLnNpZ24ua2V5UGFpci5mcm9tU2VlZChyKTt0aGlzLnNldFB1YmxpY0tleShuZXcgZShpLnB1YmxpY0tleSkpLHRoaXMuc2lnbmF0dXJlPW5ldyBlKGYuc2lnbi5kZXRhY2hlZCh0LGkuc2VjcmV0S2V5KSl9fX0se2tleTpcImdlbmVyYXRlSGFzaFwiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIXRoaXMucHVibGljS2V5KXRocm93IG5ldyB1KFwiUmVxdWlyZXMgYSBwdWJsaWMga2V5XCIpO3JldHVybiB0aGlzLnB1YmxpY0tleX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFB1YmxpY0tleSh0LnJlYWRPY3RldFN0cmluZyhyLlBVQktFWV9MRU5HVEgpKSx0aGlzLnNldFNpZ25hdHVyZSh0LnJlYWRPY3RldFN0cmluZyhyLlNJR05BVFVSRV9MRU5HVEgpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0LndyaXRlT2N0ZXRTdHJpbmcodGhpcy5wdWJsaWNLZXksci5QVUJLRVlfTEVOR1RIKSx0LndyaXRlT2N0ZXRTdHJpbmcodGhpcy5zaWduYXR1cmUsci5TSUdOQVRVUkVfTEVOR1RIKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHIuRlVMRklMTE1FTlRfTEVOR1RIfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBhIEJ1ZmZlclwiKTt2YXIgcj12b2lkIDA7aWYocj1jP2MuVmVyaWZ5KHQsdGhpcy5zaWduYXR1cmUsdGhpcy5wdWJsaWNLZXkpOmYuc2lnbi5kZXRhY2hlZC52ZXJpZnkodCx0aGlzLnNpZ25hdHVyZSx0aGlzLnB1YmxpY0tleSksciE9PSEwKXRocm93IG5ldyBoKFwiSW52YWxpZCBlZDI1NTE5IHNpZ25hdHVyZVwiKTtyZXR1cm4hMH19XSkscn0ocyk7ZC5UWVBFX0lEPTQsZC5GRUFUVVJFX0JJVE1BU0s9MzIsZC5QVUJLRVlfTEVOR1RIPTMyLGQuU0lHTkFUVVJFX0xFTkdUSD02NCxkLkZVTEZJTExNRU5UX0xFTkdUSD1kLlBVQktFWV9MRU5HVEgrZC5TSUdOQVRVUkVfTEVOR1RILHQuZXhwb3J0cz1kfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQsZSl7aWYoISh0IGluc3RhbmNlb2YgZSkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvblwiKX1mdW5jdGlvbiBpKHQsZSl7aWYoIXQpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKFwidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkXCIpO3JldHVybiFlfHxcIm9iamVjdFwiIT10eXBlb2YgZSYmXCJmdW5jdGlvblwiIT10eXBlb2YgZT90OmV9ZnVuY3Rpb24gbyh0LGUpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIGUmJm51bGwhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiwgbm90IFwiK3R5cGVvZiBlKTt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUmJmUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSxlJiYoT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGUpOnQuX19wcm90b19fPWUpfXZhciBhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUpe2Zvcih2YXIgcj0wO3I8ZS5sZW5ndGg7cisrKXt2YXIgbj1lW3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLFwidmFsdWVcImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gciYmdChlLnByb3RvdHlwZSxyKSxuJiZ0KGUsbiksZX19KCksZj1mdW5jdGlvbiB0KGUscixuKXtudWxsPT09ZSYmKGU9RnVuY3Rpb24ucHJvdG90eXBlKTt2YXIgaT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUscik7aWYodm9pZCAwPT09aSl7dmFyIG89T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpO3JldHVybiBudWxsPT09bz92b2lkIDA6dChvLHIsbil9aWYoXCJ2YWx1ZVwiaW4gaSlyZXR1cm4gaS52YWx1ZTt2YXIgYT1pLmdldDtpZih2b2lkIDAhPT1hKXJldHVybiBhLmNhbGwobil9LHM9cig3NSksdT1yKDYzKSxoPXIoNzYpLGM9cig5MCksZD1yKDUzKSxsPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC5zdWJjb25kaXRpb249bnVsbCx0fXJldHVybiBvKHIsdCksYShyLFt7a2V5Olwic2V0U3ViY29uZGl0aW9uXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD1zLmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiBzKSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb25zIG11c3QgYmUgVVJJcyBvciBvYmplY3RzIG9mIHR5cGUgQ29uZGl0aW9uXCIpO3RoaXMuc3ViY29uZGl0aW9uPXR9fSx7a2V5Olwic2V0U3ViZnVsZmlsbG1lbnRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZihcInN0cmluZ1wiPT10eXBlb2YgdCl0PXUuZnJvbVVyaSh0KTtlbHNlIGlmKCEodCBpbnN0YW5jZW9mIHUpKXRocm93IG5ldyBFcnJvcihcIlN1YmZ1bGZpbGxtZW50cyBtdXN0IGJlIG9iamVjdHMgb2YgdHlwZSBGdWxmaWxsbWVudFwiKTt0aGlzLnN1YmNvbmRpdGlvbj10fX0se2tleTpcInNldFByZWZpeFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcmVmaXggbXVzdCBiZSBhIEJ1ZmZlciwgd2FzOiBcIit0KTt0aGlzLnByZWZpeD10fX0se2tleTpcImdldEJpdG1hc2tcIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiBmKHIucHJvdG90eXBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIucHJvdG90eXBlKSxcImdldEJpdG1hc2tcIix0aGlzKS5jYWxsKHRoaXMpfHRoaXMuc3ViY29uZGl0aW9uLmdldEJpdG1hc2soKX19LHtrZXk6XCJ3cml0ZUhhc2hQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMuc3ViY29uZGl0aW9uKXRocm93IG5ldyBkKFwiUmVxdWlyZXMgc3ViY29uZGl0aW9uXCIpO3Qud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksdC53cml0ZSh0aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHM/dGhpcy5zdWJjb25kaXRpb24uc2VyaWFsaXplQmluYXJ5KCk6dGhpcy5zdWJjb25kaXRpb24uZ2V0Q29uZGl0aW9uQmluYXJ5KCkpfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnN1YmNvbmRpdGlvbiBpbnN0YW5jZW9mIHM/dGhpcy5zdWJjb25kaXRpb24uZ2V0TWF4RnVsZmlsbG1lbnRMZW5ndGgoKTp0aGlzLnN1YmNvbmRpdGlvbi5nZXRDb25kaXRpb24oKS5nZXRNYXhGdWxmaWxsbWVudExlbmd0aCgpLGU9bmV3IGM7cmV0dXJuIGUud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksZS5za2lwKHQpLGUuZ2V0U2l6ZSgpfX0se2tleTpcInBhcnNlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2V0UHJlZml4KHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0U3ViZnVsZmlsbG1lbnQodS5mcm9tQmluYXJ5KHQpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9uIG11c3QgYmUgZnVsZmlsbGVkXCIpO3Qud3JpdGVWYXJPY3RldFN0cmluZyh0aGlzLnByZWZpeCksdC53cml0ZSh0aGlzLnN1YmNvbmRpdGlvbi5zZXJpYWxpemVCaW5hcnkoKSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighKHRoaXMuc3ViY29uZGl0aW9uIGluc3RhbmNlb2YgdSkpdGhyb3cgbmV3IEVycm9yKFwiU3ViY29uZGl0aW9uIGlzIG5vdCBhIGZ1bGZpbGxtZW50XCIpO2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBFcnJvcihcIk1lc3NhZ2UgbXVzdCBiZSBwcm92aWRlZCBhcyBhIEJ1ZmZlciwgd2FzOiBcIit0KTtyZXR1cm4gdGhpcy5zdWJjb25kaXRpb24udmFsaWRhdGUoZS5jb25jYXQoW3RoaXMucHJlZml4LHRdKSl9fV0pLHJ9KGgpO2wuVFlQRV9JRD0xLGwuRkVBVFVSRV9CSVRNQVNLPTUsbC5wcm90b3R5cGUuc2V0U3ViY29uZGl0aW9uVXJpPWwucHJvdG90eXBlLnNldFN1YmNvbmRpdGlvbixsLnByb3RvdHlwZS5zZXRTdWJmdWxmaWxsbWVudFVyaT1sLnByb3RvdHlwZS5zZXRTdWJmdWxmaWxsbWVudCx0LmV4cG9ydHM9bH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cig3Nikscz1yKDUzKSx1PWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtyZXR1cm4gbih0aGlzLHIpLGkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcIndyaXRlSGFzaFBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5wcmVpbWFnZSl0aHJvdyBuZXcgcyhcIkNvdWxkIG5vdCBjYWxjdWxhdGUgaGFzaCwgbm8gcHJlaW1hZ2UgcHJvdmlkZWRcIik7dC53cml0ZSh0aGlzLnByZWltYWdlKX19LHtrZXk6XCJzZXRQcmVpbWFnZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJQcmVpbWFnZSBtdXN0IGJlIGEgYnVmZmVyLCB3YXM6IFwiK3QpO3RoaXMucHJlaW1hZ2U9dH19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2V0UHJlaW1hZ2UodC5yZWFkKGUpKX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighdGhpcy5wcmVpbWFnZSl0aHJvdyBuZXcgcyhcIlByZWltYWdlIG11c3QgYmUgc3BlY2lmaWVkXCIpO3Qud3JpdGUodGhpcy5wcmVpbWFnZSl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4hMH19XSkscn0oZik7dS5UWVBFX0lEPTAsdS5GRUFUVVJFX0JJVE1BU0s9Myx0LmV4cG9ydHM9dX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9cigyNjApLHM9cigxNjEpLHU9cig3NiksaD1yKDkwKSxjPXIoNTMpLGQ9cigxNjApLGw9bmV3IGYscD1mdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7bih0aGlzLHIpO3ZhciB0PWkodGhpcywoci5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyKSkuY2FsbCh0aGlzKSk7cmV0dXJuIHQubW9kdWx1cz1udWxsLHQuc2lnbmF0dXJlPW51bGwsdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcIndyaXRlQ29tbW9uSGVhZGVyXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIXRoaXMubW9kdWx1cyl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgcHVibGljIG1vZHVsdXNcIik7dC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMubW9kdWx1cyl9fSx7a2V5Olwic2V0UHVibGljTW9kdWx1c1wiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCFlLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJNb2R1bHVzIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7aWYoMD09PXRbMF0pdGhyb3cgbmV3IEVycm9yKFwiTW9kdWx1cyBtYXkgbm90IGNvbnRhaW4gbGVhZGluZyB6ZXJvc1wiKTtpZih0Lmxlbmd0aD41MTJ8fHQubGVuZ3RoPDEyOCl0aHJvdyBuZXcgRXJyb3IoXCJNb2R1bHVzIG11c3QgYmUgYmV0d2VlbiAxMjggYnl0ZXMgKDEwMTcgYml0cykgYW5kIDUxMiBieXRlcyAoNDA5NiBiaXRzKSwgd2FzOiBcIit0Lmxlbmd0aCtcIiBieXRlc1wiKTt0aGlzLm1vZHVsdXM9dH19LHtrZXk6XCJzZXRTaWduYXR1cmVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU2lnbmF0dXJlIG11c3QgYmUgYSBidWZmZXIsIHdhczogXCIrdCk7dGhpcy5zaWduYXR1cmU9dH19LHtrZXk6XCJzaWduXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLm1vZHVsdXN8fHRoaXMuc2V0UHVibGljTW9kdWx1cyhzLm1vZHVsdXNGcm9tUHJpdmF0ZUtleShlKSksdGhpcy5zaWduYXR1cmU9bC5zaWduKGUsdCl9fSx7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMud3JpdGVDb21tb25IZWFkZXIodCl9fSx7a2V5OlwicGFyc2VQYXlsb2FkXCIsdmFsdWU6ZnVuY3Rpb24odCl7dGhpcy5zZXRQdWJsaWNNb2R1bHVzKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpLHRoaXMuc2V0U2lnbmF0dXJlKHQucmVhZFZhck9jdGV0U3RyaW5nKCkpfX0se2tleTpcIndyaXRlUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnNpZ25hdHVyZSl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgc2lnbmF0dXJlXCIpO3RoaXMud3JpdGVDb21tb25IZWFkZXIodCksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMuc2lnbmF0dXJlKX19LHtrZXk6XCJjYWxjdWxhdGVNYXhGdWxmaWxsbWVudExlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGg7aWYoIXRoaXMubW9kdWx1cyl0aHJvdyBuZXcgYyhcIlJlcXVpcmVzIGEgcHVibGljIG1vZHVsdXNcIik7cmV0dXJuIHRoaXMud3JpdGVDb21tb25IZWFkZXIodCksdC53cml0ZVZhck9jdGV0U3RyaW5nKHRoaXMubW9kdWx1cyksdC5nZXRTaXplKCl9fSx7a2V5OlwidmFsaWRhdGVcIix2YWx1ZTpmdW5jdGlvbih0KXtpZighZS5pc0J1ZmZlcih0KSl0aHJvdyBuZXcgRXJyb3IoXCJNZXNzYWdlIG11c3QgYmUgcHJvdmlkZWQgYXMgYSBCdWZmZXIsIHdhczogXCIrdCk7dmFyIHI9bC52ZXJpZnkodGhpcy5tb2R1bHVzLHQsdGhpcy5zaWduYXR1cmUpO2lmKCFyKXRocm93IG5ldyBkKFwiSW52YWxpZCBSU0Egc2lnbmF0dXJlXCIpO3JldHVybiEwfX1dKSxyfSh1KTtwLlRZUEVfSUQ9MyxwLkZFQVRVUkVfQklUTUFTSz0xNyx0LmV4cG9ydHM9cH0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlKXtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCxcInZhbHVlXCJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHImJnQoZS5wcm90b3R5cGUsciksbiYmdChlLG4pLGV9fSgpLGY9ZnVuY3Rpb24gdChlLHIsbil7bnVsbD09PWUmJihlPUZ1bmN0aW9uLnByb3RvdHlwZSk7dmFyIGk9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLHIpO2lmKHZvaWQgMD09PWkpe3ZhciBvPU9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtyZXR1cm4gbnVsbD09PW8/dm9pZCAwOnQobyxyLG4pfWlmKFwidmFsdWVcImluIGkpcmV0dXJuIGkudmFsdWU7dmFyIGE9aS5nZXQ7aWYodm9pZCAwIT09YSlyZXR1cm4gYS5jYWxsKG4pfSxzPXIoNzUpLHU9cig2MyksaD1yKDc2KSxjPXIoOTApLGQ9cig5MSksbD1yKDUzKSxwPXIoMTEzKSxiPXIoMTYyKSx2PW5ldyBlKDApLHk9XCJjb25kaXRpb25cIixtPVwiZnVsZmlsbG1lbnRcIixnPWZ1bmN0aW9uKHQpe2Z1bmN0aW9uIHIoKXtuKHRoaXMscik7dmFyIHQ9aSh0aGlzLChyLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKHIpKS5jYWxsKHRoaXMpKTtyZXR1cm4gdC50aHJlc2hvbGQ9bnVsbCx0LnN1YmNvbmRpdGlvbnM9W10sdH1yZXR1cm4gbyhyLHQpLGEocixbe2tleTpcImFkZFN1YmNvbmRpdGlvblwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD1zLmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiBzKSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJjb25kaXRpb25zIG11c3QgYmUgVVJJcyBvciBvYmplY3RzIG9mIHR5cGUgQ29uZGl0aW9uXCIpO2lmKFwidW5kZWZpbmVkXCI9PXR5cGVvZiBlKWU9MTtlbHNlIGlmKCFiKGUpfHxlPDEpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkludmFsaWQgd2VpZ2h0LCBub3QgYW4gaW50ZWdlcjogXCIrZSk7dGhpcy5zdWJjb25kaXRpb25zLnB1c2goe3R5cGU6eSxib2R5OnQsd2VpZ2h0OmV9KX19LHtrZXk6XCJhZGRTdWJmdWxmaWxsbWVudFwiLHZhbHVlOmZ1bmN0aW9uKHQsZSl7aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpdD11LmZyb21VcmkodCk7ZWxzZSBpZighKHQgaW5zdGFuY2VvZiB1KSl0aHJvdyBuZXcgRXJyb3IoXCJTdWJmdWxmaWxsbWVudHMgbXVzdCBiZSBVUklzIG9yIG9iamVjdHMgb2YgdHlwZSBGdWxmaWxsbWVudFwiKTtpZihcInVuZGVmaW5lZFwiPT10eXBlb2YgZSllPTE7ZWxzZSBpZighYihlKSl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHdlaWdodCwgbm90IGFuIGludGVnZXI6IFwiK2UpO3RoaXMuc3ViY29uZGl0aW9ucy5wdXNoKHt0eXBlOm0sYm9keTp0LHdlaWdodDplfSl9fSx7a2V5Olwic2V0VGhyZXNob2xkXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWIodCl8fHQ8MSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiVGhyZXNob2xkIG11c3QgYmUgYSBpbnRlZ2VyIGdyZWF0ZXIgdGhhbiB6ZXJvLCB3YXM6IFwiK3QpO3RoaXMudGhyZXNob2xkPXR9fSx7a2V5OlwiZ2V0Qml0bWFza1wiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9ZihyLnByb3RvdHlwZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihyLnByb3RvdHlwZSksXCJnZXRCaXRtYXNrXCIsdGhpcykuY2FsbCh0aGlzKSxlPSEwLG49ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxhPXRoaXMuc3ViY29uZGl0aW9uc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShlPShvPWEubmV4dCgpKS5kb25lKTtlPSEwKXt2YXIgcz1vLnZhbHVlO3R8PXMuYm9keS5nZXRCaXRtYXNrKCl9fWNhdGNoKHQpe249ITAsaT10fWZpbmFsbHl7dHJ5eyFlJiZhLnJldHVybiYmYS5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgaX19cmV0dXJuIHR9fSx7a2V5Olwid3JpdGVIYXNoUGF5bG9hZFwiLHZhbHVlOmZ1bmN0aW9uKHQpe2lmKCF0aGlzLnN1YmNvbmRpdGlvbnMubGVuZ3RoKXRocm93IG5ldyBsKFwiUmVxdWlyZXMgc3ViY29uZGl0aW9uc1wiKTt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBkO3JldHVybiBlLndyaXRlVmFyVUludCh0LndlaWdodCksZS53cml0ZSh0LnR5cGU9PT1tP3QuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKTp0LmJvZHkuc2VyaWFsaXplQmluYXJ5KCkpLGUuZ2V0QnVmZmVyKCl9KSxyPXRoaXMuY29uc3RydWN0b3Iuc29ydEJ1ZmZlcnMoZSk7dC53cml0ZVVJbnQzMih0aGlzLnRocmVzaG9sZCksdC53cml0ZVZhclVJbnQoci5sZW5ndGgpLHIuZm9yRWFjaChmdW5jdGlvbihlKXtyZXR1cm4gdC53cml0ZShlKX0pfX0se2tleTpcImNhbGN1bGF0ZU1heEZ1bGZpbGxtZW50TGVuZ3RoXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLGU9MCxyPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24ocil7dmFyIG49dC5jb25zdHJ1Y3Rvci5wcmVkaWN0U3ViY29uZGl0aW9uTGVuZ3RoKHIpLGk9dC5jb25zdHJ1Y3Rvci5wcmVkaWN0U3ViZnVsZmlsbG1lbnRMZW5ndGgocik7cmV0dXJuIGUrPW4se3dlaWdodDpyLndlaWdodCxzaXplOmktbn19KS5zb3J0KGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGUud2VpZ2h0LXQud2VpZ2h0fSksbj1lK3RoaXMuY29uc3RydWN0b3IuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHRoaXMudGhyZXNob2xkLHIpO2lmKG49PT0tKDEvMCkpdGhyb3cgbmV3IGwoXCJJbnN1ZmZpY2llbnQgc3ViY29uZGl0aW9ucy93ZWlnaHRzIHRvIG1lZXQgdGhlIHRocmVzaG9sZFwiKTt2YXIgaT1uZXcgYztyZXR1cm4gaS53cml0ZVVJbnQzMih0aGlzLnRocmVzaG9sZCksaS53cml0ZVZhclVJbnQodGhpcy5zdWJjb25kaXRpb25zLmxlbmd0aCksdGhpcy5zdWJjb25kaXRpb25zLmZvckVhY2goZnVuY3Rpb24odCl7aS53cml0ZVVJbnQ4KCksMSE9PXQud2VpZ2h0JiZpLndyaXRlVUludDMyKHQud2VpZ2h0KX0pLGkuc2tpcChuKSxpLmdldFNpemUoKX19LHtrZXk6XCJwYXJzZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLnNldFRocmVzaG9sZCh0LnJlYWRWYXJVSW50KCkpO2Zvcih2YXIgZT10LnJlYWRWYXJVSW50KCkscj0wO3I8ZTtyKyspe3ZhciBuPXQucmVhZFZhclVJbnQoKSxpPXQucmVhZFZhck9jdGV0U3RyaW5nKCksbz10LnJlYWRWYXJPY3RldFN0cmluZygpO2lmKGkubGVuZ3RoJiZvLmxlbmd0aCl0aHJvdyBuZXcgcChcIlN1YmNvbmRpdGlvbnMgbWF5IG5vdCBwcm92aWRlIGJvdGggc3ViY29uZGl0aW9uIGFuZCBmdWxmaWxsbWVudC5cIik7aWYoaS5sZW5ndGgpdGhpcy5hZGRTdWJmdWxmaWxsbWVudCh1LmZyb21CaW5hcnkoaSksbik7ZWxzZXtpZighby5sZW5ndGgpdGhyb3cgbmV3IHAoXCJTdWJjb25kaXRpb25zIG11c3QgcHJvdmlkZSBlaXRoZXIgc3ViY29uZGl0aW9uIG9yIGZ1bGZpbGxtZW50LlwiKTt0aGlzLmFkZFN1YmNvbmRpdGlvbihzLmZyb21CaW5hcnkobyksbil9fX19LHtrZXk6XCJ3cml0ZVBheWxvYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgZT10aGlzLnN1YmNvbmRpdGlvbnMubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQudHlwZT09PW0/T2JqZWN0LmFzc2lnbih7fSx0LHtpbmRleDplLHNpemU6dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpLmxlbmd0aCxvbWl0U2l6ZTp0LmJvZHkuZ2V0Q29uZGl0aW9uQmluYXJ5KCkubGVuZ3RofSk6bnVsbH0pLmZpbHRlcihCb29sZWFuKSxyPXRoaXMuY29uc3RydWN0b3IuY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0KHRoaXMudGhyZXNob2xkLGUpLnNldCxuPXRoaXMuc3ViY29uZGl0aW9ucy5tYXAoZnVuY3Rpb24odCxlKXtyZXR1cm4gdC50eXBlPT09bSYmci5pbmRleE9mKGUpPT09LTE/T2JqZWN0LmFzc2lnbih7fSx0LHt0eXBlOnksYm9keTp0LmJvZHkuZ2V0Q29uZGl0aW9uKCl9KTp0fSksaT1uLm1hcChmdW5jdGlvbih0KXt2YXIgZT1uZXcgZDtyZXR1cm4gZS53cml0ZVZhclVJbnQodC53ZWlnaHQpLGUud3JpdGVWYXJPY3RldFN0cmluZyh0LnR5cGU9PT1tP3QuYm9keS5zZXJpYWxpemVCaW5hcnkoKTp2KSxlLndyaXRlVmFyT2N0ZXRTdHJpbmcodC50eXBlPT09eT90LmJvZHkuc2VyaWFsaXplQmluYXJ5KCk6diksZS5nZXRCdWZmZXIoKX0pLG89dGhpcy5jb25zdHJ1Y3Rvci5zb3J0QnVmZmVycyhpKTt0LndyaXRlVmFyVUludCh0aGlzLnRocmVzaG9sZCksdC53cml0ZVZhclVJbnQoby5sZW5ndGgpLG8uZm9yRWFjaCh0LndyaXRlLmJpbmQodCkpfX0se2tleTpcInZhbGlkYXRlXCIsdmFsdWU6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5zdWJjb25kaXRpb25zLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdC50eXBlPT09bX0pLHI9MS8wLG49ZS5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gcj1NYXRoLm1pbihyLGUud2VpZ2h0KSx0K2Uud2VpZ2h0fSwwKTtpZihuPHRoaXMudGhyZXNob2xkKXRocm93IG5ldyBFcnJvcihcIlRocmVzaG9sZCBub3QgbWV0XCIpO2lmKHRoaXMudGhyZXNob2xkK3I8PW4pdGhyb3cgbmV3IEVycm9yKFwiRnVsZmlsbG1lbnQgaXMgbm90IG1pbmltYWxcIik7cmV0dXJuIGUuZXZlcnkoZnVuY3Rpb24oZSl7cmV0dXJuIGUuYm9keS52YWxpZGF0ZSh0KX0pfX1dLFt7a2V5OlwicHJlZGljdFN1YmNvbmRpdGlvbkxlbmd0aFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0LnR5cGU9PT1tP3QuYm9keS5nZXRDb25kaXRpb25CaW5hcnkoKS5sZW5ndGg6dC5ib2R5LnNlcmlhbGl6ZUJpbmFyeSgpLmxlbmd0aH19LHtrZXk6XCJwcmVkaWN0U3ViZnVsZmlsbG1lbnRMZW5ndGhcIixcbnZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXQudHlwZT09PW0/dC5ib2R5LmdldENvbmRpdGlvbigpLmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCk6dC5ib2R5LmdldE1heEZ1bGZpbGxtZW50TGVuZ3RoKCkscj1uZXcgYztyZXR1cm4gci53cml0ZVVJbnQxNigpLHIud3JpdGVWYXJPY3RldFN0cmluZyh7bGVuZ3RoOmV9KSxyLmdldFNpemUoKX19LHtrZXk6XCJjYWxjdWxhdGVXb3JzdENhc2VMZW5ndGhcIix2YWx1ZTpmdW5jdGlvbih0LGUscil7aWYocj1yfHwwLHQ8PTApcmV0dXJuIDA7aWYocjxlLmxlbmd0aCl7dmFyIG49ZVtyXTtyZXR1cm4gTWF0aC5tYXgobi5zaXplK3RoaXMuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHQtbi53ZWlnaHQsZSxyKzEpLHRoaXMuY2FsY3VsYXRlV29yc3RDYXNlTGVuZ3RoKHQsZSxyKzEpKX1yZXR1cm4tKDEvMCl9fSx7a2V5OlwiY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0XCIsdmFsdWU6ZnVuY3Rpb24odCxlLHIpe2lmKHI9cnx8e2luZGV4OjAsc2l6ZTowLHNldDpbXX0sdDw9MClyZXR1cm57c2l6ZTpyLnNpemUsc2V0OnIuc2V0fTtpZihyLmluZGV4PGUubGVuZ3RoKXt2YXIgbj1lW3IuaW5kZXhdLGk9dGhpcy5jYWxjdWxhdGVTbWFsbGVzdFZhbGlkRnVsZmlsbG1lbnRTZXQodC1uLndlaWdodCxlLHtzaXplOnIuc2l6ZStuLnNpemUsaW5kZXg6ci5pbmRleCsxLHNldDpyLnNldC5jb25jYXQobi5pbmRleCl9KSxvPXRoaXMuY2FsY3VsYXRlU21hbGxlc3RWYWxpZEZ1bGZpbGxtZW50U2V0KHQsZSx7c2l6ZTpyLnNpemUrbi5vbWl0U2l6ZSxpbmRleDpyLmluZGV4KzEsc2V0OnIuc2V0fSk7cmV0dXJuIGkuc2l6ZTxvLnNpemU/aTpvfXJldHVybntzaXplOjEvMH19fSx7a2V5Olwic29ydEJ1ZmZlcnNcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdC5zbGljZSgpLnNvcnQoZnVuY3Rpb24odCxyKXtyZXR1cm4gdC5sZW5ndGghPT1yLmxlbmd0aD90Lmxlbmd0aC1yLmxlbmd0aDplLmNvbXBhcmUodCxyKX0pfX1dKSxyfShoKTtnLlRZUEVfSUQ9MixnLkZFQVRVUkVfQklUTUFTSz05LGcucHJvdG90eXBlLmFkZFN1YmNvbmRpdGlvblVyaT1nLnByb3RvdHlwZS5hZGRTdWJjb25kaXRpb24sZy5wcm90b3R5cGUuYWRkU3ViZnVsZmlsbG1lbnRVcmk9Zy5wcm90b3R5cGUuYWRkU3ViZnVsZmlsbG1lbnQsdC5leHBvcnRzPWd9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxyKXtpZighZS5pc0J1ZmZlcih0KXx8IWUuaXNCdWZmZXIocikpdGhyb3cgbmV3IEVycm9yKFwiQXJndW1lbnRzIG11c3QgYmUgYnVmZmVyc1wiKTtpZih0Lmxlbmd0aCE9PXIubGVuZ3RoKXRocm93IG5ldyBFcnJvcihcIkJ1ZmZlcnMgbXVzdCBiZSB0aGUgc2FtZSBsZW5ndGhcIik7Zm9yKHZhciBuPW5ldyBlKHQubGVuZ3RoKSxpPTA7aTx0Lmxlbmd0aDtpKyspbltpXT10W2ldXnJbaV07cmV0dXJuIG59dC5leHBvcnRzPXJ9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUscil7IWZ1bmN0aW9uKGUpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlLHIsbil7dmFyIGk9T2JqZWN0LmNyZWF0ZSgoZXx8bykucHJvdG90eXBlKSxhPW5ldyBwKG58fFtdKTtyZXR1cm4gaS5faW52b2tlPWModCxyLGEpLGl9ZnVuY3Rpb24gaSh0LGUscil7dHJ5e3JldHVybnt0eXBlOlwibm9ybWFsXCIsYXJnOnQuY2FsbChlLHIpfX1jYXRjaCh0KXtyZXR1cm57dHlwZTpcInRocm93XCIsYXJnOnR9fX1mdW5jdGlvbiBvKCl7fWZ1bmN0aW9uIGEoKXt9ZnVuY3Rpb24gZigpe31mdW5jdGlvbiBzKHQpe1tcIm5leHRcIixcInRocm93XCIsXCJyZXR1cm5cIl0uZm9yRWFjaChmdW5jdGlvbihlKXt0W2VdPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9pbnZva2UoZSx0KX19KX1mdW5jdGlvbiB1KHQpe3RoaXMuYXJnPXR9ZnVuY3Rpb24gaCh0KXtmdW5jdGlvbiBlKHIsbixvLGEpe3ZhciBmPWkodFtyXSx0LG4pO2lmKFwidGhyb3dcIiE9PWYudHlwZSl7dmFyIHM9Zi5hcmcsaD1zLnZhbHVlO3JldHVybiBoIGluc3RhbmNlb2YgdT9Qcm9taXNlLnJlc29sdmUoaC5hcmcpLnRoZW4oZnVuY3Rpb24odCl7ZShcIm5leHRcIix0LG8sYSl9LGZ1bmN0aW9uKHQpe2UoXCJ0aHJvd1wiLHQsbyxhKX0pOlByb21pc2UucmVzb2x2ZShoKS50aGVuKGZ1bmN0aW9uKHQpe3MudmFsdWU9dCxvKHMpfSxhKX1hKGYuYXJnKX1mdW5jdGlvbiBuKHQscil7ZnVuY3Rpb24gbigpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihuLGkpe2UodCxyLG4saSl9KX1yZXR1cm4gbz1vP28udGhlbihuLG4pOm4oKX1cIm9iamVjdFwiPT10eXBlb2YgciYmci5kb21haW4mJihlPXIuZG9tYWluLmJpbmQoZSkpO3ZhciBvO3RoaXMuX2ludm9rZT1ufWZ1bmN0aW9uIGModCxlLHIpe3ZhciBuPUU7cmV0dXJuIGZ1bmN0aW9uKG8sYSl7aWYobj09PWspdGhyb3cgbmV3IEVycm9yKFwiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZ1wiKTtpZihuPT09eCl7aWYoXCJ0aHJvd1wiPT09byl0aHJvdyBhO3JldHVybiB2KCl9Zm9yKDs7KXt2YXIgZj1yLmRlbGVnYXRlO2lmKGYpe2lmKFwicmV0dXJuXCI9PT1vfHxcInRocm93XCI9PT1vJiZmLml0ZXJhdG9yW29dPT09eSl7ci5kZWxlZ2F0ZT1udWxsO3ZhciBzPWYuaXRlcmF0b3IucmV0dXJuO2lmKHMpe3ZhciB1PWkocyxmLml0ZXJhdG9yLGEpO2lmKFwidGhyb3dcIj09PXUudHlwZSl7bz1cInRocm93XCIsYT11LmFyZztjb250aW51ZX19aWYoXCJyZXR1cm5cIj09PW8pY29udGludWV9dmFyIHU9aShmLml0ZXJhdG9yW29dLGYuaXRlcmF0b3IsYSk7aWYoXCJ0aHJvd1wiPT09dS50eXBlKXtyLmRlbGVnYXRlPW51bGwsbz1cInRocm93XCIsYT11LmFyZztjb250aW51ZX1vPVwibmV4dFwiLGE9eTt2YXIgaD11LmFyZztpZighaC5kb25lKXJldHVybiBuPUEsaDtyW2YucmVzdWx0TmFtZV09aC52YWx1ZSxyLm5leHQ9Zi5uZXh0TG9jLHIuZGVsZWdhdGU9bnVsbH1pZihcIm5leHRcIj09PW8pci5zZW50PXIuX3NlbnQ9YTtlbHNlIGlmKFwidGhyb3dcIj09PW8pe2lmKG49PT1FKXRocm93IG49eCxhO3IuZGlzcGF0Y2hFeGNlcHRpb24oYSkmJihvPVwibmV4dFwiLGE9eSl9ZWxzZVwicmV0dXJuXCI9PT1vJiZyLmFicnVwdChcInJldHVyblwiLGEpO249azt2YXIgdT1pKHQsZSxyKTtpZihcIm5vcm1hbFwiPT09dS50eXBlKXtuPXIuZG9uZT94OkE7dmFyIGg9e3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfTtpZih1LmFyZyE9PUkpcmV0dXJuIGg7ci5kZWxlZ2F0ZSYmXCJuZXh0XCI9PT1vJiYoYT15KX1lbHNlXCJ0aHJvd1wiPT09dS50eXBlJiYobj14LG89XCJ0aHJvd1wiLGE9dS5hcmcpfX19ZnVuY3Rpb24gZCh0KXt2YXIgZT17dHJ5TG9jOnRbMF19OzEgaW4gdCYmKGUuY2F0Y2hMb2M9dFsxXSksMiBpbiB0JiYoZS5maW5hbGx5TG9jPXRbMl0sZS5hZnRlckxvYz10WzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaChlKX1mdW5jdGlvbiBsKHQpe3ZhciBlPXQuY29tcGxldGlvbnx8e307ZS50eXBlPVwibm9ybWFsXCIsZGVsZXRlIGUuYXJnLHQuY29tcGxldGlvbj1lfWZ1bmN0aW9uIHAodCl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOlwicm9vdFwifV0sdC5mb3JFYWNoKGQsdGhpcyksdGhpcy5yZXNldCghMCl9ZnVuY3Rpb24gYih0KXtpZih0KXt2YXIgZT10W3ddO2lmKGUpcmV0dXJuIGUuY2FsbCh0KTtpZihcImZ1bmN0aW9uXCI9PXR5cGVvZiB0Lm5leHQpcmV0dXJuIHQ7aWYoIWlzTmFOKHQubGVuZ3RoKSl7dmFyIHI9LTEsbj1mdW5jdGlvbiBlKCl7Zm9yKDsrK3I8dC5sZW5ndGg7KWlmKG0uY2FsbCh0LHIpKXJldHVybiBlLnZhbHVlPXRbcl0sZS5kb25lPSExLGU7cmV0dXJuIGUudmFsdWU9eSxlLmRvbmU9ITAsZX07cmV0dXJuIG4ubmV4dD1ufX1yZXR1cm57bmV4dDp2fX1mdW5jdGlvbiB2KCl7cmV0dXJue3ZhbHVlOnksZG9uZTohMH19dmFyIHksbT1PYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LGc9XCJmdW5jdGlvblwiPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSx3PWcuaXRlcmF0b3J8fFwiQEBpdGVyYXRvclwiLF89Zy50b1N0cmluZ1RhZ3x8XCJAQHRvU3RyaW5nVGFnXCIsTT1cIm9iamVjdFwiPT10eXBlb2YgdCxTPWUucmVnZW5lcmF0b3JSdW50aW1lO2lmKFMpcmV0dXJuIHZvaWQoTSYmKHQuZXhwb3J0cz1TKSk7Uz1lLnJlZ2VuZXJhdG9yUnVudGltZT1NP3QuZXhwb3J0czp7fSxTLndyYXA9bjt2YXIgRT1cInN1c3BlbmRlZFN0YXJ0XCIsQT1cInN1c3BlbmRlZFlpZWxkXCIsaz1cImV4ZWN1dGluZ1wiLHg9XCJjb21wbGV0ZWRcIixJPXt9LEI9Zi5wcm90b3R5cGU9by5wcm90b3R5cGU7YS5wcm90b3R5cGU9Qi5jb25zdHJ1Y3Rvcj1mLGYuY29uc3RydWN0b3I9YSxmW19dPWEuZGlzcGxheU5hbWU9XCJHZW5lcmF0b3JGdW5jdGlvblwiLFMuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbih0KXt2YXIgZT1cImZ1bmN0aW9uXCI9PXR5cGVvZiB0JiZ0LmNvbnN0cnVjdG9yO3JldHVybiEhZSYmKGU9PT1hfHxcIkdlbmVyYXRvckZ1bmN0aW9uXCI9PT0oZS5kaXNwbGF5TmFtZXx8ZS5uYW1lKSl9LFMubWFyaz1mdW5jdGlvbih0KXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZih0LGYpOih0Ll9fcHJvdG9fXz1mLF8gaW4gdHx8KHRbX109XCJHZW5lcmF0b3JGdW5jdGlvblwiKSksdC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShCKSx0fSxTLmF3cmFwPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgdSh0KX0scyhoLnByb3RvdHlwZSksUy5hc3luYz1mdW5jdGlvbih0LGUscixpKXt2YXIgbz1uZXcgaChuKHQsZSxyLGkpKTtyZXR1cm4gUy5pc0dlbmVyYXRvckZ1bmN0aW9uKGUpP286by5uZXh0KCkudGhlbihmdW5jdGlvbih0KXtyZXR1cm4gdC5kb25lP3QudmFsdWU6by5uZXh0KCl9KX0scyhCKSxCW3ddPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LEJbX109XCJHZW5lcmF0b3JcIixCLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IEdlbmVyYXRvcl1cIn0sUy5rZXlzPWZ1bmN0aW9uKHQpe3ZhciBlPVtdO2Zvcih2YXIgciBpbiB0KWUucHVzaChyKTtyZXR1cm4gZS5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7ZS5sZW5ndGg7KXt2YXIgbj1lLnBvcCgpO2lmKG4gaW4gdClyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LFMudmFsdWVzPWIscC5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOnAscmVzZXQ6ZnVuY3Rpb24odCl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9eSx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMudHJ5RW50cmllcy5mb3JFYWNoKGwpLCF0KWZvcih2YXIgZSBpbiB0aGlzKVwidFwiPT09ZS5jaGFyQXQoMCkmJm0uY2FsbCh0aGlzLGUpJiYhaXNOYU4oK2Uuc2xpY2UoMSkpJiYodGhpc1tlXT15KX0sc3RvcDpmdW5jdGlvbigpe3RoaXMuZG9uZT0hMDt2YXIgdD10aGlzLnRyeUVudHJpZXNbMF0sZT10LmNvbXBsZXRpb247aWYoXCJ0aHJvd1wiPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiB0aGlzLnJ2YWx9LGRpc3BhdGNoRXhjZXB0aW9uOmZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoZSxuKXtyZXR1cm4gby50eXBlPVwidGhyb3dcIixvLmFyZz10LHIubmV4dD1lLCEhbn1pZih0aGlzLmRvbmUpdGhyb3cgdDtmb3IodmFyIHI9dGhpcyxuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGk9dGhpcy50cnlFbnRyaWVzW25dLG89aS5jb21wbGV0aW9uO2lmKFwicm9vdFwiPT09aS50cnlMb2MpcmV0dXJuIGUoXCJlbmRcIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIGE9bS5jYWxsKGksXCJjYXRjaExvY1wiKSxmPW0uY2FsbChpLFwiZmluYWxseUxvY1wiKTtpZihhJiZmKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gZShpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiBlKGkuZmluYWxseUxvYyl9ZWxzZSBpZihhKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gZShpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFmKXRocm93IG5ldyBFcnJvcihcInRyeSBzdGF0ZW1lbnQgd2l0aG91dCBjYXRjaCBvciBmaW5hbGx5XCIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIGUoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJm0uY2FsbChuLFwiZmluYWxseUxvY1wiKSYmdGhpcy5wcmV2PG4uZmluYWxseUxvYyl7dmFyIGk9bjticmVha319aSYmKFwiYnJlYWtcIj09PXR8fFwiY29udGludWVcIj09PXQpJiZpLnRyeUxvYzw9ZSYmZTw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPXQsby5hcmc9ZSxpP3RoaXMubmV4dD1pLmZpbmFsbHlMb2M6dGhpcy5jb21wbGV0ZShvKSxJfSxjb21wbGV0ZTpmdW5jdGlvbih0LGUpe2lmKFwidGhyb3dcIj09PXQudHlwZSl0aHJvdyB0LmFyZztcImJyZWFrXCI9PT10LnR5cGV8fFwiY29udGludWVcIj09PXQudHlwZT90aGlzLm5leHQ9dC5hcmc6XCJyZXR1cm5cIj09PXQudHlwZT8odGhpcy5ydmFsPXQuYXJnLHRoaXMubmV4dD1cImVuZFwiKTpcIm5vcm1hbFwiPT09dC50eXBlJiZlJiYodGhpcy5uZXh0PWUpfSxmaW5pc2g6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtlPj0wOy0tZSl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW2VdO2lmKHIuZmluYWxseUxvYz09PXQpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLGwociksSX19LGNhdGNoOmZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7ZT49MDstLWUpe3ZhciByPXRoaXMudHJ5RW50cmllc1tlXTtpZihyLnRyeUxvYz09PXQpe3ZhciBuPXIuY29tcGxldGlvbjtpZihcInRocm93XCI9PT1uLnR5cGUpe3ZhciBpPW4uYXJnO2wocil9cmV0dXJuIGl9fXRocm93IG5ldyBFcnJvcihcImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdFwiKX0sZGVsZWdhdGVZaWVsZDpmdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuZGVsZWdhdGU9e2l0ZXJhdG9yOmIodCkscmVzdWx0TmFtZTplLG5leHRMb2M6cn0sSX19fShcIm9iamVjdFwiPT10eXBlb2YgZT9lOlwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3c/d2luZG93Olwib2JqZWN0XCI9PXR5cGVvZiBzZWxmP3NlbGY6dGhpcyl9KS5jYWxsKGUscigzOSkscigyNikpfSxmdW5jdGlvbih0LGUscil7cigyOTApLHQuZXhwb3J0cz1yKDMyKS5SZWdFeHAuZXNjYXBlfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDc3KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzApO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpLGk9cigxNjUpLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxNjUpLGk9cigxNjMpLG89cigyNzIpLGE9cigyNzUpLGY9XCJwcm90b3R5cGVcIixzPWZ1bmN0aW9uKHQsZSxyKXt2YXIgdSxoLGMsZD10JnMuRixsPXQmcy5HLHA9dCZzLlMsYj10JnMuUCx2PXQmcy5CLHk9dCZzLlcsbT1sP2k6aVtlXXx8KGlbZV09e30pLGc9bVtmXSx3PWw/bjpwP25bZV06KG5bZV18fHt9KVtmXTtsJiYocj1lKTtmb3IodSBpbiByKWg9IWQmJncmJnZvaWQgMCE9PXdbdV0saCYmdSBpbiBtfHwoYz1oP3dbdV06clt1XSxtW3VdPWwmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIHdbdV0/clt1XTp2JiZoP28oYyxuKTp5JiZ3W3VdPT1jP2Z1bmN0aW9uKHQpe3ZhciBlPWZ1bmN0aW9uKGUscixuKXtpZih0aGlzIGluc3RhbmNlb2YgdCl7c3dpdGNoKGFyZ3VtZW50cy5sZW5ndGgpe2Nhc2UgMDpyZXR1cm4gbmV3IHQ7Y2FzZSAxOnJldHVybiBuZXcgdChlKTtjYXNlIDI6cmV0dXJuIG5ldyB0KGUscil9cmV0dXJuIG5ldyB0KGUscixuKX1yZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O3JldHVybiBlW2ZdPXRbZl0sZX0oYyk6YiYmXCJmdW5jdGlvblwiPT10eXBlb2YgYz9vKEZ1bmN0aW9uLmNhbGwsYyk6YyxiJiYoKG0udmlydHVhbHx8KG0udmlydHVhbD17fSkpW3VdPWMsdCZzLlImJmcmJiFnW3VdJiZhKGcsdSxjKSkpfTtzLkY9MSxzLkc9MixzLlM9NCxzLlA9OCxzLkI9MTYscy5XPTMyLHMuVT02NCxzLlI9MTI4LHQuZXhwb3J0cz1zfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyNzgpLGk9cigyNzkpO3QuZXhwb3J0cz1yKDExNyk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmYodCxlLGkoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDExNykmJiFyKDE2NCkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoMjczKShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3NyksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjcxKSxpPXIoMjc2KSxvPXIoMjgwKSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cigxMTcpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7aWYobih0KSxlPW8oZSwhMCksbihyKSxpKXRyeXtyZXR1cm4gYSh0LGUscil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbZV09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNzcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjc0KTtuKG4uUyxcIk51bWJlclwiLHtpc0ludGVnZXI6cigyNzcpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpLGk9cigxMjYpLG89cig3KShcInNwZWNpZXNcIik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiBpKHQpJiYoZT10LmNvbnN0cnVjdG9yLFwiZnVuY3Rpb25cIiE9dHlwZW9mIGV8fGUhPT1BcnJheSYmIWkoZS5wcm90b3R5cGUpfHwoZT12b2lkIDApLG4oZSkmJihlPWVbb10sbnVsbD09PWUmJihlPXZvaWQgMCkpKSx2b2lkIDA9PT1lP0FycmF5OmV9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigyODIpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcobih0KSkoZSl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigzKSxpPXIoMjkpLG89XCJudW1iZXJcIjt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoXCJzdHJpbmdcIiE9PXQmJnQhPT1vJiZcImRlZmF1bHRcIiE9PXQpdGhyb3cgVHlwZUVycm9yKFwiSW5jb3JyZWN0IGhpbnRcIik7cmV0dXJuIGkobih0aGlzKSx0IT1vKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ0KSxpPXIoODYpLG89cig2Nik7dC5leHBvcnRzPWZ1bmN0aW9uKHQpe3ZhciBlPW4odCkscj1pLmY7aWYocilmb3IodmFyIGEsZj1yKHQpLHM9by5mLHU9MDtmLmxlbmd0aD51OylzLmNhbGwodCxhPWZbdSsrXSkmJmUucHVzaChhKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDQ0KSxpPXIoMTcpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcixvPWkodCksYT1uKG8pLGY9YS5sZW5ndGgscz0wO2Y+czspaWYob1tyPWFbcysrXV09PT1lKXJldHVybiByfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMjg4KSxpPXIoODIpLG89cigxMyk7dC5leHBvcnRzPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PW8odGhpcyksZT1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkoZSksYT0wLGY9bi5fLHM9ITE7ZT5hOykoclthXT1hcmd1bWVudHNbYSsrXSk9PT1mJiYocz0hMCk7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIG4sbz10aGlzLGE9YXJndW1lbnRzLmxlbmd0aCx1PTAsaD0wO2lmKCFzJiYhYSlyZXR1cm4gaSh0LHIsbyk7aWYobj1yLnNsaWNlKCkscylmb3IoO2U+dTt1Kyspblt1XT09PWYmJihuW3VdPWFyZ3VtZW50c1toKytdKTtmb3IoO2E+aDspbi5wdXNoKGFyZ3VtZW50c1toKytdKTtyZXR1cm4gaSh0LG4sbyl9fX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDQpfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe3ZhciByPWU9PT1PYmplY3QoZSk/ZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19OmU7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcoZSkucmVwbGFjZSh0LHIpfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigyODkpKC9bXFxcXF4kKis/LigpfFtcXF17fV0vZyxcIlxcXFwkJlwiKTtuKG4uUyxcIlJlZ0V4cFwiLHtlc2NhcGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiQXJyYXlcIix7Y29weVdpdGhpbjpyKDE2Nyl9KSxyKDU0KShcImNvcHlXaXRoaW5cIil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNCk7bihuLlArbi5GKiFyKDI1KShbXS5ldmVyeSwhMCksXCJBcnJheVwiLHtldmVyeTpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJBcnJheVwiLHtmaWxsOnIoMTE4KX0pLHIoNTQpKFwiZmlsbFwiKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgyKTtuKG4uUCtuLkYqIXIoMjUpKFtdLmZpbHRlciwhMCksXCJBcnJheVwiLHtmaWx0ZXI6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoNiksbz1cImZpbmRJbmRleFwiLGE9ITA7byBpbltdJiZBcnJheSgxKVtvXShmdW5jdGlvbigpe2E9ITF9KSxuKG4uUCtuLkYqYSxcIkFycmF5XCIse2ZpbmRJbmRleDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKG8pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDUpLG89XCJmaW5kXCIsYT0hMDtvIGluW10mJkFycmF5KDEpW29dKGZ1bmN0aW9uKCl7YT0hMX0pLG4obi5QK24uRiphLFwiQXJyYXlcIix7ZmluZDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKG8pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjcpKDApLG89cigyNSkoW10uZm9yRWFjaCwhMCk7bihuLlArbi5GKiFvLFwiQXJyYXlcIix7Zm9yRWFjaDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzWzFdKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMzMpLGk9cigwKSxvPXIoMTEpLGE9cigxNzYpLGY9cigxMjUpLHM9cigxMCksdT1yKDExOSksaD1yKDE0Mik7aShpLlMraS5GKiFyKDg0KShmdW5jdGlvbih0KXtBcnJheS5mcm9tKHQpfSksXCJBcnJheVwiLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlLHIsaSxjLGQ9byh0KSxsPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpBcnJheSxwPWFyZ3VtZW50cy5sZW5ndGgsYj1wPjE/YXJndW1lbnRzWzFdOnZvaWQgMCx2PXZvaWQgMCE9PWIseT0wLG09aChkKTtpZih2JiYoYj1uKGIscD4yP2FyZ3VtZW50c1syXTp2b2lkIDAsMikpLHZvaWQgMD09bXx8bD09QXJyYXkmJmYobSkpZm9yKGU9cyhkLmxlbmd0aCkscj1uZXcgbChlKTtlPnk7eSsrKXUocix5LHY/YihkW3ldLHkpOmRbeV0pO2Vsc2UgZm9yKGM9bS5jYWxsKGQpLHI9bmV3IGw7IShpPWMubmV4dCgpKS5kb25lO3krKyl1KHIseSx2P2EoYyxiLFtpLnZhbHVlLHldLCEwKTppLnZhbHVlKTtyZXR1cm4gci5sZW5ndGg9eSxyfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoNzgpKCExKSxvPVtdLmluZGV4T2YsYT0hIW8mJjEvWzFdLmluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKGF8fCFyKDI1KShvKSksXCJBcnJheVwiLHtpbmRleE9mOmZ1bmN0aW9uKHQpe3JldHVybiBhP28uYXBwbHkodGhpcyxhcmd1bWVudHMpfHwwOmkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiQXJyYXlcIix7aXNBcnJheTpyKDEyNil9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE3KSxvPVtdLmpvaW47bihuLlArbi5GKihyKDY1KSE9T2JqZWN0fHwhcigyNSkobykpLFwiQXJyYXlcIix7am9pbjpmdW5jdGlvbih0KXtyZXR1cm4gby5jYWxsKGkodGhpcyksdm9pZCAwPT09dD9cIixcIjp0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE3KSxvPXIoMzgpLGE9cigxMCksZj1bXS5sYXN0SW5kZXhPZixzPSEhZiYmMS9bMV0ubGFzdEluZGV4T2YoMSwtMCk8MDtuKG4uUCtuLkYqKHN8fCFyKDI1KShmKSksXCJBcnJheVwiLHtsYXN0SW5kZXhPZjpmdW5jdGlvbih0KXtpZihzKXJldHVybiBmLmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8MDt2YXIgZT1pKHRoaXMpLHI9YShlLmxlbmd0aCksbj1yLTE7Zm9yKGFyZ3VtZW50cy5sZW5ndGg+MSYmKG49TWF0aC5taW4obixvKGFyZ3VtZW50c1sxXSkpKSxuPDAmJihuPXIrbik7bj49MDtuLS0paWYobiBpbiBlJiZlW25dPT09dClyZXR1cm4gbnx8MDtyZXR1cm4tMX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDI3KSgxKTtuKG4uUCtuLkYqIXIoMjUpKFtdLm1hcCwhMCksXCJBcnJheVwiLHttYXA6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMTkpO24obi5TK24uRipyKDUpKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe31yZXR1cm4hKEFycmF5Lm9mLmNhbGwodClpbnN0YW5jZW9mIHQpfSksXCJBcnJheVwiLHtvZjpmdW5jdGlvbigpe2Zvcih2YXIgdD0wLGU9YXJndW1lbnRzLmxlbmd0aCxyPW5ldyhcImZ1bmN0aW9uXCI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkpKGUpO2U+dDspaShyLHQsYXJndW1lbnRzW3QrK10pO3JldHVybiByLmxlbmd0aD1lLHJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxNjkpO24obi5QK24uRiohcigyNSkoW10ucmVkdWNlUmlnaHQsITApLFwiQXJyYXlcIix7cmVkdWNlUmlnaHQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGgsYXJndW1lbnRzWzFdLCEwKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE2OSk7bihuLlArbi5GKiFyKDI1KShbXS5yZWR1Y2UsITApLFwiQXJyYXlcIix7cmVkdWNlOmZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMsdCxhcmd1bWVudHMubGVuZ3RoLGFyZ3VtZW50c1sxXSwhMSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMjMpLG89cigyMyksYT1yKDQ3KSxmPXIoMTApLHM9W10uc2xpY2U7bihuLlArbi5GKnIoNSkoZnVuY3Rpb24oKXtpJiZzLmNhbGwoaSl9KSxcIkFycmF5XCIse3NsaWNlOmZ1bmN0aW9uKHQsZSl7dmFyIHI9Zih0aGlzLmxlbmd0aCksbj1vKHRoaXMpO2lmKGU9dm9pZCAwPT09ZT9yOmUsXCJBcnJheVwiPT1uKXJldHVybiBzLmNhbGwodGhpcyx0LGUpO2Zvcih2YXIgaT1hKHQsciksdT1hKGUsciksaD1mKHUtaSksYz1BcnJheShoKSxkPTA7ZDxoO2QrKyljW2RdPVwiU3RyaW5nXCI9PW4/dGhpcy5jaGFyQXQoaStkKTp0aGlzW2krZF07cmV0dXJuIGN9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigyNykoMyk7bihuLlArbi5GKiFyKDI1KShbXS5zb21lLCEwKSxcIkFycmF5XCIse3NvbWU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50c1sxXSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMyksbz1yKDExKSxhPXIoNSksZj1bXS5zb3J0LHM9WzEsMiwzXTtuKG4uUCtuLkYqKGEoZnVuY3Rpb24oKXtzLnNvcnQodm9pZCAwKX0pfHwhYShmdW5jdGlvbigpe3Muc29ydChudWxsKX0pfHwhcigyNSkoZikpLFwiQXJyYXlcIix7c29ydDpmdW5jdGlvbih0KXtyZXR1cm4gdm9pZCAwPT09dD9mLmNhbGwobyh0aGlzKSk6Zi5jYWxsKG8odGhpcyksaSh0KSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDQ2KShcIkFycmF5XCIpfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIkRhdGVcIix7bm93OmZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cig1KSxvPURhdGUucHJvdG90eXBlLmdldFRpbWUsYT1mdW5jdGlvbih0KXtyZXR1cm4gdD45P3Q6XCIwXCIrdH07bihuLlArbi5GKihpKGZ1bmN0aW9uKCl7cmV0dXJuXCIwMzg1LTA3LTI1VDA3OjA2OjM5Ljk5OVpcIiE9bmV3IERhdGUoLTVlMTMtMSkudG9JU09TdHJpbmcoKX0pfHwhaShmdW5jdGlvbigpe25ldyBEYXRlKE5hTikudG9JU09TdHJpbmcoKX0pKSxcIkRhdGVcIix7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtpZighaXNGaW5pdGUoby5jYWxsKHRoaXMpKSl0aHJvdyBSYW5nZUVycm9yKFwiSW52YWxpZCB0aW1lIHZhbHVlXCIpO3ZhciB0PXRoaXMsZT10LmdldFVUQ0Z1bGxZZWFyKCkscj10LmdldFVUQ01pbGxpc2Vjb25kcygpLG49ZTwwP1wiLVwiOmU+OTk5OT9cIitcIjpcIlwiO3JldHVybiBuKyhcIjAwMDAwXCIrTWF0aC5hYnMoZSkpLnNsaWNlKG4/LTY6LTQpK1wiLVwiK2EodC5nZXRVVENNb250aCgpKzEpK1wiLVwiK2EodC5nZXRVVENEYXRlKCkpK1wiVFwiK2EodC5nZXRVVENIb3VycygpKStcIjpcIithKHQuZ2V0VVRDTWludXRlcygpKStcIjpcIithKHQuZ2V0VVRDU2Vjb25kcygpKStcIi5cIisocj45OT9yOlwiMFwiK2EocikpK1wiWlwifX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTEpLG89cigyOSk7bihuLlArbi5GKnIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PW5ldyBEYXRlKE5hTikudG9KU09OKCl8fDEhPT1EYXRlLnByb3RvdHlwZS50b0pTT04uY2FsbCh7dG9JU09TdHJpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gMX19KX0pLFwiRGF0ZVwiLHt0b0pTT046ZnVuY3Rpb24odCl7dmFyIGU9aSh0aGlzKSxyPW8oZSk7cmV0dXJuXCJudW1iZXJcIiE9dHlwZW9mIHJ8fGlzRmluaXRlKHIpP2UudG9JU09TdHJpbmcoKTpudWxsfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig3KShcInRvUHJpbWl0aXZlXCIpLGk9RGF0ZS5wcm90b3R5cGU7biBpbiBpfHxyKDE0KShpLG4scigyODQpKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPURhdGUucHJvdG90eXBlLGk9XCJJbnZhbGlkIERhdGVcIixvPVwidG9TdHJpbmdcIixhPW5bb10sZj1uLmdldFRpbWU7bmV3IERhdGUoTmFOKStcIlwiIT1pJiZyKDE1KShuLG8sZnVuY3Rpb24oKXt2YXIgdD1mLmNhbGwodGhpcyk7cmV0dXJuIHQ9PT10P2EuY2FsbCh0aGlzKTppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QLFwiRnVuY3Rpb25cIix7YmluZDpyKDE3MCl9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNiksaT1yKDIxKSxvPXIoNykoXCJoYXNJbnN0YW5jZVwiKSxhPUZ1bmN0aW9uLnByb3RvdHlwZTtvIGluIGF8fHIoOSkuZihhLG8se3ZhbHVlOmZ1bmN0aW9uKHQpe2lmKFwiZnVuY3Rpb25cIiE9dHlwZW9mIHRoaXN8fCFuKHQpKXJldHVybiExO2lmKCFuKHRoaXMucHJvdG90eXBlKSlyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM7Zm9yKDt0PWkodCk7KWlmKHRoaXMucHJvdG90eXBlPT09dClyZXR1cm4hMDtyZXR1cm4hMX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSkuZixpPXIoMzcpLG89cigxMiksYT1GdW5jdGlvbi5wcm90b3R5cGUsZj0vXlxccypmdW5jdGlvbiAoW14gKF0qKS8scz1cIm5hbWVcIix1PU9iamVjdC5pc0V4dGVuc2libGV8fGZ1bmN0aW9uKCl7cmV0dXJuITB9O3MgaW4gYXx8cig4KSYmbihhLHMse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt0cnl7dmFyIHQ9dGhpcyxlPShcIlwiK3QpLm1hdGNoKGYpWzFdO3JldHVybiBvKHQscyl8fCF1KHQpfHxuKHQscyxpKDUsZSkpLGV9Y2F0Y2godCl7cmV0dXJuXCJcIn19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNzgpLG89TWF0aC5zcXJ0LGE9TWF0aC5hY29zaDtuKG4uUytuLkYqIShhJiY3MTA9PU1hdGguZmxvb3IoYShOdW1iZXIuTUFYX1ZBTFVFKSkmJmEoMS8wKT09MS8wKSxcIk1hdGhcIix7YWNvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKHQ9K3QpPDE/TmFOOnQ+OTQ5MDYyNjUuNjI0MjUxNTY/TWF0aC5sb2codCkrTWF0aC5MTjI6aSh0LTErbyh0LTEpKm8odCsxKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3JldHVybiBpc0Zpbml0ZSh0PSt0KSYmMCE9dD90PDA/LW4oLXQpOk1hdGgubG9nKHQrTWF0aC5zcXJ0KHQqdCsxKSk6dH12YXIgaT1yKDApLG89TWF0aC5hc2luaDtpKGkuUytpLkYqIShvJiYxL28oMCk+MCksXCJNYXRoXCIse2FzaW5oOm59KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmF0YW5oO24obi5TK24uRiohKGkmJjEvaSgtMCk8MCksXCJNYXRoXCIse2F0YW5oOmZ1bmN0aW9uKHQpe3JldHVybiAwPT0odD0rdCk/dDpNYXRoLmxvZygoMSt0KS8oMS10KSkvMn19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMCk7bihuLlMsXCJNYXRoXCIse2NicnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodD0rdCkqTWF0aC5wb3coTWF0aC5hYnModCksMS8zKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2NsejMyOmZ1bmN0aW9uKHQpe3JldHVybih0Pj4+PTApPzMxLU1hdGguZmxvb3IoTWF0aC5sb2codCsuNSkqTWF0aC5MT0cyRSk6MzJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9TWF0aC5leHA7bihuLlMsXCJNYXRoXCIse2Nvc2g6ZnVuY3Rpb24odCl7cmV0dXJuKGkodD0rdCkraSgtdCkpLzJ9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMjkpO24obi5TK24uRiooaSE9TWF0aC5leHBtMSksXCJNYXRoXCIse2V4cG0xOml9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMCksbz1NYXRoLnBvdyxhPW8oMiwtNTIpLGY9bygyLC0yMykscz1vKDIsMTI3KSooMi1mKSx1PW8oMiwtMTI2KSxoPWZ1bmN0aW9uKHQpe3JldHVybiB0KzEvYS0xL2F9O24obi5TLFwiTWF0aFwiLHtmcm91bmQ6ZnVuY3Rpb24odCl7dmFyIGUscixuPU1hdGguYWJzKHQpLG89aSh0KTtyZXR1cm4gbjx1P28qaChuL3UvZikqdSpmOihlPSgxK2YvYSkqbixyPWUtKGUtbikscj5zfHxyIT1yP28qKDEvMCk6bypyKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1NYXRoLmFicztuKG4uUyxcIk1hdGhcIix7aHlwb3Q6ZnVuY3Rpb24odCxlKXtmb3IodmFyIHIsbixvPTAsYT0wLGY9YXJndW1lbnRzLmxlbmd0aCxzPTA7YTxmOylyPWkoYXJndW1lbnRzW2ErK10pLHM8cj8obj1zL3Isbz1vKm4qbisxLHM9cik6cj4wPyhuPXIvcyxvKz1uKm4pOm8rPXI7cmV0dXJuIHM9PT0xLzA/MS8wOnMqTWF0aC5zcXJ0KG8pfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPU1hdGguaW11bDtuKG4uUytuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiBpKDQyOTQ5NjcyOTUsNSkhPS01fHwyIT1pLmxlbmd0aH0pLFwiTWF0aFwiLHtpbXVsOmZ1bmN0aW9uKHQsZSl7dmFyIHI9NjU1MzUsbj0rdCxpPStlLG89ciZuLGE9ciZpO3JldHVybiAwfG8qYSsoKHImbj4+PjE2KSphK28qKHImaT4+PjE2KTw8MTY+Pj4wKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzEwOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmxvZyh0KS9NYXRoLkxOMTB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtsb2cxcDpyKDE3OCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2xvZzI6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGgubG9nKHQpL01hdGguTE4yfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7c2lnbjpyKDEzMCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEyOSksbz1NYXRoLmV4cDtuKG4uUytuLkYqcig1KShmdW5jdGlvbigpe3JldHVybiFNYXRoLnNpbmgoLTJlLTE3KSE9LTJlLTE3fSksXCJNYXRoXCIse3Npbmg6ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguYWJzKHQ9K3QpPDE/KGkodCktaSgtdCkpLzI6KG8odC0xKS1vKC10LTEpKSooTWF0aC5FLzIpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTI5KSxvPU1hdGguZXhwO24obi5TLFwiTWF0aFwiLHt0YW5oOmZ1bmN0aW9uKHQpe3ZhciBlPWkodD0rdCkscj1pKC10KTtyZXR1cm4gZT09MS8wPzE6cj09MS8wPy0xOihlLXIpLyhvKHQpK28oLXQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse3RydW5jOmZ1bmN0aW9uKHQpe3JldHVybih0PjA/TWF0aC5mbG9vcjpNYXRoLmNlaWwpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cig0KSxpPXIoMTIpLG89cigyMyksYT1yKDEyNCksZj1yKDI5KSxzPXIoNSksdT1yKDQzKS5mLGg9cigyMCkuZixjPXIoOSkuZixkPXIoNTgpLnRyaW0sbD1cIk51bWJlclwiLHA9bltsXSxiPXAsdj1wLnByb3RvdHlwZSx5PW8ocig0MikodikpPT1sLG09XCJ0cmltXCJpbiBTdHJpbmcucHJvdG90eXBlLGc9ZnVuY3Rpb24odCl7dmFyIGU9Zih0LCExKTtpZihcInN0cmluZ1wiPT10eXBlb2YgZSYmZS5sZW5ndGg+Mil7ZT1tP2UudHJpbSgpOmQoZSwzKTt2YXIgcixuLGksbz1lLmNoYXJDb2RlQXQoMCk7aWYoNDM9PT1vfHw0NT09PW8pe2lmKHI9ZS5jaGFyQ29kZUF0KDIpLDg4PT09cnx8MTIwPT09cilyZXR1cm4gTmFOfWVsc2UgaWYoNDg9PT1vKXtzd2l0Y2goZS5jaGFyQ29kZUF0KDEpKXtjYXNlIDY2OmNhc2UgOTg6bj0yLGk9NDk7YnJlYWs7Y2FzZSA3OTpjYXNlIDExMTpuPTgsaT01NTticmVhaztkZWZhdWx0OnJldHVybitlfWZvcih2YXIgYSxzPWUuc2xpY2UoMiksdT0wLGg9cy5sZW5ndGg7dTxoO3UrKylpZihhPXMuY2hhckNvZGVBdCh1KSxhPDQ4fHxhPmkpcmV0dXJuIE5hTjtyZXR1cm4gcGFyc2VJbnQocyxuKX19cmV0dXJuK2V9O2lmKCFwKFwiIDBvMVwiKXx8IXAoXCIwYjFcIil8fHAoXCIrMHgxXCIpKXtwPWZ1bmN0aW9uKHQpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg8MT8wOnQscj10aGlzO3JldHVybiByIGluc3RhbmNlb2YgcCYmKHk/cyhmdW5jdGlvbigpe3YudmFsdWVPZi5jYWxsKHIpfSk6byhyKSE9bCk/YShuZXcgYihnKGUpKSxyLHApOmcoZSl9O2Zvcih2YXIgdyxfPXIoOCk/dShiKTpcIk1BWF9WQUxVRSxNSU5fVkFMVUUsTmFOLE5FR0FUSVZFX0lORklOSVRZLFBPU0lUSVZFX0lORklOSVRZLEVQU0lMT04saXNGaW5pdGUsaXNJbnRlZ2VyLGlzTmFOLGlzU2FmZUludGVnZXIsTUFYX1NBRkVfSU5URUdFUixNSU5fU0FGRV9JTlRFR0VSLHBhcnNlRmxvYXQscGFyc2VJbnQsaXNJbnRlZ2VyXCIuc3BsaXQoXCIsXCIpLE09MDtfLmxlbmd0aD5NO00rKylpKGIsdz1fW01dKSYmIWkocCx3KSYmYyhwLHcsaChiLHcpKTtwLnByb3RvdHlwZT12LHYuY29uc3RydWN0b3I9cCxyKDE1KShuLGwscCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk51bWJlclwiLHtFUFNJTE9OOk1hdGgucG93KDIsLTUyKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNCkuaXNGaW5pdGU7bihuLlMsXCJOdW1iZXJcIix7aXNGaW5pdGU6ZnVuY3Rpb24odCl7cmV0dXJuXCJudW1iZXJcIj09dHlwZW9mIHQmJmkodCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse2lzSW50ZWdlcjpyKDE3NSl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7aXNOYU46ZnVuY3Rpb24odCl7cmV0dXJuIHQhPXR9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNzUpLG89TWF0aC5hYnM7bihuLlMsXCJOdW1iZXJcIix7aXNTYWZlSW50ZWdlcjpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KSYmbyh0KTw9OTAwNzE5OTI1NDc0MDk5MX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJOdW1iZXJcIix7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTnVtYmVyXCIse01JTl9TQUZFX0lOVEVHRVI6LTkwMDcxOTkyNTQ3NDA5OTF9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4NSk7bihuLlMrbi5GKihOdW1iZXIucGFyc2VGbG9hdCE9aSksXCJOdW1iZXJcIix7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODYpO24obi5TK24uRiooTnVtYmVyLnBhcnNlSW50IT1pKSxcIk51bWJlclwiLHtwYXJzZUludDppfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigzOCksbz1yKDE2NiksYT1yKDEzNyksZj0xLi50b0ZpeGVkLHM9TWF0aC5mbG9vcix1PVswLDAsMCwwLDAsMF0saD1cIk51bWJlci50b0ZpeGVkOiBpbmNvcnJlY3QgaW52b2NhdGlvbiFcIixjPVwiMFwiLGQ9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9LTEsbj1lOysrcjw2OyluKz10KnVbcl0sdVtyXT1uJTFlNyxuPXMobi8xZTcpfSxsPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT02LHI9MDstLWU+PTA7KXIrPXVbZV0sdVtlXT1zKHIvdCkscj1yJXQqMWU3fSxwPWZ1bmN0aW9uKCl7Zm9yKHZhciB0PTYsZT1cIlwiOy0tdD49MDspaWYoXCJcIiE9PWV8fDA9PT10fHwwIT09dVt0XSl7dmFyIHI9U3RyaW5nKHVbdF0pO2U9XCJcIj09PWU/cjplK2EuY2FsbChjLDctci5sZW5ndGgpK3J9cmV0dXJuIGV9LGI9ZnVuY3Rpb24odCxlLHIpe3JldHVybiAwPT09ZT9yOmUlMj09PTE/Yih0LGUtMSxyKnQpOmIodCp0LGUvMixyKX0sdj1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPXQ7cj49NDA5NjspZSs9MTIsci89NDA5Njtmb3IoO3I+PTI7KWUrPTEsci89MjtyZXR1cm4gZX07bihuLlArbi5GKighIWYmJihcIjAuMDAwXCIhPT04ZS01LnRvRml4ZWQoMyl8fFwiMVwiIT09LjkudG9GaXhlZCgwKXx8XCIxLjI1XCIhPT0xLjI1NS50b0ZpeGVkKDIpfHxcIjEwMDAwMDAwMDAwMDAwMDAxMjhcIiE9PSgweGRlMGI2YjNhNzY0MDA4MCkudG9GaXhlZCgwKSl8fCFyKDUpKGZ1bmN0aW9uKCl7Zi5jYWxsKHt9KX0pKSxcIk51bWJlclwiLHt0b0ZpeGVkOmZ1bmN0aW9uKHQpe3ZhciBlLHIsbixmLHM9byh0aGlzLGgpLHU9aSh0KSx5PVwiXCIsbT1jO2lmKHU8MHx8dT4yMCl0aHJvdyBSYW5nZUVycm9yKGgpO2lmKHMhPXMpcmV0dXJuXCJOYU5cIjtpZihzPD0tMWUyMXx8cz49MWUyMSlyZXR1cm4gU3RyaW5nKHMpO2lmKHM8MCYmKHk9XCItXCIscz0tcykscz4xZS0yMSlpZihlPXYocypiKDIsNjksMSkpLTY5LHI9ZTwwP3MqYigyLC1lLDEpOnMvYigyLGUsMSkscio9NDUwMzU5OTYyNzM3MDQ5NixlPTUyLWUsZT4wKXtmb3IoZCgwLHIpLG49dTtuPj03OylkKDFlNywwKSxuLT03O2ZvcihkKGIoMTAsbiwxKSwwKSxuPWUtMTtuPj0yMzspbCgxPDwyMyksbi09MjM7bCgxPDxuKSxkKDEsMSksbCgyKSxtPXAoKX1lbHNlIGQoMCxyKSxkKDE8PC1lLDApLG09cCgpK2EuY2FsbChjLHUpO3JldHVybiB1PjA/KGY9bS5sZW5ndGgsbT15KyhmPD11P1wiMC5cIithLmNhbGwoYyx1LWYpK206bS5zbGljZSgwLGYtdSkrXCIuXCIrbS5zbGljZShmLXUpKSk6bT15K20sbX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDUpLG89cigxNjYpLGE9MS4udG9QcmVjaXNpb247bihuLlArbi5GKihpKGZ1bmN0aW9uKCl7cmV0dXJuXCIxXCIhPT1hLmNhbGwoMSx2b2lkIDApfSl8fCFpKGZ1bmN0aW9uKCl7YS5jYWxsKHt9KX0pKSxcIk51bWJlclwiLHt0b1ByZWNpc2lvbjpmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMsXCJOdW1iZXIjdG9QcmVjaXNpb246IGluY29ycmVjdCBpbnZvY2F0aW9uIVwiKTtyZXR1cm4gdm9pZCAwPT09dD9hLmNhbGwoZSk6YS5jYWxsKGUsdCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TK24uRixcIk9iamVjdFwiLHthc3NpZ246cigxNzkpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiT2JqZWN0XCIse2NyZWF0ZTpyKDQyKX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUytuLkYqIXIoOCksXCJPYmplY3RcIix7ZGVmaW5lUHJvcGVydGllczpyKDE4MCl9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMrbi5GKiFyKDgpLFwiT2JqZWN0XCIse2RlZmluZVByb3BlcnR5OnIoOSkuZn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwiZnJlZXplXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0JiZuKGUpP3QoaShlKSk6ZX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTcpLGk9cigyMCkuZjtyKDI4KShcImdldE93blByb3BlcnR5RGVzY3JpcHRvclwiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7cmV0dXJuIGkobih0KSxlKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMjgpKFwiZ2V0T3duUHJvcGVydHlOYW1lc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHIoMTgxKS5mfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDExKSxpPXIoMjEpO3IoMjgpKFwiZ2V0UHJvdG90eXBlT2ZcIixmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gaShuKHQpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNik7cigyOCkoXCJpc0V4dGVuc2libGVcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuISFuKGUpJiYoIXR8fHQoZSkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KTtyKDI4KShcImlzRnJvemVuXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiFuKGUpfHwhIXQmJnQoZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDYpO3IoMjgpKFwiaXNTZWFsZWRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIW4oZSl8fCEhdCYmdChlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJPYmplY3RcIix7aXM6cigxODcpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDExKSxpPXIoNDQpO3IoMjgpKFwia2V5c1wiLGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBpKG4odCkpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwicHJldmVudEV4dGVuc2lvbnNcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQmJm4oZSk/dChpKGUpKTplfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig2KSxpPXIoMzYpLm9uRnJlZXplO3IoMjgpKFwic2VhbFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCYmbihlKT90KGkoZSkpOmV9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiT2JqZWN0XCIse3NldFByb3RvdHlwZU9mOnIoMTMyKS5zZXR9KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoNjQpLGk9e307aVtyKDcpKFwidG9TdHJpbmdUYWdcIildPVwielwiLGkrXCJcIiE9XCJbb2JqZWN0IHpdXCImJnIoMTUpKE9iamVjdC5wcm90b3R5cGUsXCJ0b1N0cmluZ1wiLGZ1bmN0aW9uKCl7cmV0dXJuXCJbb2JqZWN0IFwiK24odGhpcykrXCJdXCJ9LCEwKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4NSk7bihuLkcrbi5GKihwYXJzZUZsb2F0IT1pKSx7cGFyc2VGbG9hdDppfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODYpO24obi5HK24uRioocGFyc2VJbnQhPWkpLHtwYXJzZUludDppfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbixpLG8sYT1yKDQxKSxmPXIoNCkscz1yKDMzKSx1PXIoNjQpLGg9cigwKSxjPXIoNiksZD1yKDEzKSxsPXIoNDApLHA9cig1NSksYj1yKDEzNCksdj1yKDEzOSkuc2V0LHk9cigxMzEpKCksbT1cIlByb21pc2VcIixnPWYuVHlwZUVycm9yLHc9Zi5wcm9jZXNzLF89ZlttXSx3PWYucHJvY2VzcyxNPVwicHJvY2Vzc1wiPT11KHcpLFM9ZnVuY3Rpb24oKXt9LEU9ISFmdW5jdGlvbigpe3RyeXt2YXIgdD1fLnJlc29sdmUoMSksZT0odC5jb25zdHJ1Y3Rvcj17fSlbcig3KShcInNwZWNpZXNcIildPWZ1bmN0aW9uKHQpe3QoUyxTKX07cmV0dXJuKE18fFwiZnVuY3Rpb25cIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJnQudGhlbihTKWluc3RhbmNlb2YgZX1jYXRjaCh0KXt9fSgpLEE9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD09PWV8fHQ9PT1fJiZlPT09b30saz1mdW5jdGlvbih0KXt2YXIgZTtyZXR1cm4hKCFjKHQpfHxcImZ1bmN0aW9uXCIhPXR5cGVvZihlPXQudGhlbikpJiZlfSx4PWZ1bmN0aW9uKHQpe3JldHVybiBBKF8sdCk/bmV3IEkodCk6bmV3IGkodCl9LEk9aT1mdW5jdGlvbih0KXt2YXIgZSxyO3RoaXMucHJvbWlzZT1uZXcgdChmdW5jdGlvbih0LG4pe2lmKHZvaWQgMCE9PWV8fHZvaWQgMCE9PXIpdGhyb3cgZyhcIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yXCIpO2U9dCxyPW59KSx0aGlzLnJlc29sdmU9ZChlKSx0aGlzLnJlamVjdD1kKHIpfSxCPWZ1bmN0aW9uKHQpe3RyeXt0KCl9Y2F0Y2godCl7cmV0dXJue2Vycm9yOnR9fX0sTz1mdW5jdGlvbih0LGUpe2lmKCF0Ll9uKXt0Ll9uPSEwO3ZhciByPXQuX2M7eShmdW5jdGlvbigpe2Zvcih2YXIgbj10Ll92LGk9MT09dC5fcyxvPTAsYT1mdW5jdGlvbihlKXt2YXIgcixvLGE9aT9lLm9rOmUuZmFpbCxmPWUucmVzb2x2ZSxzPWUucmVqZWN0LHU9ZS5kb21haW47dHJ5e2E/KGl8fCgyPT10Ll9oJiZUKHQpLHQuX2g9MSksYT09PSEwP3I9bjoodSYmdS5lbnRlcigpLHI9YShuKSx1JiZ1LmV4aXQoKSkscj09PWUucHJvbWlzZT9zKGcoXCJQcm9taXNlLWNoYWluIGN5Y2xlXCIpKToobz1rKHIpKT9vLmNhbGwocixmLHMpOmYocikpOnMobil9Y2F0Y2godCl7cyh0KX19O3IubGVuZ3RoPm87KWEocltvKytdKTt0Ll9jPVtdLHQuX249ITEsZSYmIXQuX2gmJlIodCl9KX19LFI9ZnVuY3Rpb24odCl7di5jYWxsKGYsZnVuY3Rpb24oKXt2YXIgZSxyLG4saT10Ll92O2lmKFAodCkmJihlPUIoZnVuY3Rpb24oKXtNP3cuZW1pdChcInVuaGFuZGxlZFJlamVjdGlvblwiLGksdCk6KHI9Zi5vbnVuaGFuZGxlZHJlamVjdGlvbik/cih7cHJvbWlzZTp0LHJlYXNvbjppfSk6KG49Zi5jb25zb2xlKSYmbi5lcnJvciYmbi5lcnJvcihcIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvblwiLGkpfSksdC5faD1NfHxQKHQpPzI6MSksdC5fYT12b2lkIDAsZSl0aHJvdyBlLmVycm9yfSl9LFA9ZnVuY3Rpb24odCl7aWYoMT09dC5faClyZXR1cm4hMTtmb3IodmFyIGUscj10Ll9hfHx0Ll9jLG49MDtyLmxlbmd0aD5uOylpZihlPXJbbisrXSxlLmZhaWx8fCFQKGUucHJvbWlzZSkpcmV0dXJuITE7cmV0dXJuITB9LFQ9ZnVuY3Rpb24odCl7di5jYWxsKGYsZnVuY3Rpb24oKXt2YXIgZTtNP3cuZW1pdChcInJlamVjdGlvbkhhbmRsZWRcIix0KTooZT1mLm9ucmVqZWN0aW9uaGFuZGxlZCkmJmUoe3Byb21pc2U6dCxyZWFzb246dC5fdn0pfSl9LGo9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcztlLl9kfHwoZS5fZD0hMCxlPWUuX3d8fGUsZS5fdj10LGUuX3M9MixlLl9hfHwoZS5fYT1lLl9jLnNsaWNlKCkpLE8oZSwhMCkpfSxDPWZ1bmN0aW9uKHQpe3ZhciBlLHI9dGhpcztpZighci5fZCl7ci5fZD0hMCxyPXIuX3d8fHI7dHJ5e2lmKHI9PT10KXRocm93IGcoXCJQcm9taXNlIGNhbid0IGJlIHJlc29sdmVkIGl0c2VsZlwiKTsoZT1rKHQpKT95KGZ1bmN0aW9uKCl7dmFyIG49e193OnIsX2Q6ITF9O3RyeXtlLmNhbGwodCxzKEMsbiwxKSxzKGosbiwxKSl9Y2F0Y2godCl7ai5jYWxsKG4sdCl9fSk6KHIuX3Y9dCxyLl9zPTEsTyhyLCExKSl9Y2F0Y2godCl7ai5jYWxsKHtfdzpyLF9kOiExfSx0KX19fTtFfHwoXz1mdW5jdGlvbih0KXtsKHRoaXMsXyxtLFwiX2hcIiksZCh0KSxuLmNhbGwodGhpcyk7dHJ5e3QocyhDLHRoaXMsMSkscyhqLHRoaXMsMSkpfWNhdGNoKHQpe2ouY2FsbCh0aGlzLHQpfX0sbj1mdW5jdGlvbih0KXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSxuLnByb3RvdHlwZT1yKDQ1KShfLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbih0LGUpe3ZhciByPXgoYih0aGlzLF8pKTtyZXR1cm4gci5vaz1cImZ1bmN0aW9uXCIhPXR5cGVvZiB0fHx0LHIuZmFpbD1cImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiZlLHIuZG9tYWluPU0/dy5kb21haW46dm9pZCAwLHRoaXMuX2MucHVzaChyKSx0aGlzLl9hJiZ0aGlzLl9hLnB1c2gociksdGhpcy5fcyYmTyh0aGlzLCExKSxyLnByb21pc2V9LGNhdGNoOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnRoZW4odm9pZCAwLHQpfX0pLEk9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgbjt0aGlzLnByb21pc2U9dCx0aGlzLnJlc29sdmU9cyhDLHQsMSksdGhpcy5yZWplY3Q9cyhqLHQsMSl9KSxoKGguRytoLlcraC5GKiFFLHtQcm9taXNlOl99KSxyKDU3KShfLG0pLHIoNDYpKG0pLG89cigzMilbbV0saChoLlMraC5GKiFFLG0se3JlamVjdDpmdW5jdGlvbih0KXt2YXIgZT14KHRoaXMpLHI9ZS5yZWplY3Q7cmV0dXJuIHIodCksZS5wcm9taXNlfX0pLGgoaC5TK2guRiooYXx8IUUpLG0se3Jlc29sdmU6ZnVuY3Rpb24odCl7aWYodCBpbnN0YW5jZW9mIF8mJkEodC5jb25zdHJ1Y3Rvcix0aGlzKSlyZXR1cm4gdDt2YXIgZT14KHRoaXMpLHI9ZS5yZXNvbHZlO3JldHVybiByKHQpLGUucHJvbWlzZX19KSxoKGguUytoLkYqIShFJiZyKDg0KShmdW5jdGlvbih0KXtfLmFsbCh0KS5jYXRjaChTKX0pKSxtLHthbGw6ZnVuY3Rpb24odCl7dmFyIGU9dGhpcyxyPXgoZSksbj1yLnJlc29sdmUsaT1yLnJlamVjdCxvPUIoZnVuY3Rpb24oKXt2YXIgcj1bXSxvPTAsYT0xO3AodCwhMSxmdW5jdGlvbih0KXt2YXIgZj1vKysscz0hMTtyLnB1c2godm9pZCAwKSxhKyssZS5yZXNvbHZlKHQpLnRoZW4oZnVuY3Rpb24odCl7c3x8KHM9ITAscltmXT10LC0tYXx8bihyKSl9LGkpfSksLS1hfHxuKHIpfSk7cmV0dXJuIG8mJmkoby5lcnJvciksci5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMscj14KGUpLG49ci5yZWplY3QsaT1CKGZ1bmN0aW9uKCl7cCh0LCExLGZ1bmN0aW9uKHQpe2UucmVzb2x2ZSh0KS50aGVuKHIucmVzb2x2ZSxuKX0pfSk7cmV0dXJuIGkmJm4oaS5lcnJvciksci5wcm9taXNlfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTMpLG89cigzKSxhPShyKDQpLlJlZmxlY3R8fHt9KS5hcHBseSxmPUZ1bmN0aW9uLmFwcGx5O24obi5TK24uRiohcig1KShmdW5jdGlvbigpe2EoZnVuY3Rpb24oKXt9KX0pLFwiUmVmbGVjdFwiLHthcHBseTpmdW5jdGlvbih0LGUscil7dmFyIG49aSh0KSxzPW8ocik7cmV0dXJuIGE/YShuLGUscyk6Zi5jYWxsKG4sZSxzKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDQyKSxvPXIoMTMpLGE9cigzKSxmPXIoNikscz1yKDUpLHU9cigxNzApLGg9KHIoNCkuUmVmbGVjdHx8e30pLmNvbnN0cnVjdCxjPXMoZnVuY3Rpb24oKXtmdW5jdGlvbiB0KCl7fXJldHVybiEoaChmdW5jdGlvbigpe30sW10sdClpbnN0YW5jZW9mIHQpfSksZD0hcyhmdW5jdGlvbigpe2goZnVuY3Rpb24oKXt9KX0pO24obi5TK24uRiooY3x8ZCksXCJSZWZsZWN0XCIse2NvbnN0cnVjdDpmdW5jdGlvbih0LGUpe28odCksYShlKTt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDM/dDpvKGFyZ3VtZW50c1syXSk7aWYoZCYmIWMpcmV0dXJuIGgodCxlLHIpO2lmKHQ9PXIpe3N3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuZXcgdDtjYXNlIDE6cmV0dXJuIG5ldyB0KGVbMF0pO2Nhc2UgMjpyZXR1cm4gbmV3IHQoZVswXSxlWzFdKTtjYXNlIDM6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdKTtjYXNlIDQ6cmV0dXJuIG5ldyB0KGVbMF0sZVsxXSxlWzJdLGVbM10pfXZhciBuPVtudWxsXTtyZXR1cm4gbi5wdXNoLmFwcGx5KG4sZSksbmV3KHUuYXBwbHkodCxuKSl9dmFyIHM9ci5wcm90b3R5cGUsbD1pKGYocyk/czpPYmplY3QucHJvdG90eXBlKSxwPUZ1bmN0aW9uLmFwcGx5LmNhbGwodCxsLGUpO3JldHVybiBmKHApP3A6bH19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoOSksaT1yKDApLG89cigzKSxhPXIoMjkpO2koaS5TK2kuRipyKDUpKGZ1bmN0aW9uKCl7UmVmbGVjdC5kZWZpbmVQcm9wZXJ0eShuLmYoe30sMSx7dmFsdWU6MX0pLDEse3ZhbHVlOjJ9KX0pLFwiUmVmbGVjdFwiLHtkZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7byh0KSxlPWEoZSwhMCksbyhyKTt0cnl7cmV0dXJuIG4uZih0LGUsciksITB9Y2F0Y2godCl7cmV0dXJuITF9fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMjApLmYsbz1yKDMpO24obi5TLFwiUmVmbGVjdFwiLHtkZWxldGVQcm9wZXJ0eTpmdW5jdGlvbih0LGUpe3ZhciByPWkobyh0KSxlKTtyZXR1cm4hKHImJiFyLmNvbmZpZ3VyYWJsZSkmJmRlbGV0ZSB0W2VdfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMyksbz1mdW5jdGlvbih0KXt0aGlzLl90PWkodCksdGhpcy5faT0wO3ZhciBlLHI9dGhpcy5faz1bXTtmb3IoZSBpbiB0KXIucHVzaChlKX07cigxMjcpKG8sXCJPYmplY3RcIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcyxyPWUuX2s7ZG8gaWYoZS5faT49ci5sZW5ndGgpcmV0dXJue3ZhbHVlOnZvaWQgMCxkb25lOiEwfTt3aGlsZSghKCh0PXJbZS5faSsrXSlpbiBlLl90KSk7cmV0dXJue3ZhbHVlOnQsZG9uZTohMX19KSxuKG4uUyxcIlJlZmxlY3RcIix7ZW51bWVyYXRlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjApLGk9cigwKSxvPXIoMyk7aShpLlMsXCJSZWZsZWN0XCIse2dldE93blByb3BlcnR5RGVzY3JpcHRvcjpmdW5jdGlvbih0LGUpe3JldHVybiBuLmYobyh0KSxlKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDIxKSxvPXIoMyk7bihuLlMsXCJSZWZsZWN0XCIse2dldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQpe3JldHVybiBpKG8odCkpfX0pfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe3ZhciByLGYsaD1hcmd1bWVudHMubGVuZ3RoPDM/dDphcmd1bWVudHNbMl07cmV0dXJuIHUodCk9PT1oP3RbZV06KHI9aS5mKHQsZSkpP2EocixcInZhbHVlXCIpP3IudmFsdWU6dm9pZCAwIT09ci5nZXQ/ci5nZXQuY2FsbChoKTp2b2lkIDA6cyhmPW8odCkpP24oZixlLGgpOnZvaWQgMH12YXIgaT1yKDIwKSxvPXIoMjEpLGE9cigxMiksZj1yKDApLHM9cig2KSx1PXIoMyk7ZihmLlMsXCJSZWZsZWN0XCIse2dldDpufSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiUmVmbGVjdFwiLHtoYXM6ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbiB0fX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMyksbz1PYmplY3QuaXNFeHRlbnNpYmxlO24obi5TLFwiUmVmbGVjdFwiLHtpc0V4dGVuc2libGU6ZnVuY3Rpb24odCl7cmV0dXJuIGkodCksIW98fG8odCl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiUmVmbGVjdFwiLHtvd25LZXlzOnIoMTg0KX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMyksbz1PYmplY3QucHJldmVudEV4dGVuc2lvbnM7bihuLlMsXCJSZWZsZWN0XCIse3ByZXZlbnRFeHRlbnNpb25zOmZ1bmN0aW9uKHQpe2kodCk7dHJ5e3JldHVybiBvJiZvKHQpLCEwfWNhdGNoKHQpe3JldHVybiExfX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDEzMik7aSYmbihuLlMsXCJSZWZsZWN0XCIse3NldFByb3RvdHlwZU9mOmZ1bmN0aW9uKHQsZSl7aS5jaGVjayh0LGUpO3RyeXtyZXR1cm4gaS5zZXQodCxlKSwhMH1jYXRjaCh0KXtyZXR1cm4hMX19fSl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSxyKXt2YXIgcyxkLGw9YXJndW1lbnRzLmxlbmd0aDw0P3Q6YXJndW1lbnRzWzNdLHA9by5mKGgodCksZSk7aWYoIXApe2lmKGMoZD1hKHQpKSlyZXR1cm4gbihkLGUscixsKTtwPXUoMCl9cmV0dXJuIGYocCxcInZhbHVlXCIpPyEocC53cml0YWJsZT09PSExfHwhYyhsKSkmJihzPW8uZihsLGUpfHx1KDApLHMudmFsdWU9cixpLmYobCxlLHMpLCEwKTp2b2lkIDAhPT1wLnNldCYmKHAuc2V0LmNhbGwobCxyKSwhMCl9dmFyIGk9cig5KSxvPXIoMjApLGE9cigyMSksZj1yKDEyKSxzPXIoMCksdT1yKDM3KSxoPXIoMyksYz1yKDYpO3Mocy5TLFwiUmVmbGVjdFwiLHtzZXQ6bn0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0KSxpPXIoMTI0KSxvPXIoOSkuZixhPXIoNDMpLmYsZj1yKDgzKSxzPXIoODEpLHU9bi5SZWdFeHAsaD11LGM9dS5wcm90b3R5cGUsZD0vYS9nLGw9L2EvZyxwPW5ldyB1KGQpIT09ZDtpZihyKDgpJiYoIXB8fHIoNSkoZnVuY3Rpb24oKXtyZXR1cm4gbFtyKDcpKFwibWF0Y2hcIildPSExLHUoZCkhPWR8fHUobCk9PWx8fFwiL2EvaVwiIT11KGQsXCJpXCIpfSkpKXt1PWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcyBpbnN0YW5jZW9mIHUsbj1mKHQpLG89dm9pZCAwPT09ZTtyZXR1cm4hciYmbiYmdC5jb25zdHJ1Y3Rvcj09PXUmJm8/dDppKHA/bmV3IGgobiYmIW8/dC5zb3VyY2U6dCxlKTpoKChuPXQgaW5zdGFuY2VvZiB1KT90LnNvdXJjZTp0LG4mJm8/cy5jYWxsKHQpOmUpLHI/dGhpczpjLHUpfTtmb3IodmFyIGI9KGZ1bmN0aW9uKHQpe3QgaW4gdXx8byh1LHQse2NvbmZpZ3VyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gaFt0XX0sc2V0OmZ1bmN0aW9uKGUpe2hbdF09ZX19KX0pLHY9YShoKSx5PTA7di5sZW5ndGg+eTspYih2W3krK10pO2MuY29uc3RydWN0b3I9dSx1LnByb3RvdHlwZT1jLHIoMTUpKG4sXCJSZWdFeHBcIix1KX1yKDQ2KShcIlJlZ0V4cFwiKX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwibWF0Y2hcIiwxLGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm5bZnVuY3Rpb24ocil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49dCh0aGlzKSxpPXZvaWQgMD09cj92b2lkIDA6cltlXTtyZXR1cm4gdm9pZCAwIT09aT9pLmNhbGwocixuKTpuZXcgUmVnRXhwKHIpW2VdKFN0cmluZyhuKSl9LHJdfSl9LGZ1bmN0aW9uKHQsZSxyKXtcbnIoODApKFwicmVwbGFjZVwiLDIsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihuLGkpe1widXNlIHN0cmljdFwiO3ZhciBvPXQodGhpcyksYT12b2lkIDA9PW4/dm9pZCAwOm5bZV07cmV0dXJuIHZvaWQgMCE9PWE/YS5jYWxsKG4sbyxpKTpyLmNhbGwoU3RyaW5nKG8pLG4saSl9LHJdfSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDgwKShcInNlYXJjaFwiLDEsZnVuY3Rpb24odCxlLHIpe3JldHVybltmdW5jdGlvbihyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj10KHRoaXMpLGk9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1pP2kuY2FsbChyLG4pOm5ldyBSZWdFeHAocilbZV0oU3RyaW5nKG4pKX0scl19KX0sZnVuY3Rpb24odCxlLHIpe3IoODApKFwic3BsaXRcIiwyLGZ1bmN0aW9uKHQsZSxuKXtcInVzZSBzdHJpY3RcIjt2YXIgaT1yKDgzKSxvPW4sYT1bXS5wdXNoLGY9XCJzcGxpdFwiLHM9XCJsZW5ndGhcIix1PVwibGFzdEluZGV4XCI7aWYoXCJjXCI9PVwiYWJiY1wiW2ZdKC8oYikqLylbMV18fDQhPVwidGVzdFwiW2ZdKC8oPzopLywtMSlbc118fDIhPVwiYWJcIltmXSgvKD86YWIpKi8pW3NdfHw0IT1cIi5cIltmXSgvKC4/KSguPykvKVtzXXx8XCIuXCJbZl0oLygpKCkvKVtzXT4xfHxcIlwiW2ZdKC8uPy8pW3NdKXt2YXIgaD12b2lkIDA9PT0vKCk/Py8uZXhlYyhcIlwiKVsxXTtuPWZ1bmN0aW9uKHQsZSl7dmFyIHI9U3RyaW5nKHRoaXMpO2lmKHZvaWQgMD09PXQmJjA9PT1lKXJldHVybltdO2lmKCFpKHQpKXJldHVybiBvLmNhbGwocix0LGUpO3ZhciBuLGYsYyxkLGwscD1bXSxiPSh0Lmlnbm9yZUNhc2U/XCJpXCI6XCJcIikrKHQubXVsdGlsaW5lP1wibVwiOlwiXCIpKyh0LnVuaWNvZGU/XCJ1XCI6XCJcIikrKHQuc3RpY2t5P1wieVwiOlwiXCIpLHY9MCx5PXZvaWQgMD09PWU/NDI5NDk2NzI5NTplPj4+MCxtPW5ldyBSZWdFeHAodC5zb3VyY2UsYitcImdcIik7Zm9yKGh8fChuPW5ldyBSZWdFeHAoXCJeXCIrbS5zb3VyY2UrXCIkKD8hXFxcXHMpXCIsYikpOyhmPW0uZXhlYyhyKSkmJihjPWYuaW5kZXgrZlswXVtzXSwhKGM+diYmKHAucHVzaChyLnNsaWNlKHYsZi5pbmRleCkpLCFoJiZmW3NdPjEmJmZbMF0ucmVwbGFjZShuLGZ1bmN0aW9uKCl7Zm9yKGw9MTtsPGFyZ3VtZW50c1tzXS0yO2wrKyl2b2lkIDA9PT1hcmd1bWVudHNbbF0mJihmW2xdPXZvaWQgMCl9KSxmW3NdPjEmJmYuaW5kZXg8cltzXSYmYS5hcHBseShwLGYuc2xpY2UoMSkpLGQ9ZlswXVtzXSx2PWMscFtzXT49eSkpKTspbVt1XT09PWYuaW5kZXgmJm1bdV0rKztyZXR1cm4gdj09PXJbc10/IWQmJm0udGVzdChcIlwiKXx8cC5wdXNoKFwiXCIpOnAucHVzaChyLnNsaWNlKHYpKSxwW3NdPnk/cC5zbGljZSgwLHkpOnB9fWVsc2VcIjBcIltmXSh2b2lkIDAsMClbc10mJihuPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHZvaWQgMD09PXQmJjA9PT1lP1tdOm8uY2FsbCh0aGlzLHQsZSl9KTtyZXR1cm5bZnVuY3Rpb24ocixpKXt2YXIgbz10KHRoaXMpLGE9dm9pZCAwPT1yP3ZvaWQgMDpyW2VdO3JldHVybiB2b2lkIDAhPT1hP2EuY2FsbChyLG8saSk6bi5jYWxsKFN0cmluZyhvKSxyLGkpfSxuXX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxOTEpO3ZhciBuPXIoMyksaT1yKDgxKSxvPXIoOCksYT1cInRvU3RyaW5nXCIsZj0vLi9bYV0scz1mdW5jdGlvbih0KXtyKDE1KShSZWdFeHAucHJvdG90eXBlLGEsdCwhMCl9O3IoNSkoZnVuY3Rpb24oKXtyZXR1cm5cIi9hL2JcIiE9Zi5jYWxsKHtzb3VyY2U6XCJhXCIsZmxhZ3M6XCJiXCJ9KX0pP3MoZnVuY3Rpb24oKXt2YXIgdD1uKHRoaXMpO3JldHVyblwiL1wiLmNvbmNhdCh0LnNvdXJjZSxcIi9cIixcImZsYWdzXCJpbiB0P3QuZmxhZ3M6IW8mJnQgaW5zdGFuY2VvZiBSZWdFeHA/aS5jYWxsKHQpOnZvaWQgMCl9KTpmLm5hbWUhPWEmJnMoZnVuY3Rpb24oKXtyZXR1cm4gZi5jYWxsKHRoaXMpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImFuY2hvclwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiYVwiLFwibmFtZVwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJiaWdcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmlnXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiYmxpbmtcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwiYmxpbmtcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJib2xkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImJcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTM1KSghMSk7bihuLlAsXCJTdHJpbmdcIix7Y29kZVBvaW50QXQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEwKSxvPXIoMTM2KSxhPVwiZW5kc1dpdGhcIixmPVwiXCJbYV07bihuLlArbi5GKnIoMTIyKShhKSxcIlN0cmluZ1wiLHtlbmRzV2l0aDpmdW5jdGlvbih0KXt2YXIgZT1vKHRoaXMsdCxhKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLG49aShlLmxlbmd0aCkscz12b2lkIDA9PT1yP246TWF0aC5taW4oaShyKSxuKSx1PVN0cmluZyh0KTtyZXR1cm4gZj9mLmNhbGwoZSx1LHMpOmUuc2xpY2Uocy11Lmxlbmd0aCxzKT09PXV9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcImZpeGVkXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInR0XCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwiZm9udGNvbG9yXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJmb250XCIsXCJjb2xvclwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJmb250c2l6ZVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gdCh0aGlzLFwiZm9udFwiLFwic2l6ZVwiLGUpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoNDcpLG89U3RyaW5nLmZyb21DaGFyQ29kZSxhPVN0cmluZy5mcm9tQ29kZVBvaW50O24obi5TK24uRiooISFhJiYxIT1hLmxlbmd0aCksXCJTdHJpbmdcIix7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbih0KXtmb3IodmFyIGUscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGgsYT0wO24+YTspe2lmKGU9K2FyZ3VtZW50c1thKytdLGkoZSwxMTE0MTExKSE9PWUpdGhyb3cgUmFuZ2VFcnJvcihlK1wiIGlzIG5vdCBhIHZhbGlkIGNvZGUgcG9pbnRcIik7ci5wdXNoKGU8NjU1MzY/byhlKTpvKCgoZS09NjU1MzYpPj4xMCkrNTUyOTYsZSUxMDI0KzU2MzIwKSl9cmV0dXJuIHIuam9pbihcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDEzNiksbz1cImluY2x1ZGVzXCI7bihuLlArbi5GKnIoMTIyKShvKSxcIlN0cmluZ1wiLHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4hIX5pKHRoaXMsdCxvKS5pbmRleE9mKHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJpdGFsaWNzXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcImlcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigxMzUpKCEwKTtyKDEyOCkoU3RyaW5nLFwiU3RyaW5nXCIsZnVuY3Rpb24odCl7dGhpcy5fdD1TdHJpbmcodCksdGhpcy5faT0wfSxmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5fdCxyPXRoaXMuX2k7cmV0dXJuIHI+PWUubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KHQ9bihlLHIpLHRoaXMuX2krPXQubGVuZ3RoLHt2YWx1ZTp0LGRvbmU6ITF9KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJsaW5rXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiB0KHRoaXMsXCJhXCIsXCJocmVmXCIsZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxNyksbz1yKDEwKTtuKG4uUyxcIlN0cmluZ1wiLHtyYXc6ZnVuY3Rpb24odCl7Zm9yKHZhciBlPWkodC5yYXcpLHI9byhlLmxlbmd0aCksbj1hcmd1bWVudHMubGVuZ3RoLGE9W10sZj0wO3I+ZjspYS5wdXNoKFN0cmluZyhlW2YrK10pKSxmPG4mJmEucHVzaChTdHJpbmcoYXJndW1lbnRzW2ZdKSk7cmV0dXJuIGEuam9pbihcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlAsXCJTdHJpbmdcIix7cmVwZWF0OnIoMTM3KX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzbWFsbFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzbWFsbFwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMCksbz1yKDEzNiksYT1cInN0YXJ0c1dpdGhcIixmPVwiXCJbYV07bihuLlArbi5GKnIoMTIyKShhKSxcIlN0cmluZ1wiLHtzdGFydHNXaXRoOmZ1bmN0aW9uKHQpe3ZhciBlPW8odGhpcyx0LGEpLHI9aShNYXRoLm1pbihhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCxlLmxlbmd0aCkpLG49U3RyaW5nKHQpO3JldHVybiBmP2YuY2FsbChlLG4scik6ZS5zbGljZShyLHIrbi5sZW5ndGgpPT09bn19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoMTYpKFwic3RyaWtlXCIsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHQodGhpcyxcInN0cmlrZVwiLFwiXCIsXCJcIil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDE2KShcInN1YlwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsXCJzdWJcIixcIlwiLFwiXCIpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7cigxNikoXCJzdXBcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLFwic3VwXCIsXCJcIixcIlwiKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbVwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMyl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDQpLGk9cigxMiksbz1yKDgpLGE9cigwKSxmPXIoMTUpLHM9cigzNikuS0VZLHU9cig1KSxoPXIoODcpLGM9cig1NyksZD1yKDQ4KSxsPXIoNykscD1yKDE4OSksYj1yKDE0MSksdj1yKDI4NikseT1yKDI4NSksbT1yKDEyNiksZz1yKDMpLHc9cigxNyksXz1yKDI5KSxNPXIoMzcpLFM9cig0MiksRT1yKDE4MSksQT1yKDIwKSxrPXIoOSkseD1yKDQ0KSxJPUEuZixCPWsuZixPPUUuZixSPW4uU3ltYm9sLFA9bi5KU09OLFQ9UCYmUC5zdHJpbmdpZnksaj1cInByb3RvdHlwZVwiLEM9bChcIl9oaWRkZW5cIiksTj1sKFwidG9QcmltaXRpdmVcIiksTD17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxVPWgoXCJzeW1ib2wtcmVnaXN0cnlcIiksej1oKFwic3ltYm9sc1wiKSxEPWgoXCJvcC1zeW1ib2xzXCIpLHE9T2JqZWN0W2pdLEY9XCJmdW5jdGlvblwiPT10eXBlb2YgUixLPW4uUU9iamVjdCxHPSFLfHwhS1tqXXx8IUtbal0uZmluZENoaWxkLFY9byYmdShmdW5jdGlvbigpe3JldHVybiA3IT1TKEIoe30sXCJhXCIse2dldDpmdW5jdGlvbigpe3JldHVybiBCKHRoaXMsXCJhXCIse3ZhbHVlOjd9KS5hfX0pKS5hfSk/ZnVuY3Rpb24odCxlLHIpe3ZhciBuPUkocSxlKTtuJiZkZWxldGUgcVtlXSxCKHQsZSxyKSxuJiZ0IT09cSYmQihxLGUsbil9OkIsSD1mdW5jdGlvbih0KXt2YXIgZT16W3RdPVMoUltqXSk7cmV0dXJuIGUuX2s9dCxlfSxYPUYmJlwic3ltYm9sXCI9PXR5cGVvZiBSLml0ZXJhdG9yP2Z1bmN0aW9uKHQpe3JldHVyblwic3ltYm9sXCI9PXR5cGVvZiB0fTpmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIFJ9LFk9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0PT09cSYmWShELGUsciksZyh0KSxlPV8oZSwhMCksZyhyKSxpKHosZSk/KHIuZW51bWVyYWJsZT8oaSh0LEMpJiZ0W0NdW2VdJiYodFtDXVtlXT0hMSkscj1TKHIse2VudW1lcmFibGU6TSgwLCExKX0pKTooaSh0LEMpfHxCKHQsQyxNKDEse30pKSx0W0NdW2VdPSEwKSxWKHQsZSxyKSk6Qih0LGUscil9LFc9ZnVuY3Rpb24odCxlKXtnKHQpO2Zvcih2YXIgcixuPXkoZT13KGUpKSxpPTAsbz1uLmxlbmd0aDtvPmk7KVkodCxyPW5baSsrXSxlW3JdKTtyZXR1cm4gdH0sWj1mdW5jdGlvbih0LGUpe3JldHVybiB2b2lkIDA9PT1lP1ModCk6VyhTKHQpLGUpfSxKPWZ1bmN0aW9uKHQpe3ZhciBlPUwuY2FsbCh0aGlzLHQ9Xyh0LCEwKSk7cmV0dXJuISh0aGlzPT09cSYmaSh6LHQpJiYhaShELHQpKSYmKCEoZXx8IWkodGhpcyx0KXx8IWkoeix0KXx8aSh0aGlzLEMpJiZ0aGlzW0NdW3RdKXx8ZSl9LCQ9ZnVuY3Rpb24odCxlKXtpZih0PXcodCksZT1fKGUsITApLHQhPT1xfHwhaSh6LGUpfHxpKEQsZSkpe3ZhciByPUkodCxlKTtyZXR1cm4hcnx8IWkoeixlKXx8aSh0LEMpJiZ0W0NdW2VdfHwoci5lbnVtZXJhYmxlPSEwKSxyfX0sUT1mdW5jdGlvbih0KXtmb3IodmFyIGUscj1PKHcodCkpLG49W10sbz0wO3IubGVuZ3RoPm87KWkoeixlPXJbbysrXSl8fGU9PUN8fGU9PXN8fG4ucHVzaChlKTtyZXR1cm4gbn0sdHQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHI9dD09PXEsbj1PKHI/RDp3KHQpKSxvPVtdLGE9MDtuLmxlbmd0aD5hOykhaSh6LGU9blthKytdKXx8ciYmIWkocSxlKXx8by5wdXNoKHpbZV0pO3JldHVybiBvfTtGfHwoUj1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBSKXRocm93IFR5cGVFcnJvcihcIlN5bWJvbCBpcyBub3QgYSBjb25zdHJ1Y3RvciFcIik7dmFyIHQ9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksZT1mdW5jdGlvbihyKXt0aGlzPT09cSYmZS5jYWxsKEQsciksaSh0aGlzLEMpJiZpKHRoaXNbQ10sdCkmJih0aGlzW0NdW3RdPSExKSxWKHRoaXMsdCxNKDEscikpfTtyZXR1cm4gbyYmRyYmVihxLHQse2NvbmZpZ3VyYWJsZTohMCxzZXQ6ZX0pLEgodCl9LGYoUltqXSxcInRvU3RyaW5nXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pLEEuZj0kLGsuZj1ZLHIoNDMpLmY9RS5mPVEscig2NikuZj1KLHIoODYpLmY9dHQsbyYmIXIoNDEpJiZmKHEsXCJwcm9wZXJ0eUlzRW51bWVyYWJsZVwiLEosITApLHAuZj1mdW5jdGlvbih0KXtyZXR1cm4gSChsKHQpKX0pLGEoYS5HK2EuVythLkYqIUYse1N5bWJvbDpSfSk7Zm9yKHZhciBldD1cImhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzXCIuc3BsaXQoXCIsXCIpLHJ0PTA7ZXQubGVuZ3RoPnJ0OylsKGV0W3J0KytdKTtmb3IodmFyIGV0PXgobC5zdG9yZSkscnQ9MDtldC5sZW5ndGg+cnQ7KWIoZXRbcnQrK10pO2EoYS5TK2EuRiohRixcIlN5bWJvbFwiLHtmb3I6ZnVuY3Rpb24odCl7cmV0dXJuIGkoVSx0Kz1cIlwiKT9VW3RdOlVbdF09Uih0KX0sa2V5Rm9yOmZ1bmN0aW9uKHQpe2lmKFgodCkpcmV0dXJuIHYoVSx0KTt0aHJvdyBUeXBlRXJyb3IodCtcIiBpcyBub3QgYSBzeW1ib2whXCIpfSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtHPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtHPSExfX0pLGEoYS5TK2EuRiohRixcIk9iamVjdFwiLHtjcmVhdGU6WixkZWZpbmVQcm9wZXJ0eTpZLGRlZmluZVByb3BlcnRpZXM6VyxnZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3I6JCxnZXRPd25Qcm9wZXJ0eU5hbWVzOlEsZ2V0T3duUHJvcGVydHlTeW1ib2xzOnR0fSksUCYmYShhLlMrYS5GKighRnx8dShmdW5jdGlvbigpe3ZhciB0PVIoKTtyZXR1cm5cIltudWxsXVwiIT1UKFt0XSl8fFwie31cIiE9VCh7YTp0fSl8fFwie31cIiE9VChPYmplY3QodCkpfSkpLFwiSlNPTlwiLHtzdHJpbmdpZnk6ZnVuY3Rpb24odCl7aWYodm9pZCAwIT09dCYmIVgodCkpe2Zvcih2YXIgZSxyLG49W3RdLGk9MTthcmd1bWVudHMubGVuZ3RoPmk7KW4ucHVzaChhcmd1bWVudHNbaSsrXSk7cmV0dXJuIGU9blsxXSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlJiYocj1lKSwhciYmbShlKXx8KGU9ZnVuY3Rpb24odCxlKXtpZihyJiYoZT1yLmNhbGwodGhpcyx0LGUpKSwhWChlKSlyZXR1cm4gZX0pLG5bMV09ZSxULmFwcGx5KFAsbil9fX0pLFJbal1bTl18fHIoMTQpKFJbal0sTixSW2pdLnZhbHVlT2YpLGMoUixcIlN5bWJvbFwiKSxjKE1hdGgsXCJNYXRoXCIsITApLGMobi5KU09OLFwiSlNPTlwiLCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDg4KSxvPXIoMTQwKSxhPXIoMyksZj1yKDQ3KSxzPXIoMTApLHU9cig2KSxoPXIoNCkuQXJyYXlCdWZmZXIsYz1yKDEzNCksZD1vLkFycmF5QnVmZmVyLGw9by5EYXRhVmlldyxwPWkuQUJWJiZoLmlzVmlldyxiPWQucHJvdG90eXBlLnNsaWNlLHY9aS5WSUVXLHk9XCJBcnJheUJ1ZmZlclwiO24obi5HK24uVytuLkYqKGghPT1kKSx7QXJyYXlCdWZmZXI6ZH0pLG4obi5TK24uRiohaS5DT05TVFIseSx7aXNWaWV3OmZ1bmN0aW9uKHQpe3JldHVybiBwJiZwKHQpfHx1KHQpJiZ2IGluIHR9fSksbihuLlArbi5VK24uRipyKDUpKGZ1bmN0aW9uKCl7cmV0dXJuIW5ldyBkKDIpLnNsaWNlKDEsdm9pZCAwKS5ieXRlTGVuZ3RofSkseSx7c2xpY2U6ZnVuY3Rpb24odCxlKXtpZih2b2lkIDAhPT1iJiZ2b2lkIDA9PT1lKXJldHVybiBiLmNhbGwoYSh0aGlzKSx0KTtmb3IodmFyIHI9YSh0aGlzKS5ieXRlTGVuZ3RoLG49Zih0LHIpLGk9Zih2b2lkIDA9PT1lP3I6ZSxyKSxvPW5ldyhjKHRoaXMsZCkpKHMoaS1uKSksdT1uZXcgbCh0aGlzKSxoPW5ldyBsKG8pLHA9MDtuPGk7KWguc2V0VWludDgocCsrLHUuZ2V0VWludDgobisrKSk7cmV0dXJuIG99fSkscig0NikoeSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5HK24uVytuLkYqIXIoODgpLkFCVix7RGF0YVZpZXc6cigxNDApLkRhdGFWaWV3fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkZsb2F0MzJcIiw0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkZsb2F0NjRcIiw4LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIkludDE2XCIsMixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJJbnQzMlwiLDQsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiSW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19KX0sZnVuY3Rpb24odCxlLHIpe3IoMzUpKFwiVWludDE2XCIsMixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50MzJcIiw0LGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQodGhpcyxlLHIsbil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtyKDM1KShcIlVpbnQ4XCIsMSxmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KHRoaXMsZSxyLG4pfX0pfSxmdW5jdGlvbih0LGUscil7cigzNSkoXCJVaW50OFwiLDEsZnVuY3Rpb24odCl7cmV0dXJuIGZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdCh0aGlzLGUscixuKX19LCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMTczKTtyKDc5KShcIldlYWtTZXRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19LHthZGQ6ZnVuY3Rpb24odCl7cmV0dXJuIG4uZGVmKHRoaXMsdCwhMCl9fSxuLCExLCEwKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDc4KSghMCk7bihuLlAsXCJBcnJheVwiLHtpbmNsdWRlczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTQpKFwiaW5jbHVkZXNcIil9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzEpKCksbz1yKDQpLnByb2Nlc3MsYT1cInByb2Nlc3NcIj09cigyMykobyk7bihuLkcse2FzYXA6ZnVuY3Rpb24odCl7dmFyIGU9YSYmby5kb21haW47aShlP2UuYmluZCh0KTp0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDIzKTtuKG4uUyxcIkVycm9yXCIse2lzRXJyb3I6ZnVuY3Rpb24odCl7cmV0dXJuXCJFcnJvclwiPT09aSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlArbi5SLFwiTWFwXCIse3RvSlNPTjpyKDE3MikoXCJNYXBcIil9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJNYXRoXCIse2lhZGRoOmZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXQ+Pj4wLG89ZT4+PjAsYT1yPj4+MDtyZXR1cm4gbysobj4+PjApKygoaSZhfChpfGEpJn4oaSthPj4+MCkpPj4+MzEpfDB9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5TLFwiTWF0aFwiLHtpbXVsaDpmdW5jdGlvbih0LGUpe3ZhciByPTY1NTM1LG49K3QsaT0rZSxvPW4mcixhPWkmcixmPW4+PjE2LHM9aT4+MTYsdT0oZiphPj4+MCkrKG8qYT4+PjE2KTtyZXR1cm4gZipzKyh1Pj4xNikrKChvKnM+Pj4wKSsodSZyKT4+MTYpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7aXN1Ymg6ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dD4+PjAsbz1lPj4+MCxhPXI+Pj4wO3JldHVybiBvLShuPj4+MCktKCh+aSZhfH4oaV5hKSZpLWE+Pj4wKT4+PjMxKXwwfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKTtuKG4uUyxcIk1hdGhcIix7dW11bGg6ZnVuY3Rpb24odCxlKXt2YXIgcj02NTUzNSxuPSt0LGk9K2Usbz1uJnIsYT1pJnIsZj1uPj4+MTYscz1pPj4+MTYsdT0oZiphPj4+MCkrKG8qYT4+PjE2KTtyZXR1cm4gZipzKyh1Pj4+MTYpKygobypzPj4+MCkrKHUmcik+Pj4xNil9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDEzKSxhPXIoOSk7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19kZWZpbmVHZXR0ZXJfXzpmdW5jdGlvbih0LGUpe2EuZihpKHRoaXMpLHQse2dldDpvKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMSksbz1yKDEzKSxhPXIoOSk7cig4KSYmbihuLlArcig4NSksXCJPYmplY3RcIix7X19kZWZpbmVTZXR0ZXJfXzpmdW5jdGlvbih0LGUpe2EuZihpKHRoaXMpLHQse3NldDpvKGUpLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxODMpKCEwKTtuKG4uUyxcIk9iamVjdFwiLHtlbnRyaWVzOmZ1bmN0aW9uKHQpe3JldHVybiBpKHQpfX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigwKSxpPXIoMTg0KSxvPXIoMTcpLGE9cigyMCksZj1yKDExOSk7bihuLlMsXCJPYmplY3RcIix7Z2V0T3duUHJvcGVydHlEZXNjcmlwdG9yczpmdW5jdGlvbih0KXtmb3IodmFyIGUscj1vKHQpLG49YS5mLHM9aShyKSx1PXt9LGg9MDtzLmxlbmd0aD5oOylmKHUsZT1zW2grK10sbihyLGUpKTtyZXR1cm4gdX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMjkpLGE9cigyMSksZj1yKDIwKS5mO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fbG9va3VwR2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUscj1pKHRoaXMpLG49byh0LCEwKTtkbyBpZihlPWYocixuKSlyZXR1cm4gZS5nZXQ7d2hpbGUocj1hKHIpKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDExKSxvPXIoMjkpLGE9cigyMSksZj1yKDIwKS5mO3IoOCkmJm4obi5QK3IoODUpLFwiT2JqZWN0XCIse19fbG9va3VwU2V0dGVyX186ZnVuY3Rpb24odCl7dmFyIGUscj1pKHRoaXMpLG49byh0LCEwKTtkbyBpZihlPWYocixuKSlyZXR1cm4gZS5zZXQ7d2hpbGUocj1hKHIpKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCksaT1yKDE4MykoITEpO24obi5TLFwiT2JqZWN0XCIse3ZhbHVlczpmdW5jdGlvbih0KXtyZXR1cm4gaSh0KX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDQpLG89cigzMiksYT1yKDEzMSkoKSxmPXIoNykoXCJvYnNlcnZhYmxlXCIpLHM9cigxMyksdT1yKDMpLGg9cig0MCksYz1yKDQ1KSxkPXIoMTQpLGw9cig1NSkscD1sLlJFVFVSTixiPWZ1bmN0aW9uKHQpe3JldHVybiBudWxsPT10P3ZvaWQgMDpzKHQpfSx2PWZ1bmN0aW9uKHQpe3ZhciBlPXQuX2M7ZSYmKHQuX2M9dm9pZCAwLGUoKSl9LHk9ZnVuY3Rpb24odCl7cmV0dXJuIHZvaWQgMD09PXQuX299LG09ZnVuY3Rpb24odCl7eSh0KXx8KHQuX289dm9pZCAwLHYodCkpfSxnPWZ1bmN0aW9uKHQsZSl7dSh0KSx0aGlzLl9jPXZvaWQgMCx0aGlzLl9vPXQsdD1uZXcgdyh0aGlzKTt0cnl7dmFyIHI9ZSh0KSxuPXI7bnVsbCE9ciYmKFwiZnVuY3Rpb25cIj09dHlwZW9mIHIudW5zdWJzY3JpYmU/cj1mdW5jdGlvbigpe24udW5zdWJzY3JpYmUoKX06cyhyKSx0aGlzLl9jPXIpfWNhdGNoKGUpe3JldHVybiB2b2lkIHQuZXJyb3IoZSl9eSh0aGlzKSYmdih0aGlzKX07Zy5wcm90b3R5cGU9Yyh7fSx7dW5zdWJzY3JpYmU6ZnVuY3Rpb24oKXttKHRoaXMpfX0pO3ZhciB3PWZ1bmN0aW9uKHQpe3RoaXMuX3M9dH07dy5wcm90b3R5cGU9Yyh7fSx7bmV4dDpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zO2lmKCF5KGUpKXt2YXIgcj1lLl9vO3RyeXt2YXIgbj1iKHIubmV4dCk7aWYobilyZXR1cm4gbi5jYWxsKHIsdCl9Y2F0Y2godCl7dHJ5e20oZSl9ZmluYWxseXt0aHJvdyB0fX19fSxlcnJvcjpmdW5jdGlvbih0KXt2YXIgZT10aGlzLl9zO2lmKHkoZSkpdGhyb3cgdDt2YXIgcj1lLl9vO2UuX289dm9pZCAwO3RyeXt2YXIgbj1iKHIuZXJyb3IpO2lmKCFuKXRocm93IHQ7dD1uLmNhbGwocix0KX1jYXRjaCh0KXt0cnl7dihlKX1maW5hbGx5e3Rocm93IHR9fXJldHVybiB2KGUpLHR9LGNvbXBsZXRlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3M7aWYoIXkoZSkpe3ZhciByPWUuX287ZS5fbz12b2lkIDA7dHJ5e3ZhciBuPWIoci5jb21wbGV0ZSk7dD1uP24uY2FsbChyLHQpOnZvaWQgMH1jYXRjaCh0KXt0cnl7dihlKX1maW5hbGx5e3Rocm93IHR9fXJldHVybiB2KGUpLHR9fX0pO3ZhciBfPWZ1bmN0aW9uKHQpe2godGhpcyxfLFwiT2JzZXJ2YWJsZVwiLFwiX2ZcIikuX2Y9cyh0KX07YyhfLnByb3RvdHlwZSx7c3Vic2NyaWJlOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZyh0LHRoaXMuX2YpfSxmb3JFYWNoOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIG5ldyhvLlByb21pc2V8fGkuUHJvbWlzZSkoZnVuY3Rpb24ocixuKXtzKHQpO3ZhciBpPWUuc3Vic2NyaWJlKHtuZXh0OmZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4gdChlKX1jYXRjaCh0KXtuKHQpLGkudW5zdWJzY3JpYmUoKX19LGVycm9yOm4sY29tcGxldGU6cn0pfSl9fSksYyhfLHtmcm9tOmZ1bmN0aW9uKHQpe3ZhciBlPVwiZnVuY3Rpb25cIj09dHlwZW9mIHRoaXM/dGhpczpfLHI9Yih1KHQpW2ZdKTtpZihyKXt2YXIgbj11KHIuY2FsbCh0KSk7cmV0dXJuIG4uY29uc3RydWN0b3I9PT1lP246bmV3IGUoZnVuY3Rpb24odCl7cmV0dXJuIG4uc3Vic2NyaWJlKHQpfSl9cmV0dXJuIG5ldyBlKGZ1bmN0aW9uKGUpe3ZhciByPSExO3JldHVybiBhKGZ1bmN0aW9uKCl7aWYoIXIpe3RyeXtpZihsKHQsITEsZnVuY3Rpb24odCl7aWYoZS5uZXh0KHQpLHIpcmV0dXJuIHB9KT09PXApcmV0dXJufWNhdGNoKHQpe2lmKHIpdGhyb3cgdDtyZXR1cm4gdm9pZCBlLmVycm9yKHQpfWUuY29tcGxldGUoKX19KSxmdW5jdGlvbigpe3I9ITB9fSl9LG9mOmZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT1hcmd1bWVudHMubGVuZ3RoLHI9QXJyYXkoZSk7dDxlOylyW3RdPWFyZ3VtZW50c1t0KytdO3JldHVybiBuZXcoXCJmdW5jdGlvblwiPT10eXBlb2YgdGhpcz90aGlzOl8pKGZ1bmN0aW9uKHQpe3ZhciBlPSExO3JldHVybiBhKGZ1bmN0aW9uKCl7aWYoIWUpe2Zvcih2YXIgbj0wO248ci5sZW5ndGg7KytuKWlmKHQubmV4dChyW25dKSxlKXJldHVybjt0LmNvbXBsZXRlKCl9fSksZnVuY3Rpb24oKXtlPSEwfX0pfX0pLGQoXy5wcm90b3R5cGUsZixmdW5jdGlvbigpe3JldHVybiB0aGlzfSksbihuLkcse09ic2VydmFibGU6X30pLHIoNDYpKFwiT2JzZXJ2YWJsZVwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5LGE9bi5zZXQ7bi5leHAoe2RlZmluZU1ldGFkYXRhOmZ1bmN0aW9uKHQsZSxyLG4pe2EodCxlLGkociksbyhuKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmtleSxhPW4ubWFwLGY9bi5zdG9yZTtuLmV4cCh7ZGVsZXRlTWV0YWRhdGE6ZnVuY3Rpb24odCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOm8oYXJndW1lbnRzWzJdKSxuPWEoaShlKSxyLCExKTtpZih2b2lkIDA9PT1ufHwhbi5kZWxldGUodCkpcmV0dXJuITE7aWYobi5zaXplKXJldHVybiEwO3ZhciBzPWYuZ2V0KGUpO3JldHVybiBzLmRlbGV0ZShyKSwhIXMuc2l6ZXx8Zi5kZWxldGUoZSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5MiksaT1yKDE2OCksbz1yKDM0KSxhPXIoMyksZj1yKDIxKSxzPW8ua2V5cyx1PW8ua2V5LGg9ZnVuY3Rpb24odCxlKXt2YXIgcj1zKHQsZSksbz1mKHQpO2lmKG51bGw9PT1vKXJldHVybiByO3ZhciBhPWgobyxlKTtyZXR1cm4gYS5sZW5ndGg/ci5sZW5ndGg/aShuZXcgbihyLmNvbmNhdChhKSkpOmE6cn07by5leHAoe2dldE1ldGFkYXRhS2V5czpmdW5jdGlvbih0KXtyZXR1cm4gaChhKHQpLGFyZ3VtZW50cy5sZW5ndGg8Mj92b2lkIDA6dShhcmd1bWVudHNbMV0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPXIoMjEpLGE9bi5oYXMsZj1uLmdldCxzPW4ua2V5LHU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPWEodCxlLHIpO2lmKG4pcmV0dXJuIGYodCxlLHIpO3ZhciBpPW8oZSk7cmV0dXJuIG51bGwhPT1pP3UodCxpLHIpOnZvaWQgMH07bi5leHAoe2dldE1ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIHUodCxpKGUpLGFyZ3VtZW50cy5sZW5ndGg8Mz92b2lkIDA6cyhhcmd1bWVudHNbMl0pKX19KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMzQpLGk9cigzKSxvPW4ua2V5cyxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YUtleXM6ZnVuY3Rpb24odCl7cmV0dXJuIG8oaSh0KSxhcmd1bWVudHMubGVuZ3RoPDI/dm9pZCAwOmEoYXJndW1lbnRzWzFdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmdldCxhPW4ua2V5O24uZXhwKHtnZXRPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBvKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1yKDIxKSxhPW4uaGFzLGY9bi5rZXkscz1mdW5jdGlvbih0LGUscil7dmFyIG49YSh0LGUscik7aWYobilyZXR1cm4hMDt2YXIgaT1vKGUpO3JldHVybiBudWxsIT09aSYmcyh0LGkscil9O24uZXhwKHtoYXNNZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBzKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmYoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1uLmhhcyxhPW4ua2V5O24uZXhwKHtoYXNPd25NZXRhZGF0YTpmdW5jdGlvbih0LGUpe3JldHVybiBvKHQsaShlKSxhcmd1bWVudHMubGVuZ3RoPDM/dm9pZCAwOmEoYXJndW1lbnRzWzJdKSl9fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDM0KSxpPXIoMyksbz1yKDEzKSxhPW4ua2V5LGY9bi5zZXQ7bi5leHAoe21ldGFkYXRhOmZ1bmN0aW9uKHQsZSl7cmV0dXJuIGZ1bmN0aW9uKHIsbil7Zih0LGUsKHZvaWQgMCE9PW4/aTpvKShyKSxhKG4pKX19fSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApO24obi5QK24uUixcIlNldFwiLHt0b0pTT046cigxNzIpKFwiU2V0XCIpfSl9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjt2YXIgbj1yKDApLGk9cigxMzUpKCEwKTtuKG4uUCxcIlN0cmluZ1wiLHthdDpmdW5jdGlvbih0KXtyZXR1cm4gaSh0aGlzLHQpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMjQpLG89cigxMCksYT1yKDgzKSxmPXIoODEpLHM9UmVnRXhwLnByb3RvdHlwZSx1PWZ1bmN0aW9uKHQsZSl7dGhpcy5fcj10LHRoaXMuX3M9ZX07cigxMjcpKHUsXCJSZWdFeHAgU3RyaW5nXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9yLmV4ZWModGhpcy5fcyk7cmV0dXJue3ZhbHVlOnQsZG9uZTpudWxsPT09dH19KSxuKG4uUCxcIlN0cmluZ1wiLHttYXRjaEFsbDpmdW5jdGlvbih0KXtpZihpKHRoaXMpLCFhKHQpKXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIHJlZ2V4cCFcIik7dmFyIGU9U3RyaW5nKHRoaXMpLHI9XCJmbGFnc1wiaW4gcz9TdHJpbmcodC5mbGFncyk6Zi5jYWxsKHQpLG49bmV3IFJlZ0V4cCh0LnNvdXJjZSx+ci5pbmRleE9mKFwiZ1wiKT9yOlwiZ1wiK3IpO3JldHVybiBuLmxhc3RJbmRleD1vKHQubGFzdEluZGV4KSxuZXcgdShuLGUpfX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7dmFyIG49cigwKSxpPXIoMTg4KTtuKG4uUCxcIlN0cmluZ1wiLHtwYWRFbmQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCExKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3ZhciBuPXIoMCksaT1yKDE4OCk7bihuLlAsXCJTdHJpbmdcIix7cGFkU3RhcnQ6ZnVuY3Rpb24odCl7cmV0dXJuIGkodGhpcyx0LGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCEwKX19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO3IoNTgpKFwidHJpbUxlZnRcIixmdW5jdGlvbih0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCh0aGlzLDEpfX0sXCJ0cmltU3RhcnRcIil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtyKDU4KShcInRyaW1SaWdodFwiLGZ1bmN0aW9uKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB0KHRoaXMsMil9fSxcInRyaW1FbmRcIil9LGZ1bmN0aW9uKHQsZSxyKXtyKDE0MSkoXCJhc3luY0l0ZXJhdG9yXCIpfSxmdW5jdGlvbih0LGUscil7cigxNDEpKFwib2JzZXJ2YWJsZVwiKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMCk7bihuLlMsXCJTeXN0ZW1cIix7Z2xvYmFsOnIoNCl9KX0sZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj1yKDE0MyksaT1yKDE1KSxvPXIoNCksYT1yKDE0KSxmPXIoNTYpLHM9cig3KSx1PXMoXCJpdGVyYXRvclwiKSxoPXMoXCJ0b1N0cmluZ1RhZ1wiKSxjPWYuQXJyYXksZD1bXCJOb2RlTGlzdFwiLFwiRE9NVG9rZW5MaXN0XCIsXCJNZWRpYUxpc3RcIixcIlN0eWxlU2hlZXRMaXN0XCIsXCJDU1NSdWxlTGlzdFwiXSxsPTA7bDw1O2wrKyl7dmFyIHAsYj1kW2xdLHY9b1tiXSx5PXYmJnYucHJvdG90eXBlO2lmKHkpe3lbdV18fGEoeSx1LGMpLHlbaF18fGEoeSxoLGIpLGZbYl09Yztmb3IocCBpbiBuKXlbcF18fGkoeSxwLG5bcF0sITApfX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDApLGk9cigxMzkpO24obi5HK24uQix7c2V0SW1tZWRpYXRlOmkuc2V0LGNsZWFySW1tZWRpYXRlOmkuY2xlYXJ9KX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNCksaT1yKDApLG89cig4MiksYT1yKDI4NyksZj1uLm5hdmlnYXRvcixzPSEhZiYmL01TSUUgLlxcLi8udGVzdChmLnVzZXJBZ2VudCksdT1mdW5jdGlvbih0KXtyZXR1cm4gcz9mdW5jdGlvbihlLHIpe3JldHVybiB0KG8oYSxbXS5zbGljZS5jYWxsKGFyZ3VtZW50cywyKSxcImZ1bmN0aW9uXCI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSkpLHIpfTp0fTtpKGkuRytpLkIraS5GKnMse3NldFRpbWVvdXQ6dShuLnNldFRpbWVvdXQpLHNldEludGVydmFsOnUobi5zZXRJbnRlcnZhbCl9KX0sZnVuY3Rpb24odCxlLHIpe3IoNDEwKSxyKDM0OSkscigzNTEpLHIoMzUwKSxyKDM1MykscigzNTUpLHIoMzYwKSxyKDM1NCkscigzNTIpLHIoMzYyKSxyKDM2MSkscigzNTcpLHIoMzU4KSxyKDM1NikscigzNDgpLHIoMzU5KSxyKDM2MykscigzNjQpLHIoMzE2KSxyKDMxOCkscigzMTcpLHIoMzY2KSxyKDM2NSkscigzMzYpLHIoMzQ2KSxyKDM0NykscigzMzcpLHIoMzM4KSxyKDMzOSkscigzNDApLHIoMzQxKSxyKDM0MikscigzNDMpLHIoMzQ0KSxyKDM0NSkscigzMTkpLHIoMzIwKSxyKDMyMSkscigzMjIpLHIoMzIzKSxyKDMyNCkscigzMjUpLHIoMzI2KSxyKDMyNykscigzMjgpLHIoMzI5KSxyKDMzMCkscigzMzEpLHIoMzMyKSxyKDMzMykscigzMzQpLHIoMzM1KSxyKDM5Nykscig0MDIpLHIoNDA5KSxyKDQwMCkscigzOTIpLHIoMzkzKSxyKDM5OCkscig0MDMpLHIoNDA1KSxyKDM4OCkscigzODkpLHIoMzkwKSxyKDM5MSkscigzOTQpLHIoMzk1KSxyKDM5NikscigzOTkpLHIoNDAxKSxyKDQwNCkscig0MDYpLHIoNDA3KSxyKDQwOCkscigzMTEpLHIoMzEzKSxyKDMxMikscigzMTUpLHIoMzE0KSxyKDMwMCkscigyOTgpLHIoMzA0KSxyKDMwMSkscigzMDcpLHIoMzA5KSxyKDI5NykscigzMDMpLHIoMjk0KSxyKDMwOCkscigyOTIpLHIoMzA2KSxyKDMwNSkscigyOTkpLHIoMzAyKSxyKDI5MSkscigyOTMpLHIoMjk2KSxyKDI5NSkscigzMTApLHIoMTQzKSxyKDM4MikscigzODcpLHIoMTkxKSxyKDM4MykscigzODQpLHIoMzg1KSxyKDM4NikscigzNjcpLHIoMTkwKSxyKDE5MikscigxOTMpLHIoNDIyKSxyKDQxMSkscig0MTIpLHIoNDE3KSxyKDQyMCkscig0MjEpLHIoNDE1KSxyKDQxOCkscig0MTYpLHIoNDE5KSxyKDQxMykscig0MTQpLHIoMzY4KSxyKDM2OSkscigzNzApLHIoMzcxKSxyKDM3MikscigzNzUpLHIoMzczKSxyKDM3NCkscigzNzYpLHIoMzc3KSxyKDM3OCkscigzNzkpLHIoMzgxKSxyKDM4MCkscig0MjMpLHIoNDQ5KSxyKDQ1Mikscig0NTEpLHIoNDUzKSxyKDQ1NCkscig0NTApLHIoNDU1KSxyKDQ1Nikscig0MzQpLHIoNDM3KSxyKDQzMykscig0MzEpLHIoNDMyKSxyKDQzNSkscig0MzYpLHIoNDI2KSxyKDQ0OCkscig0NTcpLHIoNDI1KSxyKDQyNykscig0MjkpLHIoNDI4KSxyKDQzMCkscig0MzkpLHIoNDQwKSxyKDQ0Mikscig0NDEpLHIoNDQ0KSxyKDQ0Mykscig0NDUpLHIoNDQ2KSxyKDQ0Nykscig0MjQpLHIoNDM4KSxyKDQ2MCkscig0NTkpLHIoNDU4KSx0LmV4cG9ydHM9cigzMil9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cig0NjMpKFwiZWQyNTUxOVwiKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuLGkpe2Z1bmN0aW9uIG8odCl7XCJzdHJpbmdcIj09dHlwZW9mIHQ/dD17YmluZGluZ3M6dH06dHx8KHQ9e30pLHQuX19wcm90b19fPWMsdC5tb2R1bGVfcm9vdHx8KHQubW9kdWxlX3Jvb3Q9ZS5nZXRSb290KGUuZ2V0RmlsZU5hbWUoKSkpLFwiLm5vZGVcIiE9Zi5leHRuYW1lKHQuYmluZGluZ3MpJiYodC5iaW5kaW5ncys9XCIubm9kZVwiKTtmb3IodmFyIHIsbixpLG89W10sYT0wLHU9dC50cnkubGVuZ3RoO2E8dTthKyspe3I9cy5hcHBseShudWxsLHQudHJ5W2FdLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXXx8ZX0pKSxvLnB1c2gocik7dHJ5e3JldHVybiBuPXQucGF0aD8hZnVuY3Rpb24oKXt2YXIgdD1uZXcgRXJyb3IoJ0Nhbm5vdCBmaW5kIG1vZHVsZSBcIi5cIicpO3Rocm93IHQuY29kZT1cIk1PRFVMRV9OT1RfRk9VTkRcIix0fSgpOiFmdW5jdGlvbigpe3ZhciB0PW5ldyBFcnJvcignQ2Fubm90IGZpbmQgbW9kdWxlIFwiLlwiJyk7dGhyb3cgdC5jb2RlPVwiTU9EVUxFX05PVF9GT1VORFwiLHR9KCksdC5wYXRofHwobi5wYXRoPXIpLG59Y2F0Y2godCl7aWYoIS9ub3QgZmluZC9pLnRlc3QodC5tZXNzYWdlKSl0aHJvdyB0fX10aHJvdyBpPW5ldyBFcnJvcihcIkNvdWxkIG5vdCBsb2NhdGUgdGhlIGJpbmRpbmdzIGZpbGUuIFRyaWVkOlxcblwiK28ubWFwKGZ1bmN0aW9uKGUpe3JldHVybiB0LmFycm93K2V9KS5qb2luKFwiXFxuXCIpKSxpLnRyaWVzPW8saX12YXIgYT1yKDQ4OSksZj1yKDU5NCkscz1mLmpvaW4sdT1mLmRpcm5hbWUsaD1hLmV4aXN0c1N5bmN8fGYuZXhpc3RzU3luYyxjPXthcnJvdzpuLmVudi5OT0RFX0JJTkRJTkdTX0FSUk9XfHxcIiDihpIgXCIsY29tcGlsZWQ6bi5lbnYuTk9ERV9CSU5ESU5HU19DT01QSUxFRF9ESVJ8fFwiY29tcGlsZWRcIixwbGF0Zm9ybTpuLnBsYXRmb3JtLGFyY2g6bi5hcmNoLHZlcnNpb246bi52ZXJzaW9ucy5ub2RlLGJpbmRpbmdzOlwiYmluZGluZ3Mubm9kZVwiLHRyeTpbW1wibW9kdWxlX3Jvb3RcIixcImJ1aWxkXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcIkRlYnVnXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJvdXRcIixcIkRlYnVnXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiRGVidWdcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJvdXRcIixcIlJlbGVhc2VcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJSZWxlYXNlXCIsXCJiaW5kaW5nc1wiXSxbXCJtb2R1bGVfcm9vdFwiLFwiYnVpbGRcIixcImRlZmF1bHRcIixcImJpbmRpbmdzXCJdLFtcIm1vZHVsZV9yb290XCIsXCJjb21waWxlZFwiLFwidmVyc2lvblwiLFwicGxhdGZvcm1cIixcImFyY2hcIixcImJpbmRpbmdzXCJdXX07dC5leHBvcnRzPWU9byxlLmdldEZpbGVOYW1lPWZ1bmN0aW9uKHQpe3ZhciBlLHI9RXJyb3IucHJlcGFyZVN0YWNrVHJhY2Usbj1FcnJvci5zdGFja1RyYWNlTGltaXQsbz17fTtyZXR1cm4gRXJyb3Iuc3RhY2tUcmFjZUxpbWl0PTEwLEVycm9yLnByZXBhcmVTdGFja1RyYWNlPWZ1bmN0aW9uKHIsbil7Zm9yKHZhciBvPTAsYT1uLmxlbmd0aDtvPGE7bysrKWlmKGU9bltvXS5nZXRGaWxlTmFtZSgpLGUhPT1pKXtpZighdClyZXR1cm47aWYoZSE9PXQpcmV0dXJufX0sRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobyksby5zdGFjayxFcnJvci5wcmVwYXJlU3RhY2tUcmFjZT1yLEVycm9yLnN0YWNrVHJhY2VMaW1pdD1uLGV9LGUuZ2V0Um9vdD1mdW5jdGlvbih0KXtmb3IodmFyIGUscj11KHQpOzspe2lmKFwiLlwiPT09ciYmKHI9bi5jd2QoKSksaChzKHIsXCJwYWNrYWdlLmpzb25cIikpfHxoKHMocixcIm5vZGVfbW9kdWxlc1wiKSkpcmV0dXJuIHI7aWYoZT09PXIpdGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBtb2R1bGUgcm9vdCBnaXZlbiBmaWxlOiBcIicrdCsnXCIuIERvIHlvdSBoYXZlIGEgYHBhY2thZ2UuanNvbmAgZmlsZT8gJyk7ZT1yLHI9cyhyLFwiLi5cIil9fX0pLmNhbGwoZSxyKDI2KSxcIi9pbmRleC5qc1wiKX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e09fUkRPTkxZOjAsT19XUk9OTFk6MSxPX1JEV1I6MixTX0lGTVQ6NjE0NDAsU19JRlJFRzozMjc2OCxTX0lGRElSOjE2Mzg0LFNfSUZDSFI6ODE5MixTX0lGQkxLOjI0NTc2LFNfSUZJRk86NDA5NixTX0lGTE5LOjQwOTYwLFNfSUZTT0NLOjQ5MTUyLE9fQ1JFQVQ6NTEyLE9fRVhDTDoyMDQ4LE9fTk9DVFRZOjEzMTA3MixPX1RSVU5DOjEwMjQsT19BUFBFTkQ6OCxPX0RJUkVDVE9SWToxMDQ4NTc2LE9fTk9GT0xMT1c6MjU2LE9fU1lOQzoxMjgsT19TWU1MSU5LOjIwOTcxNTIsT19OT05CTE9DSzo0LFNfSVJXWFU6NDQ4LFNfSVJVU1I6MjU2LFNfSVdVU1I6MTI4LFNfSVhVU1I6NjQsU19JUldYRzo1NixTX0lSR1JQOjMyLFNfSVdHUlA6MTYsU19JWEdSUDo4LFNfSVJXWE86NyxTX0lST1RIOjQsU19JV09USDoyLFNfSVhPVEg6MSxFMkJJRzo3LEVBQ0NFUzoxMyxFQUREUklOVVNFOjQ4LEVBRERSTk9UQVZBSUw6NDksRUFGTk9TVVBQT1JUOjQ3LEVBR0FJTjozNSxFQUxSRUFEWTozNyxFQkFERjo5LEVCQURNU0c6OTQsRUJVU1k6MTYsRUNBTkNFTEVEOjg5LEVDSElMRDoxMCxFQ09OTkFCT1JURUQ6NTMsRUNPTk5SRUZVU0VEOjYxLEVDT05OUkVTRVQ6NTQsRURFQURMSzoxMSxFREVTVEFERFJSRVE6MzksRURPTTozMyxFRFFVT1Q6NjksRUVYSVNUOjE3LEVGQVVMVDoxNCxFRkJJRzoyNyxFSE9TVFVOUkVBQ0g6NjUsRUlEUk06OTAsRUlMU0VROjkyLEVJTlBST0dSRVNTOjM2LEVJTlRSOjQsRUlOVkFMOjIyLEVJTzo1LEVJU0NPTk46NTYsRUlTRElSOjIxLEVMT09QOjYyLEVNRklMRToyNCxFTUxJTks6MzEsRU1TR1NJWkU6NDAsRU1VTFRJSE9QOjk1LEVOQU1FVE9PTE9ORzo2MyxFTkVURE9XTjo1MCxFTkVUUkVTRVQ6NTIsRU5FVFVOUkVBQ0g6NTEsRU5GSUxFOjIzLEVOT0JVRlM6NTUsRU5PREFUQTo5NixFTk9ERVY6MTksRU5PRU5UOjIsRU5PRVhFQzo4LEVOT0xDSzo3NyxFTk9MSU5LOjk3LEVOT01FTToxMixFTk9NU0c6OTEsRU5PUFJPVE9PUFQ6NDIsRU5PU1BDOjI4LEVOT1NSOjk4LEVOT1NUUjo5OSxFTk9TWVM6NzgsRU5PVENPTk46NTcsRU5PVERJUjoyMCxFTk9URU1QVFk6NjYsRU5PVFNPQ0s6MzgsRU5PVFNVUDo0NSxFTk9UVFk6MjUsRU5YSU86NixFT1BOT1RTVVBQOjEwMixFT1ZFUkZMT1c6ODQsRVBFUk06MSxFUElQRTozMixFUFJPVE86MTAwLEVQUk9UT05PU1VQUE9SVDo0MyxFUFJPVE9UWVBFOjQxLEVSQU5HRTozNCxFUk9GUzozMCxFU1BJUEU6MjksRVNSQ0g6MyxFU1RBTEU6NzAsRVRJTUU6MTAxLEVUSU1FRE9VVDo2MCxFVFhUQlNZOjI2LEVXT1VMREJMT0NLOjM1LEVYREVWOjE4LFNJR0hVUDoxLFNJR0lOVDoyLFNJR1FVSVQ6MyxTSUdJTEw6NCxTSUdUUkFQOjUsU0lHQUJSVDo2LFNJR0lPVDo2LFNJR0JVUzoxMCxTSUdGUEU6OCxTSUdLSUxMOjksU0lHVVNSMTozMCxTSUdTRUdWOjExLFNJR1VTUjI6MzEsU0lHUElQRToxMyxTSUdBTFJNOjE0LFNJR1RFUk06MTUsU0lHQ0hMRDoyMCxTSUdDT05UOjE5LFNJR1NUT1A6MTcsU0lHVFNUUDoxOCxTSUdUVElOOjIxLFNJR1RUT1U6MjIsU0lHVVJHOjE2LFNJR1hDUFU6MjQsU0lHWEZTWjoyNSxTSUdWVEFMUk06MjYsU0lHUFJPRjoyNyxTSUdXSU5DSDoyOCxTSUdJTzoyMyxTSUdTWVM6MTIsU1NMX09QX0FMTDoyMTQ3NDg2NzE5LFNTTF9PUF9BTExPV19VTlNBRkVfTEVHQUNZX1JFTkVHT1RJQVRJT046MjYyMTQ0LFNTTF9PUF9DSVBIRVJfU0VSVkVSX1BSRUZFUkVOQ0U6NDE5NDMwNCxTU0xfT1BfQ0lTQ09fQU5ZQ09OTkVDVDozMjc2OCxTU0xfT1BfQ09PS0lFX0VYQ0hBTkdFOjgxOTIsU1NMX09QX0NSWVBUT1BST19UTFNFWFRfQlVHOjIxNDc0ODM2NDgsU1NMX09QX0RPTlRfSU5TRVJUX0VNUFRZX0ZSQUdNRU5UUzoyMDQ4LFNTTF9PUF9FUEhFTUVSQUxfUlNBOjAsU1NMX09QX0xFR0FDWV9TRVJWRVJfQ09OTkVDVDo0LFNTTF9PUF9NSUNST1NPRlRfQklHX1NTTFYzX0JVRkZFUjozMixTU0xfT1BfTUlDUk9TT0ZUX1NFU1NfSURfQlVHOjEsU1NMX09QX01TSUVfU1NMVjJfUlNBX1BBRERJTkc6MCxTU0xfT1BfTkVUU0NBUEVfQ0FfRE5fQlVHOjUzNjg3MDkxMixTU0xfT1BfTkVUU0NBUEVfQ0hBTExFTkdFX0JVRzoyLFNTTF9PUF9ORVRTQ0FQRV9ERU1PX0NJUEhFUl9DSEFOR0VfQlVHOjEwNzM3NDE4MjQsU1NMX09QX05FVFNDQVBFX1JFVVNFX0NJUEhFUl9DSEFOR0VfQlVHOjgsU1NMX09QX05PX0NPTVBSRVNTSU9OOjEzMTA3MixTU0xfT1BfTk9fUVVFUllfTVRVOjQwOTYsU1NMX09QX05PX1NFU1NJT05fUkVTVU1QVElPTl9PTl9SRU5FR09USUFUSU9OOjY1NTM2LFNTTF9PUF9OT19TU0x2MjoxNjc3NzIxNixTU0xfT1BfTk9fU1NMdjM6MzM1NTQ0MzIsU1NMX09QX05PX1RJQ0tFVDoxNjM4NCxTU0xfT1BfTk9fVExTdjE6NjcxMDg4NjQsU1NMX09QX05PX1RMU3YxXzE6MjY4NDM1NDU2LFNTTF9PUF9OT19UTFN2MV8yOjEzNDIxNzcyOCxTU0xfT1BfUEtDUzFfQ0hFQ0tfMTowLFNTTF9PUF9QS0NTMV9DSEVDS18yOjAsU1NMX09QX1NJTkdMRV9ESF9VU0U6MTA0ODU3NixTU0xfT1BfU0lOR0xFX0VDREhfVVNFOjUyNDI4OCxTU0xfT1BfU1NMRUFZXzA4MF9DTElFTlRfREhfQlVHOjEyOCxTU0xfT1BfU1NMUkVGMl9SRVVTRV9DRVJUX1RZUEVfQlVHOjAsU1NMX09QX1RMU19CTE9DS19QQURESU5HX0JVRzo1MTIsU1NMX09QX1RMU19ENV9CVUc6MjU2LFNTTF9PUF9UTFNfUk9MTEJBQ0tfQlVHOjgzODg2MDgsRU5HSU5FX01FVEhPRF9EU0E6MixFTkdJTkVfTUVUSE9EX0RIOjQsRU5HSU5FX01FVEhPRF9SQU5EOjgsRU5HSU5FX01FVEhPRF9FQ0RIOjE2LEVOR0lORV9NRVRIT0RfRUNEU0E6MzIsRU5HSU5FX01FVEhPRF9DSVBIRVJTOjY0LEVOR0lORV9NRVRIT0RfRElHRVNUUzoxMjgsRU5HSU5FX01FVEhPRF9TVE9SRToyNTYsRU5HSU5FX01FVEhPRF9QS0VZX01FVEhTOjUxMixFTkdJTkVfTUVUSE9EX1BLRVlfQVNOMV9NRVRIUzoxMDI0LEVOR0lORV9NRVRIT0RfQUxMOjY1NTM1LEVOR0lORV9NRVRIT0RfTk9ORTowLERIX0NIRUNLX1BfTk9UX1NBRkVfUFJJTUU6MixESF9DSEVDS19QX05PVF9QUklNRToxLERIX1VOQUJMRV9UT19DSEVDS19HRU5FUkFUT1I6NCxESF9OT1RfU1VJVEFCTEVfR0VORVJBVE9SOjgsTlBOX0VOQUJMRUQ6MSxSU0FfUEtDUzFfUEFERElORzoxLFJTQV9TU0xWMjNfUEFERElORzoyLFJTQV9OT19QQURESU5HOjMsUlNBX1BLQ1MxX09BRVBfUEFERElORzo0LFJTQV9YOTMxX1BBRERJTkc6NSxSU0FfUEtDUzFfUFNTX1BBRERJTkc6NixQT0lOVF9DT05WRVJTSU9OX0NPTVBSRVNTRUQ6MixQT0lOVF9DT05WRVJTSU9OX1VOQ09NUFJFU1NFRDo0LFBPSU5UX0NPTlZFUlNJT05fSFlCUklEOjYsRl9PSzowLFJfT0s6NCxXX09LOjIsWF9PSzoxLFVWX1VEUF9SRVVTRUFERFI6NH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuYW1lOlwiZWxsaXB0aWNcIix2ZXJzaW9uOlwiNi4zLjJcIixkZXNjcmlwdGlvbjpcIkVDIGNyeXB0b2dyYXBoeVwiLG1haW46XCJsaWIvZWxsaXB0aWMuanNcIixmaWxlczpbXCJsaWJcIl0sc2NyaXB0czp7anNjczpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixqc2hpbnQ6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsbGludDpcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLHVuaXQ6XCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLHRlc3Q6XCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsdmVyc2lvbjpcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wifSxyZXBvc2l0b3J5Ont0eXBlOlwiZ2l0XCIsdXJsOlwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0XCJ9LGtleXdvcmRzOltcIkVDXCIsXCJFbGxpcHRpY1wiLFwiY3VydmVcIixcIkNyeXB0b2dyYXBoeVwiXSxhdXRob3I6e25hbWU6XCJGZWRvciBJbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxsaWNlbnNlOlwiTUlUXCIsYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGhvbWVwYWdlOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixkZXZEZXBlbmRlbmNpZXM6e2JyZnM6XCJeMS40LjNcIixjb3ZlcmFsbHM6XCJeMi4xMS4zXCIsZ3J1bnQ6XCJeMC40LjVcIixcImdydW50LWJyb3dzZXJpZnlcIjpcIl41LjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItY29weVwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLXVnbGlmeVwiOlwiXjEuMC4xXCIsXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOlwiXjMuMC4xXCIsXCJncnVudC1zYXVjZWxhYnNcIjpcIl44LjYuMlwiLGlzdGFuYnVsOlwiXjAuNC4yXCIsanNjczpcIl4yLjkuMFwiLGpzaGludDpcIl4yLjYuMFwiLG1vY2hhOlwiXjIuMS4wXCJ9LGRlcGVuZGVuY2llczp7XCJibi5qc1wiOlwiXjQuNC4wXCIsYnJvcmFuZDpcIl4xLjAuMVwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsaW5oZXJpdHM6XCJeMi4wLjFcIn0sZ2l0SGVhZDpcImNiYWNlNDY4M2E0YTU0OGRjMDMwNmVmMzY3NTYxNTFhMjAyOTljZDVcIixfaWQ6XCJlbGxpcHRpY0A2LjMuMlwiLF9zaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsX2Zyb206XCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLF9ucG1WZXJzaW9uOlwiMy4xMC4zXCIsX25vZGVWZXJzaW9uOlwiNi4zLjBcIixfbnBtVXNlcjp7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGRpc3Q6e3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIix0YXJiYWxsOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn0sbWFpbnRhaW5lcnM6W3tuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn1dLF9ucG1PcGVyYXRpb25hbEludGVybmFsOntob3N0OlwicGFja2FnZXMtMTYtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb21cIix0bXA6XCJ0bXAvZWxsaXB0aWMtNi4zLjIudGd6XzE0NzM5Mzg4MzcyMDVfMC4zMTA4OTAzNDYyOTk4NTY5XCJ9LGRpcmVjdG9yaWVzOnt9LF9yZXNvbHZlZDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17XCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4xXCI6XCJhZXMtMTI4LWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMlwiOlwiYWVzLTEyOC1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjNcIjpcImFlcy0xMjgtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40XCI6XCJhZXMtMTI4LWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjFcIjpcImFlcy0xOTItZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yMlwiOlwiYWVzLTE5Mi1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIzXCI6XCJhZXMtMTkyLW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjRcIjpcImFlcy0xOTItY2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MVwiOlwiYWVzLTI1Ni1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQyXCI6XCJhZXMtMjU2LWNiY1wiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDNcIjpcImFlcy0yNTYtb2ZiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40NFwiOlwiYWVzLTI1Ni1jZmJcIn19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtuYW1lOlwiZWxsaXB0aWNcIix2ZXJzaW9uOlwiNi4zLjJcIixkZXNjcmlwdGlvbjpcIkVDIGNyeXB0b2dyYXBoeVwiLG1haW46XCJsaWIvZWxsaXB0aWMuanNcIixmaWxlczpbXCJsaWJcIl0sc2NyaXB0czp7anNjczpcImpzY3MgYmVuY2htYXJrcy8qLmpzIGxpYi8qLmpzIGxpYi8qKi8qLmpzIGxpYi8qKi8qKi8qLmpzIHRlc3QvaW5kZXguanNcIixqc2hpbnQ6XCJqc2NzIGJlbmNobWFya3MvKi5qcyBsaWIvKi5qcyBsaWIvKiovKi5qcyBsaWIvKiovKiovKi5qcyB0ZXN0L2luZGV4LmpzXCIsbGludDpcIm5wbSBydW4ganNjcyAmJiBucG0gcnVuIGpzaGludFwiLHVuaXQ6XCJpc3RhbmJ1bCB0ZXN0IF9tb2NoYSAtLXJlcG9ydGVyPXNwZWMgdGVzdC9pbmRleC5qc1wiLHRlc3Q6XCJucG0gcnVuIGxpbnQgJiYgbnBtIHJ1biB1bml0XCIsdmVyc2lvbjpcImdydW50IGRpc3QgJiYgZ2l0IGFkZCBkaXN0L1wifSxyZXBvc2l0b3J5Ont0eXBlOlwiZ2l0XCIsdXJsOlwiZ2l0K3NzaDovL2dpdEBnaXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMuZ2l0XCJ9LGtleXdvcmRzOltcIkVDXCIsXCJFbGxpcHRpY1wiLFwiY3VydmVcIixcIkNyeXB0b2dyYXBoeVwiXSxhdXRob3I6e25hbWU6XCJGZWRvciBJbmR1dG55XCIsZW1haWw6XCJmZWRvckBpbmR1dG55LmNvbVwifSxsaWNlbnNlOlwiTUlUXCIsYnVnczp7dXJsOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWMvaXNzdWVzXCJ9LGhvbWVwYWdlOlwiaHR0cHM6Ly9naXRodWIuY29tL2luZHV0bnkvZWxsaXB0aWNcIixkZXZEZXBlbmRlbmNpZXM6e2JyZnM6XCJeMS40LjNcIixjb3ZlcmFsbHM6XCJeMi4xMS4zXCIsZ3J1bnQ6XCJeMC40LjVcIixcImdydW50LWJyb3dzZXJpZnlcIjpcIl41LjAuMFwiLFwiZ3J1bnQtY29udHJpYi1jb25uZWN0XCI6XCJeMS4wLjBcIixcImdydW50LWNvbnRyaWItY29weVwiOlwiXjEuMC4wXCIsXCJncnVudC1jb250cmliLXVnbGlmeVwiOlwiXjEuMC4xXCIsXCJncnVudC1tb2NoYS1pc3RhbmJ1bFwiOlwiXjMuMC4xXCIsXCJncnVudC1zYXVjZWxhYnNcIjpcIl44LjYuMlwiLGlzdGFuYnVsOlwiXjAuNC4yXCIsanNjczpcIl4yLjkuMFwiLGpzaGludDpcIl4yLjYuMFwiLG1vY2hhOlwiXjIuMS4wXCJ9LGRlcGVuZGVuY2llczp7XCJibi5qc1wiOlwiXjQuNC4wXCIsYnJvcmFuZDpcIl4xLjAuMVwiLFwiaGFzaC5qc1wiOlwiXjEuMC4wXCIsaW5oZXJpdHM6XCJeMi4wLjFcIn0sZ2l0SGVhZDpcImNiYWNlNDY4M2E0YTU0OGRjMDMwNmVmMzY3NTYxNTFhMjAyOTljZDVcIixfaWQ6XCJlbGxpcHRpY0A2LjMuMlwiLF9zaGFzdW06XCJlNGM4MWUwODI5Y2YwYTY1YWI3MGU5OThiODIzMjcyM2I1YzFiYzQ4XCIsX2Zyb206XCJlbGxpcHRpY0A+PTYuMC4wIDw3LjAuMFwiLF9ucG1WZXJzaW9uOlwiMy4xMC4zXCIsX25vZGVWZXJzaW9uOlwiNi4zLjBcIixfbnBtVXNlcjp7bmFtZTpcImluZHV0bnlcIixlbWFpbDpcImZlZG9yQGluZHV0bnkuY29tXCJ9LGRpc3Q6e3NoYXN1bTpcImU0YzgxZTA4MjljZjBhNjVhYjcwZTk5OGI4MjMyNzIzYjVjMWJjNDhcIix0YXJiYWxsOlwiaHR0cHM6Ly9yZWdpc3RyeS5ucG1qcy5vcmcvZWxsaXB0aWMvLS9lbGxpcHRpYy02LjMuMi50Z3pcIn0sbWFpbnRhaW5lcnM6W3tuYW1lOlwiaW5kdXRueVwiLGVtYWlsOlwiZmVkb3JAaW5kdXRueS5jb21cIn1dLF9ucG1PcGVyYXRpb25hbEludGVybmFsOntob3N0OlwicGFja2FnZXMtMTYtZWFzdC5pbnRlcm5hbC5ucG1qcy5jb21cIix0bXA6XCJ0bXAvZWxsaXB0aWMtNi4zLjIudGd6XzE0NzM5Mzg4MzcyMDVfMC4zMTA4OTAzNDYyOTk4NTY5XCJ9LGRpcmVjdG9yaWVzOnt9LF9yZXNvbHZlZDpcImh0dHBzOi8vcmVnaXN0cnkubnBtanMub3JnL2VsbGlwdGljLy0vZWxsaXB0aWMtNi4zLjIudGd6XCJ9fSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz17bW9kcDE6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjNhMzYyMGZmZmZmZmZmZmZmZmZmZmZcIn0sbW9kcDI6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNjUzODFmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHA1OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2EyMzczMjdmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNDp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhY2FhNjhmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxNTp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5M2FkMmNhZmZmZmZmZmZmZmZmZmZmZlwifSxtb2RwMTY6e2dlbjpcIjAyXCIscHJpbWU6XCJmZmZmZmZmZmZmZmZmZmZmYzkwZmRhYTIyMTY4YzIzNGM0YzY2MjhiODBkYzFjZDEyOTAyNGUwODhhNjdjYzc0MDIwYmJlYTYzYjEzOWIyMjUxNGEwODc5OGUzNDA0ZGRlZjk1MTliM2NkM2E0MzFiMzAyYjBhNmRmMjVmMTQzNzRmZTEzNTZkNmQ1MWMyNDVlNDg1YjU3NjYyNWU3ZWM2ZjQ0YzQyZTlhNjM3ZWQ2YjBiZmY1Y2I2ZjQwNmI3ZWRlZTM4NmJmYjVhODk5ZmE1YWU5ZjI0MTE3YzRiMWZlNjQ5Mjg2NjUxZWNlNDViM2RjMjAwN2NiOGExNjNiZjA1OThkYTQ4MzYxYzU1ZDM5YTY5MTYzZmE4ZmQyNGNmNWY4MzY1NWQyM2RjYTNhZDk2MWM2MmYzNTYyMDg1NTJiYjllZDUyOTA3NzA5Njk2NmQ2NzBjMzU0ZTRhYmM5ODA0ZjE3NDZjMDhjYTE4MjE3YzMyOTA1ZTQ2MmUzNmNlM2JlMzllNzcyYzE4MGU4NjAzOWIyNzgzYTJlYzA3YTI4ZmI1YzU1ZGYwNmY0YzUyYzlkZTJiY2JmNjk1NTgxNzE4Mzk5NTQ5N2NlYTk1NmFlNTE1ZDIyNjE4OThmYTA1MTAxNTcyOGU1YThhYWFjNDJkYWQzMzE3MGQwNDUwN2EzM2E4NTUyMWFiZGYxY2JhNjRlY2ZiODUwNDU4ZGJlZjBhOGFlYTcxNTc1ZDA2MGM3ZGIzOTcwZjg1YTZlMWU0YzdhYmY1YWU4Y2RiMDkzM2Q3MWU4Yzk0ZTA0YTI1NjE5ZGNlZTNkMjI2MWFkMmVlNmJmMTJmZmEwNmQ5OGEwODY0ZDg3NjAyNzMzZWM4NmE2NDUyMWYyYjE4MTc3YjIwMGNiYmUxMTc1NzdhNjE1ZDZjNzcwOTg4YzBiYWQ5NDZlMjA4ZTI0ZmEwNzRlNWFiMzE0M2RiNWJmY2UwZmQxMDhlNGI4MmQxMjBhOTIxMDgwMTFhNzIzYzEyYTc4N2U2ZDc4ODcxOWExMGJkYmE1YjI2OTljMzI3MTg2YWY0ZTIzYzFhOTQ2ODM0YjYxNTBiZGEyNTgzZTljYTJhZDQ0Y2U4ZGJiYmMyZGIwNGRlOGVmOTJlOGVmYzE0MWZiZWNhYTYyODdjNTk0NzRlNmJjMDVkOTliMjk2NGZhMDkwYzNhMjIzM2JhMTg2NTE1YmU3ZWQxZjYxMjk3MGNlZTJkN2FmYjgxYmRkNzYyMTcwNDgxY2QwMDY5MTI3ZDViMDVhYTk5M2I0ZWE5ODhkOGZkZGMxODZmZmI3ZGM5MGE2YzA4ZjRkZjQzNWM5MzQwNjMxOTlmZmZmZmZmZmZmZmZmZmZmXCJcbn0sbW9kcDE3OntnZW46XCIwMlwiLHByaW1lOlwiZmZmZmZmZmZmZmZmZmZmZmM5MGZkYWEyMjE2OGMyMzRjNGM2NjI4YjgwZGMxY2QxMjkwMjRlMDg4YTY3Y2M3NDAyMGJiZWE2M2IxMzliMjI1MTRhMDg3OThlMzQwNGRkZWY5NTE5YjNjZDNhNDMxYjMwMmIwYTZkZjI1ZjE0Mzc0ZmUxMzU2ZDZkNTFjMjQ1ZTQ4NWI1NzY2MjVlN2VjNmY0NGM0MmU5YTYzN2VkNmIwYmZmNWNiNmY0MDZiN2VkZWUzODZiZmI1YTg5OWZhNWFlOWYyNDExN2M0YjFmZTY0OTI4NjY1MWVjZTQ1YjNkYzIwMDdjYjhhMTYzYmYwNTk4ZGE0ODM2MWM1NWQzOWE2OTE2M2ZhOGZkMjRjZjVmODM2NTVkMjNkY2EzYWQ5NjFjNjJmMzU2MjA4NTUyYmI5ZWQ1MjkwNzcwOTY5NjZkNjcwYzM1NGU0YWJjOTgwNGYxNzQ2YzA4Y2ExODIxN2MzMjkwNWU0NjJlMzZjZTNiZTM5ZTc3MmMxODBlODYwMzliMjc4M2EyZWMwN2EyOGZiNWM1NWRmMDZmNGM1MmM5ZGUyYmNiZjY5NTU4MTcxODM5OTU0OTdjZWE5NTZhZTUxNWQyMjYxODk4ZmEwNTEwMTU3MjhlNWE4YWFhYzQyZGFkMzMxNzBkMDQ1MDdhMzNhODU1MjFhYmRmMWNiYTY0ZWNmYjg1MDQ1OGRiZWYwYThhZWE3MTU3NWQwNjBjN2RiMzk3MGY4NWE2ZTFlNGM3YWJmNWFlOGNkYjA5MzNkNzFlOGM5NGUwNGEyNTYxOWRjZWUzZDIyNjFhZDJlZTZiZjEyZmZhMDZkOThhMDg2NGQ4NzYwMjczM2VjODZhNjQ1MjFmMmIxODE3N2IyMDBjYmJlMTE3NTc3YTYxNWQ2Yzc3MDk4OGMwYmFkOTQ2ZTIwOGUyNGZhMDc0ZTVhYjMxNDNkYjViZmNlMGZkMTA4ZTRiODJkMTIwYTkyMTA4MDExYTcyM2MxMmE3ODdlNmQ3ODg3MTlhMTBiZGJhNWIyNjk5YzMyNzE4NmFmNGUyM2MxYTk0NjgzNGI2MTUwYmRhMjU4M2U5Y2EyYWQ0NGNlOGRiYmJjMmRiMDRkZThlZjkyZThlZmMxNDFmYmVjYWE2Mjg3YzU5NDc0ZTZiYzA1ZDk5YjI5NjRmYTA5MGMzYTIyMzNiYTE4NjUxNWJlN2VkMWY2MTI5NzBjZWUyZDdhZmI4MWJkZDc2MjE3MDQ4MWNkMDA2OTEyN2Q1YjA1YWE5OTNiNGVhOTg4ZDhmZGRjMTg2ZmZiN2RjOTBhNmMwOGY0ZGY0MzVjOTM0MDI4NDkyMzZjM2ZhYjRkMjdjNzAyNmMxZDRkY2IyNjAyNjQ2ZGVjOTc1MWU3NjNkYmEzN2JkZjhmZjk0MDZhZDllNTMwZWU1ZGIzODJmNDEzMDAxYWViMDZhNTNlZDkwMjdkODMxMTc5NzI3YjA4NjVhODkxOGRhM2VkYmViY2Y5YjE0ZWQ0NGNlNmNiYWNlZDRiYjFiZGI3ZjE0NDdlNmNjMjU0YjMzMjA1MTUxMmJkN2FmNDI2ZmI4ZjQwMTM3OGNkMmJmNTk4M2NhMDFjNjRiOTJlY2YwMzJlYTE1ZDE3MjFkMDNmNDgyZDdjZTZlNzRmZWY2ZDU1ZTcwMmY0Njk4MGM4MmI1YTg0MDMxOTAwYjFjOWU1OWU3Yzk3ZmJlYzdlOGYzMjNhOTdhN2UzNmNjODhiZTBmMWQ0NWI3ZmY1ODVhYzU0YmQ0MDdiMjJiNDE1NGFhY2M4ZjZkN2ViZjQ4ZTFkODE0Y2M1ZWQyMGY4MDM3ZTBhNzk3MTVlZWYyOWJlMzI4MDZhMWQ1OGJiN2M1ZGE3NmY1NTBhYTNkOGExZmJmZjBlYjE5Y2NiMWEzMTNkNTVjZGE1NmM5ZWMyZWYyOTYzMjM4N2ZlOGQ3NmUzYzA0NjgwNDNlOGY2NjNmNDg2MGVlMTJiZjJkNWIwYjc0NzRkNmU2OTRmOTFlNmRjYzQwMjRmZmZmZmZmZmZmZmZmZmZmXCJ9LG1vZHAxODp7Z2VuOlwiMDJcIixwcmltZTpcImZmZmZmZmZmZmZmZmZmZmZjOTBmZGFhMjIxNjhjMjM0YzRjNjYyOGI4MGRjMWNkMTI5MDI0ZTA4OGE2N2NjNzQwMjBiYmVhNjNiMTM5YjIyNTE0YTA4Nzk4ZTM0MDRkZGVmOTUxOWIzY2QzYTQzMWIzMDJiMGE2ZGYyNWYxNDM3NGZlMTM1NmQ2ZDUxYzI0NWU0ODViNTc2NjI1ZTdlYzZmNDRjNDJlOWE2MzdlZDZiMGJmZjVjYjZmNDA2YjdlZGVlMzg2YmZiNWE4OTlmYTVhZTlmMjQxMTdjNGIxZmU2NDkyODY2NTFlY2U0NWIzZGMyMDA3Y2I4YTE2M2JmMDU5OGRhNDgzNjFjNTVkMzlhNjkxNjNmYThmZDI0Y2Y1ZjgzNjU1ZDIzZGNhM2FkOTYxYzYyZjM1NjIwODU1MmJiOWVkNTI5MDc3MDk2OTY2ZDY3MGMzNTRlNGFiYzk4MDRmMTc0NmMwOGNhMTgyMTdjMzI5MDVlNDYyZTM2Y2UzYmUzOWU3NzJjMTgwZTg2MDM5YjI3ODNhMmVjMDdhMjhmYjVjNTVkZjA2ZjRjNTJjOWRlMmJjYmY2OTU1ODE3MTgzOTk1NDk3Y2VhOTU2YWU1MTVkMjI2MTg5OGZhMDUxMDE1NzI4ZTVhOGFhYWM0MmRhZDMzMTcwZDA0NTA3YTMzYTg1NTIxYWJkZjFjYmE2NGVjZmI4NTA0NThkYmVmMGE4YWVhNzE1NzVkMDYwYzdkYjM5NzBmODVhNmUxZTRjN2FiZjVhZThjZGIwOTMzZDcxZThjOTRlMDRhMjU2MTlkY2VlM2QyMjYxYWQyZWU2YmYxMmZmYTA2ZDk4YTA4NjRkODc2MDI3MzNlYzg2YTY0NTIxZjJiMTgxNzdiMjAwY2JiZTExNzU3N2E2MTVkNmM3NzA5ODhjMGJhZDk0NmUyMDhlMjRmYTA3NGU1YWIzMTQzZGI1YmZjZTBmZDEwOGU0YjgyZDEyMGE5MjEwODAxMWE3MjNjMTJhNzg3ZTZkNzg4NzE5YTEwYmRiYTViMjY5OWMzMjcxODZhZjRlMjNjMWE5NDY4MzRiNjE1MGJkYTI1ODNlOWNhMmFkNDRjZThkYmJiYzJkYjA0ZGU4ZWY5MmU4ZWZjMTQxZmJlY2FhNjI4N2M1OTQ3NGU2YmMwNWQ5OWIyOTY0ZmEwOTBjM2EyMjMzYmExODY1MTViZTdlZDFmNjEyOTcwY2VlMmQ3YWZiODFiZGQ3NjIxNzA0ODFjZDAwNjkxMjdkNWIwNWFhOTkzYjRlYTk4OGQ4ZmRkYzE4NmZmYjdkYzkwYTZjMDhmNGRmNDM1YzkzNDAyODQ5MjM2YzNmYWI0ZDI3YzcwMjZjMWQ0ZGNiMjYwMjY0NmRlYzk3NTFlNzYzZGJhMzdiZGY4ZmY5NDA2YWQ5ZTUzMGVlNWRiMzgyZjQxMzAwMWFlYjA2YTUzZWQ5MDI3ZDgzMTE3OTcyN2IwODY1YTg5MThkYTNlZGJlYmNmOWIxNGVkNDRjZTZjYmFjZWQ0YmIxYmRiN2YxNDQ3ZTZjYzI1NGIzMzIwNTE1MTJiZDdhZjQyNmZiOGY0MDEzNzhjZDJiZjU5ODNjYTAxYzY0YjkyZWNmMDMyZWExNWQxNzIxZDAzZjQ4MmQ3Y2U2ZTc0ZmVmNmQ1NWU3MDJmNDY5ODBjODJiNWE4NDAzMTkwMGIxYzllNTllN2M5N2ZiZWM3ZThmMzIzYTk3YTdlMzZjYzg4YmUwZjFkNDViN2ZmNTg1YWM1NGJkNDA3YjIyYjQxNTRhYWNjOGY2ZDdlYmY0OGUxZDgxNGNjNWVkMjBmODAzN2UwYTc5NzE1ZWVmMjliZTMyODA2YTFkNThiYjdjNWRhNzZmNTUwYWEzZDhhMWZiZmYwZWIxOWNjYjFhMzEzZDU1Y2RhNTZjOWVjMmVmMjk2MzIzODdmZThkNzZlM2MwNDY4MDQzZThmNjYzZjQ4NjBlZTEyYmYyZDViMGI3NDc0ZDZlNjk0ZjkxZTZkYmUxMTU5NzRhMzkyNmYxMmZlZTVlNDM4Nzc3Y2I2YTkzMmRmOGNkOGJlYzRkMDczYjkzMWJhM2JjODMyYjY4ZDlkZDMwMDc0MWZhN2JmOGFmYzQ3ZWQyNTc2ZjY5MzZiYTQyNDY2M2FhYjYzOWM1YWU0ZjU2ODM0MjNiNDc0MmJmMWM5NzgyMzhmMTZjYmUzOWQ2NTJkZTNmZGI4YmVmYzg0OGFkOTIyMjIyZTA0YTQwMzdjMDcxM2ViNTdhODFhMjNmMGM3MzQ3M2ZjNjQ2Y2VhMzA2YjRiY2JjODg2MmY4Mzg1ZGRmYTlkNGI3ZmEyYzA4N2U4Nzk2ODMzMDNlZDViZGQzYTA2MmIzY2Y1YjNhMjc4YTY2ZDJhMTNmODNmNDRmODJkZGYzMTBlZTA3NGFiNmEzNjQ1OTdlODk5YTAyNTVkYzE2NGYzMWNjNTA4NDY4NTFkZjlhYjQ4MTk1ZGVkN2VhMWIxZDUxMGJkN2VlNzRkNzNmYWYzNmJjMzFlY2ZhMjY4MzU5MDQ2ZjRlYjg3OWY5MjQwMDk0MzhiNDgxYzZjZDc4ODlhMDAyZWQ1ZWUzODJiYzkxOTBkYTZmYzAyNmU0Nzk1NThlNDQ3NTY3N2U5YWE5ZTMwNTBlMjc2NTY5NGRmYzgxZjU2ZTg4MGI5NmU3MTYwYzk4MGRkOThlZGQzZGZmZmZmZmZmZmZmZmZmZmZmXCJ9fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e1wiMi4xNi44NDAuMS4xMDEuMy40LjEuMVwiOlwiYWVzLTEyOC1lY2JcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjJcIjpcImFlcy0xMjgtY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4zXCI6XCJhZXMtMTI4LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNFwiOlwiYWVzLTEyOC1jZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjIxXCI6XCJhZXMtMTkyLWVjYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuMjJcIjpcImFlcy0xOTItY2JjXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS4yM1wiOlwiYWVzLTE5Mi1vZmJcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjI0XCI6XCJhZXMtMTkyLWNmYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDFcIjpcImFlcy0yNTYtZWNiXCIsXCIyLjE2Ljg0MC4xLjEwMS4zLjQuMS40MlwiOlwiYWVzLTI1Ni1jYmNcIixcIjIuMTYuODQwLjEuMTAxLjMuNC4xLjQzXCI6XCJhZXMtMjU2LW9mYlwiLFwiMi4xNi44NDAuMS4xMDEuMy40LjEuNDRcIjpcImFlcy0yNTYtY2ZiXCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9ZnVuY3Rpb24gaSh0LGUpe2lmKCF0KXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcihcInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZFwiKTtyZXR1cm4hZXx8XCJvYmplY3RcIiE9dHlwZW9mIGUmJlwiZnVuY3Rpb25cIiE9dHlwZW9mIGU/dDplfWZ1bmN0aW9uIG8odCxlKXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiBlJiZudWxsIT09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24sIG5vdCBcIit0eXBlb2YgZSk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlJiZlLnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOnQsZW51bWVyYWJsZTohMSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksZSYmKE9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3Quc2V0UHJvdG90eXBlT2YodCxlKTp0Ll9fcHJvdG9fXz1lKX12YXIgYT1yKDE5NSksZj1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKCl7cmV0dXJuIG4odGhpcyxlKSxpKHRoaXMsT2JqZWN0LmdldFByb3RvdHlwZU9mKGUpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIG8oZSx0KSxlfShhKTt0LmV4cG9ydHM9Zn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZighKHQgaW5zdGFuY2VvZiBlKSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uXCIpfWZ1bmN0aW9uIGkodCxlKXtpZighdCl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoXCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWRcIik7cmV0dXJuIWV8fFwib2JqZWN0XCIhPXR5cGVvZiBlJiZcImZ1bmN0aW9uXCIhPXR5cGVvZiBlP3Q6ZX1mdW5jdGlvbiBvKHQsZSl7aWYoXCJmdW5jdGlvblwiIT10eXBlb2YgZSYmbnVsbCE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcihcIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uLCBub3QgXCIrdHlwZW9mIGUpO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZSYmZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGUmJihPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKHQsZSk6dC5fX3Byb3RvX189ZSl9dmFyIGE9cigxOTUpLGY9ZnVuY3Rpb24odCl7ZnVuY3Rpb24gZSgpe3JldHVybiBuKHRoaXMsZSksaSh0aGlzLE9iamVjdC5nZXRQcm90b3R5cGVPZihlKS5hcHBseSh0aGlzLGFyZ3VtZW50cykpfXJldHVybiBvKGUsdCksZX0oYSk7dC5leHBvcnRzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTk2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KSx0aGlzLnNpemU9MH1yZXR1cm4gaSh0LFt7a2V5Olwid3JpdGVVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCxlKXt0aGlzLnNpemUrPWV9fSx7a2V5Olwid3JpdGVWYXJVSW50XCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoZS5pc0J1ZmZlcih0KSlyZXR1cm4gdm9pZCB0aGlzLndyaXRlVmFyT2N0ZXRTdHJpbmcodCk7aWYoIW8odCkpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTt2YXIgcj1NYXRoLmNlaWwodC50b1N0cmluZygyKS5sZW5ndGgvOCk7dGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKHtsZW5ndGg6cn0pfX0se2tleTpcIndyaXRlT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0LGUpe3RoaXMuc2tpcChlKX19LHtrZXk6XCJ3cml0ZVZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5za2lwKDEpLHQubGVuZ3RoPjEyNyl7dmFyIGU9TWF0aC5jZWlsKHQubGVuZ3RoLnRvU3RyaW5nKDIpLmxlbmd0aC84KTt0aGlzLnNraXAoZSl9dGhpcy5za2lwKHQubGVuZ3RoKX19LHtrZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2l6ZSs9dC5sZW5ndGh9fSx7a2V5Olwic2tpcFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2l6ZSs9dH19LHtrZXk6XCJnZXRTaXplXCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zaXplfX1dKSx0fSgpO1sxLDIsNCw4XS5mb3JFYWNoKGZ1bmN0aW9uKHQpe2EucHJvdG90eXBlW1wid3JpdGVVSW50XCIrOCp0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy53cml0ZVVJbnQoZSx0KX19KSx0LmV4cG9ydHM9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoNDcxKSxhPXIoNDcwKSxmPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdChlKXtuKHRoaXMsdCksdGhpcy5idWZmZXI9ZSx0aGlzLmN1cnNvcj0wLHRoaXMuYm9va21hcmtzPVtdfXJldHVybiBpKHQsW3trZXk6XCJib29rbWFya1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFya3MucHVzaCh0aGlzLmN1cnNvcil9fSx7a2V5OlwicmVzdG9yZVwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jdXJzb3I9dGhpcy5ib29rbWFya3MucG9wKCl9fSx7a2V5OlwiZW5zdXJlQXZhaWxhYmxlXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYodGhpcy5idWZmZXIubGVuZ3RoPHRoaXMuY3Vyc29yK3QpdGhyb3cgbmV3IG8oXCJUcmllZCB0byByZWFkIFwiK3QrXCIgYnl0ZXMsIGJ1dCBvbmx5IFwiKyh0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5jdXJzb3IpK1wiIGJ5dGVzIGF2YWlsYWJsZVwiKX19LHtrZXk6XCJyZWFkVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMucGVla1VJbnQodCk7cmV0dXJuIHRoaXMuY3Vyc29yKz10LGV9fSx7a2V5OlwicGVla1VJbnRcIix2YWx1ZTpmdW5jdGlvbihlKXtpZigwPT09ZSlyZXR1cm4gMDtpZihlPDApdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gcmVhZCBpbnRlZ2VyIHdpdGggbmVnYXRpdmUgbGVuZ3RoIChwcm92aWRlZDogXCIrZStcIilcIik7aWYoZT50Lk1BWF9JTlRfQllURVMpdGhyb3cgbmV3IEVycm9yKFwiVHJpZWQgdG8gcmVhZCB0b28gbGFyZ2UgaW50ZWdlciAocmVxdWVzdGVkOiBcIitlK1wiLCBtYXg6IFwiK3QuTUFYX0lOVF9CWVRFUytcIilcIik7dGhpcy5lbnN1cmVBdmFpbGFibGUoZSk7dmFyIHI9dGhpcy5idWZmZXIucmVhZFVJbnRCRSh0aGlzLmN1cnNvcixlKTtyZXR1cm4gcn19LHtrZXk6XCJza2lwVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuc2tpcCh0KX19LHtrZXk6XCJyZWFkVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm5bdGhpcy5yZWFkVUludDMyKCksdGhpcy5yZWFkVUludDMyKCldfX0se2tleTpcInBlZWtVSW50NjRcIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYm9va21hcmsoKTt2YXIgdD10aGlzLnJlYWRVSW50NjQoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnNraXAoOCl9fSx7a2V5OlwicmVhZFZhclVJbnRcIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucmVhZFZhck9jdGV0U3RyaW5nKCk7aWYoZS5sZW5ndGg+dC5NQVhfSU5UX0JZVEVTKXRocm93IG5ldyBhKFwiVUludCBvZiBsZW5ndGggXCIrZS5sZW5ndGgrXCIgdG9vIGxhcmdlIHRvIHBhcnNlIGFzIGludGVnZXIgKG1heDogXCIrdC5NQVhfSU5UX0JZVEVTK1wiKVwiKTtpZigwPT09ZS5sZW5ndGgpdGhyb3cgbmV3IGEoXCJVSW50IG9mIGxlbmd0aCAwIGlzIGludmFsaWRcIik7cmV0dXJuIGUucmVhZFVJbnRCRSgwLGUubGVuZ3RoKX19LHtrZXk6XCJwZWVrVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFZhclVJbnQoKTtyZXR1cm4gdGhpcy5yZXN0b3JlKCksdH19LHtrZXk6XCJza2lwVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5za2lwVmFyT2N0ZXRTdHJpbmcoKX19LHtrZXk6XCJyZWFkT2N0ZXRTdHJpbmdcIix2YWx1ZTpmdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5yZWFkKHQpfX0se2tleTpcInBlZWtPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnBlZWsodCl9fSx7a2V5Olwic2tpcE9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuc2tpcCh0KX19LHtrZXk6XCJyZWFkTGVuZ3RoUHJlZml4XCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlYWRVSW50OCgpO2lmKGUmdC5ISUdIX0JJVCl7dmFyIHI9ZSZ0LkxPV0VSX1NFVkVOX0JJVFMsbj10aGlzLnJlYWRVSW50KHIpLGk9TWF0aC5tYXgoMTI4LDE8PDgqKHItMSkpO2lmKG48aSl0aHJvdyBuZXcgYShcIkxlbmd0aCBwcmVmaXggZW5jb2RpbmcgaXMgbm90IGNhbm9uaWNhbDogXCIrbitcIiBlbmNvZGVkIGluIFwiK3IrXCIgYnl0ZXNcIik7cmV0dXJuIG59cmV0dXJuIGV9fSx7a2V5OlwicmVhZFZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRMZW5ndGhQcmVmaXgoKTtyZXR1cm4gdGhpcy5yZWFkKHQpfX0se2tleTpcInBlZWtWYXJPY3RldFN0cmluZ1wiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ib29rbWFyaygpO3ZhciB0PXRoaXMucmVhZFZhck9jdGV0U3RyaW5nKCk7cmV0dXJuIHRoaXMucmVzdG9yZSgpLHR9fSx7a2V5Olwic2tpcFZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnJlYWRMZW5ndGhQcmVmaXgoKTtyZXR1cm4gdGhpcy5za2lwKHQpfX0se2tleTpcInJlYWRcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmVuc3VyZUF2YWlsYWJsZSh0KTt2YXIgZT10aGlzLmJ1ZmZlci5zbGljZSh0aGlzLmN1cnNvcix0aGlzLmN1cnNvcit0KTtyZXR1cm4gdGhpcy5jdXJzb3IrPXQsZX19LHtrZXk6XCJwZWVrXCIsdmFsdWU6ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5zdXJlQXZhaWxhYmxlKHQpLHRoaXMuYnVmZmVyLnNsaWNlKHRoaXMuY3Vyc29yLHRoaXMuY3Vyc29yK3QpfX0se2tleTpcInNraXBcIix2YWx1ZTpmdW5jdGlvbih0KXt0aGlzLmVuc3VyZUF2YWlsYWJsZSh0KSx0aGlzLmN1cnNvcis9dH19XSxbe2tleTpcImZyb21cIix2YWx1ZTpmdW5jdGlvbihyKXtpZihlLmlzQnVmZmVyKHIpKXJldHVybiBuZXcgdChyKTtpZihyIGluc3RhbmNlb2YgdClyZXR1cm4gbmV3IHQoci5idWZmZXIuc2xpY2Uoci5jdXJzb3IpKTt0aHJvdyBuZXcgRXJyb3IoXCJSZWFkZXIgbXVzdCBiZSBnaXZlbiBhIEJ1ZmZlclwiKX19XSksdH0oKTtmLkhJR0hfQklUPTEyOCxmLkxPV0VSX1NFVkVOX0JJVFM9MTI3LGYuTUFYX0lOVF9CWVRFUz02LFtcInJlYWRcIixcInBlZWtcIixcInNraXBcIl0uZm9yRWFjaChmdW5jdGlvbih0KXtbMSwyLDRdLmZvckVhY2goZnVuY3Rpb24oZSl7Zi5wcm90b3R5cGVbdCtcIlVJbnRcIis4KmVdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXNbdCtcIlVJbnRcIl0oZSl9fSl9KSx0LmV4cG9ydHM9Zn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUpe2lmKCEodCBpbnN0YW5jZW9mIGUpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb25cIil9dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSl7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspe3ZhciBuPWVbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsXCJ2YWx1ZVwiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LG4ua2V5LG4pfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4pe3JldHVybiByJiZ0KGUucHJvdG90eXBlLHIpLG4mJnQoZSxuKSxlfX0oKSxvPXIoMTk2KSxhPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCgpe24odGhpcyx0KSx0aGlzLmNvbXBvbmVudHM9W119cmV0dXJuIGkodCxbe2tleTpcIndyaXRlVUludFwiLHZhbHVlOmZ1bmN0aW9uKHQscil7aWYoIW8odCkpdGhyb3cgbmV3IEVycm9yKFwiVUludCBtdXN0IGJlIGFuIGludGVnZXJcIik7aWYodDwwKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBwb3NpdGl2ZVwiKTtpZihyPD0wKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbGVuZ3RoIG11c3QgYmUgZ3JlYXRlciB0aGFuIHplcm9cIik7aWYodC50b1N0cmluZygyKS5sZW5ndGg+OCpyKXRocm93IG5ldyBFcnJvcihcIlVJbnQgXCIrdCtcIiBkb2VzIG5vdCBmaXQgaW4gXCIrcitcIiBieXRlc1wiKTt2YXIgbj1uZXcgZShyKTtuLndyaXRlVUludEJFKHQsMCxyKSx0aGlzLndyaXRlKG4pfX0se2tleTpcIndyaXRlVmFyVUludFwiLHZhbHVlOmZ1bmN0aW9uKHIpe2lmKGUuaXNCdWZmZXIocikpcmV0dXJuIHZvaWQgdGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKHIpO2lmKCFvKHIpKXRocm93IG5ldyBFcnJvcihcIlVJbnQgbXVzdCBiZSBhbiBpbnRlZ2VyXCIpO2lmKHI8MCl0aHJvdyBuZXcgRXJyb3IoXCJVSW50IG11c3QgYmUgcG9zaXRpdmVcIik7aWYocj50Lk1BWF9TQUZFX0lOVEVHRVIpdGhyb3cgbmV3IEVycm9yKFwiVUludCBpcyB0b28gbGFyZ2VcIik7dmFyIG49TWF0aC5jZWlsKHIudG9TdHJpbmcoMikubGVuZ3RoLzgpLGk9bmV3IGUobik7aS53cml0ZVVJbnRCRShyLDAsbiksdGhpcy53cml0ZVZhck9jdGV0U3RyaW5nKGkpfX0se2tleTpcIndyaXRlVUludDY0XCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYobyhlKSYmZTw9dC5NQVhfU0FGRV9JTlRFR0VSKXJldHVybiB0aGlzLndyaXRlVUludDMyKE1hdGguZmxvb3IoZS80Mjk0OTY3Mjk2KSksdm9pZCB0aGlzLndyaXRlVUludDMyKDQyOTQ5NjcyOTUmZSk7aWYoIUFycmF5LmlzQXJyYXkoZSl8fDIhPT1lLmxlbmd0aHx8IW8oZVswXSl8fCFvKGVbMV0pKXRocm93IG5ldyBUeXBlRXJyb3IoXCJFeHBlY3RlZCA2NC1iaXQgaW50ZWdlciBhcyBhbiBhcnJheSBvZiB0d28gMzItYml0IHdvcmRzXCIpO3RoaXMud3JpdGVVSW50MzIoZVswXSksdGhpcy53cml0ZVVJbnQzMihlWzFdKX19LHtrZXk6XCJ3cml0ZU9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUpdGhyb3cgbmV3IEVycm9yKFwiSW5jb3JyZWN0IGxlbmd0aCBmb3Igb2N0ZXQgc3RyaW5nIChhY3R1YWw6IFwiK3QubGVuZ3RoK1wiLCBleHBlY3RlZDogXCIrZStcIilcIik7dGhpcy53cml0ZSh0KX19LHtrZXk6XCJ3cml0ZVZhck9jdGV0U3RyaW5nXCIsdmFsdWU6ZnVuY3Rpb24odCl7aWYoIWUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcihcIkV4cGVjdHMgYSBidWZmZXJcIik7dmFyIHI9MTI4O2lmKHQubGVuZ3RoPD0xMjcpdGhpcy53cml0ZVVJbnQ4KHQubGVuZ3RoKTtlbHNle3ZhciBuPU1hdGguY2VpbCh0Lmxlbmd0aC50b1N0cmluZygyKS5sZW5ndGgvOCk7dGhpcy53cml0ZVVJbnQ4KHJ8biksdGhpcy53cml0ZVVJbnQodC5sZW5ndGgsbil9dGhpcy53cml0ZSh0KX19LHtrZXk6XCJ3cml0ZVwiLHZhbHVlOmZ1bmN0aW9uKHQpe3RoaXMuY29tcG9uZW50cy5wdXNoKHQpfX0se2tleTpcImdldEJ1ZmZlclwiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIGUuY29uY2F0KHRoaXMuY29tcG9uZW50cyl9fV0pLHR9KCk7YS5NQVhfU0FGRV9JTlRFR0VSPXIoNDc1KSxbMSwyLDRdLmZvckVhY2goZnVuY3Rpb24odCl7YS5wcm90b3R5cGVbXCJ3cml0ZVVJbnRcIis4KnRdPWZ1bmN0aW9uKGUpe3RoaXMud3JpdGVVSW50KGUsdCl9fSksdC5leHBvcnRzPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7cig0ODcpLHQuZXhwb3J0cz05MDA3MTk5MjU0NzQwOTkxfSxmdW5jdGlvbih0LGUpe3QuZXhwb3J0cz1mdW5jdGlvbih0KXtpZihcImZ1bmN0aW9uXCIhPXR5cGVvZiB0KXRocm93IFR5cGVFcnJvcih0K1wiIGlzIG5vdCBhIGZ1bmN0aW9uIVwiKTtyZXR1cm4gdH19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDg5KTt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7aWYoIW4odCkpdGhyb3cgVHlwZUVycm9yKHQrXCIgaXMgbm90IGFuIG9iamVjdCFcIik7cmV0dXJuIHR9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0NzYpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUscil7aWYobih0KSx2b2lkIDA9PT1lKXJldHVybiB0O3N3aXRjaChyKXtjYXNlIDE6cmV0dXJuIGZ1bmN0aW9uKHIpe3JldHVybiB0LmNhbGwoZSxyKX07Y2FzZSAyOnJldHVybiBmdW5jdGlvbihyLG4pe3JldHVybiB0LmNhbGwoZSxyLG4pfTtjYXNlIDM6cmV0dXJuIGZ1bmN0aW9uKHIsbixpKXtyZXR1cm4gdC5jYWxsKGUscixuLGkpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseShlLGFyZ3VtZW50cyl9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpLGk9cigyMDApLmRvY3VtZW50LG89bihpKSYmbihpLmNyZWF0ZUVsZW1lbnQpO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbz9pLmNyZWF0ZUVsZW1lbnQodCk6e319fSxmdW5jdGlvbih0LGUscil7dmFyIG49cig0ODMpLGk9cig0ODQpO3QuZXhwb3J0cz1yKDE0NCk/ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuLmYodCxlLGkoMSxyKSl9OmZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdFtlXT1yLHR9fSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPSFyKDE0NCkmJiFyKDE5OSkoZnVuY3Rpb24oKXtyZXR1cm4gNyE9T2JqZWN0LmRlZmluZVByb3BlcnR5KHIoNDc5KShcImRpdlwiKSxcImFcIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pfSxmdW5jdGlvbih0LGUscil7dmFyIG49cig4OSksaT1NYXRoLmZsb29yO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4hbih0KSYmaXNGaW5pdGUodCkmJmkodCk9PT10fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoNDc3KSxpPXIoNDgxKSxvPXIoNDg1KSxhPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTtlLmY9cigxNDQpP09iamVjdC5kZWZpbmVQcm9wZXJ0eTpmdW5jdGlvbih0LGUscil7aWYobih0KSxlPW8oZSwhMCksbihyKSxpKXRyeXtyZXR1cm4gYSh0LGUscil9Y2F0Y2godCl7fWlmKFwiZ2V0XCJpbiByfHxcInNldFwiaW4gcil0aHJvdyBUeXBlRXJyb3IoXCJBY2Nlc3NvcnMgbm90IHN1cHBvcnRlZCFcIik7cmV0dXJuXCJ2YWx1ZVwiaW4gciYmKHRbZV09ci52YWx1ZSksdH19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7cmV0dXJue2VudW1lcmFibGU6ISgxJnQpLGNvbmZpZ3VyYWJsZTohKDImdCksd3JpdGFibGU6ISg0JnQpLHZhbHVlOmV9fX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoODkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKCFuKHQpKXJldHVybiB0O3ZhciByLGk7aWYoZSYmXCJmdW5jdGlvblwiPT10eXBlb2Yocj10LnRvU3RyaW5nKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKFwiZnVuY3Rpb25cIj09dHlwZW9mKHI9dC52YWx1ZU9mKSYmIW4oaT1yLmNhbGwodCkpKXJldHVybiBpO2lmKCFlJiZcImZ1bmN0aW9uXCI9PXR5cGVvZihyPXQudG9TdHJpbmcpJiYhbihpPXIuY2FsbCh0KSkpcmV0dXJuIGk7dGhyb3cgVHlwZUVycm9yKFwiQ2FuJ3QgY29udmVydCBvYmplY3QgdG8gcHJpbWl0aXZlIHZhbHVlXCIpfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMTk4KTtuKG4uUyxcIk51bWJlclwiLHtpc0ludGVnZXI6cig0ODIpfSl9LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1yKDE5OCk7bihuLlMsXCJOdW1iZXJcIix7TUFYX1NBRkVfSU5URUdFUjo5MDA3MTk5MjU0NzQwOTkxfSl9LGZ1bmN0aW9uKHQsZSxyKXshZnVuY3Rpb24odCl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gZSh0LGUscixuKXt0W2VdPXI+PjI0JjI1NSx0W2UrMV09cj4+MTYmMjU1LHRbZSsyXT1yPj44JjI1NSx0W2UrM109MjU1JnIsdFtlKzRdPW4+PjI0JjI1NSx0W2UrNV09bj4+MTYmMjU1LHRbZSs2XT1uPj44JjI1NSx0W2UrN109MjU1Jm59ZnVuY3Rpb24gbih0LGUscixuLGkpe3ZhciBvLGE9MDtmb3Iobz0wO288aTtvKyspYXw9dFtlK29dXnJbbitvXTtyZXR1cm4oMSZhLTE+Pj44KS0xfWZ1bmN0aW9uIGkodCxlLHIsaSl7cmV0dXJuIG4odCxlLHIsaSwxNil9ZnVuY3Rpb24gbyh0LGUscixpKXtyZXR1cm4gbih0LGUscixpLDMyKX1mdW5jdGlvbiBhKHQsZSxyLG4pe2Zvcih2YXIgaSxvPTI1NSZuWzBdfCgyNTUmblsxXSk8PDh8KDI1NSZuWzJdKTw8MTZ8KDI1NSZuWzNdKTw8MjQsYT0yNTUmclswXXwoMjU1JnJbMV0pPDw4fCgyNTUmclsyXSk8PDE2fCgyNTUmclszXSk8PDI0LGY9MjU1JnJbNF18KDI1NSZyWzVdKTw8OHwoMjU1JnJbNl0pPDwxNnwoMjU1JnJbN10pPDwyNCxzPTI1NSZyWzhdfCgyNTUmcls5XSk8PDh8KDI1NSZyWzEwXSk8PDE2fCgyNTUmclsxMV0pPDwyNCx1PTI1NSZyWzEyXXwoMjU1JnJbMTNdKTw8OHwoMjU1JnJbMTRdKTw8MTZ8KDI1NSZyWzE1XSk8PDI0LGg9MjU1Jm5bNF18KDI1NSZuWzVdKTw8OHwoMjU1Jm5bNl0pPDwxNnwoMjU1Jm5bN10pPDwyNCxjPTI1NSZlWzBdfCgyNTUmZVsxXSk8PDh8KDI1NSZlWzJdKTw8MTZ8KDI1NSZlWzNdKTw8MjQsZD0yNTUmZVs0XXwoMjU1JmVbNV0pPDw4fCgyNTUmZVs2XSk8PDE2fCgyNTUmZVs3XSk8PDI0LGw9MjU1JmVbOF18KDI1NSZlWzldKTw8OHwoMjU1JmVbMTBdKTw8MTZ8KDI1NSZlWzExXSk8PDI0LHA9MjU1JmVbMTJdfCgyNTUmZVsxM10pPDw4fCgyNTUmZVsxNF0pPDwxNnwoMjU1JmVbMTVdKTw8MjQsYj0yNTUmbls4XXwoMjU1Jm5bOV0pPDw4fCgyNTUmblsxMF0pPDwxNnwoMjU1Jm5bMTFdKTw8MjQsdj0yNTUmclsxNl18KDI1NSZyWzE3XSk8PDh8KDI1NSZyWzE4XSk8PDE2fCgyNTUmclsxOV0pPDwyNCx5PTI1NSZyWzIwXXwoMjU1JnJbMjFdKTw8OHwoMjU1JnJbMjJdKTw8MTZ8KDI1NSZyWzIzXSk8PDI0LG09MjU1JnJbMjRdfCgyNTUmclsyNV0pPDw4fCgyNTUmclsyNl0pPDwxNnwoMjU1JnJbMjddKTw8MjQsZz0yNTUmclsyOF18KDI1NSZyWzI5XSk8PDh8KDI1NSZyWzMwXSk8PDE2fCgyNTUmclszMV0pPDwyNCx3PTI1NSZuWzEyXXwoMjU1Jm5bMTNdKTw8OHwoMjU1Jm5bMTRdKTw8MTZ8KDI1NSZuWzE1XSk8PDI0LF89byxNPWEsUz1mLEU9cyxBPXUsaz1oLHg9YyxJPWQsQj1sLE89cCxSPWIsUD12LFQ9eSxqPW0sQz1nLE49dyxMPTA7TDwyMDtMKz0yKWk9XytUfDAsQV49aTw8N3xpPj4+MjUsaT1BK198MCxCXj1pPDw5fGk+Pj4yMyxpPUIrQXwwLFRePWk8PDEzfGk+Pj4xOSxpPVQrQnwwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrTXwwLE9ePWk8PDd8aT4+PjI1LGk9TytrfDAsal49aTw8OXxpPj4+MjMsaT1qK098MCxNXj1pPDwxM3xpPj4+MTksaT1NK2p8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK3h8MCxDXj1pPDw3fGk+Pj4yNSxpPUMrUnwwLFNePWk8PDl8aT4+PjIzLGk9UytDfDAseF49aTw8MTN8aT4+PjE5LGk9eCtTfDAsUl49aTw8MTh8aT4+PjE0LGk9TitQfDAsRV49aTw8N3xpPj4+MjUsaT1FK058MCxJXj1pPDw5fGk+Pj4yMyxpPUkrRXwwLFBePWk8PDEzfGk+Pj4xOSxpPVArSXwwLE5ePWk8PDE4fGk+Pj4xNCxpPV8rRXwwLE1ePWk8PDd8aT4+PjI1LGk9TStffDAsU149aTw8OXxpPj4+MjMsaT1TK018MCxFXj1pPDwxM3xpPj4+MTksaT1FK1N8MCxfXj1pPDwxOHxpPj4+MTQsaT1rK0F8MCx4Xj1pPDw3fGk+Pj4yNSxpPXgra3wwLElePWk8PDl8aT4+PjIzLGk9SSt4fDAsQV49aTw8MTN8aT4+PjE5LGk9QStJfDAsa149aTw8MTh8aT4+PjE0LGk9UitPfDAsUF49aTw8N3xpPj4+MjUsaT1QK1J8MCxCXj1pPDw5fGk+Pj4yMyxpPUIrUHwwLE9ePWk8PDEzfGk+Pj4xOSxpPU8rQnwwLFJePWk8PDE4fGk+Pj4xNCxpPU4rQ3wwLFRePWk8PDd8aT4+PjI1LGk9VCtOfDAsal49aTw8OXxpPj4+MjMsaT1qK1R8MCxDXj1pPDwxM3xpPj4+MTksaT1DK2p8MCxOXj1pPDwxOHxpPj4+MTQ7Xz1fK298MCxNPU0rYXwwLFM9UytmfDAsRT1FK3N8MCxBPUErdXwwLGs9aytofDAseD14K2N8MCxJPUkrZHwwLEI9QitsfDAsTz1PK3B8MCxSPVIrYnwwLFA9UCt2fDAsVD1UK3l8MCxqPWorbXwwLEM9QytnfDAsTj1OK3d8MCx0WzBdPV8+Pj4wJjI1NSx0WzFdPV8+Pj44JjI1NSx0WzJdPV8+Pj4xNiYyNTUsdFszXT1fPj4+MjQmMjU1LHRbNF09TT4+PjAmMjU1LHRbNV09TT4+PjgmMjU1LHRbNl09TT4+PjE2JjI1NSx0WzddPU0+Pj4yNCYyNTUsdFs4XT1TPj4+MCYyNTUsdFs5XT1TPj4+OCYyNTUsdFsxMF09Uz4+PjE2JjI1NSx0WzExXT1TPj4+MjQmMjU1LHRbMTJdPUU+Pj4wJjI1NSx0WzEzXT1FPj4+OCYyNTUsdFsxNF09RT4+PjE2JjI1NSx0WzE1XT1FPj4+MjQmMjU1LHRbMTZdPUE+Pj4wJjI1NSx0WzE3XT1BPj4+OCYyNTUsdFsxOF09QT4+PjE2JjI1NSx0WzE5XT1BPj4+MjQmMjU1LHRbMjBdPWs+Pj4wJjI1NSx0WzIxXT1rPj4+OCYyNTUsdFsyMl09az4+PjE2JjI1NSx0WzIzXT1rPj4+MjQmMjU1LHRbMjRdPXg+Pj4wJjI1NSx0WzI1XT14Pj4+OCYyNTUsdFsyNl09eD4+PjE2JjI1NSx0WzI3XT14Pj4+MjQmMjU1LHRbMjhdPUk+Pj4wJjI1NSx0WzI5XT1JPj4+OCYyNTUsdFszMF09ST4+PjE2JjI1NSx0WzMxXT1JPj4+MjQmMjU1LHRbMzJdPUI+Pj4wJjI1NSx0WzMzXT1CPj4+OCYyNTUsdFszNF09Qj4+PjE2JjI1NSx0WzM1XT1CPj4+MjQmMjU1LHRbMzZdPU8+Pj4wJjI1NSx0WzM3XT1PPj4+OCYyNTUsdFszOF09Tz4+PjE2JjI1NSx0WzM5XT1PPj4+MjQmMjU1LHRbNDBdPVI+Pj4wJjI1NSx0WzQxXT1SPj4+OCYyNTUsdFs0Ml09Uj4+PjE2JjI1NSx0WzQzXT1SPj4+MjQmMjU1LHRbNDRdPVA+Pj4wJjI1NSx0WzQ1XT1QPj4+OCYyNTUsdFs0Nl09UD4+PjE2JjI1NSx0WzQ3XT1QPj4+MjQmMjU1LHRbNDhdPVQ+Pj4wJjI1NSx0WzQ5XT1UPj4+OCYyNTUsdFs1MF09VD4+PjE2JjI1NSx0WzUxXT1UPj4+MjQmMjU1LHRbNTJdPWo+Pj4wJjI1NSx0WzUzXT1qPj4+OCYyNTUsdFs1NF09aj4+PjE2JjI1NSx0WzU1XT1qPj4+MjQmMjU1LHRbNTZdPUM+Pj4wJjI1NSx0WzU3XT1DPj4+OCYyNTUsdFs1OF09Qz4+PjE2JjI1NSx0WzU5XT1DPj4+MjQmMjU1LHRbNjBdPU4+Pj4wJjI1NSx0WzYxXT1OPj4+OCYyNTUsdFs2Ml09Tj4+PjE2JjI1NSx0WzYzXT1OPj4+MjQmMjU1fWZ1bmN0aW9uIGYodCxlLHIsbil7Zm9yKHZhciBpLG89MjU1Jm5bMF18KDI1NSZuWzFdKTw8OHwoMjU1Jm5bMl0pPDwxNnwoMjU1Jm5bM10pPDwyNCxhPTI1NSZyWzBdfCgyNTUmclsxXSk8PDh8KDI1NSZyWzJdKTw8MTZ8KDI1NSZyWzNdKTw8MjQsZj0yNTUmcls0XXwoMjU1JnJbNV0pPDw4fCgyNTUmcls2XSk8PDE2fCgyNTUmcls3XSk8PDI0LHM9MjU1JnJbOF18KDI1NSZyWzldKTw8OHwoMjU1JnJbMTBdKTw8MTZ8KDI1NSZyWzExXSk8PDI0LHU9MjU1JnJbMTJdfCgyNTUmclsxM10pPDw4fCgyNTUmclsxNF0pPDwxNnwoMjU1JnJbMTVdKTw8MjQsaD0yNTUmbls0XXwoMjU1Jm5bNV0pPDw4fCgyNTUmbls2XSk8PDE2fCgyNTUmbls3XSk8PDI0LGM9MjU1JmVbMF18KDI1NSZlWzFdKTw8OHwoMjU1JmVbMl0pPDwxNnwoMjU1JmVbM10pPDwyNCxkPTI1NSZlWzRdfCgyNTUmZVs1XSk8PDh8KDI1NSZlWzZdKTw8MTZ8KDI1NSZlWzddKTw8MjQsbD0yNTUmZVs4XXwoMjU1JmVbOV0pPDw4fCgyNTUmZVsxMF0pPDwxNnwoMjU1JmVbMTFdKTw8MjQscD0yNTUmZVsxMl18KDI1NSZlWzEzXSk8PDh8KDI1NSZlWzE0XSk8PDE2fCgyNTUmZVsxNV0pPDwyNCxiPTI1NSZuWzhdfCgyNTUmbls5XSk8PDh8KDI1NSZuWzEwXSk8PDE2fCgyNTUmblsxMV0pPDwyNCx2PTI1NSZyWzE2XXwoMjU1JnJbMTddKTw8OHwoMjU1JnJbMThdKTw8MTZ8KDI1NSZyWzE5XSk8PDI0LHk9MjU1JnJbMjBdfCgyNTUmclsyMV0pPDw4fCgyNTUmclsyMl0pPDwxNnwoMjU1JnJbMjNdKTw8MjQsbT0yNTUmclsyNF18KDI1NSZyWzI1XSk8PDh8KDI1NSZyWzI2XSk8PDE2fCgyNTUmclsyN10pPDwyNCxnPTI1NSZyWzI4XXwoMjU1JnJbMjldKTw8OHwoMjU1JnJbMzBdKTw8MTZ8KDI1NSZyWzMxXSk8PDI0LHc9MjU1Jm5bMTJdfCgyNTUmblsxM10pPDw4fCgyNTUmblsxNF0pPDwxNnwoMjU1Jm5bMTVdKTw8MjQsXz1vLE09YSxTPWYsRT1zLEE9dSxrPWgseD1jLEk9ZCxCPWwsTz1wLFI9YixQPXYsVD15LGo9bSxDPWcsTj13LEw9MDtMPDIwO0wrPTIpaT1fK1R8MCxBXj1pPDw3fGk+Pj4yNSxpPUErX3wwLEJePWk8PDl8aT4+PjIzLGk9QitBfDAsVF49aTw8MTN8aT4+PjE5LGk9VCtCfDAsX149aTw8MTh8aT4+PjE0LGk9aytNfDAsT149aTw8N3xpPj4+MjUsaT1PK2t8MCxqXj1pPDw5fGk+Pj4yMyxpPWorT3wwLE1ePWk8PDEzfGk+Pj4xOSxpPU0ranwwLGtePWk8PDE4fGk+Pj4xNCxpPVIreHwwLENePWk8PDd8aT4+PjI1LGk9QytSfDAsU149aTw8OXxpPj4+MjMsaT1TK0N8MCx4Xj1pPDwxM3xpPj4+MTksaT14K1N8MCxSXj1pPDwxOHxpPj4+MTQsaT1OK1B8MCxFXj1pPDw3fGk+Pj4yNSxpPUUrTnwwLElePWk8PDl8aT4+PjIzLGk9SStFfDAsUF49aTw8MTN8aT4+PjE5LGk9UCtJfDAsTl49aTw8MTh8aT4+PjE0LGk9XytFfDAsTV49aTw8N3xpPj4+MjUsaT1NK198MCxTXj1pPDw5fGk+Pj4yMyxpPVMrTXwwLEVePWk8PDEzfGk+Pj4xOSxpPUUrU3wwLF9ePWk8PDE4fGk+Pj4xNCxpPWsrQXwwLHhePWk8PDd8aT4+PjI1LGk9eCtrfDAsSV49aTw8OXxpPj4+MjMsaT1JK3h8MCxBXj1pPDwxM3xpPj4+MTksaT1BK0l8MCxrXj1pPDwxOHxpPj4+MTQsaT1SK098MCxQXj1pPDw3fGk+Pj4yNSxpPVArUnwwLEJePWk8PDl8aT4+PjIzLGk9QitQfDAsT149aTw8MTN8aT4+PjE5LGk9TytCfDAsUl49aTw8MTh8aT4+PjE0LGk9TitDfDAsVF49aTw8N3xpPj4+MjUsaT1UK058MCxqXj1pPDw5fGk+Pj4yMyxpPWorVHwwLENePWk8PDEzfGk+Pj4xOSxpPUMranwwLE5ePWk8PDE4fGk+Pj4xNDt0WzBdPV8+Pj4wJjI1NSx0WzFdPV8+Pj44JjI1NSx0WzJdPV8+Pj4xNiYyNTUsdFszXT1fPj4+MjQmMjU1LHRbNF09az4+PjAmMjU1LHRbNV09az4+PjgmMjU1LHRbNl09az4+PjE2JjI1NSx0WzddPWs+Pj4yNCYyNTUsdFs4XT1SPj4+MCYyNTUsdFs5XT1SPj4+OCYyNTUsdFsxMF09Uj4+PjE2JjI1NSx0WzExXT1SPj4+MjQmMjU1LHRbMTJdPU4+Pj4wJjI1NSx0WzEzXT1OPj4+OCYyNTUsdFsxNF09Tj4+PjE2JjI1NSx0WzE1XT1OPj4+MjQmMjU1LHRbMTZdPXg+Pj4wJjI1NSx0WzE3XT14Pj4+OCYyNTUsdFsxOF09eD4+PjE2JjI1NSx0WzE5XT14Pj4+MjQmMjU1LHRbMjBdPUk+Pj4wJjI1NSx0WzIxXT1JPj4+OCYyNTUsdFsyMl09ST4+PjE2JjI1NSx0WzIzXT1JPj4+MjQmMjU1LHRbMjRdPUI+Pj4wJjI1NSx0WzI1XT1CPj4+OCYyNTUsdFsyNl09Qj4+PjE2JjI1NSx0WzI3XT1CPj4+MjQmMjU1LHRbMjhdPU8+Pj4wJjI1NSx0WzI5XT1PPj4+OCYyNTUsdFszMF09Tz4+PjE2JjI1NSx0WzMxXT1PPj4+MjQmMjU1fWZ1bmN0aW9uIHModCxlLHIsbil7YSh0LGUscixuKX1mdW5jdGlvbiB1KHQsZSxyLG4pe2YodCxlLHIsbil9ZnVuY3Rpb24gaCh0LGUscixuLGksbyxhKXt2YXIgZix1LGg9bmV3IFVpbnQ4QXJyYXkoMTYpLGM9bmV3IFVpbnQ4QXJyYXkoNjQpO2Zvcih1PTA7dTwxNjt1KyspaFt1XT0wO2Zvcih1PTA7dTw4O3UrKyloW3VdPW9bdV07Zm9yKDtpPj02NDspe2ZvcihzKGMsaCxhLGR0KSx1PTA7dTw2NDt1KyspdFtlK3VdPXJbbit1XV5jW3VdO2ZvcihmPTEsdT04O3U8MTY7dSsrKWY9ZisoMjU1JmhbdV0pfDAsaFt1XT0yNTUmZixmPj4+PTg7aS09NjQsZSs9NjQsbis9NjR9aWYoaT4wKWZvcihzKGMsaCxhLGR0KSx1PTA7dTxpO3UrKyl0W2UrdV09cltuK3VdXmNbdV07cmV0dXJuIDB9ZnVuY3Rpb24gYyh0LGUscixuLGkpe3ZhciBvLGEsZj1uZXcgVWludDhBcnJheSgxNiksdT1uZXcgVWludDhBcnJheSg2NCk7Zm9yKGE9MDthPDE2O2ErKylmW2FdPTA7Zm9yKGE9MDthPDg7YSsrKWZbYV09blthXTtmb3IoO3I+PTY0Oyl7Zm9yKHModSxmLGksZHQpLGE9MDthPDY0O2ErKyl0W2UrYV09dVthXTtmb3Iobz0xLGE9ODthPDE2O2ErKylvPW8rKDI1NSZmW2FdKXwwLGZbYV09MjU1Jm8sbz4+Pj04O3ItPTY0LGUrPTY0fWlmKHI+MClmb3Iocyh1LGYsaSxkdCksYT0wO2E8cjthKyspdFtlK2FdPXVbYV07cmV0dXJuIDB9ZnVuY3Rpb24gZCh0LGUscixuLGkpe3ZhciBvPW5ldyBVaW50OEFycmF5KDMyKTt1KG8sbixpLGR0KTtmb3IodmFyIGE9bmV3IFVpbnQ4QXJyYXkoOCksZj0wO2Y8ODtmKyspYVtmXT1uW2YrMTZdO3JldHVybiBjKHQsZSxyLGEsbyl9ZnVuY3Rpb24gbCh0LGUscixuLGksbyxhKXt2YXIgZj1uZXcgVWludDhBcnJheSgzMik7dShmLG8sYSxkdCk7Zm9yKHZhciBzPW5ldyBVaW50OEFycmF5KDgpLGM9MDtjPDg7YysrKXNbY109b1tjKzE2XTtyZXR1cm4gaCh0LGUscixuLGkscyxmKX1mdW5jdGlvbiBwKHQsZSxyLG4saSxvKXt2YXIgYT1uZXcgbHQobyk7cmV0dXJuIGEudXBkYXRlKHIsbixpKSxhLmZpbmlzaCh0LGUpLDB9ZnVuY3Rpb24gYih0LGUscixuLG8sYSl7dmFyIGY9bmV3IFVpbnQ4QXJyYXkoMTYpO3JldHVybiBwKGYsMCxyLG4sbyxhKSxpKHQsZSxmLDApfWZ1bmN0aW9uIHYodCxlLHIsbixpKXt2YXIgbztpZihyPDMyKXJldHVybi0xO2ZvcihsKHQsMCxlLDAscixuLGkpLHAodCwxNix0LDMyLHItMzIsdCksbz0wO288MTY7bysrKXRbb109MDtyZXR1cm4gMH1mdW5jdGlvbiB5KHQsZSxyLG4saSl7dmFyIG8sYT1uZXcgVWludDhBcnJheSgzMik7aWYocjwzMilyZXR1cm4tMTtpZihkKGEsMCwzMixuLGkpLDAhPT1iKGUsMTYsZSwzMixyLTMyLGEpKXJldHVybi0xO2ZvcihsKHQsMCxlLDAscixuLGkpLG89MDtvPDMyO28rKyl0W29dPTA7cmV0dXJuIDB9ZnVuY3Rpb24gbSh0LGUpe3ZhciByO2ZvcihyPTA7cjwxNjtyKyspdFtyXT0wfGVbcl19ZnVuY3Rpb24gZyh0KXt2YXIgZSxyLG49MTtmb3IoZT0wO2U8MTY7ZSsrKXI9dFtlXStuKzY1NTM1LG49TWF0aC5mbG9vcihyLzY1NTM2KSx0W2VdPXItNjU1MzYqbjt0WzBdKz1uLTErMzcqKG4tMSl9ZnVuY3Rpb24gdyh0LGUscil7Zm9yKHZhciBuLGk9fihyLTEpLG89MDtvPDE2O28rKyluPWkmKHRbb11eZVtvXSksdFtvXV49bixlW29dXj1ufWZ1bmN0aW9uIF8odCxlKXt2YXIgcixuLGksbz10dCgpLGE9dHQoKTtmb3Iocj0wO3I8MTY7cisrKWFbcl09ZVtyXTtmb3IoZyhhKSxnKGEpLGcoYSksbj0wO248MjtuKyspe2ZvcihvWzBdPWFbMF0tNjU1MTcscj0xO3I8MTU7cisrKW9bcl09YVtyXS02NTUzNS0ob1tyLTFdPj4xNiYxKSxvW3ItMV0mPTY1NTM1O29bMTVdPWFbMTVdLTMyNzY3LShvWzE0XT4+MTYmMSksaT1vWzE1XT4+MTYmMSxvWzE0XSY9NjU1MzUsdyhhLG8sMS1pKX1mb3Iocj0wO3I8MTY7cisrKXRbMipyXT0yNTUmYVtyXSx0WzIqcisxXT1hW3JdPj44fWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1uZXcgVWludDhBcnJheSgzMiksbj1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIF8ocix0KSxfKG4sZSksbyhyLDAsbiwwKX1mdW5jdGlvbiBTKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gXyhlLHQpLDEmZVswXX1mdW5jdGlvbiBFKHQsZSl7dmFyIHI7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPWVbMipyXSsoZVsyKnIrMV08PDgpO3RbMTVdJj0zMjc2N31mdW5jdGlvbiBBKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W25dPWVbbl0rcltuXX1mdW5jdGlvbiBrKHQsZSxyKXtmb3IodmFyIG49MDtuPDE2O24rKyl0W25dPWVbbl0tcltuXX1mdW5jdGlvbiB4KHQsZSxyKXt2YXIgbixpLG89MCxhPTAsZj0wLHM9MCx1PTAsaD0wLGM9MCxkPTAsbD0wLHA9MCxiPTAsdj0wLHk9MCxtPTAsZz0wLHc9MCxfPTAsTT0wLFM9MCxFPTAsQT0wLGs9MCx4PTAsST0wLEI9MCxPPTAsUj0wLFA9MCxUPTAsaj0wLEM9MCxOPXJbMF0sTD1yWzFdLFU9clsyXSx6PXJbM10sRD1yWzRdLHE9cls1XSxGPXJbNl0sSz1yWzddLEc9cls4XSxWPXJbOV0sSD1yWzEwXSxYPXJbMTFdLFk9clsxMl0sVz1yWzEzXSxaPXJbMTRdLEo9clsxNV07bj1lWzBdLG8rPW4qTixhKz1uKkwsZis9bipVLHMrPW4qeix1Kz1uKkQsaCs9bipxLGMrPW4qRixkKz1uKkssbCs9bipHLHArPW4qVixiKz1uKkgsdis9bipYLHkrPW4qWSxtKz1uKlcsZys9bipaLHcrPW4qSixuPWVbMV0sYSs9bipOLGYrPW4qTCxzKz1uKlUsdSs9bip6LGgrPW4qRCxjKz1uKnEsZCs9bipGLGwrPW4qSyxwKz1uKkcsYis9bipWLHYrPW4qSCx5Kz1uKlgsbSs9bipZLGcrPW4qVyx3Kz1uKlosXys9bipKLG49ZVsyXSxmKz1uKk4scys9bipMLHUrPW4qVSxoKz1uKnosYys9bipELGQrPW4qcSxsKz1uKkYscCs9bipLLGIrPW4qRyx2Kz1uKlYseSs9bipILG0rPW4qWCxnKz1uKlksdys9bipXLF8rPW4qWixNKz1uKkosbj1lWzNdLHMrPW4qTix1Kz1uKkwsaCs9bipVLGMrPW4qeixkKz1uKkQsbCs9bipxLHArPW4qRixiKz1uKkssdis9bipHLHkrPW4qVixtKz1uKkgsZys9bipYLHcrPW4qWSxfKz1uKlcsTSs9bipaLFMrPW4qSixuPWVbNF0sdSs9bipOLGgrPW4qTCxjKz1uKlUsZCs9bip6LGwrPW4qRCxwKz1uKnEsYis9bipGLHYrPW4qSyx5Kz1uKkcsbSs9bipWLGcrPW4qSCx3Kz1uKlgsXys9bipZLE0rPW4qVyxTKz1uKlosRSs9bipKLG49ZVs1XSxoKz1uKk4sYys9bipMLGQrPW4qVSxsKz1uKnoscCs9bipELGIrPW4qcSx2Kz1uKkYseSs9bipLLG0rPW4qRyxnKz1uKlYsdys9bipILF8rPW4qWCxNKz1uKlksUys9bipXLEUrPW4qWixBKz1uKkosbj1lWzZdLGMrPW4qTixkKz1uKkwsbCs9bipVLHArPW4qeixiKz1uKkQsdis9bipxLHkrPW4qRixtKz1uKkssZys9bipHLHcrPW4qVixfKz1uKkgsTSs9bipYLFMrPW4qWSxFKz1uKlcsQSs9bipaLGsrPW4qSixuPWVbN10sZCs9bipOLGwrPW4qTCxwKz1uKlUsYis9bip6LHYrPW4qRCx5Kz1uKnEsbSs9bipGLGcrPW4qSyx3Kz1uKkcsXys9bipWLE0rPW4qSCxTKz1uKlgsRSs9bipZLEErPW4qVyxrKz1uKloseCs9bipKLG49ZVs4XSxsKz1uKk4scCs9bipMLGIrPW4qVSx2Kz1uKnoseSs9bipELG0rPW4qcSxnKz1uKkYsdys9bipLLF8rPW4qRyxNKz1uKlYsUys9bipILEUrPW4qWCxBKz1uKlksays9bipXLHgrPW4qWixJKz1uKkosbj1lWzldLHArPW4qTixiKz1uKkwsdis9bipVLHkrPW4qeixtKz1uKkQsZys9bipxLHcrPW4qRixfKz1uKkssTSs9bipHLFMrPW4qVixFKz1uKkgsQSs9bipYLGsrPW4qWSx4Kz1uKlcsSSs9bipaLEIrPW4qSixuPWVbMTBdLGIrPW4qTix2Kz1uKkwseSs9bipVLG0rPW4qeixnKz1uKkQsdys9bipxLF8rPW4qRixNKz1uKkssUys9bipHLEUrPW4qVixBKz1uKkgsays9bipYLHgrPW4qWSxJKz1uKlcsQis9bipaLE8rPW4qSixuPWVbMTFdLHYrPW4qTix5Kz1uKkwsbSs9bipVLGcrPW4qeix3Kz1uKkQsXys9bipxLE0rPW4qRixTKz1uKkssRSs9bipHLEErPW4qVixrKz1uKkgseCs9bipYO0krPW4qWTtCKz1uKlcsTys9bipaLFIrPW4qSixuPWVbMTJdLHkrPW4qTixtKz1uKkwsZys9bipVLHcrPW4qeixfKz1uKkQsTSs9bipxLFMrPW4qRixFKz1uKkssQSs9bipHLGsrPW4qVix4Kz1uKkgsSSs9bipYLEIrPW4qWSxPKz1uKlcsUis9bipaLFArPW4qSixuPWVbMTNdLG0rPW4qTixnKz1uKkwsdys9bipVLF8rPW4qeixNKz1uKkQsUys9bipxLEUrPW4qRixBKz1uKkssays9bipHLHgrPW4qVixJKz1uKkgsQis9bipYLE8rPW4qWSxSKz1uKlcsUCs9bipaLFQrPW4qSixuPWVbMTRdLGcrPW4qTix3Kz1uKkwsXys9bipVLE0rPW4qeixTKz1uKkQsRSs9bipxLEErPW4qRixrKz1uKksseCs9bipHLEkrPW4qVixCKz1uKkgsTys9bipYLFIrPW4qWSxQKz1uKlcsVCs9bipaLGorPW4qSixuPWVbMTVdLHcrPW4qTixfKz1uKkwsTSs9bipVLFMrPW4qeixFKz1uKkQsQSs9bipxLGsrPW4qRix4Kz1uKkssSSs9bipHLEIrPW4qVixPKz1uKkgsUis9bipYLFArPW4qWSxUKz1uKlcsais9bipaLEMrPW4qSixvKz0zOCpfLGErPTM4Kk0sZis9MzgqUyxzKz0zOCpFLHUrPTM4KkEsaCs9MzgqayxjKz0zOCp4LGQrPTM4KkksbCs9MzgqQixwKz0zOCpPLGIrPTM4KlIsdis9MzgqUCx5Kz0zOCpULG0rPTM4KmosZys9MzgqQyxpPTEsbj1vK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG89bi02NTUzNippLG49YStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxhPW4tNjU1MzYqaSxuPWYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZj1uLTY1NTM2Kmksbj1zK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHM9bi02NTUzNippLG49dStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx1PW4tNjU1MzYqaSxuPWgraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksaD1uLTY1NTM2Kmksbj1jK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGM9bi02NTUzNippLG49ZCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxkPW4tNjU1MzYqaSxuPWwraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbD1uLTY1NTM2Kmksbj1wK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHA9bi02NTUzNippLG49YitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxiPW4tNjU1MzYqaSxuPXYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdj1uLTY1NTM2Kmksbj15K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHk9bi02NTUzNippLG49bStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxtPW4tNjU1MzYqaSxuPWcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZz1uLTY1NTM2Kmksbj13K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHc9bi02NTUzNippLG8rPWktMSszNyooaS0xKSxpPTEsbj1vK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLG89bi02NTUzNippLG49YStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxhPW4tNjU1MzYqaSxuPWYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZj1uLTY1NTM2Kmksbj1zK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHM9bi02NTUzNippLG49dStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSx1PW4tNjU1MzYqaSxuPWgraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksaD1uLTY1NTM2Kmksbj1jK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLGM9bi02NTUzNippLG49ZCtpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxkPW4tNjU1MzYqaSxuPWwraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksbD1uLTY1NTM2Kmksbj1wK2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHA9bi02NTUzNippLG49YitpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxiPW4tNjU1MzYqaSxuPXYraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksdj1uLTY1NTM2Kmksbj15K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHk9bi02NTUzNippLG49bStpKzY1NTM1LGk9TWF0aC5mbG9vcihuLzY1NTM2KSxtPW4tNjU1MzYqaSxuPWcraSs2NTUzNSxpPU1hdGguZmxvb3Iobi82NTUzNiksZz1uLTY1NTM2Kmksbj13K2krNjU1MzUsaT1NYXRoLmZsb29yKG4vNjU1MzYpLHc9bi02NTUzNippLG8rPWktMSszNyooaS0xKSx0WzBdPW8sdFsxXT1hLHRbMl09Zix0WzNdPXMsdFs0XT11LHRbNV09aCx0WzZdPWMsdFs3XT1kLHRbOF09bCx0WzldPXAsdFsxMF09Yix0WzExXT12LHRbMTJdPXksdFsxM109bTt0WzE0XT1nO3RbMTVdPXd9ZnVuY3Rpb24gSSh0LGUpe3godCxlLGUpfWZ1bmN0aW9uIEIodCxlKXt2YXIgcixuPXR0KCk7Zm9yKHI9MDtyPDE2O3IrKyluW3JdPWVbcl07Zm9yKHI9MjUzO3I+PTA7ci0tKUkobixuKSwyIT09ciYmNCE9PXImJngobixuLGUpO2ZvcihyPTA7cjwxNjtyKyspdFtyXT1uW3JdfWZ1bmN0aW9uIE8odCxlKXt2YXIgcixuPXR0KCk7Zm9yKHI9MDtyPDE2O3IrKyluW3JdPWVbcl07Zm9yKHI9MjUwO3I+PTA7ci0tKUkobixuKSwxIT09ciYmeChuLG4sZSk7Zm9yKHI9MDtyPDE2O3IrKyl0W3JdPW5bcl19ZnVuY3Rpb24gUih0LGUscil7dmFyIG4saSxvPW5ldyBVaW50OEFycmF5KDMyKSxhPW5ldyBGbG9hdDY0QXJyYXkoODApLGY9dHQoKSxzPXR0KCksdT10dCgpLGg9dHQoKSxjPXR0KCksZD10dCgpO2ZvcihpPTA7aTwzMTtpKyspb1tpXT1lW2ldO2ZvcihvWzMxXT0xMjcmZVszMV18NjQsb1swXSY9MjQ4LEUoYSxyKSxpPTA7aTwxNjtpKyspc1tpXT1hW2ldLGhbaV09ZltpXT11W2ldPTA7Zm9yKGZbMF09aFswXT0xLGk9MjU0O2k+PTA7LS1pKW49b1tpPj4+M10+Pj4oNyZpKSYxLHcoZixzLG4pLHcodSxoLG4pLEEoYyxmLHUpLGsoZixmLHUpLEEodSxzLGgpLGsocyxzLGgpLEkoaCxjKSxJKGQsZikseChmLHUsZikseCh1LHMsYyksQShjLGYsdSksayhmLGYsdSksSShzLGYpLGsodSxoLGQpLHgoZix1LGF0KSxBKGYsZixoKSx4KHUsdSxmKSx4KGYsaCxkKSx4KGgscyxhKSxJKHMsYyksdyhmLHMsbiksdyh1LGgsbik7Zm9yKGk9MDtpPDE2O2krKylhW2krMTZdPWZbaV0sYVtpKzMyXT11W2ldLGFbaSs0OF09c1tpXSxhW2krNjRdPWhbaV07dmFyIGw9YS5zdWJhcnJheSgzMikscD1hLnN1YmFycmF5KDE2KTtyZXR1cm4gQihsLGwpLHgocCxwLGwpLF8odCxwKSwwfWZ1bmN0aW9uIFAodCxlKXtyZXR1cm4gUih0LGUsbnQpfWZ1bmN0aW9uIFQodCxlKXtyZXR1cm4gZXQoZSwzMiksUCh0LGUpfWZ1bmN0aW9uIGoodCxlLHIpe3ZhciBuPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gUihuLHIsZSksdSh0LHJ0LG4sZHQpfWZ1bmN0aW9uIEModCxlLHIsbixpLG8pe3ZhciBhPW5ldyBVaW50OEFycmF5KDMyKTtyZXR1cm4gaihhLGksbykscHQodCxlLHIsbixhKX1mdW5jdGlvbiBOKHQsZSxyLG4saSxvKXt2YXIgYT1uZXcgVWludDhBcnJheSgzMik7cmV0dXJuIGooYSxpLG8pLGJ0KHQsZSxyLG4sYSl9ZnVuY3Rpb24gTCh0LGUscixuKXtmb3IodmFyIGksbyxhLGYscyx1LGgsYyxkLGwscCxiLHYseSxtLGcsdyxfLE0sUyxFLEEsayx4LEksQixPPW5ldyBJbnQzMkFycmF5KDE2KSxSPW5ldyBJbnQzMkFycmF5KDE2KSxQPXRbMF0sVD10WzFdLGo9dFsyXSxDPXRbM10sTj10WzRdLEw9dFs1XSxVPXRbNl0sej10WzddLEQ9ZVswXSxxPWVbMV0sRj1lWzJdLEs9ZVszXSxHPWVbNF0sVj1lWzVdLEg9ZVs2XSxYPWVbN10sWT0wO24+PTEyODspe2ZvcihNPTA7TTwxNjtNKyspUz04Kk0rWSxPW01dPXJbUyswXTw8MjR8cltTKzFdPDwxNnxyW1MrMl08PDh8cltTKzNdLFJbTV09cltTKzRdPDwyNHxyW1MrNV08PDE2fHJbUys2XTw8OHxyW1MrN107Zm9yKE09MDtNPDgwO00rKylpZihpPVAsbz1ULGE9aixmPUMscz1OLHU9TCxoPVUsYz16LGQ9RCxsPXEscD1GLGI9Syx2PUcseT1WLG09SCxnPVgsRT16LEE9WCxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9KE4+Pj4xNHxHPDwxOCleKE4+Pj4xOHxHPDwxNCleKEc+Pj45fE48PDIzKSxBPShHPj4+MTR8Tjw8MTgpXihHPj4+MTh8Tjw8MTQpXihOPj4+OXxHPDwyMyksays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYsRT1OJkxefk4mVSxBPUcmVl5+RyZILGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LEU9dnRbMipNXSxBPXZ0WzIqTSsxXSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPU9bTSUxNl0sQT1SW00lMTZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHc9NjU1MzUmSXxCPDwxNixfPTY1NTM1Jmt8eDw8MTYsRT13LEE9XyxrPTY1NTM1JkEseD1BPj4+MTYsST02NTUzNSZFLEI9RT4+PjE2LEU9KFA+Pj4yOHxEPDw0KV4oRD4+PjJ8UDw8MzApXihEPj4+N3xQPDwyNSksQT0oRD4+PjI4fFA8PDQpXihQPj4+MnxEPDwzMCleKFA+Pj43fEQ8PDI1KSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNixFPVAmVF5QJmpeVCZqLEE9RCZxXkQmRl5xJkYsays9NjU1MzUmQSx4Kz1BPj4+MTYsSSs9NjU1MzUmRSxCKz1FPj4+MTYseCs9az4+PjE2LEkrPXg+Pj4xNixCKz1JPj4+MTYsYz02NTUzNSZJfEI8PDE2LGc9NjU1MzUma3x4PDwxNixFPWYsQT1iLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT13LEE9XyxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixmPTY1NTM1Jkl8Qjw8MTYsYj02NTUzNSZrfHg8PDE2LFQ9aSxqPW8sQz1hLE49ZixMPXMsVT11LHo9aCxQPWMscT1kLEY9bCxLPXAsRz1iLFY9dixIPXksWD1tLEQ9ZyxNJTE2PT09MTUpZm9yKFM9MDtTPDE2O1MrKylFPU9bU10sQT1SW1NdLGs9NjU1MzUmQSx4PUE+Pj4xNixJPTY1NTM1JkUsQj1FPj4+MTYsRT1PWyhTKzkpJTE2XSxBPVJbKFMrOSklMTZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHc9T1soUysxKSUxNl0sXz1SWyhTKzEpJTE2XSxFPSh3Pj4+MXxfPDwzMSleKHc+Pj44fF88PDI0KV53Pj4+NyxBPShfPj4+MXx3PDwzMSleKF8+Pj44fHc8PDI0KV4oXz4+Pjd8dzw8MjUpLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHc9T1soUysxNCklMTZdLF89UlsoUysxNCklMTZdLEU9KHc+Pj4xOXxfPDwxMyleKF8+Pj4yOXx3PDwzKV53Pj4+NixBPShfPj4+MTl8dzw8MTMpXih3Pj4+Mjl8Xzw8MyleKF8+Pj42fHc8PDI2KSxrKz02NTUzNSZBLHgrPUE+Pj4xNixJKz02NTUzNSZFLEIrPUU+Pj4xNix4Kz1rPj4+MTYsSSs9eD4+PjE2LEIrPUk+Pj4xNixPW1NdPTY1NTM1Jkl8Qjw8MTYsUltTXT02NTUzNSZrfHg8PDE2O0U9UCxBPUQsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMF0sQT1lWzBdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMF09UD02NTUzNSZJfEI8PDE2LGVbMF09RD02NTUzNSZrfHg8PDE2LEU9VCxBPXEsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMV0sQT1lWzFdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMV09VD02NTUzNSZJfEI8PDE2LGVbMV09cT02NTUzNSZrfHg8PDE2LEU9aixBPUYsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbMl0sQT1lWzJdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbMl09aj02NTUzNSZJfEI8PDE2LGVbMl09Rj02NTUzNSZrfHg8PDE2LEU9QyxBPUssaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbM10sQT1lWzNdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbM109Qz02NTUzNSZJfEI8PDE2LGVbM109Sz02NTUzNSZrfHg8PDE2LEU9TixBPUcsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNF0sQT1lWzRdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNF09Tj02NTUzNSZJfEI8PDE2LGVbNF09Rz02NTUzNSZrfHg8PDE2LEU9TCxBPVYsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNV0sQT1lWzVdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNV09TD02NTUzNSZJfEI8PDE2LGVbNV09Vj02NTUzNSZrfHg8PDE2LEU9VSxBPUgsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbNl0sQT1lWzZdLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbNl09VT02NTUzNSZJfEI8PDE2LGVbNl09SD02NTUzNSZrfHg8PDE2LEU9eixBPVgsaz02NTUzNSZBLHg9QT4+PjE2LEk9NjU1MzUmRSxCPUU+Pj4xNixFPXRbN10sQT1lWzddLGsrPTY1NTM1JkEseCs9QT4+PjE2LEkrPTY1NTM1JkUsQis9RT4+PjE2LHgrPWs+Pj4xNixJKz14Pj4+MTYsQis9ST4+PjE2LHRbN109ej02NTUzNSZJfEI8PDE2LGVbN109WD02NTUzNSZrfHg8PDE2LFkrPTEyOCxuLT0xMjh9cmV0dXJuIG59ZnVuY3Rpb24gVSh0LHIsbil7dmFyIGksbz1uZXcgSW50MzJBcnJheSg4KSxhPW5ldyBJbnQzMkFycmF5KDgpLGY9bmV3IFVpbnQ4QXJyYXkoMjU2KSxzPW47Zm9yKG9bMF09MTc3OTAzMzcwMyxvWzFdPTMxNDQxMzQyNzcsb1syXT0xMDEzOTA0MjQyLG9bM109Mjc3MzQ4MDc2MixvWzRdPTEzNTk4OTMxMTksb1s1XT0yNjAwODIyOTI0LG9bNl09NTI4NzM0NjM1LG9bN109MTU0MTQ1OTIyNSxhWzBdPTQwODkyMzU3MjAsYVsxXT0yMjI3ODczNTk1LGFbMl09NDI3MTE3NTcyMyxhWzNdPTE1OTU3NTAxMjksYVs0XT0yOTE3NTY1MTM3LGFbNV09NzI1NTExMTk5LGFbNl09NDIxNTM4OTU0NyxhWzddPTMyNzAzMzIwOSxMKG8sYSxyLG4pLG4lPTEyOCxpPTA7aTxuO2krKylmW2ldPXJbcy1uK2ldO2ZvcihmW25dPTEyOCxuPTI1Ni0xMjgqKG48MTEyPzE6MCksZltuLTldPTAsZShmLG4tOCxzLzUzNjg3MDkxMnwwLHM8PDMpLEwobyxhLGYsbiksaT0wO2k8ODtpKyspZSh0LDgqaSxvW2ldLGFbaV0pO3JldHVybiAwfWZ1bmN0aW9uIHoodCxlKXt2YXIgcj10dCgpLG49dHQoKSxpPXR0KCksbz10dCgpLGE9dHQoKSxmPXR0KCkscz10dCgpLHU9dHQoKSxoPXR0KCk7ayhyLHRbMV0sdFswXSksayhoLGVbMV0sZVswXSkseChyLHIsaCksQShuLHRbMF0sdFsxXSksQShoLGVbMF0sZVsxXSkseChuLG4saCkseChpLHRbM10sZVszXSkseChpLGksc3QpLHgobyx0WzJdLGVbMl0pLEEobyxvLG8pLGsoYSxuLHIpLGsoZixvLGkpLEEocyxvLGkpLEEodSxuLHIpLHgodFswXSxhLGYpLHgodFsxXSx1LHMpLHgodFsyXSxzLGYpLHgodFszXSxhLHUpfWZ1bmN0aW9uIEQodCxlLHIpe3ZhciBuO2ZvcihuPTA7bjw0O24rKyl3KHRbbl0sZVtuXSxyKX1mdW5jdGlvbiBxKHQsZSl7dmFyIHI9dHQoKSxuPXR0KCksaT10dCgpO0IoaSxlWzJdKSx4KHIsZVswXSxpKSx4KG4sZVsxXSxpKSxfKHQsbiksdFszMV1ePVMocik8PDd9ZnVuY3Rpb24gRih0LGUscil7dmFyIG4saTtmb3IobSh0WzBdLGl0KSxtKHRbMV0sb3QpLG0odFsyXSxvdCksbSh0WzNdLGl0KSxpPTI1NTtpPj0wOy0taSluPXJbaS84fDBdPj4oNyZpKSYxLEQodCxlLG4pLHooZSx0KSx6KHQsdCksRCh0LGUsbil9ZnVuY3Rpb24gSyh0LGUpe3ZhciByPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtcbm0oclswXSx1dCksbShyWzFdLGh0KSxtKHJbMl0sb3QpLHgoclszXSx1dCxodCksRih0LHIsZSl9ZnVuY3Rpb24gRyh0LGUscil7dmFyIG4saT1uZXcgVWludDhBcnJheSg2NCksbz1bdHQoKSx0dCgpLHR0KCksdHQoKV07Zm9yKHJ8fGV0KGUsMzIpLFUoaSxlLDMyKSxpWzBdJj0yNDgsaVszMV0mPTEyNyxpWzMxXXw9NjQsSyhvLGkpLHEodCxvKSxuPTA7bjwzMjtuKyspZVtuKzMyXT10W25dO3JldHVybiAwfWZ1bmN0aW9uIFYodCxlKXt2YXIgcixuLGksbztmb3Iobj02MztuPj0zMjstLW4pe2ZvcihyPTAsaT1uLTMyLG89bi0xMjtpPG87KytpKWVbaV0rPXItMTYqZVtuXSp5dFtpLShuLTMyKV0scj1lW2ldKzEyOD4+OCxlW2ldLT0yNTYqcjtlW2ldKz1yLGVbbl09MH1mb3Iocj0wLGk9MDtpPDMyO2krKyllW2ldKz1yLShlWzMxXT4+NCkqeXRbaV0scj1lW2ldPj44LGVbaV0mPTI1NTtmb3IoaT0wO2k8MzI7aSsrKWVbaV0tPXIqeXRbaV07Zm9yKG49MDtuPDMyO24rKyllW24rMV0rPWVbbl0+PjgsdFtuXT0yNTUmZVtuXX1mdW5jdGlvbiBIKHQpe3ZhciBlLHI9bmV3IEZsb2F0NjRBcnJheSg2NCk7Zm9yKGU9MDtlPDY0O2UrKylyW2VdPXRbZV07Zm9yKGU9MDtlPDY0O2UrKyl0W2VdPTA7Vih0LHIpfWZ1bmN0aW9uIFgodCxlLHIsbil7dmFyIGksbyxhPW5ldyBVaW50OEFycmF5KDY0KSxmPW5ldyBVaW50OEFycmF5KDY0KSxzPW5ldyBVaW50OEFycmF5KDY0KSx1PW5ldyBGbG9hdDY0QXJyYXkoNjQpLGg9W3R0KCksdHQoKSx0dCgpLHR0KCldO1UoYSxuLDMyKSxhWzBdJj0yNDgsYVszMV0mPTEyNyxhWzMxXXw9NjQ7dmFyIGM9cis2NDtmb3IoaT0wO2k8cjtpKyspdFs2NCtpXT1lW2ldO2ZvcihpPTA7aTwzMjtpKyspdFszMitpXT1hWzMyK2ldO2ZvcihVKHMsdC5zdWJhcnJheSgzMiksciszMiksSChzKSxLKGgscykscSh0LGgpLGk9MzI7aTw2NDtpKyspdFtpXT1uW2ldO2ZvcihVKGYsdCxyKzY0KSxIKGYpLGk9MDtpPDY0O2krKyl1W2ldPTA7Zm9yKGk9MDtpPDMyO2krKyl1W2ldPXNbaV07Zm9yKGk9MDtpPDMyO2krKylmb3Iobz0wO288MzI7bysrKXVbaStvXSs9ZltpXSphW29dO3JldHVybiBWKHQuc3ViYXJyYXkoMzIpLHUpLGN9ZnVuY3Rpb24gWSh0LGUpe3ZhciByPXR0KCksbj10dCgpLGk9dHQoKSxvPXR0KCksYT10dCgpLGY9dHQoKSxzPXR0KCk7cmV0dXJuIG0odFsyXSxvdCksRSh0WzFdLGUpLEkoaSx0WzFdKSx4KG8saSxmdCksayhpLGksdFsyXSksQShvLHRbMl0sbyksSShhLG8pLEkoZixhKSx4KHMsZixhKSx4KHIscyxpKSx4KHIscixvKSxPKHIscikseChyLHIsaSkseChyLHIsbykseChyLHIsbykseCh0WzBdLHIsbyksSShuLHRbMF0pLHgobixuLG8pLE0obixpKSYmeCh0WzBdLHRbMF0sY3QpLEkobix0WzBdKSx4KG4sbixvKSxNKG4saSk/LTE6KFModFswXSk9PT1lWzMxXT4+NyYmayh0WzBdLGl0LHRbMF0pLHgodFszXSx0WzBdLHRbMV0pLDApfWZ1bmN0aW9uIFcodCxlLHIsbil7dmFyIGksYSxmPW5ldyBVaW50OEFycmF5KDMyKSxzPW5ldyBVaW50OEFycmF5KDY0KSx1PVt0dCgpLHR0KCksdHQoKSx0dCgpXSxoPVt0dCgpLHR0KCksdHQoKSx0dCgpXTtpZihhPS0xLHI8NjQpcmV0dXJuLTE7aWYoWShoLG4pKXJldHVybi0xO2ZvcihpPTA7aTxyO2krKyl0W2ldPWVbaV07Zm9yKGk9MDtpPDMyO2krKyl0W2krMzJdPW5baV07aWYoVShzLHQsciksSChzKSxGKHUsaCxzKSxLKGgsZS5zdWJhcnJheSgzMikpLHoodSxoKSxxKGYsdSksci09NjQsbyhlLDAsZiwwKSl7Zm9yKGk9MDtpPHI7aSsrKXRbaV09MDtyZXR1cm4tMX1mb3IoaT0wO2k8cjtpKyspdFtpXT1lW2krNjRdO3JldHVybiBhPXJ9ZnVuY3Rpb24gWih0LGUpe2lmKHQubGVuZ3RoIT09bXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIGtleSBzaXplXCIpO2lmKGUubGVuZ3RoIT09Z3QpdGhyb3cgbmV3IEVycm9yKFwiYmFkIG5vbmNlIHNpemVcIil9ZnVuY3Rpb24gSih0LGUpe2lmKHQubGVuZ3RoIT09RXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHB1YmxpYyBrZXkgc2l6ZVwiKTtpZihlLmxlbmd0aCE9PUF0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWNyZXQga2V5IHNpemVcIil9ZnVuY3Rpb24gJCgpe3ZhciB0LGU7Zm9yKGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKWlmKFwiW29iamVjdCBVaW50OEFycmF5XVwiIT09KHQ9T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGFyZ3VtZW50c1tlXSkpKXRocm93IG5ldyBUeXBlRXJyb3IoXCJ1bmV4cGVjdGVkIHR5cGUgXCIrdCtcIiwgdXNlIFVpbnQ4QXJyYXlcIil9ZnVuY3Rpb24gUSh0KXtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdPTB9dmFyIHR0PWZ1bmN0aW9uKHQpe3ZhciBlLHI9bmV3IEZsb2F0NjRBcnJheSgxNik7aWYodClmb3IoZT0wO2U8dC5sZW5ndGg7ZSsrKXJbZV09dFtlXTtyZXR1cm4gcn0sZXQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJubyBQUk5HXCIpfSxydD1uZXcgVWludDhBcnJheSgxNiksbnQ9bmV3IFVpbnQ4QXJyYXkoMzIpO250WzBdPTk7dmFyIGl0PXR0KCksb3Q9dHQoWzFdKSxhdD10dChbNTYxMjksMV0pLGZ0PXR0KFszMDg4Myw0OTUzLDE5OTE0LDMwMTg3LDU1NDY3LDE2NzA1LDI2MzcsMTEyLDU5NTQ0LDMwNTg1LDE2NTA1LDM2MDM5LDY1MTM5LDExMTE5LDI3ODg2LDIwOTk1XSksc3Q9dHQoWzYxNzg1LDk5MDYsMzk4MjgsNjAzNzQsNDUzOTgsMzM0MTEsNTI3NCwyMjQsNTM1NTIsNjExNzEsMzMwMTAsNjU0Miw2NDc0MywyMjIzOSw1NTc3Miw5MjIyXSksdXQ9dHQoWzU0NTU0LDM2NjQ1LDExNjE2LDUxNTQyLDQyOTMwLDM4MTgxLDUxMDQwLDI2OTI0LDU2NDEyLDY0OTgyLDU3OTA1LDQ5MzE2LDIxNTAyLDUyNTkwLDE0MDM1LDg1NTNdKSxodD10dChbMjYyMDAsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTQsMjYyMTRdKSxjdD10dChbNDExMzYsMTg5NTgsNjk1MSw1MDQxNCw1ODQ4OCw0NDMzNSw2MTUwLDEyMDk5LDU1MjA3LDE1ODY3LDE1MywxMTA4NSw1NzA5OSwyMDQxNyw5MzQ0LDExMTM5XSksZHQ9bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMjAsMTEyLDk3LDExMCwxMDAsMzIsNTEsNTAsNDUsOTgsMTIxLDExNiwxMDEsMzIsMTA3XSksbHQ9ZnVuY3Rpb24odCl7dGhpcy5idWZmZXI9bmV3IFVpbnQ4QXJyYXkoMTYpLHRoaXMucj1uZXcgVWludDE2QXJyYXkoMTApLHRoaXMuaD1uZXcgVWludDE2QXJyYXkoMTApLHRoaXMucGFkPW5ldyBVaW50MTZBcnJheSg4KSx0aGlzLmxlZnRvdmVyPTAsdGhpcy5maW49MDt2YXIgZSxyLG4saSxvLGEsZixzO2U9MjU1JnRbMF18KDI1NSZ0WzFdKTw8OCx0aGlzLnJbMF09ODE5MSZlLHI9MjU1JnRbMl18KDI1NSZ0WzNdKTw8OCx0aGlzLnJbMV09ODE5MSYoZT4+PjEzfHI8PDMpLG49MjU1JnRbNF18KDI1NSZ0WzVdKTw8OCx0aGlzLnJbMl09NzkzOSYocj4+PjEwfG48PDYpLGk9MjU1JnRbNl18KDI1NSZ0WzddKTw8OCx0aGlzLnJbM109ODE5MSYobj4+Pjd8aTw8OSksbz0yNTUmdFs4XXwoMjU1JnRbOV0pPDw4LHRoaXMucls0XT0yNTUmKGk+Pj40fG88PDEyKSx0aGlzLnJbNV09bz4+PjEmODE5MCxhPTI1NSZ0WzEwXXwoMjU1JnRbMTFdKTw8OCx0aGlzLnJbNl09ODE5MSYobz4+PjE0fGE8PDIpLGY9MjU1JnRbMTJdfCgyNTUmdFsxM10pPDw4LHRoaXMucls3XT04MDY1JihhPj4+MTF8Zjw8NSkscz0yNTUmdFsxNF18KDI1NSZ0WzE1XSk8PDgsdGhpcy5yWzhdPTgxOTEmKGY+Pj44fHM8PDgpLHRoaXMucls5XT1zPj4+NSYxMjcsdGhpcy5wYWRbMF09MjU1JnRbMTZdfCgyNTUmdFsxN10pPDw4LHRoaXMucGFkWzFdPTI1NSZ0WzE4XXwoMjU1JnRbMTldKTw8OCx0aGlzLnBhZFsyXT0yNTUmdFsyMF18KDI1NSZ0WzIxXSk8PDgsdGhpcy5wYWRbM109MjU1JnRbMjJdfCgyNTUmdFsyM10pPDw4LHRoaXMucGFkWzRdPTI1NSZ0WzI0XXwoMjU1JnRbMjVdKTw8OCx0aGlzLnBhZFs1XT0yNTUmdFsyNl18KDI1NSZ0WzI3XSk8PDgsdGhpcy5wYWRbNl09MjU1JnRbMjhdfCgyNTUmdFsyOV0pPDw4LHRoaXMucGFkWzddPTI1NSZ0WzMwXXwoMjU1JnRbMzFdKTw8OH07bHQucHJvdG90eXBlLmJsb2Nrcz1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuLGksbyxhLGYscyx1LGgsYyxkLGwscCxiLHYseSxtLGcsdyxfLE09dGhpcy5maW4/MDoyMDQ4LFM9dGhpcy5oWzBdLEU9dGhpcy5oWzFdLEE9dGhpcy5oWzJdLGs9dGhpcy5oWzNdLHg9dGhpcy5oWzRdLEk9dGhpcy5oWzVdLEI9dGhpcy5oWzZdLE89dGhpcy5oWzddLFI9dGhpcy5oWzhdLFA9dGhpcy5oWzldLFQ9dGhpcy5yWzBdLGo9dGhpcy5yWzFdLEM9dGhpcy5yWzJdLE49dGhpcy5yWzNdLEw9dGhpcy5yWzRdLFU9dGhpcy5yWzVdLHo9dGhpcy5yWzZdLEQ9dGhpcy5yWzddLHE9dGhpcy5yWzhdLEY9dGhpcy5yWzldO3I+PTE2OyluPTI1NSZ0W2UrMF18KDI1NSZ0W2UrMV0pPDw4LFMrPTgxOTEmbixpPTI1NSZ0W2UrMl18KDI1NSZ0W2UrM10pPDw4LEUrPTgxOTEmKG4+Pj4xM3xpPDwzKSxvPTI1NSZ0W2UrNF18KDI1NSZ0W2UrNV0pPDw4LEErPTgxOTEmKGk+Pj4xMHxvPDw2KSxhPTI1NSZ0W2UrNl18KDI1NSZ0W2UrN10pPDw4LGsrPTgxOTEmKG8+Pj43fGE8PDkpLGY9MjU1JnRbZSs4XXwoMjU1JnRbZSs5XSk8PDgseCs9ODE5MSYoYT4+PjR8Zjw8MTIpLEkrPWY+Pj4xJjgxOTEscz0yNTUmdFtlKzEwXXwoMjU1JnRbZSsxMV0pPDw4LEIrPTgxOTEmKGY+Pj4xNHxzPDwyKSx1PTI1NSZ0W2UrMTJdfCgyNTUmdFtlKzEzXSk8PDgsTys9ODE5MSYocz4+PjExfHU8PDUpLGg9MjU1JnRbZSsxNF18KDI1NSZ0W2UrMTVdKTw8OCxSKz04MTkxJih1Pj4+OHxoPDw4KSxQKz1oPj4+NXxNLGM9MCxkPWMsZCs9UypULGQrPUUqKDUqRiksZCs9QSooNSpxKSxkKz1rKig1KkQpLGQrPXgqKDUqeiksYz1kPj4+MTMsZCY9ODE5MSxkKz1JKig1KlUpLGQrPUIqKDUqTCksZCs9TyooNSpOKSxkKz1SKig1KkMpLGQrPVAqKDUqaiksYys9ZD4+PjEzLGQmPTgxOTEsbD1jLGwrPVMqaixsKz1FKlQsbCs9QSooNSpGKSxsKz1rKig1KnEpLGwrPXgqKDUqRCksYz1sPj4+MTMsbCY9ODE5MSxsKz1JKig1KnopLGwrPUIqKDUqVSksbCs9TyooNSpMKSxsKz1SKig1Kk4pLGwrPVAqKDUqQyksYys9bD4+PjEzLGwmPTgxOTEscD1jLHArPVMqQyxwKz1FKmoscCs9QSpULHArPWsqKDUqRikscCs9eCooNSpxKSxjPXA+Pj4xMyxwJj04MTkxLHArPUkqKDUqRCkscCs9QiooNSp6KSxwKz1PKig1KlUpLHArPVIqKDUqTCkscCs9UCooNSpOKSxjKz1wPj4+MTMscCY9ODE5MSxiPWMsYis9UypOLGIrPUUqQyxiKz1BKmosYis9aypULGIrPXgqKDUqRiksYz1iPj4+MTMsYiY9ODE5MSxiKz1JKig1KnEpLGIrPUIqKDUqRCksYis9TyooNSp6KSxiKz1SKig1KlUpLGIrPVAqKDUqTCksYys9Yj4+PjEzLGImPTgxOTEsdj1jLHYrPVMqTCx2Kz1FKk4sdis9QSpDLHYrPWsqaix2Kz14KlQsYz12Pj4+MTMsdiY9ODE5MSx2Kz1JKig1KkYpLHYrPUIqKDUqcSksdis9TyooNSpEKSx2Kz1SKig1KnopLHYrPVAqKDUqVSksYys9dj4+PjEzLHYmPTgxOTEseT1jLHkrPVMqVSx5Kz1FKkwseSs9QSpOLHkrPWsqQyx5Kz14KmosYz15Pj4+MTMseSY9ODE5MSx5Kz1JKlQseSs9QiooNSpGKSx5Kz1PKig1KnEpLHkrPVIqKDUqRCkseSs9UCooNSp6KSxjKz15Pj4+MTMseSY9ODE5MSxtPWMsbSs9Uyp6LG0rPUUqVSxtKz1BKkwsbSs9aypOLG0rPXgqQyxjPW0+Pj4xMyxtJj04MTkxLG0rPUkqaixtKz1CKlQsbSs9TyooNSpGKSxtKz1SKig1KnEpLG0rPVAqKDUqRCksYys9bT4+PjEzLG0mPTgxOTEsZz1jLGcrPVMqRCxnKz1FKnosZys9QSpVLGcrPWsqTCxnKz14Kk4sYz1nPj4+MTMsZyY9ODE5MSxnKz1JKkMsZys9QipqLGcrPU8qVCxnKz1SKig1KkYpLGcrPVAqKDUqcSksYys9Zz4+PjEzLGcmPTgxOTEsdz1jLHcrPVMqcSx3Kz1FKkQsdys9QSp6LHcrPWsqVSx3Kz14KkwsYz13Pj4+MTMsdyY9ODE5MSx3Kz1JKk4sdys9QipDLHcrPU8qaix3Kz1SKlQsdys9UCooNSpGKSxjKz13Pj4+MTMsdyY9ODE5MSxfPWMsXys9UypGLF8rPUUqcSxfKz1BKkQsXys9ayp6LF8rPXgqVSxjPV8+Pj4xMyxfJj04MTkxLF8rPUkqTCxfKz1CKk4sXys9TypDLF8rPVIqaixfKz1QKlQsYys9Xz4+PjEzLF8mPTgxOTEsYz0oYzw8MikrY3wwLGM9YytkfDAsZD04MTkxJmMsYz4+Pj0xMyxsKz1jLFM9ZCxFPWwsQT1wLGs9Yix4PXYsST15LEI9bSxPPWcsUj13LFA9XyxlKz0xNixyLT0xNjt0aGlzLmhbMF09Uyx0aGlzLmhbMV09RSx0aGlzLmhbMl09QSx0aGlzLmhbM109ayx0aGlzLmhbNF09eCx0aGlzLmhbNV09SSx0aGlzLmhbNl09Qix0aGlzLmhbN109Tyx0aGlzLmhbOF09Uix0aGlzLmhbOV09UH0sbHQucHJvdG90eXBlLmZpbmlzaD1mdW5jdGlvbih0LGUpe3ZhciByLG4saSxvLGE9bmV3IFVpbnQxNkFycmF5KDEwKTtpZih0aGlzLmxlZnRvdmVyKXtmb3Iobz10aGlzLmxlZnRvdmVyLHRoaXMuYnVmZmVyW28rK109MTtvPDE2O28rKyl0aGlzLmJ1ZmZlcltvXT0wO3RoaXMuZmluPTEsdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsMCwxNil9Zm9yKHI9dGhpcy5oWzFdPj4+MTMsdGhpcy5oWzFdJj04MTkxLG89MjtvPDEwO28rKyl0aGlzLmhbb10rPXIscj10aGlzLmhbb10+Pj4xMyx0aGlzLmhbb10mPTgxOTE7Zm9yKHRoaXMuaFswXSs9NSpyLHI9dGhpcy5oWzBdPj4+MTMsdGhpcy5oWzBdJj04MTkxLHRoaXMuaFsxXSs9cixyPXRoaXMuaFsxXT4+PjEzLHRoaXMuaFsxXSY9ODE5MSx0aGlzLmhbMl0rPXIsYVswXT10aGlzLmhbMF0rNSxyPWFbMF0+Pj4xMyxhWzBdJj04MTkxLG89MTtvPDEwO28rKylhW29dPXRoaXMuaFtvXStyLHI9YVtvXT4+PjEzLGFbb10mPTgxOTE7Zm9yKGFbOV0tPTgxOTIsbj0oMV5yKS0xLG89MDtvPDEwO28rKylhW29dJj1uO2ZvcihuPX5uLG89MDtvPDEwO28rKyl0aGlzLmhbb109dGhpcy5oW29dJm58YVtvXTtmb3IodGhpcy5oWzBdPTY1NTM1Jih0aGlzLmhbMF18dGhpcy5oWzFdPDwxMyksdGhpcy5oWzFdPTY1NTM1Jih0aGlzLmhbMV0+Pj4zfHRoaXMuaFsyXTw8MTApLHRoaXMuaFsyXT02NTUzNSYodGhpcy5oWzJdPj4+Nnx0aGlzLmhbM108PDcpLHRoaXMuaFszXT02NTUzNSYodGhpcy5oWzNdPj4+OXx0aGlzLmhbNF08PDQpLHRoaXMuaFs0XT02NTUzNSYodGhpcy5oWzRdPj4+MTJ8dGhpcy5oWzVdPDwxfHRoaXMuaFs2XTw8MTQpLHRoaXMuaFs1XT02NTUzNSYodGhpcy5oWzZdPj4+Mnx0aGlzLmhbN108PDExKSx0aGlzLmhbNl09NjU1MzUmKHRoaXMuaFs3XT4+PjV8dGhpcy5oWzhdPDw4KSx0aGlzLmhbN109NjU1MzUmKHRoaXMuaFs4XT4+Pjh8dGhpcy5oWzldPDw1KSxpPXRoaXMuaFswXSt0aGlzLnBhZFswXSx0aGlzLmhbMF09NjU1MzUmaSxvPTE7bzw4O28rKylpPSh0aGlzLmhbb10rdGhpcy5wYWRbb118MCkrKGk+Pj4xNil8MCx0aGlzLmhbb109NjU1MzUmaTt0W2UrMF09dGhpcy5oWzBdPj4+MCYyNTUsdFtlKzFdPXRoaXMuaFswXT4+PjgmMjU1LHRbZSsyXT10aGlzLmhbMV0+Pj4wJjI1NSx0W2UrM109dGhpcy5oWzFdPj4+OCYyNTUsdFtlKzRdPXRoaXMuaFsyXT4+PjAmMjU1LHRbZSs1XT10aGlzLmhbMl0+Pj44JjI1NSx0W2UrNl09dGhpcy5oWzNdPj4+MCYyNTUsdFtlKzddPXRoaXMuaFszXT4+PjgmMjU1LHRbZSs4XT10aGlzLmhbNF0+Pj4wJjI1NSx0W2UrOV09dGhpcy5oWzRdPj4+OCYyNTUsdFtlKzEwXT10aGlzLmhbNV0+Pj4wJjI1NSx0W2UrMTFdPXRoaXMuaFs1XT4+PjgmMjU1LHRbZSsxMl09dGhpcy5oWzZdPj4+MCYyNTUsdFtlKzEzXT10aGlzLmhbNl0+Pj44JjI1NSx0W2UrMTRdPXRoaXMuaFs3XT4+PjAmMjU1LHRbZSsxNV09dGhpcy5oWzddPj4+OCYyNTV9LGx0LnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuLGk7aWYodGhpcy5sZWZ0b3Zlcil7Zm9yKGk9MTYtdGhpcy5sZWZ0b3ZlcixpPnImJihpPXIpLG49MDtuPGk7bisrKXRoaXMuYnVmZmVyW3RoaXMubGVmdG92ZXIrbl09dFtlK25dO2lmKHItPWksZSs9aSx0aGlzLmxlZnRvdmVyKz1pLHRoaXMubGVmdG92ZXI8MTYpcmV0dXJuO3RoaXMuYmxvY2tzKHRoaXMuYnVmZmVyLDAsMTYpLHRoaXMubGVmdG92ZXI9MH1pZihyPj0xNiYmKGk9ci1yJTE2LHRoaXMuYmxvY2tzKHQsZSxpKSxlKz1pLHItPWkpLHIpe2ZvcihuPTA7bjxyO24rKyl0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyK25dPXRbZStuXTt0aGlzLmxlZnRvdmVyKz1yfX07dmFyIHB0PXYsYnQ9eSx2dD1bMTExNjM1MjQwOCwzNjA5NzY3NDU4LDE4OTk0NDc0NDEsNjAyODkxNzI1LDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSwzOTIxMDA5NTczLDIxNzMyOTU1NDgsOTYxOTg3MTYzLDQwODE2Mjg0NzIsMTUwODk3MDk5MywzMDUzODM0MjY1LDI0NTM2MzU3NDgsMjkzNzY3MTU3OSwyODcwNzYzMjIxLDM2NjQ2MDk1NjAsMzYyNDM4MTA4MCwyNzM0ODgzMzk0LDMxMDU5ODQwMSwxMTY0OTk2NTQyLDYwNzIyNTI3OCwxMzIzNjEwNzY0LDE0MjY4ODE5ODcsMzU5MDMwNDk5NCwxOTI1MDc4Mzg4LDQwNjgxODIzODMsMjE2MjA3ODIwNiw5OTEzMzYxMTMsMjYxNDg4ODEwMyw2MzM4MDMzMTcsMzI0ODIyMjU4MCwzNDc5Nzc0ODY4LDM4MzUzOTA0MDEsMjY2NjYxMzQ1OCw0MDIyMjI0Nzc0LDk0NDcxMTEzOSwyNjQzNDcwNzgsMjM0MTI2Mjc3Myw2MDQ4MDc2MjgsMjAwNzgwMDkzMyw3NzAyNTU5ODMsMTQ5NTk5MDkwMSwxMjQ5MTUwMTIyLDE4NTY0MzEyMzUsMTU1NTA4MTY5MiwzMTc1MjE4MTMyLDE5OTYwNjQ5ODYsMjE5ODk1MDgzNywyNTU0MjIwODgyLDM5OTk3MTkzMzksMjgyMTgzNDM0OSw3NjY3ODQwMTYsMjk1Mjk5NjgwOCwyNTY2NTk0ODc5LDMyMTAzMTM2NzEsMzIwMzMzNzk1NiwzMzM2NTcxODkxLDEwMzQ0NTcwMjYsMzU4NDUyODcxMSwyNDY2OTQ4OTAxLDExMzkyNjk5MywzNzU4MzI2MzgzLDMzODI0MTg5NSwxNjg3MTc5MzYsNjY2MzA3MjA1LDExODgxNzk5NjQsNzczNTI5OTEyLDE1NDYwNDU3MzQsMTI5NDc1NzM3MiwxNTIyODA1NDg1LDEzOTYxODIyOTEsMjY0MzgzMzgyMywxNjk1MTgzNzAwLDIzNDM1MjczOTAsMTk4NjY2MTA1MSwxMDE0NDc3NDgwLDIxNzcwMjYzNTAsMTIwNjc1OTE0MiwyNDU2OTU2MDM3LDM0NDA3NzYyNywyNzMwNDg1OTIxLDEyOTA4NjM0NjAsMjgyMDMwMjQxMSwzMTU4NDU0MjczLDMyNTk3MzA4MDAsMzUwNTk1MjY1NywzMzQ1NzY0NzcxLDEwNjIxNzAwOCwzNTE2MDY1ODE3LDM2MDYwMDgzNDQsMzYwMDM1MjgwNCwxNDMyNzI1Nzc2LDQwOTQ1NzE5MDksMTQ2NzAzMTU5NCwyNzU0MjMzNDQsODUxMTY5NzIwLDQzMDIyNzczNCwzMTAwODIzNzUyLDUwNjk0ODYxNiwxMzYzMjU4MTk1LDY1OTA2MDU1NiwzNzUwNjg1NTkzLDg4Mzk5Nzg3NywzNzg1MDUwMjgwLDk1ODEzOTU3MSwzMzE4MzA3NDI3LDEzMjI4MjIyMTgsMzgxMjcyMzQwMywxNTM3MDAyMDYzLDIwMDMwMzQ5OTUsMTc0Nzg3Mzc3OSwzNjAyMDM2ODk5LDE5NTU1NjIyMjIsMTU3NTk5MDAxMiwyMDI0MTA0ODE1LDExMjU1OTI5MjgsMjIyNzczMDQ1MiwyNzE2OTA0MzA2LDIzNjE4NTI0MjQsNDQyNzc2MDQ0LDI0Mjg0MzY0NzQsNTkzNjk4MzQ0LDI3NTY3MzQxODcsMzczMzExMDI0OSwzMjA0MDMxNDc5LDI5OTkzNTE1NzMsMzMyOTMyNTI5OCwzODE1OTIwNDI3LDMzOTE1Njk2MTQsMzkyODM4MzkwMCwzNTE1MjY3MjcxLDU2NjI4MDcxMSwzOTQwMTg3NjA2LDM0NTQwNjk1MzQsNDExODYzMDI3MSw0MDAwMjM5OTkyLDExNjQxODQ3NCwxOTE0MTM4NTU0LDE3NDI5MjQyMSwyNzMxMDU1MjcwLDI4OTM4MDM1NiwzMjAzOTkzMDA2LDQ2MDM5MzI2OSwzMjA2MjAzMTUsNjg1NDcxNzMzLDU4NzQ5NjgzNiw4NTIxNDI5NzEsMTA4Njc5Mjg1MSwxMDE3MDM2Mjk4LDM2NTU0MzEwMCwxMTI2MDAwNTgwLDI2MTgyOTc2NzYsMTI4ODAzMzQ3MCwzNDA5ODU1MTU4LDE1MDE1MDU5NDgsNDIzNDUwOTg2NiwxNjA3MTY3OTE1LDk4NzE2NzQ2OCwxODE2NDAyMzE2LDEyNDYxODk1OTFdLHl0PW5ldyBGbG9hdDY0QXJyYXkoWzIzNywyMTEsMjQ1LDkyLDI2LDk5LDE4LDg4LDIxNCwxNTYsMjQ3LDE2MiwyMjIsMjQ5LDIyMiwyMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwxNl0pLG10PTMyLGd0PTI0LHd0PTMyLF90PTE2LE10PTMyLFN0PTMyLEV0PTMyLEF0PTMyLGt0PTMyLHh0PWd0LEl0PXd0LEJ0PV90LE90PTY0LFJ0PTMyLFB0PTY0LFR0PTMyLGp0PTY0O3QubG93bGV2ZWw9e2NyeXB0b19jb3JlX2hzYWxzYTIwOnUsY3J5cHRvX3N0cmVhbV94b3I6bCxjcnlwdG9fc3RyZWFtOmQsY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcjpoLGNyeXB0b19zdHJlYW1fc2Fsc2EyMDpjLGNyeXB0b19vbmV0aW1lYXV0aDpwLGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnk6YixjcnlwdG9fdmVyaWZ5XzE2OmksY3J5cHRvX3ZlcmlmeV8zMjpvLGNyeXB0b19zZWNyZXRib3g6dixjcnlwdG9fc2VjcmV0Ym94X29wZW46eSxjcnlwdG9fc2NhbGFybXVsdDpSLGNyeXB0b19zY2FsYXJtdWx0X2Jhc2U6UCxjcnlwdG9fYm94X2JlZm9yZW5tOmosY3J5cHRvX2JveF9hZnRlcm5tOnB0LGNyeXB0b19ib3g6QyxjcnlwdG9fYm94X29wZW46TixjcnlwdG9fYm94X2tleXBhaXI6VCxjcnlwdG9faGFzaDpVLGNyeXB0b19zaWduOlgsY3J5cHRvX3NpZ25fa2V5cGFpcjpHLGNyeXB0b19zaWduX29wZW46VyxjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTOm10LGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUzpndCxjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUzp3dCxjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUzpfdCxjcnlwdG9fc2NhbGFybXVsdF9CWVRFUzpNdCxjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUzpTdCxjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTOkV0LGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM6QXQsY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTOmt0LGNyeXB0b19ib3hfTk9OQ0VCWVRFUzp4dCxjcnlwdG9fYm94X1pFUk9CWVRFUzpJdCxjcnlwdG9fYm94X0JPWFpFUk9CWVRFUzpCdCxjcnlwdG9fc2lnbl9CWVRFUzpPdCxjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUzpSdCxjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUzpQdCxjcnlwdG9fc2lnbl9TRUVEQllURVM6VHQsY3J5cHRvX2hhc2hfQllURVM6anR9LHQudXRpbHx8KHQudXRpbD17fSx0LnV0aWwuZGVjb2RlVVRGOD10LnV0aWwuZW5jb2RlVVRGOD10LnV0aWwuZW5jb2RlQmFzZTY0PXQudXRpbC5kZWNvZGVCYXNlNjQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJuYWNsLnV0aWwgbW92ZWQgaW50byBzZXBhcmF0ZSBwYWNrYWdlOiBodHRwczovL2dpdGh1Yi5jb20vZGNoZXN0L3R3ZWV0bmFjbC11dGlsLWpzXCIpfSksdC5yYW5kb21CeXRlcz1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gZXQoZSx0KSxlfSx0LnNlY3JldGJveD1mdW5jdGlvbih0LGUscil7JCh0LGUsciksWihyLGUpO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheSh3dCt0Lmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuLmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKW5bbyt3dF09dFtvXTtyZXR1cm4gdihpLG4sbi5sZW5ndGgsZSxyKSxpLnN1YmFycmF5KF90KX0sdC5zZWNyZXRib3gub3Blbj1mdW5jdGlvbih0LGUscil7JCh0LGUsciksWihyLGUpO2Zvcih2YXIgbj1uZXcgVWludDhBcnJheShfdCt0Lmxlbmd0aCksaT1uZXcgVWludDhBcnJheShuLmxlbmd0aCksbz0wO288dC5sZW5ndGg7bysrKW5bbytfdF09dFtvXTtyZXR1cm4hKG4ubGVuZ3RoPDMyKSYmKDA9PT15KGksbixuLmxlbmd0aCxlLHIpJiZpLnN1YmFycmF5KHd0KSl9LHQuc2VjcmV0Ym94LmtleUxlbmd0aD1tdCx0LnNlY3JldGJveC5ub25jZUxlbmd0aD1ndCx0LnNlY3JldGJveC5vdmVyaGVhZExlbmd0aD1fdCx0LnNjYWxhck11bHQ9ZnVuY3Rpb24odCxlKXtpZigkKHQsZSksdC5sZW5ndGghPT1TdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbiBzaXplXCIpO2lmKGUubGVuZ3RoIT09TXQpdGhyb3cgbmV3IEVycm9yKFwiYmFkIHAgc2l6ZVwiKTt2YXIgcj1uZXcgVWludDhBcnJheShNdCk7cmV0dXJuIFIocix0LGUpLHJ9LHQuc2NhbGFyTXVsdC5iYXNlPWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1TdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgbiBzaXplXCIpO3ZhciBlPW5ldyBVaW50OEFycmF5KE10KTtyZXR1cm4gUChlLHQpLGV9LHQuc2NhbGFyTXVsdC5zY2FsYXJMZW5ndGg9U3QsdC5zY2FsYXJNdWx0Lmdyb3VwRWxlbWVudExlbmd0aD1NdCx0LmJveD1mdW5jdGlvbihlLHIsbixpKXt2YXIgbz10LmJveC5iZWZvcmUobixpKTtyZXR1cm4gdC5zZWNyZXRib3goZSxyLG8pfSx0LmJveC5iZWZvcmU9ZnVuY3Rpb24odCxlKXskKHQsZSksSih0LGUpO3ZhciByPW5ldyBVaW50OEFycmF5KGt0KTtyZXR1cm4gaihyLHQsZSkscn0sdC5ib3guYWZ0ZXI9dC5zZWNyZXRib3gsdC5ib3gub3Blbj1mdW5jdGlvbihlLHIsbixpKXt2YXIgbz10LmJveC5iZWZvcmUobixpKTtyZXR1cm4gdC5zZWNyZXRib3gub3BlbihlLHIsbyl9LHQuYm94Lm9wZW4uYWZ0ZXI9dC5zZWNyZXRib3gub3Blbix0LmJveC5rZXlQYWlyPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoRXQpLGU9bmV3IFVpbnQ4QXJyYXkoQXQpO3JldHVybiBUKHQsZSkse3B1YmxpY0tleTp0LHNlY3JldEtleTplfX0sdC5ib3gua2V5UGFpci5mcm9tU2VjcmV0S2V5PWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1BdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO3ZhciBlPW5ldyBVaW50OEFycmF5KEV0KTtyZXR1cm4gUChlLHQpLHtwdWJsaWNLZXk6ZSxzZWNyZXRLZXk6bmV3IFVpbnQ4QXJyYXkodCl9fSx0LmJveC5wdWJsaWNLZXlMZW5ndGg9RXQsdC5ib3guc2VjcmV0S2V5TGVuZ3RoPUF0LHQuYm94LnNoYXJlZEtleUxlbmd0aD1rdCx0LmJveC5ub25jZUxlbmd0aD14dCx0LmJveC5vdmVyaGVhZExlbmd0aD10LnNlY3JldGJveC5vdmVyaGVhZExlbmd0aCx0LnNpZ249ZnVuY3Rpb24odCxlKXtpZigkKHQsZSksZS5sZW5ndGghPT1QdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO3ZhciByPW5ldyBVaW50OEFycmF5KE90K3QubGVuZ3RoKTtyZXR1cm4gWChyLHQsdC5sZW5ndGgsZSkscn0sdC5zaWduLm9wZW49ZnVuY3Rpb24odCxlKXtpZigyIT09YXJndW1lbnRzLmxlbmd0aCl0aHJvdyBuZXcgRXJyb3IoXCJuYWNsLnNpZ24ub3BlbiBhY2NlcHRzIDIgYXJndW1lbnRzOyBkaWQgeW91IG1lYW4gdG8gdXNlIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnk/XCIpO2lmKCQodCxlKSxlLmxlbmd0aCE9PVJ0KXRocm93IG5ldyBFcnJvcihcImJhZCBwdWJsaWMga2V5IHNpemVcIik7dmFyIHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLG49VyhyLHQsdC5sZW5ndGgsZSk7aWYobjwwKXJldHVybiBudWxsO2Zvcih2YXIgaT1uZXcgVWludDhBcnJheShuKSxvPTA7bzxpLmxlbmd0aDtvKyspaVtvXT1yW29dO3JldHVybiBpfSx0LnNpZ24uZGV0YWNoZWQ9ZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49dC5zaWduKGUsciksaT1uZXcgVWludDhBcnJheShPdCksbz0wO288aS5sZW5ndGg7bysrKWlbb109bltvXTtyZXR1cm4gaX0sdC5zaWduLmRldGFjaGVkLnZlcmlmeT1mdW5jdGlvbih0LGUscil7aWYoJCh0LGUsciksZS5sZW5ndGghPT1PdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2lnbmF0dXJlIHNpemVcIik7aWYoci5sZW5ndGghPT1SdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgcHVibGljIGtleSBzaXplXCIpO3ZhciBuLGk9bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpLG89bmV3IFVpbnQ4QXJyYXkoT3QrdC5sZW5ndGgpO2ZvcihuPTA7bjxPdDtuKyspaVtuXT1lW25dO2ZvcihuPTA7bjx0Lmxlbmd0aDtuKyspaVtuK090XT10W25dO3JldHVybiBXKG8saSxpLmxlbmd0aCxyKT49MH0sdC5zaWduLmtleVBhaXI9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgVWludDhBcnJheShSdCksZT1uZXcgVWludDhBcnJheShQdCk7cmV0dXJuIEcodCxlKSx7cHVibGljS2V5OnQsc2VjcmV0S2V5OmV9fSx0LnNpZ24ua2V5UGFpci5mcm9tU2VjcmV0S2V5PWZ1bmN0aW9uKHQpe2lmKCQodCksdC5sZW5ndGghPT1QdCl0aHJvdyBuZXcgRXJyb3IoXCJiYWQgc2VjcmV0IGtleSBzaXplXCIpO2Zvcih2YXIgZT1uZXcgVWludDhBcnJheShSdCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dFszMityXTtyZXR1cm57cHVibGljS2V5OmUsc2VjcmV0S2V5Om5ldyBVaW50OEFycmF5KHQpfX0sdC5zaWduLmtleVBhaXIuZnJvbVNlZWQ9ZnVuY3Rpb24odCl7aWYoJCh0KSx0Lmxlbmd0aCE9PVR0KXRocm93IG5ldyBFcnJvcihcImJhZCBzZWVkIHNpemVcIik7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KFJ0KSxyPW5ldyBVaW50OEFycmF5KFB0KSxuPTA7bjwzMjtuKyspcltuXT10W25dO3JldHVybiBHKGUsciwhMCkse3B1YmxpY0tleTplLHNlY3JldEtleTpyfX0sdC5zaWduLnB1YmxpY0tleUxlbmd0aD1SdCx0LnNpZ24uc2VjcmV0S2V5TGVuZ3RoPVB0LHQuc2lnbi5zZWVkTGVuZ3RoPVR0LHQuc2lnbi5zaWduYXR1cmVMZW5ndGg9T3QsdC5oYXNoPWZ1bmN0aW9uKHQpeyQodCk7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoanQpO3JldHVybiBVKGUsdCx0Lmxlbmd0aCksZX0sdC5oYXNoLmhhc2hMZW5ndGg9anQsdC52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gJCh0LGUpLDAhPT10Lmxlbmd0aCYmMCE9PWUubGVuZ3RoJiYodC5sZW5ndGg9PT1lLmxlbmd0aCYmMD09PW4odCwwLGUsMCx0Lmxlbmd0aCkpfSx0LnNldFBSTkc9ZnVuY3Rpb24odCl7ZXQ9dH0sZnVuY3Rpb24oKXt2YXIgZT1cInVuZGVmaW5lZFwiIT10eXBlb2Ygc2VsZj9zZWxmLmNyeXB0b3x8c2VsZi5tc0NyeXB0bzpudWxsO2lmKGUmJmUuZ2V0UmFuZG9tVmFsdWVzKXt2YXIgbj02NTUzNjt0LnNldFBSTkcoZnVuY3Rpb24odCxyKXt2YXIgaSxvPW5ldyBVaW50OEFycmF5KHIpO2ZvcihpPTA7aTxyO2krPW4pZS5nZXRSYW5kb21WYWx1ZXMoby5zdWJhcnJheShpLGkrTWF0aC5taW4oci1pLG4pKSk7Zm9yKGk9MDtpPHI7aSsrKXRbaV09b1tpXTtRKG8pfSl9ZWxzZSBlPXIoNjA4KSxlJiZlLnJhbmRvbUJ5dGVzJiZ0LnNldFBSTkcoZnVuY3Rpb24odCxyKXt2YXIgbixpPWUucmFuZG9tQnl0ZXMocik7Zm9yKG49MDtuPHI7bisrKXRbbl09aVtuXTtRKGkpfSl9KCl9KFwidW5kZWZpbmVkXCIhPXR5cGVvZiB0JiZ0LmV4cG9ydHM/dC5leHBvcnRzOnNlbGYubmFjbD1zZWxmLm5hY2x8fHt9KX0sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gcih0KXt2YXIgZT10Lmxlbmd0aDtpZihlJTQ+MCl0aHJvdyBuZXcgRXJyb3IoXCJJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0XCIpO3JldHVyblwiPVwiPT09dFtlLTJdPzI6XCI9XCI9PT10W2UtMV0/MTowfWZ1bmN0aW9uIG4odCl7cmV0dXJuIDMqdC5sZW5ndGgvNC1yKHQpfWZ1bmN0aW9uIGkodCl7dmFyIGUsbixpLG8sYSxmLHM9dC5sZW5ndGg7YT1yKHQpLGY9bmV3IGgoMypzLzQtYSksaT1hPjA/cy00OnM7dmFyIGM9MDtmb3IoZT0wLG49MDtlPGk7ZSs9NCxuKz0zKW89dVt0LmNoYXJDb2RlQXQoZSldPDwxOHx1W3QuY2hhckNvZGVBdChlKzEpXTw8MTJ8dVt0LmNoYXJDb2RlQXQoZSsyKV08PDZ8dVt0LmNoYXJDb2RlQXQoZSszKV0sZltjKytdPW8+PjE2JjI1NSxmW2MrK109bz4+OCYyNTUsZltjKytdPTI1NSZvO3JldHVybiAyPT09YT8obz11W3QuY2hhckNvZGVBdChlKV08PDJ8dVt0LmNoYXJDb2RlQXQoZSsxKV0+PjQsZltjKytdPTI1NSZvKToxPT09YSYmKG89dVt0LmNoYXJDb2RlQXQoZSldPDwxMHx1W3QuY2hhckNvZGVBdChlKzEpXTw8NHx1W3QuY2hhckNvZGVBdChlKzIpXT4+MixmW2MrK109bz4+OCYyNTUsZltjKytdPTI1NSZvKSxmfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHNbdD4+MTgmNjNdK3NbdD4+MTImNjNdK3NbdD4+NiY2M10rc1s2MyZ0XX1mdW5jdGlvbiBhKHQsZSxyKXtmb3IodmFyIG4saT1bXSxhPWU7YTxyO2ErPTMpbj0odFthXTw8MTYpKyh0W2ErMV08PDgpK3RbYSsyXSxpLnB1c2gobyhuKSk7cmV0dXJuIGkuam9pbihcIlwiKX1mdW5jdGlvbiBmKHQpe2Zvcih2YXIgZSxyPXQubGVuZ3RoLG49ciUzLGk9XCJcIixvPVtdLGY9MTYzODMsdT0wLGg9ci1uO3U8aDt1Kz1mKW8ucHVzaChhKHQsdSx1K2Y+aD9oOnUrZikpO3JldHVybiAxPT09bj8oZT10W3ItMV0saSs9c1tlPj4yXSxpKz1zW2U8PDQmNjNdLGkrPVwiPT1cIik6Mj09PW4mJihlPSh0W3ItMl08PDgpK3Rbci0xXSxpKz1zW2U+PjEwXSxpKz1zW2U+PjQmNjNdLGkrPXNbZTw8MiY2M10saSs9XCI9XCIpLG8ucHVzaChpKSxvLmpvaW4oXCJcIil9ZS5ieXRlTGVuZ3RoPW4sZS50b0J5dGVBcnJheT1pLGUuZnJvbUJ5dGVBcnJheT1mO2Zvcih2YXIgcz1bXSx1PVtdLGg9XCJ1bmRlZmluZWRcIiE9dHlwZW9mIFVpbnQ4QXJyYXk/VWludDhBcnJheTpBcnJheSxjPVwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiLGQ9MCxsPWMubGVuZ3RoO2Q8bDsrK2Qpc1tkXT1jW2RdLHVbYy5jaGFyQ29kZUF0KGQpXT1kO3VbXCItXCIuY2hhckNvZGVBdCgwKV09NjIsdVtcIl9cIi5jaGFyQ29kZUF0KDApXT02M30sZnVuY3Rpb24odCxlKXtlLnJlYWQ9ZnVuY3Rpb24odCxlLHIsbixpKXt2YXIgbyxhLGY9OCppLW4tMSxzPSgxPDxmKS0xLHU9cz4+MSxoPS03LGM9cj9pLTE6MCxkPXI/LTE6MSxsPXRbZStjXTtmb3IoYys9ZCxvPWwmKDE8PC1oKS0xLGw+Pj0taCxoKz1mO2g+MDtvPTI1NipvK3RbZStjXSxjKz1kLGgtPTgpO2ZvcihhPW8mKDE8PC1oKS0xLG8+Pj0taCxoKz1uO2g+MDthPTI1NiphK3RbZStjXSxjKz1kLGgtPTgpO2lmKDA9PT1vKW89MS11O2Vsc2V7aWYobz09PXMpcmV0dXJuIGE/TmFOOihsPy0xOjEpKigxLzApO2ErPU1hdGgucG93KDIsbiksby09dX1yZXR1cm4obD8tMToxKSphKk1hdGgucG93KDIsby1uKX0sZS53cml0ZT1mdW5jdGlvbih0LGUscixuLGksbyl7dmFyIGEsZixzLHU9OCpvLWktMSxoPSgxPDx1KS0xLGM9aD4+MSxkPTIzPT09aT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsbD1uPzA6by0xLHA9bj8xOi0xLGI9ZTwwfHwwPT09ZSYmMS9lPDA/MTowO2ZvcihlPU1hdGguYWJzKGUpLGlzTmFOKGUpfHxlPT09MS8wPyhmPWlzTmFOKGUpPzE6MCxhPWgpOihhPU1hdGguZmxvb3IoTWF0aC5sb2coZSkvTWF0aC5MTjIpLGUqKHM9TWF0aC5wb3coMiwtYSkpPDEmJihhLS0scyo9MiksZSs9YStjPj0xP2QvczpkKk1hdGgucG93KDIsMS1jKSxlKnM+PTImJihhKysscy89MiksYStjPj1oPyhmPTAsYT1oKTphK2M+PTE/KGY9KGUqcy0xKSpNYXRoLnBvdygyLGkpLGErPWMpOihmPWUqTWF0aC5wb3coMixjLTEpKk1hdGgucG93KDIsaSksYT0wKSk7aT49ODt0W3IrbF09MjU1JmYsbCs9cCxmLz0yNTYsaS09OCk7Zm9yKGE9YTw8aXxmLHUrPWk7dT4wO3RbcitsXT0yNTUmYSxsKz1wLGEvPTI1Nix1LT04KTt0W3IrbC1wXXw9MTI4KmJ9fSxmdW5jdGlvbih0LGUpe3ZhciByPXt9LnRvU3RyaW5nO3QuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbih0KXtyZXR1cm5cIltvYmplY3QgQXJyYXldXCI9PXIuY2FsbCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQsZSl7dmFyIHIsbjtpZih0PXQudG9Mb3dlckNhc2UoKSxkW3RdKXI9ZFt0XS5rZXksbj1kW3RdLml2O2Vsc2V7aWYoIWNbdF0pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtyPTgqY1t0XS5rZXksbj1jW3RdLml2fXZhciBpPXMoZSwhMSxyLG4pO3JldHVybiBvKHQsaS5rZXksaS5pdil9ZnVuY3Rpb24gaSh0LGUpe3ZhciByLG47aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyPWRbdF0ua2V5LG49ZFt0XS5pdjtlbHNle2lmKCFjW3RdKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7cj04KmNbdF0ua2V5LG49Y1t0XS5pdn12YXIgaT1zKGUsITEscixuKTtyZXR1cm4gYSh0LGkua2V5LGkuaXYpfWZ1bmN0aW9uIG8odCxlLHIpe2lmKHQ9dC50b0xvd2VyQ2FzZSgpLGRbdF0pcmV0dXJuIHUuY3JlYXRlQ2lwaGVyaXYodCxlLHIpO2lmKGNbdF0pcmV0dXJuIG5ldyBoKHtrZXk6ZSxpdjpyLG1vZGU6dH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIil9ZnVuY3Rpb24gYSh0LGUscil7aWYodD10LnRvTG93ZXJDYXNlKCksZFt0XSlyZXR1cm4gdS5jcmVhdGVEZWNpcGhlcml2KHQsZSxyKTtpZihjW3RdKXJldHVybiBuZXcgaCh7a2V5OmUsaXY6cixtb2RlOnQsZGVjcnlwdDohMH0pO3Rocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIil9ZnVuY3Rpb24gZigpe3JldHVybiBPYmplY3Qua2V5cyhjKS5jb25jYXQodS5nZXRDaXBoZXJzKCkpfXZhciBzPXIoMTQ2KSx1PXIoNDk0KSxoPXIoNDk4KSxjPXIoNDk5KSxkPXIoOTUpO2UuY3JlYXRlQ2lwaGVyPWUuQ2lwaGVyPW4sZS5jcmVhdGVDaXBoZXJpdj1lLkNpcGhlcml2PW8sZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPWksZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1hLGUubGlzdENpcGhlcnM9ZS5nZXRDaXBoZXJzPWZ9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIE9iamVjdC5rZXlzKGEpfXZhciBpPXIoNDk2KTtlLmNyZWF0ZUNpcGhlcj1lLkNpcGhlcj1pLmNyZWF0ZUNpcGhlcixlLmNyZWF0ZUNpcGhlcml2PWUuQ2lwaGVyaXY9aS5jcmVhdGVDaXBoZXJpdjt2YXIgbz1yKDQ5NSk7ZS5jcmVhdGVEZWNpcGhlcj1lLkRlY2lwaGVyPW8uY3JlYXRlRGVjaXBoZXIsZS5jcmVhdGVEZWNpcGhlcml2PWUuRGVjaXBoZXJpdj1vLmNyZWF0ZURlY2lwaGVyaXY7dmFyIGE9cig5NSk7ZS5saXN0Q2lwaGVycz1lLmdldENpcGhlcnM9bn0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHUuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9sYXN0PXZvaWQgMCx0aGlzLl9jaXBoZXI9bmV3IHMuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dFsxNV0scj0tMTsrK3I8ZTspaWYodFtyKygxNi1lKV0hPT1lKXRocm93IG5ldyBFcnJvcihcInVuYWJsZSB0byBkZWNyeXB0IGRhdGFcIik7aWYoMTYhPT1lKXJldHVybiB0LnNsaWNlKDAsMTYtZSl9ZnVuY3Rpb24gYShlLHIsaSl7dmFyIG89Y1tlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKGJbby5tb2RlXSxyLGksITApOlwiYXV0aFwiPT09by50eXBlP25ldyBsKGJbby5tb2RlXSxyLGksITApOm5ldyBuKGJbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGYodCxlKXt2YXIgcj1jW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1wKGUsITEsci5rZXksci5pdik7cmV0dXJuIGEodCxuLmtleSxuLml2KX12YXIgcz1yKDk0KSx1PXIoOTcpLGg9cigyKSxjPXIoOTUpLGQ9cigyMTApLGw9cigyMDMpLHA9cigxNDYpO2gobix1KSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KHRoaXMuX2F1dG9wYWRkaW5nKTspbj10aGlzLl9tb2RlLmRlY3J5cHQodGhpcyxyKSxpLnB1c2gobik7cmV0dXJuIHQuY29uY2F0KGkpfSxuLnByb3RvdHlwZS5fZmluYWw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9jYWNoZS5mbHVzaCgpO2lmKHRoaXMuX2F1dG9wYWRkaW5nKXJldHVybiBvKHRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHQpKTtpZih0KXRocm93IG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbih0KXt2YXIgZTtpZih0KXtpZih0aGlzLmNhY2hlLmxlbmd0aD4xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZX1lbHNlIGlmKHRoaXMuY2FjaGUubGVuZ3RoPj0xNilyZXR1cm4gZT10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksZTtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtpZih0aGlzLmNhY2hlLmxlbmd0aClyZXR1cm4gdGhpcy5jYWNoZX07dmFyIGI9e0VDQjpyKDIwOCksQ0JDOnIoMjA0KSxDRkI6cigyMDUpLENGQjg6cigyMDcpLENGQjE6cigyMDYpLE9GQjpyKDIwOSksQ1RSOnIoOTYpLEdDTTpyKDk2KX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDk0KSxzPXIoOTcpLHU9cigyKSxoPXIoOTUpLGM9cigxNDYpLGQ9cigyMTApLGw9cigyMDMpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyMDgpLENCQzpyKDIwNCksQ0ZCOnIoMjA1KSxDRkI4OnIoMjA3KSxDRkIxOnIoMjA2KSxPRkI6cigyMDkpLENUUjpyKDk2KSxHQ006cig5Nil9O2UuY3JlYXRlQ2lwaGVyaXY9byxlLmNyZWF0ZUNpcGhlcj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bmV3IGUoMTYpLHRoaXMuc3RhdGUuZmlsbCgwKSx0aGlzLmNhY2hlPW5ldyBlKFwiXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuW3QucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV19ZnVuY3Rpb24gaSh0KXt0PXQubWFwKG8pO3ZhciByPW5ldyBlKDE2KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHRbMF0sMCksci53cml0ZVVJbnQzMkJFKHRbMV0sNCksci53cml0ZVVJbnQzMkJFKHRbMl0sOCksci53cml0ZVVJbnQzMkJFKHRbM10sMTIpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPXQ+c3x8dDwwPyhyPU1hdGguYWJzKHQpJXMsdDwwP3MtcjpyKTp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bdFswXV5lWzBdLHRbMV1eZVsxXSx0WzJdXmVbMl0sdFszXV5lWzNdXX12YXIgZj1uZXcgZSgxNik7Zi5maWxsKDApLHQuZXhwb3J0cz1yLHIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMTsrK2U8dC5sZW5ndGg7KXRoaXMuc3RhdGVbZV1ePXRbZV07dGhpcy5fbXVsdGlwbHkoKX0sci5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixvPW4odGhpcy5oKSxmPVswLDAsMCwwXSxzPS0xOysrczwxMjg7KXtmb3IoZT0wIT09KHRoaXMuc3RhdGVbfn4ocy84KV0mMTw8Ny1zJTgpLGUmJihmPWEoZixvKSkscj0wIT09KDEmb1szXSksdD0zO3Q+MDt0LS0pb1t0XT1vW3RdPj4+MXwoMSZvW3QtMV0pPDwzMTtvWzBdPW9bMF0+Pj4xLHImJihvWzBdPW9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1pKGYpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5jYWNoZT1lLmNvbmNhdChbdGhpcy5jYWNoZSx0XSk7Zm9yKHZhciByO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspcj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChyKX0sci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goZS5jb25jYXQoW3RoaXMuY2FjaGUsZl0sMTYpKSx0aGlzLmdoYXNoKGkoWzAsdCwwLHJdKSksdGhpcy5zdGF0ZX07dmFyIHM9TWF0aC5wb3coMiwzMil9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7aS5jYWxsKHRoaXMpO3ZhciByLG49dC5tb2RlLnRvTG93ZXJDYXNlKCksbz1mW25dO3I9dC5kZWNyeXB0P1wiZGVjcnlwdFwiOlwiZW5jcnlwdFwiO3ZhciBhPXQua2V5O1wiZGVzLWVkZVwiIT09biYmXCJkZXMtZWRlLWNiY1wiIT09bnx8KGE9ZS5jb25jYXQoW2EsYS5zbGljZSgwLDgpXSkpO3ZhciBzPXQuaXY7dGhpcy5fZGVzPW8uY3JlYXRlKHtrZXk6YSxpdjpzLHR5cGU6cn0pfXZhciBpPXIoNTAwKSxvPXIoMTQ1KSxhPXIoMiksZj17XCJkZXMtZWRlMy1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkVERSksXCJkZXMtZWRlM1wiOm8uRURFLFwiZGVzLWVkZS1jYmNcIjpvLkNCQy5pbnN0YW50aWF0ZShvLkVERSksXCJkZXMtZWRlXCI6by5FREUsXCJkZXMtY2JjXCI6by5DQkMuaW5zdGFudGlhdGUoby5ERVMpLFwiZGVzLWVjYlwiOm8uREVTfTtmLmRlcz1mW1wiZGVzLWNiY1wiXSxmLmRlczM9ZltcImRlcy1lZGUzLWNiY1wiXSx0LmV4cG9ydHM9bixhKG4saSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGUodGhpcy5fZGVzLnVwZGF0ZSh0KSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3JldHVybiBuZXcgZSh0aGlzLl9kZXMuZmluYWwoKSl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlKXtlW1wiZGVzLWVjYlwiXT17a2V5OjgsaXY6MH0sZVtcImRlcy1jYmNcIl09ZS5kZXM9e2tleTo4LGl2Ojh9LGVbXCJkZXMtZWRlMy1jYmNcIl09ZS5kZXMzPXtrZXk6MjQsaXY6OH0sZVtcImRlcy1lZGUzXCJdPXtrZXk6MjQsaXY6MH0sZVtcImRlcy1lZGUtY2JjXCJdPXtrZXk6MTYsaXY6OH0sZVtcImRlcy1lZGVcIl09e2tleToxNixpdjowfX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7by5lcXVhbCh0Lmxlbmd0aCw4LFwiSW52YWxpZCBJViBsZW5ndGhcIiksdGhpcy5pdj1uZXcgQXJyYXkoOCk7Zm9yKHZhciBlPTA7ZTx0aGlzLml2Lmxlbmd0aDtlKyspdGhpcy5pdltlXT10W2VdfWZ1bmN0aW9uIGkodCl7ZnVuY3Rpb24gZShlKXt0LmNhbGwodGhpcyxlKSx0aGlzLl9jYmNJbml0KCl9YShlLHQpO2Zvcih2YXIgcj1PYmplY3Qua2V5cyhmKSxuPTA7bjxyLmxlbmd0aDtuKyspe3ZhciBpPXJbbl07ZS5wcm90b3R5cGVbaV09ZltpXX1yZXR1cm4gZS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBlKHQpfSxlfXZhciBvPXIoOTgpLGE9cigyKSxmPXt9O2UuaW5zdGFudGlhdGU9aSxmLl9jYmNJbml0PWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IG4odGhpcy5vcHRpb25zLml2KTt0aGlzLl9jYmNTdGF0ZT10fSxmLl91cGRhdGU9ZnVuY3Rpb24odCxlLHIsbil7dmFyIGk9dGhpcy5fY2JjU3RhdGUsbz10aGlzLmNvbnN0cnVjdG9yLnN1cGVyXy5wcm90b3R5cGUsYT1pLml2O2lmKFwiZW5jcnlwdFwiPT09dGhpcy50eXBlKXtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylhW2ZdXj10W2UrZl07by5fdXBkYXRlLmNhbGwodGhpcyxhLDAscixuKTtmb3IodmFyIGY9MDtmPHRoaXMuYmxvY2tTaXplO2YrKylhW2ZdPXJbbitmXX1lbHNle28uX3VwZGF0ZS5jYWxsKHRoaXMsdCxlLHIsbik7Zm9yKHZhciBmPTA7Zjx0aGlzLmJsb2NrU2l6ZTtmKyspcltuK2ZdXj1hW2ZdO2Zvcih2YXIgZj0wO2Y8dGhpcy5ibG9ja1NpemU7ZisrKWFbZl09dFtlK2ZdfX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMub3B0aW9ucz10LHRoaXMudHlwZT10aGlzLm9wdGlvbnMudHlwZSx0aGlzLmJsb2NrU2l6ZT04LHRoaXMuX2luaXQoKSx0aGlzLmJ1ZmZlcj1uZXcgQXJyYXkodGhpcy5ibG9ja1NpemUpLHRoaXMuYnVmZmVyT2ZmPTB9dmFyIGk9cig5OCk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24oKXt9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gMD09PXQubGVuZ3RoP1tdOlwiZGVjcnlwdFwiPT09dGhpcy50eXBlP3RoaXMuX3VwZGF0ZURlY3J5cHQodCk6dGhpcy5fdXBkYXRlRW5jcnlwdCh0KX0sbi5wcm90b3R5cGUuX2J1ZmZlcj1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1NYXRoLm1pbih0aGlzLmJ1ZmZlci5sZW5ndGgtdGhpcy5idWZmZXJPZmYsdC5sZW5ndGgtZSksbj0wO248cjtuKyspdGhpcy5idWZmZXJbdGhpcy5idWZmZXJPZmYrbl09dFtlK25dO3JldHVybiB0aGlzLmJ1ZmZlck9mZis9cixyfSxuLnByb3RvdHlwZS5fZmx1c2hCdWZmZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsdCxlKSx0aGlzLmJ1ZmZlck9mZj0wLHRoaXMuYmxvY2tTaXplfSxuLnByb3RvdHlwZS5fdXBkYXRlRW5jcnlwdD1mdW5jdGlvbih0KXt2YXIgZT0wLHI9MCxuPSh0aGlzLmJ1ZmZlck9mZit0Lmxlbmd0aCkvdGhpcy5ibG9ja1NpemV8MCxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTswIT09dGhpcy5idWZmZXJPZmYmJihlKz10aGlzLl9idWZmZXIodCxlKSx0aGlzLmJ1ZmZlck9mZj09PXRoaXMuYnVmZmVyLmxlbmd0aCYmKHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscikpKTtmb3IodmFyIG89dC5sZW5ndGgtKHQubGVuZ3RoLWUpJXRoaXMuYmxvY2tTaXplO2U8bztlKz10aGlzLmJsb2NrU2l6ZSl0aGlzLl91cGRhdGUodCxlLGkscikscis9dGhpcy5ibG9ja1NpemU7Zm9yKDtlPHQubGVuZ3RoO2UrKyx0aGlzLmJ1ZmZlck9mZisrKXRoaXMuYnVmZmVyW3RoaXMuYnVmZmVyT2ZmXT10W2VdO3JldHVybiBpfSxuLnByb3RvdHlwZS5fdXBkYXRlRGVjcnlwdD1mdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPTAsbj1NYXRoLmNlaWwoKHRoaXMuYnVmZmVyT2ZmK3QubGVuZ3RoKS90aGlzLmJsb2NrU2l6ZSktMSxpPW5ldyBBcnJheShuKnRoaXMuYmxvY2tTaXplKTtuPjA7bi0tKWUrPXRoaXMuX2J1ZmZlcih0LGUpLHIrPXRoaXMuX2ZsdXNoQnVmZmVyKGkscik7cmV0dXJuIGUrPXRoaXMuX2J1ZmZlcih0LGUpLGl9LG4ucHJvdG90eXBlLmZpbmFsPWZ1bmN0aW9uKHQpe3ZhciBlO3QmJihlPXRoaXMudXBkYXRlKHQpKTt2YXIgcjtyZXR1cm4gcj1cImVuY3J5cHRcIj09PXRoaXMudHlwZT90aGlzLl9maW5hbEVuY3J5cHQoKTp0aGlzLl9maW5hbERlY3J5cHQoKSxlP2UuY29uY2F0KHIpOnJ9LG4ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24odCxlKXtpZigwPT09ZSlyZXR1cm4hMTtmb3IoO2U8dC5sZW5ndGg7KXRbZSsrXT0wO3JldHVybiEwfSxuLnByb3RvdHlwZS5fZmluYWxFbmNyeXB0PWZ1bmN0aW9uKCl7aWYoIXRoaXMuX3BhZCh0aGlzLmJ1ZmZlcix0aGlzLmJ1ZmZlck9mZikpcmV0dXJuW107dmFyIHQ9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fdXBkYXRlKHRoaXMuYnVmZmVyLDAsdCwwKSx0fSxuLnByb3RvdHlwZS5fdW5wYWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHR9LG4ucHJvdG90eXBlLl9maW5hbERlY3J5cHQ9ZnVuY3Rpb24oKXtpLmVxdWFsKHRoaXMuYnVmZmVyT2ZmLHRoaXMuYmxvY2tTaXplLFwiTm90IGVub3VnaCBkYXRhIHRvIGRlY3J5cHRcIik7dmFyIHQ9bmV3IEFycmF5KHRoaXMuYmxvY2tTaXplKTtyZXR1cm4gdGhpcy5fZmx1c2hCdWZmZXIodCwwKSx0aGlzLl91bnBhZCh0KX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKCl7dGhpcy50bXA9bmV3IEFycmF5KDIpLHRoaXMua2V5cz1udWxsfWZ1bmN0aW9uIGkodCl7dS5jYWxsKHRoaXMsdCk7dmFyIGU9bmV3IG47dGhpcy5fZGVzU3RhdGU9ZSx0aGlzLmRlcml2ZUtleXMoZSx0LmtleSl9dmFyIG89cig5OCksYT1yKDIpLGY9cigxNDUpLHM9Zi51dGlscyx1PWYuQ2lwaGVyO2EoaSx1KSx0LmV4cG9ydHM9aSxpLmNyZWF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IGkodCl9O3ZhciBoPVsxLDEsMiwyLDIsMiwyLDIsMSwyLDIsMiwyLDIsMiwxXTtpLnByb3RvdHlwZS5kZXJpdmVLZXlzPWZ1bmN0aW9uKHQsZSl7dC5rZXlzPW5ldyBBcnJheSgzMiksby5lcXVhbChlLmxlbmd0aCx0aGlzLmJsb2NrU2l6ZSxcIkludmFsaWQga2V5IGxlbmd0aFwiKTt2YXIgcj1zLnJlYWRVSW50MzJCRShlLDApLG49cy5yZWFkVUludDMyQkUoZSw0KTtzLnBjMShyLG4sdC50bXAsMCkscj10LnRtcFswXSxuPXQudG1wWzFdO2Zvcih2YXIgaT0wO2k8dC5rZXlzLmxlbmd0aDtpKz0yKXt2YXIgYT1oW2k+Pj4xXTtyPXMucjI4c2hsKHIsYSksbj1zLnIyOHNobChuLGEpLHMucGMyKHIsbix0LmtleXMsaSl9fSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuX2Rlc1N0YXRlLG89cy5yZWFkVUludDMyQkUodCxlKSxhPXMucmVhZFVJbnQzMkJFKHQsZSs0KTtzLmlwKG8sYSxpLnRtcCwwKSxvPWkudG1wWzBdLGE9aS50bXBbMV0sXCJlbmNyeXB0XCI9PT10aGlzLnR5cGU/dGhpcy5fZW5jcnlwdChpLG8sYSxpLnRtcCwwKTp0aGlzLl9kZWNyeXB0KGksbyxhLGkudG1wLDApLG89aS50bXBbMF0sYT1pLnRtcFsxXSxzLndyaXRlVUludDMyQkUocixvLG4pLHMud3JpdGVVSW50MzJCRShyLGEsbis0KX0saS5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10Lmxlbmd0aC1lLG49ZTtuPHQubGVuZ3RoO24rKyl0W25dPXI7cmV0dXJuITB9LGkucHJvdG90eXBlLl91bnBhZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dFt0Lmxlbmd0aC0xXSxyPXQubGVuZ3RoLWU7cjx0Lmxlbmd0aDtyKyspby5lcXVhbCh0W3JdLGUpO3JldHVybiB0LnNsaWNlKDAsdC5sZW5ndGgtZSl9LGkucHJvdG90eXBlLl9lbmNyeXB0PWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPWUsYT1yLGY9MDtmPHQua2V5cy5sZW5ndGg7Zis9Mil7dmFyIHU9dC5rZXlzW2ZdLGg9dC5rZXlzW2YrMV07cy5leHBhbmQoYSx0LnRtcCwwKSx1Xj10LnRtcFswXSxoXj10LnRtcFsxXTt2YXIgYz1zLnN1YnN0aXR1dGUodSxoKSxkPXMucGVybXV0ZShjKSxsPWE7YT0ob15kKT4+PjAsbz1sfXMucmlwKGEsbyxuLGkpfSxpLnByb3RvdHlwZS5fZGVjcnlwdD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz1yLGE9ZSxmPXQua2V5cy5sZW5ndGgtMjtmPj0wO2YtPTIpe3ZhciB1PXQua2V5c1tmXSxoPXQua2V5c1tmKzFdO3MuZXhwYW5kKG8sdC50bXAsMCksdV49dC50bXBbMF0saF49dC50bXBbMV07dmFyIGM9cy5zdWJzdGl0dXRlKHUsaCksZD1zLnBlcm11dGUoYyksbD1vO289KGFeZCk+Pj4wLGE9bH1zLnJpcChvLGEsbixpKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7by5lcXVhbChlLmxlbmd0aCwyNCxcIkludmFsaWQga2V5IGxlbmd0aFwiKTt2YXIgcj1lLnNsaWNlKDAsOCksbj1lLnNsaWNlKDgsMTYpLGk9ZS5zbGljZSgxNiwyNCk7XCJlbmNyeXB0XCI9PT10P3RoaXMuY2lwaGVycz1bdS5jcmVhdGUoe3R5cGU6XCJlbmNyeXB0XCIsa2V5OnJ9KSx1LmNyZWF0ZSh7dHlwZTpcImRlY3J5cHRcIixrZXk6bn0pLHUuY3JlYXRlKHt0eXBlOlwiZW5jcnlwdFwiLGtleTppfSldOnRoaXMuY2lwaGVycz1bdS5jcmVhdGUoe3R5cGU6XCJkZWNyeXB0XCIsa2V5Oml9KSx1LmNyZWF0ZSh7dHlwZTpcImVuY3J5cHRcIixrZXk6bn0pLHUuY3JlYXRlKHt0eXBlOlwiZGVjcnlwdFwiLGtleTpyfSldfWZ1bmN0aW9uIGkodCl7cy5jYWxsKHRoaXMsdCk7dmFyIGU9bmV3IG4odGhpcy50eXBlLHRoaXMub3B0aW9ucy5rZXkpO3RoaXMuX2VkZVN0YXRlPWV9dmFyIG89cig5OCksYT1yKDIpLGY9cigxNDUpLHM9Zi5DaXBoZXIsdT1mLkRFUzthKGkscyksdC5leHBvcnRzPWksaS5jcmVhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBpKHQpfSxpLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe3ZhciBpPXRoaXMuX2VkZVN0YXRlO2kuY2lwaGVyc1swXS5fdXBkYXRlKHQsZSxyLG4pLGkuY2lwaGVyc1sxXS5fdXBkYXRlKHIsbixyLG4pLGkuY2lwaGVyc1syXS5fdXBkYXRlKHIsbixyLG4pfSxpLnByb3RvdHlwZS5fcGFkPXUucHJvdG90eXBlLl9wYWQsaS5wcm90b3R5cGUuX3VucGFkPXUucHJvdG90eXBlLl91bnBhZH0sZnVuY3Rpb24odCxlKXtcInVzZSBzdHJpY3RcIjtlLnJlYWRVSW50MzJCRT1mdW5jdGlvbih0LGUpe3ZhciByPXRbMCtlXTw8MjR8dFsxK2VdPDwxNnx0WzIrZV08PDh8dFszK2VdO3JldHVybiByPj4+MH0sZS53cml0ZVVJbnQzMkJFPWZ1bmN0aW9uKHQsZSxyKXt0WzArcl09ZT4+PjI0LHRbMStyXT1lPj4+MTYmMjU1LHRbMityXT1lPj4+OCYyNTUsdFszK3JdPTI1NSZlfSxlLmlwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89MCxhPTY7YT49MDthLT0yKXtmb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+Pj5mK2EmMTtmb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PXQ+Pj5mK2EmMX1mb3IodmFyIGE9NjthPj0wO2EtPTIpe2Zvcih2YXIgZj0xO2Y8PTI1O2YrPTgpbzw8PTEsb3w9ZT4+PmYrYSYxO2Zvcih2YXIgZj0xO2Y8PTI1O2YrPTgpbzw8PTEsb3w9dD4+PmYrYSYxfXJbbiswXT1pPj4+MCxyW24rMV09bz4+PjB9LGUucmlwPWZ1bmN0aW9uKHQsZSxyLG4pe2Zvcih2YXIgaT0wLG89MCxhPTA7YTw0O2ErKylmb3IodmFyIGY9MjQ7Zj49MDtmLT04KWk8PD0xLGl8PWU+Pj5mK2EmMSxpPDw9MSxpfD10Pj4+ZithJjE7Zm9yKHZhciBhPTQ7YTw4O2ErKylmb3IodmFyIGY9MjQ7Zj49MDtmLT04KW88PD0xLG98PWU+Pj5mK2EmMSxvPDw9MSxvfD10Pj4+ZithJjE7cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5wYzE9ZnVuY3Rpb24odCxlLHIsbil7Zm9yKHZhciBpPTAsbz0wLGE9NzthPj01O2EtLSl7XG5mb3IodmFyIGY9MDtmPD0yNDtmKz04KWk8PD0xLGl8PWU+PmYrYSYxO2Zvcih2YXIgZj0wO2Y8PTI0O2YrPTgpaTw8PTEsaXw9dD4+ZithJjF9Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClpPDw9MSxpfD1lPj5mK2EmMTtmb3IodmFyIGE9MTthPD0zO2ErKyl7Zm9yKHZhciBmPTA7Zjw9MjQ7Zis9OClvPDw9MSxvfD1lPj5mK2EmMTtmb3IodmFyIGY9MDtmPD0yNDtmKz04KW88PD0xLG98PXQ+PmYrYSYxfWZvcih2YXIgZj0wO2Y8PTI0O2YrPTgpbzw8PTEsb3w9dD4+ZithJjE7cltuKzBdPWk+Pj4wLHJbbisxXT1vPj4+MH0sZS5yMjhzaGw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdDw8ZSYyNjg0MzU0NTV8dD4+PjI4LWV9O3ZhciByPVsxNCwxMSwxNyw0LDI3LDIzLDI1LDAsMTMsMjIsNywxOCw1LDksMTYsMjQsMiwyMCwxMiwyMSwxLDgsMTUsMjYsMTUsNCwyNSwxOSw5LDEsMjYsMTYsNSwxMSwyMyw4LDEyLDcsMTcsMCwyMiwzLDEwLDE0LDYsMjAsMjcsMjRdO2UucGMyPWZ1bmN0aW9uKHQsZSxuLGkpe2Zvcih2YXIgbz0wLGE9MCxmPXIubGVuZ3RoPj4+MSxzPTA7czxmO3MrKylvPDw9MSxvfD10Pj4+cltzXSYxO2Zvcih2YXIgcz1mO3M8ci5sZW5ndGg7cysrKWE8PD0xLGF8PWU+Pj5yW3NdJjE7bltpKzBdPW8+Pj4wLG5baSsxXT1hPj4+MH0sZS5leHBhbmQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPTAsaT0wO249KDEmdCk8PDV8dD4+PjI3O2Zvcih2YXIgbz0yMztvPj0xNTtvLT00KW48PD02LG58PXQ+Pj5vJjYzO2Zvcih2YXIgbz0xMTtvPj0zO28tPTQpaXw9dD4+Pm8mNjMsaTw8PTY7aXw9KDMxJnQpPDwxfHQ+Pj4zMSxlW3IrMF09bj4+PjAsZVtyKzFdPWk+Pj4wfTt2YXIgbj1bMTQsMCw0LDE1LDEzLDcsMSw0LDIsMTQsMTUsMiwxMSwxMyw4LDEsMywxMCwxMCw2LDYsMTIsMTIsMTEsNSw5LDksNSwwLDMsNyw4LDQsMTUsMSwxMiwxNCw4LDgsMiwxMyw0LDYsOSwyLDEsMTEsNywxNSw1LDEyLDExLDksMyw3LDE0LDMsMTAsMTAsMCw1LDYsMCwxMywxNSwzLDEsMTMsOCw0LDE0LDcsNiwxNSwxMSwyLDMsOCw0LDE0LDksMTIsNywwLDIsMSwxMywxMCwxMiw2LDAsOSw1LDExLDEwLDUsMCwxMywxNCw4LDcsMTAsMTEsMSwxMCwzLDQsMTUsMTMsNCwxLDIsNSwxMSw4LDYsMTIsNyw2LDEyLDksMCwzLDUsMiwxNCwxNSw5LDEwLDEzLDAsNyw5LDAsMTQsOSw2LDMsMyw0LDE1LDYsNSwxMCwxLDIsMTMsOCwxMiw1LDcsMTQsMTEsMTIsNCwxMSwyLDE1LDgsMSwxMywxLDYsMTAsNCwxMyw5LDAsOCw2LDE1LDksMyw4LDAsNywxMSw0LDEsMTUsMiwxNCwxMiwzLDUsMTEsMTAsNSwxNCwyLDcsMTIsNywxMywxMyw4LDE0LDExLDMsNSwwLDYsNiwxNSw5LDAsMTAsMywxLDQsMiw3LDgsMiw1LDEyLDExLDEsMTIsMTAsNCwxNCwxNSw5LDEwLDMsNiwxNSw5LDAsMCw2LDEyLDEwLDExLDEsNywxMywxMyw4LDE1LDksMSw0LDMsNSwxNCwxMSw1LDEyLDIsNyw4LDIsNCwxNCwyLDE0LDEyLDExLDQsMiwxLDEyLDcsNCwxMCw3LDExLDEzLDYsMSw4LDUsNSwwLDMsMTUsMTUsMTAsMTMsMywwLDksMTQsOCw5LDYsNCwxMSwyLDgsMSwxMiwxMSw3LDEwLDEsMTMsMTQsNywyLDgsMTMsMTUsNiw5LDE1LDEyLDAsNSw5LDYsMTAsMyw0LDAsNSwxNCwzLDEyLDEwLDEsMTUsMTAsNCwxNSwyLDksNywyLDEyLDYsOSw4LDUsMCw2LDEzLDEsMywxMyw0LDE0LDE0LDAsNywxMSw1LDMsMTEsOCw5LDQsMTQsMywxNSwyLDUsMTIsMiw5LDgsNSwxMiwxNSwzLDEwLDcsMTEsMCwxNCw0LDEsMTAsNywxLDYsMTMsMCwxMSw4LDYsMTMsNCwxMywxMSwwLDIsMTEsMTQsNywxNSw0LDAsOSw4LDEsMTMsMTAsMywxNCwxMiwzLDksNSw3LDEyLDUsMiwxMCwxNSw2LDgsMSw2LDEsNiw0LDExLDExLDEzLDEzLDgsMTIsMSwzLDQsNywxMCwxNCw3LDEwLDksMTUsNSw2LDAsOCwxNSwwLDE0LDUsMiw5LDMsMiwxMiwxMywxLDIsMTUsOCwxMyw0LDgsNiwxMCwxNSwzLDExLDcsMSw0LDEwLDEyLDksNSwzLDYsMTQsMTEsNSwwLDAsMTQsMTIsOSw3LDIsNywyLDExLDEsNCwxNCwxLDcsOSw0LDEyLDEwLDE0LDgsMiwxMywwLDE1LDYsMTIsMTAsOSwxMywwLDE1LDMsMyw1LDUsNiw4LDExXTtlLnN1YnN0aXR1dGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9MCxpPTA7aTw0O2krKyl7dmFyIG89dD4+PjE4LTYqaSY2MyxhPW5bNjQqaStvXTtyPDw9NCxyfD1hfWZvcih2YXIgaT0wO2k8NDtpKyspe3ZhciBvPWU+Pj4xOC02KmkmNjMsYT1uWzI1Nis2NCppK29dO3I8PD00LHJ8PWF9cmV0dXJuIHI+Pj4wfTt2YXIgaT1bMTYsMjUsMTIsMTEsMywyMCw0LDE1LDMxLDE3LDksNiwyNywxNCwxLDIyLDMwLDI0LDgsMTgsMCw1LDI5LDIzLDEzLDE5LDIsMjYsMTAsMjEsMjgsN107ZS5wZXJtdXRlPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0wLHI9MDtyPGkubGVuZ3RoO3IrKyllPDw9MSxlfD10Pj4+aVtyXSYxO3JldHVybiBlPj4+MH0sZS5wYWRTcGxpdD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXQudG9TdHJpbmcoMik7bi5sZW5ndGg8ZTspbj1cIjBcIituO2Zvcih2YXIgaT1bXSxvPTA7bzxlO28rPXIpaS5wdXNoKG4uc2xpY2UobyxvK3IpKTtyZXR1cm4gaS5qb2luKFwiIFwiKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXtjLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGU9bFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2hUeXBlPWUuaGFzaCx0aGlzLl9oYXNoPXMoZS5oYXNoKSx0aGlzLl90YWc9ZS5pZCx0aGlzLl9zaWduVHlwZT1lLnNpZ259ZnVuY3Rpb24gaSh0KXtjLldyaXRhYmxlLmNhbGwodGhpcyk7dmFyIGU9bFt0XTtpZighZSl0aHJvdyBuZXcgRXJyb3IoXCJVbmtub3duIG1lc3NhZ2UgZGlnZXN0XCIpO3RoaXMuX2hhc2g9cyhlLmhhc2gpLHRoaXMuX3RhZz1lLmlkLHRoaXMuX3NpZ25UeXBlPWUuc2lnbn1mdW5jdGlvbiBvKHQpe3JldHVybiBuZXcgbih0KX1mdW5jdGlvbiBhKHQpe3JldHVybiBuZXcgaSh0KX12YXIgZj1yKDIxMSkscz1yKDU5KSx1PXIoMiksaD1yKDU0MiksYz1yKDMxKSxkPXIoNTQzKSxsPXt9O09iamVjdC5rZXlzKGYpLmZvckVhY2goZnVuY3Rpb24odCl7bFt0XT1sW3QudG9Mb3dlckNhc2UoKV09Zlt0XX0pLHUobixjLldyaXRhYmxlKSxuLnByb3RvdHlwZS5fd3JpdGU9ZnVuY3Rpb24odCxlLHIpe3RoaXMuX2hhc2gudXBkYXRlKHQpLHIoKX0sbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscil7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQmJih0PW5ldyBlKHQscikpLHRoaXMuX2hhc2gudXBkYXRlKHQpLHRoaXN9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxyKXt0aGlzLmVuZCgpO3ZhciBuPXRoaXMuX2hhc2guZGlnZXN0KCksaT1oKGUuY29uY2F0KFt0aGlzLl90YWcsbl0pLHQsdGhpcy5faGFzaFR5cGUsdGhpcy5fc2lnblR5cGUpO3JldHVybiByP2kudG9TdHJpbmcocik6aX0sdShpLGMuV3JpdGFibGUpLGkucHJvdG90eXBlLl93cml0ZT1mdW5jdGlvbih0LGUscil7dGhpcy5faGFzaC51cGRhdGUodCkscigpfSxpLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxyKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSksdGhpcy5faGFzaC51cGRhdGUodCksdGhpc30saS5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IGUocixuKSksdGhpcy5lbmQoKTt2YXIgaT10aGlzLl9oYXNoLmRpZ2VzdCgpO3JldHVybiBkKHIsZS5jb25jYXQoW3RoaXMuX3RhZyxpXSksdCx0aGlzLl9zaWduVHlwZSl9LHQuZXhwb3J0cz17U2lnbjpvLFZlcmlmeTphLGNyZWF0ZVNpZ246byxjcmVhdGVWZXJpZnk6YX19KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCl7dmFyIGU9byh0KSxyPWUudG9SZWQoYS5tb250KHQubW9kdWx1cykpLnJlZFBvdyhuZXcgYSh0LnB1YmxpY0V4cG9uZW50KSkuZnJvbVJlZCgpO3JldHVybntibGluZGVyOnIsdW5ibGluZGVyOmUuaW52bSh0Lm1vZHVsdXMpfX1mdW5jdGlvbiBpKHQscil7dmFyIGk9bihyKSxvPXIubW9kdWx1cy5ieXRlTGVuZ3RoKCksZj0oYS5tb250KHIubW9kdWx1cyksbmV3IGEodCkubXVsKGkuYmxpbmRlcikudW1vZChyLm1vZHVsdXMpKSxzPWYudG9SZWQoYS5tb250KHIucHJpbWUxKSksdT1mLnRvUmVkKGEubW9udChyLnByaW1lMikpLGg9ci5jb2VmZmljaWVudCxjPXIucHJpbWUxLGQ9ci5wcmltZTIsbD1zLnJlZFBvdyhyLmV4cG9uZW50MSkscD11LnJlZFBvdyhyLmV4cG9uZW50Mik7bD1sLmZyb21SZWQoKSxwPXAuZnJvbVJlZCgpO3ZhciBiPWwuaXN1YihwKS5pbXVsKGgpLnVtb2QoYyk7cmV0dXJuIGIuaW11bChkKSxwLmlhZGQoYiksbmV3IGUocC5pbXVsKGkudW5ibGluZGVyKS51bW9kKHIubW9kdWx1cykudG9BcnJheSghMSxvKSl9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9dC5tb2R1bHVzLmJ5dGVMZW5ndGgoKSxyPW5ldyBhKGYoZSkpO3IuY21wKHQubW9kdWx1cyk+PTB8fCFyLnVtb2QodC5wcmltZTEpfHwhci51bW9kKHQucHJpbWUyKTspcj1uZXcgYShmKGUpKTtyZXR1cm4gcn12YXIgYT1yKDE4KSxmPXIoNjEpO3QuZXhwb3J0cz1pLGkuZ2V0cj1vfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLnR5cGU9dCx0aGlzLnA9bmV3IG8oZS5wLDE2KSx0aGlzLnJlZD1lLnByaW1lP28ucmVkKGUucHJpbWUpOm8ubW9udCh0aGlzLnApLHRoaXMuemVybz1uZXcgbygwKS50b1JlZCh0aGlzLnJlZCksdGhpcy5vbmU9bmV3IG8oMSkudG9SZWQodGhpcy5yZWQpLHRoaXMudHdvPW5ldyBvKDIpLnRvUmVkKHRoaXMucmVkKSx0aGlzLm49ZS5uJiZuZXcgbyhlLm4sMTYpLHRoaXMuZz1lLmcmJnRoaXMucG9pbnRGcm9tSlNPTihlLmcsZS5nUmVkKSx0aGlzLl93bmFmVDE9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMj1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQzPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDQ9bmV3IEFycmF5KDQpO3ZhciByPXRoaXMubiYmdGhpcy5wLmRpdih0aGlzLm4pOyFyfHxyLmNtcG4oMTAwKT4wP3RoaXMucmVkTj1udWxsOih0aGlzLl9tYXh3ZWxsVHJpY2s9ITAsdGhpcy5yZWROPXRoaXMubi50b1JlZCh0aGlzLnJlZCkpfWZ1bmN0aW9uIGkodCxlKXt0aGlzLmN1cnZlPXQsdGhpcy50eXBlPWUsdGhpcy5wcmVjb21wdXRlZD1udWxsfXZhciBvPXIoMTgpLGE9cigxOSksZj1hLnV0aWxzLHM9Zi5nZXROQUYsdT1mLmdldEpTRixoPWYuYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkXCIpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUuX2ZpeGVkTmFmTXVsPWZ1bmN0aW9uKHQsZSl7aCh0LnByZWNvbXB1dGVkKTt2YXIgcj10Ll9nZXREb3VibGVzKCksbj1zKGUsMSksaT0oMTw8ci5zdGVwKzEpLShyLnN0ZXAlMj09PTA/MjoxKTtpLz0zO2Zvcih2YXIgbz1bXSxhPTA7YTxuLmxlbmd0aDthKz1yLnN0ZXApe2Zvcih2YXIgZj0wLGU9YStyLnN0ZXAtMTtlPj1hO2UtLSlmPShmPDwxKStuW2VdO28ucHVzaChmKX1mb3IodmFyIHU9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGM9dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLGQ9aTtkPjA7ZC0tKXtmb3IodmFyIGE9MDthPG8ubGVuZ3RoO2ErKyl7dmFyIGY9b1thXTtmPT09ZD9jPWMubWl4ZWRBZGQoci5wb2ludHNbYV0pOmY9PT0tZCYmKGM9Yy5taXhlZEFkZChyLnBvaW50c1thXS5uZWcoKSkpfXU9dS5hZGQoYyl9cmV0dXJuIHUudG9QKCl9LG4ucHJvdG90eXBlLl93bmFmTXVsPWZ1bmN0aW9uKHQsZSl7dmFyIHI9NCxuPXQuX2dldE5BRlBvaW50cyhyKTtyPW4ud25kO2Zvcih2YXIgaT1uLnBvaW50cyxvPXMoZSxyKSxhPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxmPW8ubGVuZ3RoLTE7Zj49MDtmLS0pe2Zvcih2YXIgZT0wO2Y+PTAmJjA9PT1vW2ZdO2YtLSllKys7aWYoZj49MCYmZSsrLGE9YS5kYmxwKGUpLGY8MClicmVhazt2YXIgdT1vW2ZdO2goMCE9PXUpLGE9XCJhZmZpbmVcIj09PXQudHlwZT91PjA/YS5taXhlZEFkZChpW3UtMT4+MV0pOmEubWl4ZWRBZGQoaVstdS0xPj4xXS5uZWcoKSk6dT4wP2EuYWRkKGlbdS0xPj4xXSk6YS5hZGQoaVstdS0xPj4xXS5uZWcoKSl9cmV0dXJuXCJhZmZpbmVcIj09PXQudHlwZT9hLnRvUCgpOmF9LG4ucHJvdG90eXBlLl93bmFmTXVsQWRkPWZ1bmN0aW9uKHQsZSxyLG4saSl7Zm9yKHZhciBvPXRoaXMuX3duYWZUMSxhPXRoaXMuX3duYWZUMixmPXRoaXMuX3duYWZUMyxoPTAsYz0wO2M8bjtjKyspe3ZhciBkPWVbY10sbD1kLl9nZXROQUZQb2ludHModCk7b1tjXT1sLnduZCxhW2NdPWwucG9pbnRzfWZvcih2YXIgYz1uLTE7Yz49MTtjLT0yKXt2YXIgcD1jLTEsYj1jO2lmKDE9PT1vW3BdJiYxPT09b1tiXSl7dmFyIHY9W2VbcF0sbnVsbCxudWxsLGVbYl1dOzA9PT1lW3BdLnkuY21wKGVbYl0ueSk/KHZbMV09ZVtwXS5hZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTowPT09ZVtwXS55LmNtcChlW2JdLnkucmVkTmVnKCkpPyh2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLmFkZChlW2JdLm5lZygpKSk6KHZbMV09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdKSx2WzJdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXS5uZWcoKSkpO3ZhciB5PVstMywtMSwtNSwtNywwLDcsNSwxLDNdLG09dShyW3BdLHJbYl0pO2g9TWF0aC5tYXgobVswXS5sZW5ndGgsaCksZltwXT1uZXcgQXJyYXkoaCksZltiXT1uZXcgQXJyYXkoaCk7Zm9yKHZhciBnPTA7ZzxoO2crKyl7dmFyIHc9MHxtWzBdW2ddLF89MHxtWzFdW2ddO2ZbcF1bZ109eVszKih3KzEpKyhfKzEpXSxmW2JdW2ddPTAsYVtwXT12fX1lbHNlIGZbcF09cyhyW3BdLG9bcF0pLGZbYl09cyhyW2JdLG9bYl0pLGg9TWF0aC5tYXgoZltwXS5sZW5ndGgsaCksaD1NYXRoLm1heChmW2JdLmxlbmd0aCxoKX1mb3IodmFyIE09dGhpcy5qcG9pbnQobnVsbCxudWxsLG51bGwpLFM9dGhpcy5fd25hZlQ0LGM9aDtjPj0wO2MtLSl7Zm9yKHZhciBFPTA7Yz49MDspe2Zvcih2YXIgQT0hMCxnPTA7ZzxuO2crKylTW2ddPTB8ZltnXVtjXSwwIT09U1tnXSYmKEE9ITEpO2lmKCFBKWJyZWFrO0UrKyxjLS19aWYoYz49MCYmRSsrLE09TS5kYmxwKEUpLGM8MClicmVhaztmb3IodmFyIGc9MDtnPG47ZysrKXt2YXIgZCxrPVNbZ107MCE9PWsmJihrPjA/ZD1hW2ddW2stMT4+MV06azwwJiYoZD1hW2ddWy1rLTE+PjFdLm5lZygpKSxNPVwiYWZmaW5lXCI9PT1kLnR5cGU/TS5taXhlZEFkZChkKTpNLmFkZChkKSl9fWZvcih2YXIgYz0wO2M8bjtjKyspYVtjXT1udWxsO3JldHVybiBpP006TS50b1AoKX0sbi5CYXNlUG9pbnQ9aSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0saS5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS52YWxpZGF0ZSh0aGlzKX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCxlKXt0PWYudG9BcnJheSh0LGUpO3ZhciByPXRoaXMucC5ieXRlTGVuZ3RoKCk7aWYoKDQ9PT10WzBdfHw2PT09dFswXXx8Nz09PXRbMF0pJiZ0Lmxlbmd0aC0xPT09MipyKXs2PT09dFswXT9oKHRbdC5sZW5ndGgtMV0lMj09PTApOjc9PT10WzBdJiZoKHRbdC5sZW5ndGgtMV0lMj09PTEpO3ZhciBuPXRoaXMucG9pbnQodC5zbGljZSgxLDErciksdC5zbGljZSgxK3IsMSsyKnIpKTtyZXR1cm4gbn1pZigoMj09PXRbMF18fDM9PT10WzBdKSYmdC5sZW5ndGgtMT09PXIpcmV0dXJuIHRoaXMucG9pbnRGcm9tWCh0LnNsaWNlKDEsMStyKSwzPT09dFswXSk7dGhyb3cgbmV3IEVycm9yKFwiVW5rbm93biBwb2ludCBmb3JtYXRcIil9LGkucHJvdG90eXBlLmVuY29kZUNvbXByZXNzZWQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuZW5jb2RlKHQsITApfSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkscj10aGlzLmdldFgoKS50b0FycmF5KFwiYmVcIixlKTtyZXR1cm4gdD9bdGhpcy5nZXRZKCkuaXNFdmVuKCk/MjozXS5jb25jYXQocik6WzRdLmNvbmNhdChyLHRoaXMuZ2V0WSgpLnRvQXJyYXkoXCJiZVwiLGUpKX0saS5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGYuZW5jb2RlKHRoaXMuX2VuY29kZShlKSx0KX0saS5wcm90b3R5cGUucHJlY29tcHV0ZT1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkKXJldHVybiB0aGlzO3ZhciBlPXtkb3VibGVzOm51bGwsbmFmOm51bGwsYmV0YTpudWxsfTtyZXR1cm4gZS5uYWY9dGhpcy5fZ2V0TkFGUG9pbnRzKDgpLGUuZG91Ymxlcz10aGlzLl9nZXREb3VibGVzKDQsdCksZS5iZXRhPXRoaXMuX2dldEJldGEoKSx0aGlzLnByZWNvbXB1dGVkPWUsdGhpc30saS5wcm90b3R5cGUuX2hhc0RvdWJsZXM9ZnVuY3Rpb24odCl7aWYoIXRoaXMucHJlY29tcHV0ZWQpcmV0dXJuITE7dmFyIGU9dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzO3JldHVybiEhZSYmZS5wb2ludHMubGVuZ3RoPj1NYXRoLmNlaWwoKHQuYml0TGVuZ3RoKCkrMSkvZS5zdGVwKX0saS5wcm90b3R5cGUuX2dldERvdWJsZXM9ZnVuY3Rpb24odCxlKXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcztmb3IodmFyIHI9W3RoaXNdLG49dGhpcyxpPTA7aTxlO2krPXQpe2Zvcih2YXIgbz0wO288dDtvKyspbj1uLmRibCgpO3IucHVzaChuKX1yZXR1cm57c3RlcDp0LHBvaW50czpyfX0saS5wcm90b3R5cGUuX2dldE5BRlBvaW50cz1mdW5jdGlvbih0KXtpZih0aGlzLnByZWNvbXB1dGVkJiZ0aGlzLnByZWNvbXB1dGVkLm5hZilyZXR1cm4gdGhpcy5wcmVjb21wdXRlZC5uYWY7Zm9yKHZhciBlPVt0aGlzXSxyPSgxPDx0KS0xLG49MT09PXI/bnVsbDp0aGlzLmRibCgpLGk9MTtpPHI7aSsrKWVbaV09ZVtpLTFdLmFkZChuKTtyZXR1cm57d25kOnQscG9pbnRzOmV9fSxpLnByb3RvdHlwZS5fZ2V0QmV0YT1mdW5jdGlvbigpe3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5kYmxwPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT10aGlzLHI9MDtyPHQ7cisrKWU9ZS5kYmwoKTtyZXR1cm4gZX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQpe3RoaXMudHdpc3RlZD0xIT09KDB8dC5hKSx0aGlzLm1PbmVBPXRoaXMudHdpc3RlZCYmKDB8dC5hKT09PS0xLHRoaXMuZXh0ZW5kZWQ9dGhpcy5tT25lQSx1LmNhbGwodGhpcyxcImVkd2FyZHNcIix0KSx0aGlzLmE9bmV3IGYodC5hLDE2KS51bW9kKHRoaXMucmVkLm0pLHRoaXMuYT10aGlzLmEudG9SZWQodGhpcy5yZWQpLHRoaXMuYz1uZXcgZih0LmMsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmMyPXRoaXMuYy5yZWRTcXIoKSx0aGlzLmQ9bmV3IGYodC5kLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5kZD10aGlzLmQucmVkQWRkKHRoaXMuZCksaCghdGhpcy50d2lzdGVkfHwwPT09dGhpcy5jLmZyb21SZWQoKS5jbXBuKDEpKSx0aGlzLm9uZUM9MT09PSgwfHQuYyl9ZnVuY3Rpb24gaSh0LGUscixuLGkpe3UuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXImJm51bGw9PT1uPyh0aGlzLng9dGhpcy5jdXJ2ZS56ZXJvLHRoaXMueT10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy50PXRoaXMuY3VydmUuemVybyx0aGlzLnpPbmU9ITApOih0aGlzLng9bmV3IGYoZSwxNiksdGhpcy55PW5ldyBmKHIsMTYpLHRoaXMuej1uP25ldyBmKG4sMTYpOnRoaXMuY3VydmUub25lLHRoaXMudD1pJiZuZXcgZihpLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueS5yZWR8fCh0aGlzLnk9dGhpcy55LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy56LnJlZHx8KHRoaXMuej10aGlzLnoudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnQmJiF0aGlzLnQucmVkJiYodGhpcy50PXRoaXMudC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZSx0aGlzLmN1cnZlLmV4dGVuZGVkJiYhdGhpcy50JiYodGhpcy50PXRoaXMueC5yZWRNdWwodGhpcy55KSx0aGlzLnpPbmV8fCh0aGlzLnQ9dGhpcy50LnJlZE11bCh0aGlzLnoucmVkSW52bSgpKSkpKX12YXIgbz1yKDk5KSxhPXIoMTkpLGY9cigxOCkscz1yKDIpLHU9by5iYXNlLGg9YS51dGlscy5hc3NlcnQ7cyhuLHUpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9tdWxBPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLm1PbmVBP3QucmVkTmVnKCk6dGhpcy5hLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuX211bEM9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub25lQz90OnRoaXMuYy5yZWRNdWwodCl9LG4ucHJvdG90eXBlLmpwb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gdGhpcy5wb2ludCh0LGUscixuKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IGYodCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLG49dGhpcy5jMi5yZWRTdWIodGhpcy5hLnJlZE11bChyKSksaT10aGlzLm9uZS5yZWRTdWIodGhpcy5jMi5yZWRNdWwodGhpcy5kKS5yZWRNdWwocikpLG89bi5yZWRNdWwoaS5yZWRJbnZtKCkpLGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7dmFyIHM9YS5mcm9tUmVkKCkuaXNPZGQoKTtyZXR1cm4oZSYmIXN8fCFlJiZzKSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludCh0LGEpfSxuLnByb3RvdHlwZS5wb2ludEZyb21ZPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj1yLnJlZFN1Yih0aGlzLm9uZSksaT1yLnJlZE11bCh0aGlzLmQpLnJlZEFkZCh0aGlzLm9uZSksbz1uLnJlZE11bChpLnJlZEludm0oKSk7aWYoMD09PW8uY21wKHRoaXMuemVybykpe2lmKGUpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gdGhpcy5wb2ludCh0aGlzLnplcm8sdCl9dmFyIGE9by5yZWRTcXJ0KCk7aWYoMCE9PWEucmVkU3FyKCkucmVkU3ViKG8pLmNtcCh0aGlzLnplcm8pKXRocm93IG5ldyBFcnJvcihcImludmFsaWQgcG9pbnRcIik7cmV0dXJuIGEuaXNPZGQoKSE9PWUmJihhPWEucmVkTmVnKCkpLHRoaXMucG9pbnQoYSx0KX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuITA7dC5ub3JtYWxpemUoKTt2YXIgZT10LngucmVkU3FyKCkscj10LnkucmVkU3FyKCksbj1lLnJlZE11bCh0aGlzLmEpLnJlZEFkZChyKSxpPXRoaXMuYzIucmVkTXVsKHRoaXMub25lLnJlZEFkZCh0aGlzLmQucmVkTXVsKGUpLnJlZE11bChyKSkpO3JldHVybiAwPT09bi5jbXAoaSl9LHMoaSx1LkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbih0LGUscixuKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscixuKX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBuZXcgaSh0LGVbMF0sZVsxXSxlWzJdKX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgejogXCIrdGhpcy56LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIj5cIn0saS5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy54LmNtcG4oMCkmJjA9PT10aGlzLnkuY21wKHRoaXMueil9LGkucHJvdG90eXBlLl9leHREYmw9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCk7cj1yLnJlZElBZGQocik7dmFyIG49dGhpcy5jdXJ2ZS5fbXVsQSh0KSxpPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKS5yZWRJU3ViKHQpLnJlZElTdWIoZSksbz1uLnJlZEFkZChlKSxhPW8ucmVkU3ViKHIpLGY9bi5yZWRTdWIoZSkscz1pLnJlZE11bChhKSx1PW8ucmVkTXVsKGYpLGg9aS5yZWRNdWwoZiksYz1hLnJlZE11bChvKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChzLHUsYyxoKX0saS5wcm90b3R5cGUuX3Byb2pEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHIsbj10aGlzLngucmVkQWRkKHRoaXMueSkucmVkU3FyKCksaT10aGlzLngucmVkU3FyKCksbz10aGlzLnkucmVkU3FyKCk7aWYodGhpcy5jdXJ2ZS50d2lzdGVkKXt2YXIgYT10aGlzLmN1cnZlLl9tdWxBKGkpLGY9YS5yZWRBZGQobyk7aWYodGhpcy56T25lKXQ9bi5yZWRTdWIoaSkucmVkU3ViKG8pLnJlZE11bChmLnJlZFN1Yih0aGlzLmN1cnZlLnR3bykpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRTcXIoKS5yZWRTdWIoZikucmVkU3ViKGYpO2Vsc2V7dmFyIHM9dGhpcy56LnJlZFNxcigpLHU9Zi5yZWRTdWIocykucmVkSVN1YihzKTt0PW4ucmVkU3ViKGkpLnJlZElTdWIobykucmVkTXVsKHUpLGU9Zi5yZWRNdWwoYS5yZWRTdWIobykpLHI9Zi5yZWRNdWwodSl9fWVsc2V7dmFyIGE9aS5yZWRBZGQobykscz10aGlzLmN1cnZlLl9tdWxDKHRoaXMuYy5yZWRNdWwodGhpcy56KSkucmVkU3FyKCksdT1hLnJlZFN1YihzKS5yZWRTdWIocyk7dD10aGlzLmN1cnZlLl9tdWxDKG4ucmVkSVN1YihhKSkucmVkTXVsKHUpLGU9dGhpcy5jdXJ2ZS5fbXVsQyhhKS5yZWRNdWwoaS5yZWRJU3ViKG8pKSxyPWEucmVkTXVsKHUpfXJldHVybiB0aGlzLmN1cnZlLnBvaW50KHQsZSxyKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHREYmwoKTp0aGlzLl9wcm9qRGJsKCl9LGkucHJvdG90eXBlLl9leHRBZGQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy55LnJlZFN1Yih0aGlzLngpLnJlZE11bCh0LnkucmVkU3ViKHQueCkpLHI9dGhpcy55LnJlZEFkZCh0aGlzLngpLnJlZE11bCh0LnkucmVkQWRkKHQueCkpLG49dGhpcy50LnJlZE11bCh0aGlzLmN1cnZlLmRkKS5yZWRNdWwodC50KSxpPXRoaXMuei5yZWRNdWwodC56LnJlZEFkZCh0LnopKSxvPXIucmVkU3ViKGUpLGE9aS5yZWRTdWIobiksZj1pLnJlZEFkZChuKSxzPXIucmVkQWRkKGUpLHU9by5yZWRNdWwoYSksaD1mLnJlZE11bChzKSxjPW8ucmVkTXVsKHMpLGQ9YS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodSxoLGQsYyl9LGkucHJvdG90eXBlLl9wcm9qQWRkPWZ1bmN0aW9uKHQpe3ZhciBlLHIsbj10aGlzLnoucmVkTXVsKHQueiksaT1uLnJlZFNxcigpLG89dGhpcy54LnJlZE11bCh0LngpLGE9dGhpcy55LnJlZE11bCh0LnkpLGY9dGhpcy5jdXJ2ZS5kLnJlZE11bChvKS5yZWRNdWwoYSkscz1pLnJlZFN1YihmKSx1PWkucmVkQWRkKGYpLGg9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZE11bCh0LngucmVkQWRkKHQueSkpLnJlZElTdWIobykucmVkSVN1YihhKSxjPW4ucmVkTXVsKHMpLnJlZE11bChoKTtyZXR1cm4gdGhpcy5jdXJ2ZS50d2lzdGVkPyhlPW4ucmVkTXVsKHUpLnJlZE11bChhLnJlZFN1Yih0aGlzLmN1cnZlLl9tdWxBKG8pKSkscj1zLnJlZE11bCh1KSk6KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKG8pKSxyPXRoaXMuY3VydmUuX211bEMocykucmVkTXVsKHUpKSx0aGlzLmN1cnZlLnBvaW50KGMsZSxyKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90OnQuaXNJbmZpbml0eSgpP3RoaXM6dGhpcy5jdXJ2ZS5leHRlbmRlZD90aGlzLl9leHRBZGQodCk6dGhpcy5fcHJvakFkZCh0KX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMSl9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsW3RoaXMsZV0sW3Qscl0sMiwhMCl9LGkucHJvdG90eXBlLm5vcm1hbGl6ZT1mdW5jdGlvbigpe2lmKHRoaXMuek9uZSlyZXR1cm4gdGhpczt2YXIgdD10aGlzLnoucmVkSW52bSgpO3JldHVybiB0aGlzLng9dGhpcy54LnJlZE11bCh0KSx0aGlzLnk9dGhpcy55LnJlZE11bCh0KSx0aGlzLnQmJih0aGlzLnQ9dGhpcy50LnJlZE11bCh0KSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMuek9uZT0hMCx0aGlzfSxpLnByb3RvdHlwZS5uZWc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTmVnKCksdGhpcy55LHRoaXMueix0aGlzLnQmJnRoaXMudC5yZWROZWcoKSl9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9ybWFsaXplKCksdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXM9PT10fHwwPT09dGhpcy5nZXRYKCkuY21wKHQuZ2V0WCgpKSYmMD09PXRoaXMuZ2V0WSgpLmNtcCh0LmdldFkoKSl9LGkucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwodGhpcy56KTtpZigwPT09dGhpcy54LmNtcChlKSlyZXR1cm4hMDtmb3IodmFyIHI9dC5jbG9uZSgpLG49dGhpcy5jdXJ2ZS5yZWROLnJlZE11bCh0aGlzLnopOzspe2lmKHIuaWFkZCh0aGlzLmN1cnZlLm4pLHIuY21wKHRoaXMuY3VydmUucCk+PTApcmV0dXJuITE7aWYoZS5yZWRJQWRkKG4pLDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwfXJldHVybiExfSxpLnByb3RvdHlwZS50b1A9aS5wcm90b3R5cGUubm9ybWFsaXplLGkucHJvdG90eXBlLm1peGVkQWRkPWkucHJvdG90eXBlLmFkZH0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cy5jYWxsKHRoaXMsXCJtb250XCIsdCksdGhpcy5hPW5ldyBhKHQuYSwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuYj1uZXcgYSh0LmIsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmk0PW5ldyBhKDQpLnRvUmVkKHRoaXMucmVkKS5yZWRJbnZtKCksdGhpcy50d289bmV3IGEoMikudG9SZWQodGhpcy5yZWQpLHRoaXMuYTI0PXRoaXMuaTQucmVkTXVsKHRoaXMuYS5yZWRBZGQodGhpcy50d28pKX1mdW5jdGlvbiBpKHQsZSxyKXtzLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yPyh0aGlzLng9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUuemVybyk6KHRoaXMueD1uZXcgYShlLDE2KSx0aGlzLno9bmV3IGEociwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpKX12YXIgbz1yKDk5KSxhPXIoMTgpLGY9cigyKSxzPW8uYmFzZSx1PXIoMTkpLGg9dS51dGlscztmKG4scyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3JtYWxpemUoKS54LHI9ZS5yZWRTcXIoKSxuPXIucmVkTXVsKGUpLnJlZEFkZChyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoZSksaT1uLnJlZFNxcnQoKTtyZXR1cm4gMD09PWkucmVkU3FyKCkuY21wKG4pfSxmKGkscy5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucG9pbnQoaC50b0FycmF5KHQsZSksMSl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdfHx0Lm9uZSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZEFkZCh0aGlzLnopLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRTdWIodGhpcy56KSxuPXIucmVkU3FyKCksaT1lLnJlZFN1YihuKSxvPWUucmVkTXVsKG4pLGE9aS5yZWRNdWwobi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGkpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy54LnJlZEFkZCh0aGlzLnopLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLGk9dC54LnJlZEFkZCh0LnopLG89dC54LnJlZFN1Yih0LnopLGE9by5yZWRNdWwociksZj1pLnJlZE11bChuKSxzPWUuei5yZWRNdWwoYS5yZWRBZGQoZikucmVkU3FyKCkpLHU9ZS54LnJlZE11bChhLnJlZElTdWIoZikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPXRoaXMsbz1bXTswIT09ZS5jbXBuKDApO2UuaXVzaHJuKDEpKW8ucHVzaChlLmFuZGxuKDEpKTtmb3IodmFyIGE9by5sZW5ndGgtMTthPj0wO2EtLSkwPT09b1thXT8ocj1yLmRpZmZBZGQobixpKSxuPW4uZGJsKCkpOihuPXIuZGlmZkFkZChuLGkpLHI9ci5kYmwoKSk7cmV0dXJuIG59LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aC5jYWxsKHRoaXMsXCJzaG9ydFwiLHQpLHRoaXMuYT1uZXcgcyh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHModC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh0KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBpKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiYWZmaW5lXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gbyh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImphY29iaWFuXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBzKDApKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSx0aGlzLno9bmV3IHMobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX12YXIgYT1yKDk5KSxmPXIoMTkpLHM9cigxOCksdT1yKDIpLGg9YS5iYXNlLGM9Zi51dGlscy5hc3NlcnQ7dShuLGgpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9nZXRFbmRvbW9ycGhpc209ZnVuY3Rpb24odCl7aWYodGhpcy56ZXJvQSYmdGhpcy5nJiZ0aGlzLm4mJjE9PT10aGlzLnAubW9kbigzKSl7dmFyIGUscjtpZih0LmJldGEpZT1uZXcgcyh0LmJldGEsMTYpLnRvUmVkKHRoaXMucmVkKTtlbHNle3ZhciBuPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLnApO2U9blswXS5jbXAoblsxXSk8MD9uWzBdOm5bMV0sZT1lLnRvUmVkKHRoaXMucmVkKX1pZih0LmxhbWJkYSlyPW5ldyBzKHQubGFtYmRhLDE2KTtlbHNle3ZhciBpPXRoaXMuX2dldEVuZG9Sb290cyh0aGlzLm4pOzA9PT10aGlzLmcubXVsKGlbMF0pLnguY21wKHRoaXMuZy54LnJlZE11bChlKSk/cj1pWzBdOihyPWlbMV0sYygwPT09dGhpcy5nLm11bChyKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpKSl9dmFyIG87cmV0dXJuIG89dC5iYXNpcz90LmJhc2lzLm1hcChmdW5jdGlvbih0KXtyZXR1cm57YTpuZXcgcyh0LmEsMTYpLGI6bmV3IHModC5iLDE2KX19KTp0aGlzLl9nZXRFbmRvQmFzaXMocikse2JldGE6ZSxsYW1iZGE6cixiYXNpczpvfX19LG4ucHJvdG90eXBlLl9nZXRFbmRvUm9vdHM9ZnVuY3Rpb24odCl7dmFyIGU9dD09PXRoaXMucD90aGlzLnJlZDpzLm1vbnQodCkscj1uZXcgcygyKS50b1JlZChlKS5yZWRJbnZtKCksbj1yLnJlZE5lZygpLGk9bmV3IHMoMykudG9SZWQoZSkucmVkTmVnKCkucmVkU3FydCgpLnJlZE11bChyKSxvPW4ucmVkQWRkKGkpLmZyb21SZWQoKSxhPW4ucmVkU3ViKGkpLmZyb21SZWQoKTtyZXR1cm5bbyxhXX0sbi5wcm90b3R5cGUuX2dldEVuZG9CYXNpcz1mdW5jdGlvbih0KXtmb3IodmFyIGUscixuLGksbyxhLGYsdSxoLGM9dGhpcy5uLnVzaHJuKE1hdGguZmxvb3IodGhpcy5uLmJpdExlbmd0aCgpLzIpKSxkPXQsbD10aGlzLm4uY2xvbmUoKSxwPW5ldyBzKDEpLGI9bmV3IHMoMCksdj1uZXcgcygwKSx5PW5ldyBzKDEpLG09MDswIT09ZC5jbXBuKDApOyl7dmFyIGc9bC5kaXYoZCk7dT1sLnN1YihnLm11bChkKSksaD12LnN1YihnLm11bChwKSk7dmFyIHc9eS5zdWIoZy5tdWwoYikpO2lmKCFuJiZ1LmNtcChjKTwwKWU9Zi5uZWcoKSxyPXAsbj11Lm5lZygpLGk9aDtlbHNlIGlmKG4mJjI9PT0rK20pYnJlYWs7Zj11LGw9ZCxkPXUsdj1wLHA9aCx5PWIsYj13fW89dS5uZWcoKSxhPWg7dmFyIF89bi5zcXIoKS5hZGQoaS5zcXIoKSksTT1vLnNxcigpLmFkZChhLnNxcigpKTtyZXR1cm4gTS5jbXAoXyk+PTAmJihvPWUsYT1yKSxuLm5lZ2F0aXZlJiYobj1uLm5lZygpLGk9aS5uZWcoKSksby5uZWdhdGl2ZSYmKG89by5uZWcoKSxhPWEubmVnKCkpLFt7YTpuLGI6aX0se2E6byxiOmF9XX0sbi5wcm90b3R5cGUuX2VuZG9TcGxpdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmVuZG8uYmFzaXMscj1lWzBdLG49ZVsxXSxpPW4uYi5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxvPXIuYi5uZWcoKS5tdWwodCkuZGl2Um91bmQodGhpcy5uKSxhPWkubXVsKHIuYSksZj1vLm11bChuLmEpLHM9aS5tdWwoci5iKSx1PW8ubXVsKG4uYiksaD10LnN1YihhKS5zdWIoZiksYz1zLmFkZCh1KS5uZWcoKTtyZXR1cm57azE6aCxrMjpjfX0sbi5wcm90b3R5cGUucG9pbnRGcm9tWD1mdW5jdGlvbih0LGUpe3Q9bmV3IHModCwxNiksdC5yZWR8fCh0PXQudG9SZWQodGhpcy5yZWQpKTt2YXIgcj10LnJlZFNxcigpLnJlZE11bCh0KS5yZWRJQWRkKHQucmVkTXVsKHRoaXMuYSkpLnJlZElBZGQodGhpcy5iKSxuPXIucmVkU3FydCgpO2lmKDAhPT1uLnJlZFNxcigpLnJlZFN1YihyKS5jbXAodGhpcy56ZXJvKSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3ZhciBpPW4uZnJvbVJlZCgpLmlzT2RkKCk7cmV0dXJuKGUmJiFpfHwhZSYmaSkmJihuPW4ucmVkTmVnKCkpLHRoaXMucG9pbnQodCxuKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7aWYodC5pbmYpcmV0dXJuITA7dmFyIGU9dC54LHI9dC55LG49dGhpcy5hLnJlZE11bChlKSxpPWUucmVkU3FyKCkucmVkTXVsKGUpLnJlZElBZGQobikucmVkSUFkZCh0aGlzLmIpO3JldHVybiAwPT09ci5yZWRTcXIoKS5yZWRJU3ViKGkpLmNtcG4oMCl9LG4ucHJvdG90eXBlLl9lbmRvV25hZk11bEFkZD1mdW5jdGlvbih0LGUscil7Zm9yKHZhciBuPXRoaXMuX2VuZG9XbmFmVDEsaT10aGlzLl9lbmRvV25hZlQyLG89MDtvPHQubGVuZ3RoO28rKyl7dmFyIGE9dGhpcy5fZW5kb1NwbGl0KGVbb10pLGY9dFtvXSxzPWYuX2dldEJldGEoKTthLmsxLm5lZ2F0aXZlJiYoYS5rMS5pbmVnKCksZj1mLm5lZyghMCkpLGEuazIubmVnYXRpdmUmJihhLmsyLmluZWcoKSxzPXMubmVnKCEwKSksblsyKm9dPWYsblsyKm8rMV09cyxpWzIqb109YS5rMSxpWzIqbysxXT1hLmsyfWZvcih2YXIgdT10aGlzLl93bmFmTXVsQWRkKDEsbixpLDIqbyxyKSxoPTA7aDwyKm87aCsrKW5baF09bnVsbCxpW2hdPW51bGw7cmV0dXJuIHV9LHUoaSxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUucG9pbnQ9ZnVuY3Rpb24odCxlLHIpe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0LGUpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCxlKX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtpZih0aGlzLmN1cnZlLmVuZG8pe3ZhciB0PXRoaXMucHJlY29tcHV0ZWQ7aWYodCYmdC5iZXRhKXJldHVybiB0LmJldGE7dmFyIGU9dGhpcy5jdXJ2ZS5wb2ludCh0aGlzLngucmVkTXVsKHRoaXMuY3VydmUuZW5kby5iZXRhKSx0aGlzLnkpO2lmKHQpe3ZhciByPXRoaXMuY3VydmUsbj1mdW5jdGlvbih0KXtyZXR1cm4gci5wb2ludCh0LngucmVkTXVsKHIuZW5kby5iZXRhKSx0LnkpfTt0LmJldGE9ZSxlLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsbmFmOnQubmFmJiZ7d25kOnQubmFmLnduZCxwb2ludHM6dC5uYWYucG9pbnRzLm1hcChuKX0sZG91Ymxlczp0LmRvdWJsZXMmJntzdGVwOnQuZG91Ymxlcy5zdGVwLHBvaW50czp0LmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfX0saS5wcm90b3R5cGUudG9KU09OPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucHJlY29tcHV0ZWQ/W3RoaXMueCx0aGlzLnksdGhpcy5wcmVjb21wdXRlZCYme2RvdWJsZXM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzJiZ7c3RlcDp0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXMuc3RlcCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnBvaW50cy5zbGljZSgxKX0sbmFmOnRoaXMucHJlY29tcHV0ZWQubmFmJiZ7d25kOnRoaXMucHJlY29tcHV0ZWQubmFmLnduZCxwb2ludHM6dGhpcy5wcmVjb21wdXRlZC5uYWYucG9pbnRzLnNsaWNlKDEpfX1dOlt0aGlzLngsdGhpcy55XX0saS5mcm9tSlNPTj1mdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbihlKXtyZXR1cm4gdC5wb2ludChlWzBdLGVbMV0scil9XCJzdHJpbmdcIj09dHlwZW9mIGUmJihlPUpTT04ucGFyc2UoZSkpO3ZhciBpPXQucG9pbnQoZVswXSxlWzFdLHIpO2lmKCFlWzJdKXJldHVybiBpO3ZhciBvPWVbMl07cmV0dXJuIGkucHJlY29tcHV0ZWQ9e2JldGE6bnVsbCxkb3VibGVzOm8uZG91YmxlcyYme3N0ZXA6by5kb3VibGVzLnN0ZXAscG9pbnRzOltpXS5jb25jYXQoby5kb3VibGVzLnBvaW50cy5tYXAobikpfSxuYWY6by5uYWYmJnt3bmQ6by5uYWYud25kLHBvaW50czpbaV0uY29uY2F0KG8ubmFmLnBvaW50cy5tYXAobikpfX0saX0saS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT9cIjxFQyBQb2ludCBJbmZpbml0eT5cIjpcIjxFQyBQb2ludCB4OiBcIit0aGlzLnguZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiIHk6IFwiK3RoaXMueS5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCI+XCJ9LGkucHJvdG90eXBlLmlzSW5maW5pdHk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pbmZ9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdDtpZih0LmluZilyZXR1cm4gdGhpcztpZih0aGlzLmVxKHQpKXJldHVybiB0aGlzLmRibCgpO2lmKHRoaXMubmVnKCkuZXEodCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTtpZigwPT09dGhpcy54LmNtcCh0LngpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy55LnJlZFN1Yih0LnkpOzAhPT1lLmNtcG4oMCkmJihlPWUucmVkTXVsKHRoaXMueC5yZWRTdWIodC54KS5yZWRJbnZtKCkpKTt2YXIgcj1lLnJlZFNxcigpLnJlZElTdWIodGhpcy54KS5yZWRJU3ViKHQueCksbj1lLnJlZE11bCh0aGlzLngucmVkU3ViKHIpKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7aWYodGhpcy5pbmYpcmV0dXJuIHRoaXM7dmFyIHQ9dGhpcy55LnJlZEFkZCh0aGlzLnkpO2lmKDA9PT10LmNtcG4oMCkpcmV0dXJuIHRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKTt2YXIgZT10aGlzLmN1cnZlLmEscj10aGlzLngucmVkU3FyKCksbj10LnJlZEludm0oKSxpPXIucmVkQWRkKHIpLnJlZElBZGQocikucmVkSUFkZChlKS5yZWRNdWwobiksbz1pLnJlZFNxcigpLnJlZElTdWIodGhpcy54LnJlZEFkZCh0aGlzLngpKSxhPWkucmVkTXVsKHRoaXMueC5yZWRTdWIobykpLnJlZElTdWIodGhpcy55KTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChvLGEpfSxpLnByb3RvdHlwZS5nZXRYPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy55LmZyb21SZWQoKX0saS5wcm90b3R5cGUubXVsPWZ1bmN0aW9uKHQpe3JldHVybiB0PW5ldyBzKHQsMTYpLHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQoW3RoaXNdLFt0XSk6dGhpcy5jdXJ2ZS5fd25hZk11bCh0aGlzLHQpfSxpLnByb3RvdHlwZS5tdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGkpOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMil9LGkucHJvdG90eXBlLmptdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPVt0aGlzLGVdLGk9W3Qscl07cmV0dXJuIHRoaXMuY3VydmUuZW5kbz90aGlzLmN1cnZlLl9lbmRvV25hZk11bEFkZChuLGksITApOnRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxuLGksMiwhMCl9LGkucHJvdG90eXBlLmVxPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzPT09dHx8dGhpcy5pbmY9PT10LmluZiYmKHRoaXMuaW5mfHwwPT09dGhpcy54LmNtcCh0LngpJiYwPT09dGhpcy55LmNtcCh0LnkpKX0saS5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LHRoaXMueS5yZWROZWcoKSk7aWYodCYmdGhpcy5wcmVjb21wdXRlZCl7dmFyIHI9dGhpcy5wcmVjb21wdXRlZCxuPWZ1bmN0aW9uKHQpe3JldHVybiB0Lm5lZygpfTtlLnByZWNvbXB1dGVkPXtuYWY6ci5uYWYmJnt3bmQ6ci5uYWYud25kLHBvaW50czpyLm5hZi5wb2ludHMubWFwKG4pfSxkb3VibGVzOnIuZG91YmxlcyYme3N0ZXA6ci5kb3VibGVzLnN0ZXAscG9pbnRzOnIuZG91Ymxlcy5wb2ludHMubWFwKG4pfX19cmV0dXJuIGV9LGkucHJvdG90eXBlLnRvSj1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzLmN1cnZlLmpwb2ludChudWxsLG51bGwsbnVsbCk7dmFyIHQ9dGhpcy5jdXJ2ZS5qcG9pbnQodGhpcy54LHRoaXMueSx0aGlzLmN1cnZlLm9uZSk7cmV0dXJuIHR9LHUobyxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IG8odGhpcyx0LGUscil9LG8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy56LnJlZEludm0oKSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkTXVsKGUpLG49dGhpcy55LnJlZE11bChlKS5yZWRNdWwodCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0O2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXQuei5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXRoaXMueC5yZWRNdWwoZSksaT10LngucmVkTXVsKHIpLG89dGhpcy55LnJlZE11bChlLnJlZE11bCh0LnopKSxhPXQueS5yZWRNdWwoci5yZWRNdWwodGhpcy56KSksZj1uLnJlZFN1YihpKSxzPW8ucmVkU3ViKGEpO2lmKDA9PT1mLmNtcG4oMCkpcmV0dXJuIDAhPT1zLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHU9Zi5yZWRTcXIoKSxoPXUucmVkTXVsKGYpLGM9bi5yZWRNdWwodSksZD1zLnJlZFNxcigpLnJlZElBZGQoaCkucmVkSVN1YihjKS5yZWRJU3ViKGMpLGw9cy5yZWRNdWwoYy5yZWRJU3ViKGQpKS5yZWRJU3ViKG8ucmVkTXVsKGgpKSxwPXRoaXMuei5yZWRNdWwodC56KS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGQsbCxwKX0sby5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQudG9KKCk7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dGhpcy54LG49dC54LnJlZE11bChlKSxpPXRoaXMueSxvPXQueS5yZWRNdWwoZSkucmVkTXVsKHRoaXMueiksYT1yLnJlZFN1YihuKSxmPWkucmVkU3ViKG8pO2lmKDA9PT1hLmNtcG4oMCkpcmV0dXJuIDAhPT1mLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHM9YS5yZWRTcXIoKSx1PXMucmVkTXVsKGEpLGg9ci5yZWRNdWwocyksYz1mLnJlZFNxcigpLnJlZElBZGQodSkucmVkSVN1YihoKS5yZWRJU3ViKGgpLGQ9Zi5yZWRNdWwoaC5yZWRJU3ViKGMpKS5yZWRJU3ViKGkucmVkTXVsKHUpKSxsPXRoaXMuei5yZWRNdWwoYSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighdClyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfWZvcih2YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnksZj10aGlzLnoscz1mLnJlZFNxcigpLnJlZFNxcigpLHU9YS5yZWRBZGQoYSkscj0wO3I8dDtyKyspe3ZhciBoPW8ucmVkU3FyKCksYz11LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPWgucmVkQWRkKGgpLnJlZElBZGQoaCkucmVkSUFkZChuLnJlZE11bChzKSkscD1vLnJlZE11bChjKSxiPWwucmVkU3FyKCkucmVkSVN1YihwLnJlZEFkZChwKSksdj1wLnJlZElTdWIoYikseT1sLnJlZE11bCh2KTt5PXkucmVkSUFkZCh5KS5yZWRJU3ViKGQpO3ZhciBtPXUucmVkTXVsKGYpO3IrMTx0JiYocz1zLnJlZE11bChkKSksbz1iLGY9bSx1PXl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG8sdS5yZWRNdWwoaSksZil9LG8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LG8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKSx1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSx0PXMsZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLngucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9dGhpcy54LnJlZEFkZChjKS5yZWRTcXIoKS5yZWRJU3ViKGgpLnJlZElTdWIoZCk7bD1sLnJlZElBZGQobCk7dmFyIHA9aC5yZWRBZGQoaCkucmVkSUFkZChoKSxiPXAucmVkU3FyKCksdj1kLnJlZElBZGQoZCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdD1iLnJlZElTdWIobCkucmVkSVN1YihsKSxlPXAucmVkTXVsKGwucmVkSVN1Yih0KSkucmVkSVN1Yih2KSxyPXRoaXMueS5yZWRNdWwodGhpcy56KSxyPXIucmVkSUFkZChyKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuY3VydmUuYSkscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKTt0PXM7dmFyIHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy56LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9dGhpcy54LnJlZE11bChjKSxsPXRoaXMueC5yZWRTdWIoaCkucmVkTXVsKHRoaXMueC5yZWRBZGQoaCkpO2w9bC5yZWRBZGQobCkucmVkSUFkZChsKTt2YXIgcD1kLnJlZElBZGQoZCk7cD1wLnJlZElBZGQocCk7dmFyIGI9cC5yZWRBZGQocCk7dD1sLnJlZFNxcigpLnJlZElTdWIoYikscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihjKS5yZWRJU3ViKGgpO3ZhciB2PWMucmVkU3FyKCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksZT1sLnJlZE11bChwLnJlZElTdWIodCkpLnJlZElTdWIodil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VydmUuYSxlPXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz1lLnJlZFNxcigpLGE9ci5yZWRTcXIoKSxmPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZCh0LnJlZE11bChpKSkscz1lLnJlZEFkZChlKTtzPXMucmVkSUFkZChzKTt2YXIgdT1zLnJlZE11bChhKSxoPWYucmVkU3FyKCkucmVkSVN1Yih1LnJlZEFkZCh1KSksYz11LnJlZElTdWIoaCksZD1hLnJlZFNxcigpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPWYucmVkTXVsKGMpLnJlZElTdWIoZCkscD1yLnJlZEFkZChyKS5yZWRNdWwobik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsbCxwKX0sby5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj1lLnJlZFNxcigpLGk9dC5yZWRBZGQodCkucmVkSUFkZCh0KSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihuKTthPWEucmVkSUFkZChhKSxhPWEucmVkQWRkKGEpLnJlZElBZGQoYSksYT1hLnJlZElTdWIobyk7dmFyIGY9YS5yZWRTcXIoKSxzPW4ucmVkSUFkZChuKTtzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKTt2YXIgdT1pLnJlZElBZGQoYSkucmVkU3FyKCkucmVkSVN1YihvKS5yZWRJU3ViKGYpLnJlZElTdWIocyksaD1lLnJlZE11bCh1KTtoPWgucmVkSUFkZChoKSxoPWgucmVkSUFkZChoKTt2YXIgYz10aGlzLngucmVkTXVsKGYpLnJlZElTdWIoaCk7Yz1jLnJlZElBZGQoYyksYz1jLnJlZElBZGQoYyk7dmFyIGQ9dGhpcy55LnJlZE11bCh1LnJlZE11bChzLnJlZElTdWIodSkpLnJlZElTdWIoYS5yZWRNdWwoZikpKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD10aGlzLnoucmVkQWRkKGEpLnJlZFNxcigpLnJlZElTdWIocikucmVkSVN1YihmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1uZXcgcyh0LGUpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7aWYoXCJhZmZpbmVcIj09PXQudHlwZSlyZXR1cm4gdGhpcy5lcSh0LnRvSigpKTtpZih0aGlzPT09dClyZXR1cm4hMDt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwocikucmVkSVN1Yih0LngucmVkTXVsKGUpKS5jbXBuKDApKXJldHVybiExO3ZhciBuPWUucmVkTXVsKHRoaXMueiksaT1yLnJlZE11bCh0LnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChpKS5yZWRJU3ViKHQueS5yZWRNdWwobikpLmNtcG4oMCl9LG8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoZSk7aWYoMD09PXRoaXMueC5jbXAocikpcmV0dXJuITA7Zm9yKHZhciBuPXQuY2xvbmUoKSxpPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoZSk7Oyl7aWYobi5pYWRkKHRoaXMuY3VydmUubiksbi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihyLnJlZElBZGQoaSksMD09PXRoaXMueC5jbXAocikpcmV0dXJuITB9cmV0dXJuITF9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgSlBvaW50IEluZmluaXR5PlwiOlwiPEVDIEpQb2ludCB4OiBcIit0aGlzLngudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei50b1N0cmluZygxNiwyKStcIj5cIn0sby5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtcInNob3J0XCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5zaG9ydCh0KTpcImVkd2FyZHNcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLmVkd2FyZHModCk6dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5tb250KHQpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9dC5oYXNoLHModGhpcy5nLnZhbGlkYXRlKCksXCJJbnZhbGlkIGN1cnZlXCIpLHModGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSxcIkludmFsaWQgY3VydmUsIEcqTiAhPSBPXCIpfWZ1bmN0aW9uIGkodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgbihlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0pLHJ9fSl9dmFyIG89ZSxhPXIoNDkpLGY9cigxOSkscz1mLnV0aWxzLmFzc2VydDtvLlByZXNldEN1cnZlPW4saShcInAxOTJcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMTkyXCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTJcIixcIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExXCJdfSksaShcInAyMjRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMjI0XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlXCIsYjpcImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjFcIixcImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0XCJdfSksaShcInAyNTZcIix7XG50eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiAwMDAwMDAwMSAwMDAwMDAwMCAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmY1wiLGI6XCI1YWM2MzVkOCBhYTNhOTNlNyBiM2ViYmQ1NSA3Njk4ODZiYyA2NTFkMDZiMCBjYzUzYjBmNiAzYmNlM2MzZSAyN2QyNjA0YlwiLG46XCJmZmZmZmZmZiAwMDAwMDAwMCBmZmZmZmZmZiBmZmZmZmZmZiBiY2U2ZmFhZCBhNzE3OWU4NCBmM2I5Y2FjMiBmYzYzMjU1MVwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjZiMTdkMWYyIGUxMmM0MjQ3IGY4YmNlNmU1IDYzYTQ0MGYyIDc3MDM3ZDgxIDJkZWIzM2EwIGY0YTEzOTQ1IGQ4OThjMjk2XCIsXCI0ZmUzNDJlMiBmZTFhN2Y5YiA4ZWU3ZWI0YSA3YzBmOWUxNiAyYmNlMzM1NyA2YjMxNWVjZSBjYmI2NDA2OCAzN2JmNTFmNVwiXX0pLGkoXCJwMzg0XCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIGZmZmZmZmZjXCIsYjpcImIzMzEyZmE3IGUyM2VlN2U0IDk4OGUwNTZiIGUzZjgyZDE5IDE4MWQ5YzZlIGZlODE0MTEyIDAzMTQwODhmIDUwMTM4NzVhIGM2NTYzOThkIDhhMmVkMTlkIDJhODVjOGVkIGQzZWMyYWVmXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGM3NjM0ZDgxIGY0MzcyZGRmIDU4MWEwZGIyIDQ4YjBhNzdhIGVjZWMxOTZhIGNjYzUyOTczXCIsaGFzaDphLnNoYTM4NCxnUmVkOiExLGc6W1wiYWE4N2NhMjIgYmU4YjA1MzcgOGViMWM3MWUgZjMyMGFkNzQgNmUxZDNiNjIgOGJhNzliOTggNTlmNzQxZTAgODI1NDJhMzggNTUwMmYyNWQgYmY1NTI5NmMgM2E1NDVlMzggNzI3NjBhYjdcIixcIjM2MTdkZTRhIDk2MjYyYzZmIDVkOWU5OGJmIDkyOTJkYzI5IGY4ZjQxZGJkIDI4OWExNDdjIGU5ZGEzMTEzIGI1ZjBiOGMwIDBhNjBiMWNlIDFkN2U4MTlkIDdhNDMxZDdjIDkwZWEwZTVmXCJdfSksaShcInA1MjFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiMDAwMDAwNTEgOTUzZWI5NjEgOGUxYzlhMWYgOTI5YTIxYTAgYjY4NTQwZWUgYTJkYTcyNWIgOTliMzE1ZjMgYjhiNDg5OTEgOGVmMTA5ZTEgNTYxOTM5NTEgZWM3ZTkzN2IgMTY1MmMwYmQgM2JiMWJmMDcgMzU3M2RmODggM2QyYzM0ZjEgZWY0NTFmZDQgNmI1MDNmMDBcIixuOlwiMDAwMDAxZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmEgNTE4Njg3ODMgYmYyZjk2NmIgN2ZjYzAxNDggZjcwOWE1ZDAgM2JiNWM5YjggODk5YzQ3YWUgYmI2ZmI3MWUgOTEzODY0MDlcIixoYXNoOmEuc2hhNTEyLGdSZWQ6ITEsZzpbXCIwMDAwMDBjNiA4NThlMDZiNyAwNDA0ZTljZCA5ZTNlY2I2NiAyMzk1YjQ0MiA5YzY0ODEzOSAwNTNmYjUyMSBmODI4YWY2MCA2YjRkM2RiYSBhMTRiNWU3NyBlZmU3NTkyOCBmZTFkYzEyNyBhMmZmYThkZSAzMzQ4YjNjMSA4NTZhNDI5YiBmOTdlN2UzMSBjMmU1YmQ2NlwiLFwiMDAwMDAxMTggMzkyOTZhNzggOWEzYmMwMDQgNWM4YTVmYjQgMmM3ZDFiZDkgOThmNTQ0NDkgNTc5YjQ0NjggMTdhZmJkMTcgMjczZTY2MmMgOTdlZTcyOTkgNWVmNDI2NDAgYzU1MGI5MDEgM2ZhZDA3NjEgMzUzYzcwODYgYTI3MmMyNDAgODhiZTk0NzYgOWZkMTY2NTBcIl19KSxpKFwiY3VydmUyNTUxOVwiLHt0eXBlOlwibW9udFwiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiNzZkMDZcIixiOlwiMFwiLG46XCIxMDAwMDAwMDAwMDAwMDAwIDAwMDAwMDAwMDAwMDAwMDAgMTRkZWY5ZGVhMmY3OWNkNiA1ODEyNjMxYTVjZjVkM2VkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiOVwiXX0pLGkoXCJlZDI1NTE5XCIse3R5cGU6XCJlZHdhcmRzXCIscHJpbWU6XCJwMjU1MTlcIixwOlwiN2ZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZlZFwiLGE6XCItMVwiLGM6XCIxXCIsZDpcIjUyMDM2Y2VlMmI2ZmZlNzMgOGNjNzQwNzk3Nzc5ZTg5OCAwMDcwMGE0ZDQxNDFkOGFiIDc1ZWI0ZGNhMTM1OTc4YTNcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjIxNjkzNmQzY2Q2ZTUzZmVjMGE0ZTIzMWZkZDZkYzVjNjkyY2M3NjA5NTI1YTdiMmM5NTYyZDYwOGYyNWQ1MWFcIixcIjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NThcIl19KTt2YXIgdTt0cnl7dT1yKDUyMCl9Y2F0Y2godCl7dT12b2lkIDB9aShcInNlY3AyNTZrMVwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpcImsyNTZcIixwOlwiZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmUgZmZmZmZjMmZcIixhOlwiMFwiLGI6XCI3XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGJhYWVkY2U2IGFmNDhhMDNiIGJmZDI1ZThjIGQwMzY0MTQxXCIsaDpcIjFcIixoYXNoOmEuc2hhMjU2LGJldGE6XCI3YWU5NmEyYjY1N2MwNzEwNmU2NDQ3OWVhYzM0MzRlOTljZjA0OTc1MTJmNTg5OTVjMTM5NmMyODcxOTUwMWVlXCIsbGFtYmRhOlwiNTM2M2FkNGNjMDVjMzBlMGE1MjYxYzAyODgxMjY0NWExMjJlMjJlYTIwODE2Njc4ZGYwMjk2N2MxYjIzYmQ3MlwiLGJhc2lzOlt7YTpcIjMwODZkMjIxYTdkNDZiY2RlODZjOTBlNDkyODRlYjE1XCIsYjpcIi1lNDQzN2VkNjAxMGU4ODI4NmY1NDdmYTkwYWJmZTRjM1wifSx7YTpcIjExNGNhNTBmN2E4ZTJmM2Y2NTdjMTEwOGQ5ZDQ0Y2ZkOFwiLGI6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwifV0sZ1JlZDohMSxnOltcIjc5YmU2NjdlZjlkY2JiYWM1NWEwNjI5NWNlODcwYjA3MDI5YmZjZGIyZGNlMjhkOTU5ZjI4MTViMTZmODE3OThcIixcIjQ4M2FkYTc3MjZhM2M0NjU1ZGE0ZmJmYzBlMTEwOGE4ZmQxN2I0NDhhNjg1NTQxOTljNDdkMDhmZmIxMGQ0YjhcIix1XX0pfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KFwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZihvLmN1cnZlcy5oYXNPd25Qcm9wZXJ0eSh0KSxcIlVua25vd24gY3VydmUgXCIrdCksdD1vLmN1cnZlc1t0XSksdCBpbnN0YW5jZW9mIG8uY3VydmVzLlByZXNldEN1cnZlJiYodD17Y3VydmU6dH0pLHRoaXMuY3VydmU9dC5jdXJ2ZS5jdXJ2ZSx0aGlzLm49dGhpcy5jdXJ2ZS5uLHRoaXMubmg9dGhpcy5uLnVzaHJuKDEpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5nPXQuY3VydmUuZyx0aGlzLmcucHJlY29tcHV0ZSh0LmN1cnZlLm4uYml0TGVuZ3RoKCkrMSksdm9pZCh0aGlzLmhhc2g9dC5oYXNofHx0LmN1cnZlLmhhc2gpKTpuZXcgbih0KX12YXIgaT1yKDE4KSxvPXIoMTkpLGE9by51dGlscyxmPWEuYXNzZXJ0LHM9cig1MTQpLHU9cig1MTUpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmtleVBhaXI9ZnVuY3Rpb24odCl7cmV0dXJuIG5ldyBzKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVByaXZhdGUodGhpcyx0LGUpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHMuZnJvbVB1YmxpYyh0aGlzLHQsZSl9LG4ucHJvdG90eXBlLmdlbktleVBhaXI9ZnVuY3Rpb24odCl7dHx8KHQ9e30pO2Zvcih2YXIgZT1uZXcgby5obWFjRFJCRyh7aGFzaDp0aGlzLmhhc2gscGVyczp0LnBlcnMsZW50cm9weTp0LmVudHJvcHl8fG8ucmFuZCh0aGlzLmhhc2guaG1hY1N0cmVuZ3RoKSxub25jZTp0aGlzLm4udG9BcnJheSgpfSkscj10aGlzLm4uYnl0ZUxlbmd0aCgpLG49dGhpcy5uLnN1YihuZXcgaSgyKSk7Oyl7dmFyIGE9bmV3IGkoZS5nZW5lcmF0ZShyKSk7aWYoIShhLmNtcChuKT4wKSlyZXR1cm4gYS5pYWRkbigxKSx0aGlzLmtleUZyb21Qcml2YXRlKGEpfX0sbi5wcm90b3R5cGUuX3RydW5jYXRlVG9OPWZ1bmN0aW9uKHQsZSl7dmFyIHI9OCp0LmJ5dGVMZW5ndGgoKS10aGlzLm4uYml0TGVuZ3RoKCk7cmV0dXJuIHI+MCYmKHQ9dC51c2hybihyKSksIWUmJnQuY21wKHRoaXMubik+PTA/dC5zdWIodGhpcy5uKTp0fSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyLG4pe1wib2JqZWN0XCI9PXR5cGVvZiByJiYobj1yLHI9bnVsbCksbnx8KG49e30pLGU9dGhpcy5rZXlGcm9tUHJpdmF0ZShlLHIpLHQ9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpO2Zvcih2YXIgYT10aGlzLm4uYnl0ZUxlbmd0aCgpLGY9ZS5nZXRQcml2YXRlKCkudG9BcnJheShcImJlXCIsYSkscz10LnRvQXJyYXkoXCJiZVwiLGEpLGg9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLGVudHJvcHk6Zixub25jZTpzLHBlcnM6bi5wZXJzLHBlcnNFbmM6bi5wZXJzRW5jfSksYz10aGlzLm4uc3ViKG5ldyBpKDEpKSxkPTA7ITA7ZCsrKXt2YXIgbD1uLms/bi5rKGQpOm5ldyBpKGguZ2VuZXJhdGUodGhpcy5uLmJ5dGVMZW5ndGgoKSkpO2lmKGw9dGhpcy5fdHJ1bmNhdGVUb04obCwhMCksIShsLmNtcG4oMSk8PTB8fGwuY21wKGMpPj0wKSl7dmFyIHA9dGhpcy5nLm11bChsKTtpZighcC5pc0luZmluaXR5KCkpe3ZhciBiPXAuZ2V0WCgpLHY9Yi51bW9kKHRoaXMubik7aWYoMCE9PXYuY21wbigwKSl7dmFyIHk9bC5pbnZtKHRoaXMubikubXVsKHYubXVsKGUuZ2V0UHJpdmF0ZSgpKS5pYWRkKHQpKTtpZih5PXkudW1vZCh0aGlzLm4pLDAhPT15LmNtcG4oMCkpe3ZhciBtPShwLmdldFkoKS5pc09kZCgpPzE6MCl8KDAhPT1iLmNtcCh2KT8yOjApO3JldHVybiBuLmNhbm9uaWNhbCYmeS5jbXAodGhpcy5uaCk+MCYmKHk9dGhpcy5uLnN1Yih5KSxtXj0xKSxuZXcgdSh7cjp2LHM6eSxyZWNvdmVyeVBhcmFtOm19KX19fX19fSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIsbil7dD10aGlzLl90cnVuY2F0ZVRvTihuZXcgaSh0LDE2KSkscj10aGlzLmtleUZyb21QdWJsaWMocixuKSxlPW5ldyB1KGUsXCJoZXhcIik7dmFyIG89ZS5yLGE9ZS5zO2lmKG8uY21wbigxKTwwfHxvLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO2lmKGEuY21wbigxKTwwfHxhLmNtcCh0aGlzLm4pPj0wKXJldHVybiExO3ZhciBmPWEuaW52bSh0aGlzLm4pLHM9Zi5tdWwodCkudW1vZCh0aGlzLm4pLGg9Zi5tdWwobykudW1vZCh0aGlzLm4pO2lmKCF0aGlzLmN1cnZlLl9tYXh3ZWxsVHJpY2spe3ZhciBjPXRoaXMuZy5tdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmMD09PWMuZ2V0WCgpLnVtb2QodGhpcy5uKS5jbXAobyl9dmFyIGM9dGhpcy5nLmptdWxBZGQocyxyLmdldFB1YmxpYygpLGgpO3JldHVybiFjLmlzSW5maW5pdHkoKSYmYy5lcVhUb1Aobyl9LG4ucHJvdG90eXBlLnJlY292ZXJQdWJLZXk9ZnVuY3Rpb24odCxlLHIsbil7ZigoMyZyKT09PXIsXCJUaGUgcmVjb3ZlcnkgcGFyYW0gaXMgbW9yZSB0aGFuIHR3byBiaXRzXCIpLGU9bmV3IHUoZSxuKTt2YXIgbz10aGlzLm4sYT1uZXcgaSh0KSxzPWUucixoPWUucyxjPTEmcixkPXI+PjE7aWYocy5jbXAodGhpcy5jdXJ2ZS5wLnVtb2QodGhpcy5jdXJ2ZS5uKSk+PTAmJmQpdGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgc2VuY29uZCBrZXkgY2FuZGluYXRlXCIpO3M9ZD90aGlzLmN1cnZlLnBvaW50RnJvbVgocy5hZGQodGhpcy5jdXJ2ZS5uKSxjKTp0aGlzLmN1cnZlLnBvaW50RnJvbVgocyxjKTt2YXIgbD1lLnIuaW52bShvKSxwPW8uc3ViKGEpLm11bChsKS51bW9kKG8pLGI9aC5tdWwobCkudW1vZChvKTtyZXR1cm4gdGhpcy5nLm11bEFkZChwLHMsYil9LG4ucHJvdG90eXBlLmdldEtleVJlY292ZXJ5UGFyYW09ZnVuY3Rpb24odCxlLHIsbil7aWYoZT1uZXcgdShlLG4pLG51bGwhPT1lLnJlY292ZXJ5UGFyYW0pcmV0dXJuIGUucmVjb3ZlcnlQYXJhbTtmb3IodmFyIGk9MDtpPDQ7aSsrKXt2YXIgbzt0cnl7bz10aGlzLnJlY292ZXJQdWJLZXkodCxlLGkpfWNhdGNoKHQpe2NvbnRpbnVlfWlmKG8uZXEocikpcmV0dXJuIGl9dGhyb3cgbmV3IEVycm9yKFwiVW5hYmxlIHRvIGZpbmQgdmFsaWQgcmVjb3ZlcnkgZmFjdG9yXCIpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVjPXQsdGhpcy5wcml2PW51bGwsdGhpcy5wdWI9bnVsbCxlLnByaXYmJnRoaXMuX2ltcG9ydFByaXZhdGUoZS5wcml2LGUucHJpdkVuYyksZS5wdWImJnRoaXMuX2ltcG9ydFB1YmxpYyhlLnB1YixlLnB1YkVuYyl9dmFyIGk9cigxOCk7dC5leHBvcnRzPW4sbi5mcm9tUHVibGljPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZSxwdWJFbmM6cn0pfSxuLmZyb21Qcml2YXRlPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwcml2OmUscHJpdkVuYzpyfSl9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5nZXRQdWJsaWMoKTtyZXR1cm4gdC5pc0luZmluaXR5KCk/e3Jlc3VsdDohMSxyZWFzb246XCJJbnZhbGlkIHB1YmxpYyBrZXlcIn06dC52YWxpZGF0ZSgpP3QubXVsKHRoaXMuZWMuY3VydmUubikuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITAscmVhc29uOm51bGx9OntyZXN1bHQ6ITEscmVhc29uOlwiUHVibGljIGtleSAqIE4gIT0gT1wifTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgaXMgbm90IGEgcG9pbnRcIn19LG4ucHJvdG90eXBlLmdldFB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0JiYoZT10LHQ9bnVsbCksdGhpcy5wdWJ8fCh0aGlzLnB1Yj10aGlzLmVjLmcubXVsKHRoaXMucHJpdikpLGU/dGhpcy5wdWIuZW5jb2RlKGUsdCk6dGhpcy5wdWJ9LG4ucHJvdG90eXBlLmdldFByaXZhdGU9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/dGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpOnRoaXMucHJpdn0sbi5wcm90b3R5cGUuX2ltcG9ydFByaXZhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLnByaXY9bmV3IGkodCxlfHwxNiksdGhpcy5wcml2PXRoaXMucHJpdi51bW9kKHRoaXMuZWMuY3VydmUubil9LG4ucHJvdG90eXBlLl9pbXBvcnRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdC54fHx0Lnk/dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLnBvaW50KHQueCx0LnkpKTp2b2lkKHRoaXMucHViPXRoaXMuZWMuY3VydmUuZGVjb2RlUG9pbnQodCxlKSl9LG4ucHJvdG90eXBlLmRlcml2ZT1mdW5jdGlvbih0KXtyZXR1cm4gdC5tdWwodGhpcy5wcml2KS5nZXRYKCl9LG4ucHJvdG90eXBlLnNpZ249ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLmVjLnNpZ24odCx0aGlzLGUscil9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmVjLnZlcmlmeSh0LGUsdGhpcyl9LG4ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm5cIjxLZXkgcHJpdjogXCIrKHRoaXMucHJpdiYmdGhpcy5wcml2LnRvU3RyaW5nKDE2LDIpKStcIiBwdWI6IFwiKyh0aGlzLnB1YiYmdGhpcy5wdWIuaW5zcGVjdCgpKStcIiA+XCJ9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3JldHVybiB0IGluc3RhbmNlb2Ygbj90OnZvaWQodGhpcy5faW1wb3J0REVSKHQsZSl8fChjKHQuciYmdC5zLFwiU2lnbmF0dXJlIHdpdGhvdXQgciBvciBzXCIpLHRoaXMucj1uZXcgcyh0LnIsMTYpLHRoaXMucz1uZXcgcyh0LnMsMTYpLHZvaWQgMD09PXQucmVjb3ZlcnlQYXJhbT90aGlzLnJlY292ZXJ5UGFyYW09bnVsbDp0aGlzLnJlY292ZXJ5UGFyYW09dC5yZWNvdmVyeVBhcmFtKSl9ZnVuY3Rpb24gaSgpe3RoaXMucGxhY2U9MH1mdW5jdGlvbiBvKHQsZSl7dmFyIHI9dFtlLnBsYWNlKytdO2lmKCEoMTI4JnIpKXJldHVybiByO2Zvcih2YXIgbj0xNSZyLGk9MCxvPTAsYT1lLnBsYWNlO288bjtvKyssYSsrKWk8PD04LGl8PXRbYV07cmV0dXJuIGUucGxhY2U9YSxpfWZ1bmN0aW9uIGEodCl7Zm9yKHZhciBlPTAscj10Lmxlbmd0aC0xOyF0W2VdJiYhKDEyOCZ0W2UrMV0pJiZlPHI7KWUrKztyZXR1cm4gMD09PWU/dDp0LnNsaWNlKGUpfWZ1bmN0aW9uIGYodCxlKXtpZihlPDEyOClyZXR1cm4gdm9pZCB0LnB1c2goZSk7dmFyIHI9MSsoTWF0aC5sb2coZSkvTWF0aC5MTjI+Pj4zKTtmb3IodC5wdXNoKDEyOHxyKTstLXI7KXQucHVzaChlPj4+KHI8PDMpJjI1NSk7dC5wdXNoKGUpfXZhciBzPXIoMTgpLHU9cigxOSksaD11LnV0aWxzLGM9aC5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2ltcG9ydERFUj1mdW5jdGlvbih0LGUpe3Q9aC50b0FycmF5KHQsZSk7dmFyIHI9bmV3IGk7aWYoNDghPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIG49byh0LHIpO2lmKG4rci5wbGFjZSE9PXQubGVuZ3RoKXJldHVybiExO2lmKDIhPT10W3IucGxhY2UrK10pcmV0dXJuITE7dmFyIGE9byh0LHIpLGY9dC5zbGljZShyLnBsYWNlLGErci5wbGFjZSk7aWYoci5wbGFjZSs9YSwyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciB1PW8odCxyKTtpZih0Lmxlbmd0aCE9PXUrci5wbGFjZSlyZXR1cm4hMTt2YXIgYz10LnNsaWNlKHIucGxhY2UsdStyLnBsYWNlKTtyZXR1cm4gMD09PWZbMF0mJjEyOCZmWzFdJiYoZj1mLnNsaWNlKDEpKSwwPT09Y1swXSYmMTI4JmNbMV0mJihjPWMuc2xpY2UoMSkpLHRoaXMucj1uZXcgcyhmKSx0aGlzLnM9bmV3IHMoYyksdGhpcy5yZWNvdmVyeVBhcmFtPW51bGwsITB9LG4ucHJvdG90eXBlLnRvREVSPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuci50b0FycmF5KCkscj10aGlzLnMudG9BcnJheSgpO2ZvcigxMjgmZVswXSYmKGU9WzBdLmNvbmNhdChlKSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpLGU9YShlKSxyPWEocik7IShyWzBdfHwxMjgmclsxXSk7KXI9ci5zbGljZSgxKTt2YXIgbj1bMl07ZihuLGUubGVuZ3RoKSxuPW4uY29uY2F0KGUpLG4ucHVzaCgyKSxmKG4sci5sZW5ndGgpO3ZhciBpPW4uY29uY2F0KHIpLG89WzQ4XTtyZXR1cm4gZihvLGkubGVuZ3RoKSxvPW8uY29uY2F0KGkpLGguZW5jb2RlKG8sdCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZihmKFwiZWQyNTUxOVwiPT09dCxcIm9ubHkgdGVzdGVkIHdpdGggZWQyNTUxOSBzbyBmYXJcIiksISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3ZhciB0PW8uY3VydmVzW3RdLmN1cnZlO3RoaXMuY3VydmU9dCx0aGlzLmc9dC5nLHRoaXMuZy5wcmVjb21wdXRlKHQubi5iaXRMZW5ndGgoKSsxKSx0aGlzLnBvaW50Q2xhc3M9dC5wb2ludCgpLmNvbnN0cnVjdG9yLHRoaXMuZW5jb2RpbmdMZW5ndGg9TWF0aC5jZWlsKHQubi5iaXRMZW5ndGgoKS84KSx0aGlzLmhhc2g9aS5zaGE1MTJ9dmFyIGk9cig0OSksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEucGFyc2VCeXRlcyx1PXIoNTE3KSxoPXIoNTE4KTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSl7dD1zKHQpO3ZhciByPXRoaXMua2V5RnJvbVNlY3JldChlKSxuPXRoaXMuaGFzaEludChyLm1lc3NhZ2VQcmVmaXgoKSx0KSxpPXRoaXMuZy5tdWwobiksbz10aGlzLmVuY29kZVBvaW50KGkpLGE9dGhpcy5oYXNoSW50KG8sci5wdWJCeXRlcygpLHQpLm11bChyLnByaXYoKSksZj1uLmFkZChhKS51bW9kKHRoaXMuY3VydmUubik7cmV0dXJuIHRoaXMubWFrZVNpZ25hdHVyZSh7UjppLFM6ZixSZW5jb2RlZDpvfSl9LG4ucHJvdG90eXBlLnZlcmlmeT1mdW5jdGlvbih0LGUscil7dD1zKHQpLGU9dGhpcy5tYWtlU2lnbmF0dXJlKGUpO3ZhciBuPXRoaXMua2V5RnJvbVB1YmxpYyhyKSxpPXRoaXMuaGFzaEludChlLlJlbmNvZGVkKCksbi5wdWJCeXRlcygpLHQpLG89dGhpcy5nLm11bChlLlMoKSksYT1lLlIoKS5hZGQobi5wdWIoKS5tdWwoaSkpO3JldHVybiBhLmVxKG8pfSxuLnByb3RvdHlwZS5oYXNoSW50PWZ1bmN0aW9uKCl7Zm9yKHZhciB0PXRoaXMuaGFzaCgpLGU9MDtlPGFyZ3VtZW50cy5sZW5ndGg7ZSsrKXQudXBkYXRlKGFyZ3VtZW50c1tlXSk7cmV0dXJuIGEuaW50RnJvbUxFKHQuZGlnZXN0KCkpLnVtb2QodGhpcy5jdXJ2ZS5uKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0KXtyZXR1cm4gdS5mcm9tUHVibGljKHRoaXMsdCl9LG4ucHJvdG90eXBlLmtleUZyb21TZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVNlY3JldCh0aGlzLHQpfSxuLnByb3RvdHlwZS5tYWtlU2lnbmF0dXJlPWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgaD90Om5ldyBoKHRoaXMsdCl9LG4ucHJvdG90eXBlLmVuY29kZVBvaW50PWZ1bmN0aW9uKHQpe3ZhciBlPXQuZ2V0WSgpLnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBlW3RoaXMuZW5jb2RpbmdMZW5ndGgtMV18PXQuZ2V0WCgpLmlzT2RkKCk/MTI4OjAsZX0sbi5wcm90b3R5cGUuZGVjb2RlUG9pbnQ9ZnVuY3Rpb24odCl7dD1hLnBhcnNlQnl0ZXModCk7dmFyIGU9dC5sZW5ndGgtMSxyPXQuc2xpY2UoMCxlKS5jb25jYXQodFtlXSYtMTI5KSxuPTAhPT0oMTI4JnRbZV0pLGk9YS5pbnRGcm9tTEUocik7cmV0dXJuIHRoaXMuY3VydmUucG9pbnRGcm9tWShpLG4pfSxuLnByb3RvdHlwZS5lbmNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQudG9BcnJheShcImxlXCIsdGhpcy5lbmNvZGluZ0xlbmd0aCl9LG4ucHJvdG90eXBlLmRlY29kZUludD1mdW5jdGlvbih0KXtyZXR1cm4gYS5pbnRGcm9tTEUodCl9LG4ucHJvdG90eXBlLmlzUG9pbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzLnBvaW50Q2xhc3N9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCx0aGlzLl9zZWNyZXQ9ZihlLnNlY3JldCksdC5pc1BvaW50KGUucHViKT90aGlzLl9wdWI9ZS5wdWI6dGhpcy5fcHViQnl0ZXM9ZihlLnB1Yil9dmFyIGk9cigxOSksbz1pLnV0aWxzLGE9by5hc3NlcnQsZj1vLnBhcnNlQnl0ZXMscz1vLmNhY2hlZFByb3BlcnR5O24uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3B1YjplfSl9LG4uZnJvbVNlY3JldD1mdW5jdGlvbih0LGUpe3JldHVybiBlIGluc3RhbmNlb2Ygbj9lOm5ldyBuKHQse3NlY3JldDplfSl9LG4ucHJvdG90eXBlLnNlY3JldD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9zZWNyZXR9LHMobixcInB1YkJ5dGVzXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLnB1YigpKX0pLHMobixcInB1YlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3B1YkJ5dGVzP3RoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5fcHViQnl0ZXMpOnRoaXMuZWRkc2EuZy5tdWwodGhpcy5wcml2KCkpfSkscyhuLFwicHJpdkJ5dGVzXCIsZnVuY3Rpb24oKXt2YXIgdD10aGlzLmVkZHNhLGU9dGhpcy5oYXNoKCkscj10LmVuY29kaW5nTGVuZ3RoLTEsbj1lLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCk7cmV0dXJuIG5bMF0mPTI0OCxuW3JdJj0xMjcsbltyXXw9NjQsbn0pLHMobixcInByaXZcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLnByaXZCeXRlcygpKX0pLHMobixcImhhc2hcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmhhc2goKS51cGRhdGUodGhpcy5zZWNyZXQoKSkuZGlnZXN0KCl9KSxzKG4sXCJtZXNzYWdlUHJlZml4XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5oYXNoKCkuc2xpY2UodGhpcy5lZGRzYS5lbmNvZGluZ0xlbmd0aCl9KSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgY2FuIG9ubHkgdmVyaWZ5XCIpLHRoaXMuZWRkc2Euc2lnbih0LHRoaXMpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lZGRzYS52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5nZXRTZWNyZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEodGhpcy5fc2VjcmV0LFwiS2V5UGFpciBpcyBwdWJsaWMgb25seVwiKSxvLmVuY29kZSh0aGlzLnNlY3JldCgpLHQpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIG8uZW5jb2RlKHRoaXMucHViQnl0ZXMoKSx0KX0sdC5leHBvcnRzPW59LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lZGRzYT10LFwib2JqZWN0XCIhPXR5cGVvZiBlJiYoZT11KGUpKSxBcnJheS5pc0FycmF5KGUpJiYoZT17UjplLnNsaWNlKDAsdC5lbmNvZGluZ0xlbmd0aCksUzplLnNsaWNlKHQuZW5jb2RpbmdMZW5ndGgpfSksZihlLlImJmUuUyxcIlNpZ25hdHVyZSB3aXRob3V0IFIgb3IgU1wiKSx0LmlzUG9pbnQoZS5SKSYmKHRoaXMuX1I9ZS5SKSxlLlMgaW5zdGFuY2VvZiBpJiYodGhpcy5fUz1lLlMpLHRoaXMuX1JlbmNvZGVkPUFycmF5LmlzQXJyYXkoZS5SKT9lLlI6ZS5SZW5jb2RlZCx0aGlzLl9TZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUyk/ZS5TOmUuU2VuY29kZWR9dmFyIGk9cigxOCksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPWEuY2FjaGVkUHJvcGVydHksdT1hLnBhcnNlQnl0ZXM7cyhuLFwiU1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlSW50KHRoaXMuU2VuY29kZWQoKSl9KSxzKG4sXCJSXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVQb2ludCh0aGlzLlJlbmNvZGVkKCkpfSkscyhuLFwiUmVuY29kZWRcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmVuY29kZVBvaW50KHRoaXMuUigpKX0pLHMobixcIlNlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVJbnQodGhpcy5TKCkpfSksbi5wcm90b3R5cGUudG9CeXRlcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLlJlbmNvZGVkKCkuY29uY2F0KHRoaXMuU2VuY29kZWQoKSl9LG4ucHJvdG90eXBlLnRvSGV4PWZ1bmN0aW9uKCl7cmV0dXJuIGEuZW5jb2RlKHRoaXMudG9CeXRlcygpLFwiaGV4XCIpLnRvVXBwZXJDYXNlKCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSlyZXR1cm4gbmV3IG4odCk7dGhpcy5oYXNoPXQuaGFzaCx0aGlzLnByZWRSZXNpc3Q9ISF0LnByZWRSZXNpc3QsdGhpcy5vdXRMZW49dGhpcy5oYXNoLm91dFNpemUsdGhpcy5taW5FbnRyb3B5PXQubWluRW50cm9weXx8dGhpcy5oYXNoLmhtYWNTdHJlbmd0aCx0aGlzLnJlc2VlZD1udWxsLHRoaXMucmVzZWVkSW50ZXJ2YWw9bnVsbCx0aGlzLks9bnVsbCx0aGlzLlY9bnVsbDt2YXIgZT1hLnRvQXJyYXkodC5lbnRyb3B5LHQuZW50cm9weUVuYykscj1hLnRvQXJyYXkodC5ub25jZSx0Lm5vbmNlRW5jKSxpPWEudG9BcnJheSh0LnBlcnMsdC5wZXJzRW5jKTtmKGUubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5faW5pdChlLHIsaSl9dmFyIGk9cig0OSksbz1yKDE5KSxhPW8udXRpbHMsZj1hLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0LGUscil7dmFyIG49dC5jb25jYXQoZSkuY29uY2F0KHIpO3RoaXMuSz1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCksdGhpcy5WPW5ldyBBcnJheSh0aGlzLm91dExlbi84KTtmb3IodmFyIGk9MDtpPHRoaXMuVi5sZW5ndGg7aSsrKXRoaXMuS1tpXT0wLHRoaXMuVltpXT0xO3RoaXMuX3VwZGF0ZShuKSx0aGlzLnJlc2VlZD0xLHRoaXMucmVzZWVkSW50ZXJ2YWw9MjgxNDc0OTc2NzEwNjU2fSxuLnByb3RvdHlwZS5faG1hYz1mdW5jdGlvbigpe3JldHVybiBuZXcgaS5obWFjKHRoaXMuaGFzaCx0aGlzLkspfSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzBdKTt0JiYoZT1lLnVwZGF0ZSh0KSksdGhpcy5LPWUuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSx0JiYodGhpcy5LPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS51cGRhdGUoWzFdKS51cGRhdGUodCkuZGlnZXN0KCksdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSl9LG4ucHJvdG90eXBlLnJlc2VlZD1mdW5jdGlvbih0LGUscixuKXtcInN0cmluZ1wiIT10eXBlb2YgZSYmKG49cixyPWUsZT1udWxsKSx0PWEudG9CdWZmZXIodCxlKSxyPWEudG9CdWZmZXIocixuKSxmKHQubGVuZ3RoPj10aGlzLm1pbkVudHJvcHkvOCxcIk5vdCBlbm91Z2ggZW50cm9weS4gTWluaW11bSBpczogXCIrdGhpcy5taW5FbnRyb3B5K1wiIGJpdHNcIiksdGhpcy5fdXBkYXRlKHQuY29uY2F0KHJ8fFtdKSksdGhpcy5yZXNlZWQ9MX0sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCxlLHIsbil7aWYodGhpcy5yZXNlZWQ+dGhpcy5yZXNlZWRJbnRlcnZhbCl0aHJvdyBuZXcgRXJyb3IoXCJSZXNlZWQgaXMgcmVxdWlyZWRcIik7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksciYmKHI9YS50b0FycmF5KHIsbiksdGhpcy5fdXBkYXRlKHIpKTtmb3IodmFyIGk9W107aS5sZW5ndGg8dDspdGhpcy5WPXRoaXMuX2htYWMoKS51cGRhdGUodGhpcy5WKS5kaWdlc3QoKSxpPWkuY29uY2F0KHRoaXMuVik7dmFyIG89aS5zbGljZSgwLHQpO3JldHVybiB0aGlzLl91cGRhdGUociksdGhpcy5yZXNlZWQrKyxhLmVuY29kZShvLGUpfX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9e2RvdWJsZXM6e3N0ZXA6NCxwb2ludHM6W1tcImU2MGZjZTkzYjU5ZTllYzUzMDExYWFiYzIxYzIzZTk3YjJhMzEzNjliODdhNWFlOWM0NGVlODllMmE2ZGVjMGFcIixcImY3ZTM1MDczOTllNTk1OTI5ZGI5OWYzNGY1NzkzNzEwMTI5Njg5MWU0NGQyM2YwYmUxZjMyY2NlNjk2MTY4MjFcIl0sW1wiODI4MjI2MzIxMmM2MDlkOWVhMmE2ZTNlMTcyZGUyMzhkOGMzOWNhYmQ1YWMxY2ExMDY0NmUyM2ZkNWY1MTUwOFwiLFwiMTFmOGE4MDk4NTU3ZGZlNDVlODI1NmU4MzBiNjBhY2U2MmQ2MTNhYzJmN2IxN2JlZDMxYjZlYWZmNmUyNmNhZlwiXSxbXCIxNzVlMTU5ZjcyOGI4NjVhNzJmOTljYzZjNmZjODQ2ZGUwYjkzODMzZmQyMjIyZWQ3M2ZjZTViNTUxZTViNzM5XCIsXCJkMzUwNmUwZDllM2M3OWViYTRlZjk3YTUxZmY3MWY1ZWFjYjU5NTVhZGQyNDM0NWM2ZWZhNmZmZWU5ZmVkNjk1XCJdLFtcIjM2M2Q5MGQ0NDdiMDBjOWM5OWNlYWMwNWI2MjYyZWUwNTM0NDFjN2U1NTU1MmZmZTUyNmJhZDhmODNmZjQ2NDBcIixcIjRlMjczYWRmYzczMjIyMTk1M2I0NDUzOTdmMzM2MzE0NWI5YTg5MDA4MTk5ZWNiNjIwMDNjN2YzYmVlOWRlOVwiXSxbXCI4YjRiNWYxNjVkZjNjMmJlOGM2MjQ0YjViNzQ1NjM4ODQzZTRhNzgxYTE1YmNkMWI2OWY3OWE1NWRmZmRmODBjXCIsXCI0YWFkMGE2ZjY4ZDMwOGI0YjNmYmQ3ODEzYWIwZGEwNGY5ZTMzNjU0NjE2MmVlNTZiM2VmZjBjNjVmZDRmZDM2XCJdLFtcIjcyM2NiYWE2ZTVkYjk5NmQ2YmY3NzFjMDBiZDU0OGM3YjcwMGRiZmZhNmMwZTc3YmNiNjExNTkyNTIzMmZjZGFcIixcIjk2ZTg2N2I1NTk1Y2M0OThhOTIxMTM3NDg4ODI0ZDZlMjY2MGEwNjUzNzc5NDk0ODAxZGMwNjlkOWViMzlmNWZcIl0sW1wiZWViZmE0ZDQ5M2JlYmY5OGJhNWZlZWM4MTJjMmQzYjUwOTQ3OTYxMjM3YTkxOTgzOWE1MzNlY2EwZTdkZDdmYVwiLFwiNWQ5YThjYTM5NzBlZjBmMjY5ZWU3ZWRhZjE3ODA4OWQ5YWU0Y2RjM2E3MTFmNzEyZGRmZDRmZGFlMWRlODk5OVwiXSxbXCIxMDBmNDRkYTY5NmU3MTY3Mjc5MWQwYTA5YjdiZGU0NTlmMTIxNWEyOWIzYzAzYmZlZmQ3ODM1YjM5YTQ4ZGIwXCIsXCJjZGQ5ZTEzMTkyYTAwYjc3MmVjOGYzMzAwYzA5MDY2NmI3ZmY0YTE4ZmY1MTk1YWMwZmJkNWNkNjJiYzY1YTA5XCJdLFtcImUxMDMxYmUyNjJjN2VkMWIxZGM5MjI3YTRhMDRjMDE3YTc3ZjhkNDQ2NGYzYjM4NTJjOGFjZGU2ZTUzNGZkMmRcIixcIjlkNzA2MTkyODk0MDQwNWU2YmI2YTQxNzY1OTc1MzVhZjI5MmRkNDE5ZTFjZWQ3OWE0NGYxOGYyOTQ1NmEwMGRcIl0sW1wiZmVlYTZjYWU0NmQ1NWI1MzBhYzI4MzlmMTQzYmQ3ZWM1Y2Y4YjI2NmE0MWQ2YWY1MmQ1ZTY4OGQ5MDk0Njk2ZFwiLFwiZTU3YzZiNmM5N2RjZTFiYWIwNmU0ZTEyYmYzZWNkNWM5ODFjODk1N2NjNDE0NDJkMzE1NWRlYmYxODA5MDA4OFwiXSxbXCJkYTY3YTkxZDkxMDQ5Y2RjYjM2N2JlNGJlNmZmY2EzY2ZlZWQ2NTdkODA4NTgzZGUzM2ZhOTc4YmMxZWM2Y2IxXCIsXCI5YmFjYWEzNTQ4MTY0MmJjNDFmNDYzZjdlYzk3ODBlNWRlYzdhZGM1MDhmNzQwYTE3ZTllYThlMjdhNjhiZTFkXCJdLFtcIjUzOTA0ZmFhMGIzMzRjZGRhNmUwMDA5MzVlZjIyMTUxZWMwOGQwZjdiYjExMDY5ZjU3NTQ1Y2NjMWEzN2I3YzBcIixcIjViYzA4N2QwYmM4MDEwNmQ4OGM5ZWNjYWMyMGQzYzFjMTM5OTk5ODFlMTQ0MzQ2OTlkY2IwOTZiMDIyNzcxYzhcIl0sW1wiOGU3YmNkMGJkMzU5ODNhNzcxOWNjYTc3NjRjYTkwNjc3OWI1M2EwNDNhOWI4YmNhZWZmOTU5ZjQzYWQ4NjA0N1wiLFwiMTBiNzc3MGIyYTNkYTRiMzk0MDMxMDQyMGNhOTUxNDU3OWU4OGUyZTQ3ZmQ2OGIzZWExMDA0N2U4NDYwMzcyYVwiXSxbXCIzODVlZWQzNGMxY2RmZjIxZTZkMDgxODY4OWI4MWJkZTcxYTdmNGYxODM5N2U2NjkwYTg0MWUxNTk5YzQzODYyXCIsXCIyODNiZWJjM2U4ZWEyM2Y1NjcwMWRlMTllOWViZjQ1NzZiMzA0ZWVjMjA4NmRjOGNjMDQ1OGZlNTU0MmU1NDUzXCJdLFtcIjZmOWQ5YjgwM2VjZjE5MTYzN2M3M2E0NDEzZGZhMTgwZmRkZjg0YTU5NDdmYmM5YzYwNmVkODZjM2ZhYzNhN1wiLFwiN2M4MGM2OGU2MDMwNTliYTY5YjhlMmEzMGU0NWM0ZDQ3ZWE0ZGQyZjVjMjgxMDAyZDg2ODkwNjAzYTg0MjE2MFwiXSxbXCIzMzIyZDQwMTI0M2M0ZTI1ODJhMjE0N2MxMDRkNmVjYmY3NzRkMTYzZGIwZjVlNTMxM2I3ZTBlNzQyZDBlNmJkXCIsXCI1NmU3MDc5N2U5NjY0ZWY1YmZiMDE5YmM0ZGRhZjliNzI4MDVmNjNlYTI4NzNhZjYyNGYzYTJlOTZjMjhiMmEwXCJdLFtcIjg1NjcyYzdkMmRlMGI3ZGEyYmQxNzcwZDg5NjY1ODY4NzQxYjNmOWFmNzY0MzM5NzcyMWQ3NGQyODEzNGFiODNcIixcIjdjNDgxYjliNWI0M2IyZWI2Mzc0MDQ5YmZhNjJjMmU1ZTc3ZjE3ZmNjNTI5OGY0NGM4ZTMwOTRmNzkwMzEzYTZcIl0sW1wiOTQ4YmY4MDliMTk4OGE0NmIwNmM5ZjE5MTk0MTNiMTBmOTIyNmM2MGY2Njg4MzJmZmQ5NTlhZjYwYzgyYTBhXCIsXCI1M2E1NjI4NTZkY2I2NjQ2ZGM2Yjc0YzVkMWMzNDE4YzZkNGRmZjA4Yzk3Y2QyYmVkNGNiN2Y4OGQ4YzhlNTg5XCJdLFtcIjYyNjBjZTdmNDYxODAxYzM0ZjA2N2NlMGYwMjg3M2E4ZjFiMGU0NGRmYzY5NzUyYWNjZWNkODE5ZjM4ZmQ4ZThcIixcImJjMmRhODJiNmZhNWI1NzFhN2YwOTA0OTc3NmExZWY3ZWNkMjkyMjM4MDUxYzE5OGMxYTg0ZTk1YjJiNGFlMTdcIl0sW1wiZTUwMzdkZTBhZmMxZDhkNDNkODM0ODQxNGJiZjQxMDMwNDNlYzhmNTc1YmZkYzQzMjk1M2NjOGQyMDM3ZmEyZFwiLFwiNDU3MTUzNGJhYTk0ZDNiNWY5Zjk4ZDA5ZmI5OTBiZGRiZDVmNWIwM2VjNDgxZjEwZTBlNWRjODQxZDc1NWJkYVwiXSxbXCJlMDYzNzJiMGY0YTIwN2FkZjVlYTkwNWU4ZjE3NzFiNGU3ZThkYmQxYzZhNmM1YjcyNTg2NmEwYWU0ZmNlNzI1XCIsXCI3YTkwODk3NGJjZTE4Y2ZlMTJhMjdiYjJhZDVhNDg4Y2Q3NDg0YTc3ODcxMDQ4NzBiMjcwMzRmOTRlZWUzMWRkXCJdLFtcIjIxM2M3YTcxNWNkNWQ0NTM1OGQwYmJmOWRjMGNlMDIyMDRiMTBiZGRlMmEzZjU4NTQwYWQ2OTA4ZDA1NTk3NTRcIixcIjRiNmRhZDBiNWFlNDYyNTA3MDEzYWQwNjI0NWJhMTkwYmI0ODUwZjVmMzZhN2VlZGRmZjJjMjc1MzRiNDU4ZjJcIl0sW1wiNGU3YzI3MmE3YWY0YjM0ZThkYmI5MzUyYTU0MTlhODdlMjgzOGM3MGFkYzYyY2RkZjBjYzNhM2IwOGZiZDUzY1wiLFwiMTc3NDljNzY2YzlkMGIxOGUxNmZkMDlmNmRlZjY4MWI1MzBiOTYxNGJmZjdkZDMzZTBiMzk0MTgxN2RjYWFlNlwiXSxbXCJmZWE3NGUzZGJlNzc4YjFiMTBmMjM4YWQ2MTY4NmFhNWM3NmUzZGIyYmU0MzA1NzYzMjQyN2UyODQwZmIyN2I2XCIsXCI2ZTA1NjhkYjliMGIxMzI5N2NmNjc0ZGVjY2I2YWY5MzEyNmI1OTZiOTczZjdiNzc3MDFkM2RiN2YyM2NiOTZmXCJdLFtcIjc2ZTY0MTEzZjY3N2NmMGUxMGEyNTcwZDU5OTk2OGQzMTU0NGUxNzliNzYwNDMyOTUyYzAyYTQ0MTdiZGRlMzlcIixcImM5MGRkZjhkZWU0ZTk1Y2Y1NzcwNjZkNzA2ODFmMGQzNWUyYTMzZDJiNTZkMjAzMmI0YjE3NTJkMTkwMWFjMDFcIl0sW1wiYzczOGM1NmIwM2IyYWJlMWU4MjgxYmFhNzQzZjhmOWE4ZjdjYzY0M2RmMjZjYmVlM2FiMTUwMjQyYmNiYjg5MVwiLFwiODkzZmI1Nzg5NTFhZDI1MzdmNzE4ZjJlYWNiZmJiYmI4MjMxNGVlZjc4ODBjZmU5MTdlNzM1ZDk2OTlhODRjM1wiXSxbXCJkODk1NjI2NTQ4YjY1YjgxZTI2NGM3NjM3Yzk3Mjg3N2QxZDcyZTVmM2E5MjUwMTQzNzJlOWY2NTg4ZjZjMTRiXCIsXCJmZWJmYWEzOGYyYmM3ZWFlNzI4ZWM2MDgxOGMzNDBlYjAzNDI4ZDYzMmJiMDY3ZTE3OTM2M2VkNzVkN2Q5OTFmXCJdLFtcImI4ZGE5NDAzMmE5NTc1MThlYjBmNjQzMzU3MWU4NzYxY2VmZmM3MzY5M2U4NGVkZDQ5MTUwYTU2NGY2NzZlMDNcIixcIjI4MDRkZmE0NDgwNWExZTRkN2M5OWNjOTc2MjgwOGIwOTJjYzU4NGQ5NWZmM2I1MTE0ODhlNGU3NGVmZGY2ZTdcIl0sW1wiZTgwZmVhMTQ0NDFmYjMzYTdkOGFkYWI5NDc1ZDdmYWIyMDE5ZWZmYjUxNTZhNzkyZjFhMTE3NzhlM2MwZGY1ZFwiLFwiZWVkMWRlN2Y2MzhlMDA3NzFlODk3NjhjYTNjYTk0NDcyZDE1NWU4MGFmMzIyZWE5ZmNiNDI5MWI2YWM5ZWM3OFwiXSxbXCJhMzAxNjk3YmRmY2Q3MDQzMTNiYTQ4ZTUxZDU2NzU0M2YyYTE4MjAzMWVmZDY5MTVkZGMwN2JiY2M0ZTE2MDcwXCIsXCI3MzcwZjkxY2ZiNjdlNGY1MDgxODA5ZmEyNWQ0MGY5YjE3MzVkYmY3YzBhMTFhMTMwYzBkMWEwNDFlMTc3ZWExXCJdLFtcIjkwYWQ4NWIzODlkNmI5MzY0NjNmOWQwNTEyNjc4ZGUyMDhjYzMzMGIxMTMwN2ZmZmFiN2FjNjNlM2ZiMDRlZDRcIixcImU1MDdhMzYyMGEzODI2MWFmZmRjYmQ5NDI3MjIyYjgzOWFlZmFiZTE1ODI4OTRkOTkxZDRkNDhjYjZlZjE1MFwiXSxbXCI4ZjY4YjlkMmY2M2I1ZjMzOTIzOWMxYWQ5ODFmMTYyZWU4OGM1Njc4NzIzZWEzMzUxYjdiNDQ0YzllYzRjMGRhXCIsXCI2NjJhOWYyZGJhMDYzOTg2ZGUxZDkwYzJiNmJlMjE1ZGJiZWEyY2ZlOTU1MTBiZmRmMjNjYmY3OTUwMWZmZjgyXCJdLFtcImU0ZjNmYjAxNzZhZjg1ZDY1ZmY5OWZmOTE5OGMzNjA5MWY0OGU4NjUwMzY4MWUzZTY2ODZmZDUwNTMyMzFlMTFcIixcIjFlNjM2MzNhZDBlZjRmMWMxNjYxYTZkMGVhMDJiNzI4NmNjN2U3NGVjOTUxZDFjOTgyMmMzODU3NmZlYjczYmNcIl0sW1wiOGMwMGZhOWIxOGViZjMzMWViOTYxNTM3YTQ1YTQyNjZjNzAzNGYyZjBkNGUxZDA3MTZmYjZlYWUyMGVhZTI5ZVwiLFwiZWZhNDcyNjdmZWE1MjFhMWE5ZGMzNDNhMzczNmM5NzRjMmZhZGFmYTgxZTM2YzU0ZTdkMmE0YzY2NzAyNDE0YlwiXSxbXCJlN2EyNmNlNjlkZDQ4MjlmM2UxMGNlYzBhOWU5OGVkMzE0M2QwODRmMzA4YjkyYzA5OTdmZGRmYzYwY2IzZTQxXCIsXCIyYTc1OGUzMDBmYTc5ODRiNDcxYjAwNmExYWFmYmIxOGQwYTZiMmMwNDIwZTgzZTIwZThhOTQyMWNmMmNmZDUxXCJdLFtcImI2NDU5ZTBlZTM2NjJlYzhkMjM1NDBjMjIzYmNiZGM1NzFjYmNiOTY3ZDc5NDI0ZjNjZjI5ZWIzZGU2YjgwZWZcIixcIjY3Yzg3NmQwNmYzZTA2ZGUxZGFkZjE2ZTU2NjFkYjNjNGIzYWU2ZDQ4ZTM1YjJmZjMwYmYwYjYxYTcxYmE0NVwiXSxbXCJkNjhhODBjODI4MGJiODQwNzkzMjM0YWExMThmMDYyMzFkNmYxZmM2N2U3M2M1YTVkZWRhMGY1YjQ5Njk0M2U4XCIsXCJkYjhiYTlmZmY0YjU4NmQwMGM0YjFmOTE3N2IwZTI4YjViMGU3YjhmNzg0NTI5NWEyOTRjODQyNjZiMTMzMTIwXCJdLFtcIjMyNGFlZDdkZjY1YzgwNDI1MmRjMDI3MDkwN2EzMGIwOTYxMmFlYjk3MzQ0OWNlYTQwOTU5ODBmYzI4ZDNkNWRcIixcIjY0OGEzNjU3NzRiNjFmMmZmMTMwYzBjMzVhZWMxZjRmMTkyMTNiMGM3ZTMzMjg0Mzk2NzIyNGFmOTZhYjdjODRcIl0sW1wiNGRmOWMxNDkxOWNkZTYxZjZkNTFkZmRiZTVmZWU1ZGNlZWM0MTQzYmE4ZDFjYTg4OGU4YmQzNzNmZDA1NGM5NlwiLFwiMzVlYzUxMDkyZDg3MjgwNTA5NzRjMjNhMWQ4NWQ0YjVkNTA2Y2RjMjg4NDkwMTkyZWJhYzA2Y2FkMTBkNWRcIl0sW1wiOWMzOTE5YTg0YTQ3NDg3MGZhZWQ4YTljMWNjNjYwMjE1MjM0ODkwNTRkN2YwMzA4Y2JmYzk5YzhhYzFmOThjZFwiLFwiZGRiODRmMGY0YTRkZGQ1NzU4NGYwNDRiZjI2MGU2NDE5MDUzMjZmNzZjNjRjOGU2YmU3ZTVlMDNkNGZjNTk5ZFwiXSxbXCI2MDU3MTcwYjFkZDEyZmRmOGRlMDVmMjgxZDhlMDZiYjkxZTE0OTNhOGI5MWQ0Y2M1YTIxMzgyMTIwYTk1OWU1XCIsXCI5YTFhZjBiMjZhNmE0ODA3YWRkOWEyZGFmNzFkZjI2MjQ2NTE1MmJjM2VlMjRjNjVlODk5YmU5MzIzODVhMmE4XCJdLFtcImE1NzZkZjhlMjNhMDg0MTE0MjE0MzlhNDUxOGRhMzE4ODBjZWYwZmJhN2Q0ZGYxMmIxYTY5NzNlZWNiOTQyNjZcIixcIjQwYTZiZjIwZTc2NjQwYjJjOTJiOTdhZmU1OGNkODJjNDMyZTEwYTdmNTE0ZDlmM2VlOGJlMTFhZTFiMjhlYzhcIl0sW1wiNzc3OGE3OGMyOGRlYzNlMzBhMDVmZTk2MjlkZThjMzhiYjMwZDFmNWNmOWEzYTIwOGY3NjM4ODliZTU4YWQ3MVwiLFwiMzQ2MjZkOWFiNWE1YjIyZmY3MDk4ZTEyZjJmZjU4MDA4N2IzODQxMWZmMjRhYzU2M2I1MTNmYzFmZDlmNDNhY1wiXSxbXCI5Mjg5NTVlZTYzN2E4NDQ2MzcyOWZkMzBlN2FmZDJlZDVmOTYyNzRlNWFkN2U1Y2IwOWVkYTljMDZkOTAzYWNcIixcImMyNTYyMTAwM2QzZjQyYTgyN2I3OGExMzA5M2E5NWVlYWMzZDI2ZWZhOGE4ZDgzZmM1MTgwZTkzNWJjZDA5MWZcIl0sW1wiODVkMGZlZjNlYzZkYjEwOTM5OTA2NGYzYTBlM2IyODU1NjQ1YjRhOTA3YWQzNTQ1MjdhYWU3NTE2M2Q4Mjc1MVwiLFwiMWYwMzY0ODQxM2EzOGMwYmUyOWQ0OTZlNTgyY2Y1NjYzZTg3NTFlOTY4NzczMzE1ODJjMjM3YTI0ZWIxZjk2MlwiXSxbXCJmZjJiMGRjZTk3ZWVjZTk3YzFjOWI2MDQxNzk4Yjg1ZGZkZmI2ZDg4ODJkYTIwMzA4ZjU0MDQ4MjQ1MjYwODdlXCIsXCI0OTNkMTNmZWY1MjRiYTE4OGFmNGM0ZGM1NGQwNzkzNmM3YjdlZDZmYjkwZTJjZWIyYzk1MWUwMWYwYzI5OTA3XCJdLFtcIjgyN2ZiYmU0YjFlODgwZWE5ZWQyYjJlNjMwMWIyMTJiNTdmMWVlMTQ4Y2Q2ZGQyODc4MGU1ZTJjZjg1NmUyNDFcIixcImM2MGY5YzkyM2M3MjdiMGI3MWJlZjJjNjdkMWQxMjY4N2ZmN2E2MzE4NjkwMzE2NmQ2MDViNjhiYWVjMjkzZWNcIl0sW1wiZWFhNjQ5ZjIxZjUxYmRiYWU3YmU0YWUzNGNlNmU1MjE3YTU4ZmRjZTdmNDdmOWFhN2YzYjU4ZmEyMTIwZTJiM1wiLFwiYmUzMjc5ZWQ1YmJiYjAzYWM2OWE4MGY4OTg3OWFhNWEwMWE2Yjk2NWYxM2Y3ZTU5ZDQ3YTUzMDViYTVhZDkzZFwiXSxbXCJlNGE0MmQ0M2M1Y2YxNjlkOTM5MWRmNmRlY2Y0MmVlNTQxYjZkOGYwYzlhMTM3NDAxZTIzNjMyZGRhMzRkMjRmXCIsXCI0ZDlmOTJlNzE2ZDFjNzM1MjZmYzk5Y2NmYjhhZDM0Y2U4ODZlZWRmYThkOGU0ZjEzYTdmNzEzMWRlYmE5NDE0XCJdLFtcIjFlYzgwZmVmMzYwY2JkZDk1NDE2MGZhZGFiMzUyYjZiOTJiNTM1NzZhODhmZWE0OTQ3MTczYjlkNDMwMGJmMTlcIixcImFlZWZlOTM3NTZiNTM0MGQyZjNhNDk1OGE3YWJiZjVlMDE0NmU3N2Y2Mjk1YTA3YjY3MWNkYzFjYzEwN2NlZmRcIl0sW1wiMTQ2YTc3OGMwNDY3MGMyZjkxYjAwYWY0NjgwZGZhOGJjZTM0OTA3MTdkNThiYTg4OWRkYjU5MjgzNjY2NDJiZVwiLFwiYjMxOGUwZWMzMzU0MDI4YWRkNjY5ODI3ZjlkNGIyODcwYWFhOTcxZDJmN2U1ZWQxZDBiMjk3NDgzZDgzZWZkMFwiXSxbXCJmYTUwYzBmNjFkMjJlNWYwN2UzYWNlYmIxYWEwN2IxMjhkMDAxMjIwOWEyOGI5Nzc2ZDc2YTg3OTMxODBlZWY5XCIsXCI2Yjg0YzY5MjIzOTdlYmE5YjcyY2QyODcyMjgxYTY4YTVlNjgzMjkzYTU3YTIxM2IzOGNkOGQ3ZDNmNGYyODExXCJdLFtcImRhMWQ2MWQwY2E3MjFhMTFiMWE1YmY2YjdkODhlODQyMWEyODhhYjVkNWJiYTUyMjBlNTNkMzJiNWYwNjdlYzJcIixcIjgxNTdmNTVhN2M5OTMwNmM3OWMwNzY2MTYxYzkxZTI5NjZhNzM4OTlkMjc5YjQ4YTY1NWZiYTBmMWFkODM2ZjFcIl0sW1wiYThlMjgyZmYwYzk3MDY5MDcyMTVmZjk4ZThmZDQxNjYxNTMxMWRlMDQ0NmYxZTA2MmE3M2IwNjEwZDA2NGUxM1wiLFwiN2Y5NzM1NWI4ZGI4MWMwOWFiZmI3ZjNjNWIyNTE1ODg4YjY3OWEzZTUwZGQ2YmQ2Y2VmN2M3MzExMWY0Y2MwY1wiXSxbXCIxNzRhNTNiOWM5YTI4NTg3MmQzOWU1NmU2OTEzY2FiMTVkNTliMWZhNTEyNTA4YzAyMmYzODJkZTgzMTk0OTdjXCIsXCJjY2M5ZGMzN2FiZmM5YzE2NTdiNDE1NWYyYzQ3ZjllNjY0NmIzYTFkOGNiOTg1NDM4M2RhMTNhYzA3OWFmYTczXCJdLFtcIjk1OTM5Njk4MTk0Mzc4NWMzZDNlNTdlZGY1MDE4Y2RiZTAzOWU3MzBlNDkxOGIzZDg4NGZkZmYwOTQ3NWI3YmFcIixcIjJlN2U1NTI4ODhjMzMxZGQ4YmEwMzg2YTRiOWNkNjg0OWM2NTNmNjRjODcwOTM4NWU5YjhhYmY4NzUyNGYyZmRcIl0sW1wiZDJhNjNhNTBhZTQwMWU1NmQ2NDVhMTE1M2IxMDlhOGZjY2EwYTQzZDU2MWZiYTJkYmI1MTM0MGM5ZDgyYjE1MVwiLFwiZTgyZDg2ZmI2NDQzZmNiNzU2NWFlZTU4YjI5NDgyMjBhNzBmNzUwYWY0ODRjYTUyZDQxNDIxNzRkY2Y4OTQwNVwiXSxbXCI2NDU4N2UyMzM1NDcxZWI4OTBlZTc4OTZkN2NmZGM4NjZiYWNiZGJkMzgzOTMxN2IzNDM2ZjliNDU2MTdlMDczXCIsXCJkOTlmY2RkNWJmNjkwMmUyYWU5NmRkNjQ0N2MyOTlhMTg1YjkwYTM5MTMzYWVhYjM1ODI5OWU1ZTlmYWY2NTg5XCJdLFtcIjg0ODFiZGUwZTRlNGQ4ODViM2E1NDZkM2U1NDlkZTA0MmYwYWE2Y2VhMjUwZTdmZDM1OGQ2Yzg2ZGQ0NWU0NThcIixcIjM4ZWU3YjhjYmE1NDA0ZGQ4NGEyNWJmMzljZWNiMmNhOTAwYTc5YzQyYjI2MmU1NTZkNjRiMWI1OTc3OTA1N2VcIl0sW1wiMTM0NjRhNTdhNzgxMDJhYTYyYjY5NzlhZTgxN2Y0NjM3ZmZjZmVkM2M0YjFjZTMwYmNkNjMwM2Y2Y2FmNjY2YlwiLFwiNjliZTE1OTAwNDYxNDU4MGVmN2U0MzM0NTNjY2IwY2E0OGYzMDBhODFkMDk0MmUxM2Y0OTVhOTA3ZjZlY2MyN1wiXSxbXCJiYzRhOWRmNWI3MTNmZTJlOWFlZjQzMGJjYzFkYzk3YTBjZDljY2VkZTJmMjg1ODhjYWRhM2EwZDJkODNmMzY2XCIsXCJkM2E4MWNhNmU3ODVjMDYzODM5MzdhZGY0Yjc5OGNhYTZlOGE5ZmJmYTU0N2IxNmQ3NThkNjY2NTgxZjMzYzFcIl0sW1wiOGMyOGE5N2JmODI5OGJjMGQyM2Q4Yzc0OTQ1MmEzMmU2OTRiNjVlMzBhOTQ3MmEzOTU0YWIzMGZlNTMyNGNhYVwiLFwiNDBhMzA0NjNhMzMwNTE5MzM3OGZlZGYzMWY3Y2MwZWI3YWU3ODRmMDQ1MWNiOTQ1OWU3MWRjNzNjYmVmOTQ4MlwiXSxbXCI4ZWE5NjY2MTM5NTI3YThjMWRkOTRjZTRmMDcxZmQyM2M4YjM1MGM1YTRiYjMzNzQ4YzRiYTExMWZhY2NhZTBcIixcIjYyMGVmYWJiYzhlZTI3ODJlMjRlN2MwY2ZiOTVjNWQ3MzViNzgzYmU5Y2YwZjhlOTU1YWYzNGEzMGU2MmI5NDVcIl0sW1wiZGQzNjI1ZmFlZjViYTA2MDc0NjY5NzE2YmJkMzc4OGQ4OWJkZGU4MTU5NTk5NjgwOTJmNzZjYzRlYjlhOTc4N1wiLFwiN2ExODhmYTM1MjBlMzBkNDYxZGEyNTAxMDQ1NzMxY2E5NDE0NjE5ODI4ODMzOTU5MzdmNjhkMDBjNjQ0YTU3M1wiXSxbXCJmNzEwZDc5ZDllYjk2MjI5N2U0ZjYyMzJiNDBlOGY3ZmViMmJjNjM4MTQ2MTRkNjkyYzEyZGU3NTI0MDgyMjFlXCIsXCJlYTk4ZTY3MjMyZDNiMzI5NWQzYjUzNTUzMjExNWNjYWM4NjEyYzcyMTg1MTYxNzUyNmFlNDdhOWM3N2JmYzgyXCJdXX0sbmFmOnt3bmQ6Nyxwb2ludHM6W1tcImY5MzA4YTAxOTI1OGMzMTA0OTM0NGY4NWY4OWQ1MjI5YjUzMWM4NDU4MzZmOTliMDg2MDFmMTEzYmNlMDM2ZjlcIixcIjM4OGY3YjBmNjMyZGU4MTQwZmUzMzdlNjJhMzdmMzU2NjUwMGE5OTkzNGMyMjMxYjZjYjlmZDc1ODRiOGU2NzJcIl0sW1wiMmY4YmRlNGQxYTA3MjA5MzU1YjRhNzI1MGE1YzUxMjhlODhiODRiZGRjNjE5YWI3Y2JhOGQ1NjliMjQwZWZlNFwiLFwiZDhhYzIyMjYzNmU1ZTNkNmQ0ZGJhOWRkYTZjOWM0MjZmNzg4MjcxYmFiMGQ2ODQwZGNhODdkM2FhNmFjNjJkNlwiXSxbXCI1Y2JkZjA2NDZlNWRiNGVhYTM5OGYzNjVmMmVhN2EwZTNkNDE5YjdlMDMzMGUzOWNlOTJiZGRlZGNhYzRmOWJjXCIsXCI2YWViY2E0MGJhMjU1OTYwYTMxNzhkNmQ4NjFhNTRkYmE4MTNkMGI4MTNmZGU3YjVhNTA4MjYyODA4NzI2NGRhXCJdLFtcImFjZDQ4NGUyZjBjN2Y2NTMwOWFkMTc4YTlmNTU5YWJkZTA5Nzk2OTc0YzU3ZTcxNGMzNWYxMTBkZmMyN2NjYmVcIixcImNjMzM4OTIxYjBhN2Q5ZmQ2NDM4MDk3MTc2M2I2MWU5YWRkODg4YTQzNzVmOGUwZjA1Y2MyNjJhYzY0ZjljMzdcIl0sW1wiNzc0YWU3Zjg1OGE5NDExZTVlZjQyNDZiNzBjNjVhYWM1NjQ5OTgwYmU1YzE3ODkxYmJlYzE3ODk1ZGEwMDhjYlwiLFwiZDk4NGEwMzJlYjZiNWUxOTAyNDNkZDU2ZDdiN2IzNjUzNzJkYjFlMmRmZjlkNmE4MzAxZDc0YzljOTUzYzYxYlwiXSxbXCJmMjg3NzNjMmQ5NzUyODhiYzdkMWQyMDVjMzc0ODY1MWIwNzVmYmM2NjEwZTU4Y2RkZWVkZGY4ZjE5NDA1YWE4XCIsXCJhYjA5MDJlOGQ4ODBhODk3NTgyMTJlYjY1Y2RhZjQ3M2ExYTA2ZGE1MjFmYTkxZjI5YjVjYjUyZGIwM2VkODFcIl0sW1wiZDc5MjRkNGY3ZDQzZWE5NjVhNDY1YWUzMDk1ZmY0MTEzMWU1OTQ2ZjNjODVmNzllNDRhZGJjZjhlMjdlMDgwZVwiLFwiNTgxZTI4NzJhODZjNzJhNjgzODQyZWMyMjhjYzZkZWZlYTQwYWYyYmQ4OTZkM2E1YzUwNGRjOWZmNmEyNmI1OFwiXSxbXCJkZWZkZWE0Y2RiNjc3NzUwYTQyMGZlZTgwN2VhY2YyMWViOTg5OGFlNzliOTc2ODc2NmU0ZmFhMDRhMmQ0YTM0XCIsXCI0MjExYWIwNjk0NjM1MTY4ZTk5N2IwZWFkMmE5M2RhZWNlZDFmNGEwNGE5NWMwZjZjZmIxOTlmNjllNTZlYjc3XCJdLFtcIjJiNGVhMGE3OTdhNDQzZDI5M2VmNWNmZjQ0NGY0OTc5ZjA2YWNmZWJkN2U4NmQyNzc0NzU2NTYxMzgzODViNmNcIixcIjg1ZTg5YmMwMzc5NDVkOTNiMzQzMDgzYjVhMWM4NjEzMWEwMWY2MGM1MDI2OTc2M2I1NzBjODU0ZTVjMDliN2FcIl0sW1wiMzUyYmJmNGE0Y2RkMTI1NjRmOTNmYTMzMmNlMzMzMzAxZDlhZDQwMjcxZjgxMDcxODEzNDBhZWYyNWJlNTlkNVwiLFwiMzIxZWI0MDc1MzQ4ZjUzNGQ1OWMxODI1OWRkYTNlMWY0YTFiM2IyZTcxYjEwMzljNjdiZDNkOGJjZjgxOTk4Y1wiXSxbXCIyZmEyMTA0ZDZiMzhkMTFiMDIzMDAxMDU1OTg3OTEyNGU0MmFiOGRmZWZmNWZmMjlkYzljZGFkZDRlY2FjYzNmXCIsXCIyZGUxMDY4Mjk1ZGQ4NjViNjQ1NjkzMzViZDVkZDgwMTgxZDcwZWNmYzg4MjY0ODQyM2JhNzZiNTMyYjdkNjdcIl0sW1wiOTI0ODI3OWIwOWI0ZDY4ZGFiMjFhOWIwNjZlZGRhODMyNjNjM2Q4NGUwOTU3MmUyNjljYTBjZDdmNTQ1MzcxNFwiLFwiNzMwMTZmN2JmMjM0YWFkZTVkMWFhNzFiZGVhMmIxZmYzZmMwZGUyYTg4NzkxMmZmZTU0YTMyY2U5N2NiMzQwMlwiXSxbXCJkYWVkNGYyYmUzYThiZjI3OGU3MDEzMmZiMGJlYjc1MjJmNTcwZTE0NGJmNjE1YzA3ZTk5NmQ0NDNkZWU4NzI5XCIsXCJhNjlkY2U0YTdkNmM5OGU4ZDRhMWFjYTg3ZWY4ZDcwMDNmODNjMjMwZjNhZmE3MjZhYjQwZTUyMjkwYmUxYzU1XCJdLFtcImM0NGQxMmM3MDY1ZDgxMmU4YWNmMjhkN2NiYjE5ZjkwMTFlY2Q5ZTlmZGYyODFiMGU2YTNiNWU4N2QyMmU3ZGJcIixcIjIxMTlhNDYwY2UzMjZjZGM3NmM0NTkyNmM5ODJmZGFjMGUxMDZlODYxZWRmNjFjNWEwMzkwNjNmMGUwZTY0ODJcIl0sW1wiNmEyNDViZjZkYzY5ODUwNGM4OWEyMGNmZGVkNjA4NTMxNTJiNjk1MzM2YzI4MDYzYjYxYzY1Y2JkMjY5ZTZiNFwiLFwiZTAyMmNmNDJjMmJkNGE3MDhiM2Y1MTI2ZjE2YTI0YWQ4YjMzYmE0OGQwNDIzYjZlZmQ1ZTYzNDgxMDBkOGE4MlwiXSxbXCIxNjk3ZmZhNmZkOWRlNjI3YzA3N2UzZDJmZTU0MTA4NGNlMTMzMDBiMGJlYzExNDZmOTVhZTU3ZjBkMGJkNmE1XCIsXCJiOWMzOThmMTg2ODA2ZjVkMjc1NjE1MDZlNDU1NzQzM2EyY2YxNTAwOWU0OThhZTdhZGVlOWQ2M2QwMWIyMzk2XCJdLFtcIjYwNWJkYjAxOTk4MTcxOGI5ODZkMGYwN2U4MzRjYjBkOWRlYjgzNjBmZmI3ZjYxZGY5ODIzNDVlZjI3YTc0NzlcIixcIjI5NzJkMmRlNGY4ZDIwNjgxYTc4ZDkzZWM5NmZlMjNjMjZiZmFlODRmYjE0ZGI0M2IwMWUxZTkwNTZiOGM0OVwiXSxbXCI2MmQxNGRhYjQxNTBiZjQ5NzQwMmZkYzQ1YTIxNWUxMGRjYjAxYzM1NDk1OWIxMGNmZTMxYzdlOWQ4N2ZmMzNkXCIsXCI4MGZjMDZiZDhjYzViMDEwOTgwODhhMTk1MGVlZDBkYjAxYWExMzI5NjdhYjQ3MjIzNWY1NjQyNDgzYjI1ZWFmXCJdLFtcIjgwYzYwYWQwMDQwZjI3ZGFkZTViNGIwNmM0MDhlNTZiMmM1MGU5ZjU2YjliOGI0MjVlNTU1YzJmODYzMDhiNmZcIixcIjFjMzgzMDNmMWNjNWMzMGYyNmU2NmJhZDdmZTcyZjcwYTY1ZWVkNGNiZTcwMjRlYjFhYTAxZjU2NDMwYmQ1N2FcIl0sW1wiN2E5Mzc1YWQ2MTY3YWQ1NGFhNzRjNjM0OGNjNTRkMzQ0Y2M1ZGM5NDg3ZDg0NzA0OWQ1ZWFiYjBmYTAzYzhmYlwiLFwiZDBlM2ZhOWVjYTg3MjY5MDk1NTllMGQ3OTI2OTA0NmJkYzU5ZWExMGM3MGNlMmIwMmQ0OTllYzIyNGRjN2Y3XCJdLFtcImQ1MjhlY2Q5YjY5NmI1NGM5MDdhOWVkMDQ1NDQ3YTc5YmI0MDhlYzM5YjY4ZGY1MDRiYjUxZjQ1OWJjM2ZmYzlcIixcImVlY2Y0MTI1MzEzNmU1Zjk5OTY2ZjIxODgxZmQ2NTZlYmM0MzQ1NDA1YzUyMGRiYzA2MzQ2NWI1MjE0MDk5MzNcIl0sW1wiNDkzNzBhNGI1ZjQzNDEyZWEyNWY1MTRlOGVjZGFkMDUyNjYxMTVlNGE3ZWNiMTM4NzIzMTgwOGY4YjQ1OTYzXCIsXCI3NThmM2Y0MWFmZDZlZDQyOGIzMDgxYjA1MTJmZDYyYTU0YzNmM2FmYmI1YjY3NjRiNjUzMDUyYTEyOTQ5YzlhXCJdLFtcIjc3ZjIzMDkzNmVlODhjYmJkNzNkZjkzMGQ2NDcwMmVmODgxZDgxMWUwZTE0OThlMmYxYzEzZWIxZmMzNDVkNzRcIixcIjk1OGVmNDJhNzg4NmI2NDAwYTA4MjY2ZTliYTFiMzc4OTZjOTUzMzBkOTcwNzdjYmJlOGViM2M3NjcxYzYwZDZcIl0sW1wiZjJkYWM5OTFjYzRjZTRiOWVhNDQ4ODdlNWM3YzBiY2U1OGM4MDA3NGFiOWQ0ZGJhZWIyODUzMWI3NzM5ZjUzMFwiLFwiZTBkZWRjOWIzYjJmOGRhZDRkYTFmMzJkZWMyNTMxZGY5ZWI1ZmJlYjA1OThlNGZkMWExMTdkYmE3MDNhM2MzN1wiXSxbXCI0NjNiM2Q5ZjY2MjYyMWZiMWI0YmU4ZmJiZTI1MjAxMjVhMjE2Y2RmYzlkYWUzZGViY2JhNDg1MGM2OTBkNDViXCIsXCI1ZWQ0MzBkNzhjMjk2YzM1NDMxMTQzMDZkZDg2MjJkN2M2MjJlMjdjOTcwYTFkZTMxY2IzNzdiMDFhZjczMDdlXCJdLFtcImYxNmY4MDQyNDRlNDZlMmEwOTIzMmQ0YWZmM2I1OTk3NmI5OGZhYzE0MzI4YTJkMWEzMjQ5NmI0OTk5OGYyNDdcIixcImNlZGFiZDliODIyMDNmN2UxM2QyMDZmY2RmNGUzM2Q5MmE2YzUzYzI2ZTVjY2UyNmQ2NTc5OTYyYzRlMzFkZjZcIl0sW1wiY2FmNzU0MjcyZGM4NDU2M2IwMzUyYjdhMTQzMTFhZjU1ZDI0NTMxNWFjZTI3YzY1MzY5ZTE1ZjcxNTFkNDFkMVwiLFwiY2I0NzQ2NjBlZjM1ZjVmMmE0MWI2NDNmYTVlNDYwNTc1ZjRmYTliNzk2MjIzMmE1YzMyZjkwODMxOGEwNDQ3NlwiXSxbXCIyNjAwY2E0YjI4MmNiOTg2Zjg1ZDBmMTcwOTk3OWQ4YjQ0YTA5YzA3Y2I4NmQ3YzEyNDQ5N2JjODZmMDgyMTIwXCIsXCI0MTE5Yjg4NzUzYzE1YmQ2YTY5M2IwM2ZjZGRiYjQ1ZDVhYzZiZTc0YWI1ZjBlZjQ0YjBiZTk0NzVhN2U0YjQwXCJdLFtcIjc2MzVjYTcyZDdlODQzMmMzMzhlYzUzY2QxMjIyMGJjMDFjNDg2ODVlMjRmN2RjOGM2MDJhNzc0Njk5OGU0MzVcIixcIjkxYjY0OTYwOTQ4OWQ2MTNkMWQ1ZTU5MGY3OGU2ZDc0ZWNmYzA2MWQ1NzA0OGJhZDllNzZmMzAyYzViOWM2MVwiXSxbXCI3NTRlMzIzOWYzMjU1NzBjZGJiZjRhODdkZWVlOGE2NmI3ZjJiMzM0NzlkNDY4ZmJjMWE1MDc0M2JmNTZjYzE4XCIsXCI2NzNmYjg2ZTViZGEzMGZiM2NkMGVkMzA0ZWE0OWEwMjNlZTMzZDAxOTdhNjk1ZDBjNWQ5ODA5M2M1MzY2ODNcIl0sW1wiZTNlNmJkMTA3MWExZTk2YWZmNTc4NTljODJkNTcwZjAzMzA4MDA2NjFkMWM5NTJmOWZlMjY5NDY5MWQ5YjllOFwiLFwiNTljOWUwYmJhMzk0ZTc2ZjQwYzBhYTU4Mzc5YTNjYjZhNWEyMjgzOTkzZTkwYzQxNjcwMDJhZjQ5MjBlMzdmNVwiXSxbXCIxODZiNDgzZDA1NmEwMzM4MjZhZTczZDg4ZjczMjk4NWM0Y2NiMWYzMmJhMzVmNGI0Y2M0N2ZkY2YwNGFhNmViXCIsXCIzYjk1MmQzMmM2N2NmNzdlMmUxNzQ0NmUyMDQxODBhYjIxZmI4MDkwODk1MTM4YjRhNGE3OTdmODZlODA4ODhiXCJdLFtcImRmOWQ3MGE2Yjk4NzZjZTU0NGM5ODU2MWY0YmU0ZjcyNTQ0MmU2ZDJiNzM3ZDljOTFhODMyMTcyNGNlMDk2M2ZcIixcIjU1ZWIyZGFmZDg0ZDZjY2Q1Zjg2MmI3ODVkYzM5ZDRhYjE1NzIyMjcyMGVmOWRhMjE3YjhjNDVjZjJiYTI0MTdcIl0sW1wiNWVkZDVjYzIzYzUxZTg3YTQ5N2NhODE1ZDVkY2UwZjhhYjUyNTU0Zjg0OWVkODk5NWRlNjRjNWYzNGNlNzE0M1wiLFwiZWZhZTljOGRiYzE0MTMwNjYxZThjZWMwMzBjODlhZDBjMTNjNjZjMGQxN2EyOTA1Y2RjNzA2YWI3Mzk5YTg2OFwiXSxbXCIyOTA3OThjMmI2NDc2ODMwZGExMmZlMDIyODdlOWU3NzdhYTNmYmExYzM1NWIxN2E3MjJkMzYyZjg0NjE0ZmJhXCIsXCJlMzhkYTc2ZGNkNDQwNjIxOTg4ZDAwYmNmNzlhZjI1ZDViMjljMDk0ZGIyYTIzMTQ2ZDAwM2FmZDQxOTQzZTdhXCJdLFtcImFmM2M0MjNhOTVkOWY1YjMwNTQ3NTRlZmExNTBhYzM5Y2QyOTU1MmZlMzYwMjU3MzYyZGZkZWNlZjQwNTNiNDVcIixcImY5OGEzZmQ4MzFlYjJiNzQ5YTkzYjBlNmYzNWNmYjQwYzhjZDVhYTY2N2ExNTU4MWJjMmZlZGVkNDk4ZmQ5YzZcIl0sW1wiNzY2ZGJiMjRkMTM0ZTc0NWNjY2FhMjhjOTliZjI3NDkwNmJiNjZiMjZkY2Y5OGRmOGQyZmVkNTBkODg0MjQ5YVwiLFwiNzQ0YjExNTJlYWNiZTVlMzhkY2M4ODc5ODBkYTM4Yjg5NzU4NGE2NWZhMDZjZWRkMmM5MjRmOTdjYmFjNTk5NlwiXSxbXCI1OWRiZjQ2ZjhjOTQ3NTliYTIxMjc3YzMzNzg0ZjQxNjQ1ZjdiNDRmNmM1OTZhNThjZTkyZTY2NjE5MWFiZTNlXCIsXCJjNTM0YWQ0NDE3NWZiYzMwMGY0ZWE2Y2U2NDgzMDlhMDQyY2U3MzlhNzkxOTc5OGNkODVlMjE2YzRhMzA3ZjZlXCJdLFtcImYxM2FkYTk1MTAzYzQ1MzczMDVlNjkxZTc0ZTlhNGE4ZGQ2NDdlNzExYTk1ZTczY2I2MmRjNjAxOGNmZDg3YjhcIixcImUxMzgxN2I0NGVlMTRkZTY2M2JmNGJjODA4MzQxZjMyNjk0OWUyMWE2YTc1YzI1NzA3Nzg0MTliZGFmNTczM2RcIl0sW1wiNzc1NGI0ZmEwZThhY2VkMDZkNDE2N2EyYzU5Y2NhNGNkYTE4NjljMDZlYmFkZmI2NDg4NTUwMDE1YTg4NTIyY1wiLFwiMzBlOTNlODY0ZTY2OWQ4MjIyNGI5NjdjMzAyMGI4ZmE4ZDFlNGUzNTBiNmNiY2M1MzdhNDhiNTc4NDExNjNhMlwiXSxbXCI5NDhkY2FkZjU5OTBlMDQ4YWEzODc0ZDQ2YWJlZjlkNzAxODU4Zjk1ZGU4MDQxZDJhNjgyOGM5OWUyMjYyNTE5XCIsXCJlNDkxYTQyNTM3ZjZlNTk3ZDVkMjhhMzIyNGIxYmMyNWRmOTE1NGVmYmQyZWYxZDJjYmJhMmNhZTUzNDdkNTdlXCJdLFtcIjc5NjI0MTQ0NTBjNzZjMTY4OWM3YjQ4ZjgyMDJlYzM3ZmIyMjRjZjVhYzBiZmExNTcwMzI4YThhM2Q3Yzc3YWJcIixcIjEwMGI2MTBlYzRmZmI0NzYwZDVjMWZjMTMzZWY2ZjZiMTI1MDdhMDUxZjA0YWM1NzYwYWZhNWIyOWRiODM0MzdcIl0sW1wiMzUxNDA4NzgzNDk2NGI1NGIxNWIxNjA2NDRkOTE1NDg1YTE2OTc3MjI1Yjg4NDdiYjBkZDA4NTEzN2VjNDdjYVwiLFwiZWYwYWZiYjIwNTYyMDU0NDhlMTY1MmM0OGU4MTI3ZmM2MDM5ZTc3YzE1YzIzNzhiN2U3ZDE1YTBkZTI5MzMxMVwiXSxbXCJkM2NjMzBhZDZiNDgzZTRiYzc5Y2UyYzlkZDhiYzU0OTkzZTk0N2ViOGRmNzg3YjQ0Mjk0M2QzZjdiNTI3ZWFmXCIsXCI4YjM3OGEyMmQ4MjcyNzhkODljNWU5YmU4Zjk1MDhhZTNjMmFkNDYyOTAzNTg2MzBhZmIzNGRiMDRlZWRlMGE0XCJdLFtcIjE2MjRkODQ3ODA3MzI4NjBjZTFjNzhmY2JmZWZlMDhiMmIyOTgyM2RiOTEzZjY0OTM5NzViYTBmZjQ4NDc2MTBcIixcIjY4NjUxY2Y5YjZkYTkwM2UwOTE0NDQ4YzZjZDlkNGNhODk2ODc4ZjUyODJiZTRjOGNjMDZlMmE0MDQwNzg1NzVcIl0sW1wiNzMzY2U4MGRhOTU1YThhMjY5MDJjOTU2MzNlNjJhOTg1MTkyNDc0YjVhZjIwN2RhNmRmN2I0ZmQ1ZmM2MWNkNFwiLFwiZjU0MzVhMmJkMmJhZGY3ZDQ4NWE0ZDhiOGRiOWZjY2UzZTFlZjhlMDIwMWU0NTc4YzU0NjczYmMxZGM1ZWExZFwiXSxbXCIxNWQ5NDQxMjU0OTQ1MDY0Y2YxYTFjMzNiYmQzYjQ5Zjg5NjZjNTA5MjE3MWU2OTllZjI1OGRmYWI4MWMwNDVjXCIsXCJkNTZlYjMwYjY5NDYzZTcyMzRmNTEzN2I3M2I4NDE3NzQzNDgwMGJhY2ViZmM2ODVmYzM3YmJlOWVmZTQwNzBkXCJdLFtcImExZDBmY2YyZWM5ZGU2NzViNjEyMTM2ZTVjZTcwZDI3MWMyMTQxN2M5ZDJiOGFhYWFjMTM4NTk5ZDA3MTc5NDBcIixcImVkZDc3ZjUwYmNiNWEzY2FiMmU5MDczNzMwOTY2N2YyNjQxNDYyYTU0MDcwZjNkNTE5MjEyZDM5YzE5N2E2MjlcIl0sW1wiZTIyZmJlMTVjMGFmOGNjYzU3ODBjMDczNWY4NGRiZTlhNzkwYmFkZWU4MjQ1YzA2YzdjYTM3MzMxY2IzNjk4MFwiLFwiYTg1NWJhYmFkNWNkNjBjODhiNDMwYTY5ZjUzYTFhN2EzODI4OTE1NDk2NDc5OWJlNDNkMDZkNzdkMzFkYTA2XCJdLFtcIjMxMTA5MWRkOTg2MGU4ZTIwZWUxMzQ3M2MxMTU1ZjVmNjk2MzVlMzk0NzA0ZWFhNzQwMDk0NTIyNDZjZmE5YjNcIixcIjY2ZGI2NTZmODdkMWYwNGZmZmQxZjA0Nzg4YzA2ODMwODcxZWM1YTY0ZmVlZTY4NWJkODBmMGIxMjg2ZDgzNzRcIl0sW1wiMzRjMWZkMDRkMzAxYmU4OWIzMWMwNDQyZDNlNmFjMjQ4ODM5MjhiNDVhOTM0MDc4MTg2N2Q0MjMyZWMyZGJkZlwiLFwiOTQxNDY4NWU5N2IxYjU5NTRiZDQ2ZjczMDE3NDEzNmQ1N2YxY2VlYjQ4NzQ0M2RjNTMyMTg1N2JhNzNhYmVlXCJdLFtcImYyMTllYTVkNmI1NDcwMWMxYzE0ZGU1YjU1N2ViNDJhOGQxM2YzYWJiY2QwOGFmZmNjMmE1ZTZiMDQ5YjhkNjNcIixcIjRjYjk1OTU3ZTgzZDQwYjBmNzNhZjQ1NDRjY2NmNmIxZjRiMDhkM2MwN2IyN2ZiOGQ4YzI5NjJhNDAwNzY2ZDFcIl0sW1wiZDdiODc0MGY3NGE4ZmJhYWIxZjY4M2RiOGY0NWRlMjY1NDNhNTQ5MGJjYTYyNzA4NzIzNjkxMjQ2OWEwYjQ0OFwiLFwiZmE3Nzk2ODEyOGQ5YzkyZWUxMDEwZjMzN2FkNDcxN2VmZjE1ZGI1ZWQzYzA0OWIzNDExZTAzMTVlYWE0NTkzYlwiXSxbXCIzMmQzMWMyMjJmOGY2ZjBlZjg2ZjdjOThkM2EzMzM1ZWFkNWJjZDMyYWJkZDk0Mjg5ZmU0ZDMwOTFhYTgyNGJmXCIsXCI1ZjMwMzJmNTg5MjE1NmUzOWNjZDNkNzkxNWI5ZTFkYTJlNmRhYzllNmYyNmU5NjExMThkMTRiODQ2MmUxNjYxXCJdLFtcIjc0NjFmMzcxOTE0YWIzMjY3MTA0NWExNTVkOTgzMWVhODc5M2Q3N2NkNTk1OTJjNDM0MGY4NmNiYzE4MzQ3YjVcIixcIjhlYzBiYTIzOGI5NmJlYzBjYmRkZGNhZTBhYTQ0MjU0MmVlZTFmZjUwYzk4NmVhNmIzOTg0N2IzY2MwOTJmZjZcIl0sW1wiZWUwNzlhZGIxZGYxODYwMDc0MzU2YTI1YWEzODIwNmE2ZDcxNmIyYzNlNjc0NTNkMjg3Njk4YmFkN2IyYjJkNlwiLFwiOGRjMjQxMmFhZmUzYmU1YzRjNWYzN2UwZWNjNWY5ZjZhNDQ2OTg5YWYwNGM0ZTI1ZWJhYWM0NzllYzFjOGMxZVwiXSxbXCIxNmVjOTNlNDQ3ZWM4M2YwNDY3YjE4MzAyZWU2MjBmN2U2NWRlMzMxODc0YzlkYzcyYmZkODYxNmJhOWRhNmI1XCIsXCI1ZTQ2MzExNTBlNjJmYjQwZDBlOGMyYTdjYTU4MDRhMzlkNTgxODZhNTBlNDk3MTM5NjI2Nzc4ZTI1YjA2NzRkXCJdLFtcImVhYTVmOTgwYzI0NWY2ZjAzODk3ODI5MGFmYTcwYjZiZDg4NTU4OTdmOThiNmFhNDg1Yjk2MDY1ZDUzN2JkOTlcIixcImY2NWY1ZDNlMjkyYzJlMDgxOWE1MjgzOTFjOTk0NjI0ZDc4NDg2OWQ3ZTZlYTY3ZmIxODA0MTAyNGVkYzA3ZGNcIl0sW1wiNzhjOTQwNzU0NGFjMTMyNjkyZWUxOTEwYTAyNDM5OTU4YWUwNDg3NzE1MTM0MmVhOTZjNGI2YjM1YTQ5ZjUxXCIsXCJmM2UwMzE5MTY5ZWI5Yjg1ZDU0MDQ3OTU1MzlhNWU2OGZhMWZiZDU4M2MwNjRkMjQ2MmI2NzVmMTk0YTNkZGI0XCJdLFtcIjQ5NGY0YmUyMTlhMWE3NzAxNmRjZDgzODQzMWFlYTAwMDFjZGM4YWU3YTZmYzY4ODcyNjU3OGQ5NzAyODU3YTVcIixcIjQyMjQyYTk2OTI4M2E1ZjMzOWJhN2YwNzVlMzZiYTJhZjkyNWNlMzBkNzY3ZWQ2ZTU1ZjRiMDMxODgwZDU2MmNcIl0sW1wiYTU5OGE4MDMwZGE2ZDg2YzZiYzdmMmY1MTQ0ZWE1NDlkMjgyMTFlYTU4ZmFhNzBlYmY0YzFlNjY1YzFmZTliNVwiLFwiMjA0YjVkNmY4NDgyMmMzMDdlNGI0YTcxNDA3MzdhZWMyM2ZjNjNiNjViMzVmODZhMTAwMjZkYmQyZDg2NGU2YlwiXSxbXCJjNDE5MTYzNjVhYmIyYjVkMDkxOTJmNWYyZGJlYWZlYzIwOGYwMjBmMTI1NzBhMTg0ZGJhZGMzZTU4NTk1OTk3XCIsXCI0ZjE0MzUxZDAwODdlZmE0OWQyNDViMzI4OTg0OTg5ZDVjYWY5NDUwZjM0YmZjMGVkMTZlOTZiNThmYTk5MTNcIl0sW1wiODQxZDYwNjNhNTg2ZmE0NzVhNzI0NjA0ZGEwM2JjNWI5MmEyZTBkMmUwYTM2YWNmZTRjNzNhNTUxNDc0Mjg4MVwiLFwiNzM4NjdmNTljMDY1OWU4MTkwNGY5YTFjNzU0MzY5OGU2MjU2MmQ2NzQ0YzE2OWNlN2EzNmRlMDFhOGQ2MTU0XCJdLFtcIjVlOTViYjM5OWE2OTcxZDM3NjAyNjk0N2Y4OWJkZTJmMjgyYjMzODEwOTI4YmU0ZGVkMTEyYWM0ZDcwZTIwZDVcIixcIjM5ZjIzZjM2NjgwOTA4NWJlZWJmYzcxMTgxMzEzNzc1YTk5YzlhZWQ3ZDhiYTM4YjE2MTM4NGM3NDYwMTI4NjVcIl0sW1wiMzZlNDY0MWE1Mzk0OGZkNDc2YzM5ZjhhOTlmZDk3NGU1ZWMwNzU2NGI1MzE1ZDhiZjk5NDcxYmNhMGVmMmY2NlwiLFwiZDI0MjRiMWIxYWJlNGViODE2NDIyN2IwODVjOWFhOTQ1NmVhMTM0OTNmZDU2M2UwNmZkNTFjZjU2OTRjNzhmY1wiXSxbXCIzMzY1ODFlYTdiZmJiYjI5MGMxOTFhMmY1MDdhNDFjZjU2NDM4NDIxNzBlOTE0ZmFlYWIyN2MyYzU3OWY3MjZcIixcImVhZDEyMTY4NTk1ZmUxYmU5OTI1MjEyOWI2ZTU2YjMzOTFmN2FiMTQxMGNkMWUwZWYzZGNkY2FiZDJmZGEyMjRcIl0sW1wiOGFiODk4MTZkYWRmZDZiNmExZjI2MzRmY2YwMGVjODQwMzc4MTAyNWVkNjg5MGM0ODQ5NzQyNzA2YmQ0M2VkZVwiLFwiNmZkY2VmMDlmMmY2ZDBhMDQ0ZTY1NGFlZjYyNDEzNmY1MDNkNDU5YzNlODk4NDU4NThhNDdhOTEyOWNkZDI0ZVwiXSxbXCIxZTMzZjFhNzQ2YzljNTc3ODEzMzM0NGQ5Mjk5ZmNhYTIwYjA5MzhlOGFjZmYyNTQ0YmI0MDI4NGI4YzVmYjk0XCIsXCI2MDY2MDI1N2RkMTFiM2FhOWM4ZWQ2MThkMjRlZGZmMjMwNmQzMjBmMWQwMzAxMGUzM2E3ZDIwNTdmM2IzYjZcIl0sW1wiODViN2MxZGNiM2NlYzFiN2VlN2YzMGRlZDc5ZGQyMGEwZWQxZjRjYzE4Y2JjZmNmYTQxMDM2MWZkOGYwOGYzMVwiLFwiM2Q5OGE5Y2RkMDI2ZGQ0M2YzOTA0OGYyNWE4ODQ3ZjRmY2FmYWQxODk1ZDdhNjMzYzZmZWQzYzM1ZTk5OTUxMVwiXSxbXCIyOWRmOWZiZDhkOWU0NjUwOTI3NWY0YjEyNWQ2ZDQ1ZDdmYmU5YTNiODc4YTdhZjg3MmEyODAwNjYxYWM1ZjUxXCIsXCJiNGM0ZmU5OWM3NzVhNjA2ZTJkODg2MjE3OTEzOWZmZGE2MWRjODYxYzAxOWU1NWNkMjg3NmViMmEyN2Q4NGJcIl0sW1wiYTBiMWNhZTA2YjBhODQ3YTNmZWE2ZTY3MWFhZjhhZGZkZmU1OGNhMmY3NjgxMDVjODA4MmIyZTQ0OWZjZTI1MlwiLFwiYWU0MzQxMDJlZGRlMDk1OGVjNGIxOWQ5MTdhNmEyOGU2YjcyZGExODM0YWZmMGU2NTBmMDQ5NTAzYTI5NmNmMlwiXSxbXCI0ZThjZWFmYjliM2U5YTEzNmRjN2ZmNjdlODQwMjk1YjQ5OWRmYjNiMjEzM2U0YmExMTNmMmU0YzBlMTIxZTVcIixcImNmMjE3NDExOGM4YjZkN2E0YjQ4ZjZkNTM0Y2U1Yzc5NDIyYzA4NmE2MzQ2MDUwMmI4MjdjZTYyYTMyNjY4M2NcIl0sW1wiZDI0YTQ0ZTA0N2UxOWI2ZjVhZmI4MWM3Y2EyZjY5MDgwYTUwNzY2ODlhMDEwOTE5ZjQyNzI1YzJiNzg5YTMzYlwiLFwiNmZiOGQ1NTkxYjQ2NmY4ZmM2M2RiNTBmMWMwZjFjNjkwMTNmOTk2ODg3YjgyNDRkMmNkZWM0MTdhZmVhOGZhM1wiXSxbXCJlYTAxNjA2YTdhNmM5Y2RkMjQ5ZmRmY2ZhY2I5OTU4NDAwMWVkZDI4YWJiYWI3N2I1MTA0ZTk4ZThlM2IzNWQ0XCIsXCIzMjJhZjQ5MDhjNzMxMmIwY2ZiZmUzNjlmN2E3YjNjZGI3ZDQ0OTRiYzI4MjM3MDBjZmQ2NTIxODhhM2VhOThkXCJdLFtcImFmOGFkZGJmMmI2NjFjOGE2YzYzMjg2NTVlYjk2NjUxMjUyMDA3ZDhjNWVhMzFiZTRhZDE5NmRlOGNlMjEzMWZcIixcIjY3NDllNjdjMDI5Yjg1ZjUyYTAzNGVhZmQwOTY4MzZiMjUyMDgxODY4MGUyNmFjOGYzZGZiY2RiNzE3NDk3MDBcIl0sW1wiZTNhZTE5NzQ1NjZjYTA2Y2M1MTZkNDdlMGZiMTY1YTY3NGEzZGFiY2ZjYTE1ZTcyMmYwZTM0NTBmNDU4ODlcIixcIjJhZWFiZTdlNDUzMTUxMDExNjIxN2YwN2JmNGQwNzMwMGRlOTdlNDg3NGY4MWY1MzM0MjBhNzJlZWIwYmQ2YTRcIl0sW1wiNTkxZWUzNTUzMTNkOTk3MjFjZjY5OTNmZmVkMWUzZTMwMTk5M2ZmM2VkMjU4ODAyMDc1ZWE4Y2VkMzk3ZTI0NlwiLFwiYjBlYTU1OGExMTNjMzBiZWE2MGZjNDc3NTQ2MGM3OTAxZmYwYjA1M2QyNWNhMmJkZWVlOThmMWE0YmU1ZDE5NlwiXSxbXCIxMTM5NmQ1NWZkYTU0YzQ5ZjE5YWE5NzMxOGQ4ZGE2MWZhODU4NGU0N2IwODQ5NDUwNzdjZjAzMjU1YjUyOTg0XCIsXCI5OThjNzRhOGNkNDVhYzAxMjg5ZDU4MzNhN2JlYjQ3NDRmZjUzNmIwMWIyNTdiZTRjNTc2N2JlYTkzZWE1N2E0XCJdLFtcIjNjNWQyYTFiYTM5YzVhMTc5MDAwMDczOGM5ZTBjNDBiOGRjZGZkNTQ2ODc1NGI2NDA1NTQwMTU3ZTAxN2FhN2FcIixcImIyMjg0Mjc5OTk1YTM0ZTJmOWQ0ZGU3Mzk2ZmMxOGI4MGY5YjhiOWZkZDI3MGY2NjYxZjc5Y2E0YzgxYmQyNTdcIl0sW1wiY2M4NzA0YjhhNjBhMGRlZmEzYTk5YTcyOTlmMmU5YzNmYmMzOTVhZmIwNGFjMDc4NDI1ZWY4YTE3OTNjYzAzMFwiLFwiYmRkNDYwMzlmZWVkMTc4ODFkMWUwODYyZGIzNDdmOGNmMzk1Yjc0ZmM0YmNkYzRlOTQwYjc0ZTNhYzFmMWIxM1wiXSxbXCJjNTMzZTRmN2VhODU1NWFhY2Q5Nzc3YWM1Y2FkMjliOTdkZDRkZWZjY2M1M2VlN2VhMjA0MTE5YjI4ODliMTk3XCIsXCI2ZjBhMjU2YmM1ZWZkZjQyOWEyZmI2MjQyZjFhNDNhMmQ5YjkyNWJiNGE0YjNhMjZiYjhlMGY0NWViNTk2MDk2XCJdLFtcImMxNGY4ZjJjY2IyN2Q2ZjEwOWY2ZDA4ZDAzY2M5NmE2OWJhOGMzNGVlYzA3YmJjZjU2NmQ0OGUzM2RhNjU5M1wiLFwiYzM1OWQ2OTIzYmIzOThmN2ZkNDQ3M2UxNmZlMWMyODQ3NWI3NDBkZDA5ODA3NWU2YzBlODY0OTExM2RjM2EzOFwiXSxbXCJhNmNiYzMwNDZiYzZhNDUwYmFjMjQ3ODlmYTE3MTE1YTRjOTczOWVkNzVmOGYyMWNlNDQxZjcyZTBiOTBlNmVmXCIsXCIyMWFlN2Y0NjgwZTg4OWJiMTMwNjE5ZTJjMGY5NWEzNjBjZWI1NzNjNzA2MDMxMzk4NjJhZmQ2MTdmYTliOWZcIl0sW1wiMzQ3ZDZkOWEwMmM0ODkyN2ViZmI4NmMxMzU5YjFjYWYxMzBhM2MwMjY3ZDExY2U2MzQ0YjM5Zjk5ZDQzY2MzOFwiLFwiNjBlYTdmNjFhMzUzNTI0ZDFjOTg3ZjZlY2VjOTJmMDg2ZDU2NWFiNjg3ODcwY2IxMjY4OWZmMWUzMWM3NDQ0OFwiXSxbXCJkYTY1NDVkMjE4MWRiOGQ5ODNmN2RjYjM3NWVmNTg2NmQ0N2M2N2IxYmYzMWM4Y2Y4NTVlZjc0MzdiNzI2NTZhXCIsXCI0OWI5NjcxNWFiNjg3OGE3OWU3OGYwN2NlNTY4MGM1ZDY2NzMwNTFiNDkzNWJkODk3ZmVhODI0Yjc3ZGMyMDhhXCJdLFtcImM0MDc0N2NjOWQwMTJjYjFhMTNiODE0ODMwOWM2ZGU3ZWMyNWQ2OTQ1ZDY1NzE0NmI5ZDU5OTRiOGZlYjExMTFcIixcIjVjYTU2MDc1M2JlMmExMmZjNmRlNmNhZjJjYjQ4OTU2NWRiOTM2MTU2Yjk1MTRlMWJiNWU4MzAzN2UwZmEyZDRcIl0sW1wiNGU0MmM4ZWM4MmM5OTc5OGNjZjNhNjEwYmU4NzBlNzgzMzhjN2Y3MTMzNDhiZDM0YzgyMDNlZjQwMzdmMzUwMlwiLFwiNzU3MWQ3NGVlNWUwZmI5MmE3YThiMzNhMDc3ODMzNDFhNTQ5MjE0NGNjNTRiY2M0MGE5NDQ3MzY5MzYwNjQzN1wiXSxbXCIzNzc1YWI3MDg5YmM2YWY4MjNhYmEyZTFhZjcwYjIzNmQyNTFjYWRiMGM4Njc0MzI4NzUyMmExYjNiMGRlZGVhXCIsXCJiZTUyZDEwN2JjZmEwOWQ4YmNiOTczNmE4MjhjZmE3ZmFjOGRiMTdiZjdhNzZhMmM0MmFkOTYxNDA5MDE4Y2Y3XCJdLFtcImNlZTMxY2JmN2UzNGVjMzc5ZDk0ZmI4MTRkM2Q3NzVhZDk1NDU5NWQxMzE0YmE4ODQ2OTU5ZTNlODJmNzRlMjZcIixcIjhmZDY0YTE0YzA2YjU4OWMyNmI5NDdhZTJiY2Y2YmZhMDE0OWVmMGJlMTRlZDRkODBmNDQ4YTAxYzQzYjFjNmRcIl0sW1wiYjRmOWVhZWEwOWI2OTE3NjE5ZjZlYTZhNGViNTQ2NGVmZGRiNThmZDQ1YjFlYmVmY2RjMWEwMWQwOGI0Nzk4NlwiLFwiMzllNWM5OTI1YjVhNTRiMDc0MzNhNGYxOGM2MTcyNmY4YmIxMzFjMDEyY2E1NDJlYjI0YThhYzA3MjAwNjgyYVwiXSxbXCJkNDI2M2RmYzNkMmRmOTIzYTAxNzlhNDg5NjZkMzBjZTg0ZTI1MTVhZmMzZGNjYzFiNzc5MDc3OTJlYmNjNjBlXCIsXCI2MmRmYWYwN2EwZjc4ZmViMzBlMzBkNjI5NTg1M2NlMTg5ZTEyNzc2MGFkNmNmN2ZhZTE2NGUxMjJhMjA4ZDU0XCJdLFtcIjQ4NDU3NTI0ODIwZmE2NWE0ZjhkMzVlYjY5MzA4NTdjMDAzMmFjYzBhNGEyZGU0MjIyMzNlZWRhODk3NjEyYzRcIixcIjI1YTc0OGFiMzY3OTc5ZDk4NzMzYzM4YTFmYTFjMmU3ZGM2Y2MwN2RiMmQ2MGE5YWU3YTc2YWFhNDliZDBmNzdcIl0sW1wiZGZlZWVmMTg4MTEwMWYyY2IxMTY0NGYzYTJhZmRmYzIwNDVlMTk5MTkxNTI5MjNmMzY3YTE3NjdjMTFjY2VkYVwiLFwiZWNmYjcwNTZjZjFkZTA0MmY5NDIwYmFiMzk2NzkzYzBjMzkwYmRlNzRiNGJiZGZmMTZhODNhZTA5YTlhNzUxN1wiXSxbXCI2ZDdlZjZiMTc1NDNmODM3M2M1NzNmNDRlMWYzODk4MzVkODliY2JjNjA2MmNlZDM2YzgyZGY4M2I4ZmFlODU5XCIsXCJjZDQ1MGVjMzM1NDM4OTg2ZGZlZmExMGM1N2ZlYTliY2M1MjFhMDk1OWIyZDgwYmJmNzRiMTkwZGNhNzEyZDEwXCJdLFtcImU3NTYwNWQ1OTEwMmE1YTI2ODQ1MDBkM2I5OTFmMmUzZjNjODhiOTMyMjU1NDcwMzVhZjI1YWY2NmUwNDU0MWZcIixcImY1YzU0NzU0YThmNzFlZTU0MGI5YjQ4NzI4NDczZTMxNGY3MjlhYzUzMDhiMDY5MzgzNjA5OTBlMmJmYWQxMjVcIl0sW1wiZWI5ODY2MGY0YzRkZmFhMDZhMmJlNDUzZDUwMjBiYzk5YTBjMmU2MGFiZTM4ODQ1N2RkNDNmZWZiMWVkNjIwY1wiLFwiNmNiOWE4ODc2ZDljYjg1MjA2MDlhZjNhZGQyNmNkMjBhMGE3Y2Q4YTk0MTExMzFjZTg1ZjQ0MTAwMDk5MjIzZVwiXSxbXCIxM2U4N2IwMjdkODUxNGQzNTkzOWYyZTY4OTJiMTk5MjIxNTQ1OTY5NDE4ODgzMzZkYzM1NjNlM2I4ZGJhOTQyXCIsXCJmZWY1YTNjNjgwNTlhNmRlYzVkNjI0MTE0YmYxZTkxYWFjMmI5ZGE1NjhkNmFiZWIyNTcwZDU1NjQ2YjhhZGYxXCJdLFtcImVlMTYzMDI2ZTlmZDZmZTAxN2MzOGYwNmE1YmU2ZmMxMjU0MjRiMzcxY2UyNzA4ZTdiZjQ0OTE2OTFlNTc2NGFcIixcIjFhY2IyNTBmMjU1ZGQ2MWM0M2Q5NGNjYzY3MGQwZjU4ZjQ5YWUzZmExNWI5NjYyM2U1NDMwZGEwYWQ2YzYyYjJcIl0sW1wiYjI2OGY1ZWY5YWQ1MWU0ZDc4ZGUzYTc1MGMyZGM4OWIxZTYyNmQ0MzUwNTg2Nzk5OTkzMmU1ZGIzM2FmM2Q4MFwiLFwiNWYzMTBkNGIzYzk5YjllYmIxOWY3N2Q0MWMxZGVlMDE4Y2YwZDM0ZmQ0MTkxNjE0MDAzZTk0NWExMjE2ZTQyM1wiXSxbXCJmZjA3ZjMxMThhOWRmMDM1ZTlmYWQ4NWViNmM3YmZlNDJiMDJmMDFjYTk5Y2VlYTNiZjdmZmRiYTkzYzQ3NTBkXCIsXCI0MzgxMzZkNjAzZTg1OGEzYTVjNDQwYzM4ZWNjYmFkZGMxZDI5NDIxMTRlMmVkZGQ0NzQwZDA5OGNlZDFmMGQ4XCJdLFtcIjhkOGI5ODU1YzdjMDUyYTM0MTQ2ZmQyMGZmYjY1OGJlYTRiOWY2OWUwZDgyNWViZWMxNmU4YzNjZTJiNTI2YTFcIixcImNkYjU1OWVlZGMyZDc5ZjkyNmJhZjQ0ZmI4NGVhNGQ0NGJjZjUwZmVlNTFkN2NlYjMwZTJlN2Y0NjMwMzY3NThcIl0sW1wiNTJkYjBiNTM4NGRmYmYwNWJmYTlkNDcyZDdhZTI2ZGZlNGI4NTFjZWNhOTFiMWViYTU0MjYzMTgwZGEzMmI2M1wiLFwiYzNiOTk3ZDA1MGVlNWQ0MjNlYmFmNjZhNmRiOWY1N2IzMTgwYzkwMjg3NTY3OWRlOTI0YjY5ZDg0YTdiMzc1XCJdLFtcImU2MmY5NDkwZDNkNTFkYTYzOTVlZmQyNGU4MDkxOWNjN2QwZjI5YzNmM2ZhNDhjNmZmZjU0M2JlY2JkNDMzNTJcIixcIjZkODlhZDdiYTQ4NzZiMGIyMmMyY2EyODBjNjgyODYyZjM0MmM4NTkxZjFkYWY1MTcwZTA3YmZkOWNjYWZhN2RcIl0sW1wiN2YzMGVhMjQ3NmIzOTliNDk1NzUwOWM4OGY3N2QwMTkxYWZhMmZmNWNiN2IxNGZkNmQ4ZTdkNjVhYWFiMTE5M1wiLFwiY2E1ZWY3ZDRiMjMxYzk0YzNiMTUzODlhNWY2MzExZTlkYWZmN2JiNjdiMTAzZTk4ODBlZjRiZmY2MzdhY2FlY1wiXSxbXCI1MDk4ZmYxZTFkOWYxNGZiNDZhMjEwZmFkYTZjOTAzZmVmMGZiN2I0YTFkZDFkOWFjNjBhMDM2MTgwMGI3YTAwXCIsXCI5NzMxMTQxZDgxZmM4ZjgwODRkMzdjNmU3NTQyMDA2YjNlZTFiNDBkNjBkZmU1MzYyYTViMTMyZmQxN2RkYzBcIl0sW1wiMzJiNzhjN2RlOWVlNTEyYTcyODk1YmU2YjljYmVmYTZlMmYzYzRjY2NlNDQ1Yzk2YjlmMmM4MWUyNzc4YWQ1OFwiLFwiZWUxODQ5ZjUxM2RmNzFlMzJlZmMzODk2ZWUyODI2MGM3M2JiODA1NDdhZTIyNzViYTQ5NzIzNzc5NGM4NzUzY1wiXSxbXCJlMmNiNzRmZGRjOGU5ZmJjZDA3NmVlZjJhN2M3MmIwY2UzN2Q1MGYwODI2OWRmYzA3NGI1ODE1NTA1NDdhNGY3XCIsXCJkM2FhMmVkNzFjOWRkMjI0N2E2MmRmMDYyNzM2ZWIwYmFkZGVhOWUzNjEyMmQyYmU4NjQxYWJjYjAwNWNjNGE0XCJdLFtcIjg0Mzg0NDc1NjZkNGQ3YmVkYWRjMjk5NDk2YWIzNTc0MjYwMDlhMzVmMjM1Y2IxNDFiZTBkOTljZDEwYWUzYThcIixcImM0ZTEwMjA5MTY5ODBhNGRhNWQwMWFjNWU2YWQzMzA3MzRlZjBkNzkwNjYzMWM0ZjIzOTA0MjZiMmVkZDc5MWZcIl0sW1wiNDE2MmQ0ODhiODk0MDIwMzliNTg0YzZmYzZjMzA4ODcwNTg3ZDljNDZmNjYwYjg3OGFiNjVjODJjNzExZDY3ZVwiLFwiNjcxNjNlOTAzMjM2Mjg5Zjc3NmYyMmMyNWZiOGEzYWZjMTczMmYyYjg0YjRlOTVkYmRhNDdhZTVhMDg1MjY0OVwiXSxbXCIzZmFkM2ZhODRjYWYwZjM0ZjBmODliZmQyZGNmNTRmYzE3NWQ3NjdhZWMzZTUwNjg0ZjNiYTRhNGJmNWY2ODNkXCIsXCJjZDFiYzdjYjZjYzQwN2JiMmYwY2E2NDdjNzE4YTczMGNmNzE4NzJlN2QwZDJhNTNmYTIwZWZjZGZlNjE4MjZcIl0sW1wiNjc0ZjI2MDBhMzAwN2EwMDU2OGMxYTdjZTA1ZDA4MTZjMWZiODRiZjEzNzA3OThmMWM2OTUzMmZhZWIxYTg2YlwiLFwiMjk5ZDIxZjk0MTNmMzNiM2VkZjQzYjI1NzAwNDU4MGI3MGRiNTdkYTBiMTgyMjU5ZTA5ZWVjYzY5ZTBkMzhhNVwiXSxbXCJkMzJmNGRhNTRhZGU3NGFiYjgxYjgxNWFkMWZiM2IyNjNkODJkNmM2OTI3MTRiY2ZmODdkMjliZDVlZTlmMDhmXCIsXCJmOTQyOWU3MzhiOGU1M2I5NjhlOTkwMTZjMDU5NzA3NzgyZTE0ZjQ1MzUzNTlkNTgyZmM0MTY5MTBiM2VlYTg3XCJdLFtcIjMwZTRlNjcwNDM1Mzg1NTU2ZTU5MzY1NzEzNTg0NWQzNmZiYjY5MzFmNzJiMDhjYjFlZDk1NGYxZTNjZTNmZjZcIixcIjQ2MmY5YmNlNjE5ODk4NjM4NDk5MzUwMTEzYmJjOWIxMGE4NzhkMzVkYTcwNzQwZGM2OTVhNTU5ZWI4OGRiN2JcIl0sW1wiYmUyMDYyMDAzYzUxY2MzMDA0NjgyOTA0MzMwZTRkZWU3ZjNkY2QxMGIwMWU1ODBiZjE5NzFiMDRkNGNhZDI5N1wiLFwiNjIxODhiYzQ5ZDYxZTU0Mjg1NzNkNDhhNzRlMWM2NTViMWM2MTA5MDkwNTY4MmEwZDU1NThlZDcyZGNjYjliY1wiXSxbXCI5MzE0NDQyM2FjZTM0NTFlZDI5ZTBmYjlhYzJhZjIxMWNiNmU4NGE2MDFkZjU5OTNjNDE5ODU5ZmZmNWRmMDRhXCIsXCI3YzEwZGZiMTY0YzM0MjVmNWM3MWEzZjlkNzk5MjAzOGYxMDY1MjI0ZjcyYmI5ZDFkOTAyYTZkMTMwMzdiNDdjXCJdLFtcImIwMTVmODA0NGY1ZmNiZGNmMjFjYTI2ZDZjMzRmYjgxOTc4MjkyMDVjN2I3ZDJhN2NiNjY0MThjMTU3YjExMmNcIixcImFiOGMxZTA4NmQwNGU4MTM3NDRhNjU1YjJkZjhkNWY4M2IzY2RjNmZhYTMwODhjMWQzYWVhMTQ1NGUzYTFkNWZcIl0sW1wiZDVlOWUxZGE2NDlkOTdkODllNDg2ODExN2E0NjVhM2E0ZjhhMThkZTU3YTE0MGQzNmIzZjJhZjM0MWEyMWI1MlwiLFwiNGNiMDQ0MzdmMzkxZWQ3MzExMWExM2NjMWQ0ZGQwZGIxNjkzNDY1YzIyNDA0ODBkODk1NWU4NTkyZjI3NDQ3YVwiXSxbXCJkM2FlNDEwNDdkZDdjYTA2NWRiZjhlZDc3Yjk5MjQzOTk4MzAwNWNkNzJlMTZkNmY5OTZhNTMxNmQzNjk2NmJiXCIsXCJiZDFhZWIyMWFkMjJlYmIyMmExMGYwMzAzNDE3YzZkOTY0ZjhjZGQ3ZGYwYWNhNjE0YjEwZGMxNGQxMjVhYzQ2XCJdLFtcIjQ2M2UyNzYzZDg4NWY5NThmYzY2Y2RkMjI4MDBmMGE0ODcxOTdkMGE4MmUzNzdiNDlmODBhZjg3Yzg5N2IwNjVcIixcImJmZWZhY2RiMGU1ZDBmZDdkZjNhMzExYTk0ZGUwNjJiMjZiODBjNjFmYmM5NzUwOGI3OTk5MjY3MWVmN2NhN2ZcIl0sW1wiNzk4NWZkZmQxMjdjMDU2N2M2ZjUzZWMxYmI2M2VjMzE1OGU1OTdjNDBiZmU3NDdjODNjZGRmYzkxMDY0MTkxN1wiLFwiNjAzYzEyZGFmM2Q5ODYyZWYyYjI1ZmUxZGUyODlhZWQyNGVkMjkxZTBlYzY3MDg3MDNhNWJkNTY3ZjMyZWQwM1wiXSxbXCI3NGExYWQ2YjVmNzZlMzlkYjJkZDI0OTQxMGVhYzdmOTllNzRjNTljYjgzZDJkMGVkNWZmMTU0M2RhNzcwM2U5XCIsXCJjYzYxNTdlZjE4YzljNjNjZDYxOTNkODM2MzFiYmVhMDA5M2UwOTY4OTQyZThjMzNkNTczN2ZkNzkwZTBkYjA4XCJdLFtcIjMwNjgyYTUwNzAzMzc1ZjYwMmQ0MTY2NjRiYTE5YjdmYzliYWI0MmM3Mjc0NzQ2M2E3MWQwODk2YjIyZjZkYTNcIixcIjU1M2UwNGY2YjAxOGI0ZmE2YzhmMzllN2YzMTFkMzE3NjI5MGQwZTBmMTljYTczZjE3NzE0ZDk5NzdhMjJmZjhcIl0sW1wiOWUyMTU4ZjBkN2MwZDVmMjZjMzc5MWVmZWZhNzk1OTc2NTRlN2EyYjI0NjRmNTJiMWVlNmMxMzQ3NzY5ZWY1N1wiLFwiNzEyZmNkZDFiOTA1M2YwOTAwM2EzNDgxZmE3NzYyZTlmZmQ3YzhlZjM1YTM4NTA5ZTJmYmYyNjI5MDA4MzczXCJdLFtcIjE3NmUyNjk4OWE0M2M5Y2ZlYmE0MDI5YzIwMjUzOGMyODE3MmU1NjZlM2M0ZmNlNzMyMjg1N2YzYmUzMjdkNjZcIixcImVkOGNjOWQwNGIyOWViODc3ZDI3MGI0ODc4ZGM0M2MxOWFlZmQzMWY0ZWVlMDllZTdiNDc4MzRjMWZhNGIxYzNcIl0sW1wiNzVkNDZlZmVhMzc3MWU2ZTY4YWJiODlhMTNhZDc0N2VjZjE4OTIzOTNkZmM0ZjFiNzAwNDc4OGM1MDM3NGRhOFwiLFwiOTg1MjM5MGE5OTUwNzY3OWZkMGI4NmZkMmIzOWE4NjhkN2VmYzIyMTUxMzQ2ZTFhM2NhNDcyNjU4NmE2YmVkOFwiXSxbXCI4MDlhMjBjNjdkNjQ5MDBmZmI2OThjNGM4MjVmNmQ1ZjIzMTBmYjA0NTFjODY5MzQ1YjczMTlmNjQ1NjA1NzIxXCIsXCI5ZTk5NDk4MGQ5OTE3ZTIyYjc2YjA2MTkyN2ZhMDQxNDNkMDk2Y2NjNTQ5NjNlNmE1ZWJmYTVmM2Y4ZTI4NmMxXCJdLFtcIjFiMzg5MDNhNDNmN2YxMTRlZDQ1MDBiNGVhYzcwODNmZGVmZWNlMWNmMjljNjM1MjhkNTYzNDQ2Zjk3MmMxODBcIixcIjQwMzZlZGM5MzFhNjBhZTg4OTM1M2Y3N2ZkNTNkZTRhMjcwOGIyNmI2ZjVkYTcyYWQzMzk0MTE5ZGFmNDA4ZjlcIl1dXG59fX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIiE9dHlwZW9mIHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWlmKGUpe2lmKFwiaGV4XCI9PT1lKXt0PXQucmVwbGFjZSgvW15hLXowLTldKy9naSxcIlwiKSx0Lmxlbmd0aCUyIT09MCYmKHQ9XCIwXCIrdCk7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz0yKXIucHVzaChwYXJzZUludCh0W25dK3RbbisxXSwxNikpfX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXt2YXIgaT10LmNoYXJDb2RlQXQobiksbz1pPj44LGE9MjU1Jmk7bz9yLnB1c2gobyxhKTpyLnB1c2goYSl9cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT1cIlwiLHI9MDtyPHQubGVuZ3RoO3IrKyllKz1pKHRbcl0udG9TdHJpbmcoMTYpKTtyZXR1cm4gZX1mdW5jdGlvbiBhKHQsZSl7Zm9yKHZhciByPVtdLG49MTw8ZSsxLGk9dC5jbG9uZSgpO2kuY21wbigxKT49MDspe3ZhciBvO2lmKGkuaXNPZGQoKSl7dmFyIGE9aS5hbmRsbihuLTEpO289YT4obj4+MSktMT8obj4+MSktYTphLGkuaXN1Ym4obyl9ZWxzZSBvPTA7ci5wdXNoKG8pO2Zvcih2YXIgZj0wIT09aS5jbXBuKDApJiYwPT09aS5hbmRsbihuLTEpP2UrMToxLHM9MTtzPGY7cysrKXIucHVzaCgwKTtpLml1c2hybihmKX1yZXR1cm4gcn1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9W1tdLFtdXTt0PXQuY2xvbmUoKSxlPWUuY2xvbmUoKTtmb3IodmFyIG49MCxpPTA7dC5jbXBuKC1uKT4wfHxlLmNtcG4oLWkpPjA7KXt2YXIgbz10LmFuZGxuKDMpK24mMyxhPWUuYW5kbG4oMykraSYzOzM9PT1vJiYobz0tMSksMz09PWEmJihhPS0xKTt2YXIgZjtpZigwPT09KDEmbykpZj0wO2Vsc2V7dmFyIHM9dC5hbmRsbig3KStuJjc7Zj0zIT09cyYmNSE9PXN8fDIhPT1hP286LW99clswXS5wdXNoKGYpO3ZhciB1O2lmKDA9PT0oMSZhKSl1PTA7ZWxzZXt2YXIgcz1lLmFuZGxuKDcpK2kmNzt1PTMhPT1zJiY1IT09c3x8MiE9PW8/YTotYX1yWzFdLnB1c2godSksMipuPT09ZisxJiYobj0xLW4pLDIqaT09PXUrMSYmKGk9MS1pKSx0Lml1c2hybigxKSxlLml1c2hybigxKX1yZXR1cm4gcn1mdW5jdGlvbiBzKHQsZSxyKXt2YXIgbj1cIl9cIitlO3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMCE9PXRoaXNbbl0/dGhpc1tuXTp0aGlzW25dPXIuY2FsbCh0aGlzKX19ZnVuY3Rpb24gdSh0KXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdD9jLnRvQXJyYXkodCxcImhleFwiKTp0fWZ1bmN0aW9uIGgodCl7cmV0dXJuIG5ldyBkKHQsXCJoZXhcIixcImxlXCIpfXZhciBjPWUsZD1yKDE4KTtjLmFzc2VydD1mdW5jdGlvbih0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9LGMudG9BcnJheT1uLGMuemVybzI9aSxjLnRvSGV4PW8sYy5lbmNvZGU9ZnVuY3Rpb24odCxlKXtyZXR1cm5cImhleFwiPT09ZT9vKHQpOnR9LGMuZ2V0TkFGPWEsYy5nZXRKU0Y9ZixjLmNhY2hlZFByb3BlcnR5PXMsYy5wYXJzZUJ5dGVzPXUsYy5pbnRGcm9tTEU9aH0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7dGhpcy5yYW5kPXR9dmFyIGk7aWYodC5leHBvcnRzPWZ1bmN0aW9uKHQpe3JldHVybiBpfHwoaT1uZXcgbihudWxsKSksaS5nZW5lcmF0ZSh0KX0sdC5leHBvcnRzLlJhbmQ9bixuLnByb3RvdHlwZS5nZW5lcmF0ZT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fcmFuZCh0KX0sXCJvYmplY3RcIj09dHlwZW9mIHdpbmRvdyl3aW5kb3cuY3J5cHRvJiZ3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06d2luZG93Lm1zQ3J5cHRvJiZ3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cubXNDcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9Om4ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IGltcGxlbWVudGVkIHlldFwiKX07ZWxzZSB0cnl7dmFyIG89cig2MDkpO24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3JldHVybiBvLnJhbmRvbUJ5dGVzKHQpfX1jYXRjaCh0KXtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtmb3IodmFyIGU9bmV3IFVpbnQ4QXJyYXkodCkscj0wO3I8ZS5sZW5ndGg7cisrKWVbcl09dGhpcy5yYW5kLmdldEJ5dGUoKTtyZXR1cm4gZX19fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3RoaXMucGVuZGluZz1udWxsLHRoaXMucGVuZGluZ1RvdGFsPTAsdGhpcy5ibG9ja1NpemU9dGhpcy5jb25zdHJ1Y3Rvci5ibG9ja1NpemUsdGhpcy5vdXRTaXplPXRoaXMuY29uc3RydWN0b3Iub3V0U2l6ZSx0aGlzLmhtYWNTdHJlbmd0aD10aGlzLmNvbnN0cnVjdG9yLmhtYWNTdHJlbmd0aCx0aGlzLnBhZExlbmd0aD10aGlzLmNvbnN0cnVjdG9yLnBhZExlbmd0aC84LHRoaXMuZW5kaWFuPVwiYmlnXCIsdGhpcy5fZGVsdGE4PXRoaXMuYmxvY2tTaXplLzgsdGhpcy5fZGVsdGEzMj10aGlzLmJsb2NrU2l6ZS8zMn12YXIgaT1yKDQ5KSxvPWkudXRpbHMsYT1vLmFzc2VydDtlLkJsb2NrSGFzaD1uLG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe2lmKHQ9by50b0FycmF5KHQsZSksdGhpcy5wZW5kaW5nP3RoaXMucGVuZGluZz10aGlzLnBlbmRpbmcuY29uY2F0KHQpOnRoaXMucGVuZGluZz10LHRoaXMucGVuZGluZ1RvdGFsKz10Lmxlbmd0aCx0aGlzLnBlbmRpbmcubGVuZ3RoPj10aGlzLl9kZWx0YTgpe3Q9dGhpcy5wZW5kaW5nO3ZhciByPXQubGVuZ3RoJXRoaXMuX2RlbHRhODt0aGlzLnBlbmRpbmc9dC5zbGljZSh0Lmxlbmd0aC1yLHQubGVuZ3RoKSwwPT09dGhpcy5wZW5kaW5nLmxlbmd0aCYmKHRoaXMucGVuZGluZz1udWxsKSx0PW8uam9pbjMyKHQsMCx0Lmxlbmd0aC1yLHRoaXMuZW5kaWFuKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPXRoaXMuX2RlbHRhMzIpdGhpcy5fdXBkYXRlKHQsbixuK3RoaXMuX2RlbHRhMzIpfXJldHVybiB0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMudXBkYXRlKHRoaXMuX3BhZCgpKSxhKG51bGw9PT10aGlzLnBlbmRpbmcpLHRoaXMuX2RpZ2VzdCh0KX0sbi5wcm90b3R5cGUuX3BhZD1mdW5jdGlvbigpe3ZhciB0PXRoaXMucGVuZGluZ1RvdGFsLGU9dGhpcy5fZGVsdGE4LHI9ZS0odCt0aGlzLnBhZExlbmd0aCklZSxuPW5ldyBBcnJheShyK3RoaXMucGFkTGVuZ3RoKTtuWzBdPTEyODtmb3IodmFyIGk9MTtpPHI7aSsrKW5baV09MDtpZih0PDw9MyxcImJpZ1wiPT09dGhpcy5lbmRpYW4pe2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wO25baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPTI1NSZ0fWVsc2V7bltpKytdPTI1NSZ0LG5baSsrXT10Pj4+OCYyNTUsbltpKytdPXQ+Pj4xNiYyNTUsbltpKytdPXQ+Pj4yNCYyNTUsbltpKytdPTAsbltpKytdPTAsbltpKytdPTAsbltpKytdPTA7Zm9yKHZhciBvPTg7bzx0aGlzLnBhZExlbmd0aDtvKyspbltpKytdPTB9cmV0dXJuIG59fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUscil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh0aGlzLkhhc2g9dCx0aGlzLmJsb2NrU2l6ZT10LmJsb2NrU2l6ZS84LHRoaXMub3V0U2l6ZT10Lm91dFNpemUvOCx0aGlzLmlubmVyPW51bGwsdGhpcy5vdXRlcj1udWxsLHZvaWQgdGhpcy5faW5pdChvLnRvQXJyYXkoZSxyKSkpOm5ldyBuKHQsZSxyKX12YXIgaT1yKDQ5KSxvPWkudXRpbHMsYT1vLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt0Lmxlbmd0aD50aGlzLmJsb2NrU2l6ZSYmKHQ9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KS5kaWdlc3QoKSksYSh0Lmxlbmd0aDw9dGhpcy5ibG9ja1NpemUpO2Zvcih2YXIgZT10Lmxlbmd0aDtlPHRoaXMuYmxvY2tTaXplO2UrKyl0LnB1c2goMCk7Zm9yKHZhciBlPTA7ZTx0Lmxlbmd0aDtlKyspdFtlXV49NTQ7dGhpcy5pbm5lcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTEwNjt0aGlzLm91dGVyPShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCl9LG4ucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmlubmVyLnVwZGF0ZSh0LGUpLHRoaXN9LG4ucHJvdG90eXBlLmRpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vdXRlci51cGRhdGUodGhpcy5pbm5lci5kaWdlc3QoKSksdGhpcy5vdXRlci5kaWdlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8obC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5lbmRpYW49XCJsaXR0bGVcIikpOm5ldyBufWZ1bmN0aW9uIGkodCxlLHIsbil7cmV0dXJuIHQ8PTE1P2Vecl5uOnQ8PTMxP2Umcnx+ZSZuOnQ8PTQ3PyhlfH5yKV5uOnQ8PTYzP2UmbnxyJn5uOmVeKHJ8fm4pfWZ1bmN0aW9uIG8odCl7cmV0dXJuIHQ8PTE1PzA6dDw9MzE/MTUxODUwMDI0OTp0PD00Nz8xODU5Nzc1MzkzOnQ8PTYzPzI0MDA5NTk3MDg6Mjg0MDg1MzgzOH1mdW5jdGlvbiBhKHQpe3JldHVybiB0PD0xNT8xMzUyODI5OTI2OnQ8PTMxPzE1NDg2MDM2ODQ6dDw9NDc/MTgzNjA3MjY5MTp0PD02Mz8yMDUzOTk0MjE3OjB9dmFyIGY9cig0OSkscz1mLnV0aWxzLHU9cy5yb3RsMzIsaD1zLnN1bTMyLGM9cy5zdW0zMl8zLGQ9cy5zdW0zMl80LGw9Zi5jb21tb24uQmxvY2tIYXNoO3MuaW5oZXJpdHMobixsKSxlLnJpcGVtZDE2MD1uLG4uYmxvY2tTaXplPTUxMixuLm91dFNpemU9MTYwLG4uaG1hY1N0cmVuZ3RoPTE5MixuLnBhZExlbmd0aD02NCxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuaFswXSxuPXRoaXMuaFsxXSxmPXRoaXMuaFsyXSxzPXRoaXMuaFszXSxsPXRoaXMuaFs0XSxtPXIsZz1uLHc9ZixfPXMsTT1sLFM9MDtTPDgwO1MrKyl7dmFyIEU9aCh1KGQocixpKFMsbixmLHMpLHRbcFtTXStlXSxvKFMpKSx2W1NdKSxsKTtyPWwsbD1zLHM9dShmLDEwKSxmPW4sbj1FLEU9aCh1KGQobSxpKDc5LVMsZyx3LF8pLHRbYltTXStlXSxhKFMpKSx5W1NdKSxNKSxtPU0sTT1fLF89dSh3LDEwKSx3PWcsZz1FfUU9Yyh0aGlzLmhbMV0sZixfKSx0aGlzLmhbMV09Yyh0aGlzLmhbMl0scyxNKSx0aGlzLmhbMl09Yyh0aGlzLmhbM10sbCxtKSx0aGlzLmhbM109Yyh0aGlzLmhbNF0scixnKSx0aGlzLmhbNF09Yyh0aGlzLmhbMF0sbix3KSx0aGlzLmhbMF09RX0sbi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9zLnRvSGV4MzIodGhpcy5oLFwibGl0dGxlXCIpOnMuc3BsaXQzMih0aGlzLmgsXCJsaXR0bGVcIil9O3ZhciBwPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGI9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0sdj1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0seT1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV19LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDMxNDQxMzQyNzcsMTAxMzkwNDI0MiwyNzczNDgwNzYyLDEzNTk4OTMxMTksMjYwMDgyMjkyNCw1Mjg3MzQ2MzUsMTU0MTQ1OTIyNV0sdGhpcy5rPVksdm9pZCh0aGlzLlc9bmV3IEFycmF5KDY0KSkpOm5ldyBufWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/KG4uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzIzODM3MTAzMiw5MTQxNTA2NjMsODEyNzAyOTk5LDQxNDQ5MTI2OTcsNDI5MDc3NTg1NywxNzUwNjAzMDI1LDE2OTQwNzY4MzksMzIwNDA3NTQyOF0pKTpuZXcgaX1mdW5jdGlvbiBvKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBvPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzc5MDMzNzAzLDQwODkyMzU3MjAsMzE0NDEzNDI3NywyMjI3ODczNTk1LDEwMTM5MDQyNDIsNDI3MTE3NTcyMywyNzczNDgwNzYyLDE1OTU3NTAxMjksMTM1OTg5MzExOSwyOTE3NTY1MTM3LDI2MDA4MjI5MjQsNzI1NTExMTk5LDUyODczNDYzNSw0MjE1Mzg5NTQ3LDE1NDE0NTkyMjUsMzI3MDMzMjA5XSx0aGlzLms9Vyx2b2lkKHRoaXMuVz1uZXcgQXJyYXkoMTYwKSkpOm5ldyBvfWZ1bmN0aW9uIGEoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGE/KG8uY2FsbCh0aGlzKSx2b2lkKHRoaXMuaD1bMzQxODA3MDM2NSwzMjM4MzcxMDMyLDE2NTQyNzAyNTAsOTE0MTUwNjYzLDI0Mzg1MjkzNzAsODEyNzAyOTk5LDM1NTQ2MjM2MCw0MTQ0OTEyNjk3LDE3MzE0MDU0MTUsNDI5MDc3NTg1NywyMzk0MTgwMjMxLDE3NTA2MDMwMjUsMzY3NTAwODUyNSwxNjk0MDc2ODM5LDEyMDMwNjI4MTMsMzIwNDA3NTQyOF0pKTpuZXcgYX1mdW5jdGlvbiBmKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBmPyhYLmNhbGwodGhpcyksdGhpcy5oPVsxNzMyNTg0MTkzLDQwMjMyMzM0MTcsMjU2MjM4MzEwMiwyNzE3MzM4NzgsMzI4NTM3NzUyMF0sdm9pZCh0aGlzLlc9bmV3IEFycmF5KDgwKSkpOm5ldyBmfWZ1bmN0aW9uIHModCxlLHIpe3JldHVybiB0JmVefnQmcn1mdW5jdGlvbiB1KHQsZSxyKXtyZXR1cm4gdCZlXnQmcl5lJnJ9ZnVuY3Rpb24gaCh0LGUscil7cmV0dXJuIHReZV5yfWZ1bmN0aW9uIGModCl7cmV0dXJuIFIodCwyKV5SKHQsMTMpXlIodCwyMil9ZnVuY3Rpb24gZCh0KXtyZXR1cm4gUih0LDYpXlIodCwxMSleUih0LDI1KX1mdW5jdGlvbiBsKHQpe3JldHVybiBSKHQsNyleUih0LDE4KV50Pj4+M31mdW5jdGlvbiBwKHQpe3JldHVybiBSKHQsMTcpXlIodCwxOSledD4+PjEwfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIDA9PT10P3MoZSxyLG4pOjE9PT10fHwzPT09dD9oKGUscixuKToyPT09dD91KGUscixuKTp2b2lkIDB9ZnVuY3Rpb24gdih0LGUscixuLGksbyl7dmFyIGE9dCZyXn50Jmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24geSh0LGUscixuLGksbyl7dmFyIGE9ZSZuXn5lJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gbSh0LGUscixuLGksbyl7dmFyIGE9dCZyXnQmaV5yJmk7cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gZyh0LGUscixuLGksbyl7dmFyIGE9ZSZuXmUmb15uJm87cmV0dXJuIGE8MCYmKGErPTQyOTQ5NjcyOTYpLGF9ZnVuY3Rpb24gdyh0LGUpe3ZhciByPU4odCxlLDI4KSxuPU4oZSx0LDIpLGk9TihlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBfKHQsZSl7dmFyIHI9TCh0LGUsMjgpLG49TChlLHQsMiksaT1MKGUsdCw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIE0odCxlKXt2YXIgcj1OKHQsZSwxNCksbj1OKHQsZSwxOCksaT1OKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIFModCxlKXt2YXIgcj1MKHQsZSwxNCksbj1MKHQsZSwxOCksaT1MKGUsdCw5KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIEUodCxlKXt2YXIgcj1OKHQsZSwxKSxuPU4odCxlLDgpLGk9VSh0LGUsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBBKHQsZSl7dmFyIHI9TCh0LGUsMSksbj1MKHQsZSw4KSxpPXoodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gayh0LGUpe3ZhciByPU4odCxlLDE5KSxuPU4oZSx0LDI5KSxpPVUodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24geCh0LGUpe3ZhciByPUwodCxlLDE5KSxuPUwoZSx0LDI5KSxpPXoodCxlLDYpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99dmFyIEk9cig0OSksQj1JLnV0aWxzLE89Qi5hc3NlcnQsUj1CLnJvdHIzMixQPUIucm90bDMyLFQ9Qi5zdW0zMixqPUIuc3VtMzJfNCxDPUIuc3VtMzJfNSxOPUIucm90cjY0X2hpLEw9Qi5yb3RyNjRfbG8sVT1CLnNocjY0X2hpLHo9Qi5zaHI2NF9sbyxEPUIuc3VtNjQscT1CLnN1bTY0X2hpLEY9Qi5zdW02NF9sbyxLPUIuc3VtNjRfNF9oaSxHPUIuc3VtNjRfNF9sbyxWPUIuc3VtNjRfNV9oaSxIPUIuc3VtNjRfNV9sbyxYPUkuY29tbW9uLkJsb2NrSGFzaCxZPVsxMTE2MzUyNDA4LDE4OTk0NDc0NDEsMzA0OTMyMzQ3MSwzOTIxMDA5NTczLDk2MTk4NzE2MywxNTA4OTcwOTkzLDI0NTM2MzU3NDgsMjg3MDc2MzIyMSwzNjI0MzgxMDgwLDMxMDU5ODQwMSw2MDcyMjUyNzgsMTQyNjg4MTk4NywxOTI1MDc4Mzg4LDIxNjIwNzgyMDYsMjYxNDg4ODEwMywzMjQ4MjIyNTgwLDM4MzUzOTA0MDEsNDAyMjIyNDc3NCwyNjQzNDcwNzgsNjA0ODA3NjI4LDc3MDI1NTk4MywxMjQ5MTUwMTIyLDE1NTUwODE2OTIsMTk5NjA2NDk4NiwyNTU0MjIwODgyLDI4MjE4MzQzNDksMjk1Mjk5NjgwOCwzMjEwMzEzNjcxLDMzMzY1NzE4OTEsMzU4NDUyODcxMSwxMTM5MjY5OTMsMzM4MjQxODk1LDY2NjMwNzIwNSw3NzM1Mjk5MTIsMTI5NDc1NzM3MiwxMzk2MTgyMjkxLDE2OTUxODM3MDAsMTk4NjY2MTA1MSwyMTc3MDI2MzUwLDI0NTY5NTYwMzcsMjczMDQ4NTkyMSwyODIwMzAyNDExLDMyNTk3MzA4MDAsMzM0NTc2NDc3MSwzNTE2MDY1ODE3LDM2MDAzNTI4MDQsNDA5NDU3MTkwOSwyNzU0MjMzNDQsNDMwMjI3NzM0LDUwNjk0ODYxNiw2NTkwNjA1NTYsODgzOTk3ODc3LDk1ODEzOTU3MSwxMzIyODIyMjE4LDE1MzcwMDIwNjMsMTc0Nzg3Mzc3OSwxOTU1NTYyMjIyLDIwMjQxMDQ4MTUsMjIyNzczMDQ1MiwyMzYxODUyNDI0LDI0Mjg0MzY0NzQsMjc1NjczNDE4NywzMjA0MDMxNDc5LDMzMjkzMjUyOThdLFc9WzExMTYzNTI0MDgsMzYwOTc2NzQ1OCwxODk5NDQ3NDQxLDYwMjg5MTcyNSwzMDQ5MzIzNDcxLDM5NjQ0ODQzOTksMzkyMTAwOTU3MywyMTczMjk1NTQ4LDk2MTk4NzE2Myw0MDgxNjI4NDcyLDE1MDg5NzA5OTMsMzA1MzgzNDI2NSwyNDUzNjM1NzQ4LDI5Mzc2NzE1NzksMjg3MDc2MzIyMSwzNjY0NjA5NTYwLDM2MjQzODEwODAsMjczNDg4MzM5NCwzMTA1OTg0MDEsMTE2NDk5NjU0Miw2MDcyMjUyNzgsMTMyMzYxMDc2NCwxNDI2ODgxOTg3LDM1OTAzMDQ5OTQsMTkyNTA3ODM4OCw0MDY4MTgyMzgzLDIxNjIwNzgyMDYsOTkxMzM2MTEzLDI2MTQ4ODgxMDMsNjMzODAzMzE3LDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCwzODM1MzkwNDAxLDI2NjY2MTM0NTgsNDAyMjIyNDc3NCw5NDQ3MTExMzksMjY0MzQ3MDc4LDIzNDEyNjI3NzMsNjA0ODA3NjI4LDIwMDc4MDA5MzMsNzcwMjU1OTgzLDE0OTU5OTA5MDEsMTI0OTE1MDEyMiwxODU2NDMxMjM1LDE1NTUwODE2OTIsMzE3NTIxODEzMiwxOTk2MDY0OTg2LDIxOTg5NTA4MzcsMjU1NDIyMDg4MiwzOTk5NzE5MzM5LDI4MjE4MzQzNDksNzY2Nzg0MDE2LDI5NTI5OTY4MDgsMjU2NjU5NDg3OSwzMjEwMzEzNjcxLDMyMDMzMzc5NTYsMzMzNjU3MTg5MSwxMDM0NDU3MDI2LDM1ODQ1Mjg3MTEsMjQ2Njk0ODkwMSwxMTM5MjY5OTMsMzc1ODMyNjM4MywzMzgyNDE4OTUsMTY4NzE3OTM2LDY2NjMwNzIwNSwxMTg4MTc5OTY0LDc3MzUyOTkxMiwxNTQ2MDQ1NzM0LDEyOTQ3NTczNzIsMTUyMjgwNTQ4NSwxMzk2MTgyMjkxLDI2NDM4MzM4MjMsMTY5NTE4MzcwMCwyMzQzNTI3MzkwLDE5ODY2NjEwNTEsMTAxNDQ3NzQ4MCwyMTc3MDI2MzUwLDEyMDY3NTkxNDIsMjQ1Njk1NjAzNywzNDQwNzc2MjcsMjczMDQ4NTkyMSwxMjkwODYzNDYwLDI4MjAzMDI0MTEsMzE1ODQ1NDI3MywzMjU5NzMwODAwLDM1MDU5NTI2NTcsMzM0NTc2NDc3MSwxMDYyMTcwMDgsMzUxNjA2NTgxNywzNjA2MDA4MzQ0LDM2MDAzNTI4MDQsMTQzMjcyNTc3Niw0MDk0NTcxOTA5LDE0NjcwMzE1OTQsMjc1NDIzMzQ0LDg1MTE2OTcyMCw0MzAyMjc3MzQsMzEwMDgyMzc1Miw1MDY5NDg2MTYsMTM2MzI1ODE5NSw2NTkwNjA1NTYsMzc1MDY4NTU5Myw4ODM5OTc4NzcsMzc4NTA1MDI4MCw5NTgxMzk1NzEsMzMxODMwNzQyNywxMzIyODIyMjE4LDM4MTI3MjM0MDMsMTUzNzAwMjA2MywyMDAzMDM0OTk1LDE3NDc4NzM3NzksMzYwMjAzNjg5OSwxOTU1NTYyMjIyLDE1NzU5OTAwMTIsMjAyNDEwNDgxNSwxMTI1NTkyOTI4LDIyMjc3MzA0NTIsMjcxNjkwNDMwNiwyMzYxODUyNDI0LDQ0Mjc3NjA0NCwyNDI4NDM2NDc0LDU5MzY5ODM0NCwyNzU2NzM0MTg3LDM3MzMxMTAyNDksMzIwNDAzMTQ3OSwyOTk5MzUxNTczLDMzMjkzMjUyOTgsMzgxNTkyMDQyNywzMzkxNTY5NjE0LDM5MjgzODM5MDAsMzUxNTI2NzI3MSw1NjYyODA3MTEsMzk0MDE4NzYwNiwzNDU0MDY5NTM0LDQxMTg2MzAyNzEsNDAwMDIzOTk5MiwxMTY0MTg0NzQsMTkxNDEzODU1NCwxNzQyOTI0MjEsMjczMTA1NTI3MCwyODkzODAzNTYsMzIwMzk5MzAwNiw0NjAzOTMyNjksMzIwNjIwMzE1LDY4NTQ3MTczMyw1ODc0OTY4MzYsODUyMTQyOTcxLDEwODY3OTI4NTEsMTAxNzAzNjI5OCwzNjU1NDMxMDAsMTEyNjAwMDU4MCwyNjE4Mjk3Njc2LDEyODgwMzM0NzAsMzQwOTg1NTE1OCwxNTAxNTA1OTQ4LDQyMzQ1MDk4NjYsMTYwNzE2NzkxNSw5ODcxNjc0NjgsMTgxNjQwMjMxNiwxMjQ2MTg5NTkxXSxaPVsxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwzMzk1NDY5NzgyXTtCLmluaGVyaXRzKG4sWCksZS5zaGEyNTY9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTI1NixuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1qKHAocltuLTJdKSxyW24tN10sbChyW24tMTVdKSxyW24tMTZdKTt2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10saD10aGlzLmhbNF0sYj10aGlzLmhbNV0sdj10aGlzLmhbNl0seT10aGlzLmhbN107Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgbj0wO248ci5sZW5ndGg7bisrKXt2YXIgbT1DKHksZChoKSxzKGgsYix2KSx0aGlzLmtbbl0scltuXSksZz1UKGMoaSksdShpLG8sYSkpO3k9dix2PWIsYj1oLGg9VChmLG0pLGY9YSxhPW8sbz1pLGk9VChtLGcpfXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0saCksdGhpcy5oWzVdPVQodGhpcy5oWzVdLGIpLHRoaXMuaFs2XT1UKHRoaXMuaFs2XSx2KSx0aGlzLmhbN109VCh0aGlzLmhbN10seSl9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGksbiksZS5zaGEyMjQ9aSxpLmJsb2NrU2l6ZT01MTIsaS5vdXRTaXplPTIyNCxpLmhtYWNTdHJlbmd0aD0xOTIsaS5wYWRMZW5ndGg9NjQsaS5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLnNsaWNlKDAsNyksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpfSxCLmluaGVyaXRzKG8sWCksZS5zaGE1MTI9byxvLmJsb2NrU2l6ZT0xMDI0LG8ub3V0U2l6ZT01MTIsby5obWFjU3RyZW5ndGg9MTkyLG8ucGFkTGVuZ3RoPTEyOCxvLnByb3RvdHlwZS5fcHJlcGFyZUJsb2NrPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXRoaXMuVyxuPTA7bjwzMjtuKyspcltuXT10W2Urbl07Zm9yKDtuPHIubGVuZ3RoO24rPTIpe3ZhciBpPWsocltuLTRdLHJbbi0zXSksbz14KHJbbi00XSxyW24tM10pLGE9cltuLTE0XSxmPXJbbi0xM10scz1FKHJbbi0zMF0scltuLTI5XSksdT1BKHJbbi0zMF0scltuLTI5XSksaD1yW24tMzJdLGM9cltuLTMxXTtyW25dPUsoaSxvLGEsZixzLHUsaCxjKSxyW24rMV09RyhpLG8sYSxmLHMsdSxoLGMpfX0sby5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe3RoaXMuX3ByZXBhcmVCbG9jayh0LGUpO3ZhciByPXRoaXMuVyxuPXRoaXMuaFswXSxpPXRoaXMuaFsxXSxvPXRoaXMuaFsyXSxhPXRoaXMuaFszXSxmPXRoaXMuaFs0XSxzPXRoaXMuaFs1XSx1PXRoaXMuaFs2XSxoPXRoaXMuaFs3XSxjPXRoaXMuaFs4XSxkPXRoaXMuaFs5XSxsPXRoaXMuaFsxMF0scD10aGlzLmhbMTFdLGI9dGhpcy5oWzEyXSxFPXRoaXMuaFsxM10sQT10aGlzLmhbMTRdLGs9dGhpcy5oWzE1XTtPKHRoaXMuay5sZW5ndGg9PT1yLmxlbmd0aCk7Zm9yKHZhciB4PTA7eDxyLmxlbmd0aDt4Kz0yKXt2YXIgST1BLEI9ayxSPU0oYyxkKSxQPVMoYyxkKSxUPXYoYyxkLGwscCxiLEUpLGo9eShjLGQsbCxwLGIsRSksQz10aGlzLmtbeF0sTj10aGlzLmtbeCsxXSxMPXJbeF0sVT1yW3grMV0sej1WKEksQixSLFAsVCxqLEMsTixMLFUpLEs9SChJLEIsUixQLFQsaixDLE4sTCxVKSxJPXcobixpKSxCPV8obixpKSxSPW0obixpLG8sYSxmLHMpLFA9ZyhuLGksbyxhLGYscyksRz1xKEksQixSLFApLFg9RihJLEIsUixQKTtBPWIsaz1FLGI9bCxFPXAsbD1jLHA9ZCxjPXEodSxoLHosSyksZD1GKGgsaCx6LEspLHU9ZixoPXMsZj1vLHM9YSxvPW4sYT1pLG49cSh6LEssRyxYKSxpPUYoeixLLEcsWCl9RCh0aGlzLmgsMCxuLGkpLEQodGhpcy5oLDIsbyxhKSxEKHRoaXMuaCw0LGYscyksRCh0aGlzLmgsNix1LGgpLEQodGhpcy5oLDgsYyxkKSxEKHRoaXMuaCwxMCxsLHApLEQodGhpcy5oLDEyLGIsRSksRCh0aGlzLmgsMTQsQSxrKX0sby5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9LEIuaW5oZXJpdHMoYSxvKSxlLnNoYTM4ND1hLGEuYmxvY2tTaXplPTEwMjQsYS5vdXRTaXplPTM4NCxhLmhtYWNTdHJlbmd0aD0xOTIsYS5wYWRMZW5ndGg9MTI4LGEucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLnNsaWNlKDAsMTIpLFwiYmlnXCIpfSxCLmluaGVyaXRzKGYsWCksZS5zaGExPWYsZi5ibG9ja1NpemU9NTEyLGYub3V0U2l6ZT0xNjAsZi5obWFjU3RyZW5ndGg9ODAsZi5wYWRMZW5ndGg9NjQsZi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MTY7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKyspcltuXT1QKHJbbi0zXV5yW24tOF1ecltuLTE0XV5yW24tMTZdLDEpO2Zvcih2YXIgaT10aGlzLmhbMF0sbz10aGlzLmhbMV0sYT10aGlzLmhbMl0sZj10aGlzLmhbM10scz10aGlzLmhbNF0sbj0wO248ci5sZW5ndGg7bisrKXt2YXIgdT1+fihuLzIwKSxoPUMoUChpLDUpLGIodSxvLGEsZikscyxyW25dLFpbdV0pO3M9ZixmPWEsYT1QKG8sMzApLG89aSxpPWh9dGhpcy5oWzBdPVQodGhpcy5oWzBdLGkpLHRoaXMuaFsxXT1UKHRoaXMuaFsxXSxvKSx0aGlzLmhbMl09VCh0aGlzLmhbMl0sYSksdGhpcy5oWzNdPVQodGhpcy5oWzNdLGYpLHRoaXMuaFs0XT1UKHRoaXMuaFs0XSxzKX0sZi5wcm90b3R5cGUuX2RpZ2VzdD1mdW5jdGlvbih0KXtyZXR1cm5cImhleFwiPT09dD9CLnRvSGV4MzIodGhpcy5oLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmgsXCJiaWdcIil9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0LGUpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuIHQuc2xpY2UoKTtpZighdClyZXR1cm5bXTt2YXIgcj1bXTtpZihcInN0cmluZ1wiPT10eXBlb2YgdClpZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspcltuXT0wfHRbbl07cmV0dXJuIHJ9ZnVuY3Rpb24gaSh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9Zih0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gbyh0KXt2YXIgZT10Pj4+MjR8dD4+PjgmNjUyODB8dDw8OCYxNjcxMTY4MHwoMjU1JnQpPDwyNDtyZXR1cm4gZT4+PjB9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1cIlwiLG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dFtuXTtcImxpdHRsZVwiPT09ZSYmKGk9byhpKSkscis9cyhpLnRvU3RyaW5nKDE2KSl9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0KXtyZXR1cm4gMT09PXQubGVuZ3RoP1wiMFwiK3Q6dH1mdW5jdGlvbiBzKHQpe3JldHVybiA3PT09dC5sZW5ndGg/XCIwXCIrdDo2PT09dC5sZW5ndGg/XCIwMFwiK3Q6NT09PXQubGVuZ3RoP1wiMDAwXCIrdDo0PT09dC5sZW5ndGg/XCIwMDAwXCIrdDozPT09dC5sZW5ndGg/XCIwMDAwMFwiK3Q6Mj09PXQubGVuZ3RoP1wiMDAwMDAwXCIrdDoxPT09dC5sZW5ndGg/XCIwMDAwMDAwXCIrdDp0fWZ1bmN0aW9uIHUodCxlLHIsbil7dmFyIGk9ci1lO3koaSU0PT09MCk7Zm9yKHZhciBvPW5ldyBBcnJheShpLzQpLGE9MCxmPWU7YTxvLmxlbmd0aDthKyssZis9NCl7dmFyIHM7cz1cImJpZ1wiPT09bj90W2ZdPDwyNHx0W2YrMV08PDE2fHRbZisyXTw8OHx0W2YrM106dFtmKzNdPDwyNHx0W2YrMl08PDE2fHRbZisxXTw8OHx0W2ZdLG9bYV09cz4+PjB9cmV0dXJuIG99ZnVuY3Rpb24gaCh0LGUpe2Zvcih2YXIgcj1uZXcgQXJyYXkoNCp0Lmxlbmd0aCksbj0wLGk9MDtuPHQubGVuZ3RoO24rKyxpKz00KXt2YXIgbz10W25dO1wiYmlnXCI9PT1lPyhyW2ldPW8+Pj4yNCxyW2krMV09bz4+PjE2JjI1NSxyW2krMl09bz4+PjgmMjU1LHJbaSszXT0yNTUmbyk6KHJbaSszXT1vPj4+MjQscltpKzJdPW8+Pj4xNiYyNTUscltpKzFdPW8+Pj44JjI1NSxyW2ldPTI1NSZvKX1yZXR1cm4gcn1mdW5jdGlvbiBjKHQsZSl7cmV0dXJuIHQ+Pj5lfHQ8PDMyLWV9ZnVuY3Rpb24gZCh0LGUpe3JldHVybiB0PDxlfHQ+Pj4zMi1lfWZ1bmN0aW9uIGwodCxlKXtyZXR1cm4gdCtlPj4+MH1mdW5jdGlvbiBwKHQsZSxyKXtyZXR1cm4gdCtlK3I+Pj4wfWZ1bmN0aW9uIGIodCxlLHIsbil7cmV0dXJuIHQrZStyK24+Pj4wfWZ1bmN0aW9uIHYodCxlLHIsbixpKXtyZXR1cm4gdCtlK3IrbitpPj4+MH1mdW5jdGlvbiB5KHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX1mdW5jdGlvbiBtKHQsZSxyLG4pe3ZhciBpPXRbZV0sbz10W2UrMV0sYT1uK28+Pj4wLGY9KGE8bj8xOjApK3IraTt0W2VdPWY+Pj4wLHRbZSsxXT1hfWZ1bmN0aW9uIGcodCxlLHIsbil7dmFyIGk9ZStuPj4+MCxvPShpPGU/MTowKSt0K3I7cmV0dXJuIG8+Pj4wfWZ1bmN0aW9uIHcodCxlLHIsbil7dmFyIGk9ZStuO3JldHVybiBpPj4+MH1mdW5jdGlvbiBfKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9MCx1PWU7dT11K24+Pj4wLHMrPXU8ZT8xOjAsdT11K28+Pj4wLHMrPXU8bz8xOjAsdT11K2Y+Pj4wLHMrPXU8Zj8xOjA7dmFyIGg9dCtyK2krYStzO3JldHVybiBoPj4+MH1mdW5jdGlvbiBNKHQsZSxyLG4saSxvLGEsZil7dmFyIHM9ZStuK28rZjtyZXR1cm4gcz4+PjB9ZnVuY3Rpb24gUyh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD0wLGM9ZTtjPWMrbj4+PjAsaCs9YzxlPzE6MCxjPWMrbz4+PjAsaCs9YzxvPzE6MCxjPWMrZj4+PjAsaCs9YzxmPzE6MCxjPWMrdT4+PjAsaCs9Yzx1PzE6MDt2YXIgZD10K3IraSthK3MraDtyZXR1cm4gZD4+PjB9ZnVuY3Rpb24gRSh0LGUscixuLGksbyxhLGYscyx1KXt2YXIgaD1lK24rbytmK3U7cmV0dXJuIGg+Pj4wfWZ1bmN0aW9uIEEodCxlLHIpe3ZhciBuPWU8PDMyLXJ8dD4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIGsodCxlLHIpe3ZhciBuPXQ8PDMyLXJ8ZT4+PnI7cmV0dXJuIG4+Pj4wfWZ1bmN0aW9uIHgodCxlLHIpe3JldHVybiB0Pj4+cn1mdW5jdGlvbiBJKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH12YXIgQj1lLE89cigyKTtCLnRvQXJyYXk9bixCLnRvSGV4PWksQi5odG9ubD1vLEIudG9IZXgzMj1hLEIuemVybzI9ZixCLnplcm84PXMsQi5qb2luMzI9dSxCLnNwbGl0MzI9aCxCLnJvdHIzMj1jLEIucm90bDMyPWQsQi5zdW0zMj1sLEIuc3VtMzJfMz1wLEIuc3VtMzJfND1iLEIuc3VtMzJfNT12LEIuYXNzZXJ0PXksQi5pbmhlcml0cz1PLGUuc3VtNjQ9bSxlLnN1bTY0X2hpPWcsZS5zdW02NF9sbz13LGUuc3VtNjRfNF9oaT1fLGUuc3VtNjRfNF9sbz1NLGUuc3VtNjRfNV9oaT1TLGUuc3VtNjRfNV9sbz1FLGUucm90cjY0X2hpPUEsZS5yb3RyNjRfbG89ayxlLnNocjY0X2hpPXgsZS5zaHI2NF9sbz1JfSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMDApLGk9bi5kZWZpbmUoXCJSU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTFcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTJcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDFcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDJcIikuaW50KCksdGhpcy5rZXkoXCJjb2VmZmljaWVudFwiKS5pbnQoKSl9KTtlLlJTQVByaXZhdGVLZXk9aTt2YXIgbz1uLmRlZmluZShcIlJTQVB1YmxpY0tleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCkpfSk7ZS5SU0FQdWJsaWNLZXk9bzt2YXIgYT1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHVibGljS2V5XCIpLmJpdHN0cigpKX0pO2UuUHVibGljS2V5PWE7dmFyIGY9bi5kZWZpbmUoXCJBbGdvcml0aG1JZGVudGlmaWVyXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5vYmppZCgpLHRoaXMua2V5KFwibm9uZVwiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJjdXJ2ZVwiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpKS5vcHRpb25hbCgpKX0pLHM9bi5kZWZpbmUoXCJQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuUHJpdmF0ZUtleT1zO3ZhciB1PW4uZGVmaW5lKFwiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJkZWNyeXB0XCIpLnNlcSgpLm9iaih0aGlzLmtleShcImtkZVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwia2RlcGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInNhbHRcIikub2N0c3RyKCksdGhpcy5rZXkoXCJpdGVyc1wiKS5pbnQoKSkpLHRoaXMua2V5KFwiY2lwaGVyXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29cIikub2JqaWQoKSx0aGlzLmtleShcIml2XCIpLm9jdHN0cigpKSkpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5FbmNyeXB0ZWRQcml2YXRlS2V5PXU7dmFyIGg9bi5kZWZpbmUoXCJEU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCksdGhpcy5rZXkoXCJwdWJfa2V5XCIpLmludCgpLHRoaXMua2V5KFwicHJpdl9rZXlcIikuaW50KCkpfSk7ZS5EU0FQcml2YXRlS2V5PWgsZS5EU0FwYXJhbT1uLmRlZmluZShcIkRTQXBhcmFtXCIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIGM9bi5kZWZpbmUoXCJFQ1ByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVLZXlcIikub2N0c3RyKCksdGhpcy5rZXkoXCJwYXJhbWV0ZXJzXCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGQpLHRoaXMua2V5KFwicHVibGljS2V5XCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ZS5FQ1ByaXZhdGVLZXk9Yzt2YXIgZD1uLmRlZmluZShcIkVDUGFyYW1ldGVyc1wiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtlLnNpZ25hdHVyZT1uLmRlZmluZShcInNpZ25hdHVyZVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJyXCIpLmludCgpLHRoaXMua2V5KFwic1wiKS5pbnQoKSl9KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt2YXIgbj0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxccj9cXG5ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxyP1xcblxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4vbSxpPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbi9tLG89L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuLS0tLS1FTkQgXFwxIEtFWS0tLS0tJC9tLGE9cigxNDgpLGY9cigyMTkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe3ZhciBzLHU9dC50b1N0cmluZygpLGg9dS5tYXRjaChuKTtpZihoKXt2YXIgYz1cImFlc1wiK2hbMV0sZD1uZXcgZShoWzJdLFwiaGV4XCIpLGw9bmV3IGUoaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIikscD1hKHIsZC5zbGljZSgwLDgpLHBhcnNlSW50KGhbMV0sMTApKS5rZXksYj1bXSx2PWYuY3JlYXRlRGVjaXBoZXJpdihjLHAsZCk7Yi5wdXNoKHYudXBkYXRlKGwpKSxiLnB1c2godi5maW5hbCgpKSxzPWUuY29uY2F0KGIpfWVsc2V7dmFyIHk9dS5tYXRjaChvKTtzPW5ldyBlKHlbMl0ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpfXZhciBtPXUubWF0Y2goaSlbMV0rXCIgS0VZXCI7cmV0dXJue3RhZzptLGRhdGE6c319fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmJvZHk9ZSx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dmFyIGk9cigxMDApLG89cigyKSxhPWU7YS5kZWZpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXIoMjUxKS5ydW5JblRoaXNDb250ZXh0KFwiKGZ1bmN0aW9uIFwiK3RoaXMubmFtZStcIihlbnRpdHkpIHtcXG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbn0pXCIpfWNhdGNoKHQpe2U9ZnVuY3Rpb24odCl7dGhpcy5faW5pdE5hbWVkKHQpfX1yZXR1cm4gbyhlLHQpLGUucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSl9LG5ldyBlKHRoaXMpfSxuLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZGVjb2RlcnNbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LHIpfSxuLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmVuY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZW5jb2RlcnNbdF0pKSx0aGlzLmVuY29kZXJzW3RdfSxuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKGUpLmVuY29kZSh0LHIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj17fTt0aGlzLl9iYXNlU3RhdGU9cixyLmVuYz10LHIucGFyZW50PWV8fG51bGwsci5jaGlsZHJlbj1udWxsLHIudGFnPW51bGwsci5hcmdzPW51bGwsci5yZXZlcnNlQXJncz1udWxsLHIuY2hvaWNlPW51bGwsci5vcHRpb25hbD0hMSxyLmFueT0hMSxyLm9iaj0hMSxyLnVzZT1udWxsLHIudXNlRGVjb2Rlcj1udWxsLHIua2V5PW51bGwsci5kZWZhdWx0PW51bGwsci5leHBsaWNpdD1udWxsLHIuaW1wbGljaXQ9bnVsbCxyLmNvbnRhaW5zPW51bGwsci5wYXJlbnR8fChyLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dmFyIGk9cig2OCkuUmVwb3J0ZXIsbz1yKDY4KS5FbmNvZGVyQnVmZmVyLGE9cig2OCkuRGVjb2RlckJ1ZmZlcixmPXIoNTM4KSxzPVtcInNlcVwiLFwic2Vxb2ZcIixcInNldFwiLFwic2V0b2ZcIixcIm9iamlkXCIsXCJib29sXCIsXCJnZW50aW1lXCIsXCJ1dGN0aW1lXCIsXCJudWxsX1wiLFwiZW51bVwiLFwiaW50XCIsXCJiaXRzdHJcIixcImJtcHN0clwiLFwiY2hhcnN0clwiLFwiZ2Vuc3RyXCIsXCJncmFwaHN0clwiLFwiaWE1c3RyXCIsXCJpc282NDZzdHJcIixcIm51bXN0clwiLFwib2N0c3RyXCIsXCJwcmludHN0clwiLFwidDYxc3RyXCIsXCJ1bmlzdHJcIixcInV0ZjhzdHJcIixcInZpZGVvc3RyXCJdLHU9W1wia2V5XCIsXCJvYmpcIixcInVzZVwiLFwib3B0aW9uYWxcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiZGVmXCIsXCJjaG9pY2VcIixcImFueVwiLFwiY29udGFpbnNcIl0uY29uY2F0KHMpLGg9W1wiX3BlZWtUYWdcIixcIl9kZWNvZGVUYWdcIixcIl91c2VcIixcIl9kZWNvZGVTdHJcIixcIl9kZWNvZGVPYmppZFwiLFwiX2RlY29kZVRpbWVcIixcIl9kZWNvZGVOdWxsXCIsXCJfZGVjb2RlSW50XCIsXCJfZGVjb2RlQm9vbFwiLFwiX2RlY29kZUxpc3RcIixcIl9lbmNvZGVDb21wb3NpdGVcIixcIl9lbmNvZGVTdHJcIixcIl9lbmNvZGVPYmppZFwiLFwiX2VuY29kZVRpbWVcIixcIl9lbmNvZGVOdWxsXCIsXCJfZW5jb2RlSW50XCIsXCJfZW5jb2RlQm9vbFwiXTt0LmV4cG9ydHM9bjt2YXIgYz1bXCJlbmNcIixcInBhcmVudFwiLFwiY2hpbGRyZW5cIixcInRhZ1wiLFwiYXJnc1wiLFwicmV2ZXJzZUFyZ3NcIixcImNob2ljZVwiLFwib3B0aW9uYWxcIixcImFueVwiLFwib2JqXCIsXCJ1c2VcIixcImFsdGVyZWRVc2VcIixcImtleVwiLFwiZGVmYXVsdFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJjb250YWluc1wiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPXt9O2MuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPXRbcl19KTt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT1lLHJ9LG4ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzW2VdPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIHQuY2hpbGRyZW4ucHVzaChyKSxyW2VdLmFwcGx5KHIsYXJndW1lbnRzKX19LHRoaXMpfSxuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7ZihudWxsPT09ZS5wYXJlbnQpLHQuY2FsbCh0aGlzKSxlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksZi5lcXVhbChlLmNoaWxkcmVuLmxlbmd0aCwxLFwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkXCIpfSxuLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO3Q9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGYobnVsbD09PWUuY2hpbGRyZW4pLGUuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24odCl7dC5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PXQubGVuZ3RoJiYoZihudWxsPT09ZS5hcmdzKSxlLmFyZ3M9dCxlLnJldmVyc2VBcmdzPXQubWFwKGZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0fHx0LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB0O3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3I9PSgwfHIpJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSkpfSxoLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogXCIrZS5lbmMpfX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGYobnVsbD09PWUudGFnKSxlLnRhZz10LHRoaXMuX3VzZUFyZ3MociksdGhpc319KSxuLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS51c2U9dCx0aGlzfSxuLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmRlZmF1bHQpLGUuZGVmYXVsdD10LGUub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5leHBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuaW1wbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0Lm9iaj0hMCwwIT09ZS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoZSksdGhpc30sbi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5rZXkpLGUua2V5PXQsdGhpc30sbi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0LmFueT0hMCx0aGlzfSxuLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmNob2ljZSksZS5jaG9pY2U9dCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzfSxuLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLmNvbnRhaW5zPXQsdGhpc30sbi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIHQud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUodCxlKSk7dmFyIG49ci5kZWZhdWx0LGk9ITAsbz1udWxsO2lmKG51bGwhPT1yLmtleSYmKG89dC5lbnRlcktleShyLmtleSkpLHIub3B0aW9uYWwpe3ZhciBmPW51bGw7aWYobnVsbCE9PXIuZXhwbGljaXQ/Zj1yLmV4cGxpY2l0Om51bGwhPT1yLmltcGxpY2l0P2Y9ci5pbXBsaWNpdDpudWxsIT09ci50YWcmJihmPXIudGFnKSxudWxsIT09Znx8ci5hbnkpe2lmKGk9dGhpcy5fcGVla1RhZyh0LGYsci5hbnkpLHQuaXNFcnJvcihpKSlyZXR1cm4gaX1lbHNle3ZhciBzPXQuc2F2ZSgpO3RyeXtudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLGk9ITB9Y2F0Y2godCl7aT0hMX10LnJlc3RvcmUocyl9fXZhciB1O2lmKHIub2JqJiZpJiYodT10LmVudGVyT2JqZWN0KCkpLGkpe2lmKG51bGwhPT1yLmV4cGxpY2l0KXt2YXIgaD10aGlzLl9kZWNvZGVUYWcodCxyLmV4cGxpY2l0KTtpZih0LmlzRXJyb3IoaCkpcmV0dXJuIGg7dD1ofXZhciBjPXQub2Zmc2V0O2lmKG51bGw9PT1yLnVzZSYmbnVsbD09PXIuY2hvaWNlKXtpZihyLmFueSl2YXIgcz10LnNhdmUoKTt2YXIgZD10aGlzLl9kZWNvZGVUYWcodCxudWxsIT09ci5pbXBsaWNpdD9yLmltcGxpY2l0OnIudGFnLHIuYW55KTtpZih0LmlzRXJyb3IoZCkpcmV0dXJuIGQ7ci5hbnk/bj10LnJhdyhzKTp0PWR9aWYoZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLGMsdC5sZW5ndGgsXCJ0YWdnZWRcIiksZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLHQub2Zmc2V0LHQubGVuZ3RoLFwiY29udGVudFwiKSxuPXIuYW55P246bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSx0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUodCxlKX0pLHIuY29udGFpbnMmJihcIm9jdHN0clwiPT09ci50YWd8fFwiYml0c3RyXCI9PT1yLnRhZykpe3ZhciBsPW5ldyBhKG4pO249dGhpcy5fZ2V0VXNlKHIuY29udGFpbnMsdC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUobCxlKX19cmV0dXJuIHIub2JqJiZpJiYobj10LmxlYXZlT2JqZWN0KHUpKSxudWxsPT09ci5rZXl8fG51bGw9PT1uJiZpIT09ITA/bnVsbCE9PW8mJnQuZXhpdEtleShvKTp0LmxlYXZlS2V5KG8sci5rZXksbiksbn0sbi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm5cInNlcVwiPT09dHx8XCJzZXRcIj09PXQ/bnVsbDpcInNlcW9mXCI9PT10fHxcInNldG9mXCI9PT10P3RoaXMuX2RlY29kZUxpc3QoZSx0LG4uYXJnc1swXSxyKTovc3RyJC8udGVzdCh0KT90aGlzLl9kZWNvZGVTdHIoZSx0LHIpOlwib2JqaWRcIj09PXQmJm4uYXJncz90aGlzLl9kZWNvZGVPYmppZChlLG4uYXJnc1swXSxuLmFyZ3NbMV0scik6XCJvYmppZFwiPT09dD90aGlzLl9kZWNvZGVPYmppZChlLG51bGwsbnVsbCxyKTpcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dD90aGlzLl9kZWNvZGVUaW1lKGUsdCxyKTpcIm51bGxfXCI9PT10P3RoaXMuX2RlY29kZU51bGwoZSxyKTpcImJvb2xcIj09PXQ/dGhpcy5fZGVjb2RlQm9vbChlLHIpOlwiaW50XCI9PT10fHxcImVudW1cIj09PXQ/dGhpcy5fZGVjb2RlSW50KGUsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShlLHIpOmUuZXJyb3IoXCJ1bmtub3duIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIudXNlRGVjb2Rlcj10aGlzLl91c2UodCxlKSxmKG51bGw9PT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxyLmltcGxpY2l0IT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLmNsb25lKCksci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ci5pbXBsaWNpdCksci51c2VEZWNvZGVyfSxuLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49bnVsbCxpPSExO3JldHVybiBPYmplY3Qua2V5cyhyLmNob2ljZSkuc29tZShmdW5jdGlvbihvKXt2YXIgYT10LnNhdmUoKSxmPXIuY2hvaWNlW29dO3RyeXt2YXIgcz1mLl9kZWNvZGUodCxlKTtpZih0LmlzRXJyb3IocykpcmV0dXJuITE7bj17dHlwZTpvLHZhbHVlOnN9LGk9ITB9Y2F0Y2goZSl7cmV0dXJuIHQucmVzdG9yZShhKSwhMX1yZXR1cm4hMH0sdGhpcyksaT9uOnQuZXJyb3IoXCJDaG9pY2Ugbm90IG1hdGNoZWRcIil9LG4ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LHRoaXMucmVwb3J0ZXIpfSxuLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4uZGVmYXVsdHx8bi5kZWZhdWx0IT09dCl7dmFyIGk9dGhpcy5fZW5jb2RlVmFsdWUodCxlLHIpO2lmKHZvaWQgMCE9PWkmJiF0aGlzLl9za2lwRGVmYXVsdChpLGUscikpcmV0dXJuIGl9fSxuLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5wYXJlbnQpcmV0dXJuIG4uY2hpbGRyZW5bMF0uX2VuY29kZSh0LGV8fG5ldyBpKTt2YXIgbz1udWxsO2lmKHRoaXMucmVwb3J0ZXI9ZSxuLm9wdGlvbmFsJiZ2b2lkIDA9PT10KXtpZihudWxsPT09bi5kZWZhdWx0KXJldHVybjt0PW4uZGVmYXVsdH12YXIgYT1udWxsLGY9ITE7aWYobi5hbnkpbz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2Vsc2UgaWYobi5jaG9pY2Upbz10aGlzLl9lbmNvZGVDaG9pY2UodCxlKTtlbHNlIGlmKG4uY29udGFpbnMpYT10aGlzLl9nZXRVc2Uobi5jb250YWlucyxyKS5fZW5jb2RlKHQsZSksZj0hMDtlbHNlIGlmKG4uY2hpbGRyZW4pYT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihyKXtpZihcIm51bGxfXCI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCxlLHQpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXlcIik7dmFyIG49ZS5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZihcIm9iamVjdFwiIT10eXBlb2YgdClyZXR1cm4gZS5lcnJvcihcIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdFwiKTt2YXIgaT1yLl9lbmNvZGUodFtyLl9iYXNlU3RhdGUua2V5XSxlLHQpO3JldHVybiBlLmxlYXZlS2V5KG4pLGl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKTtlbHNlIGlmKFwic2Vxb2ZcIj09PW4udGFnfHxcInNldG9mXCI9PT1uLnRhZyl7aWYoIW4uYXJnc3x8MSE9PW4uYXJncy5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJUb28gbWFueSBhcmdzIGZvciA6IFwiK24udGFnKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5lcnJvcihcInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXlcIik7dmFyIHM9dGhpcy5jbG9uZSgpO3MuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0Lm1hcChmdW5jdGlvbihyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHRoaXMuX2dldFVzZShuLmFyZ3NbMF0sdCkuX2VuY29kZShyLGUpfSxzKSl9ZWxzZSBudWxsIT09bi51c2U/bz10aGlzLl9nZXRVc2Uobi51c2UscikuX2VuY29kZSh0LGUpOihhPXRoaXMuX2VuY29kZVByaW1pdGl2ZShuLnRhZyx0KSxmPSEwKTt2YXIgbztpZighbi5hbnkmJm51bGw9PT1uLmNob2ljZSl7dmFyIHU9bnVsbCE9PW4uaW1wbGljaXQ/bi5pbXBsaWNpdDpuLnRhZyxoPW51bGw9PT1uLmltcGxpY2l0P1widW5pdmVyc2FsXCI6XCJjb250ZXh0XCI7bnVsbD09PXU/bnVsbD09PW4udXNlJiZlLmVycm9yKFwiVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpXCIpOm51bGw9PT1uLnVzZSYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHUsZixoLGEpKX1yZXR1cm4gbnVsbCE9PW4uZXhwbGljaXQmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuLmV4cGxpY2l0LCExLFwiY29udGV4dFwiLG8pKSxvfSxuLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbdC50eXBlXTtyZXR1cm4gbnx8ZighMSx0LnR5cGUrXCIgbm90IGZvdW5kIGluIFwiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHIuY2hvaWNlKSkpLG4uX2VuY29kZSh0LnZhbHVlLGUpfSxuLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KHQpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoZSx0KTtpZihcIm9iamlkXCI9PT10JiZyLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsci5yZXZlcnNlQXJnc1swXSxyLmFyZ3NbMV0pO2lmKFwib2JqaWRcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsbnVsbCxudWxsKTtpZihcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShlLHQpO2lmKFwibnVsbF9cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZihcImludFwiPT09dHx8XCJlbnVtXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVJbnQoZSxyLmFyZ3MmJnIucmV2ZXJzZUFyZ3NbMF0pO2lmKFwiYm9vbFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChlKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bMC05IF0qJC8udGVzdCh0KX0sbi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6dHx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5yZXRocm93KGUpfXZhciBvPXIoMik7ZS5SZXBvcnRlcj1uLG4ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfSxuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOnQub2JqLHBhdGhMZW46dC5wYXRoLmxlbmd0aH19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLm9iaj10Lm9iaixlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC5wYXRoTGVuKX0sbi5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHQpfSxuLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5wYXRoPWUucGF0aC5zbGljZSgwLHQtMSl9LG4ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh0KSxudWxsIT09bi5vYmomJihuLm9ialtlXT1yKX0sbi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbihcIi9cIil9LG4ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj17fSxlfSxuLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlLHI9ZS5vYmo7cmV0dXJuIGUub2JqPXQscn0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9yZXBvcnRlclN0YXRlLG49dCBpbnN0YW5jZW9mIGk7aWYoZT1uP3Q6bmV3IGkoci5wYXRoLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIitKU09OLnN0cmluZ2lmeSh0KStcIl1cIn0pLmpvaW4oXCJcIiksdC5tZXNzYWdlfHx0LHQuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyBlO3JldHVybiBufHxyLmVycm9ycy5wdXNoKGUpLGV9LG4ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gZS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IodCk/bnVsbDp0LGVycm9yczplLmVycm9yc306dH0sbyhpLEVycm9yKSxpLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHQpe2lmKHRoaXMubWVzc2FnZT10K1wiIGF0OiBcIisodGhpcy5wYXRofHxcIihzaGFsbG93KVwiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxpKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2godCl7dGhpcy5zdGFjaz10LnN0YWNrfXJldHVybiB0aGlzfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjE1KTtlLnRhZ0NsYXNzPXswOlwidW5pdmVyc2FsXCIsMTpcImFwcGxpY2F0aW9uXCIsMjpcImNvbnRleHRcIiwzOlwicHJpdmF0ZVwifSxlLnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UoZS50YWdDbGFzcyksZS50YWc9ezA6XCJlbmRcIiwxOlwiYm9vbFwiLDI6XCJpbnRcIiwzOlwiYml0c3RyXCIsNDpcIm9jdHN0clwiLDU6XCJudWxsX1wiLDY6XCJvYmppZFwiLDc6XCJvYmpEZXNjXCIsODpcImV4dGVybmFsXCIsOTpcInJlYWxcIiwxMDpcImVudW1cIiwxMTpcImVtYmVkXCIsMTI6XCJ1dGY4c3RyXCIsMTM6XCJyZWxhdGl2ZU9pZFwiLDE2Olwic2VxXCIsMTc6XCJzZXRcIiwxODpcIm51bXN0clwiLDE5OlwicHJpbnRzdHJcIiwyMDpcInQ2MXN0clwiLFxuMjE6XCJ2aWRlb3N0clwiLDIyOlwiaWE1c3RyXCIsMjM6XCJ1dGN0aW1lXCIsMjQ6XCJnZW50aW1lXCIsMjU6XCJncmFwaHN0clwiLDI2OlwiaXNvNjQ2c3RyXCIsMjc6XCJnZW5zdHJcIiwyODpcInVuaXN0clwiLDI5OlwiY2hhcnN0clwiLDMwOlwiYm1wc3RyXCJ9LGUudGFnQnlOYW1lPW4uX3JldmVyc2UoZS50YWcpfSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIxNiksbi5wZW09cig1MzUpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXthLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDEpLkJ1ZmZlcixhPXIoMjE2KTtpKG4sYSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZGVjb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPXQudG9TdHJpbmcoKS5zcGxpdCgvW1xcclxcbl0rL2cpLG49ZS5sYWJlbC50b1VwcGVyQ2FzZSgpLGk9L14tLS0tLShCRUdJTnxFTkQpIChbXi1dKyktLS0tLSQvLGY9LTEscz0tMSx1PTA7dTxyLmxlbmd0aDt1Kyspe3ZhciBoPXJbdV0ubWF0Y2goaSk7aWYobnVsbCE9PWgmJmhbMl09PT1uKXtpZihmIT09LTEpe2lmKFwiRU5EXCIhPT1oWzFdKWJyZWFrO3M9dTticmVha31pZihcIkJFR0lOXCIhPT1oWzFdKWJyZWFrO2Y9dX19aWYoZj09PS0xfHxzPT09LTEpdGhyb3cgbmV3IEVycm9yKFwiUEVNIHNlY3Rpb24gbm90IGZvdW5kIGZvcjogXCIrbik7dmFyIGM9ci5zbGljZShmKzEscykuam9pbihcIlwiKTtjLnJlcGxhY2UoL1teYS16MC05XFwrXFwvPV0rL2dpLFwiXCIpO3ZhciBkPW5ldyBvKGMsXCJiYXNlNjRcIik7cmV0dXJuIGEucHJvdG90eXBlLmRlY29kZS5jYWxsKHRoaXMsZCxlKX19LGZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1lO24uZGVyPXIoMjE3KSxuLnBlbT1yKDUzNyl9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe28uY2FsbCh0aGlzLHQpLHRoaXMuZW5jPVwicGVtXCJ9dmFyIGk9cigyKSxvPXIoMjE3KTtpKG4sbyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciByPW8ucHJvdG90eXBlLmVuY29kZS5jYWxsKHRoaXMsdCksbj1yLnRvU3RyaW5nKFwiYmFzZTY0XCIpLGk9W1wiLS0tLS1CRUdJTiBcIitlLmxhYmVsK1wiLS0tLS1cIl0sYT0wO2E8bi5sZW5ndGg7YSs9NjQpaS5wdXNoKG4uc2xpY2UoYSxhKzY0KSk7cmV0dXJuIGkucHVzaChcIi0tLS0tRU5EIFwiK2UubGFiZWwrXCItLS0tLVwiKSxpLmpvaW4oXCJcXG5cIil9fSxmdW5jdGlvbih0LGUpe2Z1bmN0aW9uIHIodCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfXQuZXhwb3J0cz1yLHIuZXF1YWw9ZnVuY3Rpb24odCxlLHIpe2lmKHQhPWUpdGhyb3cgbmV3IEVycm9yKHJ8fFwiQXNzZXJ0aW9uIGZhaWxlZDogXCIrdCtcIiAhPSBcIitlKX19LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyh1LmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fbGFzdD12b2lkIDAsdGhpcy5fY2lwaGVyPW5ldyBzLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8odCl7Zm9yKHZhciBlPXRbMTVdLHI9LTE7KytyPGU7KWlmKHRbcisoMTYtZSldIT09ZSl0aHJvdyBuZXcgRXJyb3IoXCJ1bmFibGUgdG8gZGVjcnlwdCBkYXRhXCIpO2lmKDE2IT09ZSlyZXR1cm4gdC5zbGljZSgwLDE2LWUpfWZ1bmN0aW9uIGEoZSxyLGkpe3ZhciBvPWNbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChiW28ubW9kZV0scixpLCEwKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChiW28ubW9kZV0scixpLCEwKTpuZXcgbihiW28ubW9kZV0scixpKX1mdW5jdGlvbiBmKHQsZSl7dmFyIHI9Y1t0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49cChlLCExLHIua2V5LHIuaXYpO3JldHVybiBhKHQsbi5rZXksbi5pdil9dmFyIHM9cigxMDEpLHU9cigxMDMpLGg9cigyKSxjPXIoMTQ3KSxkPXIoMjI2KSxsPXIoMjE4KSxwPXIoMTQ4KTtoKG4sdSksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCh0aGlzLl9hdXRvcGFkZGluZyk7KW49dGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gbyh0aGlzLl9tb2RlLmRlY3J5cHQodGhpcyx0KSk7aWYodCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIG5vdCBtdWx0aXBsZSBvZiBibG9jayBsZW5ndGhcIil9LG4ucHJvdG90eXBlLnNldEF1dG9QYWRkaW5nPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9hdXRvcGFkZGluZz0hIXQsdGhpc30saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKGUpe3RoaXMuY2FjaGU9dC5jb25jYXQoW3RoaXMuY2FjaGUsZV0pfSxpLnByb3RvdHlwZS5nZXQ9ZnVuY3Rpb24odCl7dmFyIGU7aWYodCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGV9ZWxzZSBpZih0aGlzLmNhY2hlLmxlbmd0aD49MTYpcmV0dXJuIGU9dGhpcy5jYWNoZS5zbGljZSgwLDE2KSx0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLGU7cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGgpcmV0dXJuIHRoaXMuY2FjaGV9O3ZhciBiPXtFQ0I6cigyMjQpLENCQzpyKDIyMCksQ0ZCOnIoMjIxKSxDRkI4OnIoMjIzKSxDRkIxOnIoMjIyKSxPRkI6cigyMjUpLENUUjpyKDEwMiksR0NNOnIoMTAyKX07ZS5jcmVhdGVEZWNpcGhlcj1mLGUuY3JlYXRlRGVjaXBoZXJpdj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGUscixvKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KHMuY2FsbCh0aGlzKSx0aGlzLl9jYWNoZT1uZXcgaSx0aGlzLl9jaXBoZXI9bmV3IGYuQUVTKHIpLHRoaXMuX3ByZXY9bmV3IHQoby5sZW5ndGgpLG8uY29weSh0aGlzLl9wcmV2KSx0aGlzLl9tb2RlPWUsdm9pZCh0aGlzLl9hdXRvcGFkZGluZz0hMCkpOm5ldyBuKGUscixvKX1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpP3ZvaWQodGhpcy5jYWNoZT1uZXcgdChcIlwiKSk6bmV3IGl9ZnVuY3Rpb24gbyhlLHIsaSl7dmFyIG89aFtlLnRvTG93ZXJDYXNlKCldO2lmKCFvKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7aWYoXCJzdHJpbmdcIj09dHlwZW9mIGkmJihpPW5ldyB0KGkpKSxcInN0cmluZ1wiPT10eXBlb2YgciYmKHI9bmV3IHQocikpLHIubGVuZ3RoIT09by5rZXkvOCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBrZXkgbGVuZ3RoIFwiK3IubGVuZ3RoKTtpZihpLmxlbmd0aCE9PW8uaXYpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgaXYgbGVuZ3RoIFwiK2kubGVuZ3RoKTtyZXR1cm5cInN0cmVhbVwiPT09by50eXBlP25ldyBkKHBbby5tb2RlXSxyLGkpOlwiYXV0aFwiPT09by50eXBlP25ldyBsKHBbby5tb2RlXSxyLGkpOm5ldyBuKHBbby5tb2RlXSxyLGkpfWZ1bmN0aW9uIGEodCxlKXt2YXIgcj1oW3QudG9Mb3dlckNhc2UoKV07aWYoIXIpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTt2YXIgbj1jKGUsITEsci5rZXksci5pdik7cmV0dXJuIG8odCxuLmtleSxuLml2KX12YXIgZj1yKDEwMSkscz1yKDEwMyksdT1yKDIpLGg9cigxNDcpLGM9cigxNDgpLGQ9cigyMjYpLGw9cigyMTgpO3UobixzKSxuLnByb3RvdHlwZS5fdXBkYXRlPWZ1bmN0aW9uKGUpe3RoaXMuX2NhY2hlLmFkZChlKTtmb3IodmFyIHIsbixpPVtdO3I9dGhpcy5fY2FjaGUuZ2V0KCk7KW49dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsciksaS5wdXNoKG4pO3JldHVybiB0LmNvbmNhdChpKX0sbi5wcm90b3R5cGUuX2ZpbmFsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fY2FjaGUuZmx1c2goKTtpZih0aGlzLl9hdXRvcGFkZGluZylyZXR1cm4gdD10aGlzLl9tb2RlLmVuY3J5cHQodGhpcyx0KSx0aGlzLl9jaXBoZXIuc2NydWIoKSx0O2lmKFwiMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTBcIiE9PXQudG9TdHJpbmcoXCJoZXhcIikpdGhyb3cgdGhpcy5fY2lwaGVyLnNjcnViKCksbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKCl7aWYodGhpcy5jYWNoZS5sZW5ndGg+MTUpe3ZhciB0PXRoaXMuY2FjaGUuc2xpY2UoMCwxNik7cmV0dXJuIHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdH1yZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZmx1c2g9ZnVuY3Rpb24oKXtmb3IodmFyIGU9MTYtdGhpcy5jYWNoZS5sZW5ndGgscj1uZXcgdChlKSxuPS0xOysrbjxlOylyLndyaXRlVUludDgoZSxuKTt2YXIgaT10LmNvbmNhdChbdGhpcy5jYWNoZSxyXSk7cmV0dXJuIGl9O3ZhciBwPXtFQ0I6cigyMjQpLENCQzpyKDIyMCksQ0ZCOnIoMjIxKSxDRkI4OnIoMjIzKSxDRkIxOnIoMjIyKSxPRkI6cigyMjUpLENUUjpyKDEwMiksR0NNOnIoMTAyKX07ZS5jcmVhdGVDaXBoZXJpdj1vLGUuY3JlYXRlQ2lwaGVyPWF9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCl7dGhpcy5oPXQsdGhpcy5zdGF0ZT1uZXcgZSgxNiksdGhpcy5zdGF0ZS5maWxsKDApLHRoaXMuY2FjaGU9bmV3IGUoXCJcIil9ZnVuY3Rpb24gbih0KXtyZXR1cm5bdC5yZWFkVUludDMyQkUoMCksdC5yZWFkVUludDMyQkUoNCksdC5yZWFkVUludDMyQkUoOCksdC5yZWFkVUludDMyQkUoMTIpXX1mdW5jdGlvbiBpKHQpe3Q9dC5tYXAobyk7dmFyIHI9bmV3IGUoMTYpO3JldHVybiByLndyaXRlVUludDMyQkUodFswXSwwKSxyLndyaXRlVUludDMyQkUodFsxXSw0KSxyLndyaXRlVUludDMyQkUodFsyXSw4KSxyLndyaXRlVUludDMyQkUodFszXSwxMikscn1mdW5jdGlvbiBvKHQpe3ZhciBlLHI7cmV0dXJuIGU9dD5zfHx0PDA/KHI9TWF0aC5hYnModCklcyx0PDA/cy1yOnIpOnR9ZnVuY3Rpb24gYSh0LGUpe3JldHVyblt0WzBdXmVbMF0sdFsxXV5lWzFdLHRbMl1eZVsyXSx0WzNdXmVbM11dfXZhciBmPW5ldyBlKDE2KTtmLmZpbGwoMCksdC5leHBvcnRzPXIsci5wcm90b3R5cGUuZ2hhc2g9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPS0xOysrZTx0Lmxlbmd0aDspdGhpcy5zdGF0ZVtlXV49dFtlXTt0aGlzLl9tdWx0aXBseSgpfSxyLnByb3RvdHlwZS5fbXVsdGlwbHk9ZnVuY3Rpb24oKXtmb3IodmFyIHQsZSxyLG89bih0aGlzLmgpLGY9WzAsMCwwLDBdLHM9LTE7KytzPDEyODspe2ZvcihlPTAhPT0odGhpcy5zdGF0ZVt+fihzLzgpXSYxPDw3LXMlOCksZSYmKGY9YShmLG8pKSxyPTAhPT0oMSZvWzNdKSx0PTM7dD4wO3QtLSlvW3RdPW9bdF0+Pj4xfCgxJm9bdC0xXSk8PDMxO29bMF09b1swXT4+PjEsciYmKG9bMF09b1swXV4yMjU8PDI0KX10aGlzLnN0YXRlPWkoZil9LHIucHJvdG90eXBlLnVwZGF0ZT1mdW5jdGlvbih0KXt0aGlzLmNhY2hlPWUuY29uY2F0KFt0aGlzLmNhY2hlLHRdKTtmb3IodmFyIHI7dGhpcy5jYWNoZS5sZW5ndGg+PTE2OylyPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSx0aGlzLmdoYXNoKHIpfSxyLnByb3RvdHlwZS5maW5hbD1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLmNhY2hlLmxlbmd0aCYmdGhpcy5naGFzaChlLmNvbmNhdChbdGhpcy5jYWNoZSxmXSwxNikpLHRoaXMuZ2hhc2goaShbMCx0LDAscl0pKSx0aGlzLnN0YXRlfTt2YXIgcz1NYXRoLnBvdygyLDMyKX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LGUscixuKXt2YXIgYT12KGUpO2lmKGEuY3VydmUpe2lmKFwiZWNkc2FcIiE9PW4pdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHJpdmF0ZSBrZXkgdHlwZVwiKTtyZXR1cm4gaSh0LGEpfWlmKFwiZHNhXCI9PT1hLnR5cGUpe2lmKFwiZHNhXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7cmV0dXJuIG8odCxhLHIpfWlmKFwicnNhXCIhPT1uKXRocm93IG5ldyBFcnJvcihcIndyb25nIHByaXZhdGUga2V5IHR5cGVcIik7Zm9yKHZhciBmPWEubW9kdWx1cy5ieXRlTGVuZ3RoKCkscz1bMCwxXTt0Lmxlbmd0aCtzLmxlbmd0aCsxPGY7KXMucHVzaCgyNTUpO3MucHVzaCgwKTtmb3IodmFyIHU9LTE7Kyt1PHQubGVuZ3RoOylzLnB1c2godFt1XSk7dmFyIGg9bChzLGEpO3JldHVybiBofWZ1bmN0aW9uIGkodCxyKXt2YXIgbj1wW3IuY3VydmUuam9pbihcIi5cIildO2lmKCFuKXRocm93IG5ldyBFcnJvcihcInVua25vd24gY3VydmUgXCIrci5jdXJ2ZS5qb2luKFwiLlwiKSk7dmFyIGk9bmV3IG0obiksbz1pLmdlbktleVBhaXIoKTtvLl9pbXBvcnRQcml2YXRlKHIucHJpdmF0ZUtleSk7dmFyIGE9by5zaWduKHQpO3JldHVybiBuZXcgZShhLnRvREVSKCkpfWZ1bmN0aW9uIG8odCxlLHIpe2Zvcih2YXIgbixpPWUucGFyYW1zLnByaXZfa2V5LG89ZS5wYXJhbXMucCx1PWUucGFyYW1zLnEsZD1lLnBhcmFtcy5nLGw9bmV3IHkoMCkscD1zKHQsdSkubW9kKHUpLGI9ITEsdj1mKGksdSx0LHIpO2I9PT0hMTspbj1oKHUsdixyKSxsPWMoZCxuLG8sdSksYj1uLmludm0odSkuaW11bChwLmFkZChpLm11bChsKSkpLm1vZCh1KSxiLmNtcG4oMCl8fChiPSExLGw9bmV3IHkoMCkpO3JldHVybiBhKGwsYil9ZnVuY3Rpb24gYSh0LHIpe3Q9dC50b0FycmF5KCkscj1yLnRvQXJyYXkoKSwxMjgmdFswXSYmKHQ9WzBdLmNvbmNhdCh0KSksMTI4JnJbMF0mJihyPVswXS5jb25jYXQocikpO3ZhciBuPXQubGVuZ3RoK3IubGVuZ3RoKzQsaT1bNDgsbiwyLHQubGVuZ3RoXTtyZXR1cm4gaT1pLmNvbmNhdCh0LFsyLHIubGVuZ3RoXSxyKSxuZXcgZShpKX1mdW5jdGlvbiBmKHQscixuLGkpe2lmKHQ9bmV3IGUodC50b0FycmF5KCkpLHQubGVuZ3RoPHIuYnl0ZUxlbmd0aCgpKXt2YXIgbz1uZXcgZShyLmJ5dGVMZW5ndGgoKS10Lmxlbmd0aCk7by5maWxsKDApLHQ9ZS5jb25jYXQoW28sdF0pfXZhciBhPW4ubGVuZ3RoLGY9dShuLHIpLHM9bmV3IGUoYSk7cy5maWxsKDEpO3ZhciBoPW5ldyBlKGEpO3JldHVybiBoLmZpbGwoMCksaD1kKGksaCkudXBkYXRlKHMpLnVwZGF0ZShuZXcgZShbMF0pKS51cGRhdGUodCkudXBkYXRlKGYpLmRpZ2VzdCgpLHM9ZChpLGgpLnVwZGF0ZShzKS5kaWdlc3QoKSxoPWQoaSxoKS51cGRhdGUocykudXBkYXRlKG5ldyBlKFsxXSkpLnVwZGF0ZSh0KS51cGRhdGUoZikuZGlnZXN0KCkscz1kKGksaCkudXBkYXRlKHMpLmRpZ2VzdCgpLHtrOmgsdjpzfX1mdW5jdGlvbiBzKHQsZSl7dmFyIHI9bmV3IHkodCksbj0odC5sZW5ndGg8PDMpLWUuYml0TGVuZ3RoKCk7cmV0dXJuIG4+MCYmci5pc2hybihuKSxyfWZ1bmN0aW9uIHUodCxyKXt0PXModCxyKSx0PXQubW9kKHIpO3ZhciBuPW5ldyBlKHQudG9BcnJheSgpKTtpZihuLmxlbmd0aDxyLmJ5dGVMZW5ndGgoKSl7dmFyIGk9bmV3IGUoci5ieXRlTGVuZ3RoKCktbi5sZW5ndGgpO2kuZmlsbCgwKSxuPWUuY29uY2F0KFtpLG5dKX1yZXR1cm4gbn1mdW5jdGlvbiBoKHQscixuKXt2YXIgaSxvO2Rve2ZvcihpPW5ldyBlKFwiXCIpOzgqaS5sZW5ndGg8dC5iaXRMZW5ndGgoKTspci52PWQobixyLmspLnVwZGF0ZShyLnYpLmRpZ2VzdCgpLGk9ZS5jb25jYXQoW2ksci52XSk7bz1zKGksdCksci5rPWQobixyLmspLnVwZGF0ZShyLnYpLnVwZGF0ZShuZXcgZShbMF0pKS5kaWdlc3QoKSxyLnY9ZChuLHIuaykudXBkYXRlKHIudikuZGlnZXN0KCl9d2hpbGUoby5jbXAodCkhPT0tMSk7cmV0dXJuIG99ZnVuY3Rpb24gYyh0LGUscixuKXtyZXR1cm4gdC50b1JlZCh5Lm1vbnQocikpLnJlZFBvdyhlKS5mcm9tUmVkKCkubW9kKG4pfXZhciBkPXIoMTQ5KSxsPXIoNTA3KSxwPXIoMjEyKSxiPXIoMTkpLHY9cigyMTMpLHk9cigxOCksbT1iLmVjO3QuZXhwb3J0cz1uLHQuZXhwb3J0cy5nZXRLZXk9Zix0LmV4cG9ydHMubWFrZUtleT1ofSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQscixuLGEpe3ZhciBmPXUobik7aWYoXCJlY1wiPT09Zi50eXBlKXtpZihcImVjZHNhXCIhPT1hKXRocm93IG5ldyBFcnJvcihcIndyb25nIHB1YmxpYyBrZXkgdHlwZVwiKTtyZXR1cm4gaSh0LHIsZil9aWYoXCJkc2FcIj09PWYudHlwZSl7aWYoXCJkc2FcIiE9PWEpdGhyb3cgbmV3IEVycm9yKFwid3JvbmcgcHVibGljIGtleSB0eXBlXCIpO3JldHVybiBvKHQscixmKX1pZihcInJzYVwiIT09YSl0aHJvdyBuZXcgRXJyb3IoXCJ3cm9uZyBwdWJsaWMga2V5IHR5cGVcIik7Zm9yKHZhciBzPWYubW9kdWx1cy5ieXRlTGVuZ3RoKCksYz1bMV0sZD0wO3IubGVuZ3RoK2MubGVuZ3RoKzI8czspYy5wdXNoKDI1NSksZCsrO2MucHVzaCgwKTtmb3IodmFyIGw9LTE7KytsPHIubGVuZ3RoOyljLnB1c2gocltsXSk7Yz1uZXcgZShjKTt2YXIgcD1oLm1vbnQoZi5tb2R1bHVzKTt0PW5ldyBoKHQpLnRvUmVkKHApLHQ9dC5yZWRQb3cobmV3IGgoZi5wdWJsaWNFeHBvbmVudCkpLHQ9bmV3IGUodC5mcm9tUmVkKCkudG9BcnJheSgpKTt2YXIgYj0wO2ZvcihkPDgmJihiPTEpLHM9TWF0aC5taW4odC5sZW5ndGgsYy5sZW5ndGgpLHQubGVuZ3RoIT09Yy5sZW5ndGgmJihiPTEpLGw9LTE7KytsPHM7KWJ8PXRbbF1eY1tsXTtyZXR1cm4gMD09PWJ9ZnVuY3Rpb24gaSh0LGUscil7dmFyIG49ZltyLmRhdGEuYWxnb3JpdGhtLmN1cnZlLmpvaW4oXCIuXCIpXTtpZighbil0aHJvdyBuZXcgRXJyb3IoXCJ1bmtub3duIGN1cnZlIFwiK3IuZGF0YS5hbGdvcml0aG0uY3VydmUuam9pbihcIi5cIikpO3ZhciBpPW5ldyBjKG4pLG89ci5kYXRhLnN1YmplY3RQcml2YXRlS2V5LmRhdGE7cmV0dXJuIGkudmVyaWZ5KGUsdCxvKX1mdW5jdGlvbiBvKHQsZSxyKXt2YXIgbj1yLmRhdGEucCxpPXIuZGF0YS5xLG89ci5kYXRhLmcsZj1yLmRhdGEucHViX2tleSxzPXUuc2lnbmF0dXJlLmRlY29kZSh0LFwiZGVyXCIpLGM9cy5zLGQ9cy5yO2EoYyxpKSxhKGQsaSk7dmFyIGw9aC5tb250KG4pLHA9Yy5pbnZtKGkpLGI9by50b1JlZChsKS5yZWRQb3cobmV3IGgoZSkubXVsKHApLm1vZChpKSkuZnJvbVJlZCgpLm11bChmLnRvUmVkKGwpLnJlZFBvdyhkLm11bChwKS5tb2QoaSkpLmZyb21SZWQoKSkubW9kKG4pLm1vZChpKTtyZXR1cm4hYi5jbXAoZCl9ZnVuY3Rpb24gYSh0LGUpe2lmKHQuY21wbigwKTw9MCl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKTtpZih0LmNtcChlKT49ZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHNpZ1wiKX12YXIgZj1yKDIxMikscz1yKDE5KSx1PXIoMjEzKSxoPXIoMTgpLGM9cy5lYzt0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0KXt0aGlzLmN1cnZlVHlwZT1mW3RdLHRoaXMuY3VydmVUeXBlfHwodGhpcy5jdXJ2ZVR5cGU9e25hbWU6dH0pLHRoaXMuY3VydmU9bmV3IG8uZWModGhpcy5jdXJ2ZVR5cGUubmFtZSksdGhpcy5rZXlzPXZvaWQgMH1mdW5jdGlvbiBpKHQscixuKXtBcnJheS5pc0FycmF5KHQpfHwodD10LnRvQXJyYXkoKSk7dmFyIGk9bmV3IGUodCk7aWYobiYmaS5sZW5ndGg8bil7dmFyIG89bmV3IGUobi1pLmxlbmd0aCk7by5maWxsKDApLGk9ZS5jb25jYXQoW28saV0pfXJldHVybiByP2kudG9TdHJpbmcocik6aX12YXIgbz1yKDIyKSxhPXIoMzApO3QuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IG4odCl9O3ZhciBmPXtzZWNwMjU2azE6e25hbWU6XCJzZWNwMjU2azFcIixieXRlTGVuZ3RoOjMyfSxzZWNwMjI0cjE6e25hbWU6XCJwMjI0XCIsYnl0ZUxlbmd0aDoyOH0scHJpbWUyNTZ2MTp7bmFtZTpcInAyNTZcIixieXRlTGVuZ3RoOjMyfSxwcmltZTE5MnYxOntuYW1lOlwicDE5MlwiLGJ5dGVMZW5ndGg6MjR9LGVkMjU1MTk6e25hbWU6XCJlZDI1NTE5XCIsYnl0ZUxlbmd0aDozMn0sc2VjcDM4NHIxOntuYW1lOlwicDM4NFwiLGJ5dGVMZW5ndGg6NDh9LHNlY3A1MjFyMTp7bmFtZTpcInA1MjFcIixieXRlTGVuZ3RoOjY2fX07Zi5wMjI0PWYuc2VjcDIyNHIxLGYucDI1Nj1mLnNlY3AyNTZyMT1mLnByaW1lMjU2djEsZi5wMTkyPWYuc2VjcDE5MnIxPWYucHJpbWUxOTJ2MSxmLnAzODQ9Zi5zZWNwMzg0cjEsZi5wNTIxPWYuc2VjcDUyMXIxLG4ucHJvdG90eXBlLmdlbmVyYXRlS2V5cz1mdW5jdGlvbih0LGUpe3JldHVybiB0aGlzLmtleXM9dGhpcy5jdXJ2ZS5nZW5LZXlQYWlyKCksdGhpcy5nZXRQdWJsaWNLZXkodCxlKX0sbi5wcm90b3R5cGUuY29tcHV0ZVNlY3JldD1mdW5jdGlvbih0LHIsbil7cj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKTt2YXIgbz10aGlzLmN1cnZlLmtleUZyb21QdWJsaWModCkuZ2V0UHVibGljKCksYT1vLm11bCh0aGlzLmtleXMuZ2V0UHJpdmF0ZSgpKS5nZXRYKCk7cmV0dXJuIGkoYSxuLHRoaXMuY3VydmVUeXBlLmJ5dGVMZW5ndGgpfSxuLnByb3RvdHlwZS5nZXRQdWJsaWNLZXk9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLmtleXMuZ2V0UHVibGljKFwiY29tcHJlc3NlZFwiPT09ZSwhMCk7cmV0dXJuXCJoeWJyaWRcIj09PWUmJihyW3IubGVuZ3RoLTFdJTI/clswXT03OnJbMF09NiksaShyLHQpfSxuLnByb3RvdHlwZS5nZXRQcml2YXRlS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBpKHRoaXMua2V5cy5nZXRQcml2YXRlKCksdCl9LG4ucHJvdG90eXBlLnNldFB1YmxpY0tleT1mdW5jdGlvbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMua2V5cy5faW1wb3J0UHVibGljKHQpLHRoaXN9LG4ucHJvdG90eXBlLnNldFByaXZhdGVLZXk9ZnVuY3Rpb24odCxyKXtyPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpO3ZhciBuPW5ldyBhKHQpO3JldHVybiBuPW4udG9TdHJpbmcoMTYpLHRoaXMua2V5cy5faW1wb3J0UHJpdmF0ZShuKSx0aGlzfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy50eXBlPXQsdGhpcy5wPW5ldyBvKGUucCwxNiksdGhpcy5yZWQ9ZS5wcmltZT9vLnJlZChlLnByaW1lKTpvLm1vbnQodGhpcy5wKSx0aGlzLnplcm89bmV3IG8oMCkudG9SZWQodGhpcy5yZWQpLHRoaXMub25lPW5ldyBvKDEpLnRvUmVkKHRoaXMucmVkKSx0aGlzLnR3bz1uZXcgbygyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5uPWUubiYmbmV3IG8oZS5uLDE2KSx0aGlzLmc9ZS5nJiZ0aGlzLnBvaW50RnJvbUpTT04oZS5nLGUuZ1JlZCksdGhpcy5fd25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl93bmFmVDI9bmV3IEFycmF5KDQpLHRoaXMuX3duYWZUMz1uZXcgQXJyYXkoNCksdGhpcy5fd25hZlQ0PW5ldyBBcnJheSg0KTt2YXIgcj10aGlzLm4mJnRoaXMucC5kaXYodGhpcy5uKTshcnx8ci5jbXBuKDEwMCk+MD90aGlzLnJlZE49bnVsbDoodGhpcy5fbWF4d2VsbFRyaWNrPSEwLHRoaXMucmVkTj10aGlzLm4udG9SZWQodGhpcy5yZWQpKX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5jdXJ2ZT10LHRoaXMudHlwZT1lLHRoaXMucHJlY29tcHV0ZWQ9bnVsbH12YXIgbz1yKDMwKSxhPXIoMjIpLGY9YS51dGlscyxzPWYuZ2V0TkFGLHU9Zi5nZXRKU0YsaD1mLmFzc2VydDt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5wb2ludD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZFwiKX0sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LG4ucHJvdG90eXBlLl9maXhlZE5hZk11bD1mdW5jdGlvbih0LGUpe2godC5wcmVjb21wdXRlZCk7dmFyIHI9dC5fZ2V0RG91YmxlcygpLG49cyhlLDEpLGk9KDE8PHIuc3RlcCsxKS0oci5zdGVwJTI9PT0wPzI6MSk7aS89Mztmb3IodmFyIG89W10sYT0wO2E8bi5sZW5ndGg7YSs9ci5zdGVwKXtmb3IodmFyIGY9MCxlPWErci5zdGVwLTE7ZT49YTtlLS0pZj0oZjw8MSkrbltlXTtvLnB1c2goZil9Zm9yKHZhciB1PXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxjPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxkPWk7ZD4wO2QtLSl7Zm9yKHZhciBhPTA7YTxvLmxlbmd0aDthKyspe3ZhciBmPW9bYV07Zj09PWQ/Yz1jLm1peGVkQWRkKHIucG9pbnRzW2FdKTpmPT09LWQmJihjPWMubWl4ZWRBZGQoci5wb2ludHNbYV0ubmVnKCkpKX11PXUuYWRkKGMpfXJldHVybiB1LnRvUCgpfSxuLnByb3RvdHlwZS5fd25hZk11bD1mdW5jdGlvbih0LGUpe3ZhciByPTQsbj10Ll9nZXROQUZQb2ludHMocik7cj1uLnduZDtmb3IodmFyIGk9bi5wb2ludHMsbz1zKGUsciksYT10aGlzLmpwb2ludChudWxsLG51bGwsbnVsbCksZj1vLmxlbmd0aC0xO2Y+PTA7Zi0tKXtmb3IodmFyIGU9MDtmPj0wJiYwPT09b1tmXTtmLS0pZSsrO2lmKGY+PTAmJmUrKyxhPWEuZGJscChlKSxmPDApYnJlYWs7dmFyIHU9b1tmXTtoKDAhPT11KSxhPVwiYWZmaW5lXCI9PT10LnR5cGU/dT4wP2EubWl4ZWRBZGQoaVt1LTE+PjFdKTphLm1peGVkQWRkKGlbLXUtMT4+MV0ubmVnKCkpOnU+MD9hLmFkZChpW3UtMT4+MV0pOmEuYWRkKGlbLXUtMT4+MV0ubmVnKCkpfXJldHVyblwiYWZmaW5lXCI9PT10LnR5cGU/YS50b1AoKTphfSxuLnByb3RvdHlwZS5fd25hZk11bEFkZD1mdW5jdGlvbih0LGUscixuLGkpe2Zvcih2YXIgbz10aGlzLl93bmFmVDEsYT10aGlzLl93bmFmVDIsZj10aGlzLl93bmFmVDMsaD0wLGM9MDtjPG47YysrKXt2YXIgZD1lW2NdLGw9ZC5fZ2V0TkFGUG9pbnRzKHQpO29bY109bC53bmQsYVtjXT1sLnBvaW50c31mb3IodmFyIGM9bi0xO2M+PTE7Yy09Mil7dmFyIHA9Yy0xLGI9YztpZigxPT09b1twXSYmMT09PW9bYl0pe3ZhciB2PVtlW3BdLG51bGwsbnVsbCxlW2JdXTswPT09ZVtwXS55LmNtcChlW2JdLnkpPyh2WzFdPWVbcF0uYWRkKGVbYl0pLHZbMl09ZVtwXS50b0ooKS5taXhlZEFkZChlW2JdLm5lZygpKSk6MD09PWVbcF0ueS5jbXAoZVtiXS55LnJlZE5lZygpKT8odlsxXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0pLHZbMl09ZVtwXS5hZGQoZVtiXS5uZWcoKSkpOih2WzFdPWVbcF0udG9KKCkubWl4ZWRBZGQoZVtiXSksdlsyXT1lW3BdLnRvSigpLm1peGVkQWRkKGVbYl0ubmVnKCkpKTt2YXIgeT1bLTMsLTEsLTUsLTcsMCw3LDUsMSwzXSxtPXUocltwXSxyW2JdKTtoPU1hdGgubWF4KG1bMF0ubGVuZ3RoLGgpLGZbcF09bmV3IEFycmF5KGgpLGZbYl09bmV3IEFycmF5KGgpO2Zvcih2YXIgZz0wO2c8aDtnKyspe3ZhciB3PTB8bVswXVtnXSxfPTB8bVsxXVtnXTtmW3BdW2ddPXlbMyoodysxKSsoXysxKV0sZltiXVtnXT0wLGFbcF09dn19ZWxzZSBmW3BdPXMocltwXSxvW3BdKSxmW2JdPXMocltiXSxvW2JdKSxoPU1hdGgubWF4KGZbcF0ubGVuZ3RoLGgpLGg9TWF0aC5tYXgoZltiXS5sZW5ndGgsaCl9Zm9yKHZhciBNPXRoaXMuanBvaW50KG51bGwsbnVsbCxudWxsKSxTPXRoaXMuX3duYWZUNCxjPWg7Yz49MDtjLS0pe2Zvcih2YXIgRT0wO2M+PTA7KXtmb3IodmFyIEE9ITAsZz0wO2c8bjtnKyspU1tnXT0wfGZbZ11bY10sMCE9PVNbZ10mJihBPSExKTtpZighQSlicmVhaztFKyssYy0tfWlmKGM+PTAmJkUrKyxNPU0uZGJscChFKSxjPDApYnJlYWs7Zm9yKHZhciBnPTA7ZzxuO2crKyl7dmFyIGQsaz1TW2ddOzAhPT1rJiYoaz4wP2Q9YVtnXVtrLTE+PjFdOms8MCYmKGQ9YVtnXVstay0xPj4xXS5uZWcoKSksTT1cImFmZmluZVwiPT09ZC50eXBlP00ubWl4ZWRBZGQoZCk6TS5hZGQoZCkpfX1mb3IodmFyIGM9MDtjPG47YysrKWFbY109bnVsbDtyZXR1cm4gaT9NOk0udG9QKCl9LG4uQmFzZVBvaW50PWksaS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWRcIil9LGkucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUudmFsaWRhdGUodGhpcyl9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7dD1mLnRvQXJyYXkodCxlKTt2YXIgcj10aGlzLnAuYnl0ZUxlbmd0aCgpO2lmKCg0PT09dFswXXx8Nj09PXRbMF18fDc9PT10WzBdKSYmdC5sZW5ndGgtMT09PTIqcil7Nj09PXRbMF0/aCh0W3QubGVuZ3RoLTFdJTI9PT0wKTo3PT09dFswXSYmaCh0W3QubGVuZ3RoLTFdJTI9PT0xKTt2YXIgbj10aGlzLnBvaW50KHQuc2xpY2UoMSwxK3IpLHQuc2xpY2UoMStyLDErMipyKSk7cmV0dXJuIG59aWYoKDI9PT10WzBdfHwzPT09dFswXSkmJnQubGVuZ3RoLTE9PT1yKXJldHVybiB0aGlzLnBvaW50RnJvbVgodC5zbGljZSgxLDErciksMz09PXRbMF0pO3Rocm93IG5ldyBFcnJvcihcIlVua25vd24gcG9pbnQgZm9ybWF0XCIpfSxpLnByb3RvdHlwZS5lbmNvZGVDb21wcmVzc2VkPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLmVuY29kZSh0LCEwKX0saS5wcm90b3R5cGUuX2VuY29kZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLmN1cnZlLnAuYnl0ZUxlbmd0aCgpLHI9dGhpcy5nZXRYKCkudG9BcnJheShcImJlXCIsZSk7cmV0dXJuIHQ/W3RoaXMuZ2V0WSgpLmlzRXZlbigpPzI6M10uY29uY2F0KHIpOls0XS5jb25jYXQocix0aGlzLmdldFkoKS50b0FycmF5KFwiYmVcIixlKSl9LGkucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe3JldHVybiBmLmVuY29kZSh0aGlzLl9lbmNvZGUoZSksdCl9LGkucHJvdG90eXBlLnByZWNvbXB1dGU9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZClyZXR1cm4gdGhpczt2YXIgZT17ZG91YmxlczpudWxsLG5hZjpudWxsLGJldGE6bnVsbH07cmV0dXJuIGUubmFmPXRoaXMuX2dldE5BRlBvaW50cyg4KSxlLmRvdWJsZXM9dGhpcy5fZ2V0RG91Ymxlcyg0LHQpLGUuYmV0YT10aGlzLl9nZXRCZXRhKCksdGhpcy5wcmVjb21wdXRlZD1lLHRoaXN9LGkucHJvdG90eXBlLl9oYXNEb3VibGVzPWZ1bmN0aW9uKHQpe2lmKCF0aGlzLnByZWNvbXB1dGVkKXJldHVybiExO3ZhciBlPXRoaXMucHJlY29tcHV0ZWQuZG91YmxlcztyZXR1cm4hIWUmJmUucG9pbnRzLmxlbmd0aD49TWF0aC5jZWlsKCh0LmJpdExlbmd0aCgpKzEpL2Uuc3RlcCl9LGkucHJvdG90eXBlLl9nZXREb3VibGVzPWZ1bmN0aW9uKHQsZSl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5kb3VibGVzKXJldHVybiB0aGlzLnByZWNvbXB1dGVkLmRvdWJsZXM7Zm9yKHZhciByPVt0aGlzXSxuPXRoaXMsaT0wO2k8ZTtpKz10KXtmb3IodmFyIG89MDtvPHQ7bysrKW49bi5kYmwoKTtyLnB1c2gobil9cmV0dXJue3N0ZXA6dCxwb2ludHM6cn19LGkucHJvdG90eXBlLl9nZXROQUZQb2ludHM9ZnVuY3Rpb24odCl7aWYodGhpcy5wcmVjb21wdXRlZCYmdGhpcy5wcmVjb21wdXRlZC5uYWYpcmV0dXJuIHRoaXMucHJlY29tcHV0ZWQubmFmO2Zvcih2YXIgZT1bdGhpc10scj0oMTw8dCktMSxuPTE9PT1yP251bGw6dGhpcy5kYmwoKSxpPTE7aTxyO2krKyllW2ldPWVbaS0xXS5hZGQobik7cmV0dXJue3duZDp0LHBvaW50czplfX0saS5wcm90b3R5cGUuX2dldEJldGE9ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0saS5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcyxyPTA7cjx0O3IrKyllPWUuZGJsKCk7cmV0dXJuIGV9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXt0aGlzLnR3aXN0ZWQ9MSE9PSgwfHQuYSksdGhpcy5tT25lQT10aGlzLnR3aXN0ZWQmJigwfHQuYSk9PT0tMSx0aGlzLmV4dGVuZGVkPXRoaXMubU9uZUEsdS5jYWxsKHRoaXMsXCJlZHdhcmRzXCIsdCksdGhpcy5hPW5ldyBmKHQuYSwxNikudW1vZCh0aGlzLnJlZC5tKSx0aGlzLmE9dGhpcy5hLnRvUmVkKHRoaXMucmVkKSx0aGlzLmM9bmV3IGYodC5jLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5jMj10aGlzLmMucmVkU3FyKCksdGhpcy5kPW5ldyBmKHQuZCwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuZGQ9dGhpcy5kLnJlZEFkZCh0aGlzLmQpLGgoIXRoaXMudHdpc3RlZHx8MD09PXRoaXMuYy5mcm9tUmVkKCkuY21wbigxKSksdGhpcy5vbmVDPTE9PT0oMHx0LmMpfWZ1bmN0aW9uIGkodCxlLHIsbixpKXt1LkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcInByb2plY3RpdmVcIiksbnVsbD09PWUmJm51bGw9PT1yJiZudWxsPT09bj8odGhpcy54PXRoaXMuY3VydmUuemVybyx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXMudD10aGlzLmN1cnZlLnplcm8sdGhpcy56T25lPSEwKToodGhpcy54PW5ldyBmKGUsMTYpLHRoaXMueT1uZXcgZihyLDE2KSx0aGlzLno9bj9uZXcgZihuLDE2KTp0aGlzLmN1cnZlLm9uZSx0aGlzLnQ9aSYmbmV3IGYoaSwxNiksdGhpcy54LnJlZHx8KHRoaXMueD10aGlzLngudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnkucmVkfHwodGhpcy55PXRoaXMueS50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy50JiYhdGhpcy50LnJlZCYmKHRoaXMudD10aGlzLnQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnpPbmU9dGhpcy56PT09dGhpcy5jdXJ2ZS5vbmUsdGhpcy5jdXJ2ZS5leHRlbmRlZCYmIXRoaXMudCYmKHRoaXMudD10aGlzLngucmVkTXVsKHRoaXMueSksdGhpcy56T25lfHwodGhpcy50PXRoaXMudC5yZWRNdWwodGhpcy56LnJlZEludm0oKSkpKSl9dmFyIG89cigxMDQpLGE9cigyMiksZj1yKDMwKSxzPXIoMiksdT1vLmJhc2UsaD1hLnV0aWxzLmFzc2VydDtzKG4sdSksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX211bEE9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMubU9uZUE/dC5yZWROZWcoKTp0aGlzLmEucmVkTXVsKHQpfSxuLnByb3RvdHlwZS5fbXVsQz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5vbmVDP3Q6dGhpcy5jLnJlZE11bCh0KX0sbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiB0aGlzLnBvaW50KHQsZSxyLG4pfSxuLnByb3RvdHlwZS5wb2ludEZyb21YPWZ1bmN0aW9uKHQsZSl7dD1uZXcgZih0LDE2KSx0LnJlZHx8KHQ9dC50b1JlZCh0aGlzLnJlZCkpO3ZhciByPXQucmVkU3FyKCksbj10aGlzLmMyLnJlZFN1Yih0aGlzLmEucmVkTXVsKHIpKSxpPXRoaXMub25lLnJlZFN1Yih0aGlzLmMyLnJlZE11bCh0aGlzLmQpLnJlZE11bChyKSksbz1uLnJlZE11bChpLnJlZEludm0oKSksYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgcz1hLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhc3x8IWUmJnMpJiYoYT1hLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsYSl9LG4ucHJvdG90eXBlLnBvaW50RnJvbVk9ZnVuY3Rpb24odCxlKXt0PW5ldyBmKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKSxuPXIucmVkU3ViKHRoaXMub25lKSxpPXIucmVkTXVsKHRoaXMuZCkucmVkQWRkKHRoaXMub25lKSxvPW4ucmVkTXVsKGkucmVkSW52bSgpKTtpZigwPT09by5jbXAodGhpcy56ZXJvKSl7aWYoZSl0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIHBvaW50XCIpO3JldHVybiB0aGlzLnBvaW50KHRoaXMuemVybyx0KX12YXIgYT1vLnJlZFNxcnQoKTtpZigwIT09YS5yZWRTcXIoKS5yZWRTdWIobykuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTtyZXR1cm4gYS5pc09kZCgpIT09ZSYmKGE9YS5yZWROZWcoKSksdGhpcy5wb2ludChhLHQpfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbih0KXtpZih0LmlzSW5maW5pdHkoKSlyZXR1cm4hMDt0Lm5vcm1hbGl6ZSgpO3ZhciBlPXQueC5yZWRTcXIoKSxyPXQueS5yZWRTcXIoKSxuPWUucmVkTXVsKHRoaXMuYSkucmVkQWRkKHIpLGk9dGhpcy5jMi5yZWRNdWwodGhpcy5vbmUucmVkQWRkKHRoaXMuZC5yZWRNdWwoZSkucmVkTXVsKHIpKSk7cmV0dXJuIDA9PT1uLmNtcChpKX0scyhpLHUuQmFzZVBvaW50KSxuLnByb3RvdHlwZS5wb2ludEZyb21KU09OPWZ1bmN0aW9uKHQpe3JldHVybiBpLmZyb21KU09OKHRoaXMsdCl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyLG4pe3JldHVybiBuZXcgaSh0aGlzLHQsZSxyLG4pfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdLGVbMl0pfSxpLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP1wiPEVDIFBvaW50IEluZmluaXR5PlwiOlwiPEVDIFBvaW50IHg6IFwiK3RoaXMueC5mcm9tUmVkKCkudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnguY21wbigwKSYmMD09PXRoaXMueS5jbXAodGhpcy56KX0saS5wcm90b3R5cGUuX2V4dERibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMueC5yZWRTcXIoKSxlPXRoaXMueS5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKTtyPXIucmVkSUFkZChyKTt2YXIgbj10aGlzLmN1cnZlLl9tdWxBKHQpLGk9dGhpcy54LnJlZEFkZCh0aGlzLnkpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihlKSxvPW4ucmVkQWRkKGUpLGE9by5yZWRTdWIociksZj1uLnJlZFN1YihlKSxzPWkucmVkTXVsKGEpLHU9by5yZWRNdWwoZiksaD1pLnJlZE11bChmKSxjPWEucmVkTXVsKG8pO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSxjLGgpfSxpLnByb3RvdHlwZS5fcHJvakRibD1mdW5jdGlvbigpe3ZhciB0LGUscixuPXRoaXMueC5yZWRBZGQodGhpcy55KS5yZWRTcXIoKSxpPXRoaXMueC5yZWRTcXIoKSxvPXRoaXMueS5yZWRTcXIoKTtpZih0aGlzLmN1cnZlLnR3aXN0ZWQpe3ZhciBhPXRoaXMuY3VydmUuX211bEEoaSksZj1hLnJlZEFkZChvKTtpZih0aGlzLnpPbmUpdD1uLnJlZFN1YihpKS5yZWRTdWIobykucmVkTXVsKGYucmVkU3ViKHRoaXMuY3VydmUudHdvKSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZFNxcigpLnJlZFN1YihmKS5yZWRTdWIoZik7ZWxzZXt2YXIgcz10aGlzLnoucmVkU3FyKCksdT1mLnJlZFN1YihzKS5yZWRJU3ViKHMpO3Q9bi5yZWRTdWIoaSkucmVkSVN1YihvKS5yZWRNdWwodSksZT1mLnJlZE11bChhLnJlZFN1YihvKSkscj1mLnJlZE11bCh1KX19ZWxzZXt2YXIgYT1pLnJlZEFkZChvKSxzPXRoaXMuY3VydmUuX211bEModGhpcy5jLnJlZE11bCh0aGlzLnopKS5yZWRTcXIoKSx1PWEucmVkU3ViKHMpLnJlZFN1YihzKTt0PXRoaXMuY3VydmUuX211bEMobi5yZWRJU3ViKGEpKS5yZWRNdWwodSksZT10aGlzLmN1cnZlLl9tdWxDKGEpLnJlZE11bChpLnJlZElTdWIobykpLHI9YS5yZWRNdWwodSl9cmV0dXJuIHRoaXMuY3VydmUucG9pbnQodCxlLHIpfSxpLnByb3RvdHlwZS5kYmw9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dERibCgpOnRoaXMuX3Byb2pEYmwoKX0saS5wcm90b3R5cGUuX2V4dEFkZD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnkucmVkU3ViKHRoaXMueCkucmVkTXVsKHQueS5yZWRTdWIodC54KSkscj10aGlzLnkucmVkQWRkKHRoaXMueCkucmVkTXVsKHQueS5yZWRBZGQodC54KSksbj10aGlzLnQucmVkTXVsKHRoaXMuY3VydmUuZGQpLnJlZE11bCh0LnQpLGk9dGhpcy56LnJlZE11bCh0LnoucmVkQWRkKHQueikpLG89ci5yZWRTdWIoZSksYT1pLnJlZFN1YihuKSxmPWkucmVkQWRkKG4pLHM9ci5yZWRBZGQoZSksdT1vLnJlZE11bChhKSxoPWYucmVkTXVsKHMpLGM9by5yZWRNdWwocyksZD1hLnJlZE11bChmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludCh1LGgsZCxjKX0saS5wcm90b3R5cGUuX3Byb2pBZGQ9ZnVuY3Rpb24odCl7dmFyIGUscixuPXRoaXMuei5yZWRNdWwodC56KSxpPW4ucmVkU3FyKCksbz10aGlzLngucmVkTXVsKHQueCksYT10aGlzLnkucmVkTXVsKHQueSksZj10aGlzLmN1cnZlLmQucmVkTXVsKG8pLnJlZE11bChhKSxzPWkucmVkU3ViKGYpLHU9aS5yZWRBZGQoZiksaD10aGlzLngucmVkQWRkKHRoaXMueSkucmVkTXVsKHQueC5yZWRBZGQodC55KSkucmVkSVN1YihvKS5yZWRJU3ViKGEpLGM9bi5yZWRNdWwocykucmVkTXVsKGgpO3JldHVybiB0aGlzLmN1cnZlLnR3aXN0ZWQ/KGU9bi5yZWRNdWwodSkucmVkTXVsKGEucmVkU3ViKHRoaXMuY3VydmUuX211bEEobykpKSxyPXMucmVkTXVsKHUpKTooZT1uLnJlZE11bCh1KS5yZWRNdWwoYS5yZWRTdWIobykpLHI9dGhpcy5jdXJ2ZS5fbXVsQyhzKS5yZWRNdWwodSkpLHRoaXMuY3VydmUucG9pbnQoYyxlLHIpfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuaXNJbmZpbml0eSgpP3Q6dC5pc0luZmluaXR5KCk/dGhpczp0aGlzLmN1cnZlLmV4dGVuZGVkP3RoaXMuX2V4dEFkZCh0KTp0aGlzLl9wcm9qQWRkKHQpfSxpLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2hhc0RvdWJsZXModCk/dGhpcy5jdXJ2ZS5fZml4ZWROYWZNdWwodGhpcyx0KTp0aGlzLmN1cnZlLl93bmFmTXVsKHRoaXMsdCl9LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCExKX0saS5wcm90b3R5cGUuam11bEFkZD1mdW5jdGlvbih0LGUscil7cmV0dXJuIHRoaXMuY3VydmUuX3duYWZNdWxBZGQoMSxbdGhpcyxlXSxbdCxyXSwyLCEwKX0saS5wcm90b3R5cGUubm9ybWFsaXplPWZ1bmN0aW9uKCl7aWYodGhpcy56T25lKXJldHVybiB0aGlzO3ZhciB0PXRoaXMuei5yZWRJbnZtKCk7cmV0dXJuIHRoaXMueD10aGlzLngucmVkTXVsKHQpLHRoaXMueT10aGlzLnkucmVkTXVsKHQpLHRoaXMudCYmKHRoaXMudD10aGlzLnQucmVkTXVsKHQpKSx0aGlzLno9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56T25lPSEwLHRoaXN9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHRoaXMueC5yZWROZWcoKSx0aGlzLnksdGhpcy56LHRoaXMudCYmdGhpcy50LnJlZE5lZygpKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vcm1hbGl6ZSgpLHRoaXMueC5mcm9tUmVkKCl9LGkucHJvdG90eXBlLmdldFk9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnkuZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpJiYwPT09dGhpcy5nZXRZKCkuY21wKHQuZ2V0WSgpKX0saS5wcm90b3R5cGUuZXFYVG9QPWZ1bmN0aW9uKHQpe3ZhciBlPXQudG9SZWQodGhpcy5jdXJ2ZS5yZWQpLnJlZE11bCh0aGlzLnopO2lmKDA9PT10aGlzLnguY21wKGUpKXJldHVybiEwO2Zvcih2YXIgcj10LmNsb25lKCksbj10aGlzLmN1cnZlLnJlZE4ucmVkTXVsKHRoaXMueik7Oyl7aWYoci5pYWRkKHRoaXMuY3VydmUubiksci5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihlLnJlZElBZGQobiksMD09PXRoaXMueC5jbXAoZSkpcmV0dXJuITB9cmV0dXJuITF9LGkucHJvdG90eXBlLnRvUD1pLnByb3RvdHlwZS5ub3JtYWxpemUsaS5wcm90b3R5cGUubWl4ZWRBZGQ9aS5wcm90b3R5cGUuYWRkfSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtzLmNhbGwodGhpcyxcIm1vbnRcIix0KSx0aGlzLmE9bmV3IGEodC5hLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy5iPW5ldyBhKHQuYiwxNikudG9SZWQodGhpcy5yZWQpLHRoaXMuaTQ9bmV3IGEoNCkudG9SZWQodGhpcy5yZWQpLnJlZEludm0oKSx0aGlzLnR3bz1uZXcgYSgyKS50b1JlZCh0aGlzLnJlZCksdGhpcy5hMjQ9dGhpcy5pNC5yZWRNdWwodGhpcy5hLnJlZEFkZCh0aGlzLnR3bykpfWZ1bmN0aW9uIGkodCxlLHIpe3MuQmFzZVBvaW50LmNhbGwodGhpcyx0LFwicHJvamVjdGl2ZVwiKSxudWxsPT09ZSYmbnVsbD09PXI/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLno9dGhpcy5jdXJ2ZS56ZXJvKToodGhpcy54PW5ldyBhKGUsMTYpLHRoaXMuej1uZXcgYShyLDE2KSx0aGlzLngucmVkfHwodGhpcy54PXRoaXMueC50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuei5yZWR8fCh0aGlzLno9dGhpcy56LnRvUmVkKHRoaXMuY3VydmUucmVkKSkpfXZhciBvPXIoMTA0KSxhPXIoMzApLGY9cigyKSxzPW8uYmFzZSx1PXIoMjIpLGg9dS51dGlscztmKG4scyksdC5leHBvcnRzPW4sbi5wcm90b3R5cGUudmFsaWRhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dC5ub3JtYWxpemUoKS54LHI9ZS5yZWRTcXIoKSxuPXIucmVkTXVsKGUpLnJlZEFkZChyLnJlZE11bCh0aGlzLmEpKS5yZWRBZGQoZSksaT1uLnJlZFNxcnQoKTtyZXR1cm4gMD09PWkucmVkU3FyKCkuY21wKG4pfSxmKGkscy5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMucG9pbnQoaC50b0FycmF5KHQsZSksMSl9LG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUucG9pbnRGcm9tSlNPTj1mdW5jdGlvbih0KXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQpfSxpLnByb3RvdHlwZS5wcmVjb21wdXRlPWZ1bmN0aW9uKCl7fSxpLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0WCgpLnRvQXJyYXkoXCJiZVwiLHRoaXMuY3VydmUucC5ieXRlTGVuZ3RoKCkpfSxpLmZyb21KU09OPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIG5ldyBpKHQsZVswXSxlWzFdfHx0Lm9uZSl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB6OiBcIit0aGlzLnouZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLnouY21wbigwKX0saS5wcm90b3R5cGUuZGJsPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy54LnJlZEFkZCh0aGlzLnopLGU9dC5yZWRTcXIoKSxyPXRoaXMueC5yZWRTdWIodGhpcy56KSxuPXIucmVkU3FyKCksaT1lLnJlZFN1YihuKSxvPWUucmVkTXVsKG4pLGE9aS5yZWRNdWwobi5yZWRBZGQodGhpcy5jdXJ2ZS5hMjQucmVkTXVsKGkpKSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKFwiTm90IHN1cHBvcnRlZCBvbiBNb250Z29tZXJ5IGN1cnZlXCIpfSxpLnByb3RvdHlwZS5kaWZmQWRkPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy54LnJlZEFkZCh0aGlzLnopLG49dGhpcy54LnJlZFN1Yih0aGlzLnopLGk9dC54LnJlZEFkZCh0LnopLG89dC54LnJlZFN1Yih0LnopLGE9by5yZWRNdWwociksZj1pLnJlZE11bChuKSxzPWUuei5yZWRNdWwoYS5yZWRBZGQoZikucmVkU3FyKCkpLHU9ZS54LnJlZE11bChhLnJlZElTdWIoZikucmVkU3FyKCkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHMsdSl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5jbG9uZSgpLHI9dGhpcyxuPXRoaXMuY3VydmUucG9pbnQobnVsbCxudWxsKSxpPXRoaXMsbz1bXTswIT09ZS5jbXBuKDApO2UuaXVzaHJuKDEpKW8ucHVzaChlLmFuZGxuKDEpKTtmb3IodmFyIGE9by5sZW5ndGgtMTthPj0wO2EtLSkwPT09b1thXT8ocj1yLmRpZmZBZGQobixpKSxuPW4uZGJsKCkpOihuPXIuZGlmZkFkZChuLGkpLHI9ci5kYmwoKSk7cmV0dXJuIG59LGkucHJvdG90eXBlLm11bEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuanVtbEFkZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBzdXBwb3J0ZWQgb24gTW9udGdvbWVyeSBjdXJ2ZVwiKX0saS5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7cmV0dXJuIDA9PT10aGlzLmdldFgoKS5jbXAodC5nZXRYKCkpfSxpLnByb3RvdHlwZS5ub3JtYWxpemU9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy54PXRoaXMueC5yZWRNdWwodGhpcy56LnJlZEludm0oKSksdGhpcy56PXRoaXMuY3VydmUub25lLHRoaXN9LGkucHJvdG90eXBlLmdldFg9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub3JtYWxpemUoKSx0aGlzLnguZnJvbVJlZCgpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aC5jYWxsKHRoaXMsXCJzaG9ydFwiLHQpLHRoaXMuYT1uZXcgcyh0LmEsMTYpLnRvUmVkKHRoaXMucmVkKSx0aGlzLmI9bmV3IHModC5iLDE2KS50b1JlZCh0aGlzLnJlZCksdGhpcy50aW52PXRoaXMudHdvLnJlZEludm0oKSx0aGlzLnplcm9BPTA9PT10aGlzLmEuZnJvbVJlZCgpLmNtcG4oMCksdGhpcy50aHJlZUE9MD09PXRoaXMuYS5mcm9tUmVkKCkuc3ViKHRoaXMucCkuY21wbigtMyksdGhpcy5lbmRvPXRoaXMuX2dldEVuZG9tb3JwaGlzbSh0KSx0aGlzLl9lbmRvV25hZlQxPW5ldyBBcnJheSg0KSx0aGlzLl9lbmRvV25hZlQyPW5ldyBBcnJheSg0KX1mdW5jdGlvbiBpKHQsZSxyLG4pe2guQmFzZVBvaW50LmNhbGwodGhpcyx0LFwiYWZmaW5lXCIpLG51bGw9PT1lJiZudWxsPT09cj8odGhpcy54PW51bGwsdGhpcy55PW51bGwsdGhpcy5pbmY9ITApOih0aGlzLng9bmV3IHMoZSwxNiksdGhpcy55PW5ldyBzKHIsMTYpLG4mJih0aGlzLnguZm9yY2VSZWQodGhpcy5jdXJ2ZS5yZWQpLHRoaXMueS5mb3JjZVJlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLmluZj0hMSl9ZnVuY3Rpb24gbyh0LGUscixuKXtoLkJhc2VQb2ludC5jYWxsKHRoaXMsdCxcImphY29iaWFuXCIpLG51bGw9PT1lJiZudWxsPT09ciYmbnVsbD09PW4/KHRoaXMueD10aGlzLmN1cnZlLm9uZSx0aGlzLnk9dGhpcy5jdXJ2ZS5vbmUsdGhpcy56PW5ldyBzKDApKToodGhpcy54PW5ldyBzKGUsMTYpLHRoaXMueT1uZXcgcyhyLDE2KSx0aGlzLno9bmV3IHMobiwxNikpLHRoaXMueC5yZWR8fCh0aGlzLng9dGhpcy54LnRvUmVkKHRoaXMuY3VydmUucmVkKSksdGhpcy55LnJlZHx8KHRoaXMueT10aGlzLnkudG9SZWQodGhpcy5jdXJ2ZS5yZWQpKSx0aGlzLnoucmVkfHwodGhpcy56PXRoaXMuei50b1JlZCh0aGlzLmN1cnZlLnJlZCkpLHRoaXMuek9uZT10aGlzLno9PT10aGlzLmN1cnZlLm9uZX12YXIgYT1yKDEwNCksZj1yKDIyKSxzPXIoMzApLHU9cigyKSxoPWEuYmFzZSxjPWYudXRpbHMuYXNzZXJ0O3UobixoKSx0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5fZ2V0RW5kb21vcnBoaXNtPWZ1bmN0aW9uKHQpe2lmKHRoaXMuemVyb0EmJnRoaXMuZyYmdGhpcy5uJiYxPT09dGhpcy5wLm1vZG4oMykpe3ZhciBlLHI7aWYodC5iZXRhKWU9bmV3IHModC5iZXRhLDE2KS50b1JlZCh0aGlzLnJlZCk7ZWxzZXt2YXIgbj10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5wKTtlPW5bMF0uY21wKG5bMV0pPDA/blswXTpuWzFdLGU9ZS50b1JlZCh0aGlzLnJlZCl9aWYodC5sYW1iZGEpcj1uZXcgcyh0LmxhbWJkYSwxNik7ZWxzZXt2YXIgaT10aGlzLl9nZXRFbmRvUm9vdHModGhpcy5uKTswPT09dGhpcy5nLm11bChpWzBdKS54LmNtcCh0aGlzLmcueC5yZWRNdWwoZSkpP3I9aVswXToocj1pWzFdLGMoMD09PXRoaXMuZy5tdWwocikueC5jbXAodGhpcy5nLngucmVkTXVsKGUpKSkpfXZhciBvO3JldHVybiBvPXQuYmFzaXM/dC5iYXNpcy5tYXAoZnVuY3Rpb24odCl7cmV0dXJue2E6bmV3IHModC5hLDE2KSxiOm5ldyBzKHQuYiwxNil9fSk6dGhpcy5fZ2V0RW5kb0Jhc2lzKHIpLHtiZXRhOmUsbGFtYmRhOnIsYmFzaXM6b319fSxuLnByb3RvdHlwZS5fZ2V0RW5kb1Jvb3RzPWZ1bmN0aW9uKHQpe3ZhciBlPXQ9PT10aGlzLnA/dGhpcy5yZWQ6cy5tb250KHQpLHI9bmV3IHMoMikudG9SZWQoZSkucmVkSW52bSgpLG49ci5yZWROZWcoKSxpPW5ldyBzKDMpLnRvUmVkKGUpLnJlZE5lZygpLnJlZFNxcnQoKS5yZWRNdWwociksbz1uLnJlZEFkZChpKS5mcm9tUmVkKCksYT1uLnJlZFN1YihpKS5mcm9tUmVkKCk7cmV0dXJuW28sYV19LG4ucHJvdG90eXBlLl9nZXRFbmRvQmFzaXM9ZnVuY3Rpb24odCl7Zm9yKHZhciBlLHIsbixpLG8sYSxmLHUsaCxjPXRoaXMubi51c2hybihNYXRoLmZsb29yKHRoaXMubi5iaXRMZW5ndGgoKS8yKSksZD10LGw9dGhpcy5uLmNsb25lKCkscD1uZXcgcygxKSxiPW5ldyBzKDApLHY9bmV3IHMoMCkseT1uZXcgcygxKSxtPTA7MCE9PWQuY21wbigwKTspe3ZhciBnPWwuZGl2KGQpO3U9bC5zdWIoZy5tdWwoZCkpLGg9di5zdWIoZy5tdWwocCkpO3ZhciB3PXkuc3ViKGcubXVsKGIpKTtpZighbiYmdS5jbXAoYyk8MCllPWYubmVnKCkscj1wLG49dS5uZWcoKSxpPWg7ZWxzZSBpZihuJiYyPT09KyttKWJyZWFrO2Y9dSxsPWQsZD11LHY9cCxwPWgseT1iLGI9d31vPXUubmVnKCksYT1oO3ZhciBfPW4uc3FyKCkuYWRkKGkuc3FyKCkpLE09by5zcXIoKS5hZGQoYS5zcXIoKSk7cmV0dXJuIE0uY21wKF8pPj0wJiYobz1lLGE9ciksbi5uZWdhdGl2ZSYmKG49bi5uZWcoKSxpPWkubmVnKCkpLG8ubmVnYXRpdmUmJihvPW8ubmVnKCksYT1hLm5lZygpKSxbe2E6bixiOml9LHthOm8sYjphfV19LG4ucHJvdG90eXBlLl9lbmRvU3BsaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5lbmRvLmJhc2lzLHI9ZVswXSxuPWVbMV0saT1uLmIubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksbz1yLmIubmVnKCkubXVsKHQpLmRpdlJvdW5kKHRoaXMubiksYT1pLm11bChyLmEpLGY9by5tdWwobi5hKSxzPWkubXVsKHIuYiksdT1vLm11bChuLmIpLGg9dC5zdWIoYSkuc3ViKGYpLGM9cy5hZGQodSkubmVnKCk7cmV0dXJue2sxOmgsazI6Y319LG4ucHJvdG90eXBlLnBvaW50RnJvbVg9ZnVuY3Rpb24odCxlKXt0PW5ldyBzKHQsMTYpLHQucmVkfHwodD10LnRvUmVkKHRoaXMucmVkKSk7dmFyIHI9dC5yZWRTcXIoKS5yZWRNdWwodCkucmVkSUFkZCh0LnJlZE11bCh0aGlzLmEpKS5yZWRJQWRkKHRoaXMuYiksbj1yLnJlZFNxcnQoKTtpZigwIT09bi5yZWRTcXIoKS5yZWRTdWIocikuY21wKHRoaXMuemVybykpdGhyb3cgbmV3IEVycm9yKFwiaW52YWxpZCBwb2ludFwiKTt2YXIgaT1uLmZyb21SZWQoKS5pc09kZCgpO3JldHVybihlJiYhaXx8IWUmJmkpJiYobj1uLnJlZE5lZygpKSx0aGlzLnBvaW50KHQsbil9LG4ucHJvdG90eXBlLnZhbGlkYXRlPWZ1bmN0aW9uKHQpe2lmKHQuaW5mKXJldHVybiEwO3ZhciBlPXQueCxyPXQueSxuPXRoaXMuYS5yZWRNdWwoZSksaT1lLnJlZFNxcigpLnJlZE11bChlKS5yZWRJQWRkKG4pLnJlZElBZGQodGhpcy5iKTtyZXR1cm4gMD09PXIucmVkU3FyKCkucmVkSVN1YihpKS5jbXBuKDApfSxuLnByb3RvdHlwZS5fZW5kb1duYWZNdWxBZGQ9ZnVuY3Rpb24odCxlLHIpe2Zvcih2YXIgbj10aGlzLl9lbmRvV25hZlQxLGk9dGhpcy5fZW5kb1duYWZUMixvPTA7bzx0Lmxlbmd0aDtvKyspe3ZhciBhPXRoaXMuX2VuZG9TcGxpdChlW29dKSxmPXRbb10scz1mLl9nZXRCZXRhKCk7YS5rMS5uZWdhdGl2ZSYmKGEuazEuaW5lZygpLGY9Zi5uZWcoITApKSxhLmsyLm5lZ2F0aXZlJiYoYS5rMi5pbmVnKCkscz1zLm5lZyghMCkpLG5bMipvXT1mLG5bMipvKzFdPXMsaVsyKm9dPWEuazEsaVsyKm8rMV09YS5rMn1mb3IodmFyIHU9dGhpcy5fd25hZk11bEFkZCgxLG4saSwyKm8sciksaD0wO2g8MipvO2grKyluW2hdPW51bGwsaVtoXT1udWxsO3JldHVybiB1fSx1KGksaC5CYXNlUG9pbnQpLG4ucHJvdG90eXBlLnBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IGkodGhpcyx0LGUscil9LG4ucHJvdG90eXBlLnBvaW50RnJvbUpTT049ZnVuY3Rpb24odCxlKXtyZXR1cm4gaS5mcm9tSlNPTih0aGlzLHQsZSl9LGkucHJvdG90eXBlLl9nZXRCZXRhPWZ1bmN0aW9uKCl7aWYodGhpcy5jdXJ2ZS5lbmRvKXt2YXIgdD10aGlzLnByZWNvbXB1dGVkO2lmKHQmJnQuYmV0YSlyZXR1cm4gdC5iZXRhO3ZhciBlPXRoaXMuY3VydmUucG9pbnQodGhpcy54LnJlZE11bCh0aGlzLmN1cnZlLmVuZG8uYmV0YSksdGhpcy55KTtpZih0KXt2YXIgcj10aGlzLmN1cnZlLG49ZnVuY3Rpb24odCl7cmV0dXJuIHIucG9pbnQodC54LnJlZE11bChyLmVuZG8uYmV0YSksdC55KX07dC5iZXRhPWUsZS5wcmVjb21wdXRlZD17YmV0YTpudWxsLG5hZjp0Lm5hZiYme3duZDp0Lm5hZi53bmQscG9pbnRzOnQubmFmLnBvaW50cy5tYXAobil9LGRvdWJsZXM6dC5kb3VibGVzJiZ7c3RlcDp0LmRvdWJsZXMuc3RlcCxwb2ludHM6dC5kb3VibGVzLnBvaW50cy5tYXAobil9fX1yZXR1cm4gZX19LGkucHJvdG90eXBlLnRvSlNPTj1mdW5jdGlvbigpe3JldHVybiB0aGlzLnByZWNvbXB1dGVkP1t0aGlzLngsdGhpcy55LHRoaXMucHJlY29tcHV0ZWQmJntkb3VibGVzOnRoaXMucHJlY29tcHV0ZWQuZG91YmxlcyYme3N0ZXA6dGhpcy5wcmVjb21wdXRlZC5kb3VibGVzLnN0ZXAscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQuZG91Ymxlcy5wb2ludHMuc2xpY2UoMSl9LG5hZjp0aGlzLnByZWNvbXB1dGVkLm5hZiYme3duZDp0aGlzLnByZWNvbXB1dGVkLm5hZi53bmQscG9pbnRzOnRoaXMucHJlY29tcHV0ZWQubmFmLnBvaW50cy5zbGljZSgxKX19XTpbdGhpcy54LHRoaXMueV19LGkuZnJvbUpTT049ZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oZSl7cmV0dXJuIHQucG9pbnQoZVswXSxlWzFdLHIpfVwic3RyaW5nXCI9PXR5cGVvZiBlJiYoZT1KU09OLnBhcnNlKGUpKTt2YXIgaT10LnBvaW50KGVbMF0sZVsxXSxyKTtpZighZVsyXSlyZXR1cm4gaTt2YXIgbz1lWzJdO3JldHVybiBpLnByZWNvbXB1dGVkPXtiZXRhOm51bGwsZG91YmxlczpvLmRvdWJsZXMmJntzdGVwOm8uZG91Ymxlcy5zdGVwLHBvaW50czpbaV0uY29uY2F0KG8uZG91Ymxlcy5wb2ludHMubWFwKG4pKX0sbmFmOm8ubmFmJiZ7d25kOm8ubmFmLnduZCxwb2ludHM6W2ldLmNvbmNhdChvLm5hZi5wb2ludHMubWFwKG4pKX19LGl9LGkucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgUG9pbnQgSW5maW5pdHk+XCI6XCI8RUMgUG9pbnQgeDogXCIrdGhpcy54LmZyb21SZWQoKS50b1N0cmluZygxNiwyKStcIiB5OiBcIit0aGlzLnkuZnJvbVJlZCgpLnRvU3RyaW5nKDE2LDIpK1wiPlwifSxpLnByb3RvdHlwZS5pc0luZmluaXR5PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaW5mfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pbmYpcmV0dXJuIHQ7aWYodC5pbmYpcmV0dXJuIHRoaXM7aWYodGhpcy5lcSh0KSlyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLm5lZygpLmVxKHQpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7aWYoMD09PXRoaXMueC5jbXAodC54KSlyZXR1cm4gdGhpcy5jdXJ2ZS5wb2ludChudWxsLG51bGwpO3ZhciBlPXRoaXMueS5yZWRTdWIodC55KTswIT09ZS5jbXBuKDApJiYoZT1lLnJlZE11bCh0aGlzLngucmVkU3ViKHQueCkucmVkSW52bSgpKSk7dmFyIHI9ZS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueCkucmVkSVN1Yih0LngpLG49ZS5yZWRNdWwodGhpcy54LnJlZFN1YihyKSkucmVkSVN1Yih0aGlzLnkpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50KHIsbil9LGkucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe2lmKHRoaXMuaW5mKXJldHVybiB0aGlzO3ZhciB0PXRoaXMueS5yZWRBZGQodGhpcy55KTtpZigwPT09dC5jbXBuKDApKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIGU9dGhpcy5jdXJ2ZS5hLHI9dGhpcy54LnJlZFNxcigpLG49dC5yZWRJbnZtKCksaT1yLnJlZEFkZChyKS5yZWRJQWRkKHIpLnJlZElBZGQoZSkucmVkTXVsKG4pLG89aS5yZWRTcXIoKS5yZWRJU3ViKHRoaXMueC5yZWRBZGQodGhpcy54KSksYT1pLnJlZE11bCh0aGlzLngucmVkU3ViKG8pKS5yZWRJU3ViKHRoaXMueSk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQobyxhKX0saS5wcm90b3R5cGUuZ2V0WD1mdW5jdGlvbigpe3JldHVybiB0aGlzLnguZnJvbVJlZCgpfSxpLnByb3RvdHlwZS5nZXRZPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMueS5mcm9tUmVkKCl9LGkucHJvdG90eXBlLm11bD1mdW5jdGlvbih0KXtyZXR1cm4gdD1uZXcgcyh0LDE2KSx0aGlzLl9oYXNEb3VibGVzKHQpP3RoaXMuY3VydmUuX2ZpeGVkTmFmTXVsKHRoaXMsdCk6dGhpcy5jdXJ2ZS5lbmRvP3RoaXMuY3VydmUuX2VuZG9XbmFmTXVsQWRkKFt0aGlzXSxbdF0pOnRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0saS5wcm90b3R5cGUubXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIpfSxpLnByb3RvdHlwZS5qbXVsQWRkPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj1bdGhpcyxlXSxpPVt0LHJdO3JldHVybiB0aGlzLmN1cnZlLmVuZG8/dGhpcy5jdXJ2ZS5fZW5kb1duYWZNdWxBZGQobixpLCEwKTp0aGlzLmN1cnZlLl93bmFmTXVsQWRkKDEsbixpLDIsITApfSxpLnByb3RvdHlwZS5lcT1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcz09PXR8fHRoaXMuaW5mPT09dC5pbmYmJih0aGlzLmluZnx8MD09PXRoaXMueC5jbXAodC54KSYmMD09PXRoaXMueS5jbXAodC55KSl9LGkucHJvdG90eXBlLm5lZz1mdW5jdGlvbih0KXtpZih0aGlzLmluZilyZXR1cm4gdGhpczt2YXIgZT10aGlzLmN1cnZlLnBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCkpO2lmKHQmJnRoaXMucHJlY29tcHV0ZWQpe3ZhciByPXRoaXMucHJlY29tcHV0ZWQsbj1mdW5jdGlvbih0KXtyZXR1cm4gdC5uZWcoKX07ZS5wcmVjb21wdXRlZD17bmFmOnIubmFmJiZ7d25kOnIubmFmLnduZCxwb2ludHM6ci5uYWYucG9pbnRzLm1hcChuKX0sZG91YmxlczpyLmRvdWJsZXMmJntzdGVwOnIuZG91Ymxlcy5zdGVwLHBvaW50czpyLmRvdWJsZXMucG9pbnRzLm1hcChuKX19fXJldHVybiBlfSxpLnByb3RvdHlwZS50b0o9ZnVuY3Rpb24oKXtpZih0aGlzLmluZilyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpO3ZhciB0PXRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnksdGhpcy5jdXJ2ZS5vbmUpO3JldHVybiB0fSxcbnUobyxoLkJhc2VQb2ludCksbi5wcm90b3R5cGUuanBvaW50PWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gbmV3IG8odGhpcyx0LGUscil9LG8ucHJvdG90eXBlLnRvUD1mdW5jdGlvbigpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzLmN1cnZlLnBvaW50KG51bGwsbnVsbCk7dmFyIHQ9dGhpcy56LnJlZEludm0oKSxlPXQucmVkU3FyKCkscj10aGlzLngucmVkTXVsKGUpLG49dGhpcy55LnJlZE11bChlKS5yZWRNdWwodCk7cmV0dXJuIHRoaXMuY3VydmUucG9pbnQocixuKX0sby5wcm90b3R5cGUubmVnPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHRoaXMueCx0aGlzLnkucmVkTmVnKCksdGhpcy56KX0sby5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKHQpe2lmKHRoaXMuaXNJbmZpbml0eSgpKXJldHVybiB0O2lmKHQuaXNJbmZpbml0eSgpKXJldHVybiB0aGlzO3ZhciBlPXQuei5yZWRTcXIoKSxyPXRoaXMuei5yZWRTcXIoKSxuPXRoaXMueC5yZWRNdWwoZSksaT10LngucmVkTXVsKHIpLG89dGhpcy55LnJlZE11bChlLnJlZE11bCh0LnopKSxhPXQueS5yZWRNdWwoci5yZWRNdWwodGhpcy56KSksZj1uLnJlZFN1YihpKSxzPW8ucmVkU3ViKGEpO2lmKDA9PT1mLmNtcG4oMCkpcmV0dXJuIDAhPT1zLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHU9Zi5yZWRTcXIoKSxoPXUucmVkTXVsKGYpLGM9bi5yZWRNdWwodSksZD1zLnJlZFNxcigpLnJlZElBZGQoaCkucmVkSVN1YihjKS5yZWRJU3ViKGMpLGw9cy5yZWRNdWwoYy5yZWRJU3ViKGQpKS5yZWRJU3ViKG8ucmVkTXVsKGgpKSxwPXRoaXMuei5yZWRNdWwodC56KS5yZWRNdWwoZik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGQsbCxwKX0sby5wcm90b3R5cGUubWl4ZWRBZGQ9ZnVuY3Rpb24odCl7aWYodGhpcy5pc0luZmluaXR5KCkpcmV0dXJuIHQudG9KKCk7aWYodC5pc0luZmluaXR5KCkpcmV0dXJuIHRoaXM7dmFyIGU9dGhpcy56LnJlZFNxcigpLHI9dGhpcy54LG49dC54LnJlZE11bChlKSxpPXRoaXMueSxvPXQueS5yZWRNdWwoZSkucmVkTXVsKHRoaXMueiksYT1yLnJlZFN1YihuKSxmPWkucmVkU3ViKG8pO2lmKDA9PT1hLmNtcG4oMCkpcmV0dXJuIDAhPT1mLmNtcG4oMCk/dGhpcy5jdXJ2ZS5qcG9pbnQobnVsbCxudWxsLG51bGwpOnRoaXMuZGJsKCk7dmFyIHM9YS5yZWRTcXIoKSx1PXMucmVkTXVsKGEpLGg9ci5yZWRNdWwocyksYz1mLnJlZFNxcigpLnJlZElBZGQodSkucmVkSVN1YihoKS5yZWRJU3ViKGgpLGQ9Zi5yZWRNdWwoaC5yZWRJU3ViKGMpKS5yZWRJU3ViKGkucmVkTXVsKHUpKSxsPXRoaXMuei5yZWRNdWwoYSk7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGMsZCxsKX0sby5wcm90b3R5cGUuZGJscD1mdW5jdGlvbih0KXtpZigwPT09dClyZXR1cm4gdGhpcztpZih0aGlzLmlzSW5maW5pdHkoKSlyZXR1cm4gdGhpcztpZighdClyZXR1cm4gdGhpcy5kYmwoKTtpZih0aGlzLmN1cnZlLnplcm9BfHx0aGlzLmN1cnZlLnRocmVlQSl7Zm9yKHZhciBlPXRoaXMscj0wO3I8dDtyKyspZT1lLmRibCgpO3JldHVybiBlfWZvcih2YXIgbj10aGlzLmN1cnZlLmEsaT10aGlzLmN1cnZlLnRpbnYsbz10aGlzLngsYT10aGlzLnksZj10aGlzLnoscz1mLnJlZFNxcigpLnJlZFNxcigpLHU9YS5yZWRBZGQoYSkscj0wO3I8dDtyKyspe3ZhciBoPW8ucmVkU3FyKCksYz11LnJlZFNxcigpLGQ9Yy5yZWRTcXIoKSxsPWgucmVkQWRkKGgpLnJlZElBZGQoaCkucmVkSUFkZChuLnJlZE11bChzKSkscD1vLnJlZE11bChjKSxiPWwucmVkU3FyKCkucmVkSVN1YihwLnJlZEFkZChwKSksdj1wLnJlZElTdWIoYikseT1sLnJlZE11bCh2KTt5PXkucmVkSUFkZCh5KS5yZWRJU3ViKGQpO3ZhciBtPXUucmVkTXVsKGYpO3IrMTx0JiYocz1zLnJlZE11bChkKSksbz1iLGY9bSx1PXl9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KG8sdS5yZWRNdWwoaSksZil9LG8ucHJvdG90eXBlLmRibD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzSW5maW5pdHkoKT90aGlzOnRoaXMuY3VydmUuemVyb0E/dGhpcy5femVyb0RibCgpOnRoaXMuY3VydmUudGhyZWVBP3RoaXMuX3RocmVlRGJsKCk6dGhpcy5fZGJsKCl9LG8ucHJvdG90eXBlLl96ZXJvRGJsPWZ1bmN0aW9uKCl7dmFyIHQsZSxyO2lmKHRoaXMuek9uZSl7dmFyIG49dGhpcy54LnJlZFNxcigpLGk9dGhpcy55LnJlZFNxcigpLG89aS5yZWRTcXIoKSxhPXRoaXMueC5yZWRBZGQoaSkucmVkU3FyKCkucmVkSVN1YihuKS5yZWRJU3ViKG8pO2E9YS5yZWRJQWRkKGEpO3ZhciBmPW4ucmVkQWRkKG4pLnJlZElBZGQobikscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKSx1PW8ucmVkSUFkZChvKTt1PXUucmVkSUFkZCh1KSx1PXUucmVkSUFkZCh1KSx0PXMsZT1mLnJlZE11bChhLnJlZElTdWIocykpLnJlZElTdWIodSkscj10aGlzLnkucmVkQWRkKHRoaXMueSl9ZWxzZXt2YXIgaD10aGlzLngucmVkU3FyKCksYz10aGlzLnkucmVkU3FyKCksZD1jLnJlZFNxcigpLGw9dGhpcy54LnJlZEFkZChjKS5yZWRTcXIoKS5yZWRJU3ViKGgpLnJlZElTdWIoZCk7bD1sLnJlZElBZGQobCk7dmFyIHA9aC5yZWRBZGQoaCkucmVkSUFkZChoKSxiPXAucmVkU3FyKCksdj1kLnJlZElBZGQoZCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdD1iLnJlZElTdWIobCkucmVkSVN1YihsKSxlPXAucmVkTXVsKGwucmVkSVN1Yih0KSkucmVkSVN1Yih2KSxyPXRoaXMueS5yZWRNdWwodGhpcy56KSxyPXIucmVkSUFkZChyKX1yZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQodCxlLHIpfSxvLnByb3RvdHlwZS5fdGhyZWVEYmw9ZnVuY3Rpb24oKXt2YXIgdCxlLHI7aWYodGhpcy56T25lKXt2YXIgbj10aGlzLngucmVkU3FyKCksaT10aGlzLnkucmVkU3FyKCksbz1pLnJlZFNxcigpLGE9dGhpcy54LnJlZEFkZChpKS5yZWRTcXIoKS5yZWRJU3ViKG4pLnJlZElTdWIobyk7YT1hLnJlZElBZGQoYSk7dmFyIGY9bi5yZWRBZGQobikucmVkSUFkZChuKS5yZWRJQWRkKHRoaXMuY3VydmUuYSkscz1mLnJlZFNxcigpLnJlZElTdWIoYSkucmVkSVN1YihhKTt0PXM7dmFyIHU9by5yZWRJQWRkKG8pO3U9dS5yZWRJQWRkKHUpLHU9dS5yZWRJQWRkKHUpLGU9Zi5yZWRNdWwoYS5yZWRJU3ViKHMpKS5yZWRJU3ViKHUpLHI9dGhpcy55LnJlZEFkZCh0aGlzLnkpfWVsc2V7dmFyIGg9dGhpcy56LnJlZFNxcigpLGM9dGhpcy55LnJlZFNxcigpLGQ9dGhpcy54LnJlZE11bChjKSxsPXRoaXMueC5yZWRTdWIoaCkucmVkTXVsKHRoaXMueC5yZWRBZGQoaCkpO2w9bC5yZWRBZGQobCkucmVkSUFkZChsKTt2YXIgcD1kLnJlZElBZGQoZCk7cD1wLnJlZElBZGQocCk7dmFyIGI9cC5yZWRBZGQocCk7dD1sLnJlZFNxcigpLnJlZElTdWIoYikscj10aGlzLnkucmVkQWRkKHRoaXMueikucmVkU3FyKCkucmVkSVN1YihjKS5yZWRJU3ViKGgpO3ZhciB2PWMucmVkU3FyKCk7dj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksdj12LnJlZElBZGQodiksZT1sLnJlZE11bChwLnJlZElTdWIodCkpLnJlZElTdWIodil9cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KHQsZSxyKX0sby5wcm90b3R5cGUuX2RibD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuY3VydmUuYSxlPXRoaXMueCxyPXRoaXMueSxuPXRoaXMueixpPW4ucmVkU3FyKCkucmVkU3FyKCksbz1lLnJlZFNxcigpLGE9ci5yZWRTcXIoKSxmPW8ucmVkQWRkKG8pLnJlZElBZGQobykucmVkSUFkZCh0LnJlZE11bChpKSkscz1lLnJlZEFkZChlKTtzPXMucmVkSUFkZChzKTt2YXIgdT1zLnJlZE11bChhKSxoPWYucmVkU3FyKCkucmVkSVN1Yih1LnJlZEFkZCh1KSksYz11LnJlZElTdWIoaCksZD1hLnJlZFNxcigpO2Q9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpLGQ9ZC5yZWRJQWRkKGQpO3ZhciBsPWYucmVkTXVsKGMpLnJlZElTdWIoZCkscD1yLnJlZEFkZChyKS5yZWRNdWwobik7cmV0dXJuIHRoaXMuY3VydmUuanBvaW50KGgsbCxwKX0sby5wcm90b3R5cGUudHJwbD1mdW5jdGlvbigpe2lmKCF0aGlzLmN1cnZlLnplcm9BKXJldHVybiB0aGlzLmRibCgpLmFkZCh0aGlzKTt2YXIgdD10aGlzLngucmVkU3FyKCksZT10aGlzLnkucmVkU3FyKCkscj10aGlzLnoucmVkU3FyKCksbj1lLnJlZFNxcigpLGk9dC5yZWRBZGQodCkucmVkSUFkZCh0KSxvPWkucmVkU3FyKCksYT10aGlzLngucmVkQWRkKGUpLnJlZFNxcigpLnJlZElTdWIodCkucmVkSVN1YihuKTthPWEucmVkSUFkZChhKSxhPWEucmVkQWRkKGEpLnJlZElBZGQoYSksYT1hLnJlZElTdWIobyk7dmFyIGY9YS5yZWRTcXIoKSxzPW4ucmVkSUFkZChuKTtzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKSxzPXMucmVkSUFkZChzKTt2YXIgdT1pLnJlZElBZGQoYSkucmVkU3FyKCkucmVkSVN1YihvKS5yZWRJU3ViKGYpLnJlZElTdWIocyksaD1lLnJlZE11bCh1KTtoPWgucmVkSUFkZChoKSxoPWgucmVkSUFkZChoKTt2YXIgYz10aGlzLngucmVkTXVsKGYpLnJlZElTdWIoaCk7Yz1jLnJlZElBZGQoYyksYz1jLnJlZElBZGQoYyk7dmFyIGQ9dGhpcy55LnJlZE11bCh1LnJlZE11bChzLnJlZElTdWIodSkpLnJlZElTdWIoYS5yZWRNdWwoZikpKTtkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKSxkPWQucmVkSUFkZChkKTt2YXIgbD10aGlzLnoucmVkQWRkKGEpLnJlZFNxcigpLnJlZElTdWIocikucmVkSVN1YihmKTtyZXR1cm4gdGhpcy5jdXJ2ZS5qcG9pbnQoYyxkLGwpfSxvLnByb3RvdHlwZS5tdWw9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdD1uZXcgcyh0LGUpLHRoaXMuY3VydmUuX3duYWZNdWwodGhpcyx0KX0sby5wcm90b3R5cGUuZXE9ZnVuY3Rpb24odCl7aWYoXCJhZmZpbmVcIj09PXQudHlwZSlyZXR1cm4gdGhpcy5lcSh0LnRvSigpKTtpZih0aGlzPT09dClyZXR1cm4hMDt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnoucmVkU3FyKCk7aWYoMCE9PXRoaXMueC5yZWRNdWwocikucmVkSVN1Yih0LngucmVkTXVsKGUpKS5jbXBuKDApKXJldHVybiExO3ZhciBuPWUucmVkTXVsKHRoaXMueiksaT1yLnJlZE11bCh0LnopO3JldHVybiAwPT09dGhpcy55LnJlZE11bChpKS5yZWRJU3ViKHQueS5yZWRNdWwobikpLmNtcG4oMCl9LG8ucHJvdG90eXBlLmVxWFRvUD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnoucmVkU3FyKCkscj10LnRvUmVkKHRoaXMuY3VydmUucmVkKS5yZWRNdWwoZSk7aWYoMD09PXRoaXMueC5jbXAocikpcmV0dXJuITA7Zm9yKHZhciBuPXQuY2xvbmUoKSxpPXRoaXMuY3VydmUucmVkTi5yZWRNdWwoZSk7Oyl7aWYobi5pYWRkKHRoaXMuY3VydmUubiksbi5jbXAodGhpcy5jdXJ2ZS5wKT49MClyZXR1cm4hMTtpZihyLnJlZElBZGQoaSksMD09PXRoaXMueC5jbXAocikpcmV0dXJuITB9cmV0dXJuITF9LG8ucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5pc0luZmluaXR5KCk/XCI8RUMgSlBvaW50IEluZmluaXR5PlwiOlwiPEVDIEpQb2ludCB4OiBcIit0aGlzLngudG9TdHJpbmcoMTYsMikrXCIgeTogXCIrdGhpcy55LnRvU3RyaW5nKDE2LDIpK1wiIHo6IFwiK3RoaXMuei50b1N0cmluZygxNiwyKStcIj5cIn0sby5wcm90b3R5cGUuaXNJbmZpbml0eT1mdW5jdGlvbigpe3JldHVybiAwPT09dGhpcy56LmNtcG4oMCl9fSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0KXtcInNob3J0XCI9PT10LnR5cGU/dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5zaG9ydCh0KTpcImVkd2FyZHNcIj09PXQudHlwZT90aGlzLmN1cnZlPW5ldyBmLmN1cnZlLmVkd2FyZHModCk6dGhpcy5jdXJ2ZT1uZXcgZi5jdXJ2ZS5tb250KHQpLHRoaXMuZz10aGlzLmN1cnZlLmcsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLmhhc2g9dC5oYXNoLHModGhpcy5nLnZhbGlkYXRlKCksXCJJbnZhbGlkIGN1cnZlXCIpLHModGhpcy5nLm11bCh0aGlzLm4pLmlzSW5maW5pdHkoKSxcIkludmFsaWQgY3VydmUsIEcqTiAhPSBPXCIpfWZ1bmN0aW9uIGkodCxlKXtPYmplY3QuZGVmaW5lUHJvcGVydHkobyx0LHtjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXt2YXIgcj1uZXcgbihlKTtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KG8sdCx7Y29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITAsdmFsdWU6cn0pLHJ9fSl9dmFyIG89ZSxhPXIoNTApLGY9cigyMikscz1mLnV0aWxzLmFzc2VydDtvLlByZXNldEN1cnZlPW4saShcInAxOTJcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMTkyXCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjY0MjEwNTE5IGU1OWM4MGU3IDBmYTdlOWFiIDcyMjQzMDQ5IGZlYjhkZWVjIGMxNDZiOWIxXCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDk5ZGVmODM2IDE0NmJjOWIxIGI0ZDIyODMxXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiMTg4ZGE4MGUgYjAzMDkwZjYgN2NiZjIwZWIgNDNhMTg4MDAgZjRmZjBhZmQgODJmZjEwMTJcIixcIjA3MTkyYjk1IGZmYzhkYTc4IDYzMTAxMWVkIDZiMjRjZGQ1IDczZjk3N2ExIDFlNzk0ODExXCJdfSksaShcInAyMjRcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJwMjI0XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIDAwMDAwMDAwIDAwMDAwMDAwIDAwMDAwMDAxXCIsYTpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlXCIsYjpcImI0MDUwYTg1IDBjMDRiM2FiIGY1NDEzMjU2IDUwNDRiMGI3IGQ3YmZkOGJhIDI3MGIzOTQzIDIzNTVmZmI0XCIsbjpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmYxNmEyIGUwYjhmMDNlIDEzZGQyOTQ1IDVjNWMyYTNkXCIsaGFzaDphLnNoYTI1NixnUmVkOiExLGc6W1wiYjcwZTBjYmQgNmJiNGJmN2YgMzIxMzkwYjkgNGEwM2MxZDMgNTZjMjExMjIgMzQzMjgwZDYgMTE1YzFkMjFcIixcImJkMzc2Mzg4IGI1ZjcyM2ZiIDRjMjJkZmU2IGNkNDM3NWEwIDVhMDc0NzY0IDQ0ZDU4MTk5IDg1MDA3ZTM0XCJdfSksaShcInAyNTZcIix7dHlwZTpcInNob3J0XCIscHJpbWU6bnVsbCxwOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmZcIixhOlwiZmZmZmZmZmYgMDAwMDAwMDEgMDAwMDAwMDAgMDAwMDAwMDAgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgZmZmZmZmZmNcIixiOlwiNWFjNjM1ZDggYWEzYTkzZTcgYjNlYmJkNTUgNzY5ODg2YmMgNjUxZDA2YjAgY2M1M2IwZjYgM2JjZTNjM2UgMjdkMjYwNGJcIixuOlwiZmZmZmZmZmYgMDAwMDAwMDAgZmZmZmZmZmYgZmZmZmZmZmYgYmNlNmZhYWQgYTcxNzllODQgZjNiOWNhYzIgZmM2MzI1NTFcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCI2YjE3ZDFmMiBlMTJjNDI0NyBmOGJjZTZlNSA2M2E0NDBmMiA3NzAzN2Q4MSAyZGViMzNhMCBmNGExMzk0NSBkODk4YzI5NlwiLFwiNGZlMzQyZTIgZmUxYTdmOWIgOGVlN2ViNGEgN2MwZjllMTYgMmJjZTMzNTcgNmIzMTVlY2UgY2JiNjQwNjggMzdiZjUxZjVcIl19KSxpKFwicDM4NFwiLHt0eXBlOlwic2hvcnRcIixwcmltZTpudWxsLHA6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmZlwiLGE6XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBmZmZmZmZmZiAwMDAwMDAwMCAwMDAwMDAwMCBmZmZmZmZmY1wiLGI6XCJiMzMxMmZhNyBlMjNlZTdlNCA5ODhlMDU2YiBlM2Y4MmQxOSAxODFkOWM2ZSBmZTgxNDExMiAwMzE0MDg4ZiA1MDEzODc1YSBjNjU2Mzk4ZCA4YTJlZDE5ZCAyYTg1YzhlZCBkM2VjMmFlZlwiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBjNzYzNGQ4MSBmNDM3MmRkZiA1ODFhMGRiMiA0OGIwYTc3YSBlY2VjMTk2YSBjY2M1Mjk3M1wiLGhhc2g6YS5zaGEzODQsZ1JlZDohMSxnOltcImFhODdjYTIyIGJlOGIwNTM3IDhlYjFjNzFlIGYzMjBhZDc0IDZlMWQzYjYyIDhiYTc5Yjk4IDU5Zjc0MWUwIDgyNTQyYTM4IDU1MDJmMjVkIGJmNTUyOTZjIDNhNTQ1ZTM4IDcyNzYwYWI3XCIsXCIzNjE3ZGU0YSA5NjI2MmM2ZiA1ZDllOThiZiA5MjkyZGMyOSBmOGY0MWRiZCAyODlhMTQ3YyBlOWRhMzExMyBiNWYwYjhjMCAwYTYwYjFjZSAxZDdlODE5ZCA3YTQzMWQ3YyA5MGVhMGU1ZlwiXX0pLGkoXCJwNTIxXCIse3R5cGU6XCJzaG9ydFwiLHByaW1lOm51bGwscDpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmXCIsYTpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZjXCIsYjpcIjAwMDAwMDUxIDk1M2ViOTYxIDhlMWM5YTFmIDkyOWEyMWEwIGI2ODU0MGVlIGEyZGE3MjViIDk5YjMxNWYzIGI4YjQ4OTkxIDhlZjEwOWUxIDU2MTkzOTUxIGVjN2U5MzdiIDE2NTJjMGJkIDNiYjFiZjA3IDM1NzNkZjg4IDNkMmMzNGYxIGVmNDUxZmQ0IDZiNTAzZjAwXCIsbjpcIjAwMDAwMWZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZhIDUxODY4NzgzIGJmMmY5NjZiIDdmY2MwMTQ4IGY3MDlhNWQwIDNiYjVjOWI4IDg5OWM0N2FlIGJiNmZiNzFlIDkxMzg2NDA5XCIsaGFzaDphLnNoYTUxMixnUmVkOiExLGc6W1wiMDAwMDAwYzYgODU4ZTA2YjcgMDQwNGU5Y2QgOWUzZWNiNjYgMjM5NWI0NDIgOWM2NDgxMzkgMDUzZmI1MjEgZjgyOGFmNjAgNmI0ZDNkYmEgYTE0YjVlNzcgZWZlNzU5MjggZmUxZGMxMjcgYTJmZmE4ZGUgMzM0OGIzYzEgODU2YTQyOWIgZjk3ZTdlMzEgYzJlNWJkNjZcIixcIjAwMDAwMTE4IDM5Mjk2YTc4IDlhM2JjMDA0IDVjOGE1ZmI0IDJjN2QxYmQ5IDk4ZjU0NDQ5IDU3OWI0NDY4IDE3YWZiZDE3IDI3M2U2NjJjIDk3ZWU3Mjk5IDVlZjQyNjQwIGM1NTBiOTAxIDNmYWQwNzYxIDM1M2M3MDg2IGEyNzJjMjQwIDg4YmU5NDc2IDlmZDE2NjUwXCJdfSksaShcImN1cnZlMjU1MTlcIix7dHlwZTpcIm1vbnRcIixwcmltZTpcInAyNTUxOVwiLHA6XCI3ZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmVkXCIsYTpcIjc2ZDA2XCIsYjpcIjBcIixuOlwiMTAwMDAwMDAwMDAwMDAwMCAwMDAwMDAwMDAwMDAwMDAwIDE0ZGVmOWRlYTJmNzljZDYgNTgxMjYzMWE1Y2Y1ZDNlZFwiLGhhc2g6YS5zaGEyNTYsZ1JlZDohMSxnOltcIjlcIl19KSxpKFwiZWQyNTUxOVwiLHt0eXBlOlwiZWR3YXJkc1wiLHByaW1lOlwicDI1NTE5XCIscDpcIjdmZmZmZmZmZmZmZmZmZmYgZmZmZmZmZmZmZmZmZmZmZiBmZmZmZmZmZmZmZmZmZmZmIGZmZmZmZmZmZmZmZmZmZWRcIixhOlwiLTFcIixjOlwiMVwiLGQ6XCI1MjAzNmNlZTJiNmZmZTczIDhjYzc0MDc5Nzc3OWU4OTggMDA3MDBhNGQ0MTQxZDhhYiA3NWViNGRjYTEzNTk3OGEzXCIsbjpcIjEwMDAwMDAwMDAwMDAwMDAgMDAwMDAwMDAwMDAwMDAwMCAxNGRlZjlkZWEyZjc5Y2Q2IDU4MTI2MzFhNWNmNWQzZWRcIixoYXNoOmEuc2hhMjU2LGdSZWQ6ITEsZzpbXCIyMTY5MzZkM2NkNmU1M2ZlYzBhNGUyMzFmZGQ2ZGM1YzY5MmNjNzYwOTUyNWE3YjJjOTU2MmQ2MDhmMjVkNTFhXCIsXCI2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjY2NjU4XCJdfSk7dmFyIHU7dHJ5e3U9cig1NTcpfWNhdGNoKHQpe3U9dm9pZCAwfWkoXCJzZWNwMjU2azFcIix7dHlwZTpcInNob3J0XCIscHJpbWU6XCJrMjU2XCIscDpcImZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZmIGZmZmZmZmZlIGZmZmZmYzJmXCIsYTpcIjBcIixiOlwiN1wiLG46XCJmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZiBmZmZmZmZmZSBiYWFlZGNlNiBhZjQ4YTAzYiBiZmQyNWU4YyBkMDM2NDE0MVwiLGg6XCIxXCIsaGFzaDphLnNoYTI1NixiZXRhOlwiN2FlOTZhMmI2NTdjMDcxMDZlNjQ0NzllYWMzNDM0ZTk5Y2YwNDk3NTEyZjU4OTk1YzEzOTZjMjg3MTk1MDFlZVwiLGxhbWJkYTpcIjUzNjNhZDRjYzA1YzMwZTBhNTI2MWMwMjg4MTI2NDVhMTIyZTIyZWEyMDgxNjY3OGRmMDI5NjdjMWIyM2JkNzJcIixiYXNpczpbe2E6XCIzMDg2ZDIyMWE3ZDQ2YmNkZTg2YzkwZTQ5Mjg0ZWIxNVwiLGI6XCItZTQ0MzdlZDYwMTBlODgyODZmNTQ3ZmE5MGFiZmU0YzNcIn0se2E6XCIxMTRjYTUwZjdhOGUyZjNmNjU3YzExMDhkOWQ0NGNmZDhcIixiOlwiMzA4NmQyMjFhN2Q0NmJjZGU4NmM5MGU0OTI4NGViMTVcIn1dLGdSZWQ6ITEsZzpbXCI3OWJlNjY3ZWY5ZGNiYmFjNTVhMDYyOTVjZTg3MGIwNzAyOWJmY2RiMmRjZTI4ZDk1OWYyODE1YjE2ZjgxNzk4XCIsXCI0ODNhZGE3NzI2YTNjNDY1NWRhNGZiZmMwZTExMDhhOGZkMTdiNDQ4YTY4NTU0MTk5YzQ3ZDA4ZmZiMTBkNGI4XCIsdV19KX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhcInN0cmluZ1wiPT10eXBlb2YgdCYmKGYoby5jdXJ2ZXMuaGFzT3duUHJvcGVydHkodCksXCJVbmtub3duIGN1cnZlIFwiK3QpLHQ9by5jdXJ2ZXNbdF0pLHQgaW5zdGFuY2VvZiBvLmN1cnZlcy5QcmVzZXRDdXJ2ZSYmKHQ9e2N1cnZlOnR9KSx0aGlzLmN1cnZlPXQuY3VydmUuY3VydmUsdGhpcy5uPXRoaXMuY3VydmUubix0aGlzLm5oPXRoaXMubi51c2hybigxKSx0aGlzLmc9dGhpcy5jdXJ2ZS5nLHRoaXMuZz10LmN1cnZlLmcsdGhpcy5nLnByZWNvbXB1dGUodC5jdXJ2ZS5uLmJpdExlbmd0aCgpKzEpLHZvaWQodGhpcy5oYXNoPXQuaGFzaHx8dC5jdXJ2ZS5oYXNoKSk6bmV3IG4odCl9dmFyIGk9cigzMCksbz1yKDIyKSxhPW8udXRpbHMsZj1hLmFzc2VydCxzPXIoNTUxKSx1PXIoNTUyKTt0LmV4cG9ydHM9bixuLnByb3RvdHlwZS5rZXlQYWlyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgcyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21Qcml2YXRlKHRoaXMsdCxlKX0sbi5wcm90b3R5cGUua2V5RnJvbVB1YmxpYz1mdW5jdGlvbih0LGUpe3JldHVybiBzLmZyb21QdWJsaWModGhpcyx0LGUpfSxuLnByb3RvdHlwZS5nZW5LZXlQYWlyPWZ1bmN0aW9uKHQpe3R8fCh0PXt9KTtmb3IodmFyIGU9bmV3IG8uaG1hY0RSQkcoe2hhc2g6dGhpcy5oYXNoLHBlcnM6dC5wZXJzLGVudHJvcHk6dC5lbnRyb3B5fHxvLnJhbmQodGhpcy5oYXNoLmhtYWNTdHJlbmd0aCksbm9uY2U6dGhpcy5uLnRvQXJyYXkoKX0pLHI9dGhpcy5uLmJ5dGVMZW5ndGgoKSxuPXRoaXMubi5zdWIobmV3IGkoMikpOzspe3ZhciBhPW5ldyBpKGUuZ2VuZXJhdGUocikpO2lmKCEoYS5jbXAobik+MCkpcmV0dXJuIGEuaWFkZG4oMSksdGhpcy5rZXlGcm9tUHJpdmF0ZShhKX19LG4ucHJvdG90eXBlLl90cnVuY2F0ZVRvTj1mdW5jdGlvbih0LGUpe3ZhciByPTgqdC5ieXRlTGVuZ3RoKCktdGhpcy5uLmJpdExlbmd0aCgpO3JldHVybiByPjAmJih0PXQudXNocm4ocikpLCFlJiZ0LmNtcCh0aGlzLm4pPj0wP3Quc3ViKHRoaXMubik6dH0sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUscixuKXtcIm9iamVjdFwiPT10eXBlb2YgciYmKG49cixyPW51bGwpLG58fChuPXt9KSxlPXRoaXMua2V5RnJvbVByaXZhdGUoZSxyKSx0PXRoaXMuX3RydW5jYXRlVG9OKG5ldyBpKHQsMTYpKTtmb3IodmFyIGE9dGhpcy5uLmJ5dGVMZW5ndGgoKSxmPWUuZ2V0UHJpdmF0ZSgpLnRvQXJyYXkoXCJiZVwiLGEpLHM9dC50b0FycmF5KFwiYmVcIixhKSxoPW5ldyBvLmhtYWNEUkJHKHtoYXNoOnRoaXMuaGFzaCxlbnRyb3B5OmYsbm9uY2U6cyxwZXJzOm4ucGVycyxwZXJzRW5jOm4ucGVyc0VuY30pLGM9dGhpcy5uLnN1YihuZXcgaSgxKSksZD0wOyEwO2QrKyl7dmFyIGw9bi5rP24uayhkKTpuZXcgaShoLmdlbmVyYXRlKHRoaXMubi5ieXRlTGVuZ3RoKCkpKTtpZihsPXRoaXMuX3RydW5jYXRlVG9OKGwsITApLCEobC5jbXBuKDEpPD0wfHxsLmNtcChjKT49MCkpe3ZhciBwPXRoaXMuZy5tdWwobCk7aWYoIXAuaXNJbmZpbml0eSgpKXt2YXIgYj1wLmdldFgoKSx2PWIudW1vZCh0aGlzLm4pO2lmKDAhPT12LmNtcG4oMCkpe3ZhciB5PWwuaW52bSh0aGlzLm4pLm11bCh2Lm11bChlLmdldFByaXZhdGUoKSkuaWFkZCh0KSk7aWYoeT15LnVtb2QodGhpcy5uKSwwIT09eS5jbXBuKDApKXt2YXIgbT0ocC5nZXRZKCkuaXNPZGQoKT8xOjApfCgwIT09Yi5jbXAodik/MjowKTtyZXR1cm4gbi5jYW5vbmljYWwmJnkuY21wKHRoaXMubmgpPjAmJih5PXRoaXMubi5zdWIoeSksbV49MSksbmV3IHUoe3I6dixzOnkscmVjb3ZlcnlQYXJhbTptfSl9fX19fX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSxyLG4pe3Q9dGhpcy5fdHJ1bmNhdGVUb04obmV3IGkodCwxNikpLHI9dGhpcy5rZXlGcm9tUHVibGljKHIsbiksZT1uZXcgdShlLFwiaGV4XCIpO3ZhciBvPWUucixhPWUucztpZihvLmNtcG4oMSk8MHx8by5jbXAodGhpcy5uKT49MClyZXR1cm4hMTtpZihhLmNtcG4oMSk8MHx8YS5jbXAodGhpcy5uKT49MClyZXR1cm4hMTt2YXIgZj1hLmludm0odGhpcy5uKSxzPWYubXVsKHQpLnVtb2QodGhpcy5uKSxoPWYubXVsKG8pLnVtb2QodGhpcy5uKTtpZighdGhpcy5jdXJ2ZS5fbWF4d2VsbFRyaWNrKXt2YXIgYz10aGlzLmcubXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJjA9PT1jLmdldFgoKS51bW9kKHRoaXMubikuY21wKG8pfXZhciBjPXRoaXMuZy5qbXVsQWRkKHMsci5nZXRQdWJsaWMoKSxoKTtyZXR1cm4hYy5pc0luZmluaXR5KCkmJmMuZXFYVG9QKG8pfSxuLnByb3RvdHlwZS5yZWNvdmVyUHViS2V5PWZ1bmN0aW9uKHQsZSxyLG4pe2YoKDMmcik9PT1yLFwiVGhlIHJlY292ZXJ5IHBhcmFtIGlzIG1vcmUgdGhhbiB0d28gYml0c1wiKSxlPW5ldyB1KGUsbik7dmFyIG89dGhpcy5uLGE9bmV3IGkodCkscz1lLnIsaD1lLnMsYz0xJnIsZD1yPj4xO2lmKHMuY21wKHRoaXMuY3VydmUucC51bW9kKHRoaXMuY3VydmUubikpPj0wJiZkKXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHNlbmNvbmQga2V5IGNhbmRpbmF0ZVwiKTtzPWQ/dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMuYWRkKHRoaXMuY3VydmUubiksYyk6dGhpcy5jdXJ2ZS5wb2ludEZyb21YKHMsYyk7dmFyIGw9ZS5yLmludm0obykscD1vLnN1YihhKS5tdWwobCkudW1vZChvKSxiPWgubXVsKGwpLnVtb2Qobyk7cmV0dXJuIHRoaXMuZy5tdWxBZGQocCxzLGIpfSxuLnByb3RvdHlwZS5nZXRLZXlSZWNvdmVyeVBhcmFtPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKGU9bmV3IHUoZSxuKSxudWxsIT09ZS5yZWNvdmVyeVBhcmFtKXJldHVybiBlLnJlY292ZXJ5UGFyYW07Zm9yKHZhciBpPTA7aTw0O2krKyl7dmFyIG87dHJ5e289dGhpcy5yZWNvdmVyUHViS2V5KHQsZSxpKX1jYXRjaCh0KXtjb250aW51ZX1pZihvLmVxKHIpKXJldHVybiBpfXRocm93IG5ldyBFcnJvcihcIlVuYWJsZSB0byBmaW5kIHZhbGlkIHJlY292ZXJ5IGZhY3RvclwiKX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7dGhpcy5lYz10LHRoaXMucHJpdj1udWxsLHRoaXMucHViPW51bGwsZS5wcml2JiZ0aGlzLl9pbXBvcnRQcml2YXRlKGUucHJpdixlLnByaXZFbmMpLGUucHViJiZ0aGlzLl9pbXBvcnRQdWJsaWMoZS5wdWIsZS5wdWJFbmMpfXZhciBpPXIoMzApO3QuZXhwb3J0cz1uLG4uZnJvbVB1YmxpYz1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHViOmUscHViRW5jOnJ9KX0sbi5mcm9tUHJpdmF0ZT1mdW5jdGlvbih0LGUscil7cmV0dXJuIGUgaW5zdGFuY2VvZiBuP2U6bmV3IG4odCx7cHJpdjplLHByaXZFbmM6cn0pfSxuLnByb3RvdHlwZS52YWxpZGF0ZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuZ2V0UHVibGljKCk7cmV0dXJuIHQuaXNJbmZpbml0eSgpP3tyZXN1bHQ6ITEscmVhc29uOlwiSW52YWxpZCBwdWJsaWMga2V5XCJ9OnQudmFsaWRhdGUoKT90Lm11bCh0aGlzLmVjLmN1cnZlLm4pLmlzSW5maW5pdHkoKT97cmVzdWx0OiEwLHJlYXNvbjpudWxsfTp7cmVzdWx0OiExLHJlYXNvbjpcIlB1YmxpYyBrZXkgKiBOICE9IE9cIn06e3Jlc3VsdDohMSxyZWFzb246XCJQdWJsaWMga2V5IGlzIG5vdCBhIHBvaW50XCJ9fSxuLnByb3RvdHlwZS5nZXRQdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm5cInN0cmluZ1wiPT10eXBlb2YgdCYmKGU9dCx0PW51bGwpLHRoaXMucHVifHwodGhpcy5wdWI9dGhpcy5lYy5nLm11bCh0aGlzLnByaXYpKSxlP3RoaXMucHViLmVuY29kZShlLHQpOnRoaXMucHVifSxuLnByb3RvdHlwZS5nZXRQcml2YXRlPWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P3RoaXMucHJpdi50b1N0cmluZygxNiwyKTp0aGlzLnByaXZ9LG4ucHJvdG90eXBlLl9pbXBvcnRQcml2YXRlPWZ1bmN0aW9uKHQsZSl7dGhpcy5wcml2PW5ldyBpKHQsZXx8MTYpLHRoaXMucHJpdj10aGlzLnByaXYudW1vZCh0aGlzLmVjLmN1cnZlLm4pfSxuLnByb3RvdHlwZS5faW1wb3J0UHVibGljPWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQueHx8dC55P3ZvaWQodGhpcy5wdWI9dGhpcy5lYy5jdXJ2ZS5wb2ludCh0LngsdC55KSk6dm9pZCh0aGlzLnB1Yj10aGlzLmVjLmN1cnZlLmRlY29kZVBvaW50KHQsZSkpfSxuLnByb3RvdHlwZS5kZXJpdmU9ZnVuY3Rpb24odCl7cmV0dXJuIHQubXVsKHRoaXMucHJpdikuZ2V0WCgpfSxuLnByb3RvdHlwZS5zaWduPWZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdGhpcy5lYy5zaWduKHQsdGhpcyxlLHIpfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5lYy52ZXJpZnkodCxlLHRoaXMpfSxuLnByb3RvdHlwZS5pbnNwZWN0PWZ1bmN0aW9uKCl7cmV0dXJuXCI8S2V5IHByaXY6IFwiKyh0aGlzLnByaXYmJnRoaXMucHJpdi50b1N0cmluZygxNiwyKSkrXCIgcHViOiBcIisodGhpcy5wdWImJnRoaXMucHViLmluc3BlY3QoKSkrXCIgPlwifX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXtyZXR1cm4gdCBpbnN0YW5jZW9mIG4/dDp2b2lkKHRoaXMuX2ltcG9ydERFUih0LGUpfHwoYyh0LnImJnQucyxcIlNpZ25hdHVyZSB3aXRob3V0IHIgb3Igc1wiKSx0aGlzLnI9bmV3IHModC5yLDE2KSx0aGlzLnM9bmV3IHModC5zLDE2KSx2b2lkIDA9PT10LnJlY292ZXJ5UGFyYW0/dGhpcy5yZWNvdmVyeVBhcmFtPW51bGw6dGhpcy5yZWNvdmVyeVBhcmFtPXQucmVjb3ZlcnlQYXJhbSkpfWZ1bmN0aW9uIGkoKXt0aGlzLnBsYWNlPTB9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPXRbZS5wbGFjZSsrXTtpZighKDEyOCZyKSlyZXR1cm4gcjtmb3IodmFyIG49MTUmcixpPTAsbz0wLGE9ZS5wbGFjZTtvPG47bysrLGErKylpPDw9OCxpfD10W2FdO3JldHVybiBlLnBsYWNlPWEsaX1mdW5jdGlvbiBhKHQpe2Zvcih2YXIgZT0wLHI9dC5sZW5ndGgtMTshdFtlXSYmISgxMjgmdFtlKzFdKSYmZTxyOyllKys7cmV0dXJuIDA9PT1lP3Q6dC5zbGljZShlKX1mdW5jdGlvbiBmKHQsZSl7aWYoZTwxMjgpcmV0dXJuIHZvaWQgdC5wdXNoKGUpO3ZhciByPTErKE1hdGgubG9nKGUpL01hdGguTE4yPj4+Myk7Zm9yKHQucHVzaCgxMjh8cik7LS1yOyl0LnB1c2goZT4+PihyPDwzKSYyNTUpO3QucHVzaChlKX12YXIgcz1yKDMwKSx1PXIoMjIpLGg9dS51dGlscyxjPWguYXNzZXJ0O3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLl9pbXBvcnRERVI9ZnVuY3Rpb24odCxlKXt0PWgudG9BcnJheSh0LGUpO3ZhciByPW5ldyBpO2lmKDQ4IT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBuPW8odCxyKTtpZihuK3IucGxhY2UhPT10Lmxlbmd0aClyZXR1cm4hMTtpZigyIT09dFtyLnBsYWNlKytdKXJldHVybiExO3ZhciBhPW8odCxyKSxmPXQuc2xpY2Uoci5wbGFjZSxhK3IucGxhY2UpO2lmKHIucGxhY2UrPWEsMiE9PXRbci5wbGFjZSsrXSlyZXR1cm4hMTt2YXIgdT1vKHQscik7aWYodC5sZW5ndGghPT11K3IucGxhY2UpcmV0dXJuITE7dmFyIGM9dC5zbGljZShyLnBsYWNlLHUrci5wbGFjZSk7cmV0dXJuIDA9PT1mWzBdJiYxMjgmZlsxXSYmKGY9Zi5zbGljZSgxKSksMD09PWNbMF0mJjEyOCZjWzFdJiYoYz1jLnNsaWNlKDEpKSx0aGlzLnI9bmV3IHMoZiksdGhpcy5zPW5ldyBzKGMpLHRoaXMucmVjb3ZlcnlQYXJhbT1udWxsLCEwfSxuLnByb3RvdHlwZS50b0RFUj1mdW5jdGlvbih0KXt2YXIgZT10aGlzLnIudG9BcnJheSgpLHI9dGhpcy5zLnRvQXJyYXkoKTtmb3IoMTI4JmVbMF0mJihlPVswXS5jb25jYXQoZSkpLDEyOCZyWzBdJiYocj1bMF0uY29uY2F0KHIpKSxlPWEoZSkscj1hKHIpOyEoclswXXx8MTI4JnJbMV0pOylyPXIuc2xpY2UoMSk7dmFyIG49WzJdO2YobixlLmxlbmd0aCksbj1uLmNvbmNhdChlKSxuLnB1c2goMiksZihuLHIubGVuZ3RoKTt2YXIgaT1uLmNvbmNhdChyKSxvPVs0OF07cmV0dXJuIGYobyxpLmxlbmd0aCksbz1vLmNvbmNhdChpKSxoLmVuY29kZShvLHQpfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoZihcImVkMjU1MTlcIj09PXQsXCJvbmx5IHRlc3RlZCB3aXRoIGVkMjU1MTkgc28gZmFyXCIpLCEodGhpcyBpbnN0YW5jZW9mIG4pKXJldHVybiBuZXcgbih0KTt2YXIgdD1vLmN1cnZlc1t0XS5jdXJ2ZTt0aGlzLmN1cnZlPXQsdGhpcy5nPXQuZyx0aGlzLmcucHJlY29tcHV0ZSh0Lm4uYml0TGVuZ3RoKCkrMSksdGhpcy5wb2ludENsYXNzPXQucG9pbnQoKS5jb25zdHJ1Y3Rvcix0aGlzLmVuY29kaW5nTGVuZ3RoPU1hdGguY2VpbCh0Lm4uYml0TGVuZ3RoKCkvOCksdGhpcy5oYXNoPWkuc2hhNTEyfXZhciBpPXIoNTApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLnBhcnNlQnl0ZXMsdT1yKDU1NCksaD1yKDU1NSk7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0LGUpe3Q9cyh0KTt2YXIgcj10aGlzLmtleUZyb21TZWNyZXQoZSksbj10aGlzLmhhc2hJbnQoci5tZXNzYWdlUHJlZml4KCksdCksaT10aGlzLmcubXVsKG4pLG89dGhpcy5lbmNvZGVQb2ludChpKSxhPXRoaXMuaGFzaEludChvLHIucHViQnl0ZXMoKSx0KS5tdWwoci5wcml2KCkpLGY9bi5hZGQoYSkudW1vZCh0aGlzLmN1cnZlLm4pO3JldHVybiB0aGlzLm1ha2VTaWduYXR1cmUoe1I6aSxTOmYsUmVuY29kZWQ6b30pfSxuLnByb3RvdHlwZS52ZXJpZnk9ZnVuY3Rpb24odCxlLHIpe3Q9cyh0KSxlPXRoaXMubWFrZVNpZ25hdHVyZShlKTt2YXIgbj10aGlzLmtleUZyb21QdWJsaWMociksaT10aGlzLmhhc2hJbnQoZS5SZW5jb2RlZCgpLG4ucHViQnl0ZXMoKSx0KSxvPXRoaXMuZy5tdWwoZS5TKCkpLGE9ZS5SKCkuYWRkKG4ucHViKCkubXVsKGkpKTtyZXR1cm4gYS5lcShvKX0sbi5wcm90b3R5cGUuaGFzaEludD1mdW5jdGlvbigpe2Zvcih2YXIgdD10aGlzLmhhc2goKSxlPTA7ZTxhcmd1bWVudHMubGVuZ3RoO2UrKyl0LnVwZGF0ZShhcmd1bWVudHNbZV0pO3JldHVybiBhLmludEZyb21MRSh0LmRpZ2VzdCgpKS51bW9kKHRoaXMuY3VydmUubil9LG4ucHJvdG90eXBlLmtleUZyb21QdWJsaWM9ZnVuY3Rpb24odCl7cmV0dXJuIHUuZnJvbVB1YmxpYyh0aGlzLHQpfSxuLnByb3RvdHlwZS5rZXlGcm9tU2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiB1LmZyb21TZWNyZXQodGhpcyx0KX0sbi5wcm90b3R5cGUubWFrZVNpZ25hdHVyZT1mdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIGg/dDpuZXcgaCh0aGlzLHQpfSxuLnByb3RvdHlwZS5lbmNvZGVQb2ludD1mdW5jdGlvbih0KXt2YXIgZT10LmdldFkoKS50b0FycmF5KFwibGVcIix0aGlzLmVuY29kaW5nTGVuZ3RoKTtyZXR1cm4gZVt0aGlzLmVuY29kaW5nTGVuZ3RoLTFdfD10LmdldFgoKS5pc09kZCgpPzEyODowLGV9LG4ucHJvdG90eXBlLmRlY29kZVBvaW50PWZ1bmN0aW9uKHQpe3Q9YS5wYXJzZUJ5dGVzKHQpO3ZhciBlPXQubGVuZ3RoLTEscj10LnNsaWNlKDAsZSkuY29uY2F0KHRbZV0mLTEyOSksbj0wIT09KDEyOCZ0W2VdKSxpPWEuaW50RnJvbUxFKHIpO3JldHVybiB0aGlzLmN1cnZlLnBvaW50RnJvbVkoaSxuKX0sbi5wcm90b3R5cGUuZW5jb2RlSW50PWZ1bmN0aW9uKHQpe3JldHVybiB0LnRvQXJyYXkoXCJsZVwiLHRoaXMuZW5jb2RpbmdMZW5ndGgpfSxuLnByb3RvdHlwZS5kZWNvZGVJbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGEuaW50RnJvbUxFKHQpfSxuLnByb3RvdHlwZS5pc1BvaW50PWZ1bmN0aW9uKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcy5wb2ludENsYXNzfX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCxlKXt0aGlzLmVkZHNhPXQsdGhpcy5fc2VjcmV0PWYoZS5zZWNyZXQpLHQuaXNQb2ludChlLnB1Yik/dGhpcy5fcHViPWUucHViOnRoaXMuX3B1YkJ5dGVzPWYoZS5wdWIpfXZhciBpPXIoMjIpLG89aS51dGlscyxhPW8uYXNzZXJ0LGY9by5wYXJzZUJ5dGVzLHM9by5jYWNoZWRQcm9wZXJ0eTtuLmZyb21QdWJsaWM9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtwdWI6ZX0pfSxuLmZyb21TZWNyZXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG4/ZTpuZXcgbih0LHtzZWNyZXQ6ZX0pfSxuLnByb3RvdHlwZS5zZWNyZXQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fc2VjcmV0fSxzKG4sXCJwdWJCeXRlc1wiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlUG9pbnQodGhpcy5wdWIoKSl9KSxzKG4sXCJwdWJcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wdWJCeXRlcz90aGlzLmVkZHNhLmRlY29kZVBvaW50KHRoaXMuX3B1YkJ5dGVzKTp0aGlzLmVkZHNhLmcubXVsKHRoaXMucHJpdigpKX0pLHMobixcInByaXZCeXRlc1wiLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5lZGRzYSxlPXRoaXMuaGFzaCgpLHI9dC5lbmNvZGluZ0xlbmd0aC0xLG49ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpO3JldHVybiBuWzBdJj0yNDgsbltyXSY9MTI3LG5bcl18PTY0LG59KSxzKG4sXCJwcml2XCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5kZWNvZGVJbnQodGhpcy5wcml2Qnl0ZXMoKSl9KSxzKG4sXCJoYXNoXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5oYXNoKCkudXBkYXRlKHRoaXMuc2VjcmV0KCkpLmRpZ2VzdCgpfSkscyhuLFwibWVzc2FnZVByZWZpeFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaGFzaCgpLnNsaWNlKHRoaXMuZWRkc2EuZW5jb2RpbmdMZW5ndGgpfSksbi5wcm90b3R5cGUuc2lnbj1mdW5jdGlvbih0KXtyZXR1cm4gYSh0aGlzLl9zZWNyZXQsXCJLZXlQYWlyIGNhbiBvbmx5IHZlcmlmeVwiKSx0aGlzLmVkZHNhLnNpZ24odCx0aGlzKX0sbi5wcm90b3R5cGUudmVyaWZ5PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIHRoaXMuZWRkc2EudmVyaWZ5KHQsZSx0aGlzKX0sbi5wcm90b3R5cGUuZ2V0U2VjcmV0PWZ1bmN0aW9uKHQpe3JldHVybiBhKHRoaXMuX3NlY3JldCxcIktleVBhaXIgaXMgcHVibGljIG9ubHlcIiksby5lbmNvZGUodGhpcy5zZWNyZXQoKSx0KX0sbi5wcm90b3R5cGUuZ2V0UHVibGljPWZ1bmN0aW9uKHQpe3JldHVybiBvLmVuY29kZSh0aGlzLnB1YkJ5dGVzKCksdCl9LHQuZXhwb3J0cz1ufSxmdW5jdGlvbih0LGUscil7XCJ1c2Ugc3RyaWN0XCI7ZnVuY3Rpb24gbih0LGUpe3RoaXMuZWRkc2E9dCxcIm9iamVjdFwiIT10eXBlb2YgZSYmKGU9dShlKSksQXJyYXkuaXNBcnJheShlKSYmKGU9e1I6ZS5zbGljZSgwLHQuZW5jb2RpbmdMZW5ndGgpLFM6ZS5zbGljZSh0LmVuY29kaW5nTGVuZ3RoKX0pLGYoZS5SJiZlLlMsXCJTaWduYXR1cmUgd2l0aG91dCBSIG9yIFNcIiksdC5pc1BvaW50KGUuUikmJih0aGlzLl9SPWUuUiksZS5TIGluc3RhbmNlb2YgaSYmKHRoaXMuX1M9ZS5TKSx0aGlzLl9SZW5jb2RlZD1BcnJheS5pc0FycmF5KGUuUik/ZS5SOmUuUmVuY29kZWQsdGhpcy5fU2VuY29kZWQ9QXJyYXkuaXNBcnJheShlLlMpP2UuUzplLlNlbmNvZGVkfXZhciBpPXIoMzApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQscz1hLmNhY2hlZFByb3BlcnR5LHU9YS5wYXJzZUJ5dGVzO3MobixcIlNcIixmdW5jdGlvbigpe3JldHVybiB0aGlzLmVkZHNhLmRlY29kZUludCh0aGlzLlNlbmNvZGVkKCkpfSkscyhuLFwiUlwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZGVjb2RlUG9pbnQodGhpcy5SZW5jb2RlZCgpKX0pLHMobixcIlJlbmNvZGVkXCIsZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGRzYS5lbmNvZGVQb2ludCh0aGlzLlIoKSl9KSxzKG4sXCJTZW5jb2RlZFwiLGZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRkc2EuZW5jb2RlSW50KHRoaXMuUygpKX0pLG4ucHJvdG90eXBlLnRvQnl0ZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5SZW5jb2RlZCgpLmNvbmNhdCh0aGlzLlNlbmNvZGVkKCkpfSxuLnByb3RvdHlwZS50b0hleD1mdW5jdGlvbigpe3JldHVybiBhLmVuY29kZSh0aGlzLnRvQnl0ZXMoKSxcImhleFwiKS50b1VwcGVyQ2FzZSgpfSx0LmV4cG9ydHM9bn0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4odCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpcmV0dXJuIG5ldyBuKHQpO3RoaXMuaGFzaD10Lmhhc2gsdGhpcy5wcmVkUmVzaXN0PSEhdC5wcmVkUmVzaXN0LHRoaXMub3V0TGVuPXRoaXMuaGFzaC5vdXRTaXplLHRoaXMubWluRW50cm9weT10Lm1pbkVudHJvcHl8fHRoaXMuaGFzaC5obWFjU3RyZW5ndGgsdGhpcy5yZXNlZWQ9bnVsbCx0aGlzLnJlc2VlZEludGVydmFsPW51bGwsdGhpcy5LPW51bGwsdGhpcy5WPW51bGw7dmFyIGU9YS50b0FycmF5KHQuZW50cm9weSx0LmVudHJvcHlFbmMpLHI9YS50b0FycmF5KHQubm9uY2UsdC5ub25jZUVuYyksaT1hLnRvQXJyYXkodC5wZXJzLHQucGVyc0VuYyk7ZihlLmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX2luaXQoZSxyLGkpfXZhciBpPXIoNTApLG89cigyMiksYT1vLnV0aWxzLGY9YS5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXQuY29uY2F0KGUpLmNvbmNhdChyKTt0aGlzLks9bmV3IEFycmF5KHRoaXMub3V0TGVuLzgpLHRoaXMuVj1uZXcgQXJyYXkodGhpcy5vdXRMZW4vOCk7Zm9yKHZhciBpPTA7aTx0aGlzLlYubGVuZ3RoO2krKyl0aGlzLktbaV09MCx0aGlzLlZbaV09MTt0aGlzLl91cGRhdGUobiksdGhpcy5yZXNlZWQ9MSx0aGlzLnJlc2VlZEludGVydmFsPTI4MTQ3NDk3NjcxMDY1Nn0sbi5wcm90b3R5cGUuX2htYWM9ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGkuaG1hYyh0aGlzLmhhc2gsdGhpcy5LKX0sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFswXSk7dCYmKGU9ZS51cGRhdGUodCkpLHRoaXMuSz1lLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksdCYmKHRoaXMuSz10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikudXBkYXRlKFsxXSkudXBkYXRlKHQpLmRpZ2VzdCgpLHRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCkpfSxuLnByb3RvdHlwZS5yZXNlZWQ9ZnVuY3Rpb24odCxlLHIsbil7XCJzdHJpbmdcIiE9dHlwZW9mIGUmJihuPXIscj1lLGU9bnVsbCksdD1hLnRvQnVmZmVyKHQsZSkscj1hLnRvQnVmZmVyKHIsbiksZih0Lmxlbmd0aD49dGhpcy5taW5FbnRyb3B5LzgsXCJOb3QgZW5vdWdoIGVudHJvcHkuIE1pbmltdW0gaXM6IFwiK3RoaXMubWluRW50cm9weStcIiBiaXRzXCIpLHRoaXMuX3VwZGF0ZSh0LmNvbmNhdChyfHxbXSkpLHRoaXMucmVzZWVkPTF9LG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQsZSxyLG4pe2lmKHRoaXMucmVzZWVkPnRoaXMucmVzZWVkSW50ZXJ2YWwpdGhyb3cgbmV3IEVycm9yKFwiUmVzZWVkIGlzIHJlcXVpcmVkXCIpO1wic3RyaW5nXCIhPXR5cGVvZiBlJiYobj1yLHI9ZSxlPW51bGwpLHImJihyPWEudG9BcnJheShyLG4pLHRoaXMuX3VwZGF0ZShyKSk7Zm9yKHZhciBpPVtdO2kubGVuZ3RoPHQ7KXRoaXMuVj10aGlzLl9obWFjKCkudXBkYXRlKHRoaXMuVikuZGlnZXN0KCksaT1pLmNvbmNhdCh0aGlzLlYpO3ZhciBvPWkuc2xpY2UoMCx0KTtyZXR1cm4gdGhpcy5fdXBkYXRlKHIpLHRoaXMucmVzZWVkKyssYS5lbmNvZGUobyxlKX19LGZ1bmN0aW9uKHQsZSl7dC5leHBvcnRzPXtkb3VibGVzOntzdGVwOjQscG9pbnRzOltbXCJlNjBmY2U5M2I1OWU5ZWM1MzAxMWFhYmMyMWMyM2U5N2IyYTMxMzY5Yjg3YTVhZTljNDRlZTg5ZTJhNmRlYzBhXCIsXCJmN2UzNTA3Mzk5ZTU5NTkyOWRiOTlmMzRmNTc5MzcxMDEyOTY4OTFlNDRkMjNmMGJlMWYzMmNjZTY5NjE2ODIxXCJdLFtcIjgyODIyNjMyMTJjNjA5ZDllYTJhNmUzZTE3MmRlMjM4ZDhjMzljYWJkNWFjMWNhMTA2NDZlMjNmZDVmNTE1MDhcIixcIjExZjhhODA5ODU1N2RmZTQ1ZTgyNTZlODMwYjYwYWNlNjJkNjEzYWMyZjdiMTdiZWQzMWI2ZWFmZjZlMjZjYWZcIl0sW1wiMTc1ZTE1OWY3MjhiODY1YTcyZjk5Y2M2YzZmYzg0NmRlMGI5MzgzM2ZkMjIyMmVkNzNmY2U1YjU1MWU1YjczOVwiLFwiZDM1MDZlMGQ5ZTNjNzllYmE0ZWY5N2E1MWZmNzFmNWVhY2I1OTU1YWRkMjQzNDVjNmVmYTZmZmVlOWZlZDY5NVwiXSxbXCIzNjNkOTBkNDQ3YjAwYzljOTljZWFjMDViNjI2MmVlMDUzNDQxYzdlNTU1NTJmZmU1MjZiYWQ4ZjgzZmY0NjQwXCIsXCI0ZTI3M2FkZmM3MzIyMjE5NTNiNDQ1Mzk3ZjMzNjMxNDViOWE4OTAwODE5OWVjYjYyMDAzYzdmM2JlZTlkZTlcIl0sW1wiOGI0YjVmMTY1ZGYzYzJiZThjNjI0NGI1Yjc0NTYzODg0M2U0YTc4MWExNWJjZDFiNjlmNzlhNTVkZmZkZjgwY1wiLFwiNGFhZDBhNmY2OGQzMDhiNGIzZmJkNzgxM2FiMGRhMDRmOWUzMzY1NDYxNjJlZTU2YjNlZmYwYzY1ZmQ0ZmQzNlwiXSxbXCI3MjNjYmFhNmU1ZGI5OTZkNmJmNzcxYzAwYmQ1NDhjN2I3MDBkYmZmYTZjMGU3N2JjYjYxMTU5MjUyMzJmY2RhXCIsXCI5NmU4NjdiNTU5NWNjNDk4YTkyMTEzNzQ4ODgyNGQ2ZTI2NjBhMDY1Mzc3OTQ5NDgwMWRjMDY5ZDllYjM5ZjVmXCJdLFtcImVlYmZhNGQ0OTNiZWJmOThiYTVmZWVjODEyYzJkM2I1MDk0Nzk2MTIzN2E5MTk4MzlhNTMzZWNhMGU3ZGQ3ZmFcIixcIjVkOWE4Y2EzOTcwZWYwZjI2OWVlN2VkYWYxNzgwODlkOWFlNGNkYzNhNzExZjcxMmRkZmQ0ZmRhZTFkZTg5OTlcIl0sW1wiMTAwZjQ0ZGE2OTZlNzE2NzI3OTFkMGEwOWI3YmRlNDU5ZjEyMTVhMjliM2MwM2JmZWZkNzgzNWIzOWE0OGRiMFwiLFwiY2RkOWUxMzE5MmEwMGI3NzJlYzhmMzMwMGMwOTA2NjZiN2ZmNGExOGZmNTE5NWFjMGZiZDVjZDYyYmM2NWEwOVwiXSxbXCJlMTAzMWJlMjYyYzdlZDFiMWRjOTIyN2E0YTA0YzAxN2E3N2Y4ZDQ0NjRmM2IzODUyYzhhY2RlNmU1MzRmZDJkXCIsXCI5ZDcwNjE5Mjg5NDA0MDVlNmJiNmE0MTc2NTk3NTM1YWYyOTJkZDQxOWUxY2VkNzlhNDRmMThmMjk0NTZhMDBkXCJdLFtcImZlZWE2Y2FlNDZkNTViNTMwYWMyODM5ZjE0M2JkN2VjNWNmOGIyNjZhNDFkNmFmNTJkNWU2ODhkOTA5NDY5NmRcIixcImU1N2M2YjZjOTdkY2UxYmFiMDZlNGUxMmJmM2VjZDVjOTgxYzg5NTdjYzQxNDQyZDMxNTVkZWJmMTgwOTAwODhcIl0sW1wiZGE2N2E5MWQ5MTA0OWNkY2IzNjdiZTRiZTZmZmNhM2NmZWVkNjU3ZDgwODU4M2RlMzNmYTk3OGJjMWVjNmNiMVwiLFwiOWJhY2FhMzU0ODE2NDJiYzQxZjQ2M2Y3ZWM5NzgwZTVkZWM3YWRjNTA4Zjc0MGExN2U5ZWE4ZTI3YTY4YmUxZFwiXSxbXCI1MzkwNGZhYTBiMzM0Y2RkYTZlMDAwOTM1ZWYyMjE1MWVjMDhkMGY3YmIxMTA2OWY1NzU0NWNjYzFhMzdiN2MwXCIsXCI1YmMwODdkMGJjODAxMDZkODhjOWVjY2FjMjBkM2MxYzEzOTk5OTgxZTE0NDM0Njk5ZGNiMDk2YjAyMjc3MWM4XCJdLFtcIjhlN2JjZDBiZDM1OTgzYTc3MTljY2E3NzY0Y2E5MDY3NzliNTNhMDQzYTliOGJjYWVmZjk1OWY0M2FkODYwNDdcIixcIjEwYjc3NzBiMmEzZGE0YjM5NDAzMTA0MjBjYTk1MTQ1NzllODhlMmU0N2ZkNjhiM2VhMTAwNDdlODQ2MDM3MmFcIl0sW1wiMzg1ZWVkMzRjMWNkZmYyMWU2ZDA4MTg2ODliODFiZGU3MWE3ZjRmMTgzOTdlNjY5MGE4NDFlMTU5OWM0Mzg2MlwiLFwiMjgzYmViYzNlOGVhMjNmNTY3MDFkZTE5ZTllYmY0NTc2YjMwNGVlYzIwODZkYzhjYzA0NThmZTU1NDJlNTQ1M1wiXSxbXCI2ZjlkOWI4MDNlY2YxOTE2MzdjNzNhNDQxM2RmYTE4MGZkZGY4NGE1OTQ3ZmJjOWM2MDZlZDg2YzNmYWMzYTdcIixcIjdjODBjNjhlNjAzMDU5YmE2OWI4ZTJhMzBlNDVjNGQ0N2VhNGRkMmY1YzI4MTAwMmQ4Njg5MDYwM2E4NDIxNjBcIl0sW1wiMzMyMmQ0MDEyNDNjNGUyNTgyYTIxNDdjMTA0ZDZlY2JmNzc0ZDE2M2RiMGY1ZTUzMTNiN2UwZTc0MmQwZTZiZFwiLFwiNTZlNzA3OTdlOTY2NGVmNWJmYjAxOWJjNGRkYWY5YjcyODA1ZjYzZWEyODczYWY2MjRmM2EyZTk2YzI4YjJhMFwiXSxbXCI4NTY3MmM3ZDJkZTBiN2RhMmJkMTc3MGQ4OTY2NTg2ODc0MWIzZjlhZjc2NDMzOTc3MjFkNzRkMjgxMzRhYjgzXCIsXCI3YzQ4MWI5YjViNDNiMmViNjM3NDA0OWJmYTYyYzJlNWU3N2YxN2ZjYzUyOThmNDRjOGUzMDk0Zjc5MDMxM2E2XCJdLFtcIjk0OGJmODA5YjE5ODhhNDZiMDZjOWYxOTE5NDEzYjEwZjkyMjZjNjBmNjY4ODMyZmZkOTU5YWY2MGM4MmEwYVwiLFwiNTNhNTYyODU2ZGNiNjY0NmRjNmI3NGM1ZDFjMzQxOGM2ZDRkZmYwOGM5N2NkMmJlZDRjYjdmODhkOGM4ZTU4OVwiXSxbXCI2MjYwY2U3ZjQ2MTgwMWMzNGYwNjdjZTBmMDI4NzNhOGYxYjBlNDRkZmM2OTc1MmFjY2VjZDgxOWYzOGZkOGU4XCIsXCJiYzJkYTgyYjZmYTViNTcxYTdmMDkwNDk3NzZhMWVmN2VjZDI5MjIzODA1MWMxOThjMWE4NGU5NWIyYjRhZTE3XCJdLFtcImU1MDM3ZGUwYWZjMWQ4ZDQzZDgzNDg0MTRiYmY0MTAzMDQzZWM4ZjU3NWJmZGM0MzI5NTNjYzhkMjAzN2ZhMmRcIixcIjQ1NzE1MzRiYWE5NGQzYjVmOWY5OGQwOWZiOTkwYmRkYmQ1ZjViMDNlYzQ4MWYxMGUwZTVkYzg0MWQ3NTViZGFcIl0sW1wiZTA2MzcyYjBmNGEyMDdhZGY1ZWE5MDVlOGYxNzcxYjRlN2U4ZGJkMWM2YTZjNWI3MjU4NjZhMGFlNGZjZTcyNVwiLFwiN2E5MDg5NzRiY2UxOGNmZTEyYTI3YmIyYWQ1YTQ4OGNkNzQ4NGE3Nzg3MTA0ODcwYjI3MDM0Zjk0ZWVlMzFkZFwiXSxbXCIyMTNjN2E3MTVjZDVkNDUzNThkMGJiZjlkYzBjZTAyMjA0YjEwYmRkZTJhM2Y1ODU0MGFkNjkwOGQwNTU5NzU0XCIsXCI0YjZkYWQwYjVhZTQ2MjUwNzAxM2FkMDYyNDViYTE5MGJiNDg1MGY1ZjM2YTdlZWRkZmYyYzI3NTM0YjQ1OGYyXCJdLFtcIjRlN2MyNzJhN2FmNGIzNGU4ZGJiOTM1MmE1NDE5YTg3ZTI4MzhjNzBhZGM2MmNkZGYwY2MzYTNiMDhmYmQ1M2NcIixcIjE3NzQ5Yzc2NmM5ZDBiMThlMTZmZDA5ZjZkZWY2ODFiNTMwYjk2MTRiZmY3ZGQzM2UwYjM5NDE4MTdkY2FhZTZcIl0sW1wiZmVhNzRlM2RiZTc3OGIxYjEwZjIzOGFkNjE2ODZhYTVjNzZlM2RiMmJlNDMwNTc2MzI0MjdlMjg0MGZiMjdiNlwiLFwiNmUwNTY4ZGI5YjBiMTMyOTdjZjY3NGRlY2NiNmFmOTMxMjZiNTk2Yjk3M2Y3Yjc3NzAxZDNkYjdmMjNjYjk2ZlwiXSxbXCI3NmU2NDExM2Y2NzdjZjBlMTBhMjU3MGQ1OTk5NjhkMzE1NDRlMTc5Yjc2MDQzMjk1MmMwMmE0NDE3YmRkZTM5XCIsXCJjOTBkZGY4ZGVlNGU5NWNmNTc3MDY2ZDcwNjgxZjBkMzVlMmEzM2QyYjU2ZDIwMzJiNGIxNzUyZDE5MDFhYzAxXCJdLFtcImM3MzhjNTZiMDNiMmFiZTFlODI4MWJhYTc0M2Y4ZjlhOGY3Y2M2NDNkZjI2Y2JlZTNhYjE1MDI0MmJjYmI4OTFcIixcIjg5M2ZiNTc4OTUxYWQyNTM3ZjcxOGYyZWFjYmZiYmJiODIzMTRlZWY3ODgwY2ZlOTE3ZTczNWQ5Njk5YTg0YzNcIl0sW1wiZDg5NTYyNjU0OGI2NWI4MWUyNjRjNzYzN2M5NzI4NzdkMWQ3MmU1ZjNhOTI1MDE0MzcyZTlmNjU4OGY2YzE0YlwiLFwiZmViZmFhMzhmMmJjN2VhZTcyOGVjNjA4MThjMzQwZWIwMzQyOGQ2MzJiYjA2N2UxNzkzNjNlZDc1ZDdkOTkxZlwiXSxbXCJiOGRhOTQwMzJhOTU3NTE4ZWIwZjY0MzM1NzFlODc2MWNlZmZjNzM2OTNlODRlZGQ0OTE1MGE1NjRmNjc2ZTAzXCIsXCIyODA0ZGZhNDQ4MDVhMWU0ZDdjOTljYzk3NjI4MDhiMDkyY2M1ODRkOTVmZjNiNTExNDg4ZTRlNzRlZmRmNmU3XCJdLFtcImU4MGZlYTE0NDQxZmIzM2E3ZDhhZGFiOTQ3NWQ3ZmFiMjAxOWVmZmI1MTU2YTc5MmYxYTExNzc4ZTNjMGRmNWRcIixcImVlZDFkZTdmNjM4ZTAwNzcxZTg5NzY4Y2EzY2E5NDQ3MmQxNTVlODBhZjMyMmVhOWZjYjQyOTFiNmFjOWVjNzhcIl0sW1wiYTMwMTY5N2JkZmNkNzA0MzEzYmE0OGU1MWQ1Njc1NDNmMmExODIwMzFlZmQ2OTE1ZGRjMDdiYmNjNGUxNjA3MFwiLFwiNzM3MGY5MWNmYjY3ZTRmNTA4MTgwOWZhMjVkNDBmOWIxNzM1ZGJmN2MwYTExYTEzMGMwZDFhMDQxZTE3N2VhMVwiXSxbXCI5MGFkODViMzg5ZDZiOTM2NDYzZjlkMDUxMjY3OGRlMjA4Y2MzMzBiMTEzMDdmZmZhYjdhYzYzZTNmYjA0ZWQ0XCIsXCJlNTA3YTM2MjBhMzgyNjFhZmZkY2JkOTQyNzIyMmI4MzlhZWZhYmUxNTgyODk0ZDk5MWQ0ZDQ4Y2I2ZWYxNTBcIl0sW1wiOGY2OGI5ZDJmNjNiNWYzMzkyMzljMWFkOTgxZjE2MmVlODhjNTY3ODcyM2VhMzM1MWI3YjQ0NGM5ZWM0YzBkYVwiLFwiNjYyYTlmMmRiYTA2Mzk4NmRlMWQ5MGMyYjZiZTIxNWRiYmVhMmNmZTk1NTEwYmZkZjIzY2JmNzk1MDFmZmY4MlwiXSxbXCJlNGYzZmIwMTc2YWY4NWQ2NWZmOTlmZjkxOThjMzYwOTFmNDhlODY1MDM2ODFlM2U2Njg2ZmQ1MDUzMjMxZTExXCIsXCIxZTYzNjMzYWQwZWY0ZjFjMTY2MWE2ZDBlYTAyYjcyODZjYzdlNzRlYzk1MWQxYzk4MjJjMzg1NzZmZWI3M2JjXCJdLFtcIjhjMDBmYTliMThlYmYzMzFlYjk2MTUzN2E0NWE0MjY2YzcwMzRmMmYwZDRlMWQwNzE2ZmI2ZWFlMjBlYWUyOWVcIixcImVmYTQ3MjY3ZmVhNTIxYTFhOWRjMzQzYTM3MzZjOTc0YzJmYWRhZmE4MWUzNmM1NGU3ZDJhNGM2NjcwMjQxNGJcIl0sW1wiZTdhMjZjZTY5ZGQ0ODI5ZjNlMTBjZWMwYTllOThlZDMxNDNkMDg0ZjMwOGI5MmMwOTk3ZmRkZmM2MGNiM2U0MVwiLFwiMmE3NThlMzAwZmE3OTg0YjQ3MWIwMDZhMWFhZmJiMThkMGE2YjJjMDQyMGU4M2UyMGU4YTk0MjFjZjJjZmQ1MVwiXSxbXCJiNjQ1OWUwZWUzNjYyZWM4ZDIzNTQwYzIyM2JjYmRjNTcxY2JjYjk2N2Q3OTQyNGYzY2YyOWViM2RlNmI4MGVmXCIsXCI2N2M4NzZkMDZmM2UwNmRlMWRhZGYxNmU1NjYxZGIzYzRiM2FlNmQ0OGUzNWIyZmYzMGJmMGI2MWE3MWJhNDVcIl0sW1wiZDY4YTgwYzgyODBiYjg0MDc5MzIzNGFhMTE4ZjA2MjMxZDZmMWZjNjdlNzNjNWE1ZGVkYTBmNWI0OTY5NDNlOFwiLFwiZGI4YmE5ZmZmNGI1ODZkMDBjNGIxZjkxNzdiMGUyOGI1YjBlN2I4Zjc4NDUyOTVhMjk0Yzg0MjY2YjEzMzEyMFwiXSxbXCIzMjRhZWQ3ZGY2NWM4MDQyNTJkYzAyNzA5MDdhMzBiMDk2MTJhZWI5NzM0NDljZWE0MDk1OTgwZmMyOGQzZDVkXCIsXCI2NDhhMzY1Nzc0YjYxZjJmZjEzMGMwYzM1YWVjMWY0ZjE5MjEzYjBjN2UzMzI4NDM5NjcyMjRhZjk2YWI3Yzg0XCJdLFtcIjRkZjljMTQ5MTljZGU2MWY2ZDUxZGZkYmU1ZmVlNWRjZWVjNDE0M2JhOGQxY2E4ODhlOGJkMzczZmQwNTRjOTZcIixcIjM1ZWM1MTA5MmQ4NzI4MDUwOTc0YzIzYTFkODVkNGI1ZDUwNmNkYzI4ODQ5MDE5MmViYWMwNmNhZDEwZDVkXCJdLFtcIjljMzkxOWE4NGE0NzQ4NzBmYWVkOGE5YzFjYzY2MDIxNTIzNDg5MDU0ZDdmMDMwOGNiZmM5OWM4YWMxZjk4Y2RcIixcImRkYjg0ZjBmNGE0ZGRkNTc1ODRmMDQ0YmYyNjBlNjQxOTA1MzI2Zjc2YzY0YzhlNmJlN2U1ZTAzZDRmYzU5OWRcIl0sW1wiNjA1NzE3MGIxZGQxMmZkZjhkZTA1ZjI4MWQ4ZTA2YmI5MWUxNDkzYThiOTFkNGNjNWEyMTM4MjEyMGE5NTllNVwiLFwiOWExYWYwYjI2YTZhNDgwN2FkZDlhMmRhZjcxZGYyNjI0NjUxNTJiYzNlZTI0YzY1ZTg5OWJlOTMyMzg1YTJhOFwiXSxbXCJhNTc2ZGY4ZTIzYTA4NDExNDIxNDM5YTQ1MThkYTMxODgwY2VmMGZiYTdkNGRmMTJiMWE2OTczZWVjYjk0MjY2XCIsXCI0MGE2YmYyMGU3NjY0MGIyYzkyYjk3YWZlNThjZDgyYzQzMmUxMGE3ZjUxNGQ5ZjNlZThiZTExYWUxYjI4ZWM4XCJdLFtcIjc3NzhhNzhjMjhkZWMzZTMwYTA1ZmU5NjI5ZGU4YzM4YmIzMGQxZjVjZjlhM2EyMDhmNzYzODg5YmU1OGFkNzFcIixcIjM0NjI2ZDlhYjVhNWIyMmZmNzA5OGUxMmYyZmY1ODAwODdiMzg0MTFmZjI0YWM1NjNiNTEzZmMxZmQ5ZjQzYWNcIl0sW1wiOTI4OTU1ZWU2MzdhODQ0NjM3MjlmZDMwZTdhZmQyZWQ1Zjk2Mjc0ZTVhZDdlNWNiMDllZGE5YzA2ZDkwM2FjXCIsXCJjMjU2MjEwMDNkM2Y0MmE4MjdiNzhhMTMwOTNhOTVlZWFjM2QyNmVmYThhOGQ4M2ZjNTE4MGU5MzViY2QwOTFmXCJdLFtcIjg1ZDBmZWYzZWM2ZGIxMDkzOTkwNjRmM2EwZTNiMjg1NTY0NWI0YTkwN2FkMzU0NTI3YWFlNzUxNjNkODI3NTFcIixcIjFmMDM2NDg0MTNhMzhjMGJlMjlkNDk2ZTU4MmNmNTY2M2U4NzUxZTk2ODc3MzMxNTgyYzIzN2EyNGViMWY5NjJcIl0sW1wiZmYyYjBkY2U5N2VlY2U5N2MxYzliNjA0MTc5OGI4NWRmZGZiNmQ4ODgyZGEyMDMwOGY1NDA0ODI0NTI2MDg3ZVwiLFwiNDkzZDEzZmVmNTI0YmExODhhZjRjNGRjNTRkMDc5MzZjN2I3ZWQ2ZmI5MGUyY2ViMmM5NTFlMDFmMGMyOTkwN1wiXSxbXCI4MjdmYmJlNGIxZTg4MGVhOWVkMmIyZTYzMDFiMjEyYjU3ZjFlZTE0OGNkNmRkMjg3ODBlNWUyY2Y4NTZlMjQxXCIsXCJjNjBmOWM5MjNjNzI3YjBiNzFiZWYyYzY3ZDFkMTI2ODdmZjdhNjMxODY5MDMxNjZkNjA1YjY4YmFlYzI5M2VjXCJdLFtcImVhYTY0OWYyMWY1MWJkYmFlN2JlNGFlMzRjZTZlNTIxN2E1OGZkY2U3ZjQ3ZjlhYTdmM2I1OGZhMjEyMGUyYjNcIixcImJlMzI3OWVkNWJiYmIwM2FjNjlhODBmODk4NzlhYTVhMDFhNmI5NjVmMTNmN2U1OWQ0N2E1MzA1YmE1YWQ5M2RcIl0sW1wiZTRhNDJkNDNjNWNmMTY5ZDkzOTFkZjZkZWNmNDJlZTU0MWI2ZDhmMGM5YTEzNzQwMWUyMzYzMmRkYTM0ZDI0ZlwiLFwiNGQ5ZjkyZTcxNmQxYzczNTI2ZmM5OWNjZmI4YWQzNGNlODg2ZWVkZmE4ZDhlNGYxM2E3ZjcxMzFkZWJhOTQxNFwiXSxbXCIxZWM4MGZlZjM2MGNiZGQ5NTQxNjBmYWRhYjM1MmI2YjkyYjUzNTc2YTg4ZmVhNDk0NzE3M2I5ZDQzMDBiZjE5XCIsXCJhZWVmZTkzNzU2YjUzNDBkMmYzYTQ5NThhN2FiYmY1ZTAxNDZlNzdmNjI5NWEwN2I2NzFjZGMxY2MxMDdjZWZkXCJdLFtcIjE0NmE3NzhjMDQ2NzBjMmY5MWIwMGFmNDY4MGRmYThiY2UzNDkwNzE3ZDU4YmE4ODlkZGI1OTI4MzY2NjQyYmVcIixcImIzMThlMGVjMzM1NDAyOGFkZDY2OTgyN2Y5ZDRiMjg3MGFhYTk3MWQyZjdlNWVkMWQwYjI5NzQ4M2Q4M2VmZDBcIl0sW1wiZmE1MGMwZjYxZDIyZTVmMDdlM2FjZWJiMWFhMDdiMTI4ZDAwMTIyMDlhMjhiOTc3NmQ3NmE4NzkzMTgwZWVmOVwiLFwiNmI4NGM2OTIyMzk3ZWJhOWI3MmNkMjg3MjI4MWE2OGE1ZTY4MzI5M2E1N2EyMTNiMzhjZDhkN2QzZjRmMjgxMVwiXSxbXCJkYTFkNjFkMGNhNzIxYTExYjFhNWJmNmI3ZDg4ZTg0MjFhMjg4YWI1ZDViYmE1MjIwZTUzZDMyYjVmMDY3ZWMyXCIsXCI4MTU3ZjU1YTdjOTkzMDZjNzljMDc2NjE2MWM5MWUyOTY2YTczODk5ZDI3OWI0OGE2NTVmYmEwZjFhZDgzNmYxXCJdLFtcImE4ZTI4MmZmMGM5NzA2OTA3MjE1ZmY5OGU4ZmQ0MTY2MTUzMTFkZTA0NDZmMWUwNjJhNzNiMDYxMGQwNjRlMTNcIixcIjdmOTczNTViOGRiODFjMDlhYmZiN2YzYzViMjUxNTg4OGI2NzlhM2U1MGRkNmJkNmNlZjdjNzMxMTFmNGNjMGNcIl0sW1wiMTc0YTUzYjljOWEyODU4NzJkMzllNTZlNjkxM2NhYjE1ZDU5YjFmYTUxMjUwOGMwMjJmMzgyZGU4MzE5NDk3Y1wiLFwiY2NjOWRjMzdhYmZjOWMxNjU3YjQxNTVmMmM0N2Y5ZTY2NDZiM2ExZDhjYjk4NTQzODNkYTEzYWMwNzlhZmE3M1wiXSxbXCI5NTkzOTY5ODE5NDM3ODVjM2QzZTU3ZWRmNTAxOGNkYmUwMzllNzMwZTQ5MThiM2Q4ODRmZGZmMDk0NzViN2JhXCIsXCIyZTdlNTUyODg4YzMzMWRkOGJhMDM4NmE0YjljZDY4NDljNjUzZjY0Yzg3MDkzODVlOWI4YWJmODc1MjRmMmZkXCJdLFtcImQyYTYzYTUwYWU0MDFlNTZkNjQ1YTExNTNiMTA5YThmY2NhMGE0M2Q1NjFmYmEyZGJiNTEzNDBjOWQ4MmIxNTFcIixcImU4MmQ4NmZiNjQ0M2ZjYjc1NjVhZWU1OGIyOTQ4MjIwYTcwZjc1MGFmNDg0Y2E1MmQ0MTQyMTc0ZGNmODk0MDVcIl0sW1wiNjQ1ODdlMjMzNTQ3MWViODkwZWU3ODk2ZDdjZmRjODY2YmFjYmRiZDM4MzkzMTdiMzQzNmY5YjQ1NjE3ZTA3M1wiLFwiZDk5ZmNkZDViZjY5MDJlMmFlOTZkZDY0NDdjMjk5YTE4NWI5MGEzOTEzM2FlYWIzNTgyOTllNWU5ZmFmNjU4OVwiXSxbXCI4NDgxYmRlMGU0ZTRkODg1YjNhNTQ2ZDNlNTQ5ZGUwNDJmMGFhNmNlYTI1MGU3ZmQzNThkNmM4NmRkNDVlNDU4XCIsXCIzOGVlN2I4Y2JhNTQwNGRkODRhMjViZjM5Y2VjYjJjYTkwMGE3OWM0MmIyNjJlNTU2ZDY0YjFiNTk3NzkwNTdlXCJdLFtcIjEzNDY0YTU3YTc4MTAyYWE2MmI2OTc5YWU4MTdmNDYzN2ZmY2ZlZDNjNGIxY2UzMGJjZDYzMDNmNmNhZjY2NmJcIixcIjY5YmUxNTkwMDQ2MTQ1ODBlZjdlNDMzNDUzY2NiMGNhNDhmMzAwYTgxZDA5NDJlMTNmNDk1YTkwN2Y2ZWNjMjdcIl0sW1wiYmM0YTlkZjViNzEzZmUyZTlhZWY0MzBiY2MxZGM5N2EwY2Q5Y2NlZGUyZjI4NTg4Y2FkYTNhMGQyZDgzZjM2NlwiLFwiZDNhODFjYTZlNzg1YzA2MzgzOTM3YWRmNGI3OThjYWE2ZThhOWZiZmE1NDdiMTZkNzU4ZDY2NjU4MWYzM2MxXCJdLFtcIjhjMjhhOTdiZjgyOThiYzBkMjNkOGM3NDk0NTJhMzJlNjk0YjY1ZTMwYTk0NzJhMzk1NGFiMzBmZTUzMjRjYWFcIixcIjQwYTMwNDYzYTMzMDUxOTMzNzhmZWRmMzFmN2NjMGViN2FlNzg0ZjA0NTFjYjk0NTllNzFkYzczY2JlZjk0ODJcIl0sW1wiOGVhOTY2NjEzOTUyN2E4YzFkZDk0Y2U0ZjA3MWZkMjNjOGIzNTBjNWE0YmIzMzc0OGM0YmExMTFmYWNjYWUwXCIsXCI2MjBlZmFiYmM4ZWUyNzgyZTI0ZTdjMGNmYjk1YzVkNzM1Yjc4M2JlOWNmMGY4ZTk1NWFmMzRhMzBlNjJiOTQ1XCJdLFtcImRkMzYyNWZhZWY1YmEwNjA3NDY2OTcxNmJiZDM3ODhkODliZGRlODE1OTU5OTY4MDkyZjc2Y2M0ZWI5YTk3ODdcIixcIjdhMTg4ZmEzNTIwZTMwZDQ2MWRhMjUwMTA0NTczMWNhOTQxNDYxOTgyODgzMzk1OTM3ZjY4ZDAwYzY0NGE1NzNcIl0sW1wiZjcxMGQ3OWQ5ZWI5NjIyOTdlNGY2MjMyYjQwZThmN2ZlYjJiYzYzODE0NjE0ZDY5MmMxMmRlNzUyNDA4MjIxZVwiLFwiZWE5OGU2NzIzMmQzYjMyOTVkM2I1MzU1MzIxMTVjY2FjODYxMmM3MjE4NTE2MTc1MjZhZTQ3YTljNzdiZmM4MlwiXV19LG5hZjp7d25kOjcscG9pbnRzOltbXCJmOTMwOGEwMTkyNThjMzEwNDkzNDRmODVmODlkNTIyOWI1MzFjODQ1ODM2Zjk5YjA4NjAxZjExM2JjZTAzNmY5XCIsXCIzODhmN2IwZjYzMmRlODE0MGZlMzM3ZTYyYTM3ZjM1NjY1MDBhOTk5MzRjMjIzMWI2Y2I5ZmQ3NTg0YjhlNjcyXCJdLFtcIjJmOGJkZTRkMWEwNzIwOTM1NWI0YTcyNTBhNWM1MTI4ZTg4Yjg0YmRkYzYxOWFiN2NiYThkNTY5YjI0MGVmZTRcIixcImQ4YWMyMjI2MzZlNWUzZDZkNGRiYTlkZGE2YzljNDI2Zjc4ODI3MWJhYjBkNjg0MGRjYTg3ZDNhYTZhYzYyZDZcIl0sW1wiNWNiZGYwNjQ2ZTVkYjRlYWEzOThmMzY1ZjJlYTdhMGUzZDQxOWI3ZTAzMzBlMzljZTkyYmRkZWRjYWM0ZjliY1wiLFwiNmFlYmNhNDBiYTI1NTk2MGEzMTc4ZDZkODYxYTU0ZGJhODEzZDBiODEzZmRlN2I1YTUwODI2MjgwODcyNjRkYVwiXSxbXCJhY2Q0ODRlMmYwYzdmNjUzMDlhZDE3OGE5ZjU1OWFiZGUwOTc5Njk3NGM1N2U3MTRjMzVmMTEwZGZjMjdjY2JlXCIsXCJjYzMzODkyMWIwYTdkOWZkNjQzODA5NzE3NjNiNjFlOWFkZDg4OGE0Mzc1ZjhlMGYwNWNjMjYyYWM2NGY5YzM3XCJdLFtcIjc3NGFlN2Y4NThhOTQxMWU1ZWY0MjQ2YjcwYzY1YWFjNTY0OTk4MGJlNWMxNzg5MWJiZWMxNzg5NWRhMDA4Y2JcIixcImQ5ODRhMDMyZWI2YjVlMTkwMjQzZGQ1NmQ3YjdiMzY1MzcyZGIxZTJkZmY5ZDZhODMwMWQ3NGM5Yzk1M2M2MWJcIl0sW1wiZjI4NzczYzJkOTc1Mjg4YmM3ZDFkMjA1YzM3NDg2NTFiMDc1ZmJjNjYxMGU1OGNkZGVlZGRmOGYxOTQwNWFhOFwiLFwiYWIwOTAyZThkODgwYTg5NzU4MjEyZWI2NWNkYWY0NzNhMWEwNmRhNTIxZmE5MWYyOWI1Y2I1MmRiMDNlZDgxXCJdLFtcImQ3OTI0ZDRmN2Q0M2VhOTY1YTQ2NWFlMzA5NWZmNDExMzFlNTk0NmYzYzg1Zjc5ZTQ0YWRiY2Y4ZTI3ZTA4MGVcIixcIjU4MWUyODcyYTg2YzcyYTY4Mzg0MmVjMjI4Y2M2ZGVmZWE0MGFmMmJkODk2ZDNhNWM1MDRkYzlmZjZhMjZiNThcIl0sW1wiZGVmZGVhNGNkYjY3Nzc1MGE0MjBmZWU4MDdlYWNmMjFlYjk4OThhZTc5Yjk3Njg3NjZlNGZhYTA0YTJkNGEzNFwiLFwiNDIxMWFiMDY5NDYzNTE2OGU5OTdiMGVhZDJhOTNkYWVjZWQxZjRhMDRhOTVjMGY2Y2ZiMTk5ZjY5ZTU2ZWI3N1wiXSxbXCIyYjRlYTBhNzk3YTQ0M2QyOTNlZjVjZmY0NDRmNDk3OWYwNmFjZmViZDdlODZkMjc3NDc1NjU2MTM4Mzg1YjZjXCIsXCI4NWU4OWJjMDM3OTQ1ZDkzYjM0MzA4M2I1YTFjODYxMzFhMDFmNjBjNTAyNjk3NjNiNTcwYzg1NGU1YzA5YjdhXCJdLFtcIjM1MmJiZjRhNGNkZDEyNTY0ZjkzZmEzMzJjZTMzMzMwMWQ5YWQ0MDI3MWY4MTA3MTgxMzQwYWVmMjViZTU5ZDVcIixcIjMyMWViNDA3NTM0OGY1MzRkNTljMTgyNTlkZGEzZTFmNGExYjNiMmU3MWIxMDM5YzY3YmQzZDhiY2Y4MTk5OGNcIl0sW1wiMmZhMjEwNGQ2YjM4ZDExYjAyMzAwMTA1NTk4NzkxMjRlNDJhYjhkZmVmZjVmZjI5ZGM5Y2RhZGQ0ZWNhY2MzZlwiLFwiMmRlMTA2ODI5NWRkODY1YjY0NTY5MzM1YmQ1ZGQ4MDE4MWQ3MGVjZmM4ODI2NDg0MjNiYTc2YjUzMmI3ZDY3XCJdLFtcIjkyNDgyNzliMDliNGQ2OGRhYjIxYTliMDY2ZWRkYTgzMjYzYzNkODRlMDk1NzJlMjY5Y2EwY2Q3ZjU0NTM3MTRcIixcIjczMDE2ZjdiZjIzNGFhZGU1ZDFhYTcxYmRlYTJiMWZmM2ZjMGRlMmE4ODc5MTJmZmU1NGEzMmNlOTdjYjM0MDJcIl0sW1wiZGFlZDRmMmJlM2E4YmYyNzhlNzAxMzJmYjBiZWI3NTIyZjU3MGUxNDRiZjYxNWMwN2U5OTZkNDQzZGVlODcyOVwiLFwiYTY5ZGNlNGE3ZDZjOThlOGQ0YTFhY2E4N2VmOGQ3MDAzZjgzYzIzMGYzYWZhNzI2YWI0MGU1MjI5MGJlMWM1NVwiXSxbXCJjNDRkMTJjNzA2NWQ4MTJlOGFjZjI4ZDdjYmIxOWY5MDExZWNkOWU5ZmRmMjgxYjBlNmEzYjVlODdkMjJlN2RiXCIsXCIyMTE5YTQ2MGNlMzI2Y2RjNzZjNDU5MjZjOTgyZmRhYzBlMTA2ZTg2MWVkZjYxYzVhMDM5MDYzZjBlMGU2NDgyXCJdLFtcIjZhMjQ1YmY2ZGM2OTg1MDRjODlhMjBjZmRlZDYwODUzMTUyYjY5NTMzNmMyODA2M2I2MWM2NWNiZDI2OWU2YjRcIixcImUwMjJjZjQyYzJiZDRhNzA4YjNmNTEyNmYxNmEyNGFkOGIzM2JhNDhkMDQyM2I2ZWZkNWU2MzQ4MTAwZDhhODJcIl0sW1wiMTY5N2ZmYTZmZDlkZTYyN2MwNzdlM2QyZmU1NDEwODRjZTEzMzAwYjBiZWMxMTQ2Zjk1YWU1N2YwZDBiZDZhNVwiLFwiYjljMzk4ZjE4NjgwNmY1ZDI3NTYxNTA2ZTQ1NTc0MzNhMmNmMTUwMDllNDk4YWU3YWRlZTlkNjNkMDFiMjM5NlwiXSxbXCI2MDViZGIwMTk5ODE3MThiOTg2ZDBmMDdlODM0Y2IwZDlkZWI4MzYwZmZiN2Y2MWRmOTgyMzQ1ZWYyN2E3NDc5XCIsXCIyOTcyZDJkZTRmOGQyMDY4MWE3OGQ5M2VjOTZmZTIzYzI2YmZhZTg0ZmIxNGRiNDNiMDFlMWU5MDU2YjhjNDlcIl0sW1wiNjJkMTRkYWI0MTUwYmY0OTc0MDJmZGM0NWEyMTVlMTBkY2IwMWMzNTQ5NTliMTBjZmUzMWM3ZTlkODdmZjMzZFwiLFwiODBmYzA2YmQ4Y2M1YjAxMDk4MDg4YTE5NTBlZWQwZGIwMWFhMTMyOTY3YWI0NzIyMzVmNTY0MjQ4M2IyNWVhZlwiXSxbXCI4MGM2MGFkMDA0MGYyN2RhZGU1YjRiMDZjNDA4ZTU2YjJjNTBlOWY1NmI5YjhiNDI1ZTU1NWMyZjg2MzA4YjZmXCIsXCIxYzM4MzAzZjFjYzVjMzBmMjZlNjZiYWQ3ZmU3MmY3MGE2NWVlZDRjYmU3MDI0ZWIxYWEwMWY1NjQzMGJkNTdhXCJdLFtcIjdhOTM3NWFkNjE2N2FkNTRhYTc0YzYzNDhjYzU0ZDM0NGNjNWRjOTQ4N2Q4NDcwNDlkNWVhYmIwZmEwM2M4ZmJcIixcImQwZTNmYTllY2E4NzI2OTA5NTU5ZTBkNzkyNjkwNDZiZGM1OWVhMTBjNzBjZTJiMDJkNDk5ZWMyMjRkYzdmN1wiXSxbXCJkNTI4ZWNkOWI2OTZiNTRjOTA3YTllZDA0NTQ0N2E3OWJiNDA4ZWMzOWI2OGRmNTA0YmI1MWY0NTliYzNmZmM5XCIsXCJlZWNmNDEyNTMxMzZlNWY5OTk2NmYyMTg4MWZkNjU2ZWJjNDM0NTQwNWM1MjBkYmMwNjM0NjViNTIxNDA5OTMzXCJdLFtcIjQ5MzcwYTRiNWY0MzQxMmVhMjVmNTE0ZThlY2RhZDA1MjY2MTE1ZTRhN2VjYjEzODcyMzE4MDhmOGI0NTk2M1wiLFwiNzU4ZjNmNDFhZmQ2ZWQ0MjhiMzA4MWIwNTEyZmQ2MmE1NGMzZjNhZmJiNWI2NzY0YjY1MzA1MmExMjk0OWM5YVwiXSxbXCI3N2YyMzA5MzZlZTg4Y2JiZDczZGY5MzBkNjQ3MDJlZjg4MWQ4MTFlMGUxNDk4ZTJmMWMxM2ViMWZjMzQ1ZDc0XCIsXCI5NThlZjQyYTc4ODZiNjQwMGEwODI2NmU5YmExYjM3ODk2Yzk1MzMwZDk3MDc3Y2JiZThlYjNjNzY3MWM2MGQ2XCJdLFtcImYyZGFjOTkxY2M0Y2U0YjllYTQ0ODg3ZTVjN2MwYmNlNThjODAwNzRhYjlkNGRiYWViMjg1MzFiNzczOWY1MzBcIixcImUwZGVkYzliM2IyZjhkYWQ0ZGExZjMyZGVjMjUzMWRmOWViNWZiZWIwNTk4ZTRmZDFhMTE3ZGJhNzAzYTNjMzdcIl0sW1wiNDYzYjNkOWY2NjI2MjFmYjFiNGJlOGZiYmUyNTIwMTI1YTIxNmNkZmM5ZGFlM2RlYmNiYTQ4NTBjNjkwZDQ1YlwiLFwiNWVkNDMwZDc4YzI5NmMzNTQzMTE0MzA2ZGQ4NjIyZDdjNjIyZTI3Yzk3MGExZGUzMWNiMzc3YjAxYWY3MzA3ZVwiXSxbXCJmMTZmODA0MjQ0ZTQ2ZTJhMDkyMzJkNGFmZjNiNTk5NzZiOThmYWMxNDMyOGEyZDFhMzI0OTZiNDk5OThmMjQ3XCIsXCJjZWRhYmQ5YjgyMjAzZjdlMTNkMjA2ZmNkZjRlMzNkOTJhNmM1M2MyNmU1Y2NlMjZkNjU3OTk2MmM0ZTMxZGY2XCJdLFtcImNhZjc1NDI3MmRjODQ1NjNiMDM1MmI3YTE0MzExYWY1NWQyNDUzMTVhY2UyN2M2NTM2OWUxNWY3MTUxZDQxZDFcIixcImNiNDc0NjYwZWYzNWY1ZjJhNDFiNjQzZmE1ZTQ2MDU3NWY0ZmE5Yjc5NjIyMzJhNWMzMmY5MDgzMThhMDQ0NzZcIl0sW1wiMjYwMGNhNGIyODJjYjk4NmY4NWQwZjE3MDk5NzlkOGI0NGEwOWMwN2NiODZkN2MxMjQ0OTdiYzg2ZjA4MjEyMFwiLFwiNDExOWI4ODc1M2MxNWJkNmE2OTNiMDNmY2RkYmI0NWQ1YWM2YmU3NGFiNWYwZWY0NGIwYmU5NDc1YTdlNGI0MFwiXSxbXCI3NjM1Y2E3MmQ3ZTg0MzJjMzM4ZWM1M2NkMTIyMjBiYzAxYzQ4Njg1ZTI0ZjdkYzhjNjAyYTc3NDY5OThlNDM1XCIsXCI5MWI2NDk2MDk0ODlkNjEzZDFkNWU1OTBmNzhlNmQ3NGVjZmMwNjFkNTcwNDhiYWQ5ZTc2ZjMwMmM1YjljNjFcIl0sW1wiNzU0ZTMyMzlmMzI1NTcwY2RiYmY0YTg3ZGVlZThhNjZiN2YyYjMzNDc5ZDQ2OGZiYzFhNTA3NDNiZjU2Y2MxOFwiLFwiNjczZmI4NmU1YmRhMzBmYjNjZDBlZDMwNGVhNDlhMDIzZWUzM2QwMTk3YTY5NWQwYzVkOTgwOTNjNTM2NjgzXCJdLFtcImUzZTZiZDEwNzFhMWU5NmFmZjU3ODU5YzgyZDU3MGYwMzMwODAwNjYxZDFjOTUyZjlmZTI2OTQ2OTFkOWI5ZThcIixcIjU5YzllMGJiYTM5NGU3NmY0MGMwYWE1ODM3OWEzY2I2YTVhMjI4Mzk5M2U5MGM0MTY3MDAyYWY0OTIwZTM3ZjVcIl0sW1wiMTg2YjQ4M2QwNTZhMDMzODI2YWU3M2Q4OGY3MzI5ODVjNGNjYjFmMzJiYTM1ZjRiNGNjNDdmZGNmMDRhYTZlYlwiLFwiM2I5NTJkMzJjNjdjZjc3ZTJlMTc0NDZlMjA0MTgwYWIyMWZiODA5MDg5NTEzOGI0YTRhNzk3Zjg2ZTgwODg4YlwiXSxbXCJkZjlkNzBhNmI5ODc2Y2U1NDRjOTg1NjFmNGJlNGY3MjU0NDJlNmQyYjczN2Q5YzkxYTgzMjE3MjRjZTA5NjNmXCIsXCI1NWViMmRhZmQ4NGQ2Y2NkNWY4NjJiNzg1ZGMzOWQ0YWIxNTcyMjI3MjBlZjlkYTIxN2I4YzQ1Y2YyYmEyNDE3XCJdLFtcIjVlZGQ1Y2MyM2M1MWU4N2E0OTdjYTgxNWQ1ZGNlMGY4YWI1MjU1NGY4NDllZDg5OTVkZTY0YzVmMzRjZTcxNDNcIixcImVmYWU5YzhkYmMxNDEzMDY2MWU4Y2VjMDMwYzg5YWQwYzEzYzY2YzBkMTdhMjkwNWNkYzcwNmFiNzM5OWE4NjhcIl0sW1wiMjkwNzk4YzJiNjQ3NjgzMGRhMTJmZTAyMjg3ZTllNzc3YWEzZmJhMWMzNTViMTdhNzIyZDM2MmY4NDYxNGZiYVwiLFwiZTM4ZGE3NmRjZDQ0MDYyMTk4OGQwMGJjZjc5YWYyNWQ1YjI5YzA5NGRiMmEyMzE0NmQwMDNhZmQ0MTk0M2U3YVwiXSxbXCJhZjNjNDIzYTk1ZDlmNWIzMDU0NzU0ZWZhMTUwYWMzOWNkMjk1NTJmZTM2MDI1NzM2MmRmZGVjZWY0MDUzYjQ1XCIsXCJmOThhM2ZkODMxZWIyYjc0OWE5M2IwZTZmMzVjZmI0MGM4Y2Q1YWE2NjdhMTU1ODFiYzJmZWRlZDQ5OGZkOWM2XCJdLFtcIjc2NmRiYjI0ZDEzNGU3NDVjY2NhYTI4Yzk5YmYyNzQ5MDZiYjY2YjI2ZGNmOThkZjhkMmZlZDUwZDg4NDI0OWFcIixcIjc0NGIxMTUyZWFjYmU1ZTM4ZGNjODg3OTgwZGEzOGI4OTc1ODRhNjVmYTA2Y2VkZDJjOTI0Zjk3Y2JhYzU5OTZcIl0sW1wiNTlkYmY0NmY4Yzk0NzU5YmEyMTI3N2MzMzc4NGY0MTY0NWY3YjQ0ZjZjNTk2YTU4Y2U5MmU2NjYxOTFhYmUzZVwiLFwiYzUzNGFkNDQxNzVmYmMzMDBmNGVhNmNlNjQ4MzA5YTA0MmNlNzM5YTc5MTk3OThjZDg1ZTIxNmM0YTMwN2Y2ZVwiXSxbXCJmMTNhZGE5NTEwM2M0NTM3MzA1ZTY5MWU3NGU5YTRhOGRkNjQ3ZTcxMWE5NWU3M2NiNjJkYzYwMThjZmQ4N2I4XCIsXCJlMTM4MTdiNDRlZTE0ZGU2NjNiZjRiYzgwODM0MWYzMjY5NDllMjFhNmE3NWMyNTcwNzc4NDE5YmRhZjU3MzNkXCJdLFtcIjc3NTRiNGZhMGU4YWNlZDA2ZDQxNjdhMmM1OWNjYTRjZGExODY5YzA2ZWJhZGZiNjQ4ODU1MDAxNWE4ODUyMmNcIixcIjMwZTkzZTg2NGU2NjlkODIyMjRiOTY3YzMwMjBiOGZhOGQxZTRlMzUwYjZjYmNjNTM3YTQ4YjU3ODQxMTYzYTJcIl0sW1wiOTQ4ZGNhZGY1OTkwZTA0OGFhMzg3NGQ0NmFiZWY5ZDcwMTg1OGY5NWRlODA0MWQyYTY4MjhjOTllMjI2MjUxOVwiLFwiZTQ5MWE0MjUzN2Y2ZTU5N2Q1ZDI4YTMyMjRiMWJjMjVkZjkxNTRlZmJkMmVmMWQyY2JiYTJjYWU1MzQ3ZDU3ZVwiXSxbXCI3OTYyNDE0NDUwYzc2YzE2ODljN2I0OGY4MjAyZWMzN2ZiMjI0Y2Y1YWMwYmZhMTU3MDMyOGE4YTNkN2M3N2FiXCIsXCIxMDBiNjEwZWM0ZmZiNDc2MGQ1YzFmYzEzM2VmNmY2YjEyNTA3YTA1MWYwNGFjNTc2MGFmYTViMjlkYjgzNDM3XCJdLFtcIjM1MTQwODc4MzQ5NjRiNTRiMTViMTYwNjQ0ZDkxNTQ4NWExNjk3NzIyNWI4ODQ3YmIwZGQwODUxMzdlYzQ3Y2FcIixcImVmMGFmYmIyMDU2MjA1NDQ4ZTE2NTJjNDhlODEyN2ZjNjAzOWU3N2MxNWMyMzc4YjdlN2QxNWEwZGUyOTMzMTFcIl0sW1wiZDNjYzMwYWQ2YjQ4M2U0YmM3OWNlMmM5ZGQ4YmM1NDk5M2U5NDdlYjhkZjc4N2I0NDI5NDNkM2Y3YjUyN2VhZlwiLFwiOGIzNzhhMjJkODI3Mjc4ZDg5YzVlOWJlOGY5NTA4YWUzYzJhZDQ2MjkwMzU4NjMwYWZiMzRkYjA0ZWVkZTBhNFwiXSxbXCIxNjI0ZDg0NzgwNzMyODYwY2UxYzc4ZmNiZmVmZTA4YjJiMjk4MjNkYjkxM2Y2NDkzOTc1YmEwZmY0ODQ3NjEwXCIsXCI2ODY1MWNmOWI2ZGE5MDNlMDkxNDQ0OGM2Y2Q5ZDRjYTg5Njg3OGY1MjgyYmU0YzhjYzA2ZTJhNDA0MDc4NTc1XCJdLFtcIjczM2NlODBkYTk1NWE4YTI2OTAyYzk1NjMzZTYyYTk4NTE5MjQ3NGI1YWYyMDdkYTZkZjdiNGZkNWZjNjFjZDRcIixcImY1NDM1YTJiZDJiYWRmN2Q0ODVhNGQ4YjhkYjlmY2NlM2UxZWY4ZTAyMDFlNDU3OGM1NDY3M2JjMWRjNWVhMWRcIl0sW1wiMTVkOTQ0MTI1NDk0NTA2NGNmMWExYzMzYmJkM2I0OWY4OTY2YzUwOTIxNzFlNjk5ZWYyNThkZmFiODFjMDQ1Y1wiLFwiZDU2ZWIzMGI2OTQ2M2U3MjM0ZjUxMzdiNzNiODQxNzc0MzQ4MDBiYWNlYmZjNjg1ZmMzN2JiZTllZmU0MDcwZFwiXSxbXCJhMWQwZmNmMmVjOWRlNjc1YjYxMjEzNmU1Y2U3MGQyNzFjMjE0MTdjOWQyYjhhYWFhYzEzODU5OWQwNzE3OTQwXCIsXCJlZGQ3N2Y1MGJjYjVhM2NhYjJlOTA3MzczMDk2NjdmMjY0MTQ2MmE1NDA3MGYzZDUxOTIxMmQzOWMxOTdhNjI5XCJdLFtcImUyMmZiZTE1YzBhZjhjY2M1NzgwYzA3MzVmODRkYmU5YTc5MGJhZGVlODI0NWMwNmM3Y2EzNzMzMWNiMzY5ODBcIixcImE4NTViYWJhZDVjZDYwYzg4YjQzMGE2OWY1M2ExYTdhMzgyODkxNTQ5NjQ3OTliZTQzZDA2ZDc3ZDMxZGEwNlwiXSxbXCIzMTEwOTFkZDk4NjBlOGUyMGVlMTM0NzNjMTE1NWY1ZjY5NjM1ZTM5NDcwNGVhYTc0MDA5NDUyMjQ2Y2ZhOWIzXCIsXCI2NmRiNjU2Zjg3ZDFmMDRmZmZkMWYwNDc4OGMwNjgzMDg3MWVjNWE2NGZlZWU2ODViZDgwZjBiMTI4NmQ4Mzc0XCJdLFtcIjM0YzFmZDA0ZDMwMWJlODliMzFjMDQ0MmQzZTZhYzI0ODgzOTI4YjQ1YTkzNDA3ODE4NjdkNDIzMmVjMmRiZGZcIixcIjk0MTQ2ODVlOTdiMWI1OTU0YmQ0NmY3MzAxNzQxMzZkNTdmMWNlZWI0ODc0NDNkYzUzMjE4NTdiYTczYWJlZVwiXSxbXCJmMjE5ZWE1ZDZiNTQ3MDFjMWMxNGRlNWI1NTdlYjQyYThkMTNmM2FiYmNkMDhhZmZjYzJhNWU2YjA0OWI4ZDYzXCIsXCI0Y2I5NTk1N2U4M2Q0MGIwZjczYWY0NTQ0Y2NjZjZiMWY0YjA4ZDNjMDdiMjdmYjhkOGMyOTYyYTQwMDc2NmQxXCJdLFtcImQ3Yjg3NDBmNzRhOGZiYWFiMWY2ODNkYjhmNDVkZTI2NTQzYTU0OTBiY2E2MjcwODcyMzY5MTI0NjlhMGI0NDhcIixcImZhNzc5NjgxMjhkOWM5MmVlMTAxMGYzMzdhZDQ3MTdlZmYxNWRiNWVkM2MwNDliMzQxMWUwMzE1ZWFhNDU5M2JcIl0sW1wiMzJkMzFjMjIyZjhmNmYwZWY4NmY3Yzk4ZDNhMzMzNWVhZDViY2QzMmFiZGQ5NDI4OWZlNGQzMDkxYWE4MjRiZlwiLFwiNWYzMDMyZjU4OTIxNTZlMzljY2QzZDc5MTViOWUxZGEyZTZkYWM5ZTZmMjZlOTYxMTE4ZDE0Yjg0NjJlMTY2MVwiXSxbXCI3NDYxZjM3MTkxNGFiMzI2NzEwNDVhMTU1ZDk4MzFlYTg3OTNkNzdjZDU5NTkyYzQzNDBmODZjYmMxODM0N2I1XCIsXCI4ZWMwYmEyMzhiOTZiZWMwY2JkZGRjYWUwYWE0NDI1NDJlZWUxZmY1MGM5ODZlYTZiMzk4NDdiM2NjMDkyZmY2XCJdLFtcImVlMDc5YWRiMWRmMTg2MDA3NDM1NmEyNWFhMzgyMDZhNmQ3MTZiMmMzZTY3NDUzZDI4NzY5OGJhZDdiMmIyZDZcIixcIjhkYzI0MTJhYWZlM2JlNWM0YzVmMzdlMGVjYzVmOWY2YTQ0Njk4OWFmMDRjNGUyNWViYWFjNDc5ZWMxYzhjMWVcIl0sW1wiMTZlYzkzZTQ0N2VjODNmMDQ2N2IxODMwMmVlNjIwZjdlNjVkZTMzMTg3NGM5ZGM3MmJmZDg2MTZiYTlkYTZiNVwiLFwiNWU0NjMxMTUwZTYyZmI0MGQwZThjMmE3Y2E1ODA0YTM5ZDU4MTg2YTUwZTQ5NzEzOTYyNjc3OGUyNWIwNjc0ZFwiXSxbXCJlYWE1Zjk4MGMyNDVmNmYwMzg5NzgyOTBhZmE3MGI2YmQ4ODU1ODk3Zjk4YjZhYTQ4NWI5NjA2NWQ1MzdiZDk5XCIsXCJmNjVmNWQzZTI5MmMyZTA4MTlhNTI4MzkxYzk5NDYyNGQ3ODQ4NjlkN2U2ZWE2N2ZiMTgwNDEwMjRlZGMwN2RjXCJdLFtcIjc4Yzk0MDc1NDRhYzEzMjY5MmVlMTkxMGEwMjQzOTk1OGFlMDQ4NzcxNTEzNDJlYTk2YzRiNmIzNWE0OWY1MVwiLFwiZjNlMDMxOTE2OWViOWI4NWQ1NDA0Nzk1NTM5YTVlNjhmYTFmYmQ1ODNjMDY0ZDI0NjJiNjc1ZjE5NGEzZGRiNFwiXSxbXCI0OTRmNGJlMjE5YTFhNzcwMTZkY2Q4Mzg0MzFhZWEwMDAxY2RjOGFlN2E2ZmM2ODg3MjY1NzhkOTcwMjg1N2E1XCIsXCI0MjI0MmE5NjkyODNhNWYzMzliYTdmMDc1ZTM2YmEyYWY5MjVjZTMwZDc2N2VkNmU1NWY0YjAzMTg4MGQ1NjJjXCJdLFtcImE1OThhODAzMGRhNmQ4NmM2YmM3ZjJmNTE0NGVhNTQ5ZDI4MjExZWE1OGZhYTcwZWJmNGMxZTY2NWMxZmU5YjVcIixcIjIwNGI1ZDZmODQ4MjJjMzA3ZTRiNGE3MTQwNzM3YWVjMjNmYzYzYjY1YjM1Zjg2YTEwMDI2ZGJkMmQ4NjRlNmJcIl0sW1wiYzQxOTE2MzY1YWJiMmI1ZDA5MTkyZjVmMmRiZWFmZWMyMDhmMDIwZjEyNTcwYTE4NGRiYWRjM2U1ODU5NTk5N1wiLFwiNGYxNDM1MWQwMDg3ZWZhNDlkMjQ1YjMyODk4NDk4OWQ1Y2FmOTQ1MGYzNGJmYzBlZDE2ZTk2YjU4ZmE5OTEzXCJdLFtcIjg0MWQ2MDYzYTU4NmZhNDc1YTcyNDYwNGRhMDNiYzViOTJhMmUwZDJlMGEzNmFjZmU0YzczYTU1MTQ3NDI4ODFcIixcIjczODY3ZjU5YzA2NTllODE5MDRmOWExYzc1NDM2OThlNjI1NjJkNjc0NGMxNjljZTdhMzZkZTAxYThkNjE1NFwiXSxbXCI1ZTk1YmIzOTlhNjk3MWQzNzYwMjY5NDdmODliZGUyZjI4MmIzMzgxMDkyOGJlNGRlZDExMmFjNGQ3MGUyMGQ1XCIsXCIzOWYyM2YzNjY4MDkwODViZWViZmM3MTE4MTMxMzc3NWE5OWM5YWVkN2Q4YmEzOGIxNjEzODRjNzQ2MDEyODY1XCJdLFtcIjM2ZTQ2NDFhNTM5NDhmZDQ3NmMzOWY4YTk5ZmQ5NzRlNWVjMDc1NjRiNTMxNWQ4YmY5OTQ3MWJjYTBlZjJmNjZcIixcImQyNDI0YjFiMWFiZTRlYjgxNjQyMjdiMDg1YzlhYTk0NTZlYTEzNDkzZmQ1NjNlMDZmZDUxY2Y1Njk0Yzc4ZmNcIl0sW1wiMzM2NTgxZWE3YmZiYmIyOTBjMTkxYTJmNTA3YTQxY2Y1NjQzODQyMTcwZTkxNGZhZWFiMjdjMmM1NzlmNzI2XCIsXCJlYWQxMjE2ODU5NWZlMWJlOTkyNTIxMjliNmU1NmIzMzkxZjdhYjE0MTBjZDFlMGVmM2RjZGNhYmQyZmRhMjI0XCJdLFtcIjhhYjg5ODE2ZGFkZmQ2YjZhMWYyNjM0ZmNmMDBlYzg0MDM3ODEwMjVlZDY4OTBjNDg0OTc0MjcwNmJkNDNlZGVcIixcIjZmZGNlZjA5ZjJmNmQwYTA0NGU2NTRhZWY2MjQxMzZmNTAzZDQ1OWMzZTg5ODQ1ODU4YTQ3YTkxMjljZGQyNGVcIl0sW1wiMWUzM2YxYTc0NmM5YzU3NzgxMzMzNDRkOTI5OWZjYWEyMGIwOTM4ZThhY2ZmMjU0NGJiNDAyODRiOGM1ZmI5NFwiLFwiNjA2NjAyNTdkZDExYjNhYTljOGVkNjE4ZDI0ZWRmZjIzMDZkMzIwZjFkMDMwMTBlMzNhN2QyMDU3ZjNiM2I2XCJdLFtcIjg1YjdjMWRjYjNjZWMxYjdlZTdmMzBkZWQ3OWRkMjBhMGVkMWY0Y2MxOGNiY2ZjZmE0MTAzNjFmZDhmMDhmMzFcIixcIjNkOThhOWNkZDAyNmRkNDNmMzkwNDhmMjVhODg0N2Y0ZmNhZmFkMTg5NWQ3YTYzM2M2ZmVkM2MzNWU5OTk1MTFcIl0sW1wiMjlkZjlmYmQ4ZDllNDY1MDkyNzVmNGIxMjVkNmQ0NWQ3ZmJlOWEzYjg3OGE3YWY4NzJhMjgwMDY2MWFjNWY1MVwiLFwiYjRjNGZlOTljNzc1YTYwNmUyZDg4NjIxNzkxMzlmZmRhNjFkYzg2MWMwMTllNTVjZDI4NzZlYjJhMjdkODRiXCJdLFtcImEwYjFjYWUwNmIwYTg0N2EzZmVhNmU2NzFhYWY4YWRmZGZlNThjYTJmNzY4MTA1YzgwODJiMmU0NDlmY2UyNTJcIixcImFlNDM0MTAyZWRkZTA5NThlYzRiMTlkOTE3YTZhMjhlNmI3MmRhMTgzNGFmZjBlNjUwZjA0OTUwM2EyOTZjZjJcIl0sW1wiNGU4Y2VhZmI5YjNlOWExMzZkYzdmZjY3ZTg0MDI5NWI0OTlkZmIzYjIxMzNlNGJhMTEzZjJlNGMwZTEyMWU1XCIsXCJjZjIxNzQxMThjOGI2ZDdhNGI0OGY2ZDUzNGNlNWM3OTQyMmMwODZhNjM0NjA1MDJiODI3Y2U2MmEzMjY2ODNjXCJdLFtcImQyNGE0NGUwNDdlMTliNmY1YWZiODFjN2NhMmY2OTA4MGE1MDc2Njg5YTAxMDkxOWY0MjcyNWMyYjc4OWEzM2JcIixcIjZmYjhkNTU5MWI0NjZmOGZjNjNkYjUwZjFjMGYxYzY5MDEzZjk5Njg4N2I4MjQ0ZDJjZGVjNDE3YWZlYThmYTNcIl0sW1wiZWEwMTYwNmE3YTZjOWNkZDI0OWZkZmNmYWNiOTk1ODQwMDFlZGQyOGFiYmFiNzdiNTEwNGU5OGU4ZTNiMzVkNFwiLFwiMzIyYWY0OTA4YzczMTJiMGNmYmZlMzY5ZjdhN2IzY2RiN2Q0NDk0YmMyODIzNzAwY2ZkNjUyMTg4YTNlYTk4ZFwiXSxbXCJhZjhhZGRiZjJiNjYxYzhhNmM2MzI4NjU1ZWI5NjY1MTI1MjAwN2Q4YzVlYTMxYmU0YWQxOTZkZThjZTIxMzFmXCIsXCI2NzQ5ZTY3YzAyOWI4NWY1MmEwMzRlYWZkMDk2ODM2YjI1MjA4MTg2ODBlMjZhYzhmM2RmYmNkYjcxNzQ5NzAwXCJdLFtcImUzYWUxOTc0NTY2Y2EwNmNjNTE2ZDQ3ZTBmYjE2NWE2NzRhM2RhYmNmY2ExNWU3MjJmMGUzNDUwZjQ1ODg5XCIsXCIyYWVhYmU3ZTQ1MzE1MTAxMTYyMTdmMDdiZjRkMDczMDBkZTk3ZTQ4NzRmODFmNTMzNDIwYTcyZWViMGJkNmE0XCJdLFtcIjU5MWVlMzU1MzEzZDk5NzIxY2Y2OTkzZmZlZDFlM2UzMDE5OTNmZjNlZDI1ODgwMjA3NWVhOGNlZDM5N2UyNDZcIixcImIwZWE1NThhMTEzYzMwYmVhNjBmYzQ3NzU0NjBjNzkwMWZmMGIwNTNkMjVjYTJiZGVlZTk4ZjFhNGJlNWQxOTZcIl0sW1wiMTEzOTZkNTVmZGE1NGM0OWYxOWFhOTczMThkOGRhNjFmYTg1ODRlNDdiMDg0OTQ1MDc3Y2YwMzI1NWI1Mjk4NFwiLFwiOTk4Yzc0YThjZDQ1YWMwMTI4OWQ1ODMzYTdiZWI0NzQ0ZmY1MzZiMDFiMjU3YmU0YzU3NjdiZWE5M2VhNTdhNFwiXSxbXCIzYzVkMmExYmEzOWM1YTE3OTAwMDA3MzhjOWUwYzQwYjhkY2RmZDU0Njg3NTRiNjQwNTU0MDE1N2UwMTdhYTdhXCIsXCJiMjI4NDI3OTk5NWEzNGUyZjlkNGRlNzM5NmZjMThiODBmOWI4YjlmZGQyNzBmNjY2MWY3OWNhNGM4MWJkMjU3XCJdLFtcImNjODcwNGI4YTYwYTBkZWZhM2E5OWE3Mjk5ZjJlOWMzZmJjMzk1YWZiMDRhYzA3ODQyNWVmOGExNzkzY2MwMzBcIixcImJkZDQ2MDM5ZmVlZDE3ODgxZDFlMDg2MmRiMzQ3ZjhjZjM5NWI3NGZjNGJjZGM0ZTk0MGI3NGUzYWMxZjFiMTNcIl0sW1wiYzUzM2U0ZjdlYTg1NTVhYWNkOTc3N2FjNWNhZDI5Yjk3ZGQ0ZGVmY2NjNTNlZTdlYTIwNDExOWIyODg5YjE5N1wiLFwiNmYwYTI1NmJjNWVmZGY0MjlhMmZiNjI0MmYxYTQzYTJkOWI5MjViYjRhNGIzYTI2YmI4ZTBmNDVlYjU5NjA5NlwiXSxbXCJjMTRmOGYyY2NiMjdkNmYxMDlmNmQwOGQwM2NjOTZhNjliYThjMzRlZWMwN2JiY2Y1NjZkNDhlMzNkYTY1OTNcIixcImMzNTlkNjkyM2JiMzk4ZjdmZDQ0NzNlMTZmZTFjMjg0NzViNzQwZGQwOTgwNzVlNmMwZTg2NDkxMTNkYzNhMzhcIl0sW1wiYTZjYmMzMDQ2YmM2YTQ1MGJhYzI0Nzg5ZmExNzExNWE0Yzk3MzllZDc1ZjhmMjFjZTQ0MWY3MmUwYjkwZTZlZlwiLFwiMjFhZTdmNDY4MGU4ODliYjEzMDYxOWUyYzBmOTVhMzYwY2ViNTczYzcwNjAzMTM5ODYyYWZkNjE3ZmE5YjlmXCJdLFtcIjM0N2Q2ZDlhMDJjNDg5MjdlYmZiODZjMTM1OWIxY2FmMTMwYTNjMDI2N2QxMWNlNjM0NGIzOWY5OWQ0M2NjMzhcIixcIjYwZWE3ZjYxYTM1MzUyNGQxYzk4N2Y2ZWNlYzkyZjA4NmQ1NjVhYjY4Nzg3MGNiMTI2ODlmZjFlMzFjNzQ0NDhcIl0sW1wiZGE2NTQ1ZDIxODFkYjhkOTgzZjdkY2IzNzVlZjU4NjZkNDdjNjdiMWJmMzFjOGNmODU1ZWY3NDM3YjcyNjU2YVwiLFwiNDliOTY3MTVhYjY4NzhhNzllNzhmMDdjZTU2ODBjNWQ2NjczMDUxYjQ5MzViZDg5N2ZlYTgyNGI3N2RjMjA4YVwiXSxbXCJjNDA3NDdjYzlkMDEyY2IxYTEzYjgxNDgzMDljNmRlN2VjMjVkNjk0NWQ2NTcxNDZiOWQ1OTk0YjhmZWIxMTExXCIsXCI1Y2E1NjA3NTNiZTJhMTJmYzZkZTZjYWYyY2I0ODk1NjVkYjkzNjE1NmI5NTE0ZTFiYjVlODMwMzdlMGZhMmQ0XCJdLFtcIjRlNDJjOGVjODJjOTk3OThjY2YzYTYxMGJlODcwZTc4MzM4YzdmNzEzMzQ4YmQzNGM4MjAzZWY0MDM3ZjM1MDJcIixcIjc1NzFkNzRlZTVlMGZiOTJhN2E4YjMzYTA3NzgzMzQxYTU0OTIxNDRjYzU0YmNjNDBhOTQ0NzM2OTM2MDY0MzdcIl0sW1wiMzc3NWFiNzA4OWJjNmFmODIzYWJhMmUxYWY3MGIyMzZkMjUxY2FkYjBjODY3NDMyODc1MjJhMWIzYjBkZWRlYVwiLFwiYmU1MmQxMDdiY2ZhMDlkOGJjYjk3MzZhODI4Y2ZhN2ZhYzhkYjE3YmY3YTc2YTJjNDJhZDk2MTQwOTAxOGNmN1wiXSxbXCJjZWUzMWNiZjdlMzRlYzM3OWQ5NGZiODE0ZDNkNzc1YWQ5NTQ1OTVkMTMxNGJhODg0Njk1OWUzZTgyZjc0ZTI2XCIsXCI4ZmQ2NGExNGMwNmI1ODljMjZiOTQ3YWUyYmNmNmJmYTAxNDllZjBiZTE0ZWQ0ZDgwZjQ0OGEwMWM0M2IxYzZkXCJdLFtcImI0ZjllYWVhMDliNjkxNzYxOWY2ZWE2YTRlYjU0NjRlZmRkYjU4ZmQ0NWIxZWJlZmNkYzFhMDFkMDhiNDc5ODZcIixcIjM5ZTVjOTkyNWI1YTU0YjA3NDMzYTRmMThjNjE3MjZmOGJiMTMxYzAxMmNhNTQyZWIyNGE4YWMwNzIwMDY4MmFcIl0sW1wiZDQyNjNkZmMzZDJkZjkyM2EwMTc5YTQ4OTY2ZDMwY2U4NGUyNTE1YWZjM2RjY2MxYjc3OTA3NzkyZWJjYzYwZVwiLFwiNjJkZmFmMDdhMGY3OGZlYjMwZTMwZDYyOTU4NTNjZTE4OWUxMjc3NjBhZDZjZjdmYWUxNjRlMTIyYTIwOGQ1NFwiXSxbXCI0ODQ1NzUyNDgyMGZhNjVhNGY4ZDM1ZWI2OTMwODU3YzAwMzJhY2MwYTRhMmRlNDIyMjMzZWVkYTg5NzYxMmM0XCIsXCIyNWE3NDhhYjM2Nzk3OWQ5ODczM2MzOGExZmExYzJlN2RjNmNjMDdkYjJkNjBhOWFlN2E3NmFhYTQ5YmQwZjc3XCJdLFtcImRmZWVlZjE4ODExMDFmMmNiMTE2NDRmM2EyYWZkZmMyMDQ1ZTE5OTE5MTUyOTIzZjM2N2ExNzY3YzExY2NlZGFcIixcImVjZmI3MDU2Y2YxZGUwNDJmOTQyMGJhYjM5Njc5M2MwYzM5MGJkZTc0YjRiYmRmZjE2YTgzYWUwOWE5YTc1MTdcIl0sW1wiNmQ3ZWY2YjE3NTQzZjgzNzNjNTczZjQ0ZTFmMzg5ODM1ZDg5YmNiYzYwNjJjZWQzNmM4MmRmODNiOGZhZTg1OVwiLFwiY2Q0NTBlYzMzNTQzODk4NmRmZWZhMTBjNTdmZWE5YmNjNTIxYTA5NTliMmQ4MGJiZjc0YjE5MGRjYTcxMmQxMFwiXSxbXCJlNzU2MDVkNTkxMDJhNWEyNjg0NTAwZDNiOTkxZjJlM2YzYzg4YjkzMjI1NTQ3MDM1YWYyNWFmNjZlMDQ1NDFmXCIsXCJmNWM1NDc1NGE4ZjcxZWU1NDBiOWI0ODcyODQ3M2UzMTRmNzI5YWM1MzA4YjA2OTM4MzYwOTkwZTJiZmFkMTI1XCJdLFtcImViOTg2NjBmNGM0ZGZhYTA2YTJiZTQ1M2Q1MDIwYmM5OWEwYzJlNjBhYmUzODg0NTdkZDQzZmVmYjFlZDYyMGNcIixcIjZjYjlhODg3NmQ5Y2I4NTIwNjA5YWYzYWRkMjZjZDIwYTBhN2NkOGE5NDExMTMxY2U4NWY0NDEwMDA5OTIyM2VcIl0sW1wiMTNlODdiMDI3ZDg1MTRkMzU5MzlmMmU2ODkyYjE5OTIyMTU0NTk2OTQxODg4MzM2ZGMzNTYzZTNiOGRiYTk0MlwiLFwiZmVmNWEzYzY4MDU5YTZkZWM1ZDYyNDExNGJmMWU5MWFhYzJiOWRhNTY4ZDZhYmViMjU3MGQ1NTY0NmI4YWRmMVwiXSxbXCJlZTE2MzAyNmU5ZmQ2ZmUwMTdjMzhmMDZhNWJlNmZjMTI1NDI0YjM3MWNlMjcwOGU3YmY0NDkxNjkxZTU3NjRhXCIsXCIxYWNiMjUwZjI1NWRkNjFjNDNkOTRjY2M2NzBkMGY1OGY0OWFlM2ZhMTViOTY2MjNlNTQzMGRhMGFkNmM2MmIyXCJdLFtcImIyNjhmNWVmOWFkNTFlNGQ3OGRlM2E3NTBjMmRjODliMWU2MjZkNDM1MDU4Njc5OTk5MzJlNWRiMzNhZjNkODBcIixcIjVmMzEwZDRiM2M5OWI5ZWJiMTlmNzdkNDFjMWRlZTAxOGNmMGQzNGZkNDE5MTYxNDAwM2U5NDVhMTIxNmU0MjNcIl0sW1wiZmYwN2YzMTE4YTlkZjAzNWU5ZmFkODVlYjZjN2JmZTQyYjAyZjAxY2E5OWNlZWEzYmY3ZmZkYmE5M2M0NzUwZFwiLFwiNDM4MTM2ZDYwM2U4NThhM2E1YzQ0MGMzOGVjY2JhZGRjMWQyOTQyMTE0ZTJlZGRkNDc0MGQwOThjZWQxZjBkOFwiXSxbXCI4ZDhiOTg1NWM3YzA1MmEzNDE0NmZkMjBmZmI2NThiZWE0YjlmNjllMGQ4MjVlYmVjMTZlOGMzY2UyYjUyNmExXCIsXCJjZGI1NTllZWRjMmQ3OWY5MjZiYWY0NGZiODRlYTRkNDRiY2Y1MGZlZTUxZDdjZWIzMGUyZTdmNDYzMDM2NzU4XCJdLFtcIjUyZGIwYjUzODRkZmJmMDViZmE5ZDQ3MmQ3YWUyNmRmZTRiODUxY2VjYTkxYjFlYmE1NDI2MzE4MGRhMzJiNjNcIixcImMzYjk5N2QwNTBlZTVkNDIzZWJhZjY2YTZkYjlmNTdiMzE4MGM5MDI4NzU2NzlkZTkyNGI2OWQ4NGE3YjM3NVwiXSxbXCJlNjJmOTQ5MGQzZDUxZGE2Mzk1ZWZkMjRlODA5MTljYzdkMGYyOWMzZjNmYTQ4YzZmZmY1NDNiZWNiZDQzMzUyXCIsXCI2ZDg5YWQ3YmE0ODc2YjBiMjJjMmNhMjgwYzY4Mjg2MmYzNDJjODU5MWYxZGFmNTE3MGUwN2JmZDljY2FmYTdkXCJdLFtcIjdmMzBlYTI0NzZiMzk5YjQ5NTc1MDljODhmNzdkMDE5MWFmYTJmZjVjYjdiMTRmZDZkOGU3ZDY1YWFhYjExOTNcIixcImNhNWVmN2Q0YjIzMWM5NGMzYjE1Mzg5YTVmNjMxMWU5ZGFmZjdiYjY3YjEwM2U5ODgwZWY0YmZmNjM3YWNhZWNcIl0sW1wiNTA5OGZmMWUxZDlmMTRmYjQ2YTIxMGZhZGE2YzkwM2ZlZjBmYjdiNGExZGQxZDlhYzYwYTAzNjE4MDBiN2EwMFwiLFwiOTczMTE0MWQ4MWZjOGY4MDg0ZDM3YzZlNzU0MjAwNmIzZWUxYjQwZDYwZGZlNTM2MmE1YjEzMmZkMTdkZGMwXCJdLFtcIjMyYjc4YzdkZTllZTUxMmE3Mjg5NWJlNmI5Y2JlZmE2ZTJmM2M0Y2NjZTQ0NWM5NmI5ZjJjODFlMjc3OGFkNThcIixcImVlMTg0OWY1MTNkZjcxZTMyZWZjMzg5NmVlMjgyNjBjNzNiYjgwNTQ3YWUyMjc1YmE0OTcyMzc3OTRjODc1M2NcIl0sW1wiZTJjYjc0ZmRkYzhlOWZiY2QwNzZlZWYyYTdjNzJiMGNlMzdkNTBmMDgyNjlkZmMwNzRiNTgxNTUwNTQ3YTRmN1wiLFwiZDNhYTJlZDcxYzlkZDIyNDdhNjJkZjA2MjczNmViMGJhZGRlYTllMzYxMjJkMmJlODY0MWFiY2IwMDVjYzRhNFwiXSxbXCI4NDM4NDQ3NTY2ZDRkN2JlZGFkYzI5OTQ5NmFiMzU3NDI2MDA5YTM1ZjIzNWNiMTQxYmUwZDk5Y2QxMGFlM2E4XCIsXCJjNGUxMDIwOTE2OTgwYTRkYTVkMDFhYzVlNmFkMzMwNzM0ZWYwZDc5MDY2MzFjNGYyMzkwNDI2YjJlZGQ3OTFmXCJdLFtcIjQxNjJkNDg4Yjg5NDAyMDM5YjU4NGM2ZmM2YzMwODg3MDU4N2Q5YzQ2ZjY2MGI4NzhhYjY1YzgyYzcxMWQ2N2VcIixcIjY3MTYzZTkwMzIzNjI4OWY3NzZmMjJjMjVmYjhhM2FmYzE3MzJmMmI4NGI0ZTk1ZGJkYTQ3YWU1YTA4NTI2NDlcIl0sW1wiM2ZhZDNmYTg0Y2FmMGYzNGYwZjg5YmZkMmRjZjU0ZmMxNzVkNzY3YWVjM2U1MDY4NGYzYmE0YTRiZjVmNjgzZFwiLFwiY2QxYmM3Y2I2Y2M0MDdiYjJmMGNhNjQ3YzcxOGE3MzBjZjcxODcyZTdkMGQyYTUzZmEyMGVmY2RmZTYxODI2XCJdLFtcIjY3NGYyNjAwYTMwMDdhMDA1NjhjMWE3Y2UwNWQwODE2YzFmYjg0YmYxMzcwNzk4ZjFjNjk1MzJmYWViMWE4NmJcIixcIjI5OWQyMWY5NDEzZjMzYjNlZGY0M2IyNTcwMDQ1ODBiNzBkYjU3ZGEwYjE4MjI1OWUwOWVlY2M2OWUwZDM4YTVcIl0sW1wiZDMyZjRkYTU0YWRlNzRhYmI4MWI4MTVhZDFmYjNiMjYzZDgyZDZjNjkyNzE0YmNmZjg3ZDI5YmQ1ZWU5ZjA4ZlwiLFwiZjk0MjllNzM4YjhlNTNiOTY4ZTk5MDE2YzA1OTcwNzc4MmUxNGY0NTM1MzU5ZDU4MmZjNDE2OTEwYjNlZWE4N1wiXSxbXCIzMGU0ZTY3MDQzNTM4NTU1NmU1OTM2NTcxMzU4NDVkMzZmYmI2OTMxZjcyYjA4Y2IxZWQ5NTRmMWUzY2UzZmY2XCIsXCI0NjJmOWJjZTYxOTg5ODYzODQ5OTM1MDExM2JiYzliMTBhODc4ZDM1ZGE3MDc0MGRjNjk1YTU1OWViODhkYjdiXCJdLFtcImJlMjA2MjAwM2M1MWNjMzAwNDY4MjkwNDMzMGU0ZGVlN2YzZGNkMTBiMDFlNTgwYmYxOTcxYjA0ZDRjYWQyOTdcIixcIjYyMTg4YmM0OWQ2MWU1NDI4NTczZDQ4YTc0ZTFjNjU1YjFjNjEwOTA5MDU2ODJhMGQ1NTU4ZWQ3MmRjY2I5YmNcIl0sW1wiOTMxNDQ0MjNhY2UzNDUxZWQyOWUwZmI5YWMyYWYyMTFjYjZlODRhNjAxZGY1OTkzYzQxOTg1OWZmZjVkZjA0YVwiLFwiN2MxMGRmYjE2NGMzNDI1ZjVjNzFhM2Y5ZDc5OTIwMzhmMTA2NTIyNGY3MmJiOWQxZDkwMmE2ZDEzMDM3YjQ3Y1wiXSxbXCJiMDE1ZjgwNDRmNWZjYmRjZjIxY2EyNmQ2YzM0ZmI4MTk3ODI5MjA1YzdiN2QyYTdjYjY2NDE4YzE1N2IxMTJjXCIsXCJhYjhjMWUwODZkMDRlODEzNzQ0YTY1NWIyZGY4ZDVmODNiM2NkYzZmYWEzMDg4YzFkM2FlYTE0NTRlM2ExZDVmXCJdLFtcImQ1ZTllMWRhNjQ5ZDk3ZDg5ZTQ4NjgxMTdhNDY1YTNhNGY4YTE4ZGU1N2ExNDBkMzZiM2YyYWYzNDFhMjFiNTJcIixcIjRjYjA0NDM3ZjM5MWVkNzMxMTFhMTNjYzFkNGRkMGRiMTY5MzQ2NWMyMjQwNDgwZDg5NTVlODU5MmYyNzQ0N2FcIl0sW1wiZDNhZTQxMDQ3ZGQ3Y2EwNjVkYmY4ZWQ3N2I5OTI0Mzk5ODMwMDVjZDcyZTE2ZDZmOTk2YTUzMTZkMzY5NjZiYlwiLFwiYmQxYWViMjFhZDIyZWJiMjJhMTBmMDMwMzQxN2M2ZDk2NGY4Y2RkN2RmMGFjYTYxNGIxMGRjMTRkMTI1YWM0NlwiXSxbXCI0NjNlMjc2M2Q4ODVmOTU4ZmM2NmNkZDIyODAwZjBhNDg3MTk3ZDBhODJlMzc3YjQ5ZjgwYWY4N2M4OTdiMDY1XCIsXCJiZmVmYWNkYjBlNWQwZmQ3ZGYzYTMxMWE5NGRlMDYyYjI2YjgwYzYxZmJjOTc1MDhiNzk5OTI2NzFlZjdjYTdmXCJdLFtcIjc5ODVmZGZkMTI3YzA1NjdjNmY1M2VjMWJiNjNlYzMxNThlNTk3YzQwYmZlNzQ3YzgzY2RkZmM5MTA2NDE5MTdcIixcIjYwM2MxMmRhZjNkOTg2MmVmMmIyNWZlMWRlMjg5YWVkMjRlZDI5MWUwZWM2NzA4NzAzYTViZDU2N2YzMmVkMDNcIl0sW1wiNzRhMWFkNmI1Zjc2ZTM5ZGIyZGQyNDk0MTBlYWM3Zjk5ZTc0YzU5Y2I4M2QyZDBlZDVmZjE1NDNkYTc3MDNlOVwiLFwiY2M2MTU3ZWYxOGM5YzYzY2Q2MTkzZDgzNjMxYmJlYTAwOTNlMDk2ODk0MmU4YzMzZDU3MzdmZDc5MGUwZGIwOFwiXSxbXCIzMDY4MmE1MDcwMzM3NWY2MDJkNDE2NjY0YmExOWI3ZmM5YmFiNDJjNzI3NDc0NjNhNzFkMDg5NmIyMmY2ZGEzXCIsXCI1NTNlMDRmNmIwMThiNGZhNmM4ZjM5ZTdmMzExZDMxNzYyOTBkMGUwZjE5Y2E3M2YxNzcxNGQ5OTc3YTIyZmY4XCJdLFtcIjllMjE1OGYwZDdjMGQ1ZjI2YzM3OTFlZmVmYTc5NTk3NjU0ZTdhMmIyNDY0ZjUyYjFlZTZjMTM0Nzc2OWVmNTdcIixcIjcxMmZjZGQxYjkwNTNmMDkwMDNhMzQ4MWZhNzc2MmU5ZmZkN2M4ZWYzNWEzODUwOWUyZmJmMjYyOTAwODM3M1wiXSxbXCIxNzZlMjY5ODlhNDNjOWNmZWJhNDAyOWMyMDI1MzhjMjgxNzJlNTY2ZTNjNGZjZTczMjI4NTdmM2JlMzI3ZDY2XCIsXCJlZDhjYzlkMDRiMjllYjg3N2QyNzBiNDg3OGRjNDNjMTlhZWZkMzFmNGVlZTA5ZWU3YjQ3ODM0YzFmYTRiMWMzXCJdLFtcIjc1ZDQ2ZWZlYTM3NzFlNmU2OGFiYjg5YTEzYWQ3NDdlY2YxODkyMzkzZGZjNGYxYjcwMDQ3ODhjNTAzNzRkYThcIixcIjk4NTIzOTBhOTk1MDc2NzlmZDBiODZmZDJiMzlhODY4ZDdlZmMyMjE1MTM0NmUxYTNjYTQ3MjY1ODZhNmJlZDhcIl0sW1wiODA5YTIwYzY3ZDY0OTAwZmZiNjk4YzRjODI1ZjZkNWYyMzEwZmIwNDUxYzg2OTM0NWI3MzE5ZjY0NTYwNTcyMVwiLFwiOWU5OTQ5ODBkOTkxN2UyMmI3NmIwNjE5MjdmYTA0MTQzZDA5NmNjYzU0OTYzZTZhNWViZmE1ZjNmOGUyODZjMVwiXSxbXCIxYjM4OTAzYTQzZjdmMTE0ZWQ0NTAwYjRlYWM3MDgzZmRlZmVjZTFjZjI5YzYzNTI4ZDU2MzQ0NmY5NzJjMTgwXCIsXCI0MDM2ZWRjOTMxYTYwYWU4ODkzNTNmNzdmZDUzZGU0YTI3MDhiMjZiNmY1ZGE3MmFkMzM5NDExOWRhZjQwOGY5XCJdXVxufX19LGZ1bmN0aW9uKHQsZSxyKXtcInVzZSBzdHJpY3RcIjtmdW5jdGlvbiBuKHQsZSl7aWYoQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gdC5zbGljZSgpO2lmKCF0KXJldHVybltdO3ZhciByPVtdO2lmKFwic3RyaW5nXCIhPXR5cGVvZiB0KXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKylyW25dPTB8dFtuXTtyZXR1cm4gcn1pZihlKXtpZihcImhleFwiPT09ZSl7dD10LnJlcGxhY2UoL1teYS16MC05XSsvZ2ksXCJcIiksdC5sZW5ndGglMiE9PTAmJih0PVwiMFwiK3QpO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bis9MilyLnB1c2gocGFyc2VJbnQodFtuXSt0W24rMV0sMTYpKX19ZWxzZSBmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGk9dC5jaGFyQ29kZUF0KG4pLG89aT4+OCxhPTI1NSZpO28/ci5wdXNoKG8sYSk6ci5wdXNoKGEpfXJldHVybiByfWZ1bmN0aW9uIGkodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gbyh0KXtmb3IodmFyIGU9XCJcIixyPTA7cjx0Lmxlbmd0aDtyKyspZSs9aSh0W3JdLnRvU3RyaW5nKDE2KSk7cmV0dXJuIGV9ZnVuY3Rpb24gYSh0LGUpe2Zvcih2YXIgcj1bXSxuPTE8PGUrMSxpPXQuY2xvbmUoKTtpLmNtcG4oMSk+PTA7KXt2YXIgbztpZihpLmlzT2RkKCkpe3ZhciBhPWkuYW5kbG4obi0xKTtvPWE+KG4+PjEpLTE/KG4+PjEpLWE6YSxpLmlzdWJuKG8pfWVsc2Ugbz0wO3IucHVzaChvKTtmb3IodmFyIGY9MCE9PWkuY21wbigwKSYmMD09PWkuYW5kbG4obi0xKT9lKzE6MSxzPTE7czxmO3MrKylyLnB1c2goMCk7aS5pdXNocm4oZil9cmV0dXJuIHJ9ZnVuY3Rpb24gZih0LGUpe3ZhciByPVtbXSxbXV07dD10LmNsb25lKCksZT1lLmNsb25lKCk7Zm9yKHZhciBuPTAsaT0wO3QuY21wbigtbik+MHx8ZS5jbXBuKC1pKT4wOyl7dmFyIG89dC5hbmRsbigzKStuJjMsYT1lLmFuZGxuKDMpK2kmMzszPT09byYmKG89LTEpLDM9PT1hJiYoYT0tMSk7dmFyIGY7aWYoMD09PSgxJm8pKWY9MDtlbHNle3ZhciBzPXQuYW5kbG4oNykrbiY3O2Y9MyE9PXMmJjUhPT1zfHwyIT09YT9vOi1vfXJbMF0ucHVzaChmKTt2YXIgdTtpZigwPT09KDEmYSkpdT0wO2Vsc2V7dmFyIHM9ZS5hbmRsbig3KStpJjc7dT0zIT09cyYmNSE9PXN8fDIhPT1vP2E6LWF9clsxXS5wdXNoKHUpLDIqbj09PWYrMSYmKG49MS1uKSwyKmk9PT11KzEmJihpPTEtaSksdC5pdXNocm4oMSksZS5pdXNocm4oMSl9cmV0dXJuIHJ9ZnVuY3Rpb24gcyh0LGUscil7dmFyIG49XCJfXCIrZTt0LnByb3RvdHlwZVtlXT1mdW5jdGlvbigpe3JldHVybiB2b2lkIDAhPT10aGlzW25dP3RoaXNbbl06dGhpc1tuXT1yLmNhbGwodGhpcyl9fWZ1bmN0aW9uIHUodCl7cmV0dXJuXCJzdHJpbmdcIj09dHlwZW9mIHQ/Yy50b0FycmF5KHQsXCJoZXhcIik6dH1mdW5jdGlvbiBoKHQpe3JldHVybiBuZXcgZCh0LFwiaGV4XCIsXCJsZVwiKX12YXIgYz1lLGQ9cigzMCk7Yy5hc3NlcnQ9ZnVuY3Rpb24odCxlKXtpZighdCl0aHJvdyBuZXcgRXJyb3IoZXx8XCJBc3NlcnRpb24gZmFpbGVkXCIpfSxjLnRvQXJyYXk9bixjLnplcm8yPWksYy50b0hleD1vLGMuZW5jb2RlPWZ1bmN0aW9uKHQsZSl7cmV0dXJuXCJoZXhcIj09PWU/byh0KTp0fSxjLmdldE5BRj1hLGMuZ2V0SlNGPWYsYy5jYWNoZWRQcm9wZXJ0eT1zLGMucGFyc2VCeXRlcz11LGMuaW50RnJvbUxFPWh9LGZ1bmN0aW9uKHQsZSxyKXtmdW5jdGlvbiBuKHQpe3RoaXMucmFuZD10fXZhciBpO2lmKHQuZXhwb3J0cz1mdW5jdGlvbih0KXtyZXR1cm4gaXx8KGk9bmV3IG4obnVsbCkpLGkuZ2VuZXJhdGUodCl9LHQuZXhwb3J0cy5SYW5kPW4sbi5wcm90b3R5cGUuZ2VuZXJhdGU9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JhbmQodCl9LFwib2JqZWN0XCI9PXR5cGVvZiB3aW5kb3cpd2luZG93LmNyeXB0byYmd2luZG93LmNyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKGUpLGV9OndpbmRvdy5tc0NyeXB0byYmd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcz9uLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXt2YXIgZT1uZXcgVWludDhBcnJheSh0KTtyZXR1cm4gd2luZG93Lm1zQ3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTpuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcIk5vdCBpbXBsZW1lbnRlZCB5ZXRcIil9O2Vsc2UgdHJ5e3ZhciBvPXIoNjEwKTtuLnByb3RvdHlwZS5fcmFuZD1mdW5jdGlvbih0KXtyZXR1cm4gby5yYW5kb21CeXRlcyh0KX19Y2F0Y2godCl7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBVaW50OEFycmF5KHQpLHI9MDtyPGUubGVuZ3RoO3IrKyllW3JdPXRoaXMucmFuZC5nZXRCeXRlKCk7cmV0dXJuIGV9fX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXt0aGlzLnBlbmRpbmc9bnVsbCx0aGlzLnBlbmRpbmdUb3RhbD0wLHRoaXMuYmxvY2tTaXplPXRoaXMuY29uc3RydWN0b3IuYmxvY2tTaXplLHRoaXMub3V0U2l6ZT10aGlzLmNvbnN0cnVjdG9yLm91dFNpemUsdGhpcy5obWFjU3RyZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5obWFjU3RyZW5ndGgsdGhpcy5wYWRMZW5ndGg9dGhpcy5jb25zdHJ1Y3Rvci5wYWRMZW5ndGgvOCx0aGlzLmVuZGlhbj1cImJpZ1wiLHRoaXMuX2RlbHRhOD10aGlzLmJsb2NrU2l6ZS84LHRoaXMuX2RlbHRhMzI9dGhpcy5ibG9ja1NpemUvMzJ9dmFyIGk9cig1MCksbz1pLnV0aWxzLGE9by5hc3NlcnQ7ZS5CbG9ja0hhc2g9bixuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtpZih0PW8udG9BcnJheSh0LGUpLHRoaXMucGVuZGluZz90aGlzLnBlbmRpbmc9dGhpcy5wZW5kaW5nLmNvbmNhdCh0KTp0aGlzLnBlbmRpbmc9dCx0aGlzLnBlbmRpbmdUb3RhbCs9dC5sZW5ndGgsdGhpcy5wZW5kaW5nLmxlbmd0aD49dGhpcy5fZGVsdGE4KXt0PXRoaXMucGVuZGluZzt2YXIgcj10Lmxlbmd0aCV0aGlzLl9kZWx0YTg7dGhpcy5wZW5kaW5nPXQuc2xpY2UodC5sZW5ndGgtcix0Lmxlbmd0aCksMD09PXRoaXMucGVuZGluZy5sZW5ndGgmJih0aGlzLnBlbmRpbmc9bnVsbCksdD1vLmpvaW4zMih0LDAsdC5sZW5ndGgtcix0aGlzLmVuZGlhbik7Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKz10aGlzLl9kZWx0YTMyKXRoaXMuX3VwZGF0ZSh0LG4sbit0aGlzLl9kZWx0YTMyKX1yZXR1cm4gdGhpc30sbi5wcm90b3R5cGUuZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLnVwZGF0ZSh0aGlzLl9wYWQoKSksYShudWxsPT09dGhpcy5wZW5kaW5nKSx0aGlzLl9kaWdlc3QodCl9LG4ucHJvdG90eXBlLl9wYWQ9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLnBlbmRpbmdUb3RhbCxlPXRoaXMuX2RlbHRhOCxyPWUtKHQrdGhpcy5wYWRMZW5ndGgpJWUsbj1uZXcgQXJyYXkocit0aGlzLnBhZExlbmd0aCk7blswXT0xMjg7Zm9yKHZhciBpPTE7aTxyO2krKyluW2ldPTA7aWYodDw8PTMsXCJiaWdcIj09PXRoaXMuZW5kaWFuKXtmb3IodmFyIG89ODtvPHRoaXMucGFkTGVuZ3RoO28rKyluW2krK109MDtuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109MCxuW2krK109dD4+PjI0JjI1NSxuW2krK109dD4+PjE2JjI1NSxuW2krK109dD4+PjgmMjU1LG5baSsrXT0yNTUmdH1lbHNle25baSsrXT0yNTUmdCxuW2krK109dD4+PjgmMjU1LG5baSsrXT10Pj4+MTYmMjU1LG5baSsrXT10Pj4+MjQmMjU1LG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wLG5baSsrXT0wO2Zvcih2YXIgbz04O288dGhpcy5wYWRMZW5ndGg7bysrKW5baSsrXT0wfXJldHVybiBufX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlLHIpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odGhpcy5IYXNoPXQsdGhpcy5ibG9ja1NpemU9dC5ibG9ja1NpemUvOCx0aGlzLm91dFNpemU9dC5vdXRTaXplLzgsdGhpcy5pbm5lcj1udWxsLHRoaXMub3V0ZXI9bnVsbCx2b2lkIHRoaXMuX2luaXQoby50b0FycmF5KGUscikpKTpuZXcgbih0LGUscil9dmFyIGk9cig1MCksbz1pLnV0aWxzLGE9by5hc3NlcnQ7dC5leHBvcnRzPW4sbi5wcm90b3R5cGUuX2luaXQ9ZnVuY3Rpb24odCl7dC5sZW5ndGg+dGhpcy5ibG9ja1NpemUmJih0PShuZXcgdGhpcy5IYXNoKS51cGRhdGUodCkuZGlnZXN0KCkpLGEodC5sZW5ndGg8PXRoaXMuYmxvY2tTaXplKTtmb3IodmFyIGU9dC5sZW5ndGg7ZTx0aGlzLmJsb2NrU2l6ZTtlKyspdC5wdXNoKDApO2Zvcih2YXIgZT0wO2U8dC5sZW5ndGg7ZSsrKXRbZV1ePTU0O3RoaXMuaW5uZXI9KG5ldyB0aGlzLkhhc2gpLnVwZGF0ZSh0KTtmb3IodmFyIGU9MDtlPHQubGVuZ3RoO2UrKyl0W2VdXj0xMDY7dGhpcy5vdXRlcj0obmV3IHRoaXMuSGFzaCkudXBkYXRlKHQpfSxuLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdGhpcy5pbm5lci51cGRhdGUodCxlKSx0aGlzfSxuLnByb3RvdHlwZS5kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMub3V0ZXIudXBkYXRlKHRoaXMuaW5uZXIuZGlnZXN0KCkpLHRoaXMub3V0ZXIuZGlnZXN0KHQpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4oKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIG4/KGwuY2FsbCh0aGlzKSx0aGlzLmg9WzE3MzI1ODQxOTMsNDAyMzIzMzQxNywyNTYyMzgzMTAyLDI3MTczMzg3OCwzMjg1Mzc3NTIwXSx2b2lkKHRoaXMuZW5kaWFuPVwibGl0dGxlXCIpKTpuZXcgbn1mdW5jdGlvbiBpKHQsZSxyLG4pe3JldHVybiB0PD0xNT9lXnJebjp0PD0zMT9lJnJ8fmUmbjp0PD00Nz8oZXx+cilebjp0PD02Mz9lJm58ciZ+bjplXihyfH5uKX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PD0xNT8wOnQ8PTMxPzE1MTg1MDAyNDk6dDw9NDc/MTg1OTc3NTM5Mzp0PD02Mz8yNDAwOTU5NzA4OjI4NDA4NTM4Mzh9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gdDw9MTU/MTM1MjgyOTkyNjp0PD0zMT8xNTQ4NjAzNjg0OnQ8PTQ3PzE4MzYwNzI2OTE6dDw9NjM/MjA1Mzk5NDIxNzowfXZhciBmPXIoNTApLHM9Zi51dGlscyx1PXMucm90bDMyLGg9cy5zdW0zMixjPXMuc3VtMzJfMyxkPXMuc3VtMzJfNCxsPWYuY29tbW9uLkJsb2NrSGFzaDtzLmluaGVyaXRzKG4sbCksZS5yaXBlbWQxNjA9bixuLmJsb2NrU2l6ZT01MTIsbi5vdXRTaXplPTE2MCxuLmhtYWNTdHJlbmd0aD0xOTIsbi5wYWRMZW5ndGg9NjQsbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLmhbMF0sbj10aGlzLmhbMV0sZj10aGlzLmhbMl0scz10aGlzLmhbM10sbD10aGlzLmhbNF0sbT1yLGc9bix3PWYsXz1zLE09bCxTPTA7Uzw4MDtTKyspe3ZhciBFPWgodShkKHIsaShTLG4sZixzKSx0W3BbU10rZV0sbyhTKSksdltTXSksbCk7cj1sLGw9cyxzPXUoZiwxMCksZj1uLG49RSxFPWgodShkKG0saSg3OS1TLGcsdyxfKSx0W2JbU10rZV0sYShTKSkseVtTXSksTSksbT1NLE09XyxfPXUodywxMCksdz1nLGc9RX1FPWModGhpcy5oWzFdLGYsXyksdGhpcy5oWzFdPWModGhpcy5oWzJdLHMsTSksdGhpcy5oWzJdPWModGhpcy5oWzNdLGwsbSksdGhpcy5oWzNdPWModGhpcy5oWzRdLHIsZyksdGhpcy5oWzRdPWModGhpcy5oWzBdLG4sdyksdGhpcy5oWzBdPUV9LG4ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/cy50b0hleDMyKHRoaXMuaCxcImxpdHRsZVwiKTpzLnNwbGl0MzIodGhpcy5oLFwibGl0dGxlXCIpfTt2YXIgcD1bMCwxLDIsMyw0LDUsNiw3LDgsOSwxMCwxMSwxMiwxMywxNCwxNSw3LDQsMTMsMSwxMCw2LDE1LDMsMTIsMCw5LDUsMiwxNCwxMSw4LDMsMTAsMTQsNCw5LDE1LDgsMSwyLDcsMCw2LDEzLDExLDUsMTIsMSw5LDExLDEwLDAsOCwxMiw0LDEzLDMsNywxNSwxNCw1LDYsMiw0LDAsNSw5LDcsMTIsMiwxMCwxNCwxLDMsOCwxMSw2LDE1LDEzXSxiPVs1LDE0LDcsMCw5LDIsMTEsNCwxMyw2LDE1LDgsMSwxMCwzLDEyLDYsMTEsMyw3LDAsMTMsNSwxMCwxNCwxNSw4LDEyLDQsOSwxLDIsMTUsNSwxLDMsNywxNCw2LDksMTEsOCwxMiwyLDEwLDAsNCwxMyw4LDYsNCwxLDMsMTEsMTUsMCw1LDEyLDIsMTMsOSw3LDEwLDE0LDEyLDE1LDEwLDQsMSw1LDgsNyw2LDIsMTMsMTQsMCwzLDksMTFdLHY9WzExLDE0LDE1LDEyLDUsOCw3LDksMTEsMTMsMTQsMTUsNiw3LDksOCw3LDYsOCwxMywxMSw5LDcsMTUsNywxMiwxNSw5LDExLDcsMTMsMTIsMTEsMTMsNiw3LDE0LDksMTMsMTUsMTQsOCwxMyw2LDUsMTIsNyw1LDExLDEyLDE0LDE1LDE0LDE1LDksOCw5LDE0LDUsNiw4LDYsNSwxMiw5LDE1LDUsMTEsNiw4LDEzLDEyLDUsMTIsMTMsMTQsMTEsOCw1LDZdLHk9WzgsOSw5LDExLDEzLDE1LDE1LDUsNyw3LDgsMTEsMTQsMTQsMTIsNiw5LDEzLDE1LDcsMTIsOCw5LDExLDcsNywxMiw3LDYsMTUsMTMsMTEsOSw3LDE1LDExLDgsNiw2LDE0LDEyLDEzLDUsMTQsMTMsMTMsNyw1LDE1LDUsOCwxMSwxNCwxNCw2LDE0LDYsOSwxMiw5LDEyLDUsMTUsOCw4LDUsMTIsOSwxMiw1LDE0LDYsOCwxMyw2LDUsMTUsMTMsMTEsMTFdfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbigpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMywzMTQ0MTM0Mjc3LDEwMTM5MDQyNDIsMjc3MzQ4MDc2MiwxMzU5ODkzMTE5LDI2MDA4MjI5MjQsNTI4NzM0NjM1LDE1NDE0NTkyMjVdLHRoaXMuaz1ZLHZvaWQodGhpcy5XPW5ldyBBcnJheSg2NCkpKTpuZXcgbn1mdW5jdGlvbiBpKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBpPyhuLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzMyMzgzNzEwMzIsOTE0MTUwNjYzLDgxMjcwMjk5OSw0MTQ0OTEyNjk3LDQyOTA3NzU4NTcsMTc1MDYwMzAyNSwxNjk0MDc2ODM5LDMyMDQwNzU0MjhdKSk6bmV3IGl9ZnVuY3Rpb24gbygpe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbz8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTc3OTAzMzcwMyw0MDg5MjM1NzIwLDMxNDQxMzQyNzcsMjIyNzg3MzU5NSwxMDEzOTA0MjQyLDQyNzExNzU3MjMsMjc3MzQ4MDc2MiwxNTk1NzUwMTI5LDEzNTk4OTMxMTksMjkxNzU2NTEzNywyNjAwODIyOTI0LDcyNTUxMTE5OSw1Mjg3MzQ2MzUsNDIxNTM4OTU0NywxNTQxNDU5MjI1LDMyNzAzMzIwOV0sdGhpcy5rPVcsdm9pZCh0aGlzLlc9bmV3IEFycmF5KDE2MCkpKTpuZXcgb31mdW5jdGlvbiBhKCl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBhPyhvLmNhbGwodGhpcyksdm9pZCh0aGlzLmg9WzM0MTgwNzAzNjUsMzIzODM3MTAzMiwxNjU0MjcwMjUwLDkxNDE1MDY2MywyNDM4NTI5MzcwLDgxMjcwMjk5OSwzNTU0NjIzNjAsNDE0NDkxMjY5NywxNzMxNDA1NDE1LDQyOTA3NzU4NTcsMjM5NDE4MDIzMSwxNzUwNjAzMDI1LDM2NzUwMDg1MjUsMTY5NDA3NjgzOSwxMjAzMDYyODEzLDMyMDQwNzU0MjhdKSk6bmV3IGF9ZnVuY3Rpb24gZigpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgZj8oWC5jYWxsKHRoaXMpLHRoaXMuaD1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdLHZvaWQodGhpcy5XPW5ldyBBcnJheSg4MCkpKTpuZXcgZn1mdW5jdGlvbiBzKHQsZSxyKXtyZXR1cm4gdCZlXn50JnJ9ZnVuY3Rpb24gdSh0LGUscil7cmV0dXJuIHQmZV50JnJeZSZyfWZ1bmN0aW9uIGgodCxlLHIpe3JldHVybiB0XmVecn1mdW5jdGlvbiBjKHQpe3JldHVybiBSKHQsMileUih0LDEzKV5SKHQsMjIpfWZ1bmN0aW9uIGQodCl7cmV0dXJuIFIodCw2KV5SKHQsMTEpXlIodCwyNSl9ZnVuY3Rpb24gbCh0KXtyZXR1cm4gUih0LDcpXlIodCwxOCledD4+PjN9ZnVuY3Rpb24gcCh0KXtyZXR1cm4gUih0LDE3KV5SKHQsMTkpXnQ+Pj4xMH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiAwPT09dD9zKGUscixuKToxPT09dHx8Mz09PXQ/aChlLHIsbik6Mj09PXQ/dShlLHIsbik6dm9pZCAwfWZ1bmN0aW9uIHYodCxlLHIsbixpLG8pe3ZhciBhPXQmcl5+dCZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHkodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5+ZSZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIG0odCxlLHIsbixpLG8pe3ZhciBhPXQmcl50JmleciZpO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIGcodCxlLHIsbixpLG8pe3ZhciBhPWUmbl5lJm9ebiZvO3JldHVybiBhPDAmJihhKz00Mjk0OTY3Mjk2KSxhfWZ1bmN0aW9uIHcodCxlKXt2YXIgcj1OKHQsZSwyOCksbj1OKGUsdCwyKSxpPU4oZSx0LDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gXyh0LGUpe3ZhciByPUwodCxlLDI4KSxuPUwoZSx0LDIpLGk9TChlLHQsNyksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBNKHQsZSl7dmFyIHI9Tih0LGUsMTQpLG49Tih0LGUsMTgpLGk9TihlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBTKHQsZSl7dmFyIHI9TCh0LGUsMTQpLG49TCh0LGUsMTgpLGk9TChlLHQsOSksbz1yXm5eaTtyZXR1cm4gbzwwJiYobys9NDI5NDk2NzI5Niksb31mdW5jdGlvbiBFKHQsZSl7dmFyIHI9Tih0LGUsMSksbj1OKHQsZSw4KSxpPVUodCxlLDcpLG89cl5uXmk7cmV0dXJuIG88MCYmKG8rPTQyOTQ5NjcyOTYpLG99ZnVuY3Rpb24gQSh0LGUpe3ZhciByPUwodCxlLDEpLG49TCh0LGUsOCksaT16KHQsZSw3KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIGsodCxlKXt2YXIgcj1OKHQsZSwxOSksbj1OKGUsdCwyOSksaT1VKHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfWZ1bmN0aW9uIHgodCxlKXt2YXIgcj1MKHQsZSwxOSksbj1MKGUsdCwyOSksaT16KHQsZSw2KSxvPXJebl5pO3JldHVybiBvPDAmJihvKz00Mjk0OTY3Mjk2KSxvfXZhciBJPXIoNTApLEI9SS51dGlscyxPPUIuYXNzZXJ0LFI9Qi5yb3RyMzIsUD1CLnJvdGwzMixUPUIuc3VtMzIsaj1CLnN1bTMyXzQsQz1CLnN1bTMyXzUsTj1CLnJvdHI2NF9oaSxMPUIucm90cjY0X2xvLFU9Qi5zaHI2NF9oaSx6PUIuc2hyNjRfbG8sRD1CLnN1bTY0LHE9Qi5zdW02NF9oaSxGPUIuc3VtNjRfbG8sSz1CLnN1bTY0XzRfaGksRz1CLnN1bTY0XzRfbG8sVj1CLnN1bTY0XzVfaGksSD1CLnN1bTY0XzVfbG8sWD1JLmNvbW1vbi5CbG9ja0hhc2gsWT1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XSxXPVsxMTE2MzUyNDA4LDM2MDk3Njc0NTgsMTg5OTQ0NzQ0MSw2MDI4OTE3MjUsMzA0OTMyMzQ3MSwzOTY0NDg0Mzk5LDM5MjEwMDk1NzMsMjE3MzI5NTU0OCw5NjE5ODcxNjMsNDA4MTYyODQ3MiwxNTA4OTcwOTkzLDMwNTM4MzQyNjUsMjQ1MzYzNTc0OCwyOTM3NjcxNTc5LDI4NzA3NjMyMjEsMzY2NDYwOTU2MCwzNjI0MzgxMDgwLDI3MzQ4ODMzOTQsMzEwNTk4NDAxLDExNjQ5OTY1NDIsNjA3MjI1Mjc4LDEzMjM2MTA3NjQsMTQyNjg4MTk4NywzNTkwMzA0OTk0LDE5MjUwNzgzODgsNDA2ODE4MjM4MywyMTYyMDc4MjA2LDk5MTMzNjExMywyNjE0ODg4MTAzLDYzMzgwMzMxNywzMjQ4MjIyNTgwLDM0Nzk3NzQ4NjgsMzgzNTM5MDQwMSwyNjY2NjEzNDU4LDQwMjIyMjQ3NzQsOTQ0NzExMTM5LDI2NDM0NzA3OCwyMzQxMjYyNzczLDYwNDgwNzYyOCwyMDA3ODAwOTMzLDc3MDI1NTk4MywxNDk1OTkwOTAxLDEyNDkxNTAxMjIsMTg1NjQzMTIzNSwxNTU1MDgxNjkyLDMxNzUyMTgxMzIsMTk5NjA2NDk4NiwyMTk4OTUwODM3LDI1NTQyMjA4ODIsMzk5OTcxOTMzOSwyODIxODM0MzQ5LDc2Njc4NDAxNiwyOTUyOTk2ODA4LDI1NjY1OTQ4NzksMzIxMDMxMzY3MSwzMjAzMzM3OTU2LDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiwzNTg0NTI4NzExLDI0NjY5NDg5MDEsMTEzOTI2OTkzLDM3NTgzMjYzODMsMzM4MjQxODk1LDE2ODcxNzkzNiw2NjYzMDcyMDUsMTE4ODE3OTk2NCw3NzM1Mjk5MTIsMTU0NjA0NTczNCwxMjk0NzU3MzcyLDE1MjI4MDU0ODUsMTM5NjE4MjI5MSwyNjQzODMzODIzLDE2OTUxODM3MDAsMjM0MzUyNzM5MCwxOTg2NjYxMDUxLDEwMTQ0Nzc0ODAsMjE3NzAyNjM1MCwxMjA2NzU5MTQyLDI0NTY5NTYwMzcsMzQ0MDc3NjI3LDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCwyODIwMzAyNDExLDMxNTg0NTQyNzMsMzI1OTczMDgwMCwzNTA1OTUyNjU3LDMzNDU3NjQ3NzEsMTA2MjE3MDA4LDM1MTYwNjU4MTcsMzYwNjAwODM0NCwzNjAwMzUyODA0LDE0MzI3MjU3NzYsNDA5NDU3MTkwOSwxNDY3MDMxNTk0LDI3NTQyMzM0NCw4NTExNjk3MjAsNDMwMjI3NzM0LDMxMDA4MjM3NTIsNTA2OTQ4NjE2LDEzNjMyNTgxOTUsNjU5MDYwNTU2LDM3NTA2ODU1OTMsODgzOTk3ODc3LDM3ODUwNTAyODAsOTU4MTM5NTcxLDMzMTgzMDc0MjcsMTMyMjgyMjIxOCwzODEyNzIzNDAzLDE1MzcwMDIwNjMsMjAwMzAzNDk5NSwxNzQ3ODczNzc5LDM2MDIwMzY4OTksMTk1NTU2MjIyMiwxNTc1OTkwMDEyLDIwMjQxMDQ4MTUsMTEyNTU5MjkyOCwyMjI3NzMwNDUyLDI3MTY5MDQzMDYsMjM2MTg1MjQyNCw0NDI3NzYwNDQsMjQyODQzNjQ3NCw1OTM2OTgzNDQsMjc1NjczNDE4NywzNzMzMTEwMjQ5LDMyMDQwMzE0NzksMjk5OTM1MTU3MywzMzI5MzI1Mjk4LDM4MTU5MjA0MjcsMzM5MTU2OTYxNCwzOTI4MzgzOTAwLDM1MTUyNjcyNzEsNTY2MjgwNzExLDM5NDAxODc2MDYsMzQ1NDA2OTUzNCw0MTE4NjMwMjcxLDQwMDAyMzk5OTIsMTE2NDE4NDc0LDE5MTQxMzg1NTQsMTc0MjkyNDIxLDI3MzEwNTUyNzAsMjg5MzgwMzU2LDMyMDM5OTMwMDYsNDYwMzkzMjY5LDMyMDYyMDMxNSw2ODU0NzE3MzMsNTg3NDk2ODM2LDg1MjE0Mjk3MSwxMDg2NzkyODUxLDEwMTcwMzYyOTgsMzY1NTQzMTAwLDExMjYwMDA1ODAsMjYxODI5NzY3NiwxMjg4MDMzNDcwLDM0MDk4NTUxNTgsMTUwMTUwNTk0OCw0MjM0NTA5ODY2LDE2MDcxNjc5MTUsOTg3MTY3NDY4LDE4MTY0MDIzMTYsMTI0NjE4OTU5MV0sWj1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLDI0MDA5NTk3MDgsMzM5NTQ2OTc4Ml07Qi5pbmhlcml0cyhuLFgpLGUuc2hhMjU2PW4sbi5ibG9ja1NpemU9NTEyLG4ub3V0U2l6ZT0yNTYsbi5obWFjU3RyZW5ndGg9MTkyLG4ucGFkTGVuZ3RoPTY0LG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09aihwKHJbbi0yXSkscltuLTddLGwocltuLTE1XSkscltuLTE2XSk7dmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLGg9dGhpcy5oWzRdLGI9dGhpcy5oWzVdLHY9dGhpcy5oWzZdLHk9dGhpcy5oWzddO08odGhpcy5rLmxlbmd0aD09PXIubGVuZ3RoKTtmb3IodmFyIG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIG09Qyh5LGQoaCkscyhoLGIsdiksdGhpcy5rW25dLHJbbl0pLGc9VChjKGkpLHUoaSxvLGEpKTt5PXYsdj1iLGI9aCxoPVQoZixtKSxmPWEsYT1vLG89aSxpPVQobSxnKX10aGlzLmhbMF09VCh0aGlzLmhbMF0saSksdGhpcy5oWzFdPVQodGhpcy5oWzFdLG8pLHRoaXMuaFsyXT1UKHRoaXMuaFsyXSxhKSx0aGlzLmhbM109VCh0aGlzLmhbM10sZiksdGhpcy5oWzRdPVQodGhpcy5oWzRdLGgpLHRoaXMuaFs1XT1UKHRoaXMuaFs1XSxiKSx0aGlzLmhbNl09VCh0aGlzLmhbNl0sdiksdGhpcy5oWzddPVQodGhpcy5oWzddLHkpfSxuLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmgsXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaCxcImJpZ1wiKX0sQi5pbmhlcml0cyhpLG4pLGUuc2hhMjI0PWksaS5ibG9ja1NpemU9NTEyLGkub3V0U2l6ZT0yMjQsaS5obWFjU3RyZW5ndGg9MTkyLGkucGFkTGVuZ3RoPTY0LGkucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaC5zbGljZSgwLDcpLFwiYmlnXCIpOkIuc3BsaXQzMih0aGlzLmguc2xpY2UoMCw3KSxcImJpZ1wiKX0sQi5pbmhlcml0cyhvLFgpLGUuc2hhNTEyPW8sby5ibG9ja1NpemU9MTAyNCxvLm91dFNpemU9NTEyLG8uaG1hY1N0cmVuZ3RoPTE5MixvLnBhZExlbmd0aD0xMjgsby5wcm90b3R5cGUuX3ByZXBhcmVCbG9jaz1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10aGlzLlcsbj0wO248MzI7bisrKXJbbl09dFtlK25dO2Zvcig7bjxyLmxlbmd0aDtuKz0yKXt2YXIgaT1rKHJbbi00XSxyW24tM10pLG89eChyW24tNF0scltuLTNdKSxhPXJbbi0xNF0sZj1yW24tMTNdLHM9RShyW24tMzBdLHJbbi0yOV0pLHU9QShyW24tMzBdLHJbbi0yOV0pLGg9cltuLTMyXSxjPXJbbi0zMV07cltuXT1LKGksbyxhLGYscyx1LGgsYykscltuKzFdPUcoaSxvLGEsZixzLHUsaCxjKX19LG8ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXt0aGlzLl9wcmVwYXJlQmxvY2sodCxlKTt2YXIgcj10aGlzLlcsbj10aGlzLmhbMF0saT10aGlzLmhbMV0sbz10aGlzLmhbMl0sYT10aGlzLmhbM10sZj10aGlzLmhbNF0scz10aGlzLmhbNV0sdT10aGlzLmhbNl0saD10aGlzLmhbN10sYz10aGlzLmhbOF0sZD10aGlzLmhbOV0sbD10aGlzLmhbMTBdLHA9dGhpcy5oWzExXSxiPXRoaXMuaFsxMl0sRT10aGlzLmhbMTNdLEE9dGhpcy5oWzE0XSxrPXRoaXMuaFsxNV07Tyh0aGlzLmsubGVuZ3RoPT09ci5sZW5ndGgpO2Zvcih2YXIgeD0wO3g8ci5sZW5ndGg7eCs9Mil7dmFyIEk9QSxCPWssUj1NKGMsZCksUD1TKGMsZCksVD12KGMsZCxsLHAsYixFKSxqPXkoYyxkLGwscCxiLEUpLEM9dGhpcy5rW3hdLE49dGhpcy5rW3grMV0sTD1yW3hdLFU9clt4KzFdLHo9VihJLEIsUixQLFQsaixDLE4sTCxVKSxLPUgoSSxCLFIsUCxULGosQyxOLEwsVSksST13KG4saSksQj1fKG4saSksUj1tKG4saSxvLGEsZixzKSxQPWcobixpLG8sYSxmLHMpLEc9cShJLEIsUixQKSxYPUYoSSxCLFIsUCk7QT1iLGs9RSxiPWwsRT1wLGw9YyxwPWQsYz1xKHUsaCx6LEspLGQ9RihoLGgseixLKSx1PWYsaD1zLGY9byxzPWEsbz1uLGE9aSxuPXEoeixLLEcsWCksaT1GKHosSyxHLFgpfUQodGhpcy5oLDAsbixpKSxEKHRoaXMuaCwyLG8sYSksRCh0aGlzLmgsNCxmLHMpLEQodGhpcy5oLDYsdSxoKSxEKHRoaXMuaCw4LGMsZCksRCh0aGlzLmgsMTAsbCxwKSxEKHRoaXMuaCwxMixiLEUpLEQodGhpcy5oLDE0LEEsayl9LG8ucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfSxCLmluaGVyaXRzKGEsbyksZS5zaGEzODQ9YSxhLmJsb2NrU2l6ZT0xMDI0LGEub3V0U2l6ZT0zODQsYS5obWFjU3RyZW5ndGg9MTkyLGEucGFkTGVuZ3RoPTEyOCxhLnByb3RvdHlwZS5fZGlnZXN0PWZ1bmN0aW9uKHQpe3JldHVyblwiaGV4XCI9PT10P0IudG9IZXgzMih0aGlzLmguc2xpY2UoMCwxMiksXCJiaWdcIik6Qi5zcGxpdDMyKHRoaXMuaC5zbGljZSgwLDEyKSxcImJpZ1wiKX0sQi5pbmhlcml0cyhmLFgpLGUuc2hhMT1mLGYuYmxvY2tTaXplPTUxMixmLm91dFNpemU9MTYwLGYuaG1hY1N0cmVuZ3RoPTgwLGYucGFkTGVuZ3RoPTY0LGYucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24odCxlKXtmb3IodmFyIHI9dGhpcy5XLG49MDtuPDE2O24rKylyW25dPXRbZStuXTtmb3IoO248ci5sZW5ndGg7bisrKXJbbl09UChyW24tM11ecltuLThdXnJbbi0xNF1ecltuLTE2XSwxKTtmb3IodmFyIGk9dGhpcy5oWzBdLG89dGhpcy5oWzFdLGE9dGhpcy5oWzJdLGY9dGhpcy5oWzNdLHM9dGhpcy5oWzRdLG49MDtuPHIubGVuZ3RoO24rKyl7dmFyIHU9fn4obi8yMCksaD1DKFAoaSw1KSxiKHUsbyxhLGYpLHMscltuXSxaW3VdKTtzPWYsZj1hLGE9UChvLDMwKSxvPWksaT1ofXRoaXMuaFswXT1UKHRoaXMuaFswXSxpKSx0aGlzLmhbMV09VCh0aGlzLmhbMV0sbyksdGhpcy5oWzJdPVQodGhpcy5oWzJdLGEpLHRoaXMuaFszXT1UKHRoaXMuaFszXSxmKSx0aGlzLmhbNF09VCh0aGlzLmhbNF0scyl9LGYucHJvdG90eXBlLl9kaWdlc3Q9ZnVuY3Rpb24odCl7cmV0dXJuXCJoZXhcIj09PXQ/Qi50b0hleDMyKHRoaXMuaCxcImJpZ1wiKTpCLnNwbGl0MzIodGhpcy5oLFwiYmlnXCIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXtpZihBcnJheS5pc0FycmF5KHQpKXJldHVybiB0LnNsaWNlKCk7aWYoIXQpcmV0dXJuW107dmFyIHI9W107aWYoXCJzdHJpbmdcIj09dHlwZW9mIHQpaWYoZSl7aWYoXCJoZXhcIj09PWUpe3Q9dC5yZXBsYWNlKC9bXmEtejAtOV0rL2dpLFwiXCIpLHQubGVuZ3RoJTIhPT0wJiYodD1cIjBcIit0KTtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rPTIpci5wdXNoKHBhcnNlSW50KHRbbl0rdFtuKzFdLDE2KSl9fWVsc2UgZm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXQuY2hhckNvZGVBdChuKSxvPWk+PjgsYT0yNTUmaTtvP3IucHVzaChvLGEpOnIucHVzaChhKX1lbHNlIGZvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKXJbbl09MHx0W25dO3JldHVybiByfWZ1bmN0aW9uIGkodCl7Zm9yKHZhciBlPVwiXCIscj0wO3I8dC5sZW5ndGg7cisrKWUrPWYodFtyXS50b1N0cmluZygxNikpO3JldHVybiBlfWZ1bmN0aW9uIG8odCl7dmFyIGU9dD4+PjI0fHQ+Pj44JjY1MjgwfHQ8PDgmMTY3MTE2ODB8KDI1NSZ0KTw8MjQ7cmV0dXJuIGU+Pj4wfWZ1bmN0aW9uIGEodCxlKXtmb3IodmFyIHI9XCJcIixuPTA7bjx0Lmxlbmd0aDtuKyspe3ZhciBpPXRbbl07XCJsaXR0bGVcIj09PWUmJihpPW8oaSkpLHIrPXMoaS50b1N0cmluZygxNikpfXJldHVybiByfWZ1bmN0aW9uIGYodCl7cmV0dXJuIDE9PT10Lmxlbmd0aD9cIjBcIit0OnR9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gNz09PXQubGVuZ3RoP1wiMFwiK3Q6Nj09PXQubGVuZ3RoP1wiMDBcIit0OjU9PT10Lmxlbmd0aD9cIjAwMFwiK3Q6ND09PXQubGVuZ3RoP1wiMDAwMFwiK3Q6Mz09PXQubGVuZ3RoP1wiMDAwMDBcIit0OjI9PT10Lmxlbmd0aD9cIjAwMDAwMFwiK3Q6MT09PXQubGVuZ3RoP1wiMDAwMDAwMFwiK3Q6dH1mdW5jdGlvbiB1KHQsZSxyLG4pe3ZhciBpPXItZTt5KGklND09PTApO2Zvcih2YXIgbz1uZXcgQXJyYXkoaS80KSxhPTAsZj1lO2E8by5sZW5ndGg7YSsrLGYrPTQpe3ZhciBzO3M9XCJiaWdcIj09PW4/dFtmXTw8MjR8dFtmKzFdPDwxNnx0W2YrMl08PDh8dFtmKzNdOnRbZiszXTw8MjR8dFtmKzJdPDwxNnx0W2YrMV08PDh8dFtmXSxvW2FdPXM+Pj4wfXJldHVybiBvfWZ1bmN0aW9uIGgodCxlKXtmb3IodmFyIHI9bmV3IEFycmF5KDQqdC5sZW5ndGgpLG49MCxpPTA7bjx0Lmxlbmd0aDtuKyssaSs9NCl7dmFyIG89dFtuXTtcImJpZ1wiPT09ZT8ocltpXT1vPj4+MjQscltpKzFdPW8+Pj4xNiYyNTUscltpKzJdPW8+Pj44JjI1NSxyW2krM109MjU1Jm8pOihyW2krM109bz4+PjI0LHJbaSsyXT1vPj4+MTYmMjU1LHJbaSsxXT1vPj4+OCYyNTUscltpXT0yNTUmbyl9cmV0dXJuIHJ9ZnVuY3Rpb24gYyh0LGUpe3JldHVybiB0Pj4+ZXx0PDwzMi1lfWZ1bmN0aW9uIGQodCxlKXtyZXR1cm4gdDw8ZXx0Pj4+MzItZX1mdW5jdGlvbiBsKHQsZSl7cmV0dXJuIHQrZT4+PjB9ZnVuY3Rpb24gcCh0LGUscil7cmV0dXJuIHQrZStyPj4+MH1mdW5jdGlvbiBiKHQsZSxyLG4pe3JldHVybiB0K2UrcituPj4+MH1mdW5jdGlvbiB2KHQsZSxyLG4saSl7cmV0dXJuIHQrZStyK24raT4+PjB9ZnVuY3Rpb24geSh0LGUpe2lmKCF0KXRocm93IG5ldyBFcnJvcihlfHxcIkFzc2VydGlvbiBmYWlsZWRcIil9ZnVuY3Rpb24gbSh0LGUscixuKXt2YXIgaT10W2VdLG89dFtlKzFdLGE9bitvPj4+MCxmPShhPG4/MTowKStyK2k7dFtlXT1mPj4+MCx0W2UrMV09YX1mdW5jdGlvbiBnKHQsZSxyLG4pe3ZhciBpPWUrbj4+PjAsbz0oaTxlPzE6MCkrdCtyO3JldHVybiBvPj4+MH1mdW5jdGlvbiB3KHQsZSxyLG4pe3ZhciBpPWUrbjtyZXR1cm4gaT4+PjB9ZnVuY3Rpb24gXyh0LGUscixuLGksbyxhLGYpe3ZhciBzPTAsdT1lO3U9dStuPj4+MCxzKz11PGU/MTowLHU9dStvPj4+MCxzKz11PG8/MTowLHU9dStmPj4+MCxzKz11PGY/MTowO3ZhciBoPXQrcitpK2ErcztyZXR1cm4gaD4+PjB9ZnVuY3Rpb24gTSh0LGUscixuLGksbyxhLGYpe3ZhciBzPWUrbitvK2Y7cmV0dXJuIHM+Pj4wfWZ1bmN0aW9uIFModCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9MCxjPWU7Yz1jK24+Pj4wLGgrPWM8ZT8xOjAsYz1jK28+Pj4wLGgrPWM8bz8xOjAsYz1jK2Y+Pj4wLGgrPWM8Zj8xOjAsYz1jK3U+Pj4wLGgrPWM8dT8xOjA7dmFyIGQ9dCtyK2krYStzK2g7cmV0dXJuIGQ+Pj4wfWZ1bmN0aW9uIEUodCxlLHIsbixpLG8sYSxmLHMsdSl7dmFyIGg9ZStuK28rZit1O3JldHVybiBoPj4+MH1mdW5jdGlvbiBBKHQsZSxyKXt2YXIgbj1lPDwzMi1yfHQ+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiBrKHQsZSxyKXt2YXIgbj10PDwzMi1yfGU+Pj5yO3JldHVybiBuPj4+MH1mdW5jdGlvbiB4KHQsZSxyKXtyZXR1cm4gdD4+PnJ9ZnVuY3Rpb24gSSh0LGUscil7dmFyIG49dDw8MzItcnxlPj4+cjtyZXR1cm4gbj4+PjB9dmFyIEI9ZSxPPXIoMik7Qi50b0FycmF5PW4sQi50b0hleD1pLEIuaHRvbmw9byxCLnRvSGV4MzI9YSxCLnplcm8yPWYsQi56ZXJvOD1zLEIuam9pbjMyPXUsQi5zcGxpdDMyPWgsQi5yb3RyMzI9YyxCLnJvdGwzMj1kLEIuc3VtMzI9bCxCLnN1bTMyXzM9cCxCLnN1bTMyXzQ9YixCLnN1bTMyXzU9dixCLmFzc2VydD15LEIuaW5oZXJpdHM9TyxlLnN1bTY0PW0sZS5zdW02NF9oaT1nLGUuc3VtNjRfbG89dyxlLnN1bTY0XzRfaGk9XyxlLnN1bTY0XzRfbG89TSxlLnN1bTY0XzVfaGk9UyxlLnN1bTY0XzVfbG89RSxlLnJvdHI2NF9oaT1BLGUucm90cjY0X2xvPWssZS5zaHI2NF9oaT14LGUuc2hyNjRfbG89SX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiOyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKGUscil7aWYoZS5sZW5ndGglbyE9PTApe3ZhciBuPWUubGVuZ3RoKyhvLWUubGVuZ3RoJW8pO2U9dC5jb25jYXQoW2UsYV0sbil9Zm9yKHZhciBpPVtdLGY9cj9lLnJlYWRJbnQzMkJFOmUucmVhZEludDMyTEUscz0wO3M8ZS5sZW5ndGg7cys9bylpLnB1c2goZi5jYWxsKGUscykpO3JldHVybiBpfWZ1bmN0aW9uIG4oZSxyLG4pe2Zvcih2YXIgaT1uZXcgdChyKSxvPW4/aS53cml0ZUludDMyQkU6aS53cml0ZUludDMyTEUsYT0wO2E8ZS5sZW5ndGg7YSsrKW8uY2FsbChpLGVbYV0sNCphLCEwKTtyZXR1cm4gaX1mdW5jdGlvbiBpKGUsaSxvLGEpe3QuaXNCdWZmZXIoZSl8fChlPW5ldyB0KGUpKTt2YXIgcz1pKHIoZSxhKSxlLmxlbmd0aCpmKTtyZXR1cm4gbihzLG8sYSl9dmFyIG89NCxhPW5ldyB0KG8pO2EuZmlsbCgwKTt2YXIgZj04O2UuaGFzaD1pfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKHQpe2kuY2FsbCh0aGlzKSx0aGlzLmhhc2hNb2RlPVwic3RyaW5nXCI9PXR5cGVvZiB0LHRoaXMuaGFzaE1vZGU/dGhpc1t0XT10aGlzLl9maW5hbE9yRGlnZXN0OnRoaXMuZmluYWw9dGhpcy5fZmluYWxPckRpZ2VzdCx0aGlzLl9kZWNvZGVyPW51bGwsdGhpcy5fZW5jb2Rpbmc9bnVsbH12YXIgaT1yKDMxKS5UcmFuc2Zvcm0sbz1yKDIpLGE9cig1MikuU3RyaW5nRGVjb2Rlcjt0LmV4cG9ydHM9bixvKG4saSksbi5wcm90b3R5cGUudXBkYXRlPWZ1bmN0aW9uKHQscixuKXtcInN0cmluZ1wiPT10eXBlb2YgdCYmKHQ9bmV3IGUodCxyKSk7dmFyIGk9dGhpcy5fdXBkYXRlKHQpO3JldHVybiB0aGlzLmhhc2hNb2RlP3RoaXM6KG4mJihpPXRoaXMuX3RvU3RyaW5nKGksbikpLGkpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbigpe30sbi5wcm90b3R5cGUuZ2V0QXV0aFRhZz1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihcInRyeWluZyB0byBnZXQgYXV0aCB0YWcgaW4gdW5zdXBwb3J0ZWQgc3RhdGVcIil9LG4ucHJvdG90eXBlLnNldEF1dGhUYWc9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGF1dGggdGFnIGluIHVuc3VwcG9ydGVkIHN0YXRlXCIpfSxuLnByb3RvdHlwZS5zZXRBQUQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJ0cnlpbmcgdG8gc2V0IGFhZCBpbiB1bnN1cHBvcnRlZCBzdGF0ZVwiKX0sbi5wcm90b3R5cGUuX3RyYW5zZm9ybT1mdW5jdGlvbih0LGUscil7dmFyIG47dHJ5e3RoaXMuaGFzaE1vZGU/dGhpcy5fdXBkYXRlKHQpOnRoaXMucHVzaCh0aGlzLl91cGRhdGUodCkpfWNhdGNoKHQpe249dH1maW5hbGx5e3Iobil9fSxuLnByb3RvdHlwZS5fZmx1c2g9ZnVuY3Rpb24odCl7dmFyIGU7dHJ5e3RoaXMucHVzaCh0aGlzLl9maW5hbCgpKX1jYXRjaCh0KXtlPXR9ZmluYWxseXt0KGUpfX0sbi5wcm90b3R5cGUuX2ZpbmFsT3JEaWdlc3Q9ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5fZmluYWwoKXx8bmV3IGUoXCJcIik7cmV0dXJuIHQmJihyPXRoaXMuX3RvU3RyaW5nKHIsdCwhMCkpLHJ9LG4ucHJvdG90eXBlLl90b1N0cmluZz1mdW5jdGlvbih0LGUscil7aWYodGhpcy5fZGVjb2Rlcnx8KHRoaXMuX2RlY29kZXI9bmV3IGEoZSksdGhpcy5fZW5jb2Rpbmc9ZSksdGhpcy5fZW5jb2RpbmchPT1lKXRocm93IG5ldyBFcnJvcihcImNhbid0IHN3aXRjaCBlbmNvZGluZ3NcIik7dmFyIG49dGhpcy5fZGVjb2Rlci53cml0ZSh0KTtyZXR1cm4gciYmKG4rPXRoaXMuX2RlY29kZXIuZW5kKCkpLG59fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe2Zvcih2YXIgZT1bXSxyPTAsbj0wO3I8dC5sZW5ndGg7cisrLG4rPTgpZVtuPj4+NV18PXRbcl08PDI0LW4lMzI7cmV0dXJuIGV9ZnVuY3Rpb24gbih0KXtmb3IodmFyIGU9W10scj0wO3I8MzIqdC5sZW5ndGg7cis9OCllLnB1c2godFtyPj4+NV0+Pj4yNC1yJTMyJjI1NSk7cmV0dXJuIGV9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPTA7bjwxNjtuKyspe3ZhciBpPXIrbixjPWVbaV07ZVtpXT0xNjcxMTkzNSYoYzw8OHxjPj4+MjQpfDQyNzgyNTUzNjAmKGM8PDI0fGM+Pj44KX12YXIgbSxnLHcsXyxNLFMsRSxBLGsseDtTPW09dFswXSxFPWc9dFsxXSxBPXc9dFsyXSxrPV89dFszXSx4PU09dFs0XTt2YXIgSTtmb3Iobj0wO248ODA7bis9MSlJPW0rZVtyK2Rbbl1dfDAsSSs9bjwxNj9vKGcsdyxfKSt2WzBdOm48MzI/YShnLHcsXykrdlsxXTpuPDQ4P2YoZyx3LF8pK3ZbMl06bjw2ND9zKGcsdyxfKSt2WzNdOnUoZyx3LF8pK3ZbNF0sSXw9MCxJPWgoSSxwW25dKSxJPUkrTXwwLG09TSxNPV8sXz1oKHcsMTApLHc9ZyxnPUksST1TK2VbcitsW25dXXwwLEkrPW48MTY/dShFLEEsaykreVswXTpuPDMyP3MoRSxBLGspK3lbMV06bjw0OD9mKEUsQSxrKSt5WzJdOm48NjQ/YShFLEEsaykreVszXTpvKEUsQSxrKSt5WzRdLEl8PTAsST1oKEksYltuXSksST1JK3h8MCxTPXgseD1rLGs9aChBLDEwKSxBPUUsRT1JO0k9dFsxXSt3K2t8MCx0WzFdPXRbMl0rXyt4fDAsdFsyXT10WzNdK00rU3wwLHRbM109dFs0XSttK0V8MCx0WzRdPXRbMF0rZytBfDAsdFswXT1JfWZ1bmN0aW9uIG8odCxlLHIpe3JldHVybiB0XmVecn1mdW5jdGlvbiBhKHQsZSxyKXtyZXR1cm4gdCZlfH50JnJ9ZnVuY3Rpb24gZih0LGUscil7cmV0dXJuKHR8fmUpXnJ9ZnVuY3Rpb24gcyh0LGUscil7cmV0dXJuIHQmcnxlJn5yfWZ1bmN0aW9uIHUodCxlLHIpe3JldHVybiB0XihlfH5yKX1mdW5jdGlvbiBoKHQsZSl7cmV0dXJuIHQ8PGV8dD4+PjMyLWV9ZnVuY3Rpb24gYyh0KXt2YXIgbz1bMTczMjU4NDE5Myw0MDIzMjMzNDE3LDI1NjIzODMxMDIsMjcxNzMzODc4LDMyODUzNzc1MjBdO1wic3RyaW5nXCI9PXR5cGVvZiB0JiYodD1uZXcgZSh0LFwidXRmOFwiKSk7dmFyIGE9cih0KSxmPTgqdC5sZW5ndGgscz04KnQubGVuZ3RoO2FbZj4+PjVdfD0xMjg8PDI0LWYlMzIsYVsoZis2ND4+Pjk8PDQpKzE0XT0xNjcxMTkzNSYoczw8OHxzPj4+MjQpfDQyNzgyNTUzNjAmKHM8PDI0fHM+Pj44KTtmb3IodmFyIHU9MDt1PGEubGVuZ3RoO3UrPTE2KWkobyxhLHUpO2Zvcih1PTA7dTw1O3UrKyl7dmFyIGg9b1t1XTtvW3VdPTE2NzExOTM1JihoPDw4fGg+Pj4yNCl8NDI3ODI1NTM2MCYoaDw8MjR8aD4+PjgpfXZhciBjPW4obyk7cmV0dXJuIG5ldyBlKGMpfS8qKiBAcHJlc2VydmVcbihjKSAyMDEyIGJ5IEPDqWRyaWMgTWVzbmlsLiBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG5SZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQgbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zIGFyZSBtZXQ6XG5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci5cbiAgICAtIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUyBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBIT0xERVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuKi9cbnZhciBkPVswLDEsMiwzLDQsNSw2LDcsOCw5LDEwLDExLDEyLDEzLDE0LDE1LDcsNCwxMywxLDEwLDYsMTUsMywxMiwwLDksNSwyLDE0LDExLDgsMywxMCwxNCw0LDksMTUsOCwxLDIsNywwLDYsMTMsMTEsNSwxMiwxLDksMTEsMTAsMCw4LDEyLDQsMTMsMyw3LDE1LDE0LDUsNiwyLDQsMCw1LDksNywxMiwyLDEwLDE0LDEsMyw4LDExLDYsMTUsMTNdLGw9WzUsMTQsNywwLDksMiwxMSw0LDEzLDYsMTUsOCwxLDEwLDMsMTIsNiwxMSwzLDcsMCwxMyw1LDEwLDE0LDE1LDgsMTIsNCw5LDEsMiwxNSw1LDEsMyw3LDE0LDYsOSwxMSw4LDEyLDIsMTAsMCw0LDEzLDgsNiw0LDEsMywxMSwxNSwwLDUsMTIsMiwxMyw5LDcsMTAsMTQsMTIsMTUsMTAsNCwxLDUsOCw3LDYsMiwxMywxNCwwLDMsOSwxMV0scD1bMTEsMTQsMTUsMTIsNSw4LDcsOSwxMSwxMywxNCwxNSw2LDcsOSw4LDcsNiw4LDEzLDExLDksNywxNSw3LDEyLDE1LDksMTEsNywxMywxMiwxMSwxMyw2LDcsMTQsOSwxMywxNSwxNCw4LDEzLDYsNSwxMiw3LDUsMTEsMTIsMTQsMTUsMTQsMTUsOSw4LDksMTQsNSw2LDgsNiw1LDEyLDksMTUsNSwxMSw2LDgsMTMsMTIsNSwxMiwxMywxNCwxMSw4LDUsNl0sYj1bOCw5LDksMTEsMTMsMTUsMTUsNSw3LDcsOCwxMSwxNCwxNCwxMiw2LDksMTMsMTUsNywxMiw4LDksMTEsNyw3LDEyLDcsNiwxNSwxMywxMSw5LDcsMTUsMTEsOCw2LDYsMTQsMTIsMTMsNSwxNCwxMywxMyw3LDUsMTUsNSw4LDExLDE0LDE0LDYsMTQsNiw5LDEyLDksMTIsNSwxNSw4LDgsNSwxMiw5LDEyLDUsMTQsNiw4LDEzLDYsNSwxNSwxMywxMSwxMV0sdj1bMCwxNTE4NTAwMjQ5LDE4NTk3NzUzOTMsMjQwMDk1OTcwOCwyODQwODUzODM4XSx5PVsxMzUyODI5OTI2LDE1NDg2MDM2ODQsMTgzNjA3MjY5MSwyMDUzOTk0MjE3LDBdO3QuZXhwb3J0cz1jfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBlPXQuZXhwb3J0cz1mdW5jdGlvbih0KXt0PXQudG9Mb3dlckNhc2UoKTt2YXIgcj1lW3RdO2lmKCFyKXRocm93IG5ldyBFcnJvcih0K1wiIGlzIG5vdCBzdXBwb3J0ZWQgKHdlIGFjY2VwdCBwdWxsIHJlcXVlc3RzKVwiKTtyZXR1cm4gbmV3IHJ9O2Uuc2hhPXIoNTY5KSxlLnNoYTE9cig1NzApLGUuc2hhMjI0PXIoNTcxKSxlLnNoYTI1Nj1yKDIyNyksZS5zaGEzODQ9cig1NzIpLGUuc2hhNTEyPXIoMjI4KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1oLHMuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDw1fHQ+Pj4yN31mdW5jdGlvbiBvKHQpe3JldHVybiB0PDwzMHx0Pj4+Mn1mdW5jdGlvbiBhKHQsZSxyLG4pe3JldHVybiAwPT09dD9lJnJ8fmUmbjoyPT09dD9lJnJ8ZSZufHImbjplXnJebn12YXIgZj1yKDIpLHM9cig2MCksdT1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGg9bmV3IEFycmF5KDgwKTtmKG4scyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixmPTB8dGhpcy5fYyxzPTB8dGhpcy5fZCxoPTB8dGhpcy5fZSxjPTA7YzwxNjsrK2MpZVtjXT10LnJlYWRJbnQzMkJFKDQqYyk7Zm9yKDtjPDgwOysrYyllW2NdPWVbYy0zXV5lW2MtOF1eZVtjLTE0XV5lW2MtMTZdO2Zvcih2YXIgZD0wO2Q8ODA7KytkKXt2YXIgbD1+fihkLzIwKSxwPWkocikrYShsLG4sZixzKStoK2VbZF0rdVtsXXwwO2g9cyxzPWYsZj1vKG4pLG49cixyPXB9dGhpcy5fYT1yK3RoaXMuX2F8MCx0aGlzLl9iPW4rdGhpcy5fYnwwLHRoaXMuX2M9Zit0aGlzLl9jfDAsdGhpcy5fZD1zK3RoaXMuX2R8MCx0aGlzLl9lPWgrdGhpcy5fZXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDIwKTtyZXR1cm4gdC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1jLHUuY2FsbCh0aGlzLDY0LDU2KX1mdW5jdGlvbiBpKHQpe3JldHVybiB0PDwxfHQ+Pj4zMX1mdW5jdGlvbiBvKHQpe3JldHVybiB0PDw1fHQ+Pj4yN31mdW5jdGlvbiBhKHQpe3JldHVybiB0PDwzMHx0Pj4+Mn1mdW5jdGlvbiBmKHQsZSxyLG4pe3JldHVybiAwPT09dD9lJnJ8fmUmbjoyPT09dD9lJnJ8ZSZufHImbjplXnJebn12YXIgcz1yKDIpLHU9cig2MCksaD1bMTUxODUwMDI0OSwxODU5Nzc1MzkzLC0xODk0MDA3NTg4LC04OTk0OTc1MTRdLGM9bmV3IEFycmF5KDgwKTtzKG4sdSksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9hPTE3MzI1ODQxOTMsdGhpcy5fYj00MDIzMjMzNDE3LHRoaXMuX2M9MjU2MjM4MzEwMix0aGlzLl9kPTI3MTczMzg3OCx0aGlzLl9lPTMyODUzNzc1MjAsdGhpc30sbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dGhpcy5fdyxyPTB8dGhpcy5fYSxuPTB8dGhpcy5fYixzPTB8dGhpcy5fYyx1PTB8dGhpcy5fZCxjPTB8dGhpcy5fZSxkPTA7ZDwxNjsrK2QpZVtkXT10LnJlYWRJbnQzMkJFKDQqZCk7Zm9yKDtkPDgwOysrZCllW2RdPWkoZVtkLTNdXmVbZC04XV5lW2QtMTRdXmVbZC0xNl0pO2Zvcih2YXIgbD0wO2w8ODA7KytsKXt2YXIgcD1+fihsLzIwKSxiPW8ocikrZihwLG4scyx1KStjK2VbbF0raFtwXXwwO2M9dSx1PXMscz1hKG4pLG49cixyPWJ9dGhpcy5fYT1yK3RoaXMuX2F8MCx0aGlzLl9iPW4rdGhpcy5fYnwwLHRoaXMuX2M9cyt0aGlzLl9jfDAsdGhpcy5fZD11K3RoaXMuX2R8MCx0aGlzLl9lPWMrdGhpcy5fZXwwfSxuLnByb3RvdHlwZS5faGFzaD1mdW5jdGlvbigpe3ZhciB0PW5ldyBlKDIwKTtyZXR1cm4gdC53cml0ZUludDMyQkUoMHx0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKDB8dGhpcy5fYiw0KSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2MsOCksdC53cml0ZUludDMyQkUoMHx0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSgwfHRoaXMuX2UsMTYpLHR9LHQuZXhwb3J0cz1ufSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiBuKCl7dGhpcy5pbml0KCksdGhpcy5fdz1mLGEuY2FsbCh0aGlzLDY0LDU2KX12YXIgaT1yKDIpLG89cigyMjcpLGE9cig2MCksZj1uZXcgQXJyYXkoNjQpO2kobixvKSxuLnByb3RvdHlwZS5pbml0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2E9MzIzODM3MTAzMix0aGlzLl9iPTkxNDE1MDY2Myx0aGlzLl9jPTgxMjcwMjk5OSx0aGlzLl9kPTQxNDQ5MTI2OTcsdGhpcy5fZT00MjkwNzc1ODU3LHRoaXMuX2Y9MTc1MDYwMzAyNSx0aGlzLl9nPTE2OTQwNzY4MzksdGhpcy5faD0zMjA0MDc1NDI4LHRoaXN9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGUoMjgpO3JldHVybiB0LndyaXRlSW50MzJCRSh0aGlzLl9hLDApLHQud3JpdGVJbnQzMkJFKHRoaXMuX2IsNCksdC53cml0ZUludDMyQkUodGhpcy5fYyw4KSx0LndyaXRlSW50MzJCRSh0aGlzLl9kLDEyKSx0LndyaXRlSW50MzJCRSh0aGlzLl9lLDE2KSx0LndyaXRlSW50MzJCRSh0aGlzLl9mLDIwKSx0LndyaXRlSW50MzJCRSh0aGlzLl9nLDI0KSx0fSx0LmV4cG9ydHM9bn0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbigpe3RoaXMuaW5pdCgpLHRoaXMuX3c9ZixhLmNhbGwodGhpcywxMjgsMTEyKX12YXIgaT1yKDIpLG89cigyMjgpLGE9cig2MCksZj1uZXcgQXJyYXkoMTYwKTtpKG4sbyksbi5wcm90b3R5cGUuaW5pdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9haD0zNDE4MDcwMzY1LHRoaXMuX2JoPTE2NTQyNzAyNTAsdGhpcy5fY2g9MjQzODUyOTM3MCx0aGlzLl9kaD0zNTU0NjIzNjAsdGhpcy5fZWg9MTczMTQwNTQxNSx0aGlzLl9maD0yMzk0MTgwMjMxLHRoaXMuX2doPTM2NzUwMDg1MjUsdGhpcy5faGg9MTIwMzA2MjgxMyx0aGlzLl9hbD0zMjM4MzcxMDMyLHRoaXMuX2JsPTkxNDE1MDY2Myx0aGlzLl9jbD04MTI3MDI5OTksdGhpcy5fZGw9NDE0NDkxMjY5Nyx0aGlzLl9lbD00MjkwNzc1ODU3LHRoaXMuX2ZsPTE3NTA2MDMwMjUsdGhpcy5fZ2w9MTY5NDA3NjgzOSx0aGlzLl9obD0zMjA0MDc1NDI4LHRoaXN9LG4ucHJvdG90eXBlLl9oYXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gdCh0LGUsbil7ci53cml0ZUludDMyQkUodCxuKSxyLndyaXRlSW50MzJCRShlLG4rNCl9dmFyIHI9bmV3IGUoNDgpO3JldHVybiB0KHRoaXMuX2FoLHRoaXMuX2FsLDApLHQodGhpcy5fYmgsdGhpcy5fYmwsOCksdCh0aGlzLl9jaCx0aGlzLl9jbCwxNiksdCh0aGlzLl9kaCx0aGlzLl9kbCwyNCksdCh0aGlzLl9laCx0aGlzLl9lbCwzMiksdCh0aGlzLl9maCx0aGlzLl9mbCw0MCkscn0sdC5leHBvcnRzPW59KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSl7dmFyIHI9bmV3IHQoYVtlXS5wcmltZSxcImhleFwiKSxuPW5ldyB0KGFbZV0uZ2VuLFwiaGV4XCIpO3JldHVybiBuZXcgZihyLG4pfWZ1bmN0aW9uIGkoZSxyLG4sYSl7cmV0dXJuIHQuaXNCdWZmZXIocil8fHZvaWQgMD09PXNbcl0/aShlLFwiYmluYXJ5XCIscixuKToocj1yfHxcImJpbmFyeVwiLGE9YXx8XCJiaW5hcnlcIixuPW58fG5ldyB0KFsyXSksdC5pc0J1ZmZlcihuKXx8KG49bmV3IHQobixhKSksXCJudW1iZXJcIj09dHlwZW9mIGU/bmV3IGYobyhlLG4pLG4sITApOih0LmlzQnVmZmVyKGUpfHwoZT1uZXcgdChlLHIpKSxuZXcgZihlLG4sITApKSl9dmFyIG89cigyMjkpLGE9cig0NjgpLGY9cig1NzQpLHM9e2JpbmFyeTohMCxoZXg6ITAsYmFzZTY0OiEwfTtlLkRpZmZpZUhlbGxtYW5Hcm91cD1lLmNyZWF0ZURpZmZpZUhlbGxtYW5Hcm91cD1lLmdldERpZmZpZUhlbGxtYW49bixlLmNyZWF0ZURpZmZpZUhlbGxtYW49ZS5EaWZmaWVIZWxsbWFuPWl9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXtyZXR1cm4gcj1yfHxcInV0ZjhcIixlLmlzQnVmZmVyKHQpfHwodD1uZXcgZSh0LHIpKSx0aGlzLl9wdWI9bmV3IHModCksdGhpc31mdW5jdGlvbiBpKHQscil7cmV0dXJuIHI9cnx8XCJ1dGY4XCIsZS5pc0J1ZmZlcih0KXx8KHQ9bmV3IGUodCxyKSksdGhpcy5fcHJpdj1uZXcgcyh0KSx0aGlzfWZ1bmN0aW9uIG8odCxlKXt2YXIgcj1lLnRvU3RyaW5nKFwiaGV4XCIpLG49W3IsdC50b1N0cmluZygxNildLmpvaW4oXCJfXCIpO2lmKG4gaW4gbSlyZXR1cm4gbVtuXTt2YXIgaT0wO2lmKHQuaXNFdmVuKCl8fCF2LnNpbXBsZVNpZXZlfHwhdi5mZXJtYXRUZXN0KHQpfHwhaC50ZXN0KHQpKXJldHVybiBpKz0xLGkrPVwiMDJcIj09PXJ8fFwiMDVcIj09PXI/ODo0LG1bbl09aSxpO2gudGVzdCh0LnNocm4oMSkpfHwoaSs9Mik7dmFyIG87c3dpdGNoKHIpe2Nhc2VcIjAyXCI6dC5tb2QoYykuY21wKGQpJiYoaSs9OCk7YnJlYWs7Y2FzZVwiMDVcIjpvPXQubW9kKGwpLG8uY21wKHApJiZvLmNtcChiKSYmKGkrPTgpO2JyZWFrO2RlZmF1bHQ6aSs9NH1yZXR1cm4gbVtuXT1pLGl9ZnVuY3Rpb24gYSh0LGUscil7dGhpcy5zZXRHZW5lcmF0b3IoZSksdGhpcy5fX3ByaW1lPW5ldyBzKHQpLHRoaXMuX3ByaW1lPXMubW9udCh0aGlzLl9fcHJpbWUpLHRoaXMuX3ByaW1lTGVuPXQubGVuZ3RoLHRoaXMuX3B1Yj12b2lkIDAsdGhpcy5fcHJpdj12b2lkIDAsdGhpcy5fcHJpbWVDb2RlPXZvaWQgMCxyPyh0aGlzLnNldFB1YmxpY0tleT1uLHRoaXMuc2V0UHJpdmF0ZUtleT1pKTp0aGlzLl9wcmltZUNvZGU9OH1mdW5jdGlvbiBmKHQscil7dmFyIG49bmV3IGUodC50b0FycmF5KCkpO3JldHVybiByP24udG9TdHJpbmcocik6bn12YXIgcz1yKDE1MCksdT1yKDIzMCksaD1uZXcgdSxjPW5ldyBzKDI0KSxkPW5ldyBzKDExKSxsPW5ldyBzKDEwKSxwPW5ldyBzKDMpLGI9bmV3IHMoNyksdj1yKDIyOSkseT1yKDYxKTt0LmV4cG9ydHM9YTt2YXIgbT17fTtPYmplY3QuZGVmaW5lUHJvcGVydHkoYS5wcm90b3R5cGUsXCJ2ZXJpZnlFcnJvclwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVyblwibnVtYmVyXCIhPXR5cGVvZiB0aGlzLl9wcmltZUNvZGUmJih0aGlzLl9wcmltZUNvZGU9byh0aGlzLl9fcHJpbWUsdGhpcy5fX2dlbikpLHRoaXMuX3ByaW1lQ29kZX19KSxhLnByb3RvdHlwZS5nZW5lcmF0ZUtleXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcHJpdnx8KHRoaXMuX3ByaXY9bmV3IHMoeSh0aGlzLl9wcmltZUxlbikpKSx0aGlzLl9wdWI9dGhpcy5fZ2VuLnRvUmVkKHRoaXMuX3ByaW1lKS5yZWRQb3codGhpcy5fcHJpdikuZnJvbVJlZCgpLHRoaXMuZ2V0UHVibGljS2V5KCl9LGEucHJvdG90eXBlLmNvbXB1dGVTZWNyZXQ9ZnVuY3Rpb24odCl7dD1uZXcgcyh0KSx0PXQudG9SZWQodGhpcy5fcHJpbWUpO3ZhciByPXQucmVkUG93KHRoaXMuX3ByaXYpLmZyb21SZWQoKSxuPW5ldyBlKHIudG9BcnJheSgpKSxpPXRoaXMuZ2V0UHJpbWUoKTtpZihuLmxlbmd0aDxpLmxlbmd0aCl7dmFyIG89bmV3IGUoaS5sZW5ndGgtbi5sZW5ndGgpO28uZmlsbCgwKSxuPWUuY29uY2F0KFtvLG5dKX1yZXR1cm4gbn0sYS5wcm90b3R5cGUuZ2V0UHVibGljS2V5PWZ1bmN0aW9uKHQpe3JldHVybiBmKHRoaXMuX3B1Yix0KX0sYS5wcm90b3R5cGUuZ2V0UHJpdmF0ZUtleT1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9wcml2LHQpfSxhLnByb3RvdHlwZS5nZXRQcmltZT1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9fcHJpbWUsdCl9LGEucHJvdG90eXBlLmdldEdlbmVyYXRvcj1mdW5jdGlvbih0KXtyZXR1cm4gZih0aGlzLl9nZW4sdCl9LGEucHJvdG90eXBlLnNldEdlbmVyYXRvcj1mdW5jdGlvbih0LHIpe3JldHVybiByPXJ8fFwidXRmOFwiLGUuaXNCdWZmZXIodCl8fCh0PW5ldyBlKHQscikpLHRoaXMuX19nZW49dCx0aGlzLl9nZW49bmV3IHModCksdGhpc319KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLnJhbmQ9dH12YXIgaTtpZih0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIGl8fChpPW5ldyBuKG51bGwpKSxpLmdlbmVyYXRlKHQpfSx0LmV4cG9ydHMuUmFuZD1uLG4ucHJvdG90eXBlLmdlbmVyYXRlPWZ1bmN0aW9uKHQpe3JldHVybiB0aGlzLl9yYW5kKHQpfSxcIm9iamVjdFwiPT10eXBlb2Ygd2luZG93KXdpbmRvdy5jcnlwdG8mJndpbmRvdy5jcnlwdG8uZ2V0UmFuZG9tVmFsdWVzP24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe3ZhciBlPW5ldyBVaW50OEFycmF5KHQpO3JldHVybiB3aW5kb3cuY3J5cHRvLmdldFJhbmRvbVZhbHVlcyhlKSxlfTp3aW5kb3cubXNDcnlwdG8mJndpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXM/bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHdpbmRvdy5tc0NyeXB0by5nZXRSYW5kb21WYWx1ZXMoZSksZX06bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoXCJOb3QgaW1wbGVtZW50ZWQgeWV0XCIpfTtlbHNlIHRyeXt2YXIgbz1yKDYxMSk7bi5wcm90b3R5cGUuX3JhbmQ9ZnVuY3Rpb24odCl7cmV0dXJuIG8ucmFuZG9tQnl0ZXModCl9fWNhdGNoKHQpe24ucHJvdG90eXBlLl9yYW5kPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheSh0KSxyPTA7cjxlLmxlbmd0aDtyKyspZVtyXT10aGlzLnJhbmQuZ2V0Qnl0ZSgpO3JldHVybiBlfX19LGZ1bmN0aW9uKHQsZSl7dmFyIHI9TWF0aC5wb3coMiwzMCktMTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXtpZihcIm51bWJlclwiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiSXRlcmF0aW9ucyBub3QgYSBudW1iZXJcIik7aWYodDwwKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQgaXRlcmF0aW9uc1wiKTtpZihcIm51bWJlclwiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKFwiS2V5IGxlbmd0aCBub3QgYSBudW1iZXJcIik7aWYoZTwwfHxlPnJ8fGUhPT1lKXRocm93IG5ldyBUeXBlRXJyb3IoXCJCYWQga2V5IGxlbmd0aFwiKX19LGZ1bmN0aW9uKHQsZSxyKXtlLnB1YmxpY0VuY3J5cHQ9cig1OTMpLGUucHJpdmF0ZURlY3J5cHQ9cig1OTIpLGUucHJpdmF0ZUVuY3J5cHQ9ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5wdWJsaWNFbmNyeXB0KHQsciwhMCl9LGUucHVibGljRGVjcnlwdD1mdW5jdGlvbih0LHIpe3JldHVybiBlLnByaXZhdGVEZWNyeXB0KHQsciwhMCl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49cigxMDYpLGk9bi5kZWZpbmUoXCJSU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcml2YXRlRXhwb25lbnRcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTFcIikuaW50KCksdGhpcy5rZXkoXCJwcmltZTJcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDFcIikuaW50KCksdGhpcy5rZXkoXCJleHBvbmVudDJcIikuaW50KCksdGhpcy5rZXkoXCJjb2VmZmljaWVudFwiKS5pbnQoKSl9KTtlLlJTQVByaXZhdGVLZXk9aTt2YXIgbz1uLmRlZmluZShcIlJTQVB1YmxpY0tleVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJtb2R1bHVzXCIpLmludCgpLHRoaXMua2V5KFwicHVibGljRXhwb25lbnRcIikuaW50KCkpfSk7ZS5SU0FQdWJsaWNLZXk9bzt2YXIgYT1uLmRlZmluZShcIlN1YmplY3RQdWJsaWNLZXlJbmZvXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS51c2UoZiksdGhpcy5rZXkoXCJzdWJqZWN0UHVibGljS2V5XCIpLmJpdHN0cigpKX0pO2UuUHVibGljS2V5PWE7dmFyIGY9bi5kZWZpbmUoXCJBbGdvcml0aG1JZGVudGlmaWVyXCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29yaXRobVwiKS5vYmppZCgpLHRoaXMua2V5KFwibm9uZVwiKS5udWxsXygpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJjdXJ2ZVwiKS5vYmppZCgpLm9wdGlvbmFsKCksdGhpcy5rZXkoXCJwYXJhbXNcIikuc2VxKCkub2JqKHRoaXMua2V5KFwicFwiKS5pbnQoKSx0aGlzLmtleShcInFcIikuaW50KCksdGhpcy5rZXkoXCJnXCIpLmludCgpKS5vcHRpb25hbCgpKX0pLHM9bi5kZWZpbmUoXCJQcml2YXRlS2V5SW5mb1wiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJ2ZXJzaW9uXCIpLmludCgpLHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnVzZShmKSx0aGlzLmtleShcInN1YmplY3RQcml2YXRlS2V5XCIpLm9jdHN0cigpKX0pO2UuUHJpdmF0ZUtleT1zO3ZhciB1PW4uZGVmaW5lKFwiRW5jcnlwdGVkUHJpdmF0ZUtleUluZm9cIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwiYWxnb3JpdGhtXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImlkXCIpLm9iamlkKCksdGhpcy5rZXkoXCJkZWNyeXB0XCIpLnNlcSgpLm9iaih0aGlzLmtleShcImtkZVwiKS5zZXEoKS5vYmoodGhpcy5rZXkoXCJpZFwiKS5vYmppZCgpLHRoaXMua2V5KFwia2RlcGFyYW1zXCIpLnNlcSgpLm9iaih0aGlzLmtleShcInNhbHRcIikub2N0c3RyKCksdGhpcy5rZXkoXCJpdGVyc1wiKS5pbnQoKSkpLHRoaXMua2V5KFwiY2lwaGVyXCIpLnNlcSgpLm9iaih0aGlzLmtleShcImFsZ29cIikub2JqaWQoKSx0aGlzLmtleShcIml2XCIpLm9jdHN0cigpKSkpLHRoaXMua2V5KFwic3ViamVjdFByaXZhdGVLZXlcIikub2N0c3RyKCkpfSk7ZS5FbmNyeXB0ZWRQcml2YXRlS2V5PXU7dmFyIGg9bi5kZWZpbmUoXCJEU0FQcml2YXRlS2V5XCIsZnVuY3Rpb24oKXt0aGlzLnNlcSgpLm9iaih0aGlzLmtleShcInZlcnNpb25cIikuaW50KCksdGhpcy5rZXkoXCJwXCIpLmludCgpLHRoaXMua2V5KFwicVwiKS5pbnQoKSx0aGlzLmtleShcImdcIikuaW50KCksdGhpcy5rZXkoXCJwdWJfa2V5XCIpLmludCgpLHRoaXMua2V5KFwicHJpdl9rZXlcIikuaW50KCkpfSk7ZS5EU0FQcml2YXRlS2V5PWgsZS5EU0FwYXJhbT1uLmRlZmluZShcIkRTQXBhcmFtXCIsZnVuY3Rpb24oKXt0aGlzLmludCgpfSk7dmFyIGM9bi5kZWZpbmUoXCJFQ1ByaXZhdGVLZXlcIixmdW5jdGlvbigpe3RoaXMuc2VxKCkub2JqKHRoaXMua2V5KFwidmVyc2lvblwiKS5pbnQoKSx0aGlzLmtleShcInByaXZhdGVLZXlcIikub2N0c3RyKCksdGhpcy5rZXkoXCJwYXJhbWV0ZXJzXCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMCkudXNlKGQpLHRoaXMua2V5KFwicHVibGljS2V5XCIpLm9wdGlvbmFsKCkuZXhwbGljaXQoMSkuYml0c3RyKCkpfSk7ZS5FQ1ByaXZhdGVLZXk9Yzt2YXIgZD1uLmRlZmluZShcIkVDUGFyYW1ldGVyc1wiLGZ1bmN0aW9uKCl7dGhpcy5jaG9pY2Uoe25hbWVkQ3VydmU6dGhpcy5vYmppZCgpfSl9KTtlLnNpZ25hdHVyZT1uLmRlZmluZShcInNpZ25hdHVyZVwiLGZ1bmN0aW9uKCl7dGhpcy5zZXEoKS5vYmoodGhpcy5rZXkoXCJyXCIpLmludCgpLHRoaXMua2V5KFwic1wiKS5pbnQoKSl9KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXt2YXIgbj0vUHJvYy1UeXBlOiA0LEVOQ1JZUFRFRFxccj9cXG5ERUstSW5mbzogQUVTLSgoPzoxMjgpfCg/OjE5Mil8KD86MjU2KSktQ0JDLChbMC05QS1IXSspXFxyP1xcblxccj9cXG4oWzAtOUEtelxcblxcclxcK1xcL1xcPV0rKVxccj9cXG4vbSxpPS9eLS0tLS1CRUdJTiAoLiopIEtFWS0tLS0tXFxyP1xcbi9tLG89L14tLS0tLUJFR0lOICguKikgS0VZLS0tLS1cXHI/XFxuKFswLTlBLXpcXG5cXHJcXCtcXC9cXD1dKylcXHI/XFxuLS0tLS1FTkQgXFwxIEtFWS0tLS0tJC9tLGE9cigxNTMpLGY9cigyMzkpO3QuZXhwb3J0cz1mdW5jdGlvbih0LHIpe3ZhciBzLHU9dC50b1N0cmluZygpLGg9dS5tYXRjaChuKTtpZihoKXt2YXIgYz1cImFlc1wiK2hbMV0sZD1uZXcgZShoWzJdLFwiaGV4XCIpLGw9bmV3IGUoaFszXS5yZXBsYWNlKC9cXHI/XFxuL2csXCJcIiksXCJiYXNlNjRcIikscD1hKHIsZC5zbGljZSgwLDgpLHBhcnNlSW50KGhbMV0sMTApKS5rZXksYj1bXSx2PWYuY3JlYXRlRGVjaXBoZXJpdihjLHAsZCk7Yi5wdXNoKHYudXBkYXRlKGwpKSxiLnB1c2godi5maW5hbCgpKSxzPWUuY29uY2F0KGIpfWVsc2V7dmFyIHk9dS5tYXRjaChvKTtzPW5ldyBlKHlbMl0ucmVwbGFjZSgvXFxyP1xcbi9nLFwiXCIpLFwiYmFzZTY0XCIpfXZhciBtPXUubWF0Y2goaSlbMV0rXCIgS0VZXCI7cmV0dXJue3RhZzptLGRhdGE6c319fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt0aGlzLm5hbWU9dCx0aGlzLmJvZHk9ZSx0aGlzLmRlY29kZXJzPXt9LHRoaXMuZW5jb2RlcnM9e319dmFyIGk9cigxMDYpLG89cigyKSxhPWU7YS5kZWZpbmU9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbmV3IG4odCxlKX0sbi5wcm90b3R5cGUuX2NyZWF0ZU5hbWVkPWZ1bmN0aW9uKHQpe3ZhciBlO3RyeXtlPXIoMjUxKS5ydW5JblRoaXNDb250ZXh0KFwiKGZ1bmN0aW9uIFwiK3RoaXMubmFtZStcIihlbnRpdHkpIHtcXG4gIHRoaXMuX2luaXROYW1lZChlbnRpdHkpO1xcbn0pXCIpfWNhdGNoKHQpe2U9ZnVuY3Rpb24odCl7dGhpcy5faW5pdE5hbWVkKHQpfX1yZXR1cm4gbyhlLHQpLGUucHJvdG90eXBlLl9pbml0TmFtZWQ9ZnVuY3Rpb24oZSl7dC5jYWxsKHRoaXMsZSl9LG5ldyBlKHRoaXMpfSxuLnByb3RvdHlwZS5fZ2V0RGVjb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZGVjb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmRlY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZGVjb2RlcnNbdF0pKSx0aGlzLmRlY29kZXJzW3RdfSxuLnByb3RvdHlwZS5kZWNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXREZWNvZGVyKGUpLmRlY29kZSh0LHIpfSxuLnByb3RvdHlwZS5fZ2V0RW5jb2Rlcj1mdW5jdGlvbih0KXtyZXR1cm4gdD10fHxcImRlclwiLHRoaXMuZW5jb2RlcnMuaGFzT3duUHJvcGVydHkodCl8fCh0aGlzLmVuY29kZXJzW3RdPXRoaXMuX2NyZWF0ZU5hbWVkKGkuZW5jb2RlcnNbdF0pKSx0aGlzLmVuY29kZXJzW3RdfSxuLnByb3RvdHlwZS5lbmNvZGU9ZnVuY3Rpb24odCxlLHIpe3JldHVybiB0aGlzLl9nZXRFbmNvZGVyKGUpLmVuY29kZSh0LHIpfX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCxlKXt2YXIgcj17fTt0aGlzLl9iYXNlU3RhdGU9cixyLmVuYz10LHIucGFyZW50PWV8fG51bGwsci5jaGlsZHJlbj1udWxsLHIudGFnPW51bGwsci5hcmdzPW51bGwsci5yZXZlcnNlQXJncz1udWxsLHIuY2hvaWNlPW51bGwsci5vcHRpb25hbD0hMSxyLmFueT0hMSxyLm9iaj0hMSxyLnVzZT1udWxsLHIudXNlRGVjb2Rlcj1udWxsLHIua2V5PW51bGwsci5kZWZhdWx0PW51bGwsci5leHBsaWNpdD1udWxsLHIuaW1wbGljaXQ9bnVsbCxyLmNvbnRhaW5zPW51bGwsci5wYXJlbnR8fChyLmNoaWxkcmVuPVtdLHRoaXMuX3dyYXAoKSl9dmFyIGk9cig3MSkuUmVwb3J0ZXIsbz1yKDcxKS5FbmNvZGVyQnVmZmVyLGE9cig3MSkuRGVjb2RlckJ1ZmZlcixmPXIoNTg4KSxzPVtcInNlcVwiLFwic2Vxb2ZcIixcInNldFwiLFwic2V0b2ZcIixcIm9iamlkXCIsXCJib29sXCIsXCJnZW50aW1lXCIsXCJ1dGN0aW1lXCIsXCJudWxsX1wiLFwiZW51bVwiLFwiaW50XCIsXCJiaXRzdHJcIixcImJtcHN0clwiLFwiY2hhcnN0clwiLFwiZ2Vuc3RyXCIsXCJncmFwaHN0clwiLFwiaWE1c3RyXCIsXCJpc282NDZzdHJcIixcIm51bXN0clwiLFwib2N0c3RyXCIsXCJwcmludHN0clwiLFwidDYxc3RyXCIsXCJ1bmlzdHJcIixcInV0ZjhzdHJcIixcInZpZGVvc3RyXCJdLHU9W1wia2V5XCIsXCJvYmpcIixcInVzZVwiLFwib3B0aW9uYWxcIixcImV4cGxpY2l0XCIsXCJpbXBsaWNpdFwiLFwiZGVmXCIsXCJjaG9pY2VcIixcImFueVwiLFwiY29udGFpbnNcIl0uY29uY2F0KHMpLGg9W1wiX3BlZWtUYWdcIixcIl9kZWNvZGVUYWdcIixcIl91c2VcIixcIl9kZWNvZGVTdHJcIixcIl9kZWNvZGVPYmppZFwiLFwiX2RlY29kZVRpbWVcIixcIl9kZWNvZGVOdWxsXCIsXCJfZGVjb2RlSW50XCIsXCJfZGVjb2RlQm9vbFwiLFwiX2RlY29kZUxpc3RcIixcIl9lbmNvZGVDb21wb3NpdGVcIixcIl9lbmNvZGVTdHJcIixcIl9lbmNvZGVPYmppZFwiLFwiX2VuY29kZVRpbWVcIixcIl9lbmNvZGVOdWxsXCIsXCJfZW5jb2RlSW50XCIsXCJfZW5jb2RlQm9vbFwiXTt0LmV4cG9ydHM9bjt2YXIgYz1bXCJlbmNcIixcInBhcmVudFwiLFwiY2hpbGRyZW5cIixcInRhZ1wiLFwiYXJnc1wiLFwicmV2ZXJzZUFyZ3NcIixcImNob2ljZVwiLFwib3B0aW9uYWxcIixcImFueVwiLFwib2JqXCIsXCJ1c2VcIixcImFsdGVyZWRVc2VcIixcImtleVwiLFwiZGVmYXVsdFwiLFwiZXhwbGljaXRcIixcImltcGxpY2l0XCIsXCJjb250YWluc1wiXTtuLnByb3RvdHlwZS5jbG9uZT1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZSxlPXt9O2MuZm9yRWFjaChmdW5jdGlvbihyKXtlW3JdPXRbcl19KTt2YXIgcj1uZXcgdGhpcy5jb25zdHJ1Y3RvcihlLnBhcmVudCk7cmV0dXJuIHIuX2Jhc2VTdGF0ZT1lLHJ9LG4ucHJvdG90eXBlLl93cmFwPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3UuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzW2VdPWZ1bmN0aW9uKCl7dmFyIHI9bmV3IHRoaXMuY29uc3RydWN0b3IodGhpcyk7cmV0dXJuIHQuY2hpbGRyZW4ucHVzaChyKSxyW2VdLmFwcGx5KHIsYXJndW1lbnRzKX19LHRoaXMpfSxuLnByb3RvdHlwZS5faW5pdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7ZihudWxsPT09ZS5wYXJlbnQpLHQuY2FsbCh0aGlzKSxlLmNoaWxkcmVuPWUuY2hpbGRyZW4uZmlsdGVyKGZ1bmN0aW9uKHQpe3JldHVybiB0Ll9iYXNlU3RhdGUucGFyZW50PT09dGhpc30sdGhpcyksZi5lcXVhbChlLmNoaWxkcmVuLmxlbmd0aCwxLFwiUm9vdCBub2RlIGNhbiBoYXZlIG9ubHkgb25lIGNoaWxkXCIpfSxuLnByb3RvdHlwZS5fdXNlQXJncz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGUscj10LmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3J9LHRoaXMpO3Q9dC5maWx0ZXIoZnVuY3Rpb24odCl7cmV0dXJuISh0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3Rvcil9LHRoaXMpLDAhPT1yLmxlbmd0aCYmKGYobnVsbD09PWUuY2hpbGRyZW4pLGUuY2hpbGRyZW49cixyLmZvckVhY2goZnVuY3Rpb24odCl7dC5fYmFzZVN0YXRlLnBhcmVudD10aGlzfSx0aGlzKSksMCE9PXQubGVuZ3RoJiYoZihudWxsPT09ZS5hcmdzKSxlLmFyZ3M9dCxlLnJldmVyc2VBcmdzPXQubWFwKGZ1bmN0aW9uKHQpe2lmKFwib2JqZWN0XCIhPXR5cGVvZiB0fHx0LmNvbnN0cnVjdG9yIT09T2JqZWN0KXJldHVybiB0O3ZhciBlPXt9O3JldHVybiBPYmplY3Qua2V5cyh0KS5mb3JFYWNoKGZ1bmN0aW9uKHIpe3I9PSgwfHIpJiYocnw9MCk7dmFyIG49dFtyXTtlW25dPXJ9KSxlfSkpfSxoLmZvckVhY2goZnVuY3Rpb24odCl7bi5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7dGhyb3cgbmV3IEVycm9yKHQrXCIgbm90IGltcGxlbWVudGVkIGZvciBlbmNvZGluZzogXCIrZS5lbmMpfX0pLHMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZSxyPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cyk7cmV0dXJuIGYobnVsbD09PWUudGFnKSxlLnRhZz10LHRoaXMuX3VzZUFyZ3MociksdGhpc319KSxuLnByb3RvdHlwZS51c2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLnVzZSksZS51c2U9dCx0aGlzfSxuLnByb3RvdHlwZS5vcHRpb25hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gdC5vcHRpb25hbD0hMCx0aGlzfSxuLnByb3RvdHlwZS5kZWY9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmRlZmF1bHQpLGUuZGVmYXVsdD10LGUub3B0aW9uYWw9ITAsdGhpc30sbi5wcm90b3R5cGUuZXhwbGljaXQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmV4cGxpY2l0JiZudWxsPT09ZS5pbXBsaWNpdCksZS5leHBsaWNpdD10LHRoaXN9LG4ucHJvdG90eXBlLmltcGxpY2l0PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5leHBsaWNpdCYmbnVsbD09PWUuaW1wbGljaXQpLGUuaW1wbGljaXQ9dCx0aGlzfSxuLnByb3RvdHlwZS5vYmo9ZnVuY3Rpb24oKXt2YXIgdD10aGlzLl9iYXNlU3RhdGUsZT1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO3JldHVybiB0Lm9iaj0hMCwwIT09ZS5sZW5ndGgmJnRoaXMuX3VzZUFyZ3MoZSksdGhpc30sbi5wcm90b3R5cGUua2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm4gZihudWxsPT09ZS5rZXkpLGUua2V5PXQsdGhpc30sbi5wcm90b3R5cGUuYW55PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fYmFzZVN0YXRlO3JldHVybiB0LmFueT0hMCx0aGlzfSxuLnByb3RvdHlwZS5jaG9pY2U9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fYmFzZVN0YXRlO3JldHVybiBmKG51bGw9PT1lLmNob2ljZSksZS5jaG9pY2U9dCx0aGlzLl91c2VBcmdzKE9iamVjdC5rZXlzKHQpLm1hcChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKSx0aGlzfSxuLnByb3RvdHlwZS5jb250YWlucz1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIGYobnVsbD09PWUudXNlKSxlLmNvbnRhaW5zPXQsdGhpc30sbi5wcm90b3R5cGUuX2RlY29kZT1mdW5jdGlvbih0LGUpe3ZhciByPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09ci5wYXJlbnQpcmV0dXJuIHQud3JhcFJlc3VsdChyLmNoaWxkcmVuWzBdLl9kZWNvZGUodCxlKSk7dmFyIG49ci5kZWZhdWx0LGk9ITAsbz1udWxsO2lmKG51bGwhPT1yLmtleSYmKG89dC5lbnRlcktleShyLmtleSkpLHIub3B0aW9uYWwpe3ZhciBmPW51bGw7aWYobnVsbCE9PXIuZXhwbGljaXQ/Zj1yLmV4cGxpY2l0Om51bGwhPT1yLmltcGxpY2l0P2Y9ci5pbXBsaWNpdDpudWxsIT09ci50YWcmJihmPXIudGFnKSxudWxsIT09Znx8ci5hbnkpe2lmKGk9dGhpcy5fcGVla1RhZyh0LGYsci5hbnkpLHQuaXNFcnJvcihpKSlyZXR1cm4gaX1lbHNle3ZhciBzPXQuc2F2ZSgpO3RyeXtudWxsPT09ci5jaG9pY2U/dGhpcy5fZGVjb2RlR2VuZXJpYyhyLnRhZyx0LGUpOnRoaXMuX2RlY29kZUNob2ljZSh0LGUpLGk9ITB9Y2F0Y2godCl7aT0hMX10LnJlc3RvcmUocyl9fXZhciB1O2lmKHIub2JqJiZpJiYodT10LmVudGVyT2JqZWN0KCkpLGkpe2lmKG51bGwhPT1yLmV4cGxpY2l0KXt2YXIgaD10aGlzLl9kZWNvZGVUYWcodCxyLmV4cGxpY2l0KTtpZih0LmlzRXJyb3IoaCkpcmV0dXJuIGg7dD1ofXZhciBjPXQub2Zmc2V0O2lmKG51bGw9PT1yLnVzZSYmbnVsbD09PXIuY2hvaWNlKXtpZihyLmFueSl2YXIgcz10LnNhdmUoKTt2YXIgZD10aGlzLl9kZWNvZGVUYWcodCxudWxsIT09ci5pbXBsaWNpdD9yLmltcGxpY2l0OnIudGFnLHIuYW55KTtpZih0LmlzRXJyb3IoZCkpcmV0dXJuIGQ7ci5hbnk/bj10LnJhdyhzKTp0PWR9aWYoZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLGMsdC5sZW5ndGgsXCJ0YWdnZWRcIiksZSYmZS50cmFjayYmbnVsbCE9PXIudGFnJiZlLnRyYWNrKHQucGF0aCgpLHQub2Zmc2V0LHQubGVuZ3RoLFwiY29udGVudFwiKSxuPXIuYW55P246bnVsbD09PXIuY2hvaWNlP3RoaXMuX2RlY29kZUdlbmVyaWMoci50YWcsdCxlKTp0aGlzLl9kZWNvZGVDaG9pY2UodCxlKSx0LmlzRXJyb3IobikpcmV0dXJuIG47aWYoci5hbnl8fG51bGwhPT1yLmNob2ljZXx8bnVsbD09PXIuY2hpbGRyZW58fHIuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihyKXtyLl9kZWNvZGUodCxlKX0pLHIuY29udGFpbnMmJihcIm9jdHN0clwiPT09ci50YWd8fFwiYml0c3RyXCI9PT1yLnRhZykpe3ZhciBsPW5ldyBhKG4pO249dGhpcy5fZ2V0VXNlKHIuY29udGFpbnMsdC5fcmVwb3J0ZXJTdGF0ZS5vYmopLl9kZWNvZGUobCxlKX19cmV0dXJuIHIub2JqJiZpJiYobj10LmxlYXZlT2JqZWN0KHUpKSxudWxsPT09ci5rZXl8fG51bGw9PT1uJiZpIT09ITA/bnVsbCE9PW8mJnQuZXhpdEtleShvKTp0LmxlYXZlS2V5KG8sci5rZXksbiksbn0sbi5wcm90b3R5cGUuX2RlY29kZUdlbmVyaWM9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtyZXR1cm5cInNlcVwiPT09dHx8XCJzZXRcIj09PXQ/bnVsbDpcInNlcW9mXCI9PT10fHxcInNldG9mXCI9PT10P3RoaXMuX2RlY29kZUxpc3QoZSx0LG4uYXJnc1swXSxyKTovc3RyJC8udGVzdCh0KT90aGlzLl9kZWNvZGVTdHIoZSx0LHIpOlwib2JqaWRcIj09PXQmJm4uYXJncz90aGlzLl9kZWNvZGVPYmppZChlLG4uYXJnc1swXSxuLmFyZ3NbMV0scik6XCJvYmppZFwiPT09dD90aGlzLl9kZWNvZGVPYmppZChlLG51bGwsbnVsbCxyKTpcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dD90aGlzLl9kZWNvZGVUaW1lKGUsdCxyKTpcIm51bGxfXCI9PT10P3RoaXMuX2RlY29kZU51bGwoZSxyKTpcImJvb2xcIj09PXQ/dGhpcy5fZGVjb2RlQm9vbChlLHIpOlwiaW50XCI9PT10fHxcImVudW1cIj09PXQ/dGhpcy5fZGVjb2RlSW50KGUsbi5hcmdzJiZuLmFyZ3NbMF0scik6bnVsbCE9PW4udXNlP3RoaXMuX2dldFVzZShuLnVzZSxlLl9yZXBvcnRlclN0YXRlLm9iaikuX2RlY29kZShlLHIpOmUuZXJyb3IoXCJ1bmtub3duIHRhZzogXCIrdCl9LG4ucHJvdG90eXBlLl9nZXRVc2U9ZnVuY3Rpb24odCxlKXt2YXIgcj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHIudXNlRGVjb2Rlcj10aGlzLl91c2UodCxlKSxmKG51bGw9PT1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5wYXJlbnQpLHIudXNlRGVjb2Rlcj1yLnVzZURlY29kZXIuX2Jhc2VTdGF0ZS5jaGlsZHJlblswXSxyLmltcGxpY2l0IT09ci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQmJihyLnVzZURlY29kZXI9ci51c2VEZWNvZGVyLmNsb25lKCksci51c2VEZWNvZGVyLl9iYXNlU3RhdGUuaW1wbGljaXQ9ci5pbXBsaWNpdCksci51c2VEZWNvZGVyfSxuLnByb3RvdHlwZS5fZGVjb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49bnVsbCxpPSExO3JldHVybiBPYmplY3Qua2V5cyhyLmNob2ljZSkuc29tZShmdW5jdGlvbihvKXt2YXIgYT10LnNhdmUoKSxmPXIuY2hvaWNlW29dO3RyeXt2YXIgcz1mLl9kZWNvZGUodCxlKTtpZih0LmlzRXJyb3IocykpcmV0dXJuITE7bj17dHlwZTpvLHZhbHVlOnN9LGk9ITB9Y2F0Y2goZSl7cmV0dXJuIHQucmVzdG9yZShhKSwhMX1yZXR1cm4hMH0sdGhpcyksaT9uOnQuZXJyb3IoXCJDaG9pY2Ugbm90IG1hdGNoZWRcIil9LG4ucHJvdG90eXBlLl9jcmVhdGVFbmNvZGVyQnVmZmVyPWZ1bmN0aW9uKHQpe3JldHVybiBuZXcgbyh0LHRoaXMucmVwb3J0ZXIpfSxuLnByb3RvdHlwZS5fZW5jb2RlPWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7aWYobnVsbD09PW4uZGVmYXVsdHx8bi5kZWZhdWx0IT09dCl7dmFyIGk9dGhpcy5fZW5jb2RlVmFsdWUodCxlLHIpO2lmKHZvaWQgMCE9PWkmJiF0aGlzLl9za2lwRGVmYXVsdChpLGUscikpcmV0dXJuIGl9fSxuLnByb3RvdHlwZS5fZW5jb2RlVmFsdWU9ZnVuY3Rpb24odCxlLHIpe3ZhciBuPXRoaXMuX2Jhc2VTdGF0ZTtpZihudWxsPT09bi5wYXJlbnQpcmV0dXJuIG4uY2hpbGRyZW5bMF0uX2VuY29kZSh0LGV8fG5ldyBpKTt2YXIgbz1udWxsO2lmKHRoaXMucmVwb3J0ZXI9ZSxuLm9wdGlvbmFsJiZ2b2lkIDA9PT10KXtpZihudWxsPT09bi5kZWZhdWx0KXJldHVybjt0PW4uZGVmYXVsdH12YXIgYT1udWxsLGY9ITE7aWYobi5hbnkpbz10aGlzLl9jcmVhdGVFbmNvZGVyQnVmZmVyKHQpO2Vsc2UgaWYobi5jaG9pY2Upbz10aGlzLl9lbmNvZGVDaG9pY2UodCxlKTtlbHNlIGlmKG4uY29udGFpbnMpYT10aGlzLl9nZXRVc2Uobi5jb250YWlucyxyKS5fZW5jb2RlKHQsZSksZj0hMDtlbHNlIGlmKG4uY2hpbGRyZW4pYT1uLmNoaWxkcmVuLm1hcChmdW5jdGlvbihyKXtpZihcIm51bGxfXCI9PT1yLl9iYXNlU3RhdGUudGFnKXJldHVybiByLl9lbmNvZGUobnVsbCxlLHQpO2lmKG51bGw9PT1yLl9iYXNlU3RhdGUua2V5KXJldHVybiBlLmVycm9yKFwiQ2hpbGQgc2hvdWxkIGhhdmUgYSBrZXlcIik7dmFyIG49ZS5lbnRlcktleShyLl9iYXNlU3RhdGUua2V5KTtpZihcIm9iamVjdFwiIT10eXBlb2YgdClyZXR1cm4gZS5lcnJvcihcIkNoaWxkIGV4cGVjdGVkLCBidXQgaW5wdXQgaXMgbm90IG9iamVjdFwiKTt2YXIgaT1yLl9lbmNvZGUodFtyLl9iYXNlU3RhdGUua2V5XSxlLHQpO3JldHVybiBlLmxlYXZlS2V5KG4pLGl9LHRoaXMpLmZpbHRlcihmdW5jdGlvbih0KXtyZXR1cm4gdH0pLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcihhKTtlbHNlIGlmKFwic2Vxb2ZcIj09PW4udGFnfHxcInNldG9mXCI9PT1uLnRhZyl7aWYoIW4uYXJnc3x8MSE9PW4uYXJncy5sZW5ndGgpcmV0dXJuIGUuZXJyb3IoXCJUb28gbWFueSBhcmdzIGZvciA6IFwiK24udGFnKTtpZighQXJyYXkuaXNBcnJheSh0KSlyZXR1cm4gZS5lcnJvcihcInNlcW9mL3NldG9mLCBidXQgZGF0YSBpcyBub3QgQXJyYXlcIik7dmFyIHM9dGhpcy5jbG9uZSgpO3MuX2Jhc2VTdGF0ZS5pbXBsaWNpdD1udWxsLGE9dGhpcy5fY3JlYXRlRW5jb2RlckJ1ZmZlcih0Lm1hcChmdW5jdGlvbihyKXt2YXIgbj10aGlzLl9iYXNlU3RhdGU7cmV0dXJuIHRoaXMuX2dldFVzZShuLmFyZ3NbMF0sdCkuX2VuY29kZShyLGUpfSxzKSl9ZWxzZSBudWxsIT09bi51c2U/bz10aGlzLl9nZXRVc2Uobi51c2UscikuX2VuY29kZSh0LGUpOihhPXRoaXMuX2VuY29kZVByaW1pdGl2ZShuLnRhZyx0KSxmPSEwKTt2YXIgbztpZighbi5hbnkmJm51bGw9PT1uLmNob2ljZSl7dmFyIHU9bnVsbCE9PW4uaW1wbGljaXQ/bi5pbXBsaWNpdDpuLnRhZyxoPW51bGw9PT1uLmltcGxpY2l0P1widW5pdmVyc2FsXCI6XCJjb250ZXh0XCI7bnVsbD09PXU/bnVsbD09PW4udXNlJiZlLmVycm9yKFwiVGFnIGNvdWxkIGJlIG9tbWl0ZWQgb25seSBmb3IgLnVzZSgpXCIpOm51bGw9PT1uLnVzZSYmKG89dGhpcy5fZW5jb2RlQ29tcG9zaXRlKHUsZixoLGEpKX1yZXR1cm4gbnVsbCE9PW4uZXhwbGljaXQmJihvPXRoaXMuX2VuY29kZUNvbXBvc2l0ZShuLmV4cGxpY2l0LCExLFwiY29udGV4dFwiLG8pKSxvfSxuLnByb3RvdHlwZS5fZW5jb2RlQ2hvaWNlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlLG49ci5jaG9pY2VbdC50eXBlXTtyZXR1cm4gbnx8ZighMSx0LnR5cGUrXCIgbm90IGZvdW5kIGluIFwiK0pTT04uc3RyaW5naWZ5KE9iamVjdC5rZXlzKHIuY2hvaWNlKSkpLG4uX2VuY29kZSh0LnZhbHVlLGUpfSxuLnByb3RvdHlwZS5fZW5jb2RlUHJpbWl0aXZlPWZ1bmN0aW9uKHQsZSl7dmFyIHI9dGhpcy5fYmFzZVN0YXRlO2lmKC9zdHIkLy50ZXN0KHQpKXJldHVybiB0aGlzLl9lbmNvZGVTdHIoZSx0KTtpZihcIm9iamlkXCI9PT10JiZyLmFyZ3MpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsci5yZXZlcnNlQXJnc1swXSxyLmFyZ3NbMV0pO2lmKFwib2JqaWRcIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU9iamlkKGUsbnVsbCxudWxsKTtpZihcImdlbnRpbWVcIj09PXR8fFwidXRjdGltZVwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlVGltZShlLHQpO2lmKFwibnVsbF9cIj09PXQpcmV0dXJuIHRoaXMuX2VuY29kZU51bGwoKTtpZihcImludFwiPT09dHx8XCJlbnVtXCI9PT10KXJldHVybiB0aGlzLl9lbmNvZGVJbnQoZSxyLmFyZ3MmJnIucmV2ZXJzZUFyZ3NbMF0pO2lmKFwiYm9vbFwiPT09dClyZXR1cm4gdGhpcy5fZW5jb2RlQm9vbChlKTt0aHJvdyBuZXcgRXJyb3IoXCJVbnN1cHBvcnRlZCB0YWc6IFwiK3QpfSxuLnByb3RvdHlwZS5faXNOdW1zdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bMC05IF0qJC8udGVzdCh0KX0sbi5wcm90b3R5cGUuX2lzUHJpbnRzdHI9ZnVuY3Rpb24odCl7cmV0dXJuL15bQS1aYS16MC05ICdcXChcXClcXCssXFwtXFwuXFwvOj1cXD9dKiQvLnRlc3QodCl9fSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXt0aGlzLl9yZXBvcnRlclN0YXRlPXtvYmo6bnVsbCxwYXRoOltdLG9wdGlvbnM6dHx8e30sZXJyb3JzOltdfX1mdW5jdGlvbiBpKHQsZSl7dGhpcy5wYXRoPXQsdGhpcy5yZXRocm93KGUpfXZhciBvPXIoMik7ZS5SZXBvcnRlcj1uLG4ucHJvdG90eXBlLmlzRXJyb3I9ZnVuY3Rpb24odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiBpfSxuLnByb3RvdHlwZS5zYXZlPWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm57b2JqOnQub2JqLHBhdGhMZW46dC5wYXRoLmxlbmd0aH19LG4ucHJvdG90eXBlLnJlc3RvcmU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtlLm9iaj10Lm9iaixlLnBhdGg9ZS5wYXRoLnNsaWNlKDAsdC5wYXRoTGVuKX0sbi5wcm90b3R5cGUuZW50ZXJLZXk9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX3JlcG9ydGVyU3RhdGUucGF0aC5wdXNoKHQpfSxuLnByb3RvdHlwZS5leGl0S2V5PWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXMuX3JlcG9ydGVyU3RhdGU7ZS5wYXRoPWUucGF0aC5zbGljZSgwLHQtMSl9LG4ucHJvdG90eXBlLmxlYXZlS2V5PWZ1bmN0aW9uKHQsZSxyKXt2YXIgbj10aGlzLl9yZXBvcnRlclN0YXRlO3RoaXMuZXhpdEtleSh0KSxudWxsIT09bi5vYmomJihuLm9ialtlXT1yKX0sbi5wcm90b3R5cGUucGF0aD1mdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZXBvcnRlclN0YXRlLnBhdGguam9pbihcIi9cIil9LG4ucHJvdG90eXBlLmVudGVyT2JqZWN0PWZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5fcmVwb3J0ZXJTdGF0ZSxlPXQub2JqO3JldHVybiB0Lm9iaj17fSxlfSxuLnByb3RvdHlwZS5sZWF2ZU9iamVjdD1mdW5jdGlvbih0KXt2YXIgZT10aGlzLl9yZXBvcnRlclN0YXRlLHI9ZS5vYmo7cmV0dXJuIGUub2JqPXQscn0sbi5wcm90b3R5cGUuZXJyb3I9ZnVuY3Rpb24odCl7dmFyIGUscj10aGlzLl9yZXBvcnRlclN0YXRlLG49dCBpbnN0YW5jZW9mIGk7aWYoZT1uP3Q6bmV3IGkoci5wYXRoLm1hcChmdW5jdGlvbih0KXtyZXR1cm5cIltcIitKU09OLnN0cmluZ2lmeSh0KStcIl1cIn0pLmpvaW4oXCJcIiksdC5tZXNzYWdlfHx0LHQuc3RhY2spLCFyLm9wdGlvbnMucGFydGlhbCl0aHJvdyBlO3JldHVybiBufHxyLmVycm9ycy5wdXNoKGUpLGV9LG4ucHJvdG90eXBlLndyYXBSZXN1bHQ9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5fcmVwb3J0ZXJTdGF0ZTtyZXR1cm4gZS5vcHRpb25zLnBhcnRpYWw/e3Jlc3VsdDp0aGlzLmlzRXJyb3IodCk/bnVsbDp0LGVycm9yczplLmVycm9yc306dH0sbyhpLEVycm9yKSxpLnByb3RvdHlwZS5yZXRocm93PWZ1bmN0aW9uKHQpe2lmKHRoaXMubWVzc2FnZT10K1wiIGF0OiBcIisodGhpcy5wYXRofHxcIihzaGFsbG93KVwiKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZSYmRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyxpKSwhdGhpcy5zdGFjayl0cnl7dGhyb3cgbmV3IEVycm9yKHRoaXMubWVzc2FnZSl9Y2F0Y2godCl7dGhpcy5zdGFjaz10LnN0YWNrfXJldHVybiB0aGlzfX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPXIoMjM1KTtlLnRhZ0NsYXNzPXswOlwidW5pdmVyc2FsXCIsMTpcImFwcGxpY2F0aW9uXCIsMjpcImNvbnRleHRcIiwzOlwicHJpdmF0ZVwifSxlLnRhZ0NsYXNzQnlOYW1lPW4uX3JldmVyc2UoZS50YWdDbGFzcyksZS50YWc9ezA6XCJlbmRcIiwxOlwiYm9vbFwiLDI6XCJpbnRcIiwzOlwiYml0c3RyXCIsNDpcIm9jdHN0clwiLDU6XCJudWxsX1wiLDY6XCJvYmppZFwiLDc6XCJvYmpEZXNjXCIsODpcImV4dGVybmFsXCIsOTpcInJlYWxcIiwxMDpcImVudW1cIiwxMTpcImVtYmVkXCIsMTI6XCJ1dGY4c3RyXCIsMTM6XCJyZWxhdGl2ZU9pZFwiLDE2Olwic2VxXCIsMTc6XCJzZXRcIiwxODpcIm51bXN0clwiLDE5OlwicHJpbnRzdHJcIiwyMDpcInQ2MXN0clwiLDIxOlwidmlkZW9zdHJcIiwyMjpcImlhNXN0clwiLDIzOlwidXRjdGltZVwiLDI0OlwiZ2VudGltZVwiLDI1OlwiZ3JhcGhzdHJcIiwyNjpcImlzbzY0NnN0clwiLDI3OlwiZ2Vuc3RyXCIsMjg6XCJ1bmlzdHJcIiwyOTpcImNoYXJzdHJcIiwzMDpcImJtcHN0clwifSxlLnRhZ0J5TmFtZT1uLl9yZXZlcnNlKGUudGFnKX0sZnVuY3Rpb24odCxlLHIpe3ZhciBuPWU7bi5kZXI9cigyMzYpLG4ucGVtPXIoNTg1KX0sZnVuY3Rpb24odCxlLHIpe2Z1bmN0aW9uIG4odCl7YS5jYWxsKHRoaXMsdCksdGhpcy5lbmM9XCJwZW1cIn12YXIgaT1yKDIpLG89cigxKS5CdWZmZXIsYT1yKDIzNik7aShuLGEpLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmRlY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj10LnRvU3RyaW5nKCkuc3BsaXQoL1tcXHJcXG5dKy9nKSxuPWUubGFiZWwudG9VcHBlckNhc2UoKSxpPS9eLS0tLS0oQkVHSU58RU5EKSAoW14tXSspLS0tLS0kLyxmPS0xLHM9LTEsdT0wO3U8ci5sZW5ndGg7dSsrKXt2YXIgaD1yW3VdLm1hdGNoKGkpO2lmKG51bGwhPT1oJiZoWzJdPT09bil7aWYoZiE9PS0xKXtpZihcIkVORFwiIT09aFsxXSlicmVhaztzPXU7YnJlYWt9aWYoXCJCRUdJTlwiIT09aFsxXSlicmVhaztmPXV9fWlmKGY9PT0tMXx8cz09PS0xKXRocm93IG5ldyBFcnJvcihcIlBFTSBzZWN0aW9uIG5vdCBmb3VuZCBmb3I6IFwiK24pO3ZhciBjPXIuc2xpY2UoZisxLHMpLmpvaW4oXCJcIik7Yy5yZXBsYWNlKC9bXmEtejAtOVxcK1xcLz1dKy9naSxcIlwiKTt2YXIgZD1uZXcgbyhjLFwiYmFzZTY0XCIpO3JldHVybiBhLnByb3RvdHlwZS5kZWNvZGUuY2FsbCh0aGlzLGQsZSl9fSxmdW5jdGlvbih0LGUscil7dmFyIG49ZTtuLmRlcj1yKDIzNyksbi5wZW09cig1ODcpfSxmdW5jdGlvbih0LGUscil7ZnVuY3Rpb24gbih0KXtvLmNhbGwodGhpcyx0KSx0aGlzLmVuYz1cInBlbVwifXZhciBpPXIoMiksbz1yKDIzNyk7aShuLG8pLHQuZXhwb3J0cz1uLG4ucHJvdG90eXBlLmVuY29kZT1mdW5jdGlvbih0LGUpe2Zvcih2YXIgcj1vLnByb3RvdHlwZS5lbmNvZGUuY2FsbCh0aGlzLHQpLG49ci50b1N0cmluZyhcImJhc2U2NFwiKSxpPVtcIi0tLS0tQkVHSU4gXCIrZS5sYWJlbCtcIi0tLS0tXCJdLGE9MDthPG4ubGVuZ3RoO2ErPTY0KWkucHVzaChuLnNsaWNlKGEsYSs2NCkpO3JldHVybiBpLnB1c2goXCItLS0tLUVORCBcIitlLmxhYmVsK1wiLS0tLS1cIiksaS5qb2luKFwiXFxuXCIpfX0sZnVuY3Rpb24odCxlKXtmdW5jdGlvbiByKHQsZSl7aWYoIXQpdGhyb3cgbmV3IEVycm9yKGV8fFwiQXNzZXJ0aW9uIGZhaWxlZFwiKX10LmV4cG9ydHM9cixyLmVxdWFsPWZ1bmN0aW9uKHQsZSxyKXtpZih0IT1lKXRocm93IG5ldyBFcnJvcihyfHxcIkFzc2VydGlvbiBmYWlsZWQ6IFwiK3QrXCIgIT0gXCIrZSl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIG4oZSxyLG8pe3JldHVybiB0aGlzIGluc3RhbmNlb2Ygbj8odS5jYWxsKHRoaXMpLHRoaXMuX2NhY2hlPW5ldyBpLHRoaXMuX2xhc3Q9dm9pZCAwLHRoaXMuX2NpcGhlcj1uZXcgcy5BRVMociksdGhpcy5fcHJldj1uZXcgdChvLmxlbmd0aCksby5jb3B5KHRoaXMuX3ByZXYpLHRoaXMuX21vZGU9ZSx2b2lkKHRoaXMuX2F1dG9wYWRkaW5nPSEwKSk6bmV3IG4oZSxyLG8pfWZ1bmN0aW9uIGkoKXtyZXR1cm4gdGhpcyBpbnN0YW5jZW9mIGk/dm9pZCh0aGlzLmNhY2hlPW5ldyB0KFwiXCIpKTpuZXcgaX1mdW5jdGlvbiBvKHQpe2Zvcih2YXIgZT10WzE1XSxyPS0xOysrcjxlOylpZih0W3IrKDE2LWUpXSE9PWUpdGhyb3cgbmV3IEVycm9yKFwidW5hYmxlIHRvIGRlY3J5cHQgZGF0YVwiKTtpZigxNiE9PWUpcmV0dXJuIHQuc2xpY2UoMCwxNi1lKX1mdW5jdGlvbiBhKGUscixpKXt2YXIgbz1jW2UudG9Mb3dlckNhc2UoKV07aWYoIW8pdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQgc3VpdGUgdHlwZVwiKTtpZihcInN0cmluZ1wiPT10eXBlb2YgaSYmKGk9bmV3IHQoaSkpLFwic3RyaW5nXCI9PXR5cGVvZiByJiYocj1uZXcgdChyKSksci5sZW5ndGghPT1vLmtleS84KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGtleSBsZW5ndGggXCIrci5sZW5ndGgpO2lmKGkubGVuZ3RoIT09by5pdil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBpdiBsZW5ndGggXCIraS5sZW5ndGgpO3JldHVyblwic3RyZWFtXCI9PT1vLnR5cGU/bmV3IGQoYltvLm1vZGVdLHIsaSwhMCk6XCJhdXRoXCI9PT1vLnR5cGU/bmV3IGwoYltvLm1vZGVdLHIsaSwhMCk6bmV3IG4oYltvLm1vZGVdLHIsaSl9ZnVuY3Rpb24gZih0LGUpe3ZhciByPWNbdC50b0xvd2VyQ2FzZSgpXTtpZighcil0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO3ZhciBuPXAoZSwhMSxyLmtleSxyLml2KTtyZXR1cm4gYSh0LG4ua2V5LG4uaXYpfXZhciBzPXIoMTA3KSx1PXIoMTA5KSxoPXIoMiksYz1yKDE1MiksZD1yKDI0NiksbD1yKDIzOCkscD1yKDE1Myk7aChuLHUpLG4ucHJvdG90eXBlLl91cGRhdGU9ZnVuY3Rpb24oZSl7dGhpcy5fY2FjaGUuYWRkKGUpO2Zvcih2YXIgcixuLGk9W107cj10aGlzLl9jYWNoZS5nZXQodGhpcy5fYXV0b3BhZGRpbmcpOyluPXRoaXMuX21vZGUuZGVjcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIG8odGhpcy5fbW9kZS5kZWNyeXB0KHRoaXMsdCkpO2lmKHQpdGhyb3cgbmV3IEVycm9yKFwiZGF0YSBub3QgbXVsdGlwbGUgb2YgYmxvY2sgbGVuZ3RoXCIpfSxuLnByb3RvdHlwZS5zZXRBdXRvUGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gdGhpcy5fYXV0b3BhZGRpbmc9ISF0LHRoaXN9LGkucHJvdG90eXBlLmFkZD1mdW5jdGlvbihlKXt0aGlzLmNhY2hlPXQuY29uY2F0KFt0aGlzLmNhY2hlLGVdKX0saS5wcm90b3R5cGUuZ2V0PWZ1bmN0aW9uKHQpe3ZhciBlO2lmKHQpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlfWVsc2UgaWYodGhpcy5jYWNoZS5sZW5ndGg+PTE2KXJldHVybiBlPXRoaXMuY2FjaGUuc2xpY2UoMCwxNiksdGhpcy5jYWNoZT10aGlzLmNhY2hlLnNsaWNlKDE2KSxlO3JldHVybiBudWxsfSxpLnByb3RvdHlwZS5mbHVzaD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoKXJldHVybiB0aGlzLmNhY2hlfTt2YXIgYj17RUNCOnIoMjQ0KSxDQkM6cigyNDApLENGQjpyKDI0MSksQ0ZCODpyKDI0MyksQ0ZCMTpyKDI0MiksT0ZCOnIoMjQ1KSxDVFI6cigxMDgpLEdDTTpyKDEwOCl9O2UuY3JlYXRlRGVjaXBoZXI9ZixlLmNyZWF0ZURlY2lwaGVyaXY9YX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24odCl7ZnVuY3Rpb24gbihlLHIsbyl7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBuPyhzLmNhbGwodGhpcyksdGhpcy5fY2FjaGU9bmV3IGksdGhpcy5fY2lwaGVyPW5ldyBmLkFFUyhyKSx0aGlzLl9wcmV2PW5ldyB0KG8ubGVuZ3RoKSxvLmNvcHkodGhpcy5fcHJldiksdGhpcy5fbW9kZT1lLHZvaWQodGhpcy5fYXV0b3BhZGRpbmc9ITApKTpuZXcgbihlLHIsbyl9ZnVuY3Rpb24gaSgpe3JldHVybiB0aGlzIGluc3RhbmNlb2YgaT92b2lkKHRoaXMuY2FjaGU9bmV3IHQoXCJcIikpOm5ldyBpfWZ1bmN0aW9uIG8oZSxyLGkpe3ZhciBvPWhbZS50b0xvd2VyQ2FzZSgpXTtpZighbyl0aHJvdyBuZXcgVHlwZUVycm9yKFwiaW52YWxpZCBzdWl0ZSB0eXBlXCIpO2lmKFwic3RyaW5nXCI9PXR5cGVvZiBpJiYoaT1uZXcgdChpKSksXCJzdHJpbmdcIj09dHlwZW9mIHImJihyPW5ldyB0KHIpKSxyLmxlbmd0aCE9PW8ua2V5LzgpdGhyb3cgbmV3IFR5cGVFcnJvcihcImludmFsaWQga2V5IGxlbmd0aCBcIityLmxlbmd0aCk7aWYoaS5sZW5ndGghPT1vLml2KXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIGl2IGxlbmd0aCBcIitpLmxlbmd0aCk7cmV0dXJuXCJzdHJlYW1cIj09PW8udHlwZT9uZXcgZChwW28ubW9kZV0scixpKTpcImF1dGhcIj09PW8udHlwZT9uZXcgbChwW28ubW9kZV0scixpKTpuZXcgbihwW28ubW9kZV0scixpKX1mdW5jdGlvbiBhKHQsZSl7dmFyIHI9aFt0LnRvTG93ZXJDYXNlKCldO2lmKCFyKXRocm93IG5ldyBUeXBlRXJyb3IoXCJpbnZhbGlkIHN1aXRlIHR5cGVcIik7dmFyIG49YyhlLCExLHIua2V5LHIuaXYpO3JldHVybiBvKHQsbi5rZXksbi5pdil9dmFyIGY9cigxMDcpLHM9cigxMDkpLHU9cigyKSxoPXIoMTUyKSxjPXIoMTUzKSxkPXIoMjQ2KSxsPXIoMjM4KTt1KG4scyksbi5wcm90b3R5cGUuX3VwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLl9jYWNoZS5hZGQoZSk7Zm9yKHZhciByLG4saT1bXTtyPXRoaXMuX2NhY2hlLmdldCgpOyluPXRoaXMuX21vZGUuZW5jcnlwdCh0aGlzLHIpLGkucHVzaChuKTtyZXR1cm4gdC5jb25jYXQoaSl9LG4ucHJvdG90eXBlLl9maW5hbD1mdW5jdGlvbigpe3ZhciB0PXRoaXMuX2NhY2hlLmZsdXNoKCk7aWYodGhpcy5fYXV0b3BhZGRpbmcpcmV0dXJuIHQ9dGhpcy5fbW9kZS5lbmNyeXB0KHRoaXMsdCksdGhpcy5fY2lwaGVyLnNjcnViKCksdDtpZihcIjEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwMTAxMDEwXCIhPT10LnRvU3RyaW5nKFwiaGV4XCIpKXRocm93IHRoaXMuX2NpcGhlci5zY3J1YigpLG5ldyBFcnJvcihcImRhdGEgbm90IG11bHRpcGxlIG9mIGJsb2NrIGxlbmd0aFwiKX0sbi5wcm90b3R5cGUuc2V0QXV0b1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIHRoaXMuX2F1dG9wYWRkaW5nPSEhdCx0aGlzfSxpLnByb3RvdHlwZS5hZGQ9ZnVuY3Rpb24oZSl7dGhpcy5jYWNoZT10LmNvbmNhdChbdGhpcy5jYWNoZSxlXSl9LGkucHJvdG90eXBlLmdldD1mdW5jdGlvbigpe2lmKHRoaXMuY2FjaGUubGVuZ3RoPjE1KXt2YXIgdD10aGlzLmNhY2hlLnNsaWNlKDAsMTYpO3JldHVybiB0aGlzLmNhY2hlPXRoaXMuY2FjaGUuc2xpY2UoMTYpLHR9cmV0dXJuIG51bGx9LGkucHJvdG90eXBlLmZsdXNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPTE2LXRoaXMuY2FjaGUubGVuZ3RoLHI9bmV3IHQoZSksbj0tMTsrK248ZTspci53cml0ZVVJbnQ4KGUsbik7dmFyIGk9dC5jb25jYXQoW3RoaXMuY2FjaGUscl0pO3JldHVybiBpfTt2YXIgcD17RUNCOnIoMjQ0KSxDQkM6cigyNDApLENGQjpyKDI0MSksQ0ZCODpyKDI0MyksQ0ZCMTpyKDI0MiksT0ZCOnIoMjQ1KSxDVFI6cigxMDgpLEdDTTpyKDEwOCl9O2UuY3JlYXRlQ2lwaGVyaXY9byxlLmNyZWF0ZUNpcGhlcj1hfSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3RoaXMuaD10LHRoaXMuc3RhdGU9bmV3IGUoMTYpLHRoaXMuc3RhdGUuZmlsbCgwKSx0aGlzLmNhY2hlPW5ldyBlKFwiXCIpfWZ1bmN0aW9uIG4odCl7cmV0dXJuW3QucmVhZFVJbnQzMkJFKDApLHQucmVhZFVJbnQzMkJFKDQpLHQucmVhZFVJbnQzMkJFKDgpLHQucmVhZFVJbnQzMkJFKDEyKV19ZnVuY3Rpb24gaSh0KXt0PXQubWFwKG8pO3ZhciByPW5ldyBlKDE2KTtyZXR1cm4gci53cml0ZVVJbnQzMkJFKHRbMF0sMCksci53cml0ZVVJbnQzMkJFKHRbMV0sNCksci53cml0ZVVJbnQzMkJFKHRbMl0sOCksci53cml0ZVVJbnQzMkJFKHRbM10sMTIpLHJ9ZnVuY3Rpb24gbyh0KXt2YXIgZSxyO3JldHVybiBlPXQ+c3x8dDwwPyhyPU1hdGguYWJzKHQpJXMsdDwwP3MtcjpyKTp0fWZ1bmN0aW9uIGEodCxlKXtyZXR1cm5bdFswXV5lWzBdLHRbMV1eZVsxXSx0WzJdXmVbMl0sdFszXV5lWzNdXX12YXIgZj1uZXcgZSgxNik7Zi5maWxsKDApLHQuZXhwb3J0cz1yLHIucHJvdG90eXBlLmdoYXNoPWZ1bmN0aW9uKHQpe2Zvcih2YXIgZT0tMTsrK2U8dC5sZW5ndGg7KXRoaXMuc3RhdGVbZV1ePXRbZV07dGhpcy5fbXVsdGlwbHkoKX0sci5wcm90b3R5cGUuX211bHRpcGx5PWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGUscixvPW4odGhpcy5oKSxmPVswLDAsMCwwXSxzPS0xOysrczwxMjg7KXtmb3IoZT0wIT09KHRoaXMuc3RhdGVbfn4ocy84KV0mMTw8Ny1zJTgpLGUmJihmPWEoZixvKSkscj0wIT09KDEmb1szXSksdD0zO3Q+MDt0LS0pb1t0XT1vW3RdPj4+MXwoMSZvW3QtMV0pPDwzMTtvWzBdPW9bMF0+Pj4xLHImJihvWzBdPW9bMF1eMjI1PDwyNCl9dGhpcy5zdGF0ZT1pKGYpfSxyLnByb3RvdHlwZS51cGRhdGU9ZnVuY3Rpb24odCl7dGhpcy5jYWNoZT1lLmNvbmNhdChbdGhpcy5jYWNoZSx0XSk7Zm9yKHZhciByO3RoaXMuY2FjaGUubGVuZ3RoPj0xNjspcj10aGlzLmNhY2hlLnNsaWNlKDAsMTYpLHRoaXMuY2FjaGU9dGhpcy5jYWNoZS5zbGljZSgxNiksdGhpcy5naGFzaChyKX0sci5wcm90b3R5cGUuZmluYWw9ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5jYWNoZS5sZW5ndGgmJnRoaXMuZ2hhc2goZS5jb25jYXQoW3RoaXMuY2FjaGUsZl0sMTYpKSx0aGlzLmdoYXNoKGkoWzAsdCwwLHJdKSksdGhpcy5zdGF0ZX07dmFyIHM9TWF0aC5wb3coMiwzMil9KS5jYWxsKGUscigxKS5CdWZmZXIpfSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIG4odCxyKXt2YXIgbj0odC5tb2R1bHVzLHQubW9kdWx1cy5ieXRlTGVuZ3RoKCkpLGk9KHIubGVuZ3RoLGMoXCJzaGExXCIpLnVwZGF0ZShuZXcgZShcIlwiKSkuZGlnZXN0KCkpLGE9aS5sZW5ndGg7aWYoMCE9PXJbMF0pdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTt2YXIgdT1yLnNsaWNlKDEsYSsxKSxoPXIuc2xpY2UoYSsxKSxkPXModSxmKGgsYSkpLGw9cyhoLGYoZCxuLWEtMSkpO2lmKG8oaSxsLnNsaWNlKDAsYSkpKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7Zm9yKHZhciBwPWE7MD09PWxbcF07KXArKztpZigxIT09bFtwKytdKXRocm93IG5ldyBFcnJvcihcImRlY3J5cHRpb24gZXJyb3JcIik7cmV0dXJuIGwuc2xpY2UocCl9ZnVuY3Rpb24gaSh0LGUscil7Zm9yKHZhciBuPWUuc2xpY2UoMCwyKSxpPTIsbz0wOzAhPT1lW2krK107KWlmKGk+PWUubGVuZ3RoKXtvKys7YnJlYWt9dmFyIGE9ZS5zbGljZSgyLGktMSk7ZS5zbGljZShpLTEsaSk7aWYoKFwiMDAwMlwiIT09bi50b1N0cmluZyhcImhleFwiKSYmIXJ8fFwiMDAwMVwiIT09bi50b1N0cmluZyhcImhleFwiKSYmcikmJm8rKyxhLmxlbmd0aDw4JiZvKyssbyl0aHJvdyBuZXcgRXJyb3IoXCJkZWNyeXB0aW9uIGVycm9yXCIpO3JldHVybiBlLnNsaWNlKGkpfWZ1bmN0aW9uIG8odCxyKXt0PW5ldyBlKHQpLHI9bmV3IGUocik7dmFyIG49MCxpPXQubGVuZ3RoO3QubGVuZ3RoIT09ci5sZW5ndGgmJihuKyssaT1NYXRoLm1pbih0Lmxlbmd0aCxyLmxlbmd0aCkpO2Zvcih2YXIgbz0tMTsrK288aTspbis9dFtvXV5yW29dO3JldHVybiBufXZhciBhPXIoMjMzKSxmPXIoMjMxKSxzPXIoMjQ4KSx1PXIoNzApLGg9cigyMzIpLGM9cig1OSksZD1yKDI0Nyk7dC5leHBvcnRzPWZ1bmN0aW9uKHQscixvKXt2YXIgZjtmPXQucGFkZGluZz90LnBhZGRpbmc6bz8xOjQ7dmFyIHM9YSh0KSxjPXMubW9kdWx1cy5ieXRlTGVuZ3RoKCk7aWYoci5sZW5ndGg+Y3x8bmV3IHUocikuY21wKHMubW9kdWx1cyk+PTApdGhyb3cgbmV3IEVycm9yKFwiZGVjcnlwdGlvbiBlcnJvclwiKTt2YXIgbDtsPW8/ZChuZXcgdShyKSxzKTpoKHIscyk7dmFyIHA9bmV3IGUoYy1sLmxlbmd0aCk7aWYocC5maWxsKDApLGw9ZS5jb25jYXQoW3AsbF0sYyksND09PWYpcmV0dXJuIG4ocyxsKTtpZigxPT09ZilyZXR1cm4gaShzLGwsbyk7aWYoMz09PWYpcmV0dXJuIGw7dGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBwYWRkaW5nXCIpfX0pLmNhbGwoZSxyKDEpLkJ1ZmZlcil9LGZ1bmN0aW9uKHQsZSxyKXsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gbih0LHIpe3ZhciBuPXQubW9kdWx1cy5ieXRlTGVuZ3RoKCksaT1yLmxlbmd0aCxvPXMoXCJzaGExXCIpLnVwZGF0ZShuZXcgZShcIlwiKSkuZGlnZXN0KCksYT1vLmxlbmd0aCxkPTIqYTtpZihpPm4tZC0yKXRocm93IG5ldyBFcnJvcihcIm1lc3NhZ2UgdG9vIGxvbmdcIik7dmFyIGw9bmV3IGUobi1pLWQtMik7bC5maWxsKDApO3ZhciBwPW4tYS0xLGI9ZihhKSx2PWgoZS5jb25jYXQoW28sbCxuZXcgZShbMV0pLHJdLHApLHUoYixwKSkseT1oKGIsdSh2LGEpKTtyZXR1cm4gbmV3IGMoZS5jb25jYXQoW25ldyBlKFswXSkseSx2XSxuKSl9ZnVuY3Rpb24gaSh0LHIsbil7dmFyIGk9ci5sZW5ndGgsYT10Lm1vZHVsdXMuYnl0ZUxlbmd0aCgpO2lmKGk+YS0xMSl0aHJvdyBuZXcgRXJyb3IoXCJtZXNzYWdlIHRvbyBsb25nXCIpO3ZhciBmO3JldHVybiBuPyhmPW5ldyBlKGEtaS0zKSxmLmZpbGwoMjU1KSk6Zj1vKGEtaS0zKSxuZXcgYyhlLmNvbmNhdChbbmV3IGUoWzAsbj8xOjJdKSxmLG5ldyBlKFswXSkscl0sYSkpfWZ1bmN0aW9uIG8odCxyKXtmb3IodmFyIG4saT1uZXcgZSh0KSxvPTAsYT1mKDIqdCkscz0wO288dDspcz09PWEubGVuZ3RoJiYoYT1mKDIqdCkscz0wKSxuPWFbcysrXSxuJiYoaVtvKytdPW4pO3JldHVybiBpfXZhciBhPXIoMjMzKSxmPXIoNjEpLHM9cig1OSksdT1yKDIzMSksaD1yKDI0OCksYz1yKDcwKSxkPXIoMjQ3KSxsPXIoMjMyKTt0LmV4cG9ydHM9ZnVuY3Rpb24odCxlLHIpe3ZhciBvO289dC5wYWRkaW5nP3QucGFkZGluZzpyPzE6NDt2YXIgZixzPWEodCk7aWYoND09PW8pZj1uKHMsZSk7ZWxzZSBpZigxPT09bylmPWkocyxlLHIpO2Vsc2V7aWYoMyE9PW8pdGhyb3cgbmV3IEVycm9yKFwidW5rbm93biBwYWRkaW5nXCIpO2lmKGY9bmV3IGMoZSksZi5jbXAocy5tb2R1bHVzKT49MCl0aHJvdyBuZXcgRXJyb3IoXCJkYXRhIHRvbyBsb25nIGZvciBtb2R1bHVzXCIpfXJldHVybiByP2woZixzKTpkKGYscyl9fSkuY2FsbChlLHIoMSkuQnVmZmVyKX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbih0KXtmdW5jdGlvbiByKHQsZSl7Zm9yKHZhciByPTAsbj10Lmxlbmd0aC0xO24+PTA7bi0tKXt2YXIgaT10W25dO1wiLlwiPT09aT90LnNwbGljZShuLDEpOlwiLi5cIj09PWk/KHQuc3BsaWNlKG4sMSksXG5yKyspOnImJih0LnNwbGljZShuLDEpLHItLSl9aWYoZSlmb3IoO3ItLTtyKXQudW5zaGlmdChcIi4uXCIpO3JldHVybiB0fWZ1bmN0aW9uIG4odCxlKXtpZih0LmZpbHRlcilyZXR1cm4gdC5maWx0ZXIoZSk7Zm9yKHZhciByPVtdLG49MDtuPHQubGVuZ3RoO24rKyllKHRbbl0sbix0KSYmci5wdXNoKHRbbl0pO3JldHVybiByfXZhciBpPS9eKFxcLz98KShbXFxzXFxTXSo/KSgoPzpcXC57MSwyfXxbXlxcL10rP3wpKFxcLlteLlxcL10qfCkpKD86W1xcL10qKSQvLG89ZnVuY3Rpb24odCl7cmV0dXJuIGkuZXhlYyh0KS5zbGljZSgxKX07ZS5yZXNvbHZlPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVwiXCIsaT0hMSxvPWFyZ3VtZW50cy5sZW5ndGgtMTtvPj0tMSYmIWk7by0tKXt2YXIgYT1vPj0wP2FyZ3VtZW50c1tvXTp0LmN3ZCgpO2lmKFwic3RyaW5nXCIhPXR5cGVvZiBhKXRocm93IG5ldyBUeXBlRXJyb3IoXCJBcmd1bWVudHMgdG8gcGF0aC5yZXNvbHZlIG11c3QgYmUgc3RyaW5nc1wiKTthJiYoZT1hK1wiL1wiK2UsaT1cIi9cIj09PWEuY2hhckF0KDApKX1yZXR1cm4gZT1yKG4oZS5zcGxpdChcIi9cIiksZnVuY3Rpb24odCl7cmV0dXJuISF0fSksIWkpLmpvaW4oXCIvXCIpLChpP1wiL1wiOlwiXCIpK2V8fFwiLlwifSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0KXt2YXIgaT1lLmlzQWJzb2x1dGUodCksbz1cIi9cIj09PWEodCwtMSk7cmV0dXJuIHQ9cihuKHQuc3BsaXQoXCIvXCIpLGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pLCFpKS5qb2luKFwiL1wiKSx0fHxpfHwodD1cIi5cIiksdCYmbyYmKHQrPVwiL1wiKSwoaT9cIi9cIjpcIlwiKSt0fSxlLmlzQWJzb2x1dGU9ZnVuY3Rpb24odCl7cmV0dXJuXCIvXCI9PT10LmNoYXJBdCgwKX0sZS5qb2luPWZ1bmN0aW9uKCl7dmFyIHQ9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDApO3JldHVybiBlLm5vcm1hbGl6ZShuKHQsZnVuY3Rpb24odCxlKXtpZihcInN0cmluZ1wiIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKFwiQXJndW1lbnRzIHRvIHBhdGguam9pbiBtdXN0IGJlIHN0cmluZ3NcIik7cmV0dXJuIHR9KS5qb2luKFwiL1wiKSl9LGUucmVsYXRpdmU9ZnVuY3Rpb24odCxyKXtmdW5jdGlvbiBuKHQpe2Zvcih2YXIgZT0wO2U8dC5sZW5ndGgmJlwiXCI9PT10W2VdO2UrKyk7Zm9yKHZhciByPXQubGVuZ3RoLTE7cj49MCYmXCJcIj09PXRbcl07ci0tKTtyZXR1cm4gZT5yP1tdOnQuc2xpY2UoZSxyLWUrMSl9dD1lLnJlc29sdmUodCkuc3Vic3RyKDEpLHI9ZS5yZXNvbHZlKHIpLnN1YnN0cigxKTtmb3IodmFyIGk9bih0LnNwbGl0KFwiL1wiKSksbz1uKHIuc3BsaXQoXCIvXCIpKSxhPU1hdGgubWluKGkubGVuZ3RoLG8ubGVuZ3RoKSxmPWEscz0wO3M8YTtzKyspaWYoaVtzXSE9PW9bc10pe2Y9czticmVha31mb3IodmFyIHU9W10scz1mO3M8aS5sZW5ndGg7cysrKXUucHVzaChcIi4uXCIpO3JldHVybiB1PXUuY29uY2F0KG8uc2xpY2UoZikpLHUuam9pbihcIi9cIil9LGUuc2VwPVwiL1wiLGUuZGVsaW1pdGVyPVwiOlwiLGUuZGlybmFtZT1mdW5jdGlvbih0KXt2YXIgZT1vKHQpLHI9ZVswXSxuPWVbMV07cmV0dXJuIHJ8fG4/KG4mJihuPW4uc3Vic3RyKDAsbi5sZW5ndGgtMSkpLHIrbik6XCIuXCJ9LGUuYmFzZW5hbWU9ZnVuY3Rpb24odCxlKXt2YXIgcj1vKHQpWzJdO3JldHVybiBlJiZyLnN1YnN0cigtMSplLmxlbmd0aCk9PT1lJiYocj1yLnN1YnN0cigwLHIubGVuZ3RoLWUubGVuZ3RoKSkscn0sZS5leHRuYW1lPWZ1bmN0aW9uKHQpe3JldHVybiBvKHQpWzNdfTt2YXIgYT1cImJcIj09PVwiYWJcIi5zdWJzdHIoLTEpP2Z1bmN0aW9uKHQsZSxyKXtyZXR1cm4gdC5zdWJzdHIoZSxyKX06ZnVuY3Rpb24odCxlLHIpe3JldHVybiBlPDAmJihlPXQubGVuZ3RoK2UpLHQuc3Vic3RyKGUscil9fSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDUxKX0sZnVuY3Rpb24odCxlLHIpe1widXNlIHN0cmljdFwiO2Z1bmN0aW9uIG4oKXt0aGlzLmhlYWQ9bnVsbCx0aGlzLnRhaWw9bnVsbCx0aGlzLmxlbmd0aD0wfXZhciBpPShyKDEpLkJ1ZmZlcixyKDE1NikpO3QuZXhwb3J0cz1uLG4ucHJvdG90eXBlLnB1c2g9ZnVuY3Rpb24odCl7dmFyIGU9e2RhdGE6dCxuZXh0Om51bGx9O3RoaXMubGVuZ3RoPjA/dGhpcy50YWlsLm5leHQ9ZTp0aGlzLmhlYWQ9ZSx0aGlzLnRhaWw9ZSwrK3RoaXMubGVuZ3RofSxuLnByb3RvdHlwZS51bnNoaWZ0PWZ1bmN0aW9uKHQpe3ZhciBlPXtkYXRhOnQsbmV4dDp0aGlzLmhlYWR9OzA9PT10aGlzLmxlbmd0aCYmKHRoaXMudGFpbD1lKSx0aGlzLmhlYWQ9ZSwrK3RoaXMubGVuZ3RofSxuLnByb3RvdHlwZS5zaGlmdD1mdW5jdGlvbigpe2lmKDAhPT10aGlzLmxlbmd0aCl7dmFyIHQ9dGhpcy5oZWFkLmRhdGE7cmV0dXJuIDE9PT10aGlzLmxlbmd0aD90aGlzLmhlYWQ9dGhpcy50YWlsPW51bGw6dGhpcy5oZWFkPXRoaXMuaGVhZC5uZXh0LC0tdGhpcy5sZW5ndGgsdH19LG4ucHJvdG90eXBlLmNsZWFyPWZ1bmN0aW9uKCl7dGhpcy5oZWFkPXRoaXMudGFpbD1udWxsLHRoaXMubGVuZ3RoPTB9LG4ucHJvdG90eXBlLmpvaW49ZnVuY3Rpb24odCl7aWYoMD09PXRoaXMubGVuZ3RoKXJldHVyblwiXCI7Zm9yKHZhciBlPXRoaXMuaGVhZCxyPVwiXCIrZS5kYXRhO2U9ZS5uZXh0OylyKz10K2UuZGF0YTtyZXR1cm4gcn0sbi5wcm90b3R5cGUuY29uY2F0PWZ1bmN0aW9uKHQpe2lmKDA9PT10aGlzLmxlbmd0aClyZXR1cm4gaS5hbGxvYygwKTtpZigxPT09dGhpcy5sZW5ndGgpcmV0dXJuIHRoaXMuaGVhZC5kYXRhO2Zvcih2YXIgZT1pLmFsbG9jVW5zYWZlKHQ+Pj4wKSxyPXRoaXMuaGVhZCxuPTA7cjspci5kYXRhLmNvcHkoZSxuKSxuKz1yLmRhdGEubGVuZ3RoLHI9ci5uZXh0O3JldHVybiBlfX0sZnVuY3Rpb24odCxlKXt2YXIgcj17fS50b1N0cmluZzt0LmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24odCl7cmV0dXJuXCJbb2JqZWN0IEFycmF5XVwiPT1yLmNhbGwodCl9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHIodCxlKXtmdW5jdGlvbiByKCl7aWYoIWkpe2lmKG4oXCJ0aHJvd0RlcHJlY2F0aW9uXCIpKXRocm93IG5ldyBFcnJvcihlKTtuKFwidHJhY2VEZXByZWNhdGlvblwiKT9jb25zb2xlLnRyYWNlKGUpOmNvbnNvbGUud2FybihlKSxpPSEwfXJldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1pZihuKFwibm9EZXByZWNhdGlvblwiKSlyZXR1cm4gdDt2YXIgaT0hMTtyZXR1cm4gcn1mdW5jdGlvbiBuKHQpe3RyeXtpZighZS5sb2NhbFN0b3JhZ2UpcmV0dXJuITF9Y2F0Y2godCl7cmV0dXJuITF9dmFyIHI9ZS5sb2NhbFN0b3JhZ2VbdF07cmV0dXJuIG51bGwhPXImJlwidHJ1ZVwiPT09U3RyaW5nKHIpLnRvTG93ZXJDYXNlKCl9dC5leHBvcnRzPXJ9KS5jYWxsKGUscigzOSkpfSxmdW5jdGlvbih0LGUscil7dC5leHBvcnRzPXIoMjQ5KX0sZnVuY3Rpb24odCxlLHIpeyhmdW5jdGlvbihuKXt2YXIgaT1mdW5jdGlvbigpe3RyeXtyZXR1cm4gcigzMSl9Y2F0Y2godCl7fX0oKTtlPXQuZXhwb3J0cz1yKDI1MCksZS5TdHJlYW09aXx8ZSxlLlJlYWRhYmxlPWUsZS5Xcml0YWJsZT1yKDE1NSksZS5EdXBsZXg9cig1MSksZS5UcmFuc2Zvcm09cigxNTQpLGUuUGFzc1Rocm91Z2g9cigyNDkpLCFuLmJyb3dzZXImJlwiZGlzYWJsZVwiPT09bi5lbnYuUkVBREFCTEVfU1RSRUFNJiZpJiYodC5leHBvcnRzPWkpfSkuY2FsbChlLHIoMjYpKX0sZnVuY3Rpb24odCxlLHIpe3QuZXhwb3J0cz1yKDE1NCl9LGZ1bmN0aW9uKHQsZSxyKXt0LmV4cG9ydHM9cigxNTUpfSxmdW5jdGlvbih0LGUpe1wiZnVuY3Rpb25cIj09dHlwZW9mIE9iamVjdC5jcmVhdGU/dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZSx0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6dCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KX06dC5leHBvcnRzPWZ1bmN0aW9uKHQsZSl7dC5zdXBlcl89ZTt2YXIgcj1mdW5jdGlvbigpe307ci5wcm90b3R5cGU9ZS5wcm90b3R5cGUsdC5wcm90b3R5cGU9bmV3IHIsdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dH19LGZ1bmN0aW9uKHQsZSl7XCJmdW5jdGlvblwiPT10eXBlb2YgT2JqZWN0LmNyZWF0ZT90LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lLHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pfTp0LmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt0LnN1cGVyXz1lO3ZhciByPWZ1bmN0aW9uKCl7fTtyLnByb3RvdHlwZT1lLnByb3RvdHlwZSx0LnByb3RvdHlwZT1uZXcgcix0LnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj10fX0sZnVuY3Rpb24odCxlKXt0LmV4cG9ydHM9ZnVuY3Rpb24odCl7cmV0dXJuIHQmJlwib2JqZWN0XCI9PXR5cGVvZiB0JiZcImZ1bmN0aW9uXCI9PXR5cGVvZiB0LmNvcHkmJlwiZnVuY3Rpb25cIj09dHlwZW9mIHQuZmlsbCYmXCJmdW5jdGlvblwiPT10eXBlb2YgdC5yZWFkVUludDh9fSxmdW5jdGlvbih0LGUscil7KGZ1bmN0aW9uKHQsbil7ZnVuY3Rpb24gaSh0LHIpe3ZhciBuPXtzZWVuOltdLHN0eWxpemU6YX07cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg+PTMmJihuLmRlcHRoPWFyZ3VtZW50c1syXSksYXJndW1lbnRzLmxlbmd0aD49NCYmKG4uY29sb3JzPWFyZ3VtZW50c1szXSksYihyKT9uLnNob3dIaWRkZW49cjpyJiZlLl9leHRlbmQobixyKSxfKG4uc2hvd0hpZGRlbikmJihuLnNob3dIaWRkZW49ITEpLF8obi5kZXB0aCkmJihuLmRlcHRoPTIpLF8obi5jb2xvcnMpJiYobi5jb2xvcnM9ITEpLF8obi5jdXN0b21JbnNwZWN0KSYmKG4uY3VzdG9tSW5zcGVjdD0hMCksbi5jb2xvcnMmJihuLnN0eWxpemU9bykscyhuLHQsbi5kZXB0aCl9ZnVuY3Rpb24gbyh0LGUpe3ZhciByPWkuc3R5bGVzW2VdO3JldHVybiByP1wiXHUwMDFiW1wiK2kuY29sb3JzW3JdWzBdK1wibVwiK3QrXCJcdTAwMWJbXCIraS5jb2xvcnNbcl1bMV0rXCJtXCI6dH1mdW5jdGlvbiBhKHQsZSl7cmV0dXJuIHR9ZnVuY3Rpb24gZih0KXt2YXIgZT17fTtyZXR1cm4gdC5mb3JFYWNoKGZ1bmN0aW9uKHQscil7ZVt0XT0hMH0pLGV9ZnVuY3Rpb24gcyh0LHIsbil7aWYodC5jdXN0b21JbnNwZWN0JiZyJiZrKHIuaW5zcGVjdCkmJnIuaW5zcGVjdCE9PWUuaW5zcGVjdCYmKCFyLmNvbnN0cnVjdG9yfHxyLmNvbnN0cnVjdG9yLnByb3RvdHlwZSE9PXIpKXt2YXIgaT1yLmluc3BlY3Qobix0KTtyZXR1cm4gZyhpKXx8KGk9cyh0LGksbikpLGl9dmFyIG89dSh0LHIpO2lmKG8pcmV0dXJuIG87dmFyIGE9T2JqZWN0LmtleXMociksYj1mKGEpO2lmKHQuc2hvd0hpZGRlbiYmKGE9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocikpLEEocikmJihhLmluZGV4T2YoXCJtZXNzYWdlXCIpPj0wfHxhLmluZGV4T2YoXCJkZXNjcmlwdGlvblwiKT49MCkpcmV0dXJuIGgocik7aWYoMD09PWEubGVuZ3RoKXtpZihrKHIpKXt2YXIgdj1yLm5hbWU/XCI6IFwiK3IubmFtZTpcIlwiO3JldHVybiB0LnN0eWxpemUoXCJbRnVuY3Rpb25cIit2K1wiXVwiLFwic3BlY2lhbFwiKX1pZihNKHIpKXJldHVybiB0LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwicmVnZXhwXCIpO2lmKEUocikpcmV0dXJuIHQuc3R5bGl6ZShEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwiZGF0ZVwiKTtpZihBKHIpKXJldHVybiBoKHIpfXZhciB5PVwiXCIsbT0hMSx3PVtcIntcIixcIn1cIl07aWYocChyKSYmKG09ITAsdz1bXCJbXCIsXCJdXCJdKSxrKHIpKXt2YXIgXz1yLm5hbWU/XCI6IFwiK3IubmFtZTpcIlwiO3k9XCIgW0Z1bmN0aW9uXCIrXytcIl1cIn1pZihNKHIpJiYoeT1cIiBcIitSZWdFeHAucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwocikpLEUocikmJih5PVwiIFwiK0RhdGUucHJvdG90eXBlLnRvVVRDU3RyaW5nLmNhbGwocikpLEEocikmJih5PVwiIFwiK2gocikpLDA9PT1hLmxlbmd0aCYmKCFtfHwwPT1yLmxlbmd0aCkpcmV0dXJuIHdbMF0reSt3WzFdO2lmKG48MClyZXR1cm4gTShyKT90LnN0eWxpemUoUmVnRXhwLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHIpLFwicmVnZXhwXCIpOnQuc3R5bGl6ZShcIltPYmplY3RdXCIsXCJzcGVjaWFsXCIpO3Quc2Vlbi5wdXNoKHIpO3ZhciBTO3JldHVybiBTPW0/Yyh0LHIsbixiLGEpOmEubWFwKGZ1bmN0aW9uKGUpe3JldHVybiBkKHQscixuLGIsZSxtKX0pLHQuc2Vlbi5wb3AoKSxsKFMseSx3KX1mdW5jdGlvbiB1KHQsZSl7aWYoXyhlKSlyZXR1cm4gdC5zdHlsaXplKFwidW5kZWZpbmVkXCIsXCJ1bmRlZmluZWRcIik7aWYoZyhlKSl7dmFyIHI9XCInXCIrSlNPTi5zdHJpbmdpZnkoZSkucmVwbGFjZSgvXlwifFwiJC9nLFwiXCIpLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpK1wiJ1wiO3JldHVybiB0LnN0eWxpemUocixcInN0cmluZ1wiKX1yZXR1cm4gbShlKT90LnN0eWxpemUoXCJcIitlLFwibnVtYmVyXCIpOmIoZSk/dC5zdHlsaXplKFwiXCIrZSxcImJvb2xlYW5cIik6dihlKT90LnN0eWxpemUoXCJudWxsXCIsXCJudWxsXCIpOnZvaWQgMH1mdW5jdGlvbiBoKHQpe3JldHVyblwiW1wiK0Vycm9yLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpK1wiXVwifWZ1bmN0aW9uIGModCxlLHIsbixpKXtmb3IodmFyIG89W10sYT0wLGY9ZS5sZW5ndGg7YTxmOysrYSlSKGUsU3RyaW5nKGEpKT9vLnB1c2goZCh0LGUscixuLFN0cmluZyhhKSwhMCkpOm8ucHVzaChcIlwiKTtyZXR1cm4gaS5mb3JFYWNoKGZ1bmN0aW9uKGkpe2kubWF0Y2goL15cXGQrJC8pfHxvLnB1c2goZCh0LGUscixuLGksITApKX0pLG99ZnVuY3Rpb24gZCh0LGUscixuLGksbyl7dmFyIGEsZix1O2lmKHU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLGkpfHx7dmFsdWU6ZVtpXX0sdS5nZXQ/Zj11LnNldD90LnN0eWxpemUoXCJbR2V0dGVyL1NldHRlcl1cIixcInNwZWNpYWxcIik6dC5zdHlsaXplKFwiW0dldHRlcl1cIixcInNwZWNpYWxcIik6dS5zZXQmJihmPXQuc3R5bGl6ZShcIltTZXR0ZXJdXCIsXCJzcGVjaWFsXCIpKSxSKG4saSl8fChhPVwiW1wiK2krXCJdXCIpLGZ8fCh0LnNlZW4uaW5kZXhPZih1LnZhbHVlKTwwPyhmPXYocik/cyh0LHUudmFsdWUsbnVsbCk6cyh0LHUudmFsdWUsci0xKSxmLmluZGV4T2YoXCJcXG5cIik+LTEmJihmPW8/Zi5zcGxpdChcIlxcblwiKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJuXCIgIFwiK3R9KS5qb2luKFwiXFxuXCIpLnN1YnN0cigyKTpcIlxcblwiK2Yuc3BsaXQoXCJcXG5cIikubWFwKGZ1bmN0aW9uKHQpe3JldHVyblwiICAgXCIrdH0pLmpvaW4oXCJcXG5cIikpKTpmPXQuc3R5bGl6ZShcIltDaXJjdWxhcl1cIixcInNwZWNpYWxcIikpLF8oYSkpe2lmKG8mJmkubWF0Y2goL15cXGQrJC8pKXJldHVybiBmO2E9SlNPTi5zdHJpbmdpZnkoXCJcIitpKSxhLm1hdGNoKC9eXCIoW2EtekEtWl9dW2EtekEtWl8wLTldKilcIiQvKT8oYT1hLnN1YnN0cigxLGEubGVuZ3RoLTIpLGE9dC5zdHlsaXplKGEsXCJuYW1lXCIpKTooYT1hLnJlcGxhY2UoLycvZyxcIlxcXFwnXCIpLnJlcGxhY2UoL1xcXFxcIi9nLCdcIicpLnJlcGxhY2UoLyheXCJ8XCIkKS9nLFwiJ1wiKSxhPXQuc3R5bGl6ZShhLFwic3RyaW5nXCIpKX1yZXR1cm4gYStcIjogXCIrZn1mdW5jdGlvbiBsKHQsZSxyKXt2YXIgbj0wLGk9dC5yZWR1Y2UoZnVuY3Rpb24odCxlKXtyZXR1cm4gbisrLGUuaW5kZXhPZihcIlxcblwiKT49MCYmbisrLHQrZS5yZXBsYWNlKC9cXHUwMDFiXFxbXFxkXFxkP20vZyxcIlwiKS5sZW5ndGgrMX0sMCk7cmV0dXJuIGk+NjA/clswXSsoXCJcIj09PWU/XCJcIjplK1wiXFxuIFwiKStcIiBcIit0LmpvaW4oXCIsXFxuICBcIikrXCIgXCIrclsxXTpyWzBdK2UrXCIgXCIrdC5qb2luKFwiLCBcIikrXCIgXCIrclsxXX1mdW5jdGlvbiBwKHQpe3JldHVybiBBcnJheS5pc0FycmF5KHQpfWZ1bmN0aW9uIGIodCl7cmV0dXJuXCJib29sZWFuXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHYodCl7cmV0dXJuIG51bGw9PT10fWZ1bmN0aW9uIHkodCl7cmV0dXJuIG51bGw9PXR9ZnVuY3Rpb24gbSh0KXtyZXR1cm5cIm51bWJlclwiPT10eXBlb2YgdH1mdW5jdGlvbiBnKHQpe3JldHVyblwic3RyaW5nXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHcodCl7cmV0dXJuXCJzeW1ib2xcIj09dHlwZW9mIHR9ZnVuY3Rpb24gXyh0KXtyZXR1cm4gdm9pZCAwPT09dH1mdW5jdGlvbiBNKHQpe3JldHVybiBTKHQpJiZcIltvYmplY3QgUmVnRXhwXVwiPT09SSh0KX1mdW5jdGlvbiBTKHQpe3JldHVyblwib2JqZWN0XCI9PXR5cGVvZiB0JiZudWxsIT09dH1mdW5jdGlvbiBFKHQpe3JldHVybiBTKHQpJiZcIltvYmplY3QgRGF0ZV1cIj09PUkodCl9ZnVuY3Rpb24gQSh0KXtyZXR1cm4gUyh0KSYmKFwiW29iamVjdCBFcnJvcl1cIj09PUkodCl8fHQgaW5zdGFuY2VvZiBFcnJvcil9ZnVuY3Rpb24gayh0KXtyZXR1cm5cImZ1bmN0aW9uXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIHgodCl7cmV0dXJuIG51bGw9PT10fHxcImJvb2xlYW5cIj09dHlwZW9mIHR8fFwibnVtYmVyXCI9PXR5cGVvZiB0fHxcInN0cmluZ1wiPT10eXBlb2YgdHx8XCJzeW1ib2xcIj09dHlwZW9mIHR8fFwidW5kZWZpbmVkXCI9PXR5cGVvZiB0fWZ1bmN0aW9uIEkodCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KX1mdW5jdGlvbiBCKHQpe3JldHVybiB0PDEwP1wiMFwiK3QudG9TdHJpbmcoMTApOnQudG9TdHJpbmcoMTApfWZ1bmN0aW9uIE8oKXt2YXIgdD1uZXcgRGF0ZSxlPVtCKHQuZ2V0SG91cnMoKSksQih0LmdldE1pbnV0ZXMoKSksQih0LmdldFNlY29uZHMoKSldLmpvaW4oXCI6XCIpO3JldHVyblt0LmdldERhdGUoKSxDW3QuZ2V0TW9udGgoKV0sZV0uam9pbihcIiBcIil9ZnVuY3Rpb24gUih0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgUD0vJVtzZGolXS9nO2UuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKCFnKHQpKXtmb3IodmFyIGU9W10scj0wO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspZS5wdXNoKGkoYXJndW1lbnRzW3JdKSk7cmV0dXJuIGUuam9pbihcIiBcIil9Zm9yKHZhciByPTEsbj1hcmd1bWVudHMsbz1uLmxlbmd0aCxhPVN0cmluZyh0KS5yZXBsYWNlKFAsZnVuY3Rpb24odCl7aWYoXCIlJVwiPT09dClyZXR1cm5cIiVcIjtpZihyPj1vKXJldHVybiB0O3N3aXRjaCh0KXtjYXNlXCIlc1wiOnJldHVybiBTdHJpbmcobltyKytdKTtjYXNlXCIlZFwiOnJldHVybiBOdW1iZXIobltyKytdKTtjYXNlXCIlalwiOnRyeXtyZXR1cm4gSlNPTi5zdHJpbmdpZnkobltyKytdKX1jYXRjaCh0KXtyZXR1cm5cIltDaXJjdWxhcl1cIn1kZWZhdWx0OnJldHVybiB0fX0pLGY9bltyXTtyPG87Zj1uWysrcl0pYSs9dihmKXx8IVMoZik/XCIgXCIrZjpcIiBcIitpKGYpO3JldHVybiBhfSxlLmRlcHJlY2F0ZT1mdW5jdGlvbihyLGkpe2Z1bmN0aW9uIG8oKXtpZighYSl7aWYobi50aHJvd0RlcHJlY2F0aW9uKXRocm93IG5ldyBFcnJvcihpKTtuLnRyYWNlRGVwcmVjYXRpb24/Y29uc29sZS50cmFjZShpKTpjb25zb2xlLmVycm9yKGkpLGE9ITB9cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWlmKF8odC5wcm9jZXNzKSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZS5kZXByZWNhdGUocixpKS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9O2lmKG4ubm9EZXByZWNhdGlvbj09PSEwKXJldHVybiByO3ZhciBhPSExO3JldHVybiBvfTt2YXIgVCxqPXt9O2UuZGVidWdsb2c9ZnVuY3Rpb24odCl7aWYoXyhUKSYmKFQ9bi5lbnYuTk9ERV9ERUJVR3x8XCJcIiksdD10LnRvVXBwZXJDYXNlKCksIWpbdF0paWYobmV3IFJlZ0V4cChcIlxcXFxiXCIrdCtcIlxcXFxiXCIsXCJpXCIpLnRlc3QoVCkpe3ZhciByPW4ucGlkO2pbdF09ZnVuY3Rpb24oKXt2YXIgbj1lLmZvcm1hdC5hcHBseShlLGFyZ3VtZW50cyk7Y29uc29sZS5lcnJvcihcIiVzICVkOiAlc1wiLHQscixuKX19ZWxzZSBqW3RdPWZ1bmN0aW9uKCl7fTtyZXR1cm4galt0XX0sZS5pbnNwZWN0PWksaS5jb2xvcnM9e2JvbGQ6WzEsMjJdLGl0YWxpYzpbMywyM10sdW5kZXJsaW5lOls0LDI0XSxpbnZlcnNlOls3LDI3XSx3aGl0ZTpbMzcsMzldLGdyZXk6WzkwLDM5XSxibGFjazpbMzAsMzldLGJsdWU6WzM0LDM5XSxjeWFuOlszNiwzOV0sZ3JlZW46WzMyLDM5XSxtYWdlbnRhOlszNSwzOV0scmVkOlszMSwzOV0seWVsbG93OlszMywzOV19LGkuc3R5bGVzPXtzcGVjaWFsOlwiY3lhblwiLG51bWJlcjpcInllbGxvd1wiLGJvb2xlYW46XCJ5ZWxsb3dcIix1bmRlZmluZWQ6XCJncmV5XCIsbnVsbDpcImJvbGRcIixzdHJpbmc6XCJncmVlblwiLGRhdGU6XCJtYWdlbnRhXCIscmVnZXhwOlwicmVkXCJ9LGUuaXNBcnJheT1wLGUuaXNCb29sZWFuPWIsZS5pc051bGw9dixlLmlzTnVsbE9yVW5kZWZpbmVkPXksZS5pc051bWJlcj1tLGUuaXNTdHJpbmc9ZyxlLmlzU3ltYm9sPXcsZS5pc1VuZGVmaW5lZD1fLGUuaXNSZWdFeHA9TSxlLmlzT2JqZWN0PVMsZS5pc0RhdGU9RSxlLmlzRXJyb3I9QSxlLmlzRnVuY3Rpb249ayxlLmlzUHJpbWl0aXZlPXgsZS5pc0J1ZmZlcj1yKDYwNSk7dmFyIEM9W1wiSmFuXCIsXCJGZWJcIixcIk1hclwiLFwiQXByXCIsXCJNYXlcIixcIkp1blwiLFwiSnVsXCIsXCJBdWdcIixcIlNlcFwiLFwiT2N0XCIsXCJOb3ZcIixcIkRlY1wiXTtlLmxvZz1mdW5jdGlvbigpe2NvbnNvbGUubG9nKFwiJXMgLSAlc1wiLE8oKSxlLmZvcm1hdC5hcHBseShlLGFyZ3VtZW50cykpfSxlLmluaGVyaXRzPXIoNjA0KSxlLl9leHRlbmQ9ZnVuY3Rpb24odCxlKXtpZighZXx8IVMoZSkpcmV0dXJuIHQ7Zm9yKHZhciByPU9iamVjdC5rZXlzKGUpLG49ci5sZW5ndGg7bi0tOyl0W3Jbbl1dPWVbcltuXV07cmV0dXJuIHR9fSkuY2FsbChlLHIoMzkpLHIoMjYpKX0sZnVuY3Rpb24odCxlKXt2YXIgcj1bXS5pbmRleE9mO3QuZXhwb3J0cz1mdW5jdGlvbih0LGUpe2lmKHIpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIG49MDtuPHQubGVuZ3RoOysrbilpZih0W25dPT09ZSlyZXR1cm4gbjtyZXR1cm4tMX19LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlKXt9LGZ1bmN0aW9uKHQsZSl7fSxmdW5jdGlvbih0LGUpe30sZnVuY3Rpb24odCxlLHIpe3IoMjUzKSx0LmV4cG9ydHM9cigyNTIpfV0pfSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZpdmUtYmVsbHMtY29uZGl0aW9uL2Rpc3QvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBTZXJpYWxpemVzIGEgY3J5cHRvLWNvbmRpdGlvbiBjbGFzcyAoQ29uZGl0aW9uIG9yIEZ1bGZpbGxtZW50KSBpbnRvIGEgQmlnY2hhaW5EQi1jb21wYXRpYmxlIEpTT05cbiAqIEBwYXJhbSB7Y2MuRnVsZmlsbG1lbnR9IGZ1bGZpbGxtZW50IGJhc2U1OCBlbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBmb3IgdGhlIHJlY2lwaWVudCBvZiB0aGUgVHJhbnNhY3Rpb25cbiAqIEByZXR1cm5zIHtvYmplY3R9IEVkMjU1MTkgQ29uZGl0aW9uICh0aGF0IHdpbGwgbmVlZCB0byB3cmFwcGVkIGluIGFuIE91dHB1dClcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY2NKc29uaWZ5KGZ1bGZpbGxtZW50KSB7XG5cbiAgICBsZXQgY29uZGl0aW9uVXJpO1xuXG4gICAgaWYgKCdnZXRDb25kaXRpb25VcmknIGluIGZ1bGZpbGxtZW50KVxuICAgICAgICBjb25kaXRpb25VcmkgPSBmdWxmaWxsbWVudC5nZXRDb25kaXRpb25VcmkoKTtcbiAgICBlbHNlIGlmICgnc2VyaWFsaXplVXJpJyBpbiBmdWxmaWxsbWVudClcbiAgICAgICAgY29uZGl0aW9uVXJpID0gZnVsZmlsbG1lbnQuc2VyaWFsaXplVXJpKCk7XG5cbiAgICBsZXQganNvbkJvZHkgPSB7XG4gICAgICAgICdkZXRhaWxzJzoge30sXG4gICAgICAgICd1cmknOiBjb25kaXRpb25VcmksXG4gICAgfTtcblxuICAgIGlmIChmdWxmaWxsbWVudC5nZXRUeXBlSWQoKSA9PT0gMCkge1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGVfaWQgPSAwO1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLmJpdG1hc2sgPSAzO1xuXG4gICAgICAgIGlmICgncHJlaW1hZ2UnIGluIGZ1bGZpbGxtZW50KSB7XG4gICAgICAgICAgICBqc29uQm9keS5kZXRhaWxzLnByZWltYWdlID0gZnVsZmlsbG1lbnQucHJlaW1hZ2UudG9TdHJpbmcoKTtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZSA9ICdmdWxmaWxsbWVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoZnVsZmlsbG1lbnQuZ2V0VHlwZUlkKCkgPT09IDIpXG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICAnZGV0YWlscyc6IHtcbiAgICAgICAgICAgICAgICAndHlwZV9pZCc6IDIsXG4gICAgICAgICAgICAgICAgJ3R5cGUnOiAnZnVsZmlsbG1lbnQnLFxuICAgICAgICAgICAgICAgICdiaXRtYXNrJzogZnVsZmlsbG1lbnQuZ2V0Qml0bWFzaygpLFxuICAgICAgICAgICAgICAgICd0aHJlc2hvbGQnOiBmdWxmaWxsbWVudC50aHJlc2hvbGQsXG4gICAgICAgICAgICAgICAgJ3N1YmZ1bGZpbGxtZW50cyc6IGZ1bGZpbGxtZW50LnN1YmNvbmRpdGlvbnMubWFwKChzdWJjb25kaXRpb24pID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3Qgc3ViY29uZGl0aW9uSnNvbiA9IGNjSnNvbmlmeShzdWJjb25kaXRpb24uYm9keSk7XG4gICAgICAgICAgICAgICAgICAgIHN1YmNvbmRpdGlvbkpzb24uZGV0YWlscy53ZWlnaHQgPSAxO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc3ViY29uZGl0aW9uSnNvbi5kZXRhaWxzO1xuICAgICAgICAgICAgICAgIH0pXG4gICAgICAgICAgICB9LFxuICAgICAgICAgICAgJ3VyaSc6IGNvbmRpdGlvblVyaSxcbiAgICAgICAgfTtcblxuICAgIGlmIChmdWxmaWxsbWVudC5nZXRUeXBlSWQoKSA9PT0gNCkge1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGVfaWQgPSA0O1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLmJpdG1hc2sgPSAzMjtcblxuICAgICAgICBpZiAoJ3B1YmxpY0tleScgaW4gZnVsZmlsbG1lbnQpIHtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMuc2lnbmF0dXJlID0gbnVsbDtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMucHVibGljX2tleSA9IGJhc2U1OC5lbmNvZGUoZnVsZmlsbG1lbnQucHVibGljS2V5KTtcbiAgICAgICAgICAgIGpzb25Cb2R5LmRldGFpbHMudHlwZSA9ICdmdWxmaWxsbWVudCc7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoJ2hhc2gnIGluIGZ1bGZpbGxtZW50KSB7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMuaGFzaCA9IGJhc2U1OC5lbmNvZGUoZnVsZmlsbG1lbnQuaGFzaCk7XG4gICAgICAgIGpzb25Cb2R5LmRldGFpbHMubWF4X2Z1bGZpbGxtZW50X2xlbmd0aCA9IGZ1bGZpbGxtZW50Lm1heEZ1bGZpbGxtZW50TGVuZ3RoO1xuICAgICAgICBqc29uQm9keS5kZXRhaWxzLnR5cGUgPSAnY29uZGl0aW9uJztcbiAgICB9XG5cbiAgICByZXR1cm4ganNvbkJvZHk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vdXRpbHMvY2NKc29uaWZ5LmpzIiwiaW1wb3J0IGhhc2hUcmFuc2FjdGlvbiBmcm9tICcuL2hhc2hUcmFuc2FjdGlvbic7XG5cblxuZnVuY3Rpb24gbWFrZVRyYW5zYWN0aW9uVGVtcGxhdGUoKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgJ2lkJzogbnVsbCxcbiAgICAgICAgJ29wZXJhdGlvbic6IG51bGwsXG4gICAgICAgICdvdXRwdXRzJzogW10sXG4gICAgICAgICdpbnB1dHMnOiBbXSxcbiAgICAgICAgJ21ldGFkYXRhJzogbnVsbCxcbiAgICAgICAgJ2Fzc2V0JzogbnVsbCxcbiAgICAgICAgJ3ZlcnNpb24nOiAnMC45JyxcbiAgICB9O1xufVxuXG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VUcmFuc2FjdGlvbihvcGVyYXRpb24sIGFzc2V0LCBtZXRhZGF0YSA9IG51bGwsIG91dHB1dHMgPSBbXSwgaW5wdXRzID0gW10pIHtcbiAgICBjb25zdCB0eCA9IG1ha2VUcmFuc2FjdGlvblRlbXBsYXRlKCk7XG4gICAgdHgub3BlcmF0aW9uID0gb3BlcmF0aW9uO1xuICAgIHR4LmFzc2V0ID0gYXNzZXQ7XG4gICAgdHgubWV0YWRhdGEgPSBtZXRhZGF0YTtcbiAgICB0eC5pbnB1dHMgPSBpbnB1dHM7XG4gICAgdHgub3V0cHV0cyA9IG91dHB1dHM7XG5cbiAgICAvLyBIYXNoaW5nIG11c3QgYmUgZG9uZSBhZnRlciwgYXMgdGhlIGhhc2ggaXMgb2YgdGhlIFRyYW5zYWN0aW9uICh1cCB0byBub3cpXG4gICAgdHguaWQgPSBoYXNoVHJhbnNhY3Rpb24odHgpO1xuICAgIHJldHVybiB0eDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgc3RhYmxlU3RyaW5naWZ5IGZyb20gJ2pzb24tc3RhYmxlLXN0cmluZ2lmeSc7XG5pbXBvcnQgY2xvbmUgZnJvbSAnY2xvbmUnO1xuXG5cbi8qKlxuICogQHB1YmxpY1xuICogQ2Fub25pY2FsbHkgc2VyaWFsaXplcyBhIHRyYW5zYWN0aW9uIGludG8gYSBzdHJpbmcgYnkgc29ydGluZyB0aGUga2V5c1xuICogQHBhcmFtIHtvYmplY3R9ICh0cmFuc2FjdGlvbilcbiAqIEByZXR1cm4ge3N0cmluZ30gYSBjYW5vbmljYWxseSBzZXJpYWxpemVkIFRyYW5zYWN0aW9uXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyh0cmFuc2FjdGlvbikge1xuICAgIC8vIEJpZ2NoYWluREIgc2lnbnMgZnVsZmlsbG1lbnRzIGJ5IHNlcmlhbGl6aW5nIHRyYW5zYWN0aW9ucyBpbnRvIGEgXCJjYW5vbmljYWxcIiBmb3JtYXQgd2hlcmVcbiAgICBjb25zdCB0eCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICAvLyBUT0RPOiBzZXQgZnVsZmlsbG1lbnRzIHRvIG51bGxcbiAgICAvLyBTb3J0IHRoZSBrZXlzXG4gICAgcmV0dXJuIHN0YWJsZVN0cmluZ2lmeSh0eCwgKGEsIGIpID0+IChhLmtleSA+IGIua2V5ID8gMSA6IC0xKSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZy5qcyIsInZhciBjb3JlID0gbW9kdWxlLmV4cG9ydHMgPSB7dmVyc2lvbjogJzIuNC4wJ307XG5pZih0eXBlb2YgX19lID09ICdudW1iZXInKV9fZSA9IGNvcmU7IC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tdW5kZWZcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2NvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gVGhhbmsncyBJRTggZm9yIGhpcyBmdW5ueSBkZWZpbmVQcm9wZXJ0eVxubW9kdWxlLmV4cG9ydHMgPSAhcmVxdWlyZSgnLi9fZmFpbHMnKShmdW5jdGlvbigpe1xuICByZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19kZXNjcmlwdG9ycy5qc1xuLy8gbW9kdWxlIGlkID0gOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBodHRwczovL2dpdGh1Yi5jb20vemxvaXJvY2svY29yZS1qcy9pc3N1ZXMvODYjaXNzdWVjb21tZW50LTExNTc1OTAyOFxudmFyIGdsb2JhbCA9IG1vZHVsZS5leHBvcnRzID0gdHlwZW9mIHdpbmRvdyAhPSAndW5kZWZpbmVkJyAmJiB3aW5kb3cuTWF0aCA9PSBNYXRoXG4gID8gd2luZG93IDogdHlwZW9mIHNlbGYgIT0gJ3VuZGVmaW5lZCcgJiYgc2VsZi5NYXRoID09IE1hdGggPyBzZWxmIDogRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbmlmKHR5cGVvZiBfX2cgPT0gJ251bWJlcicpX19nID0gZ2xvYmFsOyAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLXVuZGVmXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDEwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gdHlwZW9mIGl0ID09PSAnb2JqZWN0JyA/IGl0ICE9PSBudWxsIDogdHlwZW9mIGl0ID09PSAnZnVuY3Rpb24nO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2lzLW9iamVjdC5qc1xuLy8gbW9kdWxlIGlkID0gMTFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gdG8gaW5kZXhlZCBvYmplY3QsIHRvT2JqZWN0IHdpdGggZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBzdHJpbmdzXG52YXIgSU9iamVjdCA9IHJlcXVpcmUoJy4vX2lvYmplY3QnKVxuICAsIGRlZmluZWQgPSByZXF1aXJlKCcuL19kZWZpbmVkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIElPYmplY3QoZGVmaW5lZChpdCkpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWlvYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDEyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIHNoaW0gZm9yIHVzaW5nIHByb2Nlc3MgaW4gYnJvd3NlclxudmFyIHByb2Nlc3MgPSBtb2R1bGUuZXhwb3J0cyA9IHt9O1xuXG4vLyBjYWNoZWQgZnJvbSB3aGF0ZXZlciBnbG9iYWwgaXMgcHJlc2VudCBzbyB0aGF0IHRlc3QgcnVubmVycyB0aGF0IHN0dWIgaXRcbi8vIGRvbid0IGJyZWFrIHRoaW5ncy4gIEJ1dCB3ZSBuZWVkIHRvIHdyYXAgaXQgaW4gYSB0cnkgY2F0Y2ggaW4gY2FzZSBpdCBpc1xuLy8gd3JhcHBlZCBpbiBzdHJpY3QgbW9kZSBjb2RlIHdoaWNoIGRvZXNuJ3QgZGVmaW5lIGFueSBnbG9iYWxzLiAgSXQncyBpbnNpZGUgYVxuLy8gZnVuY3Rpb24gYmVjYXVzZSB0cnkvY2F0Y2hlcyBkZW9wdGltaXplIGluIGNlcnRhaW4gZW5naW5lcy5cblxudmFyIGNhY2hlZFNldFRpbWVvdXQ7XG52YXIgY2FjaGVkQ2xlYXJUaW1lb3V0O1xuXG5mdW5jdGlvbiBkZWZhdWx0U2V0VGltb3V0KCkge1xuICAgIHRocm93IG5ldyBFcnJvcignc2V0VGltZW91dCBoYXMgbm90IGJlZW4gZGVmaW5lZCcpO1xufVxuZnVuY3Rpb24gZGVmYXVsdENsZWFyVGltZW91dCAoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQnKTtcbn1cbihmdW5jdGlvbiAoKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBzZXRUaW1lb3V0ID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gc2V0VGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBkZWZhdWx0U2V0VGltb3V0O1xuICAgICAgICB9XG4gICAgfSBjYXRjaCAoZSkge1xuICAgICAgICBjYWNoZWRTZXRUaW1lb3V0ID0gZGVmYXVsdFNldFRpbW91dDtcbiAgICB9XG4gICAgdHJ5IHtcbiAgICAgICAgaWYgKHR5cGVvZiBjbGVhclRpbWVvdXQgPT09ICdmdW5jdGlvbicpIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGNsZWFyVGltZW91dDtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgICAgIH1cbiAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIGNhY2hlZENsZWFyVGltZW91dCA9IGRlZmF1bHRDbGVhclRpbWVvdXQ7XG4gICAgfVxufSAoKSlcbmZ1bmN0aW9uIHJ1blRpbWVvdXQoZnVuKSB7XG4gICAgaWYgKGNhY2hlZFNldFRpbWVvdXQgPT09IHNldFRpbWVvdXQpIHtcbiAgICAgICAgLy9ub3JtYWwgZW52aXJvbWVudHMgaW4gc2FuZSBzaXR1YXRpb25zXG4gICAgICAgIHJldHVybiBzZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfVxuICAgIC8vIGlmIHNldFRpbWVvdXQgd2Fzbid0IGF2YWlsYWJsZSBidXQgd2FzIGxhdHRlciBkZWZpbmVkXG4gICAgaWYgKChjYWNoZWRTZXRUaW1lb3V0ID09PSBkZWZhdWx0U2V0VGltb3V0IHx8ICFjYWNoZWRTZXRUaW1lb3V0KSAmJiBzZXRUaW1lb3V0KSB7XG4gICAgICAgIGNhY2hlZFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICAgICAgICByZXR1cm4gc2V0VGltZW91dChmdW4sIDApO1xuICAgIH1cbiAgICB0cnkge1xuICAgICAgICAvLyB3aGVuIHdoZW4gc29tZWJvZHkgaGFzIHNjcmV3ZWQgd2l0aCBzZXRUaW1lb3V0IGJ1dCBubyBJLkUuIG1hZGRuZXNzXG4gICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0KGZ1biwgMCk7XG4gICAgfSBjYXRjaChlKXtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIC8vIFdoZW4gd2UgYXJlIGluIEkuRS4gYnV0IHRoZSBzY3JpcHQgaGFzIGJlZW4gZXZhbGVkIHNvIEkuRS4gZG9lc24ndCB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZFNldFRpbWVvdXQuY2FsbChudWxsLCBmdW4sIDApO1xuICAgICAgICB9IGNhdGNoKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3JcbiAgICAgICAgICAgIHJldHVybiBjYWNoZWRTZXRUaW1lb3V0LmNhbGwodGhpcywgZnVuLCAwKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG59XG5mdW5jdGlvbiBydW5DbGVhclRpbWVvdXQobWFya2VyKSB7XG4gICAgaWYgKGNhY2hlZENsZWFyVGltZW91dCA9PT0gY2xlYXJUaW1lb3V0KSB7XG4gICAgICAgIC8vbm9ybWFsIGVudmlyb21lbnRzIGluIHNhbmUgc2l0dWF0aW9uc1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIC8vIGlmIGNsZWFyVGltZW91dCB3YXNuJ3QgYXZhaWxhYmxlIGJ1dCB3YXMgbGF0dGVyIGRlZmluZWRcbiAgICBpZiAoKGNhY2hlZENsZWFyVGltZW91dCA9PT0gZGVmYXVsdENsZWFyVGltZW91dCB8fCAhY2FjaGVkQ2xlYXJUaW1lb3V0KSAmJiBjbGVhclRpbWVvdXQpIHtcbiAgICAgICAgY2FjaGVkQ2xlYXJUaW1lb3V0ID0gY2xlYXJUaW1lb3V0O1xuICAgICAgICByZXR1cm4gY2xlYXJUaW1lb3V0KG1hcmtlcik7XG4gICAgfVxuICAgIHRyeSB7XG4gICAgICAgIC8vIHdoZW4gd2hlbiBzb21lYm9keSBoYXMgc2NyZXdlZCB3aXRoIHNldFRpbWVvdXQgYnV0IG5vIEkuRS4gbWFkZG5lc3NcbiAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dChtYXJrZXIpO1xuICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgLy8gV2hlbiB3ZSBhcmUgaW4gSS5FLiBidXQgdGhlIHNjcmlwdCBoYXMgYmVlbiBldmFsZWQgc28gSS5FLiBkb2Vzbid0ICB0cnVzdCB0aGUgZ2xvYmFsIG9iamVjdCB3aGVuIGNhbGxlZCBub3JtYWxseVxuICAgICAgICAgICAgcmV0dXJuIGNhY2hlZENsZWFyVGltZW91dC5jYWxsKG51bGwsIG1hcmtlcik7XG4gICAgICAgIH0gY2F0Y2ggKGUpe1xuICAgICAgICAgICAgLy8gc2FtZSBhcyBhYm92ZSBidXQgd2hlbiBpdCdzIGEgdmVyc2lvbiBvZiBJLkUuIHRoYXQgbXVzdCBoYXZlIHRoZSBnbG9iYWwgb2JqZWN0IGZvciAndGhpcycsIGhvcGZ1bGx5IG91ciBjb250ZXh0IGNvcnJlY3Qgb3RoZXJ3aXNlIGl0IHdpbGwgdGhyb3cgYSBnbG9iYWwgZXJyb3IuXG4gICAgICAgICAgICAvLyBTb21lIHZlcnNpb25zIG9mIEkuRS4gaGF2ZSBkaWZmZXJlbnQgcnVsZXMgZm9yIGNsZWFyVGltZW91dCB2cyBzZXRUaW1lb3V0XG4gICAgICAgICAgICByZXR1cm4gY2FjaGVkQ2xlYXJUaW1lb3V0LmNhbGwodGhpcywgbWFya2VyKTtcbiAgICAgICAgfVxuICAgIH1cblxuXG5cbn1cbnZhciBxdWV1ZSA9IFtdO1xudmFyIGRyYWluaW5nID0gZmFsc2U7XG52YXIgY3VycmVudFF1ZXVlO1xudmFyIHF1ZXVlSW5kZXggPSAtMTtcblxuZnVuY3Rpb24gY2xlYW5VcE5leHRUaWNrKCkge1xuICAgIGlmICghZHJhaW5pbmcgfHwgIWN1cnJlbnRRdWV1ZSkge1xuICAgICAgICByZXR1cm47XG4gICAgfVxuICAgIGRyYWluaW5nID0gZmFsc2U7XG4gICAgaWYgKGN1cnJlbnRRdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgcXVldWUgPSBjdXJyZW50UXVldWUuY29uY2F0KHF1ZXVlKTtcbiAgICB9IGVsc2Uge1xuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgfVxuICAgIGlmIChxdWV1ZS5sZW5ndGgpIHtcbiAgICAgICAgZHJhaW5RdWV1ZSgpO1xuICAgIH1cbn1cblxuZnVuY3Rpb24gZHJhaW5RdWV1ZSgpIHtcbiAgICBpZiAoZHJhaW5pbmcpIHtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICB2YXIgdGltZW91dCA9IHJ1blRpbWVvdXQoY2xlYW5VcE5leHRUaWNrKTtcbiAgICBkcmFpbmluZyA9IHRydWU7XG5cbiAgICB2YXIgbGVuID0gcXVldWUubGVuZ3RoO1xuICAgIHdoaWxlKGxlbikge1xuICAgICAgICBjdXJyZW50UXVldWUgPSBxdWV1ZTtcbiAgICAgICAgcXVldWUgPSBbXTtcbiAgICAgICAgd2hpbGUgKCsrcXVldWVJbmRleCA8IGxlbikge1xuICAgICAgICAgICAgaWYgKGN1cnJlbnRRdWV1ZSkge1xuICAgICAgICAgICAgICAgIGN1cnJlbnRRdWV1ZVtxdWV1ZUluZGV4XS5ydW4oKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBxdWV1ZUluZGV4ID0gLTE7XG4gICAgICAgIGxlbiA9IHF1ZXVlLmxlbmd0aDtcbiAgICB9XG4gICAgY3VycmVudFF1ZXVlID0gbnVsbDtcbiAgICBkcmFpbmluZyA9IGZhbHNlO1xuICAgIHJ1bkNsZWFyVGltZW91dCh0aW1lb3V0KTtcbn1cblxucHJvY2Vzcy5uZXh0VGljayA9IGZ1bmN0aW9uIChmdW4pIHtcbiAgICB2YXIgYXJncyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoIC0gMSk7XG4gICAgaWYgKGFyZ3VtZW50cy5sZW5ndGggPiAxKSB7XG4gICAgICAgIGZvciAodmFyIGkgPSAxOyBpIDwgYXJndW1lbnRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBhcmdzW2kgLSAxXSA9IGFyZ3VtZW50c1tpXTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBxdWV1ZS5wdXNoKG5ldyBJdGVtKGZ1biwgYXJncykpO1xuICAgIGlmIChxdWV1ZS5sZW5ndGggPT09IDEgJiYgIWRyYWluaW5nKSB7XG4gICAgICAgIHJ1blRpbWVvdXQoZHJhaW5RdWV1ZSk7XG4gICAgfVxufTtcblxuLy8gdjggbGlrZXMgcHJlZGljdGlibGUgb2JqZWN0c1xuZnVuY3Rpb24gSXRlbShmdW4sIGFycmF5KSB7XG4gICAgdGhpcy5mdW4gPSBmdW47XG4gICAgdGhpcy5hcnJheSA9IGFycmF5O1xufVxuSXRlbS5wcm90b3R5cGUucnVuID0gZnVuY3Rpb24gKCkge1xuICAgIHRoaXMuZnVuLmFwcGx5KG51bGwsIHRoaXMuYXJyYXkpO1xufTtcbnByb2Nlc3MudGl0bGUgPSAnYnJvd3Nlcic7XG5wcm9jZXNzLmJyb3dzZXIgPSB0cnVlO1xucHJvY2Vzcy5lbnYgPSB7fTtcbnByb2Nlc3MuYXJndiA9IFtdO1xucHJvY2Vzcy52ZXJzaW9uID0gJyc7IC8vIGVtcHR5IHN0cmluZyB0byBhdm9pZCByZWdleHAgaXNzdWVzXG5wcm9jZXNzLnZlcnNpb25zID0ge307XG5cbmZ1bmN0aW9uIG5vb3AoKSB7fVxuXG5wcm9jZXNzLm9uID0gbm9vcDtcbnByb2Nlc3MuYWRkTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5vbmNlID0gbm9vcDtcbnByb2Nlc3Mub2ZmID0gbm9vcDtcbnByb2Nlc3MucmVtb3ZlTGlzdGVuZXIgPSBub29wO1xucHJvY2Vzcy5yZW1vdmVBbGxMaXN0ZW5lcnMgPSBub29wO1xucHJvY2Vzcy5lbWl0ID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZExpc3RlbmVyID0gbm9vcDtcbnByb2Nlc3MucHJlcGVuZE9uY2VMaXN0ZW5lciA9IG5vb3A7XG5cbnByb2Nlc3MubGlzdGVuZXJzID0gZnVuY3Rpb24gKG5hbWUpIHsgcmV0dXJuIFtdIH1cblxucHJvY2Vzcy5iaW5kaW5nID0gZnVuY3Rpb24gKG5hbWUpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkJyk7XG59O1xuXG5wcm9jZXNzLmN3ZCA9IGZ1bmN0aW9uICgpIHsgcmV0dXJuICcvJyB9O1xucHJvY2Vzcy5jaGRpciA9IGZ1bmN0aW9uIChkaXIpIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3Byb2Nlc3MuY2hkaXIgaXMgbm90IHN1cHBvcnRlZCcpO1xufTtcbnByb2Nlc3MudW1hc2sgPSBmdW5jdGlvbigpIHsgcmV0dXJuIDA7IH07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vcHJvY2Vzcy9icm93c2VyLmpzXG4vLyBtb2R1bGUgaWQgPSAxM1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZztcclxuXHJcbi8vIFRoaXMgd29ya3MgaW4gbm9uLXN0cmljdCBtb2RlXHJcbmcgPSAoZnVuY3Rpb24oKSB7XHJcblx0cmV0dXJuIHRoaXM7XHJcbn0pKCk7XHJcblxyXG50cnkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgZXZhbCBpcyBhbGxvd2VkIChzZWUgQ1NQKVxyXG5cdGcgPSBnIHx8IEZ1bmN0aW9uKFwicmV0dXJuIHRoaXNcIikoKSB8fCAoMSxldmFsKShcInRoaXNcIik7XHJcbn0gY2F0Y2goZSkge1xyXG5cdC8vIFRoaXMgd29ya3MgaWYgdGhlIHdpbmRvdyByZWZlcmVuY2UgaXMgYXZhaWxhYmxlXHJcblx0aWYodHlwZW9mIHdpbmRvdyA9PT0gXCJvYmplY3RcIilcclxuXHRcdGcgPSB3aW5kb3c7XHJcbn1cclxuXHJcbi8vIGcgY2FuIHN0aWxsIGJlIHVuZGVmaW5lZCwgYnV0IG5vdGhpbmcgdG8gZG8gYWJvdXQgaXQuLi5cclxuLy8gV2UgcmV0dXJuIHVuZGVmaW5lZCwgaW5zdGVhZCBvZiBub3RoaW5nIGhlcmUsIHNvIGl0J3NcclxuLy8gZWFzaWVyIHRvIGhhbmRsZSB0aGlzIGNhc2UuIGlmKCFnbG9iYWwpIHsgLi4ufVxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBnO1xyXG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAod2VicGFjaykvYnVpbGRpbi9nbG9iYWwuanNcbi8vIG1vZHVsZSBpZCA9IDE0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImltcG9ydCBnZXRBcGlVcmxzIGZyb20gJy4vZ2V0QXBpVXJscyc7XG5pbXBvcnQgcmVxdWVzdCBmcm9tICcuLi9yZXF1ZXN0JztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBAcGFyYW0gdHhfaWRcbiAqIEBwYXJhbSBBUElfUEFUSFxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRTdGF0dXModHhfaWQsIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ3N0YXR1c2VzJ10sIHtcbiAgICAgICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICAgICAgdHhfaWRcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0U3RhdHVzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eElkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0VHJhbnNhY3Rpb24odHhJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICB0eElkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vZ2V0VHJhbnNhY3Rpb24uanMiLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlSW5wdXRUZW1wbGF0ZShwdWJsaWNLZXlzID0gW10sIGZ1bGZpbGxzID0gbnVsbCwgZnVsZmlsbG1lbnQgPSBudWxsKSB7XG4gICAgcmV0dXJuIHtcbiAgICAgICAgZnVsZmlsbG1lbnQsXG4gICAgICAgIGZ1bGZpbGxzLFxuICAgICAgICAnb3duZXJzX2JlZm9yZSc6IHB1YmxpY0tleXMsXG4gICAgfTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUlucHV0VGVtcGxhdGUuanMiLCJ2YXIgY2xvbmUgPSAoZnVuY3Rpb24oKSB7XG4ndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIF9pbnN0YW5jZW9mKG9iaiwgdHlwZSkge1xuICByZXR1cm4gdHlwZSAhPSBudWxsICYmIG9iaiBpbnN0YW5jZW9mIHR5cGU7XG59XG5cbnZhciBuYXRpdmVNYXA7XG50cnkge1xuICBuYXRpdmVNYXAgPSBNYXA7XG59IGNhdGNoKF8pIHtcbiAgLy8gbWF5YmUgYSByZWZlcmVuY2UgZXJyb3IgYmVjYXVzZSBubyBgTWFwYC4gR2l2ZSBpdCBhIGR1bW15IHZhbHVlIHRoYXQgbm9cbiAgLy8gdmFsdWUgd2lsbCBldmVyIGJlIGFuIGluc3RhbmNlb2YuXG4gIG5hdGl2ZU1hcCA9IGZ1bmN0aW9uKCkge307XG59XG5cbnZhciBuYXRpdmVTZXQ7XG50cnkge1xuICBuYXRpdmVTZXQgPSBTZXQ7XG59IGNhdGNoKF8pIHtcbiAgbmF0aXZlU2V0ID0gZnVuY3Rpb24oKSB7fTtcbn1cblxudmFyIG5hdGl2ZVByb21pc2U7XG50cnkge1xuICBuYXRpdmVQcm9taXNlID0gUHJvbWlzZTtcbn0gY2F0Y2goXykge1xuICBuYXRpdmVQcm9taXNlID0gZnVuY3Rpb24oKSB7fTtcbn1cblxuLyoqXG4gKiBDbG9uZXMgKGNvcGllcykgYW4gT2JqZWN0IHVzaW5nIGRlZXAgY29weWluZy5cbiAqXG4gKiBUaGlzIGZ1bmN0aW9uIHN1cHBvcnRzIGNpcmN1bGFyIHJlZmVyZW5jZXMgYnkgZGVmYXVsdCwgYnV0IGlmIHlvdSBhcmUgY2VydGFpblxuICogdGhlcmUgYXJlIG5vIGNpcmN1bGFyIHJlZmVyZW5jZXMgaW4geW91ciBvYmplY3QsIHlvdSBjYW4gc2F2ZSBzb21lIENQVSB0aW1lXG4gKiBieSBjYWxsaW5nIGNsb25lKG9iaiwgZmFsc2UpLlxuICpcbiAqIENhdXRpb246IGlmIGBjaXJjdWxhcmAgaXMgZmFsc2UgYW5kIGBwYXJlbnRgIGNvbnRhaW5zIGNpcmN1bGFyIHJlZmVyZW5jZXMsXG4gKiB5b3VyIHByb2dyYW0gbWF5IGVudGVyIGFuIGluZmluaXRlIGxvb3AgYW5kIGNyYXNoLlxuICpcbiAqIEBwYXJhbSBgcGFyZW50YCAtIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkXG4gKiBAcGFyYW0gYGNpcmN1bGFyYCAtIHNldCB0byB0cnVlIGlmIHRoZSBvYmplY3QgdG8gYmUgY2xvbmVkIG1heSBjb250YWluXG4gKiAgICBjaXJjdWxhciByZWZlcmVuY2VzLiAob3B0aW9uYWwgLSB0cnVlIGJ5IGRlZmF1bHQpXG4gKiBAcGFyYW0gYGRlcHRoYCAtIHNldCB0byBhIG51bWJlciBpZiB0aGUgb2JqZWN0IGlzIG9ubHkgdG8gYmUgY2xvbmVkIHRvXG4gKiAgICBhIHBhcnRpY3VsYXIgZGVwdGguIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIEluZmluaXR5KVxuICogQHBhcmFtIGBwcm90b3R5cGVgIC0gc2V0cyB0aGUgcHJvdG90eXBlIHRvIGJlIHVzZWQgd2hlbiBjbG9uaW5nIGFuIG9iamVjdC5cbiAqICAgIChvcHRpb25hbCAtIGRlZmF1bHRzIHRvIHBhcmVudCBwcm90b3R5cGUpLlxuICogQHBhcmFtIGBpbmNsdWRlTm9uRW51bWVyYWJsZWAgLSBzZXQgdG8gdHJ1ZSBpZiB0aGUgbm9uLWVudW1lcmFibGUgcHJvcGVydGllc1xuICogICAgc2hvdWxkIGJlIGNsb25lZCBhcyB3ZWxsLiBOb24tZW51bWVyYWJsZSBwcm9wZXJ0aWVzIG9uIHRoZSBwcm90b3R5cGVcbiAqICAgIGNoYWluIHdpbGwgYmUgaWdub3JlZC4gKG9wdGlvbmFsIC0gZmFsc2UgYnkgZGVmYXVsdClcbiovXG5mdW5jdGlvbiBjbG9uZShwYXJlbnQsIGNpcmN1bGFyLCBkZXB0aCwgcHJvdG90eXBlLCBpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICBpZiAodHlwZW9mIGNpcmN1bGFyID09PSAnb2JqZWN0Jykge1xuICAgIGRlcHRoID0gY2lyY3VsYXIuZGVwdGg7XG4gICAgcHJvdG90eXBlID0gY2lyY3VsYXIucHJvdG90eXBlO1xuICAgIGluY2x1ZGVOb25FbnVtZXJhYmxlID0gY2lyY3VsYXIuaW5jbHVkZU5vbkVudW1lcmFibGU7XG4gICAgY2lyY3VsYXIgPSBjaXJjdWxhci5jaXJjdWxhcjtcbiAgfVxuICAvLyBtYWludGFpbiB0d28gYXJyYXlzIGZvciBjaXJjdWxhciByZWZlcmVuY2VzLCB3aGVyZSBjb3JyZXNwb25kaW5nIHBhcmVudHNcbiAgLy8gYW5kIGNoaWxkcmVuIGhhdmUgdGhlIHNhbWUgaW5kZXhcbiAgdmFyIGFsbFBhcmVudHMgPSBbXTtcbiAgdmFyIGFsbENoaWxkcmVuID0gW107XG5cbiAgdmFyIHVzZUJ1ZmZlciA9IHR5cGVvZiBCdWZmZXIgIT0gJ3VuZGVmaW5lZCc7XG5cbiAgaWYgKHR5cGVvZiBjaXJjdWxhciA9PSAndW5kZWZpbmVkJylcbiAgICBjaXJjdWxhciA9IHRydWU7XG5cbiAgaWYgKHR5cGVvZiBkZXB0aCA9PSAndW5kZWZpbmVkJylcbiAgICBkZXB0aCA9IEluZmluaXR5O1xuXG4gIC8vIHJlY3Vyc2UgdGhpcyBmdW5jdGlvbiBzbyB3ZSBkb24ndCByZXNldCBhbGxQYXJlbnRzIGFuZCBhbGxDaGlsZHJlblxuICBmdW5jdGlvbiBfY2xvbmUocGFyZW50LCBkZXB0aCkge1xuICAgIC8vIGNsb25pbmcgbnVsbCBhbHdheXMgcmV0dXJucyBudWxsXG4gICAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICAgIHJldHVybiBudWxsO1xuXG4gICAgaWYgKGRlcHRoID09PSAwKVxuICAgICAgcmV0dXJuIHBhcmVudDtcblxuICAgIHZhciBjaGlsZDtcbiAgICB2YXIgcHJvdG87XG4gICAgaWYgKHR5cGVvZiBwYXJlbnQgIT0gJ29iamVjdCcpIHtcbiAgICAgIHJldHVybiBwYXJlbnQ7XG4gICAgfVxuXG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlTWFwKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlTWFwKCk7XG4gICAgfSBlbHNlIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZVNldCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IG5hdGl2ZVNldCgpO1xuICAgIH0gZWxzZSBpZiAoX2luc3RhbmNlb2YocGFyZW50LCBuYXRpdmVQcm9taXNlKSkge1xuICAgICAgY2hpbGQgPSBuZXcgbmF0aXZlUHJvbWlzZShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIHBhcmVudC50aGVuKGZ1bmN0aW9uKHZhbHVlKSB7XG4gICAgICAgICAgcmVzb2x2ZShfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSkpO1xuICAgICAgICB9LCBmdW5jdGlvbihlcnIpIHtcbiAgICAgICAgICByZWplY3QoX2Nsb25lKGVyciwgZGVwdGggLSAxKSk7XG4gICAgICAgIH0pO1xuICAgICAgfSk7XG4gICAgfSBlbHNlIGlmIChjbG9uZS5fX2lzQXJyYXkocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBbXTtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNSZWdFeHAocGFyZW50KSkge1xuICAgICAgY2hpbGQgPSBuZXcgUmVnRXhwKHBhcmVudC5zb3VyY2UsIF9fZ2V0UmVnRXhwRmxhZ3MocGFyZW50KSk7XG4gICAgICBpZiAocGFyZW50Lmxhc3RJbmRleCkgY2hpbGQubGFzdEluZGV4ID0gcGFyZW50Lmxhc3RJbmRleDtcbiAgICB9IGVsc2UgaWYgKGNsb25lLl9faXNEYXRlKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IERhdGUocGFyZW50LmdldFRpbWUoKSk7XG4gICAgfSBlbHNlIGlmICh1c2VCdWZmZXIgJiYgQnVmZmVyLmlzQnVmZmVyKHBhcmVudCkpIHtcbiAgICAgIGNoaWxkID0gbmV3IEJ1ZmZlcihwYXJlbnQubGVuZ3RoKTtcbiAgICAgIHBhcmVudC5jb3B5KGNoaWxkKTtcbiAgICAgIHJldHVybiBjaGlsZDtcbiAgICB9IGVsc2UgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgRXJyb3IpKSB7XG4gICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocGFyZW50KTtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHR5cGVvZiBwcm90b3R5cGUgPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgcHJvdG8gPSBPYmplY3QuZ2V0UHJvdG90eXBlT2YocGFyZW50KTtcbiAgICAgICAgY2hpbGQgPSBPYmplY3QuY3JlYXRlKHByb3RvKTtcbiAgICAgIH1cbiAgICAgIGVsc2Uge1xuICAgICAgICBjaGlsZCA9IE9iamVjdC5jcmVhdGUocHJvdG90eXBlKTtcbiAgICAgICAgcHJvdG8gPSBwcm90b3R5cGU7XG4gICAgICB9XG4gICAgfVxuXG4gICAgaWYgKGNpcmN1bGFyKSB7XG4gICAgICB2YXIgaW5kZXggPSBhbGxQYXJlbnRzLmluZGV4T2YocGFyZW50KTtcblxuICAgICAgaWYgKGluZGV4ICE9IC0xKSB7XG4gICAgICAgIHJldHVybiBhbGxDaGlsZHJlbltpbmRleF07XG4gICAgICB9XG4gICAgICBhbGxQYXJlbnRzLnB1c2gocGFyZW50KTtcbiAgICAgIGFsbENoaWxkcmVuLnB1c2goY2hpbGQpO1xuICAgIH1cblxuICAgIGlmIChfaW5zdGFuY2VvZihwYXJlbnQsIG5hdGl2ZU1hcCkpIHtcbiAgICAgIHBhcmVudC5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBrZXkpIHtcbiAgICAgICAgdmFyIGtleUNoaWxkID0gX2Nsb25lKGtleSwgZGVwdGggLSAxKTtcbiAgICAgICAgdmFyIHZhbHVlQ2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLnNldChrZXlDaGlsZCwgdmFsdWVDaGlsZCk7XG4gICAgICB9KTtcbiAgICB9XG4gICAgaWYgKF9pbnN0YW5jZW9mKHBhcmVudCwgbmF0aXZlU2V0KSkge1xuICAgICAgcGFyZW50LmZvckVhY2goZnVuY3Rpb24odmFsdWUpIHtcbiAgICAgICAgdmFyIGVudHJ5Q2hpbGQgPSBfY2xvbmUodmFsdWUsIGRlcHRoIC0gMSk7XG4gICAgICAgIGNoaWxkLmFkZChlbnRyeUNoaWxkKTtcbiAgICAgIH0pO1xuICAgIH1cblxuICAgIGZvciAodmFyIGkgaW4gcGFyZW50KSB7XG4gICAgICB2YXIgYXR0cnM7XG4gICAgICBpZiAocHJvdG8pIHtcbiAgICAgICAgYXR0cnMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLCBpKTtcbiAgICAgIH1cblxuICAgICAgaWYgKGF0dHJzICYmIGF0dHJzLnNldCA9PSBudWxsKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgY2hpbGRbaV0gPSBfY2xvbmUocGFyZW50W2ldLCBkZXB0aCAtIDEpO1xuICAgIH1cblxuICAgIGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlTeW1ib2xzKSB7XG4gICAgICB2YXIgc3ltYm9scyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuICAgICAgICAvLyBEb24ndCBuZWVkIHRvIHdvcnJ5IGFib3V0IGNsb25pbmcgYSBzeW1ib2wgYmVjYXVzZSBpdCBpcyBhIHByaW1pdGl2ZSxcbiAgICAgICAgLy8gbGlrZSBhIG51bWJlciBvciBzdHJpbmcuXG4gICAgICAgIHZhciBzeW1ib2wgPSBzeW1ib2xzW2ldO1xuICAgICAgICB2YXIgZGVzY3JpcHRvciA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IocGFyZW50LCBzeW1ib2wpO1xuICAgICAgICBpZiAoZGVzY3JpcHRvciAmJiAhZGVzY3JpcHRvci5lbnVtZXJhYmxlICYmICFpbmNsdWRlTm9uRW51bWVyYWJsZSkge1xuICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICB9XG4gICAgICAgIGNoaWxkW3N5bWJvbF0gPSBfY2xvbmUocGFyZW50W3N5bWJvbF0sIGRlcHRoIC0gMSk7XG4gICAgICAgIGlmICghZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBzeW1ib2wsIHtcbiAgICAgICAgICAgIGVudW1lcmFibGU6IGZhbHNlXG4gICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoaW5jbHVkZU5vbkVudW1lcmFibGUpIHtcbiAgICAgIHZhciBhbGxQcm9wZXJ0eU5hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMocGFyZW50KTtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYWxsUHJvcGVydHlOYW1lcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB2YXIgcHJvcGVydHlOYW1lID0gYWxsUHJvcGVydHlOYW1lc1tpXTtcbiAgICAgICAgdmFyIGRlc2NyaXB0b3IgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHBhcmVudCwgcHJvcGVydHlOYW1lKTtcbiAgICAgICAgaWYgKGRlc2NyaXB0b3IgJiYgZGVzY3JpcHRvci5lbnVtZXJhYmxlKSB7XG4gICAgICAgICAgY29udGludWU7XG4gICAgICAgIH1cbiAgICAgICAgY2hpbGRbcHJvcGVydHlOYW1lXSA9IF9jbG9uZShwYXJlbnRbcHJvcGVydHlOYW1lXSwgZGVwdGggLSAxKTtcbiAgICAgICAgT2JqZWN0LmRlZmluZVByb3BlcnR5KGNoaWxkLCBwcm9wZXJ0eU5hbWUsIHtcbiAgICAgICAgICBlbnVtZXJhYmxlOiBmYWxzZVxuICAgICAgICB9KTtcbiAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gY2hpbGQ7XG4gIH1cblxuICByZXR1cm4gX2Nsb25lKHBhcmVudCwgZGVwdGgpO1xufVxuXG4vKipcbiAqIFNpbXBsZSBmbGF0IGNsb25lIHVzaW5nIHByb3RvdHlwZSwgYWNjZXB0cyBvbmx5IG9iamVjdHMsIHVzZWZ1bGwgZm9yIHByb3BlcnR5XG4gKiBvdmVycmlkZSBvbiBGTEFUIGNvbmZpZ3VyYXRpb24gb2JqZWN0IChubyBuZXN0ZWQgcHJvcHMpLlxuICpcbiAqIFVTRSBXSVRIIENBVVRJT04hIFRoaXMgbWF5IG5vdCBiZWhhdmUgYXMgeW91IHdpc2ggaWYgeW91IGRvIG5vdCBrbm93IGhvdyB0aGlzXG4gKiB3b3Jrcy5cbiAqL1xuY2xvbmUuY2xvbmVQcm90b3R5cGUgPSBmdW5jdGlvbiBjbG9uZVByb3RvdHlwZShwYXJlbnQpIHtcbiAgaWYgKHBhcmVudCA9PT0gbnVsbClcbiAgICByZXR1cm4gbnVsbDtcblxuICB2YXIgYyA9IGZ1bmN0aW9uICgpIHt9O1xuICBjLnByb3RvdHlwZSA9IHBhcmVudDtcbiAgcmV0dXJuIG5ldyBjKCk7XG59O1xuXG4vLyBwcml2YXRlIHV0aWxpdHkgZnVuY3Rpb25zXG5cbmZ1bmN0aW9uIF9fb2JqVG9TdHIobykge1xuICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKG8pO1xufVxuY2xvbmUuX19vYmpUb1N0ciA9IF9fb2JqVG9TdHI7XG5cbmZ1bmN0aW9uIF9faXNEYXRlKG8pIHtcbiAgcmV0dXJuIHR5cGVvZiBvID09PSAnb2JqZWN0JyAmJiBfX29ialRvU3RyKG8pID09PSAnW29iamVjdCBEYXRlXSc7XG59XG5jbG9uZS5fX2lzRGF0ZSA9IF9faXNEYXRlO1xuXG5mdW5jdGlvbiBfX2lzQXJyYXkobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59XG5jbG9uZS5fX2lzQXJyYXkgPSBfX2lzQXJyYXk7XG5cbmZ1bmN0aW9uIF9faXNSZWdFeHAobykge1xuICByZXR1cm4gdHlwZW9mIG8gPT09ICdvYmplY3QnICYmIF9fb2JqVG9TdHIobykgPT09ICdbb2JqZWN0IFJlZ0V4cF0nO1xufVxuY2xvbmUuX19pc1JlZ0V4cCA9IF9faXNSZWdFeHA7XG5cbmZ1bmN0aW9uIF9fZ2V0UmVnRXhwRmxhZ3MocmUpIHtcbiAgdmFyIGZsYWdzID0gJyc7XG4gIGlmIChyZS5nbG9iYWwpIGZsYWdzICs9ICdnJztcbiAgaWYgKHJlLmlnbm9yZUNhc2UpIGZsYWdzICs9ICdpJztcbiAgaWYgKHJlLm11bHRpbGluZSkgZmxhZ3MgKz0gJ20nO1xuICByZXR1cm4gZmxhZ3M7XG59XG5jbG9uZS5fX2dldFJlZ0V4cEZsYWdzID0gX19nZXRSZWdFeHBGbGFncztcblxucmV0dXJuIGNsb25lO1xufSkoKTtcblxuaWYgKHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzKSB7XG4gIG1vZHVsZS5leHBvcnRzID0gY2xvbmU7XG59XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY2xvbmUvY2xvbmUuanNcbi8vIG1vZHVsZSBpZCA9IDE4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5PYmplY3QuZW50cmllcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL29iamVjdC9lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyBmYWxzZSAtPiBBcnJheSNpbmRleE9mXG4vLyB0cnVlICAtPiBBcnJheSNpbmNsdWRlc1xudmFyIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIHRvTGVuZ3RoICA9IHJlcXVpcmUoJy4vX3RvLWxlbmd0aCcpXG4gICwgdG9JbmRleCAgID0gcmVxdWlyZSgnLi9fdG8taW5kZXgnKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oSVNfSU5DTFVERVMpe1xuICByZXR1cm4gZnVuY3Rpb24oJHRoaXMsIGVsLCBmcm9tSW5kZXgpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoJHRoaXMpXG4gICAgICAsIGxlbmd0aCA9IHRvTGVuZ3RoKE8ubGVuZ3RoKVxuICAgICAgLCBpbmRleCAgPSB0b0luZGV4KGZyb21JbmRleCwgbGVuZ3RoKVxuICAgICAgLCB2YWx1ZTtcbiAgICAvLyBBcnJheSNpbmNsdWRlcyB1c2VzIFNhbWVWYWx1ZVplcm8gZXF1YWxpdHkgYWxnb3JpdGhtXG4gICAgaWYoSVNfSU5DTFVERVMgJiYgZWwgIT0gZWwpd2hpbGUobGVuZ3RoID4gaW5kZXgpe1xuICAgICAgdmFsdWUgPSBPW2luZGV4KytdO1xuICAgICAgaWYodmFsdWUgIT0gdmFsdWUpcmV0dXJuIHRydWU7XG4gICAgLy8gQXJyYXkjdG9JbmRleCBpZ25vcmVzIGhvbGVzLCBBcnJheSNpbmNsdWRlcyAtIG5vdFxuICAgIH0gZWxzZSBmb3IoO2xlbmd0aCA+IGluZGV4OyBpbmRleCsrKWlmKElTX0lOQ0xVREVTIHx8IGluZGV4IGluIE8pe1xuICAgICAgaWYoT1tpbmRleF0gPT09IGVsKXJldHVybiBJU19JTkNMVURFUyB8fCBpbmRleCB8fCAwO1xuICAgIH0gcmV0dXJuICFJU19JTkNMVURFUyAmJiAtMTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hcnJheS1pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gMjBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCAgICA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgY29yZSAgICAgID0gcmVxdWlyZSgnLi9fY29yZScpXG4gICwgY3R4ICAgICAgID0gcmVxdWlyZSgnLi9fY3R4JylcbiAgLCBoaWRlICAgICAgPSByZXF1aXJlKCcuL19oaWRlJylcbiAgLCBQUk9UT1RZUEUgPSAncHJvdG90eXBlJztcblxudmFyICRleHBvcnQgPSBmdW5jdGlvbih0eXBlLCBuYW1lLCBzb3VyY2Upe1xuICB2YXIgSVNfRk9SQ0VEID0gdHlwZSAmICRleHBvcnQuRlxuICAgICwgSVNfR0xPQkFMID0gdHlwZSAmICRleHBvcnQuR1xuICAgICwgSVNfU1RBVElDID0gdHlwZSAmICRleHBvcnQuU1xuICAgICwgSVNfUFJPVE8gID0gdHlwZSAmICRleHBvcnQuUFxuICAgICwgSVNfQklORCAgID0gdHlwZSAmICRleHBvcnQuQlxuICAgICwgSVNfV1JBUCAgID0gdHlwZSAmICRleHBvcnQuV1xuICAgICwgZXhwb3J0cyAgID0gSVNfR0xPQkFMID8gY29yZSA6IGNvcmVbbmFtZV0gfHwgKGNvcmVbbmFtZV0gPSB7fSlcbiAgICAsIGV4cFByb3RvICA9IGV4cG9ydHNbUFJPVE9UWVBFXVxuICAgICwgdGFyZ2V0ICAgID0gSVNfR0xPQkFMID8gZ2xvYmFsIDogSVNfU1RBVElDID8gZ2xvYmFsW25hbWVdIDogKGdsb2JhbFtuYW1lXSB8fCB7fSlbUFJPVE9UWVBFXVxuICAgICwga2V5LCBvd24sIG91dDtcbiAgaWYoSVNfR0xPQkFMKXNvdXJjZSA9IG5hbWU7XG4gIGZvcihrZXkgaW4gc291cmNlKXtcbiAgICAvLyBjb250YWlucyBpbiBuYXRpdmVcbiAgICBvd24gPSAhSVNfRk9SQ0VEICYmIHRhcmdldCAmJiB0YXJnZXRba2V5XSAhPT0gdW5kZWZpbmVkO1xuICAgIGlmKG93biAmJiBrZXkgaW4gZXhwb3J0cyljb250aW51ZTtcbiAgICAvLyBleHBvcnQgbmF0aXZlIG9yIHBhc3NlZFxuICAgIG91dCA9IG93biA/IHRhcmdldFtrZXldIDogc291cmNlW2tleV07XG4gICAgLy8gcHJldmVudCBnbG9iYWwgcG9sbHV0aW9uIGZvciBuYW1lc3BhY2VzXG4gICAgZXhwb3J0c1trZXldID0gSVNfR0xPQkFMICYmIHR5cGVvZiB0YXJnZXRba2V5XSAhPSAnZnVuY3Rpb24nID8gc291cmNlW2tleV1cbiAgICAvLyBiaW5kIHRpbWVycyB0byBnbG9iYWwgZm9yIGNhbGwgZnJvbSBleHBvcnQgY29udGV4dFxuICAgIDogSVNfQklORCAmJiBvd24gPyBjdHgob3V0LCBnbG9iYWwpXG4gICAgLy8gd3JhcCBnbG9iYWwgY29uc3RydWN0b3JzIGZvciBwcmV2ZW50IGNoYW5nZSB0aGVtIGluIGxpYnJhcnlcbiAgICA6IElTX1dSQVAgJiYgdGFyZ2V0W2tleV0gPT0gb3V0ID8gKGZ1bmN0aW9uKEMpe1xuICAgICAgdmFyIEYgPSBmdW5jdGlvbihhLCBiLCBjKXtcbiAgICAgICAgaWYodGhpcyBpbnN0YW5jZW9mIEMpe1xuICAgICAgICAgIHN3aXRjaChhcmd1bWVudHMubGVuZ3RoKXtcbiAgICAgICAgICAgIGNhc2UgMDogcmV0dXJuIG5ldyBDO1xuICAgICAgICAgICAgY2FzZSAxOiByZXR1cm4gbmV3IEMoYSk7XG4gICAgICAgICAgICBjYXNlIDI6IHJldHVybiBuZXcgQyhhLCBiKTtcbiAgICAgICAgICB9IHJldHVybiBuZXcgQyhhLCBiLCBjKTtcbiAgICAgICAgfSByZXR1cm4gQy5hcHBseSh0aGlzLCBhcmd1bWVudHMpO1xuICAgICAgfTtcbiAgICAgIEZbUFJPVE9UWVBFXSA9IENbUFJPVE9UWVBFXTtcbiAgICAgIHJldHVybiBGO1xuICAgIC8vIG1ha2Ugc3RhdGljIHZlcnNpb25zIGZvciBwcm90b3R5cGUgbWV0aG9kc1xuICAgIH0pKG91dCkgOiBJU19QUk9UTyAmJiB0eXBlb2Ygb3V0ID09ICdmdW5jdGlvbicgPyBjdHgoRnVuY3Rpb24uY2FsbCwgb3V0KSA6IG91dDtcbiAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUubWV0aG9kcy4lTkFNRSVcbiAgICBpZihJU19QUk9UTyl7XG4gICAgICAoZXhwb3J0cy52aXJ0dWFsIHx8IChleHBvcnRzLnZpcnR1YWwgPSB7fSkpW2tleV0gPSBvdXQ7XG4gICAgICAvLyBleHBvcnQgcHJvdG8gbWV0aG9kcyB0byBjb3JlLiVDT05TVFJVQ1RPUiUucHJvdG90eXBlLiVOQU1FJVxuICAgICAgaWYodHlwZSAmICRleHBvcnQuUiAmJiBleHBQcm90byAmJiAhZXhwUHJvdG9ba2V5XSloaWRlKGV4cFByb3RvLCBrZXksIG91dCk7XG4gICAgfVxuICB9XG59O1xuLy8gdHlwZSBiaXRtYXBcbiRleHBvcnQuRiA9IDE7ICAgLy8gZm9yY2VkXG4kZXhwb3J0LkcgPSAyOyAgIC8vIGdsb2JhbFxuJGV4cG9ydC5TID0gNDsgICAvLyBzdGF0aWNcbiRleHBvcnQuUCA9IDg7ICAgLy8gcHJvdG9cbiRleHBvcnQuQiA9IDE2OyAgLy8gYmluZFxuJGV4cG9ydC5XID0gMzI7ICAvLyB3cmFwXG4kZXhwb3J0LlUgPSA2NDsgIC8vIHNhZmVcbiRleHBvcnQuUiA9IDEyODsgLy8gcmVhbCBwcm90byBtZXRob2QgZm9yIGBsaWJyYXJ5YCBcbm1vZHVsZS5leHBvcnRzID0gJGV4cG9ydDtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2V4cG9ydC5qc1xuLy8gbW9kdWxlIGlkID0gMjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwibW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihleGVjKXtcbiAgdHJ5IHtcbiAgICByZXR1cm4gISFleGVjKCk7XG4gIH0gY2F0Y2goZSl7XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19mYWlscy5qc1xuLy8gbW9kdWxlIGlkID0gMjJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjQgVG9JbnRlZ2VyXG52YXIgY2VpbCAgPSBNYXRoLmNlaWxcbiAgLCBmbG9vciA9IE1hdGguZmxvb3I7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIGlzTmFOKGl0ID0gK2l0KSA/IDAgOiAoaXQgPiAwID8gZmxvb3IgOiBjZWlsKShpdCk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdG8taW50ZWdlci5qc1xuLy8gbW9kdWxlIGlkID0gMjNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyoqXHJcbiAqIFtqcy1zaGEzXXtAbGluayBodHRwczovL2dpdGh1Yi5jb20vZW1uMTc4L2pzLXNoYTN9XHJcbiAqXHJcbiAqIEB2ZXJzaW9uIDAuNS43XHJcbiAqIEBhdXRob3IgQ2hlbiwgWWktQ3l1YW4gW2VtbjE3OEBnbWFpbC5jb21dXHJcbiAqIEBjb3B5cmlnaHQgQ2hlbiwgWWktQ3l1YW4gMjAxNS0yMDE2XHJcbiAqIEBsaWNlbnNlIE1JVFxyXG4gKi9cclxuLypqc2xpbnQgYml0d2lzZTogdHJ1ZSAqL1xyXG4oZnVuY3Rpb24gKCkge1xyXG4gICd1c2Ugc3RyaWN0JztcclxuXHJcbiAgdmFyIHJvb3QgPSB0eXBlb2Ygd2luZG93ID09PSAnb2JqZWN0JyA/IHdpbmRvdyA6IHt9O1xyXG4gIHZhciBOT0RFX0pTID0gIXJvb3QuSlNfU0hBM19OT19OT0RFX0pTICYmIHR5cGVvZiBwcm9jZXNzID09PSAnb2JqZWN0JyAmJiBwcm9jZXNzLnZlcnNpb25zICYmIHByb2Nlc3MudmVyc2lvbnMubm9kZTtcclxuICBpZiAoTk9ERV9KUykge1xyXG4gICAgcm9vdCA9IGdsb2JhbDtcclxuICB9XHJcbiAgdmFyIENPTU1PTl9KUyA9ICFyb290LkpTX1NIQTNfTk9fQ09NTU9OX0pTICYmIHR5cGVvZiBtb2R1bGUgPT09ICdvYmplY3QnICYmIG1vZHVsZS5leHBvcnRzO1xyXG4gIHZhciBIRVhfQ0hBUlMgPSAnMDEyMzQ1Njc4OWFiY2RlZicuc3BsaXQoJycpO1xyXG4gIHZhciBTSEFLRV9QQURESU5HID0gWzMxLCA3OTM2LCAyMDMxNjE2LCA1MjAwOTM2OTZdO1xyXG4gIHZhciBLRUNDQUtfUEFERElORyA9IFsxLCAyNTYsIDY1NTM2LCAxNjc3NzIxNl07XHJcbiAgdmFyIFBBRERJTkcgPSBbNiwgMTUzNiwgMzkzMjE2LCAxMDA2NjMyOTZdO1xyXG4gIHZhciBTSElGVCA9IFswLCA4LCAxNiwgMjRdO1xyXG4gIHZhciBSQyA9IFsxLCAwLCAzMjg5OCwgMCwgMzI5MDYsIDIxNDc0ODM2NDgsIDIxNDc1MTY0MTYsIDIxNDc0ODM2NDgsIDMyOTA3LCAwLCAyMTQ3NDgzNjQ5LFxyXG4gICAgICAgICAgICAwLCAyMTQ3NTE2NTQ1LCAyMTQ3NDgzNjQ4LCAzMjc3NywgMjE0NzQ4MzY0OCwgMTM4LCAwLCAxMzYsIDAsIDIxNDc1MTY0MjUsIDAsXHJcbiAgICAgICAgICAgIDIxNDc0ODM2NTgsIDAsIDIxNDc1MTY1NTUsIDAsIDEzOSwgMjE0NzQ4MzY0OCwgMzI5MDUsIDIxNDc0ODM2NDgsIDMyNzcxLFxyXG4gICAgICAgICAgICAyMTQ3NDgzNjQ4LCAzMjc3MCwgMjE0NzQ4MzY0OCwgMTI4LCAyMTQ3NDgzNjQ4LCAzMjc3OCwgMCwgMjE0NzQ4MzY1OCwgMjE0NzQ4MzY0OCxcclxuICAgICAgICAgICAgMjE0NzUxNjU0NSwgMjE0NzQ4MzY0OCwgMzI4OTYsIDIxNDc0ODM2NDgsIDIxNDc0ODM2NDksIDAsIDIxNDc1MTY0MjQsIDIxNDc0ODM2NDhdO1xyXG4gIHZhciBCSVRTID0gWzIyNCwgMjU2LCAzODQsIDUxMl07XHJcbiAgdmFyIFNIQUtFX0JJVFMgPSBbMTI4LCAyNTZdO1xyXG4gIHZhciBPVVRQVVRfVFlQRVMgPSBbJ2hleCcsICdidWZmZXInLCAnYXJyYXlCdWZmZXInLCAnYXJyYXknXTtcclxuXHJcbiAgdmFyIGNyZWF0ZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgYml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZCA9IGZ1bmN0aW9uIChiaXRzLCBwYWRkaW5nLCBvdXRwdXRUeXBlKSB7XHJcbiAgICByZXR1cm4gZnVuY3Rpb24gKG1lc3NhZ2UsIG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cykudXBkYXRlKG1lc3NhZ2UpW291dHB1dFR5cGVdKCk7XHJcbiAgICB9O1xyXG4gIH07XHJcblxyXG4gIHZhciBjcmVhdGVNZXRob2QgPSBmdW5jdGlvbiAoYml0cywgcGFkZGluZykge1xyXG4gICAgdmFyIG1ldGhvZCA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICByZXR1cm4gbmV3IEtlY2NhayhiaXRzLCBwYWRkaW5nLCBiaXRzKTtcclxuICAgIH07XHJcbiAgICBtZXRob2QudXBkYXRlID0gZnVuY3Rpb24gKG1lc3NhZ2UpIHtcclxuICAgICAgcmV0dXJuIG1ldGhvZC5jcmVhdGUoKS51cGRhdGUobWVzc2FnZSk7XHJcbiAgICB9O1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBPVVRQVVRfVFlQRVMubGVuZ3RoOyArK2kpIHtcclxuICAgICAgdmFyIHR5cGUgPSBPVVRQVVRfVFlQRVNbaV07XHJcbiAgICAgIG1ldGhvZFt0eXBlXSA9IGNyZWF0ZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCB0eXBlKTtcclxuICAgIH1cclxuICAgIHJldHVybiBtZXRob2Q7XHJcbiAgfTtcclxuXHJcbiAgdmFyIGNyZWF0ZVNoYWtlTWV0aG9kID0gZnVuY3Rpb24gKGJpdHMsIHBhZGRpbmcpIHtcclxuICAgIHZhciBtZXRob2QgPSBjcmVhdGVTaGFrZU91dHB1dE1ldGhvZChiaXRzLCBwYWRkaW5nLCAnaGV4Jyk7XHJcbiAgICBtZXRob2QuY3JlYXRlID0gZnVuY3Rpb24gKG91dHB1dEJpdHMpIHtcclxuICAgICAgcmV0dXJuIG5ldyBLZWNjYWsoYml0cywgcGFkZGluZywgb3V0cHV0Qml0cyk7XHJcbiAgICB9O1xyXG4gICAgbWV0aG9kLnVwZGF0ZSA9IGZ1bmN0aW9uIChtZXNzYWdlLCBvdXRwdXRCaXRzKSB7XHJcbiAgICAgIHJldHVybiBtZXRob2QuY3JlYXRlKG91dHB1dEJpdHMpLnVwZGF0ZShtZXNzYWdlKTtcclxuICAgIH07XHJcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IE9VVFBVVF9UWVBFUy5sZW5ndGg7ICsraSkge1xyXG4gICAgICB2YXIgdHlwZSA9IE9VVFBVVF9UWVBFU1tpXTtcclxuICAgICAgbWV0aG9kW3R5cGVdID0gY3JlYXRlU2hha2VPdXRwdXRNZXRob2QoYml0cywgcGFkZGluZywgdHlwZSk7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gbWV0aG9kO1xyXG4gIH07XHJcblxyXG4gIHZhciBhbGdvcml0aG1zID0gW1xyXG4gICAge25hbWU6ICdrZWNjYWsnLCBwYWRkaW5nOiBLRUNDQUtfUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGEzJywgcGFkZGluZzogUEFERElORywgYml0czogQklUUywgY3JlYXRlTWV0aG9kOiBjcmVhdGVNZXRob2R9LFxyXG4gICAge25hbWU6ICdzaGFrZScsIHBhZGRpbmc6IFNIQUtFX1BBRERJTkcsIGJpdHM6IFNIQUtFX0JJVFMsIGNyZWF0ZU1ldGhvZDogY3JlYXRlU2hha2VNZXRob2R9XHJcbiAgXTtcclxuXHJcbiAgdmFyIG1ldGhvZHMgPSB7fSwgbWV0aG9kTmFtZXMgPSBbXTtcclxuXHJcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhbGdvcml0aG1zLmxlbmd0aDsgKytpKSB7XHJcbiAgICB2YXIgYWxnb3JpdGhtID0gYWxnb3JpdGhtc1tpXTtcclxuICAgIHZhciBiaXRzICA9IGFsZ29yaXRobS5iaXRzO1xyXG4gICAgZm9yICh2YXIgaiA9IDA7IGogPCBiaXRzLmxlbmd0aDsgKytqKSB7XHJcbiAgICAgIHZhciBtZXRob2ROYW1lID0gYWxnb3JpdGhtLm5hbWUgKydfJyArIGJpdHNbal07XHJcbiAgICAgIG1ldGhvZE5hbWVzLnB1c2gobWV0aG9kTmFtZSk7XHJcbiAgICAgIG1ldGhvZHNbbWV0aG9kTmFtZV0gPSBhbGdvcml0aG0uY3JlYXRlTWV0aG9kKGJpdHNbal0sIGFsZ29yaXRobS5wYWRkaW5nKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIEtlY2NhayhiaXRzLCBwYWRkaW5nLCBvdXRwdXRCaXRzKSB7XHJcbiAgICB0aGlzLmJsb2NrcyA9IFtdO1xyXG4gICAgdGhpcy5zID0gW107XHJcbiAgICB0aGlzLnBhZGRpbmcgPSBwYWRkaW5nO1xyXG4gICAgdGhpcy5vdXRwdXRCaXRzID0gb3V0cHV0Qml0cztcclxuICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgdGhpcy5ibG9jayA9IDA7XHJcbiAgICB0aGlzLnN0YXJ0ID0gMDtcclxuICAgIHRoaXMuYmxvY2tDb3VudCA9ICgxNjAwIC0gKGJpdHMgPDwgMSkpID4+IDU7XHJcbiAgICB0aGlzLmJ5dGVDb3VudCA9IHRoaXMuYmxvY2tDb3VudCA8PCAyO1xyXG4gICAgdGhpcy5vdXRwdXRCbG9ja3MgPSBvdXRwdXRCaXRzID4+IDU7XHJcbiAgICB0aGlzLmV4dHJhQnl0ZXMgPSAob3V0cHV0Qml0cyAmIDMxKSA+PiAzO1xyXG5cclxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNTA7ICsraSkge1xyXG4gICAgICB0aGlzLnNbaV0gPSAwO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbiAobWVzc2FnZSkge1xyXG4gICAgdmFyIG5vdFN0cmluZyA9IHR5cGVvZiBtZXNzYWdlICE9PSAnc3RyaW5nJztcclxuICAgIGlmIChub3RTdHJpbmcgJiYgbWVzc2FnZS5jb25zdHJ1Y3RvciA9PT0gQXJyYXlCdWZmZXIpIHtcclxuICAgICAgbWVzc2FnZSA9IG5ldyBVaW50OEFycmF5KG1lc3NhZ2UpO1xyXG4gICAgfVxyXG4gICAgdmFyIGxlbmd0aCA9IG1lc3NhZ2UubGVuZ3RoLCBibG9ja3MgPSB0aGlzLmJsb2NrcywgYnl0ZUNvdW50ID0gdGhpcy5ieXRlQ291bnQsXHJcbiAgICAgIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIGluZGV4ID0gMCwgcyA9IHRoaXMucywgaSwgY29kZTtcclxuXHJcbiAgICB3aGlsZSAoaW5kZXggPCBsZW5ndGgpIHtcclxuICAgICAgaWYgKHRoaXMucmVzZXQpIHtcclxuICAgICAgICB0aGlzLnJlc2V0ID0gZmFsc2U7XHJcbiAgICAgICAgYmxvY2tzWzBdID0gdGhpcy5ibG9jaztcclxuICAgICAgICBmb3IgKGkgPSAxOyBpIDwgYmxvY2tDb3VudCArIDE7ICsraSkge1xyXG4gICAgICAgICAgYmxvY2tzW2ldID0gMDtcclxuICAgICAgICB9XHJcbiAgICAgIH1cclxuICAgICAgaWYgKG5vdFN0cmluZykge1xyXG4gICAgICAgIGZvciAoaSA9IHRoaXMuc3RhcnQ7IGluZGV4IDwgbGVuZ3RoICYmIGkgPCBieXRlQ291bnQ7ICsraW5kZXgpIHtcclxuICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9IG1lc3NhZ2VbaW5kZXhdIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgIH1cclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBmb3IgKGkgPSB0aGlzLnN0YXJ0OyBpbmRleCA8IGxlbmd0aCAmJiBpIDwgYnl0ZUNvdW50OyArK2luZGV4KSB7XHJcbiAgICAgICAgICBjb2RlID0gbWVzc2FnZS5jaGFyQ29kZUF0KGluZGV4KTtcclxuICAgICAgICAgIGlmIChjb2RlIDwgMHg4MCkge1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSBjb2RlIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfSBlbHNlIGlmIChjb2RlIDwgMHg4MDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4YzAgfCAoY29kZSA+PiA2KSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKGNvZGUgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICB9IGVsc2UgaWYgKGNvZGUgPCAweGQ4MDAgfHwgY29kZSA+PSAweGUwMDApIHtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZTAgfCAoY29kZSA+PiAxMikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiA2KSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ODAgfCAoY29kZSAmIDB4M2YpKSA8PCBTSElGVFtpKysgJiAzXTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGNvZGUgPSAweDEwMDAwICsgKCgoY29kZSAmIDB4M2ZmKSA8PCAxMCkgfCAobWVzc2FnZS5jaGFyQ29kZUF0KCsraW5kZXgpICYgMHgzZmYpKTtcclxuICAgICAgICAgICAgYmxvY2tzW2kgPj4gMl0gfD0gKDB4ZjAgfCAoY29kZSA+PiAxOCkpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8ICgoY29kZSA+PiAxMikgJiAweDNmKSkgPDwgU0hJRlRbaSsrICYgM107XHJcbiAgICAgICAgICAgIGJsb2Nrc1tpID4+IDJdIHw9ICgweDgwIHwgKChjb2RlID4+IDYpICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgICBibG9ja3NbaSA+PiAyXSB8PSAoMHg4MCB8IChjb2RlICYgMHgzZikpIDw8IFNISUZUW2krKyAmIDNdO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICB0aGlzLmxhc3RCeXRlSW5kZXggPSBpO1xyXG4gICAgICBpZiAoaSA+PSBieXRlQ291bnQpIHtcclxuICAgICAgICB0aGlzLnN0YXJ0ID0gaSAtIGJ5dGVDb3VudDtcclxuICAgICAgICB0aGlzLmJsb2NrID0gYmxvY2tzW2Jsb2NrQ291bnRdO1xyXG4gICAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50OyArK2kpIHtcclxuICAgICAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIHRoaXMucmVzZXQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIHRoaXMuc3RhcnQgPSBpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICByZXR1cm4gdGhpcztcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmZpbmFsaXplID0gZnVuY3Rpb24gKCkge1xyXG4gICAgdmFyIGJsb2NrcyA9IHRoaXMuYmxvY2tzLCBpID0gdGhpcy5sYXN0Qnl0ZUluZGV4LCBibG9ja0NvdW50ID0gdGhpcy5ibG9ja0NvdW50LCBzID0gdGhpcy5zO1xyXG4gICAgYmxvY2tzW2kgPj4gMl0gfD0gdGhpcy5wYWRkaW5nW2kgJiAzXTtcclxuICAgIGlmICh0aGlzLmxhc3RCeXRlSW5kZXggPT09IHRoaXMuYnl0ZUNvdW50KSB7XHJcbiAgICAgIGJsb2Nrc1swXSA9IGJsb2Nrc1tibG9ja0NvdW50XTtcclxuICAgICAgZm9yIChpID0gMTsgaSA8IGJsb2NrQ291bnQgKyAxOyArK2kpIHtcclxuICAgICAgICBibG9ja3NbaV0gPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBibG9ja3NbYmxvY2tDb3VudCAtIDFdIHw9IDB4ODAwMDAwMDA7XHJcbiAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudDsgKytpKSB7XHJcbiAgICAgIHNbaV0gXj0gYmxvY2tzW2ldO1xyXG4gICAgfVxyXG4gICAgZihzKTtcclxuICB9O1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLnRvU3RyaW5nID0gS2VjY2FrLnByb3RvdHlwZS5oZXggPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBoZXggPSAnJywgYmxvY2s7XHJcbiAgICB3aGlsZSAoaiA8IG91dHB1dEJsb2Nrcykge1xyXG4gICAgICBmb3IgKGkgPSAwOyBpIDwgYmxvY2tDb3VudCAmJiBqIDwgb3V0cHV0QmxvY2tzOyArK2ksICsraikge1xyXG4gICAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiA0KSAmIDB4MEZdICsgSEVYX0NIQVJTW2Jsb2NrICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDEyKSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiA4KSAmIDB4MEZdICtcclxuICAgICAgICAgICAgICAgSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl0gK1xyXG4gICAgICAgICAgICAgICBIRVhfQ0hBUlNbKGJsb2NrID4+IDI4KSAmIDB4MEZdICsgSEVYX0NIQVJTWyhibG9jayA+PiAyNCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICAgIGkgPSAwO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBibG9jayA9IHNbaV07XHJcbiAgICAgIGlmIChleHRyYUJ5dGVzID4gMCkge1xyXG4gICAgICAgIGhleCArPSBIRVhfQ0hBUlNbKGJsb2NrID4+IDQpICYgMHgwRl0gKyBIRVhfQ0hBUlNbYmxvY2sgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAxMikgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gOCkgJiAweDBGXTtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDIpIHtcclxuICAgICAgICBoZXggKz0gSEVYX0NIQVJTWyhibG9jayA+PiAyMCkgJiAweDBGXSArIEhFWF9DSEFSU1soYmxvY2sgPj4gMTYpICYgMHgwRl07XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIHJldHVybiBoZXg7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uICgpIHtcclxuICAgIHRoaXMuZmluYWxpemUoKTtcclxuXHJcbiAgICB2YXIgYmxvY2tDb3VudCA9IHRoaXMuYmxvY2tDb3VudCwgcyA9IHRoaXMucywgb3V0cHV0QmxvY2tzID0gdGhpcy5vdXRwdXRCbG9ja3MsXHJcbiAgICAgICAgZXh0cmFCeXRlcyA9IHRoaXMuZXh0cmFCeXRlcywgaSA9IDAsIGogPSAwO1xyXG4gICAgdmFyIGJ5dGVzID0gdGhpcy5vdXRwdXRCaXRzID4+IDM7XHJcbiAgICB2YXIgYnVmZmVyO1xyXG4gICAgaWYgKGV4dHJhQnl0ZXMpIHtcclxuICAgICAgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKChvdXRwdXRCbG9ja3MgKyAxKSA8PCAyKTtcclxuICAgIH0gZWxzZSB7XHJcbiAgICAgIGJ1ZmZlciA9IG5ldyBBcnJheUJ1ZmZlcihieXRlcyk7XHJcbiAgICB9XHJcbiAgICB2YXIgYXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyKTtcclxuICAgIHdoaWxlIChqIDwgb3V0cHV0QmxvY2tzKSB7XHJcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBibG9ja0NvdW50ICYmIGogPCBvdXRwdXRCbG9ja3M7ICsraSwgKytqKSB7XHJcbiAgICAgICAgYXJyYXlbal0gPSBzW2ldO1xyXG4gICAgICB9XHJcbiAgICAgIGlmIChqICUgYmxvY2tDb3VudCA9PT0gMCkge1xyXG4gICAgICAgIGYocyk7XHJcbiAgICAgIH1cclxuICAgIH1cclxuICAgIGlmIChleHRyYUJ5dGVzKSB7XHJcbiAgICAgIGFycmF5W2ldID0gc1tpXTtcclxuICAgICAgYnVmZmVyID0gYnVmZmVyLnNsaWNlKDAsIGJ5dGVzKTtcclxuICAgIH1cclxuICAgIHJldHVybiBidWZmZXI7XHJcbiAgfTtcclxuXHJcbiAgS2VjY2FrLnByb3RvdHlwZS5idWZmZXIgPSBLZWNjYWsucHJvdG90eXBlLmFycmF5QnVmZmVyO1xyXG5cclxuICBLZWNjYWsucHJvdG90eXBlLmRpZ2VzdCA9IEtlY2Nhay5wcm90b3R5cGUuYXJyYXkgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICB0aGlzLmZpbmFsaXplKCk7XHJcblxyXG4gICAgdmFyIGJsb2NrQ291bnQgPSB0aGlzLmJsb2NrQ291bnQsIHMgPSB0aGlzLnMsIG91dHB1dEJsb2NrcyA9IHRoaXMub3V0cHV0QmxvY2tzLFxyXG4gICAgICAgIGV4dHJhQnl0ZXMgPSB0aGlzLmV4dHJhQnl0ZXMsIGkgPSAwLCBqID0gMDtcclxuICAgIHZhciBhcnJheSA9IFtdLCBvZmZzZXQsIGJsb2NrO1xyXG4gICAgd2hpbGUgKGogPCBvdXRwdXRCbG9ja3MpIHtcclxuICAgICAgZm9yIChpID0gMDsgaSA8IGJsb2NrQ291bnQgJiYgaiA8IG91dHB1dEJsb2NrczsgKytpLCArK2opIHtcclxuICAgICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgICAgYmxvY2sgPSBzW2ldO1xyXG4gICAgICAgIGFycmF5W29mZnNldF0gPSBibG9jayAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMV0gPSAoYmxvY2sgPj4gOCkgJiAweEZGO1xyXG4gICAgICAgIGFycmF5W29mZnNldCArIDJdID0gKGJsb2NrID4+IDE2KSAmIDB4RkY7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgM10gPSAoYmxvY2sgPj4gMjQpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoaiAlIGJsb2NrQ291bnQgPT09IDApIHtcclxuICAgICAgICBmKHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcbiAgICBpZiAoZXh0cmFCeXRlcykge1xyXG4gICAgICBvZmZzZXQgPSBqIDw8IDI7XHJcbiAgICAgIGJsb2NrID0gc1tpXTtcclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAwKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0XSA9IGJsb2NrICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgICBpZiAoZXh0cmFCeXRlcyA+IDEpIHtcclxuICAgICAgICBhcnJheVtvZmZzZXQgKyAxXSA9IChibG9jayA+PiA4KSAmIDB4RkY7XHJcbiAgICAgIH1cclxuICAgICAgaWYgKGV4dHJhQnl0ZXMgPiAyKSB7XHJcbiAgICAgICAgYXJyYXlbb2Zmc2V0ICsgMl0gPSAoYmxvY2sgPj4gMTYpICYgMHhGRjtcclxuICAgICAgfVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGFycmF5O1xyXG4gIH07XHJcblxyXG4gIHZhciBmID0gZnVuY3Rpb24gKHMpIHtcclxuICAgIHZhciBoLCBsLCBuLCBjMCwgYzEsIGMyLCBjMywgYzQsIGM1LCBjNiwgYzcsIGM4LCBjOSxcclxuICAgICAgICBiMCwgYjEsIGIyLCBiMywgYjQsIGI1LCBiNiwgYjcsIGI4LCBiOSwgYjEwLCBiMTEsIGIxMiwgYjEzLCBiMTQsIGIxNSwgYjE2LCBiMTcsXHJcbiAgICAgICAgYjE4LCBiMTksIGIyMCwgYjIxLCBiMjIsIGIyMywgYjI0LCBiMjUsIGIyNiwgYjI3LCBiMjgsIGIyOSwgYjMwLCBiMzEsIGIzMiwgYjMzLFxyXG4gICAgICAgIGIzNCwgYjM1LCBiMzYsIGIzNywgYjM4LCBiMzksIGI0MCwgYjQxLCBiNDIsIGI0MywgYjQ0LCBiNDUsIGI0NiwgYjQ3LCBiNDgsIGI0OTtcclxuICAgIGZvciAobiA9IDA7IG4gPCA0ODsgbiArPSAyKSB7XHJcbiAgICAgIGMwID0gc1swXSBeIHNbMTBdIF4gc1syMF0gXiBzWzMwXSBeIHNbNDBdO1xyXG4gICAgICBjMSA9IHNbMV0gXiBzWzExXSBeIHNbMjFdIF4gc1szMV0gXiBzWzQxXTtcclxuICAgICAgYzIgPSBzWzJdIF4gc1sxMl0gXiBzWzIyXSBeIHNbMzJdIF4gc1s0Ml07XHJcbiAgICAgIGMzID0gc1szXSBeIHNbMTNdIF4gc1syM10gXiBzWzMzXSBeIHNbNDNdO1xyXG4gICAgICBjNCA9IHNbNF0gXiBzWzE0XSBeIHNbMjRdIF4gc1szNF0gXiBzWzQ0XTtcclxuICAgICAgYzUgPSBzWzVdIF4gc1sxNV0gXiBzWzI1XSBeIHNbMzVdIF4gc1s0NV07XHJcbiAgICAgIGM2ID0gc1s2XSBeIHNbMTZdIF4gc1syNl0gXiBzWzM2XSBeIHNbNDZdO1xyXG4gICAgICBjNyA9IHNbN10gXiBzWzE3XSBeIHNbMjddIF4gc1szN10gXiBzWzQ3XTtcclxuICAgICAgYzggPSBzWzhdIF4gc1sxOF0gXiBzWzI4XSBeIHNbMzhdIF4gc1s0OF07XHJcbiAgICAgIGM5ID0gc1s5XSBeIHNbMTldIF4gc1syOV0gXiBzWzM5XSBeIHNbNDldO1xyXG5cclxuICAgICAgaCA9IGM4IF4gKChjMiA8PCAxKSB8IChjMyA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM5IF4gKChjMyA8PCAxKSB8IChjMiA+Pj4gMzEpKTtcclxuICAgICAgc1swXSBePSBoO1xyXG4gICAgICBzWzFdIF49IGw7XHJcbiAgICAgIHNbMTBdIF49IGg7XHJcbiAgICAgIHNbMTFdIF49IGw7XHJcbiAgICAgIHNbMjBdIF49IGg7XHJcbiAgICAgIHNbMjFdIF49IGw7XHJcbiAgICAgIHNbMzBdIF49IGg7XHJcbiAgICAgIHNbMzFdIF49IGw7XHJcbiAgICAgIHNbNDBdIF49IGg7XHJcbiAgICAgIHNbNDFdIF49IGw7XHJcbiAgICAgIGggPSBjMCBeICgoYzQgPDwgMSkgfCAoYzUgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjMSBeICgoYzUgPDwgMSkgfCAoYzQgPj4+IDMxKSk7XHJcbiAgICAgIHNbMl0gXj0gaDtcclxuICAgICAgc1szXSBePSBsO1xyXG4gICAgICBzWzEyXSBePSBoO1xyXG4gICAgICBzWzEzXSBePSBsO1xyXG4gICAgICBzWzIyXSBePSBoO1xyXG4gICAgICBzWzIzXSBePSBsO1xyXG4gICAgICBzWzMyXSBePSBoO1xyXG4gICAgICBzWzMzXSBePSBsO1xyXG4gICAgICBzWzQyXSBePSBoO1xyXG4gICAgICBzWzQzXSBePSBsO1xyXG4gICAgICBoID0gYzIgXiAoKGM2IDw8IDEpIHwgKGM3ID4+PiAzMSkpO1xyXG4gICAgICBsID0gYzMgXiAoKGM3IDw8IDEpIHwgKGM2ID4+PiAzMSkpO1xyXG4gICAgICBzWzRdIF49IGg7XHJcbiAgICAgIHNbNV0gXj0gbDtcclxuICAgICAgc1sxNF0gXj0gaDtcclxuICAgICAgc1sxNV0gXj0gbDtcclxuICAgICAgc1syNF0gXj0gaDtcclxuICAgICAgc1syNV0gXj0gbDtcclxuICAgICAgc1szNF0gXj0gaDtcclxuICAgICAgc1szNV0gXj0gbDtcclxuICAgICAgc1s0NF0gXj0gaDtcclxuICAgICAgc1s0NV0gXj0gbDtcclxuICAgICAgaCA9IGM0IF4gKChjOCA8PCAxKSB8IChjOSA+Pj4gMzEpKTtcclxuICAgICAgbCA9IGM1IF4gKChjOSA8PCAxKSB8IChjOCA+Pj4gMzEpKTtcclxuICAgICAgc1s2XSBePSBoO1xyXG4gICAgICBzWzddIF49IGw7XHJcbiAgICAgIHNbMTZdIF49IGg7XHJcbiAgICAgIHNbMTddIF49IGw7XHJcbiAgICAgIHNbMjZdIF49IGg7XHJcbiAgICAgIHNbMjddIF49IGw7XHJcbiAgICAgIHNbMzZdIF49IGg7XHJcbiAgICAgIHNbMzddIF49IGw7XHJcbiAgICAgIHNbNDZdIF49IGg7XHJcbiAgICAgIHNbNDddIF49IGw7XHJcbiAgICAgIGggPSBjNiBeICgoYzAgPDwgMSkgfCAoYzEgPj4+IDMxKSk7XHJcbiAgICAgIGwgPSBjNyBeICgoYzEgPDwgMSkgfCAoYzAgPj4+IDMxKSk7XHJcbiAgICAgIHNbOF0gXj0gaDtcclxuICAgICAgc1s5XSBePSBsO1xyXG4gICAgICBzWzE4XSBePSBoO1xyXG4gICAgICBzWzE5XSBePSBsO1xyXG4gICAgICBzWzI4XSBePSBoO1xyXG4gICAgICBzWzI5XSBePSBsO1xyXG4gICAgICBzWzM4XSBePSBoO1xyXG4gICAgICBzWzM5XSBePSBsO1xyXG4gICAgICBzWzQ4XSBePSBoO1xyXG4gICAgICBzWzQ5XSBePSBsO1xyXG5cclxuICAgICAgYjAgPSBzWzBdO1xyXG4gICAgICBiMSA9IHNbMV07XHJcbiAgICAgIGIzMiA9IChzWzExXSA8PCA0KSB8IChzWzEwXSA+Pj4gMjgpO1xyXG4gICAgICBiMzMgPSAoc1sxMF0gPDwgNCkgfCAoc1sxMV0gPj4+IDI4KTtcclxuICAgICAgYjE0ID0gKHNbMjBdIDw8IDMpIHwgKHNbMjFdID4+PiAyOSk7XHJcbiAgICAgIGIxNSA9IChzWzIxXSA8PCAzKSB8IChzWzIwXSA+Pj4gMjkpO1xyXG4gICAgICBiNDYgPSAoc1szMV0gPDwgOSkgfCAoc1szMF0gPj4+IDIzKTtcclxuICAgICAgYjQ3ID0gKHNbMzBdIDw8IDkpIHwgKHNbMzFdID4+PiAyMyk7XHJcbiAgICAgIGIyOCA9IChzWzQwXSA8PCAxOCkgfCAoc1s0MV0gPj4+IDE0KTtcclxuICAgICAgYjI5ID0gKHNbNDFdIDw8IDE4KSB8IChzWzQwXSA+Pj4gMTQpO1xyXG4gICAgICBiMjAgPSAoc1syXSA8PCAxKSB8IChzWzNdID4+PiAzMSk7XHJcbiAgICAgIGIyMSA9IChzWzNdIDw8IDEpIHwgKHNbMl0gPj4+IDMxKTtcclxuICAgICAgYjIgPSAoc1sxM10gPDwgMTIpIHwgKHNbMTJdID4+PiAyMCk7XHJcbiAgICAgIGIzID0gKHNbMTJdIDw8IDEyKSB8IChzWzEzXSA+Pj4gMjApO1xyXG4gICAgICBiMzQgPSAoc1syMl0gPDwgMTApIHwgKHNbMjNdID4+PiAyMik7XHJcbiAgICAgIGIzNSA9IChzWzIzXSA8PCAxMCkgfCAoc1syMl0gPj4+IDIyKTtcclxuICAgICAgYjE2ID0gKHNbMzNdIDw8IDEzKSB8IChzWzMyXSA+Pj4gMTkpO1xyXG4gICAgICBiMTcgPSAoc1szMl0gPDwgMTMpIHwgKHNbMzNdID4+PiAxOSk7XHJcbiAgICAgIGI0OCA9IChzWzQyXSA8PCAyKSB8IChzWzQzXSA+Pj4gMzApO1xyXG4gICAgICBiNDkgPSAoc1s0M10gPDwgMikgfCAoc1s0Ml0gPj4+IDMwKTtcclxuICAgICAgYjQwID0gKHNbNV0gPDwgMzApIHwgKHNbNF0gPj4+IDIpO1xyXG4gICAgICBiNDEgPSAoc1s0XSA8PCAzMCkgfCAoc1s1XSA+Pj4gMik7XHJcbiAgICAgIGIyMiA9IChzWzE0XSA8PCA2KSB8IChzWzE1XSA+Pj4gMjYpO1xyXG4gICAgICBiMjMgPSAoc1sxNV0gPDwgNikgfCAoc1sxNF0gPj4+IDI2KTtcclxuICAgICAgYjQgPSAoc1syNV0gPDwgMTEpIHwgKHNbMjRdID4+PiAyMSk7XHJcbiAgICAgIGI1ID0gKHNbMjRdIDw8IDExKSB8IChzWzI1XSA+Pj4gMjEpO1xyXG4gICAgICBiMzYgPSAoc1szNF0gPDwgMTUpIHwgKHNbMzVdID4+PiAxNyk7XHJcbiAgICAgIGIzNyA9IChzWzM1XSA8PCAxNSkgfCAoc1szNF0gPj4+IDE3KTtcclxuICAgICAgYjE4ID0gKHNbNDVdIDw8IDI5KSB8IChzWzQ0XSA+Pj4gMyk7XHJcbiAgICAgIGIxOSA9IChzWzQ0XSA8PCAyOSkgfCAoc1s0NV0gPj4+IDMpO1xyXG4gICAgICBiMTAgPSAoc1s2XSA8PCAyOCkgfCAoc1s3XSA+Pj4gNCk7XHJcbiAgICAgIGIxMSA9IChzWzddIDw8IDI4KSB8IChzWzZdID4+PiA0KTtcclxuICAgICAgYjQyID0gKHNbMTddIDw8IDIzKSB8IChzWzE2XSA+Pj4gOSk7XHJcbiAgICAgIGI0MyA9IChzWzE2XSA8PCAyMykgfCAoc1sxN10gPj4+IDkpO1xyXG4gICAgICBiMjQgPSAoc1syNl0gPDwgMjUpIHwgKHNbMjddID4+PiA3KTtcclxuICAgICAgYjI1ID0gKHNbMjddIDw8IDI1KSB8IChzWzI2XSA+Pj4gNyk7XHJcbiAgICAgIGI2ID0gKHNbMzZdIDw8IDIxKSB8IChzWzM3XSA+Pj4gMTEpO1xyXG4gICAgICBiNyA9IChzWzM3XSA8PCAyMSkgfCAoc1szNl0gPj4+IDExKTtcclxuICAgICAgYjM4ID0gKHNbNDddIDw8IDI0KSB8IChzWzQ2XSA+Pj4gOCk7XHJcbiAgICAgIGIzOSA9IChzWzQ2XSA8PCAyNCkgfCAoc1s0N10gPj4+IDgpO1xyXG4gICAgICBiMzAgPSAoc1s4XSA8PCAyNykgfCAoc1s5XSA+Pj4gNSk7XHJcbiAgICAgIGIzMSA9IChzWzldIDw8IDI3KSB8IChzWzhdID4+PiA1KTtcclxuICAgICAgYjEyID0gKHNbMThdIDw8IDIwKSB8IChzWzE5XSA+Pj4gMTIpO1xyXG4gICAgICBiMTMgPSAoc1sxOV0gPDwgMjApIHwgKHNbMThdID4+PiAxMik7XHJcbiAgICAgIGI0NCA9IChzWzI5XSA8PCA3KSB8IChzWzI4XSA+Pj4gMjUpO1xyXG4gICAgICBiNDUgPSAoc1syOF0gPDwgNykgfCAoc1syOV0gPj4+IDI1KTtcclxuICAgICAgYjI2ID0gKHNbMzhdIDw8IDgpIHwgKHNbMzldID4+PiAyNCk7XHJcbiAgICAgIGIyNyA9IChzWzM5XSA8PCA4KSB8IChzWzM4XSA+Pj4gMjQpO1xyXG4gICAgICBiOCA9IChzWzQ4XSA8PCAxNCkgfCAoc1s0OV0gPj4+IDE4KTtcclxuICAgICAgYjkgPSAoc1s0OV0gPDwgMTQpIHwgKHNbNDhdID4+PiAxOCk7XHJcblxyXG4gICAgICBzWzBdID0gYjAgXiAofmIyICYgYjQpO1xyXG4gICAgICBzWzFdID0gYjEgXiAofmIzICYgYjUpO1xyXG4gICAgICBzWzEwXSA9IGIxMCBeICh+YjEyICYgYjE0KTtcclxuICAgICAgc1sxMV0gPSBiMTEgXiAofmIxMyAmIGIxNSk7XHJcbiAgICAgIHNbMjBdID0gYjIwIF4gKH5iMjIgJiBiMjQpO1xyXG4gICAgICBzWzIxXSA9IGIyMSBeICh+YjIzICYgYjI1KTtcclxuICAgICAgc1szMF0gPSBiMzAgXiAofmIzMiAmIGIzNCk7XHJcbiAgICAgIHNbMzFdID0gYjMxIF4gKH5iMzMgJiBiMzUpO1xyXG4gICAgICBzWzQwXSA9IGI0MCBeICh+YjQyICYgYjQ0KTtcclxuICAgICAgc1s0MV0gPSBiNDEgXiAofmI0MyAmIGI0NSk7XHJcbiAgICAgIHNbMl0gPSBiMiBeICh+YjQgJiBiNik7XHJcbiAgICAgIHNbM10gPSBiMyBeICh+YjUgJiBiNyk7XHJcbiAgICAgIHNbMTJdID0gYjEyIF4gKH5iMTQgJiBiMTYpO1xyXG4gICAgICBzWzEzXSA9IGIxMyBeICh+YjE1ICYgYjE3KTtcclxuICAgICAgc1syMl0gPSBiMjIgXiAofmIyNCAmIGIyNik7XHJcbiAgICAgIHNbMjNdID0gYjIzIF4gKH5iMjUgJiBiMjcpO1xyXG4gICAgICBzWzMyXSA9IGIzMiBeICh+YjM0ICYgYjM2KTtcclxuICAgICAgc1szM10gPSBiMzMgXiAofmIzNSAmIGIzNyk7XHJcbiAgICAgIHNbNDJdID0gYjQyIF4gKH5iNDQgJiBiNDYpO1xyXG4gICAgICBzWzQzXSA9IGI0MyBeICh+YjQ1ICYgYjQ3KTtcclxuICAgICAgc1s0XSA9IGI0IF4gKH5iNiAmIGI4KTtcclxuICAgICAgc1s1XSA9IGI1IF4gKH5iNyAmIGI5KTtcclxuICAgICAgc1sxNF0gPSBiMTQgXiAofmIxNiAmIGIxOCk7XHJcbiAgICAgIHNbMTVdID0gYjE1IF4gKH5iMTcgJiBiMTkpO1xyXG4gICAgICBzWzI0XSA9IGIyNCBeICh+YjI2ICYgYjI4KTtcclxuICAgICAgc1syNV0gPSBiMjUgXiAofmIyNyAmIGIyOSk7XHJcbiAgICAgIHNbMzRdID0gYjM0IF4gKH5iMzYgJiBiMzgpO1xyXG4gICAgICBzWzM1XSA9IGIzNSBeICh+YjM3ICYgYjM5KTtcclxuICAgICAgc1s0NF0gPSBiNDQgXiAofmI0NiAmIGI0OCk7XHJcbiAgICAgIHNbNDVdID0gYjQ1IF4gKH5iNDcgJiBiNDkpO1xyXG4gICAgICBzWzZdID0gYjYgXiAofmI4ICYgYjApO1xyXG4gICAgICBzWzddID0gYjcgXiAofmI5ICYgYjEpO1xyXG4gICAgICBzWzE2XSA9IGIxNiBeICh+YjE4ICYgYjEwKTtcclxuICAgICAgc1sxN10gPSBiMTcgXiAofmIxOSAmIGIxMSk7XHJcbiAgICAgIHNbMjZdID0gYjI2IF4gKH5iMjggJiBiMjApO1xyXG4gICAgICBzWzI3XSA9IGIyNyBeICh+YjI5ICYgYjIxKTtcclxuICAgICAgc1szNl0gPSBiMzYgXiAofmIzOCAmIGIzMCk7XHJcbiAgICAgIHNbMzddID0gYjM3IF4gKH5iMzkgJiBiMzEpO1xyXG4gICAgICBzWzQ2XSA9IGI0NiBeICh+YjQ4ICYgYjQwKTtcclxuICAgICAgc1s0N10gPSBiNDcgXiAofmI0OSAmIGI0MSk7XHJcbiAgICAgIHNbOF0gPSBiOCBeICh+YjAgJiBiMik7XHJcbiAgICAgIHNbOV0gPSBiOSBeICh+YjEgJiBiMyk7XHJcbiAgICAgIHNbMThdID0gYjE4IF4gKH5iMTAgJiBiMTIpO1xyXG4gICAgICBzWzE5XSA9IGIxOSBeICh+YjExICYgYjEzKTtcclxuICAgICAgc1syOF0gPSBiMjggXiAofmIyMCAmIGIyMik7XHJcbiAgICAgIHNbMjldID0gYjI5IF4gKH5iMjEgJiBiMjMpO1xyXG4gICAgICBzWzM4XSA9IGIzOCBeICh+YjMwICYgYjMyKTtcclxuICAgICAgc1szOV0gPSBiMzkgXiAofmIzMSAmIGIzMyk7XHJcbiAgICAgIHNbNDhdID0gYjQ4IF4gKH5iNDAgJiBiNDIpO1xyXG4gICAgICBzWzQ5XSA9IGI0OSBeICh+YjQxICYgYjQzKTtcclxuXHJcbiAgICAgIHNbMF0gXj0gUkNbbl07XHJcbiAgICAgIHNbMV0gXj0gUkNbbiArIDFdO1xyXG4gICAgfVxyXG4gIH07XHJcblxyXG4gIGlmIChDT01NT05fSlMpIHtcclxuICAgIG1vZHVsZS5leHBvcnRzID0gbWV0aG9kcztcclxuICB9IGVsc2Uge1xyXG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBtZXRob2ROYW1lcy5sZW5ndGg7ICsraSkge1xyXG4gICAgICByb290W21ldGhvZE5hbWVzW2ldXSA9IG1ldGhvZHNbbWV0aG9kTmFtZXNbaV1dO1xyXG4gICAgfVxyXG4gIH1cclxufSkoKTtcclxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzLXNoYTMvc3JjL3NoYTMuanNcbi8vIG1vZHVsZSBpZCA9IDI0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8qIGdsb2JhbHMgd2luZG93LCBleHBvcnRzLCBkZWZpbmUgKi9cblxuKGZ1bmN0aW9uKHdpbmRvdykge1xuICAgICd1c2Ugc3RyaWN0J1xuXG4gICAgdmFyIHJlID0ge1xuICAgICAgICBub3Rfc3RyaW5nOiAvW15zXS8sXG4gICAgICAgIG5vdF9ib29sOiAvW150XS8sXG4gICAgICAgIG5vdF90eXBlOiAvW15UXS8sXG4gICAgICAgIG5vdF9wcmltaXRpdmU6IC9bXnZdLyxcbiAgICAgICAgbnVtYmVyOiAvW2RpZWZnXS8sXG4gICAgICAgIG51bWVyaWNfYXJnOiAvW2JjZGllZmd1eFhdLyxcbiAgICAgICAganNvbjogL1tqXS8sXG4gICAgICAgIG5vdF9qc29uOiAvW15qXS8sXG4gICAgICAgIHRleHQ6IC9eW15cXHgyNV0rLyxcbiAgICAgICAgbW9kdWxvOiAvXlxceDI1ezJ9LyxcbiAgICAgICAgcGxhY2Vob2xkZXI6IC9eXFx4MjUoPzooWzEtOV1cXGQqKVxcJHxcXCgoW15cXCldKylcXCkpPyhcXCspPygwfCdbXiRdKT8oLSk/KFxcZCspPyg/OlxcLihcXGQrKSk/KFtiLWdpam9zdFR1dnhYXSkvLFxuICAgICAgICBrZXk6IC9eKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGtleV9hY2Nlc3M6IC9eXFwuKFthLXpfXVthLXpfXFxkXSopL2ksXG4gICAgICAgIGluZGV4X2FjY2VzczogL15cXFsoXFxkKylcXF0vLFxuICAgICAgICBzaWduOiAvXltcXCtcXC1dL1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHNwcmludGYoKSB7XG4gICAgICAgIHZhciBrZXkgPSBhcmd1bWVudHNbMF0sIGNhY2hlID0gc3ByaW50Zi5jYWNoZVxuICAgICAgICBpZiAoIShjYWNoZVtrZXldKSkge1xuICAgICAgICAgICAgY2FjaGVba2V5XSA9IHNwcmludGYucGFyc2Uoa2V5KVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcHJpbnRmLmZvcm1hdC5jYWxsKG51bGwsIGNhY2hlW2tleV0sIGFyZ3VtZW50cylcbiAgICB9XG5cbiAgICBzcHJpbnRmLmZvcm1hdCA9IGZ1bmN0aW9uKHBhcnNlX3RyZWUsIGFyZ3YpIHtcbiAgICAgICAgdmFyIGN1cnNvciA9IDEsIHRyZWVfbGVuZ3RoID0gcGFyc2VfdHJlZS5sZW5ndGgsIG5vZGVfdHlwZSA9ICcnLCBhcmcsIG91dHB1dCA9IFtdLCBpLCBrLCBtYXRjaCwgcGFkLCBwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoLCBpc19wb3NpdGl2ZSA9IHRydWUsIHNpZ24gPSAnJ1xuICAgICAgICBmb3IgKGkgPSAwOyBpIDwgdHJlZV9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgbm9kZV90eXBlID0gZ2V0X3R5cGUocGFyc2VfdHJlZVtpXSlcbiAgICAgICAgICAgIGlmIChub2RlX3R5cGUgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgb3V0cHV0W291dHB1dC5sZW5ndGhdID0gcGFyc2VfdHJlZVtpXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAobm9kZV90eXBlID09PSAnYXJyYXknKSB7XG4gICAgICAgICAgICAgICAgbWF0Y2ggPSBwYXJzZV90cmVlW2ldIC8vIGNvbnZlbmllbmNlIHB1cnBvc2VzIG9ubHlcbiAgICAgICAgICAgICAgICBpZiAobWF0Y2hbMl0pIHsgLy8ga2V5d29yZCBhcmd1bWVudFxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcl1cbiAgICAgICAgICAgICAgICAgICAgZm9yIChrID0gMDsgayA8IG1hdGNoWzJdLmxlbmd0aDsgaysrKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWFyZy5oYXNPd25Qcm9wZXJ0eShtYXRjaFsyXVtrXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3Ioc3ByaW50ZignW3NwcmludGZdIHByb3BlcnR5IFwiJXNcIiBkb2VzIG5vdCBleGlzdCcsIG1hdGNoWzJdW2tdKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZ1ttYXRjaFsyXVtrXV1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIGlmIChtYXRjaFsxXSkgeyAvLyBwb3NpdGlvbmFsIGFyZ3VtZW50IChleHBsaWNpdClcbiAgICAgICAgICAgICAgICAgICAgYXJnID0gYXJndlttYXRjaFsxXV1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7IC8vIHBvc2l0aW9uYWwgYXJndW1lbnQgKGltcGxpY2l0KVxuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmd2W2N1cnNvcisrXVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5ub3RfdHlwZS50ZXN0KG1hdGNoWzhdKSAmJiByZS5ub3RfcHJpbWl0aXZlLnRlc3QobWF0Y2hbOF0pICYmIGdldF90eXBlKGFyZykgPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcoKVxuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGlmIChyZS5udW1lcmljX2FyZy50ZXN0KG1hdGNoWzhdKSAmJiAoZ2V0X3R5cGUoYXJnKSAhPSAnbnVtYmVyJyAmJiBpc05hTihhcmcpKSkge1xuICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKHNwcmludGYoXCJbc3ByaW50Zl0gZXhwZWN0aW5nIG51bWJlciBidXQgZm91bmQgJXNcIiwgZ2V0X3R5cGUoYXJnKSkpXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KG1hdGNoWzhdKSkge1xuICAgICAgICAgICAgICAgICAgICBpc19wb3NpdGl2ZSA9IGFyZyA+PSAwXG4gICAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgICAgc3dpdGNoIChtYXRjaFs4XSkge1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdiJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDIpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2MnOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChhcmcsIDEwKSlcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZCc6XG4gICAgICAgICAgICAgICAgICAgIGNhc2UgJ2knOlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnID0gcGFyc2VJbnQoYXJnLCAxMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnaic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBKU09OLnN0cmluZ2lmeShhcmcsIG51bGwsIG1hdGNoWzZdID8gcGFyc2VJbnQobWF0Y2hbNl0pIDogMClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXRjaFs3XSA/IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKS50b0V4cG9uZW50aWFsKClcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBtYXRjaFs3XSA/IHBhcnNlRmxvYXQoYXJnKS50b0ZpeGVkKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdnJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IG1hdGNoWzddID8gcGFyc2VGbG9hdChhcmcpLnRvUHJlY2lzaW9uKG1hdGNoWzddKSA6IHBhcnNlRmxvYXQoYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdvJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy50b1N0cmluZyg4KVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdzJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IFN0cmluZyhhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBTdHJpbmcoISFhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAnVCc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBnZXRfdHlwZShhcmcpXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSAobWF0Y2hbN10gPyBhcmcuc3Vic3RyaW5nKDAsIG1hdGNoWzddKSA6IGFyZylcbiAgICAgICAgICAgICAgICAgICAgYnJlYWtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSAndSc6XG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBwYXJzZUludChhcmcsIDEwKSA+Pj4gMFxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd2JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IGFyZy52YWx1ZU9mKClcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IChtYXRjaFs3XSA/IGFyZy5zdWJzdHJpbmcoMCwgbWF0Y2hbN10pIDogYXJnKVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICd4JzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDE2KVxuICAgICAgICAgICAgICAgICAgICBicmVha1xuICAgICAgICAgICAgICAgICAgICBjYXNlICdYJzpcbiAgICAgICAgICAgICAgICAgICAgICAgIGFyZyA9IHBhcnNlSW50KGFyZywgMTApLnRvU3RyaW5nKDE2KS50b1VwcGVyQ2FzZSgpXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrXG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChyZS5qc29uLnRlc3QobWF0Y2hbOF0pKSB7XG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtvdXRwdXQubGVuZ3RoXSA9IGFyZ1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlLm51bWJlci50ZXN0KG1hdGNoWzhdKSAmJiAoIWlzX3Bvc2l0aXZlIHx8IG1hdGNoWzNdKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9IGlzX3Bvc2l0aXZlID8gJysnIDogJy0nXG4gICAgICAgICAgICAgICAgICAgICAgICBhcmcgPSBhcmcudG9TdHJpbmcoKS5yZXBsYWNlKHJlLnNpZ24sICcnKVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgc2lnbiA9ICcnXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgcGFkX2NoYXJhY3RlciA9IG1hdGNoWzRdID8gbWF0Y2hbNF0gPT09ICcwJyA/ICcwJyA6IG1hdGNoWzRdLmNoYXJBdCgxKSA6ICcgJ1xuICAgICAgICAgICAgICAgICAgICBwYWRfbGVuZ3RoID0gbWF0Y2hbNl0gLSAoc2lnbiArIGFyZykubGVuZ3RoXG4gICAgICAgICAgICAgICAgICAgIHBhZCA9IG1hdGNoWzZdID8gKHBhZF9sZW5ndGggPiAwID8gc3RyX3JlcGVhdChwYWRfY2hhcmFjdGVyLCBwYWRfbGVuZ3RoKSA6ICcnKSA6ICcnXG4gICAgICAgICAgICAgICAgICAgIG91dHB1dFtvdXRwdXQubGVuZ3RoXSA9IG1hdGNoWzVdID8gc2lnbiArIGFyZyArIHBhZCA6IChwYWRfY2hhcmFjdGVyID09PSAnMCcgPyBzaWduICsgcGFkICsgYXJnIDogcGFkICsgc2lnbiArIGFyZylcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG91dHB1dC5qb2luKCcnKVxuICAgIH1cblxuICAgIHNwcmludGYuY2FjaGUgPSBPYmplY3QuY3JlYXRlKG51bGwpXG5cbiAgICBzcHJpbnRmLnBhcnNlID0gZnVuY3Rpb24oZm10KSB7XG4gICAgICAgIHZhciBfZm10ID0gZm10LCBtYXRjaCA9IFtdLCBwYXJzZV90cmVlID0gW10sIGFyZ19uYW1lcyA9IDBcbiAgICAgICAgd2hpbGUgKF9mbXQpIHtcbiAgICAgICAgICAgIGlmICgobWF0Y2ggPSByZS50ZXh0LmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBtYXRjaFswXVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoKG1hdGNoID0gcmUubW9kdWxvLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSAnJSdcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2UgaWYgKChtYXRjaCA9IHJlLnBsYWNlaG9sZGVyLmV4ZWMoX2ZtdCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgaWYgKG1hdGNoWzJdKSB7XG4gICAgICAgICAgICAgICAgICAgIGFyZ19uYW1lcyB8PSAxXG4gICAgICAgICAgICAgICAgICAgIHZhciBmaWVsZF9saXN0ID0gW10sIHJlcGxhY2VtZW50X2ZpZWxkID0gbWF0Y2hbMl0sIGZpZWxkX21hdGNoID0gW11cbiAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleS5leGVjKHJlcGxhY2VtZW50X2ZpZWxkKSkgIT09IG51bGwpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgIHdoaWxlICgocmVwbGFjZW1lbnRfZmllbGQgPSByZXBsYWNlbWVudF9maWVsZC5zdWJzdHJpbmcoZmllbGRfbWF0Y2hbMF0ubGVuZ3RoKSkgIT09ICcnKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChmaWVsZF9tYXRjaCA9IHJlLmtleV9hY2Nlc3MuZXhlYyhyZXBsYWNlbWVudF9maWVsZCkpICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZpZWxkX2xpc3RbZmllbGRfbGlzdC5sZW5ndGhdID0gZmllbGRfbWF0Y2hbMV1cbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoKGZpZWxkX21hdGNoID0gcmUuaW5kZXhfYWNjZXNzLmV4ZWMocmVwbGFjZW1lbnRfZmllbGQpKSAhPT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmaWVsZF9saXN0W2ZpZWxkX2xpc3QubGVuZ3RoXSA9IGZpZWxkX21hdGNoWzFdXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aHJvdyBuZXcgU3ludGF4RXJyb3IoXCJbc3ByaW50Zl0gZmFpbGVkIHRvIHBhcnNlIG5hbWVkIGFyZ3VtZW50IGtleVwiKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBTeW50YXhFcnJvcihcIltzcHJpbnRmXSBmYWlsZWQgdG8gcGFyc2UgbmFtZWQgYXJndW1lbnQga2V5XCIpXG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgbWF0Y2hbMl0gPSBmaWVsZF9saXN0XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBhcmdfbmFtZXMgfD0gMlxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBpZiAoYXJnX25hbWVzID09PSAzKSB7XG4gICAgICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihcIltzcHJpbnRmXSBtaXhpbmcgcG9zaXRpb25hbCBhbmQgbmFtZWQgcGxhY2Vob2xkZXJzIGlzIG5vdCAoeWV0KSBzdXBwb3J0ZWRcIilcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgcGFyc2VfdHJlZVtwYXJzZV90cmVlLmxlbmd0aF0gPSBtYXRjaFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFwiW3NwcmludGZdIHVuZXhwZWN0ZWQgcGxhY2Vob2xkZXJcIilcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIF9mbXQgPSBfZm10LnN1YnN0cmluZyhtYXRjaFswXS5sZW5ndGgpXG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcnNlX3RyZWVcbiAgICB9XG5cbiAgICB2YXIgdnNwcmludGYgPSBmdW5jdGlvbihmbXQsIGFyZ3YsIF9hcmd2KSB7XG4gICAgICAgIF9hcmd2ID0gKGFyZ3YgfHwgW10pLnNsaWNlKDApXG4gICAgICAgIF9hcmd2LnNwbGljZSgwLCAwLCBmbXQpXG4gICAgICAgIHJldHVybiBzcHJpbnRmLmFwcGx5KG51bGwsIF9hcmd2KVxuICAgIH1cblxuICAgIC8qKlxuICAgICAqIGhlbHBlcnNcbiAgICAgKi9cbiAgICBmdW5jdGlvbiBnZXRfdHlwZSh2YXJpYWJsZSkge1xuICAgICAgICBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnbnVtYmVyJykge1xuICAgICAgICAgICAgcmV0dXJuICdudW1iZXInXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSBpZiAodHlwZW9mIHZhcmlhYmxlID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgcmV0dXJuICdzdHJpbmcnXG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICByZXR1cm4gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHZhcmlhYmxlKS5zbGljZSg4LCAtMSkudG9Mb3dlckNhc2UoKVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgdmFyIHByZWZvcm1hdHRlZFBhZGRpbmcgPSB7XG4gICAgICAgICcwJzogWycnLCAnMCcsICcwMCcsICcwMDAnLCAnMDAwMCcsICcwMDAwMCcsICcwMDAwMDAnLCAnMDAwMDAwMCddLFxuICAgICAgICAnICc6IFsnJywgJyAnLCAnICAnLCAnICAgJywgJyAgICAnLCAnICAgICAnLCAnICAgICAgJywgJyAgICAgICAnXSxcbiAgICAgICAgJ18nOiBbJycsICdfJywgJ19fJywgJ19fXycsICdfX19fJywgJ19fX19fJywgJ19fX19fXycsICdfX19fX19fJ10sXG4gICAgfVxuICAgIGZ1bmN0aW9uIHN0cl9yZXBlYXQoaW5wdXQsIG11bHRpcGxpZXIpIHtcbiAgICAgICAgaWYgKG11bHRpcGxpZXIgPj0gMCAmJiBtdWx0aXBsaWVyIDw9IDcgJiYgcHJlZm9ybWF0dGVkUGFkZGluZ1tpbnB1dF0pIHtcbiAgICAgICAgICAgIHJldHVybiBwcmVmb3JtYXR0ZWRQYWRkaW5nW2lucHV0XVttdWx0aXBsaWVyXVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBBcnJheShtdWx0aXBsaWVyICsgMSkuam9pbihpbnB1dClcbiAgICB9XG5cbiAgICAvKipcbiAgICAgKiBleHBvcnQgdG8gZWl0aGVyIGJyb3dzZXIgb3Igbm9kZS5qc1xuICAgICAqL1xuICAgIGlmICh0eXBlb2YgZXhwb3J0cyAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAgICAgZXhwb3J0cy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICBleHBvcnRzLnZzcHJpbnRmID0gdnNwcmludGZcbiAgICB9XG4gICAgaWYgKHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnKSB7XG4gICAgICAgIHdpbmRvdy5zcHJpbnRmID0gc3ByaW50ZlxuICAgICAgICB3aW5kb3cudnNwcmludGYgPSB2c3ByaW50ZlxuXG4gICAgICAgIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICAgICAgICAgIGRlZmluZShmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICBzcHJpbnRmOiBzcHJpbnRmLFxuICAgICAgICAgICAgICAgICAgICB2c3ByaW50ZjogdnNwcmludGZcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KVxuICAgICAgICB9XG4gICAgfVxufSkodHlwZW9mIHdpbmRvdyA9PT0gJ3VuZGVmaW5lZCcgPyB0aGlzIDogd2luZG93KTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9zcHJpbnRmLWpzL3NyYy9zcHJpbnRmLmpzXG4vLyBtb2R1bGUgaWQgPSAyNVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJpbXBvcnQgYmFzZTU4IGZyb20gJ2JzNTgnO1xuaW1wb3J0IG5hY2wgZnJvbSAndHdlZXRuYWNsJztcbmltcG9ydCBzaGEzIGZyb20gJ2pzLXNoYTMnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBjbGFzcyBLZXlwYWlyIEVkMjU1MTkga2V5cGFpciBpbiBiYXNlNTggKGFzIEJpZ2NoYWluREIgZXhwZWN0cyBiYXNlNTgga2V5cylcbiAqIEB0eXBlIHtPYmplY3R9XG4gKiBAcGFyYW0ge251bWJlcn0gW3NlY3JldF0gQSBzZWVkIHRoYXQgd2lsbCBiZSB1c2VkIGFzIGEga2V5IGRlcml2YXRpb24gZnVuY3Rpb25cbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwdWJsaWNLZXlcbiAqIEBwcm9wZXJ0eSB7c3RyaW5nfSBwcml2YXRlS2V5XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEVkMjU1MTlLZXlwYWlyKHNlY3JldCkge1xuICAgIGxldCBrZXlQYWlyO1xuICAgIGlmIChzZWNyZXQpIHtcbiAgICAgICAgLy8gUXVpY2sgYW5kIGRpcnR5OiB1c2Uga2V5IGRlcml2YXRpb24gZnVuY3Rpb24gaW5zdGVhZFxuICAgICAgICBjb25zdCBzZWNyZXRIYXNoID0gc2hhMy5zaGEzXzI1NlxuICAgICAgICAgICAgLmNyZWF0ZSgpXG4gICAgICAgICAgICAudXBkYXRlKHNlY3JldClcbiAgICAgICAgICAgIC5hcnJheSgpO1xuICAgICAgICBrZXlQYWlyID0gbmFjbC5zaWduLmtleVBhaXIuZnJvbVNlZWQobmV3IFVpbnQ4QXJyYXkoc2VjcmV0SGFzaCkpXG4gICAgfSBlbHNlIHtcbiAgICAgICAga2V5UGFpciA9IG5hY2wuc2lnbi5rZXlQYWlyKCk7XG4gICAgfVxuICAgIHRoaXMucHVibGljS2V5ID0gYmFzZTU4LmVuY29kZShrZXlQYWlyLnB1YmxpY0tleSk7XG4gICAgLy8gdHdlZXRuYWNsJ3MgZ2VuZXJhdGVkIHNlY3JldCBrZXkgaXMgdGhlIHNlY3JldCBrZXkgKyBwdWJsaWMga2V5IChyZXN1bHRpbmcgaW4gYSA2NC1ieXRlIGJ1ZmZlcilcbiAgICB0aGlzLnByaXZhdGVLZXkgPSBiYXNlNTguZW5jb2RlKGtleVBhaXIuc2VjcmV0S2V5LnNsaWNlKDAsIDMyKSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvRWQyNTUxOUtleXBhaXIuanMiLCJpbXBvcnQgeyBQcm9taXNlIH0gZnJvbSAnZXM2LXByb21pc2UnO1xuaW1wb3J0IGZldGNoUG9ueWZpbGwgZnJvbSAnZmV0Y2gtcG9ueWZpbGwnO1xuaW1wb3J0IHsgdnNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuaW1wb3J0IGZvcm1hdFRleHQgZnJvbSAnLi9mb3JtYXRfdGV4dCc7XG5cbmltcG9ydCBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0gZnJvbSAnLi9zdHJpbmdpZnlfYXNfcXVlcnlfcGFyYW0nO1xuXG5cbmNvbnN0IGZldGNoID0gZmV0Y2hQb255ZmlsbChQcm9taXNlKTtcblxuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEdsb2JhbCBmZXRjaCB3cmFwcGVyIHRoYXQgYWRkcyBzb21lIGJhc2ljIGVycm9yIGhhbmRsaW5nIGFuZCBlYXNlIG9mIHVzZSBlbmhhbmNlbWVudHMuXG4gKiBDb25zaWRlcnMgYW55IG5vbi0yeHggcmVzcG9uc2UgYXMgYW4gZXJyb3IuXG4gKlxuICogRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gZmV0Y2gsIHNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2guXG4gKlxuICogRXhwZWN0cyBmZXRjaCB0byBhbHJlYWR5IGJlIGF2YWlsYWJsZSAoZWl0aGVyIGluIGEgRVM2IGVudmlyb25tZW50LCBidW5kbGVkIHRocm91Z2ggd2VicGFjaywgb3JcbiAqIGluamVjdGVkIHRocm91Z2ggYSBwb2x5ZmlsbCkuXG4gKlxuICogQHBhcmFtICB7c3RyaW5nfSAgdXJsICAgIFVybCB0byByZXF1ZXN0LiBDYW4gYmUgc3BlY2lmaWVkIGFzIGEgc3ByaW50ZiBmb3JtYXQgc3RyaW5nIChzZWVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMpIHRoYXQgd2lsbCBiZSByZXNvbHZlZCB1c2luZ1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIGBjb25maWcudXJsVGVtcGxhdGVTcGVjYC5cbiAqIEBwYXJhbSAge29iamVjdH0gIGNvbmZpZyBBZGRpdGlvbmFsIGNvbmZpZ3VyYXRpb24sIG1vc3RseSBwYXNzZWQgdG8gZmV0Y2ggYXMgaXRzICdpbml0JyBjb25maWdcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAoc2VlIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0FQSS9HbG9iYWxGZXRjaC9mZXRjaCNQYXJhbWV0ZXJzKS5cbiAqIEBwYXJhbSAgeyp9ICAgICAgICAgICAgIGNvbmZpZy5qc29uQm9keSAgICAgICAgSnNvbiBwYXlsb2FkIHRvIHRoZSByZXF1ZXN0LiBXaWxsIGF1dG9tYXRpY2FsbHkgYmVcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSlNPTi5zdHJpbmdpZnkoKS1lZCBhbmQgb3ZlcnJpZGUgYGNvbmZpZy5ib2R5YC5cbiAqIEBwYXJhbSAge3N0cmluZ3xvYmplY3R9IGNvbmZpZy5xdWVyeSAgICAgICAgICAgUXVlcnkgcGFyYW1ldGVyIHRvIGFwcGVuZCB0byB0aGUgZW5kIG9mIHRoZSB1cmwuXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIElmIHNwZWNpZmllZCBhcyBhbiBvYmplY3QsIGtleXMgd2lsbCBiZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkZWNhbWVsaXplZCBpbnRvIHNuYWtlIGNhc2UgZmlyc3QuXG4gKiBAcGFyYW0gIHsqW118b2JqZWN0fSAgICBjb25maWcudXJsVGVtcGxhdGVTcGVjIEZvcm1hdCBzcGVjIHRvIHVzZSB0byBleHBhbmQgdGhlIHVybCAoc2VlIHNwcmludGYpLlxuICogQHBhcmFtICB7Kn0gICAgICAgICAgICAgY29uZmlnLiogICAgICAgICAgICAgICBBbGwgb3RoZXIgb3B0aW9ucyBhcmUgcGFzc2VkIHRocm91Z2ggdG8gZmV0Y2guXG4gKlxuICogQHJldHVybiB7UHJvbWlzZX0gICAgICAgIFByb21pc2UgdGhhdCB3aWxsIHJlc29sdmUgd2l0aCB0aGUgcmVzcG9uc2UgaWYgaXRzIHN0YXR1cyB3YXMgMnh4O1xuICogICAgICAgICAgICAgICAgICAgICAgICAgIG90aGVyd2lzZSByZWplY3RzIHdpdGggdGhlIHJlc3BvbnNlXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJhc2VSZXF1ZXN0KHVybCwgeyBqc29uQm9keSwgcXVlcnksIHVybFRlbXBsYXRlU3BlYywgLi4uZmV0Y2hDb25maWcgfSA9IHt9KSB7XG4gICAgbGV0IGV4cGFuZGVkVXJsID0gdXJsO1xuXG4gICAgaWYgKHVybFRlbXBsYXRlU3BlYyAhPSBudWxsKSB7XG4gICAgICAgIGlmIChBcnJheS5pc0FycmF5KHVybFRlbXBsYXRlU3BlYykgJiYgdXJsVGVtcGxhdGVTcGVjLmxlbmd0aCkge1xuICAgICAgICAgICAgLy8gVXNlIHZzcHJpbnRmIGZvciB0aGUgYXJyYXkgY2FsbCBzaWduYXR1cmVcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gdnNwcmludGYodXJsLCB1cmxUZW1wbGF0ZVNwZWMpO1xuICAgICAgICB9IGVsc2UgaWYgKHVybFRlbXBsYXRlU3BlYyAmJlxuICAgICAgICAgICAgICAgICAgIHR5cGVvZiB1cmxUZW1wbGF0ZVNwZWMgPT09ICdvYmplY3QnICYmXG4gICAgICAgICAgICAgICAgICAgT2JqZWN0LmtleXModXJsVGVtcGxhdGVTcGVjKS5sZW5ndGgpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsID0gZm9ybWF0VGV4dCh1cmwsIHVybFRlbXBsYXRlU3BlYyk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgdXJsVGVtcGxhdGVTcGVjIHdhcyBub3QgYW4gYXJyYXkgb3Igb2JqZWN0LiBJZ25vcmluZy4uLicpO1xuICAgICAgICB9XG4gICAgfVxuXG4gICAgaWYgKHF1ZXJ5ICE9IG51bGwpIHtcbiAgICAgICAgaWYgKHR5cGVvZiBxdWVyeSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHF1ZXJ5O1xuICAgICAgICB9IGVsc2UgaWYgKHF1ZXJ5ICYmIHR5cGVvZiBxdWVyeSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGV4cGFuZGVkVXJsICs9IHN0cmluZ2lmeUFzUXVlcnlQYXJhbShxdWVyeSk7XG4gICAgICAgIH0gZWxzZSBpZiAocHJvY2Vzcy5lbnYuTk9ERV9FTlYgIT09ICdwcm9kdWN0aW9uJykge1xuICAgICAgICAgICAgLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIG5vLWNvbnNvbGVcbiAgICAgICAgICAgIGNvbnNvbGUud2FybignU3VwcGxpZWQgcXVlcnkgd2FzIG5vdCBhIHN0cmluZyBvciBvYmplY3QuIElnbm9yaW5nLi4uJyk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBpZiAoanNvbkJvZHkgIT0gbnVsbCkge1xuICAgICAgICBmZXRjaENvbmZpZy5ib2R5ID0gSlNPTi5zdHJpbmdpZnkoanNvbkJvZHkpO1xuICAgIH1cblxuICAgIHJldHVybiBmZXRjaC5mZXRjaChleHBhbmRlZFVybCwgZmV0Y2hDb25maWcpXG4gICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgIC8vIElmIHN0YXR1cyBpcyBub3QgYSAyeHggKGJhc2VkIG9uIFJlc3BvbnNlLm9rKSwgYXNzdW1lIGl0J3MgYW4gZXJyb3JcbiAgICAgICAgICAgIC8vIFNlZSBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9lbi1VUy9kb2NzL1dlYi9BUEkvR2xvYmFsRmV0Y2gvZmV0Y2hcbiAgICAgICAgICAgIGlmICghKHJlcyAmJiByZXMub2spKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuIHJlcztcbiAgICAgICAgfSk7XG59XG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Jhc2VSZXF1ZXN0LmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja0lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZ2V0QmxvY2soYmxvY2tJZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsnYmxvY2tzX2RldGFpbCddLCB7XG4gICAgICAgICAgICB1cmxUZW1wbGF0ZVNwZWM6IHtcbiAgICAgICAgICAgICAgICBibG9ja0lkXG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xufVxuXG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2dldEJsb2NrLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSB0eF9pZFxuICogQHBhcmFtIHN0YXR1c1xuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RCbG9ja3Moe3R4X2lkLCBzdGF0dXN9LCBBUElfUEFUSCkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydibG9ja3MnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICB0eF9pZCxcbiAgICAgICAgICAgICAgICBzdGF0dXNcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG59XG5cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0QmxvY2tzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBwdWJsaWNfa2V5XG4gKiBAcGFyYW0gdW5zcGVudFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKiBAcGFyYW0gb25seUpzb25SZXNwb25zZVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBsaXN0T3V0cHV0cyh7IHB1YmxpY19rZXksIHVuc3BlbnQgfSwgQVBJX1BBVEgsIG9ubHlKc29uUmVzcG9uc2U9dHJ1ZSkge1xuICAgIHJldHVybiByZXF1ZXN0KGdldEFwaVVybHMoQVBJX1BBVEgpWydvdXRwdXRzJ10sIHtcbiAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgIHB1YmxpY19rZXksXG4gICAgICAgICAgICB1bnNwZW50XG4gICAgICAgIH1cbiAgICB9LCBvbmx5SnNvblJlc3BvbnNlKVxufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL2xpc3RPdXRwdXRzLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBhc3NldF9pZFxuICogQHBhcmFtIG9wZXJhdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RUcmFuc2FjdGlvbnMoeyBhc3NldF9pZCwgb3BlcmF0aW9uIH0sIEFQSV9QQVRIKSB7XG4gICAgcmV0dXJuIHJlcXVlc3QoZ2V0QXBpVXJscyhBUElfUEFUSClbJ3RyYW5zYWN0aW9ucyddLCB7XG4gICAgICAgIHF1ZXJ5OiB7XG4gICAgICAgICAgICBhc3NldF9pZCxcbiAgICAgICAgICAgIG9wZXJhdGlvblxuICAgICAgICB9XG4gICAgfSlcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvY29ubmVjdGlvbi9saXN0VHJhbnNhY3Rpb25zLmpzIiwiaW1wb3J0IGdldEFwaVVybHMgZnJvbSAnLi9nZXRBcGlVcmxzJztcbmltcG9ydCByZXF1ZXN0IGZyb20gJy4uL3JlcXVlc3QnO1xuXG4vKipcbiAqIEBwdWJsaWNcbiAqIEBwYXJhbSBibG9ja19pZFxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpc3RWb3RlcyhibG9ja19pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndm90ZXMnXSwge1xuICAgICAgICAgICAgcXVlcnk6IHtcbiAgICAgICAgICAgICAgICBibG9ja19pZFxuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbn1cblxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vbGlzdFZvdGVzLmpzIiwiaW1wb3J0IGdldFRyYW5zYWN0aW9uIGZyb20gJy4vZ2V0VHJhbnNhY3Rpb24nO1xuaW1wb3J0IGdldFN0YXR1cyBmcm9tICcuL2dldFN0YXR1cyc7XG5cbi8qKlxuICogQHB1YmxpY1xuICogQHBhcmFtIHR4X2lkXG4gKiBAcGFyYW0gQVBJX1BBVEhcbiAqIEByZXR1cm4ge1Byb21pc2V9XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uICh0eF9pZCwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICBjb25zdCB0aW1lciA9IHNldEludGVydmFsKCgpID0+IHtcbiAgICAgICAgICAgIGdldFN0YXR1cyh0eF9pZCwgQVBJX1BBVEgpXG4gICAgICAgICAgICAgICAgLnRoZW4oKHJlcykgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmxvZygnRmV0Y2hlZCB0cmFuc2FjdGlvbiBzdGF0dXM6JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHJlcy5zdGF0dXMgPT09ICd2YWxpZCcpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNsZWFySW50ZXJ2YWwodGltZXIpO1xuICAgICAgICAgICAgICAgICAgICAgICAgZ2V0VHJhbnNhY3Rpb24odHhfaWQsIEFQSV9QQVRIKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC50aGVuKChyZXMpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc29sZS5sb2coJ0ZldGNoZWQgdHJhbnNhY3Rpb246JywgcmVzKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAuY2F0Y2goKGVycikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKHRpbWVyKTtcbiAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGVycik7XG4gICAgICAgICAgICAgICAgfSk7XG4gICAgICAgIH0sIDUwMClcbiAgICB9KVxufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL2Nvbm5lY3Rpb24vcG9sbFN0YXR1c0FuZEZldGNoVHJhbnNhY3Rpb24uanMiLCJpbXBvcnQgZ2V0QXBpVXJscyBmcm9tICcuL2dldEFwaVVybHMnO1xuaW1wb3J0IHJlcXVlc3QgZnJvbSAnLi4vcmVxdWVzdCc7XG5cbi8qKlxuICogQHB1YmxpY1xuICpcbiAqIEBwYXJhbSB0cmFuc2FjdGlvblxuICogQHBhcmFtIEFQSV9QQVRIXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBvc3RUcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgQVBJX1BBVEgpIHtcbiAgICByZXR1cm4gcmVxdWVzdChnZXRBcGlVcmxzKEFQSV9QQVRIKVsndHJhbnNhY3Rpb25zJ10sIHtcbiAgICAgICAgbWV0aG9kOiAnUE9TVCcsXG4gICAgICAgIGpzb25Cb2R5OiB0cmFuc2FjdGlvblxuICAgIH0pXG59XG5cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9jb25uZWN0aW9uL3Bvc3RUcmFuc2FjdGlvbi5qcyIsImltcG9ydCB7IHNwcmludGYgfSBmcm9tICdzcHJpbnRmLWpzJztcblxuXG4vLyBSZWdleGVzIHRha2VuIGZyb20gb3IgaW5zcGlyZWQgYnkgc3ByaW50Zi1qc1xuY29uc3QgUmVnZXggPSB7XG4gICAgVEVNUExBVEVfTElURVJBTDogL1xcJHsoW15cXCldKz8pfS9nLFxuICAgIEtFWTogL14oW2Etel9dW2Etel9cXGRdKikvaSxcbiAgICBLRVlfQUNDRVNTOiAvXlxcLihbYS16X11bYS16X1xcZF0qKS9pLFxuICAgIElOREVYX0FDQ0VTUzogL15cXFsoXFxkKylcXF0vXG59O1xuXG4vKipcbiAqIGltcG9ydGVkIGZyb20gaHR0cHM6Ly9naXRodWIuY29tL2JpZ2NoYWluZGIvanMtdXRpbGl0eS1iZWx0L1xuICpcbiAqIEZvcm1hdHMgc3RyaW5ncyBzaW1pbGFybHkgdG8gQydzIHNwcmludGYsIHdpdGggdGhlIGFkZGl0aW9uIG9mICckey4uLn0nIGZvcm1hdHMuXG4gKlxuICogTWFrZXMgYSBmaXJzdCBwYXNzIHJlcGxhY2luZyAnJHsuLi59JyBmb3JtYXRzIGJlZm9yZSBwYXNzaW5nIHRoZSBleHBhbmRlZCBzdHJpbmcgYW5kIG90aGVyXG4gKiBhcmd1bWVudHMgdG8gc3ByaW50Zi1qcy4gRm9yIG1vcmUgaW5mb3JtYXRpb24gb24gd2hhdCBzcHJpbnRmIGNhbiBkbywgc2VlXG4gKiBodHRwczovL2dpdGh1Yi5jb20vYWxleGVpL3NwcmludGYuanMuXG4gKlxuICogRXhhbXBsZXM6XG4gKiAgIGZvcm1hdFRleHQoJ0hpIHRoZXJlICR7ZGltaX0hJywgeyBkaW1pOiAnRGltaScgfSlcbiAqICAgICAgID0+ICdIaSB0aGVyZSBEaW1pISdcbiAqXG4gKiAgIGZvcm1hdFRleHQoJyR7ZGF0YWJhc2V9IGlzICUoc3RhdHVzKXMnLCB7IGRhdGFiYXNlOiAnQmlnY2hhaW5EQicsIHN0YXR1czogJ2JpZycgfSlcbiAqICAgICAgID0+ICdCaWdjaGFpbkRCIGlzIGJpZydcbiAqXG4gKiBMaWtlIHNwcmludGYtanMsIHN0cmluZyBpbnRlcnBvbGF0aW9uIGZvciBrZXl3b3JkcyBhbmQgaW5kZXhlcyBpcyBzdXBwb3J0ZWQgdG9vOlxuICogICBmb3JtYXRUZXh0KCdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzICR7YmVybGluLnRvcEtub3duRm9yWzBdLm5hbWV9Jywge1xuICogICAgICAgYmVybGluOiB7XG4gKiAgICAgICAgICAgdG9wS25vd25Gb3I6IFt7XG4gKiAgICAgICAgICAgICAgIG5hbWU6ICdDdXJyeXd1cnN0J1xuICogICAgICAgICAgIH0sIC4uLlxuICogICAgICAgICAgIF1cbiAqICAgICAgIH1cbiAqICAgfSlcbiAqICAgICAgID0+ICdCZXJsaW4gaXMgYmVzdCBrbm93biBmb3IgaXRzIEN1cnJ5d3Vyc3QnXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGZvcm1hdFRleHQocywgLi4uYXJndikge1xuICAgIGxldCBleHBhbmRlZEZvcm1hdFN0ciA9IHM7XG5cbiAgICAvLyBUcnkgdG8gcmVwbGFjZSBmb3JtYXRzIG9mIHRoZSBmb3JtICckey4uLn0nIGlmIG5hbWVkIHJlcGxhY2VtZW50IGZpZWxkcyBhcmUgdXNlZFxuICAgIGlmIChzICYmIGFyZ3YubGVuZ3RoID09PSAxICYmIHR5cGVvZiBhcmd2WzBdID09PSAnb2JqZWN0Jykge1xuICAgICAgICBjb25zdCB0ZW1wbGF0ZVNwZWNPYmogPSBhcmd2WzBdO1xuXG4gICAgICAgIGV4cGFuZGVkRm9ybWF0U3RyID0gcy5yZXBsYWNlKFJlZ2V4LlRFTVBMQVRFX0xJVEVSQUwsIChtYXRjaCwgcmVwbGFjZW1lbnQpID0+IHtcbiAgICAgICAgICAgIGxldCBpbnRlcnBvbGF0aW9uTGVmdCA9IHJlcGxhY2VtZW50O1xuXG4gICAgICAgICAgICAvKipcbiAgICAgICAgICAgICAqIEludGVycG9sYXRpb24gYWxnb3JpdGhtIGluc3BpcmVkIGJ5IHNwcmludGYtanMuXG4gICAgICAgICAgICAgKlxuICAgICAgICAgICAgICogR29lcyB0aHJvdWdoIHRoZSByZXBsYWNlbWVudCBzdHJpbmcgZ2V0dGluZyB0aGUgbGVmdC1tb3N0IGtleSBvciBpbmRleCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgICogb24gZWFjaCBwYXNzLiBgdmFsdWVgIGF0IGVhY2ggc3RlcCBob2xkcyB0aGUgbGFzdCBpbnRlcnBvbGF0aW9uIHJlc3VsdCwgYGN1ck1hdGNoYCBpc1xuICAgICAgICAgICAgICogdGhlIGN1cnJlbnQgcHJvcGVydHkgbWF0Y2gsIGFuZCBgaW50ZXJwb2xhdGlvbkxlZnRgIGlzIHRoZSBwb3J0aW9uIG9mIHRoZSByZXBsYWNlbWVudFxuICAgICAgICAgICAgICogc3RyaW5nIHN0aWxsIHRvIGJlIGludGVycG9sYXRlZC5cbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBJdCdzIHVzZWZ1bCB0byBub3RlIHRoYXQgUmVnRXhwLmV4ZWMoKSByZXR1cm5zIHdpdGggYW4gYXJyYXkgaG9sZGluZzpcbiAgICAgICAgICAgICAqICAgWzBdOiAgRnVsbCBzdHJpbmcgbWF0Y2hlZFxuICAgICAgICAgICAgICogICBbMStdOiBNYXRjaGluZyBncm91cHNcbiAgICAgICAgICAgICAqXG4gICAgICAgICAgICAgKiBBbmQgdGhhdCBpbiB0aGUgcmVnZXhlcyBkZWZpbmVkLCB0aGUgZmlyc3QgbWF0Y2hpbmcgZ3JvdXAgYWx3YXlzIGNvcnJlc3BvbmRzIHRvIHRoZVxuICAgICAgICAgICAgICogcHJvcGVydHkgbWF0Y2hlZC5cbiAgICAgICAgICAgICAqL1xuICAgICAgICAgICAgbGV0IHZhbHVlO1xuICAgICAgICAgICAgbGV0IGN1ck1hdGNoID0gUmVnZXguS0VZLmV4ZWMoaW50ZXJwb2xhdGlvbkxlZnQpO1xuICAgICAgICAgICAgaWYgKGN1ck1hdGNoICE9PSBudWxsKSB7XG4gICAgICAgICAgICAgICAgdmFsdWUgPSB0ZW1wbGF0ZVNwZWNPYmpbY3VyTWF0Y2hbMV1dO1xuXG4gICAgICAgICAgICAgICAgLy8gQXNzaWduaW5nIGluIHRoZSBjb25kaXRpb25hbHMgaGVyZSBtYWtlcyB0aGUgY29kZSBsZXNzIGJsb2F0ZWRcbiAgICAgICAgICAgICAgICAvKiBlc2xpbnQtZGlzYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgICAgIHdoaWxlICgoaW50ZXJwb2xhdGlvbkxlZnQgPSBpbnRlcnBvbGF0aW9uTGVmdC5zdWJzdHJpbmcoY3VyTWF0Y2hbMF0ubGVuZ3RoKSkgJiZcbiAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgIT0gbnVsbCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoKGN1ck1hdGNoID0gUmVnZXguS0VZX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKChjdXJNYXRjaCA9IFJlZ2V4LklOREVYX0FDQ0VTUy5leGVjKGludGVycG9sYXRpb25MZWZ0KSkpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlID0gdmFsdWVbY3VyTWF0Y2hbMV1dO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgLyogZXNsaW50LWVuYWJsZSBuby1jb25kLWFzc2lnbiAqL1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAvLyBJZiB0aGVyZSdzIGFueXRoaW5nIGxlZnQgdG8gaW50ZXJwb2xhdGUgYnkgdGhlIGVuZCB0aGVuIHdlJ3ZlIGZhaWxlZCB0byBpbnRlcnBvbGF0ZVxuICAgICAgICAgICAgLy8gdGhlIGVudGlyZSByZXBsYWNlbWVudCBzdHJpbmcuXG4gICAgICAgICAgICBpZiAoaW50ZXJwb2xhdGlvbkxlZnQubGVuZ3RoKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFN5bnRheEVycm9yKFxuICAgICAgICAgICAgICAgICAgICBgW2Zvcm1hdFRleHRdIGZhaWxlZCB0byBwYXJzZSBuYW1lZCBhcmd1bWVudCBrZXk6ICR7cmVwbGFjZW1lbnR9YFxuICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICB9XG5cbiAgICAgICAgICAgIHJldHVybiB2YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgfVxuXG4gICAgcmV0dXJuIHNwcmludGYoZXhwYW5kZWRGb3JtYXRTdHIsIC4uLmFyZ3YpO1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9mb3JtYXRfdGV4dC5qcyIsImltcG9ydCBjb3JlSW5jbHVkZXMgZnJvbSAnY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzJztcbmltcG9ydCBjb3JlT2JqZWN0RW50cmllcyBmcm9tICdjb3JlLWpzL2xpYnJhcnkvZm4vb2JqZWN0L2VudHJpZXMnO1xuXG5cbi8qKlxuICogQWJzdHJhY3Rpb24gZm9yIHNlbGVjdEZyb21PYmplY3QgYW5kIG9taXRGcm9tT2JqZWN0IGZvciBEUlluZXNzLlxuICogU2V0IGlzSW5jbHVzaW9uIHRvIHRydWUgaWYgdGhlIGZpbHRlciBzaG91bGQgYmUgZm9yIGluY2x1ZGluZyB0aGUgZmlsdGVyZWQgaXRlbXMgKGllLiBzZWxlY3RpbmdcbiAqIG9ubHkgdGhlbSB2cyBvbWl0dGluZyBvbmx5IHRoZW0pLlxuICovXG5mdW5jdGlvbiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyLCB7IGlzSW5jbHVzaW9uID0gdHJ1ZSB9ID0ge30pIHtcbiAgICBpZiAoZmlsdGVyICYmIEFycmF5LmlzQXJyYXkoZmlsdGVyKSkge1xuICAgICAgICByZXR1cm4gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGlzSW5jbHVzaW9uID8gKChfLCBrZXkpID0+IGNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiAoKF8sIGtleSkgPT4gIWNvcmVJbmNsdWRlcyhmaWx0ZXIsIGtleSkpKTtcbiAgICB9IGVsc2UgaWYgKGZpbHRlciAmJiB0eXBlb2YgZmlsdGVyID09PSAnZnVuY3Rpb24nKSB7XG4gICAgICAgIC8vIEZsaXAgdGhlIGZpbHRlciBmbidzIHJldHVybiBpZiBpdCdzIGZvciBpbmNsdXNpb25cbiAgICAgICAgcmV0dXJuIGFwcGx5RmlsdGVyT25PYmplY3Qob2JqLCBpc0luY2x1c2lvbiA/IGZpbHRlclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDogKC4uLmFyZ3MpID0+ICFmaWx0ZXIoLi4uYXJncykpO1xuICAgIH0gZWxzZSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGdpdmVuIGZpbHRlciBpcyBub3QgYW4gYXJyYXkgb3IgZnVuY3Rpb24uIEV4Y2x1ZGUgYWJvcnRlZCcpO1xuICAgIH1cbn1cblxuLyoqXG4gKiBSZXR1cm5zIGEgZmlsdGVyZWQgY29weSBvZiB0aGUgZ2l2ZW4gb2JqZWN0J3Mgb3duIGVudW1lcmFibGUgcHJvcGVydGllcyAobm8gaW5oZXJpdGVkXG4gKiBwcm9wZXJ0aWVzKSwga2VlcGluZyBhbnkga2V5cyB0aGF0IHBhc3MgdGhlIGdpdmVuIGZpbHRlciBmdW5jdGlvbi5cbiAqL1xuZnVuY3Rpb24gYXBwbHlGaWx0ZXJPbk9iamVjdChvYmosIGZpbHRlckZuKSB7XG4gICAgaWYgKGZpbHRlckZuID09IG51bGwpIHtcbiAgICAgICAgcmV0dXJuIE9iamVjdC5hc3NpZ24oe30sIG9iaik7XG4gICAgfVxuXG4gICAgY29uc3QgZmlsdGVyZWRPYmogPSB7fTtcbiAgICBjb3JlT2JqZWN0RW50cmllcyhvYmopLmZvckVhY2goKFtrZXksIHZhbF0pID0+IHtcbiAgICAgICAgaWYgKGZpbHRlckZuKHZhbCwga2V5KSkge1xuICAgICAgICAgICAgZmlsdGVyZWRPYmpba2V5XSA9IHZhbDtcbiAgICAgICAgfVxuICAgIH0pO1xuXG4gICAgcmV0dXJuIGZpbHRlcmVkT2JqO1xufVxuXG4vKipcbiAqIFNpbWlsYXIgdG8gbG9kYXNoJ3MgXy5waWNrKCksIHRoaXMgcmV0dXJucyBhIGNvcHkgb2YgdGhlIGdpdmVuIG9iamVjdCdzXG4gKiBvd24gYW5kIGluaGVyaXRlZCBlbnVtZXJhYmxlIHByb3BlcnRpZXMsIHNlbGVjdGluZyBvbmx5IHRoZSBrZXlzIGluXG4gKiB0aGUgZ2l2ZW4gYXJyYXkgb3Igd2hvc2UgdmFsdWUgcGFzcyB0aGUgZ2l2ZW4gZmlsdGVyIGZ1bmN0aW9uLlxuICogQHBhcmFtICB7b2JqZWN0fSAgICAgICAgIG9iaiAgICBTb3VyY2Ugb2JqZWN0XG4gKiBAcGFyYW0gIHthcnJheXxmdW5jdGlvbn0gZmlsdGVyIEFycmF5IG9mIGtleSBuYW1lcyB0byBzZWxlY3Qgb3IgZnVuY3Rpb24gdG8gaW52b2tlIHBlciBpdGVyYXRpb25cbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgICAgICAgVGhlIG5ldyBvYmplY3RcbiAqL1xuZnVuY3Rpb24gc2VsZWN0RnJvbU9iamVjdChvYmosIGZpbHRlcikge1xuICAgIHJldHVybiBmaWx0ZXJGcm9tT2JqZWN0KG9iaiwgZmlsdGVyKTtcbn1cblxuLyoqXG4gKiBHbG9yaWZpZWQgc2VsZWN0RnJvbU9iamVjdC4gVGFrZXMgYW4gb2JqZWN0IGFuZCByZXR1cm5zIGEgZmlsdGVyZWQgc2hhbGxvdyBjb3B5IHRoYXQgc3RyaXBzIG91dFxuICogYW55IHByb3BlcnRpZXMgdGhhdCBhcmUgZmFsc3kgKGluY2x1ZGluZyBjb2VyY2lvbnMsIGllLiB1bmRlZmluZWQsIG51bGwsICcnLCAwLCAuLi4pLlxuICogRG9lcyBub3QgbW9kaWZ5IHRoZSBwYXNzZWQgaW4gb2JqZWN0LlxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gb2JqICAgICAgSmF2YXNjcmlwdCBvYmplY3RcbiAqIEByZXR1cm4ge29iamVjdH0gICAgICAgICAgU2FuaXRpemVkIEphdmFzY3JpcHQgb2JqZWN0XG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNhbml0aXplKG9iaikge1xuICAgIHJldHVybiBzZWxlY3RGcm9tT2JqZWN0KG9iaiwgKHZhbCkgPT4gISF2YWwpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3Nhbml0aXplLmpzIiwiaW1wb3J0IHNoYTMgZnJvbSAnanMtc2hhMyc7XG5cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYTI1Nkhhc2goZGF0YSkge1xuICAgIHJldHVybiBzaGEzLnNoYTNfMjU2XG4gICAgICAgIC5jcmVhdGUoKVxuICAgICAgICAudXBkYXRlKGRhdGEpXG4gICAgICAgIC5oZXgoKTtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy9zaGEyNTZIYXNoLmpzIiwiaW1wb3J0IGNvcmVPYmplY3RFbnRyaWVzIGZyb20gJ2NvcmUtanMvbGlicmFyeS9mbi9vYmplY3QvZW50cmllcyc7XG5pbXBvcnQgZGVjYW1lbGl6ZSBmcm9tICdkZWNhbWVsaXplJztcbmltcG9ydCBxdWVyeVN0cmluZyBmcm9tICdxdWVyeS1zdHJpbmcnO1xuXG5cbi8qKlxuICogaW1wb3J0ZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vYmlnY2hhaW5kYi9qcy11dGlsaXR5LWJlbHQvXG4gKlxuICogVGFrZXMgYSBrZXktdmFsdWUgZGljdGlvbmFyeSAoaWUuIG9iamVjdCkgYW5kIGNvbnZlcnRzIGl0IHRvIGEgcXVlcnktcGFyYW1ldGVyIHN0cmluZyB0aGF0IHlvdVxuICogY2FuIGRpcmVjdGx5IGFwcGVuZCBpbnRvIGEgVVJMLlxuICpcbiAqIEV4dGVuZHMgcXVlcnlTdHJpbmcuc3RyaW5naWZ5IGJ5IGFsbG93aW5nIHlvdSB0byBzcGVjaWZ5IGEgYHRyYW5zZm9ybWAgZnVuY3Rpb24gdGhhdCB3aWxsIGJlXG4gKiBpbnZva2VkIG9uIGVhY2ggb2YgdGhlIGRpY3Rpb25hcnkncyBrZXlzIGJlZm9yZSBiZWluZyBzdHJpbmdpZmllZCBpbnRvIHRoZSBxdWVyeS1wYXJhbWV0ZXJcbiAqIHN0cmluZy5cbiAqXG4gKiBCeSBkZWZhdWx0IGB0cmFuc2Zvcm1gIGlzIGBkZWNhbWVsaXplYCwgc28gYSBkaWN0aW9uYXJ5IG9mIHRoZSBmb3JtOlxuICpcbiAqICAge1xuICogICAgICBwYWdlOiAxLFxuICogICAgICBwYWdlU2l6ZTogMTBcbiAqICAgfVxuICpcbiAqIHdpbGwgYmUgY29udmVydGVkIHRvIGEgc3RyaW5nIGxpa2U6XG4gKlxuICogICA/cGFnZT0xJnBhZ2Vfc2l6ZT0xMFxuICpcbiAqIEBwYXJhbSAge29iamVjdH0gICBvYmogICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtcyBkaWN0aW9uYXJ5XG4gKiBAcGFyYW0gIHtmdW5jdGlvbn0gW3RyYW5zZm9ybT1kZWNhbWVsaXplXSBUcmFuc2Zvcm0gZnVuY3Rpb24gZm9yIGVhY2ggb2YgdGhlIHBhcmFtIGtleXNcbiAqIEByZXR1cm4ge3N0cmluZ30gICAgICAgICAgICAgICAgICAgICAgICAgIFF1ZXJ5IHBhcmFtIHN0cmluZ1xuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzdHJpbmdpZnlBc1F1ZXJ5UGFyYW0ob2JqLCB0cmFuc2Zvcm0gPSBkZWNhbWVsaXplKSB7XG4gICAgaWYgKCFvYmogfHwgdHlwZW9mIG9iaiAhPT0gJ29iamVjdCcgfHwgIU9iamVjdC5rZXlzKG9iaikubGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiAnJztcbiAgICB9XG5cbiAgICBjb25zdCB0cmFuc2Zvcm1lZEtleXNPYmogPSBjb3JlT2JqZWN0RW50cmllcyhvYmopLnJlZHVjZSgocGFyYW1zT2JqLCBba2V5LCB2YWx1ZV0pID0+IHtcbiAgICAgICAgcGFyYW1zT2JqW3RyYW5zZm9ybShrZXkpXSA9IHZhbHVlO1xuICAgICAgICByZXR1cm4gcGFyYW1zT2JqO1xuICAgIH0sIHt9KTtcblxuICAgIHJldHVybiBgPyR7cXVlcnlTdHJpbmcuc3RyaW5naWZ5KHRyYW5zZm9ybWVkS2V5c09iail9YDtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvc3RyaW5naWZ5X2FzX3F1ZXJ5X3BhcmFtLmpzIiwiaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5pbXBvcnQgc2hhMjU2SGFzaCBmcm9tICcuLi9zaGEyNTZIYXNoJztcblxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaGFzaFRyYW5zYWN0aW9uKHRyYW5zYWN0aW9uKSB7XG4gICAgLy8gU2FmZWx5IHJlbW92ZSBhbnkgdHggaWQgZnJvbSB0aGUgZ2l2ZW4gdHJhbnNhY3Rpb24gZm9yIGhhc2hpbmdcbiAgICBjb25zdCB0eCA9IHsgLi4udHJhbnNhY3Rpb24gfTtcbiAgICBkZWxldGUgdHguaWQ7XG5cbiAgICByZXR1cm4gc2hhMjU2SGFzaChzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHgpKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vaGFzaFRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBDUkVBVEVgIHRyYW5zYWN0aW9uIGhvbGRpbmcgdGhlIGBhc3NldGAsIGBtZXRhZGF0YWAsIGFuZCBgb3V0cHV0c2AsIHRvIGJlIHNpZ25lZCBieVxuICogdGhlIGBpc3N1ZXJzYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSBhc3NldCBDcmVhdGVkIGFzc2V0J3MgZGF0YVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBDUkVBVEVgIFRyYW5zYWN0aW9ucywgdGhpcyBzaG91bGQgdXN1YWxseSBqdXN0IGJlIGEgbGlzdCBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXRzIHdyYXBwaW5nIEVkMjU1MTkgQ29uZGl0aW9ucyBnZW5lcmF0ZWQgZnJvbSB0aGUgaXNzdWVycycgcHVibGljXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIGtleXMgKHNvIHRoYXQgdGhlIGlzc3VlcnMgYXJlIHRoZSByZWNpcGllbnRzIG9mIHRoZSBjcmVhdGVkIGFzc2V0KS5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nW119IGlzc3VlcnMgUHVibGljIGtleSBvZiBvbmUgb3IgbW9yZSBpc3N1ZXJzIHRvIHRoZSBhc3NldCBiZWluZyBjcmVhdGVkIGJ5IHRoaXNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHJhbnNhY3Rpb24uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGU6IEVhY2ggb2YgdGhlIHByaXZhdGUga2V5cyBjb3JyZXNwb25kaW5nIHRvIHRoZSBnaXZlbiBwdWJsaWNcbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAga2V5cyBNVVNUIGJlIHVzZWQgbGF0ZXIgKGFuZCBpbiB0aGUgc2FtZSBvcmRlcikgd2hlbiBzaWduaW5nIHRoZVxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlQ3JlYXRlVHJhbnNhY3Rpb24oYXNzZXQsIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5pc3N1ZXJzKSB7XG4gICAgY29uc3QgYXNzZXREZWZpbml0aW9uID0ge1xuICAgICAgICAnZGF0YSc6IGFzc2V0IHx8IG51bGwsXG4gICAgfTtcbiAgICBjb25zdCBpbnB1dHMgPSBpc3N1ZXJzLm1hcCgoaXNzdWVyKSA9PiBtYWtlSW5wdXRUZW1wbGF0ZShbaXNzdWVyXSkpO1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignQ1JFQVRFJywgYXNzZXREZWZpbml0aW9uLCBtZXRhZGF0YSwgb3V0cHV0cywgaW5wdXRzKTtcbn1cblxuXG4vLyBXRUJQQUNLIEZPT1RFUiAvL1xuLy8gLi9zcmMvdHJhbnNhY3Rpb24vbWFrZUNyZWF0ZVRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGJhc2U1OCBmcm9tICdiczU4JztcbmltcG9ydCBjYyBmcm9tICdmaXZlLWJlbGxzLWNvbmRpdGlvbic7XG5cbmltcG9ydCBjY0pzb25pZnkgZnJvbSAnLi91dGlscy9jY0pzb25pZnknO1xuXG5cbi8qKlxuICogQHB1YmxpY1xuICogQ3JlYXRlIGFuIEVkMjU1MTkgQ3J5cHRvY29uZGl0aW9uIGZyb20gYW4gRWQyNTUxOSBwdWJsaWMga2V5IHRvIHB1dCBpbnRvIGFuIE91dHB1dCBvZiBhIFRyYW5zYWN0aW9uXG4gKiBAcGFyYW0ge3N0cmluZ30gcHVibGljS2V5IGJhc2U1OCBlbmNvZGVkIEVkMjU1MTkgcHVibGljIGtleSBmb3IgdGhlIHJlY2lwaWVudCBvZiB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2pzb249dHJ1ZV0gSWYgdHJ1ZSByZXR1cm5zIGEganNvbiBvYmplY3Qgb3RoZXJ3aXNlIGEgY3J5cHRvLWNvbmRpdGlvbiB0eXBlXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VFZDI1NTE5Q29uZGl0aW9uKHB1YmxpY0tleSwganNvbj10cnVlKSB7XG4gICAgY29uc3QgcHVibGljS2V5QnVmZmVyID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKHB1YmxpY0tleSkpO1xuXG4gICAgY29uc3QgZWQyNTUxOUZ1bGZpbGxtZW50ID0gbmV3IGNjLkVkMjU1MTkoKTtcbiAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2V0UHVibGljS2V5KHB1YmxpY0tleUJ1ZmZlcik7XG5cbiAgICBpZiAoanNvbikge1xuICAgICAgICByZXR1cm4gY2NKc29uaWZ5KGVkMjU1MTlGdWxmaWxsbWVudClcbiAgICB9XG5cbiAgICByZXR1cm4gZWQyNTUxOUZ1bGZpbGxtZW50O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VFZDI1NTE5Q29uZGl0aW9uLmpzIiwiLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gT3V0cHV0IGZyb20gYSBDb25kaXRpb24uXG4gKiBOb3RlOiBBc3N1bWVzIHRoZSBnaXZlbiBDb25kaXRpb24gd2FzIGdlbmVyYXRlZCBmcm9tIGEgc2luZ2xlIHB1YmxpYyBrZXkgKGUuZy4gYSBFZDI1NTE5IENvbmRpdGlvbilcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb24gQ29uZGl0aW9uIChlLmcuIGEgRWQyNTUxOSBDb25kaXRpb24gZnJvbSBgbWFrZUVkMjU1MTlDb25kaXRpb24oKWApXG4gKiBAcGFyYW0ge251bWJlcn0gYW1vdW50IEFtb3VudCBvZiB0aGUgb3V0cHV0XG4gKiBAcmV0dXJucyB7b2JqZWN0fSBBbiBPdXRwdXQgdXNhYmxlIGluIGEgVHJhbnNhY3Rpb25cbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZU91dHB1dChjb25kaXRpb24sIGFtb3VudCA9IDEpIHtcbiAgICByZXR1cm4ge1xuICAgICAgICBhbW91bnQ6IEpTT04uc3RyaW5naWZ5KGFtb3VudCksXG4gICAgICAgIGNvbmRpdGlvbixcbiAgICAgICAgJ3B1YmxpY19rZXlzJzogY29uZGl0aW9uLmRldGFpbHMuaGFzT3duUHJvcGVydHkoJ3B1YmxpY19rZXknKSA/XG4gICAgICAgICAgICBbY29uZGl0aW9uLmRldGFpbHMucHVibGljX2tleV0gOiBbXSxcbiAgICB9O1xufVxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlT3V0cHV0LmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYSBQcmVpbWFnZS1TaGEyNTYgQ3J5cHRvY29uZGl0aW9uIGZyb20gYSBzZWNyZXQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7c3RyaW5nfSBwcmVpbWFnZSBQcmVpbWFnZSB0byBiZSBoYXNoZWQgYW5kIHdyYXBwZWQgaW4gYSBjcnlwdG8tY29uZGl0aW9uXG4gKiBAcGFyYW0ge2Jvb2xlYW59IFtqc29uPXRydWVdIElmIHRydWUgcmV0dXJucyBhIGpzb24gb2JqZWN0IG90aGVyd2lzZSBhIGNyeXB0by1jb25kaXRpb24gdHlwZVxuICogQHJldHVybnMge29iamVjdH0gUHJlaW1hZ2UtU2hhMjU2IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIG1ha2VTaGEyNTZDb25kaXRpb24ocHJlaW1hZ2UsIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHNoYTI1NkZ1bGZpbGxtZW50ID0gbmV3IGNjLlByZWltYWdlU2hhMjU2KCk7XG4gICAgc2hhMjU2RnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKHByZWltYWdlKTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkoc2hhMjU2RnVsZmlsbG1lbnQpXG4gICAgfVxuICAgIHJldHVybiBzaGEyNTZGdWxmaWxsbWVudDtcbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlU2hhMjU2Q29uZGl0aW9uLmpzIiwiaW1wb3J0IGNjIGZyb20gJ2ZpdmUtYmVsbHMtY29uZGl0aW9uJztcblxuaW1wb3J0IGNjSnNvbmlmeSBmcm9tICcuL3V0aWxzL2NjSnNvbmlmeSc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBDcmVhdGUgYW4gU2hhMjU2IFRocmVzaG9sZCBDcnlwdG9jb25kaXRpb24gZnJvbSB0aHJlc2hvbGQgdG8gcHV0IGludG8gYW4gT3V0cHV0IG9mIGEgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSB0aHJlc2hvbGRcbiAqIEBwYXJhbSB7QXJyYXl9IFtzdWJjb25kaXRpb25zPVtdXVxuICogQHBhcmFtIHtib29sZWFufSBbanNvbj10cnVlXSBJZiB0cnVlIHJldHVybnMgYSBqc29uIG9iamVjdCBvdGhlcndpc2UgYSBjcnlwdG8tY29uZGl0aW9uIHR5cGVcbiAqIEByZXR1cm5zIHtvYmplY3R9IFNoYTI1NiBUaHJlc2hvbGQgQ29uZGl0aW9uICh0aGF0IHdpbGwgbmVlZCB0byB3cmFwcGVkIGluIGFuIE91dHB1dClcbiAqL1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbWFrZVRocmVzaG9sZENvbmRpdGlvbih0aHJlc2hvbGQsIHN1YmNvbmRpdGlvbnM9W10sIGpzb249dHJ1ZSkge1xuICAgIGNvbnN0IHRocmVzaG9sZENvbmRpdGlvbiA9IG5ldyBjYy5UaHJlc2hvbGRTaGEyNTYoKTtcbiAgICB0aHJlc2hvbGRDb25kaXRpb24udGhyZXNob2xkID0gdGhyZXNob2xkO1xuXG4gICAgc3ViY29uZGl0aW9ucy5mb3JFYWNoKChzdWJjb25kaXRpb24pID0+IHtcbiAgICAgICAgLy8gVE9ETzogYWRkIHN1cHBvcnQgZm9yIENvbmRpdGlvbiBhbmQgVVJJc1xuICAgICAgICB0aHJlc2hvbGRDb25kaXRpb24uYWRkU3ViZnVsZmlsbG1lbnQoc3ViY29uZGl0aW9uKTtcbiAgICB9KTtcblxuICAgIGlmIChqc29uKSB7XG4gICAgICAgIHJldHVybiBjY0pzb25pZnkodGhyZXNob2xkQ29uZGl0aW9uKVxuICAgIH1cblxuICAgIHJldHVybiB0aHJlc2hvbGRDb25kaXRpb25cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi9tYWtlVGhyZXNob2xkQ29uZGl0aW9uLmpzIiwiaW1wb3J0IG1ha2VJbnB1dFRlbXBsYXRlIGZyb20gJy4vbWFrZUlucHV0VGVtcGxhdGUnO1xuaW1wb3J0IG1ha2VUcmFuc2FjdGlvbiBmcm9tICcuL21ha2VUcmFuc2FjdGlvbic7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBHZW5lcmF0ZSBhIGBUUkFOU0ZFUmAgdHJhbnNhY3Rpb24gaG9sZGluZyB0aGUgYGFzc2V0YCwgYG1ldGFkYXRhYCwgYW5kIGBvdXRwdXRzYCwgdGhhdCBmdWxmaWxsc1xuICogdGhlIGBmdWxmaWxsZWRPdXRwdXRzYCBvZiBgdW5zcGVudFRyYW5zYWN0aW9uYC5cbiAqIEBwYXJhbSB7b2JqZWN0fSB1bnNwZW50VHJhbnNhY3Rpb24gUHJldmlvdXMgVHJhbnNhY3Rpb24geW91IGhhdmUgY29udHJvbCBvdmVyIChpLmUuIGNhbiBmdWxmaWxsXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGl0cyBPdXRwdXQgQ29uZGl0aW9uKVxuICogQHBhcmFtIHtvYmplY3R9IG1ldGFkYXRhIE1ldGFkYXRhIGZvciB0aGUgVHJhbnNhY3Rpb25cbiAqIEBwYXJhbSB7b2JqZWN0W119IG91dHB1dHMgQXJyYXkgb2YgT3V0cHV0IG9iamVjdHMgdG8gYWRkIHRvIHRoZSBUcmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgVGhpbmsgb2YgdGhlc2UgYXMgdGhlIHJlY2lwaWVudHMgb2YgdGhlIGFzc2V0IGFmdGVyIHRoZSB0cmFuc2FjdGlvbi5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgRm9yIGBUUkFOU0ZFUmAgVHJhbnNhY3Rpb25zLCB0aGlzIHNob3VsZCB1c3VhbGx5IGp1c3QgYmUgYSBsaXN0IG9mXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dHMgd3JhcHBpbmcgRWQyNTUxOSBDb25kaXRpb25zIGdlbmVyYXRlZCBmcm9tIHRoZSBwdWJsaWMga2V5cyBvZlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICB0aGUgcmVjaXBpZW50cy5cbiAqIEBwYXJhbSB7Li4ubnVtYmVyfSBmdWxmaWxsZWRPdXRwdXRzIEluZGljZXMgb2YgdGhlIE91dHB1dHMgaW4gYHVuc3BlbnRUcmFuc2FjdGlvbmAgdGhhdCB0aGlzXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUcmFuc2FjdGlvbiBmdWxmaWxscy5cbiAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE5vdGUgdGhhdCB0aGUgcHVibGljIGtleXMgbGlzdGVkIGluIHRoZSBmdWxmaWxsZWQgT3V0cHV0c1xuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbXVzdCBiZSB1c2VkIChhbmQgaW4gdGhlIHNhbWUgb3JkZXIpIHRvIHNpZ24gdGhlIFRyYW5zYWN0aW9uXG4gKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoYHNpZ25UcmFuc2FjdGlvbigpYCkuXG4gKiBAcmV0dXJucyB7b2JqZWN0fSBVbnNpZ25lZCB0cmFuc2FjdGlvbiAtLSBtYWtlIHN1cmUgdG8gY2FsbCBzaWduVHJhbnNhY3Rpb24oKSBvbiBpdCBiZWZvcmVcbiAqICAgICAgICAgICAgICAgICAgIHNlbmRpbmcgaXQgb2ZmIVxuICovXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBtYWtlVHJhbnNmZXJUcmFuc2FjdGlvbih1bnNwZW50VHJhbnNhY3Rpb24sIG1ldGFkYXRhLCBvdXRwdXRzLCAuLi5mdWxmaWxsZWRPdXRwdXRzKSB7XG4gICAgY29uc3QgaW5wdXRzID0gZnVsZmlsbGVkT3V0cHV0cy5tYXAoKG91dHB1dEluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IGZ1bGZpbGxlZE91dHB1dCA9IHVuc3BlbnRUcmFuc2FjdGlvbi5vdXRwdXRzW291dHB1dEluZGV4XTtcbiAgICAgICAgY29uc3QgdHJhbnNhY3Rpb25MaW5rID0ge1xuICAgICAgICAgICAgJ291dHB1dCc6IG91dHB1dEluZGV4LFxuICAgICAgICAgICAgJ3R4aWQnOiB1bnNwZW50VHJhbnNhY3Rpb24uaWQsXG4gICAgICAgIH07XG5cbiAgICAgICAgcmV0dXJuIG1ha2VJbnB1dFRlbXBsYXRlKGZ1bGZpbGxlZE91dHB1dC5wdWJsaWNfa2V5cywgdHJhbnNhY3Rpb25MaW5rKTtcbiAgICB9KTtcblxuICAgIGNvbnN0IGFzc2V0TGluayA9IHtcbiAgICAgICAgJ2lkJzogdW5zcGVudFRyYW5zYWN0aW9uLm9wZXJhdGlvbiA9PT0gJ0NSRUFURScgPyB1bnNwZW50VHJhbnNhY3Rpb24uaWRcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgOiB1bnNwZW50VHJhbnNhY3Rpb24uYXNzZXQuaWRcbiAgICB9O1xuXG4gICAgcmV0dXJuIG1ha2VUcmFuc2FjdGlvbignVFJBTlNGRVInLCBhc3NldExpbmssIG1ldGFkYXRhLCBvdXRwdXRzLCBpbnB1dHMpO1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL21ha2VUcmFuc2ZlclRyYW5zYWN0aW9uLmpzIiwiaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcbmltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IGNsb25lIGZyb20gJ2Nsb25lJztcblxuaW1wb3J0IHNlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyBmcm9tICcuL3NlcmlhbGl6ZVRyYW5zYWN0aW9uSW50b0Nhbm9uaWNhbFN0cmluZyc7XG5cblxuLyoqXG4gKiBAcHVibGljXG4gKiBTaWduIHRoZSBnaXZlbiBgdHJhbnNhY3Rpb25gIHdpdGggdGhlIGdpdmVuIGBwcml2YXRlS2V5YHMsIHJldHVybmluZyBhIG5ldyBjb3B5IG9mIGB0cmFuc2FjdGlvbmBcbiAqIHRoYXQncyBiZWVuIHNpZ25lZC5cbiAqIE5vdGU6IE9ubHkgZ2VuZXJhdGVzIEVkMjU1MTkgRnVsZmlsbG1lbnRzLiBUaHJlc2hvbGRzIGFuZCBvdGhlciB0eXBlcyBvZiBGdWxmaWxsbWVudHMgYXJlIGxlZnQgYXNcbiAqIGFuIGV4ZXJjaXNlIGZvciB0aGUgdXNlci5cbiAqIEBwYXJhbSB7b2JqZWN0fSB0cmFuc2FjdGlvbiBUcmFuc2FjdGlvbiB0byBzaWduLiBgdHJhbnNhY3Rpb25gIGlzIG5vdCBtb2RpZmllZC5cbiAqIEBwYXJhbSB7Li4uc3RyaW5nfSBwcml2YXRlS2V5cyBQcml2YXRlIGtleXMgYXNzb2NpYXRlZCB3aXRoIHRoZSBpc3N1ZXJzIG9mIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExvb3BlZCB0aHJvdWdoIHRvIGl0ZXJhdGl2ZWx5IHNpZ24gYW55IElucHV0IEZ1bGZpbGxtZW50cyBmb3VuZCBpblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoZSBgdHJhbnNhY3Rpb25gLlxuICogQHJldHVybnMge29iamVjdH0gVGhlIHNpZ25lZCB2ZXJzaW9uIG9mIGB0cmFuc2FjdGlvbmAuXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNpZ25UcmFuc2FjdGlvbih0cmFuc2FjdGlvbiwgLi4ucHJpdmF0ZUtleXMpIHtcbiAgICBjb25zdCBzaWduZWRUeCA9IGNsb25lKHRyYW5zYWN0aW9uKTtcbiAgICBzaWduZWRUeC5pbnB1dHMuZm9yRWFjaCgoaW5wdXQsIGluZGV4KSA9PiB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXkgPSBwcml2YXRlS2V5c1tpbmRleF07XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlCdWZmZXIgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUocHJpdmF0ZUtleSkpO1xuICAgICAgICBjb25zdCBzZXJpYWxpemVkVHJhbnNhY3Rpb24gPSBzZXJpYWxpemVUcmFuc2FjdGlvbkludG9DYW5vbmljYWxTdHJpbmcodHJhbnNhY3Rpb24pO1xuICAgICAgICBjb25zdCBlZDI1NTE5RnVsZmlsbG1lbnQgPSBuZXcgY2MuRWQyNTUxOSgpO1xuICAgICAgICBlZDI1NTE5RnVsZmlsbG1lbnQuc2lnbihuZXcgQnVmZmVyKHNlcmlhbGl6ZWRUcmFuc2FjdGlvbiksIHByaXZhdGVLZXlCdWZmZXIpO1xuICAgICAgICBjb25zdCBmdWxmaWxsbWVudFVyaSA9IGVkMjU1MTlGdWxmaWxsbWVudC5zZXJpYWxpemVVcmkoKTtcblxuICAgICAgICBpbnB1dC5mdWxmaWxsbWVudCA9IGZ1bGZpbGxtZW50VXJpO1xuICAgIH0pO1xuXG4gICAgcmV0dXJuIHNpZ25lZFR4O1xufVxuXG5cblxuLy8gV0VCUEFDSyBGT09URVIgLy9cbi8vIC4vc3JjL3RyYW5zYWN0aW9uL3NpZ25UcmFuc2FjdGlvbi5qcyIsImltcG9ydCBiYXNlNTggZnJvbSAnYnM1OCc7XG5pbXBvcnQgY2MgZnJvbSAnZml2ZS1iZWxscy1jb25kaXRpb24nO1xuaW1wb3J0IHsgQnVmZmVyIH0gZnJvbSAnYnVmZmVyJztcblxuLyoqXG4gKiBAcHVibGljXG4gKiBMb2FkcyBhIGNyeXB0by1jb25kaXRpb24gY2xhc3MgKEZ1bGZpbGxtZW50IG9yIENvbmRpdGlvbikgZnJvbSBhIEJpZ2NoYWluREIgSlNPTiBvYmplY3RcbiAqIEBwYXJhbSB7b2JqZWN0fSBjb25kaXRpb25Kc29uXG4gKiBAcmV0dXJucyB7Y2MuQ29uZGl0aW9ufSBFZDI1NTE5IENvbmRpdGlvbiAodGhhdCB3aWxsIG5lZWQgdG8gd3JhcHBlZCBpbiBhbiBPdXRwdXQpXG4gKi9cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGNjSnNvbkxvYWQoY29uZGl0aW9uSnNvbikge1xuXG4gICAgaWYgKCdoYXNoJyBpbiBjb25kaXRpb25Kc29uKSB7XG4gICAgICAgIGxldCBjb25kaXRpb24gPSBuZXcgY2MuQ29uZGl0aW9uKCk7XG4gICAgICAgIGNvbmRpdGlvbi50eXBlID0gY29uZGl0aW9uSnNvbi50eXBlX2lkO1xuICAgICAgICBjb25kaXRpb24uYml0bWFzayA9IGNvbmRpdGlvbkpzb24uYml0bWFzaztcbiAgICAgICAgY29uZGl0aW9uLmhhc2ggPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5oYXNoKSk7XG4gICAgICAgIGNvbmRpdGlvbi5tYXhGdWxmaWxsbWVudExlbmd0aCA9IHBhcnNlSW50KGNvbmRpdGlvbkpzb24ubWF4X2Z1bGZpbGxtZW50X2xlbmd0aCwgMTApO1xuICAgICAgICByZXR1cm4gY29uZGl0aW9uXG4gICAgfSBlbHNlIHtcbiAgICAgICAgbGV0IGZ1bGZpbGxtZW50O1xuXG4gICAgICAgIGlmIChjb25kaXRpb25Kc29uLnR5cGVfaWQgPT09IDIpIHtcbiAgICAgICAgICAgIGZ1bGZpbGxtZW50ID0gbmV3IGNjLlRocmVzaG9sZFNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQudGhyZXNob2xkID0gY29uZGl0aW9uSnNvbi50aHJlc2hvbGQ7XG4gICAgICAgICAgICBjb25kaXRpb25Kc29uLnN1YmZ1bGZpbGxtZW50cy5mb3JFYWNoKChzdWJmdWxmaWxsbWVudCkgPT4ge1xuICAgICAgICAgICAgICAgIHN1YmZ1bGZpbGxtZW50ID0gY2NKc29uTG9hZChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgaWYgKCdnZXRDb25kaXRpb25VcmknIGluIHN1YmZ1bGZpbGxtZW50KVxuICAgICAgICAgICAgICAgICAgICBmdWxmaWxsbWVudC5hZGRTdWJmdWxmaWxsbWVudChzdWJmdWxmaWxsbWVudCk7XG4gICAgICAgICAgICAgICAgZWxzZSBpZiAoJ3NlcmlhbGl6ZVVyaScgaW4gc3ViZnVsZmlsbG1lbnQpXG4gICAgICAgICAgICAgICAgICAgIGZ1bGZpbGxtZW50LmFkZFN1YmNvbmRpdGlvbihzdWJmdWxmaWxsbWVudClcbiAgICAgICAgICAgIH0pXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSAwKSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5QcmVpbWFnZVNoYTI1NigpO1xuICAgICAgICAgICAgZnVsZmlsbG1lbnQucHJlaW1hZ2UgPSBuZXcgQnVmZmVyKGNvbmRpdGlvbkpzb24ucHJlaW1hZ2UpO1xuXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi50eXBlX2lkID09PSA0KSB7XG4gICAgICAgICAgICBmdWxmaWxsbWVudCA9IG5ldyBjYy5FZDI1NTE5KCk7XG4gICAgICAgICAgICBmdWxmaWxsbWVudC5wdWJsaWNLZXkgPSBuZXcgQnVmZmVyKGJhc2U1OC5kZWNvZGUoY29uZGl0aW9uSnNvbi5wdWJsaWNfa2V5KSk7XG4gICAgICAgICAgICBpZiAoY29uZGl0aW9uSnNvbi5zaWduYXR1cmUpXG4gICAgICAgICAgICAgICAgZnVsZmlsbG1lbnQuc2lnbmF0dXJlID0gbmV3IEJ1ZmZlcihiYXNlNTguZGVjb2RlKGNvbmRpdGlvbkpzb24uc2lnbmF0dXJlKSk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIGZ1bGZpbGxtZW50O1xuICAgIH1cbn1cblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyAuL3NyYy90cmFuc2FjdGlvbi91dGlscy9jY0pzb25Mb2FkLmpzIiwiLy8gYmFzZS14IGVuY29kaW5nXG4vLyBGb3JrZWQgZnJvbSBodHRwczovL2dpdGh1Yi5jb20vY3J5cHRvY29pbmpzL2JzNThcbi8vIE9yaWdpbmFsbHkgd3JpdHRlbiBieSBNaWtlIEhlYXJuIGZvciBCaXRjb2luSlxuLy8gQ29weXJpZ2h0IChjKSAyMDExIEdvb2dsZSBJbmNcbi8vIFBvcnRlZCB0byBKYXZhU2NyaXB0IGJ5IFN0ZWZhbiBUaG9tYXNcbi8vIE1lcmdlZCBCdWZmZXIgcmVmYWN0b3JpbmdzIGZyb20gYmFzZTU4LW5hdGl2ZSBieSBTdGVwaGVuIFBhaXJcbi8vIENvcHlyaWdodCAoYykgMjAxMyBCaXRQYXkgSW5jXG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gYmFzZSAoQUxQSEFCRVQpIHtcbiAgdmFyIEFMUEhBQkVUX01BUCA9IHt9XG4gIHZhciBCQVNFID0gQUxQSEFCRVQubGVuZ3RoXG4gIHZhciBMRUFERVIgPSBBTFBIQUJFVC5jaGFyQXQoMClcblxuICAvLyBwcmUtY29tcHV0ZSBsb29rdXAgdGFibGVcbiAgZm9yICh2YXIgeiA9IDA7IHogPCBBTFBIQUJFVC5sZW5ndGg7IHorKykge1xuICAgIHZhciB4ID0gQUxQSEFCRVQuY2hhckF0KHopXG5cbiAgICBpZiAoQUxQSEFCRVRfTUFQW3hdICE9PSB1bmRlZmluZWQpIHRocm93IG5ldyBUeXBlRXJyb3IoeCArICcgaXMgYW1iaWd1b3VzJylcbiAgICBBTFBIQUJFVF9NQVBbeF0gPSB6XG4gIH1cblxuICBmdW5jdGlvbiBlbmNvZGUgKHNvdXJjZSkge1xuICAgIGlmIChzb3VyY2UubGVuZ3RoID09PSAwKSByZXR1cm4gJydcblxuICAgIHZhciBkaWdpdHMgPSBbMF1cbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNvdXJjZS5sZW5ndGg7ICsraSkge1xuICAgICAgZm9yICh2YXIgaiA9IDAsIGNhcnJ5ID0gc291cmNlW2ldOyBqIDwgZGlnaXRzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGRpZ2l0c1tqXSA8PCA4XG4gICAgICAgIGRpZ2l0c1tqXSA9IGNhcnJ5ICUgQkFTRVxuICAgICAgICBjYXJyeSA9IChjYXJyeSAvIEJBU0UpIHwgMFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGRpZ2l0cy5wdXNoKGNhcnJ5ICUgQkFTRSlcbiAgICAgICAgY2FycnkgPSAoY2FycnkgLyBCQVNFKSB8IDBcbiAgICAgIH1cbiAgICB9XG5cbiAgICB2YXIgc3RyaW5nID0gJydcblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHNvdXJjZVtrXSA9PT0gMCAmJiBrIDwgc291cmNlLmxlbmd0aCAtIDE7ICsraykgc3RyaW5nICs9IEFMUEhBQkVUWzBdXG4gICAgLy8gY29udmVydCBkaWdpdHMgdG8gYSBzdHJpbmdcbiAgICBmb3IgKHZhciBxID0gZGlnaXRzLmxlbmd0aCAtIDE7IHEgPj0gMDsgLS1xKSBzdHJpbmcgKz0gQUxQSEFCRVRbZGlnaXRzW3FdXVxuXG4gICAgcmV0dXJuIHN0cmluZ1xuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlVW5zYWZlIChzdHJpbmcpIHtcbiAgICBpZiAoc3RyaW5nLmxlbmd0aCA9PT0gMCkgcmV0dXJuIG5ldyBCdWZmZXIoMClcblxuICAgIHZhciBieXRlcyA9IFswXVxuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc3RyaW5nLmxlbmd0aDsgaSsrKSB7XG4gICAgICB2YXIgdmFsdWUgPSBBTFBIQUJFVF9NQVBbc3RyaW5nW2ldXVxuICAgICAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpIHJldHVyblxuXG4gICAgICBmb3IgKHZhciBqID0gMCwgY2FycnkgPSB2YWx1ZTsgaiA8IGJ5dGVzLmxlbmd0aDsgKytqKSB7XG4gICAgICAgIGNhcnJ5ICs9IGJ5dGVzW2pdICogQkFTRVxuICAgICAgICBieXRlc1tqXSA9IGNhcnJ5ICYgMHhmZlxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuXG4gICAgICB3aGlsZSAoY2FycnkgPiAwKSB7XG4gICAgICAgIGJ5dGVzLnB1c2goY2FycnkgJiAweGZmKVxuICAgICAgICBjYXJyeSA+Pj0gOFxuICAgICAgfVxuICAgIH1cblxuICAgIC8vIGRlYWwgd2l0aCBsZWFkaW5nIHplcm9zXG4gICAgZm9yICh2YXIgayA9IDA7IHN0cmluZ1trXSA9PT0gTEVBREVSICYmIGsgPCBzdHJpbmcubGVuZ3RoIC0gMTsgKytrKSB7XG4gICAgICBieXRlcy5wdXNoKDApXG4gICAgfVxuXG4gICAgcmV0dXJuIG5ldyBCdWZmZXIoYnl0ZXMucmV2ZXJzZSgpKVxuICB9XG5cbiAgZnVuY3Rpb24gZGVjb2RlIChzdHJpbmcpIHtcbiAgICB2YXIgYnVmZmVyID0gZGVjb2RlVW5zYWZlKHN0cmluZylcbiAgICBpZiAoYnVmZmVyKSByZXR1cm4gYnVmZmVyXG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ05vbi1iYXNlJyArIEJBU0UgKyAnIGNoYXJhY3RlcicpXG4gIH1cblxuICByZXR1cm4ge1xuICAgIGVuY29kZTogZW5jb2RlLFxuICAgIGRlY29kZVVuc2FmZTogZGVjb2RlVW5zYWZlLFxuICAgIGRlY29kZTogZGVjb2RlXG4gIH1cbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlLXgvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIid1c2Ugc3RyaWN0J1xuXG5leHBvcnRzLmJ5dGVMZW5ndGggPSBieXRlTGVuZ3RoXG5leHBvcnRzLnRvQnl0ZUFycmF5ID0gdG9CeXRlQXJyYXlcbmV4cG9ydHMuZnJvbUJ5dGVBcnJheSA9IGZyb21CeXRlQXJyYXlcblxudmFyIGxvb2t1cCA9IFtdXG52YXIgcmV2TG9va3VwID0gW11cbnZhciBBcnIgPSB0eXBlb2YgVWludDhBcnJheSAhPT0gJ3VuZGVmaW5lZCcgPyBVaW50OEFycmF5IDogQXJyYXlcblxudmFyIGNvZGUgPSAnQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLydcbmZvciAodmFyIGkgPSAwLCBsZW4gPSBjb2RlLmxlbmd0aDsgaSA8IGxlbjsgKytpKSB7XG4gIGxvb2t1cFtpXSA9IGNvZGVbaV1cbiAgcmV2TG9va3VwW2NvZGUuY2hhckNvZGVBdChpKV0gPSBpXG59XG5cbnJldkxvb2t1cFsnLScuY2hhckNvZGVBdCgwKV0gPSA2MlxucmV2TG9va3VwWydfJy5jaGFyQ29kZUF0KDApXSA9IDYzXG5cbmZ1bmN0aW9uIHBsYWNlSG9sZGVyc0NvdW50IChiNjQpIHtcbiAgdmFyIGxlbiA9IGI2NC5sZW5ndGhcbiAgaWYgKGxlbiAlIDQgPiAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHN0cmluZy4gTGVuZ3RoIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA0JylcbiAgfVxuXG4gIC8vIHRoZSBudW1iZXIgb2YgZXF1YWwgc2lnbnMgKHBsYWNlIGhvbGRlcnMpXG4gIC8vIGlmIHRoZXJlIGFyZSB0d28gcGxhY2Vob2xkZXJzLCB0aGFuIHRoZSB0d28gY2hhcmFjdGVycyBiZWZvcmUgaXRcbiAgLy8gcmVwcmVzZW50IG9uZSBieXRlXG4gIC8vIGlmIHRoZXJlIGlzIG9ubHkgb25lLCB0aGVuIHRoZSB0aHJlZSBjaGFyYWN0ZXJzIGJlZm9yZSBpdCByZXByZXNlbnQgMiBieXRlc1xuICAvLyB0aGlzIGlzIGp1c3QgYSBjaGVhcCBoYWNrIHRvIG5vdCBkbyBpbmRleE9mIHR3aWNlXG4gIHJldHVybiBiNjRbbGVuIC0gMl0gPT09ICc9JyA/IDIgOiBiNjRbbGVuIC0gMV0gPT09ICc9JyA/IDEgOiAwXG59XG5cbmZ1bmN0aW9uIGJ5dGVMZW5ndGggKGI2NCkge1xuICAvLyBiYXNlNjQgaXMgNC8zICsgdXAgdG8gdHdvIGNoYXJhY3RlcnMgb2YgdGhlIG9yaWdpbmFsIGRhdGFcbiAgcmV0dXJuIGI2NC5sZW5ndGggKiAzIC8gNCAtIHBsYWNlSG9sZGVyc0NvdW50KGI2NClcbn1cblxuZnVuY3Rpb24gdG9CeXRlQXJyYXkgKGI2NCkge1xuICB2YXIgaSwgaiwgbCwgdG1wLCBwbGFjZUhvbGRlcnMsIGFyclxuICB2YXIgbGVuID0gYjY0Lmxlbmd0aFxuICBwbGFjZUhvbGRlcnMgPSBwbGFjZUhvbGRlcnNDb3VudChiNjQpXG5cbiAgYXJyID0gbmV3IEFycihsZW4gKiAzIC8gNCAtIHBsYWNlSG9sZGVycylcblxuICAvLyBpZiB0aGVyZSBhcmUgcGxhY2Vob2xkZXJzLCBvbmx5IGdldCB1cCB0byB0aGUgbGFzdCBjb21wbGV0ZSA0IGNoYXJzXG4gIGwgPSBwbGFjZUhvbGRlcnMgPiAwID8gbGVuIC0gNCA6IGxlblxuXG4gIHZhciBMID0gMFxuXG4gIGZvciAoaSA9IDAsIGogPSAwOyBpIDwgbDsgaSArPSA0LCBqICs9IDMpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAxOCkgfCAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAxKV0gPDwgMTIpIHwgKHJldkxvb2t1cFtiNjQuY2hhckNvZGVBdChpICsgMildIDw8IDYpIHwgcmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkgKyAzKV1cbiAgICBhcnJbTCsrXSA9ICh0bXAgPj4gMTYpICYgMHhGRlxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIGlmIChwbGFjZUhvbGRlcnMgPT09IDIpIHtcbiAgICB0bXAgPSAocmV2TG9va3VwW2I2NC5jaGFyQ29kZUF0KGkpXSA8PCAyKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA+PiA0KVxuICAgIGFycltMKytdID0gdG1wICYgMHhGRlxuICB9IGVsc2UgaWYgKHBsYWNlSG9sZGVycyA9PT0gMSkge1xuICAgIHRtcCA9IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSldIDw8IDEwKSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDEpXSA8PCA0KSB8IChyZXZMb29rdXBbYjY0LmNoYXJDb2RlQXQoaSArIDIpXSA+PiAyKVxuICAgIGFycltMKytdID0gKHRtcCA+PiA4KSAmIDB4RkZcbiAgICBhcnJbTCsrXSA9IHRtcCAmIDB4RkZcbiAgfVxuXG4gIHJldHVybiBhcnJcbn1cblxuZnVuY3Rpb24gdHJpcGxldFRvQmFzZTY0IChudW0pIHtcbiAgcmV0dXJuIGxvb2t1cFtudW0gPj4gMTggJiAweDNGXSArIGxvb2t1cFtudW0gPj4gMTIgJiAweDNGXSArIGxvb2t1cFtudW0gPj4gNiAmIDB4M0ZdICsgbG9va3VwW251bSAmIDB4M0ZdXG59XG5cbmZ1bmN0aW9uIGVuY29kZUNodW5rICh1aW50OCwgc3RhcnQsIGVuZCkge1xuICB2YXIgdG1wXG4gIHZhciBvdXRwdXQgPSBbXVxuICBmb3IgKHZhciBpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gMykge1xuICAgIHRtcCA9ICh1aW50OFtpXSA8PCAxNikgKyAodWludDhbaSArIDFdIDw8IDgpICsgKHVpbnQ4W2kgKyAyXSlcbiAgICBvdXRwdXQucHVzaCh0cmlwbGV0VG9CYXNlNjQodG1wKSlcbiAgfVxuICByZXR1cm4gb3V0cHV0LmpvaW4oJycpXG59XG5cbmZ1bmN0aW9uIGZyb21CeXRlQXJyYXkgKHVpbnQ4KSB7XG4gIHZhciB0bXBcbiAgdmFyIGxlbiA9IHVpbnQ4Lmxlbmd0aFxuICB2YXIgZXh0cmFCeXRlcyA9IGxlbiAlIDMgLy8gaWYgd2UgaGF2ZSAxIGJ5dGUgbGVmdCwgcGFkIDIgYnl0ZXNcbiAgdmFyIG91dHB1dCA9ICcnXG4gIHZhciBwYXJ0cyA9IFtdXG4gIHZhciBtYXhDaHVua0xlbmd0aCA9IDE2MzgzIC8vIG11c3QgYmUgbXVsdGlwbGUgb2YgM1xuXG4gIC8vIGdvIHRocm91Z2ggdGhlIGFycmF5IGV2ZXJ5IHRocmVlIGJ5dGVzLCB3ZSdsbCBkZWFsIHdpdGggdHJhaWxpbmcgc3R1ZmYgbGF0ZXJcbiAgZm9yICh2YXIgaSA9IDAsIGxlbjIgPSBsZW4gLSBleHRyYUJ5dGVzOyBpIDwgbGVuMjsgaSArPSBtYXhDaHVua0xlbmd0aCkge1xuICAgIHBhcnRzLnB1c2goZW5jb2RlQ2h1bmsodWludDgsIGksIChpICsgbWF4Q2h1bmtMZW5ndGgpID4gbGVuMiA/IGxlbjIgOiAoaSArIG1heENodW5rTGVuZ3RoKSkpXG4gIH1cblxuICAvLyBwYWQgdGhlIGVuZCB3aXRoIHplcm9zLCBidXQgbWFrZSBzdXJlIHRvIG5vdCBmb3JnZXQgdGhlIGV4dHJhIGJ5dGVzXG4gIGlmIChleHRyYUJ5dGVzID09PSAxKSB7XG4gICAgdG1wID0gdWludDhbbGVuIC0gMV1cbiAgICBvdXRwdXQgKz0gbG9va3VwW3RtcCA+PiAyXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA8PCA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9ICc9PSdcbiAgfSBlbHNlIGlmIChleHRyYUJ5dGVzID09PSAyKSB7XG4gICAgdG1wID0gKHVpbnQ4W2xlbiAtIDJdIDw8IDgpICsgKHVpbnQ4W2xlbiAtIDFdKVxuICAgIG91dHB1dCArPSBsb29rdXBbdG1wID4+IDEwXVxuICAgIG91dHB1dCArPSBsb29rdXBbKHRtcCA+PiA0KSAmIDB4M0ZdXG4gICAgb3V0cHV0ICs9IGxvb2t1cFsodG1wIDw8IDIpICYgMHgzRl1cbiAgICBvdXRwdXQgKz0gJz0nXG4gIH1cblxuICBwYXJ0cy5wdXNoKG91dHB1dClcblxuICByZXR1cm4gcGFydHMuam9pbignJylcbn1cblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9iYXNlNjQtanMvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDUyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInJlcXVpcmUoJy4uLy4uL21vZHVsZXMvZXM3LmFycmF5LmluY2x1ZGVzJyk7XG5tb2R1bGUuZXhwb3J0cyA9IHJlcXVpcmUoJy4uLy4uL21vZHVsZXMvX2NvcmUnKS5BcnJheS5pbmNsdWRlcztcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L2ZuL2FycmF5L2luY2x1ZGVzLmpzXG4vLyBtb2R1bGUgaWQgPSA1M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYodHlwZW9mIGl0ICE9ICdmdW5jdGlvbicpdGhyb3cgVHlwZUVycm9yKGl0ICsgJyBpcyBub3QgYSBmdW5jdGlvbiEnKTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2EtZnVuY3Rpb24uanNcbi8vIG1vZHVsZSBpZCA9IDU0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oKXsgLyogZW1wdHkgKi8gfTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2FkZC10by11bnNjb3BhYmxlcy5qc1xuLy8gbW9kdWxlIGlkID0gNTVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGlzT2JqZWN0ID0gcmVxdWlyZSgnLi9faXMtb2JqZWN0Jyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoIWlzT2JqZWN0KGl0KSl0aHJvdyBUeXBlRXJyb3IoaXQgKyAnIGlzIG5vdCBhbiBvYmplY3QhJyk7XG4gIHJldHVybiBpdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19hbi1vYmplY3QuanNcbi8vIG1vZHVsZSBpZCA9IDU2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgcmV0dXJuIHRvU3RyaW5nLmNhbGwoaXQpLnNsaWNlKDgsIC0xKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jb2YuanNcbi8vIG1vZHVsZSBpZCA9IDU3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIG9wdGlvbmFsIC8gc2ltcGxlIGNvbnRleHQgYmluZGluZ1xudmFyIGFGdW5jdGlvbiA9IHJlcXVpcmUoJy4vX2EtZnVuY3Rpb24nKTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oZm4sIHRoYXQsIGxlbmd0aCl7XG4gIGFGdW5jdGlvbihmbik7XG4gIGlmKHRoYXQgPT09IHVuZGVmaW5lZClyZXR1cm4gZm47XG4gIHN3aXRjaChsZW5ndGgpe1xuICAgIGNhc2UgMTogcmV0dXJuIGZ1bmN0aW9uKGEpe1xuICAgICAgcmV0dXJuIGZuLmNhbGwodGhhdCwgYSk7XG4gICAgfTtcbiAgICBjYXNlIDI6IHJldHVybiBmdW5jdGlvbihhLCBiKXtcbiAgICAgIHJldHVybiBmbi5jYWxsKHRoYXQsIGEsIGIpO1xuICAgIH07XG4gICAgY2FzZSAzOiByZXR1cm4gZnVuY3Rpb24oYSwgYiwgYyl7XG4gICAgICByZXR1cm4gZm4uY2FsbCh0aGF0LCBhLCBiLCBjKTtcbiAgICB9O1xuICB9XG4gIHJldHVybiBmdW5jdGlvbigvKiAuLi5hcmdzICovKXtcbiAgICByZXR1cm4gZm4uYXBwbHkodGhhdCwgYXJndW1lbnRzKTtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19jdHguanNcbi8vIG1vZHVsZSBpZCA9IDU4XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIDcuMi4xIFJlcXVpcmVPYmplY3RDb2VyY2libGUoYXJndW1lbnQpXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0KXtcbiAgaWYoaXQgPT0gdW5kZWZpbmVkKXRocm93IFR5cGVFcnJvcihcIkNhbid0IGNhbGwgbWV0aG9kIG9uICBcIiArIGl0KTtcbiAgcmV0dXJuIGl0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RlZmluZWQuanNcbi8vIG1vZHVsZSBpZCA9IDU5XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpc09iamVjdCA9IHJlcXVpcmUoJy4vX2lzLW9iamVjdCcpXG4gICwgZG9jdW1lbnQgPSByZXF1aXJlKCcuL19nbG9iYWwnKS5kb2N1bWVudFxuICAvLyBpbiBvbGQgSUUgdHlwZW9mIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQgaXMgJ29iamVjdCdcbiAgLCBpcyA9IGlzT2JqZWN0KGRvY3VtZW50KSAmJiBpc09iamVjdChkb2N1bWVudC5jcmVhdGVFbGVtZW50KTtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXMgPyBkb2N1bWVudC5jcmVhdGVFbGVtZW50KGl0KSA6IHt9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2RvbS1jcmVhdGUuanNcbi8vIG1vZHVsZSBpZCA9IDYwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIi8vIElFIDgtIGRvbid0IGVudW0gYnVnIGtleXNcbm1vZHVsZS5leHBvcnRzID0gKFxuICAnY29uc3RydWN0b3IsaGFzT3duUHJvcGVydHksaXNQcm90b3R5cGVPZixwcm9wZXJ0eUlzRW51bWVyYWJsZSx0b0xvY2FsZVN0cmluZyx0b1N0cmluZyx2YWx1ZU9mJ1xuKS5zcGxpdCgnLCcpO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fZW51bS1idWcta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjFcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGhhc093blByb3BlcnR5ID0ge30uaGFzT3duUHJvcGVydHk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGl0LCBrZXkpe1xuICByZXR1cm4gaGFzT3duUHJvcGVydHkuY2FsbChpdCwga2V5KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19oYXMuanNcbi8vIG1vZHVsZSBpZCA9IDYyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBkUCAgICAgICAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWRwJylcbiAgLCBjcmVhdGVEZXNjID0gcmVxdWlyZSgnLi9fcHJvcGVydHktZGVzYycpO1xubW9kdWxlLmV4cG9ydHMgPSByZXF1aXJlKCcuL19kZXNjcmlwdG9ycycpID8gZnVuY3Rpb24ob2JqZWN0LCBrZXksIHZhbHVlKXtcbiAgcmV0dXJuIGRQLmYob2JqZWN0LCBrZXksIGNyZWF0ZURlc2MoMSwgdmFsdWUpKTtcbn0gOiBmdW5jdGlvbihvYmplY3QsIGtleSwgdmFsdWUpe1xuICBvYmplY3Rba2V5XSA9IHZhbHVlO1xuICByZXR1cm4gb2JqZWN0O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX2hpZGUuanNcbi8vIG1vZHVsZSBpZCA9IDYzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gIXJlcXVpcmUoJy4vX2Rlc2NyaXB0b3JzJykgJiYgIXJlcXVpcmUoJy4vX2ZhaWxzJykoZnVuY3Rpb24oKXtcbiAgcmV0dXJuIE9iamVjdC5kZWZpbmVQcm9wZXJ0eShyZXF1aXJlKCcuL19kb20tY3JlYXRlJykoJ2RpdicpLCAnYScsIHtnZXQ6IGZ1bmN0aW9uKCl7IHJldHVybiA3OyB9fSkuYSAhPSA3O1xufSk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pZTgtZG9tLWRlZmluZS5qc1xuLy8gbW9kdWxlIGlkID0gNjRcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gZmFsbGJhY2sgZm9yIG5vbi1hcnJheS1saWtlIEVTMyBhbmQgbm9uLWVudW1lcmFibGUgb2xkIFY4IHN0cmluZ3NcbnZhciBjb2YgPSByZXF1aXJlKCcuL19jb2YnKTtcbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0KCd6JykucHJvcGVydHlJc0VudW1lcmFibGUoMCkgPyBPYmplY3QgOiBmdW5jdGlvbihpdCl7XG4gIHJldHVybiBjb2YoaXQpID09ICdTdHJpbmcnID8gaXQuc3BsaXQoJycpIDogT2JqZWN0KGl0KTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19pb2JqZWN0LmpzXG4vLyBtb2R1bGUgaWQgPSA2NVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYW5PYmplY3QgICAgICAgPSByZXF1aXJlKCcuL19hbi1vYmplY3QnKVxuICAsIElFOF9ET01fREVGSU5FID0gcmVxdWlyZSgnLi9faWU4LWRvbS1kZWZpbmUnKVxuICAsIHRvUHJpbWl0aXZlICAgID0gcmVxdWlyZSgnLi9fdG8tcHJpbWl0aXZlJylcbiAgLCBkUCAgICAgICAgICAgICA9IE9iamVjdC5kZWZpbmVQcm9wZXJ0eTtcblxuZXhwb3J0cy5mID0gcmVxdWlyZSgnLi9fZGVzY3JpcHRvcnMnKSA/IE9iamVjdC5kZWZpbmVQcm9wZXJ0eSA6IGZ1bmN0aW9uIGRlZmluZVByb3BlcnR5KE8sIFAsIEF0dHJpYnV0ZXMpe1xuICBhbk9iamVjdChPKTtcbiAgUCA9IHRvUHJpbWl0aXZlKFAsIHRydWUpO1xuICBhbk9iamVjdChBdHRyaWJ1dGVzKTtcbiAgaWYoSUU4X0RPTV9ERUZJTkUpdHJ5IHtcbiAgICByZXR1cm4gZFAoTywgUCwgQXR0cmlidXRlcyk7XG4gIH0gY2F0Y2goZSl7IC8qIGVtcHR5ICovIH1cbiAgaWYoJ2dldCcgaW4gQXR0cmlidXRlcyB8fCAnc2V0JyBpbiBBdHRyaWJ1dGVzKXRocm93IFR5cGVFcnJvcignQWNjZXNzb3JzIG5vdCBzdXBwb3J0ZWQhJyk7XG4gIGlmKCd2YWx1ZScgaW4gQXR0cmlidXRlcylPW1BdID0gQXR0cmlidXRlcy52YWx1ZTtcbiAgcmV0dXJuIE87XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fb2JqZWN0LWRwLmpzXG4vLyBtb2R1bGUgaWQgPSA2NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgaGFzICAgICAgICAgID0gcmVxdWlyZSgnLi9faGFzJylcbiAgLCB0b0lPYmplY3QgICAgPSByZXF1aXJlKCcuL190by1pb2JqZWN0JylcbiAgLCBhcnJheUluZGV4T2YgPSByZXF1aXJlKCcuL19hcnJheS1pbmNsdWRlcycpKGZhbHNlKVxuICAsIElFX1BST1RPICAgICA9IHJlcXVpcmUoJy4vX3NoYXJlZC1rZXknKSgnSUVfUFJPVE8nKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihvYmplY3QsIG5hbWVzKXtcbiAgdmFyIE8gICAgICA9IHRvSU9iamVjdChvYmplY3QpXG4gICAgLCBpICAgICAgPSAwXG4gICAgLCByZXN1bHQgPSBbXVxuICAgICwga2V5O1xuICBmb3Ioa2V5IGluIE8paWYoa2V5ICE9IElFX1BST1RPKWhhcyhPLCBrZXkpICYmIHJlc3VsdC5wdXNoKGtleSk7XG4gIC8vIERvbid0IGVudW0gYnVnICYgaGlkZGVuIGtleXNcbiAgd2hpbGUobmFtZXMubGVuZ3RoID4gaSlpZihoYXMoTywga2V5ID0gbmFtZXNbaSsrXSkpe1xuICAgIH5hcnJheUluZGV4T2YocmVzdWx0LCBrZXkpIHx8IHJlc3VsdC5wdXNoKGtleSk7XG4gIH1cbiAgcmV0dXJuIHJlc3VsdDtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy1pbnRlcm5hbC5qc1xuLy8gbW9kdWxlIGlkID0gNjdcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gMTkuMS4yLjE0IC8gMTUuMi4zLjE0IE9iamVjdC5rZXlzKE8pXG52YXIgJGtleXMgICAgICAgPSByZXF1aXJlKCcuL19vYmplY3Qta2V5cy1pbnRlcm5hbCcpXG4gICwgZW51bUJ1Z0tleXMgPSByZXF1aXJlKCcuL19lbnVtLWJ1Zy1rZXlzJyk7XG5cbm1vZHVsZS5leHBvcnRzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24ga2V5cyhPKXtcbiAgcmV0dXJuICRrZXlzKE8sIGVudW1CdWdLZXlzKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3Qta2V5cy5qc1xuLy8gbW9kdWxlIGlkID0gNjhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiZXhwb3J0cy5mID0ge30ucHJvcGVydHlJc0VudW1lcmFibGU7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtcGllLmpzXG4vLyBtb2R1bGUgaWQgPSA2OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgZ2V0S2V5cyAgID0gcmVxdWlyZSgnLi9fb2JqZWN0LWtleXMnKVxuICAsIHRvSU9iamVjdCA9IHJlcXVpcmUoJy4vX3RvLWlvYmplY3QnKVxuICAsIGlzRW51bSAgICA9IHJlcXVpcmUoJy4vX29iamVjdC1waWUnKS5mO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpc0VudHJpZXMpe1xuICByZXR1cm4gZnVuY3Rpb24oaXQpe1xuICAgIHZhciBPICAgICAgPSB0b0lPYmplY3QoaXQpXG4gICAgICAsIGtleXMgICA9IGdldEtleXMoTylcbiAgICAgICwgbGVuZ3RoID0ga2V5cy5sZW5ndGhcbiAgICAgICwgaSAgICAgID0gMFxuICAgICAgLCByZXN1bHQgPSBbXVxuICAgICAgLCBrZXk7XG4gICAgd2hpbGUobGVuZ3RoID4gaSlpZihpc0VudW0uY2FsbChPLCBrZXkgPSBrZXlzW2krK10pKXtcbiAgICAgIHJlc3VsdC5wdXNoKGlzRW50cmllcyA/IFtrZXksIE9ba2V5XV0gOiBPW2tleV0pO1xuICAgIH0gcmV0dXJuIHJlc3VsdDtcbiAgfTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL19vYmplY3QtdG8tYXJyYXkuanNcbi8vIG1vZHVsZSBpZCA9IDcwXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oYml0bWFwLCB2YWx1ZSl7XG4gIHJldHVybiB7XG4gICAgZW51bWVyYWJsZSAgOiAhKGJpdG1hcCAmIDEpLFxuICAgIGNvbmZpZ3VyYWJsZTogIShiaXRtYXAgJiAyKSxcbiAgICB3cml0YWJsZSAgICA6ICEoYml0bWFwICYgNCksXG4gICAgdmFsdWUgICAgICAgOiB2YWx1ZVxuICB9O1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3Byb3BlcnR5LWRlc2MuanNcbi8vIG1vZHVsZSBpZCA9IDcxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBzaGFyZWQgPSByZXF1aXJlKCcuL19zaGFyZWQnKSgna2V5cycpXG4gICwgdWlkICAgID0gcmVxdWlyZSgnLi9fdWlkJyk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzaGFyZWRba2V5XSB8fCAoc2hhcmVkW2tleV0gPSB1aWQoa2V5KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fc2hhcmVkLWtleS5qc1xuLy8gbW9kdWxlIGlkID0gNzJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIGdsb2JhbCA9IHJlcXVpcmUoJy4vX2dsb2JhbCcpXG4gICwgU0hBUkVEID0gJ19fY29yZS1qc19zaGFyZWRfXydcbiAgLCBzdG9yZSAgPSBnbG9iYWxbU0hBUkVEXSB8fCAoZ2xvYmFsW1NIQVJFRF0gPSB7fSk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiBzdG9yZVtrZXldIHx8IChzdG9yZVtrZXldID0ge30pO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3NoYXJlZC5qc1xuLy8gbW9kdWxlIGlkID0gNzNcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwidmFyIHRvSW50ZWdlciA9IHJlcXVpcmUoJy4vX3RvLWludGVnZXInKVxuICAsIG1heCAgICAgICA9IE1hdGgubWF4XG4gICwgbWluICAgICAgID0gTWF0aC5taW47XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGluZGV4LCBsZW5ndGgpe1xuICBpbmRleCA9IHRvSW50ZWdlcihpbmRleCk7XG4gIHJldHVybiBpbmRleCA8IDAgPyBtYXgoaW5kZXggKyBsZW5ndGgsIDApIDogbWluKGluZGV4LCBsZW5ndGgpO1xufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWluZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA3NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvLyA3LjEuMTUgVG9MZW5ndGhcbnZhciB0b0ludGVnZXIgPSByZXF1aXJlKCcuL190by1pbnRlZ2VyJylcbiAgLCBtaW4gICAgICAgPSBNYXRoLm1pbjtcbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24oaXQpe1xuICByZXR1cm4gaXQgPiAwID8gbWluKHRvSW50ZWdlcihpdCksIDB4MWZmZmZmZmZmZmZmZmYpIDogMDsgLy8gcG93KDIsIDUzKSAtIDEgPT0gOTAwNzE5OTI1NDc0MDk5MVxufTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvX3RvLWxlbmd0aC5qc1xuLy8gbW9kdWxlIGlkID0gNzVcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gNy4xLjEgVG9QcmltaXRpdmUoaW5wdXQgWywgUHJlZmVycmVkVHlwZV0pXG52YXIgaXNPYmplY3QgPSByZXF1aXJlKCcuL19pcy1vYmplY3QnKTtcbi8vIGluc3RlYWQgb2YgdGhlIEVTNiBzcGVjIHZlcnNpb24sIHdlIGRpZG4ndCBpbXBsZW1lbnQgQEB0b1ByaW1pdGl2ZSBjYXNlXG4vLyBhbmQgdGhlIHNlY29uZCBhcmd1bWVudCAtIGZsYWcgLSBwcmVmZXJyZWQgdHlwZSBpcyBhIHN0cmluZ1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbihpdCwgUyl7XG4gIGlmKCFpc09iamVjdChpdCkpcmV0dXJuIGl0O1xuICB2YXIgZm4sIHZhbDtcbiAgaWYoUyAmJiB0eXBlb2YgKGZuID0gaXQudG9TdHJpbmcpID09ICdmdW5jdGlvbicgJiYgIWlzT2JqZWN0KHZhbCA9IGZuLmNhbGwoaXQpKSlyZXR1cm4gdmFsO1xuICBpZih0eXBlb2YgKGZuID0gaXQudmFsdWVPZikgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIGlmKCFTICYmIHR5cGVvZiAoZm4gPSBpdC50b1N0cmluZykgPT0gJ2Z1bmN0aW9uJyAmJiAhaXNPYmplY3QodmFsID0gZm4uY2FsbChpdCkpKXJldHVybiB2YWw7XG4gIHRocm93IFR5cGVFcnJvcihcIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZVwiKTtcbn07XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL190by1wcmltaXRpdmUuanNcbi8vIG1vZHVsZSBpZCA9IDc2XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBpZCA9IDBcbiAgLCBweCA9IE1hdGgucmFuZG9tKCk7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKGtleSl7XG4gIHJldHVybiAnU3ltYm9sKCcuY29uY2F0KGtleSA9PT0gdW5kZWZpbmVkID8gJycgOiBrZXksICcpXycsICgrK2lkICsgcHgpLnRvU3RyaW5nKDM2KSk7XG59O1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9jb3JlLWpzL2xpYnJhcnkvbW9kdWxlcy9fdWlkLmpzXG4vLyBtb2R1bGUgaWQgPSA3N1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG4vLyBodHRwczovL2dpdGh1Yi5jb20vdGMzOS9BcnJheS5wcm90b3R5cGUuaW5jbHVkZXNcbnZhciAkZXhwb3J0ICAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRpbmNsdWRlcyA9IHJlcXVpcmUoJy4vX2FycmF5LWluY2x1ZGVzJykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5QLCAnQXJyYXknLCB7XG4gIGluY2x1ZGVzOiBmdW5jdGlvbiBpbmNsdWRlcyhlbCAvKiwgZnJvbUluZGV4ID0gMCAqLyl7XG4gICAgcmV0dXJuICRpbmNsdWRlcyh0aGlzLCBlbCwgYXJndW1lbnRzLmxlbmd0aCA+IDEgPyBhcmd1bWVudHNbMV0gOiB1bmRlZmluZWQpO1xuICB9XG59KTtcblxucmVxdWlyZSgnLi9fYWRkLXRvLXVuc2NvcGFibGVzJykoJ2luY2x1ZGVzJyk7XG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2NvcmUtanMvbGlicmFyeS9tb2R1bGVzL2VzNy5hcnJheS5pbmNsdWRlcy5qc1xuLy8gbW9kdWxlIGlkID0gNzhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLy8gaHR0cHM6Ly9naXRodWIuY29tL3RjMzkvcHJvcG9zYWwtb2JqZWN0LXZhbHVlcy1lbnRyaWVzXG52YXIgJGV4cG9ydCAgPSByZXF1aXJlKCcuL19leHBvcnQnKVxuICAsICRlbnRyaWVzID0gcmVxdWlyZSgnLi9fb2JqZWN0LXRvLWFycmF5JykodHJ1ZSk7XG5cbiRleHBvcnQoJGV4cG9ydC5TLCAnT2JqZWN0Jywge1xuICBlbnRyaWVzOiBmdW5jdGlvbiBlbnRyaWVzKGl0KXtcbiAgICByZXR1cm4gJGVudHJpZXMoaXQpO1xuICB9XG59KTtcblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vY29yZS1qcy9saWJyYXJ5L21vZHVsZXMvZXM3Lm9iamVjdC5lbnRyaWVzLmpzXG4vLyBtb2R1bGUgaWQgPSA3OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChzdHIsIHNlcCkge1xuXHRpZiAodHlwZW9mIHN0ciAhPT0gJ3N0cmluZycpIHtcblx0XHR0aHJvdyBuZXcgVHlwZUVycm9yKCdFeHBlY3RlZCBhIHN0cmluZycpO1xuXHR9XG5cblx0c2VwID0gdHlwZW9mIHNlcCA9PT0gJ3VuZGVmaW5lZCcgPyAnXycgOiBzZXA7XG5cblx0cmV0dXJuIHN0clxuXHRcdC5yZXBsYWNlKC8oW2EtelxcZF0pKFtBLVpdKS9nLCAnJDEnICsgc2VwICsgJyQyJylcblx0XHQucmVwbGFjZSgvKFtBLVpdKykoW0EtWl1bYS16XFxkXSspL2csICckMScgKyBzZXAgKyAnJDInKVxuXHRcdC50b0xvd2VyQ2FzZSgpO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9kZWNhbWVsaXplL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4MFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiFcbiAqIEBvdmVydmlldyBlczYtcHJvbWlzZSAtIGEgdGlueSBpbXBsZW1lbnRhdGlvbiBvZiBQcm9taXNlcy9BKy5cbiAqIEBjb3B5cmlnaHQgQ29weXJpZ2h0IChjKSAyMDE0IFllaHVkYSBLYXR6LCBUb20gRGFsZSwgU3RlZmFuIFBlbm5lciBhbmQgY29udHJpYnV0b3JzIChDb252ZXJzaW9uIHRvIEVTNiBBUEkgYnkgSmFrZSBBcmNoaWJhbGQpXG4gKiBAbGljZW5zZSAgIExpY2Vuc2VkIHVuZGVyIE1JVCBsaWNlbnNlXG4gKiAgICAgICAgICAgIFNlZSBodHRwczovL3Jhdy5naXRodWJ1c2VyY29udGVudC5jb20vc3RlZmFucGVubmVyL2VzNi1wcm9taXNlL21hc3Rlci9MSUNFTlNFXG4gKiBAdmVyc2lvbiAgIDQuMS4wXG4gKi9cblxuKGZ1bmN0aW9uIChnbG9iYWwsIGZhY3RvcnkpIHtcbiAgICB0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcgJiYgdHlwZW9mIG1vZHVsZSAhPT0gJ3VuZGVmaW5lZCcgPyBtb2R1bGUuZXhwb3J0cyA9IGZhY3RvcnkoKSA6XG4gICAgdHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kID8gZGVmaW5lKGZhY3RvcnkpIDpcbiAgICAoZ2xvYmFsLkVTNlByb21pc2UgPSBmYWN0b3J5KCkpO1xufSh0aGlzLCAoZnVuY3Rpb24gKCkgeyAndXNlIHN0cmljdCc7XG5cbmZ1bmN0aW9uIG9iamVjdE9yRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbicgfHwgdHlwZW9mIHggPT09ICdvYmplY3QnICYmIHggIT09IG51bGw7XG59XG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oeCkge1xuICByZXR1cm4gdHlwZW9mIHggPT09ICdmdW5jdGlvbic7XG59XG5cbnZhciBfaXNBcnJheSA9IHVuZGVmaW5lZDtcbmlmICghQXJyYXkuaXNBcnJheSkge1xuICBfaXNBcnJheSA9IGZ1bmN0aW9uICh4KSB7XG4gICAgcmV0dXJuIE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbiAgfTtcbn0gZWxzZSB7XG4gIF9pc0FycmF5ID0gQXJyYXkuaXNBcnJheTtcbn1cblxudmFyIGlzQXJyYXkgPSBfaXNBcnJheTtcblxudmFyIGxlbiA9IDA7XG52YXIgdmVydHhOZXh0ID0gdW5kZWZpbmVkO1xudmFyIGN1c3RvbVNjaGVkdWxlckZuID0gdW5kZWZpbmVkO1xuXG52YXIgYXNhcCA9IGZ1bmN0aW9uIGFzYXAoY2FsbGJhY2ssIGFyZykge1xuICBxdWV1ZVtsZW5dID0gY2FsbGJhY2s7XG4gIHF1ZXVlW2xlbiArIDFdID0gYXJnO1xuICBsZW4gKz0gMjtcbiAgaWYgKGxlbiA9PT0gMikge1xuICAgIC8vIElmIGxlbiBpcyAyLCB0aGF0IG1lYW5zIHRoYXQgd2UgbmVlZCB0byBzY2hlZHVsZSBhbiBhc3luYyBmbHVzaC5cbiAgICAvLyBJZiBhZGRpdGlvbmFsIGNhbGxiYWNrcyBhcmUgcXVldWVkIGJlZm9yZSB0aGUgcXVldWUgaXMgZmx1c2hlZCwgdGhleVxuICAgIC8vIHdpbGwgYmUgcHJvY2Vzc2VkIGJ5IHRoaXMgZmx1c2ggdGhhdCB3ZSBhcmUgc2NoZWR1bGluZy5cbiAgICBpZiAoY3VzdG9tU2NoZWR1bGVyRm4pIHtcbiAgICAgIGN1c3RvbVNjaGVkdWxlckZuKGZsdXNoKTtcbiAgICB9IGVsc2Uge1xuICAgICAgc2NoZWR1bGVGbHVzaCgpO1xuICAgIH1cbiAgfVxufTtcblxuZnVuY3Rpb24gc2V0U2NoZWR1bGVyKHNjaGVkdWxlRm4pIHtcbiAgY3VzdG9tU2NoZWR1bGVyRm4gPSBzY2hlZHVsZUZuO1xufVxuXG5mdW5jdGlvbiBzZXRBc2FwKGFzYXBGbikge1xuICBhc2FwID0gYXNhcEZuO1xufVxuXG52YXIgYnJvd3NlcldpbmRvdyA9IHR5cGVvZiB3aW5kb3cgIT09ICd1bmRlZmluZWQnID8gd2luZG93IDogdW5kZWZpbmVkO1xudmFyIGJyb3dzZXJHbG9iYWwgPSBicm93c2VyV2luZG93IHx8IHt9O1xudmFyIEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyID0gYnJvd3Nlckdsb2JhbC5NdXRhdGlvbk9ic2VydmVyIHx8IGJyb3dzZXJHbG9iYWwuV2ViS2l0TXV0YXRpb25PYnNlcnZlcjtcbnZhciBpc05vZGUgPSB0eXBlb2Ygc2VsZiA9PT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIHByb2Nlc3MgIT09ICd1bmRlZmluZWQnICYmICh7fSkudG9TdHJpbmcuY2FsbChwcm9jZXNzKSA9PT0gJ1tvYmplY3QgcHJvY2Vzc10nO1xuXG4vLyB0ZXN0IGZvciB3ZWIgd29ya2VyIGJ1dCBub3QgaW4gSUUxMFxudmFyIGlzV29ya2VyID0gdHlwZW9mIFVpbnQ4Q2xhbXBlZEFycmF5ICE9PSAndW5kZWZpbmVkJyAmJiB0eXBlb2YgaW1wb3J0U2NyaXB0cyAhPT0gJ3VuZGVmaW5lZCcgJiYgdHlwZW9mIE1lc3NhZ2VDaGFubmVsICE9PSAndW5kZWZpbmVkJztcblxuLy8gbm9kZVxuZnVuY3Rpb24gdXNlTmV4dFRpY2soKSB7XG4gIC8vIG5vZGUgdmVyc2lvbiAwLjEwLnggZGlzcGxheXMgYSBkZXByZWNhdGlvbiB3YXJuaW5nIHdoZW4gbmV4dFRpY2sgaXMgdXNlZCByZWN1cnNpdmVseVxuICAvLyBzZWUgaHR0cHM6Ly9naXRodWIuY29tL2N1am9qcy93aGVuL2lzc3Vlcy80MTAgZm9yIGRldGFpbHNcbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICByZXR1cm4gcHJvY2Vzcy5uZXh0VGljayhmbHVzaCk7XG4gIH07XG59XG5cbi8vIHZlcnR4XG5mdW5jdGlvbiB1c2VWZXJ0eFRpbWVyKCkge1xuICBpZiAodHlwZW9mIHZlcnR4TmV4dCAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgICAgdmVydHhOZXh0KGZsdXNoKTtcbiAgICB9O1xuICB9XG5cbiAgcmV0dXJuIHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdXNlTXV0YXRpb25PYnNlcnZlcigpIHtcbiAgdmFyIGl0ZXJhdGlvbnMgPSAwO1xuICB2YXIgb2JzZXJ2ZXIgPSBuZXcgQnJvd3Nlck11dGF0aW9uT2JzZXJ2ZXIoZmx1c2gpO1xuICB2YXIgbm9kZSA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKTtcbiAgb2JzZXJ2ZXIub2JzZXJ2ZShub2RlLCB7IGNoYXJhY3RlckRhdGE6IHRydWUgfSk7XG5cbiAgcmV0dXJuIGZ1bmN0aW9uICgpIHtcbiAgICBub2RlLmRhdGEgPSBpdGVyYXRpb25zID0gKytpdGVyYXRpb25zICUgMjtcbiAgfTtcbn1cblxuLy8gd2ViIHdvcmtlclxuZnVuY3Rpb24gdXNlTWVzc2FnZUNoYW5uZWwoKSB7XG4gIHZhciBjaGFubmVsID0gbmV3IE1lc3NhZ2VDaGFubmVsKCk7XG4gIGNoYW5uZWwucG9ydDEub25tZXNzYWdlID0gZmx1c2g7XG4gIHJldHVybiBmdW5jdGlvbiAoKSB7XG4gICAgcmV0dXJuIGNoYW5uZWwucG9ydDIucG9zdE1lc3NhZ2UoMCk7XG4gIH07XG59XG5cbmZ1bmN0aW9uIHVzZVNldFRpbWVvdXQoKSB7XG4gIC8vIFN0b3JlIHNldFRpbWVvdXQgcmVmZXJlbmNlIHNvIGVzNi1wcm9taXNlIHdpbGwgYmUgdW5hZmZlY3RlZCBieVxuICAvLyBvdGhlciBjb2RlIG1vZGlmeWluZyBzZXRUaW1lb3V0IChsaWtlIHNpbm9uLnVzZUZha2VUaW1lcnMoKSlcbiAgdmFyIGdsb2JhbFNldFRpbWVvdXQgPSBzZXRUaW1lb3V0O1xuICByZXR1cm4gZnVuY3Rpb24gKCkge1xuICAgIHJldHVybiBnbG9iYWxTZXRUaW1lb3V0KGZsdXNoLCAxKTtcbiAgfTtcbn1cblxudmFyIHF1ZXVlID0gbmV3IEFycmF5KDEwMDApO1xuZnVuY3Rpb24gZmx1c2goKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuOyBpICs9IDIpIHtcbiAgICB2YXIgY2FsbGJhY2sgPSBxdWV1ZVtpXTtcbiAgICB2YXIgYXJnID0gcXVldWVbaSArIDFdO1xuXG4gICAgY2FsbGJhY2soYXJnKTtcblxuICAgIHF1ZXVlW2ldID0gdW5kZWZpbmVkO1xuICAgIHF1ZXVlW2kgKyAxXSA9IHVuZGVmaW5lZDtcbiAgfVxuXG4gIGxlbiA9IDA7XG59XG5cbmZ1bmN0aW9uIGF0dGVtcHRWZXJ0eCgpIHtcbiAgdHJ5IHtcbiAgICB2YXIgciA9IHJlcXVpcmU7XG4gICAgdmFyIHZlcnR4ID0gcigndmVydHgnKTtcbiAgICB2ZXJ0eE5leHQgPSB2ZXJ0eC5ydW5Pbkxvb3AgfHwgdmVydHgucnVuT25Db250ZXh0O1xuICAgIHJldHVybiB1c2VWZXJ0eFRpbWVyKCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICByZXR1cm4gdXNlU2V0VGltZW91dCgpO1xuICB9XG59XG5cbnZhciBzY2hlZHVsZUZsdXNoID0gdW5kZWZpbmVkO1xuLy8gRGVjaWRlIHdoYXQgYXN5bmMgbWV0aG9kIHRvIHVzZSB0byB0cmlnZ2VyaW5nIHByb2Nlc3Npbmcgb2YgcXVldWVkIGNhbGxiYWNrczpcbmlmIChpc05vZGUpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZU5leHRUaWNrKCk7XG59IGVsc2UgaWYgKEJyb3dzZXJNdXRhdGlvbk9ic2VydmVyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNdXRhdGlvbk9ic2VydmVyKCk7XG59IGVsc2UgaWYgKGlzV29ya2VyKSB7XG4gIHNjaGVkdWxlRmx1c2ggPSB1c2VNZXNzYWdlQ2hhbm5lbCgpO1xufSBlbHNlIGlmIChicm93c2VyV2luZG93ID09PSB1bmRlZmluZWQgJiYgdHlwZW9mIHJlcXVpcmUgPT09ICdmdW5jdGlvbicpIHtcbiAgc2NoZWR1bGVGbHVzaCA9IGF0dGVtcHRWZXJ0eCgpO1xufSBlbHNlIHtcbiAgc2NoZWR1bGVGbHVzaCA9IHVzZVNldFRpbWVvdXQoKTtcbn1cblxuZnVuY3Rpb24gdGhlbihvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX2FyZ3VtZW50cyA9IGFyZ3VtZW50cztcblxuICB2YXIgcGFyZW50ID0gdGhpcztcblxuICB2YXIgY2hpbGQgPSBuZXcgdGhpcy5jb25zdHJ1Y3Rvcihub29wKTtcblxuICBpZiAoY2hpbGRbUFJPTUlTRV9JRF0gPT09IHVuZGVmaW5lZCkge1xuICAgIG1ha2VQcm9taXNlKGNoaWxkKTtcbiAgfVxuXG4gIHZhciBfc3RhdGUgPSBwYXJlbnQuX3N0YXRlO1xuXG4gIGlmIChfc3RhdGUpIHtcbiAgICAoZnVuY3Rpb24gKCkge1xuICAgICAgdmFyIGNhbGxiYWNrID0gX2FyZ3VtZW50c1tfc3RhdGUgLSAxXTtcbiAgICAgIGFzYXAoZnVuY3Rpb24gKCkge1xuICAgICAgICByZXR1cm4gaW52b2tlQ2FsbGJhY2soX3N0YXRlLCBjaGlsZCwgY2FsbGJhY2ssIHBhcmVudC5fcmVzdWx0KTtcbiAgICAgIH0pO1xuICAgIH0pKCk7XG4gIH0gZWxzZSB7XG4gICAgc3Vic2NyaWJlKHBhcmVudCwgY2hpbGQsIG9uRnVsZmlsbG1lbnQsIG9uUmVqZWN0aW9uKTtcbiAgfVxuXG4gIHJldHVybiBjaGlsZDtcbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlc29sdmVgIHJldHVybnMgYSBwcm9taXNlIHRoYXQgd2lsbCBiZWNvbWUgcmVzb2x2ZWQgd2l0aCB0aGVcbiAgcGFzc2VkIGB2YWx1ZWAuIEl0IGlzIHNob3J0aGFuZCBmb3IgdGhlIGZvbGxvd2luZzpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICByZXNvbHZlKDEpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBJbnN0ZWFkIG9mIHdyaXRpbmcgdGhlIGFib3ZlLCB5b3VyIGNvZGUgbm93IHNpbXBseSBiZWNvbWVzIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IFByb21pc2UucmVzb2x2ZSgxKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIHZhbHVlID09PSAxXG4gIH0pO1xuICBgYGBcblxuICBAbWV0aG9kIHJlc29sdmVcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gdmFsdWUgdmFsdWUgdGhhdCB0aGUgcmV0dXJuZWQgcHJvbWlzZSB3aWxsIGJlIHJlc29sdmVkIHdpdGhcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2UgdGhhdCB3aWxsIGJlY29tZSBmdWxmaWxsZWQgd2l0aCB0aGUgZ2l2ZW5cbiAgYHZhbHVlYFxuKi9cbmZ1bmN0aW9uIHJlc29sdmUob2JqZWN0KSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG5cbiAgaWYgKG9iamVjdCAmJiB0eXBlb2Ygb2JqZWN0ID09PSAnb2JqZWN0JyAmJiBvYmplY3QuY29uc3RydWN0b3IgPT09IENvbnN0cnVjdG9yKSB7XG4gICAgcmV0dXJuIG9iamVjdDtcbiAgfVxuXG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVzb2x2ZShwcm9taXNlLCBvYmplY3QpO1xuICByZXR1cm4gcHJvbWlzZTtcbn1cblxudmFyIFBST01JU0VfSUQgPSBNYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zdWJzdHJpbmcoMTYpO1xuXG5mdW5jdGlvbiBub29wKCkge31cblxudmFyIFBFTkRJTkcgPSB2b2lkIDA7XG52YXIgRlVMRklMTEVEID0gMTtcbnZhciBSRUpFQ1RFRCA9IDI7XG5cbnZhciBHRVRfVEhFTl9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiBzZWxmRnVsZmlsbG1lbnQoKSB7XG4gIHJldHVybiBuZXcgVHlwZUVycm9yKFwiWW91IGNhbm5vdCByZXNvbHZlIGEgcHJvbWlzZSB3aXRoIGl0c2VsZlwiKTtcbn1cblxuZnVuY3Rpb24gY2Fubm90UmV0dXJuT3duKCkge1xuICByZXR1cm4gbmV3IFR5cGVFcnJvcignQSBwcm9taXNlcyBjYWxsYmFjayBjYW5ub3QgcmV0dXJuIHRoYXQgc2FtZSBwcm9taXNlLicpO1xufVxuXG5mdW5jdGlvbiBnZXRUaGVuKHByb21pc2UpIHtcbiAgdHJ5IHtcbiAgICByZXR1cm4gcHJvbWlzZS50aGVuO1xuICB9IGNhdGNoIChlcnJvcikge1xuICAgIEdFVF9USEVOX0VSUk9SLmVycm9yID0gZXJyb3I7XG4gICAgcmV0dXJuIEdFVF9USEVOX0VSUk9SO1xuICB9XG59XG5cbmZ1bmN0aW9uIHRyeVRoZW4odGhlbiwgdmFsdWUsIGZ1bGZpbGxtZW50SGFuZGxlciwgcmVqZWN0aW9uSGFuZGxlcikge1xuICB0cnkge1xuICAgIHRoZW4uY2FsbCh2YWx1ZSwgZnVsZmlsbG1lbnRIYW5kbGVyLCByZWplY3Rpb25IYW5kbGVyKTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIHJldHVybiBlO1xuICB9XG59XG5cbmZ1bmN0aW9uIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSwgdGhlbikge1xuICBhc2FwKGZ1bmN0aW9uIChwcm9taXNlKSB7XG4gICAgdmFyIHNlYWxlZCA9IGZhbHNlO1xuICAgIHZhciBlcnJvciA9IHRyeVRoZW4odGhlbiwgdGhlbmFibGUsIGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgaWYgKHNlYWxlZCkge1xuICAgICAgICByZXR1cm47XG4gICAgICB9XG4gICAgICBzZWFsZWQgPSB0cnVlO1xuICAgICAgaWYgKHRoZW5hYmxlICE9PSB2YWx1ZSkge1xuICAgICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgICB9IGVsc2Uge1xuICAgICAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgICAgIH1cbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICBpZiAoc2VhbGVkKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIHNlYWxlZCA9IHRydWU7XG5cbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9LCAnU2V0dGxlOiAnICsgKHByb21pc2UuX2xhYmVsIHx8ICcgdW5rbm93biBwcm9taXNlJykpO1xuXG4gICAgaWYgKCFzZWFsZWQgJiYgZXJyb3IpIHtcbiAgICAgIHNlYWxlZCA9IHRydWU7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9XG4gIH0sIHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBoYW5kbGVPd25UaGVuYWJsZShwcm9taXNlLCB0aGVuYWJsZSkge1xuICBpZiAodGhlbmFibGUuX3N0YXRlID09PSBGVUxGSUxMRUQpIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2UgaWYgKHRoZW5hYmxlLl9zdGF0ZSA9PT0gUkVKRUNURUQpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHRoZW5hYmxlLl9yZXN1bHQpO1xuICB9IGVsc2Uge1xuICAgIHN1YnNjcmliZSh0aGVuYWJsZSwgdW5kZWZpbmVkLCBmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIHJldHVybiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfVxufVxuXG5mdW5jdGlvbiBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIG1heWJlVGhlbmFibGUsIHRoZW4kJCkge1xuICBpZiAobWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3RvciA9PT0gcHJvbWlzZS5jb25zdHJ1Y3RvciAmJiB0aGVuJCQgPT09IHRoZW4gJiYgbWF5YmVUaGVuYWJsZS5jb25zdHJ1Y3Rvci5yZXNvbHZlID09PSByZXNvbHZlKSB7XG4gICAgaGFuZGxlT3duVGhlbmFibGUocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gIH0gZWxzZSB7XG4gICAgaWYgKHRoZW4kJCA9PT0gR0VUX1RIRU5fRVJST1IpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgR0VUX1RIRU5fRVJST1IuZXJyb3IpO1xuICAgICAgR0VUX1RIRU5fRVJST1IuZXJyb3IgPSBudWxsO1xuICAgIH0gZWxzZSBpZiAodGhlbiQkID09PSB1bmRlZmluZWQpIHtcbiAgICAgIGZ1bGZpbGwocHJvbWlzZSwgbWF5YmVUaGVuYWJsZSk7XG4gICAgfSBlbHNlIGlmIChpc0Z1bmN0aW9uKHRoZW4kJCkpIHtcbiAgICAgIGhhbmRsZUZvcmVpZ25UaGVuYWJsZShwcm9taXNlLCBtYXliZVRoZW5hYmxlLCB0aGVuJCQpO1xuICAgIH0gZWxzZSB7XG4gICAgICBmdWxmaWxsKHByb21pc2UsIG1heWJlVGhlbmFibGUpO1xuICAgIH1cbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSkge1xuICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICBfcmVqZWN0KHByb21pc2UsIHNlbGZGdWxmaWxsbWVudCgpKTtcbiAgfSBlbHNlIGlmIChvYmplY3RPckZ1bmN0aW9uKHZhbHVlKSkge1xuICAgIGhhbmRsZU1heWJlVGhlbmFibGUocHJvbWlzZSwgdmFsdWUsIGdldFRoZW4odmFsdWUpKTtcbiAgfSBlbHNlIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHZhbHVlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBwdWJsaXNoUmVqZWN0aW9uKHByb21pc2UpIHtcbiAgaWYgKHByb21pc2UuX29uZXJyb3IpIHtcbiAgICBwcm9taXNlLl9vbmVycm9yKHByb21pc2UuX3Jlc3VsdCk7XG4gIH1cblxuICBwdWJsaXNoKHByb21pc2UpO1xufVxuXG5mdW5jdGlvbiBmdWxmaWxsKHByb21pc2UsIHZhbHVlKSB7XG4gIGlmIChwcm9taXNlLl9zdGF0ZSAhPT0gUEVORElORykge1xuICAgIHJldHVybjtcbiAgfVxuXG4gIHByb21pc2UuX3Jlc3VsdCA9IHZhbHVlO1xuICBwcm9taXNlLl9zdGF0ZSA9IEZVTEZJTExFRDtcblxuICBpZiAocHJvbWlzZS5fc3Vic2NyaWJlcnMubGVuZ3RoICE9PSAwKSB7XG4gICAgYXNhcChwdWJsaXNoLCBwcm9taXNlKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBfcmVqZWN0KHByb21pc2UsIHJlYXNvbikge1xuICBpZiAocHJvbWlzZS5fc3RhdGUgIT09IFBFTkRJTkcpIHtcbiAgICByZXR1cm47XG4gIH1cbiAgcHJvbWlzZS5fc3RhdGUgPSBSRUpFQ1RFRDtcbiAgcHJvbWlzZS5fcmVzdWx0ID0gcmVhc29uO1xuXG4gIGFzYXAocHVibGlzaFJlamVjdGlvbiwgcHJvbWlzZSk7XG59XG5cbmZ1bmN0aW9uIHN1YnNjcmliZShwYXJlbnQsIGNoaWxkLCBvbkZ1bGZpbGxtZW50LCBvblJlamVjdGlvbikge1xuICB2YXIgX3N1YnNjcmliZXJzID0gcGFyZW50Ll9zdWJzY3JpYmVycztcbiAgdmFyIGxlbmd0aCA9IF9zdWJzY3JpYmVycy5sZW5ndGg7XG5cbiAgcGFyZW50Ll9vbmVycm9yID0gbnVsbDtcblxuICBfc3Vic2NyaWJlcnNbbGVuZ3RoXSA9IGNoaWxkO1xuICBfc3Vic2NyaWJlcnNbbGVuZ3RoICsgRlVMRklMTEVEXSA9IG9uRnVsZmlsbG1lbnQ7XG4gIF9zdWJzY3JpYmVyc1tsZW5ndGggKyBSRUpFQ1RFRF0gPSBvblJlamVjdGlvbjtcblxuICBpZiAobGVuZ3RoID09PSAwICYmIHBhcmVudC5fc3RhdGUpIHtcbiAgICBhc2FwKHB1Ymxpc2gsIHBhcmVudCk7XG4gIH1cbn1cblxuZnVuY3Rpb24gcHVibGlzaChwcm9taXNlKSB7XG4gIHZhciBzdWJzY3JpYmVycyA9IHByb21pc2UuX3N1YnNjcmliZXJzO1xuICB2YXIgc2V0dGxlZCA9IHByb21pc2UuX3N0YXRlO1xuXG4gIGlmIChzdWJzY3JpYmVycy5sZW5ndGggPT09IDApIHtcbiAgICByZXR1cm47XG4gIH1cblxuICB2YXIgY2hpbGQgPSB1bmRlZmluZWQsXG4gICAgICBjYWxsYmFjayA9IHVuZGVmaW5lZCxcbiAgICAgIGRldGFpbCA9IHByb21pc2UuX3Jlc3VsdDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IHN1YnNjcmliZXJzLmxlbmd0aDsgaSArPSAzKSB7XG4gICAgY2hpbGQgPSBzdWJzY3JpYmVyc1tpXTtcbiAgICBjYWxsYmFjayA9IHN1YnNjcmliZXJzW2kgKyBzZXR0bGVkXTtcblxuICAgIGlmIChjaGlsZCkge1xuICAgICAgaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgY2hpbGQsIGNhbGxiYWNrLCBkZXRhaWwpO1xuICAgIH0gZWxzZSB7XG4gICAgICBjYWxsYmFjayhkZXRhaWwpO1xuICAgIH1cbiAgfVxuXG4gIHByb21pc2UuX3N1YnNjcmliZXJzLmxlbmd0aCA9IDA7XG59XG5cbmZ1bmN0aW9uIEVycm9yT2JqZWN0KCkge1xuICB0aGlzLmVycm9yID0gbnVsbDtcbn1cblxudmFyIFRSWV9DQVRDSF9FUlJPUiA9IG5ldyBFcnJvck9iamVjdCgpO1xuXG5mdW5jdGlvbiB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKSB7XG4gIHRyeSB7XG4gICAgcmV0dXJuIGNhbGxiYWNrKGRldGFpbCk7XG4gIH0gY2F0Y2ggKGUpIHtcbiAgICBUUllfQ0FUQ0hfRVJST1IuZXJyb3IgPSBlO1xuICAgIHJldHVybiBUUllfQ0FUQ0hfRVJST1I7XG4gIH1cbn1cblxuZnVuY3Rpb24gaW52b2tlQ2FsbGJhY2soc2V0dGxlZCwgcHJvbWlzZSwgY2FsbGJhY2ssIGRldGFpbCkge1xuICB2YXIgaGFzQ2FsbGJhY2sgPSBpc0Z1bmN0aW9uKGNhbGxiYWNrKSxcbiAgICAgIHZhbHVlID0gdW5kZWZpbmVkLFxuICAgICAgZXJyb3IgPSB1bmRlZmluZWQsXG4gICAgICBzdWNjZWVkZWQgPSB1bmRlZmluZWQsXG4gICAgICBmYWlsZWQgPSB1bmRlZmluZWQ7XG5cbiAgaWYgKGhhc0NhbGxiYWNrKSB7XG4gICAgdmFsdWUgPSB0cnlDYXRjaChjYWxsYmFjaywgZGV0YWlsKTtcblxuICAgIGlmICh2YWx1ZSA9PT0gVFJZX0NBVENIX0VSUk9SKSB7XG4gICAgICBmYWlsZWQgPSB0cnVlO1xuICAgICAgZXJyb3IgPSB2YWx1ZS5lcnJvcjtcbiAgICAgIHZhbHVlLmVycm9yID0gbnVsbDtcbiAgICB9IGVsc2Uge1xuICAgICAgc3VjY2VlZGVkID0gdHJ1ZTtcbiAgICB9XG5cbiAgICBpZiAocHJvbWlzZSA9PT0gdmFsdWUpIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgY2Fubm90UmV0dXJuT3duKCkpO1xuICAgICAgcmV0dXJuO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB2YWx1ZSA9IGRldGFpbDtcbiAgICBzdWNjZWVkZWQgPSB0cnVlO1xuICB9XG5cbiAgaWYgKHByb21pc2UuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgLy8gbm9vcFxuICB9IGVsc2UgaWYgKGhhc0NhbGxiYWNrICYmIHN1Y2NlZWRlZCkge1xuICAgICAgX3Jlc29sdmUocHJvbWlzZSwgdmFsdWUpO1xuICAgIH0gZWxzZSBpZiAoZmFpbGVkKSB7XG4gICAgICBfcmVqZWN0KHByb21pc2UsIGVycm9yKTtcbiAgICB9IGVsc2UgaWYgKHNldHRsZWQgPT09IEZVTEZJTExFRCkge1xuICAgICAgZnVsZmlsbChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIGlmIChzZXR0bGVkID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfVxufVxuXG5mdW5jdGlvbiBpbml0aWFsaXplUHJvbWlzZShwcm9taXNlLCByZXNvbHZlcikge1xuICB0cnkge1xuICAgIHJlc29sdmVyKGZ1bmN0aW9uIHJlc29sdmVQcm9taXNlKHZhbHVlKSB7XG4gICAgICBfcmVzb2x2ZShwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSwgZnVuY3Rpb24gcmVqZWN0UHJvbWlzZShyZWFzb24pIHtcbiAgICAgIF9yZWplY3QocHJvbWlzZSwgcmVhc29uKTtcbiAgICB9KTtcbiAgfSBjYXRjaCAoZSkge1xuICAgIF9yZWplY3QocHJvbWlzZSwgZSk7XG4gIH1cbn1cblxudmFyIGlkID0gMDtcbmZ1bmN0aW9uIG5leHRJZCgpIHtcbiAgcmV0dXJuIGlkKys7XG59XG5cbmZ1bmN0aW9uIG1ha2VQcm9taXNlKHByb21pc2UpIHtcbiAgcHJvbWlzZVtQUk9NSVNFX0lEXSA9IGlkKys7XG4gIHByb21pc2UuX3N0YXRlID0gdW5kZWZpbmVkO1xuICBwcm9taXNlLl9yZXN1bHQgPSB1bmRlZmluZWQ7XG4gIHByb21pc2UuX3N1YnNjcmliZXJzID0gW107XG59XG5cbmZ1bmN0aW9uIEVudW1lcmF0b3IoQ29uc3RydWN0b3IsIGlucHV0KSB7XG4gIHRoaXMuX2luc3RhbmNlQ29uc3RydWN0b3IgPSBDb25zdHJ1Y3RvcjtcbiAgdGhpcy5wcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuXG4gIGlmICghdGhpcy5wcm9taXNlW1BST01JU0VfSURdKSB7XG4gICAgbWFrZVByb21pc2UodGhpcy5wcm9taXNlKTtcbiAgfVxuXG4gIGlmIChpc0FycmF5KGlucHV0KSkge1xuICAgIHRoaXMuX2lucHV0ID0gaW5wdXQ7XG4gICAgdGhpcy5sZW5ndGggPSBpbnB1dC5sZW5ndGg7XG4gICAgdGhpcy5fcmVtYWluaW5nID0gaW5wdXQubGVuZ3RoO1xuXG4gICAgdGhpcy5fcmVzdWx0ID0gbmV3IEFycmF5KHRoaXMubGVuZ3RoKTtcblxuICAgIGlmICh0aGlzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgZnVsZmlsbCh0aGlzLnByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMubGVuZ3RoID0gdGhpcy5sZW5ndGggfHwgMDtcbiAgICAgIHRoaXMuX2VudW1lcmF0ZSgpO1xuICAgICAgaWYgKHRoaXMuX3JlbWFpbmluZyA9PT0gMCkge1xuICAgICAgICBmdWxmaWxsKHRoaXMucHJvbWlzZSwgdGhpcy5fcmVzdWx0KTtcbiAgICAgIH1cbiAgICB9XG4gIH0gZWxzZSB7XG4gICAgX3JlamVjdCh0aGlzLnByb21pc2UsIHZhbGlkYXRpb25FcnJvcigpKTtcbiAgfVxufVxuXG5mdW5jdGlvbiB2YWxpZGF0aW9uRXJyb3IoKSB7XG4gIHJldHVybiBuZXcgRXJyb3IoJ0FycmF5IE1ldGhvZHMgbXVzdCBiZSBwcm92aWRlZCBhbiBBcnJheScpO1xufTtcblxuRW51bWVyYXRvci5wcm90b3R5cGUuX2VudW1lcmF0ZSA9IGZ1bmN0aW9uICgpIHtcbiAgdmFyIGxlbmd0aCA9IHRoaXMubGVuZ3RoO1xuICB2YXIgX2lucHV0ID0gdGhpcy5faW5wdXQ7XG5cbiAgZm9yICh2YXIgaSA9IDA7IHRoaXMuX3N0YXRlID09PSBQRU5ESU5HICYmIGkgPCBsZW5ndGg7IGkrKykge1xuICAgIHRoaXMuX2VhY2hFbnRyeShfaW5wdXRbaV0sIGkpO1xuICB9XG59O1xuXG5FbnVtZXJhdG9yLnByb3RvdHlwZS5fZWFjaEVudHJ5ID0gZnVuY3Rpb24gKGVudHJ5LCBpKSB7XG4gIHZhciBjID0gdGhpcy5faW5zdGFuY2VDb25zdHJ1Y3RvcjtcbiAgdmFyIHJlc29sdmUkJCA9IGMucmVzb2x2ZTtcblxuICBpZiAocmVzb2x2ZSQkID09PSByZXNvbHZlKSB7XG4gICAgdmFyIF90aGVuID0gZ2V0VGhlbihlbnRyeSk7XG5cbiAgICBpZiAoX3RoZW4gPT09IHRoZW4gJiYgZW50cnkuX3N0YXRlICE9PSBQRU5ESU5HKSB7XG4gICAgICB0aGlzLl9zZXR0bGVkQXQoZW50cnkuX3N0YXRlLCBpLCBlbnRyeS5fcmVzdWx0KTtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBfdGhlbiAhPT0gJ2Z1bmN0aW9uJykge1xuICAgICAgdGhpcy5fcmVtYWluaW5nLS07XG4gICAgICB0aGlzLl9yZXN1bHRbaV0gPSBlbnRyeTtcbiAgICB9IGVsc2UgaWYgKGMgPT09IFByb21pc2UpIHtcbiAgICAgIHZhciBwcm9taXNlID0gbmV3IGMobm9vcCk7XG4gICAgICBoYW5kbGVNYXliZVRoZW5hYmxlKHByb21pc2UsIGVudHJ5LCBfdGhlbik7XG4gICAgICB0aGlzLl93aWxsU2V0dGxlQXQocHJvbWlzZSwgaSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3dpbGxTZXR0bGVBdChuZXcgYyhmdW5jdGlvbiAocmVzb2x2ZSQkKSB7XG4gICAgICAgIHJldHVybiByZXNvbHZlJCQoZW50cnkpO1xuICAgICAgfSksIGkpO1xuICAgIH1cbiAgfSBlbHNlIHtcbiAgICB0aGlzLl93aWxsU2V0dGxlQXQocmVzb2x2ZSQkKGVudHJ5KSwgaSk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl9zZXR0bGVkQXQgPSBmdW5jdGlvbiAoc3RhdGUsIGksIHZhbHVlKSB7XG4gIHZhciBwcm9taXNlID0gdGhpcy5wcm9taXNlO1xuXG4gIGlmIChwcm9taXNlLl9zdGF0ZSA9PT0gUEVORElORykge1xuICAgIHRoaXMuX3JlbWFpbmluZy0tO1xuXG4gICAgaWYgKHN0YXRlID09PSBSRUpFQ1RFRCkge1xuICAgICAgX3JlamVjdChwcm9taXNlLCB2YWx1ZSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXMuX3Jlc3VsdFtpXSA9IHZhbHVlO1xuICAgIH1cbiAgfVxuXG4gIGlmICh0aGlzLl9yZW1haW5pbmcgPT09IDApIHtcbiAgICBmdWxmaWxsKHByb21pc2UsIHRoaXMuX3Jlc3VsdCk7XG4gIH1cbn07XG5cbkVudW1lcmF0b3IucHJvdG90eXBlLl93aWxsU2V0dGxlQXQgPSBmdW5jdGlvbiAocHJvbWlzZSwgaSkge1xuICB2YXIgZW51bWVyYXRvciA9IHRoaXM7XG5cbiAgc3Vic2NyaWJlKHByb21pc2UsIHVuZGVmaW5lZCwgZnVuY3Rpb24gKHZhbHVlKSB7XG4gICAgcmV0dXJuIGVudW1lcmF0b3IuX3NldHRsZWRBdChGVUxGSUxMRUQsIGksIHZhbHVlKTtcbiAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgIHJldHVybiBlbnVtZXJhdG9yLl9zZXR0bGVkQXQoUkVKRUNURUQsIGksIHJlYXNvbik7XG4gIH0pO1xufTtcblxuLyoqXG4gIGBQcm9taXNlLmFsbGAgYWNjZXB0cyBhbiBhcnJheSBvZiBwcm9taXNlcywgYW5kIHJldHVybnMgYSBuZXcgcHJvbWlzZSB3aGljaFxuICBpcyBmdWxmaWxsZWQgd2l0aCBhbiBhcnJheSBvZiBmdWxmaWxsbWVudCB2YWx1ZXMgZm9yIHRoZSBwYXNzZWQgcHJvbWlzZXMsIG9yXG4gIHJlamVjdGVkIHdpdGggdGhlIHJlYXNvbiBvZiB0aGUgZmlyc3QgcGFzc2VkIHByb21pc2UgdG8gYmUgcmVqZWN0ZWQuIEl0IGNhc3RzIGFsbFxuICBlbGVtZW50cyBvZiB0aGUgcGFzc2VkIGl0ZXJhYmxlIHRvIHByb21pc2VzIGFzIGl0IHJ1bnMgdGhpcyBhbGdvcml0aG0uXG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlc29sdmUoMik7XG4gIGxldCBwcm9taXNlMyA9IHJlc29sdmUoMyk7XG4gIGxldCBwcm9taXNlcyA9IFsgcHJvbWlzZTEsIHByb21pc2UyLCBwcm9taXNlMyBdO1xuXG4gIFByb21pc2UuYWxsKHByb21pc2VzKS50aGVuKGZ1bmN0aW9uKGFycmF5KXtcbiAgICAvLyBUaGUgYXJyYXkgaGVyZSB3b3VsZCBiZSBbIDEsIDIsIDMgXTtcbiAgfSk7XG4gIGBgYFxuXG4gIElmIGFueSBvZiB0aGUgYHByb21pc2VzYCBnaXZlbiB0byBgYWxsYCBhcmUgcmVqZWN0ZWQsIHRoZSBmaXJzdCBwcm9taXNlXG4gIHRoYXQgaXMgcmVqZWN0ZWQgd2lsbCBiZSBnaXZlbiBhcyBhbiBhcmd1bWVudCB0byB0aGUgcmV0dXJuZWQgcHJvbWlzZXMnc1xuICByZWplY3Rpb24gaGFuZGxlci4gRm9yIGV4YW1wbGU6XG5cbiAgRXhhbXBsZTpcblxuICBgYGBqYXZhc2NyaXB0XG4gIGxldCBwcm9taXNlMSA9IHJlc29sdmUoMSk7XG4gIGxldCBwcm9taXNlMiA9IHJlamVjdChuZXcgRXJyb3IoXCIyXCIpKTtcbiAgbGV0IHByb21pc2UzID0gcmVqZWN0KG5ldyBFcnJvcihcIjNcIikpO1xuICBsZXQgcHJvbWlzZXMgPSBbIHByb21pc2UxLCBwcm9taXNlMiwgcHJvbWlzZTMgXTtcblxuICBQcm9taXNlLmFsbChwcm9taXNlcykudGhlbihmdW5jdGlvbihhcnJheSl7XG4gICAgLy8gQ29kZSBoZXJlIG5ldmVyIHJ1bnMgYmVjYXVzZSB0aGVyZSBhcmUgcmVqZWN0ZWQgcHJvbWlzZXMhXG4gIH0sIGZ1bmN0aW9uKGVycm9yKSB7XG4gICAgLy8gZXJyb3IubWVzc2FnZSA9PT0gXCIyXCJcbiAgfSk7XG4gIGBgYFxuXG4gIEBtZXRob2QgYWxsXG4gIEBzdGF0aWNcbiAgQHBhcmFtIHtBcnJheX0gZW50cmllcyBhcnJheSBvZiBwcm9taXNlc1xuICBAcGFyYW0ge1N0cmluZ30gbGFiZWwgb3B0aW9uYWwgc3RyaW5nIGZvciBsYWJlbGluZyB0aGUgcHJvbWlzZS5cbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBwcm9taXNlIHRoYXQgaXMgZnVsZmlsbGVkIHdoZW4gYWxsIGBwcm9taXNlc2AgaGF2ZSBiZWVuXG4gIGZ1bGZpbGxlZCwgb3IgcmVqZWN0ZWQgaWYgYW55IG9mIHRoZW0gYmVjb21lIHJlamVjdGVkLlxuICBAc3RhdGljXG4qL1xuZnVuY3Rpb24gYWxsKGVudHJpZXMpIHtcbiAgcmV0dXJuIG5ldyBFbnVtZXJhdG9yKHRoaXMsIGVudHJpZXMpLnByb21pc2U7XG59XG5cbi8qKlxuICBgUHJvbWlzZS5yYWNlYCByZXR1cm5zIGEgbmV3IHByb21pc2Ugd2hpY2ggaXMgc2V0dGxlZCBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlXG4gIGZpcnN0IHBhc3NlZCBwcm9taXNlIHRvIHNldHRsZS5cblxuICBFeGFtcGxlOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UxID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7XG4gICAgICByZXNvbHZlKCdwcm9taXNlIDEnKTtcbiAgICB9LCAyMDApO1xuICB9KTtcblxuICBsZXQgcHJvbWlzZTIgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMicpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIHJlc3VsdCA9PT0gJ3Byb21pc2UgMicgYmVjYXVzZSBpdCB3YXMgcmVzb2x2ZWQgYmVmb3JlIHByb21pc2UxXG4gICAgLy8gd2FzIHJlc29sdmVkLlxuICB9KTtcbiAgYGBgXG5cbiAgYFByb21pc2UucmFjZWAgaXMgZGV0ZXJtaW5pc3RpYyBpbiB0aGF0IG9ubHkgdGhlIHN0YXRlIG9mIHRoZSBmaXJzdFxuICBzZXR0bGVkIHByb21pc2UgbWF0dGVycy4gRm9yIGV4YW1wbGUsIGV2ZW4gaWYgb3RoZXIgcHJvbWlzZXMgZ2l2ZW4gdG8gdGhlXG4gIGBwcm9taXNlc2AgYXJyYXkgYXJndW1lbnQgYXJlIHJlc29sdmVkLCBidXQgdGhlIGZpcnN0IHNldHRsZWQgcHJvbWlzZSBoYXNcbiAgYmVjb21lIHJlamVjdGVkIGJlZm9yZSB0aGUgb3RoZXIgcHJvbWlzZXMgYmVjYW1lIGZ1bGZpbGxlZCwgdGhlIHJldHVybmVkXG4gIHByb21pc2Ugd2lsbCBiZWNvbWUgcmVqZWN0ZWQ6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZTEgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3Qpe1xuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKXtcbiAgICAgIHJlc29sdmUoJ3Byb21pc2UgMScpO1xuICAgIH0sIDIwMCk7XG4gIH0pO1xuXG4gIGxldCBwcm9taXNlMiA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xuICAgICAgcmVqZWN0KG5ldyBFcnJvcigncHJvbWlzZSAyJykpO1xuICAgIH0sIDEwMCk7XG4gIH0pO1xuXG4gIFByb21pc2UucmFjZShbcHJvbWlzZTEsIHByb21pc2UyXSkudGhlbihmdW5jdGlvbihyZXN1bHQpe1xuICAgIC8vIENvZGUgaGVyZSBuZXZlciBydW5zXG4gIH0sIGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgLy8gcmVhc29uLm1lc3NhZ2UgPT09ICdwcm9taXNlIDInIGJlY2F1c2UgcHJvbWlzZSAyIGJlY2FtZSByZWplY3RlZCBiZWZvcmVcbiAgICAvLyBwcm9taXNlIDEgYmVjYW1lIGZ1bGZpbGxlZFxuICB9KTtcbiAgYGBgXG5cbiAgQW4gZXhhbXBsZSByZWFsLXdvcmxkIHVzZSBjYXNlIGlzIGltcGxlbWVudGluZyB0aW1lb3V0czpcblxuICBgYGBqYXZhc2NyaXB0XG4gIFByb21pc2UucmFjZShbYWpheCgnZm9vLmpzb24nKSwgdGltZW91dCg1MDAwKV0pXG4gIGBgYFxuXG4gIEBtZXRob2QgcmFjZVxuICBAc3RhdGljXG4gIEBwYXJhbSB7QXJyYXl9IHByb21pc2VzIGFycmF5IG9mIHByb21pc2VzIHRvIG9ic2VydmVcbiAgVXNlZnVsIGZvciB0b29saW5nLlxuICBAcmV0dXJuIHtQcm9taXNlfSBhIHByb21pc2Ugd2hpY2ggc2V0dGxlcyBpbiB0aGUgc2FtZSB3YXkgYXMgdGhlIGZpcnN0IHBhc3NlZFxuICBwcm9taXNlIHRvIHNldHRsZS5cbiovXG5mdW5jdGlvbiByYWNlKGVudHJpZXMpIHtcbiAgLypqc2hpbnQgdmFsaWR0aGlzOnRydWUgKi9cbiAgdmFyIENvbnN0cnVjdG9yID0gdGhpcztcblxuICBpZiAoIWlzQXJyYXkoZW50cmllcykpIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChfLCByZWplY3QpIHtcbiAgICAgIHJldHVybiByZWplY3QobmV3IFR5cGVFcnJvcignWW91IG11c3QgcGFzcyBhbiBhcnJheSB0byByYWNlLicpKTtcbiAgICB9KTtcbiAgfSBlbHNlIHtcbiAgICByZXR1cm4gbmV3IENvbnN0cnVjdG9yKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgIHZhciBsZW5ndGggPSBlbnRyaWVzLmxlbmd0aDtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgQ29uc3RydWN0b3IucmVzb2x2ZShlbnRyaWVzW2ldKS50aGVuKHJlc29sdmUsIHJlamVjdCk7XG4gICAgICB9XG4gICAgfSk7XG4gIH1cbn1cblxuLyoqXG4gIGBQcm9taXNlLnJlamVjdGAgcmV0dXJucyBhIHByb21pc2UgcmVqZWN0ZWQgd2l0aCB0aGUgcGFzc2VkIGByZWFzb25gLlxuICBJdCBpcyBzaG9ydGhhbmQgZm9yIHRoZSBmb2xsb3dpbmc6XG5cbiAgYGBgamF2YXNjcmlwdFxuICBsZXQgcHJvbWlzZSA9IG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUsIHJlamVjdCl7XG4gICAgcmVqZWN0KG5ldyBFcnJvcignV0hPT1BTJykpO1xuICB9KTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgSW5zdGVhZCBvZiB3cml0aW5nIHRoZSBhYm92ZSwgeW91ciBjb2RlIG5vdyBzaW1wbHkgYmVjb21lcyB0aGUgZm9sbG93aW5nOlxuXG4gIGBgYGphdmFzY3JpcHRcbiAgbGV0IHByb21pc2UgPSBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJ1dIT09QUycpKTtcblxuICBwcm9taXNlLnRoZW4oZnVuY3Rpb24odmFsdWUpe1xuICAgIC8vIENvZGUgaGVyZSBkb2Vzbid0IHJ1biBiZWNhdXNlIHRoZSBwcm9taXNlIGlzIHJlamVjdGVkIVxuICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgIC8vIHJlYXNvbi5tZXNzYWdlID09PSAnV0hPT1BTJ1xuICB9KTtcbiAgYGBgXG5cbiAgQG1ldGhvZCByZWplY3RcbiAgQHN0YXRpY1xuICBAcGFyYW0ge0FueX0gcmVhc29uIHZhbHVlIHRoYXQgdGhlIHJldHVybmVkIHByb21pc2Ugd2lsbCBiZSByZWplY3RlZCB3aXRoLlxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEByZXR1cm4ge1Byb21pc2V9IGEgcHJvbWlzZSByZWplY3RlZCB3aXRoIHRoZSBnaXZlbiBgcmVhc29uYC5cbiovXG5mdW5jdGlvbiByZWplY3QocmVhc29uKSB7XG4gIC8qanNoaW50IHZhbGlkdGhpczp0cnVlICovXG4gIHZhciBDb25zdHJ1Y3RvciA9IHRoaXM7XG4gIHZhciBwcm9taXNlID0gbmV3IENvbnN0cnVjdG9yKG5vb3ApO1xuICBfcmVqZWN0KHByb21pc2UsIHJlYXNvbik7XG4gIHJldHVybiBwcm9taXNlO1xufVxuXG5mdW5jdGlvbiBuZWVkc1Jlc29sdmVyKCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKCdZb3UgbXVzdCBwYXNzIGEgcmVzb2x2ZXIgZnVuY3Rpb24gYXMgdGhlIGZpcnN0IGFyZ3VtZW50IHRvIHRoZSBwcm9taXNlIGNvbnN0cnVjdG9yJyk7XG59XG5cbmZ1bmN0aW9uIG5lZWRzTmV3KCkge1xuICB0aHJvdyBuZXcgVHlwZUVycm9yKFwiRmFpbGVkIHRvIGNvbnN0cnVjdCAnUHJvbWlzZSc6IFBsZWFzZSB1c2UgdGhlICduZXcnIG9wZXJhdG9yLCB0aGlzIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uXCIpO1xufVxuXG4vKipcbiAgUHJvbWlzZSBvYmplY3RzIHJlcHJlc2VudCB0aGUgZXZlbnR1YWwgcmVzdWx0IG9mIGFuIGFzeW5jaHJvbm91cyBvcGVyYXRpb24uIFRoZVxuICBwcmltYXJ5IHdheSBvZiBpbnRlcmFjdGluZyB3aXRoIGEgcHJvbWlzZSBpcyB0aHJvdWdoIGl0cyBgdGhlbmAgbWV0aG9kLCB3aGljaFxuICByZWdpc3RlcnMgY2FsbGJhY2tzIHRvIHJlY2VpdmUgZWl0aGVyIGEgcHJvbWlzZSdzIGV2ZW50dWFsIHZhbHVlIG9yIHRoZSByZWFzb25cbiAgd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG5cbiAgVGVybWlub2xvZ3lcbiAgLS0tLS0tLS0tLS1cblxuICAtIGBwcm9taXNlYCBpcyBhbiBvYmplY3Qgb3IgZnVuY3Rpb24gd2l0aCBhIGB0aGVuYCBtZXRob2Qgd2hvc2UgYmVoYXZpb3IgY29uZm9ybXMgdG8gdGhpcyBzcGVjaWZpY2F0aW9uLlxuICAtIGB0aGVuYWJsZWAgaXMgYW4gb2JqZWN0IG9yIGZ1bmN0aW9uIHRoYXQgZGVmaW5lcyBhIGB0aGVuYCBtZXRob2QuXG4gIC0gYHZhbHVlYCBpcyBhbnkgbGVnYWwgSmF2YVNjcmlwdCB2YWx1ZSAoaW5jbHVkaW5nIHVuZGVmaW5lZCwgYSB0aGVuYWJsZSwgb3IgYSBwcm9taXNlKS5cbiAgLSBgZXhjZXB0aW9uYCBpcyBhIHZhbHVlIHRoYXQgaXMgdGhyb3duIHVzaW5nIHRoZSB0aHJvdyBzdGF0ZW1lbnQuXG4gIC0gYHJlYXNvbmAgaXMgYSB2YWx1ZSB0aGF0IGluZGljYXRlcyB3aHkgYSBwcm9taXNlIHdhcyByZWplY3RlZC5cbiAgLSBgc2V0dGxlZGAgdGhlIGZpbmFsIHJlc3Rpbmcgc3RhdGUgb2YgYSBwcm9taXNlLCBmdWxmaWxsZWQgb3IgcmVqZWN0ZWQuXG5cbiAgQSBwcm9taXNlIGNhbiBiZSBpbiBvbmUgb2YgdGhyZWUgc3RhdGVzOiBwZW5kaW5nLCBmdWxmaWxsZWQsIG9yIHJlamVjdGVkLlxuXG4gIFByb21pc2VzIHRoYXQgYXJlIGZ1bGZpbGxlZCBoYXZlIGEgZnVsZmlsbG1lbnQgdmFsdWUgYW5kIGFyZSBpbiB0aGUgZnVsZmlsbGVkXG4gIHN0YXRlLiAgUHJvbWlzZXMgdGhhdCBhcmUgcmVqZWN0ZWQgaGF2ZSBhIHJlamVjdGlvbiByZWFzb24gYW5kIGFyZSBpbiB0aGVcbiAgcmVqZWN0ZWQgc3RhdGUuICBBIGZ1bGZpbGxtZW50IHZhbHVlIGlzIG5ldmVyIGEgdGhlbmFibGUuXG5cbiAgUHJvbWlzZXMgY2FuIGFsc28gYmUgc2FpZCB0byAqcmVzb2x2ZSogYSB2YWx1ZS4gIElmIHRoaXMgdmFsdWUgaXMgYWxzbyBhXG4gIHByb21pc2UsIHRoZW4gdGhlIG9yaWdpbmFsIHByb21pc2UncyBzZXR0bGVkIHN0YXRlIHdpbGwgbWF0Y2ggdGhlIHZhbHVlJ3NcbiAgc2V0dGxlZCBzdGF0ZS4gIFNvIGEgcHJvbWlzZSB0aGF0ICpyZXNvbHZlcyogYSBwcm9taXNlIHRoYXQgcmVqZWN0cyB3aWxsXG4gIGl0c2VsZiByZWplY3QsIGFuZCBhIHByb21pc2UgdGhhdCAqcmVzb2x2ZXMqIGEgcHJvbWlzZSB0aGF0IGZ1bGZpbGxzIHdpbGxcbiAgaXRzZWxmIGZ1bGZpbGwuXG5cblxuICBCYXNpYyBVc2FnZTpcbiAgLS0tLS0tLS0tLS0tXG5cbiAgYGBganNcbiAgbGV0IHByb21pc2UgPSBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLCByZWplY3QpIHtcbiAgICAvLyBvbiBzdWNjZXNzXG4gICAgcmVzb2x2ZSh2YWx1ZSk7XG5cbiAgICAvLyBvbiBmYWlsdXJlXG4gICAgcmVqZWN0KHJlYXNvbik7XG4gIH0pO1xuXG4gIHByb21pc2UudGhlbihmdW5jdGlvbih2YWx1ZSkge1xuICAgIC8vIG9uIGZ1bGZpbGxtZW50XG4gIH0sIGZ1bmN0aW9uKHJlYXNvbikge1xuICAgIC8vIG9uIHJlamVjdGlvblxuICB9KTtcbiAgYGBgXG5cbiAgQWR2YW5jZWQgVXNhZ2U6XG4gIC0tLS0tLS0tLS0tLS0tLVxuXG4gIFByb21pc2VzIHNoaW5lIHdoZW4gYWJzdHJhY3RpbmcgYXdheSBhc3luY2hyb25vdXMgaW50ZXJhY3Rpb25zIHN1Y2ggYXNcbiAgYFhNTEh0dHBSZXF1ZXN0YHMuXG5cbiAgYGBganNcbiAgZnVuY3Rpb24gZ2V0SlNPTih1cmwpIHtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KXtcbiAgICAgIGxldCB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTtcblxuICAgICAgeGhyLm9wZW4oJ0dFVCcsIHVybCk7XG4gICAgICB4aHIub25yZWFkeXN0YXRlY2hhbmdlID0gaGFuZGxlcjtcbiAgICAgIHhoci5yZXNwb25zZVR5cGUgPSAnanNvbic7XG4gICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcignQWNjZXB0JywgJ2FwcGxpY2F0aW9uL2pzb24nKTtcbiAgICAgIHhoci5zZW5kKCk7XG5cbiAgICAgIGZ1bmN0aW9uIGhhbmRsZXIoKSB7XG4gICAgICAgIGlmICh0aGlzLnJlYWR5U3RhdGUgPT09IHRoaXMuRE9ORSkge1xuICAgICAgICAgIGlmICh0aGlzLnN0YXR1cyA9PT0gMjAwKSB7XG4gICAgICAgICAgICByZXNvbHZlKHRoaXMucmVzcG9uc2UpO1xuICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICByZWplY3QobmV3IEVycm9yKCdnZXRKU09OOiBgJyArIHVybCArICdgIGZhaWxlZCB3aXRoIHN0YXR1czogWycgKyB0aGlzLnN0YXR1cyArICddJykpO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfTtcbiAgICB9KTtcbiAgfVxuXG4gIGdldEpTT04oJy9wb3N0cy5qc29uJykudGhlbihmdW5jdGlvbihqc29uKSB7XG4gICAgLy8gb24gZnVsZmlsbG1lbnRcbiAgfSwgZnVuY3Rpb24ocmVhc29uKSB7XG4gICAgLy8gb24gcmVqZWN0aW9uXG4gIH0pO1xuICBgYGBcblxuICBVbmxpa2UgY2FsbGJhY2tzLCBwcm9taXNlcyBhcmUgZ3JlYXQgY29tcG9zYWJsZSBwcmltaXRpdmVzLlxuXG4gIGBgYGpzXG4gIFByb21pc2UuYWxsKFtcbiAgICBnZXRKU09OKCcvcG9zdHMnKSxcbiAgICBnZXRKU09OKCcvY29tbWVudHMnKVxuICBdKS50aGVuKGZ1bmN0aW9uKHZhbHVlcyl7XG4gICAgdmFsdWVzWzBdIC8vID0+IHBvc3RzSlNPTlxuICAgIHZhbHVlc1sxXSAvLyA9PiBjb21tZW50c0pTT05cblxuICAgIHJldHVybiB2YWx1ZXM7XG4gIH0pO1xuICBgYGBcblxuICBAY2xhc3MgUHJvbWlzZVxuICBAcGFyYW0ge2Z1bmN0aW9ufSByZXNvbHZlclxuICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gIEBjb25zdHJ1Y3RvclxuKi9cbmZ1bmN0aW9uIFByb21pc2UocmVzb2x2ZXIpIHtcbiAgdGhpc1tQUk9NSVNFX0lEXSA9IG5leHRJZCgpO1xuICB0aGlzLl9yZXN1bHQgPSB0aGlzLl9zdGF0ZSA9IHVuZGVmaW5lZDtcbiAgdGhpcy5fc3Vic2NyaWJlcnMgPSBbXTtcblxuICBpZiAobm9vcCAhPT0gcmVzb2x2ZXIpIHtcbiAgICB0eXBlb2YgcmVzb2x2ZXIgIT09ICdmdW5jdGlvbicgJiYgbmVlZHNSZXNvbHZlcigpO1xuICAgIHRoaXMgaW5zdGFuY2VvZiBQcm9taXNlID8gaW5pdGlhbGl6ZVByb21pc2UodGhpcywgcmVzb2x2ZXIpIDogbmVlZHNOZXcoKTtcbiAgfVxufVxuXG5Qcm9taXNlLmFsbCA9IGFsbDtcblByb21pc2UucmFjZSA9IHJhY2U7XG5Qcm9taXNlLnJlc29sdmUgPSByZXNvbHZlO1xuUHJvbWlzZS5yZWplY3QgPSByZWplY3Q7XG5Qcm9taXNlLl9zZXRTY2hlZHVsZXIgPSBzZXRTY2hlZHVsZXI7XG5Qcm9taXNlLl9zZXRBc2FwID0gc2V0QXNhcDtcblByb21pc2UuX2FzYXAgPSBhc2FwO1xuXG5Qcm9taXNlLnByb3RvdHlwZSA9IHtcbiAgY29uc3RydWN0b3I6IFByb21pc2UsXG5cbiAgLyoqXG4gICAgVGhlIHByaW1hcnkgd2F5IG9mIGludGVyYWN0aW5nIHdpdGggYSBwcm9taXNlIGlzIHRocm91Z2ggaXRzIGB0aGVuYCBtZXRob2QsXG4gICAgd2hpY2ggcmVnaXN0ZXJzIGNhbGxiYWNrcyB0byByZWNlaXZlIGVpdGhlciBhIHByb21pc2UncyBldmVudHVhbCB2YWx1ZSBvciB0aGVcbiAgICByZWFzb24gd2h5IHRoZSBwcm9taXNlIGNhbm5vdCBiZSBmdWxmaWxsZWQuXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uKHVzZXIpe1xuICAgICAgLy8gdXNlciBpcyBhdmFpbGFibGVcbiAgICB9LCBmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gdXNlciBpcyB1bmF2YWlsYWJsZSwgYW5kIHlvdSBhcmUgZ2l2ZW4gdGhlIHJlYXNvbiB3aHlcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQ2hhaW5pbmdcbiAgICAtLS0tLS0tLVxuICBcbiAgICBUaGUgcmV0dXJuIHZhbHVlIG9mIGB0aGVuYCBpcyBpdHNlbGYgYSBwcm9taXNlLiAgVGhpcyBzZWNvbmQsICdkb3duc3RyZWFtJ1xuICAgIHByb21pc2UgaXMgcmVzb2x2ZWQgd2l0aCB0aGUgcmV0dXJuIHZhbHVlIG9mIHRoZSBmaXJzdCBwcm9taXNlJ3MgZnVsZmlsbG1lbnRcbiAgICBvciByZWplY3Rpb24gaGFuZGxlciwgb3IgcmVqZWN0ZWQgaWYgdGhlIGhhbmRsZXIgdGhyb3dzIGFuIGV4Y2VwdGlvbi5cbiAgXG4gICAgYGBganNcbiAgICBmaW5kVXNlcigpLnRoZW4oZnVuY3Rpb24gKHVzZXIpIHtcbiAgICAgIHJldHVybiB1c2VyLm5hbWU7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgcmV0dXJuICdkZWZhdWx0IG5hbWUnO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKHVzZXJOYW1lKSB7XG4gICAgICAvLyBJZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHVzZXJOYW1lYCB3aWxsIGJlIHRoZSB1c2VyJ3MgbmFtZSwgb3RoZXJ3aXNlIGl0XG4gICAgICAvLyB3aWxsIGJlIGAnZGVmYXVsdCBuYW1lJ2BcbiAgICB9KTtcbiAgXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ0ZvdW5kIHVzZXIsIGJ1dCBzdGlsbCB1bmhhcHB5Jyk7XG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdgZmluZFVzZXJgIHJlamVjdGVkIGFuZCB3ZSdyZSB1bmhhcHB5Jyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9LCBmdW5jdGlvbiAocmVhc29uKSB7XG4gICAgICAvLyBpZiBgZmluZFVzZXJgIGZ1bGZpbGxlZCwgYHJlYXNvbmAgd2lsbCBiZSAnRm91bmQgdXNlciwgYnV0IHN0aWxsIHVuaGFwcHknLlxuICAgICAgLy8gSWYgYGZpbmRVc2VyYCByZWplY3RlZCwgYHJlYXNvbmAgd2lsbCBiZSAnYGZpbmRVc2VyYCByZWplY3RlZCBhbmQgd2UncmUgdW5oYXBweScuXG4gICAgfSk7XG4gICAgYGBgXG4gICAgSWYgdGhlIGRvd25zdHJlYW0gcHJvbWlzZSBkb2VzIG5vdCBzcGVjaWZ5IGEgcmVqZWN0aW9uIGhhbmRsZXIsIHJlamVjdGlvbiByZWFzb25zIHdpbGwgYmUgcHJvcGFnYXRlZCBmdXJ0aGVyIGRvd25zdHJlYW0uXG4gIFxuICAgIGBgYGpzXG4gICAgZmluZFVzZXIoKS50aGVuKGZ1bmN0aW9uICh1c2VyKSB7XG4gICAgICB0aHJvdyBuZXcgUGVkYWdvZ2ljYWxFeGNlcHRpb24oJ1Vwc3RyZWFtIGVycm9yJyk7XG4gICAgfSkudGhlbihmdW5jdGlvbiAodmFsdWUpIHtcbiAgICAgIC8vIG5ldmVyIHJlYWNoZWRcbiAgICB9KS50aGVuKGZ1bmN0aW9uICh2YWx1ZSkge1xuICAgICAgLy8gbmV2ZXIgcmVhY2hlZFxuICAgIH0sIGZ1bmN0aW9uIChyZWFzb24pIHtcbiAgICAgIC8vIFRoZSBgUGVkZ2Fnb2NpYWxFeGNlcHRpb25gIGlzIHByb3BhZ2F0ZWQgYWxsIHRoZSB3YXkgZG93biB0byBoZXJlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIEFzc2ltaWxhdGlvblxuICAgIC0tLS0tLS0tLS0tLVxuICBcbiAgICBTb21ldGltZXMgdGhlIHZhbHVlIHlvdSB3YW50IHRvIHByb3BhZ2F0ZSB0byBhIGRvd25zdHJlYW0gcHJvbWlzZSBjYW4gb25seSBiZVxuICAgIHJldHJpZXZlZCBhc3luY2hyb25vdXNseS4gVGhpcyBjYW4gYmUgYWNoaWV2ZWQgYnkgcmV0dXJuaW5nIGEgcHJvbWlzZSBpbiB0aGVcbiAgICBmdWxmaWxsbWVudCBvciByZWplY3Rpb24gaGFuZGxlci4gVGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIHRoZW4gYmUgcGVuZGluZ1xuICAgIHVudGlsIHRoZSByZXR1cm5lZCBwcm9taXNlIGlzIHNldHRsZWQuIFRoaXMgaXMgY2FsbGVkICphc3NpbWlsYXRpb24qLlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBUaGUgdXNlcidzIGNvbW1lbnRzIGFyZSBub3cgYXZhaWxhYmxlXG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIElmIHRoZSBhc3NpbWxpYXRlZCBwcm9taXNlIHJlamVjdHMsIHRoZW4gdGhlIGRvd25zdHJlYW0gcHJvbWlzZSB3aWxsIGFsc28gcmVqZWN0LlxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRVc2VyKCkudGhlbihmdW5jdGlvbiAodXNlcikge1xuICAgICAgcmV0dXJuIGZpbmRDb21tZW50c0J5QXV0aG9yKHVzZXIpO1xuICAgIH0pLnRoZW4oZnVuY3Rpb24gKGNvbW1lbnRzKSB7XG4gICAgICAvLyBJZiBgZmluZENvbW1lbnRzQnlBdXRob3JgIGZ1bGZpbGxzLCB3ZSdsbCBoYXZlIHRoZSB2YWx1ZSBoZXJlXG4gICAgfSwgZnVuY3Rpb24gKHJlYXNvbikge1xuICAgICAgLy8gSWYgYGZpbmRDb21tZW50c0J5QXV0aG9yYCByZWplY3RzLCB3ZSdsbCBoYXZlIHRoZSByZWFzb24gaGVyZVxuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBTaW1wbGUgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCByZXN1bHQ7XG4gIFxuICAgIHRyeSB7XG4gICAgICByZXN1bHQgPSBmaW5kUmVzdWx0KCk7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9XG4gICAgYGBgXG4gIFxuICAgIEVycmJhY2sgRXhhbXBsZVxuICBcbiAgICBgYGBqc1xuICAgIGZpbmRSZXN1bHQoZnVuY3Rpb24ocmVzdWx0LCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICAvLyBmYWlsdXJlXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBzdWNjZXNzXG4gICAgICB9XG4gICAgfSk7XG4gICAgYGBgXG4gIFxuICAgIFByb21pc2UgRXhhbXBsZTtcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGZpbmRSZXN1bHQoKS50aGVuKGZ1bmN0aW9uKHJlc3VsdCl7XG4gICAgICAvLyBzdWNjZXNzXG4gICAgfSwgZnVuY3Rpb24ocmVhc29uKXtcbiAgICAgIC8vIGZhaWx1cmVcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQWR2YW5jZWQgRXhhbXBsZVxuICAgIC0tLS0tLS0tLS0tLS0tXG4gIFxuICAgIFN5bmNocm9ub3VzIEV4YW1wbGVcbiAgXG4gICAgYGBgamF2YXNjcmlwdFxuICAgIGxldCBhdXRob3IsIGJvb2tzO1xuICBcbiAgICB0cnkge1xuICAgICAgYXV0aG9yID0gZmluZEF1dGhvcigpO1xuICAgICAgYm9va3MgID0gZmluZEJvb2tzQnlBdXRob3IoYXV0aG9yKTtcbiAgICAgIC8vIHN1Y2Nlc3NcbiAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgLy8gZmFpbHVyZVxuICAgIH1cbiAgICBgYGBcbiAgXG4gICAgRXJyYmFjayBFeGFtcGxlXG4gIFxuICAgIGBgYGpzXG4gIFxuICAgIGZ1bmN0aW9uIGZvdW5kQm9va3MoYm9va3MpIHtcbiAgXG4gICAgfVxuICBcbiAgICBmdW5jdGlvbiBmYWlsdXJlKHJlYXNvbikge1xuICBcbiAgICB9XG4gIFxuICAgIGZpbmRBdXRob3IoZnVuY3Rpb24oYXV0aG9yLCBlcnIpe1xuICAgICAgaWYgKGVycikge1xuICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgIC8vIGZhaWx1cmVcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgZmluZEJvb29rc0J5QXV0aG9yKGF1dGhvciwgZnVuY3Rpb24oYm9va3MsIGVycikge1xuICAgICAgICAgICAgaWYgKGVycikge1xuICAgICAgICAgICAgICBmYWlsdXJlKGVycik7XG4gICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGZvdW5kQm9va3MoYm9va3MpO1xuICAgICAgICAgICAgICB9IGNhdGNoKHJlYXNvbikge1xuICAgICAgICAgICAgICAgIGZhaWx1cmUocmVhc29uKTtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pO1xuICAgICAgICB9IGNhdGNoKGVycm9yKSB7XG4gICAgICAgICAgZmFpbHVyZShlcnIpO1xuICAgICAgICB9XG4gICAgICAgIC8vIHN1Y2Nlc3NcbiAgICAgIH1cbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgUHJvbWlzZSBFeGFtcGxlO1xuICBcbiAgICBgYGBqYXZhc2NyaXB0XG4gICAgZmluZEF1dGhvcigpLlxuICAgICAgdGhlbihmaW5kQm9va3NCeUF1dGhvcikuXG4gICAgICB0aGVuKGZ1bmN0aW9uKGJvb2tzKXtcbiAgICAgICAgLy8gZm91bmQgYm9va3NcbiAgICB9KS5jYXRjaChmdW5jdGlvbihyZWFzb24pe1xuICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3JvbmdcbiAgICB9KTtcbiAgICBgYGBcbiAgXG4gICAgQG1ldGhvZCB0aGVuXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25GdWxmaWxsZWRcbiAgICBAcGFyYW0ge0Z1bmN0aW9ufSBvblJlamVjdGVkXG4gICAgVXNlZnVsIGZvciB0b29saW5nLlxuICAgIEByZXR1cm4ge1Byb21pc2V9XG4gICovXG4gIHRoZW46IHRoZW4sXG5cbiAgLyoqXG4gICAgYGNhdGNoYCBpcyBzaW1wbHkgc3VnYXIgZm9yIGB0aGVuKHVuZGVmaW5lZCwgb25SZWplY3Rpb24pYCB3aGljaCBtYWtlcyBpdCB0aGUgc2FtZVxuICAgIGFzIHRoZSBjYXRjaCBibG9jayBvZiBhIHRyeS9jYXRjaCBzdGF0ZW1lbnQuXG4gIFxuICAgIGBgYGpzXG4gICAgZnVuY3Rpb24gZmluZEF1dGhvcigpe1xuICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZG4ndCBmaW5kIHRoYXQgYXV0aG9yJyk7XG4gICAgfVxuICBcbiAgICAvLyBzeW5jaHJvbm91c1xuICAgIHRyeSB7XG4gICAgICBmaW5kQXV0aG9yKCk7XG4gICAgfSBjYXRjaChyZWFzb24pIHtcbiAgICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nXG4gICAgfVxuICBcbiAgICAvLyBhc3luYyB3aXRoIHByb21pc2VzXG4gICAgZmluZEF1dGhvcigpLmNhdGNoKGZ1bmN0aW9uKHJlYXNvbil7XG4gICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZ1xuICAgIH0pO1xuICAgIGBgYFxuICBcbiAgICBAbWV0aG9kIGNhdGNoXG4gICAgQHBhcmFtIHtGdW5jdGlvbn0gb25SZWplY3Rpb25cbiAgICBVc2VmdWwgZm9yIHRvb2xpbmcuXG4gICAgQHJldHVybiB7UHJvbWlzZX1cbiAgKi9cbiAgJ2NhdGNoJzogZnVuY3Rpb24gX2NhdGNoKG9uUmVqZWN0aW9uKSB7XG4gICAgcmV0dXJuIHRoaXMudGhlbihudWxsLCBvblJlamVjdGlvbik7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIHBvbHlmaWxsKCkge1xuICAgIHZhciBsb2NhbCA9IHVuZGVmaW5lZDtcblxuICAgIGlmICh0eXBlb2YgZ2xvYmFsICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IGdsb2JhbDtcbiAgICB9IGVsc2UgaWYgKHR5cGVvZiBzZWxmICE9PSAndW5kZWZpbmVkJykge1xuICAgICAgICBsb2NhbCA9IHNlbGY7XG4gICAgfSBlbHNlIHtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGxvY2FsID0gRnVuY3Rpb24oJ3JldHVybiB0aGlzJykoKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdwb2x5ZmlsbCBmYWlsZWQgYmVjYXVzZSBnbG9iYWwgb2JqZWN0IGlzIHVuYXZhaWxhYmxlIGluIHRoaXMgZW52aXJvbm1lbnQnKTtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIHZhciBQID0gbG9jYWwuUHJvbWlzZTtcblxuICAgIGlmIChQKSB7XG4gICAgICAgIHZhciBwcm9taXNlVG9TdHJpbmcgPSBudWxsO1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcHJvbWlzZVRvU3RyaW5nID0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFAucmVzb2x2ZSgpKTtcbiAgICAgICAgfSBjYXRjaCAoZSkge1xuICAgICAgICAgICAgLy8gc2lsZW50bHkgaWdub3JlZFxuICAgICAgICB9XG5cbiAgICAgICAgaWYgKHByb21pc2VUb1N0cmluZyA9PT0gJ1tvYmplY3QgUHJvbWlzZV0nICYmICFQLmNhc3QpIHtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgIH1cblxuICAgIGxvY2FsLlByb21pc2UgPSBQcm9taXNlO1xufVxuXG4vLyBTdHJhbmdlIGNvbXBhdC4uXG5Qcm9taXNlLnBvbHlmaWxsID0gcG9seWZpbGw7XG5Qcm9taXNlLlByb21pc2UgPSBQcm9taXNlO1xuXG5yZXR1cm4gUHJvbWlzZTtcblxufSkpKTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWVzNi1wcm9taXNlLm1hcFxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2VzNi1wcm9taXNlL2Rpc3QvZXM2LXByb21pc2UuanNcbi8vIG1vZHVsZSBpZCA9IDgxXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsIihmdW5jdGlvbiAoc2VsZikge1xuICAndXNlIHN0cmljdCc7XG5cbiAgZnVuY3Rpb24gZmV0Y2hQb255ZmlsbChvcHRpb25zKSB7XG4gICAgdmFyIFByb21pc2UgPSBvcHRpb25zICYmIG9wdGlvbnMuUHJvbWlzZSB8fCBzZWxmLlByb21pc2U7XG4gICAgdmFyIFhNTEh0dHBSZXF1ZXN0ID0gb3B0aW9ucyAmJiBvcHRpb25zLlhNTEh0dHBSZXF1ZXN0IHx8IHNlbGYuWE1MSHR0cFJlcXVlc3Q7XG4gICAgdmFyIGdsb2JhbCA9IHNlbGY7XG5cbiAgICByZXR1cm4gKGZ1bmN0aW9uICgpIHtcbiAgICAgIHZhciBzZWxmID0gT2JqZWN0LmNyZWF0ZShnbG9iYWwsIHtcbiAgICAgICAgZmV0Y2g6IHtcbiAgICAgICAgICB2YWx1ZTogdW5kZWZpbmVkLFxuICAgICAgICAgIHdyaXRhYmxlOiB0cnVlXG4gICAgICAgIH1cbiAgICAgIH0pO1xuXG4gICAgICAoZnVuY3Rpb24oc2VsZikge1xuICAgICAgICAndXNlIHN0cmljdCc7XG5cbiAgICAgICAgaWYgKHNlbGYuZmV0Y2gpIHtcbiAgICAgICAgICByZXR1cm5cbiAgICAgICAgfVxuXG4gICAgICAgIHZhciBzdXBwb3J0ID0ge1xuICAgICAgICAgIHNlYXJjaFBhcmFtczogJ1VSTFNlYXJjaFBhcmFtcycgaW4gc2VsZixcbiAgICAgICAgICBpdGVyYWJsZTogJ1N5bWJvbCcgaW4gc2VsZiAmJiAnaXRlcmF0b3InIGluIFN5bWJvbCxcbiAgICAgICAgICBibG9iOiAnRmlsZVJlYWRlcicgaW4gc2VsZiAmJiAnQmxvYicgaW4gc2VsZiAmJiAoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICBuZXcgQmxvYigpXG4gICAgICAgICAgICAgIHJldHVybiB0cnVlXG4gICAgICAgICAgICB9IGNhdGNoKGUpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSkoKSxcbiAgICAgICAgICBmb3JtRGF0YTogJ0Zvcm1EYXRhJyBpbiBzZWxmLFxuICAgICAgICAgIGFycmF5QnVmZmVyOiAnQXJyYXlCdWZmZXInIGluIHNlbGZcbiAgICAgICAgfVxuXG4gICAgICAgIGlmIChzdXBwb3J0LmFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgdmFyIHZpZXdDbGFzc2VzID0gW1xuICAgICAgICAgICAgJ1tvYmplY3QgSW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OEFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBVaW50OENsYW1wZWRBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgSW50MTZBcnJheV0nLFxuICAgICAgICAgICAgJ1tvYmplY3QgVWludDE2QXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEludDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IFVpbnQzMkFycmF5XScsXG4gICAgICAgICAgICAnW29iamVjdCBGbG9hdDMyQXJyYXldJyxcbiAgICAgICAgICAgICdbb2JqZWN0IEZsb2F0NjRBcnJheV0nXG4gICAgICAgICAgXVxuXG4gICAgICAgICAgdmFyIGlzRGF0YVZpZXcgPSBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgRGF0YVZpZXcucHJvdG90eXBlLmlzUHJvdG90eXBlT2Yob2JqKVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHZhciBpc0FycmF5QnVmZmVyVmlldyA9IEFycmF5QnVmZmVyLmlzVmlldyB8fCBmdW5jdGlvbihvYmopIHtcbiAgICAgICAgICAgIHJldHVybiBvYmogJiYgdmlld0NsYXNzZXMuaW5kZXhPZihPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwob2JqKSkgPiAtMVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZU5hbWUobmFtZSkge1xuICAgICAgICAgIGlmICh0eXBlb2YgbmFtZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIG5hbWUgPSBTdHJpbmcobmFtZSlcbiAgICAgICAgICB9XG4gICAgICAgICAgaWYgKC9bXmEtejAtOVxcLSMkJSYnKisuXFxeX2B8fl0vaS50ZXN0KG5hbWUpKSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdJbnZhbGlkIGNoYXJhY3RlciBpbiBoZWFkZXIgZmllbGQgbmFtZScpXG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBuYW1lLnRvTG93ZXJDYXNlKClcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIG5vcm1hbGl6ZVZhbHVlKHZhbHVlKSB7XG4gICAgICAgICAgaWYgKHR5cGVvZiB2YWx1ZSAhPT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgIHZhbHVlID0gU3RyaW5nKHZhbHVlKVxuICAgICAgICAgIH1cbiAgICAgICAgICByZXR1cm4gdmFsdWVcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIEJ1aWxkIGEgZGVzdHJ1Y3RpdmUgaXRlcmF0b3IgZm9yIHRoZSB2YWx1ZSBsaXN0XG4gICAgICAgIGZ1bmN0aW9uIGl0ZXJhdG9yRm9yKGl0ZW1zKSB7XG4gICAgICAgICAgdmFyIGl0ZXJhdG9yID0ge1xuICAgICAgICAgICAgbmV4dDogZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHZhciB2YWx1ZSA9IGl0ZW1zLnNoaWZ0KClcbiAgICAgICAgICAgICAgcmV0dXJuIHtkb25lOiB2YWx1ZSA9PT0gdW5kZWZpbmVkLCB2YWx1ZTogdmFsdWV9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuaXRlcmFibGUpIHtcbiAgICAgICAgICAgIGl0ZXJhdG9yW1N5bWJvbC5pdGVyYXRvcl0gPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBIZWFkZXJzKGhlYWRlcnMpIHtcbiAgICAgICAgICB0aGlzLm1hcCA9IHt9XG5cbiAgICAgICAgICBpZiAoaGVhZGVycyBpbnN0YW5jZW9mIEhlYWRlcnMpIHtcbiAgICAgICAgICAgIGhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0sIHRoaXMpXG5cbiAgICAgICAgICB9IGVsc2UgaWYgKGhlYWRlcnMpIHtcbiAgICAgICAgICAgIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGhlYWRlcnMpLmZvckVhY2goZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgICAgICB0aGlzLmFwcGVuZChuYW1lLCBoZWFkZXJzW25hbWVdKVxuICAgICAgICAgICAgfSwgdGhpcylcbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5hcHBlbmQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgdmFsdWUgPSBub3JtYWxpemVWYWx1ZSh2YWx1ZSlcbiAgICAgICAgICB2YXIgb2xkVmFsdWUgPSB0aGlzLm1hcFtuYW1lXVxuICAgICAgICAgIHRoaXMubWFwW25hbWVdID0gb2xkVmFsdWUgPyBvbGRWYWx1ZSsnLCcrdmFsdWUgOiB2YWx1ZVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGVbJ2RlbGV0ZSddID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIGRlbGV0ZSB0aGlzLm1hcFtub3JtYWxpemVOYW1lKG5hbWUpXVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZ2V0ID0gZnVuY3Rpb24obmFtZSkge1xuICAgICAgICAgIG5hbWUgPSBub3JtYWxpemVOYW1lKG5hbWUpXG4gICAgICAgICAgcmV0dXJuIHRoaXMuaGFzKG5hbWUpID8gdGhpcy5tYXBbbmFtZV0gOiBudWxsXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5oYXMgPSBmdW5jdGlvbihuYW1lKSB7XG4gICAgICAgICAgcmV0dXJuIHRoaXMubWFwLmhhc093blByb3BlcnR5KG5vcm1hbGl6ZU5hbWUobmFtZSkpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5zZXQgPSBmdW5jdGlvbihuYW1lLCB2YWx1ZSkge1xuICAgICAgICAgIHRoaXMubWFwW25vcm1hbGl6ZU5hbWUobmFtZSldID0gbm9ybWFsaXplVmFsdWUodmFsdWUpXG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5mb3JFYWNoID0gZnVuY3Rpb24oY2FsbGJhY2ssIHRoaXNBcmcpIHtcbiAgICAgICAgICBmb3IgKHZhciBuYW1lIGluIHRoaXMubWFwKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5tYXAuaGFzT3duUHJvcGVydHkobmFtZSkpIHtcbiAgICAgICAgICAgICAgY2FsbGJhY2suY2FsbCh0aGlzQXJnLCB0aGlzLm1hcFtuYW1lXSwgbmFtZSwgdGhpcylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgIH1cblxuICAgICAgICBIZWFkZXJzLnByb3RvdHlwZS5rZXlzID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIGl0ZW1zID0gW11cbiAgICAgICAgICB0aGlzLmZvckVhY2goZnVuY3Rpb24odmFsdWUsIG5hbWUpIHsgaXRlbXMucHVzaChuYW1lKSB9KVxuICAgICAgICAgIHJldHVybiBpdGVyYXRvckZvcihpdGVtcylcbiAgICAgICAgfVxuXG4gICAgICAgIEhlYWRlcnMucHJvdG90eXBlLnZhbHVlcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlKSB7IGl0ZW1zLnB1c2godmFsdWUpIH0pXG4gICAgICAgICAgcmV0dXJuIGl0ZXJhdG9yRm9yKGl0ZW1zKVxuICAgICAgICB9XG5cbiAgICAgICAgSGVhZGVycy5wcm90b3R5cGUuZW50cmllcyA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHZhciBpdGVtcyA9IFtdXG4gICAgICAgICAgdGhpcy5mb3JFYWNoKGZ1bmN0aW9uKHZhbHVlLCBuYW1lKSB7IGl0ZW1zLnB1c2goW25hbWUsIHZhbHVlXSkgfSlcbiAgICAgICAgICByZXR1cm4gaXRlcmF0b3JGb3IoaXRlbXMpXG4gICAgICAgIH1cblxuICAgICAgICBpZiAoc3VwcG9ydC5pdGVyYWJsZSkge1xuICAgICAgICAgIEhlYWRlcnMucHJvdG90eXBlW1N5bWJvbC5pdGVyYXRvcl0gPSBIZWFkZXJzLnByb3RvdHlwZS5lbnRyaWVzXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBjb25zdW1lZChib2R5KSB7XG4gICAgICAgICAgaWYgKGJvZHkuYm9keVVzZWQpIHtcbiAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCdBbHJlYWR5IHJlYWQnKSlcbiAgICAgICAgICB9XG4gICAgICAgICAgYm9keS5ib2R5VXNlZCA9IHRydWVcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICByZWFkZXIub25sb2FkID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlc29sdmUocmVhZGVyLnJlc3VsdClcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHJlYWRlci5vbmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICAgIHJlamVjdChyZWFkZXIuZXJyb3IpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNBcnJheUJ1ZmZlcihibG9iKSB7XG4gICAgICAgICAgdmFyIHJlYWRlciA9IG5ldyBGaWxlUmVhZGVyKClcbiAgICAgICAgICB2YXIgcHJvbWlzZSA9IGZpbGVSZWFkZXJSZWFkeShyZWFkZXIpXG4gICAgICAgICAgcmVhZGVyLnJlYWRBc0FycmF5QnVmZmVyKGJsb2IpXG4gICAgICAgICAgcmV0dXJuIHByb21pc2VcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHJlYWRCbG9iQXNUZXh0KGJsb2IpIHtcbiAgICAgICAgICB2YXIgcmVhZGVyID0gbmV3IEZpbGVSZWFkZXIoKVxuICAgICAgICAgIHZhciBwcm9taXNlID0gZmlsZVJlYWRlclJlYWR5KHJlYWRlcilcbiAgICAgICAgICByZWFkZXIucmVhZEFzVGV4dChibG9iKVxuICAgICAgICAgIHJldHVybiBwcm9taXNlXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiByZWFkQXJyYXlCdWZmZXJBc1RleHQoYnVmKSB7XG4gICAgICAgICAgdmFyIHZpZXcgPSBuZXcgVWludDhBcnJheShidWYpXG4gICAgICAgICAgdmFyIGNoYXJzID0gbmV3IEFycmF5KHZpZXcubGVuZ3RoKVxuXG4gICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCB2aWV3Lmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjaGFyc1tpXSA9IFN0cmluZy5mcm9tQ2hhckNvZGUodmlld1tpXSlcbiAgICAgICAgICB9XG4gICAgICAgICAgcmV0dXJuIGNoYXJzLmpvaW4oJycpXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBidWZmZXJDbG9uZShidWYpIHtcbiAgICAgICAgICBpZiAoYnVmLnNsaWNlKSB7XG4gICAgICAgICAgICByZXR1cm4gYnVmLnNsaWNlKDApXG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHZhciB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmLmJ5dGVMZW5ndGgpXG4gICAgICAgICAgICB2aWV3LnNldChuZXcgVWludDhBcnJheShidWYpKVxuICAgICAgICAgICAgcmV0dXJuIHZpZXcuYnVmZmVyXG4gICAgICAgICAgfVxuICAgICAgICB9XG5cbiAgICAgICAgZnVuY3Rpb24gQm9keSgpIHtcbiAgICAgICAgICB0aGlzLmJvZHlVc2VkID0gZmFsc2VcblxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5ID0gZnVuY3Rpb24oYm9keSkge1xuICAgICAgICAgICAgdGhpcy5fYm9keUluaXQgPSBib2R5XG4gICAgICAgICAgICBpZiAoIWJvZHkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSAnJ1xuICAgICAgICAgICAgfSBlbHNlIGlmICh0eXBlb2YgYm9keSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keVRleHQgPSBib2R5XG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYmxvYiAmJiBCbG9iLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlCbG9iID0gYm9keVxuICAgICAgICAgICAgfSBlbHNlIGlmIChzdXBwb3J0LmZvcm1EYXRhICYmIEZvcm1EYXRhLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlGb3JtRGF0YSA9IGJvZHlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlUZXh0ID0gYm9keS50b1N0cmluZygpXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgc3VwcG9ydC5ibG9iICYmIGlzRGF0YVZpZXcoYm9keSkpIHtcbiAgICAgICAgICAgICAgdGhpcy5fYm9keUFycmF5QnVmZmVyID0gYnVmZmVyQ2xvbmUoYm9keS5idWZmZXIpXG4gICAgICAgICAgICAgIC8vIElFIDEwLTExIGNhbid0IGhhbmRsZSBhIERhdGFWaWV3IGJvZHkuXG4gICAgICAgICAgICAgIHRoaXMuX2JvZHlJbml0ID0gbmV3IEJsb2IoW3RoaXMuX2JvZHlBcnJheUJ1ZmZlcl0pXG4gICAgICAgICAgICB9IGVsc2UgaWYgKHN1cHBvcnQuYXJyYXlCdWZmZXIgJiYgKEFycmF5QnVmZmVyLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpIHx8IGlzQXJyYXlCdWZmZXJWaWV3KGJvZHkpKSkge1xuICAgICAgICAgICAgICB0aGlzLl9ib2R5QXJyYXlCdWZmZXIgPSBidWZmZXJDbG9uZShib2R5KVxuICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCd1bnN1cHBvcnRlZCBCb2R5SW5pdCB0eXBlJylcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCF0aGlzLmhlYWRlcnMuZ2V0KCdjb250ZW50LXR5cGUnKSkge1xuICAgICAgICAgICAgICBpZiAodHlwZW9mIGJvZHkgPT09ICdzdHJpbmcnKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ3RleHQvcGxhaW47Y2hhcnNldD1VVEYtOCcpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUJsb2IgJiYgdGhpcy5fYm9keUJsb2IudHlwZSkge1xuICAgICAgICAgICAgICAgIHRoaXMuaGVhZGVycy5zZXQoJ2NvbnRlbnQtdHlwZScsIHRoaXMuX2JvZHlCbG9iLnR5cGUpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAoc3VwcG9ydC5zZWFyY2hQYXJhbXMgJiYgVVJMU2VhcmNoUGFyYW1zLnByb3RvdHlwZS5pc1Byb3RvdHlwZU9mKGJvZHkpKSB7XG4gICAgICAgICAgICAgICAgdGhpcy5oZWFkZXJzLnNldCgnY29udGVudC10eXBlJywgJ2FwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PVVURi04JylcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIGlmIChzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgIHRoaXMuYmxvYiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgICBpZiAocmVqZWN0ZWQpIHtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVqZWN0ZWRcbiAgICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICAgIGlmICh0aGlzLl9ib2R5QmxvYikge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keUJsb2IpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgQmxvYihbdGhpcy5fYm9keUFycmF5QnVmZmVyXSkpXG4gICAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdjb3VsZCBub3QgcmVhZCBGb3JtRGF0YSBib2R5IGFzIGJsb2InKVxuICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUobmV3IEJsb2IoW3RoaXMuX2JvZHlUZXh0XSkpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgdGhpcy5hcnJheUJ1ZmZlciA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICBpZiAodGhpcy5fYm9keUFycmF5QnVmZmVyKSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGNvbnN1bWVkKHRoaXMpIHx8IFByb21pc2UucmVzb2x2ZSh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpXG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuYmxvYigpLnRoZW4ocmVhZEJsb2JBc0FycmF5QnVmZmVyKVxuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50ZXh0ID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgICB2YXIgcmVqZWN0ZWQgPSBjb25zdW1lZCh0aGlzKVxuICAgICAgICAgICAgaWYgKHJlamVjdGVkKSB7XG4gICAgICAgICAgICAgIHJldHVybiByZWplY3RlZFxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICBpZiAodGhpcy5fYm9keUJsb2IpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHJlYWRCbG9iQXNUZXh0KHRoaXMuX2JvZHlCbG9iKVxuICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLl9ib2R5QXJyYXlCdWZmZXIpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIFByb21pc2UucmVzb2x2ZShyZWFkQXJyYXlCdWZmZXJBc1RleHQodGhpcy5fYm9keUFycmF5QnVmZmVyKSlcbiAgICAgICAgICAgIH0gZWxzZSBpZiAodGhpcy5fYm9keUZvcm1EYXRhKSB7XG4gICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignY291bGQgbm90IHJlYWQgRm9ybURhdGEgYm9keSBhcyB0ZXh0JylcbiAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgIHJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYm9keVRleHQpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgaWYgKHN1cHBvcnQuZm9ybURhdGEpIHtcbiAgICAgICAgICAgIHRoaXMuZm9ybURhdGEgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oZGVjb2RlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuanNvbiA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMudGV4dCgpLnRoZW4oSlNPTi5wYXJzZSlcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gdGhpc1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gSFRUUCBtZXRob2RzIHdob3NlIGNhcGl0YWxpemF0aW9uIHNob3VsZCBiZSBub3JtYWxpemVkXG4gICAgICAgIHZhciBtZXRob2RzID0gWydERUxFVEUnLCAnR0VUJywgJ0hFQUQnLCAnT1BUSU9OUycsICdQT1NUJywgJ1BVVCddXG5cbiAgICAgICAgZnVuY3Rpb24gbm9ybWFsaXplTWV0aG9kKG1ldGhvZCkge1xuICAgICAgICAgIHZhciB1cGNhc2VkID0gbWV0aG9kLnRvVXBwZXJDYXNlKClcbiAgICAgICAgICByZXR1cm4gKG1ldGhvZHMuaW5kZXhPZih1cGNhc2VkKSA+IC0xKSA/IHVwY2FzZWQgOiBtZXRob2RcbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIFJlcXVlc3QoaW5wdXQsIG9wdGlvbnMpIHtcbiAgICAgICAgICBvcHRpb25zID0gb3B0aW9ucyB8fCB7fVxuICAgICAgICAgIHZhciBib2R5ID0gb3B0aW9ucy5ib2R5XG5cbiAgICAgICAgICBpZiAoaW5wdXQgaW5zdGFuY2VvZiBSZXF1ZXN0KSB7XG4gICAgICAgICAgICBpZiAoaW5wdXQuYm9keVVzZWQpIHtcbiAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQWxyZWFkeSByZWFkJylcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHRoaXMudXJsID0gaW5wdXQudXJsXG4gICAgICAgICAgICB0aGlzLmNyZWRlbnRpYWxzID0gaW5wdXQuY3JlZGVudGlhbHNcbiAgICAgICAgICAgIGlmICghb3B0aW9ucy5oZWFkZXJzKSB7XG4gICAgICAgICAgICAgIHRoaXMuaGVhZGVycyA9IG5ldyBIZWFkZXJzKGlucHV0LmhlYWRlcnMpXG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLm1ldGhvZCA9IGlucHV0Lm1ldGhvZFxuICAgICAgICAgICAgdGhpcy5tb2RlID0gaW5wdXQubW9kZVxuICAgICAgICAgICAgaWYgKCFib2R5ICYmIGlucHV0Ll9ib2R5SW5pdCAhPSBudWxsKSB7XG4gICAgICAgICAgICAgIGJvZHkgPSBpbnB1dC5fYm9keUluaXRcbiAgICAgICAgICAgICAgaW5wdXQuYm9keVVzZWQgPSB0cnVlXG4gICAgICAgICAgICB9XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHRoaXMudXJsID0gU3RyaW5nKGlucHV0KVxuICAgICAgICAgIH1cblxuICAgICAgICAgIHRoaXMuY3JlZGVudGlhbHMgPSBvcHRpb25zLmNyZWRlbnRpYWxzIHx8IHRoaXMuY3JlZGVudGlhbHMgfHwgJ29taXQnXG4gICAgICAgICAgaWYgKG9wdGlvbnMuaGVhZGVycyB8fCAhdGhpcy5oZWFkZXJzKSB7XG4gICAgICAgICAgICB0aGlzLmhlYWRlcnMgPSBuZXcgSGVhZGVycyhvcHRpb25zLmhlYWRlcnMpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMubWV0aG9kID0gbm9ybWFsaXplTWV0aG9kKG9wdGlvbnMubWV0aG9kIHx8IHRoaXMubWV0aG9kIHx8ICdHRVQnKVxuICAgICAgICAgIHRoaXMubW9kZSA9IG9wdGlvbnMubW9kZSB8fCB0aGlzLm1vZGUgfHwgbnVsbFxuICAgICAgICAgIHRoaXMucmVmZXJyZXIgPSBudWxsXG5cbiAgICAgICAgICBpZiAoKHRoaXMubWV0aG9kID09PSAnR0VUJyB8fCB0aGlzLm1ldGhvZCA9PT0gJ0hFQUQnKSAmJiBib2R5KSB7XG4gICAgICAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCdCb2R5IG5vdCBhbGxvd2VkIGZvciBHRVQgb3IgSEVBRCByZXF1ZXN0cycpXG4gICAgICAgICAgfVxuICAgICAgICAgIHRoaXMuX2luaXRCb2R5KGJvZHkpXG4gICAgICAgIH1cblxuICAgICAgICBSZXF1ZXN0LnByb3RvdHlwZS5jbG9uZSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBuZXcgUmVxdWVzdCh0aGlzLCB7IGJvZHk6IHRoaXMuX2JvZHlJbml0IH0pXG4gICAgICAgIH1cblxuICAgICAgICBmdW5jdGlvbiBkZWNvZGUoYm9keSkge1xuICAgICAgICAgIHZhciBmb3JtID0gbmV3IEZvcm1EYXRhKClcbiAgICAgICAgICBib2R5LnRyaW0oKS5zcGxpdCgnJicpLmZvckVhY2goZnVuY3Rpb24oYnl0ZXMpIHtcbiAgICAgICAgICAgIGlmIChieXRlcykge1xuICAgICAgICAgICAgICB2YXIgc3BsaXQgPSBieXRlcy5zcGxpdCgnPScpXG4gICAgICAgICAgICAgIHZhciBuYW1lID0gc3BsaXQuc2hpZnQoKS5yZXBsYWNlKC9cXCsvZywgJyAnKVxuICAgICAgICAgICAgICB2YXIgdmFsdWUgPSBzcGxpdC5qb2luKCc9JykucmVwbGFjZSgvXFwrL2csICcgJylcbiAgICAgICAgICAgICAgZm9ybS5hcHBlbmQoZGVjb2RlVVJJQ29tcG9uZW50KG5hbWUpLCBkZWNvZGVVUklDb21wb25lbnQodmFsdWUpKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGZvcm1cbiAgICAgICAgfVxuXG4gICAgICAgIGZ1bmN0aW9uIHBhcnNlSGVhZGVycyhyYXdIZWFkZXJzKSB7XG4gICAgICAgICAgdmFyIGhlYWRlcnMgPSBuZXcgSGVhZGVycygpXG4gICAgICAgICAgcmF3SGVhZGVycy5zcGxpdCgvXFxyP1xcbi8pLmZvckVhY2goZnVuY3Rpb24obGluZSkge1xuICAgICAgICAgICAgdmFyIHBhcnRzID0gbGluZS5zcGxpdCgnOicpXG4gICAgICAgICAgICB2YXIga2V5ID0gcGFydHMuc2hpZnQoKS50cmltKClcbiAgICAgICAgICAgIGlmIChrZXkpIHtcbiAgICAgICAgICAgICAgdmFyIHZhbHVlID0gcGFydHMuam9pbignOicpLnRyaW0oKVxuICAgICAgICAgICAgICBoZWFkZXJzLmFwcGVuZChrZXksIHZhbHVlKVxuICAgICAgICAgICAgfVxuICAgICAgICAgIH0pXG4gICAgICAgICAgcmV0dXJuIGhlYWRlcnNcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXF1ZXN0LnByb3RvdHlwZSlcblxuICAgICAgICBmdW5jdGlvbiBSZXNwb25zZShib2R5SW5pdCwgb3B0aW9ucykge1xuICAgICAgICAgIGlmICghb3B0aW9ucykge1xuICAgICAgICAgICAgb3B0aW9ucyA9IHt9XG4gICAgICAgICAgfVxuXG4gICAgICAgICAgdGhpcy50eXBlID0gJ2RlZmF1bHQnXG4gICAgICAgICAgdGhpcy5zdGF0dXMgPSAnc3RhdHVzJyBpbiBvcHRpb25zID8gb3B0aW9ucy5zdGF0dXMgOiAyMDBcbiAgICAgICAgICB0aGlzLm9rID0gdGhpcy5zdGF0dXMgPj0gMjAwICYmIHRoaXMuc3RhdHVzIDwgMzAwXG4gICAgICAgICAgdGhpcy5zdGF0dXNUZXh0ID0gJ3N0YXR1c1RleHQnIGluIG9wdGlvbnMgPyBvcHRpb25zLnN0YXR1c1RleHQgOiAnT0snXG4gICAgICAgICAgdGhpcy5oZWFkZXJzID0gbmV3IEhlYWRlcnMob3B0aW9ucy5oZWFkZXJzKVxuICAgICAgICAgIHRoaXMudXJsID0gb3B0aW9ucy51cmwgfHwgJydcbiAgICAgICAgICB0aGlzLl9pbml0Qm9keShib2R5SW5pdClcbiAgICAgICAgfVxuXG4gICAgICAgIEJvZHkuY2FsbChSZXNwb25zZS5wcm90b3R5cGUpXG5cbiAgICAgICAgUmVzcG9uc2UucHJvdG90eXBlLmNsb25lID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgcmV0dXJuIG5ldyBSZXNwb25zZSh0aGlzLl9ib2R5SW5pdCwge1xuICAgICAgICAgICAgc3RhdHVzOiB0aGlzLnN0YXR1cyxcbiAgICAgICAgICAgIHN0YXR1c1RleHQ6IHRoaXMuc3RhdHVzVGV4dCxcbiAgICAgICAgICAgIGhlYWRlcnM6IG5ldyBIZWFkZXJzKHRoaXMuaGVhZGVycyksXG4gICAgICAgICAgICB1cmw6IHRoaXMudXJsXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuXG4gICAgICAgIFJlc3BvbnNlLmVycm9yID0gZnVuY3Rpb24oKSB7XG4gICAgICAgICAgdmFyIHJlc3BvbnNlID0gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IDAsIHN0YXR1c1RleHQ6ICcnfSlcbiAgICAgICAgICByZXNwb25zZS50eXBlID0gJ2Vycm9yJ1xuICAgICAgICAgIHJldHVybiByZXNwb25zZVxuICAgICAgICB9XG5cbiAgICAgICAgdmFyIHJlZGlyZWN0U3RhdHVzZXMgPSBbMzAxLCAzMDIsIDMwMywgMzA3LCAzMDhdXG5cbiAgICAgICAgUmVzcG9uc2UucmVkaXJlY3QgPSBmdW5jdGlvbih1cmwsIHN0YXR1cykge1xuICAgICAgICAgIGlmIChyZWRpcmVjdFN0YXR1c2VzLmluZGV4T2Yoc3RhdHVzKSA9PT0gLTEpIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBSYW5nZUVycm9yKCdJbnZhbGlkIHN0YXR1cyBjb2RlJylcbiAgICAgICAgICB9XG5cbiAgICAgICAgICByZXR1cm4gbmV3IFJlc3BvbnNlKG51bGwsIHtzdGF0dXM6IHN0YXR1cywgaGVhZGVyczoge2xvY2F0aW9uOiB1cmx9fSlcbiAgICAgICAgfVxuXG4gICAgICAgIHNlbGYuSGVhZGVycyA9IEhlYWRlcnNcbiAgICAgICAgc2VsZi5SZXF1ZXN0ID0gUmVxdWVzdFxuICAgICAgICBzZWxmLlJlc3BvbnNlID0gUmVzcG9uc2VcblxuICAgICAgICBzZWxmLmZldGNoID0gZnVuY3Rpb24oaW5wdXQsIGluaXQpIHtcbiAgICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgICAgICB2YXIgcmVxdWVzdCA9IG5ldyBSZXF1ZXN0KGlucHV0LCBpbml0KVxuICAgICAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpXG5cbiAgICAgICAgICAgIHhoci5vbmxvYWQgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgdmFyIG9wdGlvbnMgPSB7XG4gICAgICAgICAgICAgICAgc3RhdHVzOiB4aHIuc3RhdHVzLFxuICAgICAgICAgICAgICAgIHN0YXR1c1RleHQ6IHhoci5zdGF0dXNUZXh0LFxuICAgICAgICAgICAgICAgIGhlYWRlcnM6IHBhcnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkgfHwgJycpXG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgb3B0aW9ucy51cmwgPSAncmVzcG9uc2VVUkwnIGluIHhociA/IHhoci5yZXNwb25zZVVSTCA6IG9wdGlvbnMuaGVhZGVycy5nZXQoJ1gtUmVxdWVzdC1VUkwnKVxuICAgICAgICAgICAgICB2YXIgYm9keSA9ICdyZXNwb25zZScgaW4geGhyID8geGhyLnJlc3BvbnNlIDogeGhyLnJlc3BvbnNlVGV4dFxuICAgICAgICAgICAgICByZXNvbHZlKG5ldyBSZXNwb25zZShib2R5LCBvcHRpb25zKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9uZXJyb3IgPSBmdW5jdGlvbigpIHtcbiAgICAgICAgICAgICAgcmVqZWN0KG5ldyBUeXBlRXJyb3IoJ05ldHdvcmsgcmVxdWVzdCBmYWlsZWQnKSlcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgeGhyLm9udGltZW91dCA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgICAgICByZWplY3QobmV3IFR5cGVFcnJvcignTmV0d29yayByZXF1ZXN0IGZhaWxlZCcpKVxuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICB4aHIub3BlbihyZXF1ZXN0Lm1ldGhvZCwgcmVxdWVzdC51cmwsIHRydWUpXG5cbiAgICAgICAgICAgIGlmIChyZXF1ZXN0LmNyZWRlbnRpYWxzID09PSAnaW5jbHVkZScpIHtcbiAgICAgICAgICAgICAgeGhyLndpdGhDcmVkZW50aWFscyA9IHRydWVcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgaWYgKCdyZXNwb25zZVR5cGUnIGluIHhociAmJiBzdXBwb3J0LmJsb2IpIHtcbiAgICAgICAgICAgICAgeGhyLnJlc3BvbnNlVHlwZSA9ICdibG9iJ1xuICAgICAgICAgICAgfVxuXG4gICAgICAgICAgICByZXF1ZXN0LmhlYWRlcnMuZm9yRWFjaChmdW5jdGlvbih2YWx1ZSwgbmFtZSkge1xuICAgICAgICAgICAgICB4aHIuc2V0UmVxdWVzdEhlYWRlcihuYW1lLCB2YWx1ZSlcbiAgICAgICAgICAgIH0pXG5cbiAgICAgICAgICAgIHhoci5zZW5kKHR5cGVvZiByZXF1ZXN0Ll9ib2R5SW5pdCA9PT0gJ3VuZGVmaW5lZCcgPyBudWxsIDogcmVxdWVzdC5fYm9keUluaXQpXG4gICAgICAgICAgfSlcbiAgICAgICAgfVxuICAgICAgICBzZWxmLmZldGNoLnBvbHlmaWxsID0gdHJ1ZVxuICAgICAgfSkodHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gc2VsZiA6IHRoaXMpO1xuXG5cbiAgICAgIHJldHVybiB7XG4gICAgICAgIGZldGNoOiBzZWxmLmZldGNoLFxuICAgICAgICBIZWFkZXJzOiBzZWxmLkhlYWRlcnMsXG4gICAgICAgIFJlcXVlc3Q6IHNlbGYuUmVxdWVzdCxcbiAgICAgICAgUmVzcG9uc2U6IHNlbGYuUmVzcG9uc2VcbiAgICAgIH07XG4gICAgfSgpKTtcbiAgfVxuXG4gIGlmICh0eXBlb2YgZGVmaW5lID09PSAnZnVuY3Rpb24nICYmIGRlZmluZS5hbWQpIHtcbiAgICBkZWZpbmUoZnVuY3Rpb24gKCkge1xuICAgICAgcmV0dXJuIGZldGNoUG9ueWZpbGw7XG4gICAgfSk7XG4gIH0gZWxzZSBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgbW9kdWxlLmV4cG9ydHMgPSBmZXRjaFBvbnlmaWxsO1xuICB9IGVsc2Uge1xuICAgIHNlbGYuZmV0Y2hQb255ZmlsbCA9IGZldGNoUG9ueWZpbGw7XG4gIH1cbn0odHlwZW9mIHNlbGYgPT09ICd1bmRlZmluZWQnID8gdGhpcyA6IHNlbGYpKTtcblxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2ZldGNoLXBvbnlmaWxsL2J1aWxkL2ZldGNoLWJyb3dzZXIuanNcbi8vIG1vZHVsZSBpZCA9IDgyXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucmVhZCA9IGZ1bmN0aW9uIChidWZmZXIsIG9mZnNldCwgaXNMRSwgbUxlbiwgbkJ5dGVzKSB7XG4gIHZhciBlLCBtXG4gIHZhciBlTGVuID0gbkJ5dGVzICogOCAtIG1MZW4gLSAxXG4gIHZhciBlTWF4ID0gKDEgPDwgZUxlbikgLSAxXG4gIHZhciBlQmlhcyA9IGVNYXggPj4gMVxuICB2YXIgbkJpdHMgPSAtN1xuICB2YXIgaSA9IGlzTEUgPyAobkJ5dGVzIC0gMSkgOiAwXG4gIHZhciBkID0gaXNMRSA/IC0xIDogMVxuICB2YXIgcyA9IGJ1ZmZlcltvZmZzZXQgKyBpXVxuXG4gIGkgKz0gZFxuXG4gIGUgPSBzICYgKCgxIDw8ICgtbkJpdHMpKSAtIDEpXG4gIHMgPj49ICgtbkJpdHMpXG4gIG5CaXRzICs9IGVMZW5cbiAgZm9yICg7IG5CaXRzID4gMDsgZSA9IGUgKiAyNTYgKyBidWZmZXJbb2Zmc2V0ICsgaV0sIGkgKz0gZCwgbkJpdHMgLT0gOCkge31cblxuICBtID0gZSAmICgoMSA8PCAoLW5CaXRzKSkgLSAxKVxuICBlID4+PSAoLW5CaXRzKVxuICBuQml0cyArPSBtTGVuXG4gIGZvciAoOyBuQml0cyA+IDA7IG0gPSBtICogMjU2ICsgYnVmZmVyW29mZnNldCArIGldLCBpICs9IGQsIG5CaXRzIC09IDgpIHt9XG5cbiAgaWYgKGUgPT09IDApIHtcbiAgICBlID0gMSAtIGVCaWFzXG4gIH0gZWxzZSBpZiAoZSA9PT0gZU1heCkge1xuICAgIHJldHVybiBtID8gTmFOIDogKChzID8gLTEgOiAxKSAqIEluZmluaXR5KVxuICB9IGVsc2Uge1xuICAgIG0gPSBtICsgTWF0aC5wb3coMiwgbUxlbilcbiAgICBlID0gZSAtIGVCaWFzXG4gIH1cbiAgcmV0dXJuIChzID8gLTEgOiAxKSAqIG0gKiBNYXRoLnBvdygyLCBlIC0gbUxlbilcbn1cblxuZXhwb3J0cy53cml0ZSA9IGZ1bmN0aW9uIChidWZmZXIsIHZhbHVlLCBvZmZzZXQsIGlzTEUsIG1MZW4sIG5CeXRlcykge1xuICB2YXIgZSwgbSwgY1xuICB2YXIgZUxlbiA9IG5CeXRlcyAqIDggLSBtTGVuIC0gMVxuICB2YXIgZU1heCA9ICgxIDw8IGVMZW4pIC0gMVxuICB2YXIgZUJpYXMgPSBlTWF4ID4+IDFcbiAgdmFyIHJ0ID0gKG1MZW4gPT09IDIzID8gTWF0aC5wb3coMiwgLTI0KSAtIE1hdGgucG93KDIsIC03NykgOiAwKVxuICB2YXIgaSA9IGlzTEUgPyAwIDogKG5CeXRlcyAtIDEpXG4gIHZhciBkID0gaXNMRSA/IDEgOiAtMVxuICB2YXIgcyA9IHZhbHVlIDwgMCB8fCAodmFsdWUgPT09IDAgJiYgMSAvIHZhbHVlIDwgMCkgPyAxIDogMFxuXG4gIHZhbHVlID0gTWF0aC5hYnModmFsdWUpXG5cbiAgaWYgKGlzTmFOKHZhbHVlKSB8fCB2YWx1ZSA9PT0gSW5maW5pdHkpIHtcbiAgICBtID0gaXNOYU4odmFsdWUpID8gMSA6IDBcbiAgICBlID0gZU1heFxuICB9IGVsc2Uge1xuICAgIGUgPSBNYXRoLmZsb29yKE1hdGgubG9nKHZhbHVlKSAvIE1hdGguTE4yKVxuICAgIGlmICh2YWx1ZSAqIChjID0gTWF0aC5wb3coMiwgLWUpKSA8IDEpIHtcbiAgICAgIGUtLVxuICAgICAgYyAqPSAyXG4gICAgfVxuICAgIGlmIChlICsgZUJpYXMgPj0gMSkge1xuICAgICAgdmFsdWUgKz0gcnQgLyBjXG4gICAgfSBlbHNlIHtcbiAgICAgIHZhbHVlICs9IHJ0ICogTWF0aC5wb3coMiwgMSAtIGVCaWFzKVxuICAgIH1cbiAgICBpZiAodmFsdWUgKiBjID49IDIpIHtcbiAgICAgIGUrK1xuICAgICAgYyAvPSAyXG4gICAgfVxuXG4gICAgaWYgKGUgKyBlQmlhcyA+PSBlTWF4KSB7XG4gICAgICBtID0gMFxuICAgICAgZSA9IGVNYXhcbiAgICB9IGVsc2UgaWYgKGUgKyBlQmlhcyA+PSAxKSB7XG4gICAgICBtID0gKHZhbHVlICogYyAtIDEpICogTWF0aC5wb3coMiwgbUxlbilcbiAgICAgIGUgPSBlICsgZUJpYXNcbiAgICB9IGVsc2Uge1xuICAgICAgbSA9IHZhbHVlICogTWF0aC5wb3coMiwgZUJpYXMgLSAxKSAqIE1hdGgucG93KDIsIG1MZW4pXG4gICAgICBlID0gMFxuICAgIH1cbiAgfVxuXG4gIGZvciAoOyBtTGVuID49IDg7IGJ1ZmZlcltvZmZzZXQgKyBpXSA9IG0gJiAweGZmLCBpICs9IGQsIG0gLz0gMjU2LCBtTGVuIC09IDgpIHt9XG5cbiAgZSA9IChlIDw8IG1MZW4pIHwgbVxuICBlTGVuICs9IG1MZW5cbiAgZm9yICg7IGVMZW4gPiAwOyBidWZmZXJbb2Zmc2V0ICsgaV0gPSBlICYgMHhmZiwgaSArPSBkLCBlIC89IDI1NiwgZUxlbiAtPSA4KSB7fVxuXG4gIGJ1ZmZlcltvZmZzZXQgKyBpIC0gZF0gfD0gcyAqIDEyOFxufVxuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2llZWU3NTQvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDgzXG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciB0b1N0cmluZyA9IHt9LnRvU3RyaW5nO1xuXG5tb2R1bGUuZXhwb3J0cyA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKGFycikge1xuICByZXR1cm4gdG9TdHJpbmcuY2FsbChhcnIpID09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2lzYXJyYXkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg0XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBqc29uID0gdHlwZW9mIEpTT04gIT09ICd1bmRlZmluZWQnID8gSlNPTiA6IHJlcXVpcmUoJ2pzb25pZnknKTtcblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG4gICAgaWYgKCFvcHRzKSBvcHRzID0ge307XG4gICAgaWYgKHR5cGVvZiBvcHRzID09PSAnZnVuY3Rpb24nKSBvcHRzID0geyBjbXA6IG9wdHMgfTtcbiAgICB2YXIgc3BhY2UgPSBvcHRzLnNwYWNlIHx8ICcnO1xuICAgIGlmICh0eXBlb2Ygc3BhY2UgPT09ICdudW1iZXInKSBzcGFjZSA9IEFycmF5KHNwYWNlKzEpLmpvaW4oJyAnKTtcbiAgICB2YXIgY3ljbGVzID0gKHR5cGVvZiBvcHRzLmN5Y2xlcyA9PT0gJ2Jvb2xlYW4nKSA/IG9wdHMuY3ljbGVzIDogZmFsc2U7XG4gICAgdmFyIHJlcGxhY2VyID0gb3B0cy5yZXBsYWNlciB8fCBmdW5jdGlvbihrZXksIHZhbHVlKSB7IHJldHVybiB2YWx1ZTsgfTtcblxuICAgIHZhciBjbXAgPSBvcHRzLmNtcCAmJiAoZnVuY3Rpb24gKGYpIHtcbiAgICAgICAgcmV0dXJuIGZ1bmN0aW9uIChub2RlKSB7XG4gICAgICAgICAgICByZXR1cm4gZnVuY3Rpb24gKGEsIGIpIHtcbiAgICAgICAgICAgICAgICB2YXIgYW9iaiA9IHsga2V5OiBhLCB2YWx1ZTogbm9kZVthXSB9O1xuICAgICAgICAgICAgICAgIHZhciBib2JqID0geyBrZXk6IGIsIHZhbHVlOiBub2RlW2JdIH07XG4gICAgICAgICAgICAgICAgcmV0dXJuIGYoYW9iaiwgYm9iaik7XG4gICAgICAgICAgICB9O1xuICAgICAgICB9O1xuICAgIH0pKG9wdHMuY21wKTtcblxuICAgIHZhciBzZWVuID0gW107XG4gICAgcmV0dXJuIChmdW5jdGlvbiBzdHJpbmdpZnkgKHBhcmVudCwga2V5LCBub2RlLCBsZXZlbCkge1xuICAgICAgICB2YXIgaW5kZW50ID0gc3BhY2UgPyAoJ1xcbicgKyBuZXcgQXJyYXkobGV2ZWwgKyAxKS5qb2luKHNwYWNlKSkgOiAnJztcbiAgICAgICAgdmFyIGNvbG9uU2VwYXJhdG9yID0gc3BhY2UgPyAnOiAnIDogJzonO1xuXG4gICAgICAgIGlmIChub2RlICYmIG5vZGUudG9KU09OICYmIHR5cGVvZiBub2RlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICAgICAgbm9kZSA9IG5vZGUudG9KU09OKCk7XG4gICAgICAgIH1cblxuICAgICAgICBub2RlID0gcmVwbGFjZXIuY2FsbChwYXJlbnQsIGtleSwgbm9kZSk7XG5cbiAgICAgICAgaWYgKG5vZGUgPT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgICAgIGlmICh0eXBlb2Ygbm9kZSAhPT0gJ29iamVjdCcgfHwgbm9kZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgcmV0dXJuIGpzb24uc3RyaW5naWZ5KG5vZGUpO1xuICAgICAgICB9XG4gICAgICAgIGlmIChpc0FycmF5KG5vZGUpKSB7XG4gICAgICAgICAgICB2YXIgb3V0ID0gW107XG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IG5vZGUubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IHN0cmluZ2lmeShub2RlLCBpLCBub2RlW2ldLCBsZXZlbCsxKSB8fCBqc29uLnN0cmluZ2lmeShudWxsKTtcbiAgICAgICAgICAgICAgICBvdXQucHVzaChpbmRlbnQgKyBzcGFjZSArIGl0ZW0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmV0dXJuICdbJyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnXSc7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBpZiAoc2Vlbi5pbmRleE9mKG5vZGUpICE9PSAtMSkge1xuICAgICAgICAgICAgICAgIGlmIChjeWNsZXMpIHJldHVybiBqc29uLnN0cmluZ2lmeSgnX19jeWNsZV9fJyk7XG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IFR5cGVFcnJvcignQ29udmVydGluZyBjaXJjdWxhciBzdHJ1Y3R1cmUgdG8gSlNPTicpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBzZWVuLnB1c2gobm9kZSk7XG5cbiAgICAgICAgICAgIHZhciBrZXlzID0gb2JqZWN0S2V5cyhub2RlKS5zb3J0KGNtcCAmJiBjbXAobm9kZSkpO1xuICAgICAgICAgICAgdmFyIG91dCA9IFtdO1xuICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBrZXlzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICAgICAgdmFyIGtleSA9IGtleXNbaV07XG4gICAgICAgICAgICAgICAgdmFyIHZhbHVlID0gc3RyaW5naWZ5KG5vZGUsIGtleSwgbm9kZVtrZXldLCBsZXZlbCsxKTtcblxuICAgICAgICAgICAgICAgIGlmKCF2YWx1ZSkgY29udGludWU7XG5cbiAgICAgICAgICAgICAgICB2YXIga2V5VmFsdWUgPSBqc29uLnN0cmluZ2lmeShrZXkpXG4gICAgICAgICAgICAgICAgICAgICsgY29sb25TZXBhcmF0b3JcbiAgICAgICAgICAgICAgICAgICAgKyB2YWx1ZTtcbiAgICAgICAgICAgICAgICA7XG4gICAgICAgICAgICAgICAgb3V0LnB1c2goaW5kZW50ICsgc3BhY2UgKyBrZXlWYWx1ZSk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBzZWVuLnNwbGljZShzZWVuLmluZGV4T2Yobm9kZSksIDEpO1xuICAgICAgICAgICAgcmV0dXJuICd7JyArIG91dC5qb2luKCcsJykgKyBpbmRlbnQgKyAnfSc7XG4gICAgICAgIH1cbiAgICB9KSh7ICcnOiBvYmogfSwgJycsIG9iaiwgMCk7XG59O1xuXG52YXIgaXNBcnJheSA9IEFycmF5LmlzQXJyYXkgfHwgZnVuY3Rpb24gKHgpIHtcbiAgICByZXR1cm4ge30udG9TdHJpbmcuY2FsbCh4KSA9PT0gJ1tvYmplY3QgQXJyYXldJztcbn07XG5cbnZhciBvYmplY3RLZXlzID0gT2JqZWN0LmtleXMgfHwgZnVuY3Rpb24gKG9iaikge1xuICAgIHZhciBoYXMgPSBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5IHx8IGZ1bmN0aW9uICgpIHsgcmV0dXJuIHRydWUgfTtcbiAgICB2YXIga2V5cyA9IFtdO1xuICAgIGZvciAodmFyIGtleSBpbiBvYmopIHtcbiAgICAgICAgaWYgKGhhcy5jYWxsKG9iaiwga2V5KSkga2V5cy5wdXNoKGtleSk7XG4gICAgfVxuICAgIHJldHVybiBrZXlzO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uLXN0YWJsZS1zdHJpbmdpZnkvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDg1XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsImV4cG9ydHMucGFyc2UgPSByZXF1aXJlKCcuL2xpYi9wYXJzZScpO1xuZXhwb3J0cy5zdHJpbmdpZnkgPSByZXF1aXJlKCcuL2xpYi9zdHJpbmdpZnknKTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9qc29uaWZ5L2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4NlxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCJ2YXIgYXQsIC8vIFRoZSBpbmRleCBvZiB0aGUgY3VycmVudCBjaGFyYWN0ZXJcbiAgICBjaCwgLy8gVGhlIGN1cnJlbnQgY2hhcmFjdGVyXG4gICAgZXNjYXBlZSA9IHtcbiAgICAgICAgJ1wiJzogICdcIicsXG4gICAgICAgICdcXFxcJzogJ1xcXFwnLFxuICAgICAgICAnLyc6ICAnLycsXG4gICAgICAgIGI6ICAgICdcXGInLFxuICAgICAgICBmOiAgICAnXFxmJyxcbiAgICAgICAgbjogICAgJ1xcbicsXG4gICAgICAgIHI6ICAgICdcXHInLFxuICAgICAgICB0OiAgICAnXFx0J1xuICAgIH0sXG4gICAgdGV4dCxcblxuICAgIGVycm9yID0gZnVuY3Rpb24gKG0pIHtcbiAgICAgICAgLy8gQ2FsbCBlcnJvciB3aGVuIHNvbWV0aGluZyBpcyB3cm9uZy5cbiAgICAgICAgdGhyb3cge1xuICAgICAgICAgICAgbmFtZTogICAgJ1N5bnRheEVycm9yJyxcbiAgICAgICAgICAgIG1lc3NhZ2U6IG0sXG4gICAgICAgICAgICBhdDogICAgICBhdCxcbiAgICAgICAgICAgIHRleHQ6ICAgIHRleHRcbiAgICAgICAgfTtcbiAgICB9LFxuICAgIFxuICAgIG5leHQgPSBmdW5jdGlvbiAoYykge1xuICAgICAgICAvLyBJZiBhIGMgcGFyYW1ldGVyIGlzIHByb3ZpZGVkLCB2ZXJpZnkgdGhhdCBpdCBtYXRjaGVzIHRoZSBjdXJyZW50IGNoYXJhY3Rlci5cbiAgICAgICAgaWYgKGMgJiYgYyAhPT0gY2gpIHtcbiAgICAgICAgICAgIGVycm9yKFwiRXhwZWN0ZWQgJ1wiICsgYyArIFwiJyBpbnN0ZWFkIG9mICdcIiArIGNoICsgXCInXCIpO1xuICAgICAgICB9XG4gICAgICAgIFxuICAgICAgICAvLyBHZXQgdGhlIG5leHQgY2hhcmFjdGVyLiBXaGVuIHRoZXJlIGFyZSBubyBtb3JlIGNoYXJhY3RlcnMsXG4gICAgICAgIC8vIHJldHVybiB0aGUgZW1wdHkgc3RyaW5nLlxuICAgICAgICBcbiAgICAgICAgY2ggPSB0ZXh0LmNoYXJBdChhdCk7XG4gICAgICAgIGF0ICs9IDE7XG4gICAgICAgIHJldHVybiBjaDtcbiAgICB9LFxuICAgIFxuICAgIG51bWJlciA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBudW1iZXIgdmFsdWUuXG4gICAgICAgIHZhciBudW1iZXIsXG4gICAgICAgICAgICBzdHJpbmcgPSAnJztcbiAgICAgICAgXG4gICAgICAgIGlmIChjaCA9PT0gJy0nKSB7XG4gICAgICAgICAgICBzdHJpbmcgPSAnLSc7XG4gICAgICAgICAgICBuZXh0KCctJyk7XG4gICAgICAgIH1cbiAgICAgICAgd2hpbGUgKGNoID49ICcwJyAmJiBjaCA8PSAnOScpIHtcbiAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICcuJykge1xuICAgICAgICAgICAgc3RyaW5nICs9ICcuJztcbiAgICAgICAgICAgIHdoaWxlIChuZXh0KCkgJiYgY2ggPj0gJzAnICYmIGNoIDw9ICc5Jykge1xuICAgICAgICAgICAgICAgIHN0cmluZyArPSBjaDtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBpZiAoY2ggPT09ICdlJyB8fCBjaCA9PT0gJ0UnKSB7XG4gICAgICAgICAgICBzdHJpbmcgKz0gY2g7XG4gICAgICAgICAgICBuZXh0KCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICctJyB8fCBjaCA9PT0gJysnKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHdoaWxlIChjaCA+PSAnMCcgJiYgY2ggPD0gJzknKSB7XG4gICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBudW1iZXIgPSArc3RyaW5nO1xuICAgICAgICBpZiAoIWlzRmluaXRlKG51bWJlcikpIHtcbiAgICAgICAgICAgIGVycm9yKFwiQmFkIG51bWJlclwiKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgICAgIH1cbiAgICB9LFxuICAgIFxuICAgIHN0cmluZyA9IGZ1bmN0aW9uICgpIHtcbiAgICAgICAgLy8gUGFyc2UgYSBzdHJpbmcgdmFsdWUuXG4gICAgICAgIHZhciBoZXgsXG4gICAgICAgICAgICBpLFxuICAgICAgICAgICAgc3RyaW5nID0gJycsXG4gICAgICAgICAgICB1ZmZmZjtcbiAgICAgICAgXG4gICAgICAgIC8vIFdoZW4gcGFyc2luZyBmb3Igc3RyaW5nIHZhbHVlcywgd2UgbXVzdCBsb29rIGZvciBcIiBhbmQgXFwgY2hhcmFjdGVycy5cbiAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICB3aGlsZSAobmV4dCgpKSB7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXCInKSB7XG4gICAgICAgICAgICAgICAgICAgIG5leHQoKTtcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHN0cmluZztcbiAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKGNoID09PSAnXFxcXCcpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoY2ggPT09ICd1Jykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSAwO1xuICAgICAgICAgICAgICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IDQ7IGkgKz0gMSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGhleCA9IHBhcnNlSW50KG5leHQoKSwgMTYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICghaXNGaW5pdGUoaGV4KSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdWZmZmYgPSB1ZmZmZiAqIDE2ICsgaGV4O1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IFN0cmluZy5mcm9tQ2hhckNvZGUodWZmZmYpO1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHR5cGVvZiBlc2NhcGVlW2NoXSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHN0cmluZyArPSBlc2NhcGVlW2NoXTtcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgICAgc3RyaW5nICs9IGNoO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBzdHJpbmdcIik7XG4gICAgfSxcblxuICAgIHdoaXRlID0gZnVuY3Rpb24gKCkge1xuXG4vLyBTa2lwIHdoaXRlc3BhY2UuXG5cbiAgICAgICAgd2hpbGUgKGNoICYmIGNoIDw9ICcgJykge1xuICAgICAgICAgICAgbmV4dCgpO1xuICAgICAgICB9XG4gICAgfSxcblxuICAgIHdvcmQgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIHRydWUsIGZhbHNlLCBvciBudWxsLlxuXG4gICAgICAgIHN3aXRjaCAoY2gpIHtcbiAgICAgICAgY2FzZSAndCc6XG4gICAgICAgICAgICBuZXh0KCd0Jyk7XG4gICAgICAgICAgICBuZXh0KCdyJyk7XG4gICAgICAgICAgICBuZXh0KCd1Jyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY2FzZSAnZic6XG4gICAgICAgICAgICBuZXh0KCdmJyk7XG4gICAgICAgICAgICBuZXh0KCdhJyk7XG4gICAgICAgICAgICBuZXh0KCdsJyk7XG4gICAgICAgICAgICBuZXh0KCdzJyk7XG4gICAgICAgICAgICBuZXh0KCdlJyk7XG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGNhc2UgJ24nOlxuICAgICAgICAgICAgbmV4dCgnbicpO1xuICAgICAgICAgICAgbmV4dCgndScpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgbmV4dCgnbCcpO1xuICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgZXJyb3IoXCJVbmV4cGVjdGVkICdcIiArIGNoICsgXCInXCIpO1xuICAgIH0sXG5cbiAgICB2YWx1ZSwgIC8vIFBsYWNlIGhvbGRlciBmb3IgdGhlIHZhbHVlIGZ1bmN0aW9uLlxuXG4gICAgYXJyYXkgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIGFycmF5IHZhbHVlLlxuXG4gICAgICAgIHZhciBhcnJheSA9IFtdO1xuXG4gICAgICAgIGlmIChjaCA9PT0gJ1snKSB7XG4gICAgICAgICAgICBuZXh0KCdbJyk7XG4gICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICBuZXh0KCddJyk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGFycmF5OyAgIC8vIGVtcHR5IGFycmF5XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB3aGlsZSAoY2gpIHtcbiAgICAgICAgICAgICAgICBhcnJheS5wdXNoKHZhbHVlKCkpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnXScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnXScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gYXJyYXk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIG5leHQoJywnKTtcbiAgICAgICAgICAgICAgICB3aGl0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGVycm9yKFwiQmFkIGFycmF5XCIpO1xuICAgIH0sXG5cbiAgICBvYmplY3QgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGFuIG9iamVjdCB2YWx1ZS5cblxuICAgICAgICB2YXIga2V5LFxuICAgICAgICAgICAgb2JqZWN0ID0ge307XG5cbiAgICAgICAgaWYgKGNoID09PSAneycpIHtcbiAgICAgICAgICAgIG5leHQoJ3snKTtcbiAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICBpZiAoY2ggPT09ICd9Jykge1xuICAgICAgICAgICAgICAgIG5leHQoJ30nKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0OyAgIC8vIGVtcHR5IG9iamVjdFxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgd2hpbGUgKGNoKSB7XG4gICAgICAgICAgICAgICAga2V5ID0gc3RyaW5nKCk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgICAgICBuZXh0KCc6Jyk7XG4gICAgICAgICAgICAgICAgaWYgKE9iamVjdC5oYXNPd25Qcm9wZXJ0eS5jYWxsKG9iamVjdCwga2V5KSkge1xuICAgICAgICAgICAgICAgICAgICBlcnJvcignRHVwbGljYXRlIGtleSBcIicgKyBrZXkgKyAnXCInKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgb2JqZWN0W2tleV0gPSB2YWx1ZSgpO1xuICAgICAgICAgICAgICAgIHdoaXRlKCk7XG4gICAgICAgICAgICAgICAgaWYgKGNoID09PSAnfScpIHtcbiAgICAgICAgICAgICAgICAgICAgbmV4dCgnfScpO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gb2JqZWN0O1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBuZXh0KCcsJyk7XG4gICAgICAgICAgICAgICAgd2hpdGUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlcnJvcihcIkJhZCBvYmplY3RcIik7XG4gICAgfTtcblxudmFsdWUgPSBmdW5jdGlvbiAoKSB7XG5cbi8vIFBhcnNlIGEgSlNPTiB2YWx1ZS4gSXQgY291bGQgYmUgYW4gb2JqZWN0LCBhbiBhcnJheSwgYSBzdHJpbmcsIGEgbnVtYmVyLFxuLy8gb3IgYSB3b3JkLlxuXG4gICAgd2hpdGUoKTtcbiAgICBzd2l0Y2ggKGNoKSB7XG4gICAgY2FzZSAneyc6XG4gICAgICAgIHJldHVybiBvYmplY3QoKTtcbiAgICBjYXNlICdbJzpcbiAgICAgICAgcmV0dXJuIGFycmF5KCk7XG4gICAgY2FzZSAnXCInOlxuICAgICAgICByZXR1cm4gc3RyaW5nKCk7XG4gICAgY2FzZSAnLSc6XG4gICAgICAgIHJldHVybiBudW1iZXIoKTtcbiAgICBkZWZhdWx0OlxuICAgICAgICByZXR1cm4gY2ggPj0gJzAnICYmIGNoIDw9ICc5JyA/IG51bWJlcigpIDogd29yZCgpO1xuICAgIH1cbn07XG5cbi8vIFJldHVybiB0aGUganNvbl9wYXJzZSBmdW5jdGlvbi4gSXQgd2lsbCBoYXZlIGFjY2VzcyB0byBhbGwgb2YgdGhlIGFib3ZlXG4vLyBmdW5jdGlvbnMgYW5kIHZhcmlhYmxlcy5cblxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc291cmNlLCByZXZpdmVyKSB7XG4gICAgdmFyIHJlc3VsdDtcbiAgICBcbiAgICB0ZXh0ID0gc291cmNlO1xuICAgIGF0ID0gMDtcbiAgICBjaCA9ICcgJztcbiAgICByZXN1bHQgPSB2YWx1ZSgpO1xuICAgIHdoaXRlKCk7XG4gICAgaWYgKGNoKSB7XG4gICAgICAgIGVycm9yKFwiU3ludGF4IGVycm9yXCIpO1xuICAgIH1cblxuICAgIC8vIElmIHRoZXJlIGlzIGEgcmV2aXZlciBmdW5jdGlvbiwgd2UgcmVjdXJzaXZlbHkgd2FsayB0aGUgbmV3IHN0cnVjdHVyZSxcbiAgICAvLyBwYXNzaW5nIGVhY2ggbmFtZS92YWx1ZSBwYWlyIHRvIHRoZSByZXZpdmVyIGZ1bmN0aW9uIGZvciBwb3NzaWJsZVxuICAgIC8vIHRyYW5zZm9ybWF0aW9uLCBzdGFydGluZyB3aXRoIGEgdGVtcG9yYXJ5IHJvb3Qgb2JqZWN0IHRoYXQgaG9sZHMgdGhlIHJlc3VsdFxuICAgIC8vIGluIGFuIGVtcHR5IGtleS4gSWYgdGhlcmUgaXMgbm90IGEgcmV2aXZlciBmdW5jdGlvbiwgd2Ugc2ltcGx5IHJldHVybiB0aGVcbiAgICAvLyByZXN1bHQuXG5cbiAgICByZXR1cm4gdHlwZW9mIHJldml2ZXIgPT09ICdmdW5jdGlvbicgPyAoZnVuY3Rpb24gd2Fsayhob2xkZXIsIGtleSkge1xuICAgICAgICB2YXIgaywgdiwgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICAgICAgaWYgKHZhbHVlICYmIHR5cGVvZiB2YWx1ZSA9PT0gJ29iamVjdCcpIHtcbiAgICAgICAgICAgIGZvciAoayBpbiB2YWx1ZSkge1xuICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgIHYgPSB3YWxrKHZhbHVlLCBrKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHYgIT09IHVuZGVmaW5lZCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWVba10gPSB2O1xuICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgZGVsZXRlIHZhbHVlW2tdO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiByZXZpdmVyLmNhbGwoaG9sZGVyLCBrZXksIHZhbHVlKTtcbiAgICB9KHsnJzogcmVzdWx0fSwgJycpKSA6IHJlc3VsdDtcbn07XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vanNvbmlmeS9saWIvcGFyc2UuanNcbi8vIG1vZHVsZSBpZCA9IDg3XG4vLyBtb2R1bGUgY2h1bmtzID0gMCIsInZhciBjeCA9IC9bXFx1MDAwMFxcdTAwYWRcXHUwNjAwLVxcdTA2MDRcXHUwNzBmXFx1MTdiNFxcdTE3YjVcXHUyMDBjLVxcdTIwMGZcXHUyMDI4LVxcdTIwMmZcXHUyMDYwLVxcdTIwNmZcXHVmZWZmXFx1ZmZmMC1cXHVmZmZmXS9nLFxuICAgIGVzY2FwYWJsZSA9IC9bXFxcXFxcXCJcXHgwMC1cXHgxZlxceDdmLVxceDlmXFx1MDBhZFxcdTA2MDAtXFx1MDYwNFxcdTA3MGZcXHUxN2I0XFx1MTdiNVxcdTIwMGMtXFx1MjAwZlxcdTIwMjgtXFx1MjAyZlxcdTIwNjAtXFx1MjA2ZlxcdWZlZmZcXHVmZmYwLVxcdWZmZmZdL2csXG4gICAgZ2FwLFxuICAgIGluZGVudCxcbiAgICBtZXRhID0geyAgICAvLyB0YWJsZSBvZiBjaGFyYWN0ZXIgc3Vic3RpdHV0aW9uc1xuICAgICAgICAnXFxiJzogJ1xcXFxiJyxcbiAgICAgICAgJ1xcdCc6ICdcXFxcdCcsXG4gICAgICAgICdcXG4nOiAnXFxcXG4nLFxuICAgICAgICAnXFxmJzogJ1xcXFxmJyxcbiAgICAgICAgJ1xccic6ICdcXFxccicsXG4gICAgICAgICdcIicgOiAnXFxcXFwiJyxcbiAgICAgICAgJ1xcXFwnOiAnXFxcXFxcXFwnXG4gICAgfSxcbiAgICByZXA7XG5cbmZ1bmN0aW9uIHF1b3RlKHN0cmluZykge1xuICAgIC8vIElmIHRoZSBzdHJpbmcgY29udGFpbnMgbm8gY29udHJvbCBjaGFyYWN0ZXJzLCBubyBxdW90ZSBjaGFyYWN0ZXJzLCBhbmQgbm9cbiAgICAvLyBiYWNrc2xhc2ggY2hhcmFjdGVycywgdGhlbiB3ZSBjYW4gc2FmZWx5IHNsYXAgc29tZSBxdW90ZXMgYXJvdW5kIGl0LlxuICAgIC8vIE90aGVyd2lzZSB3ZSBtdXN0IGFsc28gcmVwbGFjZSB0aGUgb2ZmZW5kaW5nIGNoYXJhY3RlcnMgd2l0aCBzYWZlIGVzY2FwZVxuICAgIC8vIHNlcXVlbmNlcy5cbiAgICBcbiAgICBlc2NhcGFibGUubGFzdEluZGV4ID0gMDtcbiAgICByZXR1cm4gZXNjYXBhYmxlLnRlc3Qoc3RyaW5nKSA/ICdcIicgKyBzdHJpbmcucmVwbGFjZShlc2NhcGFibGUsIGZ1bmN0aW9uIChhKSB7XG4gICAgICAgIHZhciBjID0gbWV0YVthXTtcbiAgICAgICAgcmV0dXJuIHR5cGVvZiBjID09PSAnc3RyaW5nJyA/IGMgOlxuICAgICAgICAgICAgJ1xcXFx1JyArICgnMDAwMCcgKyBhLmNoYXJDb2RlQXQoMCkudG9TdHJpbmcoMTYpKS5zbGljZSgtNCk7XG4gICAgfSkgKyAnXCInIDogJ1wiJyArIHN0cmluZyArICdcIic7XG59XG5cbmZ1bmN0aW9uIHN0cihrZXksIGhvbGRlcikge1xuICAgIC8vIFByb2R1Y2UgYSBzdHJpbmcgZnJvbSBob2xkZXJba2V5XS5cbiAgICB2YXIgaSwgICAgICAgICAgLy8gVGhlIGxvb3AgY291bnRlci5cbiAgICAgICAgaywgICAgICAgICAgLy8gVGhlIG1lbWJlciBrZXkuXG4gICAgICAgIHYsICAgICAgICAgIC8vIFRoZSBtZW1iZXIgdmFsdWUuXG4gICAgICAgIGxlbmd0aCxcbiAgICAgICAgbWluZCA9IGdhcCxcbiAgICAgICAgcGFydGlhbCxcbiAgICAgICAgdmFsdWUgPSBob2xkZXJba2V5XTtcbiAgICBcbiAgICAvLyBJZiB0aGUgdmFsdWUgaGFzIGEgdG9KU09OIG1ldGhvZCwgY2FsbCBpdCB0byBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodmFsdWUgJiYgdHlwZW9mIHZhbHVlID09PSAnb2JqZWN0JyAmJlxuICAgICAgICAgICAgdHlwZW9mIHZhbHVlLnRvSlNPTiA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHZhbHVlLnRvSlNPTihrZXkpO1xuICAgIH1cbiAgICBcbiAgICAvLyBJZiB3ZSB3ZXJlIGNhbGxlZCB3aXRoIGEgcmVwbGFjZXIgZnVuY3Rpb24sIHRoZW4gY2FsbCB0aGUgcmVwbGFjZXIgdG9cbiAgICAvLyBvYnRhaW4gYSByZXBsYWNlbWVudCB2YWx1ZS5cbiAgICBpZiAodHlwZW9mIHJlcCA9PT0gJ2Z1bmN0aW9uJykge1xuICAgICAgICB2YWx1ZSA9IHJlcC5jYWxsKGhvbGRlciwga2V5LCB2YWx1ZSk7XG4gICAgfVxuICAgIFxuICAgIC8vIFdoYXQgaGFwcGVucyBuZXh0IGRlcGVuZHMgb24gdGhlIHZhbHVlJ3MgdHlwZS5cbiAgICBzd2l0Y2ggKHR5cGVvZiB2YWx1ZSkge1xuICAgICAgICBjYXNlICdzdHJpbmcnOlxuICAgICAgICAgICAgcmV0dXJuIHF1b3RlKHZhbHVlKTtcbiAgICAgICAgXG4gICAgICAgIGNhc2UgJ251bWJlcic6XG4gICAgICAgICAgICAvLyBKU09OIG51bWJlcnMgbXVzdCBiZSBmaW5pdGUuIEVuY29kZSBub24tZmluaXRlIG51bWJlcnMgYXMgbnVsbC5cbiAgICAgICAgICAgIHJldHVybiBpc0Zpbml0ZSh2YWx1ZSkgPyBTdHJpbmcodmFsdWUpIDogJ251bGwnO1xuICAgICAgICBcbiAgICAgICAgY2FzZSAnYm9vbGVhbic6XG4gICAgICAgIGNhc2UgJ251bGwnOlxuICAgICAgICAgICAgLy8gSWYgdGhlIHZhbHVlIGlzIGEgYm9vbGVhbiBvciBudWxsLCBjb252ZXJ0IGl0IHRvIGEgc3RyaW5nLiBOb3RlOlxuICAgICAgICAgICAgLy8gdHlwZW9mIG51bGwgZG9lcyBub3QgcHJvZHVjZSAnbnVsbCcuIFRoZSBjYXNlIGlzIGluY2x1ZGVkIGhlcmUgaW5cbiAgICAgICAgICAgIC8vIHRoZSByZW1vdGUgY2hhbmNlIHRoYXQgdGhpcyBnZXRzIGZpeGVkIHNvbWVkYXkuXG4gICAgICAgICAgICByZXR1cm4gU3RyaW5nKHZhbHVlKTtcbiAgICAgICAgICAgIFxuICAgICAgICBjYXNlICdvYmplY3QnOlxuICAgICAgICAgICAgaWYgKCF2YWx1ZSkgcmV0dXJuICdudWxsJztcbiAgICAgICAgICAgIGdhcCArPSBpbmRlbnQ7XG4gICAgICAgICAgICBwYXJ0aWFsID0gW107XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIEFycmF5LmlzQXJyYXlcbiAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmFwcGx5KHZhbHVlKSA9PT0gJ1tvYmplY3QgQXJyYXldJykge1xuICAgICAgICAgICAgICAgIGxlbmd0aCA9IHZhbHVlLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgcGFydGlhbFtpXSA9IHN0cihpLCB2YWx1ZSkgfHwgJ251bGwnO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvLyBKb2luIGFsbCBvZiB0aGUgZWxlbWVudHMgdG9nZXRoZXIsIHNlcGFyYXRlZCB3aXRoIGNvbW1hcywgYW5kXG4gICAgICAgICAgICAgICAgLy8gd3JhcCB0aGVtIGluIGJyYWNrZXRzLlxuICAgICAgICAgICAgICAgIHYgPSBwYXJ0aWFsLmxlbmd0aCA9PT0gMCA/ICdbXScgOiBnYXAgP1xuICAgICAgICAgICAgICAgICAgICAnW1xcbicgKyBnYXAgKyBwYXJ0aWFsLmpvaW4oJyxcXG4nICsgZ2FwKSArICdcXG4nICsgbWluZCArICddJyA6XG4gICAgICAgICAgICAgICAgICAgICdbJyArIHBhcnRpYWwuam9pbignLCcpICsgJ10nO1xuICAgICAgICAgICAgICAgIGdhcCA9IG1pbmQ7XG4gICAgICAgICAgICAgICAgcmV0dXJuIHY7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIElmIHRoZSByZXBsYWNlciBpcyBhbiBhcnJheSwgdXNlIGl0IHRvIHNlbGVjdCB0aGUgbWVtYmVycyB0byBiZVxuICAgICAgICAgICAgLy8gc3RyaW5naWZpZWQuXG4gICAgICAgICAgICBpZiAocmVwICYmIHR5cGVvZiByZXAgPT09ICdvYmplY3QnKSB7XG4gICAgICAgICAgICAgICAgbGVuZ3RoID0gcmVwLmxlbmd0aDtcbiAgICAgICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbGVuZ3RoOyBpICs9IDEpIHtcbiAgICAgICAgICAgICAgICAgICAgayA9IHJlcFtpXTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBrID09PSAnc3RyaW5nJykge1xuICAgICAgICAgICAgICAgICAgICAgICAgdiA9IHN0cihrLCB2YWx1ZSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAodikge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHBhcnRpYWwucHVzaChxdW90ZShrKSArIChnYXAgPyAnOiAnIDogJzonKSArIHYpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgLy8gT3RoZXJ3aXNlLCBpdGVyYXRlIHRocm91Z2ggYWxsIG9mIHRoZSBrZXlzIGluIHRoZSBvYmplY3QuXG4gICAgICAgICAgICAgICAgZm9yIChrIGluIHZhbHVlKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodmFsdWUsIGspKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB2ID0gc3RyKGssIHZhbHVlKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2KSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFydGlhbC5wdXNoKHF1b3RlKGspICsgKGdhcCA/ICc6ICcgOiAnOicpICsgdik7XG4gICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBcbiAgICAgICAgLy8gSm9pbiBhbGwgb2YgdGhlIG1lbWJlciB0ZXh0cyB0b2dldGhlciwgc2VwYXJhdGVkIHdpdGggY29tbWFzLFxuICAgICAgICAvLyBhbmQgd3JhcCB0aGVtIGluIGJyYWNlcy5cblxuICAgICAgICB2ID0gcGFydGlhbC5sZW5ndGggPT09IDAgPyAne30nIDogZ2FwID9cbiAgICAgICAgICAgICd7XFxuJyArIGdhcCArIHBhcnRpYWwuam9pbignLFxcbicgKyBnYXApICsgJ1xcbicgKyBtaW5kICsgJ30nIDpcbiAgICAgICAgICAgICd7JyArIHBhcnRpYWwuam9pbignLCcpICsgJ30nO1xuICAgICAgICBnYXAgPSBtaW5kO1xuICAgICAgICByZXR1cm4gdjtcbiAgICB9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKHZhbHVlLCByZXBsYWNlciwgc3BhY2UpIHtcbiAgICB2YXIgaTtcbiAgICBnYXAgPSAnJztcbiAgICBpbmRlbnQgPSAnJztcbiAgICBcbiAgICAvLyBJZiB0aGUgc3BhY2UgcGFyYW1ldGVyIGlzIGEgbnVtYmVyLCBtYWtlIGFuIGluZGVudCBzdHJpbmcgY29udGFpbmluZyB0aGF0XG4gICAgLy8gbWFueSBzcGFjZXMuXG4gICAgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IHNwYWNlOyBpICs9IDEpIHtcbiAgICAgICAgICAgIGluZGVudCArPSAnICc7XG4gICAgICAgIH1cbiAgICB9XG4gICAgLy8gSWYgdGhlIHNwYWNlIHBhcmFtZXRlciBpcyBhIHN0cmluZywgaXQgd2lsbCBiZSB1c2VkIGFzIHRoZSBpbmRlbnQgc3RyaW5nLlxuICAgIGVsc2UgaWYgKHR5cGVvZiBzcGFjZSA9PT0gJ3N0cmluZycpIHtcbiAgICAgICAgaW5kZW50ID0gc3BhY2U7XG4gICAgfVxuXG4gICAgLy8gSWYgdGhlcmUgaXMgYSByZXBsYWNlciwgaXQgbXVzdCBiZSBhIGZ1bmN0aW9uIG9yIGFuIGFycmF5LlxuICAgIC8vIE90aGVyd2lzZSwgdGhyb3cgYW4gZXJyb3IuXG4gICAgcmVwID0gcmVwbGFjZXI7XG4gICAgaWYgKHJlcGxhY2VyICYmIHR5cGVvZiByZXBsYWNlciAhPT0gJ2Z1bmN0aW9uJ1xuICAgICYmICh0eXBlb2YgcmVwbGFjZXIgIT09ICdvYmplY3QnIHx8IHR5cGVvZiByZXBsYWNlci5sZW5ndGggIT09ICdudW1iZXInKSkge1xuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ0pTT04uc3RyaW5naWZ5Jyk7XG4gICAgfVxuICAgIFxuICAgIC8vIE1ha2UgYSBmYWtlIHJvb3Qgb2JqZWN0IGNvbnRhaW5pbmcgb3VyIHZhbHVlIHVuZGVyIHRoZSBrZXkgb2YgJycuXG4gICAgLy8gUmV0dXJuIHRoZSByZXN1bHQgb2Ygc3RyaW5naWZ5aW5nIHRoZSB2YWx1ZS5cbiAgICByZXR1cm4gc3RyKCcnLCB7Jyc6IHZhbHVlfSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L2pzb25pZnkvbGliL3N0cmluZ2lmeS5qc1xuLy8gbW9kdWxlIGlkID0gODhcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLypcbm9iamVjdC1hc3NpZ25cbihjKSBTaW5kcmUgU29yaHVzXG5AbGljZW5zZSBNSVRcbiovXG5cbid1c2Ugc3RyaWN0Jztcbi8qIGVzbGludC1kaXNhYmxlIG5vLXVudXNlZC12YXJzICovXG52YXIgZ2V0T3duUHJvcGVydHlTeW1ib2xzID0gT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scztcbnZhciBoYXNPd25Qcm9wZXJ0eSA9IE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHk7XG52YXIgcHJvcElzRW51bWVyYWJsZSA9IE9iamVjdC5wcm90b3R5cGUucHJvcGVydHlJc0VudW1lcmFibGU7XG5cbmZ1bmN0aW9uIHRvT2JqZWN0KHZhbCkge1xuXHRpZiAodmFsID09PSBudWxsIHx8IHZhbCA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0dGhyb3cgbmV3IFR5cGVFcnJvcignT2JqZWN0LmFzc2lnbiBjYW5ub3QgYmUgY2FsbGVkIHdpdGggbnVsbCBvciB1bmRlZmluZWQnKTtcblx0fVxuXG5cdHJldHVybiBPYmplY3QodmFsKTtcbn1cblxuZnVuY3Rpb24gc2hvdWxkVXNlTmF0aXZlKCkge1xuXHR0cnkge1xuXHRcdGlmICghT2JqZWN0LmFzc2lnbikge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIERldGVjdCBidWdneSBwcm9wZXJ0eSBlbnVtZXJhdGlvbiBvcmRlciBpbiBvbGRlciBWOCB2ZXJzaW9ucy5cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTQxMThcblx0XHR2YXIgdGVzdDEgPSBuZXcgU3RyaW5nKCdhYmMnKTsgIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tbmV3LXdyYXBwZXJzXG5cdFx0dGVzdDFbNV0gPSAnZGUnO1xuXHRcdGlmIChPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh0ZXN0MSlbMF0gPT09ICc1Jykge1xuXHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdH1cblxuXHRcdC8vIGh0dHBzOi8vYnVncy5jaHJvbWl1bS5vcmcvcC92OC9pc3N1ZXMvZGV0YWlsP2lkPTMwNTZcblx0XHR2YXIgdGVzdDIgPSB7fTtcblx0XHRmb3IgKHZhciBpID0gMDsgaSA8IDEwOyBpKyspIHtcblx0XHRcdHRlc3QyWydfJyArIFN0cmluZy5mcm9tQ2hhckNvZGUoaSldID0gaTtcblx0XHR9XG5cdFx0dmFyIG9yZGVyMiA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRlc3QyKS5tYXAoZnVuY3Rpb24gKG4pIHtcblx0XHRcdHJldHVybiB0ZXN0MltuXTtcblx0XHR9KTtcblx0XHRpZiAob3JkZXIyLmpvaW4oJycpICE9PSAnMDEyMzQ1Njc4OScpIHtcblx0XHRcdHJldHVybiBmYWxzZTtcblx0XHR9XG5cblx0XHQvLyBodHRwczovL2J1Z3MuY2hyb21pdW0ub3JnL3AvdjgvaXNzdWVzL2RldGFpbD9pZD0zMDU2XG5cdFx0dmFyIHRlc3QzID0ge307XG5cdFx0J2FiY2RlZmdoaWprbG1ub3BxcnN0Jy5zcGxpdCgnJykuZm9yRWFjaChmdW5jdGlvbiAobGV0dGVyKSB7XG5cdFx0XHR0ZXN0M1tsZXR0ZXJdID0gbGV0dGVyO1xuXHRcdH0pO1xuXHRcdGlmIChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LCB0ZXN0MykpLmpvaW4oJycpICE9PVxuXHRcdFx0XHQnYWJjZGVmZ2hpamtsbW5vcHFyc3QnKSB7XG5cdFx0XHRyZXR1cm4gZmFsc2U7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRydWU7XG5cdH0gY2F0Y2ggKGVycikge1xuXHRcdC8vIFdlIGRvbid0IGV4cGVjdCBhbnkgb2YgdGhlIGFib3ZlIHRvIHRocm93LCBidXQgYmV0dGVyIHRvIGJlIHNhZmUuXG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5cbm1vZHVsZS5leHBvcnRzID0gc2hvdWxkVXNlTmF0aXZlKCkgPyBPYmplY3QuYXNzaWduIDogZnVuY3Rpb24gKHRhcmdldCwgc291cmNlKSB7XG5cdHZhciBmcm9tO1xuXHR2YXIgdG8gPSB0b09iamVjdCh0YXJnZXQpO1xuXHR2YXIgc3ltYm9scztcblxuXHRmb3IgKHZhciBzID0gMTsgcyA8IGFyZ3VtZW50cy5sZW5ndGg7IHMrKykge1xuXHRcdGZyb20gPSBPYmplY3QoYXJndW1lbnRzW3NdKTtcblxuXHRcdGZvciAodmFyIGtleSBpbiBmcm9tKSB7XG5cdFx0XHRpZiAoaGFzT3duUHJvcGVydHkuY2FsbChmcm9tLCBrZXkpKSB7XG5cdFx0XHRcdHRvW2tleV0gPSBmcm9tW2tleV07XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKGdldE93blByb3BlcnR5U3ltYm9scykge1xuXHRcdFx0c3ltYm9scyA9IGdldE93blByb3BlcnR5U3ltYm9scyhmcm9tKTtcblx0XHRcdGZvciAodmFyIGkgPSAwOyBpIDwgc3ltYm9scy5sZW5ndGg7IGkrKykge1xuXHRcdFx0XHRpZiAocHJvcElzRW51bWVyYWJsZS5jYWxsKGZyb20sIHN5bWJvbHNbaV0pKSB7XG5cdFx0XHRcdFx0dG9bc3ltYm9sc1tpXV0gPSBmcm9tW3N5bWJvbHNbaV1dO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cblx0cmV0dXJuIHRvO1xufTtcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vfi9vYmplY3QtYXNzaWduL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA4OVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIndXNlIHN0cmljdCc7XG52YXIgc3RyaWN0VXJpRW5jb2RlID0gcmVxdWlyZSgnc3RyaWN0LXVyaS1lbmNvZGUnKTtcbnZhciBvYmplY3RBc3NpZ24gPSByZXF1aXJlKCdvYmplY3QtYXNzaWduJyk7XG5cbmZ1bmN0aW9uIGVuY29kZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHN3aXRjaCAob3B0cy5hcnJheUZvcm1hdCkge1xuXHRcdGNhc2UgJ2luZGV4Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSwgaW5kZXgpIHtcblx0XHRcdFx0cmV0dXJuIHZhbHVlID09PSBudWxsID8gW1xuXHRcdFx0XHRcdGVuY29kZShrZXksIG9wdHMpLFxuXHRcdFx0XHRcdCdbJyxcblx0XHRcdFx0XHRpbmRleCxcblx0XHRcdFx0XHQnXSdcblx0XHRcdFx0XS5qb2luKCcnKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnWycsXG5cdFx0XHRcdFx0ZW5jb2RlKGluZGV4LCBvcHRzKSxcblx0XHRcdFx0XHQnXT0nLFxuXHRcdFx0XHRcdGVuY29kZSh2YWx1ZSwgb3B0cylcblx0XHRcdFx0XS5qb2luKCcnKTtcblx0XHRcdH07XG5cblx0XHRjYXNlICdicmFja2V0Jzpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnW109Jyxcblx0XHRcdFx0XHRlbmNvZGUodmFsdWUsIG9wdHMpXG5cdFx0XHRcdF0uam9pbignJyk7XG5cdFx0XHR9O1xuXG5cdFx0ZGVmYXVsdDpcblx0XHRcdHJldHVybiBmdW5jdGlvbiAoa2V5LCB2YWx1ZSkge1xuXHRcdFx0XHRyZXR1cm4gdmFsdWUgPT09IG51bGwgPyBlbmNvZGUoa2V5LCBvcHRzKSA6IFtcblx0XHRcdFx0XHRlbmNvZGUoa2V5LCBvcHRzKSxcblx0XHRcdFx0XHQnPScsXG5cdFx0XHRcdFx0ZW5jb2RlKHZhbHVlLCBvcHRzKVxuXHRcdFx0XHRdLmpvaW4oJycpO1xuXHRcdFx0fTtcblx0fVxufVxuXG5mdW5jdGlvbiBwYXJzZXJGb3JBcnJheUZvcm1hdChvcHRzKSB7XG5cdHZhciByZXN1bHQ7XG5cblx0c3dpdGNoIChvcHRzLmFycmF5Rm9ybWF0KSB7XG5cdFx0Y2FzZSAnaW5kZXgnOlxuXHRcdFx0cmV0dXJuIGZ1bmN0aW9uIChrZXksIHZhbHVlLCBhY2N1bXVsYXRvcikge1xuXHRcdFx0XHRyZXN1bHQgPSAvXFxbKFxcZCopXFxdJC8uZXhlYyhrZXkpO1xuXG5cdFx0XHRcdGtleSA9IGtleS5yZXBsYWNlKC9cXFtcXGQqXFxdJC8sICcnKTtcblxuXHRcdFx0XHRpZiAoIXJlc3VsdCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSB2YWx1ZTtcblx0XHRcdFx0XHRyZXR1cm47XG5cdFx0XHRcdH1cblxuXHRcdFx0XHRpZiAoYWNjdW11bGF0b3Jba2V5XSA9PT0gdW5kZWZpbmVkKSB7XG5cdFx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IHt9O1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XVtyZXN1bHRbMV1dID0gdmFsdWU7XG5cdFx0XHR9O1xuXG5cdFx0Y2FzZSAnYnJhY2tldCc6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdHJlc3VsdCA9IC8oXFxbXFxdKSQvLmV4ZWMoa2V5KTtcblx0XHRcdFx0a2V5ID0ga2V5LnJlcGxhY2UoL1xcW1xcXSQvLCAnJyk7XG5cblx0XHRcdFx0aWYgKCFyZXN1bHQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9IGVsc2UgaWYgKGFjY3VtdWxhdG9yW2tleV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbdmFsdWVdO1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdGFjY3VtdWxhdG9yW2tleV0gPSBbXS5jb25jYXQoYWNjdW11bGF0b3Jba2V5XSwgdmFsdWUpO1xuXHRcdFx0fTtcblxuXHRcdGRlZmF1bHQ6XG5cdFx0XHRyZXR1cm4gZnVuY3Rpb24gKGtleSwgdmFsdWUsIGFjY3VtdWxhdG9yKSB7XG5cdFx0XHRcdGlmIChhY2N1bXVsYXRvcltrZXldID09PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRhY2N1bXVsYXRvcltrZXldID0gdmFsdWU7XG5cdFx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0XHR9XG5cblx0XHRcdFx0YWNjdW11bGF0b3Jba2V5XSA9IFtdLmNvbmNhdChhY2N1bXVsYXRvcltrZXldLCB2YWx1ZSk7XG5cdFx0XHR9O1xuXHR9XG59XG5cbmZ1bmN0aW9uIGVuY29kZSh2YWx1ZSwgb3B0cykge1xuXHRpZiAob3B0cy5lbmNvZGUpIHtcblx0XHRyZXR1cm4gb3B0cy5zdHJpY3QgPyBzdHJpY3RVcmlFbmNvZGUodmFsdWUpIDogZW5jb2RlVVJJQ29tcG9uZW50KHZhbHVlKTtcblx0fVxuXG5cdHJldHVybiB2YWx1ZTtcbn1cblxuZnVuY3Rpb24ga2V5c1NvcnRlcihpbnB1dCkge1xuXHRpZiAoQXJyYXkuaXNBcnJheShpbnB1dCkpIHtcblx0XHRyZXR1cm4gaW5wdXQuc29ydCgpO1xuXHR9IGVsc2UgaWYgKHR5cGVvZiBpbnB1dCA9PT0gJ29iamVjdCcpIHtcblx0XHRyZXR1cm4ga2V5c1NvcnRlcihPYmplY3Qua2V5cyhpbnB1dCkpLnNvcnQoZnVuY3Rpb24gKGEsIGIpIHtcblx0XHRcdHJldHVybiBOdW1iZXIoYSkgLSBOdW1iZXIoYik7XG5cdFx0fSkubWFwKGZ1bmN0aW9uIChrZXkpIHtcblx0XHRcdHJldHVybiBpbnB1dFtrZXldO1xuXHRcdH0pO1xuXHR9XG5cblx0cmV0dXJuIGlucHV0O1xufVxuXG5leHBvcnRzLmV4dHJhY3QgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBzdHIuc3BsaXQoJz8nKVsxXSB8fCAnJztcbn07XG5cbmV4cG9ydHMucGFyc2UgPSBmdW5jdGlvbiAoc3RyLCBvcHRzKSB7XG5cdG9wdHMgPSBvYmplY3RBc3NpZ24oe2FycmF5Rm9ybWF0OiAnbm9uZSd9LCBvcHRzKTtcblxuXHR2YXIgZm9ybWF0dGVyID0gcGFyc2VyRm9yQXJyYXlGb3JtYXQob3B0cyk7XG5cblx0Ly8gQ3JlYXRlIGFuIG9iamVjdCB3aXRoIG5vIHByb3RvdHlwZVxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vc2luZHJlc29yaHVzL3F1ZXJ5LXN0cmluZy9pc3N1ZXMvNDdcblx0dmFyIHJldCA9IE9iamVjdC5jcmVhdGUobnVsbCk7XG5cblx0aWYgKHR5cGVvZiBzdHIgIT09ICdzdHJpbmcnKSB7XG5cdFx0cmV0dXJuIHJldDtcblx0fVxuXG5cdHN0ciA9IHN0ci50cmltKCkucmVwbGFjZSgvXihcXD98I3wmKS8sICcnKTtcblxuXHRpZiAoIXN0cikge1xuXHRcdHJldHVybiByZXQ7XG5cdH1cblxuXHRzdHIuc3BsaXQoJyYnKS5mb3JFYWNoKGZ1bmN0aW9uIChwYXJhbSkge1xuXHRcdHZhciBwYXJ0cyA9IHBhcmFtLnJlcGxhY2UoL1xcKy9nLCAnICcpLnNwbGl0KCc9Jyk7XG5cdFx0Ly8gRmlyZWZveCAocHJlIDQwKSBkZWNvZGVzIGAlM0RgIHRvIGA9YFxuXHRcdC8vIGh0dHBzOi8vZ2l0aHViLmNvbS9zaW5kcmVzb3JodXMvcXVlcnktc3RyaW5nL3B1bGwvMzdcblx0XHR2YXIga2V5ID0gcGFydHMuc2hpZnQoKTtcblx0XHR2YXIgdmFsID0gcGFydHMubGVuZ3RoID4gMCA/IHBhcnRzLmpvaW4oJz0nKSA6IHVuZGVmaW5lZDtcblxuXHRcdC8vIG1pc3NpbmcgYD1gIHNob3VsZCBiZSBgbnVsbGA6XG5cdFx0Ly8gaHR0cDovL3czLm9yZy9UUi8yMDEyL1dELXVybC0yMDEyMDUyNC8jY29sbGVjdC11cmwtcGFyYW1ldGVyc1xuXHRcdHZhbCA9IHZhbCA9PT0gdW5kZWZpbmVkID8gbnVsbCA6IGRlY29kZVVSSUNvbXBvbmVudCh2YWwpO1xuXG5cdFx0Zm9ybWF0dGVyKGRlY29kZVVSSUNvbXBvbmVudChrZXkpLCB2YWwsIHJldCk7XG5cdH0pO1xuXG5cdHJldHVybiBPYmplY3Qua2V5cyhyZXQpLnNvcnQoKS5yZWR1Y2UoZnVuY3Rpb24gKHJlc3VsdCwga2V5KSB7XG5cdFx0dmFyIHZhbCA9IHJldFtrZXldO1xuXHRcdGlmIChCb29sZWFuKHZhbCkgJiYgdHlwZW9mIHZhbCA9PT0gJ29iamVjdCcgJiYgIUFycmF5LmlzQXJyYXkodmFsKSkge1xuXHRcdFx0Ly8gU29ydCBvYmplY3Qga2V5cywgbm90IHZhbHVlc1xuXHRcdFx0cmVzdWx0W2tleV0gPSBrZXlzU29ydGVyKHZhbCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJlc3VsdFtrZXldID0gdmFsO1xuXHRcdH1cblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH0sIE9iamVjdC5jcmVhdGUobnVsbCkpO1xufTtcblxuZXhwb3J0cy5zdHJpbmdpZnkgPSBmdW5jdGlvbiAob2JqLCBvcHRzKSB7XG5cdHZhciBkZWZhdWx0cyA9IHtcblx0XHRlbmNvZGU6IHRydWUsXG5cdFx0c3RyaWN0OiB0cnVlLFxuXHRcdGFycmF5Rm9ybWF0OiAnbm9uZSdcblx0fTtcblxuXHRvcHRzID0gb2JqZWN0QXNzaWduKGRlZmF1bHRzLCBvcHRzKTtcblxuXHR2YXIgZm9ybWF0dGVyID0gZW5jb2RlckZvckFycmF5Rm9ybWF0KG9wdHMpO1xuXG5cdHJldHVybiBvYmogPyBPYmplY3Qua2V5cyhvYmopLnNvcnQoKS5tYXAoZnVuY3Rpb24gKGtleSkge1xuXHRcdHZhciB2YWwgPSBvYmpba2V5XTtcblxuXHRcdGlmICh2YWwgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0cmV0dXJuICcnO1xuXHRcdH1cblxuXHRcdGlmICh2YWwgPT09IG51bGwpIHtcblx0XHRcdHJldHVybiBlbmNvZGUoa2V5LCBvcHRzKTtcblx0XHR9XG5cblx0XHRpZiAoQXJyYXkuaXNBcnJheSh2YWwpKSB7XG5cdFx0XHR2YXIgcmVzdWx0ID0gW107XG5cblx0XHRcdHZhbC5zbGljZSgpLmZvckVhY2goZnVuY3Rpb24gKHZhbDIpIHtcblx0XHRcdFx0aWYgKHZhbDIgPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdHJldHVybjtcblx0XHRcdFx0fVxuXG5cdFx0XHRcdHJlc3VsdC5wdXNoKGZvcm1hdHRlcihrZXksIHZhbDIsIHJlc3VsdC5sZW5ndGgpKTtcblx0XHRcdH0pO1xuXG5cdFx0XHRyZXR1cm4gcmVzdWx0LmpvaW4oJyYnKTtcblx0XHR9XG5cblx0XHRyZXR1cm4gZW5jb2RlKGtleSwgb3B0cykgKyAnPScgKyBlbmNvZGUodmFsLCBvcHRzKTtcblx0fSkuZmlsdGVyKGZ1bmN0aW9uICh4KSB7XG5cdFx0cmV0dXJuIHgubGVuZ3RoID4gMDtcblx0fSkuam9pbignJicpIDogJyc7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3F1ZXJ5LXN0cmluZy9pbmRleC5qc1xuLy8gbW9kdWxlIGlkID0gOTBcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiJ3VzZSBzdHJpY3QnO1xubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoc3RyKSB7XG5cdHJldHVybiBlbmNvZGVVUklDb21wb25lbnQoc3RyKS5yZXBsYWNlKC9bIScoKSpdL2csIGZ1bmN0aW9uIChjKSB7XG5cdFx0cmV0dXJuICclJyArIGMuY2hhckNvZGVBdCgwKS50b1N0cmluZygxNikudG9VcHBlckNhc2UoKTtcblx0fSk7XG59O1xuXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9+L3N0cmljdC11cmktZW5jb2RlL2luZGV4LmpzXG4vLyBtb2R1bGUgaWQgPSA5MVxuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIoZnVuY3Rpb24obmFjbCkge1xuJ3VzZSBzdHJpY3QnO1xuXG4vLyBQb3J0ZWQgaW4gMjAxNCBieSBEbWl0cnkgQ2hlc3RueWtoIGFuZCBEZXZpIE1hbmRpcmkuXG4vLyBQdWJsaWMgZG9tYWluLlxuLy9cbi8vIEltcGxlbWVudGF0aW9uIGRlcml2ZWQgZnJvbSBUd2VldE5hQ2wgdmVyc2lvbiAyMDE0MDQyNy5cbi8vIFNlZSBmb3IgZGV0YWlsczogaHR0cDovL3R3ZWV0bmFjbC5jci55cC50by9cblxudmFyIGdmID0gZnVuY3Rpb24oaW5pdCkge1xuICB2YXIgaSwgciA9IG5ldyBGbG9hdDY0QXJyYXkoMTYpO1xuICBpZiAoaW5pdCkgZm9yIChpID0gMDsgaSA8IGluaXQubGVuZ3RoOyBpKyspIHJbaV0gPSBpbml0W2ldO1xuICByZXR1cm4gcjtcbn07XG5cbi8vICBQbHVnZ2FibGUsIGluaXRpYWxpemVkIGluIGhpZ2gtbGV2ZWwgQVBJIGJlbG93LlxudmFyIHJhbmRvbWJ5dGVzID0gZnVuY3Rpb24oLyogeCwgbiAqLykgeyB0aHJvdyBuZXcgRXJyb3IoJ25vIFBSTkcnKTsgfTtcblxudmFyIF8wID0gbmV3IFVpbnQ4QXJyYXkoMTYpO1xudmFyIF85ID0gbmV3IFVpbnQ4QXJyYXkoMzIpOyBfOVswXSA9IDk7XG5cbnZhciBnZjAgPSBnZigpLFxuICAgIGdmMSA9IGdmKFsxXSksXG4gICAgXzEyMTY2NSA9IGdmKFsweGRiNDEsIDFdKSxcbiAgICBEID0gZ2YoWzB4NzhhMywgMHgxMzU5LCAweDRkY2EsIDB4NzVlYiwgMHhkOGFiLCAweDQxNDEsIDB4MGE0ZCwgMHgwMDcwLCAweGU4OTgsIDB4Nzc3OSwgMHg0MDc5LCAweDhjYzcsIDB4ZmU3MywgMHgyYjZmLCAweDZjZWUsIDB4NTIwM10pLFxuICAgIEQyID0gZ2YoWzB4ZjE1OSwgMHgyNmIyLCAweDliOTQsIDB4ZWJkNiwgMHhiMTU2LCAweDgyODMsIDB4MTQ5YSwgMHgwMGUwLCAweGQxMzAsIDB4ZWVmMywgMHg4MGYyLCAweDE5OGUsIDB4ZmNlNywgMHg1NmRmLCAweGQ5ZGMsIDB4MjQwNl0pLFxuICAgIFggPSBnZihbMHhkNTFhLCAweDhmMjUsIDB4MmQ2MCwgMHhjOTU2LCAweGE3YjIsIDB4OTUyNSwgMHhjNzYwLCAweDY5MmMsIDB4ZGM1YywgMHhmZGQ2LCAweGUyMzEsIDB4YzBhNCwgMHg1M2ZlLCAweGNkNmUsIDB4MzZkMywgMHgyMTY5XSksXG4gICAgWSA9IGdmKFsweDY2NTgsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjYsIDB4NjY2NiwgMHg2NjY2LCAweDY2NjZdKSxcbiAgICBJID0gZ2YoWzB4YTBiMCwgMHg0YTBlLCAweDFiMjcsIDB4YzRlZSwgMHhlNDc4LCAweGFkMmYsIDB4MTgwNiwgMHgyZjQzLCAweGQ3YTcsIDB4M2RmYiwgMHgwMDk5LCAweDJiNGQsIDB4ZGYwYiwgMHg0ZmMxLCAweDI0ODAsIDB4MmI4M10pO1xuXG5mdW5jdGlvbiB0czY0KHgsIGksIGgsIGwpIHtcbiAgeFtpXSAgID0gKGggPj4gMjQpICYgMHhmZjtcbiAgeFtpKzFdID0gKGggPj4gMTYpICYgMHhmZjtcbiAgeFtpKzJdID0gKGggPj4gIDgpICYgMHhmZjtcbiAgeFtpKzNdID0gaCAmIDB4ZmY7XG4gIHhbaSs0XSA9IChsID4+IDI0KSAgJiAweGZmO1xuICB4W2krNV0gPSAobCA+PiAxNikgICYgMHhmZjtcbiAgeFtpKzZdID0gKGwgPj4gIDgpICAmIDB4ZmY7XG4gIHhbaSs3XSA9IGwgJiAweGZmO1xufVxuXG5mdW5jdGlvbiB2bih4LCB4aSwgeSwgeWksIG4pIHtcbiAgdmFyIGksZCA9IDA7XG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIGQgfD0geFt4aStpXV55W3lpK2ldO1xuICByZXR1cm4gKDEgJiAoKGQgLSAxKSA+Pj4gOCkpIC0gMTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3ZlcmlmeV8xNih4LCB4aSwgeSwgeWkpIHtcbiAgcmV0dXJuIHZuKHgseGkseSx5aSwxNik7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b192ZXJpZnlfMzIoeCwgeGksIHksIHlpKSB7XG4gIHJldHVybiB2bih4LHhpLHkseWksMzIpO1xufVxuXG5mdW5jdGlvbiBjb3JlX3NhbHNhMjAobywgcCwgaywgYykge1xuICB2YXIgajAgID0gY1sgMF0gJiAweGZmIHwgKGNbIDFdICYgMHhmZik8PDggfCAoY1sgMl0gJiAweGZmKTw8MTYgfCAoY1sgM10gJiAweGZmKTw8MjQsXG4gICAgICBqMSAgPSBrWyAwXSAmIDB4ZmYgfCAoa1sgMV0gJiAweGZmKTw8OCB8IChrWyAyXSAmIDB4ZmYpPDwxNiB8IChrWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoyICA9IGtbIDRdICYgMHhmZiB8IChrWyA1XSAmIDB4ZmYpPDw4IHwgKGtbIDZdICYgMHhmZik8PDE2IHwgKGtbIDddICYgMHhmZik8PDI0LFxuICAgICAgajMgID0ga1sgOF0gJiAweGZmIHwgKGtbIDldICYgMHhmZik8PDggfCAoa1sxMF0gJiAweGZmKTw8MTYgfCAoa1sxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqNCAgPSBrWzEyXSAmIDB4ZmYgfCAoa1sxM10gJiAweGZmKTw8OCB8IChrWzE0XSAmIDB4ZmYpPDwxNiB8IChrWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo1ICA9IGNbIDRdICYgMHhmZiB8IChjWyA1XSAmIDB4ZmYpPDw4IHwgKGNbIDZdICYgMHhmZik8PDE2IHwgKGNbIDddICYgMHhmZik8PDI0LFxuICAgICAgajYgID0gcFsgMF0gJiAweGZmIHwgKHBbIDFdICYgMHhmZik8PDggfCAocFsgMl0gJiAweGZmKTw8MTYgfCAocFsgM10gJiAweGZmKTw8MjQsXG4gICAgICBqNyAgPSBwWyA0XSAmIDB4ZmYgfCAocFsgNV0gJiAweGZmKTw8OCB8IChwWyA2XSAmIDB4ZmYpPDwxNiB8IChwWyA3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo4ICA9IHBbIDhdICYgMHhmZiB8IChwWyA5XSAmIDB4ZmYpPDw4IHwgKHBbMTBdICYgMHhmZik8PDE2IHwgKHBbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajkgID0gcFsxMl0gJiAweGZmIHwgKHBbMTNdICYgMHhmZik8PDggfCAocFsxNF0gJiAweGZmKTw8MTYgfCAocFsxNV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTAgPSBjWyA4XSAmIDB4ZmYgfCAoY1sgOV0gJiAweGZmKTw8OCB8IChjWzEwXSAmIDB4ZmYpPDwxNiB8IChjWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMSA9IGtbMTZdICYgMHhmZiB8IChrWzE3XSAmIDB4ZmYpPDw4IHwgKGtbMThdICYgMHhmZik8PDE2IHwgKGtbMTldICYgMHhmZik8PDI0LFxuICAgICAgajEyID0ga1syMF0gJiAweGZmIHwgKGtbMjFdICYgMHhmZik8PDggfCAoa1syMl0gJiAweGZmKTw8MTYgfCAoa1syM10gJiAweGZmKTw8MjQsXG4gICAgICBqMTMgPSBrWzI0XSAmIDB4ZmYgfCAoa1syNV0gJiAweGZmKTw8OCB8IChrWzI2XSAmIDB4ZmYpPDwxNiB8IChrWzI3XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxNCA9IGtbMjhdICYgMHhmZiB8IChrWzI5XSAmIDB4ZmYpPDw4IHwgKGtbMzBdICYgMHhmZik8PDE2IHwgKGtbMzFdICYgMHhmZik8PDI0LFxuICAgICAgajE1ID0gY1sxMl0gJiAweGZmIHwgKGNbMTNdICYgMHhmZik8PDggfCAoY1sxNF0gJiAweGZmKTw8MTYgfCAoY1sxNV0gJiAweGZmKTw8MjQ7XG5cbiAgdmFyIHgwID0gajAsIHgxID0gajEsIHgyID0gajIsIHgzID0gajMsIHg0ID0gajQsIHg1ID0gajUsIHg2ID0gajYsIHg3ID0gajcsXG4gICAgICB4OCA9IGo4LCB4OSA9IGo5LCB4MTAgPSBqMTAsIHgxMSA9IGoxMSwgeDEyID0gajEyLCB4MTMgPSBqMTMsIHgxNCA9IGoxNCxcbiAgICAgIHgxNSA9IGoxNSwgdTtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IDIwOyBpICs9IDIpIHtcbiAgICB1ID0geDAgKyB4MTIgfCAwO1xuICAgIHg0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NCArIHgwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4NCB8IDA7XG4gICAgeDEyIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxMiArIHg4IHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDEgfCAwO1xuICAgIHg5IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4OSArIHg1IHwgMDtcbiAgICB4MTMgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgxMyArIHg5IHwgMDtcbiAgICB4MSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MSArIHgxMyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4NiB8IDA7XG4gICAgeDE0IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTQgKyB4MTAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxNCB8IDA7XG4gICAgeDYgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDYgKyB4MiB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDExIHwgMDtcbiAgICB4MyBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDMgKyB4MTUgfCAwO1xuICAgIHg3IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4NyArIHgzIHwgMDtcbiAgICB4MTEgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDExICsgeDcgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgwICsgeDMgfCAwO1xuICAgIHgxIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MSArIHgwIHwgMDtcbiAgICB4MiBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDIgKyB4MSB8IDA7XG4gICAgeDMgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDMgKyB4MiB8IDA7XG4gICAgeDAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4NSArIHg0IHwgMDtcbiAgICB4NiBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDYgKyB4NSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDYgfCAwO1xuICAgIHg0IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg0ICsgeDcgfCAwO1xuICAgIHg1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDEwICsgeDkgfCAwO1xuICAgIHgxMSBePSB1PDw3IHwgdT4+PigzMi03KTtcbiAgICB1ID0geDExICsgeDEwIHwgMDtcbiAgICB4OCBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDggKyB4MTEgfCAwO1xuICAgIHg5IF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHg5ICsgeDggfCAwO1xuICAgIHgxMCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxNSArIHgxNCB8IDA7XG4gICAgeDEyIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTIgKyB4MTUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDEyIHwgMDtcbiAgICB4MTQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDE0ICsgeDEzIHwgMDtcbiAgICB4MTUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcbiAgfVxuICAgeDAgPSAgeDAgKyAgajAgfCAwO1xuICAgeDEgPSAgeDEgKyAgajEgfCAwO1xuICAgeDIgPSAgeDIgKyAgajIgfCAwO1xuICAgeDMgPSAgeDMgKyAgajMgfCAwO1xuICAgeDQgPSAgeDQgKyAgajQgfCAwO1xuICAgeDUgPSAgeDUgKyAgajUgfCAwO1xuICAgeDYgPSAgeDYgKyAgajYgfCAwO1xuICAgeDcgPSAgeDcgKyAgajcgfCAwO1xuICAgeDggPSAgeDggKyAgajggfCAwO1xuICAgeDkgPSAgeDkgKyAgajkgfCAwO1xuICB4MTAgPSB4MTAgKyBqMTAgfCAwO1xuICB4MTEgPSB4MTEgKyBqMTEgfCAwO1xuICB4MTIgPSB4MTIgKyBqMTIgfCAwO1xuICB4MTMgPSB4MTMgKyBqMTMgfCAwO1xuICB4MTQgPSB4MTQgKyBqMTQgfCAwO1xuICB4MTUgPSB4MTUgKyBqMTUgfCAwO1xuXG4gIG9bIDBdID0geDAgPj4+ICAwICYgMHhmZjtcbiAgb1sgMV0gPSB4MCA+Pj4gIDggJiAweGZmO1xuICBvWyAyXSA9IHgwID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDNdID0geDAgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA0XSA9IHgxID4+PiAgMCAmIDB4ZmY7XG4gIG9bIDVdID0geDEgPj4+ICA4ICYgMHhmZjtcbiAgb1sgNl0gPSB4MSA+Pj4gMTYgJiAweGZmO1xuICBvWyA3XSA9IHgxID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sgOF0gPSB4MiA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgyID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTBdID0geDIgPj4+IDE2ICYgMHhmZjtcbiAgb1sxMV0gPSB4MiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDMgPj4+ICAwICYgMHhmZjtcbiAgb1sxM10gPSB4MyA+Pj4gIDggJiAweGZmO1xuICBvWzE0XSA9IHgzID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDMgPj4+IDI0ICYgMHhmZjtcblxuICBvWzE2XSA9IHg0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTddID0geDQgPj4+ICA4ICYgMHhmZjtcbiAgb1sxOF0gPSB4NCA+Pj4gMTYgJiAweGZmO1xuICBvWzE5XSA9IHg0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syMF0gPSB4NSA+Pj4gIDAgJiAweGZmO1xuICBvWzIxXSA9IHg1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMjJdID0geDUgPj4+IDE2ICYgMHhmZjtcbiAgb1syM10gPSB4NSA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjRdID0geDYgPj4+ICAwICYgMHhmZjtcbiAgb1syNV0gPSB4NiA+Pj4gIDggJiAweGZmO1xuICBvWzI2XSA9IHg2ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjddID0geDYgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI4XSA9IHg3ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjldID0geDcgPj4+ICA4ICYgMHhmZjtcbiAgb1szMF0gPSB4NyA+Pj4gMTYgJiAweGZmO1xuICBvWzMxXSA9IHg3ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1szMl0gPSB4OCA+Pj4gIDAgJiAweGZmO1xuICBvWzMzXSA9IHg4ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzRdID0geDggPj4+IDE2ICYgMHhmZjtcbiAgb1szNV0gPSB4OCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMzZdID0geDkgPj4+ICAwICYgMHhmZjtcbiAgb1szN10gPSB4OSA+Pj4gIDggJiAweGZmO1xuICBvWzM4XSA9IHg5ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMzldID0geDkgPj4+IDI0ICYgMHhmZjtcblxuICBvWzQwXSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWzQxXSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzQyXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzQzXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNDRdID0geDExID4+PiAgMCAmIDB4ZmY7XG4gIG9bNDVdID0geDExID4+PiAgOCAmIDB4ZmY7XG4gIG9bNDZdID0geDExID4+PiAxNiAmIDB4ZmY7XG4gIG9bNDddID0geDExID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s0OF0gPSB4MTIgPj4+ICAwICYgMHhmZjtcbiAgb1s0OV0gPSB4MTIgPj4+ICA4ICYgMHhmZjtcbiAgb1s1MF0gPSB4MTIgPj4+IDE2ICYgMHhmZjtcbiAgb1s1MV0gPSB4MTIgPj4+IDI0ICYgMHhmZjtcblxuICBvWzUyXSA9IHgxMyA+Pj4gIDAgJiAweGZmO1xuICBvWzUzXSA9IHgxMyA+Pj4gIDggJiAweGZmO1xuICBvWzU0XSA9IHgxMyA+Pj4gMTYgJiAweGZmO1xuICBvWzU1XSA9IHgxMyA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bNTZdID0geDE0ID4+PiAgMCAmIDB4ZmY7XG4gIG9bNTddID0geDE0ID4+PiAgOCAmIDB4ZmY7XG4gIG9bNThdID0geDE0ID4+PiAxNiAmIDB4ZmY7XG4gIG9bNTldID0geDE0ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1s2MF0gPSB4MTUgPj4+ICAwICYgMHhmZjtcbiAgb1s2MV0gPSB4MTUgPj4+ICA4ICYgMHhmZjtcbiAgb1s2Ml0gPSB4MTUgPj4+IDE2ICYgMHhmZjtcbiAgb1s2M10gPSB4MTUgPj4+IDI0ICYgMHhmZjtcbn1cblxuZnVuY3Rpb24gY29yZV9oc2Fsc2EyMChvLHAsayxjKSB7XG4gIHZhciBqMCAgPSBjWyAwXSAmIDB4ZmYgfCAoY1sgMV0gJiAweGZmKTw8OCB8IChjWyAyXSAmIDB4ZmYpPDwxNiB8IChjWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxICA9IGtbIDBdICYgMHhmZiB8IChrWyAxXSAmIDB4ZmYpPDw4IHwgKGtbIDJdICYgMHhmZik8PDE2IHwgKGtbIDNdICYgMHhmZik8PDI0LFxuICAgICAgajIgID0ga1sgNF0gJiAweGZmIHwgKGtbIDVdICYgMHhmZik8PDggfCAoa1sgNl0gJiAweGZmKTw8MTYgfCAoa1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqMyAgPSBrWyA4XSAmIDB4ZmYgfCAoa1sgOV0gJiAweGZmKTw8OCB8IChrWzEwXSAmIDB4ZmYpPDwxNiB8IChrWzExXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo0ICA9IGtbMTJdICYgMHhmZiB8IChrWzEzXSAmIDB4ZmYpPDw4IHwgKGtbMTRdICYgMHhmZik8PDE2IHwgKGtbMTVdICYgMHhmZik8PDI0LFxuICAgICAgajUgID0gY1sgNF0gJiAweGZmIHwgKGNbIDVdICYgMHhmZik8PDggfCAoY1sgNl0gJiAweGZmKTw8MTYgfCAoY1sgN10gJiAweGZmKTw8MjQsXG4gICAgICBqNiAgPSBwWyAwXSAmIDB4ZmYgfCAocFsgMV0gJiAweGZmKTw8OCB8IChwWyAyXSAmIDB4ZmYpPDwxNiB8IChwWyAzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGo3ICA9IHBbIDRdICYgMHhmZiB8IChwWyA1XSAmIDB4ZmYpPDw4IHwgKHBbIDZdICYgMHhmZik8PDE2IHwgKHBbIDddICYgMHhmZik8PDI0LFxuICAgICAgajggID0gcFsgOF0gJiAweGZmIHwgKHBbIDldICYgMHhmZik8PDggfCAocFsxMF0gJiAweGZmKTw8MTYgfCAocFsxMV0gJiAweGZmKTw8MjQsXG4gICAgICBqOSAgPSBwWzEyXSAmIDB4ZmYgfCAocFsxM10gJiAweGZmKTw8OCB8IChwWzE0XSAmIDB4ZmYpPDwxNiB8IChwWzE1XSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMCA9IGNbIDhdICYgMHhmZiB8IChjWyA5XSAmIDB4ZmYpPDw4IHwgKGNbMTBdICYgMHhmZik8PDE2IHwgKGNbMTFdICYgMHhmZik8PDI0LFxuICAgICAgajExID0ga1sxNl0gJiAweGZmIHwgKGtbMTddICYgMHhmZik8PDggfCAoa1sxOF0gJiAweGZmKTw8MTYgfCAoa1sxOV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTIgPSBrWzIwXSAmIDB4ZmYgfCAoa1syMV0gJiAweGZmKTw8OCB8IChrWzIyXSAmIDB4ZmYpPDwxNiB8IChrWzIzXSAmIDB4ZmYpPDwyNCxcbiAgICAgIGoxMyA9IGtbMjRdICYgMHhmZiB8IChrWzI1XSAmIDB4ZmYpPDw4IHwgKGtbMjZdICYgMHhmZik8PDE2IHwgKGtbMjddICYgMHhmZik8PDI0LFxuICAgICAgajE0ID0ga1syOF0gJiAweGZmIHwgKGtbMjldICYgMHhmZik8PDggfCAoa1szMF0gJiAweGZmKTw8MTYgfCAoa1szMV0gJiAweGZmKTw8MjQsXG4gICAgICBqMTUgPSBjWzEyXSAmIDB4ZmYgfCAoY1sxM10gJiAweGZmKTw8OCB8IChjWzE0XSAmIDB4ZmYpPDwxNiB8IChjWzE1XSAmIDB4ZmYpPDwyNDtcblxuICB2YXIgeDAgPSBqMCwgeDEgPSBqMSwgeDIgPSBqMiwgeDMgPSBqMywgeDQgPSBqNCwgeDUgPSBqNSwgeDYgPSBqNiwgeDcgPSBqNyxcbiAgICAgIHg4ID0gajgsIHg5ID0gajksIHgxMCA9IGoxMCwgeDExID0gajExLCB4MTIgPSBqMTIsIHgxMyA9IGoxMywgeDE0ID0gajE0LFxuICAgICAgeDE1ID0gajE1LCB1O1xuXG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMjA7IGkgKz0gMikge1xuICAgIHUgPSB4MCArIHgxMiB8IDA7XG4gICAgeDQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg0ICsgeDAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHg0IHwgMDtcbiAgICB4MTIgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDEyICsgeDggfCAwO1xuICAgIHgwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDUgKyB4MSB8IDA7XG4gICAgeDkgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHg5ICsgeDUgfCAwO1xuICAgIHgxMyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDEzICsgeDkgfCAwO1xuICAgIHgxIF49IHU8PDEzIHwgdT4+PigzMi0xMyk7XG4gICAgdSA9IHgxICsgeDEzIHwgMDtcbiAgICB4NSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHgxMCArIHg2IHwgMDtcbiAgICB4MTQgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxNCArIHgxMCB8IDA7XG4gICAgeDIgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHgyICsgeDE0IHwgMDtcbiAgICB4NiBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4NiArIHgyIHwgMDtcbiAgICB4MTAgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTUgKyB4MTEgfCAwO1xuICAgIHgzIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MyArIHgxNSB8IDA7XG4gICAgeDcgXj0gdTw8OSB8IHU+Pj4oMzItOSk7XG4gICAgdSA9IHg3ICsgeDMgfCAwO1xuICAgIHgxMSBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTEgKyB4NyB8IDA7XG4gICAgeDE1IF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDAgKyB4MyB8IDA7XG4gICAgeDEgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxICsgeDAgfCAwO1xuICAgIHgyIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MiArIHgxIHwgMDtcbiAgICB4MyBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MyArIHgyIHwgMDtcbiAgICB4MCBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuXG4gICAgdSA9IHg1ICsgeDQgfCAwO1xuICAgIHg2IF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4NiArIHg1IHwgMDtcbiAgICB4NyBePSB1PDw5IHwgdT4+PigzMi05KTtcbiAgICB1ID0geDcgKyB4NiB8IDA7XG4gICAgeDQgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDQgKyB4NyB8IDA7XG4gICAgeDUgXj0gdTw8MTggfCB1Pj4+KDMyLTE4KTtcblxuICAgIHUgPSB4MTAgKyB4OSB8IDA7XG4gICAgeDExIF49IHU8PDcgfCB1Pj4+KDMyLTcpO1xuICAgIHUgPSB4MTEgKyB4MTAgfCAwO1xuICAgIHg4IF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4OCArIHgxMSB8IDA7XG4gICAgeDkgXj0gdTw8MTMgfCB1Pj4+KDMyLTEzKTtcbiAgICB1ID0geDkgKyB4OCB8IDA7XG4gICAgeDEwIF49IHU8PDE4IHwgdT4+PigzMi0xOCk7XG5cbiAgICB1ID0geDE1ICsgeDE0IHwgMDtcbiAgICB4MTIgXj0gdTw8NyB8IHU+Pj4oMzItNyk7XG4gICAgdSA9IHgxMiArIHgxNSB8IDA7XG4gICAgeDEzIF49IHU8PDkgfCB1Pj4+KDMyLTkpO1xuICAgIHUgPSB4MTMgKyB4MTIgfCAwO1xuICAgIHgxNCBePSB1PDwxMyB8IHU+Pj4oMzItMTMpO1xuICAgIHUgPSB4MTQgKyB4MTMgfCAwO1xuICAgIHgxNSBePSB1PDwxOCB8IHU+Pj4oMzItMTgpO1xuICB9XG5cbiAgb1sgMF0gPSB4MCA+Pj4gIDAgJiAweGZmO1xuICBvWyAxXSA9IHgwID4+PiAgOCAmIDB4ZmY7XG4gIG9bIDJdID0geDAgPj4+IDE2ICYgMHhmZjtcbiAgb1sgM10gPSB4MCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bIDRdID0geDUgPj4+ICAwICYgMHhmZjtcbiAgb1sgNV0gPSB4NSA+Pj4gIDggJiAweGZmO1xuICBvWyA2XSA9IHg1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bIDddID0geDUgPj4+IDI0ICYgMHhmZjtcblxuICBvWyA4XSA9IHgxMCA+Pj4gIDAgJiAweGZmO1xuICBvWyA5XSA9IHgxMCA+Pj4gIDggJiAweGZmO1xuICBvWzEwXSA9IHgxMCA+Pj4gMTYgJiAweGZmO1xuICBvWzExXSA9IHgxMCA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMTJdID0geDE1ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMTNdID0geDE1ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMTRdID0geDE1ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMTVdID0geDE1ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1sxNl0gPSB4NiA+Pj4gIDAgJiAweGZmO1xuICBvWzE3XSA9IHg2ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMThdID0geDYgPj4+IDE2ICYgMHhmZjtcbiAgb1sxOV0gPSB4NiA+Pj4gMjQgJiAweGZmO1xuXG4gIG9bMjBdID0geDcgPj4+ICAwICYgMHhmZjtcbiAgb1syMV0gPSB4NyA+Pj4gIDggJiAweGZmO1xuICBvWzIyXSA9IHg3ID4+PiAxNiAmIDB4ZmY7XG4gIG9bMjNdID0geDcgPj4+IDI0ICYgMHhmZjtcblxuICBvWzI0XSA9IHg4ID4+PiAgMCAmIDB4ZmY7XG4gIG9bMjVdID0geDggPj4+ICA4ICYgMHhmZjtcbiAgb1syNl0gPSB4OCA+Pj4gMTYgJiAweGZmO1xuICBvWzI3XSA9IHg4ID4+PiAyNCAmIDB4ZmY7XG5cbiAgb1syOF0gPSB4OSA+Pj4gIDAgJiAweGZmO1xuICBvWzI5XSA9IHg5ID4+PiAgOCAmIDB4ZmY7XG4gIG9bMzBdID0geDkgPj4+IDE2ICYgMHhmZjtcbiAgb1szMV0gPSB4OSA+Pj4gMjQgJiAweGZmO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fY29yZV9zYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfc2Fsc2EyMChvdXQsaW5wLGssYyk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19jb3JlX2hzYWxzYTIwKG91dCxpbnAsayxjKSB7XG4gIGNvcmVfaHNhbHNhMjAob3V0LGlucCxrLGMpO1xufVxuXG52YXIgc2lnbWEgPSBuZXcgVWludDhBcnJheShbMTAxLCAxMjAsIDExMiwgOTcsIDExMCwgMTAwLCAzMiwgNTEsIDUwLCA0NSwgOTgsIDEyMSwgMTE2LCAxMDEsIDMyLCAxMDddKTtcbiAgICAgICAgICAgIC8vIFwiZXhwYW5kIDMyLWJ5dGUga1wiXG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IoYyxjcG9zLG0sbXBvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IG1bbXBvcytpXSBeIHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICAgIG1wb3MgKz0gNjQ7XG4gIH1cbiAgaWYgKGIgPiAwKSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IGI7IGkrKykgY1tjcG9zK2ldID0gbVttcG9zK2ldIF4geFtpXTtcbiAgfVxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxiLG4saykge1xuICB2YXIgeiA9IG5ldyBVaW50OEFycmF5KDE2KSwgeCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHUsIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB6W2ldID0gMDtcbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgeltpXSA9IG5baV07XG4gIHdoaWxlIChiID49IDY0KSB7XG4gICAgY3J5cHRvX2NvcmVfc2Fsc2EyMCh4LHosayxzaWdtYSk7XG4gICAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gICAgdSA9IDE7XG4gICAgZm9yIChpID0gODsgaSA8IDE2OyBpKyspIHtcbiAgICAgIHUgPSB1ICsgKHpbaV0gJiAweGZmKSB8IDA7XG4gICAgICB6W2ldID0gdSAmIDB4ZmY7XG4gICAgICB1ID4+Pj0gODtcbiAgICB9XG4gICAgYiAtPSA2NDtcbiAgICBjcG9zICs9IDY0O1xuICB9XG4gIGlmIChiID4gMCkge1xuICAgIGNyeXB0b19jb3JlX3NhbHNhMjAoeCx6LGssc2lnbWEpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBiOyBpKyspIGNbY3BvcytpXSA9IHhbaV07XG4gIH1cbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zdHJlYW0oYyxjcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwKGMsY3BvcyxkLHNuLHMpO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc3RyZWFtX3hvcihjLGNwb3MsbSxtcG9zLGQsbixrKSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fY29yZV9oc2Fsc2EyMChzLG4sayxzaWdtYSk7XG4gIHZhciBzbiA9IG5ldyBVaW50OEFycmF5KDgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDg7IGkrKykgc25baV0gPSBuW2krMTZdO1xuICByZXR1cm4gY3J5cHRvX3N0cmVhbV9zYWxzYTIwX3hvcihjLGNwb3MsbSxtcG9zLGQsc24scyk7XG59XG5cbi8qXG4qIFBvcnQgb2YgQW5kcmV3IE1vb24ncyBQb2x5MTMwNS1kb25uYS0xNi4gUHVibGljIGRvbWFpbi5cbiogaHR0cHM6Ly9naXRodWIuY29tL2Zsb29keWJlcnJ5L3BvbHkxMzA1LWRvbm5hXG4qL1xuXG52YXIgcG9seTEzMDUgPSBmdW5jdGlvbihrZXkpIHtcbiAgdGhpcy5idWZmZXIgPSBuZXcgVWludDhBcnJheSgxNik7XG4gIHRoaXMuciA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMuaCA9IG5ldyBVaW50MTZBcnJheSgxMCk7XG4gIHRoaXMucGFkID0gbmV3IFVpbnQxNkFycmF5KDgpO1xuICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgdGhpcy5maW4gPSAwO1xuXG4gIHZhciB0MCwgdDEsIHQyLCB0MywgdDQsIHQ1LCB0NiwgdDc7XG5cbiAgdDAgPSBrZXlbIDBdICYgMHhmZiB8IChrZXlbIDFdICYgMHhmZikgPDwgODsgdGhpcy5yWzBdID0gKCB0MCAgICAgICAgICAgICAgICAgICAgICkgJiAweDFmZmY7XG4gIHQxID0ga2V5WyAyXSAmIDB4ZmYgfCAoa2V5WyAzXSAmIDB4ZmYpIDw8IDg7IHRoaXMuclsxXSA9ICgodDAgPj4+IDEzKSB8ICh0MSA8PCAgMykpICYgMHgxZmZmO1xuICB0MiA9IGtleVsgNF0gJiAweGZmIHwgKGtleVsgNV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbMl0gPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWYwMztcbiAgdDMgPSBrZXlbIDZdICYgMHhmZiB8IChrZXlbIDddICYgMHhmZikgPDwgODsgdGhpcy5yWzNdID0gKCh0MiA+Pj4gIDcpIHwgKHQzIDw8ICA5KSkgJiAweDFmZmY7XG4gIHQ0ID0ga2V5WyA4XSAmIDB4ZmYgfCAoa2V5WyA5XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls0XSA9ICgodDMgPj4+ICA0KSB8ICh0NCA8PCAxMikpICYgMHgwMGZmO1xuICB0aGlzLnJbNV0gPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZlO1xuICB0NSA9IGtleVsxMF0gJiAweGZmIHwgKGtleVsxMV0gJiAweGZmKSA8PCA4OyB0aGlzLnJbNl0gPSAoKHQ0ID4+PiAxNCkgfCAodDUgPDwgIDIpKSAmIDB4MWZmZjtcbiAgdDYgPSBrZXlbMTJdICYgMHhmZiB8IChrZXlbMTNdICYgMHhmZikgPDwgODsgdGhpcy5yWzddID0gKCh0NSA+Pj4gMTEpIHwgKHQ2IDw8ICA1KSkgJiAweDFmODE7XG4gIHQ3ID0ga2V5WzE0XSAmIDB4ZmYgfCAoa2V5WzE1XSAmIDB4ZmYpIDw8IDg7IHRoaXMucls4XSA9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICB0aGlzLnJbOV0gPSAoKHQ3ID4+PiAgNSkpICYgMHgwMDdmO1xuXG4gIHRoaXMucGFkWzBdID0ga2V5WzE2XSAmIDB4ZmYgfCAoa2V5WzE3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzFdID0ga2V5WzE4XSAmIDB4ZmYgfCAoa2V5WzE5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzJdID0ga2V5WzIwXSAmIDB4ZmYgfCAoa2V5WzIxXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzNdID0ga2V5WzIyXSAmIDB4ZmYgfCAoa2V5WzIzXSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzRdID0ga2V5WzI0XSAmIDB4ZmYgfCAoa2V5WzI1XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzVdID0ga2V5WzI2XSAmIDB4ZmYgfCAoa2V5WzI3XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzZdID0ga2V5WzI4XSAmIDB4ZmYgfCAoa2V5WzI5XSAmIDB4ZmYpIDw8IDg7XG4gIHRoaXMucGFkWzddID0ga2V5WzMwXSAmIDB4ZmYgfCAoa2V5WzMxXSAmIDB4ZmYpIDw8IDg7XG59O1xuXG5wb2x5MTMwNS5wcm90b3R5cGUuYmxvY2tzID0gZnVuY3Rpb24obSwgbXBvcywgYnl0ZXMpIHtcbiAgdmFyIGhpYml0ID0gdGhpcy5maW4gPyAwIDogKDEgPDwgMTEpO1xuICB2YXIgdDAsIHQxLCB0MiwgdDMsIHQ0LCB0NSwgdDYsIHQ3LCBjO1xuICB2YXIgZDAsIGQxLCBkMiwgZDMsIGQ0LCBkNSwgZDYsIGQ3LCBkOCwgZDk7XG5cbiAgdmFyIGgwID0gdGhpcy5oWzBdLFxuICAgICAgaDEgPSB0aGlzLmhbMV0sXG4gICAgICBoMiA9IHRoaXMuaFsyXSxcbiAgICAgIGgzID0gdGhpcy5oWzNdLFxuICAgICAgaDQgPSB0aGlzLmhbNF0sXG4gICAgICBoNSA9IHRoaXMuaFs1XSxcbiAgICAgIGg2ID0gdGhpcy5oWzZdLFxuICAgICAgaDcgPSB0aGlzLmhbN10sXG4gICAgICBoOCA9IHRoaXMuaFs4XSxcbiAgICAgIGg5ID0gdGhpcy5oWzldO1xuXG4gIHZhciByMCA9IHRoaXMuclswXSxcbiAgICAgIHIxID0gdGhpcy5yWzFdLFxuICAgICAgcjIgPSB0aGlzLnJbMl0sXG4gICAgICByMyA9IHRoaXMuclszXSxcbiAgICAgIHI0ID0gdGhpcy5yWzRdLFxuICAgICAgcjUgPSB0aGlzLnJbNV0sXG4gICAgICByNiA9IHRoaXMucls2XSxcbiAgICAgIHI3ID0gdGhpcy5yWzddLFxuICAgICAgcjggPSB0aGlzLnJbOF0sXG4gICAgICByOSA9IHRoaXMucls5XTtcblxuICB3aGlsZSAoYnl0ZXMgPj0gMTYpIHtcbiAgICB0MCA9IG1bbXBvcysgMF0gJiAweGZmIHwgKG1bbXBvcysgMV0gJiAweGZmKSA8PCA4OyBoMCArPSAoIHQwICAgICAgICAgICAgICAgICAgICAgKSAmIDB4MWZmZjtcbiAgICB0MSA9IG1bbXBvcysgMl0gJiAweGZmIHwgKG1bbXBvcysgM10gJiAweGZmKSA8PCA4OyBoMSArPSAoKHQwID4+PiAxMykgfCAodDEgPDwgIDMpKSAmIDB4MWZmZjtcbiAgICB0MiA9IG1bbXBvcysgNF0gJiAweGZmIHwgKG1bbXBvcysgNV0gJiAweGZmKSA8PCA4OyBoMiArPSAoKHQxID4+PiAxMCkgfCAodDIgPDwgIDYpKSAmIDB4MWZmZjtcbiAgICB0MyA9IG1bbXBvcysgNl0gJiAweGZmIHwgKG1bbXBvcysgN10gJiAweGZmKSA8PCA4OyBoMyArPSAoKHQyID4+PiAgNykgfCAodDMgPDwgIDkpKSAmIDB4MWZmZjtcbiAgICB0NCA9IG1bbXBvcysgOF0gJiAweGZmIHwgKG1bbXBvcysgOV0gJiAweGZmKSA8PCA4OyBoNCArPSAoKHQzID4+PiAgNCkgfCAodDQgPDwgMTIpKSAmIDB4MWZmZjtcbiAgICBoNSArPSAoKHQ0ID4+PiAgMSkpICYgMHgxZmZmO1xuICAgIHQ1ID0gbVttcG9zKzEwXSAmIDB4ZmYgfCAobVttcG9zKzExXSAmIDB4ZmYpIDw8IDg7IGg2ICs9ICgodDQgPj4+IDE0KSB8ICh0NSA8PCAgMikpICYgMHgxZmZmO1xuICAgIHQ2ID0gbVttcG9zKzEyXSAmIDB4ZmYgfCAobVttcG9zKzEzXSAmIDB4ZmYpIDw8IDg7IGg3ICs9ICgodDUgPj4+IDExKSB8ICh0NiA8PCAgNSkpICYgMHgxZmZmO1xuICAgIHQ3ID0gbVttcG9zKzE0XSAmIDB4ZmYgfCAobVttcG9zKzE1XSAmIDB4ZmYpIDw8IDg7IGg4ICs9ICgodDYgPj4+ICA4KSB8ICh0NyA8PCAgOCkpICYgMHgxZmZmO1xuICAgIGg5ICs9ICgodDcgPj4+IDUpKSB8IGhpYml0O1xuXG4gICAgYyA9IDA7XG5cbiAgICBkMCA9IGM7XG4gICAgZDAgKz0gaDAgKiByMDtcbiAgICBkMCArPSBoMSAqICg1ICogcjkpO1xuICAgIGQwICs9IGgyICogKDUgKiByOCk7XG4gICAgZDAgKz0gaDMgKiAoNSAqIHI3KTtcbiAgICBkMCArPSBoNCAqICg1ICogcjYpO1xuICAgIGMgPSAoZDAgPj4+IDEzKTsgZDAgJj0gMHgxZmZmO1xuICAgIGQwICs9IGg1ICogKDUgKiByNSk7XG4gICAgZDAgKz0gaDYgKiAoNSAqIHI0KTtcbiAgICBkMCArPSBoNyAqICg1ICogcjMpO1xuICAgIGQwICs9IGg4ICogKDUgKiByMik7XG4gICAgZDAgKz0gaDkgKiAoNSAqIHIxKTtcbiAgICBjICs9IChkMCA+Pj4gMTMpOyBkMCAmPSAweDFmZmY7XG5cbiAgICBkMSA9IGM7XG4gICAgZDEgKz0gaDAgKiByMTtcbiAgICBkMSArPSBoMSAqIHIwO1xuICAgIGQxICs9IGgyICogKDUgKiByOSk7XG4gICAgZDEgKz0gaDMgKiAoNSAqIHI4KTtcbiAgICBkMSArPSBoNCAqICg1ICogcjcpO1xuICAgIGMgPSAoZDEgPj4+IDEzKTsgZDEgJj0gMHgxZmZmO1xuICAgIGQxICs9IGg1ICogKDUgKiByNik7XG4gICAgZDEgKz0gaDYgKiAoNSAqIHI1KTtcbiAgICBkMSArPSBoNyAqICg1ICogcjQpO1xuICAgIGQxICs9IGg4ICogKDUgKiByMyk7XG4gICAgZDEgKz0gaDkgKiAoNSAqIHIyKTtcbiAgICBjICs9IChkMSA+Pj4gMTMpOyBkMSAmPSAweDFmZmY7XG5cbiAgICBkMiA9IGM7XG4gICAgZDIgKz0gaDAgKiByMjtcbiAgICBkMiArPSBoMSAqIHIxO1xuICAgIGQyICs9IGgyICogcjA7XG4gICAgZDIgKz0gaDMgKiAoNSAqIHI5KTtcbiAgICBkMiArPSBoNCAqICg1ICogcjgpO1xuICAgIGMgPSAoZDIgPj4+IDEzKTsgZDIgJj0gMHgxZmZmO1xuICAgIGQyICs9IGg1ICogKDUgKiByNyk7XG4gICAgZDIgKz0gaDYgKiAoNSAqIHI2KTtcbiAgICBkMiArPSBoNyAqICg1ICogcjUpO1xuICAgIGQyICs9IGg4ICogKDUgKiByNCk7XG4gICAgZDIgKz0gaDkgKiAoNSAqIHIzKTtcbiAgICBjICs9IChkMiA+Pj4gMTMpOyBkMiAmPSAweDFmZmY7XG5cbiAgICBkMyA9IGM7XG4gICAgZDMgKz0gaDAgKiByMztcbiAgICBkMyArPSBoMSAqIHIyO1xuICAgIGQzICs9IGgyICogcjE7XG4gICAgZDMgKz0gaDMgKiByMDtcbiAgICBkMyArPSBoNCAqICg1ICogcjkpO1xuICAgIGMgPSAoZDMgPj4+IDEzKTsgZDMgJj0gMHgxZmZmO1xuICAgIGQzICs9IGg1ICogKDUgKiByOCk7XG4gICAgZDMgKz0gaDYgKiAoNSAqIHI3KTtcbiAgICBkMyArPSBoNyAqICg1ICogcjYpO1xuICAgIGQzICs9IGg4ICogKDUgKiByNSk7XG4gICAgZDMgKz0gaDkgKiAoNSAqIHI0KTtcbiAgICBjICs9IChkMyA+Pj4gMTMpOyBkMyAmPSAweDFmZmY7XG5cbiAgICBkNCA9IGM7XG4gICAgZDQgKz0gaDAgKiByNDtcbiAgICBkNCArPSBoMSAqIHIzO1xuICAgIGQ0ICs9IGgyICogcjI7XG4gICAgZDQgKz0gaDMgKiByMTtcbiAgICBkNCArPSBoNCAqIHIwO1xuICAgIGMgPSAoZDQgPj4+IDEzKTsgZDQgJj0gMHgxZmZmO1xuICAgIGQ0ICs9IGg1ICogKDUgKiByOSk7XG4gICAgZDQgKz0gaDYgKiAoNSAqIHI4KTtcbiAgICBkNCArPSBoNyAqICg1ICogcjcpO1xuICAgIGQ0ICs9IGg4ICogKDUgKiByNik7XG4gICAgZDQgKz0gaDkgKiAoNSAqIHI1KTtcbiAgICBjICs9IChkNCA+Pj4gMTMpOyBkNCAmPSAweDFmZmY7XG5cbiAgICBkNSA9IGM7XG4gICAgZDUgKz0gaDAgKiByNTtcbiAgICBkNSArPSBoMSAqIHI0O1xuICAgIGQ1ICs9IGgyICogcjM7XG4gICAgZDUgKz0gaDMgKiByMjtcbiAgICBkNSArPSBoNCAqIHIxO1xuICAgIGMgPSAoZDUgPj4+IDEzKTsgZDUgJj0gMHgxZmZmO1xuICAgIGQ1ICs9IGg1ICogcjA7XG4gICAgZDUgKz0gaDYgKiAoNSAqIHI5KTtcbiAgICBkNSArPSBoNyAqICg1ICogcjgpO1xuICAgIGQ1ICs9IGg4ICogKDUgKiByNyk7XG4gICAgZDUgKz0gaDkgKiAoNSAqIHI2KTtcbiAgICBjICs9IChkNSA+Pj4gMTMpOyBkNSAmPSAweDFmZmY7XG5cbiAgICBkNiA9IGM7XG4gICAgZDYgKz0gaDAgKiByNjtcbiAgICBkNiArPSBoMSAqIHI1O1xuICAgIGQ2ICs9IGgyICogcjQ7XG4gICAgZDYgKz0gaDMgKiByMztcbiAgICBkNiArPSBoNCAqIHIyO1xuICAgIGMgPSAoZDYgPj4+IDEzKTsgZDYgJj0gMHgxZmZmO1xuICAgIGQ2ICs9IGg1ICogcjE7XG4gICAgZDYgKz0gaDYgKiByMDtcbiAgICBkNiArPSBoNyAqICg1ICogcjkpO1xuICAgIGQ2ICs9IGg4ICogKDUgKiByOCk7XG4gICAgZDYgKz0gaDkgKiAoNSAqIHI3KTtcbiAgICBjICs9IChkNiA+Pj4gMTMpOyBkNiAmPSAweDFmZmY7XG5cbiAgICBkNyA9IGM7XG4gICAgZDcgKz0gaDAgKiByNztcbiAgICBkNyArPSBoMSAqIHI2O1xuICAgIGQ3ICs9IGgyICogcjU7XG4gICAgZDcgKz0gaDMgKiByNDtcbiAgICBkNyArPSBoNCAqIHIzO1xuICAgIGMgPSAoZDcgPj4+IDEzKTsgZDcgJj0gMHgxZmZmO1xuICAgIGQ3ICs9IGg1ICogcjI7XG4gICAgZDcgKz0gaDYgKiByMTtcbiAgICBkNyArPSBoNyAqIHIwO1xuICAgIGQ3ICs9IGg4ICogKDUgKiByOSk7XG4gICAgZDcgKz0gaDkgKiAoNSAqIHI4KTtcbiAgICBjICs9IChkNyA+Pj4gMTMpOyBkNyAmPSAweDFmZmY7XG5cbiAgICBkOCA9IGM7XG4gICAgZDggKz0gaDAgKiByODtcbiAgICBkOCArPSBoMSAqIHI3O1xuICAgIGQ4ICs9IGgyICogcjY7XG4gICAgZDggKz0gaDMgKiByNTtcbiAgICBkOCArPSBoNCAqIHI0O1xuICAgIGMgPSAoZDggPj4+IDEzKTsgZDggJj0gMHgxZmZmO1xuICAgIGQ4ICs9IGg1ICogcjM7XG4gICAgZDggKz0gaDYgKiByMjtcbiAgICBkOCArPSBoNyAqIHIxO1xuICAgIGQ4ICs9IGg4ICogcjA7XG4gICAgZDggKz0gaDkgKiAoNSAqIHI5KTtcbiAgICBjICs9IChkOCA+Pj4gMTMpOyBkOCAmPSAweDFmZmY7XG5cbiAgICBkOSA9IGM7XG4gICAgZDkgKz0gaDAgKiByOTtcbiAgICBkOSArPSBoMSAqIHI4O1xuICAgIGQ5ICs9IGgyICogcjc7XG4gICAgZDkgKz0gaDMgKiByNjtcbiAgICBkOSArPSBoNCAqIHI1O1xuICAgIGMgPSAoZDkgPj4+IDEzKTsgZDkgJj0gMHgxZmZmO1xuICAgIGQ5ICs9IGg1ICogcjQ7XG4gICAgZDkgKz0gaDYgKiByMztcbiAgICBkOSArPSBoNyAqIHIyO1xuICAgIGQ5ICs9IGg4ICogcjE7XG4gICAgZDkgKz0gaDkgKiByMDtcbiAgICBjICs9IChkOSA+Pj4gMTMpOyBkOSAmPSAweDFmZmY7XG5cbiAgICBjID0gKCgoYyA8PCAyKSArIGMpKSB8IDA7XG4gICAgYyA9IChjICsgZDApIHwgMDtcbiAgICBkMCA9IGMgJiAweDFmZmY7XG4gICAgYyA9IChjID4+PiAxMyk7XG4gICAgZDEgKz0gYztcblxuICAgIGgwID0gZDA7XG4gICAgaDEgPSBkMTtcbiAgICBoMiA9IGQyO1xuICAgIGgzID0gZDM7XG4gICAgaDQgPSBkNDtcbiAgICBoNSA9IGQ1O1xuICAgIGg2ID0gZDY7XG4gICAgaDcgPSBkNztcbiAgICBoOCA9IGQ4O1xuICAgIGg5ID0gZDk7XG5cbiAgICBtcG9zICs9IDE2O1xuICAgIGJ5dGVzIC09IDE2O1xuICB9XG4gIHRoaXMuaFswXSA9IGgwO1xuICB0aGlzLmhbMV0gPSBoMTtcbiAgdGhpcy5oWzJdID0gaDI7XG4gIHRoaXMuaFszXSA9IGgzO1xuICB0aGlzLmhbNF0gPSBoNDtcbiAgdGhpcy5oWzVdID0gaDU7XG4gIHRoaXMuaFs2XSA9IGg2O1xuICB0aGlzLmhbN10gPSBoNztcbiAgdGhpcy5oWzhdID0gaDg7XG4gIHRoaXMuaFs5XSA9IGg5O1xufTtcblxucG9seTEzMDUucHJvdG90eXBlLmZpbmlzaCA9IGZ1bmN0aW9uKG1hYywgbWFjcG9zKSB7XG4gIHZhciBnID0gbmV3IFVpbnQxNkFycmF5KDEwKTtcbiAgdmFyIGMsIG1hc2ssIGYsIGk7XG5cbiAgaWYgKHRoaXMubGVmdG92ZXIpIHtcbiAgICBpID0gdGhpcy5sZWZ0b3ZlcjtcbiAgICB0aGlzLmJ1ZmZlcltpKytdID0gMTtcbiAgICBmb3IgKDsgaSA8IDE2OyBpKyspIHRoaXMuYnVmZmVyW2ldID0gMDtcbiAgICB0aGlzLmZpbiA9IDE7XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgfVxuXG4gIGMgPSB0aGlzLmhbMV0gPj4+IDEzO1xuICB0aGlzLmhbMV0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAyOyBpIDwgMTA7IGkrKykge1xuICAgIHRoaXMuaFtpXSArPSBjO1xuICAgIGMgPSB0aGlzLmhbaV0gPj4+IDEzO1xuICAgIHRoaXMuaFtpXSAmPSAweDFmZmY7XG4gIH1cbiAgdGhpcy5oWzBdICs9IChjICogNSk7XG4gIGMgPSB0aGlzLmhbMF0gPj4+IDEzO1xuICB0aGlzLmhbMF0gJj0gMHgxZmZmO1xuICB0aGlzLmhbMV0gKz0gYztcbiAgYyA9IHRoaXMuaFsxXSA+Pj4gMTM7XG4gIHRoaXMuaFsxXSAmPSAweDFmZmY7XG4gIHRoaXMuaFsyXSArPSBjO1xuXG4gIGdbMF0gPSB0aGlzLmhbMF0gKyA1O1xuICBjID0gZ1swXSA+Pj4gMTM7XG4gIGdbMF0gJj0gMHgxZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgMTA7IGkrKykge1xuICAgIGdbaV0gPSB0aGlzLmhbaV0gKyBjO1xuICAgIGMgPSBnW2ldID4+PiAxMztcbiAgICBnW2ldICY9IDB4MWZmZjtcbiAgfVxuICBnWzldIC09ICgxIDw8IDEzKTtcblxuICBtYXNrID0gKGMgXiAxKSAtIDE7XG4gIGZvciAoaSA9IDA7IGkgPCAxMDsgaSsrKSBnW2ldICY9IG1hc2s7XG4gIG1hc2sgPSB+bWFzaztcbiAgZm9yIChpID0gMDsgaSA8IDEwOyBpKyspIHRoaXMuaFtpXSA9ICh0aGlzLmhbaV0gJiBtYXNrKSB8IGdbaV07XG5cbiAgdGhpcy5oWzBdID0gKCh0aGlzLmhbMF0gICAgICAgKSB8ICh0aGlzLmhbMV0gPDwgMTMpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbMV0gPSAoKHRoaXMuaFsxXSA+Pj4gIDMpIHwgKHRoaXMuaFsyXSA8PCAxMCkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG4gIHRoaXMuaFsyXSA9ICgodGhpcy5oWzJdID4+PiAgNikgfCAodGhpcy5oWzNdIDw8ICA3KSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzNdID0gKCh0aGlzLmhbM10gPj4+ICA5KSB8ICh0aGlzLmhbNF0gPDwgIDQpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbNF0gPSAoKHRoaXMuaFs0XSA+Pj4gMTIpIHwgKHRoaXMuaFs1XSA8PCAgMSkgfCAodGhpcy5oWzZdIDw8IDE0KSkgJiAweGZmZmY7XG4gIHRoaXMuaFs1XSA9ICgodGhpcy5oWzZdID4+PiAgMikgfCAodGhpcy5oWzddIDw8IDExKSAgICAgICAgICAgICAgICAgICAgKSAmIDB4ZmZmZjtcbiAgdGhpcy5oWzZdID0gKCh0aGlzLmhbN10gPj4+ICA1KSB8ICh0aGlzLmhbOF0gPDwgIDgpICAgICAgICAgICAgICAgICAgICApICYgMHhmZmZmO1xuICB0aGlzLmhbN10gPSAoKHRoaXMuaFs4XSA+Pj4gIDgpIHwgKHRoaXMuaFs5XSA8PCAgNSkgICAgICAgICAgICAgICAgICAgICkgJiAweGZmZmY7XG5cbiAgZiA9IHRoaXMuaFswXSArIHRoaXMucGFkWzBdO1xuICB0aGlzLmhbMF0gPSBmICYgMHhmZmZmO1xuICBmb3IgKGkgPSAxOyBpIDwgODsgaSsrKSB7XG4gICAgZiA9ICgoKHRoaXMuaFtpXSArIHRoaXMucGFkW2ldKSB8IDApICsgKGYgPj4+IDE2KSkgfCAwO1xuICAgIHRoaXMuaFtpXSA9IGYgJiAweGZmZmY7XG4gIH1cblxuICBtYWNbbWFjcG9zKyAwXSA9ICh0aGlzLmhbMF0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgMV0gPSAodGhpcy5oWzBdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDJdID0gKHRoaXMuaFsxXSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyAzXSA9ICh0aGlzLmhbMV0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysgNF0gPSAodGhpcy5oWzJdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDVdID0gKHRoaXMuaFsyXSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA2XSA9ICh0aGlzLmhbM10gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysgN10gPSAodGhpcy5oWzNdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrIDhdID0gKHRoaXMuaFs0XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKyA5XSA9ICh0aGlzLmhbNF0gPj4+IDgpICYgMHhmZjtcbiAgbWFjW21hY3BvcysxMF0gPSAodGhpcy5oWzVdID4+PiAwKSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTFdID0gKHRoaXMuaFs1XSA+Pj4gOCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzEyXSA9ICh0aGlzLmhbNl0gPj4+IDApICYgMHhmZjtcbiAgbWFjW21hY3BvcysxM10gPSAodGhpcy5oWzZdID4+PiA4KSAmIDB4ZmY7XG4gIG1hY1ttYWNwb3MrMTRdID0gKHRoaXMuaFs3XSA+Pj4gMCkgJiAweGZmO1xuICBtYWNbbWFjcG9zKzE1XSA9ICh0aGlzLmhbN10gPj4+IDgpICYgMHhmZjtcbn07XG5cbnBvbHkxMzA1LnByb3RvdHlwZS51cGRhdGUgPSBmdW5jdGlvbihtLCBtcG9zLCBieXRlcykge1xuICB2YXIgaSwgd2FudDtcblxuICBpZiAodGhpcy5sZWZ0b3Zlcikge1xuICAgIHdhbnQgPSAoMTYgLSB0aGlzLmxlZnRvdmVyKTtcbiAgICBpZiAod2FudCA+IGJ5dGVzKVxuICAgICAgd2FudCA9IGJ5dGVzO1xuICAgIGZvciAoaSA9IDA7IGkgPCB3YW50OyBpKyspXG4gICAgICB0aGlzLmJ1ZmZlclt0aGlzLmxlZnRvdmVyICsgaV0gPSBtW21wb3MraV07XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgdGhpcy5sZWZ0b3ZlciArPSB3YW50O1xuICAgIGlmICh0aGlzLmxlZnRvdmVyIDwgMTYpXG4gICAgICByZXR1cm47XG4gICAgdGhpcy5ibG9ja3ModGhpcy5idWZmZXIsIDAsIDE2KTtcbiAgICB0aGlzLmxlZnRvdmVyID0gMDtcbiAgfVxuXG4gIGlmIChieXRlcyA+PSAxNikge1xuICAgIHdhbnQgPSBieXRlcyAtIChieXRlcyAlIDE2KTtcbiAgICB0aGlzLmJsb2NrcyhtLCBtcG9zLCB3YW50KTtcbiAgICBtcG9zICs9IHdhbnQ7XG4gICAgYnl0ZXMgLT0gd2FudDtcbiAgfVxuXG4gIGlmIChieXRlcykge1xuICAgIGZvciAoaSA9IDA7IGkgPCBieXRlczsgaSsrKVxuICAgICAgdGhpcy5idWZmZXJbdGhpcy5sZWZ0b3ZlciArIGldID0gbVttcG9zK2ldO1xuICAgIHRoaXMubGVmdG92ZXIgKz0gYnl0ZXM7XG4gIH1cbn07XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aChvdXQsIG91dHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgcyA9IG5ldyBwb2x5MTMwNShrKTtcbiAgcy51cGRhdGUobSwgbXBvcywgbik7XG4gIHMuZmluaXNoKG91dCwgb3V0cG9zKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19vbmV0aW1lYXV0aF92ZXJpZnkoaCwgaHBvcywgbSwgbXBvcywgbiwgaykge1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDE2KTtcbiAgY3J5cHRvX29uZXRpbWVhdXRoKHgsMCxtLG1wb3MsbixrKTtcbiAgcmV0dXJuIGNyeXB0b192ZXJpZnlfMTYoaCxocG9zLHgsMCk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zZWNyZXRib3goYyxtLGQsbixrKSB7XG4gIHZhciBpO1xuICBpZiAoZCA8IDMyKSByZXR1cm4gLTE7XG4gIGNyeXB0b19zdHJlYW1feG9yKGMsMCxtLDAsZCxuLGspO1xuICBjcnlwdG9fb25ldGltZWF1dGgoYywgMTYsIGMsIDMyLCBkIC0gMzIsIGMpO1xuICBmb3IgKGkgPSAwOyBpIDwgMTY7IGkrKykgY1tpXSA9IDA7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2VjcmV0Ym94X29wZW4obSxjLGQsbixrKSB7XG4gIHZhciBpO1xuICB2YXIgeCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgaWYgKGQgPCAzMikgcmV0dXJuIC0xO1xuICBjcnlwdG9fc3RyZWFtKHgsMCwzMixuLGspO1xuICBpZiAoY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeShjLCAxNixjLCAzMixkIC0gMzIseCkgIT09IDApIHJldHVybiAtMTtcbiAgY3J5cHRvX3N0cmVhbV94b3IobSwwLGMsMCxkLG4sayk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSBtW2ldID0gMDtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIHNldDI1NTE5KHIsIGEpIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSByW2ldID0gYVtpXXwwO1xufVxuXG5mdW5jdGlvbiBjYXIyNTUxOShvKSB7XG4gIHZhciBpLCB2LCBjID0gMTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICB2ID0gb1tpXSArIGMgKyA2NTUzNTtcbiAgICBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpO1xuICAgIG9baV0gPSB2IC0gYyAqIDY1NTM2O1xuICB9XG4gIG9bMF0gKz0gYy0xICsgMzcgKiAoYy0xKTtcbn1cblxuZnVuY3Rpb24gc2VsMjU1MTkocCwgcSwgYikge1xuICB2YXIgdCwgYyA9IH4oYi0xKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgdCA9IGMgJiAocFtpXSBeIHFbaV0pO1xuICAgIHBbaV0gXj0gdDtcbiAgICBxW2ldIF49IHQ7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGksIGosIGI7XG4gIHZhciBtID0gZ2YoKSwgdCA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB0W2ldID0gbltpXTtcbiAgY2FyMjU1MTkodCk7XG4gIGNhcjI1NTE5KHQpO1xuICBjYXIyNTUxOSh0KTtcbiAgZm9yIChqID0gMDsgaiA8IDI7IGorKykge1xuICAgIG1bMF0gPSB0WzBdIC0gMHhmZmVkO1xuICAgIGZvciAoaSA9IDE7IGkgPCAxNTsgaSsrKSB7XG4gICAgICBtW2ldID0gdFtpXSAtIDB4ZmZmZiAtICgobVtpLTFdPj4xNikgJiAxKTtcbiAgICAgIG1baS0xXSAmPSAweGZmZmY7XG4gICAgfVxuICAgIG1bMTVdID0gdFsxNV0gLSAweDdmZmYgLSAoKG1bMTRdPj4xNikgJiAxKTtcbiAgICBiID0gKG1bMTVdPj4xNikgJiAxO1xuICAgIG1bMTRdICY9IDB4ZmZmZjtcbiAgICBzZWwyNTUxOSh0LCBtLCAxLWIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgb1syKmldID0gdFtpXSAmIDB4ZmY7XG4gICAgb1syKmkrMV0gPSB0W2ldPj44O1xuICB9XG59XG5cbmZ1bmN0aW9uIG5lcTI1NTE5KGEsIGIpIHtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheSgzMiksIGQgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIHBhY2syNTUxOShjLCBhKTtcbiAgcGFjazI1NTE5KGQsIGIpO1xuICByZXR1cm4gY3J5cHRvX3ZlcmlmeV8zMihjLCAwLCBkLCAwKTtcbn1cblxuZnVuY3Rpb24gcGFyMjU1MTkoYSkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgcGFjazI1NTE5KGQsIGEpO1xuICByZXR1cm4gZFswXSAmIDE7XG59XG5cbmZ1bmN0aW9uIHVucGFjazI1NTE5KG8sIG4pIHtcbiAgdmFyIGk7XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSBvW2ldID0gblsyKmldICsgKG5bMippKzFdIDw8IDgpO1xuICBvWzE1XSAmPSAweDdmZmY7XG59XG5cbmZ1bmN0aW9uIEEobywgYSwgYikge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IDE2OyBpKyspIG9baV0gPSBhW2ldICsgYltpXTtcbn1cblxuZnVuY3Rpb24gWihvLCBhLCBiKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMTY7IGkrKykgb1tpXSA9IGFbaV0gLSBiW2ldO1xufVxuXG5mdW5jdGlvbiBNKG8sIGEsIGIpIHtcbiAgdmFyIHYsIGMsXG4gICAgIHQwID0gMCwgIHQxID0gMCwgIHQyID0gMCwgIHQzID0gMCwgIHQ0ID0gMCwgIHQ1ID0gMCwgIHQ2ID0gMCwgIHQ3ID0gMCxcbiAgICAgdDggPSAwLCAgdDkgPSAwLCB0MTAgPSAwLCB0MTEgPSAwLCB0MTIgPSAwLCB0MTMgPSAwLCB0MTQgPSAwLCB0MTUgPSAwLFxuICAgIHQxNiA9IDAsIHQxNyA9IDAsIHQxOCA9IDAsIHQxOSA9IDAsIHQyMCA9IDAsIHQyMSA9IDAsIHQyMiA9IDAsIHQyMyA9IDAsXG4gICAgdDI0ID0gMCwgdDI1ID0gMCwgdDI2ID0gMCwgdDI3ID0gMCwgdDI4ID0gMCwgdDI5ID0gMCwgdDMwID0gMCxcbiAgICBiMCA9IGJbMF0sXG4gICAgYjEgPSBiWzFdLFxuICAgIGIyID0gYlsyXSxcbiAgICBiMyA9IGJbM10sXG4gICAgYjQgPSBiWzRdLFxuICAgIGI1ID0gYls1XSxcbiAgICBiNiA9IGJbNl0sXG4gICAgYjcgPSBiWzddLFxuICAgIGI4ID0gYls4XSxcbiAgICBiOSA9IGJbOV0sXG4gICAgYjEwID0gYlsxMF0sXG4gICAgYjExID0gYlsxMV0sXG4gICAgYjEyID0gYlsxMl0sXG4gICAgYjEzID0gYlsxM10sXG4gICAgYjE0ID0gYlsxNF0sXG4gICAgYjE1ID0gYlsxNV07XG5cbiAgdiA9IGFbMF07XG4gIHQwICs9IHYgKiBiMDtcbiAgdDEgKz0gdiAqIGIxO1xuICB0MiArPSB2ICogYjI7XG4gIHQzICs9IHYgKiBiMztcbiAgdDQgKz0gdiAqIGI0O1xuICB0NSArPSB2ICogYjU7XG4gIHQ2ICs9IHYgKiBiNjtcbiAgdDcgKz0gdiAqIGI3O1xuICB0OCArPSB2ICogYjg7XG4gIHQ5ICs9IHYgKiBiOTtcbiAgdDEwICs9IHYgKiBiMTA7XG4gIHQxMSArPSB2ICogYjExO1xuICB0MTIgKz0gdiAqIGIxMjtcbiAgdDEzICs9IHYgKiBiMTM7XG4gIHQxNCArPSB2ICogYjE0O1xuICB0MTUgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMV07XG4gIHQxICs9IHYgKiBiMDtcbiAgdDIgKz0gdiAqIGIxO1xuICB0MyArPSB2ICogYjI7XG4gIHQ0ICs9IHYgKiBiMztcbiAgdDUgKz0gdiAqIGI0O1xuICB0NiArPSB2ICogYjU7XG4gIHQ3ICs9IHYgKiBiNjtcbiAgdDggKz0gdiAqIGI3O1xuICB0OSArPSB2ICogYjg7XG4gIHQxMCArPSB2ICogYjk7XG4gIHQxMSArPSB2ICogYjEwO1xuICB0MTIgKz0gdiAqIGIxMTtcbiAgdDEzICs9IHYgKiBiMTI7XG4gIHQxNCArPSB2ICogYjEzO1xuICB0MTUgKz0gdiAqIGIxNDtcbiAgdDE2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzJdO1xuICB0MiArPSB2ICogYjA7XG4gIHQzICs9IHYgKiBiMTtcbiAgdDQgKz0gdiAqIGIyO1xuICB0NSArPSB2ICogYjM7XG4gIHQ2ICs9IHYgKiBiNDtcbiAgdDcgKz0gdiAqIGI1O1xuICB0OCArPSB2ICogYjY7XG4gIHQ5ICs9IHYgKiBiNztcbiAgdDEwICs9IHYgKiBiODtcbiAgdDExICs9IHYgKiBiOTtcbiAgdDEyICs9IHYgKiBiMTA7XG4gIHQxMyArPSB2ICogYjExO1xuICB0MTQgKz0gdiAqIGIxMjtcbiAgdDE1ICs9IHYgKiBiMTM7XG4gIHQxNiArPSB2ICogYjE0O1xuICB0MTcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbM107XG4gIHQzICs9IHYgKiBiMDtcbiAgdDQgKz0gdiAqIGIxO1xuICB0NSArPSB2ICogYjI7XG4gIHQ2ICs9IHYgKiBiMztcbiAgdDcgKz0gdiAqIGI0O1xuICB0OCArPSB2ICogYjU7XG4gIHQ5ICs9IHYgKiBiNjtcbiAgdDEwICs9IHYgKiBiNztcbiAgdDExICs9IHYgKiBiODtcbiAgdDEyICs9IHYgKiBiOTtcbiAgdDEzICs9IHYgKiBiMTA7XG4gIHQxNCArPSB2ICogYjExO1xuICB0MTUgKz0gdiAqIGIxMjtcbiAgdDE2ICs9IHYgKiBiMTM7XG4gIHQxNyArPSB2ICogYjE0O1xuICB0MTggKz0gdiAqIGIxNTtcbiAgdiA9IGFbNF07XG4gIHQ0ICs9IHYgKiBiMDtcbiAgdDUgKz0gdiAqIGIxO1xuICB0NiArPSB2ICogYjI7XG4gIHQ3ICs9IHYgKiBiMztcbiAgdDggKz0gdiAqIGI0O1xuICB0OSArPSB2ICogYjU7XG4gIHQxMCArPSB2ICogYjY7XG4gIHQxMSArPSB2ICogYjc7XG4gIHQxMiArPSB2ICogYjg7XG4gIHQxMyArPSB2ICogYjk7XG4gIHQxNCArPSB2ICogYjEwO1xuICB0MTUgKz0gdiAqIGIxMTtcbiAgdDE2ICs9IHYgKiBiMTI7XG4gIHQxNyArPSB2ICogYjEzO1xuICB0MTggKz0gdiAqIGIxNDtcbiAgdDE5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzVdO1xuICB0NSArPSB2ICogYjA7XG4gIHQ2ICs9IHYgKiBiMTtcbiAgdDcgKz0gdiAqIGIyO1xuICB0OCArPSB2ICogYjM7XG4gIHQ5ICs9IHYgKiBiNDtcbiAgdDEwICs9IHYgKiBiNTtcbiAgdDExICs9IHYgKiBiNjtcbiAgdDEyICs9IHYgKiBiNztcbiAgdDEzICs9IHYgKiBiODtcbiAgdDE0ICs9IHYgKiBiOTtcbiAgdDE1ICs9IHYgKiBiMTA7XG4gIHQxNiArPSB2ICogYjExO1xuICB0MTcgKz0gdiAqIGIxMjtcbiAgdDE4ICs9IHYgKiBiMTM7XG4gIHQxOSArPSB2ICogYjE0O1xuICB0MjAgKz0gdiAqIGIxNTtcbiAgdiA9IGFbNl07XG4gIHQ2ICs9IHYgKiBiMDtcbiAgdDcgKz0gdiAqIGIxO1xuICB0OCArPSB2ICogYjI7XG4gIHQ5ICs9IHYgKiBiMztcbiAgdDEwICs9IHYgKiBiNDtcbiAgdDExICs9IHYgKiBiNTtcbiAgdDEyICs9IHYgKiBiNjtcbiAgdDEzICs9IHYgKiBiNztcbiAgdDE0ICs9IHYgKiBiODtcbiAgdDE1ICs9IHYgKiBiOTtcbiAgdDE2ICs9IHYgKiBiMTA7XG4gIHQxNyArPSB2ICogYjExO1xuICB0MTggKz0gdiAqIGIxMjtcbiAgdDE5ICs9IHYgKiBiMTM7XG4gIHQyMCArPSB2ICogYjE0O1xuICB0MjEgKz0gdiAqIGIxNTtcbiAgdiA9IGFbN107XG4gIHQ3ICs9IHYgKiBiMDtcbiAgdDggKz0gdiAqIGIxO1xuICB0OSArPSB2ICogYjI7XG4gIHQxMCArPSB2ICogYjM7XG4gIHQxMSArPSB2ICogYjQ7XG4gIHQxMiArPSB2ICogYjU7XG4gIHQxMyArPSB2ICogYjY7XG4gIHQxNCArPSB2ICogYjc7XG4gIHQxNSArPSB2ICogYjg7XG4gIHQxNiArPSB2ICogYjk7XG4gIHQxNyArPSB2ICogYjEwO1xuICB0MTggKz0gdiAqIGIxMTtcbiAgdDE5ICs9IHYgKiBiMTI7XG4gIHQyMCArPSB2ICogYjEzO1xuICB0MjEgKz0gdiAqIGIxNDtcbiAgdDIyICs9IHYgKiBiMTU7XG4gIHYgPSBhWzhdO1xuICB0OCArPSB2ICogYjA7XG4gIHQ5ICs9IHYgKiBiMTtcbiAgdDEwICs9IHYgKiBiMjtcbiAgdDExICs9IHYgKiBiMztcbiAgdDEyICs9IHYgKiBiNDtcbiAgdDEzICs9IHYgKiBiNTtcbiAgdDE0ICs9IHYgKiBiNjtcbiAgdDE1ICs9IHYgKiBiNztcbiAgdDE2ICs9IHYgKiBiODtcbiAgdDE3ICs9IHYgKiBiOTtcbiAgdDE4ICs9IHYgKiBiMTA7XG4gIHQxOSArPSB2ICogYjExO1xuICB0MjAgKz0gdiAqIGIxMjtcbiAgdDIxICs9IHYgKiBiMTM7XG4gIHQyMiArPSB2ICogYjE0O1xuICB0MjMgKz0gdiAqIGIxNTtcbiAgdiA9IGFbOV07XG4gIHQ5ICs9IHYgKiBiMDtcbiAgdDEwICs9IHYgKiBiMTtcbiAgdDExICs9IHYgKiBiMjtcbiAgdDEyICs9IHYgKiBiMztcbiAgdDEzICs9IHYgKiBiNDtcbiAgdDE0ICs9IHYgKiBiNTtcbiAgdDE1ICs9IHYgKiBiNjtcbiAgdDE2ICs9IHYgKiBiNztcbiAgdDE3ICs9IHYgKiBiODtcbiAgdDE4ICs9IHYgKiBiOTtcbiAgdDE5ICs9IHYgKiBiMTA7XG4gIHQyMCArPSB2ICogYjExO1xuICB0MjEgKz0gdiAqIGIxMjtcbiAgdDIyICs9IHYgKiBiMTM7XG4gIHQyMyArPSB2ICogYjE0O1xuICB0MjQgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTBdO1xuICB0MTAgKz0gdiAqIGIwO1xuICB0MTEgKz0gdiAqIGIxO1xuICB0MTIgKz0gdiAqIGIyO1xuICB0MTMgKz0gdiAqIGIzO1xuICB0MTQgKz0gdiAqIGI0O1xuICB0MTUgKz0gdiAqIGI1O1xuICB0MTYgKz0gdiAqIGI2O1xuICB0MTcgKz0gdiAqIGI3O1xuICB0MTggKz0gdiAqIGI4O1xuICB0MTkgKz0gdiAqIGI5O1xuICB0MjAgKz0gdiAqIGIxMDtcbiAgdDIxICs9IHYgKiBiMTE7XG4gIHQyMiArPSB2ICogYjEyO1xuICB0MjMgKz0gdiAqIGIxMztcbiAgdDI0ICs9IHYgKiBiMTQ7XG4gIHQyNSArPSB2ICogYjE1O1xuICB2ID0gYVsxMV07XG4gIHQxMSArPSB2ICogYjA7XG4gIHQxMiArPSB2ICogYjE7XG4gIHQxMyArPSB2ICogYjI7XG4gIHQxNCArPSB2ICogYjM7XG4gIHQxNSArPSB2ICogYjQ7XG4gIHQxNiArPSB2ICogYjU7XG4gIHQxNyArPSB2ICogYjY7XG4gIHQxOCArPSB2ICogYjc7XG4gIHQxOSArPSB2ICogYjg7XG4gIHQyMCArPSB2ICogYjk7XG4gIHQyMSArPSB2ICogYjEwO1xuICB0MjIgKz0gdiAqIGIxMTtcbiAgdDIzICs9IHYgKiBiMTI7XG4gIHQyNCArPSB2ICogYjEzO1xuICB0MjUgKz0gdiAqIGIxNDtcbiAgdDI2ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzEyXTtcbiAgdDEyICs9IHYgKiBiMDtcbiAgdDEzICs9IHYgKiBiMTtcbiAgdDE0ICs9IHYgKiBiMjtcbiAgdDE1ICs9IHYgKiBiMztcbiAgdDE2ICs9IHYgKiBiNDtcbiAgdDE3ICs9IHYgKiBiNTtcbiAgdDE4ICs9IHYgKiBiNjtcbiAgdDE5ICs9IHYgKiBiNztcbiAgdDIwICs9IHYgKiBiODtcbiAgdDIxICs9IHYgKiBiOTtcbiAgdDIyICs9IHYgKiBiMTA7XG4gIHQyMyArPSB2ICogYjExO1xuICB0MjQgKz0gdiAqIGIxMjtcbiAgdDI1ICs9IHYgKiBiMTM7XG4gIHQyNiArPSB2ICogYjE0O1xuICB0MjcgKz0gdiAqIGIxNTtcbiAgdiA9IGFbMTNdO1xuICB0MTMgKz0gdiAqIGIwO1xuICB0MTQgKz0gdiAqIGIxO1xuICB0MTUgKz0gdiAqIGIyO1xuICB0MTYgKz0gdiAqIGIzO1xuICB0MTcgKz0gdiAqIGI0O1xuICB0MTggKz0gdiAqIGI1O1xuICB0MTkgKz0gdiAqIGI2O1xuICB0MjAgKz0gdiAqIGI3O1xuICB0MjEgKz0gdiAqIGI4O1xuICB0MjIgKz0gdiAqIGI5O1xuICB0MjMgKz0gdiAqIGIxMDtcbiAgdDI0ICs9IHYgKiBiMTE7XG4gIHQyNSArPSB2ICogYjEyO1xuICB0MjYgKz0gdiAqIGIxMztcbiAgdDI3ICs9IHYgKiBiMTQ7XG4gIHQyOCArPSB2ICogYjE1O1xuICB2ID0gYVsxNF07XG4gIHQxNCArPSB2ICogYjA7XG4gIHQxNSArPSB2ICogYjE7XG4gIHQxNiArPSB2ICogYjI7XG4gIHQxNyArPSB2ICogYjM7XG4gIHQxOCArPSB2ICogYjQ7XG4gIHQxOSArPSB2ICogYjU7XG4gIHQyMCArPSB2ICogYjY7XG4gIHQyMSArPSB2ICogYjc7XG4gIHQyMiArPSB2ICogYjg7XG4gIHQyMyArPSB2ICogYjk7XG4gIHQyNCArPSB2ICogYjEwO1xuICB0MjUgKz0gdiAqIGIxMTtcbiAgdDI2ICs9IHYgKiBiMTI7XG4gIHQyNyArPSB2ICogYjEzO1xuICB0MjggKz0gdiAqIGIxNDtcbiAgdDI5ICs9IHYgKiBiMTU7XG4gIHYgPSBhWzE1XTtcbiAgdDE1ICs9IHYgKiBiMDtcbiAgdDE2ICs9IHYgKiBiMTtcbiAgdDE3ICs9IHYgKiBiMjtcbiAgdDE4ICs9IHYgKiBiMztcbiAgdDE5ICs9IHYgKiBiNDtcbiAgdDIwICs9IHYgKiBiNTtcbiAgdDIxICs9IHYgKiBiNjtcbiAgdDIyICs9IHYgKiBiNztcbiAgdDIzICs9IHYgKiBiODtcbiAgdDI0ICs9IHYgKiBiOTtcbiAgdDI1ICs9IHYgKiBiMTA7XG4gIHQyNiArPSB2ICogYjExO1xuICB0MjcgKz0gdiAqIGIxMjtcbiAgdDI4ICs9IHYgKiBiMTM7XG4gIHQyOSArPSB2ICogYjE0O1xuICB0MzAgKz0gdiAqIGIxNTtcblxuICB0MCAgKz0gMzggKiB0MTY7XG4gIHQxICArPSAzOCAqIHQxNztcbiAgdDIgICs9IDM4ICogdDE4O1xuICB0MyAgKz0gMzggKiB0MTk7XG4gIHQ0ICArPSAzOCAqIHQyMDtcbiAgdDUgICs9IDM4ICogdDIxO1xuICB0NiAgKz0gMzggKiB0MjI7XG4gIHQ3ICArPSAzOCAqIHQyMztcbiAgdDggICs9IDM4ICogdDI0O1xuICB0OSAgKz0gMzggKiB0MjU7XG4gIHQxMCArPSAzOCAqIHQyNjtcbiAgdDExICs9IDM4ICogdDI3O1xuICB0MTIgKz0gMzggKiB0Mjg7XG4gIHQxMyArPSAzOCAqIHQyOTtcbiAgdDE0ICs9IDM4ICogdDMwO1xuICAvLyB0MTUgbGVmdCBhcyBpc1xuXG4gIC8vIGZpcnN0IGNhclxuICBjID0gMTtcbiAgdiA9ICB0MCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQxID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0MyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ2ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0NyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ3ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ4ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9ICB0OSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgIHQ5ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEwID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDExID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMiArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEyID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxMyArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDEzID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNCArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE0ID0gdiAtIGMgKiA2NTUzNjtcbiAgdiA9IHQxNSArIGMgKyA2NTUzNTsgYyA9IE1hdGguZmxvb3IodiAvIDY1NTM2KTsgdDE1ID0gdiAtIGMgKiA2NTUzNjtcbiAgdDAgKz0gYy0xICsgMzcgKiAoYy0xKTtcblxuICAvLyBzZWNvbmQgY2FyXG4gIGMgPSAxO1xuICB2ID0gIHQwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQxICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDUgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ2ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDYgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ3ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDcgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ4ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDggPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gIHQ5ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyAgdDkgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEwICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTAgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDExICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTEgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEyICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTIgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDEzICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTMgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE0ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTQgPSB2IC0gYyAqIDY1NTM2O1xuICB2ID0gdDE1ICsgYyArIDY1NTM1OyBjID0gTWF0aC5mbG9vcih2IC8gNjU1MzYpOyB0MTUgPSB2IC0gYyAqIDY1NTM2O1xuICB0MCArPSBjLTEgKyAzNyAqIChjLTEpO1xuXG4gIG9bIDBdID0gdDA7XG4gIG9bIDFdID0gdDE7XG4gIG9bIDJdID0gdDI7XG4gIG9bIDNdID0gdDM7XG4gIG9bIDRdID0gdDQ7XG4gIG9bIDVdID0gdDU7XG4gIG9bIDZdID0gdDY7XG4gIG9bIDddID0gdDc7XG4gIG9bIDhdID0gdDg7XG4gIG9bIDldID0gdDk7XG4gIG9bMTBdID0gdDEwO1xuICBvWzExXSA9IHQxMTtcbiAgb1sxMl0gPSB0MTI7XG4gIG9bMTNdID0gdDEzO1xuICBvWzE0XSA9IHQxNDtcbiAgb1sxNV0gPSB0MTU7XG59XG5cbmZ1bmN0aW9uIFMobywgYSkge1xuICBNKG8sIGEsIGEpO1xufVxuXG5mdW5jdGlvbiBpbnYyNTUxOShvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUzOyBhID49IDA7IGEtLSkge1xuICAgIFMoYywgYyk7XG4gICAgaWYoYSAhPT0gMiAmJiBhICE9PSA0KSBNKGMsIGMsIGkpO1xuICB9XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBvW2FdID0gY1thXTtcbn1cblxuZnVuY3Rpb24gcG93MjUyMyhvLCBpKSB7XG4gIHZhciBjID0gZ2YoKTtcbiAgdmFyIGE7XG4gIGZvciAoYSA9IDA7IGEgPCAxNjsgYSsrKSBjW2FdID0gaVthXTtcbiAgZm9yIChhID0gMjUwOyBhID49IDA7IGEtLSkge1xuICAgICAgUyhjLCBjKTtcbiAgICAgIGlmKGEgIT09IDEpIE0oYywgYywgaSk7XG4gIH1cbiAgZm9yIChhID0gMDsgYSA8IDE2OyBhKyspIG9bYV0gPSBjW2FdO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKSB7XG4gIHZhciB6ID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoODApLCByLCBpO1xuICB2YXIgYSA9IGdmKCksIGIgPSBnZigpLCBjID0gZ2YoKSxcbiAgICAgIGQgPSBnZigpLCBlID0gZ2YoKSwgZiA9IGdmKCk7XG4gIGZvciAoaSA9IDA7IGkgPCAzMTsgaSsrKSB6W2ldID0gbltpXTtcbiAgelszMV09KG5bMzFdJjEyNyl8NjQ7XG4gIHpbMF0mPTI0ODtcbiAgdW5wYWNrMjU1MTkoeCxwKTtcbiAgZm9yIChpID0gMDsgaSA8IDE2OyBpKyspIHtcbiAgICBiW2ldPXhbaV07XG4gICAgZFtpXT1hW2ldPWNbaV09MDtcbiAgfVxuICBhWzBdPWRbMF09MTtcbiAgZm9yIChpPTI1NDsgaT49MDsgLS1pKSB7XG4gICAgcj0oeltpPj4+M10+Pj4oaSY3KSkmMTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICAgIEEoZSxhLGMpO1xuICAgIFooYSxhLGMpO1xuICAgIEEoYyxiLGQpO1xuICAgIFooYixiLGQpO1xuICAgIFMoZCxlKTtcbiAgICBTKGYsYSk7XG4gICAgTShhLGMsYSk7XG4gICAgTShjLGIsZSk7XG4gICAgQShlLGEsYyk7XG4gICAgWihhLGEsYyk7XG4gICAgUyhiLGEpO1xuICAgIFooYyxkLGYpO1xuICAgIE0oYSxjLF8xMjE2NjUpO1xuICAgIEEoYSxhLGQpO1xuICAgIE0oYyxjLGEpO1xuICAgIE0oYSxkLGYpO1xuICAgIE0oZCxiLHgpO1xuICAgIFMoYixlKTtcbiAgICBzZWwyNTUxOShhLGIscik7XG4gICAgc2VsMjU1MTkoYyxkLHIpO1xuICB9XG4gIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgeFtpKzE2XT1hW2ldO1xuICAgIHhbaSszMl09Y1tpXTtcbiAgICB4W2krNDhdPWJbaV07XG4gICAgeFtpKzY0XT1kW2ldO1xuICB9XG4gIHZhciB4MzIgPSB4LnN1YmFycmF5KDMyKTtcbiAgdmFyIHgxNiA9IHguc3ViYXJyYXkoMTYpO1xuICBpbnYyNTUxOSh4MzIseDMyKTtcbiAgTSh4MTYseDE2LHgzMik7XG4gIHBhY2syNTUxOShxLHgxNik7XG4gIHJldHVybiAwO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9fc2NhbGFybXVsdF9iYXNlKHEsIG4pIHtcbiAgcmV0dXJuIGNyeXB0b19zY2FsYXJtdWx0KHEsIG4sIF85KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9rZXlwYWlyKHksIHgpIHtcbiAgcmFuZG9tYnl0ZXMoeCwgMzIpO1xuICByZXR1cm4gY3J5cHRvX3NjYWxhcm11bHRfYmFzZSh5LCB4KTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX2JveF9iZWZvcmVubShrLCB5LCB4KSB7XG4gIHZhciBzID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fc2NhbGFybXVsdChzLCB4LCB5KTtcbiAgcmV0dXJuIGNyeXB0b19jb3JlX2hzYWxzYTIwKGssIF8wLCBzLCBzaWdtYSk7XG59XG5cbnZhciBjcnlwdG9fYm94X2FmdGVybm0gPSBjcnlwdG9fc2VjcmV0Ym94O1xudmFyIGNyeXB0b19ib3hfb3Blbl9hZnRlcm5tID0gY3J5cHRvX3NlY3JldGJveF9vcGVuO1xuXG5mdW5jdGlvbiBjcnlwdG9fYm94KGMsIG0sIGQsIG4sIHksIHgpIHtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheSgzMik7XG4gIGNyeXB0b19ib3hfYmVmb3Jlbm0oaywgeSwgeCk7XG4gIHJldHVybiBjcnlwdG9fYm94X2FmdGVybm0oYywgbSwgZCwgbiwgayk7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19ib3hfb3BlbihtLCBjLCBkLCBuLCB5LCB4KSB7XG4gIHZhciBrID0gbmV3IFVpbnQ4QXJyYXkoMzIpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHksIHgpO1xuICByZXR1cm4gY3J5cHRvX2JveF9vcGVuX2FmdGVybm0obSwgYywgZCwgbiwgayk7XG59XG5cbnZhciBLID0gW1xuICAweDQyOGEyZjk4LCAweGQ3MjhhZTIyLCAweDcxMzc0NDkxLCAweDIzZWY2NWNkLFxuICAweGI1YzBmYmNmLCAweGVjNGQzYjJmLCAweGU5YjVkYmE1LCAweDgxODlkYmJjLFxuICAweDM5NTZjMjViLCAweGYzNDhiNTM4LCAweDU5ZjExMWYxLCAweGI2MDVkMDE5LFxuICAweDkyM2Y4MmE0LCAweGFmMTk0ZjliLCAweGFiMWM1ZWQ1LCAweGRhNmQ4MTE4LFxuICAweGQ4MDdhYTk4LCAweGEzMDMwMjQyLCAweDEyODM1YjAxLCAweDQ1NzA2ZmJlLFxuICAweDI0MzE4NWJlLCAweDRlZTRiMjhjLCAweDU1MGM3ZGMzLCAweGQ1ZmZiNGUyLFxuICAweDcyYmU1ZDc0LCAweGYyN2I4OTZmLCAweDgwZGViMWZlLCAweDNiMTY5NmIxLFxuICAweDliZGMwNmE3LCAweDI1YzcxMjM1LCAweGMxOWJmMTc0LCAweGNmNjkyNjk0LFxuICAweGU0OWI2OWMxLCAweDllZjE0YWQyLCAweGVmYmU0Nzg2LCAweDM4NGYyNWUzLFxuICAweDBmYzE5ZGM2LCAweDhiOGNkNWI1LCAweDI0MGNhMWNjLCAweDc3YWM5YzY1LFxuICAweDJkZTkyYzZmLCAweDU5MmIwMjc1LCAweDRhNzQ4NGFhLCAweDZlYTZlNDgzLFxuICAweDVjYjBhOWRjLCAweGJkNDFmYmQ0LCAweDc2Zjk4OGRhLCAweDgzMTE1M2I1LFxuICAweDk4M2U1MTUyLCAweGVlNjZkZmFiLCAweGE4MzFjNjZkLCAweDJkYjQzMjEwLFxuICAweGIwMDMyN2M4LCAweDk4ZmIyMTNmLCAweGJmNTk3ZmM3LCAweGJlZWYwZWU0LFxuICAweGM2ZTAwYmYzLCAweDNkYTg4ZmMyLCAweGQ1YTc5MTQ3LCAweDkzMGFhNzI1LFxuICAweDA2Y2E2MzUxLCAweGUwMDM4MjZmLCAweDE0MjkyOTY3LCAweDBhMGU2ZTcwLFxuICAweDI3YjcwYTg1LCAweDQ2ZDIyZmZjLCAweDJlMWIyMTM4LCAweDVjMjZjOTI2LFxuICAweDRkMmM2ZGZjLCAweDVhYzQyYWVkLCAweDUzMzgwZDEzLCAweDlkOTViM2RmLFxuICAweDY1MGE3MzU0LCAweDhiYWY2M2RlLCAweDc2NmEwYWJiLCAweDNjNzdiMmE4LFxuICAweDgxYzJjOTJlLCAweDQ3ZWRhZWU2LCAweDkyNzIyYzg1LCAweDE0ODIzNTNiLFxuICAweGEyYmZlOGExLCAweDRjZjEwMzY0LCAweGE4MWE2NjRiLCAweGJjNDIzMDAxLFxuICAweGMyNGI4YjcwLCAweGQwZjg5NzkxLCAweGM3NmM1MWEzLCAweDA2NTRiZTMwLFxuICAweGQxOTJlODE5LCAweGQ2ZWY1MjE4LCAweGQ2OTkwNjI0LCAweDU1NjVhOTEwLFxuICAweGY0MGUzNTg1LCAweDU3NzEyMDJhLCAweDEwNmFhMDcwLCAweDMyYmJkMWI4LFxuICAweDE5YTRjMTE2LCAweGI4ZDJkMGM4LCAweDFlMzc2YzA4LCAweDUxNDFhYjUzLFxuICAweDI3NDg3NzRjLCAweGRmOGVlYjk5LCAweDM0YjBiY2I1LCAweGUxOWI0OGE4LFxuICAweDM5MWMwY2IzLCAweGM1Yzk1YTYzLCAweDRlZDhhYTRhLCAweGUzNDE4YWNiLFxuICAweDViOWNjYTRmLCAweDc3NjNlMzczLCAweDY4MmU2ZmYzLCAweGQ2YjJiOGEzLFxuICAweDc0OGY4MmVlLCAweDVkZWZiMmZjLCAweDc4YTU2MzZmLCAweDQzMTcyZjYwLFxuICAweDg0Yzg3ODE0LCAweGExZjBhYjcyLCAweDhjYzcwMjA4LCAweDFhNjQzOWVjLFxuICAweDkwYmVmZmZhLCAweDIzNjMxZTI4LCAweGE0NTA2Y2ViLCAweGRlODJiZGU5LFxuICAweGJlZjlhM2Y3LCAweGIyYzY3OTE1LCAweGM2NzE3OGYyLCAweGUzNzI1MzJiLFxuICAweGNhMjczZWNlLCAweGVhMjY2MTljLCAweGQxODZiOGM3LCAweDIxYzBjMjA3LFxuICAweGVhZGE3ZGQ2LCAweGNkZTBlYjFlLCAweGY1N2Q0ZjdmLCAweGVlNmVkMTc4LFxuICAweDA2ZjA2N2FhLCAweDcyMTc2ZmJhLCAweDBhNjM3ZGM1LCAweGEyYzg5OGE2LFxuICAweDExM2Y5ODA0LCAweGJlZjkwZGFlLCAweDFiNzEwYjM1LCAweDEzMWM0NzFiLFxuICAweDI4ZGI3N2Y1LCAweDIzMDQ3ZDg0LCAweDMyY2FhYjdiLCAweDQwYzcyNDkzLFxuICAweDNjOWViZTBhLCAweDE1YzliZWJjLCAweDQzMWQ2N2M0LCAweDljMTAwZDRjLFxuICAweDRjYzVkNGJlLCAweGNiM2U0MmI2LCAweDU5N2YyOTljLCAweGZjNjU3ZTJhLFxuICAweDVmY2I2ZmFiLCAweDNhZDZmYWVjLCAweDZjNDQxOThjLCAweDRhNDc1ODE3XG5dO1xuXG5mdW5jdGlvbiBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pIHtcbiAgdmFyIHdoID0gbmV3IEludDMyQXJyYXkoMTYpLCB3bCA9IG5ldyBJbnQzMkFycmF5KDE2KSxcbiAgICAgIGJoMCwgYmgxLCBiaDIsIGJoMywgYmg0LCBiaDUsIGJoNiwgYmg3LFxuICAgICAgYmwwLCBibDEsIGJsMiwgYmwzLCBibDQsIGJsNSwgYmw2LCBibDcsXG4gICAgICB0aCwgdGwsIGksIGosIGgsIGwsIGEsIGIsIGMsIGQ7XG5cbiAgdmFyIGFoMCA9IGhoWzBdLFxuICAgICAgYWgxID0gaGhbMV0sXG4gICAgICBhaDIgPSBoaFsyXSxcbiAgICAgIGFoMyA9IGhoWzNdLFxuICAgICAgYWg0ID0gaGhbNF0sXG4gICAgICBhaDUgPSBoaFs1XSxcbiAgICAgIGFoNiA9IGhoWzZdLFxuICAgICAgYWg3ID0gaGhbN10sXG5cbiAgICAgIGFsMCA9IGhsWzBdLFxuICAgICAgYWwxID0gaGxbMV0sXG4gICAgICBhbDIgPSBobFsyXSxcbiAgICAgIGFsMyA9IGhsWzNdLFxuICAgICAgYWw0ID0gaGxbNF0sXG4gICAgICBhbDUgPSBobFs1XSxcbiAgICAgIGFsNiA9IGhsWzZdLFxuICAgICAgYWw3ID0gaGxbN107XG5cbiAgdmFyIHBvcyA9IDA7XG4gIHdoaWxlIChuID49IDEyOCkge1xuICAgIGZvciAoaSA9IDA7IGkgPCAxNjsgaSsrKSB7XG4gICAgICBqID0gOCAqIGkgKyBwb3M7XG4gICAgICB3aFtpXSA9IChtW2orMF0gPDwgMjQpIHwgKG1baisxXSA8PCAxNikgfCAobVtqKzJdIDw8IDgpIHwgbVtqKzNdO1xuICAgICAgd2xbaV0gPSAobVtqKzRdIDw8IDI0KSB8IChtW2orNV0gPDwgMTYpIHwgKG1bais2XSA8PCA4KSB8IG1bais3XTtcbiAgICB9XG4gICAgZm9yIChpID0gMDsgaSA8IDgwOyBpKyspIHtcbiAgICAgIGJoMCA9IGFoMDtcbiAgICAgIGJoMSA9IGFoMTtcbiAgICAgIGJoMiA9IGFoMjtcbiAgICAgIGJoMyA9IGFoMztcbiAgICAgIGJoNCA9IGFoNDtcbiAgICAgIGJoNSA9IGFoNTtcbiAgICAgIGJoNiA9IGFoNjtcbiAgICAgIGJoNyA9IGFoNztcblxuICAgICAgYmwwID0gYWwwO1xuICAgICAgYmwxID0gYWwxO1xuICAgICAgYmwyID0gYWwyO1xuICAgICAgYmwzID0gYWwzO1xuICAgICAgYmw0ID0gYWw0O1xuICAgICAgYmw1ID0gYWw1O1xuICAgICAgYmw2ID0gYWw2O1xuICAgICAgYmw3ID0gYWw3O1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBhaDc7XG4gICAgICBsID0gYWw3O1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgLy8gU2lnbWExXG4gICAgICBoID0gKChhaDQgPj4+IDE0KSB8IChhbDQgPDwgKDMyLTE0KSkpIF4gKChhaDQgPj4+IDE4KSB8IChhbDQgPDwgKDMyLTE4KSkpIF4gKChhbDQgPj4+ICg0MS0zMikpIHwgKGFoNCA8PCAoMzItKDQxLTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsNCA+Pj4gMTQpIHwgKGFoNCA8PCAoMzItMTQpKSkgXiAoKGFsNCA+Pj4gMTgpIHwgKGFoNCA8PCAoMzItMTgpKSkgXiAoKGFoNCA+Pj4gKDQxLTMyKSkgfCAoYWw0IDw8ICgzMi0oNDEtMzIpKSkpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIC8vIENoXG4gICAgICBoID0gKGFoNCAmIGFoNSkgXiAofmFoNCAmIGFoNik7XG4gICAgICBsID0gKGFsNCAmIGFsNSkgXiAofmFsNCAmIGFsNik7XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgLy8gS1xuICAgICAgaCA9IEtbaSoyXTtcbiAgICAgIGwgPSBLW2kqMisxXTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyB3XG4gICAgICBoID0gd2hbaSUxNl07XG4gICAgICBsID0gd2xbaSUxNl07XG5cbiAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgIGMgKz0gaCAmIDB4ZmZmZjsgZCArPSBoID4+PiAxNjtcblxuICAgICAgYiArPSBhID4+PiAxNjtcbiAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICBkICs9IGMgPj4+IDE2O1xuXG4gICAgICB0aCA9IGMgJiAweGZmZmYgfCBkIDw8IDE2O1xuICAgICAgdGwgPSBhICYgMHhmZmZmIHwgYiA8PCAxNjtcblxuICAgICAgLy8gYWRkXG4gICAgICBoID0gdGg7XG4gICAgICBsID0gdGw7XG5cbiAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgICAvLyBTaWdtYTBcbiAgICAgIGggPSAoKGFoMCA+Pj4gMjgpIHwgKGFsMCA8PCAoMzItMjgpKSkgXiAoKGFsMCA+Pj4gKDM0LTMyKSkgfCAoYWgwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhbDAgPj4+ICgzOS0zMikpIHwgKGFoMCA8PCAoMzItKDM5LTMyKSkpKTtcbiAgICAgIGwgPSAoKGFsMCA+Pj4gMjgpIHwgKGFoMCA8PCAoMzItMjgpKSkgXiAoKGFoMCA+Pj4gKDM0LTMyKSkgfCAoYWwwIDw8ICgzMi0oMzQtMzIpKSkpIF4gKChhaDAgPj4+ICgzOS0zMikpIHwgKGFsMCA8PCAoMzItKDM5LTMyKSkpKTtcblxuICAgICAgYSArPSBsICYgMHhmZmZmOyBiICs9IGwgPj4+IDE2O1xuICAgICAgYyArPSBoICYgMHhmZmZmOyBkICs9IGggPj4+IDE2O1xuXG4gICAgICAvLyBNYWpcbiAgICAgIGggPSAoYWgwICYgYWgxKSBeIChhaDAgJiBhaDIpIF4gKGFoMSAmIGFoMik7XG4gICAgICBsID0gKGFsMCAmIGFsMSkgXiAoYWwwICYgYWwyKSBeIChhbDEgJiBhbDIpO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICAvLyBhZGRcbiAgICAgIGggPSBiaDM7XG4gICAgICBsID0gYmwzO1xuXG4gICAgICBhID0gbCAmIDB4ZmZmZjsgYiA9IGwgPj4+IDE2O1xuICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgaCA9IHRoO1xuICAgICAgbCA9IHRsO1xuXG4gICAgICBhICs9IGwgJiAweGZmZmY7IGIgKz0gbCA+Pj4gMTY7XG4gICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgIGIgKz0gYSA+Pj4gMTY7XG4gICAgICBjICs9IGIgPj4+IDE2O1xuICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgYmgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgYmwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgICBhaDEgPSBiaDA7XG4gICAgICBhaDIgPSBiaDE7XG4gICAgICBhaDMgPSBiaDI7XG4gICAgICBhaDQgPSBiaDM7XG4gICAgICBhaDUgPSBiaDQ7XG4gICAgICBhaDYgPSBiaDU7XG4gICAgICBhaDcgPSBiaDY7XG4gICAgICBhaDAgPSBiaDc7XG5cbiAgICAgIGFsMSA9IGJsMDtcbiAgICAgIGFsMiA9IGJsMTtcbiAgICAgIGFsMyA9IGJsMjtcbiAgICAgIGFsNCA9IGJsMztcbiAgICAgIGFsNSA9IGJsNDtcbiAgICAgIGFsNiA9IGJsNTtcbiAgICAgIGFsNyA9IGJsNjtcbiAgICAgIGFsMCA9IGJsNztcblxuICAgICAgaWYgKGklMTYgPT09IDE1KSB7XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCAxNjsgaisrKSB7XG4gICAgICAgICAgLy8gYWRkXG4gICAgICAgICAgaCA9IHdoW2pdO1xuICAgICAgICAgIGwgPSB3bFtqXTtcblxuICAgICAgICAgIGEgPSBsICYgMHhmZmZmOyBiID0gbCA+Pj4gMTY7XG4gICAgICAgICAgYyA9IGggJiAweGZmZmY7IGQgPSBoID4+PiAxNjtcblxuICAgICAgICAgIGggPSB3aFsoais5KSUxNl07XG4gICAgICAgICAgbCA9IHdsWyhqKzkpJTE2XTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTBcbiAgICAgICAgICB0aCA9IHdoWyhqKzEpJTE2XTtcbiAgICAgICAgICB0bCA9IHdsWyhqKzEpJTE2XTtcbiAgICAgICAgICBoID0gKCh0aCA+Pj4gMSkgfCAodGwgPDwgKDMyLTEpKSkgXiAoKHRoID4+PiA4KSB8ICh0bCA8PCAoMzItOCkpKSBeICh0aCA+Pj4gNyk7XG4gICAgICAgICAgbCA9ICgodGwgPj4+IDEpIHwgKHRoIDw8ICgzMi0xKSkpIF4gKCh0bCA+Pj4gOCkgfCAodGggPDwgKDMyLTgpKSkgXiAoKHRsID4+PiA3KSB8ICh0aCA8PCAoMzItNykpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICAvLyBzaWdtYTFcbiAgICAgICAgICB0aCA9IHdoWyhqKzE0KSUxNl07XG4gICAgICAgICAgdGwgPSB3bFsoaisxNCklMTZdO1xuICAgICAgICAgIGggPSAoKHRoID4+PiAxOSkgfCAodGwgPDwgKDMyLTE5KSkpIF4gKCh0bCA+Pj4gKDYxLTMyKSkgfCAodGggPDwgKDMyLSg2MS0zMikpKSkgXiAodGggPj4+IDYpO1xuICAgICAgICAgIGwgPSAoKHRsID4+PiAxOSkgfCAodGggPDwgKDMyLTE5KSkpIF4gKCh0aCA+Pj4gKDYxLTMyKSkgfCAodGwgPDwgKDMyLSg2MS0zMikpKSkgXiAoKHRsID4+PiA2KSB8ICh0aCA8PCAoMzItNikpKTtcblxuICAgICAgICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICAgICAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICAgICAgICBiICs9IGEgPj4+IDE2O1xuICAgICAgICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgICAgICAgZCArPSBjID4+PiAxNjtcblxuICAgICAgICAgIHdoW2pdID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgICAgICAgIHdsW2pdID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuXG4gICAgLy8gYWRkXG4gICAgaCA9IGFoMDtcbiAgICBsID0gYWwwO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzBdO1xuICAgIGwgPSBobFswXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzBdID0gYWgwID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzBdID0gYWwwID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMTtcbiAgICBsID0gYWwxO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzFdO1xuICAgIGwgPSBobFsxXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzFdID0gYWgxID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzFdID0gYWwxID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMjtcbiAgICBsID0gYWwyO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzJdO1xuICAgIGwgPSBobFsyXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzJdID0gYWgyID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzJdID0gYWwyID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoMztcbiAgICBsID0gYWwzO1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzNdO1xuICAgIGwgPSBobFszXTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzNdID0gYWgzID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzNdID0gYWwzID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNDtcbiAgICBsID0gYWw0O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzRdO1xuICAgIGwgPSBobFs0XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzRdID0gYWg0ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzRdID0gYWw0ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNTtcbiAgICBsID0gYWw1O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzVdO1xuICAgIGwgPSBobFs1XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzVdID0gYWg1ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzVdID0gYWw1ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNjtcbiAgICBsID0gYWw2O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzZdO1xuICAgIGwgPSBobFs2XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzZdID0gYWg2ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzZdID0gYWw2ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgaCA9IGFoNztcbiAgICBsID0gYWw3O1xuXG4gICAgYSA9IGwgJiAweGZmZmY7IGIgPSBsID4+PiAxNjtcbiAgICBjID0gaCAmIDB4ZmZmZjsgZCA9IGggPj4+IDE2O1xuXG4gICAgaCA9IGhoWzddO1xuICAgIGwgPSBobFs3XTtcblxuICAgIGEgKz0gbCAmIDB4ZmZmZjsgYiArPSBsID4+PiAxNjtcbiAgICBjICs9IGggJiAweGZmZmY7IGQgKz0gaCA+Pj4gMTY7XG5cbiAgICBiICs9IGEgPj4+IDE2O1xuICAgIGMgKz0gYiA+Pj4gMTY7XG4gICAgZCArPSBjID4+PiAxNjtcblxuICAgIGhoWzddID0gYWg3ID0gKGMgJiAweGZmZmYpIHwgKGQgPDwgMTYpO1xuICAgIGhsWzddID0gYWw3ID0gKGEgJiAweGZmZmYpIHwgKGIgPDwgMTYpO1xuXG4gICAgcG9zICs9IDEyODtcbiAgICBuIC09IDEyODtcbiAgfVxuXG4gIHJldHVybiBuO1xufVxuXG5mdW5jdGlvbiBjcnlwdG9faGFzaChvdXQsIG0sIG4pIHtcbiAgdmFyIGhoID0gbmV3IEludDMyQXJyYXkoOCksXG4gICAgICBobCA9IG5ldyBJbnQzMkFycmF5KDgpLFxuICAgICAgeCA9IG5ldyBVaW50OEFycmF5KDI1NiksXG4gICAgICBpLCBiID0gbjtcblxuICBoaFswXSA9IDB4NmEwOWU2Njc7XG4gIGhoWzFdID0gMHhiYjY3YWU4NTtcbiAgaGhbMl0gPSAweDNjNmVmMzcyO1xuICBoaFszXSA9IDB4YTU0ZmY1M2E7XG4gIGhoWzRdID0gMHg1MTBlNTI3ZjtcbiAgaGhbNV0gPSAweDliMDU2ODhjO1xuICBoaFs2XSA9IDB4MWY4M2Q5YWI7XG4gIGhoWzddID0gMHg1YmUwY2QxOTtcblxuICBobFswXSA9IDB4ZjNiY2M5MDg7XG4gIGhsWzFdID0gMHg4NGNhYTczYjtcbiAgaGxbMl0gPSAweGZlOTRmODJiO1xuICBobFszXSA9IDB4NWYxZDM2ZjE7XG4gIGhsWzRdID0gMHhhZGU2ODJkMTtcbiAgaGxbNV0gPSAweDJiM2U2YzFmO1xuICBobFs2XSA9IDB4ZmI0MWJkNmI7XG4gIGhsWzddID0gMHgxMzdlMjE3OTtcblxuICBjcnlwdG9faGFzaGJsb2Nrc19obChoaCwgaGwsIG0sIG4pO1xuICBuICU9IDEyODtcblxuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB4W2ldID0gbVtiLW4raV07XG4gIHhbbl0gPSAxMjg7XG5cbiAgbiA9IDI1Ni0xMjgqKG48MTEyPzE6MCk7XG4gIHhbbi05XSA9IDA7XG4gIHRzNjQoeCwgbi04LCAgKGIgLyAweDIwMDAwMDAwKSB8IDAsIGIgPDwgMyk7XG4gIGNyeXB0b19oYXNoYmxvY2tzX2hsKGhoLCBobCwgeCwgbik7XG5cbiAgZm9yIChpID0gMDsgaSA8IDg7IGkrKykgdHM2NChvdXQsIDgqaSwgaGhbaV0sIGhsW2ldKTtcblxuICByZXR1cm4gMDtcbn1cblxuZnVuY3Rpb24gYWRkKHAsIHEpIHtcbiAgdmFyIGEgPSBnZigpLCBiID0gZ2YoKSwgYyA9IGdmKCksXG4gICAgICBkID0gZ2YoKSwgZSA9IGdmKCksIGYgPSBnZigpLFxuICAgICAgZyA9IGdmKCksIGggPSBnZigpLCB0ID0gZ2YoKTtcblxuICBaKGEsIHBbMV0sIHBbMF0pO1xuICBaKHQsIHFbMV0sIHFbMF0pO1xuICBNKGEsIGEsIHQpO1xuICBBKGIsIHBbMF0sIHBbMV0pO1xuICBBKHQsIHFbMF0sIHFbMV0pO1xuICBNKGIsIGIsIHQpO1xuICBNKGMsIHBbM10sIHFbM10pO1xuICBNKGMsIGMsIEQyKTtcbiAgTShkLCBwWzJdLCBxWzJdKTtcbiAgQShkLCBkLCBkKTtcbiAgWihlLCBiLCBhKTtcbiAgWihmLCBkLCBjKTtcbiAgQShnLCBkLCBjKTtcbiAgQShoLCBiLCBhKTtcblxuICBNKHBbMF0sIGUsIGYpO1xuICBNKHBbMV0sIGgsIGcpO1xuICBNKHBbMl0sIGcsIGYpO1xuICBNKHBbM10sIGUsIGgpO1xufVxuXG5mdW5jdGlvbiBjc3dhcChwLCBxLCBiKSB7XG4gIHZhciBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNDsgaSsrKSB7XG4gICAgc2VsMjU1MTkocFtpXSwgcVtpXSwgYik7XG4gIH1cbn1cblxuZnVuY3Rpb24gcGFjayhyLCBwKSB7XG4gIHZhciB0eCA9IGdmKCksIHR5ID0gZ2YoKSwgemkgPSBnZigpO1xuICBpbnYyNTUxOSh6aSwgcFsyXSk7XG4gIE0odHgsIHBbMF0sIHppKTtcbiAgTSh0eSwgcFsxXSwgemkpO1xuICBwYWNrMjU1MTkociwgdHkpO1xuICByWzMxXSBePSBwYXIyNTUxOSh0eCkgPDwgNztcbn1cblxuZnVuY3Rpb24gc2NhbGFybXVsdChwLCBxLCBzKSB7XG4gIHZhciBiLCBpO1xuICBzZXQyNTUxOShwWzBdLCBnZjApO1xuICBzZXQyNTUxOShwWzFdLCBnZjEpO1xuICBzZXQyNTUxOShwWzJdLCBnZjEpO1xuICBzZXQyNTUxOShwWzNdLCBnZjApO1xuICBmb3IgKGkgPSAyNTU7IGkgPj0gMDsgLS1pKSB7XG4gICAgYiA9IChzWyhpLzgpfDBdID4+IChpJjcpKSAmIDE7XG4gICAgY3N3YXAocCwgcSwgYik7XG4gICAgYWRkKHEsIHApO1xuICAgIGFkZChwLCBwKTtcbiAgICBjc3dhcChwLCBxLCBiKTtcbiAgfVxufVxuXG5mdW5jdGlvbiBzY2FsYXJiYXNlKHAsIHMpIHtcbiAgdmFyIHEgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHNldDI1NTE5KHFbMF0sIFgpO1xuICBzZXQyNTUxOShxWzFdLCBZKTtcbiAgc2V0MjU1MTkocVsyXSwgZ2YxKTtcbiAgTShxWzNdLCBYLCBZKTtcbiAgc2NhbGFybXVsdChwLCBxLCBzKTtcbn1cblxuZnVuY3Rpb24gY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2ssIHNlZWRlZCkge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG4gIHZhciBpO1xuXG4gIGlmICghc2VlZGVkKSByYW5kb21ieXRlcyhzaywgMzIpO1xuICBjcnlwdG9faGFzaChkLCBzaywgMzIpO1xuICBkWzBdICY9IDI0ODtcbiAgZFszMV0gJj0gMTI3O1xuICBkWzMxXSB8PSA2NDtcblxuICBzY2FsYXJiYXNlKHAsIGQpO1xuICBwYWNrKHBrLCBwKTtcblxuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaSszMl0gPSBwa1tpXTtcbiAgcmV0dXJuIDA7XG59XG5cbnZhciBMID0gbmV3IEZsb2F0NjRBcnJheShbMHhlZCwgMHhkMywgMHhmNSwgMHg1YywgMHgxYSwgMHg2MywgMHgxMiwgMHg1OCwgMHhkNiwgMHg5YywgMHhmNywgMHhhMiwgMHhkZSwgMHhmOSwgMHhkZSwgMHgxNCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMHgxMF0pO1xuXG5mdW5jdGlvbiBtb2RMKHIsIHgpIHtcbiAgdmFyIGNhcnJ5LCBpLCBqLCBrO1xuICBmb3IgKGkgPSA2MzsgaSA+PSAzMjsgLS1pKSB7XG4gICAgY2FycnkgPSAwO1xuICAgIGZvciAoaiA9IGkgLSAzMiwgayA9IGkgLSAxMjsgaiA8IGs7ICsraikge1xuICAgICAgeFtqXSArPSBjYXJyeSAtIDE2ICogeFtpXSAqIExbaiAtIChpIC0gMzIpXTtcbiAgICAgIGNhcnJ5ID0gKHhbal0gKyAxMjgpID4+IDg7XG4gICAgICB4W2pdIC09IGNhcnJ5ICogMjU2O1xuICAgIH1cbiAgICB4W2pdICs9IGNhcnJ5O1xuICAgIHhbaV0gPSAwO1xuICB9XG4gIGNhcnJ5ID0gMDtcbiAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICB4W2pdICs9IGNhcnJ5IC0gKHhbMzFdID4+IDQpICogTFtqXTtcbiAgICBjYXJyeSA9IHhbal0gPj4gODtcbiAgICB4W2pdICY9IDI1NTtcbiAgfVxuICBmb3IgKGogPSAwOyBqIDwgMzI7IGorKykgeFtqXSAtPSBjYXJyeSAqIExbal07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgeFtpKzFdICs9IHhbaV0gPj4gODtcbiAgICByW2ldID0geFtpXSAmIDI1NTtcbiAgfVxufVxuXG5mdW5jdGlvbiByZWR1Y2Uocikge1xuICB2YXIgeCA9IG5ldyBGbG9hdDY0QXJyYXkoNjQpLCBpO1xuICBmb3IgKGkgPSAwOyBpIDwgNjQ7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCA2NDsgaSsrKSByW2ldID0gMDtcbiAgbW9kTChyLCB4KTtcbn1cblxuLy8gTm90ZTogZGlmZmVyZW5jZSBmcm9tIEMgLSBzbWxlbiByZXR1cm5lZCwgbm90IHBhc3NlZCBhcyBhcmd1bWVudC5cbmZ1bmN0aW9uIGNyeXB0b19zaWduKHNtLCBtLCBuLCBzaykge1xuICB2YXIgZCA9IG5ldyBVaW50OEFycmF5KDY0KSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KSwgciA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIGksIGosIHggPSBuZXcgRmxvYXQ2NEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV07XG5cbiAgY3J5cHRvX2hhc2goZCwgc2ssIDMyKTtcbiAgZFswXSAmPSAyNDg7XG4gIGRbMzFdICY9IDEyNztcbiAgZFszMV0gfD0gNjQ7XG5cbiAgdmFyIHNtbGVuID0gbiArIDY0O1xuICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBzbVs2NCArIGldID0gbVtpXTtcbiAgZm9yIChpID0gMDsgaSA8IDMyOyBpKyspIHNtWzMyICsgaV0gPSBkWzMyICsgaV07XG5cbiAgY3J5cHRvX2hhc2gociwgc20uc3ViYXJyYXkoMzIpLCBuKzMyKTtcbiAgcmVkdWNlKHIpO1xuICBzY2FsYXJiYXNlKHAsIHIpO1xuICBwYWNrKHNtLCBwKTtcblxuICBmb3IgKGkgPSAzMjsgaSA8IDY0OyBpKyspIHNtW2ldID0gc2tbaV07XG4gIGNyeXB0b19oYXNoKGgsIHNtLCBuICsgNjQpO1xuICByZWR1Y2UoaCk7XG5cbiAgZm9yIChpID0gMDsgaSA8IDY0OyBpKyspIHhbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgeFtpXSA9IHJbaV07XG4gIGZvciAoaSA9IDA7IGkgPCAzMjsgaSsrKSB7XG4gICAgZm9yIChqID0gMDsgaiA8IDMyOyBqKyspIHtcbiAgICAgIHhbaStqXSArPSBoW2ldICogZFtqXTtcbiAgICB9XG4gIH1cblxuICBtb2RMKHNtLnN1YmFycmF5KDMyKSwgeCk7XG4gIHJldHVybiBzbWxlbjtcbn1cblxuZnVuY3Rpb24gdW5wYWNrbmVnKHIsIHApIHtcbiAgdmFyIHQgPSBnZigpLCBjaGsgPSBnZigpLCBudW0gPSBnZigpLFxuICAgICAgZGVuID0gZ2YoKSwgZGVuMiA9IGdmKCksIGRlbjQgPSBnZigpLFxuICAgICAgZGVuNiA9IGdmKCk7XG5cbiAgc2V0MjU1MTkoclsyXSwgZ2YxKTtcbiAgdW5wYWNrMjU1MTkoclsxXSwgcCk7XG4gIFMobnVtLCByWzFdKTtcbiAgTShkZW4sIG51bSwgRCk7XG4gIFoobnVtLCBudW0sIHJbMl0pO1xuICBBKGRlbiwgclsyXSwgZGVuKTtcblxuICBTKGRlbjIsIGRlbik7XG4gIFMoZGVuNCwgZGVuMik7XG4gIE0oZGVuNiwgZGVuNCwgZGVuMik7XG4gIE0odCwgZGVuNiwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuXG4gIHBvdzI1MjModCwgdCk7XG4gIE0odCwgdCwgbnVtKTtcbiAgTSh0LCB0LCBkZW4pO1xuICBNKHQsIHQsIGRlbik7XG4gIE0oclswXSwgdCwgZGVuKTtcblxuICBTKGNoaywgclswXSk7XG4gIE0oY2hrLCBjaGssIGRlbik7XG4gIGlmIChuZXEyNTUxOShjaGssIG51bSkpIE0oclswXSwgclswXSwgSSk7XG5cbiAgUyhjaGssIHJbMF0pO1xuICBNKGNoaywgY2hrLCBkZW4pO1xuICBpZiAobmVxMjU1MTkoY2hrLCBudW0pKSByZXR1cm4gLTE7XG5cbiAgaWYgKHBhcjI1NTE5KHJbMF0pID09PSAocFszMV0+PjcpKSBaKHJbMF0sIGdmMCwgclswXSk7XG5cbiAgTShyWzNdLCByWzBdLCByWzFdKTtcbiAgcmV0dXJuIDA7XG59XG5cbmZ1bmN0aW9uIGNyeXB0b19zaWduX29wZW4obSwgc20sIG4sIHBrKSB7XG4gIHZhciBpLCBtbGVuO1xuICB2YXIgdCA9IG5ldyBVaW50OEFycmF5KDMyKSwgaCA9IG5ldyBVaW50OEFycmF5KDY0KTtcbiAgdmFyIHAgPSBbZ2YoKSwgZ2YoKSwgZ2YoKSwgZ2YoKV0sXG4gICAgICBxID0gW2dmKCksIGdmKCksIGdmKCksIGdmKCldO1xuXG4gIG1sZW4gPSAtMTtcbiAgaWYgKG4gPCA2NCkgcmV0dXJuIC0xO1xuXG4gIGlmICh1bnBhY2tuZWcocSwgcGspKSByZXR1cm4gLTE7XG5cbiAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgbVtpXSA9IHNtW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgMzI7IGkrKykgbVtpKzMyXSA9IHBrW2ldO1xuICBjcnlwdG9faGFzaChoLCBtLCBuKTtcbiAgcmVkdWNlKGgpO1xuICBzY2FsYXJtdWx0KHAsIHEsIGgpO1xuXG4gIHNjYWxhcmJhc2UocSwgc20uc3ViYXJyYXkoMzIpKTtcbiAgYWRkKHAsIHEpO1xuICBwYWNrKHQsIHApO1xuXG4gIG4gLT0gNjQ7XG4gIGlmIChjcnlwdG9fdmVyaWZ5XzMyKHNtLCAwLCB0LCAwKSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSAwO1xuICAgIHJldHVybiAtMTtcbiAgfVxuXG4gIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIG1baV0gPSBzbVtpICsgNjRdO1xuICBtbGVuID0gbjtcbiAgcmV0dXJuIG1sZW47XG59XG5cbnZhciBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTID0gMjQsXG4gICAgY3J5cHRvX3NlY3JldGJveF9aRVJPQllURVMgPSAzMixcbiAgICBjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyA9IDE2LFxuICAgIGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTID0gMzIsXG4gICAgY3J5cHRvX3NjYWxhcm11bHRfU0NBTEFSQllURVMgPSAzMixcbiAgICBjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfQkVGT1JFTk1CWVRFUyA9IDMyLFxuICAgIGNyeXB0b19ib3hfTk9OQ0VCWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUyxcbiAgICBjcnlwdG9fYm94X1pFUk9CWVRFUyA9IGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTLFxuICAgIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVMsXG4gICAgY3J5cHRvX3NpZ25fQllURVMgPSA2NCxcbiAgICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyA9IDMyLFxuICAgIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTID0gNjQsXG4gICAgY3J5cHRvX3NpZ25fU0VFREJZVEVTID0gMzIsXG4gICAgY3J5cHRvX2hhc2hfQllURVMgPSA2NDtcblxubmFjbC5sb3dsZXZlbCA9IHtcbiAgY3J5cHRvX2NvcmVfaHNhbHNhMjA6IGNyeXB0b19jb3JlX2hzYWxzYTIwLFxuICBjcnlwdG9fc3RyZWFtX3hvcjogY3J5cHRvX3N0cmVhbV94b3IsXG4gIGNyeXB0b19zdHJlYW06IGNyeXB0b19zdHJlYW0sXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3I6IGNyeXB0b19zdHJlYW1fc2Fsc2EyMF94b3IsXG4gIGNyeXB0b19zdHJlYW1fc2Fsc2EyMDogY3J5cHRvX3N0cmVhbV9zYWxzYTIwLFxuICBjcnlwdG9fb25ldGltZWF1dGg6IGNyeXB0b19vbmV0aW1lYXV0aCxcbiAgY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeTogY3J5cHRvX29uZXRpbWVhdXRoX3ZlcmlmeSxcbiAgY3J5cHRvX3ZlcmlmeV8xNjogY3J5cHRvX3ZlcmlmeV8xNixcbiAgY3J5cHRvX3ZlcmlmeV8zMjogY3J5cHRvX3ZlcmlmeV8zMixcbiAgY3J5cHRvX3NlY3JldGJveDogY3J5cHRvX3NlY3JldGJveCxcbiAgY3J5cHRvX3NlY3JldGJveF9vcGVuOiBjcnlwdG9fc2VjcmV0Ym94X29wZW4sXG4gIGNyeXB0b19zY2FsYXJtdWx0OiBjcnlwdG9fc2NhbGFybXVsdCxcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZTogY3J5cHRvX3NjYWxhcm11bHRfYmFzZSxcbiAgY3J5cHRvX2JveF9iZWZvcmVubTogY3J5cHRvX2JveF9iZWZvcmVubSxcbiAgY3J5cHRvX2JveF9hZnRlcm5tOiBjcnlwdG9fYm94X2FmdGVybm0sXG4gIGNyeXB0b19ib3g6IGNyeXB0b19ib3gsXG4gIGNyeXB0b19ib3hfb3BlbjogY3J5cHRvX2JveF9vcGVuLFxuICBjcnlwdG9fYm94X2tleXBhaXI6IGNyeXB0b19ib3hfa2V5cGFpcixcbiAgY3J5cHRvX2hhc2g6IGNyeXB0b19oYXNoLFxuICBjcnlwdG9fc2lnbjogY3J5cHRvX3NpZ24sXG4gIGNyeXB0b19zaWduX2tleXBhaXI6IGNyeXB0b19zaWduX2tleXBhaXIsXG4gIGNyeXB0b19zaWduX29wZW46IGNyeXB0b19zaWduX29wZW4sXG5cbiAgY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUzogY3J5cHRvX3NlY3JldGJveF9LRVlCWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9OT05DRUJZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X05PTkNFQllURVMsXG4gIGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTOiBjcnlwdG9fc2VjcmV0Ym94X1pFUk9CWVRFUyxcbiAgY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM6IGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTLFxuICBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUzogY3J5cHRvX3NjYWxhcm11bHRfQllURVMsXG4gIGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTOiBjcnlwdG9fc2NhbGFybXVsdF9TQ0FMQVJCWVRFUyxcbiAgY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUzogY3J5cHRvX2JveF9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX2JveF9CRUZPUkVOTUJZVEVTOiBjcnlwdG9fYm94X0JFRk9SRU5NQllURVMsXG4gIGNyeXB0b19ib3hfTk9OQ0VCWVRFUzogY3J5cHRvX2JveF9OT05DRUJZVEVTLFxuICBjcnlwdG9fYm94X1pFUk9CWVRFUzogY3J5cHRvX2JveF9aRVJPQllURVMsXG4gIGNyeXB0b19ib3hfQk9YWkVST0JZVEVTOiBjcnlwdG9fYm94X0JPWFpFUk9CWVRFUyxcbiAgY3J5cHRvX3NpZ25fQllURVM6IGNyeXB0b19zaWduX0JZVEVTLFxuICBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUzogY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMsXG4gIGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTOiBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyxcbiAgY3J5cHRvX3NpZ25fU0VFREJZVEVTOiBjcnlwdG9fc2lnbl9TRUVEQllURVMsXG4gIGNyeXB0b19oYXNoX0JZVEVTOiBjcnlwdG9faGFzaF9CWVRFU1xufTtcblxuLyogSGlnaC1sZXZlbCBBUEkgKi9cblxuZnVuY3Rpb24gY2hlY2tMZW5ndGhzKGssIG4pIHtcbiAgaWYgKGsubGVuZ3RoICE9PSBjcnlwdG9fc2VjcmV0Ym94X0tFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBrZXkgc2l6ZScpO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgbm9uY2Ugc2l6ZScpO1xufVxuXG5mdW5jdGlvbiBjaGVja0JveExlbmd0aHMocGssIHNrKSB7XG4gIGlmIChway5sZW5ndGggIT09IGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpIHRocm93IG5ldyBFcnJvcignYmFkIHB1YmxpYyBrZXkgc2l6ZScpO1xuICBpZiAoc2subGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbn1cblxuZnVuY3Rpb24gY2hlY2tBcnJheVR5cGVzKCkge1xuICB2YXIgdCwgaTtcbiAgZm9yIChpID0gMDsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgICBpZiAoKHQgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoYXJndW1lbnRzW2ldKSkgIT09ICdbb2JqZWN0IFVpbnQ4QXJyYXldJylcbiAgICAgICB0aHJvdyBuZXcgVHlwZUVycm9yKCd1bmV4cGVjdGVkIHR5cGUgJyArIHQgKyAnLCB1c2UgVWludDhBcnJheScpO1xuICB9XG59XG5cbmZ1bmN0aW9uIGNsZWFudXAoYXJyKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSBhcnJbaV0gPSAwO1xufVxuXG4vLyBUT0RPOiBDb21wbGV0ZWx5IHJlbW92ZSB0aGlzIGluIHYwLjE1LlxuaWYgKCFuYWNsLnV0aWwpIHtcbiAgbmFjbC51dGlsID0ge307XG4gIG5hY2wudXRpbC5kZWNvZGVVVEY4ID0gbmFjbC51dGlsLmVuY29kZVVURjggPSBuYWNsLnV0aWwuZW5jb2RlQmFzZTY0ID0gbmFjbC51dGlsLmRlY29kZUJhc2U2NCA9IGZ1bmN0aW9uKCkge1xuICAgIHRocm93IG5ldyBFcnJvcignbmFjbC51dGlsIG1vdmVkIGludG8gc2VwYXJhdGUgcGFja2FnZTogaHR0cHM6Ly9naXRodWIuY29tL2RjaGVzdC90d2VldG5hY2wtdXRpbC1qcycpO1xuICB9O1xufVxuXG5uYWNsLnJhbmRvbUJ5dGVzID0gZnVuY3Rpb24obikge1xuICB2YXIgYiA9IG5ldyBVaW50OEFycmF5KG4pO1xuICByYW5kb21ieXRlcyhiLCBuKTtcbiAgcmV0dXJuIGI7XG59O1xuXG5uYWNsLnNlY3JldGJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIGtleSkge1xuICBjaGVja0FycmF5VHlwZXMobXNnLCBub25jZSwga2V5KTtcbiAgY2hlY2tMZW5ndGhzKGtleSwgbm9uY2UpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTICsgbXNnLmxlbmd0aCk7XG4gIHZhciBjID0gbmV3IFVpbnQ4QXJyYXkobS5sZW5ndGgpO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IG1zZy5sZW5ndGg7IGkrKykgbVtpK2NyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTXSA9IG1zZ1tpXTtcbiAgY3J5cHRvX3NlY3JldGJveChjLCBtLCBtLmxlbmd0aCwgbm9uY2UsIGtleSk7XG4gIHJldHVybiBjLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfQk9YWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94Lm9wZW4gPSBmdW5jdGlvbihib3gsIG5vbmNlLCBrZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKGJveCwgbm9uY2UsIGtleSk7XG4gIGNoZWNrTGVuZ3RocyhrZXksIG5vbmNlKTtcbiAgdmFyIGMgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFUyArIGJveC5sZW5ndGgpO1xuICB2YXIgbSA9IG5ldyBVaW50OEFycmF5KGMubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBib3gubGVuZ3RoOyBpKyspIGNbaStjcnlwdG9fc2VjcmV0Ym94X0JPWFpFUk9CWVRFU10gPSBib3hbaV07XG4gIGlmIChjLmxlbmd0aCA8IDMyKSByZXR1cm4gZmFsc2U7XG4gIGlmIChjcnlwdG9fc2VjcmV0Ym94X29wZW4obSwgYywgYy5sZW5ndGgsIG5vbmNlLCBrZXkpICE9PSAwKSByZXR1cm4gZmFsc2U7XG4gIHJldHVybiBtLnN1YmFycmF5KGNyeXB0b19zZWNyZXRib3hfWkVST0JZVEVTKTtcbn07XG5cbm5hY2wuc2VjcmV0Ym94LmtleUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfS0VZQllURVM7XG5uYWNsLnNlY3JldGJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19zZWNyZXRib3hfTk9OQ0VCWVRFUztcbm5hY2wuc2VjcmV0Ym94Lm92ZXJoZWFkTGVuZ3RoID0gY3J5cHRvX3NlY3JldGJveF9CT1haRVJPQllURVM7XG5cbm5hY2wuc2NhbGFyTXVsdCA9IGZ1bmN0aW9uKG4sIHApIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4sIHApO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgaWYgKHAubGVuZ3RoICE9PSBjcnlwdG9fc2NhbGFybXVsdF9CWVRFUykgdGhyb3cgbmV3IEVycm9yKCdiYWQgcCBzaXplJyk7XG4gIHZhciBxID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NjYWxhcm11bHRfQllURVMpO1xuICBjcnlwdG9fc2NhbGFybXVsdChxLCBuLCBwKTtcbiAgcmV0dXJuIHE7XG59O1xuXG5uYWNsLnNjYWxhck11bHQuYmFzZSA9IGZ1bmN0aW9uKG4pIHtcbiAgY2hlY2tBcnJheVR5cGVzKG4pO1xuICBpZiAobi5sZW5ndGggIT09IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTKSB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBuIHNpemUnKTtcbiAgdmFyIHEgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2NhbGFybXVsdF9CWVRFUyk7XG4gIGNyeXB0b19zY2FsYXJtdWx0X2Jhc2UocSwgbik7XG4gIHJldHVybiBxO1xufTtcblxubmFjbC5zY2FsYXJNdWx0LnNjYWxhckxlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X1NDQUxBUkJZVEVTO1xubmFjbC5zY2FsYXJNdWx0Lmdyb3VwRWxlbWVudExlbmd0aCA9IGNyeXB0b19zY2FsYXJtdWx0X0JZVEVTO1xuXG5uYWNsLmJveCA9IGZ1bmN0aW9uKG1zZywgbm9uY2UsIHB1YmxpY0tleSwgc2VjcmV0S2V5KSB7XG4gIHZhciBrID0gbmFjbC5ib3guYmVmb3JlKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIG5hY2wuc2VjcmV0Ym94KG1zZywgbm9uY2UsIGspO1xufTtcblxubmFjbC5ib3guYmVmb3JlID0gZnVuY3Rpb24ocHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgY2hlY2tCb3hMZW5ndGhzKHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgdmFyIGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X0JFRk9SRU5NQllURVMpO1xuICBjcnlwdG9fYm94X2JlZm9yZW5tKGssIHB1YmxpY0tleSwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIGs7XG59O1xuXG5uYWNsLmJveC5hZnRlciA9IG5hY2wuc2VjcmV0Ym94O1xuXG5uYWNsLmJveC5vcGVuID0gZnVuY3Rpb24obXNnLCBub25jZSwgcHVibGljS2V5LCBzZWNyZXRLZXkpIHtcbiAgdmFyIGsgPSBuYWNsLmJveC5iZWZvcmUocHVibGljS2V5LCBzZWNyZXRLZXkpO1xuICByZXR1cm4gbmFjbC5zZWNyZXRib3gub3Blbihtc2csIG5vbmNlLCBrKTtcbn07XG5cbm5hY2wuYm94Lm9wZW4uYWZ0ZXIgPSBuYWNsLnNlY3JldGJveC5vcGVuO1xuXG5uYWNsLmJveC5rZXlQYWlyID0gZnVuY3Rpb24oKSB7XG4gIHZhciBwayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19ib3hfUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX2JveF9rZXlwYWlyKHBrLCBzayk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLmJveC5rZXlQYWlyLmZyb21TZWNyZXRLZXkgPSBmdW5jdGlvbihzZWNyZXRLZXkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fYm94X1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fYm94X1BVQkxJQ0tFWUJZVEVTKTtcbiAgY3J5cHRvX3NjYWxhcm11bHRfYmFzZShwaywgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHtwdWJsaWNLZXk6IHBrLCBzZWNyZXRLZXk6IG5ldyBVaW50OEFycmF5KHNlY3JldEtleSl9O1xufTtcblxubmFjbC5ib3gucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX2JveF9QVUJMSUNLRVlCWVRFUztcbm5hY2wuYm94LnNlY3JldEtleUxlbmd0aCA9IGNyeXB0b19ib3hfU0VDUkVUS0VZQllURVM7XG5uYWNsLmJveC5zaGFyZWRLZXlMZW5ndGggPSBjcnlwdG9fYm94X0JFRk9SRU5NQllURVM7XG5uYWNsLmJveC5ub25jZUxlbmd0aCA9IGNyeXB0b19ib3hfTk9OQ0VCWVRFUztcbm5hY2wuYm94Lm92ZXJoZWFkTGVuZ3RoID0gbmFjbC5zZWNyZXRib3gub3ZlcmhlYWRMZW5ndGg7XG5cbm5hY2wuc2lnbiA9IGZ1bmN0aW9uKG1zZywgc2VjcmV0S2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNlY3JldEtleSk7XG4gIGlmIChzZWNyZXRLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWNyZXQga2V5IHNpemUnKTtcbiAgdmFyIHNpZ25lZE1zZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTK21zZy5sZW5ndGgpO1xuICBjcnlwdG9fc2lnbihzaWduZWRNc2csIG1zZywgbXNnLmxlbmd0aCwgc2VjcmV0S2V5KTtcbiAgcmV0dXJuIHNpZ25lZE1zZztcbn07XG5cbm5hY2wuc2lnbi5vcGVuID0gZnVuY3Rpb24oc2lnbmVkTXNnLCBwdWJsaWNLZXkpIHtcbiAgaWYgKGFyZ3VtZW50cy5sZW5ndGggIT09IDIpXG4gICAgdGhyb3cgbmV3IEVycm9yKCduYWNsLnNpZ24ub3BlbiBhY2NlcHRzIDIgYXJndW1lbnRzOyBkaWQgeW91IG1lYW4gdG8gdXNlIG5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnk/Jyk7XG4gIGNoZWNrQXJyYXlUeXBlcyhzaWduZWRNc2csIHB1YmxpY0tleSk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHRtcCA9IG5ldyBVaW50OEFycmF5KHNpZ25lZE1zZy5sZW5ndGgpO1xuICB2YXIgbWxlbiA9IGNyeXB0b19zaWduX29wZW4odG1wLCBzaWduZWRNc2csIHNpZ25lZE1zZy5sZW5ndGgsIHB1YmxpY0tleSk7XG4gIGlmIChtbGVuIDwgMCkgcmV0dXJuIG51bGw7XG4gIHZhciBtID0gbmV3IFVpbnQ4QXJyYXkobWxlbik7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbS5sZW5ndGg7IGkrKykgbVtpXSA9IHRtcFtpXTtcbiAgcmV0dXJuIG07XG59O1xuXG5uYWNsLnNpZ24uZGV0YWNoZWQgPSBmdW5jdGlvbihtc2csIHNlY3JldEtleSkge1xuICB2YXIgc2lnbmVkTXNnID0gbmFjbC5zaWduKG1zZywgc2VjcmV0S2V5KTtcbiAgdmFyIHNpZyA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX0JZVEVTKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBzaWcubGVuZ3RoOyBpKyspIHNpZ1tpXSA9IHNpZ25lZE1zZ1tpXTtcbiAgcmV0dXJuIHNpZztcbn07XG5cbm5hY2wuc2lnbi5kZXRhY2hlZC52ZXJpZnkgPSBmdW5jdGlvbihtc2csIHNpZywgcHVibGljS2V5KSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2csIHNpZywgcHVibGljS2V5KTtcbiAgaWYgKHNpZy5sZW5ndGggIT09IGNyeXB0b19zaWduX0JZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNpZ25hdHVyZSBzaXplJyk7XG4gIGlmIChwdWJsaWNLZXkubGVuZ3RoICE9PSBjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBwdWJsaWMga2V5IHNpemUnKTtcbiAgdmFyIHNtID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fQllURVMgKyBtc2cubGVuZ3RoKTtcbiAgdmFyIG0gPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9CWVRFUyArIG1zZy5sZW5ndGgpO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMDsgaSA8IGNyeXB0b19zaWduX0JZVEVTOyBpKyspIHNtW2ldID0gc2lnW2ldO1xuICBmb3IgKGkgPSAwOyBpIDwgbXNnLmxlbmd0aDsgaSsrKSBzbVtpK2NyeXB0b19zaWduX0JZVEVTXSA9IG1zZ1tpXTtcbiAgcmV0dXJuIChjcnlwdG9fc2lnbl9vcGVuKG0sIHNtLCBzbS5sZW5ndGgsIHB1YmxpY0tleSkgPj0gMCk7XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpciA9IGZ1bmN0aW9uKCkge1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIHZhciBzayA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKTtcbiAgY3J5cHRvX3NpZ25fa2V5cGFpcihwaywgc2spO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogc2t9O1xufTtcblxubmFjbC5zaWduLmtleVBhaXIuZnJvbVNlY3JldEtleSA9IGZ1bmN0aW9uKHNlY3JldEtleSkge1xuICBjaGVja0FycmF5VHlwZXMoc2VjcmV0S2V5KTtcbiAgaWYgKHNlY3JldEtleS5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFQ1JFVEtFWUJZVEVTKVxuICAgIHRocm93IG5ldyBFcnJvcignYmFkIHNlY3JldCBrZXkgc2l6ZScpO1xuICB2YXIgcGsgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9QVUJMSUNLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgcGsubGVuZ3RoOyBpKyspIHBrW2ldID0gc2VjcmV0S2V5WzMyK2ldO1xuICByZXR1cm4ge3B1YmxpY0tleTogcGssIHNlY3JldEtleTogbmV3IFVpbnQ4QXJyYXkoc2VjcmV0S2V5KX07XG59O1xuXG5uYWNsLnNpZ24ua2V5UGFpci5mcm9tU2VlZCA9IGZ1bmN0aW9uKHNlZWQpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHNlZWQpO1xuICBpZiAoc2VlZC5sZW5ndGggIT09IGNyeXB0b19zaWduX1NFRURCWVRFUylcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCBzZWVkIHNpemUnKTtcbiAgdmFyIHBrID0gbmV3IFVpbnQ4QXJyYXkoY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVMpO1xuICB2YXIgc2sgPSBuZXcgVWludDhBcnJheShjcnlwdG9fc2lnbl9TRUNSRVRLRVlCWVRFUyk7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgMzI7IGkrKykgc2tbaV0gPSBzZWVkW2ldO1xuICBjcnlwdG9fc2lnbl9rZXlwYWlyKHBrLCBzaywgdHJ1ZSk7XG4gIHJldHVybiB7cHVibGljS2V5OiBwaywgc2VjcmV0S2V5OiBza307XG59O1xuXG5uYWNsLnNpZ24ucHVibGljS2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fUFVCTElDS0VZQllURVM7XG5uYWNsLnNpZ24uc2VjcmV0S2V5TGVuZ3RoID0gY3J5cHRvX3NpZ25fU0VDUkVUS0VZQllURVM7XG5uYWNsLnNpZ24uc2VlZExlbmd0aCA9IGNyeXB0b19zaWduX1NFRURCWVRFUztcbm5hY2wuc2lnbi5zaWduYXR1cmVMZW5ndGggPSBjcnlwdG9fc2lnbl9CWVRFUztcblxubmFjbC5oYXNoID0gZnVuY3Rpb24obXNnKSB7XG4gIGNoZWNrQXJyYXlUeXBlcyhtc2cpO1xuICB2YXIgaCA9IG5ldyBVaW50OEFycmF5KGNyeXB0b19oYXNoX0JZVEVTKTtcbiAgY3J5cHRvX2hhc2goaCwgbXNnLCBtc2cubGVuZ3RoKTtcbiAgcmV0dXJuIGg7XG59O1xuXG5uYWNsLmhhc2guaGFzaExlbmd0aCA9IGNyeXB0b19oYXNoX0JZVEVTO1xuXG5uYWNsLnZlcmlmeSA9IGZ1bmN0aW9uKHgsIHkpIHtcbiAgY2hlY2tBcnJheVR5cGVzKHgsIHkpO1xuICAvLyBaZXJvIGxlbmd0aCBhcmd1bWVudHMgYXJlIGNvbnNpZGVyZWQgbm90IGVxdWFsLlxuICBpZiAoeC5sZW5ndGggPT09IDAgfHwgeS5sZW5ndGggPT09IDApIHJldHVybiBmYWxzZTtcbiAgaWYgKHgubGVuZ3RoICE9PSB5Lmxlbmd0aCkgcmV0dXJuIGZhbHNlO1xuICByZXR1cm4gKHZuKHgsIDAsIHksIDAsIHgubGVuZ3RoKSA9PT0gMCkgPyB0cnVlIDogZmFsc2U7XG59O1xuXG5uYWNsLnNldFBSTkcgPSBmdW5jdGlvbihmbikge1xuICByYW5kb21ieXRlcyA9IGZuO1xufTtcblxuKGZ1bmN0aW9uKCkge1xuICAvLyBJbml0aWFsaXplIFBSTkcgaWYgZW52aXJvbm1lbnQgcHJvdmlkZXMgQ1NQUk5HLlxuICAvLyBJZiBub3QsIG1ldGhvZHMgY2FsbGluZyByYW5kb21ieXRlcyB3aWxsIHRocm93LlxuICB2YXIgY3J5cHRvID0gdHlwZW9mIHNlbGYgIT09ICd1bmRlZmluZWQnID8gKHNlbGYuY3J5cHRvIHx8IHNlbGYubXNDcnlwdG8pIDogbnVsbDtcbiAgaWYgKGNyeXB0byAmJiBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKSB7XG4gICAgLy8gQnJvd3NlcnMuXG4gICAgdmFyIFFVT1RBID0gNjU1MzY7XG4gICAgbmFjbC5zZXRQUk5HKGZ1bmN0aW9uKHgsIG4pIHtcbiAgICAgIHZhciBpLCB2ID0gbmV3IFVpbnQ4QXJyYXkobik7XG4gICAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSArPSBRVU9UQSkge1xuICAgICAgICBjcnlwdG8uZ2V0UmFuZG9tVmFsdWVzKHYuc3ViYXJyYXkoaSwgaSArIE1hdGgubWluKG4gLSBpLCBRVU9UQSkpKTtcbiAgICAgIH1cbiAgICAgIGZvciAoaSA9IDA7IGkgPCBuOyBpKyspIHhbaV0gPSB2W2ldO1xuICAgICAgY2xlYW51cCh2KTtcbiAgICB9KTtcbiAgfSBlbHNlIGlmICh0eXBlb2YgcmVxdWlyZSAhPT0gJ3VuZGVmaW5lZCcpIHtcbiAgICAvLyBOb2RlLmpzLlxuICAgIGNyeXB0byA9IHJlcXVpcmUoJ2NyeXB0bycpO1xuICAgIGlmIChjcnlwdG8gJiYgY3J5cHRvLnJhbmRvbUJ5dGVzKSB7XG4gICAgICBuYWNsLnNldFBSTkcoZnVuY3Rpb24oeCwgbikge1xuICAgICAgICB2YXIgaSwgdiA9IGNyeXB0by5yYW5kb21CeXRlcyhuKTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykgeFtpXSA9IHZbaV07XG4gICAgICAgIGNsZWFudXAodik7XG4gICAgICB9KTtcbiAgICB9XG4gIH1cbn0pKCk7XG5cbn0pKHR5cGVvZiBtb2R1bGUgIT09ICd1bmRlZmluZWQnICYmIG1vZHVsZS5leHBvcnRzID8gbW9kdWxlLmV4cG9ydHMgOiAoc2VsZi5uYWNsID0gc2VsZi5uYWNsIHx8IHt9KSk7XG5cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL34vdHdlZXRuYWNsL25hY2wtZmFzdC5qc1xuLy8gbW9kdWxlIGlkID0gOTJcbi8vIG1vZHVsZSBjaHVua3MgPSAwIiwiLyogKGlnbm9yZWQpICovXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gdmVydHggKGlnbm9yZWQpXG4vLyBtb2R1bGUgaWQgPSA5M1xuLy8gbW9kdWxlIGNodW5rcyA9IDAiLCIvKiAoaWdub3JlZCkgKi9cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyBjcnlwdG8gKGlnbm9yZWQpXG4vLyBtb2R1bGUgaWQgPSA5NFxuLy8gbW9kdWxlIGNodW5rcyA9IDAiXSwic291cmNlUm9vdCI6IiJ9 \ No newline at end of file diff --git a/dist/node/Ed25519Keypair.js b/dist/node/Ed25519Keypair.js new file mode 100644 index 0000000..ff05b91 --- /dev/null +++ b/dist/node/Ed25519Keypair.js @@ -0,0 +1,43 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = Ed25519Keypair; + +var _bs = require('bs58'); + +var _bs2 = _interopRequireDefault(_bs); + +var _tweetnacl = require('tweetnacl'); + +var _tweetnacl2 = _interopRequireDefault(_tweetnacl); + +var _jsSha = require('js-sha3'); + +var _jsSha2 = _interopRequireDefault(_jsSha); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @class Keypair Ed25519 keypair in base58 (as BigchainDB expects base58 keys) + * @type {Object} + * @param {number} [secret] A seed that will be used as a key derivation function + * @property {string} publicKey + * @property {string} privateKey + */ +function Ed25519Keypair(secret) { + var keyPair = void 0; + if (secret) { + // Quick and dirty: use key derivation function instead + var secretHash = _jsSha2.default.sha3_256.create().update(secret).array(); + keyPair = _tweetnacl2.default.sign.keyPair.fromSeed(new Uint8Array(secretHash)); + } else { + keyPair = _tweetnacl2.default.sign.keyPair(); + } + this.publicKey = _bs2.default.encode(keyPair.publicKey); + // tweetnacl's generated secret key is the secret key + public key (resulting in a 64-byte buffer) + this.privateKey = _bs2.default.encode(keyPair.secretKey.slice(0, 32)); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/baseRequest.js b/dist/node/baseRequest.js new file mode 100644 index 0000000..f2677b5 --- /dev/null +++ b/dist/node/baseRequest.js @@ -0,0 +1,106 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.default = baseRequest; + +var _es6Promise = require('es6-promise'); + +var _fetchPonyfill = require('fetch-ponyfill'); + +var _fetchPonyfill2 = _interopRequireDefault(_fetchPonyfill); + +var _sprintfJs = require('sprintf-js'); + +var _format_text = require('./format_text'); + +var _format_text2 = _interopRequireDefault(_format_text); + +var _stringify_as_query_param = require('./stringify_as_query_param'); + +var _stringify_as_query_param2 = _interopRequireDefault(_stringify_as_query_param); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function _objectWithoutProperties(obj, keys) { var target = {}; for (var i in obj) { if (keys.indexOf(i) >= 0) continue; if (!Object.prototype.hasOwnProperty.call(obj, i)) continue; target[i] = obj[i]; } return target; } + +var fetch = (0, _fetchPonyfill2.default)(_es6Promise.Promise); + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Global fetch wrapper that adds some basic error handling and ease of use enhancements. + * Considers any non-2xx response as an error. + * + * For more information on fetch, see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch. + * + * Expects fetch to already be available (either in a ES6 environment, bundled through webpack, or + * injected through a polyfill). + * + * @param {string} url Url to request. Can be specified as a sprintf format string (see + * https://github.com/alexei/sprintf.js) that will be resolved using + * `config.urlTemplateSpec`. + * @param {object} config Additional configuration, mostly passed to fetch as its 'init' config + * (see https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch#Parameters). + * @param {*} config.jsonBody Json payload to the request. Will automatically be + * JSON.stringify()-ed and override `config.body`. + * @param {string|object} config.query Query parameter to append to the end of the url. + * If specified as an object, keys will be + * decamelized into snake case first. + * @param {*[]|object} config.urlTemplateSpec Format spec to use to expand the url (see sprintf). + * @param {*} config.* All other options are passed through to fetch. + * + * @return {Promise} Promise that will resolve with the response if its status was 2xx; + * otherwise rejects with the response + */ +function baseRequest(url) { + var _ref = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + + var jsonBody = _ref.jsonBody, + query = _ref.query, + urlTemplateSpec = _ref.urlTemplateSpec, + fetchConfig = _objectWithoutProperties(_ref, ['jsonBody', 'query', 'urlTemplateSpec']); + + var expandedUrl = url; + + if (urlTemplateSpec != null) { + if (Array.isArray(urlTemplateSpec) && urlTemplateSpec.length) { + // Use vsprintf for the array call signature + expandedUrl = (0, _sprintfJs.vsprintf)(url, urlTemplateSpec); + } else if (urlTemplateSpec && (typeof urlTemplateSpec === 'undefined' ? 'undefined' : _typeof(urlTemplateSpec)) === 'object' && Object.keys(urlTemplateSpec).length) { + expandedUrl = (0, _format_text2.default)(url, urlTemplateSpec); + } else if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line no-console + console.warn('Supplied urlTemplateSpec was not an array or object. Ignoring...'); + } + } + + if (query != null) { + if (typeof query === 'string') { + expandedUrl += query; + } else if (query && (typeof query === 'undefined' ? 'undefined' : _typeof(query)) === 'object') { + expandedUrl += (0, _stringify_as_query_param2.default)(query); + } else if (process.env.NODE_ENV !== 'production') { + // eslint-disable-next-line no-console + console.warn('Supplied query was not a string or object. Ignoring...'); + } + } + + if (jsonBody != null) { + fetchConfig.body = JSON.stringify(jsonBody); + } + + return fetch.fetch(expandedUrl, fetchConfig).then(function (res) { + // If status is not a 2xx (based on Response.ok), assume it's an error + // See https://developer.mozilla.org/en-US/docs/Web/API/GlobalFetch/fetch + if (!(res && res.ok)) { + throw res; + } + return res; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/getApiUrls.js b/dist/node/connection/getApiUrls.js new file mode 100644 index 0000000..1536ffd --- /dev/null +++ b/dist/node/connection/getApiUrls.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getApiUrls; +function getApiUrls(API_PATH) { + return { + 'blocks': API_PATH + 'blocks', + 'blocks_detail': API_PATH + 'blocks/%(blockId)s', + 'outputs': API_PATH + 'outputs', + 'statuses': API_PATH + 'statuses', + 'transactions': API_PATH + 'transactions', + 'transactions_detail': API_PATH + 'transactions/%(txId)s', + 'votes': API_PATH + 'votes' + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/getBlock.js b/dist/node/connection/getBlock.js new file mode 100644 index 0000000..68029c7 --- /dev/null +++ b/dist/node/connection/getBlock.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getBlock; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param blockId + * @param API_PATH + */ +function getBlock(blockId, API_PATH) { + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['blocks_detail'], { + urlTemplateSpec: { + blockId: blockId + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/getStatus.js b/dist/node/connection/getStatus.js new file mode 100644 index 0000000..f1a8990 --- /dev/null +++ b/dist/node/connection/getStatus.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getStatus; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param tx_id + * @param API_PATH + */ +function getStatus(tx_id, API_PATH) { + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['statuses'], { + query: { + tx_id: tx_id + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/getTransaction.js b/dist/node/connection/getTransaction.js new file mode 100644 index 0000000..d4d4933 --- /dev/null +++ b/dist/node/connection/getTransaction.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = getTransaction; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param txId + * @param API_PATH + */ +function getTransaction(txId, API_PATH) { + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['transactions_detail'], { + urlTemplateSpec: { + txId: txId + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/index.js b/dist/node/connection/index.js new file mode 100644 index 0000000..e122cf4 --- /dev/null +++ b/dist/node/connection/index.js @@ -0,0 +1,54 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.postTransaction = exports.pollStatusAndFetchTransaction = exports.listVotes = exports.listTransactions = exports.listOutputs = exports.listBlocks = exports.getStatus = exports.getTransaction = exports.getBlock = undefined; + +var _getBlock2 = require('./getBlock'); + +var _getBlock3 = _interopRequireDefault(_getBlock2); + +var _getTransaction2 = require('./getTransaction'); + +var _getTransaction3 = _interopRequireDefault(_getTransaction2); + +var _getStatus2 = require('./getStatus'); + +var _getStatus3 = _interopRequireDefault(_getStatus2); + +var _listBlocks2 = require('./listBlocks'); + +var _listBlocks3 = _interopRequireDefault(_listBlocks2); + +var _listOutputs2 = require('./listOutputs'); + +var _listOutputs3 = _interopRequireDefault(_listOutputs2); + +var _listTransactions2 = require('./listTransactions'); + +var _listTransactions3 = _interopRequireDefault(_listTransactions2); + +var _listVotes2 = require('./listVotes'); + +var _listVotes3 = _interopRequireDefault(_listVotes2); + +var _pollStatusAndFetchTransaction2 = require('./pollStatusAndFetchTransaction'); + +var _pollStatusAndFetchTransaction3 = _interopRequireDefault(_pollStatusAndFetchTransaction2); + +var _postTransaction2 = require('./postTransaction'); + +var _postTransaction3 = _interopRequireDefault(_postTransaction2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.getBlock = _getBlock3.default; +exports.getTransaction = _getTransaction3.default; +exports.getStatus = _getStatus3.default; +exports.listBlocks = _listBlocks3.default; +exports.listOutputs = _listOutputs3.default; +exports.listTransactions = _listTransactions3.default; +exports.listVotes = _listVotes3.default; +exports.pollStatusAndFetchTransaction = _pollStatusAndFetchTransaction3.default; +exports.postTransaction = _postTransaction3.default; \ No newline at end of file diff --git a/dist/node/connection/listBlocks.js b/dist/node/connection/listBlocks.js new file mode 100644 index 0000000..68a3c9e --- /dev/null +++ b/dist/node/connection/listBlocks.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = listBlocks; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param tx_id + * @param status + * @param API_PATH + */ +function listBlocks(_ref, API_PATH) { + var tx_id = _ref.tx_id, + status = _ref.status; + + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['blocks'], { + query: { + tx_id: tx_id, + status: status + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/listOutputs.js b/dist/node/connection/listOutputs.js new file mode 100644 index 0000000..0da2882 --- /dev/null +++ b/dist/node/connection/listOutputs.js @@ -0,0 +1,37 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = listOutputs; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param public_key + * @param unspent + * @param API_PATH + * @param onlyJsonResponse + */ +function listOutputs(_ref, API_PATH) { + var public_key = _ref.public_key, + unspent = _ref.unspent; + var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['outputs'], { + query: { + public_key: public_key, + unspent: unspent + } + }, onlyJsonResponse); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/listTransactions.js b/dist/node/connection/listTransactions.js new file mode 100644 index 0000000..8d7665e --- /dev/null +++ b/dist/node/connection/listTransactions.js @@ -0,0 +1,35 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = listTransactions; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param asset_id + * @param operation + * @param API_PATH + */ +function listTransactions(_ref, API_PATH) { + var asset_id = _ref.asset_id, + operation = _ref.operation; + + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['transactions'], { + query: { + asset_id: asset_id, + operation: operation + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/listVotes.js b/dist/node/connection/listVotes.js new file mode 100644 index 0000000..d9faf7f --- /dev/null +++ b/dist/node/connection/listVotes.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = listVotes; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * @param block_id + * @param API_PATH + */ +function listVotes(block_id, API_PATH) { + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['votes'], { + query: { + block_id: block_id + } + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/connection/pollStatusAndFetchTransaction.js b/dist/node/connection/pollStatusAndFetchTransaction.js new file mode 100644 index 0000000..249a233 --- /dev/null +++ b/dist/node/connection/pollStatusAndFetchTransaction.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +exports.default = function (tx_id, API_PATH) { + return new Promise(function (resolve, reject) { + var timer = setInterval(function () { + (0, _getStatus2.default)(tx_id, API_PATH).then(function (res) { + console.log('Fetched transaction status:', res); + if (res.status === 'valid') { + clearInterval(timer); + (0, _getTransaction2.default)(tx_id, API_PATH).then(function (res) { + console.log('Fetched transaction:', res); + resolve(res); + }); + } + }).catch(function (err) { + clearInterval(timer); + reject(err); + }); + }, 500); + }); +}; + +var _getTransaction = require('./getTransaction'); + +var _getTransaction2 = _interopRequireDefault(_getTransaction); + +var _getStatus = require('./getStatus'); + +var _getStatus2 = _interopRequireDefault(_getStatus); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +module.exports = exports['default']; + +/** + * @public + * @param tx_id + * @param API_PATH + * @return {Promise} + */ \ No newline at end of file diff --git a/dist/node/connection/postTransaction.js b/dist/node/connection/postTransaction.js new file mode 100644 index 0000000..4b781e3 --- /dev/null +++ b/dist/node/connection/postTransaction.js @@ -0,0 +1,30 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = postTransaction; + +var _getApiUrls = require('./getApiUrls'); + +var _getApiUrls2 = _interopRequireDefault(_getApiUrls); + +var _request = require('../request'); + +var _request2 = _interopRequireDefault(_request); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * + * @param transaction + * @param API_PATH + */ +function postTransaction(transaction, API_PATH) { + return (0, _request2.default)((0, _getApiUrls2.default)(API_PATH)['transactions'], { + method: 'POST', + jsonBody: transaction + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/format_text.js b/dist/node/format_text.js new file mode 100644 index 0000000..6a6d14f --- /dev/null +++ b/dist/node/format_text.js @@ -0,0 +1,109 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.default = formatText; + +var _sprintfJs = require('sprintf-js'); + +// Regexes taken from or inspired by sprintf-js +var Regex = { + TEMPLATE_LITERAL: /\${([^\)]+?)}/g, + KEY: /^([a-z_][a-z_\d]*)/i, + KEY_ACCESS: /^\.([a-z_][a-z_\d]*)/i, + INDEX_ACCESS: /^\[(\d+)\]/ +}; + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Formats strings similarly to C's sprintf, with the addition of '${...}' formats. + * + * Makes a first pass replacing '${...}' formats before passing the expanded string and other + * arguments to sprintf-js. For more information on what sprintf can do, see + * https://github.com/alexei/sprintf.js. + * + * Examples: + * formatText('Hi there ${dimi}!', { dimi: 'Dimi' }) + * => 'Hi there Dimi!' + * + * formatText('${database} is %(status)s', { database: 'BigchainDB', status: 'big' }) + * => 'BigchainDB is big' + * + * Like sprintf-js, string interpolation for keywords and indexes is supported too: + * formatText('Berlin is best known for its ${berlin.topKnownFor[0].name}', { + * berlin: { + * topKnownFor: [{ + * name: 'Currywurst' + * }, ... + * ] + * } + * }) + * => 'Berlin is best known for its Currywurst' + */ +function formatText(s) { + var expandedFormatStr = s; + + // Try to replace formats of the form '${...}' if named replacement fields are used + + for (var _len = arguments.length, argv = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + argv[_key - 1] = arguments[_key]; + } + + if (s && argv.length === 1 && _typeof(argv[0]) === 'object') { + var templateSpecObj = argv[0]; + + expandedFormatStr = s.replace(Regex.TEMPLATE_LITERAL, function (match, replacement) { + var interpolationLeft = replacement; + + /** + * Interpolation algorithm inspired by sprintf-js. + * + * Goes through the replacement string getting the left-most key or index to interpolate + * on each pass. `value` at each step holds the last interpolation result, `curMatch` is + * the current property match, and `interpolationLeft` is the portion of the replacement + * string still to be interpolated. + * + * It's useful to note that RegExp.exec() returns with an array holding: + * [0]: Full string matched + * [1+]: Matching groups + * + * And that in the regexes defined, the first matching group always corresponds to the + * property matched. + */ + var value = void 0; + var curMatch = Regex.KEY.exec(interpolationLeft); + if (curMatch !== null) { + value = templateSpecObj[curMatch[1]]; + + // Assigning in the conditionals here makes the code less bloated + /* eslint-disable no-cond-assign */ + while ((interpolationLeft = interpolationLeft.substring(curMatch[0].length)) && value != null) { + if (curMatch = Regex.KEY_ACCESS.exec(interpolationLeft)) { + value = value[curMatch[1]]; + } else if (curMatch = Regex.INDEX_ACCESS.exec(interpolationLeft)) { + value = value[curMatch[1]]; + } else { + break; + } + } + /* eslint-enable no-cond-assign */ + } + + // If there's anything left to interpolate by the end then we've failed to interpolate + // the entire replacement string. + if (interpolationLeft.length) { + throw new SyntaxError('[formatText] failed to parse named argument key: ' + replacement); + } + + return value; + }); + } + + return _sprintfJs.sprintf.apply(undefined, [expandedFormatStr].concat(argv)); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/request.js b/dist/node/request.js new file mode 100644 index 0000000..398bb0b --- /dev/null +++ b/dist/node/request.js @@ -0,0 +1,61 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = request; + +var _baseRequest = require('./baseRequest'); + +var _baseRequest2 = _interopRequireDefault(_baseRequest); + +var _sanitize = require('./sanitize'); + +var _sanitize2 = _interopRequireDefault(_sanitize); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +var DEFAULT_REQUEST_CONFIG = { + credentials: 'include', + headers: { + 'Accept': 'application/json' + } +}; + +/** + * Small wrapper around js-utility-belt's request that provides url resolving, default settings, and + * response handling. + */ +function request(url) { + var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {}; + var onlyJsonResponse = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + // Load default fetch configuration and remove any falsy query parameters + var requestConfig = _extends({}, DEFAULT_REQUEST_CONFIG, config, { + query: config.query && (0, _sanitize2.default)(config.query) + }); + var apiUrl = url; + + if (requestConfig.jsonBody) { + requestConfig.headers = _extends({}, requestConfig.headers, { + 'Content-Type': 'application/json' + }); + } + if (!url) { + return Promise.reject(new Error('Request was not given a url.')); + } + + return (0, _baseRequest2.default)(apiUrl, requestConfig).then(function (res) { + return onlyJsonResponse ? res.json() : { + json: res.json(), + url: res.url + }; + }).catch(function (err) { + console.error(err); + throw err; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/sanitize.js b/dist/node/sanitize.js new file mode 100644 index 0000000..8b90f69 --- /dev/null +++ b/dist/node/sanitize.js @@ -0,0 +1,97 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = sanitize; + +var _includes = require('core-js/library/fn/array/includes'); + +var _includes2 = _interopRequireDefault(_includes); + +var _entries = require('core-js/library/fn/object/entries'); + +var _entries2 = _interopRequireDefault(_entries); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * Abstraction for selectFromObject and omitFromObject for DRYness. + * Set isInclusion to true if the filter should be for including the filtered items (ie. selecting + * only them vs omitting only them). + */ +function filterFromObject(obj, filter) { + var _ref = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : {}, + _ref$isInclusion = _ref.isInclusion, + isInclusion = _ref$isInclusion === undefined ? true : _ref$isInclusion; + + if (filter && Array.isArray(filter)) { + return applyFilterOnObject(obj, isInclusion ? function (_, key) { + return (0, _includes2.default)(filter, key); + } : function (_, key) { + return !(0, _includes2.default)(filter, key); + }); + } else if (filter && typeof filter === 'function') { + // Flip the filter fn's return if it's for inclusion + return applyFilterOnObject(obj, isInclusion ? filter : function () { + return !filter.apply(undefined, arguments); + }); + } else { + throw new Error('The given filter is not an array or function. Exclude aborted'); + } +} + +/** + * Returns a filtered copy of the given object's own enumerable properties (no inherited + * properties), keeping any keys that pass the given filter function. + */ +function applyFilterOnObject(obj, filterFn) { + if (filterFn == null) { + return _extends({}, obj); + } + + var filteredObj = {}; + (0, _entries2.default)(obj).forEach(function (_ref2) { + var _ref3 = _slicedToArray(_ref2, 2), + key = _ref3[0], + val = _ref3[1]; + + if (filterFn(val, key)) { + filteredObj[key] = val; + } + }); + + return filteredObj; +} + +/** + * Similar to lodash's _.pick(), this returns a copy of the given object's + * own and inherited enumerable properties, selecting only the keys in + * the given array or whose value pass the given filter function. + * @param {object} obj Source object + * @param {array|function} filter Array of key names to select or function to invoke per iteration + * @return {object} The new object + */ +function selectFromObject(obj, filter) { + return filterFromObject(obj, filter); +} + +/** + * Glorified selectFromObject. Takes an object and returns a filtered shallow copy that strips out + * any properties that are falsy (including coercions, ie. undefined, null, '', 0, ...). + * Does not modify the passed in object. + * + * @param {object} obj Javascript object + * @return {object} Sanitized Javascript object + */ +function sanitize(obj) { + return selectFromObject(obj, function (val) { + return !!val; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/sha256Hash.js b/dist/node/sha256Hash.js new file mode 100644 index 0000000..c58cd70 --- /dev/null +++ b/dist/node/sha256Hash.js @@ -0,0 +1,17 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = sha256Hash; + +var _jsSha = require('js-sha3'); + +var _jsSha2 = _interopRequireDefault(_jsSha); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function sha256Hash(data) { + return _jsSha2.default.sha3_256.create().update(data).hex(); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/stringify_as_query_param.js b/dist/node/stringify_as_query_param.js new file mode 100644 index 0000000..7e1365c --- /dev/null +++ b/dist/node/stringify_as_query_param.js @@ -0,0 +1,70 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _slicedToArray = function () { function sliceIterator(arr, i) { var _arr = []; var _n = true; var _d = false; var _e = undefined; try { for (var _i = arr[Symbol.iterator](), _s; !(_n = (_s = _i.next()).done); _n = true) { _arr.push(_s.value); if (i && _arr.length === i) break; } } catch (err) { _d = true; _e = err; } finally { try { if (!_n && _i["return"]) _i["return"](); } finally { if (_d) throw _e; } } return _arr; } return function (arr, i) { if (Array.isArray(arr)) { return arr; } else if (Symbol.iterator in Object(arr)) { return sliceIterator(arr, i); } else { throw new TypeError("Invalid attempt to destructure non-iterable instance"); } }; }(); + +var _typeof = typeof Symbol === "function" && typeof Symbol.iterator === "symbol" ? function (obj) { return typeof obj; } : function (obj) { return obj && typeof Symbol === "function" && obj.constructor === Symbol && obj !== Symbol.prototype ? "symbol" : typeof obj; }; + +exports.default = stringifyAsQueryParam; + +var _entries = require('core-js/library/fn/object/entries'); + +var _entries2 = _interopRequireDefault(_entries); + +var _decamelize = require('decamelize'); + +var _decamelize2 = _interopRequireDefault(_decamelize); + +var _queryString = require('query-string'); + +var _queryString2 = _interopRequireDefault(_queryString); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * imported from https://github.com/bigchaindb/js-utility-belt/ + * + * Takes a key-value dictionary (ie. object) and converts it to a query-parameter string that you + * can directly append into a URL. + * + * Extends queryString.stringify by allowing you to specify a `transform` function that will be + * invoked on each of the dictionary's keys before being stringified into the query-parameter + * string. + * + * By default `transform` is `decamelize`, so a dictionary of the form: + * + * { + * page: 1, + * pageSize: 10 + * } + * + * will be converted to a string like: + * + * ?page=1&page_size=10 + * + * @param {object} obj Query params dictionary + * @param {function} [transform=decamelize] Transform function for each of the param keys + * @return {string} Query param string + */ +function stringifyAsQueryParam(obj) { + var transform = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : _decamelize2.default; + + if (!obj || (typeof obj === 'undefined' ? 'undefined' : _typeof(obj)) !== 'object' || !Object.keys(obj).length) { + return ''; + } + + var transformedKeysObj = (0, _entries2.default)(obj).reduce(function (paramsObj, _ref) { + var _ref2 = _slicedToArray(_ref, 2), + key = _ref2[0], + value = _ref2[1]; + + paramsObj[transform(key)] = value; + return paramsObj; + }, {}); + + return '?' + _queryString2.default.stringify(transformedKeysObj); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/hashTransaction.js b/dist/node/transaction/hashTransaction.js new file mode 100644 index 0000000..10316a2 --- /dev/null +++ b/dist/node/transaction/hashTransaction.js @@ -0,0 +1,28 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); + +var _extends = Object.assign || function (target) { for (var i = 1; i < arguments.length; i++) { var source = arguments[i]; for (var key in source) { if (Object.prototype.hasOwnProperty.call(source, key)) { target[key] = source[key]; } } } return target; }; + +exports.default = hashTransaction; + +var _serializeTransactionIntoCanonicalString = require('./serializeTransactionIntoCanonicalString'); + +var _serializeTransactionIntoCanonicalString2 = _interopRequireDefault(_serializeTransactionIntoCanonicalString); + +var _sha256Hash = require('../sha256Hash'); + +var _sha256Hash2 = _interopRequireDefault(_sha256Hash); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function hashTransaction(transaction) { + // Safely remove any tx id from the given transaction for hashing + var tx = _extends({}, transaction); + delete tx.id; + + return (0, _sha256Hash2.default)((0, _serializeTransactionIntoCanonicalString2.default)(tx)); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/index.js b/dist/node/transaction/index.js new file mode 100644 index 0000000..9ef56df --- /dev/null +++ b/dist/node/transaction/index.js @@ -0,0 +1,64 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.ccJsonify = exports.ccJsonLoad = exports.signTransaction = exports.serializeTransactionIntoCanonicalString = exports.makeTransferTransaction = exports.makeTransaction = exports.makeOutput = exports.makeCreateTransaction = exports.makeThresholdCondition = exports.makeSha256Condition = exports.makeEd25519Condition = undefined; + +var _makeEd25519Condition2 = require('./makeEd25519Condition'); + +var _makeEd25519Condition3 = _interopRequireDefault(_makeEd25519Condition2); + +var _makeSha256Condition2 = require('./makeSha256Condition'); + +var _makeSha256Condition3 = _interopRequireDefault(_makeSha256Condition2); + +var _makeThresholdCondition2 = require('./makeThresholdCondition'); + +var _makeThresholdCondition3 = _interopRequireDefault(_makeThresholdCondition2); + +var _makeCreateTransaction2 = require('./makeCreateTransaction'); + +var _makeCreateTransaction3 = _interopRequireDefault(_makeCreateTransaction2); + +var _makeOutput2 = require('./makeOutput'); + +var _makeOutput3 = _interopRequireDefault(_makeOutput2); + +var _makeTransaction2 = require('./makeTransaction'); + +var _makeTransaction3 = _interopRequireDefault(_makeTransaction2); + +var _makeTransferTransaction2 = require('./makeTransferTransaction'); + +var _makeTransferTransaction3 = _interopRequireDefault(_makeTransferTransaction2); + +var _serializeTransactionIntoCanonicalString2 = require('./serializeTransactionIntoCanonicalString'); + +var _serializeTransactionIntoCanonicalString3 = _interopRequireDefault(_serializeTransactionIntoCanonicalString2); + +var _signTransaction2 = require('./signTransaction'); + +var _signTransaction3 = _interopRequireDefault(_signTransaction2); + +var _ccJsonLoad2 = require('./utils/ccJsonLoad'); + +var _ccJsonLoad3 = _interopRequireDefault(_ccJsonLoad2); + +var _ccJsonify2 = require('./utils/ccJsonify'); + +var _ccJsonify3 = _interopRequireDefault(_ccJsonify2); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +exports.makeEd25519Condition = _makeEd25519Condition3.default; +exports.makeSha256Condition = _makeSha256Condition3.default; +exports.makeThresholdCondition = _makeThresholdCondition3.default; +exports.makeCreateTransaction = _makeCreateTransaction3.default; +exports.makeOutput = _makeOutput3.default; +exports.makeTransaction = _makeTransaction3.default; +exports.makeTransferTransaction = _makeTransferTransaction3.default; +exports.serializeTransactionIntoCanonicalString = _serializeTransactionIntoCanonicalString3.default; +exports.signTransaction = _signTransaction3.default; +exports.ccJsonLoad = _ccJsonLoad3.default; +exports.ccJsonify = _ccJsonify3.default; \ No newline at end of file diff --git a/dist/node/transaction/makeCreateTransaction.js b/dist/node/transaction/makeCreateTransaction.js new file mode 100644 index 0000000..6e9d7f8 --- /dev/null +++ b/dist/node/transaction/makeCreateTransaction.js @@ -0,0 +1,52 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeCreateTransaction; + +var _makeInputTemplate = require('./makeInputTemplate'); + +var _makeInputTemplate2 = _interopRequireDefault(_makeInputTemplate); + +var _makeTransaction = require('./makeTransaction'); + +var _makeTransaction2 = _interopRequireDefault(_makeTransaction); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Generate a `CREATE` transaction holding the `asset`, `metadata`, and `outputs`, to be signed by + * the `issuers`. + * @param {object} asset Created asset's data + * @param {object} metadata Metadata for the Transaction + * @param {object[]} outputs Array of Output objects to add to the Transaction. + * Think of these as the recipients of the asset after the transaction. + * For `CREATE` Transactions, this should usually just be a list of + * Outputs wrapping Ed25519 Conditions generated from the issuers' public + * keys (so that the issuers are the recipients of the created asset). + * @param {...string[]} issuers Public key of one or more issuers to the asset being created by this + * Transaction. + * Note: Each of the private keys corresponding to the given public + * keys MUST be used later (and in the same order) when signing the + * Transaction (`signTransaction()`). + * @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before + * sending it off! + */ +function makeCreateTransaction(asset, metadata, outputs) { + var assetDefinition = { + 'data': asset || null + }; + + for (var _len = arguments.length, issuers = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + issuers[_key - 3] = arguments[_key]; + } + + var inputs = issuers.map(function (issuer) { + return (0, _makeInputTemplate2.default)([issuer]); + }); + + return (0, _makeTransaction2.default)('CREATE', assetDefinition, metadata, outputs, inputs); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeEd25519Condition.js b/dist/node/transaction/makeEd25519Condition.js new file mode 100644 index 0000000..e69dff3 --- /dev/null +++ b/dist/node/transaction/makeEd25519Condition.js @@ -0,0 +1,45 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeEd25519Condition; + +var _buffer = require('buffer'); + +var _bs = require('bs58'); + +var _bs2 = _interopRequireDefault(_bs); + +var _fiveBellsCondition = require('five-bells-condition'); + +var _fiveBellsCondition2 = _interopRequireDefault(_fiveBellsCondition); + +var _ccJsonify = require('./utils/ccJsonify'); + +var _ccJsonify2 = _interopRequireDefault(_ccJsonify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Create an Ed25519 Cryptocondition from an Ed25519 public key to put into an Output of a Transaction + * @param {string} publicKey base58 encoded Ed25519 public key for the recipient of the Transaction + * @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type + * @returns {object} Ed25519 Condition (that will need to wrapped in an Output) + */ +function makeEd25519Condition(publicKey) { + var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + var publicKeyBuffer = new _buffer.Buffer(_bs2.default.decode(publicKey)); + + var ed25519Fulfillment = new _fiveBellsCondition2.default.Ed25519(); + ed25519Fulfillment.setPublicKey(publicKeyBuffer); + + if (json) { + return (0, _ccJsonify2.default)(ed25519Fulfillment); + } + + return ed25519Fulfillment; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeInputTemplate.js b/dist/node/transaction/makeInputTemplate.js new file mode 100644 index 0000000..b930bba --- /dev/null +++ b/dist/node/transaction/makeInputTemplate.js @@ -0,0 +1,18 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeInputTemplate; +function makeInputTemplate() { + var publicKeys = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : []; + var fulfills = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : null; + var fulfillment = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + + return { + fulfillment: fulfillment, + fulfills: fulfills, + 'owners_before': publicKeys + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeOutput.js b/dist/node/transaction/makeOutput.js new file mode 100644 index 0000000..f5ff5e9 --- /dev/null +++ b/dist/node/transaction/makeOutput.js @@ -0,0 +1,24 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeOutput; +/** + * @public + * Create an Output from a Condition. + * Note: Assumes the given Condition was generated from a single public key (e.g. a Ed25519 Condition) + * @param {object} condition Condition (e.g. a Ed25519 Condition from `makeEd25519Condition()`) + * @param {number} amount Amount of the output + * @returns {object} An Output usable in a Transaction + */ +function makeOutput(condition) { + var amount = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : 1; + + return { + amount: JSON.stringify(amount), + condition: condition, + 'public_keys': condition.details.hasOwnProperty('public_key') ? [condition.details.public_key] : [] + }; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeSha256Condition.js b/dist/node/transaction/makeSha256Condition.js new file mode 100644 index 0000000..f3ca295 --- /dev/null +++ b/dist/node/transaction/makeSha256Condition.js @@ -0,0 +1,38 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeSha256Condition; + +var _buffer = require('buffer'); + +var _fiveBellsCondition = require('five-bells-condition'); + +var _fiveBellsCondition2 = _interopRequireDefault(_fiveBellsCondition); + +var _ccJsonify = require('./utils/ccJsonify'); + +var _ccJsonify2 = _interopRequireDefault(_ccJsonify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Create a Preimage-Sha256 Cryptocondition from a secret to put into an Output of a Transaction + * @param {string} preimage Preimage to be hashed and wrapped in a crypto-condition + * @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type + * @returns {object} Preimage-Sha256 Condition (that will need to wrapped in an Output) + */ +function makeSha256Condition(preimage) { + var json = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : true; + + var sha256Fulfillment = new _fiveBellsCondition2.default.PreimageSha256(); + sha256Fulfillment.preimage = new _buffer.Buffer(preimage); + + if (json) { + return (0, _ccJsonify2.default)(sha256Fulfillment); + } + return sha256Fulfillment; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeThresholdCondition.js b/dist/node/transaction/makeThresholdCondition.js new file mode 100644 index 0000000..aa36b59 --- /dev/null +++ b/dist/node/transaction/makeThresholdCondition.js @@ -0,0 +1,44 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeThresholdCondition; + +var _fiveBellsCondition = require('five-bells-condition'); + +var _fiveBellsCondition2 = _interopRequireDefault(_fiveBellsCondition); + +var _ccJsonify = require('./utils/ccJsonify'); + +var _ccJsonify2 = _interopRequireDefault(_ccJsonify); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Create an Sha256 Threshold Cryptocondition from threshold to put into an Output of a Transaction + * @param {number} threshold + * @param {Array} [subconditions=[]] + * @param {boolean} [json=true] If true returns a json object otherwise a crypto-condition type + * @returns {object} Sha256 Threshold Condition (that will need to wrapped in an Output) + */ +function makeThresholdCondition(threshold) { + var subconditions = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : []; + var json = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : true; + + var thresholdCondition = new _fiveBellsCondition2.default.ThresholdSha256(); + thresholdCondition.threshold = threshold; + + subconditions.forEach(function (subcondition) { + // TODO: add support for Condition and URIs + thresholdCondition.addSubfulfillment(subcondition); + }); + + if (json) { + return (0, _ccJsonify2.default)(thresholdCondition); + } + + return thresholdCondition; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeTransaction.js b/dist/node/transaction/makeTransaction.js new file mode 100644 index 0000000..d882390 --- /dev/null +++ b/dist/node/transaction/makeTransaction.js @@ -0,0 +1,42 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeTransaction; + +var _hashTransaction = require('./hashTransaction'); + +var _hashTransaction2 = _interopRequireDefault(_hashTransaction); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +function makeTransactionTemplate() { + return { + 'id': null, + 'operation': null, + 'outputs': [], + 'inputs': [], + 'metadata': null, + 'asset': null, + 'version': '0.9' + }; +} + +function makeTransaction(operation, asset) { + var metadata = arguments.length > 2 && arguments[2] !== undefined ? arguments[2] : null; + var outputs = arguments.length > 3 && arguments[3] !== undefined ? arguments[3] : []; + var inputs = arguments.length > 4 && arguments[4] !== undefined ? arguments[4] : []; + + var tx = makeTransactionTemplate(); + tx.operation = operation; + tx.asset = asset; + tx.metadata = metadata; + tx.inputs = inputs; + tx.outputs = outputs; + + // Hashing must be done after, as the hash is of the Transaction (up to now) + tx.id = (0, _hashTransaction2.default)(tx); + return tx; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/makeTransferTransaction.js b/dist/node/transaction/makeTransferTransaction.js new file mode 100644 index 0000000..b4f0439 --- /dev/null +++ b/dist/node/transaction/makeTransferTransaction.js @@ -0,0 +1,59 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = makeTransferTransaction; + +var _makeInputTemplate = require('./makeInputTemplate'); + +var _makeInputTemplate2 = _interopRequireDefault(_makeInputTemplate); + +var _makeTransaction = require('./makeTransaction'); + +var _makeTransaction2 = _interopRequireDefault(_makeTransaction); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Generate a `TRANSFER` transaction holding the `asset`, `metadata`, and `outputs`, that fulfills + * the `fulfilledOutputs` of `unspentTransaction`. + * @param {object} unspentTransaction Previous Transaction you have control over (i.e. can fulfill + * its Output Condition) + * @param {object} metadata Metadata for the Transaction + * @param {object[]} outputs Array of Output objects to add to the Transaction. + * Think of these as the recipients of the asset after the transaction. + * For `TRANSFER` Transactions, this should usually just be a list of + * Outputs wrapping Ed25519 Conditions generated from the public keys of + * the recipients. + * @param {...number} fulfilledOutputs Indices of the Outputs in `unspentTransaction` that this + * Transaction fulfills. + * Note that the public keys listed in the fulfilled Outputs + * must be used (and in the same order) to sign the Transaction + * (`signTransaction()`). + * @returns {object} Unsigned transaction -- make sure to call signTransaction() on it before + * sending it off! + */ +function makeTransferTransaction(unspentTransaction, metadata, outputs) { + for (var _len = arguments.length, fulfilledOutputs = Array(_len > 3 ? _len - 3 : 0), _key = 3; _key < _len; _key++) { + fulfilledOutputs[_key - 3] = arguments[_key]; + } + + var inputs = fulfilledOutputs.map(function (outputIndex) { + var fulfilledOutput = unspentTransaction.outputs[outputIndex]; + var transactionLink = { + 'output': outputIndex, + 'txid': unspentTransaction.id + }; + + return (0, _makeInputTemplate2.default)(fulfilledOutput.public_keys, transactionLink); + }); + + var assetLink = { + 'id': unspentTransaction.operation === 'CREATE' ? unspentTransaction.id : unspentTransaction.asset.id + }; + + return (0, _makeTransaction2.default)('TRANSFER', assetLink, metadata, outputs, inputs); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/serializeTransactionIntoCanonicalString.js b/dist/node/transaction/serializeTransactionIntoCanonicalString.js new file mode 100644 index 0000000..48601f8 --- /dev/null +++ b/dist/node/transaction/serializeTransactionIntoCanonicalString.js @@ -0,0 +1,33 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = serializeTransactionIntoCanonicalString; + +var _jsonStableStringify = require('json-stable-stringify'); + +var _jsonStableStringify2 = _interopRequireDefault(_jsonStableStringify); + +var _clone = require('clone'); + +var _clone2 = _interopRequireDefault(_clone); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Canonically serializes a transaction into a string by sorting the keys + * @param {object} (transaction) + * @return {string} a canonically serialized Transaction + */ +function serializeTransactionIntoCanonicalString(transaction) { + // BigchainDB signs fulfillments by serializing transactions into a "canonical" format where + var tx = (0, _clone2.default)(transaction); + // TODO: set fulfillments to null + // Sort the keys + return (0, _jsonStableStringify2.default)(tx, function (a, b) { + return a.key > b.key ? 1 : -1; + }); +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/signTransaction.js b/dist/node/transaction/signTransaction.js new file mode 100644 index 0000000..b0d179e --- /dev/null +++ b/dist/node/transaction/signTransaction.js @@ -0,0 +1,59 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = signTransaction; + +var _buffer = require('buffer'); + +var _bs = require('bs58'); + +var _bs2 = _interopRequireDefault(_bs); + +var _fiveBellsCondition = require('five-bells-condition'); + +var _fiveBellsCondition2 = _interopRequireDefault(_fiveBellsCondition); + +var _clone = require('clone'); + +var _clone2 = _interopRequireDefault(_clone); + +var _serializeTransactionIntoCanonicalString = require('./serializeTransactionIntoCanonicalString'); + +var _serializeTransactionIntoCanonicalString2 = _interopRequireDefault(_serializeTransactionIntoCanonicalString); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Sign the given `transaction` with the given `privateKey`s, returning a new copy of `transaction` + * that's been signed. + * Note: Only generates Ed25519 Fulfillments. Thresholds and other types of Fulfillments are left as + * an exercise for the user. + * @param {object} transaction Transaction to sign. `transaction` is not modified. + * @param {...string} privateKeys Private keys associated with the issuers of the `transaction`. + * Looped through to iteratively sign any Input Fulfillments found in + * the `transaction`. + * @returns {object} The signed version of `transaction`. + */ +function signTransaction(transaction) { + for (var _len = arguments.length, privateKeys = Array(_len > 1 ? _len - 1 : 0), _key = 1; _key < _len; _key++) { + privateKeys[_key - 1] = arguments[_key]; + } + + var signedTx = (0, _clone2.default)(transaction); + signedTx.inputs.forEach(function (input, index) { + var privateKey = privateKeys[index]; + var privateKeyBuffer = new _buffer.Buffer(_bs2.default.decode(privateKey)); + var serializedTransaction = (0, _serializeTransactionIntoCanonicalString2.default)(transaction); + var ed25519Fulfillment = new _fiveBellsCondition2.default.Ed25519(); + ed25519Fulfillment.sign(new _buffer.Buffer(serializedTransaction), privateKeyBuffer); + var fulfillmentUri = ed25519Fulfillment.serializeUri(); + + input.fulfillment = fulfillmentUri; + }); + + return signedTx; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/utils/ccJsonLoad.js b/dist/node/transaction/utils/ccJsonLoad.js new file mode 100644 index 0000000..4c3acda --- /dev/null +++ b/dist/node/transaction/utils/ccJsonLoad.js @@ -0,0 +1,60 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ccJsonLoad; + +var _bs = require('bs58'); + +var _bs2 = _interopRequireDefault(_bs); + +var _fiveBellsCondition = require('five-bells-condition'); + +var _fiveBellsCondition2 = _interopRequireDefault(_fiveBellsCondition); + +var _buffer = require('buffer'); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Loads a crypto-condition class (Fulfillment or Condition) from a BigchainDB JSON object + * @param {object} conditionJson + * @returns {cc.Condition} Ed25519 Condition (that will need to wrapped in an Output) + */ +function ccJsonLoad(conditionJson) { + + if ('hash' in conditionJson) { + var condition = new _fiveBellsCondition2.default.Condition(); + condition.type = conditionJson.type_id; + condition.bitmask = conditionJson.bitmask; + condition.hash = new _buffer.Buffer(_bs2.default.decode(conditionJson.hash)); + condition.maxFulfillmentLength = parseInt(conditionJson.max_fulfillment_length, 10); + return condition; + } else { + var fulfillment = void 0; + + if (conditionJson.type_id === 2) { + fulfillment = new _fiveBellsCondition2.default.ThresholdSha256(); + fulfillment.threshold = conditionJson.threshold; + conditionJson.subfulfillments.forEach(function (subfulfillment) { + subfulfillment = ccJsonLoad(subfulfillment); + if ('getConditionUri' in subfulfillment) fulfillment.addSubfulfillment(subfulfillment);else if ('serializeUri' in subfulfillment) fulfillment.addSubcondition(subfulfillment); + }); + } + + if (conditionJson.type_id === 0) { + fulfillment = new _fiveBellsCondition2.default.PreimageSha256(); + fulfillment.preimage = new _buffer.Buffer(conditionJson.preimage); + } + + if (conditionJson.type_id === 4) { + fulfillment = new _fiveBellsCondition2.default.Ed25519(); + fulfillment.publicKey = new _buffer.Buffer(_bs2.default.decode(conditionJson.public_key)); + if (conditionJson.signature) fulfillment.signature = new _buffer.Buffer(_bs2.default.decode(conditionJson.signature)); + } + return fulfillment; + } +} +module.exports = exports['default']; \ No newline at end of file diff --git a/dist/node/transaction/utils/ccJsonify.js b/dist/node/transaction/utils/ccJsonify.js new file mode 100644 index 0000000..ba7e35e --- /dev/null +++ b/dist/node/transaction/utils/ccJsonify.js @@ -0,0 +1,75 @@ +'use strict'; + +Object.defineProperty(exports, "__esModule", { + value: true +}); +exports.default = ccJsonify; + +var _bs = require('bs58'); + +var _bs2 = _interopRequireDefault(_bs); + +function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; } + +/** + * @public + * Serializes a crypto-condition class (Condition or Fulfillment) into a BigchainDB-compatible JSON + * @param {cc.Fulfillment} fulfillment base58 encoded Ed25519 public key for the recipient of the Transaction + * @returns {object} Ed25519 Condition (that will need to wrapped in an Output) + */ +function ccJsonify(fulfillment) { + + var conditionUri = void 0; + + if ('getConditionUri' in fulfillment) conditionUri = fulfillment.getConditionUri();else if ('serializeUri' in fulfillment) conditionUri = fulfillment.serializeUri(); + + var jsonBody = { + 'details': {}, + 'uri': conditionUri + }; + + if (fulfillment.getTypeId() === 0) { + jsonBody.details.type_id = 0; + jsonBody.details.bitmask = 3; + + if ('preimage' in fulfillment) { + jsonBody.details.preimage = fulfillment.preimage.toString(); + jsonBody.details.type = 'fulfillment'; + } + } + + if (fulfillment.getTypeId() === 2) return { + 'details': { + 'type_id': 2, + 'type': 'fulfillment', + 'bitmask': fulfillment.getBitmask(), + 'threshold': fulfillment.threshold, + 'subfulfillments': fulfillment.subconditions.map(function (subcondition) { + var subconditionJson = ccJsonify(subcondition.body); + subconditionJson.details.weight = 1; + return subconditionJson.details; + }) + }, + 'uri': conditionUri + }; + + if (fulfillment.getTypeId() === 4) { + jsonBody.details.type_id = 4; + jsonBody.details.bitmask = 32; + + if ('publicKey' in fulfillment) { + jsonBody.details.signature = null; + jsonBody.details.public_key = _bs2.default.encode(fulfillment.publicKey); + jsonBody.details.type = 'fulfillment'; + } + } + + if ('hash' in fulfillment) { + jsonBody.details.hash = _bs2.default.encode(fulfillment.hash); + jsonBody.details.max_fulfillment_length = fulfillment.maxFulfillmentLength; + jsonBody.details.type = 'condition'; + } + + return jsonBody; +} +module.exports = exports['default']; \ No newline at end of file diff --git a/package.json b/package.json index c1583db..df46cf6 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "js-bigchaindb-driver", - "version": "0.0.1", + "version": "0.0.2", "description": "JavaScript driver for BigchainDB (node + browser)", "homepage": "https://www.bigchaindb.com/", "bugs": "https://github.com/bigchaindb/js-bigchaindb-driver/issues", diff --git a/webpack.config.js b/webpack.config.js index 27de5e8..9b2dc9c 100644 --- a/webpack.config.js +++ b/webpack.config.js @@ -47,7 +47,7 @@ const config = { output: { filename: PRODUCTION ? 'bundle.min.js' : 'bundle.js', - library: 'js-bigchaindb-quickstart', + library: 'js-bigchaindb-driver', libraryTarget: 'umd', path: PATHS.BUNDLE, },