0x85582125…5972sent to0x96a83b48…d253·#22,595,607·view on Etherscan
xlLHRoaXMudG9sZXJhbmNlKSYmbCsrfSkpLGw+MXx8ci5wdXNoKFtzLG9dKX19Zm9yKGxldCBlIG9mIHIpdi5ib29sKHQpJiZ0aGlzLnJlbW92ZUVkZ2UoZVswXS54LGVbMF0ueSxlWzFdLngsZVsxXS55KTt0aGlzLmNsZWFudXBUcmFpbGluZ0VkZ2VzKCl9aW5zZXJ0UG9seWdvbihlLHQ9ITApe2xldCBpPVtdLG49bmV3IE47bi5leHBhbmRzKGUubWFwKChlPT4obmV3IEQpLmZyb21BcnJheShlKSkpKSxuLmV4cGFuZEJ5VmFsdWUodGhpcy50b2xlcmFuY2UpO2xldCBzPXRoaXMuZ2V0RmFjZXNJbnRlcnNlY3RpbmdBQUJCKG4pLHI9bmV3IFNldDtmb3IobGV0IGUgb2Ygcyl7bGV0IHQ9ZS52ZXJ0ZXhsaXN0O2ZvcihsZXQgZT0wO2U8dC5sZW5ndGg7ZSsrKXtsZXQgaT10W2VdLG49dFsoZSsxKSV0Lmxlbmd0aF0scz10aGlzLmZpbmRIZWRnZShpLngsaS55LG4ueCxuLnkpO3IuaGFzKHMudHdpbil8fHIuYWRkKHMpfX1mb3IobGV0IHQgb2YgZSlpLnB1c2goe3R5cGU6ImFkZFZlcnRleCIsZGF0YTp7eDp0WzBdLHk6dFsxXX19KTtmb3IobGV0IG4gb2Ygcil7bGV0IHM9W107ZTpmb3IobGV0IHI9MDtyPCh0P2UubGVuZ3RoOmUubGVuZ3RoLTEpO3IrKyl7bGV0IHQ9W25ldyBEKC4uLmVbcl0pLG5ldyBEKC4uLmVbKHIrMSklZS5sZW5ndGhdKV0sbz1uLmludGVyc2VjdFdpdGhMaW5lU2VnbWVudCh0KTtpZihvLnR5cGU9PUYuaW50ZXJzZWN0aW5nKXtmb3IobGV0IGUgb2YgcylpZihlLmlzRXF1YWxUbyhvLnBvaW50KSljb250aW51ZSBlO2kucHVzaCh7dHlwZToiYWRkVmVydGV4IixkYXRhOnt4Om8ucG9pbnQueCx5Om8ucG9pbnQueX19KX19fWZvcihsZXQgbj0wO248KHQ/ZS5sZW5ndGg6ZS5sZW5ndGgtMSk7bisrKXtsZXQgdD1bZVtuXSxlWyhuKzEpJWUubGVuZ3RoXV07aS5wdXNoKHt0eXBlOiJhZGRFZGdlIixkYXRhOntmcm9tOnt4OnRbMF1bMF0seTp0WzBdWzFdfSx0bzp7eDp0WzFdWzBdLHk6dFsxXVsxXX19fSl9dGhpcy5leGVjdXRlQWRkT3BlcmF0aW9ucyhpKX1zcGxpdEZhY2VCeVBvbHlMaW5lKGUsdCxpPSExLG49ITEscz0hMSl7Y29uc3Qgcj0oZSx0LGksbik9Pntjb25zdCBzPVsuNSwuMjUsLjc1XTtmb3IobGV0IHIgb2Ygcyl7bGV0IHM9ZS5sZXJwKHQscik7aWYoaS5jb250YWluc1BvaW50KHMpJiYhaS5pc1BvaW50T25Cb3VuZGFyeShzLG4pKXJldHVybiEwfXJldHVybiExfSxvPShlLHQsaSxuKT0+e2xldCBzPVsuMjUsLjUsLjc1XSxyPTA7Zm9yKGxldCBvIG9mIHMpe2xldCBzPWUubGVycCh0LG8pO2lmKGkuaXNQb2ludE9uQm91bmRhcnkocyxuKSYmKHIrKyxyPj0yKSlyZXR1cm4hMH1yZXR1cm4gcj49Mn07bGV0IGw9W10saD1bXSxhPSExLGM9MDtpZihpKXtsZXQgaT10LmZpbmRJbmRleCgodD0+IWUuY29udGFpbnNQb2ludChuZXcgRCguLi50KSl8fGUuaXNQb2ludE9uQm91bmRhcnkobmV3IEQoLi4udCksdGhpcy50b2xlcmFuY2UpKSk7aWYoIShpPj0wKSlyZXR1cm4hMTt0PXQuc2xpY2UoaSkuY29uY2F0KHQuc2xpY2UoMCxpKSl9Y29uc3QgZD1pP3QubGVuZ3RoOnQubGVuZ3RoLTE7Zm9yKGxldCBpPTA7aTxkO2krKyl7bGV0IG49bmV3IEQoLi4udFtpXSkscz1uZXcgRCguLi50WyhpKzEpJXQubGVuZ3RoXSksZD1bbixzXSxnPWUuaW50ZXJzZWN0V2l0aExpbmVTZWcoZCk7Yys9Zy5sZW5ndGg7bGV0IGY9W24sLi4uZy5tYXAoKGU9PmUucG9pbnQpKSxzXTtmPUsobixzLGYsITAsdGhpcy50b2xlcmFuY2UpO2ZvcihsZXQgdD0wO3Q8Zi5sZW5ndGgtMTt0Kyspe2xldCBpPWZbdF0sbj1mW3QrMV07cihpLG4sZSx0aGlzLnRvbGVyYW5jZSkmJiFvKGksbixlLHRoaXMudG9sZXJhbmNlKT8oYXx8KGg9W2ldLGE9ITApLGgucHVzaChuKSk6YSYmKGwucHVzaChoKSxoPVtdLGE9ITEpfX1pZighaSYmYSYmaC5sZW5ndGg+MSYmbC5wdXNoKGgpLG58fChsPWwuZmlsdGVyKCh0PT57bGV0IGk9dFtNYXRoLmZsb29yKHQubGVuZ3RoLzIpXS5sZXJwKHRbTWF0aC5jZWlsKHQubGVuZ3RoLzIpXSwuNSk7cmV0dXJuIGUuY29udGFpbnNQb2ludChpKX0pKSksbC5sZW5ndGg+MSYmcyl7bGV0IGU9bnVsbDtmb3IobGV0IHQgb2YgbCl7bGV0IG49MDtmb3IobGV0IGU9MDtlPChpP3QubGVuZ3RoOnQubGVuZ3RoLTEpO2UrKyluKz10W2VdLmRpc3RhbmNlVG8odFsoZSsxKSV0Lmxlbmd0aF0pOyghZXx8bj5lLmxlbmd0aCkmJihlPXtsZW5ndGg6bixsaW5lOnR9KX1pZighZSlyZXR1cm4hMTtsPVtlLmxpbmVdfWlmKDA9PT1sLmxlbmd0aClyZXR1cm4hMTtpZihuKXJldHVybntsaW5lczpsLGludGVyc2VjdGlvbkNvdW50OmN9O2xldCBnPVtdO2ZvcihsZXQgZSBvZiBsKWZvcihsZXQgdCBvZiBlKWcucHVzaCh7dHlwZToiYWRkVmVydGV4IixkYXRhOnt4OnQueCx5OnQueX19KTtmb3IobGV0IGUgb2YgbClmb3IobGV0IHQ9MDt0PGUubGVuZ3RoLTE7dCsrKWcucHVzaCh7dHlwZToiYWRkRWRnZSIsZGF0YTp7ZnJvbTp7eDplW3RdLngseTplW3RdLnl9LHRvOnt4OmVbdCsxXS54LHk6ZVt0KzFdLnl9fX0pO3JldHVybiB0aGlzLmV4ZWN1dGVBZGRPcGVyYXRpb25zKGcpLCEwfWV4ZWN1dGVBZGRPcGVyYXRpb25zKGUpe2NvbnN0IHQ9ZS5maWx0ZXIoKGU9PiJhZGRWZXJ0ZXgiPT09ZS50eXBlKSksaT1lLmZpbHRlcigoZT0+ImFkZEVkZ2UiPT09ZS50eXBlKSk7bGV0IG49W107Zm9yKGNvbnN0IGUgb2YgaSl7bGV0IHQ9bmV3IE4saT1uZXcgRChlLmRhdGEuZnJvbS54LGUuZGF0YS5mcm9tLnkpLHM9bmV3IEQoZS5kYXRhLnRvLngsZS5kYXRhLnRvLnkpO3QuZXhwYW5kcyhbaSxzXSksdC5leHBhbmRCeVZhbHVlKHRoaXMudG9sZXJhbmNlKTtsZXQgcj1uZXcgU2V0O2ZvcihsZXQgZSBvZiB0aGlzLmhlZGdlcyl7bGV0IG49ZS5nZXRBQUJCKCk7aWYobi5leHBhbmRCeVZhbHVlKHRoaXMudG9sZXJhbmNlKSxuLmludGVyc2VjdHModCkpe2xldCB0PWUuaW50ZXJzZWN0V2l0aExpbmVTZWdtZW50KFtpLHNdKTt0LnR5cGU9PUYuaW50ZXJzZWN0aW5nJiYoci5hZGQodC5wb2ludCksdGhpcy5maW5kVmVydGV4KHQucG9pbnQueCx0LnBvaW50LnkpfHx0aGlzLnNwbGl0RWRnZShlLm9yaWdpbi54LGUub3JpZ2luLnksZS50d2luLm9yaWdpbi54LGUudHdpbi5vcmlnaW4ueSx0LnBvaW50LngsdC5wb2ludC55KSl9fWlmKHIuc2l6ZT4xKXtsZXQgZT1LKGkscyxbaSwuLi5yLHNdLCEwLHRoaXMudG9sZXJhbmNlKTtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoLTE7dCsrKW4ucHVzaCh7dHlwZToiYWRkRWRnZSIsZGF0YTp7ZnJvbTp7eDplW3RdLngseTplW3RdLnl9LHRvOnt4OmVbdCsxXS54LHk6ZVt0KzFdLnl9fX0pfWVsc2Ugbi5wdXNoKGUpfWZvcihjb25zdCBlIG9mIHQpe2xldHt4OnQseTppfT1lLmRhdGE7aWYoIXRoaXMuZmluZFZlcnRleCh0LGkpKXtsZXQgZT0hMTtmb3IobGV0IG4gb2YgdGhpcy5oZWRnZXMpe2xldCBzPW4uZ2V0QUFCQigpO3MuZXhwYW5kQnlWYWx1ZSh0aGlzLnRvbGVyYW5jZSkscy5jb250YWluc1BvaW50KG5ldyBEKHQsaSkpJiYhdGhpcy5maW5kVmVydGV4KHQsaSkmJiQoW3QsaV0sW24ub3JpZ2luLnRvQXJyYXkoKSxuLnR3aW4ub3JpZ2luLnRvQXJyYXkoKV0pJiYoZT0hMSE9PXRoaXMuc3BsaXRFZGdlKG4ub3JpZ2luLngsbi5vcmlnaW4ueSxuLnR3aW4ub3JpZ2luLngsbi50d2luLm9yaWdpbi55LHQsaSkpfSFlJiZ0aGlzLmFkZFZlcnRleCh0LGkpfX1mb3IoY29uc3QgZSBvZiBuLmZpbHRlcigoZT0+ImFkZEVkZ2UiPT09ZS50eXBlKSkpe2xldHtmcm9tOnQsdG86aX09ZS5kYXRhLG49dGhpcy5maW5kVmVydGV4KHQueCx0LnkpLHM9dGhpcy5maW5kVmVydGV4KGkueCxpLnkpO2lmKG4mJnMpe2xldCBlPW5ldyBTZXQ7ZS5hZGQobik7bGV0IHQ9bmV3IE47dC5leHBhbmRzKFtuLHNdKSx0LmV4cGFuZEJ5VmFsdWUodGhpcy50b2xlcmFuY2UpO2ZvcihsZXQgaSBvZiB0aGlzLnZlcnRpY2VzSW5CQih0KSkkKGkudG9BcnJheSgpLFtuLnRvQXJyYXkoKSxzLnRvQXJyYXkoKV0pJiZlLmFkZChpKTtlLmFkZChzKTtsZXQgaT1LKG4scyxBcnJheS5mcm9tKGUpLCEwKTtmb3IobGV0IGU9MDtlPGkubGVuZ3RoLTE7ZSsrKXRoaXMuZmluZEhlZGdlKGlbZV0ueCxpW2VdLnksaVtlKzFdLngsaVtlKzFdLnkpfHx0aGlzLmFkZEVkZ2UoaVtlXS54LGlbZV0ueSxpW2UrMV0ueCxpW2UrMV0ueSl9fX1jbGVhbnVwRGVnZW5lcmF0ZUhvbGVzKCl7bGV0IGU9bmV3IFNldDt0aGlzLmZhY2VzLmZvckVhY2goKHQ9Pntmb3IobGV0IGkgb2YgdGhpcy5mYWNlcyl0IT1pJiZ0LmFhYmIuY29udGFpbnNCQihpLmFhYmIpJiZ0LnZlcnRleGxpc3QuZXZlcnkoKGU9PmkuY29udGFpbnNQb2ludChlKSkpJiZpLmhlZGdlcy5mb3JFYWNoKCh0PT57dC5mYWNlPT1pJiZlLmFkZCh0KX0pKX0pKSx0aGlzLmZhY2VzLmZpbHRlcigoZT0+ZS5hcmVhPjApKS5mb3JFYWNoKCh0PT57dC5ob2xlcy5mb3JFYWNoKChpPT57aS5oZWRnZXMuZm9yRWFjaCgoaT0+e2kuZmFjZT09dCYmZS5hZGQoaSl9KSl9KSl9KSk7Zm9yKGNvbnN0IHQgb2YgZSl0Lm9yaWdpbiYmdC50d2luLm9yaWdpbiYmdGhpcy5yZW1vdmVFZGdlKHQub3JpZ2luLngsdC5vcmlnaW4ueSx0LnR3aW4ub3JpZ2luLngsdC50d2luLm9yaWdpbi55KX1jbGVhbnVwVHJhaWxpbmdFZGdlcygpe3RoaXMuaGVkZ2VzLmZvckVhY2goKGU9PntlLmZhY2U9PWUudHdpbi5mYWNlJiZ0aGlzLnJlbW92ZUVkZ2UoZS5vcmlnaW4ueCxlLm9yaWdpbi55LGUudHdpbi5vcmlnaW4ueCxlLnR3aW4ub3JpZ2luLnkpfSkpfX1mdW5jdGlvbiBIKGUsdCxpPXApe2xldFtuLHNdPWUsW28sbF09dDtjb25zdCBoPXNbMF0tblswXSxhPXNbMV0tblsxXSxkPWxbMF0tb1swXSxnPWxbMV0tb1sxXTtpZihyKGgqZy1hKmQpPmkpcmV0dXJuITE7Y29uc3QgZj1yKGgqKG5bMV0tb1sxXSktKG5bMF0tb1swXSkqYSksdT1jKGgqaCthKmEpO3JldHVybiEodTxpKSYmZi91PGl9ZnVuY3Rpb24gSyhlLHQsaSxuPSExLHM9cCl7Y29uc3Qgcj10LngtZS54LG89dC55LWUueTtsZXQgbD1yKnIrbypvO2lmKGw8cylyZXR1cm4gaTtjb25zdCBoPTEvbCxhPWkubWFwKCh0PT57Y29uc3QgaT0oKHQueC1lLngpKnIrKHQueS1lLnkpKm8pKmg7cmV0dXJue3BvaW50OnQsdDpNYXRoLm1heCgwLE1hdGgubWluKDEsaSkpfX0pKTthLnNvcnQoKCh0LGkpPT57Y29uc3Qgbj10LnQtaS50O3JldHVybiBNYXRoLmFicyhuKT5zP246KHQucG9pbnQueC1lLngpKioyKyh0LnBvaW50LnktZS55KSoqMi0oKGkucG9pbnQueC1lLngpKioyKyhpLnBvaW50LnktZS55KSoqMil9KSk7bGV0IGM9YS5tYXAoKGU9PmUucG9pbnQpKTtyZXR1cm4gbiYmKGM9ZnVuY3Rpb24oZSx0KXtjb25zdCBpPVtdLG49bmV3IE1hcDtmb3IoY29uc3QgcyBvZiBlKXtjb25zdCBlPWAke01hdGgucm91bmQocy54L3QpfSwke01hdGgucm91bmQocy55L3QpfWA7bi5oYXMoZSl8fChuLnNldChlLCEwKSxpLnB1c2gocykpfXJldHVybiBpfShjLHMpKSxjfWZ1bmN0aW9uIFUoZSx0LGk9cCl7Zm9yKGxldCBuPTA7bjx0Lmxlbmd0aDtuKyspe2NvbnN0IHM9dFtuXSxyPXRbKG4rMSkldC5sZW5ndGhdLGg9byhzWzBdLHJbMF0pLWksYT1sKHNbMF0sclswXSkraSxjPW8oc1sxXSxyWzFdKSstaSxkPWwoc1sxXSxyWzFdKStpO2lmKGVbMF0+PWgmJmVbMF08PWEmJmVbMV0+PWMmJmVbMV08PWQmJmooZSxzLHIpPD1pKmkpcmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gJChlLHQsaT1wKXtjb25zdFtuLHNdPXQscj0oZVsxXS1uWzFdKSooc1swXS1uWzBdKS0oZVswXS1uWzBdKSooc1sxXS1uWzFdKTtpZihNYXRoLmFicyhyKT5pKXJldHVybiExO2NvbnN0IG89KGVbMF0tblswXSkqKHNbMF0tblswXSkrKGVbMV0tblsxXSkqKHNbMV0tblsxXSk7cmV0dXJuIShvPC1pfHxvLSgoc1swXS1uWzBdKSooc1swXS1uWzBdKSsoc1sxXS1uWzFdKSooc1sxXS1uWzFdKSk+aSl9ZnVuY3Rpb24gaihlLHQsaSl7Y29uc3Qgbj1pWzBdLXRbMF0scz1pWzFdLXRbMV0scj1uKm4rcypzO2lmKHI8MWUtMTQpe2NvbnN0IGk9ZVswXS10WzBdLG49ZVsxXS10WzFdO3JldHVybiBpKmkrbipufWxldCBvPSgoZVswXS10WzBdKSpuKyhlWzFdLXRbMV0pKnMpL3I7bz1NYXRoLm1heCgwLE1hdGgubWluKDEsbykpO2NvbnN0IGw9dFswXStvKm4saD10WzFdK28qcyxhPWVbMF0tbCxjPWVbMV0taDtyZXR1cm4gYSphK2MqY31sZXQgUT0wO2NsYXNzIEp7X2RjZWw7aWQ9USsrO2NoYW5nZUluZGV4PTA7d2VkZ2U9bnVsbDtfYXJlYT0wO19hcmVhRGlydHk9ITA7X3ZlcnRleGxpc3Q9W107X3ZlcnRleGxpc3REaXJ0eT0hMDtfY2VudGVyRGlydHk9ITA7X2hlZGdlcz1bXTtfaGVkZ2VzRGlydHk9ITA7X2NlbnRlcj1udWxsO19oYXNJbnNlcnRlZEludG9QUT0hMTtfaG9sZXM9W107X2hvbGVzRGlydHk9ITA7X2FhYmI9bnVsbDtfYWFiYkRpcnR5PSEwO2NvbnN0cnVjdG9yKGUpe3RoaXMuX2RjZWw9ZX1nZXQgYXJlYSgpe3JldHVybiB0aGlzLl9hcmVhRGlydHkmJih0aGlzLl9hcmVhPWZ1bmN0aW9uKGUpe2lmKGUubGVuZ3RoPDMpcmV0dXJuIDA7bGV0IHQ9MDtmb3IobGV0IGk9MDtpPGUubGVuZ3RoO2krKyl7Y29uc3Qgbj0oaSsxKSVlLmxlbmd0aDt0Kz1lW2ldLngqZVtuXS55LWVbaV0ueSplW25dLnh9cmV0dXJuLjUqdH0odGhpcy52ZXJ0ZXhsaXN0KSx0aGlzLl9hcmVhRGlydHk9ITEpLHRoaXMuX2FyZWF9Z2V0IGFyZWFFeGNlcHRIb2xlcygpe2NvbnN0IGU9dGhpcy5ob2xlcztsZXQgdD10aGlzLmFyZWE7Zm9yKGxldCBpPTAsbj1lLmxlbmd0aDtpPG47aSsrKXQrPWVbaV0uYXJlYTtyZXR1cm4gdH1nZXQgaW50ZXJuYWwoKXtyZXR1cm4gdGhpcy5hcmVhPkd9Z2V0IGV4dGVybmFsKCl7cmV0dXJuIHRoaXMuYXJlYTw9R31nZXQgaGVkZ2VzKCl7aWYodGhpcy5faGVkZ2VzRGlydHkpe2NvbnN0IGU9W107bGV0IHQ9dGhpcy53ZWRnZSxpPTA7Y29uc3Qgbj0xZTY7Zm9yKGUucHVzaCh0KTt0Lm5leHRoZWRnZSE9PXRoaXMud2VkZ2UmJmk8bjspdD10Lm5leHRoZWRnZSxlLnB1c2godCksaSsrO2lmKGk+PW4pdGhyb3cgRXJyb3IoIkZhY2UgdmVydGV4IGxpc3QgaXMgdG9vIGxvbmciKTt0aGlzLl9oZWRnZXM9ZSx0aGlzLl9oZWRnZXNEaXJ0eT0hMX1yZXR1cm4gdGhpcy5faGVkZ2VzfWdldCBjZW50ZXIoKXtpZih0aGlzLl9jZW50ZXJEaXJ0eSl7Y29uc3QgZT10aGlzLnZlcnRleGxpc3Q7bGV0IHQ9MCxpPTAsbj0wO2ZvcihsZXQgcz0wO3M8ZS5sZW5ndGg7cysrKXtjb25zdCByPWVbc10ueCxvPWVbc10ueSxsPWVbKHMrMSklZS5sZW5ndGhdLngsaD1lWyhzKzEpJWUubGVuZ3RoXS55LGE9cipoLW8qbDt0Kz1hLGkrPShyK2wpKmEsbis9KG8raCkqYX10Kj0uNSxpLz02KnQsbi89Nip0LHRoaXMuX2NlbnRlcj1uZXcgRChpLG4pLHRoaXMuX2NlbnRlckRpcnR5PSExfXJldHVybiB0aGlzLl9jZW50ZXJ9Z2V0IHZlcnRleGxpc3QoKXtyZXR1cm4gdGhpcy5fdmVydGV4bGlzdERpcnR5JiZ0aGlzLmNsZWFuVmVydGV4TGlzdCgpLHRoaXMuX3ZlcnRleGxpc3R9Y2xlYW5WZXJ0ZXhMaXN0KCl7aWYoIXRoaXMuX3ZlcnRleGxpc3REaXJ0eSlyZXR1cm47bGV0IGU9dGhpcy53ZWRnZTtjb25zdCB0PXRoaXMuX3ZlcnRleGxpc3Q7dC5sZW5ndGg9MDtsZXQgaT0wO2NvbnN0IG49MWU2O2Zvcih0LnB1c2goZS5vcmlnaW4pO2UubmV4dGhlZGdlIT09dGhpcy53ZWRnZSYmaTxuOyllPWUubmV4dGhlZGdlLHQucHVzaChlLm9yaWdpbiksaSsrO2lmKGk+PW4pdGhyb3cgRXJyb3IoIkZhY2UgdmVydGV4IGxpc3QgaXMgdG9vIGxvbmciKTt0aGlzLl92ZXJ0ZXhsaXN0RGlydHk9ITF9Z2V0IGhvbGVzKCl7aWYodGhpcy5faG9sZXNEaXJ0eSYmKHRoaXMuX2hvbGVzRGlydHk9ITEsdGhpcy5faG9sZXMubGVuZ3RoPTAsdGhpcy5pbnRlcm5hbCkpe2NvbnN0IGU9dGhpcy5fZGNlbC5mYWNlcztmb3IobGV0IHQ9MCxpPWUubGVuZ3RoO3Q8aTt0KyspdGhpcy5fdHJ5QWRkSG9sZShlW3RdKX1yZXR1cm4gdGhpcy5faG9sZXN9Z2V0IGFhYmIoKXtyZXR1cm4gdGhpcy5fYWFiYnx8KHRoaXMuX2FhYmI9bmV3IE4pLHRoaXMuX2FhYmJEaXJ0eSYmKHRoaXMuX2FhYmIucmVzZXQoKSx0aGlzLl9hYWJiLmV4cGFuZHModGhpcy52ZXJ0ZXhsaXN0KSx0aGlzLl9hYWJiRGlydHk9ITEpLHRoaXMuX2FhYmJ9ZXF1YWxzKGUpe2NvbnN0IHQ9dGhpcy52ZXJ0ZXhsaXN0LGk9ZS52ZXJ0ZXhsaXN0O2lmKHQubGVuZ3RoIT09aS5sZW5ndGgpcmV0dXJuITE7Y29uc3Qgbj10Lmxlbmd0aDtmb3IobGV0IGU9MDtlPG47ZSsrKWZvcihsZXQgcz0wO3M8biYmdFtzXT09PWlbKGUrcyklbl07cysrKWlmKHM9PT1uLTEpcmV0dXJuITA7cmV0dXJuITF9ZmluZE5lYXJlc3RFZGdlKGUpe3JldHVybiBmdW5jdGlvbihlLHQpe2NvbnN0IGk9aWUoZSk7bGV0IG49W2VbMF0sZVsxXV0scz0xZTEwLHI9LTEvMCxvPW51bGw7Zm9yKGxldCBsPTA7bDxlLmxlbmd0aDtsKyspe2NvbnN0IGg9W2VbbF0sZVsobCsxKSVlLmxlbmd0aF1dLHtkaXN0YW5jZTphLHByb2plY3Rpb246Y309bmUodCxoWzBdLGhbMV0pLGQ9e3g6aFsxXS54LWhbMF0ueCx5OmhbMV0ueS1oWzBdLnl9O2xldCBnPXt4Oi1kLnkseTpkLnh9LGY9e3g6KGhbMF0ueCtoWzFdLngpLzItaS54LHk6KGhbMF0ueStoWzFdLnkpLzItaS55fTtnLngqZi54K2cueSpmLnk8MCYmKGc9e3g6ZC55LHk6LWQueH0pO2NvbnN0IHU9e3g6dC54LShoWzBdLngraFsxXS54KS8yLHk6dC55LShoWzBdLnkraFsxXS55KS8yfSxwPWcueCp1LngrZy55KnUueTsoYTxzfHxhPT09cyYmcD5yKSYmcD4wJiYocz1hLG49aCxyPXAsbz1jKX1yZXR1cm57ZWRnZTpuLGRpc3RhbmNlOnMsZWRnZVBvaW50Om99fSh0aGlzLnZlcnRleGxpc3QsZSl9Y29udGFpbnNQb2ludChlKXtyZXR1cm4hKCF0aGlzLmFhYmIuY29udGFpbnNQb2ludChlKXx8IWVlKHRoaXMudmVydGV4bGlzdCxlKSl9aXNQb2ludE9uQm91bmRhcnkoZSx0PUcpe2xldCBpPXRoaXMudmVydGV4bGlzdC5tYXAoKGU9PmUudG9BcnJheSgpKSk7cmV0dXJuISFVKGUudG9BcnJheSgpLGksdCl9aW50ZXJzZWN0V2l0aFBvbHlMaW5lKGUsdD0hMSl7bGV0IGk9W107Y29uc3Qgbj10P2UubGVuZ3RoOmUubGVuZ3RoLTE7Zm9yKGxldCBzPTA7czxuO3MrKyl7Y29uc3Qgbj10PyhzKzEpJWUubGVuZ3RoOnMrMSxyPVtlW3NdLGVbbl1dO2kucHVzaCguLi50aGlzLmludGVyc2VjdFdpdGhMaW5lU2VnKHIpKX1yZXR1cm4gaX1pbnRlcnNlY3RXaXRoTGluZVNlZyhlKXtjb25zdCB0PVtdLGk9dGhpcy5oZWRnZXMuZmlsdGVyKChlPT5lLmZhY2U9PXRoaXMpKSxuPShuZXcgTikuZXhwYW5kcyhlKTtmb3IobGV0IHMgb2YgaSl7aWYoIXMuZ2V0QUFCQigpLmludGVyc2VjdHMobikpY29udGludWU7Y29uc3QgaT1zLmludGVyc2VjdFdpdGhMaW5lU2VnbWVudChlKTtpLnR5cGU9PT1GLmludGVyc2VjdGluZyYmdC5wdXNoKHtwb2ludDppLnBvaW50LGVkZ2U6W3Mub3JpZ2luLHMudHdpbi5vcmlnaW5dfSl9cmV0dXJuIHR9ZGlydHkoKXt0aGlzLl9hcmVhRGlydHk9ITAsdGhpcy5faGVkZ2VzRGlydHk9ITAsdGhpcy5fY2VudGVyRGlydHk9ITAsdGhpcy5fdmVydGV4bGlzdERpcnR5PSEwLHRoaXMuX2hvbGVzRGlydHk9ITAsdGhpcy5fYWFiYkRpcnR5PSEwLHRoaXMuY2hhbmdlSW5kZXgrK31kaXNwb3NlKCl7dGhpcy53ZWRnZT1udWxsLHRoaXMuX3ZlcnRleGxpc3QubGVuZ3RoPTAsdGhpcy5faG9sZXMubGVuZ3RoPTAsdGhpcy5fYWFiYj1udWxsLHRoaXMuX2RjZWw9bnVsbH1fdHJ5QWRkSG9sZShlKXt0aGlzLl9ob2xlc0RpcnR5fHxlLmV4dGVybmFsJiZ0aGlzLmFyZWEtTWF0aC5hYnMoZS5hcmVhKT5HJiZ0aGlzLmFhYmIuY29udGFpbnNQb2ludHMoZS52ZXJ0ZXhsaXN0KSYmdGUodGhpcy52ZXJ0ZXhsaXN0LGUudmVydGV4bGlzdCxHKSYmdGhpcy5faG9sZXMucHVzaChlKX19ZnVuY3Rpb24gWihlLHQsaSl7cmV0dXJuKHQueC1lLngpKihpLnktZS55KS0odC55LWUueSkqKGkueC1lLngpfWZ1bmN0aW9uIGVlKGUsdCxpPUcpe2lmKFUoW3QueCx0LnldLGUubWFwKChlPT5lLnRvQXJyYXkoKSkpLGkpKXJldHVybiEwO2xldCBuPTA7Zm9yKGxldCBpPTA7aTxlLmxlbmd0aDtpKyspe2NvbnN0IHM9ZVtpXSxyPWVbKGkrMSklZS5sZW5ndGhdO3MueTw9dC55P3IueT50LnkmJloocyxyLHQpPjAmJm4rKzpyLnk8PXQueSYmWihzLHIsdCk8MCYmbi0tfXJldHVybiAwIT09bn1mdW5jdGlvbiB0ZShlLHQsaT1HKXtmb3IobGV0IG49MCxzPXQubGVuZ3RoO248cztuKyspaWYoIWVlKGUsdFtuXSxpKSlyZXR1cm4hMTtyZXR1cm4hMH1mdW5jdGlvbiBpZShlKXtsZXQgdD0wLGk9MDtmb3IobGV0IG49MDtuPGUubGVuZ3RoO24rKyl0Kz1lW25dLngsaSs9ZVtuXS55O3JldHVybiBuZXcgRCh0L2UubGVuZ3RoLGkvZS5sZW5ndGgpfWZ1bmN0aW9uIG5lKGUsdCxpLG49Ryl7Y29uc3Qgcz0oaS54LXQueCkqKGkueC10LngpKyhpLnktdC55KSooaS55LXQueSk7aWYoczxuKXJldHVybntkaXN0YW5jZTplLmRpc3RhbmNlVG8odCkscHJvamVjdGlvbjp0fTtsZXQgcj0oKGUueC10LngpKihpLngtdC54KSsoZS55LXQueSkqKGkueS10LnkpKS9zO3I8LW4/cj0wOnI+MStuJiYocj0xKTtjb25zdCBvPW5ldyBEKHQueCtyKihpLngtdC54KSx0LnkrciooaS55LXQueSkpO3JldHVybntkaXN0YW5jZTplLmRpc3RhbmNlVG8obykscHJvamVjdGlvbjpvfX1jbGFzcyBzZXt3aWR0aDtoZWlnaHQ7Y2VsbFN0cmlkZTtjZWxscztzZWdtZW50cz1bXTt2YWxpZE1hc2s7Y2VsbFNpemU7b2Zmc2V0WDtvZmZzZXRZO2NlbGxzV2lkdGg7Y2VsbHNIZWlnaHQ7Y29uc3RydWN0b3IoZSx0LGksbj1bMCwwXSxzPVtdKXt0aGlzLndpZHRoPWUsdGhpcy5oZWlnaHQ9dCx0aGlzLmNlbGxTaXplPWksdGhpcy5vZmZzZXRYPW5bMF0sdGhpcy5vZmZzZXRZPW5bMV0sdGhpcy5jZWxsc1dpZHRoPXkoZS9pLHApLHRoaXMuY2VsbHNIZWlnaHQ9eSh0L2kscCksdGhpcy5jZWxsU3RyaWRlPXRoaXMuY2VsbHNXaWR0aCx0aGlzLmNlbGxzPW5ldyBNYXAsdGhpcy52YWxpZE1hc2s9bmV3IFVpbnQ4QXJyYXkodGhpcy5jZWxsc1dpZHRoKnRoaXMuY2VsbHNIZWlnaHQpO2ZvcihsZXQgZT0wO2U8dGhpcy5jZWxsc0hlaWdodDtlKyspZm9yKGxldCB0PTA7dDx0aGlzLmNlbGxzV2lkdGg7dCsrKXtsZXQgaTtpZihzLmxlbmd0aCl7Y29uc3Qgbj1uZXcgTixyPW5ldyBEKHRoaXMub2Zmc2V0WCt0KnRoaXMuY2VsbFNpemUsdGhpcy5vZmZzZXRZK2UqdGhpcy5jZWxsU2l6ZSksbz1uZXcgRCh0aGlzLm9mZnNldFgrKHQrMSkqdGhpcy5jZWxsU2l6ZSx0aGlzLm9mZnNldFkrKGUrMSkqdGhpcy5jZWxsU2l6ZSk7bi5leHBhbmRzKFtyLG9dKSxuLmV4cGFuZEJ5VmFsdWUoMS43NSp0aGlzLmNlbGxTaXplKSxpPVsuLi5uLnZlcnRleExpc3Qsbi5jZW50ZXJdLnNvbWUoKGU9PmVlKHMubWFwKChlPT5uZXcgRCguLi5lKSkpLGUpKSl9ZWxzZSBpPSEwO3RoaXMudmFsaWRNYXNrW3RoaXMuY2VsbEluZGV4KHQsZSldPStpfX1jZWxsSW5kZXgoZSx0KXtyZXR1cm4gdCp0aGlzLmNlbGxTdHJpZGUrZX1nZXRDZWxsKGUsdD0hMSl7bGV0IGk9dGhpcy5jZWxscy5nZXQoZSk7cmV0dXJuIWkmJnQmJihpPVtdLHRoaXMuY2VsbHMuc2V0KGUsaSkpLGl9Z2V0Q2VsbENvb3JkcyhlKXtyZXR1cm5beCgoZVswXS10aGlzLm9mZnNldFgpL3RoaXMuY2VsbFNpemUscCkseCgoZVsxXS10aGlzLm9mZnNldFkpL3RoaXMuY2VsbFNpemUscCldfWlzVmFsaWRDZWxsKGUsdCl7cmV0dXJuIGU+PTAmJmU8dGhpcy5jZWxsc1dpZHRoJiZ0Pj0wJiZ0PHRoaXMuY2VsbHNIZWlnaHQmJjE9PT10aGlzLnZhbGlkTWFza1t0aGlzLmNlbGxJbmRleChlLHQpXX1pc1ZhbGlkSW5zZXJ0aW9uUG9pbnQoZSl7Y29uc3RbdCxpXT10aGlzLmdldENlbGxDb29yZHMoZSk7cmV0dXJuIHRoaXMuaXNWYWxpZENlbGwodCxpKX1hZGRPclJlbW92ZVNlZ21lbnQoZSx0KXtpZih2b2lkIDA9PT10LmlkKXJldHVybjtjb25zdCBpPXQuaWQ7Zm9yKGNvbnN0W24sc11vZiB0aGlzLmdldENlbGxzRm9yU2VnbWVudCh0KSl7Y29uc3QgdD10aGlzLmNlbGxJbmRleChuLHMpLHI9dGhpcy5nZXRDZWxsKHQsZSk7aWYocilpZihlKXIucHVzaChpKTtlbHNle2NvbnN0IGU9ci5pbmRleE9mKGkpOy0xIT09ZSYmci5zcGxpY2UoZSwxKSwwPT09ci5sZW5ndGgmJnRoaXMuY2VsbHMuZGVsZXRlKHQpfX19Z2V0Q2VsbHNGb3JTZWdtZW50KGUpe2NvbnN0IHQ9byhlLnN0YXJ0WzBdLGUuZW5kWzBdKSxpPWwoZS5zdGFydFswXSxlLmVuZFswXSksbj1vKGUuc3RhcnRbMV0sZS5lbmRbMV0pLHM9bChlLnN0YXJ0WzFdLGUuZW5kWzFdKSxyPXgoKHQtdGhpcy5vZmZzZXRYKS90aGlzLmNlbGxTaXplLHApLGg9eCgoaS10aGlzLm9mZnNldFgpL3RoaXMuY2VsbFNpemUscCksYT14KChuLXRoaXMub2Zmc2V0WSkvdGhpcy5jZWxsU2l6ZSxwKSxjPXgoKHMtdGhpcy5vZmZzZXRZKS90aGlzLmNlbGxTaXplLHApLGQ9W107Zm9yKGxldCBlPWE7ZTw9YztlKyspZm9yKGxldCB0PXI7dDw9aDt0KyspdGhpcy5pc1ZhbGlkQ2VsbCh0LGUpJiZkLnB1c2goW3QsZV0pO3JldHVybiBkfWlzUG9pbnRUb29DbG9zZVRvU2VnbWVudChlLHQsaSl7bGV0e3N0YXJ0Om4sZW5kOnN9PXQ7Y29uc3Qgcj1vKG5bMF0sc1swXSktaSxoPWwoblswXSxzWzBdKStpLGE9byhuWzFdLHNbMV0pLWksYz1sKG5bMV0sc1sxXSkraTtyZXR1cm4hKGVbMF08cnx8ZVswXT5ofHxlWzFdPGF8fGVbMV0+YykmJkMoZSx0LnN0YXJ0LHQuZW5kKStwPGl9Y2xlYW51cCgpe3RoaXMuY2VsbHMuY2xlYXIoKSx0aGlzLnNlZ21lbnRzLmxlbmd0aD0wfWFkZFNlZ21lbnQoZSl7dm9pZCAwPT09ZS5pZCYmKGUuaWQ9dGhpcy5zZWdtZW50cy5sZW5ndGgsdGhpcy5zZWdtZW50cy5wdXNoKGUpKSx0aGlzLmFkZE9yUmVtb3ZlU2VnbWVudCghMCxlKX1yZW1vdmVTZWdtZW50KGUpe3RoaXMuYWRkT3JSZW1vdmVTZWdtZW50KCExLGUpfWdldEVtcHR5Q2VsbHMoZSl7Y29uc3QgdD1bXTtmb3IobGV0IGk9MDtpPHRoaXMuY2VsbHNIZWlnaHQ7aSsrKWZvcihsZXQgbj0wO248dGhpcy5jZWxsc1dpZHRoO24rKylpZih0aGlzLmlzVmFsaWRDZWxsKG4saSkpe2NvbnN0IHM9dGhpcy5nZXRDZWxsQ2VudGVyKG4saSk7dGhpcy5pc05lYXJPdGhlclN0cmVhbWxpbmVzKHMsLTEsZSl8fHQucHVzaChzKX1yZXR1cm4gdH1nZXRDZWxsQ2VudGVyKGUsdCl7cmV0dXJuW3RoaXMub2Zmc2V0WCtlKnRoaXMuY2VsbFNpemUrdGhpcy5jZWxsU2l6ZS8yLHRoaXMub2Zmc2V0WSt0KnRoaXMuY2VsbFNpemUrdGhpcy5jZWxsU2l6ZS8yXX1pc05lYXJPdGhlclN0cmVhbWxpbmVzKGUsdCxpKXtjb25zdFtuLHNdPXRoaXMuZ2V0Q2VsbENvb3JkcyhlKSxyPXkoaS90aGlzLmNlbGxTaXplLHApLGg9bCgwLG4tciksYT1vKHRoaXMuY2VsbHNXaWR0aC0xLG4rciksYz1sKDAscy1yKSxkPW8odGhpcy5jZWxsc0hlaWdodC0xLHMrcik7Zm9yKGxldCBuPWM7bjw9ZDtuKyspZm9yKGxldCBzPWg7czw9YTtzKyspe2NvbnN0IHI9dGhpcy5nZXRDZWxsKHRoaXMuY2VsbEluZGV4KHMsbikpO2lmKHIpZm9yKGNvbnN0IG4gb2Ygcil7Y29uc3Qgcz10aGlzLnNlZ21lbnRzW25dO2lmKHMmJnMuc3RyZWFtbGluZUlkIT09dCYmdGhpcy5pc1BvaW50VG9vQ2xvc2VUb1NlZ21lbnQoZSxzLGkpKXJldHVybiEwfX1yZXR1cm4hMX19ZnVuY3Rpb24gcmUoZSx0KXtyZXR1cm4gZVswXT49dC50b3BMZWZ0WzBdLXAmJmVbMF08PXQuYm90dG9tUmlnaHRbMF0rcCYmZVsxXT49dC50b3BMZWZ0WzFdLXAmJmVbMV08PXQuYm90dG9tUmlnaHRbMV0rcH1mdW5jdGlvbipvZShlLHQsaSxuLHMscixvLGwsaCl7bGV0IGE9ZSxjPTAsZD0wO2Zvcig7YzxuOyl7Y29uc3QgZT10KGEpO2lmKGVbMF0qZVswXStlWzFdKmVbMV08cCpwKWJyZWFrO2NvbnN0IG49W2FbMF0raCppKmVbMF0sYVsxXStoKmkqZVsxXV07aWYoIXJlKG4sbCl8fCFzLmlzVmFsaWRJbnNlcnRpb25Qb2ludChuKXx8cy5pc05lYXJPdGhlclN0cmVhbWxpbmVzKG4scixvKSlicmVhaztjb25zdCBnPXtzdGFydDphLGVuZDpuLHN0cmVhbWxpbmVJZDpyLHNlZ21lbnRJbmRleDpkfTtzLmFkZFNlZ21lbnQoZyksYT1uLGMrPWksZCsrLHlpZWxke3BvaW50OmEsZGlyZWN0aW9uOmh9fX1mdW5jdGlvbipsZShlLHQsaSl7Y29uc3Qgbj1lW3RdLFtzLHJdPWZ1bmN0aW9uKGUsdCxpPXApe2lmKHQ+MCYmdDxlLmxlbmd0aC0xKXtjb25zdCBuPWVbdC0xXSxzPWVbdCsxXSxyPXNbMF0tblswXSxvPXNbMV0tblsxXSxsPU1hdGguaHlwb3QocixvKTtpZihsPGkpcmV0dXJuW1swLDBdLFswLDBdXTtjb25zdCBoPVstby9sLHIvbF0sYT1bby9sLC1yL2xdLGM9aFswXSpoWzBdK2hbMV0qaFsxXSxkPWFbMF0qYVswXSthWzFdKmFbMV07cmV0dXJuIGM8aSppJiYoaFswXT0wLGhbMV09MCksZDxpKmkmJihhWzBdPTAsYVsxXT0wKSxbaCxhXX1yZXR1cm5bWzAsMF0sWzAsMF1dfShlLHQscCk7aWYoMD09PXNbMF0mJjA9PT1zWzFdfHwwPT09clswXSYmMD09PXJbMV0pcmV0dXJuW107Zm9yKGNvbnN0IGUgb2ZbcyxyXSl7Y29uc3QgdD1bblswXStlWzBdKmksblsxXStlWzFdKmldO3lpZWxkIHR9fWZ1bmN0aW9uKmhlKGUpe2NvbnN0e3ZlY3RvckZpZWxkOnQsc3RlcFNpemU6aSxtYXhMZW5ndGg6bixtaW5MZW5ndGg6cyxiZWdpbkF0Q2VudGVyOnI9ITEsbWluRGlzdGFuY2U6byxtYXhTdHJlYW1saW5lczpoPTFlNixib3VuZHM6YSxib3VuZGluZ0dlb21ldHJ5OmM9W10sc2VlZFBvaW50czpkPVtdLHJhbmRvbTpnPXZ9PWUsZj1hLmJvdHRvbVJpZ2h0WzBdLWEudG9wTGVmdFswXSx1PWEuYm90dG9tUmlnaHRbMV0tYS50b3BMZWZ0WzFdLHg9bmV3IHNlKGYsdSxvLGEudG9wTGVmdCxjKSx5PVtdO2xldCBtPTAsdz1bXTtpZihkLmxlbmd0aCl3LnB1c2goLi4uZC5maWx0ZXIoKGU9PnguaXNWYWxpZEluc2VydGlvblBvaW50KGUpKSkpO2Vsc2V7bGV0IGU9ZnVuY3Rpb24qKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1uZXcgRCguLi5lW3RdKSxuPW5ldyBEKC4uLmVbKHQrMiklZS5sZW5ndGhdKSxzPWkubGVycChuLC41KTtlZShlLm1hcCgoZT0+bmV3IEQoLi4uZSkpKSxzLHApJiYoeWllbGQgcy50b0FycmF5KCkpfX0oYyksdD0hMTtmb3IobGV0IGkgb2YgZSlyZShpLGEpJiZ4LmlzVmFsaWRJbnNlcnRpb25Qb2ludChpKSYmKHcucHVzaChpKSx0PSEwKTtpZighdCl7bGV0IGU9eC5nZXRFbXB0eUNlbGxzKG8pO3cucHVzaCguLi5lKX19Zm9yKDt5Lmxlbmd0aDxoJiZ3Lmxlbmd0aD4wOyl7Y29uc3QgZT13LnBvcCgpO3guaXNOZWFyT3RoZXJTdHJlYW1saW5lcyhlLG0sbyl8fCh5aWVsZCpiKGUpKX1mdW5jdGlvbipiKGUpe2NvbnN0IHI9bChzLGZ1bmN0aW9uKGUsdCxpPXApe2NvbnN0IG49aSpNYXRoLnNpZ24oZSk7cmV0dXJuIE1hdGgucm91bmQoKGUrbikvdCkqdH0oZy5lYXNlZE51bShFLC42Km4sbiksLjAwMSkpLGg9W10sYz1bXTtsZXQgZD0wO2Zvcihjb25zdHtwb2ludDpuLGRpcmVjdGlvbjpzfW9mIGZ1bmN0aW9uKihlLHQsaSxuLHMscixvLGwpe3lpZWxkKm9lKGUsdCxpLG4scyxyLG8sbCwxKSx5aWVsZCpvZShlLHQsaSxuLHMscixvLGwsLTEpfShlLHQsaSxyLHgsbSxvLGEpKWlmKDE9PT1zP2gucHVzaChuKTpoLnVuc2hpZnQobiksaC5sZW5ndGg+MSl7Y29uc3QgZT17c3RhcnQ6aFtoLmxlbmd0aC0yXSxlbmQ6aFtoLmxlbmd0aC0xXSxzdHJlYW1saW5lSWQ6bSxzZWdtZW50SW5kZXg6ZH07Yy5wdXNoKGUpLGQrK31pZihoLmxlbmd0aD49cyl7eVttXT1oLHlpZWxkIGg7Y29uc3QgZT1bMSwxLjVdO2ZvcihsZXQgdD0wO3Q8aC5sZW5ndGg7dCsrKXtjb25zdCBpPWxlKGgsdCxvKmVbdCVlLmxlbmd0aF0pO2ZvcihsZXQgZSBvZiBpKXguaXNWYWxpZEluc2VydGlvblBvaW50KGUpJiYheC5pc05lYXJPdGhlclN0cmVhbWxpbmVzKGUsbSxvKSYmdy5wdXNoKGUpfW0rK31lbHNlIGZvcihjb25zdCBlIG9mIGMpeC5yZW1vdmVTZWdtZW50KGUpfXguY2xlYW51cCgpfWxldCBhZT0odCxpLG49MCxzPTUscj0wLG89MSk9PkwoZnVuY3Rpb24odCxpPTAsbj0wKXtZfHxBKCksdDwwJiYodD0tdCksaTwwJiYoaT0taSksbjwwJiYobj0tbik7bGV0IHMscixvLGwsaCxhPWUodCksYz1lKGkpLGQ9ZShuKSxnPXQtYSxmPWktYyx1PW4tZCxwPTAseD0uNTtmb3IobGV0IGU9MDtlPDM7ZSsrKXtsZXQgZT1hKyhjPDw0KSsoZDw8OCk7cz1QKGcpLHI9UChmKSxvPVlbZSZNXSxvKz1zKihZW2UrMSZNXS1vKSxsPVlbZSsxNiZNXSxsKz1zKihZW2UrMTYrMSZNXS1sKSxvKz1yKihsLW8pLGUrPTI1NixsPVlbZSZNXSxsKz1zKihZW2UrMSZNXS1sKSxoPVlbZSsxNiZNXSxoKz1zKihZW2UrMTYrMSZNXS1oKSxsKz1yKihoLWwpLG8rPVAodSkqKGwtbykscCs9byp4LHgqPS44LGE8PD0xLGcqPTIsYzw8PTEsZio9MixkPDw9MSx1Kj0yLGc+PTEmJihhKyssZy0tKSxmPj0xJiYoYysrLGYtLSksdT49MSYmKGQrKyx1LS0pfXJldHVybiBwfSgodCsxMDApL3MsKGkrMTAwKS9zLChuKzEwMCkvcyksMCwxLHIsbyk7Y2xhc3MgY2V7aGVhcDttYXhTaXplO3ZhbHVlRnVuY3Rpb247ZXBzaWxvbj1wO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52YWx1ZUZ1bmN0aW9uPXQsdGhpcy5oZWFwPVtdLHRoaXMubWF4U2l6ZT1lfXNpemUoKXtyZXR1cm4gdGhpcy5oZWFwLmxlbmd0aH1wdXNoKGUpe3RoaXMuaGVhcC5wdXNoKGUpLHRoaXMuc2lmdFVwKHRoaXMuaGVhcC5sZW5ndGgtMSksdGhpcy5oZWFwLmxlbmd0aD50aGlzLm1heFNpemUmJnRoaXMuaGVhcC5wb3AoKX1jbGVhcigpe3RoaXMuaGVhcD1bXX1wZWVrKCl7cmV0dXJuIHRoaXMuaGVhcFswXX1yZW1vdmUoZSl7Y29uc3QgdD10aGlzLmhlYXAuZmluZEluZGV4KCh0PT50PT09ZSkpOy0xIT09dCYmKHRoaXMuaGVhcFt0XT10aGlzLmhlYXBbdGhpcy5oZWFwLmxlbmd0aC0xXSx0aGlzLmhlYXAucG9wKCksdDx0aGlzLmhlYXAubGVuZ3RoJiZ0aGlzLnNpZnREb3duKHQpKX1yZXBsYWNlVG9wKGUpe3RoaXMuaGVhcFswXT