3N2rk3yzChsJp4wCS5VLo5Q3ifLmDChfbzQ · data · qwer?main.e3350ff4d88d534234ef.js?4?1?2
{
    "qwer?main.e3350ff4d88d534234ef.js?4?1?2": "base64:b25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKToiRnV0dXJlKCIrdGhpcy5fZnV0dXJlU25hcHNob3QrIikifSx0fSgpO2Z1bmN0aW9uIEZjKHQsZSl7dm9pZCAwPT09ZSYmKGU9ImVtcHR5T25seSIpO3ZhciBuPXQucGF0aEZyb21Sb290LG89MDtpZigiYWx3YXlzIiE9PWUpZm9yKG89bi5sZW5ndGgtMTtvPj0xOyl7dmFyIGk9bltvXSxhPW5bby0xXTtpZihpLnJvdXRlQ29uZmlnJiYiIj09PWkucm91dGVDb25maWcucGF0aClvLS07ZWxzZXtpZihhLmNvbXBvbmVudClicmVhaztvLS19fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3Qoci5fX2Fzc2lnbikoe30sdC5wYXJhbXMsZS5wYXJhbXMpLGRhdGE6T2JqZWN0KHIuX19hc3NpZ24pKHt9LHQuZGF0YSxlLmRhdGEpLHJlc29sdmU6T2JqZWN0KHIuX19hc3NpZ24pKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KG4uc2xpY2UobykpfXZhciBCYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGksYSx1LGwscyxjKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9cix0aGlzLmRhdGE9byx0aGlzLm91dGxldD1pLHRoaXMuY29tcG9uZW50PWEsdGhpcy5yb3V0ZUNvbmZpZz11LHRoaXMuX3VybFNlZ21lbnQ9bCx0aGlzLl9sYXN0UGF0aEluZGV4PXMsdGhpcy5fcmVzb2x2ZT1jfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPVhzKHRoaXMucGFyYW1zKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPVhzKHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlKHVybDonIit0aGlzLnVybC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSxaYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIHIudXJsPWUsR2MocixuKSxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcWModGhpcy5fcm9vdCl9LGV9KGpjKTtmdW5jdGlvbiBHYyh0LGUpe2UudmFsdWUuX3JvdXRlclN0YXRlPXQsZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gR2ModCxlKX0pKX1mdW5jdGlvbiBxYyh0KXt2YXIgZT10LmNoaWxkcmVuLmxlbmd0aD4wPyIgeyAiK3QuY2hpbGRyZW4ubWFwKHFjKS5qb2luKCIsICIpKyIgfSAiOiIiO3JldHVybiIiK3QudmFsdWUrZX1mdW5jdGlvbiBXYyh0KXtpZih0LnNuYXBzaG90KXt2YXIgZT10LnNuYXBzaG90LG49dC5fZnV0dXJlU25hcHNob3Q7dC5zbmFwc2hvdD1uLGxjKGUucXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyl8fHQucXVlcnlQYXJhbXMubmV4dChuLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09bi5mcmFnbWVudCYmdC5mcmFnbWVudC5uZXh0KG4uZnJhZ21lbnQpLGxjKGUucGFyYW1zLG4ucGFyYW1zKXx8dC5wYXJhbXMubmV4dChuLnBhcmFtcyksZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCFsYyh0W25dLGVbbl0pKXJldHVybiExO3JldHVybiEwfShlLnVybCxuLnVybCl8fHQudXJsLm5leHQobi51cmwpLGxjKGUuZGF0YSxuLmRhdGEpfHx0LmRhdGEubmV4dChuLmRhdGEpfWVsc2UgdC5zbmFwc2hvdD10Ll9mdXR1cmVTbmFwc2hvdCx0LmRhdGEubmV4dCh0Ll9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBRYyh0LGUpe3ZhciBuLHI7cmV0dXJuIGxjKHQucGFyYW1zLGUucGFyYW1zKSYmeWMobj10LnVybCxyPWUudXJsKSYmbi5ldmVyeSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbGModC5wYXJhbWV0ZXJzLHJbZV0ucGFyYW1ldGVycyl9KSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxRYyh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIEtjKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gWWModCxlLG4scixvKXt2YXIgaT17fTtyZXR1cm4gciYmZmMociwoZnVuY3Rpb24odCxlKXtpW2VdPUFycmF5LmlzQXJyYXkodCk/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIiK3R9KSk6IiIrdH0pKSxuZXcgZGMobi5yb290PT09dD9lOmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvPXt9O3JldHVybiBmYyhlLmNoaWxkcmVuLChmdW5jdGlvbihlLGkpe29baV09ZT09PW4/cjp0KGUsbixyKX0pKSxuZXcgZ2MoZS5zZWdtZW50cyxvKX0obi5yb290LHQsZSksaSxvKX12YXIgSmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZLYyhuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciByPW4uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHN9KSk7aWYociYmciE9PWNjKG4pKXRocm93IG5ldyBFcnJvcigie291dGxldHM6e319IGhhcyB0byBiZSB0aGUgbGFzdCBjb21tYW5kIil9cmV0dXJuIHQucHJvdG90eXBlLnRvUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfSx0fSgpLCRjPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNlZ21lbnRHcm91cD10LHRoaXMucHJvY2Vzc0NoaWxkcmVuPWUsdGhpcy5pbmRleD1ufX0oKTtmdW5jdGlvbiBYYyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0cz90Lm91dGxldHNbSnNdOiIiK3R9ZnVuY3Rpb24gdGYodCxlLG4pe2lmKHR8fCh0PW5ldyBnYyhbXSx7fSkpLDA9PT10LnNlZ21lbnRzLmxlbmd0aCYmdC5oYXNDaGlsZHJlbigpKXJldHVybiBlZih0LGUsbik7dmFyIHI9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wLG89ZSxpPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07bzx0LnNlZ21lbnRzLmxlbmd0aDspe2lmKHI+PW4ubGVuZ3RoKXJldHVybiBpO3ZhciBhPXQuc2VnbWVudHNbb10sdT1YYyhuW3JdKSxsPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDtpZihvPjAmJnZvaWQgMD09PXUpYnJlYWs7aWYodSYmbCYmIm9iamVjdCI9PXR5cGVvZiBsJiZ2b2lkIDA9PT1sLm91dGxldHMpe2lmKCFhZih1LGwsYSkpcmV0dXJuIGk7cis9Mn1lbHNle2lmKCFhZih1LHt9LGEpKXJldHVybiBpO3IrK31vKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpvLGNvbW1hbmRJbmRleDpyfX0odCxlLG4pLG89bi5zbGljZShyLmNvbW1hbmRJbmRleCk7aWYoci5tYXRjaCYmci5wYXRoSW5kZXg8dC5zZWdtZW50cy5sZW5ndGgpe3ZhciBpPW5ldyBnYyh0LnNlZ21lbnRzLnNsaWNlKDAsci5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gaS5jaGlsZHJlbltKc109bmV3IGdjKHQuc2VnbWVudHMuc2xpY2Uoci5wYXRoSW5kZXgpLHQuY2hpbGRyZW4pLGVmKGksMCxvKX1yZXR1cm4gci5tYXRjaCYmMD09PW8ubGVuZ3RoP25ldyBnYyh0LnNlZ21lbnRzLHt9KTpyLm1hdGNoJiYhdC5oYXNDaGlsZHJlbigpP25mKHQsZSxuKTpyLm1hdGNoP2VmKHQsMCxvKTpuZih0LGUsbil9ZnVuY3Rpb24gZWYodCxlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IGdjKHQuc2VnbWVudHMse30pO3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0WzBdPygoZT17fSlbSnNdPXQsZSk6dm9pZCAwPT09dFswXS5vdXRsZXRzPygobj17fSlbSnNdPXQsbik6dFswXS5vdXRsZXRzfShuKSxvPXt9O3JldHVybiBmYyhyLChmdW5jdGlvbihuLHIpe251bGwhPT1uJiYob1tyXT10Zih0LmNoaWxkcmVuW3JdLGUsbikpfSkpLGZjKHQuY2hpbGRyZW4sKGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09cltlXSYmKG9bZV09dCl9KSksbmV3IGdjKHQuc2VnbWVudHMsbyl9ZnVuY3Rpb24gbmYodCxlLG4pe2Zvcih2YXIgcj10LnNlZ21lbnRzLnNsaWNlKDAsZSksbz0wO288bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bb10mJnZvaWQgMCE9PW5bb10ub3V0bGV0cyl7dmFyIGk9cmYobltvXS5vdXRsZXRzKTtyZXR1cm4gbmV3IGdjKHIsaSl9aWYoMD09PW8mJktjKG5bMF0pKXIucHVzaChuZXcgdmModC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxvKys7ZWxzZXt2YXIgYT1YYyhuW29dKSx1PW88bi5sZW5ndGgtMT9uW28rMV06bnVsbDthJiZ1JiZLYyh1KT8oci5wdXNoKG5ldyB2YyhhLG9mKHUpKSksbys9Mik6KHIucHVzaChuZXcgdmMoYSx7fSkpLG8rKyl9fXJldHVybiBuZXcgZ2Mocix7fSl9ZnVuY3Rpb24gcmYodCl7dmFyIGU9e307cmV0dXJuIGZjKHQsKGZ1bmN0aW9uKHQsbil7bnVsbCE9PXQmJihlW25dPW5mKG5ldyBnYyhbXSx7fSksMCx0KSl9KSksZX1mdW5jdGlvbiBvZih0KXt2YXIgZT17fTtyZXR1cm4gZmModCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSkpLGV9ZnVuY3Rpb24gYWYodCxlLG4pe3JldHVybiB0PT1uLnBhdGgmJmxjKGUsbi5wYXJhbWV0ZXJzKX12YXIgdWY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PXQsdGhpcy5mdXR1cmVTdGF0ZT1lLHRoaXMuY3VyclN0YXRlPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cn1yZXR1cm4gdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxuPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpLFdjKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLG89TGMoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtyLmRlYWN0aXZhdGVSb3V0ZXModCxvW2VdLG4pLGRlbGV0ZSBvW2VdfSkpLGZjKG8sKGZ1bmN0aW9uKHQsZSl7ci5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4pfSkpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGw7aWYocj09PW8paWYoci5jb21wb25lbnQpe3ZhciBpPW4uZ2V0Q29udGV4dChyLm91dGxldCk7aSYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLGkuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgcj1uLm91dGxldC5kZXRhY2goKSxvPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjpyLHJvdXRlOnQsY29udGV4dHM6b30pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYocil7dmFyIG89TGModCksaT10LnZhbHVlLmNvbXBvbmVudD9yLmNoaWxkcmVuOmU7ZmMobywoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LGkpfSkpLHIub3V0bGV0JiYoci5vdXRsZXQuZGVhY3RpdmF0ZSgpLHIuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpKX19LHQucHJvdG90eXBlLmFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsbz1MYyhlKTt0LmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuYWN0aXZhdGVSb3V0ZXModCxvW3QudmFsdWUub3V0bGV0XSxuKSxyLmZvcndhcmRFdmVudChuZXcgUXModC52YWx1ZS5zbmFwc2hvdCkpfSkpLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgcXModC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsO2lmKFdjKHIpLHI9PT1vKWlmKHIuY29tcG9uZW50KXt2YXIgaT1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxpLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihyLmNvbXBvbmVudClpZihpPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goci5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKHIuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHIuc25hcHNob3QsbnVsbCksaS5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksaS5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsaS5yb3V0ZT1hLnJvdXRlLnZhbHVlLGkub3V0bGV0JiZpLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksbGYoYS5yb3V0ZSl9ZWxzZXt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfShyLnNuYXBzaG90KSxsPXU/dS5tb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOm51bGw7aS5hdHRhY2hSZWY9bnVsbCxpLnJvdXRlPXIsaS5yZXNvbHZlcj1sLGkub3V0bGV0JiZpLm91dGxldC5hY3RpdmF0ZVdpdGgocixsKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLGkuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBsZih0KXtXYyh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2gobGYpfWZ1bmN0aW9uIHNmKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGNmKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZGN9dmFyIGZmPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9fSgpLGhmPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fX0oKTtmdW5jdGlvbiBwZih0KXtyZXR1cm4gbmV3IHgoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBmZih0KSl9KSl9ZnVuY3Rpb24gZGYodCl7cmV0dXJuIG5ldyB4KChmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgaGYodCkpfSkpfWZ1bmN0aW9uIGdmKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEVycm9yKCJPbmx5IGFic29sdXRlIHJlZGlyZWN0cyBjYW4gaGF2ZSBuYW1lZCBvdXRsZXRzLiByZWRpcmVjdFRvOiAnIit0KyInIikpfSkpfXZhciB2Zj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1yLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KEh0KX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHRoaXMudXJsVHJlZS5yb290LEpzKS5waXBlKEIoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNyZWF0ZVVybFRyZWUoZSx0LnVybFRyZWUucXVlcnlQYXJhbXMsdC51cmxUcmVlLmZyYWdtZW50KX0pKSkucGlwZShpbCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGhmKXJldHVybiB0LmFsbG93UmVkaXJlY3RzPSExLHQubWF0Y2goZS51cmxUcmVlKTtpZihlIGluc3RhbmNlb2YgZmYpdGhyb3cgdC5ub01hdGNoRXJyb3IoZSk7dGhyb3cgZX0pKSl9LHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdC5yb290LEpzKS5waXBlKEIoKGZ1bmN0aW9uKG4pe3JldHVybiBlLmNyZWF0ZVVybFRyZWUobix0LnF1ZXJ5UGFyYW1zLHQuZnJhZ21lbnQpfSkpKS5waXBlKGlsKChmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZmYpdGhyb3cgZS5ub01hdGNoRXJyb3IodCk7dGhyb3cgdH0pKSl9LHQucHJvdG90eXBlLm5vTWF0Y2hFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKCJDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICciK3Quc2VnbWVudEdyb3VwKyInIil9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG89dC5zZWdtZW50cy5sZW5ndGg+MD9uZXcgZ2MoW10sKChyPXt9KVtKc109dCxyKSk6dDtyZXR1cm4gbmV3IGRjKG8sZSxuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAwPT09bi5zZWdtZW50cy5sZW5ndGgmJm4uaGFzQ2hpbGRyZW4oKT90aGlzLmV4cGFuZENoaWxkcmVuKHQsZSxuKS5waXBlKEIoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2MoW10sdCl9KSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLHIsITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gZnVuY3Rpb24obixvKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBSdSh7fSk7dmFyIGk9W10sYT1bXSx1PXt9O3JldHVybiBmYyhuLChmdW5jdGlvbihuLG8pe3ZhciBsLHMsYz0obD1vLHM9bixyLmV4cGFuZFNlZ21lbnRHcm91cCh0LGUscyxsKSkucGlwZShCKChmdW5jdGlvbih0KXtyZXR1cm4gdVtvXT10fSkpKTtvPT09SnM/aS5wdXNoKGMpOmEucHVzaChjKX0pKSxSdS5hcHBseShudWxsLGkuY29uY2F0KGEpKS5waXBlKHp1KCksb2woKSxCKChmdW5jdGlvbigpe3JldHVybiB1fSkpKX0obi5jaGlsZHJlbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnQ9ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3ZhciB1PXRoaXM7cmV0dXJuIFJ1LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkobikpLnBpcGUoQigoZnVuY3Rpb24ocil7cmV0dXJuIHUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUsbixyLG8saSxhKS5waXBlKGlsKChmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZmYpcmV0dXJuIFJ1KG51bGwpO3Rocm93IHR9KSkpfSkpLHp1KCksZmwoKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSxpbCgoZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgTnV8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUsbyxpKSlyZXR1cm4gUnUobmV3IGdjKFtdLHt9KSk7dGhyb3cgbmV3IGZmKGUpfXRocm93IHR9KSkpfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyLG8saSxhKXtyZXR1cm4gd2YocikhPT1pP3BmKGUpOnZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUscixvKTphJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixvLGkpOnBmKGUpfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLG8saSl7cmV0dXJuIioqIj09PXIucGF0aD90aGlzLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxuLHIsaSk6dGhpcy5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixvLGkpfSx0LnByb3RvdHlwZS5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMsaT10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhbXSxuLnJlZGlyZWN0VG8se30pO3JldHVybiBuLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP2RmKGkpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKG4saSkucGlwZShRKChmdW5jdGlvbihuKXt2YXIgaT1uZXcgZ2Mobix7fSk7cmV0dXJuIG8uZXhwYW5kU2VnbWVudCh0LGksZSxuLHIsITEpfSkpKX0sdC5wcm90b3R5cGUuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT10aGlzLHU9eWYoZSxyLG8pLGw9dS5jb25zdW1lZFNlZ21lbnRzLHM9dS5sYXN0Q2hpbGQsYz11LnBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzO2lmKCF1Lm1hdGNoZWQpcmV0dXJuIHBmKGUpO3ZhciBmPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsci5yZWRpcmVjdFRvLGMpO3JldHVybiByLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP2RmKGYpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKHIsZikucGlwZShRKChmdW5jdGlvbihyKXtyZXR1cm4gYS5leHBhbmRTZWdtZW50KHQsZSxuLHIuY29uY2F0KG8uc2xpY2UocykpLGksITEpfSkpKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBpPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoQigoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBnYyhvLHt9KX0pKSk6UnUobmV3IGdjKG8se30pKTt2YXIgYT15ZihlLG4sbyksdT1hLmNvbnN1bWVkU2VnbWVudHMsbD1hLmxhc3RDaGlsZDtpZighYS5tYXRjaGVkKXJldHVybiBwZihlKTt2YXIgcz1vLnNsaWNlKGwpO3JldHVybiB0aGlzLmdldENoaWxkQ29uZmlnKHQsbixvKS5waXBlKFEoKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLG89dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBuLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiBfZih0LGUsbikmJndmKG4pIT09SnN9KSl9KHQsbixvKT97c2VnbWVudEdyb3VwOm1mKG5ldyBnYyhlLGZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxpPXt9O2lbSnNdPWU7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5fX3ZhbHVlcykodCksdT1hLm5leHQoKTshdS5kb25lO3U9YS5uZXh0KCkpe3ZhciBsPXUudmFsdWU7IiI9PT1sLnBhdGgmJndmKGwpIT09SnMmJihpW3dmKGwpXT1uZXcgZ2MoW10se30pKX19Y2F0Y2gocyl7bj17ZXJyb3I6c319ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfShvLG5ldyBnYyhuLHQuY2hpbGRyZW4pKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbi5zb21lKChmdW5jdGlvbihuKXtyZXR1cm4gX2YodCxlLG4pfSkpfSh0LG4sbyk/e3NlZ21lbnRHcm91cDptZihuZXcgZ2ModC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixvKXt2YXIgaSxhLHU9e307dHJ5e2Zvcih2YXIgbD1PYmplY3Qoci5fX3ZhbHVlcykobikscz1sLm5leHQoKTshcy5kb25lO3M9bC5uZXh0KCkpe3ZhciBjPXMudmFsdWU7X2YodCxlLGMpJiYhb1t3ZihjKV0mJih1W3dmKGMpXT1uZXcgZ2MoW10se30pKX19Y2F0Y2goZil7aT17ZXJyb3I6Zn19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKGE9bC5yZXR1cm4pJiZhLmNhbGwobCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBPYmplY3Qoci5fX2Fzc2lnbikoe30sbyx1KX0odCxuLG8sdC5jaGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpufTp7c2VnbWVudEdyb3VwOnQsc2xpY2VkU2VnbWVudHM6bn19KGUsdSxzLG8pLGw9YS5zZWdtZW50R3JvdXAsYz1hLnNsaWNlZFNlZ21lbnRzO3JldHVybiAwPT09Yy5sZW5ndGgmJmwuaGFzQ2hpbGRyZW4oKT9pLmV4cGFuZENoaWxkcmVuKG4sbyxsKS5waXBlKEIoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2ModSx0KX0pKSk6MD09PW8ubGVuZ3RoJiYwPT09Yy5sZW5ndGg/UnUobmV3IGdjKHUse30pKTppLmV4cGFuZFNlZ21lbnQobixsLG8sYyxKcywhMCkucGlwZShCKChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdjKHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpKX0pKSl9LHQucHJvdG90eXBlLmdldENoaWxkQ29uZmlnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3JldHVybiBlLmNoaWxkcmVuP1J1KG5ldyByYyhlLmNoaWxkcmVuLHQpKTplLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1lLl9sb2FkZWRDb25maWc/UnUoZS5fbG9hZGVkQ29uZmlnKTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbz1lLmNhbkxvYWQ7cmV0dXJuIG8mJjAhPT1vLmxlbmd0aD9XKG8pLnBpcGUoQigoZnVuY3Rpb24ocil7dmFyIG8saT10LmdldChyKTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmc2YodC5jYW5Mb2FkKX0oaSkpbz1pLmNhbkxvYWQoZSxuKTtlbHNle2lmKCFzZihpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgQ2FuTG9hZCBndWFyZCIpO289aShlLG4pfXJldHVybiBoYyhvKX0pKSkucGlwZSh6dSgpLChyPWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgaGwocix2b2lkIDAsdCkpfSkpOlJ1KCEwKX0odC5pbmplY3RvcixlLG4pLnBpcGUoUSgoZnVuY3Rpb24obil7cmV0dXJuIG4/ci5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoQigoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSkpOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoZWMoIkNhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpfSkpfShlKX0pKSk6UnUobmV3IHJjKFtdLHQpKX0sdC5wcm90b3R5cGUubGluZXJhbGl6ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLHI9ZS5yb290Ozspe2lmKG49bi5jb25jYXQoci5zZWdtZW50cyksMD09PXIubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gUnUobik7aWYoci5udW1iZXJPZkNoaWxkcmVuPjF8fCFyLmNoaWxkcmVuW0pzXSlyZXR1cm4gZ2YodC5yZWRpcmVjdFRvKTtyPXIuY2hpbGRyZW5bSnNdfX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENvbW1hbmRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWUoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxuKX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LG4scik7cmV0dXJuIG5ldyBkYyhvLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfSx0LnByb3RvdHlwZS5jcmVhdGVRdWVyeVBhcmFtcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmYyh0LChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5zdGFydHNXaXRoKCI6Iikpe3ZhciBvPXQuc3Vic3RyaW5nKDEpO25bcl09ZVtvXX1lbHNlIG5bcl09dH0pKSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcyxpPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4sciksYT17fTtyZXR1cm4gZmMoZS5jaGlsZHJlbiwoZnVuY3Rpb24oZSxpKXthW2ldPW8uY3JlYXRlU2VnbWVudEdyb3VwKHQsZSxuLHIpfSkpLG5ldyBnYyhpLGEpfSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/by5maW5kUG9zUGFyYW0odCxlLHIpOm8uZmluZE9yUmV0dXJuKGUsbil9KSl9LHQucHJvdG90eXBlLmZpbmRQb3NQYXJhbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9bltlLnBhdGguc3Vic3RyaW5nKDEpXTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRpcmVjdCB0byAnIit0KyInLiBDYW5ub3QgZmluZCAnIitlLnBhdGgrIicuIik7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmZpbmRPclJldHVybj1mdW5jdGlvbih0LGUpe3ZhciBuLG8saT0wO3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuX192YWx1ZXMpKGUpLHU9YS5uZXh0KCk7IXUuZG9uZTt1PWEubmV4dCgpKXt2YXIgbD11LnZhbHVlO2lmKGwucGF0aD09PXQucGF0aClyZXR1cm4gZS5zcGxpY2UoaSksbDtpKyt9fWNhdGNoKHMpe249e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiB5Zih0LGUsbil7aWYoIiI9PT1lLnBhdGgpcmV0dXJuImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApP3ttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O3ZhciByPShlLm1hdGNoZXJ8fG5jKShuLHQsZSk7cmV0dXJuIHI/e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpyLnBvc1BhcmFtc306e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19ZnVuY3Rpb24gbWYodCl7aWYoMT09PXQubnVtYmVyT2ZDaGlsZHJlbiYmdC5jaGlsZHJlbltKc10pe3ZhciBlPXQuY2hpbGRyZW5bSnNdO3JldHVybiBuZXcgZ2ModC5zZWdtZW50cy5jb25jYXQoZS5zZWdtZW50cyksZS5jaGlsZHJlbil9cmV0dXJuIHR9ZnVuY3Rpb24gX2YodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMCE9PW4ucmVkaXJlY3RUb31mdW5jdGlvbiB3Zih0KXtyZXR1cm4gdC5vdXRsZXR8fEpzfXZhciBiZj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX0oKSx4Zj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfX0oKTtmdW5jdGlvbiBDZih0LGUsbil7dmFyIHI9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZ31yZXR1cm4gbnVsbH0oZSk7cmV0dXJuKHI/ci5tb2R1bGUuaW5qZWN0b3I6bikuZ2V0KHQpfWZ1bmN0aW9uIFNmKHQsZSxuLHIsbyl7dm9pZCAwPT09byYmKG89e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KTt2YXIgaT1MYyhlKTtyZXR1cm4gdC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scixvKXt2b2lkIDA9PT1vJiYobz17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pO3ZhciBpPXQudmFsdWUsYT1lP2UudmFsdWU6bnVsbCx1PW4/bi5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTpudWxsO2lmKGEmJmkucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnKXt2YXIgbD1mdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIG4odCxlKTtzd2l0Y2gobil7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4heWModC51cmwsZS51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiF5Yyh0LnVybCxlLnVybCl8fCFsYyh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFRYyh0LGUpfHwhbGModC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKTtjYXNlInBhcmFtc0NoYW5nZSI6ZGVmYXVsdDpyZXR1cm4hUWModCxlKX19KGEsaSxpLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7bD9vLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGJmKHIpKTooaS5kYXRhPWEuZGF0YSxpLl9yZXNvbHZlZERhdGE9YS5fcmVzb2x2ZWREYXRhKSxTZih0LGUsaS5jb21wb25lbnQ/dT91LmNoaWxkcmVuOm51bGw6bixyLG8pLGwmJm8uY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyB4Zih1JiZ1Lm91dGxldCYmdS5vdXRsZXQuY29tcG9uZW50fHxudWxsLGEpKX1lbHNlIGEmJkVmKGUsdSxvKSxvLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGJmKHIpKSxTZih0LG51bGwsaS5jb21wb25lbnQ/dT91LmNoaWxkcmVuOm51bGw6bixyLG8pfSh0LGlbdC52YWx1ZS5vdXRsZXRdLG4sci5jb25jYXQoW3QudmFsdWVdKSxvKSxkZWxldGUgaVt0LnZhbHVlLm91dGxldF19KSksZmMoaSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gRWYodCxuLmdldENvbnRleHQoZSksbyl9KSksb31mdW5jdGlvbiBFZih0LGUsbil7dmFyIHI9TGModCksbz10LnZhbHVlO2ZjKHIsKGZ1bmN0aW9uKHQscil7RWYodCxvLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChyKTpudWxsOmUsbil9KSksbi5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IHhmKG8uY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwsbykpfXZhciBPZj1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBUZigpe3JldHVybiBkbCgoZnVuY3Rpb24odCl7cmV0dXJuIFV1LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpcGUobGwoMSksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07QShuKT90LnBvcCgpOm49bnVsbDt2YXIgcj10Lmxlbmd0aDtyZXR1cm4geWwoMSE9PXJ8fG4/cj4wP3EodCxuKTpBdShuKTpJdSh0WzBdKSxlKX19KE9mKSl9KSkpKS5waXBlKG1sKChmdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24odCxyLG8pe2lmKHQhPT1PZilyZXR1cm4gdDtpZihyPT09T2YmJihuPSEwKSwhbil7aWYoITE9PT1yKXJldHVybiByO2lmKG89PT1lLmxlbmd0aC0xfHxjZihyKSlyZXR1cm4gcn1yZXR1cm4gdH0pLHQpfSksT2YpLEZ1KChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PU9mfSkpLEIoKGZ1bmN0aW9uKHQpe3JldHVybiBjZih0KT90OiEwPT09dH0pKSxsbCgxKSl9KSl9ZnVuY3Rpb24gUGYodCxlKXtyZXR1cm4gbnVsbCE9PXQmJmUmJmUobmV3IFdzKHQpKSxSdSghMCl9ZnVuY3Rpb24ga2YodCxlKXtyZXR1cm4gbnVsbCE9PXQmJmUmJmUobmV3IEdzKHQpKSxSdSghMCl9ZnVuY3Rpb24gQWYodCxlLG4pe3ZhciByPWUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpudWxsO3JldHVybiByJiYwIT09ci5sZW5ndGg/UnUoci5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiBIdSgoZnVuY3Rpb24oKXt2YXIgbyxpPUNmKHIsZSxuKTtpZihmdW5jdGlvbih0KQ=="
}

