3NAxHUEaM6RAG7rVDPL9L6DFZWkrqFtY98t · data · 2.7c767379.chunk.js?4?1?0
{
"2.7c767379.chunk.js?4?1?0": "base64:Ti5kZWNvZGUoZSxwLHQpfSx1LnRleHQ9e3V0Zjg6e30sdXRmMTY6e319LHUudGV4dC51dGY4LmVuY29kZT1mdW5jdGlvbihlLHQscil7ZT11LmVuY29kZVV0ZjgoZSk7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgaT1yPXJ8fDAsbz0wO288ZS5sZW5ndGg7KytvKW5baSsrXT1lLmNoYXJDb2RlQXQobyk7cmV0dXJuIHQ/aS1yOm59LHUudGV4dC51dGY4LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gdS5kZWNvZGVVdGY4KFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKSl9LHUudGV4dC51dGYxNi5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkpO2Zvcih2YXIgaT1uZXcgVWludDE2QXJyYXkobi5idWZmZXIpLG89cj1yfHwwLGE9cixzPTA7czxlLmxlbmd0aDsrK3MpaVthKytdPWUuY2hhckNvZGVBdChzKSxvKz0yO3JldHVybiB0P28tcjpufSx1LnRleHQudXRmMTYuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQxNkFycmF5KGUuYnVmZmVyKSl9LHUuZGVmbGF0ZT1mdW5jdGlvbihlLHQscil7aWYodD11LmRlY29kZTY0KGUuZGVmbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsKSxyKXt2YXIgbj0yOzMyJnQuY2hhckNvZGVBdCgxKSYmKG49NiksdD10LnN1YnN0cmluZyhuLHQubGVuZ3RoLTQpfXJldHVybiB0fSx1LmluZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuaW5mbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsO3JldHVybiBudWxsPT09bj9udWxsOnUuZGVjb2RlNjQobil9O3ZhciBkPWZ1bmN0aW9uKGUsdCxyKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgbjtpZihudWxsPT09cj9uPWUucmVtb3ZlSXRlbSh0KToocj11LmVuY29kZTY0KEpTT04uc3RyaW5naWZ5KHIpKSxuPWUuc2V0SXRlbSh0LHIpKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBuJiYhMCE9PW4ucnZhbCl7dmFyIGk9bmV3IEVycm9yKG4uZXJyb3IubWVzc2FnZSk7dGhyb3cgaS5pZD1uLmVycm9yLmlkLGkubmFtZT1uLmVycm9yLm5hbWUsaX19LHk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgcj1lLmdldEl0ZW0odCk7aWYoZS5pbml0KWlmKG51bGw9PT1yLnJ2YWwpe2lmKHIuZXJyb3Ipe3ZhciBuPW5ldyBFcnJvcihyLmVycm9yLm1lc3NhZ2UpO3Rocm93IG4uaWQ9ci5lcnJvci5pZCxuLm5hbWU9ci5lcnJvci5uYW1lLG59cj1udWxsfWVsc2Ugcj1yLnJ2YWw7cmV0dXJuIG51bGwhPT1yJiYocj1KU09OLnBhcnNlKHUuZGVjb2RlNjQocikpKSxyfSxnPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXkoZSx0KTtudWxsPT09aSYmKGk9e30pLGlbcl09bixkKGUsdCxpKX0sdj1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO3JldHVybiBudWxsIT09biYmKG49ciBpbiBuP25bcl06bnVsbCksbn0sbT1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO2lmKG51bGwhPT1uJiZyIGluIG4pe2RlbGV0ZSBuW3JdO3ZhciBpPSEwO2Zvcih2YXIgbyBpbiBuKXtpPSExO2JyZWFrfWkmJihuPW51bGwpLGQoZSx0LG4pfX0sYj1mdW5jdGlvbihlLHQpe2QoZSx0LG51bGwpfSxfPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpPW51bGw7InVuZGVmaW5lZCI9PT10eXBlb2YgciYmKHI9WyJ3ZWIiLCJmbGFzaCJdKTt2YXIgbz0hMSxhPW51bGw7Zm9yKHZhciBzIGluIHIpe249cltzXTt0cnl7aWYoImZsYXNoIj09PW58fCJib3RoIj09PW4pe2lmKG51bGw9PT10WzBdKXRocm93IG5ldyBFcnJvcigiRmxhc2ggbG9jYWwgc3RvcmFnZSBub3QgYXZhaWxhYmxlLiIpO2k9ZS5hcHBseSh0aGlzLHQpLG89ImZsYXNoIj09PW59IndlYiIhPT1uJiYiYm90aCIhPT1ufHwodFswXT1sb2NhbFN0b3JhZ2UsaT1lLmFwcGx5KHRoaXMsdCksbz0hMCl9Y2F0Y2godSl7YT11fWlmKG8pYnJlYWt9aWYoIW8pdGhyb3cgYTtyZXR1cm4gaX07dS5zZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4saSl7XyhnLGFyZ3VtZW50cyxpKX0sdS5nZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBfKHYsYXJndW1lbnRzLG4pfSx1LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSx0LHIsbil7XyhtLGFyZ3VtZW50cyxuKX0sdS5jbGVhckl0ZW1zPWZ1bmN0aW9uKGUsdCxyKXtfKGIsYXJndW1lbnRzLHIpfSx1LnBhcnNlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PS9eKGh0dHBzPyk6XC9cLyhbXjomXlwvXSopOj8oXGQqKSguKikkL2c7dC5sYXN0SW5kZXg9MDt2YXIgcj10LmV4ZWMoZSksbj1udWxsPT09cj9udWxsOntmdWxsOmUsc2NoZW1lOnJbMV0saG9zdDpyWzJdLHBvcnQ6clszXSxwYXRoOnJbNF19O3JldHVybiBuJiYobi5mdWxsSG9zdD1uLmhvc3Qsbi5wb3J0PzgwIT09bi5wb3J0JiYiaHR0cCI9PT1uLnNjaGVtZT9uLmZ1bGxIb3N0Kz0iOiIrbi5wb3J0OjQ0MyE9PW4ucG9ydCYmImh0dHBzIj09PW4uc2NoZW1lJiYobi5mdWxsSG9zdCs9IjoiK24ucG9ydCk6Imh0dHAiPT09bi5zY2hlbWU/bi5wb3J0PTgwOiJodHRwcyI9PT1uLnNjaGVtZSYmKG4ucG9ydD00NDMpLG4uZnVsbD1uLnNjaGVtZSsiOi8vIituLmZ1bGxIb3N0KSxufTt2YXIgUz1udWxsO3UuZ2V0UXVlcnlWYXJpYWJsZXM9ZnVuY3Rpb24oZSl7dmFyIHQscj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1lLnNwbGl0KCImIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaSxvLGE9cltuXS5pbmRleE9mKCI9Iik7YT4wPyhpPXJbbl0uc3Vic3RyaW5nKDAsYSksbz1yW25dLnN1YnN0cmluZyhhKzEpKTooaT1yW25dLG89bnVsbCksaSBpbiB0fHwodFtpXT1bXSksaSBpbiBPYmplY3QucHJvdG90eXBlfHxudWxsPT09b3x8dFtpXS5wdXNoKHVuZXNjYXBlKG8pKX1yZXR1cm4gdH07cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT8obnVsbD09PVMmJihTPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uc2VhcmNoP3Iod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkpOnt9KSx0PVMpOnQ9cihlKSx0fSx1LnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPSIiLG49ZS5pbmRleE9mKCI/Iik7bj4wJiYodD1lLnN1YnN0cmluZygwLG4pLHI9ZS5zdWJzdHJpbmcobisxKSk7dmFyIGk9dC5zcGxpdCgiLyIpO3JldHVybiBpLmxlbmd0aD4wJiYiIj09PWlbMF0mJmkuc2hpZnQoKSx7cGF0aFN0cmluZzp0LHF1ZXJ5U3RyaW5nOnIscGF0aDppLHF1ZXJ5OiIiPT09cj97fTp1LmdldFF1ZXJ5VmFyaWFibGVzKHIpfX0sdS5tYWtlUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD11LnBhcnNlRnJhZ21lbnQoZSkscj17cGF0aDp0LnBhdGhTdHJpbmcscXVlcnk6dC5xdWVyeVN0cmluZyxnZXRQYXRoOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dC5wYXRoOnQucGF0aFtlXX0sZ2V0UXVlcnk6ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBlP249dC5xdWVyeToobj10LnF1ZXJ5W2VdKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgciYmKG49bltyXSksbn0sZ2V0UXVlcnlMYXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXRRdWVyeShlKTtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnR9fTtyZXR1cm4gcn0sdS5tYWtlTGluaz1mdW5jdGlvbihlLHQscil7ZT1qUXVlcnkuaXNBcnJheShlKT9lLmpvaW4oIi8iKTplO3ZhciBuPWpRdWVyeS5wYXJhbSh0fHx7fSk7cmV0dXJuIHI9cnx8IiIsZSsobi5sZW5ndGg+MD8iPyIrbjoiIikrKHIubGVuZ3RoPjA/IiMiK3I6IiIpfSx1LnNldFBhdGg9ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOyl7dmFyIG89dFtuKytdO2lmKG49PWkpZVtvXT1yO2Vsc2V7dmFyIGE9byBpbiBlOyghYXx8YSYmIm9iamVjdCIhPT10eXBlb2YgZVtvXXx8YSYmbnVsbD09PWVbb10pJiYoZVtvXT17fSksZT1lW29dfX19LHUuZ2V0UGF0aD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aCxvPSEwO28mJm48aSYmIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWU7KXt2YXIgYT10W24rK107KG89YSBpbiBlKSYmKGU9ZVthXSl9cmV0dXJuIG8/ZTpyfSx1LmRlbGV0ZVBhdGg9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0Ij09PXR5cGVvZiBlJiZudWxsIT09ZSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXRbcisrXTtpZihyPT1uKWRlbGV0ZSBlW2ldO2Vsc2V7aWYoIShpIGluIGUpfHwib2JqZWN0IiE9PXR5cGVvZiBlW2ldfHxudWxsPT09ZVtpXSlicmVhaztlPWVbaV19fX0sdS5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITE7cmV0dXJuITB9LHUuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49LyUuL2csaT0wLG89W10sYT0wO3Q9bi5leGVjKGUpOyl7KHI9ZS5zdWJzdHJpbmcoYSxuLmxhc3RJbmRleC0yKSkubGVuZ3RoPjAmJm8ucHVzaChyKSxhPW4ubGFzdEluZGV4O3ZhciBzPXRbMF1bMV07c3dpdGNoKHMpe2Nhc2UicyI6Y2FzZSJvIjppPGFyZ3VtZW50cy5sZW5ndGg/by5wdXNoKGFyZ3VtZW50c1sxK2krK10pOm8ucHVzaCgiPD8+Iik7YnJlYWs7Y2FzZSIlIjpvLnB1c2goIiUiKTticmVhaztkZWZhdWx0Om8ucHVzaCgiPCUiK3MrIj8+Iil9fXJldHVybiBvLnB1c2goZS5zdWJzdHJpbmcoYSkpLG8uam9pbigiIil9LHUuZm9ybWF0TnVtYmVyPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUsbz1pc05hTih0PU1hdGguYWJzKHQpKT8yOnQsYT12b2lkIDA9PT1yPyIsIjpyLHM9dm9pZCAwPT09bj8iLiI6bix1PWk8MD8iLSI6IiIsYz1wYXJzZUludChpPU1hdGguYWJzKCtpfHwwKS50b0ZpeGVkKG8pLDEwKSsiIixmPWMubGVuZ3RoPjM/Yy5sZW5ndGglMzowO3JldHVybiB1KyhmP2Muc3Vic3RyKDAsZikrczoiIikrYy5zdWJzdHIoZikucmVwbGFjZSgvKFxkezN9KSg/PVxkKS9nLCIkMSIrcykrKG8/YStNYXRoLmFicyhpLWMpLnRvRml4ZWQobykuc2xpY2UoMik6IiIpfSx1LmZvcm1hdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT49MTA3Mzc0MTgyND91LmZvcm1hdE51bWJlcihlLzEwNzM3NDE4MjQsMiwiLiIsIiIpKyIgR2lCIjplPj0xMDQ4NTc2P3UuZm9ybWF0TnVtYmVyKGUvMTA0ODU3NiwyLCIuIiwiIikrIiBNaUIiOmU+PTEwMjQ/dS5mb3JtYXROdW1iZXIoZS8xMDI0LDApKyIgS2lCIjp1LmZvcm1hdE51bWJlcihlLDApKyIgYnl0ZXMifSx1LmJ5dGVzRnJvbUlQPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCIuIik/dS5ieXRlc0Zyb21JUHY0KGUpOi0xIT09ZS5pbmRleE9mKCI6Iik/dS5ieXRlc0Zyb21JUHY2KGUpOm51bGx9LHUuYnl0ZXNGcm9tSVB2ND1mdW5jdGlvbihlKXtpZig0IT09KGU9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXUuY3JlYXRlQnVmZmVyKCkscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtpZihpc05hTihuKSlyZXR1cm4gbnVsbDt0LnB1dEJ5dGUobil9cmV0dXJuIHQuZ2V0Qnl0ZXMoKX0sdS5ieXRlc0Zyb21JUHY2PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MiooOC0oZT1lLnNwbGl0KCI6IikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5sZW5ndGgmJisrdCwhMH0pKS5sZW5ndGgrdCksbj11LmNyZWF0ZUJ1ZmZlcigpLGk9MDtpPDg7KytpKWlmKGVbaV0mJjAhPT1lW2ldLmxlbmd0aCl7dmFyIG89dS5oZXhUb0J5dGVzKGVbaV0pO28ubGVuZ3RoPDImJm4ucHV0Qnl0ZSgwKSxuLnB1dEJ5dGVzKG8pfWVsc2Ugbi5maWxsV2l0aEJ5dGUoMCxyKSxyPTA7cmV0dXJuIG4uZ2V0Qnl0ZXMoKX0sdS5ieXRlc1RvSVA9ZnVuY3Rpb24oZSl7cmV0dXJuIDQ9PT1lLmxlbmd0aD91LmJ5dGVzVG9JUHY0KGUpOjE2PT09ZS5sZW5ndGg/dS5ieXRlc1RvSVB2NihlKTpudWxsfSx1LmJ5dGVzVG9JUHY0PWZ1bmN0aW9uKGUpe2lmKDQhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikpO3JldHVybiB0LmpvaW4oIi4iKX0sdS5ieXRlc1RvSVB2Nj1mdW5jdGlvbihlKXtpZigxNiE9PWUubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgdD1bXSxyPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKz0yKXtmb3IodmFyIG89dS5ieXRlc1RvSGV4KGVbaV0rZVtpKzFdKTsiMCI9PT1vWzBdJiYiMCIhPT1vOylvPW8uc3Vic3RyKDEpO2lmKCIwIj09PW8pe3ZhciBhPXJbci5sZW5ndGgtMV0scz10Lmxlbmd0aDthJiZzPT09YS5lbmQrMT8oYS5lbmQ9cyxhLmVuZC1hLnN0YXJ0PnJbbl0uZW5kLXJbbl0uc3RhcnQmJihuPXIubGVuZ3RoLTEpKTpyLnB1c2goe3N0YXJ0OnMsZW5kOnN9KX10LnB1c2gobyl9aWYoci5sZW5ndGg+MCl7dmFyIGM9cltuXTtjLmVuZC1jLnN0YXJ0PjAmJih0LnNwbGljZShjLnN0YXJ0LGMuZW5kLWMuc3RhcnQrMSwiIiksMD09PWMuc3RhcnQmJnQudW5zaGlmdCgiIiksNz09PWMuZW5kJiZ0LnB1c2goIiIpKX1yZXR1cm4gdC5qb2luKCI6Iil9LHUuZXN0aW1hdGVDb3Jlcz1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZSYmKHQ9ZSxlPXt9KSxlPWV8fHt9LCJjb3JlcyJpbiB1JiYhZS51cGRhdGUpcmV0dXJuIHQobnVsbCx1LmNvcmVzKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJiJoYXJkd2FyZUNvbmN1cnJlbmN5ImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k+MClyZXR1cm4gdS5jb3Jlcz1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSx0KG51bGwsdS5jb3Jlcyk7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgV29ya2VyKXJldHVybiB1LmNvcmVzPTEsdChudWxsLHUuY29yZXMpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEJsb2IpcmV0dXJuIHUuY29yZXM9Mix0KG51bGwsdS5jb3Jlcyk7dmFyIHI9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbIigiLGZ1bmN0aW9uKCl7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxyPXQrNDtEYXRlLm5vdygpPHI7KTtzZWxmLnBvc3RNZXNzYWdlKHtzdDp0LGV0OnJ9KX0pfS50b1N0cmluZygpLCIpKCkiXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KSk7IWZ1bmN0aW9uIGUobixpLG8pe2lmKDA9PT1pKXt2YXIgYT1NYXRoLmZsb29yKG4ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCkvbi5sZW5ndGgpO3JldHVybiB1LmNvcmVzPU1hdGgubWF4KDEsYSksVVJMLnJldm9rZU9iamVjdFVSTChyKSx0KG51bGwsdS5jb3Jlcyl9IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9W10sbz0wO288ZTsrK28pe3ZhciBhPW5ldyBXb3JrZXIocik7YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihyKXtpZihpLnB1c2goci5kYXRhKSxpLmxlbmd0aD09PWUpe2Zvcih2YXIgbz0wO288ZTsrK28pbltvXS50ZXJtaW5hdGUoKTt0KG51bGwsaSl9fSksbi5wdXNoKGEpfWZvcih2YXIgbz0wO288ZTsrK28pbltvXS5wb3N0TWVzc2FnZShvKX0obyxmdW5jdGlvbih0LHIpe24ucHVzaChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjxlOysrbilmb3IodmFyIGk9dFtuXSxvPXJbbl09W10sYT0wO2E8ZTsrK2EpaWYobiE9PWEpe3ZhciBzPXRbYV07KGkuc3Q+cy5zdCYmaS5zdDxzLmV0fHxzLnN0Pmkuc3QmJnMuc3Q8aS5ldCkmJm8ucHVzaChhKX1yZXR1cm4gci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0Lmxlbmd0aCl9LDApfShvLHIpKSxlKG4saS0xLG8pfSl9KFtdLDUsMTYpfX0pLmNhbGwodGhpcyxyKDQ2KSxyKDMxMikuc2V0SW1tZWRpYXRlLHIoMzQpLHIoMTgpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ci5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuR0VORVNJUz0xXT0iR0VORVNJUyIsZVtlLlBBWU1FTlQ9Ml09IlBBWU1FTlQiLGVbZS5JU1NVRT0zXT0iSVNTVUUiLGVbZS5UUkFOU0ZFUj00XT0iVFJBTlNGRVIiLGVbZS5SRUlTU1VFPTVdPSJSRUlTU1VFIixlW2UuQlVSTj02XT0iQlVSTiIsZVtlLkVYQ0hBTkdFPTddPSJFWENIQU5HRSIsZVtlLkxFQVNFPThdPSJMRUFTRSIsZVtlLkNBTkNFTF9MRUFTRT05XT0iQ0FOQ0VMX0xFQVNFIixlW2UuQUxJQVM9MTBdPSJBTElBUyIsZVtlLk1BU1NfVFJBTlNGRVI9MTFdPSJNQVNTX1RSQU5TRkVSIixlW2UuREFUQT0xMl09IkRBVEEiLGVbZS5TRVRfU0NSSVBUPTEzXT0iU0VUX1NDUklQVCIsZVtlLlNQT05TT1JTSElQPTE0XT0iU1BPTlNPUlNISVAiLGVbZS5TRVRfQVNTRVRfU0NSSVBUPTE1XT0iU0VUX0FTU0VUX1NDUklQVCIsZVtlLklOVk9LRV9TQ1JJUFQ9MTZdPSJJTlZPS0VfU0NSSVBUIn0odC5UUkFOU0FDVElPTl9UWVBFfHwodC5UUkFOU0FDVElPTl9UWVBFPXt9KSksZnVuY3Rpb24oZSl7ZS5JTlRFR0VSPSJpbnRlZ2VyIixlLkJPT0xFQU49ImJvb2xlYW4iLGUuQklOQVJZPSJiaW5hcnkiLGUuU1RSSU5HPSJzdHJpbmcifSh0LkRBVEFfRklFTERfVFlQRXx8KHQuREFUQV9GSUVMRF9UWVBFPXt9KSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczKSxpPXIoMTUwKSxvPXIoNDU3KSxhPXIoNDYxKSxzPXIoNDY0KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoMjA0KSxpPXIoNTQ4KSxvPXIoMzA2KTtmdW5jdGlvbiBhKCl7cmV0dXJuIHUuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gcyhlLHQpe2lmKGEoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz11LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyB1KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHUoZSx0LHIpe2lmKCF1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdShlLHQscik7aWYoIm51bWJlciI9PT10eXBlb2YgZSl7aWYoInN0cmluZyI9PT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodGhpcyxlKX1yZXR1cm4gYyh0aGlzLGUsdCxyKX1mdW5jdGlvbiBjKGUsdCxyLG4pe2lmKCJudW1iZXIiPT09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTt1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXUucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGQodCxyKSxpPShlPXMoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYodS5pc0J1ZmZlcih0KSl7dmFyIHI9MHxwKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXMoZSxyKSkubGVuZ3RoP2U6KHQuY29weShlLDAsMCxyKSxlKX1pZih0KXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT09dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPT1uP3MoZSwwKTpoKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJm8odC5kYXRhKSlyZXR1cm4gaChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGYoZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gbChlLHQpe2lmKGYodCksZT1zKGUsdDwwPzA6MHxwKHQpKSwhdS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxwKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7aWYoZT49YSgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGQoZSx0KXtpZih1LmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9PXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBGKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBGKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT09dHlwZW9mIHQmJih0PXUuZnJvbSh0LG4pKSx1LmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6dihlLHQscixuLGkpO2lmKCJudW1iZXIiPT09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6dihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdihlLHQscixuLGkpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGY9LTE7Zm9yKG89cjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWY/MDpvLWYpKXtpZigtMT09PWYmJihmPW8pLG8tZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihvLT1vLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsaD0wO2g8dTtoKyspaWYoYyhlLG8raCkhPT1jKHQsaCkpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBtKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQscixuKXtyZXR1cm4gcShGKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIF8oZSx0LHIsbil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBfKGUsdCxyLG4pfWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIHEoVih0KSxlLHIsbil9ZnVuY3Rpb24gdyhlLHQscixuKXtyZXR1cm4gcShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKXI9ZS5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFQoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP24uZnJvbUJ5dGVBcnJheShlKTpuLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBBKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8sYSxzLHUsYz1lW2ldLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6bz1lW2krMV0sYT1lW2krMl0sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmMTI4PT09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9QykpO3JldHVybiByfShuKX10LkJ1ZmZlcj11LHQuU2xvd0J1ZmZlcj1mdW5jdGlvbihlKXsrZSE9ZSYmKGU9MCk7cmV0dXJuIHUuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLHUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1hKCksdS5wb29sU2l6ZT04MTkyLHUuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXUucHJvdG90eXBlLGV9LHUuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LHUuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHUucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx1Ll9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnVbU3ltYm9sLnNwZWNpZXNdPT09dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHUuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZih0KSx0PD0wP3MoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT09dHlwZW9mIG4/cyhlLHQpLmZpbGwocixuKTpzKGUsdCkuZmlsbChyKTpzKGUsdCl9KG51bGwsZSx0LHIpfSx1LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSx1LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighdS5pc0J1ZmZlcihlKXx8IXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHUuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdS5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighbyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49dS5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGE9ZVtyXTtpZighdS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHUuYnl0ZUxlbmd0aD1kLHUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx1LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXkodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpeSh0aGlzLHQsdCszKSx5KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeSh0aGlzLHQsdCs3KSx5KHRoaXMsdCsxLHQrNikseSh0aGlzLHQrMix0KzUpLHkodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCxlKTpmdW5jdGlvbihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBrKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBBKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIE8odGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF1LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT11LmNvbXBhcmUodGhpcyxlKX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLHI9dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5yJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LHUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighdS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSxmPWUuc2xpY2UodCxyKSxsPTA7bDxzOysrbClpZihjW2xdIT09ZltsXSl7bz1jW2xdLGE9ZltsXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LHUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBnKHRoaXMsZSx0LHIsITApfSx1LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGcodGhpcyxlLHQsciwhMSl9LHUucHJvdG90eXBlLg=="
}
Changelog:
{
"2019.12.27 16:44": "base64:Ti5kZWNvZGUoZSxwLHQpfSx1LnRleHQ9e3V0Zjg6e30sdXRmMTY6e319LHUudGV4dC51dGY4LmVuY29kZT1mdW5jdGlvbihlLHQscil7ZT11LmVuY29kZVV0ZjgoZSk7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgaT1yPXJ8fDAsbz0wO288ZS5sZW5ndGg7KytvKW5baSsrXT1lLmNoYXJDb2RlQXQobyk7cmV0dXJuIHQ/aS1yOm59LHUudGV4dC51dGY4LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gdS5kZWNvZGVVdGY4KFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKSl9LHUudGV4dC51dGYxNi5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkpO2Zvcih2YXIgaT1uZXcgVWludDE2QXJyYXkobi5idWZmZXIpLG89cj1yfHwwLGE9cixzPTA7czxlLmxlbmd0aDsrK3MpaVthKytdPWUuY2hhckNvZGVBdChzKSxvKz0yO3JldHVybiB0P28tcjpufSx1LnRleHQudXRmMTYuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQxNkFycmF5KGUuYnVmZmVyKSl9LHUuZGVmbGF0ZT1mdW5jdGlvbihlLHQscil7aWYodD11LmRlY29kZTY0KGUuZGVmbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsKSxyKXt2YXIgbj0yOzMyJnQuY2hhckNvZGVBdCgxKSYmKG49NiksdD10LnN1YnN0cmluZyhuLHQubGVuZ3RoLTQpfXJldHVybiB0fSx1LmluZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuaW5mbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsO3JldHVybiBudWxsPT09bj9udWxsOnUuZGVjb2RlNjQobil9O3ZhciBkPWZ1bmN0aW9uKGUsdCxyKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgbjtpZihudWxsPT09cj9uPWUucmVtb3ZlSXRlbSh0KToocj11LmVuY29kZTY0KEpTT04uc3RyaW5naWZ5KHIpKSxuPWUuc2V0SXRlbSh0LHIpKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBuJiYhMCE9PW4ucnZhbCl7dmFyIGk9bmV3IEVycm9yKG4uZXJyb3IubWVzc2FnZSk7dGhyb3cgaS5pZD1uLmVycm9yLmlkLGkubmFtZT1uLmVycm9yLm5hbWUsaX19LHk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgcj1lLmdldEl0ZW0odCk7aWYoZS5pbml0KWlmKG51bGw9PT1yLnJ2YWwpe2lmKHIuZXJyb3Ipe3ZhciBuPW5ldyBFcnJvcihyLmVycm9yLm1lc3NhZ2UpO3Rocm93IG4uaWQ9ci5lcnJvci5pZCxuLm5hbWU9ci5lcnJvci5uYW1lLG59cj1udWxsfWVsc2Ugcj1yLnJ2YWw7cmV0dXJuIG51bGwhPT1yJiYocj1KU09OLnBhcnNlKHUuZGVjb2RlNjQocikpKSxyfSxnPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXkoZSx0KTtudWxsPT09aSYmKGk9e30pLGlbcl09bixkKGUsdCxpKX0sdj1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO3JldHVybiBudWxsIT09biYmKG49ciBpbiBuP25bcl06bnVsbCksbn0sbT1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO2lmKG51bGwhPT1uJiZyIGluIG4pe2RlbGV0ZSBuW3JdO3ZhciBpPSEwO2Zvcih2YXIgbyBpbiBuKXtpPSExO2JyZWFrfWkmJihuPW51bGwpLGQoZSx0LG4pfX0sYj1mdW5jdGlvbihlLHQpe2QoZSx0LG51bGwpfSxfPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpPW51bGw7InVuZGVmaW5lZCI9PT10eXBlb2YgciYmKHI9WyJ3ZWIiLCJmbGFzaCJdKTt2YXIgbz0hMSxhPW51bGw7Zm9yKHZhciBzIGluIHIpe249cltzXTt0cnl7aWYoImZsYXNoIj09PW58fCJib3RoIj09PW4pe2lmKG51bGw9PT10WzBdKXRocm93IG5ldyBFcnJvcigiRmxhc2ggbG9jYWwgc3RvcmFnZSBub3QgYXZhaWxhYmxlLiIpO2k9ZS5hcHBseSh0aGlzLHQpLG89ImZsYXNoIj09PW59IndlYiIhPT1uJiYiYm90aCIhPT1ufHwodFswXT1sb2NhbFN0b3JhZ2UsaT1lLmFwcGx5KHRoaXMsdCksbz0hMCl9Y2F0Y2godSl7YT11fWlmKG8pYnJlYWt9aWYoIW8pdGhyb3cgYTtyZXR1cm4gaX07dS5zZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4saSl7XyhnLGFyZ3VtZW50cyxpKX0sdS5nZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBfKHYsYXJndW1lbnRzLG4pfSx1LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSx0LHIsbil7XyhtLGFyZ3VtZW50cyxuKX0sdS5jbGVhckl0ZW1zPWZ1bmN0aW9uKGUsdCxyKXtfKGIsYXJndW1lbnRzLHIpfSx1LnBhcnNlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PS9eKGh0dHBzPyk6XC9cLyhbXjomXlwvXSopOj8oXGQqKSguKikkL2c7dC5sYXN0SW5kZXg9MDt2YXIgcj10LmV4ZWMoZSksbj1udWxsPT09cj9udWxsOntmdWxsOmUsc2NoZW1lOnJbMV0saG9zdDpyWzJdLHBvcnQ6clszXSxwYXRoOnJbNF19O3JldHVybiBuJiYobi5mdWxsSG9zdD1uLmhvc3Qsbi5wb3J0PzgwIT09bi5wb3J0JiYiaHR0cCI9PT1uLnNjaGVtZT9uLmZ1bGxIb3N0Kz0iOiIrbi5wb3J0OjQ0MyE9PW4ucG9ydCYmImh0dHBzIj09PW4uc2NoZW1lJiYobi5mdWxsSG9zdCs9IjoiK24ucG9ydCk6Imh0dHAiPT09bi5zY2hlbWU/bi5wb3J0PTgwOiJodHRwcyI9PT1uLnNjaGVtZSYmKG4ucG9ydD00NDMpLG4uZnVsbD1uLnNjaGVtZSsiOi8vIituLmZ1bGxIb3N0KSxufTt2YXIgUz1udWxsO3UuZ2V0UXVlcnlWYXJpYWJsZXM9ZnVuY3Rpb24oZSl7dmFyIHQscj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1lLnNwbGl0KCImIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaSxvLGE9cltuXS5pbmRleE9mKCI9Iik7YT4wPyhpPXJbbl0uc3Vic3RyaW5nKDAsYSksbz1yW25dLnN1YnN0cmluZyhhKzEpKTooaT1yW25dLG89bnVsbCksaSBpbiB0fHwodFtpXT1bXSksaSBpbiBPYmplY3QucHJvdG90eXBlfHxudWxsPT09b3x8dFtpXS5wdXNoKHVuZXNjYXBlKG8pKX1yZXR1cm4gdH07cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT8obnVsbD09PVMmJihTPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uc2VhcmNoP3Iod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkpOnt9KSx0PVMpOnQ9cihlKSx0fSx1LnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPSIiLG49ZS5pbmRleE9mKCI/Iik7bj4wJiYodD1lLnN1YnN0cmluZygwLG4pLHI9ZS5zdWJzdHJpbmcobisxKSk7dmFyIGk9dC5zcGxpdCgiLyIpO3JldHVybiBpLmxlbmd0aD4wJiYiIj09PWlbMF0mJmkuc2hpZnQoKSx7cGF0aFN0cmluZzp0LHF1ZXJ5U3RyaW5nOnIscGF0aDppLHF1ZXJ5OiIiPT09cj97fTp1LmdldFF1ZXJ5VmFyaWFibGVzKHIpfX0sdS5tYWtlUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD11LnBhcnNlRnJhZ21lbnQoZSkscj17cGF0aDp0LnBhdGhTdHJpbmcscXVlcnk6dC5xdWVyeVN0cmluZyxnZXRQYXRoOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dC5wYXRoOnQucGF0aFtlXX0sZ2V0UXVlcnk6ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBlP249dC5xdWVyeToobj10LnF1ZXJ5W2VdKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgciYmKG49bltyXSksbn0sZ2V0UXVlcnlMYXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXRRdWVyeShlKTtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnR9fTtyZXR1cm4gcn0sdS5tYWtlTGluaz1mdW5jdGlvbihlLHQscil7ZT1qUXVlcnkuaXNBcnJheShlKT9lLmpvaW4oIi8iKTplO3ZhciBuPWpRdWVyeS5wYXJhbSh0fHx7fSk7cmV0dXJuIHI9cnx8IiIsZSsobi5sZW5ndGg+MD8iPyIrbjoiIikrKHIubGVuZ3RoPjA/IiMiK3I6IiIpfSx1LnNldFBhdGg9ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOyl7dmFyIG89dFtuKytdO2lmKG49PWkpZVtvXT1yO2Vsc2V7dmFyIGE9byBpbiBlOyghYXx8YSYmIm9iamVjdCIhPT10eXBlb2YgZVtvXXx8YSYmbnVsbD09PWVbb10pJiYoZVtvXT17fSksZT1lW29dfX19LHUuZ2V0UGF0aD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aCxvPSEwO28mJm48aSYmIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWU7KXt2YXIgYT10W24rK107KG89YSBpbiBlKSYmKGU9ZVthXSl9cmV0dXJuIG8/ZTpyfSx1LmRlbGV0ZVBhdGg9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0Ij09PXR5cGVvZiBlJiZudWxsIT09ZSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXRbcisrXTtpZihyPT1uKWRlbGV0ZSBlW2ldO2Vsc2V7aWYoIShpIGluIGUpfHwib2JqZWN0IiE9PXR5cGVvZiBlW2ldfHxudWxsPT09ZVtpXSlicmVhaztlPWVbaV19fX0sdS5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITE7cmV0dXJuITB9LHUuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49LyUuL2csaT0wLG89W10sYT0wO3Q9bi5leGVjKGUpOyl7KHI9ZS5zdWJzdHJpbmcoYSxuLmxhc3RJbmRleC0yKSkubGVuZ3RoPjAmJm8ucHVzaChyKSxhPW4ubGFzdEluZGV4O3ZhciBzPXRbMF1bMV07c3dpdGNoKHMpe2Nhc2UicyI6Y2FzZSJvIjppPGFyZ3VtZW50cy5sZW5ndGg/by5wdXNoKGFyZ3VtZW50c1sxK2krK10pOm8ucHVzaCgiPD8+Iik7YnJlYWs7Y2FzZSIlIjpvLnB1c2goIiUiKTticmVhaztkZWZhdWx0Om8ucHVzaCgiPCUiK3MrIj8+Iil9fXJldHVybiBvLnB1c2goZS5zdWJzdHJpbmcoYSkpLG8uam9pbigiIil9LHUuZm9ybWF0TnVtYmVyPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUsbz1pc05hTih0PU1hdGguYWJzKHQpKT8yOnQsYT12b2lkIDA9PT1yPyIsIjpyLHM9dm9pZCAwPT09bj8iLiI6bix1PWk8MD8iLSI6IiIsYz1wYXJzZUludChpPU1hdGguYWJzKCtpfHwwKS50b0ZpeGVkKG8pLDEwKSsiIixmPWMubGVuZ3RoPjM/Yy5sZW5ndGglMzowO3JldHVybiB1KyhmP2Muc3Vic3RyKDAsZikrczoiIikrYy5zdWJzdHIoZikucmVwbGFjZSgvKFxkezN9KSg/PVxkKS9nLCIkMSIrcykrKG8/YStNYXRoLmFicyhpLWMpLnRvRml4ZWQobykuc2xpY2UoMik6IiIpfSx1LmZvcm1hdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT49MTA3Mzc0MTgyND91LmZvcm1hdE51bWJlcihlLzEwNzM3NDE4MjQsMiwiLiIsIiIpKyIgR2lCIjplPj0xMDQ4NTc2P3UuZm9ybWF0TnVtYmVyKGUvMTA0ODU3NiwyLCIuIiwiIikrIiBNaUIiOmU+PTEwMjQ/dS5mb3JtYXROdW1iZXIoZS8xMDI0LDApKyIgS2lCIjp1LmZvcm1hdE51bWJlcihlLDApKyIgYnl0ZXMifSx1LmJ5dGVzRnJvbUlQPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCIuIik/dS5ieXRlc0Zyb21JUHY0KGUpOi0xIT09ZS5pbmRleE9mKCI6Iik/dS5ieXRlc0Zyb21JUHY2KGUpOm51bGx9LHUuYnl0ZXNGcm9tSVB2ND1mdW5jdGlvbihlKXtpZig0IT09KGU9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXUuY3JlYXRlQnVmZmVyKCkscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtpZihpc05hTihuKSlyZXR1cm4gbnVsbDt0LnB1dEJ5dGUobil9cmV0dXJuIHQuZ2V0Qnl0ZXMoKX0sdS5ieXRlc0Zyb21JUHY2PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MiooOC0oZT1lLnNwbGl0KCI6IikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5sZW5ndGgmJisrdCwhMH0pKS5sZW5ndGgrdCksbj11LmNyZWF0ZUJ1ZmZlcigpLGk9MDtpPDg7KytpKWlmKGVbaV0mJjAhPT1lW2ldLmxlbmd0aCl7dmFyIG89dS5oZXhUb0J5dGVzKGVbaV0pO28ubGVuZ3RoPDImJm4ucHV0Qnl0ZSgwKSxuLnB1dEJ5dGVzKG8pfWVsc2Ugbi5maWxsV2l0aEJ5dGUoMCxyKSxyPTA7cmV0dXJuIG4uZ2V0Qnl0ZXMoKX0sdS5ieXRlc1RvSVA9ZnVuY3Rpb24oZSl7cmV0dXJuIDQ9PT1lLmxlbmd0aD91LmJ5dGVzVG9JUHY0KGUpOjE2PT09ZS5sZW5ndGg/dS5ieXRlc1RvSVB2NihlKTpudWxsfSx1LmJ5dGVzVG9JUHY0PWZ1bmN0aW9uKGUpe2lmKDQhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikpO3JldHVybiB0LmpvaW4oIi4iKX0sdS5ieXRlc1RvSVB2Nj1mdW5jdGlvbihlKXtpZigxNiE9PWUubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgdD1bXSxyPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKz0yKXtmb3IodmFyIG89dS5ieXRlc1RvSGV4KGVbaV0rZVtpKzFdKTsiMCI9PT1vWzBdJiYiMCIhPT1vOylvPW8uc3Vic3RyKDEpO2lmKCIwIj09PW8pe3ZhciBhPXJbci5sZW5ndGgtMV0scz10Lmxlbmd0aDthJiZzPT09YS5lbmQrMT8oYS5lbmQ9cyxhLmVuZC1hLnN0YXJ0PnJbbl0uZW5kLXJbbl0uc3RhcnQmJihuPXIubGVuZ3RoLTEpKTpyLnB1c2goe3N0YXJ0OnMsZW5kOnN9KX10LnB1c2gobyl9aWYoci5sZW5ndGg+MCl7dmFyIGM9cltuXTtjLmVuZC1jLnN0YXJ0PjAmJih0LnNwbGljZShjLnN0YXJ0LGMuZW5kLWMuc3RhcnQrMSwiIiksMD09PWMuc3RhcnQmJnQudW5zaGlmdCgiIiksNz09PWMuZW5kJiZ0LnB1c2goIiIpKX1yZXR1cm4gdC5qb2luKCI6Iil9LHUuZXN0aW1hdGVDb3Jlcz1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZSYmKHQ9ZSxlPXt9KSxlPWV8fHt9LCJjb3JlcyJpbiB1JiYhZS51cGRhdGUpcmV0dXJuIHQobnVsbCx1LmNvcmVzKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJiJoYXJkd2FyZUNvbmN1cnJlbmN5ImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k+MClyZXR1cm4gdS5jb3Jlcz1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSx0KG51bGwsdS5jb3Jlcyk7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgV29ya2VyKXJldHVybiB1LmNvcmVzPTEsdChudWxsLHUuY29yZXMpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEJsb2IpcmV0dXJuIHUuY29yZXM9Mix0KG51bGwsdS5jb3Jlcyk7dmFyIHI9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbIigiLGZ1bmN0aW9uKCl7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxyPXQrNDtEYXRlLm5vdygpPHI7KTtzZWxmLnBvc3RNZXNzYWdlKHtzdDp0LGV0OnJ9KX0pfS50b1N0cmluZygpLCIpKCkiXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KSk7IWZ1bmN0aW9uIGUobixpLG8pe2lmKDA9PT1pKXt2YXIgYT1NYXRoLmZsb29yKG4ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCkvbi5sZW5ndGgpO3JldHVybiB1LmNvcmVzPU1hdGgubWF4KDEsYSksVVJMLnJldm9rZU9iamVjdFVSTChyKSx0KG51bGwsdS5jb3Jlcyl9IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9W10sbz0wO288ZTsrK28pe3ZhciBhPW5ldyBXb3JrZXIocik7YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihyKXtpZihpLnB1c2goci5kYXRhKSxpLmxlbmd0aD09PWUpe2Zvcih2YXIgbz0wO288ZTsrK28pbltvXS50ZXJtaW5hdGUoKTt0KG51bGwsaSl9fSksbi5wdXNoKGEpfWZvcih2YXIgbz0wO288ZTsrK28pbltvXS5wb3N0TWVzc2FnZShvKX0obyxmdW5jdGlvbih0LHIpe24ucHVzaChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjxlOysrbilmb3IodmFyIGk9dFtuXSxvPXJbbl09W10sYT0wO2E8ZTsrK2EpaWYobiE9PWEpe3ZhciBzPXRbYV07KGkuc3Q+cy5zdCYmaS5zdDxzLmV0fHxzLnN0Pmkuc3QmJnMuc3Q8aS5ldCkmJm8ucHVzaChhKX1yZXR1cm4gci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0Lmxlbmd0aCl9LDApfShvLHIpKSxlKG4saS0xLG8pfSl9KFtdLDUsMTYpfX0pLmNhbGwodGhpcyxyKDQ2KSxyKDMxMikuc2V0SW1tZWRpYXRlLHIoMzQpLHIoMTgpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ci5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuR0VORVNJUz0xXT0iR0VORVNJUyIsZVtlLlBBWU1FTlQ9Ml09IlBBWU1FTlQiLGVbZS5JU1NVRT0zXT0iSVNTVUUiLGVbZS5UUkFOU0ZFUj00XT0iVFJBTlNGRVIiLGVbZS5SRUlTU1VFPTVdPSJSRUlTU1VFIixlW2UuQlVSTj02XT0iQlVSTiIsZVtlLkVYQ0hBTkdFPTddPSJFWENIQU5HRSIsZVtlLkxFQVNFPThdPSJMRUFTRSIsZVtlLkNBTkNFTF9MRUFTRT05XT0iQ0FOQ0VMX0xFQVNFIixlW2UuQUxJQVM9MTBdPSJBTElBUyIsZVtlLk1BU1NfVFJBTlNGRVI9MTFdPSJNQVNTX1RSQU5TRkVSIixlW2UuREFUQT0xMl09IkRBVEEiLGVbZS5TRVRfU0NSSVBUPTEzXT0iU0VUX1NDUklQVCIsZVtlLlNQT05TT1JTSElQPTE0XT0iU1BPTlNPUlNISVAiLGVbZS5TRVRfQVNTRVRfU0NSSVBUPTE1XT0iU0VUX0FTU0VUX1NDUklQVCIsZVtlLklOVk9LRV9TQ1JJUFQ9MTZdPSJJTlZPS0VfU0NSSVBUIn0odC5UUkFOU0FDVElPTl9UWVBFfHwodC5UUkFOU0FDVElPTl9UWVBFPXt9KSksZnVuY3Rpb24oZSl7ZS5JTlRFR0VSPSJpbnRlZ2VyIixlLkJPT0xFQU49ImJvb2xlYW4iLGUuQklOQVJZPSJiaW5hcnkiLGUuU1RSSU5HPSJzdHJpbmcifSh0LkRBVEFfRklFTERfVFlQRXx8KHQuREFUQV9GSUVMRF9UWVBFPXt9KSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczKSxpPXIoMTUwKSxvPXIoNDU3KSxhPXIoNDYxKSxzPXIoNDY0KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoMjA0KSxpPXIoNTQ4KSxvPXIoMzA2KTtmdW5jdGlvbiBhKCl7cmV0dXJuIHUuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gcyhlLHQpe2lmKGEoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz11LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyB1KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHUoZSx0LHIpe2lmKCF1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdShlLHQscik7aWYoIm51bWJlciI9PT10eXBlb2YgZSl7aWYoInN0cmluZyI9PT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodGhpcyxlKX1yZXR1cm4gYyh0aGlzLGUsdCxyKX1mdW5jdGlvbiBjKGUsdCxyLG4pe2lmKCJudW1iZXIiPT09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTt1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXUucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGQodCxyKSxpPShlPXMoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYodS5pc0J1ZmZlcih0KSl7dmFyIHI9MHxwKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXMoZSxyKSkubGVuZ3RoP2U6KHQuY29weShlLDAsMCxyKSxlKX1pZih0KXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT09dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPT1uP3MoZSwwKTpoKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJm8odC5kYXRhKSlyZXR1cm4gaChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGYoZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gbChlLHQpe2lmKGYodCksZT1zKGUsdDwwPzA6MHxwKHQpKSwhdS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxwKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7aWYoZT49YSgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGQoZSx0KXtpZih1LmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9PXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBGKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBGKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT09dHlwZW9mIHQmJih0PXUuZnJvbSh0LG4pKSx1LmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6dihlLHQscixuLGkpO2lmKCJudW1iZXIiPT09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6dihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdihlLHQscixuLGkpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGY9LTE7Zm9yKG89cjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWY/MDpvLWYpKXtpZigtMT09PWYmJihmPW8pLG8tZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihvLT1vLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsaD0wO2g8dTtoKyspaWYoYyhlLG8raCkhPT1jKHQsaCkpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBtKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQscixuKXtyZXR1cm4gcShGKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIF8oZSx0LHIsbil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBfKGUsdCxyLG4pfWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIHEoVih0KSxlLHIsbil9ZnVuY3Rpb24gdyhlLHQscixuKXtyZXR1cm4gcShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKXI9ZS5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFQoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP24uZnJvbUJ5dGVBcnJheShlKTpuLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBBKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8sYSxzLHUsYz1lW2ldLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6bz1lW2krMV0sYT1lW2krMl0sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmMTI4PT09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9QykpO3JldHVybiByfShuKX10LkJ1ZmZlcj11LHQuU2xvd0J1ZmZlcj1mdW5jdGlvbihlKXsrZSE9ZSYmKGU9MCk7cmV0dXJuIHUuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLHUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1hKCksdS5wb29sU2l6ZT04MTkyLHUuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXUucHJvdG90eXBlLGV9LHUuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LHUuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHUucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx1Ll9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnVbU3ltYm9sLnNwZWNpZXNdPT09dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHUuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZih0KSx0PD0wP3MoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT09dHlwZW9mIG4/cyhlLHQpLmZpbGwocixuKTpzKGUsdCkuZmlsbChyKTpzKGUsdCl9KG51bGwsZSx0LHIpfSx1LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSx1LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighdS5pc0J1ZmZlcihlKXx8IXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHUuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdS5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighbyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49dS5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGE9ZVtyXTtpZighdS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHUuYnl0ZUxlbmd0aD1kLHUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx1LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXkodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpeSh0aGlzLHQsdCszKSx5KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeSh0aGlzLHQsdCs3KSx5KHRoaXMsdCsxLHQrNikseSh0aGlzLHQrMix0KzUpLHkodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCxlKTpmdW5jdGlvbihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBrKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBBKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIE8odGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF1LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT11LmNvbXBhcmUodGhpcyxlKX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLHI9dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5yJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LHUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighdS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSxmPWUuc2xpY2UodCxyKSxsPTA7bDxzOysrbClpZihjW2xdIT09ZltsXSl7bz1jW2xdLGE9ZltsXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LHUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBnKHRoaXMsZSx0LHIsITApfSx1LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGcodGhpcyxlLHQsciwhMSl9LHUucHJvdG90eXBlLg==",
"2019.12.27 16:43": "base64:Ti5kZWNvZGUoZSxwLHQpfSx1LnRleHQ9e3V0Zjg6e30sdXRmMTY6e319LHUudGV4dC51dGY4LmVuY29kZT1mdW5jdGlvbihlLHQscil7ZT11LmVuY29kZVV0ZjgoZSk7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgaT1yPXJ8fDAsbz0wO288ZS5sZW5ndGg7KytvKW5baSsrXT1lLmNoYXJDb2RlQXQobyk7cmV0dXJuIHQ/aS1yOm59LHUudGV4dC51dGY4LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gdS5kZWNvZGVVdGY4KFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKSl9LHUudGV4dC51dGYxNi5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkpO2Zvcih2YXIgaT1uZXcgVWludDE2QXJyYXkobi5idWZmZXIpLG89cj1yfHwwLGE9cixzPTA7czxlLmxlbmd0aDsrK3MpaVthKytdPWUuY2hhckNvZGVBdChzKSxvKz0yO3JldHVybiB0P28tcjpufSx1LnRleHQudXRmMTYuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQxNkFycmF5KGUuYnVmZmVyKSl9LHUuZGVmbGF0ZT1mdW5jdGlvbihlLHQscil7aWYodD11LmRlY29kZTY0KGUuZGVmbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsKSxyKXt2YXIgbj0yOzMyJnQuY2hhckNvZGVBdCgxKSYmKG49NiksdD10LnN1YnN0cmluZyhuLHQubGVuZ3RoLTQpfXJldHVybiB0fSx1LmluZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuaW5mbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsO3JldHVybiBudWxsPT09bj9udWxsOnUuZGVjb2RlNjQobil9O3ZhciBkPWZ1bmN0aW9uKGUsdCxyKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgbjtpZihudWxsPT09cj9uPWUucmVtb3ZlSXRlbSh0KToocj11LmVuY29kZTY0KEpTT04uc3RyaW5naWZ5KHIpKSxuPWUuc2V0SXRlbSh0LHIpKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBuJiYhMCE9PW4ucnZhbCl7dmFyIGk9bmV3IEVycm9yKG4uZXJyb3IubWVzc2FnZSk7dGhyb3cgaS5pZD1uLmVycm9yLmlkLGkubmFtZT1uLmVycm9yLm5hbWUsaX19LHk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgcj1lLmdldEl0ZW0odCk7aWYoZS5pbml0KWlmKG51bGw9PT1yLnJ2YWwpe2lmKHIuZXJyb3Ipe3ZhciBuPW5ldyBFcnJvcihyLmVycm9yLm1lc3NhZ2UpO3Rocm93IG4uaWQ9ci5lcnJvci5pZCxuLm5hbWU9ci5lcnJvci5uYW1lLG59cj1udWxsfWVsc2Ugcj1yLnJ2YWw7cmV0dXJuIG51bGwhPT1yJiYocj1KU09OLnBhcnNlKHUuZGVjb2RlNjQocikpKSxyfSxnPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXkoZSx0KTtudWxsPT09aSYmKGk9e30pLGlbcl09bixkKGUsdCxpKX0sdj1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO3JldHVybiBudWxsIT09biYmKG49ciBpbiBuP25bcl06bnVsbCksbn0sbT1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO2lmKG51bGwhPT1uJiZyIGluIG4pe2RlbGV0ZSBuW3JdO3ZhciBpPSEwO2Zvcih2YXIgbyBpbiBuKXtpPSExO2JyZWFrfWkmJihuPW51bGwpLGQoZSx0LG4pfX0sYj1mdW5jdGlvbihlLHQpe2QoZSx0LG51bGwpfSxfPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpPW51bGw7InVuZGVmaW5lZCI9PT10eXBlb2YgciYmKHI9WyJ3ZWIiLCJmbGFzaCJdKTt2YXIgbz0hMSxhPW51bGw7Zm9yKHZhciBzIGluIHIpe249cltzXTt0cnl7aWYoImZsYXNoIj09PW58fCJib3RoIj09PW4pe2lmKG51bGw9PT10WzBdKXRocm93IG5ldyBFcnJvcigiRmxhc2ggbG9jYWwgc3RvcmFnZSBub3QgYXZhaWxhYmxlLiIpO2k9ZS5hcHBseSh0aGlzLHQpLG89ImZsYXNoIj09PW59IndlYiIhPT1uJiYiYm90aCIhPT1ufHwodFswXT1sb2NhbFN0b3JhZ2UsaT1lLmFwcGx5KHRoaXMsdCksbz0hMCl9Y2F0Y2godSl7YT11fWlmKG8pYnJlYWt9aWYoIW8pdGhyb3cgYTtyZXR1cm4gaX07dS5zZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4saSl7XyhnLGFyZ3VtZW50cyxpKX0sdS5nZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBfKHYsYXJndW1lbnRzLG4pfSx1LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSx0LHIsbil7XyhtLGFyZ3VtZW50cyxuKX0sdS5jbGVhckl0ZW1zPWZ1bmN0aW9uKGUsdCxyKXtfKGIsYXJndW1lbnRzLHIpfSx1LnBhcnNlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PS9eKGh0dHBzPyk6XC9cLyhbXjomXlwvXSopOj8oXGQqKSguKikkL2c7dC5sYXN0SW5kZXg9MDt2YXIgcj10LmV4ZWMoZSksbj1udWxsPT09cj9udWxsOntmdWxsOmUsc2NoZW1lOnJbMV0saG9zdDpyWzJdLHBvcnQ6clszXSxwYXRoOnJbNF19O3JldHVybiBuJiYobi5mdWxsSG9zdD1uLmhvc3Qsbi5wb3J0PzgwIT09bi5wb3J0JiYiaHR0cCI9PT1uLnNjaGVtZT9uLmZ1bGxIb3N0Kz0iOiIrbi5wb3J0OjQ0MyE9PW4ucG9ydCYmImh0dHBzIj09PW4uc2NoZW1lJiYobi5mdWxsSG9zdCs9IjoiK24ucG9ydCk6Imh0dHAiPT09bi5zY2hlbWU/bi5wb3J0PTgwOiJodHRwcyI9PT1uLnNjaGVtZSYmKG4ucG9ydD00NDMpLG4uZnVsbD1uLnNjaGVtZSsiOi8vIituLmZ1bGxIb3N0KSxufTt2YXIgUz1udWxsO3UuZ2V0UXVlcnlWYXJpYWJsZXM9ZnVuY3Rpb24oZSl7dmFyIHQscj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1lLnNwbGl0KCImIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaSxvLGE9cltuXS5pbmRleE9mKCI9Iik7YT4wPyhpPXJbbl0uc3Vic3RyaW5nKDAsYSksbz1yW25dLnN1YnN0cmluZyhhKzEpKTooaT1yW25dLG89bnVsbCksaSBpbiB0fHwodFtpXT1bXSksaSBpbiBPYmplY3QucHJvdG90eXBlfHxudWxsPT09b3x8dFtpXS5wdXNoKHVuZXNjYXBlKG8pKX1yZXR1cm4gdH07cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT8obnVsbD09PVMmJihTPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uc2VhcmNoP3Iod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkpOnt9KSx0PVMpOnQ9cihlKSx0fSx1LnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPSIiLG49ZS5pbmRleE9mKCI/Iik7bj4wJiYodD1lLnN1YnN0cmluZygwLG4pLHI9ZS5zdWJzdHJpbmcobisxKSk7dmFyIGk9dC5zcGxpdCgiLyIpO3JldHVybiBpLmxlbmd0aD4wJiYiIj09PWlbMF0mJmkuc2hpZnQoKSx7cGF0aFN0cmluZzp0LHF1ZXJ5U3RyaW5nOnIscGF0aDppLHF1ZXJ5OiIiPT09cj97fTp1LmdldFF1ZXJ5VmFyaWFibGVzKHIpfX0sdS5tYWtlUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD11LnBhcnNlRnJhZ21lbnQoZSkscj17cGF0aDp0LnBhdGhTdHJpbmcscXVlcnk6dC5xdWVyeVN0cmluZyxnZXRQYXRoOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dC5wYXRoOnQucGF0aFtlXX0sZ2V0UXVlcnk6ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBlP249dC5xdWVyeToobj10LnF1ZXJ5W2VdKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgciYmKG49bltyXSksbn0sZ2V0UXVlcnlMYXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXRRdWVyeShlKTtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnR9fTtyZXR1cm4gcn0sdS5tYWtlTGluaz1mdW5jdGlvbihlLHQscil7ZT1qUXVlcnkuaXNBcnJheShlKT9lLmpvaW4oIi8iKTplO3ZhciBuPWpRdWVyeS5wYXJhbSh0fHx7fSk7cmV0dXJuIHI9cnx8IiIsZSsobi5sZW5ndGg+MD8iPyIrbjoiIikrKHIubGVuZ3RoPjA/IiMiK3I6IiIpfSx1LnNldFBhdGg9ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOyl7dmFyIG89dFtuKytdO2lmKG49PWkpZVtvXT1yO2Vsc2V7dmFyIGE9byBpbiBlOyghYXx8YSYmIm9iamVjdCIhPT10eXBlb2YgZVtvXXx8YSYmbnVsbD09PWVbb10pJiYoZVtvXT17fSksZT1lW29dfX19LHUuZ2V0UGF0aD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aCxvPSEwO28mJm48aSYmIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWU7KXt2YXIgYT10W24rK107KG89YSBpbiBlKSYmKGU9ZVthXSl9cmV0dXJuIG8/ZTpyfSx1LmRlbGV0ZVBhdGg9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0Ij09PXR5cGVvZiBlJiZudWxsIT09ZSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXRbcisrXTtpZihyPT1uKWRlbGV0ZSBlW2ldO2Vsc2V7aWYoIShpIGluIGUpfHwib2JqZWN0IiE9PXR5cGVvZiBlW2ldfHxudWxsPT09ZVtpXSlicmVhaztlPWVbaV19fX0sdS5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITE7cmV0dXJuITB9LHUuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49LyUuL2csaT0wLG89W10sYT0wO3Q9bi5leGVjKGUpOyl7KHI9ZS5zdWJzdHJpbmcoYSxuLmxhc3RJbmRleC0yKSkubGVuZ3RoPjAmJm8ucHVzaChyKSxhPW4ubGFzdEluZGV4O3ZhciBzPXRbMF1bMV07c3dpdGNoKHMpe2Nhc2UicyI6Y2FzZSJvIjppPGFyZ3VtZW50cy5sZW5ndGg/by5wdXNoKGFyZ3VtZW50c1sxK2krK10pOm8ucHVzaCgiPD8+Iik7YnJlYWs7Y2FzZSIlIjpvLnB1c2goIiUiKTticmVhaztkZWZhdWx0Om8ucHVzaCgiPCUiK3MrIj8+Iil9fXJldHVybiBvLnB1c2goZS5zdWJzdHJpbmcoYSkpLG8uam9pbigiIil9LHUuZm9ybWF0TnVtYmVyPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUsbz1pc05hTih0PU1hdGguYWJzKHQpKT8yOnQsYT12b2lkIDA9PT1yPyIsIjpyLHM9dm9pZCAwPT09bj8iLiI6bix1PWk8MD8iLSI6IiIsYz1wYXJzZUludChpPU1hdGguYWJzKCtpfHwwKS50b0ZpeGVkKG8pLDEwKSsiIixmPWMubGVuZ3RoPjM/Yy5sZW5ndGglMzowO3JldHVybiB1KyhmP2Muc3Vic3RyKDAsZikrczoiIikrYy5zdWJzdHIoZikucmVwbGFjZSgvKFxkezN9KSg/PVxkKS9nLCIkMSIrcykrKG8/YStNYXRoLmFicyhpLWMpLnRvRml4ZWQobykuc2xpY2UoMik6IiIpfSx1LmZvcm1hdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT49MTA3Mzc0MTgyND91LmZvcm1hdE51bWJlcihlLzEwNzM3NDE4MjQsMiwiLiIsIiIpKyIgR2lCIjplPj0xMDQ4NTc2P3UuZm9ybWF0TnVtYmVyKGUvMTA0ODU3NiwyLCIuIiwiIikrIiBNaUIiOmU+PTEwMjQ/dS5mb3JtYXROdW1iZXIoZS8xMDI0LDApKyIgS2lCIjp1LmZvcm1hdE51bWJlcihlLDApKyIgYnl0ZXMifSx1LmJ5dGVzRnJvbUlQPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCIuIik/dS5ieXRlc0Zyb21JUHY0KGUpOi0xIT09ZS5pbmRleE9mKCI6Iik/dS5ieXRlc0Zyb21JUHY2KGUpOm51bGx9LHUuYnl0ZXNGcm9tSVB2ND1mdW5jdGlvbihlKXtpZig0IT09KGU9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXUuY3JlYXRlQnVmZmVyKCkscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtpZihpc05hTihuKSlyZXR1cm4gbnVsbDt0LnB1dEJ5dGUobil9cmV0dXJuIHQuZ2V0Qnl0ZXMoKX0sdS5ieXRlc0Zyb21JUHY2PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MiooOC0oZT1lLnNwbGl0KCI6IikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5sZW5ndGgmJisrdCwhMH0pKS5sZW5ndGgrdCksbj11LmNyZWF0ZUJ1ZmZlcigpLGk9MDtpPDg7KytpKWlmKGVbaV0mJjAhPT1lW2ldLmxlbmd0aCl7dmFyIG89dS5oZXhUb0J5dGVzKGVbaV0pO28ubGVuZ3RoPDImJm4ucHV0Qnl0ZSgwKSxuLnB1dEJ5dGVzKG8pfWVsc2Ugbi5maWxsV2l0aEJ5dGUoMCxyKSxyPTA7cmV0dXJuIG4uZ2V0Qnl0ZXMoKX0sdS5ieXRlc1RvSVA9ZnVuY3Rpb24oZSl7cmV0dXJuIDQ9PT1lLmxlbmd0aD91LmJ5dGVzVG9JUHY0KGUpOjE2PT09ZS5sZW5ndGg/dS5ieXRlc1RvSVB2NihlKTpudWxsfSx1LmJ5dGVzVG9JUHY0PWZ1bmN0aW9uKGUpe2lmKDQhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikpO3JldHVybiB0LmpvaW4oIi4iKX0sdS5ieXRlc1RvSVB2Nj1mdW5jdGlvbihlKXtpZigxNiE9PWUubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgdD1bXSxyPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKz0yKXtmb3IodmFyIG89dS5ieXRlc1RvSGV4KGVbaV0rZVtpKzFdKTsiMCI9PT1vWzBdJiYiMCIhPT1vOylvPW8uc3Vic3RyKDEpO2lmKCIwIj09PW8pe3ZhciBhPXJbci5sZW5ndGgtMV0scz10Lmxlbmd0aDthJiZzPT09YS5lbmQrMT8oYS5lbmQ9cyxhLmVuZC1hLnN0YXJ0PnJbbl0uZW5kLXJbbl0uc3RhcnQmJihuPXIubGVuZ3RoLTEpKTpyLnB1c2goe3N0YXJ0OnMsZW5kOnN9KX10LnB1c2gobyl9aWYoci5sZW5ndGg+MCl7dmFyIGM9cltuXTtjLmVuZC1jLnN0YXJ0PjAmJih0LnNwbGljZShjLnN0YXJ0LGMuZW5kLWMuc3RhcnQrMSwiIiksMD09PWMuc3RhcnQmJnQudW5zaGlmdCgiIiksNz09PWMuZW5kJiZ0LnB1c2goIiIpKX1yZXR1cm4gdC5qb2luKCI6Iil9LHUuZXN0aW1hdGVDb3Jlcz1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZSYmKHQ9ZSxlPXt9KSxlPWV8fHt9LCJjb3JlcyJpbiB1JiYhZS51cGRhdGUpcmV0dXJuIHQobnVsbCx1LmNvcmVzKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJiJoYXJkd2FyZUNvbmN1cnJlbmN5ImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k+MClyZXR1cm4gdS5jb3Jlcz1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSx0KG51bGwsdS5jb3Jlcyk7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgV29ya2VyKXJldHVybiB1LmNvcmVzPTEsdChudWxsLHUuY29yZXMpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEJsb2IpcmV0dXJuIHUuY29yZXM9Mix0KG51bGwsdS5jb3Jlcyk7dmFyIHI9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbIigiLGZ1bmN0aW9uKCl7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxyPXQrNDtEYXRlLm5vdygpPHI7KTtzZWxmLnBvc3RNZXNzYWdlKHtzdDp0LGV0OnJ9KX0pfS50b1N0cmluZygpLCIpKCkiXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KSk7IWZ1bmN0aW9uIGUobixpLG8pe2lmKDA9PT1pKXt2YXIgYT1NYXRoLmZsb29yKG4ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCkvbi5sZW5ndGgpO3JldHVybiB1LmNvcmVzPU1hdGgubWF4KDEsYSksVVJMLnJldm9rZU9iamVjdFVSTChyKSx0KG51bGwsdS5jb3Jlcyl9IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9W10sbz0wO288ZTsrK28pe3ZhciBhPW5ldyBXb3JrZXIocik7YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihyKXtpZihpLnB1c2goci5kYXRhKSxpLmxlbmd0aD09PWUpe2Zvcih2YXIgbz0wO288ZTsrK28pbltvXS50ZXJtaW5hdGUoKTt0KG51bGwsaSl9fSksbi5wdXNoKGEpfWZvcih2YXIgbz0wO288ZTsrK28pbltvXS5wb3N0TWVzc2FnZShvKX0obyxmdW5jdGlvbih0LHIpe24ucHVzaChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjxlOysrbilmb3IodmFyIGk9dFtuXSxvPXJbbl09W10sYT0wO2E8ZTsrK2EpaWYobiE9PWEpe3ZhciBzPXRbYV07KGkuc3Q+cy5zdCYmaS5zdDxzLmV0fHxzLnN0Pmkuc3QmJnMuc3Q8aS5ldCkmJm8ucHVzaChhKX1yZXR1cm4gci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0Lmxlbmd0aCl9LDApfShvLHIpKSxlKG4saS0xLG8pfSl9KFtdLDUsMTYpfX0pLmNhbGwodGhpcyxyKDQ2KSxyKDMxMikuc2V0SW1tZWRpYXRlLHIoMzQpLHIoMTgpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ci5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuR0VORVNJUz0xXT0iR0VORVNJUyIsZVtlLlBBWU1FTlQ9Ml09IlBBWU1FTlQiLGVbZS5JU1NVRT0zXT0iSVNTVUUiLGVbZS5UUkFOU0ZFUj00XT0iVFJBTlNGRVIiLGVbZS5SRUlTU1VFPTVdPSJSRUlTU1VFIixlW2UuQlVSTj02XT0iQlVSTiIsZVtlLkVYQ0hBTkdFPTddPSJFWENIQU5HRSIsZVtlLkxFQVNFPThdPSJMRUFTRSIsZVtlLkNBTkNFTF9MRUFTRT05XT0iQ0FOQ0VMX0xFQVNFIixlW2UuQUxJQVM9MTBdPSJBTElBUyIsZVtlLk1BU1NfVFJBTlNGRVI9MTFdPSJNQVNTX1RSQU5TRkVSIixlW2UuREFUQT0xMl09IkRBVEEiLGVbZS5TRVRfU0NSSVBUPTEzXT0iU0VUX1NDUklQVCIsZVtlLlNQT05TT1JTSElQPTE0XT0iU1BPTlNPUlNISVAiLGVbZS5TRVRfQVNTRVRfU0NSSVBUPTE1XT0iU0VUX0FTU0VUX1NDUklQVCIsZVtlLklOVk9LRV9TQ1JJUFQ9MTZdPSJJTlZPS0VfU0NSSVBUIn0odC5UUkFOU0FDVElPTl9UWVBFfHwodC5UUkFOU0FDVElPTl9UWVBFPXt9KSksZnVuY3Rpb24oZSl7ZS5JTlRFR0VSPSJpbnRlZ2VyIixlLkJPT0xFQU49ImJvb2xlYW4iLGUuQklOQVJZPSJiaW5hcnkiLGUuU1RSSU5HPSJzdHJpbmcifSh0LkRBVEFfRklFTERfVFlQRXx8KHQuREFUQV9GSUVMRF9UWVBFPXt9KSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczKSxpPXIoMTUwKSxvPXIoNDU3KSxhPXIoNDYxKSxzPXIoNDY0KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoMjA0KSxpPXIoNTQ4KSxvPXIoMzA2KTtmdW5jdGlvbiBhKCl7cmV0dXJuIHUuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gcyhlLHQpe2lmKGEoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz11LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyB1KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHUoZSx0LHIpe2lmKCF1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdShlLHQscik7aWYoIm51bWJlciI9PT10eXBlb2YgZSl7aWYoInN0cmluZyI9PT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodGhpcyxlKX1yZXR1cm4gYyh0aGlzLGUsdCxyKX1mdW5jdGlvbiBjKGUsdCxyLG4pe2lmKCJudW1iZXIiPT09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTt1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXUucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGQodCxyKSxpPShlPXMoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYodS5pc0J1ZmZlcih0KSl7dmFyIHI9MHxwKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXMoZSxyKSkubGVuZ3RoP2U6KHQuY29weShlLDAsMCxyKSxlKX1pZih0KXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT09dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPT1uP3MoZSwwKTpoKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJm8odC5kYXRhKSlyZXR1cm4gaChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGYoZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gbChlLHQpe2lmKGYodCksZT1zKGUsdDwwPzA6MHxwKHQpKSwhdS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxwKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7aWYoZT49YSgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGQoZSx0KXtpZih1LmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9PXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBGKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBGKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT09dHlwZW9mIHQmJih0PXUuZnJvbSh0LG4pKSx1LmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6dihlLHQscixuLGkpO2lmKCJudW1iZXIiPT09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6dihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdihlLHQscixuLGkpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGY9LTE7Zm9yKG89cjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWY/MDpvLWYpKXtpZigtMT09PWYmJihmPW8pLG8tZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihvLT1vLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsaD0wO2g8dTtoKyspaWYoYyhlLG8raCkhPT1jKHQsaCkpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBtKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQscixuKXtyZXR1cm4gcShGKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIF8oZSx0LHIsbil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBfKGUsdCxyLG4pfWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIHEoVih0KSxlLHIsbil9ZnVuY3Rpb24gdyhlLHQscixuKXtyZXR1cm4gcShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKXI9ZS5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFQoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP24uZnJvbUJ5dGVBcnJheShlKTpuLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBBKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8sYSxzLHUsYz1lW2ldLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6bz1lW2krMV0sYT1lW2krMl0sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmMTI4PT09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9QykpO3JldHVybiByfShuKX10LkJ1ZmZlcj11LHQuU2xvd0J1ZmZlcj1mdW5jdGlvbihlKXsrZSE9ZSYmKGU9MCk7cmV0dXJuIHUuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLHUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1hKCksdS5wb29sU2l6ZT04MTkyLHUuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXUucHJvdG90eXBlLGV9LHUuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LHUuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHUucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx1Ll9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnVbU3ltYm9sLnNwZWNpZXNdPT09dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHUuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZih0KSx0PD0wP3MoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT09dHlwZW9mIG4/cyhlLHQpLmZpbGwocixuKTpzKGUsdCkuZmlsbChyKTpzKGUsdCl9KG51bGwsZSx0LHIpfSx1LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSx1LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighdS5pc0J1ZmZlcihlKXx8IXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHUuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdS5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighbyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49dS5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGE9ZVtyXTtpZighdS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHUuYnl0ZUxlbmd0aD1kLHUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx1LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXkodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpeSh0aGlzLHQsdCszKSx5KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeSh0aGlzLHQsdCs3KSx5KHRoaXMsdCsxLHQrNikseSh0aGlzLHQrMix0KzUpLHkodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCxlKTpmdW5jdGlvbihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBrKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBBKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIE8odGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF1LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT11LmNvbXBhcmUodGhpcyxlKX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLHI9dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5yJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LHUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighdS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSxmPWUuc2xpY2UodCxyKSxsPTA7bDxzOysrbClpZihjW2xdIT09ZltsXSl7bz1jW2xdLGE9ZltsXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LHUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBnKHRoaXMsZSx0LHIsITApfSx1LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGcodGhpcyxlLHQsciwhMSl9LHUucHJvdG90eXBlLg==",
"2019.12.27 16:40": "base64:Ti5kZWNvZGUoZSxwLHQpfSx1LnRleHQ9e3V0Zjg6e30sdXRmMTY6e319LHUudGV4dC51dGY4LmVuY29kZT1mdW5jdGlvbihlLHQscil7ZT11LmVuY29kZVV0ZjgoZSk7dmFyIG49dDtufHwobj1uZXcgVWludDhBcnJheShlLmxlbmd0aCkpO2Zvcih2YXIgaT1yPXJ8fDAsbz0wO288ZS5sZW5ndGg7KytvKW5baSsrXT1lLmNoYXJDb2RlQXQobyk7cmV0dXJuIHQ/aS1yOm59LHUudGV4dC51dGY4LmRlY29kZT1mdW5jdGlvbihlKXtyZXR1cm4gdS5kZWNvZGVVdGY4KFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxlKSl9LHUudGV4dC51dGYxNi5lbmNvZGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQ7bnx8KG49bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkpO2Zvcih2YXIgaT1uZXcgVWludDE2QXJyYXkobi5idWZmZXIpLG89cj1yfHwwLGE9cixzPTA7czxlLmxlbmd0aDsrK3MpaVthKytdPWUuY2hhckNvZGVBdChzKSxvKz0yO3JldHVybiB0P28tcjpufSx1LnRleHQudXRmMTYuZGVjb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbmV3IFVpbnQxNkFycmF5KGUuYnVmZmVyKSl9LHUuZGVmbGF0ZT1mdW5jdGlvbihlLHQscil7aWYodD11LmRlY29kZTY0KGUuZGVmbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsKSxyKXt2YXIgbj0yOzMyJnQuY2hhckNvZGVBdCgxKSYmKG49NiksdD10LnN1YnN0cmluZyhuLHQubGVuZ3RoLTQpfXJldHVybiB0fSx1LmluZmxhdGU9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWUuaW5mbGF0ZSh1LmVuY29kZTY0KHQpKS5ydmFsO3JldHVybiBudWxsPT09bj9udWxsOnUuZGVjb2RlNjQobil9O3ZhciBkPWZ1bmN0aW9uKGUsdCxyKXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgbjtpZihudWxsPT09cj9uPWUucmVtb3ZlSXRlbSh0KToocj11LmVuY29kZTY0KEpTT04uc3RyaW5naWZ5KHIpKSxuPWUuc2V0SXRlbSh0LHIpKSwidW5kZWZpbmVkIiE9PXR5cGVvZiBuJiYhMCE9PW4ucnZhbCl7dmFyIGk9bmV3IEVycm9yKG4uZXJyb3IubWVzc2FnZSk7dGhyb3cgaS5pZD1uLmVycm9yLmlkLGkubmFtZT1uLmVycm9yLm5hbWUsaX19LHk9ZnVuY3Rpb24oZSx0KXtpZighZSl0aHJvdyBuZXcgRXJyb3IoIldlYlN0b3JhZ2Ugbm90IGF2YWlsYWJsZS4iKTt2YXIgcj1lLmdldEl0ZW0odCk7aWYoZS5pbml0KWlmKG51bGw9PT1yLnJ2YWwpe2lmKHIuZXJyb3Ipe3ZhciBuPW5ldyBFcnJvcihyLmVycm9yLm1lc3NhZ2UpO3Rocm93IG4uaWQ9ci5lcnJvci5pZCxuLm5hbWU9ci5lcnJvci5uYW1lLG59cj1udWxsfWVsc2Ugcj1yLnJ2YWw7cmV0dXJuIG51bGwhPT1yJiYocj1KU09OLnBhcnNlKHUuZGVjb2RlNjQocikpKSxyfSxnPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPXkoZSx0KTtudWxsPT09aSYmKGk9e30pLGlbcl09bixkKGUsdCxpKX0sdj1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO3JldHVybiBudWxsIT09biYmKG49ciBpbiBuP25bcl06bnVsbCksbn0sbT1mdW5jdGlvbihlLHQscil7dmFyIG49eShlLHQpO2lmKG51bGwhPT1uJiZyIGluIG4pe2RlbGV0ZSBuW3JdO3ZhciBpPSEwO2Zvcih2YXIgbyBpbiBuKXtpPSExO2JyZWFrfWkmJihuPW51bGwpLGQoZSx0LG4pfX0sYj1mdW5jdGlvbihlLHQpe2QoZSx0LG51bGwpfSxfPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbixpPW51bGw7InVuZGVmaW5lZCI9PT10eXBlb2YgciYmKHI9WyJ3ZWIiLCJmbGFzaCJdKTt2YXIgbz0hMSxhPW51bGw7Zm9yKHZhciBzIGluIHIpe249cltzXTt0cnl7aWYoImZsYXNoIj09PW58fCJib3RoIj09PW4pe2lmKG51bGw9PT10WzBdKXRocm93IG5ldyBFcnJvcigiRmxhc2ggbG9jYWwgc3RvcmFnZSBub3QgYXZhaWxhYmxlLiIpO2k9ZS5hcHBseSh0aGlzLHQpLG89ImZsYXNoIj09PW59IndlYiIhPT1uJiYiYm90aCIhPT1ufHwodFswXT1sb2NhbFN0b3JhZ2UsaT1lLmFwcGx5KHRoaXMsdCksbz0hMCl9Y2F0Y2godSl7YT11fWlmKG8pYnJlYWt9aWYoIW8pdGhyb3cgYTtyZXR1cm4gaX07dS5zZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4saSl7XyhnLGFyZ3VtZW50cyxpKX0sdS5nZXRJdGVtPWZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBfKHYsYXJndW1lbnRzLG4pfSx1LnJlbW92ZUl0ZW09ZnVuY3Rpb24oZSx0LHIsbil7XyhtLGFyZ3VtZW50cyxuKX0sdS5jbGVhckl0ZW1zPWZ1bmN0aW9uKGUsdCxyKXtfKGIsYXJndW1lbnRzLHIpfSx1LnBhcnNlVXJsPWZ1bmN0aW9uKGUpe3ZhciB0PS9eKGh0dHBzPyk6XC9cLyhbXjomXlwvXSopOj8oXGQqKSguKikkL2c7dC5sYXN0SW5kZXg9MDt2YXIgcj10LmV4ZWMoZSksbj1udWxsPT09cj9udWxsOntmdWxsOmUsc2NoZW1lOnJbMV0saG9zdDpyWzJdLHBvcnQ6clszXSxwYXRoOnJbNF19O3JldHVybiBuJiYobi5mdWxsSG9zdD1uLmhvc3Qsbi5wb3J0PzgwIT09bi5wb3J0JiYiaHR0cCI9PT1uLnNjaGVtZT9uLmZ1bGxIb3N0Kz0iOiIrbi5wb3J0OjQ0MyE9PW4ucG9ydCYmImh0dHBzIj09PW4uc2NoZW1lJiYobi5mdWxsSG9zdCs9IjoiK24ucG9ydCk6Imh0dHAiPT09bi5zY2hlbWU/bi5wb3J0PTgwOiJodHRwcyI9PT1uLnNjaGVtZSYmKG4ucG9ydD00NDMpLG4uZnVsbD1uLnNjaGVtZSsiOi8vIituLmZ1bGxIb3N0KSxufTt2YXIgUz1udWxsO3UuZ2V0UXVlcnlWYXJpYWJsZXM9ZnVuY3Rpb24oZSl7dmFyIHQscj1mdW5jdGlvbihlKXtmb3IodmFyIHQ9e30scj1lLnNwbGl0KCImIiksbj0wO248ci5sZW5ndGg7bisrKXt2YXIgaSxvLGE9cltuXS5pbmRleE9mKCI9Iik7YT4wPyhpPXJbbl0uc3Vic3RyaW5nKDAsYSksbz1yW25dLnN1YnN0cmluZyhhKzEpKTooaT1yW25dLG89bnVsbCksaSBpbiB0fHwodFtpXT1bXSksaSBpbiBPYmplY3QucHJvdG90eXBlfHxudWxsPT09b3x8dFtpXS5wdXNoKHVuZXNjYXBlKG8pKX1yZXR1cm4gdH07cmV0dXJuInVuZGVmaW5lZCI9PT10eXBlb2YgZT8obnVsbD09PVMmJihTPSJ1bmRlZmluZWQiIT09dHlwZW9mIHdpbmRvdyYmd2luZG93LmxvY2F0aW9uJiZ3aW5kb3cubG9jYXRpb24uc2VhcmNoP3Iod2luZG93LmxvY2F0aW9uLnNlYXJjaC5zdWJzdHJpbmcoMSkpOnt9KSx0PVMpOnQ9cihlKSx0fSx1LnBhcnNlRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSxyPSIiLG49ZS5pbmRleE9mKCI/Iik7bj4wJiYodD1lLnN1YnN0cmluZygwLG4pLHI9ZS5zdWJzdHJpbmcobisxKSk7dmFyIGk9dC5zcGxpdCgiLyIpO3JldHVybiBpLmxlbmd0aD4wJiYiIj09PWlbMF0mJmkuc2hpZnQoKSx7cGF0aFN0cmluZzp0LHF1ZXJ5U3RyaW5nOnIscGF0aDppLHF1ZXJ5OiIiPT09cj97fTp1LmdldFF1ZXJ5VmFyaWFibGVzKHIpfX0sdS5tYWtlUmVxdWVzdD1mdW5jdGlvbihlKXt2YXIgdD11LnBhcnNlRnJhZ21lbnQoZSkscj17cGF0aDp0LnBhdGhTdHJpbmcscXVlcnk6dC5xdWVyeVN0cmluZyxnZXRQYXRoOmZ1bmN0aW9uKGUpe3JldHVybiJ1bmRlZmluZWQiPT09dHlwZW9mIGU/dC5wYXRoOnQucGF0aFtlXX0sZ2V0UXVlcnk6ZnVuY3Rpb24oZSxyKXt2YXIgbjtyZXR1cm4idW5kZWZpbmVkIj09PXR5cGVvZiBlP249dC5xdWVyeToobj10LnF1ZXJ5W2VdKSYmInVuZGVmaW5lZCIhPT10eXBlb2YgciYmKG49bltyXSksbn0sZ2V0UXVlcnlMYXN0OmZ1bmN0aW9uKGUsdCl7dmFyIG49ci5nZXRRdWVyeShlKTtyZXR1cm4gbj9uW24ubGVuZ3RoLTFdOnR9fTtyZXR1cm4gcn0sdS5tYWtlTGluaz1mdW5jdGlvbihlLHQscil7ZT1qUXVlcnkuaXNBcnJheShlKT9lLmpvaW4oIi8iKTplO3ZhciBuPWpRdWVyeS5wYXJhbSh0fHx7fSk7cmV0dXJuIHI9cnx8IiIsZSsobi5sZW5ndGg+MD8iPyIrbjoiIikrKHIubGVuZ3RoPjA/IiMiK3I6IiIpfSx1LnNldFBhdGg9ZnVuY3Rpb24oZSx0LHIpe2lmKCJvYmplY3QiPT09dHlwZW9mIGUmJm51bGwhPT1lKWZvcih2YXIgbj0wLGk9dC5sZW5ndGg7bjxpOyl7dmFyIG89dFtuKytdO2lmKG49PWkpZVtvXT1yO2Vsc2V7dmFyIGE9byBpbiBlOyghYXx8YSYmIm9iamVjdCIhPT10eXBlb2YgZVtvXXx8YSYmbnVsbD09PWVbb10pJiYoZVtvXT17fSksZT1lW29dfX19LHUuZ2V0UGF0aD1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsaT10Lmxlbmd0aCxvPSEwO28mJm48aSYmIm9iamVjdCI9PT10eXBlb2YgZSYmbnVsbCE9PWU7KXt2YXIgYT10W24rK107KG89YSBpbiBlKSYmKGU9ZVthXSl9cmV0dXJuIG8/ZTpyfSx1LmRlbGV0ZVBhdGg9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0Ij09PXR5cGVvZiBlJiZudWxsIT09ZSlmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjspe3ZhciBpPXRbcisrXTtpZihyPT1uKWRlbGV0ZSBlW2ldO2Vsc2V7aWYoIShpIGluIGUpfHwib2JqZWN0IiE9PXR5cGVvZiBlW2ldfHxudWxsPT09ZVtpXSlicmVhaztlPWVbaV19fX0sdS5pc0VtcHR5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKWlmKGUuaGFzT3duUHJvcGVydHkodCkpcmV0dXJuITE7cmV0dXJuITB9LHUuZm9ybWF0PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49LyUuL2csaT0wLG89W10sYT0wO3Q9bi5leGVjKGUpOyl7KHI9ZS5zdWJzdHJpbmcoYSxuLmxhc3RJbmRleC0yKSkubGVuZ3RoPjAmJm8ucHVzaChyKSxhPW4ubGFzdEluZGV4O3ZhciBzPXRbMF1bMV07c3dpdGNoKHMpe2Nhc2UicyI6Y2FzZSJvIjppPGFyZ3VtZW50cy5sZW5ndGg/by5wdXNoKGFyZ3VtZW50c1sxK2krK10pOm8ucHVzaCgiPD8+Iik7YnJlYWs7Y2FzZSIlIjpvLnB1c2goIiUiKTticmVhaztkZWZhdWx0Om8ucHVzaCgiPCUiK3MrIj8+Iil9fXJldHVybiBvLnB1c2goZS5zdWJzdHJpbmcoYSkpLG8uam9pbigiIil9LHUuZm9ybWF0TnVtYmVyPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBpPWUsbz1pc05hTih0PU1hdGguYWJzKHQpKT8yOnQsYT12b2lkIDA9PT1yPyIsIjpyLHM9dm9pZCAwPT09bj8iLiI6bix1PWk8MD8iLSI6IiIsYz1wYXJzZUludChpPU1hdGguYWJzKCtpfHwwKS50b0ZpeGVkKG8pLDEwKSsiIixmPWMubGVuZ3RoPjM/Yy5sZW5ndGglMzowO3JldHVybiB1KyhmP2Muc3Vic3RyKDAsZikrczoiIikrYy5zdWJzdHIoZikucmVwbGFjZSgvKFxkezN9KSg/PVxkKS9nLCIkMSIrcykrKG8/YStNYXRoLmFicyhpLWMpLnRvRml4ZWQobykuc2xpY2UoMik6IiIpfSx1LmZvcm1hdFNpemU9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZT49MTA3Mzc0MTgyND91LmZvcm1hdE51bWJlcihlLzEwNzM3NDE4MjQsMiwiLiIsIiIpKyIgR2lCIjplPj0xMDQ4NTc2P3UuZm9ybWF0TnVtYmVyKGUvMTA0ODU3NiwyLCIuIiwiIikrIiBNaUIiOmU+PTEwMjQ/dS5mb3JtYXROdW1iZXIoZS8xMDI0LDApKyIgS2lCIjp1LmZvcm1hdE51bWJlcihlLDApKyIgYnl0ZXMifSx1LmJ5dGVzRnJvbUlQPWZ1bmN0aW9uKGUpe3JldHVybi0xIT09ZS5pbmRleE9mKCIuIik/dS5ieXRlc0Zyb21JUHY0KGUpOi0xIT09ZS5pbmRleE9mKCI6Iik/dS5ieXRlc0Zyb21JUHY2KGUpOm51bGx9LHUuYnl0ZXNGcm9tSVB2ND1mdW5jdGlvbihlKXtpZig0IT09KGU9ZS5zcGxpdCgiLiIpKS5sZW5ndGgpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXUuY3JlYXRlQnVmZmVyKCkscj0wO3I8ZS5sZW5ndGg7KytyKXt2YXIgbj1wYXJzZUludChlW3JdLDEwKTtpZihpc05hTihuKSlyZXR1cm4gbnVsbDt0LnB1dEJ5dGUobil9cmV0dXJuIHQuZ2V0Qnl0ZXMoKX0sdS5ieXRlc0Zyb21JUHY2PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9MiooOC0oZT1lLnNwbGl0KCI6IikuZmlsdGVyKGZ1bmN0aW9uKGUpe3JldHVybiAwPT09ZS5sZW5ndGgmJisrdCwhMH0pKS5sZW5ndGgrdCksbj11LmNyZWF0ZUJ1ZmZlcigpLGk9MDtpPDg7KytpKWlmKGVbaV0mJjAhPT1lW2ldLmxlbmd0aCl7dmFyIG89dS5oZXhUb0J5dGVzKGVbaV0pO28ubGVuZ3RoPDImJm4ucHV0Qnl0ZSgwKSxuLnB1dEJ5dGVzKG8pfWVsc2Ugbi5maWxsV2l0aEJ5dGUoMCxyKSxyPTA7cmV0dXJuIG4uZ2V0Qnl0ZXMoKX0sdS5ieXRlc1RvSVA9ZnVuY3Rpb24oZSl7cmV0dXJuIDQ9PT1lLmxlbmd0aD91LmJ5dGVzVG9JUHY0KGUpOjE2PT09ZS5sZW5ndGg/dS5ieXRlc1RvSVB2NihlKTpudWxsfSx1LmJ5dGVzVG9JUHY0PWZ1bmN0aW9uKGUpe2lmKDQhPT1lLmxlbmd0aClyZXR1cm4gbnVsbDtmb3IodmFyIHQ9W10scj0wO3I8ZS5sZW5ndGg7KytyKXQucHVzaChlLmNoYXJDb2RlQXQocikpO3JldHVybiB0LmpvaW4oIi4iKX0sdS5ieXRlc1RvSVB2Nj1mdW5jdGlvbihlKXtpZigxNiE9PWUubGVuZ3RoKXJldHVybiBudWxsO2Zvcih2YXIgdD1bXSxyPVtdLG49MCxpPTA7aTxlLmxlbmd0aDtpKz0yKXtmb3IodmFyIG89dS5ieXRlc1RvSGV4KGVbaV0rZVtpKzFdKTsiMCI9PT1vWzBdJiYiMCIhPT1vOylvPW8uc3Vic3RyKDEpO2lmKCIwIj09PW8pe3ZhciBhPXJbci5sZW5ndGgtMV0scz10Lmxlbmd0aDthJiZzPT09YS5lbmQrMT8oYS5lbmQ9cyxhLmVuZC1hLnN0YXJ0PnJbbl0uZW5kLXJbbl0uc3RhcnQmJihuPXIubGVuZ3RoLTEpKTpyLnB1c2goe3N0YXJ0OnMsZW5kOnN9KX10LnB1c2gobyl9aWYoci5sZW5ndGg+MCl7dmFyIGM9cltuXTtjLmVuZC1jLnN0YXJ0PjAmJih0LnNwbGljZShjLnN0YXJ0LGMuZW5kLWMuc3RhcnQrMSwiIiksMD09PWMuc3RhcnQmJnQudW5zaGlmdCgiIiksNz09PWMuZW5kJiZ0LnB1c2goIiIpKX1yZXR1cm4gdC5qb2luKCI6Iil9LHUuZXN0aW1hdGVDb3Jlcz1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PT10eXBlb2YgZSYmKHQ9ZSxlPXt9KSxlPWV8fHt9LCJjb3JlcyJpbiB1JiYhZS51cGRhdGUpcmV0dXJuIHQobnVsbCx1LmNvcmVzKTtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBuYXZpZ2F0b3ImJiJoYXJkd2FyZUNvbmN1cnJlbmN5ImluIG5hdmlnYXRvciYmbmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k+MClyZXR1cm4gdS5jb3Jlcz1uYXZpZ2F0b3IuaGFyZHdhcmVDb25jdXJyZW5jeSx0KG51bGwsdS5jb3Jlcyk7aWYoInVuZGVmaW5lZCI9PT10eXBlb2YgV29ya2VyKXJldHVybiB1LmNvcmVzPTEsdChudWxsLHUuY29yZXMpO2lmKCJ1bmRlZmluZWQiPT09dHlwZW9mIEJsb2IpcmV0dXJuIHUuY29yZXM9Mix0KG51bGwsdS5jb3Jlcyk7dmFyIHI9VVJMLmNyZWF0ZU9iamVjdFVSTChuZXcgQmxvYihbIigiLGZ1bmN0aW9uKCl7c2VsZi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtmb3IodmFyIHQ9RGF0ZS5ub3coKSxyPXQrNDtEYXRlLm5vdygpPHI7KTtzZWxmLnBvc3RNZXNzYWdlKHtzdDp0LGV0OnJ9KX0pfS50b1N0cmluZygpLCIpKCkiXSx7dHlwZToiYXBwbGljYXRpb24vamF2YXNjcmlwdCJ9KSk7IWZ1bmN0aW9uIGUobixpLG8pe2lmKDA9PT1pKXt2YXIgYT1NYXRoLmZsb29yKG4ucmVkdWNlKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUrdH0sMCkvbi5sZW5ndGgpO3JldHVybiB1LmNvcmVzPU1hdGgubWF4KDEsYSksVVJMLnJldm9rZU9iamVjdFVSTChyKSx0KG51bGwsdS5jb3Jlcyl9IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPVtdLGk9W10sbz0wO288ZTsrK28pe3ZhciBhPW5ldyBXb3JrZXIocik7YS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihyKXtpZihpLnB1c2goci5kYXRhKSxpLmxlbmd0aD09PWUpe2Zvcih2YXIgbz0wO288ZTsrK28pbltvXS50ZXJtaW5hdGUoKTt0KG51bGwsaSl9fSksbi5wdXNoKGEpfWZvcih2YXIgbz0wO288ZTsrK28pbltvXS5wb3N0TWVzc2FnZShvKX0obyxmdW5jdGlvbih0LHIpe24ucHVzaChmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxuPTA7bjxlOysrbilmb3IodmFyIGk9dFtuXSxvPXJbbl09W10sYT0wO2E8ZTsrK2EpaWYobiE9PWEpe3ZhciBzPXRbYV07KGkuc3Q+cy5zdCYmaS5zdDxzLmV0fHxzLnN0Pmkuc3QmJnMuc3Q8aS5ldCkmJm8ucHVzaChhKX1yZXR1cm4gci5yZWR1Y2UoZnVuY3Rpb24oZSx0KXtyZXR1cm4gTWF0aC5tYXgoZSx0Lmxlbmd0aCl9LDApfShvLHIpKSxlKG4saS0xLG8pfSl9KFtdLDUsMTYpfX0pLmNhbGwodGhpcyxyKDQ2KSxyKDMxMikuc2V0SW1tZWRpYXRlLHIoMzQpLHIoMTgpLkJ1ZmZlcil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9ci5kKHQsImEiLGZ1bmN0aW9uKCl7cmV0dXJuIG59KX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZighbihlKSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhbiBvYmplY3QhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09PXR5cGVvZiBlP251bGwhPT1lOiJmdW5jdGlvbiI9PT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm4hIWUoKX1jYXRjaCh0KXtyZXR1cm4hMH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSxmdW5jdGlvbihlKXtlW2UuR0VORVNJUz0xXT0iR0VORVNJUyIsZVtlLlBBWU1FTlQ9Ml09IlBBWU1FTlQiLGVbZS5JU1NVRT0zXT0iSVNTVUUiLGVbZS5UUkFOU0ZFUj00XT0iVFJBTlNGRVIiLGVbZS5SRUlTU1VFPTVdPSJSRUlTU1VFIixlW2UuQlVSTj02XT0iQlVSTiIsZVtlLkVYQ0hBTkdFPTddPSJFWENIQU5HRSIsZVtlLkxFQVNFPThdPSJMRUFTRSIsZVtlLkNBTkNFTF9MRUFTRT05XT0iQ0FOQ0VMX0xFQVNFIixlW2UuQUxJQVM9MTBdPSJBTElBUyIsZVtlLk1BU1NfVFJBTlNGRVI9MTFdPSJNQVNTX1RSQU5TRkVSIixlW2UuREFUQT0xMl09IkRBVEEiLGVbZS5TRVRfU0NSSVBUPTEzXT0iU0VUX1NDUklQVCIsZVtlLlNQT05TT1JTSElQPTE0XT0iU1BPTlNPUlNISVAiLGVbZS5TRVRfQVNTRVRfU0NSSVBUPTE1XT0iU0VUX0FTU0VUX1NDUklQVCIsZVtlLklOVk9LRV9TQ1JJUFQ9MTZdPSJJTlZPS0VfU0NSSVBUIn0odC5UUkFOU0FDVElPTl9UWVBFfHwodC5UUkFOU0FDVElPTl9UWVBFPXt9KSksZnVuY3Rpb24oZSl7ZS5JTlRFR0VSPSJpbnRlZ2VyIixlLkJPT0xFQU49ImJvb2xlYW4iLGUuQklOQVJZPSJiaW5hcnkiLGUuU1RSSU5HPSJzdHJpbmcifSh0LkRBVEFfRklFTERfVFlQRXx8KHQuREFUQV9GSUVMRF9UWVBFPXt9KSl9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDczKSxpPXIoMTUwKSxvPXIoNDU3KSxhPXIoNDYxKSxzPXIoNDY0KSx1PWZ1bmN0aW9uIGUodCxyLHUpe3ZhciBjLGYsbCxoLHA9dCZlLkYsZD10JmUuRyx5PXQmZS5QLGc9dCZlLkIsdj1kP246dCZlLlM/bltyXXx8KG5bcl09e30pOihuW3JdfHx7fSkucHJvdG90eXBlLG09ZD9pOmlbcl18fChpW3JdPXt9KSxiPW0ucHJvdG90eXBlfHwobS5wcm90b3R5cGU9e30pO2ZvcihjIGluIGQmJih1PXIpLHUpbD0oKGY9IXAmJnYmJnZvaWQgMCE9PXZbY10pP3Y6dSlbY10saD1nJiZmP3MobCxuKTp5JiYiZnVuY3Rpb24iPT10eXBlb2YgbD9zKEZ1bmN0aW9uLmNhbGwsbCk6bCx2JiZhKHYsYyxsLHQmZS5VKSxtW2NdIT1sJiZvKG0sYyxoKSx5JiZiW2NdIT1sJiYoYltjXT1sKX07bi5jb3JlPWksdS5GPTEsdS5HPTIsdS5TPTQsdS5QPTgsdS5CPTE2LHUuVz0zMix1LlU9NjQsdS5SPTEyOCxlLmV4cG9ydHM9dX0sZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmV4cG9ydHM9InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cmJndpbmRvdy5NYXRoPT1NYXRoP3dpbmRvdzoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09TWF0aD9zZWxmOkZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCk7Im51bWJlciI9PXR5cGVvZiBfX2cmJihfX2c9cil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe3ZhciBuPXIoMjA0KSxpPXIoNTQ4KSxvPXIoMzA2KTtmdW5jdGlvbiBhKCl7cmV0dXJuIHUuVFlQRURfQVJSQVlfU1VQUE9SVD8yMTQ3NDgzNjQ3OjEwNzM3NDE4MjN9ZnVuY3Rpb24gcyhlLHQpe2lmKGEoKTx0KXRocm93IG5ldyBSYW5nZUVycm9yKCJJbnZhbGlkIHR5cGVkIGFycmF5IGxlbmd0aCIpO3JldHVybiB1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9bmV3IFVpbnQ4QXJyYXkodCkpLl9fcHJvdG9fXz11LnByb3RvdHlwZToobnVsbD09PWUmJihlPW5ldyB1KHQpKSxlLmxlbmd0aD10KSxlfWZ1bmN0aW9uIHUoZSx0LHIpe2lmKCF1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiEodGhpcyBpbnN0YW5jZW9mIHUpKXJldHVybiBuZXcgdShlLHQscik7aWYoIm51bWJlciI9PT10eXBlb2YgZSl7aWYoInN0cmluZyI9PT10eXBlb2YgdCl0aHJvdyBuZXcgRXJyb3IoIklmIGVuY29kaW5nIGlzIHNwZWNpZmllZCB0aGVuIHRoZSBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgc3RyaW5nIik7cmV0dXJuIGwodGhpcyxlKX1yZXR1cm4gYyh0aGlzLGUsdCxyKX1mdW5jdGlvbiBjKGUsdCxyLG4pe2lmKCJudW1iZXIiPT09dHlwZW9mIHQpdGhyb3cgbmV3IFR5cGVFcnJvcignInZhbHVlIiBhcmd1bWVudCBtdXN0IG5vdCBiZSBhIG51bWJlcicpO3JldHVybiJ1bmRlZmluZWQiIT09dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTt1LlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPXUucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09PXR5cGVvZiB0P2Z1bmN0aW9uKGUsdCxyKXsic3RyaW5nIj09PXR5cGVvZiByJiYiIiE9PXJ8fChyPSJ1dGY4Iik7aWYoIXUuaXNFbmNvZGluZyhyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCciZW5jb2RpbmciIG11c3QgYmUgYSB2YWxpZCBzdHJpbmcgZW5jb2RpbmcnKTt2YXIgbj0wfGQodCxyKSxpPShlPXMoZSxuKSkud3JpdGUodCxyKTtpIT09biYmKGU9ZS5zbGljZSgwLGkpKTtyZXR1cm4gZX0oZSx0LHIpOmZ1bmN0aW9uKGUsdCl7aWYodS5pc0J1ZmZlcih0KSl7dmFyIHI9MHxwKHQubGVuZ3RoKTtyZXR1cm4gMD09PShlPXMoZSxyKSkubGVuZ3RoP2U6KHQuY29weShlLDAsMCxyKSxlKX1pZih0KXtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT09dHlwZW9mIHQubGVuZ3RofHwobj10Lmxlbmd0aCkhPT1uP3MoZSwwKTpoKGUsdCk7aWYoIkJ1ZmZlciI9PT10LnR5cGUmJm8odC5kYXRhKSlyZXR1cm4gaChlLHQuZGF0YSl9dmFyIG47dGhyb3cgbmV3IFR5cGVFcnJvcigiRmlyc3QgYXJndW1lbnQgbXVzdCBiZSBhIHN0cmluZywgQnVmZmVyLCBBcnJheUJ1ZmZlciwgQXJyYXksIG9yIGFycmF5LWxpa2Ugb2JqZWN0LiIpfShlLHQpfWZ1bmN0aW9uIGYoZSl7aWYoIm51bWJlciIhPT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gbChlLHQpe2lmKGYodCksZT1zKGUsdDwwPzA6MHxwKHQpKSwhdS5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxwKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIHAoZSl7aWYoZT49YSgpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IithKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIGQoZSx0KXtpZih1LmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9PXR5cGVvZiBBcnJheUJ1ZmZlciYmImZ1bmN0aW9uIj09PXR5cGVvZiBBcnJheUJ1ZmZlci5pc1ZpZXcmJihBcnJheUJ1ZmZlci5pc1ZpZXcoZSl8fGUgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcikpcmV0dXJuIGUuYnl0ZUxlbmd0aDsic3RyaW5nIiE9PXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBGKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gVihlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBGKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIHkoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiBnKGUsdCxyLG4saSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT09dHlwZW9mIHI/KG49cixyPTApOnI+MjE0NzQ4MzY0Nz9yPTIxNDc0ODM2NDc6cjwtMjE0NzQ4MzY0OCYmKHI9LTIxNDc0ODM2NDgpLHI9K3IsaXNOYU4ocikmJihyPWk/MDplLmxlbmd0aC0xKSxyPDAmJihyPWUubGVuZ3RoK3IpLHI+PWUubGVuZ3RoKXtpZihpKXJldHVybi0xO3I9ZS5sZW5ndGgtMX1lbHNlIGlmKHI8MCl7aWYoIWkpcmV0dXJuLTE7cj0wfWlmKCJzdHJpbmciPT09dHlwZW9mIHQmJih0PXUuZnJvbSh0LG4pKSx1LmlzQnVmZmVyKHQpKXJldHVybiAwPT09dC5sZW5ndGg/LTE6dihlLHQscixuLGkpO2lmKCJudW1iZXIiPT09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSx1LlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PT10eXBlb2YgVWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZj9pP1VpbnQ4QXJyYXkucHJvdG90eXBlLmluZGV4T2YuY2FsbChlLHQscik6VWludDhBcnJheS5wcm90b3R5cGUubGFzdEluZGV4T2YuY2FsbChlLHQscik6dihlLFt0XSxyLG4saSk7dGhyb3cgbmV3IFR5cGVFcnJvcigidmFsIG11c3QgYmUgc3RyaW5nLCBudW1iZXIgb3IgQnVmZmVyIil9ZnVuY3Rpb24gdihlLHQscixuLGkpe3ZhciBvLGE9MSxzPWUubGVuZ3RoLHU9dC5sZW5ndGg7aWYodm9pZCAwIT09biYmKCJ1Y3MyIj09PShuPVN0cmluZyhuKS50b0xvd2VyQ2FzZSgpKXx8InVjcy0yIj09PW58fCJ1dGYxNmxlIj09PW58fCJ1dGYtMTZsZSI9PT1uKSl7aWYoZS5sZW5ndGg8Mnx8dC5sZW5ndGg8MilyZXR1cm4tMTthPTIscy89Mix1Lz0yLHIvPTJ9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiAxPT09YT9lW3RdOmUucmVhZFVJbnQxNkJFKHQqYSl9aWYoaSl7dmFyIGY9LTE7Zm9yKG89cjtvPHM7bysrKWlmKGMoZSxvKT09PWModCwtMT09PWY/MDpvLWYpKXtpZigtMT09PWYmJihmPW8pLG8tZisxPT09dSlyZXR1cm4gZiphfWVsc2UtMSE9PWYmJihvLT1vLWYpLGY9LTF9ZWxzZSBmb3Iocit1PnMmJihyPXMtdSksbz1yO28+PTA7by0tKXtmb3IodmFyIGw9ITAsaD0wO2g8dTtoKyspaWYoYyhlLG8raCkhPT1jKHQsaCkpe2w9ITE7YnJlYWt9aWYobClyZXR1cm4gb31yZXR1cm4tMX1mdW5jdGlvbiBtKGUsdCxyLG4pe3I9TnVtYmVyKHIpfHwwO3ZhciBpPWUubGVuZ3RoLXI7bj8obj1OdW1iZXIobikpPmkmJihuPWkpOm49aTt2YXIgbz10Lmxlbmd0aDtpZihvJTIhPT0wKXRocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgaGV4IHN0cmluZyIpO24+by8yJiYobj1vLzIpO2Zvcih2YXIgYT0wO2E8bjsrK2Epe3ZhciBzPXBhcnNlSW50KHQuc3Vic3RyKDIqYSwyKSwxNik7aWYoaXNOYU4ocykpcmV0dXJuIGE7ZVtyK2FdPXN9cmV0dXJuIGF9ZnVuY3Rpb24gYihlLHQscixuKXtyZXR1cm4gcShGKHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIF8oZSx0LHIsbil7cmV0dXJuIHEoZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MDtyPGUubGVuZ3RoOysrcil0LnB1c2goMjU1JmUuY2hhckNvZGVBdChyKSk7cmV0dXJuIHR9KHQpLGUscixuKX1mdW5jdGlvbiBTKGUsdCxyLG4pe3JldHVybiBfKGUsdCxyLG4pfWZ1bmN0aW9uIEUoZSx0LHIsbil7cmV0dXJuIHEoVih0KSxlLHIsbil9ZnVuY3Rpb24gdyhlLHQscixuKXtyZXR1cm4gcShmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuLGksbz1bXSxhPTA7YTxlLmxlbmd0aCYmISgodC09Mik8MCk7KythKXI9ZS5jaGFyQ29kZUF0KGEpLG49cj4+OCxpPXIlMjU2LG8ucHVzaChpKSxvLnB1c2gobik7cmV0dXJuIG99KHQsZS5sZW5ndGgtciksZSxyLG4pfWZ1bmN0aW9uIFQoZSx0LHIpe3JldHVybiAwPT09dCYmcj09PWUubGVuZ3RoP24uZnJvbUJ5dGVBcnJheShlKTpuLmZyb21CeXRlQXJyYXkoZS5zbGljZSh0LHIpKX1mdW5jdGlvbiBBKGUsdCxyKXtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgbj1bXSxpPXQ7aTxyOyl7dmFyIG8sYSxzLHUsYz1lW2ldLGY9bnVsbCxsPWM+MjM5PzQ6Yz4yMjM/MzpjPjE5MT8yOjE7aWYoaStsPD1yKXN3aXRjaChsKXtjYXNlIDE6YzwxMjgmJihmPWMpO2JyZWFrO2Nhc2UgMjoxMjg9PT0oMTkyJihvPWVbaSsxXSkpJiYodT0oMzEmYyk8PDZ8NjMmbyk+MTI3JiYoZj11KTticmVhaztjYXNlIDM6bz1lW2krMV0sYT1lW2krMl0sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmKHU9KDE1JmMpPDwxMnwoNjMmbyk8PDZ8NjMmYSk+MjA0NyYmKHU8NTUyOTZ8fHU+NTczNDMpJiYoZj11KTticmVhaztjYXNlIDQ6bz1lW2krMV0sYT1lW2krMl0scz1lW2krM10sMTI4PT09KDE5MiZvKSYmMTI4PT09KDE5MiZhKSYmMTI4PT09KDE5MiZzKSYmKHU9KDE1JmMpPDwxOHwoNjMmbyk8PDEyfCg2MyZhKTw8Nnw2MyZzKT42NTUzNSYmdTwxMTE0MTEyJiYoZj11KX1udWxsPT09Zj8oZj02NTUzMyxsPTEpOmY+NjU1MzUmJihmLT02NTUzNixuLnB1c2goZj4+PjEwJjEwMjN8NTUyOTYpLGY9NTYzMjB8MTAyMyZmKSxuLnB1c2goZiksaSs9bH1yZXR1cm4gZnVuY3Rpb24oZSl7dmFyIHQ9ZS5sZW5ndGg7aWYodDw9QylyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZSk7dmFyIHI9IiIsbj0wO2Zvcig7bjx0OylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KFN0cmluZyxlLnNsaWNlKG4sbis9QykpO3JldHVybiByfShuKX10LkJ1ZmZlcj11LHQuU2xvd0J1ZmZlcj1mdW5jdGlvbihlKXsrZSE9ZSYmKGU9MCk7cmV0dXJuIHUuYWxsb2MoK2UpfSx0LklOU1BFQ1RfTUFYX0JZVEVTPTUwLHUuVFlQRURfQVJSQVlfU1VQUE9SVD12b2lkIDAhPT1lLlRZUEVEX0FSUkFZX1NVUFBPUlQ/ZS5UWVBFRF9BUlJBWV9TVVBQT1JUOmZ1bmN0aW9uKCl7dHJ5e3ZhciBlPW5ldyBVaW50OEFycmF5KDEpO3JldHVybiBlLl9fcHJvdG9fXz17X19wcm90b19fOlVpbnQ4QXJyYXkucHJvdG90eXBlLGZvbzpmdW5jdGlvbigpe3JldHVybiA0Mn19LDQyPT09ZS5mb28oKSYmImZ1bmN0aW9uIj09PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2godCl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1hKCksdS5wb29sU2l6ZT04MTkyLHUuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPXUucHJvdG90eXBlLGV9LHUuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LHUuVFlQRURfQVJSQVlfU1VQUE9SVCYmKHUucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSx1Ll9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT09dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnNwZWNpZXMmJnVbU3ltYm9sLnNwZWNpZXNdPT09dSYmT2JqZWN0LmRlZmluZVByb3BlcnR5KHUsU3ltYm9sLnNwZWNpZXMse3ZhbHVlOm51bGwsY29uZmlndXJhYmxlOiEwfSkpLHUuYWxsb2M9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBmdW5jdGlvbihlLHQscixuKXtyZXR1cm4gZih0KSx0PD0wP3MoZSx0KTp2b2lkIDAhPT1yPyJzdHJpbmciPT09dHlwZW9mIG4/cyhlLHQpLmZpbGwocixuKTpzKGUsdCkuZmlsbChyKTpzKGUsdCl9KG51bGwsZSx0LHIpfSx1LmFsbG9jVW5zYWZlPWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuYWxsb2NVbnNhZmVTbG93PWZ1bmN0aW9uKGUpe3JldHVybiBsKG51bGwsZSl9LHUuaXNCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIShudWxsPT1lfHwhZS5faXNCdWZmZXIpfSx1LmNvbXBhcmU9ZnVuY3Rpb24oZSx0KXtpZighdS5pc0J1ZmZlcihlKXx8IXUuaXNCdWZmZXIodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnRzIG11c3QgYmUgQnVmZmVycyIpO2lmKGU9PT10KXJldHVybiAwO2Zvcih2YXIgcj1lLmxlbmd0aCxuPXQubGVuZ3RoLGk9MCxvPU1hdGgubWluKHIsbik7aTxvOysraSlpZihlW2ldIT09dFtpXSl7cj1lW2ldLG49dFtpXTticmVha31yZXR1cm4gcjxuPy0xOm48cj8xOjB9LHUuaXNFbmNvZGluZz1mdW5jdGlvbihlKXtzd2l0Y2goU3RyaW5nKGUpLnRvTG93ZXJDYXNlKCkpe2Nhc2UiaGV4IjpjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2UiYXNjaWkiOmNhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6Y2FzZSJiYXNlNjQiOmNhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0sdS5jb25jYXQ9ZnVuY3Rpb24oZSx0KXtpZighbyhlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7aWYoMD09PWUubGVuZ3RoKXJldHVybiB1LmFsbG9jKDApO3ZhciByO2lmKHZvaWQgMD09PXQpZm9yKHQ9MCxyPTA7cjxlLmxlbmd0aDsrK3IpdCs9ZVtyXS5sZW5ndGg7dmFyIG49dS5hbGxvY1Vuc2FmZSh0KSxpPTA7Zm9yKHI9MDtyPGUubGVuZ3RoOysrcil7dmFyIGE9ZVtyXTtpZighdS5pc0J1ZmZlcihhKSl0aHJvdyBuZXcgVHlwZUVycm9yKCcibGlzdCIgYXJndW1lbnQgbXVzdCBiZSBhbiBBcnJheSBvZiBCdWZmZXJzJyk7YS5jb3B5KG4saSksaSs9YS5sZW5ndGh9cmV0dXJuIG59LHUuYnl0ZUxlbmd0aD1kLHUucHJvdG90eXBlLl9pc0J1ZmZlcj0hMCx1LnByb3RvdHlwZS5zd2FwMTY9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmxlbmd0aDtpZihlJTIhPT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKXkodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiAzMi1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTQpeSh0aGlzLHQsdCszKSx5KHRoaXMsdCsxLHQrMik7cmV0dXJuIHRoaXN9LHUucHJvdG90eXBlLnN3YXA2ND1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlOCE9PTApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkJ1ZmZlciBzaXplIG11c3QgYmUgYSBtdWx0aXBsZSBvZiA2NC1iaXRzIik7Zm9yKHZhciB0PTA7dDxlO3QrPTgpeSh0aGlzLHQsdCs3KSx5KHRoaXMsdCsxLHQrNikseSh0aGlzLHQrMix0KzUpLHkodGhpcyx0KzMsdCs0KTtyZXR1cm4gdGhpc30sdS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXt2YXIgZT0wfHRoaXMubGVuZ3RoO3JldHVybiAwPT09ZT8iIjowPT09YXJndW1lbnRzLmxlbmd0aD9BKHRoaXMsMCxlKTpmdW5jdGlvbihlLHQscil7dmFyIG49ITE7aWYoKHZvaWQgMD09PXR8fHQ8MCkmJih0PTApLHQ+dGhpcy5sZW5ndGgpcmV0dXJuIiI7aWYoKHZvaWQgMD09PXJ8fHI+dGhpcy5sZW5ndGgpJiYocj10aGlzLmxlbmd0aCkscjw9MClyZXR1cm4iIjtpZigocj4+Pj0wKTw9KHQ+Pj49MCkpcmV0dXJuIiI7Zm9yKGV8fChlPSJ1dGY4Iik7Oylzd2l0Y2goZSl7Y2FzZSJoZXgiOnJldHVybiBrKHRoaXMsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiBBKHRoaXMsdCxyKTtjYXNlImFzY2lpIjpyZXR1cm4geCh0aGlzLHQscik7Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gSSh0aGlzLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBUKHRoaXMsdCxyKTtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIE8odGhpcyx0LHIpO2RlZmF1bHQ6aWYobil0aHJvdyBuZXcgVHlwZUVycm9yKCJVbmtub3duIGVuY29kaW5nOiAiK2UpO2U9KGUrIiIpLnRvTG93ZXJDYXNlKCksbj0hMH19LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sdS5wcm90b3R5cGUuZXF1YWxzPWZ1bmN0aW9uKGUpe2lmKCF1LmlzQnVmZmVyKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50IG11c3QgYmUgYSBCdWZmZXIiKTtyZXR1cm4gdGhpcz09PWV8fDA9PT11LmNvbXBhcmUodGhpcyxlKX0sdS5wcm90b3R5cGUuaW5zcGVjdD1mdW5jdGlvbigpe3ZhciBlPSIiLHI9dC5JTlNQRUNUX01BWF9CWVRFUztyZXR1cm4gdGhpcy5sZW5ndGg+MCYmKGU9dGhpcy50b1N0cmluZygiaGV4IiwwLHIpLm1hdGNoKC8uezJ9L2cpLmpvaW4oIiAiKSx0aGlzLmxlbmd0aD5yJiYoZSs9IiAuLi4gIikpLCI8QnVmZmVyICIrZSsiPiJ9LHUucHJvdG90eXBlLmNvbXBhcmU9ZnVuY3Rpb24oZSx0LHIsbixpKXtpZighdS5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7aWYodm9pZCAwPT09dCYmKHQ9MCksdm9pZCAwPT09ciYmKHI9ZT9lLmxlbmd0aDowKSx2b2lkIDA9PT1uJiYobj0wKSx2b2lkIDA9PT1pJiYoaT10aGlzLmxlbmd0aCksdDwwfHxyPmUubGVuZ3RofHxuPDB8fGk+dGhpcy5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm91dCBvZiByYW5nZSBpbmRleCIpO2lmKG4+PWkmJnQ+PXIpcmV0dXJuIDA7aWYobj49aSlyZXR1cm4tMTtpZih0Pj1yKXJldHVybiAxO2lmKHRoaXM9PT1lKXJldHVybiAwO2Zvcih2YXIgbz0oaT4+Pj0wKS0obj4+Pj0wKSxhPShyPj4+PTApLSh0Pj4+PTApLHM9TWF0aC5taW4obyxhKSxjPXRoaXMuc2xpY2UobixpKSxmPWUuc2xpY2UodCxyKSxsPTA7bDxzOysrbClpZihjW2xdIT09ZltsXSl7bz1jW2xdLGE9ZltsXTticmVha31yZXR1cm4gbzxhPy0xOmE8bz8xOjB9LHUucHJvdG90eXBlLmluY2x1ZGVzPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4tMSE9PXRoaXMuaW5kZXhPZihlLHQscil9LHUucHJvdG90eXBlLmluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBnKHRoaXMsZSx0LHIsITApfSx1LnByb3RvdHlwZS5sYXN0SW5kZXhPZj1mdW5jdGlvbihlLHQscil7cmV0dXJuIGcodGhpcyxlLHQsciwhMSl9LHUucHJvdG90eXBlLg=="
}