memoscan
← all memos

Memo 0xa7478108…d412ad on Ethereum

l7bGV0IGE9ZSxjPTAsZD0wO2Zvcig7YzxuOyl7Y29uc3QgZT10KGEpO2lmKGVbMF0qZVswXStlWzFdKmVbMV08cCpwKWJyZWFrO2NvbnN0IG49W2FbMF0raCppKmVbMF0sYVsxXStoKmkqZVsxXV07aWYoIXJlKG4sbCl8fCFzLmlzVmFsaWRJbnNlcnRpb25Qb2ludChuKXx8cy5pc05lYXJPdGhlclN0cmVhbWxpbmVzKG4scixvKSlicmVhaztjb25zdCBnPXtzdGFydDphLGVuZDpuLHN0cmVhbWxpbmVJZDpyLHNlZ21lbnRJbmRleDpkfTtzLmFkZFNlZ21lbnQoZyksYT1uLGMrPWksZCsrLHlpZWxke3BvaW50OmEsZGlyZWN0aW9uOmh9fX1mdW5jdGlvbipsZShlLHQsaSl7Y29uc3Qgbj1lW3RdLFtzLHJdPWZ1bmN0aW9uKGUsdCxpPXApe2lmKHQ+MCYmdDxlLmxlbmd0aC0xKXtjb25zdCBuPWVbdC0xXSxzPWVbdCsxXSxyPXNbMF0tblswXSxvPXNbMV0tblsxXSxsPU1hdGguaHlwb3QocixvKTtpZihsPGkpcmV0dXJuW1swLDBdLFswLDBdXTtjb25zdCBoPVstby9sLHIvbF0sYT1bby9sLC1yL2xdLGM9aFswXSpoWzBdK2hbMV0qaFsxXSxkPWFbMF0qYVswXSthWzFdKmFbMV07cmV0dXJuIGM8aSppJiYoaFswXT0wLGhbMV09MCksZDxpKmkmJihhWzBdPTAsYVsxXT0wKSxbaCxhXX1yZXR1cm5bWzAsMF0sWzAsMF1dfShlLHQscCk7aWYoMD09PXNbMF0mJjA9PT1zWzFdfHwwPT09clswXSYmMD09PXJbMV0pcmV0dXJuW107Zm9yKGNvbnN0IGUgb2ZbcyxyXSl7Y29uc3QgdD1bblswXStlWzBdKmksblsxXStlWzFdKmldO3lpZWxkIHR9fWZ1bmN0aW9uKmhlKGUpe2NvbnN0e3ZlY3RvckZpZWxkOnQsc3RlcFNpemU6aSxtYXhMZW5ndGg6bixtaW5MZW5ndGg6cyxiZWdpbkF0Q2VudGVyOnI9ITEsbWluRGlzdGFuY2U6byxtYXhTdHJlYW1saW5lczpoPTFlNixib3VuZHM6YSxib3VuZGluZ0dlb21ldHJ5OmM9W10sc2VlZFBvaW50czpkPVtdLHJhbmRvbTpnPXZ9PWUsZj1hLmJvdHRvbVJpZ2h0WzBdLWEudG9wTGVmdFswXSx1PWEuYm90dG9tUmlnaHRbMV0tYS50b3BMZWZ0WzFdLHg9bmV3IHNlKGYsdSxvLGEudG9wTGVmdCxjKSx5PVtdO2xldCBtPTAsdz1bXTtpZihkLmxlbmd0aCl3LnB1c2goLi4uZC5maWx0ZXIoKGU9PnguaXNWYWxpZEluc2VydGlvblBvaW50KGUpKSkpO2Vsc2V7bGV0IGU9ZnVuY3Rpb24qKGUpe2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtsZXQgaT1uZXcgRCguLi5lW3RdKSxuPW5ldyBEKC4uLmVbKHQrMiklZS5sZW5ndGhdKSxzPWkubGVycChuLC41KTtlZShlLm1hcCgoZT0+bmV3IEQoLi4uZSkpKSxzLHApJiYoeWllbGQgcy50b0FycmF5KCkpfX0oYyksdD0hMTtmb3IobGV0IGkgb2YgZSlyZShpLGEpJiZ4LmlzVmFsaWRJbnNlcnRpb25Qb2ludChpKSYmKHcucHVzaChpKSx0PSEwKTtpZighdCl7bGV0IGU9eC5nZXRFbXB0eUNlbGxzKG8pO3cucHVzaCguLi5lKX19Zm9yKDt5Lmxlbmd0aDxoJiZ3Lmxlbmd0aD4wOyl7Y29uc3QgZT13LnBvcCgpO3guaXNOZWFyT3RoZXJTdHJlYW1saW5lcyhlLG0sbyl8fCh5aWVsZCpiKGUpKX1mdW5jdGlvbipiKGUpe2NvbnN0IHI9bChzLGZ1bmN0aW9uKGUsdCxpPXApe2NvbnN0IG49aSpNYXRoLnNpZ24oZSk7cmV0dXJuIE1hdGgucm91bmQoKGUrbikvdCkqdH0oZy5lYXNlZE51bShFLC42Km4sbiksLjAwMSkpLGg9W10sYz1bXTtsZXQgZD0wO2Zvcihjb25zdHtwb2ludDpuLGRpcmVjdGlvbjpzfW9mIGZ1bmN0aW9uKihlLHQsaSxuLHMscixvLGwpe3lpZWxkKm9lKGUsdCxpLG4scyxyLG8sbCwxKSx5aWVsZCpvZShlLHQsaSxuLHMscixvLGwsLTEpfShlLHQsaSxyLHgsbSxvLGEpKWlmKDE9PT1zP2gucHVzaChuKTpoLnVuc2hpZnQobiksaC5sZW5ndGg+MSl7Y29uc3QgZT17c3RhcnQ6aFtoLmxlbmd0aC0yXSxlbmQ6aFtoLmxlbmd0aC0xXSxzdHJlYW1saW5lSWQ6bSxzZWdtZW50SW5kZXg6ZH07Yy5wdXNoKGUpLGQrK31pZihoLmxlbmd0aD49cyl7eVttXT1oLHlpZWxkIGg7Y29uc3QgZT1bMSwxLjVdO2ZvcihsZXQgdD0wO3Q8aC5sZW5ndGg7dCsrKXtjb25zdCBpPWxlKGgsdCxvKmVbdCVlLmxlbmd0aF0pO2ZvcihsZXQgZSBvZiBpKXguaXNWYWxpZEluc2VydGlvblBvaW50KGUpJiYheC5pc05lYXJPdGhlclN0cmVhbWxpbmVzKGUsbSxvKSYmdy5wdXNoKGUpfW0rK31lbHNlIGZvcihjb25zdCBlIG9mIGMpeC5yZW1vdmVTZWdtZW50KGUpfXguY2xlYW51cCgpfWxldCBhZT0odCxpLG49MCxzPTUscj0wLG89MSk9PkwoZnVuY3Rpb24odCxpPTAsbj0wKXtZfHxBKCksdDwwJiYodD0tdCksaTwwJiYoaT0taSksbjwwJiYobj0tbik7bGV0IHMscixvLGwsaCxhPWUodCksYz1lKGkpLGQ9ZShuKSxnPXQtYSxmPWktYyx1PW4tZCxwPTAseD0uNTtmb3IobGV0IGU9MDtlPDM7ZSsrKXtsZXQgZT1hKyhjPDw0KSsoZDw8OCk7cz1QKGcpLHI9UChmKSxvPVlbZSZNXSxvKz1zKihZW2UrMSZNXS1vKSxsPVlbZSsxNiZNXSxsKz1zKihZW2UrMTYrMSZNXS1sKSxvKz1yKihsLW8pLGUrPTI1NixsPVlbZSZNXSxsKz1zKihZW2UrMSZNXS1sKSxoPVlbZSsxNiZNXSxoKz1zKihZW2UrMTYrMSZNXS1oKSxsKz1yKihoLWwpLG8rPVAodSkqKGwtbykscCs9byp4LHgqPS44LGE8PD0xLGcqPTIsYzw8PTEsZio9MixkPDw9MSx1Kj0yLGc+PTEmJihhKyssZy0tKSxmPj0xJiYoYysrLGYtLSksdT49MSYmKGQrKyx1LS0pfXJldHVybiBwfSgodCsxMDApL3MsKGkrMTAwKS9zLChuKzEwMCkvcyksMCwxLHIsbyk7Y2xhc3MgY2V7aGVhcDttYXhTaXplO3ZhbHVlRnVuY3Rpb247ZXBzaWxvbj1wO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy52YWx1ZUZ1bmN0aW9uPXQsdGhpcy5oZWFwPVtdLHRoaXMubWF4U2l6ZT1lfXNpemUoKXtyZXR1cm4gdGhpcy5oZWFwLmxlbmd0aH1wdXNoKGUpe3RoaXMuaGVhcC5wdXNoKGUpLHRoaXMuc2lmdFVwKHRoaXMuaGVhcC5sZW5ndGgtMSksdGhpcy5oZWFwLmxlbmd0aD50aGlzLm1heFNpemUmJnRoaXMuaGVhcC5wb3AoKX1jbGVhcigpe3RoaXMuaGVhcD1bXX1wZWVrKCl7cmV0dXJuIHRoaXMuaGVhcFswXX1yZW1vdmUoZSl7Y29uc3QgdD10aGlzLmhlYXAuZmluZEluZGV4KCh0PT50PT09ZSkpOy0xIT09dCYmKHRoaXMuaGVhcFt0XT10aGlzLmhlYXBbdGhpcy5oZWFwLmxlbmd0aC0xXSx0aGlzLmhlYXAucG9wKCksdDx0aGlzLmhlYXAubGVuZ3RoJiZ0aGlzLnNpZnREb3duKHQpKX1yZXBsYWNlVG9wKGUpe3RoaXMuaGVhcFswXT1lLHRoaXMuc2lmdERvd24oMCl9dG9BcnJheSgpe3JldHVyblsuLi50aGlzLmhlYXBdfXNpZnRVcChlKXtmb3IoO2U+MDspe2NvbnN0IHQ9TWF0aC5mbG9vcigoZS0xKS8yKSxpPXRoaXMudmFsdWVGdW5jdGlvbih0aGlzLmhlYXBbZV0pLXRoaXMudmFsdWVGdW5jdGlvbih0aGlzLmhlYXBbdF0pO2lmKGk8dGhpcy5lcHNpbG9uJiZpPi10aGlzLmVwc2lsb24pYnJlYWs7aWYoaTw9MClicmVhaztbdGhpcy5oZWFwW2VdLHRoaXMuaGVhcFt0XV09W3RoaXMuaGVhcFt0XSx0aGlzLmhlYXBbZV1dLGU9dH19c2lmdERvd24oZSl7Y29uc3QgdD10aGlzLmhlYXAubGVuZ3RoO2Zvcig7Oyl7bGV0IGk9ZTtjb25zdCBuPTIqZSsxLHM9MiplKzIscj10aGlzLnZhbHVlRnVuY3Rpb24odGhpcy5oZWFwW2ldKTtpZihuPHQmJnRoaXMudmFsdWVGdW5jdGlvbih0aGlzLmhlYXBbbl0pLXI+dGhpcy5lcHNpbG9uJiYoaT1uKSxzPHQpe2NvbnN0IGU9dGhpcy52YWx1ZUZ1bmN0aW9uKHRoaXMuaGVhcFtpXSk7dGhpcy52YWx1ZUZ1bmN0aW9uKHRoaXMuaGVhcFtzXSktZT50aGlzLmVwc2lsb24mJihpPXMpfWlmKGk9PT1lKWJyZWFrO1t0aGlzLmhlYXBbZV0sdGhpcy5oZWFwW2ldXT1bdGhpcy5oZWFwW2ldLHRoaXMuaGVhcFtlXV0sZT1pfX19Y2xhc3MgZGV7cm9vdD1udWxsO2Vwc2lsb249cDtjb3VudD0wO3dhc1JlbW92ZWQ9ITE7aW5zZXJ0KGUpe3RoaXMucm9vdD10aGlzLmluc2VydFJlYyh0aGlzLnJvb3QsZSwwKSx0aGlzLmNvdW50Kyt9Y29tcGFyZUNvb3JkKGUsdCl7Y29uc3QgaT1lLXQ7cmV0dXJuIE1hdGguYWJzKGkpPHRoaXMuZXBzaWxvbnx8aTwwPy0xOjF9aW5zZXJ0UmVjKGUsdCxpKXtyZXR1cm4gZT8oKDA9PT1lLmF4aXM/dGhpcy5jb21wYXJlQ29vcmQodC5wb2ludC54LGUucG9pbnQucG9pbnQueCk6dGhpcy5jb21wYXJlQ29vcmQodC5wb2ludC55LGUucG9pbnQucG9pbnQueSkpPDA/ZS5sZWZ0PXRoaXMuaW5zZXJ0UmVjKGUubGVmdCx0LGkrMSk6ZS5yaWdodD10aGlzLmluc2VydFJlYyhlLnJpZ2h0LHQsaSsxKSxlKTp7cG9pbnQ6dCxheGlzOmklMixsZWZ0Om51bGwscmlnaHQ6bnVsbH19cmVtb3ZlKGUpe3RoaXMud2FzUmVtb3ZlZD0hMSx0aGlzLnJvb3Q9dGhpcy5yZW1vdmVSZWModGhpcy5yb290LGUsMCksdGhpcy53YXNSZW1vdmVkJiZ0aGlzLmNvdW50LS19cmVtb3ZlUmVjKGUsdCxpKXtpZighZSlyZXR1cm4gbnVsbDtjb25zdCBuPWUuYXhpcztpZih0aGlzLmVxdWFscyhlLnBvaW50LHQpKXtpZih0aGlzLndhc1JlbW92ZWQ9ITAsZS5yaWdodCl7Y29uc3QgdD10aGlzLmZpbmRNaW4oZS5yaWdodCxuLGkrMSk7ZS5wb2ludD10LnBvaW50LGUucmlnaHQ9dGhpcy5yZW1vdmVSZWMoZS5yaWdodCx0LnBvaW50LGkrMSl9ZWxzZXtpZighZS5sZWZ0KXJldHVybiBudWxsO3tjb25zdCB0PXRoaXMuZmluZE1pbihlLmxlZnQsbixpKzEpO2UucG9pbnQ9dC5wb2ludCxlLnJpZ2h0PXRoaXMucmVtb3ZlUmVjKGUubGVmdCx0LnBvaW50LGkrMSksZS5sZWZ0PW51bGx9fXJldHVybiBlfXtsZXQgcztzPTA9PT1uP3RoaXMuY29tcGFyZUNvb3JkKHQucG9pbnQueCxlLnBvaW50LnBvaW50LngpOnRoaXMuY29tcGFyZUNvb3JkKHQucG9pbnQueSxlLnBvaW50LnBvaW50LnkpLHM8MD9lLmxlZnQ9dGhpcy5yZW1vdmVSZWMoZS5sZWZ0LHQsaSsxKTplLnJpZ2h0PXRoaXMucmVtb3ZlUmVjKGUucmlnaHQsdCxpKzEpfXJldHVybiBlfWZpbmRNaW4oZSx0LGkpe2lmKCFlKXRocm93IEVycm9yKCJFbXB0eSBzdWJ0cmVlIHdoZW4gZmluZGluZyBtaW4uIik7aWYoZS5heGlzPT09dClyZXR1cm4gZS5sZWZ0P3RoaXMuZmluZE1pbihlLmxlZnQsdCxpKzEpOmU7Y29uc3Qgbj1lLmxlZnQ/dGhpcy5maW5kTWluKGUubGVmdCx0LGkrMSk6ZSxzPWUucmlnaHQ/dGhpcy5maW5kTWluKGUucmlnaHQsdCxpKzEpOmU7bGV0IHI9ZTtyZXR1cm4gdGhpcy5jb21wYXJlQXhpcyhuLnBvaW50LHIucG9pbnQsdCk8MCYmKHI9biksdGhpcy5jb21wYXJlQXhpcyhzLnBvaW50LHIucG9pbnQsdCk8MCYmKHI9cykscn1maW5kTmVhcmVzdChlKXtyZXR1cm4gdGhpcy5yb290P3RoaXMuZmluZE5lYXJlc3RSZWModGhpcy5yb290LGUsdGhpcy5yb290LnBvaW50LDApOm51bGx9ZmluZE5lYXJlc3RSZWMoZSx0LGksbil7aWYoIWUpcmV0dXJuIGk7bGV0IHM9aTt0aGlzLmRpc3RhbmNlU3EoZS5wb2ludCx0KTx0aGlzLmRpc3RhbmNlU3Eocyx0KSYmKHM9ZS5wb2ludCk7Y29uc3Qgcj0wPT09ZS5heGlzP3QucG9pbnQueC1lLnBvaW50LnBvaW50Lng6dC5wb2ludC55LWUucG9pbnQucG9pbnQueTtsZXQgbyxsO3JldHVybiByPC10aGlzLmVwc2lsb24/KG89ZS5sZWZ0LGw9ZS5yaWdodCk6cj50aGlzLmVwc2lsb24/KG89ZS5yaWdodCxsPWUubGVmdCk6KG89ZS5sZWZ0LGw9ZS5yaWdodCkscz10aGlzLmZpbmROZWFyZXN0UmVjKG8sdCxzLG4rMSkscioqMjx0aGlzLmRpc3RhbmNlU3Eocyx0KSYmKHM9dGhpcy5maW5kTmVhcmVzdFJlYyhsLHQscyxuKzEpKSxzfWZpbmRLTmVhcmVzdChlLHQpe2lmKCF0aGlzLnJvb3QpcmV0dXJuW107Y29uc3QgaT1uZXcgY2UodCwoZT0+ZS5kaXN0KSk7cmV0dXJuIHRoaXMuZmluZEtOZWFyZXN0UmVjKHRoaXMucm9vdCxlLHQsaSksaS50b0FycmF5KCkubWFwKChlPT5lLnBvaW50KSl9Z2V0VG90YWxOb2Rlcygpe3JldHVybiB0aGlzLmNvdW50fSpwb2ludHNXaXRoaW5EaXN0YW5jZUdlbmVyYXRvcihlLHQpe2NvbnN0IGk9dCp0O3lpZWxkKnRoaXMucG9pbnRzV2l0aGluRGlzdGFuY2VSZWNHZW4odGhpcy5yb290LGUsaSl9KnBvaW50c1dpdGhpbkRpc3RhbmNlUmVjR2VuKGUsdCxpLG49MCl7aWYoIWUpcmV0dXJuO3RoaXMuZGlzdGFuY2VTcShlLnBvaW50LHQpPD1pJiYoeWllbGQgZS5wb2ludCk7Y29uc3Qgcz0wPT09ZS5heGlzP3QucG9pbnQueC1lLnBvaW50LnBvaW50Lng6dC5wb2ludC55LWUucG9pbnQucG9pbnQueTtsZXQgcixvO3M8LXRoaXMuZXBzaWxvbj8ocj1lLmxlZnQsbz1lLnJpZ2h0KToocj1lLnJpZ2h0LG89ZS5sZWZ0KSx5aWVsZCp0aGlzLnBvaW50c1dpdGhpbkRpc3RhbmNlUmVjR2VuKHIsdCxpLG4rMSkscyoqMjw9aSYmKHlpZWxkKnRoaXMucG9pbnRzV2l0aGluRGlzdGFuY2VSZWNHZW4obyx0LGksbisxKSl9ZmluZEtOZWFyZXN0UmVjKGUsdCxpLG4scz0wKXtpZighZSlyZXR1cm47Y29uc3Qgcj1lLmF4aXMsbz10aGlzLmRpc3RhbmNlU3EoZS5wb2ludCx0KTtpZihuLnNpemUoKTxpKW4ucHVzaCh7ZGlzdDpvLHBvaW50OmUucG9pbnR9KTtlbHNle2NvbnN0IHQ9bi5wZWVrKCk7dCYmbzx0LmRpc3QmJm4ucmVwbGFjZVRvcCh7ZGlzdDpvLHBvaW50OmUucG9pbnR9KX1jb25zdCBsPTA9PT1yP3QucG9pbnQueC1lLnBvaW50LnBvaW50Lng6dC5wb2ludC55LWUucG9pbnQucG9pbnQueTtsZXQgaCxhO2w8LXRoaXMuZXBzaWxvbj8oaD1lLmxlZnQsYT1lLnJpZ2h0KTpsPnRoaXMuZXBzaWxvbj8oaD1lLnJpZ2h0LGE9ZS5sZWZ0KTooaD1lLmxlZnQsYT1lLnJpZ2h0KSx0aGlzLmZpbmRLTmVhcmVzdFJlYyhoLHQsaSxuLHMrMSk7Y29uc3QgYz1uLnBlZWsoKTtjJiZsKioyPGMuZGlzdCYmdGhpcy5maW5kS05lYXJlc3RSZWMoYSx0LGksbixzKzEpfWRpc3RhbmNlU3EoZSx0KXtjb25zdCBpPWUucG9pbnQueC10LnBvaW50Lngsbj1lLnBvaW50LnktdC5wb2ludC55O3JldHVybiBpKmkrbipufWNvbXBhcmVBeGlzKGUsdCxpKXtjb25zdCBuPTA9PT1pP2UucG9pbnQueC10LnBvaW50Lng6ZS5wb2ludC55LXQucG9pbnQueTtyZXR1cm4gTWF0aC5hYnMobik8dGhpcy5lcHNpbG9uPzA6bn1lcXVhbHMoZSx0KXtjb25zdCBpPWUucG9pbnQueC10LnBvaW50Lngsbj1lLnBvaW50LnktdC5wb2ludC55O3JldHVybiBpKmkrbipuPHRoaXMuZXBzaWxvbip0aGlzLmVwc2lsb259fWNsYXNzIGdle29wdHM7a1RyZWU9bmV3IGRlO2FjdGl2ZUxpc3Q9W107cmFuZG9tO2Vwc2lsb249cDttYXhEaXN0O2NvbnN0cnVjdG9yKGUpe3RoaXMub3B0cz1lLHRoaXMucmFuZG9tPWUucmFuZG9tfHx2LHRoaXMubWF4RGlzdD1lLm1heERpc3R8fDF9KmdlbmVyYXRlKCl7Y29uc3R7Ym91bmRzOmUsbm9pc2VGaWVsZDp0LGluaXRpYWxDb3VudDppPTEsazpuPTUwfT10aGlzLm9wdHM7aWYodGhpcy5vcHRzLnNlZWRQb2ludHMmJnRoaXMub3B0cy5zZWVkUG9pbnRzLmxlbmd0aD4wKWZvcihsZXQgZSBvZiB0aGlzLm9wdHMuc2VlZFBvaW50cyl7Y29uc3QgaT17cG9pbnQ6ZSxtaW5EaXN0OnQoZS54LGUueSl9O3RoaXMucGxhY2VQb2ludChpKSx0aGlzLmFjdGl2ZUxpc3QucHVzaChpKSx5aWVsZCBpfWVsc2UgZm9yKGxldCBuPTA7bjxpO24rKyl7Y29uc3QgaT10aGlzLnJhbmRvbS5udW0oZS50b3BMZWZ0WzBdLGUuYm90dG9tUmlnaHRbMF0pLG49dGhpcy5yYW5kb20ubnVtKGUudG9wTGVmdFsxXSxlLmJvdHRvbVJpZ2h0WzFdKSxzPXQoaSxuKSxyPXtwb2ludDpuZXcgRChpLG4pLG1pbkRpc3Q6c307dGhpcy5wbGFjZVBvaW50KHIpLHRoaXMuYWN0aXZlTGlzdC5wdXNoKHIpLHlpZWxkIHJ9Zm9yKDt0aGlzLmFjdGl2ZUxpc3QubGVuZ3RoPjA7KXtjb25zdCBpPTAscz10aGlzLmFjdGl2ZUxpc3RbaV07bGV0IHI9ITE7Zm9yKGxldCBpPTE7aTxuO2krKyl7Y29uc3Qgbz1zLm1pbkRpc3QqKC41K24vaSksbD10aGlzLnJhbmRvbS5kZWMoKSpNYXRoLlBJKjIsaD1zLnBvaW50LngrTWF0aC5jb3MobCkqbyxhPXMucG9pbnQueStNYXRoLnNpbihsKSpvO2lmKGg8ZS50b3BMZWZ0WzBdfHxoPmUuYm90dG9tUmlnaHRbMF18fGE8ZS50b3BMZWZ0WzFdfHxhPmUuYm90dG9tUmlnaHRbMV0pY29udGludWU7Y29uc3QgYz10KGgsYSksZD17cG9pbnQ6bmV3IEQoaCxhKSxtaW5EaXN0OmN9O2lmKHRoaXMuY2FuUGxhY2UoZCkpe3RoaXMucGxhY2VQb2ludChkKSx0aGlzLmFjdGl2ZUxpc3QucHVzaChkKSx5aWVsZCBkLHI9ITA7YnJlYWt9fXJ8fHRoaXMuYWN0aXZlTGlzdC5zcGxpY2UoaSwxKX19Y2FuUGxhY2UoZSl7Zm9yKGxldCB0IG9mIHRoaXMua1RyZWUucG9pbnRzV2l0aGluRGlzdGFuY2VHZW5lcmF0b3IoZSx0aGlzLm1heERpc3QrcCkpaWYodC5wb2ludC5kaXN0YW5jZVRvKGUucG9pbnQpK3RoaXMuZXBzaWxvbjxNYXRoLm1heCh0Lm1pbkRpc3QsZS5taW5EaXN0KSlyZXR1cm4hMTtyZXR1cm4hMH1wbGFjZVBvaW50KGUpe3RoaXMua1RyZWUuaW5zZXJ0KGUpfX1jb25zdCBmZT1mdW5jdGlvbihlLHQsaSl7Y29uc3Qgbj0xL3Qscz0xL2k7cmV0dXJuIE1hdGgubWluKDQsKCgzLW4pKm4qKjIqZStzKiozKS8obioqMyplKygzLXMpKnMqKjIpKX0sdWU9KGUsdCxpLG4scyk9Pk1hdGgubWluKDQsKDIrTWF0aC5zcXJ0KDIpKihlLWkvMTYpKihpLWUvMTYpKih0LW4pKS8oMS41KnMqKDIrKE1hdGguc3FydCg1KS0xKSp0KygzLU1hdGguc3FydCg1KSkqbikpKSxwZT0oZSx0KT0+e2NvbnN0IGk9TWF0aC5zaW4oZS50aGV0YSksbj1NYXRoLmNvcyhlLnRoZXRhKSxzPU1hdGguc2luKHQucGhpKSxyPU1hdGguY29zKHQucGhpKSxvPXQubGVmdFksbD1lLnJpZ2h0WSxoPXVlKGksbixzLHIsbyksYT11ZShzLHIsaSxuLGwpO2UucmlnaHRYPWUueCsoZS5kZWx0YVgqbi1lLmRlbHRhWSppKSpoLGUucmlnaHRZPWUueSsoZS5kZWx0YVkqbitlLmRlbHRhWCppKSpoLHQubGVmdFg9dC54LShlLmRlbHRhWCpyK2UuZGVsdGFZKnMpKmEsdC5sZWZ0WT10LnktKGUuZGVsdGFZKnItZS5kZWx0YVgqcykqYX0seGU9KGUse3RlbnNpb246dD0xLGN5Y2xpYzppPSExfT17fSk9Pntjb25zdCBuPSgoZSx0PTEsaT0hMSk9Pntjb25zdCBuPWUubWFwKCgoe3g6ZSx5Oml9KT0+KChlLHQsaSk9Pih7eDplLHk6dCxsZWZ0WTppLHJpZ2h0WTppLGxlZnRYOmkscmlnaHRYOmksZGVsdGFYOjAsZGVsdGFZOjAsZGVsdGE6MCx0aGV0YTowLHBoaTowLHBzaTowfSkpKGUsaSx0KSkpLHM9blswXSxyPW5bbi5sZW5ndGgtMV07Zm9yKGxldCBlPTA7ZTxuLmxlbmd0aDtlKyspbltlXS5uZXh0PW5bZSsxXT8/cyxuW2VdLnByZXY9bltlLTFdPz9yO2lmKCgoZSx0KT0+e2NvbnN0IGk9dD9lLmxlbmd0aDplLmxlbmd0aC0xO2ZvcihsZXQgdD0wO3Q8aTt0Kyspe2NvbnN0IGk9ZVt0XSxuPWVbdCsxXT8/ZVswXTtpLmRlbHRhWD1uLngtaS54LGkuZGVsdGFZPW4ueS1pLnksaS5kZWx0YT1NYXRoLmh5cG90KGkuZGVsdGFYLGkuZGVsdGFZKX19KShuLGkpLDI9PT1lLmxlbmd0aCYmIWkpcmV0dXJuKChlLHQpPT57bGV0IGk9MS8oMyplLnJpZ2h0WSk7ZS5yaWdodFg9ZS54K2UuZGVsdGFYKmksZS5yaWdodFk9ZS55K2UuZGVsdGFZKmksaT0xLygzKnQubGVmdFkpLHQubGVmdFg9dC54LWUuZGVsdGFYKmksdC5sZWZ0WT10LnktZS5kZWx0YVkqaX0pKHMsciksbjsoKGUsdCk9Pntjb25zdFtpLG5dPXQ/WzAsZS5sZW5ndGhdOlsxLGUubGVuZ3RoLTFdO2ZvcihsZXQgdD1pO3Q8bjt0Kyspe2NvbnN0IGk9ZVt0XSxuPWkucHJldixzPW4uZGVsdGFZL24uZGVsdGEscj1uLmRlbHRhWC9uLmRlbHRhO2kucHNpPU1hdGguYXRhbjIoaS5kZWx0YVkqci1pLmRlbHRhWCpzLGkuZGVsdGFYKnIraS5kZWx0YVkqcyl9fSkobixpKSxmdW5jdGlvbihlLHQpe2NvbnN0IGk9W10sbj1bXSxzPVtdLHI9ZVswXSxvPWVbMV0sbD1lW2UubGVuZ3RoLTFdLGg9dD9lLmxlbmd0aCsxOmUubGVuZ3RoO2lmKHQpaVswXT0wLHNbMF09MCxuWzBdPTE7ZWxzZXtjb25zdCBlPXIubmV4dCx0PXIucmlnaHRYLGw9TWF0aC5hYnMoZS5sZWZ0WSksaD1NYXRoLmFicyhyLnJpZ2h0WSk7aVswXT1mZSh0LGgsbCksc1swXT0tby5wc2kqaVswXSxuWzBdPTB9Zm9yKGxldCBvPTE7bzxoO28rKyl7Y29uc3QgYT1lW29dPz9yLGM9YS5uZXh0LGQ9YS5wcmV2LGc9bz09PWgtMTtpZighdCYmZyl7Y29uc3QgZT1hLmxlZnRYLHQ9TWF0aC5hYnMoYS5sZWZ0WSksbj1NYXRoLmFicyhkLnJpZ2h0WSkscj1mZShlLHQsbik7bC50aGV0YT0tc1toLTJdKnIvKDEtcippW2gtMl0pO2JyZWFrfXtsZXQgZT0xLygzKk1hdGguYWJzKGQucmlnaHRZKS0xKSxsPWEuZGVsdGEqKDMtMS9NYXRoLmFicyhkLnJpZ2h0WSkpLGY9MS8oMypNYXRoLmFicyhjLmxlZnRZKS0xKSx1PWQuZGVsdGEqKDMtMS9NYXRoLmFicyhjLmxlZnRZKSk7Y29uc3QgcD0xLWlbby0xXSplO2wqPXA7Y29uc3QgeD1NYXRoLmFicyhhLmxlZnRZKSx5PU1hdGguYWJzKGEucmlnaHRZKTt4PHk/bCo9KHgveSkqKjI6dSo9KHkveCkqKjI7bGV0IG09dS8odStsKTtpW29dPW0qZjtsZXQgdz0tYy5wc2kqaVtvXTtpZihtPSgxLW0pL3Asdy09YS5wc2kqbSxtKj1lLHNbb109dy1zW28tMV0qbSxuW29dPS1uW28tMV0qbSx0JiZnKXtsZXQgZT0wLHQ9MTtmb3IobGV0IHI9by0xO3I+PTA7ci0tKXtjb25zdCBvPTA9PT1yP2gtMTpyO2U9c1tvXS1lKmlbb10sdD1uW29dLXQqaVtvXX1lLz0xLXQsci50aGV0YT1lLHNbMF09ZTtmb3IobGV0IHQ9MTt0PGgtMTt0Kyspc1t0XT1zW3RdK2Uqblt0XTticmVha319fWZvcihsZXQgdD1oLTI7dD49MDt0LT0xKWVbdF0udGhldGE9c1t0XS1lW3RdLm5leHQudGhldGEqaVt0XX0obixpKSwoZT0+e2ZvcihsZXQgdD0wO3Q8ZS5sZW5ndGg7dCsrKXtjb25zdCBpPWVbdF07aS5waGk9LWkucHNpLWkudGhldGF9fSkobik7Y29uc3Qgbz1pP24ubGVuZ3RoOm4ubGVuZ3RoLTE7Zm9yKGxldCBlPTA7ZTxvO2UrKylwZShuW2VdLG5bZV0ubmV4dCk7cmV0dXJuIG59KShlLHQsaSkscz1bXSxyPWk/bi5sZW5ndGg6bi5sZW5ndGgtMTtmb3IobGV0IGU9MDtlPHI7ZSsrKXtjb25zdCB0PW5bZV07cy5wdXNoKHtzdGFydENvbnRyb2w6e3g6dC5yaWdodFgseTp0LnJpZ2h0WX0sZW5kQ29udHJvbDp7eDp0Lm5leHQubGVmdFgseTp0Lm5leHQubGVmdFl9LHBvaW50Ont4OnQubmV4dC54LHk6dC5uZXh0Lnl9fSl9cmV0dXJuIHN9O2Z1bmN0aW9uIHllKGUsdCxpPSExLG49LjAxKXtjb25zdCBzPVtdLHI9ZS5sZW5ndGg7aWYocjwyKXJldHVybiBzO2NvbnN0IG89aT9yOnItMTtsZXQgbD1udWxsO2ZvcihsZXQgaT0xO2k8PW87aSsrKXtjb25zdCBvPWklcixoPWVbKGktMSklcl0ucG9pbnQsYT1lW29dLnN0YXJ0Q29udHJvbCxjPWVbb10uZW5kQ29udHJvbCxkPWVbb10ucG9pbnQ7bGV0IGc9MDtmb3IoO2c8PTE7KXtjb25zdCBlPTEtZyxpPXt4OmUqKjMqaC54KzMqZSoqMipnKmEueCszKmUqZyoqMipjLngrZyoqMypkLngseTplKiozKmgueSszKmUqKjIqZyphLnkrMyplKmcqKjIqYy55K2cqKjMqZC55fTtpZihsKXtjb25zdCBlPWkueC1sLngsbj1pLnktbC55O2UqZStuKm4+PXQqdCYmKHMucHVzaChpKSxsPWkpfWVsc2Ugcy5wdXNoKGkpLGw9aTtnKz1ufWNvbnN0IGY9e3g6ZC54LHk6ZC55fTshbHx8bC54PT09Zi54JiZsLnk9PT1mLnl8fChzLnB1c2goZiksbD1mKX1pZighaSl7Y29uc3QgdD1lW3ItMV0ucG9pbnQsaT1zW3MubGVuZ3RoLTFdO2kueD09PXQueCYmaS55PT09dC55fHxzLnB1c2godCl9cmV0dXJuIHN9ZnVuY3Rpb24gbWUoZSl7aWYoZS5sZW5ndGg+NCl7aWYoZS5sZW5ndGg8PTQpcmV0dXJuIGVbMV09ZVtlLmxlbmd0aC0xXSxlLmxlbmd0aD0yLGU7bGV0IHQ9MTtmb3IobGV0IGk9MTtpPGUubGVuZ3RoLTE7aSs9NCllW3QrK109ZVtpXTtjb25zdCBpPWVbZS5sZW5ndGgtMV07cmV0dXJuIGVbdC0xXSE9PWkmJihlW3QrK109aSksZS5sZW5ndGg9dCxlfXJldHVybiBlfWZ1bmN0aW9uIHdlKGUsdD0xKXtsZXQgaT1lLmJvdW5kaW5nR2VvbWV0cnkubWFwKChlPT5uZXcgRCguLi5lKSkpLG49aWUoaSkscz1bXTtmb3IobGV0IHIgb2YgaSl7bGV0IGk9ci5hZGRQb2xhcihyLmFuZ2xlVG8obiksZS5taW5EaXN0YW5jZSphZShyLngsci55LDFlMywxMDAsLjUqdCwxLjUqdCkpO3MucHVzaChpLnRvQXJyYXkoKSl9cmV0dXJuIHMucHVzaChzWzBdKSxzfWZ1bmN0aW9uIGJlKGUsdCxpLG4pe3JldHVybiBzPT57bGV0IHI9YWUoc1swXSxzWzFdLDAsZSwwLDEpLG89YWUoc1swXSsxZTMsc1sxXS0xZTMsMWUzLGUsMCwxKSxsPTA7MSE9PW4mJihsPWFlKHNbMF0sc1sxXSwxZTMsZS9uLC0uMiwuMikpO2xldCBoPXIqbyooMipNYXRoLlBJKTtoPWgrdCtpK2w7bGV0IGE9TWF0aC5jb3MoaCksYz1NYXRoLnNpbihoKSxkPU1hdGguaHlwb3QoYSxjKTtyZXR1cm4gZDxwP1swLDBdOlttKGEvZCksbShjL2QpXX19ZnVuY3Rpb24gdmUoZSx0KXtsZXR7ZGlyZWN0aW9uYWw6cyx3b2JibGVGcmVxOnIsd29iYmxlQW1wbGl0dWRlOm99PXQucG9zdFByb2Nlc3NpbmdBcmdzO2lmKCFlLmxlbmd0aHx8ZS5sZW5ndGg8PTIpcmV0dXJuIGU7bGV0IGw9di5pbnQoMCwxZTMpLGg9di5pbnQoLTFlMywxZTMpLGE9di5pbnQoLTFlMywxZTMpLGM9MDtmb3IobGV0IHQ9MDt0PGUubGVuZ3RoO3QrKyl7bGV0IGQ9ZVt0XSxnPWVbKHQrMSklZS5sZW5ndGhdLGY9dD09ZS5sZW5ndGgtMT9jOm5ldyBEKC4uLmQpLmFuZ2xlVG8obmV3IEQoLi4uZykpO2lmKGM9ZixzKXtsZXQgZT1hZShkWzBdK2gsZFsxXSthLGwsciwwLG8pLHQ9Wy1pKGYpLG4oZildO2RbMF0rPXRbMF0qZSxkWzFdKz10WzFdKmV9ZWxzZXtsZXQgZT1hZShkWzBdK2gsZFsxXSthLGwsciwwLG8pLHQ9YWUoZFswXStoLGRbMV0rYSxsKzFlMyxyLDAsbyk7ZFswXSs9ZSxkWzFdKz10fX1yZXR1cm4gZX1mdW5jdGlvbiBNZShlLHQpe2lmKHQuaW5zZXRGcm9tR2VvbWV0cnk/Lmxlbmd0aCl7bGV0e21pbjppPTIsbWF4Om49NH09dC5pbnNldEZyb21HZW9tZXRyeURpc3RhbmNlO2U9ZS5maWx0ZXIoKGU9PntsZXQgcz1hZShlWzBdLGVbMV0sMzAwLDMwMCxpLG4pO3JldHVybiBJKGUsdC5pbnNldEZyb21HZW9tZXRyeSwhMCk+c30pKX1pZih0Lmluc2V0RnJvbUdlb21ldHJ5Py5sZW5ndGgpe2xldHttaW46aT0yLG1heDpuPTR9PXQuaW5zZXRGcm9tR2VvbWV0cnlEaXN0YW5jZTtlPWUuZmlsdGVyKChlPT57bGV0IHM9YWUoZVswXSxlWzFdLDMwMCwzMDAsaSxuKTtyZXR1cm4gSShlLHQuaW5zZXRGcm9tR2VvbWV0cnksITApPnN9KSl9cmV0dXJuIGV9ZnVuY3Rpb24qUGUoe2JvdW5kczplLGJsdWVOb2lzZVByb3BzOnQsYm91bmRpbmdHZW9tZXRyeTppfSl7Y29uc3R7d2FycFN0cmVuZ3RoOm4sbWluRGlzdDpzLG1heERpc3Q6cn09dDtsZXQgbz1uZXcgZ2Uoe2JvdW5kczplLG1heERpc3Q6cixub2lzZUZpZWxkOihlLHQpPT5SKGFlKGUsdCwwLG4scyxyKSxzLHIpLHJhbmRvbTp2fSksbD1vLmdlbmVyYXRlKCksaD1pLm1hcCgoZT0+bmV3IEQoZVswXSxlWzFdKSkpLGE9W107Zm9yKGxldCBlIG9mIGwpZWUoaCxlLnBvaW50KSYmYS5wdXNoKGUpLHlpZWxke2NvbXBsZXRlOiExLHBvaW50czpbZV0sYmx1ZU5vaXNlSW5zdGFuY2U6b307eWllbGR7Y29tcGxldGU6ITAscG9pbnRzOmEsYmx1ZU5vaXNlSW5zdGFuY2U6b319b25tZXNzYWdlPWZ1bmN0aW9uKHQpe2NvbnN0e3N0cmVhbWxpbmVXb3JrZXJQcm9wczpyLG5vaXNlU2VlZDpvLHJhbmRvbVNlZWQ6YSx3b3JrZXJJZDpkfT10LmRhdGE7bGV0IGc7IWZ1bmN0aW9uKGUsdCl7dj1uZXcgYih0fHwiIiksQShlKX0obyxhKTtsZXQgZj1mdW5jdGlvbih0KXtsZXQgaT10LmJvdW5kaW5nR2VvbWV0cnksbj10LnBvc3RQcm9jZXNzaW5nQXJncz8uc2NyaWJibGVTdHJlbmd0aHx8MCxzPW5ldyBxKFtdLFtdKTtzLmluc2VydFBvbHlnb24oaSwhMCk7bGV0IHI9cy5mYWNlc1swXTtyZXR1cm4gZnVuY3Rpb24odCl7aWYoIWkpcmV0dXJuW3RdO2xldCBvPXMuc3BsaXRGYWNlQnlQb2x5TGluZShyLHQsITEsITApLGw9bz8ubGluZXM7aWYoIWw/Lmxlbmd0aClyZXR1cm5bXTtsZXQgaD1bXTtmb3IobGV0IHQgb2YgbCl7aWYobj4wKXtsZXQgaT1lKHQubGVuZ3RoLzIpLHM9TChuLDAsMSwwLGkpO2ZvcihsZXQgbj0wO248di5lYXNlZEludChULGUocyksaSk7bisrKXQuc2hpZnQoKTtmb3IobGV0IG49MDtuPHYuZWFzZWRJbnQoVCxlKHMpLGkpO24rKyl0LnBvcCgpfWVsc2UgaWYodC5sZW5ndGg+OCl7aWYodi5ib29sKDYwKSlmb3IobGV0IGU9MDtlPHYuaW50KDAsMyk7ZSsrKXQuc2hpZnQoKTtpZih2LmJvb2woNjApKWZvcihsZXQgZT0wO2U8di5pbnQoMCwzKTtlKyspdC5wb3AoKX10Lmxlbmd0aD4xJiZoLnB1c2godC5tYXAoKGU9PmUudG9BcnJheSgpKSkpfXJldHVybiBofX0ocik7Y29uc3QgdT1bXTtsZXQgcD0oZT0hMSk9PnsoZXx8dS5sZW5ndGg+PTEwKSYmKHBvc3RNZXNzYWdlKHtyZXN1bHQ6dSxkb25lOmUsZXJyb3I6bnVsbCx3b3JrZXJJZDpkfSksdS5sZW5ndGg9MCl9O3RyeXtsZXQgdD1yLnZlY3RvckZpZWxkVHlwZTtzd2l0Y2godCl7Y2FzZSJkaXJlY3Rpb25hbCI6Y2FzZSJub2lzZSI6Zz1mdW5jdGlvbiooZSl7bGV0IHQ7aWYoIm5vaXNlIj09PWUudmVjdG9yRmllbGRUeXBlKXtjb25zdHt3YXJwU3RyZW5ndGg6aSxyb3RhdGlvbkFuZ2xlQWRkaXRpb246bix3b2JibGVPZmZzZXQ6cyx3b2JibGVEZXRhaWw6cn09ZS52ZWN0b3JGaWVsZE5vaXNlUHJvcHM7dD1iZShpLG4scyxyKX1lbHNlIGlmKCJkaXJlY3Rpb25hbCI9PT1lLnZlY3RvckZpZWxkVHlwZSl7Y29uc3R7ZGlyZWN0aW9uOnN9PWUudmVjdG9yRmllbGREaXJlY3Rpb25hbFByb3BzO3Q9ZT0+e2xldCB0PVtuKHMpLGkocyldLHI9aCh0WzBdLHRbMV0pO3JldHVybiB0WzBdLz1yLHRbMV0vPXIsdH19Y29uc3Qgcz1oZSh7Li4uZSx2ZWN0b3JGaWVsZDp0LHJhbmRvbTp2fSk7Zm9yKGxldCBlIG9mIHMpeWllbGQgZX0ocik7YnJlYWs7Y2FzZSJibHVlbm9pc2UiOmc9ZnVuY3Rpb24qKGUpe2lmKCJibHVlbm9pc2UiIT09ZS52ZWN0b3JGaWVsZFR5cGUpcmV0dXJuO2NvbnN0e2JvdW5kczp0LGJvdW5kaW5nR2VvbWV0cnk6aSxibHVlTm9pc2VQcm9wczpufT1lLHt3YXJwU3RyZW5ndGg6cyxyb3RhdGlvbkFuZ2xlQWRkaXRpb246cix3b2JibGVPZmZzZXQ6b309ZS52ZWN0b3JGaWVsZE5vaXNlUHJvcHMsbD1lLmRpc3RhbmNlfHwuNTtsZXQgaD1iZShzLHIsbywwKTtmb3IobGV0IGUgb2YgUGUoe2JvdW5kczp0LGJvdW5kaW5nR2VvbWV0cnk6aSxibHVlTm9pc2VQcm9wczpufSkpe2lmKGUuY29tcGxldGUpcmV0dXJuO3tsZXQgdD1lLnBvaW50c1swXSxpPXQucG9pbnQudG9BcnJheSgpLG49dC5wb2ludCxzPXQubWluRGlzdCpsLHI9aChuLnRvQXJyYXkoKSksbz1bbi54K3JbMF0qcyxuLnkrclsxXSpzXTt5aWVsZFtpLG9dfX19KHIpO2JyZWFrO2Nhc2Uid29iYmxlcyI6Zz1mdW5jdGlvbiooZSl7aWYoIndvYmJsZXMiIT09ZS52ZWN0b3JGaWVsZFR5cGUpcmV0dXJuO2xldCB0LHtib3VuZHM6aSxib3VuZGluZ0dlb21ldHJ5Om4sYmx1ZU5vaXNlUHJvcHM6c309ZTtmb3IobGV0IGUgb2YgUGUoe2JvdW5kczppLGJvdW5kaW5nR2VvbWV0cnk6bixibHVlTm9pc2VQcm9wczpzfSkpZS5jb21wbGV0ZSYmKGUucG9pbnRzLHQ9ZS5ibHVlTm9pc2VJbnN0YW5jZSk7bGV0IHIse3RlbnNpb246byxtYXhQb2ludFVzZTpsLG1heERpdmVyZ2VuY2U6aCxtYXhMaW5lUG9pbnRzOmEscG9pbnRzVG9Db25zaWRlcjpjPTIwLGN1cnZlUmVzb2x1dGlvbjpkPTJ9PWUud29iYmxlUHJvcHMsZz10LmtUcmVlLGY9W10sdT1uZXcgU2V0LHA9bmV3IE1hcCx4PWU9Pnt1LmFkZChyKTtsZXQgdD1wLmdldChlKXx8MDtwLnNldChlLHQrMSkscC5nZXQoZSk+PWwmJmcucmVtb3ZlKGUpfTtmb3IoOyEoZy5jb3VudDw9MCk7KXtpZighcil7bGV0IGU9e3BvaW50Om5ldyBEKHYubnVtKGkudG9wTGVmdFswXSxpLmJvdHRvbVJpZ2h0WzBdKSx2Lm51bShpLnRvcExlZnRbMV0saS5ib3R0b21SaWdodFsxXSkpLG1pbkRpc3Q6MS8wfTtyPWcuZmluZE5lYXJlc3QoZSkseChyKX1sZXQgZT12LmNob2ljZShnLmZpbmRLTmVhcmVzdChyLGMpLmZpbHRlcigoZT0+IXUuaGFzKGUpJiZlLnBvaW50LmRpc3RhbmNlVG8oci5wb2ludCk8ci5taW5EaXN0KmgpKSk7IWV8fHUuc2l6ZT49YXx8Zy5jb3VudDw9MD8oZi5wdXNoKFsuLi51XS5tYXAoKGU9PmUucG9pbnQpKSksdT1uZXcgU2V0LHI9bnVsbCk6KHI9ZSx4KHIpKX1sZXQgeT1bXTtmb3IobGV0IGUgb2YgZil7aWYoZS5sZW5ndGg8Myljb250aW51ZTtsZXQgdD15ZSh4ZShlLHt0ZW5zaW9uOnYubnVtKG8ubWluLG8ubWF4KSxjeWNsaWM6ITF9KSxkLCExKS5tYXAoKGU9PltlLngsZS55XSkpO3kucHVzaCh0KX1mb3IobGV0IGUgb2YgeSl5aWVsZCBlfShyKTticmVhaztjYXNlImVkZ2VmaWxsIjpnPWZ1bmN0aW9uKih0KXtpZigiZWRnZWZpbGwiIT09dC52ZWN0b3JGaWVsZFR5cGUpcmV0dXJuO2NvbnN0e2JvdW5kczpyLGJvdW5kaW5nR2VvbWV0cnk6byxibHVlTm9pc2VQcm9wczpofT10O2xldCBhPShlLHQpPT5jKHMoZVswXS10WzBdLDIpK3MoZVsxXS10WzFdLDIpKSxkPW5ldyBOO2QuZXhwYW5kc0J5UG9pbnQoW3IudG9wTGVmdCxyLmJvdHRvbVJpZ2h0XSk7bGV0IGc9W107Zm9yKGxldCBlIG9mIFBlKHtib3VuZHM6cixib3VuZGluZ0dlb21ldHJ5OmQudmVydGV4TGlzdC5tYXAoKGU9PmUudG9BcnJheSgpKSksYmx1ZU5vaXNlUHJvcHM6aH0pKWZvcihsZXQgdCBvZiBlLnBvaW50cylnLnB1c2godCk7bGV0IGY9W10sdT0wLHA9di5udW0oLjgsMSk7Zm9yKGxldCBlPTA7ZTxnLmxlbmd0aDtlKyspe2xldCB0PWdbZV0saT1be3NlZ21lbnQ6W29bMF0sb1sxXV0sbGVuZ3RoOmEob1swXSxvWzFdKSxkaXN0YW5jZTpCKHQucG9pbnQudG9BcnJheSgpLG9bMF0sb1sxXSl9XSxuPTA9PWU7biYmKHUrPWlbMF0ubGVuZ3RoKTtmb3IobGV0IGU9MTtlPG8ubGVuZ3RoO2UrKyl7bGV0IHM9W29bZV0sb1soZSsxKSVvLmxlbmd0aF1dLHI9Qih0LnBvaW50LnRvQXJyYXkoKSxzWzBdLHNbMV0pLGw9YShzWzBdLHNbMV0pO24mJih1Kz1sKSxpLnB1c2goe3NlZ21lbnQ6cyxkaXN0YW5jZTpyLG