Changelog:

{
    "2019.12.04 14:30": "base64:b25maWd1cmFibGU6ITB9KSx0LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnNuYXBzaG90P3RoaXMuc25hcHNob3QudG9TdHJpbmcoKToiRnV0dXJlKCIrdGhpcy5fZnV0dXJlU25hcHNob3QrIikifSx0fSgpO2Z1bmN0aW9uIEZjKHQsZSl7dm9pZCAwPT09ZSYmKGU9ImVtcHR5T25seSIpO3ZhciBuPXQucGF0aEZyb21Sb290LG89MDtpZigiYWx3YXlzIiE9PWUpZm9yKG89bi5sZW5ndGgtMTtvPj0xOyl7dmFyIGk9bltvXSxhPW5bby0xXTtpZihpLnJvdXRlQ29uZmlnJiYiIj09PWkucm91dGVDb25maWcucGF0aClvLS07ZWxzZXtpZihhLmNvbXBvbmVudClicmVhaztvLS19fXJldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKHQsZSl7cmV0dXJue3BhcmFtczpPYmplY3Qoci5fX2Fzc2lnbikoe30sdC5wYXJhbXMsZS5wYXJhbXMpLGRhdGE6T2JqZWN0KHIuX19hc3NpZ24pKHt9LHQuZGF0YSxlLmRhdGEpLHJlc29sdmU6T2JqZWN0KHIuX19hc3NpZ24pKHt9LHQucmVzb2x2ZSxlLl9yZXNvbHZlZERhdGEpfX0pLHtwYXJhbXM6e30sZGF0YTp7fSxyZXNvbHZlOnt9fSl9KG4uc2xpY2UobykpfXZhciBCYz1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvLGksYSx1LGwscyxjKXt0aGlzLnVybD10LHRoaXMucGFyYW1zPWUsdGhpcy5xdWVyeVBhcmFtcz1uLHRoaXMuZnJhZ21lbnQ9cix0aGlzLmRhdGE9byx0aGlzLm91dGxldD1pLHRoaXMuY29tcG9uZW50PWEsdGhpcy5yb3V0ZUNvbmZpZz11LHRoaXMuX3VybFNlZ21lbnQ9bCx0aGlzLl9sYXN0UGF0aEluZGV4PXMsdGhpcy5fcmVzb2x2ZT1jfXJldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInJvb3QiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcm91dGVyU3RhdGUucm9vdH0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhcmVudCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXJlbnQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJmaXJzdENoaWxkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JvdXRlclN0YXRlLmZpcnN0Q2hpbGQodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJjaGlsZHJlbiIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5jaGlsZHJlbih0aGlzKX0sZW51bWVyYWJsZTohMCxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodC5wcm90b3R5cGUsInBhdGhGcm9tUm9vdCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yb3V0ZXJTdGF0ZS5wYXRoRnJvbVJvb3QodGhpcyl9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJwYXJhbU1hcCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYXJhbU1hcHx8KHRoaXMuX3BhcmFtTWFwPVhzKHRoaXMucGFyYW1zKSksdGhpcy5fcGFyYW1NYXB9LGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQucHJvdG90eXBlLCJxdWVyeVBhcmFtTWFwIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3F1ZXJ5UGFyYW1NYXB8fCh0aGlzLl9xdWVyeVBhcmFtTWFwPVhzKHRoaXMucXVlcnlQYXJhbXMpKSx0aGlzLl9xdWVyeVBhcmFtTWFwfSxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pLHQucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIlJvdXRlKHVybDonIit0aGlzLnVybC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnRvU3RyaW5nKCl9KSkuam9pbigiLyIpKyInLCBwYXRoOiciKyh0aGlzLnJvdXRlQ29uZmlnP3RoaXMucm91dGVDb25maWcucGF0aDoiIikrIicpIn0sdH0oKSxaYz1mdW5jdGlvbih0KXtmdW5jdGlvbiBlKGUsbil7dmFyIHI9dC5jYWxsKHRoaXMsbil8fHRoaXM7cmV0dXJuIHIudXJsPWUsR2MocixuKSxyfXJldHVybiBPYmplY3Qoci5fX2V4dGVuZHMpKGUsdCksZS5wcm90b3R5cGUudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gcWModGhpcy5fcm9vdCl9LGV9KGpjKTtmdW5jdGlvbiBHYyh0LGUpe2UudmFsdWUuX3JvdXRlclN0YXRlPXQsZS5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gR2ModCxlKX0pKX1mdW5jdGlvbiBxYyh0KXt2YXIgZT10LmNoaWxkcmVuLmxlbmd0aD4wPyIgeyAiK3QuY2hpbGRyZW4ubWFwKHFjKS5qb2luKCIsICIpKyIgfSAiOiIiO3JldHVybiIiK3QudmFsdWUrZX1mdW5jdGlvbiBXYyh0KXtpZih0LnNuYXBzaG90KXt2YXIgZT10LnNuYXBzaG90LG49dC5fZnV0dXJlU25hcHNob3Q7dC5zbmFwc2hvdD1uLGxjKGUucXVlcnlQYXJhbXMsbi5xdWVyeVBhcmFtcyl8fHQucXVlcnlQYXJhbXMubmV4dChuLnF1ZXJ5UGFyYW1zKSxlLmZyYWdtZW50IT09bi5mcmFnbWVudCYmdC5mcmFnbWVudC5uZXh0KG4uZnJhZ21lbnQpLGxjKGUucGFyYW1zLG4ucGFyYW1zKXx8dC5wYXJhbXMubmV4dChuLnBhcmFtcyksZnVuY3Rpb24odCxlKXtpZih0Lmxlbmd0aCE9PWUubGVuZ3RoKXJldHVybiExO2Zvcih2YXIgbj0wO248dC5sZW5ndGg7KytuKWlmKCFsYyh0W25dLGVbbl0pKXJldHVybiExO3JldHVybiEwfShlLnVybCxuLnVybCl8fHQudXJsLm5leHQobi51cmwpLGxjKGUuZGF0YSxuLmRhdGEpfHx0LmRhdGEubmV4dChuLmRhdGEpfWVsc2UgdC5zbmFwc2hvdD10Ll9mdXR1cmVTbmFwc2hvdCx0LmRhdGEubmV4dCh0Ll9mdXR1cmVTbmFwc2hvdC5kYXRhKX1mdW5jdGlvbiBRYyh0LGUpe3ZhciBuLHI7cmV0dXJuIGxjKHQucGFyYW1zLGUucGFyYW1zKSYmeWMobj10LnVybCxyPWUudXJsKSYmbi5ldmVyeSgoZnVuY3Rpb24odCxlKXtyZXR1cm4gbGModC5wYXJhbWV0ZXJzLHJbZV0ucGFyYW1ldGVycyl9KSkmJiEoIXQucGFyZW50IT0hZS5wYXJlbnQpJiYoIXQucGFyZW50fHxRYyh0LnBhcmVudCxlLnBhcmVudCkpfWZ1bmN0aW9uIEtjKHQpe3JldHVybiJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9dCYmIXQub3V0bGV0cyYmIXQuc2VnbWVudFBhdGh9ZnVuY3Rpb24gWWModCxlLG4scixvKXt2YXIgaT17fTtyZXR1cm4gciYmZmMociwoZnVuY3Rpb24odCxlKXtpW2VdPUFycmF5LmlzQXJyYXkodCk/dC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiIiK3R9KSk6IiIrdH0pKSxuZXcgZGMobi5yb290PT09dD9lOmZ1bmN0aW9uIHQoZSxuLHIpe3ZhciBvPXt9O3JldHVybiBmYyhlLmNoaWxkcmVuLChmdW5jdGlvbihlLGkpe29baV09ZT09PW4/cjp0KGUsbixyKX0pKSxuZXcgZ2MoZS5zZWdtZW50cyxvKX0obi5yb290LHQsZSksaSxvKX12YXIgSmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuKXtpZih0aGlzLmlzQWJzb2x1dGU9dCx0aGlzLm51bWJlck9mRG91YmxlRG90cz1lLHRoaXMuY29tbWFuZHM9bix0JiZuLmxlbmd0aD4wJiZLYyhuWzBdKSl0aHJvdyBuZXcgRXJyb3IoIlJvb3Qgc2VnbWVudCBjYW5ub3QgaGF2ZSBtYXRyaXggcGFyYW1ldGVycyIpO3ZhciByPW4uZmluZCgoZnVuY3Rpb24odCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiB0JiZudWxsIT10JiZ0Lm91dGxldHN9KSk7aWYociYmciE9PWNjKG4pKXRocm93IG5ldyBFcnJvcigie291dGxldHM6e319IGhhcyB0byBiZSB0aGUgbGFzdCBjb21tYW5kIil9cmV0dXJuIHQucHJvdG90eXBlLnRvUm9vdD1mdW5jdGlvbigpe3JldHVybiB0aGlzLmlzQWJzb2x1dGUmJjE9PT10aGlzLmNvbW1hbmRzLmxlbmd0aCYmIi8iPT10aGlzLmNvbW1hbmRzWzBdfSx0fSgpLCRjPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQsZSxuKXt0aGlzLnNlZ21lbnRHcm91cD10LHRoaXMucHJvY2Vzc0NoaWxkcmVuPWUsdGhpcy5pbmRleD1ufX0oKTtmdW5jdGlvbiBYYyh0KXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIHQmJm51bGwhPXQmJnQub3V0bGV0cz90Lm91dGxldHNbSnNdOiIiK3R9ZnVuY3Rpb24gdGYodCxlLG4pe2lmKHR8fCh0PW5ldyBnYyhbXSx7fSkpLDA9PT10LnNlZ21lbnRzLmxlbmd0aCYmdC5oYXNDaGlsZHJlbigpKXJldHVybiBlZih0LGUsbik7dmFyIHI9ZnVuY3Rpb24odCxlLG4pe2Zvcih2YXIgcj0wLG89ZSxpPXttYXRjaDohMSxwYXRoSW5kZXg6MCxjb21tYW5kSW5kZXg6MH07bzx0LnNlZ21lbnRzLmxlbmd0aDspe2lmKHI+PW4ubGVuZ3RoKXJldHVybiBpO3ZhciBhPXQuc2VnbWVudHNbb10sdT1YYyhuW3JdKSxsPXI8bi5sZW5ndGgtMT9uW3IrMV06bnVsbDtpZihvPjAmJnZvaWQgMD09PXUpYnJlYWs7aWYodSYmbCYmIm9iamVjdCI9PXR5cGVvZiBsJiZ2b2lkIDA9PT1sLm91dGxldHMpe2lmKCFhZih1LGwsYSkpcmV0dXJuIGk7cis9Mn1lbHNle2lmKCFhZih1LHt9LGEpKXJldHVybiBpO3IrK31vKyt9cmV0dXJue21hdGNoOiEwLHBhdGhJbmRleDpvLGNvbW1hbmRJbmRleDpyfX0odCxlLG4pLG89bi5zbGljZShyLmNvbW1hbmRJbmRleCk7aWYoci5tYXRjaCYmci5wYXRoSW5kZXg8dC5zZWdtZW50cy5sZW5ndGgpe3ZhciBpPW5ldyBnYyh0LnNlZ21lbnRzLnNsaWNlKDAsci5wYXRoSW5kZXgpLHt9KTtyZXR1cm4gaS5jaGlsZHJlbltKc109bmV3IGdjKHQuc2VnbWVudHMuc2xpY2Uoci5wYXRoSW5kZXgpLHQuY2hpbGRyZW4pLGVmKGksMCxvKX1yZXR1cm4gci5tYXRjaCYmMD09PW8ubGVuZ3RoP25ldyBnYyh0LnNlZ21lbnRzLHt9KTpyLm1hdGNoJiYhdC5oYXNDaGlsZHJlbigpP25mKHQsZSxuKTpyLm1hdGNoP2VmKHQsMCxvKTpuZih0LGUsbil9ZnVuY3Rpb24gZWYodCxlLG4pe2lmKDA9PT1uLmxlbmd0aClyZXR1cm4gbmV3IGdjKHQuc2VnbWVudHMse30pO3ZhciByPWZ1bmN0aW9uKHQpe3ZhciBlLG47cmV0dXJuIm9iamVjdCIhPXR5cGVvZiB0WzBdPygoZT17fSlbSnNdPXQsZSk6dm9pZCAwPT09dFswXS5vdXRsZXRzPygobj17fSlbSnNdPXQsbik6dFswXS5vdXRsZXRzfShuKSxvPXt9O3JldHVybiBmYyhyLChmdW5jdGlvbihuLHIpe251bGwhPT1uJiYob1tyXT10Zih0LmNoaWxkcmVuW3JdLGUsbikpfSkpLGZjKHQuY2hpbGRyZW4sKGZ1bmN0aW9uKHQsZSl7dm9pZCAwPT09cltlXSYmKG9bZV09dCl9KSksbmV3IGdjKHQuc2VnbWVudHMsbyl9ZnVuY3Rpb24gbmYodCxlLG4pe2Zvcih2YXIgcj10LnNlZ21lbnRzLnNsaWNlKDAsZSksbz0wO288bi5sZW5ndGg7KXtpZigib2JqZWN0Ij09dHlwZW9mIG5bb10mJnZvaWQgMCE9PW5bb10ub3V0bGV0cyl7dmFyIGk9cmYobltvXS5vdXRsZXRzKTtyZXR1cm4gbmV3IGdjKHIsaSl9aWYoMD09PW8mJktjKG5bMF0pKXIucHVzaChuZXcgdmModC5zZWdtZW50c1tlXS5wYXRoLG5bMF0pKSxvKys7ZWxzZXt2YXIgYT1YYyhuW29dKSx1PW88bi5sZW5ndGgtMT9uW28rMV06bnVsbDthJiZ1JiZLYyh1KT8oci5wdXNoKG5ldyB2YyhhLG9mKHUpKSksbys9Mik6KHIucHVzaChuZXcgdmMoYSx7fSkpLG8rKyl9fXJldHVybiBuZXcgZ2Mocix7fSl9ZnVuY3Rpb24gcmYodCl7dmFyIGU9e307cmV0dXJuIGZjKHQsKGZ1bmN0aW9uKHQsbil7bnVsbCE9PXQmJihlW25dPW5mKG5ldyBnYyhbXSx7fSksMCx0KSl9KSksZX1mdW5jdGlvbiBvZih0KXt2YXIgZT17fTtyZXR1cm4gZmModCwoZnVuY3Rpb24odCxuKXtyZXR1cm4gZVtuXT0iIit0fSkpLGV9ZnVuY3Rpb24gYWYodCxlLG4pe3JldHVybiB0PT1uLnBhdGgmJmxjKGUsbi5wYXJhbWV0ZXJzKX12YXIgdWY9ZnVuY3Rpb24oKXtmdW5jdGlvbiB0KHQsZSxuLHIpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5PXQsdGhpcy5mdXR1cmVTdGF0ZT1lLHRoaXMuY3VyclN0YXRlPW4sdGhpcy5mb3J3YXJkRXZlbnQ9cn1yZXR1cm4gdC5wcm90b3R5cGUuYWN0aXZhdGU9ZnVuY3Rpb24odCl7dmFyIGU9dGhpcy5mdXR1cmVTdGF0ZS5fcm9vdCxuPXRoaXMuY3VyclN0YXRlP3RoaXMuY3VyclN0YXRlLl9yb290Om51bGw7dGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXMoZSxuLHQpLFdjKHRoaXMuZnV0dXJlU3RhdGUucm9vdCksdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKGUsbix0KX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZUNoaWxkUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzLG89TGMoZSk7dC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgZT10LnZhbHVlLm91dGxldDtyLmRlYWN0aXZhdGVSb3V0ZXModCxvW2VdLG4pLGRlbGV0ZSBvW2VdfSkpLGZjKG8sKGZ1bmN0aW9uKHQsZSl7ci5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LG4pfSkpfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVzPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10LnZhbHVlLG89ZT9lLnZhbHVlOm51bGw7aWYocj09PW8paWYoci5jb21wb25lbnQpe3ZhciBpPW4uZ2V0Q29udGV4dChyLm91dGxldCk7aSYmdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLGkuY2hpbGRyZW4pfWVsc2UgdGhpcy5kZWFjdGl2YXRlQ2hpbGRSb3V0ZXModCxlLG4pO2Vsc2UgbyYmdGhpcy5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbihlLG4pfSx0LnByb3RvdHlwZS5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbj1mdW5jdGlvbih0LGUpe3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnNob3VsZERldGFjaCh0LnZhbHVlLnNuYXBzaG90KT90aGlzLmRldGFjaEFuZFN0b3JlUm91dGVTdWJ0cmVlKHQsZSk6dGhpcy5kZWFjdGl2YXRlUm91dGVBbmRPdXRsZXQodCxlKX0sdC5wcm90b3R5cGUuZGV0YWNoQW5kU3RvcmVSb3V0ZVN1YnRyZWU9ZnVuY3Rpb24odCxlKXt2YXIgbj1lLmdldENvbnRleHQodC52YWx1ZS5vdXRsZXQpO2lmKG4mJm4ub3V0bGV0KXt2YXIgcj1uLm91dGxldC5kZXRhY2goKSxvPW4uY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHQudmFsdWUuc25hcHNob3Qse2NvbXBvbmVudFJlZjpyLHJvdXRlOnQsY29udGV4dHM6b30pfX0sdC5wcm90b3R5cGUuZGVhY3RpdmF0ZVJvdXRlQW5kT3V0bGV0PWZ1bmN0aW9uKHQsZSl7dmFyIG49dGhpcyxyPWUuZ2V0Q29udGV4dCh0LnZhbHVlLm91dGxldCk7aWYocil7dmFyIG89TGModCksaT10LnZhbHVlLmNvbXBvbmVudD9yLmNoaWxkcmVuOmU7ZmMobywoZnVuY3Rpb24odCxlKXtyZXR1cm4gbi5kZWFjdGl2YXRlUm91dGVBbmRJdHNDaGlsZHJlbih0LGkpfSkpLHIub3V0bGV0JiYoci5vdXRsZXQuZGVhY3RpdmF0ZSgpLHIuY2hpbGRyZW4ub25PdXRsZXREZWFjdGl2YXRlZCgpKX19LHQucHJvdG90eXBlLmFjdGl2YXRlQ2hpbGRSb3V0ZXM9ZnVuY3Rpb24odCxlLG4pe3ZhciByPXRoaXMsbz1MYyhlKTt0LmNoaWxkcmVuLmZvckVhY2goKGZ1bmN0aW9uKHQpe3IuYWN0aXZhdGVSb3V0ZXModCxvW3QudmFsdWUub3V0bGV0XSxuKSxyLmZvcndhcmRFdmVudChuZXcgUXModC52YWx1ZS5zbmFwc2hvdCkpfSkpLHQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmZvcndhcmRFdmVudChuZXcgcXModC52YWx1ZS5zbmFwc2hvdCkpfSx0LnByb3RvdHlwZS5hY3RpdmF0ZVJvdXRlcz1mdW5jdGlvbih0LGUsbil7dmFyIHI9dC52YWx1ZSxvPWU/ZS52YWx1ZTpudWxsO2lmKFdjKHIpLHI9PT1vKWlmKHIuY29tcG9uZW50KXt2YXIgaT1uLmdldE9yQ3JlYXRlQ29udGV4dChyLm91dGxldCk7dGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsZSxpLmNoaWxkcmVuKX1lbHNlIHRoaXMuYWN0aXZhdGVDaGlsZFJvdXRlcyh0LGUsbik7ZWxzZSBpZihyLmNvbXBvbmVudClpZihpPW4uZ2V0T3JDcmVhdGVDb250ZXh0KHIub3V0bGV0KSx0aGlzLnJvdXRlUmV1c2VTdHJhdGVneS5zaG91bGRBdHRhY2goci5zbmFwc2hvdCkpe3ZhciBhPXRoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnJldHJpZXZlKHIuc25hcHNob3QpO3RoaXMucm91dGVSZXVzZVN0cmF0ZWd5LnN0b3JlKHIuc25hcHNob3QsbnVsbCksaS5jaGlsZHJlbi5vbk91dGxldFJlQXR0YWNoZWQoYS5jb250ZXh0cyksaS5hdHRhY2hSZWY9YS5jb21wb25lbnRSZWYsaS5yb3V0ZT1hLnJvdXRlLnZhbHVlLGkub3V0bGV0JiZpLm91dGxldC5hdHRhY2goYS5jb21wb25lbnRSZWYsYS5yb3V0ZS52YWx1ZSksbGYoYS5yb3V0ZSl9ZWxzZXt2YXIgdT1mdW5jdGlvbih0KXtmb3IodmFyIGU9dC5wYXJlbnQ7ZTtlPWUucGFyZW50KXt2YXIgbj1lLnJvdXRlQ29uZmlnO2lmKG4mJm4uX2xvYWRlZENvbmZpZylyZXR1cm4gbi5fbG9hZGVkQ29uZmlnO2lmKG4mJm4uY29tcG9uZW50KXJldHVybiBudWxsfXJldHVybiBudWxsfShyLnNuYXBzaG90KSxsPXU/dS5tb2R1bGUuY29tcG9uZW50RmFjdG9yeVJlc29sdmVyOm51bGw7aS5hdHRhY2hSZWY9bnVsbCxpLnJvdXRlPXIsaS5yZXNvbHZlcj1sLGkub3V0bGV0JiZpLm91dGxldC5hY3RpdmF0ZVdpdGgocixsKSx0aGlzLmFjdGl2YXRlQ2hpbGRSb3V0ZXModCxudWxsLGkuY2hpbGRyZW4pfWVsc2UgdGhpcy5hY3RpdmF0ZUNoaWxkUm91dGVzKHQsbnVsbCxuKX0sdH0oKTtmdW5jdGlvbiBsZih0KXtXYyh0LnZhbHVlKSx0LmNoaWxkcmVuLmZvckVhY2gobGYpfWZ1bmN0aW9uIHNmKHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0fWZ1bmN0aW9uIGNmKHQpe3JldHVybiB0IGluc3RhbmNlb2YgZGN9dmFyIGZmPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMuc2VnbWVudEdyb3VwPXR8fG51bGx9fSgpLGhmPWZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKHQpe3RoaXMudXJsVHJlZT10fX0oKTtmdW5jdGlvbiBwZih0KXtyZXR1cm4gbmV3IHgoKGZ1bmN0aW9uKGUpe3JldHVybiBlLmVycm9yKG5ldyBmZih0KSl9KSl9ZnVuY3Rpb24gZGYodCl7cmV0dXJuIG5ldyB4KChmdW5jdGlvbihlKXtyZXR1cm4gZS5lcnJvcihuZXcgaGYodCkpfSkpfWZ1bmN0aW9uIGdmKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IobmV3IEVycm9yKCJPbmx5IGFic29sdXRlIHJlZGlyZWN0cyBjYW4gaGF2ZSBuYW1lZCBvdXRsZXRzLiByZWRpcmVjdFRvOiAnIit0KyInIikpfSkpfXZhciB2Zj1mdW5jdGlvbigpe2Z1bmN0aW9uIHQodCxlLG4scixvKXt0aGlzLmNvbmZpZ0xvYWRlcj1lLHRoaXMudXJsU2VyaWFsaXplcj1uLHRoaXMudXJsVHJlZT1yLHRoaXMuY29uZmlnPW8sdGhpcy5hbGxvd1JlZGlyZWN0cz0hMCx0aGlzLm5nTW9kdWxlPXQuZ2V0KEh0KX1yZXR1cm4gdC5wcm90b3R5cGUuYXBwbHk9ZnVuY3Rpb24oKXt2YXIgdD10aGlzO3JldHVybiB0aGlzLmV4cGFuZFNlZ21lbnRHcm91cCh0aGlzLm5nTW9kdWxlLHRoaXMuY29uZmlnLHRoaXMudXJsVHJlZS5yb290LEpzKS5waXBlKEIoKGZ1bmN0aW9uKGUpe3JldHVybiB0LmNyZWF0ZVVybFRyZWUoZSx0LnVybFRyZWUucXVlcnlQYXJhbXMsdC51cmxUcmVlLmZyYWdtZW50KX0pKSkucGlwZShpbCgoZnVuY3Rpb24oZSl7aWYoZSBpbnN0YW5jZW9mIGhmKXJldHVybiB0LmFsbG93UmVkaXJlY3RzPSExLHQubWF0Y2goZS51cmxUcmVlKTtpZihlIGluc3RhbmNlb2YgZmYpdGhyb3cgdC5ub01hdGNoRXJyb3IoZSk7dGhyb3cgZX0pKSl9LHQucHJvdG90eXBlLm1hdGNoPWZ1bmN0aW9uKHQpe3ZhciBlPXRoaXM7cmV0dXJuIHRoaXMuZXhwYW5kU2VnbWVudEdyb3VwKHRoaXMubmdNb2R1bGUsdGhpcy5jb25maWcsdC5yb290LEpzKS5waXBlKEIoKGZ1bmN0aW9uKG4pe3JldHVybiBlLmNyZWF0ZVVybFRyZWUobix0LnF1ZXJ5UGFyYW1zLHQuZnJhZ21lbnQpfSkpKS5waXBlKGlsKChmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZmYpdGhyb3cgZS5ub01hdGNoRXJyb3IodCk7dGhyb3cgdH0pKSl9LHQucHJvdG90eXBlLm5vTWF0Y2hFcnJvcj1mdW5jdGlvbih0KXtyZXR1cm4gbmV3IEVycm9yKCJDYW5ub3QgbWF0Y2ggYW55IHJvdXRlcy4gVVJMIFNlZ21lbnQ6ICciK3Quc2VnbWVudEdyb3VwKyInIil9LHQucHJvdG90eXBlLmNyZWF0ZVVybFRyZWU9ZnVuY3Rpb24odCxlLG4pe3ZhciByLG89dC5zZWdtZW50cy5sZW5ndGg+MD9uZXcgZ2MoW10sKChyPXt9KVtKc109dCxyKSk6dDtyZXR1cm4gbmV3IGRjKG8sZSxuKX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEdyb3VwPWZ1bmN0aW9uKHQsZSxuLHIpe3JldHVybiAwPT09bi5zZWdtZW50cy5sZW5ndGgmJm4uaGFzQ2hpbGRyZW4oKT90aGlzLmV4cGFuZENoaWxkcmVuKHQsZSxuKS5waXBlKEIoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2MoW10sdCl9KSkpOnRoaXMuZXhwYW5kU2VnbWVudCh0LG4sZSxuLnNlZ21lbnRzLHIsITApfSx0LnByb3RvdHlwZS5leHBhbmRDaGlsZHJlbj1mdW5jdGlvbih0LGUsbil7dmFyIHI9dGhpcztyZXR1cm4gZnVuY3Rpb24obixvKXtpZigwPT09T2JqZWN0LmtleXMobikubGVuZ3RoKXJldHVybiBSdSh7fSk7dmFyIGk9W10sYT1bXSx1PXt9O3JldHVybiBmYyhuLChmdW5jdGlvbihuLG8pe3ZhciBsLHMsYz0obD1vLHM9bixyLmV4cGFuZFNlZ21lbnRHcm91cCh0LGUscyxsKSkucGlwZShCKChmdW5jdGlvbih0KXtyZXR1cm4gdVtvXT10fSkpKTtvPT09SnM/aS5wdXNoKGMpOmEucHVzaChjKX0pKSxSdS5hcHBseShudWxsLGkuY29uY2F0KGEpKS5waXBlKHp1KCksb2woKSxCKChmdW5jdGlvbigpe3JldHVybiB1fSkpKX0obi5jaGlsZHJlbil9LHQucHJvdG90eXBlLmV4cGFuZFNlZ21lbnQ9ZnVuY3Rpb24odCxlLG4sbyxpLGEpe3ZhciB1PXRoaXM7cmV0dXJuIFJ1LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkobikpLnBpcGUoQigoZnVuY3Rpb24ocil7cmV0dXJuIHUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUsbixyLG8saSxhKS5waXBlKGlsKChmdW5jdGlvbih0KXtpZih0IGluc3RhbmNlb2YgZmYpcmV0dXJuIFJ1KG51bGwpO3Rocm93IHR9KSkpfSkpLHp1KCksZmwoKGZ1bmN0aW9uKHQpe3JldHVybiEhdH0pKSxpbCgoZnVuY3Rpb24odCxuKXtpZih0IGluc3RhbmNlb2YgTnV8fCJFbXB0eUVycm9yIj09PXQubmFtZSl7aWYodS5ub0xlZnRvdmVyc0luVXJsKGUsbyxpKSlyZXR1cm4gUnUobmV3IGdjKFtdLHt9KSk7dGhyb3cgbmV3IGZmKGUpfXRocm93IHR9KSkpfSx0LnByb3RvdHlwZS5ub0xlZnRvdmVyc0luVXJsPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gMD09PWUubGVuZ3RoJiYhdC5jaGlsZHJlbltuXX0sdC5wcm90b3R5cGUuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZT1mdW5jdGlvbih0LGUsbixyLG8saSxhKXtyZXR1cm4gd2YocikhPT1pP3BmKGUpOnZvaWQgMD09PXIucmVkaXJlY3RUbz90aGlzLm1hdGNoU2VnbWVudEFnYWluc3RSb3V0ZSh0LGUscixvKTphJiZ0aGlzLmFsbG93UmVkaXJlY3RzP3RoaXMuZXhwYW5kU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixvLGkpOnBmKGUpfSx0LnByb3RvdHlwZS5leHBhbmRTZWdtZW50QWdhaW5zdFJvdXRlVXNpbmdSZWRpcmVjdD1mdW5jdGlvbih0LGUsbixyLG8saSl7cmV0dXJuIioqIj09PXIucGF0aD90aGlzLmV4cGFuZFdpbGRDYXJkV2l0aFBhcmFtc0FnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxuLHIsaSk6dGhpcy5leHBhbmRSZWd1bGFyU2VnbWVudEFnYWluc3RSb3V0ZVVzaW5nUmVkaXJlY3QodCxlLG4scixvLGkpfSx0LnByb3RvdHlwZS5leHBhbmRXaWxkQ2FyZFdpdGhQYXJhbXNBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMsaT10aGlzLmFwcGx5UmVkaXJlY3RDb21tYW5kcyhbXSxuLnJlZGlyZWN0VG8se30pO3JldHVybiBuLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP2RmKGkpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKG4saSkucGlwZShRKChmdW5jdGlvbihuKXt2YXIgaT1uZXcgZ2Mobix7fSk7cmV0dXJuIG8uZXhwYW5kU2VnbWVudCh0LGksZSxuLHIsITEpfSkpKX0sdC5wcm90b3R5cGUuZXhwYW5kUmVndWxhclNlZ21lbnRBZ2FpbnN0Um91dGVVc2luZ1JlZGlyZWN0PWZ1bmN0aW9uKHQsZSxuLHIsbyxpKXt2YXIgYT10aGlzLHU9eWYoZSxyLG8pLGw9dS5jb25zdW1lZFNlZ21lbnRzLHM9dS5sYXN0Q2hpbGQsYz11LnBvc2l0aW9uYWxQYXJhbVNlZ21lbnRzO2lmKCF1Lm1hdGNoZWQpcmV0dXJuIHBmKGUpO3ZhciBmPXRoaXMuYXBwbHlSZWRpcmVjdENvbW1hbmRzKGwsci5yZWRpcmVjdFRvLGMpO3JldHVybiByLnJlZGlyZWN0VG8uc3RhcnRzV2l0aCgiLyIpP2RmKGYpOnRoaXMubGluZXJhbGl6ZVNlZ21lbnRzKHIsZikucGlwZShRKChmdW5jdGlvbihyKXtyZXR1cm4gYS5leHBhbmRTZWdtZW50KHQsZSxuLHIuY29uY2F0KG8uc2xpY2UocykpLGksITEpfSkpKX0sdC5wcm90b3R5cGUubWF0Y2hTZWdtZW50QWdhaW5zdFJvdXRlPWZ1bmN0aW9uKHQsZSxuLG8pe3ZhciBpPXRoaXM7aWYoIioqIj09PW4ucGF0aClyZXR1cm4gbi5sb2FkQ2hpbGRyZW4/dGhpcy5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLG4pLnBpcGUoQigoZnVuY3Rpb24odCl7cmV0dXJuIG4uX2xvYWRlZENvbmZpZz10LG5ldyBnYyhvLHt9KX0pKSk6UnUobmV3IGdjKG8se30pKTt2YXIgYT15ZihlLG4sbyksdT1hLmNvbnN1bWVkU2VnbWVudHMsbD1hLmxhc3RDaGlsZDtpZighYS5tYXRjaGVkKXJldHVybiBwZihlKTt2YXIgcz1vLnNsaWNlKGwpO3JldHVybiB0aGlzLmdldENoaWxkQ29uZmlnKHQsbixvKS5waXBlKFEoKGZ1bmN0aW9uKHQpe3ZhciBuPXQubW9kdWxlLG89dC5yb3V0ZXMsYT1mdW5jdGlvbih0LGUsbixvKXtyZXR1cm4gbi5sZW5ndGg+MCYmZnVuY3Rpb24odCxlLG4pe3JldHVybiBuLnNvbWUoKGZ1bmN0aW9uKG4pe3JldHVybiBfZih0LGUsbikmJndmKG4pIT09SnN9KSl9KHQsbixvKT97c2VnbWVudEdyb3VwOm1mKG5ldyBnYyhlLGZ1bmN0aW9uKHQsZSl7dmFyIG4sbyxpPXt9O2lbSnNdPWU7dHJ5e2Zvcih2YXIgYT1PYmplY3Qoci5fX3ZhbHVlcykodCksdT1hLm5leHQoKTshdS5kb25lO3U9YS5uZXh0KCkpe3ZhciBsPXUudmFsdWU7IiI9PT1sLnBhdGgmJndmKGwpIT09SnMmJihpW3dmKGwpXT1uZXcgZ2MoW10se30pKX19Y2F0Y2gocyl7bj17ZXJyb3I6c319ZmluYWxseXt0cnl7dSYmIXUuZG9uZSYmKG89YS5yZXR1cm4pJiZvLmNhbGwoYSl9ZmluYWxseXtpZihuKXRocm93IG4uZXJyb3J9fXJldHVybiBpfShvLG5ldyBnYyhuLHQuY2hpbGRyZW4pKSkpLHNsaWNlZFNlZ21lbnRzOltdfTowPT09bi5sZW5ndGgmJmZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gbi5zb21lKChmdW5jdGlvbihuKXtyZXR1cm4gX2YodCxlLG4pfSkpfSh0LG4sbyk/e3NlZ21lbnRHcm91cDptZihuZXcgZ2ModC5zZWdtZW50cyxmdW5jdGlvbih0LGUsbixvKXt2YXIgaSxhLHU9e307dHJ5e2Zvcih2YXIgbD1PYmplY3Qoci5fX3ZhbHVlcykobikscz1sLm5leHQoKTshcy5kb25lO3M9bC5uZXh0KCkpe3ZhciBjPXMudmFsdWU7X2YodCxlLGMpJiYhb1t3ZihjKV0mJih1W3dmKGMpXT1uZXcgZ2MoW10se30pKX19Y2F0Y2goZil7aT17ZXJyb3I6Zn19ZmluYWxseXt0cnl7cyYmIXMuZG9uZSYmKGE9bC5yZXR1cm4pJiZhLmNhbGwobCl9ZmluYWxseXtpZihpKXRocm93IGkuZXJyb3J9fXJldHVybiBPYmplY3Qoci5fX2Fzc2lnbikoe30sbyx1KX0odCxuLG8sdC5jaGlsZHJlbikpKSxzbGljZWRTZWdtZW50czpufTp7c2VnbWVudEdyb3VwOnQsc2xpY2VkU2VnbWVudHM6bn19KGUsdSxzLG8pLGw9YS5zZWdtZW50R3JvdXAsYz1hLnNsaWNlZFNlZ21lbnRzO3JldHVybiAwPT09Yy5sZW5ndGgmJmwuaGFzQ2hpbGRyZW4oKT9pLmV4cGFuZENoaWxkcmVuKG4sbyxsKS5waXBlKEIoKGZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZ2ModSx0KX0pKSk6MD09PW8ubGVuZ3RoJiYwPT09Yy5sZW5ndGg/UnUobmV3IGdjKHUse30pKTppLmV4cGFuZFNlZ21lbnQobixsLG8sYyxKcywhMCkucGlwZShCKChmdW5jdGlvbih0KXtyZXR1cm4gbmV3IGdjKHUuY29uY2F0KHQuc2VnbWVudHMpLHQuY2hpbGRyZW4pfSkpKX0pKSl9LHQucHJvdG90eXBlLmdldENoaWxkQ29uZmlnPWZ1bmN0aW9uKHQsZSxuKXt2YXIgcj10aGlzO3JldHVybiBlLmNoaWxkcmVuP1J1KG5ldyByYyhlLmNoaWxkcmVuLHQpKTplLmxvYWRDaGlsZHJlbj92b2lkIDAhPT1lLl9sb2FkZWRDb25maWc/UnUoZS5fbG9hZGVkQ29uZmlnKTpmdW5jdGlvbih0LGUsbil7dmFyIHIsbz1lLmNhbkxvYWQ7cmV0dXJuIG8mJjAhPT1vLmxlbmd0aD9XKG8pLnBpcGUoQigoZnVuY3Rpb24ocil7dmFyIG8saT10LmdldChyKTtpZihmdW5jdGlvbih0KXtyZXR1cm4gdCYmc2YodC5jYW5Mb2FkKX0oaSkpbz1pLmNhbkxvYWQoZSxuKTtlbHNle2lmKCFzZihpKSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgQ2FuTG9hZCBndWFyZCIpO289aShlLG4pfXJldHVybiBoYyhvKX0pKSkucGlwZSh6dSgpLChyPWZ1bmN0aW9uKHQpe3JldHVybiEwPT09dH0sZnVuY3Rpb24odCl7cmV0dXJuIHQubGlmdChuZXcgaGwocix2b2lkIDAsdCkpfSkpOlJ1KCEwKX0odC5pbmplY3RvcixlLG4pLnBpcGUoUSgoZnVuY3Rpb24obil7cmV0dXJuIG4/ci5jb25maWdMb2FkZXIubG9hZCh0LmluamVjdG9yLGUpLnBpcGUoQigoZnVuY3Rpb24odCl7cmV0dXJuIGUuX2xvYWRlZENvbmZpZz10LHR9KSkpOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgeCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZXJyb3IoZWMoIkNhbm5vdCBsb2FkIGNoaWxkcmVuIGJlY2F1c2UgdGhlIGd1YXJkIG9mIHRoZSByb3V0ZSBcInBhdGg6ICciK3QucGF0aCsiJ1wiIHJldHVybmVkIGZhbHNlIikpfSkpfShlKX0pKSk6UnUobmV3IHJjKFtdLHQpKX0sdC5wcm90b3R5cGUubGluZXJhbGl6ZVNlZ21lbnRzPWZ1bmN0aW9uKHQsZSl7Zm9yKHZhciBuPVtdLHI9ZS5yb290Ozspe2lmKG49bi5jb25jYXQoci5zZWdtZW50cyksMD09PXIubnVtYmVyT2ZDaGlsZHJlbilyZXR1cm4gUnUobik7aWYoci5udW1iZXJPZkNoaWxkcmVuPjF8fCFyLmNoaWxkcmVuW0pzXSlyZXR1cm4gZ2YodC5yZWRpcmVjdFRvKTtyPXIuY2hpbGRyZW5bSnNdfX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENvbW1hbmRzPWZ1bmN0aW9uKHQsZSxuKXtyZXR1cm4gdGhpcy5hcHBseVJlZGlyZWN0Q3JlYXRyZVVybFRyZWUoZSx0aGlzLnVybFNlcmlhbGl6ZXIucGFyc2UoZSksdCxuKX0sdC5wcm90b3R5cGUuYXBwbHlSZWRpcmVjdENyZWF0cmVVcmxUcmVlPWZ1bmN0aW9uKHQsZSxuLHIpe3ZhciBvPXRoaXMuY3JlYXRlU2VnbWVudEdyb3VwKHQsZS5yb290LG4scik7cmV0dXJuIG5ldyBkYyhvLHRoaXMuY3JlYXRlUXVlcnlQYXJhbXMoZS5xdWVyeVBhcmFtcyx0aGlzLnVybFRyZWUucXVlcnlQYXJhbXMpLGUuZnJhZ21lbnQpfSx0LnByb3RvdHlwZS5jcmVhdGVRdWVyeVBhcmFtcz1mdW5jdGlvbih0LGUpe3ZhciBuPXt9O3JldHVybiBmYyh0LChmdW5jdGlvbih0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdCYmdC5zdGFydHNXaXRoKCI6Iikpe3ZhciBvPXQuc3Vic3RyaW5nKDEpO25bcl09ZVtvXX1lbHNlIG5bcl09dH0pKSxufSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50R3JvdXA9ZnVuY3Rpb24odCxlLG4scil7dmFyIG89dGhpcyxpPXRoaXMuY3JlYXRlU2VnbWVudHModCxlLnNlZ21lbnRzLG4sciksYT17fTtyZXR1cm4gZmMoZS5jaGlsZHJlbiwoZnVuY3Rpb24oZSxpKXthW2ldPW8uY3JlYXRlU2VnbWVudEdyb3VwKHQsZSxuLHIpfSkpLG5ldyBnYyhpLGEpfSx0LnByb3RvdHlwZS5jcmVhdGVTZWdtZW50cz1mdW5jdGlvbih0LGUsbixyKXt2YXIgbz10aGlzO3JldHVybiBlLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUucGF0aC5zdGFydHNXaXRoKCI6Iik/by5maW5kUG9zUGFyYW0odCxlLHIpOm8uZmluZE9yUmV0dXJuKGUsbil9KSl9LHQucHJvdG90eXBlLmZpbmRQb3NQYXJhbT1mdW5jdGlvbih0LGUsbil7dmFyIHI9bltlLnBhdGguc3Vic3RyaW5nKDEpXTtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCByZWRpcmVjdCB0byAnIit0KyInLiBDYW5ub3QgZmluZCAnIitlLnBhdGgrIicuIik7cmV0dXJuIHJ9LHQucHJvdG90eXBlLmZpbmRPclJldHVybj1mdW5jdGlvbih0LGUpe3ZhciBuLG8saT0wO3RyeXtmb3IodmFyIGE9T2JqZWN0KHIuX192YWx1ZXMpKGUpLHU9YS5uZXh0KCk7IXUuZG9uZTt1PWEubmV4dCgpKXt2YXIgbD11LnZhbHVlO2lmKGwucGF0aD09PXQucGF0aClyZXR1cm4gZS5zcGxpY2UoaSksbDtpKyt9fWNhdGNoKHMpe249e2Vycm9yOnN9fWZpbmFsbHl7dHJ5e3UmJiF1LmRvbmUmJihvPWEucmV0dXJuKSYmby5jYWxsKGEpfWZpbmFsbHl7aWYobil0aHJvdyBuLmVycm9yfX1yZXR1cm4gdH0sdH0oKTtmdW5jdGlvbiB5Zih0LGUsbil7aWYoIiI9PT1lLnBhdGgpcmV0dXJuImZ1bGwiPT09ZS5wYXRoTWF0Y2gmJih0Lmhhc0NoaWxkcmVuKCl8fG4ubGVuZ3RoPjApP3ttYXRjaGVkOiExLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319OnttYXRjaGVkOiEwLGNvbnN1bWVkU2VnbWVudHM6W10sbGFzdENoaWxkOjAscG9zaXRpb25hbFBhcmFtU2VnbWVudHM6e319O3ZhciByPShlLm1hdGNoZXJ8fG5jKShuLHQsZSk7cmV0dXJuIHI/e21hdGNoZWQ6ITAsY29uc3VtZWRTZWdtZW50czpyLmNvbnN1bWVkLGxhc3RDaGlsZDpyLmNvbnN1bWVkLmxlbmd0aCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czpyLnBvc1BhcmFtc306e21hdGNoZWQ6ITEsY29uc3VtZWRTZWdtZW50czpbXSxsYXN0Q2hpbGQ6MCxwb3NpdGlvbmFsUGFyYW1TZWdtZW50czp7fX19ZnVuY3Rpb24gbWYodCl7aWYoMT09PXQubnVtYmVyT2ZDaGlsZHJlbiYmdC5jaGlsZHJlbltKc10pe3ZhciBlPXQuY2hpbGRyZW5bSnNdO3JldHVybiBuZXcgZ2ModC5zZWdtZW50cy5jb25jYXQoZS5zZWdtZW50cyksZS5jaGlsZHJlbil9cmV0dXJuIHR9ZnVuY3Rpb24gX2YodCxlLG4pe3JldHVybighKHQuaGFzQ2hpbGRyZW4oKXx8ZS5sZW5ndGg+MCl8fCJmdWxsIiE9PW4ucGF0aE1hdGNoKSYmIiI9PT1uLnBhdGgmJnZvaWQgMCE9PW4ucmVkaXJlY3RUb31mdW5jdGlvbiB3Zih0KXtyZXR1cm4gdC5vdXRsZXR8fEpzfXZhciBiZj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXt0aGlzLnBhdGg9dCx0aGlzLnJvdXRlPXRoaXMucGF0aFt0aGlzLnBhdGgubGVuZ3RoLTFdfX0oKSx4Zj1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0LGUpe3RoaXMuY29tcG9uZW50PXQsdGhpcy5yb3V0ZT1lfX0oKTtmdW5jdGlvbiBDZih0LGUsbil7dmFyIHI9ZnVuY3Rpb24odCl7aWYoIXQpcmV0dXJuIG51bGw7Zm9yKHZhciBlPXQucGFyZW50O2U7ZT1lLnBhcmVudCl7dmFyIG49ZS5yb3V0ZUNvbmZpZztpZihuJiZuLl9sb2FkZWRDb25maWcpcmV0dXJuIG4uX2xvYWRlZENvbmZpZ31yZXR1cm4gbnVsbH0oZSk7cmV0dXJuKHI/ci5tb2R1bGUuaW5qZWN0b3I6bikuZ2V0KHQpfWZ1bmN0aW9uIFNmKHQsZSxuLHIsbyl7dm9pZCAwPT09byYmKG89e2NhbkRlYWN0aXZhdGVDaGVja3M6W10sY2FuQWN0aXZhdGVDaGVja3M6W119KTt2YXIgaT1MYyhlKTtyZXR1cm4gdC5jaGlsZHJlbi5mb3JFYWNoKChmdW5jdGlvbih0KXshZnVuY3Rpb24odCxlLG4scixvKXt2b2lkIDA9PT1vJiYobz17Y2FuRGVhY3RpdmF0ZUNoZWNrczpbXSxjYW5BY3RpdmF0ZUNoZWNrczpbXX0pO3ZhciBpPXQudmFsdWUsYT1lP2UudmFsdWU6bnVsbCx1PW4/bi5nZXRDb250ZXh0KHQudmFsdWUub3V0bGV0KTpudWxsO2lmKGEmJmkucm91dGVDb25maWc9PT1hLnJvdXRlQ29uZmlnKXt2YXIgbD1mdW5jdGlvbih0LGUsbil7aWYoImZ1bmN0aW9uIj09dHlwZW9mIG4pcmV0dXJuIG4odCxlKTtzd2l0Y2gobil7Y2FzZSJwYXRoUGFyYW1zQ2hhbmdlIjpyZXR1cm4heWModC51cmwsZS51cmwpO2Nhc2UicGF0aFBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiF5Yyh0LnVybCxlLnVybCl8fCFsYyh0LnF1ZXJ5UGFyYW1zLGUucXVlcnlQYXJhbXMpO2Nhc2UiYWx3YXlzIjpyZXR1cm4hMDtjYXNlInBhcmFtc09yUXVlcnlQYXJhbXNDaGFuZ2UiOnJldHVybiFRYyh0LGUpfHwhbGModC5xdWVyeVBhcmFtcyxlLnF1ZXJ5UGFyYW1zKTtjYXNlInBhcmFtc0NoYW5nZSI6ZGVmYXVsdDpyZXR1cm4hUWModCxlKX19KGEsaSxpLnJvdXRlQ29uZmlnLnJ1bkd1YXJkc0FuZFJlc29sdmVycyk7bD9vLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGJmKHIpKTooaS5kYXRhPWEuZGF0YSxpLl9yZXNvbHZlZERhdGE9YS5fcmVzb2x2ZWREYXRhKSxTZih0LGUsaS5jb21wb25lbnQ/dT91LmNoaWxkcmVuOm51bGw6bixyLG8pLGwmJm8uY2FuRGVhY3RpdmF0ZUNoZWNrcy5wdXNoKG5ldyB4Zih1JiZ1Lm91dGxldCYmdS5vdXRsZXQuY29tcG9uZW50fHxudWxsLGEpKX1lbHNlIGEmJkVmKGUsdSxvKSxvLmNhbkFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IGJmKHIpKSxTZih0LG51bGwsaS5jb21wb25lbnQ/dT91LmNoaWxkcmVuOm51bGw6bixyLG8pfSh0LGlbdC52YWx1ZS5vdXRsZXRdLG4sci5jb25jYXQoW3QudmFsdWVdKSxvKSxkZWxldGUgaVt0LnZhbHVlLm91dGxldF19KSksZmMoaSwoZnVuY3Rpb24odCxlKXtyZXR1cm4gRWYodCxuLmdldENvbnRleHQoZSksbyl9KSksb31mdW5jdGlvbiBFZih0LGUsbil7dmFyIHI9TGModCksbz10LnZhbHVlO2ZjKHIsKGZ1bmN0aW9uKHQscil7RWYodCxvLmNvbXBvbmVudD9lP2UuY2hpbGRyZW4uZ2V0Q29udGV4dChyKTpudWxsOmUsbil9KSksbi5jYW5EZWFjdGl2YXRlQ2hlY2tzLnB1c2gobmV3IHhmKG8uY29tcG9uZW50JiZlJiZlLm91dGxldCYmZS5vdXRsZXQuaXNBY3RpdmF0ZWQ/ZS5vdXRsZXQuY29tcG9uZW50Om51bGwsbykpfXZhciBPZj1TeW1ib2woIklOSVRJQUxfVkFMVUUiKTtmdW5jdGlvbiBUZigpe3JldHVybiBkbCgoZnVuY3Rpb24odCl7cmV0dXJuIFV1LmFwcGx5KHZvaWQgMCxPYmplY3Qoci5fX3NwcmVhZCkodC5tYXAoKGZ1bmN0aW9uKHQpe3JldHVybiB0LnBpcGUobGwoMSksZnVuY3Rpb24oKXtmb3IodmFyIHQ9W10sZT0wO2U8YXJndW1lbnRzLmxlbmd0aDtlKyspdFtlXT1hcmd1bWVudHNbZV07cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciBuPXRbdC5sZW5ndGgtMV07QShuKT90LnBvcCgpOm49bnVsbDt2YXIgcj10Lmxlbmd0aDtyZXR1cm4geWwoMSE9PXJ8fG4/cj4wP3EodCxuKTpBdShuKTpJdSh0WzBdKSxlKX19KE9mKSl9KSkpKS5waXBlKG1sKChmdW5jdGlvbih0LGUpe3ZhciBuPSExO3JldHVybiBlLnJlZHVjZSgoZnVuY3Rpb24odCxyLG8pe2lmKHQhPT1PZilyZXR1cm4gdDtpZihyPT09T2YmJihuPSEwKSwhbil7aWYoITE9PT1yKXJldHVybiByO2lmKG89PT1lLmxlbmd0aC0xfHxjZihyKSlyZXR1cm4gcn1yZXR1cm4gdH0pLHQpfSksT2YpLEZ1KChmdW5jdGlvbih0KXtyZXR1cm4gdCE9PU9mfSkpLEIoKGZ1bmN0aW9uKHQpe3JldHVybiBjZih0KT90OiEwPT09dH0pKSxsbCgxKSl9KSl9ZnVuY3Rpb24gUGYodCxlKXtyZXR1cm4gbnVsbCE9PXQmJmUmJmUobmV3IFdzKHQpKSxSdSghMCl9ZnVuY3Rpb24ga2YodCxlKXtyZXR1cm4gbnVsbCE9PXQmJmUmJmUobmV3IEdzKHQpKSxSdSghMCl9ZnVuY3Rpb24gQWYodCxlLG4pe3ZhciByPWUucm91dGVDb25maWc/ZS5yb3V0ZUNvbmZpZy5jYW5BY3RpdmF0ZTpudWxsO3JldHVybiByJiYwIT09ci5sZW5ndGg/UnUoci5tYXAoKGZ1bmN0aW9uKHIpe3JldHVybiBIdSgoZnVuY3Rpb24oKXt2YXIgbyxpPUNmKHIsZSxuKTtpZihmdW5jdGlvbih0KQ=="
}

github/deemru/w8io/169f3d6 
2.04 ms