{"version":3,"sources":["NewsPCBefore.js"],"sourcesContent":["/******/ (function(modules) { // webpackBootstrap\n/******/ \t// The module cache\n/******/ \tvar installedModules = {};\n/******/\n/******/ \t// The require function\n/******/ \tfunction __webpack_require__(moduleId) {\n/******/\n/******/ \t\t// Check if module is in cache\n/******/ \t\tif(installedModules[moduleId]) {\n/******/ \t\t\treturn installedModules[moduleId].exports;\n/******/ \t\t}\n/******/ \t\t// Create a new module (and put it into the cache)\n/******/ \t\tvar module = installedModules[moduleId] = {\n/******/ \t\t\ti: moduleId,\n/******/ \t\t\tl: false,\n/******/ \t\t\texports: {}\n/******/ \t\t};\n/******/\n/******/ \t\t// Execute the module function\n/******/ \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n/******/\n/******/ \t\t// Flag the module as loaded\n/******/ \t\tmodule.l = true;\n/******/\n/******/ \t\t// Return the exports of the module\n/******/ \t\treturn module.exports;\n/******/ \t}\n/******/\n/******/\n/******/ \t// expose the modules object (__webpack_modules__)\n/******/ \t__webpack_require__.m = modules;\n/******/\n/******/ \t// expose the module cache\n/******/ \t__webpack_require__.c = installedModules;\n/******/\n/******/ \t// identity function for calling harmony imports with the correct context\n/******/ \t__webpack_require__.i = function(value) { return value; };\n/******/\n/******/ \t// define getter function for harmony exports\n/******/ \t__webpack_require__.d = function(exports, name, getter) {\n/******/ \t\tif(!__webpack_require__.o(exports, name)) {\n/******/ \t\t\tObject.defineProperty(exports, name, {\n/******/ \t\t\t\tconfigurable: false,\n/******/ \t\t\t\tenumerable: true,\n/******/ \t\t\t\tget: getter\n/******/ \t\t\t});\n/******/ \t\t}\n/******/ \t};\n/******/\n/******/ \t// getDefaultExport function for compatibility with non-harmony modules\n/******/ \t__webpack_require__.n = function(module) {\n/******/ \t\tvar getter = module && module.__esModule ?\n/******/ \t\t\tfunction getDefault() { return module['default']; } :\n/******/ \t\t\tfunction getModuleExports() { return module; };\n/******/ \t\t__webpack_require__.d(getter, 'a', getter);\n/******/ \t\treturn getter;\n/******/ \t};\n/******/\n/******/ \t// Object.prototype.hasOwnProperty.call\n/******/ \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n/******/\n/******/ \t// __webpack_public_path__\n/******/ \t__webpack_require__.p = \"\";\n/******/\n/******/ \t// Load entry module and return exports\n/******/ \treturn __webpack_require__(__webpack_require__.s = 19);\n/******/ })\n/************************************************************************/\n/******/ ({\n\n/***/ 0:\n/***/ (function(module, exports) {\n\n/*\r\n * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message\r\n * Digest Algorithm, as defined in RFC 1321.\r\n * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002.\r\n * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet\r\n * Distributed under the BSD License\r\n * See http://pajhome.org.uk/crypt/md5 for more info.\r\n */\r\n\r\n/*\r\n * Configurable variables. You may need to tweak these to be compatible with\r\n * the server-side, but the defaults work in most cases.\r\n */\r\nvar hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */\r\nvar b64pad = \"\"; /* base-64 pad character. \"=\" for strict RFC compliance */\r\nvar chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */\r\n\r\n/*\r\n * These are the functions you'll usually want to call\r\n * They take string arguments and return either hex or base-64 encoded strings\r\n */\r\nfunction hex_md5(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction b64_md5(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction str_md5(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));}\r\nfunction hex_hmac_md5(key, data) { return binl2hex(core_hmac_md5(key, data)); }\r\nfunction b64_hmac_md5(key, data) { return binl2b64(core_hmac_md5(key, data)); }\r\nfunction str_hmac_md5(key, data) { return binl2str(core_hmac_md5(key, data)); }\r\n\r\n/*\r\n * Perform a simple self-test to see if the VM is working\r\n */\r\nfunction md5_vm_test()\r\n{\r\n return hex_md5(\"abc\") == \"900150983cd24fb0d6963f7d28e17f72\";\r\n}\r\n\r\n/*\r\n * Calculate the MD5 of an array of little-endian words, and a bit length\r\n */\r\nfunction core_md5(x, len)\r\n{\r\n /* append padding */\r\n x[len >> 5] |= 0x80 << ((len) % 32);\r\n x[(((len + 64) >>> 9) << 4) + 14] = len;\r\n\r\n var a = 1732584193;\r\n var b = -271733879;\r\n var c = -1732584194;\r\n var d = 271733878;\r\n\r\n for(var i = 0; i < x.length; i += 16)\r\n {\r\n var olda = a;\r\n var oldb = b;\r\n var oldc = c;\r\n var oldd = d;\r\n\r\n a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936);\r\n d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586);\r\n c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819);\r\n b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330);\r\n a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897);\r\n d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426);\r\n c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341);\r\n b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983);\r\n a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416);\r\n d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417);\r\n c = md5_ff(c, d, a, b, x[i+10], 17, -42063);\r\n b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162);\r\n a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682);\r\n d = md5_ff(d, a, b, c, x[i+13], 12, -40341101);\r\n c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290);\r\n b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329);\r\n\r\n a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510);\r\n d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632);\r\n c = md5_gg(c, d, a, b, x[i+11], 14, 643717713);\r\n b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302);\r\n a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691);\r\n d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083);\r\n c = md5_gg(c, d, a, b, x[i+15], 14, -660478335);\r\n b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848);\r\n a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438);\r\n d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690);\r\n c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961);\r\n b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501);\r\n a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467);\r\n d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784);\r\n c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473);\r\n b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734);\r\n\r\n a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558);\r\n d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463);\r\n c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562);\r\n b = md5_hh(b, c, d, a, x[i+14], 23, -35309556);\r\n a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060);\r\n d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353);\r\n c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632);\r\n b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640);\r\n a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174);\r\n d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222);\r\n c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979);\r\n b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189);\r\n a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487);\r\n d = md5_hh(d, a, b, c, x[i+12], 11, -421815835);\r\n c = md5_hh(c, d, a, b, x[i+15], 16, 530742520);\r\n b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651);\r\n\r\n a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844);\r\n d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415);\r\n c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905);\r\n b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055);\r\n a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571);\r\n d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606);\r\n c = md5_ii(c, d, a, b, x[i+10], 15, -1051523);\r\n b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799);\r\n a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359);\r\n d = md5_ii(d, a, b, c, x[i+15], 10, -30611744);\r\n c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380);\r\n b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649);\r\n a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070);\r\n d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379);\r\n c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259);\r\n b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551);\r\n\r\n a = safe_add(a, olda);\r\n b = safe_add(b, oldb);\r\n c = safe_add(c, oldc);\r\n d = safe_add(d, oldd);\r\n }\r\n return Array(a, b, c, d);\r\n\r\n}\r\n\r\n/*\r\n * These functions implement the four basic operations the algorithm uses.\r\n */\r\nfunction md5_cmn(q, a, b, x, s, t)\r\n{\r\n return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b);\r\n}\r\nfunction md5_ff(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t);\r\n}\r\nfunction md5_gg(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t);\r\n}\r\nfunction md5_hh(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn(b ^ c ^ d, a, b, x, s, t);\r\n}\r\nfunction md5_ii(a, b, c, d, x, s, t)\r\n{\r\n return md5_cmn(c ^ (b | (~d)), a, b, x, s, t);\r\n}\r\n\r\n/*\r\n * Calculate the HMAC-MD5, of a key and some data\r\n */\r\nfunction core_hmac_md5(key, data)\r\n{\r\n var bkey = str2binl(key);\r\n if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz);\r\n\r\n var ipad = Array(16), opad = Array(16);\r\n for(var i = 0; i < 16; i++)\r\n {\r\n ipad[i] = bkey[i] ^ 0x36363636;\r\n opad[i] = bkey[i] ^ 0x5C5C5C5C;\r\n }\r\n\r\n var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz);\r\n return core_md5(opad.concat(hash), 512 + 128);\r\n}\r\n\r\n/*\r\n * Add integers, wrapping at 2^32. This uses 16-bit operations internally\r\n * to work around bugs in some JS interpreters.\r\n */\r\nfunction safe_add(x, y)\r\n{\r\n var lsw = (x & 0xFFFF) + (y & 0xFFFF);\r\n var msw = (x >> 16) + (y >> 16) + (lsw >> 16);\r\n return (msw << 16) | (lsw & 0xFFFF);\r\n}\r\n\r\n/*\r\n * Bitwise rotate a 32-bit number to the left.\r\n */\r\nfunction bit_rol(num, cnt)\r\n{\r\n return (num << cnt) | (num >>> (32 - cnt));\r\n}\r\n\r\n/*\r\n * Convert a string to an array of little-endian words\r\n * If chrsz is ASCII, characters >255 have their hi-byte silently ignored.\r\n */\r\nfunction str2binl(str)\r\n{\r\n var bin = Array();\r\n var mask = (1 << chrsz) - 1;\r\n for(var i = 0; i < str.length * chrsz; i += chrsz)\r\n bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32);\r\n return bin;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a string\r\n */\r\nfunction binl2str(bin)\r\n{\r\n var str = \"\";\r\n var mask = (1 << chrsz) - 1;\r\n for(var i = 0; i < bin.length * 32; i += chrsz)\r\n str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask);\r\n return str;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a hex string.\r\n */\r\nfunction binl2hex(binarray)\r\n{\r\n var hex_tab = hexcase ? \"0123456789ABCDEF\" : \"0123456789abcdef\";\r\n var str = \"\";\r\n for(var i = 0; i < binarray.length * 4; i++)\r\n {\r\n str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) +\r\n hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF);\r\n }\r\n return str;\r\n}\r\n\r\n/*\r\n * Convert an array of little-endian words to a base-64 string\r\n */\r\nfunction binl2b64(binarray)\r\n{\r\n var tab = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\r\n var str = \"\";\r\n for(var i = 0; i < binarray.length * 4; i += 3)\r\n {\r\n var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16)\r\n | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 )\r\n | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF);\r\n for(var j = 0; j < 4; j++)\r\n {\r\n if(i * 8 + j * 6 > binarray.length * 32) str += b64pad;\r\n else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F);\r\n }\r\n }\r\n return str;\r\n}\r\n\r\nmodule.exports = hex_md5\n\n/***/ }),\n\n/***/ 1:\n/***/ (function(module, exports) {\n\nmodule.exports = function(){\r\n !function EM_Vote($) {\r\n //格式化投票数\r\n function gshVoteNum(numb) {\r\n if (numb < 10000) {\r\n return numb;\r\n } else {\r\n return parseFloat(numb / 10000).toFixed(2) + \"万\";\r\n }\r\n }\r\n //投票比例\r\n function VoteZhanBi(sumVote, curVote) {\r\n if (sumVote == 0 || curVote == 0) {\r\n return 0;\r\n }\r\n return parseFloat(curVote / sumVote * 100).toFixed(2);\r\n }\r\n //占比条宽度计算\r\n function VoteZhanBiWidth(zhanBi,maxWidth) {\r\n if (zhanBi == 0 || maxWidth == 0) {\r\n return 0;\r\n }\r\n \r\n return parseFloat(zhanBi / 100 * maxWidth).toFixed(2);\r\n }\r\n // 获取cookie\r\n function getVoteCookie(key) {\r\n var cookieArray = document.cookie.split(\";\");\r\n for (var i = 0; i < cookieArray.length; i++) {\r\n var arr = cookieArray[i].split(\"=\");\r\n if (arr[0].replace(\" \", \"\") == key)\r\n return unescape(arr[1]);\r\n }\r\n return \"\";\r\n }\r\n // 设置cookie\r\n function setVoteCookie(key, value, expires) {\r\n var date = new Date();\r\n var ms = expires * 60 * 60 * 1000;//参数传进来的单位是小时\r\n date.setTime(date.getTime() + ms);\r\n var str = key + \"=\" + escape(value);\r\n str += \"; expires=\" + date.toUTCString() + \"; domain=\" + location.host + \";\";\r\n document.cookie = str;\r\n }\r\n \r\n var _isLockVote = [];//投票按钮是否处于锁定状态,放置连续点击投票按钮\r\n $(\"body\").on(\"click\", \".btn_vote\", function () {//投票点击事件\r\n var _this = $(this);\r\n\r\n var _vote_id = _this.attr(\"vote_id\");\r\n var _vote_title = _this.attr(\"vote_title\");\r\n if (_vote_id == \"\") {\r\n return;\r\n }\r\n var _chooseIds = \"\";//Vi_Id单个的选项id;Vi_Vm_Id一道题1个id;选项一个id;Vi_Vg_Id一个投票一个id\r\n //Vi_Id单个的选项id;Vi_Vm_Id一道题1个id;选项一个id;Vi_Vg_Id一个投票一个id\r\n\r\n\r\n var _timu = [];//当前投票总的题目\r\n $('.vote_' + _vote_id + \" .votetype_li\").each(function () {\r\n var vivmid = $(this).attr(\"vivmid\");\r\n if (_timu.indexOf(vivmid) < 0) {\r\n _timu.push(vivmid);\r\n }\r\n });\r\n\r\n var _cookieValue = \"\";\r\n $('.vote_' + _vote_id + ' .votetype_radio input[type=\"radio\"]:checked').each(function () {//遍历每一个名字为interest的复选框,其中选中的执行函数 \r\n var _viid = $(this).attr(\"viid\");\r\n var _vivmid = $(this).attr(\"vivmid\");\r\n var _vivgid = $(this).attr(\"vivgid\");\r\n _cookieValue += _viid + \"_\" + _vivmid + \"_\" + _vivgid + \",\";\r\n _chooseIds += _viid + \",\";\r\n\r\n var _xb = _timu.indexOf(_vivmid);\r\n if (_xb >= 0) {\r\n _timu.splice(_xb, 1);\r\n }\r\n\r\n });\r\n\r\n $('.vote_' + _vote_id + ' .votetype_checkbox input[type=\"checkbox\"]:checked').each(function () {//遍历每一个名字为interest的复选框,其中选中的执行函数\r\n var _viid = $(this).attr(\"viid\");\r\n var _vivmid = $(this).attr(\"vivmid\");\r\n var _vivgid = $(this).attr(\"vivgid\");\r\n _cookieValue += _viid + \"_\" + _vivmid + \"_\" + _vivgid + \",\";\r\n _chooseIds += _viid + \",\";\r\n\r\n var _xb = _timu.indexOf(_vivmid);\r\n if (_xb >= 0) {\r\n _timu.splice(_xb, 1);\r\n }\r\n\r\n });\r\n //console.log(_cookieValue);\r\n _chooseIds = _chooseIds.trim(',');\r\n\r\n if (_chooseIds == \"\") {\r\n alert(\"请先选择答案\");\r\n return;\r\n }\r\n\r\n if (_timu.length > 0) {\r\n alert(\"您还有题目没有做完\");\r\n return;\r\n }\r\n\r\n if (_isLockVote.indexOf(_vote_id) >= 0) {\r\n return;\r\n }\r\n _isLockVote.push(_vote_id);\r\n\r\n _this.addClass(\"btn_disabled\");\r\n\r\n setVoteCookie(\"vote_\" + _vote_id, _cookieValue, 24);//有效期24小时\r\n\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/VoteOperate?groupId=\" + _vote_id + \"&chooseIds=\" + _chooseIds + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n lookVoteResult(_this);//去查看投票结果\r\n }\r\n });\r\n\r\n });\r\n\r\n $(\"body\").on(\"change\", '.votetype_checkbox input[type=\"checkbox\"]', function () {\r\n var _this = $(this);\r\n var _vid = _this.attr(\"id\");\r\n var _vname = _this.attr(\"name\");\r\n var _maxcheck = _this.attr(\"maxcheck\");\r\n var _checkLength = $('.votetype_checkbox input[name=\"' + _vname + '\"]:checked').length;\r\n \r\n if (_checkLength > _maxcheck) {\r\n alert(\"最多只能选择【\" + _maxcheck + \"】个选项\");\r\n _this.attr(\"checked\", false);\r\n }\r\n });\r\n function lookVoteResult(_this) {//查看投票结果\r\n var _vote_id = _this.attr(\"vote_id\");\r\n var _vote_title = _this.attr(\"vote_title\");\r\n\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/GetVoteGroupById?Id=\" + _vote_id + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n var vote_item = getVoteCookie(\"vote_\" + _vote_id);\r\n _this.parents('.em_vote').html(initResultHTML(json, _vote_title, vote_item));\r\n _this.parents('.em_vote').show();\r\n }\r\n });\r\n }\r\n\r\n $(\"body\").on(\"click\", \".btn_lookvote\", function () {//查看投票结果点击事件\r\n var _vote_id = $(this).attr(\"vote_id\");\r\n if (location.host == \"pcarticle.eastmoney.com\") {\r\n // window.open(\"http://poll.eastmoney.com/Html/Result\" + _vote_id + \".html\");\r\n window.external.OnClickEvent(\"return(false && [].push('#type=04&&url=https://poll.eastmoney.com/Html/Result\" + _vote_id + \".html'));\")\r\n } else {\r\n window.open(\"https://poll.eastmoney.com/Html/Result\" + _vote_id + \".html\");\r\n }\r\n //lookVoteResult($(this));//去查看投票结果\r\n });\r\n\r\n $(\"body\").on(\"click\", \".btn_govote\", function () {//去投票点击事件\r\n var _vote_id = $(this).attr(\"vote_id\");\r\n initVote(_vote_id);\r\n });\r\n \r\n function initResultHTML(json, _vote_title, vote_item) {\r\n var _html = ''\r\n _html += '
' + _vote_title + '
';\r\n var _isvote = false;//默认未投过票\r\n for (var i = 0; i < json.Result.Votes.length; i++) {\r\n var _item = json.Result.Votes[i];\r\n\r\n _html += '

' + _item.Vm_Title + '

';\r\n _html += '
';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n\r\n _html += '
';\r\n if (_isvote) {\r\n _html += ' ';\r\n _html += ' ';\r\n } else {\r\n if (json.Result.Vg_Enable == 1) {\r\n _html += ' ';\r\n } else {\r\n _html += ' ';\r\n _html += ' ';\r\n }\r\n }\r\n _html += '
';\r\n\r\n return _html;\r\n }\r\n function initHTML(json, _vote_title) {\r\n var _html = ''\r\n if (json && json.Success == 1 && json.Result) {\r\n if (json.Result.Vg_Title && json.Result.Vg_Title != \"\") {\r\n _vote_title = json.Result.Vg_Title;\r\n }\r\n\r\n _html += '
' + _vote_title + '
';\r\n\r\n for (var i = 0; i < json.Result.Votes.length; i++) {\r\n var _item = json.Result.Votes[i];\r\n _html += '

' + _item.Vm_Title + '

';\r\n _html += '
';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n \r\n _html += '
';\r\n _html += ' ';\r\n _html += ' ';\r\n _html += '
';\r\n }\r\n return _html;\r\n }\r\n function initVote(item){\r\n $(\".em_vote\").each(function () {\r\n var _this = $(this);\r\n var _vote_id = _this.attr(\"vote_id\");\r\n if (item == \"all\" || item == _vote_id) {\r\n var _vote_title = _this.attr(\"vote_title\");\r\n _vote_title = unescape(_vote_title);//解码\r\n $.ajax({\r\n url: \"//cmsdataapi.eastmoney.com/api/Vote/GetVoteGroupById?Id=\" + _vote_id + \"&cb=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n var vote_item = getVoteCookie(\"vote_\" + _vote_id);\r\n if (vote_item || json.Result.Vg_Enable != 1) {//Vg_Enable 1为 允许\r\n _this.html(initResultHTML(json, _vote_title, vote_item));\r\n } else {\r\n _this.html(initHTML(json, _vote_title));\r\n }\r\n _this.show();\r\n }\r\n });\r\n }\r\n });\r\n }\r\n initVote(\"all\");\r\n }(jQuery)\r\n}\n\n/***/ }),\n\n/***/ 17:\n/***/ (function(module, exports) {\n\nfunction updateEmImageRemark(){\r\n // 正文图表class\r\n $(\".EmImageRemark\").parent().addClass(\"clearp single-chart\");\r\n $(\".EmImageRemark\").parents(\"p\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\":\"31px\"\r\n });\r\n $(\".EmImageRemark\").children().attr(\"style\", \"\");\r\n $(\".EmImageRemark\").addClass(\"chart-left\");\r\n var emRemark = $(\".EmImageRemark\");\r\n if ($(\".DisplayOnWebFromNewsRobot\") != null) {\r\n $(\".DisplayOnWebFromNewsRobot\").show();\r\n }\r\n emRemark.each(function () {\r\n var _this = $(this);\r\n if (_this.children(\"img\").length <= 0)\r\n _this.parent().remove();\r\n });\r\n}\r\n\r\n\r\nmodule.exports = function () {\r\n if (typeof ($) != 'function') function $(o) {\r\n return typeof (o) == 'string' ? document.getElementById(o) : o\r\n }\r\n if (typeof ($C) != 'function') function $C(s) {\r\n return document.createElement(s)\r\n }\r\n if (typeof Class == \"undefined\") Class = {};\r\n Class.AsPrototype = {};\r\n Class.create = function () {\r\n return function (t) {\r\n if (t != Class.AsPrototype) this.initialize.apply(this, arguments)\r\n }\r\n };\r\n\r\n var newsimg = Class.create();\r\n var chartId = 1; //主要区分图表的唯一性\r\n newsimg.prototype = {\r\n getElementsByClassName: function (obj, n) {\r\n var classElements = [], allElements = $(obj).getElementsByTagName('*');\r\n for (var i = 0; i < allElements.length; i++) {\r\n if (allElements[i].className == n) classElements[classElements.length] = allElements[i]\r\n }\r\n return classElements;\r\n },\r\n getMarket: function (type, code) {\r\n var Market = \"sh\";\r\n if (type == \"1\") {\r\n Market = \"sh\";\r\n if (code.substring(0, 3) == \"000\") Market = \"zs\";\r\n } else {\r\n Market = \"sz\";\r\n if (code.substring(0, 2) == \"39\") Market = \"zs\";\r\n }\r\n return {\r\n Type: Market,\r\n Code: Market + code\r\n }\r\n },\r\n gshNum: function (str) {//格式化大额数字\r\n if (str == \"-\") {\r\n return \"-\";\r\n }\r\n\r\n var dNum = parseFloat(str);\r\n var dw = \"\";\r\n if (dNum >= 100000000) {\r\n dNum = (dNum / 100000000);\r\n dw = \"亿\";\r\n } else if (dNum >= 10000) {\r\n dNum = (dNum / 10000);\r\n dw = \"万\";\r\n }\r\n\r\n if (dNum >= 100) {\r\n dNum = dNum.toFixed(0);\r\n } else if (dNum >= 10) {\r\n dNum = dNum.toFixed(1);\r\n } else {\r\n dNum = dNum.toFixed(2);\r\n }\r\n\r\n return dNum + dw;\r\n },\r\n gshZd: function (str) {//格式化涨跌幅或涨跌额保留2位小数\r\n if (str == \"-\") {\r\n return \"-\";\r\n }\r\n return parseFloat(str).toFixed(2);\r\n },\r\n XiangGuanGuPiao: function (secid, imgParent) {//相关股票\r\n var _this = this;\r\n var chartFooterDiv = $C(\"div\");\r\n chartFooterDiv.className = \"chart-footer\";\r\n jQuery.ajax({\r\n type: \"GET\",\r\n url: \"//push2.eastmoney.com/api/qt/slist/get?pi=0&pz=5&po=1&spt=4&fields=f12,f13,f14,f15,f3,f4,f6,f5,f11,f10,f2&ut=13697a1cc677c8bfa9a496437bfef419&secid=\" + secid + \"&fid=f3&fltt=2&cb=?\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (jdata) {\r\n if (jdata && jdata.rc == \"0\") {\r\n var footerInnerRow = '';\r\n chartFooterDiv.innerHTML = footerInnerRow;\r\n imgParent.appendChild(chartFooterDiv);\r\n\r\n _this.XiangGuanBanKuai(secid, chartFooterDiv);//相关板块\r\n }\r\n }\r\n });\r\n },\r\n XiangGuanBanKuai: function (secid, chartFooterDiv) {//相关板块\r\n var _this = this;\r\n jQuery.ajax({\r\n type: \"GET\",\r\n url: \"//push2.eastmoney.com/api/qt/slist/get?ut=13697a1cc677c8bfa9a496437bfef419&spt=3&pi=0&pz=4&po=1&fields=f14,f3,f4,f128,f12,f13,f100,f102,f103&secid=\" + secid + \"&fid=f3&fltt=2&cb=?\",\r\n dataType: \"jsonp\",\r\n success: function (jdata) {\r\n if (jdata && jdata.rc == \"0\") {\r\n var htmlBK = $C(\"div\");\r\n htmlBK.className = \"chart-footer-title\";\r\n htmlBK.innerHTML = \"相关板块\";\r\n var htmlBKContent = $C(\"div\");\r\n htmlBKContent.className = \"chart-footer-con chart-concept\";\r\n var h = '';\r\n htmlBKContent.innerHTML = h;\r\n chartFooterDiv.appendChild(htmlBK);\r\n chartFooterDiv.appendChild(htmlBKContent);\r\n }\r\n }\r\n });\r\n },\r\n ZhiShuLingZhangHangYe: function (imgParent) {//领涨行业(指数)\r\n var _this = this;\r\n var chartFooterDiv = $C(\"div\");\r\n chartFooterDiv.className = \"chart-footer\";\r\n jQuery.ajax({\r\n type: \"GET\",\r\n url: \"//push2.eastmoney.com/api/qt/clist/get?ut=13697a1cc677c8bfa9a496437bfef419&fs=m:90+t:2&fid=f3&po=1&pi=0&pz=2&fields=f3,f4,f12,f13,f14,f104,f105,f128,f140,f141,f136&fltt=2&invt=2&cb=?\",\r\n dataType: \"jsonp\",\r\n success: function (jdata) {\r\n if (jdata && jdata.rc == \"0\") {\r\n var footerInnerRow = '';\r\n chartFooterDiv.innerHTML = footerInnerRow;\r\n imgParent.appendChild(chartFooterDiv);\r\n }\r\n }\r\n });\r\n },\r\n NewsImg: function (secid, json, tipsImageRemark) {\r\n var _this = this;\r\n var price = json.data.f43;//最新价\r\n var cjl = json.data.f47 == \"-\" ? \"-\" : (_this.gshNum(json.data.f47) + \"手\");//成交量\r\n var cje = json.data.f48 == \"-\" ? \"-\" : _this.gshNum(json.data.f48);//成交额\r\n var stockCode = json.data.f57;//代码\r\n var stockName = json.data.f58;//名称\r\n var stockMarket = json.data.f107;//市场\r\n var hsl = json.data.f168;//换手率\r\n hsl = (hsl == \"-\" ? \"-\" : (_this.gshZd(hsl) + \"%\"))\r\n var zde = json.data.f169;//涨跌额\r\n var zdf = json.data.f170;//涨跌幅\r\n zdf = (zdf == \"-\" ? \"-\" : (_this.gshZd(zdf) + \"%\"))\r\n var syl = json.data.f162;//市盈率(动态)\r\n var zsz = json.data.f116;//总市值\r\n\r\n var imgParent = tipsImageRemark.parentNode;\r\n imgParent.className = \"b-chart clearp\";\r\n jQuery(tipsImageRemark).children().attr(\"style\", \"\");\r\n\r\n var __Market = _this.getMarket(stockMarket, stockCode);\r\n\r\n var imgSrc = tipsImageRemark.childNodes[0].src;\r\n var zdColor = \"\";\r\n if (zde > 0) zdColor = \"#FF0000\";\r\n else if (zde < 0) zdColor = \"#009900\";\r\n\r\n if (__Market.Type != \"zs\") {//处理图表左侧\r\n var chartLeftDiv = $C(\"div\");\r\n chartLeftDiv.className = \"chart-left2\";\r\n chartLeftDiv.id = \"chartleft2\" + stockCode + chartId;\r\n var _html = '
K
线图
';\r\n _html += '
特色数据
';\r\n _html += '
资金流向
';\r\n _html += '
公告
';\r\n _html += '
个股日历
';\r\n _html += '
核心题材
';\r\n chartLeftDiv.innerHTML = _html;\r\n imgParent.insertBefore(chartLeftDiv, tipsImageRemark);\r\n //chartLeftDiv.setAttribute(\"style\", \"\");\r\n }\r\n\r\n var chartRightDiv = $C(\"div\");\r\n chartRightDiv.className = \"chart-right\";\r\n chartRightDiv.id = \"chart\" + stockCode + chartId;\r\n chartId++;\r\n zdf = '' + zdf + '';\r\n\r\n if (__Market.Type != \"zs\") {\r\n chartRightDiv.innerHTML = '

最新价:' + price + '

涨跌额:' + zde + '

涨跌幅:' + zdf + '

成交量:' + cjl + '

成交额:' + cje + '

换手率:' + hsl + '

';\r\n imgParent.appendChild(chartRightDiv);\r\n chartRightDiv.setAttribute(\"style\", \"margin-top:0px;\");\r\n\r\n var h = '

市盈率:' + syl + '

总市值:' + (zsz == \"-\" ? \"-\" : _this.gshNum(zsz)) + '

';\r\n jQuery(\"#\" + chartRightDiv.id).append(h);\r\n } else {\r\n chartRightDiv.innerHTML = '

最新价:' + price + '

涨跌额:' + zde + '

涨跌幅:' + zdf + '

成交量:' + cjl + '

成交额:' + cje + '

换手率:' + hsl + '

';\r\n imgParent.appendChild(chartRightDiv);\r\n chartRightDiv.setAttribute(\"style\", \"margin-top:20px;\");\r\n tipsImageRemark.setAttribute(\"style\", \"padding-left:20px;\");\r\n }\r\n\r\n var chartNavDiv = $C(\"div\");\r\n chartNavDiv.className = \"chart-nav clear\";\r\n if (__Market.Type != \"zs\") {\r\n chartNavDiv.innerHTML = '查询该股行情  实时资金流向  深度数据揭秘  进入' + stockName + '吧  ' + stockName + '资金流';\r\n } else {\r\n chartNavDiv.innerHTML = '' + stockName + '行情  领涨个股  大盘资金流向  7*24小时快讯  进入' + stockName + '吧';\r\n }\r\n imgParent.appendChild(chartNavDiv);\r\n\r\n if (__Market.Type != \"zs\") {\r\n _this.XiangGuanGuPiao(secid, imgParent);//相关股票和相关板块\r\n } else {\r\n _this.ZhiShuLingZhangHangYe(imgParent);//领涨行业\r\n }\r\n },\r\n initialize: function (className) {\r\n var _this = this;\r\n if (className != \"\" || className != \"undefined\") {\r\n var tipsImageRemark = this.getElementsByClassName(\"ContentBody\", className);\r\n var href = [];\r\n var src = [];\r\n var i = 0;\r\n var BodyEndObj = $(\"ContentBody\");\r\n var BodyNextNode = BodyEndObj.nextSibling;\r\n while (BodyNextNode.nodeType != 1) {\r\n BodyNextNode = BodyNextNode.nextSibling;\r\n }\r\n\r\n if (tipsImageRemark != undefined && tipsImageRemark != null && tipsImageRemark != \"\") {\r\n for (var i = 0; i < tipsImageRemark.length; i++) {\r\n var imgParent = tipsImageRemark[i];\r\n if (imgParent.className.indexOf(\"DisableOther\") >= 0) {\r\n continue;\r\n }\r\n var imgnodes = imgParent.getElementsByTagName(\"img\");\r\n if (imgnodes.length > 0) {\r\n var _datacode = tipsImageRemark[i].getAttribute(\"data-code\");\r\n if (_datacode != null) {\r\n var _datacodeItem = _datacode.split('|');\r\n\r\n imgParent.classList.add(\"pc-quotelink\");\r\n imgParent.setAttribute(\"data-code\",_datacodeItem[0]);\r\n imgParent.setAttribute(\"data-market\", _datacodeItem[1]);\r\n\r\n var _KR = imgnodes[0].getAttribute(\"data-code\").toLowerCase().substring(0, 1);\r\n src[i] = imgnodes[0].src;\r\n if (_KR == \"k\") {\r\n src[i] = src[i].replace(\"imageType=k\", \"imageType=knews\");\r\n }\r\n imgnodes[0].src = src[i];\r\n\r\n var _datacode2 = tipsImageRemark[i].getAttribute(\"data-code2\");\r\n if (_datacode2 != null) {\r\n var _datacode2Item = _datacode2.split('|');\r\n if ((_datacodeItem[1] == \"0\" || _datacodeItem[1] == \"1\") && (_datacode2Item[2] == \"5\" || _datacode2Item[2] == \"6\" || _datacode2Item[2] == \"7\" || _datacode2Item[2] == \"1\" || _datacode2Item[2] == \"2\" || _datacode2Item[2] == \"3\" || _datacode2Item[2] == \"13\" || _datacode2Item[2] == \"80\" || _datacode2Item[2] == \"23\")) {\r\n this.initImg(_datacodeItem[0], _datacodeItem[1], tipsImageRemark[i])\r\n }\r\n } else {\r\n if ((_datacodeItem[1] == \"0\" || _datacodeItem[1] == \"1\") && (_datacodeItem[2] == \"1\" || _datacodeItem[2] == \"2\")) {\r\n this.initImg(_datacodeItem[0], _datacodeItem[1], tipsImageRemark[i])\r\n }\r\n }\r\n }\r\n imgnodes[0].width = \"530\";\r\n imgnodes[0].height = \"276\";\r\n }\r\n }\r\n }\r\n }\r\n var bkTipAreas = this.getElementsByClassName(\"ContentBody\", \"Em_NewsBk\");\r\n for (var i = 0; i < bkTipAreas.length; i++) {\r\n bkTipAreas[i].innerHTML = '
' + '
沪A:
涨幅榜跌幅榜成交量五分钟涨跌榜
' + '
深A:
涨幅榜跌幅榜成交量五分钟涨跌榜
' + '
领涨板块:
' + '
';\r\n this.ioOverall(\"http://hq2data.eastmoney.com/bk/data/bkant.js\", \"\", \"BKCache\",\r\n\t\t\t\tfunction (data) {\r\n\t\t\t\t if (data && data.Top && data.Top.length > 0) {\r\n\t\t\t\t var lzg = data.Top[0];\r\n\t\t\t\t var showStr = \"\";\r\n\t\t\t\t var tempData = \"\";\r\n\t\t\t\t var _color = \"\";\r\n\t\t\t\t for (var lz in lzg) {\r\n\t\t\t\t tempData = lzg[lz].split(\",\");\r\n\t\t\t\t _color = parseFloat(tempData[1]) == 0 ? \"\" : parseFloat(tempData[1]) > 0 ? \"red\" : \"green\";\r\n\t\t\t\t showStr += \"\" + tempData[0] + \"(\" + tempData[1] + \")\"\r\n\t\t\t\t }\r\n\t\t\t\t $(\"bkList_lzbk\").innerHTML = showStr;\r\n\t\t\t\t }\r\n\t\t\t\t});\r\n bkTipAreas[i].style.display = \"\";\r\n break\r\n }\r\n },\r\n initImg: function (_stockcode, _stockmarket, tipsImageRemark) {\r\n var _this = this;\r\n var secid = _stockmarket + \".\" + _stockcode;\r\n //行情图一圈\r\n jQuery.ajax({\r\n type: \"GET\",\r\n url: \"//push2.eastmoney.com/api/qt/stock/get?fltt=2&fields=f57,f58,f107,f43,f168,f169,f170,f47,f48,f162,f116&secid=\" + secid + \"&ut=13697a1cc677c8bfa9a496437bfef419&cb=?\",\r\n dataType: \"jsonp\",\r\n success: function (json) {\r\n if (json && json.rc == \"0\") {\r\n _this.NewsImg(secid, json, tipsImageRemark);\r\n }\r\n }\r\n });\r\n },\r\n ioOverall: function (src, charset, dataVar, callback, nodeObj) {\r\n var script = $C(\"script\");\r\n script.type = \"text/javascript\";\r\n script.charset = (charset == \"\") ? \"GB2312\" : charset;\r\n script.src = src;\r\n script._0j = this;\r\n script[document.all ? \"onreadystatechange\" : \"onload\"] = function () {\r\n if (document.all && this.readyState != \"loaded\" && this.readyState != \"complete\") {\r\n return\r\n }\r\n this[document.all ? \"onreadystatechange\" : \"onload\"] = null;\r\n if (callback) {\r\n if (nodeObj) callback(eval(dataVar), nodeObj);\r\n else callback(eval(dataVar))\r\n }\r\n this.parentNode.removeChild(this)\r\n };\r\n document.getElementsByTagName(\"head\").item(0).appendChild(script)\r\n }\r\n };\r\n try {\r\n //调用图集\r\n var ensit = new newsimg(\"EmImageRemark\");\r\n } catch (error) {\r\n \r\n }\r\n\r\n var dsq_updateEmImageRemark = setInterval(updateEmImageRemark,100);\r\n setTimeout(function(){\r\n clearInterval(dsq_updateEmImageRemark)\r\n },20000)\r\n};\r\n\r\n\r\n\n\n/***/ }),\n\n/***/ 19:\n/***/ (function(module, exports, __webpack_require__) {\n\nvar hex_md5 = __webpack_require__(0);\r\nvar initLangKeVideo = __webpack_require__(2);\r\nvar unityvote = __webpack_require__(1);\r\nvar initNewsIMG = __webpack_require__(17);\r\n\r\nvar config = {\r\n \"guba\": \"https://gbapi.eastmoney.com/\",\r\n \"push\": \"https://push2.eastmoney.com/\"\r\n};\r\n\r\nif(_CMSHJ == \"test\"){\r\n config.guba = \"https://gbapi-test.eastmoney.com/\";\r\n}\r\n\r\nvar cookie = {\r\n get: function (name) {\r\n var xarr = document.cookie.match(new RegExp(\"(^| )\" + name + \"=([^;]*)(;|$)\"));\r\n if (xarr != null) return decodeURIComponent(xarr[2]);\r\n return null;\r\n },\r\n set: function (key, value, expiredays, domain) {\r\n var cookiestr = key + \"=\" + escape(value)\r\n\r\n if (expiredays != undefined) {\r\n var exdate = new Date();\r\n exdate.setDate(exdate.getDate() + expiredays);\r\n cookiestr += \";expires=\" + exdate.toGMTString()\r\n }\r\n if (domain != undefined) {\r\n cookiestr += \";domain=\" + domain;\r\n }\r\n cookiestr += ';path=/';\r\n document.cookie = cookiestr;\r\n\r\n },\r\n del: function (key, domain) {\r\n var exdate = new Date((new Date).getTime() - 1);\r\n if (domain) {\r\n document.cookie = key + '=;path=/;expires=' + exdate.toGMTString() + ';domain=' + domain;\r\n } else {\r\n document.cookie = key + '=;path=/;expires=' + exdate.toGMTString();\r\n }\r\n\r\n }\r\n};\r\n\r\nvar _deviceid = \"0d2798cab1716439a343c9965c20c59d\";\r\nvar _ctoken = cookie.get(\"ct\");\r\nvar _utoken = cookie.get(\"ut\");\r\nvar _GubaApiH = hex_md5(\"ctoken=\" + _ctoken + \"utoken=\" + _utoken + \"_519d77b29be442f8\");\r\nfunction loadCookies() {\r\n if (_ctoken == null || _utoken == null || _GubaApiH == null) {\r\n _ctoken = cookie.get(\"ct\");\r\n _utoken = cookie.get(\"ut\");\r\n _GubaApiH = hex_md5(\"ctoken=\" + _ctoken + \"utoken=\" + _utoken + \"_519d77b29be442f8\");\r\n if(_ctoken == null || _utoken == null || _GubaApiH == null){\r\n\r\n }else{//cookie为空不触发加载\r\n zxzwObj.getNewsArticleBriefInfo();\r\n }\r\n \r\n }\r\n}\r\n\r\n/**\r\n * 格式化点赞收藏数\r\n * type: 0- ;1+ ;2不加不减\r\n */\r\nvar formatZanNum = function (count, type) {\r\n var num = parseInt(count) ? parseInt(count) : 0;\r\n var back = \"\";\r\n if (type == 2) {\r\n temp = num\r\n } else {\r\n temp = type ? num + 1 : num - 1;\r\n }\r\n back = temp > 99 ? \"99+\" : temp > 0 ? temp : \"\";\r\n return back;\r\n};\r\n\r\n/**\r\n * 点赞+1\r\n */\r\nvar creatAddlab = function (e) {\r\n var $body = document.getElementsByTagName(\"body\")[0];\r\n var $lab = document.createElement(\"b\");\r\n var diff = 0,\r\n\tanim, x = e.pageX,\r\n\ty = e.pageY;\r\n var style = $lab.style;\r\n style.color = \"#E94F06\";\r\n style.zIndex = 9999;\r\n style.position = \"absolute\";\r\n style.select = \"none\";\r\n style.left = (x - 10) + \"px\";\r\n style.top = (y - 20) + \"px\";\r\n style.fontSize = \"16px\";\r\n style.textShadow = \"\";\r\n $lab.innerText = \"+1\";\r\n clearInterval(anim);\r\n setTimeout(function () {\r\n anim = setInterval(function () {\r\n if (++diff == 100) {\r\n clearInterval(anim);\r\n $body.removeChild($lab);\r\n };\r\n style.left = (x - 10) + \"px\";\r\n style.top = y - 20 - diff + \"px\";\r\n style.opacity = (100 - diff) / 100;\r\n },\r\n\t\t10);\r\n },\r\n\t50);\r\n $body.appendChild($lab);\r\n};\r\n\r\n// 点赞\r\nvar zanObj = {\r\n // 点赞操作 $(this),haszan, \r\n zanFun: function (e, $dom, type, articleId) {\r\n var _this = $dom;\r\n\r\n var _apiurl = (_this.hasClass(\"zan\") || _this.hasClass(\"huozan\")) ? \"LikeArticle\" : \"CancelLikeArticle\";\r\n\r\n $.ajax({\r\n url: config.guba + \"likeopt/jsonp/\" + _apiurl + \"?id=\" + articleId + \"&type=1&deviceid=\" + _deviceid + \"&version=2&product=eastmoney&plat=web&h=\" + _GubaApiH + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function (res) {\r\n if (res && res.rc === 1) {\r\n var prezanum = $(\"#post_like_count\").attr(\"realnum\") ? $(\"#post_like_count\").attr(\"realnum\") : 0;\r\n\r\n if(_apiurl == \"LikeArticle\"){//点赞\r\n if (_this.hasClass(\"zan\")){//普通赞\r\n _this.removeClass(\"zan\").addClass(\"zananimate\");\r\n setTimeout(function() {\r\n _this.removeClass(\"zananimate\").addClass(\"has_zan\");\r\n },\r\n 600);\r\n }else if(_this.hasClass(\"huozan\")){//火赞\r\n _this.removeClass(\"huozan\").addClass(\"has_huozan\");\r\n }else{\r\n\r\n }\r\n\r\n var num = formatZanNum(prezanum, 1);//+1\r\n $(\"#post_like_count\").text(num);\r\n $(\"#post_like_count\").attr(\"realnum\", parseInt(prezanum) + 1);\r\n\r\n creatAddlab(e);\r\n\r\n }else{//取消点赞\r\n var num = formatZanNum(prezanum, 0);//-1\r\n $(\"#post_like_count\").text(num);\r\n $(\"#post_like_count\").attr(\"realnum\", parseInt(prezanum) - 1);\r\n if(_this.hasClass(\"has_huozan\")){//火赞\r\n _this.removeClass(\"has_huozan\").addClass(\"huozan\");\r\n }else{//普通赞\r\n _this.removeClass(\"has_zan\").addClass(\"zan\");\r\n }\r\n\r\n }\r\n }\r\n }\r\n });\r\n }\r\n};\r\n\r\n// 收藏\r\nvar collectObj = {\r\n // 收藏与取消收藏\r\n collectFun: function (e, $dom, type, articleId) {\r\n var _this = $dom;\r\n\r\n var hascollect = _this.hasClass(\"shoucang\") ? false : true;\r\n var _apiurl = hascollect ? \"CancelCollectArticle\" : \"CollectArticle\";\r\n\r\n $.ajax({\r\n url: config.guba + \"collectopt/jsonp/\" + _apiurl + \"?postid=\" + articleId + \"&h=\" + _GubaApiH + \"&type=1&version=80008000&product=guba&plat=wap&deviceid=\" + _deviceid + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function (res) {\r\n if (res && res.rc === 1) {\r\n //收藏\r\n if (_this.hasClass(\"shoucang\")) {\r\n _this.removeClass(\"shoucang\").addClass(\"scanimate\");\r\n setTimeout(function () {\r\n _this.removeClass(\"scanimate\").addClass(\"has_shoucang\");\r\n }, 600);\r\n\r\n //_this.removeClass(\"shoucang\").addClass(\"has_shoucang\");\r\n\r\n //creatAddlab(e);\r\n }\r\n //取消收藏\r\n else {\r\n _this.removeClass(\"has_shoucang scanimate\").addClass(\"shoucang\");\r\n //_this.removeClass(\"has_shoucang\").addClass(\"shoucang\");\r\n }\r\n }\r\n }\r\n });\r\n }\r\n};\r\n\r\nvar zxzwObj = {\r\n /**\r\n * 初始化事件 \r\n */\r\n init: function () {\r\n\r\n try {\r\n if ($(\".contentwrap .topbox .tipbox .infos\").width() > 350) {\r\n $(\".contentwrap .topbox .tipbox .infos\").css({\"margin-bottom\":\"0\"});\r\n }\r\n \r\n $(\"body\").on(\"click\", \".pc-quotelink\", function () {\r\n \r\n var _market = $(this).attr('data-market');\r\n var _code = $(this).attr('data-code');\r\n \r\n var _data = {\r\n \"Operation\": \"SwitchToRtline\",\r\n \"Params\": {\r\n \"market\": _market.toString(),\r\n \"code\": _code.toString(),\r\n \"originURL\": \"\",\r\n },\r\n \"CallBack\": \"\"\r\n };\r\n \r\n try {\r\n //window.external.OnWebCallNativeJsCommon(_data);//参数是json\r\n window.external.OnWebCallNativeJsCommon(JSON.stringify(_data));//参数是字符串\r\n } catch (e) { }\r\n \r\n return false;\r\n });\r\n \r\n $(\"body\").on(\"click\", \".pc-openbrowser\", function () {\r\n var pclink = $(this).data('pclink');\r\n window.external.OnClickEvent(\"return(false && [].push('#type=04&&url=\" + pclink + \"'));\")\r\n });\r\n \r\n } catch (error) {\r\n \r\n }\r\n \r\n \r\n function initA() {\r\n \r\n //正文页增加网页个股链接功能(非第一次出现的时候转换成a链接)\r\n $(\".em_stock_key_common\").each(function () {\r\n var _this = $(this);\r\n if (_this.attr(\"web\") == \"1\") {//web=1的时候span标签变成a标签\r\n _this.after(_this.prop(\"outerHTML\").replace(\"\", \"\")).remove();\r\n }\r\n });\r\n \r\n //正文文字,需要跳转原生行情的标签属性转换\r\n $(\".keytip[data-code],.em_stock_key_common[data-code]\").each(function () {\r\n var _this = $(this);\r\n var _thisCode = _this.data(\"code\").split(',');\r\n if (_thisCode.length == 2) {\r\n if (_this.hasClass(\"keytip\")) {//如果有样式keytip,去掉样式keytip\r\n _this.removeClass(\"keytip\");\r\n }\r\n if (_this.hasClass(\"em_stock_key_common\")) {//如果有样式em_stock_key_common,去掉样式em_stock_key_common\r\n _this.removeClass(\"em_stock_key_common\");\r\n }\r\n if (_this.hasClass(\"pc-openbrowser\")) {//如果有浏览器打开标识pc-openbrowser,去掉浏览器打开标识pc-openbrowser\r\n _this.removeClass(\"pc-openbrowser\");\r\n }\r\n _this.attr(\"data-market\", _thisCode[0]);//新增市场属性\r\n _this.attr(\"data-code\", _thisCode[1]);//新增代码属性(会覆盖掉老的属性)\r\n _this.attr(\"href\", \"javascript:;\");//去掉链接\r\n _this.removeAttr(\"data-pclink\");//去掉浏览器打开标识的链接\r\n _this.removeAttr(\"target\");//去掉标签打开方式\r\n if (!_this.hasClass(\"pc-quotelink\")) {//如果没有原生行情打开标记,加上原生行情打开标记\r\n _this.addClass(\"pc-quotelink\");\r\n }\r\n if (!_this.hasClass(\"pc-zxlink\")) {//如果没有原生行情打开标记,加上原生行情打开标记\r\n _this.addClass(\"pc-zxlink\");\r\n }\r\n }\r\n });\r\n $(\"a\").each(function () {\r\n var ___a = $(this);\r\n var ___href = ___a.attr(\"href\");\r\n if (___href != undefined && (___href.indexOf(\"http://\") == 0 || ___href.indexOf(\"https://\") == 0 || ___href.indexOf(\"//\") == 0)) {//是http://或https://开头的\r\n \r\n if (___href.indexOf(\"//\") == 0) {\r\n ___href = \"https:\" + ___href;\r\n }\r\n \r\n if (___href.indexOf(location.host) == -1) {//不是当前host开头的\r\n //console.log(this.href,this.innerHTML);\r\n //console.log(this.pathname,this.pathname.indexOf(\"/a/\"));\r\n if (this.pathname.indexOf(\"/a/\") == 0 && this.pathname.indexOf(\".html\") > 0) {\r\n ___a.attr(\"href\", \"https://\" + location.host + this.pathname.replace(\"/a/\", \"/pcarticle/\") + location.search);\r\n ___a.attr(\"target\", \"_self\");\r\n } else if (this.pathname.indexOf(\"/news/\") == 0 && this.pathname.indexOf(\".html\") > 0) {\r\n ___a.attr(\"href\", \"https://\" + location.host + \"/pcarticle/\" + this.pathname.substring(this.pathname.indexOf(',') + 1) + location.search);\r\n ___a.attr(\"target\", \"_self\");\r\n } else if (this.pathname.indexOf(\"/pcarticle/\") == 0) {//已经处理过了,不再次做处理\r\n \r\n } else {\r\n ___a.attr(\"target\", \"_self\");\r\n if (___a.hasClass(\"pc-quotelink\") || ___a.hasClass(\"pc-openbrowser\")) {//如果是行情链接这里忽略,会执行前面的原生行情\r\n \r\n } else {//非行情的调系统浏览器\r\n ___a.attr(\"href\", \"javascript:;\").attr(\"data-pclink\", ___href).addClass(\"pc-openbrowser\");\r\n }\r\n //if(!$(\".EmImageRemark\").eq(0).hasClass(\"pc-quotelink\")){\r\n // ___a.attr(\"href\",\"javascript:;\").attr(\"data-pclink\",___href).addClass(\"pc-openbrowser\");\r\n //}\r\n }\r\n }\r\n }\r\n });\r\n }\r\n try {\r\n initA();\r\n setInterval(initA, 2000);\r\n } catch (error) {\r\n \r\n }\r\n \r\n try {\r\n //资讯正文支持点击查看原图\r\n $(\"#ContentBody img\").wrap(function () {\r\n if (this.hasAttribute(\"orginial_src\")) {\r\n return '';\r\n }\r\n return '';\r\n });\r\n \r\n //正文页增加机会文章模块功能\r\n var _op_ids = [];\r\n $(\"#ContentBody .em_op_news\").each(function () {\r\n var _this = $(this);\r\n var _op_id = _this.attr(\"op_id\");\r\n _op_ids.push(_op_id);\r\n _this.addClass(\"em_op_news\" + _op_id);\r\n });\r\n function _initOPHTML(json) {\r\n var _opHTML = '';\r\n if (json.links.length > 0) {\r\n _opHTML += '
';\r\n _opHTML += '
' + json.title + '
';\r\n _opHTML += '';\r\n _opHTML += '
';\r\n return _opHTML;\r\n }\r\n return _opHTML;\r\n }\r\n if (_op_ids.length > 0) {\r\n $.ajax({\r\n //url: \"//newsinfo.test.emapd.com/\r\n url: \"//newsinfo.eastmoney.com/kuaixun/v2/api/content/op_modules?op_ids=\" + _op_ids.toString() + \"&callback=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function (json) {\r\n for (var i = 0; i < json.Result.length; i++) {\r\n var _op_id = json.Result[i].op_id;\r\n var _this = $(\"#ContentBody .em_op_news\" + _op_id);\r\n var _opHTML = _initOPHTML(json.Result[i]);\r\n if (_opHTML.length > 0) {\r\n _this.html(_opHTML);\r\n _this.show();\r\n }\r\n }\r\n }\r\n })\r\n }\r\n } catch (error) {\r\n \r\n }\r\n\r\n this.getNewsArticleBriefInfo();\r\n if (_ctoken == null || _utoken == null) {\r\n setInterval(loadCookies, 5000);//如果没有登录,每5秒尝试从cookie中取一次赋值,兼容没关闭的没登录的正文后来登录的情况\r\n }\r\n\r\n //初始化字体大小\r\n this.loadFontSize();\r\n\r\n //dom 绑定事件\r\n this.bindEvent();\r\n\r\n //固顶\r\n this.gudingFun();\r\n\r\n //初始化行情股票链接及自选股\r\n this.initQuoteLink();\r\n\r\n },\r\n /**\r\n * 获取点赞 收藏 分享 评论数 及相关状态\r\n * post_like_count 点赞数 \r\n * like_state 点赞状态\r\n * collect_state 收藏状态\r\n * post_forward_count 分享数\r\n * post_comment_count 评论数\r\n */\r\n getNewsArticleBriefInfo: function () {\r\n $.ajax({\r\n url: config.guba + \"abstract/api/PostShort/NewsArticleBriefInfo?postid=\" + _NewsId + \"&type=1&version=80008000&product=guba&plat=web&deviceid=\" + _deviceid + \"&ctoken=\" + _ctoken + \"&utoken=\" + _utoken,\r\n method: \"GET\",\r\n dataType: \"jsonp\",\r\n jsonpCallback: \"cb\" + parseInt(Math.random() * 10000 + \"\"),\r\n success: function (res) {\r\n if (res && res.rc == 1 && res.re && res.re.length > 0) {\r\n var infos = res.re[0];\r\n var post_like_count = infos.post_like_count,\r\n like_state = infos.like_state,\r\n collect_state = infos.collect_state,\r\n post_forward_count = infos.post_forward_count,\r\n post_comment_count = infos.post_comment_count;\r\n\r\n // 评论权限(post_comment_authory 3禁止)\r\n // 点赞权限(allow_likes_state 1禁止)\r\n // 转发权限(repost_state 1禁止)\r\n // 点赞样式(post_like_style 1是火苗 0是拇指 默认0)\r\n // 评论权限是否是系统设置的标识(system_comment_authority 1是系统设置)\r\n // infos.post_comment_authory = 3;\r\n // infos.allow_likes_state = 1;\r\n // infos.repost_state = 1;\r\n var isHuoZan = infos.post_like_style == 1;//是否火赞\r\n // isHuoZan = true;\r\n\r\n if(isHuoZan){\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"zan\").addClass(\"huozan\");\r\n }\r\n\r\n if(infos.allow_likes_state != 1){\r\n //点赞数量\r\n if (!!post_like_count) {\r\n $(\"#post_like_count\").attr(\"realnum\", post_like_count);\r\n $(\"#post_like_count\").text(formatZanNum(post_like_count, 2));\r\n }\r\n\r\n //已点赞\r\n if (!!like_state) {\r\n if(isHuoZan){\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"huozan\").addClass(\"has_huozan\");\r\n }else{\r\n $(\"#sharebox\").find(\".articlezan\").removeClass(\"zan\").addClass(\"has_zan\");\r\n }\r\n };\r\n }else{\r\n // $(\".articlezan,#post_like_count\").css({\"pointer-events\":\"none\"});\r\n $(\".articlezan\").parent(\".child\").css({\"pointer-events\":\"none\",\"opacity\":\"0.5\"});\r\n }\r\n \r\n //已经收藏\r\n if (!!collect_state) {\r\n $(\"#sharebox\").find(\".articlesc\").removeClass(\"shoucang\").addClass(\"has_shoucang\");\r\n };\r\n\r\n if(infos.post_comment_authory != 3){\r\n //评论数\r\n if (!!post_comment_count) {\r\n var _num = formatZanNum(post_comment_count, 2);\r\n $(\"#post_comment_count\").text(_num);\r\n $(\".infos .gopinluntxt .item\").html('' + infos.post_comment_count + '人评论');\r\n }else{\r\n $(\"#post_comment_count\").text('');\r\n $(\".infos .gopinluntxt .item\").html('');\r\n };\r\n\r\n try {\r\n //评论区域\r\n zxzwObj.initPinLun();\r\n } catch (e) {\r\n \r\n }\r\n }else{\r\n $(\"#post_comment_count\").text('');\r\n $(\".infos .gopinluntxt .item\").html('');\r\n\r\n $(\".gopinluntxt\").attr(\"href\",\"javascript:;\");\r\n // $(\".gopinluntxt,.gopinluntxt span\").css({\"pointer-events\":\"none\"});\r\n $(\".gopinluntxt\").parent(\".child\").css({\"pointer-events\":\"none\",\"opacity\":\"0.5\"});\r\n }\r\n\r\n }\r\n }\r\n });\r\n },\r\n //初始化行情股票链接及自选股\r\n initQuoteLink: function () {\r\n //正文页增加网页个股链接功能(非第一次出现的时候转换成a链接)\r\n $(\".em_stock_key_common\").each(function () {\r\n var _this = $(this);\r\n if (_this.attr(\"web\") == \"1\") {//web=1的时候span标签变成a标签\r\n _this.after(_this.prop(\"outerHTML\").replace(\"\", \"\")).remove();\r\n }\r\n });\r\n\r\n var isIpad = navigator.userAgent.toLowerCase().match(/(ipad).*os\\s([\\d_]+)/);\r\n if (!isIpad) {//非ipad\r\n //var pdtips = new window.pdtips({\r\n // id: '#ContentBody'\r\n //});\r\n\r\n var _tipZIndex = 100;\r\n\r\n $(\".txtinfos > p,.txtinfos > h3,.txtinfos > h4,.txtinfos > table\").on(\"mouseleave\", function () {\r\n if ($(this).find(\".quotebox\").length > 0) {\r\n $(this).find(\".quotebox\").remove();\r\n }\r\n });\r\n\r\n $(\".txtinfos > p,.txtinfos > h3,.txtinfos > h4,.txtinfos > table\").on(\"click\", function () {\r\n if ($(\".quotebox\").length > 0) {\r\n $(\".quotebox\").remove();\r\n }\r\n });\r\n\r\n //正文文字,需要跳转原生行情的标签属性转换\r\n $(\".pc-zxlink\").each(function () {\r\n\r\n var _this = $(this);\r\n\r\n var _isMouseOver = false;//当前移入元素及状态\r\n\r\n _this.on(\"mouseout\", function (e) {//触发隐藏行情[父元素移出]\r\n _isMouseOver = false;\r\n //setTimeout(function () {\r\n // if (!_isMouseOver) {//父元素移出0.5秒钟后焦点不在,就移除\r\n // if (_this.find(\".quotebox\").length > 0) {\r\n // _this.find(\".quotebox\").remove();\r\n // }\r\n // }\r\n //}, 500);\r\n });\r\n\r\n _this.on(\"mouseover\", function (e) {//触发显示行情[父元素移入]\r\n var _thisitem = $(this);\r\n\r\n //移入的时候,先删除其他股票的浮层\r\n $(\".quotebox\").each(function () {\r\n if ($(this).data(\"mc\") != _thisitem.attr(\"data-market\") + \".\" + _thisitem.attr(\"data-code\")) {\r\n $(this).remove();\r\n }\r\n });\r\n\r\n _isMouseOver = true;\r\n\r\n setTimeout(function () {\r\n if (_isMouseOver) {//移入0.3秒后焦点还在\r\n //var winHeight = $(window).height(),\r\n // winWidth = $(window).width() < 1000 ? 1000 : $(window).width();\r\n\r\n //var _thisWidth = _thisitem.width();\r\n //var _thisHeight = _thisitem.height();\r\n\r\n //var e = e || window.event;\r\n //var sh = window.pageYOffset || document.documentElement.scrollTop || document.body.scrollTop || 0;\r\n //var xh = window.pageXOffset || document.documentElement.scrollLeft || document.body.scrollLeft || 0;\r\n\r\n //var topNav = 0;\r\n //if ($('#fixMenuBar').length > 0) {\r\n // topNav = 33;\r\n //}\r\n\r\n //var left = (e.clientX + _thisWidth > winWidth) ? $(window).width() - _thisWidth + xh : e.clientX + xh;\r\n ////left = (e.clientX - _thisWidth < 0) ? e.clientX + xh : e.clientX - _thisWidth + xh + 2;\r\n //var top = (e.clientY - _thisHeight - topNav < 0) ? e.clientY + sh + 10 : e.clientY + sh - 35;\r\n\r\n //console.log(\"left-top:\", \"left:\" + left + \"top:\" + top);\r\n\r\n var _id = 'quote' + (new Date()).getTime();\r\n\r\n if (_thisitem.find(\".quotebox\").length <= 0) {\r\n var quoteboxHtml = '
';\r\n _thisitem.append(quoteboxHtml);\r\n\r\n _thisitem.on(\"mouseover\", \".quotebox\", function () {//移入子浮层\r\n _isMouseOver = true;\r\n });\r\n\r\n _thisitem.on(\"mouseout\", \".quotebox\", function () {//触发隐藏行情[浮层移出]\r\n var _thisitem2 = $(this);\r\n _isMouseOver = false;\r\n\r\n setTimeout(function () {\r\n if (!_isMouseOver) {//0.5秒后焦点不在\r\n _thisitem2.remove();\r\n }\r\n }, 500);\r\n });\r\n\r\n var _interface = config.push + \"api/qt/ulist.np/get?ut=13697a1cc677c8bfa9a496437bfef419&fields=f1,f2,f3,f4,f12,f13,f14&secids=\" + _thisitem.attr(\"data-market\") + \".\" + _thisitem.attr(\"data-code\");\r\n $.ajax({\r\n url: _interface,\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n jsonp: \"cb\",\r\n success: function (json) {\r\n var item = json.data.diff[0];\r\n var dataQuote = {\r\n price: (item.f2 === \"\" || item.f2 === \"-\") ? \"-\" : parseFloat(item.f2 / Math.pow(10, item.f1)).toFixed(item.f1),\r\n zdf: item.f3 / 100,\r\n zde: (item.f4 === \"\" || item.f4 === \"-\") ? \"-\" : parseFloat(item.f4 / Math.pow(10, item.f1)).toFixed(item.f1),\r\n name: item.f14,\r\n mc: item.f13 + \".\" + item.f12,\r\n market: item.f13,\r\n code: item.f12\r\n };\r\n\r\n var _color = \"\";\r\n if (dataQuote.zdf > 0) {\r\n _color = \"red\";\r\n } else if (dataQuote.zdf < 0) {\r\n _color = \"green\";\r\n } else {\r\n _color = \"\";\r\n }\r\n\r\n dataQuote.zdf = ((dataQuote.zdf === \"\" || dataQuote.zdf == \"-\") ? \"-\" : parseFloat(dataQuote.zdf).toFixed(2) + \"%\");\r\n\r\n //$(\"#\" + _id).html(dataQuote.name + \":\" + dataQuote.code + \" \" + dataQuote.price + \" \" + dataQuote.zdf + \" \");\r\n\r\n //initZXInfo($(\"#\" + _id + \" .zixuan\"), dataQuote.mc);\r\n\r\n $(\"#\" + _id).html(dataQuote.name + \":\" + dataQuote.code + \" \" + dataQuote.price + \" \" + dataQuote.zdf + \"\");\r\n\r\n var _dom = document.getElementById(_id);\r\n var dw = _dom.clientWidth;\r\n var dl = _dom.offsetParent.offsetLeft;\r\n\r\n if (dw + dl > 670) {\r\n $(\"#\" + _id).css({\r\n \"left\": (670 - parseInt(dw + dl)) + \"px\"\r\n });\r\n }\r\n\r\n\r\n }\r\n });\r\n\r\n }\r\n }\r\n }, 300);\r\n\r\n });\r\n });\r\n\r\n }\r\n },\r\n //初始化字体大小\r\n loadFontSize: function () {\r\n var size = cookie.get(\"EM_NewsContent_FontSize\");\r\n if (size != null && size != \"\" && size != undefined) {\r\n switch (size) {\r\n case \"12\":\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").addClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgmid bgbig\").addClass(\"bgsmall\");\r\n $(\".fsctrlbox .fs14\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"12px\",\r\n \"line-height\": \"28px\"\r\n });\r\n break;\r\n case \"15\":\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n $(\".fsctrlbox .fs16\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\": \"31px\"\r\n });\r\n break;\r\n case \"18\":\r\n $(\".txtinfos\").addClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgmid\").addClass(\"bgbig\");\r\n $(\".fsctrlbox .fs18\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"18px\",\r\n \"line-height\": \"34px\"\r\n });\r\n break;\r\n default:\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n $(\".fsctrl\").removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n $(\".fsctrlbox .fs16\").addClass(\"on\").siblings().removeClass(\"on\");\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\": \"31px\"\r\n });\r\n break;\r\n }\r\n\r\n }\r\n },\r\n /**\r\n * 事件绑定 \r\n */\r\n bindEvent: function () {\r\n var that = this;\r\n // 字体控制\r\n $(\"#fsctrl\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n var _this = $(this);\r\n if ($(e.target).prop(\"tagName\") == \"SPAN\") {\r\n var fstype = $(e.target).data(\"type\");\r\n switch (fstype) {\r\n case \"s\":\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").addClass(\"fontsize-small\");\r\n _this.removeClass(\"bgmid bgbig\").addClass(\"bgsmall\");\r\n cookie.set(\"EM_NewsContent_FontSize\", \"12\", 30);\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"12px\",\r\n \"line-height\": \"28px\"\r\n });\r\n break;\r\n case \"m\":\r\n\r\n $(\".txtinfos\").removeClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n _this.removeClass(\"bgsmall bgbig\").addClass(\"bgmid\");\r\n cookie.set(\"EM_NewsContent_FontSize\", \"15\", 30);\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"15px\",\r\n \"line-height\": \"31px\"\r\n });\r\n break;\r\n case \"l\":\r\n $(\".txtinfos\").addClass(\"fontsize-big\").removeClass(\"fontsize-small\");\r\n _this.removeClass(\"bgsmall bgmid\").addClass(\"bgbig\");\r\n cookie.set(\"EM_NewsContent_FontSize\", \"18\", 30);\r\n $(\".abstract .txt\").css({\r\n \"font-size\": \"18px\",\r\n \"line-height\": \"34px\"\r\n });\r\n break;\r\n };\r\n $(e.target).addClass(\"on\").siblings().removeClass(\"on\");\r\n };\r\n\r\n $(\".fsctrlbox\").toggle();\r\n\r\n return false;\r\n });\r\n\r\n //前往评论区\r\n $(\".gopinluntxt\").on(\"click\", function () {\r\n if ($(\"#topbox\").hasClass(\"topboxfix\")) {\r\n window.scrollTo(0, $(\"#gubaComment\").offset().top - $(\"#topbox\").height());\r\n } else {\r\n window.scrollTo(0, $(\"#gubaComment\").offset().top - $(\"#topbox\").height() * 2);\r\n }\r\n return false;\r\n });\r\n\r\n // 点赞\r\n $(\"#sharebox\").on(\"click\", \".articlezan\", function (e) {\r\n loadCookies();\r\n if (_ctoken == null || _utoken == null || _GubaApiH == null) {\r\n window.external.OnClickEvent(\"return(false && [].push('#type=CF'));\");//PC原生登录\r\n } else {\r\n zanObj.zanFun(e, $(this), \"1\", _NewsId);\r\n }\r\n return false;\r\n });\r\n\r\n //收藏\r\n $(\"#sharebox\").on(\"click\", \".articlesc\", function (e) {\r\n // var _this = $(this), hascollect = false;\r\n loadCookies();\r\n if (_ctoken == null || _utoken == null || _GubaApiH == null) {\r\n window.external.OnClickEvent(\"return(false && [].push('#type=CF'));\");//PC原生登录\r\n } else {\r\n collectObj.collectFun(e, $(this), \"1\", _NewsId);\r\n }\r\n return false;\r\n });\r\n\r\n // 分享\r\n $(\"#emsharewrap\").on(\"click\", function (e) {\r\n e.stopPropagation();\r\n\r\n $(\".qrimgbox\").hide();\r\n if ($(e.target).hasClass(\"shares\")) {\r\n $(\".sharewrap\").toggle();\r\n }\r\n });\r\n\r\n //二维码\r\n $(\"#qrcode\").on(\"click\", \".qricon\", function (e) {\r\n e.stopPropagation();\r\n\r\n $(\".sharewrap\").hide();\r\n if ($(e.target).hasClass(\"qricon\")) {\r\n $(\".qrimgbox\").toggle();\r\n }\r\n });\r\n\r\n $(\"html\").on(\"click\", function (e) {\r\n //分享\r\n var sharebox = $(e.target).parents(\"#emsharewrap\");\r\n if (!sharebox.length) {\r\n $(\".sharewrap\").hide();\r\n };\r\n //二维码\r\n var qrbox = $(e.target).parents(\"#qrcode\");\r\n if (!qrbox.length) {\r\n $(\".qrimgbox\").hide();\r\n };\r\n //底部分享\r\n var wxbox = $(e.target).parents(\"#sharebottom\");\r\n if (!wxbox.length) {\r\n $(\".wxshare\").hide();\r\n };\r\n //底部关注\r\n var gzbox = $(e.target).parents(\"#guanzhu\");\r\n if (!gzbox.length) {\r\n $(\".wxgzbox\").hide();\r\n };\r\n //字体控制\r\n var gzbox = $(e.target).parents(\"#fsctrl\");\r\n if (!gzbox.length) {\r\n $(\".fsctrlbox\").hide();\r\n };\r\n\r\n //顶部微信分享二维码\r\n var topwxbox = $(e.target).parents(\"#wxqrcodebox\");\r\n if (!topwxbox.length) {\r\n $(\".wxqrcodebox\").hide();\r\n };\r\n\r\n });\r\n\r\n // 头部微信分享事件重写\r\n $(\"#shareitems > .emshare2020_icon_weixin\").unbind(\"click\");\r\n var wxqrcodeboxstr = \"

使用微信扫一扫

分享文章到您的朋友圈

\";\r\n $(\"#shareitems\").append($(wxqrcodeboxstr));\r\n $(\"#shareitems\").on(\"click\", \".emshare2020_icon_weixin\", function () {\r\n $(\"#shareitems\").find(\"#wxqrcodebox\").toggle();\r\n });\r\n\r\n if (typeof emshareFun != \"undefined\") {\r\n emshareFun.qrcode({\r\n width: 100,// 二维码宽度 可选 默认135\r\n colorDark: \"#000000\", //二维码颜色 可选 默认黑\r\n colorLight: \"#ffffff\",//背景色 可选 默认白\r\n logosrc: \"https://g1.dfcfw.com/g4/202003/20200318140436.gif\",// 二维码logo信息 可选[不建议加此参数] 默认有logo 值为\"none\"时无logo\r\n link: __WAPURL,\r\n domid: \"wapqrcode5\"\r\n });\r\n }\r\n\r\n // 底部微信分享事件重写\r\n $(\".emshare2020_icon_weixin\").unbind(\"click\");\r\n $(\"#sharebottom\").on(\"click\", \".emshare2020_icon_weixin\", function () {\r\n $(\"#sharebottom\").find(\".wxshare\").toggle();\r\n });\r\n\r\n //底部微信关注\r\n $(\"#guanzhu\").on(\"click\", \".gz-wx\", function (e) {\r\n e.stopPropagation();\r\n $(\".wxgzbox\").toggle();\r\n });\r\n\r\n document.onkeydown = function (ev) {\r\n var oEvent = ev || event;\r\n\r\n if (oEvent.keyCode == 33) {//pageup\r\n if (window.scrollY - document.documentElement.clientHeight <= 0) {\r\n window.scrollTo(0, 0);\r\n } else {\r\n window.scrollTo(0, window.scrollY - document.documentElement.clientHeight + $(\".top-nav-wrap\").height() + $(\".topbox\").height() + 30);\r\n }\r\n return false;\r\n } else if (oEvent.keyCode == 34) {//pagedown\r\n window.scrollTo(0, window.scrollY + document.documentElement.clientHeight - $(\".top-nav-wrap\").height() - $(\".topbox\").height() - 30)\r\n return false;\r\n }\r\n }\r\n\r\n $(\".newstitledown\").on(\"click\", function () {//展开点击事件\r\n that.isDefaultShowTitle = true;\r\n cookie.set(\"content_showtitle\", \"true\", 365, \".eastmoney.com\");\r\n that.hideDown();\r\n });\r\n\r\n $(\".newstitleup\").on(\"click\", function () {//收起点击事件\r\n that.isDefaultShowTitle = false;\r\n cookie.set(\"content_showtitle\", \"false\", 365, \".eastmoney.com\");\r\n that.showDown();\r\n });\r\n\r\n },\r\n showDown: function () {\r\n $(\"#gopinluntxt1\").show();\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").show();\r\n },\r\n hideDown: function () {\r\n $(\"#gopinluntxt1\").hide();\r\n $(\"#topboxbak\").show();\r\n $(\".topbox\").addClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n },\r\n isDefaultShowTitle: cookie.get('content_showtitle') || \"true\",\r\n // 固顶:\r\n gudingFun: function () {\r\n var that = this;\r\n var sm = $(\"#topbox\");\r\n var _gboffsettop = $(\"#gubaComment\").offset().top;\r\n var _offtop = sm.offset().top;\r\n var _h = sm.height();\r\n function checkFixTitle() {\r\n that.isDefaultShowTitle = cookie.get('content_showtitle') || \"true\";\r\n if (document.documentElement.clientHeight >= 400) {\r\n var scrolltop = $(document).scrollTop();\r\n if (scrolltop > _offtop) {\r\n if (that.isDefaultShowTitle == \"true\") {\r\n $(\"#topboxbak\").css({\r\n \"height\": _h\r\n });\r\n that.hideDown();\r\n\r\n if (scrolltop <= _offtop + _h) {\r\n $(\".newstitleup\").hide();\r\n } else {\r\n $(\".newstitleup\").show();\r\n }\r\n } else {\r\n if (scrolltop <= _offtop + _h) {\r\n $(\".newstitledown\").hide();\r\n } else {\r\n that.showDown();\r\n }\r\n }\r\n } else {\r\n $(\"#gopinluntxt1\").show();\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n }\r\n\r\n } else {\r\n $(\"#gopinluntxt1\").show();\r\n $(\"#topboxbak\").hide();\r\n $(\".topbox\").removeClass(\"topboxfix\");\r\n\r\n $(\".newstitledown\").hide();\r\n }\r\n }\r\n\r\n //$(window).scroll(checkFixTitle);\r\n //$(window).resize(checkFixTitle);\r\n },\r\n //评论区域\r\n initPinLun: function () {\r\n try {\r\n if (_ISComment) {\r\n if (_CMSHJ == \"test\") {\r\n window.editorAndList({\r\n se: '#gubaComment', id: _NewsId, type: 1, 'topNavH': 0,env: 'test',\r\n post: {\r\n allow_likes_state: __allow_likes_state\r\n }\r\n });\r\n } else {\r\n window.editorAndList({\r\n se: '#gubaComment', id: _NewsId, type: 1, 'topNavH': 0,\r\n post: {\r\n allow_likes_state: __allow_likes_state\r\n }\r\n });\r\n }\r\n }\r\n } catch (e) {\r\n\r\n }\r\n }\r\n}\r\n\r\nfunction convertToNewsListDate(_date) {\r\n // var reg =/(\\d{4})\\-(\\d{2})\\-(\\d{2}) (\\d{2}:\\d{2})/;\r\n // if(_date.length > 16){\r\n // _date = _date.substr(0, 16).replace(reg,\"$1年$2月$3日 $4\");\r\n // }\r\n \r\n var reg =/(\\d{4})\\/(\\d{2})\\/(\\d{2}) (\\d{2}:\\d{2})/;\r\n if(_date.length > 16){\r\n _date = _date.substr(0, 16).replace(reg,\"$1年$2月$3日 $4\");\r\n }\r\n return _date;\r\n}\r\n\r\n\r\n$(function () {\r\n $.ajax({\r\n url: \"//newsinfo.eastmoney.com/kuaixun/v2/api/article/\"+_NewsId+\"?guid=\"+(new Date()).getTime()+\"&callback=?\",\r\n type: \"get\",\r\n dataType: \"jsonp\",\r\n data: {},\r\n success: function(json) {\r\n if(json && json.data){\r\n document.title += json.data.Art_Title;\r\n document.title += \" _ 东方财富网\";\r\n if(json.data.Art_Keyword){\r\n $('meta[name=\"keywords\"]').attr(\"content\",json.data.Art_Keyword);\r\n }\r\n if(json.data.Art_Description){\r\n $('meta[name=\"description\"]').attr(\"content\",json.data.Art_Description); \r\n }\r\n\r\n if(json.data.Art_Tags){\r\n _NewsTag = json.data.Art_Tags;\r\n \r\n }\r\n\r\n if(json.data.Art_IsComment == \"1\"){\r\n _ISComment = true;\r\n }else{\r\n _ISComment = false;\r\n }\r\n\r\n $(\".topbox .title\").html(json.data.Art_Title);\r\n\r\n var infosHTML = '';\r\n infosHTML += '
'+convertToNewsListDate(json.data.Art_ShowTime)+'
';\r\n if(json.data.Art_Author_Name){\r\n infosHTML += '
作者:';\r\n if(json.data.Art_Author_Type == \"2\"){\r\n infosHTML += ''+json.data.Art_Author_Name+'';\r\n }else{\r\n infosHTML += json.data.Art_Author_Name;\r\n }\r\n infosHTML += '
';\r\n }\r\n if(json.data.Art_Media_Name){\r\n infosHTML += '
来源:';\r\n if(json.data.Art_Media_Type == \"3\"){\r\n infosHTML += ''+json.data.Art_Media_Name+'';\r\n }else{\r\n infosHTML += json.data.Art_Media_Name;\r\n }\r\n infosHTML += '
';\r\n }\r\n if(json.data.Art_IsComment == \"1\"){\r\n infosHTML += '';\r\n infosHTML += '
';\r\n // infosHTML += '人评论';\r\n infosHTML += '
';\r\n infosHTML += '
';\r\n }\r\n $(\".infos\").html(infosHTML);\r\n\r\n var contentHTML = '';\r\n contentHTML += json.data.Art_Content.replace(/href=/g,\" target='_blank' href=\");\r\n if(json.data.Art_ShowVideo == \"1\" && json.data.Art_LKSPData && json.data.Art_LKSPData != \"\"){\r\n contentHTML += '

';\r\n contentHTML += '【点击观看视频】';\r\n contentHTML += '

';\r\n }\r\n $(\"#ContentBody\").html(contentHTML);\r\n $(\"#ContentBody\").show();\r\n\r\n var sourceboxHTML = '';\r\n if(json.data.Art_Media_Name){\r\n sourceboxHTML += '文章来源:'+json.data.Art_Media_Name+'';\r\n }\r\n if(json.data.Art_Editor_Code){\r\n sourceboxHTML += '责任编辑:'+json.data.Art_Editor_Code+'';\r\n }\r\n $(\".zwothers .sourcebox\").html(sourceboxHTML);\r\n\r\n if(json.data.Art_OriginalTitle && json.data.Art_OriginalTitle.trim() != \"\"){\r\n $(\".zwothers .sourcebox\").after('
原标题:'+json.data.Art_OriginalTitle+'
')\r\n }\r\n \r\n var _link = $(\".jubao\").attr(\"data-link\").replace('#title#',encodeURIComponent(json.data.Art_Title));\r\n _link += \"&newsurl=\"+encodeURIComponent(\"https://finance.eastmoney.com/a/\"+json.data.Art_Code+\".html\");\r\n $(\".jubao\").attr(\"data-pclink\", _link);\r\n\r\n try {\r\n if(_NewsId == \"202002151386303747\"){\r\n\r\n }else{\r\n if(json.data.Art_Robot_News == \"1\"){\r\n $(\".zwothers .sm .sublab\").html(\"郑重声明:本信息来源于东方财富Choice数据,相关数据仅供参考,不构成投资建议。东方财富网力求但不保证数据的完全准确,如有错漏请以中国证监会指定上市公司信息披露媒体为准,东方财富网不对因该资料全部或部分内容而引致的盈亏承担任何责任。用户个人对服务的使用承担风险,东方财富网对此不作任何类型的担保。\");\r\n }else{\r\n $(\".zwothers .sm .sublab\").html(\"郑重声明:东方财富发布此内容旨在传播更多信息,与本站立场无关,不构成投资建议。据此操作,风险自担。\");\r\n }\r\n }\r\n } catch (error) {\r\n \r\n }\r\n \r\n window.emshareFun = new emshare2020({\r\n title: json.data.Art_Title,\r\n desc: json.data.Art_Description,\r\n summary: '',\r\n imgUrl: \"https://cmsjs.eastmoney.com/common/weixin-share.png\"\r\n });\r\n \r\n if (typeof emshareFun != \"undefined\") {\r\n\r\n emshareFun.qrcode({\r\n width: 100,// 二维码宽度 可选 默认135\r\n colorDark: \"#000000\", //二维码颜色 可选 默认黑\r\n colorLight: \"#ffffff\",//背景色 可选 默认白\r\n logosrc: \"https://g1.dfcfw.com/g4/202003/20200318140436.gif\",// 二维码logo信息 可选[不建议加此参数] 默认有logo 值为\"none\"时无logo\r\n link: \"http://dl.dfcfs.com/m/ozih\",\r\n domid: \"wapqrcode\"\r\n });\r\n \r\n emshareFun.qrcode({\r\n width: 100,// 二维码宽度 可选 默认135\r\n colorDark: \"#000000\", //二维码颜色 可选 默认黑\r\n colorLight: \"#ffffff\",//背景色 可选 默认白\r\n logosrc: \"https://g1.dfcfw.com/g4/202003/20200318140436.gif\",// 二维码logo信息 可选[不建议加此参数] 默认有logo 值为\"none\"时无logo\r\n link: __WAPURL,\r\n domid: \"wapqrcode2\"\r\n });\r\n \r\n }\r\n \r\n initNewsIMG();\r\n initLangKeVideo();\r\n unityvote();\r\n zxzwObj.init();\r\n }else{\r\n location.href = \"https://finance.eastmoney.com/404.html\";\r\n }\r\n }\r\n })\r\n});\n\n/***/ }),\n\n/***/ 2:\n/***/ (function(module, exports) {\n\nvar apparr = new Array();\r\n\r\nfunction initVideo(_videoId, _videoWidth, _videoHeight, _videoType, _videoValue, _videoIsPoster, _videoPoster) {\r\n var videoitem = emav(_videoId, {\r\n width: _videoWidth,//播放器区域宽度,单位像素,按需设置,可通过 CSS 控制播放器尺寸。\r\n height: _videoHeight,//播放器区域高度,单位像素,按需设置,可通过 CSS 控制播放器尺寸。\r\n controls: true,//是否显示播放器的控制栏,默认true\r\n poster: _videoPoster,//设置封面图片完整地址\r\n posterImage: _videoIsPoster,//是否显示封面\r\n autoplay: false,//是否自动播放,默认false\r\n loop: false,//是否循环播放,默认false\r\n muted: false,//是否静音播放,默认false\r\n preload: \"auto\",//是否需要预加载,有 3 个属性\"auto\",\"meta\",\"none\" ,移动端由于系统限制,设置 auto 无效。默认auto\r\n controlBar: {//设置控制栏属性的参数组合\r\n children: [\r\n \"playToggle\",\r\n \"volumePanel\"\r\n ],\r\n playToggle: true,//是否显示播放、暂停切换按钮\r\n volumePanel: true,//是否显示音量控制\r\n\r\n remainingTimeDisplay: false,//是否显示视频剩余时间\r\n currentTimeDisplay: true,//是否显示视频当前时间\r\n timeDivider: true,//是否显示时间分割符(/)\r\n durationDisplay: true,//是否显示视频时长\r\n\r\n progressControl: true,//是否显示播放进度条\r\n playbackRateMenuButton: true,\r\n fullscreenToggle: true//是否显示全屏按钮\r\n },\r\n showContextMenu: false,//是否显示右键菜单,默认false\r\n showBigPlayButtonOnPaused: true,//暂停时是否显示播放按钮,默认false\r\n bigPlayButton: true,//是否显示居中的播放按钮\r\n statistic: {\r\n activeTime: false\r\n },\r\n standardFullscreenApi: false\r\n //,env: \"test\"\r\n });\r\n videoitem.id__ = _videoId;\r\n\r\n switch (_videoType) {\r\n case \"2\": videoitem.src(\"#\" + _videoValue); break;//直播\r\n default: videoitem.src(_videoValue); break;//录播或其他视频\r\n }\r\n\r\n videoitem.on('play', function (event) {\r\n jQuery.each(apparr, function (i, v) {\r\n if (v.id__ != videoitem.id__) {\r\n v.pause();\r\n }\r\n });\r\n jQuery(\".emav\").css({ \"position\": \"\", \"right\": 0, \"bottom\": 0, \"width\": \"\", \"height\": \"\", \"z-index\": 999 });\r\n });\r\n\r\n apparr.push(videoitem);\r\n}\r\n\r\nmodule.exports = function(){\r\n jQuery(\".em_lk_video\").each(function (_index) {\r\n var _old = jQuery(this);\r\n var lk_des = _old.attr('lk_des');\r\n if (typeof lk_des !== typeof undefined && lk_des !== false && lk_des != \"\") {\r\n lk_des = unescape(lk_des);\r\n jQuery(this).after('

' + lk_des + '

');\r\n }\r\n jQuery(this).replaceWith('
');\r\n });\r\n \r\n jQuery(\".middlevideobg\").each(function () {\r\n //var _this = jQuery(this);\r\n //var _dataid = _this.data(\"id\");\r\n //var _datavalue = _this.data(\"value\");\r\n //if (typeof _datavalue !== typeof undefined && _datavalue !== false && _datavalue != \"\") {\r\n // var _datavideoitem = _datavalue.split('#');\r\n // if (_datavideoitem.length == 2) {\r\n // initVideo(_dataid, 670, 425, _datavideoitem[0], _datavideoitem[1], false, \"\");\r\n // } else {\r\n // initVideo(_dataid, 670, 425, 99, _datavideoitem[0], false, \"\");\r\n // }\r\n //}\r\n jQuery(\".middlevideobg\").hide();\r\n jQuery(\".end_videolink\").show();\r\n });\r\n}\r\n\r\n//由于PC内核不支持播放,所以这个地方隐藏,在视频的末尾加链接【点击观看视频】\n\n/***/ })\n\n/******/ });\n//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJzb3VyY2VzIjpbIndlYnBhY2s6Ly8vd2VicGFjay9ib290c3RyYXAgYTdhZWJiOWZhNjhmYjMzY2RkMjg/MzQ0MioiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9tZDUvaW5kZXguanM/ZDMzNyIsIndlYnBhY2s6Ly8vLi9qcy9tb2R1bGVzL3ZvdGUvdW5pdHl2b3RlLmpzPzA5YmUiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9uZXdzaW1nL25ld3NwYy5qcyIsIndlYnBhY2s6Ly8vLi9qcy9OZXdzUENCZWZvcmUuanMiLCJ3ZWJwYWNrOi8vLy4vanMvbW9kdWxlcy9sYW5na2UvbmV3c3BjYmVmb3JlLmpzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7UUFBQTtRQUNBOztRQUVBO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7O1FBRUE7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0E7UUFDQTs7O1FBR0E7UUFDQTs7UUFFQTtRQUNBOztRQUVBO1FBQ0EsMkNBQTJDLGNBQWM7O1FBRXpEO1FBQ0E7UUFDQTtRQUNBO1FBQ0E7UUFDQTtRQUNBO1FBQ0EsS0FBSztRQUNMO1FBQ0E7O1FBRUE7UUFDQTtRQUNBO1FBQ0EsMkJBQTJCLDBCQUEwQixFQUFFO1FBQ3ZELGlDQUFpQyxlQUFlO1FBQ2hEO1FBQ0E7UUFDQTs7UUFFQTtRQUNBLHNEQUFzRCwrREFBK0Q7O1FBRXJIO1FBQ0E7O1FBRUE7UUFDQTs7Ozs7Ozs7QUNoRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLGdCQUFnQixzQ0FBc0M7QUFDdEQsaUJBQWlCO0FBQ2pCLGdCQUFnQix5Q0FBeUM7O0FBRXpEO0FBQ0E7QUFDQTtBQUNBO0FBQ0Esb0JBQW9CO0FBQ3BCLG9CQUFvQjtBQUNwQixvQkFBb0I7QUFDcEIsa0NBQWtDLDJDQUEyQztBQUM3RSxrQ0FBa0MsMkNBQTJDO0FBQzdFLGtDQUFrQywyQ0FBMkM7O0FBRTdFO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7O0FBRUEsZ0JBQWdCLGNBQWM7QUFDOUI7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7O0FBRUE7O0FBRUE7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBLGdCQUFnQixRQUFRO0FBQ3hCO0FBQ0E7QUFDQTtBQUNBOztBQUVBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTs7QUFFQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsZ0JBQWdCLHdCQUF3QjtBQUN4QztBQUNBO0FBQ0E7O0FBRUE7QUFDQTtBQUNBO0FB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O0FBQ0EsNkRBQTZELGdCQUFnQixZQUFZLG1CQUFtQixXQUFXO0FBQ3ZIO0FBQ0E7QUFDQSxLQUFLOztBQUVMO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlO0FBQ2Y7QUFDQTtBQUNBO0FBQ0E7QUFDQTtBQUNBLEtBQUs7QUFDTDs7QUFFQSx3QyIsImZpbGUiOiJOZXdzUENCZWZvcmUuanMiLCJzb3VyY2VzQ29udGVudCI6WyIgXHQvLyBUaGUgbW9kdWxlIGNhY2hlXG4gXHR2YXIgaW5zdGFsbGVkTW9kdWxlcyA9IHt9O1xuXG4gXHQvLyBUaGUgcmVxdWlyZSBmdW5jdGlvblxuIFx0ZnVuY3Rpb24gX193ZWJwYWNrX3JlcXVpcmVfXyhtb2R1bGVJZCkge1xuXG4gXHRcdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuIFx0XHRpZihpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSkge1xuIFx0XHRcdHJldHVybiBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXS5leHBvcnRzO1xuIFx0XHR9XG4gXHRcdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG4gXHRcdHZhciBtb2R1bGUgPSBpbnN0YWxsZWRNb2R1bGVzW21vZHVsZUlkXSA9IHtcbiBcdFx0XHRpOiBtb2R1bGVJZCxcbiBcdFx0XHRsOiBmYWxzZSxcbiBcdFx0XHRleHBvcnRzOiB7fVxuIFx0XHR9O1xuXG4gXHRcdC8vIEV4ZWN1dGUgdGhlIG1vZHVsZSBmdW5jdGlvblxuIFx0XHRtb2R1bGVzW21vZHVsZUlkXS5jYWxsKG1vZHVsZS5leHBvcnRzLCBtb2R1bGUsIG1vZHVsZS5leHBvcnRzLCBfX3dlYnBhY2tfcmVxdWlyZV9fKTtcblxuIFx0XHQvLyBGbGFnIHRoZSBtb2R1bGUgYXMgbG9hZGVkXG4gXHRcdG1vZHVsZS5sID0gdHJ1ZTtcblxuIFx0XHQvLyBSZXR1cm4gdGhlIGV4cG9ydHMgb2YgdGhlIG1vZHVsZVxuIFx0XHRyZXR1cm4gbW9kdWxlLmV4cG9ydHM7XG4gXHR9XG5cblxuIFx0Ly8gZXhwb3NlIHRoZSBtb2R1bGVzIG9iamVjdCAoX193ZWJwYWNrX21vZHVsZXNfXylcbiBcdF9fd2VicGFja19yZXF1aXJlX18ubSA9IG1vZHVsZXM7XG5cbiBcdC8vIGV4cG9zZSB0aGUgbW9kdWxlIGNhY2hlXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmMgPSBpbnN0YWxsZWRNb2R1bGVzO1xuXG4gXHQvLyBpZGVudGl0eSBmdW5jdGlvbiBmb3IgY2FsbGluZyBoYXJtb255IGltcG9ydHMgd2l0aCB0aGUgY29ycmVjdCBjb250ZXh0XG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLmkgPSBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWU7IH07XG5cbiBcdC8vIGRlZmluZSBnZXR0ZXIgZnVuY3Rpb24gZm9yIGhhcm1vbnkgZXhwb3J0c1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kID0gZnVuY3Rpb24oZXhwb3J0cywgbmFtZSwgZ2V0dGVyKSB7XG4gXHRcdGlmKCFfX3dlYnBhY2tfcmVxdWlyZV9fLm8oZXhwb3J0cywgbmFtZSkpIHtcbiBcdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywgbmFtZSwge1xuIFx0XHRcdFx0Y29uZmlndXJhYmxlOiBmYWxzZSxcbiBcdFx0XHRcdGVudW1lcmFibGU6IHRydWUsXG4gXHRcdFx0XHRnZXQ6IGdldHRlclxuIFx0XHRcdH0pO1xuIFx0XHR9XG4gXHR9O1xuXG4gXHQvLyBnZXREZWZhdWx0RXhwb3J0IGZ1bmN0aW9uIGZvciBjb21wYXRpYmlsaXR5IHdpdGggbm9uLWhhcm1vbnkgbW9kdWxlc1xuIFx0X193ZWJwYWNrX3JlcXVpcmVfXy5uID0gZnVuY3Rpb24obW9kdWxlKSB7XG4gXHRcdHZhciBnZXR0ZXIgPSBtb2R1bGUgJiYgbW9kdWxlLl9fZXNNb2R1bGUgP1xuIFx0XHRcdGZ1bmN0aW9uIGdldERlZmF1bHQoKSB7IHJldHVybiBtb2R1bGVbJ2RlZmF1bHQnXTsgfSA6XG4gXHRcdFx0ZnVuY3Rpb24gZ2V0TW9kdWxlRXhwb3J0cygpIHsgcmV0dXJuIG1vZHVsZTsgfTtcbiBcdFx0X193ZWJwYWNrX3JlcXVpcmVfXy5kKGdldHRlciwgJ2EnLCBnZXR0ZXIpO1xuIFx0XHRyZXR1cm4gZ2V0dGVyO1xuIFx0fTtcblxuIFx0Ly8gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLm8gPSBmdW5jdGlvbihvYmplY3QsIHByb3BlcnR5KSB7IHJldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwob2JqZWN0LCBwcm9wZXJ0eSk7IH07XG5cbiBcdC8vIF9fd2VicGFja19wdWJsaWNfcGF0aF9fXG4gXHRfX3dlYnBhY2tfcmVxdWlyZV9fLnAgPSBcIlwiO1xuXG4gXHQvLyBMb2FkIGVudHJ5IG1vZHVsZSBhbmQgcmV0dXJuIGV4cG9ydHNcbiBcdHJldHVybiBfX3dlYnBhY2tfcmVxdWlyZV9fKF9fd2VicGFja19yZXF1aXJlX18ucyA9IDE5KTtcblxuXG5cbi8vIFdFQlBBQ0sgRk9PVEVSIC8vXG4vLyB3ZWJwYWNrL2Jvb3RzdHJhcCBhN2FlYmI5ZmE2OGZiMzNjZGQyOCIsIi8qXHJcbiAqIEEgSmF2YVNjcmlwdCBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgUlNBIERhdGEgU2VjdXJpdHksIEluYy4gTUQ1IE1lc3NhZ2VcclxuICogRGlnZXN0IEFsZ29yaXRobSwgYXMgZGVmaW5lZCBpbiBSRkMgMTMyMS5cclxuICogVmVyc2lvbiAyLjEgQ29weXJpZ2h0IChDKSBQYXVsIEpvaG5zdG9uIDE5OTkgLSAyMDAyLlxyXG4gKiBPdGhlciBjb250cmlidXRvcnM6IEdyZWcgSG9sdCwgQW5kcmV3IEtlcGVydCwgWWRuYXIsIExvc3RpbmV0XHJcbiAqIERpc3RyaWJ1dGVkIHVuZGVyIHRoZSBCU0QgTGljZW5zZVxyXG4gKiBTZWUgaHR0cDovL3BhamhvbWUub3JnLnVrL2NyeXB0L21kNSBmb3IgbW9yZSBpbmZvLlxyXG4gKi9cclxuXHJcbi8qXHJcbiAqIENvbmZpZ3VyYWJsZSB2YXJpYWJsZXMuIFlvdSBtYXkgbmVlZCB0byB0d2VhayB0aGVzZSB0byBiZSBjb21wYXRpYmxlIHdpdGhcclxuICogdGhlIHNlcnZlci1zaWRlLCBidXQgdGhlIGRlZmF1bHRzIHdvcmsgaW4gbW9zdCBjYXNlcy5cclxuICovXHJcbnZhciBoZXhjYXNlID0gMDsgIC8qIGhleCBvdXRwdXQgZm9ybWF0LiAwIC0gbG93ZXJjYXNlOyAxIC0gdXBwZXJjYXNlICAgICAgICAqL1xyXG52YXIgYjY0cGFkICA9IFwiXCI7IC8qIGJhc2UtNjQgcGFkIGNoYXJhY3Rlci4gXCI9XCIgZm9yIHN0cmljdCBSRkMgY29tcGxpYW5jZSAgICovXHJcbnZhciBjaHJzeiAgID0gODsgIC8qIGJpdHMgcGVyIGlucHV0IGNoYXJhY3Rlci4gOCAtIEFTQ0lJOyAxNiAtIFVuaWNvZGUgICAgICAqL1xyXG5cclxuLypcclxuICogVGhlc2UgYXJlIHRoZSBmdW5jdGlvbnMgeW91J2xsIHVzdWFsbHkgd2FudCB0byBjYWxsXHJcbiAqIFRoZXkgdGFrZSBzdHJpbmcgYXJndW1lbnRzIGFuZCByZXR1cm4gZWl0aGVyIGhleCBvciBiYXNlLTY0IGVuY29kZWQgc3RyaW5nc1xyXG4gKi9cclxuZnVuY3Rpb24gaGV4X21kNShzKXsgcmV0dXJuIGJpbmwyaGV4KGNvcmVfbWQ1KHN0cjJiaW5sKHMpLCBzLmxlbmd0aCAqIGNocnN6KSk7fVxyXG5mdW5jdGlvbiBiNjRfbWQ1KHMpeyByZXR1cm4gYmlubDJiNjQoY29yZV9tZDUoc3RyMmJpbmwocyksIHMubGVuZ3RoICogY2hyc3opKTt9XHJcbmZ1bmN0aW9uIHN0cl9tZDUocyl7IHJldHVybiBiaW5sMnN0cihjb3JlX21kNShzdHIyYmlubChzKSwgcy5sZW5ndGggKiBjaHJzeikpO31cclxuZnVuY3Rpb24gaGV4X2htYWNfbWQ1KGtleSwgZGF0YSkgeyByZXR1cm4gYmlubDJoZXgoY29yZV9obWFjX21kNShrZXksIGRhdGEpKTsgfVxyXG5mdW5jdGlvbiBiNjRfaG1hY19tZDUoa2V5LCBkYXRhKSB7IHJldHVybiBiaW5sMmI2NChjb3JlX2htYWNfbWQ1KGtleSwgZGF0YSkpOyB9XHJcbmZ1bmN0aW9uIHN0cl9obWFjX21kNShrZXksIGRhdGEpIHsgcmV0dXJuIGJpbmwyc3RyKGNvcmVfaG1hY19tZDUoa2V5LCBkYXRhKSk7IH1cclxuXHJcbi8qXHJcbiAqIFBlcmZvcm0gYSBzaW1wbGUgc2VsZi10ZXN0IHRvIHNlZSBpZiB0aGUgVk0gaXMgd29ya2luZ1xyXG4gKi9cclxuZnVuY3Rpb24gbWQ1X3ZtX3Rlc3QoKVxyXG57XHJcbiAgcmV0dXJuIGhleF9tZDUoXCJhYmNcIikgPT0gXCI5MDAxNTA5ODNjZDI0ZmIwZDY5NjNmN2QyOGUxN2Y3MlwiO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDYWxjdWxhdGUgdGhlIE1ENSBvZiBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzLCBhbmQgYSBiaXQgbGVuZ3RoXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3JlX21kNSh4LCBsZW4pXHJcbntcclxuICAvKiBhcHBlbmQgcGFkZGluZyAqL1xyXG4gIHhbbGVuID4+IDVdIHw9IDB4ODAgPDwgKChsZW4pICUgMzIpO1xyXG4gIHhbKCgobGVuICsgNjQpID4+PiA5KSA8PCA0KSArIDE0XSA9IGxlbjtcclxuXHJcbiAgdmFyIGEgPSAgMTczMjU4NDE5MztcclxuICB2YXIgYiA9IC0yNzE3MzM4Nzk7XHJcbiAgdmFyIGMgPSAtMTczMjU4NDE5NDtcclxuICB2YXIgZCA9ICAyNzE3MzM4Nzg7XHJcblxyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCB4Lmxlbmd0aDsgaSArPSAxNilcclxuICB7XHJcbiAgICB2YXIgb2xkYSA9IGE7XHJcbiAgICB2YXIgb2xkYiA9IGI7XHJcbiAgICB2YXIgb2xkYyA9IGM7XHJcbiAgICB2YXIgb2xkZCA9IGQ7XHJcblxyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDBdLCA3ICwgLTY4MDg3NjkzNik7XHJcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgMV0sIDEyLCAtMzg5NTY0NTg2KTtcclxuICAgIGMgPSBtZDVfZmYoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTcsICA2MDYxMDU4MTkpO1xyXG4gICAgYiA9IG1kNV9mZihiLCBjLCBkLCBhLCB4W2krIDNdLCAyMiwgLTEwNDQ1MjUzMzApO1xyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDRdLCA3ICwgLTE3NjQxODg5Nyk7XHJcbiAgICBkID0gbWQ1X2ZmKGQsIGEsIGIsIGMsIHhbaSsgNV0sIDEyLCAgMTIwMDA4MDQyNik7XHJcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE3LCAtMTQ3MzIzMTM0MSk7XHJcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsgN10sIDIyLCAtNDU3MDU5ODMpO1xyXG4gICAgYSA9IG1kNV9mZihhLCBiLCBjLCBkLCB4W2krIDhdLCA3ICwgIDE3NzAwMzU0MTYpO1xyXG4gICAgZCA9IG1kNV9mZihkLCBhLCBiLCBjLCB4W2krIDldLCAxMiwgLTE5NTg0MTQ0MTcpO1xyXG4gICAgYyA9IG1kNV9mZihjLCBkLCBhLCBiLCB4W2krMTBdLCAxNywgLTQyMDYzKTtcclxuICAgIGIgPSBtZDVfZmYoYiwgYywgZCwgYSwgeFtpKzExXSwgMjIsIC0xOTkwNDA0MTYyKTtcclxuICAgIGEgPSBtZDVfZmYoYSwgYiwgYywgZCwgeFtpKzEyXSwgNyAsICAxODA0NjAzNjgyKTtcclxuICAgIGQgPSBtZDVfZmYoZCwgYSwgYiwgYywgeFtpKzEzXSwgMTIsIC00MDM0MTEwMSk7XHJcbiAgICBjID0gbWQ1X2ZmKGMsIGQsIGEsIGIsIHhbaSsxNF0sIDE3LCAtMTUwMjAwMjI5MCk7XHJcbiAgICBiID0gbWQ1X2ZmKGIsIGMsIGQsIGEsIHhbaSsxNV0sIDIyLCAgMTIzNjUzNTMyOSk7XHJcblxyXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDFdLCA1ICwgLTE2NTc5NjUxMCk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsgNl0sIDkgLCAtMTA2OTUwMTYzMik7XHJcbiAgICBjID0gbWQ1X2dnKGMsIGQsIGEsIGIsIHhbaSsxMV0sIDE0LCAgNjQzNzE3NzEzKTtcclxuICAgIGIgPSBtZDVfZ2coYiwgYywgZCwgYSwgeFtpKyAwXSwgMjAsIC0zNzM4OTczMDIpO1xyXG4gICAgYSA9IG1kNV9nZyhhLCBiLCBjLCBkLCB4W2krIDVdLCA1ICwgLTcwMTU1ODY5MSk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsxMF0sIDkgLCAgMzgwMTYwODMpO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krMTVdLCAxNCwgLTY2MDQ3ODMzNSk7XHJcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgNF0sIDIwLCAtNDA1NTM3ODQ4KTtcclxuICAgIGEgPSBtZDVfZ2coYSwgYiwgYywgZCwgeFtpKyA5XSwgNSAsICA1Njg0NDY0MzgpO1xyXG4gICAgZCA9IG1kNV9nZyhkLCBhLCBiLCBjLCB4W2krMTRdLCA5ICwgLTEwMTk4MDM2OTApO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDNdLCAxNCwgLTE4NzM2Mzk2MSk7XHJcbiAgICBiID0gbWQ1X2dnKGIsIGMsIGQsIGEsIHhbaSsgOF0sIDIwLCAgMTE2MzUzMTUwMSk7XHJcbiAgICBhID0gbWQ1X2dnKGEsIGIsIGMsIGQsIHhbaSsxM10sIDUgLCAtMTQ0NDY4MTQ2Nyk7XHJcbiAgICBkID0gbWQ1X2dnKGQsIGEsIGIsIGMsIHhbaSsgMl0sIDkgLCAtNTE0MDM3ODQpO1xyXG4gICAgYyA9IG1kNV9nZyhjLCBkLCBhLCBiLCB4W2krIDddLCAxNCwgIDE3MzUzMjg0NzMpO1xyXG4gICAgYiA9IG1kNV9nZyhiLCBjLCBkLCBhLCB4W2krMTJdLCAyMCwgLTE5MjY2MDc3MzQpO1xyXG5cclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA1XSwgNCAsIC0zNzg1NTgpO1xyXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krIDhdLCAxMSwgLTIwMjI1NzQ0NjMpO1xyXG4gICAgYyA9IG1kNV9oaChjLCBkLCBhLCBiLCB4W2krMTFdLCAxNiwgIDE4MzkwMzA1NjIpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTRdLCAyMywgLTM1MzA5NTU2KTtcclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyAxXSwgNCAsIC0xNTMwOTkyMDYwKTtcclxuICAgIGQgPSBtZDVfaGgoZCwgYSwgYiwgYywgeFtpKyA0XSwgMTEsICAxMjcyODkzMzUzKTtcclxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyA3XSwgMTYsIC0xNTU0OTc2MzIpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krMTBdLCAyMywgLTEwOTQ3MzA2NDApO1xyXG4gICAgYSA9IG1kNV9oaChhLCBiLCBjLCBkLCB4W2krMTNdLCA0ICwgIDY4MTI3OTE3NCk7XHJcbiAgICBkID0gbWQ1X2hoKGQsIGEsIGIsIGMsIHhbaSsgMF0sIDExLCAtMzU4NTM3MjIyKTtcclxuICAgIGMgPSBtZDVfaGgoYywgZCwgYSwgYiwgeFtpKyAzXSwgMTYsIC03MjI1MjE5NzkpO1xyXG4gICAgYiA9IG1kNV9oaChiLCBjLCBkLCBhLCB4W2krIDZdLCAyMywgIDc2MDI5MTg5KTtcclxuICAgIGEgPSBtZDVfaGgoYSwgYiwgYywgZCwgeFtpKyA5XSwgNCAsIC02NDAzNjQ0ODcpO1xyXG4gICAgZCA9IG1kNV9oaChkLCBhLCBiLCBjLCB4W2krMTJdLCAxMSwgLTQyMTgxNTgzNSk7XHJcbiAgICBjID0gbWQ1X2hoKGMsIGQsIGEsIGIsIHhbaSsxNV0sIDE2LCAgNTMwNzQyNTIwKTtcclxuICAgIGIgPSBtZDVfaGgoYiwgYywgZCwgYSwgeFtpKyAyXSwgMjMsIC05OTUzMzg2NTEpO1xyXG5cclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyAwXSwgNiAsIC0xOTg2MzA4NDQpO1xyXG4gICAgZCA9IG1kNV9paShkLCBhLCBiLCBjLCB4W2krIDddLCAxMCwgIDExMjY4OTE0MTUpO1xyXG4gICAgYyA9IG1kNV9paShjLCBkLCBhLCBiLCB4W2krMTRdLCAxNSwgLTE0MTYzNTQ5MDUpO1xyXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krIDVdLCAyMSwgLTU3NDM0MDU1KTtcclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKzEyXSwgNiAsICAxNzAwNDg1NTcxKTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKyAzXSwgMTAsIC0xODk0OTg2NjA2KTtcclxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKzEwXSwgMTUsIC0xMDUxNTIzKTtcclxuICAgIGIgPSBtZDVfaWkoYiwgYywgZCwgYSwgeFtpKyAxXSwgMjEsIC0yMDU0OTIyNzk5KTtcclxuICAgIGEgPSBtZDVfaWkoYSwgYiwgYywgZCwgeFtpKyA4XSwgNiAsICAxODczMzEzMzU5KTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzE1XSwgMTAsIC0zMDYxMTc0NCk7XHJcbiAgICBjID0gbWQ1X2lpKGMsIGQsIGEsIGIsIHhbaSsgNl0sIDE1LCAtMTU2MDE5ODM4MCk7XHJcbiAgICBiID0gbWQ1X2lpKGIsIGMsIGQsIGEsIHhbaSsxM10sIDIxLCAgMTMwOTE1MTY0OSk7XHJcbiAgICBhID0gbWQ1X2lpKGEsIGIsIGMsIGQsIHhbaSsgNF0sIDYgLCAtMTQ1NTIzMDcwKTtcclxuICAgIGQgPSBtZDVfaWkoZCwgYSwgYiwgYywgeFtpKzExXSwgMTAsIC0xMTIwMjEwMzc5KTtcclxuICAgIGMgPSBtZDVfaWkoYywgZCwgYSwgYiwgeFtpKyAyXSwgMTUsICA3MTg3ODcyNTkpO1xyXG4gICAgYiA9IG1kNV9paShiLCBjLCBkLCBhLCB4W2krIDldLCAyMSwgLTM0MzQ4NTU1MSk7XHJcblxyXG4gICAgYSA9IHNhZmVfYWRkKGEsIG9sZGEpO1xyXG4gICAgYiA9IHNhZmVfYWRkKGIsIG9sZGIpO1xyXG4gICAgYyA9IHNhZmVfYWRkKGMsIG9sZGMpO1xyXG4gICAgZCA9IHNhZmVfYWRkKGQsIG9sZGQpO1xyXG4gIH1cclxuICByZXR1cm4gQXJyYXkoYSwgYiwgYywgZCk7XHJcblxyXG59XHJcblxyXG4vKlxyXG4gKiBUaGVzZSBmdW5jdGlvbnMgaW1wbGVtZW50IHRoZSBmb3VyIGJhc2ljIG9wZXJhdGlvbnMgdGhlIGFsZ29yaXRobSB1c2VzLlxyXG4gKi9cclxuZnVuY3Rpb24gbWQ1X2NtbihxLCBhLCBiLCB4LCBzLCB0KVxyXG57XHJcbiAgcmV0dXJuIHNhZmVfYWRkKGJpdF9yb2woc2FmZV9hZGQoc2FmZV9hZGQoYSwgcSksIHNhZmVfYWRkKHgsIHQpKSwgcyksYik7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2ZmKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbigoYiAmIGMpIHwgKCh+YikgJiBkKSwgYSwgYiwgeCwgcywgdCk7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2dnKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbigoYiAmIGQpIHwgKGMgJiAofmQpKSwgYSwgYiwgeCwgcywgdCk7XHJcbn1cclxuZnVuY3Rpb24gbWQ1X2hoKGEsIGIsIGMsIGQsIHgsIHMsIHQpXHJcbntcclxuICByZXR1cm4gbWQ1X2NtbihiIF4gYyBeIGQsIGEsIGIsIHgsIHMsIHQpO1xyXG59XHJcbmZ1bmN0aW9uIG1kNV9paShhLCBiLCBjLCBkLCB4LCBzLCB0KVxyXG57XHJcbiAgcmV0dXJuIG1kNV9jbW4oYyBeIChiIHwgKH5kKSksIGEsIGIsIHgsIHMsIHQpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDYWxjdWxhdGUgdGhlIEhNQUMtTUQ1LCBvZiBhIGtleSBhbmQgc29tZSBkYXRhXHJcbiAqL1xyXG5mdW5jdGlvbiBjb3JlX2htYWNfbWQ1KGtleSwgZGF0YSlcclxue1xyXG4gIHZhciBia2V5ID0gc3RyMmJpbmwoa2V5KTtcclxuICBpZihia2V5Lmxlbmd0aCA+IDE2KSBia2V5ID0gY29yZV9tZDUoYmtleSwga2V5Lmxlbmd0aCAqIGNocnN6KTtcclxuXHJcbiAgdmFyIGlwYWQgPSBBcnJheSgxNiksIG9wYWQgPSBBcnJheSgxNik7XHJcbiAgZm9yKHZhciBpID0gMDsgaSA8IDE2OyBpKyspXHJcbiAge1xyXG4gICAgaXBhZFtpXSA9IGJrZXlbaV0gXiAweDM2MzYzNjM2O1xyXG4gICAgb3BhZFtpXSA9IGJrZXlbaV0gXiAweDVDNUM1QzVDO1xyXG4gIH1cclxuXHJcbiAgdmFyIGhhc2ggPSBjb3JlX21kNShpcGFkLmNvbmNhdChzdHIyYmlubChkYXRhKSksIDUxMiArIGRhdGEubGVuZ3RoICogY2hyc3opO1xyXG4gIHJldHVybiBjb3JlX21kNShvcGFkLmNvbmNhdChoYXNoKSwgNTEyICsgMTI4KTtcclxufVxyXG5cclxuLypcclxuICogQWRkIGludGVnZXJzLCB3cmFwcGluZyBhdCAyXjMyLiBUaGlzIHVzZXMgMTYtYml0IG9wZXJhdGlvbnMgaW50ZXJuYWxseVxyXG4gKiB0byB3b3JrIGFyb3VuZCBidWdzIGluIHNvbWUgSlMgaW50ZXJwcmV0ZXJzLlxyXG4gKi9cclxuZnVuY3Rpb24gc2FmZV9hZGQoeCwgeSlcclxue1xyXG4gIHZhciBsc3cgPSAoeCAmIDB4RkZGRikgKyAoeSAmIDB4RkZGRik7XHJcbiAgdmFyIG1zdyA9ICh4ID4+IDE2KSArICh5ID4+IDE2KSArIChsc3cgPj4gMTYpO1xyXG4gIHJldHVybiAobXN3IDw8IDE2KSB8IChsc3cgJiAweEZGRkYpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBCaXR3aXNlIHJvdGF0ZSBhIDMyLWJpdCBudW1iZXIgdG8gdGhlIGxlZnQuXHJcbiAqL1xyXG5mdW5jdGlvbiBiaXRfcm9sKG51bSwgY250KVxyXG57XHJcbiAgcmV0dXJuIChudW0gPDwgY250KSB8IChudW0gPj4+ICgzMiAtIGNudCkpO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDb252ZXJ0IGEgc3RyaW5nIHRvIGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHNcclxuICogSWYgY2hyc3ogaXMgQVNDSUksIGNoYXJhY3RlcnMgPjI1NSBoYXZlIHRoZWlyIGhpLWJ5dGUgc2lsZW50bHkgaWdub3JlZC5cclxuICovXHJcbmZ1bmN0aW9uIHN0cjJiaW5sKHN0cilcclxue1xyXG4gIHZhciBiaW4gPSBBcnJheSgpO1xyXG4gIHZhciBtYXNrID0gKDEgPDwgY2hyc3opIC0gMTtcclxuICBmb3IodmFyIGkgPSAwOyBpIDwgc3RyLmxlbmd0aCAqIGNocnN6OyBpICs9IGNocnN6KVxyXG4gICAgYmluW2k+PjVdIHw9IChzdHIuY2hhckNvZGVBdChpIC8gY2hyc3opICYgbWFzaykgPDwgKGklMzIpO1xyXG4gIHJldHVybiBiaW47XHJcbn1cclxuXHJcbi8qXHJcbiAqIENvbnZlcnQgYW4gYXJyYXkgb2YgbGl0dGxlLWVuZGlhbiB3b3JkcyB0byBhIHN0cmluZ1xyXG4gKi9cclxuZnVuY3Rpb24gYmlubDJzdHIoYmluKVxyXG57XHJcbiAgdmFyIHN0ciA9IFwiXCI7XHJcbiAgdmFyIG1hc2sgPSAoMSA8PCBjaHJzeikgLSAxO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW4ubGVuZ3RoICogMzI7IGkgKz0gY2hyc3opXHJcbiAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoYmluW2k+PjVdID4+PiAoaSAlIDMyKSkgJiBtYXNrKTtcclxuICByZXR1cm4gc3RyO1xyXG59XHJcblxyXG4vKlxyXG4gKiBDb252ZXJ0IGFuIGFycmF5IG9mIGxpdHRsZS1lbmRpYW4gd29yZHMgdG8gYSBoZXggc3RyaW5nLlxyXG4gKi9cclxuZnVuY3Rpb24gYmlubDJoZXgoYmluYXJyYXkpXHJcbntcclxuICB2YXIgaGV4X3RhYiA9IGhleGNhc2UgPyBcIjAxMjM0NTY3ODlBQkNERUZcIiA6IFwiMDEyMzQ1Njc4OWFiY2RlZlwiO1xyXG4gIHZhciBzdHIgPSBcIlwiO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpKyspXHJcbiAge1xyXG4gICAgc3RyICs9IGhleF90YWIuY2hhckF0KChiaW5hcnJheVtpPj4yXSA+PiAoKGklNCkqOCs0KSkgJiAweEYpICtcclxuICAgICAgICAgICBoZXhfdGFiLmNoYXJBdCgoYmluYXJyYXlbaT4+Ml0gPj4gKChpJTQpKjggICkpICYgMHhGKTtcclxuICB9XHJcbiAgcmV0dXJuIHN0cjtcclxufVxyXG5cclxuLypcclxuICogQ29udmVydCBhbiBhcnJheSBvZiBsaXR0bGUtZW5kaWFuIHdvcmRzIHRvIGEgYmFzZS02NCBzdHJpbmdcclxuICovXHJcbmZ1bmN0aW9uIGJpbmwyYjY0KGJpbmFycmF5KVxyXG57XHJcbiAgdmFyIHRhYiA9IFwiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrL1wiO1xyXG4gIHZhciBzdHIgPSBcIlwiO1xyXG4gIGZvcih2YXIgaSA9IDA7IGkgPCBiaW5hcnJheS5sZW5ndGggKiA0OyBpICs9IDMpXHJcbiAge1xyXG4gICAgdmFyIHRyaXBsZXQgPSAoKChiaW5hcnJheVtpICAgPj4gMl0gPj4gOCAqICggaSAgICU0KSkgJiAweEZGKSA8PCAxNilcclxuICAgICAgICAgICAgICAgIHwgKCgoYmluYXJyYXlbaSsxID4+IDJdID4+IDggKiAoKGkrMSklNCkpICYgMHhGRikgPDwgOCApXHJcbiAgICAgICAgICAgICAgICB8ICAoKGJpbmFycmF5W2krMiA+PiAyXSA+PiA4ICogKChpKzIpJTQpKSAmIDB4RkYpO1xyXG4gICAgZm9yKHZhciBqID0gMDsgaiA8IDQ7IGorKylcclxuICAgIHtcclxuICAgICAgaWYoaSAqIDggKyBqICogNiA+IGJpbmFycmF5Lmxlbmd0aCAqIDMyKSBzdHIgKz0gYjY0cGFkO1xyXG4gICAgICBlbHNlIHN0ciArPSB0YWIuY2hhckF0KCh0cmlwbGV0ID4+IDYqKDMtaikpICYgMHgzRik7XHJcbiAgICB9XHJcbiAgfVxyXG4gIHJldHVybiBzdHI7XHJcbn1cclxuXHJcbm1vZHVsZS5leHBvcnRzID0gaGV4X21kNVxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbW9kdWxlcy9tZDUvaW5kZXguanNcbi8vIG1vZHVsZSBpZCA9IDBcbi8vIG1vZHVsZSBjaHVua3MgPSAxIDIiLCJtb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICAhZnVuY3Rpb24gRU1fVm90ZSgkKSB7XHJcbiAgICAgICAgLy/moLzlvI/ljJbmipXnpajmlbBcclxuICAgICAgICBmdW5jdGlvbiBnc2hWb3RlTnVtKG51bWIpIHtcclxuICAgICAgICAgICAgaWYgKG51bWIgPCAxMDAwMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bWI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChudW1iIC8gMTAwMDApLnRvRml4ZWQoMikgKyBcIuS4h1wiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8v5oqV56Wo5q+U5L6LXHJcbiAgICAgICAgZnVuY3Rpb24gVm90ZVpoYW5CaShzdW1Wb3RlLCBjdXJWb3RlKSB7XHJcbiAgICAgICAgICAgIGlmIChzdW1Wb3RlID09IDAgfHwgY3VyVm90ZSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gcGFyc2VGbG9hdChjdXJWb3RlIC8gc3VtVm90ZSAqIDEwMCkudG9GaXhlZCgyKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy/ljaDmr5TmnaHlrr3luqborqHnrpdcclxuICAgICAgICBmdW5jdGlvbiBWb3RlWmhhbkJpV2lkdGgoemhhbkJpLG1heFdpZHRoKSB7XHJcbiAgICAgICAgICAgIGlmICh6aGFuQmkgPT0gMCB8fCBtYXhXaWR0aCA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgcmV0dXJuIHBhcnNlRmxvYXQoemhhbkJpIC8gMTAwICogbWF4V2lkdGgpLnRvRml4ZWQoMik7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIC8vIOiOt+WPlmNvb2tpZVxyXG4gICAgICAgIGZ1bmN0aW9uIGdldFZvdGVDb29raWUoa2V5KSB7XHJcbiAgICAgICAgICAgIHZhciBjb29raWVBcnJheSA9IGRvY3VtZW50LmNvb2tpZS5zcGxpdChcIjtcIik7XHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgY29va2llQXJyYXkubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBhcnIgPSBjb29raWVBcnJheVtpXS5zcGxpdChcIj1cIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoYXJyWzBdLnJlcGxhY2UoXCIgXCIsIFwiXCIpID09IGtleSlcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gdW5lc2NhcGUoYXJyWzFdKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gXCJcIjtcclxuICAgICAgICB9XHJcbiAgICAgICAgLy8g6K6+572uY29va2llXHJcbiAgICAgICAgZnVuY3Rpb24gc2V0Vm90ZUNvb2tpZShrZXksIHZhbHVlLCBleHBpcmVzKSB7XHJcbiAgICAgICAgICAgIHZhciBkYXRlID0gbmV3IERhdGUoKTtcclxuICAgICAgICAgICAgdmFyIG1zID0gZXhwaXJlcyAqIDYwICogNjAgKiAxMDAwOy8v5Y+C5pWw5Lyg6L+b5p2l55qE5Y2V5L2N5piv5bCP5pe2XHJcbiAgICAgICAgICAgIGRhdGUuc2V0VGltZShkYXRlLmdldFRpbWUoKSArIG1zKTtcclxuICAgICAgICAgICAgdmFyIHN0ciA9IGtleSArIFwiPVwiICsgZXNjYXBlKHZhbHVlKTtcclxuICAgICAgICAgICAgc3RyICs9IFwiOyBleHBpcmVzPVwiICsgZGF0ZS50b1VUQ1N0cmluZygpICsgXCI7IGRvbWFpbj1cIiArIGxvY2F0aW9uLmhvc3QgKyBcIjtcIjtcclxuICAgICAgICAgICAgZG9jdW1lbnQuY29va2llID0gc3RyO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB2YXIgX2lzTG9ja1ZvdGUgPSBbXTsvL+aKleelqOaMiemSruaYr+WQpuWkhOS6jumUgeWumueKtuaAge+8jOaUvue9rui/nue7reeCueWHu+aKleelqOaMiemSrlxyXG4gICAgICAgICQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIuYnRuX3ZvdGVcIiwgZnVuY3Rpb24gKCkgey8v5oqV56Wo54K55Ye75LqL5Lu2XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3ZvdGVfaWQgPSBfdGhpcy5hdHRyKFwidm90ZV9pZFwiKTtcclxuICAgICAgICAgICAgdmFyIF92b3RlX3RpdGxlID0gX3RoaXMuYXR0cihcInZvdGVfdGl0bGVcIik7XHJcbiAgICAgICAgICAgIGlmIChfdm90ZV9pZCA9PSBcIlwiKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdmFyIF9jaG9vc2VJZHMgPSBcIlwiOy8vVmlfSWTljZXkuKrnmoTpgInpoblpZO+8m1ZpX1ZtX0lk5LiA6YGT6aKYMeS4qmlk77yb6YCJ6aG55LiA5LiqaWTvvJtWaV9WZ19JZOS4gOS4quaKleelqOS4gOS4qmlkXHJcbiAgICAgICAgICAgIC8vVmlfSWTljZXkuKrnmoTpgInpoblpZO+8m1ZpX1ZtX0lk5LiA6YGT6aKYMeS4qmlk77yb6YCJ6aG55LiA5LiqaWTvvJtWaV9WZ19JZOS4gOS4quaKleelqOS4gOS4qmlkXHJcblxyXG5cclxuICAgICAgICAgICAgdmFyIF90aW11ID0gW107Ly/lvZPliY3mipXnpajmgLvnmoTpopjnm65cclxuICAgICAgICAgICAgJCgnLnZvdGVfJyArIF92b3RlX2lkICsgXCIgLnZvdGV0eXBlX2xpXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpdm1pZCA9ICQodGhpcykuYXR0cihcInZpdm1pZFwiKTtcclxuICAgICAgICAgICAgICAgIGlmIChfdGltdS5pbmRleE9mKHZpdm1pZCkgPCAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RpbXUucHVzaCh2aXZtaWQpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgIHZhciBfY29va2llVmFsdWUgPSBcIlwiO1xyXG4gICAgICAgICAgICAkKCcudm90ZV8nICsgX3ZvdGVfaWQgKyAnIC52b3RldHlwZV9yYWRpbyBpbnB1dFt0eXBlPVwicmFkaW9cIl06Y2hlY2tlZCcpLmVhY2goZnVuY3Rpb24gKCkgey8v6YGN5Y6G5q+P5LiA5Liq5ZCN5a2X5Li6aW50ZXJlc3TnmoTlpI3pgInmoYbvvIzlhbbkuK3pgInkuK3nmoTmiafooYzlh73mlbAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZpaWQgPSAkKHRoaXMpLmF0dHIoXCJ2aWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF92aXZtaWQgPSAkKHRoaXMpLmF0dHIoXCJ2aXZtaWRcIik7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZpdmdpZCA9ICQodGhpcykuYXR0cihcInZpdmdpZFwiKTtcclxuICAgICAgICAgICAgICAgIF9jb29raWVWYWx1ZSArPSBfdmlpZCArIFwiX1wiICsgX3Zpdm1pZCArIFwiX1wiICsgX3ZpdmdpZCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgX2Nob29zZUlkcyArPSBfdmlpZCArIFwiLFwiO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBfeGIgPSBfdGltdS5pbmRleE9mKF92aXZtaWQpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF94YiA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RpbXUuc3BsaWNlKF94YiwgMSk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICQoJy52b3RlXycgKyBfdm90ZV9pZCArICcgLnZvdGV0eXBlX2NoZWNrYm94IGlucHV0W3R5cGU9XCJjaGVja2JveFwiXTpjaGVja2VkJykuZWFjaChmdW5jdGlvbiAoKSB7Ly/pgY3ljobmr4/kuIDkuKrlkI3lrZfkuLppbnRlcmVzdOeahOWkjemAieahhu+8jOWFtuS4remAieS4reeahOaJp+ihjOWHveaVsFxyXG4gICAgICAgICAgICAgICAgdmFyIF92aWlkID0gJCh0aGlzKS5hdHRyKFwidmlpZFwiKTtcclxuICAgICAgICAgICAgICAgIHZhciBfdml2bWlkID0gJCh0aGlzKS5hdHRyKFwidml2bWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF92aXZnaWQgPSAkKHRoaXMpLmF0dHIoXCJ2aXZnaWRcIik7XHJcbiAgICAgICAgICAgICAgICBfY29va2llVmFsdWUgKz0gX3ZpaWQgKyBcIl9cIiArIF92aXZtaWQgKyBcIl9cIiArIF92aXZnaWQgKyBcIixcIjtcclxuICAgICAgICAgICAgICAgIF9jaG9vc2VJZHMgKz0gX3ZpaWQgKyBcIixcIjtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgX3hiID0gX3RpbXUuaW5kZXhPZihfdml2bWlkKTtcclxuICAgICAgICAgICAgICAgIGlmIChfeGIgPj0gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgIF90aW11LnNwbGljZShfeGIsIDEpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgIC8vY29uc29sZS5sb2coX2Nvb2tpZVZhbHVlKTtcclxuICAgICAgICAgICAgX2Nob29zZUlkcyA9IF9jaG9vc2VJZHMudHJpbSgnLCcpO1xyXG5cclxuICAgICAgICAgICAgaWYgKF9jaG9vc2VJZHMgPT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgYWxlcnQoXCLor7flhYjpgInmi6nnrZTmoYhcIik7XHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcbiAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgIGlmIChfdGltdS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIuaCqOi/mOaciemimOebruayoeacieWBmuWujFwiKTtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKF9pc0xvY2tWb3RlLmluZGV4T2YoX3ZvdGVfaWQpID49IDApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBfaXNMb2NrVm90ZS5wdXNoKF92b3RlX2lkKTtcclxuXHJcbiAgICAgICAgICAgIF90aGlzLmFkZENsYXNzKFwiYnRuX2Rpc2FibGVkXCIpO1xyXG5cclxuICAgICAgICAgICAgc2V0Vm90ZUNvb2tpZShcInZvdGVfXCIgKyBfdm90ZV9pZCwgX2Nvb2tpZVZhbHVlLCAyNCk7Ly/mnInmlYjmnJ8yNOWwj+aXtlxyXG5cclxuICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgIHVybDogXCIvL2Ntc2RhdGFhcGkuZWFzdG1vbmV5LmNvbS9hcGkvVm90ZS9Wb3RlT3BlcmF0ZT9ncm91cElkPVwiICsgX3ZvdGVfaWQgKyBcIiZjaG9vc2VJZHM9XCIgKyBfY2hvb3NlSWRzICsgXCImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgbG9va1ZvdGVSZXN1bHQoX3RoaXMpOy8v5Y675p+l55yL5oqV56Wo57uT5p6cXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcImJvZHlcIikub24oXCJjaGFuZ2VcIiwgJy52b3RldHlwZV9jaGVja2JveCBpbnB1dFt0eXBlPVwiY2hlY2tib3hcIl0nLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIHZhciBfdmlkID0gX3RoaXMuYXR0cihcImlkXCIpO1xyXG4gICAgICAgICAgICB2YXIgX3ZuYW1lID0gX3RoaXMuYXR0cihcIm5hbWVcIik7XHJcbiAgICAgICAgICAgIHZhciBfbWF4Y2hlY2sgPSBfdGhpcy5hdHRyKFwibWF4Y2hlY2tcIik7XHJcbiAgICAgICAgICAgIHZhciBfY2hlY2tMZW5ndGggPSAkKCcudm90ZXR5cGVfY2hlY2tib3ggaW5wdXRbbmFtZT1cIicgKyBfdm5hbWUgKyAnXCJdOmNoZWNrZWQnKS5sZW5ndGg7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBpZiAoX2NoZWNrTGVuZ3RoID4gX21heGNoZWNrKSB7XHJcbiAgICAgICAgICAgICAgICBhbGVydChcIuacgOWkmuWPquiDvemAieaLqeOAkFwiICsgX21heGNoZWNrICsgXCLjgJHkuKrpgInpoblcIik7XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hdHRyKFwiY2hlY2tlZFwiLCBmYWxzZSk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuICAgICAgICBmdW5jdGlvbiBsb29rVm90ZVJlc3VsdChfdGhpcykgey8v5p+l55yL5oqV56Wo57uT5p6cXHJcbiAgICAgICAgICAgIHZhciBfdm90ZV9pZCA9IF90aGlzLmF0dHIoXCJ2b3RlX2lkXCIpO1xyXG4gICAgICAgICAgICB2YXIgX3ZvdGVfdGl0bGUgPSBfdGhpcy5hdHRyKFwidm90ZV90aXRsZVwiKTtcclxuXHJcbiAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB1cmw6IFwiLy9jbXNkYXRhYXBpLmVhc3Rtb25leS5jb20vYXBpL1ZvdGUvR2V0Vm90ZUdyb3VwQnlJZD9JZD1cIiArIF92b3RlX2lkICsgXCImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHZvdGVfaXRlbSA9IGdldFZvdGVDb29raWUoXCJ2b3RlX1wiICsgX3ZvdGVfaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLnBhcmVudHMoJy5lbV92b3RlJykuaHRtbChpbml0UmVzdWx0SFRNTChqc29uLCBfdm90ZV90aXRsZSwgdm90ZV9pdGVtKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMucGFyZW50cygnLmVtX3ZvdGUnKS5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChcImJvZHlcIikub24oXCJjbGlja1wiLCBcIi5idG5fbG9va3ZvdGVcIiwgZnVuY3Rpb24gKCkgey8v5p+l55yL5oqV56Wo57uT5p6c54K55Ye75LqL5Lu2XHJcbiAgICAgICAgICAgIHZhciBfdm90ZV9pZCA9ICQodGhpcykuYXR0cihcInZvdGVfaWRcIik7XHJcbiAgICAgICAgICAgIGlmIChsb2NhdGlvbi5ob3N0ID09IFwicGNhcnRpY2xlLmVhc3Rtb25leS5jb21cIikge1xyXG4gICAgICAgICAgICAgICAgLy8gd2luZG93Lm9wZW4oXCJodHRwOi8vcG9sbC5lYXN0bW9uZXkuY29tL0h0bWwvUmVzdWx0XCIgKyBfdm90ZV9pZCArIFwiLmh0bWxcIik7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZXh0ZXJuYWwuT25DbGlja0V2ZW50KFwicmV0dXJuKGZhbHNlICYmIFtdLnB1c2goJyN0eXBlPTA0JiZ1cmw9aHR0cHM6Ly9wb2xsLmVhc3Rtb25leS5jb20vSHRtbC9SZXN1bHRcIiArIF92b3RlX2lkICsgXCIuaHRtbCcpKTtcIilcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5vcGVuKFwiaHR0cHM6Ly9wb2xsLmVhc3Rtb25leS5jb20vSHRtbC9SZXN1bHRcIiArIF92b3RlX2lkICsgXCIuaHRtbFwiKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAvL2xvb2tWb3RlUmVzdWx0KCQodGhpcykpOy8v5Y675p+l55yL5oqV56Wo57uT5p6cXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICQoXCJib2R5XCIpLm9uKFwiY2xpY2tcIiwgXCIuYnRuX2dvdm90ZVwiLCBmdW5jdGlvbiAoKSB7Ly/ljrvmipXnpajngrnlh7vkuovku7ZcclxuICAgICAgICAgICAgdmFyIF92b3RlX2lkID0gJCh0aGlzKS5hdHRyKFwidm90ZV9pZFwiKTtcclxuICAgICAgICAgICAgaW5pdFZvdGUoX3ZvdGVfaWQpO1xyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRSZXN1bHRIVE1MKGpzb24sIF92b3RlX3RpdGxlLCB2b3RlX2l0ZW0pIHtcclxuICAgICAgICAgICAgdmFyIF9odG1sID0gJydcclxuICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJ0aXRsZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uX3RpdGxlXCI+PC9pPicgKyBfdm90ZV90aXRsZSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICB2YXIgX2lzdm90ZSA9IGZhbHNlOy8v6buY6K6k5pyq5oqV6L+H56WoXHJcbiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5SZXN1bHQuVm90ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIHZhciBfaXRlbSA9IGpzb24uUmVzdWx0LlZvdGVzW2ldO1xyXG5cclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8aDMgY2xhc3M9XCJ0aXRcIj4nICsgX2l0ZW0uVm1fVGl0bGUgKyAnPC9oMz4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJjb250ZW50XCI+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPHVsIGNsYXNzPVwicmVzdWx0X2xpc3RcIj4nO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBfaXNBbGwwRmxhZyA9IHRydWU7Ly/orrDlvZXmmK/lkKblhajpg6jkuLowXHJcbiAgICAgICAgICAgICAgICB2YXIgX3ZvdGVTdW0gPSAwO1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaXRlbS5FbGVtZW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfX2l0ZW0gPSBfaXRlbS5FbGVtZW50c1tqXTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2Nvb2tpZVZhbHVlID0gX19pdGVtLlZpX0lkICsgXCJfXCIgKyBfX2l0ZW0uVmlfVm1fSWQgKyBcIl9cIiArIF9faXRlbS5WaV9WZ19JZCArIFwiLFwiO1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh2b3RlX2l0ZW0gJiYgdm90ZV9pdGVtLmluZGV4T2YoX2Nvb2tpZVZhbHVlKSA+PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pdGVtLkVsZW1lbnRzW2pdLlZpX0NvdW50Kys7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc3ZvdGUgPSB0cnVlOy8v5oqV6L+H56WoXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbS5FbGVtZW50c1tqXS5WaV9Db3VudCAhPSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9pc0FsbDBGbGFnID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF92b3RlU3VtICs9IF9pdGVtLkVsZW1lbnRzW2pdLlZpX0NvdW50O1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGogPSAwOyBqIDwgX2l0ZW0uRWxlbWVudHMubGVuZ3RoOyBqKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX19pdGVtID0gX2l0ZW0uRWxlbWVudHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF9WaV9Db3VudCA9IF9faXRlbS5WaV9Db3VudDtcclxuICAgICAgICAgICAgICAgICAgICBfdm90ZUJpTGkgPSBWb3RlWmhhbkJpKF92b3RlU3VtLCBfVmlfQ291bnQpOy8v5Y2g5q+UXHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHZhciBfY29va2llVmFsdWUgPSBfX2l0ZW0uVmlfSWQgKyBcIl9cIiArIF9faXRlbS5WaV9WbV9JZCArIFwiX1wiICsgX19pdGVtLlZpX1ZnX0lkICsgXCIsXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKHZvdGVfaXRlbSAmJiB2b3RlX2l0ZW0uaW5kZXhPZihfY29va2llVmFsdWUpID49IDApIHsvL+acrOmAiemhueW3suaKleelqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8bGkgY2xhc3M9XCJhY3RpdmVcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgPGRpdiBjbGFzcz1cImRldGFpbFwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPGRpdiBjbGFzcz1cImluZm9cIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInRpdFwiPicgKyBfX2l0ZW0uVmlfVGl0bGUgKyAnPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwicmVzXCI+77yIJyArIGdzaFZvdGVOdW0oX1ZpX0NvdW50KSArICfnpajvvIknICsgX3ZvdGVCaUxpICsgJyU8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJiYXJcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cImlubmVyXCIgc3R5bGU9XCJ3aWR0aDonICsgVm90ZVpoYW5CaVdpZHRoKF92b3RlQmlMaSwgNDIwKSArICdweFwiPjwvc3Bhbj4nOy8v5oC76ZW/NDIwcHhcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJ0aXBzXCI+PGkgY2xhc3M9XCJpY29uIGljb25fd2R0cFwiPjwvaT7miJHnmoTmipXnpag8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsvL+acrOmAiemhueacquaKleelqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICA8bGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJkZXRhaWxcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDxkaXYgY2xhc3M9XCJpbmZvXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJ0aXRcIj4nICsgX19pdGVtLlZpX1RpdGxlICsgJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgICAgICA8c3BhbiBjbGFzcz1cInJlc1wiPu+8iCcgKyBnc2hWb3RlTnVtKF9WaV9Db3VudCkgKyAn56Wo77yJJyArIF92b3RlQmlMaSArICclPC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICA8ZGl2IGNsYXNzPVwiYmFyXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJpbm5lclwiIHN0eWxlPVwid2lkdGg6JyArIFZvdGVaaGFuQmlXaWR0aChfdm90ZUJpTGksIDQyMCkgKyAncHhcIj48L3NwYW4+JzsvL+aAu+mVvzQyMHB4XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgIDwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8L3VsPic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPC9kaXY+JztcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJidG5fd3JhcFwiPic7XHJcbiAgICAgICAgICAgIGlmIChfaXN2b3RlKSB7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX2Rpc2FibGVkXCI+5bey5oqV56WoPC9idXR0b24+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG5fYmx1ZSBidG5fbG9va3ZvdGVcIiB2b3RlX2lkPVwiJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ1wiIHZvdGVfdGl0bGU9XCInICsgX3ZvdGVfdGl0bGUgKyAnXCI+5p+l55yLPC9idXR0b24+JztcclxuICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmIChqc29uLlJlc3VsdC5WZ19FbmFibGUgPT0gMSkge1xyXG4gICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG5fYmx1ZSBidG5fZ292b3RlXCIgdm90ZV9pZD1cIicgKyBqc29uLlJlc3VsdC5WZ19JZCArICdcIj7ljrvmipXnpag8L2J1dHRvbj4nO1xyXG4gICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX2Rpc2FibGVkXCI+6K+l5oqV56Wo5bey57uT5p2fPC9idXR0b24+JztcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgIDxidXR0b24gY2xhc3M9XCJidG4gYnRuX2JsdWUgYnRuX2xvb2t2b3RlXCIgdm90ZV9pZD1cIicgKyBqc29uLlJlc3VsdC5WZ19JZCArICdcIiB2b3RlX3RpdGxlPVwiJyArIF92b3RlX3RpdGxlICsgJ1wiPuafpeecizwvYnV0dG9uPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgX2h0bWwgKz0gJzwvZGl2Pic7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gX2h0bWw7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZ1bmN0aW9uIGluaXRIVE1MKGpzb24sIF92b3RlX3RpdGxlKSB7XHJcbiAgICAgICAgICAgIHZhciBfaHRtbCA9ICcnXHJcbiAgICAgICAgICAgIGlmIChqc29uICYmIGpzb24uU3VjY2VzcyA9PSAxICYmIGpzb24uUmVzdWx0KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoanNvbi5SZXN1bHQuVmdfVGl0bGUgJiYganNvbi5SZXN1bHQuVmdfVGl0bGUgIT0gXCJcIikge1xyXG4gICAgICAgICAgICAgICAgICAgIF92b3RlX3RpdGxlID0ganNvbi5SZXN1bHQuVmdfVGl0bGU7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgY2xhc3M9XCJ0aXRsZVwiPjxpIGNsYXNzPVwiaWNvbiBpY29uX3RpdGxlXCI+PC9pPicgKyBfdm90ZV90aXRsZSArICc8L2Rpdj4nO1xyXG5cclxuICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5SZXN1bHQuVm90ZXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgX2l0ZW0gPSBqc29uLlJlc3VsdC5Wb3Rlc1tpXTtcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGgzIGNsYXNzPVwidGl0XCI+JyArIF9pdGVtLlZtX1RpdGxlICsgJzwvaDM+JztcclxuICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGRpdiBjbGFzcz1cImNvbnRlbnQgdm90ZWl0ZW1fJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ1wiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8dWwgY2xhc3M9XCJwcm9ibGVtX2xpc3Qgdm90ZV8nICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXCI+JztcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaiA9IDA7IGogPCBfaXRlbS5FbGVtZW50cy5sZW5ndGg7IGorKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgcmFkaW9PckNoZWNrYm94ID0gXCJyYWRpb1wiOy8v5Y2V6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaXRlbS5WbV9UeXBlID09IDEpIHsvL+aKleelqOaooeW8jyAxLiDlpJrpgIkgMC4g5Y2V6YCJXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICByYWRpb09yQ2hlY2tib3ggPSBcImNoZWNrYm94XCI7Ly/lpJrpgIlcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9WbV9NYXhDaGVjayA9IF9pdGVtLlZtX01heENoZWNrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX1ZtX01heENoZWNrID09IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9WbV9NYXhDaGVjayA9IDk5O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgX19pdGVtID0gX2l0ZW0uRWxlbWVudHNbal07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgIDxsaSBjbGFzcz1cInZvdGV0eXBlXycgKyByYWRpb09yQ2hlY2tib3ggKyAnIHZvdGV0eXBlX2xpXCIgdml2bWlkPVwiJyArIF9faXRlbS5WaV9WbV9JZCArICdcIj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgPHNwYW4gY2xhc3M9XCJjaG9vc2Utd3JhcFwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9XCInICsgcmFkaW9PckNoZWNrYm94ICsgJ1wiICBuYW1lPVwidm90ZV9pdGVtXycgKyBqc29uLlJlc3VsdC5WZ19JZCArICdfJyArIGkgKyAnXCIgaWQ9XCJ2b3RlX2l0ZW1fJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ18nICsgaSArICdfJyArIGogKyAnXCIgdmFsdWU9XCInICsgX19pdGVtLlZpX1ZtX0lkICsgJ18nICsgX19pdGVtLlZpX1ZnX0lkICsgJ1wiIG1heGNoZWNrPVwiJyArIF9WbV9NYXhDaGVjayArICdcIiB2aWlkPVwiJyArIF9faXRlbS5WaV9JZCArICdcIiB2aXZtaWQ9XCInICsgX19pdGVtLlZpX1ZtX0lkICsgJ1wiIHZpdmdpZD1cIicgKyBfX2l0ZW0uVmlfVmdfSWQgKyAnXCI+JzsvL1ZpX0lk5Y2V5Liq55qE6YCJ6aG5aWTvvJtWaV9WbV9JZOS4gOmBk+mimDHkuKppZO+8m+mAiemhueS4gOS4qmlk77ybVmlfVmdfSWTkuIDkuKrmipXnpajkuIDkuKppZFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfaHRtbCArPSAnICAgICAgICAgICAgICAgIDxzcGFuIGNsYXNzPVwiY2hvb3NlLWlubmVyXCI+PC9zcGFuPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgICAgICA8L3NwYW4+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICAgICAgICAgIDxsYWJlbCBmb3I9XCJ2b3RlX2l0ZW1fJyArIGpzb24uUmVzdWx0LlZnX0lkICsgJ18nICsgaSArICdfJyArIGogKyAnXCI+JyArIF9faXRlbS5WaV9UaXRsZSArICc8L2xhYmVsPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgICAgIDwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPC91bD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIF9odG1sICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGRpdiBjbGFzcz1cImJ0bl93cmFwXCI+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICcgICAgPGJ1dHRvbiBjbGFzcz1cImJ0biBidG5fb3JhbmdlIGJ0bl92b3RlXCIgdm90ZV9pZD1cIicgKyBqc29uLlJlc3VsdC5WZ19JZCArICdcIiB2b3RlX3RpdGxlPVwiJyArIF92b3RlX3RpdGxlICsgJ1wiID7mipXnpag8L2J1dHRvbj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJyAgICA8YnV0dG9uIGNsYXNzPVwiYnRuIGJ0bl9ibHVlIGJ0bl9sb29rdm90ZVwiIHZvdGVfaWQ9XCInICsganNvbi5SZXN1bHQuVmdfSWQgKyAnXCIgdm90ZV90aXRsZT1cIicgKyBfdm90ZV90aXRsZSArICdcIj7mn6XnnIs8L2J1dHRvbj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzwvZGl2Pic7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIF9odG1sO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmdW5jdGlvbiBpbml0Vm90ZShpdGVtKXtcclxuICAgICAgICAgICAgJChcIi5lbV92b3RlXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgdmFyIF90aGlzID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgICAgIHZhciBfdm90ZV9pZCA9IF90aGlzLmF0dHIoXCJ2b3RlX2lkXCIpO1xyXG4gICAgICAgICAgICAgICAgaWYgKGl0ZW0gPT0gXCJhbGxcIiB8fCBpdGVtID09IF92b3RlX2lkKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF92b3RlX3RpdGxlID0gX3RoaXMuYXR0cihcInZvdGVfdGl0bGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgX3ZvdGVfdGl0bGUgPSB1bmVzY2FwZShfdm90ZV90aXRsZSk7Ly/op6PnoIFcclxuICAgICAgICAgICAgICAgICAgICAkLmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB1cmw6IFwiLy9jbXNkYXRhYXBpLmVhc3Rtb25leS5jb20vYXBpL1ZvdGUvR2V0Vm90ZUdyb3VwQnlJZD9JZD1cIiArIF92b3RlX2lkICsgXCImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkYXRhOiB7fSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB2b3RlX2l0ZW0gPSBnZXRWb3RlQ29va2llKFwidm90ZV9cIiArIF92b3RlX2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh2b3RlX2l0ZW0gfHwganNvbi5SZXN1bHQuVmdfRW5hYmxlICE9IDEpIHsvL1ZnX0VuYWJsZSAx5Li6IOWFgeiuuFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmh0bWwoaW5pdFJlc3VsdEhUTUwoanNvbiwgX3ZvdGVfdGl0bGUsIHZvdGVfaXRlbSkpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5odG1sKGluaXRIVE1MKGpzb24sIF92b3RlX3RpdGxlKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5zaG93KCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGluaXRWb3RlKFwiYWxsXCIpO1xyXG4gICAgfShqUXVlcnkpXHJcbn1cblxuXG4vLy8vLy8vLy8vLy8vLy8vLy9cbi8vIFdFQlBBQ0sgRk9PVEVSXG4vLyAuL2pzL21vZHVsZXMvdm90ZS91bml0eXZvdGUuanNcbi8vIG1vZHVsZSBpZCA9IDFcbi8vIG1vZHVsZSBjaHVua3MgPSAxIDIiLCJmdW5jdGlvbiB1cGRhdGVFbUltYWdlUmVtYXJrKCl7XHJcbiAgICAvLyDmraPmloflm77ooahjbGFzc1xyXG4gICAgJChcIi5FbUltYWdlUmVtYXJrXCIpLnBhcmVudCgpLmFkZENsYXNzKFwiY2xlYXJwIHNpbmdsZS1jaGFydFwiKTtcclxuICAgICQoXCIuRW1JbWFnZVJlbWFya1wiKS5wYXJlbnRzKFwicFwiKS5jc3Moe1xyXG4gICAgICAgIFwiZm9udC1zaXplXCI6IFwiMTVweFwiLFxyXG4gICAgICAgIFwibGluZS1oZWlnaHRcIjpcIjMxcHhcIlxyXG4gICAgfSk7XHJcbiAgICAkKFwiLkVtSW1hZ2VSZW1hcmtcIikuY2hpbGRyZW4oKS5hdHRyKFwic3R5bGVcIiwgXCJcIik7XHJcbiAgICAkKFwiLkVtSW1hZ2VSZW1hcmtcIikuYWRkQ2xhc3MoXCJjaGFydC1sZWZ0XCIpO1xyXG4gICAgdmFyIGVtUmVtYXJrID0gJChcIi5FbUltYWdlUmVtYXJrXCIpO1xyXG4gICAgaWYgKCQoXCIuRGlzcGxheU9uV2ViRnJvbU5ld3NSb2JvdFwiKSAhPSBudWxsKSB7XHJcbiAgICAgICAgJChcIi5EaXNwbGF5T25XZWJGcm9tTmV3c1JvYm90XCIpLnNob3coKTtcclxuICAgIH1cclxuICAgIGVtUmVtYXJrLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgaWYgKF90aGlzLmNoaWxkcmVuKFwiaW1nXCIpLmxlbmd0aCA8PSAwKVxyXG4gICAgICAgICAgICBfdGhpcy5wYXJlbnQoKS5yZW1vdmUoKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG5cclxubW9kdWxlLmV4cG9ydHMgPSBmdW5jdGlvbiAoKSB7XHJcbiAgICBpZiAodHlwZW9mICgkKSAhPSAnZnVuY3Rpb24nKSBmdW5jdGlvbiAkKG8pIHtcclxuICAgICAgICByZXR1cm4gdHlwZW9mIChvKSA9PSAnc3RyaW5nJyA/IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKG8pIDogb1xyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiAoJEMpICE9ICdmdW5jdGlvbicpIGZ1bmN0aW9uICRDKHMpIHtcclxuICAgICAgICByZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChzKVxyXG4gICAgfVxyXG4gICAgaWYgKHR5cGVvZiBDbGFzcyA9PSBcInVuZGVmaW5lZFwiKSBDbGFzcyA9IHt9O1xyXG4gICAgQ2xhc3MuQXNQcm90b3R5cGUgPSB7fTtcclxuICAgIENsYXNzLmNyZWF0ZSA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gZnVuY3Rpb24gKHQpIHtcclxuICAgICAgICAgICAgaWYgKHQgIT0gQ2xhc3MuQXNQcm90b3R5cGUpIHRoaXMuaW5pdGlhbGl6ZS5hcHBseSh0aGlzLCBhcmd1bWVudHMpXHJcbiAgICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB2YXIgbmV3c2ltZyA9IENsYXNzLmNyZWF0ZSgpO1xyXG4gICAgdmFyIGNoYXJ0SWQgPSAxOyAgICAvL+S4u+imgeWMuuWIhuWbvuihqOeahOWUr+S4gOaAp1xyXG4gICAgbmV3c2ltZy5wcm90b3R5cGUgPSB7XHJcbiAgICAgICAgZ2V0RWxlbWVudHNCeUNsYXNzTmFtZTogZnVuY3Rpb24gKG9iaiwgbikge1xyXG4gICAgICAgICAgICB2YXIgY2xhc3NFbGVtZW50cyA9IFtdLCBhbGxFbGVtZW50cyA9ICQob2JqKS5nZXRFbGVtZW50c0J5VGFnTmFtZSgnKicpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGFsbEVsZW1lbnRzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoYWxsRWxlbWVudHNbaV0uY2xhc3NOYW1lID09IG4pIGNsYXNzRWxlbWVudHNbY2xhc3NFbGVtZW50cy5sZW5ndGhdID0gYWxsRWxlbWVudHNbaV1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gY2xhc3NFbGVtZW50cztcclxuICAgICAgICB9LFxyXG4gICAgICAgIGdldE1hcmtldDogZnVuY3Rpb24gKHR5cGUsIGNvZGUpIHtcclxuICAgICAgICAgICAgdmFyIE1hcmtldCA9IFwic2hcIjtcclxuICAgICAgICAgICAgaWYgKHR5cGUgPT0gXCIxXCIpIHtcclxuICAgICAgICAgICAgICAgIE1hcmtldCA9IFwic2hcIjtcclxuICAgICAgICAgICAgICAgIGlmIChjb2RlLnN1YnN0cmluZygwLCAzKSA9PSBcIjAwMFwiKSBNYXJrZXQgPSBcInpzXCI7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBNYXJrZXQgPSBcInN6XCI7XHJcbiAgICAgICAgICAgICAgICBpZiAoY29kZS5zdWJzdHJpbmcoMCwgMikgPT0gXCIzOVwiKSBNYXJrZXQgPSBcInpzXCI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIHtcclxuICAgICAgICAgICAgICAgIFR5cGU6IE1hcmtldCxcclxuICAgICAgICAgICAgICAgIENvZGU6IE1hcmtldCArIGNvZGVcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ3NoTnVtOiBmdW5jdGlvbiAoc3RyKSB7Ly/moLzlvI/ljJblpKfpop3mlbDlrZdcclxuICAgICAgICAgICAgaWYgKHN0ciA9PSBcIi1cIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLVwiO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB2YXIgZE51bSA9IHBhcnNlRmxvYXQoc3RyKTtcclxuICAgICAgICAgICAgdmFyIGR3ID0gXCJcIjtcclxuICAgICAgICAgICAgaWYgKGROdW0gPj0gMTAwMDAwMDAwKSB7XHJcbiAgICAgICAgICAgICAgICBkTnVtID0gKGROdW0gLyAxMDAwMDAwMDApO1xyXG4gICAgICAgICAgICAgICAgZHcgPSBcIuS6v1wiO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGROdW0gPj0gMTAwMDApIHtcclxuICAgICAgICAgICAgICAgIGROdW0gPSAoZE51bSAvIDEwMDAwKTtcclxuICAgICAgICAgICAgICAgIGR3ID0gXCLkuIdcIjtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgaWYgKGROdW0gPj0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBkTnVtID0gZE51bS50b0ZpeGVkKDApO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKGROdW0gPj0gMTApIHtcclxuICAgICAgICAgICAgICAgIGROdW0gPSBkTnVtLnRvRml4ZWQoMSk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBkTnVtID0gZE51bS50b0ZpeGVkKDIpO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gZE51bSArIGR3O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgZ3NoWmQ6IGZ1bmN0aW9uIChzdHIpIHsvL+agvOW8j+WMlua2qOi3jOW5heaIlua2qOi3jOmineS/neeVmTLkvY3lsI/mlbBcclxuICAgICAgICAgICAgaWYgKHN0ciA9PSBcIi1cIikge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFwiLVwiO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBwYXJzZUZsb2F0KHN0cikudG9GaXhlZCgyKTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIFhpYW5nR3Vhbkd1UGlhbzogZnVuY3Rpb24gKHNlY2lkLCBpbWdQYXJlbnQpIHsvL+ebuOWFs+iCoeelqFxyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICB2YXIgY2hhcnRGb290ZXJEaXYgPSAkQyhcImRpdlwiKTtcclxuICAgICAgICAgICAgY2hhcnRGb290ZXJEaXYuY2xhc3NOYW1lID0gXCJjaGFydC1mb290ZXJcIjtcclxuICAgICAgICAgICAgalF1ZXJ5LmFqYXgoe1xyXG4gICAgICAgICAgICAgICAgdHlwZTogXCJHRVRcIixcclxuICAgICAgICAgICAgICAgIHVybDogXCIvL3B1c2gyLmVhc3Rtb25leS5jb20vYXBpL3F0L3NsaXN0L2dldD9waT0wJnB6PTUmcG89MSZzcHQ9NCZmaWVsZHM9ZjEyLGYxMyxmMTQsZjE1LGYzLGY0LGY2LGY1LGYxMSxmMTAsZjImdXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmc2VjaWQ9XCIgKyBzZWNpZCArIFwiJmZpZD1mMyZmbHR0PTImY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgIGRhdGE6IHt9LFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpkYXRhICYmIGpkYXRhLnJjID09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb290ZXJJbm5lclJvdyA9ICc8ZGl2IGNsYXNzPVwiY2hhcnQtZm9vdGVyLXRpdGxlXCI+55u45YWz6IKh56WoPC9kaXY+PGRpdiBjbGFzcz1cImNoYXJ0LWZvb3Rlci1jb25cIj48dWw+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9pID0gMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqZGF0YS5kYXRhLnRvdGFsOyBpKyspIHsvL+acgOWkmuaYvuekujTmnaFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfaSA9PSA0KSB7Ly/mnIDlpJrmmL7npLo05p2hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpkYXRhLmRhdGEuZGlmZltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY29kZSA9IGl0ZW0uZjEyOy8v6IKh56Wo5Luj56CBXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX21hcmtldCA9IGl0ZW0uZjEzOy8v5biC5Zy6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoc2VjaWQgPT0gX21hcmtldCArIFwiLlwiICsgX2NvZGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbmFtZSA9IGl0ZW0uZjE0Oy8v6IKh56Wo5ZCN56ewXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3ByaWNlID0gaXRlbS5mMjsvL+acgOaWsOS7t1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF96ZGYgPSBpdGVtLmYzOy8v5rao6LeM5bmFXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfemRmID0gKF96ZGYgPT0gXCItXCIgPyBcIi1cIiA6IChfdGhpcy5nc2haZChfemRmKSArIFwiJVwiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3pkZSA9IGl0ZW0uZjQ7Ly/mtqjot4zpop1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF96ZGUgPSBfdGhpcy5nc2haZChfemRlKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZENvbG9yID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfemRlID4gMCkgemRDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3pkZSA8IDApIHpkQ29sb3IgPSBcIiMwMDk5MDBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8bGk+PGEgY2xhc3M9XCJwYy1xdW90ZWxpbmtcIiBkYXRhLWNvZGU9XCInICsgX2NvZGUgKyAnXCIgZGF0YS1tYXJrZXQ9XCInICsgX21hcmtldCArICdcIiBocmVmPVwiamF2YXNjcmlwdDo7XCI+JyArIF9uYW1lLnJlcGxhY2UoLyAvaWcsIFwiXCIpICsgJzwvYT4oPGZvbnQgc3R5bGU9XCJjb2xvcjonICsgemRDb2xvciArICc7JysgKChfcHJpY2UgKyAnICcgKyBfemRmKS5sZW5ndGggPiAxNSA/ICdmb250LXNpemU6MTBweDsnIDogJycpICsnXCI+JyArIF9wcmljZSArICcgJyArIF96ZGYgKyAnPC9mb250Pik8L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaSsrO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8L3VsPjwvZGl2PjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0Rm9vdGVyRGl2LmlubmVySFRNTCA9IGZvb3RlcklubmVyUm93O1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbWdQYXJlbnQuYXBwZW5kQ2hpbGQoY2hhcnRGb290ZXJEaXYpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuWGlhbmdHdWFuQmFuS3VhaShzZWNpZCwgY2hhcnRGb290ZXJEaXYpOy8v55u45YWz5p2/5Z2XXHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIFhpYW5nR3VhbkJhbkt1YWk6IGZ1bmN0aW9uIChzZWNpZCwgY2hhcnRGb290ZXJEaXYpIHsvL+ebuOWFs+adv+Wdl1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICBqUXVlcnkuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBcIi8vcHVzaDIuZWFzdG1vbmV5LmNvbS9hcGkvcXQvc2xpc3QvZ2V0P3V0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5JnNwdD0zJnBpPTAmcHo9NCZwbz0xJmZpZWxkcz1mMTQsZjMsZjQsZjEyOCxmMTIsZjEzLGYxMDAsZjEwMixmMTAzJnNlY2lkPVwiICsgc2VjaWQgKyBcIiZmaWQ9ZjMmZmx0dD0yJmNiPT9cIixcclxuICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgICAgICBzdWNjZXNzOiBmdW5jdGlvbiAoamRhdGEpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoamRhdGEgJiYgamRhdGEucmMgPT0gXCIwXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGh0bWxCSyA9ICRDKFwiZGl2XCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sQksuY2xhc3NOYW1lID0gXCJjaGFydC1mb290ZXItdGl0bGVcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaHRtbEJLLmlubmVySFRNTCA9IFwi55u45YWz5p2/5Z2XXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBodG1sQktDb250ZW50ID0gJEMoXCJkaXZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGh0bWxCS0NvbnRlbnQuY2xhc3NOYW1lID0gXCJjaGFydC1mb290ZXItY29uIGNoYXJ0LWNvbmNlcHRcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGggPSAnPHVsPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgNCAmJiBpIDwgamRhdGEuZGF0YS50b3RhbDsgaSsrKSB7Ly/mnIDlpJrmmL7npLo05p2hXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgaXRlbSA9IGpkYXRhLmRhdGEuZGlmZltpXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYmtDb2RlID0gaXRlbS5mMTI7Ly/mnb/lnZfku6PnoIFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYmtNYXJrZXQgPSBpdGVtLmYxMzsvL+adv+Wdl+W4guWculxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9ia05hbWUgPSBpdGVtLmYxNDsvL+adv+Wdl+WQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9ia1pkZiA9IGl0ZW0uZjM7Ly/mnb/lnZfmtqjot4zluYVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ia1pkZiA9IChfYmtaZGYgPT0gXCItXCIgPyBcIi1cIiA6IChfdGhpcy5nc2haZChfYmtaZGYpICsgXCIlXCIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfYmtaZGUgPSBpdGVtLmY0Oy8v5p2/5Z2X5rao6LeM6aKdXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfYmtaZGUgPSBfdGhpcy5nc2haZChfYmtaZGUpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHpkQ29sb3IgPSBcIlwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9ia1pkZSA+IDApIHpkQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9ia1pkZSA8IDApIHpkQ29sb3IgPSBcIiMwMDk5MDBcIjtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBoICs9ICc8bGk+PGEgaHJlZj1cImphdmFzY3JpcHQ6O1wiIGNsYXNzPVwicGMtcXVvdGVsaW5rXCIgZGF0YS1jb2RlPVwiJyArIF9ia0NvZGUgKyAnXCIgZGF0YS1tYXJrZXQ9XCInICsgX2JrTWFya2V0ICsgJ1wiPicgKyBfYmtOYW1lICsgJzwvYT4oPGZvbnQgc3R5bGU9XCJjb2xvcjonICsgemRDb2xvciArICdcIj4nICsgX2JrWmRmICsgJzwvZm9udD4pPC9saT4nOy8vIGNsYXNzPVwiZnMxMlwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgaCArPSAnPC91bD48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBodG1sQktDb250ZW50LmlubmVySFRNTCA9IGg7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0Rm9vdGVyRGl2LmFwcGVuZENoaWxkKGh0bWxCSyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNoYXJ0Rm9vdGVyRGl2LmFwcGVuZENoaWxkKGh0bWxCS0NvbnRlbnQpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBaaGlTaHVMaW5nWmhhbmdIYW5nWWU6IGZ1bmN0aW9uIChpbWdQYXJlbnQpIHsvL+mihua2qOihjOS4mijmjIfmlbApXHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBjaGFydEZvb3RlckRpdiA9ICRDKFwiZGl2XCIpO1xyXG4gICAgICAgICAgICBjaGFydEZvb3RlckRpdi5jbGFzc05hbWUgPSBcImNoYXJ0LWZvb3RlclwiO1xyXG4gICAgICAgICAgICBqUXVlcnkuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBcIi8vcHVzaDIuZWFzdG1vbmV5LmNvbS9hcGkvcXQvY2xpc3QvZ2V0P3V0PTEzNjk3YTFjYzY3N2M4YmZhOWE0OTY0MzdiZmVmNDE5JmZzPW06OTArdDoyJmZpZD1mMyZwbz0xJnBpPTAmcHo9MiZmaWVsZHM9ZjMsZjQsZjEyLGYxMyxmMTQsZjEwNCxmMTA1LGYxMjgsZjE0MCxmMTQxLGYxMzYmZmx0dD0yJmludnQ9MiZjYj0/XCIsXHJcbiAgICAgICAgICAgICAgICBkYXRhVHlwZTogXCJqc29ucFwiLFxyXG4gICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpkYXRhKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpkYXRhICYmIGpkYXRhLnJjID09IFwiMFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBmb290ZXJJbm5lclJvdyA9ICc8ZGl2IGNsYXNzPVwiY2hhcnQtZm9vdGVyLXRpdGxlXCI+6aKG5rao6KGM5LiaPC9kaXY+PGRpdiBjbGFzcz1cImNoYXJ0LWZvb3Rlci1semh5XCI+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAyICYmIGkgPCBqZGF0YS5kYXRhLnRvdGFsOyBpKyspIHsvL+acgOWkmuaYvuekujLmnaFcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0gamRhdGEuZGF0YS5kaWZmW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9ia0NvZGUgPSBpdGVtLmYxMjsvL+adv+Wdl+S7o+eggVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9ia01hcmtldCA9IGl0ZW0uZjEzOy8v5p2/5Z2X5biC5Zy6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2JrTmFtZSA9IGl0ZW0uZjE0Oy8v5p2/5Z2X5ZCN56ewXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2JrWmRmID0gaXRlbS5mMzsvL+adv+Wdl+a2qOi3jOW5hVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX2JrWmRmID0gKF9ia1pkZiA9PSBcIi1cIiA/IFwiLVwiIDogKF90aGlzLmdzaFpkKF9ia1pkZikgKyBcIiVcIikpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9ia1pkZSA9IGl0ZW0uZjQ7Ly/mnb/lnZfmtqjot4zpop1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9ia1pkZSA9IF90aGlzLmdzaFpkKF9ia1pkZSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgYmt6ZENvbG9yID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYmtaZGUgPiAwKSBia3pkQ29sb3IgPSBcIiNGRjAwMDBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVsc2UgaWYgKF9ia1pkZSA8IDApIGJremRDb2xvciA9IFwiIzAwOTkwMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9zempzID0gaXRlbS5mMTA0Oy8v5LiK5rao5a625pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX3hkanMgPSBpdGVtLmYxMDU7Ly/kuIvot4zlrrbmlbBcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfY29kZSA9IGl0ZW0uZjE0MDsvL+iCoeelqOS7o+eggVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9tYXJrZXQgPSBpdGVtLmYxNDE7Ly/ogqHnpajluILlnLpcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfbmFtZSA9IGl0ZW0uZjEyODsvL+iCoeelqOWQjeensFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF96ZGYgPSBpdGVtLmYxMzY7Ly/mtqjot4zluYVcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciB6ZENvbG9yID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfemRmID4gMCkgemRDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSBpZiAoX3pkZiA8IDApIHpkQ29sb3IgPSBcIiMwMDk5MDBcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF96ZGYgPSAoX3pkZiA9PSBcIi1cIiA/IFwiLVwiIDogKF90aGlzLmdzaFpkKF96ZGYpICsgXCIlXCIpKTsvL+a2qOi3jOW5hVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8dWw+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChfYmtOYW1lID09IFwiXCIgfHwgX2JrTmFtZSA9PSBcIi1cIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8bGk+JyArIChpICsgMSkgKyAn44CBLTwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9mb290ZXJJbm5lclJvdyArPSAnPGxpPicgKyAoaSArIDEpICsgJ+OAgTxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cInBjLWJrbGlua1wiIGRhdGEtYmtjb2RlPVwiJyArIF9ia0NvZGUgKyAnXCI+JyArIF9ia05hbWUgKyAnPC9hPjwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJJbm5lclJvdyArPSAnPGxpPicgKyAoaSArIDEpICsgJ+OAgTxhIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiBjbGFzcz1cInBjLXF1b3RlbGlua1wiIGRhdGEtY29kZT1cIicgKyBfYmtDb2RlICsgJ1wiIGRhdGEtbWFya2V0PVwiJyArIF9ia01hcmtldCArICdcIiBzdHlsZT1cImZsb2F0Om5vbmU7XCI+JyArIF9ia05hbWUgKyAnPC9hPjwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8bGk+5rao5bmF77yaPHNwYW4gc3R5bGU9XCJjb2xvcjonICsgYmt6ZENvbG9yICsgJztcIj4nICsgX2JrWmRmICsgJzwvc3Bhbj48L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJJbm5lclJvdyArPSAnPGxpIGNsYXNzPVwibHpoeS1zelwiPuS4iua2qO+8mjxzcGFuIHN0eWxlPVwiY29sb3I6I0ZGMDAwMDtcIj4nICsgX3N6anMgKyAnPC9zcGFuPuWutjwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8bGkgY2xhc3M9XCJsemh5LXhkXCI+5LiL6LeM77yaPHNwYW4gc3R5bGU9XCJjb2xvcjojMDA5OTAwO1wiPicgKyBfeGRqcyArICc8L3NwYW4+5a62PC9saT4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9uYW1lID09IFwiXCIgfHwgX25hbWUgPT0gXCItXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJJbm5lclJvdyArPSAnPGxpIGNsYXNzPVwibHpoeS1semdcIj7poobmtqjogqHvvJotPC9saT4nO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJJbm5lclJvdyArPSAnPGxpIGNsYXNzPVwibHpoeS1semdcIj7poobmtqjogqHvvJo8YSBjbGFzcz1cInBjLXF1b3RlbGlua1wiIGRhdGEtY29kZT1cIicgKyBfY29kZSArICdcIiBkYXRhLW1hcmtldD1cIicgKyBfbWFya2V0ICsgJ1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIj4nICsgX25hbWUgKyAnPC9hPjwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8bGk+5rao5bmF77yaPHNwYW4gc3R5bGU9XCJjb2xvcjonICsgemRDb2xvciArICc7XCI+JyArIF96ZGYgKyAnPC9zcGFuPjwvbGk+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZvb3RlcklubmVyUm93ICs9ICc8L3VsPidcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBmb290ZXJJbm5lclJvdyArPSAnPC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgY2hhcnRGb290ZXJEaXYuaW5uZXJIVE1MID0gZm9vdGVySW5uZXJSb3c7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGltZ1BhcmVudC5hcHBlbmRDaGlsZChjaGFydEZvb3RlckRpdik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9LFxyXG4gICAgICAgIE5ld3NJbWc6IGZ1bmN0aW9uIChzZWNpZCwganNvbiwgdGlwc0ltYWdlUmVtYXJrKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9IHRoaXM7XHJcbiAgICAgICAgICAgIHZhciBwcmljZSA9IGpzb24uZGF0YS5mNDM7Ly/mnIDmlrDku7dcclxuICAgICAgICAgICAgdmFyIGNqbCA9IGpzb24uZGF0YS5mNDcgPT0gXCItXCIgPyBcIi1cIiA6IChfdGhpcy5nc2hOdW0oanNvbi5kYXRhLmY0NykgKyBcIuaJi1wiKTsvL+aIkOS6pOmHj1xyXG4gICAgICAgICAgICB2YXIgY2plID0ganNvbi5kYXRhLmY0OCA9PSBcIi1cIiA/IFwiLVwiIDogX3RoaXMuZ3NoTnVtKGpzb24uZGF0YS5mNDgpOy8v5oiQ5Lqk6aKdXHJcbiAgICAgICAgICAgIHZhciBzdG9ja0NvZGUgPSBqc29uLmRhdGEuZjU3Oy8v5Luj56CBXHJcbiAgICAgICAgICAgIHZhciBzdG9ja05hbWUgPSBqc29uLmRhdGEuZjU4Oy8v5ZCN56ewXHJcbiAgICAgICAgICAgIHZhciBzdG9ja01hcmtldCA9IGpzb24uZGF0YS5mMTA3Oy8v5biC5Zy6XHJcbiAgICAgICAgICAgIHZhciBoc2wgPSBqc29uLmRhdGEuZjE2ODsvL+aNouaJi+eOh1xyXG4gICAgICAgICAgICBoc2wgPSAoaHNsID09IFwiLVwiID8gXCItXCIgOiAoX3RoaXMuZ3NoWmQoaHNsKSArIFwiJVwiKSlcclxuICAgICAgICAgICAgdmFyIHpkZSA9IGpzb24uZGF0YS5mMTY5Oy8v5rao6LeM6aKdXHJcbiAgICAgICAgICAgIHZhciB6ZGYgPSBqc29uLmRhdGEuZjE3MDsvL+a2qOi3jOW5hVxyXG4gICAgICAgICAgICB6ZGYgPSAoemRmID09IFwiLVwiID8gXCItXCIgOiAoX3RoaXMuZ3NoWmQoemRmKSArIFwiJVwiKSlcclxuICAgICAgICAgICAgdmFyIHN5bCA9IGpzb24uZGF0YS5mMTYyOy8v5biC55uI546HKOWKqOaAgSlcclxuICAgICAgICAgICAgdmFyIHpzeiA9IGpzb24uZGF0YS5mMTE2Oy8v5oC75biC5YC8XHJcblxyXG4gICAgICAgICAgICB2YXIgaW1nUGFyZW50ID0gdGlwc0ltYWdlUmVtYXJrLnBhcmVudE5vZGU7XHJcbiAgICAgICAgICAgIGltZ1BhcmVudC5jbGFzc05hbWUgPSBcImItY2hhcnQgY2xlYXJwXCI7XHJcbiAgICAgICAgICAgIGpRdWVyeSh0aXBzSW1hZ2VSZW1hcmspLmNoaWxkcmVuKCkuYXR0cihcInN0eWxlXCIsIFwiXCIpO1xyXG5cclxuICAgICAgICAgICAgdmFyIF9fTWFya2V0ID0gX3RoaXMuZ2V0TWFya2V0KHN0b2NrTWFya2V0LCBzdG9ja0NvZGUpO1xyXG5cclxuICAgICAgICAgICAgdmFyIGltZ1NyYyA9IHRpcHNJbWFnZVJlbWFyay5jaGlsZE5vZGVzWzBdLnNyYztcclxuICAgICAgICAgICAgdmFyIHpkQ29sb3IgPSBcIlwiO1xyXG4gICAgICAgICAgICBpZiAoemRlID4gMCkgemRDb2xvciA9IFwiI0ZGMDAwMFwiO1xyXG4gICAgICAgICAgICBlbHNlIGlmICh6ZGUgPCAwKSB6ZENvbG9yID0gXCIjMDA5OTAwXCI7XHJcblxyXG4gICAgICAgICAgICBpZiAoX19NYXJrZXQuVHlwZSAhPSBcInpzXCIpIHsvL+WkhOeQhuWbvuihqOW3puS+p1xyXG4gICAgICAgICAgICAgICAgdmFyIGNoYXJ0TGVmdERpdiA9ICRDKFwiZGl2XCIpO1xyXG4gICAgICAgICAgICAgICAgY2hhcnRMZWZ0RGl2LmNsYXNzTmFtZSA9IFwiY2hhcnQtbGVmdDJcIjtcclxuICAgICAgICAgICAgICAgIGNoYXJ0TGVmdERpdi5pZCA9IFwiY2hhcnRsZWZ0MlwiICsgc3RvY2tDb2RlICsgY2hhcnRJZDtcclxuICAgICAgICAgICAgICAgIHZhciBfaHRtbCA9ICc8ZGl2IHN0eWxlPVwiYm9yZGVyLWxlZnQ6IDJweCBzb2xpZCAjMzk1NDkxO2xpbmUtaGVpZ2h0OjE0cHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzoxM3B4IDA7XCI+PGEgc3R5bGU9XCJjb2xvcjojMzYzNjM2O1wiIGRhdGEtY29kZT1cIicgKyBzdG9ja0NvZGUgKyAnXCIgZGF0YS1tYXJrZXQ9XCInICsgc3RvY2tNYXJrZXQgKyAnXCIgY2xhc3M9XCJwYy1xdW90ZWxpbmtcIiBocmVmPVwiamF2YXNjcmlwdDo7XCIgdHJhY2tlci1ldmVudGNvZGU9XCJncHBkX3p4end5X2hxdGdta19kamt4dFwiIHRyYWNrZXItZXh0aW5mbz1cInNvdXJjZTpuZXdzY2hhbm5lbDtcIj5LPGJyPue6v+WbvjwvYT48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjYWFhO2JvcmRlci1ib3R0b206MDtiYWNrZ3JvdW5kOiNmMmYyZjI7bGluZS1oZWlnaHQ6MTRweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjEzcHggMDtcIj48YSBzdHlsZT1cImNvbG9yOiMzNjM2MzY7XCIgaHJlZj1cImh0dHA6Ly9kYXRhLmVhc3Rtb25leS5jb20vc3RvY2tkYXRhLycgKyBzdG9ja0NvZGUgKyAnLmh0bWxcIiB0cmFja2VyLWV2ZW50Y29kZT1cImdwcGRfenh6d3lfaHF0Z21rX2RqdHNzalwiIHRyYWNrZXItZXh0aW5mbz1cInNvdXJjZTpuZXdzY2hhbm5lbDtcIj7nibnoibLmlbDmja48L2E+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgIF9odG1sICs9ICc8ZGl2IHN0eWxlPVwiYm9yZGVyOiAxcHggc29saWQgI2FhYTtib3JkZXItYm90dG9tOjA7YmFja2dyb3VuZDojZjJmMmYyO2xpbmUtaGVpZ2h0OjE0cHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzoxM3B4IDA7XCI+PGEgc3R5bGU9XCJjb2xvcjojMzYzNjM2O1wiIGhyZWY9XCJodHRwOi8vZGF0YS5lYXN0bW9uZXkuY29tL3pqbHgvJyArIHN0b2NrQ29kZSArICcuaHRtbFwiIHRyYWNrZXItZXZlbnRjb2RlPVwiZ3BwZF96eHp3eV9ocXRnbWtfZGp6amx4XCIgdHJhY2tlci1leHRpbmZvPVwic291cmNlOm5ld3NjaGFubmVsO1wiPui1hOmHkea1geWQkTwvYT48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjYWFhO2JvcmRlci1ib3R0b206MDtiYWNrZ3JvdW5kOiNmMmYyZjI7bGluZS1oZWlnaHQ6MTRweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjIwcHggMDtcIj48YSBzdHlsZT1cImNvbG9yOiMzNjM2MzY7XCIgaHJlZj1cImh0dHA6Ly9kYXRhLmVhc3Rtb25leS5jb20vbm90aWNlcy9zdG9jay8nICsgc3RvY2tDb2RlICsgJy5odG1sXCIgdHJhY2tlci1ldmVudGNvZGU9XCJncHBkX3p4end5X2hxdGdta19kamdnXCIgdHJhY2tlci1leHRpbmZvPVwic291cmNlOm5ld3NjaGFubmVsO1wiPuWFrOWRijwvYT48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgX2h0bWwgKz0gJzxkaXYgc3R5bGU9XCJib3JkZXI6IDFweCBzb2xpZCAjYWFhO2JvcmRlci1ib3R0b206MDtiYWNrZ3JvdW5kOiNmMmYyZjI7bGluZS1oZWlnaHQ6MTRweDtmb250LXNpemU6MTJweDtwYWRkaW5nOjEzcHggMDtcIj48YSBzdHlsZT1cImNvbG9yOiMzNjM2MzY7XCIgaHJlZj1cImh0dHA6Ly9kYXRhLmVhc3Rtb25leS5jb20vc3RvY2tjYWxlbmRhci8nICsgc3RvY2tDb2RlICsgJy5odG1sXCIgdHJhY2tlci1ldmVudGNvZGU9XCJncHBkX3p4end5X2hxdGdta19kamdncmxcIiB0cmFja2VyLWV4dGluZm89XCJzb3VyY2U6bmV3c2NoYW5uZWw7XCI+5Liq6IKh5pel5Y6GPC9hPjwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICBfaHRtbCArPSAnPGRpdiBzdHlsZT1cImJvcmRlcjogMXB4IHNvbGlkICNhYWE7YmFja2dyb3VuZDojZjJmMmYyO2xpbmUtaGVpZ2h0OjE0cHg7Zm9udC1zaXplOjEycHg7cGFkZGluZzoxM3B4IDAgMTJweCAwO2NsZWFyOiByaWdodDtcIj48YSBzdHlsZT1cImNvbG9yOiMzNjM2MzY7XCIgaHJlZj1cImh0dHBzOi8vZW13ZWIuc2VjdXJpdGllcy5lYXN0bW9uZXkuY29tL3BjX2hzZjEwL3BhZ2VzL2luZGV4Lmh0bWw/dHlwZT13ZWImY29kZT0nICsgX19NYXJrZXQuQ29kZSArICcmY29sb3I9YiMvaHh0Y1wiIHRyYWNrZXItZXZlbnRjb2RlPVwiZ3BwZF96eHp3eV9ocXRnbWtfZGpoeHRjXCIgdHJhY2tlci1leHRpbmZvPVwic291cmNlOm5ld3NjaGFubmVsO1wiPuaguOW/g+mimOadkDwvYT48L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgY2hhcnRMZWZ0RGl2LmlubmVySFRNTCA9IF9odG1sO1xyXG4gICAgICAgICAgICAgICAgaW1nUGFyZW50Lmluc2VydEJlZm9yZShjaGFydExlZnREaXYsIHRpcHNJbWFnZVJlbWFyayk7XHJcbiAgICAgICAgICAgICAgICAvL2NoYXJ0TGVmdERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIlwiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNoYXJ0UmlnaHREaXYgPSAkQyhcImRpdlwiKTtcclxuICAgICAgICAgICAgY2hhcnRSaWdodERpdi5jbGFzc05hbWUgPSBcImNoYXJ0LXJpZ2h0XCI7XHJcbiAgICAgICAgICAgIGNoYXJ0UmlnaHREaXYuaWQgPSBcImNoYXJ0XCIgKyBzdG9ja0NvZGUgKyBjaGFydElkO1xyXG4gICAgICAgICAgICBjaGFydElkKys7XHJcbiAgICAgICAgICAgIHpkZiA9ICc8c3BhbiBzdHlsZT1cImNvbG9yOicgKyB6ZENvbG9yICsgJ1wiPicgKyB6ZGYgKyAnPC9zcGFuPic7XHJcblxyXG4gICAgICAgICAgICBpZiAoX19NYXJrZXQuVHlwZSAhPSBcInpzXCIpIHtcclxuICAgICAgICAgICAgICAgIGNoYXJ0UmlnaHREaXYuaW5uZXJIVE1MID0gJzxkaXYgc3R5bGU9XCJ0ZXh0LWFsaWduOiByaWdodDtwYWRkaW5nOiAxNXB4IDE1cHggNXB4IDA7XCI+PGEgZGF0YS1jb2RlPVwiJyArIHN0b2NrQ29kZSArICdcIiBkYXRhLW1hcmtldD1cIicgKyBzdG9ja01hcmtldCArICdcIiBjbGFzcz1cInBjLXF1b3RlbGlua1wiIGhyZWY9XCJqYXZhc2NyaXB0OjtcIiB0cmFja2VyLWV2ZW50Y29kZT1cImdwcGRfenh6d3lfaHF0Z21rX3FocXBcIiB0cmFja2VyLWV4dGluZm89XCJzb3VyY2U6bmV3c2NoYW5uZWw7XCI+PGltZyBzcmM9XCIvL2cxLmRmY2Z3LmNvbS9nMy8yMDE4MDgvMjAxODA4MjIxMTIxNTQucG5nXCIgLz48L2E+PC9kaXY+PHA+5pyA5paw5Lu377yaPHNwYW4gc3R5bGU9XCJjb2xvcjonICsgemRDb2xvciArICdcIj4nICsgcHJpY2UgKyAnPC9zcGFuPjwvcD48cD7mtqjot4zpop3vvJo8c3BhbiBzdHlsZT1cImNvbG9yOicgKyB6ZENvbG9yICsgJ1wiPicgKyB6ZGUgKyAnPC9zcGFuPjwvcD48cD7mtqjot4zluYXvvJonICsgemRmICsgJzwvcD48cD7miJDkuqTph4/vvJonICsgY2psICsgJzwvcD48cD7miJDkuqTpop3vvJonICsgY2plICsgJzwvcD48cD7mjaLmiYvnjofvvJonICsgaHNsICsgJzwvcD4nO1xyXG4gICAgICAgICAgICAgICAgaW1nUGFyZW50LmFwcGVuZENoaWxkKGNoYXJ0UmlnaHREaXYpO1xyXG4gICAgICAgICAgICAgICAgY2hhcnRSaWdodERpdi5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcIm1hcmdpbi10b3A6MHB4O1wiKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgaCA9ICc8cD7luILnm4jnjofvvJonICsgc3lsICsgJzxzcGFuPjwvc3Bhbj48L3A+PHA+5oC75biC5YC877yaJyArICh6c3ogPT0gXCItXCIgPyBcIi1cIiA6IF90aGlzLmdzaE51bSh6c3opKSArICc8c3Bhbj48L3NwYW4+PC9wPic7XHJcbiAgICAgICAgICAgICAgICBqUXVlcnkoXCIjXCIgKyBjaGFydFJpZ2h0RGl2LmlkKS5hcHBlbmQoaCk7XHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjaGFydFJpZ2h0RGl2LmlubmVySFRNTCA9ICc8cD7mnIDmlrDku7fvvJo8c3BhbiBzdHlsZT1cImNvbG9yOicgKyB6ZENvbG9yICsgJ1wiPicgKyBwcmljZSArICc8L3NwYW4+PC9wPjxwPua2qOi3jOmine+8mjxzcGFuIHN0eWxlPVwiY29sb3I6JyArIHpkQ29sb3IgKyAnXCI+JyArIHpkZSArICc8L3NwYW4+PC9wPjxwPua2qOi3jOW5he+8micgKyB6ZGYgKyAnPC9wPjxwPuaIkOS6pOmHj++8micgKyBjamwgKyAnPC9wPjxwPuaIkOS6pOmine+8micgKyBjamUgKyAnPC9wPjxwPuaNouaJi+eOh++8micgKyBoc2wgKyAnPC9wPic7XHJcbiAgICAgICAgICAgICAgICBpbWdQYXJlbnQuYXBwZW5kQ2hpbGQoY2hhcnRSaWdodERpdik7XHJcbiAgICAgICAgICAgICAgICBjaGFydFJpZ2h0RGl2LnNldEF0dHJpYnV0ZShcInN0eWxlXCIsIFwibWFyZ2luLXRvcDoyMHB4O1wiKTtcclxuICAgICAgICAgICAgICAgIHRpcHNJbWFnZVJlbWFyay5zZXRBdHRyaWJ1dGUoXCJzdHlsZVwiLCBcInBhZGRpbmctbGVmdDoyMHB4O1wiKTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgdmFyIGNoYXJ0TmF2RGl2ID0gJEMoXCJkaXZcIik7XHJcbiAgICAgICAgICAgIGNoYXJ0TmF2RGl2LmNsYXNzTmFtZSA9IFwiY2hhcnQtbmF2IGNsZWFyXCI7XHJcbiAgICAgICAgICAgIGlmIChfX01hcmtldC5UeXBlICE9IFwienNcIikge1xyXG4gICAgICAgICAgICAgICAgY2hhcnROYXZEaXYuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiaXBsX3QxIHBjLXF1b3RlbGlua1wiIGRhdGEtY29kZT1cIicgKyBzdG9ja0NvZGUgKyAnXCIgZGF0YS1tYXJrZXQ9XCInICsgc3RvY2tNYXJrZXQgKyAnXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiIHRyYWNrZXItZXZlbnRjb2RlPVwiV2ViX3p3aHFsal9jeGdnaHFcIiB0cmFja2VyLWV4dGluZm89XCJhcnRpY2xlSUQ6JyArIF9OZXdzSWQgKyAnO1wiPuafpeivouivpeiCoeihjOaDhTwvYT4mbmJzcDsmbmJzcDs8YSBjbGFzcz1cImlwbF90NFwiIGhyZWY9XCJodHRwOi8vZGF0YS5lYXN0bW9uZXkuY29tL3pqbHgvJyArIHN0b2NrQ29kZSArICcuaHRtbFwiIHRhcmdldD1cIl9zZWxmXCIgdHJhY2tlci1ldmVudGNvZGU9XCJXZWJfendocWxqX3NzempseFwiIHRyYWNrZXItZXh0aW5mbz1cImFydGljbGVJRDonICsgX05ld3NJZCArICc7XCI+5a6e5pe26LWE6YeR5rWB5ZCRPC9hPiZuYnNwOyZuYnNwOzxhIGNsYXNzPVwiaXBsX3QzXCIgaHJlZj1cImh0dHBzOi8vZW13ZWIuc2VjdXJpdGllcy5lYXN0bW9uZXkuY29tL3BjX2hzZjEwL3BhZ2VzL2luZGV4Lmh0bWw/dHlwZT13ZWImY29kZT0nICsgX19NYXJrZXQuQ29kZSArICcmY29sb3I9YiMvY3BiZFwiIHRhcmdldD1cIl9zZWxmXCIgdHJhY2tlci1ldmVudGNvZGU9XCJXZWJfendocWxqX3Nkc2pqbVwiIHRyYWNrZXItZXh0aW5mbz1cImFydGljbGVJRDonICsgX05ld3NJZCArICc7XCI+5rex5bqm5pWw5o2u5o+t56eYPC9hPiZuYnNwOyZuYnNwOzxhIGNsYXNzPVwiaXBsX3QyXCIgaHJlZj1cImh0dHA6Ly9ndWJhLmVhc3Rtb25leS5jb20vbGlzdCwnICsgc3RvY2tDb2RlICsgJy5odG1sXCIgdGFyZ2V0PVwiX3NlbGZcIiB0cmFja2VyLWV2ZW50Y29kZT1cIldlYl96d2hxbGpfanJnYlwiIHRyYWNrZXItZXh0aW5mbz1cImFydGljbGVJRDonICsgX05ld3NJZCArICc7XCI+6L+b5YWlJyArIHN0b2NrTmFtZSArICflkKc8L2E+Jm5ic3A7Jm5ic3A7PGEgY2xhc3M9XCJpcGxfdDVcIiBocmVmPVwiaHR0cDovL2pzMS5lYXN0bW9uZXkuY29tL3RnLmFzcHg/SUQ9NDQ4XCIgdGFyZ2V0PVwiX3NlbGZcIiB0cmFja2VyLWV2ZW50Y29kZT1cIldlYl96d2hxbGpfempsXCIgdHJhY2tlci1leHRpbmZvPVwiYXJ0aWNsZUlEOicgKyBfTmV3c0lkICsgJztcIj4nICsgc3RvY2tOYW1lICsgJ+i1hOmHkea1gTwvYT4nO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgY2hhcnROYXZEaXYuaW5uZXJIVE1MID0gJzxhIGNsYXNzPVwiaXBsX3QxIHBjLXF1b3RlbGlua1wiIGRhdGEtY29kZT1cIicgKyBzdG9ja0NvZGUgKyAnXCIgZGF0YS1tYXJrZXQ9XCInICsgc3RvY2tNYXJrZXQgKyAnXCIgaHJlZj1cImphdmFzY3JpcHQ6O1wiPicgKyBzdG9ja05hbWUgKyAn6KGM5oOFPC9hPiZuYnNwOyZuYnNwOzxhIGNsYXNzPVwiaXBsX3Q2XCIgaHJlZj1cImh0dHA6Ly9xdW90ZS5lYXN0bW9uZXkuY29tL2NlbnRlci9wYWloYW5nLmh0bWwjcGFpaGFuZ18wXzBcIiB0YXJnZXQ9XCJfc2VsZlwiPumihua2qOS4quiCoTwvYT4mbmJzcDsmbmJzcDs8YSBjbGFzcz1cImlwbF90NFwiIGhyZWY9XCJodHRwOi8vZGF0YS5lYXN0bW9uZXkuY29tL3pqbHgvXCIgdGFyZ2V0PVwiX3NlbGZcIj7lpKfnm5jotYTph5HmtYHlkJE8L2E+Jm5ic3A7Jm5ic3A7PGEgY2xhc3M9XCJpcGxfdDNcIiBocmVmPVwiaHR0cDovL2t1YWl4dW4uZWFzdG1vbmV5LmNvbS9cIiB0YXJnZXQ9XCJfc2VsZlwiPjcqMjTlsI/ml7blv6vorq88L2E+Jm5ic3A7Jm5ic3A7PGEgY2xhc3M9XCJpcGxfdDJcIiBocmVmPVwiaHR0cDovL2d1YmEuZWFzdG1vbmV5LmNvbS9ndWJhX3VybC5hc3B4P2NvZGU9JyArIChzdG9ja01hcmtldCA9PSBcIjFcIiA/IFwic2hcIiA6IFwic3pcIikgKyBzdG9ja0NvZGUgKyAnXCIgdGFyZ2V0PVwiX3NlbGZcIj7ov5vlhaUnICsgc3RvY2tOYW1lICsgJ+WQpzwvYT4nO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGltZ1BhcmVudC5hcHBlbmRDaGlsZChjaGFydE5hdkRpdik7XHJcblxyXG4gICAgICAgICAgICBpZiAoX19NYXJrZXQuVHlwZSAhPSBcInpzXCIpIHtcclxuICAgICAgICAgICAgICAgIF90aGlzLlhpYW5nR3Vhbkd1UGlhbyhzZWNpZCwgaW1nUGFyZW50KTsvL+ebuOWFs+iCoeelqOWSjOebuOWFs+adv+Wdl1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuWmhpU2h1TGluZ1poYW5nSGFuZ1llKGltZ1BhcmVudCk7Ly/poobmtqjooYzkuJpcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0sXHJcbiAgICAgICAgaW5pdGlhbGl6ZTogZnVuY3Rpb24gKGNsYXNzTmFtZSkge1xyXG4gICAgICAgICAgICB2YXIgX3RoaXMgPSB0aGlzO1xyXG4gICAgICAgICAgICBpZiAoY2xhc3NOYW1lICE9IFwiXCIgfHwgY2xhc3NOYW1lICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgICAgIHZhciB0aXBzSW1hZ2VSZW1hcmsgPSB0aGlzLmdldEVsZW1lbnRzQnlDbGFzc05hbWUoXCJDb250ZW50Qm9keVwiLCBjbGFzc05hbWUpO1xyXG4gICAgICAgICAgICAgICAgdmFyIGhyZWYgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBzcmMgPSBbXTtcclxuICAgICAgICAgICAgICAgIHZhciBpID0gMDtcclxuICAgICAgICAgICAgICAgIHZhciBCb2R5RW5kT2JqID0gJChcIkNvbnRlbnRCb2R5XCIpO1xyXG4gICAgICAgICAgICAgICAgdmFyIEJvZHlOZXh0Tm9kZSA9IEJvZHlFbmRPYmoubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB3aGlsZSAoQm9keU5leHROb2RlLm5vZGVUeXBlICE9IDEpIHtcclxuICAgICAgICAgICAgICAgICAgICBCb2R5TmV4dE5vZGUgPSBCb2R5TmV4dE5vZGUubmV4dFNpYmxpbmc7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYgKHRpcHNJbWFnZVJlbWFyayAhPSB1bmRlZmluZWQgJiYgdGlwc0ltYWdlUmVtYXJrICE9IG51bGwgJiYgdGlwc0ltYWdlUmVtYXJrICE9IFwiXCIpIHtcclxuICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHRpcHNJbWFnZVJlbWFyay5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgaW1nUGFyZW50ID0gdGlwc0ltYWdlUmVtYXJrW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoaW1nUGFyZW50LmNsYXNzTmFtZS5pbmRleE9mKFwiRGlzYWJsZU90aGVyXCIpID49IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpbWdub2RlcyA9IGltZ1BhcmVudC5nZXRFbGVtZW50c0J5VGFnTmFtZShcImltZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGltZ25vZGVzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGF0YWNvZGUgPSB0aXBzSW1hZ2VSZW1hcmtbaV0uZ2V0QXR0cmlidXRlKFwiZGF0YS1jb2RlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhY29kZSAhPSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kYXRhY29kZUl0ZW0gPSBfZGF0YWNvZGUuc3BsaXQoJ3wnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nUGFyZW50LmNsYXNzTGlzdC5hZGQoXCJwYy1xdW90ZWxpbmtcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nUGFyZW50LnNldEF0dHJpYnV0ZShcImRhdGEtY29kZVwiLF9kYXRhY29kZUl0ZW1bMF0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltZ1BhcmVudC5zZXRBdHRyaWJ1dGUoXCJkYXRhLW1hcmtldFwiLCBfZGF0YWNvZGVJdGVtWzFdKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9LUiA9IGltZ25vZGVzWzBdLmdldEF0dHJpYnV0ZShcImRhdGEtY29kZVwiKS50b0xvd2VyQ2FzZSgpLnN1YnN0cmluZygwLCAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gPSBpbWdub2Rlc1swXS5zcmM7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9LUiA9PSBcImtcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcmNbaV0gPSBzcmNbaV0ucmVwbGFjZShcImltYWdlVHlwZT1rXCIsIFwiaW1hZ2VUeXBlPWtuZXdzXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWdub2Rlc1swXS5zcmMgPSBzcmNbaV07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfZGF0YWNvZGUyID0gdGlwc0ltYWdlUmVtYXJrW2ldLmdldEF0dHJpYnV0ZShcImRhdGEtY29kZTJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9kYXRhY29kZTIgIT0gbnVsbCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgX2RhdGFjb2RlMkl0ZW0gPSBfZGF0YWNvZGUyLnNwbGl0KCd8Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICgoX2RhdGFjb2RlSXRlbVsxXSA9PSBcIjBcIiB8fCBfZGF0YWNvZGVJdGVtWzFdID09IFwiMVwiKSAmJiAoX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCI1XCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCI2XCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCI3XCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCIxXCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCIyXCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCIzXCIgfHwgX2RhdGFjb2RlMkl0ZW1bMl0gPT0gXCIxM1wiIHx8IF9kYXRhY29kZTJJdGVtWzJdID09IFwiODBcIiB8fCBfZGF0YWNvZGUySXRlbVsyXSA9PSBcIjIzXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRJbWcoX2RhdGFjb2RlSXRlbVswXSwgX2RhdGFjb2RlSXRlbVsxXSwgdGlwc0ltYWdlUmVtYXJrW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKChfZGF0YWNvZGVJdGVtWzFdID09IFwiMFwiIHx8IF9kYXRhY29kZUl0ZW1bMV0gPT0gXCIxXCIpICYmIChfZGF0YWNvZGVJdGVtWzJdID09IFwiMVwiIHx8IF9kYXRhY29kZUl0ZW1bMl0gPT0gXCIyXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmluaXRJbWcoX2RhdGFjb2RlSXRlbVswXSwgX2RhdGFjb2RlSXRlbVsxXSwgdGlwc0ltYWdlUmVtYXJrW2ldKVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nbm9kZXNbMF0ud2lkdGggPSBcIjUzMFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaW1nbm9kZXNbMF0uaGVpZ2h0ID0gXCIyNzZcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB2YXIgYmtUaXBBcmVhcyA9IHRoaXMuZ2V0RWxlbWVudHNCeUNsYXNzTmFtZShcIkNvbnRlbnRCb2R5XCIsIFwiRW1fTmV3c0JrXCIpO1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJrVGlwQXJlYXMubGVuZ3RoOyBpKyspIHtcclxuICAgICAgICAgICAgICAgIGJrVGlwQXJlYXNbaV0uaW5uZXJIVE1MID0gJzxkaXYgY2xhc3M9XCJia0xpbmtMaXN0XCI+JyArICc8ZGl2IGNsYXNzPVwiaGFMaW5rXCI+PGIgY2xhc3M9XCJia19pY28gaGFcIj48L2I+PGRpdiBjbGFzcz1cImxtY1wiPuayqkHvvJo8L2Rpdj48YSBocmVmPVwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2xpc3QuaHRtbCMxMF8wXzBfdT9zb3J0VHlwZT1DJnNvcnRSdWxlPS0xXCIgdGFyZ2V0PVwiX3NlbGZcIj7mtqjluYXmppw8L2E+PHNwYW4gY2xhc3M9XCJsXCI+772cPC9zcGFuPjxhIGhyZWY9XCJodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS9jZW50ZXIvbGlzdC5odG1sIzEwXzBfMF9kP3NvcnRUeXBlPUMmc29ydFJ1bGU9MVwiIHRhcmdldD1cIl9zZWxmXCI+6LeM5bmF5qacPC9hPjxzcGFuIGNsYXNzPVwibFwiPu+9nDwvc3Bhbj48YSBocmVmPVwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2xpc3QuaHRtbCMxMF8wXzBfdT9zb3J0VHlwZT1GJnNvcnRSdWxlPS0xXCIgdGFyZ2V0PVwiX3NlbGZcIj7miJDkuqTph488L2E+PHNwYW4gY2xhc3M9XCJsXCI+772cPC9zcGFuPjxhIGhyZWY9XCJodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS9jZW50ZXIvbGlzdC5odG1sIzEwXzBfMF91P3NvcnRUeXBlPUcmc29ydFJ1bGU9LTFcIiB0YXJnZXQ9XCJfc2VsZlwiPuS6lOWIhumSn+a2qOi3jOamnDwvYT48L2Rpdj4nICsgJzxkaXYgY2xhc3M9XCJoYkxpbmtcIj48YiBjbGFzcz1cImJrX2ljbyBoYlwiPjwvYj48ZGl2IGNsYXNzPVwibG1jXCI+5rexQe+8mjwvZGl2PjxhIGhyZWY9XCJodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS9jZW50ZXIvbGlzdC5odG1sIzIwXzBfMF91P3NvcnRUeXBlPUMmc29ydFJ1bGU9LTFcIiB0YXJnZXQ9XCJfc2VsZlwiPua2qOW5heamnDwvYT48c3BhbiBjbGFzcz1cImxcIj7vvZw8L3NwYW4+PGEgaHJlZj1cImh0dHA6Ly9xdW90ZS5lYXN0bW9uZXkuY29tL2NlbnRlci9saXN0Lmh0bWwjMjBfMF8wX2Q/c29ydFR5cGU9QyZzb3J0UnVsZT0xXCIgdGFyZ2V0PVwiX3NlbGZcIj7ot4zluYXmppw8L2E+PHNwYW4gY2xhc3M9XCJsXCI+772cPC9zcGFuPjxhIGhyZWY9XCJodHRwOi8vcXVvdGUuZWFzdG1vbmV5LmNvbS9jZW50ZXIvbGlzdC5odG1sIzIwXzBfMF91P3NvcnRUeXBlPUYmc29ydFJ1bGU9LTFcIiB0YXJnZXQ9XCJfc2VsZlwiPuaIkOS6pOmHjzwvYT48c3BhbiBjbGFzcz1cImxcIj7vvZw8L3NwYW4+PGEgaHJlZj1cImh0dHA6Ly9xdW90ZS5lYXN0bW9uZXkuY29tL2NlbnRlci9saXN0Lmh0bWwjMjBfMF8wX3U/c29ydFR5cGU9RyZzb3J0UnVsZT0tMVwiIHRhcmdldD1cIl9zZWxmXCI+5LqU5YiG6ZKf5rao6LeM5qacPC9hPjwvZGl2PicgKyAnPGRpdiBjbGFzcz1cImx6TGlua1wiPjxiIGNsYXNzPVwiYmtfaWNvIGx6XCI+PC9iPjxkaXYgY2xhc3M9XCJsbWNcIj7poobmtqjmnb/lnZfvvJo8L2Rpdj48ZGl2IGlkPVwiYmtMaXN0X2x6YmtcIj48L2Rpdj48L2Rpdj4nICsgJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICB0aGlzLmlvT3ZlcmFsbChcImh0dHA6Ly9ocTJkYXRhLmVhc3Rtb25leS5jb20vYmsvZGF0YS9ia2FudC5qc1wiLCBcIlwiLCBcIkJLQ2FjaGVcIixcclxuXHRcdFx0XHRmdW5jdGlvbiAoZGF0YSkge1xyXG5cdFx0XHRcdCAgICBpZiAoZGF0YSAmJiBkYXRhLlRvcCAmJiBkYXRhLlRvcC5sZW5ndGggPiAwKSB7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgbHpnID0gZGF0YS5Ub3BbMF07XHJcblx0XHRcdFx0ICAgICAgICB2YXIgc2hvd1N0ciA9IFwiXCI7XHJcblx0XHRcdFx0ICAgICAgICB2YXIgdGVtcERhdGEgPSBcIlwiO1xyXG5cdFx0XHRcdCAgICAgICAgdmFyIF9jb2xvciA9IFwiXCI7XHJcblx0XHRcdFx0ICAgICAgICBmb3IgKHZhciBseiBpbiBsemcpIHtcclxuXHRcdFx0XHQgICAgICAgICAgICB0ZW1wRGF0YSA9IGx6Z1tsel0uc3BsaXQoXCIsXCIpO1xyXG5cdFx0XHRcdCAgICAgICAgICAgIF9jb2xvciA9IHBhcnNlRmxvYXQodGVtcERhdGFbMV0pID09IDAgPyBcIlwiIDogcGFyc2VGbG9hdCh0ZW1wRGF0YVsxXSkgPiAwID8gXCJyZWRcIiA6IFwiZ3JlZW5cIjtcclxuXHRcdFx0XHQgICAgICAgICAgICBzaG93U3RyICs9IFwiPGEgaHJlZj1cXFwiaHR0cDovL3F1b3RlLmVhc3Rtb25leS5jb20vY2VudGVyL2xpc3QuaHRtbCMyODAwXCIgKyB0ZW1wRGF0YVsxMF0gKyB0ZW1wRGF0YVs5XSArIFwiXzBfMlxcXCIgdGFyZ2V0PVxcXCJfc2VsZlxcXCI+XCIgKyB0ZW1wRGF0YVswXSArIFwiPC9hPjxzcGFuIGNsYXNzPVxcXCJ6ZlxcXCI+KDxzcGFuIGNsYXNzPVxcXCJcIiArIF9jb2xvciArIFwiXFxcIj5cIiArIHRlbXBEYXRhWzFdICsgXCI8L3NwYW4+KTwvc3Bhbj5cIlxyXG5cdFx0XHRcdCAgICAgICAgfVxyXG5cdFx0XHRcdCAgICAgICAgJChcImJrTGlzdF9semJrXCIpLmlubmVySFRNTCA9IHNob3dTdHI7XHJcblx0XHRcdFx0ICAgIH1cclxuXHRcdFx0XHR9KTtcclxuICAgICAgICAgICAgICAgIGJrVGlwQXJlYXNbaV0uc3R5bGUuZGlzcGxheSA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICBicmVha1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpbml0SW1nOiBmdW5jdGlvbiAoX3N0b2NrY29kZSwgX3N0b2NrbWFya2V0LCB0aXBzSW1hZ2VSZW1hcmspIHtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gdGhpcztcclxuICAgICAgICAgICAgdmFyIHNlY2lkID0gX3N0b2NrbWFya2V0ICsgXCIuXCIgKyBfc3RvY2tjb2RlO1xyXG4gICAgICAgICAgICAvL+ihjOaDheWbvuS4gOWciFxyXG4gICAgICAgICAgICBqUXVlcnkuYWpheCh7XHJcbiAgICAgICAgICAgICAgICB0eXBlOiBcIkdFVFwiLFxyXG4gICAgICAgICAgICAgICAgdXJsOiBcIi8vcHVzaDIuZWFzdG1vbmV5LmNvbS9hcGkvcXQvc3RvY2svZ2V0P2ZsdHQ9MiZmaWVsZHM9ZjU3LGY1OCxmMTA3LGY0MyxmMTY4LGYxNjksZjE3MCxmNDcsZjQ4LGYxNjIsZjExNiZzZWNpZD1cIiArIHNlY2lkICsgXCImdXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmY2I9P1wiLFxyXG4gICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChqc29uKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKGpzb24gJiYganNvbi5yYyA9PSBcIjBcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5OZXdzSW1nKHNlY2lkLCBqc29uLCB0aXBzSW1hZ2VSZW1hcmspO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfSxcclxuICAgICAgICBpb092ZXJhbGw6IGZ1bmN0aW9uIChzcmMsIGNoYXJzZXQsIGRhdGFWYXIsIGNhbGxiYWNrLCBub2RlT2JqKSB7XHJcbiAgICAgICAgICAgIHZhciBzY3JpcHQgPSAkQyhcInNjcmlwdFwiKTtcclxuICAgICAgICAgICAgc2NyaXB0LnR5cGUgPSBcInRleHQvamF2YXNjcmlwdFwiO1xyXG4gICAgICAgICAgICBzY3JpcHQuY2hhcnNldCA9IChjaGFyc2V0ID09IFwiXCIpID8gXCJHQjIzMTJcIiA6IGNoYXJzZXQ7XHJcbiAgICAgICAgICAgIHNjcmlwdC5zcmMgPSBzcmM7XHJcbiAgICAgICAgICAgIHNjcmlwdC5fMGogPSB0aGlzO1xyXG4gICAgICAgICAgICBzY3JpcHRbZG9jdW1lbnQuYWxsID8gXCJvbnJlYWR5c3RhdGVjaGFuZ2VcIiA6IFwib25sb2FkXCJdID0gZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKGRvY3VtZW50LmFsbCAmJiB0aGlzLnJlYWR5U3RhdGUgIT0gXCJsb2FkZWRcIiAmJiB0aGlzLnJlYWR5U3RhdGUgIT0gXCJjb21wbGV0ZVwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB0aGlzW2RvY3VtZW50LmFsbCA/IFwib25yZWFkeXN0YXRlY2hhbmdlXCIgOiBcIm9ubG9hZFwiXSA9IG51bGw7XHJcbiAgICAgICAgICAgICAgICBpZiAoY2FsbGJhY2spIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAobm9kZU9iaikgY2FsbGJhY2soZXZhbChkYXRhVmFyKSwgbm9kZU9iaik7XHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSBjYWxsYmFjayhldmFsKGRhdGFWYXIpKVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgdGhpcy5wYXJlbnROb2RlLnJlbW92ZUNoaWxkKHRoaXMpXHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwiaGVhZFwiKS5pdGVtKDApLmFwcGVuZENoaWxkKHNjcmlwdClcclxuICAgICAgICB9XHJcbiAgICB9O1xyXG4gICAgdHJ5IHtcclxuICAgICAgICAvL+iwg+eUqOWbvumbhlxyXG4gICAgICAgIHZhciBlbnNpdCA9IG5ldyBuZXdzaW1nKFwiRW1JbWFnZVJlbWFya1wiKTtcclxuICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgXHJcbiAgICB9XHJcblxyXG4gICAgdmFyIGRzcV91cGRhdGVFbUltYWdlUmVtYXJrID0gc2V0SW50ZXJ2YWwodXBkYXRlRW1JbWFnZVJlbWFyaywxMDApO1xyXG4gICAgc2V0VGltZW91dChmdW5jdGlvbigpe1xyXG4gICAgICAgIGNsZWFySW50ZXJ2YWwoZHNxX3VwZGF0ZUVtSW1hZ2VSZW1hcmspXHJcbiAgICB9LDIwMDAwKVxyXG59O1xyXG5cclxuXHJcblxuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvbW9kdWxlcy9uZXdzaW1nL25ld3NwYy5qc1xuLy8gbW9kdWxlIGlkID0gMTdcbi8vIG1vZHVsZSBjaHVua3MgPSAyIiwidmFyIGhleF9tZDUgPSByZXF1aXJlKCcuLi9qcy9tb2R1bGVzL21kNScpO1xyXG52YXIgaW5pdExhbmdLZVZpZGVvID0gcmVxdWlyZSgnLi4vanMvbW9kdWxlcy9sYW5na2UvbmV3c3BjYmVmb3JlJyk7XHJcbnZhciB1bml0eXZvdGUgPSByZXF1aXJlKCcuLi9qcy9tb2R1bGVzL3ZvdGUvdW5pdHl2b3RlJyk7XHJcbnZhciBpbml0TmV3c0lNRyA9IHJlcXVpcmUoJy4uL2pzL21vZHVsZXMvbmV3c2ltZy9uZXdzcGMnKTtcclxuXHJcbnZhciBjb25maWcgPSB7XHJcbiAgICBcImd1YmFcIjogXCJodHRwczovL2diYXBpLmVhc3Rtb25leS5jb20vXCIsXHJcbiAgICBcInB1c2hcIjogXCJodHRwczovL3B1c2gyLmVhc3Rtb25leS5jb20vXCJcclxufTtcclxuXHJcbmlmKF9DTVNISiA9PSBcInRlc3RcIil7XHJcbiAgICBjb25maWcuZ3ViYSA9IFwiaHR0cHM6Ly9nYmFwaS10ZXN0LmVhc3Rtb25leS5jb20vXCI7XHJcbn1cclxuXHJcbnZhciBjb29raWUgPSB7XHJcbiAgICBnZXQ6IGZ1bmN0aW9uIChuYW1lKSB7XHJcbiAgICAgICAgdmFyIHhhcnIgPSBkb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cChcIihefCApXCIgKyBuYW1lICsgXCI9KFteO10qKSg7fCQpXCIpKTtcclxuICAgICAgICBpZiAoeGFyciAhPSBudWxsKSByZXR1cm4gZGVjb2RlVVJJQ29tcG9uZW50KHhhcnJbMl0pO1xyXG4gICAgICAgIHJldHVybiBudWxsO1xyXG4gICAgfSxcclxuICAgIHNldDogZnVuY3Rpb24gKGtleSwgdmFsdWUsIGV4cGlyZWRheXMsIGRvbWFpbikge1xyXG4gICAgICAgIHZhciBjb29raWVzdHIgPSBrZXkgKyBcIj1cIiArIGVzY2FwZSh2YWx1ZSlcclxuXHJcbiAgICAgICAgaWYgKGV4cGlyZWRheXMgIT0gdW5kZWZpbmVkKSB7XHJcbiAgICAgICAgICAgIHZhciBleGRhdGUgPSBuZXcgRGF0ZSgpO1xyXG4gICAgICAgICAgICBleGRhdGUuc2V0RGF0ZShleGRhdGUuZ2V0RGF0ZSgpICsgZXhwaXJlZGF5cyk7XHJcbiAgICAgICAgICAgIGNvb2tpZXN0ciArPSBcIjtleHBpcmVzPVwiICsgZXhkYXRlLnRvR01UU3RyaW5nKClcclxuICAgICAgICB9XHJcbiAgICAgICAgaWYgKGRvbWFpbiAhPSB1bmRlZmluZWQpIHtcclxuICAgICAgICAgICAgY29va2llc3RyICs9IFwiO2RvbWFpbj1cIiArIGRvbWFpbjtcclxuICAgICAgICB9XHJcbiAgICAgICAgY29va2llc3RyICs9ICc7cGF0aD0vJztcclxuICAgICAgICBkb2N1bWVudC5jb29raWUgPSBjb29raWVzdHI7XHJcblxyXG4gICAgfSxcclxuICAgIGRlbDogZnVuY3Rpb24gKGtleSwgZG9tYWluKSB7XHJcbiAgICAgICAgdmFyIGV4ZGF0ZSA9IG5ldyBEYXRlKChuZXcgRGF0ZSkuZ2V0VGltZSgpIC0gMSk7XHJcbiAgICAgICAgaWYgKGRvbWFpbikge1xyXG4gICAgICAgICAgICBkb2N1bWVudC5jb29raWUgPSBrZXkgKyAnPTtwYXRoPS87ZXhwaXJlcz0nICsgZXhkYXRlLnRvR01UU3RyaW5nKCkgKyAnO2RvbWFpbj0nICsgZG9tYWluO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGRvY3VtZW50LmNvb2tpZSA9IGtleSArICc9O3BhdGg9LztleHBpcmVzPScgKyBleGRhdGUudG9HTVRTdHJpbmcoKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgfVxyXG59O1xyXG5cclxudmFyIF9kZXZpY2VpZCA9IFwiMGQyNzk4Y2FiMTcxNjQzOWEzNDNjOTk2NWMyMGM1OWRcIjtcclxudmFyIF9jdG9rZW4gPSBjb29raWUuZ2V0KFwiY3RcIik7XHJcbnZhciBfdXRva2VuID0gY29va2llLmdldChcInV0XCIpO1xyXG52YXIgX0d1YmFBcGlIID0gaGV4X21kNShcImN0b2tlbj1cIiArIF9jdG9rZW4gKyBcInV0b2tlbj1cIiArIF91dG9rZW4gKyBcIl81MTlkNzdiMjliZTQ0MmY4XCIpO1xyXG5mdW5jdGlvbiBsb2FkQ29va2llcygpIHtcclxuICAgIGlmIChfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsIHx8IF9HdWJhQXBpSCA9PSBudWxsKSB7XHJcbiAgICAgICAgX2N0b2tlbiA9IGNvb2tpZS5nZXQoXCJjdFwiKTtcclxuICAgICAgICBfdXRva2VuID0gY29va2llLmdldChcInV0XCIpO1xyXG4gICAgICAgIF9HdWJhQXBpSCA9IGhleF9tZDUoXCJjdG9rZW49XCIgKyBfY3Rva2VuICsgXCJ1dG9rZW49XCIgKyBfdXRva2VuICsgXCJfNTE5ZDc3YjI5YmU0NDJmOFwiKTtcclxuICAgICAgICBpZihfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsIHx8IF9HdWJhQXBpSCA9PSBudWxsKXtcclxuXHJcbiAgICAgICAgfWVsc2V7Ly9jb29raWXkuLrnqbrkuI3op6blj5HliqDovb1cclxuICAgICAgICAgICAgenh6d09iai5nZXROZXdzQXJ0aWNsZUJyaWVmSW5mbygpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgIH1cclxufVxyXG5cclxuLyoqXHJcbiAqIOagvOW8j+WMlueCuei1nuaUtuiXj+aVsFxyXG4gKiB0eXBlOiAwLSA7MSsgOzLkuI3liqDkuI3lh49cclxuICovXHJcbnZhciBmb3JtYXRaYW5OdW0gPSBmdW5jdGlvbiAoY291bnQsIHR5cGUpIHtcclxuICAgIHZhciBudW0gPSBwYXJzZUludChjb3VudCkgPyBwYXJzZUludChjb3VudCkgOiAwO1xyXG4gICAgdmFyIGJhY2sgPSBcIlwiO1xyXG4gICAgaWYgKHR5cGUgPT0gMikge1xyXG4gICAgICAgIHRlbXAgPSBudW1cclxuICAgIH0gZWxzZSB7XHJcbiAgICAgICAgdGVtcCA9IHR5cGUgPyBudW0gKyAxIDogbnVtIC0gMTtcclxuICAgIH1cclxuICAgIGJhY2sgPSB0ZW1wID4gOTkgPyBcIjk5K1wiIDogdGVtcCA+IDAgPyB0ZW1wIDogXCJcIjtcclxuICAgIHJldHVybiBiYWNrO1xyXG59O1xyXG5cclxuLyoqXHJcbiAqIOeCuei1nisxXHJcbiAqL1xyXG52YXIgY3JlYXRBZGRsYWIgPSBmdW5jdGlvbiAoZSkge1xyXG4gICAgdmFyICRib2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoXCJib2R5XCIpWzBdO1xyXG4gICAgdmFyICRsYWIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiYlwiKTtcclxuICAgIHZhciBkaWZmID0gMCxcclxuXHRhbmltLCB4ID0gZS5wYWdlWCxcclxuXHR5ID0gZS5wYWdlWTtcclxuICAgIHZhciBzdHlsZSA9ICRsYWIuc3R5bGU7XHJcbiAgICBzdHlsZS5jb2xvciA9IFwiI0U5NEYwNlwiO1xyXG4gICAgc3R5bGUuekluZGV4ID0gOTk5OTtcclxuICAgIHN0eWxlLnBvc2l0aW9uID0gXCJhYnNvbHV0ZVwiO1xyXG4gICAgc3R5bGUuc2VsZWN0ID0gXCJub25lXCI7XHJcbiAgICBzdHlsZS5sZWZ0ID0gKHggLSAxMCkgKyBcInB4XCI7XHJcbiAgICBzdHlsZS50b3AgPSAoeSAtIDIwKSArIFwicHhcIjtcclxuICAgIHN0eWxlLmZvbnRTaXplID0gXCIxNnB4XCI7XHJcbiAgICBzdHlsZS50ZXh0U2hhZG93ID0gXCJcIjtcclxuICAgICRsYWIuaW5uZXJUZXh0ID0gXCIrMVwiO1xyXG4gICAgY2xlYXJJbnRlcnZhbChhbmltKTtcclxuICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIGFuaW0gPSBzZXRJbnRlcnZhbChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgrK2RpZmYgPT0gMTAwKSB7XHJcbiAgICAgICAgICAgICAgICBjbGVhckludGVydmFsKGFuaW0pO1xyXG4gICAgICAgICAgICAgICAgJGJvZHkucmVtb3ZlQ2hpbGQoJGxhYik7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIHN0eWxlLmxlZnQgPSAoeCAtIDEwKSArIFwicHhcIjtcclxuICAgICAgICAgICAgc3R5bGUudG9wID0geSAtIDIwIC0gZGlmZiArIFwicHhcIjtcclxuICAgICAgICAgICAgc3R5bGUub3BhY2l0eSA9ICgxMDAgLSBkaWZmKSAvIDEwMDtcclxuICAgICAgICB9LFxyXG5cdFx0MTApO1xyXG4gICAgfSxcclxuXHQ1MCk7XHJcbiAgICAkYm9keS5hcHBlbmRDaGlsZCgkbGFiKTtcclxufTtcclxuXHJcbi8vIOeCuei1nlxyXG52YXIgemFuT2JqID0ge1xyXG4gICAgLy8g54K56LWe5pON5L2cICQodGhpcyksaGFzemFuLCBcclxuICAgIHphbkZ1bjogZnVuY3Rpb24gKGUsICRkb20sIHR5cGUsIGFydGljbGVJZCkge1xyXG4gICAgICAgIHZhciBfdGhpcyA9ICRkb207XHJcblxyXG4gICAgICAgIHZhciBfYXBpdXJsID0gKF90aGlzLmhhc0NsYXNzKFwiemFuXCIpIHx8IF90aGlzLmhhc0NsYXNzKFwiaHVvemFuXCIpKSA/IFwiTGlrZUFydGljbGVcIiA6IFwiQ2FuY2VsTGlrZUFydGljbGVcIjtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBjb25maWcuZ3ViYSArIFwibGlrZW9wdC9qc29ucC9cIiArIF9hcGl1cmwgKyBcIj9pZD1cIiArIGFydGljbGVJZCArIFwiJnR5cGU9MSZkZXZpY2VpZD1cIiArIF9kZXZpY2VpZCArIFwiJnZlcnNpb249MiZwcm9kdWN0PWVhc3Rtb25leSZwbGF0PXdlYiZoPVwiICsgX0d1YmFBcGlIICsgXCImY3Rva2VuPVwiICsgX2N0b2tlbiArIFwiJnV0b2tlbj1cIiArIF91dG9rZW4sXHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAganNvbnBDYWxsYmFjazogXCJjYlwiICsgcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMDAwICsgXCJcIiksXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJjID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIHByZXphbnVtID0gJChcIiNwb3N0X2xpa2VfY291bnRcIikuYXR0cihcInJlYWxudW1cIikgPyAkKFwiI3Bvc3RfbGlrZV9jb3VudFwiKS5hdHRyKFwicmVhbG51bVwiKSA6IDA7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKF9hcGl1cmwgPT0gXCJMaWtlQXJ0aWNsZVwiKXsvL+eCuei1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaGFzQ2xhc3MoXCJ6YW5cIikpey8v5pmu6YCa6LWeXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcInphblwiKS5hZGRDbGFzcyhcInphbmFuaW1hdGVcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiemFuYW5pbWF0ZVwiKS5hZGRDbGFzcyhcImhhc196YW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgNjAwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfWVsc2UgaWYoX3RoaXMuaGFzQ2xhc3MoXCJodW96YW5cIikpey8v54Gr6LWeXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcImh1b3phblwiKS5hZGRDbGFzcyhcImhhc19odW96YW5cIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIG51bSA9IGZvcm1hdFphbk51bShwcmV6YW51bSwgMSk7Ly8rMVxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Bvc3RfbGlrZV9jb3VudFwiKS50ZXh0KG51bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9saWtlX2NvdW50XCIpLmF0dHIoXCJyZWFsbnVtXCIsIHBhcnNlSW50KHByZXphbnVtKSArIDEpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgY3JlYXRBZGRsYWIoZSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNley8v5Y+W5raI54K56LWeXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBudW0gPSBmb3JtYXRaYW5OdW0ocHJlemFudW0sIDApOy8vLTFcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2xpa2VfY291bnRcIikudGV4dChudW0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Bvc3RfbGlrZV9jb3VudFwiKS5hdHRyKFwicmVhbG51bVwiLCBwYXJzZUludChwcmV6YW51bSkgLSAxKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYoX3RoaXMuaGFzQ2xhc3MoXCJoYXNfaHVvemFuXCIpKXsvL+eBq+i1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJoYXNfaHVvemFuXCIpLmFkZENsYXNzKFwiaHVvemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXsvL+aZrumAmui1nlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJoYXNfemFuXCIpLmFkZENsYXNzKFwiemFuXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfVxyXG59O1xyXG5cclxuLy8g5pS26JePXHJcbnZhciBjb2xsZWN0T2JqID0ge1xyXG4gICAgLy8g5pS26JeP5LiO5Y+W5raI5pS26JePXHJcbiAgICBjb2xsZWN0RnVuOiBmdW5jdGlvbiAoZSwgJGRvbSwgdHlwZSwgYXJ0aWNsZUlkKSB7XHJcbiAgICAgICAgdmFyIF90aGlzID0gJGRvbTtcclxuXHJcbiAgICAgICAgdmFyIGhhc2NvbGxlY3QgPSBfdGhpcy5oYXNDbGFzcyhcInNob3VjYW5nXCIpID8gZmFsc2UgOiB0cnVlO1xyXG4gICAgICAgIHZhciBfYXBpdXJsID0gaGFzY29sbGVjdCA/IFwiQ2FuY2VsQ29sbGVjdEFydGljbGVcIiA6IFwiQ29sbGVjdEFydGljbGVcIjtcclxuXHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBjb25maWcuZ3ViYSArIFwiY29sbGVjdG9wdC9qc29ucC9cIiArIF9hcGl1cmwgKyBcIj9wb3N0aWQ9XCIgKyBhcnRpY2xlSWQgKyBcIiZoPVwiICsgX0d1YmFBcGlIICsgXCImdHlwZT0xJnZlcnNpb249ODAwMDgwMDAmcHJvZHVjdD1ndWJhJnBsYXQ9d2FwJmRldmljZWlkPVwiICsgX2RldmljZWlkICsgXCImY3Rva2VuPVwiICsgX2N0b2tlbiArIFwiJnV0b2tlbj1cIiArIF91dG9rZW4sXHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAganNvbnBDYWxsYmFjazogXCJjYlwiICsgcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMDAwICsgXCJcIiksXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJjID09PSAxKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy/mlLbol49cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaGFzQ2xhc3MoXCJzaG91Y2FuZ1wiKSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcInNob3VjYW5nXCIpLmFkZENsYXNzKFwic2NhbmltYXRlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwic2NhbmltYXRlXCIpLmFkZENsYXNzKFwiaGFzX3Nob3VjYW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9LCA2MDApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9fdGhpcy5yZW1vdmVDbGFzcyhcInNob3VjYW5nXCIpLmFkZENsYXNzKFwiaGFzX3Nob3VjYW5nXCIpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jcmVhdEFkZGxhYihlKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v5Y+W5raI5pS26JePXHJcbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiaGFzX3Nob3VjYW5nIHNjYW5pbWF0ZVwiKS5hZGRDbGFzcyhcInNob3VjYW5nXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL190aGlzLnJlbW92ZUNsYXNzKFwiaGFzX3Nob3VjYW5nXCIpLmFkZENsYXNzKFwic2hvdWNhbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgfSk7XHJcbiAgICB9XHJcbn07XHJcblxyXG52YXIgenh6d09iaiA9IHtcclxuICAgIC8qKlxyXG4gICAgICog5Yid5aeL5YyW5LqL5Lu2IFxyXG4gICAgICovXHJcbiAgICBpbml0OiBmdW5jdGlvbiAoKSB7XHJcblxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmICgkKFwiLmNvbnRlbnR3cmFwIC50b3Bib3ggLnRpcGJveCAuaW5mb3NcIikud2lkdGgoKSA+IDM1MCkge1xyXG4gICAgICAgICAgICAgICAgJChcIi5jb250ZW50d3JhcCAudG9wYm94IC50aXBib3ggLmluZm9zXCIpLmNzcyh7XCJtYXJnaW4tYm90dG9tXCI6XCIwXCJ9KTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAkKFwiYm9keVwiKS5vbihcImNsaWNrXCIsIFwiLnBjLXF1b3RlbGlua1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgX21hcmtldCA9ICQodGhpcykuYXR0cignZGF0YS1tYXJrZXQnKTtcclxuICAgICAgICAgICAgICAgIHZhciBfY29kZSA9ICQodGhpcykuYXR0cignZGF0YS1jb2RlJyk7XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB2YXIgX2RhdGEgPSB7XHJcbiAgICAgICAgICAgICAgICAgICAgXCJPcGVyYXRpb25cIjogXCJTd2l0Y2hUb1J0bGluZVwiLFxyXG4gICAgICAgICAgICAgICAgICAgIFwiUGFyYW1zXCI6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJtYXJrZXRcIjogX21hcmtldC50b1N0cmluZygpLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImNvZGVcIjogX2NvZGUudG9TdHJpbmcoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJvcmlnaW5VUkxcIjogXCJcIixcclxuICAgICAgICAgICAgICAgICAgICB9LFxyXG4gICAgICAgICAgICAgICAgICAgIFwiQ2FsbEJhY2tcIjogXCJcIlxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgLy93aW5kb3cuZXh0ZXJuYWwuT25XZWJDYWxsTmF0aXZlSnNDb21tb24oX2RhdGEpOy8v5Y+C5pWw5pivanNvblxyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5leHRlcm5hbC5PbldlYkNhbGxOYXRpdmVKc0NvbW1vbihKU09OLnN0cmluZ2lmeShfZGF0YSkpOy8v5Y+C5pWw5piv5a2X56ym5LiyXHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlKSB7IH1cclxuICAgICAgICBcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfSk7XHJcbiAgICBcclxuICAgICAgICAgICAgJChcImJvZHlcIikub24oXCJjbGlja1wiLCBcIi5wYy1vcGVuYnJvd3NlclwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgcGNsaW5rID0gJCh0aGlzKS5kYXRhKCdwY2xpbmsnKTtcclxuICAgICAgICAgICAgICAgIHdpbmRvdy5leHRlcm5hbC5PbkNsaWNrRXZlbnQoXCJyZXR1cm4oZmFsc2UgJiYgW10ucHVzaCgnI3R5cGU9MDQmJnVybD1cIiArIHBjbGluayArIFwiJykpO1wiKVxyXG4gICAgICAgICAgICB9KTtcclxuICAgIFxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICBcclxuICAgICAgICBmdW5jdGlvbiBpbml0QSgpIHtcclxuICAgIFxyXG4gICAgICAgICAgICAvL+ato+aWh+mhteWinuWKoOe9kemhteS4quiCoemTvuaOpeWKn+iDvSjpnZ7nrKzkuIDmrKHlh7rnjrDnmoTml7blgJnovazmjaLmiJBh6ZO+5o6lKVxyXG4gICAgICAgICAgICAkKFwiLmVtX3N0b2NrX2tleV9jb21tb25cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgaWYgKF90aGlzLmF0dHIoXCJ3ZWJcIikgPT0gXCIxXCIpIHsvL3dlYj0x55qE5pe25YCZc3Bhbuagh+etvuWPmOaIkGHmoIfnrb5cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hZnRlcihfdGhpcy5wcm9wKFwib3V0ZXJIVE1MXCIpLnJlcGxhY2UoXCI8c3BhblwiLCBcIjxhXCIpLnJlcGxhY2UoXCI8L3NwYW4+XCIsIFwiPC9hPlwiKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8v5q2j5paH5paH5a2X77yM6ZyA6KaB6Lez6L2s5Y6f55Sf6KGM5oOF55qE5qCH562+5bGe5oCn6L2s5o2iXHJcbiAgICAgICAgICAgICQoXCIua2V5dGlwW2RhdGEtY29kZV0sLmVtX3N0b2NrX2tleV9jb21tb25bZGF0YS1jb2RlXVwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXNDb2RlID0gX3RoaXMuZGF0YShcImNvZGVcIikuc3BsaXQoJywnKTtcclxuICAgICAgICAgICAgICAgIGlmIChfdGhpc0NvZGUubGVuZ3RoID09IDIpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaGFzQ2xhc3MoXCJrZXl0aXBcIikpIHsvL+WmguaenOacieagt+W8j2tleXRpcO+8jOWOu+aOieagt+W8j2tleXRpcFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcImtleXRpcFwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKF90aGlzLmhhc0NsYXNzKFwiZW1fc3RvY2tfa2V5X2NvbW1vblwiKSkgey8v5aaC5p6c5pyJ5qC35byPZW1fc3RvY2tfa2V5X2NvbW1vbu+8jOWOu+aOieagt+W8j2VtX3N0b2NrX2tleV9jb21tb25cclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJlbV9zdG9ja19rZXlfY29tbW9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXMuaGFzQ2xhc3MoXCJwYy1vcGVuYnJvd3NlclwiKSkgey8v5aaC5p6c5pyJ5rWP6KeI5Zmo5omT5byA5qCH6K+GcGMtb3BlbmJyb3dzZXLvvIzljrvmjonmtY/op4jlmajmiZPlvIDmoIfor4ZwYy1vcGVuYnJvd3NlclxyXG4gICAgICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVDbGFzcyhcInBjLW9wZW5icm93c2VyXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5hdHRyKFwiZGF0YS1tYXJrZXRcIiwgX3RoaXNDb2RlWzBdKTsvL+aWsOWinuW4guWcuuWxnuaAp1xyXG4gICAgICAgICAgICAgICAgICAgIF90aGlzLmF0dHIoXCJkYXRhLWNvZGVcIiwgX3RoaXNDb2RlWzFdKTsvL+aWsOWinuS7o+eggeWxnuaApyjkvJropobnm5bmjonogIHnmoTlsZ7mgKcpXHJcbiAgICAgICAgICAgICAgICAgICAgX3RoaXMuYXR0cihcImhyZWZcIiwgXCJqYXZhc2NyaXB0OjtcIik7Ly/ljrvmjonpk77mjqVcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVBdHRyKFwiZGF0YS1wY2xpbmtcIik7Ly/ljrvmjonmtY/op4jlmajmiZPlvIDmoIfor4bnmoTpk77mjqVcclxuICAgICAgICAgICAgICAgICAgICBfdGhpcy5yZW1vdmVBdHRyKFwidGFyZ2V0XCIpOy8v5Y675o6J5qCH562+5omT5byA5pa55byPXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCFfdGhpcy5oYXNDbGFzcyhcInBjLXF1b3RlbGlua1wiKSkgey8v5aaC5p6c5rKh5pyJ5Y6f55Sf6KGM5oOF5omT5byA5qCH6K6w77yM5Yqg5LiK5Y6f55Sf6KGM5oOF5omT5byA5qCH6K6wXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmFkZENsYXNzKFwicGMtcXVvdGVsaW5rXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIV90aGlzLmhhc0NsYXNzKFwicGMtenhsaW5rXCIpKSB7Ly/lpoLmnpzmsqHmnInljp/nlJ/ooYzmg4XmiZPlvIDmoIforrDvvIzliqDkuIrljp/nlJ/ooYzmg4XmiZPlvIDmoIforrBcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuYWRkQ2xhc3MoXCJwYy16eGxpbmtcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgJChcImFcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX19fYSA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgICAgICB2YXIgX19faHJlZiA9IF9fX2EuYXR0cihcImhyZWZcIik7XHJcbiAgICAgICAgICAgICAgICBpZiAoX19faHJlZiAhPSB1bmRlZmluZWQgJiYgKF9fX2hyZWYuaW5kZXhPZihcImh0dHA6Ly9cIikgPT0gMCB8fCBfX19ocmVmLmluZGV4T2YoXCJodHRwczovL1wiKSA9PSAwIHx8IF9fX2hyZWYuaW5kZXhPZihcIi8vXCIpID09IDApKSB7Ly/mmK9odHRwOi8v5oiWaHR0cHM6Ly/lvIDlpLTnmoRcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIGlmIChfX19ocmVmLmluZGV4T2YoXCIvL1wiKSA9PSAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF9fX2hyZWYgPSBcImh0dHBzOlwiICsgX19faHJlZjtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBpZiAoX19faHJlZi5pbmRleE9mKGxvY2F0aW9uLmhvc3QpID09IC0xKSB7Ly/kuI3mmK/lvZPliY1ob3N05byA5aS055qEXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5ocmVmLHRoaXMuaW5uZXJIVE1MKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyh0aGlzLnBhdGhuYW1lLHRoaXMucGF0aG5hbWUuaW5kZXhPZihcIi9hL1wiKSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICh0aGlzLnBhdGhuYW1lLmluZGV4T2YoXCIvYS9cIikgPT0gMCAmJiB0aGlzLnBhdGhuYW1lLmluZGV4T2YoXCIuaHRtbFwiKSA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX2EuYXR0cihcImhyZWZcIiwgXCJodHRwczovL1wiICsgbG9jYXRpb24uaG9zdCArIHRoaXMucGF0aG5hbWUucmVwbGFjZShcIi9hL1wiLCBcIi9wY2FydGljbGUvXCIpICsgbG9jYXRpb24uc2VhcmNoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fX2EuYXR0cihcInRhcmdldFwiLCBcIl9zZWxmXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgaWYgKHRoaXMucGF0aG5hbWUuaW5kZXhPZihcIi9uZXdzL1wiKSA9PSAwICYmIHRoaXMucGF0aG5hbWUuaW5kZXhPZihcIi5odG1sXCIpID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fYS5hdHRyKFwiaHJlZlwiLCBcImh0dHBzOi8vXCIgKyBsb2NhdGlvbi5ob3N0ICsgXCIvcGNhcnRpY2xlL1wiICsgdGhpcy5wYXRobmFtZS5zdWJzdHJpbmcodGhpcy5wYXRobmFtZS5pbmRleE9mKCcsJykgKyAxKSArIGxvY2F0aW9uLnNlYXJjaCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX19hLmF0dHIoXCJ0YXJnZXRcIiwgXCJfc2VsZlwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmICh0aGlzLnBhdGhuYW1lLmluZGV4T2YoXCIvcGNhcnRpY2xlL1wiKSA9PSAwKSB7Ly/lt7Lnu4/lpITnkIbov4fkuobvvIzkuI3lho3mrKHlgZrlpITnkIZcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fYS5hdHRyKFwidGFyZ2V0XCIsIFwiX3NlbGZcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX19fYS5oYXNDbGFzcyhcInBjLXF1b3RlbGlua1wiKSB8fCBfX19hLmhhc0NsYXNzKFwicGMtb3BlbmJyb3dzZXJcIikpIHsvL+WmguaenOaYr+ihjOaDhemTvuaOpei/memHjOW/veeVpe+8jOS8muaJp+ihjOWJjemdoueahOWOn+eUn+ihjOaDhVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugey8v6Z2e6KGM5oOF55qE6LCD57O757uf5rWP6KeI5ZmoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19fYS5hdHRyKFwiaHJlZlwiLCBcImphdmFzY3JpcHQ6O1wiKS5hdHRyKFwiZGF0YS1wY2xpbmtcIiwgX19faHJlZikuYWRkQ2xhc3MoXCJwYy1vcGVuYnJvd3NlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vaWYoISQoXCIuRW1JbWFnZVJlbWFya1wiKS5lcSgwKS5oYXNDbGFzcyhcInBjLXF1b3RlbGlua1wiKSl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvLyAgICBfX19hLmF0dHIoXCJocmVmXCIsXCJqYXZhc2NyaXB0OjtcIikuYXR0cihcImRhdGEtcGNsaW5rXCIsX19faHJlZikuYWRkQ2xhc3MoXCJwYy1vcGVuYnJvd3NlclwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdHJ5IHtcclxuICAgICAgICAgICAgaW5pdEEoKTtcclxuICAgICAgICAgICAgc2V0SW50ZXJ2YWwoaW5pdEEsIDIwMDApO1xyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIC8v6LWE6K6v5q2j5paH5pSv5oyB54K55Ye75p+l55yL5Y6f5Zu+XHJcbiAgICAgICAgICAgICQoXCIjQ29udGVudEJvZHkgaW1nXCIpLndyYXAoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgaWYgKHRoaXMuaGFzQXR0cmlidXRlKFwib3JnaW5pYWxfc3JjXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuICc8YSBocmVmPVwiJyArIHRoaXMuZ2V0QXR0cmlidXRlKFwib3JnaW5pYWxfc3JjXCIpICsgJ1wiIHRhcmdldD1cIl9zZWxmXCI+PC9hPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gJyc7XHJcbiAgICAgICAgICAgIH0pO1xyXG4gICAgXHJcbiAgICAgICAgICAgIC8v5q2j5paH6aG15aKe5Yqg5py65Lya5paH56ug5qih5Z2X5Yqf6IO9XHJcbiAgICAgICAgICAgIHZhciBfb3BfaWRzID0gW107XHJcbiAgICAgICAgICAgICQoXCIjQ29udGVudEJvZHkgLmVtX29wX25ld3NcIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgdmFyIF9vcF9pZCA9IF90aGlzLmF0dHIoXCJvcF9pZFwiKTtcclxuICAgICAgICAgICAgICAgIF9vcF9pZHMucHVzaChfb3BfaWQpO1xyXG4gICAgICAgICAgICAgICAgX3RoaXMuYWRkQ2xhc3MoXCJlbV9vcF9uZXdzXCIgKyBfb3BfaWQpO1xyXG4gICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgZnVuY3Rpb24gX2luaXRPUEhUTUwoanNvbikge1xyXG4gICAgICAgICAgICAgICAgdmFyIF9vcEhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmIChqc29uLmxpbmtzLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8ZGl2IGNsYXNzPVwib3BfaXRlbVwiPic7XHJcbiAgICAgICAgICAgICAgICAgICAgX29wSFRNTCArPSAnPGRpdiBjbGFzcz1cIm9wX3RpdGxlXCIgc3R5bGU9XCJjb2xvcjonICsganNvbi50aXRsZV9jb2xvciArICdcIj4nICsganNvbi50aXRsZSArICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIF9vcEhUTUwgKz0gJzx1bD4nO1xyXG4gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwganNvbi5saW5rcy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8bGk+PGEgaHJlZj1cIicgKyBqc29uLmxpbmtzW2ldLnVybCArICdcIj4nICsganNvbi5saW5rc1tpXS50ZXh0ICsgJzwvYT48L2xpPic7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIF9vcEhUTUwgKz0gJzwvdWw+JztcclxuICAgICAgICAgICAgICAgICAgICBfb3BIVE1MICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBfb3BIVE1MO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIF9vcEhUTUw7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKF9vcF9pZHMubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgICAgICAgICAvL3VybDogXCIvL25ld3NpbmZvLnRlc3QuZW1hcGQuY29tL1xyXG4gICAgICAgICAgICAgICAgICAgIHVybDogXCIvL25ld3NpbmZvLmVhc3Rtb25leS5jb20va3VhaXh1bi92Mi9hcGkvY29udGVudC9vcF9tb2R1bGVzP29wX2lkcz1cIiArIF9vcF9pZHMudG9TdHJpbmcoKSArIFwiJmNhbGxiYWNrPT9cIixcclxuICAgICAgICAgICAgICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgICAgICAgICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgICAgICAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBqc29uLlJlc3VsdC5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9vcF9pZCA9IGpzb24uUmVzdWx0W2ldLm9wX2lkO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzID0gJChcIiNDb250ZW50Qm9keSAuZW1fb3BfbmV3c1wiICsgX29wX2lkKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfb3BIVE1MID0gX2luaXRPUEhUTUwoanNvbi5SZXN1bHRbaV0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKF9vcEhUTUwubGVuZ3RoID4gMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLmh0bWwoX29wSFRNTCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgfSlcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGVycm9yKSB7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgdGhpcy5nZXROZXdzQXJ0aWNsZUJyaWVmSW5mbygpO1xyXG4gICAgICAgIGlmIChfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgIHNldEludGVydmFsKGxvYWRDb29raWVzLCA1MDAwKTsvL+WmguaenOayoeacieeZu+W9le+8jOavjzXnp5LlsJ3or5Xku45jb29raWXkuK3lj5bkuIDmrKHotYvlgLzvvIzlhbzlrrnmsqHlhbPpl63nmoTmsqHnmbvlvZXnmoTmraPmloflkI7mnaXnmbvlvZXnmoTmg4XlhrVcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8v5Yid5aeL5YyW5a2X5L2T5aSn5bCPXHJcbiAgICAgICAgdGhpcy5sb2FkRm9udFNpemUoKTtcclxuXHJcbiAgICAgICAgLy9kb20g57uR5a6a5LqL5Lu2XHJcbiAgICAgICAgdGhpcy5iaW5kRXZlbnQoKTtcclxuXHJcbiAgICAgICAgLy/lm7rpobZcclxuICAgICAgICB0aGlzLmd1ZGluZ0Z1bigpO1xyXG5cclxuICAgICAgICAvL+WIneWni+WMluihjOaDheiCoeelqOmTvuaOpeWPiuiHqumAieiCoVxyXG4gICAgICAgIHRoaXMuaW5pdFF1b3RlTGluaygpO1xyXG5cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOiOt+WPlueCuei1niDmlLbol48g5YiG5LqrIOivhOiuuuaVsCAg5Y+K55u45YWz54q25oCBXHJcbiAgICAgICogcG9zdF9saWtlX2NvdW50IOeCuei1nuaVsCAgXHJcbiAgICAgICogbGlrZV9zdGF0ZSDngrnotZ7nirbmgIFcclxuICAgICAgKiBjb2xsZWN0X3N0YXRlIOaUtuiXj+eKtuaAgVxyXG4gICAgICAqIHBvc3RfZm9yd2FyZF9jb3VudCDliIbkuqvmlbBcclxuICAgICAgKiBwb3N0X2NvbW1lbnRfY291bnQg6K+E6K665pWwXHJcbiAgICAgKi9cclxuICAgIGdldE5ld3NBcnRpY2xlQnJpZWZJbmZvOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJC5hamF4KHtcclxuICAgICAgICAgICAgdXJsOiBjb25maWcuZ3ViYSArIFwiYWJzdHJhY3QvYXBpL1Bvc3RTaG9ydC9OZXdzQXJ0aWNsZUJyaWVmSW5mbz9wb3N0aWQ9XCIgKyBfTmV3c0lkICsgXCImdHlwZT0xJnZlcnNpb249ODAwMDgwMDAmcHJvZHVjdD1ndWJhJnBsYXQ9d2ViJmRldmljZWlkPVwiICsgX2RldmljZWlkICsgXCImY3Rva2VuPVwiICsgX2N0b2tlbiArIFwiJnV0b2tlbj1cIiArIF91dG9rZW4sXHJcbiAgICAgICAgICAgIG1ldGhvZDogXCJHRVRcIixcclxuICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAganNvbnBDYWxsYmFjazogXCJjYlwiICsgcGFyc2VJbnQoTWF0aC5yYW5kb20oKSAqIDEwMDAwICsgXCJcIiksXHJcbiAgICAgICAgICAgIHN1Y2Nlc3M6IGZ1bmN0aW9uIChyZXMpIHtcclxuICAgICAgICAgICAgICAgIGlmIChyZXMgJiYgcmVzLnJjID09IDEgJiYgcmVzLnJlICYmIHJlcy5yZS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIGluZm9zID0gcmVzLnJlWzBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHZhciBwb3N0X2xpa2VfY291bnQgPSBpbmZvcy5wb3N0X2xpa2VfY291bnQsXHJcbiAgICAgICAgICAgICAgICAgICAgbGlrZV9zdGF0ZSA9IGluZm9zLmxpa2Vfc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgY29sbGVjdF9zdGF0ZSA9IGluZm9zLmNvbGxlY3Rfc3RhdGUsXHJcbiAgICAgICAgICAgICAgICAgICAgcG9zdF9mb3J3YXJkX2NvdW50ID0gaW5mb3MucG9zdF9mb3J3YXJkX2NvdW50LFxyXG4gICAgICAgICAgICAgICAgICAgIHBvc3RfY29tbWVudF9jb3VudCA9IGluZm9zLnBvc3RfY29tbWVudF9jb3VudDtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6K+E6K665p2D6ZmQKHBvc3RfY29tbWVudF9hdXRob3J5IDPnpoHmraIpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g54K56LWe5p2D6ZmQKGFsbG93X2xpa2VzX3N0YXRlIDHnpoHmraIpXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6L2s5Y+R5p2D6ZmQKHJlcG9zdF9zdGF0ZSAx56aB5q2iKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIOeCuei1nuagt+W8jyhwb3N0X2xpa2Vfc3R5bGUgMeaYr+eBq+iLlyAw5piv5ouH5oyHIOm7mOiupDApXHJcbiAgICAgICAgICAgICAgICAgICAgLy8g6K+E6K665p2D6ZmQ5piv5ZCm5piv57O757uf6K6+572u55qE5qCH6K+GKHN5c3RlbV9jb21tZW50X2F1dGhvcml0eSAx5piv57O757uf6K6+572uKVxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGluZm9zLnBvc3RfY29tbWVudF9hdXRob3J5ID0gMztcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbmZvcy5hbGxvd19saWtlc19zdGF0ZSA9IDE7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gaW5mb3MucmVwb3N0X3N0YXRlID0gMTtcclxuICAgICAgICAgICAgICAgICAgICB2YXIgaXNIdW9aYW4gPSBpbmZvcy5wb3N0X2xpa2Vfc3R5bGUgPT0gMTsvL+aYr+WQpueBq+i1nlxyXG4gICAgICAgICAgICAgICAgICAgIC8vIGlzSHVvWmFuID0gdHJ1ZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaXNIdW9aYW4pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3NoYXJlYm94XCIpLmZpbmQoXCIuYXJ0aWNsZXphblwiKS5yZW1vdmVDbGFzcyhcInphblwiKS5hZGRDbGFzcyhcImh1b3phblwiKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIGlmKGluZm9zLmFsbG93X2xpa2VzX3N0YXRlICE9IDEpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAvL+eCuei1nuaVsOmHj1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoISFwb3N0X2xpa2VfY291bnQpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9saWtlX2NvdW50XCIpLmF0dHIoXCJyZWFsbnVtXCIsIHBvc3RfbGlrZV9jb3VudCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3Bvc3RfbGlrZV9jb3VudFwiKS50ZXh0KGZvcm1hdFphbk51bShwb3N0X2xpa2VfY291bnQsIDIpKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy/lt7LngrnotZ5cclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCEhbGlrZV9zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYoaXNIdW9aYW4pe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2hhcmVib3hcIikuZmluZChcIi5hcnRpY2xlemFuXCIpLnJlbW92ZUNsYXNzKFwiaHVvemFuXCIpLmFkZENsYXNzKFwiaGFzX2h1b3phblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjc2hhcmVib3hcIikuZmluZChcIi5hcnRpY2xlemFuXCIpLnJlbW92ZUNsYXNzKFwiemFuXCIpLmFkZENsYXNzKFwiaGFzX3phblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gJChcIi5hcnRpY2xlemFuLCNwb3N0X2xpa2VfY291bnRcIikuY3NzKHtcInBvaW50ZXItZXZlbnRzXCI6XCJub25lXCJ9KTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5hcnRpY2xlemFuXCIpLnBhcmVudChcIi5jaGlsZFwiKS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIixcIm9wYWNpdHlcIjpcIjAuNVwifSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIC8v5bey57uP5pS26JePXHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCEhY29sbGVjdF9zdGF0ZSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3NoYXJlYm94XCIpLmZpbmQoXCIuYXJ0aWNsZXNjXCIpLnJlbW92ZUNsYXNzKFwic2hvdWNhbmdcIikuYWRkQ2xhc3MoXCJoYXNfc2hvdWNhbmdcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgaWYoaW5mb3MucG9zdF9jb21tZW50X2F1dGhvcnkgIT0gMyl7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8v6K+E6K665pWwXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmICghIXBvc3RfY29tbWVudF9jb3VudCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9udW0gPSBmb3JtYXRaYW5OdW0ocG9zdF9jb21tZW50X2NvdW50LCAyKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9jb21tZW50X2NvdW50XCIpLnRleHQoX251bSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmluZm9zIC5nb3Bpbmx1bnR4dCAuaXRlbVwiKS5odG1sKCc8aSBjbGFzcz1cImljb25jb21tZW50XCI+PC9pPjxzcGFuIGNsYXNzPVwib3JhbmdlXCI+JyArIGluZm9zLnBvc3RfY29tbWVudF9jb3VudCArICc8L3NwYW4+5Lq66K+E6K66Jyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgJChcIiNwb3N0X2NvbW1lbnRfY291bnRcIikudGV4dCgnJyk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmluZm9zIC5nb3Bpbmx1bnR4dCAuaXRlbVwiKS5odG1sKCcnKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL+ivhOiuuuWMuuWfn1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgenh6d09iai5pbml0UGluTHVuKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjcG9zdF9jb21tZW50X2NvdW50XCIpLnRleHQoJycpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmluZm9zIC5nb3Bpbmx1bnR4dCAuaXRlbVwiKS5odG1sKCcnKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuZ29waW5sdW50eHRcIikuYXR0cihcImhyZWZcIixcImphdmFzY3JpcHQ6O1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gJChcIi5nb3Bpbmx1bnR4dCwuZ29waW5sdW50eHQgc3BhblwiKS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIn0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLmdvcGlubHVudHh0XCIpLnBhcmVudChcIi5jaGlsZFwiKS5jc3Moe1wicG9pbnRlci1ldmVudHNcIjpcIm5vbmVcIixcIm9wYWNpdHlcIjpcIjAuNVwifSk7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgfSxcclxuICAgIC8v5Yid5aeL5YyW6KGM5oOF6IKh56Wo6ZO+5o6l5Y+K6Ieq6YCJ6IKhXHJcbiAgICBpbml0UXVvdGVMaW5rOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgLy/mraPmlofpobXlop7liqDnvZHpobXkuKrogqHpk77mjqXlip/og70o6Z2e56ys5LiA5qyh5Ye6546w55qE5pe25YCZ6L2s5o2i5oiQYemTvuaOpSlcclxuICAgICAgICAkKFwiLmVtX3N0b2NrX2tleV9jb21tb25cIikuZWFjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIHZhciBfdGhpcyA9ICQodGhpcyk7XHJcbiAgICAgICAgICAgIGlmIChfdGhpcy5hdHRyKFwid2ViXCIpID09IFwiMVwiKSB7Ly93ZWI9MeeahOaXtuWAmXNwYW7moIfnrb7lj5jmiJBh5qCH562+XHJcbiAgICAgICAgICAgICAgICBfdGhpcy5hZnRlcihfdGhpcy5wcm9wKFwib3V0ZXJIVE1MXCIpLnJlcGxhY2UoXCI8c3BhblwiLCBcIjxhXCIpLnJlcGxhY2UoXCI8L3NwYW4+XCIsIFwiPC9hPlwiKSkucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgdmFyIGlzSXBhZCA9IG5hdmlnYXRvci51c2VyQWdlbnQudG9Mb3dlckNhc2UoKS5tYXRjaCgvKGlwYWQpLipvc1xccyhbXFxkX10rKS8pO1xyXG4gICAgICAgIGlmICghaXNJcGFkKSB7Ly/pnZ5pcGFkXHJcbiAgICAgICAgICAgIC8vdmFyIHBkdGlwcyA9IG5ldyB3aW5kb3cucGR0aXBzKHtcclxuICAgICAgICAgICAgLy8gICAgaWQ6ICcjQ29udGVudEJvZHknXHJcbiAgICAgICAgICAgIC8vfSk7XHJcblxyXG4gICAgICAgICAgICB2YXIgX3RpcFpJbmRleCA9IDEwMDtcclxuXHJcbiAgICAgICAgICAgICQoXCIudHh0aW5mb3MgPiBwLC50eHRpbmZvcyA+IGgzLC50eHRpbmZvcyA+IGg0LC50eHRpbmZvcyA+IHRhYmxlXCIpLm9uKFwibW91c2VsZWF2ZVwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJCh0aGlzKS5maW5kKFwiLnF1b3RlYm94XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLmZpbmQoXCIucXVvdGVib3hcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIH0pO1xyXG5cclxuICAgICAgICAgICAgJChcIi50eHRpbmZvcyA+IHAsLnR4dGluZm9zID4gaDMsLnR4dGluZm9zID4gaDQsLnR4dGluZm9zID4gdGFibGVcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoJChcIi5xdW90ZWJveFwiKS5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi5xdW90ZWJveFwiKS5yZW1vdmUoKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAvL+ato+aWh+aWh+Wtl++8jOmcgOimgei3s+i9rOWOn+eUn+ihjOaDheeahOagh+etvuWxnuaAp+i9rOaNolxyXG4gICAgICAgICAgICAkKFwiLnBjLXp4bGlua1wiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgX3RoaXMgPSAkKHRoaXMpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBfaXNNb3VzZU92ZXIgPSBmYWxzZTsvL+W9k+WJjeenu+WFpeWFg+e0oOWPiueKtuaAgVxyXG5cclxuICAgICAgICAgICAgICAgIF90aGlzLm9uKFwibW91c2VvdXRcIiwgZnVuY3Rpb24gKGUpIHsvL+inpuWPkemakOiXj+ihjOaDhVvniLblhYPntKDnp7vlh7pdXHJcbiAgICAgICAgICAgICAgICAgICAgX2lzTW91c2VPdmVyID0gZmFsc2U7XHJcbiAgICAgICAgICAgICAgICAgICAgLy9zZXRUaW1lb3V0KGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICBpZiAoIV9pc01vdXNlT3Zlcikgey8v54i25YWD57Sg56e75Ye6MC4156eS6ZKf5ZCO54Sm54K55LiN5Zyo77yM5bCx56e76ZmkXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIGlmIChfdGhpcy5maW5kKFwiLnF1b3RlYm94XCIpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAvLyAgICAgICAgICAgIF90aGlzLmZpbmQoXCIucXVvdGVib3hcIikucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgLy8gICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgLy99LCA1MDApO1xyXG4gICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgX3RoaXMub24oXCJtb3VzZW92ZXJcIiwgZnVuY3Rpb24gKGUpIHsvL+inpuWPkeaYvuekuuihjOaDhVvniLblhYPntKDnp7vlhaVdXHJcbiAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzaXRlbSA9ICQodGhpcyk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIC8v56e75YWl55qE5pe25YCZ77yM5YWI5Yig6Zmk5YW25LuW6IKh56Wo55qE5rWu5bGCXHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi5xdW90ZWJveFwiKS5lYWNoKGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCQodGhpcykuZGF0YShcIm1jXCIpICE9IF90aGlzaXRlbS5hdHRyKFwiZGF0YS1tYXJrZXRcIikgKyBcIi5cIiArIF90aGlzaXRlbS5hdHRyKFwiZGF0YS1jb2RlXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKHRoaXMpLnJlbW92ZSgpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIF9pc01vdXNlT3ZlciA9IHRydWU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoX2lzTW91c2VPdmVyKSB7Ly/np7vlhaUwLjPnp5LlkI7nhKbngrnov5jlnKhcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHdpbkhlaWdodCA9ICQod2luZG93KS5oZWlnaHQoKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHdpbldpZHRoID0gJCh3aW5kb3cpLndpZHRoKCkgPCAxMDAwID8gMTAwMCA6ICQod2luZG93KS53aWR0aCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIF90aGlzV2lkdGggPSBfdGhpc2l0ZW0ud2lkdGgoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIF90aGlzSGVpZ2h0ID0gX3RoaXNpdGVtLmhlaWdodCgpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIGUgPSBlIHx8IHdpbmRvdy5ldmVudDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHNoID0gd2luZG93LnBhZ2VZT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxUb3AgfHwgZG9jdW1lbnQuYm9keS5zY3JvbGxUb3AgfHwgMDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHhoID0gd2luZG93LnBhZ2VYT2Zmc2V0IHx8IGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5zY3JvbGxMZWZ0IHx8IGRvY3VtZW50LmJvZHkuc2Nyb2xsTGVmdCB8fCAwO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRvcE5hdiA9IDA7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAvL2lmICgkKCcjZml4TWVudUJhcicpLmxlbmd0aCA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgIHRvcE5hdiA9IDMzO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy99XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy92YXIgbGVmdCA9IChlLmNsaWVudFggKyBfdGhpc1dpZHRoID4gd2luV2lkdGgpID8gJCh3aW5kb3cpLndpZHRoKCkgLSBfdGhpc1dpZHRoICsgeGggOiBlLmNsaWVudFggKyB4aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vLy9sZWZ0ID0gKGUuY2xpZW50WCAtIF90aGlzV2lkdGggPCAwKSA/IGUuY2xpZW50WCArIHhoIDogZS5jbGllbnRYIC0gX3RoaXNXaWR0aCArIHhoICsgMjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vdmFyIHRvcCA9IChlLmNsaWVudFkgLSBfdGhpc0hlaWdodCAtIHRvcE5hdiA8IDApID8gZS5jbGllbnRZICsgc2ggKyAxMCA6IGUuY2xpZW50WSArIHNoIC0gMzU7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhcImxlZnQtdG9wOlwiLCBcImxlZnQ6XCIgKyBsZWZ0ICsgXCJ0b3A6XCIgKyB0b3ApO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaWQgPSAncXVvdGUnICsgKG5ldyBEYXRlKCkpLmdldFRpbWUoKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoX3RoaXNpdGVtLmZpbmQoXCIucXVvdGVib3hcIikubGVuZ3RoIDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgcXVvdGVib3hIdG1sID0gJzxkaXYgaWQ9XCInICsgX2lkICsgJ1wiIGNsYXNzPVwicXVvdGVib3hcIiBkYXRhLW1jPVwiJyArIF90aGlzaXRlbS5hdHRyKFwiZGF0YS1tYXJrZXRcIikgKyBcIi5cIiArIF90aGlzaXRlbS5hdHRyKFwiZGF0YS1jb2RlXCIpICsgJ1wiIHN0eWxlPVwiei1pbmRleDonICsgKF90aXBaSW5kZXgrKykgKyAnXCI+PC9kaXY+JztcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfdGhpc2l0ZW0uYXBwZW5kKHF1b3RlYm94SHRtbCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzaXRlbS5vbihcIm1vdXNlb3ZlclwiLCBcIi5xdW90ZWJveFwiLCBmdW5jdGlvbiAoKSB7Ly/np7vlhaXlrZDmta7lsYJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2lzTW91c2VPdmVyID0gdHJ1ZTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXNpdGVtLm9uKFwibW91c2VvdXRcIiwgXCIucXVvdGVib3hcIiwgZnVuY3Rpb24gKCkgey8v6Kem5Y+R6ZqQ6JeP6KGM5oOFW+a1ruWxguenu+WHul1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF90aGlzaXRlbTIgPSAkKHRoaXMpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfaXNNb3VzZU92ZXIgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFfaXNNb3VzZU92ZXIpIHsvLzAuNeenkuWQjueEpueCueS4jeWcqFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzaXRlbTIucmVtb3ZlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0sIDUwMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBfaW50ZXJmYWNlID0gY29uZmlnLnB1c2ggKyBcImFwaS9xdC91bGlzdC5ucC9nZXQ/dXQ9MTM2OTdhMWNjNjc3YzhiZmE5YTQ5NjQzN2JmZWY0MTkmZmllbGRzPWYxLGYyLGYzLGY0LGYxMixmMTMsZjE0JnNlY2lkcz1cIiArIF90aGlzaXRlbS5hdHRyKFwiZGF0YS1tYXJrZXRcIikgKyBcIi5cIiArIF90aGlzaXRlbS5hdHRyKFwiZGF0YS1jb2RlXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQuYWpheCh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVybDogX2ludGVyZmFjZSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdHlwZTogXCJnZXRcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGF0YVR5cGU6IFwianNvbnBcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAganNvbnA6IFwiY2JcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3VjY2VzczogZnVuY3Rpb24gKGpzb24pIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBpdGVtID0ganNvbi5kYXRhLmRpZmZbMF07XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YVF1b3RlID0ge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHByaWNlOiAoaXRlbS5mMiA9PT0gXCJcIiB8fCBpdGVtLmYyID09PSBcIi1cIikgPyBcIi1cIiA6IHBhcnNlRmxvYXQoaXRlbS5mMiAvIE1hdGgucG93KDEwLCBpdGVtLmYxKSkudG9GaXhlZChpdGVtLmYxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB6ZGY6IGl0ZW0uZjMgLyAxMDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgemRlOiAoaXRlbS5mNCA9PT0gXCJcIiB8fCBpdGVtLmY0ID09PSBcIi1cIikgPyBcIi1cIiA6IHBhcnNlRmxvYXQoaXRlbS5mNCAvIE1hdGgucG93KDEwLCBpdGVtLmYxKSkudG9GaXhlZChpdGVtLmYxKSxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBuYW1lOiBpdGVtLmYxNCxcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYzogaXRlbS5mMTMgKyBcIi5cIiArIGl0ZW0uZjEyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1hcmtldDogaXRlbS5mMTMsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29kZTogaXRlbS5mMTJcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH07XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9jb2xvciA9IFwiXCI7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoZGF0YVF1b3RlLnpkZiA+IDApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfY29sb3IgPSBcInJlZFwiO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIGlmIChkYXRhUXVvdGUuemRmIDwgMCkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9jb2xvciA9IFwiZ3JlZW5cIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX2NvbG9yID0gXCJcIjtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkYXRhUXVvdGUuemRmID0gKChkYXRhUXVvdGUuemRmID09PSBcIlwiIHx8IGRhdGFRdW90ZS56ZGYgPT0gXCItXCIpID8gXCItXCIgOiBwYXJzZUZsb2F0KGRhdGFRdW90ZS56ZGYpLnRvRml4ZWQoMikgKyBcIiVcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy8kKFwiI1wiICsgX2lkKS5odG1sKGRhdGFRdW90ZS5uYW1lICsgXCLvvJpcIiArIGRhdGFRdW90ZS5jb2RlICsgXCIgPHNwYW4gY2xhc3M9J3ppeHVhbnByaWNlIFwiICsgX2NvbG9yICsgXCInPlwiICsgZGF0YVF1b3RlLnByaWNlICsgXCI8L3NwYW4+IDxzcGFuIGNsYXNzPSd6aXh1YW56ZGYgXCIgKyBfY29sb3IgKyBcIic+XCIgKyBkYXRhUXVvdGUuemRmICsgXCI8L3NwYW4+IDxzcGFuIGNsYXNzPSd6aXh1YW4nPjwvc3Bhbj5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLy9pbml0WlhJbmZvKCQoXCIjXCIgKyBfaWQgKyBcIiAueml4dWFuXCIpLCBkYXRhUXVvdGUubWMpO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIjXCIgKyBfaWQpLmh0bWwoZGF0YVF1b3RlLm5hbWUgKyBcIu+8mlwiICsgZGF0YVF1b3RlLmNvZGUgKyBcIiA8c3BhbiBjbGFzcz0neml4dWFucHJpY2UgXCIgKyBfY29sb3IgKyBcIic+XCIgKyBkYXRhUXVvdGUucHJpY2UgKyBcIjwvc3Bhbj4gPHNwYW4gY2xhc3M9J3ppeHVhbnpkZiBcIiArIF9jb2xvciArIFwiJz5cIiArIGRhdGFRdW90ZS56ZGYgKyBcIjwvc3Bhbj5cIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIF9kb20gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChfaWQpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGR3ID0gX2RvbS5jbGllbnRXaWR0aDtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhciBkbCA9IF9kb20ub2Zmc2V0UGFyZW50Lm9mZnNldExlZnQ7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGR3ICsgZGwgPiA2NzApIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiI1wiICsgX2lkKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxlZnRcIjogKDY3MCAtIHBhcnNlSW50KGR3ICsgZGwpKSArIFwicHhcIlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxyXG5cclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9LCAzMDApO1xyXG5cclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfSxcclxuICAgIC8v5Yid5aeL5YyW5a2X5L2T5aSn5bCPXHJcbiAgICBsb2FkRm9udFNpemU6IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgc2l6ZSA9IGNvb2tpZS5nZXQoXCJFTV9OZXdzQ29udGVudF9Gb250U2l6ZVwiKTtcclxuICAgICAgICBpZiAoc2l6ZSAhPSBudWxsICYmIHNpemUgIT0gXCJcIiAmJiBzaXplICE9IHVuZGVmaW5lZCkge1xyXG4gICAgICAgICAgICBzd2l0Y2ggKHNpemUpIHtcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxMlwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnbWlkIGJnYmlnXCIpLmFkZENsYXNzKFwiYmdzbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxNFwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxMnB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIyOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxNVwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdiaWdcIikuYWRkQ2xhc3MoXCJiZ21pZFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxNlwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxNXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIzMXB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGNhc2UgXCIxOFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybFwiKS5yZW1vdmVDbGFzcyhcImJnc21hbGwgYmdtaWRcIikuYWRkQ2xhc3MoXCJiZ2JpZ1wiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmZzY3RybGJveCAuZnMxOFwiKS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiLmFic3RyYWN0IC50eHRcIikuY3NzKHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIzNHB4XCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi50eHRpbmZvc1wiKS5yZW1vdmVDbGFzcyhcImZvbnRzaXplLWJpZ1wiKS5yZW1vdmVDbGFzcyhcImZvbnRzaXplLXNtYWxsXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuZnNjdHJsXCIpLnJlbW92ZUNsYXNzKFwiYmdzbWFsbCBiZ2JpZ1wiKS5hZGRDbGFzcyhcImJnbWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuZnNjdHJsYm94IC5mczE2XCIpLmFkZENsYXNzKFwib25cIikuc2libGluZ3MoKS5yZW1vdmVDbGFzcyhcIm9uXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIuYWJzdHJhY3QgLnR4dFwiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBcImZvbnQtc2l6ZVwiOiBcIjE1cHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgXCJsaW5lLWhlaWdodFwiOiBcIjMxcHhcIlxyXG4gICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICB9XHJcblxyXG4gICAgICAgIH1cclxuICAgIH0sXHJcbiAgICAvKipcclxuICAgICAqIOS6i+S7tue7keWumiBcclxuICAgICAqL1xyXG4gICAgYmluZEV2ZW50OiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgdmFyIHRoYXQgPSB0aGlzO1xyXG4gICAgICAgIC8vIOWtl+S9k+aOp+WItlxyXG4gICAgICAgICQoXCIjZnNjdHJsXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKGUpIHtcclxuICAgICAgICAgICAgZS5zdG9wUHJvcGFnYXRpb24oKTtcclxuICAgICAgICAgICAgdmFyIF90aGlzID0gJCh0aGlzKTtcclxuICAgICAgICAgICAgaWYgKCQoZS50YXJnZXQpLnByb3AoXCJ0YWdOYW1lXCIpID09IFwiU1BBTlwiKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgZnN0eXBlID0gJChlLnRhcmdldCkuZGF0YShcInR5cGVcIik7XHJcbiAgICAgICAgICAgICAgICBzd2l0Y2ggKGZzdHlwZSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJzXCI6XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIudHh0aW5mb3NcIikucmVtb3ZlQ2xhc3MoXCJmb250c2l6ZS1iaWdcIikuYWRkQ2xhc3MoXCJmb250c2l6ZS1zbWFsbFwiKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgX3RoaXMucmVtb3ZlQ2xhc3MoXCJiZ21pZCBiZ2JpZ1wiKS5hZGRDbGFzcyhcImJnc21hbGxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvb2tpZS5zZXQoXCJFTV9OZXdzQ29udGVudF9Gb250U2l6ZVwiLCBcIjEyXCIsIDMwKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgJChcIi5hYnN0cmFjdCAudHh0XCIpLmNzcyh7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImZvbnQtc2l6ZVwiOiBcIjEycHhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwibGluZS1oZWlnaHRcIjogXCIyOHB4XCJcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrO1xyXG4gICAgICAgICAgICAgICAgICAgIGNhc2UgXCJtXCI6XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLnR4dGluZm9zXCIpLnJlbW92ZUNsYXNzKFwiZm9udHNpemUtYmlnXCIpLnJlbW92ZUNsYXNzKFwiZm9udHNpemUtc21hbGxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiYmdzbWFsbCBiZ2JpZ1wiKS5hZGRDbGFzcyhcImJnbWlkXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0KFwiRU1fTmV3c0NvbnRlbnRfRm9udFNpemVcIiwgXCIxNVwiLCAzMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuYWJzdHJhY3QgLnR4dFwiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxNXB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0XCI6IFwiMzFweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgICAgICBjYXNlIFwibFwiOlxyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiLnR4dGluZm9zXCIpLmFkZENsYXNzKFwiZm9udHNpemUtYmlnXCIpLnJlbW92ZUNsYXNzKFwiZm9udHNpemUtc21hbGxcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIF90aGlzLnJlbW92ZUNsYXNzKFwiYmdzbWFsbCBiZ21pZFwiKS5hZGRDbGFzcyhcImJnYmlnXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBjb29raWUuc2V0KFwiRU1fTmV3c0NvbnRlbnRfRm9udFNpemVcIiwgXCIxOFwiLCAzMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuYWJzdHJhY3QgLnR4dFwiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJmb250LXNpemVcIjogXCIxOHB4XCIsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcImxpbmUtaGVpZ2h0XCI6IFwiMzRweFwiXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcclxuICAgICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgICAkKGUudGFyZ2V0KS5hZGRDbGFzcyhcIm9uXCIpLnNpYmxpbmdzKCkucmVtb3ZlQ2xhc3MoXCJvblwiKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgICQoXCIuZnNjdHJsYm94XCIpLnRvZ2dsZSgpO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL+WJjeW+gOivhOiuuuWMulxyXG4gICAgICAgICQoXCIuZ29waW5sdW50eHRcIikub24oXCJjbGlja1wiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgIGlmICgkKFwiI3RvcGJveFwiKS5oYXNDbGFzcyhcInRvcGJveGZpeFwiKSkge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoXCIjZ3ViYUNvbW1lbnRcIikub2Zmc2V0KCkudG9wIC0gJChcIiN0b3Bib3hcIikuaGVpZ2h0KCkpO1xyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsICQoXCIjZ3ViYUNvbW1lbnRcIikub2Zmc2V0KCkudG9wIC0gJChcIiN0b3Bib3hcIikuaGVpZ2h0KCkgKiAyKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOeCuei1nlxyXG4gICAgICAgICQoXCIjc2hhcmVib3hcIikub24oXCJjbGlja1wiLCBcIi5hcnRpY2xlemFuXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGxvYWRDb29raWVzKCk7XHJcbiAgICAgICAgICAgIGlmIChfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsIHx8IF9HdWJhQXBpSCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZXh0ZXJuYWwuT25DbGlja0V2ZW50KFwicmV0dXJuKGZhbHNlICYmIFtdLnB1c2goJyN0eXBlPUNGJykpO1wiKTsvL1BD5Y6f55Sf55m75b2VXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB6YW5PYmouemFuRnVuKGUsICQodGhpcyksIFwiMVwiLCBfTmV3c0lkKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8v5pS26JePXHJcbiAgICAgICAgJChcIiNzaGFyZWJveFwiKS5vbihcImNsaWNrXCIsIFwiLmFydGljbGVzY1wiLCBmdW5jdGlvbiAoZSkge1xyXG4gICAgICAgICAgICAvLyB2YXIgX3RoaXMgPSAkKHRoaXMpLCBoYXNjb2xsZWN0ID0gZmFsc2U7XHJcbiAgICAgICAgICAgIGxvYWRDb29raWVzKCk7XHJcbiAgICAgICAgICAgIGlmIChfY3Rva2VuID09IG51bGwgfHwgX3V0b2tlbiA9PSBudWxsIHx8IF9HdWJhQXBpSCA9PSBudWxsKSB7XHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZXh0ZXJuYWwuT25DbGlja0V2ZW50KFwicmV0dXJuKGZhbHNlICYmIFtdLnB1c2goJyN0eXBlPUNGJykpO1wiKTsvL1BD5Y6f55Sf55m75b2VXHJcbiAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBjb2xsZWN0T2JqLmNvbGxlY3RGdW4oZSwgJCh0aGlzKSwgXCIxXCIsIF9OZXdzSWQpO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgLy8g5YiG5LqrXHJcbiAgICAgICAgJChcIiNlbXNoYXJld3JhcFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAkKFwiLnFyaW1nYm94XCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgaWYgKCQoZS50YXJnZXQpLmhhc0NsYXNzKFwic2hhcmVzXCIpKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnNoYXJld3JhcFwiKS50b2dnbGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL+S6jOe7tOeggVxyXG4gICAgICAgICQoXCIjcXJjb2RlXCIpLm9uKFwiY2xpY2tcIiwgXCIucXJpY29uXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcblxyXG4gICAgICAgICAgICAkKFwiLnNoYXJld3JhcFwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIGlmICgkKGUudGFyZ2V0KS5oYXNDbGFzcyhcInFyaWNvblwiKSkge1xyXG4gICAgICAgICAgICAgICAgJChcIi5xcmltZ2JveFwiKS50b2dnbGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAkKFwiaHRtbFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIC8v5YiG5LqrXHJcbiAgICAgICAgICAgIHZhciBzaGFyZWJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjZW1zaGFyZXdyYXBcIik7XHJcbiAgICAgICAgICAgIGlmICghc2hhcmVib3gubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnNoYXJld3JhcFwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8v5LqM57u056CBXHJcbiAgICAgICAgICAgIHZhciBxcmJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjcXJjb2RlXCIpO1xyXG4gICAgICAgICAgICBpZiAoIXFyYm94Lmxlbmd0aCkge1xyXG4gICAgICAgICAgICAgICAgJChcIi5xcmltZ2JveFwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgIC8v5bqV6YOo5YiG5LqrXHJcbiAgICAgICAgICAgIHZhciB3eGJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjc2hhcmVib3R0b21cIik7XHJcbiAgICAgICAgICAgIGlmICghd3hib3gubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnd4c2hhcmVcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL+W6lemDqOWFs+azqFxyXG4gICAgICAgICAgICB2YXIgZ3pib3ggPSAkKGUudGFyZ2V0KS5wYXJlbnRzKFwiI2d1YW56aHVcIik7XHJcbiAgICAgICAgICAgIGlmICghZ3pib3gubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnd4Z3pib3hcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAvL+Wtl+S9k+aOp+WItlxyXG4gICAgICAgICAgICB2YXIgZ3pib3ggPSAkKGUudGFyZ2V0KS5wYXJlbnRzKFwiI2ZzY3RybFwiKTtcclxuICAgICAgICAgICAgaWYgKCFnemJveC5sZW5ndGgpIHtcclxuICAgICAgICAgICAgICAgICQoXCIuZnNjdHJsYm94XCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgICAgIC8v6aG26YOo5b6u5L+h5YiG5Lqr5LqM57u056CBXHJcbiAgICAgICAgICAgIHZhciB0b3B3eGJveCA9ICQoZS50YXJnZXQpLnBhcmVudHMoXCIjd3hxcmNvZGVib3hcIik7XHJcbiAgICAgICAgICAgIGlmICghdG9wd3hib3gubGVuZ3RoKSB7XHJcbiAgICAgICAgICAgICAgICAkKFwiLnd4cXJjb2RlYm94XCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgfTtcclxuXHJcbiAgICAgICAgfSk7XHJcblxyXG4gICAgICAgIC8vIOWktOmDqOW+ruS/oeWIhuS6q+S6i+S7tumHjeWGmVxyXG4gICAgICAgICQoXCIjc2hhcmVpdGVtcyA+IC5lbXNoYXJlMjAyMF9pY29uX3dlaXhpblwiKS51bmJpbmQoXCJjbGlja1wiKTtcclxuICAgICAgICB2YXIgd3hxcmNvZGVib3hzdHIgPSBcIjxkaXYgaWQ9J3d4cXJjb2RlYm94JyBjbGFzcz0nd3hxcmNvZGVib3gnPjxzcGFuIGNsYXNzPSdhcnJvd3JpZ2h0Jz48L3NwYW4+PGRpdiBjbGFzcz0naW1nYm94Jz48ZGl2IGNsYXNzPSdxcmltZycgaWQ9J3dhcHFyY29kZTUnPjwvZGl2PjwvZGl2PjxwPuS9v+eUqOW+ruS/oeaJq+S4gOaJqzwvcD48cD7liIbkuqvmlofnq6DliLDmgqjnmoTmnIvlj4vlnIg8L3A+PC9kaXY+XCI7XHJcbiAgICAgICAgJChcIiNzaGFyZWl0ZW1zXCIpLmFwcGVuZCgkKHd4cXJjb2RlYm94c3RyKSk7XHJcbiAgICAgICAgJChcIiNzaGFyZWl0ZW1zXCIpLm9uKFwiY2xpY2tcIiwgXCIuZW1zaGFyZTIwMjBfaWNvbl93ZWl4aW5cIiwgZnVuY3Rpb24gKCkge1xyXG4gICAgICAgICAgICAkKFwiI3NoYXJlaXRlbXNcIikuZmluZChcIiN3eHFyY29kZWJveFwiKS50b2dnbGUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgaWYgKHR5cGVvZiBlbXNoYXJlRnVuICE9IFwidW5kZWZpbmVkXCIpIHtcclxuICAgICAgICAgICAgZW1zaGFyZUZ1bi5xcmNvZGUoe1xyXG4gICAgICAgICAgICAgICAgd2lkdGg6IDEwMCwvLyDkuoznu7TnoIHlrr3luqYg5Y+v6YCJIOm7mOiupDEzNVxyXG4gICAgICAgICAgICAgICAgY29sb3JEYXJrOiBcIiMwMDAwMDBcIiwgLy/kuoznu7TnoIHpopzoibIg5Y+v6YCJIOm7mOiupOm7kVxyXG4gICAgICAgICAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCIsLy/og4zmma/oibIg5Y+v6YCJIOm7mOiupOeZvVxyXG4gICAgICAgICAgICAgICAgbG9nb3NyYzogXCJodHRwczovL2cxLmRmY2Z3LmNvbS9nNC8yMDIwMDMvMjAyMDAzMTgxNDA0MzYuZ2lmXCIsLy8g5LqM57u056CBbG9nb+S/oeaBryDlj6/pgIlb5LiN5bu66K6u5Yqg5q2k5Y+C5pWwXSDpu5jorqTmnIlsb2dvIOWAvOS4ulwibm9uZVwi5pe25pegbG9nb1xyXG4gICAgICAgICAgICAgICAgbGluazogX19XQVBVUkwsXHJcbiAgICAgICAgICAgICAgICBkb21pZDogXCJ3YXBxcmNvZGU1XCJcclxuICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICAvLyDlupXpg6jlvq7kv6HliIbkuqvkuovku7bph43lhplcclxuICAgICAgICAkKFwiLmVtc2hhcmUyMDIwX2ljb25fd2VpeGluXCIpLnVuYmluZChcImNsaWNrXCIpO1xyXG4gICAgICAgICQoXCIjc2hhcmVib3R0b21cIikub24oXCJjbGlja1wiLCBcIi5lbXNoYXJlMjAyMF9pY29uX3dlaXhpblwiLCBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICAgICQoXCIjc2hhcmVib3R0b21cIikuZmluZChcIi53eHNoYXJlXCIpLnRvZ2dsZSgpO1xyXG4gICAgICAgIH0pO1xyXG5cclxuICAgICAgICAvL+W6lemDqOW+ruS/oeWFs+azqFxyXG4gICAgICAgICQoXCIjZ3VhbnpodVwiKS5vbihcImNsaWNrXCIsIFwiLmd6LXd4XCIsIGZ1bmN0aW9uIChlKSB7XHJcbiAgICAgICAgICAgIGUuc3RvcFByb3BhZ2F0aW9uKCk7XHJcbiAgICAgICAgICAgICQoXCIud3hnemJveFwiKS50b2dnbGUoKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgZG9jdW1lbnQub25rZXlkb3duID0gZnVuY3Rpb24gKGV2KSB7XHJcbiAgICAgICAgICAgIHZhciBvRXZlbnQgPSBldiB8fCBldmVudDtcclxuXHJcbiAgICAgICAgICAgIGlmIChvRXZlbnQua2V5Q29kZSA9PSAzMykgey8vcGFnZXVwXHJcbiAgICAgICAgICAgICAgICBpZiAod2luZG93LnNjcm9sbFkgLSBkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuY2xpZW50SGVpZ2h0IDw9IDApIHtcclxuICAgICAgICAgICAgICAgICAgICB3aW5kb3cuc2Nyb2xsVG8oMCwgMCk7XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgIHdpbmRvdy5zY3JvbGxUbygwLCB3aW5kb3cuc2Nyb2xsWSAtIGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgKyAkKFwiLnRvcC1uYXYtd3JhcFwiKS5oZWlnaHQoKSArICQoXCIudG9wYm94XCIpLmhlaWdodCgpICsgMzApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICAgICAgICB9IGVsc2UgaWYgKG9FdmVudC5rZXlDb2RlID09IDM0KSB7Ly9wYWdlZG93blxyXG4gICAgICAgICAgICAgICAgd2luZG93LnNjcm9sbFRvKDAsIHdpbmRvdy5zY3JvbGxZICsgZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNsaWVudEhlaWdodCAtICQoXCIudG9wLW5hdi13cmFwXCIpLmhlaWdodCgpIC0gJChcIi50b3Bib3hcIikuaGVpZ2h0KCkgLSAzMClcclxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLm9uKFwiY2xpY2tcIiwgZnVuY3Rpb24gKCkgey8v5bGV5byA54K55Ye75LqL5Lu2XHJcbiAgICAgICAgICAgIHRoYXQuaXNEZWZhdWx0U2hvd1RpdGxlID0gdHJ1ZTtcclxuICAgICAgICAgICAgY29va2llLnNldChcImNvbnRlbnRfc2hvd3RpdGxlXCIsIFwidHJ1ZVwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcbiAgICAgICAgICAgIHRoYXQuaGlkZURvd24oKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGV1cFwiKS5vbihcImNsaWNrXCIsIGZ1bmN0aW9uICgpIHsvL+aUtui1t+eCueWHu+S6i+S7tlxyXG4gICAgICAgICAgICB0aGF0LmlzRGVmYXVsdFNob3dUaXRsZSA9IGZhbHNlO1xyXG4gICAgICAgICAgICBjb29raWUuc2V0KFwiY29udGVudF9zaG93dGl0bGVcIiwgXCJmYWxzZVwiLCAzNjUsIFwiLmVhc3Rtb25leS5jb21cIik7XHJcbiAgICAgICAgICAgIHRoYXQuc2hvd0Rvd24oKTtcclxuICAgICAgICB9KTtcclxuXHJcbiAgICB9LFxyXG4gICAgc2hvd0Rvd246IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICAkKFwiI2dvcGlubHVudHh0MVwiKS5zaG93KCk7XHJcbiAgICAgICAgJChcIiN0b3Bib3hiYWtcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIudG9wYm94XCIpLnJlbW92ZUNsYXNzKFwidG9wYm94Zml4XCIpO1xyXG5cclxuICAgICAgICAkKFwiLm5ld3N0aXRsZWRvd25cIikuc2hvdygpO1xyXG4gICAgfSxcclxuICAgIGhpZGVEb3duOiBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgJChcIiNnb3Bpbmx1bnR4dDFcIikuaGlkZSgpO1xyXG4gICAgICAgICQoXCIjdG9wYm94YmFrXCIpLnNob3coKTtcclxuICAgICAgICAkKFwiLnRvcGJveFwiKS5hZGRDbGFzcyhcInRvcGJveGZpeFwiKTtcclxuXHJcbiAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLmhpZGUoKTtcclxuICAgIH0sXHJcbiAgICBpc0RlZmF1bHRTaG93VGl0bGU6IGNvb2tpZS5nZXQoJ2NvbnRlbnRfc2hvd3RpdGxlJykgfHwgXCJ0cnVlXCIsXHJcbiAgICAvLyDlm7rpobY6XHJcbiAgICBndWRpbmdGdW46IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICB2YXIgdGhhdCA9IHRoaXM7XHJcbiAgICAgICAgdmFyIHNtID0gJChcIiN0b3Bib3hcIik7XHJcbiAgICAgICAgdmFyIF9nYm9mZnNldHRvcCA9ICQoXCIjZ3ViYUNvbW1lbnRcIikub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIHZhciBfb2ZmdG9wID0gc20ub2Zmc2V0KCkudG9wO1xyXG4gICAgICAgIHZhciBfaCA9IHNtLmhlaWdodCgpO1xyXG4gICAgICAgIGZ1bmN0aW9uIGNoZWNrRml4VGl0bGUoKSB7XHJcbiAgICAgICAgICAgIHRoYXQuaXNEZWZhdWx0U2hvd1RpdGxlID0gY29va2llLmdldCgnY29udGVudF9zaG93dGl0bGUnKSB8fCBcInRydWVcIjtcclxuICAgICAgICAgICAgaWYgKGRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5jbGllbnRIZWlnaHQgPj0gNDAwKSB7XHJcbiAgICAgICAgICAgICAgICB2YXIgc2Nyb2xsdG9wID0gJChkb2N1bWVudCkuc2Nyb2xsVG9wKCk7XHJcbiAgICAgICAgICAgICAgICBpZiAoc2Nyb2xsdG9wID4gX29mZnRvcCkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICh0aGF0LmlzRGVmYXVsdFNob3dUaXRsZSA9PSBcInRydWVcIikge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAkKFwiI3RvcGJveGJha1wiKS5jc3Moe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgXCJoZWlnaHRcIjogX2hcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoYXQuaGlkZURvd24oKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmIChzY3JvbGx0b3AgPD0gX29mZnRvcCArIF9oKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLm5ld3N0aXRsZXVwXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxldXBcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKHNjcm9sbHRvcCA8PSBfb2ZmdG9wICsgX2gpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxlZG93blwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB0aGF0LnNob3dEb3duKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgICAgICQoXCIjZ29waW5sdW50eHQxXCIpLnNob3coKTtcclxuICAgICAgICAgICAgICAgICAgICAkKFwiI3RvcGJveGJha1wiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi50b3Bib3hcIikucmVtb3ZlQ2xhc3MoXCJ0b3Bib3hmaXhcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICQoXCIubmV3c3RpdGxlZG93blwiKS5oaWRlKCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgJChcIiNnb3Bpbmx1bnR4dDFcIikuc2hvdygpO1xyXG4gICAgICAgICAgICAgICAgJChcIiN0b3Bib3hiYWtcIikuaGlkZSgpO1xyXG4gICAgICAgICAgICAgICAgJChcIi50b3Bib3hcIikucmVtb3ZlQ2xhc3MoXCJ0b3Bib3hmaXhcIik7XHJcblxyXG4gICAgICAgICAgICAgICAgJChcIi5uZXdzdGl0bGVkb3duXCIpLmhpZGUoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8kKHdpbmRvdykuc2Nyb2xsKGNoZWNrRml4VGl0bGUpO1xyXG4gICAgICAgIC8vJCh3aW5kb3cpLnJlc2l6ZShjaGVja0ZpeFRpdGxlKTtcclxuICAgIH0sXHJcbiAgICAvL+ivhOiuuuWMuuWfn1xyXG4gICAgaW5pdFBpbkx1bjogZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgIGlmIChfSVNDb21tZW50KSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoX0NNU0hKID09IFwidGVzdFwiKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmVkaXRvckFuZExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZTogJyNndWJhQ29tbWVudCcsIGlkOiBfTmV3c0lkLCB0eXBlOiAxLCAndG9wTmF2SCc6IDAsZW52OiAndGVzdCcsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpa2VzX3N0YXRlOiBfX2FsbG93X2xpa2VzX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgICAgICAgICAgd2luZG93LmVkaXRvckFuZExpc3Qoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBzZTogJyNndWJhQ29tbWVudCcsIGlkOiBfTmV3c0lkLCB0eXBlOiAxLCAndG9wTmF2SCc6IDAsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHBvc3Q6IHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGFsbG93X2xpa2VzX3N0YXRlOiBfX2FsbG93X2xpa2VzX3N0YXRlXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0gY2F0Y2ggKGUpIHtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgfVxyXG59XHJcblxyXG5mdW5jdGlvbiBjb252ZXJ0VG9OZXdzTGlzdERhdGUoX2RhdGUpIHtcclxuICAgIC8vIHZhciByZWcgPS8oXFxkezR9KVxcLShcXGR7Mn0pXFwtKFxcZHsyfSkgKFxcZHsyfTpcXGR7Mn0pLztcclxuICAgIC8vIGlmKF9kYXRlLmxlbmd0aCA+IDE2KXtcclxuICAgIC8vICAgICBfZGF0ZSA9IF9kYXRlLnN1YnN0cigwLCAxNikucmVwbGFjZShyZWcsXCIkMeW5tCQy5pyIJDPml6UgJDRcIik7XHJcbiAgICAvLyB9XHJcbiAgICBcclxuICAgIHZhciByZWcgPS8oXFxkezR9KVxcLyhcXGR7Mn0pXFwvKFxcZHsyfSkgKFxcZHsyfTpcXGR7Mn0pLztcclxuICAgIGlmKF9kYXRlLmxlbmd0aCA+IDE2KXtcclxuICAgICAgICBfZGF0ZSA9IF9kYXRlLnN1YnN0cigwLCAxNikucmVwbGFjZShyZWcsXCIkMeW5tCQy5pyIJDPml6UgJDRcIik7XHJcbiAgICB9XHJcbiAgICByZXR1cm4gX2RhdGU7XHJcbn1cclxuXHJcblxyXG4kKGZ1bmN0aW9uICgpIHtcclxuICAgICQuYWpheCh7XHJcbiAgICAgICAgdXJsOiBcIi8vbmV3c2luZm8uZWFzdG1vbmV5LmNvbS9rdWFpeHVuL3YyL2FwaS9hcnRpY2xlL1wiK19OZXdzSWQrXCI/Z3VpZD1cIisobmV3IERhdGUoKSkuZ2V0VGltZSgpK1wiJmNhbGxiYWNrPT9cIixcclxuICAgICAgICB0eXBlOiBcImdldFwiLFxyXG4gICAgICAgIGRhdGFUeXBlOiBcImpzb25wXCIsXHJcbiAgICAgICAgZGF0YToge30sXHJcbiAgICAgICAgc3VjY2VzczogZnVuY3Rpb24oanNvbikge1xyXG4gICAgICAgICAgICBpZihqc29uICYmIGpzb24uZGF0YSl7XHJcbiAgICAgICAgICAgICAgICBkb2N1bWVudC50aXRsZSArPSBqc29uLmRhdGEuQXJ0X1RpdGxlO1xyXG4gICAgICAgICAgICAgICAgZG9jdW1lbnQudGl0bGUgKz0gXCIgXyDkuJzmlrnotKLlr4znvZFcIjtcclxuICAgICAgICAgICAgICAgIGlmKGpzb24uZGF0YS5BcnRfS2V5d29yZCl7XHJcbiAgICAgICAgICAgICAgICAgICAgJCgnbWV0YVtuYW1lPVwia2V5d29yZHNcIl0nKS5hdHRyKFwiY29udGVudFwiLGpzb24uZGF0YS5BcnRfS2V5d29yZCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBpZihqc29uLmRhdGEuQXJ0X0Rlc2NyaXB0aW9uKXtcclxuICAgICAgICAgICAgICAgICAgICAkKCdtZXRhW25hbWU9XCJkZXNjcmlwdGlvblwiXScpLmF0dHIoXCJjb250ZW50XCIsanNvbi5kYXRhLkFydF9EZXNjcmlwdGlvbik7ICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgIGlmKGpzb24uZGF0YS5BcnRfVGFncyl7XHJcbiAgICAgICAgICAgICAgICAgICAgX05ld3NUYWcgPSBqc29uLmRhdGEuQXJ0X1RhZ3M7XHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoanNvbi5kYXRhLkFydF9Jc0NvbW1lbnQgPT0gXCIxXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIF9JU0NvbW1lbnQgPSB0cnVlO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgX0lTQ29tbWVudCA9IGZhbHNlO1xyXG4gICAgICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgICAgICQoXCIudG9wYm94IC50aXRsZVwiKS5odG1sKGpzb24uZGF0YS5BcnRfVGl0bGUpO1xyXG5cclxuICAgICAgICAgICAgICAgIHZhciBpbmZvc0hUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGluZm9zSFRNTCArPSAnPGRpdiBjbGFzcz1cIiBpdGVtXCI+Jytjb252ZXJ0VG9OZXdzTGlzdERhdGUoanNvbi5kYXRhLkFydF9TaG93VGltZSkrJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICBpZihqc29uLmRhdGEuQXJ0X0F1dGhvcl9OYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0gJzxkaXYgY2xhc3M9XCJpdGVtXCI+5L2c6ICF77yaJztcclxuICAgICAgICAgICAgICAgICAgICBpZihqc29uLmRhdGEuQXJ0X0F1dGhvcl9UeXBlID09IFwiMlwiKXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3NIVE1MICs9ICc8YSBocmVmPVwiaHR0cDovL21pbmdqaWEuZWFzdG1vbmV5LmNvbS8nK2pzb24uZGF0YS5BcnRfQXV0aG9yX1BpbllpbisnL2luZGV4Lmh0bWxcIiB0YXJnZXQ9XCJfYmxhbmtcIj4nK2pzb24uZGF0YS5BcnRfQXV0aG9yX05hbWUrJzwvYT4nO1xyXG4gICAgICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0ganNvbi5kYXRhLkFydF9BdXRob3JfTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3NIVE1MICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoanNvbi5kYXRhLkFydF9NZWRpYV9OYW1lKXtcclxuICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0gJzxkaXYgY2xhc3M9XCJpdGVtXCI+5p2l5rqQ77yaJztcclxuICAgICAgICAgICAgICAgICAgICBpZihqc29uLmRhdGEuQXJ0X01lZGlhX1R5cGUgPT0gXCIzXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0gJzxhIGhyZWY9XCJodHRwOi8vamlnb3UuZWFzdG1vbmV5LmNvbS8nK2pzb24uZGF0YS5BcnRfTWVkaWFfUGluWWluKycvaW5kZXguaHRtbFwiIHRhcmdldD1cIl9ibGFua1wiPicranNvbi5kYXRhLkFydF9NZWRpYV9OYW1lKyc8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgaW5mb3NIVE1MICs9IGpzb24uZGF0YS5BcnRfTWVkaWFfTmFtZTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3NIVE1MICs9ICc8L2Rpdj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoanNvbi5kYXRhLkFydF9Jc0NvbW1lbnQgPT0gXCIxXCIpe1xyXG4gICAgICAgICAgICAgICAgICAgIGluZm9zSFRNTCArPSAnPGEgaHJlZj1cIiNndWJhQ29tbWVudFwiIHRhcmdldD1cIl9zZWxmXCIgY2xhc3M9XCJnb3Bpbmx1bnR4dFwiIGlkPVwiZ29waW5sdW50eHQxXCI+JztcclxuICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0gJzxkaXYgY2xhc3M9XCJpdGVtXCI+JztcclxuICAgICAgICAgICAgICAgICAgICAvLyBpbmZvc0hUTUwgKz0gJzxpIGNsYXNzPVwiaWNvbmNvbW1lbnRcIj48L2k+PHNwYW4gY2xhc3M9XCJvcmFuZ2VcIj48L3NwYW4+5Lq66K+E6K66JztcclxuICAgICAgICAgICAgICAgICAgICBpbmZvc0hUTUwgKz0gJzwvZGl2Pic7XHJcbiAgICAgICAgICAgICAgICAgICAgaW5mb3NIVE1MICs9ICcgPC9hPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKFwiLmluZm9zXCIpLmh0bWwoaW5mb3NIVE1MKTtcclxuXHJcbiAgICAgICAgICAgICAgICB2YXIgY29udGVudEhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGNvbnRlbnRIVE1MICs9IGpzb24uZGF0YS5BcnRfQ29udGVudC5yZXBsYWNlKC9ocmVmPS9nLFwiIHRhcmdldD0nX2JsYW5rJyBocmVmPVwiKTtcclxuICAgICAgICAgICAgICAgIGlmKGpzb24uZGF0YS5BcnRfU2hvd1ZpZGVvID09IFwiMVwiICYmIGpzb24uZGF0YS5BcnRfTEtTUERhdGEgJiYganNvbi5kYXRhLkFydF9MS1NQRGF0YSAhPSBcIlwiKXtcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50SFRNTCArPSAnPHAgY2xhc3M9XCJlbmRfdmlkZW9saW5rXCI+JztcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50SFRNTCArPSAnPGEgaHJlZj1cImphdmFzY3JpcHQ6dm9pZCgwKTtcIiBkYXRhLXBjbGluaz1cImh0dHBzOi8vZmluYW5jZS5lYXN0bW9uZXkuY29tL2EvJytfTmV3c0lkKycuaHRtbFwiIGNsYXNzPVwicGMtb3BlbmJyb3dzZXJcIj7jgJDngrnlh7vop4LnnIvop4bpopHjgJE8L2E+JztcclxuICAgICAgICAgICAgICAgICAgICBjb250ZW50SFRNTCArPSAnPC9wPic7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAkKFwiI0NvbnRlbnRCb2R5XCIpLmh0bWwoY29udGVudEhUTUwpO1xyXG4gICAgICAgICAgICAgICAgJChcIiNDb250ZW50Qm9keVwiKS5zaG93KCk7XHJcblxyXG4gICAgICAgICAgICAgICAgdmFyIHNvdXJjZWJveEhUTUwgPSAnJztcclxuICAgICAgICAgICAgICAgIGlmKGpzb24uZGF0YS5BcnRfTWVkaWFfTmFtZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlYm94SFRNTCArPSAnPHNwYW4+5paH56ug5p2l5rqQ77yaJytqc29uLmRhdGEuQXJ0X01lZGlhX05hbWUrJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgaWYoanNvbi5kYXRhLkFydF9FZGl0b3JfQ29kZSl7XHJcbiAgICAgICAgICAgICAgICAgICAgc291cmNlYm94SFRNTCArPSAnPHNwYW4gY2xhc3M9XCJmbHJcIj7otKPku7vnvJbovpHvvJonK2pzb24uZGF0YS5BcnRfRWRpdG9yX0NvZGUrJzwvc3Bhbj4nO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgJChcIi56d290aGVycyAuc291cmNlYm94XCIpLmh0bWwoc291cmNlYm94SFRNTCk7XHJcblxyXG4gICAgICAgICAgICAgICAgaWYoanNvbi5kYXRhLkFydF9PcmlnaW5hbFRpdGxlICYmIGpzb24uZGF0YS5BcnRfT3JpZ2luYWxUaXRsZS50cmltKCkgIT0gXCJcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgJChcIi56d290aGVycyAuc291cmNlYm94XCIpLmFmdGVyKCc8ZGl2IGNsYXNzPVwic3VibGFiXCI+5Y6f5qCH6aKY77yaJytqc29uLmRhdGEuQXJ0X09yaWdpbmFsVGl0bGUrJzwvZGl2PicpXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIHZhciBfbGluayA9ICQoXCIuanViYW9cIikuYXR0cihcImRhdGEtbGlua1wiKS5yZXBsYWNlKCcjdGl0bGUjJyxlbmNvZGVVUklDb21wb25lbnQoanNvbi5kYXRhLkFydF9UaXRsZSkpO1xyXG4gICAgICAgICAgICAgICAgX2xpbmsgKz0gXCImbmV3c3VybD1cIitlbmNvZGVVUklDb21wb25lbnQoXCJodHRwczovL2ZpbmFuY2UuZWFzdG1vbmV5LmNvbS9hL1wiK2pzb24uZGF0YS5BcnRfQ29kZStcIi5odG1sXCIpO1xyXG4gICAgICAgICAgICAgICAgJChcIi5qdWJhb1wiKS5hdHRyKFwiZGF0YS1wY2xpbmtcIiwgX2xpbmspO1xyXG5cclxuICAgICAgICAgICAgICAgIHRyeSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYoX05ld3NJZCA9PSBcIjIwMjAwMjE1MTM4NjMwMzc0N1wiKXtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGlmKGpzb24uZGF0YS5BcnRfUm9ib3RfTmV3cyA9PSBcIjFcIil7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAkKFwiLnp3b3RoZXJzIC5zbSAuc3VibGFiXCIpLmh0bWwoXCI8c3Ryb25nIHN0eWxlPSdjb2xvcjojNjY2Oyc+6YOR6YeN5aOw5piO77yaPC9zdHJvbmc+5pys5L+h5oGv5p2l5rqQ5LqO5Lic5pa56LSi5a+MQ2hvaWNl5pWw5o2u77yM55u45YWz5pWw5o2u5LuF5L6b5Y+C6ICD77yM5LiN5p6E5oiQ5oqV6LWE5bu66K6u44CC5Lic5pa56LSi5a+M572R5Yqb5rGC5L2G5LiN5L+d6K+B5pWw5o2u55qE5a6M5YWo5YeG56Gu77yM5aaC5pyJ6ZSZ5ryP6K+35Lul5Lit5Zu96K+B55uR5Lya5oyH5a6a5LiK5biC5YWs5Y+45L+h5oGv5oqr6Zyy5aqS5L2T5Li65YeG77yM5Lic5pa56LSi5a+M572R5LiN5a+55Zug6K+l6LWE5paZ5YWo6YOo5oiW6YOo5YiG5YaF5a656ICM5byV6Ie055qE55uI5LqP5om/5ouF5Lu75L2V6LSj5Lu744CC55So5oi35Liq5Lq65a+55pyN5Yqh55qE5L2/55So5om/5ouF6aOO6Zmp77yM5Lic5pa56LSi5a+M572R5a+55q2k5LiN5L2c5Lu75L2V57G75Z6L55qE5ouF5L+d44CCXCIpO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICQoXCIuendvdGhlcnMgLnNtIC5zdWJsYWJcIikuaHRtbChcIjxzdHJvbmcgc3R5bGU9J2NvbG9yOiM2NjY7Jz7pg5Hph43lo7DmmI7vvJo8L3N0cm9uZz7kuJzmlrnotKLlr4zlj5HluIPmraTlhoXlrrnml6jlnKjkvKDmkq3mm7TlpJrkv6Hmga/vvIzkuI7mnKznq5nnq4vlnLrml6DlhbPvvIzkuI3mnoTmiJDmipXotYTlu7rorq7jgILmja7mraTmk43kvZzvvIzpo47pmanoh6rmi4XjgIJcIik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICB9IGNhdGNoIChlcnJvcikge1xyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB3aW5kb3cuZW1zaGFyZUZ1biA9IG5ldyBlbXNoYXJlMjAyMCh7XHJcbiAgICAgICAgICAgICAgICAgICAgdGl0bGU6IGpzb24uZGF0YS5BcnRfVGl0bGUsXHJcbiAgICAgICAgICAgICAgICAgICAgZGVzYzoganNvbi5kYXRhLkFydF9EZXNjcmlwdGlvbixcclxuICAgICAgICAgICAgICAgICAgICBzdW1tYXJ5OiAnJyxcclxuICAgICAgICAgICAgICAgICAgICBpbWdVcmw6IFwiaHR0cHM6Ly9jbXNqcy5lYXN0bW9uZXkuY29tL2NvbW1vbi93ZWl4aW4tc2hhcmUucG5nXCJcclxuICAgICAgICAgICAgICAgIH0pO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICAgICAgaWYgKHR5cGVvZiBlbXNoYXJlRnVuICE9IFwidW5kZWZpbmVkXCIpIHtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgZW1zaGFyZUZ1bi5xcmNvZGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLC8vIOS6jOe7tOeggeWuveW6piDlj6/pgIkg6buY6K6kMTM1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yRGFyazogXCIjMDAwMDAwXCIsIC8v5LqM57u056CB6aKc6ImyIOWPr+mAiSDpu5jorqTpu5FcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCIsLy/og4zmma/oibIg5Y+v6YCJIOm7mOiupOeZvVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dvc3JjOiBcImh0dHBzOi8vZzEuZGZjZncuY29tL2c0LzIwMjAwMy8yMDIwMDMxODE0MDQzNi5naWZcIiwvLyDkuoznu7TnoIFsb2dv5L+h5oGvIOWPr+mAiVvkuI3lu7rorq7liqDmraTlj4LmlbBdIOm7mOiupOaciWxvZ28g5YC85Li6XCJub25lXCLml7bml6Bsb2dvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbms6IFwiaHR0cDovL2RsLmRmY2ZzLmNvbS9tL296aWhcIixcclxuICAgICAgICAgICAgICAgICAgICAgICAgZG9taWQ6IFwid2FwcXJjb2RlXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICAgICAgZW1zaGFyZUZ1bi5xcmNvZGUoe1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB3aWR0aDogMTAwLC8vIOS6jOe7tOeggeWuveW6piDlj6/pgIkg6buY6K6kMTM1XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbG9yRGFyazogXCIjMDAwMDAwXCIsIC8v5LqM57u056CB6aKc6ImyIOWPr+mAiSDpu5jorqTpu5FcclxuICAgICAgICAgICAgICAgICAgICAgICAgY29sb3JMaWdodDogXCIjZmZmZmZmXCIsLy/og4zmma/oibIg5Y+v6YCJIOm7mOiupOeZvVxyXG4gICAgICAgICAgICAgICAgICAgICAgICBsb2dvc3JjOiBcImh0dHBzOi8vZzEuZGZjZncuY29tL2c0LzIwMjAwMy8yMDIwMDMxODE0MDQzNi5naWZcIiwvLyDkuoznu7TnoIFsb2dv5L+h5oGvIOWPr+mAiVvkuI3lu7rorq7liqDmraTlj4LmlbBdIOm7mOiupOaciWxvZ28g5YC85Li6XCJub25lXCLml7bml6Bsb2dvXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpbms6IF9fV0FQVVJMLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBkb21pZDogXCJ3YXBxcmNvZGUyXCJcclxuICAgICAgICAgICAgICAgICAgICB9KTtcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgIGluaXROZXdzSU1HKCk7XHJcbiAgICAgICAgICAgICAgICBpbml0TGFuZ0tlVmlkZW8oKTtcclxuICAgICAgICAgICAgICAgIHVuaXR5dm90ZSgpO1xyXG4gICAgICAgICAgICAgICAgenh6d09iai5pbml0KCk7XHJcbiAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgbG9jYXRpb24uaHJlZiA9IFwiaHR0cHM6Ly9maW5hbmNlLmVhc3Rtb25leS5jb20vNDA0Lmh0bWxcIjtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuICAgIH0pXHJcbn0pO1xuXG5cbi8vLy8vLy8vLy8vLy8vLy8vL1xuLy8gV0VCUEFDSyBGT09URVJcbi8vIC4vanMvTmV3c1BDQmVmb3JlLmpzXG4vLyBtb2R1bGUgaWQgPSAxOVxuLy8gbW9kdWxlIGNodW5rcyA9IDIiLCJ2YXIgYXBwYXJyID0gbmV3IEFycmF5KCk7XHJcblxyXG5mdW5jdGlvbiBpbml0VmlkZW8oX3ZpZGVvSWQsIF92aWRlb1dpZHRoLCBfdmlkZW9IZWlnaHQsIF92aWRlb1R5cGUsIF92aWRlb1ZhbHVlLCBfdmlkZW9Jc1Bvc3RlciwgX3ZpZGVvUG9zdGVyKSB7XHJcbiAgICB2YXIgdmlkZW9pdGVtID0gZW1hdihfdmlkZW9JZCwge1xyXG4gICAgICAgIHdpZHRoOiBfdmlkZW9XaWR0aCwvL+aSreaUvuWZqOWMuuWfn+WuveW6pu+8jOWNleS9jeWDj+e0oO+8jOaMiemcgOiuvue9ru+8jOWPr+mAmui/hyBDU1Mg5o6n5Yi25pKt5pS+5Zmo5bC65a+444CCXHJcbiAgICAgICAgaGVpZ2h0OiBfdmlkZW9IZWlnaHQsLy/mkq3mlL7lmajljLrln5/pq5jluqbvvIzljZXkvY3lg4/ntKDvvIzmjInpnIDorr7nva7vvIzlj6/pgJrov4cgQ1NTIOaOp+WItuaSreaUvuWZqOWwuuWvuOOAglxyXG4gICAgICAgIGNvbnRyb2xzOiB0cnVlLC8v5piv5ZCm5pi+56S65pKt5pS+5Zmo55qE5o6n5Yi25qCP77yM6buY6K6kdHJ1ZVxyXG4gICAgICAgIHBvc3RlcjogX3ZpZGVvUG9zdGVyLC8v6K6+572u5bCB6Z2i5Zu+54mH5a6M5pW05Zyw5Z2AXHJcbiAgICAgICAgcG9zdGVySW1hZ2U6IF92aWRlb0lzUG9zdGVyLC8v5piv5ZCm5pi+56S65bCB6Z2iXHJcbiAgICAgICAgYXV0b3BsYXk6IGZhbHNlLC8v5piv5ZCm6Ieq5Yqo5pKt5pS+77yM6buY6K6kZmFsc2VcclxuICAgICAgICBsb29wOiBmYWxzZSwvL+aYr+WQpuW+queOr+aSreaUvu+8jOm7mOiupGZhbHNlXHJcbiAgICAgICAgbXV0ZWQ6IGZhbHNlLC8v5piv5ZCm6Z2Z6Z+z5pKt5pS+77yM6buY6K6kZmFsc2VcclxuICAgICAgICBwcmVsb2FkOiBcImF1dG9cIiwvL+aYr+WQpumcgOimgemihOWKoOi9ve+8jOaciSAzIOS4quWxnuaAp1wiYXV0b1wi77yMXCJtZXRhXCLvvIxcIm5vbmVcIiDvvIznp7vliqjnq6/nlLHkuo7ns7vnu5/pmZDliLbvvIzorr7nva4gYXV0byDml6DmlYjjgILpu5jorqRhdXRvXHJcbiAgICAgICAgY29udHJvbEJhcjogey8v6K6+572u5o6n5Yi25qCP5bGe5oCn55qE5Y+C5pWw57uE5ZCIXHJcbiAgICAgICAgICAgIGNoaWxkcmVuOiBbXHJcbiAgICAgICAgICAgICAgICBcInBsYXlUb2dnbGVcIixcclxuICAgICAgICAgICAgICAgIFwidm9sdW1lUGFuZWxcIlxyXG4gICAgICAgICAgICBdLFxyXG4gICAgICAgICAgICBwbGF5VG9nZ2xlOiB0cnVlLC8v5piv5ZCm5pi+56S65pKt5pS+44CB5pqC5YGc5YiH5o2i5oyJ6ZKuXHJcbiAgICAgICAgICAgIHZvbHVtZVBhbmVsOiB0cnVlLC8v5piv5ZCm5pi+56S66Z+z6YeP5o6n5Yi2XHJcblxyXG4gICAgICAgICAgICByZW1haW5pbmdUaW1lRGlzcGxheTogZmFsc2UsLy/mmK/lkKbmmL7npLrop4bpopHliankvZnml7bpl7RcclxuICAgICAgICAgICAgY3VycmVudFRpbWVEaXNwbGF5OiB0cnVlLC8v5piv5ZCm5pi+56S66KeG6aKR5b2T5YmN5pe26Ze0XHJcbiAgICAgICAgICAgIHRpbWVEaXZpZGVyOiB0cnVlLC8v5piv5ZCm5pi+56S65pe26Ze05YiG5Ymy56ym77yIL++8iVxyXG4gICAgICAgICAgICBkdXJhdGlvbkRpc3BsYXk6IHRydWUsLy/mmK/lkKbmmL7npLrop4bpopHml7bplb9cclxuXHJcbiAgICAgICAgICAgIHByb2dyZXNzQ29udHJvbDogdHJ1ZSwvL+aYr+WQpuaYvuekuuaSreaUvui/m+W6puadoVxyXG4gICAgICAgICAgICBwbGF5YmFja1JhdGVNZW51QnV0dG9uOiB0cnVlLFxyXG4gICAgICAgICAgICBmdWxsc2NyZWVuVG9nZ2xlOiB0cnVlLy/mmK/lkKbmmL7npLrlhajlsY/mjInpkq5cclxuICAgICAgICB9LFxyXG4gICAgICAgIHNob3dDb250ZXh0TWVudTogZmFsc2UsLy/mmK/lkKbmmL7npLrlj7PplK7oj5zljZXvvIzpu5jorqRmYWxzZVxyXG4gICAgICAgIHNob3dCaWdQbGF5QnV0dG9uT25QYXVzZWQ6IHRydWUsLy/mmoLlgZzml7bmmK/lkKbmmL7npLrmkq3mlL7mjInpkq7vvIzpu5jorqRmYWxzZVxyXG4gICAgICAgIGJpZ1BsYXlCdXR0b246IHRydWUsLy/mmK/lkKbmmL7npLrlsYXkuK3nmoTmkq3mlL7mjInpkq5cclxuICAgICAgICBzdGF0aXN0aWM6IHtcclxuICAgICAgICAgICAgYWN0aXZlVGltZTogZmFsc2VcclxuICAgICAgICB9LFxyXG4gICAgICAgIHN0YW5kYXJkRnVsbHNjcmVlbkFwaTogZmFsc2VcclxuICAgICAgICAvLyxlbnY6IFwidGVzdFwiXHJcbiAgICB9KTtcclxuICAgIHZpZGVvaXRlbS5pZF9fID0gX3ZpZGVvSWQ7XHJcblxyXG4gICAgc3dpdGNoIChfdmlkZW9UeXBlKSB7XHJcbiAgICAgICAgY2FzZSBcIjJcIjogdmlkZW9pdGVtLnNyYyhcIiNcIiArIF92aWRlb1ZhbHVlKTsgYnJlYWs7Ly/nm7Tmkq1cclxuICAgICAgICBkZWZhdWx0OiB2aWRlb2l0ZW0uc3JjKF92aWRlb1ZhbHVlKTsgYnJlYWs7Ly/lvZXmkq3miJblhbbku5bop4bpopFcclxuICAgIH1cclxuXHJcbiAgICB2aWRlb2l0ZW0ub24oJ3BsYXknLCBmdW5jdGlvbiAoZXZlbnQpIHtcclxuICAgICAgICBqUXVlcnkuZWFjaChhcHBhcnIsIGZ1bmN0aW9uIChpLCB2KSB7XHJcbiAgICAgICAgICAgIGlmICh2LmlkX18gIT0gdmlkZW9pdGVtLmlkX18pIHtcclxuICAgICAgICAgICAgICAgIHYucGF1c2UoKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgIH0pO1xyXG4gICAgICAgIGpRdWVyeShcIi5lbWF2XCIpLmNzcyh7IFwicG9zaXRpb25cIjogXCJcIiwgXCJyaWdodFwiOiAwLCBcImJvdHRvbVwiOiAwLCBcIndpZHRoXCI6IFwiXCIsIFwiaGVpZ2h0XCI6IFwiXCIsIFwiei1pbmRleFwiOiA5OTkgfSk7XHJcbiAgICB9KTtcclxuXHJcbiAgICBhcHBhcnIucHVzaCh2aWRlb2l0ZW0pO1xyXG59XHJcblxyXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uKCl7XHJcbiAgICBqUXVlcnkoXCIuZW1fbGtfdmlkZW9cIikuZWFjaChmdW5jdGlvbiAoX2luZGV4KSB7XHJcbiAgICAgICAgdmFyIF9vbGQgPSBqUXVlcnkodGhpcyk7XHJcbiAgICAgICAgdmFyIGxrX2RlcyA9IF9vbGQuYXR0cignbGtfZGVzJyk7XHJcbiAgICAgICAgaWYgKHR5cGVvZiBsa19kZXMgIT09IHR5cGVvZiB1bmRlZmluZWQgJiYgbGtfZGVzICE9PSBmYWxzZSAmJiBsa19kZXMgIT0gXCJcIikge1xyXG4gICAgICAgICAgICBsa19kZXMgPSB1bmVzY2FwZShsa19kZXMpO1xyXG4gICAgICAgICAgICBqUXVlcnkodGhpcykuYWZ0ZXIoJzxwIHN0eWxlPVwidGV4dC1hbGlnbjogY2VudGVyO2ZvbnQtc2l6ZTogMTJweDtjb2xvcjogIzY2Njtwb3NpdGlvbjogcmVsYXRpdmU7dG9wOiAtMTBweDtcIj4nICsgbGtfZGVzICsgJzwvcD4nKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgalF1ZXJ5KHRoaXMpLnJlcGxhY2VXaXRoKCc8ZGl2IGNsYXNzPVwibWlkZGxldmlkZW9iZ1wiIGRhdGEtaWQ9XCJhdi1wbGF5ZXItY3R4JyArIF9pbmRleCArICdcIiBkYXRhLXZhbHVlPVwiJyArIF9vbGQuYXR0cihcImxrX2RhdGFcIikgKyAnXCI+PHZpZGVvIGlkPVwiYXYtcGxheWVyLWN0eCcgKyBfaW5kZXggKyAnXCIgY2xhc3M9XCJlbWF2XCIgcHJlbG9hZD1cImF1dG9cIj48L3ZpZGVvPjwvZGl2PicpO1xyXG4gICAgfSk7XHJcbiAgICBcclxuICAgIGpRdWVyeShcIi5taWRkbGV2aWRlb2JnXCIpLmVhY2goZnVuY3Rpb24gKCkge1xyXG4gICAgICAgIC8vdmFyIF90aGlzID0galF1ZXJ5KHRoaXMpO1xyXG4gICAgICAgIC8vdmFyIF9kYXRhaWQgPSBfdGhpcy5kYXRhKFwiaWRcIik7XHJcbiAgICAgICAgLy92YXIgX2RhdGF2YWx1ZSA9IF90aGlzLmRhdGEoXCJ2YWx1ZVwiKTtcclxuICAgICAgICAvL2lmICh0eXBlb2YgX2RhdGF2YWx1ZSAhPT0gdHlwZW9mIHVuZGVmaW5lZCAmJiBfZGF0YXZhbHVlICE9PSBmYWxzZSAmJiBfZGF0YXZhbHVlICE9IFwiXCIpIHtcclxuICAgICAgICAvLyAgICB2YXIgX2RhdGF2aWRlb2l0ZW0gPSBfZGF0YXZhbHVlLnNwbGl0KCcjJyk7XHJcbiAgICAgICAgLy8gICAgaWYgKF9kYXRhdmlkZW9pdGVtLmxlbmd0aCA9PSAyKSB7XHJcbiAgICAgICAgLy8gICAgICAgIGluaXRWaWRlbyhfZGF0YWlkLCA2NzAsIDQyNSwgX2RhdGF2aWRlb2l0ZW1bMF0sIF9kYXRhdmlkZW9pdGVtWzFdLCBmYWxzZSwgXCJcIik7XHJcbiAgICAgICAgLy8gICAgfSBlbHNlIHtcclxuICAgICAgICAvLyAgICAgICAgaW5pdFZpZGVvKF9kYXRhaWQsIDY3MCwgNDI1LCA5OSwgX2RhdGF2aWRlb2l0ZW1bMF0sIGZhbHNlLCBcIlwiKTtcclxuICAgICAgICAvLyAgICB9XHJcbiAgICAgICAgLy99XHJcbiAgICAgICAgalF1ZXJ5KFwiLm1pZGRsZXZpZGVvYmdcIikuaGlkZSgpO1xyXG4gICAgICAgIGpRdWVyeShcIi5lbmRfdmlkZW9saW5rXCIpLnNob3coKTtcclxuICAgIH0pO1xyXG59XHJcblxyXG4vL+eUseS6jlBD5YaF5qC45LiN5pSv5oyB5pKt5pS+77yM5omA5Lul6L+Z5Liq5Zyw5pa56ZqQ6JeP77yM5Zyo6KeG6aKR55qE5pyr5bC+5Yqg6ZO+5o6l44CQ54K55Ye76KeC55yL6KeG6aKR44CRXG5cblxuLy8vLy8vLy8vLy8vLy8vLy8vXG4vLyBXRUJQQUNLIEZPT1RFUlxuLy8gLi9qcy9tb2R1bGVzL2xhbmdrZS9uZXdzcGNiZWZvcmUuanNcbi8vIG1vZHVsZSBpZCA9IDJcbi8vIG1vZHVsZSBjaHVua3MgPSAyIl0sInNvdXJjZVJvb3QiOiIifQ=="],"names":["modules","installedModules","__webpack_require__","moduleId","exports","module","i","l","call","m","c","value","d","name","getter","o","Object","defineProperty","configurable","enumerable","get","n","__esModule","object","property","prototype","hasOwnProperty","p","s","0","hexcase","chrsz","hex_md5","binl2hex","core_md5","str2binl","length","x","len","a","b","olda","oldb","oldc","oldd","md5_ff","md5_gg","md5_hh","md5_ii","safe_add","Array","md5_cmn","q","t","num","cnt","y","lsw","str","bin","mask","charCodeAt","binarray","hex_tab","charAt","1","gshVoteNum","numb","parseFloat","toFixed","VoteZhanBiWidth","zhanBi","maxWidth","getVoteCookie","key","cookieArray","document","cookie","split","arr","replace","unescape","initResultHTML","json","_vote_title","vote_item","_html","sumVote","curVote","_isvote","Result","Votes","_item","Vm_Title","_voteSum","j","Elements","_cookieValue","__item","Vi_Id","Vi_Vm_Id","Vi_Vg_Id","indexOf","Vi_Count","_Vi_Count","_voteBiLi","Vi_Title","Vg_Id","Vg_Enable","initVote","item","$","each","_this","this","_vote_id","attr","ajax","url","type","dataType","data","success","html","Success","Vg_Title","radioOrCheckbox","Vm_Type","_Vm_MaxCheck","Vm_MaxCheck","initHTML","show","_isLockVote","jQuery","on","_chooseIds","_timu","vivmid","push","_viid","_vivmid","_vivgid","_xb","splice","trim","alert","addClass","expires","date","Date","ms","setTime","getTime","escape","toUTCString","location","host","setVoteCookie","parents","_vname","_maxcheck","window","external","OnClickEvent","open","17","updateEmImageRemark","parent","css","font-size","line-height","children","emRemark","remove","getElementById","$C","createElement","Class","AsPrototype","create","initialize","apply","arguments","newsimg","chartId","getElementsByClassName","obj","classElements","allElements","getElementsByTagName","className","getMarket","code","Market","substring","Type","Code","gshNum","dNum","dw","gshZd","XiangGuanGuPiao","secid","imgParent","chartFooterDiv","jdata","rc","footerInnerRow","_i","total","_name","_price","_zdf","_zde","diff","_code","f12","_market","f13","f14","f2","f3","f4","zdColor","innerHTML","appendChild","XiangGuanBanKuai","htmlBK","htmlBKContent","h","_bkCode","_bkMarket","_bkName","_bkZdf","_bkZde","ZhiShuLingZhangHangYe","bkzdColor","_szjs","f104","_xdjs","f105","f140","f141","f128","f136","NewsImg","tipsImageRemark","price","f43","cjl","f47","cje","f48","stockCode","f57","stockName","f58","stockMarket","f107","hsl","f168","zde","f169","zdf","f170","syl","f162","zsz","f116","parentNode","chartLeftDiv","__Market","childNodes","src","id","insertBefore","chartRightDiv","setAttribute","append","chartNavDiv","_NewsId","BodyNextNode","nextSibling","nodeType","undefined","imgnodes","_datacode","_datacodeItem","_KR","_datacode2","_datacode2Item","getAttribute","classList","add","toLowerCase","initImg","width","height","bkTipAreas","ioOverall","Top","tempData","_color","lz","lzg","showStr","style","display","_stockcode","_stockmarket","charset","dataVar","callback","nodeObj","script","_0j","all","readyState","eval","removeChild","ensit","error","dsq_updateEmImageRemark","setInterval","setTimeout","clearInterval","19","initLangKeVideo","unityvote","initNewsIMG","config","guba","_CMSHJ","xarr","match","RegExp","decodeURIComponent","expiredays","domain","exdate","cookiestr","setDate","getDate","toGMTString","_deviceid","_ctoken","_utoken","_GubaApiH","loadCookies","zxzwObj","getNewsArticleBriefInfo","formatZanNum","count","parseInt","temp","zanObj","e","$dom","articleId","_apiurl","hasClass","method","jsonpCallback","Math","random","res","prezanum","anim","$body","$lab","removeClass","text","pageX","pageY","color","zIndex","position","select","left","top","fontSize","textShadow","innerText","opacity","collectObj","init","margin-bottom","_data","Operation","Params","market","toString","originURL","CallBack","OnWebCallNativeJsCommon","JSON","stringify","pclink","initA","after","prop","_thisCode","removeAttr","___a","___href","pathname","search","wrap","hasAttribute","_op_ids","_op_id","op_id","_opHTML","links","title_color","title","_initOPHTML","loadFontSize","bindEvent","gudingFun","initQuoteLink","re","_num","infos","post_like_count","like_state","collect_state","post_comment_count","post_forward_count","isHuoZan","post_like_style","find","allow_likes_state","pointer-events","post_comment_authory","initPinLun","_tipZIndex","navigator","userAgent","_isMouseOver","_thisitem","_id","quoteboxHtml","_interface","_thisitem2","jsonp","dataQuote","pow","f1","mc","_dom","clientWidth","dl","offsetParent","offsetLeft","size","siblings","that","stopPropagation","target","toggle","scrollTo","offset","hide","unbind","emshareFun","qrcode","colorDark","colorLight","logosrc","link","__WAPURL","domid","onkeydown","ev","oEvent","event","keyCode","scrollY","documentElement","clientHeight","isDefaultShowTitle","hideDown","showDown","sm","_ISComment","editorAndList","se","topNavH","env","post","__allow_likes_state","Art_Title","Art_Keyword","Art_Description","Art_Tags","_NewsTag","Art_IsComment","infosHTML","_date","Art_ShowTime","substr","Art_Author_Name","Art_Author_Type","Art_Author_PinYin","Art_Media_Name","Art_Media_Type","Art_Media_PinYin","contentHTML","Art_Content","Art_ShowVideo","Art_LKSPData","sourceboxHTML","Art_Editor_Code","Art_OriginalTitle","_link","encodeURIComponent","Art_Code","Art_Robot_News","emshare2020","desc","summary","imgUrl","href","2","_index","_old","lk_des","replaceWith"],"mappings":"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"}