ITxhcmNoPgpfXy5QS0dERUYgICAgICAgMCAgICAgICAgICAgMCAgICAgMCAgICAgNjQ0ICAgICAyMTE5MDEgICAgYApnbyBvYmplY3QgZGFyd2luIGFtZDY0IGdvMS4yMi4xIEdPQU1ENjQ9djEgWDpyZWdhYml3cmFwcGVycyxyZWdhYmlhcmdzLGNvdmVyYWdlcmVkZXNpZ24sYWxsb2NoZWFkZXJzLGV4ZWN0cmFjZXIyCmJ1aWxkIGlkICJqdmNYZWdadGw0MmI0LThYaGJxRS9qSXlISUZpcnA5WFFOTnFmaXdBSyIKCgokJEIKdQEAAAAAAAAADwoAABEKAADRCgAAaQsAANAMAACpGQAAEBsAAHccAADeHQAACx4AAAAAAAALAAAAGAAAABwAAAAkAAAAMwAAADkAAABIAAAATgAAAFQAAABaAAAAbgAAAHkAAACIAAAAjgAAAKMAAACvAAAAuwAAAL4AAADFAAAA0QAAANQAAADpAAAA9QAAAAwBAAASAQAAJwEAACsBAAA/AQAAQgEAAE8BAABTAQAAagEAAG8BAAB/AQAAhgEAAJcBAACfAQAAswEAAL4BAADAAQAAxAEAAM8BAADcAQAA4AEAAOkBAADtAQAA9AEAAPsBAAAHAgAACwIAABICAAAfAgAAIwIAACkCAAAsAgAALwIAADMCAABDAgAASgIAAEwCAABRAgAAUwIAAFcCAABeAgAAbgIAAHUCAAB5AgAAiQIAAJACAACdAgAAoQIAALYCAAC6AgAA0gIAANkCAADuAgAA+gIAAAEDAAAOAwAAEwMAABgDAAAmAwAAKwMAADkDAAA9AwAATgMAAGUDAABqAwAAhwMAAIwDAAClAwAArAMAALEDAAC6AwAAvgMAAM4DAADVAwAA5AMAAOoDAADxAwAA9QMAAPwDAAAJBAAAEQQAADIEAAA4BAAARQQAAE0EAABgBAAAZQQAAGkEAABvBAAAfAQAAIIEAACPBAAAlgQAAJkEAACeBAAApgQAAKoEAAC0BAAAtwQAAL0EAADBBAAAzQQAANIEAADcBAAA3wQAAOwEAADyBAAABwUAAAwFAAAZBQAAHwUAADUFAAA7BQAAVQUAAFgFAABjBQAAZwUAAH0FAACDBQAAngUAAKIFAAC6BQAAwgUAAOQFAADpBQAA+AUAAAAGAAAIBgAACwYAACEGAAAnBgAAQgYAAEYGAABTBgAAWQYAAH4GAACIBgAAlQYAAJkGAADDBgAA0QYAANgGAAD0BgAAAAcAAAsHAAAVBwAAGAcAACMHAAAnBwAANAcAADoHAABGBwAASQcAAFMHAABWBwAAZgcAAGoHAAB2BwAAeQcAAHwHAACFBwAAigcAAJkHAACfBwAAxQcAAM8HAADgBwAA6AcAAAUIAAAKCAAAHwgAACsIAAA2CAAAOQgAAEMIAABGCAAAUAgAAFMIAABtCAAAcggAAH0IAACBCAAAjAgAAJAIAACaCAAAnQgAAMgIAADYCAAAAQkAABwJAAA/CQAARwkAAHMJAAB7CQAAiQkAAI0JAACsCQAAsAkAALMJAAC/CQAAxwkAAN4JAADjCQAA8QkAAPoJAAAHCgAAEAoAABQKAAAoCgAANwoAAEQKAABICgAAVgoAAFsKAABlCgAAagoAAHwKAACFCgAAqgoAALIKAADOCgAA0goAAPoKAAACCwAAJAsAAC0LAABSCwAAVgsAAHsLAAB/CwAAogsAAKcLAAC4CwAA3gsAAOcLAAD3CwAA/gsAABEMAAAbDAAANQwAAGYMAABqDAAAbwwAAIcMAACNDAAAjgwAAJEMAACYDAAAnAwAAKcMAACzDAAAvwwAAMYMAADNDAAA0gwAANoMAADbDAAA4AwAAOMMAADrDAAA8QwAAPQMAAAADQAACQ0AABMNAAAdDQAAJw0AACkNAAAsDQAANA0AADkNAABBDQAARA0AAEcNAABPDQAAVA0AAGINAABxDQAAoA0AAKQNAADIDQAAyg0AAMwNAADQDQAA1A0AANkNAADeDQAA4g0AAO8NAAAWDgAAIA4AACQOAAAoDgAALQ4AADIOAABYDgAAXw4AAGAOAACFDgAAiA4AAIsOAACPDgAAkg4AAJgOAACeDgAApQ4AAKoOAACrDgAAtA4AALgOAAC+DgAAzw4AANUOAADdDgAA3w4AAOYOAADrDgAA8Q4AAPgOAAAEDwAAEA8AAB4PAAAtDwAAMg8AADoPAABfDwAAYg8AAGYPAABsDwAAeQ8AAIMPAACLDwAAkg8AAJoPAACkDwAArA8AALUPAAC6DwAAxQ8AAM4PAADPDwAA2A8AANwPAADmDwAA7g8AAPkPAAAEEAAADBAAABYQAAA8EAAARxAAAEoQAABMEAAAaBAAAGwQAABwEAAAkRAAAJUQAACXEAAAmBAAAJ4QAAChEAAApRAAAKkQAACrEAAAtBAAALUQAADBEAAA0BAAANYQAADbEAAA4RAAAOgQAADqEAAA8BAAAPYQAAD+EAAABxEAAA4RAAASEQAAGREAADYRAAA6EQAARREAAFARAABZEQAAZxEAAHIRAAB9EQAAhxEAAJARAACVEQAAnREAAKsRAACvEQAAuhEAAMERAADgEQAA7BEAAO8RAADyEQAA9hEAAPkRAAD8EQAA/xEAAAYSAAAMEgAAJhIAACkSAAAtEgAAOxIAAEQSAABJEgAAThIAAFYSAABgEgAAZxIAAG0SAAB4EgAAfhIAAJISAACaEgAAnRIAAKcSAACsEgAAtxIAAL8SAADEEgAAyRIAANISAADTEgAA3BIAAOESAADlEgAA7RIAAPISAAD2EgAAARMAAAUTAAANEwAAExMAABwTAAAeEwAAIBMAACYTAAAvEwAAMRMAADgTAABBEwAARRMAAEwTAABPEwAAURMAAFcTAABcEwAAXRMAAGETAABnEwAAbBMAAHETAABzEwAAdxMAAH4TAACDEwAAhBMAAIgTAACNEwAAlBMAAJUTAACdEwAAoBMAAKcTAACvEwAAtRMAALgTAADBEwAAzBMAANcTAADkEwAA7xMAAPoTAAD/EwAADxQAABIUAAAWFAAALRQAAEEUAABLFAAATxQAAFUUAABYFAAAYhQAAHMUAACBFAAAhBQAAIUUAACPFAAAkBQAAJcUAACbFAAApBQAAK4UAAC9FAAAzBQAANgUAADeFAAA6hQAAPAUAAABFQAAExUAACoVAABBFQAASBUAAFQVAABhFQAAcxUAAIIVAACWFQAAqxUAAMUVAADKFQAA1RUAAOIVAADmFQAA7BUAAPEVAAD4FQAA/xUAAA0WAAAOFgAAEhYAABsWAAAgFgAAKBYAADMWAAA4FgAAPRYAAEIWAABHFgAATxYAAFYWAABhFgAAZxYAAGsWAABvFgAAcxYAAHkWAACCFgAAiBYAAJEWAACaFgAAohYAAKwWAAC2FgAAvxYAAMwWAADWFgAA3BYAAOQWAADvFgAA+hYAAAUXAAAXFwAAIBcAACoXAAA9FwAAQhcAAEgXAABMFwAAThcAAFAXAABSFwAAZBcAAGcXAABrFwAAcxcAAKEXAACxFwAAwRcAANAXAADeFwAA4BcAAOQXAADqFwAA/BcAAAUYAAAHGAAAERgAABgYAAAdGAAAHhgAACQYAAAuGAAANxgAAEIYAABKGAAAUhgAAFwYAABjGAAAaBgAAHIYAAB+GAAAhhgAAI8YAACUGAAAmRgAAJ4YAACkGAAAqhgAAM8YAADUGAAA2hgAAOAYAADzGAAA+hgAAAAZAAAGGQAADBkAABIZAAAYGQAAJBkAAFIZAADCHAAAzRwAANwcAADgHAAA8hwAAPMcAAAqHQAAPx0AAEQdAABNHQAAXx0AAGgdAAB8HQAAfx0AAIkdAACMHQAAlh0AAKkdAACyHQAAxR0AANgdAADsHQAAAR4AAAYeAAAcHgAAMB4AADUeAAA9HgAATx4AAFoeAABgHgAAdx4AAHweAACJHgAAkx4AAJseAACkHgAArR4AALMeAADAHgAAxx4AANIeAADdHgAA7B4AAPYeAAD/HgAAAR8AAAkfAAASHwAAGh8AACIfAAAoHwAANB8AAD0fAABKHwAATx8AAFgfAABcHwAAaR8AAHMfAAB0HwAAgx8AAJQfAACYHwAAnR8AAKYfAACrHwAAtB8AALkfAADDHwAAyh8AANYfAADbHwAA5B8AAOkfAADrHwAA9B8AAPYfAAD7HwAADiAAABIgAAAYIAAAGiAAAC0gAAAyIAAAPSAAAEIgAABKIAAAWiAAAF0gAABqIAAAdyAAAIEgAACEIAAAjCAAAJcgAACaIAAApSAAAKsgAACyIAAAvyAAAMIgAADFIAAA0SAAANYgAADfIAAA5yAAAO8gAAD5IAAAJiEAACwhAAA1IQAAPCEAAD8hAABHIQAATyEAAFQhAABsIQAAcyEAAJEhAACxIQAAuiEAAL4hAADJIQAA2CEAAPYhAAD8IQAAGiIAAB0iAAAeIgAAIyIAACYiAAApIgAALyIAADIiAAA1IgAAOiIAAGEiAABoIgAAcCIAAHciAAB7IgAAkSIAAJYiAACfIgAApiIAAKoiAAC0IgAAvyIAAMMiAADGIgAA4iIAAOYiAADrIgAA7SIAAPEiAAD2IgAA+yIAAAQjAAAKIwAAFCMAABwjAAAlIwAAKyMAAC4jAAAzIwAAQiMAAE8jAABZIwAAWyMAAGMjAAB9IwAAhSMAAIsjAACRIwAAnSMAAKkjAADLIwAA3iMAAOMjAAD2IwAA+iMAAAEkAAAHJAAADSQAABYkAAAdJAAAISQAACYkAAAnJAAALSQAADQkAAA5JAAAPyQAAEIkAABIJAAATCQAAFAkAABVJAAAWiQAAF0kAABhJAAAZCQAAGskAAByJAAAdiQAAHskAAB/JAAAgiQAAIYkAACMJAAAkiQAAJwkAACjJAAApiQAAK0kAACyJAAAuCQAALwkAADAJAAAxCQAAMgkAADLJAAA0CQAANIkAADWJAAA4CQAAOQkAADtJAAA9iQAAP4kAAALJQAAGiUAACMlAAAsJQAANyUAAEQlAABJJQAAWCUAAGglAABuJQAAdSUAAH0lAACIJQAAkyUAAKclAAC1JQAAwyUAAMclAADNJQAA8CUAAPolAAAdJgAAMyYAADsmAAA/JgAASyYAAFImAABXJgAAcyYAAHUmAACKJgAAlyYAAJkmAACjJgAArCYAALcmAADQJgAA5CYAAPYmAAAFJwAACCcAAAwnAAAXJwAAGycAAB8nAAAlJwAAKScAAC0nAAAuJwAAPScAAEcnAABNJwAAbycAAHUnAAB9JwAAoCcAAKMnAADNJwAA1ScAAN0nAADkJwAABSgAAAsoAAAUKAAAHygAACsoAAAyKAAAPSgAAE4oAABeKAAAfigAAIUoAACWKAAAnygAAKooAAC8KAAA1igAAOAoAADwKAAADykAABIpAAAjKQAAOikAAEQpAABNKQAAVikAAGgpAABwKQAAdCkAAIYpAACPKQAAmykAALYpAAC5KQAA1CkAAPEpAAD1KQAA/ykAAAAqAAABKgAABSoAAAwqAAAVKgAAGCoAABkqAAAcKgAAJCoAAC4qAAAvKgAAMioAADUqAAA9KgAAQyoAAFMqAABZKgAAXCoAAF8qAABlKgAAaCoAAG4qAABxKgAAdioAAHwqAAB+KgAAgSoAAIcqAACkKgAAqSoAAK0qAACxKgAAtyoAALoqAADAKgAAyCoAAM8qAADWKgAA8ioAAPwqAAAbKwAAJisAACwrAAAxKwAANCsAADorAABAKwAARisAAEorAABRKwAAWCsAAFwrAABjKwAAZysAAGgrAABsKwAAcSsAAHYrAAB6KwAAjSsAAJorAACeKwAArSsAALUrAAC5KwAAwSsAAOArAADkKwAA7isAAPYrAAAALAAACywAAA8sAAAVLAAAGCwAAB0sAAAhLAAALSwAADQsAAA2LAAAOywAAD4sAABDLAAASiwAAE8sAABtLAAAcCwAAHMsAAB1LAAAeSwAAH0sAACFLAAAiCwAAIssAACTLAAAnywAAK8sAAC0LAAAuSwAANYsAADuLAAA8iwAAPgsAAAKLQAADS0AABUtAAAeLQAAIi0AACotAAAzLQAANy0AAD4tAABBLQAARC0AAEwtAABULQAAVy0AAFotAABgLQAAYy0AAGYtAABsLQAAby0AAHUtAAB6LQAAgS0AAIktAACmLQAAzS0AANUtAADeLQAA7C0AAPQtAAD5LQAAAi4AAAguAAAYLgAAGy4AACIuAAAlLgAAKC4AADEuAAA0LgAAPi4AAE8uAABgLgAAdC4AAHsuAAB+LgAAgS4AAIQuAACKLgAAjS4AAJMuAACVLgAAmC4AAJsuAACfLgAAvi4AAMIuAADILgAAzC4AANUuAADZLgAA3i4AAOEuAADmLgAA6C4AAOwuAAADLwAADC8AABEvAAAaLwAAHy8AACkvAAAyLwAAUi8AAF8vAAB6LwAAhC8AAIwvAACVLwAAmy8AAL8vAADGLwAA0i8AAOQvAADsLwAA9C8AAAEwAAALMAAAFTAAABowAAA7MAAAPTAAAEIwAABSMAAAZzAAAHEwAACEMAAAiDAAAKQwAACvMAAAuTAAALswAADBMAAAxDAAANEwAADUMAAA2zAAAOQwAADsMAAA9DAAAP4wAAAAMQAACDEAABcxAAAgMQAALzEAAEoxAABVMQAAZzEAAHwxAACAMQAAijEAAJgxAACkMQAAsjEAALwxAADRMQAA2TEAAOcxAADyMQAA9jEAABAyAAAWMgAAHDIAACAyAAAoMgAAMDIAADsyAABDMgAASzIAAFMyAABXMgAAXjIAAGYyAABwMgAAeDIAAIAyAACLMgAAkjIAAJ0yAACoMgAAtzIAAL8yAADEMgAAyTIAAMwyAADcMgAA4TIAAOQyAADqMgAA9DIAAPwyAAAAMwAACDMAAAwzAAAnMwAAOjMAAEwzAABdMwAAZTMAAGozAAB6MwAAkTMAAKczAAC6MwAAzDMAAOEzAADyMwAA+jMAABg0AAAbNAAAJzQAADA0AAAzNAAAWTQAAGU0AABpNAAAijQAAJE0AACeNAAAwjQAAMg0AADRNAAA2zQAAOU0AADsNAAA9DQAAPs0AAABNQAACzUAAA81AAAUNQAAKDUAADc1AAA/NQAARjUAAFE1AABaNQAAbDUAAHQ1AAB8NQAAkTUAAJk1AACiNQAApzUAALI1AAC7NQAA1DUAAOE1AADnNQAA+zUAABM2AAAbNgAAJTYAAC42AAA2NgAAPTYAAEU2AABRNgAAVzYAAGI2AABrNgAAeTYAAIg2AACaNgAAqDYAAK42AAC3NgAAyTYAANg2AADpNgAA7DYAAPc2AAABNwAAGjcAACM3AAAtNwAAMjcAADU3AAA/NwAASDcAAFA3AABjNwAAbTcAAHc3AACKNwAAmDcAAKo3AADINwAA2jcAAOg3AADxNwAA8zcAAP03AAAGOAAAEDgAABg4AAAbOAAAKjgAADM4AAA3OAAAQzgAAEk4AABROAAAXDgAAGQ4AAByOAAAjTgAAJk4AACiOAAApTgAAKo4AACwOAAAxDgAAMY4AADVOAAA3DgAAOw4AAD4OAAABzkAABM5AAAjOQAAKjkAAC05AAA4OQAAQzkAAFI5AABZOQAAXDkAAGU5AABnOQAAajkAAG45AAByOQAAfjkAAIk5AACUOQAAnzkAAKk5AAC3OQAA1jkAANw5AADhOQAA6zkAAPU5AAD5OQAA/zkAAAk6AAAQOgAAHToAAC06AAAxOgAAOToAAEY6AABsOgAAczoAAHo6AACAOgAAiToAAI06AACPOgAAlToAAJg6AACgOgAApDoAAKo6AACwOgAAujoAAMM6AADIOgAAzzoAANI6AADYOgAA4DoAAAA7AAAGOwAAEDsAABw7AAAjOwAAKjsAAEg7AABOOwAAVTsAAF87AABlOwAAazsAAHM7AAB7OwAAgzsAAIg7AACOOwAAmjsAAJ87AACkOwAArTsAALs7AADLOwAAzjsAAOw7AAD0OwAA/DsAAAA8AAAHPAAACjwAACk8AAAvPAAAMzwAADs8AAA/PAAARDwAAEs8AABWPAAAYzwAAGU8AABnPAAAfTwAAIk8AACXPAAAozwAAKo8AACxPAAAvDwAAMc8AADQPAAA2TwAAOA8AADvPAAAFj0AAB89AAA5PQAAQT0AAE09AABSPQAAVj0AAF09AABhPQAAaD0AAHE9AAB5PQAAgj0AAIc9AACLPQAAkz0AAJs9AACrPQAAtj0AAMM9AADLPQAA1D0AAN49AADlPQAA7T0AAPU9AAD8PQAABz4AAAk+AAAUPgAAJT4AACo+AAAyPgAAOj4AAFE+AABgPgAAcT4AAH8+AACDPgAAjD4AAI4+AACcPgAArD4AALg+AADAPgAAyT4AANE+AADSPgAA2j4AAOU+AADtPgAA9D4AAAM/AAAaPwAAKT8AADM/AAA+PwAASD8AAFI/AABePwAAbT8AAHY/AACCPwAAiz8AAJ0/AACmPwAAsz8AALs/AADEPwAA0D8AANg/AADnPwAA+z8AAAVAAAARQAAAH0AAACxAAAA1QAAAQEAAAE5AAABRQAAAU0AAAGxAAABwQAAAdEAAAHtAAACDQAAAiUAAAJNAAACWQAAAm0AAALlAAADAQAAA00AAANtAAADgQAAA+EAAAPxAAAAbQQAAIUEAACVBAAAqQQAAOEEAAEJBAABEQQAARUEAAEtBAABPQQAAU0EAAFtBAABhQQAAZUEAAGlBAABsQQAAdUEAAHpBAACBQQAAiEEAAJJBAACZQQAAnUEAAKRBAACrQQAAs0EAAL1BAADDQQAAzEEAANRBAADbQQAA4kEAAOVBAADqQQAA8EEAAPVBAAD/QQAAA0IAAAZCAAAOQgAAEUIAADJCAAA4QgAAPUIAAEFCAABJQgAAUkIAAF1CAABlQgAAaUIAAG1CAAB5QgAAfUIAAJNCAACjQgAArkIAALZCAAC8QgAAxUIAAMpCAADVQgAA3kIAAORCAADnQgAA70IAAPRCAAD3QgAAAEMAAAhDAAAJQwAAFkMAABtDAAAlQwAAMkMAAEVDAABHQwAAV0MAAFtDAABfQwAAZkMAAIBDAACDQwAAikMAAJRDAACgQwAAvUMAAMVDAADOQwAA1kMAANtDAADhQwAA6UMAAO1DAAD0QwAA/0MAACREAAAtRAAAUkQAAFZEAAB+RAAAh0QAAItEAACyRAAAukQAAL1EAADFRAAAx0QAAMxEAADQRAAA10QAAPVEAAD+RAAAAUUAAAVFAAAJRQAAEkUAABtFAAAmRQAALUUAADZFAAA6RQAAQEUAAEJFAABKRQAAUkUAAFpFAABeRQAAY0UAAGZFAACMRQAAlUUAAJ9FAACkRQAArkUAALJFAAC6RQAAxkUAAM1FAADYRQAA30UAAOlFAADzRQAA90UAAP1FAAAFRgAACUYAABBGAAAYRgAAHkYAACNGAAAsRgAAMkYAADZGAAA+RgAASkYAAFRGAABgRgAAakYAAG9GAAB2RgAAf0YAAINGAACKRgAAlEYAAJ5GAAClRgAArEYAALRGAAC+RgAAyUYAANRGAADZRgAA5UYAAO1GAADxRgAA9UYAAPlGAAAERwAAC0cAABNHAAAbRwAAJEcAAChHAAAsRwAANkcAADtHAABFRwAAUEcAAFVHAABbRwAAYkcAAGhHAABvRwAAd0cAAIBHAACIRwAAjEcAAJFHAACaRwAAoUcAAKVHAACpRwAAsUcAALpHAAC/RwAAxUcAAMxHAADVRwAA30cAAO5HAAD4RwAA/EcAAAJIAAAMSAAAEkgAABlIAAAgSAAAKEgAAC1IAAA1SAAAP0gAAENIAABLSAAAUUgAAFlIAABiSAAAbUgAAHlIAACBSAAAikgAAJFIAACZSAAApEgAALBIAAC3SAAAuUgAAMBIAADCSAAAzkgAANpIAADmSAAA7kgAAPRIAAD8SAAAB0kAABBJAAAZSQAAI0kAACpJAAAuSQAAOEkAAEFJAABQSQAAWEkAAGRJAABzSQAAeUkAAIVJAACUSQAAnEkAAKlJAAC1SQAAwEkAAMlJAADVSQAA4EkAAOpJAAD1SQAAAUoAABBKAAAhSgAAKEoAACxKAAA3SgAAPkoAAERKAABKSgAATkoAAFRKAABvSgAAeEoAAIFKAACMSgAAkUoAAJtKAACgSgAAokoAAKpKAACxSgAAvEoAAMNKAADJSgAA0EoAANZKAAD5SgAAA0sAABNLAAAaSwAAJEsAAEZLAABNSwAAVksAAHJLAAB2SwAAlksAAJtLAACjSwAAp0sAAKxLAACySwAAvUsAAMJLAADISwAAy0sAANJLAADbSwAA4ksAAOZLAADtSwAA9UsAAP9LAAAMTAAAE0wAABhMAAAeTAAAJUwAAC1MAAA0TAAAOkwAAEBMAABETAAAS0wAAE9MAABSTAAAWUwAAFxMAABrTAAAd0wAAHtMAACFTAAAkEwAAJdMAACbTAAApUwAAKtMAAC1TAAAv0wAAMZMAADMTAAAz0wAANdMAADiTAAA6UwAAOxMAADyTAAA+EwAAP9MAAAITQAAEk0AABdNAAAiTQAAJE0AADBNAAA8TQAASU0AAFdNAABgTQAAaE0AAG9NAAB3TQAAfE0AAIJNAACJTQAAkU0AAJtNAACoTQAAr00AALhNAAC9TQAAx00AAMtNAADPTQAA6k0AAOxNAADyTQAAAE4AABJOAAAiTgAANk4AAEFOAABITgAATE4AAFhOAABhTgAAZk4AAG1OAABzTgAAd04AAIBOAACETgAAj04AAJlOAACgTgAArE4AALtOAADGTgAA1U4AAN1OAADiTgAA504AAO1OAAD5TgAAAk8AAA9PAAAUTwAAG08AACJPAAAtTwAANU8AADxPAABGTwAASk8AAE9PAABWTwAAWk8AAGJPAABtTwAAeE8AAH9PAACATwAAhk8AAJFPAACcTwAAo08AAK9PAAC3TwAAw08AAMtPAADaTwAA508AAPJPAAD+TwAABVAAAAlQAAANUAAAD1AAABNQAAAXUAAAH1AAACZQAAAuUAAAOFAAAEBQAABGUAAATFAAAFJQAABdUAAAZFAAAG5QAAB0UAAAg1AAAIpQAACRUAAAnVAAAKdQAAC0UAAAt1AAAL1QAADGUAAAz1AAANlQAADdUAAA5VAAAO1QAAD0UAAA+FAAAAJRAAAPUQAAGlEAAB9RAAAnUQAALVEAADRRAAA+UQAAX1EAAG5RAABwUQAAd1EAAH5RAACOUQAAsVEAALtRAADEUQAAzVEAANRRAADYUQAA71EAAPNRAAD4UQAA/1EAAAhSAAAQUgAAE1IAABtSAAAdUgAAJVIAACtSAAAuUgAAN1IAADpSAAA+UgAASlIAAFNSAABZUgAAXVIAAGJSAABnUgAAblIAAHdSAAB/UgAAiFIAAI9SAACSUgAAtVIAALdSAAC9UgAA4VIAAApTAAAzUwAAOlMAAGVTAABqUwAAk1MAAJ9TAACjUwAAy1MAANJTAAD9UwAAH1QAAChUAAAzVAAAOFQAADpUAABAVAAATFQAAFNUAABZVAAAaFQAAHlUAACGVAAAklQAAJdUAACdVAAAplQAAKxUAAC4VAAAxFQAAMxUAADWVAAA7VQAAPtUAAAFVQAAElUAACRVAAAuVQAAPFUAAEBVAABQVQAAVlUAAGJVAABoVQAAeVUAAIBVAACIVQAAlVUAAKxVAAC0VQAAvFUAAMVVAADaVQAA6lUAAPxVAAAGVgAAEVYAACZWAAApVgAANVYAAE1WAABSVgAAa1YAAHVWAAB2VgAAfVYAAJZWAACxVgAAt1YAAM5WAADSVgAA7VYAAPBWAAAUVwAAGFcAAD1XAABCVwAAR1cAAE1XAABbVwAAYVcAAGdXAABrVwAAc1cAAHpXAAB/VwAAhlcAAKxXAACyVwAAtlcAAOFXAADkVwAA6VcAAPBXAADyVwAA9FcAACBYAAAqWAAAL1gAADRYAAA7WAAAQVgAAExYAABYWAAAXFgAAGRYAABtWAAAeVgAAIFYAACJWAAAjlgAAJhYAACgWAAArVgAANlYAADeWAAA5lgAAPBYAAD5WAAABFkAADJZAAA5WQAAXlkAAGZZAABuWQAAcVkAAHdZAAB6WQAAfVkAAIZZAACQWQAAlFkAAJ9ZAACkWQAArFkAALlZAAC/WQAAw1kAANNZAAD1WQAA91kAAARaAAARWgAAF1oAAB9aAAAnWgAAN1oAAERaAABLWgAATloAAFpaAABdWgAAaVoAAGxaAAByWgAAfloAAIpaAACSWgAAn1oAAKxaAACyWgAAuFoAAL1aAADAWgAAxVoAAMhaAADLWgAAzloAANJaAADbWgAA5FoAAOdaAADrWgAACVsAAA1bAAAVWwAAHlsAACdbAAA0WwAAOlsAAEFbAABEWwAASlsAAFBbAABWWwAAWVsAAGJbAABrWwAAclsAAHpbAACAWwAAilsAAK5bAAC7WwAAwFsAANNbAADjWwAA6FsAAO5bAAD7WwAAJFwAADJcAABYXAAAaFwAAGxcAAB1XAAAe1wAAI1cAACVXAAAuFwAAL5cAADAXAAAx1wAAONcAADmXAAA7VwAAPVcAAAAXQAACl0AAB9dAAAmXQAAMl0AADddAAA+XQAAQl0AAEpdAABRXQAAXF0AAGNdAABoXQAAfl0AAIVdAACMXQAAkV0AAJxdAAC2XQAAvV0AAMRdAADgXQAA5V0AAOtdAADwXQAA9V0AAPldAAD+XQAACV4AABheAAAoXgAAMl4AADReAAA4XgAAU14AAHNeAAB6XgAAgV4AAIleAACgXgAAql4AAMReAADOXgAA014AAPFeAAD3XgAAFV8AABtfAAAkXwAAM18AADVfAAA+XwAAS18AAGhfAACFXwAAkF8AAJRfAACvXwAAsl8AALVfAAC6XwAAwF8AAMZfAADQXwAA218AAPxfAAACYAAADGAAACxgAAAyYAAAPWAAAENgAABJYAAAUGAAAFdgAABdYAAAYWAAAGtgAABvYAAAdmAAAIxgAACPYAAAlWAAAJtgAACgYAAAp2AAAK5gAACyYAAAtmAAANJgAADVYAAA22AAAOFgAADrYAAA82AAAPlgAAABYQAACGEAABFhAAAbYQAAJGEAAC5hAAA0YQAAOWEAAD1hAAA/YQAARmEAAEthAABRYQAAVmEAAFthAABgYQAAZmEAAGxhAABxYQAAeGEAAH9hAACFYQAAi2EAAJNhAACYYQAAnmEAAKRhAACsYQAAtmEAAL1hAADFYQAAy2EAANJhAADaYQAA4mEAAP1hAAAFYgAAD2IAABtiAAAfYgAAIWIAACdiAAAuYgAASmIAAFxiAABlYgAAcWIAAH5iAACHYgAAk2IAAJxiAAChYgAAumIAALtiAAC9YgAAw2IAAMZiAADOYgAA2mIAAN5iAADjYgAA8WIAAPxiAAAAYwAACmMAABVjAAAgYwAAMGMAADNjAAA7YwAAQmMAAFFjAABXYwAAZWMAAG5jAAB5YwAAg2MAAI1jAACUYwAAm2MAAJ5jAACmYwAArWMAALJjAAC2YwAAu2MAAL9jAADGYwAA7GMAAPljAAACZAAABWQAAA1kAAAjZAAAMGQAADRkAAA+ZAAASGQAAFNkAABXZAAAcWQAAHZkAAB9ZAAAhWQAAJJkAACmZAAAwWQAANNkAAAGZQAADWUAABZlAAAfZQAAKGUAAC5lAAA2ZQAAWmUAAF5lAABrZQAAgmUAAJ1lAACkZQAAqmUAALZlAADUZQAA22UAAOVlAADvZQAA82UAAPtlAAAFZgAADWYAABNmAAAqZgAAM2YAADVmAABEZgAAWWYAAGxmAACGZgAAomYAALFmAADFZgAA2WYAAOlmAAD9ZgAADWcAACBnAAA4ZwAAUGcAAGBnAABpZwAAd2cAAIFnAACOZwAAnWcAAKtnAAC1ZwAAxGcAANVnAADhZwAA7mcAAAhoAADicAAAM3IAADlyAAA/cgAARXIAAEtyAABRcgAAV3IAAF1yAABjcgAAaXIAAG9yAAB1cgAAe3IAAIFyAACHcgAAjXIAAJNyAACZcgAAn3IAAKVyAACrcgAAsXIAALdyAAC9cgAAw3IAAMlyAADPcgAA1XIAANtyAADhcgAA53IAAO1yAADzcgAA+XIAAP9yAAAFcwAAC3MAABFzAAAXcwAAHXMAACNzAAApcwAAL3MAADVzAAA7cwAAQXMAAEdzAABNcwAAU3MAAFlzAABfcwAAZXMAAGtzAABxcwAAd3MAAH1zAACDcwAAiXMAAI9zAACVcwAAm3MAAKFzAACncwAArXMAALNzAAC5cwAAv3MAAMVzAADLcwAA0XMAANdzAADdcwAA43MAAOlzAADvcwAA9XMAAPtzAAABdAAAB3QAAA10AAATdAAAGXQAAB90AAAldAAAK3QAADF0AAA3dAAAPXQAAEN0AABJdAAAT3QAAFV0AABbdAAAYXQAAGd0AABtdAAAc3QAAHl0AAB/dAAAhXQAAIt0AACRdAAAl3QAAJ10AACjdAAAqXQAAK90AAC1dAAAu3QAAMF0AADHdAAAzXQAANN0AADZdAAA33QAAOV0AADrdAAA8XQAAPd0AAD9dAAAA3UAAAl1AAAPdQAAFXUAABt1AAAhdQAAJ3UAAC11AAAzdQAAOXUAAD91AABFdQAAS3UAAFF1AABXdQAAXXUAAGN1AABpdQAAb3UAAHV1AAB7dQAAgXUAAId1AACNdQAAk3UAAJl1AACfdQAApXUAAKt1AACxdQAAt3UAAL11AADDdQAAyXUAAM91AADVdQAA23UAAOF1AADndQAA7XUAAPN1AAD5dQAA/3UAAAV2AAALdgAAEXYAABd2AAAddgAAI3YAACl2AAAvdgAANXYAADt2AABBdgAAR3YAAE12AABTdgAAWXYAAF92AABldgAAa3YAAHF2AAB3dgAAfXYAAIN2AACJdgAAj3YAAJV2AACbdgAAoXYAAKd2AACtdgAAs3YAAPx2AAA2dwAAPncAAFR3AABtdwAAe3cAAIF3AACadwAApHcAALF3AADBdwAA8HcAAPp3AAAEeAAAEXgAAB54AAAueAAAOHgAAEJ4AABSeAAAXHgAAGx4AAB6eAAAjngAAJt4AACoeAAAuXgAAMZ4AAD1eAAADHkAABZ5AAAeeQAAKHkAADl5AABBeQAAZ3kAAHh5AACIeQAAw3kAAOJ5AAD5eQAAH3oAACx6AAA9egAATXoAAHJ6AACFegAAknoAAKJ6AAC/egAAyXoAAOB6AAAdewAAKnsAAFt7AABlewAAdXsAAIt7AACiewAAu3sAANR7AADqewAAIXwAADh8AABdfAAAZ3wAAKp8AADJfAAA2nwAAP18AAAWfQAAUH0AAGx9AACAfQAAGn4AAKB+AACxfgAAvH4AAP9+AAAlfwAARH8AAFR/AABhfwAAen8AAId/AAC1fwAA3X8AAPN/AAAGgAAAH4AAADuAAABsgAAAiIAAAJ6AAADAgAAA4oAAABOBAAAggQAASIEAAGeBAACUgQAAyIEAAE2CAABvggAAjoIAAKeCAADDggAA34IAAC6DAABTgwAAbIMAAHyDAACJgwAApYMAALWDAADOgwAA6oMAAAaEAAAohAAASoQAAGCEAABzhAAAlYQAAKWEAADAhAAA34QAAPWEAAAChQAAG4UAAD6FAABLhQAAXoUAAKGFAADMhQAA+oUAABOGAAA6hgAAYoYAAIGGAACkhgAAwoYAAOeGAAAChwAAG4cAADuHAABbhwAAd4cAAJOHAAC5hwAA74cAAAiIAAATiAAAHIgAACWIAAAviAAAOIgAAEGIAABLiAAAVIgAAF2IAABmiAAAcIgAAHqIAACEiAAAjogAAJiIAACiiAAArIgAALaIAADAiAAAyogAANSIAADeiAAA6IgAAPGIAAD6iAAAA4kAAAyJAAAWiQAAH4kAACiJAAAxiQAAOokAAEOJAABMiQAAVYkAAF6JAABniQAAcIkAAHmJAACCiQAAi4kAAJSJAACdiQAApokAALCJAAC6iQAAxIkAAM6JAADXiQAA4IkAAOqJAADziQAA/IkAAAWKAAAOigAAF4oAACCKAAApigAAMooAADuKAABEigAATYoAAFaKAABgigAAaYoAAHKKAAB7igAAhIoAAI2KAACWigAAn4oAAKiKAACxigAAuooAAMOKAADMigAA1YoAAN6KAADnigAA8IoAAPqKAAAEiwAADYsAABaLAAAfiwAAKIsAADGLAAA6iwAAQ4sAAEyLAABWiwAAYIsAAGqLAAB0iwAAfYsAAIaLAACPiwAAmIsAAKGLAACqiwAAs4sAALyLAADFiwAAzosAANeLAADgiwAA6YsAAPKLAAD7iwAABIwAAA2MAAAWjAAAH4wAACiMAAAxjAAAOowAAEOMAABMjAAAVYwAAF6MAABnjAAAcIwAAHmMAACCjAAAi4wAAJSMAACdjAAApowAAK+MAAC4jAAAwYwAAMqMAADTjAAA3IwAAOWMAADujAAA94wAAACNAAAJjQAAEo0AABuNAAAljQAALo0AADeNAABAjQAASY0AAFKNAABcjQAAZo0AAHCNAAB5jQAAgo0AAIuNAACUjQAAnY0AAKaNAACvjQAAuI0AAMGNAADLjQAA1I0AAN6NAADnjQAA8I0AAPmNAAACjgAAC44AABSOAAAdjgAAJo4AAC+OAAA4jgAAQY4AAEqOAABTjgAAXI4AAGWOAABujgAAd44AAICOAACJjgAAko4AAJuOAACkjgAArY4AALaOAAC/jgAAyI4AANGOAADajgAA444AAOyOAAD1jgAA/o4AAAePAAAQjwAAGY8AACKPAAArjwAANI8AAD2PAABGjwAAT48AAFiPAABhjwAAao8AAHOPAAB8jwAAhY8AAI6PAACXjwAAoI8AAKmPAACyjwAAu48AAMSPAADNjwAA1o8AAN+PAADojwAA8Y8AAPqPAAADkAAADJAAABWQAAAekAAAJ5AAADCQAAA5kAAAQpAAAEuQAABUkAAAXZAAAGaQAABvkAAAeJAAAIGQAACKkAAAk5AAAJyQAAClkAAArpAAALeQAADAkAAAyZAAANKQAADbkAAA5JAAAO2QAAD2kAAA/5AAAAiRAAARkQAAGpEAACORAAAskQAANZEAAD6RAABHkQAAUJEAAFmRAABikQAAa5EAAHSRAAB9kQAAhpEAAI+RAACYkQAAoZEAAKmRAACykQAAu5EAAMSRAADNkQAA1pEAAN+RAADokQAA8ZEAAPqRAAADkgAADJIAABWSAAAekgAAJ5IAADCSAAA5kgAAQpIAAEuSAABUkgAAXZIAAGaSAABvkgAAeJIAAIGSAACKkgAAk5IAAJySAAClkgAArpIAALeSAADAkgAAyZIAANKSAADbkgAA5JIAAO2SAAD2kgAA/5IAAAiTAAARkwAAGpMAACOTAAAskwAANZMAAD6TAABHkwAAUJMAAFmTAABikwAAa5MAAHSTAAB9kwAAhpMAAI+TAACYkwAAoZMAAKqTAACzkwAAvJMAAMWTAADOkwAA15MAAOCTAADpkwAA8pMAAPuTAAAElAAADZQAABaUAAAflAAAKJQAADGUAAA6lAAAQ5QAAEyUAABVlAAAXpQAAGeUAABwlAAAeZQAAIKUAACLlAAAlJQAAJ2UAACmlAAAr5QAALiUAADBlAAAypQAANOUAAA4lQAAO5UAAEKVAABFlQAATJUAAE+VAABVlQAAXJUAAGOVAABmlQAAaZUAAGyVAABvlQAAtpUAAL2VAAAylgAAOZYAAD+WAABGlgAAfJYAAIKWAACIlgAAj5YAANKWAADVlgAA2JYAANuWAADhlgAA6JYAAPmXAAD/lwAABZgAAAyYAABOmAAAUZgAAFSYAABamAAAYZgAAGeYAABumAAAmJgAAJ6YAAClmAAA+JgAAPuYAAD+mAAABJkAAAuZAAASmQAAGZkAAFCZAABWmQAAXZkAAGOZAABqmQAAcJkAAHaZAAB8mQAAgpkAAImZAAACmgAACJoAAA6aAAAVmgAAdZoAAHuaAACCmgAAMJsAADObAAA5mwAAQJsAAEabAABMmwAAUpsAAFibAABfmwAAl5sAAJ2bAACkmwAA25sAAOGbAADomwAAYJwAAGacAABtnAAAc5wAAHmcAAB/nAAAhZwAAIycAADSnAAA2JwAAN+cAADlnAAA65wAAPGcAAD3nAAA/pwAAASdAAAKnQAAEJ0AABadAAAcnQAAI50AABieAAAbngAAIZ4AACieAABcngAAYp4AAGmeAACsngAAs54AALaeAAC9ngAAwJ4AAMOeAADJngAA0J4AANaeAADdngAA454AAOaeAADsngAA754AAPWeAAD7ngAAAp8AAAmfAAAQnwAAFp8AAB2fAAAknwAAK58AADKfAAA5nwAAb58AAHafAAB9nwAApp8AAK2fAAC0nwAAt58AALqfAADAnwAAx58AAM6fAADVnwAA2J8AAN+fAADmnwAA7Z8AAPSfAAD7nwAAZKAAAGugAAByoAAAeaAAAICgAAC5oAAAwKAAAMegAAD/oAAABqEAACChAAAnoQAALqEAADWhAAA8oQAAQ6EAAEqhAABRoQAAWKEAAF+hAABmoQAAaaEAAHChAAB3oQAAkKEAAJehAACeoQAApaEAAKyhAACzoQAAuqEAAMGhAADIoQAAz6EAAAuiAAASogAAVKIAAFuiAABeogAAZaIAAGyiAABzogAAeqIAAIGiAACIogAAj6IAAJaiAACdogAApKIAAKuiAACyogAAuaIAAISjAACLowAAkqMAAJmjAACgowAAp6MAAK6jAAC1owAAvKMAAMOjAADJowAA0KMAANejAADeowAA5aMAAOyjAADzowAA+qMAAAGkAAAIpAAAD6QAABakAAAdpAAAJKQAACukAAAypAAAOaQAAECkAABHpAAATqQAAFWkAABcpAAAY6QAAGqkAABxpAAA96QAAP6kAAAEpQAAC6UAADSlAAA7pQAAQqUAAEmlAABypQAAeaUAAIClAACppQAAsKUAALelAAC+pQAAxaUAAMylAADTpQAA2qUAAOGlAADopQAA76UAAPalAAD9pQAABKYAAAumAAASpgAAGaYAACCmAAAnpgAALqYAADWmAAA8pgAAQ6YAAEqmAABRpgAAWKYAAF+mAABlpgAAbKYAAHOmAAB6pgAAgaYAAIimAACPpgAAlqYAAJ2mAACkpgAAw6YAAMqmAADRpgAABqcAAA2nAAAUpwAAG6cAACKnAAAppwAAMKcAADenAAA+pwAARacAAEynAABTpwAAWqcAAH2nAACEpwAAi6cAAJKnAACZpwAAoKcAAKenAACupwAAtacAAMynAADTpwAA2qcAAOGnAADopwAA76cAAPanAAD9pwAABKgAAAuoAAASqAAAGagAACCoAAAnqAAALqgAADWoAAA8qAAAQ6gAAEqoAABRqAAAWKgAAF+oAABmqAAAbagAAHSoAAB7qAAAgqgAAImoAACQqAAAl6gAAJ6oAAClqAAArKgAALOoAAC6qAAAwagAAMeoAADOqAAA1agAANyoAADjqAAA6qgAAPGoAAD4qAAA/6gAAAapAAANqQAAFKkAABupAAAiqQAAKKkAAC+pAAA2qQAAPakAAESpAABLqQAAUqkAAFmpAABgqQAAZ6kAAG6pAAB1qQAAfKkAAIOpAACKqQAAkKkAAJepAACeqQAApakAAKypAACyqQAAuakAAMCpAADHqQAAzqkAANWpAADbqQAA4akAAOepAADtqQAA9KkAADyqAABCqgAATaoAAFOqAABeqgAAZKoAAG+qAAB1qgAAe6oAAIKqAACJqgAAvKoAAMOqAADJqgAAz6oAANaqAADdqgAA46oAAOqqAADwqgAA96oAAP6qAAA0qwAAO6sAAEGrAABIqwAATqsAAFWrAABbqwAAYasAAGerAABtqwAAc6sAAHqrAACBqwAAh6sAAI6rAACVqwAAm6sAAKKrAACpqwAAr6sAALarAAC9qwAA+KsAAP+rAAAGrAAADawAABSsAAAbrAAAWawAAGCsAABnrAAAaqwAAHGsAAB4rAAAf6wAAIasAACNrAAAlKwAAJusAACirAAAqawAAOesAADurAAA9awAAPysAAADrQAACq0AABGtAAAUrQAAG60AACKtAAAprQAAMK0AADetAAA+rQAARa0AAEytAAB+rQAAhK0AAIytAACTrQAAmq0AAKGtAACorQAAr60AALWtAAC8rQAAv60AAPKuAAD5rgAAQq8AAFivAAB9rwAAhK8AAIuvAACBsAAAhLAAAIewAACKsAAAjbAAAJSwAACXsAAAu7AAAMKwAADvsAAA9LAAAPuwAAAisQAAKrEAAC2xAAA1sQAAPLEAAGaxAABxsQAAeLEAAJqxAACksQAAr7EAALaxAADfsQAA5rEAAO2xAAD0sQAA+7EAAAKyAAAksgAAK7IAADKyAAA5sgAAQLIAAEeyAABOsgAAVbIAAFyyAADDsgAAyrIAANGyAADYsgAA37IAAOayAADtsgAA9LIAAPuyAAACswAACbMAABCzAAAXswAAHrMAACWzAAAsswAAM7MAADqzAABBswAASLMAAE+zAABWswAAXbMAAGSzAABrswAAcbMAAHizAAB/swAAhbMAALizAADcswAA4rMAAAi0AAAftAAAU7QAAFq0AABhtAAAt7QAAL60AADFtAAA9bQAAPu0AAD+tAAABbUAAAy1AAATtQAAP7UAAEa1AABNtQAAVLUAAFu1AACEtQAAh7UAAIq1AACRtQAAtLUAALu1AAAmtgAALbYAADm2AAA8tgAAQ7YAAEq2AABRtgAAVLYAAFu2AABitgAAabYAAHC2AACBtwAAmbcAAJy3AACztwAAurcAAAW4AAAMuAAAF7kAAB65AAAluQAAWrkAAF25AABkuQAAa7kAAG65AAB1uQAAsbkAALS5AAC3uQAAvrkAAMW5AAA4ugAAO7oAAEK6AABJugAAgroAAIW6AACIugAAj7oAAJa6AADcugAA37oAAOa6AADtugAA9LoAAPu6AAACuwAACbsAABC7AAAXuwAAHrsAACW7AAAsuwAAM7sAADq7AABBuwAASLsAAE+7AABWuwAAXbsAAGS7AABruwAAcrsAAHW7AAB8uwAAg7sAAIq7AACRuwAAmLsAAJ+7AACmuwAArbsAALS7AAC7uwAAwrsAAMm7AADQuwAA17sAAN67AADluwAA7LsAAPO7AAD6uwAAAbwAAAi8AAAPvAAAFrwAAB28AAAkvAAAK7wAADK8AAA5vAAAPLwAAEO8AABbvAAAYrwAAGe8AABsvAAAn7wAAKK8AACpvAAAtbwAALi8AAC/vAAAxrwAAM28AADUvAAA17wAAN68AAACvQAABb0AAAy9AAAjvQAAKr0AAEW9AABcvQAAY70AAKC9AACnvQAArr0AANe9AADevQAA5b0AAOy9AADvvQAA9r0AAP29AAAEvgAAC74AABK+AAAZvgAAIL4AACe+AAAuvgAANb4AADy+AABDvgAASr4AAFG+AACTvgAAlr4AAJ2+AACgvgAAp74AAK6+AAC1vgAAQb8AAEi/AABrvwAAn78AAKS/AADIvwAAz78AAKnAAACswAAAr8AAALLAAAC5wAAAwMAAAMfAAAC7wwAAwsMAAMnDAADQwwAA18MAAN7DAADlwwAA7MMAAPPDAAD2wwAA/cMAAADEAAADxAAACsQAABHEAAAYxAAAH8QAACbEAABPxAAAUsQAAFnEAABgxAAAZ8QAAGrEAABxxAAAdMQAAHfEAAB6xAAAgcQAAIjEAADRxAAA2MQAABDFAAATxQAAGsUAAEDFAABDxQAARsUAAE3FAABUxQAAV8UAAF7FAABlxQAAbMUAAHPFAAB2xQAAfcUAAITFAACHxQAAjsUAAJHFAACYxQAAn8UAAKbFAACtxQAAtMUAALvFAAC+xQAAxcUAAMzFAADTxQAA98UAAP7FAAAFxgAADMYAABPGAAAaxgAAIcYAACjGAAAvxgAAV8YAAF7GAABlxgAAlMYAAJvGAACixgAAqcYAALDGAAC3xgAAvsYAAMXGAAD+xgAABccAAAzHAAATxwAAGscAACHHAAAoxwAAK8cAADLHAAA5xwAAQMcAAEfHAABOxwAAVccAAFzHAABjxwAAascAAHHHAAB4xwAAf8cAAIbHAACNxwAAlMcAAJvHAACixwAAqccAALDHAAC3xwAAvscAAMXHAADMxwAA08cAANrHAADhxwAA6McAAO/HAAD2xwAA/ccAAATIAAALyAAAEsgAABnIAAAgyAAAJ8gAAC7IAAA1yAAAPMgAAEPIAABKyAAAUcgAAFjIAABfyAAAZsgAAG3IAAB0yAAAe8gAAILIAACJyAAAkMgAAJfIAACeyAAApcgAAKzIAACzyAAAusgAAMHIAADIyAAAy8gAANLIAADVyAAA3MgAAOPIAADqyAAA8cgAAPjIAAD/yAAABskAAA3JAAAUyQAAG8kAACLJAAApyQAAMMkAADfJAAA+yQAARckAAEzJAABTyQAAWskAAGHJAABoyQAAb8kAAHbJAAB9yQAAhMkAAIvJAACSyQAAmckAAKDJAACnyQAArskAALXJAAC8yQAAw8kAAMrJAADRyQAA2MkAAN/JAADmyQAA7ckAAPTJAAD7yQAAAsoAAAnKAAAQygAAF8oAAB7KAAAlygAALMoAADPKAAA6ygAAQcoAAEjKAABPygAAVsoAAF3KAABkygAAa8oAAHLKAAB5ygAAgMoAAIfKAACOygAAlcoAAJzKAACjygAAqsoAALHKAAC4ygAAv8oAAMbKAADNygAA1MoAANvKAADiygAA6coAAPDKAAD3ygAA/soAAAXLAAAMywAAE8sAABrLAAAhywAAxMsAAMfLAADKywAA0csAANjLAADfywAA5ssAAO3LAAD0ywAA+8sAAALMAADvzAAA9swAAP3MAAAezQAAJc0AACzNAAAzzQAAOs0AAEHNAABIzQAAT80AAFbNAABdzQAAZM0AAGvNAAByzQAAec0AAIDNAACHzQAAjs0AAJXNAABBzgAASM4AAEvOAABSzgAAWc4AAGDOAABnzgAAkM4AAJfOAACezgAAoc4AAKjOAACrzgAArs4AALXOAAC8zgAAw84AAMrOAADRzgAA2M4AAN/OAADmzgAA7c4AAPTOAAD7zgAAAs8AAAnPAAAQzwAAF88AAFPPAABWzwAAXc8AAGTPAABrzwAAcs8AAHnPAACAzwAAh88AAI7PAACVzwAAnM8AAKPPAACqzwAAsc8AALjPAAC/zwAAxs8AAM3PAADUzwAA288AAIfQAACK0AAAkdAAAJjQAADR0AAA1NAAANvQAADi0AAA6dAAAPDQAAD30AAA/tAAAAXRAAAM0QAAE9EAABrRAAAh0QAAKNEAAC/RAAA20QAAPdEAAETRAABL0QAAUtEAAFnRAABg0QAAbNEAAHPRAAB60QAAgdEAAIjRAACP0QAAltEAAJ3RAACk0QAAq9EAALLRAAC50QAAwNEAAMfRAADO0QAA1dEAANzRAADj0QAA6tEAABPSAAAa0gAAIdIAACjSAAAv0gAAMtIAADnSAAA80gAAQ9IAAErSAABR0gAAWNIAAF/SAABm0gAAbdIAAHTSAAB70gAAgtIAAInSAACi0gAAqdIAALDSAAC30gAAvtIAAMXSAADN0gAAPNMAAEPTAABL0wAAlNMAAKDTAACn0wAArtMAALbTAADv0wAA9tMAABfUAAAe1AAAJdQAACzUAAAz1AAAVNQAAFvUAABn1AAAb9QAAHfUAAB+1AAAhtQAAI3UAACU1AAAtdQAALzUAADD1AAAytQAANHUAADY1AAA39QAAObUAADu1AAAF9UAAB7VAAA/1QAARtUAAE3VAABU1QAAW9UAAGLVAABp1QAAcNUAAJPVAACa1QAAvtUAAMXVAADM1QAA09UAANrVAADh1QAA6NUAAO/VAAD21QAA/dUAAATWAAAL1gAALtYAADXWAAA81gAAQ9YAAErWAABR1gAAWNYAAF/WAABm1gAAbdYAAK/WAAC21gAAvdYAAMTWAADL1gAA0tYAANnWAADg1gAA59YAAO7WAAD11gAA/NYAAAPXAAAK1wAAEdcAABjXAAAf1wAAJtcAAC3XAAA01wAAO9cAAELXAABJ1wAAUNcAAFfXAABe1wAAZdcAAGzXAABz1wAAetcAAILXAAC+1wAAxtcAAF3YAABl2AAAbNgAAHPYAAB22AAAftgAAKrYAACy2AAADdkAABDZAAAT2QAAGtkAACHZAAAo2QAAL9kAADfZAAB22QAAfdkAAITZAACL2QAAktkAAJnZAACh2QAAzNkAANPZAADb2QAA4tkAAOnZAADx2QAA+NkAAP/ZAAAG2gAADtoAABXaAAAc2gAAI9oAACraAAAx2gAAONoAAD/aAABG2gAATdoAAJzaAACj2gAAptoAAK3aAAC02gAAu9oAAMLaAADJ2gAA0NoAAPjaAAD/2gAABNsAAAnbAAAh2wAAKdsAAETbAABL2wAAUtsAAFnbAABg2wAAbNsAAHPbAAB72wAAptsAAK3bAAC02wAAvNsAANbbAADd2wAA5NsAAOzbAADv2wAA9tsAAP3bAAAJ3AAAFdwAABzcAAAj3AAARtwAAE3cAABU3AAAW9wAAGPcAAD/3QAABt4AAA3eAAAV3gAAI94AACreAAAy3gAAU94AAFreAAB93gAAgN4AAIfeAACO3gAAld4AAJ3eAADJ3gAA1d4AANjeAADf3gAA694AAPLeAAD53gAAAd8AAHzfAACD3wAAht8AAI3fAACU3wAAl98AAJ7fAACm3wAArt8AAMbfAADN3wAA1d8AACbgAAAt4AAANOAAADfgAAA64AAAQeAAAEngAACO4AAAluAAAJ3gAACk4AAArOAAALPgAAC64AAAwuAA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AC8EAQCKBAEAkQQBAJgEAQCgBAEApwQBAK4EAQC1BAEAvAQBAMMEAQDKBAEA0QQBANkEAQAVBQEAHAUBACMFAQArBQEAMgUBADkFAQBABQEARwUBAE4FAQBVBQEAXAUBAGQFAQCxBQEAuAUBAL8FAQDHBQEAzgUBANUFAQDcBQEA4wUBAOoFAQDxBQEA+AUBAP8FAQAGBgEADQYBABUGAQAvBgEANwYBALcGAQC+BgEAxQYBAMwGAQDTBgEA2gYBAOIGAQDpBgEA8AYBAPcGAQD+BgEABQcBAAwHAQAUBwEAGwcBACIHAQAqBwEAdwcBAH4HAQCFBwEAjQcBAJQHAQCbBwEAogcBAKkHAQCwBwEAtwcBAL4HAQDGBwEAEwgBABoIAQAhCAEAKQgBADAIAQA3CAEAPggBAEUIAQBMCAEAUwgBAFoIAQBhCAEAaAgBAHAIAQCKCAEAkQgBAJkIAQCgCAEApwgBAK4IAQC1CAEAvQgBANcIAQDeCAEA5ggBAO0IAQD0CAEA+wgBAAMJAQByCQEAeQkBAIAJAQCHCQEAjwkBAJYJAQCdCQEApAkBAKsJAQCyCQEAuQkBAMAJAQDHCQEAzgkBANUJAQDcCQEA4wkBAOoJAQDxCQEA+AkBAP8JAQAGCgEADQoBABQKAQAbCgEAIgoBACkKAQAwCgEANwoBAD4KAQBKCgEAUQoBAF0KAQBkCgEAawoBAHIKAQB+CgEAhQoBAIwKAQCYCgEAnwoBAKYKAQCtCgEAtAoBALsKAQDCCgEAyQoBANAKAQDXCgEA3goBAOUKAQDsCgEA8woBAPoKAQABCwEACAsBAA8LAQAWCwEAHQsBACQLAQArCwEAMgsBADkLAQBACwEARwsBAE4LAQBVCwEAXAsBAGMLAQBqCwEAcQsBAHgLAQB/CwEAhgsBAI4LAQD0CwEAAAwBAAcMAQAPDAEAFwwBAGoMAQByDAEAdQwBAH0MAQCmDAEArgwBALEMAQC4DAEAwAwBAMcMAQDODAEA1QwBANgMAQDfDAEA5gwBAO4MAQD1DAEA+AwBAP8MAQAGDQEACQ0BABANAQAXDQEAHg0BACUNAQAtDQEATQ0BAFUNAQBuDQEAdg0BAHkNAQCBDQEAjQ0BAJQNAQCgDQEAqA0BAOENAQDoDQEA8A0BAKAOAQCjDgEApg4BAK4OAQCxDgEA2g4BAN0OAQDgDgEA5w4BAO4OAQD2DgEA+Q4BAAEPAQAIDwEAEA8BABgPAQAbDwEAIw8BACYPAQAtDwEANA8BADsPAQBCDwEASQ8BAFAPAQBXDwEAWg8BAGEPAQBoDwEAbw8BAHcPAQB+DwEAhQ8BAI0PAQDlDwEA6A8BAO8PAQD3DwEA/g8BAAYQAQBQEAEAWBABAF8QAQBmEAEAbRABAHQQAQB7EAEAghABAIoQAQDGEAEAzhABAOgQAQDvEAEA9xABAP4QAQAFEQEADBEBABQRAQBQEQEAVxEBAF4RAQBmEQEAbREBAHQRAQB8EQEAGxIBACISAQApEgEAMBIBAFwSAQBjEgEAaxIBAHISAQB5EgEAgBIBAIcSAQCOEgEAlRIBAJ0SAQDqEgEA8hIBAPkSAQAAEwEABxMBAA4TAQAWEwEATxMBAFYTAQBeEwEAZRMBAGwTAQBzEwEAehMBAIETAQCIEwEAjxMBAJYTAQCdEwEApBMBAKsTAQCyEwEAuRMBAMATAQDIEwEABBQBAAwUAQATFAEAGxQBAEYUAQBNFAEAVRQBAFwUAQBjFAEAahQBAHEUAQB4FAEAfxQBAIYUAQCNFAEAkBQBAJgUAQCbFAEAoxQBAKsUAQCuFAEAthQBALkUAQDBFAEAyBQBAMsUAQDSFAEA2RQBAOAUAQDnFAEA7hQBAPUUAQD8FAEAAxUBAAoVAQARFQEAGBUBABsVAQAeFQEAJRUBACwVAQAzFQEAVhUBAFkVAQBcFQEAYxUBAGsVAQByFQEAeRUBAIEVAQCsFQEAtBUBAKEWAQCoFgEArxYBALYWAQC9FgEAwBYBAMcWAQDPFgEA1hYBAN4WAQDlFgEA7BYBAPMWAQD6FgEAARcBAAQXAQALFwEAEhcBABoXAQBgGgEAaBoBAHAaAQB4GgEAgBoBAP0aAQAFGwEADRsBABQbAQAcGwEAIxsBAEYbAQBOGwEAqRsBALEbAQC5GwEAwBsBAMcbAQDPGwEA1hsBAN0bAQDkGwEA6xsBAPIbAQD5GwEAABwBAAccAQAOHAEAFRwBABwcAQAjHAEAKhwBADIcAQBsHAEAbxwBAHccAQDhHAEA6BwBAO8cAQD2HAEA+RwBAAEdAQChHQEApB0BAKsdAQCzHQEAth0BAL4dAQDBHQEAyB0BAM8dAQDWHQEA3R0BAOQdAQDrHQEA8h0BAPkdAQAAHgEABx4BAA4eAQAVHgEAHB4BACMeAQAqHgEAMR4BADgeAQA/HgEARh4BAE0eAQBUHgEAWx4BAGIeAQBpHgEAcB4BAHceAQB+HgEAhR4BAIweAQCTHgEAmh4BAKEeAQCoHgEAqx4BALIeAQC6HgEAwR4BAMkeAQASHwEAGh8BACYfAQApHwEAMB8BADgfAQA7HwEAQx8BAMwfAQDTHwEA2x8BAOcfAQDvHwEAiCABAJAgAQCTIAEAmyABAKMgAQCrIAEAsyABALsgAQDDIAEAyyABANIgAQDVIAEA3SABAOUgAQDtIAEA9SABAP0gAQAEIQEADCEBAGIhAQBqIQEAcSEBAHkhAQCBIQEAjSEBAJQhAQCgIQEArCEBALMhAQC7IQEAwiEBAM4hAQDVIQEA3SEBAOkhAQDwIQEA+CEBAP8hAQAGIgEADSIBABUiAQBOIgEAVSIBAF0iAQBkIgEAayIBAHIiAQB6IgEAgSIBAIgiAQCPIgEAliIBAJ4iAQClIgEArCIBALQiAQC7IgEAwiIBAPEiAQD4IgEA/yIBAAYjAQANIwEAFCMBABsjAQAiIwEAKSMBADAjAQA3IwEAPiMBAEUjAQBMIwEAUyMBAFojAQBhIwEAaCMBAG8jAQB2IwEAfSMBAIQjAQCLIwEAkiMBAJkjAQCgIwEApyMBAK4jAQC1IwEAvCMBAMMjAQDKIwEA0SMBANgjAQDfIwEA5iMBAO0jAQD0IwEA+yMBAAIkAQAJJAEAECQBABckAQAeJAEAJSQBACwkAQAzJAEAOiQBAEEkAQBIJAEATyQBAFYkAQBeJAEAZSQBAGwkAQBzJAEAeiQBAIEkAQCIJAEAjyQBAJYkAQCdJAEApCQBAKskAQCzJAEAuiQBAMEkAQDyJAEA+SQBAC0lAQA+JQEARiUBAE0lAQB8JQEAgyUBAIklAQCRJQEAtiUBAL0lAQDEJQEA2iUBAPslAQAfJgEAJSYBAEcmAQBuJgEAdSYBAH0mAQCXJgEAniYBAKYmAQAKJwEAEicBAKMnAQCrJwEA4icBAOUnAQDoJwEA7ycBAPcnAQD6JwEAASgBAAgoAQAPKAEAFigBABkoAQAhKAEAOygBAEIoAQBJKAEAUSgBAH0oAQCEKAEAiygBAI4oAQCVKAEAnSgBAKAoAQCnKAEArygBALYoAQC9KAEAxSgB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ACpVAgA3VQIAZlUCALVVAgDkVQIAPlYCAG5XAgAEWQIAEVkCACFZAgAxWQIAQVkCAOJZAgDwWQIAGVoCAEJaAgBPWgIAb1oCALRaAgAIWwIAFFsCACdbAgA6WwIAflsCALxbAgDCWwIAL1wCADBcAgA2XAIAPFwCAD1cAgBIXAIATlwCAFRcAgBqXQIAhV0CAItdAgCRXQIAl10CAJhdAgC8XQIA9l0CAB1eAgAjXgIAPl4CAGVeAgBrXgIAYmACAJNgAgDLYAIA3GACAN1gAgDjYAIA6WACAO9gAgAiYQIAKGECAGRhAgCgYQIAr2ECAOthAgApYgIAL2ICADViAgCHYgIAjWICAJNiAgCZYgIAn2ICALliAgC/YgIAxWICAMpiAgDOYgIA1GICANViAgDZYwIA32MCAONjAgDnYwIA7WMCAPNjAgD5YwIA/2MCAAVkAgALZAIAFmQCABdkAgAaZAIAG2QCABxkAgAdZAIAHmQCAB9kAgArZAIAP2QCAEVkAgBTZAIAWWQCAF9kAgBlZAIAe2QCAIFkAgAVZQIALWUCADFlAgA3ZQIAPWUCADVnAgB3ZwIAfWcCAINnAgCUZwIApWcCAN1nAgDnZwIA62cCAO9nAgA7aAIAy2gCAOZoAgDsaAIA8mgCAPhoAgAOaQIAsGkCAMppAgDbaQIAdGwCAI1uAgCTbgIAIG8CACRvAgAqbwIAMG8CADZvAgA8bwIASm8CAFBvAgBWbwIAh28CAItvAgCjbwIAsG8CALRvAgC6bwIAvm8CAMRvAgBJcAIAaHACAKhwAgDJcAIA7nACAPRwAgBqcQIAcHECAHZxAgB8cQIAjHECAJBxAgCWcQIAmnECAKBxAgCkcQIAwXECAMVxAgDLcQIA+HECAClzAgAvcwIANXMCAEJzAgBPcwIAU3MCAFlzAgBfcwIArnMCAMVzAgDLcwIAz3MCABR0AgAadAIAIHQCAF90AgADdQIAP3UCAG91AgCcdQIAqXUCALV1AgC7dQIA1nUCAAl2AgAgdgIAK3YCAFp2AgCCdgIAk3YCAJl2AgC3dgIAvXYCANl2AgAXdwIAHXcCAE93AgBVdwIAW3cCAGF3AgB1dwIA4XcCAOx3AgDvdwIA+ncCAAl4AgAPeAIA33gCALh5AgA4fAIAenwCAIp8AgCafAIAoHwCAAx9AgANfQIADn0CABR9AgCUfQIAon0CAKh9AgCufQIAtH0CAOJ9AgATfgIASH4CAIp+AgDJfgIA+34CADt/AgB7fwIAsH8CAO5/AgAlgAIAaIACAJ+AAgDWgAIAFoECACaBAgBYgQIAj4ECAMaBAgDWgQIA5oECABiCAgAeggIAaoICAJ2CAgCjggIAqYICAK+CAgC1ggIAwIUCAH+GAgCEhgIAioYCAJCGAgCehgIApIYCAL2GAgDDhgIAyYYCAM+GAgAjhwIANIcCAGWHAgBrhwIAtocCAMeHAgDNhwIAGIgCACiIAgBTiAIAZYgCAGuIAgB6iAIAjIgCAKqIAgC7iAIAv4gCAMOIAgDHiAIA84gCAPmIAgCaiQIAvokCAM2JAgDbiQIA6okCAPmJAgAHigIAFYoCACSKAgAqigIAMIoCADOKAgA/igIARYoCAEaKAgBHigIASIoCAFOKAgBZigIAZYoCAMqLAgDZiwIAuY0CAOWNAgADjgIAGI4CAIKOAgCUjgIAmo4CAKyOAgCyjgIAuI4CANOOAgDZjgIA344CAOWOAgD2jgIA+o4CAACPAgAGjwIACY8CABePAgAhjwIAhY8CAJCPAgCcjwIALZACADOQAgA5kAIAm5ACAMWQAgBJkQIAopECALqRAgDAkQIA25ECAOGRAgDlkQIA/JECAAKSAgAIkgIAFZICABySAgArkgIANJICADqSAgBCkgIASJICAE6SAgBakgIAbpICAHqSAgCKkgIAvJICABGTAgAUkwIAFZMCABaTAgAXkwIAP5MCAEWTAgBQkwIAW5MCAF6TAgBmkwIAe5MCAJGTAgCUkwIAlZMCAJaTAgChkwIAr5MCALeTAgC/kwIAx5MCAM+TAgDXkwIA35MCAOeTAgDvkwIA95MCAP+TAgAHlAIAD5QCABeUAgAflAIAJ5QCAC+UAgA3lAIAP5QCAEeUAgBPlAIAV5QCAF+UAgBnlAIAb5QCAHeUAgB/lAIAh5QCAI+UAgCXlAIAn5QCAKeUAgCvlAIAt5QCAL+UAgDHlAIAz5QCANeUAgDflAIA55QCAO+UAgD3lAIA/5QCAAeVAgAPlQIAF5UCAB+VAgAnlQIAL5UCADeVAgA/lQIAR5UCAE+VAgBXlQIAX5UCAGeVAgBvlQIAd5UCAH+VAgCHlQIAj5UCAJeVAgCflQIAp5UCAK+VAgC3lQIAv5UCAMeVAgDPlQIA15UCAN+VAgDnlQIA75UCAPeVAgD/lQIAB5YCAA+WAgAXlgIAH5YCACeWAgAvlgIAN5YCAD+WAgBHlgIAT5YCAFeWAgBflgIAZ5YCAG+WAgB3lgIAf5YCAIeWAgCPlgIAl5YCAJ+WAgCnlgIAr5YCALeWAgC/lgIAx5YCAM+WAgDXlgIA35YCAOeWAgDvlgIA95YCAP+WAgAHlwIAD5cCABeXAgAflwIAJ5cCAC+XAgA3lwIAP5cCAEeXAgBPlwIAV5cCAF+XAgBnlwIAb5cCAHeXAgB/lwIAh5cCAI+XAgCXlwIAn5cCAKeXAgCvlwIAt5cCAL+XAgDHlwIAz5cCANeXAgDflwIA55cCAO+XAgD3lwIA/5cCAAeYAgAPmAIAF5gCAB+YAgAnmAIAL5gCADeYAgA/mAIAR5gCAE+YAgBXmAIAX5gCAGeYAgBvmAIAd5gCAH+YAgCHmAIAj5gCAJeYAgCfmAIAp5gCAK+YAgC3mAIAv5gCAMeYAgDPmAIA15gCAN+YAgDnmAIA75gCAPeYAgD/mAIAB5kCAA+ZAgAXmQIAH5kCACeZAgAvmQIAN5kCAD+ZAgBHmQIAT5kCAFeZAgBfmQIAZ5kCAG+ZAgB3mQIAf5kCAIeZAgCPmQIAl5kCAJ+ZAgCnmQIAr5kCALeZAgC/mQIAx5kCAM+ZAgDXmQIA35kCAOeZAgDvmQIA95kCAP+ZAgAHmgIAD5oCABeaAgAfmgIAJ5oCAC+aAgA3mgIAP5oCAEeaAgBPmgIAV5oCAF+aAgBnmgIAb5oCAHeaAgB/mgIAh5oCAI+aAgCXmgIAn5oCAKeaAgCvmgIAt5oCAL+aAgDHmgIAz5oCANeaAgDfmgIA55oCAO+aAgD3mgIA/5oCAAebAgAPmwIAF5sCAB+bAgAnmwIAL5sCADebAgA/mwIAR5sCAE+bAgBXmwIAX5sCAGebAgBvmwIAd5sCAH+bAgCHmwIAj5sCAJebAgCfmwIAp5sCAK+bAgC3mwIAv5sCAMebAgDPmwIA15sCAN+bAgDnmwIA75sCAPebAgD/mwIAB5wCAA+cAgAXnAIAH5wCACecAgAvnAIAN5wCAD+cAgBHnAIAT5wCAFecAgBfnAIAZ5wCAG+cAgB3nAIAf5wCAIecAgCPnAIAl5wCAJ+cAgCnnAIAr5wCALecAgC/nAIAx5wCAM+cAgDXnAIA35wCAOecAgDvnAIA95wCAP+cAgAHnQIAD50CABedAgAfnQIAJ50CAC+dAgA3nQIAP50CAEedAgBPnQIAV50CAF+dAgBnnQIAb50CAHedAgB/nQIAh50CAI+dAgCXnQIAn50CAKedAgCvnQIAt50CAL+dAgDHnQIAz50CANedAgDfnQIA550CAO+dAgD3nQIA/50CAAeeAgAPngIAF54CAB+eAgAnngIAL54CADeeAgA/ngIAR54CAE+eAgBXngIAX54CAGeeAgBvngIAd54CAH+eAgCHngIAj54CAJeeAgCfngIAp54CAK+eAgC3ngIAv54CAMeeAgDPngIA154CAN+eAgDnngIAVZ8CACqgAgBhoAIAnKACABmhAgCdoQIAK6ICAICiAgDcogIAW6MCAJKjAgBkpAIA1aQCADGlAgCdpQIATKYCALOmAgAWpwIA56cCAKqoAgChqQIA9KkCAKKqAgB1qwIABa0CAHutAgDurQIADq8CAI+vAgDrrwIA3LkCABC7AgA+uwIAz7sCAFi8AgCjvAIALb4CAJ6+AgD3vgIAQ78CALm/AgAQwAIAg8ACAFPCAgCowgIAdHJhY2V2aWV3ZXJlbmNvZGluZy9qc29uanNvbmVuY29kaW5nZW5jb2RpbmcvYmFzZTY0YmFzZTY0ZW5jb2RpbmcvYmluYXJ5YmluYXJ5ZXJyb3JzdW5zYWZlaW50ZXJuYWwvcmVmbGVjdGxpdGVyZWZsZWN0bGl0ZWludGVybmFsL2dvYXJjaGdvYXJjaGludGVybmFsL3Vuc2FmZWhlYWRlcnVuc2FmZWhlYWRlcmludGVybmFsL2FiaWFiaXJ1bnRpbWVpbnRlcm5hbC9jcHVjcHVpbnRlcm5hbC9nb2V4cGVyaW1lbnRnb2V4cGVyaW1lbnRydW50aW1lL2ludGVybmFsL2F0b21pY2F0b21pY3J1bnRpbWUvaW50ZXJuYWwvbWF0aG1hdGhydW50aW1lL2ludGVybmFsL3N5c3N5c2ludGVybmFsL2dvb3Nnb29zaW50ZXJuYWwvY292ZXJhZ2UvcnRjb3ZydGNvdmludGVybmFsL2J5dGVhbGdieXRlYWxnaW50ZXJuYWwvZ29kZWJ1Z3Nnb2RlYnVnc2ludGVybmFsL2NoYWNoYThyYW5kY2hhY2hhOHJhbmRpb3N5bmNzeW5jL2F0b21pY2ludGVybmFsL3JhY2VyYWNlbWF0aC9iaXRzYml0c3JlZmxlY3RzdHJjb252dW5pY29kZS91dGY4dXRmOHVuaWNvZGVpbnRlcm5hbC9pdG9haXRvYXNsaWNlc2NtcGZtdHNvcnRpbnRlcm5hbC9mbXRzb3J0Zm10c29ydG9zaW8vZnNmc3RpbWVzeXNjYWxsaW50ZXJuYWwvb3NlcnJvcm9zZXJyb3JwYXRoaW50ZXJuYWwvdGVzdGxvZ3Rlc3Rsb2dpbnRlcm5hbC9wb2xscG9sbGludGVybmFsL3N5c2NhbGwvdW5peHVuaXhpbnRlcm5hbC9zeXNjYWxsL2V4ZWNlbnZleGVjZW52aW50ZXJuYWwvc2FmZWZpbGVwYXRoc2FmZWZpbGVwYXRoc3RyaW5nc3VuaWNvZGUvdXRmMTZ1dGYxNmJ5dGVzaW50ZXJuYWwvdHJhY2V0cmFjZWNvbnRhaW5lci9oZWFwaGVhcGludGVybmFsL3RyYWNlL3YyaW50ZXJuYWwvdHJhY2UvdjIvZXZlbnRldmVudGludGVybmFsL3RyYWNlL3YyL2V2ZW50L2dvMTIyZ28xMjJpbnRlcm5hbC90cmFjZS92Mi92ZXJzaW9udmVyc2lvbmJ1ZmlvbWF0aC9yYW5kcmFuZGludGVybmFsL2dvZGVidWdnb2RlYnVnaW50ZXJuYWwvYmlzZWN0YmlzZWN0b3MvZXhlY2V4ZWNjb250ZXh0cGF0aC9maWxlcGF0aGZpbGVwYXRoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0Zm9ybWF0aHRtbC90ZW1wbGF0ZXRlbXBsYXRldGV4dC90ZW1wbGF0ZS9wYXJzZXBhcnNlaHRtbHJlZ2V4cHJlZ2V4cC9zeW50YXhzeW50YXh0ZXh0L3RlbXBsYXRlbmV0L3VybHVybGVtYmVkbmV0L2h0dHBodHRwY3J5cHRvL3Rsc3Rsc2NyeXB0b2hhc2hjcnlwdG8vZWNkc2FlY2RzYWNyeXB0by9hZXNhZXNjcnlwdG8vY2lwaGVyY2lwaGVyY3J5cHRvL2ludGVybmFsL2FsaWFzYWxpYXNjcnlwdG8vc3VidGxlc3VidGxlY3J5cHRvL2ludGVybmFsL2JvcmluZ2JvcmluZ2NyeXB0by9pbnRlcm5hbC9ib3Jpbmcvc2lnc2lnY3J5cHRvL2VjZGhlY2RoY3J5cHRvL2ludGVybmFsL25pc3RlY25pc3RlY2NyeXB0by9pbnRlcm5hbC9uaXN0ZWMvZmlhdGZpYXRjcnlwdG8vaW50ZXJuYWwvcmFuZHV0aWxyYW5kdXRpbGNyeXB0by9pbnRlcm5hbC9lZHdhcmRzMjU1MTkvZmllbGRmaWVsZGNyeXB0by9lbGxpcHRpY2VsbGlwdGljbWF0aC9iaWdiaWdjcnlwdG8vaW50ZXJuYWwvYmlnbW9kYmlnbW9kY3J5cHRvL2ludGVybmFsL2JvcmluZy9iYmlnYmJpZ2NyeXB0by9zaGE1MTJzaGE1MTJ2ZW5kb3IvZ29sYW5nLm9yZy94L2NyeXB0by9jcnlwdG9ieXRlY3J5cHRvYnl0ZWVuY29kaW5nL2FzbjFhc24xdmVuZG9yL2dvbGFuZy5vcmcveC9jcnlwdG8vY3J5cHRvYnl0ZS9hc24xY3J5cHRvL2VkMjU1MTllZDI1NTE5Y3J5cHRvL2ludGVybmFsL2Vkd2FyZHMyNTUxOWVkd2FyZHMyNTUxOWNyeXB0by9yYW5kY3J5cHRvL3JzYXJzYWNyeXB0by94NTA5eDUwOWNyeXB0by9zaGEyNTZzaGEyNTZlbmNvZGluZy9wZW1wZW1jcnlwdG8vZHNhZHNhY3J5cHRvL3g1MDkvcGtpeHBraXhlbmNvZGluZy9oZXhoZXhuZXRuZXQvbmV0aXBuZXRpcGludGVybmFsL2ludGVybmludGVybnZlbmRvci9nb2xhbmcub3JnL3gvbmV0L2Rucy9kbnNtZXNzYWdlZG5zbWVzc2FnZWludGVybmFsL25ldHRyYWNlbmV0dHJhY2V2ZW5kb3IvZ29sYW5nLm9yZy94L25ldC9yb3V0ZXJvdXRlaW50ZXJuYWwvc2luZ2xlZmxpZ2h0c2luZ2xlZmxpZ2h0cnVudGltZS9jZ29jZ29jcnlwdG8vZGVzZGVzY3J5cHRvL21kNW1kNWNyeXB0by94NTA5L2ludGVybmFsL21hY29zbWFjT1NjcnlwdG8vc2hhMXNoYTFjcnlwdG8vaG1hY2htYWNjcnlwdG8vcmM0cmM0dmVuZG9yL2dvbGFuZy5vcmcveC9jcnlwdG8vY2hhY2hhMjBwb2x5MTMwNWNoYWNoYTIwcG9seTEzMDV2ZW5kb3IvZ29sYW5nLm9yZy94L2NyeXB0by9pbnRlcm5hbC9hbGlhc3ZlbmRvci9nb2xhbmcub3JnL3gvc3lzL2NwdXZlbmRvci9nb2xhbmcub3JnL3gvY3J5cHRvL2NoYWNoYTIwY2hhY2hhMjB2ZW5kb3IvZ29sYW5nLm9yZy94L2NyeXB0by9pbnRlcm5hbC9wb2x5MTMwNXBvbHkxMzA1Y29udGFpbmVyL2xpc3RsaXN0dmVuZG9yL2dvbGFuZy5vcmcveC9jcnlwdG8vaGtkZmhrZGZsb2dsb2cvaW50ZXJuYWxpbnRlcm5hbG5ldC9odHRwL2ludGVybmFsL2FzY2lpYXNjaWltaW1lL211bHRpcGFydG11bHRpcGFydG5ldC90ZXh0cHJvdG90ZXh0cHJvdG9taW1lbWltZS9xdW90ZWRwcmludGFibGVxdW90ZWRwcmludGFibGVjb21wcmVzcy9nemlwZ3ppcGNvbXByZXNzL2ZsYXRlZmxhdGVoYXNoL2NyYzMyY3JjMzJuZXQvaHR0cC9odHRwdHJhY2VodHRwdHJhY2V2ZW5kb3IvZ29sYW5nLm9yZy94L25ldC9odHRwL2h0dHBndXRzaHR0cGd1dHN2ZW5kb3IvZ29sYW5nLm9yZy94L25ldC9pZG5haWRuYXZlbmRvci9nb2xhbmcub3JnL3gvdGV4dC9zZWN1cmUvYmlkaXJ1bGViaWRpcnVsZXZlbmRvci9nb2xhbmcub3JnL3gvdGV4dC90cmFuc2Zvcm10cmFuc2Zvcm12ZW5kb3IvZ29sYW5nLm9yZy94L3RleHQvdW5pY29kZS9iaWRpYmlkaXZlbmRvci9nb2xhbmcub3JnL3gvdGV4dC91bmljb2RlL25vcm1ub3JtdmVuZG9yL2dvbGFuZy5vcmcveC9uZXQvaHR0cDIvaHBhY2tocGFja25ldC9odHRwL2ludGVybmFsdmVuZG9yL2dvbGFuZy5vcmcveC9uZXQvaHR0cC9odHRwcHJveHlodHRwcHJveHlpbnRlcm5hbC9wcm9maWxlcHJvZmlsZWludGVybmFsL2xhenlyZWdleHBsYXp5cmVnZXhwaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIkR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9lbWl0dGVyLmdvTmFtZVN0YXJ0JEdPUk9PVC9zcmMvdGltZS90aW1lLmdvU3RyaW5nZGJ1ZmJ1aWx0aW5ieXRlTmFub3NlY29uZHNNaWNyb3NlY29uZHNNaWxsaXNlY29uZHNTZWNvbmRzTWludXRlc0hvdXJzVHJ1bmNhdGVtUm91bmRBYnNEdXJhdGlvbmVzYzoAAUVuZEZyb21SZXNvdXJjZUZyb21TdGFja1RvUmVzb3VyY2VBcnJvd0V2ZW50U2xpY2VFdmVudFRzRHVyUmVzb3VyY2VTdGFja0VuZFN0YWNrQXJnYW55Q2F0ZWdvcnlTY29wZVRhc2tDb2xvckluZGV4QXN5bmNTbGljZUV2ZW50JEdPUk9PVC9zcmMvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvcHByb2YuZ29wcm9mJEdPUk9PVC9zcmMvaW50ZXJuYWwvdHJhY2UvcGFyc2VyLmdvUENGbkZpbGVMaW5lRnJhbWVDb3VudFRpbWVQcm9maWxlUmVjb3JkJEdPUk9PVC9zcmMvaW50ZXJuYWwvcHJvZmlsZS9wcm9maWxlLmdvU2FtcGxlVHlwZVR5cGVVbml0dHlwZVh1bml0WCRHT1JPT1Qvc3JjL2ludGVybmFsL3Byb2ZpbGUvZW5jb2RlLmdvZGVjb2RlcnAkR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL3Byb3RvLmdvdHlwdTY0ZGF0YXRtcGJ1ZmZlcmVuY29kZW1lc3NhZ2VlcnJvcmJWYWx1ZVR5cGVlc2M6ZXNjOgIBRGVmYXVsdFNhbXBsZVR5cGVTYW1wbGVMb2NhdGlvbklETWFwcGluZ0xpbWl0T2Zmc2V0QnVpbGRJREhhc0Z1bmN0aW9uc0hhc0ZpbGVuYW1lc0hhc0xpbmVOdW1iZXJzSGFzSW5saW5lRnJhbWVzZmlsZVhidWlsZElEWCRHT1JPT1Qvc3JjL2ludGVybmFsL3Byb2ZpbGUvbWVyZ2UuZ29rZXlzaXplb2Zmc2V0YnVpbGRJRE9yRmlsZW1hcHBpbmdLZXllc2M6AAAAAkFkZHJlc3NGdW5jdGlvblN5c3RlbU5hbWVGaWxlbmFtZVN0YXJ0TGluZW5hbWVYc3lzdGVtTmFtZVhmaWxlbmFtZVhmc3RhcnRMaW5lbmFtZXN5c3RlbU5hbWVmaWxlTmFtZWZ1bmN0aW9uS2V5ZnVuY3Rpb25JRFhJc0ZvbGRlZG1hcHBpbmdJRFgkR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL2ZpbHRlci5nb21hdGNoZXNOYW1lbG9jcmUkR09ST09UL3NyYy9yZWdleHAvcmVnZXhwLmdvZXhwcnByb2ckR09ST09UL3NyYy9yZWdleHAvc3ludGF4L3Byb2cuZ29JbnN0T3BpSW5zdE9wT3V0UnVuZXJ1bmVvcE1hdGNoUnVuZXJNYXRjaFJ1bmVQb3NNYXRjaEVtcHR5V2lkdGhiZWZvcmVhZnRlck51bUNhcHNraXBOb3BwY1ByZWZpeHByZWZpeGNvbXBsZXRlU3RhcnRDb25kRW1wdHlPcFByb2dvbmVwYXNzJEdPUk9PVC9zcmMvcmVnZXhwL29uZXBhc3MuZ29OZXh0b25lUGFzc0luc3RvbmVQYXNzUHJvZ251bVN1YmV4cG1heEJpdFN0YXRlTGVuc3ViZXhwTmFtZXNwcmVmaXhCeXRlc3ByZWZpeFJ1bmVwcmVmaXhFbmRtcG9vbG1hdGNoY2FwcHJlZml4Q29tcGxldGVjb25kbWluSW5wdXRMZW5sb25nZXN0JEdPUk9PVC9zcmMvcmVnZXhwL2JhY2t0cmFjay5nb3RyeUJhY2t0cmFja2VuZGNhcGpvYnNhcmdwb3Nqb2J2aXNpdGVkaW5wdXRzJEdPUk9PVC9zcmMvcmVnZXhwL2V4ZWMuZ29zdHJzdGVwY2FuQ2hlY2tQcmVmaXhoYXNQcmVmaXhpbmRleG1hdGNobGF6eUZsYWdpbnB1dEJ5dGVzZXNjOgACAnN0cmluZ2lucHV0U3RyaW5ncmVhZGVyJEdPUk9PVC9zcmMvaW8vaW8uZ29SZWFkUnVuZWVyclJ1bmVSZWFkZXJhdEVPVGlucHV0UmVhZGVybmV3Qnl0ZXN3aWR0aGlucHV0bmV3U3RyaW5nc25ld1JlYWRlcmNsZWFyaW5pdGVzYzoAAQABcmVzZXRuY2Fwc2hvdWxkVmlzaXRwdXNoYml0U3RhdGVlc2M6AAJiYWNrdHJhY2tpYmlzZHN0Q2FwZG9PbmVQYXNzaXJkb01hdGNoZG9FeGVjdXRlQ29weUxvbmdlc3RnZXRxMHNwYXJzZWRlbnNldGluc3R0aHJlYWRlbnRyeXF1ZXVlcTFwb29sbWF0Y2hlZGFsbG9jcXJ1bnFuZXh0cW5leHRQb3NjbmV4dENvbmRhZGRtYWNoaW5lZXNjOgABAANlc2M6AwFwdXROdW1TdWJleHBTdWJleHBOYW1lc1N1YmV4cEluZGV4TGl0ZXJhbFByZWZpeE1hdGNoUmVhZGVyTWF0Y2hTdHJpbmdNYXRjaFJlcGxhY2VBbGxTdHJpbmdzcmNyZXBsUmVwbGFjZUFsbExpdGVyYWxTdHJpbmdSZXBsYWNlQWxsU3RyaW5nRnVuY3JlcGxhY2VBbGxic3Jjbm1hdGNoZHN0UmVwbGFjZUFsbFJlcGxhY2VBbGxMaXRlcmFsUmVwbGFjZUFsbEZ1bmNwYWRhYWxsTWF0Y2hlc25kZWxpdmVyRmluZEZpbmRJbmRleEZpbmRTdHJpbmdGaW5kU3RyaW5nSW5kZXhGaW5kUmVhZGVySW5kZXhGaW5kU3VibWF0Y2hFeHBhbmRFeHBhbmRTdHJpbmdleHBhbmRGaW5kU3VibWF0Y2hJbmRleEZpbmRTdHJpbmdTdWJtYXRjaEZpbmRTdHJpbmdTdWJtYXRjaEluZGV4RmluZFJlYWRlclN1Ym1hdGNoSW5kZXhGaW5kQWxsRmluZEFsbEluZGV4RmluZEFsbFN0cmluZ0ZpbmRBbGxTdHJpbmdJbmRleEZpbmRBbGxTdWJtYXRjaEZpbmRBbGxTdWJtYXRjaEluZGV4RmluZEFsbFN0cmluZ1N1Ym1hdGNoRmluZEFsbFN0cmluZ1N1Ym1hdGNoSW5kZXhTcGxpdE1hcnNoYWxUZXh0VW5tYXJzaGFsVGV4dHRleHRSZWdleHBlc2M6AmVzYzoAAQFlc2M6AAABdW5tYXRjaGVkTGluZXNsYWRkcm1hcHBpbmdJRGxpbmVzaXNGb2xkZWRsb2NhdGlvbktleWVzYzoEZXNjOgNWYWx1ZUxhYmVsTnVtTGFiZWxOdW1Vbml0bG9jYXRpb25JRFhsYWJlbFhrZXlYc3RyWG51bVhzYW1wbGVsb2NhdGlvbnNsYWJlbHNudW1sYWJlbHNzYW1wbGVLZXlDb21tZW50c0Ryb3BGcmFtZXNLZWVwRnJhbWVzVGltZU5hbm9zRHVyYXRpb25OYW5vc1BlcmlvZFR5cGVQZXJpb2Rjb21tZW50WGRyb3BGcmFtZXNYa2VlcEZyYW1lc1hzdHJpbmdUYWJsZWRlZmF1bHRTYW1wbGVUeXBlWHByZUVuY29kZXBvc3REZWNvZGVGaWx0ZXJTYW1wbGVzQnlOYW1lZm9jdXNpZ25vcmVoaWRlZm1pbWhtRmlsdGVyU2FtcGxlc0J5VGFndmFsbnZhbFRhZ01hdGNoJEdPUk9PVC9zcmMvaW50ZXJuYWwvcHJvZmlsZS9sZWdhY3lfcHJvZmlsZS5nb3JlbWFwTG9jYXRpb25JRHNyZW1hcEZ1bmN0aW9uSURzcmVtYXBNYXBwaW5nSURzUGFyc2VNZW1vcnlNYXByZFJlYWRSZWFkZXJhZGRMZWdhY3lGcmFtZUluZm9Ob3JtYWxpemVwYmNvbXBhdGlibGVzZXRNYWluV3JpdGV3V3JpdGVyQ2hlY2tWYWxpZEFnZ3JlZ2F0ZWlubGluZUZyYW1lZnVuY3Rpb25maWxlbmFtZWxpbmVudW1iZXJhZGRyZXNzTWVyZ2VDb21wYXRpYmxlSGFzRmlsZUxpbmVzRGVtYW5nbGVEZW1hbmdsZXJFbXB0eVNjYWxlcmF0aW9TY2FsZU5yYXRpb3MkR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL3BydW5lLmdvUHJ1bmVkcm9wUnhrZWVwUnhSZW1vdmVVbmludGVyZXN0aW5nUHJvZmlsZWVzYzoFAWVzYzoEAmVzYzoEA2VzYzoABGVzYzoGA0J1aWxkUHJvZmlsZSRHT1JPT1Qvc3JjL2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2h0dHAuZ28KLyogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmcvcGtnc2l0ZS9ibG9iL21hc3Rlci9zdGF0aWMvc2hhcmVkL3R5cG9ncmFwaHkvdHlwb2dyYXBoeS5jc3MgKi8KYm9keSB7CiAgZm9udC1mYW1pbHk6CS1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJzsKICBmb250LXNpemU6CTFyZW07CiAgbGluZS1oZWlnaHQ6CW5vcm1hbDsKICBtYXgtd2lkdGg6CTlpbjsKICBtYXJnaW46CTFlbTsKfQpoMSB7IGZvbnQtc2l6ZTogMS41cmVtOyB9CmgyIHsgZm9udC1zaXplOiAxLjM3NXJlbTsgfQpoMSxoMiB7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBsaW5lLWhlaWdodDogMS4yNWVtOwogIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KcCAgeyBjb2xvcjogZ3JleTg1OyBmb250LXNpemU6ODUlOyB9CmNvZGUsCnByZSwKdGV4dGFyZWEuY29kZSB7CiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS41ZW07Cn0KCnByZSwKdGV4dGFyZWEuY29kZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1hY2NlbnRlZCk7CiAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsKICBvdmVyZmxvdy14OiBhdXRvOwogIHBhZGRpbmc6IDAuNjI1cmVtOwogIHRhYi1zaXplOiA0OwogIHdoaXRlLXNwYWNlOiBwcmU7Cn0KQ29tbW9uU3R5bGVDb25zdW1lVGltZVVuaXR1bml0Q29uc3VtZVZpZXdlckV2ZW50diRHT1JPT1Qvc3JjL2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC9mb3JtYXQuZ29qc29uOiJuYW1lLG9taXRlbXB0eSJQaGFzZWpzb246InBoImpzb246InMsb21pdGVtcHR5Impzb246InRzImpzb246ImR1cixvbWl0ZW1wdHkiUElEanNvbjoicGlkIlRJRGpzb246InRpZCJqc29uOiJpZCxvbWl0ZW1wdHkiQmluZFBvaW50anNvbjoiYnAsb21pdGVtcHR5Impzb246InNmLG9taXRlbXB0eSJqc29uOiJlc2Ysb21pdGVtcHR5Impzb246ImFyZ3Msb21pdGVtcHR5IkNuYW1lanNvbjoiY25hbWUsb21pdGVtcHR5Impzb246ImNhdCxvbWl0ZW1wdHkiRXZlbnRyZXF1aXJlZENvbnN1bWVWaWV3ZXJGcmFtZWpzb246Im5hbWUiUGFyZW50anNvbjoicGFyZW50LG9taXRlbXB0eSJGbHVzaFRyYWNlQ29uc3VtZXJyYW5nZVN0YXJ0cmFuZ2VFbmRoZWFwU3RhdHNoZWFwQWxsb2NuZXh0R0NwcmV2SGVhcFN0YXRzZ3N0YXRlc3ByZXZHc3RhdGVzdGhyZWFkU3RhdHNwcmV2VGhyZWFkU3RhdHNnb21heHByb2NzZnJhbWVUcmVlaWRjaGlsZHJlbmZyYW1lTm9kZWZyYW1lU2VxYXJyb3dTZXFmaWx0ZXJyZXNvdXJjZVR5cGVyZXNvdXJjZXNmb2N1c1Jlc291cmNldGFza3Nzb3J0SW5kZXh0YXNrYXN5bmNTbGljZVNlcUdvbWF4cHJvY3NlU2V0UmVzb3VyY2VUeXBlU2V0UmVzb3VyY2VGaWx0ZXJUYXNrU2xpY2VUYXNrU2xpY2VzbGljZXNlY3Rpb25JRGNuYW1lQXN5bmNTbGljZUluc3RhbnRJbnN0YW50RXZlbnRBcnJvd1Rhc2tBcnJvd2Fycm93ZXZIZWFwQWxsb2N0c0ZvY3VzR29yb3V0aW5lVHJhbnNpdGlvbmZyb21HU3RhdGV0b0luY1RocmVhZFN0YXRlQ291bnRzdGF0ZVRocmVhZFN0YXRlZGVsdGFIZWFwR29hbGVtaXRIZWFwQ291bnRlcnNFcnJ0c1dpdGhpblJhbmdlT3B0aW9uYWxFdmVudHRocmVhZE1ldGF0aWRwcmlvcml0eXByb2Nlc3NNZXRhc3RrYnVpbGRCcmFuY2hwYXJlbnRFbWl0dGVycGlja1Rhc2tDb2xvcmlkeGxlbmNvbG9yRm9yVGFza0dEZWFkR1J1bm5hYmxlR1J1bm5pbmdHV2FpdGluZ0dXYWl0aW5nR0MkR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9tbXUuZ29yYW5nZXNTdGFydFRpbWVFbmRUaW1lVVJMdmlld1R5cGVWaWV3VHlwZVJhbmdlJEdPUk9PVC9zcmMvZm10L3ByaW50LmdvU3ByaW50Zi90cmFjZT92aWV3PSVzJnN0YXJ0PSVkJmVuZD0lZCRHT1JPT1Qvc3JjL2ludGVybmFsL3RyYWNlL2djLmdvVXRpbEZsYWdzVXRpbE11dGF0b3JVdGlsTXV0YXRvclV0aWxGdW5jJEdPUk9PVC9zcmMvbmV0L2h0dHAvc2VydmVyLmdvSGVhZGVyJEdPUk9PVC9zcmMvbmV0L2h0dHAvaGVhZGVyLmdvQWRkaHZhbHVlU2V0R2V0VmFsdWVzaGFzRGVsd3JpdGUkR09ST09UL3NyYy9uZXQvaHR0cC9odHRwdHJhY2UvdHJhY2UuZ29HZXRDb25uaG9zdFBvcnRHb3RDb25uQ29ubiRHT1JPT1Qvc3JjL25ldC9uZXQuZ29DbG9zZUxvY2FsQWRkck5ldHdvcmtBZGRyUmVtb3RlQWRkclNldERlYWRsaW5ld2FsbGV4dCRHT1JPT1Qvc3JjL3RpbWUvem9uZWluZm8uZ296b25laXNEU1R0eHdoZW5pc3N0ZGlzdXRjem9uZVRyYW5zZXh0ZW5kY2FjaGVTdGFydGNhY2hlRW5kY2FjaGVab25lbG9va3Vwc2Vjc3RhcnRsb29rdXBGaXJzdFpvbmVmaXJzdFpvbmVVc2VkbG9va3VwTmFtZW9rZXNjOgAAAAEkR09ST09UL3NyYy90aW1lL2Zvcm1hdC5nb0dvU3RyaW5nRm9ybWF0bGF5b3V0QXBwZW5kRm9ybWF0YXBwZW5kRm9ybWF0JEdPUk9PVC9zcmMvdGltZS9mb3JtYXRfcmZjMzMzOS5nb2FwcGVuZEZvcm1hdFJGQzMzMzluYW5vc2FwcGVuZFN0cmljdFJGQzMzMzluc2VjdW5peFNlY2FkZFNlY3NldExvY3N0cmlwTW9ub3NldE1vbm9tb25vQWZ0ZXJ1QmVmb3JlQ29tcGFyZUVxdWFsSXNaZXJvYWJzbG9jYWJzRGF0ZXllYXJtb250aE1vbnRoZGF5WWVhckRheVdlZWtkYXlJU09XZWVrd2Vla0Nsb2NraG91cm1pbkhvdXJNaW51dGVTZWNvbmROYW5vc2Vjb25kWWVhckRheVN1YkFkZERhdGV5ZWFyc21vbnRoc2RheXNkYXRlZnVsbHlkYXlVVENMb2NhbEluWm9uZVpvbmVCb3VuZHNVbml4VW5peE1pbGxpVW5peE1pY3JvVW5peE5hbm9NYXJzaGFsQmluYXJ5VW5tYXJzaGFsQmluYXJ5R29iRW5jb2RlR29iRGVjb2RlTWFyc2hhbEpTT05Vbm1hcnNoYWxKU09OSXNEU1RTZXRSZWFkRGVhZGxpbmVTZXRXcml0ZURlYWRsaW5lUmV1c2VkV2FzSWRsZUlkbGVUaW1lR290Q29ubkluZm9QdXRJZGxlQ29ubkdvdEZpcnN0UmVzcG9uc2VCeXRlR290MTAwQ29udGludWVHb3QxeHhSZXNwb25zZWNvZGVoZWFkZXIkR09ST09UL3NyYy9uZXQvdGV4dHByb3RvL2hlYWRlci5nb01JTUVIZWFkZXIkR09ST09UL3NyYy9uZXQvdGV4dHByb3RvL3JlYWRlci5nb0Nhbm9uaWNhbE1JTUVIZWFkZXJLZXlETlNTdGFydEhvc3RETlNTdGFydEluZm9ETlNEb25lQWRkcnMkR09ST09UL3NyYy9uZXQvaXByYXdzb2NrLmdvSVAkR09ST09UL3NyYy9uZXQvaXAuZ29Jc1Vuc3BlY2lmaWVkaXBJc0xvb3BiYWNrSXNQcml2YXRlSXNNdWx0aWNhc3RJc0ludGVyZmFjZUxvY2FsTXVsdGljYXN0SXNMaW5rTG9jYWxNdWx0aWNhc3RJc0xpbmtMb2NhbFVuaWNhc3RJc0dsb2JhbFVuaWNhc3RUbzRUbzE2RGVmYXVsdE1hc2tTaXplb25lc0lQTWFza01hc2ttYXNreG1hdGNoQWRkckZhbWlseWlzV2lsZGNhcmRvcEFkZHIkR09ST09UL3NyYy9uZXQvaXByYXdzb2NrX3Bvc2l4LmdvZmFtaWx5c29ja2FkZHIkR09ST09UL3NyYy9zeXNjYWxsL3N5c2NhbGxfdW5peC5nb3B0ciRHT1JPT1Qvc3JjL3N5c2NhbGwvenR5cGVzX2Rhcndpbl9hbWQ2NC5nb19Tb2NrbGVuU29ja2FkZHJ0b0xvY2FsJEdPUk9PVC9zcmMvbmV0L3NvY2thZGRyX3Bvc2l4LmdvSVBBZGRyQ29hbGVzY2VkRE5TRG9uZUluZm9Db25uZWN0U3RhcnRuZXR3b3JrQ29ubmVjdERvbmVUTFNIYW5kc2hha2VTdGFydFRMU0hhbmRzaGFrZURvbmUkR09ST09UL3NyYy9jcnlwdG8vdGxzL2NvbW1vbi5nb1ZlcnNpb25IYW5kc2hha2VDb21wbGV0ZURpZFJlc3VtZUNpcGhlclN1aXRlTmVnb3RpYXRlZFByb3RvY29sTmVnb3RpYXRlZFByb3RvY29sSXNNdXR1YWxTZXJ2ZXJOYW1lUGVlckNlcnRpZmljYXRlcyRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L3g1MDkuZ29SYXdSYXdUQlNDZXJ0aWZpY2F0ZVJhd1N1YmplY3RQdWJsaWNLZXlJbmZvUmF3U3ViamVjdFJhd0lzc3VlclNpZ25hdHVyZVNpZ25hdHVyZUFsZ29yaXRobWlzUlNBUFNTYWxnb1B1YmxpY0tleUFsZ29yaXRobVB1YmxpY0tleVNlcmlhbE51bWJlciRHT1JPT1Qvc3JjL21hdGgvYmlnL2ludC5nb25lZyRHT1JPT1Qvc3JjL21hdGgvYmlnL25hdC5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL2FyaXRoLmdvV29yZG1vZEludmVyc2V6Z21ha2VzZXRXb3Jkc2V0VWludDY0c2V0eXN1Ym11bEFkZFdXbW9udGdvbWVyeWttdWxzcXJtdWxSYW5nZWJpdExlbnRyYWlsaW5nWmVyb0JpdHNpc1BvdzJzaGxzaHJzZXRCaXRiaXRzdGlja3lhbmR0cnVuY2FuZE5vdG9yeG9ycmFuZG9tJEdPUk9PVC9zcmMvbWF0aC9yYW5kL3JhbmQuZ29JbnQ2M1NlZWRzZWVkU291cmNlczY0VWludDY0U291cmNlNjRyZWFkVmFscmVhZFBvcyRHT1JPT1Qvc3JjL21hdGgvcmFuZC9leHAuZ29FeHBGbG9hdDY0JEdPUk9PVC9zcmMvbWF0aC9yYW5kL25vcm1hbC5nb05vcm1GbG9hdDY0VWludDMySW50MzFJbnRJbnQ2M25JbnQzMW5pbnQzMW5JbnRuRmxvYXQ2NEZsb2F0MzJQZXJtU2h1ZmZsZXN3YXBqUmFuZGxpbWl0ZXhwTk5zbG93ZXhwTk5Nb250Z29tZXJ5RXZlbmV4cE5OV2luZG93ZWRsb2dNZXhwTk5Nb250Z29tZXJ5c2V0Qnl0ZXNzcXJ0c3ViTW9kMk4kR09ST09UL3NyYy9tYXRoL2JpZy9uYXRjb252Lmdvc2NhblVucmVhZEJ5dGVSZWFkQnl0ZUJ5dGVSZWFkZXJCeXRlU2Nhbm5lcmJhc2VmcmFjT2tyZXNjb3VudHV0b2Fjb252ZXJ0V29yZHNuZGlnaXRzYmJ0YWJsZWJiYm5iaXRzZGl2aXNvcmV4cFdXJEdPUk9PVC9zcmMvbWF0aC9iaWcvbmF0ZGl2LmdvcmVtZGl2ejJkaXZXbW9kV2RpdkxhcmdldUludkluZGl2QmFzaWNkaXZSZWN1cnNpdmVkaXZSZWN1cnNpdmVTdGVwZGVwdGh0ZW1wcyRHT1JPT1Qvc3JjL21hdGgvYmlnL3ByaW1lLmdvcHJvYmFibHlQcmltZU1pbGxlclJhYmlucmVwc2ZvcmNlMnByb2JhYmx5UHJpbWVMdWNhc25hdGVzYzoAAQEBZXNjOgABAQABU2lnblNldEludDY0U2V0VWludDY0Qml0c1NldEJpdHNOZWdNdWxNdWxSYW5nZUJpbm9taWFsUXVvUmVtUXVvUmVtRGl2TW9kRGl2TW9kQ21wQ21wQWJzSW50NjRJc0ludDY0SXNVaW50NjQkR09ST09UL3NyYy9tYXRoL2JpZy9mbG9hdC5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL2FjY3VyYWN5X3N0cmluZy5nb0FjY3VyYWN5U2V0U3RyaW5nc2V0RnJvbVNjYW5uZXJTZXRCeXRlc0J5dGVzRmlsbEJ5dGVzQml0TGVuVHJhaWxpbmdaZXJvQml0c0V4cGV4cFNsb3dleHBHQ0RsZWhtZXJHQ0RybmRNb2RJbnZlcnNlbW9kU3FydDNNb2Q0UHJpbWVtb2RTcXJ0NU1vZDhQcmltZW1vZFNxcnRUb25lbGxpU2hhbmtzTW9kU3FydExzaFJzaEJpdFNldEJpdEFuZEFuZE5vdE9yWG9yTm90U3FydCRHT1JPT1Qvc3JjL21hdGgvYmlnL2ludGNvbnYuZ29UZXh0QXBwZW5kRmxhZ1ByZWNpc2lvbnByZWNXaWR0aHdpZFN0YXRlY2hTY2FuJEdPUk9PVC9zcmMvZm10L3NjYW4uZ29Ta2lwU3BhY2VUb2tlbnNraXBTcGFjZXRva2VuVW5yZWFkUnVuZVNjYW5TdGF0ZSRHT1JPT1Qvc3JjL21hdGgvYmlnL2ludG1hcnNoLmdvUHJvYmFibHlQcmltZSRHT1JPT1Qvc3JjL21hdGgvYmlnL3JhdC5nb3NjYWxlRGVub21lc2M6AgEAAWVzYzoCAQAAAUlzc3VlciRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L3BraXgvcGtpeC5nb0NvdW50cnlPcmdhbml6YXRpb25Pcmdhbml6YXRpb25hbFVuaXRMb2NhbGl0eVByb3ZpbmNlU3RyZWV0QWRkcmVzc1Bvc3RhbENvZGVDb21tb25OYW1lTmFtZXMkR09ST09UL3NyYy9lbmNvZGluZy9hc24xL2FzbjEuZ29vaW90aGVyT2JqZWN0SWRlbnRpZmllckF0dHJpYnV0ZVR5cGVBbmRWYWx1ZUV4dHJhTmFtZXNGaWxsRnJvbVJETlNlcXVlbmNlcmRuc1JlbGF0aXZlRGlzdGluZ3Vpc2hlZE5hbWVTRVRSRE5TZXF1ZW5jZWFwcGVuZFJETnNpbnZhbHVlc29pZFRvUkROU2VxdWVuY2VyZXRTdWJqZWN0Tm90QmVmb3JlTm90QWZ0ZXJLZXlVc2FnZUV4dGVuc2lvbnNJZENyaXRpY2FsYXNuMToib3B0aW9uYWwiRXh0ZW5zaW9uRXh0cmFFeHRlbnNpb25zVW5oYW5kbGVkQ3JpdGljYWxFeHRlbnNpb25zRXh0S2V5VXNhZ2VVbmtub3duRXh0S2V5VXNhZ2VCYXNpY0NvbnN0cmFpbnRzVmFsaWRJc0NBTWF4UGF0aExlbk1heFBhdGhMZW5aZXJvU3ViamVjdEtleUlkQXV0aG9yaXR5S2V5SWRPQ1NQU2VydmVySXNzdWluZ0NlcnRpZmljYXRlVVJMRE5TTmFtZXNFbWFpbEFkZHJlc3Nlc0lQQWRkcmVzc2VzVVJJcyRHT1JPT1Qvc3JjL25ldC91cmwvdXJsLmdvU2NoZW1lT3BhcXVlVXNlcnVzZXJuYW1lcGFzc3dvcmRwYXNzd29yZFNldFVzZXJuYW1lUGFzc3dvcmRVc2VyaW5mb1BhdGhSYXdQYXRoT21pdEhvc3RGb3JjZVF1ZXJ5UmF3UXVlcnlGcmFnbWVudFJhd0ZyYWdtZW50c2V0UGF0aEVzY2FwZWRQYXRoc2V0RnJhZ21lbnRFc2NhcGVkRnJhZ21lbnRSZWRhY3RlZElzQWJzUGFyc2VyZWZSZXNvbHZlUmVmZXJlbmNlUXVlcnlIYXNFbmNvZGVSZXF1ZXN0VVJJSG9zdG5hbWVQb3J0Sm9pblBhdGhlbGVtUGVybWl0dGVkRE5TRG9tYWluc0NyaXRpY2FsUGVybWl0dGVkRE5TRG9tYWluc0V4Y2x1ZGVkRE5TRG9tYWluc1Blcm1pdHRlZElQUmFuZ2VzQ29udGFpbnNJUE5ldEV4Y2x1ZGVkSVBSYW5nZXNQZXJtaXR0ZWRFbWFpbEFkZHJlc3Nlc0V4Y2x1ZGVkRW1haWxBZGRyZXNzZXNQZXJtaXR0ZWRVUklEb21haW5zRXhjbHVkZWRVUklEb21haW5zQ1JMRGlzdHJpYnV0aW9uUG9pbnRzUG9saWN5SWRlbnRpZmllcnNQb2xpY2llcyRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L29pZC5nb2RlckVxdWFsQVNOMU9JRHRvQVNOMU9JRE9JRCRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L3Jvb3RfZGFyd2luLmdvc3lzdGVtVmVyaWZ5b3B0cyRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L3ZlcmlmeS5nb0ROU05hbWVJbnRlcm1lZGlhdGVzJEdPUk9PVC9zcmMvY3J5cHRvL3g1MDkvY2VydF9wb29sLmdvYnlOYW1lbGF6eUNlcnRzcmF3U3ViamVjdGNvbnN0cmFpbnRnZXRDZXJ0bGF6eUNlcnRoYXZlU3Vtc3VtMjI0c3lzdGVtUG9vbGNlcnRDbG9uZWZpbmRQb3RlbnRpYWxQYXJlbnRzcG90ZW50aWFsUGFyZW50Y29udGFpbnNBZGRDZXJ0YWRkQ2VydEZ1bmNyYXdTdW0yMjRBcHBlbmRDZXJ0c0Zyb21QRU1wZW1DZXJ0c1N1YmplY3RzQWRkQ2VydFdpdGhDb25zdHJhaW50Q2VydFBvb2xlc2M6AAADAANSb290c0N1cnJlbnRUaW1lS2V5VXNhZ2VzTWF4Q29uc3RyYWludENvbXBhcmlzaW9uc1ZlcmlmeU9wdGlvbnNjaGFpbnNjaGVja05hbWVDb25zdHJhaW50c21heENvbnN0cmFpbnRDb21wYXJpc29uc25hbWVUeXBlcGFyc2VkTmFtZXBlcm1pdHRlZGV4Y2x1ZGVkaXNWYWxpZGNlcnRUeXBlY3VycmVudENoYWluVmVyaWZ5YnVpbGRDaGFpbnNzaWdDaGVja3NWZXJpZnlIb3N0bmFtZWhhc1NBTkV4dGVuc2lvbkNoZWNrU2lnbmF0dXJlRnJvbUNoZWNrU2lnbmF0dXJlc2lnbmVkc2lnbmF0dXJlaGFzTmFtZUNvbnN0cmFpbnRzZ2V0U0FORXh0ZW5zaW9uQ2hlY2tDUkxTaWduYXR1cmVjcmxUQlNDZXJ0TGlzdFJhd0NvbnRlbnRhc24xOiJvcHRpb25hbCxkZWZhdWx0OjAiQWxnb3JpdGhtUGFyYW1ldGVyc0NsYXNzVGFnSXNDb21wb3VuZEZ1bGxCeXRlc1Jhd1ZhbHVlQWxnb3JpdGhtSWRlbnRpZmllclRoaXNVcGRhdGVOZXh0VXBkYXRlUmV2b2tlZENlcnRpZmljYXRlc1Jldm9jYXRpb25UaW1lUmV2b2tlZENlcnRpZmljYXRlYXNuMToidGFnOjAsb3B0aW9uYWwsZXhwbGljaXQiVEJTQ2VydGlmaWNhdGVMaXN0U2lnbmF0dXJlVmFsdWVCaXRMZW5ndGhBdFJpZ2h0QWxpZ25CaXRTdHJpbmdIYXNFeHBpcmVkY2VydExpc3Rub3dDZXJ0aWZpY2F0ZUxpc3RDcmVhdGVDUkxwcml2cmV2b2tlZENlcnRzZXhwaXJ5Y3JsQnl0ZXNDZXJ0aWZpY2F0ZWVzYzoAAAADVmVyaWZpZWRDaGFpbnNTaWduZWRDZXJ0aWZpY2F0ZVRpbWVzdGFtcHNPQ1NQUmVzcG9uc2VUTFNVbmlxdWVla21sYWJlbGxlbmd0aEV4cG9ydEtleWluZ01hdGVyaWFsY3NDb25uZWN0aW9uU3RhdGVlc2M6AAACV3JvdGVIZWFkZXJGaWVsZFdyb3RlSGVhZGVyc1dhaXQxMDBDb250aW51ZVdyb3RlUmVxdWVzdFdyb3RlUmVxdWVzdEluZm9jb21wb3Nlb2xkaGFzTmV0SG9va3NDbGllbnRUcmFjZXNvcnRlZEtleVZhbHVlc2V4Y2x1ZGVrdnNrZXlWYWx1ZXNoc0xlblN3YXBMZXNzaGVhZGVyU29ydGVyV3JpdGVTdWJzZXR3cml0ZVN1YnNldFdyaXRlSGVhZGVyc3RhdHVzQ29kZVJlc3BvbnNlV3JpdGVyJEdPUk9PVC9zcmMvbmV0L2h0dHAvcmVxdWVzdC5nb01ldGhvZFByb3RvUHJvdG9NYWpvclByb3RvTWlub3JCb2R5Q2xvc2VyUmVhZENsb3NlckdldEJvZHlDb250ZW50TGVuZ3RoVHJhbnNmZXJFbmNvZGluZ0Zvcm1Qb3N0Rm9ybU11bHRpcGFydEZvcm0kR09ST09UL3NyYy9taW1lL211bHRpcGFydC9mb3JtZGF0YS5nb2NvbnRlbnR0bXBmaWxldG1wb2ZmdG1wc2hhcmVkT3BlbmZoUmVhZEF0b2ZmUmVhZGVyQXRTZWVrd2hlbmNlU2Vla2VyRmlsZUhlYWRlclJlbW92ZUFsbGVzYzoFVHJhaWxlclRMU0NhbmNlbFJlc3BvbnNlJEdPUk9PVC9zcmMvbmV0L2h0dHAvcmVzcG9uc2UuZ29TdGF0dXNTdGF0dXNDb2RlVW5jb21wcmVzc2VkUmVxdWVzdENvb2tpZXMkR09ST09UL3NyYy9uZXQvaHR0cC9jb29raWUuZ29Eb21haW5FeHBpcmVzUmF3RXhwaXJlc01heEFnZVNlY3VyZUh0dHBPbmx5U2FtZVNpdGVVbnBhcnNlZFZhbGlkQ29va2llUHJvdG9BdExlYXN0bWFqb3JtaW5vcmNsb3NlQm9keWJvZHlJc1dyaXRhYmxlaXNQcm90b2NvbFN3aXRjaGN0eCRHT1JPT1Qvc3JjL2NvbnRleHQvY29udGV4dC5nb0RlYWRsaW5lZGVhZGxpbmVEb25lQ29udGV4dHBhdCRHT1JPT1Qvc3JjL25ldC9odHRwL3BhdHRlcm4uZ29tZXRob2Rob3N0c2VnbWVudHN3aWxkbXVsdGlzZWdtZW50bGFzdFNlZ21lbnRjb25mbGljdHNXaXRocDFwMmNvbXBhcmVQYXRoc0FuZE1ldGhvZHNyZWxhdGlvbnNoaXBjb21wYXJlTWV0aG9kc2NvbXBhcmVQYXRoc3BhdHRlcm5tYXRjaGVzb3RoZXJWYWx1ZXNXaXRoQ29udGV4dFVzZXJBZ2VudEFkZENvb2tpZVJlZmVyZXJNdWx0aXBhcnRSZWFkZXIkR09ST09UL3NyYy9taW1lL211bHRpcGFydC9tdWx0aXBhcnQuZ29idWZSZWFkZXIkR09ST09UL3NyYy9idWZpby9idWZpby5nb2xhc3RCeXRlbGFzdFJ1bmVTaXplUmVzZXRmaWxscmVhZEVyclBlZWtEaXNjYXJkZGlzY2FyZGVkQnVmZmVyZWRSZWFkU2xpY2VkZWxpbWxpbmVSZWFkTGluZWlzUHJlZml4Y29sbGVjdEZyYWdtZW50c2Z1bGxCdWZmZXJzZmluYWxGcmFnbWVudHRvdGFsTGVuUmVhZEJ5dGVzUmVhZFN0cmluZ1dyaXRlVG93cml0ZUJ1ZmVzYzoAAQACdGVtcERpcmN1cnJlbnRQYXJ0bXJkaXNwb3NpdGlvbmRpc3Bvc2l0aW9uUGFyYW1zdG90YWxGb3JtTmFtZUZpbGVOYW1lcGFyc2VDb250ZW50RGlzcG9zaXRpb25wb3B1bGF0ZUhlYWRlcnNtYXhNSU1FSGVhZGVyU2l6ZW1heE1JTUVIZWFkZXJzUGFydHBhcnRzUmVhZG5sbmxEYXNoQm91bmRhcnlkYXNoQm91bmRhcnlEYXNoZGFzaEJvdW5kYXJ5UmVhZEZvcm1tYXhNZW1vcnlyZWFkRm9ybV9OZXh0UGFydE5leHRSYXdQYXJ0bmV4dFBhcnRyYXdQYXJ0aXNGaW5hbEJvdW5kYXJ5aXNCb3VuZGFyeURlbGltaXRlckxpbmVtdWx0aXBhcnRSZWFkZXJhbGxvd01peGVkaXNIMlVwZ3JhZGVXcml0ZVByb3h5dXNpbmdQcm94eWV4dHJhSGVhZGVyc3dhaXRGb3JDb250aW51ZUJhc2ljQXV0aFNldEJhc2ljQXV0aFBhcnNlRm9ybVBhcnNlTXVsdGlwYXJ0Rm9ybUZvcm1WYWx1ZVBvc3RGb3JtVmFsdWVGb3JtRmlsZVBhdGhWYWx1ZVNldFBhdGhWYWx1ZXBhdEluZGV4ZXhwZWN0c0NvbnRpbnVld2FudHNIdHRwMTBLZWVwQWxpdmV3YW50c0Nsb3NlaXNSZXBsYXlhYmxlb3V0Z29pbmdMZW5ndGhyZXF1aXJlc0hUVFAxU2VydmVIVFRQSGFuZGxlckZ1bmNNTVVIYW5kbGVyRnVuY21tdW11JEdPUk9PVC9zcmMvc3luYy9tdXRleC5nb3NlbWFMb2NrVHJ5TG9ja2xvY2tTbG93VW5sb2NrdW5sb2NrU2xvd25ld011dGV4JEdPUk9PVC9zcmMvc3luYy9hdG9taWMvZG9jLmdvc3dhcHBlZENvbXBhcmVBbmRTd2FwSW50MzJBZGRJbnQzMmNhY2hlJEdPUk9PVC9zcmMvc3luYy9vbmNlLmdvZG9uZSRHT1JPT1Qvc3JjL3N5bmMvYXRvbWljL3R5cGUuZ29ub0NvcHlMb2FkU3RvcmVDb21wYXJlQW5kU3dhcExvYWRVaW50MzJEb29kb1Nsb3dPbmNldXRpbG1tdUN1cnZlc2VyaWVzc3Vtc21lYW5kdXJ0b3RhbFV0aWxiYW5kc21pblV0aWxjdW1VdGlsaW50ZWdyYXRvcmFkdmFuY2VuZXh0bW11QmFuZGJhbmREdXJiYW5kVGltZW1rQmFuZFV0aWx3aW5kb3d1dGlsQm91bmRiYW5kVXRpbGJhbmRNTVViYW5kSWR4YWNjYm91bmRuV29yc3R3SGVhcFV0aWxXaW5kb3dQdXNoUG9wdXRpbEhlYXBtdWQkR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS9tdWQuZ29zb3J0ZWRkaXJhY2VkZ2V1bnNvcnRlZHRyYWNrTWFzc3RyYWNrQnVja2V0dHJhY2tTdW1oaXN0YXJlYXNldFRyYWNrTWFzc21hc3NhcHByb3hJbnZDdW11bGF0aXZlU3VtaW52Q3VtdWxhdGl2ZVN1bXByZWNpc2VNYXNzbGFzdFRpbWVsYXN0TVVyZXNldFRpbWVhZGRNVWFjY3VtdWxhdG9ybW11U2VyaWVzZXNjOgADTU1VRXhhbXBsZXN3b3JzdE1VRHF1YW50aWxlc01NVUN1cnZlAW1tdUNhY2hlRW50cnlmbGFnc0hhbmRsZVBsb3RIYW5kbGVEZXRhaWxzbmV3TGlua2VkVXRpbFdpbmRvd3VpbGlua2VkVXRpbFdpbmRvd21vZGVwbG90ZGV0YWlscyRHT1JPT1Qvc3JjL25ldC9odHRwL2ZzLmdvcmVxbW9kdGltZVJlYWRTZWVrZXJTZXJ2ZUNvbnRlbnQkR09ST09UL3NyYy9zdHJpbmdzL3JlYWRlci5nb3ByZXZSdW5lTmV3UmVhZGVydGVtcGxNTVV2aWV3c1Jhbmdlc3JhbmdlSWR4Vmlld0hhbmRsZXJNYWluSGFuZGxlciRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvdGVtcGxhdGUuZ29lc2NhcGVFcnIkR09ST09UL3NyYy90ZXh0L3RlbXBsYXRlL3RlbXBsYXRlLmdvVHJlZSRHT1JPT1Qvc3JjL3RleHQvdGVtcGxhdGUvcGFyc2UvcGFyc2UuZ29QYXJzZU5hbWVSb290JEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9wYXJzZS9ub2RlLmdvTm9kZVR5cGVQb3NQb3NpdGlvbnRyTm9kZXN0cmVld3JpdGVUbyRHT1JPT1Qvc3JjL3N0cmluZ3MvYnVpbGRlci5nb2NvcHlDaGVja0NhcGdyb3dHcm93V3JpdGVCeXRlV3JpdGVSdW5lV3JpdGVTdHJpbmdCdWlsZGVyU2xpY2VEYXRhTm9kZWFwcGVuZHNiQ29weUxpc3RMaXN0Tm9kZWVzYzoCAAABTW9kZWZ1bmNzbGV4JEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9wYXJzZS9sZXguZ29sZWZ0RGVsaW1yaWdodERlbGltYXRFT0ZwYXJlbkRlcHRoaXRlbWl0ZW1UeXBlaW5zaWRlQWN0aW9ub3B0aW9uc2VtaXRDb21tZW50YnJlYWtPS2NvbnRpbnVlT0tsZXhPcHRpb25zcGVla2JhY2t1cHRoaXNJdGVtZW1pdHN0YXRlRm5lbWl0SXRlbWFjY2VwdHZhbGlkYWNjZXB0UnVuZXJyb3JmYXJnc25leHRJdGVtYXRSaWdodERlbGltdHJpbVNwYWNlc2F0VGVybWluYXRvcnNjYW5OdW1iZXJsZXhlcmVzYzoAAQJwZWVrQ291bnR2YXJzdHJlZVNldGFjdGlvbkxpbmVyYW5nZURlcHRobmV3TGlzdG5ld1RleHRUZXh0Tm9kZW5ld0NvbW1lbnRDb21tZW50Tm9kZW5ld1BpcGVsaW5lSWRlbnRWYXJpYWJsZU5vZGVJc0Fzc2lnbkRlY2xDbWRzQXJnc0NvbW1hbmROb2RlY29tbWFuZENvcHlQaXBlUGlwZU5vZGVuZXdBY3Rpb25waXBlUGlwZUFjdGlvbk5vZGVlc2M6Bm5ld0NvbW1hbmRuZXdWYXJpYWJsZWlkZW50bmV3RG90RG90Tm9kZW5ld05pbE5pbE5vZGVuZXdGaWVsZEZpZWxkTm9kZW5ld0NoYWlubm9kZUZpZWxkQ2hhaW5Ob2RlbmV3Qm9vbHRydWVUcnVlQm9vbE5vZGVuZXdOdW1iZXJJc0ludElzVWludElzRmxvYXRJc0NvbXBsZXhDb21wbGV4MTI4c2ltcGxpZnlDb21wbGV4TnVtYmVyTm9kZW9yaWdRdW90ZWRTdHJpbmdOb2RlbmV3RW5kZW5kTm9kZW5ld0Vsc2VlbHNlTm9kZW5ld0lmZWxzZUxpc3RCcmFuY2hOb2RlTGlzdEVsc2VMaXN0SWZOb2RlbmV3QnJlYWtCcmVha05vZGVuZXdDb250aW51ZUNvbnRpbnVlTm9kZW5ld1JhbmdlUmFuZ2VOb2RlbmV3V2l0aFdpdGhOb2RlbmV3VGVtcGxhdGVUZW1wbGF0ZU5vZGViYWNrdXAydDFiYWNrdXAzdDJuZXh0Tm9uU3BhY2VwZWVrTm9uU3BhY2VFcnJvckNvbnRleHRsb2NhdGlvbmV4cGVjdGV4cGVjdGVkZXhwZWN0T25lT2ZleHBlY3RlZDFleHBlY3RlZDJ1bmV4cGVjdGVkcmVjb3ZlcmVycnBzdGFydFBhcnNlc3RvcFBhcnNlcGFyc2VEZWZpbml0aW9uaXRlbUxpc3R0ZXh0T3JBY3Rpb25jbGVhckFjdGlvbkxpbmVhY3Rpb25icmVha0NvbnRyb2xjb250aW51ZUNvbnRyb2xwaXBlbGluZWNoZWNrUGlwZWxpbmVwYXJzZUNvbnRyb2xhbGxvd0Vsc2VJZmlmQ29udHJvbHJhbmdlQ29udHJvbHdpdGhDb250cm9sZW5kQ29udHJvbGVsc2VDb250cm9sYmxvY2tDb250cm9sdGVtcGxhdGVDb250cm9scGFyc2VUZW1wbGF0ZU5hbWVvcGVyYW5kdGVybWhhc0Z1bmN0aW9ucG9wVmFyc3VzZVZhcmNvbW1vbnRtcGxtdVRtcGwkR09ST09UL3NyYy9zeW5jL3J3bXV0ZXguZ293cml0ZXJTZW1yZWFkZXJTZW1yZWFkZXJDb3VudEludDMycmVhZGVyV2FpdFJMb2NrcndUcnlSTG9ja1JVbmxvY2tyVW5sb2NrU2xvd1JMb2NrZXJMb2NrZXJSV011dGV4b3B0aW9uJEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9vcHRpb24uZ29taXNzaW5nS2V5bWlzc2luZ0tleUFjdGlvbm11RnVuY3NwYXJzZUZ1bmNzJEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9mdW5jcy5nb0Z1bmNNYXBleGVjRnVuY3MkR09ST09UL3NyYy9yZWZsZWN0L3ZhbHVlLmdvdHlwXyRHT1JPT1Qvc3JjL2ludGVybmFsL2FiaS90eXBlLmdvU2l6ZV9QdHJCeXRlc0hhc2hURmxhZ0FsaWduX0ZpZWxkQWxpZ25fS2luZF9HQ0RhdGFTdHJOYW1lT2ZmUHRyVG9UaGlzVHlwZU9mZktpbmRIYXNOYW1lUG9pbnRlcnNJZmFjZUluZGlySXNEaXJlY3RJZmFjZUdjU2xpY2ViZWdpbkNvbW1vbkNoYW5EaXJVbmNvbW1vblBrZ1BhdGhNY291bnRYY291bnRNb2ZmTWV0aG9kc010eXBJZm5UZXh0T2ZmVGZuRXhwb3J0ZWRNZXRob2RzVW5jb21tb25UeXBlRWxlbVN0cnVjdFR5cGVEYXRhQ2hlY2tlZHdoeVNhZmVEYXRhSXNFeHBvcnRlZEhhc1RhZ0lzRW1iZWRkZWRSZWFkVmFyaW50SXNCbGFua0ZpZWxkc1R5cEVtYmVkZGVkU3RydWN0RmllbGRNYXBUeXBlS2V5QnVja2V0SGFzaGVyS2V5U2l6ZVZhbHVlU2l6ZUJ1Y2tldFNpemVGbGFnc0luZGlyZWN0S2V5bXRJbmRpcmVjdEVsZW1SZWZsZXhpdmVLZXlOZWVkS2V5VXBkYXRlSGFzaE1pZ2h0UGFuaWNBcnJheVR5cGVGdW5jVHlwZUluQ291bnRPdXRDb3VudE51bUluTnVtT3V0SW5TbGljZU91dFNsaWNlSXNWYXJpYWRpY0ludGVyZmFjZVR5cGVJbWV0aG9kTnVtTWV0aG9kQWxpZ25GaWVsZEFsaWduZmxhZ2tpbmQkR09ST09UL3NyYy9yZWZsZWN0L3R5cGUuZ29yb211c3RCZW11c3RCZUV4cG9ydGVkbXVzdEJlRXhwb3J0ZWRTbG93bXVzdEJlQXNzaWduYWJsZW11c3RCZUFzc2lnbmFibGVTbG93cGFuaWNOb3RNYXBwb2ludGVyQm9vbHBhbmljTm90Qm9vbGJ5dGVzU2xvd3J1bmVzQ2FuQWRkckNhblNldENhbGxDYWxsU2xpY2VjYWxsY2FwTm9uU2xpY2VDYW5Db21wbGV4Q29tcGxleEZpZWxkQnlJbmRleEZpZWxkQnlJbmRleEVyckZpZWxkQnlOYW1lRmllbGRCeU5hbWVGdW5jQ2FuRmxvYXRGbG9hdEluZGV4Q2FuSW50Q2FuSW50ZXJmYWNlSW50ZXJmYWNlSW50ZXJmYWNlRGF0YUlzTmlsSXNWYWxpZFNldFplcm9sZW5Ob25TbGljZU1hcEluZGV4TWFwS2V5c1NldEl0ZXJLZXlpdGVyaGl0ZXJidWNrZXRzYnB0cm92ZXJmbG93b2xkb3ZlcmZsb3dzdGFydEJ1Y2tldHdyYXBwZWRCYnVja2V0Y2hlY2tCdWNrZXRpbml0aWFsaXplZE1hcEl0ZXJTZXRJdGVyVmFsdWVNYXBSYW5nZU1ldGhvZEJ5TmFtZU51bUZpZWxkT3ZlcmZsb3dDb21wbGV4T3ZlcmZsb3dGbG9hdE92ZXJmbG93SW50T3ZlcmZsb3dVaW50UG9pbnRlclJlY3ZyZWN2bmJTZW5kc2VuZHNlbGVjdGVkU2V0Qm9vbHNldFJ1bmVzU2V0Q29tcGxleFNldEZsb2F0U2V0SW50U2V0TGVuU2V0Q2FwU2V0TWFwSW5kZXhTZXRVaW50U2V0UG9pbnRlclNsaWNlM3N0cmluZ05vblN0cmluZ1RyeVJlY3ZUcnlTZW5kQXNzaWduYWJsZVRvQ29tcGFyYWJsZUNvbnZlcnRpYmxlVG90YWdMb29rdXBTdHJ1Y3RUYWdBbm9ueW1vdXNJbXBsZW1lbnRzRnVuY3VuY29tbW9udHlwZVNsb3dDYW5VaW50VWludFVuc2FmZUFkZHJVbnNhZmVQb2ludGVyZXh0ZW5kU2xpY2VDbGVhcmFzc2lnblRvdGFyZ2V0Q29udmVydENhbkNvbnZlcnQkR09ST09UL3NyYy90ZXh0L3RlbXBsYXRlL2V4ZWMuZ29FeGVjdXRlVGVtcGxhdGV3ckV4ZWN1dGVleGVjdXRlRGVmaW5lZFRlbXBsYXRlcyRHT1JPT1Qvc3JjL3RleHQvdGVtcGxhdGUvaGVscGVyLmdvUGFyc2VGaWxlc2ZpbGVuYW1lc1BhcnNlR2xvYlBhcnNlRlNmc3lzJEdPUk9PVC9zcmMvaW8vZnMvZnMuZ29TdGF0SXNEaXJNb2RUaW1lSXNSZWd1bGFyRmlsZU1vZGVTeXNGaWxlSW5mb0ZTcGF0dGVybnNPcHRpb25vcHRzZXRPcHRpb25OZXdjb3B5QWRkUGFyc2VUcmVlVGVtcGxhdGVzRGVsaW1zbGVmdHJpZ2h0RnVuY3NmdW5jTWFwYXNzb2NpYXRlVGVtcGxhdGVuYW1lU3BhY2Vlc2NhcGVkZXNjJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9lc2NhcGUuZ29uc291dHB1dCRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvY29udGV4dC5nbyRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvc3RhdGVfc3RyaW5nLmdvJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9kZWxpbV9zdHJpbmcuZ291cmxQYXJ0JEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS91cmxwYXJ0X3N0cmluZy5nb2pzQ3R4JEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9qc2N0eF9zdHJpbmcuZ29qc0JyYWNlRGVwdGhhdHRyJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9hdHRyX3N0cmluZy5nb2VsZW1lbnQkR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2VsZW1lbnRfc3RyaW5nLmdvJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9lcnJvci5nb0Vycm9yQ29kZURlc2NyaXB0aW9uRXJyb3JlcW1hbmdsZXRlbXBsYXRlTmFtZWRlcml2ZWRjYWxsZWRhY3Rpb25Ob2RlRWRpdHN0ZW1wbGF0ZU5vZGVFZGl0c3RleHROb2RlRWRpdHNyYW5nZUNvbnRleHRvdXRlcmJyZWFrc2NvbnRpbnVlc2VzY2FwZWVzY2FwZUFjdGlvbmVzY2FwZUJyYW5jaG5vZGVOYW1lZXNjYXBlTGlzdGVzY2FwZUxpc3RDb25kaXRpb25hbGx5ZXNjYXBlVGVtcGxhdGVlc2NhcGVUcmVlY29tcHV0ZU91dEN0eGVzY2FwZVRlbXBsYXRlQm9keWVzY2FwZVRleHRlZGl0QWN0aW9uTm9kZWNtZHNlZGl0VGVtcGxhdGVOb2RlY2FsbGVlZWRpdFRleHROb2RlY29tbWl0YXJiaXRyYXJ5VGVtcGxhdGVlc2NhcGVyZXNjOgAAAARjaGVja0NhblBhcnNlbG9va3VwQW5kRXNjYXBlVGVtcGxhdGVlc2M6AAIAAWVzYzoDAgABdGVtcGxNYWluTW9kZUdvcm91dGluZU9yaWVudGVkTW9kZVRhc2tPcmllbnRlZE1vZGVUaHJlYWRPcmllbnRlZE5ld0VtaXR0ZXJQcm9maWxlRnVuY1NWR1Byb2ZpbGVIYW5kbGVyRnVuY3Jhd0NvbnRlbnQtVHlwZWFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbWZhaWxmdGV4dC9wbGFpbjsgY2hhcnNldD11dGYtOFgtR28tUHByb2YxcmVjb3Jkc2ZhaWxlZCB0byBnZXQgcmVjb3JkczogJXZmYWlsZWQgdG8gd3JpdGUgcHJvZmlsZTogJXZibG9ja2YkR09ST09UL3NyYy9vcy90eXBlcy5nb2ZpbGUkR09ST09UL3NyYy9vcy9maWxlX3VuaXguZ29wZmQkR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL2ZkX3VuaXguZ29mZG11JEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9mZF9tdXRleC5nb3JzZW1hd3NlbWFpbmNyZWZpbmNyZWZBbmRDbG9zZWRlY3JlZnJ3bG9ja3JlYWRyd3VubG9ja2ZkTXV0ZXhTeXNmZFN5c0ZpbGUkR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL2ZkX3VuaXhqcy5nb2lvdmVjc0Jhc2UkR09ST09UL3NyYy9zeXNjYWxsL3N5c2NhbGxfZGFyd2luX2FtZDY0LmdvaW92SW92ZWNkZXN0cm95ZmRwZCRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvZmRfcG9sbF9ydW50aW1lLmdvcnVudGltZUN0eGNsb3NlZXZpY3RwcmVwYXJlaXNGaWxlcHJlcGFyZVJlYWRwcmVwYXJlV3JpdGV3YWl0d2FpdFJlYWR3YWl0V3JpdGV3YWl0Q2FuY2VsZWRwb2xsYWJsZXBvbGxEZXNjY3NlbWFpc0Jsb2NraW5nSXNTdHJlYW1aZXJvUmVhZElzRU9GJEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9mZF9mc3luY19kYXJ3aW4uZ29Gc3luY3JlYWRMb2NrcmVhZFVubG9ja3dyaXRlTG9ja3dyaXRlVW5sb2NrJEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9mZF9vcGVuZGlyX2Rhcndpbi5nb09wZW5EaXIkR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL2ZkX3Bvc2l4LmdvZW9mRXJyb3JTaHV0ZG93bmhvd0ZjaG93bnVpZGdpZEZ0cnVuY2F0ZVJhd0NvbnRyb2xJbml0U2V0QmxvY2tpbmdQcmVhZFJlYWRGcm9tUmVhZEZyb21JbmV0NEZhbWlseVplcm9SYXdTb2NrYWRkckluZXQ0JEdPUk9PVC9zcmMvc3lzY2FsbC9zeXNjYWxsX2JzZC5nb3NhU29ja2FkZHJJbmV0NFJlYWRGcm9tSW5ldDZab25lSWRGbG93aW5mb1Njb3BlX2lkUmF3U29ja2FkZHJJbmV0NlNvY2thZGRySW5ldDZSZWFkTXNnb29iUmVhZE1zZ0luZXQ0c2E0UmVhZE1zZ0luZXQ2c2E2UHdyaXRlV3JpdGVUb0luZXQ0V3JpdGVUb0luZXQ2V3JpdGVNc2dXcml0ZU1zZ0luZXQ0V3JpdGVNc2dJbmV0NkFjY2VwdEZjaG1vZEZzdGF0RGV2TmxpbmtJbm9VaWRHaWRSZGV2UGFkX2Nnb18wQXRpbWVzcGVjU2VjTnNlYyRHT1JPT1Qvc3JjL3N5c2NhbGwvc3lzY2FsbC5nb05hbm9UaW1lc3BlY010aW1lc3BlY0N0aW1lc3BlY0JpcnRodGltZXNwZWNCbG9ja3NCbGtzaXplR2VuTHNwYXJlUXNwYXJlU3RhdF90RHVwV2FpdFdyaXRlV3JpdGVPbmNlUmF3UmVhZFJhd1dyaXRlRmNoZGlyUmVhZERpcmVudCRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvc29ja29wdC5nb1NldHNvY2tvcHRJbnRsZXZlbFNldHNvY2tvcHRJbmV0NEFkZHJTZXRzb2Nrb3B0TGluZ2VyT25vZmZMaW5nZXJHZXRzb2Nrb3B0SW50JEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9zb2Nrb3B0X3VuaXguZ29TZXRzb2Nrb3B0Qnl0ZSRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvc29ja29wdGlwLmdvU2V0c29ja29wdElQTXJlcW1yZXFNdWx0aWFkZHJJUE1yZXFTZXRzb2Nrb3B0SVB2Nk1yZXFJUHY2TXJlcSRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvd3JpdGV2LmdvV3JpdGV2RkRkaXJpbmZvJEdPUk9PVC9zcmMvb3MvZGlyX2Rhcndpbi5nb2RpcmRpckluZm9ub25ibG9ja3N0ZG91dE9yRXJyYXBwZW5kTW9kZSRHT1JPT1Qvc3JjL29zL2Rpci5nb1JlYWRkaXJSZWFkZGlybmFtZXNuYW1lc1JlYWREaXJJbmZvRGlyRW50cnlyZWFkZGlycmVhZGRpck1vZGVkaXJlbnRzaW5mb3MkR09ST09UL3NyYy9vcy9maWxlLmdvV3JpdGVBdHdyYXBFcnJDaG1vZFN5c2NhbGxDb25uJEdPUk9PVC9zcmMvc3lzY2FsbC9uZXQuZ29Db250cm9sUmF3Q29ubiRHT1JPT1Qvc3JjL29zL2ZpbGVfcG9zaXguZ29wcmVhZHB3cml0ZWNobW9kQ2hvd25TeW5jQ2hkaXJzZXREZWFkbGluZXNldFJlYWREZWFkbGluZXNldFdyaXRlRGVhZGxpbmVjaGVja1ZhbGlkRmRzZWVrJEdPUk9PVC9zcmMvb3Mvc3RhdF91bml4LmdvJEdPUk9PVC9zcmMvb3MvemVyb19jb3B5X3N0dWIuZ293cml0dGVuaGFuZGxlZHJlYWRGcm9tJEdPUk9PVC9zcmMvb3MvZXJyb3IuZ29FcnJJbnZhbGlkJEdPUk9PVC9zcmMvb3MvdGVtcGZpbGUuZ29DcmVhdGVUZW1wYmxvY2tmYWlsZWQgdG8gY3JlYXRlIHRlbXAgZmlsZTogJXZSZW1vdmVmYWlsZWQgdG8gZ2VuZXJhdGUgcHJvZmlsZTogJXZibG9ja2JBdmFpbGFibGVBdmFpbGFibGVCdWZmZXJubk5ld1dyaXRlck5ld1dyaXRlclNpemVmYWlsZWQgdG8gZmx1c2ggdGVtcCBmaWxlOiAldmZhaWxlZCB0byBjbG9zZSB0ZW1wIGZpbGU6ICV2c3ZnRmlsZW5hbWUuc3ZnJEdPUk9PVC9zcmMvb3MvZXhlYy9leGVjLmdvRW52RGlyU3RkaW5TdGRvdXRTdGRlcnJFeHRyYUZpbGVzU3lzUHJvY0F0dHIkR09ST09UL3NyYy9zeXNjYWxsL2V4ZWNfbGliYzIuZ29DaHJvb3RDcmVkZW50aWFsJEdPUk9PVC9zcmMvc3lzY2FsbC9leGVjX3VuaXguZ29Hcm91cHNOb1NldEdyb3Vwc1B0cmFjZVNldHNpZFNldHBnaWRTZXRjdHR5Tm9jdHR5Q3R0eUZvcmVncm91bmRQZ2lkUHJvY2VzcyRHT1JPT1Qvc3JjL29zL2V4ZWMuZ29QaWRoYW5kbGVpc2RvbmVzaWdNdXNldERvbmVSZWxlYXNlS2lsbFdhaXQkR09ST09UL3NyYy9vcy9leGVjX3Bvc2l4LmdvcGlkc3RhdHVzRXhpdGVkRXhpdFN0YXR1c1NpZ25hbGVkU2lnbmFsQ29yZUR1bXBTdG9wcGVkQ29udGludWVkU3RvcFNpZ25hbFRyYXBDYXVzZVdhaXRTdGF0dXNydXNhZ2VVdGltZVVzZWN0dlRpbWV2YWxTdGltZU1heHJzc0l4cnNzSWRyc3NJc3Jzc01pbmZsdE1hamZsdE5zd2FwSW5ibG9ja091YmxvY2tNc2dzbmRNc2dyY3ZOc2lnbmFsc052Y3N3Tml2Y3N3UnVzYWdlVXNlclRpbWVTeXN0ZW1UaW1lU3VjY2Vzc1N5c1VzYWdlZXhpdGVkc3VjY2Vzc3N5c1VzYWdlRXhpdENvZGUkR09ST09UL3NyYy9vcy9leGVjX3VuaXguZ291c2VyVGltZXN5c3RlbVRpbWVQcm9jZXNzU3RhdGVraWxscHNzaWduYWxyZWxlYXNlJEdPUk9PVC9zcmMvb3Mvd2FpdF91bmltcC5nb2Jsb2NrVW50aWxXYWl0YWJsZVdhaXREZWxheWNoaWxkSU9GaWxlc3BhcmVudElPUGlwZXNnb3JvdXRpbmVnb3JvdXRpbmVFcnJjdHhSZXN1bHR0aW1lciRHT1JPT1Qvc3JjL3RpbWUvc2xlZXAuZ29DcHBwZXJpb2RzZXFuZXh0d2hlbnJ1bnRpbWVUaW1lclN0b3BUaW1lcmNyZWF0ZWRCeVN0YWNrbG9va1BhdGhFcnJhcmd2Y2hpbGRTdGRpbmNoaWxkU3Rkb3V0Y2hpbGRTdGRlcnJ3cml0ZXJEZXNjcmlwdG9yUnVud2F0Y2hDdHhyZXN1bHRjYXdhaXRHb3JvdXRpbmVzT3V0cHV0Q29tYmluZWRPdXRwdXRTdGRpblBpcGVXcml0ZUNsb3NlclN0ZG91dFBpcGVTdGRlcnJQaXBlZW52aXJvbkVudmlyb25DbWRlc2M6AwIAAkNvbW1hbmRnb0NtZHRvb2xwcHJvZi1zdmctb3V0cHV0ZmFpbGVkIHRvIGV4ZWN1dGUgZ28gdG9vbCBwcHJvZjogJXYKJXNpbWFnZS9zdmcreG1sU2VydmVGaWxlbWF4c3BsaXR0ZXJTcGxpdHRpbmdUcmFjZUNvbnN1bWVyU3RhdGljSGFuZGxlcnJvb3RGaWxlU3lzdGVtRmlsZVNlcnZlcmZpbGVIYW5kbGVyaW9GUyRHT1JPT1Qvc3JjL2VtYmVkL2VtYmVkLmdvZmlsZXNyZWFkRGlyUmVhZEZpbGVzdGF0aWNDb250ZW50VGhyZWFkU3RhdGVJblN5c2NhbGxUaHJlYWRTdGF0ZUluU3lzY2FsbFJ1bnRpbWVUaHJlYWRTdGF0ZVJ1bm5pbmckR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9oaXN0b2dyYW0uZ29CdWNrZXRzTWluQnVja2V0TWF4QnVja2V0QnVja2V0TWluVG9IVE1MdXJsbWFrZXIkR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2NvbnRlbnQuZ29IVE1MVGltZUhpc3RvZ3JhbSRHT1JPT1Qvc3JjL21hdGgvZXhwLmdvJEdPUk9PVC9zcmMvbWF0aC9leHBfYXNtLmdvYXJjaEV4cGxvZ0RpdlRyYWNlSGFuZGxlciRHT1JPT1Qvc3JjL3N0cmluZ3Mvc3RyaW5ncy5nb1JlcGxhY2V0ZW1wbFRyYWNle3tQQVJBTVN9fXByb2NWaWV3UHJvY1ZpZXdUaHJlYWRzdGFydElkeGVuZElkeFZpZXdlckRhdGFUcmFjZUNvbnN1bWVyYWxsRnJhbWVzZm5XYWxrU3RhY2tGcmFtZXMoKkVtaXR0ZXIpLkdvbWF4cHJvY3MoKkVtaXR0ZXIpLlJlc291cmNlKCpFbWl0dGVyKS5TZXRSZXNvdXJjZVR5cGUoKkVtaXR0ZXIpLlNldFJlc291cmNlRmlsdGVyKCpFbWl0dGVyKS5UYXNrKCpFbWl0dGVyKS5UYXNrU2xpY2UoKkVtaXR0ZXIpLlRhc2tBcnJvdygqRW1pdHRlcikuRXZlbnQoKkVtaXR0ZXIpLkhlYXBBbGxvYygqRW1pdHRlcikuRm9jdXMoKkVtaXR0ZXIpLkhlYXBHb2FsKCpFbWl0dGVyKS50c1dpdGhpblJhbmdlKCpFbWl0dGVyKS5PcHRpb25hbEV2ZW50KCpFbWl0dGVyKS5TdGFja1JhbmdlLlVSTE1JTUVIZWFkZXIuU2V0SGVhZGVyLlNldCgqTXV0ZXgpLkxvY2soKk11dGV4KS5VbmxvY2soKlVpbnQzMikuTG9hZCgqT25jZSkuRG8oKk1NVUN1cnZlKS5NTVUoKkJ1aWxkZXIpLlN0cmluZygqRmlsZSkuTmFtZSgqRmlsZSkuQ2xvc2UoKlRpbWVIaXN0b2dyYW0pLkJ1Y2tldE1pbugCAwAGAAYBBgIGAwYEBgUGBgYHBggGCQYKBgsGDAYNBg4GDwYQBhEGEgYTBhQGFQYWBhcGGAYZBhoGGwYcBh0GHgYfBiAGIQYiBiMGJAYlBiYGJwYoBikGKgYrBiwGLQYuBi8GMAYxBjIGMwY0BjUGNgY3BjgGOQY6BjsGPAY9Bj4GPwZABkEGQgZDBkQGRQZGBkcGSAZJBkoGSwZMBk0GTgZPBlAGUQZSBlMGVAZVBlYGVwZYBlkGWgZbBlwGXQZeBl8GYAZhBmIGYwZkBmUGZgZnBmgGaQZqBmsGbAZtBm4GbwZwBnEGcgZzBnQGdQZ2BncGeAZ5BnoGewZ8Bn0GfgZ/BoABBoEBBoIBBoMBBoQBBoUBBoYBBocBBogBBokBBooBBosBBowBBo0BBo4BBo8BBpABBpEBBpIBBpMBBpQBBpUBBpYBBpcBBpgBBpkBBpoBBpsBBpwBBp0BBp4BBp8BBqABBqEBBqIBBqMBBqQBBqUBBqYBBqcBBqgBBqkBBqoBBqsBBqwBBq0BBq4BBq8BBrABBrEBBrIBBrMBBrQBBrUBBrYBBrcBBrgBBrkBBroBBrsBBrwBBr0BBr4BBr8BBsABBsEBBsIBBsMBBsQBBsUBBsYBBscBBsgBBskBBsoBBssBBswBBs0BBs4BBs8BBtABBtEBBtIBBtMBBtQBBtUBBtYBBtcBBtgBBtkBBtoBBtsBBtwBBt0BBt4BBt8BBuABBuEBBuIBBuMBBuQBBuUBBuYBBucBBugBBukBBuoBBusBBuwBBu0BBu4BBu8BBvABBvEBBvIBBvMBBvQBBvUBBvYBBvcBBvgBBvkBBvoBBvsBBvwBBv0BBv4BBv8BBoACBoECBoICBoMCBoQCBoUCBoYCBocCBogCBokCBooCBosCBowCBo0CBo4CBo8CBpACBpECBpICBpMCBpQCBpUCBpYCBpcCBpgCBpkCBpoCBpsCBpwCBp0CBp4CBp8CBqACBqECBqICBqMCBqQCBqUCBqYCBqcCBqgCBqkCBqoCBqsCBqwCBq0CBq4CBq8CBrACBrECBrICBrMCBrQCBrUCBrYCBrcCBrgCBrkCBroCBrsCBrwCBr0CBr4CBr8CBsACBsECBsICBsMCBsQCBsUCBsYCBscCBsgCBskCBsoCBssCBswCBs0CBs4CBs8CBtACBtECBtICBtMCBtQCBtUCBtYCBtcCBtgCBtkCBtoCBtsCBtwCBt0CBt4CBt8CBuACBuECBuICBuMCBuQCBuUCBuYCAADnAgABAAACAAADAAAEAAAFAAAGAAAHAAAIAAAJAAAKAAALAAAMAAANAAAOAAAPAAAQAAARAAASAAATAAAUAAAVAAAWAAAXAAAYAAAZAAAaAAAbAAAcAAAdAAAeAAAfAAAgAAAhAAAiAAAjAAAkAAAlAAAmAAAnAAAoAAApAAAqAAArAAAsAAAtAAAuAAAvAAAwAAAxAAAyAAAzAAA0AAA1AAA2AAA3AAA4AAA5AAA6AAA7AAA8AAA9AAA+AAA/AABAAABBAABCAABDAABEAABFAABGAABHAABIAABJAABKAABLAABMAABNAABOAABPAABQAABRAABSAABTAABUAABVAABWAABXAABYAABZAABaAABbAABcAABdAABeAABfAABgAABhAABiAABjAABkAABlAABmAABnAABoAABpAABqAABrAABsAABtAABuAABvAABwAABxAAByAABzAAB0AAB1AAB2AAB3AAB4AAB5AAB6AAB7AAB8AAB9AAB+AAB/AACAAQAAgQEAAIIBAACDAQAAhAEAAIUBAACGAQAAhwEAAIgBAACJAQAAigEAAIsBAACMAQAAjQEAAI4BAACPAQAAkAEAAJEBAACSAQAAkwEAAJQBAACVAQAAlgEAAJcBAACYAQAAmQEAAJoBAACbAQAAnAEAAJ0BAACeAQAAnwEAAKABAAChAQAAogEAAKMBAACkAQAApQEAAKYBAACnAQAAqAEAAKkBAACqAQAAqwEAAKwBAACtAQAArgEAAK8BAACwAQAAsQEAALIBAACzAQAAtAEAALUBAAC2AQAAtwEAALgBAAC5AQAAugEAALsBAAC8AQAAvQEAAL4BAAC/AQAAwAEAAMEBAADCAQAAwwEAAMQBAADFAQAAxgEAAMcBAADIAQAAyQEAAMoBAADLAQAAzAEAAM0BAADOAQAAzwEAANABAADRAQAA0gEAANMBAADUAQAA1QEAANYBAADXAQAA2AEAANkBAADaAQAA2wEAANwBAADdAQAA3gEAAN8BAADgAQAA4QEAAOIBAADjAQAA5AEAAOUBAADmAQAA5wEAAOgBAADpAQAA6gEAAOsBAADsAQAA7QEAAO4BAADvAQAA8AEAAPEBAADyAQAA8wEAAPQBAAD1AQAA9gEAAPcBAAD4AQAA+QEAAPoBAAD7AQAA/AEAAP0BAAD+AQAA/wEAAIACAACBAgAAggIAAIMCAACEAgAAhQIAAIYCAACHAgAAiAIAAIkCAACKAgAAiwIAAIwCAACNAgAAjgIAAI8CAACQAgAAkQIAAJICAACTAgAAlAIAAJUCAACWAgAAlwIAAJgCAACZAgAAmgIAAJsCAACcAgAAnQIAAJ4CAACfAgAAoAIAAKECAACiAgAAowIAAKQCAAClAgAApgIAAKcCAACoAgAAqQIAAKoCAACrAgAArAIAAK0CAACuAgAArwIAALACAACxAgAAsgIAALMCAAC0AgAAtQIAALYCAAC3AgAAuAIAALkCAAC6AgAAuwIAALwCAAC9AgAAvgIAAL8CAADAAgAAwQIAAMICAADDAgAAxAIAAMUCAADGAgAAxwIAAMgCAADJAgAAygIAAMsCAADMAgAAzQIAAM4CAADPAgAA0AIAANECAADSAgAA0wIAANQCAADVAgAA1gIAANcCAADYAgAA2QIAANoCAADbAgAA3AIAAN0CAADeAgAA3wIAAOACAADhAgAA4gIAAOMCAADkAgAA5QIAAOYCAADnAgBYAIcCAPUTCQAA9hMJAQD3EwkCAPgTCQMA+RMJBAD6EwkFAOoFCQYA+xMJBwD8EwkIAP0TCQkA/hMJCgD/EwkLAIAUCQwAgRQJDQCCFAkOAIMUCQ8A5QEAhBQJEAB3AIUUCREAkgwJEgApAIYUCRMAhxQJFAAqAIgUCRUAiRQJFgBSAIoUCRcATgD8DAkZAIMNCRoAixQJHADtEAkdADwAjBQJIACNFAkhAF0AwBIJIwDBEgkkAMsTCSUAzhMJJgCdEAknAI4UCSgAGwDYCAkpAOcTCSoAgwQJLAEnAAECAAMEAAUGAAcIAAkKAAsMAA0OAA8QABESABMUABUWABcYABkaABscAB0eAB8gISIjJCUmACcoKSorKSwtLi8wKTEyMzQ1Njc4ADk6Njs8AD0+P0BBP0JDREVGREdIAElKJEtMJE1OAE9QUVJTAFRVNlZXAQCIAgABAQCLAgABAQCuAgABAQCwAgABAQC5AgABAQC/AgABAQDCAgABAQDdAgABAQD1AgABAQD5AgABAQD8AgABAQCVAwABAQClAwABAQCvAwABAQC8AwABAQDYBAABAQC8AwABAQD5BAABAQCFBQABAQCMBQABAQDzBQABAQD7BQABAQD7BQABAQD+BQABAQCDBgABAQCFBgABAQCPBgABAQCUBgABAQCLAgABAQCdBgABAQCxBgABAQC3BgABAQCABwABAQCABwABAQCCBwABAQCCBwABAQCJBwABAQCLBwABAQChBwABAQCkBwABAQCmBwABAQCqBwABAQCzBwABAQC8BwABAQDJBwABAQDLBwABAQDMBwABAQDrBwABAQD1BwABAQD3BwABAQCRCAABAQC8AwABAQCkCAABAQCyCAABAQDOCAABAQDPCAABAQDtCAABAQD7BQABAQD4CAABAQD/CAABAQCBCQABAQCGCQABAQCQCQABAQC5CQABAQCLBwABAQDpCQABAQDuCQABAQDxCQABAQD0CQABAQCQCQABAQCABwABAQDsCgABAQC8AwABAQD6CgABAQC8AwABAQCOCwABAQCUCwABAQCmCwABAQCsCwABAQDDCwABAQDFCwABAQCVDAABAQCVDAABAQCeDAABAQCeDAABAQCjDAABAQClDAABAQClDAABAQCjDAABAQClDAABAQDODAABAQDsCgABAQD1DAABAQC8AwABAQD1DAABAQD6DAABAQD6DAABAQCEDQABAQCGDQABAQCIDQABAQCLDQABAQCTDQABAQCTDQABAQCmDQABAQC8DgABAQClDAABAQCVDAABAQDLDgABAQDQDgABAQDTDgABAQDVDgABAQCjDwABAQCJEAABAQCPEAABAQCVEAABAQCwEAABAQCzEAABAQC0EAABAQC1EAABAQC3EAABAQC5EAABAQC8EAABAQC+EAABAQC/EAABAQCEDQABAQCDBgABAQCFBgABAQC5AgABAQD5EAABAQD7EAABAQD9EAABAQD/EAABAQCLEQABAQCmBwABAQCOEQABAQCUEQABAQCmEQABAQCsEQABAQCuEQABAQCkBwABAQCmBwABAQC/EQABAQDhEQABAQD0EQABAQD8EQABAQD+EQABAQCFEgABAQCJEgABAQCPEgABAQCVEAABAQCaEgABAQCfEgAB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AAECAgNKAOsKAAECAgNKAIQGAAECAgOLAQDdCgABAgIDiwEA+QYAAQICA2wAkwYAAQICA2wAmAYAAQICAygAtwIAAQICAygA0QIAAQICAygAngYAAQICAygApAYAAQICAygAzQYAAQICAygA0QYAAQICA4UBAIEHAAECAgOFAQCDBwABAwIDiwEAhgcAAQICA4sBAK0HAAECAgNsAKsHAAECAgNsAIoHAAECAgNsAJoHAAECAgMpAKgHAAECAgMpAKcHAAECAgNsAKMHAAECAgNLANMKAAECAgNmAMgKAAECAgNmAMMHAAECAgNmAMYHAAECAgNbAPsHAAECAgNbALcIAAECAgNbAM0HAAECAgM7AIYIAAECAgM7AO8HAAECAgM7APIHAAECAgMWAJYIAAECAgMWAJUIAAECAgNbAKIIAAECAgNbANAIAAECAgMjAPUIAAECAgMjAP4IAAECAgNqAIkCAAECAgNqAJQJAAECAgNgAJMJAAECAgNqAJkJAAECAgNqAJgJAAECAgNmAKMJAAECAgNqAKgJAAECAgNmAKsJAAECAgNIAPcFAAECAgNIAMIJAAECAgNIAIsGAAECAgNsAOAJAAECAgNmAO0JAAECAgNmAJAKAAECAgNmAIoKAAECAgNmAPoJAAECAgNmAPwJAAECAgNmAIEKAAECAgNqAMIKAAECAgNqALkKAAECAgNgAKkKAAECAgNqALIKAAECAgNgALEKAAECAgNqALcKAAECAgNgAL4KAAECAgOLAQDZCgABAgIDSgDhCgABAgIDSgDmCgABAgIDSgCSCwABAgIDFgDzCgABAgIDFgDyCgABAgIDhAEA9woAAQICA4QBAIcLAAECAgOEAQCzAgABAgIDFgCDCwABAgIDFgCGCwABAgIDSgCNCwABAgIDSgCeCwABAgIDSgCbCwABAgIDPwCqCwABAgIDSgC7CwABAgIDSgCyCwABAgIDSgC4CwABAgIDhAEA3wQAAQICAzoA3wQAAQICA4QBAOkLAAECAgMAAJMMAAECAgMXAJ0MAAECAgMYAKAMAAEDAgMYAKEMAAEDAgMAAOsMAAECAgMXAK4MAAECAgMYAPkHAAECAgMYAKYMAAECAgMYAKoMAAEDAgM0AOkMAAECAgM0AOIMAAECAgM0ALUMAAECAgM0ALwMAAECAgM0ALkMAAECAgM0AMIMAAECAgM0AOEMAAECAgM0AMwMAAECAgM0AMkMAAECAgM0AM0MAAECAgM0ANEMAAECAgMAAPEMAAECAgMWAPgMAAECAgNKAPkMAAEDAgMxAN8EAAECAgMxAPwMAAEDAgMAAP0MAAEEAgMAAIMNAAEDAgMAAIENAAECAgNKAIINAAECAgNCAKwQAAECAgNHAKwQAAECAgNDAIcNAAECAgNDAKENAAECAgNDAIwNAAECAgNDAI0NAAECAgNDAJ0NAAECAgMxAJsNAAECAgMGAIwCAAEFAgMGAJwNAAEFAgNDAKMNAAECAgNDAMMNAAECAgNDAKsNAAECAgNDAKwNAAECAgNDALINAAECAgNDALcNAAECAgNDAMwNAAECAgNDAM4NAAECAgNDANENAAECAgNDANkNAAECAgNDANYNAAECAgNDAN0NAAECAgNDAOMNAAECAgNDAOUNAAECAgNDAOcNAAECAgNDAOsNAAECAgNDAO8NAAECAgNDAPcNAAECAgNDAPoNAAECAgNDAPwNAAECAgNDAP4NAAECAgNDAIQOAAECAgNDAIEOAAECAgNDAIYOAAECAgNDAIgOAAECAgNDAIoOAAECAgNDAIwOAAECAgNDAI4OAAECAgNHALkOAAECAgMXAMkOAAECAgMYAMAOAAECAgMXAMgOAAECAgNHAMoOAAECAgNHAM0OAAECAgNHANEOAAECAgMcALEEAAECAgMKALsCAAECAgMKANkOAAECAgMKAN8OAAECAgMKAOEOAAECAgMKAOIOAAECAgMKAOoOAAECAgMKAPYOAAECAgMKAO0KAAECAgMKAPMOAAECAgMKAPgOAAECAgMKAIkCAAECAgMKAIQPAAECAgMKAIUPAAECAgMKAJMPAAECAgMKAJQPAAECAgMKAJwPAAECAgMKAJ0PAAECAgMcAKEPAAECAgMcAOIOAAECAgMcANYPAAECAgMcAMsPAAECAgMcALsCAAECAgMcAOoOAAECAgMcAIQPAAECAgMcAPkPAAECAgMcAO0KAAECAgMnAJ0QAAECAgMnALMCAAECAgMnAJwQAAECAgMnAJoQAAECAgNCAK0QAAECAgNCAOEQAAECAgNCAGYAAQICA0IA2gUAAQICA0IA0AsAAQICA0IAthAAAQICA0IAuBAAAQICA0IAuxAAAQICA0IAvRAAAQICA0IA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AAAAAQWxBgMAAAEFsQYDAAABBbEGAwAAAQW+BgMAAAEGbwEAAAAIAjIDWwCgCAWGBgAAAKEIBYgGAJ0ICAMBALsDAgECAAMEAAEAvAMCAQUABgQAAQC9AwIBBwAGBAABBYYGAgAAAQXCBgMAAAEFhgYCAAABBcQGAgAAAQZnAQAAAAEFxAYCAAAAAAYBBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQWEBgMAAAEFxAYCAAABBYQGAwAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAAADgEGcAEAAAAAAAMBBnABAAAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBbEGAwAAAQXEBgIAAAEFxAYCAAABBbEGAwAAAQXEBgIAAAEFsQYDAAABBbEGAwAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQWLBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYCAAABBcQGAgAAAQXEBgIAAAEFxAYC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AQABAABoAQECAQFFAQBqAQECAwAAAO4C7AIBAAAASgEBAAE9AQEAAIACAQABAAAAAPwBAAB0AQEBEgEDALgIAKYEAM0CANYBAQEAAQIBQAEEALgIAKYEAM0CAAAA1AEBAQABAgMAAIQCAAABAAAAAgEBAAAAAAIAzQIAAAAmAQEAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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ZG5ldC9odHRwbG9nc3luY2J1ZmlvaW50ZXJuYWwvcHJvZmlsZW9zb3MvZXhlY3BhdGgvZmlsZXBhdGhydW50aW1lc3luYy9hdG9taWNuZXQvdGV4dHByb3RvbmV0L3VybGlvL2ZzaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuaW5pdCRmNjQuNDAyNDAwMDAwMDAwMDAwMCRmNjQuM2ZjOTk5OTk5OTk5OTk5YW1hdGgucG93bWF0aC5hcmNoTG9naW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubG9nRGl2aHRtbC90ZW1wbGF0ZS5OZXdnbzpzdHJpbmcuLmdvc3RyaW5nLjc4NTUuK0dnOHN5L2x1Y0xUNXQwSXlVeFNoZz09aHRtbC90ZW1wbGF0ZS4oKlRlbXBsYXRlKS5QYXJzZXJ1bnRpbWUuZ2NXcml0ZUJhcnJpZXIyaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGVtcGxNYWluZ286c3RyaW5nLiJwZXJQcm9jInR5cGU6bWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3NnbzpzdHJpbmcuInN0dyJnbzpzdHJpbmcuImJhY2tncm91bmQiZ286c3RyaW5nLiJhc3Npc3QiZ286c3RyaW5nLiJzd2VlcCJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci51dGlsRmxhZ05hbWVzZ2Nsb2NhbHPCt0o1Ris3UXc3Tzd2ZTJRY1dDN0RwZVE9PWdjbG9jYWxzwrdDbkR5STJIallYRnoxOVNzT2o5OHR3PT08YXV0b2dlbmVyYXRlZD4kR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9oaXN0b2dyYW0uZ28kR09ST09UL3NyYy9tYXRoL2xvZy5nbyRHT1JPT1Qvc3JjL21hdGgvcG93LmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvaHR0cC5nbyRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvdGVtcGxhdGUuZ28kR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9tbXUuZ29tYXRoLlBvd21hdGguTG9naHRtbC90ZW1wbGF0ZS5NdXN0Z286aW5mby5tYXRoLlBvdyRhYnN0cmFjdGdvOmluZm8ubWF0aC5Mb2ckYWJzdHJhY3RnbzppbmZvLmh0bWwvdGVtcGxhdGUuTXVzdCRhYnN0cmFjdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVydHlwZTplbmNvZGluZy9qc29uLkVuY29kZXJydW50aW1lLmdjV3JpdGVCYXJyaWVyMXR5cGU6aW50Z286c3RyaW5nLiJ7ImlvLldyaXRlU3RyaW5ndHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIGlvLldyaXRlcjsgWDEgKmVuY29kaW5nL2pzb24uRW5jb2RlciB9aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzF0eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludDY0OyBYMSBpbnQ2NDsgWDIgaW50NjQ7IFgzIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lOyBYNCBtYXBbc3RyaW5nXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZTsgWDUgKmludDsgWDYgaW8uV3JpdGVyOyBYNyAqZW5jb2RpbmcvanNvbi5FbmNvZGVyIH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jMnJ1bnRpbWUuZ2NXcml0ZUJhcnJpZXI2dHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lIH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jM3R5cGU6bm9hbGcuc3RydWN0IHsgRiB1aW50cHRyOyBYMCBpby5Xcml0ZXI7IFgxICplbmNvZGluZy9qc29uLkVuY29kZXI7IFgyIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lIH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jNHJ1bnRpbWUuZ2NXcml0ZUJhcnJpZXIzZ2Nsb2NhbHPCt1FpVFNWS0djVFkyaTZNUDcrSnZIMmc9PWdjbG9jYWxzwrczZUNuSjFnbGd2VVBUeXdWalg3b09BPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVyLmFyZ2xpdmVpbmZvJEdPUk9PVC9zcmMvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZW1pdHRlci5nbyRHT1JPT1Qvc3JjL2VuY29kaW5nL2pzb24vc3RyZWFtLmdvZW5jb2RpbmcvanNvbi5OZXdFbmNvZGVydHlwZToqZW5jb2RpbmcvanNvbi5FbmNvZGVydHlwZToqc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqaW50NjQ7IFgxIGludDY0OyBYMiBpbnQ2NDsgWDMgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWU7IFg0IG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lOyBYNSAqaW50OyBYNiBpby5Xcml0ZXI7IFg3ICplbmNvZGluZy9qc29uLkVuY29kZXIgfXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgaW8uV3JpdGVyOyBYMSAqZW5jb2RpbmcvanNvbi5FbmNvZGVyIH10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lIH10eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlQ29uc3VtZXJnbzppbmZvLmlvLldyaXRlcmdvOmluZm8uaW50NjRnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlQ29uc3VtZXJnbzppbmZvLippbnRnbzppbmZvLm1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lZ286aW5mby4qaW50NjRnbzppbmZvLiplbmNvZGluZy9qc29uLkVuY29kZXJnbzppbmZvLmVuY29kaW5nL2pzb24uTmV3RW5jb2RlciRhYnN0cmFjdHR5cGU6bWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWVnbzpzdHJpbmcuIl0sIFwic3RhY2tGcmFtZXNcIjoiZW5jb2RpbmcvanNvbi4oKkVuY29kZXIpLkVuY29kZWdvOnN0cmluZy4ifSJnY2xvY2Fsc8K3eWtITjB2YXdZdXExZFVXNHpFZTJnQT09Z2Nsb2NhbHPCt3dzOU1wWGVTbStNRlZzUGFGRENFT3c9PWdjbG9jYWxzwrdOa0Z6OW9iOE5ycnBHdHhqZXhRYzVBPT1nY2xvY2Fsc8K3VnRDTDRSZFV3Q3F3WEVQZXlKbGxSQT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzMuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jMy5hcmdsaXZlaW5mb2dvOmluZm8uc3RyaW5nZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWV0eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRXZlbnRpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jMi4xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuV2Fsa1N0YWNrRnJhbWVzaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzIuMmdvOnN0cmluZy4iXCJ0cmFjZUV2ZW50c1wiOiBbImdvOnN0cmluZy4iLCJnY2xvY2Fsc8K3U0x2QVBGWjhBa2JOaElYOUtYN1lpUT09Z2Nsb2NhbHPCt2t6UDkvaTVHQkRUd3RXUW1xS0hVRHc9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVyLmZ1bmMyLnN0a29iamludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVyLmZ1bmMyLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzIuYXJnbGl2ZWluZm90eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWU7IFgxIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lIH1nbzppbmZvLippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRXZlbnRnbzppbmZvLmJvb2xzdHJjb252LkZvcm1hdEludGdjbG9jYWxzwrdEMS9ZY2J5TnVtTTFucVl5b1k0d0VRPT1nY2xvY2Fsc8K3LzB1QmRQclpsNE1TZkN1U1hCTzZadz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzIuMi5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVyLmZ1bmMyLjIuYXJnbGl2ZWluZm8kR09ST09UL3NyYy9zdHJjb252L2l0b2EuZ29zdHJjb252Lkl0b2FnbzppbmZvLmludGdvOmluZm8uKnVpbnQ4Z286aW5mby5zdHJjb252Lkl0b2EkYWJzdHJhY3RpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jMi4xLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2VyRGF0YVRyYWNlQ29uc3VtZXIuZnVuYzIuMS5hcmdsaXZlaW5mb2dvOnN0cmluZy4iXCJkaXNwbGF5VGltZVVuaXRcIjoiZ2Nsb2NhbHPCt1R1bXc2VVR4RlJBcStLeVNpbUl0YXc9PWdjbG9jYWxzwrdHc1pRVkZDZlhnNHVOYUpDS3hlMk5nPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3ZXJEYXRhVHJhY2VDb25zdW1lci5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdlckRhdGFUcmFjZUNvbnN1bWVyLmZ1bmMxLmFyZ2xpdmVpbmZvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lcnR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkRhdGFydW50aW1lLndiWmVyb3R5cGU6W11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5ldmVudFN6wrcxdHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcnR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuc3BsaXR0ZXJ0eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5EYXRhIH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMxdHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRGF0YTsgWDEgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWU7IFgyICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcjsgWDMgKltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZXZlbnRTesK3MSB9aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMnJ1bnRpbWUuZ2NXcml0ZUJhcnJpZXI0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jM3R5cGU6bm9hbGcuc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXI7IFgxICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRGF0YTsgWDIgKltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZXZlbnRTesK3MTsgWDMgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWU7IFg0IGludDsgWDUgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnNwbGl0dGVyIH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmM0cnVudGltZS5nY1dyaXRlQmFycmllcjVnY2xvY2Fsc8K3TkVLZ1p2T3NsN0tGR2E5TDhEU3BxUT09Z2Nsb2NhbHPCt2VQQUFKcDJoL2dLeDAxemtGL3pOeXc9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmFyZ2xpdmVpbmZvdHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuc3BsaXR0ZXJ0eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRGF0YSB9dHlwZToqc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkRhdGE7IFgxIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lOyBYMiAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXI7IFgzICpbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmV2ZW50U3rCtzEgfWdvOmluZm8uKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnNwbGl0dGVyZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkRhdGFnbzppbmZvLipbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmV2ZW50U3rCtzFnbzppbmZvLippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcnR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmNvdW50aW5nV3JpdGVydHlwZTp0aW1lLkR1cmF0aW9uZ286aXRhYi4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXIsaW8uV3JpdGVyJGY2NC40MDhmNDAwMDAwMDAwMDAwZ286c3RyaW5nLiIldi0ldiJmbXQuU3ByaW50ZnR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2VydW50aW1lLndiTW92ZXJ1bnRpbWUucGFuaWNJbmRleGdjbG9jYWxzwrdUMEtNR1czVDh0dHBKRFJtRlQ5eFNnPT1nY2xvY2Fsc8K3Undvcnl3RFlLaDlXUXdWYy9DNllwdz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jNC5zdGtvYmppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5zdGFja0ZyYW1lRW5jb2RlZFNpemV0eXBlOippbnR0eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5SYW5nZXR5cGU6WzJdaW50ZXJmYWNlIHt9dHlwZTpub2FsZy5tYXAuYnVja2V0W3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWV0eXBlOnJ1bnRpbWUuaG1hcGdvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZXZlbnRTesK3MWdvOmluZm8udGltZS5EdXJhdGlvbmdvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuc3RhY2tGcmFtZUVuY29kZWRTaXplJGFic3RyYWN0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzMuYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjR0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmV2ZW50U3rCtzFnY2xvY2Fsc8K3U1hZUm5qNFBNTXJtNEkzQWhkMW9idz09Z2Nsb2NhbHPCt1JpSTBXTXU2c3ovelIvVHVja3JqUEE9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzIuc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzIuYXJnbGl2ZWluZm90eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5ldmVudFN6wrcxdHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5ldmVudFN6wrcxIH10eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5EYXRhOyBYMSBtYXBbc3RyaW5nXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZSB9aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi40LmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi40LmFyZ2xpdmVpbmZvZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZXZlbnRTesK3MWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzIuMy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzIuMy5hcmdsaXZlaW5mb2djbG9jYWxzwrc0cmdJOHF5T0VISHNHOHFlak9RYUxRPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjIuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjIuYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjEuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjEuYXJnbGl2ZWluZm9nY2xvY2Fsc8K3d2djV09iYlkySFluSzJTVS9VMjJsQT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzEuYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKmNvdW50aW5nV3JpdGVyKS5Xcml0ZWdjbG9jYWxzwrdUalB1dUN3ZGxDcFRhUlFHUktUcll3PT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKmNvdW50aW5nV3JpdGVyKS5Xcml0ZS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqY291bnRpbmdXcml0ZXIpLldyaXRlLmFyZ2xpdmVpbmZvZ286aW5mby5bXXVpbnQ4Z286aW5mby5lcnJvcmdjbG9jYWxzwrdJdUVybDdNT1hhSFZuN0VaWVd6ZkZBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5zdGFja0ZyYW1lRW5jb2RlZFNpemUuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5zdGFja0ZyYW1lRW5jb2RlZFNpemUuYXJnbGl2ZWluZm9nY2xvY2Fsc8K3aWlsWWgyeldrL1JpZUNNeVJHMlk0dz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuV2Fsa1N0YWNrRnJhbWVzLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuV2Fsa1N0YWNrRnJhbWVzLmFyZ2xpdmVpbmZvZ286aW5mby5mdW5jKGludClpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5OZXdFbWl0dGVyZ286c3RyaW5nLiJucyJ0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXJydW50aW1lLmdjV3JpdGVCYXJyaWVyN2djbG9jYWxzwrd0cVIxejEvTmNpTFEycmU4Q2NCcVFBPT1nY2xvY2Fsc8K3aS9OcGtPNjhYTnlvQ1EzWHhiK2pNUT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuTmV3RW1pdHRlci5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk5ld0VtaXR0ZXIuYXJnbGl2ZWluZm90eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVydHlwZTpmdW5jKCl0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5FdmVudCwgYm9vbCl0eXBlOmZ1bmMoc3RyaW5nKXR5cGU6ZnVuYyhzdHJpbmcsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZSl0eXBlOm1hcFt1aW50NjRdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZnJhbWVOb2RldHlwZTptYXBbdWludDY0XWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2t0eXBlOm1hcFt1aW50NjRdc3RyaW5nZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlcmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuR29tYXhwcm9jc2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuR29tYXhwcm9jcy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuR29tYXhwcm9jcy5hcmdsaXZlaW5mb2dvOmluZm8udWludDY0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5SZXNvdXJjZWdjbG9jYWxzwrdiQmhHc2hkVm5wNTRhMWxuY3FYdU1RPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlJlc291cmNlLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5SZXNvdXJjZS5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU2V0UmVzb3VyY2VUeXBlaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5TZXRSZXNvdXJjZVR5cGUuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNldFJlc291cmNlVHlwZS5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU2V0UmVzb3VyY2VGaWx0ZXJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNldFJlc291cmNlRmlsdGVyLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5TZXRSZXNvdXJjZUZpbHRlci5hcmdsaXZlaW5mb2dvOmluZm8uZnVuYyh1aW50NjQpIGJvb2xpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2tpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2suYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2suYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNsaWNlaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5zbGljZWdjbG9jYWxzwrc4bE5ndG10bWVzV2w4NFhwcStxVTBBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNsaWNlLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5TbGljZS5hcmdsaXZlaW5mb2dvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU2xpY2VFdmVudGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuVGFza1NsaWNlaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY29sb3JGb3JUYXNraW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5UYXNrU2xpY2UuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2tTbGljZS5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnBpY2tUYXNrQ29sb3JnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnBpY2tUYXNrQ29sb3IkYWJzdHJhY3R0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5FdmVudGdvOnN0cmluZy4iWCJnY2xvY2Fsc8K3Nzl4LzNCRkUvWVpFTHFFWFc5eVVTZz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5zbGljZS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuc2xpY2UuYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLnRzV2l0aGluUmFuZ2VpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci52aWV3ZXJUaW1laW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5PcHRpb25hbEV2ZW50Z286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLnRzV2l0aGluUmFuZ2UkYWJzdHJhY3RnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnZpZXdlclRpbWUkYWJzdHJhY3RnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuT3B0aW9uYWxFdmVudCRhYnN0cmFjdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuQXN5bmNTbGljZWdvOnN0cmluZy4iYiJnbzpzdHJpbmcuImUiZ2Nsb2NhbHPCt0FaeURSc09FWk5rWXJQRWEwaVBzemc9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuQXN5bmNTbGljZS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuQXN5bmNTbGljZS5hcmdsaXZlaW5mb2dvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5JbnN0YW50Z286c3RyaW5nLiJJImdvOnN0cmluZy4idCJnY2xvY2Fsc8K3dXRWcGYvRlVEMStEcGtLWGhmNDRudz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5JbnN0YW50LmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5JbnN0YW50LmFyZ2xpdmVpbmZvZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5JbnN0YW50RXZlbnRpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkFycm93aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5hcnJvd2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuQXJyb3cuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkFycm93LmFyZ2xpdmVpbmZvZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5BcnJvd0V2ZW50aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5UYXNrQXJyb3dpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2tBcnJvdy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuVGFza0Fycm93LmFyZ2xpdmVpbmZvZ286c3RyaW5nLiJzImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuYXJyb3cuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLmFycm93LmFyZ2xpdmVpbmZvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5FdmVudGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRXZlbnQuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkV2ZW50LmFyZ2xpdmVpbmZvZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkV2ZW50JGFic3RyYWN0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5IZWFwQWxsb2NpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLmVtaXRIZWFwQ291bnRlcnNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkhlYXBBbGxvYy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSGVhcEFsbG9jLmFyZ2xpdmVpbmZvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5Gb2N1c2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRm9jdXMuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkZvY3VzLmFyZ2xpdmVpbmZvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5Hb3JvdXRpbmVUcmFuc2l0aW9udHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0Lkdvcm91dGluZUNvdW50ZXJzQXJndHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuR29yb3V0aW5lQ291bnRlcnNBcmdnbzpzdHJpbmcuIkdvcm91dGluZXMiZ286c3RyaW5nLiJDImdjbG9jYWxzwrdtLzZSVW1OdjZOQmhNVUw4ZWxlRkZBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkdvcm91dGluZVRyYW5zaXRpb24uYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkdvcm91dGluZVRyYW5zaXRpb24uYXJnbGl2ZWluZm9nbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkdTdGF0ZWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSW5jVGhyZWFkU3RhdGVDb3VudHR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5UaHJlYWRDb3VudGVyc0FyZ3R5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LlRocmVhZENvdW50ZXJzQXJnZ286c3RyaW5nLiJUaHJlYWRzImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSW5jVGhyZWFkU3RhdGVDb3VudC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSW5jVGhyZWFkU3RhdGVDb3VudC5hcmdsaXZlaW5mb2dvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkhlYXBHb2FsaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5IZWFwR29hbC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSGVhcEdvYWwuYXJnbGl2ZWluZm90eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuSGVhcENvdW50ZXJzQXJndHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuSGVhcENvdW50ZXJzQXJnZ286c3RyaW5nLiJIZWFwImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuZW1pdEhlYXBDb3VudGVycy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuZW1pdEhlYXBDb3VudGVycy5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRXJyZ286c3RyaW5nLiJydW5uYWJsZT0lZCBydW5uaW5nPSVkIGluc3lzY2FsbD0lZCBpbnN5c2NhbGxSdW50aW1lPSVkImZtdC5FcnJvcmZnY2xvY2Fsc8K3YmIrTFNDQ2lrM3g0MENuOGVGcUw5dz09Z2Nsb2NhbHPCt3JSSWE0bC8xTmNWNURiTk9sM0lmNHc9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRXJyLnN0a29iamludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRXJyLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5FcnIuYXJnbGl2ZWluZm90eXBlOls0XWludGVyZmFjZSB7fWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikudHNXaXRoaW5SYW5nZS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikudHNXaXRoaW5SYW5nZS5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuT3B0aW9uYWxFdmVudC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuT3B0aW9uYWxFdmVudC5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRmx1c2hnbzpzdHJpbmcuIlNUQVRTImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikucHJvY2Vzc01ldGFnbzpzdHJpbmcuIlRBU0tTImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikudGhyZWFkTWV0YWdvOnN0cmluZy4iR0MiZ286c3RyaW5nLiJOZXR3b3JrImdvOnN0cmluZy4iVGltZXJzImdvOnN0cmluZy4iU3lzY2FsbHMiZ2Nsb2NhbHPCt3UwcnBNNGliUzJKZkQ1dEVqSThEbEE9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRmx1c2guc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5GbHVzaC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuRmx1c2guYXJnbGl2ZWluZm90eXBlOnJ1bnRpbWUuaGl0ZXJ0eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuTmFtZUFyZ3R5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5Tb3J0SW5kZXhBcmd0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5OYW1lQXJnZ286c3RyaW5nLiJ0aHJlYWRfbmFtZSJnbzpzdHJpbmcuIk0idHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuU29ydEluZGV4QXJnZ286c3RyaW5nLiJ0aHJlYWRfc29ydF9pbmRleCJnY2xvY2Fsc8K3M2NHWHFiMTcwRGliV3h6SGNNSDJpUT09Z2Nsb2NhbHPCtzlnYzZNZUIxb2gzbWxtbC8xUHRadmc9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikudGhyZWFkTWV0YS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikudGhyZWFkTWV0YS5hcmdsaXZlaW5mb2dvOnN0cmluZy4icHJvY2Vzc19uYW1lImdvOnN0cmluZy4icHJvY2Vzc19zb3J0X2luZGV4ImdjbG9jYWxzwrdWQU82SDArNVFlZkpHWjdjUkd4Q1lRPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLnByb2Nlc3NNZXRhLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5wcm9jZXNzTWV0YS5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU3RhY2tpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLmJ1aWxkQnJhbmNoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5TdGFjay5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU3RhY2suYXJnbGl2ZWluZm9nbzppbmZvLltdKmludGVybmFsL3RyYWNlLkZyYW1lZ286c3RyaW5nLiIldjoldiJnY2xvY2Fsc8K3UnV0bFJQWXNJVmpGVU9BbmZMVW1adz09Z2Nsb2NhbHPCt1A0Q1JpaTRHNnB6THB6bDRUWXMrb2c9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuYnVpbGRCcmFuY2guc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5idWlsZEJyYW5jaC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuYnVpbGRCcmFuY2guYXJnbGl2ZWluZm9nbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmZyYW1lTm9kZWdvOmluZm8uKmludGVybmFsL3RyYWNlLkZyYW1lZ2Nsb2NhbHPCt2cyQmV5U3Urd0Zub3ljZ1hmRWxtY2c9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnZpZXdlclRpbWUuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci52aWV3ZXJUaW1lLmFyZ2xpdmVpbmZvZ286aW5mby5mbG9hdDY0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIucGlja1Rhc2tDb2xvci5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnBpY2tUYXNrQ29sb3IuYXJnbGl2ZWluZm9pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlRpbWVIaXN0b2dyYW0pLkFkZGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqVGltZUhpc3RvZ3JhbSkuQWRkLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpUaW1lSGlzdG9ncmFtKS5BZGQuYXJnbGl2ZWluZm9nbzppbmZvLippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpUaW1lSGlzdG9ncmFtKS5CdWNrZXRNaW5tYXRoLmFyY2hFeHBnY2xvY2Fsc8K3UGxxdjJmZjUySnRsWWFEZDJSd3hiZz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpUaW1lSGlzdG9ncmFtKS5CdWNrZXRNaW4uYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlRpbWVIaXN0b2dyYW0pLkJ1Y2tldE1pbi5hcmdsaXZlaW5mbyRHT1JPT1Qvc3JjL21hdGgvZXhwLmdvbWF0aC5FeHBnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqVGltZUhpc3RvZ3JhbSkuQnVja2V0TWluJGFic3RyYWN0Z286aW5mby5tYXRoLkV4cCRhYnN0cmFjdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqVGltZUhpc3RvZ3JhbSkuVG9IVE1MdHlwZToqc3RyaW5ncy5CdWlsZGVydHlwZTpzdHJpbmdzLkJ1aWxkZXJnbzpzdHJpbmcuIjx0YWJsZT4iZ286aXRhYi4qc3RyaW5ncy5CdWlsZGVyLGlvLldyaXRlcmZtdC5GcHJpbnRmZ286c3RyaW5nLiI8dGQgYWxpZ249XCJyaWdodFwiPjxkaXYgc3R5bGU9XCJwb3NpdGlvbjpyZWxhdGl2ZVwiPiVkPC9kaXY+PC90ZD4iZ286c3RyaW5nLiI8L3RyPlxuImdvOnN0cmluZy4iPHRyPjx0ZCBjbGFzcz1cImhpc3RvVGltZVwiIGFsaWduPVwicmlnaHRcIj48YSBocmVmPSVzPiVzPC9hPjwvdGQ+ImdvOnN0cmluZy4iPHRyPjx0ZCBjbGFzcz1cImhpc3RvVGltZVwiIGFsaWduPVwicmlnaHRcIj4lczwvdGQ+ImdvOnN0cmluZy4iPHRkPjxkaXYgc3R5bGU9XCJ3aWR0aDolZHB4O2JhY2tncm91bmQ6Ymx1ZTtwb3NpdGlvbjpyZWxhdGl2ZVwiPiZuYnNwOzwvZGl2PjwvdGQ+ImdvOnN0cmluZy4iPHRyPjx0ZCBhbGlnbj1cInJpZ2h0XCI+JXM8L3RkPjwvdHI+ImdvOnN0cmluZy4iPC90YWJsZT4iZ2Nsb2NhbHPCt0dkWXZzV2FQN28zSGpsUkhXVFhEY1E9PWdjbG9jYWxzwrdMbUt0STN1TmhvM0ZJbHpHNWViUUxBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlRpbWVIaXN0b2dyYW0pLlRvSFRNTC5zdGtvYmppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlRpbWVIaXN0b2dyYW0pLlRvSFRNTC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqVGltZUhpc3RvZ3JhbSkuVG9IVE1MLmFyZ2xpdmVpbmZvJEdPUk9PVC9zcmMvc3RyaW5ncy9idWlsZGVyLmdvc3RyaW5ncy4oKkJ1aWxkZXIpLlN0cmluZ3R5cGU6WzFdaW50ZXJmYWNlIHt9dHlwZTpodG1sL3RlbXBsYXRlLkhUTUxnbzppbmZvLmZ1bmModGltZS5EdXJhdGlvbiwgdGltZS5EdXJhdGlvbikgc3RyaW5nZ286aW5mby5odG1sL3RlbXBsYXRlLkhUTUxnbzppbmZvLipzdHJpbmdzLkJ1aWxkZXJnbzppbmZvLnN0cmluZ3MuKCpCdWlsZGVyKS5TdHJpbmckYWJzdHJhY3RpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NYWluSGFuZGxlcnR5cGU6bmV0L2h0dHAuSGFuZGxlckZ1bmN0eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3IH1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NYWluSGFuZGxlci5mdW5jMWdvOml0YWIubmV0L2h0dHAuSGFuZGxlckZ1bmMsbmV0L2h0dHAuSGFuZGxlcmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1haW5IYW5kbGVyLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuTWFpbkhhbmRsZXIuYXJnbGl2ZWluZm90eXBlOm5ldC9odHRwLkhhbmRsZXJnbzppbmZvLltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2dvOmluZm8ubmV0L2h0dHAuSGFuZGxlcnR5cGU6W11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuLnR5cGVBc3NlcnQuMGh0bWwvdGVtcGxhdGUuKCpUZW1wbGF0ZSkuRXhlY3V0ZW5ldC9odHRwLkVycm9yZ2Nsb2NhbHPCt1U1V0FwS3J4cWRONGV2MnVIdGtrQ3c9PWdjbG9jYWxzwrdkV2Zvdms5aGFSTFY5SE9kcUhDcDV3PT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NYWluSGFuZGxlci5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1haW5IYW5kbGVyLmZ1bmMxLmFyZ2xpdmVpbmZvdHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld3R5cGU6Km5ldC9odHRwLlJlcXVlc3RnbzppbmZvLm5ldC9odHRwLlJlc3BvbnNlV3JpdGVyZ286aW5mby4qbmV0L2h0dHAuUmVxdWVzdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXcuVVJMdHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3VHlwZWdvOnN0cmluZy4iL3RyYWNlP3ZpZXc9JXMmc3RhcnQ9JWQmZW5kPSVkImdvOnN0cmluZy4iL3RyYWNlP3ZpZXc9JXMiZ2Nsb2NhbHPCt0lpd0ZCd0pWMmRQOXRTTEMxNHR3VEE9PWdjbG9jYWxzwrcxSkVBM2QwMlE2a3Rxd0g2WlNzUW5RPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3LlVSTC5zdGtvYmppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3LlVSTC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXcuVVJMLmFyZ2xpdmVpbmZvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2UuVVJMdHlwZTpbM11pbnRlcmZhY2Uge31nbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLlVSTCRhYnN0cmFjdGdjbG9jYWxzwrdWWnd6ZnJjU0UwUnJ3UGg4V3JORU5BPT1nY2xvY2Fsc8K3NWlURkZ0eUhLaXhYK2lzRk1YVHB2UT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2UuVVJMLnN0a29iamludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLlVSTC5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLlVSTC5hcmdsaXZlaW5mb2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlSGFuZGxlcmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlSGFuZGxlci5mdW5jMcK3ZmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlN0YXRpY0hhbmRsZXJ0eXBlOmVtYmVkLkZTdHlwZTpuZXQvaHR0cC5pb0ZTdHlwZToqbmV0L2h0dHAuZmlsZUhhbmRsZXJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5zdGF0aWNDb250ZW50Z286aXRhYi5lbWJlZC5GUyxpby9mcy5GU3R5cGU6bmV0L2h0dHAuZmlsZUhhbmRsZXJnbzppdGFiLm5ldC9odHRwLmlvRlMsbmV0L2h0dHAuRmlsZVN5c3RlbWdvOml0YWIuKm5ldC9odHRwLmZpbGVIYW5kbGVyLG5ldC9odHRwLkhhbmRsZXJnY2xvY2Fsc8K3d2RtVHVwcFpVeFpZZnRSN09DcTg4UT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3RhdGljSGFuZGxlci5zdGtvYmokR09ST09UL3NyYy9uZXQvaHR0cC9mcy5nb25ldC9odHRwLkZTbmV0L2h0dHAuRmlsZVNlcnZlcmdvOmluZm8ubmV0L2h0dHAuRlMkYWJzdHJhY3RnbzppbmZvLm5ldC9odHRwLkZpbGVTZXJ2ZXIkYWJzdHJhY3RpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NTVVIYW5kbGVyRnVuY3R5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11dHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXUgfWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1NVUhhbmRsZXJGdW5jLmZ1bmMxZ2Nsb2NhbHPCt2Y5Q3hGZnQ5UnBlbEQ4bXRlQkU4Umc9PWdjbG9jYWxzwrdPZDZJWUtWd0VhZ3hBamVzUjd2dWlBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NTVVIYW5kbGVyRnVuYy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1NVUhhbmRsZXJGdW5jLmFyZ2xpdmVpbmZvdHlwZTptYXBbaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzXSppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5Z286aW5mby5bXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NdXRhdG9yVXRpbEZ1bmNnbzppbmZvLm5ldC9odHRwLkhhbmRsZXJGdW5jZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11dHlwZToqc3RyaW5ncy5SZWFkZXJnbzpzdHJpbmcuIm1vZGUibmV0L2h0dHAuKCpSZXF1ZXN0KS5Gb3JtVmFsdWVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkuSGFuZGxlUGxvdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5IYW5kbGVEZXRhaWxzaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGVtcGxNTVV0eXBlOnN0cmluZ3MuUmVhZGVyZ286aXRhYi4qc3RyaW5ncy5SZWFkZXIsaW8uUmVhZFNlZWtlcm5ldC9odHRwLlNlcnZlQ29udGVudGdjbG9jYWxzwrdjd0oxcGQvd1Y3dlgyZlVhVEdkNGhBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5NTVVIYW5kbGVyRnVuYy5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1NVUhhbmRsZXJGdW5jLmZ1bmMxLmFyZ2xpdmVpbmZvJEdPUk9PVC9zcmMvc3RyaW5ncy9yZWFkZXIuZ29zdHJpbmdzLk5ld1JlYWRlcmdvOmluZm8uc3RyaW5ncy5OZXdSZWFkZXIkYWJzdHJhY3RpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5yZXF1ZXN0VXRpbEZsYWdzZ286c3RyaW5nLiJmbGFncyJnbzpzdHJpbmcuInwic3RyaW5ncy5nZW5TcGxpdGdjbG9jYWxzwrdaek1pUEFpVkJnN0RKNmRoL0NqU2FnPT1nY2xvY2Fsc8K3ZEdyTVdUV0luZ0tHZlZZakhpMGFkQT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIucmVxdWVzdFV0aWxGbGFncy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnJlcXVlc3RVdGlsRmxhZ3MuYXJnbGl2ZWluZm8kR09ST09UL3NyYy9zdHJpbmdzL3N0cmluZ3MuZ29zdHJpbmdzLlNwbGl0dHlwZTppbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3NnbzppbmZvLmludGVybmFsL3RyYWNlLlV0aWxGbGFnc2dvOmluZm8uc3RyaW5ncy5TcGxpdCRhYnN0cmFjdGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5nZXRzeW5jLigqTXV0ZXgpLmxvY2tTbG93dHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5c3luYy4oKk11dGV4KS51bmxvY2tTbG93aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLmdldC5mdW5jMXN5bmMuKCpPbmNlKS5kb1Nsb3dnY2xvY2Fsc8K3cE8rSXIzOUsxQUloMUoySFdpSFJnUT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLmdldC5zdGtvYmppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkuZ2V0LmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLmdldC5hcmdsaXZlaW5mbyRHT1JPT1Qvc3JjL3N5bmMvbXV0ZXguZ28kR09ST09UL3NyYy9zeW5jL2F0b21pYy90eXBlLmdvJEdPUk9PVC9zcmMvc3luYy9vbmNlLmdvc3luYy4oKk11dGV4KS5Mb2Nrc3luYy4oKk11dGV4KS5VbmxvY2tzeW5jLigqT25jZSkuRG9zeW5jL2F0b21pYy4oKlVpbnQzMikuTG9hZHR5cGU6KmludGVybmFsL3RyYWNlLk1NVUN1cnZldHlwZTpbXVtdaW50ZXJuYWwvdHJhY2UuTXV0YXRvclV0aWx0eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdTsgWDEgaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzOyBYMiAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11Q2FjaGVFbnRyeSB9Z286aW5mby5bXVtdaW50ZXJuYWwvdHJhY2UuTXV0YXRvclV0aWxnbzppbmZvLippbnRlcm5hbC90cmFjZS5NTVVDdXJ2ZWdvOmluZm8uKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdUNhY2hlRW50cnlnbzppbmZvLnN5bmMuKCpNdXRleCkuTG9jayRhYnN0cmFjdGdvOmluZm8uc3luYy4oKk11dGV4KS5VbmxvY2skYWJzdHJhY3RnbzppbmZvLnN5bmMuKCpPbmNlKS5EbyRhYnN0cmFjdGdvOmluZm8uc3luYy9hdG9taWMuKCpVaW50MzIpLkxvYWQkYWJzdHJhY3RpbnRlcm5hbC90cmFjZS5OZXdNTVVDdXJ2ZXR5cGU6W11mbG9hdDY0dHlwZTpbXVtdZmxvYXQ2NHR5cGU6bWFwW3N0cmluZ11pbnRlcmZhY2Uge31nbzpzdHJpbmcuImZhaWxlZCB0byBwcm9kdWNlIE1NVSBkYXRhOiAldiJ0eXBlOls0XWZsb2F0NjQkZjY0LjNmNTA2MjRkZDJmMWE5ZmMkZjY0LjNmODQ3YWUxNDdhZTE0N2IkZjY0LjNmYTk5OTk5OTk5OTk5OWF0eXBlOmludGVybmFsL3RyYWNlLmFjY3VtdWxhdG9yaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuLnN0bXBfM2ludGVybmFsL3RyYWNlLigqTU1VQ3VydmUpLm1tdSRmNjQuM2YxYTM2ZTJlYjFjNDMyZCRmNjQuNDA1OGMwMDAwMDAwMDAwMGludGVybmFsL3RyYWNlLigqTU1VQ3VydmUpLk1VRGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLi5zdG1wXzRpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4udHlwZUFzc2VydC4xZ286c3RyaW5nLiJ4TWluImdvOnN0cmluZy4ieE1heCJnbzpzdHJpbmcuInF1YW50aWxlcyJnbzpzdHJpbmcuImN1cnZlImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5IYW5kbGVQbG90LlByaW50Zi5mdW5jMWdvOnN0cmluZy4iZmFpbGVkIHRvIHNlcmlhbGl6ZSByZXNwb25zZTogJXYibG9nLnN0ZGxvZy4oKkxvZ2dlcikub3V0cHV0cnVudGltZS5wYW5pY1NsaWNlQmdjbG9jYWxzwrdXNkNxNldpL09ZYzM1WlNOdEdDTHRRPT1nY2xvY2Fsc8K3V2RaMHZob09vQzVFbUJFSVNCRk5TZz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZVBsb3Quc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZVBsb3QuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkuSGFuZGxlUGxvdC5hcmdsaXZlaW5mbyRHT1JPT1Qvc3JjL2ludGVybmFsL3RyYWNlL2djLmdvJEdPUk9PVC9zcmMvbG9nL2xvZy5nb2ludGVybmFsL3RyYWNlLigqTU1VQ3VydmUpLk1NVWxvZy5QcmludGZ0eXBlOipbXWludGVybmFsL3RyYWNlLk11dGF0b3JVdGlsdHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIHN0cmluZzsgWDEgW11pbnRlcmZhY2Uge30gfWdvOmluZm8uKmludGVybmFsL3RyYWNlLmFjY3VtdWxhdG9yZ286aW5mby5bXWZsb2F0NjRnbzppbmZvLltdW11mbG9hdDY0Z286aW5mby5bXWludGVybmFsL3RyYWNlLk11dGF0b3JVdGlsZ286aW5mby5pbnRlcm5hbC90cmFjZS4oKk1NVUN1cnZlKS5NTVUkYWJzdHJhY3RnbzppbmZvLmxvZy5QcmludGYkYWJzdHJhY3RmbXQuQXBwZW5kZmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5IYW5kbGVQbG90LlByaW50Zi5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5IYW5kbGVQbG90LlByaW50Zi5mdW5jMS5hcmdsaXZlaW5mb3R5cGU6W111aW50OGdvOmluZm8uW11pbnRlcmZhY2Uge310eXBlOltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvd2dvOnN0cmluZy4id2luZG93InN0cmNvbnYuUGFyc2VVaW50aW50ZXJuYWwvdHJhY2UuKCpNTVVDdXJ2ZSkuRXhhbXBsZXNnbzpzdHJpbmcuImZhaWxlZCB0byBwYXJzZSB3aW5kb3cgcGFyYW1ldGVyICVxOiAldiJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkubmV3TGlua2VkVXRpbFdpbmRvd3R5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvd2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLi50eXBlQXNzZXJ0LjJpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkuSGFuZGxlRGV0YWlscy5QcmludGYuZnVuYzFnbzpzdHJpbmcuImZhaWxlZCB0byBzZXJpYWxpemUgdHJhY2U6ICV2ImdjbG9jYWxzwrc4c3RUSk0zQk9NNmpiRFpxeXo5WkdBPT1nY2xvY2Fsc8K3d0RwTjN1cmh4aVREdm14QUViSEhhUT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZURldGFpbHMuc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZURldGFpbHMuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkuSGFuZGxlRGV0YWlscy5hcmdsaXZlaW5mb3R5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3dnbzppbmZvLltdaW50ZXJuYWwvdHJhY2UuVXRpbFdpbmRvd2dvOmluZm8uW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZURldGFpbHMuUHJpbnRmLmZ1bmMxLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCptbXUpLkhhbmRsZURldGFpbHMuUHJpbnRmLmZ1bmMxLmFyZ2xpdmVpbmZvJGY2NC40MTJlODQ4MDAwMDAwMDAwZ286c3RyaW5nLiJwcm9jImdvOnN0cmluZy4iJXMjJXY6JXYiZ2Nsb2NhbHPCt0g5bzRRdXloTHBpdXlxTWJ2eC9CVnc9PWdjbG9jYWxzwrdHcHp4dndONzVoUUVxR2IxeU0vVDZRPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkubmV3TGlua2VkVXRpbFdpbmRvdy5zdGtvYmppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKm1tdSkubmV3TGlua2VkVXRpbFdpbmRvdy5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqbW11KS5uZXdMaW5rZWRVdGlsV2luZG93LmFyZ2xpdmVpbmZvZ286aW5mby5pbnRlcm5hbC90cmFjZS5VdGlsV2luZG93Z286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93Z286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5SYW5nZWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNWR1Byb2ZpbGVIYW5kbGVyRnVuY3R5cGU6bm9hbGcuc3RydWN0IHsgRiB1aW50cHRyOyBYMCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Qcm9maWxlRnVuYyB9aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmFyZ2xpdmVpbmZvJEdPUk9PVC9zcmMvaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvcHByb2YuZ29nbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlByb2ZpbGVGdW5jdHlwZTpuZXQvaHR0cC5SZXNwb25zZVdyaXRlcnR5cGU6Km9zLkZpbGV0eXBlOipidWZpby5Xcml0ZXJnbzpzdHJpbmcuInJhdyJnbzpzdHJpbmcuIkNvbnRlbnQtVHlwZSJuZXQvdGV4dHByb3RvLkNhbm9uaWNhbE1JTUVIZWFkZXJLZXl0eXBlOlsxXXN0cmluZ2dvOnN0cmluZy4iYXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtInR5cGU6bmV0L3RleHRwcm90by5NSU1FSGVhZGVyaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxLjFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5CdWlsZFByb2ZpbGVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4udHlwZUFzc2VydC4zZ286c3RyaW5nLiJmYWlsZWQgdG8gZ2V0IHJlY29yZHM6ICV2ImdvOnN0cmluZy4iYmxvY2sib3MuQ3JlYXRlVGVtcGdvOnN0cmluZy4iZmFpbGVkIHRvIGNyZWF0ZSB0ZW1wIGZpbGU6ICV2ImludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNWR1Byb2ZpbGVIYW5kbGVyRnVuYy5mdW5jMS4yZ286c3RyaW5nLiJmYWlsZWQgdG8gZ2VuZXJhdGUgcHJvZmlsZTogJXYidHlwZTpidWZpby5Xcml0ZXJnbzppdGFiLipvcy5GaWxlLGlvLldyaXRlcmdvOml0YWIuKmJ1ZmlvLldyaXRlcixpby5Xcml0ZXJpbnRlcm5hbC9wcm9maWxlLigqUHJvZmlsZSkuV3JpdGVnbzpzdHJpbmcuImZhaWxlZCB0byB3cml0ZSBwcm9maWxlOiAldiJidWZpby4oKldyaXRlcikuRmx1c2hnbzpzdHJpbmcuImZhaWxlZCB0byBmbHVzaCB0ZW1wIGZpbGU6ICV2Im9zLkVyckludmFsaWRvcy4oKmZpbGUpLmNsb3NlZ286c3RyaW5nLiJmYWlsZWQgdG8gY2xvc2UgdGVtcCBmaWxlOiAldiJnbzpzdHJpbmcuIi5zdmciaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZ29DbWRnbzpzdHJpbmcuInRvb2wiZ286c3RyaW5nLiJwcHJvZiJnbzpzdHJpbmcuIi1zdmciZ286c3RyaW5nLiItb3V0cHV0Im9zL2V4ZWMuQ29tbWFuZG9zL2V4ZWMuKCpDbWQpLkNvbWJpbmVkT3V0cHV0Z286c3RyaW5nLiJmYWlsZWQgdG8gZXhlY3V0ZSBnbyB0b29sIHBwcm9mOiAldlxuJXMiaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxLmRlZmVyd3JhcDFnbzpzdHJpbmcuImltYWdlL3N2Zyt4bWwibmV0L2h0dHAuU2VydmVGaWxlZ2Nsb2NhbHPCtzlPNXZwVGpWd1U4Z1F0VkVZem9mV2c9PWdjbG9jYWxzwrdKUTBzTjcySTdFTkk1M0dXaFF5Z3hnPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TVkdQcm9maWxlSGFuZGxlckZ1bmMuZnVuYzEuc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxLmFyZ2xpdmVpbmZvJEdPUk9PVC9zcmMvbmV0L2h0dHAvaGVhZGVyLmdvJEdPUk9PVC9zcmMvbmV0L3RleHRwcm90by9oZWFkZXIuZ28kR09ST09UL3NyYy9idWZpby9idWZpby5nbyRHT1JPT1Qvc3JjL29zL2ZpbGUuZ28kR09ST09UL3NyYy9vcy9maWxlX3Bvc2l4LmdvbmV0L2h0dHAuSGVhZGVyLlNldG5ldC90ZXh0cHJvdG8uTUlNRUhlYWRlci5TZXRidWZpby5OZXdXcml0ZXJidWZpby5OZXdXcml0ZXJTaXplb3MuKCpGaWxlKS5DbG9zZW9zLigqRmlsZSkuTmFtZXR5cGU6KlsxXXN0cmluZ3R5cGU6KmludGVybmFsL3Byb2ZpbGUuUHJvZmlsZXR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlByb2ZpbGVSZWNvcmR0eXBlOls2XXN0cmluZ3R5cGU6bm9hbGcuc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqb3MuRmlsZSB9dHlwZTpub2FsZy5zdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG5ldC9odHRwLlJlc3BvbnNlV3JpdGVyIH10eXBlOm5vYWxnLnN0cnVjdCB7IEYgdWludHB0cjsgWDAgc3RyaW5nIH10eXBlOnJ1bnRpbWUuX2RlZmVyZ286aW5mby4qYnVmaW8uV3JpdGVyZ286aW5mby4qb3MuRmlsZWdvOmluZm8uW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Qcm9maWxlUmVjb3JkZ286aW5mby5mdW5jKHN0cmluZywgLi4uaW50ZXJmYWNlIHt9KWdvOmluZm8ubmV0L2h0dHAuSGVhZGVyLlNldCRhYnN0cmFjdGdvOmluZm8ubmV0L3RleHRwcm90by5NSU1FSGVhZGVyLlNldCRhYnN0cmFjdGdvOmluZm8uYnVmaW8uTmV3V3JpdGVyJGFic3RyYWN0Z286aW5mby5idWZpby5OZXdXcml0ZXJTaXplJGFic3RyYWN0Z286aW5mby5vcy4oKkZpbGUpLkNsb3NlJGFic3RyYWN0Z286aW5mby5vcy4oKkZpbGUpLk5hbWUkYWJzdHJhY3Rvcy5SZW1vdmVvcy5SZW1vdmUud3JhcGluZm9nbzpzdHJpbmcuInRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLTgiZ286c3RyaW5nLiJYLUdvLVBwcm9mImdvOnN0cmluZy4iMSJnY2xvY2Fsc8K3VnQ0bnBKSkUrYXpPT0tUQ2xMYjUrQT09Z2Nsb2NhbHPCt3V6YlhoZXdBSEtwYitjL0xZT2xrZkE9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNWR1Byb2ZpbGVIYW5kbGVyRnVuYy5mdW5jMS4xLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU1ZHUHJvZmlsZUhhbmRsZXJGdW5jLmZ1bmMxLjEuYXJnbGl2ZWluZm90eXBlOmludGVybmFsL3Byb2ZpbGUuUHJvZmlsZXR5cGU6aW50ZXJuYWwvcHJvZmlsZS5WYWx1ZVR5cGVnbzpzdHJpbmcuInRyYWNlImdvOnN0cmluZy4iY291bnQidHlwZTpbMl0qaW50ZXJuYWwvcHJvZmlsZS5WYWx1ZVR5cGVnbzpzdHJpbmcuImNvbnRlbnRpb25zImdvOnN0cmluZy4iZGVsYXkiZ286c3RyaW5nLiJuYW5vc2Vjb25kcyJ0eXBlOmludGVybmFsL3Byb2ZpbGUuU2FtcGxldHlwZTpbMl1pbnQ2NHR5cGU6KmludGVybmFsL3Byb2ZpbGUuU2FtcGxldHlwZTptYXBbdWludDY0XSppbnRlcm5hbC9wcm9maWxlLkxvY2F0aW9udHlwZTptYXBbc3RyaW5nXSppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9udHlwZTppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9udHlwZToqaW50ZXJuYWwvcHJvZmlsZS5GdW5jdGlvbnR5cGU6aW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbnR5cGU6WzFdaW50ZXJuYWwvcHJvZmlsZS5MaW5ldHlwZToqaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbmdjbG9jYWxzwrdhVThOelg4dVg4LzNDTFBLZVJIdVBnPT1nY2xvY2Fsc8K3VHFWMDNlQXZXQmRMTmdKTjBUVW5OQT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQnVpbGRQcm9maWxlLnN0a29iamludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkJ1aWxkUHJvZmlsZS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkJ1aWxkUHJvZmlsZS5hcmdsaXZlaW5mb3R5cGU6KippbnRlcm5hbC9wcm9maWxlLkxvY2F0aW9udHlwZToqKmludGVybmFsL3RyYWNlLkZyYW1ldHlwZToqWzJdKmludGVybmFsL3Byb2ZpbGUuVmFsdWVUeXBldHlwZTpbMzJddWludDh0eXBlOm5vYWxnLm1hcC5idWNrZXRbc3RyaW5nXSppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9udHlwZTpub2FsZy5tYXAuYnVja2V0W3VpbnQ2NF0qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbmdvOmluZm8uKmludGVybmFsL3Byb2ZpbGUuUHJvZmlsZWdvOmluZm8ubWFwW3VpbnQ2NF0qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbmdvOmluZm8ubWFwW3N0cmluZ10qaW50ZXJuYWwvcHJvZmlsZS5GdW5jdGlvbmdvOmluZm8uaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUHJvZmlsZVJlY29yZGdvOmluZm8uW10qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbmdvOmluZm8uKmludGVybmFsL3Byb2ZpbGUuTG9jYXRpb25nbzppbmZvLippbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9uZ286c3RyaW5nLiJHT1JPT1QicnVudGltZS5nb2dldGVudnJ1bnRpbWUuZGVmYXVsdEdPUk9PVGdvOnN0cmluZy4iYmluImdvOnN0cmluZy4iZ28icGF0aC9maWxlcGF0aC5qb2lub3MuU3RhdGdjbG9jYWxzwrdRbzZ1eWpvc2E1d2trQVFaNGVjcGR3PT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5nb0NtZC5zdGtvYmokR09ST09UL3NyYy9wYXRoL2ZpbGVwYXRoL3BhdGguZ28kR09ST09UL3NyYy9ydW50aW1lL2V4dGVybi5nb3J1bnRpbWUuR09ST09UcGF0aC9maWxlcGF0aC5Kb2ludHlwZTpbM11zdHJpbmdnbzppbmZvLnJ1bnRpbWUuR09ST09UJGFic3RyYWN0Z286aW5mby5wYXRoL2ZpbGVwYXRoLkpvaW4kYWJzdHJhY3RpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UcmFjZUhhbmRsZXIuZnVuYzFuZXQvaHR0cC4oKlJlcXVlc3QpLlBhcnNlRm9ybW5ldC91cmwuVmFsdWVzLkVuY29kZWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRlbXBsVHJhY2VnbzpzdHJpbmcuInt7UEFSQU1TfX0ic3RyaW5ncy5SZXBsYWNlZ2Nsb2NhbHPCt1NxdFB0cGdGVzhZK0krcEh6VGtKNVE9PWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlSGFuZGxlci5mdW5jMS5hcmdpbmZvMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlSGFuZGxlci5mdW5jMS5hcmdsaXZlaW5mb3N0cmluZ3MuUmVwbGFjZUFsbGdvOmluZm8uc3RyaW5ncy5SZXBsYWNlQWxsJGFic3RyYWN0aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpSYW5nZSkuVVJMZ2Nsb2NhbHPCt1h1d0VTNS9odWRYbytJdnVvYm1rQ1E9PWdjbG9jYWxzwrdvenlxdGY4amNyWmRKZlVGK09YQUlBPT1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlJhbmdlKS5VUkwuc3Rrb2JqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpSYW5nZSkuVVJMLmFyZ2luZm8xaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpSYW5nZSkuVVJMLmFyZ2xpdmVpbmZvZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2VnbzppbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdUeXBlaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpWaWV3KS5VUkxnY2xvY2Fsc8K3OTFWdjdKcjhpdXpWajh3YVZKejhvUT09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpWaWV3KS5VUkwuYXJnaW5mbzFpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlZpZXcpLlVSTC5hcmdsaXZlaW5mb3R5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld2dvOmluZm8uKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXd0eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5SYW5nZXR5cGU6LmVxLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLmFyZ2luZm8xdHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2UuYXJnbGl2ZWluZm90eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdy5hcmdpbmZvMXR5cGU6LmVxLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3cuYXJnbGl2ZWluZm9nbzppbmZvLippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGFza3R5cGU6LmVxLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2suYXJnaW5mbzF0eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci50YXNrLmFyZ2xpdmVpbmZvZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGFza3R5cGU6LmVxLnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXXR5cGU6LmVxLnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXS5hcmdpbmZvMXR5cGU6LmVxLnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXS5hcmdsaXZlaW5mb2dvOmluZm8uKnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXXR5cGU6LmVxLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnR0eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5BcnJvd0V2ZW50LmFyZ2luZm8xdHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXJyb3dFdmVudC5hcmdsaXZlaW5mb2dvOmluZm8uKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnR0eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnR0eXBlOi5lcS5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50LmFyZ2luZm8xdHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50LmFyZ2xpdmVpbmZvZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU2xpY2VFdmVudC5hcmdpbmZvMXR5cGU6LmVxLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNsaWNlRXZlbnQuYXJnbGl2ZWluZm9nbzppbmZvLippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50dHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50LmFyZ2luZm8xdHlwZTouZXEuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50LmFyZ2xpdmVpbmZvZ286aW5mby4qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50dHlwZTouZXEuc3RydWN0IHsgQ2FjaGUgdW5zYWZlLlBvaW50ZXI7IEludGVyIHVuc2FmZS5Qb2ludGVyOyBDYW5GYWlsIGJvb2wgfXR5cGU6LmVxLnN0cnVjdCB7IENhY2hlIHVuc2FmZS5Qb2ludGVyOyBJbnRlciB1bnNhZmUuUG9pbnRlcjsgQ2FuRmFpbCBib29sIH0uYXJnaW5mbzF0eXBlOi5lcS5zdHJ1Y3QgeyBDYWNoZSB1bnNhZmUuUG9pbnRlcjsgSW50ZXIgdW5zYWZlLlBvaW50ZXI7IENhbkZhaWwgYm9vbCB9LmFyZ2xpdmVpbmZvZ286aW5mby4qc3RydWN0IHsgQ2FjaGUgdW5zYWZlLlBvaW50ZXI7IEludGVyIHVuc2FmZS5Qb2ludGVyOyBDYW5GYWlsIGJvb2wgfXR5cGU6LmVxLlsyXWludGVyZmFjZSB7fXR5cGU6LmVxLlsyXWludGVyZmFjZSB7fS5hcmdpbmZvMXR5cGU6LmVxLlsyXWludGVyZmFjZSB7fS5hcmdsaXZlaW5mb2dvOmluZm8uKlsyXWludGVyZmFjZSB7fXR5cGU6LmVxLlszXWludGVyZmFjZSB7fXR5cGU6LmVxLlszXWludGVyZmFjZSB7fS5hcmdpbmZvMXR5cGU6LmVxLlszXWludGVyZmFjZSB7fS5hcmdsaXZlaW5mb2dvOmluZm8uKlszXWludGVyZmFjZSB7fXR5cGU6LmVxLlszXXN0cmluZ3R5cGU6LmVxLlszXXN0cmluZy5hcmdpbmZvMXR5cGU6LmVxLlszXXN0cmluZy5hcmdsaXZlaW5mb2dvOmluZm8uKlszXXN0cmluZ3R5cGU6LmVxLls0XWZsb2F0NjR0eXBlOi5lcS5bNF1mbG9hdDY0LmFyZ2luZm8xdHlwZTouZXEuWzRdZmxvYXQ2NC5hcmdsaXZlaW5mb2dvOmluZm8uKls0XWZsb2F0NjR0eXBlOi5lcS5bNF1pbnRlcmZhY2Uge310eXBlOi5lcS5bNF1pbnRlcmZhY2Uge30uYXJnaW5mbzF0eXBlOi5lcS5bNF1pbnRlcmZhY2Uge30uYXJnbGl2ZWluZm9nbzppbmZvLipbNF1pbnRlcmZhY2Uge310eXBlOi5lcS5bNl1zdHJpbmd0eXBlOi5lcS5bNl1zdHJpbmcuYXJnaW5mbzF0eXBlOi5lcS5bNl1zdHJpbmcuYXJnbGl2ZWluZm9nbzppbmZvLipbNl1zdHJpbmdnbzpjdWluZm8ucHJvZHVjZXIuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXJ0eXBlOmlvLldyaXRlcm9zLigqRmlsZSkuV3JpdGVidWZpby4oKldyaXRlcikuV3JpdGV0eXBlOmlvLlJlYWRTZWVrZXJzdHJpbmdzLigqUmVhZGVyKS5SZWFkc3RyaW5ncy4oKlJlYWRlcikuU2Vla3R5cGU6aW8vZnMuRlNlbWJlZC5GUy5PcGVubmV0L2h0dHAuSGFuZGxlckZ1bmMuU2VydmVIVFRQc3RyaW5ncy4oKkJ1aWxkZXIpLldyaXRlcnVudGltZS5tZW1lcXVhbDY0wrdmcnVudGltZS5nY2JpdHMuMDEwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlci1ydW50aW1lLmdjYml0cy50eXBlOi5pbXBvcnRwYXRoLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnR5cGU6Lm5hbWVkYXRhLnNpemUtdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLmNvdW50aW5nV3JpdGVyLCBbXXVpbnQ4KSAoaW50LCBlcnJvciktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXIsIFtddWludDgpIChpbnQsIGVycm9yKXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXIsIFtddWludDgpIChpbnQsIGVycm9yKXR5cGU6Lm5hbWVkYXRhLldyaXRlLnR5cGU6Lm5hbWVkYXRhLipmdW5jKFtddWludDgpIChpbnQsIGVycm9yKS10eXBlOipmdW5jKFtddWludDgpIChpbnQsIGVycm9yKXR5cGU6ZnVuYyhbXXVpbnQ4KSAoaW50LCBlcnJvcilnbzpjdWluZm8ucGFja2FnZW5hbWUuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXJ0eXBlOipodG1sL3RlbXBsYXRlLlRlbXBsYXRlZ286aW5mby4qaHRtbC90ZW1wbGF0ZS5UZW1wbGF0ZWdvOmluZm8udWludHR5cGU6bmV0L2h0dHAuRmlsZVN5c3RlbWdvOmluZm8uaW8vZnMuRlNuZXQvaHR0cC4oKmlvRlMpLk9wZW5nbzppbmZvLm5ldC9odHRwLkZpbGVTeXN0ZW1uZXQvaHR0cC4oKmZpbGVIYW5kbGVyKS5TZXJ2ZUhUVFB0eXBlOipzeW5jLk11dGV4Z286aW5mby4qc3luYy5NdXRleGdvOmluZm8uaW50MzJ0eXBlOipzeW5jLk9uY2VnbzppbmZvLipzeW5jLk9uY2VnbzppbmZvLmZ1bmMoKXR5cGU6KnN5bmMvYXRvbWljLlVpbnQzMmdvOmluZm8uKnN5bmMvYXRvbWljLlVpbnQzMnR5cGU6W11zdHJpbmdnbzppbmZvLmludGVybmFsL3RyYWNlLmFjY3VtdWxhdG9ydHlwZTpbXWludGVyZmFjZSB7fXN5bmMvYXRvbWljLi5kaWN0LlBvaW50ZXJbc3RyaW5nXXR5cGU6KnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXWdvOmluZm8uW11zdHJpbmd0eXBlOm5ldC9odHRwLkhlYWRlcmdvOmluZm8ubmV0L2h0dHAuSGVhZGVyZ286aW5mby5uZXQvdGV4dHByb3RvLk1JTUVIZWFkZXJnbzpzdHJpbmcuInRocmVhZF9zdGF0ZV91bmludGVycnVwdGlibGUiZ286c3RyaW5nLiJ0aHJlYWRfc3RhdGVfaW93YWl0ImdvOnN0cmluZy4idGhyZWFkX3N0YXRlX3J1bm5pbmciZ286c3RyaW5nLiJ0aHJlYWRfc3RhdGVfcnVubmFibGUiZ286c3RyaW5nLiJ0aHJlYWRfc3RhdGVfdW5rbm93biJnbzpzdHJpbmcuImxpZ2h0X21lbW9yeV9kdW1wImdvOnN0cmluZy4iYmFja2dyb3VuZF9tZW1vcnlfZHVtcCJnbzpzdHJpbmcuImRldGFpbGVkX21lbW9yeV9kdW1wImdvOnN0cmluZy4iZ29vZCJnbzpzdHJpbmcuImJhZCJnbzpzdHJpbmcuInRlcnJpYmxlImdvOnN0cmluZy4ib2xpdmUiZ286c3RyaW5nLiJyYWlsX3Jlc3BvbnNlImdvOnN0cmluZy4icmFpbF9hbmltYXRpb24iZ286c3RyaW5nLiJyYWlsX2lkbGUiZ286c3RyaW5nLiJyYWlsX2xvYWQiZ286c3RyaW5nLiJoZWFwX2R1bXBfY2hpbGRfbm9kZV9hcnJvdyJnbzpzdHJpbmcuImNxX2J1aWxkX3J1bm5pbmciZ286c3RyaW5nLiJjcV9idWlsZF9wYXNzZWQiZ286c3RyaW5nLiJjcV9idWlsZF9mYWlsZWQiZ286c3RyaW5nLiJjcV9idWlsZF9hYmFuZG9uZWQiZ286c3RyaW5nLiJjcV9idWlsZF9hdHRlbXB0X3J1bm5pZyJnbzpzdHJpbmcuImNxX2J1aWxkX2F0dGVtcHRfcGFzc2VkImdvOnN0cmluZy4uZ29zdHJpbmcuMzA5NS5DN1VlOFZHeFZsckRpSGlTUVFER0hnPT1nbzpzdHJpbmcuLmdvc3RyaW5nLjczMzAuOURYaFlFUVJzMytoSXNsUzR1Y2tadz09aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuLmluaXR0YXNrZW5jb2RpbmcvanNvbi4uaW5pdHRhc2tmbXQuLmluaXR0YXNraW50ZXJuYWwvdHJhY2UuLmluaXR0YXNraW8uLmluaXR0YXNrc3RyY29udi4uaW5pdHRhc2t0aW1lLi5pbml0dGFza2h0bWwvdGVtcGxhdGUuLmluaXR0YXNrbWF0aC4uaW5pdHRhc2tzdHJpbmdzLi5pbml0dGFza2VtYmVkLi5pbml0dGFza25ldC9odHRwLi5pbml0dGFza2xvZy4uaW5pdHRhc2tzeW5jLi5pbml0dGFza2J1ZmlvLi5pbml0dGFza2ludGVybmFsL3Byb2ZpbGUuLmluaXR0YXNrb3MuLmluaXR0YXNrb3MvZXhlYy4uaW5pdHRhc2twYXRoL2ZpbGVwYXRoLi5pbml0dGFza3J1bnRpbWUuLmluaXR0YXNrdHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLlByb2ZpbGVSZWNvcmQudHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Qcm9maWxlUmVjb3JkdHlwZToubmFtZWRhdGEuKltdKnRyYWNlLkZyYW1lLXR5cGU6KltdKmludGVybmFsL3RyYWNlLkZyYW1ldHlwZTpbXSppbnRlcm5hbC90cmFjZS5GcmFtZXR5cGU6KmludGVybmFsL3RyYWNlLkZyYW1ldHlwZToubmFtZWRhdGEuU3RhY2sudHlwZToubmFtZWRhdGEuQ291bnQudHlwZToubmFtZWRhdGEuVGltZS50eXBlOi5lcWZ1bmMuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2V0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuUmFuZ2UudHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLlJhbmdlLCB0cmFjZXZpZXdlci5WaWV3VHlwZSkgc3RyaW5nLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3VHlwZSkgc3RyaW5ndHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5SYW5nZSwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld1R5cGUpIHN0cmluZ3J1bnRpbWUuc3RyZXF1YWzCt2Z0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuVmlld1R5cGUudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld1R5cGV0eXBlOi5uYW1lZGF0YS5VUkwudHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2V2aWV3ZXIuVmlld1R5cGUpIHN0cmluZy10eXBlOipmdW5jKGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdUeXBlKSBzdHJpbmd0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld1R5cGUpIHN0cmluZ3R5cGU6Lm5hbWVkYXRhLk5hbWUudHlwZToubmFtZWRhdGEuU3RhcnQudHlwZToubmFtZWRhdGEuRW5kLnR5cGU6Lm5hbWVkYXRhLlN0YXJ0VGltZS50eXBlOi5uYW1lZGF0YS5FbmRUaW1lLnR5cGU6Lm5hbWVkYXRhLipmdW5jKHRyYWNldmlld2VyLlJhbmdlLCB0cmFjZXZpZXdlci5WaWV3VHlwZSkgc3RyaW5nLXR5cGU6KmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2UsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdUeXBlKSBzdHJpbmd0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2UsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlZpZXdUeXBlKSBzdHJpbmd0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuZXZlbnRTei1ydW50aW1lLmdjYml0cy4wNDAwMDAwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuU3oudHlwZToubmFtZWRhdGEuRnJhbWVzLnR5cGU6W11pbnR0eXBlOi5lcWZ1bmMuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvd3R5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93LXR5cGU6Lm5hbWVkYXRhLlV0aWxXaW5kb3cuLmVtYmVkZGVkdHlwZTppbnRlcm5hbC90cmFjZS5VdGlsV2luZG93dHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnktdHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11Q2FjaGVFbnRyeXJ1bnRpbWUuZ2NiaXRzLmE0MDAwMDAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS4qW11bXXRyYWNlLk11dGF0b3JVdGlsLXR5cGU6KltdW11pbnRlcm5hbC90cmFjZS5NdXRhdG9yVXRpbHR5cGU6Lm5hbWVkYXRhLipbXXRyYWNlLk11dGF0b3JVdGlsLXR5cGU6W11pbnRlcm5hbC90cmFjZS5NdXRhdG9yVXRpbHR5cGU6aW50ZXJuYWwvdHJhY2UuTXV0YXRvclV0aWx0eXBlOi5uYW1lZGF0YS5pbml0LXR5cGU6Lm5hbWVkYXRhLnV0aWwtdHlwZToubmFtZWRhdGEubW11Q3VydmUtdHlwZToubmFtZWRhdGEuZXJyLXR5cGU6c3luYy5PbmNldHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLnNwbGl0dGVyLXR5cGU6Lm5hbWVkYXRhLipbXXRyYWNldmlld2VyLlJhbmdlLXR5cGU6KltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2V0eXBlOltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUmFuZ2V0eXBlOi5uYW1lZGF0YS5SYW5nZXMudHlwZTouZXFmdW5jLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2t0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIudGFzay10eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci50YXNrdHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci50YXNrdHlwZToubmFtZWRhdGEubmFtZS10eXBlOi5uYW1lZGF0YS5zb3J0SW5kZXgtdHlwZToubmFtZWRhdGEuKmF0b21pYy5Qb2ludGVyW3N0cmluZ10udHlwZTouZXFmdW5jLnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXXJ1bnRpbWUubWVtZXF1YWwwwrdmdHlwZToubmFtZWRhdGEuKlswXSpzdHJpbmctdHlwZToqWzBdKnN0cmluZ3R5cGU6WzBdKnN0cmluZ3R5cGU6Lm5hbWVkYXRhLipbXSpzdHJpbmctdHlwZToqW10qc3RyaW5ndHlwZTpbXSpzdHJpbmd0eXBlOi5pbXBvcnRwYXRoLnN5bmMvYXRvbWljLnR5cGU6Lm5hbWVkYXRhLl8tdHlwZToubmFtZWRhdGEudi10eXBlOnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXXR5cGU6c3luYy9hdG9taWMubm9Db3B5dHlwZToubmFtZWRhdGEuKmZ1bmMoKmF0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcsICpzdHJpbmcpIGJvb2wtdHlwZToqZnVuYygqc3luYy9hdG9taWMuUG9pbnRlcltzdHJpbmddLCAqc3RyaW5nLCAqc3RyaW5nKSBib29sdHlwZTpmdW5jKCpzeW5jL2F0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcsICpzdHJpbmcpIGJvb2x0eXBlOi5uYW1lZGF0YS4qZnVuYygqYXRvbWljLlBvaW50ZXJbc3RyaW5nXSkgKnN0cmluZy10eXBlOipmdW5jKCpzeW5jL2F0b21pYy5Qb2ludGVyW3N0cmluZ10pICpzdHJpbmd0eXBlOmZ1bmMoKnN5bmMvYXRvbWljLlBvaW50ZXJbc3RyaW5nXSkgKnN0cmluZ3R5cGU6Lm5hbWVkYXRhLipmdW5jKCphdG9taWMuUG9pbnRlcltzdHJpbmddLCAqc3RyaW5nKS10eXBlOipmdW5jKCpzeW5jL2F0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcpdHlwZTpmdW5jKCpzeW5jL2F0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcpdHlwZToubmFtZWRhdGEuKmZ1bmMoKmF0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcpICpzdHJpbmctdHlwZToqZnVuYygqc3luYy9hdG9taWMuUG9pbnRlcltzdHJpbmddLCAqc3RyaW5nKSAqc3RyaW5ndHlwZTpmdW5jKCpzeW5jL2F0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcpICpzdHJpbmd0eXBlOi5uYW1lZGF0YS5Db21wYXJlQW5kU3dhcC50eXBlOi5uYW1lZGF0YS4qZnVuYygqc3RyaW5nLCAqc3RyaW5nKSBib29sLXR5cGU6KmZ1bmMoKnN0cmluZywgKnN0cmluZykgYm9vbHR5cGU6ZnVuYygqc3RyaW5nLCAqc3RyaW5nKSBib29sdHlwZToubmFtZWRhdGEuTG9hZC50eXBlOi5uYW1lZGF0YS4qZnVuYygpICpzdHJpbmctdHlwZToqZnVuYygpICpzdHJpbmd0eXBlOmZ1bmMoKSAqc3RyaW5ndHlwZToubmFtZWRhdGEuU3RvcmUudHlwZToubmFtZWRhdGEuKmZ1bmMoKnN0cmluZyktdHlwZToqZnVuYygqc3RyaW5nKXR5cGU6ZnVuYygqc3RyaW5nKXR5cGU6Lm5hbWVkYXRhLlN3YXAudHlwZToubmFtZWRhdGEuKmZ1bmMoKnN0cmluZykgKnN0cmluZy10eXBlOipmdW5jKCpzdHJpbmcpICpzdHJpbmd0eXBlOmZ1bmMoKnN0cmluZykgKnN0cmluZ3N5bmMvYXRvbWljLigqUG9pbnRlcltzdHJpbmddKS5Db21wYXJlQW5kU3dhcHN5bmMvYXRvbWljLigqUG9pbnRlcltzdHJpbmddKS5Mb2Fkc3luYy9hdG9taWMuKCpQb2ludGVyW3N0cmluZ10pLlN0b3Jlc3luYy9hdG9taWMuKCpQb2ludGVyW3N0cmluZ10pLlN3YXB0eXBlOi5uYW1lZGF0YS4qW11bXWZsb2F0NjQtdHlwZToqW11bXWZsb2F0NjR0eXBlOi5uYW1lZGF0YS4qW110cmFjZXZpZXdlci5WaWV3LXR5cGU6KltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlld3R5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5WaWV3LnR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5WaWV3LCBpbnQpIHN0cmluZy10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3LCBpbnQpIHN0cmluZ3R5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVmlldywgaW50KSBzdHJpbmd0eXBlOi5uYW1lZGF0YS4qZnVuYyhpbnQpIHN0cmluZy10eXBlOipmdW5jKGludCkgc3RyaW5ndHlwZTpmdW5jKGludCkgc3RyaW5ncnVudGltZS5nY2JpdHMuMDUwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLlR5cGUudHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2V2aWV3ZXIuVmlldywgaW50KSBzdHJpbmctdHlwZToqZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3LCBpbnQpIHN0cmluZ3R5cGU6ZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3LCBpbnQpIHN0cmluZ3R5cGU6Lm5hbWVkYXRhLipbXXRyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3ctdHlwZToqW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5saW5rZWRVdGlsV2luZG93dHlwZToubmFtZWRhdGEuKmZ1bmMoaHR0cC5SZXNwb25zZVdyaXRlciwgKmh0dHAuUmVxdWVzdCktdHlwZToqZnVuYyhuZXQvaHR0cC5SZXNwb25zZVdyaXRlciwgKm5ldC9odHRwLlJlcXVlc3QpdHlwZTpmdW5jKG5ldC9odHRwLlJlc3BvbnNlV3JpdGVyLCAqbmV0L2h0dHAuUmVxdWVzdCl0eXBlOi5uYW1lZGF0YS4qbWFwW3RyYWNlLlV0aWxGbGFnc10qdHJhY2V2aWV3ZXIubW11Q2FjaGVFbnRyeS10eXBlOiptYXBbaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzXSppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5dHlwZToubmFtZWRhdGEuKm1hcC5idWNrZXRbdHJhY2UuVXRpbEZsYWdzXSp0cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5LXR5cGU6Km1hcC5idWNrZXRbaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzXSppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5dHlwZTpub2FsZy5tYXAuYnVja2V0W2ludGVybmFsL3RyYWNlLlV0aWxGbGFnc10qaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11Q2FjaGVFbnRyeXJ1bnRpbWUuZ2NiaXRzLjAwZmUwMzAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS4qWzhddWludDgtdHlwZToqWzhddWludDh0eXBlOls4XXVpbnQ4dHlwZToubmFtZWRhdGEuKls4XXRyYWNlLlV0aWxGbGFncy10eXBlOipbOF1pbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3N0eXBlOm5vYWxnLls4XWludGVybmFsL3RyYWNlLlV0aWxGbGFnc3R5cGU6Lm5hbWVkYXRhLipbXXRyYWNlLlV0aWxGbGFncy10eXBlOipbXWludGVybmFsL3RyYWNlLlV0aWxGbGFnc3R5cGU6W11pbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3N0eXBlOi5uYW1lZGF0YS4qWzhdKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnktdHlwZToqWzhdKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdUNhY2hlRW50cnl0eXBlOm5vYWxnLls4XSppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5cnVudGltZS5nY2JpdHMuZmYwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLipbXSp0cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5LXR5cGU6KltdKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdUNhY2hlRW50cnl0eXBlOltdKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdUNhY2hlRW50cnl0eXBlOi5pbXBvcnRwYXRoLi50eXBlOi5uYW1lZGF0YS50b3BiaXRzLXR5cGU6Lm5hbWVkYXRhLmtleXMtdHlwZToubmFtZWRhdGEuZWxlbXMtdHlwZToubmFtZWRhdGEub3ZlcmZsb3ctcnVudGltZS5tZW1oYXNoNjTCt2Z0eXBlOi5uYW1lZGF0YS4qbWFwW3N0cmluZ10qcHJvZmlsZS5GdW5jdGlvbi10eXBlOiptYXBbc3RyaW5nXSppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9udHlwZToubmFtZWRhdGEuKm1hcC5idWNrZXRbc3RyaW5nXSpwcm9maWxlLkZ1bmN0aW9uLXR5cGU6Km1hcC5idWNrZXRbc3RyaW5nXSppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9ucnVudGltZS5nY2JpdHMuYWFhYWZlMDMwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLipbOF1zdHJpbmctdHlwZToqWzhdc3RyaW5ndHlwZTpub2FsZy5bOF1zdHJpbmdydW50aW1lLmdjYml0cy41NTU1MDAwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuKls4XSpwcm9maWxlLkZ1bmN0aW9uLXR5cGU6Kls4XSppbnRlcm5hbC9wcm9maWxlLkZ1bmN0aW9udHlwZTpub2FsZy5bOF0qaW50ZXJuYWwvcHJvZmlsZS5GdW5jdGlvbnR5cGU6Lm5hbWVkYXRhLipbXSpwcm9maWxlLkZ1bmN0aW9uLXR5cGU6KltdKmludGVybmFsL3Byb2ZpbGUuRnVuY3Rpb250eXBlOltdKmludGVybmFsL3Byb2ZpbGUuRnVuY3Rpb25ydW50aW1lLnN0cmhhc2jCt2Z0eXBlOi5uYW1lZGF0YS4qbWFwW3N0cmluZ11pbnRlcmZhY2Uge30tdHlwZToqbWFwW3N0cmluZ11pbnRlcmZhY2Uge310eXBlOi5uYW1lZGF0YS4qbWFwLmJ1Y2tldFtzdHJpbmddaW50ZXJmYWNlIHt9LXR5cGU6Km1hcC5idWNrZXRbc3RyaW5nXWludGVyZmFjZSB7fXR5cGU6bm9hbGcubWFwLmJ1Y2tldFtzdHJpbmddaW50ZXJmYWNlIHt9cnVudGltZS5nY2JpdHMuYWFhYTU0NTUwMzAwMDAwMHR5cGU6Lm5hbWVkYXRhLipbOF1pbnRlcmZhY2Uge30tdHlwZToqWzhdaW50ZXJmYWNlIHt9dHlwZTpub2FsZy5bOF1pbnRlcmZhY2Uge31ydW50aW1lLmdjYml0cy5hYWFhMDAwMDAwMDAwMDAwdHlwZTppbnRlcmZhY2Uge310eXBlOi5uYW1lZGF0YS4qbWFwW3N0cmluZ110cmFjZS5VdGlsRmxhZ3MtdHlwZToqbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3N0eXBlOi5uYW1lZGF0YS4qbWFwLmJ1Y2tldFtzdHJpbmdddHJhY2UuVXRpbEZsYWdzLXR5cGU6Km1hcC5idWNrZXRbc3RyaW5nXWludGVybmFsL3RyYWNlLlV0aWxGbGFnc3R5cGU6bm9hbGcubWFwLmJ1Y2tldFtzdHJpbmddaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzcnVudGltZS5nY2JpdHMuYWFhYTAwMDIwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLiptYXBbc3RyaW5nXWZvcm1hdC5GcmFtZS10eXBlOiptYXBbc3RyaW5nXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZXR5cGU6Lm5hbWVkYXRhLiptYXAuYnVja2V0W3N0cmluZ11mb3JtYXQuRnJhbWUtdHlwZToqbWFwLmJ1Y2tldFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lcnVudGltZS5nY2JpdHMuYWFhYTkyMjQ0OTAyMDAwMHR5cGU6Lm5hbWVkYXRhLipbOF1mb3JtYXQuRnJhbWUtdHlwZToqWzhdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1ldHlwZTpub2FsZy5bOF1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWVydW50aW1lLmdjYml0cy40OTkyMjQwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuKltdZm9ybWF0LkZyYW1lLXR5cGU6KltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1ldHlwZTpbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZXR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1ldHlwZToubmFtZWRhdGEuKm1hcFt1aW50NjRdKnByb2ZpbGUuTG9jYXRpb24tdHlwZToqbWFwW3VpbnQ2NF0qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbnR5cGU6Lm5hbWVkYXRhLiptYXAuYnVja2V0W3VpbnQ2NF0qcHJvZmlsZS5Mb2NhdGlvbi10eXBlOiptYXAuYnVja2V0W3VpbnQ2NF0qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbnR5cGU6Lm5hbWVkYXRhLipbOF11aW50NjQtdHlwZToqWzhddWludDY0dHlwZTpub2FsZy5bOF11aW50NjR0eXBlOltddWludDY0dHlwZToubmFtZWRhdGEuKls4XSpwcm9maWxlLkxvY2F0aW9uLXR5cGU6Kls4XSppbnRlcm5hbC9wcm9maWxlLkxvY2F0aW9udHlwZTpub2FsZy5bOF0qaW50ZXJuYWwvcHJvZmlsZS5Mb2NhdGlvbnR5cGU6Lm5hbWVkYXRhLipbXSpwcm9maWxlLkxvY2F0aW9uLXR5cGU6KltdKmludGVybmFsL3Byb2ZpbGUuTG9jYXRpb250eXBlOltdKmludGVybmFsL3Byb2ZpbGUuTG9jYXRpb250eXBlOi5uYW1lZGF0YS4qbWFwW3VpbnQ2NF10cmFjZXZpZXdlci5mcmFtZU5vZGUtdHlwZToqbWFwW3VpbnQ2NF1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5mcmFtZU5vZGV0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuZnJhbWVOb2RlLXR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmZyYW1lTm9kZXR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZnJhbWVOb2RlcnVudGltZS5nY2JpdHMuMDIwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLmlkLXR5cGU6Lm5hbWVkYXRhLmNoaWxkcmVuLXR5cGU6Lm5hbWVkYXRhLiptYXAuYnVja2V0W3VpbnQ2NF10cmFjZXZpZXdlci5mcmFtZU5vZGUtdHlwZToqbWFwLmJ1Y2tldFt1aW50NjRdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZnJhbWVOb2RldHlwZTpub2FsZy5tYXAuYnVja2V0W3VpbnQ2NF1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5mcmFtZU5vZGVydW50aW1lLmdjYml0cy4wMDU0NTUwMzAwMDAwMDAwdHlwZToubmFtZWRhdGEuKls4XXRyYWNldmlld2VyLmZyYW1lTm9kZS10eXBlOipbOF1pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5mcmFtZU5vZGV0eXBlOm5vYWxnLls4XWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmZyYW1lTm9kZXR5cGU6Lm5hbWVkYXRhLipbXXRyYWNldmlld2VyLmZyYW1lTm9kZS10eXBlOipbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmZyYW1lTm9kZXR5cGU6W11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5mcmFtZU5vZGV0eXBlOi5uYW1lZGF0YS4qbWFwW3VpbnQ2NF10cmFjZXZpZXdlci50YXNrLXR5cGU6Km1hcFt1aW50NjRdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGFza3R5cGU6Lm5hbWVkYXRhLiptYXAuYnVja2V0W3VpbnQ2NF10cmFjZXZpZXdlci50YXNrLXR5cGU6Km1hcC5idWNrZXRbdWludDY0XWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2t0eXBlOm5vYWxnLm1hcC5idWNrZXRbdWludDY0XWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2tydW50aW1lLmdjYml0cy4wMDkyMjQ0OTAyMDAwMDAwdHlwZToubmFtZWRhdGEuKls4XXRyYWNldmlld2VyLnRhc2stdHlwZToqWzhdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGFza3R5cGU6bm9hbGcuWzhdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIudGFza3R5cGU6Lm5hbWVkYXRhLipbXXRyYWNldmlld2VyLnRhc2stdHlwZToqW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci50YXNrdHlwZTpbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRhc2t0eXBlOi5uYW1lZGF0YS4qbWFwW3VpbnQ2NF1zdHJpbmctdHlwZToqbWFwW3VpbnQ2NF1zdHJpbmd0eXBlOi5uYW1lZGF0YS4qbWFwLmJ1Y2tldFt1aW50NjRdc3RyaW5nLXR5cGU6Km1hcC5idWNrZXRbdWludDY0XXN0cmluZ3R5cGU6bm9hbGcubWFwLmJ1Y2tldFt1aW50NjRdc3RyaW5ncnVudGltZS5nY2JpdHMuMDBhYWFhMDIwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5UcmFjZUNvbnN1bWVyLnR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRyYWNlQ29uc3VtZXJydW50aW1lLmdjYml0cy4wZjAwMDAwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuKmZ1bmMoc3RyaW5nKS10eXBlOipmdW5jKHN0cmluZyl0eXBlOi5uYW1lZGF0YS4qZnVuYygqZm9ybWF0LkV2ZW50LCBib29sKS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRXZlbnQsIGJvb2wpdHlwZToubmFtZWRhdGEuKmZ1bmMoc3RyaW5nLCBmb3JtYXQuRnJhbWUpLXR5cGU6KmZ1bmMoc3RyaW5nLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWUpdHlwZToubmFtZWRhdGEuKmZ1bmMoKS10eXBlOipmdW5jKCl0eXBlOi5uYW1lZGF0YS5Db25zdW1lVGltZVVuaXQudHlwZToubmFtZWRhdGEuQ29uc3VtZVZpZXdlckV2ZW50LnR5cGU6Lm5hbWVkYXRhLkNvbnN1bWVWaWV3ZXJGcmFtZS50eXBlOi5uYW1lZGF0YS5GbHVzaC50eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuTW9kZS50eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Nb2RldHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Nb2RlZ286Y29uc3RpbmZvLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyZ286aW5mby5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Nb2RldHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLkVtaXR0ZXIudHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRyYWNldmlld2VyLkFycm93RXZlbnQpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5BcnJvd0V2ZW50KXR5cGU6LmVxZnVuYy5pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5BcnJvd0V2ZW50dHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLkFycm93RXZlbnQudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXJyb3dFdmVudHR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXJyb3dFdmVudHR5cGU6Lm5hbWVkYXRhLkZyb21SZXNvdXJjZS50eXBlOi5uYW1lZGF0YS5Gcm9tU3RhY2sudHlwZToubmFtZWRhdGEuVG9SZXNvdXJjZS50eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnQpdHlwZTouZXFmdW5jLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFzeW5jU2xpY2VFdmVudHR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnQudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50dHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnRydW50aW1lLmdjYml0cy4wMTBiMDAwMDAwMDAwMDAwdHlwZTouZXFmdW5jLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNsaWNlRXZlbnR0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuU2xpY2VFdmVudC50eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50dHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50cnVudGltZS5nY2JpdHMuMDEwMTAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLlRzLnR5cGU6Lm5hbWVkYXRhLkR1ci50eXBlOi5uYW1lZGF0YS5SZXNvdXJjZS50eXBlOi5uYW1lZGF0YS5FbmRTdGFjay50eXBlOi5uYW1lZGF0YS5BcmcudHlwZToubmFtZWRhdGEuU2xpY2VFdmVudC4uZW1iZWRkZWR0eXBlOi5uYW1lZGF0YS5DYXRlZ29yeS50eXBlOi5uYW1lZGF0YS5TY29wZS50eXBlOi5uYW1lZGF0YS5UYXNrQ29sb3JJbmRleC50eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlcikgZXJyb3ItdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlcikgZXJyb3J0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIpIGVycm9ydHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsICpmb3JtYXQuRXZlbnQpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRXZlbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkV2ZW50KXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyKS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyKXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlcil0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdWludDY0KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQpdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24sIHRyYWNldmlld2VyLkdTdGF0ZSwgdHJhY2V2aWV3ZXIuR1N0YXRlKS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB0aW1lLkR1cmF0aW9uLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5HU3RhdGUsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkdTdGF0ZSl0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24sIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkdTdGF0ZSwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1N0YXRlKXR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5HU3RhdGUudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1N0YXRldHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5HU3RhdGV0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbiwgdWludDY0KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB0aW1lLkR1cmF0aW9uLCB1aW50NjQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB0aW1lLkR1cmF0aW9uLCB1aW50NjQpdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24sIHRyYWNldmlld2VyLlRocmVhZFN0YXRlLCBpbnQ2NCktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbiwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUsIGludDY0KXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbiwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUsIGludDY0KXR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5UaHJlYWRTdGF0ZS50eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UaHJlYWRTdGF0ZXR5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGV0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5JbnN0YW50RXZlbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5JbnN0YW50RXZlbnQpdHlwZTouZXFmdW5jLmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkluc3RhbnRFdmVudHR5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5JbnN0YW50RXZlbnQudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50dHlwZTppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5JbnN0YW50RXZlbnRydW50aW1lLmdjYml0cy4wYTAxMDAwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHVpbnQ2NCwgc3RyaW5nKS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQsIHN0cmluZyl0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIHVpbnQ2NCwgc3RyaW5nKXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCBmdW5jKHVpbnQ2NCkgYm9vbCktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgZnVuYyh1aW50NjQpIGJvb2wpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBmdW5jKHVpbnQ2NCkgYm9vbCl0eXBlOi5uYW1lZGF0YS4qZnVuYyh1aW50NjQpIGJvb2wtdHlwZToqZnVuYyh1aW50NjQpIGJvb2x0eXBlOmZ1bmModWludDY0KSBib29sdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHN0cmluZyktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgc3RyaW5nKXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgc3RyaW5nKXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5TbGljZUV2ZW50KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50KXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU2xpY2VFdmVudCl0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgW10qdHJhY2UuRnJhbWUpIGludC10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBbXSppbnRlcm5hbC90cmFjZS5GcmFtZSkgaW50dHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBbXSppbnRlcm5hbC90cmFjZS5GcmFtZSkgaW50dHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQsIHN0cmluZywgaW50KXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5BcnJvd0V2ZW50LCB1aW50NjQpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnQsIHVpbnQ2NCl0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnQsIHVpbnQ2NCl0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuZnJhbWVOb2RlLCBbXSp0cmFjZS5GcmFtZSkgaW50LXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmZyYW1lTm9kZSwgW10qaW50ZXJuYWwvdHJhY2UuRnJhbWUpIGludHR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZnJhbWVOb2RlLCBbXSppbnRlcm5hbC90cmFjZS5GcmFtZSkgaW50dHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24pLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24pdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB0aW1lLkR1cmF0aW9uKXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5TbGljZUV2ZW50LCB1aW50NjQsIHN0cmluZyktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU2xpY2VFdmVudCwgdWludDY0LCBzdHJpbmcpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50LCB1aW50NjQsIHN0cmluZyl0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdWludDY0LCB1aW50NjQsIHN0cmluZywgaW50KS10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24pIGJvb2wtdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbikgYm9vbHR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbikgYm9vbHR5cGU6Lm5hbWVkYXRhLkFycm93LnR5cGU6Lm5hbWVkYXRhLipmdW5jKHRyYWNldmlld2VyLkFycm93RXZlbnQpLXR5cGU6KmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXJyb3dFdmVudCl0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuQXJyb3dFdmVudCl0eXBlOi5uYW1lZGF0YS5Bc3luY1NsaWNlLnR5cGU6Lm5hbWVkYXRhLipmdW5jKHRyYWNldmlld2VyLkFzeW5jU2xpY2VFdmVudCktdHlwZToqZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnQpdHlwZTpmdW5jKGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFzeW5jU2xpY2VFdmVudCl0eXBlOi5uYW1lZGF0YS5FcnIudHlwZToubmFtZWRhdGEuKmZ1bmMoKSBlcnJvci10eXBlOipmdW5jKCkgZXJyb3J0eXBlOmZ1bmMoKSBlcnJvcnR5cGU6Lm5hbWVkYXRhLkV2ZW50LnR5cGU6Lm5hbWVkYXRhLipmdW5jKCpmb3JtYXQuRXZlbnQpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5FdmVudCl0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5FdmVudCl0eXBlOi5uYW1lZGF0YS5Gb2N1cy50eXBlOi5uYW1lZGF0YS4qZnVuYyh1aW50NjQpLXR5cGU6KmZ1bmModWludDY0KXR5cGU6ZnVuYyh1aW50NjQpdHlwZToubmFtZWRhdGEuR29tYXhwcm9jcy50eXBlOi5uYW1lZGF0YS5Hb3JvdXRpbmVUcmFuc2l0aW9uLnR5cGU6Lm5hbWVkYXRhLipmdW5jKHRpbWUuRHVyYXRpb24sIHRyYWNldmlld2VyLkdTdGF0ZSwgdHJhY2V2aWV3ZXIuR1N0YXRlKS10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24sIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkdTdGF0ZSwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1N0YXRlKXR5cGU6ZnVuYyh0aW1lLkR1cmF0aW9uLCBpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5HU3RhdGUsIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkdTdGF0ZSl0eXBlOi5uYW1lZGF0YS5IZWFwQWxsb2MudHlwZToubmFtZWRhdGEuKmZ1bmModGltZS5EdXJhdGlvbiwgdWludDY0KS10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24sIHVpbnQ2NCl0eXBlOmZ1bmModGltZS5EdXJhdGlvbiwgdWludDY0KXR5cGU6Lm5hbWVkYXRhLkhlYXBHb2FsLnR5cGU6Lm5hbWVkYXRhLkluY1RocmVhZFN0YXRlQ291bnQudHlwZToubmFtZWRhdGEuKmZ1bmModGltZS5EdXJhdGlvbiwgdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUsIGludDY0KS10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24sIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRocmVhZFN0YXRlLCBpbnQ2NCl0eXBlOmZ1bmModGltZS5EdXJhdGlvbiwgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUsIGludDY0KXR5cGU6Lm5hbWVkYXRhLkluc3RhbnQudHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50KS10eXBlOipmdW5jKGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkluc3RhbnRFdmVudCl0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50KXR5cGU6Lm5hbWVkYXRhLk9wdGlvbmFsRXZlbnQudHlwZToubmFtZWRhdGEuKmZ1bmModWludDY0LCBzdHJpbmcpLXR5cGU6KmZ1bmModWludDY0LCBzdHJpbmcpdHlwZTpmdW5jKHVpbnQ2NCwgc3RyaW5nKXR5cGU6Lm5hbWVkYXRhLlNldFJlc291cmNlRmlsdGVyLnR5cGU6Lm5hbWVkYXRhLipmdW5jKGZ1bmModWludDY0KSBib29sKS10eXBlOipmdW5jKGZ1bmModWludDY0KSBib29sKXR5cGU6ZnVuYyhmdW5jKHVpbnQ2NCkgYm9vbCl0eXBlOi5uYW1lZGF0YS5TZXRSZXNvdXJjZVR5cGUudHlwZToubmFtZWRhdGEuU2xpY2UudHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2V2aWV3ZXIuU2xpY2VFdmVudCktdHlwZToqZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50KXR5cGU6ZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TbGljZUV2ZW50KXR5cGU6Lm5hbWVkYXRhLipmdW5jKFtdKnRyYWNlLkZyYW1lKSBpbnQtdHlwZToqZnVuYyhbXSppbnRlcm5hbC90cmFjZS5GcmFtZSkgaW50dHlwZTpmdW5jKFtdKmludGVybmFsL3RyYWNlLkZyYW1lKSBpbnR0eXBlOi5uYW1lZGF0YS5UYXNrLnR5cGU6Lm5hbWVkYXRhLipmdW5jKHVpbnQ2NCwgc3RyaW5nLCBpbnQpLXR5cGU6KmZ1bmModWludDY0LCBzdHJpbmcsIGludCl0eXBlOmZ1bmModWludDY0LCBzdHJpbmcsIGludCl0eXBlOi5uYW1lZGF0YS5UYXNrQXJyb3cudHlwZToubmFtZWRhdGEuVGFza1NsaWNlLnR5cGU6Lm5hbWVkYXRhLmFycm93LXR5cGU6Lm5hbWVkYXRhLipmdW5jKHRyYWNldmlld2VyLkFycm93RXZlbnQsIHVpbnQ2NCktdHlwZToqZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5BcnJvd0V2ZW50LCB1aW50NjQpdHlwZTpmdW5jKGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLkFycm93RXZlbnQsIHVpbnQ2NCl0eXBlOi5uYW1lZGF0YS5idWlsZEJyYW5jaC10eXBlOi5uYW1lZGF0YS4qZnVuYyh0cmFjZXZpZXdlci5mcmFtZU5vZGUsIFtdKnRyYWNlLkZyYW1lKSBpbnQtdHlwZToqZnVuYyhpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5mcmFtZU5vZGUsIFtdKmludGVybmFsL3RyYWNlLkZyYW1lKSBpbnR0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuZnJhbWVOb2RlLCBbXSppbnRlcm5hbC90cmFjZS5GcmFtZSkgaW50dHlwZToubmFtZWRhdGEuZW1pdEhlYXBDb3VudGVycy10eXBlOi5uYW1lZGF0YS4qZnVuYyh0aW1lLkR1cmF0aW9uKS10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24pdHlwZTpmdW5jKHRpbWUuRHVyYXRpb24pdHlwZToubmFtZWRhdGEucHJvY2Vzc01ldGEtdHlwZToubmFtZWRhdGEuc2xpY2UtdHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2V2aWV3ZXIuU2xpY2VFdmVudCwgdWludDY0LCBzdHJpbmcpLXR5cGU6KmZ1bmMoaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU2xpY2VFdmVudCwgdWludDY0LCBzdHJpbmcpdHlwZTpmdW5jKGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNsaWNlRXZlbnQsIHVpbnQ2NCwgc3RyaW5nKXR5cGU6Lm5hbWVkYXRhLnRocmVhZE1ldGEtdHlwZToubmFtZWRhdGEuKmZ1bmModWludDY0LCB1aW50NjQsIHN0cmluZywgaW50KS10eXBlOipmdW5jKHVpbnQ2NCwgdWludDY0LCBzdHJpbmcsIGludCl0eXBlOmZ1bmModWludDY0LCB1aW50NjQsIHN0cmluZywgaW50KXR5cGU6Lm5hbWVkYXRhLnRzV2l0aGluUmFuZ2UtdHlwZToubmFtZWRhdGEuKmZ1bmModGltZS5EdXJhdGlvbikgYm9vbC10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24pIGJvb2x0eXBlOmZ1bmModGltZS5EdXJhdGlvbikgYm9vbHJ1bnRpbWUuZ2NiaXRzLjBmMDAwMDkwMTUwMDAwMDBydW50aW1lLm1lbWVxdWFsMTI4wrdmdHlwZToubmFtZWRhdGEuKnRyYWNldmlld2VyLmhlYXBTdGF0cy10eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5oZWFwU3RhdHN0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmhlYXBTdGF0c3R5cGU6Lm5hbWVkYXRhLmhlYXBBbGxvYy10eXBlOi5uYW1lZGF0YS5uZXh0R0MtdHlwZTouZXFmdW5jNDBydW50aW1lLm1lbWVxdWFsX3ZhcmxlbnR5cGU6Lm5hbWVkYXRhLipbNV1pbnQ2NC10eXBlOipbNV1pbnQ2NHR5cGU6WzVdaW50NjR0eXBlOltdaW50NjR0eXBlOi5lcWZ1bmMyNHR5cGU6Lm5hbWVkYXRhLipbM11pbnQ2NC10eXBlOipbM11pbnQ2NHR5cGU6WzNdaW50NjR0eXBlOi5uYW1lZGF0YS5jLXR5cGU6Lm5hbWVkYXRhLnJhbmdlU3RhcnQtdHlwZToubmFtZWRhdGEucmFuZ2VFbmQtdHlwZToubmFtZWRhdGEuaGVhcFN0YXRzLXR5cGU6Lm5hbWVkYXRhLnByZXZIZWFwU3RhdHMtdHlwZToubmFtZWRhdGEuZ3N0YXRlcy10eXBlOi5uYW1lZGF0YS5wcmV2R3N0YXRlcy10eXBlOi5uYW1lZGF0YS50aHJlYWRTdGF0cy10eXBlOi5uYW1lZGF0YS5wcmV2VGhyZWFkU3RhdHMtdHlwZToubmFtZWRhdGEuZ29tYXhwcm9jcy10eXBlOi5uYW1lZGF0YS5mcmFtZVRyZWUtdHlwZToubmFtZWRhdGEuZnJhbWVTZXEtdHlwZToubmFtZWRhdGEuYXJyb3dTZXEtdHlwZToubmFtZWRhdGEuZmlsdGVyLXR5cGU6Lm5hbWVkYXRhLnJlc291cmNlVHlwZS10eXBlOi5uYW1lZGF0YS5yZXNvdXJjZXMtdHlwZToubmFtZWRhdGEuZm9jdXNSZXNvdXJjZS10eXBlOi5uYW1lZGF0YS50YXNrcy10eXBlOi5uYW1lZGF0YS5hc3luY1NsaWNlU2VxLWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLi5zdG1wXzB0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbS50eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgdGltZS5EdXJhdGlvbiktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgdGltZS5EdXJhdGlvbil0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRpbWVIaXN0b2dyYW0sIHRpbWUuRHVyYXRpb24pdHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbXR5cGU6Lm5hbWVkYXRhLipmdW5jKCp0cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtLCBpbnQpIHRpbWUuRHVyYXRpb24tdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgaW50KSB0aW1lLkR1cmF0aW9udHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtLCBpbnQpIHRpbWUuRHVyYXRpb250eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgZnVuYyh0aW1lLkR1cmF0aW9uLCB0aW1lLkR1cmF0aW9uKSBzdHJpbmcpIHRlbXBsYXRlLkhUTUwtdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgZnVuYyh0aW1lLkR1cmF0aW9uLCB0aW1lLkR1cmF0aW9uKSBzdHJpbmcpIGh0bWwvdGVtcGxhdGUuSFRNTHR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgZnVuYyh0aW1lLkR1cmF0aW9uLCB0aW1lLkR1cmF0aW9uKSBzdHJpbmcpIGh0bWwvdGVtcGxhdGUuSFRNTHR5cGU6Lm5hbWVkYXRhLipmdW5jKHRpbWUuRHVyYXRpb24sIHRpbWUuRHVyYXRpb24pIHN0cmluZy10eXBlOipmdW5jKHRpbWUuRHVyYXRpb24sIHRpbWUuRHVyYXRpb24pIHN0cmluZ3R5cGU6ZnVuYyh0aW1lLkR1cmF0aW9uLCB0aW1lLkR1cmF0aW9uKSBzdHJpbmd0eXBlOi5uYW1lZGF0YS5BZGQudHlwZToubmFtZWRhdGEuQnVja2V0TWluLnR5cGU6Lm5hbWVkYXRhLipmdW5jKGludCkgdGltZS5EdXJhdGlvbi10eXBlOipmdW5jKGludCkgdGltZS5EdXJhdGlvbnR5cGU6ZnVuYyhpbnQpIHRpbWUuRHVyYXRpb250eXBlOi5uYW1lZGF0YS5Ub0hUTUwudHlwZToubmFtZWRhdGEuKmZ1bmMoZnVuYyh0aW1lLkR1cmF0aW9uLCB0aW1lLkR1cmF0aW9uKSBzdHJpbmcpIHRlbXBsYXRlLkhUTUwtdHlwZToqZnVuYyhmdW5jKHRpbWUuRHVyYXRpb24sIHRpbWUuRHVyYXRpb24pIHN0cmluZykgaHRtbC90ZW1wbGF0ZS5IVE1MdHlwZTpmdW5jKGZ1bmModGltZS5EdXJhdGlvbiwgdGltZS5EdXJhdGlvbikgc3RyaW5nKSBodG1sL3RlbXBsYXRlLkhUTUx0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlRpbWVIaXN0b2dyYW10eXBlOi5uYW1lZGF0YS5CdWNrZXRzLnR5cGU6Lm5hbWVkYXRhLk1pbkJ1Y2tldC50eXBlOi5uYW1lZGF0YS5NYXhCdWNrZXQuaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuc3RhdGljQ29udGVudC5maWxlc2dvOmluZm8uZW1iZWQuRlN0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuTXV0YXRvclV0aWxGdW5jLnR5cGU6KmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk11dGF0b3JVdGlsRnVuY3R5cGU6aW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuTXV0YXRvclV0aWxGdW5jZ286aW5mby5tYXBbc3RyaW5nXWludGVybmFsL3RyYWNlLlV0aWxGbGFnc3R5cGU6Lm5hbWVkYXRhLip0cmFjZXZpZXdlci5tbXUtdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLm1tdSwgaHR0cC5SZXNwb25zZVdyaXRlciwgKmh0dHAuUmVxdWVzdCktdHlwZToqZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11LCBuZXQvaHR0cC5SZXNwb25zZVdyaXRlciwgKm5ldC9odHRwLlJlcXVlc3QpdHlwZTpmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXUsIG5ldC9odHRwLlJlc3BvbnNlV3JpdGVyLCAqbmV0L2h0dHAuUmVxdWVzdCl0eXBlOippbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXV0eXBlOi5uYW1lZGF0YS4qZnVuYygqdHJhY2V2aWV3ZXIubW11LCB0cmFjZS5VdGlsRmxhZ3MpIChbXVtddHJhY2UuTXV0YXRvclV0aWwsICp0cmFjZS5NTVVDdXJ2ZSwgZXJyb3IpLXR5cGU6KmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdSwgaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzKSAoW11bXWludGVybmFsL3RyYWNlLk11dGF0b3JVdGlsLCAqaW50ZXJuYWwvdHJhY2UuTU1VQ3VydmUsIGVycm9yKXR5cGU6ZnVuYygqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubW11LCBpbnRlcm5hbC90cmFjZS5VdGlsRmxhZ3MpIChbXVtdaW50ZXJuYWwvdHJhY2UuTXV0YXRvclV0aWwsICppbnRlcm5hbC90cmFjZS5NTVVDdXJ2ZSwgZXJyb3IpdHlwZToubmFtZWRhdGEuKmZ1bmMoKnRyYWNldmlld2VyLm1tdSwgdHJhY2UuVXRpbFdpbmRvdywgdGltZS5EdXJhdGlvbikgdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdy10eXBlOipmdW5jKCppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXUsIGludGVybmFsL3RyYWNlLlV0aWxXaW5kb3csIHRpbWUuRHVyYXRpb24pIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3d0eXBlOmZ1bmMoKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdSwgaW50ZXJuYWwvdHJhY2UuVXRpbFdpbmRvdywgdGltZS5EdXJhdGlvbikgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvd3R5cGU6Lm5hbWVkYXRhLkhhbmRsZURldGFpbHMudHlwZToubmFtZWRhdGEuSGFuZGxlUGxvdC50eXBlOi5uYW1lZGF0YS5nZXQtdHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2UuVXRpbEZsYWdzKSAoW11bXXRyYWNlLk11dGF0b3JVdGlsLCAqdHJhY2UuTU1VQ3VydmUsIGVycm9yKS10eXBlOipmdW5jKGludGVybmFsL3RyYWNlLlV0aWxGbGFncykgKFtdW11pbnRlcm5hbC90cmFjZS5NdXRhdG9yVXRpbCwgKmludGVybmFsL3RyYWNlLk1NVUN1cnZlLCBlcnJvcil0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UuVXRpbEZsYWdzKSAoW11bXWludGVybmFsL3RyYWNlLk11dGF0b3JVdGlsLCAqaW50ZXJuYWwvdHJhY2UuTU1VQ3VydmUsIGVycm9yKXR5cGU6Lm5hbWVkYXRhLm5ld0xpbmtlZFV0aWxXaW5kb3ctdHlwZToubmFtZWRhdGEuKmZ1bmModHJhY2UuVXRpbFdpbmRvdywgdGltZS5EdXJhdGlvbikgdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdy10eXBlOipmdW5jKGludGVybmFsL3RyYWNlLlV0aWxXaW5kb3csIHRpbWUuRHVyYXRpb24pIGludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3d0eXBlOmZ1bmMoaW50ZXJuYWwvdHJhY2UuVXRpbFdpbmRvdywgdGltZS5EdXJhdGlvbikgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvd3J1bnRpbWUuZ2NiaXRzLjBlMDAwMDAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS5tdS10eXBlOi5uYW1lZGF0YS5jYWNoZS10eXBlOi5uYW1lZGF0YS5mLXR5cGU6Lm5hbWVkYXRhLnJhbmdlcy10eXBlOnN5bmMuTXV0ZXh0eXBlOi5uYW1lZGF0YS4qdHJhY2V2aWV3ZXIuUHJvZmlsZUZ1bmMudHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUHJvZmlsZUZ1bmN0eXBlOmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlByb2ZpbGVGdW5jdHlwZToubmFtZWRhdGEuKltddHJhY2V2aWV3ZXIuUHJvZmlsZVJlY29yZC10eXBlOipbXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlByb2ZpbGVSZWNvcmR0eXBlOltdaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUHJvZmlsZVJlY29yZHR5cGU6bm9hbGcuWzIzXXN0cmluZ3R5cGU6Lm5hbWVkYXRhLipbMjNdc3RyaW5nLXR5cGU6KlsyM11zdHJpbmdydW50aW1lLmdjYml0cy41NTU1NTU1NTU1MTUwMDAwZ286c3RyaW5nLiIiaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuLnN0bXBfMWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLi5zdG1wXzJydW50aW1lLmVtcHR5VHlwZUFzc2VydENhY2hldHlwZTpzdHJ1Y3QgeyBDYWNoZSB1bnNhZmUuUG9pbnRlcjsgSW50ZXIgdW5zYWZlLlBvaW50ZXI7IENhbkZhaWwgYm9vbCB9dHlwZTouZXFmdW5jLnN0cnVjdCB7IENhY2hlIHVuc2FmZS5Qb2ludGVyOyBJbnRlciB1bnNhZmUuUG9pbnRlcjsgQ2FuRmFpbCBib29sIH10eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgQ2FjaGUgdW5zYWZlLlBvaW50ZXI7IEludGVyIHVuc2FmZS5Qb2ludGVyOyBDYW5GYWlsIGJvb2wgfS10eXBlOipzdHJ1Y3QgeyBDYWNoZSB1bnNhZmUuUG9pbnRlcjsgSW50ZXIgdW5zYWZlLlBvaW50ZXI7IENhbkZhaWwgYm9vbCB9cnVudGltZS5nY2JpdHMuMDMwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLkNhY2hlLnR5cGU6Lm5hbWVkYXRhLkludGVyLnR5cGU6Lm5hbWVkYXRhLkNhbkZhaWwudHlwZToubmFtZWRhdGEuKipwcm9maWxlLkxvY2F0aW9uLXR5cGU6Lm5hbWVkYXRhLioqdHJhY2UuRnJhbWUtdHlwZToubmFtZWRhdGEuKlsxXXN0cmluZy10eXBlOi5uYW1lZGF0YS4qWzJdKnByb2ZpbGUuVmFsdWVUeXBlLXR5cGU6Lm5hbWVkYXRhLipbXSpwcm9maWxlLlZhbHVlVHlwZS10eXBlOipbXSppbnRlcm5hbC9wcm9maWxlLlZhbHVlVHlwZXR5cGU6W10qaW50ZXJuYWwvcHJvZmlsZS5WYWx1ZVR5cGV0eXBlOippbnRlcm5hbC9wcm9maWxlLlZhbHVlVHlwZXR5cGU6Lm5hbWVkYXRhLipbXXRyYWNldmlld2VyLmV2ZW50U3otdHlwZToqW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5ldmVudFN6wrcxdHlwZToubmFtZWRhdGEuKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludDY0OyBYMSBpbnQ2NDsgWDIgaW50NjQ7IFgzIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lOyBYNCBtYXBbc3RyaW5nXWZvcm1hdC5GcmFtZTsgWDUgKmludDsgWDYgaW8uV3JpdGVyOyBYNyAqanNvbi5FbmNvZGVyIH0tcnVudGltZS5nY2JpdHMuNzIwMzAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLkYudHlwZToubmFtZWRhdGEuWDAudHlwZToubmFtZWRhdGEuWDEudHlwZToubmFtZWRhdGEuWDIudHlwZToubmFtZWRhdGEuWDMudHlwZToubmFtZWRhdGEuWDQudHlwZToubmFtZWRhdGEuWDUudHlwZToubmFtZWRhdGEuWDYudHlwZToubmFtZWRhdGEuWDcudHlwZToubmFtZWRhdGEuKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmZvcm1hdC5EYXRhIH0tdHlwZToqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkRhdGF0eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqZm9ybWF0LkRhdGE7IFgxIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lOyBYMiAqdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXI7IFgzICpbXXRyYWNldmlld2VyLmV2ZW50U3ogfS1ydW50aW1lLmdjYml0cy4xZTAwMDAwMDAwMDAwMDAwdHlwZToubmFtZWRhdGEuKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgaW8uV3JpdGVyOyBYMSAqanNvbi5FbmNvZGVyIH0tcnVudGltZS5nY2JpdHMuMGMwMDAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lIH0tcnVudGltZS5uaWxpbnRlcmVxdWFswrdmdHlwZToubmFtZWRhdGEuKlsxXWludGVyZmFjZSB7fS10eXBlOipbMV1pbnRlcmZhY2Uge310eXBlOi5uYW1lZGF0YS4qWzFdcHJvZmlsZS5MaW5lLXR5cGU6KlsxXWludGVybmFsL3Byb2ZpbGUuTGluZXR5cGU6Lm5hbWVkYXRhLipbXXByb2ZpbGUuTGluZS10eXBlOipbXWludGVybmFsL3Byb2ZpbGUuTGluZXR5cGU6W11pbnRlcm5hbC9wcm9maWxlLkxpbmV0eXBlOmludGVybmFsL3Byb2ZpbGUuTGluZXR5cGU6Lm5hbWVkYXRhLipbMl1pbnQ2NC10eXBlOipbMl1pbnQ2NHR5cGU6LmVxZnVuYy5bMl1pbnRlcmZhY2Uge310eXBlOi5uYW1lZGF0YS4qWzJdaW50ZXJmYWNlIHt9LXR5cGU6KlsyXWludGVyZmFjZSB7fXJ1bnRpbWUuZ2NiaXRzLjBhMDAwMDAwMDAwMDAwMDB0eXBlOi5lcWZ1bmMzMnR5cGU6Lm5hbWVkYXRhLipbMzJddWludDgtdHlwZToqWzMyXXVpbnQ4dHlwZTouZXFmdW5jLlszXWludGVyZmFjZSB7fXR5cGU6Lm5hbWVkYXRhLipbM11pbnRlcmZhY2Uge30tdHlwZToqWzNdaW50ZXJmYWNlIHt9cnVudGltZS5nY2JpdHMuMmEwMDAwMDAwMDAwMDAwMHR5cGU6LmVxZnVuYy5bM11zdHJpbmd0eXBlOi5uYW1lZGF0YS4qWzNdc3RyaW5nLXR5cGU6KlszXXN0cmluZ3J1bnRpbWUuZ2NiaXRzLjE1MDAwMDAwMDAwMDAwMDB0eXBlOi5lcWZ1bmMuWzRdZmxvYXQ2NHR5cGU6Lm5hbWVkYXRhLipbNF1mbG9hdDY0LXR5cGU6Kls0XWZsb2F0NjR0eXBlOi5lcWZ1bmMuWzRdaW50ZXJmYWNlIHt9dHlwZToubmFtZWRhdGEuKls0XWludGVyZmFjZSB7fS10eXBlOipbNF1pbnRlcmZhY2Uge31ydW50aW1lLmdjYml0cy5hYTAwMDAwMDAwMDAwMDAwdHlwZTouZXFmdW5jLls2XXN0cmluZ3R5cGU6Lm5hbWVkYXRhLipbNl1zdHJpbmctdHlwZToqWzZdc3RyaW5ncnVudGltZS5nY2JpdHMuNTUwNTAwMDAwMDAwMDAwMHR5cGU6Lm5hbWVkYXRhLipbXXRyYWNlLlV0aWxXaW5kb3ctdHlwZToqW11pbnRlcm5hbC90cmFjZS5VdGlsV2luZG93dHlwZTpbXWludGVybmFsL3RyYWNlLlV0aWxXaW5kb3d0eXBlOi5uYW1lZGF0YS4qZnVuYyhpbnQpLXR5cGU6KmZ1bmMoaW50KXR5cGU6ZnVuYyhpbnQpdHlwZToubmFtZWRhdGEuKmZ1bmMoc3RyaW5nLCAuLi5pbnRlcmZhY2Uge30pLXR5cGU6KmZ1bmMoc3RyaW5nLCAuLi5pbnRlcmZhY2Uge30pdHlwZTpmdW5jKHN0cmluZywgLi4uaW50ZXJmYWNlIHt9KXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICp0cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcjsgWDEgKmZvcm1hdC5EYXRhOyBYMiAqW110cmFjZXZpZXdlci5ldmVudFN6OyBYMyBtYXBbc3RyaW5nXWZvcm1hdC5GcmFtZTsgWDQgaW50OyBYNSAqdHJhY2V2aWV3ZXIuc3BsaXR0ZXIgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcjsgWDEgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5EYXRhOyBYMiAqW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5ldmVudFN6wrcxOyBYMyBtYXBbc3RyaW5nXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZTsgWDQgaW50OyBYNSAqaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuc3BsaXR0ZXIgfXJ1bnRpbWUuZ2NiaXRzLjVlMDAwMDAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqdHJhY2V2aWV3ZXIuZXZlbnRTeiB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLmV2ZW50U3rCtzEgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICp0cmFjZXZpZXdlci5tbXUgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXUgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICp0cmFjZXZpZXdlci5tbXU7IFgxIHRyYWNlLlV0aWxGbGFnczsgWDIgKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnkgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5tbXU7IFgxIGludGVybmFsL3RyYWNlLlV0aWxGbGFnczsgWDIgKmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLm1tdUNhY2hlRW50cnkgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICpmb3JtYXQuRGF0YTsgWDEgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWUgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICppbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRGF0YTsgWDEgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWUgfXJ1bnRpbWUuZ2NiaXRzLjA2MDAwMDAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqb3MuRmlsZSB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKm9zLkZpbGUgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIFtddHJhY2V2aWV3ZXIuVmlldyB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgW11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5WaWV3IH10eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCB0cmFjZXZpZXdlci5Qcm9maWxlRnVuYyB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuUHJvZmlsZUZ1bmMgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIGlvLldyaXRlcjsgWDEgKmpzb24uRW5jb2RlcjsgWDIgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWUgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIGlvLldyaXRlcjsgWDEgKmVuY29kaW5nL2pzb24uRW5jb2RlcjsgWDIgbWFwW3N0cmluZ11pbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci9mb3JtYXQuRnJhbWUgfXJ1bnRpbWUuZ2NiaXRzLjFjMDAwMDAwMDAwMDAwMDB0eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCBtYXBbc3RyaW5nXWZvcm1hdC5GcmFtZTsgWDEgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWUgfS10eXBlOipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG1hcFtzdHJpbmddaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIvZm9ybWF0LkZyYW1lOyBYMSBtYXBbc3RyaW5nXWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC5GcmFtZSB9dHlwZToubmFtZWRhdGEuKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgaHR0cC5SZXNwb25zZVdyaXRlciB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgbmV0L2h0dHAuUmVzcG9uc2VXcml0ZXIgfXR5cGU6Lm5hbWVkYXRhLipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIHN0cmluZyB9LXR5cGU6KnN0cnVjdCB7IEYgdWludHB0cjsgWDAgc3RyaW5nIH10eXBlOi5uYW1lZGF0YS4qc3RydWN0IHsgRiB1aW50cHRyOyBYMCBzdHJpbmc7IFgxIFtdaW50ZXJmYWNlIHt9IH0tdHlwZToqc3RydWN0IHsgRiB1aW50cHRyOyBYMCBzdHJpbmc7IFgxIFtdaW50ZXJmYWNlIHt9IH1ydW50aW1lLmdjYml0cy4yYTA1MDAwMDAwMDAwMDAwcnVudGltZS5nY2JpdHMuMmMwMDAwMDAwMDAwMDAwMGdvOnN0cmluZy4ic3RhdGljLyJnbzpzdHJpbmcuInN0YXRpYy90cmFjZV92aWV3ZXJfZnVsbC5odG1sImdvOnN0cmluZy4uZ29zdHJpbmcuMjYxODk0Mi5uT05RQWEwcmxDNTM3aGlubHJuUHpnPT1nbzpzdHJpbmcuInN0YXRpYy93ZWJjb21wb25lbnRzLm1pbi5qcyJnbzpzdHJpbmcuLmdvc3RyaW5nLjExODQxOS54NmZZeFV4azFtR0QzZGdQZlByTFVBPT0kR09ST09UL3NyYy90ZXh0L3RlbXBsYXRlL3RlbXBsYXRlLmdvJEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9wYXJzZS9wYXJzZS5nbyRHT1JPT1Qvc3JjL3RleHQvdGVtcGxhdGUvcGFyc2Uvbm9kZS5nbyRHT1JPT1Qvc3JjL3RleHQvdGVtcGxhdGUvcGFyc2UvbGV4LmdvJEdPUk9PVC9zcmMvc3luYy9yd211dGV4LmdvJEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9vcHRpb24uZ28kR09ST09UL3NyYy90ZXh0L3RlbXBsYXRlL2Z1bmNzLmdvJEdPUk9PVC9zcmMvcmVmbGVjdC92YWx1ZS5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL2FiaS90eXBlLmdvJEdPUk9PVC9zcmMvcmVmbGVjdC90eXBlLmdvJEdPUk9PVC9zcmMvdGV4dC90ZW1wbGF0ZS9leGVjLmdvJEdPUk9PVC9zcmMvaW8vaW8uZ28kR09ST09UL3NyYy90ZXh0L3RlbXBsYXRlL2hlbHBlci5nbyRHT1JPT1Qvc3JjL2lvL2ZzL2ZzLmdvJEdPUk9PVC9zcmMvdGltZS90aW1lLmdvJEdPUk9PVC9zcmMvdGltZS96b25laW5mby5nbyRHT1JPT1Qvc3JjL3RpbWUvZm9ybWF0LmdvJEdPUk9PVC9zcmMvdGltZS9mb3JtYXRfcmZjMzMzOS5nbyRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvZXNjYXBlLmdvJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9jb250ZXh0LmdvJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9zdGF0ZV9zdHJpbmcuZ28kR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2RlbGltX3N0cmluZy5nbyRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvdXJscGFydF9zdHJpbmcuZ28kR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2pzY3R4X3N0cmluZy5nbyRHT1JPT1Qvc3JjL2h0bWwvdGVtcGxhdGUvYXR0cl9zdHJpbmcuZ28kR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2VsZW1lbnRfc3RyaW5nLmdvJEdPUk9PVC9zcmMvaHRtbC90ZW1wbGF0ZS9lcnJvci5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyL2Zvcm1hdC9mb3JtYXQuZ28kR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS9wYXJzZXIuZ28kR09ST09UL3NyYy9odG1sL3RlbXBsYXRlL2NvbnRlbnQuZ28kR09ST09UL3NyYy9uZXQvaHR0cC9zZXJ2ZXIuZ28kR09ST09UL3NyYy9uZXQvaHR0cC9odHRwdHJhY2UvdHJhY2UuZ28kR09ST09UL3NyYy9uZXQvbmV0LmdvJEdPUk9PVC9zcmMvbmV0L2lwcmF3c29jay5nbyRHT1JPT1Qvc3JjL25ldC9pcC5nbyRHT1JPT1Qvc3JjL25ldC9pcHJhd3NvY2tfcG9zaXguZ28kR09ST09UL3NyYy9zeXNjYWxsL3N5c2NhbGxfdW5peC5nbyRHT1JPT1Qvc3JjL3N5c2NhbGwvenR5cGVzX2Rhcndpbl9hbWQ2NC5nbyRHT1JPT1Qvc3JjL25ldC9zb2NrYWRkcl9wb3NpeC5nbyRHT1JPT1Qvc3JjL2NyeXB0by90bHMvY29tbW9uLmdvJEdPUk9PVC9zcmMvY3J5cHRvL3g1MDkveDUwOS5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL2ludC5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL25hdC5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL2FyaXRoLmdvJEdPUk9PVC9zcmMvbWF0aC9yYW5kL3JhbmQuZ28kR09ST09UL3NyYy9tYXRoL3JhbmQvZXhwLmdvJEdPUk9PVC9zcmMvbWF0aC9yYW5kL25vcm1hbC5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL25hdGNvbnYuZ28kR09ST09UL3NyYy9tYXRoL2JpZy9uYXRkaXYuZ28kR09ST09UL3NyYy9tYXRoL2JpZy9wcmltZS5nbyRHT1JPT1Qvc3JjL21hdGgvYmlnL2Zsb2F0LmdvJEdPUk9PVC9zcmMvbWF0aC9iaWcvYWNjdXJhY3lfc3RyaW5nLmdvJEdPUk9PVC9zcmMvbWF0aC9iaWcvaW50Y29udi5nbyRHT1JPT1Qvc3JjL2ZtdC9wcmludC5nbyRHT1JPT1Qvc3JjL2ZtdC9zY2FuLmdvJEdPUk9PVC9zcmMvbWF0aC9iaWcvaW50bWFyc2guZ28kR09ST09UL3NyYy9tYXRoL2JpZy9yYXQuZ28kR09ST09UL3NyYy9jcnlwdG8veDUwOS9wa2l4L3BraXguZ28kR09ST09UL3NyYy9lbmNvZGluZy9hc24xL2FzbjEuZ28kR09ST09UL3NyYy9uZXQvdXJsL3VybC5nbyRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L29pZC5nbyRHT1JPT1Qvc3JjL2NyeXB0by94NTA5L3Jvb3RfZGFyd2luLmdvJEdPUk9PVC9zcmMvY3J5cHRvL3g1MDkvdmVyaWZ5LmdvJEdPUk9PVC9zcmMvY3J5cHRvL3g1MDkvY2VydF9wb29sLmdvJEdPUk9PVC9zcmMvbmV0L2h0dHAvcmVxdWVzdC5nbyRHT1JPT1Qvc3JjL21pbWUvbXVsdGlwYXJ0L2Zvcm1kYXRhLmdvJEdPUk9PVC9zcmMvbmV0L2h0dHAvcmVzcG9uc2UuZ28kR09ST09UL3NyYy9uZXQvaHR0cC9jb29raWUuZ28kR09ST09UL3NyYy9jb250ZXh0L2NvbnRleHQuZ28kR09ST09UL3NyYy9uZXQvaHR0cC9wYXR0ZXJuLmdvJEdPUk9PVC9zcmMvbWltZS9tdWx0aXBhcnQvbXVsdGlwYXJ0LmdvJEdPUk9PVC9zcmMvZW1iZWQvZW1iZWQuZ28kR09ST09UL3NyYy9pbnRlcm5hbC90cmFjZS9tdWQuZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL3Byb2ZpbGUuZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL2VuY29kZS5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3Byb2ZpbGUvcHJvdG8uZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL21lcmdlLmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvcHJvZmlsZS9maWx0ZXIuZ28kR09ST09UL3NyYy9yZWdleHAvcmVnZXhwLmdvJEdPUk9PVC9zcmMvcmVnZXhwL3N5bnRheC9wcm9nLmdvJEdPUk9PVC9zcmMvcmVnZXhwL29uZXBhc3MuZ28kR09ST09UL3NyYy9yZWdleHAvYmFja3RyYWNrLmdvJEdPUk9PVC9zcmMvcmVnZXhwL2V4ZWMuZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wcm9maWxlL2xlZ2FjeV9wcm9maWxlLmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvcHJvZmlsZS9wcnVuZS5nbyRHT1JPT1Qvc3JjL29zL3N0YXQuZ28kR09ST09UL3NyYy9vcy90eXBlcy5nbyRHT1JPT1Qvc3JjL29zL2ZpbGVfdW5peC5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvZmRfdW5peC5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvZmRfbXV0ZXguZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL2ZkX3VuaXhqcy5nbyRHT1JPT1Qvc3JjL3N5c2NhbGwvc3lzY2FsbF9kYXJ3aW5fYW1kNjQuZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL2ZkX3BvbGxfcnVudGltZS5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvZmRfZnN5bmNfZGFyd2luLmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9mZF9vcGVuZGlyX2Rhcndpbi5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvZmRfcG9zaXguZ28kR09ST09UL3NyYy9zeXNjYWxsL3N5c2NhbGxfYnNkLmdvJEdPUk9PVC9zcmMvc3lzY2FsbC9zeXNjYWxsLmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9zb2Nrb3B0LmdvJEdPUk9PVC9zcmMvaW50ZXJuYWwvcG9sbC9zb2Nrb3B0X3VuaXguZ28kR09ST09UL3NyYy9pbnRlcm5hbC9wb2xsL3NvY2tvcHRpcC5nbyRHT1JPT1Qvc3JjL2ludGVybmFsL3BvbGwvd3JpdGV2LmdvJEdPUk9PVC9zcmMvb3MvZGlyX2Rhcndpbi5nbyRHT1JPT1Qvc3JjL29zL2Rpci5nbyRHT1JPT1Qvc3JjL3N5c2NhbGwvbmV0LmdvJEdPUk9PVC9zcmMvb3Mvc3RhdF91bml4LmdvJEdPUk9PVC9zcmMvb3MvemVyb19jb3B5X3N0dWIuZ28kR09ST09UL3NyYy9vcy90ZW1wZmlsZS5nbyRHT1JPT1Qvc3JjL29zL2V4ZWMvZXhlYy5nbyRHT1JPT1Qvc3JjL3N5c2NhbGwvZXhlY19saWJjMi5nbyRHT1JPT1Qvc3JjL3N5c2NhbGwvZXhlY191bml4LmdvJEdPUk9PVC9zcmMvb3MvZXhlYy5nbyRHT1JPT1Qvc3JjL29zL2V4ZWNfcG9zaXguZ28kR09ST09UL3NyYy9vcy9leGVjX3VuaXguZ28kR09ST09UL3NyYy9vcy93YWl0X3VuaW1wLmdvJEdPUk9PVC9zcmMvdGltZS9zbGVlcC5nbyRHT1JPT1Qvc3JjL3N0cmNvbnYvYXRvaS5nbyRHT1JPT1Qvc3JjL2ZtdC9lcnJvcnMuZ28kR09ST09UL3NyYy9tYXRoL2xvZ19hc20uZ28kR09ST09UL3NyYy9tYXRoL2V4cF9hc20uZ28kR09ST09UL3NyYy9zeW5jL2F0b21pYy9kb2MuZ28kR09ST09U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AAAADwAA/AEAAAAAAAAAAAAAYAAAAAAAEAAAWwAAAAAAAAAAAAAAYAAAAAAACgAAAwEAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAKgEAAAAAAAAAAAAAYAAAAAAAEAAANAAAAAAAAAAAAAAAYAAAAAAACgAA4QAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAKgEAAAAAAAAAAAAAYAAAAAAAEAAANAAAAAAAAAAAAAAAYAAAAAAACgAA4QAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAA6wAAAAAAAAAAAAAAYAAAAAAAEAAANgAAAAAAAAAAAAAAYAAAAAAACgAAfQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAASwEAAAAAAAAAAAAAYAAAAAAAEAAAXAAAAAAAAAAAAAAAYAAAAAAACgAAwgAAAAAAAAAAAAAAYAAAAAAABAAAbAAAAAAAAAAAAAAAYAAAAAAADgAAkAMAAAAAAAAAAAAAYAAAAAAADwAATgcAAAAAAAAAAAAAYAAAAAAAEAAAuwEAAAAAAAAAAAAAYAAAAAAACgAAbAIAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAA5wAAAAAAAAAAAAAAYAAAAAAAEAAALAAAAAAAAAAAAAAAYAAAAAAACgAAhAAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAmgEAAAAAAAAAAAAAYAAAAAAAEAAAeAAAAAAAAAAAAAAAYAAAAAAACgAA9wAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAkwAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAkwAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAKgEAAAAAAAAAAAAAYAAAAAAAEAAANwAAAAAAAAAAAAAAYAAAAAAACgAA1wAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAKgEAAAAAAAAAAAAAYAAAAAAAEAAANwAAAAAAAAAAAAAAYAAAAAAACgAA1wAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAASwAAAAAAAAAAAAAAYAAAAAAAEAAAIgAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAgQAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAiAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAA0QAAAAAAAAAAAAAAYAAAAAAAEAAAQgAAAAAAAAAAAAAAYAAAAAAACgAAQAAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAATQEAAAAAAAAAAAAAYAAAAAAAEAAAUgAAAAAAAAAAAAAAYAAAAAAACgAAtQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAABQEAAAAAAAAAAAAAYAAAAAAAEAAAaAAAAAAAAAAAAAAAYAAAAAAACgAAiAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAGwAAAAAAAAAAAAAAYAAAAAAACgAAaAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAA7wAAAAAAAAAAAAAAYAAAAAAAEAAAJwAAAAAAAAAAAAAAYAAAAAAACgAAeAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAYgAAAAAAAAAAAAAAYAAAAAAAEAAAJwAAAAAAAAAAAAAAYAAAAAAACgAAcAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAIwAAAAAAAAAAAAAAYAAAAAAACgAAdAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAA2QAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAigAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAASwAAAAAAAAAAAAAAYAAAAAAAEAAAKAAAAAAAAAAAAAAAYAAAAAAACgAAYQAAAAAAAAAAAAAAYAAAAAAABAAANAAAAAAAAAAAAAAAYAAAAAAADgAAUAAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAARwAAAAAAAAAAAAAAYAAAAAAACgAAiQAAAAAAAAAAAAAAYAAAAAAABAAAlAAAAAAAAAAAAAAAYAAAAAAADgAA8AAAAAAAAAAAAAAAYAAAAAAADwAABAIAAAAAAAAAAAAAYAAAAAAAEAAAlgAAAAAAAAAAAAAAYAAAAAAACgAALgEAAAAAAAAAAAAAYAAAAAAABAAAxAAAAAAAAAAAAAAAYAAAAAAADgAAYAEAAAAAAAAAAAAAYAAAAAAADwAARgMAAAAAAAAAAAAAYAAAAAAAEAAAEwEAAAAAAAAAAAAAYAAAAAAACgAAZAEAAAAAAAAAAAAAYAAAAAAABAAAZAAAAAAAAAAAAAAAYAAAAAAADgAAkAAAAAAAAAAAAAAAYAAAAAAADwAASgEAAAAAAAAAAAAAYAAAAAAAEAAAgAAAAAAAAAAAAAAAYAAAAAAACgAAxgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAApgAAAAAAAAAAAAAAYAAAAAAAEAAAMgAAAAAAAAAAAAAAYAAAAAAACgAAYwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAyQAAAAAAAAAAAAAAYAAAAAAAEAAAIwAAAAAAAAAAAAAAYAAAAAAACgAAZwAAAAAAAAAAAAAAYAAAAAAABAAArAAAAAAAAAAAAAAAYAAAAAAADgAAIAEAAAAAAAAAAAAAYAAAAAAADwAA6QIAAAAAAAAAAAAAYAAAAAAAEAAAxgAAAAAAAAAAAAAAYAAAAAAACgAAQgEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAIwAAAAAAAAAAAAAAYAAAAAAACgAAKgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAdgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAFwAAAAAAAAAAAAAAYAAAAAAACgAAZAAAAAAAAAAAAAAAYAAAAAAABAAAZAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAAIgIAAAAAAAAAAAAAYAAAAAAAEAAAfgAAAAAAAAAAAAAAYAAAAAAACgAADQEAAAAAAAAAAAAAYAAAAAAABAAAZAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAArQEAAAAAAAAAAAAAYAAAAAAAEAAAcQAAAAAAAAAAAAAAYAAAAAAACgAAEQEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAdQAAAAAAAAAAAAAAYAAAAAAABAAAZAAAAAAAAAAAAAAAYAAAAAAADgAAYAAAAAAAAAAAAAAAYAAAAAAADwAAngEAAAAAAAAAAAAAYAAAAAAAEAAAcQAAAAAAAAAAAAAAYAAAAAAACgAA7gAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAASQAAAAAAAAAAAAAAYAAAAAAAEAAASAAAAAAAAAAAAAAAYAAAAAAACgAAYAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAANwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHgAAAAAAAAAAAAAAYAAAAAAACgAAKgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADgAAQAAAAAAAAAAAAAAAYAAAAAAADwAA8QAAAAAAAAAAAAAAYAAAAAAAEAAAfQAAAAAAAAAAAAAAYAAAAAAACgAAvwAAAAAAAAAAAAAAYAAAAAAABAAATAAAAAAAAAAAAAAAYAAAAAAADgAAYAAAAAAAAAAAAAAAYAAAAAAADwAAzwEAAAAAAAAAAAAAYAAAAAAAEAAAcgAAAAAAAAAAAAAAYAAAAAAACgAA7gAAAAAAAAAAAAAAYAAAAAAABAAATAAAAAAAAAAAAAAAYAAAAAAADgAAYAAAAAAAAAAAAAAAYAAAAAAADwAAmAEAAAAAAAAAAAAAYAAAAAAAEAAAZgAAAAAAAAAAAAAAYAAAAAAACgAA3wAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAgQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAALQIAAAAAAAAAAAAAYAAAAAAAEAAAbAAAAAAAAAAAAAAAYAAAAAAACgAABgEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAIwAAAAAAAAAAAAAAYAAAAAAAEAAAGAAAAAAAAAAAAAAAYAAAAAAACgAALgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAJgAAAAAAAAAAAAAAYAAAAAAACgAANwAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAA2QAAAAAAAAAAAAAAYAAAAAAAEAAAXgAAAAAAAAAAAAAAYAAAAAAACgAAnAAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAAMgAAAAAAAAAAAAAAYAAAAAAACgAAXQAAAAAAAAAAAAAAYAAAAAAABAAALAEAAAAAAAAAAAAAYAAAAAAADgAAgAMAAAAAAAAAAAAAYAAAAAAADwAAPwYAAAAAAAAAAAAAYAAAAAAAEAAAWwEAAAAAAAAAAAAAYAAAAAAACgAAUQIAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAZQAAAAAAAAAAAAAAYAAAAAAAEAAAIgAAAAAAAAAAAAAAYAAAAAAACgAAXgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADgAAUAAAAAAAAAAAAAAAYAAAAAAADwAASgEAAAAAAAAAAAAAYAAAAAAAEAAANQAAAAAAAAAAAAAAYAAAAAAACgAAhAAAAAAAAAAAAAAAYAAAAAAABAAANAAAAAAAAAAAAAAAYAAAAAAADwAAsAEAAAAAAAAAAAAAYAAAAAAAEAAAQgAAAAAAAAAAAAAAYAAAAAAACgAAnwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAoQAAAAAAAAAAAAAAYAAAAAAAEAAAJwAAAAAAAAAAAAAAYAAAAAAACgAANwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAAEAAAGAAAAAAAAAAAAAAAYAAAAAAACgAAUAAAAAAAAAAAAAAAYAAAAAAABAAAUAAAAAAAAAAAAAAAYAAAAAAADwAAZgAAAAAAAAAAAAAAYAAAAAAAEAAANQAAAAAAAAAAAAAAYAAAAAAACgAAnwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAtgAAAAAAAAAAAAAAYAAAAAAAEAAARwAAAAAAAAAAAAAAYAAAAAAACgAAfQAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAIgEAAAAAAAAAAAAAYAAAAAAAEAAAWwAAAAAAAAAAAAAAYAAAAAAACgAAmQAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADgAAQAAAAAAAAAAAAAAAYAAAAAAADwAA7AAAAAAAAAAAAAAAYAAAAAAAEAAASwAAAAAAAAAAAAAAYAAAAAAACgAAtAAAAAAAAAAAAAAAYAAAAAAABAAAiAAAAAAAAAAAAAAAYAAAAAAADgAAUAAAAAAAAAAAAAAAYAAAAAAADwAAAQEAAAAAAAAAAAAAYAAAAAAAEAAAkQAAAAAAAAAAAAAAYAAAAAAACgAADQEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAZAEAAAAAAAAAAAAAYAAAAAAAEAAAOwAAAAAAAAAAAAAAYAAAAAAACgAAjwAAAAAAAAAAAAAAYAAAAAAABAAA9AAAAAAAAAAAAAAAYAAAAAAADgAAMAIAAAAAAAAAAAAAYAAAAAAADwAAoAoAAAAAAAAAAAAAYAAAAAAAEAAAwgEAAAAAAAAAAAAAYAAAAAAACgAAJAMAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAyAAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAjwAAAAAAAAAAAAAAYAAAAAAABAAAVAAAAAAAAAAAAAAAYAAAAAAADwAAjwQAAAAAAAAAAAAAYAAAAAAAEAAAvwAAAAAAAAAAAAAAYAAAAAAACgAALAEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAyAAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAkgAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAA8AAAAAAAAAAAAAAAYAAAAAAAEAAAUgAAAAAAAAAAAAAAYAAAAAAACgAAyAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAANgAAAAAAAAAAAAAAYAAAAAAAEAAAJgAAAAAAAAAAAAAAYAAAAAAACgAAZAAAAAAAAAAAAAAAYAAAAAAABAAACAEAAAAAAAAAAAAAYAAAAAAADgAA4AEAAAAAAAAAAAAAYAAAAAAADwAA8ggAAAAAAAAAAAAAYAAAAAAAEAAApAEAAAAAAAAAAAAAYAAAAAAACgAAxAIAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAAEAAAIAAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAAAAAAYAAAAAAABAAAVAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAA3gAAAAAAAAAAAAAAYAAAAAAAEAAAQgAAAAAAAAAAAAAAYAAAAAAACgAApgAAAAAAAAAAAAAAYAAAAAAABAAAhAAAAAAAAAAAAAAAYAAAAAAADgAAQAAAAAAAAAAAAAAAYAAAAAAADwAA2wEAAAAAAAAAAAAAYAAAAAAAEAAAdwAAAAAAAAAAAAAAYAAAAAAACgAAJAEAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADgAAEAEAAAAAAAAAAAAAYAAAAAAADwAAwAIAAAAAAAAAAAAAYAAAAAAAEAAALAEAAAAAAAAAAAAAYAAAAAAACgAA9QAAAAAAAAAAAAAAYAAAAAAABAAAVAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAA1gAAAAAAAAAAAAAAYAAAAAAAEAAAVwAAAAAAAAAAAAAAYAAAAAAACgAA6wAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAAAIAAAAAAAAAAAAAYAAAAAAAEAAARQAAAAAAAAAAAAAAYAAAAAAACgAAzAAAAAAAAAAAAAAAYAAAAAAABAAAOAAAAAAAAAAAAAAAYAAAAAAADwAAxgAAAAAAAAAAAAAAYAAAAAAAEAAAOQAAAAAAAAAAAAAAYAAAAAAACgAAnQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAbAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAaAAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAGAAAAAAAAAAAAAAAYAAAAAAACgAAcwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAGgAAAAAAAAAAAAAAYAAAAAAACgAAZwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAEgAAAAAAAAAAAAAAYAAAAAAACgAAYwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAuwAAAAAAAAAAAAAAYAAAAAAAEAAAIAAAAAAAAAAAAAAAYAAAAAAACgAAbQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIAAAAAAAAAAAAAAAYAAAAAAACgAAbQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAGQAAAAAAAAAAAAAAYAAAAAAACgAAbwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAGgAAAAAAAAAAAAAAYAAAAAAACgAAiwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAUQAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHwAAAAAAAAAAAAAAYAAAAAAACgAAUgAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAAAAAAYAAAAAAABAAAHAAAAAAAAAAAAAAAYAAAAAAADwAApwAAAAAAAAAAAAAAYAAAAAAAEAAAKgAAAAAAAAAAAAAAYAAAAAAACgAAUQAAAAAAAAAfAAAAEIgAAAAAAgMACAAAAAgAAAAPAAAAWogAAAAAAgMAAAAAAAAAAAAQ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AAgAAAAfAAAAsPoAAAAAAgMACAAAAAgAAAAfAAAAYvsAAAAAAgMACAAAAAgAAAAfAAAAwPsAAAAAAgMACAAAAAgAAAAfAAAApv4AAAAAAgMACAAAAAgAAAAfAAAAhQEBAAAAAgMACAAAAAgAAAAfAAAA2gMBAAAAAgMACAAAAAgAAAAfAAAAIQYBAAAAAgMACAAAAAgAAAAfAAAAQAYBAAAAAgMACAAAAAgAAAATAAAAXwYBAAAAAgMABwAAAAEAAAAVAAAADl4AAAAAAgIACAAAAAgAAAAVAAAAcF0AAAAAAgIACAAAAAgAAAAVAAAAhV0AAAAAAgIACAAAAAgAAAAVAAAAml0AAAAAAgIACAAAAAgAAAAVAAAAYgEAAAAAAgIACAAAAAgAAAAVAAAATQEAAAAAAgIACAAAAAgAAAAVAAAAI14AAAAAAgIACAAAAAgAAAAVAAAAnxoAAAAAAgIACAAAAAgAAAAVAAAAI2YAAAAAAgIACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAAJQAAAAEAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAIgAAAAIAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAIAAAAAgAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAJQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAHQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAHwAAAAEAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAHgAAAAIAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAA1wAAAAEAAAAAAAAAYAAAAAAAAgAAGQAAAAEAAAAAAAAAYAAAAAAAAgAALgAAAAIAAAAAAAAAYAAAAAAAAgAALAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAMQAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAIQAAAAEAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAIAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAHgAAAAIAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAMAAAAAgAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAFQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAGgAAAAIAAAAAAAAAYAAAAAAAAgAAEwAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAVgAAAAIAAAAAAAAAYAAAAAAAAgAAKgAAAAIAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAHwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAngAAAAIAAAAAAAAAYAAAAAAAAgAAOQAAAAEAAAAAAAAAYAAAAAAAAgAALAAAAAQAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAASAAAAAgAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAcAAAAAgAAAAAAAAAYAAAAAAAAgAAMwAAAAEAAAAAAAAAYAAAAAAAAgAAFQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAPAAAAAQAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAMQAAAAEAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAANgAAAAIAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAMgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFQAAAAEAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAALgAAAAIAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAKgAAAAIAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAIwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAAEwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAFAAAAAQAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAALgAAAAIAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAHAAAAAQAAAAAAAAAYAAAAAAAAgAAOAAAAAgAAAAAAAAAYAAAAAAAAgAAdAAAAAQAAAAAAAAAYAAAAAAAAgAAQQAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAJAAAAAQAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAHAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAHAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAIQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAEwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAHgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAIQAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAIAAAAAgAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAGgAAAAIAAAAAAAAAYAAAAAAAAgAAMAAAAAgAAAAAAAAAYAAAAAAAAgAAGQAAAAEAAAAAAAAAYAAAAAAAAgAAEQAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAJgAAAAIAAAAAAAAAYAAAAAAAAgAANgAAAAIAAAAAAAAAYAAAAAAAAgAAugAAAAIAAAAAAAAAYAAAAAAAAgAALgAAAAIAAAAAAAAAYAAAAAAAAgAANAAAAAQAAAAAAAAAYAAAAAAAAgAAPgAAAAIAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAALgAAAAIAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAASAAAAAgAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAGgAAAAIAAAAAAAAAYAAAAAAAAgAAIwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAAGgAAAAIAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAEAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAaQAAAAEAAAAAAAAAYAAAAAAAAgAAMwAAAAEAAAAAAAAAYAAAAAAAAgAAjQAAAAEAAAAAAAAAYAAAAAAAAgAAMgAAAAIAAAAAAAAAYAAAAAAAAgAAIAAAAAgAAAAAAAAAYAAAAAAAAgAAUAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAEwAAAAEAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADgAAAAIAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAAGQAAAAEAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAAFQAAAAEAAAAAAAAAYAAAAAAAAgAAGQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAFQAAAAEAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAhwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAAYQAAAAEAAAAAAAAAYAAAAAAAAgAAKQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAAGAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAAEgAAAAIAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAFwAAAAEAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACgAAAAIAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABgAAAAIAAAAAAAAAYAAAAAAAAgAAFgAAAAIAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAABQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACQAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAAAwAAAAEAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAACwAAAAEAAAAAAAAAYAAAAAAAAgAABwAAAAEAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAABAAAAAQAAAAAAAAAYAAAAAAAAgAADAAAAAQAAAAAAAAAYAAAAAAAAgAACAAAAAgAAAAAAAAAYAAAAAAAAgAAAAAAAAAAAAAAAAAAYAAAAAAAAgAADQAAAAEAAAAaAAAAlWsAAAAAAgECIAAAAAgAAAAfAAAAr2sAAAAAAgECIAAAAAgAAAAlAAAAVFYAAAAAAgECKAAAAAgAAAAZAAAA3VEAAAAAAgECIAAAAAgAAAAtAAAAwEsAAAAAAgECIAAAAAgAAAAiAAAAb0cAAAAAAgECIAAAAAgAAAArAAAAL4gAAAAAAgEAHQAAAAEAAAAsAAAAaYgAAAAAAgEAHAAAAAEAAAAUAAAAlYgAAAAAAgEABgAAAAEAAABIAAAAqYgAAAAAAgEAOgAAAAEAAAAVAAAAiIkAAAAAAgEABwAAAAEAAAArAAAAnYkAAAAAAgEAHQAAAAEAAAA8AAAAYxoAAAAAAgECIAAAAAgAAAApAAAA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YAAAAAAACgAAxgAAAAAAAAAvAAAAzTEAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAApgAAAAAAAAAAAAAAYAAAAAAAEAAAMgAAAAAAAAAAAAAAYAAAAAAACgAAYwAAAAAAAAAtAAAAvTIAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAyQAAAAAAAAAAAAAAYAAAAAAAEAAAIwAAAAAAAAAAAAAAYAAAAAAACgAAZwAAAAAAAAAAAAAAYAAAAAAADgAAIAEAAAAAAAAAAAAAYAAAAAAADwAA6QIAAAAAAAAAAAAAYAAAAAAAEAAAxgAAAAAAAAAAAAAAYAAAAAAACgAAQgEAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAIwAAAAAAAAAAAAAAYAAAAAAACgAAKgAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAdgAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAFwAAAAAAAAAAAAAAYAAAAAAACgAAZAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAAIgIAAAAAAAAAAAAAYAAAAAAAEAAAfgAAAAAAAAAAAAAAYAAAAAAACgAADQEAAAAAAAApAAAAwDcAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADgAAMAAAAAAAAAAAAAAAYAAAAAAADwAArQEAAAAAAAAAAAAAYAAAAAAAEAAAcQAAAAAAAAAAAAAAYAAAAAAACgAAEQEAAAAAAAAuAAAALTkAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAaQAAAAAAAAAAAAAAYAAAAAAAEAAAJQAAAAAAAAAAAAAAYAAAAAAACgAAdQAAAAAAAAAAAAAAYAAAAAAADgAAYAAAAAAAAAAAAAAAYAAAAAAADwAAngEAAAAAAAAAAAAAYAAAAAAAEAAAcQAAAAAAAAAAAAAAYAAAAAAACgAA7gAAAAAAAAAAAAAAYAAAAAAADwAASQAAAAAAAAAAAAAAYAAAAAAAEAAASAAAAAAAAAAAAAAAYAAAAAAACgAAYAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAA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AAAAEAAAHAAAAAAAAAAAAAAAYAAAAAAACgAAcgAAAAAAAAAzAAAAp4EAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIAAAAAAAAAAAAAAAYAAAAAAACgAAbQAAAAAAAAAuAAAAS4IAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAGQAAAAAAAAAAAAAAYAAAAAAACgAAbwAAAAAAAAAwAAAAHoMAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAGgAAAAAAAAAAAAAAYAAAAAAACgAAiwAAAAAAAABMAAAAR4QAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAYAAAA8IQAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAYAAAAZYUAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAUQAAAAAAAAASAAAAyIUAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAARgAAAAAAAAAAAAAAYAAAAAAAEAAAHwAAAAAAAAAAAAAAYAAAAAAACgAAUgAAAAAAAAATAAAAKIYAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAAbQAAAAAAAAAAAAAAYAAAAAAAEAAAIQAAAAAAAAAAAAAAYAAAAAAACgAAVwAAAAAAAAAYAAAAmIYAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAADwAApwAAAAAAAAAAAAAAYAAAAAAAEAAAKgAAAAAAAAAAAAAAYAAAAAAACgAAUQAAAAAAAAASAAAA+4YAAAAAAAAAAAAAAAAAAAAfAAAAU4oAAAAAAAAAAAAAAAAAAAAMAAAAcooAAAAAAAAAAAAAAAAAAAAQAAAAlooAAAAAAAAAAAAAAAAAAAAVAAAApooAAAEAAAAAAAAAAAAAAAAbAAAA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ehcAAIIXAACCFwAAkhcAAJMXAACbFwAAmxcAAKMXAACkFwAArBcAAKwXAAC0FwAAtRcAAL0XAAC9FwAAxRcAAMYXAADOFwAAzhcAANIXAADTFwAA2xcAANsXAADjFwAA5BcAAO0XAADtFwAA9RcAAPYXAAD/FwAA/xcAAAcYAAAIGAAAERgAABEYAAAVGAAAFhgAAB4YAAAeGAAAJhgAACcYAAAwGAAAMBgAAD4YAAA/GAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEgYAABIGAAASBgAAEsYAABOGAAAUhgAAFUYAABYGAAAWxgAAFsYAABbGAAAWxgAAFsYAABbGAAAWxgAAF4YAABhGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGQYAABkGAAAZBgAAGUYAABlGAAAZRgAAGUYAABlGAAAZRgAAGUYAABlGAAAZRgAAGUYAABlGAAAZRgAAGUYAABlGAAAZRgAAGUYAABlGAAAZRgAAGUYAABpGAAAaRgAAGkYAABpGAAAaRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABtGAAAbRgAAG0YAABuGAAAbhgAAG4YAABuGAAAbhgAAG4YAABuGAAAbhgAAG8YAABvGAAAbxgAAG8YAABvGAAAbxgAAG8YAABvGAAAbxgAAG8YAABvGAAAbxgAAG8YAABvGAAAcBgAAHAYAABwGAAAcBgAAHAYAABwGAAAcBgAAHAYAABwGAAAcBgAAHAYAABwGAAAcBgAAHAYAABwGAAAchgAAHIYAAByGAAAchgAAHIYAAByGAAAchgAAHIYAAByGAAAchgAAHIYAAB0GAAAdBgAAHQYAAB0GAAAdBgAAHUYAAB1GAAAdRgAAHUYAAB2GAAAdhgAAHYYAAB2GAAAdhgAAHYYAAB2GAAAdhgAAHYYAAB2GAAAdhgAAHYYAAB2GAAAdxgAAHcYAAB3GAAAdxgAAHcYAAB7GAAAexgAAHsYAAB7GAAAexgAAHsYAAB7GAAAgBgAAIAYAACAGAAAgBgAAIAYAACAGAAAgBgAAIEYAACBGAAAgRgAAIEYAACBGAAAgRgAAIEYAACJGAAAiRgAAIkYAACKGAAAihgAAIoYAACKGAAAihgAAIoYAACKGAAAjhgAAI4YAACOGAAAjhgAAI8YAACPGAAAjxgAAI8YAACPGAAAjxgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJAYAACQGAAAkBgAAJ0YAACgGAAAohgAAKQYAACmGAAAphgAAKkYAACtGAAAsRgAALUYAAC1GAAAtxgAALkYAAC7GAAAuxgAAL0YAAC/GAAAvxgAAMAYAADEGAAAyxgAAM8YAADVGAAA1RgAANgYAADaGAAA3hgAAOEYAADkGAAA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LQUAAEEFAABSBQAAXwUAAHMFAACHBQAAlQUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKgFAACoBQAAqAUAAKoFAACqBQAAqgUAAKoFAACsBQAArAUAAK4FAACuBQAAsAUAALAFAACyBQAAsgUAALIFAACyBQAAtAUAALQFAAC0BQAAtAUAALYFAAC2BQAAtgUAALYFAAC3BQAAuAUAALkFAAC6BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAuwUAALsFAAC7BQAAvAUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL0FAAC9BQAAvQUAAL4FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAAC/BQAAvwUAAL8FAADSBQAA5QUAAPgFAAALBgAAHgYAADEGAABEBgAAVwYAAGoGAAB9BgAAkAYAAKMGAAC2BgAAyQYAANwGAADvBgAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAACBwAAAgcAAAIHAAAAAAAApQEAAG0EAAD3BAAAvAUAADsHAAAVCAAA7wgAAKMJAAATDAAAZxUAACwWAACoGQAAPhoAANQaAACwGwAAjBwAAN8cAADvHAAARh0AAOsdAABwHwAAgR8AAFYgAAC4IAAACSEAAMIhAABpIgAALiMAAAUlAAC0KAAAQyoAAGgrAAAcLAAAVy4AAJkuAADbLgAA4y4AAKgwAABTMgAAqzIAAAg0AAAkNQAAODUAAHU1AAD+NwAA2jkAAJM7AAD9OwAATj4AAGM+AACUPgAAIEAAAIJAAADIRQAAZkYAAJRHAABtSQAAk0oAAKJKAAA9SwAARkwAAMFNAABwTgAA1k8AAKBQAAB+WgAA1VoAALNfAAAKYAAAdmIAANhiAADRbAAAFG0AAFxtAACBbwAAcXgAAFt5AABLegAAw3oAABt7AAArewAAY3sAAAt8AABDfAAA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f5EBANaRAQDykQEAX5IBAICSAQDRkgEA7ZIBADOTAQBSkwEApJMBAMCTAQAtlAEATpQBAKWUAQDBlAEAaJUBAJKVAQDjlQEA65UBAOuVAQDvlQEA8pUBAPqVAQD/lQEAB5YBAA+WAQAXlgEAH5YBACeWAQAvlgEAN5YBAD+WAQBHlgEAT5YBAFeWAQBflgEAZ5YBAG+WAQB3lgEAf5YBAIeWAQCPlgEAl5YBAJ+WAQCnlgEAr5YBALeWAQC3lgEAvpYBAMGWAQDHlgEAzJYBAM2WAQDOlgEAz5YBANSWAQDWlgEA15YBANiWAQDZlgEA2pYBANuWAQDclgEA3ZYBAOSWAQDolgEA7ZYBAPKWAQD0lgEA+5YBAAGXAQAJlwEACpcBAA+XAQAWlwEAHJcBACSXAQAslwEAMJcBADWXAQA2lwEAOpcBAD6XAQBDlwEASZcBAE2XAQBVlwEAWJcBAF2XAQBhlwEAZZcBAGqXAQBulwEAdZcBAHaXAQB7lwEAgJcBAIWXAQCLlwEAjpcBAJCXAQCYlwEAoJcBAKiXAQCwlwEAuJcBAMCXAQDIlwEA0JcBANiXAQDglwEA6JcBAPCXAQD4lwEA/5cBAAeYAQAPmAEAF5gBAB+YAQAnmAEAL5gBADeYAQA/mAEAR5gBAFeYAQBtmAEAkpgBAKSYAQC4mAEAxZgBANOYAQDdmAEA/5gBAAeZAQAnmQEAP5kBAD+ZAQBHmQEAU5kBAFeZAQBlmQEAaZkBAHSZAQB/mQEAipkBAI6ZAQCimQEAppkBALWZAQC8mQEAvJkBAMKZAQDYmQEA3JkBAAGaAQAFmgEAEZoBAB+aAQAfmgEAJ5oBADWaAQA/mgEATZoBAFWaAQBlmgEAcJoBAHCaAQB2mgEAhJoBAI6aAQCcmgEApJoBALSaAQC/mgEAv5oBAMWaAQDQmgEA1JoBAOWaAQDpmgEA9ZoBAAKbAQACmwEACpsBABibAQAcmwEAOZsBAD2bAQBcmwEAdJsBAHSbAQB8mwEAmpsBAKubAQCCnAEAm5wBAMmcAQD1nAEAAJ0BAASdAQAYnQEAHJ0BACudAQAynQEAMp0BADidAQBPnQEAWp0BAIudAQCUnQEAtZ0BAMedAQDHnQEAz50BANydAQDgnQEA7p0BAPKdAQABngEACJ4BAAieAQARngEAHp4BACKeAQAwngEA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DgAAAAAAAAAAAP///3+WAAAAzQAAAAQOAAAAAAAAAAAA/v//fx8AAADXAAAABAcAAAAAAAAAAAD8//9/YAAAAOUAAAAEDgAAAAAAAAAAAP///3+WAAAA8QAAAAQOAAAAAAAAAAAA/f//fwoEAAD7AAAABAcAAAAAAAAAAAD8//9/YAAAAAkBAAAEDgAAAAAAAAAAAP///3+WAAAAFQEAAAQOAAAAAAAAAAAA/v//fyAAAAAhAQAABAcAAAAAAAAAAAD8//9/YAAAAC8BAAAEDgAAAAAAAAAAAP///3+WAAAAOwEAAAQOAAAAAAAAAAAA/v//fyEAAABFAQAABAcAAAAAAAAAAAD8//9/YAAAAFIBAAAEDgD///////////z//39uAAAAYwEAAAQHAAAAAAAAAAAA////f5kBAAByAQAABA4AAAAAAAAAAAD7//9/iAAAAH0BAAAEDgAAAAAAAAAAAPv//3+IAAAAlAEAAAQHAAAAAAAAAAAA/P//fwgAAACaAQAABAcAAAAAAAAAAAD8//9/2AAAAC0AAAAEBwAAAAAAAAAAAPz//39QAAAANwAAAAQHAAAAAAAAAAAA/P//f1AAAABEAAAABA4AAAAAAAAAAAADAAAADQEAAEkAAAAEBwAAAAAAAAAAAPz//38AAAAAVwAAAAQOAP///////////P//f24AAABmAAAABAcAAAAAAAAAAAD///9/pQEAAIIAAAAEDgAAAAAAAAAAAP///3+mAQAAhwAAAAQHAAAAAAAAAAAA/P//fwAAAACTAAAABA4AAAAAAAAAAAD8//9/5QAAAJgAAAAEBwAAAAAAAAAAAPz//38AAAAAsAAAAAQOAAAAAAAAAAAA/v//fyIAAADBAAAABAcAAAAAAAAAAAAEAAAAAgAAAMgAAAAEDgAAAAAAAAAAAP///39TAQAAzQAAAAQHAAAAAAAAAAAA/P//fwAAAADUAAAABA4AAAAAAAAAAAD7//9/BwAAAOYAAAAEDgD///////////z//39uAAAA+gAAAAQHAAAAAAAAAAAA////f5kBAAAfAQAABA4AAAAAAAAAAAD///9/TQEAACQBAAAEBwAAAAAAAAAAAPz//38AAAAAKwEAAAQOAAAAAAAAAAAA+///fwQAAAA0AQAABA4A///////////8//9/bgAAAGEBAAAEBwAAAAAAAAAAAP///3+nAQAA2wEAAAQOAAAAAAAAAAAA////f1UBAADhAQAABAcAAAAAAAAAAAD8//9/AAAAAOgBAAAEDgAAAAAAAAAAAPv//38DAAAA8QEAAAQOAP///////////P//f24AAAABAgAABAcAAAAAAAAAAAD///9/pQEAABkCAAAEDgAAAAAAAAAAAP///3+MAQAAIQIAAAQHAAAAAAAAAAAA/P//fwAAAAAoAgAABA4AAAAAAAAAAAD7//9/AgAAADoCAAAEDgD///////////z//39uAAAAVAIAAAQHAAAAAAAAAAAA////f6gBAACrAgAABAcAAAAAAAAAAAD8//9/2AAAAAIAAAAAFwAAAAAAAAAAAP///3+eAAAANQAAAAQOAAAAAAAAAAAA/f//fwsEAABBAAAABAcAAAAAAAAAAAAEAAAAAgAAAE0AAAAEDgAAAAAAAAAAAP///3+eAAAAVwAAAAQHAAAAAAAAAAAAAwAAAJsAAABoAAAABA4AAAAAAAAAAAD+//9/IwAAAHIAAAAEBwAAAAAAAAAAAAQAAAACAAAAgQAAAAQHAAAAAAAAAAAA/P//f9YAAAA1AAAABA4AAAAAAAAAAAD///9/ngAAAEYAAAAEBwAAAAAAAAAAAPz//39gAAAAXgAAAAQOAP///////////P//f24AAABtAAAABAcAAAAAAAAAAAD///9/mQEAAKMAAAAEBwAAAAAAAAAAAPz//3/WAAAAAwAAAAAXAAAAAAAAAAAABQAAAAIAAACMAAAABA4AAAAAAAAAAAD7//9/BgAAAKwAAAAEBwAAAAAAAAAAAPv//38TAAAAwgAAAAQOAAAAAAAAAAAA+///fwUAAADuAAAABAcAAAAAAAAAAAD7//9/EwAAAAoBAAAEDgAAAAAAAAAAAP3//38MBAAAFAEAAAQHAAAAAAAAAAAABAAAAAIAAAAwAQAABA4AAAAAAAAAAAD+//9/JAAAADoBAAAEBwAAAAAAAAAAAAQAAAACAAAARgEAAAQOAAAAAAAAAAAABQAAAAIAAABQAQAABAcAAAAAAAAAAAADAAAAmwAAAGwBAAAEBwAAAAAAAAAAAPz//3/WAAAAKwAAAAQHAAAAAAAAAAAABgAAAEcAAABCAAAABA4AAAAAAAAAAAD///9/ngAAAEwAAAAEBwAAAAAAAAAAAPz//39UAAAAbQAAAAQOAAAAAAAAAAAA////f54AAACBAAAABAcAAAAAAAAAAAD8//9/YAAAAJkAAAAEDgD///////////z//39uAAAAqgAAAAQHAAAAAAAAAAAA////f5kBAADMAAAABAcAAAAAAAAAAAD8//9/1gAAACsAAAAEBwAAAAAAAAAAAAYAAABHAAAAQgAAAAQOAAAAAAAAAAAA////f54AAABMAAAABAcAAAAAAAAAAAD8//9/VAAAAG0AAAAEDgAAAAAAAAAAAP///3+eAAAAgQAAAAQHAAAAAAAAAAAA/P//f2AAAACZAAAABA4A///////////8//9/bgAAAKoAAAAEBwAAAAAAAAAAAP///3+ZAQAAzAAAAAQHAAAAAAAAAAAA/P//f9YAAAADAAAAABcAAAAAAAAAAAD8//9/9wAAADoAAAAEDgAAAAAAAAAAAP3//38NBAAASgAAAAQHAAAAAAAAAAAABAAAAAIAAABZAAAABAcAAAAAAAAAAAD8//9/QAAAAGAAAAAEDgAAAAAAAAAAAPz//3/3AAAAbQAAAAQHAAAAAAAAAAAAAwAAAJsAAAB+AAAABA4AAAAAAAAAAAD+//9/JAAAAIgAAAAEBwAAAAAAAAAAAAQAAAACAAAAoQAAAAQHAAAAAAAAAAAA/P//f9YAAAAaAAAABA4AAAAAAAAAAAAFAAAABQAAACEAAAAEBwAAAAAAAAAAAPz//38AAAAAKwAAAAQHAAAAAAAAAAAA/P//f1AAAAAxAAAABA4A///////////8//9/bgAAAEEAAAAEBwAAAAAAAAAAAP///3+ZAQAAWAAAAAQOAAAAAAAAAAAABQAAAAUAAABhAAAABAcAAAAAAAAAAAD///9/zgEAAIIAAAAEBwAAAAAAAAAAAPz//39QAAAAjgAAAAQOAAAAAAAAAAAA////f0sBAACTAAAABAcAAAAAAAAAAAD8//9/AAAAAKYAAAAEDgAAAAAAAAAAAPv//39OAAAAqwAAAAQHAAAAAAAAAAAA/P//fwAAAAC3AAAABA4AAAAAAAAAAAD7//9/XgAAAMEAAAAEBwAAAAAAAAAAAPz//38AAAAAzQAAAAQOAAAAAAAAAAAA////f08BAADSAAAABAcAAAAAAAAAAAD8//9/AAAAANkAAAAEDgAAAAAAAAAAAPv//38QAAAA4gAAAAQOAP///////////P//f24AAADxAAAABAcAAAAAAAAAAAD///9/pQEAAAkBAAAEDgAAAAAAAAAAAP///39RAQAADgEAAAQHAAAAAAAAAAAA/P//fwAAAAAVAQAABA4AAAAAAAAAAAD7//9/CwAAAB4BAAAEDgD///////////z//39uAAAAQQEAAAQHAAAAAAAAAAAA////f88BAACAAQAABA4AAAAAAAAAAAD///9/VQEAAIUBAAAEBwAAAAAAAAAAAPz//38AAAAAjAEAAAQOAAAAAAAAAAAA+///fwoAAACVAQAABA4A///////////8//9/bgAAAKQBAAAEBwAAAAAAAAAAAP///3+lAQAAvAEAAAQOAAAAAAAAAAAA////f3wBAADBAQAABAcAAAAAAAAAAAD8//9/AAAAAMgBAAAEDgAAAAAAAAAAAPv//38JAAAA0QEAAAQOAP///////////P//f24AAAD0AQAABAcAAAAAAAAAAAD///9/0AEAAGICAAAEBwAAAAAAAAAAAPz//3/YAAAAAwAAAAAXAAAAAAAAAAAA+///f08AAAADAAAAABcAAAAAAAAAAAAFAAAABQAAAAMAAAAAFwAAAAAAAAAAAAcAAAC8AAAAAwAAAAAXAAAAAAAAAAAABwAAALwAAAADAAAAABcAAAAAAAAAAAAHAAAAvAAAAAMAAAAAFwAAAAAAAAAAAAcAAAC8AAAAiwAAAAQHAEsBAAAAAAAA/P//f9QAAACWAAAABA4AAAAAAAAAAAD9//9/8AIAALUAAAAEDgAAAAAAAAAAAAUAAAAFAAAAugAAAAQHAAAAAAAAAAAA/P//fzsAAADBAAAABA4AAAAAAAAAAAAFAAAABQAAANEAAAAEBwAAAAAAAAAAAAMAAACbAAAAFwEAAAQHAPQAAAAAAAAA/P//f9QAAAAwAQAABAcAAAAAAAAAAAD8//9/TQAAACYCAAAEDgAAAAAAAAAAAP7//39oAAAAZQIAAAQHAAAAAAAAAAAA/P//fz8AAABsAgAABA4AAAAAAAAAAAAHAAAAvAAAAIkCAAAEBwAAAAAAAAAAAPz//38/AAAAkAIAAAQOAAAAAAAAAAAABwAAALwAAACnAgAABA4AAAAAAAAAAAD+//9/JQAAAMECAAAEBwAAAAAAAAAAAAgAAAApAAAAXAMAAAQOAAAAAAAAAAAA+///f1YAAABhAwAABAcAAAAAAAAAAAD8//9/egAAAHMDAAAEDgD///////////z//39uAAAAewMAAAQHAAAAAAAAAAAA////f5kBAAC6AwAABA4A///////////8//9/bgAAAN0DAAAEDgAAAAAAAAAAAPv//39WAAAA7QMAAAQHAAAAAAAAAAAA////f9gBAAA0BAAABAcAAAAAAAAAAAD8//9/UAAAAIoEAAAEDgD///////////z//39uAAAAlQQAAAQHAAAAAAAAAAAA////f6UBAAAEBQAABA4AAAAAAAAAAAD+//9/aAAAABIFAAAEBwAAAAAAAAAAAPz//38/AAAAGQUAAAQOAAAAAAAAAAAABwAAALwAAABrBQAABA4AAAAAAAAAAAD+//9/aAAAAHkFAAAEBwAAAAAAAAAAAPz//38/AAAAgAUAAAQOAAAAAAAAAAAABwAAALwAAACXBQAABA4AAAAAAAAAAAD+//9/JQAAALEFAAAEBwAAAAAAAAAAAAgAAAApAAAAJwYAAAQOAAAAAAAAAAAA/v//f2gAAACPBgAABA4AAAAAAAAAAAD7//9/VgAAAJQGAAAEBwAAAAAAAAAAAPz//396AAAApgYAAAQOAP///////////P//f24AAACuBgAABAcAAAAAAAAAAAD///9/mQEAANUGAAAEDgD///////////z//39uAAAA9wYAAAQOAAAAAAAAAAAA+///f1YAAAAEBwAABAcAAAAAAAAAAAD///9/2AEAAFoHAAAEBwAAAAAAAAAAAP///3/ZAQAAYgcAAAQHAAAAAAAAAAAA////f9kBAABqBwAABAcAAAAAAAAAAAD///9/2QEAAHUHAAAEBwAAAAAAAAAAAP///3/ZAQAA7AcAAAQHAAAAAAAAAAAABgAAAEcAAAAGCAAABA4AAAAAAAAAAAD///9/ngAAABMIAAAEBwAAAAAAAAAAAPz//39ZAAAAKAgAAAQOAAAAAAAAAAAA////f54AAABCCAAABAcAAAAAAAAAAAD8//9/VAAAAGwIAAAEDgAAAAAAAAAAAP///3+eAAAAhggAAAQHAAAAAAAAAAAA/P//f2AAAACkCAAABA4A///////////8//9/bgAAALYIAAAEBwAAAAAAAAAAAP///3+ZAQAA+ggAAAQHAAAAAAAAAAAA////f9kBAABLCQAABAcAAAAAAAAAAAD8//9/1gAAADUAAAAEDgAAAAAAAAAAAP///3+eAAAARgAAAAQHAAAAAAAAAAAA/P//f2AAAABeAAAABA4A///////////8//9/bgAAAG0AAAAEBwAAAAAAAAAAAP///3+ZAQAAowAAAAQHAAAAAAAAAAAA/P//f9YAAAADAAAAABcAAAAAAAAAAAD7//9/TwAAAAMAAAAAFwAAAAAAAAAAAAUAAAACAAAAYAAAAAQOAAAAAAAAAAAABQAAAAIAAABlAAAABAcAAAAAAAAAAAD8//9/egAAAHcAAAAEDgD///////////z//39uAAAAgQAAAAQHAAAAAAAAAAAA////f5kBAACoAAAABA4A///////////8//9/bgAAALAAAAAEBwAAAAAAAAAAAP///3+ZAQAA3QAAAAQOAAAAAAAAAAAA+///fw8AAAAJAQAABAcAAAAAAAAAAAD7//9/EwAAACUBAAAEDgAAAAAAAAAAAPv//38OAAAAYwEAAAQHAAAAAAAAAAAA+///fxMAAACrAQAABAcASwEAAAAAAAD8//9/1AAAALYBAAAEDgAAAAAAAAAAAP3//3/wAgAA1QEAAAQOAAAAAAAAAAAABQAAAAIAAADlAQAABAcAAAAAAAAAAAADAAAAmwAAACoCAAAEDgAAAAAAAAAAAPv//38NAAAATwIAAAQHAAAAAAAAAAAA+///fxMAAABcAgAABA4AAAAAAAAAAAD7//9/DAAAAIkCAAAEBwAAAAAAAAAAAPv//38TAAAAsAIAAAQOAAAAAAAAAAAA+///f1gAAAC1AgAABAcAAAAAAAAAAAD8//9/egAAAMcCAAAEDgD///////////z//39uAAAAzwIAAAQHAAAAAAAAAAAA////f5kBAADyAgAABA4A///////////8//9/bgAAAAkDAAAEDgAAAAAAAAAAAPv//39YAAAAEwMAAAQHAAAAAAAAAAAA////f9gBAABpAwAABAcAAAAAAAAAAAD8//9/1gAAADsAAAAEDgAAAAAAAAAAAP///3+mAQAAQQAAAAQHAAAAAAAAAAAA/P//f3oAAABQAAAABA4A///////////8//9/bgAAAFgAAAAEBwAAAAAAAAAAAP///3+ZAQAAiAAAAAQHAAAAAAAAAAAA/P//f9YAAAA7AAAABA4AAAAAAAAAAAD///9/pgEAAEEAAAAEBwAAAAAAAAAAAPz//396AAAAUAAAAAQOAP///////////P//f24AAABYAAAABAcAAAAAAAAAAAD///9/mQEAAIgAAAAEBwAAAAAAAAAAAPz//3/WAAAAKwAAAAQHAAAAAAAAAAAABgAAAEcAAABCAAAABA4AAAAAAAAAAAD///9/ngAAAEwAAAAEBwAAAAAAAAAAAPz//39UAAAAdgAAAAQOAAAAAAAAAAAA////f54AAACFAAAABAcAAAAAAAAAAAD8//9/YAAAAJ0AAAAEDgD///////////z//39uAAAArAAAAAQHAAAAAAAAAAAA////f5kBAADOAAAABAcAAAAAAAAAAAD8//9/1gAAACsAAAAEBwAAAAAAAAAAAAYAAABHAAAAQgAAAAQOAAAAAAAAAAAA////f54AAABMAAAABAcAAAAAAAAAAAD8//9/VAAAAHYAAAAEDgAAAAAAAAAAAP///3+eAAAAhQAAAAQHAAAAAAAAAAAA/P//f2AAAACdAAAABA4A///////////8//9/bgAAAKwAAAAEBwAAAAAAAAAAAP///3+ZAQAAzgAAAAQHAAAAAAAAAAAA/P//f9YAAAAZAAAABA4A///////////8//9/bgAAACMAAAAEBwAAAAAAAAAAAP///3+ZAQAAQwAAAAQHAAAAAAAAAAAA/P//f9YAAAAwAAAAAAoAAAAAAAAAAAAAAAAAAAAAAFQAAAAEBwAAAAAAAAAAAAYAAABHAAAAYQAAAAQOAAAAAAAAAAAA////f54AAABrAAAABAcAAAAAAAAAAAD8//9/WQAAAIkAAAAEBwAAAAAAAAAAAPz//3/YAAAAUAAAAAQOAAAAAAAAAAAA/v//fyYAAABaAAAAAAoAAAAAAAAAAAAAAAAAAAAAAGEAAAAEBwAAAAAAAAAAAPz//39QAAAAawAAAAQHAAAAAAAAAAAA/P//f1AAAAB1AAAABAcAAAAAAAAAAAD8//9/UAAAAIEAAAAEDgAAAAAAAAAAAPv//395AAAAhgAAAAQHAAAAAAAAAAAA/P//fwAAAACMAAAABA4A///////////8//9/bgAAALkAAAAEBwAAAAAAAAAAAP///38FAgAAWQEAAAQHAAAAAAAAAAAA/P//f9gAAAA4AAAAAAoAAAAAAAAAAAAAAAAAAAAAAFIAAAAEDgAAAAAAAAAAAP///3+8AAAAYQAAAAQHAAAAAAAAAAAA/P//f14AAABwAAAABA4A///////////8//9/bgAAAIEAAAAEBwAAAAAAAAAAAP///3+ZAQAAuAAAAAQHAAAAAAAAAAAA/P//f9gAAAAYAAAABA4A///////////8//9/bgAAACEAAAAEBwAAAAAAAAAAAP///3+ZAQAATAAAAAQHAAAAAAAAAAAA/P//f9gAAAAOAAAABA4A///////////8//9/bgAAABYAAAAEBwAAAAAAAAAAAP///3+ZAQAAQQAAAAQHAAAAAAAAAAAA/P//f9gAAAAnAAAABA4AAAAAAAAAAAD///9/uAAAADUAAAAEBwAAAAAAAAAAAPz//39eAAAATQAAAAQOAP///////////P//f24AAABhAAAABAcAAAAAAAAAAAD///9/mQEAAJcAAAAEBwAAAAAAAAAAAPz//3/YAAAAMQAAAAAKAAAAAAAAAAAAAAAAAAAAAACDAAAABAcAAAAAAAAAAAD7//9/HAAAAJkAAAAEBwAAAAAAAAAAAPz//3/YAAAAFQAAAAQOAAgAAAAAAAAA+///f3oAAABHAAAABA4AAAAAAAAAAAD7//9/egAAAKEAAAAEBwAAAAAAAAAAAPv//38cAAAArAAAAAQHAAAAAAAAAAAA/P//fwIAAAC3AAAABAcAAAAAAAAAAAD8//9/2AAAAI4AAAAEDgAAAAAAAAAAAAUAAAABAAAAkwAAAAQHAAAAAAAAAAAA/P//fwAAAACvAAAABA4AAAAAAAAAAAD+//9/aAAAAMMAAAAEDgD///////////z//39uAAAA1wAAAAQHAAAAAAAAAAAA////f6UBAAD4AAAABA4AAAAAAAAAAAD+//9/JwAAAEQBAAAEDgD///////////z//39uAAAAVgEAAAQHAAAAAAAAAAAA////f5kBAACXAQAAAAoAAAAAAAAAAAAAAAAAAAAAALoBAAAEBwAAAAAAAAAAAPz//3/YAAAAZgAAAAAKAAAAAAAAAAAAAAAAAAAAAACIAAAABA4ACAAAAAAAAAD7//9/egAAAKYAAAAEDgAAAAAAAAAAAPv//396AAAA5wAAAAQOAAAAAAAAAAAABQAAAAEAAADsAAAABAcAAAAAAAAAAAD8//9/AAAAABEBAAAEDgAAAAAAAAAAAP7//39oAAAAIQEAAAQOAP///////////P//f24AAAApAQAABAcAAAAAAAAAAAD///9/pQEAADoBAAAEDgAAAAAAAAAAAP7//39oAAAAVQEAAAQOAP///////////P//f24AAABhAQAABAcAAAAAAAAAAAD///9/pQEAAHIBAAAEDgAAAAAAAAAAAP7//39oAAAAhAEAAAQOAAAAAAAAAAAA/v//fygAAADDAQAABA4A///////////8//9/bgAAAMsBAAAEBwAAAAAAAAAAAP///3+lAQAA1gEAAAQOAAAAAAAAAAAA/v//f2gAAAD1AQAABA4A///////////8//9/bgAAAAQCAAAEBwAAAAAAAAAAAP///3+lAQAAIAIAAAAKAAAAAAAAAAAAAAAAAAAAAAA9AgAABA4AAAAAAAAAAAAFAAAAAQAAAEICAAAEBwAAAAAAAAAAAPz//38AAAAAZwIAAAQOAAAAAAAAAAAA/v//f2gAAAB3AgAABA4A///////////8//9/bgAAAIECAAAEBwAAAAAAAAAAAP///3+lAQAApQIAAAQOAP///////////P//f24AAACtAgAABAcAAAAAAAAAAAD///9/pQEAAMgCAAAEDgAAAAAAAAAAAP7//38pAAAABwMAAAQOAP///////////P//f24AAAAPAwAABAcAAAAAAAAAAAD///9/pQEAADkDAAAEDgD///////////z//39uAAAASgMAAAQHAAAAAAAAAAAA////f5kBAAB9AwAAAAoAAAAAAAAAAAAAAAAAAAAAAJIDAAAEBwAAAAAAAAAAAPz//38CAAAAoQMAAAQHAAAAAAAAAAAA/P//f9gAAABNAAAAAAoAAAAAAAAAAAAAAAAAAAAAAG0AAAAEDgAAAAAAAAAAAAUAAAABAAAAcgAAAAQHAAAAAAAAAAAA/P//fwAAAACOAAAABA4AAAAAAAAAAAD+//9/aAAAAJ4AAAAEDgD///////////z//39uAAAApgAAAAQHAAAAAAAAAAAA////f6UBAADJAAAABA4A///////////8//9/bgAAANEAAAAEBwAAAAAAAAAAAP///3+lAQAA8AAAAAQOAAAA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f9gAAAADAAAAABcAAAAAAAAAAAAFAAAABgAAAAMAAAAAFwAAAAAAAAAAAAUAAAAKAAAAMwAAAAQOAAAAAAAAAAAABQAAAAcAAAA4AAAABAcAAAAAAAAAAAD8//9/AAAAAEcAAAAEDgD///////////z//39uAAAAVgAAAAQHAAAAAAAAAAAA////f6UBAABtAAAABA4AAAAAAAAAAAAFAAAAAQAAAHIAAAAEBwAAAAAAAAAAAPz//38AAAAAgQAAAAQOAAAAAAAAAAAA/f//fxIEAACTAAAABA4AAAAAAAAAAAD+//9/NgAAALAAAAAEDgAAAAAAAAAAAAUAAAAGAAAAugAAAAQOAP///////////P//f24AAADKAAAABAcAAAAAAAAAAAD///9/pQEAAO4AAAAACgAAAAAAAAAAAAAAAAAAAAAA8wAAAAQOAAAAAAAAAAAABQAAAAsAAAD4AAAABAcAAAAAAAAAAAD8//9/AAAAAAwBAAAEDgAAAAAAAAAAAAUAAAABAAAAEQEAAAQHAAAAAAAAAAAA/P//fwAAAAAgAQAABA4AAAAAAAAAAAD9//9/EwQAADIBAAAEDgAAAAAAAAAAAP7//382AAAATwEAAAQOAAAAAAAAAAAABQAAAAoAAABZAQAABA4A///////////8//9/bgAAAGoBAAAEBwAAAAAAAAAAAP///3+lAQAAjgEAAAAKAAAAAAAAAAAAAAAAAAAAAAC1AQAABAcAAAAAAAAAAAD8//9/2AAAAAMAAAAAFwAAAAAAAAAAAAUAAAAGAAAAAwAAAAAXAAAAAAAAAAAABQAAAAoAAAAuAAAABA4AAAAAAAAAAAAFAAAABwAAADMAAAAEBwAAAAAAAAAAAPz//38AAAAAQgAAAAQOAP///////////P//f24AAABRAAAABAcAAAAAAAAAAAD///9/pQEAAGgAAAAEDgAAAAAAAAAAAAUAAAABAAAAbQAAAAQHAAAAAAAAAAAA/P//fwAAAAB8AAAABA4AAAAAAAAAAAD9//9/FAQAAI4AAAAEDgAAAAAAAAAAAP7//382AAAAogAAAAQOAAAAAAAAAAAABQAAAAYAAACsAAAABA4A///////////8//9/bgAAALsAAAAEBwAAAAAAAAAAAP///3+lAQAA4AAAAAAKAAAAAAAAAAAAAAAAAAAA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AAD8//9/AAAAAD4AAAAEDgD///////////z//39uAAAAVwAAAAQHAAAAAAAAAAAA////f6gBAACbAAAABA4AAAAAAAAAAAD///9/gAEAAKEAAAAEBwAAAAAAAAAAAPz//38AAAAAqAAAAAQOAAAAAAAAAAAA+///fz0AAACxAAAABA4A///////////8//9/bgAAAMEAAAAEBwAAAAAAAAAAAP///3+lAQAA7AAAAAQHAAAAAAAAAAAA/P//f9gAAAADAAAAABcAAAAAAAAAAAAJAAAAiAAAADYAAAAEDgAAAAAAAAAAAP7//388AAAAQQAAAAQHAAAAAAAAAAAACgAAAFADAABuAAAABAcAAAAAAAAAAAD7//9/QQAAAK8AAAAEBwAAAAAAAAAAAPv//39DAAAAvAAAAAQOAAgAAAAAAAAA+///f4wAAADIAAAABA4AAAAAAAAAAAD7//9/jAAAANQAAAAEDgAAAAAAAAAAAAkAAACJAAAA2QAAAAQHAAAAAAAAAAAA/P//fwAAAADoAAAABA4A///////////8//9/bgAAAPcAAAAEBwAAAAAAAAAAAP///3+lAQAAGQEAAAQOAAAAAAAAAAAA/f//f+YCAABJAQAABAcAAAAAAAAAAAAKAAAAaAAAAGMBAAAEBwAAAAAAAAAAAPz//3/WAAAAFQAAAAQOAAAAAAAAAAAA/v//fz0AAAAhAAAABAcAAAAAAAAAAAAKAAAAUAMAACgAAAAEDgAAAAAAAAAAAP7//38+AAAAOwAAAAQHAAAAAAAAAAAACQAAAD8AAABcAAAABA4AAAAAAAAAAAD7//9/iAAAAGMAAAAEDgAAAAAAAAAAAP///3+WAAAAaAAAAAQHAAAAAAAAAAAA/P//f1QAAAChAAAABAcAAAAAAAAAAAD8//9/2AAAADUAAAAEBwAAAAAAAAAAAA0AAAAgAAAASgAAAAQOAAAAAAAAAAAA////f4EAAABYAAAABAcAAAAAAAAAAAD8//9/UwAAAGgAAAAEDgAAAAAAAAAAAPv//39cAAAAbQAAAAQHAAAAAAAAAAAA/P//fwAAAACCAAAABA4AAAAAAAAAAAD///9/gQAAAIwAAAAEBwAAAAAAAAAAAPz//39eAAAAlAAAAAQOAP///////////P//f24AAACjAAAABAcAAAAAAAAAAAD///9/mQEAANQAAAAEBwAAAAAAAAAAAA0AAAAiAAAA8wAAAAQOAAAAAAAAAAAA+///f0AAAAAhAQAABAcAAAAAAAAAAAANAAAAJAAAAFMBAAAEBwAAAAAAAAAAAPz//3/YAAAALQAAAAAKAAAAAAAAAAAAAAAAAAAAAAA/AAAABA4A///////////8//9/bgAAAEcAAAAEBwAAAAAAAAAAAP///3+ZAQAAawAAAAQOAP///////////P//f24AAABzAAAABAcAAAAAAAAAAAD///9/mQEAAIcAAAAEBwAAAAAAAAAAAAwAAAAJAAAAjQAAAAQOAP///////////P//f24AAAChAAAABAcAAAAAAAAAAAD///9/mQEAAMEAAAAEBwAAAAAAAAAAAPz//3/WAAAAAwAAAAAXAAAAAAAAAAAA/P//f+UAAAADAAAAABcAAAAAAAAAAAD8//9/5QAAAAMAAAAAFwAAAAAAAAAAAP///3/DAgAAAwAAAAAXAAAAAAAAAAAA////f2YAAAADAAAAABcAAAAAAAAAAAD///9/kgAAAEEAAAAEBwAAAAAAAAAAAPv//38+AAAAUQAAAAQHAAAAAAAAAAAA+///fz8AAAB/AAAABA4AAAAAAAAAAAD+//9/PQAAAIkAAAAEBwAAAAAAAAAAAAoAAABQAwAAkAAAAAQOAAAAAAAAAAAA/v//fz4AAACjAAAABAcAAAAAAAAAAAAJAAAAPwAAAMsAAAAEDgAAAAAAAAAAAP3//38hBAAA5QAAAAQHAAAAAAAAAAAACAAAACkAAAAFAQAABAcAAAAAAAAAAAAKAAAA3QMAADsBAAAEDgAAAAAAAAAAAP///39uAQAAQQEAAAQHAAAAAAAAAAAA/P//fwAAAABJAQAABA4AAAAAAAAAAAD+//9/YgAAAFYBAAAEDgAAAAAAAAAAAP7//39jAAAAYwEAAAQOAAAAAAAAAAAA/v//f2QAAAC8AQAABA4AAAAAAAAAAAAMAAAAjAAAAMEBAAAEBwAAAAAAAAAAAPz//38AAAAA0wEAAAQOAAAAAAAAAAAA/f//fyQEAADrAQAABAcAOgMAAAAAAAD8//9/1QAAAAQCAAAEBwAAAAAAAAAAAAwAAAAbAAAAGAIAAAQOAAAAAAAAAAAA/v//f2EAAAD4AgAABAcAAAAAAAAAAAD///9/mAEAAAUDAAAEDwAAAAAAAAAAAAAAAAAAAAAAQQMAAAQHAAAAAAAAAAAA////f5gBAABOAwAABA8AAAAAAAAAAAAAAAAAAAAAAGEDAAAEDgAAAAAAAAAAAP///3/DAgAAbgMAAAQHAAAAAAAAAAAA/P//f3cAAAC7AwAABA4AAAAAAAAAAAD+//9/ZwAAAOEDAAAEBwAAAAAAAAAAAP///3+AAgAA7gMAAAQPAAAAAAAAAAAAAAAAAAAAAAA1BAAABA4AAAAAAAAAAAD8//9/6wAAAEEEAAAEBwAAAAAAAAAAAPz//393AAAAZgQAAAQOAP///////////P//f24AAABuBAAABAcAAAAAAAAAAAD///9/mQEAALUEAAAEBwAAAAAAAAAAAAwAAAAaAAAA9wQAAAQHAAAAAAAAAAAA/P//f4EAAAAIBQAABA4AAAAAAAAAAAD8//9/6wAAABUFAAAEBwAAAAAAAAAAAPz//393AAAAPgUAAAQOAP///////////P//f24AAABGBQAABAcAAAAAAAAAAAD///9/mQEAAGQFAAAEDgAAAAAAAAAAAAwAAACMAAAAaQUAAAQHAAAAAAAAAAAA/P//fwAAAAB7BQAABA4AAAAAAAAAAAD9//9/JQQAAIsFAAAEBwA6AwAAAAAAAPz//3/VAAAApAUAAAQHAAAAAAAAAAAADAAAABsAAAAiBgAABA4AAAAAAAAAAAD7//9/kgAAAEsGAAAEBwBLAQAAAAAAAPz//3/UAAAAdAYAAAQHAAAAAAAAAAAA/P//f1AAAACGBgAABAcAAAAAAAAAAAD8//9/PwAAAJ0GAAAEDgAAAAAAAAAAAP7//38/AAAAqQYAAAQOAAAAAAAAAAAA////f5IAAACuBgAABAcAAAAAAAAAAAD8//9/YAAAALUGAAAEDgAAAAAAAAAAAPz//3/lAAAAvgYAAAQOAP///////////P//f24AAADQBgAABAcAAAAAAAAAAAD///9/mQEAAPEGAAAEBwAAAAAAAAAAAPz//38/AAAACAcAAAQOAAAAAAAAAAAA/v//f0AAAAAUBwAABA4AAAAAAAAAAAD///9/kgAAABkHAAAEBwAAAAAAAAAAAPz//39gAAAAIAcAAAQOAAAAAAAAAAAA/P//f+UAAAApBwAABA4A///////////8//9/bgAAADsHAAAEBwAAAAAAAAAAAP///3+ZAQAAZwcAAAQHAAAAAAAAAAAA/P//f0EAAAB+BwAABA4AAAAAAAAAAAD9//9/IgQAAIoHAAAEDgAAAAAAAAAAAP///3+SAAAAjwcAAAQHAAAAAAAAAAAA/P//f2AAAACWBwAABA4AAAAAAAAAAAD///9/wwIAAJ8HAAAEDgD///////////z//39uAAAAsQcAAAQHAAAAAAAAAAAA////f5kBAADhBwAABAcAAAAAAAAAAAD8//9/QQAAAPgHAAAEDgAAAAAAAAAAAP7//39BAAAABAgAAAQOAAAAAAAAAAAA////f5IAAAAJCAAABAcAAAAAAAAAAAD8//9/YAAAABAIAAAEDgAAAAAAAAAAAP///39mAAAAGQgAAAQOAP///////////P//f24AAAAtCAAABAcAAAAAAAAAAAD///9/mQEAAFMIAAAEDgAAAAAAAAAAAP///3+SAAAAYQgAAAQHAAAAAAAAAAAAAwAAAJsAAACrCAAABA4AAAAAAAAAAAD7//9/QgAAAMYIAAAEDgAAAAAAAAAAAP3//38jBAAA/QgAAAQOAAAAAAAAAAAADwAAADsAAAARCQAABAcAAAAAAAAAAAAPAAAADAAAAEgJAAAEDgAAAAAAAAAAAPv//3+SAAAATQkAAAQHAAAAAAAAAAAA/P//f0cAAABrCQAABAcAAAAAAAAAAAD///9/2QEAAHgJAAAEBwAAAAAAAAAAAP///3/ZAQAAhAkAAAQHAAAAAAAAAAAA////f8QCAACOCQAABAcAAAAAAAAAAAD///9/2QEAAJgJAAAEBwAAAAAAAAAAAP///3/ZAQAAogkAAAQHAAAAAAAAAAAA////f9kBAADBCQAABAcAAAAAAAAAAAD8//9/2AAAACgAAAAEBwAAAAAAAAAAAAgAAAAqAAAAQgAAAAQHAAAAAAAAAAAA/P//f9YAAAADAAAAABcAAAAAAAAAAAD8//9/9wAAAAMAAAAAFwAAAAAAAAAAAP///39wAAAAQQAAAAQHAAAAAAAAAAAA+///fz4AAABRAAAABAcAAAAAAAAAAAD7//9/PwAAAHwAAAAEDgAAAAAAAAAAAP3//38hBAAAlgAAAAQHAAAAAAAAAAAACAAAACkAAAC2AAAABAcAAAAAAAAAAAAKAAAA3QMAANYAAAAEDgAAAAAAAAAAAP7//39CAAAA4QAAAAQHAAAAAAAAAAAACgAAAFADAAABAQAABAcAAAAAAAAAAAAGAAAAGgAAACEBAAAEBwAAAAAAAAAAAAwAAAAZAAAAYQEAAAQHAAAAAAAAAAAA/P//f0AAAABoAQAABA4AAAAAAAAAAAD8//9/9wAAAKoBAAAEDgAAAAAAAAAAAP3//38mBAAAxAEAAAQHAAAAAAAAAAAACAAAACkAAADkAQAABAcAAAAAAAAAAAAKAAAA3QMAAFcCAAAEBwAAAAAAAAAAAPv//39FAAAApQIAAAQOAAAAAAAAAAAA+///f1oAAACqAgAABAcAAAAAAAAAAAD8//9/egAAAOkCAAAEDgD///////////z//39uAAAA9QIAAAQHAAAAAAAAAAAA////f5kBAAAeAwAABA4AAAAAAAAAAAD7//9/kwAAAEsDAAAEBwBLAQAAAAAAAPz//3/UAAAAegMAAAQHAAAAAAAAAAAA/P//f0EAAACBAwAABA4AAAAAAAAAAAD///9/cAAAAJEDAAAEBwAAAAAAAAAAAAMAAACbAAAA2wMAAAQOAAAAAAAAAAAA+///f0QAAAD2AwAABA4AAAAAAAAAAAD9//9/JwQAAC0EAAAEDgAAAAAAAAAAAA8AAAA7AAAAQQQAAAQHAAAAAAAAAAAADwAAAAwAAAB3BAAABA4AAAAAAAAAAAD7//9/kwAAAIEEAAAEBwAAAAAAAAAAAPz//39HAAAAwQQAAAQHAAAAAAAAAAAA/P//f9gAAAAoAAAABAcAAAAAAAAAAAAIAAAAKgAAAEIAAAAEBwAAAAAAAAAAAPz//3/WAAAAAwAAAAAXAAAAAAAAAAAA+///f1QAAAADAAAAABcAAAAAAAAAAAD///9/pgEAAAMAAAAAFwAAAAAAAAAAAP///3+mAQAAAwAAAAAXAAAAAAAAAAAA/P//f/cAAAADAAAAABcAAAAAAAAAAAD8//9/6wAAAAMAAAAAFwAAAAAAAAAAAPz//3/rAAAArQAAAAQOAAAAAAAAAAAA/v//f2kAAAD2AAAABA4AAAAAAAAAAAD+//9/QwAAAAEBAAAEBwAAAAAAAAAAAPz//39AAAAACAEAAAQOAAAAAAAAAAAA+///f1QAAAAiAQAABAcAAAAAAAAAAAD8//9/PwAAACkBAAAEDgAAAAAAAAAAAP///3+mAQAAQwEAAAQHAAAAAAAAAAAA/P//fz8AAABKAQAABA4AAAAAAAAAAAD///9/pgEAAGEBAAAEDgAAAAAAAAAAAP3//38gBAAAewEAAAQHAAAAAAAAAAAACAAAACkAAACbAQAABAcAAAAAAAAAAAD8//9/QAAAAKIBAAAEDgAAAAAAAAAAAPz//3/3AAAAwQEAAAQHAAAAAAAAAAAA/P//fz8AAADIAQAABA4AAAAAAAAAAAD8//9/6wAAAOIBAAAEBwAAAAAAAAAAAPz//38/AAAA6QEAAAQOAAAAAAAAAAAA/P//f+sAAAAAAgAABA4AAAAAAAAAAAD+//9/RAAAABoCAAAEBwAAAAAAAAAAAAgAAAApAAAATgIAAAQHAAAAAAAAAAAA/P//f9gAAAAWAAAABA4AAAAAAAAAAAD///9/igEAABsAAAAEBwAAAAAAAAAAAPz//38AAAAAIgAAAAQOAAAAAAAAAAAA+///f0cAAAArAAAABA4A///////////8//9/bgAAADoAAAAEBwAAAAAAAAAAAP///3+lAQAAVgAAAAQHAAAAAAAAAAAA/P//f9gAAAADAAAAABgAYAAAAAAAAAAKAAAAbwUAAAMAAAAAFwAAAAAAAAAAABAAAADrAAAAAwAAAAAXAAAAAAAAAAAAEQAAADUAAAADAAAAABcAAAAAAAAAAAD///9/0gIAAAMAAAAAGABgAAAAAAAAAAoAAABvBQAARwAAAAQOAAAAAAAAAAAA/v//f0UAAABRAAAABAcAAAAAAAAAAAAKAAAAUAMAAHIAAAAACgAAAAAAAAAAAAAAAAAAAAAAhAAAAAQOAAAAAAAAAAAA/f//fygEAACJAAAABAcAAAAAAAAAAAASAAAAJAAAAJ0AAAAEDgAAAAAAAAAAAP///39FAQAAogAAAAQHAAAAAAAAAAAA/P//fwAAAAC5AAAABA4AAAAAAAAAAAD9//9/KQQAANgAAAAEDgAAAAAAAAAAABIAAABDAAAA4QAAAAQHAAAAAAAAAAAA/P//f2AAAAD3AAAABA4A///////////8//9/bgAAAAkBAAAEBwAAAAAAAAAAAP///3+ZAQAAOgEAAAQOAAAAAAAAAAAA+///f0oAAAB5AQAAAAoAAAAAAAAAAAAAAAAAAAAAAIYBAAAEBwAAAAAAAAAAAPv//39LAAAAogEAAAQOAAAAAAAAAAAA+///f5QAAADbAQAABA4AAAAAAAAAAAD9//9/KgQAAP0BAAAACgAAAAAAAAAAAAAAAAAAAAAAAQIAAAQHAAAAAAAAAAAA/P//f88AAAAVAgAABA4AAAAAAAAAAAD+//9/RgAAACECAAAEBwAAAAAAAAAAABAAAADOAAAATAIAAAQOAAAAAAAAAAAA/f//fywEAABmAgAABAcAAAAAAAAAAAAIAAAAKQAAAIYCAAAEBwAAAAAAAAAAAAoAAADdAwAAiwIAAAQHAAAAAAAAAAAA/P//f88AAACsAgAABA4AAAAAAAAAAAD7//9/SQAAANYCAAAEBwAAAAAAAAAAAPz//3/OAAAA+wIAAAAKAAAAAAAAAAAAAAAAAAAAAAA2AwAABA4AAAAAAAAAAAD9//9/LQQAAFADAAAEBwAAAAAAAAAAAAgAAAApAAAAcAMAAAQHAAAAAAAAAAAACgAAAN0DAAB4AwAABA4AAAAAAAAAAAD8//9/2wAAAIUDAAAEBwAAAAAAAAAAAPz//393AAAAlAMAAAQOAAAAAAAAAAAAEQAAADQAAACZAwAABAcAAAAAAAAAAAD8//9/AAAAAK8DAAAEDgD///////////z//39uAAAAyQMAAAQHAAAAAAAAAAAA////f5kBAADzAwAABA4AAAAAAAAAAAD9//9/5AIAABIEAAAEBwAAAAAAAAAAAPv//39LAAAAGQQAAAQOAAAAAAAAAAAA/f//f+UCAAAmBAAABAcAAAAAAAAAAAATAAAAdwAAAFEEAAAEDgAAAAAAAAAAAP3//38rBAAAawQAAAQHAAAAAAAAAAAACAAAACkAAACLBAAABAcAAAAAAAAAAAAKAAAA3QMAAJAEAAAEBwAAAAAAAAAAAPz//3/PAAAApgQAAAQHAAAAAAAAAAAAEQAAABsAAADRBAAABA4AAAAAAAAAAAD9//9/LgQAAOsEAAAEBwAAAAAAAAAAAAgAAAApAAAACwUAAAQHAAAAAAAAAAAACgAAAN0DAAAQBQAABAcAAAAAAAAAAAD8//9/zwAAAC0FAAAEDgAAAAAAAAAAABAAAAAIAQAANAUAAAQOAAgAAAAAAAAAEAAAAAgBAABBBQAABAcAAAAAAAAAAAAQAAAAlAAAAHoFAAAEDgAAAAAAAAAAAP3//38vBAAAlAUAAAQHAAAAAAAAAAAACAAAACkAAAC0BQAABAcAAAAAAAAAAAAKAAAA3QMAALkFAAAEBwAAAAAAAAAAAPz//3/PAAAA1gUAAAQOAAAAAAAAAAAA/v//f0cAAADhBQAABAcAAAAAAAAAAAD8//9/LAAAAPMFAAAEBwAAAAAAAAAAAPv//39MAAAAKwYAAAQHAEsBAAAAAAAA/P//f9QAAABCBgAABA4AAAAAAAAAAAD+//9/SAAAAF0GAAAEDgAAAAAAAAAAAP7//39JAAAAeAYAAAQOAAAAAAAAAAAA/v//f0oAAACTBgAABA4AAAAAAAAAAAD+//9/SwAAAOEGAAAEBwAAAAAAAAAAABQAAAAFAAAA5gYAAAQHAAAAAAAAAAAAFAAAAB4AAAAhBwAABAcAAAAAAAAAAAD8//9/QQAAACgHAAAEDgAAAAAAAAAAAP///3/SAgAAPwcAAAQOAAAAAAAAAAAA/f//fzAEAABZBwAABAcAAAAAAAAAAAAIAAAAKQAAAHkHAAAEBwAAAAAAAAAAAAoAAADdAwAAgQcAAAQHAAAAAAAAAAAA/P//f88AAACmBwAABA4AAAAAAAAAAAD7//9/SAAAAOIHAAAEBwAAAAAAAAAAAPz//3/OAAAAAggAAAAKAAAAAAAAAAAAAAAAAAAAAAAVCAAABA4AAAAAAAAAAAD9//9/KAQAABoIAAAEBwAAAAAAAAAAABIAAAAkAAAALggAAAQOAAAAAAAAAAAA////f0UBAAAzCAAABAcAAAAAAAAAAAD8//9/AAAAAEoIAAAEDgAAAAAAAAAAAP3//38xBAAAaQgAAAQOAAAAAAAAAAAAEgAAAEMAAABuCAAABAcAAAAAAAAAAAD8//9/YAAAAIQIAAAEDgD///////////z//39uAAAAlggAAAQHAAAAAAAAAAAA////f5kBAADVCAAABAcAAAAAAAAAAAAKAAAAfwAAANoIAAAEBwAAAAAAAAAAAPz//3/PAAAA6AgAAAQHAAAAAAAAAAAA/P//f88AAAD2CAAABAcAAAAAAAAAAAD8//9/zwAAAA8JAAAEBwAAAAAAAAAAABMAAAB3AAAAQgkAAAQOAAAAAAAAAAAA/f//fysEAABkCQAAAAoAAAAAAAAAAAAAAAAAAAAAAGcJAAAEBwAAAAAAAAAAAPz//3/PAAAAdQkAAAQHAAAAAAAAAAAA/P//f88AAACqCQAABA4AAAAAAAAAAAD7//9/lAAAAK8JAAAEBwAAAAAAAAAAAPz//39HAAAA4QkAAAQHAAAAAAAAAAAA/P//f9YAAAAhAAAABAcAAAAAAAAAAAAQAAAAmAAAACwAAAAEBwAAAAAAAAAAAPz//3/WAAAAIQAAAAQHAAAAAAAAAAAAEAAAAJQAAAA2AAAABAcAAAAAAAAAAAAQAAAAmAAAAEIAAAAEBwAAAAAAAAAAAPz//3/WAAAAAwAAAAAYAGAAAAAAAAAACgAAAG8FAAADAAAAABgAYAAAAAAAAAAKAAAAbwUAAFEAAAAACgAAAAAAAAAAAAAAAAAAAAAAYQAAAAQOAAAAAAAAAAAA/f//fygEAABmAAAABAcAAAAAAAAAAAASAAAAJAAAAHcAAAAEDgAAAAAAAAAAAP///39FAQAAgQAAAAQHAAAAAAAAAAAA/P//fwAAAACVAAAABA4AAAAAAAAAAAD9//9/MgQAAK4AAAAEDgAAAAAAAAAAABIAAABDAAAAswAAAAQHAAAAAAAAAAAA/P//f2AAAADJAAAABA4A///////////8//9/bgAAANgAAAAEBwAAAAAAAAAAAP///3+ZAQAA/AAAAAAKAAAAAAAAAAAAAAAAAAAAAAALAQAABA4AAAAAAAAAAAD9//9/MwQAABABAAAEBwAAAAAAAAAAABIAAAAkAAAAIQEAAAQOAAAAAAAAAAAA////f0UBAAAmAQAABAcAAAAAAAAAAAD8//9/AAAAADoBAAAEDgAAAAAAAAAAAP7//39MAAAAUwEAAAQOAAAAAAAAAAAAEgAAAEMAAABYAQAABAcAAAAAAAAAAAD8//9/YAAAAG4BAAAEDgD///////////z//39uAAAAgQEAAAQHAAAAAAAAAAAA////f5kBAADBAQAABAcAAAAAAAAAAAAIAAAAKQAAANsBAAAEBwAAAAAAAAAAAAoAAADdAwAAAQIAAAQHAAAAAAAAAAAA/P//f9YAAAAwAAAABA4AAAAAAAAAAAATAAAAwAAAADUAAAAEBwAAAAAAAAAAAPz//38AAAAARAAAAAQOAAAAAAAAAAAAEwAAAKoAAABJAAAABAcAAAAAAAAAAAD8//9/AAAAAFgAAAAEDgAAAAAAAAAAAP7//39NAAAAagAAAAQOAAAAAAAAAAAA/v//f04AAAB0AAAABA4A///////////8//9/bgAAAIYAAAAEBwAAAAAAAAAAAP///3+ZAQAAtQAAAAQOAAAAAAAAAAAA////f0kBAAC6AAAABAcAAAAAAAAAAAD8//9/AAAAAMkAAAAEDgAAAAAAAAAAABMAAACqAAAAzgAAAAQHAAAAAAAAAAAA/P//fwAAAADdAAAABA4AAAAAAAAAAAD9//9/NAQAAO8AAAAEDgAAAAAAAAAAAP7//39OAAAA+QAAAAQOAP///////////P//f24AAAANAQAABAcAAAAAAAAAAAD///9/mQEAACkBAAAEDgAAAAAAAAAAABMAAACqAAAALgEAAAQHAAAAAAAAAAAA/P//fwAAAAA9AQAABA4AAAAAAAAAAAD+//9/TwAAAE8BAAAEDgAAAAAAAAAAAP3//381BAAAWQEAAAQOAP///////////P//f24AAAB1AQAABAcAAAAAAAAAAAD///9/zwEAAOsBAAAEBwA5AQAAAAAAAPz//3/UAAAABAIAAAQHAAAAAAAAAAAA/P//f00AAABLAgAABAcAIgEAAAAAAAD8//9/1AAAAGQCAAAEBwAAAAAAAAAAAPz//39NAAAADwMAAAQOAAAAAAAAAAAAEwAAALwAAAAUAwAABAcAAAAAAAAAAAD8//9/AAAAACMDAAAEDgAAAAAAAAAAAP///39fAQAAKAMAAAQHAAAAAAAAAAAA/P//fwAAAABdAwAABA4A///////////8//9/bgAAAG8DAAAEBwAAAAAAAAAAAP///3/PAQAA1AMAAAQOAAAAAAAAAAAAEwAAAL8AAADZAwAABAcAAAAAAAAAAAD8//9/egAAAOsDAAAEDgD///////////z//39uAAAA8wMAAAQHAAAAAAAAAAAA////f5kBAAAaBAAABA4A///////////8//9/bgAAACcEAAAEBwAAAAAAAAAAAP///3+ZAQAAwAQAAAQOAAAAAAAAAAAA////f6gAAADNBAAABAcAAAAAAAAAAAD8//9/UwAAAPsEAAAEBwAAAAAAAAAAAPz//38sAAAACAUAAAQOAAAAAAAAAAAA////f4wAAAAVBQAABAcAAAAAAAAAAAD8//9/VAAAAD0FAAAEDgAAAAAAAAAAABMAAACxAAAAQgUAAAQHAAAAAAAAAAAA/P//fwAAAABnBQAABA4A///////////8//9/bgAAAG8FAAAEBwAAAAAAAAAAAP///3+lAQAAiAUAAAQOAP///////////P//f24AAACQBQAABAcAAAAAAAAAAAD///9/pQEAAKkFAAAEDgD///////////z//39uAAAAsQUAAAQHAAAAAAAAAAAA////f6UBAADzBQAABA4AAAAAAAAAAAATAAAAtAAAAPgFAAAEBwAAAAAAAAAAAPz//396AAAADQYAAAQOAP///////////P//f24AAAAVBgAABAcAAAAAAAAAAAD///9/mQEAAEEGAAAEDgD///////////z//39uAAAASQYAAAQHAAAAAAAAAAAA////f5kBAAB0BgAABAcAAAAAAAAAAAD8//9/LAAAAIEGAAAEDgAAAAAAAAAAAP///3+MAAAAjgYAAAQHAAAAAAAAAAAA/P//f2AAAACWBgAABA4A///////////8//9/bgAAAKgGAAAEBwAAAAAAAAAAAP///3+ZAQAA4AYAAAQOAAAAAAAAAAAAEwAAALYAAADlBgAABAcAAAAAAAAAAAD8//9/AAAAAA4HAAAEDgAAAAAAAAAAAP///39dAQAAEwcAAAQHAAAAAAAAAAAA/P//fwAAAAAZBwAABA4A///////////8//9/bgAAAC0HAAAEBwAAAAAAAAAAAP///3+lAQAAaQcAAAQOAP///////////P//f24AAABxBwAABAcAAAAAAAAAAAD///9/mQEAAK0HAAAEDgAAAAAAAAAAABMAAAC5AAAAsgcAAAQHAAAAAAAAAAAA/P//f3oAAADEBwAABA4A///////////8//9/bgAAAMwHAAAEBwAAAAAAAAAAAP///3+ZAQAA/QcAAAQOAP///////////P//f24AAAAFCAAABAcAAAAAAAAAAAD///9/mQEAACAIAAAEDgAAAAAAAAAAAP///3+oAAAALQgAAAQHAAAAAAAAAAAA/P//f14AAAA1CAAABA4A///////////8//9/bgAAAEcIAAAEBwAAAAAAAAAAAP///3+ZAQAAlAgAAAQOAAAAAAAAAAAAEwAAALkAAACZCAAABAcAAAAAAAAAAAD8//9/egAAAKcIAAAEDgD///////////z//39uAAAA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f+sCAABgAAAACAEAAAAAAAAAAAD9//9/dgMAAGgAAAAIAQAAAAAAAAAAAP///3++AAAAeAAAAAgBAAAAAAAAAAAA/f//f3cDAACAAAAACAEAAAAAAAAAAAD///9/wAAAAJAAAAAIAQAAAAAAAAAAAP3//394AwAAmAAAAAgBAAAAAAAAAAAA////f8IAAACoAAAACAEAAAAAAAAAAAD9//9/eQMAALAAAAAIAQAAAAAAAAAAAP///3/EAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//396AwAAMAAAAAgBAAAAAAAAAAAA+///f2gAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38BAAAAKAAAAAQFAAAAAAAAAAAA/f//f3oDAAAsAAAABAUAAAAAAAAAAAD7//9/ZwAAADAAAAAEBQAAAAAAAAAAAP3//3/rAgAAMgAAAAQfAAAAAAAAAAAA////f4EDAABkAAAABB8AAAAAAAAAAAD///9/gQMAAJgAAAAEHwAAAAAAAAAAAP///3+BAwAAvwAAAAQfAAAAAAAAAAAA////f0kCAADqAAAABB8AAAAAAAAAAAD///9/SQIAABQBAAAEHwAAAAAAAAAAAP///39JAgAAPgEAAAQfAAAAAAAAAAAA////f0kCAABqAQAABB8AAAAAAAAAAAD///9/SQIAAJcBAAAEHwAAAAAAAAAAAP///39JAgAAzQEAAAQfAAAAAAAAAAAA////f04CAAAKAgAABB8AAAAAAAAAAAD///9/TgIAAD4CAAAEHwAAAAAAAAAAAP///39OAgAAcAIAAAQfAAAAAAAAAAAA////f04CAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f30DAAAwAAAACAEAAAAAAAAAAAD7//9/awAAABgAAAAIAQAAAAAAAAAAAP///3/GAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/fQMAACwAAAAEBQAAAAAAAAAAAPv//39qAAAAOAAAAAgBAGAAAAAAAAAA+///f2sA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AAhXAAAAAAAAAAAA+///fwYAAAAIAAAACFcALwAAAAAAAAD7//9/BgAAACMAAAAIVwAfAAAAAAAAAPv//38GAAAAKwAAAAhXAC8AAAAAAAAA+///fwYAAAA2AAAACFcALwAAAAAAAAD7//9/BgAAAD4AAAAIVwDaAAAAAAAAAPv//38GAAAAWgAAAAhXABYAAAAAAAAA+///fwYAAABiAAAACFcALwAAAAAAAAD7//9/BgAAAG0AAAAIVwAvAAAAAAAAAPv//38GAAAAdQAAAAhXANoAAAAAAAAA+///fwYAAACRAAAACFcALwAAAAAAAAD7//9/BgAAAJkAAAAIVwA0AAAAAAAAAPv//38GAAAAqAAAAAhXADQAAAAAAAAA+///fwYAAACwAAAACFcARgAAAAAAAAD7//9/BgAAAMEAAAAIVwBGAAAAAAAAAPv//38GAAAAyQAAAAhXAEsAAAAAAAAA+///fwYAAADcAAAACFcASwAAAAAAAAD7//9/BgAAAOQAAAAIVwDaAAAAAAAAAPv//38GAAAABwEAAAhXAAAAAAAAAAAA+///fwYAAAAPAQAACFcALwAAAAAAAAD7//9/BgAAAAMAAAAIAQAAAAAAAAAAAPv//38GAAAAAAAAAAAWAAAAAAAAAAAA/P//f9wAAAAAAAAAABYAAAAAAAAAAAD///9/pgEAADwAAAAIAQAAAAAAAAAAAPv//38GAAAARAAAAAgBANoAAAAAAAAA+///fwYAAABaAAAABB8AAAAAAAAAAAD///9/xgEAAF4AAAAEHwAAAAAAAAAAAPv//3+wAAAAcwAAAAQfAAAAAAAAAAAA////f7IBAAB3AAAABB8AIwAAAAAAAAD7//9/sAAAAIcAAAAEHwAAAAAAAAAAAP///3+yAQAAiwAAAAQfAFoAAAAAAAAA+///f7AAAACTAAAABB8AAAAAAAAAAAD///9/uwEAAJcAAAAEHwCRAAAAAAAAAPv//3+wAAAApQAAAAQfAAAAAAAAAAAA////f8cBAAC0AAAABB8AAAAAAAAAAAD///9/xgEAALoAAAAEHwAAAAAAAAAAAP///38bAAAAvgAAAAgBACUAAAAAAAAA+///fwYAAADGAAAACAEAOQAAAAAAAAD7//9/BgAAANcAAAAEHwARAAAAAAAAAP///38bAAAA2wAAAAQf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fxEBAAB3AAAABB8AAAAAAAAAAAD///9/HgAAAHsAAAAEHwAAAAAAAAAAAPv//38QAQAAiAAAAAQfADkAAAAAAAAA////fx4AAACMAAAABB8A0QAAAAAAAAD7//9/EQEAAJEAAAAEHwBBAAAAAAAAAP///38eAAAAlQAAAAQfADEBAAAAAAAA+///fxEBAACbAAAABB8AAAAAAAAAAAD///9/HgAAAJ8AAAAIAQAzAAAAAAAAAPv//38dAAAApwAAAAgBAEQAAAAAAAAA+///fx0AAAC4AAAABB8AOQAAAAAAAAD///9/HgAAALwAAAAEHwBUAQAAAAAAAPv//38RAQAAwQAAAAQfAEEAAAAAAAAA////fx4AAADFAAAABB8AtAEAAAAAAAD7//9/EQEAAMsAAAAEHwAAAAAAAAAAAP///38hAAAAzwAAAAQfAFAAAAAAAAAA+///fxABAADcAAAABB8ANwAAAAAAAAD///9/IQAAAOAAAAAEHwDXAQAAAAAAAPv//38RAQAA5gAAAAQfAAAAAAAAAAAA////fx8AAADqAAAABB8AoAAAAAAAAAD7//9/EAEAAPcAAAAEHwArAAAAAAAAAP///38fAAAA+wAAAAQfAPoBAAAAAAAA+///fxEBAAABAQAABB8AAAAAAAAAAAD///9/IAAAAAUBAAAEHwDQAAAAAAAAAPv//38QAQAAEgEAAAQfADkAAAAAAAAA////fyAAAAAWAQAABB8AHQIAAAAAAAD7//9/EQEAABsBAAAEHwBBAAAAAAAAAP///38gAAAAHwEAAAQfAH0CAAAAAAAA+///fxEBAAAlAQAABB8AAAAAAAAAAAD///9/HwAAACkBAAAEHwAAAQAAAAAAAPv//38QAQAANgEAAAQfACsAAAAAAAAA////fx8AAAA6AQAABB8AoAIAAAAAAAD7//9/EQEAAEABAAAEHwAAAAAAAAAAAP///38gAAAARAEAAAQfADABAAAAAAAA+///fxABAABRAQAABB8AOQAAAAAAAAD///9/IAAAAFUBAAAEHwDDAgAAAAAAAPv//38RAQAAWgEAAAQfAEEAAAAAAAAA////fyAAAABeAQAABB8AIwMAAAAAAAD7//9/EQEAAAAAAAAIVwAgAAAAAAAAAPv//38eAAAACAAAAAhXAC4AAAAAAAAA+///fx4A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AAAAAAD7//9/IQAAADcCAAAIVwCZAAAAAAAAAPv//38hAAAAPwIAAAhXACcBAAAAAAAA+///fyEAAABaAgAACFcALAEAAAAAAAD7//9/IQAAAGICAAAIVwBGAQAAAAAAAPv//38hAAAAfQIAAAhXAAAAAAAAAAAA+///fyEAAACFAgAACFcAlAAAAAAAAAD7//9/IQAAAJACAAAIVwCUAAAAAAAAAPv//38hAAAAmAIAAAhXANEBAAAAAAAA+///fyEAAACjAgAACFcA0QEAAAAAAAD7//9/IQAAAKsCAAAIVwA7AgAAAAAAAPv//38hAAAAxgIAAAhXAEYBAAAAAAAA+///fyEAAADOAgAACFcAywEAAAAAAAD7//9/IQAAAAMAAAAIAQAAAAAAAAAAAPv//38hAAAAAAAAAAAWAAAAAAAAAAAA/P//f+sAAAAtAAAACAEAAAAAAAAAAAD7//9/IQAAADUAAAAIAQA7AgAAAAAAAPv//38hAAAATAAAAAQfAAAAAAAAAAAA////fwkCAABQAAAABB8AAAAAAAAAAAD7//9/IwEAAFoAAAAEHwAAAAAAAAAAAP///380AgAAXgAAAAQfAEkAAAAAAAAA+///fyMBAABwAAAABB8AAAAAAAAAAAD///9/DQIAAHQAAAAEHwDLAAAAAAAAAPv//38jAQAAeQAAAAQfAAAAAAAAAAAA////fx4AAAB9AAAABB8AAAAAAAAAAAD7//9/IgEAAIoAAAAEHwA5AAAAAAAAAP///38eAAAAjgAAAAQfABYBAAAAAAAA+///fyMBAACTAAAABB8AQQAAAAAAAAD///9/HgAAAJcAAAAEHwBfAQAAAAAAAPv//38jAQAAnQAAAAQfAAAAAAAAAAAA////fx4AAAChAAAACAEAVgAAAAAAAAD7//9/IQAAAKkAAAAIAQBjAAAAAAAAAPv//38hAAAAugAAAAQfADkAAAAAAAAA////fx4AAAC+AAAABB8AggEAAAAAAAD7//9/IwEAAMQAAAAEHwAAAAAAAAAAAP///38fAAAAyAAAAAQfAEAAAAAAAAAA+///fyIBAADVAAAABB8AKwAAAAAAAAD///9/HwAAANkAAAAEHwDLAQAAAAAAAPv//38jAQAA3wAAAAQfAAAAAAAAAAAA////fyAAAADjAAAABB8AgAAAAAAA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AAAIVwCaAAAAAAAAAPv//38mAAAAVAEAAAhXAJoAAAAAAAAA+///fyYAAABcAQAACFcASQEAAAAAAAD7//9/JgAAAGcBAAAIVwBJAQAAAAAAAPv//38mAAAAbwEAAAhXAG4BAAAAAAAA+///fyYAAACKAQAACFcAygAAAAAAAAD7//9/JgAAAJIBAAAIVwBEAQAAAAAAAPv//38mAAAAAwAAAAgBAAAAAAAAAAAA+///fyYAAAAAAAAAABYAAAAAAAAAAAAFAAAAEQAAAAAAAAAAFgAAAAAAAAAAAPz//3/rAAAAOwAAAAgBAAAAAAAAAAAA+///fyYAAABDAAAACAEAqwEAAAAAAAD7//9/JgAAAFoAAAAEHwAAAAAAAAAAAP///38JAgAAXgAAAAQfAAAAAAAAAAAA+///fzkBAABpAAAABB8AAAAAAAAAAAD///9/4QEAAG0AAAAEHwBJAAAAAAAAAPv//385AQAAewAAAAQfAAAAAAAAAAAA////f04CAAB/AAAABB8AbAAAAAAAAAD7//9/OQEAAI0AAAAEHwAAAAAAAAAAAP///3+vAQAAkQAAAAQfAI8AAAAAAAAA+///fzkBAACWAAAABB8AAAAAAAAAAAD///9/HgAAAJoAAAAIAQBgAAAAAAAAAPv//38mAAAAogAAAAgBAG4AAAAAAAAA+///fyYAAACzAAAABB8AOQAAAAAAAAD///9/HgAAALcAAAAEHwCyAAAAAAAAAPv//385AQAAvAAAAAQfAEEAAAAAAAAA////fx4AAADAAAAABB8A+wAAAAAAAAD7//9/OQEAAMYAAAAEHwAAAAAAAAAAAP///38fAAAAygAAAAgBAHkAAAAAAAAA+///fyYAAADSAAAACAEAkwAAAAAAAAD7//9/JgAAAOMAAAAEHwArAAAAAAAAAP///38fAAAA5wAAAAQfAB4BAAAAAAAA+///fzkBAADtAAAABB8AAAAAAAAAAAD///9/IAAAAPEAAAAEHwAAAAAAAAAAAPv//384AQAA/gAAAAQfADkAAAAAAAAA////fyAAAAACAQAABB8AQQEAAAAAAAD7//9/OQEAAAcBAAAEHwBBAAAAAAAAAP///38gAAAACwEAAAQfAIoBAAAAAAAA+///fzkBAAAAAAAACFcAAAAAAAAAAAD7//9/JwAAAAgAAAAIVwAtAAAAAAAAAPv//38nAAAAIwAAAAhXAAAAAAAAAAAA+///fycAAAArAAAACFcALQAAAAAAAAD7//9/JwAAAEYAAAAIVwAAAAAAAAAAAPv//38nAAAATgAAAAhXAC0AAAAAAAAA+///fycAAAADAAAACAEAAAAAAAAAAAD7//9/JwAAADAAAAAIAQAAAAAAAAAAAPv//38nAAAAOAAAAAgBAFgAAAAAAAAA+///fycAAABPAAAABB8AAAAAAAAAAAD///9/CQIAAFMAAAAEHwAAAAAAAAAAAPv//389AQAAXgAAAAQfAAAAAAAAAAAA////f+EBAABiAAAABB8AIwAAAAAAAAD7//9/PQEAAGwAAAAEHwAAAAAAAAAAAP///38NAgAAcAAAAAQfAEYAAAAAAAAA+///fz0BAAAAAAAACFcAQgAAAAAAAAD7//9/KAAAAAgAAAAIVwBGAAAAAAAAAPv//38oAAAAEAAAAAhXAEwAAAAAAAAA+///fygAAAAYAAAACFcAUAAAAAAAAAD7//9/KAAAADAAAAAIVwAUAQAAAAAAAPv//38oAAAAOAAAAAhXACABAAAAAAAA+///fygAAABAAAAACFcAIAEAAAAAAAD7//9/KAAAAEgAAAAIVwAkAQAAAAAAAPv//38oAAAAAAAAAAhXAAAAAAAAAAAA+///fygAAAAIAAAACFcAgQAAAAAAAAD7//9/KAAAABMAAAAIVwCBAAAAAAAAAPv//38oAAAAGwAAAAhXACkBAAAAAAAA+///fygAAAAmAAAACFcAKQEAAAAAAAD7//9/KAAAAC4AAAAIVwBdAQAAAAAAAPv//38oAAAASQAAAAhXAAAAAAAAAAAA+///fygAAABRAAAACFcAhgAAAAAAAAD7//9/KAAAAGwAAAAIVwA2AAAAAAAAAPv//38oAAAAdAAAAAhXAIYAAAAAAAAA+///fygAAAB/AAAACFcAhgAAAAAAAAD7//9/KAAAAIcAAAAIVwApAQAAAAAAAPv//38oAAAAowAAAAhXAAAAAAAAAAAA+///fygAAACrAAAACFcAgQAAAAAAAAD7//9/KAAAALYAAAAIVwCBAAAAAAAAAPv//38oAAAAvgAAAAhXACkBAAAAAAAA+///fygAAADJAAAACFcAKQEAAAAAAAD7//9/KAAAANEAAAAIVwBdAQAAAAAAAPv//38oAAAA7AAAAAhXAAAAAAAAAAAA+///fygAAAD0AAAACFcAhgAAAAAAAAD7//9/KAAAAA8BAAAIVwAAAAAAAAAAAPv//38oAAAAFwEAAAhXAIYAAAAAAAAA+///fygAAAAyAQAACFcAAAAAAAAAAAD7//9/KAAAADoBAAAIVwCBAAAAAAAAAPv//38oAAAARQEAAAhXAIEAAAAAAAAA+///fygAAABNAQAACFcAKQEAAAAAAAD7//9/KAAAAFgBAAAIVwApAQAAAAAAAPv//38oAAAAYAEAAAhXAF0BAAAAAAAA+///fygAAAB7AQAACFcArAAAAAAAAAD7//9/KAAAAIMBAAAIVwAkAQAAAAAAAPv//38oAAAAAwAAAAgBAAAAAAAAAAAA+///fygAAAAAAAAAABYAAAAAAAAAAAAFAAAADAAAAAAAAAAAFgAAAAAAAAAAAPz//3/rAAAAOAAAAAgBAAAAAAAAAAAA+///fygAAABAAAAACAEAXQEAAAAAAAD7//9/KAAAAFcAAAAEHwAAAAAAAAAAAP///38JAgAAWwAAAAQfAAAAAAAAAAAA+///f0IBAABmAAAABB8AAAAAAAAAAAD///9/4QEAAGoAAAAEHwBJAAAAAAAAAPv//39CAQAAdgAAAAQfAAAAAAAAAAAA////fw0CAAB6AAAABB8AbAAAAAAAAAD7//9/QgEAAH8AAAAEHwAAAAAAAAAAAP///38eAAAAgwAAAAQfAAAAAAAAAAAA+///f0EBAACQAAAABB8AOQAAAAAAAAD///9/HgAAAJQAAAAEHwCjAAAAAAAAAPv//39CAQAAmQAAAAQfAEEAAAAAAAAA////fx4AAACdAAAABB8A7AAAAAAAAAD7//9/QgEAAKMAAAAEHwAAAAAAAAAAAP///38fAAAApwAAAAgBAGAAAAAAAAAA+///fygAAACvAAAACAEAegAAAAAAAAD7//9/KAAAAMAAAAAEHwArAAAAAAAAAP///38fAAAAxAAAAAQfAA8BAAAAAAAA+///f0IBAADKAAAABB8AAAAAAAAAAAD///9/IAAAAM4AAAAEHwAwAAAAAAAAAPv//39BAQAA2wAAAAQfADkAAAAAAAAA////fyAAAADfAAAABB8AMgEAAAAAAAD7//9/QgEAAOQAAAAEHwBBAAAAAAAAAP///38gAAAA6AAAAAQfAHsBAAAAAAAA+///f0IBAAAAAAAACFcAAAAAAAAAAAD7//9/KQAAAAgAAAAIVwBeAAAAAAAAAPv//38pAAAAEwAAAAhXAF4AAAAAAAAA+///fykAAAAbAAAACFcA/gAAAAAAAAD7//9/KQAAACYAAAAIVwD+AAAAAAAAAPv//38pAAAALgAAAAhXAAABAAAAAAAA+///fykAAAADAAAACAEAAAAAAAAAAAD7//9/KQAAAAAAAAAAFgAAAAAAAAAAAP///39xAQAAAAAAAAAWAAAAAAAAAAAA/P//f/kAAAArAAAACAEAAAAAAAAAAAD7//9/KQAAADMAAAAIAQAcAQAAAAAAAPv//38pAAAASgAAAAQfAAAAAAAAAAAA////fwkCAABOAAAABB8AAAAAAAAAAAD7//9/RgEAAFoAAAAEHwAAAAAAAAAAAP///3/8AQAAAAAAAAhXAAAAAAAAAAAA+///fyoAAAAIAAAACFcAEwAAAAAAAAD7//9/KgAAACMAAAAIVwAAAAAAAAAAAPv//38qAAAAKwAAAAhXABQAAAAAAAAA+///fyoAAAADAAAACAEAAAAAAAAAAAD7//9/KgAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAAQAAAAQfAAAAAAAAAAAA////fx4AAAAFAAAACAEAAAAAAAAAAAD7//9/KgAAAA0AAAAIAQAUAAAAAAAAAPv//38qAAAAGAAAAAQfADkAAAAAAAAA////fx4AAAAcAAAABB8AAAAAAAAAAAD7//9/SgEAACEAAAAEHwBBAAAAAAAAAP///38eAAAAJQAAAAQfACMAAAAAAAAA+///f0oBAAAxAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAPv//38rAAAACAAAAAhXABgAAAAAAAAA+///fysAAAAjAAAACFcAAAAAAAAAAAD7//9/KwAAACsAAAAIVwAaAAAAAAAAAPv//38rAAAAAwAAAAgBAAAAAAAAAAAA+///fysAAAABAAAABB8AAAAAAAAAAAD///9/IAAAAAUAAAAIAQAAAAAAAAAAAPv//38rAAAADQAAAAgBAD0AAAAAAAAA+///fysAAAAYAAAABB8AOQAAAAAAAAD///9/IAAAABwAAAAEHwAAAAAAAAAAAPv//39OAQAAIQAAAAQfAEEAAAAAAAAA////fyAAAAAlAAAABB8AIwAAAAAAAAD7//9/TgEAAAAAAAAIVwATAgAAAAAAAPv//38sAAAACAAAAAhXAB0CAAAAAAAA+///fywAAAAQAAAACFcAMQIAAAAAAAD7//9/LAAAABgAAAAIVwBAAgAAAAAAAPv//38sAAAAIAAAAAhXAEMCAAAAAAAA+///fywAAAAoAAAACFcAWwIAAAAAAAD7//9/LAAAAAAAAAAIVwAAAAAAAAAAAPv//38sAAAACAAAAAhXADoAAAAAAAAA+///fywAAAATAAAACFcAOgAAAAAAAAD7//9/LAAAABsAAAAIVwCJAgAAAAAAAPv//38sAAAANgAAAAhXAMoAAAAAAAAA+///fywAAAA+AAAACFcA7AAAAAAAAAD7//9/LAAAAFkAAAAIVwBDAgAAAAAAAPv//38sAAAAYQAAAAhXAFsCAAAAAAAA+///fywAAAB8AAAACFcADwIAAAAAAAD7//9/LAAAAIQAAAAIVwATAgAAAAAAAPv//38sAAAAkwAAAAhXABMCAAAAAAAA+///fywAAACbAAAACFcAHQIAAAAAAAD7//9/LAAAALsAAAAIVwAHAgAAAAAAAPv//38sAAAAwwAAAAhXAB0CAAAAAAAA+///fywAAADOAAAACFcAQwIAAAAAAAD7//9/LAAAANYAAAAIVwBbAgAAAAAAAPv//38sAAAAAwAAAAgBAAAAAAAAAAAA+///fywAAAAAAAAAABYAAAAAAAAAAAD///9/YwIAAC0AAAAIAQAAAAAAAAAAAPv//38sAAAANQAAAAgBAIkCAAAAAAAA+///fywAAABMAAAABB8AAAAAAAAAAAD///9/CQIAAFAAAAAEHwAAAAAAAAAAAPv//39TAQAAVQAAAAgBAHUAAAAAAAAA+///fywAAABdAAAACAEABQEAAAAAAAD7//9/LAAAAGsAAAAEHwAAAAAAAAAAAP///38NAgAAbwAAAAQfADYAAAAAAAAA+///f1MBAAB1AAAACAEAxQEAAAAAAAD7//9/LAAAAH0AAAAIAQBbAgAAAAAAAPv//38sAAAAiwAAAAQfAAAAAAAAAAAA////fw0CAACPAAAABB8AWQAAAAAAAAD7//9/UwEAAJsAAAAEHwAAAAAAAAAAAP///3+7AQAAnwAAAAQfAHwAAAAAAAAA+///f1MBAACkAAAABB8AAAAAAAAAAAD7//9/UgEAALQAAAAEHwAAAAAAAAAAAP///3/GAQAAuAAAAAQfALsAAAAAAAAA+///f1MBAAAAAAAACFcA3QAAAAAAAAD7//9/LQAAAAgAAAAIVwDpAAAAAAAAAPv//38tAAAAEAAAAAhXAOkAAAAAAAAA+///fy0AAAAYAAAACFcA8AAAAAAAAAD7//9/LQAAADAAAAAIVwB9AQAAAAAAAPv//38tAAAAOAAAAAhXAIkBAAAAAAAA+///fy0AAABAAAAACFcAiQEAAAAAAAD7//9/LQAAAEgAAAAIVwCQAQAAAAAAAPv//38tAAAAAAAAAAhXAAAAAAAAAAAA+///fy0AAAAIAAAACFcANwAAAAAAAAD7//9/LQAAABMAAAAIVwA3AAAAAAAAAPv//38tAAAAGwAAAAhXANwBAAAAAAAA+///fy0AAAA2AAAACFcAAAAAAAAAAAD7//9/LQAAAD4AAAAIVwA8AAAAAAAAAPv//38tAAAASQAAAAhXADwAAAAAAAAA+///fy0AAABRAAAACFcA3AEAAAAAAAD7//9/LQAAAG0AAAAIVwAAAAAAAAAAAPv//38tAAAAdQAAAAhXADwAAAAAAAAA+///fy0AAACAAAAACFcAPAAAAAAAAAD7//9/LQAAAIgAAAAIVwDcAQAAAAAAAPv//38tAAAApAAAAAhXAAAAAAAAAAAA+///fy0AAACsAAAACFcAPAAAAAAAAAD7//9/LQAAALwAAAAIVwA8AAAAAAAAAPv//38tAAAAxAAAAAhXANwBAAAAAAAA+///fy0AAADmAAAACFcAAAAAAAAAAAD7//9/LQAAAO4AAAAIVwA8AAAAAAAAAPv//38tAAAA+QAAAAhXADwAAAAAAAAA+///fy0AAAABAQAACFcA3AEAAAAAAAD7//9/LQAAAB0BAAAIVwAAAAAAAAAAAPv//38tAAAAJQEAAAhXADcAAAAAAAAA+///fy0AAAAwAQAACFcANwAAAAAAAAD7//9/LQAAADgBAAAIVwDcAQAAAAAAAPv//38tAAAAUwEAAAhXAHYAAAAAAAAA+///fy0AAABbAQAACFcA8AAAAAAAAAD7//9/LQAAAHYBAAAIVwAAAAAAAAAAAPv//38tAAAAfgEAAAhXADcAAAAAAAAA+///fy0AAACJAQAACFcANwAAAAAAAAD7//9/LQAAAJEBAAAIVwDcAQAAAAAAAPv//38tAAAArAEAAAhXABUBAAAAAAAA+///fy0AAAC0AQAACFcAkAEAAAAAAAD7//9/LQAAAAMAAAAIAQAAAAAAAAAAAPv//38tAAAAAAAAAAAWAAAAAAAAAAAABQAAAAYAAAAAAAAAABYAAAAAAAAAAAAFAAAACgAAADIAAAAIAQAAAAAAAAAAAPv//38tAAAAOgAAAAgBANwBAAAAAAAA+///fy0AAABRAAAABB8AAAAAAAAAAAD///9/CQIAAFUAAAAEHwAAAAAAAAAAAPv//39YAQAAZwAAAAQfAAAAAAAAAAAA////fw0CAABrAAAABB8ANgAAAAAAAAD7//9/WAEAAHcAAAAEHwAAAAAAAAAAAP///38NAgAAewAAAAQfAG0AAAAAAAAA+///f1gBAACIAAAABB8AAAAAAAAAAAD///9/uwEAAIwAAAAEHwCkAAAAAAAAAPv//39YAQAAnQAAAAQfAAAAAAAAAAAA////f8YBAAChAAAABB8A5gAAAAAAAAD7//9/WAEAAKYAAAAEHwAAAAAAAAAAAP///38iAAAAqgAAAAQfAAAAAAAAAAAA+///f1cBAAC3AAAABB8AMQAAAAAAAAD///9/IgAAALsAAAAEHwAdAQAAAAAAAPv//39YAQAAwAAAAAQfADkAAAAAAAAA////fyIAAADEAAAABB8AUwEAAAAAAAD7//9/WAEAAMoAAAAEHwAAAAAAAAAAAP///38iAAAAzgAAAAQfADAAAAAAAAAA+///f1cBAADbAAAABB8AMQAAAAAAAAD///9/IgAAAN8AAAAEHwB2AQAAAAAAAPv//39YAQAA5AAAAAQfADkAAAAAAAAA////fyIAAADoAAAABB8ArAEAAAAAAAD7//9/WAEAAAAAAAAIVwDOAAAAAAAAAPv//38uAAAACAAAAAhXANoAAAAAAAAA+///fy4AAAAQAAAACFcA2gAAAAAAAAD7//9/LgAAABgAAAAIVwDiAAAAAAAAAPv//38uAAAAMAAAAAhXAGQBAAAAAAAA+///fy4AAAA4AAAACFcAcAEAAAAAAAD7//9/LgAAAEAAAAAIVwBwAQAAAAAAAPv//38uAAAASAAAAAhXAHcBAAAAAAAA+///fy4AAAAAAAAACFcAAAAAAAAAAAD7//9/LgAAAAgAAAAIVwAyAAAAAAAAAPv//38uAAAAEwAAAAhXADIAAAAAAAAA+///fy4AAAAbAAAACFcAuQEAAAAAAAD7//9/LgAAADYAAAAIVwAAAAAAAAAAAPv//38uAAAAPgAAAAhXADcAAAAAAAAA+///fy4AAABJAAAACFcANwAAAAAAAAD7//9/LgAAAFEAAAAIVwC5AQAAAAAAAPv//38uAAAAbQAAAAhXAAAAAAAAAAAA+///fy4AAAB1AAAACFcANwAAAAAAAAD7//9/LgAAAIUAAAAIVwA3AAAAAAAAAPv//38uAAAAjQAAAAhXALkBAAAAAAAA+///fy4AAACvAAAACFcAAAAAAAAAAAD7//9/LgAAALcAAAAIVwA3AAAAAAAAAPv//38uAAAAwgAAAAhXADcAAAAAAAAA+///fy4AAADKAAAACFcAuQEAAAAAAAD7//9/LgAAAOYAAAAIVwAAAAAAAAAAAPv//38uAAAA7gAAAAhXADIAAAAAAAAA+///fy4AAAD5AAAACFcAMgAAAAAAAAD7//9/LgAAAAEBAAAIVwC5AQAAAAAAAPv//38uAAAAHAEAAAhXAHEAAAAAAAAA+///fy4AAAAkAQAACFcA4gAAAAAAAAD7//9/LgAAAD8BAAAIVwAAAAAAAAAAAPv//38uAAAARwEAAAhXADIAAAAAAAAA+///fy4AAABSAQAACFcAMgAAAAAAAAD7//9/LgAAAFoBAAAIVwC5AQAAAAAAAPv//38uAAAAdQEAAAhXAAcBAAAAAAAA+///fy4AAAB9AQAACFcAdwEAAAAAAAD7//9/LgAAAAMAAAAIAQAAAAAAAAAAAPv//38uAAAAAAAAAAAWAAAAAAAAAAAABQAAAAYAAAAAAAAAABYAAAAAAAAAAAAFAAAACgAAADMAAAAIAQAAAAAAAAAAAPv//38uAAAAOwAAAAgBALkBAAAAAAAA+///fy4AAABSAAAABB8AAAAAAAAAAAD///9/CQIAAFYAAAAEHwAAAAAAAAAAAPv//39dAQAAaAAAAAQfAAAAAAAAAAAA////fw0CAABsAAAABB8ANgAAAAAAAAD7//9/XQEAAHkAAAAEHwAAAAAAAAAAAP///3+7AQAAfQAAAAQfAG0AAAAAAAAA+///f10BAACOAAAABB8AAAAAAAAAAAD///9/xgEAAJIAAAAEHwCvAAAAAAAAAPv//39dAQAAlwAAAAQfAAAAAAAAAAAA////fyIAAACbAAAABB8AAAAAAAAAAAD7//9/XAEAAKgAAAAEHwAxAAAAAAAAAP///38iAAAArAAAAAQfAOYAAAAAAAAA+///f10BAACxAAAABB8AOQAAAAAAAAD///9/IgAAALUAAAAEHwAcAQAAAAAAAPv//39dAQAAuwAAAAQfAAAAAAAAAAAA////fyIAAAC/AAAABB8AMAAAAAAAAAD7//9/XAEAAMwAAAAEHwAxAAAAAAAAAP///38iAAAA0AAAAAQfAD8BAAAAAAAA+///f10BAADVAAAABB8AOQAAAAAAAAD///9/IgAAANkAAAAEHwB1AQAAAAAAAPv//39dAQAAAAAAAAhXAAAAAAAAAAAA+///fy8AAAAIAAAACFcANQAAAAAAAAD7//9/LwAAACMAAAAIVwAAAAAAAAAAAPv//38vAAAAKwAAAAhXACoAAAAAAAAA+///fy8AAAA+AAAACFcAKgAAAAAAAAD7//9/LwAAAEYAAAAIVwAtAAAAAAAAAPv//38vAAAAWAAAAAhXAC0AAAAAAAAA+///fy8AAABgAAAACFcAMAAAAAAAAAD7//9/LwAAAAMAAAAIAQAAAAAAAAAAAPv//38vAAAAAAAAAAAWAAAAAAAAAAAA////f6YBAAAtAAAACAEAAAAAAAAAAAD7//9/LwAAADUAAAAIAQBqAAAAAAAAAPv//38vAAAATAAAAAQfAAAAAAAAAAAA////fwkCAABQAAAABB8AAAAAAAAAAAD7//9/YQEAAFwAAAAEHwAAAAAAAAAAAP///39vAgAAYAAAAAQfACMAAAAAAAAA+///f2EBAABsAAAABB8AAAAAAAAAAAD///9/xgEAAAAAAAAIVwAAAAAAAAAAAPv//38wAAAACAAAAAhXAHEAAAAAAAAA+///fzAAAAATAAAACFcAcQAAAAAAAAD7//9/MAAAABsAAAAIVwD/AQAAAAAAAPv//38wAAAAJgAAAAhXAP8BAAAAAAAA+///fzAAAAAuAAAACFcAAgIAAAAAAAD7//9/MAAAAEkAAAAIVwAAAAAAAAAAAPv//38wAAAAUQAAAAhXAHQAAAAAAAAA+///fzAAAABhAAAACFcAdAAAAAAAAAD7//9/MAAAAGkAAAAIVwB3AAAAAAAAAPv//38wAAAAfAAAAAhXAHcAAAAAAAAA+///fzAAAACEAAAACFcA/wEAAAAAAAD7//9/MAAAAJcAAAAIVwD/AQAAAAAAAPv//38wAAAAnwAAAAhXAFECAAAAAAAA+///fzAAAAC/AAAACFcAAAAAAAAAAAD7//9/MAAAAMcAAAAIVwBqAAAAAAAAAPv//38wAAAA2gAAAAhXAGoAAAAAAAAA+///fzAAAADiAAAACFcAfAAAAAAAAAD7//9/MAAAAPgAAAAIVwB8AAAAAAAAAPv//38wAAAAAAEAAAhXAP8BAAAAAAAA+///fzAAAAAWAQAACFcA/wEAAAAAAAD7//9/MAAAAB4BAAAIVwBRAgAAAAAAAPv//38wAAAAQQEAAAhXAK4AAAAAAAAA+///fzAAAABJAQAACFcAxwAAAAAAAAD7//9/MAAAAFgBAAAIVwDHAAAAAAAAAPv//38wAAAAYAEAAAhXAMUBAAAAAAAA+///fzAAAABxAQAACFcAxQEAAAAAAAD7//9/MAAAAHkBAAAIVwDpAQAAAAAAAPv//38wAAAAiQEAAAhXAOkBAAAAAAAA+///fzAAAACRAQAACFcA9gEAAAAAAAD7//9/MAAAALABAAAIVwDQAQAAAAAAAPv//38wAAAAuAEAAAhXAPYBAAAAAAAA+///fzAAAADTAQAACFcAYgAAAAAAAAD7//9/MAAAANsBAAAIVwB8AAAAAAAAAPv//38wAAAA5gEAAAhXAHwAAAAAAAAA+///fzAAAADuAQAACFcA/wEAAAAAAAD7//9/MAAAAAoCAAAIVwB8AAAAAAAAAPv//38wAAAAEgIAAAhXAK4AAAAAAAAA+///fzAAAAADAAAACAEAAAAAAAAAAAD7//9/MAAAAAAAAAAAFgAAAAAAAAAAAPz//3/cAAAAAAAAAAAWAAAAAAAAAAAA////f2IBAAAAAAAAABYAAAAAAAAAAAD///9/pgEAAAAAAAAAFgAAAAAAAAAAAP///3+wAAAAMwAAAAgBAAAAAAAAAAAA+///fzAAAAA7AAAACAEAUQIAAAAAAAD7//9/MAAAAFIAAAAEHwAAAAAAAAAAAP///38JAgAAVgAAAAQfAAAAAAAAAAAA+///f2UBAABlAAAABB8AAAAAAAAAAAD///9/cwIAAGkAAAAEHwBJAAAAAAAAAPv//39lAQAAdQAAAAQfAAAAAAAAAAAA////f28CAAB5AAAABB8AvwAAAAAAAAD7//9/ZQEAAIUAAAAEHwAAAAAAAAAAAP///3/GAQAAkgAAAAQfAAAAAAAAAAAA////f3MCAACWAAAABB8AQQEAAAAAAAD7//9/ZQEAAKIAAAAEHwAAAAAAAAAAAP///3/GAQAApgAAAAQfALABAAAAAAAA+///f2UBAACzAAAABB8AAAAAAAAAAAD///9/dAIAALcAAAAEHwDTAQAAAAAAAPv//39lAQAAwQAAAAQfAAAAAAAAAAAA////f8EBAADFAAAABB8ACgIAAAAAAAD7//9/ZQEAANMAAAAEHwAAAAAAAAAAAP///3/HAQAA4gAAAAQfAAAAAAAAAAAA////f8YBAADoAAAABB8AAAAAAAAAAAD///9/GwAAAOwAAAAIAQACAQAAAAAAAPv//38wAAAA9AAAAAgBABkBAAAAAAAA+///fzAAAAAAAAAACFcAAAAAAAAAAAD7//9/MQAAAAgAAAAIVwAVAAAAAAAAAPv//38xAAAAAwAAAAgBAAAAAAAAAAAA+///fzEAAAAAAAAAABYAAAAAAAAAAAD8//9/6wAAAAEAAAAEHwAAAAAAAAAAAP///38fAAAABQAAAAgBAAAAAAAAAAAA+///fzEAAAANAAAACAEAFQAAAAAAAAD7//9/MQAAABgAAAAEHwArAAAAAAAAAP///38fAAAAHAAAAAQfAAAAAAAAAAAA+///f2kBAAAoAAAABB8AAAAAAAAAAAD///9/eAIAAAAAAAAIVwAAAAAAAAAAAPv//38yAAAACAAAAAhXACQAAAAAAAAA+///fzIAAAAjAAAACFcAHAAAAAAAAAD7//9/MgAAACsAAAAIVwAgAAAAAAAAAPv//38yAAAAAwAAAAgBAAAAAAAAAAAA+///fzIAAAAAAAAAABYAAAAAAAAAAAD8//9/9wAAAAEAAAAEHwAAAAAAAAAAAP///38hAAAABQAAAAgBAAAAAAAAAAAA+///fzIAAAANAAAACAEAMQAAAAAAAAD7//9/MgAAABgAAAAEHwAuAAAAAAAAAP///38hAAAAHAAAAAQfAAAAAAAAAAAA+///f20BAAAoAAAABB8AAAAAAAAAAAD///9/uwEAAC4AAAAEHwA3AAAAAAAAAP///38hAAAAMgAAAAQfACMAAAAAAAAA+///f20BAAAAAAAACFcAAAAAAAAAAAD7//9/MwAAAAgAAAAIVwBBAAAAAAAAAPv//38zAAAAEwAAAAhXAEEAAAAAAAAA+///fzMAAAAbAAAACFcAjAEAAAAAAAD7//9/MwAAADYAAAAIVwAAAAAAAAAAAPv//38zAAAAPgAAAAhXAEEAAAAAAAAA+///fzMAAABZAAAACFcAVAAAAAAAAAD7//9/MwAAAGEAAAAIVwBcAAAAAAAAAPv//38zAAAAbAAAAAhXAFwAAAAAAAAA+///fzMAAAB0AAAACFcAogAAAAAAAAD7//9/MwAAAH8AAAAIVwCiAAAAAAAAAPv//38zAAAAhwAAAAhXACgBAAAAAAAA+///fzMAAACTAAAACFcAKAEAAAAAAAD7//9/MwAAAJsAAAAIVwBjAQAAAAAAAPv//38zAAAAtgAAAAhXACoAAAAAAAAA+///fzMAAAC+AAAACFcAQQAAAAAAAAD7//9/MwAAAAMAAAAIAQAAAAAAAAAAAPv//38zAAAAAAAAAAAWAAAAAAAAAAAA////f94BAAAxAAAACAEAAAAAAAAAAAD7//9/MwAAADkAAAAIAQCMAQAAAAAAAPv//38zAAAATgAAAAQfAAAAAAAAAAAA////f38CAABSAAAABB8AAAAAAAAAAAD7//9/cQEAAFsAAAAEHwAAAAAAAAAAAP///3/hAQAAXwAAAAQfADYAAAAAAAAA+///f3EBAABsAAAABB8AAAAAAAAAAAD///9/xgEAAHAAAAAEHwBZAAAAAAAAAPv//39xAQAAdQAAAAQfAAAAAAAAAAAA////fxkAAAB5AAAACAEAKgAAAAAAAAD7//9/MwAAAIEAAAAIAQBHAAAAAAAAAPv//38zAAAAkgAAAAQfAA0AAAAAAAAA////fxkAAACWAAAABB8AtgAAAAAAAAD7//9/cQEAAAAAAAAIVwAAAAAAAAAAAPv//380AAAACAAAAAhXADUAAAAAAAAA+///fzQAAAAjAAAACFcAAAAAAAAAAAD7//9/NAAAACsAAAAIVwA1AAAAAAAAAPv//380AAAARgAAAAhXAB4AAAAAAAAA+///fzQAAABOAAAACFcANQAAAAAAAAD7//9/NAAAAAMAAAAIAQAAAAAAAAAAAPv//380AAAAAAAAAAAWAAAAAAAAAAAABwAAALwAAAABAAAABB8AAAAAAAAAAAD///9/JAAAAAUAAAAIAQAAAAAAAAAAAPv//380AAAADQAAAAgBAGIAAAAAAAAA+///fzQAAAAYAAAABB8AOgAAAAAAAAD///9/JAAAABwAAAAEHwAAAAAAAAAAAPv//391AQAAIQAAAAQfAEIAAAAAAAAA////fyQAAAAlAAAABB8AIwAAAAAAAAD7//9/dQEAADAAAAAEHwAAAAAAAAAAAP///3/hAQAANgAAAAQfAAAAAAAAAAAA////fyMAAAA6AAAACAEAHgAAAAAAAAD7//9/NAAAAEIAAAAIAQA7AAAAAAAAAPv//380AAAAUwAAAAQfAA0AAAAAAAAA////fyMAAABXAAAABB8ARgAAAAAAAAD7//9/dQEAAAAAAAAIVwAlAAAAAAAAAPv//381AAAACAAAAAhXADMAAAAAAAAA+///fzUAAAAQAAAACFcAQQAAAAAAAAD7//9/NQAAABgAAAAIVwBLAAAAAAAAAPv//381AAAAIAAAAAhXAE8AAAAAAAAA+///fzUAAAAoAAAACFcAVAAAAAAAAAD7//9/NQAAAEAAAAAIVwBLAAAAAAAAAPv//381AAAASAAAAAhXAE8AAAAAAAAA+///fzUAAABQAAAACFcAZAAAAAAAAAD7//9/NQAAAFgAAAAIVwBpAAAAAAAAAPv//381AAAAYAAAAAhXAJ0AAAAAAAAA+///fzUAAABoAAAACFcAcAEAAAAAAAD7//9/NQAAAHAAAAAIVwDnAQAAAAAAAPv//381AAAAeAAAAAhXAPIBAAAAAAAA+///fzUAAACAAAAACFcA/QEAAAAAAAD7//9/NQAAAIgAAAAIVwARAgAAAAAAAPv//381AAAAkAAAAAhXAEYCAAAAAAAA+///fzUAAACYAAAACFcAfgIAAAAAAAD7//9/NQAAAKAAAAAIVwCJAgAAAAAAAPv//381AAAAqAAAAAhXANgCAAAAAAAA+///fzUAAACwAAAACFcABQMAAAAAAAD7//9/NQAAALgAAAAIVwAOAwAAAAAAAPv//381AAAAwAAAAAhXABMDAAAAAAAA+///fzUAAADIAAAACFcAJQQAAAAAAAD7//9/NQAAANAAAAAIVwAKBQAAAAAAAPv//381AAAA2AAAAAhXACgFAAAAAAAA+///fzUAAADwAAAACFcASwAAAAAAAAD7//9/NQAAAPgAAAAIVwBPAAAAAAAAAPv//381AAAAAAEAAAhXAGQAAAAAAAAA+///fzUAAAAIAQAACFcAaQAAAAAAAAD7//9/NQAAABABAAAIVwCuAAAAAAAAAPv//381AAAAGAEAAAhXACoBAAAAAAAA+///fzUAAAAgAQAACFcASQEAAAAAAAD7//9/NQAAACgBAAAIVwBWAQAAAAAAAPv//381AAAAMAEAAAhXAFsBAAAAAAAA+///fzUAAAA4AQAACFcAcAEAAAAAAAD7//9/NQAAAEABAAAIVwDnAQAAAAAAAPv//381AAAASAEAAAhXAPIBAAAAAAAA+///fzUAAABQAQAACFcA/QEAAAAAAAD7//9/NQAAAFgBAAAIVwARAgAAAAAAAPv//381AAAAYAEAAAhXAEYCAAAAAAAA+///fzUAAABoAQAACFcAfgIAAAAAAAD7//9/NQAAAHABAAAIVwCJAgAAAAAAAPv//381AAAAeAEAAAhXANgCAAAAAAAA+///fzUAAACAAQAACFcABQMAAAAAAAD7//9/NQAAAIgBAAAIVwAOAwAAAAAAAPv//381AAAAkAEAAAhXABMDAAAAAAAA+///fzUAAACYAQAACFcAJQQAAAAAAAD7//9/NQAAAKABAAAIVwAKBQAAAAAAAPv//381AAAAqAEAAAhXACgFAAAAAAAA+///fzUAAADAAQAACFcAcAEAAAAAAAD7//9/NQAAAMgBAAAIVwCKAQAAAAAAAPv//381AAAA0AEAAAhXAJgBAAAAAAAA+///fzUAAADYAQAACFcAsgEAAAAAAAD7//9/NQAAAOABAAAIVwDAAQAAAAAAAPv//381AAAA6AEAAAhXANABAAAAAAAA+///fzUAAAAAAgAACFcAmAEAAAAAAAD7//9/NQAAAAgCAAAIVwCyAQAAAAAAAPv//381AAAAEAIAAAhXAMABAAAAAAAA+///fzUAAAAYAgAACFcAxgEAAAAAAAD7//9/NQAAADACAAAIVwCKAQAAAAAAAPv//381AAAAOAIAAAhXAJgBAAAAAAAA+///fzUAAABAAgAACFcAsgEAAAAAAAD7//9/NQAAAEgCAAAIVwDAAQAAAAAAAPv//381AAAAUAIAAAhXANABAAAAAAAA+///fzUAAABYAgAACFcA5wEAAAAAAAD7//9/NQAAAGACAAAIVwDyAQAAAAAAAPv//381AAAAaAIAAAhXAP0BAAAAAAAA+///fzUAAACAAgAACFcA0AEAAAAAAAD7//9/NQAAAIgCAAAIVwDnAQAAAAAAAPv//381AAAAkAIAAAhXAPIBAAAAAAAA+///fzUAAACYAgAACFcA+AEAAAAAAAD7//9/NQAAALACAAAIVwARAgAAAAAAAPv//381AAAAuAIAAAhXAEYCAAAAAAAA+///fzUAAADAAgAACFcAfgIAAAAAAAD7//9/NQAAAMgCAAAIVwCJAgAAAAAAAPv//381AAAA4AIAAAhXANgCAAAAAAAA+///fzUAAADoAgAACFcABQMAAAAAAAD7//9/NQAAAPACAAAIVwAOAwAAAAAAAPv//381AAAA+AIAAAhXABMDAAAAAAAA+///fzUAAAAQAwAACFcAKQQAAAAAAAD7//9/NQAAABgDAAAIVwBYBAAAAAAAAPv//381AAAAIAMAAAhXAGEEAAAAAAAA+///fzUAAAAoAwAACFcAZgQAAAAAAAD7//9/NQAAAEADAAAIVwDVBAAAAAAAAPv//381AAAASAMAAAhXAOgEAAAAAAAA+///fzUAAABQAwAACFcA6AQAAAAAAAD7//9/NQAAAFgDAAAIVwDtBAAAAAAAAPv//381AAAAYAMAAAhXAPYEAAAAAAAA+///fzUAAABoAwAACFcACgUAAAAAAAD7//9/NQAAAAAAAAAIVwAAAAAAAAAAAPv//381AAAACAAAAAhXADUAAAAAAAAA+///fzUAAAATAAAACFcAXAAAAAAAAAD7//9/NQAAABsAAAAIVwBwAAAAAAAAAPv//381AAAAJgAAAAhXAHAAAAAAAAAA+///fzUAAAAuAAAACFcARgUAAAAAAAD7//9/NQAAAEkAAAAIVwAAAAAAAAAAAPv//381AAAAUQAAAAhXADcAAAAAAAAA+///fzUAAABcAAAACFcAZAAAAAAAAAD7//9/NQAAAGQAAAAIVwB1AAAAAAAAAPv//381AAAAcAAAAAhXAHUAAAAAAAAA+///fzUAAAB4AAAACFcARgUAAAAAAAD7//9/NQAAAJQAAAAIVwBFAAAAAAAAAPv//381AAAAnAAAAAhXAE8AAAAAAAAA+///fzUAAACnAAAACFcATwAAAAAAAAD7//9/NQAAAK8AAAAIVwB1AAAAAAAAAPv//381AAAAugAAAAhXAHUAAAAAAAAA+///fzUAAADCAAAACFcARgUAAAAAAAD7//9/NQAAAN8AAAAIVwB1AAAAAAAAAPv//381AAAA5wAAAAhXAJgAAAAAAAAA+///fzUAAADyAAAACFcAmAAAAAAAAAD7//9/NQAAAPoAAAAIVwBGBQAAAAAAAPv//381AAAAFwEAAAhXAEUAAAAAAAAA+///fzUAAAAfAQAACFcATwAAAAAAAAD7//9/NQAAADoBAAAIVwCpAAAAAAAAAPv//381AAAAQgEAAAhXAK4AAAAAAAAA+///fzUAAABNAQAACFcArgAAAAAAAAD7//9/NQAAAFUBAAAIVwC5AAAAAAAAAPv//381AAAAYgEAAAhXALkAAAAAAAAA+///fzUAAABqAQAACFcAOgEAAAAAAAD7//9/NQAAAHcBAAAIVwA6AQAAAAAAAPv//381AAAAfwEAAAhXALIBAAAAAAAA+///fzUAAACKAQAACFcAsgEAAAAAAAD7//9/NQAAAJIBAAAIVwAlBAAAAAAAAPv//381AAAAnwEAAAhXACUEAAAAAAAA+///fzUAAACnAQAACFcAUgQAAAAAAAD7//9/NQAAALIBAAAIVwAXBQAAAAAAAPv//381AAAAugEAAAhXABwFAAAAAAAA+///fzUAAADHAQAACFcAHAUAAAAAAAD7//9/NQAAAM8BAAAIVwBGBQAAAAAAAPv//381AAAA6gEAAAhXALADAAAAAAAA+///fzUAAADyAQAACFcAtQMAAAAAAAD7//9/NQAAAA0CAAAIVwAAAAAAAAAAAPv//381AAAAFQIAAAhXADUAAAAAAAAA+///fzUAAAAgAgAACFcAXAAAAAAAAAD7//9/NQAAACgCAAAIVwBwAAAAAAAAAPv//381AAAAMwIAAAhXAHAAAAAAAAAA+///fzUAAAA7AgAACFcARgUAAAAAAAD7//9/NQAAAFYCAAAIVwC5AAAAAAAAAPv//381AAAAXgIAAAhXADoBAAAAAAAA+///fzUAAABrAgAACFcAOgEAAAAAAAD7//9/NQAAAHMCAAAIVwCyAQAAAAAAAPv//381AAAAfgIAAAhXALIBAAAAAAAA+///fzUAAACGAgAACFcAJQQAAAAAAAD7//9/NQAAAJMCAAAIVwAlBAAAAAAAAPv//381AAAAmwIAAAhXAFIEAAAAAAAA+///fzUAAACmAgAACFcAFwUAAAAAAAD7//9/NQAAAK4CAAAIVwAcBQAAAAAAAPv//381AAAAuwIAAAhXABwFAAAAAAAA+///fzUAAADDAgAACFcARgUAAAAAAAD7//9/NQAAAN4CAAAIVwCKAQAAAAAAAPv//381AAAA5gIAAAhXALIBAAAAAAAA+///fzUAAAABAwAACFcAAAAAAAAAAAD7//9/NQAAAAkDAAAIVwA1AAAAAAAAAPv//381AAAAFAMAAAhXAFwAAAAAAAAA+///fzUAAAAcAwAACFcAcAAAAAAAAAD7//9/NQAAACcDAAAIVwBwAAAAAAAAAPv//381AAAALwMAAAhXAEYFAAAAAAAA+///fzUAAABKAwAACFcAcAEAAAAAAAD7//9/NQAAAFIDAAAIVwCyAQAAAAAAAPv//381AAAAbQMAAAhXAMABAAAAAAAA+///fzUAAAB1AwAACFcA5wEAAAAAAAD7//9/NQAAAJADAAAIVwAAAAAAAAAAAPv//381AAAAmAMAAAhXADUAAAAAAAAA+///fzUAAACjAwAACFcAXAAAAAAAAAD7//9/NQAAAKsDAAAIVwBwAAAAAAAAAPv//381AAAAtgMAAAhXAHAAAAAAAAAA+///fzUAAAC+AwAACFcARgUAAAAAAAD7//9/NQAAANkDAAAIVwC5AAAAAAAAAPv//381AAAA4QMAAAhXADoBAAAAAAAA+///fzUAAADuAwAACFcAOgEAAAAAAAD7//9/NQAAAPYDAAAIVwCyAQAAAAAAAPv//381AAAAAQQAAAhXALIBAAAAAAAA+///fzUAAAAJBAAACFcAJQQAAAAAAAD7//9/NQAAABYEAAAIVwAlBAAAAAAAAPv//381AAAAHgQAAAhXAFIEAAAAAAAA+///fzUAAAApBAAACFcAFwUAAAAAAAD7//9/NQAAADEEAAAIVwAcBQAAAAAAAPv//381AAAAPgQAAAhXABwFAAAAAAAA+///fzUAAABGBAAACFcARgUAAAAAAAD7//9/NQAAAGEEAAAIVwAjAgAAAAAAAPv//381AAAAaQQAAAhXADoCAAAAAAAA+///fzUAAACEBAAACFcAAAAAAAAAAAD7//9/NQAAAIwEAAAIVwA1AAAAAAAAAPv//381AAAAlwQAAAhXAFwAAAAAAAAA+///fzUAAACfBAAACFcAcAAAAAAAAAD7//9/NQAAAKoEAAAIVwBwAAAAAAAAAPv//381AAAAsgQAAAhXAEYFAAAAAAAA+///fzUAAADNBAAACFcAuQAAAAAAAAD7//9/NQAAANUEAAAIVwA6AQAAAAAAAPv//381AAAA4gQAAAhXADoBAAAAAAAA+///fzUAAADqBAAACFcAsgEAAAAAAAD7//9/NQAAAPUEAAAIVwCyAQAAAAAAAPv//381AAAA/QQAAAhXACUEAAAAAAAA+///fzUAAAAKBQAACFcAJQQAAAAAAAD7//9/NQAAABIFAAAIVwBSBAAAAAAAAPv//381AAAAHQUAAAhXABcFAAAAAAAA+///fzUAAAAlBQAACFcAHAUAAAAAAAD7//9/NQAAADIFAAAIVwAcBQAAAAAAAPv//381AAAAOgUAAAhXAEYFAAAAAAAA+///fzUAAABVBQAACFcA6AIAAAAAAAD7//9/NQAAAF0FAAAIVwD/AgAAAAAAAPv//381AAAAeAUAAAhXAAAAAAAAAAAA+///fzUAAACABQAACFcANQAAAAAAAAD7//9/NQAAAIsFAAAIVwBcAAAAAAAAAPv//381AAAAkwUAAAhXAHAAAAAAAAAA+///fzUAAACeBQAACFcAcAAAAAAAAAD7//9/NQAAAKYFAAAIVwBGBQAAAAAAAPv//381AAAAwQUAAAhXACkEAAAAAAAA+///fzUAAADJBQAACFcAUgQAAAAAAAD7//9/NQAAAOQFAAAIVwA5BAAAAAAAAPv//381AAAA7AUAAAhXAFIEAAAAAAAA+///fzUAAAAHBgAACFcAdQAAAAAAAAD7//9/NQAAAA8GAAAIVwCYAAAAAAAAAPv//381AAAAGgYAAAhXAJgAAAAAAAAA+///fzUAAAAiBgAACFcARgUAAAAAAAD7//9/NQAAAAMAAAAIAQAAAAAAAAAAAPv//381AAAAAAAAAAAWAAAAAAAAAAAA/P//f9wAAAAAAAAAABYAAAAAAAAAAAD///9/WQEAAAAAAAAAFgAAAAAAAAAAAP///39iAQAAAAAAAAAWAAAAAAAAAAAA/P//f+sAAAAAAAAAABYAAAAAAAAAAAACAAAAtwAAAAAAAAAAFgAAAAAAAAAAAAcAAAC8AAAANAAAAAgBAAAAAAAAAAAA+///fzUAAAA8AAAACAEARgUAAAAAAAD7//9/NQAAAFEAAAAEHwAAAAAAAAAAAP///39/AgAAVQAAAAQfAAAAAAAAAAAA+///f3oBAABlAAAABB8AAAAAAAAAAAD///9/igIAAGkAAAAEHwBJAAAAAAAAAPv//396AQAAdAAAAAQfAAAAAAAAAAAA////f4sCAACEAAAABB8AAAAAAAAAAAD///9/xgEAAIgAAAAEHwCUAAAAAAAAAPv//396AQAAkAAAAAQfAAAAAAAAAAAA////f4wCAACUAAAABB8A3wAAAAAAAAD7//9/egEAAJkAAAAEHwAAAAAAAAAAAPv//395AQAApQAAAAQfAAAAAAAAAAAA////f8YBAACpAAAABB8AFwEAAAAAAAD7//9/egEAAK8AAAAEHwBAAAAAAAAAAPv//395AQAAtwAAAAQfAAAAAAAAAAAA////f8YBAAC7AAAABB8AOgEAAAAAAAD7//9/egEAAMAAAAAEHwDwAAAAAAAAAPv//395AQAAzAAAAAQfAAAAAAAAAAAA////f8YBAADQAAAABB8A6gEAAAAAAAD7//9/egEAANcAAAAEHwAAAAAAAAAAAP///38kAAAA2wAAAAQfAMABAAAAAAAA+///f3kBAADoAAAABB8AOgAAAAAAAAD///9/JAAAAOwAAAAEHwANAgAAAAAAAPv//396AQAA8QAAAAQfAEIAAAAAAAAA////fyQAAAD1AAAABB8AVgIAAAAAAAD7//9/egEAAPoAAAAEHwAAAAAAAAAAAP///38jAAAA/gAAAAQfAAACAAAAAAAA+///f3kBAAALAQAABB8ADQAAAAAAAAD///9/IwAAAA8BAAAEHwDeAgAAAAAAAPv//396AQAAFgEAAAQfAAAAAAAAAAAA////fyQAAAAaAQAABB8AMAIAAAAAAAD7//9/eQEAACcBAAAEHwA6AAAAAAAAAP///38kAAAAKwEAAAQfAAEDAAAAAAAA+///f3oBAAAwAQAABB8AQgAAAAAAAAD///9/JAAAADQBAAAEHwBKAwAAAAAAAPv//396AQAAOQEAAAQfAAAAAAAAAAAA////fyMAAAA9AQAABB8AgAIAAAAAAAD7//9/eQEAAEoBAAAEHwANAAAAAAAAAP///38jAAAATgEAAAQfAG0DAAAAAAAA+///f3oBAABVAQAABB8AAAAAAAAAAAD///9/JAAAAFkBAAAEHwCwAgAAAAAAAPv//395AQAAZgEAAAQfADoAAAAAAAAA////fyQAAABqAQAABB8AkAMAAAAAAAD7//9/egEAAG8BAAAEHwBCAAAAAAAAAP///38kAAAAcwEAAAQfANkDAAAAAAAA+///f3oBAAB4AQAABB8AAAAAAAAAAAD///9/IwAAAHwBAAAIAQAjAgAAAAAAAPv//381AAAAhAEAAAgBAEYCAAAAAAAA+///fzUAAACVAQAABB8ADQAAAAAAAAD///9/IwAAAJkBAAAEHwBhBAAAAAAAAPv//396AQAAoAEAAAQfAAAAAAAAAAAA////fyQAAACkAQAABB8A4AIAAAAAAAD7//9/eQEAALEBAAAEHwA6AAAAAAAAAP///38kAAAAtQEAAAQfAIQEAAAAAAAA+///f3oBAAC6AQAABB8AQgAAAAAAAAD///9/JAAAAL4BAAAEHwDNBAAAAAAAAPv//396AQAAwwEAAAQfAAAAAAAAAAAA////fyMAAADHAQAACAEA6AIAAAAAAAD7//9/NQAAAM8BAAAIAQAFAwAAAAAAAPv//381AAAA4AEAAAQfAA0AAAAAAAAA////fyMAAADkAQAABB8AVQUAAAAAAAD7//9/egEAAOsBAAAEHwAAAAAAAAAAAP///38kAAAA7wEAAAQfABADAAAAAAAA+///f3kBAAD8AQAABB8AOgAAAAAAAAD///9/JAAAAAACAAAEHwB4BQAAAAAAAPv//396AQAABQIAAAQfAEIAAAAAAAAA////fyQAAAAJAgAABB8AwQUAAAAAAAD7//9/egEAAA4CAAAEHwAAAAAAAAAAAP///38jAAAAEgIAAAgBADkEAAAAAAAA+///fzUAAAAaAgAACAEAWAQAAAAAAAD7//9/NQAAACsCAAAEHwANAAAAAAAAAP///38jAAAALwIAAAQfAOQFAAAAAAAA+///f3oBAAA2AgAABB8AAAAAAAAAAAD///9/JQAAADoCAAAEHwBAAwAAAAAAAPv//395AQAARwIAAAQfAB4AAAAAAAAA////fyUAAABLAgAABB8ABwYAAAAAAAD7//9/egEAAAAAAAAIVwAAAAAAAAAAAPv//382AAAACAAAAAhXACQAAAAAAAAA+///fzYAAAAbAAAACFcAJAAAAAAAAAD7//9/NgAAACMAAAAIVwApAAAAAAAAAPv//382AAAAOAAAAAhXACkAAAAAAAAA+///fzYAAABAAAAACFcAngAAAAAAAAD7//9/NgAAAAMAAAAIAQAAAAAAAAAAAPv//382AAAAAAAAAAAWAAAAAAAAAAAACgAAAH4FAAAoAAAACAEAAAAAAAAAAAD7//9/NgAAADAAAAAIAQCeAAAAAAAAAPv//382AAAASQAAAAQfAAAAAAAAAAAA////f5ACAABNAAAABB8AAAAAAAAAAAD7//9/fgEAAFgAAAAEHwAAAAAAAAAAAP///3+RAgAAAAAAAAhXABIAAAAAAAAA+///fzcAAAAIAAAACFcAHAAAAAAAAAD7//9/NwAAABAAAAAIVwAoAAAAAAAAAPv//383AAAAGAAAAAhXAKMAAAAAAAAA+///fzcAAAAgAAAACFcAqQAAAAAAAAD7//9/NwAAACgAAAAIVwDGAAAAAAAAAPv//383AAAAMAAAAAhXANUAAAAAAAAA+///fzcAAAA4AAAACFcABgEAAAAAAAD7//9/NwAAAAAAAAAIVwAAAAAAAAAAAPv//383AAAACAAAAAhXAEIAAAAAAAAA+///fzcAAAAYAAAACFcAQgAAAAAAAAD7//9/NwAAACAAAAAIVwAuAQAAAAAAAPv//383AAAAQQAAAAhXACAAAAAAAAAA+///fzcAAABJAAAACFcAJAAAAAAAAAD7//9/NwAAAFoAAAAIVwAkAAAAAAAAAPv//383AAAAYgAAAAhXACgAAAAAAAAA+///fzcAAAB0AAAACFcAKAAAAAAAAAD7//9/NwAAAHwAAAAIVwBSAAAAAAAAAPv//383AAAAjwAAAAhXAMsAAAAAAAAA+///fzcAAACXAAAACFcA5QAAAAAAAAD7//9/NwAAAKsAAAAIVwDlAAAAAAAAAPv//383AAAAswAAAAhXAPkAAAAAAAAA+///fzcAAADJAAAACFcA+QAAAAAAAAD7//9/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AADSAQAABB8AAAAAAAAAAAD///9/4QEAANYBAAAEHwBxBwAAAAAAAPv//3+tAQAA3QEAAAQfAAAAAAAAAAAA////fy4AAADhAQAACAEAjQAAAAAAAAD7//9/QQAAAOkBAAAIAQCnAAAAAAAAAPv//39BAAAA+gEAAAQfABMAAAAAAAAA////fy4AAAD+AQAABB8AvgcAAAAAAAD7//9/rQEAAAMCAAAEHwAbAAAAAAAAAP///38uAAAACgIAAAQfAAAAAAAAAAAA////fy8AAAAOAgAACAEAuQEAAAAAAAD7//9/QQAAABYCAAAIAQAUAgAAAAAAAPv//39BAAAAJwIAAAQfACQAAAAAAAAA////fy8AAAArAgAABB8A/QcAAAAAAAD7//9/rQEAADACAAAEHwAsAAAAAAAAAP///38vAAAANAIAAAQfAHIIAAAAAAAA+///f60BAAA5AgAABB8AOQAAAAAAAAD///9/LwAAAD0CAAAEHwC/CAAAAAAAAPv//3+tAQAAQwIAAAQfAAAAAAAAAAAA////fxkAAABHAgAABB8A0AEAAAAAAAD7//9/rAEAAFQCAAAEHwANAAAAAAAAAP///38ZAAAAWAIAAAQfAOIIAAAAAAAA+///f60BAABeAgAABB8AAAAAAAAAAAD///9/GQAAAGICAAAIAQA2AwAAAAAAAPv//39BAAAAagIAAAgBAF4DAAAAAAAA+///f0EAAAB7AgAABB8ADQAAAAAAAAD///9/GQAAAH8CAAAEHwAFCQAAAAAAAPv//3+tAQAAhQIAAAQfAAAAAAAAAAAA////fyMAAACJAgAACAEA2wMAAAAAAAD7//9/QQAAAJECAAAIAQD4AwAAAAAAAPv//39BAAAAogIAAAQfAA0AAAAAAAAA////fyMAAACmAgAABB8AKAkAAAAAAAD7//9/rQEAAKwCAAAEHwAAAAAAAAAAAP///38vAAAAsAIAAAQfAAACAAAAAAAA+///f6wBAAC9AgAABB8AJAAAAAAAAAD///9/LwAAAMECAAAEHwBLCQAAAAAAAPv//3+tAQAAxgIAAAQfACwAAAAAAAAA////fy8AAADKAgAABB8AwAkAAAAAAAD7//9/rQEAAM8CAAAEHwA5AAAAAAAAAP///38vAAAA0wIAAAQfAA0KAAAAAAAA+///f60BAADZ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APv//3/GAQAAAQEAAAQfAFAAAAAAAAAA+///f8UBAAALAQAABB8AAAAAAAAAAAD///9//AEAAA8BAAAEHwAMBAAAAAAAAPv//3/GAQAAFgEAAAQfAJAAAAAAAAAA+///f8UBAAAgAQAABB8AAAAAAAAAAAD///9//AEAACQBAAAEHwBiBAAAAAAAAPv//3/GAQAAKgEAAAgBAJ0EAAAAAAAA+///f0cAAAAyAQAACAEAHQUAAAAAAAD7//9/RwAAAEABAAAEHwAAAAAAAAAAAP///3/8AQAARAEAAAQfAM8EAAAAAAAA+///f8YBAABKAQAABB8AwAAAAAAAAAD7//9/xQEAAFQBAAAEHwAAAAAAAAAAAP///3/8AQAAWAEAAAQfADwFAAAAAAAA+///f8YBAABeAQAABB8A8AAAAAAAAAD7//9/xQEAAGsBAAAEHwAAAAAAAAAAAP///3/7AQAAbwEAAAQfAJIFAAAAAAAA+///f8YBAAB5AQAABB8AAAAAAAAAAAD///9//AEAAH0BAAAEHwAjBgAAAAAAAPv//3/GAQAAgwEAAAQfAAAAAAAAAAAA////fzUAAACHAQAABB8AIAEAAAAAAAD7//9/xQEAAJQBAAAEHwAYAAAAAAAAAP///381AAAAmAEAAAQfAHkGAAAAAAAA+///f8YBAACdAQAABB8AIAAAAAAAAAD///9/NQAAAKMBAAAEHwAAAAAAAAAAAP///385AAAApwEAAAgBAHwAAAAAAAAA+///f0cAAACvAQAACAEAIgEAAAAAAAD7//9/RwAAAMABAAAEHwAhAAAAAAAAAP///385AAAAxAEAAAQfALEGAAAAAAAA+///f8YBAADJAQAABB8AKQAAAAAAAAD///9/OQAAANEBAAAEHwAAAAAAAAAAAP///382AAAA1QEAAAQfAFABAAAAAAAA+///f8UBAADiAQAABB8AFQAAAAAAAAD///9/NgAAAOYBAAAEHwDpBgAAAAAAAPv//3/GAQAA6wEAAAQfAAAAAAAAAAAA////fzoAAADvAQAACAEAdQMAAAAAAAD7//9/RwAAAPcBAAAIAQD/AwAAAAAAAPv//39HAAAACAIAAAQfABkAAAAAAAAA////fzoAAAAMAgAABB8AQgcAAAAAAAD7//9/xgEAABECAAAEHwAhAAAAAAAAAP///386AAAAGQIAAAQfAAAAAAAAAAAA////fzcAAAAdAgAABB8AgAEAAAAAAAD7//9/xQEAACoCAAAEHwAVAAAAAAAAAP///383AAAALgIAAAQfAJsHAAAAAAAA+///f8YBAAA0AgAABB8AAAAAAAAAAAD///9/OAAAADgCAAAEHwCwAQAAAAAAAPv//3/FAQAARQIAAAQfABQAAAAAAAAA////fzgAAABJAgAABB8A6AcAAAAAAAD7//9/xgEAAE8CAAAEHwAAAAAAAAAAAP///384AAAAUwIAAAgBAPcFAAAAAAAA+///f0cAAABbAgAACAEACgYAAAAAAAD7//9/RwAAAGwCAAAEHwAUAAAAAAAAAP///384AAAAcAIAAAQfADUIAAAAAAAA+///f8YBAAB2AgAABB8AAAAAAAAAAAD///9/NQAAAHoCAAAIAQAMCAAAAAAAAPv//39HAAAAggIAAAgBAK8IAAAAAAAA+///f0cAAACTAgAABB8AGAAAAAAAAAD///9/NQAAAJcCAAAEHwCCCAAAAAAAAPv//3/GAQAAnAIAAAQfAAAAAAAAAAAA////fzkAAACgAgAACAEADQgAAAAAAAD7//9/RwAAAKgCAAAIAQCvCAAAAAAAAPv//39HAAAAuQIAAAQfACEAAAAAAAAA////fzkAAAC9AgAABB8AuggAAAAAAAD7//9/xgEAAAMAAAAIAQAAAAAAAAAAAPv//39IAAAAQwAAAAgBAAAAAAAAAAAA+///f0gAAABLAAAACAEAQwAAAAAAAAD7//9/SAAAAAAAAAAIVwATAAAAAAAAAPv//39JAAAACAAAAAhXABgAAAAAAAAA+///f0kAAAAQAAAACFcAHQAAAAAAAAD7//9/SQAAABgAAAAIVwAlAAAAAAAAAPv//39JAAAAAAAAAAhXABIAAAAAAAAA+///f0kAAAAIAAAACFcAJQAAAAAAAAD7//9/SQAAABMAAAAIVwAlAAAAAAAAAPv//39JAAAAGwAAAAhXACoAAAAAAAAA+///f0kAAAAnAAAACFcAKgAAAAAAAAD7//9/SQAAAC8AAAAIVwAtAAAAAAAAAPv//39JAAAASgAAAAhXABIAAAAAAAAA+///f0kAAABSAAAACFcAJQAAAAAAAAD7//9/SQAAAF0AAAAIVwAlAAAAAAAAAPv//39J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+///f0wAAABDAAAABB8AAAAAAAAAAAD///9/uwEAAFUAAAAEHwAAAAAAAAAAAP///3+7AQAAYgAAAAQfAAAAAAAAAAAA////f7sBAABmAAAABB8AAAAAAAAAAAD7//9/3QEAAHUAAAAEHwAAAAAAAAAAAP///3/HAQAAhQAAAAQfAAAAAAAAAAAA////f8YBAACLAAAABB8AAAAAAAAAAAD7//9/3AEAAJYAAAAEHwAAAAAAAAAAAP///3/8AQAAmgAAAAQfAF0AAAAAAAAA+///f90BAACgAAAABB8AAAAAAAAAAAD///9/MwAAAKQAAAAIAQASAAAAAAAAAPv//39MAAAArAAAAAgBACoAAAAAAAAA+///f0wAAAC9AAAABB8AFAAAAAAAAAD///9/MwAAAMEAAAAEHwCAAAAAAAAAAPv//3/dAQAAxwAAAAQfAAAAAAAAAAAA////fzQAAADLAAAACAEAjwAAAAAAAAD7//9/TAAAANMAAAAIAQCvAAAAAAAAAPv//39MAAAA5AAAAAQfABgAAAAAAAAA////fzQAAAAAAAAACFcAAAAAAAAAAAD7//9/TQAAAAgAAAAIVwAkAAAAAAAAAPv//39NAAAAGAAAAAhXACQAAAAAAAAA+///f00AAAAgAAAACFcAKQAAAAAAAAD7//9/TQAAADEAAAAIVwApAAAAAAAAAPv//39NAAAAOQAAAAhXAPAAAAAAAAAA+///f00AAABaAAAACFcAAAAAAAAAAAD7//9/TQAAAGIAAAAIVwApAAAAAAAAAPv//39NAAAAbQAAAAhXACkAAAAAAAAA+///f00AAAB1AAAACFcA8AAAAAAAAAD7//9/TQAAAJEAAAAIVwCaAAAAAAAAAPv//39NAAAAmQAAAAhXAJoAAAAAAAAA+///f00AAACoAAAACFcAmgAAAAAAAAD7//9/TQAAALAAAAAIVwCgAAAAAAAAAPv//39NAAAAwAAAAAhXAKAAAAAAAAAA+///f00AAADIAAAACFcAogAAAAAAAAD7//9/TQAAAOcAAAAIVwApAAAAAAAAAPv//39NAAAA7wAAAAhXACkAAAAAAAAA+///f00AAAD+AAAACFcAKQAAAAAAAAD7//9/TQAAAAYBAAAIVwA1AAAAAAAAAPv//39NAAAAFgEAAAhXADUAAAAAAAAA+///f00AAAAeAQAACFcANwAAAAAAAAD7//9/TQAAAC0BAAAIVwBjAAAAAAAAAPv//39NAAAANQEAAAhXAGgAAAAAAAAA+///f00AAABUAQAACFcAbwAAAAAAAAD7//9/TQAAAFwBAAAIVwB2AAAAAAAAAPv//39NAAAAawEAAAhXAHYAAAAAAAAA+///f00AAABzAQAACFcAlQAAAAAAAAD7//9/TQAAAIMBAAAIVwCVAAAAAAAAAPv//39NAAAAiwEAAAhXAJoAAAAAAAAA+///f00AAACqAQAACFcAaAAAAAAAAAD7//9/TQAAALIBAAAIVwBoAAAAAAAAAPv//39NAAAAwQEAAAhXAGgAAAAAAAAA+///f00AAADJAQAACFcAiwAAAAAAAAD7//9/TQAAANkBAAAIVwCLAAAAAAAAAPv//39NAAAA4QEAAAhXAI4AAAAAAAAA+///f00AAAADAAAACAEAAAAAAAAAAAD7//9/TQAAAC8AAAAIAQAAAAAAAAAAAPv//39NAAAANwAAAAgBAPAAAAAAAAAA+///f00AAABOAAAABB8AAAAAAAAAAAD///9/lgIAAFIAAAAEHwAAAAAAAAAAAPv//3/hAQAAXAAAAAQfAAAAAAAAAAAA////f5cCAABgAAAABB8AWgAAAAAAAAD7//9/4QEAAGwAAAAEHwAAAAAAAAAAAP///3+7AQAAcAAAAAQfAJEAAAAAAAAA+///f+EBAAB1AAAACAEAEgAAAAAAAAD7//9/TQAAAH0AAAAIAQBXAAAAAAAAAPv//39NAAAAjAAAAAQfAAAAAAAAAAAA////f/wBAACQAAAABB8A5wAAAAAAAAD7//9/4QEAAJYAAAAEHwAAAAAAAAAAAP///38nAAAAmgAAAAgBAHYAAAAAAAAA+///f00AAACiAAAACAEAmgAAAAAAAAD7//9/TQAAALMAAAAEHwAYAAAAAAAAAP///38nAAAAtwAAAAQfAFQBAAAAAAAA+///f+EBAAC8AAAABB8AIAAAAAAAAAD///9/JwAAAMIAAAAEHwAqAAAAAAAAAP///38nAAAAxgAAAAQfAKoBAAAAAAAA+///f+EBAAAAAAAACFcAAAAAAAAAAAD///9/AAAAAAgAAAAIVwBpAAAAAAAAAP///38AAAAAIwAAAAhXAAAAAAAAAAAA////fwAAAAArAAAACFcAbAAAAAAAAAD///9/AAAAADsAAAAIVwBsAAAAAAAAAP///38AAAAAQwAAAAhXAHEAAAAAAAAA////fwAAAABiAAAACFcAPQAAAAAAAAD///9/AAAAAGoAAAAIVwDiAAAAAAAAAP///38AAAAAhwAAAAhXAAAAAAAAAAAA////fwAAAACPAAAACFcAbAAAAAAAAAD///9/AAAAAJ8AAAAIVwBsAAAAAAAAAP///38AAAAApwAAAAhXAHEAAAAAAAAA////fwAAAAADAAAACAEAAAAAAAAAAAD///9/AAAAAAAAAAAAFgAAAAAAAAAAAP///39oAQAAAAAAAAAWAAAAAAAAAAAA/P//f/cAAAApAAAACAEAAAAAAAAAAAD///9/AAAAADEAAAAIAQAzAQAAAAAAAP///38AAAAAQgAAAAQfAAAAAAAAAAAA////fxYDAABGAAAABB8AAAAAAAAAAAD7//9/5QEAAFcAAAAEHwAAAAAAAAAAAP///38XAwAAWwAAAAQfACMAAAAAAAAA+///f+UBAABnAAAABB8AAAAAAAAAAAD///9/uwEAAG0AAAAEHwAAAAAAAAAAAP///38mAAAAcQAAAAgBAFQAAAAAAAAA////fwAAAAB5AAAACAEA2QAAAAAAAAD///9/AAAAAIoAAAAEHwAqAAAAAAAAAP///38mAAAAjgAAAAQfAGIAAAAAAAAA+///f+UBAACTAAAABB8AMgAAAAAAAAD///9/JgAAAJcAAAAEHwCHAAAAAAAAAPv//3/lAQAAAAAAAAhXAAAAAAAAAAAA////fwEAAAAIAAAACFcAOwAAAAAAAAD///9/AQAAACMAAAAIVwAAAAAAAAAAAP///38BAAAAKwAAAAhXAFUAAAAAAAAA////fwEAAAADAAAACAEAAAAAAAAAAAD///9/AQAAAAAAAAAAFgAAAAAAAAAAAPv//39iAAAAAAAAAAAWAAAAAAAAAAAA/P//f/cAAAAoAAAACAEAAAAAAAAAAAD///9/AQAAADAAAAAIAQCWAAAAAAAAAP///38BAAAAQQAAAAQfAAAAAAAAAAAA////fxsDAABFAAAABB8AAAAAAAAAAAD7//9/6QEAAFYAAAAEHwAAAAAAAAAAAP///3/GAQAAWgAAAAQfACMAAAAAAAAA+///f+kBAABmAAAABB8AAAAAAAAAAAD///9/uwEAAAAAAAAIVwAAAAAAAAAAAP///38CAAAACAAAAAhXAEkAAAAAAAAA////fwIAAAAjAAAACFcAAAAAAAAAAAD///9/AgAAACsAAAAIVwBMAAAAAAAAAP///38CAAAAAwAAAAgBAAAAAAAAAAAA////fwIAAAAAAAAAABYAAAAAAAAAAAD8//9/9QAAACsAAAAIAQAAAAAAAAAAAP///38CAAAAMwAAAAgBAHYAAAAAAAAA////fwIAAABIAAAABB8AAAAAAAAAAAD///9/FgMAAEwAAAAEHwAAAAAAAAAAAPv//3/tAQAAVQAAAAQfAAAAAAAAAAAA////fxYDAABZAAAABB8AIwAAAAAAAAD7//9/7QEAAGIAAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAhXAAAAAAAAAAAA////fwMAAAAIAAAACFcAOgAAAAAAAAD///9/AwAAACMAAAAIVwAAAAAAAAAAAP///38DAAAAKwAAAAhXADYAAAAAAAAA////fwMAAAADAAAACAEAAAAAAAAAAAD///9/AwAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAANgAAAAgBAAAAAAAAAAAA////fwMAAAA+AAAACAEAZQAAAAAAAAD///9/AwAAAFMAAAAEHwAAAAAAAAAAAP///38iAwAAVwAAAAQfAAAAAAAAAAAA+///f/EBAABgAAAABB8AAAAAAAAAAAD///9/IgMAAGQAAAAEHwAjAAAAAAAAAPv//3/xAQAAbQAAAAQfAAAAAAAAAAAA////f8EBAAAAAAAACFcAAAAAAAAAAAD///9/BAAAAAgAAAAIVwApAAAAAAAAAP///38EAAAAIwAAAAhXAAAAAAAAAAAA////fwQAAAArAAAACFcALAAAAAAAAAD///9/BAAAAAMAAAAIAQAAAAAAAAAAAP///38EAAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAAAqAAAACAEAAAAAAAAAAAD///9/BAAAADIAAAAIAQBWAAAAAAAAAP///38EAAAARwAAAAQfAAAAAAAAAAAA////fyYDAABLAAAABB8AAAAAAAAAAAD7//9/9QEAAFQAAAAEHwAAAAAAAAAAAP///38mAwAAWAAAAAQfACMAAAAAAAAA+///f/UBAABhAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38FAAAACAAAAAhXAAkAAAAAAAAA////fwUAAAAjAAAACFcAAAAAAAAAAAD///9/BQAAACsAAAAIVwAKAAAAAAAAAP///38FAAAAAwAAAAgBAAAAAAAAAAAA////fwUAAAAAAAAAABYAAAAAAAAAAAD8//9/9QAAACYAAAAIAQAAAAAAAAAAAP///38FAAAALgAAAAgBAAoAAAAAAAAA////fwUAAABDAAAABB8AAAAAAAAAAAD///9/KgMAAEcAAAAEHwAAAAAAAAAAAPv//3/5AQAAUAAAAAQfAAAAAAAAAAAA////fyoDAABUAAAABB8AIwAAAAAAAAD7//9/+QEAAF0AAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAhXAAAAAAAAAAAA////fwYAAAAIAAAACFcAKwAAAAAAAAD///9/BgAAABMAAAAIVwArAAAAAAAAAP///38GAAAAGwAAAAhXADcAAAAAAAAA////fwYAAAAmAAAACFcAQAAAAAAAAAD///9/BgAAAC4AAAAIVwBEAAAAAAAAAP///38GAAAAOQAAAAhXAEQAAAAAAAAA////fwYAAABBAAAACFcAVwAAAAAAAAD///9/BgAAAFwAAAAIVwAAAAAAAAAAAP///38GAAAAZAAAAAhXAC4AAAAAAAAA////fwYAAABvAAAACFcALgAAAAAAAAD///9/BgAAAHcAAAAIVwA3AAAAAAAAAP///38GAAAAgwAAAAhXAEkAAAAAAAAA////fwYAAACLAAAACFcATQAAAAAAAAD///9/BgAAAJcAAAAIVwBNAAAAAAAAAP///38GAAAAnwAAAAhXAFcAAAAAAAAA////fwYAAAADAAAACAEAAAAAAAAAAAD///9/BgAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAMAAAAAgBAAAAAAAAAAAA////fwYAAAA4AAAACAEAeAAAAAAAAAD///9/BgAAAE0AAAAEHwAAAAAAAAAAAP///38uAwAAUQAAAAQfAAAAAAAAAAAA+///f/0BAABaAAAABB8AAAAAAAAAAAD///9/LgMAAF4AAAAEHwBcAAAAAAAAAPv//3/9AQAAZwAAAAQfAAAAAAAAAAAA////f8EBAAAAAAAACFcAAAAAAAAAAAD///9/BwAAAAgAAAAIVwAlAAAAAAAAAP///38HAAAAEwAAAAhXACUAAAAAAAAA////fwcAAAAbAAAACFcAqAAAAAAAAAD///9/BwAAADYAAAAIVwAAAAAAAAAAAP///38HAAAAPgAAAAhXACUAAAAAAAAA////fwcAAABJAAAACFcAJQAAAAAAAAD///9/BwAAAFEAAAAIVwCoAAAAAAAAAP///38HAAAAAwAAAAgBAAAAAAAAAAAA////fwcAAAAAAAAAABYAAAAAAAAAAAD8//9/9QAAADUAAAAIAQAAAAAAAAAAAP///38HAAAAPQAAAAgBAKgAAAAAAAAA////fwcAAABSAAAABB8AAAAAAAAAAAD///9/MgMAAFYAAAAEHwAAAAAAAAAAAPv//38BAgAAXwAAAAQfAAAAAAAAAAAA////fzIDAABjAAAABB8ANgAAAAAAAAD7//9/AQIAAGwAAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAhXAAAAAAAAAAAA////fwgAAAAIAAAACFcALwAAAAAAAAD///9/CAAAABMAAAAIVwAvAAAAAAAAAP///38IAAAAGwAAAAhXAIsAAAAAAAAA////fwgAAAA2AAAACFcAAAAAAAAAAAD///9/CAAAAD4AAAAIVwAyAAAAAAAAAP///38IAAAASQAAAAhXADIAAAAAAAAA////fwgAAABRAAAACFcAiwAAAAAAAAD///9/CAAAAAMAAAAIAQAAAAAAAAAAAP///38IAAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAAAwAAAACAEAAAAAAAAAAAD///9/CAAAADgAAAAIAQC0AAAAAAAAAP///38IAAAATQAAAAQfAAAAAAAAAAAA////fzYDAABRAAAABB8AAAAAAAAAAAD7//9/BQIAAFoAAAAEHwAAAAAAAAAAAP///382AwAAXgAAAAQfADYAAAAAAAAA+///fwUCAABnAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38JAAAACAAAAAhXAGUAAAAAAAAA////fwkAAAATAAAACFcAZQAAAAAAAAD///9/CQAAABsAAAAIVwC5AAAAAAAAAP///38JAAAANgAAAAhXAAAAAAAAAAAA////fwkAAAA+AAAACFcAaAAAAAAAAAD///9/CQAAAEkAAAAIVwBoAAAAAAAAAP///38JAAAAUQAAAAhXALkAAAAAAAAA////fwkAAAADAAAACAEAAAAAAAAAAAD///9/CQAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAMgAAAAgBAAAAAAAAAAAA////fwkAAAA6AAAACAEA3wAAAAAAAAD///9/CQAAAE8AAAAEHwAAAAAAAAAAAP///386AwAAUwAAAAQfAAAAAAAAAAAA+///fwkCAABcAAAABB8AAAAAAAAAAAD///9/OgMAAGAAAAAEHwA2AAAAAAAAAPv//38JAgAAaQAAAAQfAAAAAAAAAAAA////f8EBAAAAAAAACFcAAAAAAAAAAAD///9/CgAAAAgAAAAIVwAcAAAAAAAAAP///38KAAAAIwAAAAhXAAAAAAAAAAAA////fwoAAAArAAAACFcAIQAAAAAAAAD///9/CgAAAAMAAAAIAQAAAAAAAAAAAP///38KAAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAABOAAAACAEAAAAAAAAAAAD///9/CgAAAFYAAAAIAQAhAAAAAAAAAP///38KAAAAawAAAAQfAAAAAAAAAAAA////fz4DAABvAAAABB8AAAAAAAAAAAD7//9/DQIAAHgAAAAEHwAAAAAAAAAAAP///38+AwAAfAAAAAQfACMAAAAAAAAA+///fw0CAACFAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38LAAAACAAAAAhXABwAAAAAAAAA////fwsAAAATAAAACFcAHAAAAAAAAAD///9/CwAAABsAAAAIVwCfAAAAAAAAAP///38LAAAANgAAAAhXAAAAAAAAAAAA////fwsAAAA+AAAACFcAHAAAAAAAAAD///9/CwAAAEkAAAAIVwAcAAAAAAAAAP///38LAAAAUQAAAAhXAJ8AAAAAAAAA////fwsAAAADAAAACAEAAAAAAAAAAAD///9/CwAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAAAAAAAAWAAAAAAAAAAAA////f6YBAAAaAAAACAEAAAAAAAAAAAD///9/CwAAACIAAAAIAQCfAAAAAAAAAP///38LAAAANwAAAAQfAAAAAAAAAAAA////f0IDAAA7AAAABB8AAAAAAAAAAAD7//9/EQIAAEQAAAAEHwAAAAAAAAAAAP///39CAwAASAAAAAQfADYAAAAAAAAA+///fxECAABRAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38MAAAACAAAAAhXABwAAAAAAAAA////fwwAAAATAAAACFcAHAAAAAAAAAD///9/DAAAABsAAAAIVwCfAAAAAAAAAP///38MAAAANgAAAAhXAAAAAAAAAAAA////fwwAAAA+AAAACFcAHAAAAAAAAAD///9/DAAAAEkAAAAIVwAcAAAAAAAAAP///38MAAAAUQAAAAhXAJ8AAAAAAAAA////fwwAAAADAAAACAEAAAAAAAAAAAD///9/DAAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAAAAAAAAWAAAAAAAAAAAA////f6YBAAAaAAAACAEAAAAAAAAAAAD///9/DAAAACIAAAAIAQCfAAAAAAAAAP///38MAAAANwAAAAQfAAAAAAAAAAAA////f0YDAAA7AAAABB8AAAAAAAAAAAD7//9/FQIAAEQAAAAEHwAAAAAAAAAAAP///39GAwAASAAAAAQfADYAAAAAAAAA+///fxUCAABRAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38NAAAACAAAAAhXAD4AAAAAAAAA////fw0AAAATAAAACFcARgAAAAAAAAD///9/DQAAABsAAAAIVwCrAAAAAAAAAP///38NAAAANgAAAAhXAAAAAAAAAAAA////fw0AAAA+AAAACFcAPgAAAAAAAAD///9/DQAAAEkAAAAIVwBGAAAAAAAAAP///38NAAAAUQAAAAhXAKsAAAAAAAAA////fw0AAAADAAAACAEAAAAAAAAAAAD///9/DQAAAAAAAAAAFgAAAAAAAAAAAPz//3/1AAAAAAAAAAAWAAAAAAAAAAAA////f6YBAAAUAAAACAEAAAAAAAAAAAD///9/DQAAABwAAAAIAQCrAAAAAAAAAP///38NAAAAMQAAAAQfAAAAAAAAAAAA////f0oDAAA1AAAABB8AAAAAAAAAAAD7//9/GQIAAD4AAAAEHwAAAAAAAAAAAP///39KAwAAQgAAAAQfADYAAAAAAAAA+///fxkCAABLAAAABB8AAAAAAAAAAAD///9/wQEAAAAAAAAIVwAAAAAAAAAAAP///38OAAAACAAAAAhXADgAAAAAAAAA////fw4AAAAjAAAACFcAAAAAAAAAAAD///9/DgAAACsAAAAIVwA/AAAAAAAAAP///38OAAAAAwAAAAgBAAAAAAAAAAAA////fw4AAAAAAAAAABYAAAAAAAAAAAD8//9/9QAAABUAAAAIAQAAAAAAAAAAAP///38OAAAAHQAAAAgBAD8AAAAAAAAA////fw4AAAAyAAAABB8AAAAAAAAAAAD///9/TgMAADYAAAAEHwAAAAAAAAAAAPv//38dAgAAPwAAAAQfAAAAAAAAAAAA////f04DAABDAAAABB8AIwAAAAAAAAD7//9/HQIAAEwAAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAhXAAAAAAAAAAAA////fw8AAAAIAAAACFcAHAAAAAAAAAD///9/DwAAABMAAAAIVwAcAAAAAAAAAP///38PAAAAGwAAAAhXAJ8AAAAAAAAA////fw8AAAA2AAAACFcAAAAAAAAAAAD///9/DwAAAD4AAAAIVwAcAAAAAAAAAP///38PAAAASQAAAAhXABwAAAAAAAAA////fw8AAABRAAAACFcAnwAAAAAAAAD///9/DwAAAAMAAAAIAQAAAAAAAAAAAP///38PAAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAAAAAAAAABYAAAAAAAAAAAD///9/pgEAABoAAAAIAQAAAAAAAAAAAP///38PAAAAIgAAAAgBAJ8AAAAAAAAA////fw8AAAA3AAAABB8AAAAAAAAAAAD///9/UgMAADsAAAAEHwAAAAAAAAAAAPv//38hAgAARAAAAAQfAAAAAAAAAAAA////f1IDAABIAAAABB8ANgAAAAAAAAD7//9/IQIAAFEAAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAhXAAAAAAAAAAAA////fxAAAAAIAAAACFcAegAAAAAAAAD///9/EAAAABMAAAAIVwB6AAAAAAAAAP///38QAAAAGwAAAAhXALcAAAAAAAAA////fxAAAAAmAAAACFcAuwAAAAAAAAD///9/EAAAAC4AAAAIVwDAAAAAAAAAAP///38QAAAAOQAAAAhXAMAAAAAAAAAA////fxAAAABBAAAACFcAwAAAAAAAAAD///9/EAAAAFwAAAAIVwAAAAAAAAAAAP///38QAAAAZAAAAAhXAHoAAAAAAAAA////fxAAAABvAAAACFcAegAAAAAAAAD///9/EAAAAHcAAAAIVwC3AAAAAAAAAP///38QAAAAgwAAAAhXALsAAAAAAAAA////fxAAAACLAAAACFcAwAAAAAAAAAD///9/EAAAAAMAAAAIAQAAAAAAAAAAAP///38QAAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAAAAAAAAABYAAAAAAAAAAAD///9/pgEAABQAAAAIAQAAAAAAAAAAAP///38QAAAAHAAAAAgBAOUAAAAAAAAA////fxAAAAAxAAAABB8AAAAAAAAAAAD///9/VgMAADUAAAAEHwAAAAAAAAAAAPv//38lAgAAPgAAAAQfAAAAAAAAAAAA////f1YDAABCAAAABB8AXAAAAAAAAAD7//9/JQIAAEsAAAAEHwAAAAAAAAAAAP///3/BAQAAAAAAAAgBAAAAAAAAAAAABAAAADwAAAAIAAAACAEAAAAAAAAAAAAQAAAA6wAAABgAAAAIAYAAAAAAAAAAABAAAABNAAAAAAAAAAgBAAAAAAAAAAAABAAAADwAAAAIAAAACAEAAAAAAAAAAAARAAAANQAAABgAAAAIAYAAAAAAAAAAABEAAAAfAAAAAAAAAAgBAAAAAAAAAAAABAAAAHAAAAAIAAAACAEAAAAAAAAAAAAJAAAAiAAAABgAAAAIAYAAAAAAAAAAAAkAAAARAAAAIAAAAAgBgAAAAAAAAAAACQAAABcAAAAAAAAACAEAAAAAAAAAAAAYAAAANQAAAAgAAAAIAQAAAAAAAAAAAAsAAAAmAAAAGAAAAAgBgAAAAAAAAAAACwAAABEAAAAAAAAACAEAAAAAAAAAAAAKAAAAfgUAAAgAAAAIAQAAAAAAAAAAAAoAAAD2BQAAGAAAAAgBgAAAAAAAAAAACgAAANwDAAAAAAAACAEAAAAAAAAAAAAEAAAAPAAAAAgAAAAIAQAAAAAAAAAAAAkAAACHAAAAGAAAAAgBgAAAAAAAAAAACQAAAAkAAAAAAAAACAEAAAAAAAAAAAAEAAAAPAAAAAgAAAAIAQAAAAAAAAAAAPv//39PAAAAGAAAAAgBgAAAAAAAAAAA+///fxEAAAAAAAAACAEAAAAAAAAAAAAKAAAAcAYAAAgAAAAIAQAAAAAAAAAAAAoAAAB0BgAAGAAAAAgBgAAAAAAAAAAA////f1oDAAAAAAAACAEAAAAAAAAAAAAKAAAAfgUAAAgAAAAIAQAAAAAAAAAAAAoAAAByBgAAGAAAAAgBgAAAAAAAAAAACgAAAI4AAAAUAAAABAUAAAAAAAAAAAD+//9/XAAAABQAAAAEBQAAAAAAAAAAAP7//38QAAAAJAAAAAQFAAAAAAAAAAAA/v//f18AAAA0AAAABAUAAAAAAAAAAAD+//9/XgAAAEQAAAAEBQAAAAAAAAAAAP7//39WAAAAFAAAAAQFAAAAAAAAAAAA/v//fwYAAAAkAAAABAUAAAAAAAAAAAD+//9/EgAAADQAAAAEBQAAAAAAAAAAAP7//39cAAAARAAAAAQFAAAAAAAAAAAA/v//f14AAAAUAAAABAUAAAAAAAAAAAD+//9/WQAAABQAAAAEBQAAAAAAAAAAAP7//38KAAAAFAAAAAQFAAAAAAAAAAAA/v//f1YAAAAUAAAABAUAAAAAAAAAAAD+//9/EgAAACQAAAAEBQAAAAAAAAAAAP7//39WAAAAFAAAAAQFAAAAAAAAAAAA/v//f1cAAAAkAAAABAUAAAAAAAAAAAD+//9/EgAAABQAAAAEBQAAAAAAAAAAAP7//39XAAAAFAAAAAQFAAAAAAAAAAAA/v//fxIAAAAUAAAABAUAAAAAAAAAAAD+//9/VgAAABQAAAAEBQAAAAAAAAAAAP7//38SAAAAJAAAAAQFAAAAAAAAAAAA/v//f14AAAA0AAAABAUAAAAAAAAAAAD+//9/VgAAAEQAAAAEBQAAAAAAAAAAAP7//38SAAAAFAAAAAQFAAAAAAAAAAAA/v//fxIAAAAkAAAABAUAAAAAAAAAAAD+//9/XgAAADQAAAAEBQAAAAAAAAAAAP7//39WAAAARAAAAAQFAAAAAAAAAAAA/v//f1YAAABUAAAABAUAAAAAAAAAAAD+//9/EgAAABQAAAAEBQAAAAAAAAAAAP7//39XAAAAFAAAAAQFAAAAAAAAAAAA/v//fxIAAAAkAAAABAUAAAAAAAAAAAD+//9/EgAAADQAAAAEBQAAAAAAAAAAAP7//38SAAAARAAAAAQFAAAAAAAAAAAA/v//fwYAAABUAAAABAUAAAAAAAAAAAD+//9/VgAAAGQA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APz//3/4AAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAAAAAAABcAAAAAAAAAAAD8//9/+AAAAAAAAAAAFwAAAAAAAAAAAPz//3/4AAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAAAAAAABcAAAAAAAAAAAD8//9/8QAAAAAAAAAIAQAAAAAAAAAAAP///39kAAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAAAAAAABcAAAAAAAAAAAD8//9/8QAAAAAAAAAAFwAAAAAAAAAAAP///39kAAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAAAAAAABcAAAAAAAAAAAD8//9/8QAAAAAAAAAAFwAAAAAAAAAAAP///39kAAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAAAAAAABcAAAAAAAAAAAD8//9/+AAAAAAAAAAAFwAAAAAAAAAAAPz//3/4AAAAAAAAAAAXAAAAAAAAAAAA/P//f/EAAAAAAAAAABcAAAAAAAAAAAD///9/ZAAAAAAAAAAAFwAAAAAAAAAAAPz//3/xAAAAAAAAAAAXAAAAAAAAAAAA/P//f/gAAAAIAAAACAEAAAAAAAAAAAD8//9/+AAAABAAAAAIAQAAAAAAAAAAAPz//3/4AAAAGAAAAAgBAAAAAAAAAAAA////f2QAAAAgAAAACAEAAAAAAAAAAAD8//9/+AAAACgAAAAIAQAAAAAAAAAAAP///39kAAAAMAAAAAgBAAAAAAAAAAAA/P//f/gAAAA4AAAACAEAAAAAAAAAAAD8//9/+AAAAEAAAAAIAQAAAAAAAAAAAPz//3/4AAAASAAAAAgBAAAAAAAAAAAA////f2QAAABQAAAACAEAAAAAAAAAAAD8//9/+AAAAAAAAAAAFgAAAAAAAAAAAAkAAACIAAAAAAAAAAAWAAAAAAAAAAAA/P//f/cAAAAbAAAABB8AAAAAAAAAAAD///9/uwEAAAAAAAAAFgAAAAAAAAAAAPz//3/3AAAAGQAAAAQfAAAAAAAAAAAA////f7sBAAAAAAAAABYAAAAAAAAAAAD///9/YQMAAAAAAAAAFgAAAAAAAAAAAPz//3/3AAAAHwAAAAQfAAAAAAAAAAAA////f2QDAAAAAAAAABYAAAAAAAAAAAAKAAAAbgUAAAAAAAAAFgAAAAAAAAAAAPz//3/3AAAAHAAAAAQfAAAAAAAAAAAA////f2UDAAAmAAAABB8AAAAAAAAAAAD///9/uwEAADIAAAAEHwAAAAAAAAAAAP///3+7AQAAAAAAAAAWAAAAAAAAAAAAEQAAADUAAAAAAAAAABYAAAAAAAAAAAAEAAAAPAAAABkAAAAEHwAAAAAAAAAAAP///3+uAQAAAAAAAAAWAAAAAAAAAAAAEAAAAOsAAAAAAAAAABYAAAAAAAAAAAD8//9/+QAAABkAAAAEHwAAAAAAAAAAAP///3/yAgAAAAAAAAAWAAAAAAAAAAAAEAAAAOsAAAAAAAAAABYAAAAAAAAAAAD8//9/9wAAABgAAAAEHwAAAAAAAAAAAP///3/yAgAAAAAAAAAWAAAAAAAAAAAAEgAAAEMAAAAAAAAAABYAAAAAAAAAAAD8//9/9wAAACUAAAAEHwAAAAAAAAAAAP///39mAwAALwAAAAQfAAAAAAAAAAAA////f7sBAAA7AAAABB8AAAAAAAAAAAD///9/uwEAAAAAAAAAFgAAAAAAAAAAABEAAAA1AAAAAAAAAAAWAAAAAAAAAAAA/P//f/UAAAAAAAAAABYAAAAAAAAAAAD///9/pgEAAAAAAAAAFgAAAAAAAAAAAAQAAAA8AAAAHQAAAAQfAAAAAAAAAAAA////f64BAAAoAAAABB8AAAAAAAAAAAD///9/xgEAADEAAAAEHwAAAAAAAAAAAP///3/xAgAAOwAAAAQfAAAAAAAAAAAA////f8EBAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fwkDAAAwAAAACAEAAAAAAAAAAAD///9/PAAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fwkDAAAsAAAABAWAAAAAAAAAAAD///9/OwAAADAAAAAIAQAAAAAAAAAAAAwAAABiAAAAAAAAAAgBAAAAAAAAAAAA////fwIAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fw4DAAAwAAAACAEAAAAAAAAAAAD///9/QAAAAAAAAAAIAQAAAAAAAAAAAPz//3+PAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/DgMAACwAAAAEBYAAAAAAAAAAAP///38+AAAAOAAAAAgBAAAAAAAAAAAA+///f1UAAABAAAAACAEAAAAAAAAAAAD7//9/VAAAAEgAAAAIAQAAAAAAAAAAAPz//3/3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38RAwAAMAAAAAgBAAAAAAAAAAAA////f0IAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38RAwAALAAAAAQFgAAAAAAAAAAA////f0EAAAA4AAAACAEAAAAAAAAAAAD7//9/VAAAAEAAAAAIAQAAAAAAAAAAAPz//3/3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38XAwAAMAAAAAgBAAAAAAAAAAAA////f0QAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38XAwAALAAAAAQFgAAAAAAAAAAA////f0MAAAA4AAAACAEAAAAAAAAAAAD7//9/VgAAAEAAAAAIAQAAAAAAAAAAAPv//39UAAAASAAAAAgBAAAAAAAAAAAA/P//f/cAAAAAAAAACAEAAAAAAAAAAAD///9/AwAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/HgMAADAAAAAIAQAAAAAAAAAAAP///39JAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38fAwAAMAAAAAgBAAAAAAAAAAAA////f0gAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38fAwAALAAAAAQFgAAAAAAAAAAA////f0cAAAAwAAAACAEAAAAAAAAAAAAMAAAAegAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fx4DAAAsAAAABAWAAAAAAAAAAAD///9/RgAAADAAAAAIAQAAAAAAAAAAAP///39IAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38lAwAAMAAAAAgBAAAAAAAAAAAA////f0sAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38lAwAALAAAAAQFgAAAAAAAAAAA////f0oAAAAwAAAACAEAAAAAAAAAAAD7//9/VgAAAAAAAAAIAQAAAAAAAAAAAP///38EAAAAAAAAAAgBAAAAAAAAAAAA////fwUAAAAAAAAACAEAAAAAAAAAAAD8//9/hQAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/KwMAADAAAAAIAQAAAAAAAAAAAP///39SAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38sAwAAMAAAAAgBAAAAAAAAAAAA////f1EAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38sAwAALAAAAAQFgAAAAAAAAAAA////f1AAAAAwAAAACAEAAAAAAAAAAAD8//9/+AAAABgAAAAIAQAAAAAAAAAAAP///39OAAAAIAAAAAgBAAAAAAAAAAAA/v//fwEAAAAoAAAABAUAAAAAAAAAAAD9//9/KwMAACwAAAAEBYAAAAAAAAAAAP///39PAAAAMAAAAAgBAAAAAAAAAAAA/P//f/gAAAA4AAAACAEAAAAAAAAAAAD///9/UQAAABgAAAAIAQAAAAAAAAAAAP///39NAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/KgMAACwAAAAEBQAAAAAAAAAAAP///39kAAAAMAAAAAgBAAAAAAAAAAAA/f//fy0DAAA4AAAACAEAYAAAAAAAAAD///9/UwAAAFAAAAAEBQAAAAAAAAAAAP3//38tAwAAYAAAAAgBAAAAAAAAAAAA/f//fy4DAABoAAAACAEAAAAAAAAAAAD///9/UgAAAHgAAAAIAQAAAAAAAAAAAP3//38uAwAAgAAAAAgBAAAAAAAAAAAADgAAACYAAACQAAAACAEAAAAAAAAAAAD9//9/LwMAAJgAAAAIAQAAAAAAAAAAAPz//3/xAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38wAwAAMAAAAAgBAAAAAAAAAAAA////f1UAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38wAwAALAAAAAQFgAAAAAAAAAAA////f1QAAAA4AAAACAEAAAAAAAAAAAD///9/ZAAAAEAAAAAIAQAAAAAAAAAAAPz//3/4AAAASAAAAAgBAAAAAAAAAAAA/P//f/gAAABQAAAACAEAAAAAAAAAAAD8//9/9QAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MQMAADAAAAAIAQAAAAAAAAAAAP///39XAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MQMAACwAAAAEBYAAAAAAAAAAAP///39WAAAAOAAAAAgBAAAAAAAAAAAA////f2QAAABAAAAACAEAAAAAAAAAAAD8//9/+AAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MgMAADAAAAAIAQAAAAAAAAAAAP///39ZAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MgMAACwAAAAEBYAAAAAAAAAAAP///39YAAAAOAAAAAgBAAAAAAAAAAAA////f2QAAABAAAAACAEAAAAAAAAAAAD8//9/+AAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MwMAADAAAAAIAQAAAAAAAAAAAP///39bAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/MwMAACwAAAAEBYAAAAAAAAAAAP///39aAAAAOAAAAAgBAAAAAAAAAAAA////f2QAAABAAAAACAEAAAAAAAAAAAD8//9/+AAAAEgAAAAIAQAAAAAAAAAAAPz//3/4AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//381AwAAMAAAAAgBAAAAAAAAAAAA////f10AAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//381AwAALAAAAAQFgAAAAAAAAAAA////f1wAAAA4AAAACAEAAAAAAAAAAAD8//9/+AAAAEAAAAAIAQAAAAAAAAAAAPz//3/4AAAASAAAAAgBAAAAAAAAAAAA/P//f/UAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fzcDAAAwAAAACAEAAAAAAAAAAAD///9/XwAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fzcDAAAsAAAABAWAAAAAAAAAAAD///9/XgAAADgAAAAIAQAAAAAAAAAAAPz//3/4AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//385AwAAMAAAAAgBAAAAAAAAAAAA////f2EAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//385AwAALAAAAAQFgAAAAAAAAAAA////f2AAAAA4AAAACAEAAAAAAAAAAAD8//9/+AAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/OwMAADAAAAAIAQAAAAAAAAAAAP///39jAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/OwMAACwAAAAEBYAAAAAAAAAAAP///39iAAAAOAAAAAgBAAAAAAAAAAAA/P//f/gAAABAAAAACAEAAAAAAAAAAAD8//9/+AAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/KgMAADAAAAAIAQAAAAAAAAAAAP///39TAAAAOAAAAAQFAAAAAAAAAAAA/f//fy0DAABIAAAABAUAAAAAAAAAAAD9//9/NAMAAEwAAAAEGgAAAAAAAAAAAP///39dAAAAUAAAAAQaAAAAAAAAAAAA////f3sDAABUAAAABBoAAAAAAAAAAAD///9/ewMAAFgAAAAEBQAAAAAAAAAAAP3//382AwAAXAAAAAQaAAAAAAAAAAAA////f18AAABgAAAABBoAAAAAAAAAAAD///9/fAMAAGQAAAAEGgAAAAAAAAAAAP///398AwAAaAAAAAQFAAAAAAAAAAAA/f//fzgDAABsAAAABBoAAAAAAAAAAAD///9/YQAAAHAAAAAEGgAAAAAAAAAAAP///399AwAAdAAAAAQaAAAAAAAAAAAA////f30DAAB4AAAABAUAAAAAAAAAAAD9//9/OgMAAHwAAAAEGgAAAAAAAAAAAP///39jAAAAgAAAAAQaAAAAAAAAAAAA////f34DAACEAAAABBoAAAAAAAAAAAD///9/fgMAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/PAMAADAAAAAIAQAAAAAAAAAAAP///39mAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/PAMAACwAAAAEBYAAAAAAAAAAAP///39lAAAAMAAAAAgBAAAAAAAAAAAA////f8MCAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//fz0DAAAwAAAACAEAAAAAAAAAAAD///9/bgAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/PwMAADAAAAAIAQAAAAAAAAAAAP///39pAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/PwMAACwAAAAEBYAAAAAAAAAAAP///39oAAAAOAAAAAgBAAAAAAAAAAAA+///f2EAAABAAAAACAEAAAAAAAAAAAD///9/pgEAAEgAAAAIAQAAAAAAAAAAAPz//3/3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39AAwAAMAAAAAgBAAAAAAAAAAAA////f2sAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39AAwAALAAAAAQFgAAAAAAAAAAA////f2oAAAA4AAAACAEAAAAAAAAAAAD///9/pgEAAEAAAAAIAQAAAAAAAAAAAPz//3/3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39CAwAAMAAAAAgBAAAAAAAAAAAA////f20AAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39CAwAALAAAAAQFgAAAAAAAAAAA////f2wAAAA4AAAACAEAAAAAAAAAAAD7//9/YgAAAEAAAAAIAQAAAAAAAAAAAP///3+mAQAASAAAAAgBAAAAAAAAAAAA/P//f/cAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//389AwAALAAAAAQFgAAAAAAAAAAA////f2cAAAAwAAAACAEAAAAAAAAAAAD7//9/YgAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/QwMAADAAAAAIAQAAAAAAAAAAAP///39wAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/QwMAACwAAAAEBYAAAAAAAAAAAP///39vAAAAMAAAAAgBAAAAAAAAAAAA+///f1oAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA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AAAEBYAAAAAAAAAAAP///3+/AAAAOAAAAAgBAAAAAAAAAAAABQAAAAIAAABAAAAACAEAAAAAAAAAAAD8//9/9QAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/dAMAADAAAAAIAQAAAAAAAAAAAP///3/CAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/dAMAACwAAAAEBYAAAAAAAAAAAP///3/BAAAAOAAAAAgBAAAAAAAAAAAA/P//f/cAAABAAAAACAEAAAAAAAAAAAAFAAAABAAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/dQMAADAAAAAIAQAAAAAAAAAAAP///3/EAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/dQMAACwAAAAEBYAAAAAAAAAAAP///3/DAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//398AwAAMAAAAAgBAAAAAAAAAAAA////f8cAAAAAAAAACAEAAAAAAAAAAAD///9/BgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f3wDAAAsAAAABAWAAAAAAAAAAAD///9/xQAAADgAAAAIAQAAAAAAAAAAAPv//392AAAAQAAAAAgBAAAAAAAAAAAA+///f2sAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f4EDAAAwAAAACAEAAAAAAAAAAAD///9/ywAAAAAAAAAIAQAAAAAAAAAAAP///38HAAAAAAAAAAgBAAAAAAAAAAAA////fwgAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+BAwAALAAAAAQFgAAAAAAAAAAA////f8gAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAPv//39vAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+NAwAAMAAAAAgBAAAAAAAAAAAA////f80AAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+NAwAALAAAAAQFgAAAAAAAAAAA////f8wAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAPz//3/5AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+OAwAAMAAAAAgBAAAAAAAAAAAA////f88AAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+OAwAALAAAAAQFgAAAAAAAAAAA////f84AAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAAUAAAACAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+PAwAAMAAAAAgBAAAAAAAAAAAA////f9EAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+PAwAALAAAAAQFgAAAAAAAAAAA////f9AAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/kAMAADAAAAAIAQAAAAAAAAAAAP///3/TAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/kAMAACwAAAAEBYAAAAAAAAAAAP///3/SAAAAOAAAAAgBAAAAAAAAAAAA+///f3YAAABAAAAACAEAAAAAAAAAAAD8//9/5wAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/kQMAADAAAAAIAQAA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AP3//3+cAwAAMAAAAAgBAAAAAAAAAAAA////f+YAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+cAwAALAAAAAQFgAAAAAAAAAAA////f+UAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAPv//39uAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+dAwAAMAAAAAgBAAAAAAAAAAAA////f+gAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+dAwAALAAAAAQFgAAAAAAAAAAA////f+cAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAP///388AAAASAAAAAgBAAAAAAAAAAAA////f6YBAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f54DAAAwAAAACAEAAAAAAAAAAAD///9/6gAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f54DAAAsAAAABAWAAAAAAAAAAAD///9/6QAAADgAAAAIAQAAAAAAAAAAAPv//392AAAAQAAAAAgBAAAAAAAAAAAA/P//f+cAAABIAAAACAEAAAAAAAAAAAD8//9/9wAAAFAAAAAIAQAAAAAAAAAAAP///3+mAQAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+fAwAAMAAAAAgBAAAAAAAAAAAA////f+wAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+fAwAALAAAAAQFgAAAAAAAAAAA////f+sAAAA4AAAACAEAAAAAAAAAAAD7//9/dgAAAEAAAAAIAQAAAAAAAAAAAPv//39rAAAASAAAAAgBAAAAAAAAAAAA/P//f+cAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7/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MAAAAAgBAAAAAAAAAAAA////f/4AAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+sAwAALAAAAAQFgAAAAAAAAAAA////f/0AAAA4AAAACAEAAAAAAAAAAAAFAAAAAgAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/rgMAADAAAAAIAQAAAAAAAAAAAP///38AAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/rgMAACwAAAAEBYAAAAAAAAAAAP///3//AAAAOAAAAAgBAAAAAAAAAAAA/P//f+cAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f7EDAAAwAAAACAEAAAAAAAAAAAD///9/AgEAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f7EDAAAsAAAABAWAAAAAAAAAAAD///9/AQEAADgAAAAIAQAAAAAAAAAAAAcAAAC8AAAAQAAAAAgBAAAAAAAAAAAA+///f3EAAABIAAAACAEAAAAAAAAAAAD7//9/cQAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/swMAADAAAAAIAQAAAAAAAAAAAP///38EAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/swMAACwAAAAEBYAAAAAAAAAAAP///38DAQAAOAAAAAgBAAAAAAAAAAAABwAAALwAAABAAAAACAEAAAAAAAAAAAD8//9/5wAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/tgMAADAAAAAIAQAAAAAAAAAAAP///38GAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/tgMAACwAAAAEBYAAAAAAAAAAAP///38FAQAAOAAAAAgBAAAAAAAAAAAABwAAALwAAABAAAAACAEAAAAAAAAAAAD7//9/cwAAAEgAAAAIAQAAAAAAAAAAAPz//3/lAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+4AwAAMAAAAAgBAAAAAAAAAAAA////fwgBAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3+4AwAALAAAAAQFgAAAAAAAAAAA////fwcBAAA4AAAACAEAAAAAAAAAAAD7//9/dQAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/ugMAADAAAAAIAQAAAAAAAAAAAP///38KAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/ugMAACwAAAAEBYAAAAAAAAAAAP///38JAQAAOAAAAAgBAAAAAAAAAAAA/P//f+cAAABAAAAACAEAAAAAAAAAAAD8//9/9wAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/vAMAADAAAAAIAQAAAAAAAAAAAP///38MAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/vAMAACwAAAAEBYAAAAAAAAAAAP///38LAQAAOAAAAAgBAAAAAAAAAAAA////f+EAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f78DAAAwAAAACAEAAAAAAAAAAAD///9/DgEAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f78DAAAsAAAABAWAAAAAAAAAAAD///9/DQEAADgAAAAIAQAAAAAAAAAAAPv//39uAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/AAwAAMAAAAAgB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/f//f+0DAAAwAAAACAEAAAAAAAAAAAD///9/LQEAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/7gMAADAAAAAIAQAAAAAAAAAAAP///38sAQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/7gMAACwAAAAEBYAAAAAAAAAAAP///38rAQAAOAAAAAgBAAAAAAAAAAAABwAAALwAAABAAAAACAEAAAAAAAAAAAAHAAAAvAAAAEgAAAAIAQAAAAAAAAAAAPz//3/3AAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/7QMAACwAAAAEBYAAAAAAAAAAAP///38qAQAAOAAAAAgBAAAAAAAAAAAA+///f3wAAABAAAAACAEAAAAAAAAAAAD///9/LAEAAEgAAAAIAQAAAAAAAAAAAAIAAAC3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/xAwAAMAAAAAgBAAAAAAAAAAAA////fy8BAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/xAwAALAAAAAQFgAAAAAAAAAAA////fy4BAAA4AAAACAEAAAAAAAAAAAD///9/pgEAAEAAAAAIAQAAAAAAAAAAAAcAAAC8AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/zAwAAMAAAAAgBAAAAAAAAAAAA////fzEBAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/zAwAALAAAAAQFgAAAAAAAAAAA////fzABAAA4AAAACAEAAAAAAAAAAAD///9/LAEAAEAAAAAIAQAAAAAAAAAAAAIAAAC3AAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/5AwAAMAAAAAgBAAAAAAAAAAAA////fzMBAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3/5AwAALAAAAAQFgAAAAAAAAAAA////fzIBAAA4AAAACAEAAAAAAAAAAAD7//9/igAAAEAAAAAIAQAAAAAAAAAAAAoAAABvBQAASAAAAAgBAAAAAAAAAAAACgAAAH0FAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f/oDAAAwAAAACAEAAAAAAAAAAAD///9/NQEAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f/oDAAAsAAAABAWAAAAAAAAAAAD///9/NAEAADgAAAAIAQAAAAAAAAAAAPv//3+KAAAAQAAAAAgBAAAAAAAAAAAADAAAALIAAABIAAAACAEAAAAAAAAAAAD///9/SQAAAFAAAAAIAQAAAAAAAAAAAAwAAAC0AAAAWAAAAAgBAAAAAAAAAAAA/P//f/kAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f/sDAAAwAAAACAEAAAAAAAAAAAD///9/NwEAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f/sDAAAsAAAABAWAAAAAAAAAAAD///9/NgEAADgAAAAIAQAAAAAAAAAAAPv//3+KAAAAQAAAAAgBAAAAAAAAAAAADAAAAHYAAABIAAAACAEAAAAAAAAAAAAHAAAAvAAAAFAAAAAIAQAAAAAAAAAAAPv//39aAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3//AwAAMAAAAAgBAAAAAAAAAAAA////fzkBAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//3//AwAALAAAAAQFgAAAAAAAAAAA////fzgBAAA4AAAACAEAAAAAAAAAAAAMAAAAsgAAAEAAAAAIAQAAAAAAAAAAAP///39JAAAASAAAAAgBAAAAAAAAAAAADAAAALQAAABQAAAACAEAAAAAAAAAAAD8//9/+QAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/AQQAADAAAAAIAQAAAAAAAAAAAP///387AQAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/AQQAACwAAAAEBYAAAAAAAAAAAP///386AQAAOAAAAAgBAAAAAAAAAAAADAAAAHYAAABAAAAACAEAAAAAAAAAAAAHAAAAvAAAAEgAAAAIAQAAAAAAAAAAAPv//39aAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38HBAAAMAAAAAgBAAAAAAAAAAAA////fz0BAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38HBAAALAAAAAQFgAAAAAAAAAAA////fzwBAAAwAAAACAEAAAAAAAAAAAD7//9/UgAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/CAQAADAAAAAIAQAAAAAAAAAAAP///38/AQAAIAAAAAgBAAAAAAAAAAAA/v//fxwAAAAoAAAABAUAAAAAAAAAAAD9//9/CAQAACwAAAAEBYAAAAAAAAAAAP///38+AQAAMAAAAAgBAAAAAAAAAAAA/P//f/cAAAA4AAAACAEAAAAAAAAAAAD///9/YQMAAAAAAAAIAQAAAAAAAAAAAP///38KAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//38bBAAAMAAAAAgBAAAAAAAAAAAA////f0IBAAAYAAAACAEAAAAAAAAAAAD///9/QAEAACAAAAAIAQAAAAAAAAAAAP7//387AAAAKAAAAAQFAAAAAAAAAAAA/f//fxsEAAAsAAAABAWAAAAAAAAAAAD///9/QQEAADgAAAAIAQBQAAAAAAAAAP///39CAQAAUAAAAAgBAAAAAAAAAAAA/f//fxwEAABY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UAAAAAAAAAD///9/TwEAAFAAAAAIAQAAAAAAAAAAAP3//38+BAAAWAAAAAgBAAAAAAAAAAAA/P//f/MAAABoAAAACAEAAAAAAAAAAAD9//9/PwQAAHAAAAAIAQAAAAAAAAAAAAUAAAAAAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39HBAAAMAAAAAgBAAAAAAAAAAAA////f08BAAAgAAAACAEAAAAAAAAAAAD+//9/VAAAACgAAAAEBQAAAAAAAAAAAP3//39IBAAALAAAAAQFgAAAAAAAAAAA////f1IBAAA4AAAACAEAUAAAAAAAAAD///9/UQEAAFAAAAAIAQAAAAAAAAAAAP3//38+BAAAWAAAAAgBAAAAAAAAAAAA/P//f/MAAABoAAAACAEAAAAAAAAAAAD9//9/PwQAAHAAAAAIAQAAAAAAAAAAAAUAAAAAAAAAgAAAAAgBAAAAAAAAAAAA/f//f0AEAACIAAAACAEAAAAAAAAAAAD///9/ngAAAJgAAAAIAQAAAAAAAAAAAP3//39BBAAAoAAAAAgBAAAAAAAAAAAA+///f08AAACwAAAACAEAAAAAAAAAAAD9//9/QgQAALgAAAAIAQAAAAAAAAAAAP///39MAQAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39IBAAAMAAAAAgBAAAAAAAAAAAA////f1EBAAAgAAAACAEAAAAAAAAAAAD+//9/VQAAACgAAAAEBQAAAAAAAAAAAP3//39JBAAALAAAAAQFgAAAAAAAAAAA////f1QBAAA4AAAACAEAUAAAAAAAAAD///9/UwEAAFAAAAAIAQAAAAAAAAAAAP3//38+BAAAWAAAAAgBAAAAAAAAAAAA/P//f/MAAABoAAAACAEAAAAAAAAAAAD9//9/PwQAAHAAAAAIAQAAAAAAAAAAAAQAAAA8AAAAgAAAAAgBAAAAAAAAAAAA/f//f0AEAACIAAAACAEAAAAAAAAAAAADAAAADAEAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAA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//9/UQQAADAAAAAIAQAAAAAAAAAAAP///39oAQAAGAAAAAgBAAAAAAAAAAAA////f2YBAAAgAAAACAEAAAAAAAAAAAD+//9/VwAAACgAAAAEBQAAAAAAAAAAAP3//39RBAAALAAAAAQFgAAAAAAAAAAA////f2cBAAAwAAAACAEAAAAAAAAAAAD///9/fwMAADgAAAAIAQAAAAAAAAAAAP///39jAwAAAAAAAAgBAAAAAAAAAAAA////fw0AAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f1IEAAAwAAAACAEAAAAAAAAAAAD///9/awEAABgAAAAIAQAAAAAAAAAAAP///39pAQAAIAAAAAgBAAAAAAAAAAAA/v//f1gAAAAoAAAABAUAAAAAAAAAAAD9//9/UgQAACwAAAAEBYAAAAAAAAAAAP///39qAQAAMAAAAAgBAAAAAAAAAAAA/P//f/cAAAA4AAAACAEAAAAAAAAAAAD///9/YQMAAAAAAAAIAQAAAAAAAAAAAP///38OAAAAGAAAAAgBAAAAAAAAAAAA////fxIAAAAgAAAACAEAAAAAAAAAAAD+//9/AAAAACgAAAAEBQAAAAAAAAAAAP3//39TBAAAMAAAAAgBAAAAAAAAAAAA////f24BAAAYAAAACAEAAAAAAAAAAAD///9/bAEAACAAAAAIAQAAAAAAAAAAAP7//38BAAAAKAAAAAQFAAAAAAAAAAAA/f//f1MEAAAsAAAABAWAAAAAAAAAAAD///9/bQEAADAAAAAIAQAAAAAAAAAAAPz//3/rAAAAOAAAAAgBAAAAAAAAAAAA////f8MCAAAAAAAACAEAAAAAAAAAAAD///9/DwAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/VAQAADAAAAAIAQAAAAAAAAAAAP///39xAQAAGAAAAAgBAAAAAAAAAAAA////f28BAAAgAAAACAEAAAAAAAAAAAD+//9/WQAAACgAAAAEBQAAAAAAAAAAAP3//39UBAAALAAAAAQFgAAAAAAAAAAA////f3ABAAAwAAAACAEAAAAAAAAAAAD///9/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AQAAAAAAAAAAAP7//38SAAAAKAAAAAQFAAAAAAAAAAAA/f//f14EAAAsAAAABAWAAAAAAAAAAAD///9/hQEAADgAAAAIAQBQAAAAAAAAAP///3+GAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAAEAAAAOsAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f18EAAAwAAAACAEAAAAAAAAAAAD///9/iAEAACAAAAAIAQAAAAAAAAAAAP7//38SAAAAKAAAAAQFAAAAAAAAAAAA/f//f18EAAAsAAAABAWAAAAAAAAAAAD///9/hwEAADgAAAAIAQBQAAAAAAAAAP///3+IAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAA////f24AAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f2AEAAAwAAAACAEAAAAAAAAAAAD///9/igEAACAAAAAIAQAAAAAAAAAAAP7//38SAAAAKAAAAAQFAAAAAAAAAAAA/f//f2AEAAAsAAAABAWAAAAAAAAAAAD///9/iQEAADgAAAAIAQBQAAAAAAAAAP///3+KAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAA+///f48AAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f2EEAAAwAAAACAEAAAAAAAAAAAD///9/jAEAACAAAAAIAQAAAAAAAAAAAP7//39dAAAAKAAAAAQFAAAAAAAAAAAA/f//f2EEAAAsAAAABAWAAAAAAAAAAAD///9/iwEAADgAAAAIAQBQAAAAAAAAAP///3+MAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAABAAAADwAAACAAAAACAEAAAAAAAAAAAD9//9/QAQAAIgAAAAIAQAAAAAAAAAAAAMAAAAMAQAAmAAAAAgBAAAAAAAAAAAA/f//f0EEAACgAAAACAEAAAAAAAAAAAD///9/ngAAABgAAAAIAQAAAAAAAAAAAP///38SAAAAIAAAAAgBAAAAAAAAAAAA/v//fwAAAAAoAAAABAUAAAAAAAAAAAD9//9/YgQAADAAAAAIAQAAAAAAAAAAAP///3+OAQAAIAAAAAgBAAAAAAAAAAAA/v//f1wAAAAoAAAABAUAAAAAAAAAAAD9//9/YgQAACwAAAAEBYAAAAAAAAAAAP///3+NAQAAOAAAAAgBAFAAAAAAAAAA////f44BAABQAAAACAEAAAAAAAAAAAD9//9/PgQAAFgAAAAIAQAAAAAAAAAAAPz//3/zAAAAaAAAAAgBAAAAAAAAAAAA/f//fz8EAABwAAAACAEAAAAAAAAAAAD///9/ngAAAIAAAAAIAQAAAAAAAAAAAP3//39ABAAAiAAAAAgBAAAAAAAAAAAA////f54AAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f2MEAAAwAAAACAEAAAAAAAAAAAD///9/kAEAACAAAAAIAQAAAAAAAAAAAP7//38GAAAAKAAAAAQFAAAAAAAAAAAA/f//f2MEAAAsAAAABAWAAAAAAAAAAAD///9/jwEAADgAAAAIAQBQAAAAAAAAAP///3+QAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAACgAAAG8FAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f2QEAAAwAAAACAEAAAAAAAAAAAD///9/kgEAACAAAAAIAQAAAAAAAAAAAP7//38SAAAAKAAAAAQFAAAAAAAAAAAA/f//f2QEAAAsAAAABAWAAAAAAAAAAAD///9/kQEAADgAAAAIAQBQAAAAAAAAAP///3+SAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAA/P//f/cAAAAYAAAACAEAAAAAAAAAAAD///9/EgAAACAAAAAIAQAAAAAAAAAAAP7//38AAAAAKAAAAAQFAAAAAAAAAAAA/f//f2UEAAAwAAAACAEAAAAAAAAAAAD///9/lAEAACAAAAAIAQAAAAAAAAAAAP7//39WAAAAKAAAAAQFAAAAAAAAAAAA/f//f2UEAAAsAAAABAWAAAAAAAAAAAD///9/kwEAADgAAAAIAQBQAAAAAAAAAP///3+UAQAAUAAAAAgBAAAAAAAAAAAA/f//fz4EAABYAAAACAEAAAAAAAAAAAD8//9/8wAAAGgAAAAIAQAAAAAAAAAAAP3//38/BAAAcAAAAAgBAAAAAAAAAAAA/P//f/cAAACAAAAACAEAAAAAAAAAAAD9//9/QAQAAIgAAAAIAQAAAAAAAAAAAP///39jAwAAAAAAAAgBAAAAAAAAAAAA+///f00AAAAB+///f5YAAAAC/f//f2gEAAAC/f//f2kEAAAD+///f5oAAAAE+///f5gAAAAF+///f5cAAAAG+///f5kAAAAH/f//fwAAAAAI/f//fwEAAAAJ/f//fwIAAAAK/f//fwMAAAAL/f//fwQAAAAL/f//fwUAAAAB+///f5sAAAAC/f//f2oEAAAC/f//f2sEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2wEAAAC/f//f20EAAAD+///f54AAAAE+///f5wAAAAG+///f50AAAAH/f//fwYAAAAI/f//fwcAAAAJ/f//fwgAAAAK/f//fwkAAAAL/f//fwoAAAAL/f//fwsAAAAL/f//fwwAAAAL/f//fw0AAAAB+///f58AAAAC/f//f24EAAAC/f//f28EAAAD+///f6IAAAAE+///f6AAAAAG+///f6EAAAAH/f//fw4AAAAI/f//fw8AAAAJ/f//fxAAAAAK/f//fxEAAAAL/f//fxIAAAAL/f//fxMAAAAB+///f6MAAAAC/f//f3AEAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f3IEAAAC/f//f3MEAAAD+///f6YAAAAE+///f6QAAAAG+///f6UAAAAH/f//fxQAAAAI/f//fxUAAAAJ/f//fxYAAAAK/f//fxcAAAAL/f//fxgAAAAL/f//fxkAAAAL/f//fxoAAAAL/f//fxsAAAAB+///f6cAAAAC/f//f3QEAAAC/f//f3UEAAAC/f//f3YEAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f3cEAAAC/f//f3gEAAAD+///f6oAAAAE+///f6gAAAAG+///f6kAAAAH/f//fxwAAAAI/f//fx0AAAAJ/f//fx4AAAAK/f//fx8AAAAL/f//fyAAAAAL/f//fyEAAAAL/f//fyIAAAAL/f//fyMAAAAB+///f6sAAAAC/f//f3kEAAAC/f//f3oEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f3sEAAAC/f//f3wEAAAD+///f64AAAAE+///f6wAAAAG+///f60AAAAH/f//fyQAAAAI/f//fyUAAAAJ/f//fyYAAAAK/f//fycAAAAL/f//fygAAAAL/f//fykAAAAL/f//fyoAAAAL/f//fysAAAAB+///f68AAAAC/f//f3kEAAAC/f//f3oEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f30EAAAC/f//f34EAAAD+///f7IAAAAE+///f7AAAAAG+///f7EAAAAH/f//fywAAAAI/f//fy0AAAAJ/f//fy4AAAAK/f//fy8AAAAL/f//fzAAAAAL/f//fzEAAAAL/f//fzIAAAAL/f//fzMAAAAB+///f7MAAAAC/f//f38EAAAC/f//f4AEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f4EEAAAC/f//f4IEAAAD+///f7YAAAAE+///f7QAAAAG+///f7UAAAAH/f//fzQAAAAI/f//fzUAAAAJ/f//fzYAAAAK/f//fzcAAAAL/f//fzgAAAAL/f//fzkAAAAL/f//fzoAAAAL/f//fzsAAAAB+///f7cAAAAC/f//f4MEAAAC/f//f4QEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f4UEAAAC/f//f4YEAAAD+///f7oAAAAE+///f7gAAAAG+///f7kAAAAH/f//fzwAAAAI/f//fz0AAAAJ/f//fz4AAAAK/f//fz8AAAAL/f//f0AAAAAL/f//f0EAAAAL/f//f0IAAAAL/f//f0MAAAAB+///f7sAAAAC/f//f4cEAAAC/f//f4gEAAAC/f//f4kEAAAD+///f78AAAAE+///f70AAAAF+///f7wAAAAG+///f74AAAAH/f//f0QAAAAI/f//f0UAAAAJ/f//f0YAAAAK/f//f0cAAAAL/f//f0gAAAAL/f//f0kAAAAB+///f8AAAAAC/f//f3AEAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f4oEAAAC/f//f4sEAAAD+///f8MAAAAE+///f8EAAAAG+///f8IAAAAH/f//f0oAAAAI/f//f0sAAAAJ/f//f0wAAAAK/f//f00AAAAL/f//f04AAAAL/f//f08AAAAL/f//f1AAAAAL/f//f1EAAAAB+///f8QAAAAC/f//f4wEAAAC/f//f40EAAAC/f//f44EAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f48EAAAC/f//f5AEAAAD+///f8cAAAAE+///f8UAAAAG+///f8YAAAAH/f//f1IAAAAI/f//f1MAAAAJ/f//f1QAAAAK/f//f1UAAAAL/f//f1YAAAAL/f//f1cAAAAL/f//f1gAAAAL/f//f1kAAAAB+///f8gAAAAC/f//f2gEAAAC/f//f2kEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f5EEAAAC/f//f5IEAAAD+///f8sAAAAE+///f8kAAAAG+///f8oAAAAH/f//f1oAAAAI/f//f1sAAAAJ/f//f1wAAAAK/f//f10AAAAL/f//f14AAAAL/f//f18AAAAL/f//f2AAAAAL/f//f2EAAAAB+///f8wAAAAC/f//f2gEAAAC/f//f2kEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f5MEAAAC/f//f5QEAAAD+///f88AAAAE+///f80AAAAG+///f84AAAAH/f//f2IAAAAI/f//f2MAAAAJ/f//f2QAAAAK/f//f2UAAAAL/f//f2YAAAAL/f//f2cAAAAL/f//f2gAAAAL/f//f2kAAAAB+///f9AAAAAC/f//f3kEAAAC/f//f5UEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f5YEAAAC/f//f5cEAAAD+///f9MAAAAE+///f9EAAAAG+///f9IAAAAH/f//f2oAAAAI/f//f2sAAAAJ/f//f2wAAAAK/f//f20AAAAL/f//f24AAAAL/f//f28AAAAL/f//f3AAAAAL/f//f3EAAAAB+///f9QAAAAC/f//f3kEAAAC/f//f5UEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f5gEAAAC/f//f5kEAAAD+///f9cAAAAE+///f9UAAAAG+///f9YAAAAH/f//f3IAAAAI/f//f3MAAAAJ/f//f3QAAAAK/f//f3UAAAAL/f//f3YAAAAL/f//f3cAAAAL/f//f3gAAAAL/f//f3kAAAAB+///f9gAAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f5sEAAAC/f//f5wEAAAD+///f9sAAAAE+///f9kAAAAG+///f9oAAAAH/f//f3oAAAAI/f//f3sAAAAJ/f//f3wAAAAK/f//f30AAAAL/f//f34AAAAL/f//f38AAAAL/f//f4AAAAAL/f//f4EAAAAB+///f9wAAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f54EAAAC/f//f58EAAAD+///f98AAAAE+///f90AAAAG+///f94AAAAH/f//f4IAAAAI/f//f4MAAAAJ/f//f4QAAAAK/f//f4UAAAAL/f//f4YAAAAL/f//f4cAAAAL/f//f4gAAAAL/f//f4kAAAAB+///f+AAAAAC/f//f6AEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f6EEAAAC/f//f6IEAAAD+///f+MAAAAE+///f+EAAAAG+///f+IAAAAH/f//f4oAAAAI/f//f4sAAAAJ/f//f4wAAAAK/f//f40AAAAL/f//f44AAAAL/f//f48AAAAL/f//f5AAAAAL/f//f5EAAAAB+///f+QAAAAC/f//f6MEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f6QEAAAC/f//f6UEAAAD+///f+gAAAAE+///f+YAAAAF+///f+UAAAAG+///f+cAAAAH/f//f5IAAAAI/f//f5MAAAAJ/f//f5QAAAAK/f//f5UAAAAL/f//f5YAAAAL/f//f5cAAAAL/f//f5gAAAAL/f//f5kAAAAB+///f+kAAAAC/f//f6YEAAAC/f//f6cEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f6gEAAAC/f//f6kEAAAD+///f+wAAAAE+///f+oAAAAG+///f+sAAAAH/f//f5oAAAAI/f//f5sAAAAJ/f//f5wAAAAK/f//f50AAAAL/f//f54AAAAL/f//f58AAAAL/f//f6AAAAAL/f//f6EAAAAB+///f+0AAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f6oEAAAC/f//f6sEAAAD+///f/AAAAAE+///f+4AAAAG+///f+8AAAAH/f//f6IAAAAI/f//f6MAAAAJ/f//f6QAAAAK/f//f6UAAAAL/f//f6YAAAAL/f//f6cAAAAL/f//f6gAAAAL/f//f6kAAAAB+///f/EAAAAC/f//f6wEAAAC/f//f24EAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f60EAAAC/f//f64EAAAD+///f/QAAAAE+///f/IAAAAG+///f/MAAAAH/f//f6oAAAAI/f//f6sAAAAJ/f//f6wAAAAK/f//f60AAAAL/f//f64AAAAL/f//f68AAAAL/f//f7AAAAAL/f//f7EAAAAB+///f/UAAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f68EAAAC/f//f7AEAAAD+///f/gAAAAE+///f/YAAAAG+///f/cAAAAH/f//f7IAAAAI/f//f7MAAAAJ/f//f7QAAAAK/f//f7UAAAAL/f//f7YAAAAL/f//f7cAAAAL/f//f7gAAAAL/f//f7kAAAAB+///f/kAAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f7EEAAAC/f//f7IEAAAD+///f/wAAAAE+///f/oAAAAG+///f/sAAAAH/f//f7oAAAAI/f//f7sAAAAJ/f//f7wAAAAK/f//f70AAAAL/f//f74AAAAL/f//f78AAAAL/f//f8AAAAAL/f//f8EAAAAB+///f/0AAAAC/f//f6wEAAAC/f//f24EAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f7MEAAAC/f//f7QEAAAD+///fwABAAAE+///f/4AAAAG+///f/8AAAAH/f//f8IAAAAI/f//f8MAAAAJ/f//f8QAAAAK/f//f8UAAAAL/f//f8YAAAAL/f//f8cAAAAL/f//f8gAAAAL/f//f8kAAAAB+///fwEBAAAC/f//f7UEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f7YEAAAC/f//f7cEAAAD+///fwQBAAAE+///fwIBAAAG+///fwMBAAAH/f//f8oAAAAI/f//f8sAAAAJ/f//f8wAAAAK/f//f80AAAAL/f//f84AAAAL/f//f88AAAAL/f//f9AAAAAL/f//f9EAAAAB+///fwUBAAAC/f//f7UEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f7gEAAAC/f//f7kEAAAD+///fwkBAAAE+///fwcBAAAF+///fwYBAAAG+///fwgBAAAH/f//f9IAAAAI/f//f9MAAAAJ/f//f9QAAAAK/f//f9UAAAAL/f//f9YAAAAL/f//f9cAAAAL/f//f9gAAAAL/f//f9kAAAAB+///fwoBAAAC/f//f7oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f7sEAAAC/f//f7wEAAAD+///fw4BAAAE+///fwwBAAAF+///fwsBAAAG+///fw0BAAAH/f//f9oAAAAI/f//f9sAAAAJ/f//f9wAAAAK/f//f90AAAAL/f//f94AAAAL/f//f98AAAAL/f//f+AAAAAL/f//f+EAAAAB+///fw8BAAAC/f//f70EAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f74EAAAC/f//f78EAAAD+///fxMBAAAE+///fxEBAAAF+///fxABAAAG+///fxIBAAAH/f//f+IAAAAI/f//f+MAAAAJ/f//f+QAAAAK/f//f+UAAAAL/f//f+YAAAAL/f//f+cAAAAL/f//f+gAAAAL/f//f+kAAAAB+///fxQBAAAC/f//f8AEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8EEAAAC/f//f8IEAAAD+///fxgBAAAE+///fxYBAAAF+///fxUBAAAG+///fxcBAAAH/f//f+oAAAAI/f//f+sAAAAJ/f//f+wAAAAK/f//f+0AAAAL/f//f+4AAAAL/f//f+8AAAAL/f//f/AAAAAL/f//f/EAAAAB+///fxkBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8MEAAAC/f//f8QEAAAD+///fxwBAAAE+///fxoBAAAG+///fxsBAAAH/f//f/IAAAAI/f//f/MAAAAJ/f//f/QAAAAK/f//f/UAAAAL/f//f/YAAAAL/f//f/cAAAAL/f//f/gAAAAL/f//f/kAAAAB+///fx0BAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8UEAAAC/f//f8YEAAAD+///fyABAAAE+///fx4BAAAG+///fx8BAAAH/f//f/oAAAAI/f//f/sAAAAJ/f//f/wAAAAK/f//f/0AAAAL/f//f/4AAAAL/f//f/8AAAAL/f//fwABAAAL/f//fwEBAAAB+///fyEBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8cEAAAC/f//f8gEAAAD+///fyUBAAAE+///fyMBAAAF+///fyIBAAAG+///fyQBAAAH/f//fwIBAAAI/f//fwMBAAAJ/f//fwQBAAAK/f//fwUBAAAL/f//fwYBAAAL/f//fwcBAAAL/f//fwgBAAAL/f//fwkBAAAB+///fyYBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8kEAAAC/f//f8oEAAAD+///fykBAAAE+///fycBAAAG+///fygBAAAH/f//fwoBAAAI/f//fwsBAAAJ/f//fwwBAAAK/f//fw0BAAAL/f//fw4BAAAL/f//fw8BAAAL/f//fxABAAAL/f//fxEBAAAB+///fyoBAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f8sEAAAC/f//f8wEAAAD+///fy0BAAAE+///fysBAAAG+///fywBAAAH/f//fxIBAAAI/f//fxMBAAAJ/f//fxQBAAAK/f//fxUBAAAL/f//fxYBAAAL/f//fxcBAAAL/f//fxgBAAAL/f//fxkBAAAB+///fy4BAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f80EAAAC/f//f84EAAAD+///fzEBAAAE+///fy8BAAAG+///fzABAAAH/f//fxoBAAAI/f//fxsBAAAJ/f//fxwBAAAK/f//fx0BAAAL/f//fx4BAAAL/f//fx8BAAAL/f//fyABAAAL/f//fyEBAAAB+///fzIBAAAC/f//f88EAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f9AEAAAC/f//f9EEAAAD+///fzYBAAAE+///fzQBAAAF+///fzMBAAAG+///fzUBAAAH/f//fyIBAAAI/f//fyMBAAAJ/f//fyQBAAAK/f//fyUBAAAL/f//fyYBAAAL/f//fycBAAAL/f//fygBAAAL/f//fykBAAAB+///fzcBAAAC/f//f88EAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f9IEAAAC/f//f9MEAAAD+///fzsBAAAE+///fzkBAAAF+///fzgBAAAG+///fzoBAAAH/f//fyoBAAAI/f//fysBAAAJ/f//fywBAAAK/f//fy0BAAAL/f//fy4BAAAL/f//fy8BAAAL/f//fzABAAAL/f//fzEBAAAB+///fzwBAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f9QEAAAC/f//f9UEAAAD+///fz8BAAAE+///fz0BAAAG+///fz4BAAAH/f//fzIBAAAI/f//fzMBAAAJ/f//fzQBAAAK/f//fzUBAAAL/f//fzYBAAAL/f//fzcBAAAL/f//fzgBAAAL/f//fzkBAAAB+///f0ABAAAC/f//f88EAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f9YEAAAC/f//f9cEAAAD+///f0QBAAAE+///f0IBAAAF+///f0EBAAAG+///f0MBAAAH/f//fzoBAAAI/f//fzsBAAAJ/f//fzwBAAAK/f//fz0BAAAL/f//fz4BAAAL/f//fz8BAAAL/f//f0ABAAAL/f//f0EBAAAB+///f0UBAAAC/f//f9gEAAAC/f//f9kEAAAC/f//f9oEAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f9sEAAAC/f//f9wEAAAD+///f0gBAAAE+///f0YBAAAG+///f0cBAAAH/f//f0IBAAAI/f//f0MBAAAJ/f//f0QBAAAK/f//f0UBAAAL/f//f0YBAAAL/f//f0cBAAAL/f//f0gBAAAL/f//f0kBAAAB+///f0kBAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f90EAAAC/f//f94EAAAD+///f0wBAAAE+///f0oBAAAG+///f0sBAAAH/f//f0oBAAAI/f//f0sBAAAJ/f//f0wBAAAK/f//f00BAAAL/f//f04BAAAL/f//f08BAAAL/f//f1ABAAAL/f//f1EBAAAB+///f00BAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f98EAAAC/f//f+AEAAAD+///f1ABAAAE+///f04BAAAG+///f08BAAAH/f//f1IBAAAI/f//f1MBAAAJ/f//f1QBAAAK/f//f1UBAAAL/f//f1YBAAAL/f//f1cBAAAL/f//f1gBAAAL/f//f1kBAAAB+///f1EBAAAC/f//f88EAAAC/f//f+EEAAAC/f//f+IEAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f+MEAAAC/f//f+QEAAAD+///f1UBAAAE+///f1MBAAAF+///f1IBAAAG+///f1QBAAAH/f//f1oBAAAI/f//f1sBAAAJ/f//f1wBAAAK/f//f10BAAAL/f//f14BAAAL/f//f18BAAAL/f//f2ABAAAL/f//f2EBAAAB+///f1YBAAAC/f//f+UEAAAC/f//f+YEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f+cEAAAC/f//f+gEAAAD+///f1oBAAAE+///f1gBAAAF+///f1cBAAAG+///f1kBAAAH/f//f2IBAAAI/f//f2MBAAAJ/f//f2QBAAAK/f//f2UBAAAL/f//f2YBAAAL/f//f2cBAAAL/f//f2gBAAAL/f//f2kBAAAB+///f1sBAAAC/f//f+kEAAAC/f//f+YEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f+oEAAAC/f//f+sEAAAD+///f18BAAAE+///f10BAAAF+///f1wBAAAG+///f14BAAAH/f//f2oBAAAI/f//f2sBAAAJ/f//f2wBAAAK/f//f20BAAAL/f//f24BAAAL/f//f28BAAAL/f//f3ABAAAL/f//f3EBAAAB+///f2ABAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f+wEAAAC/f//f+0EAAAD+///f2MBAAAE+///f2EBAAAG+///f2IBAAAH/f//f3IBAAAI/f//f3MBAAAJ/f//f3QBAAAK/f//f3UBAAAL/f//f3YBAAAL/f//f3cBAAAL/f//f3gBAAAL/f//f3kBAAAB+///f2QBAAAC/f//f+4EAAAC/f//f+8EAAAC/f//f/AEAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f/EEAAAC/f//f/IEAAAD+///f2cBAAAE+///f2UBAAAG+///f2YBAAAH/f//f3oBAAAI/f//f3sBAAAJ/f//f3wBAAAK/f//f30BAAAL/f//f34BAAAL/f//f38BAAAL/f//f4ABAAAL/f//f4EBAAAB+///f2gBAAAC/f//f/MEAAAC/f//f/MEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f/QEAAAC/f//f/UEAAAD+///f2sBAAAE+///f2kBAAAG+///f2oBAAAH/f//f4IBAAAI/f//f4MBAAAJ/f//f4QBAAAK/f//f4UBAAAL/f//f4YBAAAL/f//f4cBAAAL/f//f4gBAAAL/f//f4kBAAAB+///f2wBAAAC/f//f/MEAAAC/f//f/MEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f/YEAAAC/f//f/cEAAAD+///f28BAAAE+///f20BAAAG+///f24BAAAH/f//f4oBAAAI/f//f4sBAAAJ/f//f4wBAAAK/f//f40BAAAL/f//f44BAAAL/f//f48BAAAL/f//f5ABAAAL/f//f5EBAAAB+///f3ABAAAC/f//f88EAAAC/f//f3EEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f/gEAAAC/f//f/kEAAAD+///f3MBAAAE+///f3EBAAAG+///f3IBAAAH/f//f5IBAAAI/f//f5MBAAAJ/f//f5QBAAAK/f//f5UBAAAL/f//f5YBAAAL/f//f5cBAAAL/f//f5gBAAAL/f//f5kBAAAB+///f3QBAAAC/f//f/oEAAAC/f//f/MEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f/sEAAAC/f//f/wEAAAD+///f3cBAAAE+///f3UBAAAG+///f3YBAAAH/f//f5oBAAAI/f//f5sBAAAJ/f//f5wBAAAK/f//f50BAAAL/f//f54BAAAL/f//f58BAAAL/f//f6ABAAAL/f//f6EBAAAB+///f3gBAAAC/f//f/0EAAAC/f//f/4EAAAC/f//f/8EAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fwAFAAAC/f//fwEFAAAD+///f3wBAAAE+///f3oBAAAF+///f3kBAAAG+///f3sBAAAH/f//f6IBAAAI/f//f6MBAAAJ/f//f6QBAAAK/f//f6UBAAAL/f//f6YBAAAL/f//f6cBAAAL/f//f6gBAAAL/f//f6kBAAAB+///f30BAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fwIFAAAC/f//fwMFAAAD+///f4ABAAAE+///f34BAAAG+///f38BAAAH/f//f6oBAAAI/f//f6sBAAAJ/f//f6wBAAAK/f//f60BAAAL/f//f64BAAAL/f//f68BAAAL/f//f7ABAAAL/f//f7EBAAAB+///f4EBAAAC/f//fwQFAAAC/f//fwUFAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fwYFAAAC/f//fwcFAAAD+///f4UBAAAE+///f4MBAAAF+///f4IBAAAG+///f4QBAAAH/f//f7IBAAAI/f//f7MBAAAJ/f//f7QBAAAK/f//f7UBAAAL/f//f7YBAAAL/f//f7cBAAAL/f//f7gBAAAL/f//f7kBAAAB+///f4YBAAAC/f//fwgFAAAC/f//fwkFAAAC/f//fwoFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fwsFAAAC/f//fwwFAAAD+///f4kBAAAE+///f4cBAAAG+///f4gBAAAH/f//f7oBAAAI/f//f7sBAAAJ/f//f7wBAAAK/f//f70BAAAL/f//f74BAAAL/f//f78BAAAL/f//f8ABAAAL/f//f8EBAAAB+///f4oBAAAC/f//fw0FAAAC/f//fw4FAAAC/f//fw8FAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fxAFAAAC/f//fxEFAAAD+///f40BAAAE+///f4sBAAAG+///f4wBAAAH/f//f8IBAAAI/f//f8MBAAAJ/f//f8QBAAAK/f//f8UBAAAL/f//f8YBAAAL/f//f8cBAAAL/f//f8gBAAAL/f//f8kBAAAB+///f44BAAAC/f//f/MEAAAC/f//f/MEAAAD+///f5ABAAAG+///f48BAAAH/f//f8oBAAAI/f//f8sBAAAJ/f//f8wBAAAK/f//f80BAAAB+///f5EBAAAC/f//f2gEAAAC/f//fxIFAAAC/f//fxMFAAAD+///f5QBAAAE+///f5IBAAAG+///f5MBAAAH/f//f84BAAAI/f//f88BAAAJ/f//f9ABAAAK/f//f9EBAAAL/f//f9IBAAAL/f//f9MBAAAB+///f5UBAAAC/f//fxQFAAAC/f//fxUFAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fxYFAAAC/f//fxcFAAAD+///f5gBAAAE+///f5YBAAAG+///f5cBAAAH/f//f9QBAAAI/f//f9UBAAAJ/f//f9YBAAAK/f//f9cBAAAL/f//f9gBAAAL/f//f9kBAAAL/f//f9oBAAAL/f//f9sBAAAB+///f5kBAAAC/f//fxgFAAAC/f//fwUFAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fxkFAAAC/f//fxoFAAAD+///f5wBAAAE+///f5oBAAAG+///f5sBAAAH/f//f9wBAAAI/f//f90BAAAJ/f//f94BAAAK/f//f98BAAAL/f//f+ABAAAL/f//f+EBAAAL/f//f+IBAAAL/f//f+MBAAAB+///f50BAAAC/f//fxsFAAAC/f//fxwFAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fx0FAAAC/f//fx4FAAAD+///f6EBAAAE+///f58BAAAF+///f54BAAAG+///f6ABAAAH/f//f+QBAAAI/f//f+UBAAAJ/f//f+YBAAAK/f//f+cBAAAL/f//f+gBAAAL/f//f+kBAAAL/f//f+oBAAAL/f//f+sBAAAB+///f6IBAAAC/f//f9gEAAAC/f//fx8FAAAC/f//fyAFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fyEFAAAC/f//fyIFAAAD+///f6YBAAAE+///f6QBAAAF+///f6MBAAAG+///f6UBAAAH/f//f+wBAAAI/f//f+0BAAAJ/f//f+4BAAAK/f//f+8BAAAL/f//f/ABAAAL/f//f/EBAAAL/f//f/IBAAAL/f//f/MBAAAB+///f6cBAAAC/f//f2gEAAAC/f//f2kEAAAD+///f6oBAAAE+///f6gBAAAG+///f6kBAAAH/f//f/QBAAAI/f//f/UBAAAJ/f//f/YBAAAK/f//f/cBAAAL/f//f/gBAAAL/f//f/kBAAAB+///f6sBAAAC/f//fyMFAAAC/f//fyQFAAAC/f//fyUFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fyYFAAAC/f//fycFAAAD+///f68BAAAE+///f60BAAAF+///f6wBAAAG+///f64BAAAH/f//f/oBAAAI/f//f/sBAAAJ/f//f/wBAAAK/f//f/0BAAAL/f//f/4BAAAL/f//f/8BAAAL/f//fwACAAAL/f//fwECAAAB+///f7ABAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fygFAAAC/f//fykFAAAD+///f7MBAAAE+///f7EBAAAG+///f7IBAAAH/f//fwICAAAI/f//fwMCAAAJ/f//fwQCAAAK/f//fwUCAAAL/f//fwYCAAAL/f//fwcCAAAL/f//fwgCAAAL/f//fwkCAAAB+///f7QBAAAC/f//fyoFAAAC/f//fysFAAAC/f//fywFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fy0FAAAC/f//fy4FAAAD+///f7cBAAAE+///f7UBAAAG+///f7YBAAAH/f//fwoCAAAI/f//fwsCAAAJ/f//fwwCAAAK/f//fw0CAAAL/f//fw4CAAAL/f//fw8CAAAL/f//fxACAAAL/f//fxECAAAB+///f7gBAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fy8FAAAC/f//fzAFAAAD+///f7sBAAAE+///f7kBAAAG+///f7oBAAAH/f//fxICAAAI/f//fxMCAAAJ/f//fxQCAAAK/f//fxUCAAAL/f//fxYCAAAL/f//fxcCAAAL/f//fxgCAAAL/f//fxkCAAAB+///f7wBAAAC/f//fzEFAAAC/f//fzIFAAAC/f//fzMFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fzQFAAAC/f//fzUFAAAD+///f78BAAAE+///f70BAAAG+///f74BAAAH/f//fxoCAAAI/f//fxsCAAAJ/f//fxwCAAAK/f//fx0CAAAL/f//fx4CAAAL/f//fx8CAAAL/f//fyACAAAL/f//fyECAAAB+///f8ABAAAC/f//f5oEAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fzYFAAAC/f//fzcFAAAD+///f8MBAAAE+///f8EBAAAG+///f8IBAAAH/f//fyICAAAI/f//fyMCAAAJ/f//fyQCAAAK/f//fyUCAAAL/f//fyYCAAAL/f//fycCAAAL/f//fygCAAAL/f//fykCAAAB+///f8QBAAAC/f//fzgFAAAC/f//fzkFAAAC/f//fzoFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fzsFAAAC/f//fzwFAAAD+///f8gBAAAE+///f8YBAAAF+///f8UBAAAG+///f8cBAAAH/f//fyoCAAAI/f//fysCAAAJ/f//fywCAAAK/f//fy0CAAAL/f//fy4CAAAL/f//fy8CAAAL/f//fzACAAAL/f//fzECAAAB+///f8kBAAAC/f//f/MEAAAC/f//f/MEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//fz0FAAAD+///f8sBAAAG+///f8oBAAAH/f//fzICAAAI/f//fzMCAAAJ/f//fzQCAAAK/f//fzUCAAAL/f//fzYCAAAL/f//fzcCAAAB+///f8wBAAAC/f//f2gEAAAC/f//f2kEAAAD+///f9ABAAAE+///f84BAAAF+///f80BAAAG+///f88BAAAH/f//fzgCAAAI/f//fzkCAAAJ/f//fzoCAAAK/f//fzsCAAAL/f//fzwCAAAL/f//fz0CAAAB+///f9EBAAAC/f//fz4FAAAC/f//fz8FAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f0AFAAAC/f//f0EFAAAD+///f9UBAAAE+///f9MBAAAF+///f9IBAAAG+///f9QBAAAH/f//fz4CAAAI/f//fz8CAAAJ/f//f0ACAAAK/f//f0ECAAAL/f//f0ICAAAL/f//f0MCAAAL/f//f0QCAAAL/f//f0UCAAAB+///f9YBAAAC/f//f0IFAAAC/f//f0MFAAAC/f//f0QFAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f0UFAAAC/f//f0YFAAAD+///f9oBAAAE+///f9gBAAAF+///f9cBAAAG+///f9kBAAAH/f//f0YCAAAI/f//f0cCAAAJ/f//f0gCAAAK/f//f0kCAAAL/f//f0oCAAAL/f//f0sCAAAL/f//f0wCAAAL/f//f00CAAAB+///f9sBAAAC/f//f24EAAAC/f//f0cFAAAC/f//f0gFAAAD+///f98BAAAE+///f90BAAAF+///f9wBAAAG+///f94BAAAH/f//f04CAAAI/f//f08CAAAJ/f//f1ACAAAK/f//f1ECAAAL/f//f1ICAAAL/f//f1MCAAAB+///f+ABAAAC/f//f0kFAAAC/f//f24EAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f0oFAAAC/f//f0sFAAAD+///f+MBAAAE+///f+EBAAAG+///f+IBAAAH/f//f1QCAAAI/f//f1UCAAAJ/f//f1YCAAAK/f//f1cCAAAL/f//f1gCAAAL/f//f1kCAAAL/f//f1oCAAAL/f//f1sCAAAA////f2EDAAAD+///f3sAAAAA/P//f+sAAAAD+///f38AAAAAAgAAANcAAAAD+///f4EAAAAA/P//f/cAAAAD+///f4MAAAAACwAAACYAAAAD+///f4UAAAAA////f5YAAAAD+///f4kAAAAA/P//f/cAAAAD+///f40AAAAA////fz8BAAAA////f0IBAAAA////f0IBAAAA////f0IBAAAA////f0IBAAAA+///f1YAAAAA+///f1YAAAAADAAAAIwAAAAADAAAAIwAAAAB+///f+QBAAAC/f//f0wFAAAC/f//f00FAAAC/f//f04FAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f08FAAAC/f//f1AFAAAD+///f+cBAAAE+///f+UBAAAG+///f+YBAAAH/f//f1wCAAAI/f//f10CAAAJ/f//f14CAAAK/f//f18CAAAL/f//f2ACAAAL/f//f2ECAAAL/f//f2ICAAAL/f//f2MCAAAB+///f+gBAAAC/f//f5oEAAAC/f//f1EFAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1IFAAAC/f//f1MFAAAD+///f+sBAAAE+///f+kBAAAG+///f+oBAAAH/f//f2QCAAAI/f//f2UCAAAJ/f//f2YCAAAK/f//f2cCAAAL/f//f2gCAAAL/f//f2kCAAAL/f//f2oCAAAL/f//f2sCAAAB+///f+wBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1QFAAAC/f//f1UFAAAD+///f+8BAAAE+///f+0BAAAG+///f+4BAAAH/f//f2wCAAAI/f//f20CAAAJ/f//f24CAAAK/f//f28CAAAL/f//f3ACAAAL/f//f3ECAAAL/f//f3ICAAAL/f//f3MCAAAB+///f/ABAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1YFAAAC/f//f1cFAAAD+///f/MBAAAE+///f/EBAAAG+///f/IBAAAH/f//f3QCAAAI/f//f3UCAAAJ/f//f3YCAAAK/f//f3cCAAAL/f//f3gCAAAL/f//f3kCAAAL/f//f3oCAAAL/f//f3sCAAAB+///f/QBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1gFAAAC/f//f1kFAAAD+///f/cBAAAE+///f/UBAAAG+///f/YBAAAH/f//f3wCAAAI/f//f30CAAAJ/f//f34CAAAK/f//f38CAAAL/f//f4ACAAAL/f//f4ECAAAL/f//f4ICAAAL/f//f4MCAAAB+///f/gBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1oFAAAC/f//f1sFAAAD+///f/sBAAAE+///f/kBAAAG+///f/oBAAAH/f//f4QCAAAI/f//f4UCAAAJ/f//f4YCAAAK/f//f4cCAAAL/f//f4gCAAAL/f//f4kCAAAL/f//f4oCAAAL/f//f4sCAAAB+///f/wBAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f1wFAAAC/f//f10FAAAD+///f/8BAAAE+///f/0BAAAG+///f/4BAAAH/f//f4wCAAAI/f//f40CAAAJ/f//f44CAAAK/f//f48CAAAL/f//f5ACAAAL/f//f5ECAAAL/f//f5ICAAAL/f//f5MCAAAB+///fwACAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f14FAAAC/f//f18FAAAD+///fwMCAAAE+///fwECAAAG+///fwICAAAH/f//f5QCAAAI/f//f5UCAAAJ/f//f5YCAAAK/f//f5cCAAAL/f//f5gCAAAL/f//f5kCAAAL/f//f5oCAAAL/f//f5sCAAAB+///fwQCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2AFAAAC/f//f2EFAAAD+///fwcCAAAE+///fwUCAAAG+///fwYCAAAH/f//f5wCAAAI/f//f50CAAAJ/f//f54CAAAK/f//f58CAAAL/f//f6ACAAAL/f//f6ECAAAL/f//f6ICAAAL/f//f6MCAAAB+///fwgCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2IFAAAC/f//f2MFAAAD+///fwsCAAAE+///fwkCAAAG+///fwoCAAAH/f//f6QCAAAI/f//f6UCAAAJ/f//f6YCAAAK/f//f6cCAAAL/f//f6gCAAAL/f//f6kCAAAL/f//f6oCAAAL/f//f6sCAAAB+///fwwCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2QFAAAC/f//f2UFAAAD+///fw8CAAAE+///fw0CAAAG+///fw4CAAAH/f//f6wCAAAI/f//f60CAAAJ/f//f64CAAAK/f//f68CAAAL/f//f7ACAAAL/f//f7ECAAAL/f//f7ICAAAL/f//f7MCAAAB+///fxACAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2YFAAAC/f//f2cFAAAD+///fxMCAAAE+///fxECAAAG+///fxICAAAH/f//f7QCAAAI/f//f7UCAAAJ/f//f7YCAAAK/f//f7cCAAAL/f//f7gCAAAL/f//f7kCAAAL/f//f7oCAAAL/f//f7sCAAAB+///fxQCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2gFAAAC/f//f2kFAAAD+///fxcCAAAE+///fxUCAAAG+///fxYCAAAH/f//f7wCAAAI/f//f70CAAAJ/f//f74CAAAK/f//f78CAAAL/f//f8ACAAAL/f//f8ECAAAL/f//f8ICAAAL/f//f8MCAAAB+///fxgCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAAAAAAAAAC/f//f2oFAAAC/f//f2sFAAAD+///fxsCAAAE+///fxkCAAAG+///fxoCAAAH/f//f8QCAAAI/f//f8UCAAAJ/f//f8YCAAAK/f//f8cCAAAL/f//f8gCAAAL/f//f8kCAAAL/f//f8oCAAAL/f//f8sCAAAB+///fxwCAAAC/f//f50EAAAC/f//f2gEAAACAAAAAAAAAAACAAAAAAAAAAACAAAA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AAAAAAAAACAAAAAAAAAAIAAAAAAAAACLL64oBwgIGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAQAAAAAAAAAAAAAAAAAAABwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAgAAAAAAAAACAAAAAAAAADseVkjCAgINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAJd9PWMPCAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAC2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1vZGVHb3JvdXRpbmVPcmllbnRlZAAAAAAAAQtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5Nb2RlVGFza09yaWVudGVkAAAAAAACC2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLk1vZGVUaHJlYWRPcmllbnRlZAAAAAAABAtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5HRGVhZAAAAAAAAAtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5HUnVubmFibGUAAAAAAAELaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1J1bm5pbmcAAAAAAAILaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1dhaXRpbmcAAAAAAAMLaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuR1dhaXRpbmdHQwAAAAAABAtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5nU3RhdGVDb3VudAAAAAAABQtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UaHJlYWRTdGF0ZUluU3lzY2FsbAAAAAAAAAtpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5UaHJlYWRTdGF0ZUluU3lzY2FsbFJ1bnRpbWUAAAAAAAELaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGVSdW5uaW5nAAAAAAACC2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLnRocmVhZFN0YXRlQ291bnQAAAAAAAMIAAAAAAAAAAgAAAAAAAAANgZzWAgICDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADgAAAAAAAAACAAAAAAAAADou3pwBwgIGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAYAAAAAAAAAAAAAAAAAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAAAAAAAAgAAAAAAAAACAAAAAAAAACIRtAVCAgINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAP0fYBEICAg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAqzmCjAcICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwAAAAAAAAAHAAAAAAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAABwAAAAAAAAAGAAAAAAAAAAHUn3xgcICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAASAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAaAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAALbRGTwgICDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAACFMrRqDwgIAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAgAAAAAAAAACAAAAAAAAADXXoD7CAgINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAC/2YcPCAgCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAACAAAAAAAAAAIAAAAAAAAAGi/EzQICAg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABIAAAAAAAAAEgAAAAAAAAAsp8pEQcICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAOAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAhcgcfAkICDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcABUAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAGITHroICAg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAfSPbsA8ICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAwAQAAAAAAACgBAAAAAAAAXsORLAcICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEwAAAAAAAAATAAAAAAAAAAAAAAAAAAAA2AEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAKAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAeAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAuAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA+AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBUAAAAAAAAAAAAAAAAAAAAAAIAkWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAIAkWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWQAAAAAAAAAAAAAAAAAAAAADAJHAegAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAMAkaB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFgAAAAAAAAAAAAAAAAAAAAAAwCRiHoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAADAJGYeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwCRkHkAAAAAAAAAAAAAAAAAAAAAAQBZAAAAAAAAAAAAAAAAAAAAAAMAkZB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJHAeQAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAwCRwHkAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAMAkcB5AAAAAAAAAAAAAAAAAAAAAAMAkcB5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJGQegAAAAAAAAAAAAAAAAAAAAABAFUAAAAAAAAAAAAAAAAAAAAAAwCRkHoAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAMAkZB6AAAAAAAAAAAAAAAAAAAAAAMAkZB6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFgAAAAAAAAAAAAAAAAAAAAAAQBYAAAAAAAAAAAAAAAAAAAAAAMAkbh5AAAAAAAAAAAAAAAAAAAAAAEAWAAAAAAAAAAAAAAAAAAAAAADAJG4eQAAAAAAAAAAAAAAAAAAAAABAFgAAAAAAAAAAAAAAAAAAAAAAwCRuHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkbB5AAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJGweQAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRsHkAAAAAAAAAAAAAAAAAAAAAAwCRsHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMAkZh6AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAwCRyHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkYh5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRqHkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBQkwiTCAAAAAAAAAAAAAAAAAAAAAAIAJGAepMIU5MIAAAAAAAAAAAAAAAAAAAAAAoAkYB6kwiRgHmTCAAAAAAAAAAAAAAAAAAAAAAKAJGAepMIkYB5kwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVAAAAAAAAAAAAAAAAAAAAAADAJHQeQAAAAAAAAAAAAAAAAAAAAADAJHQeQAAAAAAAAAAAAAAAAAAAAADAJHQeQAAAAAAAAAAAAAAAAAAAAABAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAkwhUkwgAAAAAAAAAAAAAAAAAAAAABgCTCJFokwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJGoeQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkah5AAAAAAAAAAAAAAAAAAAAAAMAkah5AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAABAFUAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgP/ABQK6wZVBgIm+VYEjAEDMh4GXwQCBgIwA077BocG9gZfBgMHZAZpBgI2+AZfygaeBksDJTIGA1o9Bi0DAoIDfVsGCM4GXwZjBl8GCAMGZAZBBlYGQQYDAZYGNwZpBjcGCEwGaQa7BmkGAlP3BkEGiQZpBr8GXwZgBkFgBmAGQQZgBl8GA39bBl8COQNr+wMlRgNzWwYCgwEDA/oGAwRGA1pbAwu0QgN6UQMeUANaWwYDHkZDBl8GVgZBBmkGLQZfVmwGNwaTBmnpsQYCsgH5BmkGvwZfBmAGQQZgBl8GYAZfBpEGLQYIpgY3BmkGLQYIA39bBl8GAr8BAwP6BmZ8XAYDXckGXwN/KQMSRgNtWwMLZAN0WwMCZAMeZANfPQavBi0GAwOgBgN8PQZqBJEBA4Z/FQZzBAIGA/oAlgYtBsMGQQYkBigGPUMGVQbhBkEGiAY3Bgj1BkEGAi4DzAD6OgZBBigGLQYkBjkGA6l/HwZBAwVuA8QAggYvBncGKSw4BjUDATIGA34zBi0GAwU8BnMGSi4GNwYhBi0DqX8fA9YAMgYDhn8fAgoAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jNAAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAhQEBDSZjdwCFAQAAAAAAAAAADSZkYXRhAIUBAAAAAAAAAAANJnNpemVzAIUBAAAAAAAAAAANYWxsRnJhbWVzAKYBAAAAAAAAAAANbWF4AKwBAAAAAAAAAAANcwC0AQAAAAAAAAAADGVuYwCKAQAAAAAADXJlcXVpcmVkU2l6ZQCMAQAAAAAAAAAADXN0YXJ0AJQBAAAAAAAAAAANZXZlbnRzU2l6ZQCWAQAAAAAAAAAADWZyYW1lcwCYAQAAAAAAAAAADWZyYW1lc1NpemUAmQEAAAAAAAAAAAx+cjAucHRyACIAAAAAAAx+cjAubGVuACIAAAAAABYAAAAADWkAmwEAAAAAAAAAAA1ldgCbAQAAAAAAAAAAFgAAAAANZW5kVGltZQCzAQAAAAAAAAAADXRvdGFsAKsBAAAAAAAAAAANc3RhcnRUaW1lALIBAAAAAAAAAAAWAAAAAA1pZACgAQAAAAAAAAAAFgAAAAANb2sAogEAAAAAAAAAAA1zAKEBAAAAAAAAAAAAAAAAFgAAAAANZW5kAMUBAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIoAAAAVAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAKEAAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAKgAAAAVAAAAAAAAAAAVAAAAAAAAAAAQAAAAAAAAAAAAACgAAABAAAAAAAAAAIIAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAABQCTCFOTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQBSkwhVkwhUkwgAAAAAAAAAAAAAAAAAAAAADACRaJMIkWCTCJFYkwgAAAAAAAAAAAAAAAAAAAAADACRaJMIkWCTCJFYkwgAAAAAAAAAAAAAAAAAAAAADACRaJMIkWCTCJFYkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA/wAFAqbBjd1ozksVgYsBi0GSwZBBgIi9kkCPAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMzAAAAAAAAAAAAAAAAAAAAAAABnAIAAACCAQESawAAggEAAAAAAAAAABJ2AACCAQAAAAAAAAAADWFsbEZyYW1lcwCDAQAAAAAAAAAAABAAAAAoAQAAAAAAAGQAAAACAAAAAQAAAIsAAAABAAAA/////wEAAAB0AAAAAwAAAJoAAACIAQAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAIAkWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWAAAAAAAAAAAAAAAAAAAAAADAJHAfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAIAkWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVAAAAAAAAAAAAAAAAAAAAAACAJFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJGYfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQCTCFGTCAAAAAAAAAAAAAAAAAAAAAAGAJMIkWiTCAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA94AFArrBlZeBmoGIwZKBjcGZAY3AjX2QAYI7AZpBgIo+QZpBgI6+QYDdmUGAxD/BIwBA8gAHgZfBAIGAikDuH/7BlUGfUIGXwYCGfgGSwYI2gZLBgId+AZfBgKbAfYGXwZWA2dlAh0AAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMgAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAZAESdgAAZAAAAAAAAAAAEnJlcXVpcmVkAABkAAAAAAAAAAANJmRhdGEAZAAAAAAAAAAADWFsbEZyYW1lcwBqAAAAAAAAAAANJmN3AGQAAAAAAAAAAA0mc2l6ZXMAZAAAAAAAAAAADGVuYwB0AAAAAAANc2l6ZQB2AAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAdAAAABUAAAAAAAAAAAAACAAAAFAAAAAAAAAAfAAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAIAkWgAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID9gAUCnMGNwY4BjfgQgYCNfZJAhQAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi40AAAAAAAAAAAAAAAAAAAAAAABnAIAAAB8ARJpZAAAfAAAAAAAAAAADSZzaXplAHwAAAAAAAAAAAAIAAAAUAAAAAAAAAB5AAAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAgCRaAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgPzABQKcwY3BjgGN+BCBgI19kkCFAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5TcGxpdHRpbmdUcmFjZUNvbnN1bWVyLmZ1bmMyLjMAAAAAAAAAAAAAAAAAAAAAAAGcAgAAAHkBEmlkAAB5AAAAAAAAAAANJnNpemUAeQAAAAAAAAAAAAgAAABgAAAAAAAAAG4AAAACAAAAAQAAAJAAAAABAAAA/////wEAAABvAAAABgAAAEgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAIAkWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAACAJFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFCTCJMIAAAAAAAAAAAAAAAAAAAAAAcAkVCTCFOTCAAAAAAAAAAAAAAAAAAAAAAJAJFQkwiRuH+TCAAAAAAAAAAAAAAAAAAAAAAJAJFQkwiRuH+TCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID6AAUCpsGNwbEBJEBA7h/FQZzBAIGA8gAeAYtBqUGQQYCW/ZIAhQAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi4yAAAAAAAAAAAAAAAAAAAAAAABnAIAAABuARJpZAAAbgAAAAAAAAAADSZkYXRhAG4AAAAAAAAAAA1hbGxGcmFtZXMAcAAAAAAAAAAADXMAbwAAAAAAAAAADH5yMC5wdHIAIgAAAAAADH5yMC5sZW4AIgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAG8AAAAVAAAAAAAAAAAAAAgAAABgAAAAAAAAAGoAAAACAAAAAQAAAJAAAAABAAAA/////wEAAABrAAAABgAAAEgAAAAkAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAIAkWgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAACAJFYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFCTCJMIAAAAAAAAAAAAAAAAAAAAAAcAkVCTCFOTCAAAAAAAAAAAAAAAAAAAAAAJAJFQkwiRuH+TCAAAAAAAAAAAAAAAAAAAAAAJAJFQkwiRuH+TCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID5AAUCpsGNwbEBJEBA7x/FQZzBAIGA8QAeAYtBqUGQQYCW/ZIAhQAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuU3BsaXR0aW5nVHJhY2VDb25zdW1lci5mdW5jMi4xAAAAAAAAAAAAAAAAAAAAAAABnAIAAABqARJpZAAAagAAAAAAAAAADSZkYXRhAGoAAAAAAAAAAA1hbGxGcmFtZXMAbAAAAAAAAAAADXMAawAAAAAAAAAADH5yMC5wdHIAIgAAAAAADH5yMC5sZW4AIgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAGsAAAAVAAAAAAAAAAAAABAAAAAIAAAAAAAAAGEAAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA9sAFApVBi0GagY3BghWIQIbAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlNwbGl0dGluZ1RyYWNlQ29uc3VtZXIuZnVuYzEAAAAAAAAAAAAAAAAAAAAAAAGcAgAAAGEBEnVuaXQAAGEAAAAAAAAAAA0mZGF0YQBhAAAAAAAAAAAAIAAAAAAAAAAAAAAA2gAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAkAU5MIUpMIVZMIAAAAAAAAAAAAAAAAAAAAAAgAkwhSkwhVkwgAAAAAAAAAAAAAAAAAAAAABwCTCJMIVZMIAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIGA9QBFAZCLgYtAgUAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpjb3VudGluZ1dyaXRlcikuV3JpdGUAAAAAAAAAAAAAAAAAAAAAAAGcAgAAANoBARJjdwAA2gEAAAAAAAAAABJkYXRhAADaAQAAAAAAAAAAEX5yMAAB2gEAAAAAABF+cjEAAdoBAAAAAAAAIAAAAAAAAAAAAAAA3wAAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAFOTCFKTCFWTCAAAAAAAAAAAAAAAAAAAAAAIAFOTCJMIVZMIAAAAAAAAAAAAAAAAAAAAAAcAU5MIkwiTCAAAAAAAAAAAAAAAAAAAAAAIAFOTCJMIVZMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgYD2QEUBgMURgY6BkMGcwYsLgY1Bi0GLQYoBi0GJAY5BgMBKAYtBhUGcwZKLjUGLQIEAAEBBgAAAAAAAAAAAAAAAAAAAAAAAAAAAZwVAAAAAAAAAAAVAAAAAAAAAAARfnIwAAHfAQAAAAAAEAAAAAAAAAAAABgAAAA4AAAAAAAAAA0BAAACAAAAAQAAAJAAAAABAAAA/////wEAAAAPAQAABgAAAEgAAAAiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAACAJFgAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAACAJFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAgCREAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAJFgAAAAAAAAAAAAAAAAAAAAAAIAkWAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAIAkWAAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgOHAhQKczgGQQZaBkEGKQY3RVFFA389BkEGLQSRAQYDmX5RBi0GQQQCA+cBRgYtBqUGQQYkAwEoA3tHBgh9BjcCBQABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5XYWxrU3RhY2tGcmFtZXMAAAAAAAAAAAAAAAAAAAAAAAGcAgAAAI0CARJhbGxGcmFtZXMAAI0CAAAAAAAAAAASaWQAAI0CAAAAAAAAAAASZm4AAI0CAAAAAAAAAAAWAAAAAA1vawCPAgAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAPAQAAFQAAAAAAAAAAAAAwAAAAUAAAAAAAAAAiAQAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAUJMIU5MIUpMIVZMIAAAAAAAAAAAAAAAAAAAAABEAkWCTCJFokwiRuH+TCJFAkwgAAAAAAAAAAAAAAAAAAAAAEQCRYJMIkWiTCJG4f5MIkUCTCAAAAAAAAAAAAAAAAAAAAAARAJFgkwiRaJMIkbh/kwiRQJMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFQAAAAAAAAAAAAAAAAAAAAAAgCRIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBYAAAAAAAAAAAAAAAAAAAAAAIAkSgAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgOcAhQKmwY32gYIZwYtBgMB8AZBBkIGQQZCBkEGA349iAZV7kJCA389BiMGQQYIgAZBBjgGQQY4BkEGA38zBi0GiAZBBjgGXwY4VlYDflFIBgIp/wZBAgUAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuTmV3RW1pdHRlcgAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAogIBEmMAAKICAAAAAAAAAAAScmFuZ2VTdGFydAAAogIAAAAAAAAAABJyYW5nZUVuZAAAogIAAAAAAAAAABF+cjAAAaICAAAAAAAAEAAAAAAAAAAAAAAASAEAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA8MCFAZVBiRXAgEAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5Hb21heHByb2NzAAAAAAAAAAAAAAAAAAAAAAABnAIAAADIAgESZQAAyAIAAAAAAAAAABJ2AADIAgAAAAAAAAAAACAAAAAgAAAAAAAAAE4BAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAACAJEIAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBSkwhVkwgAAAAAAAAAAAAAAAAAAAAACACREJMIkRiTCAAAAAAAAAAAAAAAAAAAAAAIAJEQkwiRGJMIAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDyAIUCps4BkEIqAZzBlUGAjH2SEkCMgABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlJlc291cmNlAAAAAAAAAAAAAAAAAAAAAAABnAIAAADOAgESZQAAzgIAAAAAAAAAABJpZAAAzgIAAAAAAAAAABJuYW1lAADOAgAAAAAAAAAAABgAAAAIAAAAAAAAAFUBAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAFOTCFKTCAAAAAAAAAAAAAAAAAAAAAAFAFOTCJMIAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDzwIUClUGLQZCBlUGCIghBgh9BhkCAgABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNldFJlc291cmNlVHlwZQAAAAAAAAAAAAAAAAAAAAAAAZwCAAAA1QIBEmUAANUCAAAAAAAAAAASbmFtZQAA1QIAAAAAAAAAAAAQAAAACAAAAAAAAABZAQAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID0wIUClUuBiMGCH4hBnMGQQIRAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU2V0UmVzb3VyY2VGaWx0ZXIAAAAAAAAAAAAAAAAAAAAAAAGcAgAAANkCARJlAADZAgAAAAAAAAAAEmZpbHRlcgAA2QIAAAAAAAAAAAAoAAAAIAAAAAAAAABdAQAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAFKTCFWTCAAAAAAAAAAAAAAAAAAAAAAIAJEQkwiRGJMIAAAAAAAAAAAAAAAAAAAAAAgAkRCTCJEYkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVAAAAAAAAAAAAAAAAAAAAAACAJEgAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID1wIUCnMGOQakBlVWLAYCMvZJAjwAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5UYXNrAAAAAAAAAAAAAAAAAAAAAAABnAIAAADdAgESZQAA3QIAAAAAAAAAABJpZAAA3QIAAAAAAAAAABJuYW1lAADdAgAAAAAAAAAAEnNvcnRJbmRleAAA3QIAAAAAAAAAAABQAAAAcAAAAAAAAABhAQAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHIAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgPbAhQKmzgGVQhOBl8GQQYCJv9CSEkCFAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlNsaWNlAAAAAAAAAAAAAAAAAAAAAAABnAIAAADhAgESZQAA4QIAAAAAAAAAABFzAADhAgAAAAABnABQAAAAcAAAAAAAAABoAQAAAQAAAAEAAAABAAAA/////wEAAABpAQAA+///fzIAAAApAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA+ICFAqbA74DPAabBgPCfGUGQQYDvQNkBi0GxAY3BgPBfGUGNwYCLP9CBgO8A1AGQQPBfBUCFAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLlRhc2tTbGljZQAAAAAAAAAAAAAAAAAAAAAAAZwCAAAA6AIBEmUAAOgCAAAAAAAAAAARcwAA6AIAAAAAAZwJAAAAAAAAAAACAAAAaQEAABUAAAAAAAAAABAAAAAAAAAAAAAAaAAAADgAAAAAAAAAbAEAAAEAAAABAAAABQAAAP////8BAAAAbQEAAPv//38qAAAAMgAAAP////8BAAAAbQEAAPv//38qAAAAMgAAAP////8BAAAAcwEAAPv//38xAAAA3gAAAP////8BAAAAdAEAAPv//38xAAAAagAAAP////8BAAAAcAEAAPv//38rAAAAiwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRyAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAADAJHQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBSkwhVkwgAAAAAAAAAAAAAAAAAAAAACgCR2ACTCJHgAJMIAAAAAAAAAAAAAAAAAAAAAAoAkdgAkwiR4ACTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkcgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID5gIUCpsGA/UBPAYIA4t+WwP0AUYGaQYDi35lBlUGA/QBMgYtBgOLfpcDAlAD0wJGBi0GCAOofRWIBkED1gJuCAOpfTMD1gJuA6l9gwZhBkxIBi4GXwZ+QkIGXwY4BkEGOAZBBjgGQQY4BkHiXnSGBlYGXwYD7QGgBl8GA5R+eQN2R0kCMgABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLnNsaWNlAAAAAAAAAAAAAAAAAAAAAAABnAIAAADsAgESZQAA7AIAAAAAAAAAABFzAADsAgAAAAABnBJzZWN0aW9uSUQAAOwCAAAAAAAAAAASY25hbWUAAOwCAAAAAAAAAAAJAAAAAAAAAAACAAAAbQEAABUAAAAAAAAAABUAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAbQEAABUAAAAAAAAAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAAcwEAAAAJAAAAAAAAAAACAAAAdAEAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAAcAEAABUAAAAAAAAAABUAAAAAAAAAAAAAeAAAAEAAAAAAAAAAiAEAAAEAAAABAAAABwAAAP////8BAAAAiQEAAPv//38qAAAAEgAAAP////8BAAAAiQEAAPv//38qAAAAEgAAAP////8BAAAAkQEAAPv//38yAAAAtwAAAP////8BAAAAmAEAAPv//38xAAAA0QAAAP////8BAAAAlAEAAPv//38rAAAA5AAAAP////8BAAAAowEAAPv//38xAAAAIgIAAP////8BAAAAnwEAAPv//38rAAAAOgIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkfAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQCTCFSTCAAAAAAAAAAAAAAAAAAAAAAGAFKTCFSTCAAAAAAAAAAAAAAAAAAAAAAGAFKTCFSTCAAAAAAAAAAAAAAAAAAAAAAIAJFokwiRWJMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCR8AAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHwAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHwAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCR8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCR8AAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkfAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgOCAxQKmzgD2AFGBmkGA6d+ZQZVBgPYATIGLQYDp36XBgPYAVAGA6p+WwZVAwL6BlwGXwYDlgNGBlUDv35lBgPAATIGLQamBjcGA+l8ZQYlAwVaBgN6b1oDrwJGBi0GA8x9eYgGXwOyAqoDzX37vJgGVgZBCE2ZBi4GXwZ+QgZBBjgGXwZ+Bl8GCLoGQQY4BkEGCAPKAdIGNwYDu35RBkEGA6QCRgYtBgPXfXmIBl8DpwKqA9h9+9BIBlYGQQglSQYuBl8GfkIGQQY4Bl8GfgZfBghqBkEGOAZf9kB0aAZWBkEGA74BoAY3BgPDflEDZkdIBgOcA1AGQQPhfBUGQQY3Ag8AAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5Bc3luY1NsaWNlAAAAAAAAAAAAAAAAAAAAAAABnAIAAACIAwESZQAAiAMAAAAAAAAAABFzAACIAwAAAAABnA1jbmFtZQCPAwAAAAAAAAAACQAAAAAAAAAAAgAAAIkBAAAVAAAAAAAAAAAVAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAIkBAAAVAAAAAAAAAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAJEBAAAQAAAAAAAAAAAACQAAAAAAAAAAAgAAAJgBAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAJQBAAAVAAAAAAAAAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAKMBAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAJ8BAAAVAAAAAAAAAAAVAAAAAAAAAAAAAFAAAAAoAAAAAAAAALQBAAABAAAAAQAAAAMAAAD/////AQAAALUBAAD7//9/KgAAABIAAAD/////AQAAAMEBAAD7//9/MQAAAFcAAAD/////AQAAALwBAAD7//9/KwAAAGoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkcgAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkcgAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJHIAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA64DFAqbOAOsAaAGNwYD035vBgOsAVAGA9Z+PQZVBgME+gOGAkYGLQYD9H15iAZBA4oCbgP1ffu9RwYuBkEIREgGVgZfBn4GXwZ+QmAGQQY4BkEGOGAGQQYIA6EBbgZBBgPgfnkDdUdISQZBBhkCDwABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkluc3RhbnQAAAAAAAAAAAAAAAAAAAAAAAGcAgAAALQDARJlAAC0AwAAAAAAAAAAEWkAALQDAAAAAAGcCQAAAAAAAAAAAgAAALUBAAAVAAAAAAAAAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAAMEBAAAVAAAAAAAAAAAACQAAAAAAAAAAAgAAALwBAAAVAAAAAAAAAAAVAAAAAAAAAAAAAEAAAABQAAAAAAAAANMBAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABUAU5MIUpMIVZMIVJMIWJMIWZMIWpMIAAAAAAAAAAAAAAAAAAAAABQAU5MIkwhVkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgPNAxQKmwZpBgimBlUCKPgGQQZBBgjDQkhJBgI9/wYjAgUAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5BcnJvdwAAAAAAAAAAAAAAAAAAAAAAAZwCAAAA0wMBEmUAANMDAAAAAAAAAAASYQAA0wMAAAAAAAAAAABAAAAAUAAAAAAAAADaAQAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQBTkwhSkwhVkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAFACTCFKTCFWTCFSTCFiTCFmTCFqTCAAAAAAAAAAAAAAAAAAAAAATAJMIkwhVkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAEgCTCJMIkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgPUAxQKcwZpBgimBkEGr0JJAloAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5UYXNrQXJyb3cAAAAAAAAAAAAAAAAAAAAAAAGcAgAAANoDARJlAADaAwAAAAAAAAAAEmEAANoDAAAAAAAAAAAASAAAADAAAAAAAAAA3gEAAAEAAAABAAAABgAAAP////8BAAAA3wEAAPv//38qAAAANQAAAP////8BAAAA3wEAAPv//38qAAAANQAAAP////8BAAAA6QEAAPv//38xAAAAegAAAP////8BAAAA4wEAAPv//38rAAAAjQAAAP////8BAAAA8gEAAPv//38xAAAAJwEAAP////8BAAAA7AEAAPv//38rAAAAOgEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFQBTkwhSkwhVkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAFABTkwiTCFWTCFSTCFiTCFmTCFqTCAAAAAAAAAAAAAAAAAAAAAATAJMIkwhVkwhUkwhYkwhZkwhakwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWwAAAAAAAAAAAAAAAAAAAAADAJHAAAAAAAAAAAAAAAAAAAAAAAABAFsAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA9gDFAqbBmkGCEwDggFGBksGA/1+qwOCAVAGLQYD/X5vBgOCAVAGA4B/bwMCWgPeAUYGLQYDm355iAZBA+MBbgOcfr8D4wFuA5x+R2QDf0cGLgZfBn4GQQY4BkEGOAZBBn5CBkEGA/0APAY3BgOKf1ED1QFGBi0GA6R+eYgGQQPaAW4DpX6/A9oBbgOlfkdkA39HBi4GXwZ+BkEGOAZBBjgGQQZ+A/UARgY3BgOMf1EDcEdJAmQAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5hcnJvdwAAAAAAAAAAAAAAAAAAAAAAAZwCAAAA3gMBEmUAAN4DAAAAAAAAAAASYQAA3gMAAAAAAAAAABJzZWN0aW9uSUQAAN4DAAAAAAAAAAAJAAAAAAAAAAACAAAA3wEAABUAAAAAAAAAABUAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAA3wEAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAA6QEAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAA4wEAABUAAAAAAAAAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAA8gEAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAA7AEAABUAAAAAAAAAABUAAAAAAAAAAAAAEAAAABgAAAAAAAAA/wEAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA/kDFApzOAY3BpJJBggZBiMCAgABAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAGcFQAAAAAAAAAAFQAAAAAAAAAAABgAAAAYAAAAAAAAAAMCAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA/0DFApzODhCSAIlAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSGVhcEFsbG9jAAAAAAAAAAAAAAAAAAAAAAABnAIAAACDBAESZQAAgwQAAAAAAAAAABJ0cwAAgwQAAAAAAAAAABJ2AACDBAAAAAAAAAAAABAAAAAAAAAAAAAAAAgCAAABAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgODBBRWAgEAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5Gb2N1cwAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAiAQBEmUAAIgEAAAAAAAAAAASaWQAAIgEAAAAAAAAAAAAIAAAADAAAAAAAAAADAIAAAEAAAABAAAAAwAAAP////8BAAAAEgIAAPv//38qAAAAcQAAAP////8BAAAAFgIAAPv//38xAAAA7wAAAP////8BAAAAEwIAAPv//38rAAAAvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAIAkQgAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAACAJEIAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAIAkQgAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDhgQUCpsGOAZzBiMGQgY3SgZ0QgY3BggD0gAeBkEGA7B/yQO1AVAGLQYD0H7xBocGQgZBBlYGNwY4BjcGA3wziAZfBnQGXwZ+BksGQmAGVQYIA88A0gZBA7d/eQZBBjcGCCQDdEcGScIGkRgCMgABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkdvcm91dGluZVRyYW5zaXRpb24AAAAAAAAAAAAAAAAAAAAAAAGcAgAAAIwEARJlAACMBAAAAAAAAAAAEnRzAACMBAAAAAAAAAAAEmZyb20AAIwEAAAAAAAAAAASdG8AAIwEAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAEgIAABUAAAAAAAAAABUAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAFgIAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAAEwIAABUAAAAAAAAAABUAAAAAAAAAAAAAIAAAACgAAAAAAAAAIgIAAAEAAAABAAAAAwAAAP////8BAAAAJwIAAPv//38qAAAAbgAAAP////8BAAAAKwIAAPv//38xAAAA7wAAAP////8BAAAAKAIAAPv//38rAAAAvgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDnAQUCpsGOAZzBiMGYAZVBgjYAzxaBjcGA0VvBkcGA6QBRgYtBgPlfvEGhwZCBkEGdAZVBgN9M4gGXwZ0Bl8GfgZLBkJgBlUGCAM60gZBA0x5BkEGVQbiBgNyRwaRGAIyAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuSW5jVGhyZWFkU3RhdGVDb3VudAAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAogQBEmUAAKIEAAAAAAAAAAASdHMAAKIEAAAAAAAAAAASc3RhdGUAAKIEAAAAAAAAAAASZGVsdGEAAKIEAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAJwIAABUAAAAAAAAAABUAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAKwIAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAAKAIAABUAAAAAAAAAABUAAAAAAAAAAAAAGAAAABgAAAAAAAAANwIAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDsQQUCnM8BnMGMAZBBmA9A39HAiUAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5IZWFwR29hbAAAAAAAAAAAAAAAAAAAAAAAAZwCAAAAtwQBEmUAALcEAAAAAAAAAAASdHMAALcEAAAAAAAAAAASdgAAtwQAAAAAAAAAAAAQAAAAMAAAAAAAAABDAgAAAQAAAAEAAAADAAAA/////wEAAABLAgAA+///fyoAAABQAAAA/////wEAAABPAgAA+///fzEAAADRAAAA/////wEAAABMAgAA+///fysAAACgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAACAJFgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgO9BBQKmzgGNwawTjgGLSwDBDIGAxBuBgNmMwMZUAYDaTMGA31HAwhGBgP2AEYGLQYDiX/xBocGCAN/H4gGXwZ0Bl8GfgZLBkJgBlUGCAMWvgZBA2x5BkEGNwaIA3JHAh4AAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5lbWl0SGVhcENvdW50ZXJzAAAAAAAAAAAAAAAAAAAAAAABnAIAAADDBAESZQAAwwQAAAAAAAAAABJ0cwAAwwQAAAAAAAAAAA1kaWZmAMcEAAAAAAAAAAAJAAAAAAAAAAACAAAASwIAABUAAAAAAAAAABUAAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAATwIAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAATAIAABUAAAAAAAAAABUAAAAAAAAAAAAACAAAAHAAAAAAAAAAWAIAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA9IEFAqbOAZBBgiwBksGxQY3BgguBkEGCC4GQQYIQgZBBggDfz0GVQbDBkEGAwNQBiMGA3pbAhQAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5FcnIAAAAAAAAAAAAAAAAAAAAAAAGcAgAAANgEARJlAADYBAAAAAAAAAAAEX5yMAAB2AQAAAAAAAAQAAAAAAAAAAAAAABlAgAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAID4AQUBjcGkQYjAgEAAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAABnBUAAAAAAAAAABUAAAAAAAAAABF+cjAAAeUEAAAAAAAAEAAAABgAAAAAAAAAawIAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUwAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA+UEFApzOAY3BnRJAhsAAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAABnBUAAAAAAAAAABUAAAAAAAAAAAAIAAAAmAAAAAAAAABvAgAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBVkwiTCAAAAAAAAAAAAAAAAAAAAAAGAFWTCFSTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAEAUgAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA+kEFArNBlgGXQZBBs8GXwYIEAZBBrkGQwZfBlUGAj/2Bl8GQUAGpQZ3Bl8G4UMGXwYII0IGXwYII0IGXwYII0IGXwYIN0MGXwYCLwMB+gYjBi0Dfj0GpQZDBl9TL9EpBgMCKAZfBmoDaWUCFAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLkZsdXNoAAAAAAAAAAAAAAAAAAAAAAABnAIAAADvBAESZQAA7wQAAAAAAAAAABcAAAAAAAAAAAAAAAAAAAAADWlkAPUEAAAAAAAAAAAAFwAAAAAAAAAAAAAAAAAAAAANaWQAgAUAAAAAAAAAAA1uYW1lAIAFAAAAAAAAAAAWAAAAAA1wcmlvcml0eQCBBQAAAAAAAAAAAAAAMAAAACgAAAAAAAAAjAIAAAEAAAABAAAAAgAAAP////8BAAAAjQIAAPv//38iAAAAagAAAP////8BAAAAlAIAAPv//38iAAAACQEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAgCRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAIAkRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAVZMIVJMIAAAAAAAAAAAAAAAAAAAAAAgAkRiTCJEgkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWAAAAAAAAAAAAAAAAAAAAAACAJEoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA4YFFAqbBgMKPAYIA3tHBlUGAhsDf/uIBl8GdAZfBn4GQQY4BkEGOAZVBggD8n61BkEGA5QBoAaHBgN/jYgGXwZ0Bl8GfgZBBjgGQQY4BlUGCAPrfr8GQQYDlgGgA3VHAkYAAQEDaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS50aHJlYWRNZXRhAAAAAAAAAAAAAAAAAAAAAAABnAIAAACMBQESZQAAjAUAAAAAAAAAABJzZWN0aW9uSUQAAIwFAAAAAAAAAAASdGlkAACMBQAAAAAAAAAAEm5hbWUAAIwFAAAAAAAAAAAScHJpb3JpdHkAAIwFAAAAAAAAAAAJAAAAAAAAAAACAAAAjQIAABUAAAAAAAAAABUAAAAAAAAAAAAJAAAAAAAAAAACAAAAlAIAABUAAAAAAAAAABUAAAAAAAAAAAAAKAAAACgAAAAAAAAAnQIAAAEAAAABAAAAAgAAAP////8BAAAAngIAAPv//38iAAAAZQAAAP////8BAAAApAIAAPv//38iAAAA+wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAgCRCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBSkwhVkwgAAAAAAAAAAAAAAAAAAAAACACREJMIkRiTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBUAAAAAAAAAAAAAAAAAAAAAAIAkSAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDlwUUCpsGAwg8BggDfBUGVQYCG/uIBl8GdAZfBn4GQQY4BlUGCAPifqsGQQYDowGqBocGjYgGXwZ0Bl8GfgZBBjgGVQYIA9x+qwZBBgOlAaADd0cCPAABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLnByb2Nlc3NNZXRhAAAAAAAAAAAAAAAAAAAAAAABnAIAAACdBQESZQAAnQUAAAAAAAAAABJzZWN0aW9uSUQAAJ0FAAAAAAAAAAASbmFtZQAAnQUAAAAAAAAAABJwcmlvcml0eQAAnQUAAAAAAAAAAAkAAAAAAAAAAAIAAACeAgAAFQAAAAAAAAAAFQAAAAAAAAAAAAkAAAAAAAAAAAIAAACkAgAAFQAAAAAAAAAAFQAAAAAAAAAAAAAgAAAAOAAAAAAAAACuAgAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACQBTkwhSkwhVkwgAAAAAAAAAAAAAAAAAAAAACABTkwiTCFWTCAAAAAAAAAAAAAAAAAAAAAAHAFOTCJMIkwgAAAAAAAAAAAAAAAAAAAAAAAkCAAAAAAAAAAAEAgOoBRQKcwY3BkIGVQYIaAIvAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqRW1pdHRlcikuU3RhY2sAAAAAAAAAAAAAAAAAAAAAAAGcAgAAAK4FARJlAACuBQAAAAAAAAAAEnN0awAArgUAAAAAAAAAABF+cjAAAa4FAAAAAAAAMAAAAJAAAAAAAAAAswIAAAIAAAABAAAAkAAAAAEAAAD/////AQAAAMECAAAGAAAASAAAABkBAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAU5MIUpMIAAAAAAAAAAAAAAAAAAAAAAkAkah/kwiRSJMIAAAAAAAAAAAAAAAAAAAAAAkAkah/kwiRSJMIAAAAAAAAAAAAAAAAAAAAAAYAU5MIUpMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJAFWTCFSTCFiTCAAAAAAAAAAAAAAAAAAAAAAMAJEYkwiRIJMIkSiTCAAAAAAAAAAAAAAAAAAAAAAMAJEYkwiRIJMIkSiTCAAAAAAAAAAAAAAAAAAAAAAJAFWTCFSTCFiTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQCTCFCTCAAAAAAAAAAAAAAAAAAAAAAHAJMIkbh/kwgAAAAAAAAAAAAAAAAAAAAABgBRkwhUkwgAAAAAAAAAAAAAAAAAAAAABQBRkwiTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAgCRQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBTAAAAAAAAAAAAAAAAAAAAAAAJAgAAAAAAAAAABAIDrQUUCs0GVQawBi0GAhn5BkEGRAYtBgguTAZfBu0GQQZCBkEEkQEGAjID53r7Bi0GQQZBBAIGA5kFeAZLAoUB9wYDeG8GXwYDBzIGXwYIGQZBBgN2ZQYtBmcCRgABAQNpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLmJ1aWxkQnJhbmNoAAAAAAAAAAAAAAAAAAAAAAABnAIAAACzBQESZQAAswUAAAAAAAAAABJwYXJlbnQAALMFAAAAAAAAAAASc3RrAACzBQAAAAAAAAAAEX5yMAABswUAAAAAAA1ub2RlALsFAAAAAAAAAAANbGFzdAC3BQAAAAAAAAAADWZyYW1lALgFAAAAAAAAAAANb2sAuwUAAAAAAAAAAAx+cjAucHRyACIAAAAAAAx+cjAubGVuACIAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAADBAgAAAAAIAAAAAAAAAAAAAADLAgAAAQAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA8YFFAYtAhIAAQEGAAAAAAAAAAAAAAAAAAAAAAAAAAABnBUAAAAAAAAAABF+cjAAAcsFAAAAAAAACAAAAAgAAAAAAAAAKgMAAAEAAAABAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQCA6QGFAoZLgZVBkEGIwZ0Bjd8BkECAQABAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAGcFQAAAAAAAAAAEX5yMAABqgYAAAAAABAAAAAAAAAAAAAQAAAAUAAAAAAAAAAaAAAAAgAAAAIAAAADAAAAAQAAAP////8CAAAAHQAAAAEAAABSAAAAIgAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAgCRUAAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAYQAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQDAxQUCps5BkEGfgYtBAQGAzFGBnMEAwYDTskGX0MGXwY3BmoGLa5qNjgCePY5Bl8GNwZBBjcGOAY3Bmo5BjcGJDkuBgN8R3oGQQN+FQIeAAEBA2ludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLigqVGltZUhpc3RvZ3JhbSkuQWRkAAAAAAAAAAAAAAAAAAAAAAABnAMAAAAaARJoAAAaAAAAAAAAAAASZAAAGgAAAAAAAAAADWJ1Y2tldAAbAAAAAAAAAAAIAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAHQAAABUAAAAAAAAAAAAAEAAAABgAAAAAAAAALgAAAAIAAAACAAAAjgAAAAEAAAD/////AgAAAC8AAAABAAAAJQAAAA4AAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAYQAAAAAAAAAAAAAAAAAAAAAACQIAAAAAAAAAAAQDAygUCnM4Bi0EjwEGA2eNBnMEAwYDGNIGQQZKBggZBhkCAgABAQYAAAAAAAAAAAAAAAAAAAAAAAAAAAGcFQAAAAAAAAAAFQAAAAAAAAAAEX5yMAABLgAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAwAAAC8AAAAVAAAAAAAAAAAAABAAAAC4AAAAAAAAADMAAAADAAAAAgAAAAoAAACOAAAACwAAAP////8CAAAARgAAAPv//380AAAAbAEAAP////8CAAAARgAAAPv//380AAAAbAEAAAAAAAACAAAALwAAAAEAAAAlAAAAcAEAAAEAAAACAAAALwAAAAEAAAAlAAAAigEAAP////8CAAAARgAAAPv//380AAAAbAEAAAQAAAACAAAALwAAAAEAAAAlAAAAEQIAAP////8CAAAASAAAAPv//380AAAABQMAAAYAAAACAAAALwAAAAEAAAAlAAAA2AIAAP////8CAAAAUwAAAPv//380AAAAJQQAAAgAAAACAAAALwAAAAEAAAAlAAAAKQQAAP////8CAAAAVQAAAAkAAAADAAAA7QQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFMAAAAAAAAAAAAAAAAAAAAAAgCRCAAAAAAAAAAAAAAAAAAAAAACAJEIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFUAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAMAkYh/AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRsH8AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAMAkZB/AAAAAAAAAAAAAAAAAAAAAAMAkZB/AAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAADAJGQfwAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAwCRkH8AAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJGQfwAAAAAAAAAAAAAAAAAAAAABAFEAAAAAAAAAAAAAAAAAAAAAAwCRkH8AAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAMAkZB/AAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBiAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAEAnAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAABAJwAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJGQfwAAAAAAAAAAAAAAAAAAAAABAFEAAAAA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mgAAAHcBAAD/////JQAAAKsAAAAPAAAAKgAAAG4IAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAQCcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAFOTCFKTCAAAAAAAAAAAAAAAAAAAAAAIAJEIkwiREJMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFUAAAAAAAAAAAAAAAAAAAAAAgCRGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAMAkYh+AAAAAAAAAAAAAAAAAAAAAAEAVQAAAAAAAAAAAAAAAAAAAAADAJGIfgAAAAAAAAAAAAAAAAAAAAADAJGIfgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAwCRqH0AAAAAAAAAAAAAAAAAAAAAAQBRAAAAAAAAAAAAAAAAAAAAAAMAkah9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAJFoAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAACAJFoAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCR8H0AAAAAAAAAAAAAAAAAAAAAAwCRsH0AAAAAAAAAAAAAAAAAAAAAAwCRsH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAWQAAAAAAAAAAAAAAAAAAAAABAFsAAAAAAAAAAAAAAAAAAAAAAQBZAAAAAAAAAAAAAAAAAAAAAAEAWwAAAAAAAAAAAAAAAAAAAAABAFkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVQAAAAAAAAAAAAAAAAAAAAABAFQAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAgCRYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBhAAAAAAAAAAAAAAAAAAAAAAMAkaB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGEAAAAAAAAAAAAAAAAAAAAAAwCRmH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAUJMIkwiTCAAAAAAAAAAAAAAAAAAAAAAIAFCTCFOTCJMIAAAAAAAAAAAAAAAAAAAAAAkAUJMIU5MIUpMIAAAAAAAAAAAAAAAAAAAAAA8AkYB+kwiRyH2TCJHQfZMIAAAAAAAAAAAAAAAAAAAAAA8AkYB+kwiRyH2TCJHQfZMIAAAAAAAAAAAAAAAAAAAAAA8AkYB+kwiRyH2TCJHQfZMIAAAAAAAAAAAAAAAAAAAAAAkAUJMIU5MIUpMIAAAAAAAAAAAAAAAAAAAAAAgAkwhTkwhSkwgAAAAAAAAAAAAAAAAAAAAABwCTCJMIUpMIAAAAAAAAAAAAAAAAAAAAAA8AkYB+kwiRyH2TCJHQfZMIAAAAAAAAAAAAAAAAAAAAAA8AkYB+kwiRyH2TCJHQfZMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFSTCJMIAAAAAAAAAAAAAAAAAAAAAAYAVJMIWJMIAAAAAAAAAAAAAAAAAAAAAAUAkwhYkwgAAAAAAAAAAAAAAAAAAAAABQBQkwiTCAAAAAAAAAAAAAAAAAAAAAAGAFCTCFOTCAAAAAAAAAAAAAAAAAAAAAAFAJMIU5MIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAHAFCTCJMIkwgAAAAAAAAAAAAAAAAAAAAACABQkwiTCFKTCAAAAAAAAAAAAAAAAAAAAAAMAJH4fZMIkwiRwH2TCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwBQkwiTCJMIAAAAAAAAAAAAAAAAAAAAAAgAkViTCJMIkwgAAAAAAAAAAAAAAAAAAAAACACRWJMIkwiTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBUAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAGEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAkwhakwgAAAAAAAAAAAAAAAAAAAAABgBUkwhakwgAAAAAAAAAAAAAAAAAAAAABQCTCFqTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBVAAAAAAAAAAAAAAAAAAAAAAMAkfB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJHYfQAAAAAAAAAAAAAAAAAAAAABAFIAAAAAAAAAAAAAAAAAAAAAAwCR2H0AAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAMAkdh9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAJG4fQAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRuH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAUJMIkwgAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAVQAAAAAAAAAAAAAAAAAAAAADAJGIfgAAAAAAAAAAAAAAAAAAAAABAFUAAAAA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AEkAAAAQAAAARQAAANEFAAD/////WQAAAEoAAAAQAAAARQAAAPIFAAD/////WQAAAE8AAAAKAAAA8AIAAO4HAAAHAAAAKwAAACgAAAASAAAAAgAAAAwIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAABwCckwiRCJMIAAAAAAAAAAAAAAAAAAAAAAcAnJMIkQiTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBSAAAAAAAAAAAAAAAAAAAAAAIAkRAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUQAAAAAAAAAAAAAAAAAAAAADAJHAfQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkaB9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRyH0AAAAAAAAAAAAAAAAAAAAAAwCRyH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAU5MIkwgAAAAAAAAAAAAAAAAAAAAABgBTkwhSkwgAAAAAAAAAAAAAAAAAAAAABQCTCFKTCAAAAAAAAAAAAAAAAAAAAAAFAFOTCJMIAAAAAAAAAAAAAAAAAAAAAAUAVZMIkwgAAAAAAAAAAAAAAAAAAAAABgBVkwhUkwgAAAAAAAAAAAAAAAAAAAAABQCTCFSTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABwBQkwiTCJMIAAAAAAAAAAAAAAAAAAAAAAoAkbB9kwhTkwiTCAAAAAAAAAAAAAAAAAAAAAANAJGwfZMIkah8kwhSkwgAAAAAAAAAAAAAAAAAAAAADwCRsH2TCJGofJMIkbB8kwgAAAAAAAAAAAAAAAAAAAAADwCRsH2TCJGofJMIkbB8kwgAAAAAAAAAAAAAAAAAAAAADwCRsH2TCJGofJMIkbB8kwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAUJMIkwgAAAAAAAAAAAAAAAAAAAAACACRqH2TCFOTCAAAAAAAAAAAAAAAAAAAAAAKAJGofZMIkaB8kwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAUJMIkwiTCAAAAAAAAAAAAAAAAAAAAAAIAFCTCFOTCJMIAAAAAAAAAAAAAAAAAAAAAAkAUJMIU5MIUpMIAAAAAAAAAAAAAAAAAAAAAAgAkwhTkwhSkwgAAAAAAAAAAAAAAAAAAAAABwCTCJMIUpMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFWTCJMIAAAAAAAAAAAAAAAAAAAAAAYAVZMIVJMIAAAAAAAAAAAAAAAAAAAAAAUAkwhUkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAUJMIkwgAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAABQCTCFOTCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABQBQkwiTCAAAAAAAAAAAAAAAAAAAAAAGAFCTCFOTCAAAAAAAAAAAAAAAAAAAAAAFAJMIU5MIAAAAAAAAAAAAAAAAAAAAAAUAkwhTkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAUJMIkwgAAAAAAAAAAAAAAAAAAAAABgBQkwhTkwgAAAAAAAAAAAAAAAAAAAAABQCTCFOTCAAAAAAAAAAAAAAAAAAAAAAFAJMIU5MIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAFiTCFmTCAAAAAAAAAAAAAAAAAAAAAAFAJMIWZMIAAAAAAAAAAAAAAAAAAAAAAUAkwhZkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAcAUJMIkwiTCAAAAAAAAAAAAAAAAAAAAAAIAFCTCFOTCJMIAAAAAAAAAAAAAAAAAAAAAAkAUJMIU5MIUpMIAAAAAAAAAAAAAAAAAAAAAAgAUJMIU5MIkwgAAAAAAAAAAAAAAAAAAAAABwBQkwiTCJMIAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAFWTCJMIAAAAAAAAAAAAAAAAAAAAAAYAVZMIVJMIAAAAAAAAAAAAAAAAAAAAAAUAkwhUkwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAAAAAAAAADAJG4fQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkbh9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAFAJMIUJMIAAAAAAAAAAAAAAAAAAAAAAcAkwiRyH2TCAAAAAAAAAAAAAAAAAAAAAAHAJMIkch9kwgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAkwhQkwgAAAAAAAAAAAAAAAAAAAAABwCTCJHIfZMIAAAAAAAAAAAAAAAAAAAAAAcAkwiRyH2TCAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQBQAAAAAAAAAAAAAAAAAAAAAAMAkch9AAAAAAAAAAAAAAAAAAAAAAMAkch9AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAFAAAAAAAAAAAAAAAAAAAAAAAwCRyH0AAAAAAAAAAAAAAAAAAAAAAwCRyH0AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAUAAAAAAAAAAAAAAA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bnRpbmdXcml0ZXIAGmludGVybmFsL3RyYWNlL3RyYWNldmlld2VyAARzaXplADgqZnVuYygqdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXIsIFtddWludDgpIChpbnQsIGVycm9yKQEFV3JpdGUAGypmdW5jKFtddWludDgpIChpbnQsIGVycm9yKQAAAAAAAAAAAAAAAAAAAAAbK727AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAMjGfXcAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA3wCi1AAAAAAAAAAAAAAAAHRocmVhZF9zdGF0ZV91bmludGVycnVwdGlibGV0aHJlYWRfc3RhdGVfaW93YWl0dGhyZWFkX3N0YXRlX3J1bm5pbmd0aHJlYWRfc3RhdGVfcnVubmFibGV0aHJlYWRfc3RhdGVfdW5rbm93bmxpZ2h0X21lbW9yeV9kdW1wYmFja2dyb3VuZF9tZW1vcnlfZHVtcGRldGFpbGVkX21lbW9yeV9kdW1wcmFpbF9yZXNwb25zZXJhaWxfYW5pbWF0aW9ucmFpbF9pZGxlcmFpbF9sb2FkaGVhcF9kdW1wX2NoaWxkX25vZGVfYXJyb3djcV9idWlsZF9ydW5uaW5nY3FfYnVpbGRfcGFzc2VkY3FfYnVpbGRfZmFpbGVkY3FfYnVpbGRfYWJhbmRvbmVkY3FfYnVpbGRfYXR0ZW1wdF9ydW5uaWdjcV9idWlsZF9hdHRlbXB0X3Bhc3NlZAo8aHRtbD4KPGhlYWQ+CjxzY3JpcHQgc3JjPSIvc3RhdGljL3dlYmNvbXBvbmVudHMubWluLmpzIj48L3NjcmlwdD4KPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwoKZnVuY3Rpb24gb25UcmFjZVZpZXdlckltcG9ydEZhaWwoKSB7CiAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignRE9NQ29udGVudExvYWRlZCcsIGZ1bmN0aW9uKCkgewogICAgZG9jdW1lbnQuYm9keS50ZXh0Q29udGVudCA9CiAgICAnL3N0YXRpYy90cmFjZV92aWV3ZXJfZnVsbC5odG1sIGlzIG1pc3NpbmcuIEZpbGUgYSBidWcgaW4gaHR0cHM6Ly9nb2xhbmcub3JnL2lzc3VlJzsKICB9KTsKfQo8L3NjcmlwdD4KCjxsaW5rIHJlbD0iaW1wb3J0IiBocmVmPSIvc3RhdGljL3RyYWNlX3ZpZXdlcl9mdWxsLmh0bWwiCiAgICAgIG9uZXJyb3I9Im9uVHJhY2VWaWV3ZXJJbXBvcnRGYWlsKGV2ZW50KSI+Cgo8c3R5bGUgdHlwZT0idGV4dC9jc3MiPgogIGh0bWwsIGJvZHkgewogICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICBtYXJnaW46IDBweDsKICAgIHBhZGRpbmc6IDA7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICB9CiAgI3RyYWNlLXZpZXdlciB7CiAgICB3aWR0aDogMTAwJTsKICAgIGhlaWdodDogMTAwJTsKICB9CiAgI3RyYWNlLXZpZXdlcjpmb2N1cyB7CiAgICBvdXRsaW5lOiBub25lOwogIH0KPC9zdHlsZT4KPHNjcmlwdD4KJ3VzZSBzdHJpY3QnOwooZnVuY3Rpb24oKSB7CiAgdmFyIHZpZXdlcjsKICB2YXIgdXJsOwogIHZhciBtb2RlbDsKCiAgZnVuY3Rpb24gbG9hZCgpIHsKICAgIHZhciByZXEgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKICAgIHZhciBpc0JpbmFyeSA9IC9bLl1neiQvLnRlc3QodXJsKSB8fCAvWy5demlwJC8udGVzdCh1cmwpOwogICAgcmVxLm92ZXJyaWRlTWltZVR5cGUoJ3RleHQvcGxhaW47IGNoYXJzZXQ9eC11c2VyLWRlZmluZWQnKTsKICAgIHJlcS5vcGVuKCdHRVQnLCB1cmwsIHRydWUpOwogICAgaWYgKGlzQmluYXJ5KQogICAgICByZXEucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJzsKCiAgICByZXEub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oZXZlbnQpIHsKICAgICAgaWYgKHJlcS5yZWFkeVN0YXRlICE9PSA0KQogICAgICAgIHJldHVybjsKCiAgICAgIHdpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgewogICAgICAgIGlmIChyZXEuc3RhdHVzID09PSAyMDApCiAgICAgICAgICBvblJlc3VsdChpc0JpbmFyeSA/IHJlcS5yZXNwb25zZSA6IHJlcS5yZXNwb25zZVRleHQpOwogICAgICAgIGVsc2UKICAgICAgICAgIG9uUmVzdWx0RmFpbChyZXEuc3RhdHVzKTsKICAgICAgfSwgMCk7CiAgICB9OwogICAgcmVxLnNlbmQobnVsbCk7CiAgfQoKICBmdW5jdGlvbiBvblJlc3VsdEZhaWwoZXJyKSB7CiAgICB2YXIgb3ZlcmxheSA9IG5ldyB0ci51aS5iLk92ZXJsYXkoKTsKICAgIG92ZXJsYXkudGV4dENvbnRlbnQgPSBlcnIgKyAnOiAnICsgdXJsICsgJyBjb3VsZCBub3QgYmUgbG9hZGVkJzsKICAgIG92ZXJsYXkudGl0bGUgPSAnRmFpbGVkIHRvIGZldGNoIGRhdGEnOwogICAgb3ZlcmxheS52aXNpYmxlID0gdHJ1ZTsKICB9CgogIGZ1bmN0aW9uIG9uUmVzdWx0KHJlc3VsdCkgewogICAgbW9kZWwgPSBuZXcgdHIuTW9kZWwoKTsKICAgIHZhciBvcHRzID0gbmV3IHRyLmltcG9ydGVyLkltcG9ydE9wdGlvbnMoKTsKICAgIG9wdHMuc2hpZnRXb3JsZFRvWmVybyA9IGZhbHNlOwogICAgdmFyIGkgPSBuZXcgdHIuaW1wb3J0ZXIuSW1wb3J0KG1vZGVsLCBvcHRzKTsKICAgIHZhciBwID0gaS5pbXBvcnRUcmFjZXNXaXRoUHJvZ3Jlc3NEaWFsb2coW3Jlc3VsdF0pOwogICAgcC50aGVuKG9uTW9kZWxMb2FkZWQsIG9uSW1wb3J0RmFpbCk7CiAgfQoKICBmdW5jdGlvbiBvbk1vZGVsTG9hZGVkKCkgewogICAgdmlld2VyLm1vZGVsID0gbW9kZWw7CiAgICB2aWV3ZXIudmlld1RpdGxlID0gInRyYWNlIjsKCiAgICBpZiAoIW1vZGVsIHx8IG1vZGVsLmJvdW5kcy5pc0VtcHR5KQogICAgICByZXR1cm47CiAgICB2YXIgc2VsID0gd2luZG93LmxvY2F0aW9uLmhhc2guc3Vic3RyKDEpOwogICAgaWYgKHNlbCA9PT0gJycpCiAgICAgIHJldHVybjsKICAgIHZhciBwYXJ0cyA9IHNlbC5zcGxpdCgnOicpOwogICAgdmFyIHJhbmdlID0gbmV3ICh0ci5iLlJhbmdlIHx8IHRyLmIubWF0aC5SYW5nZSkoKTsKICAgIHJhbmdlLmFkZFZhbHVlKHBhcnNlRmxvYXQocGFydHNbMF0pKTsKICAgIHJhbmdlLmFkZFZhbHVlKHBhcnNlRmxvYXQocGFydHNbMV0pKTsKICAgIHZpZXdlci50cmFja1ZpZXcudmlld3BvcnQuaW50ZXJlc3RSYW5nZS5zZXQocmFuZ2UpOwogIH0KCiAgZnVuY3Rpb24gb25JbXBvcnRGYWlsKGVycikgewogICAgdmFyIG92ZXJsYXkgPSBuZXcgdHIudWkuYi5PdmVybGF5KCk7CiAgICBvdmVybGF5LnRleHRDb250ZW50ID0gdHIuYi5ub3JtYWxpemVFeGNlcHRpb24oZXJyKS5tZXNzYWdlOwogICAgb3ZlcmxheS50aXRsZSA9ICdJbXBvcnQgZXJyb3InOwogICAgb3ZlcmxheS52aXNpYmxlID0gdHJ1ZTsKICB9CgogIGRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ1dlYkNvbXBvbmVudHNSZWFkeScsIGZ1bmN0aW9uKCkgewogICAgdmFyIGNvbnRhaW5lciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyYWNrLXZpZXctY29udGFpbmVyJyk7CiAgICBjb250YWluZXIuaWQgPSAndHJhY2tfdmlld19jb250YWluZXInOwoKICAgIHZpZXdlciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLXRpbWVsaW5lLXZpZXcnKTsKICAgIHZpZXdlci50cmFja192aWV3X2NvbnRhaW5lciA9IGNvbnRhaW5lcjsKICAgIFBvbHltZXIuZG9tKHZpZXdlcikuYXBwZW5kQ2hpbGQoY29udGFpbmVyKTsKCiAgICB2aWV3ZXIuaWQgPSAndHJhY2Utdmlld2VyJzsKICAgIHZpZXdlci5nbG9iYWxNb2RlID0gdHJ1ZTsKICAgIFBvbHltZXIuZG9tKGRvY3VtZW50LmJvZHkpLmFwcGVuZENoaWxkKHZpZXdlcik7CgogICAgdXJsID0gJy9qc29udHJhY2U/e3tQQVJBTVN9fSc7CiAgICBsb2FkKCk7CiAgfSk7Cn0oKSk7Cjwvc2NyaXB0Pgo8L2hlYWQ+Cjxib2R5Pgo8L2JvZHk+CjwvaHRtbD4KPCFkb2N0eXBlIGh0bWw+CjxodG1sPgogIDxoZWFkPgogICAgPG1ldGEgY2hhcnNldD0idXRmLTgiPgogICAgPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ3N0YXRpYy5jb20vY2hhcnRzL2xvYWRlci5qcyI+PC9zY3JpcHQ+CiAgICA8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSJodHRwczovL2FqYXguZ29vZ2xlYXBpcy5jb20vYWpheC9saWJzL2pxdWVyeS8zLjIuMS9qcXVlcnkubWluLmpzIj48L3NjcmlwdD4KICAgIDxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0Ij4KICAgICAgZ29vZ2xlLmNoYXJ0cy5sb2FkKCdjdXJyZW50JywgeydwYWNrYWdlcyc6Wydjb3JlY2hhcnQnXX0pOwogICAgICB2YXIgY2hhcnRzUmVhZHkgPSBmYWxzZTsKICAgICAgZ29vZ2xlLmNoYXJ0cy5zZXRPbkxvYWRDYWxsYmFjayhmdW5jdGlvbigpIHsgY2hhcnRzUmVhZHkgPSB0cnVlOyByZWZyZXNoQ2hhcnQoKTsgfSk7CgogICAgICB2YXIgY2hhcnQ7CiAgICAgIHZhciBjdXJ2ZTsKCiAgICAgIGZ1bmN0aW9uIG5pY2VEdXJhdGlvbihucykgewogICAgICAgICAgaWYgKG5zIDwgMWUzKSB7IHJldHVybiBucyArICducyc7IH0KICAgICAgICAgIGVsc2UgaWYgKG5zIDwgMWU2KSB7IHJldHVybiBucyAvIDFlMyArICfCtXMnOyB9CiAgICAgICAgICBlbHNlIGlmIChucyA8IDFlOSkgeyByZXR1cm4gbnMgLyAxZTYgKyAnbXMnOyB9CiAgICAgICAgICBlbHNlIHsgcmV0dXJuIG5zIC8gMWU5ICsgJ3MnOyB9CiAgICAgIH0KCiAgICAgIGZ1bmN0aW9uIG5pY2VRdWFudGlsZShxKSB7CiAgICAgICAgcmV0dXJuICdwJyArIHEqMTAwOwogICAgICB9CgogICAgICBmdW5jdGlvbiBtbXVGbGFncygpIHsKICAgICAgICB2YXIgZmxhZ3MgPSAiIjsKICAgICAgICAkKCIjb3B0aW9ucyBpbnB1dCIpLmVhY2goZnVuY3Rpb24oaSwgZWx0KSB7CiAgICAgICAgICBpZiAoZWx0LmNoZWNrZWQpCiAgICAgICAgICAgIGZsYWdzICs9ICJ8IiArIGVsdC5pZDsKICAgICAgICB9KTsKICAgICAgICByZXR1cm4gZmxhZ3Muc3Vic3RyKDEpOwogICAgICB9CgogICAgICBmdW5jdGlvbiByZWZyZXNoQ2hhcnQoKSB7CiAgICAgICAgaWYgKCFjaGFydHNSZWFkeSkgcmV0dXJuOwogICAgICAgIHZhciBjb250YWluZXIgPSAkKCcjbW11X2NoYXJ0Jyk7CiAgICAgICAgY29udGFpbmVyLmNzcygnb3BhY2l0eScsICcuNScpOwogICAgICAgIHJlZnJlc2hDaGFydC5jb3VudCsrOwogICAgICAgIHZhciBzZXEgPSByZWZyZXNoQ2hhcnQuY291bnQ7CiAgICAgICAgJC5nZXRKU09OKCc/bW9kZT1wbG90JmZsYWdzPScgKyBtbXVGbGFncygpKQogICAgICAgICAuZmFpbChmdW5jdGlvbih4aHIsIHN0YXR1cywgZXJyb3IpIHsKICAgICAgICAgICBhbGVydCgnZmFpbGVkIHRvIGxvYWQgcGxvdDogJyArIHN0YXR1cyk7CiAgICAgICAgIH0pCiAgICAgICAgIC5kb25lKGZ1bmN0aW9uKHJlc3VsdCkgewogICAgICAgICAgIGlmIChyZWZyZXNoQ2hhcnQuY291bnQgPT09IHNlcSkKICAgICAgICAgICAgIGRyYXdDaGFydChyZXN1bHQpOwogICAgICAgICB9KTsKICAgICAgfQogICAgICByZWZyZXNoQ2hhcnQuY291bnQgPSAwOwoKICAgICAgZnVuY3Rpb24gZHJhd0NoYXJ0KHBsb3REYXRhKSB7CiAgICAgICAgY3VydmUgPSBwbG90RGF0YS5jdXJ2ZTsKICAgICAgICB2YXIgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKICAgICAgICBkYXRhLmFkZENvbHVtbignbnVtYmVyJywgJ1dpbmRvdyBkdXJhdGlvbicpOwogICAgICAgIGRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnTWluaW11bSBtdXRhdG9yIHV0aWxpemF0aW9uJyk7CiAgICAgICAgaWYgKHBsb3REYXRhLnF1YW50aWxlcykgewogICAgICAgICAgZm9yICh2YXIgaSA9IDE7IGkgPCBwbG90RGF0YS5xdWFudGlsZXMubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsIG5pY2VRdWFudGlsZSgxIC0gcGxvdERhdGEucXVhbnRpbGVzW2ldKSArICcgTVUnKTsKICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZGF0YS5hZGRSb3dzKGN1cnZlKTsKICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGN1cnZlLmxlbmd0aDsgaSsrKSB7CiAgICAgICAgICBkYXRhLnNldEZvcm1hdHRlZFZhbHVlKGksIDAsIG5pY2VEdXJhdGlvbihjdXJ2ZVtpXVswXSkpOwogICAgICAgIH0KCiAgICAgICAgdmFyIG9wdGlvbnMgPSB7CiAgICAgICAgICBjaGFydDogewogICAgICAgICAgICB0aXRsZTogJ01pbmltdW0gbXV0YXRvciB1dGlsaXphdGlvbicsCiAgICAgICAgICB9LAogICAgICAgICAgaEF4aXM6IHsKICAgICAgICAgICAgdGl0bGU6ICdXaW5kb3cgZHVyYXRpb24nLAogICAgICAgICAgICBzY2FsZVR5cGU6ICdsb2cnLAogICAgICAgICAgICB0aWNrczogW10sCiAgICAgICAgICB9LAogICAgICAgICAgdkF4aXM6IHsKICAgICAgICAgICAgdGl0bGU6ICdNaW5pbXVtIG11dGF0b3IgdXRpbGl6YXRpb24nLAogICAgICAgICAgICBtaW5WYWx1ZTogMC4wLAogICAgICAgICAgICBtYXhWYWx1ZTogMS4wLAogICAgICAgICAgfSwKICAgICAgICAgIGxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCiAgICAgICAgICBmb2N1c1RhcmdldDogJ2NhdGVnb3J5JywKICAgICAgICAgIHdpZHRoOiA5MDAsCiAgICAgICAgICBoZWlnaHQ6IDUwMCwKICAgICAgICAgIGNoYXJ0QXJlYTogeyB3aWR0aDogJzgwJScsIGhlaWdodDogJzgwJScgfSwKICAgICAgICB9OwogICAgICAgIGZvciAodmFyIHYgPSBwbG90RGF0YS54TWluOyB2IDw9IHBsb3REYXRhLnhNYXg7IHYgKj0gMTApIHsKICAgICAgICAgIG9wdGlvbnMuaEF4aXMudGlja3MucHVzaCh7djp2LCBmOm5pY2VEdXJhdGlvbih2KX0pOwogICAgICAgIH0KICAgICAgICBpZiAocGxvdERhdGEucXVhbnRpbGVzKSB7CiAgICAgICAgICBvcHRpb25zLnZBeGlzLnRpdGxlID0gJ011dGF0b3IgdXRpbGl6YXRpb24nOwogICAgICAgICAgb3B0aW9ucy5sZWdlbmQucG9zaXRpb24gPSAnaW4nOwogICAgICAgIH0KCiAgICAgICAgdmFyIGNvbnRhaW5lciA9ICQoJyNtbXVfY2hhcnQnKTsKICAgICAgICBjb250YWluZXIuZW1wdHkoKTsKICAgICAgICBjb250YWluZXIuY3NzKCdvcGFjaXR5JywgJycpOwogICAgICAgIGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkxpbmVDaGFydChjb250YWluZXJbMF0pOwogICAgICAgIGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkxpbmVDaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnbW11X2NoYXJ0JykpOwogICAgICAgIGNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgogICAgICAgIGdvb2dsZS52aXN1YWxpemF0aW9uLmV2ZW50cy5hZGRMaXN0ZW5lcihjaGFydCwgJ3NlbGVjdCcsIHNlbGVjdEhhbmRsZXIpOwogICAgICAgICQoJyNkZXRhaWxzJykuZW1wdHkoKTsKICAgICAgfQoKICAgICAgZnVuY3Rpb24gc2VsZWN0SGFuZGxlcigpIHsKICAgICAgICB2YXIgaXRlbXMgPSBjaGFydC5nZXRTZWxlY3Rpb24oKTsKICAgICAgICBpZiAoaXRlbXMubGVuZ3RoID09PSAwKSB7CiAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgICAgIHZhciBkZXRhaWxzID0gJCgnI2RldGFpbHMnKTsKICAgICAgICBkZXRhaWxzLmVtcHR5KCk7CiAgICAgICAgdmFyIHdpbmRvd05TID0gY3VydmVbaXRlbXNbMF0ucm93XVswXTsKICAgICAgICB2YXIgdXJsID0gJz9tb2RlPWRldGFpbHMmd2luZG93PScgKyB3aW5kb3dOUyArICcmZmxhZ3M9JyArIG1tdUZsYWdzKCk7CiAgICAgICAgJC5nZXRKU09OKHVybCkKICAgICAgICAgLmZhaWwoZnVuY3Rpb24oeGhyLCBzdGF0dXMsIGVycm9yKSB7CiAgICAgICAgICAgIGRldGFpbHMudGV4dChzdGF0dXMgKyAnOiAnICsgdXJsICsgJyBjb3VsZCBub3QgYmUgbG9hZGVkJyk7CiAgICAgICAgIH0pCiAgICAgICAgIC5kb25lKGZ1bmN0aW9uKHdvcnN0KSB7CiAgICAgICAgICAgIGRldGFpbHMudGV4dCgnTG93ZXN0IG11dGF0b3IgdXRpbGl6YXRpb24gaW4gJyArIG5pY2VEdXJhdGlvbih3aW5kb3dOUykgKyAnIHdpbmRvd3M6Jyk7CiAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgd29yc3QubGVuZ3RoOyBpKyspIHsKICAgICAgICAgICAgICBkZXRhaWxzLmFwcGVuZCgkKCc8YnI+JykpOwogICAgICAgICAgICAgIHZhciB0ZXh0ID0gd29yc3RbaV0uTXV0YXRvclV0aWwudG9GaXhlZCgzKSArICcgYXQgdGltZSAnICsgbmljZUR1cmF0aW9uKHdvcnN0W2ldLlRpbWUpOwogICAgICAgICAgICAgIGRldGFpbHMuYXBwZW5kKCQoJzxhLz4nKS50ZXh0KHRleHQpLmF0dHIoJ2hyZWYnLCB3b3JzdFtpXS5VUkwpKTsKICAgICAgICAgICAgfQogICAgICAgICB9KTsKICAgICAgfQoKICAgICAgJC53aGVuKCQucmVhZHkpLnRoZW4oZnVuY3Rpb24oKSB7CiAgICAgICAgJCgiI29wdGlvbnMgaW5wdXQiKS5jbGljayhyZWZyZXNoQ2hhcnQpOwogICAgICB9KTsKICAgIDwvc2NyaXB0PgogICAgPHN0eWxlPgogICAgICAuaGVscCB7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgICB3aWR0aDogMWVtOwogICAgICAgIGhlaWdodDogMWVtOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDUwJTsKICAgICAgICBjb2xvcjogI2ZmZjsKICAgICAgICBiYWNrZ3JvdW5kOiAjNTU1OwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgICBjdXJzb3I6IGhlbHA7CiAgICAgIH0KICAgICAgLmhlbHAgPiBzcGFuIHsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CiAgICAgIC5oZWxwOmhvdmVyID4gc3BhbiB7CiAgICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICAgIGxlZnQ6IDEuMWVtOwogICAgICAgIHRvcDogMS4xZW07CiAgICAgICAgYmFja2dyb3VuZDogIzU1NTsKICAgICAgICB0ZXh0LWFsaWduOiBsZWZ0OwogICAgICAgIHdpZHRoOiAyMGVtOwogICAgICAgIHBhZGRpbmc6IDAuNWVtOwogICAgICAgIGJvcmRlci1yYWRpdXM6IDAuNWVtOwogICAgICAgIHotaW5kZXg6IDU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgPC9oZWFkPgogIDxib2R5PgogICAgPGRpdiBzdHlsZT0icG9zaXRpb246IHJlbGF0aXZlIj4KICAgICAgPGRpdiBpZD0ibW11X2NoYXJ0IiBzdHlsZT0id2lkdGg6IDkwMHB4OyBoZWlnaHQ6IDUwMHB4OyBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7IHZlcnRpY2FsLWFsaWduOiB0b3AiPkxvYWRpbmcgcGxvdC4uLjwvZGl2PgogICAgICA8ZGl2IGlkPSJvcHRpb25zIiBzdHlsZT0iZGlzcGxheTogaW5saW5lLWJsb2NrOyB2ZXJ0aWNhbC1hbGlnbjogdG9wIj4KICAgICAgICA8cD4KICAgICAgICAgIDxiPlZpZXc8L2I+PGJyPgogICAgICAgICAgPGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJ2aWV3IiBpZD0ic3lzdGVtIiBjaGVja2VkPjxsYWJlbCBmb3I9InN5c3RlbSI+U3lzdGVtPC9sYWJlbD4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwIj4/PHNwYW4+Q29uc2lkZXIgd2hvbGUgc3lzdGVtIHV0aWxpemF0aW9uLiBGb3IgZXhhbXBsZSwgaWYgb25lIG9mIGZvdXIgcHJvY3MgaXMgYXZhaWxhYmxlIHRvIHRoZSBtdXRhdG9yLCBtdXRhdG9yIHV0aWxpemF0aW9uIHdpbGwgYmUgMC4yNS4gVGhpcyBpcyB0aGUgc3RhbmRhcmQgZGVmaW5pdGlvbiBvZiBhbiBNTVUuPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9InZpZXciIGlkPSJwZXJQcm9jIj48bGFiZWwgZm9yPSJwZXJQcm9jIj5QZXItZ29yb3V0aW5lPC9sYWJlbD4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwIj4/PHNwYW4+Q29uc2lkZXIgcGVyLWdvcm91dGluZSB1dGlsaXphdGlvbi4gV2hlbiBldmVuIG9uZSBnb3JvdXRpbmUgaXMgaW50ZXJydXB0ZWQgYnkgR0MsIG11dGF0b3IgdXRpbGl6YXRpb24gaXMgMC48L3NwYW4+PC9zcGFuPjxicj4KICAgICAgICA8L3A+CiAgICAgICAgPHA+CiAgICAgICAgICA8Yj5JbmNsdWRlPC9iPjxicj4KICAgICAgICAgIDxpbnB1dCB0eXBlPSJjaGVja2JveCIgaWQ9InN0dyIgY2hlY2tlZD48bGFiZWwgZm9yPSJzdHciPlNUVzwvbGFiZWw+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iaGVscCI+PzxzcGFuPlN0b3AtdGhlLXdvcmxkIHN0b3BzIGFsbCBnb3JvdXRpbmVzIHNpbXVsdGFuZW91c2x5Ljwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iYmFja2dyb3VuZCIgY2hlY2tlZD48bGFiZWwgZm9yPSJiYWNrZ3JvdW5kIj5CYWNrZ3JvdW5kIHdvcmtlcnM8L2xhYmVsPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAiPj88c3Bhbj5CYWNrZ3JvdW5kIHdvcmtlcnMgYXJlIEdDLXNwZWNpZmljIGdvcm91dGluZXMuIDI1JSBvZiB0aGUgQ1BVIGlzIGRlZGljYXRlZCB0byBiYWNrZ3JvdW5kIHdvcmtlcnMgZHVyaW5nIEdDLjwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0iYXNzaXN0IiBjaGVja2VkPjxsYWJlbCBmb3I9ImFzc2lzdCI+TWFyayBhc3Npc3Q8L2xhYmVsPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAiPj88c3Bhbj5NYXJrIGFzc2lzdHMgYXJlIHBlcmZvcm1lZCBieSBhbGxvY2F0aW9uIHRvIHByZXZlbnQgdGhlIG11dGF0b3IgZnJvbSBvdXRwYWNpbmcgR0MuPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgICA8aW5wdXQgdHlwZT0iY2hlY2tib3giIGlkPSJzd2VlcCI+PGxhYmVsIGZvcj0ic3dlZXAiPlN3ZWVwPC9sYWJlbD4KICAgICAgICAgIDxzcGFuIGNsYXNzPSJoZWxwIj4/PHNwYW4+U3dlZXAgcmVjbGFpbXMgdW51c2VkIG1lbW9yeSBiZXR3ZWVuIEdDcy4gKEVuYWJsaW5nIHRoaXMgbWF5IGJlIHZlcnkgc2xvdy4pLjwvc3Bhbj48L3NwYW4+PGJyPgogICAgICAgIDwvcD4KICAgICAgICA8cD4KICAgICAgICAgIDxiPkRpc3BsYXk8L2I+PGJyPgogICAgICAgICAgPGlucHV0IHR5cGU9ImNoZWNrYm94IiBpZD0ibXV0Ij48bGFiZWwgZm9yPSJtdXQiPlNob3cgcGVyY2VudGlsZXM8L2xhYmVsPgogICAgICAgICAgPHNwYW4gY2xhc3M9ImhlbHAiPj88c3Bhbj5EaXNwbGF5IHBlcmNlbnRpbGUgbXV0YXRvciB1dGlsaXphdGlvbiBpbiBhZGRpdGlvbiB0byBtaW5pbXVtLiBFLmcuLCBwOTkgTVUgZHJvcHMgdGhlIHdvcnN0IDElIG9mIHdpbmRvd3MuPC9zcGFuPjwvc3Bhbj48YnI+CiAgICAgICAgPC9wPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0iZGV0YWlscyI+U2VsZWN0IGEgcG9pbnQgZm9yIGRldGFpbHMuPC9kaXY+CiAgPC9ib2R5Pgo8L2h0bWw+CgEaKnRyYWNldmlld2VyLlByb2ZpbGVSZWNvcmQADypbXSp0cmFjZS5GcmFtZQEFU3RhY2sBBUNvdW50AQRUaW1lARIqdHJhY2V2aWV3ZXIuUmFuZ2UANipmdW5jKCp0cmFjZXZpZXdlci5SYW5nZSwgdHJhY2V2aWV3ZXIuVmlld1R5cGUpIHN0cmluZwEVKnRyYWNldmlld2VyLlZpZXdUeXBlAQNVUkwAIipmdW5jKHRyYWNldmlld2VyLlZpZXdUeXBlKSBzdHJpbmcBBE5hbWUBBVN0YXJ0AQNFbmQBCVN0YXJ0VGltZQEHRW5kVGltZQA1KmZ1bmModHJhY2V2aWV3ZXIuUmFuZ2UsIHRyYWNldmlld2VyLlZpZXdUeXBlKSBzdHJpbmcAFCp0cmFjZXZpZXdlci5ldmVudFN6AQJTegEGRnJhbWVzAB0qdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdwkKVXRpbFdpbmRvdwAaKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnkAFipbXVtddHJhY2UuTXV0YXRvclV0aWwAFCpbXXRyYWNlLk11dGF0b3JVdGlsAARpbml0AAR1dGlsAAhtbXVDdXJ2ZQADZXJyABUqdHJhY2V2aWV3ZXIuc3BsaXR0ZXIAFCpbXXRyYWNldmlld2VyLlJhbmdlAQZSYW5nZXMAESp0cmFjZXZpZXdlci50YXNrAARuYW1lAAlzb3J0SW5kZXgBFyphdG9taWMuUG9pbnRlcltzdHJpbmddAAsqWzBdKnN0cmluZwAKKltdKnN0cmluZwALc3luYy9hdG9taWMAAV8AAXYANSpmdW5jKCphdG9taWMuUG9pbnRlcltzdHJpbmddLCAqc3RyaW5nLCAqc3RyaW5nKSBib29sACYqZnVuYygqYXRvbWljLlBvaW50ZXJbc3RyaW5nXSkgKnN0cmluZwAnKmZ1bmMoKmF0b21pYy5Qb2ludGVyW3N0cmluZ10sICpzdHJpbmcpAC8qZnVuYygqYXRvbWljLlBvaW50ZXJbc3RyaW5nXSwgKnN0cmluZykgKnN0cmluZwEOQ29tcGFyZUFuZFN3YXAAHCpmdW5jKCpzdHJpbmcsICpzdHJpbmcpIGJvb2wBBExvYWQADypmdW5jKCkgKnN0cmluZwEFU3RvcmUADipmdW5jKCpzdHJpbmcpAQRTd2FwABYqZnVuYygqc3RyaW5nKSAqc3RyaW5nAAwqW11bXWZsb2F0NjQAEypbXXRyYWNldmlld2VyLlZpZXcBESp0cmFjZXZpZXdlci5WaWV3ACQqZnVuYygqdHJhY2V2aWV3ZXIuVmlldywgaW50KSBzdHJpbmcAESpmdW5jKGludCkgc3RyaW5nAQRUeXBlACMqZnVuYyh0cmFjZXZpZXdlci5WaWV3LCBpbnQpIHN0cmluZwAfKltddHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdwApKmZ1bmMoaHR0cC5SZXNwb25zZVdyaXRlciwgKmh0dHAuUmVxdWVzdCkALyptYXBbdHJhY2UuVXRpbEZsYWdzXSp0cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5ADYqbWFwLmJ1Y2tldFt0cmFjZS5VdGlsRmxhZ3NdKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnkACSpbOF11aW50OAATKls4XXRyYWNlLlV0aWxGbGFncwASKltddHJhY2UuVXRpbEZsYWdzAB4qWzhdKnRyYWNldmlld2VyLm1tdUNhY2hlRW50cnkAHSpbXSp0cmFjZXZpZXdlci5tbXVDYWNoZUVudHJ5AAAAB3RvcGJpdHMABGtleXMABWVsZW1zAAhvdmVyZmxvdwAdKm1hcFtzdHJpbmddKnByb2ZpbGUuRnVuY3Rpb24AJCptYXAuYnVja2V0W3N0cmluZ10qcHJvZmlsZS5GdW5jdGlvbgAKKls4XXN0cmluZwAVKls4XSpwcm9maWxlLkZ1bmN0aW9uABQqW10qcHJvZmlsZS5GdW5jdGlvbgAYKm1hcFtzdHJpbmddaW50ZXJmYWNlIHt9AB8qbWFwLmJ1Y2tldFtzdHJpbmddaW50ZXJmYWNlIHt9ABAqWzhdaW50ZXJmYWNlIHt9ABsqbWFwW3N0cmluZ110cmFjZS5VdGlsRmxhZ3MAIiptYXAuYnVja2V0W3N0cmluZ110cmFjZS5VdGlsRmxhZ3MAGCptYXBbc3RyaW5nXWZvcm1hdC5GcmFtZQAfKm1hcC5idWNrZXRbc3RyaW5nXWZvcm1hdC5GcmFtZQAQKls4XWZvcm1hdC5GcmFtZQAPKltdZm9ybWF0LkZyYW1lAB0qbWFwW3VpbnQ2NF0qcHJvZmlsZS5Mb2NhdGlvbgAkKm1hcC5idWNrZXRbdWludDY0XSpwcm9maWxlLkxvY2F0aW9uAAoqWzhddWludDY0ABUqWzhdKnByb2ZpbGUuTG9jYXRpb24AFCpbXSpwcm9maWxlLkxvY2F0aW9uACEqbWFwW3VpbnQ2NF10cmFjZXZpZXdlci5mcmFtZU5vZGUAFip0cmFjZXZpZXdlci5mcmFtZU5vZGUAAmlkAAhjaGlsZHJlbgAoKm1hcC5idWNrZXRbdWludDY0XXRyYWNldmlld2VyLmZyYW1lTm9kZQAZKls4XXRyYWNldmlld2VyLmZyYW1lTm9kZQAYKltddHJhY2V2aWV3ZXIuZnJhbWVOb2RlABwqbWFwW3VpbnQ2NF10cmFjZXZpZXdlci50YXNrACMqbWFwLmJ1Y2tldFt1aW50NjRddHJhY2V2aWV3ZXIudGFzawAUKls4XXRyYWNldmlld2VyLnRhc2sAEypbXXRyYWNldmlld2VyLnRhc2sAEiptYXBbdWludDY0XXN0cmluZwAZKm1hcC5idWNrZXRbdWludDY0XXN0cmluZwEaKnRyYWNldmlld2VyLlRyYWNlQ29uc3VtZXIADSpmdW5jKHN0cmluZykAGipmdW5jKCpmb3JtYXQuRXZlbnQsIGJvb2wpABsqZnVuYyhzdHJpbmcsIGZvcm1hdC5GcmFtZSkABypmdW5jKCkBD0NvbnN1bWVUaW1lVW5pdAESQ29uc3VtZVZpZXdlckV2ZW50ARJDb25zdW1lVmlld2VyRnJhbWUBBUZsdXNoAREqdHJhY2V2aWV3ZXIuTW9kZQEUKnRyYWNldmlld2VyLkVtaXR0ZXIAMypmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5BcnJvd0V2ZW50KQEXKnRyYWNldmlld2VyLkFycm93RXZlbnQBDEZyb21SZXNvdXJjZQEJRnJvbVN0YWNrAQpUb1Jlc291cmNlADgqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuQXN5bmNTbGljZUV2ZW50KQEcKnRyYWNldmlld2VyLkFzeW5jU2xpY2VFdmVudAEXKnRyYWNldmlld2VyLlNsaWNlRXZlbnQBAlRzAQNEdXIBCFJlc291cmNlAQhFbmRTdGFjawEDQXJnCQpTbGljZUV2ZW50AQhDYXRlZ29yeQEFU2NvcGUBDlRhc2tDb2xvckluZGV4ACEqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlcikgZXJyb3IAKipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCAqZm9ybWF0LkV2ZW50KQAbKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIpACMqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdWludDY0KQBSKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24sIHRyYWNldmlld2VyLkdTdGF0ZSwgdHJhY2V2aWV3ZXIuR1N0YXRlKQETKnRyYWNldmlld2VyLkdTdGF0ZQAyKmZ1bmMoKnRyYWNldmlld2VyLkVtaXR0ZXIsIHRpbWUuRHVyYXRpb24sIHVpbnQ2NCkASipmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0aW1lLkR1cmF0aW9uLCB0cmFjZXZpZXdlci5UaHJlYWRTdGF0ZSwgaW50NjQpARgqdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUANSpmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5JbnN0YW50RXZlbnQpARkqdHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50ACsqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdWludDY0LCBzdHJpbmcpAC4qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgZnVuYyh1aW50NjQpIGJvb2wpABIqZnVuYyh1aW50NjQpIGJvb2wAIypmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCBzdHJpbmcpADMqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuU2xpY2VFdmVudCkALypmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCBbXSp0cmFjZS5GcmFtZSkgaW50ADAqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdWludDY0LCBzdHJpbmcsIGludCkAOypmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5BcnJvd0V2ZW50LCB1aW50NjQpAEYqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdHJhY2V2aWV3ZXIuZnJhbWVOb2RlLCBbXSp0cmFjZS5GcmFtZSkgaW50ACoqZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbikAQypmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB0cmFjZXZpZXdlci5TbGljZUV2ZW50LCB1aW50NjQsIHN0cmluZykAOCpmdW5jKCp0cmFjZXZpZXdlci5FbWl0dGVyLCB1aW50NjQsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpAC8qZnVuYygqdHJhY2V2aWV3ZXIuRW1pdHRlciwgdGltZS5EdXJhdGlvbikgYm9vbAEFQXJyb3cAHSpmdW5jKHRyYWNldmlld2VyLkFycm93RXZlbnQpAQpBc3luY1NsaWNlACIqZnVuYyh0cmFjZXZpZXdlci5Bc3luY1NsaWNlRXZlbnQpAQNFcnIADSpmdW5jKCkgZXJyb3IBBUV2ZW50ABQqZnVuYygqZm9ybWF0LkV2ZW50KQEFRm9jdXMADSpmdW5jKHVpbnQ2NCkBCkdvbWF4cHJvY3MBE0dvcm91dGluZVRyYW5zaXRpb24APCpmdW5jKHRpbWUuRHVyYXRpb24sIHRyYWNldmlld2VyLkdTdGF0ZSwgdHJhY2V2aWV3ZXIuR1N0YXRlKQEJSGVhcEFsbG9jABwqZnVuYyh0aW1lLkR1cmF0aW9uLCB1aW50NjQpAQhIZWFwR29hbAETSW5jVGhyZWFkU3RhdGVDb3VudAA0KmZ1bmModGltZS5EdXJhdGlvbiwgdHJhY2V2aWV3ZXIuVGhyZWFkU3RhdGUsIGludDY0KQEHSW5zdGFudAAfKmZ1bmModHJhY2V2aWV3ZXIuSW5zdGFudEV2ZW50KQENT3B0aW9uYWxFdmVudAAVKmZ1bmModWludDY0LCBzdHJpbmcpARFTZXRSZXNvdXJjZUZpbHRlcgAYKmZ1bmMoZnVuYyh1aW50NjQpIGJvb2wpAQ9TZXRSZXNvdXJjZVR5cGUBBVNsaWNlAB0qZnVuYyh0cmFjZXZpZXdlci5TbGljZUV2ZW50KQAZKmZ1bmMoW10qdHJhY2UuRnJhbWUpIGludAEEVGFzawAaKmZ1bmModWludDY0LCBzdHJpbmcsIGludCkBCVRhc2tBcnJvdwEJVGFza1NsaWNlAAVhcnJvdwAlKmZ1bmModHJhY2V2aWV3ZXIuQXJyb3dFdmVudCwgdWludDY0KQALYnVpbGRCcmFuY2gAMCpmdW5jKHRyYWNldmlld2VyLmZyYW1lTm9kZSwgW10qdHJhY2UuRnJhbWUpIGludAAQZW1pdEhlYXBDb3VudGVycwAUKmZ1bmModGltZS5EdXJhdGlvbikAC3Byb2Nlc3NNZXRhAAVzbGljZQAtKmZ1bmModHJhY2V2aWV3ZXIuU2xpY2VFdmVudCwgdWludDY0LCBzdHJpbmcpAAp0aHJlYWRNZXRhACIqZnVuYyh1aW50NjQsIHVpbnQ2NCwgc3RyaW5nLCBpbnQpAA10c1dpdGhpblJhbmdlABkqZnVuYyh0aW1lLkR1cmF0aW9uKSBib29sABYqdHJhY2V2aWV3ZXIuaGVhcFN0YXRzAAloZWFwQWxsb2MABm5leHRHQwAJKls1XWludDY0AAkqWzNdaW50NjQAAWMACnJhbmdlU3RhcnQACHJhbmdlRW5kAAloZWFwU3RhdHMADXByZXZIZWFwU3RhdHMAB2dzdGF0ZXMAC3ByZXZHc3RhdGVzAAt0aHJlYWRTdGF0cwAPcHJldlRocmVhZFN0YXRzAApnb21heHByb2NzAAlmcmFtZVRyZWUACGZyYW1lU2VxAAhhcnJvd1NlcQAGZmlsdGVyAAxyZXNvdXJjZVR5cGUACXJlc291cmNlcwANZm9jdXNSZXNvdXJjZQAFdGFza3MADWFzeW5jU2xpY2VTZXEBGip0cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtADAqZnVuYygqdHJhY2V2aWV3ZXIuVGltZUhpc3RvZ3JhbSwgdGltZS5EdXJhdGlvbikANCpmdW5jKCp0cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtLCBpbnQpIHRpbWUuRHVyYXRpb24AWipmdW5jKCp0cmFjZXZpZXdlci5UaW1lSGlzdG9ncmFtLCBmdW5jKHRpbWUuRHVyYXRpb24sIHRpbWUuRHVyYXRpb24pIHN0cmluZykgdGVtcGxhdGUuSFRNTAAqKmZ1bmModGltZS5EdXJhdGlvbiwgdGltZS5EdXJhdGlvbikgc3RyaW5nAQNBZGQBCUJ1Y2tldE1pbgAYKmZ1bmMoaW50KSB0aW1lLkR1cmF0aW9uAQZUb0hUTUwAPipmdW5jKGZ1bmModGltZS5EdXJhdGlvbiwgdGltZS5EdXJhdGlvbikgc3RyaW5nKSB0ZW1wbGF0ZS5IVE1MAQdCdWNrZXRzAQlNaW5CdWNrZXQBCU1heEJ1Y2tldAEcKnRyYWNldmlld2VyLk11dGF0b3JVdGlsRnVuYwAQKnRyYWNldmlld2VyLm1tdQA7KmZ1bmMoKnRyYWNldmlld2VyLm1tdSwgaHR0cC5SZXNwb25zZVdyaXRlciwgKmh0dHAuUmVxdWVzdCkAWCpmdW5jKCp0cmFjZXZpZXdlci5tbXUsIHRyYWNlLlV0aWxGbGFncykgKFtdW110cmFjZS5NdXRhdG9yVXRpbCwgKnRyYWNlLk1NVUN1cnZlLCBlcnJvcikAVSpmdW5jKCp0cmFjZXZpZXdlci5tbXUsIHRyYWNlLlV0aWxXaW5kb3csIHRpbWUuRHVyYXRpb24pIHRyYWNldmlld2VyLmxpbmtlZFV0aWxXaW5kb3cBDUhhbmRsZURldGFpbHMBCkhhbmRsZVBsb3QAA2dldABGKmZ1bmModHJhY2UuVXRpbEZsYWdzKSAoW11bXXRyYWNlLk11dGF0b3JVdGlsLCAqdHJhY2UuTU1VQ3VydmUsIGVycm9yKQATbmV3TGlua2VkVXRpbFdpbmRvdwBDKmZ1bmModHJhY2UuVXRpbFdpbmRvdywgdGltZS5EdXJhdGlvbikgdHJhY2V2aWV3ZXIubGlua2VkVXRpbFdpbmRvdwACbXUABWNhY2hlAAFmAAZyYW5nZXMBGCp0cmFjZXZpZXdlci5Qcm9maWxlRnVuYwAcKltddHJhY2V2aWV3ZXIuUHJvZmlsZVJlY29yZAALKlsyM11zdHJpbmcKPGh0bWw+CjxzdHlsZT4KLyogU2VlIGh0dHBzOi8vZ2l0aHViLmNvbS9nb2xhbmcvcGtnc2l0ZS9ibG9iL21hc3Rlci9zdGF0aWMvc2hhcmVkL3R5cG9ncmFwaHkvdHlwb2dyYXBoeS5jc3MgKi8KYm9keSB7CiAgZm9udC1mYW1pbHk6CS1hcHBsZS1zeXN0ZW0sIEJsaW5rTWFjU3lzdGVtRm9udCwgJ1NlZ29lIFVJJywgSGVsdmV0aWNhLCBBcmlhbCwgc2Fucy1zZXJpZiwgJ0FwcGxlIENvbG9yIEVtb2ppJywgJ1NlZ29lIFVJIEVtb2ppJzsKICBmb250LXNpemU6CTFyZW07CiAgbGluZS1oZWlnaHQ6CW5vcm1hbDsKICBtYXgtd2lkdGg6CTlpbjsKICBtYXJnaW46CTFlbTsKfQpoMSB7IGZvbnQtc2l6ZTogMS41cmVtOyB9CmgyIHsgZm9udC1zaXplOiAxLjM3NXJlbTsgfQpoMSxoMiB7CiAgZm9udC13ZWlnaHQ6IDYwMDsKICBsaW5lLWhlaWdodDogMS4yNWVtOwogIHdvcmQtYnJlYWs6IGJyZWFrLXdvcmQ7Cn0KcCAgeyBjb2xvcjogZ3JleTg1OyBmb250LXNpemU6ODUlOyB9CmNvZGUsCnByZSwKdGV4dGFyZWEuY29kZSB7CiAgZm9udC1mYW1pbHk6IFNGTW9uby1SZWd1bGFyLCBDb25zb2xhcywgJ0xpYmVyYXRpb24gTW9ubycsIE1lbmxvLCBtb25vc3BhY2U7CiAgZm9udC1zaXplOiAwLjg3NXJlbTsKICBsaW5lLWhlaWdodDogMS41ZW07Cn0KCnByZSwKdGV4dGFyZWEuY29kZSB7CiAgYmFja2dyb3VuZC1jb2xvcjogdmFyKC0tY29sb3ItYmFja2dyb3VuZC1hY2NlbnRlZCk7CiAgYm9yZGVyOiB2YXIoLS1ib3JkZXIpOwogIGJvcmRlci1yYWRpdXM6IHZhcigtLWJvcmRlci1yYWRpdXMpOwogIGNvbG9yOiB2YXIoLS1jb2xvci10ZXh0KTsKICBvdmVyZmxvdy14OiBhdXRvOwogIHBhZGRpbmc6IDAuNjI1cmVtOwogIHRhYi1zaXplOiA0OwogIHdoaXRlLXNwYWNlOiBwcmU7Cn0KPC9zdHlsZT4KPGJvZHk+CjxoMT5jbWQvdHJhY2U6IHRoZSBHbyB0cmFjZSBldmVudCB2aWV3ZXI8L2gxPgo8cD4KICBUaGlzIHdlYiBzZXJ2ZXIgcHJvdmlkZXMgdmFyaW91cyB2aXN1YWxpemF0aW9ucyBvZiBhbiBldmVudCBsb2cgZ2F0aGVyZWQgZHVyaW5nCiAgdGhlIGV4ZWN1dGlvbiBvZiBhIEdvIHByb2dyYW0gdGhhdCB1c2VzIHRoZSA8YSBocmVmPSdodHRwczovL3BrZy5nby5kZXYvcnVudGltZS90cmFjZSc+cnVudGltZS90cmFjZTwvYT4gcGFja2FnZS4KPC9wPgoKPGgyPkV2ZW50IHRpbWVsaW5lcyBmb3IgcnVubmluZyBnb3JvdXRpbmVzPC9oMj4Ke3tyYW5nZSAkaSwgJHZpZXcgOj0gJH19Cnt7aWYgJHZpZXcuUmFuZ2VzfX0Ke3tpZiBlcSAkaSAwfX0KPHA+CiAgTGFyZ2UgdHJhY2VzIGFyZSBzcGxpdCBpbnRvIG11bHRpcGxlIHNlY3Rpb25zIG9mIGVxdWFsIGRhdGEgc2l6ZQogIChub3QgZHVyYXRpb24pIHRvIGF2b2lkIG92ZXJ3aGVsbWluZyB0aGUgdmlzdWFsaXplci4KPC9wPgp7e2VuZH19Cjx1bD4KCXt7cmFuZ2UgJGluZGV4LCAkZSA6PSAkdmlldy5SYW5nZXN9fQoJCTxsaT48YSBocmVmPSJ7eyR2aWV3LlVSTCAkaW5kZXh9fSI+VmlldyB0cmFjZSBieSB7eyR2aWV3LlR5cGV9fSAoe3skZS5OYW1lfX0pPC9hPjwvbGk+Cgl7e2VuZH19CjwvdWw+Cnt7ZWxzZX19Cjx1bD4KCTxsaT48YSBocmVmPSJ7eyR2aWV3LlVSTCAtMX19Ij5WaWV3IHRyYWNlIGJ5IHt7JHZpZXcuVHlwZX19PC9hPjwvbGk+CjwvdWw+Cnt7ZW5kfX0Ke3tlbmR9fQo8cD4KICBUaGlzIHZpZXcgZGlzcGxheXMgYSBzZXJpZXMgb2YgdGltZWxpbmVzIGZvciBhIHR5cGUgb2YgcmVzb3VyY2UuCiAgVGhlICJieSBwcm9jIiB2aWV3IGNvbnNpc3RzIG9mIGEgdGltZWxpbmUgZm9yIGVhY2ggb2YgdGhlIEdPTUFYUFJPQ1MKICBsb2dpY2FsIHByb2Nlc3NvcnMsIHNob3dpbmcgd2hpY2ggZ29yb3V0aW5lIChpZiBhbnkpIHdhcyBydW5uaW5nIG9uIHRoYXQKICBsb2dpY2FsIHByb2Nlc3NvciBhdCBlYWNoIG1vbWVudC4KICBUaGUgImJ5IHRocmVhZCIgdmlldyAoaWYgYXZhaWxhYmxlKSBjb25zaXN0cyBvZiBhIHNpbWlsYXIgdGltZWxpbmUgZm9yIGVhY2gKICBPUyB0aHJlYWQuCgogIEVhY2ggZ29yb3V0aW5lIGhhcyBhbiBpZGVudGlmeWluZyBudW1iZXIgKGUuZy4gRzEyMyksIG1haW4gZnVuY3Rpb24sCiAgYW5kIGNvbG9yLgoKICBBIGNvbG9yZWQgYmFyIHJlcHJlc2VudHMgYW4gdW5pbnRlcnJ1cHRlZCBzcGFuIG9mIGV4ZWN1dGlvbi4KCiAgRXhlY3V0aW9uIG9mIGEgZ29yb3V0aW5lIG1heSBtaWdyYXRlIGZyb20gb25lIGxvZ2ljYWwgcHJvY2Vzc29yIHRvIGFub3RoZXIsCiAgY2F1c2luZyBhIHNpbmdsZSBjb2xvcmVkIGJhciB0byBiZSBob3Jpem9udGFsbHkgY29udGludW91cyBidXQKICB2ZXJ0aWNhbGx5IGRpc3BsYWNlZC4KPC9wPgo8cD4KICBDbGlja2luZyBvbiBhIHNwYW4gcmV2ZWFscyBpbmZvcm1hdGlvbiBhYm91dCBpdCwgc3VjaCBhcyBpdHMKICBkdXJhdGlvbiwgaXRzIGNhdXNhbCBwcmVkZWNlc3NvcnMgYW5kIHN1Y2Nlc3NvcnMsIGFuZCB0aGUgc3RhY2sgdHJhY2UKICBhdCB0aGUgZmluYWwgbW9tZW50IHdoZW4gaXQgeWllbGRlZCB0aGUgbG9naWNhbCBwcm9jZXNzb3IsIGZvciBleGFtcGxlCiAgYmVjYXVzZSBpdCBtYWRlIGEgc3lzdGVtIGNhbGwgb3IgdHJpZWQgdG8gYWNxdWlyZSBhIG11dGV4LgoKICBEaXJlY3RseSB1bmRlcm5lYXRoIGVhY2ggYmFyLCBhIHNtYWxsZXIgYmFyIG9yIG1vcmUgY29tbW9ubHkgYSBmaW5lCiAgdmVydGljYWwgbGluZSBpbmRpY2F0ZXMgYW4gZXZlbnQgb2NjdXJyaW5nIGR1cmluZyBpdHMgZXhlY3V0aW9uLgogIFNvbWUgb2YgdGhlc2UgYXJlIHJlbGF0ZWQgdG8gZ2FyYmFnZSBjb2xsZWN0aW9uOyBtb3N0IGluZGljYXRlIHRoYXQKICBhIGdvcm91dGluZSB5aWVsZGVkIGl0cyBsb2dpY2FsIHByb2Nlc3NvciBidXQgdGhlbiBpbW1lZGlhdGVseSByZXN1bWVkIGV4ZWN1dGlvbgogIG9uIHRoZSBzYW1lIGxvZ2ljYWwgcHJvY2Vzc29yLiBDbGlja2luZyBvbiB0aGUgZXZlbnQgZGlzcGxheXMgdGhlIHN0YWNrIHRyYWNlCiAgYXQgdGhlIG1vbWVudCBpdCBvY2N1cnJlZC4KPC9wPgo8cD4KICBUaGUgY2F1c2FsIHJlbGF0aW9uc2hpcHMgYmV0d2VlbiBzcGFucyBvZiBnb3JvdXRpbmUgZXhlY3V0aW9uCiAgY2FuIGJlIGRpc3BsYXllZCBieSBjbGlja2luZyB0aGUgRmxvdyBFdmVudHMgYnV0dG9uIGF0IHRoZSB0b3AuCjwvcD4KPHA+CiAgQXQgdGhlIHRvcCAoIlNUQVRTIiksIHRoZXJlIGFyZSB0aHJlZSBhZGRpdGlvbmFsIHRpbWVsaW5lcyB0aGF0CiAgZGlzcGxheSBzdGF0aXN0aWNhbCBpbmZvcm1hdGlvbi4KCiAgIkdvcm91dGluZXMiIGlzIGEgdGltZSBzZXJpZXMgb2YgdGhlIGNvdW50IG9mIGV4aXN0aW5nIGdvcm91dGluZXM7CiAgY2xpY2tpbmcgb24gaXQgZGlzcGxheXMgdGhlaXIgYnJlYWtkb3duIGJ5IHN0YXRlIGF0IHRoYXQgbW9tZW50OgogIHJ1bm5pbmcsIHJ1bm5hYmxlLCBvciB3YWl0aW5nLgoKICAiSGVhcCIgaXMgYSB0aW1lIHNlcmllcyBvZiB0aGUgYW1vdW50IG9mIGhlYXAgbWVtb3J5IGFsbG9jYXRlZCAoaW4gb3JhbmdlKQogIGFuZCAoaW4gZ3JlZW4pIHRoZSBhbGxvY2F0aW9uIGxpbWl0IGF0IHdoaWNoIHRoZSBuZXh0IEdDIGN5Y2xlIHdpbGwgYmVnaW4uCgogICJUaHJlYWRzIiBzaG93cyB0aGUgbnVtYmVyIG9mIGtlcm5lbCB0aHJlYWRzIGluIGV4aXN0ZW5jZTogdGhlcmUgaXMKICBhbHdheXMgb25lIGtlcm5lbCB0aHJlYWQgcGVyIGxvZ2ljYWwgcHJvY2Vzc29yLCBhbmQgYWRkaXRpb25hbCB0aHJlYWRzCiAgYXJlIGNyZWF0ZWQgZm9yIGNhbGxzIHRvIG5vbi1HbyBjb2RlIHN1Y2ggYXMgYSBzeXN0ZW0gY2FsbCBvciBhCiAgZnVuY3Rpb24gd3JpdHRlbiBpbiBDLgo8L3A+CjxwPgogIEFib3ZlIHRoZSBldmVudCB0cmFjZSBmb3IgdGhlIGZpcnN0IGxvZ2ljYWwgcHJvY2Vzc29yIGFyZQogIHRyYWNlcyBmb3IgdmFyaW91cyBydW50aW1lLWludGVybmFsIGV2ZW50cy4KCiAgVGhlICJHQyIgYmFyIHNob3dzIHdoZW4gdGhlIGdhcmJhZ2UgY29sbGVjdG9yIGlzIHJ1bm5pbmcsIGFuZCBpbiB3aGljaCBzdGFnZS4KICBHYXJiYWdlIGNvbGxlY3Rpb24gbWF5IHRlbXBvcmFyaWx5IGFmZmVjdCBhbGwgdGhlIGxvZ2ljYWwgcHJvY2Vzc29ycwogIGFuZCB0aGUgb3RoZXIgbWV0cmljcy4KCiAgVGhlICJOZXR3b3JrIiwgIlRpbWVycyIsIGFuZCAiU3lzY2FsbHMiIHRyYWNlcyBpbmRpY2F0ZSBldmVudHMgaW4KICB0aGUgcnVudGltZSB0aGF0IGNhdXNlIGdvcm91dGluZXMgdG8gd2FrZSB1cC4KPC9wPgo8cD4KICBUaGUgdmlzdWFsaXphdGlvbiBhbGxvd3MgeW91IHRvIG5hdmlnYXRlIGV2ZW50cyBhdCBzY2FsZXMgcmFuZ2luZyBmcm9tIHNldmVyYWwKICBzZWNvbmRzIHRvIGEgaGFuZGZ1bCBvZiBuYW5vc2Vjb25kcy4KCiAgQ29uc3VsdCB0aGUgZG9jdW1lbnRhdGlvbiBmb3IgdGhlIENocm9taXVtIDxhIGhyZWY9J2h0dHBzOi8vd3d3LmNocm9taXVtLm9yZy9kZXZlbG9wZXJzL2hvdy10b3MvdHJhY2UtZXZlbnQtcHJvZmlsaW5nLXRvb2wvJz5UcmFjZSBFdmVudCBQcm9maWxpbmcgVG9vbDxhLz4KICBmb3IgaGVscCBuYXZpZ2F0aW5nIHRoZSB2aWV3Lgo8L3A+Cgo8dWw+CjxsaT48YSBocmVmPSIvZ29yb3V0aW5lcyI+R29yb3V0aW5lIGFuYWx5c2lzPC9hPjwvbGk+CjwvdWw+CjxwPgogIFRoaXMgdmlldyBkaXNwbGF5cyBpbmZvcm1hdGlvbiBhYm91dCBlYWNoIHNldCBvZiBnb3JvdXRpbmVzIHRoYXQKICBzaGFyZXMgdGhlIHNhbWUgbWFpbiBmdW5jdGlvbi4KCiAgQ2xpY2tpbmcgb24gYSBtYWluIGZ1bmN0aW9uIHNob3dzIGxpbmtzIHRvIHRoZSBmb3VyIHR5cGVzIG9mCiAgYmxvY2tpbmcgcHJvZmlsZSAoc2VlIGJlbG93KSBhcHBsaWVkIHRvIHRoYXQgc3Vic2V0IG9mIGdvcm91dGluZXMuCgogIEl0IGFsc28gc2hvd3MgYSB0YWJsZSBvZiBzcGVjaWZpYyBnb3JvdXRpbmUgaW5zdGFuY2VzLCB3aXRoIHZhcmlvdXMKICBleGVjdXRpb24gc3RhdGlzdGljcyBhbmQgYSBsaW5rIHRvIHRoZSBldmVudCB0aW1lbGluZSBmb3IgZWFjaCBvbmUuCgogIFRoZSB0aW1lbGluZSBkaXNwbGF5cyBvbmx5IHRoZSBzZWxlY3RlZCBnb3JvdXRpbmUgYW5kIGFueSBvdGhlcnMgaXQKICBpbnRlcmFjdHMgd2l0aCB2aWEgYmxvY2svdW5ibG9jayBldmVudHMuIChUaGUgdGltZWxpbmUgaXMKICBnb3JvdXRpbmUtb3JpZW50ZWQgcmF0aGVyIHRoYW4gbG9naWNhbCBwcm9jZXNzb3Itb3JpZW50ZWQuKQo8L3A+Cgo8aDI+UHJvZmlsZXM8L2gyPgo8cD4KICBFYWNoIGxpbmsgYmVsb3cgZGlzcGxheXMgYSBnbG9iYWwgcHJvZmlsZSBpbiB6b29tYWJsZSBncmFwaCBmb3JtIGFzCiAgcHJvZHVjZWQgYnkgPGEgaHJlZj0naHR0cHM6Ly9nby5kZXYvYmxvZy9wcHJvZic+cHByb2Y8L2E+J3MgIndlYiIgY29tbWFuZC4KCiAgSW4gYWRkaXRpb24gdGhlcmUgaXMgYSBsaW5rIHRvIGRvd25sb2FkIHRoZSBwcm9maWxlIGZvciBvZmZsaW5lCiAgYW5hbHlzaXMgd2l0aCBwcHJvZi4KCiAgQWxsIGZvdXIgcHJvZmlsZXMgcmVwcmVzZW50IGNhdXNlcyBvZiBkZWxheSB0aGF0IHByZXZlbnQgYSBnb3JvdXRpbmUKICBmcm9tIHJ1bm5pbmcgb24gYSBsb2dpY2FsIHByb2Nlc3NvcjogYmVjYXVzZSBpdCB3YXMgd2FpdGluZyBmb3IgdGhlIG5ldHdvcmssCiAgZm9yIGEgc3luY2hyb25pemF0aW9uIG9wZXJhdGlvbiBvbiBhIG11dGV4IG9yIGNoYW5uZWwsIGZvciBhIHN5c3RlbSBjYWxsLAogIG9yIGZvciBhIGxvZ2ljYWwgcHJvY2Vzc29yIHRvIGJlY29tZSBhdmFpbGFibGUuCjwvcD4KPHVsPgo8bGk+PGEgaHJlZj0iL2lvIj5OZXR3b3JrIGJsb2NraW5nIHByb2ZpbGU8L2E+ICg8YSBocmVmPSIvaW8/cmF3PTEiIGRvd25sb2FkPSJpby5wcm9maWxlIj7irIc8L2E+KTwvbGk+CjxsaT48YSBocmVmPSIvYmxvY2siPlN5bmNocm9uaXphdGlvbiBibG9ja2luZyBwcm9maWxlPC9hPiAoPGEgaHJlZj0iL2Jsb2NrP3Jhdz0xIiBkb3dubG9hZD0iYmxvY2sucHJvZmlsZSI+4qyHPC9hPik8L2xpPgo8bGk+PGEgaHJlZj0iL3N5c2NhbGwiPlN5c2NhbGwgcHJvZmlsZTwvYT4gKDxhIGhyZWY9Ii9zeXNjYWxsP3Jhdz0xIiBkb3dubG9hZD0ic3lzY2FsbC5wcm9maWxlIj7irIc8L2E+KTwvbGk+CjxsaT48YSBocmVmPSIvc2NoZWQiPlNjaGVkdWxlciBsYXRlbmN5IHByb2ZpbGU8L2E+ICg8YSBocmVmPSIvc2NoZWQ/cmF3PTEiIGRvd25sb2FkPSJzY2hlZC5wcm9maWxlIj7irIc8L2E+KTwvbGk+CjwvdWw+Cgo8aDI+VXNlci1kZWZpbmVkIHRhc2tzIGFuZCByZWdpb25zPC9oMj4KPHA+CiAgVGhlIHRyYWNlIEFQSSBhbGxvd3MgYSB0YXJnZXQgcHJvZ3JhbSB0byBhbm5vdGF0ZSBhIDxhCiAgaHJlZj0naHR0cHM6Ly9wa2cuZ28uZGV2L3J1bnRpbWUvdHJhY2UjUmVnaW9uJz5yZWdpb248L2E+IG9mIGNvZGUKICB3aXRoaW4gYSBnb3JvdXRpbmUsIHN1Y2ggYXMgYSBrZXkgZnVuY3Rpb24sIHNvIHRoYXQgaXRzIHBlcmZvcm1hbmNlCiAgY2FuIGJlIGFuYWx5emVkLgoKICA8YSBocmVmPSdodHRwczovL3BrZy5nby5kZXYvcnVudGltZS90cmFjZSNMb2cnPkxvZyBldmVudHM8L2E+IG1heSBiZQogIGFzc29jaWF0ZWQgd2l0aCBhIHJlZ2lvbiB0byByZWNvcmQgcHJvZ3Jlc3MgYW5kIHJlbGV2YW50IHZhbHVlcy4KCiAgVGhlIEFQSSBhbHNvIGFsbG93cyBhbm5vdGF0aW9uIG9mIGhpZ2hlci1sZXZlbAogIDxhIGhyZWY9J2h0dHBzOi8vcGtnLmdvLmRldi9ydW50aW1lL3RyYWNlI1Rhc2snPnRhc2tzPC9hPiwKICB3aGljaCBtYXkgaW52b2x2ZSB3b3JrIGFjcm9zcyBtYW55IGdvcm91dGluZXMuCjwvcD4KPHA+CiAgVGhlIGxpbmtzIGJlbG93IGRpc3BsYXksIGZvciBlYWNoIHJlZ2lvbiBhbmQgdGFzaywgYSBoaXN0b2dyYW0gb2YgaXRzIGV4ZWN1dGlvbiB0aW1lcy4KCiAgRWFjaCBoaXN0b2dyYW0gYnVja2V0IGNvbnRhaW5zIGEgc2FtcGxlIHRyYWNlIHRoYXQgcmVjb3JkcyB0aGUKICBzZXF1ZW5jZSBvZiBldmVudHMgc3VjaCBhcyBnb3JvdXRpbmUgY3JlYXRpb25zLCBsb2cgZXZlbnRzLCBhbmQKICBzdWJyZWdpb24gc3RhcnQvZW5kIHRpbWVzLgoKICBGb3IgZWFjaCB0YXNrLCB5b3UgY2FuIGNsaWNrIHRocm91Z2ggdG8gYSBsb2dpY2FsLXByb2Nlc3NvciBvcgogIGdvcm91dGluZS1vcmllbnRlZCB2aWV3IHNob3dpbmcgdGhlIHRhc2tzIGFuZCByZWdpb25zIG9uIHRoZQogIHRpbWVsaW5lLgoKICBTdWNoIGluZm9ybWF0aW9uIG1heSBoZWxwIHVuY292ZXIgd2hpY2ggc3RlcHMgaW4gYSByZWdpb24gYXJlCiAgdW5leHBlY3RlZGx5IHNsb3csIG9yIHJldmVhbCByZWxhdGlvbnNoaXBzIGJldHdlZW4gdGhlIGRhdGEgdmFsdWVzCiAgbG9nZ2VkIGluIGEgcmVxdWVzdCBhbmQgaXRzIHJ1bm5pbmcgdGltZS4KPC9wPgo8dWw+CjxsaT48YSBocmVmPSIvdXNlcnRhc2tzIj5Vc2VyLWRlZmluZWQgdGFza3M8L2E+PC9saT4KPGxpPjxhIGhyZWY9Ii91c2VycmVnaW9ucyI+VXNlci1kZWZpbmVkIHJlZ2lvbnM8L2E+PC9saT4KPC91bD4KCjxoMj5HYXJiYWdlIGNvbGxlY3Rpb24gbWV0cmljczwvaDI+Cjx1bD4KPGxpPjxhIGhyZWY9Ii9tbXUiPk1pbmltdW0gbXV0YXRvciB1dGlsaXphdGlvbjwvYT48L2xpPgo8L3VsPgo8cD4KICBUaGlzIGNoYXJ0IGluZGljYXRlcyB0aGUgbWF4aW11bSBHQyBwYXVzZSB0aW1lICh0aGUgbGFyZ2VzdCB4IHZhbHVlCiAgZm9yIHdoaWNoIHkgaXMgemVybyksIGFuZCBtb3JlIGdlbmVyYWxseSwgdGhlIGZyYWN0aW9uIG9mIHRpbWUgdGhhdAogIHRoZSBwcm9jZXNzb3JzIGFyZSBhdmFpbGFibGUgdG8gYXBwbGljYXRpb24gZ29yb3V0aW5lcyAoIm11dGF0b3JzIiksCiAgZm9yIGFueSB0aW1lIHdpbmRvdyBvZiBhIHNwZWNpZmllZCBzaXplLCBpbiB0aGUgd29yc3QgY2FzZS4KPC9wPgo8L2JvZHk+CjwvaHRtbD4KYmFja2dyb3VuZF0sICJzdGFja0ZyYW1lcyI6InRyYWNlRXZlbnRzIjogWyJkaXNwbGF5VGltZVVuaXQiOkdvcm91dGluZXNydW5uYWJsZT0lZCBydW5uaW5nPSVkIGluc3lzY2FsbD0lZCBpbnN5c2NhbGxSdW50aW1lPSVkdGhyZWFkX25hbWV0aHJlYWRfc29ydF9pbmRleHByb2Nlc3NfbmFtZXByb2Nlc3Nfc29ydF9pbmRleDx0cj48dGQgY2xhc3M9Imhpc3RvVGltZSIgYWxpZ249InJpZ2h0Ij48YSBocmVmPSVzPiVzPC9hPjwvdGQ+PHRyPjx0ZCBjbGFzcz0iaGlzdG9UaW1lIiBhbGlnbj0icmlnaHQiPiVzPC90ZD48dGQ+PGRpdiBzdHlsZT0id2lkdGg6JWRweDtiYWNrZ3JvdW5kOmJsdWU7cG9zaXRpb246cmVsYXRpdmUiPiZuYnNwOzwvZGl2PjwvdGQ+PHRkIGFsaWduPSJyaWdodCI+PGRpdiBzdHlsZT0icG9zaXRpb246cmVsYXRpdmUiPiVkPC9kaXY+PC90ZD48dHI+PHRkIGFsaWduPSJyaWdodCI+JXM8L3RkPjwvdHI+AEQqc3RydWN0IHsgQ2FjaGUgdW5zYWZlLlBvaW50ZXI7IEludGVyIHVuc2FmZS5Qb2ludGVyOyBDYW5GYWlsIGJvb2wgfQEFQ2FjaGUBBUludGVyAQdDYW5GYWlsL3RyYWNlP3ZpZXc9JXMvdHJhY2U/dmlldz0lcyZzdGFydD0lZCZlbmQ9JWRmYWlsZWQgdG8gcHJvZHVjZSBNTVUgZGF0YTogJXZxdWFudGlsZXNmYWlsZWQgdG8gc2VyaWFsaXplIHJlc3BvbnNlOiAldgAAAAAAAPA/AAAAAAAA8D8AAAAAAADwPwAAAAAAAPA/ZmFpbGVkIHRvIHBhcnNlIHdpbmRvdyBwYXJhbWV0ZXIgJXE6ICV2ZmFpbGVkIHRvIHNlcmlhbGl6ZSB0cmFjZTogJXZDb250ZW50LVR5cGVhcHBsaWNhdGlvbi9vY3RldC1zdHJlYW1mYWlsZWQgdG8gZ2V0IHJlY29yZHM6ICV2ZmFpbGVkIHRvIHdyaXRlIHByb2ZpbGU6ICV2ZmFpbGVkIHRvIGNyZWF0ZSB0ZW1wIGZpbGU6ICV2ZmFpbGVkIHRvIGdlbmVyYXRlIHByb2ZpbGU6ICV2ZmFpbGVkIHRvIGZsdXNoIHRlbXAgZmlsZTogJXZmYWlsZWQgdG8gY2xvc2UgdGVtcCBmaWxlOiAldmZhaWxlZCB0byBleGVjdXRlIGdvIHRvb2wgcHByb2Y6ICV2CiVzaW1hZ2Uvc3ZnK3htbHRleHQvcGxhaW47IGNoYXJzZXQ9dXRmLThYLUdvLVBwcm9mY29udGVudGlvbnNuYW5vc2Vjb25kc3t7UEFSQU1TfX0AEioqcHJvZmlsZS5Mb2NhdGlvbgANKip0cmFjZS5GcmFtZQAKKlsxXXN0cmluZwAWKlsyXSpwcm9maWxlLlZhbHVlVHlwZQAVKltdKnByb2ZpbGUuVmFsdWVUeXBlABYqW110cmFjZXZpZXdlci5ldmVudFN6AJUBKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmludDY0OyBYMSBpbnQ2NDsgWDIgaW50NjQ7IFgzIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lOyBYNCBtYXBbc3RyaW5nXWZvcm1hdC5GcmFtZTsgWDUgKmludDsgWDYgaW8uV3JpdGVyOyBYNyAqanNvbi5FbmNvZGVyIH0BAUYBAlgwAQJYMQECWDIBAlgzAQJYNAECWDUBAlg2AQJYNwAmKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKmZvcm1hdC5EYXRhIH0AfSpzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICpmb3JtYXQuRGF0YTsgWDEgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWU7IFgyICp0cmFjZXZpZXdlci5jb3VudGluZ1dyaXRlcjsgWDMgKltddHJhY2V2aWV3ZXIuZXZlbnRTeiB9ADUqc3RydWN0IHsgRiB1aW50cHRyOyBYMCBpby5Xcml0ZXI7IFgxICpqc29uLkVuY29kZXIgfQAxKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWUgfQAQKlsxXWludGVyZmFjZSB7fQAQKlsxXXByb2ZpbGUuTGluZQAPKltdcHJvZmlsZS5MaW5lAAkqWzJdaW50NjQAECpbMl1pbnRlcmZhY2Uge30ACipbMzJddWludDgAECpbM11pbnRlcmZhY2Uge30ACipbM11zdHJpbmcACypbNF1mbG9hdDY0ABAqWzRdaW50ZXJmYWNlIHt9AAoqWzZdc3RyaW5nABMqW110cmFjZS5VdGlsV2luZG93AAoqZnVuYyhpbnQpAB4qZnVuYyhzdHJpbmcsIC4uLmludGVyZmFjZSB7fSkAnwEqc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqdHJhY2V2aWV3ZXIuY291bnRpbmdXcml0ZXI7IFgxICpmb3JtYXQuRGF0YTsgWDIgKltddHJhY2V2aWV3ZXIuZXZlbnRTejsgWDMgbWFwW3N0cmluZ11mb3JtYXQuRnJhbWU7IFg0IGludDsgWDUgKnRyYWNldmlld2VyLnNwbGl0dGVyIH0ALipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICp0cmFjZXZpZXdlci5ldmVudFN6IH0AKipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICp0cmFjZXZpZXdlci5tbXUgfQBdKnN0cnVjdCB7IEYgdWludHB0cjsgWDAgKnRyYWNldmlld2VyLm1tdTsgWDEgdHJhY2UuVXRpbEZsYWdzOyBYMiAqdHJhY2V2aWV3ZXIubW11Q2FjaGVFbnRyeSB9AEIqc3RydWN0IHsgRiB1aW50cHRyOyBYMCAqZm9ybWF0LkRhdGE7IFgxIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lIH0AIipzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwICpvcy5GaWxlIH0ALCpzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIFtddHJhY2V2aWV3ZXIuVmlldyB9ADEqc3RydWN0IHsgRiB1aW50cHRyOyBYMCB0cmFjZXZpZXdlci5Qcm9maWxlRnVuYyB9AFEqc3RydWN0IHsgRiB1aW50cHRyOyBYMCBpby5Xcml0ZXI7IFgxICpqc29uLkVuY29kZXI7IFgyIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lIH0ATSpzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIG1hcFtzdHJpbmddZm9ybWF0LkZyYW1lOyBYMSBtYXBbc3RyaW5nXWZvcm1hdC5GcmFtZSB9AC0qc3RydWN0IHsgRiB1aW50cHRyOyBYMCBodHRwLlJlc3BvbnNlV3JpdGVyIH0AICpzdHJ1Y3QgeyBGIHVpbnRwdHI7IFgwIHN0cmluZyB9ADMqc3RydWN0IHsgRiB1aW50cHRyOyBYMCBzdHJpbmc7IFgxIFtdaW50ZXJmYWNlIHt9IH1zdGF0aWMvdHJhY2Vfdmlld2VyX2Z1bGwuaHRtbHN0YXRpYy93ZWJjb21wb25lbnRzLm1pbi5qcwIAAAAAAAAAAgAAAAEAAAAAAQoAAAACAAAAAgICAgICAgICAAoAAAAIAAAAAAQGB0fH5zc7AP4ACAgI/RAIGAj/AAADAAAAAAAAAAMAAAADAAAAAAcBAwAAAAMAAAAFAAADAAAAAQAAAAABAP4ACAgI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L3RyYWNldmlld2VyLnZpZXdlclRpbWUAAcsFARN0AAAAAAAAAAVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKkVtaXR0ZXIpLk9wdGlvbmFsRXZlbnQAAesEARNlAAAAAAAAE2V2AAAAAAAAAAVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci5waWNrVGFza0NvbG9yAAGqBgETaWQAAAAAAAAOaWR4AKsGAAAAAAAFaW50ZXJuYWwvdHJhY2UvdHJhY2V2aWV3ZXIuKCpFbWl0dGVyKS5FdmVudAAB/wMBE2UAAAAAAAATZXYAAAAAAAAABW1hdGguRXhwAAEQARN4AAAAAAAAAAVpbnRlcm5hbC90cmFjZS90cmFjZXZpZXdlci4oKlRpbWVIaXN0b2dyYW0pLkJ1Y2tldE1pbgABLgETaAAAAAAAABNidWNrZXQAAAAAAAAABXN0cmluZ3MuKCpCdWlsZGVyKS5TdHJpbmcAATABE2IAAAAAAAAABWludGVybmFsL3RyYWNlL3RyYWNldmlld2VyLlJhbmdlLlVSTAABkgIBE3IAAAAAAAATdmlld1R5cGUAAAAAAAAABXN0cmluZ3MuUmVwbGFjZUFsbAABywgBE3MAAAAAAAATb2xkAAAAAAAAE25ldwAAAAAAAAAFbmV0L2h0dHAuRlMAAYAHARNmc3lzAAAAAAAAAAVuZXQvaHR0cC5GaWxlU2VydmVyAAGRBwETcm9vdAAAAAAAAAAFc3luYy4oKk11dGV4KS5Mb2NrAAFRARNtAAAAAAAAAAVzeW5jLigqTXV0ZXgpLlVubG9jawAB1AEBE20AAAAAAAAObmV3ANsBAAAAAAAFc3luYy4oKk9uY2UpLkRvAAEwARNvAAAAAAAAE2YAAAAAAAAABXN5bmMvYXRvbWljLigqVWludDMyKS5Mb2FkAAF5ARN4AAAAAAAAAAVzdHJpbmdzLlNwbGl0AAGzAgETcwAAAAAAABNzZXAAAAAAAAAABWludGVybmFsL3RyYWNlLigqTU1VQ3VydmUpLk1NVQAB+wUBE2MAAAAAAAATd2luZG93AAAAAAAAE21tdQABAAAAAA5hY2MA/AUAAAAAAAVsb2cuUHJpbnRmAAGMAwETZm9ybWF0AAAAAAAAE3YAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA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KAAAAAAAAAAoAAAAAAAAABETKtYCCAgZAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAUAAAAAAAAABQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAEAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAGAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAYEKioQgICDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAACqslEZAggIGQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAADAAAAAAAAAAMAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABgAAAAAAAAACAAAAAAAAAAIAAAAAAAAAEn2APIICAg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAQAAAAAAAAABAAAAAAAAAAc9Ge7gIICBkAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAACAAAAAAAAAAy5REfCAgINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAIAAAAAAAAAAgAAAAAAAAAqA5XNggICDYAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAEAAAAAAAAABuIGo9AggIEQAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAABAAAAAAAAAAgAAAAAAAAACAAAAAAAAACMT9P5CAgINgAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACAAAAAAAAAAIAAAAAAAAAKRq/4MICAg2AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAYAAAA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U2taRmlJaEZTemxZOUhnVUFBQUJ4ZXlKdmNtbG5hVzRpT2lKb2RIUndjem92TDJkdmIyZHNaWFZ6WlhKamIyNTBaVzUwTG1OdmJUbzBORE1pTENKbVpXRjBkWEpsSWpvaVYyVmlRMjl0Y0c5dVpXNTBjMVl3SWl3aVpYaHdhWEo1SWpveE5qQTBOakUwTlRNNExDSnBjMU4xWW1SdmJXRnBiaUk2ZEhKMVpYMD0iPgo8dGVtcGxhdGUgaWQ9Im92ZXJsYXktdGVtcGxhdGUiPgogIDxzdHlsZT4KICAgIG92ZXJsYXktbWFzayB7CiAgICAgIGxlZnQ6IDA7CiAgICAgIHBhZGRpbmc6IDhweDsKICAgICAgcG9zaXRpb246IGFic29sdXRlOwogICAgICB0b3A6IDA7CiAgICAgIHotaW5kZXg6IDEwMDA7CiAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogICAgICAtd2Via2l0LWp1c3RpZnktY29udGVudDogY2VudGVyOwogICAgICBiYWNrZ3JvdW5kOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgbGVmdDogMDsKICAgICAgcG9zaXRpb246IGZpeGVkOwogICAgICB0b3A6IDA7CiAgICAgIHdpZHRoOiAxMDAlOwogICAgfQogICAgb3ZlcmxheS1tYXNrOmZvY3VzIHsKICAgICAgb3V0bGluZTogbm9uZTsKICAgIH0KICAgIG92ZXJsYXktdmVydGljYWwtY2VudGVyaW5nLWNvbnRhaW5lciB7CiAgICAgIC13ZWJraXQtanVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICBvdmVybGF5LWZyYW1lIHsKICAgICAgei1pbmRleDogMTEwMDsKICAgICAgYmFja2dyb3VuZDogcmdiKDI1NSwgMjU1LCAyNTUpOwogICAgICBib3JkZXI6IDFweCBzb2xpZCAjY2NjOwogICAgICBtYXJnaW46IDc1cHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICB9CiAgICB0aXRsZS1iYXIgewogICAgICAtd2Via2l0LWFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjY2NjOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZGRkOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBwYWRkaW5nOiA1cHg7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgfQogICAgdGl0bGUgewogICAgICBkaXNwbGF5OiBpbmxpbmU7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgIH0KICAgIGNsb3NlLWJ1dHRvbiB7CiAgICAgIC13ZWJraXQtYWxpZ24tc2VsZjogZmxleC1lbmQ7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlZWU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICM5OTk7CiAgICAgIGZvbnQtc2l6ZTogMTBwdDsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIHBhZGRpbmc6IDJweDsKICAgICAgdGV4dC1hbGlnbjogY2VudGVyOwogICAgICB3aWR0aDogMTZweDsKICAgIH0KICAgIGNsb3NlLWJ1dHRvbjpob3ZlciB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkZGQ7CiAgICAgIGJvcmRlci1jb2xvcjogYmxhY2s7CiAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgIH0KICAgIG92ZXJsYXktY29udGVudCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgICBwYWRkaW5nOiAxMHB4OwogICAgICBtaW4td2lkdGg6IDMwMHB4OwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQogICAgYnV0dG9uLWJhciB7CiAgICAgIC13ZWJraXQtYWxpZ24taXRlbXM6IGJhc2VsaW5lOwogICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2NjYzsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3ctcmV2ZXJzZTsKICAgICAgcGFkZGluZzogNHB4OwogICAgfQogIDwvc3R5bGU+CgogIDxvdmVybGF5LW1hc2s+CiAgICA8b3ZlcmxheS12ZXJ0aWNhbC1jZW50ZXJpbmctY29udGFpbmVyPgogICAgICA8b3ZlcmxheS1mcmFtZT4KICAgICAgICA8dGl0bGUtYmFyPgogICAgICAgICAgPHRpdGxlPjwvdGl0bGU+CiAgICAgICAgICA8Y2xvc2UtYnV0dG9uPuKclTwvY2xvc2UtYnV0dG9uPgogICAgICAgIDwvdGl0bGUtYmFyPgogICAgICAgIDxvdmVybGF5LWNvbnRlbnQ+CiAgICAgICAgICA8Y29udGVudD48L2NvbnRlbnQ+CiAgICAgICAgPC9vdmVybGF5LWNvbnRlbnQ+CiAgICAgICAgPGJ1dHRvbi1iYXI+PC9idXR0b24tYmFyPgogICAgICA8L292ZXJsYXktZnJhbWU+CiAgICA8L292ZXJsYXktdmVydGljYWwtY2VudGVyaW5nLWNvbnRhaW5lcj4KICA8L292ZXJsYXktbWFzaz4KPC90ZW1wbGF0ZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1hbmFseXNpcy1saW5rIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGlubGluZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CiAgICBhIHsKICAgICAgdGV4dC1kZWNvcmF0aW9uOiB1bmRlcmxpbmU7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGEgaHJlZj0ie3tocmVmfX0iIG9uLWNsaWNrPSJvbkNsaWNrZWRfIiBvbi1tb3VzZWVudGVyPSJvbk1vdXNlRW50ZXJfIiBvbi1tb3VzZWxlYXZlPSJvbk1vdXNlTGVhdmVfIj48c2xvdD48L3Nsb3Q+PC9hPgoKICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgdGFibGUgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgYm9yZGVyLWNvbGxhcHNlOiBzZXBhcmF0ZTsKICAgICAgICBib3JkZXItc3BhY2luZzogMDsKICAgICAgICBib3JkZXItd2lkdGg6IDA7CiAgICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogaW5pdGlhbDsKICAgICAgfQoKICAgICAgdHIgPiB0ZCB7CiAgICAgICAgcGFkZGluZzogMnB4IDRweCAycHggNHB4OwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIH0KCiAgICAgIHRhYmxlID4gdGJvZHk6Zm9jdXMgewogICAgICAgIG91dGxpbmU6IG5vbmU7CiAgICAgIH0KICAgICAgdGFibGUgPiB0Ym9keTpmb2N1c1tzZWxlY3Rpb24tbW9kZT0icm93Il0gPiB0cltzZWxlY3RlZF0sCiAgICAgIHRhYmxlID4gdGJvZHk6Zm9jdXNbc2VsZWN0aW9uLW1vZGU9ImNlbGwiXSA+IHRyID4gdGRbc2VsZWN0ZWRdLAogICAgICB0YWJsZSA+IHRib2R5OmZvY3VzID4gdHIuZW1wdHktcm93ID4gdGQgewogICAgICAgIG91dGxpbmU6IDFweCBkb3R0ZWQgIzY2NjY2NjsKICAgICAgICBvdXRsaW5lLW9mZnNldDogLTFweDsKICAgICAgfQoKICAgICAgYnV0dG9uLnRvZ2dsZS1idXR0b24gewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICBsaW5lLWhlaWdodDogNjAlOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiBtaWRkbGU7CiAgICAgICAgd2lkdGg6IDEwMCU7CiAgICAgIH0KCiAgICAgIGJ1dHRvbiA+ICogewogICAgICAgIGhlaWdodDogMTVweDsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogbWlkZGxlOwogICAgICB9CgogICAgICB0ZC5idXR0b24tY29sdW1uIHsKICAgICAgICB3aWR0aDogMzBweDsKICAgICAgfQoKICAgICAgdGFibGUgPiB0aGVhZCA+IHRyID4gdGQuc2Vuc2l0aXZlOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmNmY2ZjOwogICAgICB9CgogICAgICB0YWJsZSA+IHRoZWFkID4gdHIgPiB0ZCB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgICAgdGV4dC1hbGlnbjogbGVmdDsKCiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2VlZTsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7CgogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjZmZmZmZmOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjYWFhOwogICAgICB9CgogICAgICB0YWJsZSA+IHRmb290IHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAvKiBMaWdodCByb3cgYW5kIGNlbGwgaGlnaGxpZ2h0LiAqLwogICAgICB0YWJsZSA+IHRib2R5W3Jvdy1oaWdobGlnaHQtc3R5bGU9ImxpZ2h0Il0gPiB0cltzZWxlY3RlZF0sCiAgICAgIHRhYmxlID4gdGJvZHlbY2VsbC1oaWdobGlnaHQtc3R5bGU9ImxpZ2h0Il0gPiB0ciA+IHRkW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDIxMywgMjM2LCAyMjkpOyAgLyogbGlnaHQgdHVycXVvaXNlICovCiAgICAgIH0KICAgICAgdGFibGUgPiB0Ym9keVtyb3ctaGlnaGxpZ2h0LXN0eWxlPSJsaWdodCJdID4KICAgICAgICAgIHRyOm5vdCguZW1wdHktcm93KTpub3QoW3NlbGVjdGVkXSk6aG92ZXIsCiAgICAgIHRhYmxlID4gdGJvZHlbY2VsbC1oaWdobGlnaHQtc3R5bGU9ImxpZ2h0Il0gPgogICAgICAgICAgdHI6bm90KC5lbXB0eS1yb3cpOm5vdChbc2VsZWN0ZWRdKSA+IHRkOmhvdmVyIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjZmNmY2OyAgLyogbGlnaHQgZ3JleSAqLwogICAgICB9CgogICAgICAvKiBEYXJrIHJvdyBhbmQgY2VsbCBoaWdobGlnaHQuICovCiAgICAgIHRhYmxlID4gdGJvZHlbcm93LWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4gdHJbc2VsZWN0ZWRdLAogICAgICB0YWJsZSA+IHRib2R5W2NlbGwtaGlnaGxpZ2h0LXN0eWxlPSJkYXJrIl0gPiB0ciA+IHRkW3NlbGVjdGVkXSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiKDEwMywgMTk5LCAxNjUpOyAgLyogdHVycXVvaXNlICovCiAgICAgIH0KICAgICAgdGFibGUgPiB0Ym9keVtyb3ctaGlnaGxpZ2h0LXN0eWxlPSJkYXJrIl0gPgogICAgICAgICAgdHI6bm90KC5lbXB0eS1yb3cpOm5vdChbc2VsZWN0ZWRdKTpob3ZlciwKICAgICAgdGFibGUgPiB0Ym9keVtjZWxsLWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4KICAgICAgICAgIHRyOm5vdCguZW1wdHktcm93KTpub3QoW3NlbGVjdGVkXSkgPiB0ZDpob3ZlciB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2U2ZTZlNjsgIC8qIGdyZXkgKi8KICAgICAgfQogICAgICB0YWJsZSA+IHRib2R5W3Jvdy1oaWdobGlnaHQtc3R5bGU9ImRhcmsiXSA+IHRyOmhvdmVyW3NlbGVjdGVkXSwKICAgICAgdGFibGUgPiB0Ym9keVtjZWxsLWhpZ2hsaWdodC1zdHlsZT0iZGFyayJdID4gdHJbc2VsZWN0ZWRdID4gdGQ6aG92ZXIgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigxNzEsIDIxNywgMjAyKTsgIC8qIHNlbWktbGlnaHQgdHVycXVvaXNlICovCiAgICAgIH0KCiAgICAgIHRhYmxlID4gY29sZ3JvdXAgPiBjb2xbc2VsZWN0ZWRdIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OyAgLyogZ3JleSAqLwogICAgICB9CgogICAgICB0YWJsZSA+IHRib2R5ID4gdHIuZW1wdHktcm93ID4gdGQgewogICAgICAgIGNvbG9yOiAjNjY2OwogICAgICAgIGZvbnQtc3R5bGU6IGl0YWxpYzsKICAgICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICAgIH0KCiAgICAgIHRhYmxlID4gdGJvZHkuaGFzLWZvb3RlciA+IHRyOmxhc3QtY2hpbGQgPiB0ZCB7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhYWE7CiAgICAgIH0KCiAgICAgIHRhYmxlID4gdGZvb3QgPiB0cjpmaXJzdC1jaGlsZCA+IHRkIHsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgI2ZmZmZmZjsKICAgICAgfQoKICAgICAgOmhvc3QoW3plYnJhXSkgdGFibGUgdGJvZHkgdHI6bnRoLWNoaWxkKGV2ZW4pIHsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZjRmNGY0OwogICAgICB9CgogICAgICBleHBhbmQtYnV0dG9uIHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICAgIGN1cnNvcjogcG9pbnRlcjsKICAgICAgICBtYXJnaW4tcmlnaHQ6IDNweDsKICAgICAgICBmb250LXNpemU6IHNtYWxsZXI7CiAgICAgICAgaGVpZ2h0OiAxcmVtOwogICAgICB9CgogICAgICBleHBhbmQtYnV0dG9uLmJ1dHRvbi1leHBhbmRlZCB7CiAgICAgICAgdHJhbnNmb3JtOiByb3RhdGUoOTBkZWcpOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPHRhYmxlPgogICAgICA8Y29sZ3JvdXAgaWQ9ImNvbHMiPgogICAgICA8L2NvbGdyb3VwPgogICAgICA8dGhlYWQgaWQ9ImhlYWQiPgogICAgICA8L3RoZWFkPgogICAgICA8dGJvZHkgaWQ9ImJvZHkiPgogICAgICA8L3Rib2R5PgogICAgICA8dGZvb3QgaWQ9ImZvb3QiPgogICAgICA8L3Rmb290PgogICAgPC90YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdGFibGUtaGVhZGVyLWNlbGwiPgogIDx0ZW1wbGF0ZT4KICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CgogICAgc3BhbiB7CiAgICAgIGZsZXg6IDAgMSBhdXRvOwogICAgfQoKICAgICNzaWRlIHsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgICBwYWRkaW5nLXJpZ2h0OiAycHg7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICAgIGZvbnQtc2l6ZTogMTVweDsKICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICAgIGxpbmUtaGVpZ2h0OiA4NSU7CiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICB9CgogICAgI3NpZGUuZGlzYWJsZWQgewogICAgICBjb2xvcjogcmdiKDE0MCwgMTQwLCAxNDApOwogICAgfQoKICAgICN0aXRsZTplbXB0eSwgI3NpZGU6ZW1wdHkgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQogIDwvc3R5bGU+CgogICAgPHNwYW4gaWQ9InRpdGxlIj48L3NwYW4+CiAgICA8c3BhbiBpZD0ic2lkZSI+PC9zcGFuPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyIj4KICA8dGVtcGxhdGU+PC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLXNjYWxhci1zcGFuIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1lbmQ7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgICAgLyogTGltaXQgdGhlIHNwYXJrbGluZSdzIG5lZ2F0aXZlIHotaW5kZXggdG8gdGhlIHNwYW4gb25seS4gKi8KICAgICAgaXNvbGF0aW9uOiBpc29sYXRlOwogICAgfQoKICAgIDpob3N0KC5sZWZ0LWFsaWduKSB7CiAgICAgIGp1c3RpZnktY29udGVudDogZmxleC1zdGFydDsKICAgIH0KCiAgICA6aG9zdCguaW5saW5lKSB7CiAgICAgIGRpc3BsYXk6IGlubGluZS1mbGV4OwogICAgfQoKICAgICNzcGFya2xpbmUgewogICAgICB3aWR0aDogMCU7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiAwOwogICAgICBkaXNwbGF5OiBub25lOwogICAgICBoZWlnaHQ6IDEwMCU7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IGhzbGEoMjE2LCAxMDAlLCA5NC41JSwgLjc1KTsKICAgICAgYm9yZGVyLWNvbG9yOiBoc2woMjE2LCAxMDAlLCA4OSUpOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICB6LWluZGV4OiAtMTsKICAgIH0KICAgICNzcGFya2xpbmUucG9zaXRpdmUgewogICAgICBib3JkZXItcmlnaHQtc3R5bGU6IHNvbGlkOwogICAgICAvKiBUaGUgYm9yZGVyIHdpZHRoIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggYnVpbGRTcGFya2xpbmVTdHlsZV8oKS4gKi8KICAgICAgYm9yZGVyLXJpZ2h0LXdpZHRoOiAxcHg7CiAgICB9CiAgICAjc3BhcmtsaW5lOm5vdCgucG9zaXRpdmUpIHsKICAgICAgYm9yZGVyLWxlZnQtc3R5bGU6IHNvbGlkOwogICAgICAvKiBUaGUgYm9yZGVyIHdpZHRoIG11c3QgYmUga2VwdCBpbiBzeW5jIHdpdGggYnVpbGRTcGFya2xpbmVTdHlsZV8oKS4gKi8KICAgICAgYm9yZGVyLWxlZnQtd2lkdGg6IDFweDsKICAgIH0KICAgICNzcGFya2xpbmUuYmV0dGVyIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgxMTUsIDEwMCUsIDkzJSwgLjc1KTsKICAgICAgYm9yZGVyLWNvbG9yOiBoc2woMTE4LCA2MCUsIDgwJSk7CiAgICB9CiAgICAjc3BhcmtsaW5lLndvcnNlIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogaHNsYSgwLCAxMDAlLCA4OCUsIC43NSk7CiAgICAgIGJvcmRlci1jb2xvcjogaHNsKDAsIDEwMCUsIDgwJSk7CiAgICB9CgogICAgI2NvbnRlbnQgewogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQogICAgI2NvbnRlbnQsICNzaWduaWZpY2FuY2UsICN3YXJuaW5nIHsKICAgICAgZmxleC1ncm93OiAwOwogICAgfQogICAgI2NvbnRlbnQuYmV0dGVyIHsKICAgICAgY29sb3I6IGdyZWVuOwogICAgfQogICAgI2NvbnRlbnQud29yc2UgewogICAgICBjb2xvcjogcmVkOwogICAgfQoKICAgICNzaWduaWZpY2FuY2Ugc3ZnIHsKICAgICAgbWFyZ2luLWxlZnQ6IDRweDsKICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgaGVpZ2h0OiAxZW07CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgICAgc3Ryb2tlLXdpZHRoOiA0OwogICAgICBmaWxsOiByZ2JhKDAsIDAsIDAsIDApOwogICAgfQogICAgI3NpZ25pZmljYW5jZSAjaW5zaWduaWZpY2FudCB7CiAgICAgIHN0cm9rZTogYmxhY2s7CiAgICB9CiAgICAjc2lnbmlmaWNhbmNlICNzaWduaWZpY2FudGx5X2JldHRlciB7CiAgICAgIHN0cm9rZTogZ3JlZW47CiAgICB9CiAgICAjc2lnbmlmaWNhbmNlICNzaWduaWZpY2FudGx5X3dvcnNlIHsKICAgICAgc3Ryb2tlOiByZWQ7CiAgICB9CgogICAgI3dhcm5pbmcgewogICAgICBkaXNwbGF5OiBub25lOwogICAgICBtYXJnaW4tbGVmdDogNHB4OwogICAgICBoZWlnaHQ6IDFlbTsKICAgICAgdmVydGljYWwtYWxpZ246IHRleHQtdG9wOwogICAgICBzdHJva2Utd2lkdGg6IDA7CiAgICB9CiAgICAjd2FybmluZyBwYXRoIHsKICAgICAgZmlsbDogcmdiKDI1NSwgMTg1LCAxODUpOwogICAgfQogICAgI3dhcm5pbmcgcmVjdCB7CiAgICAgIGZpbGw6IHJlZDsKICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHNwYW4gaWQ9InNwYXJrbGluZSI+PC9zcGFuPgoKICAgIDxzcGFuIGlkPSJjb250ZW50Ij48L3NwYW4+CgogICAgPHNwYW4gaWQ9InNpZ25pZmljYW5jZSI+CiAgICAgIAogICAgICA8c3ZnIGlkPSJpbnNpZ25pZmljYW50IiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgICAgICAgPGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iNjAiPjwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgY3g9IjQ0IiBjeT0iNDQiIHI9IjQiPjwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgY3g9Ijg0IiBjeT0iNDQiIHI9IjQiPjwvY2lyY2xlPgogICAgICAgIDxsaW5lIHgxPSIzNiIgeDI9IjkyIiB5MT0iODAiIHkyPSI4MCI+PC9saW5lPgogICAgICA8L3N2Zz4KCiAgICAgIAogICAgICA8c3ZnIGlkPSJzaWduaWZpY2FudGx5X2JldHRlciIgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgIDxjaXJjbGUgY3g9IjY0IiBjeT0iNjQiIHI9IjYwIj48L2NpcmNsZT4KICAgICAgICA8Y2lyY2xlIGN4PSI0NCIgY3k9IjQ0IiByPSI0Ij48L2NpcmNsZT4KICAgICAgICA8Y2lyY2xlIGN4PSI4NCIgY3k9IjQ0IiByPSI0Ij48L2NpcmNsZT4KICAgICAgICA8cGF0aCBkPSJNIDI4IDY0IFEgNjQgMTI4IDEwMCA2NCI+PC9wYXRoPgogICAgICA8L3N2Zz4KCiAgICAgIAogICAgICA8c3ZnIGlkPSJzaWduaWZpY2FudGx5X3dvcnNlIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgICAgICAgPGNpcmNsZSBjeD0iNjQiIGN5PSI2NCIgcj0iNjAiPjwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgY3g9IjQ0IiBjeT0iNDQiIHI9IjQiPjwvY2lyY2xlPgogICAgICAgIDxjaXJjbGUgY3g9Ijg0IiBjeT0iNDQiIHI9IjQiPjwvY2lyY2xlPgogICAgICAgIDxwYXRoIGQ9Ik0gMzYgOTYgUSA2NCA0OCA5MiA5NiI+PC9wYXRoPgogICAgICA8L3N2Zz4KICAgIDwvc3Bhbj4KCiAgICA8c3ZnIGlkPSJ3YXJuaW5nIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgICAgIDxwYXRoIGQ9Ik0gNjQgMCBMIDEyOCAxMjggTCAwIDEyOCBMIDY0IDAiPjwvcGF0aD4KICAgICAgPHJlY3QgaGVpZ2h0PSI4NCIgd2lkdGg9IjgiIHg9IjYwIiB5PSIwIj48L3JlY3Q+CiAgICAgIDxyZWN0IGhlaWdodD0iMjQiIHdpZHRoPSI4IiB4PSI2MCIgeT0iMTAwIj48L3JlY3Q+CiAgICA8L3N2Zz4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3LXdpdGgtbGFiZWwiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1kcmFnLWhhbmRsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICBib3gtc2l6aW5nOiBib3JkZXItYm94OwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICA6aG9zdCguaG9yaXpvbnRhbC1kcmFnLWhhbmRsZSkgewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDAsIDAgMTAwJSwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKCNFNUU1RTUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvKCNEMUQxRDEpKTsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKICAgICAgY3Vyc29yOiBucy1yZXNpemU7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBoZWlnaHQ6IDdweDsKICAgICAgcG9zaXRpb246IHJlbGF0aXZlOwogICAgfQoKICAgIDpob3N0KC52ZXJ0aWNhbC1kcmFnLWhhbmRsZSkgewogICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAwIDAsIDEwMCUgMCwKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tKCNFNUU1RTUpLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRvKCNEMUQxRDEpKTsKICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCB3aGl0ZTsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzhlOGU4ZTsKICAgICAgY3Vyc29yOiBldy1yZXNpemU7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHdpZHRoOiA3cHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdj48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InR2LXVpLWItaG90a2V5LWNvbnRyb2xsZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxkaXY+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWluZm8tYmFyIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjUyLCAyMzUsIDE2Mik7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjQTNBM0EzOwogICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIHdoaXRlOwogICAgICBib3JkZXItcmlnaHQ6IDFweCBzb2xpZCAjQTNBM0EzOwogICAgICBib3JkZXItdG9wOiAxcHggc29saWQgd2hpdGU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG1pbi1oZWlnaHQ6IDI2cHg7CiAgICAgIHBhZGRpbmc6IDAgM3B4IDAgM3B4OwogICAgfQoKICAgIDpob3N0KFtoaWRkZW5dKSB7CiAgICAgIGRpc3BsYXk6IG5vbmUgIWltcG9ydGFudDsKICAgIH0KCiAgICAjbWVzc2FnZSB7IGZsZXg6IDEgMSBhdXRvOyB9CiAgICA8L3N0eWxlPgoKICAgIDxzcGFuIGlkPSJtZXNzYWdlIj48L3NwYW4+CiAgICA8c3BhbiBpZD0iYnV0dG9ucyI+PC9zcGFuPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1tb3VzZS1tb2RlLWljb24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUR3QUFBQ2hDQVlBQUFDYkJOenZBQUFBQkhOQ1NWUUlDQWdJZkFoa2lBQUFBQWx3U0ZsekFBQUxFZ0FBQ3hJQjB0MSsvQUFBQUJWMFJWaDBRM0psWVhScGIyNGdWR2x0WlFBM0x6RTJMekV6Uk5FS1V3QUFBQngwUlZoMFUyOW1kSGRoY21VQVFXUnZZbVVnUm1seVpYZHZjbXR6SUVOVE51aThzb3dBQUE5YVNVUkJWSGljN1YxclRGdmwvLytVcmdVbVpXTXBiTGE2Y0xFcndwWXhrcUxHa2pBRzg4V1NibXVtR1VsbHZsbUFKY3RNUnR5YnZsSHJMWGlKVWVrTUladVlTQ0w1Z1MrRXVMSVhHRUdqcUNzbGxDRVc2eFFFQ2d6V0c3UzA1LytDL3prcDlMVG4wZ3NMNnljaDlKenpuT2R6UGoxOUx1ZjVQTi9uQ041OTkxM2l4UmRmUkZkWEZ4THgvMkdEZ0NBSVltcHFDb1dGaFVqRS80Y05hZSs5OXg0QUlGSC9IemFrN25EcUR1K3dPeXl3Mld6RWRsOUVNcEcyM1JlUWJLUUU3M1E4Y29KM2JmY0ZXSzFXL1BiYmIvRDcvVWhMaS8zN0R3YURFSXZGS0M4dlIwbEpTZGp4YlJWc3RWb3hQRHlNeHg5L0hBVUZCY2pNeklSQUlPQ2RYekFZaE52dGh0MXV4L0R3TUFDRWlkNVd3U01qSTNqeXlTZFJYRndNc1ZnTW9WQVlrMkNDSUpDWm1ZbnM3R3lNam81aVpHUWtQb0tYbDVleGQrOWUzaGRHSWhnTUlqOC9INW1abVJDSlJJeUN5UTVOSkJBRWdVQWdBS0ZRaUlLQ0Fpd3NMSVNsNFZ4b0hBNEgrdnY3NFhhN3VaNGFCcUZRaU96c2JJaEVJb2pGWW9qRllvaEVJdHEvOGZGeFhMbHlCVXRMU3hIVGhPYXhaODhlQ0lYQzJBV1BqNDhEQUg3OTlkZVlCYWVscFVFb0ZMTDYrK3FycndBQUgzendBYXYwWXJHWXRoTGtKSGg2ZWhwemMzTUFnUG41ZVV4UFQ4Y3NXaUFRTUpiYm9hRWhtTTFtQUlERllzSFEwQkR2UERrSnRsZ3NZZHQrdjU5TEZyeHcvZnIxc0cyWHk4VXJMMDZDNit2cnc3YkZZakV2WWk3NDdydnZ3cllsRWdtdnZEalYwZzZISStwMm9oQlAzcWgzMk9Gd29MZTNsMVZHdmIyOXNOdnR2QzhrRkNNakk5RHBkS3pTNm5RNm1Fd20xbm5UUGcvNy9YNk1qWTFoY25LUy9WWCtQL2J1M1l1eXNqTGs1dVl5cHYzNjY2OXg4dVJKWkdSa1FDUVN3ZXYxb3FPakF6MDlQWng1Q3dzTGNlblNKUncrZkJoK3Z4K3JxNnN3bVV4NDZhV1hOcVdqdmNNREF3Tzh4QUliblpLQmdRRmVOWGh6Y3pNdnNjQkdwNlM1dVJrLy92aGoxSFMwZ3JWYUxZcUxpM2tSeStWeTFOWFZSZTBSUmNLTkd6ZWcwV2g0OGFwVUtuUjFkYUc2dWpwcU90cEt5K1Z5UWExV282U2tCTGR2MzhhRkN4ZW9ZNTk4OGduMStmTGx5OVRuTDc3NEFwV1ZsWGppaVNmZ2REcXh0cmJHK2FKOVBoLzBlajNPbkRrRHZWNlBXN2R1VWNlT0hEbENmUjRkSGFVK3YvRENDN2gyN1JyVWFqV2NUaWRXVjFlamN0QUtKZ2dDS3lzcnlNek1oRTZudyt6c0xPM0pvZnQxT2gwZVBIaUFwYVVsZHVxaThCWVZGYUd2cjQ4VmIxOWZIeWZlcU0yU3orZGozUVRFczRsS0pDK25qc2ZXSm9wdGt4VXJ0alpSYkpzc09uQVNYRnRiRzNVN1VYanJyYmVpYm5NQko4RlpXVmtvS3lzREFCUVVGQ0FySzRzM01SY29GQXJxcmxaWFYwT2hVUERPaTVOZ244K0h3NGNQUXlxVjR0bG5uNFhQNStOTlRJSWdtSDBBbjgrSFYxNTVCVXFsRXErKytpb3Iza0FnUUx1Zjg0akgydG9hamg4L2p2WDFkYTZuMHNMajhTQWpJNE14SFVFUStQVFRUMW5sU1JBRUhqeDRRSHRzVzhlMFJDSVI3SFk3OXV6WkUvR09jRVVnRUVBZ0VNRGZmLzhOa1VnVWRueGJCUjg1Y2dSbXN4a0NnUUQ1K2ZrUmgyWFlJaEFJNFA3OSs1aWFtb0xENGNDeFk4ZkMwbXlyNEtlZWVnb0NnUUJXcXhWemMzTklTMHVMZWRReUdBeGkxNjVkS0M4dlIxRlJVVmlhbEh1NDA1RVN2TlB4eUFsT3VZZkpSTW85ZkZqZHczaUJxM3ZJQkRidTRiWUszdW9leHRLdEpFSDJ5V055RDhueUVHOHd1WWNmZnZnaGEzY3hydTZoM1c1SGYzOS9Rb3l6YUU2ZnlXUkNRME1EWitNc0x1N2g4dkl5ZW50N3NieTh6SWs4Vmt4TlRVR24wOEZtczhVbFAwNE5uOS92UjM5L2Y5dzhKTFp3dTkxb2JHems1Q0ZGQXErV2ZuaDRtREtvazRtV2xoYTB0cmJHbEFmdnJzM2s1Q1FHQmdhU1lvaUhvcWVuQjFldlhrMk9JYjRWRG9jREpwTXA2ZVhhWXJHZ3NiR1JWN21PdWZQcThYZ3dNRENROUhJOU56ZUhxMWV2Y2k3WHZEc2VVcWtVV3EwVzZlbnBDQWFEY0RxZDhIcTlmTE5qRGFWU2lSczNia0Fpa2ZEaTVYU0h4V0l4YW1wcUFBQUxDd3NZR2hyQzdPd3M1dWZuRXlwV0lwSEFZREFBQUNZbUpuRDkrblhldkp3RW56cDFDaktaREJVVkZRQ0FzYkd4cEpUZmp6NzZDRlZWVldocWFnSUFkSFIwOEc2WFdRdXVxYW5CN3QyNzRmVjZVVnBhaXV6c2JBQWJUenlKaE1GZ2dFS2hnTmZyUlgxOVBXUXlHUURBYURUeXlvK1Y0SnFhR3Noa01zcmljTGxjT0g3OE9JQ05DV3A4cDBjd3dXQXdvS3FxYWhQdkcyKzhBV0RqaSs3dTd1YWNKeXZCTXBrc3JLeGtaV1ZSMHlMR3hzWTRFN05CVlZWVkdLOUNvYUNtUlhSMGRIRE9rNVZndW9yQjUvT2hvcUlDWXJFNFlaMlBTTHhYcmx5QlJDTGhOY0UxcHVmaDFkVlZYTHg0RVdscGFSR25KekNCalh0SWQ4N2c0R0JVM3JpNWgxdUo1K2ZuWThtQ3RYdkloVGZsSG9ZZzVSNG1FeW4zTUFsNDVLeVdsT0NkamtkT2NNbzlUQ1pTN21IS1BlU0doTG1INUxCT3JBR1hYTjFEY2xpSHJnZEZnc2s5NUN6WWJyZkRiRGJENy9lanJLd3N0cG10Tk81aEpKaE1KclMydHNMdGRxT3BxUWxhclRaaTJtanVJV3ZCZnI4ZlpyTjUwL2l6Mld6RzlQUTBubi8rZWRvbkV6WmdpajEwdVZ3d0dvMmJ4cCtOUmlPR2hvYncrdXV2MDA1aGp0azlKRU56NkFiYnlXQ3VSRVNwMld3Mk5EYzMwdzYyV3l3VzZIUTZ6b09Jck81d2JtNHV6cDgvajVXVkZYUjJkbTQ2VmxkWGgzMzc5bUY1ZVRrdTg2ZERVVnhjaks2dUx0aHN0ckNscXJxNnVuRG8wQ0hPdkt3RSsvMStMQzR1VXFHMG9aaVltSWhhaWNRQ2t2ZnUzYnRoeHdZR0JuaFZtcHk2Tm5TRDdreHhRdkVBM1pvK2ZJc1FKOEYwNDBqMzc5L25SY3dGZEY0MDM3RndUb0xwaGtVWEZ4ZDVFWE1CM2Noa1VnUTduYzZ3ZlQ2ZkwrR20rSC8vL1JlMnorVnk4VExGR1N1dC92NStSc1BzbTIrK0FiRFI4NHBYTEZORFF3UGplbHhuejU0RnNCRksrL25ubjdQS2wvRU9hN1ZhVm1IdllyRTRhdStISzI3ZXZNa3E3RjBpa2VEbXpadXM4MlVVN0hLNXFHOHlHczZlUGN0NzNnVWRmRDRmMnR2YkdkTzF0N2R6YW9jWkJSTUVBYUZRU0JuaGRLaXBxWUZRS09SbG0wVGp6Y3ZMbzR4d09oZ01CdVRsNVhIaVpWVnArZjEreUdReTJpRHE0dUppeUdTeWhGUmNmcjhmVlZWVnRFSFVHbzBHVlZWVm5IbFoxOUplcnhkcXRScFNxWlRhSjVWS29WYXJFenJkd2V2MVFxL1hRNmxVVXZ1VVNpWDBlajB2WGs3TjBzcktDalFhRGJYbWpVYWp3Y3JLQ21mU1VMRDVPYTZzcktDdHJRMFNpUVFTaVFSdGJXMk12SEZ6RDBNcnNYaFVVbXpkdzlCS2pLbVNpcXQ3U0JCRTNDb25ydTRoT2E4a1dxQm55ajNjZ2wwRVFjUTBjTVlXVzNrSWdraUtlN2lWVjJDMVdvbjA5UFNZeExDQjErdEZabVltdGIyMnRvYnQ0RTFMQmltQVRhUUFraUtXanZlUjg1WlNnbmM2VXU1aE1wRnlEMVB1SVRla1lnL1p4QjUyZFhYRlRNbzJuMUQzOE5TcFU3empERVAveUh6aXNuSnBJc0JtNWRKNDVybnRncE9OdUlUVEppcmN0cVdsSmFiamRHQVV2TlVFcDBOb3V4Y3Z0TGEyTWdaaG1Vd216cUtqQ3JiYjdhdzlIQzVwbVdBeW1WaXZiMmt5bVRnRmUwUnNscmJlTlRhMXJ0bHNoa2drUW41K1B1c0wySXF0ZDQyTmRXTTBHcEdWbFlXVEowOHlwbzE0aC9uR0k4VWF4OFEzWEpidGVSRUZWMVpXOGlMbWV4NkphOWV1SmZTOGlEOXB1VnlPbXBvYTNMNTlHOERtVlVxM2dsek5sQXpvaW1WZ3ZycTZHbWxwYWREcjlRQTJyMUs2RmVScXBtUkFGeHZlaUlLOVhpOFZaL2pMTDc4d2h1bFVWRlRFTEpia0plTU1qVVlqSTI5VFV4TnJzUUJEWDVxTU00dzBxRTJpdUxnWXBhV2xjWE1QeVRoRHBoV01OUm9ONnV2ck9mR3lza3ZWYW5YVU5HcTFPcTVXS2NsTC9xd2pRYS9YYytabDFkTmk4bkZpOVplU3ladnFTMGVyamJtQWJUNmtUN1gxbFFwOFFlWVR5YXNLRTh3M2FKSnZQaDZQQndSQllHWm1KaTY4TXpNenFkakRVRHg2N21Fc0Z4d3JVckdIU1VDcVdkcnBTQW5lNmRpeDd1Rnp6ejFIVzBzL0ZPN2gvdjM3VVZCUWdNY2VleXhtOTlEbGNzRnV0Mk53Y0JBQ2dTRHNuVEhiN2g0ZVBIZ1F4Y1hGY1RQVE1qSXlJSkZJY09mT0hmeisrKzhQbDJEU1BTVGZ0eFF2OTNEWHJsMG9LaXJDblR0M3d0SXdGaHE2MmFwdXR4dG1zNW1hQ1I4cEhST0VRaUVrRWdudGV3L1gxdGJDM211NHRMU0U5dloybkQ5L25qWmQ2UG43OXUzakhvbzNPVG1Kc2JFeG5EbHpCc0RHV0xYZGJxY05vZW50N1lWQ29jQ2hRNGRZaCtWRmlqM3M3dTVHUjBjSDlZV2FUQ2JjdW5WcjB5TWttZmJDaFF2UWFyWFFhclZVV0Y0d0dFUjZlanA3d2RQVDB6Q2J6ZkI0UEp2MlI3TlQvSDQvckZZckppY25VVlpXeG5vd1B0VHBHeG9hZ3RGb0RBc0lpMmFudU4xdWZQbmxsK2p1N3NhbFM1ZHc0c1FKS2srNjRoSDJGVGdjRGd3UEQ0ZUpaUXUvM3crYnpjWjVKU1NMeFlMMzMzK2ZOdnFORGR4dU4zcDZlaGpQRHhNc2w4dGpqa3c1Y2VJRU5mT1ZMVlFxRmQ1ODg4MlllQTBHQTdXaVdpU0VDZmI1ZlBqcHA1OEFiS3lCeC9iQ3BWSXA2dXJxQUFEZmYvODk1d2Y2dGJVMWZQYlpad0NBanovK21QSENTU2lWU3NyM2V1ZWRkeGg1YVd0cE1yd3VKeWVIOWN1Y3pwMDdSNVVadmt0Ty9mbm5ud0NBWThlT29hK3ZqOVU1bloyZDFDc0gyZmhhVVp1bHdjRkIxa0dOaTR1TGpLL2dZd3VEd2NDSjkrMjMzMmFkZDlSbXlXNjN3KzEyUTZGUUlDOHZENWN2WDhiQ3dnSTE5VmNxbGNKbXM4SGhjR0J5Y2pKdVN6NmFUQ2JNenM1Q3E5WGk2TkdqR0IwZHhjVEVCSnhPSnlRU0NaUktKVVpHUmpBeU1vTC8vZTkvakJGc29hQVZMSmZMS1p2RDRYQlEzN1pFSXRsVXBoME9CMjM4Z1Z3dTV5U1FoRXFsb3BvK2k4VkN0YnN5bVd4VG1iNTc5eTZ0NDZCU3FSZzVhQVhYMXRiaTIyKy9EWnZZNVhRNmFRTXVReUdWU2xGYlc4dHJnYjZXbGhZME5EUmdZbUppMC82Wm1SbkdZVnlsVW9tV2xoYkdlR2JhTXV6eGVLRFJhS2hWRGRrZ096c2JsWldWT0hmdUhPODJmSDE5SFcxdGJXaHFhbUw5dWwyWlRJYlhYbnNObloyZHJON3lGZkZGank2WEM2V2xwVkNwVkZoYVdzSy8vLzVMVmZuejgvUEl5OHNEQU96ZXZSdTV1Ym5JeWNtQngrT0pLWjZZSUFqNGZEN1UxOWVqc2JFUmYvenhCNGFIaHlrcmRIeDhIRTgvL1RRQVlQLysvVkFxbFZBb0ZKeDRJMVphcEdpeXJCdzRjQUQzN3QyRFhDN0hnUU1IQUd4MFFYTnljckMrdmg2M1ZSNUNlY253M0o2ZUhxaFVLcFNYbHdQWTZPSSs4OHd6QUxpSHhuTjZQUHo1NTUvRDloMDhlSkFUSVIvUXpkOWdFL0ZLaDlTWUZsdkk1WEtxUE1VQ3JsRnVLcFVLcDArZlprd1hEQVpwOTNNU0xCYUxVVkpTZ3FOSGp5SWpJd05lcnpmbU9SMHVsNHN4OWxBaWtlRDA2ZE40K2VXWElaVktHWG5qNWg1ZXZIZ1JYcThYSG8rSGQ5TVRDcEZJaEh2MzdpRW5KeWRxcC8rSEgzNkExK3VGeStWaXJLVGk2aDdHdWc3dFZwRHVJVUVRS0N3c2pPZ2UvdlBQUDZ6eUN3UUNXRjVleGw5Ly9ZWDUrWGxhOTNEYnpUU2J6UWFyMVlyMTlmVzR1b2NsSlNVcDl4QjRCSnVsbE9DZGprZE84UDhCR0NRMGhuRjFEeFVBQUFBQVNVVk9SSzVDWUlJPSk7CiAgICAgIHdpZHRoOiAyN3B4OwogICAgICBoZWlnaHQ6IDMwcHg7CiAgICB9CiAgICA6aG9zdC5hY3RpdmUgewogICAgICBjdXJzb3I6IGF1dG87CiAgICB9CiAgICA8L3N0eWxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1tb3VzZS1tb2RlLXNlbGVjdG9yIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CgogICAgICAtd2Via2l0LXVzZXItZHJhZzogZWxlbWVudDsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogbm9uZTsKCiAgICAgIGJhY2tncm91bmQ6ICNEREQ7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNCQkI7CiAgICAgIGJvcmRlci1yYWRpdXM6IDRweDsKICAgICAgYm94LXNoYWRvdzogMCAxcHggMnB4IHJnYmEoMCwwLDAsMC4yKTsKICAgICAgbGVmdDogY2FsYygxMDAlIC0gMTIwcHgpOwogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIHRvcDogMTAwcHg7CiAgICAgIHVzZXItc2VsZWN0OiBub25lOwogICAgICB3aWR0aDogMjlweDsKICAgICAgei1pbmRleDogMjA7CiAgICB9CgogICAgLmRyYWctaGFuZGxlIHsKICAgICAgYmFja2dyb3VuZDogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBRHdBQUFDaENBWUFBQUNiQk56dkFBQUFCSE5DU1ZRSUNBZ0lmQWhraUFBQUFBbHdTRmx6QUFBTEVnQUFDeElCMHQxKy9BQUFBQlYwUlZoMFEzSmxZWFJwYjI0Z1ZHbHRaUUEzTHpFMkx6RXpSTkVLVXdBQUFCeDBSVmgwVTI5bWRIZGhjbVVBUVdSdlltVWdSbWx5WlhkdmNtdHpJRU5UTnVpOHNvd0FBQTlhU1VSQlZIaWM3VjFyVEZ2bC8vK1VyZ1VtWldNcGJMYTZjTEVyd3BZeGtxTEdrakFHODhXU2JtdW1HVWxsdmxtQUpjdE1SdHlidmxIckxYaUpVZWtNSVp1WVNDTDVnUytFdUxJWEdFR2pxQ3NsbENFVzZ4UUVDZ3pXRzdTMDUvK0MvemtwOUxUbjBnc0w2eWNoOUp6em5PZHpQajE5THVmNVBOL25DTjU5OTEzaXhSZGZSRmRYRnhMeC8yR0RnQ0FJWW1wcUNvV0ZoVWpFLzRjTmFlKzk5eDRBSUZIL0h6YWs3bkRxRHUrd095eXcyV3pFZGw5RU1wRzIzUmVRYktRRTczUThjb0ozYmZjRldLMVcvUGJiYi9ENy9VaExpLzM3RHdhREVJdkZLQzh2UjBsSlNkanhiUlZzdFZveFBEeU14eDkvSEFVRkJjak16SVJBSU9DZFh6QVloTnZ0aHQxdXgvRHdNQUNFaWQ1V3dTTWpJM2p5eVNkUlhGd01zVmdNb1ZBWWsyQ0NJSkNabVluczdHeU1qbzVpWkdRa1BvS1hsNWV4ZCs5ZTNoZEdJaGdNSWo4L0g1bVptUkNKUkl5Q3lRNU5KQkFFZ1VBZ0FLRlFpSUtDQWl3c0xJU2w0VnhvSEE0SCt2djc0WGE3dVo0YUJxRlFpT3pzYkloRUlvakZZb2pGWW9oRUl0cS84ZkZ4WExseUJVdExTeEhUaE9heFo4OGVDSVhDMkFXUGo0OERBSDc5OWRlWUJhZWxwVUVvRkxMNisrcXJyd0FBSDN6d0FhdjBZckdZdGhMa0pIaDZlaHB6YzNNQWdQbjVlVXhQVDhjc1dpQVFNSmJib2FFaG1NMW1BSURGWXNIUTBCRHZQRGtKdGxnc1lkdCt2NTlMRnJ4dy9mcjFzRzJYeThVckwwNkM2K3ZydzdiRllqRXZZaTc0N3J2dndyWWxFZ212dkRqVjBnNkhJK3Ayb2hCUDNxaDMyT0Z3b0xlM2wxVkd2YjI5c052dHZDOGtGQ01qSTlEcGRLelM2blE2bUV3bTFublRQZy83L1g2TWpZMWhjbktTL1ZYK1AvYnUzWXV5c2pMazV1WXlwdjM2NjY5eDh1UkpaR1JrUUNRU3dldjFvcU9qQXowOVBaeDVDd3NMY2VuU0pSdytmQmgrdngrcnE2c3dtVXg0NmFXWE5xV2p2Y01EQXdPOHhBSWJuWktCZ1FGZU5YaHpjek12c2NCR3A2UzV1UmsvL3ZoajFIUzBnclZhTFlxTGkza1J5K1Z5MU5YVlJlMFJSY0tOR3plZzBXaDQ4YXBVS25SMWRhRzZ1anBxT3RwS3krVnlRYTFXbzZTa0JMZHYzOGFGQ3hlb1k1OTg4Z24xK2ZMbHk5VG5MNzc0QXBXVmxYamlpU2ZnZERxeHRyYkcrYUo5UGgvMGVqM09uRGtEdlY2UFc3ZHVVY2VPSERsQ2ZSNGRIYVUrdi9EQ0M3aDI3UnJVYWpXY1RpZFdWMWVqY3RBS0pnZ0NLeXNyeU16TWhFNm53K3pzTE8zSm9mdDFPaDBlUEhpQXBhVWxkdXFpOEJZVkZhR3ZyNDhWYjE5Zkh5ZmVxTTJTeitkajNRVEVzNGxLSkMrbmpzZldKb3B0a3hVcnRqWlJiSnNzT25BU1hGdGJHM1U3VVhqcnJiZWlibk1CSjhGWldWa29LeXNEQUJRVUZDQXJLNHMzTVJjb0ZBcnFybFpYVjBPaFVQRE9pNU5nbjgrSHc0Y1BReXFWNHRsbm40WFA1K05OVElJZ21IMEFuOCtIVjE1NUJVcWxFcSsrK2lvcjNrQWdRTHVmODRqSDJ0b2FqaDgvanZYMWRhNm4wc0xqOFNBakk0TXhIVUVRK1BUVFQxbmxTUkFFSGp4NFFIdHNXOGUwUkNJUjdIWTc5dXpaRS9HT2NFVWdFRUFnRU1EZmYvOE5rVWdVZG54YkJSODVjZ1Jtc3hrQ2dRRDUrZmtSaDJYWUloQUk0UDc5KzVpYW1vTEQ0Y0N4WThmQzBteXI0S2VlZWdvQ2dRQldxeFZ6YzNOSVMwdUxlZFF5R0F4aTE2NWRLQzh2UjFGUlVWaWFsSHU0MDVFU3ZOUHh5QWxPdVlmSlJNbzlmRmpkdzNpQnEzdklCRGJ1NGJZSzN1b2V4dEt0SkVIMnlXTnlEOG55RUc4d3VZY2ZmdmdoYTNjeHJ1NmgzVzVIZjM5L1FveXphRTZmeVdSQ1EwTURaK01zTHU3aDh2SXllbnQ3c2J5OHpJazhWa3hOVFVHbjA4Rm1zOFVsUDA0Tm45L3ZSMzkvZjl3OEpMWnd1OTFvYkd6azVDRkZBcStXZm5oNG1ES29rNG1XbGhhMHRyYkdsQWZ2cnMzazVDUUdCZ2FTWW9pSG9xZW5CMWV2WGsyT0liNFZEb2NESnBNcDZlWGFZckdnc2JHUlY3bU91ZlBxOFhnd01EQ1E5SEk5TnplSHExZXZjaTdYdkRzZVVxa1VXcTBXNmVucENBYURjRHFkOEhxOWZMTmpEYVZTaVJzM2JrQWlrZkRpNVhTSHhXSXhhbXBxQUFBTEN3c1lHaHJDN093czV1Zm5FeXBXSXBIQVlEQUFBQ1ltSm5EOStuWGV2SndFbnpwMUNqS1pEQlVWRlFDQXNiR3hwSlRmano3NkNGVlZWV2hxYWdJQWRIUjA4RzZYV1F1dXFhbkI3dDI3NGZWNlVWcGFpdXpzYkFBYlR6eUpoTUZnZ0VLaGdOZnJSWDE5UFdReUdRREFhRFR5eW8rVjRKcWFHc2hrTXNyaWNMbGNPSDc4T0lDTkNXcDhwMGN3d1dBd29LcXFhaFB2RzIrOEFXRGppKzd1N3VhY0p5dkJNcGtzckt4a1pXVlIweUxHeHNZNEU3TkJWVlZWR0s5Q29hQ21SWFIwZEhET2s1Vmd1b3JCNS9PaG9xSUNZckU0WVoyUFNMeFhybHlCUkNMaE5jRTFwdWZoMWRWVlhMeDRFV2xwYVJHbkp6Q0JqWHRJZDg3ZzRHQlUzcmk1aDF1SjUrZm5ZOG1DdFh2SWhUZmxIb1lnNVI0bUV5bjNNQWw0NUt5V2xPQ2Rqa2RPY01vOVRDWlM3bUhLUGVTR2hMbUg1TEJPckFHWFhOMURjbGlIcmdkRmdzazk1Q3pZYnJmRGJEYkQ3L2Vqckt3c3RwbXROTzVoSkpoTUpyUzJ0c0x0ZHFPcHFRbGFyVFppMm1qdUlXdkJmcjhmWnJONTAvaXoyV3pHOVBRMG5uLytlZG9uRXpaZ2lqMTB1Vnd3R28yYnhwK05SaU9HaG9idyt1dXYwMDVoanRrOUpFTno2QWJieVdDdVJFU3AyV3cyTkRjMzB3NjJXeXdXNkhRNnpvT0lyTzV3Ym00dXpwOC9qNVdWRlhSMmRtNDZWbGRYaDMzNzltRjVlVGt1ODZkRFVWeGNqSzZ1THRoc3RyQ2xxcnE2dW5EbzBDSE92S3dFKy8xK0xDNHVVcUcwb1ppWW1JaGFpY1FDa3ZmdTNidGh4d1lHQm5oVm1weTZOblNEN2t4eFF2RUEzWm8rZklzUUo4RjA0MGozNzkvblJjd0ZkRjQwMzdGd1RvTHBoa1VYRnhkNUVYTUIzY2hrVWdRN25jNndmVDZmTCtHbStILy8vUmUyeitWeThUTEZHU3V0L3Y1K1JzUHNtMisrQWJEUjg0cFhMRk5EUXdQamVseG56NTRGc0JGSysvbm5uN1BLbC9FT2E3VmFWbUh2WXJFNGF1K0hLMjdldk1rcTdGMGlrZURtelp1czgyVVU3SEs1cUc4eUdzNmVQY3Q3M2dVZGZENGYydHZiR2RPMXQ3ZHphb2NaQlJNRUFhRlFTQm5oZEtpcHFZRlFLT1JsbTBUanpjdkxvNHh3T2hnTUJ1VGw1WEhpWlZWcCtmMSt5R1F5MmlEcTR1Sml5R1N5aEZSY2ZyOGZWVlZWdEVIVUdvMEdWVlZWbkhsWjE5SmVyeGRxdFJwU3FaVGFKNVZLb1ZhckV6cmR3ZXYxUXEvWFE2bFVVdnVVU2lYMGVqMHZYazdOMHNyS0NqUWFEYlhtalVhandjcktDbWZTVUxENU9hNnNyS0N0clEwU2lRUVNpUVJ0YlcyTXZIRnpEME1yc1hoVVVtemR3OUJLakttU2lxdDdTQkJFM0NvbnJ1NGhPYThrV3FCbnlqM2NnbDBFUWNRMGNNWVdXM2tJZ2tpS2U3aVZWMkMxV29uMDlQU1l4TENCMSt0RlptWW10YjIydG9idDRFMUxCaW1BVGFRQWtpS1dqdmVSODVaU2duYzZVdTVoTXBGeUQxUHVJVGVrWWcvWnhCNTJkWFhGVE1vMm4xRDM4TlNwVTd6akRFUC95SHppc25KcElzQm01ZEo0NXJudGdwT051SVRUSmlyY3RxV2xKYWJqZEdBVXZOVUVwME5vdXhjdnRMYTJNZ1pobVV3bXpxS2pDcmJiN2F3OUhDNXBtV0F5bVZpdmIya3ltVGdGZTBSc2xyYmVOVGExcnRsc2hrZ2tRbjUrUHVzTDJJcXRkNDJOZFdNMEdwR1ZsWVdUSjA4eXBvMTRoL25HSThVYXg4UTNYSmJ0ZVJFRlYxWlc4aUxtZXg2SmE5ZXVKZlM4aUQ5cHVWeU9tcG9hM0w1OUc4RG1WVXEzZ2x6TmxBem9pbVZndnJxNkdtbHBhZERyOVFBMnIxSzZGZVJxcG1SQUZ4dmVpSUs5WGk4VlovakxMNzh3aHVsVVZGVEVMSmJrSmVNTWpVWWpJMjlUVXhOcnNRQkRYNXFNTTR3MHFFMml1TGdZcGFXbGNYTVB5VGhEcGhXTU5Sb042dXZyT2ZHeXNrdlZhblhVTkdxMU9xNVdLY2xML3F3alFhL1hjK1psMWROaThuRmk5WmVTeVp2cVMwZXJqYm1BYlQ2a1Q3WDFsUXA4UWVZVHlhc0tFOHczYUpKdlBoNlBCd1JCWUdabUppNjhNek16cWRqRFVEeDY3bUVzRnh3clVyR0hTVUNxV2RycFNBbmU2ZGl4N3VGenp6MUhXMHMvRk83aC92MzdVVkJRZ01jZWV5eG05OURsY3NGdXQyTndjQkFDZ1NEc25USGI3aDRlUEhnUXhjWEZjVFBUTWpJeUlKRkljT2ZPSGZ6KysrOFBsMkRTUFNUZnR4UXY5M0RYcmwwb0tpckNuVHQzd3RJd0ZocTYyYXB1dHh0bXM1bWFDUjhwSFJPRVFpRWtFZ250ZXcvWDF0YkMzbXU0dExTRTl2WjJuRDkvbmpaZDZQbjc5dTNqSG9vM09UbUpzYkV4bkRsekJzREdXTFhkYnFjTm9lbnQ3WVZDb2NDaFE0ZFloK1ZGaWozczd1NUdSMGNIOVlXYVRDYmN1blZyMHlNa21mYkNoUXZRYXJYUWFyVlVXRjR3R0VSNmVqcDd3ZFBUMHpDYnpmQjRQSnYyUjdOVC9INC9yRllySmljblVWWld4bm93UHRUcEd4b2FndEZvREFzSWkyYW51TjF1ZlBubGwranU3c2FsUzVkdzRzUUpLays2NGhIMkZUZ2NEZ3dQRDRlSlpRdS8zdytiemNaNUpTU0x4WUwzMzMrZk52cU5EZHh1TjNwNmVoalBEeE1zbDh0amprdzVjZUlFTmZPVkxWUXFGZDU4ODgyWWVBMEdBN1dpV2lTRUNmYjVmUGpwcDU4QWJLeUJ4L2JDcFZJcDZ1cnFBQURmZi84OTV3ZjZ0YlUxZlBiWlp3Q0Fqei8rbVBIQ1NTaVZTc3IzZXVlZGR4aDVhV3RwTXJ3dUp5ZUg5Y3VjenAwN1I1VVp2a3RPL2Zubm53Q0FZOGVPb2Erdmo5VTVuWjJkMUNzSDJmaGFVWnVsd2NGQjFrR05pNHVMaksvZ1l3dUR3Y0NKOSsyMzMyYWRkOVJteVc2M3crMTJRNkZRSUM4dkQ1Y3ZYOGJDd2dJMTlWY3FsY0ptczhIaGNHQnljakp1U3o2YVRDYk16czVDcTlYaTZOR2pHQjBkeGNURUJKeE9KeVFTQ1pSS0pVWkdSakF5TW9MLy9lOS9qQkZzb2FBVkxKZkxLWnZENFhCUTM3WkVJdGxVcGgwT0IyMzhnVnd1NXlTUWhFcWxvcG8raThWQ3Ric3ltV3hUbWI1Nzl5NnQ0NkJTcVJnNWFBWFgxdGJpMjIrL0Radlk1WFE2YVFNdVF5R1ZTbEZiVzh0cmdiNldsaFkwTkRSZ1ltSmkwLzZabVJuR1lWeWxVb21XbGhiR2VHYmFNdXp4ZUtEUmFLaFZEZGtnT3pzYmxaV1ZPSGZ1SE84MmZIMTlIVzF0YldocWFtTDl1bDJaVEliWFhuc05uWjJkck43eUZmRkZqeTZYQzZXbHBWQ3BWRmhhV3NLLy8vNUxWZm56OC9QSXk4c0RBT3pldlJ1NXVibkl5Y21CeCtPSktaNllJQWo0ZkQ3VTE5ZWpzYkVSZi96eEI0YUhoeWtyZEh4OEhFOC8vVFFBWVAvKy9WQXFsVkFvRkp4NEkxWmFwR2l5ckJ3NGNBRDM3dDJEWEM3SGdRTUhBR3gwUVhOeWNyQyt2aDYzVlI1Q2VjbnczSjZlSHFoVUtwU1hsd1BZNk9JKzg4d3pBTGlIeG5ONlBQejU1NS9EOWgwOGVKQVRJUi9RemQ5Z0UvRktoOVNZRmx2STVYS3FQTVVDcmxGdUtwVUtwMCtmWmt3WERBWnA5M01TTEJhTFVWSlNncU5IanlJakl3TmVyemZtT1IwdWw0c3g5bEFpa2VEMDZkTjQrZVdYSVpWS0dYbmo1aDVldkhnUlhxOFhIbytIZDlNVENwRkloSHYzN2lFbkp5ZHFwLytISDM2QTErdUZ5K1ZpcktUaTZoN0d1Zzd0VnBEdUlVRVFLQ3dzak9nZS92UFBQNnp5Q3dRQ1dGNWV4bDkvL1lYNStYbGE5M0RielRTYnpRYXIxWXIxOWZXNHVvY2xKU1VwOXhCNEJKdWxsT0NkamtkTzhQOEJHQ1EwaG5GMUR4VUFBQUFBU1VWT1JLNUNZSUk9KSAycHggM3B4IG5vLXJlcGVhdDsKICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCQ0JDQkM7CiAgICAgIGN1cnNvcjogbW92ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGhlaWdodDogMTNweDsKICAgICAgd2lkdGg6IDI3cHg7CiAgICB9CgogICAgLnRvb2wtYnV0dG9uIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogY2VudGVyIGNlbnRlcjsKICAgICAgYmFja2dyb3VuZC1yZXBlYXQ6IG5vLXJlcGVhdDsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNCQ0JDQkM7CiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjRjFGMUYxOwogICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICB9CgogICAgLmJ1dHRvbnMgPiAudG9vbC1idXR0b246bGFzdC1jaGlsZCB7CiAgICAgIGJvcmRlci1ib3R0b206IG5vbmU7CiAgICB9CgogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImRyYWctaGFuZGxlIj48L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImJ1dHRvbnMiPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLWNocm9tZS1jYy1kaXNwbGF5LWl0ZW0tbGlzdC1pdGVtIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzU1NTsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgICAgcGFkZGluZzogM3B4IDVweDsKICAgICAgfQoKICAgICAgOmhvc3QoOmhvdmVyKSB7CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2YwZjBmMDsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgewogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIG1hcmdpbjogMnB4IDA7CiAgICAgIH0KCiAgICAgIC5oZWFkZXIgPiAuZXh0cmEgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICM3Nzc7CiAgICAgICAgYm9yZGVyLXJhZGl1czogNHB4OwogICAgICAgIGNvbG9yOiB3aGl0ZTsKICAgICAgICBtYXJnaW46IDAgNnB4OwogICAgICAgIHRleHQtZGVjb3JhdGlvbjogbm9uZTsKICAgICAgICBwYWRkaW5nOiAycHggNHB4OwogICAgICB9CgogICAgICAucmF3LWRldGFpbHMgewogICAgICAgIHdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKICAgICAgfQoKICAgICAgLmRldGFpbHMgPiBkbCB7CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICA6aG9zdCg6bm90KFtzZWxlY3RlZF0pKSAuZGV0YWlscyB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgY2xhc3M9ImhlYWRlciI+CiAgICAgIHt7bmFtZX19CiAgICAgIDx0ZW1wbGF0ZSBpZj0ie3tfY29tcHV0ZUlmU0tQKHJpY2hEZXRhaWxzKX19IiBpcz0iZG9tLWlmIj4KICAgICAgICA8YSBjbGFzcz0iZXh0cmEiIGRvd25sb2FkPSJkcmF3aW5nLnNrcCIgaHJlZiQ9Int7X2NvbXB1dGVIcmVmKHJpY2hEZXRhaWxzKX19IiBvbi1jbGljaz0ie3tzdG9wUHJvcGFnYXRpb259fSI+U0tQPC9hPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGNsYXNzPSJkZXRhaWxzIj4KICAgICAgPHRlbXBsYXRlIGlmPSJ7e3Jhd0RldGFpbHN9fSIgaXM9ImRvbS1pZiI+CiAgICAgICAgPGRpdiBjbGFzcz0icmF3LWRldGFpbHMiPnt7cmF3RGV0YWlsc319PC9kaXY+CiAgICAgIDwvdGVtcGxhdGU+CiAgICAgIDx0ZW1wbGF0ZSBpZj0ie3tyaWNoRGV0YWlsc319IiBpcz0iZG9tLWlmIj4KICAgICAgICA8ZGw+CiAgICAgICAgICA8dGVtcGxhdGUgaWY9Int7cmljaERldGFpbHMudmlzdWFsUmVjdH19IiBpcz0iZG9tLWlmIj4KICAgICAgICAgICAgPGR0PlZpc3VhbCByZWN0PC9kdD4KICAgICAgICAgICAgPGRkPnt7cmljaERldGFpbHMudmlzdWFsUmVjdC54fX0se3tyaWNoRGV0YWlscy52aXN1YWxSZWN0Lnl9fQogICAgICAgICAgICAgICAge3tyaWNoRGV0YWlscy52aXN1YWxSZWN0LndpZHRofX3Dl3t7cmljaERldGFpbHMudmlzdWFsUmVjdC5oZWlnaHR9fQogICAgICAgICAgICA8L2RkPgogICAgICAgICAgPC90ZW1wbGF0ZT4KICAgICAgICA8L2RsPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KCjwvZG9tLW1vZHVsZT48dGVtcGxhdGUgaWQ9InRyLXVpLWUtY2hyb21lLWNjLWRpc3BsYXktaXRlbS1kZWJ1Z2dlci10ZW1wbGF0ZSI+CiAgPGxlZnQtcGFuZWw+CiAgICA8ZGlzcGxheS1pdGVtLWluZm8+CiAgICAgIDxoZWFkZXI+CiAgICAgICAgPHNwYW4gY2xhc3M9InRpdGxlIj5EaXNwbGF5IEl0ZW0gTGlzdDwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+PC9zcGFuPgogICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydCI+CiAgICAgICAgICA8aW5wdXQgY2xhc3M9ImRsZmlsZW5hbWUiIHR5cGU9InRleHQiIHZhbHVlPSJkaXNwbGF5aXRlbWxpc3QuanNvbiIvPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0iZGxleHBvcnQiPkV4cG9ydCBkaXNwbGF5IGl0ZW0gbGlzdDwvYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImV4cG9ydCI+CiAgICAgICAgICA8aW5wdXQgY2xhc3M9InNrcGZpbGVuYW1lIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ic2twaWN0dXJlLnNrcCIvPgogICAgICAgICAgPGJ1dHRvbiBjbGFzcz0ic2twZXhwb3J0Ij5FeHBvcnQgbGlzdCBhcyBTa1BpY3R1cmU8L2J1dHRvbj4KICAgICAgICA8L2Rpdj4KICAgICAgPC9oZWFkZXI+CiAgICA8L2Rpc3BsYXktaXRlbS1pbmZvPgogIDwvbGVmdC1wYW5lbD4KICA8cmlnaHQtcGFuZWw+CiAgICA8cmFzdGVyLWFyZWE+CiAgICAgIDxjYW52YXMtc2Nyb2xsZXI+CiAgICAgICAgPGNhbnZhcz48L2NhbnZhcz4KICAgICAgPC9jYW52YXMtc2Nyb2xsZXI+CiAgICA8L3Jhc3Rlci1hcmVhPgogIDwvcmlnaHQtcGFuZWw+CjwvdGVtcGxhdGU+PHRlbXBsYXRlIGlkPSJxdWFkLXN0YWNrLXZpZXctdGVtcGxhdGUiPgogIDxzdHlsZT4KICAjY2hyb21lLWxlZnQgewogICAgYmFja2dyb3VuZC1pbWFnZTogdXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTWNBQUFCSUNBWUFBQUJDNCtITEFBQUFCbUpMUjBRQS93RC9BUCtndmFlVEFBQUFDWEJJV1hNQUFCWWxBQUFXSlFGSlVpVHdBQUFBQjNSSlRVVUgzUWNORnlNbVYvUG05UUFBSUFCSlJFRlVlTnJ0dlhtd1hkZDEzdmxiZTkvN0JnekVRQUljUUFJRVFZS2pTQW9rTFZsT1c1RmsybkxLbXF4MEoyV3AwazY1MmgxM3VpeTVYWXFkd1U3c1NuY2twWjF5VjNVNzVhcFU0a29zMjdFbHU5Tmx5UlhaamlpUm9tU1RJaVdaczBod0hzQUJKSVkzM3JQWDZqL1cydWVlZDNEdkF5REtLb0dGVzBVQ2VPL2VjL2ZaWisyOXY3WFd0NzRsQUl1TGk3dFhWMWYvcmFxK3pjeTJBb2dJWnNicHZycWZNek5FNUlTLzEvZlZuNXNaS2FVVHJ0WDkvdjduVCtmbjllLzFlMDUyWC8zcjFUSFdhM1IvMzcrbWlLQ3E3YyttalcvYStGL1A1N3ZqNi80NWJheW4rd3pYczRuKzc5NFE5blA4K1BIZFMwdEwzMUxWbWZwR1ZRVTRZU0luR1ViL1lmWnZwbit6cC9MUXU0WTI3WDMxZDkzM251cmtxK3FhYTA4eW90TzU1bnBHMHYyTytyMS9YWjlmYjJGTVdvRDlPZTUrcGp1Ly9lK2ZkUDN1ODMrajJJKzg5TkpMbjExZFhmMWJkU0NUSm5uU1NwejIrL1ZXWi84bSt3K2cvekQ2MTZ5VDJQOTczM0JPWjVmNGRoYkNldlBRSGV0NjN6VnRWM3k5bjEvdi9rOW5aNTYyU05ZN0dkNW85aVBQUC8vOHF4VktyUWRMK2hPeTNxcWRORW5UanYxSkErdnVScE1HdmQ3a244b0NxZGVkOUIyVEh1SjZ1L0trNyt2dWlOT2dRSDhPWCsvbnA4MTMvMzc2Ty9Da1UyRWF2RHdWV1BpR3NwOW5uMzNXSnQzSXRGMm5lMnhPZTJqVEh1VEpNT1MwSGUxVWNHMzM3OTFKbVdRWWt6QjZkeWZwN3R5bnNrdFBHOC9KZHYyVEdjTHBmSDdTYzVtMEVLWkJzUFYrdHA0UE1lMzlid2o3ZWZycHAyMjlHNXUyTzNXUHBsTjFjRS9YUVpzRU55YnRuTk4ycHY0eDNOMUZwdTJTL1NPNmo2ZlhnejZuNGdSUEdtTWZSNy9lei9jWGQvMTc5OFRzZnI0UE1VNTJPcTRIcDk1STlqUG9yN1pKK0c3U1RsRW52TjdnZXNmWHBCMnRINWxaenluck8wN1R4dGI5MmFRVFk5cnYrM2kxdjRqcXY1dW1PU0VxMHI5TzMvaXFFVXg2TVBYbnFqcHhyazczODEyb01RbVA5Njh6eVVqNjh6UHArVTFieEc4MCs1R25ubnJLcGtWeFRpV1V1TjRxNys5Ni9ZRlhwNnB2QU5OOGhEN01tUmJGNk83MjAwS1I5ZWQ5Q0RicFNGNHY2aklKdG5RalFkUEdPeWxLOXAzNC9Ib3dhRkwwWjczSVVOZXg3WjVHazNia042TDl5Qk5QUEdIZFkzZmF5dTN1U1AwZHFINjJ1eVAwdzRYckRXbzk1N2dQRWZxZjc4ZTRwNFU4KzBZODZSNjcxMXB2QVV5TDN2VHZkOW91MjM4US9YbjRkajQvQ2Q2ZDdCbE1DNTMyNTM0UzlPbk84eHZWZnVUeHh4KzM5Ukpsay9EdHBBR2M2azZocXVTY3ArN0VreUluMCtMVjYwVWZwdTJxMDV6Ti9zT1lGSWZ2UDhDVDVWRW1HV04vaDV3MHptLzM4K3NsNy9yM2RyTG50dDU4cnpkWGJ5VDdrY2NlZTh6Nk8yYjNKbkxPNnpwams0N25reVZnMXB1MDdtdWFzOWIzQ2FaaDRmNXVQTW40U2lrbjdKajlSVEVKTW5RZlZIZGNrNHgzV3Q1aTBxTDZkajgvNldRNUdjU1lCaUVuK1NUcmhUL2ZxUFl6bUpZeHJSY29wYXg1ZUgxOE9pMzhXSTJ1bExJbVlUUE5NYXZ2NzE2ei85M3JSWFVtT1pYVmdaNWtlUFg3K2hQZU41eEpUbXgzTWRYZjl6SHlNODg4dzhMQ3dnbjMwSVVRMHh6V1NZdmhWRDQvTGFyVHpwV0JwT2wrenFSUTlscWpFMkRDdGJIMng5TVczWEE0NUp4enptSG56cDBuallwOXI5alBvSDc1R2tla2M4U1oyWnBqckgvRXo4d01TU21ITVk0WWpacDJNRG5uaVZHVC9zUHZSaHhtWjJmSk9XSG14ajBhalU3QXR2VjZrNDcyN2dTa2xNZzVNNGpkcTZpeXVybzY5YnY3OTlmTnB0WUYwWDN2SktqejhNTVBNeisvZ1d1dnVZYXRXN2VTY2dJRXdUQURFd0VVQVpEa0JndHVZT05sQ0NKZ0F1Wi9ONVFrQ2NQOGF2RnpVSDhmc1pnTkVvSkpMQWFrYysyVGpFTmk5MFJRakdTQ0ptMS9od2xtZ21SRkZJd0VZb2lOeHlQeHZZWjA3Z1ZLVXpoOCtERDMzM2NmUlpYTExydnNCTHhmamJsNzZweU8vWlJTMXRocTMyNU8xMzdrNFljZnR2VVNPZjFVZmRjby91d0xYK0xPdjdpYloxOTRFWUJkRit6a0I5NTZDKzk4Kzk5QVJFNjR1ZTZYcXlxRHdhRGRHWnFtNFF0Zi9ESzNmK1V2ZU83UVMydXU5NDRmL0lIMldwTndkcDJVL29UOCtXMjNjOGRYNytLNUdOOUZGK3prYjd6bFp0NzFqaDljc3dOUHc4dVRzUFUwaDE5VmVlU1JSN2o1NWx2WXVtVXpLNk1DcHFUczlwMkFBaVJMbUNoV0JCSUlpcVpFTWtWVU1BUVRKWnRRU0NDS2tERTAvaCs3dHdrS3BDU1l4cmhWTVRHeUNZb2dvaFJMQ0d2SG9ZRDB4eUdLU2NJVXBDNUFWU1FsLzBBQ2F4ZUNrSkpoYWtEQ1RKRUVpS0FtRE14OFhTZEFZNmxaUWpIbVpvYTg5TkxMM1B2MXIzUFZWVmVlc0RIM1QrRlR0Wi91Z3VodTh2M28zNm5hajRnZ2p6enlpUFhod3RSak9mNit0TGpFUC8vNHIzSE91UmZ3NXBzUHNPZVNYUUE4K2RRejNQdTFlemwyK0JDLy9JOStqdm41dVhXakRmVzF1TGpJcjM3eTE5bTgvZnpKMTN2bEJmNzVMLzQ4YzNPemEzYVdhZFNQNWVVVmZ1VVQvMmJkNi8zeUwveHZiTmd3djJZM3FidE9GMEoyTWZONmthN25ubnVPdlpmdVpjZk84eGl0S25sb0ZCWEVCSEdMYzRNVFF3VkVEZUlreUFxYS9QZGg5ejV2YXFna1V1ejhha1lHVkFURUhPWVlpQ1NVUXRKcWtDREpzSkpJdlhGWU5SSXpMR1dRUXFxTEVpT2hxS1M2Z256aHFKOWNKcGxzaWlYQlNuZkJKRjk1N1RFb0pCS1lZc2t3RlVTZ1dDS25Ca21acDU5K21wZGZlcG1kTzNldTJVU24rVi9yMmMvSldBWDlDTi9KN0tkTmlENzQ0SU8ybnFNMENmZiswMS85UDdqczZnUDhkMjkvQzVkZXRKTnRtellDOE9yeEJaNTQ3a1Z1LytKZmNQREJlL2lYdi94UGtDbmt2SGFsbS9IUFR2VjZ2L1NQMjV2czNtQjNmS3VySTM3cFgzNmNmZGVzZjczSEhyaUgvLzJYLzNGci9OT1NUWk15em4wbjBzeDQ3TEhIK0pFZitSRVdGaGQ4cHpjbGlSdHlCVmJGWWxjVE4wYmZwb1dFWWlheEVOVHRqT1F3QnlPWjcrcitiL3phY1k1WUlDdkgvaURtQnVyam16UU9LTWxJV2tQVGhwb2hrdU4waXdXSStZck5Ha2RlUXN3d2NiaGxXRUF6dzh3WGF6WkRKZnNZTVA4NGdoWHp4U0hpcDVyQi9JWTUvc3YvKzBkYzk2WTNyZG1BMnV6MFlEQTFFSElxRE52MUtEQVZ2azJ5bjY0dk91akhscWRsSit2di8rd0xYMkp1eXdWY2ZPa2VYajJ5d0d0SG4wQzFIb3YrdVVzdTNjTnp6ei9IZjd2dGRtNTk1OXNuUmtucTZ3dGZ2T09Vci9mblg3eURIMzduMjlmY2NCZEc1Wnk1N2ZZdnMySHJxVjd2ZG01OXg5dlhKZXF0eDZXcUQrVDU1NS9ueWl2M3M3eThUTUxoU2dMTUVsa1VSeCtLRU5pKzd1emkwRWd0SVVDaStPbVN3SXBqbVlUU0FJTjZ1aVNEa2tBS1FncC9JZ09OK3lhR254SUJ6L3JqY1Bja2ozMExVNUk1ckNzSnNpWXNhZmdqQ2JYRVVJd2lpcXE0ZTFKOUZqVmZOQ2lvWU1sUEMvZUpJRnVpc1RpTjBvQmtobGxCY21KbGFZbkw5Ky9uMEtGRDdOaXhnNXh6YTZoUFAvMDBTMHRMek03TWhvL2xmcEdpY1cvaHl5Q1FBdjc1TnV3K1VPd2kvbzdXbVhMZkNsaFlPTWFXTFZ2WnRXdFhHN1RwUmlick14LzBWMWozNFhjZFQ0REJZTUE5MzN5UW5SZGV5bWhVT0hac0NaRkVxcnVyT1JSWkhSVjJYckNMcjMzamZ0NTk2enNaalVidGl1ekdxUWVEQVhkLy9UNTJYcmozbEs1M3p6Y2U0Ry9kK2s2V2xwZlhPRjVqU0FoZis4WUQ3RGpGOGQzempRZjUwVnZmUmRNMExZenF2L3BIY0g5bmFwcUdGMTU0Z2IvNTlyZHo3UGh4VFBDZE5TbGlpc1l1SzVyaklSc1dQeWVKUXlHaFdoeU5DRW45c2JyUElHUkptQlJmZUNiK2tFWFF3RFpHNDlBRklZbWg0a3ZtaEhHWUlTVEVHbDlZQmltUG9aeXB2eDhWSkEzUjVJdXJNY2RyU1Ryakx1R2pHSkNOcEpuR2xDd1dwNkNSTUxJb01DQmhGSlBZSUF4TnhqVlhYODN2Ly83dnMzMzdkbkxPTkUxRHpwbVhYMzZadDczdEIxZzhmaHd6aDNPSU9ieXJwNjBJV3A5WE5sQmZSdGtDUHFXSU05VDV4K0doRElRTjgvTzg4c3JMZlBXclgrV1dXMjQ1SWVMVlB2dnVidDQ5YmlaUk1URGo2TUlTR3pkdDlpODFZVGpJek0vT01qYzd3M0F3QU53cDI3aHBNMGNXbG4waU90OVJvd3J1U0FsSEZwWlA0M3BMSnhBQjY4bG5adVNVT1hKYTQxdENJdVE3allCV2Y5Zm5QNWtabzlHSWxaVVZMcnp3UXBhWFZ6eGloR0hKRUUxdWNkbElrZ093S01uY2o1RHMwU2pmWmQyUjlyZTdBZVdrR09GVWh1T3JyZCtqRkRQTUVrSjFYR1BoeGRZK2NSelpBUlBKZlI5SmlxbS9QMndPTktISndKUnM2anQwU3U1bldISmZRajJJWUJRSXAxNHhCa0k0N09FL0JWeVVGSTYvS0NrNXpKT1NHWTFXMmJGakIwM1RyT0d0elF5SE5LTlJuVEdRZ2hXaldJbnhHSTBwaHZ0eU5PWmcwR0FVODZobWxNWXc5YzlxTVl5Q2pncEhqeDluZG1ZRDMvL1d0M0xQUGZkTTlGdFVsWUdxVWtvNUlielZkVWk3V0h3NE04dmMzQ3h6Y3pOc21uZWpxNkhTcGhTV1ZsWUJXRjJaWTJaMnR0MnR1d3V3L3J1VXdzenM2VjJ2dXhpNlRsWWQ0OHpNNlYrdkM4L3FZcWduWlQ4NjFZK2RQL2JZby96b2ovNFlvM284dTFQZ29WUkppUHFKQlJrUm82QytveGNoU2FHSXhDNXVKSEVmd0RkcU4zeFRnK3dSS1hkMkV5UklCcHBqeS9mTFkwMkNXQ3pUeHVIWDkxTUFFZmRQTkpFU3FCb3BGY3d5SnVyQXFnM2pXcHg2RHFrRXhWSWlOd0lEUWExQkFXUkFRaUU1WEV4Si9VUkN5UWdGSVpsQjlyazhjT0FBdDkxMkcvdjM3MjhqaU1PWkdWUURFU2hvU1VodUVNMlU1Q2VjRkhXSUdiQXpsd1pKZ2hSRHMwQUoyRlZkdTJ3VU14SStYeXFGcGpGMjdkckYwYU5IMmJScFU3dHh0NDU1ZmNqVnVDckU2RHM2RGtkVzJiRjlDMWxnNDl3c0crWm1PV2ZqSE51M2JHTDdsazFzMlRqUHB2bFpOc3pPa01UWXNXMExXdlNFSGJocmFEdTJuZnIxenR1NmhhYTN1THFuMHFocE9PKzBybmNPVFdjeSt2bU1lc0xWeFZnWGRpbUZwbWxpZ1dibVpnWnRMTjh2Rm1GWmJiQkdIZmRTd285d2h4b3Q4WkFkTXlkelRHOWFVREdLR2xaOFFhaUdVNndHVnREU1VDaElZNmo2Z3FPQlRIUFNjWmo1cVZIVW9BZzBEYVlsSUlXaGxqMnFGVWhCRFV3TE5INHRNQ2dLWnFSU0dNd08rUE0vL1ZPR2d6blBlMmpEWUdiSXZmZDhnNW1aQWFwQ01jRUV2NmNLOFJwRkxMRnAwNloyTHF2dDdkbXpoNGNmZVJCVFExRTA0R1hCRUcxODdwTFNxTktZYnlCbTBJUWRhNk1vRFViQjFEd1FVdnlFMXRKZ0tGcU0xZEp3Nlo1TGVmenh4MXZiN0I0RXFidFNKam1tWFlqVk5JWHJyN21DSTY4ZFptYVFtSjhkc3UyY1Rlell0cGtkMnphejlaeU56TThPbVJsa2pyNTJtQnV1MmMvcWFIUkNaR2NNU3hwdXVHYi9xVi92MmlzWXhmVzZHZEZxdEUzVGNNTnBqcThtR2JzK3h5UlNYNTIwR2hNdnBmREM4ODl6N1hYWHNkS3NZTVY4dDdmQTNDaFlKbVdnR0trSWxoM1NXZVFFd0pEa3AwVUpLS0lpb0dOWFc5UjNQbktLRUsrRTMyQllEbHh2VU1UUXpFbkhJUkVRU0NRYU1TUm45K2RsdktPbU1VcjNhRlJLY2NvNDNKSVVpY1dVK0crM2ZZSGYvYysveDZjKzlSK1pHUTZabVozanR6LzFLZjdQWC92WDNIUHZ2VEhhUXNZZ0tVbkZvOUM1b0Jpckt5dGNkZVZWdlBqaWkrMXpFQkdPSFR2R3hrMGJmWEdhYnl4R1ExR0htYVlCNFlxUkxEWUlJWHl3NHZEUS9Ib0pRNjFCVEh5UEtlWjNhTWJ4aFFYbTUrZFBTRENhR2FtUHQ3cFFaUkpMOHFZYnJtUDU2S3NjUG53WUVaZ1pKQWJaLzVzWlpNQTRmUGdWbG8rK3lvRWJycVhDdHE0QmR2MmJtOS84SnBhUHZYWnExN3YrMmhOZ1RYY3hOMDNEelFldVArWHgzWExnK2hOb0dOMVRvZ3N4dTR1bW5palB2L0FDKzYvWVR4bFpaSW8xWUpJZjV5TG1CcGVGTWhDd0VnNjdKOFFrVmFjeVJlNjZlTGcxYVJ0Y1VWRlNnbXpGc3gzdVdTS1NrV0lVaWJpU3BjRDE2NDhETVUvZ2dUdlA2cjVQc2tocm1FTWZSRkVKS0JjWmZKUGtqcTRuUVRBMTN2azMzOG1IZnVKRGZPWE9yL0o3di90Ny9NN3YvQTUzZnZsT2Z1cW5mb3FiYmpoQThkaTEvMm5acjVrVTBZUWxoejdYdnVrYW5ucnFxVFcyc25YclZwWVhGckJtQkg1K09CbkEvQ1J4UDBOSlZqeVNab28yRHJMY2JodTBlRFRPUk9ObnhkZTNGVVFMcW9WbXRNcmVTL2Z3ekRQUG5PQmU1Si8rNlovK0YvMWR2WjlWN0JxSGlIRER0VmR5NTFmL2t0VlJ3OVp6TnBNa01SbzFIRDE2akFjZS9oYlBQdjBrLytOLy85NDFXY3IxQ29OdXZPNHE3dmpLZXRkN2dyLzN0OTh6a1hKOFFwVEpqQnV1dTVJdlR4bmYvUTkvaStlZmZwSVBmL0RISmlxTzlFUFgvWWhkOVV1V2w1ZlpNRC9Qcm9zdXBKaERCRW5pT3phQ1dNYWt1Tk1zanAwem5oelRTdjB3UmJMNHlZQ1F5V2dsaUpoVE16S1pSdHkzY05oREpOZ01ZMEFDejY2SDMzM1NjUlNIVlNuQ3JaYmRmekZwYzRva0ZMSHN2a0VrQkUwRTZZU1BmWHhRckhERi9zdVpuWjNqdHR1K3dIUFBQY3Y3M3ZkZWZ1aUhmcGlWWnJsTmJMWUp5NEhmbTl1U240amFGRjQ3Y29TY1V1dm5iZDI2bGNjT1BzYTI3ZWVoeFhkL0pPN0xRQVpnSlJaODQrZXBaTThKZVl3dElhS0lSWnBHeFhORkxUdk1JdXllMkxSeEU0OCsraWc3ZCs1YzQ4L0tQZmZjWTVPNCsxMW52T3NqMU4vUHoyL2dnWWUveGFOUFBVY1RHSGM0R0xCdnowVmNjOFUrVmxaWHBrcmdUQ3JQck5mNzFwUFBubkM5YTYrOGdxV2x4VFVPVXgxVC9WbWZHYnBodzBidWYrZ1JIbjN5dWRhdmFNZTMvM0pXVnBaUFlPWFcrNnZYN0NZY3U5R1VwbW00Nzc3NytPQUhQK2g0TnhZbFNkcjhnT0dPWTQ1VHdDcElzUlF3eGtqcXhpN2lFQ0NKWTNNQmo5MUw4dmlYS1NsRnJON2lHNlN5ck9wMU9hVnhFQWxCMUVQRnlUelNWQ2tqbWdTcDJYR05QQUxCTzJrTXkwSlc4WWhXOFZOcE9EdkxwLy9nMDN6akcvZGlDRGZlZUFOLys4Yy95T3JxQ2xnT0xwWmdBOE5HS1U2dk9JMFFoTXpLOGlMLzlmT2Y1OG9ycjJRd0dKQno1djc3NytldGIvbCtqaDA5NnJBekNOQXBiaE1xUkl0VFJWS0hHQm1jRjZDWWtTVWpXbHIrcE5OcklvZGl3bE5QUDhXdVhidldKS29IWGV3K0dBd1lqVVlueFBTNzhkOXEzRXRMaSt6ZmR5bTNITGlCdVZsUDFxeXVyUExha1NNc3J5eFByTmZ1aG5MN2hMS0ZoZVBzMzNjcE45LzRKdWJtNThCZ2VXV0ZJMGVPc0xCd2ZNM2k3QnJ5dExybGhZWGpYTDEvSDk5MzA0M016c3lBd01yS0tzZU9IV054Y1dFcTZhM1B6TzBuU0ZXVjBXakU3T3dzTXpPekxDOHRlYWdUUTV3OEZWbGpaOEI2YkQvSWcyWWtVYXo0STFUeDA2U2grRTRjeHVJWmNIZEFVOEFrMCtUMmlodFd6WVNqMU5UaFNjZmhZTTRkYm5lNmZWY1Y4YkN4NXpwaWNhbnZ2TzJxaXgrYmVwU3JGTWdpek03TzhoOC85Wi80NnAxZjRmMGYrSEVBL3VnUC81Q1ZwUlUrL0tFUHNUeGE4WEF4aHBSVU02QytJRlZpRGdxYk5wM1Ruc28xNTNIaGhSZnl5dUdYeUdtR09qdEp4ZmxpcVliRlBYK2hwaVFLV0lvTkIxQ0ZRWXJUc3FHSVJMVEtUK3hrMENoQTRZcjkrM25nL3Z2WnUzZHZhdytEN21teHNyTENZREJZNDRUV2YzZU5zSnNQZWVXVlY5YVZkZWt2dm03VXFsODh0THE2eWtzdnZ6eTFzSCthU2toOU5VM1QrazBpd3VMaUlvdUxpKzBKMks4em1FUlA3K1oycXZQZHozRWNPblNJNjY2N2p0WFZaVFFaMHBnZjgxS1pyTldnQXVOV3JsSlNTb2xFV1BMOVdxV0dPdDJlSlNsYWd1Smh2dXNuRWMveVYweWdSa2twaUgrUVJTbkNTY2ZobkNsMXNtTTQ0QlZJZFZuQm5uRk9FZnBNaUJWVW5NeFllV0ZaM0ZQNi96Nzd4OXg1eDUyOC8vMGY0RjN2ZkFkaWdwYkNaLzd3TTF5eWV6ZHZlZXRibkw4bENiTkM1Y0FVSjdkNFNGb1NTNk5scnJubWFwNTU1bGwyN3R6SmNEamszSFBQNWVEQmcxeDIrUlUwcXl0Z1FvbDVkTmFEb3BhY3RvTEZDVnlRTEtoQ1N1YStoUVR6V0QzM1l3S3BjVWFBLzh6dGJCUlJzL2JrNk9Qc0xrVFJvSGozQy9ZbjFSdjAvWkpKQlNhcnE2dHJvRXIzYy9YUG12bnVRN0ZKbWZ1K3NNQWtJKy9XcFBRVG5kTVVSR3FDcjgvNnJEOC9kT2dRNzNuUGV6aDI3SGhFWXp6azZNZDZwWDhiRmJBSWhvbkRKS2hveFdMWFR3RnAxTmRQWThFZ0Z6VDhEditBT3diT3JqV1BnS1hLYmZMbzFDbU5vMTVIUEhGbVVoZ1RWUWgrbE9PV0xNNjQxYUNGV0V0YmorY2d5by8reUx2WnRuVWIzLy9XdDdHNk9rSXdmdmlIYjJYbnpndTQ4YzNYczdLODZpZE56VEdVb0xsTHhVZE9pTXdJMTE1OU5YLzVsM2V4YmR1Mjlqa3VMaTR5UHp2TDhkVVZTb05EdERqSkxLQlJJMFlta3FYT2NFUVNGSTJjU2hLa0xvd1NTVWxMa1UrQ1pNYmk0aUxuYnQvTzh2SXlNek16Ymt0MzNubW5UYXFLNmxaeDFhT3VYN3ZjeCt5VGFucTdNS3BiZk5SMXF1dnUzRjh3ZlFwNWQ3ZXY0K3Y2QWwzbzAvZVgxaE1IbTFhTFBFbDhZV0ZoZ1pXVlpkNytnei9JYXRPRVB6RHd5YThiZFhMb1F3bnFnbFI2T0JGTmNxaERPTGJxMjJkRUlpTTUxM2lVUjh3b3laMzJYSjNzRkR1a3VQdFNLaG54Rk1iUkpnWmp4MHltSUlNMkNXa0JPNnhTNEZOazdjVlFDMWppYTZVTmgxck9mZ0tvdGduTEZHT1dEa0ZSVFp5dVVtb2RTYVgxQk5vWUNGKzU0OHZNREdlWW41OW5abVlHVmVYd0s0ZlplZjRGcUZrRUgyb3dJU0VsbmlsK1g3N0FrL1BRTEJZellOS1FiTkR5czJyRXppSlFrRkRPMmJLVnUrNitpNzE3OTdxOWR4TnAvZDI0N3lmVW5NQzAwR3cza2ROTmx0WFBUaXRiN1ZaOTFZUlFuNnpZLzk2K0wxVERxMzBudlk2bCsyZk5sZFN4ZFUvTWZqaTNDKzFXVmxaNDVKRkhlT3RiM3Nab2RUV0liTDRyYVRBS2E4VUZ4VGxPVGxmeFpKUlUzNERrY1h1TFJHNnA0VmRBc3p1K1FaWlRCU2tPWTZ6dS9NVUpXYVlSVFR1TmNmaHhsYUlPUStJazhBUmhxWkJOUE95TUpGTGtGRFRHWDB3cEpVQ1lpSSt6dGFIWTdBU3NHUnVlbVMraVpDQ3FFYmlLTUt2Nm92UnhLYmNjdUlXREJ3KzJsQklSNFlWREx6QXpISkxRQ0YxYmh6WlNQS25aRWppRHZxTG1pNXNDeWZNZUpwVTY0MDQ2NnVQVDVQZTRQRm9oRFRMRDRkQVJRM2UzclliZHpSQjNGMG1mcWowcEQ5Q0ZMMTJzWGlNKzFaRHJkOVdmZFNlanYrQzZwTVd1a1hlem12My91aENwZTYzdW9xdmpyWXVxNldIT2V0cDF2M04rZnA2NStUbk1NcFRTaGpPdDNRRTlST3ZZUEk1Lzgzb0tsUkwxRklyek5TUnlBSlhGYW1CTkxleHpqSjc4bXFxK1lGSnhBQ1o0ZHZCMHhxRkJGeWNwVU1obWxCdzBrNkN4V25KRGRscUtud1IrZ2V6Y3JtRCtXa1IrdE4xL2pVSkFSUk0vdFNnKzFtU1U4SzgwS0NHa2dpRWVvRkFma3FreXQya0Q4L1B6TFZsVlZibjIybXU1N1l0ZllMVVVObTdjZ0JZZm1nVWIyQmR1SEpmRktCUm5BcVJJWEJabktJdUNOTVdUaXJGbzBlS1VFd0VkR2N1THkyTWJ1UDMyMjYwTGZVNm0welJObTNROVhkWmF6RElhalJnT2grMkM2QXVrOVgyZTlkUXBKdFUrOTZIU1lEQTRJWWs1VFZoNFRlMXcrQnI5VStQRkYxL2t5cXV1WXUvZVM1MEtraVFvSHRMbUNISkVoR29zblJyUEQ2SWdPYUlsNXJBSjhZU1lKb1dTVVNuazVCd3FxNWdqSlV5TFI0dHliaG04dmtBNHJYRklNbWlFa3FTbHN3c2V5Y2xTVHhMM1h6eVJDR0xGNVFhaVpMWlN3MnQrSnVIT2JhSnVBdW84S0xGNmkvVi9EZ3UxcGsrQzFoRU9jUkxQOEQvMXpGTTg5TkJEbkgvKytReUhReTkxSGd4NDRJRUhLS1V3UHo5UGFacTR0eHBWcTVXSU5aSVhMb0pHd1phNFJ5WnRyTnp2UVZHU2VkM0x6T3dzS1FtN2R1MGFFdys3am15ZmFEaUpSdEVOdVUyVGQrei92TXZkNmk2Kyt1OHVoT3BIbHlvRXFvdXNyM0xYdllkK3NxN2VVOWMzbWlTaldSZEo5V082aTdEdVlJY09IZUxIUC9CK2ppMHNrU1d5QTZrV0tLVTJ4MTNMVW4zSGN1eWRVb1NqZ2s2Tkpxd1VrTnppWU10SzFoVHdTT05LdmdnaytXSkpnYkZOR3N3eVNjb3BqNk1OK3laamtFQWJRd1lObE13d2ZLS1NQTjhTOXU5Sk5jbUlSajFIa0J5bGlFZkdSb0ttNUt6eE9OTWt4cENqVEVEdzdMMUZXVUVTcFdnSVgyU0xrb0tvR016Qy9pdXU0TXRmL2pJN2R1eG9iV0o1ZVpuTExydXNqWGgyU3diNjl0TzNpWXBRdXFXdzFmZnRSa3lIdytHYUlNMmdMMFpRdjdqdW50TjBuTG9aOWE1RDNHWGR0dFRmeUhyMkYwUWRjSDh4ZGsrUDZrdDBGMHczUk55djBPdEgzN3JYbjhUQTdZc29ySzZ1bmxCUFhFcGhZV0dCeXkrN2pNV2xaYStZSzhrZDVzRHFLZWpmUmtObWdCYVB1YnZ3Z05LVVFZeFJJWm52eGlsMlZDMytXUkVuRk9JTHlzU0RyS29DTkFnU2hVL0o2ODdsOU1lUnlnQ05ZcXJpVEE3UHlxdXpjWDB6OTUzZmlJUk10bkVKYlE3ZWxuclFRSE1oYWFJQnA4Y0hMUE9La1VxVjBWWXZRc3k4WmlWcVE4VHB1Mk9vbm1CbFpZWDkrL2R6NU1nUnRtelpzcWFNdG04YncrRnd6YWJhWjIzWDErenM3Qm9rMDA4a1Q1SllTbDBqNzRadFI2UFJHb2pWM2ZGcmVMT0x4ZnMrUzVmK1hYZmU2bXRNS3B1dGk2RHJWUGZwSVgxZm9uNW4xNS9vK2cyVDlHSHJPSmFYbDlma2JVb3ByVEpKSFdkZHdFM1Q4TVFUVC9DT0gzb1hwU21ScW5QNnR5ZXh2S1JVVU1RRzdsdVkxR2dxaVNGNVVEeW5rU3p3ZFpTYW1rUXhqNGRYc3lXeVFFN3V2RnJVd1dyS0VJVlBPcWdWMzZjL0RvM1RTNlZHc2lMV3IyUGxrQXhZS281emFpWWNvekhuY0dsQUdFc2dKVVVkT2JobjRaQW1wMkFjeDJKSHBCTzUwdFp2TXJFMm55MVJIS1hBMjc3L2JSdzhlSENOWFgyMzdTZDFDNGU2Y0tjZU1kMnNkSTN5ZEozMVNZWHNkWURkMWRqZHlmdXdxZ3QzQm9QQkNTSmpOUkZacnpjY0R0ZXMrdldVVXZxSnd2cis0WEM0SnN4Y2Q0KzYrNlNVR0kxR0hEMTZsQWNmZkpELzRlLzhIWmFQTDNuVldYQ1NQTFRwTEIxTGJxb3BaR3NRVDRhbGlCNXB5YVRBdHdXUVFmQWh0SkNEcWFxUmxDdEJhYkJod25LSklpT0xURGZRU09RclRuOGN6c05JSGhVTDZKMEhPR3d6SnhVV0VaSktzRElFeTRaSjlpcERyVW9qR2c2N0p3dUNLeHdlanVjMUxJZkpCOFlYRVk5V1JaR1hJbVFOMWkrR3B1U25XVEdXVjViNDhJYy96TmZ2dlplalI0K3VRVGZmTGZ1UjI3LzBwZGhDaUFMNk1VbU00SjdVeXE1V21pVTBrbXFFbzJvajFaOUp5TFZVM0dxUkZmVTVDcCtnZTUydUR4KzdVSjNrVmdGSldQTysrcHNrYStWcXFxK0ZkY2JUK1M0aTR0SnFSZFhRVUNTVTNKZVRsak0xSEE2NCtxb3JXUzROMlZKOGpRWUJMcE1vUVVXSEFVS0RpeDlVK3B0ai9jQkk0bnltQUV2eFFCd2UrWFhqSGxKQnRkSVEwNWh3aDZKWlNQbzZ4dEZtNjhmM2k0SUZuWnljUWhCaG5KRjNIMXlENGhJbHNDcGp4cTZNNitOcHFUSWhBeVNLRktmaUQ1SzExQTkzeEkwcUZsUlRxVjQySExraEV5UUpEejc0d0FTeEQ5cG4xU0d1dFF0ZXFNK2FjUkJoTEJJMndaN0h3Mit0Ni9sRGgyd29RaEc4ZHJrYWF6VVVCSTAwZXdwcURDbFIxRVhHcWlaUnEySVIwakU1SE0rYXZaV0lUenNUTXFJbkViMm9DMEJEb0N4SjhJb2lvcENDeStPc1M2YzFpUGlSN3hGRkk2ZFF2cWhpQ2pIbExmd1FONkx4L1hzc3A1aVFyQnBLNUpKYmRxclhTWWlGMWtlZ0RNOFpCRGt2cGxJbDVpZ0hMU01vSDlYWkZJT1NhMldkZVhWYlpHcGRXTWZ4dVZSSEgzOWZMRnZQVmFpODduSDRKc0RhWjZXRzVTQkZWbDZYMVBtSHNWNVFoRVFjQ1pjc0FBQVdpVWxFUVZUTi8zUytWZklpcEJvc0UwRkx6V1JuZjFaNFZ0cDlKL1dBWGNwUnZCVlVycHJJaS92R3hwRzJ5T1dmNUZrSlJkeCtCaDZEZU4zMm5DUktGeVYyTm8xWWQxMlZpZ3VNcFpSaUIvQUVWb3I0dTBWTTIrTFlOL0hqMkxPNmNYaEdGVmpvVkRqZXRucXNCTVVuRHVWVVJTMUlwT3c3VHFQMTJLOEx3NU5tN3ZBNWRVRFZzOE1Tbmw4aHdwS2h6S2ZxSWdXdTNSU2NIZ3RqU3c0bDZzNlNndFdLdWhxSFU5T2t6YllXTXl4MWdnUG03RlpKeVoxVUJJc3lUb3NjaGd1RytIY1h4Wk4ra2RtdVFWZE5KUkp3MWpsVnRTMlcrazZNUThXOGJEY01NaFdqU2ZnbVk4VnphNm8rUDhIZDB3akZXbFFHMW1OYzhPZnFHV2V2MldnaXBLenFCdWYrVDRreUZCOWYwVHpPa3RkRXFMb1dscGw0SFFhTjg2THNWSitWZWFUdk8yalBnNkI2ZXJSRElJZFIxM29ELzAycyt1UVRTSnZyZGZ3cFVUQmpBMnNUUjlJSU5sQ2t5V2l1ek0vc0QwRE1TUzBtVGtxemhLYmlBTnBvMmFDbEVYTGMyTGhZUDdLZmdiL3JTU3ZXdE1rMnk3RzdoYlNIVlVpZ3RjaklLTVVYNjBpRVFRT1dhL0RVMEJJczJhaFJkcUxPZDJhT2loWmVlK1V3UllzYlEzYTJxbWJJeGIxaEMxVTNvUTFaalJtN0dua0ZFWEtMSVltRW40elJSWXA2a1hvZkZZSUV5ZEhMQjRPSzBSbUhmNWVDaE9ZVlkycTgxZWRXaGRyQ2MzQjRHQkMzYXMzRnMwckZvYURYbGxRWW93RVZmY01paUpoMTBZdDJUcXprVEdFL0dlUzdPa2VERkQ1Q1NmRm5PRnhTQWpSS3dLSVV4a2xHdkM0VEdSU2s4YUlYazhiTE8xTnl4dVFnYW82cm9ZYVJXbFNFV1poaUlsRmFBdyt0cE1BTktlSHg4SXA1V3c1TlBEajFZbnBQUERtRnVvcU1XUnoxVmZBTWd2Z25ocFZ3eElybjVFcjJJcUVrdmpNbnlTakZUNlNVblgvMEhaaWo0NHRIV1ZrZGNjbnUzWng5ZmUrL0J0cjREdXZVQlcxaGppVGZMMUlwTkFLRHlOaXFGZWZOK0tidjhXcDFMYVZLb1NkaTg5SXE3L2xSbGMwaktKcXNmVzlKTmk3Y0ozbU1QUndsclV6VHRvWWxkb2tvcmpaeGNLbmlPNGU2RElXdmZNVkxTWE9EdWZVN3djRTh5VlpxMkZESE8zeGoxU2VTVnIwaldVRTFvZkw2NXNoSUxDNnRzRy9mWlczTS9lenJlL3VWa0JKVlpvNUhDYWN4eURydXVKa1R6cXpTSHJLNFdGcUZLV0xreU9XazZrVFdMSGxsWmhZUDNVWFpla1JsaUZqNHVIb3JCU0ZNek9QZEZsbGFCOHc0RjBZOHNxSlZYZHpFYXhuQ2FUWHhNa3B4QlZuL3VxU2g5RmNpbXVFT3V0UVFSVXJPZGtVOHZCbytrTmNDdlA0NVNpSTB6ZWpzd2ppVEZvZExPRGFVQ0oyMVliemdwS1NJQ25uOXJiU2xpQ1lScHJPRTVPVE9vTGcya0pISVVRWXEyYU1LT1ZWcFJ0cG9lS295bVZMcHkwRmJTQTY2VWppbnhSTEo3UmZMR1VXY3l5TU96Q0xDNnBnNHVVYVRtS0RaYTRmcm9wRlUybWlOazNCYVhnZFN3cWxMaWdlMWFtVmRjdnIyNjU0ajl6Zk92czRnV0VWeFZXMnJOYzJpSGc3UDdxaUppRHVqcHBUcXRCU3cxQ0RtY1hSV2lkcUE4TE90dUFZVFRsT1FLT1Vaa3dJcnY4WkZ1Z2JxV3F6U091bHhaQlFOT1UrSExTa2NOaTNHQUVIenlJUERHa3hSRjBjS0NxcGlLYVQ3aTdyd1dCWDZpcE5JTmJ0b1FISkdKam1GYkVzVkZOT1drV3E4emprYWRSekRzNjh6QlZhNXdRMkRncEFrT2JPc1JGU2lDc2RKeGRnWnlLSG00T0ZiQmhHNFNaVzM3M0Z6SFVSN2xLQkdXSVQyVWllTE90VElhVVF0bXZzYmxUN3R4RFVsa3pSWElxVW5rNUxuSHlRV0JrbklxRHZGa2x4VlEyc0NMQllkQ2NtR1duSkpUdkZRb1JZaERZS0JLaEd4eVFSUEtMVmh6Mjluamx4TXdEVmFPYnMyempCWUZVbWR4cXpGM3lJMWw1RGFUS1NpYUVrZ3JoaEhFbWFHbWMyYk5qTTdtSEY0bzVIT2kycXZYRUp1My9EQy91QVFFVTUzRm9ra1d4REdVdFZYOVRMSHBEa1V4K3RXUEJZVG04a0RsNmpKbmdqeS9Hb3RBZlVRY2xSVGVuMTFWTWFoNDdCZFVVZ3BCSjZERmFDVUVBd3pKR1ZtTjh5eFlkTThtK1kzUU03Vmc0a2trVEU3bkowNlI1VkhaSEVBblYwYlp4eXNpcXlzZWZpb2lEQ0lXbVFzdGJ5WVpNbGxLa01uZFg1bUEvLzNiL3cvL01ublBzZXR0OTdLLy9xei93dXJpd2JaZCtJYVhVbzExbThwZEZJamMxMk1KSkdiaU9JVXpGenZ0UjFQMDFiT0VVUzlsRE9QUFBRUXI3ejZLanUybjhjVlYxenVTU3R4YVV4eWlDZlhhNWlIZ0V1UTVWeENNT1JoVUUvSVZhcFFVR0ZUU3F3c0wvRTd2L3VmK2VZM3Y4NlJJMGVZR1E2NS9QTExlZTk3M3N1MU4xeFBXVm5oMk9JQ24vK2p6L1ArRDN3Z0FnZWRPVEpYUlM4bURDSWpYU2tqWjE5bkNxeUtyS01VVCtKNW10NENLOU1hbUFaUktobk16Y3p5Ry8vMk4zam93UWU1NmFhYitQclg3eVV4SkNXTENKTERuTW9ad2x3TklxYzRuYVF5U1IxTWxjcDVDUWw4U1NuOEYybFQrVzVZbnBScVNtSHZua3RKT2ZIb1k0K1Noa0ZZeXprU1NOWXFqYmN5WHVLRUVxMVorNml1ejRSQWNwdzZzek56L1BtZi9sZiszay8rSk45NjlHRzJiZC9Hdm4zN3VQaVNTemgrZklHUGYvSVQvSXRmK2lXT0hEdkdSei95YytROE9IR09ZdUpVUE5UYldHa1RZMmRmWjlEaUtBREZHNWFJcHBZZTRLSmkycXJzSVEyaXd1emNMUC8rdC80RDk5OTNIOXUyYlVPMWNQUE5ONk1sNUY1cVdOWkxnbDI2MFdydW82cU1wN2FybGxyeGdGSHRIeUZneGVWVVVnZ3dONVc4S0w3SU5tM2VpS0pzMkxRUkJRNSs2M0Z5RXJTeDRQeFVpRmZwR1I0Q2RxRndSVFVGVDZqNFlvNlN5Y0VnOGNkLy9GLzQ5R2Yra0J1dXZ4NUIyTFoxRzlkZWV5Mlg3TjVOMFlaOSsvYXh1TFRFei83c3o3Sm56KzRXZ25ibnlLTm1yaGlva1MyM3M3RHF6SU5WaWFhbGJaUWNOR1hSMEFiS1RoeElnbGxoYm02V1QvMzJiM1AzWFhlelk4Y096SXd0VzdieUQzL21IN0s0c2h6ZGlZeEc4SVJmS3p3ZkxNaWlZZUFheGZuRkkwb2xsTWlsYlk0SFJhTnFMWG5tWERKV0NrVmd6eVdYOHNTVGp6T2NtV1B6aHMwY09YNkVKNTU4a3QyNzkwVHlzSkNDSnRCVVZUeXBRb0JHeVJwOThFTG1ySGdUbDhPSEQvTUhmL0JwOXUzYngyZzA0cU1mL1FoN2R1OW1lV1daTEVOS2FmaDMvK0hmOC94enozSEZGVmNFNnplb0pERkhMdkRoVkJsVkYxRkdjb1NsenhyY21lVnoyQUJTb1lUU1JBbFlvQ2w3RDRlZ2djOE1oM3ptTTMvQTdiZmZ3Zm5ubncvQXpwMDcrZGpIUGthakRlZk1EVU5oSTFyd0JsbE5WVmxjV3ZSZE5GaWQzcXVDd1A3YUdvNVppb1lyM2dla2NuQThjcVdrbE1NSFNseSs3d29lZStJZ09RM1l1bVVMaDE4OXpMUFBQc1BGRis5cVd4UnI2NmlINm9jNjBTeHJpQkNyTzgyU2hKUUdmUG96ZjhUZXZYczVkdXdZdi9pTHY4aW1UZWR3N1BoeGhFUWppeHhmWE9hK2IvNFY1KzA0YjF4R0d3VkhxWEs3dGVaU1NuVFpxblVUZWphU2UrWXREdTgybWtVNkhZRXlZaDVnRlZOU0h2QzVQL2tUUHYvNVArT2lpeTVzRGVPaGh4N2kzZTkrZDBpZ3lMZ250WXlidG0vY3VKRmYvNzkrblhNMm54UEtFd25KMnRKS1V1MEJJZXJaWklXbUtkeDExeDFJVHVPV1hMamdHU0hmTHlTMmJOM0NsczNuVUZUWnVuVWJyeDArelBQUHZzQ0ZGMXpvWThyUjZrcWNxR2dhb2dpUjZmWXdyVWZXQm5PelBQTHdnMnpmZmk2WDdidU03ZHUyc3pKYURTcTI4T0xMci9MUmozeUVpeSsrbUtOSGozcDhTNFJtdFFrV0xlSFpWM0d4cXZBWEdGTmJadm5aMTVteU9Fd3NJcSsxajBFbXBkS3FTS0RHN1B3OG4vN01aOWl6WjgrYTZyOXp6ejJYODg0N2I5MHZLS1hoaTEvOEV1OTl6NCs1KzI4bEVoZ1M3RXBYc2NncHV6eUtLSys4ZElpTGQrOWhrTVExWXRNSXMyRkl5Z1MxcE9vNmhSOWhaTFp1Mzg2aEZ3Nng2K0pkakpyR2UzbEhFWkVueHgzN2F5VHphclBISm1VMkpHTnB5V1ZaTHJyZ1FsYWExU0JPZWhScjF3VVg4Tm5QZmc2MFJQYmVONERsMFFyTHh4ZmJYdUtvNTMwb05tNHFHWUlIZGhaWG5XR0x3eFZobkpFcTRsRERvc1JFalpTaHJLNXkxVlZYc2JTMGROcGZzTG82WXZldVhXaHhEeVNKZHk4eVNTUlYxTElyMVdscFQ1NjVqWnM1ZnV3SWFXYlc5WTBzazVKR0hzUEZZRVM5NzRLS01EREgrMFg5TkdtYUVzMG52ZWpIbEZicXN1MTloNGV1TmRpQlJZVzV1Vm5YMkYxYUlxc1h6Mmp4U3BPbDBTckxyN3ppYVJKbFhBVm5SbTZWQTZ0Z1cvRmtZdXVFNTFwT2VmWjFSaTBPQ3JrTUtHbXNueVNCMlpOQW8wSlpYdUVqSC9rb24vemtKOWJVWTU5Ly92bGNmZlZWM3RwTTJzTFR0clpQek5peWRRczMzbmdUeTZ0TGtTajB1b2xrbmcvSU9IRlBhMm1qR2x1M2JpSm5mMit0eDBnZFNZRmcvWFBzK0FKWjFEc1VrVmhaWHVEU1N5OURLWWc1TTlpall0NEZxYWlRY25GTnBXeFl5ZDVaVllTaURlZWZmejVOVTdqNzdydjUwRTk4aUlXbEJWcWhtNUpkdHNZeXN4dG1LS1BHK3dDS0szVlg5SlNUTTM4dE5GcXJPa3NLbitmczY4eDV5ZFBQUEYxMTZzUG9jaFNGK0M1ZW15RklSR1ErOFltUHQ3Vzh6ejc3SEgvLzcvOGtiMzd6QWUrYWt3MVRid3haQmJVVjd5Q2tWVzgxSE95Y0RHMGttaDVLVzhzdFZWTTFWVUh4Q085YUZNdmduS25YWG4yTmx3NGRZdHU1NTRJVkZsZFgyTHQ3RDZWeC95ZG5ndkl1VVJJcVFZeU04bGVTSnpzanU1MlNjTWNkdC9PbEw5M080dUlpQnc2OG1iLzdkMytDNVpYbHFHbHkzK3VWbDE3aVYzN2xWN254eGh2NG4vN0IvOHhvWlRXS1ppenlpOTM3U082VVI0dmpGdzQ5ejAwSGJqcHJkV2RLbnNPYWtGVXhqUTZleFluZWhkRG1IdGRvb0lXUGZleGpsSkRjMmJYckluN3pOMytUdi9ybU41enVQWXJyRkhYY3JSYUc2SHQrTVlOU0VGWEt5SE1TcHA0TE1OU2hrWG15VDgzYWZtK1ZLRmkxL0k2K2VvUm5uM3VHcmR1M29SaUxTeXZzdWZnU21sR2xvOWRlY05Da1duOWhqS0pHbzRRQWNxTk9GVW1tRkZQZThhNTNJU0pzM3J5WjIyNzdJdi9xNC8rS2wxNTZpWTBiTm9IQzV6Nzd4L3lqWC9nRnpyL2dmUDdpcnI5a05nK3BuUUhhQTdWb0t3RUtoalZCM2JlejJmRXo3dVI0OHFrbkxKTmJkUTlMdGFDNHFrRFVja1p2bVNYSk05U2YvT1FuV3htVWd3Y1A4bHUvOVZzc0xpNGc1Q0FTV3RDVmtxK1RXbWdVUmZGQWlIcFZYYVpnOVlwSHRDemE5YmJ5amVJd2FTWVArTnJYdjhhdUN5NkNsRmc4dnNpZVMvZDRGOWJJcDJSeGtXTE50TFhYMFpwaTNNOHVLUEJhTzhERXliaTB1TVN2L1p0ZlkyNTJsdVhsWlI1Ly9IRVdGaFlZREFaY2Nza2xiTisrbllXRkJkNzN2dmR4MDgwM1U3UTVZWTZJTnNhVkdaK1N5OCs4K1B3aERodzRjTmJxenFTVG8yQlJxRk9pRnR1TDhGTUlGRkEwK2pRMDNwOHRaWDcrNTM2ZTVSV1A3dXc0YjRkL1BxanBnMmdtb3FxSUdrMklobGtxRklOR2pTWk9CRlh2RUpwS1FhMkJRcWhJQlB0Y0ZHdThHYUlVYjg2K2FYNFRCZVA0OGFQczNyTWJiVVkwVVNDRitvbWdSS3RpY3pIam9ocEwxSmVISnFVcFRsKzM2SG10cG15WTM4QS8rNmYvaEFzdnVvalJhTVQrL2Z1NSthYWJ1ZjZHRzVpZm4yZVFCL3pNei93RHZ1K1c3Nk9VWnVJY1dhaWphekZVQ3FXUlhsSFgyZGNaY1hJODhlVGpacEpvSllUYTVpSmp3WUZLd283TWh3c2NaS0dNQ25kLzdTN2VkTU9OYkp5Yjk0aFRraWkyRHdWd0FheEJaTkNXdDBya0FSU3ZpWkJpbEFSWncxaFRMY2dmaDRVc0t2RWtwUEVYRm82emNkTm0xMksxVmptcnJmS3IybE9lZm1nMVdFQ2RTK2I2SmpadXFGZ3BMSGhnWW43RFBNZU9IK2VSUng3bTZOR2p6TTdOY3NuRmw3RDNzcjBjTzdyZzJYQ3hxWE9VMUp1cUpGd3NMUTB5aDE1NG5wdHVPdXR6bkRtTDQ0a25EUEhxT1J0NEV3L1ZIUFVYSWV5ZzRwU0xVSzNUa0hNUGNhaXFUZUZ3SlZIMTRkMmcxWnlxSG1MMVhxMGFlbFVhdXJCWm9vVkNyZGdMbUpOcmZUbXRUbEdLTDlib0E2SGlEVXdraDhTUGlvZDlYVUNEMUVRMzFWU2Jxc1FDaVNZc1loSnR2ZHBsQkdZMFNSaGFGYzJKVHFicVFvR0NZcWM0UnpVaG10T0FGMTg4QzZ2T0xGaEZ6WXI3anE1QklkZW9vWkJVUWczUFhEKzFsT2l5R0JoZTNkRnVyR3FRYXR2cEU2SktMalhlUTZIVkVLb09kcHdReFhNWTNxWEhHNDBVREdrODBsVEVlK1VSa3Z0YXFTY1dQU3JDbnlCZ1ZKWHNNVXRvYnRxR2o5NzNPOGlVTkNHcjB6ajNLY2lOcXI3Z0JocWtrTFozaFlYQlcwdXpQNVU1TWhPbjQ3U2FUMmRmWjh6aTBFajIxY2FoUkx6ZXM5bmlFU2gxeUVFSmRaQ0lIQ1cxdHIyVWlGK0g2Tm1nMFJXeHJiUVRWNnpUS214RWtQUTZYMXhsSE5VS0F3blp6dVIxVHFVRUV6M1YwbTlEZGVDRDAxQXR6M2pWWVRTYWxPTFl2d1JkM1lvTE9sU1ZFU3hha2RuSUd6aHFSSldpTTVJRnJVWFIxejFIVmIzeDdPc01TZ0lHRWhtVEc2TC9Bc0dYa296bk1Hb3NuK1FWZEMwMVBZV3lSd3FaK21qeFM5dTF4SGRkQk12RmRZZExhUnV5Q0RreThqWFdGTzFRckxpVVRrbFJvK1JxaWtrdDFNa3RaRWVqTTFVSUs5UmJrRlFWMXIxaVJDMTdVWlZFYXhjcFVSVVljRXFoaVBzejBuajByS3I2SWZLNjUwZ0g1ZXphT05OT0RxbkUxeEFJSUtJc1ZWWERvc21JUjFiOTRlZHNuVUlvR3h0UkxtMU9vVlh3Vld0VkRuTlRGMDNWZU0xZVVwcXNiZGpZUktLdnNnMHpEbVVrS1NLbEkxWmN1dytOVytWV1g4ZVBJUmRTYmhlTGpGd05CRDhOQmlXYTFCT09lL2dHNXJNU2hVb0JNNzhEYytTbHYrbXN4WjFSUGtmb1FibVlRWTNxZ0k0RTFRWXp4K1pxM3VBVTlTeXpWYXdmamQyTGV0TVV4WHRFVy9TSzhCNTBPVDRUNmlNYUhZNVFTaFZJRVBINmgrVGl6VldsUklNb1dGVFJJalRpL2trSnlDWVdiRnRUaXJpalhsWE5WVXVjSHJYL3QydnJXaU5PbHlrdXVlTmhaMW9wVE8vekVpMjBOTnFodmM0NTBxYXdZWDREZjNYZmZXc29PR2RmMzhQUnFzY09QbVlwRkcxU2hsU3ljNWt5VVF2dXJYU2xOQkdGaWNCVTFGMjBXbFBxdWsyVkxsTEZ2elVVc1ZQclJJZHZVQ0txVTZudWRZODNhY05nMXRLOU15U3ZJSFJJcGVUazZpV0VyR2ZrTWFNL29yY1BRMXJkYnZkdFNoclhrVmV5akNpbHFya1hWenFSNk50WGhjb3JuK3QxejFIeG5OSXJyNzdLeXNwUzlMVUlYdGtheUZVWlBiVjFnN1dkV2FQWGZDc0tZVml3VnlTYXdYVGVZSXpKanEzYXY3VHE3YldQTnhFS3IrT1FXcklzMnA2STF1bWpOKzAxMW9TdnJTZkN5T3J2cEJhR2hTcDdSNGUzK3B4MHRYYmJnYSs5bGUvV0hNbGpqeDcwcEhnNHFTcUN5TWhMU1UxYzg3WHF6VnBvQ0liVWpTdVhnS1lRY0RiSTR2S1pza2F1dm1yY2dtaEdKU1J6Z2xmbFN0L1J0c0JjTXNjMHQ0VERrc2JpYk40WktTcnd4SkNpSG5hdFJWRnQ5NkRJcmtkdHR5U1gxSytaRTR2MGRUWG1GQ2RVRm9ubU1jRU9pSnlNaUxicTc5K3hPWkpPbzRUb0FlNitqN1dMWDZyNW1EZTdTVUd0OFFhUUhnazBGZDk0c2tiOWlyUitYS3A2S1RJT3IwdDBsUjFJbktocnhrR2JhNUxpUk5Sc3RaZUd6MU9Ub29lUHBqVnRqTWZQS3VhcjZrTlhLcXE2b3Z1Z2ZWWkVpNEJvVTJBYVdzVWhCMHZRMXVKNUVKV1gzNjA1YW5uVklrS1JFcDFEczNjQmpSWlpJZUNIaUl1VTFWM0Z6QnNjaW5uNzJrUUovSzJSU0l3RklKVkhGVVZOUk51dENOODIwU3ZEZGJBaWo1RTF5SWRHcmhRTUlXVGpTeXZDVFU3TVJxalVoWjR0ZGk2TlpGOW9ac1ZOU0xaeGY0N3NMWU5UWk15bCtoclJNeUtwUnVlTXlITjhwK2NvS3FCVTFHbnVHQ1dWdHROcTdSOGpxbDZMYm5HYVJ1OUFvamFtQ20xSGNVdFVaRFp1dEJxU1Flb1ZqMmhCdGJnR2NKRVR4NEdYQWxqeForYnM2V2p0WEl4UlNMWXE2Z3ZEQXFLR3drcFNJb0VNMGdRbndTbzFTWmdwM3RPOFJCc0pnbmVtTVZkdUcrTm5wYlVlSi9GZG42T0JWbWUwaG1LSlRwOXRsamxrNGlXcThxTGZSaXJ4dVRKdVFxUFJKcWdlbVZyUHF1Z1lsRUxicWY2MldIU0FTdUlkZjFvMmNORE1xOStTUXFiZXhwMmFuS0JvMGZzaUdNU1IzRXZXMEVSZkRSa1lUU1BlZjFvRUhha0xySlZFb1lFMDlBdytDVmQvdEtDd1ozSXFTQm40UXlnaCtmblhORWVTQnQ4VDR6ajdyTVp6TlBqS1Y3NUtiYkxUOWlkb2dWaEllTlpqcmR2YXFzcnNtRVN1bzlNanE2TkNNcTYxRHZ3dlhkenIzNUdpaFVCdEttTlJtNjBoTmgwNU9NZkhNWlFrcWROMnJZdHZnOUxSSmlTcWhtMGtPMTBCb1pVQlNpWXREQnRMaE5TdUZGVndPbmxvK0s5eGpoTGZHK000KzZ6R2MvVC9BOC9HL3NuWnBTV0pBQUFBQUVsRlRrU3VRbUNDKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogICNjaHJvbWUtbWlkIHsKICAgIGJhY2tncm91bmQtaW1hZ2U6IHVybChkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUFRQUFBQklDQVlBQUFEUmExUnBBQUFBQm1KTFIwUUEvd0QvQVArZ3ZhZVRBQUFBQ1hCSVdYTUFBQllsQUFBV0pRRkpVaVR3QUFBQUIzUkpUVVVIM1FjTkZ5Y0U1djlpRlFBQUFRdEpSRUZVT012dGtqR1NXekVNUXgvMGVZck0zdjhrM3ZncXljYWxTd2xJOFVmeWwzT0JGTXRHSWdVQ0lFZDZQQjZSQkVBU3F2Zk9OU3JKWHJETmJOa1E4eXdBMnkvU21heVcrWklFU1RzaXlRc3hvNDB4bU1TMmFVbVliaGVIcENWZDArVXFKR0dNc2V5M21VeWxkb1V2bFkzRDlySU4wSzdXYmUvV2JaK3kxeVd0YVZ0cnAzVkp6QUVYNlpWamMycDdiMm10blloTmRsNm0wNXJ3dGZWL2x0eDdYeXBKVHBYZU83WTVqdU9sY2h6SGFXeHlySm11aExhcHFnSUpPTnYwNStzclRoQmdpUXBCVFNSd0dPcjNyd2NjZ1dIVWhKN1A1L1lObGJkLzJYaUw3OEwvV2FqUDI0MEFRVWloZm54ODRFREpqQ0hLSGpUQWJraW1RRGdCakFKMS8za0hBZ0VrL2dMNzFBSEVXVlhQR1FBQUFBQkpSVTVFcmtKZ2dnPT0pOwogICAgZGlzcGxheTogbm9uZTsKICB9CiAgI2Nocm9tZS1yaWdodCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFDWUFBQUJJQ0FZQUFBQ2F3NGVFQUFBQUJtSkxSMFFBL3dEL0FQK2d2YWVUQUFBQUNYQklXWE1BQUJZbEFBQVdKUUZKVWlUd0FBQUFCM1JKVFVVSDNRY05GeWdoS21PcW5RQUFERTFKUkVGVWFONmRtc3V5WnNkUmhiL00ydWYwN2JSRVlEeWtQZUlsZUFNaWJOeDkyaTlCZ0VQQmd5QjV4bHZndGdJOFZETkJJNDF4aEdrcFFvd0VSZ3F3M0gwdWUxY3VCbG0xVC8zVnU0WE5pV2o5bDEyWHJNeVZLMWZXTC92NjY2OGxDWGRIRXQvMVoyWW5ueVVoQ1RQYlg4ZG40NXBtUmtSODF6Ny9YVXI1OVB6OC9LOGVQbno0Ny9iVlYxOXBuRGh1MHQrUG14MForUHY4eld2MS9lWm5aMmRudHc4ZVBQaXpaWHc0Ymo1L1AzdnE2Ry9lZVBaaVg5ZmQ5L1huZzYvcmVnNzgvZEluenhQRzkrL2F1SDgzR2pFYlBVYWhqNm0xSG9hNnYxL1g5YytYUHJsUDdJTnFyZnVydTcrMTBXelVrVUh2T3RUb2pQRjFtUGRIU3pkcVBQWG81dm0wNDZiZHEwZmhHcitidlhaazZPZ0FNMk9aQng3aFpEN2huQ3pidHAxNDlXaWQwWU9qeCtlRTZ0OHRNemI2NTlFYmtnNVBQWThadlhwRVFXTkN6Y2syTTRIM0JXZU0xRnIzMS82K0d6aVBtVGVmTTN0Y1l6UW9JdDRhMytjc28yRXpoc1lUekFBZHc5TTlNM3J2aVB2NjgzZGwvT2k5cGRaS0tlVms0cGlWUnlEdTFOSTNtQ3RBUkZCS2VXZUdidHQyeUhWOUhYZG5HVU15R2pTZlpxNEs0MmFqWWJQWHg4MzZYak8ranNqM3Jhd2NGeDVkUGdLOGJ6SjZlR2J6STh5TzNqNHlhTVRvaVdGOThmbDBjNGJOU1hCRUovT3pkMUhTRVk4QkxHT0l4bE9OZUNxbG5IeVd0R05veHRlUk1YMzh1UDQ0Zmt5eVBuZnBwNTh6cXkvczdqc0dqMHJPRWN2UFZhTUQvc2o0SS96V1dsbG1NQi9WdmlPd0h1bXYrZGtSR2M5RU90T1V1NmZIWnRlT0dCdEROLytOZUp3UE5Sc3hsNTRSVTNQSU80eDgyN2Ezd053ZmRyNDVraWI5MldoQWY5K2ZIZW0xSTdGWmEzMXJyK1dJcjQ1a3pyalpzaXh2WldISFljZnFYRkhHY3RNOXRhN3JpZGNpZ21WWldOZjFEdnlsbE4yd2thdG1ISXhDYnk3a1l6YlBPRDJxRkNOMzllZnJ1dDU1ckU4WU0zSSs4VkVOSFBGVmEyVlpsa09TZFhlMmJUdWhtSGRsK1c1b3g4VDhZQ2JEL2wydDlZUXFSaU5Hang4bDFKRWFtVlhLcmk1NmRveVR1emZHaFdkK095TEpqc05SbG8rZUhhWDYzSXk4bGRualFuM2hibUEveWFnR3VzZkc3SndyeFp5dGN4TXlqcG5INzdWeVBFRVA2NWlWczV0bnRwNGxkcDh6bHJHK3g4ejJZOUwxZjkxSnkremVjY0dabjBadjluRkhUSDUwMEJHYk02SE9vak1pV0VaUWYxY043QXV0NjhxeUxDZGVHRk4reHVSWUo3dFh1NWZldFU5RVpDaVBPcDh4bThiVHpMcXBlMmprb0RuenhqQ09hOC9WWkJ5enpHN3Q4Z1E0ZVQrR2RPNEJlMGtaRFRncTVrZWEvMGcwUmdTK3J1c2hOa2JnOTNvNmFxZWVqVWVOUi9mY1VXbWFxV0xidG4zOU1kR1dHY1JIVXJjYjE3RTFqaHN6cTN0dnhOQ3NKdWFFNlZHWk1iZU1LVHJMNkxHZWxWTDJrNDFqeDZ6dVJia25TUzlCSTdXTWREUlR4TGkzeitWa0RsMy83dmIyOW9TM3hob1pFU2RaT200d2hyVy83L05IVDgzVXROemUzdTZjMUkwNk96czd3ZGpjN1BhUXpzVjhKTlNPcDdrOTdJRHZ0RFBEWVRkc3Z0czZQejgvTVhDc20yUEQyZy9UbStWeDBiSFpIVE52ak15UnloMnBhamsvUDBjSVpFQUhMTGdYUUxnNWNrRENBRnNLQ3d0SWVISEFRR0FtU25Fa01BeVpNQmtpbjRsYzNqQkVNNGE3TVpnbzdtQkdoTEQvK00xL3FpQ3FESmZsSWpJQ1lia25qbEV0UUVsODFjQkRZSWFVaTNhRHdvRVE3bUFCdUZNamNIT01RSExNUkxTRGhobEZRazQrazlJaExnZ1pCUkVlVkxOK05Od05DQWhSd2pHTWltR3lQSmxBM293eUl3aUtFbHRXalRCSE5jaElHcExsZUlTNUlUTktRSFZEWVJpQkdVUUkvODNYLzBYVXlvcmhtMkVLQXN2VDFJcUZnd3VzZ2dsQ1dBUlYzU3VHbWROY2h3Z2lSSFdRYWdjSElxQ05KN3doSjZBSTIwQWVVSjNBMGlsUC92UUozM3p6RGR2TkRiV2tPOTFvQXdwaHJhaDd3VkdHMWNITXFTSGtnZ2l3REp0aG1BY2dqSUlWZzVyZldjMWgyQVo3QWdCTHBNRWxNcFFDVXlPU1gvM3JyL2orOS8rRUdvRVFUZ0t4S25EQURSUk9tQ2lXeVNKQmVJTGJNQ3hFTlZod0JJU0NubGRtNEVCRWVpUVJrMUFKcy9ZNUVSMnE3QlgwM3YxN1NRbnVtRGVYUnFYZ0RhU0ExY1NkSUV4UURNK1VndG9BclR5TUlqQUJKVVB0NFMyaFJIRUlnYmRzdFY1TEk0T3VzRHZETWdNTnF3M3NIcWkwSFBjTW90eVJOcXA1QXJubVJya0x1Qm00a0htakRBZUVETUlDazJQRk13b21xakkyeFlTSHNKSVVVbnhvZUJPN3JkUVVKMnFlSms4U0xmZExHdGdXQ291RVZ6RlVHN05YTUFYVkcxWXF5RGRNaFNEZ0Z1VHBhYlVFaVVndVV3M0FpQWFmYmhvUjRFdG1wSmtuS0FyZ3l0TWFCSEJtSW96RUlRNDFNMWRLN3lTR0V2eFE4Tm9JMXcyV0ZoMFhsc1VhRllpbEo1emhwdUdLd0J4WGV5Z0lxeGxyRTZJaDF3S1BnaThMNzk5L1FHY0pvNE01bzlvWURmY0tVWkptRUZkWDEyenJpa2gyeHd3clFBMktPZXFFVFJsQ0dhS2FVRlhMcGpRd3k1RWx1NGR6ZmxiNHV3OC81TVhQL3dFc0U2T1JWWDhoYlZSelRWY040aWMvZWM0SEgzekE3WGFUQzFzUXRaVVhBbTk4WjdJN3V2amlpOCs1ZVB3NHBVaXd1N1RYdW9nTTNjWDdqL2poWC95SUp6OTQ4Z2YvTlBqbGwxL3l5MS8rRS8vejI5OVJDR3JMK0F4SThrclFmaGs1QWIrNkxtckd5REExZHZma3FPdlhOenk3Zk1vbm43dzh1bWphZmFibXNEdW93UFBuejNuejVqb0xpTjlWQ3dJcUpER0h3ZWl4VjU5L3dlTkhGNGl0WlNNSmJHcTYxa2czaDNOMmZzN0Q5eDdqSWRUd0l6dzN0Q3hyWm81NjBVNVU4ZnJORmR1NlVSV0pTOFJtUnVrdG8zc212MDd1eHdKck1hOXVMREpDRzFaS0k4N0FXSkJ2aEVPc0c5V0VoU1ZjV0J0dTFBNjE1ZGEya2JvaVBhUlc0aFNSY0JHRUNsaGcwY1REeWNXZEpSMVhnVWRrck4yaFJxc2xHYXB5ZG8rZmZmZ1JMMzcrSXIxb3B6cnJKSFpEQWlCNDl2eVN2LzNncDl6Y1JpcUxDcHNyalNMcm5wUTI3S0g4L0l0WFBIejRQdFJiUk1vVGFqckJ3NkhrNG84dkx2amhqLzZTSC93L3dmL3h4Ly9JNjI5L3U5ZlBqa3hMSVpmVndtTHdXQmhRcVVxZ1UxTlpsQ3JrUVZSd0dXOXVycmw4OXBSUFhyNzhndzI3dkh6TzlkVlZJMmNJT1lWSUdIa3JZWFZEVVFhUHZYckZvNHRIYkZWN2Rua2p6R1QrNUJqWHduSy9jUEhvdmNSTEk5aE1FM1plTTIrSHRSd1FBVmRYYjFpdnI2bGR6ZllDM3NTblBGQVVaSFcrSEU3V3RxYW1aTDA3YXZyY25ZZ0tLdFI2bS9WS1FUUjluMEpRalpqN0txRDJMQ0xZMmg0cXVxc0tOVVdBNUJRUGF0akFZMWhUcHVBTzJpcWxHTFYxRVFKOEM4N3ZuZk96ano3aXhTOCs1dmY5M3krc0ZlWm5sNWY4OUsvL2h0dHR3MWJBVzVkMDVyQUs5MGF3ak9ELy9CVVBIdHluYmxtSW5YU3R5VUhKUjNqdzNzVjcvUGpwVTU0OGVYSkFydlovZ3YvRng3L2c5YmZmdHVnNE5mVkthN2J5ZDhwTjlaVDVJOXJGU00vd1NQRlhyT241VGJ5NXZ1YnAweC96OHVVL3QxSng1L0g5djNiMy9xNFlHSmZQTHJsK2MwUGRlOGxnRVd4TjB6bkcxakc2ZSt6ZlhuSHZ3UU5FVGRtTUlOcWxTRWVaSjFEdm45M2o0dUppTCs2anY4VFFPOUw2bHlhOWYvZnRhMjYyMjh3b2RWd1pib0ZVMmdMYnFicWdsWkxhcnpUYmRwdkJFaFd4TkpJMWJxNXV1VjYvU1JDSHQzNUF5QXdQbzVhS1p6bElIUmI1U3FUUjFuUlNuaXRRdEM0cGhObHlxdmxUcHBSVWxtWkVRSml6aENFcmJZU2E1N0o4U05rTFJtM3M3UlY1NEFIeW1qSzljWWpVeWcrd3FWOFhSQ3RmZHplYStJWmlGSW9Tc0ZLQkVtMVNFMjZTcFhaQ2VEaDdnOVA2NFI0U3JVMlprQzFidGVhNVRNRHNxQ0o1VWZVdVp3TzFCbG5aNnRrZ3JXV1dxak9ncWhKbXNMV2EyZG93c0taSzBudUtsTVdva1dXQm9CSWVpSnBaRjZDcWh0bk1kSFNIVzZQZFpMZmlqaklTdTJIWDExZEVqVVJyVHphM0J0eW16YUxWNU5ad0VHUVlXNGVrYUxkQ2tYU0RSQ2tpZHIybi9YS0dVbE9LanhjNm9YWk4wSDRaZWZYclZ4UTNhdFRzakQxbGtKcElETkV3bFNDUlo1M3JwNHpWaU5pUXRxd0VTdEhUMVlvVU9hY2xTWTFNbW1qWENlbE56MlExVDVMLzdMUFBZREVlUFhxWU5hMEVOSG5kN3hlS0tVRmlBTzJIQk05N0RaTW9TMXByTW1RTHJxQ0U4dVpISWdWRE5BRnBGRVc3Qm5HS1dRdG5ZSjZHT21MNTQrOTlEMEpFemZUMWFsUnppa0h0ZGErMS80bnN4ay9WcVFabWxYWHpKTVVpcUZ1N25ySk1lOHYyTGh0ZXRldUF2RWNyVnFrMW0rT3dkbjloN1pZU0U2V0FJcmtqUENWSUZ1YThzMGpoV0hmaFo1WVpaNnJaTnhvcGxacDNjbGcydVVTS0FjbXdZcGdxVXMxaUZJNVo0cnIzbWxpcTNJVnFWRGJ3TTlDR2thbzFyTjFJUjZGNHhlcENFRmh0MXdBaElLalJOSDBEdjZ5bTVsSHJFUXc4SlNsVXRhcGdoSEorcWlLMTNPeVo2eXlmL3N1blNZcXlWdVBhdlZWcTNidlNnckt4Y0tWR1U3L3MxVTVvdlh6MVc1djlmdFBWZXQ2OGNiU2VoUm82NVpOZlV1Qi9BV0hMY2hWVVdKdEZBQUFBQUVsRlRrU3VRbUNDKTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogIDwvc3R5bGU+CgogIDxkaXYgaWQ9ImhlYWRlciI+PC9kaXY+CiAgPGlucHV0IGlkPSJzdGFja2luZy1kaXN0YW5jZS1zbGlkZXIiIG1heD0iNDAwIiBtaW49IjEiIHN0ZXA9IjEiIHR5cGU9InJhbmdlIi8+CiAgCiAgPGRpdiBpZD0iY2FudmFzLXNjcm9sbGVyIj4KICAgIDxjYW52YXMgaWQ9ImNhbnZhcyI+PC9jYW52YXM+CiAgPC9kaXY+CiAgPGltZyBpZD0iY2hyb21lLWxlZnQiLz4KICA8aW1nIGlkPSJjaHJvbWUtbWlkIi8+CiAgPGltZyBpZD0iY2hyb21lLXJpZ2h0Ii8+CjwvdGVtcGxhdGU+PHRlbXBsYXRlIGlkPSJ0ci11aS1lLWNocm9tZS1jYy1sYXllci10cmVlLXF1YWQtc3RhY2stdmlldy10ZW1wbGF0ZSI+CiAgPHN0eWxlPgogICNpbnB1dC1ldmVudCB7CiAgICBiYWNrZ3JvdW5kLWltYWdlOiB1cmwoZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFHUUFBQUJrQ0FZQUFBQnc0cFZVQUFBQUJITkNTVlFJQ0FnSWZBaGtpQUFBQUFsd1NGbHpBQUFNbndBQURKOEJQamEzOXdBQUFCbDBSVmgwVTI5bWRIZGhjbVVBZDNkM0xtbHVhM05qWVhCbExtOXlaNXZ1UEJvQUFBeU5TVVJCVkhpYzdaMVBUQ1BYSGNjLzR3V1dWYkpOMmNKU0xWcWlRSnVHcG9JR0VWV1Jlb0JOSWxJRjVSQ1JTeXNPSzlFYmtzVWVPSExJSVFjVUxiTEVFWWs3b3FkdUQ2Z1NSb3FVRXlLN2RDT2FiT0hnaENpQUUvSm50UXRlc0h0NGZ1TTN6MitNWnp5Mng4WmZhVFRqTitQeDQvZmg5LzdQYjZ4TUprTkQ0VkdrMmhsb3lLa0drSkNwQVNSa2FnQUptUnBBUXFZR2tKQ3BBU1JrYXFwMkJ2ektzaXpmM3cxejM4c0tjK1pVYVFDdUFGZUI1N1A3cTRBRi9LeHNqNEduTHJmTCs2UERZb2ZRQXNrQ2FBSjZnSmVCNitRQUZPdlpwd2d3UHdPSHdDTmdONXV1LytIMjUycmFKSFJBTE11NmdnRHdDdEFMTkFmOEU4OFFVTDVBQUhxU1RWY05VVFU0b1FCaVdWWXpNSWlBMEUzbEdodHA0Q3NFblB0QUNnRkRHcVhpWUtvS3hMS3NDUEFhTUl3b2pselYxdFpHVjFjWEhSMGRkSFIwME43ZWJoOTNkSFFBY0hoNGFHL0paTkkrM3R2YjQram82THpzUEFZK1FZQTVJeDlLQnNvUHBtcEFMTXQ2QlhnVGFIZTdwcmUzbDVHUkVVWkdSdWp2Ny9mZHNzcGtNbXh0YlJHUHg0bkg0K3pzN0JTNi9IdGdIZmd2T1c5eGVFMDViVlp4SUpabGRRTnZBVGYxYzVGSWhNSEJRWWFIaDdsMTZ4YmQzZDFseVVNaWtXQnRiWTMxOVhVMk56ZEpwOU9teTc0QjFvQUVBb2E4eUlaVER0dFZESWhsV1plQjk0RGZtODZQam80U2pVYkxCc0ZOaVVTQ1dDekc2dXFxMnlWZkF2OUNOS0hUbE5sYktnTEVzcXhyd0YrQlgrbm5ob2FHdUhQbkR2MzkvV1hQUnlGdGJXMXg5KzVkTmpZMlRLZVBnQlhnT3dRVUZVeWczbEoySUpabDlRQWZBSzFxZWs5UEQ5UFQwNHlNakpUMTk3MHFIbzh6UHovUDd1NnVmdW9FK0Nld1F3Nkt3Mk9Dc0dWWmdWaVc5U2RnRk5HTEJxQzF0WldabVJuR3g4ZUpSTUk1bEpaT3AxbFpXV0Z1Ym83ajQyUDFWQVpSNFc4Z1dtSm41S0JBQUVWWVdZQmttN1B2SXZvV3RqbzdPMWxZV0tDdnJ5L3czeXlIdHJlM21acWFZbjkvWHovMUVQZzNvdCtpUXNsUUlwVEFnV1JoL0EweDVHRnJZR0NBV0N4R2U3dHJLemVVU2lhVFJLTlJIang0b0ovNkN2Z0hvaWdMREVvNXlveDMwV0NNalkyeHRMUlVjekFBMnR2YldWcGFZbXhzVEQ5MUUzZ2JNYlRUQkZ4Q0ZNMFdZUG50TXdYcUlkazY0eDNsTTlGb2xNbkp5Y0IrbzVwYVhGd2tGb3ZwbGZjbmlEcmxOTHZKWHI0dlR3bk1RN0t0cVZFMXJaNWdBRXhPVGhLTlJ2WGtQeU1HUWFXWGxPUXBnUURKOWpNK1FHbE5qWTJOMVJVTXFjbkpTYjM0c2hDbHduVkU4YVZDQVk5UVNpNnlzajN3djZOMCtnWUdCbGhhV3FLbHBhV2tlNGRWcVZTSzI3ZHY2eFg5ajhBeVlwRHlHYUw0c3ZzcXhkbzVDQTk1RHdWR1oyY25zVmlzYm1FQXRMUzBFSXZGNk96c1ZKTmZRSXpSbFZUSmx3UWtPMUJvajAyMXRyYXlzTEJRazYwcHIycHZiMmRoWVlIV1ZzY0F4RXVJMXBjS0pZSUhLS1Y2eUZ2cWg1bVptWnJwOUFXaHZyNCtabVptOU9RM01BTXBTcjZCWk9jejdDSDBucDRleHNmSC9kNnVaalUrUGs1UGo2UGJkUjM0TFQ2OXhCZVFiRy84VFRWdGVubzZ0R05UNVZRa0VtRjZlbHBQZmgyNFRLN1ZGYUZJS0g0dCtCcktUTi9RMEZEb1JtMHJxWkdSRVlhR2h0U2tYeURxVnM5RmwyY2cyUVVKdzJyYW5UdDN2TjZtN21Td3dSOFI2OGRVTHptMzFlWEhRd1pSRmlTTWpvNVdmWElwRE9ydjcyZDAxREZRY1FYb1EzaEkwVjdpQjhncjlwY2pFZE5Rd29WVk5CclY2OUVYY2FuY2NmRVNUMEN5aTlqc1NlL0J3Y0dLejRHSFdkM2QzUXdPT3FhQU9vRG5NRmZ1Um5uMWtKZlY3d3dQRDN2OGV2MUxzNG1GK0FjMkZWc1c1QzhhTHhwSTlvdS9VOU51M2JybE9jUDFMb05OYnVKZWorUjVpaGNQYVFKK0l6LzA5dlkyaWl1RHVydTc2ZTN0VlpOK2plaVR5RkhnZ3NXV0Z5QTlLQXVmTDNLLzR6eHB0cmtFM01DbFlrY0RVeFFRVTNIVkFPSXVnMjI2eUhsSVh2TlhyVWU4ZUVpSFBHaHJhMnYwUFFxb3Y3K2Z0clkyTmVrRnpFVldTWFdJM1JuczZ1b3E2Wkd5ZXBkbFdYUjFkYWxKclJUd0VGVmVnRnlWQjNMNWYwUHUwbXpVaXJDMUNzUG9KY1VDdVlMeUdGa0R5UG5TYkJRaEI4VlVaTm05OW5PQlpDKzhxcVpkaEJuQlVtV3cwUlhNUUh4NWlPUHBwckI1eU1iR0JwOTk5bG0xcytHUXdVWlhLRkJVU1JVTHhPRWhZUU55Ly81OUhqNThXTzFzT09RQ3BHQWZCT29FU0JoVndFTk1tNjFpbi9jT1hSdDNmMytmMDlOVEFINzY2U2RhV2xyWTI5c0RvTG01bWV2WHIxY3plMjV5OVF5cFlvSDhySDQ0UER3c0lVL0I2S09QUHJMemNYQndRQ1FTNGROUFB3WGd4bzBiZlB6eHg5WE1uc2xHSjdoN2hrWDJHWk9hQlJLTHhlemp4Y1ZGTGwrK3pNVEVSQlZ6NUpUQlJzZUd5M3pYSWFFREVuYTVlQWdFTklYN1dQMlFUQ2FML05yRmxjRkcwa01LTHZJdHRzaDZpbGc4M0FUaDg1RDMzMzgvZEdOcm1vM1NpQVhZdXZMZ2VJbVg5Umo0cGVISHFxNXIxNjVWT3d0NTBteDBnamtxaEpUOTJjdmdvbDJQN08zdGhTYStWQmlWeVdUc0puaFdzdjR3QnJaUjVRV0lqZnpvNklpdHJTMHZlYnhRMnRyYTBvUGRQQ2JmUTR6ZTRnWElJL1ZEUEI3M2s5Y0xJWU50RG5BQ1VKOXRkOGdMa0YyVWlxa0J4RjJhYmM2QUpPYm9EM2xRemdXaTFCV25DQ2dBN096c2tFZ2svT2E1YnBWSUpQVHdUOStSQ3ltb2U0anZJa3QrOFFzMWNXMXR6VmVtNjFrR204amlLazErZ0lFOGVWMjUrSWhjM0NqVzE5YzlmcjMrcGRra2d3Q2l3c2lMK29EeVVLaFhJRThRSVNVQTJOemNiQlJiaWhLSkJKdWJtMnJTRDRoNEtMTHVPTU1RUlVpVm45WHZkckdWVHFjZGczd1hYYkZZVEk5T3AzcUh1cWxRSENvS1NOYWRKTkg3S0dOYnE2dXJqVDRKb3UraFJhVkxJVW9URTR6QTZoRDVRNStvQ1hmdjN2VnhtL3FTd1FZN2lHNkM5QkFaQnlXdjZhdU9ldmdCSXIza2U1bXdzYkZ4b2ZzbDhYaGNEdzM0QlBnYVlYZzFLSTBwNkpsRFJRUFJpcTB6UkdRMVcvUHo4MjdSUGV0YTZYU2ErZmw1UGZsLzVMeEMzUXJDQVA5UDRXWVFjVzIva1FtN3U3dXNyS3o0dkYzdGFtVmxSWS9QK0NQd0xUbHZjQU5pRE4va0NZamlKWEx2NkFYTnpjMnh2YjN0NVpZMXJlM3RiZWJtNXZSazJWYzdKUmVFeGdURHFGSThKSU1JTXZ5bFREdytQbVpxYXVwQ3pDZ21rMG1tcHFiMElKa0hpTHBWOVlwbjVNQTRvSmltTUR3RDBlcVNEQ0xJc0QzV3ZMKy9UelFhSlpWS2ViMTF6U2lWU2hHTlJ2WGdtRStBejhrVlU4K1VyU2p2Z05LQ3o4anhtYWVJSU1OeUVvWUhEeDR3T3p0YndxM0RyZG5aV1QxVzFpbWk1WG1DRTBZS2x5TExiWUxQRnhEbFpoTEtkNGdndy9hSmUvZnVzYmk0Nk9mMm9kYmk0aUwzN3QxVGt6TEFmeEF6cW1jNFBjUGtJUVZWcW9mSWZSclJFVnBYTDRqRlluVUZSUWJCMVBRSU1ac3FZYVNVcmFpV2xhcVNRdnhsVjNySUZkMlhFSXNtL2dMOFFiMXViR3lNRHovOHNHYWp6S1ZTS1dablozWFBBTkhzL3h4aCtCU2l5RHJPYmlma2lyQ2lpaXNJRG9nSzVUSXdqdlk2aWpvTXBId0ViQ0pBUENNSFFJV2h4bDRzS214c0VFRXd3UW1sQ1FIbGJlQlY5ZG82Q2pYK0RiQk5Eb2JxSFNZWVJRZkNMRG5pbUtFWmZKYk4wQ3BpRU5MT3hmNytQaE1URXl3dkw0ZDZtQ1dkVHJPOHZNekV4SVFPSTRQb2QzMU9Qb3dUekhXSHB6ODBrTWpXeXFwQjZTWFNVNW9SUVliZkFSd1ZTQTIrcnVJVTBaclNLL0FUbkVCa3k4b3hxbHVzblFNTE5hNFZYUmE1U3I0SkVZZHdEUEc4dGtNMThrS1hKK1RtZ1dRL1EzcUREc05USmE0cjZOanZrQS9sRXNKVG5rZEVNWDNKOU4wUXYvTG9BRkZFeVJhVGJGRkpHUEs0WkJoUW50ZFZnRHVVWmtUcjZ3MkUxemdVc3BlQy9Zam9ZM3lQY3pna1pkaGs1NjhrR0ZDK0Y3cUFFNHFzVTJTOTBvd0lwZm82SW1Da1VWVjZiZDRUeEh6R3R6Z25tTlRoRU4wckhLMHBTbmdGVXRsZWVlUUNSYTFYbWhITjQxZUJBY1JEa2E2cXdJc2xVNGpSaHEvSm44dFFoMEhVaXR0dFd0YjNZdlJ5djRNS2NrOE15VWVDWlJHbWVvc01HUGtpSXNoTnBSNzJ5Q0NXNmh3Z0ZpVEkxcEUwdERTNmFiRFE4N0JJTWFyRVc5ckFHVUZOTm90MU1ITC9IQ0lzM2sxRThLOUxBV2ZwRERFWWVwRGQ1TG9wZGM1YjlReDlyMTRueC9FZ0FCaFFBU0NRMTA5Uml6QWRqQXBIOXZodklPSk52WUNJRnlKamhoU2pOTGxtNldNRWdDUzV0YmJxQWpiVGxLc0t3d1RDSG1DdG1mY1kyai9raENMM2F1d1BOWHlSR3FPd2lmelFScTJJWWs3ZHdEbDhjWXd3cGpvcXJSclNEWVlLcGRDYXFwTHJDNU9xOFM1Yyt4Q3p4K2h3VEp0YkVCZFQzYU1iVUJwVlhXdnJ0c256K29wMUNOQXJWRlhsYmRFdTNtSUNvd0pTOStjQnNSL0V4eDJJYVFHMGFmMXRIZ2dJMWl0VVZmdDk2dmFoc2kva09hYlB4UUNSZTkzSWFXM1RBVlFNaEZSVmdkaVpNSU9SZXhPZ1FpRGtYdjNEZEFPYlBNWUlnQXFCa0FvRkVDbXRKKzRHcDlBeDJyRU9SZTUxdytzUTdPT0sxN0ZoQXFMS0JZNTY3QWJCVFNZNHJzZlZza3RvZ2FncUFDZnZVcGQwdHovU2tSNEdXOVFFRUZWQmh0QUk0OTllYzBEcVhmOEg4ZjRYMTBqZjJZQUFBQUFBU1VWT1JLNUNZSUk9KTsKICAgIGRpc3BsYXk6IG5vbmU7CiAgfQogIDwvc3R5bGU+CiAgPGltZyBpZD0iaW5wdXQtZXZlbnQiLz4KPC90ZW1wbGF0ZT48dGVtcGxhdGUgaWQ9InRyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtZGVidWdnZXItdGVtcGxhdGUiPgogIDxsZWZ0LXBhbmVsPgogICAgPHBpY3R1cmUtaW5mbz4KICAgICAgPGRpdj4KICAgICAgICA8c3BhbiBjbGFzcz0idGl0bGUiPlNraWEgUGljdHVyZTwvc3Bhbj4KICAgICAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+PC9zcGFuPgogICAgICA8L2Rpdj4KICAgICAgPGRpdj4KICAgICAgICA8aW5wdXQgY2xhc3M9ImZpbGVuYW1lIiB0eXBlPSJ0ZXh0IiB2YWx1ZT0ic2twaWN0dXJlLnNrcCIvPgogICAgICAgIDxidXR0b24gY2xhc3M9ImV4cG9ydCI+RXhwb3J0PC9idXR0b24+CiAgICAgIDwvZGl2PgogICAgPC9waWN0dXJlLWluZm8+CiAgPC9sZWZ0LXBhbmVsPgogIDxyaWdodC1wYW5lbD4KICAgIDx0ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLW9wcy1jaGFydC12aWV3PgogICAgPC90ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLW9wcy1jaGFydC12aWV3PgogICAgPHJhc3Rlci1hcmVhPjxjYW52YXM+PC9jYW52YXM+PC9yYXN0ZXItYXJlYT4KICA8L3JpZ2h0LXBhbmVsPgo8L3RlbXBsYXRlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXN0YWNrLWZyYW1lIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXg6IDAgMTsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KICAgICN0YWJsZSB7CiAgICAgIGZsZXg6IDAgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj4KICAgIDwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtY2hyb21lLWNjLXJhc3Rlci10YXNrLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KICAgICNoZWFkaW5nIHsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICB9CiAgICB0ci11aS1iLXRhYmxlIHsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJoZWFkaW5nIj4KICAgICAgUmFzdGVyaXphdGlvbiBjb3N0cyBpbgogICAgICA8dHItdWktYS1hbmFseXNpcy1saW5rIGlkPSJsaW5rIj48L3RyLXVpLWEtYW5hbHlzaXMtbGluaz4KICAgIDwvZGl2PgogICAgPHRyLXVpLWItdGFibGUgaWQ9ImNvbnRlbnQiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtY2hyb21lLWNvZGVzZWFyY2giPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIH0KICAgICAgI2NvZGVzZWFyY2hMaW5rIHsKICAgICAgICBmb250LXNpemU6IHgtc21hbGw7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICAgICAgdGV4dC1kZWNvcmF0aW9uOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGEgaWQ9ImNvZGVzZWFyY2hMaW5rIiBvbi1jbGljaz0ib25DbGljayIgdGFyZ2V0PSJfYmxhbmsiPvCflI08L2E+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxzdHlsZT4KLnRyLXVpLWUtY2hyb21lLWdwdS1zdGF0ZS1zbmFwc2hvdC12aWV3e2JhY2tncm91bmQ6dXJsKGRhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBQ0FBQUFBZ0NBWUFBQUJ6ZW5yMEFBQUFBWE5TUjBJQXJzNGM2UUFBQUFaaVMwZEVBRXdBVEFCTVlxcDNLQUFBQUFsd1NGbHpBQUFMRXdBQUN4TUJBSnFjR0FBQUFBZDBTVTFGQjkwSkNRc0JNQ0g3WnFZQUFBQVpkRVZZZEVOdmJXMWxiblFBUTNKbFlYUmxaQ0IzYVhSb0lFZEpUVkJYZ1E0WEFBQUFVRWxFUVZSWXcrM1d3UWtBSUFpRjRWYzBoVE81L3dpdVVSdllJY1FPdjFjUlBoRGxEWGZmU3NyTXNyWWlRaS96VTgwRkFBQ0FWWDNudDNsV0FBQkEveCtvdm5QeUFBQUE1QUh5QUFBQTN3TU9kMzRYZCtsc2dsZ0FBQUFBU1VWT1JLNUNZSUk9KTtkaXNwbGF5OmZsZXg7b3ZlcmZsb3c6YXV0b30udHItdWktZS1jaHJvbWUtZ3B1LXN0YXRlLXNuYXBzaG90LXZpZXcgaW1ne2Rpc3BsYXk6YmxvY2s7bWFyZ2luOjE2cHggYXV0byAxNnB4IGF1dG99Cjwvc3R5bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbGF5b3V0LXRyZWUtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIHRyLXVpLWItdGFibGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjx0ZW1wbGF0ZSBpZD0idHItdWktZS1pbWctaW1hZ2Utc25hcHNob3Qtdmlldy10ZW1wbGF0ZSI+CiAgPHN0eWxlPgogICAgLmltYWdlLWluZm8gewogICAgICBtYXJnaW4tYm90dG9tOiA1cHg7CiAgICB9CgogICAgLmltYWdlLWluZm8gLnRpdGxlIHsKICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIG1hcmdpbi1sZWZ0OiA1cHg7CiAgICAgIG1hcmdpbi1yaWdodDogNXB4OwogICAgfQoKICAgIC5pbWFnZS1pbmZvIC5zaXplIHsKICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICB9CgogICAgLmltYWdlLWNvbnRhaW5lciB7CiAgICAgIG1pbi1oZWlnaHQ6IDEwMHB4OwogICAgICBtaW4td2lkdGg6IDIwMHB4OwogICAgICBvdmVyZmxvdzogYXV0bzsKICAgIH0KICA8L3N0eWxlPgoKICA8ZGl2IGNsYXNzPSJpbWFnZS1pbmZvIj4KICAgIDxzcGFuIGNsYXNzPSJ0aXRsZSI+SW1hZ2U8L3NwYW4+CiAgICA8c3BhbiBjbGFzcz0ic2l6ZSI+KHVua25vd24pPC9zcGFuPgogICAgPHNwYW4gY2xhc3M9Imluc3RydWN0aW9ucyI+CiAgICAgIFsgRHJhZyB3aXRoIG1vdXNlIHRvIHpvb20gaW4gYW5kIG91dCBdCiAgICA8L3NwYW4+CiAgPC9kaXY+CiAgPGRpdiBjbGFzcz0iaW1hZ2UtY29udGFpbmVyIj4KICAgIDxpbWcgYWx0PSJJbWFnZSBzbmFwc2hvdCIvPgogIDwvZGl2Pgo8L3RlbXBsYXRlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLXMtZnJhbWUtZGF0YS1zaWRlLXBhbmVsIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHdpZHRoOiA2MDBweDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KICAgIHRhYmxlLWNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdj4KICAgICAgT3JnYW5pemUgYnk6CiAgICAgIDxzZWxlY3QgaWQ9InNlbGVjdCI+CiAgICAgICAgPG9wdGlvbiB2YWx1ZT0ibm9uZSI+Tm9uZTwvb3B0aW9uPgogICAgICAgIDxvcHRpb24gdmFsdWU9InRyZWUiPkZyYW1lIFRyZWU8L29wdGlvbj4KICAgICAgPC9zZWxlY3Q+CiAgICA8L2Rpdj4KICAgIDx0YWJsZS1jb250YWluZXI+CiAgICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogICAgPC90YWJsZS1jb250YWluZXI+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWNoYXJ0LWxlZ2VuZC1rZXkiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgI2NoZWNrYm94IHsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgdmlzaWJpbGl0eTogaGlkZGVuOwogICAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgICAgfQogICAgICAjbGFiZWwsICNsaW5rIHsKICAgICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxpbnB1dCBjaGVja2VkPSIiIGlkPSJjaGVja2JveCIgdHlwZT0iY2hlY2tib3giLz4KICAgIDx0ci11aS1hLWFuYWx5c2lzLWxpbmsgaWQ9ImxpbmsiPjwvdHItdWktYS1hbmFseXNpcy1saW5rPgogICAgPGxhYmVsIGlkPSJsYWJlbCI+PC9sYWJlbD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PHRlbXBsYXRlIGlkPSJjaGFydC1iYXNlLXRlbXBsYXRlIj4KICA8c3ZnPiAKICAgIDxnIGlkPSJjaGFydC1hcmVhIiB4bWxucz0iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciPgogICAgICA8ZyBjbGFzcz0ieCBheGlzIj48L2c+CiAgICAgIDxnIGNsYXNzPSJ5IGF4aXMiPjwvZz4KICAgICAgPHRleHQgaWQ9InRpdGxlIj48L3RleHQ+CiAgICA8L2c+CiAgPC9zdmc+CjwvdGVtcGxhdGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtcy1pbnB1dC1sYXRlbmN5LXNpZGUtcGFuZWwiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgIHRvb2xiYXIgewogICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIGJsYWNrOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgfQogICAgcmVzdWx0LWFyZWEgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDx0b29sYmFyIGlkPSJ0b29sYmFyIj48L3Rvb2xiYXI+CiAgICA8cmVzdWx0LWFyZWEgaWQ9InJlc3VsdF9hcmVhIj48L3Jlc3VsdC1hcmVhPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1oZWFkaW5nIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyNDMsIDI0NSwgMjQ3KTsKICAgICAgYm9yZGVyLXJpZ2h0OiAxcHggc29saWQgIzhlOGU4ZTsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIGhlaWdodDogMTAwJTsKICAgICAgbWFyZ2luOiAwOwogICAgICBwYWRkaW5nOiAwIDVweCAwIDA7CiAgICB9CgogICAgaGVhZGluZyB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICBvdmVyZmxvdy14OiBoaWRkZW47CiAgICAgIHRleHQtYWxpZ246IGxlZnQ7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgI2Fycm93IHsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIGZvbnQtZmFtaWx5OiBzYW5zLXNlcmlmOwogICAgICBtYXJnaW4tbGVmdDogNXB4OwogICAgICBtYXJnaW4tcmlnaHQ6IDVweDsKICAgICAgd2lkdGg6IDhweDsKICAgIH0KCiAgICAjbGluaywgI2hlYWRpbmdfY29udGVudCB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGhlYWRpbmcgaWQ9ImhlYWRpbmciIG9uLWNsaWNrPSJvbkhlYWRpbmdEaXZDbGlja2VkXyI+CiAgICAgIDxzcGFuIGlkPSJhcnJvdyI+PC9zcGFuPgogICAgICA8c3BhbiBpZD0iaGVhZGluZ19jb250ZW50Ij48L3NwYW4+CiAgICAgIDx0ci11aS1hLWFuYWx5c2lzLWxpbmsgaWQ9ImxpbmsiPjwvdHItdWktYS1hbmFseXNpcy1saW5rPgogICAgPC9oZWFkaW5nPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48c3R5bGU+Ci50cmFjay1idXR0b257YmFja2dyb3VuZC1jb2xvcjpyZ2JhKDI1NSwyNTUsMjU1LDAuNSk7Ym9yZGVyOjFweCBzb2xpZCByZ2JhKDAsMCwwLDAuMSk7Y29sb3I6cmdiYSgwLDAsMCwwLjIpO2ZvbnQtc2l6ZToxMHB4O2hlaWdodDoxMnB4O3RleHQtYWxpZ246Y2VudGVyO3dpZHRoOjEycHh9LnRyYWNrLWJ1dHRvbjpob3ZlcntiYWNrZ3JvdW5kLWNvbG9yOnJnYmEoMjU1LDI1NSwyNTUsMS4wKTtib3JkZXI6MXB4IHNvbGlkIHJnYmEoMCwwLDAsMC41KTtib3gtc2hhZG93OjAgMCAuMDVlbSByZ2JhKDAsMCwwLDAuNCk7Y29sb3I6cmdiYSgwLDAsMCwxKX0udHJhY2stY2xvc2UtYnV0dG9ue2xlZnQ6MnB4O3Bvc2l0aW9uOmFic29sdXRlO3RvcDoycHh9LnRyYWNrLWNvbGxhcHNlLWJ1dHRvbntsZWZ0OjNweDtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MnB4fQo8L3N0eWxlPjxzdHlsZT4KLm9iamVjdC1pbnN0YW5jZS10cmFja3toZWlnaHQ6MThweH0KPC9zdHlsZT48c3R5bGU+Ci50ci11aS1lLXN5c3RlbS1zdGF0cy1pbnN0YW5jZS10cmFja3toZWlnaHQ6NTAwcHh9LnRyLXVpLWUtc3lzdGVtLXN0YXRzLWluc3RhbmNlLXRyYWNrIHVse2xpc3Qtc3R5bGU6bm9uZTtsaXN0LXN0eWxlLXBvc2l0aW9uOm91dHNpZGU7bWFyZ2luOjA7b3ZlcmZsb3c6aGlkZGVufQo8L3N0eWxlPjxzdHlsZT4KLnRyLXVpLWUtc3lzdGVtLXN0YXRzLXNuYXBzaG90LXZpZXcgLnN1YmhlYWR7Zm9udC1zaXplOnNtYWxsO3BhZGRpbmctYm90dG9tOjEwcHh9LnRyLXVpLWUtc3lzdGVtLXN0YXRzLXNuYXBzaG90LXZpZXcgdWx7YmFja2dyb3VuZC1wb3NpdGlvbjowIDVweDtiYWNrZ3JvdW5kLXJlcGVhdDpuby1yZXBlYXQ7Y3Vyc29yOnBvaW50ZXI7Zm9udC1mYW1pbHk6bW9ub3NwYWNlO2xpc3Qtc3R5bGU6bm9uZTttYXJnaW46MDtwYWRkaW5nLWxlZnQ6MTVweH0udHItdWktZS1zeXN0ZW0tc3RhdHMtc25hcHNob3QtdmlldyBsaXtiYWNrZ3JvdW5kLXBvc2l0aW9uOjAgNXB4O2JhY2tncm91bmQtcmVwZWF0Om5vLXJlcGVhdDtjdXJzb3I6cG9pbnRlcjtsaXN0LXN0eWxlOm5vbmU7bWFyZ2luOjA7cGFkZGluZy1sZWZ0OjE1cHh9Cjwvc3R5bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtdjgtZ2Mtb2JqZWN0cy1zdGF0cy10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgdHItdWktYi10YWJsZSB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBtYXJnaW4tdG9wOiAxZW07CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIC5kaWZmIHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBtYXJnaW4tdG9wOiAxZW07CiAgICAgIG1hcmdpbi1sZWZ0OiAwLjhlbTsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJkaWZmIiBpZD0iZGlmZk9wdGlvbiI+CiAgICAgIERpZmYKICAgIDwvZGl2PgogICAgPHRyLXVpLWItdGFibGUgaWQ9ImRpZmZUYWJsZSI+PC90ci11aS1iLXRhYmxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLW11bHRpLXY4LWdjLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgPC9zdHlsZT4KICAgIDx0ci11aS1lLXY4LWdjLW9iamVjdHMtc3RhdHMtdGFibGUgaWQ9ImdjT2JqZWN0c1N0YXRzIj4KICAgIDwvdHItdWktZS12OC1nYy1vYmplY3RzLXN0YXRzLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS12OC1pYy1zdGF0cy10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgdHItdWktYi10YWJsZSB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBtYXJnaW4tdG9wOiAxZW07CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgICN0b3RhbCB7CiAgICAgIG1hcmdpbi10b3A6IDFlbTsKICAgICAgbWFyZ2luLWxlZnQ6IDAuOGVtOwogICAgfQogICAgI2dyb3VwT3B0aW9uIHsKICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICBtYXJnaW4tdG9wOiAxZW07CiAgICAgIG1hcmdpbi1sZWZ0OiAwLjhlbTsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IHN0eWxlPSJwYWRkaW5nLXJpZ2h0OiAyMDBweCI+CiAgICAgIDxkaXYgc3R5bGU9ImZsb2F0OnJpZ2h0OyAgYm9yZGVyLXN0eWxlOiBzb2xpZDsgYm9yZGVyLXdpZHRoOiAxcHg7IHBhZGRpbmc6MjBweCI+CiAgICAgICAgWCBubyBmZWVkYmFjazxicj4KICAgICAgICAwIHVuaW5pdGlhbGl6ZWQ8YnI+CiAgICAgICAgLiBwcmVtb25vbW9ycGhpYzxicj4KICAgICAgICAxIG1vbm9tb3JwaGljPGJyPgogICAgICAgIF4gcmVjb21wdXRlIGhhbmRsZXI8YnI+CiAgICAgICAgUCBwb2x5bW9ycGhpYzxicj4KICAgICAgICBOIG1lZ2Ftb3JwaGljPGJyPgogICAgICAgIEcgZ2VuZXJpYwogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPGRpdiBpZD0idG90YWwiPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJncm91cE9wdGlvbiI+CiAgICAgIEdyb3VwIEtleQogICAgPC9kaXY+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtbXVsdGktdjgtaWMtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dHItdWktZS12OC1pYy1zdGF0cy10YWJsZSBpZD0idGFibGUiPgogICAgPC90ci11aS1lLXY4LWljLXN0YXRzLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICN0YWJsZSwgI2JsaW5rX3Jjc190YWJsZSB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBtYXJnaW4tdG9wOiAxZW07CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KCiAgICAjdjhfcmNzX2hlYWRpbmcsICNibGlua19yY3NfaGVhZGluZyB7CiAgICAgICAgcGFkZGluZy10b3A6IDFlbTsKICAgICAgICBmb250LXNpemU6IDE4cHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGgxIGlkPSJ2OF9yY3NfaGVhZGluZyI+PC9oMT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogICAgPGgxIGlkPSJibGlua19yY3NfaGVhZGluZyI+PC9oMT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJibGlua19yY3NfdGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtbXVsdGktdjgtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8dHItdWktYS1tdWx0aS10aHJlYWQtc2xpY2Utc3ViLXZpZXcgaWQ9ImNvbnRlbnQiPjwvdHItdWktYS1tdWx0aS10aHJlYWQtc2xpY2Utc3ViLXZpZXc+CiAgICA8dHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUgaWQ9InJ1bnRpbWVDYWxsU3RhdHMiPjwvdHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLXNpbmdsZS12OC1nYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDx0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KICAgIDx0ci11aS1lLXY4LWdjLW9iamVjdHMtc3RhdHMtdGFibGUgaWQ9ImdjT2JqZWN0c1N0YXRzIj48L3RyLXVpLWUtdjgtZ2Mtb2JqZWN0cy1zdGF0cy10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtc2luZ2xlLXY4LWljLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHRyLXVpLWUtdjgtaWMtc3RhdHMtdGFibGUgaWQ9InRhYmxlIj4KICAgIDwvdHItdWktZS12OC1pYy1zdGF0cy10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWUtc2luZ2xlLXY4LXRocmVhZC1zbGljZS1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHRyLXVpLWEtc2luZ2xlLXRocmVhZC1zbGljZS1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLXNpbmdsZS10aHJlYWQtc2xpY2Utc3ViLXZpZXc+CiAgICA8dHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUgaWQ9InJ1bnRpbWVDYWxsU3RhdHMiPjwvdHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWFsZXJ0LXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB9CiAgICAjdGFibGUgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+CiAgICA8L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLXRhYi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25fZGVzY3JpcHRpb24sICN0YWJzIHsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KCiAgICAgICNzZWxlY3Rpb25fZGVzY3JpcHRpb24gewogICAgICAgIGRpc3BsYXk6IGlubGluZS1ibG9jazsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBtYXJnaW46IDlweCAwcHggNHB4IDIwcHg7CiAgICAgIH0KCiAgICAgICN0YWJzIHsKICAgICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgICBib3JkZXItdG9wOiAxcHggc29saWQgIzhlOGU4ZTsKICAgICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgIzhlOGU4ZTsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWNlY2VjOwogICAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgICAgbWFyZ2luOiAwOwogICAgICB9CgogICAgICAjdGFicyBpbnB1dFt0eXBlPXJhZGlvXSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgI3RhYnMgdGFiIGxhYmVsIHsKICAgICAgICBjdXJzb3I6IHBvaW50ZXI7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICNlY2VjZWM7CiAgICAgICAgbWFyZ2luOiA1cHggMHB4IDBweCAxNXB4OwogICAgICAgIHBhZGRpbmc6IDNweCAxMHB4IDNweCAxMHB4OwogICAgICB9CgogICAgICAjdGFicyB0YWIgbGFiZWwgc3BhbiB7CiAgICAgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CiAgICAgIH0KCiAgICAgICN0YWJzOmZvY3VzIGlucHV0W3R5cGU9cmFkaW9dOmNoZWNrZWQgfiBsYWJlbCB7CiAgICAgICAgb3V0bGluZTogZG90dGVkIDFweCAjOGU4ZThlOwogICAgICAgIG91dGxpbmUtb2Zmc2V0OiAtMnB4OwogICAgICB9CgogICAgICAjdGFicyBpbnB1dFt0eXBlPXJhZGlvXTpjaGVja2VkIH4gbGFiZWwgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGJvcmRlcjogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHdoaXRlOwogICAgICB9CgogICAgICAjc3ViVmlldyB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KCiAgICAgICNzdWJWaWV3ID4gKiB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgICAgbWluLXdpZHRoOiAwOwogICAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBoaWRkZW49IltbdGFic0hpZGRlbl1dIiBpZD0idGFicyI+CiAgICAgIDxsYWJlbCBpZD0ic2VsZWN0aW9uX2Rlc2NyaXB0aW9uIj5bW2xhYmVsX11dPC9sYWJlbD4KICAgICAgPHRlbXBsYXRlIGlzPSJkb20tcmVwZWF0IiBpdGVtcz0iW1tzdWJWaWV3c19dXSI+CiAgICAgICAgPHRhYj4KICAgICAgICAgIDxpbnB1dCBjaGVja2VkPSJbW2lzQ2hlY2tlZF8oaXRlbSldXSIgaWQkPSJbW2NvbXB1dGVSYWRpb0lkXyhpdGVtKV1dIiBuYW1lPSJ0YWJzIiBvbi1jaGFuZ2U9Im9uVGFiQ2hhbmdlZF8iIHR5cGU9InJhZGlvIi8+CiAgICAgICAgICA8bGFiZWwgZm9yJD0iW1tjb21wdXRlUmFkaW9JZF8oaXRlbSldXSI+CiAgICAgICAgICAgIDx0ZW1wbGF0ZSBpZj0iW1tpdGVtLnRhYkljb25dXSIgaXM9ImRvbS1pZiI+CiAgICAgICAgICAgICAgPHNwYW4gc3R5bGUkPSJbW2l0ZW0udGFiSWNvbi5zdHlsZV1dIj5bW2l0ZW0udGFiSWNvbi50ZXh0XV08L3NwYW4+CiAgICAgICAgICAgIDwvdGVtcGxhdGU+CiAgICAgICAgICAgIFtbaXRlbS50YWJMYWJlbF1dCiAgICAgICAgICA8L2xhYmVsPgogICAgICAgIDwvdGFiPgogICAgICA8L3RlbXBsYXRlPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJzdWJWaWV3Ij48L2Rpdj4KICAgIDxzbG90PgogICAgPC9zbG90PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDx0ci11aS1iLXRhYi12aWV3IGlkPSJ0YWJzIj48L3RyLXVpLWItdGFiLXZpZXc+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1icmVha2Rvd24tdmlldy10YWIiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ci12LXVpLXNjYWxhci1jb250ZXh0LWNvbnRyb2xsZXI+PC90ci12LXVpLXNjYWxhci1jb250ZXh0LWNvbnRyb2xsZXI+CiAgICA8dHItdWktYi1pbmZvLWJhciBoaWRkZW49IiIgaWQ9ImluZm8iPjwvdHItdWktYi1pbmZvLWJhcj4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGF0aC12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyPjwvdHItdi11aS1zY2FsYXItY29udGV4dC1jb250cm9sbGVyPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgICNoZWFkZXIgewogICAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgICBhbGlnbi1pdGVtczogY2VudGVyOwoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKICAgICAgfQoKICAgICAgI2xhYmVsIHsKICAgICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAjdmlld19tb2RlX2NvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICB9CgogICAgICAjY29udGVudHMgewogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAjaW5mb190ZXh0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgI3NwbGl0X3ZpZXcgewogICAgICAgIGRpc3BsYXk6IG5vbmU7ICAvKiBIaWRlIHVudGlsIG1lbW9yeSBhbGxvY2F0b3IgZHVtcHMgYXJlIHNldC4gKi8KICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIH0KCiAgICAgICNwYXRoX3ZpZXcgewogICAgICAgIHdpZHRoOiA1MCU7CiAgICAgIH0KCiAgICAgICNicmVha2Rvd25fdmlldyB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgICAgd2lkdGg6IDA7CiAgICAgIH0KCiAgICAgICNwYXRoX3ZpZXcsICNicmVha2Rvd25fdmlldyB7CiAgICAgICAgb3ZlcmZsb3cteDogYXV0bzsgIC8qIFNob3cgc2Nyb2xsYmFyIGlmIG5lY2Vzc2FyeS4gKi8KICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImhlYWRlciI+CiAgICAgIDxkaXYgaWQ9ImxhYmVsIj5IZWFwIGRldGFpbHM8L2Rpdj4KICAgICAgPGRpdiBpZD0idmlld19tb2RlX2NvbnRhaW5lciI+CiAgICAgICAgPHNwYW4+VmlldyBtb2RlOjwvc3Bhbj4KICAgICAgICAKICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICAgIDxkaXYgaWQ9ImNvbnRlbnRzIj4KICAgICAgPHRyLXVpLWItaW5mby1iYXIgaGlkZGVuPSIiIGlkPSJpbmZvX2JhciI+CiAgICAgIDwvdHItdWktYi1pbmZvLWJhcj4KCiAgICAgIDxkaXYgaWQ9ImluZm9fdGV4dCI+Tm8gaGVhcCBkdW1wIHNlbGVjdGVkPC9kaXY+CgogICAgICA8ZGl2IGlkPSJzcGxpdF92aWV3Ij4KICAgICAgICA8dHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGF0aC12aWV3IGlkPSJwYXRoX3ZpZXciPgogICAgICAgIDwvdHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGF0aC12aWV3PgogICAgICAgIDx0ci11aS1iLWRyYWctaGFuZGxlIGlkPSJkcmFnX2hhbmRsZSI+PC90ci11aS1iLWRyYWctaGFuZGxlPgogICAgICAgIDx0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1icmVha2Rvd24tdmlldyBpZD0iYnJlYWtkb3duX3ZpZXciPgogICAgICAgIDwvdHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXc+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW1lbW9yeS1kdW1wLWFsbG9jYXRvci1kZXRhaWxzLXBhbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgI2xhYmVsIHsKICAgICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CgogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOwoKICAgICAgICBmb250LXNpemU6ICAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAjY29udGVudHMgewogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAjaW5mb190ZXh0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgI3RhYmxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAgLyogSGlkZSB1bnRpbCBtZW1vcnkgYWxsb2NhdG9yIGR1bXBzIGFyZSBzZXQuICovCiAgICAgICAgZmxleDogMSAwIGF1dG87CiAgICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJsYWJlbCI+Q29tcG9uZW50IGRldGFpbHM8L2Rpdj4KICAgIDxkaXYgaWQ9ImNvbnRlbnRzIj4KICAgICAgPGRpdiBpZD0iaW5mb190ZXh0Ij5ObyBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgc2VsZWN0ZWQ8L2Rpdj4KICAgICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbWVtb3J5LWR1bXAtdm0tcmVnaW9ucy1kZXRhaWxzLXBhbmUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgfQoKICAgICAgI2xhYmVsIHsKICAgICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgICBwYWRkaW5nOiA4cHg7CgogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlZWU7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOwoKICAgICAgICBmb250LXNpemU6ICAxNXB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICB9CgogICAgICAjY29udGVudHMgewogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICB9CgogICAgICAjaW5mb190ZXh0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgI3RhYmxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAgLyogSGlkZSB1bnRpbCBtZW1vcnkgZHVtcHMgYXJlIHNldC4gKi8KICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImxhYmVsIj5NZW1vcnkgbWFwczwvZGl2PgogICAgPGRpdiBpZD0iY29udGVudHMiPgogICAgICA8ZGl2IGlkPSJpbmZvX3RleHQiPk5vIG1lbW9yeSBtYXBzIHNlbGVjdGVkPC9kaXY+CiAgICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWNvbG9yLWxlZ2VuZCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICB9CgogICAgI3NxdWFyZSB7CiAgICAgIGZvbnQtc2l6ZTogMTUwJTsgIC8qIE1ha2UgdGhlIHNxdWFyZSBiaWdnZXIuICovCiAgICAgIGxpbmUtaGVpZ2h0OiAwJTsgIC8qIFByZXZlbnQgdGhlIHNxdWFyZSBmcm9tIGluY3JlYXNpbmcgbGVnZW5kIGhlaWdodC4gKi8KICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3BhbiBpZD0ic3F1YXJlIj48L3NwYW4+CiAgICA8c3BhbiBpZD0ibGFiZWwiPjwvc3Bhbj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItdmlldy1zcGVjaWZpYy1icnVzaGluZy1zdGF0ZSI+CiAgPHRlbXBsYXRlPjwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1vdmVydmlldy1wYW5lIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIDpob3N0IHsKICAgICAgICBkaXNwbGF5OiBmbGV4OwogICAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIH0KCiAgICAgICNsYWJlbCB7CiAgICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgICAgcGFkZGluZzogOHB4OwoKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwogICAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCB3aGl0ZTsKCiAgICAgICAgZm9udC1zaXplOiAgMTVweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgfQoKICAgICAgI2xhYmVsIGEgewogICAgICAgIGZvbnQtd2VpZ2h0OiBub3JtYWw7CiAgICAgICAgZmxvYXQ6IHJpZ2h0OwogICAgICB9CgogICAgICAjY29udGVudHMgewogICAgICAgIGZsZXg6IDEgMCBhdXRvOwogICAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICAjaW5mb190ZXh0IHsKICAgICAgICBwYWRkaW5nOiA4cHg7CiAgICAgICAgY29sb3I6ICM2NjY7CiAgICAgICAgZm9udC1zdHlsZTogaXRhbGljOwogICAgICAgIHRleHQtYWxpZ246IGNlbnRlcjsKICAgICAgfQoKICAgICAgI3RhYmxlIHsKICAgICAgICBkaXNwbGF5OiBub25lOyAgLyogSGlkZSB1bnRpbCBtZW1vcnkgZHVtcHMgYXJlIHNldC4gKi8KICAgICAgICBmbGV4OiAxIDAgYXV0bzsKICAgICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXZpZXctc3BlY2lmaWMtYnJ1c2hpbmctc3RhdGUgaWQ9InN0YXRlIiB2aWV3LWlkPSJhbmFseXNpcy5tZW1vcnlfZHVtcF9vdmVydmlld19wYW5lIj4KICAgIDwvdHItdWktYi12aWV3LXNwZWNpZmljLWJydXNoaW5nLXN0YXRlPgogICAgPGRpdiBpZD0ibGFiZWwiPk92ZXJ2aWV3IDxhIGhyZWY9Imh0dHBzOi8vY2hyb21pdW0uZ29vZ2xlc291cmNlLmNvbS9jaHJvbWl1bS9zcmMvKy9tYXN0ZXIvZG9jcy9tZW1vcnktaW5mcmEiPkhlbHA8L2E+PC9kaXY+CiAgICA8ZGl2IGlkPSJjb250ZW50cyI+CiAgICAgIDxkaXYgaWQ9ImluZm9fdGV4dCI+Tm8gbWVtb3J5IG1lbW9yeSBkdW1wcyBzZWxlY3RlZDwvZGl2PgogICAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tZW1vcnktZHVtcC1oZWFkZXItcGFuZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CgogICAgICAgIGJhY2tncm91bmQtY29sb3I6ICNkMGQwZDA7CiAgICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgICAgYm9yZGVyLXRvcDogMXB4IHNvbGlkIHdoaXRlOwogICAgICB9CgogICAgICAjbGFiZWwgewogICAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICAgIHBhZGRpbmc6IDZweDsKICAgICAgICBmb250LXNpemU6IDE1cHg7CiAgICAgIH0KCiAgICAgICNhZ2dyZWdhdGlvbl9tb2RlX2NvbnRhaW5lciB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICB9CiAgICA8L3N0eWxlPgogICAgCiAgICA8ZGl2IGlkPSJsYWJlbCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJhZ2dyZWdhdGlvbl9tb2RlX2NvbnRhaW5lciI+CiAgICAgIDxzcGFuPk1ldHJpYyBhZ2dyZWdhdGlvbjo8L3NwYW4+CiAgICAgIAogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXN0YWNrZWQtcGFuZS12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB9CgogICAgI3BhbmVfY29udGFpbmVyID4gKiB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9InBhbmVfY29udGFpbmVyIj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1jb250YWluZXItbWVtb3J5LWR1bXAtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIHRyLXVpLWItdGFibGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWNvdW50ZXItc2FtcGxlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB9CiAgICB0ci11aS1iLXRhYmxlIHsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1ldmVudC1zdW1tYXJ5LXRhYmxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjdGFibGUgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+CiAgICA8L3RyLXVpLWItdGFibGU+CiAgICAKICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2VsZWN0aW9uLXN1bW1hcnktdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgICN0YWJsZSB7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj4KICAgIDwvdHItdWktYi10YWJsZT4KICAgIAogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1yYWRpby1waWNrZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0KFt2ZXJ0aWNhbF0pICNjb250YWluZXIgewogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgfQogICAgOmhvc3QoOm5vdFt2ZXJ0aWNhbF0pICNjb250YWluZXIgewogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQogICAgI2NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjY29udGFpbmVyID4gZGl2IHsKICAgICAgcGFkZGluZy1sZWZ0OiAxZW07CiAgICAgIHBhZGRpbmctYm90dG9tOiAwLjVlbTsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1icmVha2Rvd24tc3BhbiI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgfQogICAgI3RhYmxlX2NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgfQogICAgI3RhYmxlIHsKICAgICAgbWF4LWhlaWdodDogMTUwcHg7CiAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImVtcHR5Ij4oZW1wdHkpPC9kaXY+CiAgICA8ZGl2IGlkPSJ0YWJsZV9jb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJjb250YWluZXIiPjwvZGl2PgogICAgICA8c3Bhbj4KICAgICAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWNvbGxlY3RlZC1yZWxhdGVkLWV2ZW50LXNldC1zcGFuIj4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWRhdGUtcmFuZ2Utc3BhbiI+CiAgPHRlbXBsYXRlPgogICAgPGNvbnRlbnQ+PC9jb250ZW50PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1nZW5lcmljLXNldC1zcGFuIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGEgewogICAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDx0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcgaWQ9ImdlbmVyaWMiPjwvdHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3PgoKICAgIDxkaXYgaWQ9ImxpbmtzIj48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktcmVsYXRlZC1ldmVudC1zZXQtc3BhbiI+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1zY2FsYXItZGlhZ25vc3RpYy1zcGFuIj4KICA8dGVtcGxhdGU+CiAgICA8dHItdi11aS1zY2FsYXItc3BhbiBpZD0ic2NhbGFyIj48L3RyLXYtdWktc2NhbGFyLXNwYW4+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLXVubWVyZ2VhYmxlLWRpYWdub3N0aWMtc2V0LXNwYW4iPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1zY2FsYXItbWFwLXRhYmxlIj4KICA8dGVtcGxhdGU+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNwYW4iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICNjb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWJldHdlZW47CiAgICB9CiAgICAjY2hhcnQgewogICAgICBmbGV4LWdyb3c6IDE7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICAjZHJhZ19oYW5kbGUsICNkaWFnbm9zdGljc190YWJfdGVtcGxhdGVzIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgICNjaGFydCBzdmcgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KICAgICNzdGF0c19jb250YWluZXIgewogICAgICBvdmVyZmxvdy15OiBhdXRvOwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJjb250YWluZXIiPgogICAgICA8ZGl2IGlkPSJjaGFydCI+PC9kaXY+CiAgICAgIDxkaXYgaWQ9InN0YXRzX2NvbnRhaW5lciI+CiAgICAgICAgPHRyLXYtdWktc2NhbGFyLW1hcC10YWJsZSBpZD0ic3RhdHMiPjwvdHItdi11aS1zY2FsYXItbWFwLXRhYmxlPgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgogICAgPHRyLXVpLWItZHJhZy1oYW5kbGUgaWQ9ImRyYWdfaGFuZGxlIj48L3RyLXVpLWItZHJhZy1oYW5kbGU+CgogICAgPHRyLXVpLWItdGFiLXZpZXcgaWQ9ImRpYWdub3N0aWNzIj48L3RyLXVpLWItdGFiLXZpZXc+CgogICAgPGRpdiBpZD0iZGlhZ25vc3RpY3NfdGFiX3RlbXBsYXRlcyI+CiAgICAgIDx0ci12LXVpLWRpYWdub3N0aWMtbWFwLXRhYmxlIGlkPSJtZXRyaWNfZGlhZ25vc3RpY3MiPjwvdHItdi11aS1kaWFnbm9zdGljLW1hcC10YWJsZT4KCiAgICAgIDx0ci12LXVpLWRpYWdub3N0aWMtbWFwLXRhYmxlIGlkPSJtZXRhZGF0YV9kaWFnbm9zdGljcyI+PC90ci12LXVpLWRpYWdub3N0aWMtbWFwLXRhYmxlPgoKICAgICAgPGRpdiBpZD0ic2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lciI+CiAgICAgICAgPGRpdiBpZD0ibWVyZ2Vfc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lciI+CiAgICAgICAgICA8aW5wdXQgY2hlY2tlZD0iIiBpZD0ibWVyZ2Vfc2FtcGxlX2RpYWdub3N0aWNzIiBvbi1jaGFuZ2U9InVwZGF0ZURpYWdub3N0aWNzXyIgdHlwZT0iY2hlY2tib3giLz4KICAgICAgICAgIDxsYWJlbCBmb3I9Im1lcmdlX3NhbXBsZV9kaWFnbm9zdGljcyI+TWVyZ2UgU2FtcGxlIERpYWdub3N0aWNzPC9sYWJlbD4KICAgICAgICA8L2Rpdj4KICAgICAgICA8dHItdi11aS1kaWFnbm9zdGljLW1hcC10YWJsZSBpZD0ic2FtcGxlX2RpYWdub3N0aWNzIj48L3RyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGU+CiAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgfQogICAgI2NvbnRlbnQgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICBmbGV4OiAwIDEgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIH0KICAgICNjb250ZW50ID4gKiB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgfQogICAgI2hpc3RvZ3JhbUNvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CgogICAgdHItdWktYS1tdWx0aS1ldmVudC1zdW1tYXJ5LXRhYmxlIHsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICNhYWE7CiAgICB9CgogICAgdHItdWktYS1zZWxlY3Rpb24tc3VtbWFyeS10YWJsZSAgewogICAgICBtYXJnaW4tdG9wOiAxLjI1ZW07CiAgICAgIGJvcmRlci10b3A6IDFweCBzb2xpZCAjYWFhOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZWVlOwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgbWFyZ2luLWJvdHRvbTogMS4yNWVtOwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgI2FhYTsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij4KICAgICAgPHRyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZSBpZD0iZXZlbnRTdW1tYXJ5VGFibGUiPgogICAgICA8L3RyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZT4KICAgICAgPHRyLXVpLWEtc2VsZWN0aW9uLXN1bW1hcnktdGFibGUgaWQ9InNlbGVjdGlvblN1bW1hcnlUYWJsZSI+CiAgICAgIDwvdHItdWktYS1zZWxlY3Rpb24tc3VtbWFyeS10YWJsZT4KICAgICAgPHRyLXVpLWItcmFkaW8tcGlja2VyIGlkPSJyYWRpb1BpY2tlciI+CiAgICAgIDwvdHItdWktYi1yYWRpby1waWNrZXI+CiAgICAgIDxkaXYgaWQ9Imhpc3RvZ3JhbUNvbnRhaW5lciI+CiAgICAgICAgPHRyLXYtdWktaGlzdG9ncmFtLXNwYW4gaWQ9Imhpc3RvZ3JhbVNwYW4iPgogICAgICAgIDwvdHItdi11aS1oaXN0b2dyYW0tc3Bhbj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtcmVsYXRlZC1ldmVudHMiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KICAgICN0YWJsZSB7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBhbGlnbi1zZWxmOiBzdHJldGNoOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLWFzeW5jLXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICB9CiAgICAjZXZlbnRzIHsKICAgICAgbWFyZ2luLWxlZnQ6IDhweDsKICAgICAgZmxleDogMCAxIDIwMHB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDx0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXc+CiAgICAgIDxkaXYgaWQ9ImV2ZW50cyI+CiAgICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPjwvdHItdWktYS1yZWxhdGVkLWV2ZW50cz4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktY3B1LXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjY29udGVudCB7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXc+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLWZsb3ctZXZlbnQtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1pbnN0YW50LWV2ZW50LXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGJsb2NrOwogICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImNvbnRlbnQiPjwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS1vYmplY3Qtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJjb250ZW50Ij48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWZyYW1lLXBvd2VyLXVzYWdlLWNoYXJ0Ij4KICA8dGVtcGxhdGU+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGUiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIHRyLXVpLWItdGFibGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLXBvd2VyLXNhbXBsZS1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQogICAgI3RhYmxlcyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIHdpZHRoOiA1MCU7CiAgICB9CiAgICAjY2hhcnQgewogICAgICB3aWR0aDogNTAlOwogICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9InRhYmxlcyI+CiAgICAgIDx0ci11aS1hLXBvd2VyLXNhbXBsZS1zdW1tYXJ5LXRhYmxlIGlkPSJzdW1tYXJ5VGFibGUiPgogICAgICA8L3RyLXVpLWEtcG93ZXItc2FtcGxlLXN1bW1hcnktdGFibGU+CiAgICA8L2Rpdj4KICAgIDx0ci11aS1hLWZyYW1lLXBvd2VyLXVzYWdlLWNoYXJ0IGlkPSJjaGFydCI+CiAgICA8L3RyLXVpLWEtZnJhbWUtcG93ZXItdXNhZ2UtY2hhcnQ+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLW11bHRpLXNhbXBsZS1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgeyBkaXNwbGF5OiBibG9jazsgfQogICAgI2NvbnRyb2wgewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiAjZTZlNmU2OwogICAgICBiYWNrZ3JvdW5kLWltYWdlOiAtd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAwIDEwMCUsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnJvbSgjRTVFNUU1KSwgdG8oI0QxRDFEMSkpOwogICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgb3ZlcmZsb3cteDogYXV0bzsKICAgIH0KICAgICNjb250cm9sOjotd2Via2l0LXNjcm9sbGJhciB7IGhlaWdodDogMHB4OyB9CiAgICAjY29udHJvbCB7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIG1hcmdpbjogMXB4OwogICAgICBtYXJnaW4tcmlnaHQ6IDJweDsKICAgIH0KICAgIHRyLXVpLWItdGFibGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iY29udHJvbCI+CiAgICAgIFNhbXBsZSBWaWV3IE9wdGlvbgogICAgPC9kaXY+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPgogICAgPC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1tdWx0aS10aHJlYWQtc2xpY2Utc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgICNjb250ZW50IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KICAgICNjb250ZW50ID4gdHItdWktYS1yZWxhdGVkLWV2ZW50cyB7CiAgICAgIG1hcmdpbi1sZWZ0OiA4cHg7CiAgICAgIGZsZXg6IDAgMSAyMDBweDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJjb250ZW50Ij48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktdGhyZWFkLXRpbWUtc2xpY2Utc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgICNjb250ZW50IHsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIG1pbi13aWR0aDogMDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldyBpZD0iY29udGVudCI+PC90ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgI3RhYmxlIHsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtbXVsdGktdXNlci1leHBlY3RhdGlvbi1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgIH0KICAgICNldmVudHMgewogICAgICBtYXJnaW4tbGVmdDogOHB4OwogICAgICBmbGV4OiAwIDEgMjAwcHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXcgaWQ9InJlYWxWaWV3Ij48L3RyLXVpLWEtbXVsdGktZXZlbnQtc3ViLXZpZXc+CiAgICA8ZGl2IGlkPSJldmVudHMiPgogICAgICA8dHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZSBpZD0icmVsYXRlZFNhbXBsZXMiPjwvdHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZT4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtYXN5bmMtc2xpY2Utc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgIH0KICAgICNldmVudHMgewogICAgICBkaXNwbGF5OmZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3PgogICAgPGRpdiBpZD0iZXZlbnRzIj4KICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPjwvdHItdWktYS1yZWxhdGVkLWV2ZW50cz4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtY3B1LXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICB0YWJsZSB7CiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIGJvcmRlci13aWR0aDogMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgdGFibGUgdHIgPiB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgfQoKICAgIHRhYmxlIHRyID4gdGQgewogICAgICBwYWRkaW5nOiAycHggNHB4IDJweCA0cHg7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgICAgd2lkdGg6IDE1MHB4OwogICAgfQoKICAgIHRhYmxlIHRkIHRkIHsKICAgICAgcGFkZGluZzogMCAwIDAgMDsKICAgICAgd2lkdGg6IGF1dG87CiAgICB9CiAgICB0ciB7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICB9CgogICAgdHI6bnRoLWNoaWxkKDJuKzApIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGFibGU+CiAgICAgIDx0Ym9keT48dHI+CiAgICAgICAgPHRkPlJ1bm5pbmcgcHJvY2Vzczo8L3RkPjx0ZCBpZD0icHJvY2Vzcy1uYW1lIj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPlJ1bm5pbmcgdGhyZWFkOjwvdGQ+PHRkIGlkPSJ0aHJlYWQtbmFtZSI+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5TdGFydDo8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJzdGFydCI+CiAgICAgICAgICA8L3RyLXYtdWktc2NhbGFyLXNwYW4+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5EdXJhdGlvbjo8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJkdXJhdGlvbiI+CiAgICAgICAgICA8L3RyLXYtdWktc2NhbGFyLXNwYW4+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5BY3RpdmUgc2xpY2VzOjwvdGQ+PHRkIGlkPSJydW5uaW5nLXRocmVhZCI+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5BcmdzOjwvdGQ+CiAgICAgICAgPHRkPgogICAgICAgICAgPHRyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldyBpZD0iYXJncyI+CiAgICAgICAgICA8L3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldz4KICAgICAgICA8L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT48L3RhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtZmxvdy1ldmVudC1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYS1zaW5nbGUtZXZlbnQtc3ViLXZpZXcgaWQ9InNpbmdsZUV2ZW50U3ViVmlldyI+CiAgICA8L3RyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtZnJhbWUtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KICAgICNhc3YgewogICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogc3RyZXRjaDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYS1hbGVydC1zdWItdmlldyBpZD0iYXN2Ij4KICAgIDwvdHItdWktYS1hbGVydC1zdWItdmlldz4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2luZ2xlLWluc3RhbnQtZXZlbnQtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1vYmplY3QtaW5zdGFuY2Utc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICB9CgogICAgI3NuYXBzaG90cyA+ICogewogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAqIHsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKICAgIH0KCiAgICAudGl0bGUgewogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgcmdiKDEyOCwgMTI4LCAxMjgpOwogICAgICBmb250LXNpemU6IDExMCU7CiAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgfQoKICAgIHRkLCB0aCB7CiAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPGRpdiBpZD0iY29udGVudCI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1vYmplY3Qtc25hcHNob3Qtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICNhcmdzIHsKICAgICAgd2hpdGUtc3BhY2U6IHByZTsKICAgIH0KCiAgICA6aG9zdCB7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgfQoKICAgIDo6Y29udGVudCAqIHsKICAgICAgLXdlYmtpdC11c2VyLXNlbGVjdDogdGV4dDsKICAgIH0KCiAgICA6OmNvbnRlbnQgLnRpdGxlIHsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkIHJnYigxMjgsIDEyOCwgMTI4KTsKICAgICAgZm9udC1zaXplOiAxMTAlOwogICAgICBmb250LXdlaWdodDogYm9sZDsKICAgIH0KCiAgICA6OmNvbnRlbnQgdGQsIHRoIHsKICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c2xvdD48L3Nsb3Q+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXBvd2VyLXNhbXBsZS10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWItdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItdGFibGU+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLXNpbmdsZS1wb3dlci1zYW1wbGUtc3ViLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsgZGlzcGxheTogYmxvY2s7IH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYS1wb3dlci1zYW1wbGUtdGFibGUgaWQ9InNhbXBsZXNUYWJsZSI+CiAgICA8L3RyLXVpLWEtcG93ZXItc2FtcGxlLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtc2FtcGxlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZvbnQtc2l6ZTogMTJweDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYi10YWJsZSBpZD0iY29udGVudCI+PC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICB9CiAgICAjZXZlbnRzIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgIH0KCiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3IGlkPSJjb250ZW50Ij48L3RyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3PgogICAgPGRpdiBpZD0iZXZlbnRzIj4KICAgICAgPHRyLXVpLWEtcmVsYXRlZC1ldmVudHMgaWQ9InJlbGF0ZWRFdmVudHMiPgogICAgICA8L3RyLXVpLWEtcmVsYXRlZC1ldmVudHM+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWEtc2luZ2xlLXRocmVhZC10aW1lLXNsaWNlLXN1Yi12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICB0YWJsZSB7CiAgICAgIGJvcmRlci1jb2xsYXBzZTogY29sbGFwc2U7CiAgICAgIGJvcmRlci13aWR0aDogMDsKICAgICAgbWFyZ2luLWJvdHRvbTogMjVweDsKICAgICAgd2lkdGg6IDEwMCU7CiAgICB9CgogICAgdGFibGUgdHIgPiB0ZDpmaXJzdC1jaGlsZCB7CiAgICAgIHBhZGRpbmctbGVmdDogMnB4OwogICAgfQoKICAgIHRhYmxlIHRyID4gdGQgewogICAgICBwYWRkaW5nOiAycHggNHB4IDJweCA0cHg7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0ZXh0LXRvcDsKICAgICAgd2lkdGg6IDE1MHB4OwogICAgfQoKICAgIHRhYmxlIHRkIHRkIHsKICAgICAgcGFkZGluZzogMCAwIDAgMDsKICAgICAgd2lkdGg6IGF1dG87CiAgICB9CiAgICB0ciB7CiAgICAgIHZlcnRpY2FsLWFsaWduOiB0b3A7CiAgICB9CgogICAgdHI6bnRoLWNoaWxkKDJuKzApIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2UyZTJlMjsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dGFibGU+CiAgICAgIDx0Ym9keT48dHI+CiAgICAgICAgPHRkPlJ1bm5pbmcgcHJvY2Vzczo8L3RkPjx0ZCBpZD0icHJvY2Vzcy1uYW1lIj48L3RkPgogICAgICA8L3RyPgogICAgICA8dHI+CiAgICAgICAgPHRkPlJ1bm5pbmcgdGhyZWFkOjwvdGQ+PHRkIGlkPSJ0aHJlYWQtbmFtZSI+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5TdGF0ZTo8L3RkPgogICAgICAgIDx0ZD48Yj48c3BhbiBpZD0ic3RhdGUiPjwvc3Bhbj48L2I+PC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5TdGFydDo8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJzdGFydCI+CiAgICAgICAgICA8L3RyLXYtdWktc2NhbGFyLXNwYW4+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KICAgICAgPHRyPgogICAgICAgIDx0ZD5EdXJhdGlvbjo8L3RkPgogICAgICAgIDx0ZD4KICAgICAgICAgIDx0ci12LXVpLXNjYWxhci1zcGFuIGlkPSJkdXJhdGlvbiI+CiAgICAgICAgICA8L3RyLXYtdWktc2NhbGFyLXNwYW4+CiAgICAgICAgPC90ZD4KICAgICAgPC90cj4KCiAgICAgIDx0cj4KICAgICAgICA8dGQ+T24gQ1BVOjwvdGQ+PHRkIGlkPSJvbi1jcHUiPjwvdGQ+CiAgICAgIDwvdHI+CgogICAgICA8dHI+CiAgICAgICAgPHRkPlJ1bm5pbmcgaW5zdGVhZDo8L3RkPjx0ZCBpZD0icnVubmluZy1pbnN0ZWFkIj48L3RkPgogICAgICA8L3RyPgoKICAgICAgPHRyPgogICAgICAgIDx0ZD5BcmdzOjwvdGQ+PHRkIGlkPSJhcmdzIj48L3RkPgogICAgICA8L3RyPgogICAgPC90Ym9keT48L3RhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYS1zaW5nbGUtdXNlci1leHBlY3RhdGlvbi1zdWItdmlldyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQogICAgI2V2ZW50cyB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICB9CiAgICA8L3N0eWxlPgogICAgPHRyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3IGlkPSJyZWFsVmlldyI+PC90ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldz4KICAgIDxkaXYgaWQ9ImV2ZW50cyI+CiAgICAgIDx0ci11aS1hLXVzZXItZXhwZWN0YXRpb24tcmVsYXRlZC1zYW1wbGVzLXRhYmxlIGlkPSJyZWxhdGVkU2FtcGxlcyI+PC90ci11aS1hLXVzZXItZXhwZWN0YXRpb24tcmVsYXRlZC1zYW1wbGVzLXRhYmxlPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1hLWFuYWx5c2lzLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgICBoZWlnaHQ6IDI3NXB4OwogICAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgICB9CgogICAgICA6aG9zdCgudGFsbC1tb2RlKSB7CiAgICAgICAgaGVpZ2h0OiA1MjVweDsKICAgICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItZHJvcGRvd24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIGJ1dHRvbiB7CiAgICAgIEBhcHBseSAtLWRyb3Bkb3duLWJ1dHRvbjsKICAgIH0KICAgIGJ1dHRvbi5vcGVuIHsKICAgICAgQGFwcGx5IC0tZHJvcGRvd24tYnV0dG9uLW9wZW47CiAgICB9CiAgICBkaWFsb2cgewogICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgIG1hcmdpbjogMDsKICAgICAgcGFkZGluZzogMWVtOwogICAgICBib3JkZXI6IDFweCBzb2xpZCBkYXJrZ3JleTsKICAgICAgQGFwcGx5IC0tZHJvcGRvd24tZGlhbG9nOwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8YnV0dG9uIGlkPSJidXR0b24iIG9uLXRhcD0ib3BlbiI+W1tsYWJlbF1dPC9idXR0b24+CgogICAgPGRpYWxvZyBpZD0iZGlhbG9nIiBvbi1jYW5jZWw9ImNsb3NlIiBvbi10YXA9Im9uRGlhbG9nVGFwXyI+CiAgICAgIDxzbG90Pjwvc2xvdD4KICAgIDwvZGlhbG9nPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1pbmZvLWJhci1ncm91cCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJtZXNzYWdlcyI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLXRvb2xiYXItYnV0dG9uIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNmOGY4Zjg7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgY29sb3I6IHJnYmEoMCwwLDAsMC44KTsKICAgICAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7CiAgICAgIGFsaWduLXNlbGY6IHN0cmV0Y2g7CiAgICAgIG1pbi13aWR0aDogMjNweDsKICAgIH0KCiAgICA6aG9zdCg6aG92ZXIpIHsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogcmdiYSgyNTUsIDI1NSwgMjU1LCAxLjApOwogICAgICBib3JkZXItY29sb3I6IHJnYmEoMCwgMCwgMCwgMC44KTsKICAgICAgYm94LXNoYWRvdzogMCAwIC4wNWVtIHJnYmEoMCwgMCwgMCwgMC40KTsKICAgICAgY29sb3I6IHJnYmEoMCwgMCwgMCwgMSk7CiAgICB9CgogICAgI2FsaWduZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4OiAwIDAgYXV0bzsKICAgICAgYWxpZ24tc2VsZjogY2VudGVyOwogICAgfQogICAgPC9zdHlsZT4KICAgIDxkaXYgaWQ9ImFsaWduZXIiPgogICAgICA8c2xvdD48L3Nsb3Q+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PHN0eWxlPgouZHJhd2luZy1jb250YWluZXJ7ZGlzcGxheTppbmxpbmU7b3ZlcmZsb3c6YXV0bztvdmVyZmxvdy14OmhpZGRlbjtwb3NpdGlvbjpyZWxhdGl2ZX0uZHJhd2luZy1jb250YWluZXItY2FudmFze2Rpc3BsYXk6YmxvY2s7cG9pbnRlci1ldmVudHM6bm9uZTtwb3NpdGlvbjphYnNvbHV0ZTt0b3A6MH0KPC9zdHlsZT48c3R5bGU+Ci5sZXR0ZXItZG90LXRyYWNrIHsKICBoZWlnaHQ6IDE4cHg7Cn0KPC9zdHlsZT48c3R5bGU+Ci5jaGFydC10cmFjayB7CiAgaGVpZ2h0OiAzMHB4OwogIHBvc2l0aW9uOiByZWxhdGl2ZTsKfQo8L3N0eWxlPjxzdHlsZT4KLmNwdS11c2FnZS10cmFjayB7CiAgaGVpZ2h0OiA5MHB4Owp9Cjwvc3R5bGU+PHN0eWxlPgoucG93ZXItc2VyaWVzLXRyYWNrIHsKICBoZWlnaHQ6IDkwcHg7Cn0KPC9zdHlsZT48c3R5bGU+Ci5zcGFjaW5nLXRyYWNre2hlaWdodDo0cHh9Cjwvc3R5bGU+PHN0eWxlPgoucmVjdC10cmFja3toZWlnaHQ6MThweH0KPC9zdHlsZT48c3R5bGU+Ci50aHJlYWQtdHJhY2t7ZmxleC1kaXJlY3Rpb246Y29sdW1uO2Rpc3BsYXk6ZmxleDtwb3NpdGlvbjpyZWxhdGl2ZX0KPC9zdHlsZT48c3R5bGU+Ci5wcm9jZXNzLXRyYWNrLWhlYWRlcntkaXNwbGF5OmZsZXg7ZmxleDowIDAgYXV0bztiYWNrZ3JvdW5kLWltYWdlOi13ZWJraXQtZ3JhZGllbnQobGluZWFyLDAgMCwxMDAlIDAsZnJvbSgjRTVFNUU1KSx0bygjRDFEMUQxKSk7Ym9yZGVyLWJvdHRvbToxcHggc29saWQgIzhlOGU4ZTtib3JkZXItdG9wOjFweCBzb2xpZCB3aGl0ZTtmb250LXNpemU6NzUlfS5wcm9jZXNzLXRyYWNrLW5hbWV7ZmxleC1ncm93OjF9LnByb2Nlc3MtdHJhY2stbmFtZTpiZWZvcmV7Y29udGVudDonXDI1QjgnO3BhZGRpbmc6MCA1cHh9LnByb2Nlc3MtdHJhY2stYmFzZS5leHBhbmRlZCAucHJvY2Vzcy10cmFjay1uYW1lOmJlZm9yZXtjb250ZW50OidcMjVCRSd9LnByb2Nlc3MtdHJhY2stY2xvc2V7Y29sb3I6YmxhY2s7Ym9yZGVyOjFweCBzb2xpZCB0cmFuc3BhcmVudDtwYWRkaW5nOjBweCAycHh9LnByb2Nlc3MtdHJhY2stY2xvc2U6aG92ZXJ7Ym9yZGVyOjFweCBzb2xpZCBncmV5fQo8L3N0eWxlPjxzdHlsZT4KLm1vZGVsLXRyYWNrIHsKICBmbGV4LWdyb3c6IDE7Cn0KPC9zdHlsZT48c3R5bGU+Ci54LWF4aXMtdHJhY2sgewogIGhlaWdodDogMTJweDsKfQoKLngtYXhpcy10cmFjay50YWxsLW1vZGUgewogIGhlaWdodDogMzBweDsKfQo8L3N0eWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS10aW1lbGluZS10cmFjay12aWV3Ij4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIHBvc2l0aW9uOiByZWxhdGl2ZTsKICAgIH0KCiAgICA6aG9zdCA6OmNvbnRlbnQgKiB7CiAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgIH0KCiAgICAjZHJhZ19ib3ggewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDI1NSwgMC4yNSk7CiAgICAgIGJvcmRlcjogMXB4IHNvbGlkIHJnYigwLCAwLCA5Nik7CiAgICAgIGZvbnQtc2l6ZTogNzUlOwogICAgICBwb3NpdGlvbjogZml4ZWQ7CiAgICB9CgogICAgI2hpbnRfdGV4dCB7CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgYm90dG9tOiA2cHg7CiAgICAgIHJpZ2h0OiA2cHg7CiAgICAgIGZvbnQtc2l6ZTogOHB0OwogICAgfQogICAgPC9zdHlsZT4KICAgIDxzbG90Pjwvc2xvdD4KCiAgICA8ZGl2IGlkPSJkcmFnX2JveCI+PC9kaXY+CiAgICA8ZGl2IGlkPSJoaW50X3RleHQiPjwvZGl2PgoKICAgIDx0di11aS1iLWhvdGtleS1jb250cm9sbGVyIGlkPSJob3RrZXlfY29udHJvbGxlciI+CiAgICA8L3R2LXVpLWItaG90a2V5LWNvbnRyb2xsZXI+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1maW5kLWNvbnRyb2wiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgOmhvc3QgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IG5vbmU7CiAgICAgICAgZGlzcGxheTogZmxleDsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIH0KICAgICAgaW5wdXQgewogICAgICAgIC13ZWJraXQtdXNlci1zZWxlY3Q6IGF1dG87CiAgICAgICAgYmFja2dyb3VuZC1jb2xvcjogI2Y4ZjhmODsKICAgICAgICBib3JkZXI6IDFweCBzb2xpZCByZ2JhKDAsIDAsIDAsIDAuNSk7CiAgICAgICAgYm94LXNpemluZzogYm9yZGVyLWJveDsKICAgICAgICBtYXJnaW46IDA7CiAgICAgICAgcGFkZGluZzogMDsKICAgICAgICB3aWR0aDogMTcwcHg7CiAgICAgIH0KICAgICAgaW5wdXQ6Zm9jdXMgewogICAgICAgIGJhY2tncm91bmQtY29sb3I6IHdoaXRlOwogICAgICB9CiAgICAgIHRyLXVpLWItdG9vbGJhci1idXR0b24gewogICAgICAgIGJvcmRlci1sZWZ0OiBub25lOwogICAgICAgIG1hcmdpbjogMDsKICAgICAgfQogICAgICAjaGl0Q291bnQgewogICAgICAgIGxlZnQ6IDA7CiAgICAgICAgb3BhY2l0eTogMC4yNTsKICAgICAgICBwb2ludGVyLWV2ZW50czogbm9uZTsKICAgICAgICBwb3NpdGlvbjogYWJzb2x1dGU7CiAgICAgICAgdGV4dC1hbGlnbjogcmlnaHQ7CiAgICAgICAgdG9wOiAycHg7CiAgICAgICAgd2lkdGg6IDE2N3B4OwogICAgICAgIHotaW5kZXg6IDE7CiAgICAgIH0KICAgICAgI3NwaW5uZXIgewogICAgICAgIHZpc2liaWxpdHk6IGhpZGRlbjsKICAgICAgICB3aWR0aDogOHB4OwogICAgICAgIGhlaWdodDogOHB4OwogICAgICAgIGxlZnQ6IDE1NHB4OwogICAgICAgIHBvaW50ZXItZXZlbnRzOiBub25lOwogICAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgICB0b3A6IDRweDsKICAgICAgICB6LWluZGV4OiAxOwoKICAgICAgICBib3JkZXI6IDJweCBzb2xpZCB0cmFuc3BhcmVudDsKICAgICAgICBib3JkZXItYm90dG9tOiAycHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICAgIGJvcmRlci1yaWdodDogMnB4IHNvbGlkIHJnYmEoMCwgMCwgMCwgMC41KTsKICAgICAgICBib3JkZXItcmFkaXVzOiA1MCU7CiAgICAgIH0KICAgICAgQGtleWZyYW1lcyBzcGluIHsgMTAwJSB7IHRyYW5zZm9ybTogcm90YXRlKDM2MGRlZyk7IH0gfQogICAgPC9zdHlsZT4KCiAgICA8aW5wdXQgaWQ9ImZpbHRlciIgb24tYmx1cj0iZmlsdGVyQmx1ciIgb24tZm9jdXM9ImZpbHRlckZvY3VzIiBvbi1pbnB1dD0iZmlsdGVyVGV4dENoYW5nZWQiIG9uLWtleWRvd249ImZpbHRlcktleURvd24iIG9uLW1vdXNldXA9ImZpbHRlck1vdXNlVXAiIHR5cGU9InRleHQiLz4KICAgIDxkaXYgaWQ9InNwaW5uZXIiPjwvZGl2PgogICAgPHRyLXVpLWItdG9vbGJhci1idXR0b24gb24tY2xpY2s9ImZpbmRQcmV2aW91cyI+CiAgICAgIOKGkAogICAgPC90ci11aS1iLXRvb2xiYXItYnV0dG9uPgogICAgPHRyLXVpLWItdG9vbGJhci1idXR0b24gb24tY2xpY2s9ImZpbmROZXh0Ij4KICAgICAg4oaSCiAgICA8L3RyLXVpLWItdG9vbGJhci1idXR0b24+CiAgICA8ZGl2IGlkPSJoaXRDb3VudCI+MCBvZiAwPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1zY3JpcHRpbmctY29udHJvbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgICA6aG9zdCB7CiAgICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIH0KICAgICAgLnJvb3QgewogICAgICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7CiAgICAgICAgY3Vyc29yOiB0ZXh0OwoKICAgICAgICBwYWRkaW5nOiAycHg7CiAgICAgICAgbWFyZ2luOiAycHg7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwoKICAgICAgICBoZWlnaHQ6IDEwMHB4OwogICAgICAgIG92ZXJmbG93LXk6IGF1dG87CgogICAgICAgIHRyYW5zaXRpb24tcHJvcGVydHk6IG9wYWNpdHksIGhlaWdodCwgcGFkZGluZywgbWFyZ2luOwogICAgICAgIHRyYW5zaXRpb24tZHVyYXRpb246IC4yczsKICAgICAgICB0cmFuc2l0aW9uLXRpbWluZy1mdW5jdGlvbjogZWFzZS1vdXQ7CiAgICAgIH0KICAgICAgLmhpZGRlbiB7CiAgICAgICAgbWFyZ2luLXRvcDogMHB4OwogICAgICAgIG1hcmdpbi1ib3R0b206IDBweDsKICAgICAgICBwYWRkaW5nLXRvcDogMHB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiAwcHg7CiAgICAgICAgaGVpZ2h0OiAwcHg7CiAgICAgICAgb3BhY2l0eTogMDsKICAgICAgfQogICAgICAuZm9jdXNlZCB7CiAgICAgICAgb3V0bGluZTogYXV0byA1cHggLXdlYmtpdC1mb2N1cy1yaW5nLWNvbG9yOwogICAgICB9CiAgICAgICNoaXN0b3J5IHsKICAgICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiB0ZXh0OwogICAgICAgIGNvbG9yOiAjNzc3OwogICAgICB9CiAgICAgICNwcm9tcHRDb250YWluZXIgewogICAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIH0KICAgICAgI3Byb21wdE1hcmsgewogICAgICAgIHdpZHRoOiAxZW07CiAgICAgICAgY29sb3I6ICM0Njg7CiAgICAgIH0KICAgICAgI3Byb21wdCB7CiAgICAgICAgZmxleDogMTsKICAgICAgICB3aWR0aDogMTAwJTsKICAgICAgICBib3JkZXI6IG5vbmUgIWltcG9ydGFudDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiBpbmhlcml0ICFpbXBvcnRhbnQ7CiAgICAgICAgZm9udDogaW5oZXJpdCAhaW1wb3J0YW50OwogICAgICAgIHRleHQtb3ZlcmZsb3c6IGNsaXAgIWltcG9ydGFudDsKICAgICAgICB0ZXh0LWRlY29yYXRpb246IG5vbmUgIWltcG9ydGFudDsKICAgICAgfQogICAgICAjcHJvbXB0OmZvY3VzIHsKICAgICAgICBvdXRsaW5lOiBub25lOwogICAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgY2xhc3M9InJvb3QgaGlkZGVuIiBpZD0icm9vdCIgb24tZm9jdXM9Im9uQ29uc29sZUZvY3VzIiB0YWJpbmRleD0iMCI+CiAgICAgIDxkaXYgaWQ9Imhpc3RvcnkiPjwvZGl2PgogICAgICA8ZGl2IGlkPSJwcm9tcHRDb250YWluZXIiPgogICAgICAgIDxzcGFuIGlkPSJwcm9tcHRNYXJrIj4mZ3Q7PC9zcGFuPgogICAgICAgIDxpbnB1dCBpZD0icHJvbXB0IiBvbi1ibHVyPSJvbkNvbnNvbGVCbHVyIiBvbi1rZXlkb3duPSJwcm9tcHRLZXlEb3duIiBvbi1rZXlwcmVzcz0icHJvbXB0S2V5UHJlc3MiIHR5cGU9InRleHQiLz4KICAgICAgIDwvZGl2PgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1zaWRlLXBhbmVsLWNvbnRhaW5lciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBhbGlnbi1pdGVtczogc3RyZXRjaDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgYmFja2dyb3VuZC1jb2xvcjogd2hpdGU7CiAgICB9CgogICAgOmhvc3QoW2V4cGFuZGVkXSkgPiAjc2lkZV9wYW5lbF9kcmFnX2hhbmRsZSwKICAgIDpob3N0KFtleHBhbmRlZF0pID4gYWN0aXZlLXBhbmVsLWNvbnRhaW5lciB7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBib3JkZXItbGVmdDogMXB4IHNvbGlkIGJsYWNrOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgfQoKICAgIDpob3N0KDpub3QoW2V4cGFuZGVkXSkpID4gI3NpZGVfcGFuZWxfZHJhZ19oYW5kbGUsCiAgICA6aG9zdCg6bm90KFtleHBhbmRlZF0pKSA+IGFjdGl2ZS1wYW5lbC1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgIGFjdGl2ZS1wYW5lbC1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgfQoKICAgIHRhYi1zdHJpcCB7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgICAtd2Via2l0LXVzZXItc2VsZWN0OiBub25lOwogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjM2LCAyMzYsIDIzNik7CiAgICAgIGJvcmRlci1sZWZ0OiAxcHggc29saWQgYmxhY2s7CiAgICAgIGN1cnNvcjogZGVmYXVsdDsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgbWluLXdpZHRoOiAxOHB4OyAvKiB3b3JrYXJvdW5kIGZvciBmbGV4Ym94IGFuZCB3cml0aW5nLW1vZGUgbWl4aW5nIGJ1ZyAqLwogICAgICBwYWRkaW5nOiAxMHB4IDAgMTBweCAwOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CgogICAgdGFiLXN0cmlwID4gdGFiLXN0cmlwLWxhYmVsIHsKICAgICAgZmxleC1zaHJpbms6IDA7CiAgICAgIC13ZWJraXQtd3JpdGluZy1tb2RlOiB2ZXJ0aWNhbC1ybDsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgICAgZGlzcGxheTogaW5saW5lOwogICAgICBtYXJnaW4tcmlnaHQ6IDFweDsKICAgICAgbWluLWhlaWdodDogMjBweDsKICAgICAgcGFkZGluZzogMTVweCAzcHggMTVweCAxcHg7CiAgICB9CgogICAgdGFiLXN0cmlwID4KICAgICAgICB0YWItc3RyaXAtbGFiZWw6bm90KFtlbmFibGVkXSkgewogICAgICBjb2xvcjogcmdiKDEyOCwgMTI4LCAxMjgpOwogICAgfQoKICAgIHRhYi1zdHJpcCA+IHRhYi1zdHJpcC1sYWJlbFtzZWxlY3RlZF0gewogICAgICBiYWNrZ3JvdW5kLWNvbG9yOiB3aGl0ZTsKICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiKDE2MywgMTYzLCAxNjMpOwogICAgICBib3JkZXItbGVmdDogbm9uZTsKICAgICAgcGFkZGluZzogMTRweCAycHggMTRweCAxcHg7CiAgICB9CgogICAgI2FjdGl2ZV9wYW5lbF9jb250YWluZXIgewogICAgICBvdmVyZmxvdzogYXV0bzsKICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHRyLXVpLWItZHJhZy1oYW5kbGUgaWQ9InNpZGVfcGFuZWxfZHJhZ19oYW5kbGUiPjwvdHItdWktYi1kcmFnLWhhbmRsZT4KICAgIDxhY3RpdmUtcGFuZWwtY29udGFpbmVyIGlkPSJhY3RpdmVfcGFuZWxfY29udGFpbmVyIj4KICAgIDwvYWN0aXZlLXBhbmVsLWNvbnRhaW5lcj4KICAgIDx0YWItc3RyaXAgaWQ9InRhYl9zdHJpcCI+PC90YWItc3RyaXA+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS10aW1lbGluZS12aWV3LWhlbHAtb3ZlcmxheSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgd2lkdGg6IDcwMHB4OwogICAgfQogICAgLmNvbHVtbiB7CiAgICAgIHdpZHRoOiA1MCU7CiAgICB9CiAgICBoMiB7CiAgICAgIGZvbnQtc2l6ZTogMS4yZW07CiAgICAgIG1hcmdpbjogMDsKICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgICB0ZXh0LWFsaWduOiBjZW50ZXI7CiAgICB9CiAgICBoMyB7CiAgICAgIG1hcmdpbjogMDsKICAgICAgbWFyZ2luLWxlZnQ6IDEyNnB4OwogICAgICBtYXJnaW4tdG9wOiAxMHB4OwogICAgfQogICAgLnBhaXIgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgIC5jb21tYW5kIHsKICAgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKICAgICAgbWFyZ2luLXJpZ2h0OiA1cHg7CiAgICAgIHRleHQtYWxpZ246IHJpZ2h0OwogICAgICB3aWR0aDogMTUwcHg7CiAgICB9CiAgICAuYWN0aW9uIHsKICAgICAgZm9udC1zaXplOiAwLjllbTsKICAgICAgdGV4dC1hbGlnbjogbGVmdDsKICAgICAgd2lkdGg6IDIwMHB4OwogICAgfQogICAgdHItdWktYi1tb3VzZS1tb2RlLWljb24gewogICAgICBib3JkZXI6IDFweCBzb2xpZCAjODg4OwogICAgICBib3JkZXItcmFkaXVzOiAzcHg7CiAgICAgIGJveC1zaGFkb3c6IGluc2V0IDAgMCAycHggcmdiYSgwLDAsMCwwLjMpOwogICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgIG1hcmdpbi1yaWdodDogMXB4OwogICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgIHRvcDogNHB4OwogICAgfQogICAgLm1vdXNlLW1vZGUtaWNvbi5wYW4tbW9kZSB7CiAgICAgIGJhY2tncm91bmQtcG9zaXRpb246IC0xcHggLTExcHg7CiAgICB9CiAgICAubW91c2UtbW9kZS1pY29uLnNlbGVjdC1tb2RlIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTFweCAtNDFweDsKICAgIH0KICAgIC5tb3VzZS1tb2RlLWljb24uem9vbS1tb2RlIHsKICAgICAgYmFja2dyb3VuZC1wb3NpdGlvbjogLTFweCAtNzFweDsKICAgIH0KICAgIC5tb3VzZS1tb2RlLWljb24udGltaW5nLW1vZGUgewogICAgICBiYWNrZ3JvdW5kLXBvc2l0aW9uOiAtMXB4IC0xMDFweDsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGNsYXNzPSJjb2x1bW4gbGVmdCI+CiAgICAgIDxoMj5OYXZpZ2F0aW9uPC9oMj4KICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+dy9zPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5ab29tIGluL291dCAoK3NoaWZ0OiBmYXN0ZXIpPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+YS9kPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5QYW4gbGVmdC9yaWdodCAoK3NoaWZ0OiBmYXN0ZXIpPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+4oaSL3NoaWZ0LVRBQjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2VsZWN0IHByZXZpb3VzIGV2ZW50PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+4oaQL1RBQjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2VsZWN0IG5leHQgZXZlbnQ8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8aDI+TW91c2UgQ29udHJvbHM8L2gyPgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5jbGljazwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2VsZWN0IGV2ZW50PC9kaXY+CiAgICAgIDwvZGl2PgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5hbHQtbW91c2V3aGVlbDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Wm9vbSBpbi9vdXQ8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8aDM+CiAgICAgICAgPHRyLXVpLWItbW91c2UtbW9kZS1pY29uIG1vZGUtbmFtZT0iU0VMRUNUSU9OIj48L3RyLXVpLWItbW91c2UtbW9kZS1pY29uPgogICAgICAgIFNlbGVjdCBtb2RlCiAgICAgIDwvaDM+CiAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmRyYWc8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPkJveCBzZWxlY3Q8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj48c3BhbiBjbGFzcz0ibW9kIj48L3NwYW4+LWNsaWNrL2RyYWc8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPkFkZCBldmVudHMgdG8gdGhlIGN1cnJlbnQgc2VsZWN0aW9uPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+ZG91YmxlIGNsaWNrPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZWxlY3QgYWxsIGV2ZW50cyB3aXRoIHNhbWUgdGl0bGU8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8aDM+CiAgICAgICAgPHRyLXVpLWItbW91c2UtbW9kZS1pY29uIG1vZGUtbmFtZT0iUEFOU0NBTiI+PC90ci11aS1iLW1vdXNlLW1vZGUtaWNvbj4KICAgICAgICBQYW4gbW9kZQogICAgICA8L2gzPgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5kcmFnPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5QYW4gdGhlIHZpZXc8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8aDM+CiAgICAgICAgPHRyLXVpLWItbW91c2UtbW9kZS1pY29uIG1vZGUtbmFtZT0iWk9PTSI+PC90ci11aS1iLW1vdXNlLW1vZGUtaWNvbj4KICAgICAgICBab29tIG1vZGUKICAgICAgPC9oMz4KICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+ZHJhZzwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Wm9vbSBpbi9vdXQgYnkgZHJhZ2dpbmcgdXAvZG93bjwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxoMz4KICAgICAgICA8dHItdWktYi1tb3VzZS1tb2RlLWljb24gbW9kZS1uYW1lPSJUSU1JTkciPjwvdHItdWktYi1tb3VzZS1tb2RlLWljb24+CiAgICAgICAgVGltaW5nIG1vZGUKICAgICAgPC9oMz4KICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+ZHJhZzwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Q3JlYXRlIG9yIG1vdmUgbWFya2VyczwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmRvdWJsZSBjbGljazwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2V0IG1hcmtlciByYW5nZSB0byBzbGljZTwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvZGl2PgoKICAgIDxkaXYgY2xhc3M9ImNvbHVtbiByaWdodCI+CiAgICAgIDxoMj5HZW5lcmFsPC9oMj4KICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+MS00PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5Td2l0Y2ggbW91c2UgbW9kZTwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnNoaWZ0PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5Ib2xkIGZvciB0ZW1wb3Jhcnkgc2VsZWN0PC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+c3BhY2U8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPkhvbGQgZm9yIHRlbXBvcmFyeSBwYW48L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj4vPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TZWFyY2g8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5lbnRlcjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U3RlcCB0aHJvdWdoIHNlYXJjaCByZXN1bHRzPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+ZjwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+Wm9vbSBpbnRvIHNlbGVjdGlvbjwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPnovMDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+UmVzZXQgem9vbSBhbmQgcGFuPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+Zy9HPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5Ub2dnbGUgNjBoeiBncmlkPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+djwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+SGlnaGxpZ2h0IFZTeW5jPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+aDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+VG9nZ2xlIGxvdy9oaWdoIGRldGFpbHM8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj5tPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5NYXJrIGN1cnJlbnQgc2VsZWN0aW9uPC9kaXY+CiAgICAgIDwvZGl2PgoKICAgICAgPGRpdiBjbGFzcz0icGFpciI+CiAgICAgICAgPGRpdiBjbGFzcz0iY29tbWFuZCI+cDwvZGl2PgogICAgICAgIDxkaXYgY2xhc3M9ImFjdGlvbiI+U2VsZWN0IHBvd2VyIHNhbXBsZXMgb3ZlciBjdXJyZW50IHNlbGVjdGlvbiBpbnRlcnZhbDwvZGl2PgogICAgICA8L2Rpdj4KCiAgICAgIDxkaXYgY2xhc3M9InBhaXIiPgogICAgICAgIDxkaXYgY2xhc3M9ImNvbW1hbmQiPmA8L2Rpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJhY3Rpb24iPlNob3cgb3IgaGlkZSB0aGUgc2NyaXB0aW5nIGNvbnNvbGU8L2Rpdj4KICAgICAgPC9kaXY+CgogICAgICA8ZGl2IGNsYXNzPSJwYWlyIj4KICAgICAgICA8ZGl2IGNsYXNzPSJjb21tYW5kIj4/PC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0iYWN0aW9uIj5TaG93IGhlbHA8L2Rpdj4KICAgICAgPC9kaXY+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXRpbWVsaW5lLXZpZXctbWV0YWRhdGEtb3ZlcmxheSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICB3aWR0aDogNzAwcHg7CgogICAgICBvdmVyZmxvdzogYXV0bzsKICAgIH0KICAgIDwvc3R5bGU+CiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPjwvdHItdWktYi10YWJsZT4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXRpbWVsaW5lLXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgY3Vyc29yOiBkZWZhdWx0OwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmb250LWZhbWlseTogc2Fucy1zZXJpZjsKICAgICAgcGFkZGluZzogMDsKICAgIH0KCiAgICAjY29udHJvbCB7CiAgICAgIGJhY2tncm91bmQtY29sb3I6ICNlNmU2ZTY7CiAgICAgIGJhY2tncm91bmQtaW1hZ2U6IC13ZWJraXQtZ3JhZGllbnQobGluZWFyLCAwIDAsIDAgMTAwJSwKICAgICAgICAgIGZyb20oI0U1RTVFNSksIHRvKCNEMUQxRDEpKTsKICAgICAgZmxleDogMCAwIGF1dG87CiAgICAgIG92ZXJmbG93LXg6IGF1dG87CiAgICB9CgogICAgI2NvbnRyb2w6Oi13ZWJraXQtc2Nyb2xsYmFyIHsgaGVpZ2h0OiAwcHg7IH0KCiAgICAjY29udHJvbCA+ICNiYXIgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIG1hcmdpbjogMXB4OwogICAgfQoKICAgICNjb250cm9sID4gI2JhciA+ICN0aXRsZSB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIHBhZGRpbmctbGVmdDogOHB4OwogICAgICBwYWRkaW5nLXJpZ2h0OiA4cHg7CiAgICAgIGZsZXg6IDEgMSBhdXRvOwogICAgICBvdmVyZmxvdzogaGlkZGVuOwogICAgICB3aGl0ZS1zcGFjZTogbm93cmFwOwogICAgfQoKICAgICNjb250cm9sID4gI2JhciA+ICNsZWZ0X2NvbnRyb2xzLAogICAgI2NvbnRyb2wgPiAjYmFyID4gI3JpZ2h0X2NvbnRyb2xzIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgICAgZmxleC1kaXJlY3Rpb246IHJvdzsKICAgICAgYWxpZ24taXRlbXM6IHN0cmV0Y2g7CiAgICAgIGZsZXgtc2hyaW5rOiAwOwogICAgfQoKICAgICNjb250cm9sID4gI2JhciA+ICNsZWZ0X2NvbnRyb2xzID4gKiB7IG1hcmdpbi1yaWdodDogMnB4OyB9CiAgICAjY29udHJvbCA+ICNiYXIgPiAjcmlnaHRfY29udHJvbHMgPiAqIHsgbWFyZ2luLWxlZnQ6IDJweDsgfQogICAgI2NvbnRyb2wgPiAjY29sbGFwc2luZ19jb250cm9scyB7IGRpc3BsYXk6IGZsZXg7IH0KCiAgICBtaWRkbGUtY29udGFpbmVyIHsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGJvcmRlci1ib3R0b206IDFweCBzb2xpZCAjOGU4ZThlOwogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBtaW4taGVpZ2h0OiAwOwogICAgfQoKICAgIG1pZGRsZS1jb250YWluZXIgOjpjb250ZW50IHRyYWNrLXZpZXctY29udGFpbmVyIHsKICAgICAgZmxleDogMSAxIGF1dG87CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIG1pbi1oZWlnaHQ6IDA7CiAgICAgIG1pbi13aWR0aDogMDsKICAgICAgb3ZlcmZsb3cteDogaGlkZGVuOwogICAgfQoKICAgIG1pZGRsZS1jb250YWluZXIgOjpjb250ZW50IHRyYWNrLXZpZXctY29udGFpbmVyID4gKiB7IGZsZXg6IDEgMSBhdXRvOyB9CiAgICBtaWRkbGUtY29udGFpbmVyID4geC10aW1lbGluZS12aWV3LXNpZGUtcGFuZWwtY29udGFpbmVyIHsgZmxleDogMCAwIGF1dG87IH0KICAgIHRyLXVpLWItZHJhZy1oYW5kbGUgeyBmbGV4OiAwIDAgYXV0bzsgfQogICAgdHItdWktYS1hbmFseXNpcy12aWV3IHsgZmxleDogMCAwIGF1dG87IH0KCiAgICB0ci11aS1iLWRyb3Bkb3duIHsKICAgICAgLS1kcm9wZG93bi1idXR0b246IHsKICAgICAgICAtd2Via2l0LWFwcGVhcmFuY2U6IG5vbmU7CiAgICAgICAgYWxpZ24taXRlbXM6IG5vcm1hbDsKICAgICAgICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2IoMjQ4LCAyNDgsIDI0OCk7CiAgICAgICAgYm9yZGVyOiAxcHggc29saWQgcmdiYSgwLCAwLCAwLCAwLjUpOwogICAgICAgIGJveC1zaXppbmc6IGNvbnRlbnQtYm94OwogICAgICAgIGNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOCk7CiAgICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgICAgIHBhZGRpbmc6IDJweCA1cHg7CiAgICAgIH0KICAgIH0KICAgIDwvc3R5bGU+CgogICAgPHR2LXVpLWItaG90a2V5LWNvbnRyb2xsZXIgaWQ9ImhrYyI+PC90di11aS1iLWhvdGtleS1jb250cm9sbGVyPgogICAgPGRpdiBpZD0iY29udHJvbCI+CiAgICAgIDxkaXYgaWQ9ImJhciI+CiAgICAgICAgPGRpdiBpZD0ibGVmdF9jb250cm9scyI+PC9kaXY+CiAgICAgICAgPGRpdiBpZD0idGl0bGUiPl5fXjwvZGl2PgogICAgICAgIDxkaXYgaWQ9InJpZ2h0X2NvbnRyb2xzIj4KICAgICAgICAgIDx0ci11aS1iLWRyb3Bkb3duIGlkPSJmbG93X2V2ZW50X2ZpbHRlcl9kcm9wZG93biIgbGFiZWw9IkZsb3cgZXZlbnRzIj48L3RyLXVpLWItZHJvcGRvd24+CiAgICAgICAgICA8dHItdWktYi1kcm9wZG93biBpZD0icHJvY2Vzc19maWx0ZXJfZHJvcGRvd24iIGxhYmVsPSJQcm9jZXNzZXMiPjwvdHItdWktYi1kcm9wZG93bj4KICAgICAgICAgIDx0ci11aS1iLXRvb2xiYXItYnV0dG9uIGlkPSJ2aWV3X21ldGFkYXRhX2J1dHRvbiI+CiAgICAgICAgICAgIE0KICAgICAgICAgIDwvdHItdWktYi10b29sYmFyLWJ1dHRvbj4KICAgICAgICAgIDx0ci11aS1iLWRyb3Bkb3duIGlkPSJ2aWV3X29wdGlvbnNfZHJvcGRvd24iIGxhYmVsPSJWaWV3IE9wdGlvbnMiPjwvdHItdWktYi1kcm9wZG93bj4KICAgICAgICAgIDx0ci11aS1maW5kLWNvbnRyb2wgaWQ9InZpZXdfZmluZF9jb250cm9sIj48L3RyLXVpLWZpbmQtY29udHJvbD4KICAgICAgICAgIDx0ci11aS1iLXRvb2xiYXItYnV0dG9uIGlkPSJ2aWV3X2NvbnNvbGVfYnV0dG9uIj4KICAgICAgICAgICAgwrsKICAgICAgICAgIDwvdHItdWktYi10b29sYmFyLWJ1dHRvbj4KICAgICAgICAgIDx0ci11aS1iLXRvb2xiYXItYnV0dG9uIGlkPSJ2aWV3X2hlbHBfYnV0dG9uIj4KICAgICAgICAgICAgPwogICAgICAgICAgPC90ci11aS1iLXRvb2xiYXItYnV0dG9uPgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgICAgPGRpdiBpZD0iY29sbGFwc2luZ19jb250cm9scyI+PC9kaXY+CiAgICAgIDx0ci11aS1iLWluZm8tYmFyLWdyb3VwIGlkPSJpbXBvcnQtd2FybmluZ3MiPgogICAgICA8L3RyLXVpLWItaW5mby1iYXItZ3JvdXA+CiAgICAgIDx0ci11aS1iLWluZm8tYmFyLWdyb3VwIGlkPSJwb2x5ZmlsbC13YXJuaW5nIj4KICAgICAgPC90ci11aS1iLWluZm8tYmFyLWdyb3VwPgogICAgPC9kaXY+CiAgICA8bWlkZGxlLWNvbnRhaW5lcj4KICAgICAgPHNsb3Q+PC9zbG90PgoKICAgICAgPHRyLXVpLXNpZGUtcGFuZWwtY29udGFpbmVyIGlkPSJzaWRlX3BhbmVsX2NvbnRhaW5lciI+CiAgICAgIDwvdHItdWktc2lkZS1wYW5lbC1jb250YWluZXI+CiAgICA8L21pZGRsZS1jb250YWluZXI+CiAgICA8dHItdWktYi1kcmFnLWhhbmRsZSBpZD0iZHJhZ19oYW5kbGUiPjwvdHItdWktYi1kcmFnLWhhbmRsZT4KICAgIDx0ci11aS1hLWFuYWx5c2lzLXZpZXcgaWQ9ImFuYWx5c2lzIj48L3RyLXVpLWEtYW5hbHlzaXMtdmlldz4KCiAgICA8dHItdi11aS1wcmVmZXJyZWQtZGlzcGxheS11bml0IGlkPSJkaXNwbGF5X3VuaXQiPgogICAgPC90ci12LXVpLXByZWZlcnJlZC1kaXNwbGF5LXVuaXQ+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1iLWdyb3VwaW5nLXRhYmxlIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICA6aG9zdCB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjdGFibGUgewogICAgICBmbGV4OiAxIDEgYXV0bzsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KICAgIDx0ci11aS1iLXRhYmxlIGlkPSJ0YWJsZSI+PC90ci11aS1iLXRhYmxlPgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdWktYi1ncm91cGluZy10YWJsZS1ncm91cGJ5LXBpY2tlciI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgI2NvbnRhaW5lciB7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICB9CiAgICAjY29udGFpbmVyICo6bm90KDpmaXJzdC1jaGlsZCkgewogICAgICBwYWRkaW5nLWxlZnQ6IDNweDsKICAgICAgYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCBibGFjazsKICAgICAgbWFyZ2luLWxlZnQ6IDNweDsKICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0iY29udGFpbmVyIj48L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLWItZ3JvdXBpbmctdGFibGUtZ3JvdXBieS1waWNrZXItZ3JvdXAiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KICAgICNsZWZ0LCAjcmlnaHQgewogICAgICB1c2VyLXNlbGVjdDogbm9uZTsKICAgICAgY3Vyc29yOiBwb2ludGVyOwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8c3BhbiBpZD0ibGVmdCIgb24tY2xpY2s9Im1vdmVMZWZ0XyI+4peAPC9zcGFuPgogICAgPGlucHV0IGlkPSJlbmFibGVkIiBvbi1jaGFuZ2U9Im9uRW5hYmxlQ2hhbmdlZF8iIHR5cGU9ImNoZWNrYm94Ii8+CiAgICA8bGFiZWwgZm9yPSJlbmFibGVkIiBpZD0ibGFiZWwiPjwvbGFiZWw+CiAgICA8c3BhbiBpZD0icmlnaHQiIG9uLWNsaWNrPSJtb3ZlUmlnaHRfIj7ilrY8L3NwYW4+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1zcC1maWxlLXNpemUtc3RhdHMtc2lkZS1wYW5lbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgfQogICAgdG9vbGJhciB7CiAgICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7CiAgICAgIGJhY2tncm91bmQtY29sb3I6IHJnYigyMzYsIDIzNiwgMjM2KTsKICAgICAgYm9yZGVyLWJvdHRvbTogMXB4IHNvbGlkICM4ZThlOGU7CiAgICAgIGRpc3BsYXk6IGZsZXg7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7CiAgICAgIGZsZXg6IDAgMCBhdXRvOwogICAgICBmb250LXNpemU6IDEycHg7CiAgICAgIHBhZGRpbmc6IDAgMTBweCAwIDEwcHg7CiAgICB9CiAgICB0YWJsZS1jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBtaW4taGVpZ2h0OiAwcHg7CiAgICAgIG92ZXJmbG93LXk6IGF1dG87CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDx0b29sYmFyPgogICAgICA8c3Bhbj48Yj5Hcm91cCBieTo8L2I+PC9zcGFuPgogICAgICA8dHItdWktYi1ncm91cGluZy10YWJsZS1ncm91cGJ5LXBpY2tlciBpZD0icGlja2VyIj4KICAgICAgPC90ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyPgogICAgPC90b29sYmFyPgogICAgPHRhYmxlLWNvbnRhaW5lcj4KICAgICAgPHRyLXVpLWItZ3JvdXBpbmctdGFibGUgaWQ9InRhYmxlIj48L3RyLXVpLWItZ3JvdXBpbmctdGFibGU+CiAgICA8L3RhYmxlLWNvbnRhaW5lcj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scy1leHBvcnQiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogZ3JpZDsKICAgICAgZ3JpZC1nYXA6IDFlbTsKICAgICAgZ3JpZC10ZW1wbGF0ZS1yb3dzOiBhdXRvIGF1dG87CiAgICAgIGdyaWQtdGVtcGxhdGUtY29sdW1uczogYXV0byBhdXRvOwogICAgfQogICAgYnV0dG9uIHsKICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBub25lOwogICAgICBib3JkZXI6IDA7CiAgICAgIGZvbnQtc2l6ZTogaW5pdGlhbDsKICAgICAgcGFkZGluZzogNXB4OwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8YnV0dG9uIG9uLXRhcD0iZXhwb3J0UmF3Q3N2XyI+cmF3IENTVjwvYnV0dG9uPgogICAgPGJ1dHRvbiBvbi10YXA9ImV4cG9ydFJhd0pzb25fIj5yYXcgSlNPTjwvYnV0dG9uPgogICAgPGJ1dHRvbiBvbi10YXA9ImV4cG9ydE1lcmdlZENzdl8iPm1lcmdlZCBDU1Y8L2J1dHRvbj4KICAgIDxidXR0b24gb24tdGFwPSJleHBvcnRNZXJnZWRKc29uXyI+bWVyZ2VkIEpTT048L2J1dHRvbj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scyI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBibG9jazsKICAgIH0KCiAgICAjaGVscCwgI2ZlZWRiYWNrIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgbWFyZ2luLWxlZnQ6IDIwcHg7CiAgICB9CgogICAgI3NlYXJjaF9jb250YWluZXIgewogICAgICBkaXNwbGF5OiBpbmxpbmUtZmxleDsKICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgICBwYWRkaW5nLWJvdHRvbTogMXB4OwogICAgICBib3JkZXItYm90dG9tOiAxcHggc29saWQgZGFya2dyZXk7CiAgICB9CgogICAgI3NlYXJjaCB7CiAgICAgIGJvcmRlcjogMDsKICAgICAgbWF4LXdpZHRoOiAyMGVtOwogICAgICBvdXRsaW5lOiBub25lOwogICAgfQoKICAgICNjbGVhcl9zZWFyY2ggewogICAgICB2aXNpYmlsaXR5OiBoaWRkZW47CiAgICAgIGhlaWdodDogMWVtOwogICAgICBzdHJva2U6IGJsYWNrOwogICAgICBzdHJva2Utd2lkdGg6IDE2OwogICAgfQoKICAgICNjb250cm9scyB7CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICB9CgogICAgI3Nob3dfb3ZlcnZpZXcsICNoaWRlX292ZXJ2aWV3IHsKICAgICAgaGVpZ2h0OiAxZW07CiAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgIH0KCiAgICAjc2hvd19vdmVydmlldyB7CiAgICAgIHN0cm9rZTogYmx1ZTsKICAgICAgc3Ryb2tlLXdpZHRoOiAxNjsKICAgIH0KCiAgICAjc2hvd19vdmVydmlldzpob3ZlciB7CiAgICAgIGJhY2tncm91bmQ6IGJsdWU7CiAgICAgIHN0cm9rZTogd2hpdGU7CiAgICB9CgogICAgI2hpZGVfb3ZlcnZpZXcgewogICAgICBkaXNwbGF5OiBub25lOwogICAgICBzdHJva2Utd2lkdGg6IDE4OwogICAgICBzdHJva2U6IGJsYWNrOwogICAgfQoKICAgICNoaWRlX292ZXJ2aWV3OmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogYmxhY2s7CiAgICAgIHN0cm9rZTogd2hpdGU7CiAgICB9CgogICAgI3JlZmVyZW5jZV9kaXNwbGF5X2xhYmVsIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgfQoKICAgICNhbHBoYSwgI2FscGhhX3NsaWRlcl9jb250YWluZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQoKICAgICNhbHBoYSB7CiAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgIH0KCiAgICAjYWxwaGFfc2xpZGVyX2NvbnRhaW5lciB7CiAgICAgIGJhY2tncm91bmQ6IHdoaXRlOwogICAgICBib3JkZXI6IDFweCBzb2xpZCBibGFjazsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgcGFkZGluZzogMC41ZW07CiAgICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTsKICAgICAgei1pbmRleDogMTA7IC8qIHNjYWxhci1zcGFuIHVzZXMgei1pbmRleCA6LSggKi8KICAgIH0KCiAgICAjYWxwaGFfc2xpZGVyIHsKICAgICAgLXdlYmtpdC1hcHBlYXJhbmNlOiBzbGlkZXItdmVydGljYWw7CiAgICAgIGFsaWduLXNlbGY6IGNlbnRlcjsKICAgICAgaGVpZ2h0OiAyMDBweDsKICAgICAgd2lkdGg6IDMwcHg7CiAgICB9CgogICAgI3N0YXRpc3RpYyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIG1hcmdpbi1yaWdodDogMjBweDsKICAgIH0KCiAgICAjc2hvd192aXN1YWxpemF0aW9uIHsKICAgICAgbWFyZ2luLXJpZ2h0OiAyMHB4OwogICAgfQoKICAgICNleHBvcnQgewogICAgICBtYXJnaW4tcmlnaHQ6IDIwcHg7CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRyb2xzIj4KICAgICAgPHNwYW4gaWQ9InNlYXJjaF9jb250YWluZXIiPgogICAgICAgIDxpbnB1dCBpZD0ic2VhcmNoIiBwbGFjZWhvbGRlcj0iRmluZCBIaXN0b2dyYW0gbmFtZSIgdmFsdWU9Int7c2VhcmNoUXVlcnk6OmtleXVwfX0iLz4KICAgICAgICA8c3ZnIGlkPSJjbGVhcl9zZWFyY2giIG9uLXRhcD0iY2xlYXJTZWFyY2hfIiB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgICAgICAgICA8Zz4KICAgICAgICAgIDx0aXRsZT5DbGVhciBzZWFyY2g8L3RpdGxlPgogICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMjgiIHkyPSIxMDAiPjwvbGluZT4KICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjEwMCIgeTI9IjI4Ij48L2xpbmU+CiAgICAgICAgICA8L2c+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvc3Bhbj4KCiAgICAgIDxzdmcgaWQ9InNob3dfb3ZlcnZpZXciIG9uLXRhcD0idG9nZ2xlT3ZlcnZpZXdMaW5lQ2hhcnRzXyIgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgIDxnPgogICAgICAgIDx0aXRsZT5TaG93IG92ZXJ2aWV3IGNoYXJ0czwvdGl0bGU+CiAgICAgICAgPGxpbmUgeDE9IjE5IiB4Mj0iNDkiIHkxPSIxMDkiIHkyPSI0OSI+PC9saW5lPgogICAgICAgIDxsaW5lIHgxPSI0OSIgeDI9Ijc5IiB5MT0iNDkiIHkyPSI3OSI+PC9saW5lPgogICAgICAgIDxsaW5lIHgxPSI3OSIgeDI9IjEwOSIgeTE9Ijc5IiB5Mj0iMTkiPjwvbGluZT4KICAgICAgICA8L2c+CiAgICAgIDwvc3ZnPgogICAgICA8c3ZnIGlkPSJoaWRlX292ZXJ2aWV3IiBvbi10YXA9InRvZ2dsZU92ZXJ2aWV3TGluZUNoYXJ0c18iIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KICAgICAgICA8Zz4KICAgICAgICA8dGl0bGU+SGlkZSBvdmVydmlldyBjaGFydHM8L3RpdGxlPgogICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjI4IiB5Mj0iMTAwIj48L2xpbmU+CiAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMTAwIiB5Mj0iMjgiPjwvbGluZT4KICAgICAgICA8L2c+CiAgICAgIDwvc3ZnPgoKICAgICAgPHNlbGVjdCBpZD0icmVmZXJlbmNlX2Rpc3BsYXlfbGFiZWwiIHZhbHVlPSJ7e3JlZmVyZW5jZURpc3BsYXlMYWJlbDo6Y2hhbmdlfX0iPgogICAgICAgIDxvcHRpb24gdmFsdWU9IiI+U2VsZWN0IGEgcmVmZXJlbmNlIGNvbHVtbjwvb3B0aW9uPgogICAgICA8L3NlbGVjdD4KCiAgICAgIDxidXR0b24gaWQ9ImFscGhhIiBvbi10YXA9Im9wZW5BbHBoYVNsaWRlcl8iPs6xPVtbYWxwaGFTdHJpbmddXTwvYnV0dG9uPgogICAgICA8ZGl2IGlkPSJhbHBoYV9zbGlkZXJfY29udGFpbmVyIj4KICAgICAgICA8aW5wdXQgaWQ9ImFscGhhX3NsaWRlciIgbWF4PSIxOCIgbWluPSIwIiBvbi1ibHVyPSJjbG9zZUFscGhhU2xpZGVyXyIgb24taW5wdXQ9InVwZGF0ZUFscGhhXyIgdHlwZT0icmFuZ2UiIHZhbHVlPSJ7e2FscGhhSW5kZXg6OmNoYW5nZX19Ii8+CiAgICAgIDwvZGl2PgoKICAgICAgPHNlbGVjdCBpZD0ic3RhdGlzdGljIiB2YWx1ZT0ie3tkaXNwbGF5U3RhdGlzdGljTmFtZTo6Y2hhbmdlfX0iPgogICAgICA8L3NlbGVjdD4KCiAgICAgIDxidXR0b24gaWQ9InNob3dfdmlzdWFsaXphdGlvbiIgb24tdGFwPSJsb2FkVmlzdWFsaXphdGlvbl8iPlZpc3VhbGl6ZTwvYnV0dG9uPgoKICAgICAgPHRyLXVpLWItZHJvcGRvd24gbGFiZWw9IkV4cG9ydCI+CiAgICAgICAgPHRyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scy1leHBvcnQ+CiAgICAgICAgPC90ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMtZXhwb3J0PgogICAgICA8L3RyLXVpLWItZHJvcGRvd24+CgogICAgICA8aW5wdXQgY2hlY2tlZD0ie3tzaG93QWxsOjpjaGFuZ2V9fSIgaWQ9InNob3dfYWxsIiB0aXRsZT0iV2hlbiB1bmNoZWNrZWQsIGxlc3MgaW1wb3J0YW50IGhpc3RvZ3JhbXMgYXJlIGhpZGRlbi4iIHR5cGU9ImNoZWNrYm94Ii8+CiAgICAgIDxsYWJlbCBmb3I9InNob3dfYWxsIiB0aXRsZT0iV2hlbiB1bmNoZWNrZWQsIGxlc3MgaW1wb3J0YW50IGhpc3RvZ3JhbXMgYXJlIGhpZGRlbi4iPlNob3cgYWxsPC9sYWJlbD4KCiAgICAgIDxhIGlkPSJoZWxwIj5IZWxwPC9hPgogICAgICA8YSBpZD0iZmVlZGJhY2siPkZlZWRiYWNrPC9hPgogICAgPC9kaXY+CgogICAgPHRyLXVpLWItZ3JvdXBpbmctdGFibGUtZ3JvdXBieS1waWNrZXIgaWQ9InBpY2tlciI+CiAgICA8L3RyLXVpLWItZ3JvdXBpbmctdGFibGUtZ3JvdXBieS1waWNrZXI+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUtY2VsbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgI2hpc3RvZ3JhbV9jb250YWluZXIgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogcm93OwogICAgfQoKICAgICNtaXNzaW5nLCAjZW1wdHksICN1bm1lcmdlYWJsZSwgI3NjYWxhciB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgIH0KCiAgICAjb3Blbl9oaXN0b2dyYW0sICNjbG9zZV9oaXN0b2dyYW0sICNvcGVuX2hpc3RvZ3JhbSBzdmcsICNjbG9zZV9oaXN0b2dyYW0gc3ZnIHsKICAgICAgaGVpZ2h0OiAxZW07CiAgICB9CgogICAgI29wZW5faGlzdG9ncmFtIHN2ZyB7CiAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIHN0cm9rZS13aWR0aDogMDsKICAgICAgc3Ryb2tlOiBibHVlOwogICAgICBmaWxsOiBibHVlOwogICAgfQogICAgOmhvc3QoOmhvdmVyKSAjb3Blbl9oaXN0b2dyYW0gc3ZnIHsKICAgICAgYmFja2dyb3VuZDogYmx1ZTsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgZmlsbDogd2hpdGU7CiAgICB9CgogICAgI3NjYWxhciB7CiAgICAgIGZsZXgtZ3JvdzogMTsKICAgICAgd2hpdGUtc3BhY2U6IG5vd3JhcDsKICAgIH0KCiAgICAjaGlzdG9ncmFtIHsKICAgICAgZmxleC1ncm93OiAxOwogICAgfQoKICAgICNjbG9zZV9oaXN0b2dyYW0gc3ZnIGxpbmUgewogICAgICBzdHJva2Utd2lkdGg6IDE4OwogICAgICBzdHJva2U6IGJsYWNrOwogICAgfQogICAgI2Nsb3NlX2hpc3RvZ3JhbTpob3ZlciBzdmcgewogICAgICBiYWNrZ3JvdW5kOiBibGFjazsKICAgIH0KICAgICNjbG9zZV9oaXN0b2dyYW06aG92ZXIgc3ZnIGxpbmUgewogICAgICBzdHJva2U6IHdoaXRlOwogICAgfQoKICAgICNvdmVydmlld19jb250YWluZXIgewogICAgICBkaXNwbGF5OiBub25lOwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8ZGl2IGlkPSJoaXN0b2dyYW1fY29udGFpbmVyIj4KICAgICAgPHNwYW4gaWQ9Im1pc3NpbmciPihtaXNzaW5nKTwvc3Bhbj4KICAgICAgPHNwYW4gaWQ9ImVtcHR5Ij4oZW1wdHkpPC9zcGFuPgogICAgICA8c3BhbiBpZD0idW5tZXJnZWFibGUiPih1bm1lcmdlYWJsZSk8L3NwYW4+CgogICAgICA8dHItdi11aS1zY2FsYXItc3BhbiBpZD0ic2NhbGFyIiBvbi1jbGljaz0ib3Blbkhpc3RvZ3JhbV8iPjwvdHItdi11aS1zY2FsYXItc3Bhbj4KCiAgICAgIDxzcGFuIGlkPSJvcGVuX2hpc3RvZ3JhbSIgb24tY2xpY2s9Im9wZW5IaXN0b2dyYW1fIj4KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KICAgICAgICAgIDxyZWN0IGhlaWdodD0iMTYiIHdpZHRoPSIzMiIgeD0iMTYiIHk9IjI0Ij48L3JlY3Q+CiAgICAgICAgICA8cmVjdCBoZWlnaHQ9IjE2IiB3aWR0aD0iOTYiIHg9IjE2IiB5PSI1NiI+PC9yZWN0PgogICAgICAgICAgPHJlY3QgaGVpZ2h0PSIxNiIgd2lkdGg9IjY0IiB4PSIxNiIgeT0iODgiPjwvcmVjdD4KICAgICAgICA8L3N2Zz4KICAgICAgPC9zcGFuPgoKICAgICAgPHNwYW4gaWQ9Imhpc3RvZ3JhbSI+PC9zcGFuPgoKICAgICAgPHNwYW4gaWQ9ImNsb3NlX2hpc3RvZ3JhbSIgb24tY2xpY2s9ImNsb3NlSGlzdG9ncmFtXyI+CiAgICAgICAgPHN2ZyB2aWV3Qm94PSIwIDAgMTI4IDEyOCI+CiAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIyOCIgeTI9IjEwMCI+PC9saW5lPgogICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMTAwIiB5Mj0iMjgiPjwvbGluZT4KICAgICAgICA8L3N2Zz4KICAgICAgPC9zcGFuPgogICAgPC9kaXY+CgogICAgPGRpdiBpZD0ib3ZlcnZpZXdfY29udGFpbmVyIj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlLW5hbWUtY2VsbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgI25hbWVfY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KCiAgICAjbmFtZSB7CiAgICAgIG92ZXJmbG93OiBoaWRkZW47CiAgICAgIHdoaXRlLXNwYWNlOiBub3dyYXA7CiAgICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwogICAgfQoKICAgICNzaG93X292ZXJ2aWV3LCAjaGlkZV9vdmVydmlldywgI3Nob3dfb3ZlcnZpZXcgc3ZnLCAjaGlkZV9vdmVydmlldyBzdmcgewogICAgICBoZWlnaHQ6IDFlbTsKICAgICAgbWFyZ2luLWxlZnQ6IDVweDsKICAgIH0KCiAgICAjc2hvd19vdmVydmlldyBzdmcgewogICAgICBzdHJva2U6IGJsdWU7CiAgICAgIHN0cm9rZS13aWR0aDogMTY7CiAgICB9CgogICAgI3Nob3dfb3ZlcnZpZXc6aG92ZXIgc3ZnIHsKICAgICAgYmFja2dyb3VuZDogYmx1ZTsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KCiAgICAjaGlkZV9vdmVydmlldyB7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CgogICAgI2hpZGVfb3ZlcnZpZXcgc3ZnIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxODsKICAgICAgc3Ryb2tlOiBibGFjazsKICAgIH0KCiAgICAjaGlkZV9vdmVydmlldzpob3ZlciBzdmcgewogICAgICBiYWNrZ3JvdW5kOiBibGFjazsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KCiAgICAjb3Blbl9oaXN0b2dyYW1zLCAjY2xvc2VfaGlzdG9ncmFtcywgI29wZW5faGlzdG9ncmFtcyBzdmcsICNjbG9zZV9oaXN0b2dyYW1zIHN2ZyB7CiAgICAgIGhlaWdodDogMWVtOwogICAgfQoKICAgICNjbG9zZV9oaXN0b2dyYW1zIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAjb3Blbl9oaXN0b2dyYW1zIHN2ZyB7CiAgICAgIG1hcmdpbi1sZWZ0OiA0cHg7CiAgICAgIHN0cm9rZS13aWR0aDogMDsKICAgICAgc3Ryb2tlOiBibHVlOwogICAgICBmaWxsOiBibHVlOwogICAgfQogICAgI29wZW5faGlzdG9ncmFtczpob3ZlciBzdmcgewogICAgICBiYWNrZ3JvdW5kOiBibHVlOwogICAgICBzdHJva2U6IHdoaXRlOwogICAgICBmaWxsOiB3aGl0ZTsKICAgIH0KCiAgICAjY2xvc2VfaGlzdG9ncmFtcyBsaW5lIHsKICAgICAgc3Ryb2tlLXdpZHRoOiAxODsKICAgICAgc3Ryb2tlOiBibGFjazsKICAgIH0KICAgICNjbG9zZV9oaXN0b2dyYW1zOmhvdmVyIHsKICAgICAgYmFja2dyb3VuZDogYmxhY2s7CiAgICB9CiAgICAjY2xvc2VfaGlzdG9ncmFtczpob3ZlciBsaW5lIHsKICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgIH0KCiAgICAjb3ZlcnZpZXdfY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KICAgIDwvc3R5bGU+CgogICAgPGRpdiBpZD0ibmFtZV9jb250YWluZXIiPgogICAgICA8c3BhbiBpZD0ibmFtZSI+PC9zcGFuPgoKICAgICAgPHNwYW4gaWQ9InNob3dfb3ZlcnZpZXciIG9uLWNsaWNrPSJzaG93T3ZlcnZpZXdfIj4KICAgICAgICA8c3ZnIHZpZXdCb3g9IjAgMCAxMjggMTI4Ij4KICAgICAgICAgIDxsaW5lIHgxPSIxOSIgeDI9IjQ5IiB5MT0iMTA5IiB5Mj0iNDkiPjwvbGluZT4KICAgICAgICAgIDxsaW5lIHgxPSI0OSIgeDI9Ijc5IiB5MT0iNDkiIHkyPSI3OSI+PC9saW5lPgogICAgICAgICAgPGxpbmUgeDE9Ijc5IiB4Mj0iMTA5IiB5MT0iNzkiIHkyPSIxOSI+PC9saW5lPgogICAgICAgIDwvc3ZnPgogICAgICA8L3NwYW4+CgogICAgICA8c3BhbiBpZD0iaGlkZV9vdmVydmlldyIgb24tY2xpY2s9ImhpZGVPdmVydmlld18iPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMjgiIHkyPSIxMDAiPjwvbGluZT4KICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjEwMCIgeTI9IjI4Ij48L2xpbmU+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvc3Bhbj4KCiAgICAgIDxzcGFuIGlkPSJvcGVuX2hpc3RvZ3JhbXMiIG9uLWNsaWNrPSJvcGVuSGlzdG9ncmFtc18iPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgICAgPHJlY3QgaGVpZ2h0PSIxNiIgd2lkdGg9IjMyIiB4PSIxNiIgeT0iMjQiPjwvcmVjdD4KICAgICAgICAgIDxyZWN0IGhlaWdodD0iMTYiIHdpZHRoPSI5NiIgeD0iMTYiIHk9IjU2Ij48L3JlY3Q+CiAgICAgICAgICA8cmVjdCBoZWlnaHQ9IjE2IiB3aWR0aD0iNjQiIHg9IjE2IiB5PSI4OCI+PC9yZWN0PgogICAgICAgIDwvc3ZnPgogICAgICA8L3NwYW4+CgogICAgICA8c3BhbiBpZD0iY2xvc2VfaGlzdG9ncmFtcyIgb24tY2xpY2s9ImNsb3NlSGlzdG9ncmFtc18iPgogICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgICAgPGxpbmUgeDE9IjI4IiB4Mj0iMTAwIiB5MT0iMjgiIHkyPSIxMDAiPjwvbGluZT4KICAgICAgICAgIDxsaW5lIHgxPSIyOCIgeDI9IjEwMCIgeTE9IjEwMCIgeTI9IjI4Ij48L2xpbmU+CiAgICAgICAgPC9zdmc+CiAgICAgIDwvc3Bhbj4KICAgIDwvZGl2PgoKICAgIDxkaXYgaWQ9Im92ZXJ2aWV3X2NvbnRhaW5lciI+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZSI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBtaW4taGVpZ2h0OiAwcHg7CiAgICAgIG92ZXJmbG93OiBhdXRvOwogICAgfQogICAgI3RhYmxlIHsKICAgICAgbWFyZ2luLXRvcDogNXB4OwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8dHItdWktYi10YWJsZSBpZD0idGFibGUiPgogIDwvdHItdWktYi10YWJsZT48L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktbWV0cmljcy12aXN1YWxpemF0aW9uIj4KICA8dGVtcGxhdGU+CiAgICA8c3R5bGU+CiAgICAgIGJ1dHRvbiB7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICAgIGZvbnQtc2l6ZTogMTRweDsKICAgICAgfQoKICAgICAgLnRleHRfaW5wdXQgewogICAgICAgIHdpZHRoOiA1MHB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5lcnJvciB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAuY29udGFpbmVyIHsKICAgICAgICBwb3NpdGlvbjogcmVsYXRpdmU7CiAgICAgICAgZGlzcGxheTogaW5saW5lLWJsb2NrOwogICAgICAgIG1hcmdpbi1sZWZ0OiAxNXB4OwogICAgICB9CgogICAgICAjdGl0bGUgewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAjc2VsZWN0b3JzIHsKICAgICAgICBkaXNwbGF5OiBibG9jazsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogMTBweDsKICAgICAgfQoKICAgICAgI3NlYXJjaF9wYWdlIHsKICAgICAgICB3aWR0aDogMjAwcHg7CiAgICAgICAgbWFyZ2luLWxlZnQ6IDMwcHg7CiAgICAgIH0KCiAgICAgICNjbG9zZSB7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgICB2ZXJ0aWNhbC1hbGlnbjogdG9wOwogICAgICB9CgogICAgICAjY2xvc2Ugc3ZnewogICAgICAgIGhlaWdodDogMWVtOwogICAgICB9CgogICAgICAjY2xvc2Ugc3ZnIGxpbmUgewogICAgICAgIHN0cm9rZS13aWR0aDogMTg7CiAgICAgICAgc3Ryb2tlOiBibGFjazsKICAgICAgfQoKICAgICAgI2Nsb3NlOmhvdmVyIHN2ZyB7CiAgICAgICAgYmFja2dyb3VuZDogYmxhY2s7CiAgICAgIH0KCiAgICAgICNjbG9zZTpob3ZlciBzdmcgbGluZSB7CiAgICAgICAgc3Ryb2tlOiB3aGl0ZTsKICAgICAgfQogICAgPC9zdHlsZT4KICAgICAgPHNwYW4gY2xhc3M9ImNvbnRhaW5lciIgaWQ9ImFnZ3JlZ2F0ZUNvbnRhaW5lciI+CiAgICAgIDwvc3Bhbj4KICAgICAgPHNwYW4gY2xhc3M9ImNvbnRhaW5lciIgaWQ9InBhZ2VCeVBhZ2VDb250YWluZXIiPgogICAgICAgIDxzcGFuIGlkPSJzZWxlY3RvcnMiPgogICAgICAgICAgPHNwYW4gaWQ9InBlcmNlbnRpbGVfbGFiZWwiPlBlcmNlbnRpbGUgUmFuZ2U6PC9zcGFuPgogICAgICAgICAgPGlucHV0IGNsYXNzPSJ0ZXh0X2lucHV0IiBpZD0ic3RhcnQiIHBsYWNlaG9sZGVyPSIwIi8+CiAgICAgICAgICA8aW5wdXQgY2xhc3M9InRleHRfaW5wdXQiIGlkPSJlbmQiIHBsYWNlaG9sZGVyPSIxMDAiLz4KICAgICAgICAgIDxidXR0b24gaWQ9ImZpbHRlciIgb24tdGFwPSJmaWx0ZXJCeVBlcmNlbnRpbGVfIj5GaWx0ZXI8L2J1dHRvbj4KICAgICAgICAgIDxpbnB1dCBjbGFzcz0idGV4dF9pbnB1dCIgaWQ9InNlYXJjaF9wYWdlIiBwbGFjZWhvbGRlcj0iUGFnZSBOYW1lIi8+CiAgICAgICAgICA8YnV0dG9uIGlkPSJzZWFyY2giIG9uLXRhcD0ic2VhcmNoQnlQYWdlXyI+U2VhcmNoPC9idXR0b24+CiAgICAgICAgICA8c3BhbiBjbGFzcz0iZXJyb3IiIGlkPSJzZWFyY2hfZXJyb3IiPlNvcnJ5LCBjb3VsZCBub3QgZmluZCB0aGF0IHBhZ2UhPC9zcGFuPgogICAgICAgIDwvc3Bhbj4KICAgICAgPC9zcGFuPgogICAgICA8ZGl2IGRpc3BsYXk9ImJsb2NrIiBpZD0ic3VibWV0cmljc0NvbnRhaW5lciI+CiAgICAgICAgPHNwYW4gaWQ9ImNsb3NlIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIyOCIgeTI9IjEwMCI+PC9saW5lPgogICAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIxMDAiIHkyPSIyOCI+PC9saW5lPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9zcGFuPgogICAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktcmFzdGVyLXZpc3VhbGl6YXRpb24iPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgYnV0dG9uIHsKICAgICAgICBwYWRkaW5nOiA1cHg7CiAgICAgICAgZm9udC1zaXplOiAxNHB4OwogICAgICB9CiAgICAgIC5lcnJvciB7CiAgICAgICAgY29sb3I6IHJlZDsKICAgICAgICBkaXNwbGF5OiBub25lOwogICAgICB9CgogICAgICAudGV4dF9pbnB1dCB7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICAgIHBhZGRpbmc6IDRweDsKICAgICAgICBmb250LXNpemU6IDE0cHg7CiAgICAgIH0KCiAgICAgIC5zZWxlY3Rvcl9jb250YWluZXJ7CiAgICAgICAgcGFkZGluZzogNXB4OwogICAgICB9CgogICAgICAjc2VhcmNoIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgcGFkZGluZy1ib3R0b206IDEwcHg7CiAgICAgIH0KCiAgICAgICNzZWFyY2hfcGFnZSB7CiAgICAgICAgd2lkdGg6IDIwMHB4OwogICAgICB9CgogICAgICAjcGFnZVNlbGVjdG9yIHsKICAgICAgICBkaXNwbGF5OiBpbmxpbmUtYmxvY2s7CiAgICAgICAgZm9udC1zaXplOiAxMnB0OwogICAgICB9CgogICAgICAjY2xvc2UgewogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgICAgdmVydGljYWwtYWxpZ246IHRvcDsKICAgICAgfQoKICAgICAgI2Nsb3NlIHN2Z3sKICAgICAgICBoZWlnaHQ6IDFlbTsKICAgICAgfQoKICAgICAgI2Nsb3NlIHN2ZyBsaW5lIHsKICAgICAgICBzdHJva2Utd2lkdGg6IDE4OwogICAgICAgIHN0cm9rZTogYmxhY2s7CiAgICAgIH0KCiAgICAgICNjbG9zZTpob3ZlciBzdmcgewogICAgICAgIGJhY2tncm91bmQ6IGJsYWNrOwogICAgICB9CgogICAgICAjY2xvc2U6aG92ZXIgc3ZnIGxpbmUgewogICAgICAgIHN0cm9rZTogd2hpdGU7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8c3BhbiBpZD0iYWdncmVnYXRlQ29udGFpbmVyIj4KICAgICAgPGRpdj4KICAgICAgICA8ZGl2IGNsYXNzPSJzZWxlY3Rvcl9jb250YWluZXIiPgogICAgICAgICAgPHNwYW4gaWQ9InNlbGVjdF9wYWdlX2xhYmVsIj5JbmRpdmlkdWFsIFBhZ2UgUmVzdWx0czo8L3NwYW4+CiAgICAgICAgICA8c2VsZWN0IGlkPSJwYWdlU2VsZWN0b3IiPgogICAgICAgICAgICA8b3B0aW9uIGlkPSJzZWxlY3RfcGFnZSIgdmFsdWU9IiI+U2VsZWN0IGEgcGFnZTwvb3B0aW9uPgogICAgICAgICAgPC9zZWxlY3Q+CiAgICAgICAgPC9kaXY+CiAgICAgICAgPGRpdiBjbGFzcz0ic2VsZWN0b3JfY29udGFpbmVyIj4KICAgICAgICAgIDxkaXYgaWQ9InNlYXJjaF9wYWdlX2xhYmVsIj5TZWFyY2ggZm9yIGEgcGFnZTo8L2Rpdj4KICAgICAgICAgIDxpbnB1dCBjbGFzcz0idGV4dF9pbnB1dCIgaWQ9InNlYXJjaF9wYWdlIiBwbGFjZWhvbGRlcj0iUGFnZSBOYW1lIi8+CiAgICAgICAgICA8YnV0dG9uIGlkPSJzZWFyY2hfYnV0dG9uIj5TZWFyY2g8L2J1dHRvbj4KICAgICAgICAgIDxkaXYgY2xhc3M9ImVycm9yIiBpZD0ic2VhcmNoX2Vycm9yIj5Tb3JyeSwgY291bGQgbm90IGZpbmQgdGhhdCBwYWdlITwvZGl2PgogICAgICAgIDwvZGl2PgogICAgICA8L2Rpdj4KICAgIDwvc3Bhbj4KICAgIDxzcGFuIGlkPSJwYWdlQ29udGFpbmVyIj4KICAgICAgPHNwYW4gaWQ9ImNsb3NlIj4KICAgICAgICAgIDxzdmcgdmlld0JveD0iMCAwIDEyOCAxMjgiPgogICAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIyOCIgeTI9IjEwMCI+PC9saW5lPgogICAgICAgICAgICA8bGluZSB4MT0iMjgiIHgyPSIxMDAiIHkxPSIxMDAiIHkyPSIyOCI+PC9saW5lPgogICAgICAgICAgPC9zdmc+CiAgICAgICAgPC9zcGFuPgogICAgICA8L3NwYW4+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxtZXRhIGNoYXJzZXQ9InV0Zi04Ii8+PGRvbS1tb2R1bGUgaWQ9InRyLXYtdWktdmlzdWFsaXphdGlvbnMtZGF0YS1jb250YWluZXIiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgICAgLmVycm9yIHsKICAgICAgICBjb2xvcjogcmVkOwogICAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICAgIH0KCiAgICAgIC5zYW1wbGV7CiAgICAgICAgZGlzcGxheTogbm9uZTsKICAgICAgfQoKICAgICAgLnN1YnRpdGxlewogICAgICAgIGZvbnQtc2l6ZTogMjBweDsKICAgICAgICBmb250LXdlaWdodDogYm9sZDsKICAgICAgICBwYWRkaW5nLWJvdHRvbTogNXB4OwogICAgICB9CgogICAgICAuZGVzY3JpcHRpb257CiAgICAgICAgZm9udC1zaXplOiAxNXB4OwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgIH0KCiAgICAgICN0aXRsZSB7CiAgICAgICAgZm9udC1zaXplOiAzMHB4OwogICAgICAgIGZvbnQtd2VpZ2h0OiBib2xkOwogICAgICAgIHBhZGRpbmctYm90dG9tOiA1cHg7CiAgICAgIH0KICAgIDwvc3R5bGU+CiAgICA8ZGl2IGlkPSJ0aXRsZSI+VmlzdWFsaXphdGlvbnM8L2Rpdj4KICAgIDxkaXYgY2xhc3M9ImVycm9yIiBpZD0iZGF0YV9lcnJvciI+SW52YWxpZCBkYXRhIHByb3ZpZGVkLjwvZGl2PgogICAgPGRpdiBpZD0icGlwZWxpbmVfcGVyX2ZyYW1lX2NvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj5HcmFwaGljcyBQaXBlbGluZSBhbmQgUmFzdGVyIFRhc2tzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj4KICAgICAgICBXaGVuIHJhc3RlciB0YXNrcyBhcmUgY29tcGxldGVkIGluIGNvbXBhcmlzb24gdG8gdGhlIHJlc3Qgb2YgdGhlIGdyYXBoaWNzIHBpcGVsaW5lLjxicj4KICAgICAgICBPbmx5IHBhZ2VzIHdoZXJlIHJhc3RlciB0YXNrcyBhcmUgY29tcGxldGVkIGFmdGVyIGJlZ2luRnJhbWUgaXMgaXNzdWVkIGFyZSBpbmNsdWRlZC4KICAgICAgPC9kaXY+CiAgICAgIDx0ci12LXVpLXJhc3Rlci12aXN1YWxpemF0aW9uIGlkPSJyYXN0ZXJWaXN1YWxpemF0aW9uIj4KICAgICAgPC90ci12LXVpLXJhc3Rlci12aXN1YWxpemF0aW9uPgogICAgPC9kaXY+CiAgICA8ZGl2IGlkPSJtZXRyaWNzX2NvbnRhaW5lciI+CiAgICAgIDxkaXYgY2xhc3M9InN1YnRpdGxlIj5NZXRyaWNzPC9kaXY+CiAgICAgIDxkaXYgY2xhc3M9ImRlc2NyaXB0aW9uIj5Ub3RhbCBhbW91bnQgb2YgdGltZSB0YWtlbiBmb3IgdGhlIGluZGljYXRlZCBtZXRyaWNzLjwvZGl2PgogICAgICA8dHItdi11aS1tZXRyaWNzLXZpc3VhbGl6YXRpb24gY2xhc3M9InNhbXBsZSIgaWQ9Im1ldHJpY3NWaXN1YWxpemF0aW9uIj4KICAgICAgPC90ci12LXVpLW1ldHJpY3MtdmlzdWFsaXphdGlvbj4KICAgIDwvZGl2PgogIDwvdGVtcGxhdGU+CjwvZG9tLW1vZHVsZT48ZG9tLW1vZHVsZSBpZD0idHItdi11aS1oaXN0b2dyYW0tc2V0LXZpZXciPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZm9udC1mYW1pbHk6IHNhbnMtc2VyaWY7CiAgICB9CgogICAgI3plcm8gewogICAgICBjb2xvcjogcmVkOwogICAgICAvKiBoaXN0b2dyYW0tc2V0LXRhYmxlIGlzIHVzZWQgYnkgYm90aCBtZXRyaWNzLXNpZGUtcGFuZWwgYW5kIHJlc3VsdHMuaHRtbC4KICAgICAgICogVGhpcyBmb250LXNpemUgcnVsZSBoYXMgbm8gZWZmZWN0IGluIHJlc3VsdHMuaHRtbCwgYnV0IGltcHJvdmVzCiAgICAgICAqIGxlZ2liaWxpdHkgaW4gdGhlIG1ldHJpY3Mtc2lkZS1wYW5lbCwgd2hpY2ggc2V0cyBmb250LXNpemUgaW4gb3JkZXIgdG8KICAgICAgICogbWFrZSB0aGlzIHRhYmxlIGRlbnNlci4KICAgICAgICovCiAgICAgIGZvbnQtc2l6ZTogaW5pdGlhbDsKICAgIH0KCiAgICAjY29udGFpbmVyIHsKICAgICAgZGlzcGxheTogbm9uZTsKICAgIH0KCiAgICAjdmlzdWFsaXphdGlvbnN7CiAgICAgIGRpc3BsYXk6IG5vbmU7CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9Inplcm8iPnplcm8gSGlzdG9ncmFtczwvZGl2PgoKICAgIDxkaXYgaWQ9ImNvbnRhaW5lciI+CiAgICAgIDx0ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHMgaWQ9ImNvbnRyb2xzIj4KICAgICAgPC90ci12LXVpLWhpc3RvZ3JhbS1zZXQtY29udHJvbHM+CgogICAgICA8dHItdi11aS12aXN1YWxpemF0aW9ucy1kYXRhLWNvbnRhaW5lciBpZD0idmlzdWFsaXphdGlvbnMiPgogICAgICA8L3RyLXYtdWktdmlzdWFsaXphdGlvbnMtZGF0YS1jb250YWluZXI+CgogICAgICA8dHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlIGlkPSJ0YWJsZSI+PC90ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGU+CiAgICA8L2Rpdj4KICA8L3RlbXBsYXRlPgo8L2RvbS1tb2R1bGU+PGRvbS1tb2R1bGUgaWQ9InRyLXVpLXNwLW1ldHJpY3Mtc2lkZS1wYW5lbCI+CiAgPHRlbXBsYXRlPgogICAgPHN0eWxlPgogICAgOmhvc3QgewogICAgICBkaXNwbGF5OiBmbGV4OwogICAgICBmbGV4LWRpcmVjdGlvbjogY29sdW1uOwogICAgfQogICAgZGl2I2Vycm9yIHsKICAgICAgY29sb3I6IHJlZDsKICAgIH0KICAgICNyZXN1bHRzIHsKICAgICAgZm9udC1zaXplOiAxMnB4OwogICAgfQogICAgPC9zdHlsZT4KCiAgICA8dG9wLWxlZnQtY29udHJvbHMgaWQ9InRvcF9sZWZ0X2NvbnRyb2xzIj48L3RvcC1sZWZ0LWNvbnRyb2xzPgoKICAgIDx0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldyBpZD0icmVzdWx0cyI+PC90ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldz4KCiAgICA8ZGl2IGlkPSJlcnJvciI+PC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxkb20tbW9kdWxlIGlkPSJ0ci11aS1lLXMtYWxlcnRzLXNpZGUtcGFuZWwiPgogIDx0ZW1wbGF0ZT4KICAgIDxzdHlsZT4KICAgIDpob3N0IHsKICAgICAgZGlzcGxheTogYmxvY2s7CiAgICAgIHdpZHRoOiAyNTBweDsKICAgIH0KICAgICNjb250ZW50IHsKICAgICAgZmxleC1kaXJlY3Rpb246IGNvbHVtbjsKICAgICAgZGlzcGxheTogZmxleDsKICAgIH0KICAgIHRyLXVpLWItdGFibGUgewogICAgICBmb250LXNpemU6IDEycHg7CiAgICB9CiAgICA8L3N0eWxlPgoKICAgIDxkaXYgaWQ9ImNvbnRlbnQiPgogICAgICA8dG9vbGJhciBpZD0idG9vbGJhciI+PC90b29sYmFyPgogICAgICA8cmVzdWx0LWFyZWEgaWQ9InJlc3VsdF9hcmVhIj48L3Jlc3VsdC1hcmVhPgogICAgPC9kaXY+CiAgPC90ZW1wbGF0ZT4KPC9kb20tbW9kdWxlPjxzY3JpcHQ+CgovLyBDb3B5cmlnaHQgMjAxNSBUaGUgQ2hyb21pdW0gQXV0aG9ycy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KLy8gVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYSBCU0Qtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQovLyBmb3VuZCBpbiB0aGUgTElDRU5TRSBmaWxlLgoKLyogV0FSTklORzogVGhpcyBmaWxlIGlzIGF1dG8gZ2VuZXJhdGVkLgogKgogKiBEbyBub3QgZWRpdCBkaXJlY3RseS4KICovCgondXNlIHN0cmljdCc7aWYoIXdpbmRvdy5DdXN0b21FbGVtZW50c3x8d2luZG93LkN1c3RvbUVsZW1lbnRzLmhhc05hdGl2ZSl7aWYod2luZG93LlBvbHltZXIpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHByb2NlZWQuIFBvbHltZXIgYWxyZWFkeSBwcmVzZW50LicpO30Kd2luZG93LlBvbHltZXI9e307d2luZG93LlBvbHltZXIuZG9tPSdzaGFkb3cnO30KKGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcmVzb2x2ZSgpe2RvY3VtZW50LmJvZHkucmVtb3ZlQXR0cmlidXRlKCd1bnJlc29sdmVkJyk7fQppZih3aW5kb3cuV2ViQ29tcG9uZW50cyl7YWRkRXZlbnRMaXN0ZW5lcignV2ViQ29tcG9uZW50c1JlYWR5JyxyZXNvbHZlKTt9ZWxzZXtpZihkb2N1bWVudC5yZWFkeVN0YXRlPT09J2ludGVyYWN0aXZlJ3x8ZG9jdW1lbnQucmVhZHlTdGF0ZT09PSdjb21wbGV0ZScpe3Jlc29sdmUoKTt9ZWxzZXthZGRFdmVudExpc3RlbmVyKCdET01Db250ZW50TG9hZGVkJyxyZXNvbHZlKTt9fX0oKSk7d2luZG93LlBvbHltZXI9e1NldHRpbmdzOmZ1bmN0aW9uKCl7dmFyIHNldHRpbmdzPXdpbmRvdy5Qb2x5bWVyfHx7fTtpZighc2V0dGluZ3Mubm9VcmxTZXR0aW5ncyl7dmFyIHBhcnRzPWxvY2F0aW9uLnNlYXJjaC5zbGljZSgxKS5zcGxpdCgnJicpO2Zvcih2YXIgaT0wLG87aTxwYXJ0cy5sZW5ndGgmJihvPXBhcnRzW2ldKTtpKyspe289by5zcGxpdCgnPScpO29bMF0mJihzZXR0aW5nc1tvWzBdXT1vWzFdfHx0cnVlKTt9fQpzZXR0aW5ncy53YW50U2hhZG93PXNldHRpbmdzLmRvbT09PSdzaGFkb3cnO3NldHRpbmdzLmhhc1NoYWRvdz1Cb29sZWFuKEVsZW1lbnQucHJvdG90eXBlLmNyZWF0ZVNoYWRvd1Jvb3QpO3NldHRpbmdzLm5hdGl2ZVNoYWRvdz1zZXR0aW5ncy5oYXNTaGFkb3cmJiF3aW5kb3cuU2hhZG93RE9NUG9seWZpbGw7c2V0dGluZ3MudXNlU2hhZG93PXNldHRpbmdzLndhbnRTaGFkb3cmJnNldHRpbmdzLmhhc1NoYWRvdztzZXR0aW5ncy5oYXNOYXRpdmVJbXBvcnRzPUJvb2xlYW4oJ2ltcG9ydCdpbiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJykpO3NldHRpbmdzLnVzZU5hdGl2ZUltcG9ydHM9c2V0dGluZ3MuaGFzTmF0aXZlSW1wb3J0cztzZXR0aW5ncy51c2VOYXRpdmVDdXN0b21FbGVtZW50cz0hd2luZG93LkN1c3RvbUVsZW1lbnRzfHx3aW5kb3cuQ3VzdG9tRWxlbWVudHMudXNlTmF0aXZlO3NldHRpbmdzLnVzZU5hdGl2ZVNoYWRvdz1zZXR0aW5ncy51c2VTaGFkb3cmJnNldHRpbmdzLm5hdGl2ZVNoYWRvdztzZXR0aW5ncy51c2VQb2x5ZmlsbFByb3RvPSFzZXR0aW5ncy51c2VOYXRpdmVDdXN0b21FbGVtZW50cyYmIU9iamVjdC5fX3Byb3RvX187c2V0dGluZ3MuaGFzTmF0aXZlQ1NTUHJvcGVydGllcz0hbmF2aWdhdG9yLnVzZXJBZ2VudC5tYXRjaCgvQXBwbGVXZWJLaXRcLzYwMXxFZGdlXC8xNS8pJiZ3aW5kb3cuQ1NTJiZDU1Muc3VwcG9ydHMmJkNTUy5zdXBwb3J0cygnYm94LXNoYWRvdycsJzAgMCAwIHZhcigtLWZvbyknKTtzZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzPXNldHRpbmdzLmhhc05hdGl2ZUNTU1Byb3BlcnRpZXMmJnNldHRpbmdzLmxhenlSZWdpc3RlciYmc2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcztzZXR0aW5ncy5pc0lFPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goJ1RyaWRlbnQnKTtzZXR0aW5ncy5wYXNzaXZlVG91Y2hHZXN0dXJlcz1zZXR0aW5ncy5wYXNzaXZlVG91Y2hHZXN0dXJlc3x8ZmFsc2U7cmV0dXJuIHNldHRpbmdzO30oKX07KGZ1bmN0aW9uKCl7dmFyIHVzZXJQb2x5bWVyPXdpbmRvdy5Qb2x5bWVyO3dpbmRvdy5Qb2x5bWVyPWZ1bmN0aW9uKHByb3RvdHlwZSl7aWYodHlwZW9mIHByb3RvdHlwZT09PSdmdW5jdGlvbicpe3Byb3RvdHlwZT1wcm90b3R5cGUucHJvdG90eXBlO30KaWYoIXByb3RvdHlwZSl7cHJvdG90eXBlPXt9O30KcHJvdG90eXBlPWRlc3VnYXIocHJvdG90eXBlKTt2YXIgY3VzdG9tQ3Rvcj1wcm90b3R5cGU9PT1wcm90b3R5cGUuY29uc3RydWN0b3IucHJvdG90eXBlP3Byb3RvdHlwZS5jb25zdHJ1Y3RvcjpudWxsO3ZhciBvcHRpb25zPXtwcm90b3R5cGU6cHJvdG90eXBlfTtpZihwcm90b3R5cGUuZXh0ZW5kcyl7b3B0aW9ucy5leHRlbmRzPXByb3RvdHlwZS5leHRlbmRzO30KUG9seW1lci50ZWxlbWV0cnkuX3JlZ2lzdHJhdGUocHJvdG90eXBlKTt2YXIgY3Rvcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnQocHJvdG90eXBlLmlzLG9wdGlvbnMpO3JldHVybiBjdXN0b21DdG9yfHxjdG9yO307dmFyIGRlc3VnYXI9ZnVuY3Rpb24ocHJvdG90eXBlKXt2YXIgYmFzZT1Qb2x5bWVyLkJhc2U7aWYocHJvdG90eXBlLmV4dGVuZHMpe2Jhc2U9UG9seW1lci5CYXNlLl9nZXRFeHRlbmRlZFByb3RvdHlwZShwcm90b3R5cGUuZXh0ZW5kcyk7fQpwcm90b3R5cGU9UG9seW1lci5CYXNlLmNoYWluT2JqZWN0KHByb3RvdHlwZSxiYXNlKTtwcm90b3R5cGUucmVnaXN0ZXJDYWxsYmFjaygpO3JldHVybiBwcm90b3R5cGU7fTtpZih1c2VyUG9seW1lcil7Zm9yKHZhciBpIGluIHVzZXJQb2x5bWVyKXtQb2x5bWVyW2ldPXVzZXJQb2x5bWVyW2ldO319ClBvbHltZXIuQ2xhc3M9ZnVuY3Rpb24ocHJvdG90eXBlKXtpZighcHJvdG90eXBlLmZhY3RvcnlJbXBsKXtwcm90b3R5cGUuZmFjdG9yeUltcGw9ZnVuY3Rpb24oKXt9O30KcmV0dXJuIGRlc3VnYXIocHJvdG90eXBlKS5jb25zdHJ1Y3Rvcjt9O30oKSk7UG9seW1lci50ZWxlbWV0cnk9e3JlZ2lzdHJhdGlvbnM6W10sX3JlZ0xvZzpmdW5jdGlvbihwcm90b3R5cGUpe2NvbnNvbGUubG9nKCdbJytwcm90b3R5cGUuaXMrJ106IHJlZ2lzdGVyZWQnKTt9LF9yZWdpc3RyYXRlOmZ1bmN0aW9uKHByb3RvdHlwZSl7dGhpcy5yZWdpc3RyYXRpb25zLnB1c2gocHJvdG90eXBlKTtQb2x5bWVyLmxvZyYmdGhpcy5fcmVnTG9nKHByb3RvdHlwZSk7fSxkdW1wUmVnaXN0cmF0aW9uczpmdW5jdGlvbigpe3RoaXMucmVnaXN0cmF0aW9ucy5mb3JFYWNoKHRoaXMuX3JlZ0xvZyk7fX07T2JqZWN0LmRlZmluZVByb3BlcnR5KHdpbmRvdywnY3VycmVudEltcG9ydCcse2VudW1lcmFibGU6dHJ1ZSxjb25maWd1cmFibGU6dHJ1ZSxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHR8fGRvY3VtZW50LmN1cnJlbnRTY3JpcHR8fHt9KS5vd25lckRvY3VtZW50O319KTtQb2x5bWVyLlJlbmRlclN0YXR1cz17X3JlYWR5OmZhbHNlLF9jYWxsYmFja3M6W10sd2hlblJlYWR5OmZ1bmN0aW9uKGNiKXtpZih0aGlzLl9yZWFkeSl7Y2IoKTt9ZWxzZXt0aGlzLl9jYWxsYmFja3MucHVzaChjYik7fX0sX21ha2VSZWFkeTpmdW5jdGlvbigpe3RoaXMuX3JlYWR5PXRydWU7Zm9yKHZhciBpPTA7aTx0aGlzLl9jYWxsYmFja3MubGVuZ3RoO2krKyl7dGhpcy5fY2FsbGJhY2tzW2ldKCk7fQp0aGlzLl9jYWxsYmFja3M9W107fSxfY2F0Y2hGaXJzdFJlbmRlcjpmdW5jdGlvbigpe3JlcXVlc3RBbmltYXRpb25GcmFtZShmdW5jdGlvbigpe1BvbHltZXIuUmVuZGVyU3RhdHVzLl9tYWtlUmVhZHkoKTt9KTt9LF9hZnRlck5leHRSZW5kZXJRdWV1ZTpbXSxfd2FpdGluZ05leHRSZW5kZXI6ZmFsc2UsYWZ0ZXJOZXh0UmVuZGVyOmZ1bmN0aW9uKGVsZW1lbnQsZm4sYXJncyl7dGhpcy5fd2F0Y2hOZXh0UmVuZGVyKCk7dGhpcy5fYWZ0ZXJOZXh0UmVuZGVyUXVldWUucHVzaChbZWxlbWVudCxmbixhcmdzXSk7fSxoYXNSZW5kZXJlZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkeTt9LF93YXRjaE5leHRSZW5kZXI6ZnVuY3Rpb24oKXtpZighdGhpcy5fd2FpdGluZ05leHRSZW5kZXIpe3RoaXMuX3dhaXRpbmdOZXh0UmVuZGVyPXRydWU7dmFyIGZuPWZ1bmN0aW9uKCl7UG9seW1lci5SZW5kZXJTdGF0dXMuX2ZsdXNoTmV4dFJlbmRlcigpO307aWYoIXRoaXMuX3JlYWR5KXt0aGlzLndoZW5SZWFkeShmbik7fWVsc2V7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKGZuKTt9fX0sX2ZsdXNoTmV4dFJlbmRlcjpmdW5jdGlvbigpe3ZhciBzZWxmPXRoaXM7c2V0VGltZW91dChmdW5jdGlvbigpe3NlbGYuX2ZsdXNoUmVuZGVyQ2FsbGJhY2tzKHNlbGYuX2FmdGVyTmV4dFJlbmRlclF1ZXVlKTtzZWxmLl9hZnRlck5leHRSZW5kZXJRdWV1ZT1bXTtzZWxmLl93YWl0aW5nTmV4dFJlbmRlcj1mYWxzZTt9KTt9LF9mbHVzaFJlbmRlckNhbGxiYWNrczpmdW5jdGlvbihjYWxsYmFja3Mpe2Zvcih2YXIgaT0wLGg7aTxjYWxsYmFja3MubGVuZ3RoO2krKyl7aD1jYWxsYmFja3NbaV07aFsxXS5hcHBseShoWzBdLGhbMl18fFBvbHltZXIubmFyKTt9fX07aWYod2luZG93LkhUTUxJbXBvcnRzKXtIVE1MSW1wb3J0cy53aGVuUmVhZHkoZnVuY3Rpb24oKXtQb2x5bWVyLlJlbmRlclN0YXR1cy5fY2F0Y2hGaXJzdFJlbmRlcigpO30pO31lbHNle1BvbHltZXIuUmVuZGVyU3RhdHVzLl9jYXRjaEZpcnN0UmVuZGVyKCk7fQpQb2x5bWVyLkltcG9ydFN0YXR1cz1Qb2x5bWVyLlJlbmRlclN0YXR1cztQb2x5bWVyLkltcG9ydFN0YXR1cy53aGVuTG9hZGVkPVBvbHltZXIuSW1wb3J0U3RhdHVzLndoZW5SZWFkeTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7UG9seW1lci5CYXNlPXtfX2lzUG9seW1lckluc3RhbmNlX186dHJ1ZSxfYWRkRmVhdHVyZTpmdW5jdGlvbihmZWF0dXJlKXt0aGlzLm1peGluKHRoaXMsZmVhdHVyZSk7fSxyZWdpc3RlckNhbGxiYWNrOmZ1bmN0aW9uKCl7aWYoc2V0dGluZ3MubGF6eVJlZ2lzdGVyPT09J21heCcpe2lmKHRoaXMuYmVmb3JlUmVnaXN0ZXIpe3RoaXMuYmVmb3JlUmVnaXN0ZXIoKTt9fWVsc2V7dGhpcy5fZGVzdWdhckJlaGF2aW9ycygpO2Zvcih2YXIgaT0wLGI7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXRoaXMuYmVoYXZpb3JzW2ldO2lmKGIuYmVmb3JlUmVnaXN0ZXIpe2IuYmVmb3JlUmVnaXN0ZXIuY2FsbCh0aGlzKTt9fQppZih0aGlzLmJlZm9yZVJlZ2lzdGVyKXt0aGlzLmJlZm9yZVJlZ2lzdGVyKCk7fX0KdGhpcy5fcmVnaXN0ZXJGZWF0dXJlcygpO2lmKCFzZXR0aW5ncy5sYXp5UmVnaXN0ZXIpe3RoaXMuZW5zdXJlUmVnaXN0ZXJGaW5pc2hlZCgpO319LGNyZWF0ZWRDYWxsYmFjazpmdW5jdGlvbigpe2lmKHNldHRpbmdzLmRpc2FibGVVcGdyYWRlRW5hYmxlZCl7aWYodGhpcy5oYXNBdHRyaWJ1dGUoJ2Rpc2FibGUtdXBncmFkZScpKXt0aGlzLl9wcm9wZXJ0eVNldHRlcj1kaXNhYmxlVXBncmFkZVByb3BlcnR5U2V0dGVyO3RoaXMuX2NvbmZpZ1ZhbHVlPW51bGw7dGhpcy5fX2RhdGFfXz17fTtyZXR1cm47fWVsc2V7dGhpcy5fX2hhc0luaXRpYWxpemVkPXRydWU7fX0KdGhpcy5fX2luaXRpYWxpemUoKTt9LF9faW5pdGlhbGl6ZTpmdW5jdGlvbigpe2lmKCF0aGlzLl9faGFzUmVnaXN0ZXJGaW5pc2hlZCl7dGhpcy5fZW5zdXJlUmVnaXN0ZXJGaW5pc2hlZCh0aGlzLl9fcHJvdG9fXyk7fQpQb2x5bWVyLnRlbGVtZXRyeS5pbnN0YW5jZUNvdW50Kys7dGhpcy5yb290PXRoaXM7Zm9yKHZhciBpPTAsYjtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe2I9dGhpcy5iZWhhdmlvcnNbaV07aWYoYi5jcmVhdGVkKXtiLmNyZWF0ZWQuY2FsbCh0aGlzKTt9fQppZih0aGlzLmNyZWF0ZWQpe3RoaXMuY3JlYXRlZCgpO30KdGhpcy5faW5pdEZlYXR1cmVzKCk7fSxlbnN1cmVSZWdpc3RlckZpbmlzaGVkOmZ1bmN0aW9uKCl7dGhpcy5fZW5zdXJlUmVnaXN0ZXJGaW5pc2hlZCh0aGlzKTt9LF9lbnN1cmVSZWdpc3RlckZpbmlzaGVkOmZ1bmN0aW9uKHByb3RvKXtpZihwcm90by5fX2hhc1JlZ2lzdGVyRmluaXNoZWQhPT1wcm90by5pc3x8IXByb3RvLmlzKXtpZihzZXR0aW5ncy5sYXp5UmVnaXN0ZXI9PT0nbWF4Jyl7cHJvdG8uX2Rlc3VnYXJCZWhhdmlvcnMoKTtmb3IodmFyIGk9MCxiO2k8cHJvdG8uYmVoYXZpb3JzLmxlbmd0aDtpKyspe2I9cHJvdG8uYmVoYXZpb3JzW2ldO2lmKGIuYmVmb3JlUmVnaXN0ZXIpe2IuYmVmb3JlUmVnaXN0ZXIuY2FsbChwcm90byk7fX19CnByb3RvLl9faGFzUmVnaXN0ZXJGaW5pc2hlZD1wcm90by5pcztpZihwcm90by5fZmluaXNoUmVnaXN0ZXJGZWF0dXJlcyl7cHJvdG8uX2ZpbmlzaFJlZ2lzdGVyRmVhdHVyZXMoKTt9CmZvcih2YXIgaj0wLHBiO2o8cHJvdG8uYmVoYXZpb3JzLmxlbmd0aDtqKyspe3BiPXByb3RvLmJlaGF2aW9yc1tqXTtpZihwYi5yZWdpc3RlcmVkKXtwYi5yZWdpc3RlcmVkLmNhbGwocHJvdG8pO319CmlmKHByb3RvLnJlZ2lzdGVyZWQpe3Byb3RvLnJlZ2lzdGVyZWQoKTt9CmlmKHNldHRpbmdzLnVzZVBvbHlmaWxsUHJvdG8mJnByb3RvIT09dGhpcyl7cHJvdG8uZXh0ZW5kKHRoaXMscHJvdG8pO319fSxhdHRhY2hlZENhbGxiYWNrOmZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztQb2x5bWVyLlJlbmRlclN0YXR1cy53aGVuUmVhZHkoZnVuY3Rpb24oKXtzZWxmLmlzQXR0YWNoZWQ9dHJ1ZTtmb3IodmFyIGk9MCxiO2k8c2VsZi5iZWhhdmlvcnMubGVuZ3RoO2krKyl7Yj1zZWxmLmJlaGF2aW9yc1tpXTtpZihiLmF0dGFjaGVkKXtiLmF0dGFjaGVkLmNhbGwoc2VsZik7fX0KaWYoc2VsZi5hdHRhY2hlZCl7c2VsZi5hdHRhY2hlZCgpO319KTt9LGRldGFjaGVkQ2FsbGJhY2s6ZnVuY3Rpb24oKXt2YXIgc2VsZj10aGlzO1BvbHltZXIuUmVuZGVyU3RhdHVzLndoZW5SZWFkeShmdW5jdGlvbigpe3NlbGYuaXNBdHRhY2hlZD1mYWxzZTtmb3IodmFyIGk9MCxiO2k8c2VsZi5iZWhhdmlvcnMubGVuZ3RoO2krKyl7Yj1zZWxmLmJlaGF2aW9yc1tpXTtpZihiLmRldGFjaGVkKXtiLmRldGFjaGVkLmNhbGwoc2VsZik7fX0KaWYoc2VsZi5kZXRhY2hlZCl7c2VsZi5kZXRhY2hlZCgpO319KTt9LGF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjazpmdW5jdGlvbihuYW1lLG9sZFZhbHVlLG5ld1ZhbHVlKXt0aGlzLl9hdHRyaWJ1dGVDaGFuZ2VkSW1wbChuYW1lKTtmb3IodmFyIGk9MCxiO2k8dGhpcy5iZWhhdmlvcnMubGVuZ3RoO2krKyl7Yj10aGlzLmJlaGF2aW9yc1tpXTtpZihiLmF0dHJpYnV0ZUNoYW5nZWQpe2IuYXR0cmlidXRlQ2hhbmdlZC5jYWxsKHRoaXMsbmFtZSxvbGRWYWx1ZSxuZXdWYWx1ZSk7fX0KaWYodGhpcy5hdHRyaWJ1dGVDaGFuZ2VkKXt0aGlzLmF0dHJpYnV0ZUNoYW5nZWQobmFtZSxvbGRWYWx1ZSxuZXdWYWx1ZSk7fX0sX2F0dHJpYnV0ZUNoYW5nZWRJbXBsOmZ1bmN0aW9uKG5hbWUpe3RoaXMuX3NldEF0dHJpYnV0ZVRvUHJvcGVydHkodGhpcyxuYW1lKTt9LGV4dGVuZDpmdW5jdGlvbih0YXJnZXQsc291cmNlKXtpZih0YXJnZXQmJnNvdXJjZSl7dmFyIG4kPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHNvdXJjZSk7Zm9yKHZhciBpPTAsbjtpPG4kLmxlbmd0aCYmKG49biRbaV0pO2krKyl7dGhpcy5jb3B5T3duUHJvcGVydHkobixzb3VyY2UsdGFyZ2V0KTt9fQpyZXR1cm4gdGFyZ2V0fHxzb3VyY2U7fSxtaXhpbjpmdW5jdGlvbih0YXJnZXQsc291cmNlKXtmb3IodmFyIGkgaW4gc291cmNlKXt0YXJnZXRbaV09c291cmNlW2ldO30KcmV0dXJuIHRhcmdldDt9LGNvcHlPd25Qcm9wZXJ0eTpmdW5jdGlvbihuYW1lLHNvdXJjZSx0YXJnZXQpe3ZhciBwZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHNvdXJjZSxuYW1lKTtpZihwZCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRhcmdldCxuYW1lLHBkKTt9fSxfbG9nZ2VyOmZ1bmN0aW9uKGxldmVsLGFyZ3Mpe2lmKGFyZ3MubGVuZ3RoPT09MSYmQXJyYXkuaXNBcnJheShhcmdzWzBdKSl7YXJncz1hcmdzWzBdO30Kc3dpdGNoKGxldmVsKXtjYXNlJ2xvZyc6Y2FzZSd3YXJuJzpjYXNlJ2Vycm9yJzpjb25zb2xlW2xldmVsXS5hcHBseShjb25zb2xlLGFyZ3MpO2JyZWFrO319LF9sb2c6ZnVuY3Rpb24oKXt2YXIgYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7dGhpcy5fbG9nZ2VyKCdsb2cnLGFyZ3MpO30sX3dhcm46ZnVuY3Rpb24oKXt2YXIgYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMCk7dGhpcy5fbG9nZ2VyKCd3YXJuJyxhcmdzKTt9LF9lcnJvcjpmdW5jdGlvbigpe3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKTt0aGlzLl9sb2dnZXIoJ2Vycm9yJyxhcmdzKTt9LF9sb2dmOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvZ1ByZWZpeC5jb25jYXQodGhpcy5pcykuY29uY2F0KEFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywwKSk7fX07UG9seW1lci5CYXNlLl9sb2dQcmVmaXg9ZnVuY3Rpb24oKXt2YXIgY29sb3I9d2luZG93LmNocm9tZSYmIS9lZGdlL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KXx8L2ZpcmVmb3gvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3JldHVybiBjb2xvcj9bJyVjWyVzOjolc106JywnZm9udC13ZWlnaHQ6IGJvbGQ7IGJhY2tncm91bmQtY29sb3I6I0VFRUUwMDsnXTpbJ1slczo6JXNdOiddO30oKTtQb2x5bWVyLkJhc2UuY2hhaW5PYmplY3Q9ZnVuY3Rpb24ob2JqZWN0LGluaGVyaXRlZCl7aWYob2JqZWN0JiZpbmhlcml0ZWQmJm9iamVjdCE9PWluaGVyaXRlZCl7aWYoIU9iamVjdC5fX3Byb3RvX18pe29iamVjdD1Qb2x5bWVyLkJhc2UuZXh0ZW5kKE9iamVjdC5jcmVhdGUoaW5oZXJpdGVkKSxvYmplY3QpO30Kb2JqZWN0Ll9fcHJvdG9fXz1pbmhlcml0ZWQ7fQpyZXR1cm4gb2JqZWN0O307UG9seW1lci5CYXNlPVBvbHltZXIuQmFzZS5jaGFpbk9iamVjdChQb2x5bWVyLkJhc2UsSFRNTEVsZW1lbnQucHJvdG90eXBlKTtQb2x5bWVyLkJhc2VEZXNjcmlwdG9ycz17fTt2YXIgZGlzYWJsZVVwZ3JhZGVQcm9wZXJ0eVNldHRlcjtpZihzZXR0aW5ncy5kaXNhYmxlVXBncmFkZUVuYWJsZWQpe2Rpc2FibGVVcGdyYWRlUHJvcGVydHlTZXR0ZXI9ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUpe3RoaXMuX19kYXRhX19bcHJvcGVydHldPXZhbHVlO307dmFyIG9yaWdBdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2s9UG9seW1lci5CYXNlLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjaztQb2x5bWVyLkJhc2UuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrPWZ1bmN0aW9uKG5hbWUsb2xkVmFsdWUsbmV3VmFsdWUpe2lmKCF0aGlzLl9faGFzSW5pdGlhbGl6ZWQmJm5hbWU9PT0nZGlzYWJsZS11cGdyYWRlJyl7dGhpcy5fX2hhc0luaXRpYWxpemVkPXRydWU7dGhpcy5fcHJvcGVydHlTZXR0ZXI9UG9seW1lci5CaW5kLl9tb2RlbEFwaS5fcHJvcGVydHlTZXR0ZXI7dGhpcy5fY29uZmlnVmFsdWU9UG9seW1lci5CYXNlLl9jb25maWdWYWx1ZTt0aGlzLl9faW5pdGlhbGl6ZSgpO30Kb3JpZ0F0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjay5jYWxsKHRoaXMsbmFtZSxvbGRWYWx1ZSxuZXdWYWx1ZSk7fTt9CmlmKHdpbmRvdy5DdXN0b21FbGVtZW50cyl7UG9seW1lci5pbnN0YW5jZW9mPUN1c3RvbUVsZW1lbnRzLmluc3RhbmNlb2Y7fWVsc2V7UG9seW1lci5pbnN0YW5jZW9mPWZ1bmN0aW9uKG9iaixjdG9yKXtyZXR1cm4gb2JqIGluc3RhbmNlb2YgY3Rvcjt9O30KUG9seW1lci5pc0luc3RhbmNlPWZ1bmN0aW9uKG9iail7cmV0dXJuIEJvb2xlYW4ob2JqJiZvYmouX19pc1BvbHltZXJJbnN0YW5jZV9fKTt9O1BvbHltZXIudGVsZW1ldHJ5Lmluc3RhbmNlQ291bnQ9MDt9KCkpOyhmdW5jdGlvbigpe3ZhciBtb2R1bGVzPXt9O3ZhciBsY01vZHVsZXM9e307dmFyIGZpbmRNb2R1bGU9ZnVuY3Rpb24oaWQpe3JldHVybiBtb2R1bGVzW2lkXXx8bGNNb2R1bGVzW2lkLnRvTG93ZXJDYXNlKCldO307dmFyIERvbU1vZHVsZT1mdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkb20tbW9kdWxlJyk7fTtEb21Nb2R1bGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoSFRNTEVsZW1lbnQucHJvdG90eXBlKTtQb2x5bWVyLkJhc2UubWl4aW4oRG9tTW9kdWxlLnByb3RvdHlwZSx7Y3JlYXRlZENhbGxiYWNrOmZ1bmN0aW9uKCl7dGhpcy5yZWdpc3RlcigpO30scmVnaXN0ZXI6ZnVuY3Rpb24oaWQpe2lkPWlkfHx0aGlzLmlkfHx0aGlzLmdldEF0dHJpYnV0ZSgnbmFtZScpfHx0aGlzLmdldEF0dHJpYnV0ZSgnaXMnKTtpZihpZCl7dGhpcy5pZD1pZDttb2R1bGVzW2lkXT10aGlzO2xjTW9kdWxlc1tpZC50b0xvd2VyQ2FzZSgpXT10aGlzO319LGltcG9ydDpmdW5jdGlvbihpZCxzZWxlY3Rvcil7aWYoaWQpe3ZhciBtPWZpbmRNb2R1bGUoaWQpO2lmKCFtKXtmb3JjZURvbU1vZHVsZXNVcGdyYWRlKCk7bT1maW5kTW9kdWxlKGlkKTt9CmlmKG0mJnNlbGVjdG9yKXttPW0ucXVlcnlTZWxlY3RvcihzZWxlY3Rvcik7fQpyZXR1cm4gbTt9fX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb21Nb2R1bGUucHJvdG90eXBlLCdjb25zdHJ1Y3Rvcicse3ZhbHVlOkRvbU1vZHVsZSxjb25maWd1cmFibGU6dHJ1ZSx3cml0YWJsZTp0cnVlfSk7dmFyIGNlUG9seWZpbGw9d2luZG93LkN1c3RvbUVsZW1lbnRzJiYhQ3VzdG9tRWxlbWVudHMudXNlTmF0aXZlO2RvY3VtZW50LnJlZ2lzdGVyRWxlbWVudCgnZG9tLW1vZHVsZScsRG9tTW9kdWxlKTtmdW5jdGlvbiBmb3JjZURvbU1vZHVsZXNVcGdyYWRlKCl7aWYoY2VQb2x5ZmlsbCl7dmFyIHNjcmlwdD1kb2N1bWVudC5fY3VycmVudFNjcmlwdHx8ZG9jdW1lbnQuY3VycmVudFNjcmlwdDt2YXIgZG9jPXNjcmlwdCYmc2NyaXB0Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50O3ZhciBtb2R1bGVzPWRvYy5xdWVyeVNlbGVjdG9yQWxsKCdkb20tbW9kdWxlJyk7Zm9yKHZhciBpPW1vZHVsZXMubGVuZ3RoLTEsbTtpPj0wJiYobT1tb2R1bGVzW2ldKTtpLS0pe2lmKG0uX191cGdyYWRlZF9fKXtyZXR1cm47fWVsc2V7Q3VzdG9tRWxlbWVudHMudXBncmFkZShtKTt9fX19fSgpKTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwSXM6ZnVuY3Rpb24oKXtpZighdGhpcy5pcyl7dmFyIG1vZHVsZT0oZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHR8fGRvY3VtZW50LmN1cnJlbnRTY3JpcHQpLnBhcmVudE5vZGU7aWYobW9kdWxlLmxvY2FsTmFtZT09PSdkb20tbW9kdWxlJyl7dmFyIGlkPW1vZHVsZS5pZHx8bW9kdWxlLmdldEF0dHJpYnV0ZSgnbmFtZScpfHxtb2R1bGUuZ2V0QXR0cmlidXRlKCdpcycpO3RoaXMuaXM9aWQ7fX0KaWYodGhpcy5pcyl7dGhpcy5pcz10aGlzLmlzLnRvTG93ZXJDYXNlKCk7fX19KTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe2JlaGF2aW9yczpbXSxfZGVzdWdhckJlaGF2aW9yczpmdW5jdGlvbigpe2lmKHRoaXMuYmVoYXZpb3JzLmxlbmd0aCl7dGhpcy5iZWhhdmlvcnM9dGhpcy5fZGVzdWdhclNvbWVCZWhhdmlvcnModGhpcy5iZWhhdmlvcnMpO319LF9kZXN1Z2FyU29tZUJlaGF2aW9yczpmdW5jdGlvbihiZWhhdmlvcnMpe3ZhciBiZWhhdmlvclNldD1bXTtiZWhhdmlvcnM9dGhpcy5fZmxhdHRlbkJlaGF2aW9yc0xpc3QoYmVoYXZpb3JzKTtmb3IodmFyIGk9YmVoYXZpb3JzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgYj1iZWhhdmlvcnNbaV07aWYoYmVoYXZpb3JTZXQuaW5kZXhPZihiKT09PS0xKXt0aGlzLl9taXhpbkJlaGF2aW9yKGIpO2JlaGF2aW9yU2V0LnVuc2hpZnQoYik7fX0KcmV0dXJuIGJlaGF2aW9yU2V0O30sX2ZsYXR0ZW5CZWhhdmlvcnNMaXN0OmZ1bmN0aW9uKGJlaGF2aW9ycyl7dmFyIGZsYXQ9W107Zm9yKHZhciBpPTA7aTxiZWhhdmlvcnMubGVuZ3RoO2krKyl7dmFyIGI9YmVoYXZpb3JzW2ldO2lmKGIgaW5zdGFuY2VvZiBBcnJheSl7ZmxhdD1mbGF0LmNvbmNhdCh0aGlzLl9mbGF0dGVuQmVoYXZpb3JzTGlzdChiKSk7fWVsc2UgaWYoYil7ZmxhdC5wdXNoKGIpO31lbHNle3RoaXMuX3dhcm4odGhpcy5fbG9nZignX2ZsYXR0ZW5CZWhhdmlvcnNMaXN0JywnYmVoYXZpb3IgaXMgbnVsbCwgY2hlY2sgZm9yIG1pc3Npbmcgb3IgNDA0IGltcG9ydCcpKTt9fQpyZXR1cm4gZmxhdDt9LF9taXhpbkJlaGF2aW9yOmZ1bmN0aW9uKGIpe3ZhciBuJD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhiKTt2YXIgdXNlQXNzaWdubWVudD1iLl9ub0FjY2Vzc29ycztmb3IodmFyIGk9MCxuO2k8biQubGVuZ3RoJiYobj1uJFtpXSk7aSsrKXtpZighUG9seW1lci5CYXNlLl9iZWhhdmlvclByb3BlcnRpZXNbbl0mJiF0aGlzLmhhc093blByb3BlcnR5KG4pKXtpZih1c2VBc3NpZ25tZW50KXt0aGlzW25dPWJbbl07fWVsc2V7dGhpcy5jb3B5T3duUHJvcGVydHkobixiLHRoaXMpO319fX0sX3ByZXBCZWhhdmlvcnM6ZnVuY3Rpb24oKXt0aGlzLl9wcmVwRmxhdHRlbmVkQmVoYXZpb3JzKHRoaXMuYmVoYXZpb3JzKTt9LF9wcmVwRmxhdHRlbmVkQmVoYXZpb3JzOmZ1bmN0aW9uKGJlaGF2aW9ycyl7Zm9yKHZhciBpPTAsbD1iZWhhdmlvcnMubGVuZ3RoO2k8bDtpKyspe3RoaXMuX3ByZXBCZWhhdmlvcihiZWhhdmlvcnNbaV0pO30KdGhpcy5fcHJlcEJlaGF2aW9yKHRoaXMpO30sX21hcnNoYWxCZWhhdmlvcnM6ZnVuY3Rpb24oKXtmb3IodmFyIGk9MDtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe3RoaXMuX21hcnNoYWxCZWhhdmlvcih0aGlzLmJlaGF2aW9yc1tpXSk7fQp0aGlzLl9tYXJzaGFsQmVoYXZpb3IodGhpcyk7fX0pO1BvbHltZXIuQmFzZS5fYmVoYXZpb3JQcm9wZXJ0aWVzPXtob3N0QXR0cmlidXRlczp0cnVlLGJlZm9yZVJlZ2lzdGVyOnRydWUscmVnaXN0ZXJlZDp0cnVlLHByb3BlcnRpZXM6dHJ1ZSxvYnNlcnZlcnM6dHJ1ZSxsaXN0ZW5lcnM6dHJ1ZSxjcmVhdGVkOnRydWUsYXR0YWNoZWQ6dHJ1ZSxkZXRhY2hlZDp0cnVlLGF0dHJpYnV0ZUNoYW5nZWQ6dHJ1ZSxyZWFkeTp0cnVlLF9ub0FjY2Vzc29yczp0cnVlfTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19nZXRFeHRlbmRlZFByb3RvdHlwZTpmdW5jdGlvbih0YWcpe3JldHVybiB0aGlzLl9nZXRFeHRlbmRlZE5hdGl2ZVByb3RvdHlwZSh0YWcpO30sX25hdGl2ZVByb3RvdHlwZXM6e30sX2dldEV4dGVuZGVkTmF0aXZlUHJvdG90eXBlOmZ1bmN0aW9uKHRhZyl7dmFyIHA9dGhpcy5fbmF0aXZlUHJvdG90eXBlc1t0YWddO2lmKCFwKXtwPU9iamVjdC5jcmVhdGUodGhpcy5nZXROYXRpdmVQcm90b3R5cGUodGFnKSk7dmFyIHAkPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKFBvbHltZXIuQmFzZSk7Zm9yKHZhciBpPTAsbjtpPHAkLmxlbmd0aCYmKG49cCRbaV0pO2krKyl7aWYoIVBvbHltZXIuQmFzZURlc2NyaXB0b3JzW25dKXtwW25dPVBvbHltZXIuQmFzZVtuXTt9fQpPYmplY3QuZGVmaW5lUHJvcGVydGllcyhwLFBvbHltZXIuQmFzZURlc2NyaXB0b3JzKTt0aGlzLl9uYXRpdmVQcm90b3R5cGVzW3RhZ109cDt9CnJldHVybiBwO30sZ2V0TmF0aXZlUHJvdG90eXBlOmZ1bmN0aW9uKHRhZyl7cmV0dXJuIE9iamVjdC5nZXRQcm90b3R5cGVPZihkb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZykpO319KTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwQ29uc3RydWN0b3I6ZnVuY3Rpb24oKXt0aGlzLl9mYWN0b3J5QXJncz10aGlzLmV4dGVuZHM/W3RoaXMuZXh0ZW5kcyx0aGlzLmlzXTpbdGhpcy5pc107dmFyIGN0b3I9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmFjdG9yeShhcmd1bWVudHMpO307aWYodGhpcy5oYXNPd25Qcm9wZXJ0eSgnZXh0ZW5kcycpKXtjdG9yLmV4dGVuZHM9dGhpcy5leHRlbmRzO30KT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJ2NvbnN0cnVjdG9yJyx7dmFsdWU6Y3Rvcix3cml0YWJsZTp0cnVlLGNvbmZpZ3VyYWJsZTp0cnVlfSk7Y3Rvci5wcm90b3R5cGU9dGhpczt9LF9mYWN0b3J5OmZ1bmN0aW9uKGFyZ3Mpe3ZhciBlbHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudC5hcHBseShkb2N1bWVudCx0aGlzLl9mYWN0b3J5QXJncyk7aWYodGhpcy5mYWN0b3J5SW1wbCl7dGhpcy5mYWN0b3J5SW1wbC5hcHBseShlbHQsYXJncyk7fQpyZXR1cm4gZWx0O319KTtQb2x5bWVyLm5vYj1PYmplY3QuY3JlYXRlKG51bGwpO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7Z2V0UHJvcGVydHlJbmZvOmZ1bmN0aW9uKHByb3BlcnR5KXt2YXIgaW5mbz10aGlzLl9nZXRQcm9wZXJ0eUluZm8ocHJvcGVydHksdGhpcy5wcm9wZXJ0aWVzKTtpZighaW5mbyl7Zm9yKHZhciBpPTA7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtpbmZvPXRoaXMuX2dldFByb3BlcnR5SW5mbyhwcm9wZXJ0eSx0aGlzLmJlaGF2aW9yc1tpXS5wcm9wZXJ0aWVzKTtpZihpbmZvKXtyZXR1cm4gaW5mbzt9fX0KcmV0dXJuIGluZm98fFBvbHltZXIubm9iO30sX2dldFByb3BlcnR5SW5mbzpmdW5jdGlvbihwcm9wZXJ0eSxwcm9wZXJ0aWVzKXt2YXIgcD1wcm9wZXJ0aWVzJiZwcm9wZXJ0aWVzW3Byb3BlcnR5XTtpZih0eXBlb2YgcD09PSdmdW5jdGlvbicpe3A9cHJvcGVydGllc1twcm9wZXJ0eV09e3R5cGU6cH07fQppZihwKXtwLmRlZmluZWQ9dHJ1ZTt9CnJldHVybiBwO30sX3ByZXBQcm9wZXJ0eUluZm86ZnVuY3Rpb24oKXt0aGlzLl9wcm9wZXJ0eUluZm89e307Zm9yKHZhciBpPTA7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXt0aGlzLl9hZGRQcm9wZXJ0eUluZm8odGhpcy5fcHJvcGVydHlJbmZvLHRoaXMuYmVoYXZpb3JzW2ldLnByb3BlcnRpZXMpO30KdGhpcy5fYWRkUHJvcGVydHlJbmZvKHRoaXMuX3Byb3BlcnR5SW5mbyx0aGlzLnByb3BlcnRpZXMpO3RoaXMuX2FkZFByb3BlcnR5SW5mbyh0aGlzLl9wcm9wZXJ0eUluZm8sdGhpcy5fcHJvcGVydHlFZmZlY3RzKTt9LF9hZGRQcm9wZXJ0eUluZm86ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7aWYoc291cmNlKXt2YXIgdCxzO2Zvcih2YXIgaSBpbiBzb3VyY2Upe3Q9dGFyZ2V0W2ldO3M9c291cmNlW2ldO2lmKGlbMF09PT0nXycmJiFzLnJlYWRPbmx5KXtjb250aW51ZTt9CmlmKCF0YXJnZXRbaV0pe3RhcmdldFtpXT17dHlwZTp0eXBlb2Ygcz09PSdmdW5jdGlvbic/czpzLnR5cGUscmVhZE9ubHk6cy5yZWFkT25seSxhdHRyaWJ1dGU6UG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShpKX07fWVsc2V7aWYoIXQudHlwZSl7dC50eXBlPXMudHlwZTt9CmlmKCF0LnJlYWRPbmx5KXt0LnJlYWRPbmx5PXMucmVhZE9ubHk7fX19fX19KTsoZnVuY3Rpb24oKXt2YXIgcHJvcGVydGllc0Rlc2M9e2NvbmZpZ3VyYWJsZTp0cnVlLHdyaXRhYmxlOnRydWUsZW51bWVyYWJsZTp0cnVlLHZhbHVlOnt9fTtQb2x5bWVyLkJhc2VEZXNjcmlwdG9ycy5wcm9wZXJ0aWVzPXByb3BlcnRpZXNEZXNjO09iamVjdC5kZWZpbmVQcm9wZXJ0eShQb2x5bWVyLkJhc2UsJ3Byb3BlcnRpZXMnLHByb3BlcnRpZXNEZXNjKTt9KCkpO1BvbHltZXIuQ2FzZU1hcD17X2Nhc2VNYXA6e30sX3J4OntkYXNoVG9DYW1lbDovLVthLXpdL2csY2FtZWxUb0Rhc2g6LyhbQS1aXSkvZ30sZGFzaFRvQ2FtZWxDYXNlOmZ1bmN0aW9uKGRhc2gpe3JldHVybiB0aGlzLl9jYXNlTWFwW2Rhc2hdfHwodGhpcy5fY2FzZU1hcFtkYXNoXT1kYXNoLmluZGV4T2YoJy0nKTwwP2Rhc2g6ZGFzaC5yZXBsYWNlKHRoaXMuX3J4LmRhc2hUb0NhbWVsLGZ1bmN0aW9uKG0pe3JldHVybiBtWzFdLnRvVXBwZXJDYXNlKCk7fSkpO30sY2FtZWxUb0Rhc2hDYXNlOmZ1bmN0aW9uKGNhbWVsKXtyZXR1cm4gdGhpcy5fY2FzZU1hcFtjYW1lbF18fCh0aGlzLl9jYXNlTWFwW2NhbWVsXT1jYW1lbC5yZXBsYWNlKHRoaXMuX3J4LmNhbWVsVG9EYXNoLCctJDEnKS50b0xvd2VyQ2FzZSgpKTt9fTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19hZGRIb3N0QXR0cmlidXRlczpmdW5jdGlvbihhdHRyaWJ1dGVzKXtpZighdGhpcy5fYWdncmVnYXRlZEF0dHJpYnV0ZXMpe3RoaXMuX2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVzPXt9O30KaWYoYXR0cmlidXRlcyl7dGhpcy5taXhpbih0aGlzLl9hZ2dyZWdhdGVkQXR0cmlidXRlcyxhdHRyaWJ1dGVzKTt9fSxfbWFyc2hhbEhvc3RBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fYWdncmVnYXRlZEF0dHJpYnV0ZXMpe3RoaXMuX2FwcGx5QXR0cmlidXRlcyh0aGlzLHRoaXMuX2FnZ3JlZ2F0ZWRBdHRyaWJ1dGVzKTt9fSxfYXBwbHlBdHRyaWJ1dGVzOmZ1bmN0aW9uKG5vZGUsYXR0ciQpe2Zvcih2YXIgbiBpbiBhdHRyJCl7aWYoIXRoaXMuaGFzQXR0cmlidXRlKG4pJiZuIT09J2NsYXNzJyl7dmFyIHY9YXR0ciRbbl07dGhpcy5zZXJpYWxpemVWYWx1ZVRvQXR0cmlidXRlKHYsbix0aGlzKTt9fX0sX21hcnNoYWxBdHRyaWJ1dGVzOmZ1bmN0aW9uKCl7dGhpcy5fdGFrZUF0dHJpYnV0ZXNUb01vZGVsKHRoaXMpO30sX3Rha2VBdHRyaWJ1dGVzVG9Nb2RlbDpmdW5jdGlvbihtb2RlbCl7aWYodGhpcy5oYXNBdHRyaWJ1dGVzKCkpe2Zvcih2YXIgaSBpbiB0aGlzLl9wcm9wZXJ0eUluZm8pe3ZhciBpbmZvPXRoaXMuX3Byb3BlcnR5SW5mb1tpXTtpZih0aGlzLmhhc0F0dHJpYnV0ZShpbmZvLmF0dHJpYnV0ZSkpe3RoaXMuX3NldEF0dHJpYnV0ZVRvUHJvcGVydHkobW9kZWwsaW5mby5hdHRyaWJ1dGUsaSxpbmZvKTt9fX19LF9zZXRBdHRyaWJ1dGVUb1Byb3BlcnR5OmZ1bmN0aW9uKG1vZGVsLGF0dHJpYnV0ZSxwcm9wZXJ0eSxpbmZvKXtpZighdGhpcy5fc2VyaWFsaXppbmcpe3Byb3BlcnR5PXByb3BlcnR5fHxQb2x5bWVyLkNhc2VNYXAuZGFzaFRvQ2FtZWxDYXNlKGF0dHJpYnV0ZSk7aW5mbz1pbmZvfHx0aGlzLl9wcm9wZXJ0eUluZm8mJnRoaXMuX3Byb3BlcnR5SW5mb1twcm9wZXJ0eV07aWYoaW5mbyYmIWluZm8ucmVhZE9ubHkpe3ZhciB2PXRoaXMuZ2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7bW9kZWxbcHJvcGVydHldPXRoaXMuZGVzZXJpYWxpemUodixpbmZvLnR5cGUpO319fSxfc2VyaWFsaXppbmc6ZmFsc2UscmVmbGVjdFByb3BlcnR5VG9BdHRyaWJ1dGU6ZnVuY3Rpb24ocHJvcGVydHksYXR0cmlidXRlLHZhbHVlKXt0aGlzLl9zZXJpYWxpemluZz10cnVlO3ZhbHVlPXZhbHVlPT09dW5kZWZpbmVkP3RoaXNbcHJvcGVydHldOnZhbHVlO3RoaXMuc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSxhdHRyaWJ1dGV8fFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocHJvcGVydHkpKTt0aGlzLl9zZXJpYWxpemluZz1mYWxzZTt9LHNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGU6ZnVuY3Rpb24odmFsdWUsYXR0cmlidXRlLG5vZGUpe3ZhciBzdHI9dGhpcy5zZXJpYWxpemUodmFsdWUpO25vZGU9bm9kZXx8dGhpcztpZihzdHI9PT11bmRlZmluZWQpe25vZGUucmVtb3ZlQXR0cmlidXRlKGF0dHJpYnV0ZSk7fWVsc2V7bm9kZS5zZXRBdHRyaWJ1dGUoYXR0cmlidXRlLHN0cik7fX0sZGVzZXJpYWxpemU6ZnVuY3Rpb24odmFsdWUsdHlwZSl7c3dpdGNoKHR5cGUpe2Nhc2UgTnVtYmVyOnZhbHVlPU51bWJlcih2YWx1ZSk7YnJlYWs7Y2FzZSBCb29sZWFuOnZhbHVlPXZhbHVlIT1udWxsO2JyZWFrO2Nhc2UgT2JqZWN0OnRyeXt2YWx1ZT1KU09OLnBhcnNlKHZhbHVlKTt9Y2F0Y2goeCl7fQpicmVhaztjYXNlIEFycmF5OnRyeXt2YWx1ZT1KU09OLnBhcnNlKHZhbHVlKTt9Y2F0Y2goeCl7dmFsdWU9bnVsbDtjb25zb2xlLndhcm4oJ1BvbHltZXI6OkF0dHJpYnV0ZXM6IGNvdWxkbmB0IGRlY29kZSBBcnJheSBhcyBKU09OJyk7fQpicmVhaztjYXNlIERhdGU6dmFsdWU9bmV3IERhdGUodmFsdWUpO2JyZWFrO2Nhc2UgU3RyaW5nOmRlZmF1bHQ6YnJlYWs7fQpyZXR1cm4gdmFsdWU7fSxzZXJpYWxpemU6ZnVuY3Rpb24odmFsdWUpe3N3aXRjaCh0eXBlb2YgdmFsdWUpe2Nhc2UnYm9vbGVhbic6cmV0dXJuIHZhbHVlPycnOnVuZGVmaW5lZDtjYXNlJ29iamVjdCc6aWYodmFsdWUgaW5zdGFuY2VvZiBEYXRlKXtyZXR1cm4gdmFsdWUudG9TdHJpbmcoKTt9ZWxzZSBpZih2YWx1ZSl7dHJ5e3JldHVybiBKU09OLnN0cmluZ2lmeSh2YWx1ZSk7fWNhdGNoKHgpe3JldHVybicnO319CmRlZmF1bHQ6cmV0dXJuIHZhbHVlIT1udWxsP3ZhbHVlOnVuZGVmaW5lZDt9fX0pO1BvbHltZXIudmVyc2lvbj0iMS4xMS4zIjtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19yZWdpc3RlckZlYXR1cmVzOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcElzKCk7dGhpcy5fcHJlcEJlaGF2aW9ycygpO3RoaXMuX3ByZXBDb25zdHJ1Y3RvcigpO3RoaXMuX3ByZXBQcm9wZXJ0eUluZm8oKTt9LF9wcmVwQmVoYXZpb3I6ZnVuY3Rpb24oYil7dGhpcy5fYWRkSG9zdEF0dHJpYnV0ZXMoYi5ob3N0QXR0cmlidXRlcyk7fSxfbWFyc2hhbEJlaGF2aW9yOmZ1bmN0aW9uKGIpe30sX2luaXRGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX21hcnNoYWxIb3N0QXR0cmlidXRlcygpO3RoaXMuX21hcnNoYWxCZWhhdmlvcnMoKTt9fSk7KGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcmVzb2x2ZUNzcyhjc3NUZXh0LG93bmVyRG9jdW1lbnQpe3JldHVybiBjc3NUZXh0LnJlcGxhY2UoQ1NTX1VSTF9SWCxmdW5jdGlvbihtLHByZSx1cmwscG9zdCl7cmV0dXJuIHByZSsnXCcnK3Jlc29sdmUodXJsLnJlcGxhY2UoL1siJ10vZywnJyksb3duZXJEb2N1bWVudCkrJ1wnJytwb3N0O30pO30KZnVuY3Rpb24gcmVzb2x2ZUF0dHJzKGVsZW1lbnQsb3duZXJEb2N1bWVudCl7Zm9yKHZhciBuYW1lIGluIFVSTF9BVFRSUyl7dmFyIGEkPVVSTF9BVFRSU1tuYW1lXTtmb3IodmFyIGk9MCxsPWEkLmxlbmd0aCxhLGF0LHY7aTxsJiYoYT1hJFtpXSk7aSsrKXtpZihuYW1lPT09JyonfHxlbGVtZW50LmxvY2FsTmFtZT09PW5hbWUpe2F0PWVsZW1lbnQuYXR0cmlidXRlc1thXTt2PWF0JiZhdC52YWx1ZTtpZih2JiZ2LnNlYXJjaChCSU5ESU5HX1JYKTwwKXthdC52YWx1ZT1hPT09J3N0eWxlJz9yZXNvbHZlQ3NzKHYsb3duZXJEb2N1bWVudCk6cmVzb2x2ZSh2LG93bmVyRG9jdW1lbnQpO319fX19CmZ1bmN0aW9uIHJlc29sdmUodXJsLG93bmVyRG9jdW1lbnQpe2lmKHVybCYmQUJTX1VSTC50ZXN0KHVybCkpe3JldHVybiB1cmw7fQp2YXIgcmVzb2x2ZXI9Z2V0VXJsUmVzb2x2ZXIob3duZXJEb2N1bWVudCk7cmVzb2x2ZXIuaHJlZj11cmw7cmV0dXJuIHJlc29sdmVyLmhyZWZ8fHVybDt9CnZhciB0ZW1wRG9jO3ZhciB0ZW1wRG9jQmFzZTtmdW5jdGlvbiByZXNvbHZlVXJsKHVybCxiYXNlVXJpKXtpZighdGVtcERvYyl7dGVtcERvYz1kb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoJ3RlbXAnKTt0ZW1wRG9jQmFzZT10ZW1wRG9jLmNyZWF0ZUVsZW1lbnQoJ2Jhc2UnKTt0ZW1wRG9jLmhlYWQuYXBwZW5kQ2hpbGQodGVtcERvY0Jhc2UpO30KdGVtcERvY0Jhc2UuaHJlZj1iYXNlVXJpO3JldHVybiByZXNvbHZlKHVybCx0ZW1wRG9jKTt9CmZ1bmN0aW9uIGdldFVybFJlc29sdmVyKG93bmVyRG9jdW1lbnQpe3JldHVybiBvd25lckRvY3VtZW50LmJvZHkuX191cmxSZXNvbHZlcnx8KG93bmVyRG9jdW1lbnQuYm9keS5fX3VybFJlc29sdmVyPW93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpKTt9CmZ1bmN0aW9uIHBhdGhGcm9tVXJsKHVybCl7cmV0dXJuIHVybC5zdWJzdHJpbmcoMCx1cmwubGFzdEluZGV4T2YoJy8nKSsxKTt9CnZhciBDU1NfVVJMX1JYPS8odXJsXCgpKFteKV0qKShcKSkvZzt2YXIgVVJMX0FUVFJTPXsnKic6WydocmVmJywnc3JjJywnc3R5bGUnLCd1cmwnXSxmb3JtOlsnYWN0aW9uJ119O3ZhciBBQlNfVVJMPS8oXlwvKXwoXiMpfCheW1x3LVxkXSo6KS87dmFyIEJJTkRJTkdfUlg9L1x7XHt8XFtcWy87UG9seW1lci5SZXNvbHZlVXJsPXtyZXNvbHZlQ3NzOnJlc29sdmVDc3MscmVzb2x2ZUF0dHJzOnJlc29sdmVBdHRycyxyZXNvbHZlVXJsOnJlc29sdmVVcmwscGF0aEZyb21Vcmw6cGF0aEZyb21Vcmx9O1BvbHltZXIucm9vdFBhdGg9UG9seW1lci5TZXR0aW5ncy5yb290UGF0aHx8cGF0aEZyb21VcmwoZG9jdW1lbnQuYmFzZVVSSXx8d2luZG93LmxvY2F0aW9uLmhyZWYpO30oKSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcHJlcFRlbXBsYXRlOmZ1bmN0aW9uKCl7dmFyIG1vZHVsZTtpZih0aGlzLl90ZW1wbGF0ZT09PXVuZGVmaW5lZCl7bW9kdWxlPVBvbHltZXIuRG9tTW9kdWxlLmltcG9ydCh0aGlzLmlzKTt0aGlzLl90ZW1wbGF0ZT1tb2R1bGUmJm1vZHVsZS5xdWVyeVNlbGVjdG9yKCd0ZW1wbGF0ZScpO30KaWYobW9kdWxlKXt2YXIgYXNzZXRQYXRoPW1vZHVsZS5nZXRBdHRyaWJ1dGUoJ2Fzc2V0cGF0aCcpfHwnJzt2YXIgaW1wb3J0VVJMPVBvbHltZXIuUmVzb2x2ZVVybC5yZXNvbHZlVXJsKGFzc2V0UGF0aCxtb2R1bGUub3duZXJEb2N1bWVudC5iYXNlVVJJKTt0aGlzLl9pbXBvcnRQYXRoPVBvbHltZXIuUmVzb2x2ZVVybC5wYXRoRnJvbVVybChpbXBvcnRVUkwpO31lbHNle3RoaXMuX2ltcG9ydFBhdGg9Jyc7fQppZih0aGlzLl90ZW1wbGF0ZSYmdGhpcy5fdGVtcGxhdGUuaGFzQXR0cmlidXRlKCdpcycpKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoJ19wcmVwVGVtcGxhdGUnLCd0b3AtbGV2ZWwgUG9seW1lciB0ZW1wbGF0ZSAnKydtdXN0IG5vdCBiZSBhIHR5cGUtZXh0ZW5zaW9uLCBmb3VuZCcsdGhpcy5fdGVtcGxhdGUsJ01vdmUgaW5zaWRlIHNpbXBsZSA8dGVtcGxhdGU+LicpKTt9CmlmKHRoaXMuX3RlbXBsYXRlJiYhdGhpcy5fdGVtcGxhdGUuY29udGVudCYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUpe0hUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodGhpcy5fdGVtcGxhdGUpO319LF9zdGFtcFRlbXBsYXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fdGVtcGxhdGUpe3RoaXMucm9vdD10aGlzLmluc3RhbmNlVGVtcGxhdGUodGhpcy5fdGVtcGxhdGUpO319LGluc3RhbmNlVGVtcGxhdGU6ZnVuY3Rpb24odGVtcGxhdGUpe3ZhciBkb209ZG9jdW1lbnQuaW1wb3J0Tm9kZSh0ZW1wbGF0ZS5fY29udGVudHx8dGVtcGxhdGUuY29udGVudCx0cnVlKTtyZXR1cm4gZG9tO319KTsoZnVuY3Rpb24oKXt2YXIgYmFzZUF0dGFjaGVkQ2FsbGJhY2s9UG9seW1lci5CYXNlLmF0dGFjaGVkQ2FsbGJhY2s7dmFyIGJhc2VEZXRhY2hlZENhbGxiYWNrPVBvbHltZXIuQmFzZS5kZXRhY2hlZENhbGxiYWNrO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X2hvc3RTdGFjazpbXSxyZWFkeTpmdW5jdGlvbigpe30sX3JlZ2lzdGVySG9zdDpmdW5jdGlvbihob3N0KXt0aGlzLmRhdGFIb3N0PWhvc3Q9aG9zdHx8UG9seW1lci5CYXNlLl9ob3N0U3RhY2tbUG9seW1lci5CYXNlLl9ob3N0U3RhY2subGVuZ3RoLTFdO2lmKGhvc3QmJmhvc3QuX2NsaWVudHMpe2hvc3QuX2NsaWVudHMucHVzaCh0aGlzKTt9CnRoaXMuX2NsaWVudHM9bnVsbDt0aGlzLl9jbGllbnRzUmVhZGllZD1mYWxzZTt9LF9iZWdpbkhvc3Rpbmc6ZnVuY3Rpb24oKXtQb2x5bWVyLkJhc2UuX2hvc3RTdGFjay5wdXNoKHRoaXMpO2lmKCF0aGlzLl9jbGllbnRzKXt0aGlzLl9jbGllbnRzPVtdO319LF9lbmRIb3N0aW5nOmZ1bmN0aW9uKCl7UG9seW1lci5CYXNlLl9ob3N0U3RhY2sucG9wKCk7fSxfdHJ5UmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkaWVkPWZhbHNlO2lmKHRoaXMuX2NhblJlYWR5KCkpe3RoaXMuX3JlYWR5KCk7fX0sX2NhblJlYWR5OmZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMuZGF0YUhvc3R8fHRoaXMuZGF0YUhvc3QuX2NsaWVudHNSZWFkaWVkO30sX3JlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fYmVmb3JlQ2xpZW50c1JlYWR5KCk7aWYodGhpcy5fdGVtcGxhdGUpe3RoaXMuX3NldHVwUm9vdCgpO3RoaXMuX3JlYWR5Q2xpZW50cygpO30KdGhpcy5fY2xpZW50c1JlYWRpZWQ9dHJ1ZTt0aGlzLl9jbGllbnRzPW51bGw7dGhpcy5fYWZ0ZXJDbGllbnRzUmVhZHkoKTt0aGlzLl9yZWFkeVNlbGYoKTt9LF9yZWFkeUNsaWVudHM6ZnVuY3Rpb24oKXt0aGlzLl9iZWdpbkRpc3RyaWJ1dGUoKTt2YXIgYyQ9dGhpcy5fY2xpZW50cztpZihjJCl7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2MuX3JlYWR5KCk7fX0KdGhpcy5fZmluaXNoRGlzdHJpYnV0ZSgpO30sX3JlYWR5U2VsZjpmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGI7aTx0aGlzLmJlaGF2aW9ycy5sZW5ndGg7aSsrKXtiPXRoaXMuYmVoYXZpb3JzW2ldO2lmKGIucmVhZHkpe2IucmVhZHkuY2FsbCh0aGlzKTt9fQppZih0aGlzLnJlYWR5KXt0aGlzLnJlYWR5KCk7fQp0aGlzLl9yZWFkaWVkPXRydWU7aWYodGhpcy5fYXR0YWNoZWRQZW5kaW5nKXt0aGlzLl9hdHRhY2hlZFBlbmRpbmc9ZmFsc2U7dGhpcy5hdHRhY2hlZENhbGxiYWNrKCk7fX0sX2JlZm9yZUNsaWVudHNSZWFkeTpmdW5jdGlvbigpe30sX2FmdGVyQ2xpZW50c1JlYWR5OmZ1bmN0aW9uKCl7fSxfYmVmb3JlQXR0YWNoZWQ6ZnVuY3Rpb24oKXt9LGF0dGFjaGVkQ2FsbGJhY2s6ZnVuY3Rpb24oKXtpZih0aGlzLl9yZWFkaWVkKXt0aGlzLl9iZWZvcmVBdHRhY2hlZCgpO2Jhc2VBdHRhY2hlZENhbGxiYWNrLmNhbGwodGhpcyk7fWVsc2V7dGhpcy5fYXR0YWNoZWRQZW5kaW5nPXRydWU7fX0sZGV0YWNoZWRDYWxsYmFjazpmdW5jdGlvbigpe2lmKHRoaXMuX3JlYWRpZWQpe2Jhc2VEZXRhY2hlZENhbGxiYWNrLmNhbGwodGhpcyk7fWVsc2V7dGhpcy5fYXR0YWNoZWRQZW5kaW5nPWZhbHNlO319fSk7fSgpKTtQb2x5bWVyLkFycmF5U3BsaWNlPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbmV3U3BsaWNlKGluZGV4LHJlbW92ZWQsYWRkZWRDb3VudCl7cmV0dXJue2luZGV4OmluZGV4LHJlbW92ZWQ6cmVtb3ZlZCxhZGRlZENvdW50OmFkZGVkQ291bnR9O30KdmFyIEVESVRfTEVBVkU9MDt2YXIgRURJVF9VUERBVEU9MTt2YXIgRURJVF9BREQ9Mjt2YXIgRURJVF9ERUxFVEU9MztmdW5jdGlvbiBBcnJheVNwbGljZSgpe30KQXJyYXlTcGxpY2UucHJvdG90eXBlPXtjYWxjRWRpdERpc3RhbmNlczpmdW5jdGlvbihjdXJyZW50LGN1cnJlbnRTdGFydCxjdXJyZW50RW5kLG9sZCxvbGRTdGFydCxvbGRFbmQpe3ZhciByb3dDb3VudD1vbGRFbmQtb2xkU3RhcnQrMTt2YXIgY29sdW1uQ291bnQ9Y3VycmVudEVuZC1jdXJyZW50U3RhcnQrMTt2YXIgZGlzdGFuY2VzPW5ldyBBcnJheShyb3dDb3VudCk7Zm9yKHZhciBpPTA7aTxyb3dDb3VudDtpKyspe2Rpc3RhbmNlc1tpXT1uZXcgQXJyYXkoY29sdW1uQ291bnQpO2Rpc3RhbmNlc1tpXVswXT1pO30KZm9yKHZhciBqPTA7ajxjb2x1bW5Db3VudDtqKyspCmRpc3RhbmNlc1swXVtqXT1qO2ZvcihpPTE7aTxyb3dDb3VudDtpKyspe2ZvcihqPTE7ajxjb2x1bW5Db3VudDtqKyspe2lmKHRoaXMuZXF1YWxzKGN1cnJlbnRbY3VycmVudFN0YXJ0K2otMV0sb2xkW29sZFN0YXJ0K2ktMV0pKQpkaXN0YW5jZXNbaV1bal09ZGlzdGFuY2VzW2ktMV1bai0xXTtlbHNle3ZhciBub3J0aD1kaXN0YW5jZXNbaS0xXVtqXSsxO3ZhciB3ZXN0PWRpc3RhbmNlc1tpXVtqLTFdKzE7ZGlzdGFuY2VzW2ldW2pdPW5vcnRoPHdlc3Q/bm9ydGg6d2VzdDt9fX0KcmV0dXJuIGRpc3RhbmNlczt9LHNwbGljZU9wZXJhdGlvbnNGcm9tRWRpdERpc3RhbmNlczpmdW5jdGlvbihkaXN0YW5jZXMpe3ZhciBpPWRpc3RhbmNlcy5sZW5ndGgtMTt2YXIgaj1kaXN0YW5jZXNbMF0ubGVuZ3RoLTE7dmFyIGN1cnJlbnQ9ZGlzdGFuY2VzW2ldW2pdO3ZhciBlZGl0cz1bXTt3aGlsZShpPjB8fGo+MCl7aWYoaT09MCl7ZWRpdHMucHVzaChFRElUX0FERCk7ai0tO2NvbnRpbnVlO30KaWYoaj09MCl7ZWRpdHMucHVzaChFRElUX0RFTEVURSk7aS0tO2NvbnRpbnVlO30KdmFyIG5vcnRoV2VzdD1kaXN0YW5jZXNbaS0xXVtqLTFdO3ZhciB3ZXN0PWRpc3RhbmNlc1tpLTFdW2pdO3ZhciBub3J0aD1kaXN0YW5jZXNbaV1bai0xXTt2YXIgbWluO2lmKHdlc3Q8bm9ydGgpCm1pbj13ZXN0PG5vcnRoV2VzdD93ZXN0Om5vcnRoV2VzdDtlbHNlCm1pbj1ub3J0aDxub3J0aFdlc3Q/bm9ydGg6bm9ydGhXZXN0O2lmKG1pbj09bm9ydGhXZXN0KXtpZihub3J0aFdlc3Q9PWN1cnJlbnQpe2VkaXRzLnB1c2goRURJVF9MRUFWRSk7fWVsc2V7ZWRpdHMucHVzaChFRElUX1VQREFURSk7Y3VycmVudD1ub3J0aFdlc3Q7fQppLS07ai0tO31lbHNlIGlmKG1pbj09d2VzdCl7ZWRpdHMucHVzaChFRElUX0RFTEVURSk7aS0tO2N1cnJlbnQ9d2VzdDt9ZWxzZXtlZGl0cy5wdXNoKEVESVRfQUREKTtqLS07Y3VycmVudD1ub3J0aDt9fQplZGl0cy5yZXZlcnNlKCk7cmV0dXJuIGVkaXRzO30sY2FsY1NwbGljZXM6ZnVuY3Rpb24oY3VycmVudCxjdXJyZW50U3RhcnQsY3VycmVudEVuZCxvbGQsb2xkU3RhcnQsb2xkRW5kKXt2YXIgcHJlZml4Q291bnQ9MDt2YXIgc3VmZml4Q291bnQ9MDt2YXIgbWluTGVuZ3RoPU1hdGgubWluKGN1cnJlbnRFbmQtY3VycmVudFN0YXJ0LG9sZEVuZC1vbGRTdGFydCk7aWYoY3VycmVudFN0YXJ0PT0wJiZvbGRTdGFydD09MCkKcHJlZml4Q291bnQ9dGhpcy5zaGFyZWRQcmVmaXgoY3VycmVudCxvbGQsbWluTGVuZ3RoKTtpZihjdXJyZW50RW5kPT1jdXJyZW50Lmxlbmd0aCYmb2xkRW5kPT1vbGQubGVuZ3RoKQpzdWZmaXhDb3VudD10aGlzLnNoYXJlZFN1ZmZpeChjdXJyZW50LG9sZCxtaW5MZW5ndGgtcHJlZml4Q291bnQpO2N1cnJlbnRTdGFydCs9cHJlZml4Q291bnQ7b2xkU3RhcnQrPXByZWZpeENvdW50O2N1cnJlbnRFbmQtPXN1ZmZpeENvdW50O29sZEVuZC09c3VmZml4Q291bnQ7aWYoY3VycmVudEVuZC1jdXJyZW50U3RhcnQ9PTAmJm9sZEVuZC1vbGRTdGFydD09MCkKcmV0dXJuW107aWYoY3VycmVudFN0YXJ0PT1jdXJyZW50RW5kKXt2YXIgc3BsaWNlPW5ld1NwbGljZShjdXJyZW50U3RhcnQsW10sMCk7d2hpbGUob2xkU3RhcnQ8b2xkRW5kKQpzcGxpY2UucmVtb3ZlZC5wdXNoKG9sZFtvbGRTdGFydCsrXSk7cmV0dXJuW3NwbGljZV07fWVsc2UgaWYob2xkU3RhcnQ9PW9sZEVuZCkKcmV0dXJuW25ld1NwbGljZShjdXJyZW50U3RhcnQsW10sY3VycmVudEVuZC1jdXJyZW50U3RhcnQpXTt2YXIgb3BzPXRoaXMuc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKHRoaXMuY2FsY0VkaXREaXN0YW5jZXMoY3VycmVudCxjdXJyZW50U3RhcnQsY3VycmVudEVuZCxvbGQsb2xkU3RhcnQsb2xkRW5kKSk7c3BsaWNlPXVuZGVmaW5lZDt2YXIgc3BsaWNlcz1bXTt2YXIgaW5kZXg9Y3VycmVudFN0YXJ0O3ZhciBvbGRJbmRleD1vbGRTdGFydDtmb3IodmFyIGk9MDtpPG9wcy5sZW5ndGg7aSsrKXtzd2l0Y2gob3BzW2ldKXtjYXNlIEVESVRfTEVBVkU6aWYoc3BsaWNlKXtzcGxpY2VzLnB1c2goc3BsaWNlKTtzcGxpY2U9dW5kZWZpbmVkO30KaW5kZXgrKztvbGRJbmRleCsrO2JyZWFrO2Nhc2UgRURJVF9VUERBVEU6aWYoIXNwbGljZSkKc3BsaWNlPW5ld1NwbGljZShpbmRleCxbXSwwKTtzcGxpY2UuYWRkZWRDb3VudCsrO2luZGV4Kys7c3BsaWNlLnJlbW92ZWQucHVzaChvbGRbb2xkSW5kZXhdKTtvbGRJbmRleCsrO2JyZWFrO2Nhc2UgRURJVF9BREQ6aWYoIXNwbGljZSkKc3BsaWNlPW5ld1NwbGljZShpbmRleCxbXSwwKTtzcGxpY2UuYWRkZWRDb3VudCsrO2luZGV4Kys7YnJlYWs7Y2FzZSBFRElUX0RFTEVURTppZighc3BsaWNlKQpzcGxpY2U9bmV3U3BsaWNlKGluZGV4LFtdLDApO3NwbGljZS5yZW1vdmVkLnB1c2gob2xkW29sZEluZGV4XSk7b2xkSW5kZXgrKzticmVhazt9fQppZihzcGxpY2Upe3NwbGljZXMucHVzaChzcGxpY2UpO30KcmV0dXJuIHNwbGljZXM7fSxzaGFyZWRQcmVmaXg6ZnVuY3Rpb24oY3VycmVudCxvbGQsc2VhcmNoTGVuZ3RoKXtmb3IodmFyIGk9MDtpPHNlYXJjaExlbmd0aDtpKyspCmlmKCF0aGlzLmVxdWFscyhjdXJyZW50W2ldLG9sZFtpXSkpCnJldHVybiBpO3JldHVybiBzZWFyY2hMZW5ndGg7fSxzaGFyZWRTdWZmaXg6ZnVuY3Rpb24oY3VycmVudCxvbGQsc2VhcmNoTGVuZ3RoKXt2YXIgaW5kZXgxPWN1cnJlbnQubGVuZ3RoO3ZhciBpbmRleDI9b2xkLmxlbmd0aDt2YXIgY291bnQ9MDt3aGlsZShjb3VudDxzZWFyY2hMZW5ndGgmJnRoaXMuZXF1YWxzKGN1cnJlbnRbLS1pbmRleDFdLG9sZFstLWluZGV4Ml0pKQpjb3VudCsrO3JldHVybiBjb3VudDt9LGNhbGN1bGF0ZVNwbGljZXM6ZnVuY3Rpb24oY3VycmVudCxwcmV2aW91cyl7cmV0dXJuIHRoaXMuY2FsY1NwbGljZXMoY3VycmVudCwwLGN1cnJlbnQubGVuZ3RoLHByZXZpb3VzLDAscHJldmlvdXMubGVuZ3RoKTt9LGVxdWFsczpmdW5jdGlvbihjdXJyZW50VmFsdWUscHJldmlvdXNWYWx1ZSl7cmV0dXJuIGN1cnJlbnRWYWx1ZT09PXByZXZpb3VzVmFsdWU7fX07cmV0dXJuIG5ldyBBcnJheVNwbGljZSgpO30oKTtQb2x5bWVyLmRvbUlubmVySFRNTD1mdW5jdGlvbigpe3ZhciBlc2NhcGVBdHRyUmVnRXhwPS9bJlx1MDBBMCJdL2c7dmFyIGVzY2FwZURhdGFSZWdFeHA9L1smXHUwMEEwPD5dL2c7ZnVuY3Rpb24gZXNjYXBlUmVwbGFjZShjKXtzd2l0Y2goYyl7Y2FzZScmJzpyZXR1cm4nJmFtcDsnO2Nhc2UnPCc6cmV0dXJuJyZsdDsnO2Nhc2UnPic6cmV0dXJuJyZndDsnO2Nhc2UnIic6cmV0dXJuJyZxdW90Oyc7Y2FzZSdceEEwJzpyZXR1cm4nJm5ic3A7Jzt9fQpmdW5jdGlvbiBlc2NhcGVBdHRyKHMpe3JldHVybiBzLnJlcGxhY2UoZXNjYXBlQXR0clJlZ0V4cCxlc2NhcGVSZXBsYWNlKTt9CmZ1bmN0aW9uIGVzY2FwZURhdGEocyl7cmV0dXJuIHMucmVwbGFjZShlc2NhcGVEYXRhUmVnRXhwLGVzY2FwZVJlcGxhY2UpO30KZnVuY3Rpb24gbWFrZVNldChhcnIpe3ZhciBzZXQ9e307Zm9yKHZhciBpPTA7aTxhcnIubGVuZ3RoO2krKyl7c2V0W2FycltpXV09dHJ1ZTt9CnJldHVybiBzZXQ7fQp2YXIgdm9pZEVsZW1lbnRzPW1ha2VTZXQoWydhcmVhJywnYmFzZScsJ2JyJywnY29sJywnY29tbWFuZCcsJ2VtYmVkJywnaHInLCdpbWcnLCdpbnB1dCcsJ2tleWdlbicsJ2xpbmsnLCdtZXRhJywncGFyYW0nLCdzb3VyY2UnLCd0cmFjaycsJ3diciddKTt2YXIgcGxhaW50ZXh0UGFyZW50cz1tYWtlU2V0KFsnc3R5bGUnLCdzY3JpcHQnLCd4bXAnLCdpZnJhbWUnLCdub2VtYmVkJywnbm9mcmFtZXMnLCdwbGFpbnRleHQnLCdub3NjcmlwdCddKTtmdW5jdGlvbiBnZXRPdXRlckhUTUwobm9kZSxwYXJlbnROb2RlLGNvbXBvc2VkKXtzd2l0Y2gobm9kZS5ub2RlVHlwZSl7Y2FzZSBOb2RlLkVMRU1FTlRfTk9ERTp2YXIgdGFnTmFtZT1ub2RlLmxvY2FsTmFtZTt2YXIgcz0nPCcrdGFnTmFtZTt2YXIgYXR0cnM9bm9kZS5hdHRyaWJ1dGVzO2Zvcih2YXIgaT0wLGF0dHI7YXR0cj1hdHRyc1tpXTtpKyspe3MrPScgJythdHRyLm5hbWUrJz0iJytlc2NhcGVBdHRyKGF0dHIudmFsdWUpKyciJzt9CnMrPSc+JztpZih2b2lkRWxlbWVudHNbdGFnTmFtZV0pe3JldHVybiBzO30KcmV0dXJuIHMrZ2V0SW5uZXJIVE1MKG5vZGUsY29tcG9zZWQpKyc8LycrdGFnTmFtZSsnPic7Y2FzZSBOb2RlLlRFWFRfTk9ERTp2YXIgZGF0YT1ub2RlLmRhdGE7aWYocGFyZW50Tm9kZSYmcGxhaW50ZXh0UGFyZW50c1twYXJlbnROb2RlLmxvY2FsTmFtZV0pe3JldHVybiBkYXRhO30KcmV0dXJuIGVzY2FwZURhdGEoZGF0YSk7Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERTpyZXR1cm4nPCEtLScrbm9kZS5kYXRhKyctLT4nO2RlZmF1bHQ6Y29uc29sZS5lcnJvcihub2RlKTt0aHJvdyBuZXcgRXJyb3IoJ25vdCBpbXBsZW1lbnRlZCcpO319CmZ1bmN0aW9uIGdldElubmVySFRNTChub2RlLGNvbXBvc2VkKXtpZihub2RlIGluc3RhbmNlb2YgSFRNTFRlbXBsYXRlRWxlbWVudCkKbm9kZT1ub2RlLmNvbnRlbnQ7dmFyIHM9Jyc7dmFyIGMkPVBvbHltZXIuZG9tKG5vZGUpLmNoaWxkTm9kZXM7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsY2hpbGQ7aTxsJiYoY2hpbGQ9YyRbaV0pO2krKyl7cys9Z2V0T3V0ZXJIVE1MKGNoaWxkLG5vZGUsY29tcG9zZWQpO30KcmV0dXJuIHM7fQpyZXR1cm57Z2V0SW5uZXJIVE1MOmdldElubmVySFRNTH07fSgpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgbmF0aXZlSW5zZXJ0QmVmb3JlPUVsZW1lbnQucHJvdG90eXBlLmluc2VydEJlZm9yZTt2YXIgbmF0aXZlQXBwZW5kQ2hpbGQ9RWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQ7dmFyIG5hdGl2ZVJlbW92ZUNoaWxkPUVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkO1BvbHltZXIuVHJlZUFwaT17YXJyYXlDb3B5Q2hpbGROb2RlczpmdW5jdGlvbihwYXJlbnQpe3ZhciBjb3B5PVtdLGk9MDtmb3IodmFyIG49cGFyZW50LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpe2NvcHlbaSsrXT1uO30KcmV0dXJuIGNvcHk7fSxhcnJheUNvcHlDaGlsZHJlbjpmdW5jdGlvbihwYXJlbnQpe3ZhciBjb3B5PVtdLGk9MDtmb3IodmFyIG49cGFyZW50LmZpcnN0RWxlbWVudENoaWxkO247bj1uLm5leHRFbGVtZW50U2libGluZyl7Y29weVtpKytdPW47fQpyZXR1cm4gY29weTt9LGFycmF5Q29weTpmdW5jdGlvbihhJCl7dmFyIGw9YSQubGVuZ3RoO3ZhciBjb3B5PW5ldyBBcnJheShsKTtmb3IodmFyIGk9MDtpPGw7aSsrKXtjb3B5W2ldPWEkW2ldO30KcmV0dXJuIGNvcHk7fX07UG9seW1lci5UcmVlQXBpLkxvZ2ljYWw9e2hhc1BhcmVudE5vZGU6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIEJvb2xlYW4obm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5wYXJlbnROb2RlKTt9LGhhc0NoaWxkTm9kZXM6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIEJvb2xlYW4obm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5jaGlsZE5vZGVzIT09dW5kZWZpbmVkKTt9LGdldENoaWxkTm9kZXM6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIHRoaXMuaGFzQ2hpbGROb2Rlcyhub2RlKT90aGlzLl9nZXRDaGlsZE5vZGVzKG5vZGUpOm5vZGUuY2hpbGROb2Rlczt9LF9nZXRDaGlsZE5vZGVzOmZ1bmN0aW9uKG5vZGUpe2lmKCFub2RlLl9fZG9tLmNoaWxkTm9kZXMpe25vZGUuX19kb20uY2hpbGROb2Rlcz1bXTtmb3IodmFyIG49bm9kZS5fX2RvbS5maXJzdENoaWxkO247bj1uLl9fZG9tLm5leHRTaWJsaW5nKXtub2RlLl9fZG9tLmNoaWxkTm9kZXMucHVzaChuKTt9fQpyZXR1cm4gbm9kZS5fX2RvbS5jaGlsZE5vZGVzO30sZ2V0UGFyZW50Tm9kZTpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5wYXJlbnROb2RlIT09dW5kZWZpbmVkP25vZGUuX19kb20ucGFyZW50Tm9kZTpub2RlLnBhcmVudE5vZGU7fSxnZXRGaXJzdENoaWxkOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlLl9fZG9tJiZub2RlLl9fZG9tLmZpcnN0Q2hpbGQhPT11bmRlZmluZWQ/bm9kZS5fX2RvbS5maXJzdENoaWxkOm5vZGUuZmlyc3RDaGlsZDt9LGdldExhc3RDaGlsZDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5sYXN0Q2hpbGQhPT11bmRlZmluZWQ/bm9kZS5fX2RvbS5sYXN0Q2hpbGQ6bm9kZS5sYXN0Q2hpbGQ7fSxnZXROZXh0U2libGluZzpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5uZXh0U2libGluZyE9PXVuZGVmaW5lZD9ub2RlLl9fZG9tLm5leHRTaWJsaW5nOm5vZGUubmV4dFNpYmxpbmc7fSxnZXRQcmV2aW91c1NpYmxpbmc6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuX19kb20mJm5vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nIT09dW5kZWZpbmVkP25vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nOm5vZGUucHJldmlvdXNTaWJsaW5nO30sZ2V0Rmlyc3RFbGVtZW50Q2hpbGQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuX19kb20mJm5vZGUuX19kb20uZmlyc3RDaGlsZCE9PXVuZGVmaW5lZD90aGlzLl9nZXRGaXJzdEVsZW1lbnRDaGlsZChub2RlKTpub2RlLmZpcnN0RWxlbWVudENoaWxkO30sX2dldEZpcnN0RWxlbWVudENoaWxkOmZ1bmN0aW9uKG5vZGUpe3ZhciBuPW5vZGUuX19kb20uZmlyc3RDaGlsZDt3aGlsZShuJiZuLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpe249bi5fX2RvbS5uZXh0U2libGluZzt9CnJldHVybiBuO30sZ2V0TGFzdEVsZW1lbnRDaGlsZDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5sYXN0Q2hpbGQhPT11bmRlZmluZWQ/dGhpcy5fZ2V0TGFzdEVsZW1lbnRDaGlsZChub2RlKTpub2RlLmxhc3RFbGVtZW50Q2hpbGQ7fSxfZ2V0TGFzdEVsZW1lbnRDaGlsZDpmdW5jdGlvbihub2RlKXt2YXIgbj1ub2RlLl9fZG9tLmxhc3RDaGlsZDt3aGlsZShuJiZuLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREUpe249bi5fX2RvbS5wcmV2aW91c1NpYmxpbmc7fQpyZXR1cm4gbjt9LGdldE5leHRFbGVtZW50U2libGluZzpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5fX2RvbSYmbm9kZS5fX2RvbS5uZXh0U2libGluZyE9PXVuZGVmaW5lZD90aGlzLl9nZXROZXh0RWxlbWVudFNpYmxpbmcobm9kZSk6bm9kZS5uZXh0RWxlbWVudFNpYmxpbmc7fSxfZ2V0TmV4dEVsZW1lbnRTaWJsaW5nOmZ1bmN0aW9uKG5vZGUpe3ZhciBuPW5vZGUuX19kb20ubmV4dFNpYmxpbmc7d2hpbGUobiYmbi5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXtuPW4uX19kb20ubmV4dFNpYmxpbmc7fQpyZXR1cm4gbjt9LGdldFByZXZpb3VzRWxlbWVudFNpYmxpbmc6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUuX19kb20mJm5vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nIT09dW5kZWZpbmVkP3RoaXMuX2dldFByZXZpb3VzRWxlbWVudFNpYmxpbmcobm9kZSk6bm9kZS5wcmV2aW91c0VsZW1lbnRTaWJsaW5nO30sX2dldFByZXZpb3VzRWxlbWVudFNpYmxpbmc6ZnVuY3Rpb24obm9kZSl7dmFyIG49bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc7d2hpbGUobiYmbi5ub2RlVHlwZSE9PU5vZGUuRUxFTUVOVF9OT0RFKXtuPW4uX19kb20ucHJldmlvdXNTaWJsaW5nO30KcmV0dXJuIG47fSxzYXZlQ2hpbGROb2RlczpmdW5jdGlvbihub2RlKXtpZighdGhpcy5oYXNDaGlsZE5vZGVzKG5vZGUpKXtub2RlLl9fZG9tPW5vZGUuX19kb218fHt9O25vZGUuX19kb20uZmlyc3RDaGlsZD1ub2RlLmZpcnN0Q2hpbGQ7bm9kZS5fX2RvbS5sYXN0Q2hpbGQ9bm9kZS5sYXN0Q2hpbGQ7bm9kZS5fX2RvbS5jaGlsZE5vZGVzPVtdO2Zvcih2YXIgbj1ub2RlLmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpe24uX19kb209bi5fX2RvbXx8e307bi5fX2RvbS5wYXJlbnROb2RlPW5vZGU7bm9kZS5fX2RvbS5jaGlsZE5vZGVzLnB1c2gobik7bi5fX2RvbS5uZXh0U2libGluZz1uLm5leHRTaWJsaW5nO24uX19kb20ucHJldmlvdXNTaWJsaW5nPW4ucHJldmlvdXNTaWJsaW5nO319fSxyZWNvcmRJbnNlcnRCZWZvcmU6ZnVuY3Rpb24obm9kZSxjb250YWluZXIscmVmX25vZGUpe2NvbnRhaW5lci5fX2RvbS5jaGlsZE5vZGVzPW51bGw7aWYobm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7Zm9yKHZhciBuPW5vZGUuZmlyc3RDaGlsZDtuO249bi5uZXh0U2libGluZyl7dGhpcy5fbGlua05vZGUobixjb250YWluZXIscmVmX25vZGUpO319ZWxzZXt0aGlzLl9saW5rTm9kZShub2RlLGNvbnRhaW5lcixyZWZfbm9kZSk7fX0sX2xpbmtOb2RlOmZ1bmN0aW9uKG5vZGUsY29udGFpbmVyLHJlZl9ub2RlKXtub2RlLl9fZG9tPW5vZGUuX19kb218fHt9O2NvbnRhaW5lci5fX2RvbT1jb250YWluZXIuX19kb218fHt9O2lmKHJlZl9ub2RlKXtyZWZfbm9kZS5fX2RvbT1yZWZfbm9kZS5fX2RvbXx8e307fQpub2RlLl9fZG9tLnByZXZpb3VzU2libGluZz1yZWZfbm9kZT9yZWZfbm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc6Y29udGFpbmVyLl9fZG9tLmxhc3RDaGlsZDtpZihub2RlLl9fZG9tLnByZXZpb3VzU2libGluZyl7bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmcuX19kb20ubmV4dFNpYmxpbmc9bm9kZTt9Cm5vZGUuX19kb20ubmV4dFNpYmxpbmc9cmVmX25vZGV8fG51bGw7aWYobm9kZS5fX2RvbS5uZXh0U2libGluZyl7bm9kZS5fX2RvbS5uZXh0U2libGluZy5fX2RvbS5wcmV2aW91c1NpYmxpbmc9bm9kZTt9Cm5vZGUuX19kb20ucGFyZW50Tm9kZT1jb250YWluZXI7aWYocmVmX25vZGUpe2lmKHJlZl9ub2RlPT09Y29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5maXJzdENoaWxkPW5vZGU7fX1lbHNle2NvbnRhaW5lci5fX2RvbS5sYXN0Q2hpbGQ9bm9kZTtpZighY29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQpe2NvbnRhaW5lci5fX2RvbS5maXJzdENoaWxkPW5vZGU7fX0KY29udGFpbmVyLl9fZG9tLmNoaWxkTm9kZXM9bnVsbDt9LHJlY29yZFJlbW92ZUNoaWxkOmZ1bmN0aW9uKG5vZGUsY29udGFpbmVyKXtub2RlLl9fZG9tPW5vZGUuX19kb218fHt9O2NvbnRhaW5lci5fX2RvbT1jb250YWluZXIuX19kb218fHt9O2lmKG5vZGU9PT1jb250YWluZXIuX19kb20uZmlyc3RDaGlsZCl7Y29udGFpbmVyLl9fZG9tLmZpcnN0Q2hpbGQ9bm9kZS5fX2RvbS5uZXh0U2libGluZzt9CmlmKG5vZGU9PT1jb250YWluZXIuX19kb20ubGFzdENoaWxkKXtjb250YWluZXIuX19kb20ubGFzdENoaWxkPW5vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nO30KdmFyIHA9bm9kZS5fX2RvbS5wcmV2aW91c1NpYmxpbmc7dmFyIG49bm9kZS5fX2RvbS5uZXh0U2libGluZztpZihwKXtwLl9fZG9tLm5leHRTaWJsaW5nPW47fQppZihuKXtuLl9fZG9tLnByZXZpb3VzU2libGluZz1wO30Kbm9kZS5fX2RvbS5wYXJlbnROb2RlPW5vZGUuX19kb20ucHJldmlvdXNTaWJsaW5nPW5vZGUuX19kb20ubmV4dFNpYmxpbmc9dW5kZWZpbmVkO2NvbnRhaW5lci5fX2RvbS5jaGlsZE5vZGVzPW51bGw7fX07UG9seW1lci5UcmVlQXBpLkNvbXBvc2VkPXtnZXRDaGlsZE5vZGVzOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBQb2x5bWVyLlRyZWVBcGkuYXJyYXlDb3B5Q2hpbGROb2Rlcyhub2RlKTt9LGdldFBhcmVudE5vZGU6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIG5vZGUucGFyZW50Tm9kZTt9LGNsZWFyQ2hpbGROb2RlczpmdW5jdGlvbihub2RlKXtub2RlLnRleHRDb250ZW50PScnO30saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKHBhcmVudE5vZGUsbmV3Q2hpbGQscmVmQ2hpbGQpe3JldHVybiBuYXRpdmVJbnNlcnRCZWZvcmUuY2FsbChwYXJlbnROb2RlLG5ld0NoaWxkLHJlZkNoaWxkfHxudWxsKTt9LGFwcGVuZENoaWxkOmZ1bmN0aW9uKHBhcmVudE5vZGUsbmV3Q2hpbGQpe3JldHVybiBuYXRpdmVBcHBlbmRDaGlsZC5jYWxsKHBhcmVudE5vZGUsbmV3Q2hpbGQpO30scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24ocGFyZW50Tm9kZSxub2RlKXtyZXR1cm4gbmF0aXZlUmVtb3ZlQ2hpbGQuY2FsbChwYXJlbnROb2RlLG5vZGUpO319O30oKSk7UG9seW1lci5Eb21BcGk9ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIFRyZWVBcGk9UG9seW1lci5UcmVlQXBpO3ZhciBEb21BcGk9ZnVuY3Rpb24obm9kZSl7dGhpcy5ub2RlPW5lZWRzVG9XcmFwP0RvbUFwaS53cmFwKG5vZGUpOm5vZGU7fTt2YXIgbmVlZHNUb1dyYXA9U2V0dGluZ3MuaGFzU2hhZG93JiYhU2V0dGluZ3MubmF0aXZlU2hhZG93O0RvbUFwaS53cmFwPXdpbmRvdy53cmFwP3dpbmRvdy53cmFwOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlO307RG9tQXBpLnByb3RvdHlwZT17Zmx1c2g6ZnVuY3Rpb24oKXtQb2x5bWVyLmRvbS5mbHVzaCgpO30sZGVlcENvbnRhaW5zOmZ1bmN0aW9uKG5vZGUpe2lmKHRoaXMubm9kZS5jb250YWlucyhub2RlKSl7cmV0dXJuIHRydWU7fQp2YXIgbj1ub2RlO3ZhciBkb2M9bm9kZS5vd25lckRvY3VtZW50O3doaWxlKG4mJm4hPT1kb2MmJm4hPT10aGlzLm5vZGUpe249UG9seW1lci5kb20obikucGFyZW50Tm9kZXx8bi5ob3N0O30KcmV0dXJuIG49PT10aGlzLm5vZGU7fSxxdWVyeURpc3RyaWJ1dGVkRWxlbWVudHM6ZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciBjJD10aGlzLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTt2YXIgbGlzdD1bXTtmb3IodmFyIGk9MCxsPWMkLmxlbmd0aCxjO2k8bCYmKGM9YyRbaV0pO2krKyl7aWYoYy5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFJiZEb21BcGkubWF0Y2hlc1NlbGVjdG9yLmNhbGwoYyxzZWxlY3Rvcikpe2xpc3QucHVzaChjKTt9fQpyZXR1cm4gbGlzdDt9LGdldEVmZmVjdGl2ZUNoaWxkTm9kZXM6ZnVuY3Rpb24oKXt2YXIgbGlzdD1bXTt2YXIgYyQ9dGhpcy5jaGlsZE5vZGVzO2Zvcih2YXIgaT0wLGw9YyQubGVuZ3RoLGM7aTxsJiYoYz1jJFtpXSk7aSsrKXtpZihjLmxvY2FsTmFtZT09PUNPTlRFTlQpe3ZhciBkJD1kb20oYykuZ2V0RGlzdHJpYnV0ZWROb2RlcygpO2Zvcih2YXIgaj0wO2o8ZCQubGVuZ3RoO2orKyl7bGlzdC5wdXNoKGQkW2pdKTt9fWVsc2V7bGlzdC5wdXNoKGMpO319CnJldHVybiBsaXN0O30sb2JzZXJ2ZU5vZGVzOmZ1bmN0aW9uKGNhbGxiYWNrKXtpZihjYWxsYmFjayl7aWYoIXRoaXMub2JzZXJ2ZXIpe3RoaXMub2JzZXJ2ZXI9dGhpcy5ub2RlLmxvY2FsTmFtZT09PUNPTlRFTlQ/bmV3IERvbUFwaS5EaXN0cmlidXRlZE5vZGVzT2JzZXJ2ZXIodGhpcyk6bmV3IERvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyKHRoaXMpO30KcmV0dXJuIHRoaXMub2JzZXJ2ZXIuYWRkTGlzdGVuZXIoY2FsbGJhY2spO319LHVub2JzZXJ2ZU5vZGVzOmZ1bmN0aW9uKGhhbmRsZSl7aWYodGhpcy5vYnNlcnZlcil7dGhpcy5vYnNlcnZlci5yZW1vdmVMaXN0ZW5lcihoYW5kbGUpO319LG5vdGlmeU9ic2VydmVyOmZ1bmN0aW9uKCl7aWYodGhpcy5vYnNlcnZlcil7dGhpcy5vYnNlcnZlci5ub3RpZnkoKTt9fSxfcXVlcnk6ZnVuY3Rpb24obWF0Y2hlcixub2RlLGhhbHRlcil7bm9kZT1ub2RlfHx0aGlzLm5vZGU7dmFyIGxpc3Q9W107dGhpcy5fcXVlcnlFbGVtZW50cyhUcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyhub2RlKSxtYXRjaGVyLGhhbHRlcixsaXN0KTtyZXR1cm4gbGlzdDt9LF9xdWVyeUVsZW1lbnRzOmZ1bmN0aW9uKGVsZW1lbnRzLG1hdGNoZXIsaGFsdGVyLGxpc3Qpe2Zvcih2YXIgaT0wLGw9ZWxlbWVudHMubGVuZ3RoLGM7aTxsJiYoYz1lbGVtZW50c1tpXSk7aSsrKXtpZihjLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe2lmKHRoaXMuX3F1ZXJ5RWxlbWVudChjLG1hdGNoZXIsaGFsdGVyLGxpc3QpKXtyZXR1cm4gdHJ1ZTt9fX19LF9xdWVyeUVsZW1lbnQ6ZnVuY3Rpb24obm9kZSxtYXRjaGVyLGhhbHRlcixsaXN0KXt2YXIgcmVzdWx0PW1hdGNoZXIobm9kZSk7aWYocmVzdWx0KXtsaXN0LnB1c2gobm9kZSk7fQppZihoYWx0ZXImJmhhbHRlcihyZXN1bHQpKXtyZXR1cm4gcmVzdWx0O30KdGhpcy5fcXVlcnlFbGVtZW50cyhUcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyhub2RlKSxtYXRjaGVyLGhhbHRlcixsaXN0KTt9fTt2YXIgQ09OVEVOVD1Eb21BcGkuQ09OVEVOVD0nY29udGVudCc7dmFyIGRvbT1Eb21BcGkuZmFjdG9yeT1mdW5jdGlvbihub2RlKXtub2RlPW5vZGV8fGRvY3VtZW50O2lmKCFub2RlLl9fZG9tQXBpKXtub2RlLl9fZG9tQXBpPW5ldyBEb21BcGkuY3Rvcihub2RlKTt9CnJldHVybiBub2RlLl9fZG9tQXBpO307RG9tQXBpLmhhc0FwaT1mdW5jdGlvbihub2RlKXtyZXR1cm4gQm9vbGVhbihub2RlLl9fZG9tQXBpKTt9O0RvbUFwaS5jdG9yPURvbUFwaTtQb2x5bWVyLmRvbT1mdW5jdGlvbihvYmoscGF0Y2gpe2lmKG9iaiBpbnN0YW5jZW9mIEV2ZW50KXtyZXR1cm4gUG9seW1lci5FdmVudEFwaS5mYWN0b3J5KG9iaik7fWVsc2V7cmV0dXJuIERvbUFwaS5mYWN0b3J5KG9iaixwYXRjaCk7fX07dmFyIHA9RWxlbWVudC5wcm90b3R5cGU7RG9tQXBpLm1hdGNoZXNTZWxlY3Rvcj1wLm1hdGNoZXN8fHAubWF0Y2hlc1NlbGVjdG9yfHxwLm1vek1hdGNoZXNTZWxlY3Rvcnx8cC5tc01hdGNoZXNTZWxlY3Rvcnx8cC5vTWF0Y2hlc1NlbGVjdG9yfHxwLndlYmtpdE1hdGNoZXNTZWxlY3RvcjtyZXR1cm4gRG9tQXBpO30oKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIERvbUFwaT1Qb2x5bWVyLkRvbUFwaTt2YXIgZG9tPURvbUFwaS5mYWN0b3J5O3ZhciBUcmVlQXBpPVBvbHltZXIuVHJlZUFwaTt2YXIgZ2V0SW5uZXJIVE1MPVBvbHltZXIuZG9tSW5uZXJIVE1MLmdldElubmVySFRNTDt2YXIgQ09OVEVOVD1Eb21BcGkuQ09OVEVOVDtpZihTZXR0aW5ncy51c2VTaGFkb3cpe3JldHVybjt9CnZhciBuYXRpdmVDbG9uZU5vZGU9RWxlbWVudC5wcm90b3R5cGUuY2xvbmVOb2RlO3ZhciBuYXRpdmVJbXBvcnROb2RlPURvY3VtZW50LnByb3RvdHlwZS5pbXBvcnROb2RlO1BvbHltZXIuQmFzZS5taXhpbihEb21BcGkucHJvdG90eXBlLHtfbGF6eURpc3RyaWJ1dGU6ZnVuY3Rpb24oaG9zdCl7aWYoaG9zdC5zaGFkeVJvb3QmJmhvc3Quc2hhZHlSb290Ll9kaXN0cmlidXRpb25DbGVhbil7aG9zdC5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuPWZhbHNlO1BvbHltZXIuZG9tLmFkZERlYm91bmNlcihob3N0LmRlYm91bmNlKCdfZGlzdHJpYnV0ZScsaG9zdC5fZGlzdHJpYnV0ZUNvbnRlbnQpKTt9fSxhcHBlbmRDaGlsZDpmdW5jdGlvbihub2RlKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUobm9kZSk7fSxpbnNlcnRCZWZvcmU6ZnVuY3Rpb24obm9kZSxyZWZfbm9kZSl7aWYocmVmX25vZGUmJlRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKHJlZl9ub2RlKSE9PXRoaXMubm9kZSl7dGhyb3cgRXJyb3IoJ1RoZSByZWZfbm9kZSB0byBiZSBpbnNlcnRlZCBiZWZvcmUgaXMgbm90IGEgY2hpbGQgJysnb2YgdGhpcyBub2RlJyk7fQppZihub2RlLm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFKXt2YXIgcGFyZW50PVRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG5vZGUpO2lmKHBhcmVudCl7aWYoRG9tQXBpLmhhc0FwaShwYXJlbnQpKXtkb20ocGFyZW50KS5ub3RpZnlPYnNlcnZlcigpO30KdGhpcy5fcmVtb3ZlTm9kZShub2RlKTt9ZWxzZXt0aGlzLl9yZW1vdmVPd25lclNoYWR5Um9vdChub2RlKTt9fQppZighdGhpcy5fYWRkTm9kZShub2RlLHJlZl9ub2RlKSl7aWYocmVmX25vZGUpe3JlZl9ub2RlPXJlZl9ub2RlLmxvY2FsTmFtZT09PUNPTlRFTlQ/dGhpcy5fZmlyc3RDb21wb3NlZE5vZGUocmVmX25vZGUpOnJlZl9ub2RlO30KdmFyIGNvbnRhaW5lcj10aGlzLm5vZGUuX2lzU2hhZHlSb290P3RoaXMubm9kZS5ob3N0OnRoaXMubm9kZTtpZihyZWZfbm9kZSl7VHJlZUFwaS5Db21wb3NlZC5pbnNlcnRCZWZvcmUoY29udGFpbmVyLG5vZGUscmVmX25vZGUpO31lbHNle1RyZWVBcGkuQ29tcG9zZWQuYXBwZW5kQ2hpbGQoY29udGFpbmVyLG5vZGUpO319CnRoaXMubm90aWZ5T2JzZXJ2ZXIoKTtyZXR1cm4gbm9kZTt9LF9hZGROb2RlOmZ1bmN0aW9uKG5vZGUscmVmX25vZGUpe3ZhciByb290PXRoaXMuZ2V0T3duZXJSb290KCk7aWYocm9vdCl7dmFyIGlwQWRkZWQ9dGhpcy5fbWF5YmVBZGRJbnNlcnRpb25Qb2ludChub2RlLHRoaXMubm9kZSk7aWYoIXJvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHMpe3Jvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHM9aXBBZGRlZDt9CnRoaXMuX2FkZE5vZGVUb0hvc3Qocm9vdC5ob3N0LG5vZGUpO30KaWYoVHJlZUFwaS5Mb2dpY2FsLmhhc0NoaWxkTm9kZXModGhpcy5ub2RlKSl7VHJlZUFwaS5Mb2dpY2FsLnJlY29yZEluc2VydEJlZm9yZShub2RlLHRoaXMubm9kZSxyZWZfbm9kZSk7fQp2YXIgaGFuZGxlZD10aGlzLl9tYXliZURpc3RyaWJ1dGUobm9kZSl8fHRoaXMubm9kZS5zaGFkeVJvb3Q7aWYoaGFuZGxlZCl7aWYobm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSl7d2hpbGUobm9kZS5maXJzdENoaWxkKXtUcmVlQXBpLkNvbXBvc2VkLnJlbW92ZUNoaWxkKG5vZGUsbm9kZS5maXJzdENoaWxkKTt9fWVsc2V7dmFyIHBhcmVudD1UcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobm9kZSk7aWYocGFyZW50KXtUcmVlQXBpLkNvbXBvc2VkLnJlbW92ZUNoaWxkKHBhcmVudCxub2RlKTt9fX0KcmV0dXJuIGhhbmRsZWQ7fSxyZW1vdmVDaGlsZDpmdW5jdGlvbihub2RlKXtpZihUcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShub2RlKSE9PXRoaXMubm9kZSl7dGhyb3cgRXJyb3IoJ1RoZSBub2RlIHRvIGJlIHJlbW92ZWQgaXMgbm90IGEgY2hpbGQgb2YgdGhpcyBub2RlOiAnK25vZGUpO30KaWYoIXRoaXMuX3JlbW92ZU5vZGUobm9kZSkpe3ZhciBjb250YWluZXI9dGhpcy5ub2RlLl9pc1NoYWR5Um9vdD90aGlzLm5vZGUuaG9zdDp0aGlzLm5vZGU7dmFyIHBhcmVudD1UcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobm9kZSk7aWYoY29udGFpbmVyPT09cGFyZW50KXtUcmVlQXBpLkNvbXBvc2VkLnJlbW92ZUNoaWxkKGNvbnRhaW5lcixub2RlKTt9fQp0aGlzLm5vdGlmeU9ic2VydmVyKCk7cmV0dXJuIG5vZGU7fSxfcmVtb3ZlTm9kZTpmdW5jdGlvbihub2RlKXt2YXIgbG9naWNhbFBhcmVudD1UcmVlQXBpLkxvZ2ljYWwuaGFzUGFyZW50Tm9kZShub2RlKSYmVHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUobm9kZSk7dmFyIGRpc3RyaWJ1dGVkO3ZhciByb290PXRoaXMuX293bmVyU2hhZHlSb290Rm9yTm9kZShub2RlKTtpZihsb2dpY2FsUGFyZW50KXtkaXN0cmlidXRlZD1kb20obm9kZSkuX21heWJlRGlzdHJpYnV0ZVBhcmVudCgpO1RyZWVBcGkuTG9naWNhbC5yZWNvcmRSZW1vdmVDaGlsZChub2RlLGxvZ2ljYWxQYXJlbnQpO2lmKHJvb3QmJnRoaXMuX3JlbW92ZURpc3RyaWJ1dGVkQ2hpbGRyZW4ocm9vdCxub2RlKSl7cm9vdC5faW52YWxpZEluc2VydGlvblBvaW50cz10cnVlO3RoaXMuX2xhenlEaXN0cmlidXRlKHJvb3QuaG9zdCk7fX0KdGhpcy5fcmVtb3ZlT3duZXJTaGFkeVJvb3Qobm9kZSk7aWYocm9vdCl7dGhpcy5fcmVtb3ZlTm9kZUZyb21Ib3N0KHJvb3QuaG9zdCxub2RlKTt9CnJldHVybiBkaXN0cmlidXRlZDt9LHJlcGxhY2VDaGlsZDpmdW5jdGlvbihub2RlLHJlZl9ub2RlKXt0aGlzLmluc2VydEJlZm9yZShub2RlLHJlZl9ub2RlKTt0aGlzLnJlbW92ZUNoaWxkKHJlZl9ub2RlKTtyZXR1cm4gbm9kZTt9LF9oYXNDYWNoZWRPd25lclJvb3Q6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIEJvb2xlYW4obm9kZS5fb3duZXJTaGFkeVJvb3QhPT11bmRlZmluZWQpO30sZ2V0T3duZXJSb290OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX293bmVyU2hhZHlSb290Rm9yTm9kZSh0aGlzLm5vZGUpO30sX293bmVyU2hhZHlSb290Rm9yTm9kZTpmdW5jdGlvbihub2RlKXtpZighbm9kZSl7cmV0dXJuO30KdmFyIHJvb3Q9bm9kZS5fb3duZXJTaGFkeVJvb3Q7aWYocm9vdD09PXVuZGVmaW5lZCl7aWYobm9kZS5faXNTaGFkeVJvb3Qpe3Jvb3Q9bm9kZTt9ZWxzZXt2YXIgcGFyZW50PVRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG5vZGUpO2lmKHBhcmVudCl7cm9vdD1wYXJlbnQuX2lzU2hhZHlSb290P3BhcmVudDp0aGlzLl9vd25lclNoYWR5Um9vdEZvck5vZGUocGFyZW50KTt9ZWxzZXtyb290PW51bGw7fX0KaWYocm9vdHx8ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmNvbnRhaW5zKG5vZGUpKXtub2RlLl9vd25lclNoYWR5Um9vdD1yb290O319CnJldHVybiByb290O30sX21heWJlRGlzdHJpYnV0ZTpmdW5jdGlvbihub2RlKXt2YXIgZnJhZ0NvbnRlbnQ9bm9kZS5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmIW5vZGUuX19ub0NvbnRlbnQmJmRvbShub2RlKS5xdWVyeVNlbGVjdG9yKENPTlRFTlQpO3ZhciB3cmFwcGVkQ29udGVudD1mcmFnQ29udGVudCYmVHJlZUFwaS5Mb2dpY2FsLmdldFBhcmVudE5vZGUoZnJhZ0NvbnRlbnQpLm5vZGVUeXBlIT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFO3ZhciBoYXNDb250ZW50PWZyYWdDb250ZW50fHxub2RlLmxvY2FsTmFtZT09PUNPTlRFTlQ7aWYoaGFzQ29udGVudCl7dmFyIHJvb3Q9dGhpcy5nZXRPd25lclJvb3QoKTtpZihyb290KXt0aGlzLl9sYXp5RGlzdHJpYnV0ZShyb290Lmhvc3QpO319CnZhciBuZWVkc0Rpc3Q9dGhpcy5fbm9kZU5lZWRzRGlzdHJpYnV0aW9uKHRoaXMubm9kZSk7aWYobmVlZHNEaXN0KXt0aGlzLl9sYXp5RGlzdHJpYnV0ZSh0aGlzLm5vZGUpO30KcmV0dXJuIG5lZWRzRGlzdHx8aGFzQ29udGVudCYmIXdyYXBwZWRDb250ZW50O30sX21heWJlQWRkSW5zZXJ0aW9uUG9pbnQ6ZnVuY3Rpb24obm9kZSxwYXJlbnQpe3ZhciBhZGRlZDtpZihub2RlLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiYhbm9kZS5fX25vQ29udGVudCl7dmFyIGMkPWRvbShub2RlKS5xdWVyeVNlbGVjdG9yQWxsKENPTlRFTlQpO2Zvcih2YXIgaT0wLG4sbnAsbmE7aTxjJC5sZW5ndGgmJihuPWMkW2ldKTtpKyspe25wPVRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKG4pO2lmKG5wPT09bm9kZSl7bnA9cGFyZW50O30KbmE9dGhpcy5fbWF5YmVBZGRJbnNlcnRpb25Qb2ludChuLG5wKTthZGRlZD1hZGRlZHx8bmE7fX1lbHNlIGlmKG5vZGUubG9jYWxOYW1lPT09Q09OVEVOVCl7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKHBhcmVudCk7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKG5vZGUpO2FkZGVkPXRydWU7fQpyZXR1cm4gYWRkZWQ7fSxfdXBkYXRlSW5zZXJ0aW9uUG9pbnRzOmZ1bmN0aW9uKGhvc3Qpe3ZhciBpJD1ob3N0LnNoYWR5Um9vdC5faW5zZXJ0aW9uUG9pbnRzPWRvbShob3N0LnNoYWR5Um9vdCkucXVlcnlTZWxlY3RvckFsbChDT05URU5UKTtmb3IodmFyIGk9MCxjO2k8aSQubGVuZ3RoO2krKyl7Yz1pJFtpXTtUcmVlQXBpLkxvZ2ljYWwuc2F2ZUNoaWxkTm9kZXMoYyk7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKFRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKGMpKTt9fSxfbm9kZU5lZWRzRGlzdHJpYnV0aW9uOmZ1bmN0aW9uKG5vZGUpe3JldHVybiBub2RlJiZub2RlLnNoYWR5Um9vdCYmRG9tQXBpLmhhc0luc2VydGlvblBvaW50KG5vZGUuc2hhZHlSb290KTt9LF9hZGROb2RlVG9Ib3N0OmZ1bmN0aW9uKGhvc3Qsbm9kZSl7aWYoaG9zdC5fZWxlbWVudEFkZCl7aG9zdC5fZWxlbWVudEFkZChub2RlKTt9fSxfcmVtb3ZlTm9kZUZyb21Ib3N0OmZ1bmN0aW9uKGhvc3Qsbm9kZSl7aWYoaG9zdC5fZWxlbWVudFJlbW92ZSl7aG9zdC5fZWxlbWVudFJlbW92ZShub2RlKTt9fSxfcmVtb3ZlRGlzdHJpYnV0ZWRDaGlsZHJlbjpmdW5jdGlvbihyb290LGNvbnRhaW5lcil7dmFyIGhvc3ROZWVkc0Rpc3Q7dmFyIGlwJD1yb290Ll9pbnNlcnRpb25Qb2ludHM7Zm9yKHZhciBpPTA7aTxpcCQubGVuZ3RoO2krKyl7dmFyIGNvbnRlbnQ9aXAkW2ldO2lmKHRoaXMuX2NvbnRhaW5zKGNvbnRhaW5lcixjb250ZW50KSl7dmFyIGRjJD1kb20oY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpO2Zvcih2YXIgaj0wO2o8ZGMkLmxlbmd0aDtqKyspe2hvc3ROZWVkc0Rpc3Q9dHJ1ZTt2YXIgbm9kZT1kYyRbal07dmFyIHBhcmVudD1UcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobm9kZSk7aWYocGFyZW50KXtUcmVlQXBpLkNvbXBvc2VkLnJlbW92ZUNoaWxkKHBhcmVudCxub2RlKTt9fX19CnJldHVybiBob3N0TmVlZHNEaXN0O30sX2NvbnRhaW5zOmZ1bmN0aW9uKGNvbnRhaW5lcixub2RlKXt3aGlsZShub2RlKXtpZihub2RlPT1jb250YWluZXIpe3JldHVybiB0cnVlO30Kbm9kZT1UcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShub2RlKTt9fSxfcmVtb3ZlT3duZXJTaGFkeVJvb3Q6ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5faGFzQ2FjaGVkT3duZXJSb290KG5vZGUpKXt2YXIgYyQ9VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMobm9kZSk7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsbjtpPGwmJihuPWMkW2ldKTtpKyspe3RoaXMuX3JlbW92ZU93bmVyU2hhZHlSb290KG4pO319Cm5vZGUuX293bmVyU2hhZHlSb290PXVuZGVmaW5lZDt9LF9maXJzdENvbXBvc2VkTm9kZTpmdW5jdGlvbihjb250ZW50KXt2YXIgbiQ9ZG9tKGNvbnRlbnQpLmdldERpc3RyaWJ1dGVkTm9kZXMoKTtmb3IodmFyIGk9MCxsPW4kLmxlbmd0aCxuLHAkO2k8bCYmKG49biRbaV0pO2krKyl7cCQ9ZG9tKG4pLmdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCk7aWYocCRbcCQubGVuZ3RoLTFdPT09Y29udGVudCl7cmV0dXJuIG47fX19LHF1ZXJ5U2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3Ipe3ZhciByZXN1bHQ9dGhpcy5fcXVlcnkoZnVuY3Rpb24obil7cmV0dXJuIERvbUFwaS5tYXRjaGVzU2VsZWN0b3IuY2FsbChuLHNlbGVjdG9yKTt9LHRoaXMubm9kZSxmdW5jdGlvbihuKXtyZXR1cm4gQm9vbGVhbihuKTt9KVswXTtyZXR1cm4gcmVzdWx0fHxudWxsO30scXVlcnlTZWxlY3RvckFsbDpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuX3F1ZXJ5KGZ1bmN0aW9uKG4pe3JldHVybiBEb21BcGkubWF0Y2hlc1NlbGVjdG9yLmNhbGwobixzZWxlY3Rvcik7fSx0aGlzLm5vZGUpO30sZ2V0RGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5ub2RlLl9kZXN0aW5hdGlvbkluc2VydGlvblBvaW50c3x8W107fSxnZXREaXN0cmlidXRlZE5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS5fZGlzdHJpYnV0ZWROb2Rlc3x8W107fSxfY2xlYXI6ZnVuY3Rpb24oKXt3aGlsZSh0aGlzLmNoaWxkTm9kZXMubGVuZ3RoKXt0aGlzLnJlbW92ZUNoaWxkKHRoaXMuY2hpbGROb2Rlc1swXSk7fX0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKG5hbWUsdmFsdWUpe3RoaXMubm9kZS5zZXRBdHRyaWJ1dGUobmFtZSx2YWx1ZSk7dGhpcy5fbWF5YmVEaXN0cmlidXRlUGFyZW50KCk7fSxyZW1vdmVBdHRyaWJ1dGU6ZnVuY3Rpb24obmFtZSl7dGhpcy5ub2RlLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTt0aGlzLl9tYXliZURpc3RyaWJ1dGVQYXJlbnQoKTt9LF9tYXliZURpc3RyaWJ1dGVQYXJlbnQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9ub2RlTmVlZHNEaXN0cmlidXRpb24odGhpcy5wYXJlbnROb2RlKSl7dGhpcy5fbGF6eURpc3RyaWJ1dGUodGhpcy5wYXJlbnROb2RlKTtyZXR1cm4gdHJ1ZTt9fSxjbG9uZU5vZGU6ZnVuY3Rpb24oZGVlcCl7dmFyIG49bmF0aXZlQ2xvbmVOb2RlLmNhbGwodGhpcy5ub2RlLGZhbHNlKTtpZihkZWVwKXt2YXIgYyQ9dGhpcy5jaGlsZE5vZGVzO3ZhciBkPWRvbShuKTtmb3IodmFyIGk9MCxuYztpPGMkLmxlbmd0aDtpKyspe25jPWRvbShjJFtpXSkuY2xvbmVOb2RlKHRydWUpO2QuYXBwZW5kQ2hpbGQobmMpO319CnJldHVybiBuO30saW1wb3J0Tm9kZTpmdW5jdGlvbihleHRlcm5hbE5vZGUsZGVlcCl7dmFyIGRvYz10aGlzLm5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudD90aGlzLm5vZGU6dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQ7dmFyIG49bmF0aXZlSW1wb3J0Tm9kZS5jYWxsKGRvYyxleHRlcm5hbE5vZGUsZmFsc2UpO2lmKGRlZXApe3ZhciBjJD1UcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2RlcyhleHRlcm5hbE5vZGUpO3ZhciBkPWRvbShuKTtmb3IodmFyIGk9MCxuYztpPGMkLmxlbmd0aDtpKyspe25jPWRvbShkb2MpLmltcG9ydE5vZGUoYyRbaV0sdHJ1ZSk7ZC5hcHBlbmRDaGlsZChuYyk7fX0KcmV0dXJuIG47fSxfZ2V0Q29tcG9zZWRJbm5lckhUTUw6ZnVuY3Rpb24oKXtyZXR1cm4gZ2V0SW5uZXJIVE1MKHRoaXMubm9kZSx0cnVlKTt9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSx7YWN0aXZlRWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7dmFyIGFjdGl2ZT1kb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFhY3RpdmUpe3JldHVybiBudWxsO30KdmFyIGlzU2hhZHlSb290PSEhdGhpcy5ub2RlLl9pc1NoYWR5Um9vdDtpZih0aGlzLm5vZGUhPT1kb2N1bWVudCl7aWYoIWlzU2hhZHlSb290KXtyZXR1cm4gbnVsbDt9CmlmKHRoaXMubm9kZS5ob3N0PT09YWN0aXZlfHwhdGhpcy5ub2RlLmhvc3QuY29udGFpbnMoYWN0aXZlKSl7cmV0dXJuIG51bGw7fX0KdmFyIGFjdGl2ZVJvb3Q9ZG9tKGFjdGl2ZSkuZ2V0T3duZXJSb290KCk7d2hpbGUoYWN0aXZlUm9vdCYmYWN0aXZlUm9vdCE9PXRoaXMubm9kZSl7YWN0aXZlPWFjdGl2ZVJvb3QuaG9zdDthY3RpdmVSb290PWRvbShhY3RpdmUpLmdldE93bmVyUm9vdCgpO30KaWYodGhpcy5ub2RlPT09ZG9jdW1lbnQpe3JldHVybiBhY3RpdmVSb290P251bGw6YWN0aXZlO31lbHNle3JldHVybiBhY3RpdmVSb290PT09dGhpcy5ub2RlP2FjdGl2ZTpudWxsO319LGNvbmZpZ3VyYWJsZTp0cnVlfSxjaGlsZE5vZGVzOntnZXQ6ZnVuY3Rpb24oKXt2YXIgYyQ9VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXModGhpcy5ub2RlKTtyZXR1cm4gQXJyYXkuaXNBcnJheShjJCk/YyQ6VHJlZUFwaS5hcnJheUNvcHlDaGlsZE5vZGVzKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sY2hpbGRyZW46e2dldDpmdW5jdGlvbigpe2lmKFRyZWVBcGkuTG9naWNhbC5oYXNDaGlsZE5vZGVzKHRoaXMubm9kZSkpe3JldHVybiBBcnJheS5wcm90b3R5cGUuZmlsdGVyLmNhbGwodGhpcy5jaGlsZE5vZGVzLGZ1bmN0aW9uKG4pe3JldHVybiBuLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU7fSk7fWVsc2V7cmV0dXJuIFRyZWVBcGkuYXJyYXlDb3B5Q2hpbGRyZW4odGhpcy5ub2RlKTt9fSxjb25maWd1cmFibGU6dHJ1ZX0scGFyZW50Tm9kZTp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sZmlyc3RDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRGaXJzdENoaWxkKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sbGFzdENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldExhc3RDaGlsZCh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LG5leHRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldE5leHRTaWJsaW5nKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0scHJldmlvdXNTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldFByZXZpb3VzU2libGluZyh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LGZpcnN0RWxlbWVudENoaWxkOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldEZpcnN0RWxlbWVudENoaWxkKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sbGFzdEVsZW1lbnRDaGlsZDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuTG9naWNhbC5nZXRMYXN0RWxlbWVudENoaWxkKHRoaXMubm9kZSk7fSxjb25maWd1cmFibGU6dHJ1ZX0sbmV4dEVsZW1lbnRTaWJsaW5nOntnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gVHJlZUFwaS5Mb2dpY2FsLmdldE5leHRFbGVtZW50U2libGluZyh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LHByZXZpb3VzRWxlbWVudFNpYmxpbmc6e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLkxvZ2ljYWwuZ2V0UHJldmlvdXNFbGVtZW50U2libGluZyh0aGlzLm5vZGUpO30sY29uZmlndXJhYmxlOnRydWV9LHRleHRDb250ZW50OntnZXQ6ZnVuY3Rpb24oKXt2YXIgbnQ9dGhpcy5ub2RlLm5vZGVUeXBlO2lmKG50PT09Tm9kZS5URVhUX05PREV8fG50PT09Tm9kZS5DT01NRU5UX05PREUpe3JldHVybiB0aGlzLm5vZGUudGV4dENvbnRlbnQ7fWVsc2V7dmFyIHRjPVtdO2Zvcih2YXIgaT0wLGNuPXRoaXMuY2hpbGROb2RlcyxjO2M9Y25baV07aSsrKXtpZihjLm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUpe3RjLnB1c2goYy50ZXh0Q29udGVudCk7fX0KcmV0dXJuIHRjLmpvaW4oJycpO319LHNldDpmdW5jdGlvbih0ZXh0KXt2YXIgbnQ9dGhpcy5ub2RlLm5vZGVUeXBlO2lmKG50PT09Tm9kZS5URVhUX05PREV8fG50PT09Tm9kZS5DT01NRU5UX05PREUpe3RoaXMubm9kZS50ZXh0Q29udGVudD10ZXh0O31lbHNle3RoaXMuX2NsZWFyKCk7aWYodGV4dCl7dGhpcy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ZXh0KSk7fX19LGNvbmZpZ3VyYWJsZTp0cnVlfSxpbm5lckhUTUw6e2dldDpmdW5jdGlvbigpe3ZhciBudD10aGlzLm5vZGUubm9kZVR5cGU7aWYobnQ9PT1Ob2RlLlRFWFRfTk9ERXx8bnQ9PT1Ob2RlLkNPTU1FTlRfTk9ERSl7cmV0dXJuIG51bGw7fWVsc2V7cmV0dXJuIGdldElubmVySFRNTCh0aGlzLm5vZGUpO319LHNldDpmdW5jdGlvbih0ZXh0KXt2YXIgbnQ9dGhpcy5ub2RlLm5vZGVUeXBlO2lmKG50IT09Tm9kZS5URVhUX05PREV8fG50IT09Tm9kZS5DT01NRU5UX05PREUpe3RoaXMuX2NsZWFyKCk7dmFyIGQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZC5pbm5lckhUTUw9dGV4dDt2YXIgYyQ9VHJlZUFwaS5hcnJheUNvcHlDaGlsZE5vZGVzKGQpO2Zvcih2YXIgaT0wO2k8YyQubGVuZ3RoO2krKyl7dGhpcy5hcHBlbmRDaGlsZChjJFtpXSk7fX19LGNvbmZpZ3VyYWJsZTp0cnVlfX0pO0RvbUFwaS5oYXNJbnNlcnRpb25Qb2ludD1mdW5jdGlvbihyb290KXtyZXR1cm4gQm9vbGVhbihyb290JiZyb290Ll9pbnNlcnRpb25Qb2ludHMubGVuZ3RoKTt9O30oKSk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBTZXR0aW5ncz1Qb2x5bWVyLlNldHRpbmdzO3ZhciBUcmVlQXBpPVBvbHltZXIuVHJlZUFwaTt2YXIgRG9tQXBpPVBvbHltZXIuRG9tQXBpO2lmKCFTZXR0aW5ncy51c2VTaGFkb3cpe3JldHVybjt9ClBvbHltZXIuQmFzZS5taXhpbihEb21BcGkucHJvdG90eXBlLHtxdWVyeVNlbGVjdG9yQWxsOmZ1bmN0aW9uKHNlbGVjdG9yKXtyZXR1cm4gVHJlZUFwaS5hcnJheUNvcHkodGhpcy5ub2RlLnF1ZXJ5U2VsZWN0b3JBbGwoc2VsZWN0b3IpKTt9LGdldE93bmVyUm9vdDpmdW5jdGlvbigpe3ZhciBuPXRoaXMubm9kZTt3aGlsZShuKXtpZihuLm5vZGVUeXBlPT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiZuLmhvc3Qpe3JldHVybiBuO30Kbj1uLnBhcmVudE5vZGU7fX0saW1wb3J0Tm9kZTpmdW5jdGlvbihleHRlcm5hbE5vZGUsZGVlcCl7dmFyIGRvYz10aGlzLm5vZGUgaW5zdGFuY2VvZiBEb2N1bWVudD90aGlzLm5vZGU6dGhpcy5ub2RlLm93bmVyRG9jdW1lbnQ7cmV0dXJuIGRvYy5pbXBvcnROb2RlKGV4dGVybmFsTm9kZSxkZWVwKTt9LGdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzOmZ1bmN0aW9uKCl7dmFyIG4kPXRoaXMubm9kZS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cyYmdGhpcy5ub2RlLmdldERlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKCk7cmV0dXJuIG4kP1RyZWVBcGkuYXJyYXlDb3B5KG4kKTpbXTt9LGdldERpc3RyaWJ1dGVkTm9kZXM6ZnVuY3Rpb24oKXt2YXIgbiQ9dGhpcy5ub2RlLmdldERpc3RyaWJ1dGVkTm9kZXMmJnRoaXMubm9kZS5nZXREaXN0cmlidXRlZE5vZGVzKCk7cmV0dXJuIG4kP1RyZWVBcGkuYXJyYXlDb3B5KG4kKTpbXTt9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoRG9tQXBpLnByb3RvdHlwZSx7YWN0aXZlRWxlbWVudDp7Z2V0OmZ1bmN0aW9uKCl7dmFyIG5vZGU9RG9tQXBpLndyYXAodGhpcy5ub2RlKTt2YXIgYWN0aXZlRWxlbWVudD1ub2RlLmFjdGl2ZUVsZW1lbnQ7cmV0dXJuIG5vZGUuY29udGFpbnMoYWN0aXZlRWxlbWVudCk/YWN0aXZlRWxlbWVudDpudWxsO30sY29uZmlndXJhYmxlOnRydWV9LGNoaWxkTm9kZXM6e2dldDpmdW5jdGlvbigpe3JldHVybiBUcmVlQXBpLmFycmF5Q29weUNoaWxkTm9kZXModGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxjaGlsZHJlbjp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFRyZWVBcGkuYXJyYXlDb3B5Q2hpbGRyZW4odGhpcy5ub2RlKTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSx0ZXh0Q29udGVudDp7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubm9kZS50ZXh0Q29udGVudDt9LHNldDpmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHRoaXMubm9kZS50ZXh0Q29udGVudD12YWx1ZTt9LGNvbmZpZ3VyYWJsZTp0cnVlfSxpbm5lckhUTUw6e2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuaW5uZXJIVE1MO30sc2V0OmZ1bmN0aW9uKHZhbHVlKXtyZXR1cm4gdGhpcy5ub2RlLmlubmVySFRNTD12YWx1ZTt9LGNvbmZpZ3VyYWJsZTp0cnVlfX0pO3ZhciBmb3J3YXJkTWV0aG9kcz1mdW5jdGlvbihtJCl7Zm9yKHZhciBpPTA7aTxtJC5sZW5ndGg7aSsrKXtmb3J3YXJkTWV0aG9kKG0kW2ldKTt9fTt2YXIgZm9yd2FyZE1ldGhvZD1mdW5jdGlvbihtZXRob2Qpe0RvbUFwaS5wcm90b3R5cGVbbWV0aG9kXT1mdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbWV0aG9kXS5hcHBseSh0aGlzLm5vZGUsYXJndW1lbnRzKTt9O307Zm9yd2FyZE1ldGhvZHMoWydjbG9uZU5vZGUnLCdhcHBlbmRDaGlsZCcsJ2luc2VydEJlZm9yZScsJ3JlbW92ZUNoaWxkJywncmVwbGFjZUNoaWxkJywnc2V0QXR0cmlidXRlJywncmVtb3ZlQXR0cmlidXRlJywncXVlcnlTZWxlY3RvciddKTt2YXIgZm9yd2FyZFByb3BlcnRpZXM9ZnVuY3Rpb24oZiQpe2Zvcih2YXIgaT0wO2k8ZiQubGVuZ3RoO2krKyl7Zm9yd2FyZFByb3BlcnR5KGYkW2ldKTt9fTt2YXIgZm9yd2FyZFByb3BlcnR5PWZ1bmN0aW9uKG5hbWUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb21BcGkucHJvdG90eXBlLG5hbWUse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGVbbmFtZV07fSxjb25maWd1cmFibGU6dHJ1ZX0pO307Zm9yd2FyZFByb3BlcnRpZXMoWydwYXJlbnROb2RlJywnZmlyc3RDaGlsZCcsJ2xhc3RDaGlsZCcsJ25leHRTaWJsaW5nJywncHJldmlvdXNTaWJsaW5nJywnZmlyc3RFbGVtZW50Q2hpbGQnLCdsYXN0RWxlbWVudENoaWxkJywnbmV4dEVsZW1lbnRTaWJsaW5nJywncHJldmlvdXNFbGVtZW50U2libGluZyddKTt9KCkpO1BvbHltZXIuQmFzZS5taXhpbihQb2x5bWVyLmRvbSx7X2ZsdXNoR3VhcmQ6MCxfRkxVU0hfTUFYOjEwMCxfbmVlZHNUYWtlUmVjb3JkczohUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDdXN0b21FbGVtZW50cyxfZGVib3VuY2VyczpbXSxfc3RhdGljRmx1c2hMaXN0OltdLF9maW5pc2hEZWJvdW5jZXI6bnVsbCxmbHVzaDpmdW5jdGlvbigpe3RoaXMuX2ZsdXNoR3VhcmQ9MDt0aGlzLl9wcmVwYXJlRmx1c2goKTt3aGlsZSh0aGlzLl9kZWJvdW5jZXJzLmxlbmd0aCYmdGhpcy5fZmx1c2hHdWFyZDx0aGlzLl9GTFVTSF9NQVgpe3doaWxlKHRoaXMuX2RlYm91bmNlcnMubGVuZ3RoKXt0aGlzLl9kZWJvdW5jZXJzLnNoaWZ0KCkuY29tcGxldGUoKTt9CmlmKHRoaXMuX2ZpbmlzaERlYm91bmNlcil7dGhpcy5fZmluaXNoRGVib3VuY2VyLmNvbXBsZXRlKCk7fQp0aGlzLl9wcmVwYXJlRmx1c2goKTt0aGlzLl9mbHVzaEd1YXJkKys7fQppZih0aGlzLl9mbHVzaEd1YXJkPj10aGlzLl9GTFVTSF9NQVgpe2NvbnNvbGUud2FybignUG9seW1lci5kb20uZmx1c2ggYWJvcnRlZC4gRmx1c2ggbWF5IG5vdCBiZSBjb21wbGV0ZS4nKTt9fSxfcHJlcGFyZUZsdXNoOmZ1bmN0aW9uKCl7aWYodGhpcy5fbmVlZHNUYWtlUmVjb3Jkcyl7Q3VzdG9tRWxlbWVudHMudGFrZVJlY29yZHMoKTt9CmZvcih2YXIgaT0wO2k8dGhpcy5fc3RhdGljRmx1c2hMaXN0Lmxlbmd0aDtpKyspe3RoaXMuX3N0YXRpY0ZsdXNoTGlzdFtpXSgpO319LGFkZFN0YXRpY0ZsdXNoOmZ1bmN0aW9uKGZuKXt0aGlzLl9zdGF0aWNGbHVzaExpc3QucHVzaChmbik7fSxyZW1vdmVTdGF0aWNGbHVzaDpmdW5jdGlvbihmbil7dmFyIGk9dGhpcy5fc3RhdGljRmx1c2hMaXN0LmluZGV4T2YoZm4pO2lmKGk+PTApe3RoaXMuX3N0YXRpY0ZsdXNoTGlzdC5zcGxpY2UoaSwxKTt9fSxhZGREZWJvdW5jZXI6ZnVuY3Rpb24oZGVib3VuY2VyKXt0aGlzLl9kZWJvdW5jZXJzLnB1c2goZGVib3VuY2VyKTt0aGlzLl9maW5pc2hEZWJvdW5jZXI9UG9seW1lci5EZWJvdW5jZSh0aGlzLl9maW5pc2hEZWJvdW5jZXIsdGhpcy5fZmluaXNoRmx1c2gpO30sX2ZpbmlzaEZsdXNoOmZ1bmN0aW9uKCl7UG9seW1lci5kb20uX2RlYm91bmNlcnM9W107fX0pO1BvbHltZXIuRXZlbnRBcGk9ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIERvbUFwaT1Qb2x5bWVyLkRvbUFwaS5jdG9yO3ZhciBTZXR0aW5ncz1Qb2x5bWVyLlNldHRpbmdzO0RvbUFwaS5FdmVudD1mdW5jdGlvbihldmVudCl7dGhpcy5ldmVudD1ldmVudDt9O2lmKFNldHRpbmdzLnVzZVNoYWRvdyl7RG9tQXBpLkV2ZW50LnByb3RvdHlwZT17Z2V0IHJvb3RUYXJnZXQoKXtyZXR1cm4gdGhpcy5ldmVudC5wYXRoWzBdO30sZ2V0IGxvY2FsVGFyZ2V0KCl7cmV0dXJuIHRoaXMuZXZlbnQudGFyZ2V0O30sZ2V0IHBhdGgoKXt2YXIgcGF0aD10aGlzLmV2ZW50LnBhdGg7aWYoIUFycmF5LmlzQXJyYXkocGF0aCkpe3BhdGg9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwocGF0aCk7fQpyZXR1cm4gcGF0aDt9fTt9ZWxzZXtEb21BcGkuRXZlbnQucHJvdG90eXBlPXtnZXQgcm9vdFRhcmdldCgpe3JldHVybiB0aGlzLmV2ZW50LnRhcmdldDt9LGdldCBsb2NhbFRhcmdldCgpe3ZhciBjdXJyZW50PXRoaXMuZXZlbnQuY3VycmVudFRhcmdldDt2YXIgY3VycmVudFJvb3Q9Y3VycmVudCYmUG9seW1lci5kb20oY3VycmVudCkuZ2V0T3duZXJSb290KCk7dmFyIHAkPXRoaXMucGF0aDtmb3IodmFyIGk9MDtpPHAkLmxlbmd0aDtpKyspe2lmKFBvbHltZXIuZG9tKHAkW2ldKS5nZXRPd25lclJvb3QoKT09PWN1cnJlbnRSb290KXtyZXR1cm4gcCRbaV07fX19LGdldCBwYXRoKCl7aWYoIXRoaXMuZXZlbnQuX3BhdGgpe3ZhciBwYXRoPVtdO3ZhciBjdXJyZW50PXRoaXMucm9vdFRhcmdldDt3aGlsZShjdXJyZW50KXtwYXRoLnB1c2goY3VycmVudCk7dmFyIGluc2VydGlvblBvaW50cz1Qb2x5bWVyLmRvbShjdXJyZW50KS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cygpO2lmKGluc2VydGlvblBvaW50cy5sZW5ndGgpe2Zvcih2YXIgaT0wO2k8aW5zZXJ0aW9uUG9pbnRzLmxlbmd0aC0xO2krKyl7cGF0aC5wdXNoKGluc2VydGlvblBvaW50c1tpXSk7fQpjdXJyZW50PWluc2VydGlvblBvaW50c1tpbnNlcnRpb25Qb2ludHMubGVuZ3RoLTFdO31lbHNle2N1cnJlbnQ9UG9seW1lci5kb20oY3VycmVudCkucGFyZW50Tm9kZXx8Y3VycmVudC5ob3N0O319CnBhdGgucHVzaCh3aW5kb3cpO3RoaXMuZXZlbnQuX3BhdGg9cGF0aDt9CnJldHVybiB0aGlzLmV2ZW50Ll9wYXRoO319O30KdmFyIGZhY3Rvcnk9ZnVuY3Rpb24oZXZlbnQpe2lmKCFldmVudC5fX2V2ZW50QXBpKXtldmVudC5fX2V2ZW50QXBpPW5ldyBEb21BcGkuRXZlbnQoZXZlbnQpO30KcmV0dXJuIGV2ZW50Ll9fZXZlbnRBcGk7fTtyZXR1cm57ZmFjdG9yeTpmYWN0b3J5fTt9KCk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBEb21BcGk9UG9seW1lci5Eb21BcGkuY3Rvcjt2YXIgdXNlU2hhZG93PVBvbHltZXIuU2V0dGluZ3MudXNlU2hhZG93O09iamVjdC5kZWZpbmVQcm9wZXJ0eShEb21BcGkucHJvdG90eXBlLCdjbGFzc0xpc3QnLHtnZXQ6ZnVuY3Rpb24oKXtpZighdGhpcy5fY2xhc3NMaXN0KXt0aGlzLl9jbGFzc0xpc3Q9bmV3IERvbUFwaS5DbGFzc0xpc3QodGhpcyk7fQpyZXR1cm4gdGhpcy5fY2xhc3NMaXN0O30sY29uZmlndXJhYmxlOnRydWV9KTtEb21BcGkuQ2xhc3NMaXN0PWZ1bmN0aW9uKGhvc3Qpe3RoaXMuZG9tQXBpPWhvc3Q7dGhpcy5ub2RlPWhvc3Qubm9kZTt9O0RvbUFwaS5DbGFzc0xpc3QucHJvdG90eXBlPXthZGQ6ZnVuY3Rpb24oKXt0aGlzLm5vZGUuY2xhc3NMaXN0LmFkZC5hcHBseSh0aGlzLm5vZGUuY2xhc3NMaXN0LGFyZ3VtZW50cyk7dGhpcy5fZGlzdHJpYnV0ZVBhcmVudCgpO30scmVtb3ZlOmZ1bmN0aW9uKCl7dGhpcy5ub2RlLmNsYXNzTGlzdC5yZW1vdmUuYXBwbHkodGhpcy5ub2RlLmNsYXNzTGlzdCxhcmd1bWVudHMpO3RoaXMuX2Rpc3RyaWJ1dGVQYXJlbnQoKTt9LHRvZ2dsZTpmdW5jdGlvbigpe3RoaXMubm9kZS5jbGFzc0xpc3QudG9nZ2xlLmFwcGx5KHRoaXMubm9kZS5jbGFzc0xpc3QsYXJndW1lbnRzKTt0aGlzLl9kaXN0cmlidXRlUGFyZW50KCk7fSxfZGlzdHJpYnV0ZVBhcmVudDpmdW5jdGlvbigpe2lmKCF1c2VTaGFkb3cpe3RoaXMuZG9tQXBpLl9tYXliZURpc3RyaWJ1dGVQYXJlbnQoKTt9fSxjb250YWluczpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5vZGUuY2xhc3NMaXN0LmNvbnRhaW5zLmFwcGx5KHRoaXMubm9kZS5jbGFzc0xpc3QsYXJndW1lbnRzKTt9fTt9KCkpOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgRG9tQXBpPVBvbHltZXIuRG9tQXBpLmN0b3I7dmFyIFNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7RG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXI9ZnVuY3Rpb24oZG9tQXBpKXt0aGlzLmRvbUFwaT1kb21BcGk7dGhpcy5ub2RlPXRoaXMuZG9tQXBpLm5vZGU7dGhpcy5fbGlzdGVuZXJzPVtdO307RG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlPXthZGRMaXN0ZW5lcjpmdW5jdGlvbihjYWxsYmFjayl7aWYoIXRoaXMuX2lzU2V0dXApe3RoaXMuX3NldHVwKCk7dGhpcy5faXNTZXR1cD10cnVlO30KdmFyIGxpc3RlbmVyPXtmbjpjYWxsYmFjayxfbm9kZXM6W119O3RoaXMuX2xpc3RlbmVycy5wdXNoKGxpc3RlbmVyKTt0aGlzLl9zY2hlZHVsZU5vdGlmeSgpO3JldHVybiBsaXN0ZW5lcjt9LHJlbW92ZUxpc3RlbmVyOmZ1bmN0aW9uKGhhbmRsZSl7dmFyIGk9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoaGFuZGxlKTtpZihpPj0wKXt0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGksMSk7aGFuZGxlLl9ub2Rlcz1bXTt9CmlmKCF0aGlzLl9oYXNMaXN0ZW5lcnMoKSl7dGhpcy5fY2xlYW51cCgpO3RoaXMuX2lzU2V0dXA9ZmFsc2U7fX0sX3NldHVwOmZ1bmN0aW9uKCl7dGhpcy5fb2JzZXJ2ZUNvbnRlbnRFbGVtZW50cyh0aGlzLmRvbUFwaS5jaGlsZE5vZGVzKTt9LF9jbGVhbnVwOmZ1bmN0aW9uKCl7dGhpcy5fdW5vYnNlcnZlQ29udGVudEVsZW1lbnRzKHRoaXMuZG9tQXBpLmNoaWxkTm9kZXMpO30sX2hhc0xpc3RlbmVyczpmdW5jdGlvbigpe3JldHVybiBCb29sZWFuKHRoaXMuX2xpc3RlbmVycy5sZW5ndGgpO30sX3NjaGVkdWxlTm90aWZ5OmZ1bmN0aW9uKCl7aWYodGhpcy5fZGVib3VuY2VyKXt0aGlzLl9kZWJvdW5jZXIuc3RvcCgpO30KdGhpcy5fZGVib3VuY2VyPVBvbHltZXIuRGVib3VuY2UodGhpcy5fZGVib3VuY2VyLHRoaXMuX25vdGlmeSk7dGhpcy5fZGVib3VuY2VyLmNvbnRleHQ9dGhpcztQb2x5bWVyLmRvbS5hZGREZWJvdW5jZXIodGhpcy5fZGVib3VuY2VyKTt9LG5vdGlmeTpmdW5jdGlvbigpe2lmKHRoaXMuX2hhc0xpc3RlbmVycygpKXt0aGlzLl9zY2hlZHVsZU5vdGlmeSgpO319LF9ub3RpZnk6ZnVuY3Rpb24oKXt0aGlzLl9iZWZvcmVDYWxsTGlzdGVuZXJzKCk7dGhpcy5fY2FsbExpc3RlbmVycygpO30sX2JlZm9yZUNhbGxMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDb250ZW50RWxlbWVudHMoKTt9LF91cGRhdGVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlQ29udGVudEVsZW1lbnRzKHRoaXMuZG9tQXBpLmNoaWxkTm9kZXMpO30sX29ic2VydmVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oZWxlbWVudHMpe2Zvcih2YXIgaT0wLG47aTxlbGVtZW50cy5sZW5ndGgmJihuPWVsZW1lbnRzW2ldKTtpKyspe2lmKHRoaXMuX2lzQ29udGVudChuKSl7bi5fX29ic2VydmVOb2Rlc01hcD1uLl9fb2JzZXJ2ZU5vZGVzTWFwfHxuZXcgV2Vha01hcCgpO2lmKCFuLl9fb2JzZXJ2ZU5vZGVzTWFwLmhhcyh0aGlzKSl7bi5fX29ic2VydmVOb2Rlc01hcC5zZXQodGhpcyx0aGlzLl9vYnNlcnZlQ29udGVudChuKSk7fX19fSxfb2JzZXJ2ZUNvbnRlbnQ6ZnVuY3Rpb24oY29udGVudCl7dmFyIHNlbGY9dGhpczt2YXIgaD1Qb2x5bWVyLmRvbShjb250ZW50KS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oKXtzZWxmLl9zY2hlZHVsZU5vdGlmeSgpO30pO2guX2F2b2lkQ2hhbmdlQ2FsY3VsYXRpb249dHJ1ZTtyZXR1cm4gaDt9LF91bm9ic2VydmVDb250ZW50RWxlbWVudHM6ZnVuY3Rpb24oZWxlbWVudHMpe2Zvcih2YXIgaT0wLG4saDtpPGVsZW1lbnRzLmxlbmd0aCYmKG49ZWxlbWVudHNbaV0pO2krKyl7aWYodGhpcy5faXNDb250ZW50KG4pKXtoPW4uX19vYnNlcnZlTm9kZXNNYXAuZ2V0KHRoaXMpO2lmKGgpe1BvbHltZXIuZG9tKG4pLnVub2JzZXJ2ZU5vZGVzKGgpO24uX19vYnNlcnZlTm9kZXNNYXAuZGVsZXRlKHRoaXMpO319fX0sX2lzQ29udGVudDpmdW5jdGlvbihub2RlKXtyZXR1cm4gbm9kZS5sb2NhbE5hbWU9PT0nY29udGVudCc7fSxfY2FsbExpc3RlbmVyczpmdW5jdGlvbigpe3ZhciBvJD10aGlzLl9saXN0ZW5lcnM7dmFyIG5vZGVzPXRoaXMuX2dldEVmZmVjdGl2ZU5vZGVzKCk7Zm9yKHZhciBpPTAsbztpPG8kLmxlbmd0aCYmKG89byRbaV0pO2krKyl7dmFyIGluZm89dGhpcy5fZ2VuZXJhdGVMaXN0ZW5lckluZm8obyxub2Rlcyk7aWYoaW5mb3x8by5fYWx3YXlzTm90aWZ5KXt0aGlzLl9jYWxsTGlzdGVuZXIobyxpbmZvKTt9fX0sX2dldEVmZmVjdGl2ZU5vZGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZG9tQXBpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTt9LF9nZW5lcmF0ZUxpc3RlbmVySW5mbzpmdW5jdGlvbihsaXN0ZW5lcixuZXdOb2Rlcyl7aWYobGlzdGVuZXIuX2F2b2lkQ2hhbmdlQ2FsY3VsYXRpb24pe3JldHVybiB0cnVlO30KdmFyIG9sZE5vZGVzPWxpc3RlbmVyLl9ub2Rlczt2YXIgaW5mbz17dGFyZ2V0OnRoaXMubm9kZSxhZGRlZE5vZGVzOltdLHJlbW92ZWROb2RlczpbXX07dmFyIHNwbGljZXM9UG9seW1lci5BcnJheVNwbGljZS5jYWxjdWxhdGVTcGxpY2VzKG5ld05vZGVzLG9sZE5vZGVzKTtmb3IodmFyIGk9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKHZhciBqPTAsbjtqPHMucmVtb3ZlZC5sZW5ndGgmJihuPXMucmVtb3ZlZFtqXSk7aisrKXtpbmZvLnJlbW92ZWROb2Rlcy5wdXNoKG4pO319CmZvcihpPTAscztpPHNwbGljZXMubGVuZ3RoJiYocz1zcGxpY2VzW2ldKTtpKyspe2ZvcihqPXMuaW5kZXg7ajxzLmluZGV4K3MuYWRkZWRDb3VudDtqKyspe2luZm8uYWRkZWROb2Rlcy5wdXNoKG5ld05vZGVzW2pdKTt9fQpsaXN0ZW5lci5fbm9kZXM9bmV3Tm9kZXM7aWYoaW5mby5hZGRlZE5vZGVzLmxlbmd0aHx8aW5mby5yZW1vdmVkTm9kZXMubGVuZ3RoKXtyZXR1cm4gaW5mbzt9fSxfY2FsbExpc3RlbmVyOmZ1bmN0aW9uKGxpc3RlbmVyLGluZm8pe3JldHVybiBsaXN0ZW5lci5mbi5jYWxsKHRoaXMubm9kZSxpbmZvKTt9LGVuYWJsZVNoYWRvd0F0dHJpYnV0ZVRyYWNraW5nOmZ1bmN0aW9uKCl7fX07aWYoU2V0dGluZ3MudXNlU2hhZG93KXt2YXIgYmFzZVNldHVwPURvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyLnByb3RvdHlwZS5fc2V0dXA7dmFyIGJhc2VDbGVhbnVwPURvbUFwaS5FZmZlY3RpdmVOb2Rlc09ic2VydmVyLnByb3RvdHlwZS5fY2xlYW51cDtQb2x5bWVyLkJhc2UubWl4aW4oRG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlLHtfc2V0dXA6ZnVuY3Rpb24oKXtpZighdGhpcy5fb2JzZXJ2ZXIpe3ZhciBzZWxmPXRoaXM7dGhpcy5fbXV0YXRpb25IYW5kbGVyPWZ1bmN0aW9uKG14bnMpe2lmKG14bnMmJm14bnMubGVuZ3RoKXtzZWxmLl9zY2hlZHVsZU5vdGlmeSgpO319O3RoaXMuX29ic2VydmVyPW5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuX211dGF0aW9uSGFuZGxlcik7dGhpcy5fYm91bmRGbHVzaD1mdW5jdGlvbigpe3NlbGYuX2ZsdXNoKCk7fTtQb2x5bWVyLmRvbS5hZGRTdGF0aWNGbHVzaCh0aGlzLl9ib3VuZEZsdXNoKTt0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMubm9kZSx7Y2hpbGRMaXN0OnRydWV9KTt9CmJhc2VTZXR1cC5jYWxsKHRoaXMpO30sX2NsZWFudXA6ZnVuY3Rpb24oKXt0aGlzLl9vYnNlcnZlci5kaXNjb25uZWN0KCk7dGhpcy5fb2JzZXJ2ZXI9bnVsbDt0aGlzLl9tdXRhdGlvbkhhbmRsZXI9bnVsbDtQb2x5bWVyLmRvbS5yZW1vdmVTdGF0aWNGbHVzaCh0aGlzLl9ib3VuZEZsdXNoKTtiYXNlQ2xlYW51cC5jYWxsKHRoaXMpO30sX2ZsdXNoOmZ1bmN0aW9uKCl7aWYodGhpcy5fb2JzZXJ2ZXIpe3RoaXMuX211dGF0aW9uSGFuZGxlcih0aGlzLl9vYnNlcnZlci50YWtlUmVjb3JkcygpKTt9fSxlbmFibGVTaGFkb3dBdHRyaWJ1dGVUcmFja2luZzpmdW5jdGlvbigpe2lmKHRoaXMuX29ic2VydmVyKXt0aGlzLl9tYWtlQ29udGVudExpc3RlbmVyc0Fsd2F5c05vdGlmeSgpO3RoaXMuX29ic2VydmVyLmRpc2Nvbm5lY3QoKTt0aGlzLl9vYnNlcnZlci5vYnNlcnZlKHRoaXMubm9kZSx7Y2hpbGRMaXN0OnRydWUsYXR0cmlidXRlczp0cnVlLHN1YnRyZWU6dHJ1ZX0pO3ZhciByb290PXRoaXMuZG9tQXBpLmdldE93bmVyUm9vdCgpO3ZhciBob3N0PXJvb3QmJnJvb3QuaG9zdDtpZihob3N0JiZQb2x5bWVyLmRvbShob3N0KS5vYnNlcnZlcil7UG9seW1lci5kb20oaG9zdCkub2JzZXJ2ZXIuZW5hYmxlU2hhZG93QXR0cmlidXRlVHJhY2tpbmcoKTt9fX0sX21ha2VDb250ZW50TGlzdGVuZXJzQWx3YXlzTm90aWZ5OmZ1bmN0aW9uKCl7Zm9yKHZhciBpPTAsaDtpPHRoaXMuX2xpc3RlbmVycy5sZW5ndGg7aSsrKXtoPXRoaXMuX2xpc3RlbmVyc1tpXTtoLl9hbHdheXNOb3RpZnk9aC5faXNDb250ZW50TGlzdGVuZXI7fX19KTt9fSgpKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIERvbUFwaT1Qb2x5bWVyLkRvbUFwaS5jdG9yO3ZhciBTZXR0aW5ncz1Qb2x5bWVyLlNldHRpbmdzO0RvbUFwaS5EaXN0cmlidXRlZE5vZGVzT2JzZXJ2ZXI9ZnVuY3Rpb24oZG9tQXBpKXtEb21BcGkuRWZmZWN0aXZlTm9kZXNPYnNlcnZlci5jYWxsKHRoaXMsZG9tQXBpKTt9O0RvbUFwaS5EaXN0cmlidXRlZE5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoRG9tQXBpLkVmZmVjdGl2ZU5vZGVzT2JzZXJ2ZXIucHJvdG90eXBlKTtQb2x5bWVyLkJhc2UubWl4aW4oRG9tQXBpLkRpc3RyaWJ1dGVkTm9kZXNPYnNlcnZlci5wcm90b3R5cGUse19zZXR1cDpmdW5jdGlvbigpe30sX2NsZWFudXA6ZnVuY3Rpb24oKXt9LF9iZWZvcmVDYWxsTGlzdGVuZXJzOmZ1bmN0aW9uKCl7fSxfZ2V0RWZmZWN0aXZlTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kb21BcGkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpO319KTtpZihTZXR0aW5ncy51c2VTaGFkb3cpe1BvbHltZXIuQmFzZS5taXhpbihEb21BcGkuRGlzdHJpYnV0ZWROb2Rlc09ic2VydmVyLnByb3RvdHlwZSx7X3NldHVwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuX29ic2VydmVyKXt2YXIgcm9vdD10aGlzLmRvbUFwaS5nZXRPd25lclJvb3QoKTt2YXIgaG9zdD1yb290JiZyb290Lmhvc3Q7aWYoaG9zdCl7dmFyIHNlbGY9dGhpczt0aGlzLl9vYnNlcnZlcj1Qb2x5bWVyLmRvbShob3N0KS5vYnNlcnZlTm9kZXMoZnVuY3Rpb24oKXtzZWxmLl9zY2hlZHVsZU5vdGlmeSgpO30pO3RoaXMuX29ic2VydmVyLl9pc0NvbnRlbnRMaXN0ZW5lcj10cnVlO2lmKHRoaXMuX2hhc0F0dHJTZWxlY3QoKSl7UG9seW1lci5kb20oaG9zdCkub2JzZXJ2ZXIuZW5hYmxlU2hhZG93QXR0cmlidXRlVHJhY2tpbmcoKTt9fX19LF9oYXNBdHRyU2VsZWN0OmZ1bmN0aW9uKCl7dmFyIHNlbGVjdD10aGlzLm5vZGUuZ2V0QXR0cmlidXRlKCdzZWxlY3QnKTtyZXR1cm4gc2VsZWN0JiZzZWxlY3QubWF0Y2goL1tbLl0rLyk7fSxfY2xlYW51cDpmdW5jdGlvbigpe3ZhciByb290PXRoaXMuZG9tQXBpLmdldE93bmVyUm9vdCgpO3ZhciBob3N0PXJvb3QmJnJvb3QuaG9zdDtpZihob3N0KXtQb2x5bWVyLmRvbShob3N0KS51bm9ic2VydmVOb2Rlcyh0aGlzLl9vYnNlcnZlcik7fQp0aGlzLl9vYnNlcnZlcj1udWxsO319KTt9fSgpKTsoZnVuY3Rpb24oKXt2YXIgRG9tQXBpPVBvbHltZXIuRG9tQXBpO3ZhciBUcmVlQXBpPVBvbHltZXIuVHJlZUFwaTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwU2hhZHk6ZnVuY3Rpb24oKXt0aGlzLl91c2VDb250ZW50PXRoaXMuX3VzZUNvbnRlbnR8fEJvb2xlYW4odGhpcy5fdGVtcGxhdGUpO30sX3NldHVwU2hhZHk6ZnVuY3Rpb24oKXt0aGlzLnNoYWR5Um9vdD1udWxsO2lmKCF0aGlzLl9fZG9tQXBpKXt0aGlzLl9fZG9tQXBpPW51bGw7fQppZighdGhpcy5fX2RvbSl7dGhpcy5fX2RvbT1udWxsO30KaWYoIXRoaXMuX293bmVyU2hhZHlSb290KXt0aGlzLl9vd25lclNoYWR5Um9vdD11bmRlZmluZWQ7fX0sX3Bvb2xDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCl7VHJlZUFwaS5Mb2dpY2FsLnNhdmVDaGlsZE5vZGVzKHRoaXMpO319LF9zZXR1cFJvb3Q6ZnVuY3Rpb24oKXtpZih0aGlzLl91c2VDb250ZW50KXt0aGlzLl9jcmVhdGVMb2NhbFJvb3QoKTtpZighdGhpcy5kYXRhSG9zdCl7dXBncmFkZUxvZ2ljYWxDaGlsZHJlbihUcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyh0aGlzKSk7fX19LF9jcmVhdGVMb2NhbFJvb3Q6ZnVuY3Rpb24oKXt0aGlzLnNoYWR5Um9vdD10aGlzLnJvb3Q7dGhpcy5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuPWZhbHNlO3RoaXMuc2hhZHlSb290Ll9oYXNEaXN0cmlidXRlZD1mYWxzZTt0aGlzLnNoYWR5Um9vdC5faXNTaGFkeVJvb3Q9dHJ1ZTt0aGlzLnNoYWR5Um9vdC5fZGlydHlSb290cz1bXTt2YXIgaSQ9dGhpcy5zaGFkeVJvb3QuX2luc2VydGlvblBvaW50cz0hdGhpcy5fbm90ZXN8fHRoaXMuX25vdGVzLl9oYXNDb250ZW50P3RoaXMuc2hhZHlSb290LnF1ZXJ5U2VsZWN0b3JBbGwoJ2NvbnRlbnQnKTpbXTtUcmVlQXBpLkxvZ2ljYWwuc2F2ZUNoaWxkTm9kZXModGhpcy5zaGFkeVJvb3QpO2Zvcih2YXIgaT0wLGM7aTxpJC5sZW5ndGg7aSsrKXtjPWkkW2ldO1RyZWVBcGkuTG9naWNhbC5zYXZlQ2hpbGROb2RlcyhjKTtUcmVlQXBpLkxvZ2ljYWwuc2F2ZUNoaWxkTm9kZXMoYy5wYXJlbnROb2RlKTt9CnRoaXMuc2hhZHlSb290Lmhvc3Q9dGhpczt9LGRpc3RyaWJ1dGVDb250ZW50OmZ1bmN0aW9uKHVwZGF0ZUluc2VydGlvblBvaW50cyl7aWYodGhpcy5zaGFkeVJvb3Qpe3RoaXMuc2hhZHlSb290Ll9pbnZhbGlkSW5zZXJ0aW9uUG9pbnRzPXRoaXMuc2hhZHlSb290Ll9pbnZhbGlkSW5zZXJ0aW9uUG9pbnRzfHx1cGRhdGVJbnNlcnRpb25Qb2ludHM7dmFyIGhvc3Q9Z2V0VG9wRGlzdHJpYnV0aW5nSG9zdCh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzKS5fbGF6eURpc3RyaWJ1dGUoaG9zdCk7fX0sX2Rpc3RyaWJ1dGVDb250ZW50OmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCYmIXRoaXMuc2hhZHlSb290Ll9kaXN0cmlidXRpb25DbGVhbil7aWYodGhpcy5zaGFkeVJvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHMpe1BvbHltZXIuZG9tKHRoaXMpLl91cGRhdGVJbnNlcnRpb25Qb2ludHModGhpcyk7dGhpcy5zaGFkeVJvb3QuX2ludmFsaWRJbnNlcnRpb25Qb2ludHM9ZmFsc2U7fQp0aGlzLl9iZWdpbkRpc3RyaWJ1dGUoKTt0aGlzLl9kaXN0cmlidXRlRGlydHlSb290cygpO3RoaXMuX2ZpbmlzaERpc3RyaWJ1dGUoKTt9fSxfYmVnaW5EaXN0cmlidXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCYmRG9tQXBpLmhhc0luc2VydGlvblBvaW50KHRoaXMuc2hhZHlSb290KSl7dGhpcy5fcmVzZXREaXN0cmlidXRpb24oKTt0aGlzLl9kaXN0cmlidXRlUG9vbCh0aGlzLnNoYWR5Um9vdCx0aGlzLl9jb2xsZWN0UG9vbCgpKTt9fSxfZGlzdHJpYnV0ZURpcnR5Um9vdHM6ZnVuY3Rpb24oKXt2YXIgYyQ9dGhpcy5zaGFkeVJvb3QuX2RpcnR5Um9vdHM7Zm9yKHZhciBpPTAsbD1jJC5sZW5ndGgsYztpPGwmJihjPWMkW2ldKTtpKyspe2MuX2Rpc3RyaWJ1dGVDb250ZW50KCk7fQp0aGlzLnNoYWR5Um9vdC5fZGlydHlSb290cz1bXTt9LF9maW5pc2hEaXN0cmlidXRlOmZ1bmN0aW9uKCl7aWYodGhpcy5fdXNlQ29udGVudCl7dGhpcy5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuPXRydWU7aWYoRG9tQXBpLmhhc0luc2VydGlvblBvaW50KHRoaXMuc2hhZHlSb290KSl7dGhpcy5fY29tcG9zZVRyZWUoKTtub3RpZnlDb250ZW50T2JzZXJ2ZXJzKHRoaXMuc2hhZHlSb290KTt9ZWxzZXtpZighdGhpcy5zaGFkeVJvb3QuX2hhc0Rpc3RyaWJ1dGVkKXtUcmVlQXBpLkNvbXBvc2VkLmNsZWFyQ2hpbGROb2Rlcyh0aGlzKTt0aGlzLmFwcGVuZENoaWxkKHRoaXMuc2hhZHlSb290KTt9ZWxzZXt2YXIgY2hpbGRyZW49dGhpcy5fY29tcG9zZU5vZGUodGhpcyk7dGhpcy5fdXBkYXRlQ2hpbGROb2Rlcyh0aGlzLGNoaWxkcmVuKTt9fQppZighdGhpcy5zaGFkeVJvb3QuX2hhc0Rpc3RyaWJ1dGVkKXtub3RpZnlJbml0aWFsRGlzdHJpYnV0aW9uKHRoaXMpO30KdGhpcy5zaGFkeVJvb3QuX2hhc0Rpc3RyaWJ1dGVkPXRydWU7fX0sZWxlbWVudE1hdGNoZXM6ZnVuY3Rpb24oc2VsZWN0b3Isbm9kZSl7bm9kZT1ub2RlfHx0aGlzO3JldHVybiBEb21BcGkubWF0Y2hlc1NlbGVjdG9yLmNhbGwobm9kZSxzZWxlY3Rvcik7fSxfcmVzZXREaXN0cmlidXRpb246ZnVuY3Rpb24oKXt2YXIgY2hpbGRyZW49VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXModGhpcyk7Zm9yKHZhciBpPTA7aTxjaGlsZHJlbi5sZW5ndGg7aSsrKXt2YXIgY2hpbGQ9Y2hpbGRyZW5baV07aWYoY2hpbGQuX2Rlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzKXtjaGlsZC5fZGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM9dW5kZWZpbmVkO30KaWYoaXNJbnNlcnRpb25Qb2ludChjaGlsZCkpe2NsZWFyRGlzdHJpYnV0ZWREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cyhjaGlsZCk7fX0KdmFyIHJvb3Q9dGhpcy5zaGFkeVJvb3Q7dmFyIHAkPXJvb3QuX2luc2VydGlvblBvaW50cztmb3IodmFyIGo9MDtqPHAkLmxlbmd0aDtqKyspe3AkW2pdLl9kaXN0cmlidXRlZE5vZGVzPVtdO319LF9jb2xsZWN0UG9vbDpmdW5jdGlvbigpe3ZhciBwb29sPVtdO3ZhciBjaGlsZHJlbj1UcmVlQXBpLkxvZ2ljYWwuZ2V0Q2hpbGROb2Rlcyh0aGlzKTtmb3IodmFyIGk9MDtpPGNoaWxkcmVuLmxlbmd0aDtpKyspe3ZhciBjaGlsZD1jaGlsZHJlbltpXTtpZihpc0luc2VydGlvblBvaW50KGNoaWxkKSl7cG9vbC5wdXNoLmFwcGx5KHBvb2wsY2hpbGQuX2Rpc3RyaWJ1dGVkTm9kZXMpO31lbHNle3Bvb2wucHVzaChjaGlsZCk7fX0KcmV0dXJuIHBvb2w7fSxfZGlzdHJpYnV0ZVBvb2w6ZnVuY3Rpb24obm9kZSxwb29sKXt2YXIgcCQ9bm9kZS5faW5zZXJ0aW9uUG9pbnRzO2Zvcih2YXIgaT0wLGw9cCQubGVuZ3RoLHA7aTxsJiYocD1wJFtpXSk7aSsrKXt0aGlzLl9kaXN0cmlidXRlSW5zZXJ0aW9uUG9pbnQocCxwb29sKTttYXliZVJlZGlzdHJpYnV0ZVBhcmVudChwLHRoaXMpO319LF9kaXN0cmlidXRlSW5zZXJ0aW9uUG9pbnQ6ZnVuY3Rpb24oY29udGVudCxwb29sKXt2YXIgYW55RGlzdHJpYnV0ZWQ9ZmFsc2U7Zm9yKHZhciBpPTAsbD1wb29sLmxlbmd0aCxub2RlO2k8bDtpKyspe25vZGU9cG9vbFtpXTtpZighbm9kZSl7Y29udGludWU7fQppZih0aGlzLl9tYXRjaGVzQ29udGVudFNlbGVjdChub2RlLGNvbnRlbnQpKXtkaXN0cmlidXRlTm9kZUludG8obm9kZSxjb250ZW50KTtwb29sW2ldPXVuZGVmaW5lZDthbnlEaXN0cmlidXRlZD10cnVlO319CmlmKCFhbnlEaXN0cmlidXRlZCl7dmFyIGNoaWxkcmVuPVRyZWVBcGkuTG9naWNhbC5nZXRDaGlsZE5vZGVzKGNvbnRlbnQpO2Zvcih2YXIgaj0wO2o8Y2hpbGRyZW4ubGVuZ3RoO2orKyl7ZGlzdHJpYnV0ZU5vZGVJbnRvKGNoaWxkcmVuW2pdLGNvbnRlbnQpO319fSxfY29tcG9zZVRyZWU6ZnVuY3Rpb24oKXt0aGlzLl91cGRhdGVDaGlsZE5vZGVzKHRoaXMsdGhpcy5fY29tcG9zZU5vZGUodGhpcykpO3ZhciBwJD10aGlzLnNoYWR5Um9vdC5faW5zZXJ0aW9uUG9pbnRzO2Zvcih2YXIgaT0wLGw9cCQubGVuZ3RoLHAscGFyZW50O2k8bCYmKHA9cCRbaV0pO2krKyl7cGFyZW50PVRyZWVBcGkuTG9naWNhbC5nZXRQYXJlbnROb2RlKHApO2lmKCFwYXJlbnQuX3VzZUNvbnRlbnQmJnBhcmVudCE9PXRoaXMmJnBhcmVudCE9PXRoaXMuc2hhZHlSb290KXt0aGlzLl91cGRhdGVDaGlsZE5vZGVzKHBhcmVudCx0aGlzLl9jb21wb3NlTm9kZShwYXJlbnQpKTt9fX0sX2NvbXBvc2VOb2RlOmZ1bmN0aW9uKG5vZGUpe3ZhciBjaGlsZHJlbj1bXTt2YXIgYyQ9VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMobm9kZS5zaGFkeVJvb3R8fG5vZGUpO2Zvcih2YXIgaT0wO2k8YyQubGVuZ3RoO2krKyl7dmFyIGNoaWxkPWMkW2ldO2lmKGlzSW5zZXJ0aW9uUG9pbnQoY2hpbGQpKXt2YXIgZGlzdHJpYnV0ZWROb2Rlcz1jaGlsZC5fZGlzdHJpYnV0ZWROb2Rlcztmb3IodmFyIGo9MDtqPGRpc3RyaWJ1dGVkTm9kZXMubGVuZ3RoO2orKyl7dmFyIGRpc3RyaWJ1dGVkTm9kZT1kaXN0cmlidXRlZE5vZGVzW2pdO2lmKGlzRmluYWxEZXN0aW5hdGlvbihjaGlsZCxkaXN0cmlidXRlZE5vZGUpKXtjaGlsZHJlbi5wdXNoKGRpc3RyaWJ1dGVkTm9kZSk7fX19ZWxzZXtjaGlsZHJlbi5wdXNoKGNoaWxkKTt9fQpyZXR1cm4gY2hpbGRyZW47fSxfdXBkYXRlQ2hpbGROb2RlczpmdW5jdGlvbihjb250YWluZXIsY2hpbGRyZW4pe3ZhciBjb21wb3NlZD1UcmVlQXBpLkNvbXBvc2VkLmdldENoaWxkTm9kZXMoY29udGFpbmVyKTt2YXIgc3BsaWNlcz1Qb2x5bWVyLkFycmF5U3BsaWNlLmNhbGN1bGF0ZVNwbGljZXMoY2hpbGRyZW4sY29tcG9zZWQpO2Zvcih2YXIgaT0wLGQ9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKHZhciBqPTAsbjtqPHMucmVtb3ZlZC5sZW5ndGgmJihuPXMucmVtb3ZlZFtqXSk7aisrKXtpZihUcmVlQXBpLkNvbXBvc2VkLmdldFBhcmVudE5vZGUobik9PT1jb250YWluZXIpe1RyZWVBcGkuQ29tcG9zZWQucmVtb3ZlQ2hpbGQoY29udGFpbmVyLG4pO30KY29tcG9zZWQuc3BsaWNlKHMuaW5kZXgrZCwxKTt9CmQtPXMuYWRkZWRDb3VudDt9CmZvcih2YXIgaT0wLHMsbmV4dDtpPHNwbGljZXMubGVuZ3RoJiYocz1zcGxpY2VzW2ldKTtpKyspe25leHQ9Y29tcG9zZWRbcy5pbmRleF07Zm9yKGo9cy5pbmRleCxuO2o8cy5pbmRleCtzLmFkZGVkQ291bnQ7aisrKXtuPWNoaWxkcmVuW2pdO1RyZWVBcGkuQ29tcG9zZWQuaW5zZXJ0QmVmb3JlKGNvbnRhaW5lcixuLG5leHQpO2NvbXBvc2VkLnNwbGljZShqLDAsbik7fX19LF9tYXRjaGVzQ29udGVudFNlbGVjdDpmdW5jdGlvbihub2RlLGNvbnRlbnRFbGVtZW50KXt2YXIgc2VsZWN0PWNvbnRlbnRFbGVtZW50LmdldEF0dHJpYnV0ZSgnc2VsZWN0Jyk7aWYoIXNlbGVjdCl7cmV0dXJuIHRydWU7fQpzZWxlY3Q9c2VsZWN0LnRyaW0oKTtpZighc2VsZWN0KXtyZXR1cm4gdHJ1ZTt9CmlmKCEobm9kZSBpbnN0YW5jZW9mIEVsZW1lbnQpKXtyZXR1cm4gZmFsc2U7fQp2YXIgdmFsaWRTZWxlY3RvcnM9L14oOm5vdFwoKT9bKi4jW2EtekEtWl98XS87aWYoIXZhbGlkU2VsZWN0b3JzLnRlc3Qoc2VsZWN0KSl7cmV0dXJuIGZhbHNlO30KcmV0dXJuIHRoaXMuZWxlbWVudE1hdGNoZXMoc2VsZWN0LG5vZGUpO30sX2VsZW1lbnRBZGQ6ZnVuY3Rpb24oKXt9LF9lbGVtZW50UmVtb3ZlOmZ1bmN0aW9uKCl7fX0pO3ZhciBkb21Ib3N0RGVzYz17Z2V0OmZ1bmN0aW9uKCl7dmFyIHJvb3Q9UG9seW1lci5kb20odGhpcykuZ2V0T3duZXJSb290KCk7cmV0dXJuIHJvb3QmJnJvb3QuaG9zdDt9LGNvbmZpZ3VyYWJsZTp0cnVlfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoUG9seW1lci5CYXNlLCdkb21Ib3N0Jyxkb21Ib3N0RGVzYyk7UG9seW1lci5CYXNlRGVzY3JpcHRvcnMuZG9tSG9zdD1kb21Ib3N0RGVzYztmdW5jdGlvbiBkaXN0cmlidXRlTm9kZUludG8oY2hpbGQsaW5zZXJ0aW9uUG9pbnQpe2luc2VydGlvblBvaW50Ll9kaXN0cmlidXRlZE5vZGVzLnB1c2goY2hpbGQpO3ZhciBwb2ludHM9Y2hpbGQuX2Rlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzO2lmKCFwb2ludHMpe2NoaWxkLl9kZXN0aW5hdGlvbkluc2VydGlvblBvaW50cz1baW5zZXJ0aW9uUG9pbnRdO31lbHNle3BvaW50cy5wdXNoKGluc2VydGlvblBvaW50KTt9fQpmdW5jdGlvbiBjbGVhckRpc3RyaWJ1dGVkRGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHMoY29udGVudCl7dmFyIGUkPWNvbnRlbnQuX2Rpc3RyaWJ1dGVkTm9kZXM7aWYoZSQpe2Zvcih2YXIgaT0wO2k8ZSQubGVuZ3RoO2krKyl7dmFyIGQ9ZSRbaV0uX2Rlc3RpbmF0aW9uSW5zZXJ0aW9uUG9pbnRzO2lmKGQpe2Quc3BsaWNlKGQuaW5kZXhPZihjb250ZW50KSsxLGQubGVuZ3RoKTt9fX19CmZ1bmN0aW9uIG1heWJlUmVkaXN0cmlidXRlUGFyZW50KGNvbnRlbnQsaG9zdCl7dmFyIHBhcmVudD1UcmVlQXBpLkxvZ2ljYWwuZ2V0UGFyZW50Tm9kZShjb250ZW50KTtpZihwYXJlbnQmJnBhcmVudC5zaGFkeVJvb3QmJkRvbUFwaS5oYXNJbnNlcnRpb25Qb2ludChwYXJlbnQuc2hhZHlSb290KSYmcGFyZW50LnNoYWR5Um9vdC5fZGlzdHJpYnV0aW9uQ2xlYW4pe3BhcmVudC5zaGFkeVJvb3QuX2Rpc3RyaWJ1dGlvbkNsZWFuPWZhbHNlO2hvc3Quc2hhZHlSb290Ll9kaXJ0eVJvb3RzLnB1c2gocGFyZW50KTt9fQpmdW5jdGlvbiBpc0ZpbmFsRGVzdGluYXRpb24oaW5zZXJ0aW9uUG9pbnQsbm9kZSl7dmFyIHBvaW50cz1ub2RlLl9kZXN0aW5hdGlvbkluc2VydGlvblBvaW50cztyZXR1cm4gcG9pbnRzJiZwb2ludHNbcG9pbnRzLmxlbmd0aC0xXT09PWluc2VydGlvblBvaW50O30KZnVuY3Rpb24gaXNJbnNlcnRpb25Qb2ludChub2RlKXtyZXR1cm4gbm9kZS5sb2NhbE5hbWU9PSdjb250ZW50Jzt9CmZ1bmN0aW9uIGdldFRvcERpc3RyaWJ1dGluZ0hvc3QoaG9zdCl7d2hpbGUoaG9zdCYmaG9zdE5lZWRzUmVkaXN0cmlidXRpb24oaG9zdCkpe2hvc3Q9aG9zdC5kb21Ib3N0O30KcmV0dXJuIGhvc3Q7fQpmdW5jdGlvbiBob3N0TmVlZHNSZWRpc3RyaWJ1dGlvbihob3N0KXt2YXIgYyQ9VHJlZUFwaS5Mb2dpY2FsLmdldENoaWxkTm9kZXMoaG9zdCk7Zm9yKHZhciBpPTAsYztpPGMkLmxlbmd0aDtpKyspe2M9YyRbaV07aWYoYy5sb2NhbE5hbWUmJmMubG9jYWxOYW1lPT09J2NvbnRlbnQnKXtyZXR1cm4gaG9zdC5kb21Ib3N0O319fQpmdW5jdGlvbiBub3RpZnlDb250ZW50T2JzZXJ2ZXJzKHJvb3Qpe2Zvcih2YXIgaT0wLGM7aTxyb290Ll9pbnNlcnRpb25Qb2ludHMubGVuZ3RoO2krKyl7Yz1yb290Ll9pbnNlcnRpb25Qb2ludHNbaV07aWYoRG9tQXBpLmhhc0FwaShjKSl7UG9seW1lci5kb20oYykubm90aWZ5T2JzZXJ2ZXIoKTt9fX0KZnVuY3Rpb24gbm90aWZ5SW5pdGlhbERpc3RyaWJ1dGlvbihob3N0KXtpZihEb21BcGkuaGFzQXBpKGhvc3QpKXtQb2x5bWVyLmRvbShob3N0KS5ub3RpZnlPYnNlcnZlcigpO319CnZhciBuZWVkc1VwZ3JhZGU9d2luZG93LkN1c3RvbUVsZW1lbnRzJiYhQ3VzdG9tRWxlbWVudHMudXNlTmF0aXZlO2Z1bmN0aW9uIHVwZ3JhZGVMb2dpY2FsQ2hpbGRyZW4oY2hpbGRyZW4pe2lmKG5lZWRzVXBncmFkZSYmY2hpbGRyZW4pe2Zvcih2YXIgaT0wO2k8Y2hpbGRyZW4ubGVuZ3RoO2krKyl7Q3VzdG9tRWxlbWVudHMudXBncmFkZShjaGlsZHJlbltpXSk7fX19fSgpKTtpZihQb2x5bWVyLlNldHRpbmdzLnVzZVNoYWRvdyl7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcG9vbENvbnRlbnQ6ZnVuY3Rpb24oKXt9LF9iZWdpbkRpc3RyaWJ1dGU6ZnVuY3Rpb24oKXt9LGRpc3RyaWJ1dGVDb250ZW50OmZ1bmN0aW9uKCl7fSxfZGlzdHJpYnV0ZUNvbnRlbnQ6ZnVuY3Rpb24oKXt9LF9maW5pc2hEaXN0cmlidXRlOmZ1bmN0aW9uKCl7fSxfY3JlYXRlTG9jYWxSb290OmZ1bmN0aW9uKCl7dGhpcy5jcmVhdGVTaGFkb3dSb290KCk7dGhpcy5zaGFkb3dSb290LmFwcGVuZENoaWxkKHRoaXMucm9vdCk7dGhpcy5yb290PXRoaXMuc2hhZG93Um9vdDt9fSk7fVBvbHltZXIuQXN5bmM9e19jdXJyVmFsOjAsX2xhc3RWYWw6MCxfY2FsbGJhY2tzOltdLF90d2lkZGxlQ29udGVudDowLF90d2lkZGxlOmRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCcnKSxydW46ZnVuY3Rpb24oY2FsbGJhY2ssd2FpdFRpbWUpe2lmKHdhaXRUaW1lPjApe3JldHVybn5zZXRUaW1lb3V0KGNhbGxiYWNrLHdhaXRUaW1lKTt9ZWxzZXt0aGlzLl90d2lkZGxlLnRleHRDb250ZW50PXRoaXMuX3R3aWRkbGVDb250ZW50Kys7dGhpcy5fY2FsbGJhY2tzLnB1c2goY2FsbGJhY2spO3JldHVybiB0aGlzLl9jdXJyVmFsKys7fX0sY2FuY2VsOmZ1bmN0aW9uKGhhbmRsZSl7aWYoaGFuZGxlPDApe2NsZWFyVGltZW91dCh+aGFuZGxlKTt9ZWxzZXt2YXIgaWR4PWhhbmRsZS10aGlzLl9sYXN0VmFsO2lmKGlkeD49MCl7aWYoIXRoaXMuX2NhbGxiYWNrc1tpZHhdKXt0aHJvdydpbnZhbGlkIGFzeW5jIGhhbmRsZTogJytoYW5kbGU7fQp0aGlzLl9jYWxsYmFja3NbaWR4XT1udWxsO319fSxfYXRFbmRPZk1pY3JvdGFzazpmdW5jdGlvbigpe3ZhciBsZW49dGhpcy5fY2FsbGJhY2tzLmxlbmd0aDtmb3IodmFyIGk9MDtpPGxlbjtpKyspe3ZhciBjYj10aGlzLl9jYWxsYmFja3NbaV07aWYoY2Ipe3RyeXtjYigpO31jYXRjaChlKXtpKys7dGhpcy5fY2FsbGJhY2tzLnNwbGljZSgwLGkpO3RoaXMuX2xhc3RWYWwrPWk7dGhpcy5fdHdpZGRsZS50ZXh0Q29udGVudD10aGlzLl90d2lkZGxlQ29udGVudCsrO3Rocm93IGU7fX19CnRoaXMuX2NhbGxiYWNrcy5zcGxpY2UoMCxsZW4pO3RoaXMuX2xhc3RWYWwrPWxlbjt9fTtuZXcgd2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIoZnVuY3Rpb24oKXtQb2x5bWVyLkFzeW5jLl9hdEVuZE9mTWljcm90YXNrKCk7fSkub2JzZXJ2ZShQb2x5bWVyLkFzeW5jLl90d2lkZGxlLHtjaGFyYWN0ZXJEYXRhOnRydWV9KTtQb2x5bWVyLkRlYm91bmNlPWZ1bmN0aW9uKCl7dmFyIEFzeW5jPVBvbHltZXIuQXN5bmM7dmFyIERlYm91bmNlcj1mdW5jdGlvbihjb250ZXh0KXt0aGlzLmNvbnRleHQ9Y29udGV4dDt2YXIgc2VsZj10aGlzO3RoaXMuYm91bmRDb21wbGV0ZT1mdW5jdGlvbigpe3NlbGYuY29tcGxldGUoKTt9O307RGVib3VuY2VyLnByb3RvdHlwZT17Z286ZnVuY3Rpb24oY2FsbGJhY2ssd2FpdCl7dmFyIGg7dGhpcy5maW5pc2g9ZnVuY3Rpb24oKXtBc3luYy5jYW5jZWwoaCk7fTtoPUFzeW5jLnJ1bih0aGlzLmJvdW5kQ29tcGxldGUsd2FpdCk7dGhpcy5jYWxsYmFjaz1jYWxsYmFjazt9LHN0b3A6ZnVuY3Rpb24oKXtpZih0aGlzLmZpbmlzaCl7dGhpcy5maW5pc2goKTt0aGlzLmZpbmlzaD1udWxsO3RoaXMuY2FsbGJhY2s9bnVsbDt9fSxjb21wbGV0ZTpmdW5jdGlvbigpe2lmKHRoaXMuZmluaXNoKXt2YXIgY2FsbGJhY2s9dGhpcy5jYWxsYmFjazt0aGlzLnN0b3AoKTtjYWxsYmFjay5jYWxsKHRoaXMuY29udGV4dCk7fX19O2Z1bmN0aW9uIGRlYm91bmNlKGRlYm91bmNlcixjYWxsYmFjayx3YWl0KXtpZihkZWJvdW5jZXIpe2RlYm91bmNlci5zdG9wKCk7fWVsc2V7ZGVib3VuY2VyPW5ldyBEZWJvdW5jZXIodGhpcyk7fQpkZWJvdW5jZXIuZ28oY2FsbGJhY2ssd2FpdCk7cmV0dXJuIGRlYm91bmNlcjt9CnJldHVybiBkZWJvdW5jZTt9KCk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfc2V0dXBEZWJvdW5jZXJzOmZ1bmN0aW9uKCl7dGhpcy5fZGVib3VuY2Vycz17fTt9LGRlYm91bmNlOmZ1bmN0aW9uKGpvYk5hbWUsY2FsbGJhY2ssd2FpdCl7cmV0dXJuIHRoaXMuX2RlYm91bmNlcnNbam9iTmFtZV09UG9seW1lci5EZWJvdW5jZS5jYWxsKHRoaXMsdGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXSxjYWxsYmFjayx3YWl0KTt9LGlzRGVib3VuY2VyQWN0aXZlOmZ1bmN0aW9uKGpvYk5hbWUpe3ZhciBkZWJvdW5jZXI9dGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTtyZXR1cm4hIShkZWJvdW5jZXImJmRlYm91bmNlci5maW5pc2gpO30sZmx1c2hEZWJvdW5jZXI6ZnVuY3Rpb24oam9iTmFtZSl7dmFyIGRlYm91bmNlcj10aGlzLl9kZWJvdW5jZXJzW2pvYk5hbWVdO2lmKGRlYm91bmNlcil7ZGVib3VuY2VyLmNvbXBsZXRlKCk7fX0sY2FuY2VsRGVib3VuY2VyOmZ1bmN0aW9uKGpvYk5hbWUpe3ZhciBkZWJvdW5jZXI9dGhpcy5fZGVib3VuY2Vyc1tqb2JOYW1lXTtpZihkZWJvdW5jZXIpe2RlYm91bmNlci5zdG9wKCk7fX19KTtQb2x5bWVyLkRvbU1vZHVsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkb20tbW9kdWxlJyk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfcmVnaXN0ZXJGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3ByZXBJcygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwQ29uc3RydWN0b3IoKTt0aGlzLl9wcmVwVGVtcGxhdGUoKTt0aGlzLl9wcmVwU2hhZHkoKTt0aGlzLl9wcmVwUHJvcGVydHlJbmZvKCk7fSxfcHJlcEJlaGF2aW9yOmZ1bmN0aW9uKGIpe3RoaXMuX2FkZEhvc3RBdHRyaWJ1dGVzKGIuaG9zdEF0dHJpYnV0ZXMpO30sX2luaXRGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3JlZ2lzdGVySG9zdCgpO2lmKHRoaXMuX3RlbXBsYXRlKXt0aGlzLl9wb29sQ29udGVudCgpO3RoaXMuX2JlZ2luSG9zdGluZygpO3RoaXMuX3N0YW1wVGVtcGxhdGUoKTt0aGlzLl9lbmRIb3N0aW5nKCk7fQp0aGlzLl9tYXJzaGFsSG9zdEF0dHJpYnV0ZXMoKTt0aGlzLl9zZXR1cERlYm91bmNlcnMoKTt0aGlzLl9tYXJzaGFsQmVoYXZpb3JzKCk7dGhpcy5fdHJ5UmVhZHkoKTt9LF9tYXJzaGFsQmVoYXZpb3I6ZnVuY3Rpb24oYil7fX0pOyhmdW5jdGlvbigpe1BvbHltZXIubmFyPVtdO3ZhciBkaXNhYmxlVXBncmFkZUVuYWJsZWQ9UG9seW1lci5TZXR0aW5ncy5kaXNhYmxlVXBncmFkZUVuYWJsZWQ7UG9seW1lci5Bbm5vdGF0aW9ucz17cGFyc2VBbm5vdGF0aW9uczpmdW5jdGlvbih0ZW1wbGF0ZSxzdHJpcFdoaXRlU3BhY2Upe3ZhciBsaXN0PVtdO3ZhciBjb250ZW50PXRlbXBsYXRlLl9jb250ZW50fHx0ZW1wbGF0ZS5jb250ZW50O3RoaXMuX3BhcnNlTm9kZUFubm90YXRpb25zKGNvbnRlbnQsbGlzdCxzdHJpcFdoaXRlU3BhY2V8fHRlbXBsYXRlLmhhc0F0dHJpYnV0ZSgnc3RyaXAtd2hpdGVzcGFjZScpKTtyZXR1cm4gbGlzdDt9LF9wYXJzZU5vZGVBbm5vdGF0aW9uczpmdW5jdGlvbihub2RlLGxpc3Qsc3RyaXBXaGl0ZVNwYWNlKXtyZXR1cm4gbm9kZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFP3RoaXMuX3BhcnNlVGV4dE5vZGVBbm5vdGF0aW9uKG5vZGUsbGlzdCk6dGhpcy5fcGFyc2VFbGVtZW50QW5ub3RhdGlvbnMobm9kZSxsaXN0LHN0cmlwV2hpdGVTcGFjZSk7fSxfYmluZGluZ1JlZ2V4OmZ1bmN0aW9uKCl7dmFyIElERU5UPScoPzonKydbYS16QS1aXyRdW1xcdy46JFxcLSpdKicrJyknO3ZhciBOVU1CRVI9Jyg/OicrJ1stK10/WzAtOV0qXFwuP1swLTldKyg/OltlRV1bLStdP1swLTldKyk/JysnKSc7dmFyIFNRVU9URV9TVFJJTkc9Jyg/OicrJ1wnKD86W15cJ1xcXFxdfFxcXFwuKSpcJycrJyknO3ZhciBEUVVPVEVfU1RSSU5HPScoPzonKyciKD86W14iXFxcXF18XFxcXC4pKiInKycpJzt2YXIgU1RSSU5HPScoPzonK1NRVU9URV9TVFJJTkcrJ3wnK0RRVU9URV9TVFJJTkcrJyknO3ZhciBBUkdVTUVOVD0nKD86JytJREVOVCsnfCcrTlVNQkVSKyd8JytTVFJJTkcrJ1xccyonKycpJzt2YXIgQVJHVU1FTlRTPScoPzonK0FSR1VNRU5UKycoPzosXFxzKicrQVJHVU1FTlQrJykqJysnKSc7dmFyIEFSR1VNRU5UX0xJU1Q9Jyg/OicrJ1xcKFxccyonKycoPzonK0FSR1VNRU5UUysnPycrJyknKydcXClcXHMqJysnKSc7dmFyIEJJTkRJTkc9JygnK0lERU5UKydcXHMqJytBUkdVTUVOVF9MSVNUKyc/JysnKSc7dmFyIE9QRU5fQlJBQ0tFVD0nKFxcW1xcW3x7eyknKydcXHMqJzt2YXIgQ0xPU0VfQlJBQ0tFVD0nKD86XV18fX0pJzt2YXIgTkVHQVRFPScoPzooISlcXHMqKT8nO3ZhciBFWFBSRVNTSU9OPU9QRU5fQlJBQ0tFVCtORUdBVEUrQklORElORytDTE9TRV9CUkFDS0VUO3JldHVybiBuZXcgUmVnRXhwKEVYUFJFU1NJT04sJ2cnKTt9KCksX3BhcnNlQmluZGluZ3M6ZnVuY3Rpb24odGV4dCl7dmFyIHJlPXRoaXMuX2JpbmRpbmdSZWdleDt2YXIgcGFydHM9W107dmFyIGxhc3RJbmRleD0wO3ZhciBtO3doaWxlKChtPXJlLmV4ZWModGV4dCkpIT09bnVsbCl7aWYobS5pbmRleD5sYXN0SW5kZXgpe3BhcnRzLnB1c2goe2xpdGVyYWw6dGV4dC5zbGljZShsYXN0SW5kZXgsbS5pbmRleCl9KTt9CnZhciBtb2RlPW1bMV1bMF07dmFyIG5lZ2F0ZT1Cb29sZWFuKG1bMl0pO3ZhciB2YWx1ZT1tWzNdLnRyaW0oKTt2YXIgY3VzdG9tRXZlbnQsbm90aWZ5RXZlbnQsY29sb247aWYobW9kZT09J3snJiYoY29sb249dmFsdWUuaW5kZXhPZignOjonKSk+MCl7bm90aWZ5RXZlbnQ9dmFsdWUuc3Vic3RyaW5nKGNvbG9uKzIpO3ZhbHVlPXZhbHVlLnN1YnN0cmluZygwLGNvbG9uKTtjdXN0b21FdmVudD10cnVlO30KcGFydHMucHVzaCh7Y29tcG91bmRJbmRleDpwYXJ0cy5sZW5ndGgsdmFsdWU6dmFsdWUsbW9kZTptb2RlLG5lZ2F0ZTpuZWdhdGUsZXZlbnQ6bm90aWZ5RXZlbnQsY3VzdG9tRXZlbnQ6Y3VzdG9tRXZlbnR9KTtsYXN0SW5kZXg9cmUubGFzdEluZGV4O30KaWYobGFzdEluZGV4JiZsYXN0SW5kZXg8dGV4dC5sZW5ndGgpe3ZhciBsaXRlcmFsPXRleHQuc3Vic3RyaW5nKGxhc3RJbmRleCk7aWYobGl0ZXJhbCl7cGFydHMucHVzaCh7bGl0ZXJhbDpsaXRlcmFsfSk7fX0KaWYocGFydHMubGVuZ3RoKXtyZXR1cm4gcGFydHM7fX0sX2xpdGVyYWxGcm9tUGFydHM6ZnVuY3Rpb24ocGFydHMpe3ZhciBzPScnO2Zvcih2YXIgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7dmFyIGxpdGVyYWw9cGFydHNbaV0ubGl0ZXJhbDtzKz1saXRlcmFsfHwnJzt9CnJldHVybiBzO30sX3BhcnNlVGV4dE5vZGVBbm5vdGF0aW9uOmZ1bmN0aW9uKG5vZGUsbGlzdCl7dmFyIHBhcnRzPXRoaXMuX3BhcnNlQmluZGluZ3Mobm9kZS50ZXh0Q29udGVudCk7aWYocGFydHMpe25vZGUudGV4dENvbnRlbnQ9dGhpcy5fbGl0ZXJhbEZyb21QYXJ0cyhwYXJ0cyl8fCcgJzt2YXIgYW5ub3RlPXtiaW5kaW5nczpbe2tpbmQ6J3RleHQnLG5hbWU6J3RleHRDb250ZW50JyxwYXJ0czpwYXJ0cyxpc0NvbXBvdW5kOnBhcnRzLmxlbmd0aCE9PTF9XX07bGlzdC5wdXNoKGFubm90ZSk7cmV0dXJuIGFubm90ZTt9fSxfcGFyc2VFbGVtZW50QW5ub3RhdGlvbnM6ZnVuY3Rpb24oZWxlbWVudCxsaXN0LHN0cmlwV2hpdGVTcGFjZSl7dmFyIGFubm90ZT17YmluZGluZ3M6W10sZXZlbnRzOltdfTtpZihlbGVtZW50LmxvY2FsTmFtZT09PSdjb250ZW50Jyl7bGlzdC5faGFzQ29udGVudD10cnVlO30KdGhpcy5fcGFyc2VDaGlsZE5vZGVzQW5ub3RhdGlvbnMoZWxlbWVudCxhbm5vdGUsbGlzdCxzdHJpcFdoaXRlU3BhY2UpO2lmKGVsZW1lbnQuYXR0cmlidXRlcyl7dGhpcy5fcGFyc2VOb2RlQXR0cmlidXRlQW5ub3RhdGlvbnMoZWxlbWVudCxhbm5vdGUsbGlzdCk7aWYodGhpcy5wcmVwRWxlbWVudCl7dGhpcy5wcmVwRWxlbWVudChlbGVtZW50KTt9fQppZihhbm5vdGUuYmluZGluZ3MubGVuZ3RofHxhbm5vdGUuZXZlbnRzLmxlbmd0aHx8YW5ub3RlLmlkKXtsaXN0LnB1c2goYW5ub3RlKTt9CnJldHVybiBhbm5vdGU7fSxfcGFyc2VDaGlsZE5vZGVzQW5ub3RhdGlvbnM6ZnVuY3Rpb24ocm9vdCxhbm5vdGUsbGlzdCxzdHJpcFdoaXRlU3BhY2Upe2lmKHJvb3QuZmlyc3RDaGlsZCl7dmFyIG5vZGU9cm9vdC5maXJzdENoaWxkO3ZhciBpPTA7d2hpbGUobm9kZSl7dmFyIG5leHQ9bm9kZS5uZXh0U2libGluZztpZihub2RlLmxvY2FsTmFtZT09PSd0ZW1wbGF0ZScmJiFub2RlLmhhc0F0dHJpYnV0ZSgncHJlc2VydmUtY29udGVudCcpKXt0aGlzLl9wYXJzZVRlbXBsYXRlKG5vZGUsaSxsaXN0LGFubm90ZSxzdHJpcFdoaXRlU3BhY2UpO30KaWYobm9kZS5sb2NhbE5hbWU9PSdzbG90Jyl7bm9kZT10aGlzLl9yZXBsYWNlU2xvdFdpdGhDb250ZW50KG5vZGUpO30KaWYobm9kZS5ub2RlVHlwZT09PU5vZGUuVEVYVF9OT0RFKXt2YXIgbj1uZXh0O3doaWxlKG4mJm4ubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7bm9kZS50ZXh0Q29udGVudCs9bi50ZXh0Q29udGVudDtuZXh0PW4ubmV4dFNpYmxpbmc7cm9vdC5yZW1vdmVDaGlsZChuKTtuPW5leHQ7fQppZihzdHJpcFdoaXRlU3BhY2UmJiFub2RlLnRleHRDb250ZW50LnRyaW0oKSl7cm9vdC5yZW1vdmVDaGlsZChub2RlKTtpLS07fX0KaWYobm9kZS5wYXJlbnROb2RlKXt2YXIgY2hpbGRBbm5vdGF0aW9uPXRoaXMuX3BhcnNlTm9kZUFubm90YXRpb25zKG5vZGUsbGlzdCxzdHJpcFdoaXRlU3BhY2UpO2lmKGNoaWxkQW5ub3RhdGlvbil7Y2hpbGRBbm5vdGF0aW9uLnBhcmVudD1hbm5vdGU7Y2hpbGRBbm5vdGF0aW9uLmluZGV4PWk7fX0Kbm9kZT1uZXh0O2krKzt9fX0sX3JlcGxhY2VTbG90V2l0aENvbnRlbnQ6ZnVuY3Rpb24oc2xvdCl7dmFyIGNvbnRlbnQ9c2xvdC5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbnRlbnQnKTt3aGlsZShzbG90LmZpcnN0Q2hpbGQpe2NvbnRlbnQuYXBwZW5kQ2hpbGQoc2xvdC5maXJzdENoaWxkKTt9CnZhciBhdHRycz1zbG90LmF0dHJpYnV0ZXM7Zm9yKHZhciBpPTA7aTxhdHRycy5sZW5ndGg7aSsrKXt2YXIgYXR0cj1hdHRyc1tpXTtjb250ZW50LnNldEF0dHJpYnV0ZShhdHRyLm5hbWUsYXR0ci52YWx1ZSk7fQp2YXIgbmFtZT1zbG90LmdldEF0dHJpYnV0ZSgnbmFtZScpO2lmKG5hbWUpe2NvbnRlbnQuc2V0QXR0cmlidXRlKCdzZWxlY3QnLCdbc2xvdD1cJycrbmFtZSsnXCddJyk7fQpzbG90LnBhcmVudE5vZGUucmVwbGFjZUNoaWxkKGNvbnRlbnQsc2xvdCk7cmV0dXJuIGNvbnRlbnQ7fSxfcGFyc2VUZW1wbGF0ZTpmdW5jdGlvbihub2RlLGluZGV4LGxpc3QscGFyZW50LHN0cmlwV2hpdGVTcGFjZSl7dmFyIGNvbnRlbnQ9ZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpO2NvbnRlbnQuX25vdGVzPXRoaXMucGFyc2VBbm5vdGF0aW9ucyhub2RlLHN0cmlwV2hpdGVTcGFjZSk7Y29udGVudC5hcHBlbmRDaGlsZChub2RlLmNvbnRlbnQpO2xpc3QucHVzaCh7YmluZGluZ3M6UG9seW1lci5uYXIsZXZlbnRzOlBvbHltZXIubmFyLHRlbXBsYXRlQ29udGVudDpjb250ZW50LHBhcmVudDpwYXJlbnQsaW5kZXg6aW5kZXh9KTt9LF9wYXJzZU5vZGVBdHRyaWJ1dGVBbm5vdGF0aW9uczpmdW5jdGlvbihub2RlLGFubm90YXRpb24pe3ZhciBhdHRycz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChub2RlLmF0dHJpYnV0ZXMpO2Zvcih2YXIgaT1hdHRycy5sZW5ndGgtMSxhO2E9YXR0cnNbaV07aS0tKXt2YXIgbj1hLm5hbWU7dmFyIHY9YS52YWx1ZTt2YXIgYjtpZihuLnNsaWNlKDAsMyk9PT0nb24tJyl7bm9kZS5yZW1vdmVBdHRyaWJ1dGUobik7YW5ub3RhdGlvbi5ldmVudHMucHVzaCh7bmFtZTpuLnNsaWNlKDMpLHZhbHVlOnZ9KTt9ZWxzZSBpZihiPXRoaXMuX3BhcnNlTm9kZUF0dHJpYnV0ZUFubm90YXRpb24obm9kZSxuLHYpKXthbm5vdGF0aW9uLmJpbmRpbmdzLnB1c2goYik7fWVsc2UgaWYobj09PSdpZCcpe2Fubm90YXRpb24uaWQ9djt9fX0sX3BhcnNlTm9kZUF0dHJpYnV0ZUFubm90YXRpb246ZnVuY3Rpb24obm9kZSxuYW1lLHZhbHVlKXt2YXIgcGFydHM9dGhpcy5fcGFyc2VCaW5kaW5ncyh2YWx1ZSk7aWYocGFydHMpe3ZhciBvcmlnTmFtZT1uYW1lO3ZhciBraW5kPSdwcm9wZXJ0eSc7aWYobmFtZVtuYW1lLmxlbmd0aC0xXT09JyQnKXtuYW1lPW5hbWUuc2xpY2UoMCwtMSk7a2luZD0nYXR0cmlidXRlJzt9CnZhciBsaXRlcmFsPXRoaXMuX2xpdGVyYWxGcm9tUGFydHMocGFydHMpO2lmKGxpdGVyYWwmJmtpbmQ9PSdhdHRyaWJ1dGUnKXtub2RlLnNldEF0dHJpYnV0ZShuYW1lLGxpdGVyYWwpO30KaWYobm9kZS5sb2NhbE5hbWU9PT0naW5wdXQnJiZvcmlnTmFtZT09PSd2YWx1ZScpe25vZGUuc2V0QXR0cmlidXRlKG9yaWdOYW1lLCcnKTt9CmlmKGRpc2FibGVVcGdyYWRlRW5hYmxlZCYmb3JpZ05hbWU9PT0nZGlzYWJsZS11cGdyYWRlJCcpe25vZGUuc2V0QXR0cmlidXRlKG5hbWUsJycpO30Kbm9kZS5yZW1vdmVBdHRyaWJ1dGUob3JpZ05hbWUpO3ZhciBwcm9wZXJ0eU5hbWU9UG9seW1lci5DYXNlTWFwLmRhc2hUb0NhbWVsQ2FzZShuYW1lKTtpZihraW5kPT09J3Byb3BlcnR5Jyl7bmFtZT1wcm9wZXJ0eU5hbWU7fQpyZXR1cm57a2luZDpraW5kLG5hbWU6bmFtZSxwcm9wZXJ0eU5hbWU6cHJvcGVydHlOYW1lLHBhcnRzOnBhcnRzLGxpdGVyYWw6bGl0ZXJhbCxpc0NvbXBvdW5kOnBhcnRzLmxlbmd0aCE9PTF9O319LGZpbmRBbm5vdGF0ZWROb2RlOmZ1bmN0aW9uKHJvb3QsYW5ub3RlKXt2YXIgcGFyZW50PWFubm90ZS5wYXJlbnQmJlBvbHltZXIuQW5ub3RhdGlvbnMuZmluZEFubm90YXRlZE5vZGUocm9vdCxhbm5vdGUucGFyZW50KTtpZihwYXJlbnQpe2Zvcih2YXIgbj1wYXJlbnQuZmlyc3RDaGlsZCxpPTA7bjtuPW4ubmV4dFNpYmxpbmcpe2lmKGFubm90ZS5pbmRleD09PWkrKyl7cmV0dXJuIG47fX19ZWxzZXtyZXR1cm4gcm9vdDt9fX07fSgpKTtQb2x5bWVyLlBhdGg9e3Jvb3Q6ZnVuY3Rpb24ocGF0aCl7dmFyIGRvdEluZGV4PXBhdGguaW5kZXhPZignLicpO2lmKGRvdEluZGV4PT09LTEpe3JldHVybiBwYXRoO30KcmV0dXJuIHBhdGguc2xpY2UoMCxkb3RJbmRleCk7fSxpc0RlZXA6ZnVuY3Rpb24ocGF0aCl7cmV0dXJuIHBhdGguaW5kZXhPZignLicpIT09LTE7fSxpc0FuY2VzdG9yOmZ1bmN0aW9uKGJhc2UscGF0aCl7cmV0dXJuIGJhc2UuaW5kZXhPZihwYXRoKycuJyk9PT0wO30saXNEZXNjZW5kYW50OmZ1bmN0aW9uKGJhc2UscGF0aCl7cmV0dXJuIHBhdGguaW5kZXhPZihiYXNlKycuJyk9PT0wO30sdHJhbnNsYXRlOmZ1bmN0aW9uKGJhc2UsbmV3QmFzZSxwYXRoKXtyZXR1cm4gbmV3QmFzZStwYXRoLnNsaWNlKGJhc2UubGVuZ3RoKTt9LG1hdGNoZXM6ZnVuY3Rpb24oYmFzZSx3aWxkY2FyZCxwYXRoKXtyZXR1cm4gYmFzZT09PXBhdGh8fHRoaXMuaXNBbmNlc3RvcihiYXNlLHBhdGgpfHxCb29sZWFuKHdpbGRjYXJkKSYmdGhpcy5pc0Rlc2NlbmRhbnQoYmFzZSxwYXRoKTt9fTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwQW5ub3RhdGlvbnM6ZnVuY3Rpb24oKXtpZighdGhpcy5fdGVtcGxhdGUpe3RoaXMuX25vdGVzPVtdO31lbHNle3ZhciBzZWxmPXRoaXM7UG9seW1lci5Bbm5vdGF0aW9ucy5wcmVwRWxlbWVudD1mdW5jdGlvbihlbGVtZW50KXtzZWxmLl9wcmVwRWxlbWVudChlbGVtZW50KTt9O2lmKHRoaXMuX3RlbXBsYXRlLl9jb250ZW50JiZ0aGlzLl90ZW1wbGF0ZS5fY29udGVudC5fbm90ZXMpe3RoaXMuX25vdGVzPXRoaXMuX3RlbXBsYXRlLl9jb250ZW50Ll9ub3Rlczt9ZWxzZXt0aGlzLl9ub3Rlcz1Qb2x5bWVyLkFubm90YXRpb25zLnBhcnNlQW5ub3RhdGlvbnModGhpcy5fdGVtcGxhdGUpO3RoaXMuX3Byb2Nlc3NBbm5vdGF0aW9ucyh0aGlzLl9ub3Rlcyk7fQpQb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PW51bGw7fX0sX3Byb2Nlc3NBbm5vdGF0aW9uczpmdW5jdGlvbihub3Rlcyl7Zm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXt2YXIgbm90ZT1ub3Rlc1tpXTtmb3IodmFyIGo9MDtqPG5vdGUuYmluZGluZ3MubGVuZ3RoO2orKyl7dmFyIGI9bm90ZS5iaW5kaW5nc1tqXTtmb3IodmFyIGs9MDtrPGIucGFydHMubGVuZ3RoO2srKyl7dmFyIHA9Yi5wYXJ0c1trXTtpZighcC5saXRlcmFsKXt2YXIgc2lnbmF0dXJlPXRoaXMuX3BhcnNlTWV0aG9kKHAudmFsdWUpO2lmKHNpZ25hdHVyZSl7cC5zaWduYXR1cmU9c2lnbmF0dXJlO31lbHNle3AubW9kZWw9UG9seW1lci5QYXRoLnJvb3QocC52YWx1ZSk7fX19fQppZihub3RlLnRlbXBsYXRlQ29udGVudCl7dGhpcy5fcHJvY2Vzc0Fubm90YXRpb25zKG5vdGUudGVtcGxhdGVDb250ZW50Ll9ub3Rlcyk7dmFyIHBwPW5vdGUudGVtcGxhdGVDb250ZW50Ll9wYXJlbnRQcm9wcz10aGlzLl9kaXNjb3ZlclRlbXBsYXRlUGFyZW50UHJvcHMobm90ZS50ZW1wbGF0ZUNvbnRlbnQuX25vdGVzKTt2YXIgYmluZGluZ3M9W107Zm9yKHZhciBwcm9wIGluIHBwKXt2YXIgbmFtZT0nX3BhcmVudF8nK3Byb3A7YmluZGluZ3MucHVzaCh7aW5kZXg6bm90ZS5pbmRleCxraW5kOidwcm9wZXJ0eScsbmFtZTpuYW1lLHByb3BlcnR5TmFtZTpuYW1lLHBhcnRzOlt7bW9kZToneycsbW9kZWw6cHJvcCx2YWx1ZTpwcm9wfV19KTt9Cm5vdGUuYmluZGluZ3M9bm90ZS5iaW5kaW5ncy5jb25jYXQoYmluZGluZ3MpO319fSxfZGlzY292ZXJUZW1wbGF0ZVBhcmVudFByb3BzOmZ1bmN0aW9uKG5vdGVzKXt2YXIgcHA9e307Zm9yKHZhciBpPTAsbjtpPG5vdGVzLmxlbmd0aCYmKG49bm90ZXNbaV0pO2krKyl7Zm9yKHZhciBqPTAsYiQ9bi5iaW5kaW5ncyxiO2o8YiQubGVuZ3RoJiYoYj1iJFtqXSk7aisrKXtmb3IodmFyIGs9MCxwJD1iLnBhcnRzLHA7azxwJC5sZW5ndGgmJihwPXAkW2tdKTtrKyspe2lmKHAuc2lnbmF0dXJlKXt2YXIgYXJncz1wLnNpZ25hdHVyZS5hcmdzO2Zvcih2YXIga2s9MDtrazxhcmdzLmxlbmd0aDtraysrKXt2YXIgbW9kZWw9YXJnc1tra10ubW9kZWw7aWYobW9kZWwpe3BwW21vZGVsXT10cnVlO319CmlmKHAuc2lnbmF0dXJlLmR5bmFtaWNGbil7cHBbcC5zaWduYXR1cmUubWV0aG9kXT10cnVlO319ZWxzZXtpZihwLm1vZGVsKXtwcFtwLm1vZGVsXT10cnVlO319fX0KaWYobi50ZW1wbGF0ZUNvbnRlbnQpe3ZhciB0cHA9bi50ZW1wbGF0ZUNvbnRlbnQuX3BhcmVudFByb3BzO1BvbHltZXIuQmFzZS5taXhpbihwcCx0cHApO319CnJldHVybiBwcDt9LF9wcmVwRWxlbWVudDpmdW5jdGlvbihlbGVtZW50KXtQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZUF0dHJzKGVsZW1lbnQsdGhpcy5fdGVtcGxhdGUub3duZXJEb2N1bWVudCk7fSxfZmluZEFubm90YXRlZE5vZGU6UG9seW1lci5Bbm5vdGF0aW9ucy5maW5kQW5ub3RhdGVkTm9kZSxfbWFyc2hhbEFubm90YXRpb25SZWZlcmVuY2VzOmZ1bmN0aW9uKCl7aWYodGhpcy5fdGVtcGxhdGUpe3RoaXMuX21hcnNoYWxJZE5vZGVzKCk7dGhpcy5fbWFyc2hhbEFubm90YXRlZE5vZGVzKCk7dGhpcy5fbWFyc2hhbEFubm90YXRlZExpc3RlbmVycygpO319LF9jb25maWd1cmVBbm5vdGF0aW9uUmVmZXJlbmNlczpmdW5jdGlvbigpe3ZhciBub3Rlcz10aGlzLl9ub3Rlczt2YXIgbm9kZXM9dGhpcy5fbm9kZXM7Zm9yKHZhciBpPTA7aTxub3Rlcy5sZW5ndGg7aSsrKXt2YXIgbm90ZT1ub3Rlc1tpXTt2YXIgbm9kZT1ub2Rlc1tpXTt0aGlzLl9jb25maWd1cmVUZW1wbGF0ZUNvbnRlbnQobm90ZSxub2RlKTt0aGlzLl9jb25maWd1cmVDb21wb3VuZEJpbmRpbmdzKG5vdGUsbm9kZSk7fX0sX2NvbmZpZ3VyZVRlbXBsYXRlQ29udGVudDpmdW5jdGlvbihub3RlLG5vZGUpe2lmKG5vdGUudGVtcGxhdGVDb250ZW50KXtub2RlLl9jb250ZW50PW5vdGUudGVtcGxhdGVDb250ZW50O319LF9jb25maWd1cmVDb21wb3VuZEJpbmRpbmdzOmZ1bmN0aW9uKG5vdGUsbm9kZSl7dmFyIGJpbmRpbmdzPW5vdGUuYmluZGluZ3M7Zm9yKHZhciBpPTA7aTxiaW5kaW5ncy5sZW5ndGg7aSsrKXt2YXIgYmluZGluZz1iaW5kaW5nc1tpXTtpZihiaW5kaW5nLmlzQ29tcG91bmQpe3ZhciBzdG9yYWdlPW5vZGUuX19jb21wb3VuZFN0b3JhZ2VfX3x8KG5vZGUuX19jb21wb3VuZFN0b3JhZ2VfXz17fSk7dmFyIHBhcnRzPWJpbmRpbmcucGFydHM7dmFyIGxpdGVyYWxzPW5ldyBBcnJheShwYXJ0cy5sZW5ndGgpO2Zvcih2YXIgaj0wO2o8cGFydHMubGVuZ3RoO2orKyl7bGl0ZXJhbHNbal09cGFydHNbal0ubGl0ZXJhbDt9CnZhciBuYW1lPWJpbmRpbmcubmFtZTtzdG9yYWdlW25hbWVdPWxpdGVyYWxzO2lmKGJpbmRpbmcubGl0ZXJhbCYmYmluZGluZy5raW5kPT0ncHJvcGVydHknKXtpZihub2RlLl9jb25maWdWYWx1ZSl7bm9kZS5fY29uZmlnVmFsdWUobmFtZSxiaW5kaW5nLmxpdGVyYWwpO31lbHNle25vZGVbbmFtZV09YmluZGluZy5saXRlcmFsO319fX19LF9tYXJzaGFsSWROb2RlczpmdW5jdGlvbigpe3RoaXMuJD17fTtmb3IodmFyIGk9MCxsPXRoaXMuX25vdGVzLmxlbmd0aCxhO2k8bCYmKGE9dGhpcy5fbm90ZXNbaV0pO2krKyl7aWYoYS5pZCl7dGhpcy4kW2EuaWRdPXRoaXMuX2ZpbmRBbm5vdGF0ZWROb2RlKHRoaXMucm9vdCxhKTt9fX0sX21hcnNoYWxBbm5vdGF0ZWROb2RlczpmdW5jdGlvbigpe2lmKHRoaXMuX25vdGVzJiZ0aGlzLl9ub3Rlcy5sZW5ndGgpe3ZhciByPW5ldyBBcnJheSh0aGlzLl9ub3Rlcy5sZW5ndGgpO2Zvcih2YXIgaT0wO2k8dGhpcy5fbm90ZXMubGVuZ3RoO2krKyl7cltpXT10aGlzLl9maW5kQW5ub3RhdGVkTm9kZSh0aGlzLnJvb3QsdGhpcy5fbm90ZXNbaV0pO30KdGhpcy5fbm9kZXM9cjt9fSxfbWFyc2hhbEFubm90YXRlZExpc3RlbmVyczpmdW5jdGlvbigpe2Zvcih2YXIgaT0wLGw9dGhpcy5fbm90ZXMubGVuZ3RoLGE7aTxsJiYoYT10aGlzLl9ub3Rlc1tpXSk7aSsrKXtpZihhLmV2ZW50cyYmYS5ldmVudHMubGVuZ3RoKXt2YXIgbm9kZT10aGlzLl9maW5kQW5ub3RhdGVkTm9kZSh0aGlzLnJvb3QsYSk7Zm9yKHZhciBqPTAsZSQ9YS5ldmVudHMsZTtqPGUkLmxlbmd0aCYmKGU9ZSRbal0pO2orKyl7dGhpcy5saXN0ZW4obm9kZSxlLm5hbWUsZS52YWx1ZSk7fX19fX0pO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7bGlzdGVuZXJzOnt9LF9saXN0ZW5MaXN0ZW5lcnM6ZnVuY3Rpb24obGlzdGVuZXJzKXt2YXIgbm9kZSxuYW1lLGV2ZW50TmFtZTtmb3IoZXZlbnROYW1lIGluIGxpc3RlbmVycyl7aWYoZXZlbnROYW1lLmluZGV4T2YoJy4nKTwwKXtub2RlPXRoaXM7bmFtZT1ldmVudE5hbWU7fWVsc2V7bmFtZT1ldmVudE5hbWUuc3BsaXQoJy4nKTtub2RlPXRoaXMuJFtuYW1lWzBdXTtuYW1lPW5hbWVbMV07fQp0aGlzLmxpc3Rlbihub2RlLG5hbWUsbGlzdGVuZXJzW2V2ZW50TmFtZV0pO319LGxpc3RlbjpmdW5jdGlvbihub2RlLGV2ZW50TmFtZSxtZXRob2ROYW1lKXt2YXIgaGFuZGxlcj10aGlzLl9yZWNhbGxFdmVudEhhbmRsZXIodGhpcyxldmVudE5hbWUsbm9kZSxtZXRob2ROYW1lKTtpZighaGFuZGxlcil7aGFuZGxlcj10aGlzLl9jcmVhdGVFdmVudEhhbmRsZXIobm9kZSxldmVudE5hbWUsbWV0aG9kTmFtZSk7fQppZihoYW5kbGVyLl9saXN0ZW5pbmcpe3JldHVybjt9CnRoaXMuX2xpc3Rlbihub2RlLGV2ZW50TmFtZSxoYW5kbGVyKTtoYW5kbGVyLl9saXN0ZW5pbmc9dHJ1ZTt9LF9ib3VuZExpc3RlbmVyS2V5OmZ1bmN0aW9uKGV2ZW50TmFtZSxtZXRob2ROYW1lKXtyZXR1cm4gZXZlbnROYW1lKyc6JyttZXRob2ROYW1lO30sX3JlY29yZEV2ZW50SGFuZGxlcjpmdW5jdGlvbihob3N0LGV2ZW50TmFtZSx0YXJnZXQsbWV0aG9kTmFtZSxoYW5kbGVyKXt2YXIgaGJsPWhvc3QuX19ib3VuZExpc3RlbmVycztpZighaGJsKXtoYmw9aG9zdC5fX2JvdW5kTGlzdGVuZXJzPW5ldyBXZWFrTWFwKCk7fQp2YXIgYmw9aGJsLmdldCh0YXJnZXQpO2lmKCFibCl7Ymw9e307aWYoIVBvbHltZXIuU2V0dGluZ3MuaXNJRXx8dGFyZ2V0IT13aW5kb3cpe2hibC5zZXQodGFyZ2V0LGJsKTt9fQp2YXIga2V5PXRoaXMuX2JvdW5kTGlzdGVuZXJLZXkoZXZlbnROYW1lLG1ldGhvZE5hbWUpO2JsW2tleV09aGFuZGxlcjt9LF9yZWNhbGxFdmVudEhhbmRsZXI6ZnVuY3Rpb24oaG9zdCxldmVudE5hbWUsdGFyZ2V0LG1ldGhvZE5hbWUpe3ZhciBoYmw9aG9zdC5fX2JvdW5kTGlzdGVuZXJzO2lmKCFoYmwpe3JldHVybjt9CnZhciBibD1oYmwuZ2V0KHRhcmdldCk7aWYoIWJsKXtyZXR1cm47fQp2YXIga2V5PXRoaXMuX2JvdW5kTGlzdGVuZXJLZXkoZXZlbnROYW1lLG1ldGhvZE5hbWUpO3JldHVybiBibFtrZXldO30sX2NyZWF0ZUV2ZW50SGFuZGxlcjpmdW5jdGlvbihub2RlLGV2ZW50TmFtZSxtZXRob2ROYW1lKXt2YXIgaG9zdD10aGlzO3ZhciBoYW5kbGVyPWZ1bmN0aW9uKGUpe2lmKGhvc3RbbWV0aG9kTmFtZV0pe2hvc3RbbWV0aG9kTmFtZV0oZSxlLmRldGFpbCk7fWVsc2V7aG9zdC5fd2Fybihob3N0Ll9sb2dmKCdfY3JlYXRlRXZlbnRIYW5kbGVyJywnbGlzdGVuZXIgbWV0aG9kIGAnK21ldGhvZE5hbWUrJ2Agbm90IGRlZmluZWQnKSk7fX07aGFuZGxlci5fbGlzdGVuaW5nPWZhbHNlO3RoaXMuX3JlY29yZEV2ZW50SGFuZGxlcihob3N0LGV2ZW50TmFtZSxub2RlLG1ldGhvZE5hbWUsaGFuZGxlcik7cmV0dXJuIGhhbmRsZXI7fSx1bmxpc3RlbjpmdW5jdGlvbihub2RlLGV2ZW50TmFtZSxtZXRob2ROYW1lKXt2YXIgaGFuZGxlcj10aGlzLl9yZWNhbGxFdmVudEhhbmRsZXIodGhpcyxldmVudE5hbWUsbm9kZSxtZXRob2ROYW1lKTtpZihoYW5kbGVyKXt0aGlzLl91bmxpc3Rlbihub2RlLGV2ZW50TmFtZSxoYW5kbGVyKTtoYW5kbGVyLl9saXN0ZW5pbmc9ZmFsc2U7fX0sX2xpc3RlbjpmdW5jdGlvbihub2RlLGV2ZW50TmFtZSxoYW5kbGVyKXtub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLGhhbmRsZXIpO30sX3VubGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpe25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsaGFuZGxlcik7fX0pOyhmdW5jdGlvbigpeyd1c2Ugc3RyaWN0Jzt2YXIgd3JhcD1Qb2x5bWVyLkRvbUFwaS53cmFwO3ZhciBIQVNfTkFUSVZFX1RBPXR5cGVvZiBkb2N1bWVudC5oZWFkLnN0eWxlLnRvdWNoQWN0aW9uPT09J3N0cmluZyc7dmFyIEdFU1RVUkVfS0VZPSdfX3BvbHltZXJHZXN0dXJlcyc7dmFyIEhBTkRMRURfT0JKPSdfX3BvbHltZXJHZXN0dXJlc0hhbmRsZWQnO3ZhciBUT1VDSF9BQ1RJT049J19fcG9seW1lckdlc3R1cmVzVG91Y2hBY3Rpb24nO3ZhciBUQVBfRElTVEFOQ0U9MjU7dmFyIFRSQUNLX0RJU1RBTkNFPTU7dmFyIFRSQUNLX0xFTkdUSD0yO3ZhciBNT1VTRV9USU1FT1VUPTI1MDA7dmFyIE1PVVNFX0VWRU5UUz1bJ21vdXNlZG93bicsJ21vdXNlbW92ZScsJ21vdXNldXAnLCdjbGljayddO3ZhciBNT1VTRV9XSElDSF9UT19CVVRUT05TPVswLDEsNCwyXTt2YXIgTU9VU0VfSEFTX0JVVFRPTlM9ZnVuY3Rpb24oKXt0cnl7cmV0dXJuIG5ldyBNb3VzZUV2ZW50KCd0ZXN0Jyx7YnV0dG9uczoxfSkuYnV0dG9ucz09PTE7fWNhdGNoKGUpe3JldHVybiBmYWxzZTt9fSgpO2Z1bmN0aW9uIGlzTW91c2VFdmVudChuYW1lKXtyZXR1cm4gTU9VU0VfRVZFTlRTLmluZGV4T2YobmFtZSk+LTE7fQp2YXIgU1VQUE9SVFNfUEFTU0lWRT1mYWxzZTsoZnVuY3Rpb24oKXt0cnl7dmFyIG9wdHM9T2JqZWN0LmRlZmluZVByb3BlcnR5KHt9LCdwYXNzaXZlJyx7Z2V0OmZ1bmN0aW9uKCl7U1VQUE9SVFNfUEFTU0lWRT10cnVlO319KTt3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigndGVzdCcsbnVsbCxvcHRzKTt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigndGVzdCcsbnVsbCxvcHRzKTt9Y2F0Y2goZSl7fX0oKSk7ZnVuY3Rpb24gUEFTU0lWRV9UT1VDSChldmVudE5hbWUpe2lmKGlzTW91c2VFdmVudChldmVudE5hbWUpfHxldmVudE5hbWU9PT0ndG91Y2hlbmQnKXtyZXR1cm47fQppZihIQVNfTkFUSVZFX1RBJiZTVVBQT1JUU19QQVNTSVZFJiZQb2x5bWVyLlNldHRpbmdzLnBhc3NpdmVUb3VjaEdlc3R1cmVzKXtyZXR1cm57cGFzc2l2ZTp0cnVlfTt9fQp2YXIgSVNfVE9VQ0hfT05MWT1uYXZpZ2F0b3IudXNlckFnZW50Lm1hdGNoKC9pUCg/OltvYV1kfGhvbmUpfEFuZHJvaWQvKTt2YXIgbW91c2VDYW5jZWxsZXI9ZnVuY3Rpb24obW91c2VFdmVudCl7dmFyIHNjPW1vdXNlRXZlbnQuc291cmNlQ2FwYWJpbGl0aWVzO2lmKHNjJiYhc2MuZmlyZXNUb3VjaEV2ZW50cyl7cmV0dXJuO30KbW91c2VFdmVudFtIQU5ETEVEX09CSl09e3NraXA6dHJ1ZX07aWYobW91c2VFdmVudC50eXBlPT09J2NsaWNrJyl7dmFyIHBhdGg9UG9seW1lci5kb20obW91c2VFdmVudCkucGF0aDtpZihwYXRoKXtmb3IodmFyIGk9MDtpPHBhdGgubGVuZ3RoO2krKyl7aWYocGF0aFtpXT09PVBPSU5URVJTVEFURS5tb3VzZS50YXJnZXQpe3JldHVybjt9fX0KbW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO21vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fX07ZnVuY3Rpb24gc2V0dXBUZWFyZG93bk1vdXNlQ2FuY2VsbGVyKHNldHVwKXt2YXIgZXZlbnRzPUlTX1RPVUNIX09OTFk/WydjbGljayddOk1PVVNFX0VWRU5UUztmb3IodmFyIGk9MCxlbjtpPGV2ZW50cy5sZW5ndGg7aSsrKXtlbj1ldmVudHNbaV07aWYoc2V0dXApe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoZW4sbW91c2VDYW5jZWxsZXIsdHJ1ZSk7fWVsc2V7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihlbixtb3VzZUNhbmNlbGxlcix0cnVlKTt9fX0KZnVuY3Rpb24gaWdub3JlTW91c2UoZXYpe2lmKCFQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2Ipe3NldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcih0cnVlKTt9CnZhciB1bnNldD1mdW5jdGlvbigpe3NldHVwVGVhcmRvd25Nb3VzZUNhbmNlbGxlcigpO1BPSU5URVJTVEFURS5tb3VzZS50YXJnZXQ9bnVsbDtQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2I9bnVsbDt9O1BPSU5URVJTVEFURS5tb3VzZS50YXJnZXQ9UG9seW1lci5kb20oZXYpLnJvb3RUYXJnZXQ7UE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iPVBvbHltZXIuRGVib3VuY2UoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iLHVuc2V0LE1PVVNFX1RJTUVPVVQpO30KZnVuY3Rpb24gaGFzTGVmdE1vdXNlQnV0dG9uKGV2KXt2YXIgdHlwZT1ldi50eXBlO2lmKCFpc01vdXNlRXZlbnQodHlwZSkpe3JldHVybiBmYWxzZTt9CmlmKHR5cGU9PT0nbW91c2Vtb3ZlJyl7dmFyIGJ1dHRvbnM9ZXYuYnV0dG9ucz09PXVuZGVmaW5lZD8xOmV2LmJ1dHRvbnM7aWYoZXYgaW5zdGFuY2VvZiB3aW5kb3cuTW91c2VFdmVudCYmIU1PVVNFX0hBU19CVVRUT05TKXtidXR0b25zPU1PVVNFX1dISUNIX1RPX0JVVFRPTlNbZXYud2hpY2hdfHwwO30KcmV0dXJuIEJvb2xlYW4oYnV0dG9ucyYxKTt9ZWxzZXt2YXIgYnV0dG9uPWV2LmJ1dHRvbj09PXVuZGVmaW5lZD8wOmV2LmJ1dHRvbjtyZXR1cm4gYnV0dG9uPT09MDt9fQpmdW5jdGlvbiBpc1N5bnRoZXRpY0NsaWNrKGV2KXtpZihldi50eXBlPT09J2NsaWNrJyl7aWYoZXYuZGV0YWlsPT09MCl7cmV0dXJuIHRydWU7fQp2YXIgdD1HZXN0dXJlcy5maW5kT3JpZ2luYWxUYXJnZXQoZXYpO3ZhciBiY3I9dC5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTt2YXIgeD1ldi5wYWdlWCx5PWV2LnBhZ2VZO3JldHVybiEoeD49YmNyLmxlZnQmJng8PWJjci5yaWdodCYmKHk+PWJjci50b3AmJnk8PWJjci5ib3R0b20pKTt9CnJldHVybiBmYWxzZTt9CnZhciBQT0lOVEVSU1RBVEU9e21vdXNlOnt0YXJnZXQ6bnVsbCxtb3VzZUlnbm9yZUpvYjpudWxsfSx0b3VjaDp7eDowLHk6MCxpZDotMSxzY3JvbGxEZWNpZGVkOmZhbHNlfX07ZnVuY3Rpb24gZmlyc3RUb3VjaEFjdGlvbihldil7dmFyIHBhdGg9UG9seW1lci5kb20oZXYpLnBhdGg7dmFyIHRhPSdhdXRvJztmb3IodmFyIGk9MCxuO2k8cGF0aC5sZW5ndGg7aSsrKXtuPXBhdGhbaV07aWYobltUT1VDSF9BQ1RJT05dKXt0YT1uW1RPVUNIX0FDVElPTl07YnJlYWs7fX0KcmV0dXJuIHRhO30KZnVuY3Rpb24gdHJhY2tEb2N1bWVudChzdGF0ZU9iaixtb3ZlZm4sdXBmbil7c3RhdGVPYmoubW92ZWZuPW1vdmVmbjtzdGF0ZU9iai51cGZuPXVwZm47ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3ZlZm4pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHVwZm4pO30KZnVuY3Rpb24gdW50cmFja0RvY3VtZW50KHN0YXRlT2JqKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHN0YXRlT2JqLm1vdmVmbik7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsc3RhdGVPYmoudXBmbik7c3RhdGVPYmoubW92ZWZuPW51bGw7c3RhdGVPYmoudXBmbj1udWxsO30KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigndG91Y2hlbmQnLGlnbm9yZU1vdXNlLFNVUFBPUlRTX1BBU1NJVkU/e3Bhc3NpdmU6dHJ1ZX06ZmFsc2UpO3ZhciBHZXN0dXJlcz17Z2VzdHVyZXM6e30scmVjb2duaXplcnM6W10sZGVlcFRhcmdldEZpbmQ6ZnVuY3Rpb24oeCx5KXt2YXIgbm9kZT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHgseSk7dmFyIG5leHQ9bm9kZTt3aGlsZShuZXh0JiZuZXh0LnNoYWRvd1Jvb3Qpe25leHQ9bmV4dC5zaGFkb3dSb290LmVsZW1lbnRGcm9tUG9pbnQoeCx5KTtpZihuZXh0KXtub2RlPW5leHQ7fX0KcmV0dXJuIG5vZGU7fSxmaW5kT3JpZ2luYWxUYXJnZXQ6ZnVuY3Rpb24oZXYpe2lmKGV2LnBhdGgpe3JldHVybiBldi5wYXRoWzBdO30KcmV0dXJuIGV2LnRhcmdldDt9LGhhbmRsZU5hdGl2ZTpmdW5jdGlvbihldil7dmFyIGhhbmRsZWQ7dmFyIHR5cGU9ZXYudHlwZTt2YXIgbm9kZT13cmFwKGV2LmN1cnJlbnRUYXJnZXQpO3ZhciBnb2JqPW5vZGVbR0VTVFVSRV9LRVldO2lmKCFnb2JqKXtyZXR1cm47fQp2YXIgZ3M9Z29ialt0eXBlXTtpZighZ3Mpe3JldHVybjt9CmlmKCFldltIQU5ETEVEX09CSl0pe2V2W0hBTkRMRURfT0JKXT17fTtpZih0eXBlLnNsaWNlKDAsNSk9PT0ndG91Y2gnKXt2YXIgdD1ldi5jaGFuZ2VkVG91Y2hlc1swXTtpZih0eXBlPT09J3RvdWNoc3RhcnQnKXtpZihldi50b3VjaGVzLmxlbmd0aD09PTEpe1BPSU5URVJTVEFURS50b3VjaC5pZD10LmlkZW50aWZpZXI7fX0KaWYoUE9JTlRFUlNUQVRFLnRvdWNoLmlkIT09dC5pZGVudGlmaWVyKXtyZXR1cm47fQppZighSEFTX05BVElWRV9UQSl7aWYodHlwZT09PSd0b3VjaHN0YXJ0J3x8dHlwZT09PSd0b3VjaG1vdmUnKXtHZXN0dXJlcy5oYW5kbGVUb3VjaEFjdGlvbihldik7fX19fQpoYW5kbGVkPWV2W0hBTkRMRURfT0JKXTtpZihoYW5kbGVkLnNraXApe3JldHVybjt9CnZhciByZWNvZ25pemVycz1HZXN0dXJlcy5yZWNvZ25pemVycztmb3IodmFyIGk9MCxyO2k8cmVjb2duaXplcnMubGVuZ3RoO2krKyl7cj1yZWNvZ25pemVyc1tpXTtpZihnc1tyLm5hbWVdJiYhaGFuZGxlZFtyLm5hbWVdKXtpZihyLmZsb3cmJnIuZmxvdy5zdGFydC5pbmRleE9mKGV2LnR5cGUpPi0xJiZyLnJlc2V0KXtyLnJlc2V0KCk7fX19CmZvcihpPTAscjtpPHJlY29nbml6ZXJzLmxlbmd0aDtpKyspe3I9cmVjb2duaXplcnNbaV07aWYoZ3Nbci5uYW1lXSYmIWhhbmRsZWRbci5uYW1lXSl7aGFuZGxlZFtyLm5hbWVdPXRydWU7clt0eXBlXShldik7fX19LGhhbmRsZVRvdWNoQWN0aW9uOmZ1bmN0aW9uKGV2KXt2YXIgdD1ldi5jaGFuZ2VkVG91Y2hlc1swXTt2YXIgdHlwZT1ldi50eXBlO2lmKHR5cGU9PT0ndG91Y2hzdGFydCcpe1BPSU5URVJTVEFURS50b3VjaC54PXQuY2xpZW50WDtQT0lOVEVSU1RBVEUudG91Y2gueT10LmNsaWVudFk7UE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQ9ZmFsc2U7fWVsc2UgaWYodHlwZT09PSd0b3VjaG1vdmUnKXtpZihQT0lOVEVSU1RBVEUudG91Y2guc2Nyb2xsRGVjaWRlZCl7cmV0dXJuO30KUE9JTlRFUlNUQVRFLnRvdWNoLnNjcm9sbERlY2lkZWQ9dHJ1ZTt2YXIgdGE9Zmlyc3RUb3VjaEFjdGlvbihldik7dmFyIHByZXZlbnQ9ZmFsc2U7dmFyIGR4PU1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC54LXQuY2xpZW50WCk7dmFyIGR5PU1hdGguYWJzKFBPSU5URVJTVEFURS50b3VjaC55LXQuY2xpZW50WSk7aWYoIWV2LmNhbmNlbGFibGUpe31lbHNlIGlmKHRhPT09J25vbmUnKXtwcmV2ZW50PXRydWU7fWVsc2UgaWYodGE9PT0ncGFuLXgnKXtwcmV2ZW50PWR5PmR4O31lbHNlIGlmKHRhPT09J3Bhbi15Jyl7cHJldmVudD1keD5keTt9CmlmKHByZXZlbnQpe2V2LnByZXZlbnREZWZhdWx0KCk7fWVsc2V7R2VzdHVyZXMucHJldmVudCgndHJhY2snKTt9fX0sYWRkOmZ1bmN0aW9uKG5vZGUsZXZUeXBlLGhhbmRsZXIpe25vZGU9d3JhcChub2RlKTt2YXIgcmVjb2duaXplcj10aGlzLmdlc3R1cmVzW2V2VHlwZV07dmFyIGRlcHM9cmVjb2duaXplci5kZXBzO3ZhciBuYW1lPXJlY29nbml6ZXIubmFtZTt2YXIgZ29iaj1ub2RlW0dFU1RVUkVfS0VZXTtpZighZ29iail7bm9kZVtHRVNUVVJFX0tFWV09Z29iaj17fTt9CmZvcih2YXIgaT0wLGRlcCxnZDtpPGRlcHMubGVuZ3RoO2krKyl7ZGVwPWRlcHNbaV07aWYoSVNfVE9VQ0hfT05MWSYmaXNNb3VzZUV2ZW50KGRlcCkmJmRlcCE9PSdjbGljaycpe2NvbnRpbnVlO30KZ2Q9Z29ialtkZXBdO2lmKCFnZCl7Z29ialtkZXBdPWdkPXtfY291bnQ6MH07fQppZihnZC5fY291bnQ9PT0wKXtub2RlLmFkZEV2ZW50TGlzdGVuZXIoZGVwLHRoaXMuaGFuZGxlTmF0aXZlLFBBU1NJVkVfVE9VQ0goZGVwKSk7fQpnZFtuYW1lXT0oZ2RbbmFtZV18fDApKzE7Z2QuX2NvdW50PShnZC5fY291bnR8fDApKzE7fQpub2RlLmFkZEV2ZW50TGlzdGVuZXIoZXZUeXBlLGhhbmRsZXIpO2lmKHJlY29nbml6ZXIudG91Y2hBY3Rpb24pe3RoaXMuc2V0VG91Y2hBY3Rpb24obm9kZSxyZWNvZ25pemVyLnRvdWNoQWN0aW9uKTt9fSxyZW1vdmU6ZnVuY3Rpb24obm9kZSxldlR5cGUsaGFuZGxlcil7bm9kZT13cmFwKG5vZGUpO3ZhciByZWNvZ25pemVyPXRoaXMuZ2VzdHVyZXNbZXZUeXBlXTt2YXIgZGVwcz1yZWNvZ25pemVyLmRlcHM7dmFyIG5hbWU9cmVjb2duaXplci5uYW1lO3ZhciBnb2JqPW5vZGVbR0VTVFVSRV9LRVldO2lmKGdvYmope2Zvcih2YXIgaT0wLGRlcCxnZDtpPGRlcHMubGVuZ3RoO2krKyl7ZGVwPWRlcHNbaV07Z2Q9Z29ialtkZXBdO2lmKGdkJiZnZFtuYW1lXSl7Z2RbbmFtZV09KGdkW25hbWVdfHwxKS0xO2dkLl9jb3VudD0oZ2QuX2NvdW50fHwxKS0xO2lmKGdkLl9jb3VudD09PTApe25vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihkZXAsdGhpcy5oYW5kbGVOYXRpdmUsUEFTU0lWRV9UT1VDSChkZXApKTt9fX19Cm5vZGUucmVtb3ZlRXZlbnRMaXN0ZW5lcihldlR5cGUsaGFuZGxlcik7fSxyZWdpc3RlcjpmdW5jdGlvbihyZWNvZyl7dGhpcy5yZWNvZ25pemVycy5wdXNoKHJlY29nKTtmb3IodmFyIGk9MDtpPHJlY29nLmVtaXRzLmxlbmd0aDtpKyspe3RoaXMuZ2VzdHVyZXNbcmVjb2cuZW1pdHNbaV1dPXJlY29nO319LGZpbmRSZWNvZ25pemVyQnlFdmVudDpmdW5jdGlvbihldk5hbWUpe2Zvcih2YXIgaT0wLHI7aTx0aGlzLnJlY29nbml6ZXJzLmxlbmd0aDtpKyspe3I9dGhpcy5yZWNvZ25pemVyc1tpXTtmb3IodmFyIGo9MCxuO2o8ci5lbWl0cy5sZW5ndGg7aisrKXtuPXIuZW1pdHNbal07aWYobj09PWV2TmFtZSl7cmV0dXJuIHI7fX19CnJldHVybiBudWxsO30sc2V0VG91Y2hBY3Rpb246ZnVuY3Rpb24obm9kZSx2YWx1ZSl7aWYoSEFTX05BVElWRV9UQSl7bm9kZS5zdHlsZS50b3VjaEFjdGlvbj12YWx1ZTt9Cm5vZGVbVE9VQ0hfQUNUSU9OXT12YWx1ZTt9LGZpcmU6ZnVuY3Rpb24odGFyZ2V0LHR5cGUsZGV0YWlsKXt2YXIgZXY9UG9seW1lci5CYXNlLmZpcmUodHlwZSxkZXRhaWwse25vZGU6dGFyZ2V0LGJ1YmJsZXM6dHJ1ZSxjYW5jZWxhYmxlOnRydWV9KTtpZihldi5kZWZhdWx0UHJldmVudGVkKXt2YXIgcHJldmVudGVyPWRldGFpbC5wcmV2ZW50ZXJ8fGRldGFpbC5zb3VyY2VFdmVudDtpZihwcmV2ZW50ZXImJnByZXZlbnRlci5wcmV2ZW50RGVmYXVsdCl7cHJldmVudGVyLnByZXZlbnREZWZhdWx0KCk7fX19LHByZXZlbnQ6ZnVuY3Rpb24oZXZOYW1lKXt2YXIgcmVjb2duaXplcj10aGlzLmZpbmRSZWNvZ25pemVyQnlFdmVudChldk5hbWUpO2lmKHJlY29nbml6ZXIuaW5mbyl7cmVjb2duaXplci5pbmZvLnByZXZlbnQ9dHJ1ZTt9fSxyZXNldE1vdXNlQ2FuY2VsbGVyOmZ1bmN0aW9uKCl7aWYoUE9JTlRFUlNUQVRFLm1vdXNlLm1vdXNlSWdub3JlSm9iKXtQT0lOVEVSU1RBVEUubW91c2UubW91c2VJZ25vcmVKb2IuY29tcGxldGUoKTt9fX07R2VzdHVyZXMucmVnaXN0ZXIoe25hbWU6J2Rvd251cCcsZGVwczpbJ21vdXNlZG93bicsJ3RvdWNoc3RhcnQnLCd0b3VjaGVuZCddLGZsb3c6e3N0YXJ0OlsnbW91c2Vkb3duJywndG91Y2hzdGFydCddLGVuZDpbJ21vdXNldXAnLCd0b3VjaGVuZCddfSxlbWl0czpbJ2Rvd24nLCd1cCddLGluZm86e21vdmVmbjpudWxsLHVwZm46bnVsbH0scmVzZXQ6ZnVuY3Rpb24oKXt1bnRyYWNrRG9jdW1lbnQodGhpcy5pbmZvKTt9LG1vdXNlZG93bjpmdW5jdGlvbihlKXtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtyZXR1cm47fQp2YXIgdD1HZXN0dXJlcy5maW5kT3JpZ2luYWxUYXJnZXQoZSk7dmFyIHNlbGY9dGhpczt2YXIgbW92ZWZuPWZ1bmN0aW9uIG1vdmVmbihlKXtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmZpcmUoJ3VwJyx0LGUpO3VudHJhY2tEb2N1bWVudChzZWxmLmluZm8pO319O3ZhciB1cGZuPWZ1bmN0aW9uIHVwZm4oZSl7aWYoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmZpcmUoJ3VwJyx0LGUpO30KdW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7fTt0cmFja0RvY3VtZW50KHRoaXMuaW5mbyxtb3ZlZm4sdXBmbik7dGhpcy5maXJlKCdkb3duJyx0LGUpO30sdG91Y2hzdGFydDpmdW5jdGlvbihlKXt0aGlzLmZpcmUoJ2Rvd24nLEdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChlKSxlLmNoYW5nZWRUb3VjaGVzWzBdLGUpO30sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7dGhpcy5maXJlKCd1cCcsR2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGUpLGUuY2hhbmdlZFRvdWNoZXNbMF0sZSk7fSxmaXJlOmZ1bmN0aW9uKHR5cGUsdGFyZ2V0LGV2ZW50LHByZXZlbnRlcil7R2VzdHVyZXMuZmlyZSh0YXJnZXQsdHlwZSx7eDpldmVudC5jbGllbnRYLHk6ZXZlbnQuY2xpZW50WSxzb3VyY2VFdmVudDpldmVudCxwcmV2ZW50ZXI6cHJldmVudGVyLHByZXZlbnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEdlc3R1cmVzLnByZXZlbnQoZSk7fX0pO319KTtHZXN0dXJlcy5yZWdpc3Rlcih7bmFtZTondHJhY2snLHRvdWNoQWN0aW9uOidub25lJyxkZXBzOlsnbW91c2Vkb3duJywndG91Y2hzdGFydCcsJ3RvdWNobW92ZScsJ3RvdWNoZW5kJ10sZmxvdzp7c3RhcnQ6Wydtb3VzZWRvd24nLCd0b3VjaHN0YXJ0J10sZW5kOlsnbW91c2V1cCcsJ3RvdWNoZW5kJ119LGVtaXRzOlsndHJhY2snXSxpbmZvOnt4OjAseTowLHN0YXRlOidzdGFydCcsc3RhcnRlZDpmYWxzZSxtb3ZlczpbXSxhZGRNb3ZlOmZ1bmN0aW9uKG1vdmUpe2lmKHRoaXMubW92ZXMubGVuZ3RoPlRSQUNLX0xFTkdUSCl7dGhpcy5tb3Zlcy5zaGlmdCgpO30KdGhpcy5tb3Zlcy5wdXNoKG1vdmUpO30sbW92ZWZuOm51bGwsdXBmbjpudWxsLHByZXZlbnQ6ZmFsc2V9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5pbmZvLnN0YXRlPSdzdGFydCc7dGhpcy5pbmZvLnN0YXJ0ZWQ9ZmFsc2U7dGhpcy5pbmZvLm1vdmVzPVtdO3RoaXMuaW5mby54PTA7dGhpcy5pbmZvLnk9MDt0aGlzLmluZm8ucHJldmVudD1mYWxzZTt1bnRyYWNrRG9jdW1lbnQodGhpcy5pbmZvKTt9LGhhc01vdmVkRW5vdWdoOmZ1bmN0aW9uKHgseSl7aWYodGhpcy5pbmZvLnByZXZlbnQpe3JldHVybiBmYWxzZTt9CmlmKHRoaXMuaW5mby5zdGFydGVkKXtyZXR1cm4gdHJ1ZTt9CnZhciBkeD1NYXRoLmFicyh0aGlzLmluZm8ueC14KTt2YXIgZHk9TWF0aC5hYnModGhpcy5pbmZvLnkteSk7cmV0dXJuIGR4Pj1UUkFDS19ESVNUQU5DRXx8ZHk+PVRSQUNLX0RJU1RBTkNFO30sbW91c2Vkb3duOmZ1bmN0aW9uKGUpe2lmKCFoYXNMZWZ0TW91c2VCdXR0b24oZSkpe3JldHVybjt9CnZhciB0PUdlc3R1cmVzLmZpbmRPcmlnaW5hbFRhcmdldChlKTt2YXIgc2VsZj10aGlzO3ZhciBtb3ZlZm49ZnVuY3Rpb24gbW92ZWZuKGUpe3ZhciB4PWUuY2xpZW50WCx5PWUuY2xpZW50WTtpZihzZWxmLmhhc01vdmVkRW5vdWdoKHgseSkpe3NlbGYuaW5mby5zdGF0ZT1zZWxmLmluZm8uc3RhcnRlZD9lLnR5cGU9PT0nbW91c2V1cCc/J2VuZCc6J3RyYWNrJzonc3RhcnQnO2lmKHNlbGYuaW5mby5zdGF0ZT09PSdzdGFydCcpe0dlc3R1cmVzLnByZXZlbnQoJ3RhcCcpO30Kc2VsZi5pbmZvLmFkZE1vdmUoe3g6eCx5Onl9KTtpZighaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXtzZWxmLmluZm8uc3RhdGU9J2VuZCc7dW50cmFja0RvY3VtZW50KHNlbGYuaW5mbyk7fQpzZWxmLmZpcmUodCxlKTtzZWxmLmluZm8uc3RhcnRlZD10cnVlO319O3ZhciB1cGZuPWZ1bmN0aW9uIHVwZm4oZSl7aWYoc2VsZi5pbmZvLnN0YXJ0ZWQpe21vdmVmbihlKTt9CnVudHJhY2tEb2N1bWVudChzZWxmLmluZm8pO307dHJhY2tEb2N1bWVudCh0aGlzLmluZm8sbW92ZWZuLHVwZm4pO3RoaXMuaW5mby54PWUuY2xpZW50WDt0aGlzLmluZm8ueT1lLmNsaWVudFk7fSx0b3VjaHN0YXJ0OmZ1bmN0aW9uKGUpe3ZhciBjdD1lLmNoYW5nZWRUb3VjaGVzWzBdO3RoaXMuaW5mby54PWN0LmNsaWVudFg7dGhpcy5pbmZvLnk9Y3QuY2xpZW50WTt9LHRvdWNobW92ZTpmdW5jdGlvbihlKXt2YXIgdD1HZXN0dXJlcy5maW5kT3JpZ2luYWxUYXJnZXQoZSk7dmFyIGN0PWUuY2hhbmdlZFRvdWNoZXNbMF07dmFyIHg9Y3QuY2xpZW50WCx5PWN0LmNsaWVudFk7aWYodGhpcy5oYXNNb3ZlZEVub3VnaCh4LHkpKXtpZih0aGlzLmluZm8uc3RhdGU9PT0nc3RhcnQnKXtHZXN0dXJlcy5wcmV2ZW50KCd0YXAnKTt9CnRoaXMuaW5mby5hZGRNb3ZlKHt4OngseTp5fSk7dGhpcy5maXJlKHQsY3QpO3RoaXMuaW5mby5zdGF0ZT0ndHJhY2snO3RoaXMuaW5mby5zdGFydGVkPXRydWU7fX0sdG91Y2hlbmQ6ZnVuY3Rpb24oZSl7dmFyIHQ9R2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGUpO3ZhciBjdD1lLmNoYW5nZWRUb3VjaGVzWzBdO2lmKHRoaXMuaW5mby5zdGFydGVkKXt0aGlzLmluZm8uc3RhdGU9J2VuZCc7dGhpcy5pbmZvLmFkZE1vdmUoe3g6Y3QuY2xpZW50WCx5OmN0LmNsaWVudFl9KTt0aGlzLmZpcmUodCxjdCxlKTt9fSxmaXJlOmZ1bmN0aW9uKHRhcmdldCx0b3VjaCxwcmV2ZW50ZXIpe3ZhciBzZWNvbmRsYXN0PXRoaXMuaW5mby5tb3Zlc1t0aGlzLmluZm8ubW92ZXMubGVuZ3RoLTJdO3ZhciBsYXN0bW92ZT10aGlzLmluZm8ubW92ZXNbdGhpcy5pbmZvLm1vdmVzLmxlbmd0aC0xXTt2YXIgZHg9bGFzdG1vdmUueC10aGlzLmluZm8ueDt2YXIgZHk9bGFzdG1vdmUueS10aGlzLmluZm8ueTt2YXIgZGR4LGRkeT0wO2lmKHNlY29uZGxhc3Qpe2RkeD1sYXN0bW92ZS54LXNlY29uZGxhc3QueDtkZHk9bGFzdG1vdmUueS1zZWNvbmRsYXN0Lnk7fQpyZXR1cm4gR2VzdHVyZXMuZmlyZSh0YXJnZXQsJ3RyYWNrJyx7c3RhdGU6dGhpcy5pbmZvLnN0YXRlLHg6dG91Y2guY2xpZW50WCx5OnRvdWNoLmNsaWVudFksZHg6ZHgsZHk6ZHksZGR4OmRkeCxkZHk6ZGR5LHNvdXJjZUV2ZW50OnRvdWNoLHByZXZlbnRlcjpwcmV2ZW50ZXIsaG92ZXI6ZnVuY3Rpb24oKXtyZXR1cm4gR2VzdHVyZXMuZGVlcFRhcmdldEZpbmQodG91Y2guY2xpZW50WCx0b3VjaC5jbGllbnRZKTt9fSk7fX0pO0dlc3R1cmVzLnJlZ2lzdGVyKHtuYW1lOid0YXAnLGRlcHM6Wydtb3VzZWRvd24nLCdjbGljaycsJ3RvdWNoc3RhcnQnLCd0b3VjaGVuZCddLGZsb3c6e3N0YXJ0OlsnbW91c2Vkb3duJywndG91Y2hzdGFydCddLGVuZDpbJ2NsaWNrJywndG91Y2hlbmQnXX0sZW1pdHM6Wyd0YXAnXSxpbmZvOnt4Ok5hTix5Ok5hTixwcmV2ZW50OmZhbHNlfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuaW5mby54PU5hTjt0aGlzLmluZm8ueT1OYU47dGhpcy5pbmZvLnByZXZlbnQ9ZmFsc2U7fSxzYXZlOmZ1bmN0aW9uKGUpe3RoaXMuaW5mby54PWUuY2xpZW50WDt0aGlzLmluZm8ueT1lLmNsaWVudFk7fSxtb3VzZWRvd246ZnVuY3Rpb24oZSl7aWYoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXt0aGlzLnNhdmUoZSk7fX0sY2xpY2s6ZnVuY3Rpb24oZSl7aWYoaGFzTGVmdE1vdXNlQnV0dG9uKGUpKXt0aGlzLmZvcndhcmQoZSk7fX0sdG91Y2hzdGFydDpmdW5jdGlvbihlKXt0aGlzLnNhdmUoZS5jaGFuZ2VkVG91Y2hlc1swXSxlKTt9LHRvdWNoZW5kOmZ1bmN0aW9uKGUpe3RoaXMuZm9yd2FyZChlLmNoYW5nZWRUb3VjaGVzWzBdLGUpO30sZm9yd2FyZDpmdW5jdGlvbihlLHByZXZlbnRlcil7dmFyIGR4PU1hdGguYWJzKGUuY2xpZW50WC10aGlzLmluZm8ueCk7dmFyIGR5PU1hdGguYWJzKGUuY2xpZW50WS10aGlzLmluZm8ueSk7dmFyIHQ9R2VzdHVyZXMuZmluZE9yaWdpbmFsVGFyZ2V0KGUpO2lmKGlzTmFOKGR4KXx8aXNOYU4oZHkpfHxkeDw9VEFQX0RJU1RBTkNFJiZkeTw9VEFQX0RJU1RBTkNFfHxpc1N5bnRoZXRpY0NsaWNrKGUpKXtpZighdGhpcy5pbmZvLnByZXZlbnQpe0dlc3R1cmVzLmZpcmUodCwndGFwJyx7eDplLmNsaWVudFgseTplLmNsaWVudFksc291cmNlRXZlbnQ6ZSxwcmV2ZW50ZXI6cHJldmVudGVyfSk7fX19fSk7dmFyIERJUkVDVElPTl9NQVA9e3g6J3Bhbi14Jyx5OidwYW4teScsbm9uZTonbm9uZScsYWxsOidhdXRvJ307UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfc2V0dXBHZXN0dXJlczpmdW5jdGlvbigpe3RoaXMuX19wb2x5bWVyR2VzdHVyZXM9bnVsbDt9LF9saXN0ZW46ZnVuY3Rpb24obm9kZSxldmVudE5hbWUsaGFuZGxlcil7aWYoR2VzdHVyZXMuZ2VzdHVyZXNbZXZlbnROYW1lXSl7R2VzdHVyZXMuYWRkKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpO31lbHNle25vZGUuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsaGFuZGxlcik7fX0sX3VubGlzdGVuOmZ1bmN0aW9uKG5vZGUsZXZlbnROYW1lLGhhbmRsZXIpe2lmKEdlc3R1cmVzLmdlc3R1cmVzW2V2ZW50TmFtZV0pe0dlc3R1cmVzLnJlbW92ZShub2RlLGV2ZW50TmFtZSxoYW5kbGVyKTt9ZWxzZXtub2RlLnJlbW92ZUV2ZW50TGlzdGVuZXIoZXZlbnROYW1lLGhhbmRsZXIpO319LHNldFNjcm9sbERpcmVjdGlvbjpmdW5jdGlvbihkaXJlY3Rpb24sbm9kZSl7bm9kZT1ub2RlfHx0aGlzO0dlc3R1cmVzLnNldFRvdWNoQWN0aW9uKG5vZGUsRElSRUNUSU9OX01BUFtkaXJlY3Rpb25dfHwnYXV0bycpO319KTtQb2x5bWVyLkdlc3R1cmVzPUdlc3R1cmVzO30oKSk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7JCQ6ZnVuY3Rpb24oc2xjdHIpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3Ioc2xjdHIpO30sdG9nZ2xlQ2xhc3M6ZnVuY3Rpb24obmFtZSxib29sLG5vZGUpe25vZGU9bm9kZXx8dGhpcztpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtib29sPSFub2RlLmNsYXNzTGlzdC5jb250YWlucyhuYW1lKTt9CmlmKGJvb2wpe1BvbHltZXIuZG9tKG5vZGUpLmNsYXNzTGlzdC5hZGQobmFtZSk7fWVsc2V7UG9seW1lci5kb20obm9kZSkuY2xhc3NMaXN0LnJlbW92ZShuYW1lKTt9fSx0b2dnbGVBdHRyaWJ1dGU6ZnVuY3Rpb24obmFtZSxib29sLG5vZGUpe25vZGU9bm9kZXx8dGhpcztpZihhcmd1bWVudHMubGVuZ3RoPT0xKXtib29sPSFub2RlLmhhc0F0dHJpYnV0ZShuYW1lKTt9CmlmKGJvb2wpe1BvbHltZXIuZG9tKG5vZGUpLnNldEF0dHJpYnV0ZShuYW1lLCcnKTt9ZWxzZXtQb2x5bWVyLmRvbShub2RlKS5yZW1vdmVBdHRyaWJ1dGUobmFtZSk7fX0sY2xhc3NGb2xsb3dzOmZ1bmN0aW9uKG5hbWUsdG9FbGVtZW50LGZyb21FbGVtZW50KXtpZihmcm9tRWxlbWVudCl7UG9seW1lci5kb20oZnJvbUVsZW1lbnQpLmNsYXNzTGlzdC5yZW1vdmUobmFtZSk7fQppZih0b0VsZW1lbnQpe1BvbHltZXIuZG9tKHRvRWxlbWVudCkuY2xhc3NMaXN0LmFkZChuYW1lKTt9fSxhdHRyaWJ1dGVGb2xsb3dzOmZ1bmN0aW9uKG5hbWUsdG9FbGVtZW50LGZyb21FbGVtZW50KXtpZihmcm9tRWxlbWVudCl7UG9seW1lci5kb20oZnJvbUVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZShuYW1lKTt9CmlmKHRvRWxlbWVudCl7UG9seW1lci5kb20odG9FbGVtZW50KS5zZXRBdHRyaWJ1dGUobmFtZSwnJyk7fX0sZ2V0RWZmZWN0aXZlQ2hpbGROb2RlczpmdW5jdGlvbigpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5nZXRFZmZlY3RpdmVDaGlsZE5vZGVzKCk7fSxnZXRFZmZlY3RpdmVDaGlsZHJlbjpmdW5jdGlvbigpe3ZhciBsaXN0PVBvbHltZXIuZG9tKHRoaXMpLmdldEVmZmVjdGl2ZUNoaWxkTm9kZXMoKTtyZXR1cm4gbGlzdC5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG4ubm9kZVR5cGU9PT1Ob2RlLkVMRU1FTlRfTk9ERTt9KTt9LGdldEVmZmVjdGl2ZVRleHRDb250ZW50OmZ1bmN0aW9uKCl7dmFyIGNuPXRoaXMuZ2V0RWZmZWN0aXZlQ2hpbGROb2RlcygpO3ZhciB0Yz1bXTtmb3IodmFyIGk9MCxjO2M9Y25baV07aSsrKXtpZihjLm5vZGVUeXBlIT09Tm9kZS5DT01NRU5UX05PREUpe3RjLnB1c2goUG9seW1lci5kb20oYykudGV4dENvbnRlbnQpO319CnJldHVybiB0Yy5qb2luKCcnKTt9LHF1ZXJ5RWZmZWN0aXZlQ2hpbGRyZW46ZnVuY3Rpb24oc2xjdHIpe3ZhciBlJD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeURpc3RyaWJ1dGVkRWxlbWVudHMoc2xjdHIpO3JldHVybiBlJCYmZSRbMF07fSxxdWVyeUFsbEVmZmVjdGl2ZUNoaWxkcmVuOmZ1bmN0aW9uKHNsY3RyKXtyZXR1cm4gUG9seW1lci5kb20odGhpcykucXVlcnlEaXN0cmlidXRlZEVsZW1lbnRzKHNsY3RyKTt9LGdldENvbnRlbnRDaGlsZE5vZGVzOmZ1bmN0aW9uKHNsY3RyKXt2YXIgY29udGVudD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpLnF1ZXJ5U2VsZWN0b3Ioc2xjdHJ8fCdjb250ZW50Jyk7cmV0dXJuIGNvbnRlbnQ/UG9seW1lci5kb20oY29udGVudCkuZ2V0RGlzdHJpYnV0ZWROb2RlcygpOltdO30sZ2V0Q29udGVudENoaWxkcmVuOmZ1bmN0aW9uKHNsY3RyKXtyZXR1cm4gdGhpcy5nZXRDb250ZW50Q2hpbGROb2RlcyhzbGN0cikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREU7fSk7fSxmaXJlOmZ1bmN0aW9uKHR5cGUsZGV0YWlsLG9wdGlvbnMpe29wdGlvbnM9b3B0aW9uc3x8UG9seW1lci5ub2I7dmFyIG5vZGU9b3B0aW9ucy5ub2RlfHx0aGlzO2RldGFpbD1kZXRhaWw9PT1udWxsfHxkZXRhaWw9PT11bmRlZmluZWQ/e306ZGV0YWlsO3ZhciBidWJibGVzPW9wdGlvbnMuYnViYmxlcz09PXVuZGVmaW5lZD90cnVlOm9wdGlvbnMuYnViYmxlczt2YXIgY2FuY2VsYWJsZT1Cb29sZWFuKG9wdGlvbnMuY2FuY2VsYWJsZSk7dmFyIHVzZUNhY2hlPW9wdGlvbnMuX3VzZUNhY2hlO3ZhciBldmVudD10aGlzLl9nZXRFdmVudCh0eXBlLGJ1YmJsZXMsY2FuY2VsYWJsZSx1c2VDYWNoZSk7ZXZlbnQuZGV0YWlsPWRldGFpbDtpZih1c2VDYWNoZSl7dGhpcy5fX2V2ZW50Q2FjaGVbdHlwZV09bnVsbDt9Cm5vZGUuZGlzcGF0Y2hFdmVudChldmVudCk7aWYodXNlQ2FjaGUpe3RoaXMuX19ldmVudENhY2hlW3R5cGVdPWV2ZW50O30KcmV0dXJuIGV2ZW50O30sX19ldmVudENhY2hlOnt9LF9nZXRFdmVudDpmdW5jdGlvbih0eXBlLGJ1YmJsZXMsY2FuY2VsYWJsZSx1c2VDYWNoZSl7dmFyIGV2ZW50PXVzZUNhY2hlJiZ0aGlzLl9fZXZlbnRDYWNoZVt0eXBlXTtpZighZXZlbnR8fChldmVudC5idWJibGVzIT1idWJibGVzfHxldmVudC5jYW5jZWxhYmxlIT1jYW5jZWxhYmxlKSl7ZXZlbnQ9bmV3IEV2ZW50KHR5cGUse2J1YmJsZXM6Qm9vbGVhbihidWJibGVzKSxjYW5jZWxhYmxlOmNhbmNlbGFibGV9KTt9CnJldHVybiBldmVudDt9LGFzeW5jOmZ1bmN0aW9uKGNhbGxiYWNrLHdhaXRUaW1lKXt2YXIgc2VsZj10aGlzO3JldHVybiBQb2x5bWVyLkFzeW5jLnJ1bihmdW5jdGlvbigpe2NhbGxiYWNrLmNhbGwoc2VsZik7fSx3YWl0VGltZSk7fSxjYW5jZWxBc3luYzpmdW5jdGlvbihoYW5kbGUpe1BvbHltZXIuQXN5bmMuY2FuY2VsKGhhbmRsZSk7fSxhcnJheURlbGV0ZTpmdW5jdGlvbihwYXRoLGl0ZW0pe3ZhciBpbmRleDtpZihBcnJheS5pc0FycmF5KHBhdGgpKXtpbmRleD1wYXRoLmluZGV4T2YoaXRlbSk7aWYoaW5kZXg+PTApe3JldHVybiBwYXRoLnNwbGljZShpbmRleCwxKTt9fWVsc2V7dmFyIGFycj10aGlzLl9nZXQocGF0aCk7aW5kZXg9YXJyLmluZGV4T2YoaXRlbSk7aWYoaW5kZXg+PTApe3JldHVybiB0aGlzLnNwbGljZShwYXRoLGluZGV4LDEpO319fSx0cmFuc2Zvcm06ZnVuY3Rpb24odHJhbnNmb3JtLG5vZGUpe25vZGU9bm9kZXx8dGhpcztub2RlLnN0eWxlLndlYmtpdFRyYW5zZm9ybT10cmFuc2Zvcm07bm9kZS5zdHlsZS50cmFuc2Zvcm09dHJhbnNmb3JtO30sdHJhbnNsYXRlM2Q6ZnVuY3Rpb24oeCx5LHosbm9kZSl7bm9kZT1ub2RlfHx0aGlzO3RoaXMudHJhbnNmb3JtKCd0cmFuc2xhdGUzZCgnK3grJywnK3krJywnK3orJyknLG5vZGUpO30saW1wb3J0SHJlZjpmdW5jdGlvbihocmVmLG9ubG9hZCxvbmVycm9yLG9wdEFzeW5jKXt2YXIgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaW5rJyk7bGluay5yZWw9J2ltcG9ydCc7bGluay5ocmVmPWhyZWY7dmFyIGxpc3Q9UG9seW1lci5CYXNlLmltcG9ydEhyZWYuaW1wb3J0ZWQ9UG9seW1lci5CYXNlLmltcG9ydEhyZWYuaW1wb3J0ZWR8fHt9O3ZhciBjYWNoZWQ9bGlzdFtsaW5rLmhyZWZdO3ZhciBpbXBydD1jYWNoZWR8fGxpbms7dmFyIHNlbGY9dGhpczt2YXIgbG9hZExpc3RlbmVyPWZ1bmN0aW9uKGUpe2UudGFyZ2V0Ll9fZmlyZWRMb2FkPXRydWU7ZS50YXJnZXQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbG9hZCcsbG9hZExpc3RlbmVyKTtlLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdlcnJvcicsZXJyb3JMaXN0ZW5lcik7cmV0dXJuIG9ubG9hZC5jYWxsKHNlbGYsZSk7fTt2YXIgZXJyb3JMaXN0ZW5lcj1mdW5jdGlvbihlKXtlLnRhcmdldC5fX2ZpcmVkRXJyb3I9dHJ1ZTtlLnRhcmdldC5yZW1vdmVFdmVudExpc3RlbmVyKCdsb2FkJyxsb2FkTGlzdGVuZXIpO2UudGFyZ2V0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2Vycm9yJyxlcnJvckxpc3RlbmVyKTtyZXR1cm4gb25lcnJvci5jYWxsKHNlbGYsZSk7fTtpZihvbmxvYWQpe2ltcHJ0LmFkZEV2ZW50TGlzdGVuZXIoJ2xvYWQnLGxvYWRMaXN0ZW5lcik7fQppZihvbmVycm9yKXtpbXBydC5hZGRFdmVudExpc3RlbmVyKCdlcnJvcicsZXJyb3JMaXN0ZW5lcik7fQppZihjYWNoZWQpe2lmKGNhY2hlZC5fX2ZpcmVkTG9hZCl7Y2FjaGVkLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdsb2FkJykpO30KaWYoY2FjaGVkLl9fZmlyZWRFcnJvcil7Y2FjaGVkLmRpc3BhdGNoRXZlbnQobmV3IEV2ZW50KCdlcnJvcicpKTt9fWVsc2V7bGlzdFtsaW5rLmhyZWZdPWxpbms7b3B0QXN5bmM9Qm9vbGVhbihvcHRBc3luYyk7aWYob3B0QXN5bmMpe2xpbmsuc2V0QXR0cmlidXRlKCdhc3luYycsJycpO30KZG9jdW1lbnQuaGVhZC5hcHBlbmRDaGlsZChsaW5rKTt9CnJldHVybiBpbXBydDt9LGNyZWF0ZTpmdW5jdGlvbih0YWcscHJvcHMpe3ZhciBlbHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWcpO2lmKHByb3BzKXtmb3IodmFyIG4gaW4gcHJvcHMpe2VsdFtuXT1wcm9wc1tuXTt9fQpyZXR1cm4gZWx0O30saXNMaWdodERlc2NlbmRhbnQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIHRoaXMhPT1ub2RlJiZ0aGlzLmNvbnRhaW5zKG5vZGUpJiZQb2x5bWVyLmRvbSh0aGlzKS5nZXRPd25lclJvb3QoKT09PVBvbHltZXIuZG9tKG5vZGUpLmdldE93bmVyUm9vdCgpO30saXNMb2NhbERlc2NlbmRhbnQ6ZnVuY3Rpb24obm9kZSl7cmV0dXJuIHRoaXMucm9vdD09PVBvbHltZXIuZG9tKG5vZGUpLmdldE93bmVyUm9vdCgpO319KTtpZighUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDdXN0b21FbGVtZW50cyl7dmFyIGltcG9ydEhyZWY9UG9seW1lci5CYXNlLmltcG9ydEhyZWY7UG9seW1lci5CYXNlLmltcG9ydEhyZWY9ZnVuY3Rpb24oaHJlZixvbmxvYWQsb25lcnJvcixvcHRBc3luYyl7Q3VzdG9tRWxlbWVudHMucmVhZHk9ZmFsc2U7dmFyIGxvYWRGbj1mdW5jdGlvbihlKXtDdXN0b21FbGVtZW50cy51cGdyYWRlRG9jdW1lbnRUcmVlKGRvY3VtZW50KTtDdXN0b21FbGVtZW50cy5yZWFkeT10cnVlO2lmKG9ubG9hZCl7cmV0dXJuIG9ubG9hZC5jYWxsKHRoaXMsZSk7fX07cmV0dXJuIGltcG9ydEhyZWYuY2FsbCh0aGlzLGhyZWYsbG9hZEZuLG9uZXJyb3Isb3B0QXN5bmMpO307fX0oKSk7UG9seW1lci5CaW5kPXtwcmVwYXJlTW9kZWw6ZnVuY3Rpb24obW9kZWwpe1BvbHltZXIuQmFzZS5taXhpbihtb2RlbCx0aGlzLl9tb2RlbEFwaSk7fSxfbW9kZWxBcGk6e19ub3RpZnlDaGFuZ2U6ZnVuY3Rpb24oc291cmNlLGV2ZW50LHZhbHVlKXt2YWx1ZT12YWx1ZT09PXVuZGVmaW5lZD90aGlzW3NvdXJjZV06dmFsdWU7ZXZlbnQ9ZXZlbnR8fFBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2Uoc291cmNlKSsnLWNoYW5nZWQnO3RoaXMuZmlyZShldmVudCx7dmFsdWU6dmFsdWV9LHtidWJibGVzOmZhbHNlLGNhbmNlbGFibGU6ZmFsc2UsX3VzZUNhY2hlOlBvbHltZXIuU2V0dGluZ3MuZXZlbnREYXRhQ2FjaGV8fCFQb2x5bWVyLlNldHRpbmdzLmlzSUV9KTt9LF9wcm9wZXJ0eVNldHRlcjpmdW5jdGlvbihwcm9wZXJ0eSx2YWx1ZSxlZmZlY3RzLGZyb21BYm92ZSl7dmFyIG9sZD10aGlzLl9fZGF0YV9fW3Byb3BlcnR5XTtpZihvbGQhPT12YWx1ZSYmKG9sZD09PW9sZHx8dmFsdWU9PT12YWx1ZSkpe3RoaXMuX19kYXRhX19bcHJvcGVydHldPXZhbHVlO2lmKHR5cGVvZiB2YWx1ZT09J29iamVjdCcpe3RoaXMuX2NsZWFyUGF0aChwcm9wZXJ0eSk7fQppZih0aGlzLl9wcm9wZXJ0eUNoYW5nZWQpe3RoaXMuX3Byb3BlcnR5Q2hhbmdlZChwcm9wZXJ0eSx2YWx1ZSxvbGQpO30KaWYoZWZmZWN0cyl7dGhpcy5fZWZmZWN0RWZmZWN0cyhwcm9wZXJ0eSx2YWx1ZSxlZmZlY3RzLG9sZCxmcm9tQWJvdmUpO319CnJldHVybiBvbGQ7fSxfX3NldFByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlLHF1aWV0LG5vZGUpe25vZGU9bm9kZXx8dGhpczt2YXIgZWZmZWN0cz1ub2RlLl9wcm9wZXJ0eUVmZmVjdHMmJm5vZGUuX3Byb3BlcnR5RWZmZWN0c1twcm9wZXJ0eV07aWYoZWZmZWN0cyl7bm9kZS5fcHJvcGVydHlTZXR0ZXIocHJvcGVydHksdmFsdWUsZWZmZWN0cyxxdWlldCk7fWVsc2UgaWYobm9kZVtwcm9wZXJ0eV0hPT12YWx1ZSl7bm9kZVtwcm9wZXJ0eV09dmFsdWU7fX0sX2VmZmVjdEVmZmVjdHM6ZnVuY3Rpb24ocHJvcGVydHksdmFsdWUsZWZmZWN0cyxvbGQsZnJvbUFib3ZlKXtmb3IodmFyIGk9MCxsPWVmZmVjdHMubGVuZ3RoLGZ4O2k8bCYmKGZ4PWVmZmVjdHNbaV0pO2krKyl7ZnguZm4uY2FsbCh0aGlzLHByb3BlcnR5LHRoaXNbcHJvcGVydHldLGZ4LmVmZmVjdCxvbGQsZnJvbUFib3ZlKTt9fSxfY2xlYXJQYXRoOmZ1bmN0aW9uKHBhdGgpe2Zvcih2YXIgcHJvcCBpbiB0aGlzLl9fZGF0YV9fKXtpZihQb2x5bWVyLlBhdGguaXNEZXNjZW5kYW50KHBhdGgscHJvcCkpe3RoaXMuX19kYXRhX19bcHJvcF09dW5kZWZpbmVkO319fX0sZW5zdXJlUHJvcGVydHlFZmZlY3RzOmZ1bmN0aW9uKG1vZGVsLHByb3BlcnR5KXtpZighbW9kZWwuX3Byb3BlcnR5RWZmZWN0cyl7bW9kZWwuX3Byb3BlcnR5RWZmZWN0cz17fTt9CnZhciBmeD1tb2RlbC5fcHJvcGVydHlFZmZlY3RzW3Byb3BlcnR5XTtpZighZngpe2Z4PW1vZGVsLl9wcm9wZXJ0eUVmZmVjdHNbcHJvcGVydHldPVtdO30KcmV0dXJuIGZ4O30sYWRkUHJvcGVydHlFZmZlY3Q6ZnVuY3Rpb24obW9kZWwscHJvcGVydHksa2luZCxlZmZlY3Qpe3ZhciBmeD10aGlzLmVuc3VyZVByb3BlcnR5RWZmZWN0cyhtb2RlbCxwcm9wZXJ0eSk7dmFyIHByb3BFZmZlY3Q9e2tpbmQ6a2luZCxlZmZlY3Q6ZWZmZWN0LGZuOlBvbHltZXIuQmluZFsnXycra2luZCsnRWZmZWN0J119O2Z4LnB1c2gocHJvcEVmZmVjdCk7cmV0dXJuIHByb3BFZmZlY3Q7fSxjcmVhdGVCaW5kaW5nczpmdW5jdGlvbihtb2RlbCl7dmFyIGZ4JD1tb2RlbC5fcHJvcGVydHlFZmZlY3RzO2lmKGZ4JCl7Zm9yKHZhciBuIGluIGZ4JCl7dmFyIGZ4PWZ4JFtuXTtmeC5zb3J0KHRoaXMuX3NvcnRQcm9wZXJ0eUVmZmVjdHMpO3RoaXMuX2NyZWF0ZUFjY2Vzc29ycyhtb2RlbCxuLGZ4KTt9fX0sX3NvcnRQcm9wZXJ0eUVmZmVjdHM6ZnVuY3Rpb24oKXt2YXIgRUZGRUNUX09SREVSPXsnY29tcHV0ZSc6MCwnYW5ub3RhdGlvbic6MSwnYW5ub3RhdGVkQ29tcHV0YXRpb24nOjIsJ3JlZmxlY3QnOjMsJ25vdGlmeSc6NCwnb2JzZXJ2ZXInOjUsJ2NvbXBsZXhPYnNlcnZlcic6NiwnZnVuY3Rpb24nOjd9O3JldHVybiBmdW5jdGlvbihhLGIpe3JldHVybiBFRkZFQ1RfT1JERVJbYS5raW5kXS1FRkZFQ1RfT1JERVJbYi5raW5kXTt9O30oKSxfY3JlYXRlQWNjZXNzb3JzOmZ1bmN0aW9uKG1vZGVsLHByb3BlcnR5LGVmZmVjdHMpe3ZhciBkZWZ1bj17Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19kYXRhX19bcHJvcGVydHldO319O3ZhciBzZXR0ZXI9ZnVuY3Rpb24odmFsdWUpe3RoaXMuX3Byb3BlcnR5U2V0dGVyKHByb3BlcnR5LHZhbHVlLGVmZmVjdHMpO307dmFyIGluZm89bW9kZWwuZ2V0UHJvcGVydHlJbmZvJiZtb2RlbC5nZXRQcm9wZXJ0eUluZm8ocHJvcGVydHkpO2lmKGluZm8mJmluZm8ucmVhZE9ubHkpe2lmKCFpbmZvLmNvbXB1dGVkKXttb2RlbFsnX3NldCcrdGhpcy51cHBlcihwcm9wZXJ0eSldPXNldHRlcjt9fWVsc2V7ZGVmdW4uc2V0PXNldHRlcjt9Ck9iamVjdC5kZWZpbmVQcm9wZXJ0eShtb2RlbCxwcm9wZXJ0eSxkZWZ1bik7fSx1cHBlcjpmdW5jdGlvbihuYW1lKXtyZXR1cm4gbmFtZVswXS50b1VwcGVyQ2FzZSgpK25hbWUuc3Vic3RyaW5nKDEpO30sX2FkZEFubm90YXRlZExpc3RlbmVyOmZ1bmN0aW9uKG1vZGVsLGluZGV4LHByb3BlcnR5LHBhdGgsZXZlbnQsbmVnYXRlZCl7aWYoIW1vZGVsLl9iaW5kTGlzdGVuZXJzKXttb2RlbC5fYmluZExpc3RlbmVycz1bXTt9CnZhciBmbj10aGlzLl9ub3RlZExpc3RlbmVyRmFjdG9yeShwcm9wZXJ0eSxwYXRoLFBvbHltZXIuUGF0aC5pc0RlZXAocGF0aCksbmVnYXRlZCk7dmFyIGV2ZW50TmFtZT1ldmVudHx8UG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShwcm9wZXJ0eSkrJy1jaGFuZ2VkJzttb2RlbC5fYmluZExpc3RlbmVycy5wdXNoKHtpbmRleDppbmRleCxwcm9wZXJ0eTpwcm9wZXJ0eSxwYXRoOnBhdGgsY2hhbmdlZEZuOmZuLGV2ZW50OmV2ZW50TmFtZX0pO30sX2lzRXZlbnRCb2d1czpmdW5jdGlvbihlLHRhcmdldCl7cmV0dXJuIGUucGF0aCYmZS5wYXRoWzBdIT09dGFyZ2V0O30sX25vdGVkTGlzdGVuZXJGYWN0b3J5OmZ1bmN0aW9uKHByb3BlcnR5LHBhdGgsaXNTdHJ1Y3R1cmVkLG5lZ2F0ZWQpe3JldHVybiBmdW5jdGlvbih0YXJnZXQsdmFsdWUsdGFyZ2V0UGF0aCl7aWYodGFyZ2V0UGF0aCl7dmFyIG5ld1BhdGg9UG9seW1lci5QYXRoLnRyYW5zbGF0ZShwcm9wZXJ0eSxwYXRoLHRhcmdldFBhdGgpO3RoaXMuX25vdGlmeVBhdGgobmV3UGF0aCx2YWx1ZSk7fWVsc2V7dmFsdWU9dGFyZ2V0W3Byb3BlcnR5XTtpZihuZWdhdGVkKXt2YWx1ZT0hdmFsdWU7fQppZighaXNTdHJ1Y3R1cmVkKXt0aGlzW3BhdGhdPXZhbHVlO31lbHNle2lmKHRoaXMuX19kYXRhX19bcGF0aF0hPXZhbHVlKXt0aGlzLnNldChwYXRoLHZhbHVlKTt9fX19O30scHJlcGFyZUluc3RhbmNlOmZ1bmN0aW9uKGluc3Qpe2luc3QuX19kYXRhX189T2JqZWN0LmNyZWF0ZShudWxsKTt9LHNldHVwQmluZExpc3RlbmVyczpmdW5jdGlvbihpbnN0KXt2YXIgYiQ9aW5zdC5fYmluZExpc3RlbmVycztmb3IodmFyIGk9MCxsPWIkLmxlbmd0aCxpbmZvO2k8bCYmKGluZm89YiRbaV0pO2krKyl7dmFyIG5vZGU9aW5zdC5fbm9kZXNbaW5mby5pbmRleF07dGhpcy5fYWRkTm90aWZ5TGlzdGVuZXIobm9kZSxpbnN0LGluZm8uZXZlbnQsaW5mby5jaGFuZ2VkRm4pO319LF9hZGROb3RpZnlMaXN0ZW5lcjpmdW5jdGlvbihlbGVtZW50LGNvbnRleHQsZXZlbnQsY2hhbmdlZEZuKXtlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoZXZlbnQsZnVuY3Rpb24oZSl7cmV0dXJuIGNvbnRleHQuX25vdGlmeUxpc3RlbmVyKGNoYW5nZWRGbixlKTt9KTt9fTtQb2x5bWVyLkJhc2UubWl4aW4oUG9seW1lci5CaW5kLHtfc2hvdWxkQWRkTGlzdGVuZXI6ZnVuY3Rpb24oZWZmZWN0KXtyZXR1cm4gZWZmZWN0Lm5hbWUmJmVmZmVjdC5raW5kIT0nYXR0cmlidXRlJyYmZWZmZWN0LmtpbmQhPSd0ZXh0JyYmIWVmZmVjdC5pc0NvbXBvdW5kJiZlZmZlY3QucGFydHNbMF0ubW9kZT09PSd7Jzt9LF9hbm5vdGF0aW9uRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qpe2lmKHNvdXJjZSE9ZWZmZWN0LnZhbHVlKXt2YWx1ZT10aGlzLl9nZXQoZWZmZWN0LnZhbHVlKTt0aGlzLl9fZGF0YV9fW2VmZmVjdC52YWx1ZV09dmFsdWU7fQp0aGlzLl9hcHBseUVmZmVjdFZhbHVlKGVmZmVjdCx2YWx1ZSk7fSxfcmVmbGVjdEVmZmVjdDpmdW5jdGlvbihzb3VyY2UsdmFsdWUsZWZmZWN0KXt0aGlzLnJlZmxlY3RQcm9wZXJ0eVRvQXR0cmlidXRlKHNvdXJjZSxlZmZlY3QuYXR0cmlidXRlLHZhbHVlKTt9LF9ub3RpZnlFZmZlY3Q6ZnVuY3Rpb24oc291cmNlLHZhbHVlLGVmZmVjdCxvbGQsZnJvbUFib3ZlKXtpZighZnJvbUFib3ZlKXt0aGlzLl9ub3RpZnlDaGFuZ2Uoc291cmNlLGVmZmVjdC5ldmVudCx2YWx1ZSk7fX0sX2Z1bmN0aW9uRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxmbixvbGQsZnJvbUFib3ZlKXtmbi5jYWxsKHRoaXMsc291cmNlLHZhbHVlLG9sZCxmcm9tQWJvdmUpO30sX29ic2VydmVyRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qsb2xkKXt2YXIgZm49dGhpc1tlZmZlY3QubWV0aG9kXTtpZihmbil7Zm4uY2FsbCh0aGlzLHZhbHVlLG9sZCk7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfb2JzZXJ2ZXJFZmZlY3QnLCdvYnNlcnZlciBtZXRob2QgYCcrZWZmZWN0Lm1ldGhvZCsnYCBub3QgZGVmaW5lZCcpKTt9fSxfY29tcGxleE9ic2VydmVyRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qpe3ZhciBmbj10aGlzW2VmZmVjdC5tZXRob2RdO2lmKGZuKXt2YXIgYXJncz1Qb2x5bWVyLkJpbmQuX21hcnNoYWxBcmdzKHRoaXMuX19kYXRhX18sZWZmZWN0LHNvdXJjZSx2YWx1ZSk7aWYoYXJncyl7Zm4uYXBwbHkodGhpcyxhcmdzKTt9fWVsc2UgaWYoZWZmZWN0LmR5bmFtaWNGbil7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfY29tcGxleE9ic2VydmVyRWZmZWN0Jywnb2JzZXJ2ZXIgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX2NvbXB1dGVFZmZlY3Q6ZnVuY3Rpb24oc291cmNlLHZhbHVlLGVmZmVjdCl7dmFyIGZuPXRoaXNbZWZmZWN0Lm1ldGhvZF07aWYoZm4pe3ZhciBhcmdzPVBvbHltZXIuQmluZC5fbWFyc2hhbEFyZ3ModGhpcy5fX2RhdGFfXyxlZmZlY3Qsc291cmNlLHZhbHVlKTtpZihhcmdzKXt2YXIgY29tcHV0ZWR2YWx1ZT1mbi5hcHBseSh0aGlzLGFyZ3MpO3RoaXMuX19zZXRQcm9wZXJ0eShlZmZlY3QubmFtZSxjb21wdXRlZHZhbHVlKTt9fWVsc2UgaWYoZWZmZWN0LmR5bmFtaWNGbil7fWVsc2V7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfY29tcHV0ZUVmZmVjdCcsJ2NvbXB1dGUgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX2Fubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0OmZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxlZmZlY3Qpe3ZhciBjb21wdXRlZEhvc3Q9dGhpcy5fcm9vdERhdGFIb3N0fHx0aGlzO3ZhciBmbj1jb21wdXRlZEhvc3RbZWZmZWN0Lm1ldGhvZF07aWYoZm4pe3ZhciBhcmdzPVBvbHltZXIuQmluZC5fbWFyc2hhbEFyZ3ModGhpcy5fX2RhdGFfXyxlZmZlY3Qsc291cmNlLHZhbHVlKTtpZihhcmdzKXt2YXIgY29tcHV0ZWR2YWx1ZT1mbi5hcHBseShjb21wdXRlZEhvc3QsYXJncyk7dGhpcy5fYXBwbHlFZmZlY3RWYWx1ZShlZmZlY3QsY29tcHV0ZWR2YWx1ZSk7fX1lbHNlIGlmKGVmZmVjdC5keW5hbWljRm4pe31lbHNle2NvbXB1dGVkSG9zdC5fd2Fybihjb21wdXRlZEhvc3QuX2xvZ2YoJ19hbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdCcsJ2NvbXB1dGUgbWV0aG9kIGAnK2VmZmVjdC5tZXRob2QrJ2Agbm90IGRlZmluZWQnKSk7fX0sX21hcnNoYWxBcmdzOmZ1bmN0aW9uKG1vZGVsLGVmZmVjdCxwYXRoLHZhbHVlKXt2YXIgdmFsdWVzPVtdO3ZhciBhcmdzPWVmZmVjdC5hcmdzO3ZhciBiYWlsb3V0RWFybHk9YXJncy5sZW5ndGg+MXx8ZWZmZWN0LmR5bmFtaWNGbjtmb3IodmFyIGk9MCxsPWFyZ3MubGVuZ3RoO2k8bDtpKyspe3ZhciBhcmc9YXJnc1tpXTt2YXIgbmFtZT1hcmcubmFtZTt2YXIgdjtpZihhcmcubGl0ZXJhbCl7dj1hcmcudmFsdWU7fWVsc2UgaWYocGF0aD09PW5hbWUpe3Y9dmFsdWU7fWVsc2V7dj1tb2RlbFtuYW1lXTtpZih2PT09dW5kZWZpbmVkJiZhcmcuc3RydWN0dXJlZCl7dj1Qb2x5bWVyLkJhc2UuX2dldChuYW1lLG1vZGVsKTt9fQppZihiYWlsb3V0RWFybHkmJnY9PT11bmRlZmluZWQpe3JldHVybjt9CmlmKGFyZy53aWxkY2FyZCl7dmFyIG1hdGNoZXM9UG9seW1lci5QYXRoLmlzQW5jZXN0b3IocGF0aCxuYW1lKTt2YWx1ZXNbaV09e3BhdGg6bWF0Y2hlcz9wYXRoOm5hbWUsdmFsdWU6bWF0Y2hlcz92YWx1ZTp2LGJhc2U6dn07fWVsc2V7dmFsdWVzW2ldPXY7fX0KcmV0dXJuIHZhbHVlczt9fSk7UG9seW1lci5CYXNlLl9hZGRGZWF0dXJlKHtfYWRkUHJvcGVydHlFZmZlY3Q6ZnVuY3Rpb24ocHJvcGVydHksa2luZCxlZmZlY3Qpe3ZhciBwcm9wPVBvbHltZXIuQmluZC5hZGRQcm9wZXJ0eUVmZmVjdCh0aGlzLHByb3BlcnR5LGtpbmQsZWZmZWN0KTtwcm9wLnBhdGhGbj10aGlzWydfJytwcm9wLmtpbmQrJ1BhdGhFZmZlY3QnXTt9LF9wcmVwRWZmZWN0czpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5wcmVwYXJlTW9kZWwodGhpcyk7dGhpcy5fYWRkQW5ub3RhdGlvbkVmZmVjdHModGhpcy5fbm90ZXMpO30sX3ByZXBCaW5kaW5nczpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5jcmVhdGVCaW5kaW5ncyh0aGlzKTt9LF9hZGRQcm9wZXJ0eUVmZmVjdHM6ZnVuY3Rpb24ocHJvcGVydGllcyl7aWYocHJvcGVydGllcyl7Zm9yKHZhciBwIGluIHByb3BlcnRpZXMpe3ZhciBwcm9wPXByb3BlcnRpZXNbcF07aWYocHJvcC5vYnNlcnZlcil7dGhpcy5fYWRkT2JzZXJ2ZXJFZmZlY3QocCxwcm9wLm9ic2VydmVyKTt9CmlmKHByb3AuY29tcHV0ZWQpe3Byb3AucmVhZE9ubHk9dHJ1ZTt0aGlzLl9hZGRDb21wdXRlZEVmZmVjdChwLHByb3AuY29tcHV0ZWQpO30KaWYocHJvcC5ub3RpZnkpe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHAsJ25vdGlmeScse2V2ZW50OlBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocCkrJy1jaGFuZ2VkJ30pO30KaWYocHJvcC5yZWZsZWN0VG9BdHRyaWJ1dGUpe3ZhciBhdHRyPVBvbHltZXIuQ2FzZU1hcC5jYW1lbFRvRGFzaENhc2UocCk7aWYoYXR0clswXT09PSctJyl7dGhpcy5fd2Fybih0aGlzLl9sb2dmKCdfYWRkUHJvcGVydHlFZmZlY3RzJywnUHJvcGVydHkgJytwKycgY2Fubm90IGJlIHJlZmxlY3RlZCB0byBhdHRyaWJ1dGUgJythdHRyKycgYmVjYXVzZSAiLSIgaXMgbm90IGEgdmFsaWQgc3RhcnRpbmcgYXR0cmlidXRlIG5hbWUuIFVzZSBhIGxvd2VyY2FzZSBmaXJzdCBsZXR0ZXIgZm9yIHRoZSBwcm9wZXJ0eSBpbnN0ZWFkLicpKTt9ZWxzZXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwLCdyZWZsZWN0Jyx7YXR0cmlidXRlOmF0dHJ9KTt9fQppZihwcm9wLnJlYWRPbmx5KXtQb2x5bWVyLkJpbmQuZW5zdXJlUHJvcGVydHlFZmZlY3RzKHRoaXMscCk7fX19fSxfYWRkQ29tcHV0ZWRFZmZlY3Q6ZnVuY3Rpb24obmFtZSxleHByZXNzaW9uKXt2YXIgc2lnPXRoaXMuX3BhcnNlTWV0aG9kKGV4cHJlc3Npb24pO3ZhciBkeW5hbWljRm49c2lnLmR5bmFtaWNGbjtmb3IodmFyIGk9MCxhcmc7aTxzaWcuYXJncy5sZW5ndGgmJihhcmc9c2lnLmFyZ3NbaV0pO2krKyl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoYXJnLm1vZGVsLCdjb21wdXRlJyx7bWV0aG9kOnNpZy5tZXRob2QsYXJnczpzaWcuYXJncyx0cmlnZ2VyOmFyZyxuYW1lOm5hbWUsZHluYW1pY0ZuOmR5bmFtaWNGbn0pO30KaWYoZHluYW1pY0ZuKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChzaWcubWV0aG9kLCdjb21wdXRlJyx7bWV0aG9kOnNpZy5tZXRob2QsYXJnczpzaWcuYXJncyx0cmlnZ2VyOm51bGwsbmFtZTpuYW1lLGR5bmFtaWNGbjpkeW5hbWljRm59KTt9fSxfYWRkT2JzZXJ2ZXJFZmZlY3Q6ZnVuY3Rpb24ocHJvcGVydHksb2JzZXJ2ZXIpe3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHByb3BlcnR5LCdvYnNlcnZlcicse21ldGhvZDpvYnNlcnZlcixwcm9wZXJ0eTpwcm9wZXJ0eX0pO30sX2FkZENvbXBsZXhPYnNlcnZlckVmZmVjdHM6ZnVuY3Rpb24ob2JzZXJ2ZXJzKXtpZihvYnNlcnZlcnMpe2Zvcih2YXIgaT0wLG87aTxvYnNlcnZlcnMubGVuZ3RoJiYobz1vYnNlcnZlcnNbaV0pO2krKyl7dGhpcy5fYWRkQ29tcGxleE9ic2VydmVyRWZmZWN0KG8pO319fSxfYWRkQ29tcGxleE9ic2VydmVyRWZmZWN0OmZ1bmN0aW9uKG9ic2VydmVyKXt2YXIgc2lnPXRoaXMuX3BhcnNlTWV0aG9kKG9ic2VydmVyKTtpZighc2lnKXt0aHJvdyBuZXcgRXJyb3IoJ01hbGZvcm1lZCBvYnNlcnZlciBleHByZXNzaW9uIFwnJytvYnNlcnZlcisnXCcnKTt9CnZhciBkeW5hbWljRm49c2lnLmR5bmFtaWNGbjtmb3IodmFyIGk9MCxhcmc7aTxzaWcuYXJncy5sZW5ndGgmJihhcmc9c2lnLmFyZ3NbaV0pO2krKyl7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3QoYXJnLm1vZGVsLCdjb21wbGV4T2JzZXJ2ZXInLHttZXRob2Q6c2lnLm1ldGhvZCxhcmdzOnNpZy5hcmdzLHRyaWdnZXI6YXJnLGR5bmFtaWNGbjpkeW5hbWljRm59KTt9CmlmKGR5bmFtaWNGbil7dGhpcy5fYWRkUHJvcGVydHlFZmZlY3Qoc2lnLm1ldGhvZCwnY29tcGxleE9ic2VydmVyJyx7bWV0aG9kOnNpZy5tZXRob2QsYXJnczpzaWcuYXJncyx0cmlnZ2VyOm51bGwsZHluYW1pY0ZuOmR5bmFtaWNGbn0pO319LF9hZGRBbm5vdGF0aW9uRWZmZWN0czpmdW5jdGlvbihub3Rlcyl7Zm9yKHZhciBpPTAsbm90ZTtpPG5vdGVzLmxlbmd0aCYmKG5vdGU9bm90ZXNbaV0pO2krKyl7dmFyIGIkPW5vdGUuYmluZGluZ3M7Zm9yKHZhciBqPTAsYmluZGluZztqPGIkLmxlbmd0aCYmKGJpbmRpbmc9YiRbal0pO2orKyl7dGhpcy5fYWRkQW5ub3RhdGlvbkVmZmVjdChiaW5kaW5nLGkpO319fSxfYWRkQW5ub3RhdGlvbkVmZmVjdDpmdW5jdGlvbihub3RlLGluZGV4KXtpZihQb2x5bWVyLkJpbmQuX3Nob3VsZEFkZExpc3RlbmVyKG5vdGUpKXtQb2x5bWVyLkJpbmQuX2FkZEFubm90YXRlZExpc3RlbmVyKHRoaXMsaW5kZXgsbm90ZS5uYW1lLG5vdGUucGFydHNbMF0udmFsdWUsbm90ZS5wYXJ0c1swXS5ldmVudCxub3RlLnBhcnRzWzBdLm5lZ2F0ZSk7fQpmb3IodmFyIGk9MDtpPG5vdGUucGFydHMubGVuZ3RoO2krKyl7dmFyIHBhcnQ9bm90ZS5wYXJ0c1tpXTtpZihwYXJ0LnNpZ25hdHVyZSl7dGhpcy5fYWRkQW5ub3RhdGVkQ29tcHV0YXRpb25FZmZlY3Qobm90ZSxwYXJ0LGluZGV4KTt9ZWxzZSBpZighcGFydC5saXRlcmFsKXtpZihub3RlLmtpbmQ9PT0nYXR0cmlidXRlJyYmbm90ZS5uYW1lWzBdPT09Jy0nKXt0aGlzLl93YXJuKHRoaXMuX2xvZ2YoJ19hZGRBbm5vdGF0aW9uRWZmZWN0JywnQ2Fubm90IHNldCBhdHRyaWJ1dGUgJytub3RlLm5hbWUrJyBiZWNhdXNlICItIiBpcyBub3QgYSB2YWxpZCBhdHRyaWJ1dGUgc3RhcnRpbmcgY2hhcmFjdGVyJykpO31lbHNle3RoaXMuX2FkZFByb3BlcnR5RWZmZWN0KHBhcnQubW9kZWwsJ2Fubm90YXRpb24nLHtraW5kOm5vdGUua2luZCxpbmRleDppbmRleCxuYW1lOm5vdGUubmFtZSxwcm9wZXJ0eU5hbWU6bm90ZS5wcm9wZXJ0eU5hbWUsdmFsdWU6cGFydC52YWx1ZSxpc0NvbXBvdW5kOm5vdGUuaXNDb21wb3VuZCxjb21wb3VuZEluZGV4OnBhcnQuY29tcG91bmRJbmRleCxldmVudDpwYXJ0LmV2ZW50LGN1c3RvbUV2ZW50OnBhcnQuY3VzdG9tRXZlbnQsbmVnYXRlOnBhcnQubmVnYXRlfSk7fX19fSxfYWRkQW5ub3RhdGVkQ29tcHV0YXRpb25FZmZlY3Q6ZnVuY3Rpb24obm90ZSxwYXJ0LGluZGV4KXt2YXIgc2lnPXBhcnQuc2lnbmF0dXJlO2lmKHNpZy5zdGF0aWMpe3RoaXMuX19hZGRBbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdCgnX19zdGF0aWNfXycsaW5kZXgsbm90ZSxwYXJ0LG51bGwpO31lbHNle2Zvcih2YXIgaT0wLGFyZztpPHNpZy5hcmdzLmxlbmd0aCYmKGFyZz1zaWcuYXJnc1tpXSk7aSsrKXtpZighYXJnLmxpdGVyYWwpe3RoaXMuX19hZGRBbm5vdGF0ZWRDb21wdXRhdGlvbkVmZmVjdChhcmcubW9kZWwsaW5kZXgsbm90ZSxwYXJ0LGFyZyk7fX0KaWYoc2lnLmR5bmFtaWNGbil7dGhpcy5fX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0KHNpZy5tZXRob2QsaW5kZXgsbm90ZSxwYXJ0LG51bGwpO319fSxfX2FkZEFubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0OmZ1bmN0aW9uKHByb3BlcnR5LGluZGV4LG5vdGUscGFydCx0cmlnZ2VyKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wZXJ0eSwnYW5ub3RhdGVkQ29tcHV0YXRpb24nLHtpbmRleDppbmRleCxpc0NvbXBvdW5kOm5vdGUuaXNDb21wb3VuZCxjb21wb3VuZEluZGV4OnBhcnQuY29tcG91bmRJbmRleCxraW5kOm5vdGUua2luZCxuYW1lOm5vdGUubmFtZSxuZWdhdGU6cGFydC5uZWdhdGUsbWV0aG9kOnBhcnQuc2lnbmF0dXJlLm1ldGhvZCxhcmdzOnBhcnQuc2lnbmF0dXJlLmFyZ3MsdHJpZ2dlcjp0cmlnZ2VyLGR5bmFtaWNGbjpwYXJ0LnNpZ25hdHVyZS5keW5hbWljRm59KTt9LF9wYXJzZU1ldGhvZDpmdW5jdGlvbihleHByZXNzaW9uKXt2YXIgbT1leHByZXNzaW9uLm1hdGNoKC8oW15cc10rPylcKChbXHNcU10qKVwpLyk7aWYobSl7dmFyIHNpZz17bWV0aG9kOm1bMV0sc3RhdGljOnRydWV9O2lmKHRoaXMuZ2V0UHJvcGVydHlJbmZvKHNpZy5tZXRob2QpIT09UG9seW1lci5ub2Ipe3NpZy5zdGF0aWM9ZmFsc2U7c2lnLmR5bmFtaWNGbj10cnVlO30KaWYobVsyXS50cmltKCkpe3ZhciBhcmdzPW1bMl0ucmVwbGFjZSgvXFwsL2csJyZjb21tYTsnKS5zcGxpdCgnLCcpO3JldHVybiB0aGlzLl9wYXJzZUFyZ3MoYXJncyxzaWcpO31lbHNle3NpZy5hcmdzPVBvbHltZXIubmFyO3JldHVybiBzaWc7fX19LF9wYXJzZUFyZ3M6ZnVuY3Rpb24oYXJnTGlzdCxzaWcpe3NpZy5hcmdzPWFyZ0xpc3QubWFwKGZ1bmN0aW9uKHJhd0FyZyl7dmFyIGFyZz10aGlzLl9wYXJzZUFyZyhyYXdBcmcpO2lmKCFhcmcubGl0ZXJhbCl7c2lnLnN0YXRpYz1mYWxzZTt9CnJldHVybiBhcmc7fSx0aGlzKTtyZXR1cm4gc2lnO30sX3BhcnNlQXJnOmZ1bmN0aW9uKHJhd0FyZyl7dmFyIGFyZz1yYXdBcmcudHJpbSgpLnJlcGxhY2UoLyZjb21tYTsvZywnLCcpLnJlcGxhY2UoL1xcKC4pL2csJyQxJyk7dmFyIGE9e25hbWU6YXJnfTt2YXIgZmM9YXJnWzBdO2lmKGZjPT09Jy0nKXtmYz1hcmdbMV07fQppZihmYz49JzAnJiZmYzw9JzknKXtmYz0nIyc7fQpzd2l0Y2goZmMpe2Nhc2UnXCcnOmNhc2UnIic6YS52YWx1ZT1hcmcuc2xpY2UoMSwtMSk7YS5saXRlcmFsPXRydWU7YnJlYWs7Y2FzZScjJzphLnZhbHVlPU51bWJlcihhcmcpO2EubGl0ZXJhbD10cnVlO2JyZWFrO30KaWYoIWEubGl0ZXJhbCl7YS5tb2RlbD1Qb2x5bWVyLlBhdGgucm9vdChhcmcpO2Euc3RydWN0dXJlZD1Qb2x5bWVyLlBhdGguaXNEZWVwKGFyZyk7aWYoYS5zdHJ1Y3R1cmVkKXthLndpbGRjYXJkPWFyZy5zbGljZSgtMik9PScuKic7aWYoYS53aWxkY2FyZCl7YS5uYW1lPWFyZy5zbGljZSgwLC0yKTt9fX0KcmV0dXJuIGE7fSxfbWFyc2hhbEluc3RhbmNlRWZmZWN0czpmdW5jdGlvbigpe1BvbHltZXIuQmluZC5wcmVwYXJlSW5zdGFuY2UodGhpcyk7aWYodGhpcy5fYmluZExpc3RlbmVycyl7UG9seW1lci5CaW5kLnNldHVwQmluZExpc3RlbmVycyh0aGlzKTt9fSxfYXBwbHlFZmZlY3RWYWx1ZTpmdW5jdGlvbihpbmZvLHZhbHVlKXt2YXIgbm9kZT10aGlzLl9ub2Rlc1tpbmZvLmluZGV4XTt2YXIgcHJvcGVydHk9aW5mby5uYW1lO3ZhbHVlPXRoaXMuX2NvbXB1dGVGaW5hbEFubm90YXRpb25WYWx1ZShub2RlLHByb3BlcnR5LHZhbHVlLGluZm8pO2lmKGluZm8ua2luZD09J2F0dHJpYnV0ZScpe3RoaXMuc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZSh2YWx1ZSxwcm9wZXJ0eSxub2RlKTt9ZWxzZXt2YXIgcGluZm89bm9kZS5fcHJvcGVydHlJbmZvJiZub2RlLl9wcm9wZXJ0eUluZm9bcHJvcGVydHldO2lmKHBpbmZvJiZwaW5mby5yZWFkT25seSl7cmV0dXJuO30KdGhpcy5fX3NldFByb3BlcnR5KHByb3BlcnR5LHZhbHVlLFBvbHltZXIuU2V0dGluZ3Muc3VwcHJlc3NCaW5kaW5nTm90aWZpY2F0aW9ucyxub2RlKTt9fSxfY29tcHV0ZUZpbmFsQW5ub3RhdGlvblZhbHVlOmZ1bmN0aW9uKG5vZGUscHJvcGVydHksdmFsdWUsaW5mbyl7aWYoaW5mby5uZWdhdGUpe3ZhbHVlPSF2YWx1ZTt9CmlmKGluZm8uaXNDb21wb3VuZCl7dmFyIHN0b3JhZ2U9bm9kZS5fX2NvbXBvdW5kU3RvcmFnZV9fW3Byb3BlcnR5XTtzdG9yYWdlW2luZm8uY29tcG91bmRJbmRleF09dmFsdWU7dmFsdWU9c3RvcmFnZS5qb2luKCcnKTt9CmlmKGluZm8ua2luZCE9PSdhdHRyaWJ1dGUnKXtpZihwcm9wZXJ0eT09PSdjbGFzc05hbWUnKXt2YWx1ZT10aGlzLl9zY29wZUVsZW1lbnRDbGFzcyhub2RlLHZhbHVlKTt9CmlmKHByb3BlcnR5PT09J3RleHRDb250ZW50J3x8bm9kZS5sb2NhbE5hbWU9PSdpbnB1dCcmJnByb3BlcnR5PT0ndmFsdWUnKXt2YWx1ZT12YWx1ZT09dW5kZWZpbmVkPycnOnZhbHVlO319CnJldHVybiB2YWx1ZTt9LF9leGVjdXRlU3RhdGljRWZmZWN0czpmdW5jdGlvbigpe2lmKHRoaXMuX3Byb3BlcnR5RWZmZWN0cyYmdGhpcy5fcHJvcGVydHlFZmZlY3RzLl9fc3RhdGljX18pe3RoaXMuX2VmZmVjdEVmZmVjdHMoJ19fc3RhdGljX18nLG51bGwsdGhpcy5fcHJvcGVydHlFZmZlY3RzLl9fc3RhdGljX18pO319fSk7KGZ1bmN0aW9uKCl7dmFyIHVzZVBvbHlmaWxsUHJvdG89UG9seW1lci5TZXR0aW5ncy51c2VQb2x5ZmlsbFByb3RvO3ZhciBhdm9pZEluc3RhbmNlUHJvcGVydGllcz1Cb29sZWFuKE9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LCdwcm9wZXJ0aWVzJykpO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3NldHVwQ29uZmlndXJlOmZ1bmN0aW9uKGluaXRpYWxDb25maWcpe3RoaXMuX2NvbmZpZz17fTt0aGlzLl9oYW5kbGVycz1bXTt0aGlzLl9hYm92ZUNvbmZpZz1udWxsO2lmKGluaXRpYWxDb25maWcpe2Zvcih2YXIgaSBpbiBpbml0aWFsQ29uZmlnKXtpZihpbml0aWFsQ29uZmlnW2ldIT09dW5kZWZpbmVkKXt0aGlzLl9jb25maWdbaV09aW5pdGlhbENvbmZpZ1tpXTt9fX19LF9tYXJzaGFsQXR0cmlidXRlczpmdW5jdGlvbigpe3RoaXMuX3Rha2VBdHRyaWJ1dGVzVG9Nb2RlbCh0aGlzLl9jb25maWcpO30sX2F0dHJpYnV0ZUNoYW5nZWRJbXBsOmZ1bmN0aW9uKG5hbWUpe3ZhciBtb2RlbD10aGlzLl9jbGllbnRzUmVhZGllZD90aGlzOnRoaXMuX2NvbmZpZzt0aGlzLl9zZXRBdHRyaWJ1dGVUb1Byb3BlcnR5KG1vZGVsLG5hbWUpO30sX2NvbmZpZ1ZhbHVlOmZ1bmN0aW9uKG5hbWUsdmFsdWUpe3ZhciBpbmZvPXRoaXMuX3Byb3BlcnR5SW5mb1tuYW1lXTtpZighaW5mb3x8IWluZm8ucmVhZE9ubHkpe3RoaXMuX2NvbmZpZ1tuYW1lXT12YWx1ZTt9fSxfYmVmb3JlQ2xpZW50c1JlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fY29uZmlndXJlKCk7fSxfY29uZmlndXJlOmZ1bmN0aW9uKCl7dGhpcy5fY29uZmlndXJlQW5ub3RhdGlvblJlZmVyZW5jZXMoKTt0aGlzLl9jb25maWd1cmVJbnN0YW5jZVByb3BlcnRpZXMoKTt0aGlzLl9hYm92ZUNvbmZpZz10aGlzLm1peGluKHt9LHRoaXMuX2NvbmZpZyk7dmFyIGNvbmZpZz17fTtmb3IodmFyIGk9MDtpPHRoaXMuYmVoYXZpb3JzLmxlbmd0aDtpKyspe3RoaXMuX2NvbmZpZ3VyZVByb3BlcnRpZXModGhpcy5iZWhhdmlvcnNbaV0ucHJvcGVydGllcyxjb25maWcpO30KdGhpcy5fY29uZmlndXJlUHJvcGVydGllcyhhdm9pZEluc3RhbmNlUHJvcGVydGllcz90aGlzLl9fcHJvdG9fXy5wcm9wZXJ0aWVzOnRoaXMucHJvcGVydGllcyxjb25maWcpO3RoaXMubWl4aW4oY29uZmlnLHRoaXMuX2Fib3ZlQ29uZmlnKTt0aGlzLl9jb25maWc9Y29uZmlnO2lmKHRoaXMuX2NsaWVudHMmJnRoaXMuX2NsaWVudHMubGVuZ3RoKXt0aGlzLl9kaXN0cmlidXRlQ29uZmlnKHRoaXMuX2NvbmZpZyk7fX0sX2NvbmZpZ3VyZUluc3RhbmNlUHJvcGVydGllczpmdW5jdGlvbigpe2Zvcih2YXIgaSBpbiB0aGlzLl9wcm9wZXJ0eUVmZmVjdHMpe2lmKCF1c2VQb2x5ZmlsbFByb3RvJiZ0aGlzLmhhc093blByb3BlcnR5KGkpKXt0aGlzLl9jb25maWdWYWx1ZShpLHRoaXNbaV0pO2RlbGV0ZSB0aGlzW2ldO319fSxfY29uZmlndXJlUHJvcGVydGllczpmdW5jdGlvbihwcm9wZXJ0aWVzLGNvbmZpZyl7Zm9yKHZhciBpIGluIHByb3BlcnRpZXMpe3ZhciBjPXByb3BlcnRpZXNbaV07aWYoYy52YWx1ZSE9PXVuZGVmaW5lZCl7dmFyIHZhbHVlPWMudmFsdWU7aWYodHlwZW9mIHZhbHVlPT0nZnVuY3Rpb24nKXt2YWx1ZT12YWx1ZS5jYWxsKHRoaXMsdGhpcy5fY29uZmlnKTt9CmNvbmZpZ1tpXT12YWx1ZTt9fX0sX2Rpc3RyaWJ1dGVDb25maWc6ZnVuY3Rpb24oY29uZmlnKXt2YXIgZngkPXRoaXMuX3Byb3BlcnR5RWZmZWN0cztpZihmeCQpe2Zvcih2YXIgcCBpbiBjb25maWcpe3ZhciBmeD1meCRbcF07aWYoZngpe2Zvcih2YXIgaT0wLGw9ZngubGVuZ3RoLHg7aTxsJiYoeD1meFtpXSk7aSsrKXtpZih4LmtpbmQ9PT0nYW5ub3RhdGlvbicpe3ZhciBub2RlPXRoaXMuX25vZGVzW3guZWZmZWN0LmluZGV4XTt2YXIgbmFtZT14LmVmZmVjdC5wcm9wZXJ0eU5hbWU7dmFyIGlzQXR0cj14LmVmZmVjdC5raW5kPT0nYXR0cmlidXRlJzt2YXIgaGFzRWZmZWN0PW5vZGUuX3Byb3BlcnR5RWZmZWN0cyYmbm9kZS5fcHJvcGVydHlFZmZlY3RzW25hbWVdO2lmKG5vZGUuX2NvbmZpZ1ZhbHVlJiYoaGFzRWZmZWN0fHwhaXNBdHRyKSl7dmFyIHZhbHVlPXA9PT14LmVmZmVjdC52YWx1ZT9jb25maWdbcF06dGhpcy5fZ2V0KHguZWZmZWN0LnZhbHVlLGNvbmZpZyk7dmFsdWU9dGhpcy5fY29tcHV0ZUZpbmFsQW5ub3RhdGlvblZhbHVlKG5vZGUsbmFtZSx2YWx1ZSx4LmVmZmVjdCk7aWYoaXNBdHRyKXt2YWx1ZT1ub2RlLmRlc2VyaWFsaXplKHRoaXMuc2VyaWFsaXplKHZhbHVlKSxub2RlLl9wcm9wZXJ0eUluZm9bbmFtZV0udHlwZSk7fQpub2RlLl9jb25maWdWYWx1ZShuYW1lLHZhbHVlKTt9fX19fX19LF9hZnRlckNsaWVudHNSZWFkeTpmdW5jdGlvbigpe3RoaXMuaW1wb3J0UGF0aD10aGlzLl9pbXBvcnRQYXRoO3RoaXMucm9vdFBhdGg9UG9seW1lci5yb290UGF0aDt0aGlzLl9leGVjdXRlU3RhdGljRWZmZWN0cygpO3RoaXMuX2FwcGx5Q29uZmlnKHRoaXMuX2NvbmZpZyx0aGlzLl9hYm92ZUNvbmZpZyk7dGhpcy5fZmx1c2hIYW5kbGVycygpO30sX2FwcGx5Q29uZmlnOmZ1bmN0aW9uKGNvbmZpZyxhYm92ZUNvbmZpZyl7Zm9yKHZhciBuIGluIGNvbmZpZyl7aWYodGhpc1tuXT09PXVuZGVmaW5lZCl7dGhpcy5fX3NldFByb3BlcnR5KG4sY29uZmlnW25dLG4gaW4gYWJvdmVDb25maWcpO319fSxfbm90aWZ5TGlzdGVuZXI6ZnVuY3Rpb24oZm4sZSl7aWYoIVBvbHltZXIuQmluZC5faXNFdmVudEJvZ3VzKGUsZS50YXJnZXQpKXt2YXIgdmFsdWUscGF0aDtpZihlLmRldGFpbCl7dmFsdWU9ZS5kZXRhaWwudmFsdWU7cGF0aD1lLmRldGFpbC5wYXRoO30KaWYoIXRoaXMuX2NsaWVudHNSZWFkaWVkKXt0aGlzLl9xdWV1ZUhhbmRsZXIoW2ZuLGUudGFyZ2V0LHZhbHVlLHBhdGhdKTt9ZWxzZXtyZXR1cm4gZm4uY2FsbCh0aGlzLGUudGFyZ2V0LHZhbHVlLHBhdGgpO319fSxfcXVldWVIYW5kbGVyOmZ1bmN0aW9uKGFyZ3Mpe3RoaXMuX2hhbmRsZXJzLnB1c2goYXJncyk7fSxfZmx1c2hIYW5kbGVyczpmdW5jdGlvbigpe3ZhciBoJD10aGlzLl9oYW5kbGVycztmb3IodmFyIGk9MCxsPWgkLmxlbmd0aCxoO2k8bCYmKGg9aCRbaV0pO2krKyl7aFswXS5jYWxsKHRoaXMsaFsxXSxoWzJdLGhbM10pO30KdGhpcy5faGFuZGxlcnM9W107fX0pO30oKSk7KGZ1bmN0aW9uKCl7J3VzZSBzdHJpY3QnO3ZhciBQYXRoPVBvbHltZXIuUGF0aDtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe25vdGlmeVBhdGg6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxmcm9tQWJvdmUpe3ZhciBpbmZvPXt9O3ZhciB2PXRoaXMuX2dldChwYXRoLHRoaXMsaW5mbyk7aWYoYXJndW1lbnRzLmxlbmd0aD09PTEpe3ZhbHVlPXY7fQppZihpbmZvLnBhdGgpe3RoaXMuX25vdGlmeVBhdGgoaW5mby5wYXRoLHZhbHVlLGZyb21BYm92ZSk7fX0sX25vdGlmeVBhdGg6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxmcm9tQWJvdmUpe3ZhciBvbGQ9dGhpcy5fcHJvcGVydHlTZXR0ZXIocGF0aCx2YWx1ZSk7aWYob2xkIT09dmFsdWUmJihvbGQ9PT1vbGR8fHZhbHVlPT09dmFsdWUpKXt0aGlzLl9wYXRoRWZmZWN0b3IocGF0aCx2YWx1ZSk7aWYoIWZyb21BYm92ZSl7dGhpcy5fbm90aWZ5UGF0aFVwKHBhdGgsdmFsdWUpO30KcmV0dXJuIHRydWU7fX0sX2dldFBhdGhQYXJ0czpmdW5jdGlvbihwYXRoKXtpZihBcnJheS5pc0FycmF5KHBhdGgpKXt2YXIgcGFydHM9W107Zm9yKHZhciBpPTA7aTxwYXRoLmxlbmd0aDtpKyspe3ZhciBhcmdzPXBhdGhbaV0udG9TdHJpbmcoKS5zcGxpdCgnLicpO2Zvcih2YXIgaj0wO2o8YXJncy5sZW5ndGg7aisrKXtwYXJ0cy5wdXNoKGFyZ3Nbal0pO319CnJldHVybiBwYXJ0czt9ZWxzZXtyZXR1cm4gcGF0aC50b1N0cmluZygpLnNwbGl0KCcuJyk7fX0sc2V0OmZ1bmN0aW9uKHBhdGgsdmFsdWUscm9vdCl7dmFyIHByb3A9cm9vdHx8dGhpczt2YXIgcGFydHM9dGhpcy5fZ2V0UGF0aFBhcnRzKHBhdGgpO3ZhciBhcnJheTt2YXIgbGFzdD1wYXJ0c1twYXJ0cy5sZW5ndGgtMV07aWYocGFydHMubGVuZ3RoPjEpe2Zvcih2YXIgaT0wO2k8cGFydHMubGVuZ3RoLTE7aSsrKXt2YXIgcGFydD1wYXJ0c1tpXTtpZihhcnJheSYmcGFydFswXT09JyMnKXtwcm9wPVBvbHltZXIuQ29sbGVjdGlvbi5nZXQoYXJyYXkpLmdldEl0ZW0ocGFydCk7fWVsc2V7cHJvcD1wcm9wW3BhcnRdO2lmKGFycmF5JiZwYXJzZUludChwYXJ0LDEwKT09cGFydCl7cGFydHNbaV09UG9seW1lci5Db2xsZWN0aW9uLmdldChhcnJheSkuZ2V0S2V5KHByb3ApO319CmlmKCFwcm9wKXtyZXR1cm47fQphcnJheT1BcnJheS5pc0FycmF5KHByb3ApP3Byb3A6bnVsbDt9CmlmKGFycmF5KXt2YXIgY29sbD1Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KGFycmF5KTt2YXIgb2xkLGtleTtpZihsYXN0WzBdPT0nIycpe2tleT1sYXN0O29sZD1jb2xsLmdldEl0ZW0oa2V5KTtsYXN0PWFycmF5LmluZGV4T2Yob2xkKTtjb2xsLnNldEl0ZW0oa2V5LHZhbHVlKTt9ZWxzZSBpZihwYXJzZUludChsYXN0LDEwKT09bGFzdCl7b2xkPXByb3BbbGFzdF07a2V5PWNvbGwuZ2V0S2V5KG9sZCk7cGFydHNbaV09a2V5O2NvbGwuc2V0SXRlbShrZXksdmFsdWUpO319CnByb3BbbGFzdF09dmFsdWU7aWYoIXJvb3Qpe3RoaXMuX25vdGlmeVBhdGgocGFydHMuam9pbignLicpLHZhbHVlKTt9fWVsc2V7cHJvcFtwYXRoXT12YWx1ZTt9fSxnZXQ6ZnVuY3Rpb24ocGF0aCxyb290KXtyZXR1cm4gdGhpcy5fZ2V0KHBhdGgscm9vdCk7fSxfZ2V0OmZ1bmN0aW9uKHBhdGgscm9vdCxpbmZvKXt2YXIgcHJvcD1yb290fHx0aGlzO3ZhciBwYXJ0cz10aGlzLl9nZXRQYXRoUGFydHMocGF0aCk7dmFyIGFycmF5O2Zvcih2YXIgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7aWYoIXByb3Ape3JldHVybjt9CnZhciBwYXJ0PXBhcnRzW2ldO2lmKGFycmF5JiZwYXJ0WzBdPT0nIycpe3Byb3A9UG9seW1lci5Db2xsZWN0aW9uLmdldChhcnJheSkuZ2V0SXRlbShwYXJ0KTt9ZWxzZXtwcm9wPXByb3BbcGFydF07aWYoaW5mbyYmYXJyYXkmJnBhcnNlSW50KHBhcnQsMTApPT1wYXJ0KXtwYXJ0c1tpXT1Qb2x5bWVyLkNvbGxlY3Rpb24uZ2V0KGFycmF5KS5nZXRLZXkocHJvcCk7fX0KYXJyYXk9QXJyYXkuaXNBcnJheShwcm9wKT9wcm9wOm51bGw7fQppZihpbmZvKXtpbmZvLnBhdGg9cGFydHMuam9pbignLicpO30KcmV0dXJuIHByb3A7fSxfcGF0aEVmZmVjdG9yOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe3ZhciBtb2RlbD1QYXRoLnJvb3QocGF0aCk7dmFyIGZ4JD10aGlzLl9wcm9wZXJ0eUVmZmVjdHMmJnRoaXMuX3Byb3BlcnR5RWZmZWN0c1ttb2RlbF07aWYoZngkKXtmb3IodmFyIGk9MCxmeDtpPGZ4JC5sZW5ndGgmJihmeD1meCRbaV0pO2krKyl7dmFyIGZ4Rm49ZngucGF0aEZuO2lmKGZ4Rm4pe2Z4Rm4uY2FsbCh0aGlzLHBhdGgsdmFsdWUsZnguZWZmZWN0KTt9fX0KaWYodGhpcy5fYm91bmRQYXRocyl7dGhpcy5fbm90aWZ5Qm91bmRQYXRocyhwYXRoLHZhbHVlKTt9fSxfYW5ub3RhdGlvblBhdGhFZmZlY3Q6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxlZmZlY3Qpe2lmKFBhdGgubWF0Y2hlcyhlZmZlY3QudmFsdWUsZmFsc2UscGF0aCkpe1BvbHltZXIuQmluZC5fYW5ub3RhdGlvbkVmZmVjdC5jYWxsKHRoaXMscGF0aCx2YWx1ZSxlZmZlY3QpO31lbHNlIGlmKCFlZmZlY3QubmVnYXRlJiZQYXRoLmlzRGVzY2VuZGFudChlZmZlY3QudmFsdWUscGF0aCkpe3ZhciBub2RlPXRoaXMuX25vZGVzW2VmZmVjdC5pbmRleF07aWYobm9kZSYmbm9kZS5fbm90aWZ5UGF0aCl7dmFyIG5ld1BhdGg9UGF0aC50cmFuc2xhdGUoZWZmZWN0LnZhbHVlLGVmZmVjdC5uYW1lLHBhdGgpO25vZGUuX25vdGlmeVBhdGgobmV3UGF0aCx2YWx1ZSx0cnVlKTt9fX0sX2NvbXBsZXhPYnNlcnZlclBhdGhFZmZlY3Q6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxlZmZlY3Qpe2lmKFBhdGgubWF0Y2hlcyhlZmZlY3QudHJpZ2dlci5uYW1lLGVmZmVjdC50cmlnZ2VyLndpbGRjYXJkLHBhdGgpKXtQb2x5bWVyLkJpbmQuX2NvbXBsZXhPYnNlcnZlckVmZmVjdC5jYWxsKHRoaXMscGF0aCx2YWx1ZSxlZmZlY3QpO319LF9jb21wdXRlUGF0aEVmZmVjdDpmdW5jdGlvbihwYXRoLHZhbHVlLGVmZmVjdCl7aWYoUGF0aC5tYXRjaGVzKGVmZmVjdC50cmlnZ2VyLm5hbWUsZWZmZWN0LnRyaWdnZXIud2lsZGNhcmQscGF0aCkpe1BvbHltZXIuQmluZC5fY29tcHV0ZUVmZmVjdC5jYWxsKHRoaXMscGF0aCx2YWx1ZSxlZmZlY3QpO319LF9hbm5vdGF0ZWRDb21wdXRhdGlvblBhdGhFZmZlY3Q6ZnVuY3Rpb24ocGF0aCx2YWx1ZSxlZmZlY3Qpe2lmKFBhdGgubWF0Y2hlcyhlZmZlY3QudHJpZ2dlci5uYW1lLGVmZmVjdC50cmlnZ2VyLndpbGRjYXJkLHBhdGgpKXtQb2x5bWVyLkJpbmQuX2Fubm90YXRlZENvbXB1dGF0aW9uRWZmZWN0LmNhbGwodGhpcyxwYXRoLHZhbHVlLGVmZmVjdCk7fX0sbGlua1BhdGhzOmZ1bmN0aW9uKHRvLGZyb20pe3RoaXMuX2JvdW5kUGF0aHM9dGhpcy5fYm91bmRQYXRoc3x8e307aWYoZnJvbSl7dGhpcy5fYm91bmRQYXRoc1t0b109ZnJvbTt9ZWxzZXt0aGlzLnVubGlua1BhdGhzKHRvKTt9fSx1bmxpbmtQYXRoczpmdW5jdGlvbihwYXRoKXtpZih0aGlzLl9ib3VuZFBhdGhzKXtkZWxldGUgdGhpcy5fYm91bmRQYXRoc1twYXRoXTt9fSxfbm90aWZ5Qm91bmRQYXRoczpmdW5jdGlvbihwYXRoLHZhbHVlKXtmb3IodmFyIGEgaW4gdGhpcy5fYm91bmRQYXRocyl7dmFyIGI9dGhpcy5fYm91bmRQYXRoc1thXTtpZihQYXRoLmlzRGVzY2VuZGFudChhLHBhdGgpKXt0aGlzLl9ub3RpZnlQYXRoKFBhdGgudHJhbnNsYXRlKGEsYixwYXRoKSx2YWx1ZSk7fWVsc2UgaWYoUGF0aC5pc0Rlc2NlbmRhbnQoYixwYXRoKSl7dGhpcy5fbm90aWZ5UGF0aChQYXRoLnRyYW5zbGF0ZShiLGEscGF0aCksdmFsdWUpO319fSxfbm90aWZ5UGF0aFVwOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe3ZhciByb290TmFtZT1QYXRoLnJvb3QocGF0aCk7dmFyIGRhc2hDYXNlTmFtZT1Qb2x5bWVyLkNhc2VNYXAuY2FtZWxUb0Rhc2hDYXNlKHJvb3ROYW1lKTt2YXIgZXZlbnROYW1lPWRhc2hDYXNlTmFtZSt0aGlzLl9FVkVOVF9DSEFOR0VEO3RoaXMuZmlyZShldmVudE5hbWUse3BhdGg6cGF0aCx2YWx1ZTp2YWx1ZX0se2J1YmJsZXM6ZmFsc2UsX3VzZUNhY2hlOlBvbHltZXIuU2V0dGluZ3MuZXZlbnREYXRhQ2FjaGV8fCFQb2x5bWVyLlNldHRpbmdzLmlzSUV9KTt9LF9FVkVOVF9DSEFOR0VEOictY2hhbmdlZCcsbm90aWZ5U3BsaWNlczpmdW5jdGlvbihwYXRoLHNwbGljZXMpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3RoaXMuX25vdGlmeVNwbGljZXMoYXJyYXksaW5mby5wYXRoLHNwbGljZXMpO30sX25vdGlmeVNwbGljZXM6ZnVuY3Rpb24oYXJyYXkscGF0aCxzcGxpY2VzKXt2YXIgY2hhbmdlPXtrZXlTcGxpY2VzOlBvbHltZXIuQ29sbGVjdGlvbi5hcHBseVNwbGljZXMoYXJyYXksc3BsaWNlcyksaW5kZXhTcGxpY2VzOnNwbGljZXN9O3ZhciBzcGxpY2VzUGF0aD1wYXRoKycuc3BsaWNlcyc7dGhpcy5fbm90aWZ5UGF0aChzcGxpY2VzUGF0aCxjaGFuZ2UpO3RoaXMuX25vdGlmeVBhdGgocGF0aCsnLmxlbmd0aCcsYXJyYXkubGVuZ3RoKTt0aGlzLl9fZGF0YV9fW3NwbGljZXNQYXRoXT17a2V5U3BsaWNlczpudWxsLGluZGV4U3BsaWNlczpudWxsfTt9LF9ub3RpZnlTcGxpY2U6ZnVuY3Rpb24oYXJyYXkscGF0aCxpbmRleCxhZGRlZCxyZW1vdmVkKXt0aGlzLl9ub3RpZnlTcGxpY2VzKGFycmF5LHBhdGgsW3tpbmRleDppbmRleCxhZGRlZENvdW50OmFkZGVkLHJlbW92ZWQ6cmVtb3ZlZCxvYmplY3Q6YXJyYXksdHlwZTonc3BsaWNlJ31dKTt9LHB1c2g6ZnVuY3Rpb24ocGF0aCl7dmFyIGluZm89e307dmFyIGFycmF5PXRoaXMuX2dldChwYXRoLHRoaXMsaW5mbyk7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3ZhciBsZW49YXJyYXkubGVuZ3RoO3ZhciByZXQ9YXJyYXkucHVzaC5hcHBseShhcnJheSxhcmdzKTtpZihhcmdzLmxlbmd0aCl7dGhpcy5fbm90aWZ5U3BsaWNlKGFycmF5LGluZm8ucGF0aCxsZW4sYXJncy5sZW5ndGgsW10pO30KcmV0dXJuIHJldDt9LHBvcDpmdW5jdGlvbihwYXRoKXt2YXIgaW5mbz17fTt2YXIgYXJyYXk9dGhpcy5fZ2V0KHBhdGgsdGhpcyxpbmZvKTt2YXIgaGFkTGVuZ3RoPUJvb2xlYW4oYXJyYXkubGVuZ3RoKTt2YXIgYXJncz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dmFyIHJldD1hcnJheS5wb3AuYXBwbHkoYXJyYXksYXJncyk7aWYoaGFkTGVuZ3RoKXt0aGlzLl9ub3RpZnlTcGxpY2UoYXJyYXksaW5mby5wYXRoLGFycmF5Lmxlbmd0aCwwLFtyZXRdKTt9CnJldHVybiByZXQ7fSxzcGxpY2U6ZnVuY3Rpb24ocGF0aCxzdGFydCl7dmFyIGluZm89e307dmFyIGFycmF5PXRoaXMuX2dldChwYXRoLHRoaXMsaW5mbyk7aWYoc3RhcnQ8MCl7c3RhcnQ9YXJyYXkubGVuZ3RoLU1hdGguZmxvb3IoLXN0YXJ0KTt9ZWxzZXtzdGFydD1NYXRoLmZsb29yKHN0YXJ0KTt9CmlmKCFzdGFydCl7c3RhcnQ9MDt9CnZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgcmV0PWFycmF5LnNwbGljZS5hcHBseShhcnJheSxhcmdzKTt2YXIgYWRkZWRDb3VudD1NYXRoLm1heChhcmdzLmxlbmd0aC0yLDApO2lmKGFkZGVkQ291bnR8fHJldC5sZW5ndGgpe3RoaXMuX25vdGlmeVNwbGljZShhcnJheSxpbmZvLnBhdGgsc3RhcnQsYWRkZWRDb3VudCxyZXQpO30KcmV0dXJuIHJldDt9LHNoaWZ0OmZ1bmN0aW9uKHBhdGgpe3ZhciBpbmZvPXt9O3ZhciBhcnJheT10aGlzLl9nZXQocGF0aCx0aGlzLGluZm8pO3ZhciBoYWRMZW5ndGg9Qm9vbGVhbihhcnJheS5sZW5ndGgpO3ZhciBhcmdzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTt2YXIgcmV0PWFycmF5LnNoaWZ0LmFwcGx5KGFycmF5LGFyZ3MpO2lmKGhhZExlbmd0aCl7dGhpcy5fbm90aWZ5U3BsaWNlKGFycmF5LGluZm8ucGF0aCwwLDAsW3JldF0pO30KcmV0dXJuIHJldDt9LHVuc2hpZnQ6ZnVuY3Rpb24ocGF0aCl7dmFyIGluZm89e307dmFyIGFycmF5PXRoaXMuX2dldChwYXRoLHRoaXMsaW5mbyk7dmFyIGFyZ3M9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3ZhciByZXQ9YXJyYXkudW5zaGlmdC5hcHBseShhcnJheSxhcmdzKTtpZihhcmdzLmxlbmd0aCl7dGhpcy5fbm90aWZ5U3BsaWNlKGFycmF5LGluZm8ucGF0aCwwLGFyZ3MubGVuZ3RoLFtdKTt9CnJldHVybiByZXQ7fSxwcmVwYXJlTW9kZWxOb3RpZnlQYXRoOmZ1bmN0aW9uKG1vZGVsKXt0aGlzLm1peGluKG1vZGVsLHtmaXJlOlBvbHltZXIuQmFzZS5maXJlLF9nZXRFdmVudDpQb2x5bWVyLkJhc2UuX2dldEV2ZW50LF9fZXZlbnRDYWNoZTpQb2x5bWVyLkJhc2UuX19ldmVudENhY2hlLG5vdGlmeVBhdGg6UG9seW1lci5CYXNlLm5vdGlmeVBhdGgsX2dldDpQb2x5bWVyLkJhc2UuX2dldCxfRVZFTlRfQ0hBTkdFRDpQb2x5bWVyLkJhc2UuX0VWRU5UX0NIQU5HRUQsX25vdGlmeVBhdGg6UG9seW1lci5CYXNlLl9ub3RpZnlQYXRoLF9ub3RpZnlQYXRoVXA6UG9seW1lci5CYXNlLl9ub3RpZnlQYXRoVXAsX3BhdGhFZmZlY3RvcjpQb2x5bWVyLkJhc2UuX3BhdGhFZmZlY3RvcixfYW5ub3RhdGlvblBhdGhFZmZlY3Q6UG9seW1lci5CYXNlLl9hbm5vdGF0aW9uUGF0aEVmZmVjdCxfY29tcGxleE9ic2VydmVyUGF0aEVmZmVjdDpQb2x5bWVyLkJhc2UuX2NvbXBsZXhPYnNlcnZlclBhdGhFZmZlY3QsX2Fubm90YXRlZENvbXB1dGF0aW9uUGF0aEVmZmVjdDpQb2x5bWVyLkJhc2UuX2Fubm90YXRlZENvbXB1dGF0aW9uUGF0aEVmZmVjdCxfY29tcHV0ZVBhdGhFZmZlY3Q6UG9seW1lci5CYXNlLl9jb21wdXRlUGF0aEVmZmVjdCxfbm90aWZ5Qm91bmRQYXRoczpQb2x5bWVyLkJhc2UuX25vdGlmeUJvdW5kUGF0aHMsX2dldFBhdGhQYXJ0czpQb2x5bWVyLkJhc2UuX2dldFBhdGhQYXJ0c30pO319KTt9KCkpO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7cmVzb2x2ZVVybDpmdW5jdGlvbih1cmwpe3JldHVybiBQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZVVybCh1cmwsdGhpcy5faW1wb3J0UGF0aCk7fX0pO1BvbHltZXIuQ3NzUGFyc2U9ZnVuY3Rpb24oKXtyZXR1cm57cGFyc2U6ZnVuY3Rpb24odGV4dCl7dGV4dD10aGlzLl9jbGVhbih0ZXh0KTtyZXR1cm4gdGhpcy5fcGFyc2VDc3ModGhpcy5fbGV4KHRleHQpLHRleHQpO30sX2NsZWFuOmZ1bmN0aW9uKGNzc1RleHQpe3JldHVybiBjc3NUZXh0LnJlcGxhY2UodGhpcy5fcnguY29tbWVudHMsJycpLnJlcGxhY2UodGhpcy5fcngucG9ydCwnJyk7fSxfbGV4OmZ1bmN0aW9uKHRleHQpe3ZhciByb290PXtzdGFydDowLGVuZDp0ZXh0Lmxlbmd0aH07dmFyIG49cm9vdDtmb3IodmFyIGk9MCxsPXRleHQubGVuZ3RoO2k8bDtpKyspe3N3aXRjaCh0ZXh0W2ldKXtjYXNlIHRoaXMuT1BFTl9CUkFDRTppZighbi5ydWxlcyl7bi5ydWxlcz1bXTt9CnZhciBwPW47dmFyIHByZXZpb3VzPXAucnVsZXNbcC5ydWxlcy5sZW5ndGgtMV07bj17c3RhcnQ6aSsxLHBhcmVudDpwLHByZXZpb3VzOnByZXZpb3VzfTtwLnJ1bGVzLnB1c2gobik7YnJlYWs7Y2FzZSB0aGlzLkNMT1NFX0JSQUNFOm4uZW5kPWkrMTtuPW4ucGFyZW50fHxyb290O2JyZWFrO319CnJldHVybiByb290O30sX3BhcnNlQ3NzOmZ1bmN0aW9uKG5vZGUsdGV4dCl7dmFyIHQ9dGV4dC5zdWJzdHJpbmcobm9kZS5zdGFydCxub2RlLmVuZC0xKTtub2RlLnBhcnNlZENzc1RleHQ9bm9kZS5jc3NUZXh0PXQudHJpbSgpO2lmKG5vZGUucGFyZW50KXt2YXIgc3M9bm9kZS5wcmV2aW91cz9ub2RlLnByZXZpb3VzLmVuZDpub2RlLnBhcmVudC5zdGFydDt0PXRleHQuc3Vic3RyaW5nKHNzLG5vZGUuc3RhcnQtMSk7dD10aGlzLl9leHBhbmRVbmljb2RlRXNjYXBlcyh0KTt0PXQucmVwbGFjZSh0aGlzLl9yeC5tdWx0aXBsZVNwYWNlcywnICcpO3Q9dC5zdWJzdHJpbmcodC5sYXN0SW5kZXhPZignOycpKzEpO3ZhciBzPW5vZGUucGFyc2VkU2VsZWN0b3I9bm9kZS5zZWxlY3Rvcj10LnRyaW0oKTtub2RlLmF0UnVsZT1zLmluZGV4T2YodGhpcy5BVF9TVEFSVCk9PT0wO2lmKG5vZGUuYXRSdWxlKXtpZihzLmluZGV4T2YodGhpcy5NRURJQV9TVEFSVCk9PT0wKXtub2RlLnR5cGU9dGhpcy50eXBlcy5NRURJQV9SVUxFO31lbHNlIGlmKHMubWF0Y2godGhpcy5fcngua2V5ZnJhbWVzUnVsZSkpe25vZGUudHlwZT10aGlzLnR5cGVzLktFWUZSQU1FU19SVUxFO25vZGUua2V5ZnJhbWVzTmFtZT1ub2RlLnNlbGVjdG9yLnNwbGl0KHRoaXMuX3J4Lm11bHRpcGxlU3BhY2VzKS5wb3AoKTt9fWVsc2V7aWYocy5pbmRleE9mKHRoaXMuVkFSX1NUQVJUKT09PTApe25vZGUudHlwZT10aGlzLnR5cGVzLk1JWElOX1JVTEU7fWVsc2V7bm9kZS50eXBlPXRoaXMudHlwZXMuU1RZTEVfUlVMRTt9fX0KdmFyIHIkPW5vZGUucnVsZXM7aWYociQpe2Zvcih2YXIgaT0wLGw9ciQubGVuZ3RoLHI7aTxsJiYocj1yJFtpXSk7aSsrKXt0aGlzLl9wYXJzZUNzcyhyLHRleHQpO319CnJldHVybiBub2RlO30sX2V4cGFuZFVuaWNvZGVFc2NhcGVzOmZ1bmN0aW9uKHMpe3JldHVybiBzLnJlcGxhY2UoL1xcKFswLTlhLWZdezEsNn0pXHMvZ2ksZnVuY3Rpb24oKXt2YXIgY29kZT1hcmd1bWVudHNbMV0scmVwZWF0PTYtY29kZS5sZW5ndGg7d2hpbGUocmVwZWF0LS0pe2NvZGU9JzAnK2NvZGU7fQpyZXR1cm4nXFwnK2NvZGU7fSk7fSxzdHJpbmdpZnk6ZnVuY3Rpb24obm9kZSxwcmVzZXJ2ZVByb3BlcnRpZXMsdGV4dCl7dGV4dD10ZXh0fHwnJzt2YXIgY3NzVGV4dD0nJztpZihub2RlLmNzc1RleHR8fG5vZGUucnVsZXMpe3ZhciByJD1ub2RlLnJ1bGVzO2lmKHIkJiYhdGhpcy5faGFzTWl4aW5SdWxlcyhyJCkpe2Zvcih2YXIgaT0wLGw9ciQubGVuZ3RoLHI7aTxsJiYocj1yJFtpXSk7aSsrKXtjc3NUZXh0PXRoaXMuc3RyaW5naWZ5KHIscHJlc2VydmVQcm9wZXJ0aWVzLGNzc1RleHQpO319ZWxzZXtjc3NUZXh0PXByZXNlcnZlUHJvcGVydGllcz9ub2RlLmNzc1RleHQ6dGhpcy5yZW1vdmVDdXN0b21Qcm9wcyhub2RlLmNzc1RleHQpO2Nzc1RleHQ9Y3NzVGV4dC50cmltKCk7aWYoY3NzVGV4dCl7Y3NzVGV4dD0nICAnK2Nzc1RleHQrJ1xuJzt9fX0KaWYoY3NzVGV4dCl7aWYobm9kZS5zZWxlY3Rvcil7dGV4dCs9bm9kZS5zZWxlY3RvcisnICcrdGhpcy5PUEVOX0JSQUNFKydcbic7fQp0ZXh0Kz1jc3NUZXh0O2lmKG5vZGUuc2VsZWN0b3Ipe3RleHQrPXRoaXMuQ0xPU0VfQlJBQ0UrJ1xuXG4nO319CnJldHVybiB0ZXh0O30sX2hhc01peGluUnVsZXM6ZnVuY3Rpb24ocnVsZXMpe3JldHVybiBydWxlc1swXS5zZWxlY3Rvci5pbmRleE9mKHRoaXMuVkFSX1NUQVJUKT09PTA7fSxyZW1vdmVDdXN0b21Qcm9wczpmdW5jdGlvbihjc3NUZXh0KXtjc3NUZXh0PXRoaXMucmVtb3ZlQ3VzdG9tUHJvcEFzc2lnbm1lbnQoY3NzVGV4dCk7cmV0dXJuIHRoaXMucmVtb3ZlQ3VzdG9tUHJvcEFwcGx5KGNzc1RleHQpO30scmVtb3ZlQ3VzdG9tUHJvcEFzc2lnbm1lbnQ6ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIGNzc1RleHQucmVwbGFjZSh0aGlzLl9yeC5jdXN0b21Qcm9wLCcnKS5yZXBsYWNlKHRoaXMuX3J4Lm1peGluUHJvcCwnJyk7fSxyZW1vdmVDdXN0b21Qcm9wQXBwbHk6ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIGNzc1RleHQucmVwbGFjZSh0aGlzLl9yeC5taXhpbkFwcGx5LCcnKS5yZXBsYWNlKHRoaXMuX3J4LnZhckFwcGx5LCcnKTt9LHR5cGVzOntTVFlMRV9SVUxFOjEsS0VZRlJBTUVTX1JVTEU6NyxNRURJQV9SVUxFOjQsTUlYSU5fUlVMRToxMDAwfSxPUEVOX0JSQUNFOid7JyxDTE9TRV9CUkFDRTonfScsX3J4Ontjb21tZW50czovXC9cKlteKl0qXCorKFteXC8qXVteKl0qXCorKSpcLy9naW0scG9ydDovQGltcG9ydFteO10qOy9naW0sY3VzdG9tUHJvcDovKD86XlteO1wtXHN9XSspPy0tW147e31dKj86W157fTtdKj8oPzpbO1xuXXwkKS9naW0sbWl4aW5Qcm9wOi8oPzpeW147XC1cc31dKyk/LS1bXjt7fV0qPzpbXnt9O10qP3tbXn1dKj99KD86Wztcbl18JCk/L2dpbSxtaXhpbkFwcGx5Oi9AYXBwbHlccypcKD9bXik7XSpcKT9ccyooPzpbO1xuXXwkKT8vZ2ltLHZhckFwcGx5Oi9bXjs6XSo/OlteO10qP3ZhclwoW147XSpcKSg/Ols7XG5dfCQpPy9naW0sa2V5ZnJhbWVzUnVsZTovXkBbXlxzXSprZXlmcmFtZXMvLG11bHRpcGxlU3BhY2VzOi9ccysvZ30sVkFSX1NUQVJUOictLScsTUVESUFfU1RBUlQ6J0BtZWRpYScsQVRfU1RBUlQ6J0AnfTt9KCk7UG9seW1lci5TdHlsZVV0aWw9ZnVuY3Rpb24oKXt2YXIgc2V0dGluZ3M9UG9seW1lci5TZXR0aW5ncztyZXR1cm57dW5zY29wZWRTdHlsZUltcG9ydHM6bmV3IFdlYWtNYXAoKSxTSEFEWV9VTlNDT1BFRF9BVFRSOidzaGFkeS11bnNjb3BlZCcsTkFUSVZFX1ZBUklBQkxFUzpQb2x5bWVyLlNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMsTU9EVUxFX1NUWUxFU19TRUxFQ1RPUjonc3R5bGUsIGxpbmtbcmVsPWltcG9ydF1bdHlwZX49Y3NzXSwgdGVtcGxhdGUnLElOQ0xVREVfQVRUUjonaW5jbHVkZScsdG9Dc3NUZXh0OmZ1bmN0aW9uKHJ1bGVzLGNhbGxiYWNrKXtpZih0eXBlb2YgcnVsZXM9PT0nc3RyaW5nJyl7cnVsZXM9dGhpcy5wYXJzZXIucGFyc2UocnVsZXMpO30KaWYoY2FsbGJhY2spe3RoaXMuZm9yRWFjaFJ1bGUocnVsZXMsY2FsbGJhY2spO30KcmV0dXJuIHRoaXMucGFyc2VyLnN0cmluZ2lmeShydWxlcyx0aGlzLk5BVElWRV9WQVJJQUJMRVMpO30sZm9yUnVsZXNJblN0eWxlczpmdW5jdGlvbihzdHlsZXMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKXtpZihzdHlsZXMpe2Zvcih2YXIgaT0wLGw9c3R5bGVzLmxlbmd0aCxzO2k8bCYmKHM9c3R5bGVzW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGVJblN0eWxlKHMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKTt9fX0sZm9yQWN0aXZlUnVsZXNJblN0eWxlczpmdW5jdGlvbihzdHlsZXMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrKXtpZihzdHlsZXMpe2Zvcih2YXIgaT0wLGw9c3R5bGVzLmxlbmd0aCxzO2k8bCYmKHM9c3R5bGVzW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGVJblN0eWxlKHMsc3R5bGVSdWxlQ2FsbGJhY2ssa2V5ZnJhbWVzUnVsZUNhbGxiYWNrLHRydWUpO319fSxydWxlc0ZvclN0eWxlOmZ1bmN0aW9uKHN0eWxlKXtpZighc3R5bGUuX19jc3NSdWxlcyYmc3R5bGUudGV4dENvbnRlbnQpe3N0eWxlLl9fY3NzUnVsZXM9dGhpcy5wYXJzZXIucGFyc2Uoc3R5bGUudGV4dENvbnRlbnQpO30KcmV0dXJuIHN0eWxlLl9fY3NzUnVsZXM7fSxpc0tleWZyYW1lc1NlbGVjdG9yOmZ1bmN0aW9uKHJ1bGUpe3JldHVybiBydWxlLnBhcmVudCYmcnVsZS5wYXJlbnQudHlwZT09PXRoaXMucnVsZVR5cGVzLktFWUZSQU1FU19SVUxFO30sZm9yRWFjaFJ1bGVJblN0eWxlOmZ1bmN0aW9uKHN0eWxlLHN0eWxlUnVsZUNhbGxiYWNrLGtleWZyYW1lc1J1bGVDYWxsYmFjayxvbmx5QWN0aXZlUnVsZXMpe3ZhciBydWxlcz10aGlzLnJ1bGVzRm9yU3R5bGUoc3R5bGUpO3ZhciBzdHlsZUNhbGxiYWNrLGtleWZyYW1lQ2FsbGJhY2s7aWYoc3R5bGVSdWxlQ2FsbGJhY2spe3N0eWxlQ2FsbGJhY2s9ZnVuY3Rpb24ocnVsZSl7c3R5bGVSdWxlQ2FsbGJhY2socnVsZSxzdHlsZSk7fTt9CmlmKGtleWZyYW1lc1J1bGVDYWxsYmFjayl7a2V5ZnJhbWVDYWxsYmFjaz1mdW5jdGlvbihydWxlKXtrZXlmcmFtZXNSdWxlQ2FsbGJhY2socnVsZSxzdHlsZSk7fTt9CnRoaXMuZm9yRWFjaFJ1bGUocnVsZXMsc3R5bGVDYWxsYmFjayxrZXlmcmFtZUNhbGxiYWNrLG9ubHlBY3RpdmVSdWxlcyk7fSxmb3JFYWNoUnVsZTpmdW5jdGlvbihub2RlLHN0eWxlUnVsZUNhbGxiYWNrLGtleWZyYW1lc1J1bGVDYWxsYmFjayxvbmx5QWN0aXZlUnVsZXMpe2lmKCFub2RlKXtyZXR1cm47fQp2YXIgc2tpcFJ1bGVzPWZhbHNlO2lmKG9ubHlBY3RpdmVSdWxlcyl7aWYobm9kZS50eXBlPT09dGhpcy5ydWxlVHlwZXMuTUVESUFfUlVMRSl7dmFyIG1hdGNoTWVkaWE9bm9kZS5zZWxlY3Rvci5tYXRjaCh0aGlzLnJ4Lk1FRElBX01BVENIKTtpZihtYXRjaE1lZGlhKXtpZighd2luZG93Lm1hdGNoTWVkaWEobWF0Y2hNZWRpYVsxXSkubWF0Y2hlcyl7c2tpcFJ1bGVzPXRydWU7fX19fQppZihub2RlLnR5cGU9PT10aGlzLnJ1bGVUeXBlcy5TVFlMRV9SVUxFKXtzdHlsZVJ1bGVDYWxsYmFjayhub2RlKTt9ZWxzZSBpZihrZXlmcmFtZXNSdWxlQ2FsbGJhY2smJm5vZGUudHlwZT09PXRoaXMucnVsZVR5cGVzLktFWUZSQU1FU19SVUxFKXtrZXlmcmFtZXNSdWxlQ2FsbGJhY2sobm9kZSk7fWVsc2UgaWYobm9kZS50eXBlPT09dGhpcy5ydWxlVHlwZXMuTUlYSU5fUlVMRSl7c2tpcFJ1bGVzPXRydWU7fQp2YXIgciQ9bm9kZS5ydWxlcztpZihyJCYmIXNraXBSdWxlcyl7Zm9yKHZhciBpPTAsbD1yJC5sZW5ndGgscjtpPGwmJihyPXIkW2ldKTtpKyspe3RoaXMuZm9yRWFjaFJ1bGUocixzdHlsZVJ1bGVDYWxsYmFjayxrZXlmcmFtZXNSdWxlQ2FsbGJhY2ssb25seUFjdGl2ZVJ1bGVzKTt9fX0sYXBwbHlDc3M6ZnVuY3Rpb24oY3NzVGV4dCxtb25pa2VyLHRhcmdldCxjb250ZXh0Tm9kZSl7dmFyIHN0eWxlPXRoaXMuY3JlYXRlU2NvcGVTdHlsZShjc3NUZXh0LG1vbmlrZXIpO3JldHVybiB0aGlzLmFwcGx5U3R5bGUoc3R5bGUsdGFyZ2V0LGNvbnRleHROb2RlKTt9LGFwcGx5U3R5bGU6ZnVuY3Rpb24oc3R5bGUsdGFyZ2V0LGNvbnRleHROb2RlKXt0YXJnZXQ9dGFyZ2V0fHxkb2N1bWVudC5oZWFkO3ZhciBhZnRlcj1jb250ZXh0Tm9kZSYmY29udGV4dE5vZGUubmV4dFNpYmxpbmd8fHRhcmdldC5maXJzdENoaWxkO3RoaXMuX19sYXN0SGVhZEFwcGx5Tm9kZT1zdHlsZTtyZXR1cm4gdGFyZ2V0Lmluc2VydEJlZm9yZShzdHlsZSxhZnRlcik7fSxjcmVhdGVTY29wZVN0eWxlOmZ1bmN0aW9uKGNzc1RleHQsbW9uaWtlcil7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7aWYobW9uaWtlcil7c3R5bGUuc2V0QXR0cmlidXRlKCdzY29wZScsbW9uaWtlcik7fQpzdHlsZS50ZXh0Q29udGVudD1jc3NUZXh0O3JldHVybiBzdHlsZTt9LF9fbGFzdEhlYWRBcHBseU5vZGU6bnVsbCxhcHBseVN0eWxlUGxhY2VIb2xkZXI6ZnVuY3Rpb24obW9uaWtlcil7dmFyIHBsYWNlSG9sZGVyPWRvY3VtZW50LmNyZWF0ZUNvbW1lbnQoJyBTaGFkeSBET00gc3R5bGVzIGZvciAnK21vbmlrZXIrJyAnKTt2YXIgYWZ0ZXI9dGhpcy5fX2xhc3RIZWFkQXBwbHlOb2RlP3RoaXMuX19sYXN0SGVhZEFwcGx5Tm9kZS5uZXh0U2libGluZzpudWxsO3ZhciBzY29wZT1kb2N1bWVudC5oZWFkO3Njb3BlLmluc2VydEJlZm9yZShwbGFjZUhvbGRlcixhZnRlcnx8c2NvcGUuZmlyc3RDaGlsZCk7dGhpcy5fX2xhc3RIZWFkQXBwbHlOb2RlPXBsYWNlSG9sZGVyO3JldHVybiBwbGFjZUhvbGRlcjt9LGNzc0Zyb21Nb2R1bGVzOmZ1bmN0aW9uKG1vZHVsZUlkcyx3YXJuSWZOb3RGb3VuZCl7dmFyIG1vZHVsZXM9bW9kdWxlSWRzLnRyaW0oKS5zcGxpdCgvXHMrLyk7dmFyIGNzc1RleHQ9Jyc7Zm9yKHZhciBpPTA7aTxtb2R1bGVzLmxlbmd0aDtpKyspe2Nzc1RleHQrPXRoaXMuY3NzRnJvbU1vZHVsZShtb2R1bGVzW2ldLHdhcm5JZk5vdEZvdW5kKTt9CnJldHVybiBjc3NUZXh0O30sY3NzRnJvbU1vZHVsZTpmdW5jdGlvbihtb2R1bGVJZCx3YXJuSWZOb3RGb3VuZCl7dmFyIG09UG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KG1vZHVsZUlkKTtpZihtJiYhbS5fY3NzVGV4dCl7bS5fY3NzVGV4dD10aGlzLmNzc0Zyb21FbGVtZW50KG0pO30KaWYoIW0mJndhcm5JZk5vdEZvdW5kKXtjb25zb2xlLndhcm4oJ0NvdWxkIG5vdCBmaW5kIHN0eWxlIGRhdGEgaW4gbW9kdWxlIG5hbWVkJyxtb2R1bGVJZCk7fQpyZXR1cm4gbSYmbS5fY3NzVGV4dHx8Jyc7fSxjc3NGcm9tRWxlbWVudDpmdW5jdGlvbihlbGVtZW50KXt2YXIgY3NzVGV4dD0nJzt2YXIgY29udGVudD1lbGVtZW50LmNvbnRlbnR8fGVsZW1lbnQ7dmFyIGUkPVBvbHltZXIuVHJlZUFwaS5hcnJheUNvcHkoY29udGVudC5xdWVyeVNlbGVjdG9yQWxsKHRoaXMuTU9EVUxFX1NUWUxFU19TRUxFQ1RPUikpO2Zvcih2YXIgaT0wLGU7aTxlJC5sZW5ndGg7aSsrKXtlPWUkW2ldO2lmKGUubG9jYWxOYW1lPT09J3RlbXBsYXRlJyl7aWYoIWUuaGFzQXR0cmlidXRlKCdwcmVzZXJ2ZS1jb250ZW50Jykpe2Nzc1RleHQrPXRoaXMuY3NzRnJvbUVsZW1lbnQoZSk7fX1lbHNle2lmKGUubG9jYWxOYW1lPT09J3N0eWxlJyl7dmFyIGluY2x1ZGU9ZS5nZXRBdHRyaWJ1dGUodGhpcy5JTkNMVURFX0FUVFIpO2lmKGluY2x1ZGUpe2Nzc1RleHQrPXRoaXMuY3NzRnJvbU1vZHVsZXMoaW5jbHVkZSx0cnVlKTt9CmU9ZS5fX2FwcGxpZWRFbGVtZW50fHxlO2UucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKTt2YXIgY3NzPXRoaXMucmVzb2x2ZUNzcyhlLnRleHRDb250ZW50LGVsZW1lbnQub3duZXJEb2N1bWVudCk7aWYoIXNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvdyYmZS5oYXNBdHRyaWJ1dGUodGhpcy5TSEFEWV9VTlNDT1BFRF9BVFRSKSl7ZS50ZXh0Q29udGVudD1jc3M7ZG9jdW1lbnQuaGVhZC5pbnNlcnRCZWZvcmUoZSxkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQpO31lbHNle2Nzc1RleHQrPWNzczt9fWVsc2UgaWYoZS5pbXBvcnQmJmUuaW1wb3J0LmJvZHkpe3ZhciBpbXBvcnRDc3M9dGhpcy5yZXNvbHZlQ3NzKGUuaW1wb3J0LmJvZHkudGV4dENvbnRlbnQsZS5pbXBvcnQpO2lmKCFzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cmJmUuaGFzQXR0cmlidXRlKHRoaXMuU0hBRFlfVU5TQ09QRURfQVRUUikpe2lmKCF0aGlzLnVuc2NvcGVkU3R5bGVJbXBvcnRzLmhhcyhlLmltcG9ydCkpe3RoaXMudW5zY29wZWRTdHlsZUltcG9ydHMuc2V0KGUuaW1wb3J0LHRydWUpO3ZhciBpbXBvcnRTdHlsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzdHlsZScpO2ltcG9ydFN0eWxlLnNldEF0dHJpYnV0ZSh0aGlzLlNIQURZX1VOU0NPUEVEX0FUVFIsJycpO2ltcG9ydFN0eWxlLnRleHRDb250ZW50PWltcG9ydENzcztkb2N1bWVudC5oZWFkLmluc2VydEJlZm9yZShpbXBvcnRTdHlsZSxkb2N1bWVudC5oZWFkLmZpcnN0Q2hpbGQpO319ZWxzZXtjc3NUZXh0Kz1pbXBvcnRDc3M7fX19fQpyZXR1cm4gY3NzVGV4dDt9LHN0eWxlSW5jbHVkZXNUb1RlbXBsYXRlOmZ1bmN0aW9uKHRhcmdldFRlbXBsYXRlKXt2YXIgc3R5bGVzPXRhcmdldFRlbXBsYXRlLmNvbnRlbnQucXVlcnlTZWxlY3RvckFsbCgnc3R5bGVbaW5jbHVkZV0nKTtmb3IodmFyIGk9MCxzO2k8c3R5bGVzLmxlbmd0aDtpKyspe3M9c3R5bGVzW2ldO3MucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUodGhpcy5faW5jbHVkZXNUb0ZyYWdtZW50KHMuZ2V0QXR0cmlidXRlKCdpbmNsdWRlJykpLHMpO319LF9pbmNsdWRlc1RvRnJhZ21lbnQ6ZnVuY3Rpb24oc3R5bGVJbmNsdWRlcyl7dmFyIGluY2x1ZGVBcnJheT1zdHlsZUluY2x1ZGVzLnRyaW0oKS5zcGxpdCgnICcpO3ZhciBmcmFnPWRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKTtmb3IodmFyIGk9MDtpPGluY2x1ZGVBcnJheS5sZW5ndGg7aSsrKXt2YXIgdD1Qb2x5bWVyLkRvbU1vZHVsZS5pbXBvcnQoaW5jbHVkZUFycmF5W2ldLCd0ZW1wbGF0ZScpO2lmKHQpe3RoaXMuX2FkZFN0eWxlc1RvRnJhZ21lbnQoZnJhZyx0LmNvbnRlbnQpO319CnJldHVybiBmcmFnO30sX2FkZFN0eWxlc1RvRnJhZ21lbnQ6ZnVuY3Rpb24oZnJhZyxzb3VyY2Upe3ZhciBzJD1zb3VyY2UucXVlcnlTZWxlY3RvckFsbCgnc3R5bGUnKTtmb3IodmFyIGk9MCxzO2k8cyQubGVuZ3RoO2krKyl7cz1zJFtpXTt2YXIgaW5jbHVkZT1zLmdldEF0dHJpYnV0ZSgnaW5jbHVkZScpO2lmKGluY2x1ZGUpe2ZyYWcuYXBwZW5kQ2hpbGQodGhpcy5faW5jbHVkZXNUb0ZyYWdtZW50KGluY2x1ZGUpKTt9CmlmKHMudGV4dENvbnRlbnQpe2ZyYWcuYXBwZW5kQ2hpbGQocy5jbG9uZU5vZGUodHJ1ZSkpO319fSxpc1RhcmdldGVkQnVpbGQ6ZnVuY3Rpb24oYnVpbGRUeXBlKXtyZXR1cm4gc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93P2J1aWxkVHlwZT09PSdzaGFkb3cnOmJ1aWxkVHlwZT09PSdzaGFkeSc7fSxjc3NCdWlsZFR5cGVGb3JNb2R1bGU6ZnVuY3Rpb24obW9kdWxlKXt2YXIgZG09UG9seW1lci5Eb21Nb2R1bGUuaW1wb3J0KG1vZHVsZSk7aWYoZG0pe3JldHVybiB0aGlzLmdldENzc0J1aWxkVHlwZShkbSk7fX0sZ2V0Q3NzQnVpbGRUeXBlOmZ1bmN0aW9uKGVsZW1lbnQpe3JldHVybiBlbGVtZW50LmdldEF0dHJpYnV0ZSgnY3NzLWJ1aWxkJyk7fSxfZmluZE1hdGNoaW5nUGFyZW46ZnVuY3Rpb24odGV4dCxzdGFydCl7dmFyIGxldmVsPTA7Zm9yKHZhciBpPXN0YXJ0LGw9dGV4dC5sZW5ndGg7aTxsO2krKyl7c3dpdGNoKHRleHRbaV0pe2Nhc2UnKCc6bGV2ZWwrKzticmVhaztjYXNlJyknOmlmKC0tbGV2ZWw9PT0wKXtyZXR1cm4gaTt9CmJyZWFrO319CnJldHVybi0xO30scHJvY2Vzc1ZhcmlhYmxlQW5kRmFsbGJhY2s6ZnVuY3Rpb24oc3RyLGNhbGxiYWNrKXt2YXIgc3RhcnQ9c3RyLmluZGV4T2YoJ3ZhcignKTtpZihzdGFydD09PS0xKXtyZXR1cm4gY2FsbGJhY2soc3RyLCcnLCcnLCcnKTt9CnZhciBlbmQ9dGhpcy5fZmluZE1hdGNoaW5nUGFyZW4oc3RyLHN0YXJ0KzMpO3ZhciBpbm5lcj1zdHIuc3Vic3RyaW5nKHN0YXJ0KzQsZW5kKTt2YXIgcHJlZml4PXN0ci5zdWJzdHJpbmcoMCxzdGFydCk7dmFyIHN1ZmZpeD10aGlzLnByb2Nlc3NWYXJpYWJsZUFuZEZhbGxiYWNrKHN0ci5zdWJzdHJpbmcoZW5kKzEpLGNhbGxiYWNrKTt2YXIgY29tbWE9aW5uZXIuaW5kZXhPZignLCcpO2lmKGNvbW1hPT09LTEpe3JldHVybiBjYWxsYmFjayhwcmVmaXgsaW5uZXIudHJpbSgpLCcnLHN1ZmZpeCk7fQp2YXIgdmFsdWU9aW5uZXIuc3Vic3RyaW5nKDAsY29tbWEpLnRyaW0oKTt2YXIgZmFsbGJhY2s9aW5uZXIuc3Vic3RyaW5nKGNvbW1hKzEpLnRyaW0oKTtyZXR1cm4gY2FsbGJhY2socHJlZml4LHZhbHVlLGZhbGxiYWNrLHN1ZmZpeCk7fSxyeDp7VkFSX0FTU0lHTjovKD86XnxbO1xze11ccyopKC0tW1x3LV0qPylccyo6XHMqKD86KFteO3tdKil8eyhbXn1dKil9KSg/Oig/PVs7XHN9XSl8JCkvZ2ksTUlYSU5fTUFUQ0g6Lyg/Ol58XFcrKUBhcHBseVxzKlwoPyhbXik7XG5dKilcKT8vZ2ksVkFSX0NPTlNVTUVEOi8oLS1bXHctXSspXHMqKFs6LDspXXwkKS9naSxBTklNQVRJT05fTUFUQ0g6LyhhbmltYXRpb25ccyo6KXwoYW5pbWF0aW9uLW5hbWVccyo6KS8sTUVESUFfTUFUQ0g6L0BtZWRpYVteKF0qKFwoW14pXSpcKSkvLElTX1ZBUjovXi0tLyxCUkFDS0VURUQ6L1x7W159XSpcfS9nLEhPU1RfUFJFRklYOicoPzpefFteLiNbOl0pJyxIT1NUX1NVRkZJWDonKCR8Wy46W1xccz4rfl0pJ30scmVzb2x2ZUNzczpQb2x5bWVyLlJlc29sdmVVcmwucmVzb2x2ZUNzcyxwYXJzZXI6UG9seW1lci5Dc3NQYXJzZSxydWxlVHlwZXM6UG9seW1lci5Dc3NQYXJzZS50eXBlc307fSgpO1BvbHltZXIuU3R5bGVUcmFuc2Zvcm1lcj1mdW5jdGlvbigpe3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIGFwaT17ZG9tOmZ1bmN0aW9uKG5vZGUsc2NvcGUsdXNlQXR0cixzaG91bGRSZW1vdmVTY29wZSl7dGhpcy5fdHJhbnNmb3JtRG9tKG5vZGUsc2NvcGV8fCcnLHVzZUF0dHIsc2hvdWxkUmVtb3ZlU2NvcGUpO30sX3RyYW5zZm9ybURvbTpmdW5jdGlvbihub2RlLHNlbGVjdG9yLHVzZUF0dHIsc2hvdWxkUmVtb3ZlU2NvcGUpe2lmKG5vZGUuc2V0QXR0cmlidXRlKXt0aGlzLmVsZW1lbnQobm9kZSxzZWxlY3Rvcix1c2VBdHRyLHNob3VsZFJlbW92ZVNjb3BlKTt9CnZhciBjJD1Qb2x5bWVyLmRvbShub2RlKS5jaGlsZE5vZGVzO2Zvcih2YXIgaT0wO2k8YyQubGVuZ3RoO2krKyl7dGhpcy5fdHJhbnNmb3JtRG9tKGMkW2ldLHNlbGVjdG9yLHVzZUF0dHIsc2hvdWxkUmVtb3ZlU2NvcGUpO319LGVsZW1lbnQ6ZnVuY3Rpb24oZWxlbWVudCxzY29wZSx1c2VBdHRyLHNob3VsZFJlbW92ZVNjb3BlKXtpZih1c2VBdHRyKXtpZihzaG91bGRSZW1vdmVTY29wZSl7ZWxlbWVudC5yZW1vdmVBdHRyaWJ1dGUoU0NPUEVfTkFNRSk7fWVsc2V7ZWxlbWVudC5zZXRBdHRyaWJ1dGUoU0NPUEVfTkFNRSxzY29wZSk7fX1lbHNle2lmKHNjb3BlKXtpZihlbGVtZW50LmNsYXNzTGlzdCl7aWYoc2hvdWxkUmVtb3ZlU2NvcGUpe2VsZW1lbnQuY2xhc3NMaXN0LnJlbW92ZShTQ09QRV9OQU1FKTtlbGVtZW50LmNsYXNzTGlzdC5yZW1vdmUoc2NvcGUpO31lbHNle2VsZW1lbnQuY2xhc3NMaXN0LmFkZChTQ09QRV9OQU1FKTtlbGVtZW50LmNsYXNzTGlzdC5hZGQoc2NvcGUpO319ZWxzZSBpZihlbGVtZW50LmdldEF0dHJpYnV0ZSl7dmFyIGM9ZWxlbWVudC5nZXRBdHRyaWJ1dGUoQ0xBU1MpO2lmKHNob3VsZFJlbW92ZVNjb3BlKXtpZihjKXtlbGVtZW50LnNldEF0dHJpYnV0ZShDTEFTUyxjLnJlcGxhY2UoU0NPUEVfTkFNRSwnJykucmVwbGFjZShzY29wZSwnJykpO319ZWxzZXtlbGVtZW50LnNldEF0dHJpYnV0ZShDTEFTUywoYz9jKycgJzonJykrU0NPUEVfTkFNRSsnICcrc2NvcGUpO319fX19LGVsZW1lbnRTdHlsZXM6ZnVuY3Rpb24oZWxlbWVudCxjYWxsYmFjayl7dmFyIHN0eWxlcz1lbGVtZW50Ll9zdHlsZXM7dmFyIGNzc1RleHQ9Jyc7dmFyIGNzc0J1aWxkVHlwZT1lbGVtZW50Ll9fY3NzQnVpbGQ7dmFyIHBhc3N0aHJvdWdoPXNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvd3x8Y3NzQnVpbGRUeXBlPT09J3NoYWR5Jzt2YXIgY2I7aWYocGFzc3Rocm91Z2gpe3ZhciBzZWxmPXRoaXM7Y2I9ZnVuY3Rpb24ocnVsZSl7cnVsZS5zZWxlY3Rvcj1zZWxmLl9zbG90dGVkVG9Db250ZW50KHJ1bGUuc2VsZWN0b3IpO3J1bGUuc2VsZWN0b3I9cnVsZS5zZWxlY3Rvci5yZXBsYWNlKFJPT1QsJzpob3N0ID4gKicpO3J1bGUuc2VsZWN0b3I9c2VsZi5fZGlyU2hhZG93VHJhbnNmb3JtKHJ1bGUuc2VsZWN0b3IpO2lmKGNhbGxiYWNrKXtjYWxsYmFjayhydWxlKTt9fTt9CmZvcih2YXIgaT0wLGw9c3R5bGVzLmxlbmd0aCxzO2k8bCYmKHM9c3R5bGVzW2ldKTtpKyspe3ZhciBydWxlcz1zdHlsZVV0aWwucnVsZXNGb3JTdHlsZShzKTtjc3NUZXh0Kz1wYXNzdGhyb3VnaD9zdHlsZVV0aWwudG9Dc3NUZXh0KHJ1bGVzLGNiKTp0aGlzLmNzcyhydWxlcyxlbGVtZW50LmlzLGVsZW1lbnQuZXh0ZW5kcyxjYWxsYmFjayxlbGVtZW50Ll9zY29wZUNzc1ZpYUF0dHIpKydcblxuJzt9CnJldHVybiBjc3NUZXh0LnRyaW0oKTt9LGNzczpmdW5jdGlvbihydWxlcyxzY29wZSxleHQsY2FsbGJhY2ssdXNlQXR0cil7dmFyIGhvc3RTY29wZT10aGlzLl9jYWxjSG9zdFNjb3BlKHNjb3BlLGV4dCk7c2NvcGU9dGhpcy5fY2FsY0VsZW1lbnRTY29wZShzY29wZSx1c2VBdHRyKTt2YXIgc2VsZj10aGlzO3JldHVybiBzdHlsZVV0aWwudG9Dc3NUZXh0KHJ1bGVzLGZ1bmN0aW9uKHJ1bGUpe2lmKCFydWxlLmlzU2NvcGVkKXtzZWxmLnJ1bGUocnVsZSxzY29wZSxob3N0U2NvcGUpO3J1bGUuaXNTY29wZWQ9dHJ1ZTt9CmlmKGNhbGxiYWNrKXtjYWxsYmFjayhydWxlLHNjb3BlLGhvc3RTY29wZSk7fX0pO30sX2NhbGNFbGVtZW50U2NvcGU6ZnVuY3Rpb24oc2NvcGUsdXNlQXR0cil7aWYoc2NvcGUpe3JldHVybiB1c2VBdHRyP0NTU19BVFRSX1BSRUZJWCtzY29wZStDU1NfQVRUUl9TVUZGSVg6Q1NTX0NMQVNTX1BSRUZJWCtzY29wZTt9ZWxzZXtyZXR1cm4nJzt9fSxfY2FsY0hvc3RTY29wZTpmdW5jdGlvbihzY29wZSxleHQpe3JldHVybiBleHQ/J1tpcz0nK3Njb3BlKyddJzpzY29wZTt9LHJ1bGU6ZnVuY3Rpb24ocnVsZSxzY29wZSxob3N0U2NvcGUpe3RoaXMuX3RyYW5zZm9ybVJ1bGUocnVsZSx0aGlzLl90cmFuc2Zvcm1Db21wbGV4U2VsZWN0b3Isc2NvcGUsaG9zdFNjb3BlKTt9LF90cmFuc2Zvcm1SdWxlOmZ1bmN0aW9uKHJ1bGUsdHJhbnNmb3JtZXIsc2NvcGUsaG9zdFNjb3BlKXtydWxlLnNlbGVjdG9yPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvcj10aGlzLl90cmFuc2Zvcm1SdWxlQ3NzKHJ1bGUsdHJhbnNmb3JtZXIsc2NvcGUsaG9zdFNjb3BlKTt9LF9zcGxpdFNlbGVjdG9yTGlzdDpmdW5jdGlvbihzZWxlY3Rvcil7dmFyIHBhcnRzPVtdO3ZhciBwYXJ0PScnO2Zvcih2YXIgaT0wO2k+PTAmJmk8c2VsZWN0b3IubGVuZ3RoO2krKyl7aWYoc2VsZWN0b3JbaV09PT0nKCcpe3ZhciBlbmQ9c3R5bGVVdGlsLl9maW5kTWF0Y2hpbmdQYXJlbihzZWxlY3RvcixpKTtwYXJ0Kz1zZWxlY3Rvci5zbGljZShpLGVuZCsxKTtpPWVuZDt9ZWxzZSBpZihzZWxlY3RvcltpXT09PUNPTVBMRVhfU0VMRUNUT1JfU0VQKXtwYXJ0cy5wdXNoKHBhcnQpO3BhcnQ9Jyc7fWVsc2V7cGFydCs9c2VsZWN0b3JbaV07fX0KaWYocGFydCl7cGFydHMucHVzaChwYXJ0KTt9CmlmKHBhcnRzLmxlbmd0aD09PTApe3BhcnRzLnB1c2goc2VsZWN0b3IpO30KcmV0dXJuIHBhcnRzO30sX3RyYW5zZm9ybVJ1bGVDc3M6ZnVuY3Rpb24ocnVsZSx0cmFuc2Zvcm1lcixzY29wZSxob3N0U2NvcGUpe3ZhciBwJD10aGlzLl9zcGxpdFNlbGVjdG9yTGlzdChydWxlLnNlbGVjdG9yKTtpZighc3R5bGVVdGlsLmlzS2V5ZnJhbWVzU2VsZWN0b3IocnVsZSkpe2Zvcih2YXIgaT0wLGw9cCQubGVuZ3RoLHA7aTxsJiYocD1wJFtpXSk7aSsrKXtwJFtpXT10cmFuc2Zvcm1lci5jYWxsKHRoaXMscCxzY29wZSxob3N0U2NvcGUpO319CnJldHVybiBwJC5qb2luKENPTVBMRVhfU0VMRUNUT1JfU0VQKTt9LF9lbnN1cmVTY29wZWREaXI6ZnVuY3Rpb24ocyl7dmFyIG09cy5tYXRjaChESVJfUEFSRU4pO2lmKG0mJm1bMV09PT0nJyYmbVswXS5sZW5ndGg9PT1zLmxlbmd0aCl7cz0nKicrczt9CnJldHVybiBzO30sX2FkZGl0aW9uYWxEaXJTZWxlY3RvcnM6ZnVuY3Rpb24oZGlyLGFmdGVyLHByZWZpeCl7aWYoIWRpcnx8IWFmdGVyKXtyZXR1cm4nJzt9CnByZWZpeD1wcmVmaXh8fCcnO3JldHVybiBDT01QTEVYX1NFTEVDVE9SX1NFUCtwcmVmaXgrJyAnK2RpcisnICcrYWZ0ZXI7fSxfdHJhbnNmb3JtQ29tcGxleFNlbGVjdG9yOmZ1bmN0aW9uKHNlbGVjdG9yLHNjb3BlLGhvc3RTY29wZSl7dmFyIHN0b3A9ZmFsc2U7dmFyIGhvc3RDb250ZXh0PWZhbHNlO3ZhciBkaXI9ZmFsc2U7dmFyIHNlbGY9dGhpcztzZWxlY3Rvcj1zZWxlY3Rvci50cmltKCk7c2VsZWN0b3I9dGhpcy5fc2xvdHRlZFRvQ29udGVudChzZWxlY3Rvcik7c2VsZWN0b3I9c2VsZWN0b3IucmVwbGFjZShST09ULCc6aG9zdCA+IConKTtzZWxlY3Rvcj1zZWxlY3Rvci5yZXBsYWNlKENPTlRFTlRfU1RBUlQsSE9TVCsnICQxJyk7c2VsZWN0b3I9dGhpcy5fZW5zdXJlU2NvcGVkRGlyKHNlbGVjdG9yKTtzZWxlY3Rvcj1zZWxlY3Rvci5yZXBsYWNlKFNJTVBMRV9TRUxFQ1RPUl9TRVAsZnVuY3Rpb24obSxjLHMpe2lmKCFzdG9wKXt2YXIgaW5mbz1zZWxmLl90cmFuc2Zvcm1Db21wb3VuZFNlbGVjdG9yKHMsYyxzY29wZSxob3N0U2NvcGUpO3N0b3A9c3RvcHx8aW5mby5zdG9wO2hvc3RDb250ZXh0PWhvc3RDb250ZXh0fHxpbmZvLmhvc3RDb250ZXh0O2Rpcj1kaXJ8fGluZm8uZGlyO2M9aW5mby5jb21iaW5hdG9yO3M9aW5mby52YWx1ZTt9ZWxzZXtzPXMucmVwbGFjZShTQ09QRV9KVU1QLCcgJyk7fQpyZXR1cm4gYytzO30pO2lmKGhvc3RDb250ZXh0KXtzZWxlY3Rvcj1zZWxlY3Rvci5yZXBsYWNlKEhPU1RfQ09OVEVYVF9QQVJFTixmdW5jdGlvbihtLHByZSxwYXJlbixwb3N0KXt2YXIgcmVwbGFjZW1lbnQ9cHJlK3BhcmVuKycgJytob3N0U2NvcGUrcG9zdCtDT01QTEVYX1NFTEVDVE9SX1NFUCsnICcrcHJlK2hvc3RTY29wZStwYXJlbitwb3N0O2lmKGRpcil7cmVwbGFjZW1lbnQrPXNlbGYuX2FkZGl0aW9uYWxEaXJTZWxlY3RvcnMocGFyZW4scG9zdCxob3N0U2NvcGUpO30KcmV0dXJuIHJlcGxhY2VtZW50O30pO30KcmV0dXJuIHNlbGVjdG9yO30sX3RyYW5zZm9ybURpcjpmdW5jdGlvbihzKXtzPXMucmVwbGFjZShIT1NUX0RJUixIT1NUX0RJUl9SRVBMQUNFKTtzPXMucmVwbGFjZShESVJfUEFSRU4sRElSX1JFUExBQ0UpO3JldHVybiBzO30sX3RyYW5zZm9ybUNvbXBvdW5kU2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3IsY29tYmluYXRvcixzY29wZSxob3N0U2NvcGUpe3ZhciBqdW1wSW5kZXg9c2VsZWN0b3Iuc2VhcmNoKFNDT1BFX0pVTVApO3ZhciBob3N0Q29udGV4dD1mYWxzZTt2YXIgZGlyPWZhbHNlO2lmKHNlbGVjdG9yLm1hdGNoKERJUl9QQVJFTikpe3NlbGVjdG9yPXRoaXMuX3RyYW5zZm9ybURpcihzZWxlY3Rvcik7ZGlyPXRydWU7fQppZihzZWxlY3Rvci5pbmRleE9mKEhPU1RfQ09OVEVYVCk+PTApe2hvc3RDb250ZXh0PXRydWU7fWVsc2UgaWYoc2VsZWN0b3IuaW5kZXhPZihIT1NUKT49MCl7c2VsZWN0b3I9dGhpcy5fdHJhbnNmb3JtSG9zdFNlbGVjdG9yKHNlbGVjdG9yLGhvc3RTY29wZSk7fWVsc2UgaWYoanVtcEluZGV4IT09MCl7c2VsZWN0b3I9c2NvcGU/dGhpcy5fdHJhbnNmb3JtU2ltcGxlU2VsZWN0b3Ioc2VsZWN0b3Isc2NvcGUpOnNlbGVjdG9yO30KaWYoc2VsZWN0b3IuaW5kZXhPZihDT05URU5UKT49MCl7Y29tYmluYXRvcj0nJzt9CnZhciBzdG9wO2lmKGp1bXBJbmRleD49MCl7c2VsZWN0b3I9c2VsZWN0b3IucmVwbGFjZShTQ09QRV9KVU1QLCcgJyk7c3RvcD10cnVlO30KcmV0dXJue3ZhbHVlOnNlbGVjdG9yLGNvbWJpbmF0b3I6Y29tYmluYXRvcixzdG9wOnN0b3AsaG9zdENvbnRleHQ6aG9zdENvbnRleHQsZGlyOmRpcn07fSxfdHJhbnNmb3JtU2ltcGxlU2VsZWN0b3I6ZnVuY3Rpb24oc2VsZWN0b3Isc2NvcGUpe3ZhciBwJD1zZWxlY3Rvci5zcGxpdChQU0VVRE9fUFJFRklYKTtwJFswXSs9c2NvcGU7cmV0dXJuIHAkLmpvaW4oUFNFVURPX1BSRUZJWCk7fSxfdHJhbnNmb3JtSG9zdFNlbGVjdG9yOmZ1bmN0aW9uKHNlbGVjdG9yLGhvc3RTY29wZSl7dmFyIG09c2VsZWN0b3IubWF0Y2goSE9TVF9QQVJFTik7dmFyIHBhcmVuPW0mJm1bMl0udHJpbSgpfHwnJztpZihwYXJlbil7aWYoIXBhcmVuWzBdLm1hdGNoKFNJTVBMRV9TRUxFQ1RPUl9QUkVGSVgpKXt2YXIgdHlwZVNlbGVjdG9yPXBhcmVuLnNwbGl0KFNJTVBMRV9TRUxFQ1RPUl9QUkVGSVgpWzBdO2lmKHR5cGVTZWxlY3Rvcj09PWhvc3RTY29wZSl7cmV0dXJuIHBhcmVuO31lbHNle3JldHVybiBTRUxFQ1RPUl9OT19NQVRDSDt9fWVsc2V7cmV0dXJuIHNlbGVjdG9yLnJlcGxhY2UoSE9TVF9QQVJFTixmdW5jdGlvbihtLGhvc3QscGFyZW4pe3JldHVybiBob3N0U2NvcGUrcGFyZW47fSk7fX1lbHNle3JldHVybiBzZWxlY3Rvci5yZXBsYWNlKEhPU1QsaG9zdFNjb3BlKTt9fSxkb2N1bWVudFJ1bGU6ZnVuY3Rpb24ocnVsZSl7cnVsZS5zZWxlY3Rvcj1ydWxlLnBhcnNlZFNlbGVjdG9yO3RoaXMubm9ybWFsaXplUm9vdFNlbGVjdG9yKHJ1bGUpO2lmKCFzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cpe3RoaXMuX3RyYW5zZm9ybVJ1bGUocnVsZSx0aGlzLl90cmFuc2Zvcm1Eb2N1bWVudFNlbGVjdG9yKTt9fSxub3JtYWxpemVSb290U2VsZWN0b3I6ZnVuY3Rpb24ocnVsZSl7cnVsZS5zZWxlY3Rvcj1ydWxlLnNlbGVjdG9yLnJlcGxhY2UoUk9PVCwnaHRtbCcpO3ZhciBwYXJ0cz10aGlzLl9zcGxpdFNlbGVjdG9yTGlzdChydWxlLnNlbGVjdG9yKTtwYXJ0cz1wYXJ0cy5maWx0ZXIoZnVuY3Rpb24ocGFydCl7cmV0dXJuIXBhcnQubWF0Y2goSE9TVF9PUl9IT1NUX0dUX1NUQVIpO30pO3J1bGUuc2VsZWN0b3I9cGFydHMuam9pbihDT01QTEVYX1NFTEVDVE9SX1NFUCk7fSxfdHJhbnNmb3JtRG9jdW1lbnRTZWxlY3RvcjpmdW5jdGlvbihzZWxlY3Rvcil7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybUNvbXBsZXhTZWxlY3RvcihzZWxlY3RvcixTQ09QRV9ET0NfU0VMRUNUT1IpO30sX3Nsb3R0ZWRUb0NvbnRlbnQ6ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIGNzc1RleHQucmVwbGFjZShTTE9UVEVEX1BBUkVOLENPTlRFTlQrJz4gJDEnKTt9LF9kaXJTaGFkb3dUcmFuc2Zvcm06ZnVuY3Rpb24oc2VsZWN0b3Ipe2lmKCFzZWxlY3Rvci5tYXRjaCgvOmRpclwoLykpe3JldHVybiBzZWxlY3Rvcjt9CnJldHVybiB0aGlzLl9zcGxpdFNlbGVjdG9yTGlzdChzZWxlY3RvcikubWFwKGZ1bmN0aW9uKHMpe3M9dGhpcy5fZW5zdXJlU2NvcGVkRGlyKHMpO3M9dGhpcy5fdHJhbnNmb3JtRGlyKHMpO3ZhciBtPUhPU1RfQ09OVEVYVF9QQVJFTi5leGVjKHMpO2lmKG0pe3MrPXRoaXMuX2FkZGl0aW9uYWxEaXJTZWxlY3RvcnMobVsyXSxtWzNdLCcnKTt9CnJldHVybiBzO30sdGhpcykuam9pbihDT01QTEVYX1NFTEVDVE9SX1NFUCk7fSxTQ09QRV9OQU1FOidzdHlsZS1zY29wZSd9O3ZhciBTQ09QRV9OQU1FPWFwaS5TQ09QRV9OQU1FO3ZhciBTQ09QRV9ET0NfU0VMRUNUT1I9Jzpub3QoWycrU0NPUEVfTkFNRSsnXSknKyc6bm90KC4nK1NDT1BFX05BTUUrJyknO3ZhciBDT01QTEVYX1NFTEVDVE9SX1NFUD0nLCc7dmFyIFNJTVBMRV9TRUxFQ1RPUl9TRVA9LyhefFtccz4rfl0rKSgoPzpcWy4rP1xdfFteXHM+K349XFtdKSspL2c7dmFyIFNJTVBMRV9TRUxFQ1RPUl9QUkVGSVg9L1tbLjojKl0vO3ZhciBIT1NUPSc6aG9zdCc7dmFyIFJPT1Q9Jzpyb290Jzt2YXIgSE9TVF9QQVJFTj0vKDpob3N0KSg/OlwoKCg/OlwoW14pKF0qXCl8W14pKF0qKSs/KVwpKS87dmFyIEhPU1RfQ09OVEVYVD0nOmhvc3QtY29udGV4dCc7dmFyIEhPU1RfQ09OVEVYVF9QQVJFTj0vKC4qKSg/Ojpob3N0LWNvbnRleHQpKD86XCgoKD86XChbXikoXSpcKXxbXikoXSopKz8pXCkpKC4qKS87dmFyIENPTlRFTlQ9Jzo6Y29udGVudCc7dmFyIFNDT1BFX0pVTVA9Lzo6Y29udGVudHw6OnNoYWRvd3xcL2RlZXBcLy87dmFyIENTU19DTEFTU19QUkVGSVg9Jy4nO3ZhciBDU1NfQVRUUl9QUkVGSVg9J1snK1NDT1BFX05BTUUrJ349Jzt2YXIgQ1NTX0FUVFJfU1VGRklYPSddJzt2YXIgUFNFVURPX1BSRUZJWD0nOic7dmFyIENMQVNTPSdjbGFzcyc7dmFyIENPTlRFTlRfU1RBUlQ9bmV3IFJlZ0V4cCgnXignK0NPTlRFTlQrJyknKTt2YXIgU0VMRUNUT1JfTk9fTUFUQ0g9J3Nob3VsZF9ub3RfbWF0Y2gnO3ZhciBTTE9UVEVEX1BBUkVOPS8oPzo6OnNsb3R0ZWQpKD86XCgoKD86XChbXikoXSpcKXxbXikoXSopKz8pXCkpL2c7dmFyIEhPU1RfT1JfSE9TVF9HVF9TVEFSPS86aG9zdCg/OlxzKj5ccypcKik/Lzt2YXIgRElSX1BBUkVOPS8oLiopOmRpclwoKGx0cnxydGwpXCkvO3ZhciBESVJfUkVQTEFDRT0nOmhvc3QtY29udGV4dChbZGlyPSIkMiJdKSAkMSc7dmFyIEhPU1RfRElSPS86aG9zdFwoOmRpclwoKHJ0bHxsdHIpXClcKS9nO3ZhciBIT1NUX0RJUl9SRVBMQUNFPSc6aG9zdC1jb250ZXh0KFtkaXI9IiQxIl0pJztyZXR1cm4gYXBpO30oKTtQb2x5bWVyLlN0eWxlRXh0ZW5kcz1mdW5jdGlvbigpe3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7cmV0dXJue2hhc0V4dGVuZHM6ZnVuY3Rpb24oY3NzVGV4dCl7cmV0dXJuIEJvb2xlYW4oY3NzVGV4dC5tYXRjaCh0aGlzLnJ4LkVYVEVORCkpO30sdHJhbnNmb3JtOmZ1bmN0aW9uKHN0eWxlKXt2YXIgcnVsZXM9c3R5bGVVdGlsLnJ1bGVzRm9yU3R5bGUoc3R5bGUpO3ZhciBzZWxmPXRoaXM7c3R5bGVVdGlsLmZvckVhY2hSdWxlKHJ1bGVzLGZ1bmN0aW9uKHJ1bGUpe3NlbGYuX21hcFJ1bGVPbnRvUGFyZW50KHJ1bGUpO2lmKHJ1bGUucGFyZW50KXt2YXIgbTt3aGlsZShtPXNlbGYucnguRVhURU5ELmV4ZWMocnVsZS5jc3NUZXh0KSl7dmFyIGV4dGVuZD1tWzFdO3ZhciBleHRlbmRvcj1zZWxmLl9maW5kRXh0ZW5kb3IoZXh0ZW5kLHJ1bGUpO2lmKGV4dGVuZG9yKXtzZWxmLl9leHRlbmRSdWxlKHJ1bGUsZXh0ZW5kb3IpO319fQpydWxlLmNzc1RleHQ9cnVsZS5jc3NUZXh0LnJlcGxhY2Uoc2VsZi5yeC5FWFRFTkQsJycpO30pO3JldHVybiBzdHlsZVV0aWwudG9Dc3NUZXh0KHJ1bGVzLGZ1bmN0aW9uKHJ1bGUpe2lmKHJ1bGUuc2VsZWN0b3IubWF0Y2goc2VsZi5yeC5TVFJJUCkpe3J1bGUuY3NzVGV4dD0nJzt9fSx0cnVlKTt9LF9tYXBSdWxlT250b1BhcmVudDpmdW5jdGlvbihydWxlKXtpZihydWxlLnBhcmVudCl7dmFyIG1hcD1ydWxlLnBhcmVudC5tYXB8fChydWxlLnBhcmVudC5tYXA9e30pO3ZhciBwYXJ0cz1ydWxlLnNlbGVjdG9yLnNwbGl0KCcsJyk7Zm9yKHZhciBpPTAscDtpPHBhcnRzLmxlbmd0aDtpKyspe3A9cGFydHNbaV07bWFwW3AudHJpbSgpXT1ydWxlO30KcmV0dXJuIG1hcDt9fSxfZmluZEV4dGVuZG9yOmZ1bmN0aW9uKGV4dGVuZCxydWxlKXtyZXR1cm4gcnVsZS5wYXJlbnQmJnJ1bGUucGFyZW50Lm1hcCYmcnVsZS5wYXJlbnQubWFwW2V4dGVuZF18fHRoaXMuX2ZpbmRFeHRlbmRvcihleHRlbmQscnVsZS5wYXJlbnQpO30sX2V4dGVuZFJ1bGU6ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7aWYodGFyZ2V0LnBhcmVudCE9PXNvdXJjZS5wYXJlbnQpe3RoaXMuX2Nsb25lQW5kQWRkUnVsZVRvUGFyZW50KHNvdXJjZSx0YXJnZXQucGFyZW50KTt9CnRhcmdldC5leHRlbmRzPXRhcmdldC5leHRlbmRzfHxbXTt0YXJnZXQuZXh0ZW5kcy5wdXNoKHNvdXJjZSk7c291cmNlLnNlbGVjdG9yPXNvdXJjZS5zZWxlY3Rvci5yZXBsYWNlKHRoaXMucnguU1RSSVAsJycpO3NvdXJjZS5zZWxlY3Rvcj0oc291cmNlLnNlbGVjdG9yJiZzb3VyY2Uuc2VsZWN0b3IrJyxcbicpK3RhcmdldC5zZWxlY3RvcjtpZihzb3VyY2UuZXh0ZW5kcyl7c291cmNlLmV4dGVuZHMuZm9yRWFjaChmdW5jdGlvbihlKXt0aGlzLl9leHRlbmRSdWxlKHRhcmdldCxlKTt9LHRoaXMpO319LF9jbG9uZUFuZEFkZFJ1bGVUb1BhcmVudDpmdW5jdGlvbihydWxlLHBhcmVudCl7cnVsZT1PYmplY3QuY3JlYXRlKHJ1bGUpO3J1bGUucGFyZW50PXBhcmVudDtpZihydWxlLmV4dGVuZHMpe3J1bGUuZXh0ZW5kcz1ydWxlLmV4dGVuZHMuc2xpY2UoKTt9CnBhcmVudC5ydWxlcy5wdXNoKHJ1bGUpO30scng6e0VYVEVORDovQGV4dGVuZHNcKChbXildKilcKVxzKj87L2dpbSxTVFJJUDovJVteLF0qJC99fTt9KCk7UG9seW1lci5BcHBseVNoaW09ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIHN0eWxlVXRpbD1Qb2x5bWVyLlN0eWxlVXRpbDt2YXIgTUlYSU5fTUFUQ0g9c3R5bGVVdGlsLnJ4Lk1JWElOX01BVENIO3ZhciBWQVJfQVNTSUdOPXN0eWxlVXRpbC5yeC5WQVJfQVNTSUdOO3ZhciBCQURfVkFSPS92YXJcKFxzKigtLVteLF0qKSxccyooLS1bXildKilcKS9nO3ZhciBBUFBMWV9OQU1FX0NMRUFOPS87XHMqL207dmFyIElOSVRJQUxfSU5IRVJJVD0vXlxzKihpbml0aWFsKXwoaW5oZXJpdClccyokLzt2YXIgTUlYSU5fVkFSX1NFUD0nXy1fJzt2YXIgbWl4aW5NYXA9e307ZnVuY3Rpb24gbWFwU2V0KG5hbWUscHJvcHMpe25hbWU9bmFtZS50cmltKCk7bWl4aW5NYXBbbmFtZV09e3Byb3BlcnRpZXM6cHJvcHMsZGVwZW5kYW50czp7fX07fQpmdW5jdGlvbiBtYXBHZXQobmFtZSl7bmFtZT1uYW1lLnRyaW0oKTtyZXR1cm4gbWl4aW5NYXBbbmFtZV07fQpmdW5jdGlvbiByZXBsYWNlSW5pdGlhbE9ySW5oZXJpdChwcm9wZXJ0eSx2YWx1ZSl7dmFyIG1hdGNoPUlOSVRJQUxfSU5IRVJJVC5leGVjKHZhbHVlKTtpZihtYXRjaCl7aWYobWF0Y2hbMV0pe3ZhbHVlPUFwcGx5U2hpbS5fZ2V0SW5pdGlhbFZhbHVlRm9yUHJvcGVydHkocHJvcGVydHkpO31lbHNle3ZhbHVlPSdhcHBseS1zaGltLWluaGVyaXQnO319CnJldHVybiB2YWx1ZTt9CmZ1bmN0aW9uIGNzc1RleHRUb01hcCh0ZXh0KXt2YXIgcHJvcHM9dGV4dC5zcGxpdCgnOycpO3ZhciBwcm9wZXJ0eSx2YWx1ZTt2YXIgb3V0PXt9O2Zvcih2YXIgaT0wLHAsc3A7aTxwcm9wcy5sZW5ndGg7aSsrKXtwPXByb3BzW2ldO2lmKHApe3NwPXAuc3BsaXQoJzonKTtpZihzcC5sZW5ndGg+MSl7cHJvcGVydHk9c3BbMF0udHJpbSgpO3ZhbHVlPXJlcGxhY2VJbml0aWFsT3JJbmhlcml0KHByb3BlcnR5LHNwLnNsaWNlKDEpLmpvaW4oJzonKSk7b3V0W3Byb3BlcnR5XT12YWx1ZTt9fX0KcmV0dXJuIG91dDt9CmZ1bmN0aW9uIGludmFsaWRhdGVNaXhpbkVudHJ5KG1peGluRW50cnkpe3ZhciBjdXJyZW50UHJvdG89QXBwbHlTaGltLl9fY3VycmVudEVsZW1lbnRQcm90bzt2YXIgY3VycmVudEVsZW1lbnROYW1lPWN1cnJlbnRQcm90byYmY3VycmVudFByb3RvLmlzO2Zvcih2YXIgZWxlbWVudE5hbWUgaW4gbWl4aW5FbnRyeS5kZXBlbmRhbnRzKXtpZihlbGVtZW50TmFtZSE9PWN1cnJlbnRFbGVtZW50TmFtZSl7bWl4aW5FbnRyeS5kZXBlbmRhbnRzW2VsZW1lbnROYW1lXS5fX2FwcGx5U2hpbUludmFsaWQ9dHJ1ZTt9fX0KZnVuY3Rpb24gcHJvZHVjZUNzc1Byb3BlcnRpZXMobWF0Y2hUZXh0LHByb3BlcnR5TmFtZSx2YWx1ZVByb3BlcnR5LHZhbHVlTWl4aW4pe2lmKHZhbHVlUHJvcGVydHkpe3N0eWxlVXRpbC5wcm9jZXNzVmFyaWFibGVBbmRGYWxsYmFjayh2YWx1ZVByb3BlcnR5LGZ1bmN0aW9uKHByZWZpeCx2YWx1ZSl7aWYodmFsdWUmJm1hcEdldCh2YWx1ZSkpe3ZhbHVlTWl4aW49J0BhcHBseSAnK3ZhbHVlKyc7Jzt9fSk7fQppZighdmFsdWVNaXhpbil7cmV0dXJuIG1hdGNoVGV4dDt9CnZhciBtaXhpbkFzUHJvcGVydGllcz1jb25zdW1lQ3NzUHJvcGVydGllcyh2YWx1ZU1peGluKTt2YXIgcHJlZml4PW1hdGNoVGV4dC5zbGljZSgwLG1hdGNoVGV4dC5pbmRleE9mKCctLScpKTt2YXIgbWl4aW5WYWx1ZXM9Y3NzVGV4dFRvTWFwKG1peGluQXNQcm9wZXJ0aWVzKTt2YXIgY29tYmluZWRQcm9wcz1taXhpblZhbHVlczt2YXIgbWl4aW5FbnRyeT1tYXBHZXQocHJvcGVydHlOYW1lKTt2YXIgb2xkUHJvcHM9bWl4aW5FbnRyeSYmbWl4aW5FbnRyeS5wcm9wZXJ0aWVzO2lmKG9sZFByb3BzKXtjb21iaW5lZFByb3BzPU9iamVjdC5jcmVhdGUob2xkUHJvcHMpO2NvbWJpbmVkUHJvcHM9UG9seW1lci5CYXNlLm1peGluKGNvbWJpbmVkUHJvcHMsbWl4aW5WYWx1ZXMpO31lbHNle21hcFNldChwcm9wZXJ0eU5hbWUsY29tYmluZWRQcm9wcyk7fQp2YXIgb3V0PVtdO3ZhciBwLHY7dmFyIG5lZWRUb0ludmFsaWRhdGU9ZmFsc2U7Zm9yKHAgaW4gY29tYmluZWRQcm9wcyl7dj1taXhpblZhbHVlc1twXTtpZih2PT09dW5kZWZpbmVkKXt2PSdpbml0aWFsJzt9CmlmKG9sZFByb3BzJiYhKHAgaW4gb2xkUHJvcHMpKXtuZWVkVG9JbnZhbGlkYXRlPXRydWU7fQpvdXQucHVzaChwcm9wZXJ0eU5hbWUrTUlYSU5fVkFSX1NFUCtwKyc6ICcrdik7fQppZihuZWVkVG9JbnZhbGlkYXRlKXtpbnZhbGlkYXRlTWl4aW5FbnRyeShtaXhpbkVudHJ5KTt9CmlmKG1peGluRW50cnkpe21peGluRW50cnkucHJvcGVydGllcz1jb21iaW5lZFByb3BzO30KaWYodmFsdWVQcm9wZXJ0eSl7cHJlZml4PW1hdGNoVGV4dCsnOycrcHJlZml4O30KcmV0dXJuIHByZWZpeCtvdXQuam9pbignOyAnKSsnOyc7fQpmdW5jdGlvbiBmaXhWYXJzKG1hdGNoVGV4dCx2YXJBLHZhckIpe3JldHVybid2YXIoJyt2YXJBKycsJysndmFyKCcrdmFyQisnKSknO30KZnVuY3Rpb24gYXRBcHBseVRvQ3NzUHJvcGVydGllcyhtaXhpbk5hbWUsZmFsbGJhY2tzKXttaXhpbk5hbWU9bWl4aW5OYW1lLnJlcGxhY2UoQVBQTFlfTkFNRV9DTEVBTiwnJyk7dmFyIHZhcnM9W107dmFyIG1peGluRW50cnk9bWFwR2V0KG1peGluTmFtZSk7aWYoIW1peGluRW50cnkpe21hcFNldChtaXhpbk5hbWUse30pO21peGluRW50cnk9bWFwR2V0KG1peGluTmFtZSk7fQppZihtaXhpbkVudHJ5KXt2YXIgY3VycmVudFByb3RvPUFwcGx5U2hpbS5fX2N1cnJlbnRFbGVtZW50UHJvdG87aWYoY3VycmVudFByb3RvKXttaXhpbkVudHJ5LmRlcGVuZGFudHNbY3VycmVudFByb3RvLmlzXT1jdXJyZW50UHJvdG87fQp2YXIgcCxwYXJ0cyxmO2ZvcihwIGluIG1peGluRW50cnkucHJvcGVydGllcyl7Zj1mYWxsYmFja3MmJmZhbGxiYWNrc1twXTtwYXJ0cz1bcCwnOiB2YXIoJyxtaXhpbk5hbWUsTUlYSU5fVkFSX1NFUCxwXTtpZihmKXtwYXJ0cy5wdXNoKCcsJyxmKTt9CnBhcnRzLnB1c2goJyknKTt2YXJzLnB1c2gocGFydHMuam9pbignJykpO319CnJldHVybiB2YXJzLmpvaW4oJzsgJyk7fQpmdW5jdGlvbiBjb25zdW1lQ3NzUHJvcGVydGllcyh0ZXh0KXt2YXIgbTt3aGlsZShtPU1JWElOX01BVENILmV4ZWModGV4dCkpe3ZhciBtYXRjaFRleHQ9bVswXTt2YXIgbWl4aW5OYW1lPW1bMV07dmFyIGlkeD1tLmluZGV4O3ZhciBhcHBseVBvcz1pZHgrbWF0Y2hUZXh0LmluZGV4T2YoJ0BhcHBseScpO3ZhciBhZnRlckFwcGx5UG9zPWlkeCttYXRjaFRleHQubGVuZ3RoO3ZhciB0ZXh0QmVmb3JlQXBwbHk9dGV4dC5zbGljZSgwLGFwcGx5UG9zKTt2YXIgdGV4dEFmdGVyQXBwbHk9dGV4dC5zbGljZShhZnRlckFwcGx5UG9zKTt2YXIgZGVmYXVsdHM9Y3NzVGV4dFRvTWFwKHRleHRCZWZvcmVBcHBseSk7dmFyIHJlcGxhY2VtZW50PWF0QXBwbHlUb0Nzc1Byb3BlcnRpZXMobWl4aW5OYW1lLGRlZmF1bHRzKTt0ZXh0PVt0ZXh0QmVmb3JlQXBwbHkscmVwbGFjZW1lbnQsdGV4dEFmdGVyQXBwbHldLmpvaW4oJycpO01JWElOX01BVENILmxhc3RJbmRleD1pZHgrcmVwbGFjZW1lbnQubGVuZ3RoO30KcmV0dXJuIHRleHQ7fQp2YXIgQXBwbHlTaGltPXtfbWVhc3VyZUVsZW1lbnQ6bnVsbCxfbWFwOm1peGluTWFwLF9zZXBhcmF0b3I6TUlYSU5fVkFSX1NFUCx0cmFuc2Zvcm06ZnVuY3Rpb24oc3R5bGVzLGVsZW1lbnRQcm90byl7dGhpcy5fX2N1cnJlbnRFbGVtZW50UHJvdG89ZWxlbWVudFByb3RvO3N0eWxlVXRpbC5mb3JSdWxlc0luU3R5bGVzKHN0eWxlcyx0aGlzLl9ib3VuZEZpbmREZWZpbml0aW9ucyk7c3R5bGVVdGlsLmZvclJ1bGVzSW5TdHlsZXMoc3R5bGVzLHRoaXMuX2JvdW5kRmluZEFwcGxpY2F0aW9ucyk7aWYoZWxlbWVudFByb3RvKXtlbGVtZW50UHJvdG8uX19hcHBseVNoaW1JbnZhbGlkPWZhbHNlO30KdGhpcy5fX2N1cnJlbnRFbGVtZW50UHJvdG89bnVsbDt9LF9maW5kRGVmaW5pdGlvbnM6ZnVuY3Rpb24ocnVsZSl7dmFyIGNzc1RleHQ9cnVsZS5wYXJzZWRDc3NUZXh0O2Nzc1RleHQ9Y3NzVGV4dC5yZXBsYWNlKEJBRF9WQVIsZml4VmFycyk7Y3NzVGV4dD1jc3NUZXh0LnJlcGxhY2UoVkFSX0FTU0lHTixwcm9kdWNlQ3NzUHJvcGVydGllcyk7cnVsZS5jc3NUZXh0PWNzc1RleHQ7aWYocnVsZS5zZWxlY3Rvcj09PSc6cm9vdCcpe3J1bGUuc2VsZWN0b3I9Jzpob3N0ID4gKic7fX0sX2ZpbmRBcHBsaWNhdGlvbnM6ZnVuY3Rpb24ocnVsZSl7cnVsZS5jc3NUZXh0PWNvbnN1bWVDc3NQcm9wZXJ0aWVzKHJ1bGUuY3NzVGV4dCk7fSx0cmFuc2Zvcm1SdWxlOmZ1bmN0aW9uKHJ1bGUpe3RoaXMuX2ZpbmREZWZpbml0aW9ucyhydWxlKTt0aGlzLl9maW5kQXBwbGljYXRpb25zKHJ1bGUpO30sX2dldEluaXRpYWxWYWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5KXtpZighdGhpcy5fbWVhc3VyZUVsZW1lbnQpe3RoaXMuX21lYXN1cmVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ21ldGEnKTt0aGlzLl9tZWFzdXJlRWxlbWVudC5zdHlsZS5hbGw9J2luaXRpYWwnO2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcy5fbWVhc3VyZUVsZW1lbnQpO30KcmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuX21lYXN1cmVFbGVtZW50KS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTt9fTtBcHBseVNoaW0uX2JvdW5kVHJhbnNmb3JtUnVsZT1BcHBseVNoaW0udHJhbnNmb3JtUnVsZS5iaW5kKEFwcGx5U2hpbSk7QXBwbHlTaGltLl9ib3VuZEZpbmREZWZpbml0aW9ucz1BcHBseVNoaW0uX2ZpbmREZWZpbml0aW9ucy5iaW5kKEFwcGx5U2hpbSk7QXBwbHlTaGltLl9ib3VuZEZpbmRBcHBsaWNhdGlvbnM9QXBwbHlTaGltLl9maW5kQXBwbGljYXRpb25zLmJpbmQoQXBwbHlTaGltKTtyZXR1cm4gQXBwbHlTaGltO30oKTsoZnVuY3Rpb24oKXt2YXIgcHJlcEVsZW1lbnQ9UG9seW1lci5CYXNlLl9wcmVwRWxlbWVudDt2YXIgbmF0aXZlU2hhZG93PVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93O3ZhciBzdHlsZVV0aWw9UG9seW1lci5TdHlsZVV0aWw7dmFyIHN0eWxlVHJhbnNmb3JtZXI9UG9seW1lci5TdHlsZVRyYW5zZm9ybWVyO3ZhciBzdHlsZUV4dGVuZHM9UG9seW1lci5TdHlsZUV4dGVuZHM7dmFyIGFwcGx5U2hpbT1Qb2x5bWVyLkFwcGx5U2hpbTt2YXIgc2V0dGluZ3M9UG9seW1lci5TZXR0aW5ncztQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19wcmVwRWxlbWVudDpmdW5jdGlvbihlbGVtZW50KXtpZih0aGlzLl9lbmNhcHN1bGF0ZVN0eWxlJiZ0aGlzLl9fY3NzQnVpbGQhPT0nc2hhZHknKXtzdHlsZVRyYW5zZm9ybWVyLmVsZW1lbnQoZWxlbWVudCx0aGlzLmlzLHRoaXMuX3Njb3BlQ3NzVmlhQXR0cik7fQpwcmVwRWxlbWVudC5jYWxsKHRoaXMsZWxlbWVudCk7fSxfcHJlcFN0eWxlczpmdW5jdGlvbigpe2lmKHRoaXMuX2VuY2Fwc3VsYXRlU3R5bGU9PT11bmRlZmluZWQpe3RoaXMuX2VuY2Fwc3VsYXRlU3R5bGU9IW5hdGl2ZVNoYWRvdzt9CmlmKCFuYXRpdmVTaGFkb3cpe3RoaXMuX3Njb3BlU3R5bGU9c3R5bGVVdGlsLmFwcGx5U3R5bGVQbGFjZUhvbGRlcih0aGlzLmlzKTt9CnRoaXMuX19jc3NCdWlsZD1zdHlsZVV0aWwuY3NzQnVpbGRUeXBlRm9yTW9kdWxlKHRoaXMuaXMpO30sX3ByZXBTaGltU3R5bGVzOmZ1bmN0aW9uKCl7aWYodGhpcy5fdGVtcGxhdGUpe3ZhciBoYXNUYXJnZXRlZENzc0J1aWxkPXN0eWxlVXRpbC5pc1RhcmdldGVkQnVpbGQodGhpcy5fX2Nzc0J1aWxkKTtpZihzZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzJiZ0aGlzLl9fY3NzQnVpbGQ9PT0nc2hhZG93JyYmaGFzVGFyZ2V0ZWRDc3NCdWlsZCl7aWYoc2V0dGluZ3MucHJlc2VydmVTdHlsZUluY2x1ZGVzKXtzdHlsZVV0aWwuc3R5bGVJbmNsdWRlc1RvVGVtcGxhdGUodGhpcy5fdGVtcGxhdGUpO30KcmV0dXJuO30KdGhpcy5fc3R5bGVzPXRoaXMuX3N0eWxlc3x8dGhpcy5fY29sbGVjdFN0eWxlcygpO2lmKHNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMmJiF0aGlzLl9fY3NzQnVpbGQpe2FwcGx5U2hpbS50cmFuc2Zvcm0odGhpcy5fc3R5bGVzLHRoaXMpO30KdmFyIGNzc1RleHQ9c2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcyYmaGFzVGFyZ2V0ZWRDc3NCdWlsZD90aGlzLl9zdHlsZXMubGVuZ3RoJiZ0aGlzLl9zdHlsZXNbMF0udGV4dENvbnRlbnQudHJpbSgpOnN0eWxlVHJhbnNmb3JtZXIuZWxlbWVudFN0eWxlcyh0aGlzKTt0aGlzLl9wcmVwU3R5bGVQcm9wZXJ0aWVzKCk7aWYoIXRoaXMuX25lZWRzU3R5bGVQcm9wZXJ0aWVzKCkmJmNzc1RleHQpe3N0eWxlVXRpbC5hcHBseUNzcyhjc3NUZXh0LHRoaXMuaXMsbmF0aXZlU2hhZG93P3RoaXMuX3RlbXBsYXRlLmNvbnRlbnQ6bnVsbCx0aGlzLl9zY29wZVN0eWxlKTt9fWVsc2V7dGhpcy5fc3R5bGVzPVtdO319LF9jb2xsZWN0U3R5bGVzOmZ1bmN0aW9uKCl7dmFyIHN0eWxlcz1bXTt2YXIgY3NzVGV4dD0nJyxtJD10aGlzLnN0eWxlTW9kdWxlcztpZihtJCl7Zm9yKHZhciBpPTAsbD1tJC5sZW5ndGgsbTtpPGwmJihtPW0kW2ldKTtpKyspe2Nzc1RleHQrPXN0eWxlVXRpbC5jc3NGcm9tTW9kdWxlKG0pO319CmNzc1RleHQrPXN0eWxlVXRpbC5jc3NGcm9tTW9kdWxlKHRoaXMuaXMpO3ZhciBwPXRoaXMuX3RlbXBsYXRlJiZ0aGlzLl90ZW1wbGF0ZS5wYXJlbnROb2RlO2lmKHRoaXMuX3RlbXBsYXRlJiYoIXB8fHAuaWQudG9Mb3dlckNhc2UoKSE9PXRoaXMuaXMpKXtjc3NUZXh0Kz1zdHlsZVV0aWwuY3NzRnJvbUVsZW1lbnQodGhpcy5fdGVtcGxhdGUpO30KaWYoY3NzVGV4dCl7dmFyIHN0eWxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3N0eWxlJyk7c3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDtpZihzdHlsZUV4dGVuZHMuaGFzRXh0ZW5kcyhzdHlsZS50ZXh0Q29udGVudCkpe2Nzc1RleHQ9c3R5bGVFeHRlbmRzLnRyYW5zZm9ybShzdHlsZSk7fQpzdHlsZXMucHVzaChzdHlsZSk7fQpyZXR1cm4gc3R5bGVzO30sX2VsZW1lbnRBZGQ6ZnVuY3Rpb24obm9kZSl7aWYodGhpcy5fZW5jYXBzdWxhdGVTdHlsZSl7aWYobm9kZS5fX3N0eWxlU2NvcGVkKXtub2RlLl9fc3R5bGVTY29wZWQ9ZmFsc2U7fWVsc2V7c3R5bGVUcmFuc2Zvcm1lci5kb20obm9kZSx0aGlzLmlzLHRoaXMuX3Njb3BlQ3NzVmlhQXR0cik7fX19LF9lbGVtZW50UmVtb3ZlOmZ1bmN0aW9uKG5vZGUpe2lmKHRoaXMuX2VuY2Fwc3VsYXRlU3R5bGUpe3N0eWxlVHJhbnNmb3JtZXIuZG9tKG5vZGUsdGhpcy5pcyx0aGlzLl9zY29wZUNzc1ZpYUF0dHIsdHJ1ZSk7fX0sc2NvcGVTdWJ0cmVlOmZ1bmN0aW9uKGNvbnRhaW5lcixzaG91bGRPYnNlcnZlKXtpZihuYXRpdmVTaGFkb3cpe3JldHVybjt9CnZhciBzZWxmPXRoaXM7dmFyIHNjb3BpZnk9ZnVuY3Rpb24obm9kZSl7aWYobm9kZS5ub2RlVHlwZT09PU5vZGUuRUxFTUVOVF9OT0RFKXt2YXIgY2xhc3NOYW1lPW5vZGUuZ2V0QXR0cmlidXRlKCdjbGFzcycpO25vZGUuc2V0QXR0cmlidXRlKCdjbGFzcycsc2VsZi5fc2NvcGVFbGVtZW50Q2xhc3Mobm9kZSxjbGFzc05hbWUpKTt2YXIgbiQ9bm9kZS5xdWVyeVNlbGVjdG9yQWxsKCcqJyk7Zm9yKHZhciBpPTAsbjtpPG4kLmxlbmd0aCYmKG49biRbaV0pO2krKyl7Y2xhc3NOYW1lPW4uZ2V0QXR0cmlidXRlKCdjbGFzcycpO24uc2V0QXR0cmlidXRlKCdjbGFzcycsc2VsZi5fc2NvcGVFbGVtZW50Q2xhc3MobixjbGFzc05hbWUpKTt9fX07c2NvcGlmeShjb250YWluZXIpO2lmKHNob3VsZE9ic2VydmUpe3ZhciBtbz1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihteG5zKXtmb3IodmFyIGk9MCxtO2k8bXhucy5sZW5ndGgmJihtPW14bnNbaV0pO2krKyl7aWYobS5hZGRlZE5vZGVzKXtmb3IodmFyIGo9MDtqPG0uYWRkZWROb2Rlcy5sZW5ndGg7aisrKXtzY29waWZ5KG0uYWRkZWROb2Rlc1tqXSk7fX19fSk7bW8ub2JzZXJ2ZShjb250YWluZXIse2NoaWxkTGlzdDp0cnVlLHN1YnRyZWU6dHJ1ZX0pO3JldHVybiBtbzt9fX0pO30oKSk7UG9seW1lci5TdHlsZVByb3BlcnRpZXM9ZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIG1hdGNoZXNTZWxlY3Rvcj1Qb2x5bWVyLkRvbUFwaS5tYXRjaGVzU2VsZWN0b3I7dmFyIHN0eWxlVXRpbD1Qb2x5bWVyLlN0eWxlVXRpbDt2YXIgc3R5bGVUcmFuc2Zvcm1lcj1Qb2x5bWVyLlN0eWxlVHJhbnNmb3JtZXI7dmFyIElTX0lFPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goJ1RyaWRlbnQnKTt2YXIgc2V0dGluZ3M9UG9seW1lci5TZXR0aW5ncztyZXR1cm57ZGVjb3JhdGVTdHlsZXM6ZnVuY3Rpb24oc3R5bGVzLHNjb3BlKXt2YXIgc2VsZj10aGlzLHByb3BzPXt9LGtleWZyYW1lcz1bXSxydWxlSW5kZXg9MDt2YXIgc2NvcGVTZWxlY3Rvcj1zdHlsZVRyYW5zZm9ybWVyLl9jYWxjSG9zdFNjb3BlKHNjb3BlLmlzLHNjb3BlLmV4dGVuZHMpO3N0eWxlVXRpbC5mb3JSdWxlc0luU3R5bGVzKHN0eWxlcyxmdW5jdGlvbihydWxlLHN0eWxlKXtzZWxmLmRlY29yYXRlUnVsZShydWxlKTtydWxlLmluZGV4PXJ1bGVJbmRleCsrO3NlbGYud2hlbkhvc3RPclJvb3RSdWxlKHNjb3BlLHJ1bGUsc3R5bGUsZnVuY3Rpb24oaW5mbyl7aWYocnVsZS5wYXJlbnQudHlwZT09PXN0eWxlVXRpbC5ydWxlVHlwZXMuTUVESUFfUlVMRSl7c2NvcGUuX19ub3RTdHlsZVNjb3BlQ2FjaGVhYmxlPXRydWU7fQppZihpbmZvLmlzSG9zdCl7dmFyIGhvc3RDb250ZXh0T3JGdW5jdGlvbj1pbmZvLnNlbGVjdG9yLnNwbGl0KCcgJykuc29tZShmdW5jdGlvbihzKXtyZXR1cm4gcy5pbmRleE9mKHNjb3BlU2VsZWN0b3IpPT09MCYmcy5sZW5ndGghPT1zY29wZVNlbGVjdG9yLmxlbmd0aDt9KTtzY29wZS5fX25vdFN0eWxlU2NvcGVDYWNoZWFibGU9c2NvcGUuX19ub3RTdHlsZVNjb3BlQ2FjaGVhYmxlfHxob3N0Q29udGV4dE9yRnVuY3Rpb247fX0pO3NlbGYuY29sbGVjdFByb3BlcnRpZXNJbkNzc1RleHQocnVsZS5wcm9wZXJ0eUluZm8uY3NzVGV4dCxwcm9wcyk7fSxmdW5jdGlvbiBvbktleWZyYW1lc1J1bGUocnVsZSl7a2V5ZnJhbWVzLnB1c2gocnVsZSk7fSk7c3R5bGVzLl9rZXlmcmFtZXM9a2V5ZnJhbWVzO3ZhciBuYW1lcz1bXTtmb3IodmFyIGkgaW4gcHJvcHMpe25hbWVzLnB1c2goaSk7fQpyZXR1cm4gbmFtZXM7fSxkZWNvcmF0ZVJ1bGU6ZnVuY3Rpb24ocnVsZSl7aWYocnVsZS5wcm9wZXJ0eUluZm8pe3JldHVybiBydWxlLnByb3BlcnR5SW5mbzt9CnZhciBpbmZvPXt9LHByb3BlcnRpZXM9e307dmFyIGhhc1Byb3BlcnRpZXM9dGhpcy5jb2xsZWN0UHJvcGVydGllcyhydWxlLHByb3BlcnRpZXMpO2lmKGhhc1Byb3BlcnRpZXMpe2luZm8ucHJvcGVydGllcz1wcm9wZXJ0aWVzO3J1bGUucnVsZXM9bnVsbDt9CmluZm8uY3NzVGV4dD10aGlzLmNvbGxlY3RDc3NUZXh0KHJ1bGUpO3J1bGUucHJvcGVydHlJbmZvPWluZm87cmV0dXJuIGluZm87fSxjb2xsZWN0UHJvcGVydGllczpmdW5jdGlvbihydWxlLHByb3BlcnRpZXMpe3ZhciBpbmZvPXJ1bGUucHJvcGVydHlJbmZvO2lmKGluZm8pe2lmKGluZm8ucHJvcGVydGllcyl7UG9seW1lci5CYXNlLm1peGluKHByb3BlcnRpZXMsaW5mby5wcm9wZXJ0aWVzKTtyZXR1cm4gdHJ1ZTt9fWVsc2V7dmFyIG0scng9dGhpcy5yeC5WQVJfQVNTSUdOO3ZhciBjc3NUZXh0PXJ1bGUucGFyc2VkQ3NzVGV4dDt2YXIgdmFsdWU7dmFyIGFueTt3aGlsZShtPXJ4LmV4ZWMoY3NzVGV4dCkpe3ZhbHVlPShtWzJdfHxtWzNdKS50cmltKCk7aWYodmFsdWUhPT0naW5oZXJpdCcpe3Byb3BlcnRpZXNbbVsxXS50cmltKCldPXZhbHVlO30KYW55PXRydWU7fQpyZXR1cm4gYW55O319LGNvbGxlY3RDc3NUZXh0OmZ1bmN0aW9uKHJ1bGUpe3JldHVybiB0aGlzLmNvbGxlY3RDb25zdW1pbmdDc3NUZXh0KHJ1bGUucGFyc2VkQ3NzVGV4dCk7fSxjb2xsZWN0Q29uc3VtaW5nQ3NzVGV4dDpmdW5jdGlvbihjc3NUZXh0KXtyZXR1cm4gY3NzVGV4dC5yZXBsYWNlKHRoaXMucnguQlJBQ0tFVEVELCcnKS5yZXBsYWNlKHRoaXMucnguVkFSX0FTU0lHTiwnJyk7fSxjb2xsZWN0UHJvcGVydGllc0luQ3NzVGV4dDpmdW5jdGlvbihjc3NUZXh0LHByb3BzKXt2YXIgbTt3aGlsZShtPXRoaXMucnguVkFSX0NPTlNVTUVELmV4ZWMoY3NzVGV4dCkpe3ZhciBuYW1lPW1bMV07aWYobVsyXSE9PSc6Jyl7cHJvcHNbbmFtZV09dHJ1ZTt9fX0scmVpZnk6ZnVuY3Rpb24ocHJvcHMpe3ZhciBuYW1lcz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm9wcyk7Zm9yKHZhciBpPTAsbjtpPG5hbWVzLmxlbmd0aDtpKyspe249bmFtZXNbaV07cHJvcHNbbl09dGhpcy52YWx1ZUZvclByb3BlcnR5KHByb3BzW25dLHByb3BzKTt9fSx2YWx1ZUZvclByb3BlcnR5OmZ1bmN0aW9uKHByb3BlcnR5LHByb3BzKXtpZihwcm9wZXJ0eSl7aWYocHJvcGVydHkuaW5kZXhPZignOycpPj0wKXtwcm9wZXJ0eT10aGlzLnZhbHVlRm9yUHJvcGVydGllcyhwcm9wZXJ0eSxwcm9wcyk7fWVsc2V7dmFyIHNlbGY9dGhpczt2YXIgZm49ZnVuY3Rpb24ocHJlZml4LHZhbHVlLGZhbGxiYWNrLHN1ZmZpeCl7dmFyIHByb3BlcnR5VmFsdWU9c2VsZi52YWx1ZUZvclByb3BlcnR5KHByb3BzW3ZhbHVlXSxwcm9wcyk7aWYoIXByb3BlcnR5VmFsdWV8fHByb3BlcnR5VmFsdWU9PT0naW5pdGlhbCcpe3Byb3BlcnR5VmFsdWU9c2VsZi52YWx1ZUZvclByb3BlcnR5KHByb3BzW2ZhbGxiYWNrXXx8ZmFsbGJhY2sscHJvcHMpfHxmYWxsYmFjazt9ZWxzZSBpZihwcm9wZXJ0eVZhbHVlPT09J2FwcGx5LXNoaW0taW5oZXJpdCcpe3Byb3BlcnR5VmFsdWU9J2luaGVyaXQnO30KcmV0dXJuIHByZWZpeCsocHJvcGVydHlWYWx1ZXx8JycpK3N1ZmZpeDt9O3Byb3BlcnR5PXN0eWxlVXRpbC5wcm9jZXNzVmFyaWFibGVBbmRGYWxsYmFjayhwcm9wZXJ0eSxmbik7fX0KcmV0dXJuIHByb3BlcnR5JiZwcm9wZXJ0eS50cmltKCl8fCcnO30sdmFsdWVGb3JQcm9wZXJ0aWVzOmZ1bmN0aW9uKHByb3BlcnR5LHByb3BzKXt2YXIgcGFydHM9cHJvcGVydHkuc3BsaXQoJzsnKTtmb3IodmFyIGk9MCxwLG07aTxwYXJ0cy5sZW5ndGg7aSsrKXtpZihwPXBhcnRzW2ldKXt0aGlzLnJ4Lk1JWElOX01BVENILmxhc3RJbmRleD0wO209dGhpcy5yeC5NSVhJTl9NQVRDSC5leGVjKHApO2lmKG0pe3A9dGhpcy52YWx1ZUZvclByb3BlcnR5KHByb3BzW21bMV1dLHByb3BzKTt9ZWxzZXt2YXIgY29sb249cC5pbmRleE9mKCc6Jyk7aWYoY29sb24hPT0tMSl7dmFyIHBwPXAuc3Vic3RyaW5nKGNvbG9uKTtwcD1wcC50cmltKCk7cHA9dGhpcy52YWx1ZUZvclByb3BlcnR5KHBwLHByb3BzKXx8cHA7cD1wLnN1YnN0cmluZygwLGNvbG9uKStwcDt9fQpwYXJ0c1tpXT1wJiZwLmxhc3RJbmRleE9mKCc7Jyk9PT1wLmxlbmd0aC0xP3Auc2xpY2UoMCwtMSk6cHx8Jyc7fX0KcmV0dXJuIHBhcnRzLmpvaW4oJzsnKTt9LGFwcGx5UHJvcGVydGllczpmdW5jdGlvbihydWxlLHByb3BzKXt2YXIgb3V0cHV0PScnO2lmKCFydWxlLnByb3BlcnR5SW5mbyl7dGhpcy5kZWNvcmF0ZVJ1bGUocnVsZSk7fQppZihydWxlLnByb3BlcnR5SW5mby5jc3NUZXh0KXtvdXRwdXQ9dGhpcy52YWx1ZUZvclByb3BlcnRpZXMocnVsZS5wcm9wZXJ0eUluZm8uY3NzVGV4dCxwcm9wcyk7fQpydWxlLmNzc1RleHQ9b3V0cHV0O30sYXBwbHlLZXlmcmFtZVRyYW5zZm9ybXM6ZnVuY3Rpb24ocnVsZSxrZXlmcmFtZVRyYW5zZm9ybXMpe3ZhciBpbnB1dD1ydWxlLmNzc1RleHQ7dmFyIG91dHB1dD1ydWxlLmNzc1RleHQ7aWYocnVsZS5oYXNBbmltYXRpb25zPT1udWxsKXtydWxlLmhhc0FuaW1hdGlvbnM9dGhpcy5yeC5BTklNQVRJT05fTUFUQ0gudGVzdChpbnB1dCk7fQppZihydWxlLmhhc0FuaW1hdGlvbnMpe3ZhciB0cmFuc2Zvcm07aWYocnVsZS5rZXlmcmFtZU5hbWVzVG9UcmFuc2Zvcm09PW51bGwpe3J1bGUua2V5ZnJhbWVOYW1lc1RvVHJhbnNmb3JtPVtdO2Zvcih2YXIga2V5ZnJhbWUgaW4ga2V5ZnJhbWVUcmFuc2Zvcm1zKXt0cmFuc2Zvcm09a2V5ZnJhbWVUcmFuc2Zvcm1zW2tleWZyYW1lXTtvdXRwdXQ9dHJhbnNmb3JtKGlucHV0KTtpZihpbnB1dCE9PW91dHB1dCl7aW5wdXQ9b3V0cHV0O3J1bGUua2V5ZnJhbWVOYW1lc1RvVHJhbnNmb3JtLnB1c2goa2V5ZnJhbWUpO319fWVsc2V7Zm9yKHZhciBpPTA7aTxydWxlLmtleWZyYW1lTmFtZXNUb1RyYW5zZm9ybS5sZW5ndGg7KytpKXt0cmFuc2Zvcm09a2V5ZnJhbWVUcmFuc2Zvcm1zW3J1bGUua2V5ZnJhbWVOYW1lc1RvVHJhbnNmb3JtW2ldXTtpbnB1dD10cmFuc2Zvcm0oaW5wdXQpO30Kb3V0cHV0PWlucHV0O319CnJ1bGUuY3NzVGV4dD1vdXRwdXQ7fSxwcm9wZXJ0eURhdGFGcm9tU3R5bGVzOmZ1bmN0aW9uKHN0eWxlcyxlbGVtZW50KXt2YXIgcHJvcHM9e30sc2VsZj10aGlzO3ZhciBvPVtdO3N0eWxlVXRpbC5mb3JBY3RpdmVSdWxlc0luU3R5bGVzKHN0eWxlcyxmdW5jdGlvbihydWxlKXtpZighcnVsZS5wcm9wZXJ0eUluZm8pe3NlbGYuZGVjb3JhdGVSdWxlKHJ1bGUpO30KdmFyIHNlbGVjdG9yVG9NYXRjaD1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3J8fHJ1bGUucGFyc2VkU2VsZWN0b3I7aWYoZWxlbWVudCYmcnVsZS5wcm9wZXJ0eUluZm8ucHJvcGVydGllcyYmc2VsZWN0b3JUb01hdGNoKXtpZihtYXRjaGVzU2VsZWN0b3IuY2FsbChlbGVtZW50LHNlbGVjdG9yVG9NYXRjaCkpe3NlbGYuY29sbGVjdFByb3BlcnRpZXMocnVsZSxwcm9wcyk7YWRkVG9CaXRNYXNrKHJ1bGUuaW5kZXgsbyk7fX19KTtyZXR1cm57cHJvcGVydGllczpwcm9wcyxrZXk6b307fSxfcm9vdFNlbGVjdG9yOi86cm9vdHw6aG9zdFxzKj5ccypcKi8sX2NoZWNrUm9vdDpmdW5jdGlvbihob3N0U2NvcGUsc2VsZWN0b3Ipe3JldHVybiBCb29sZWFuKHNlbGVjdG9yLm1hdGNoKHRoaXMuX3Jvb3RTZWxlY3RvcikpfHxob3N0U2NvcGU9PT0naHRtbCcmJnNlbGVjdG9yLmluZGV4T2YoJ2h0bWwnKT4tMTt9LHdoZW5Ib3N0T3JSb290UnVsZTpmdW5jdGlvbihzY29wZSxydWxlLHN0eWxlLGNhbGxiYWNrKXtpZighcnVsZS5wcm9wZXJ0eUluZm8pe3NlbGYuZGVjb3JhdGVSdWxlKHJ1bGUpO30KaWYoIXJ1bGUucHJvcGVydHlJbmZvLnByb3BlcnRpZXMpe3JldHVybjt9CnZhciBob3N0U2NvcGU9c2NvcGUuaXM/c3R5bGVUcmFuc2Zvcm1lci5fY2FsY0hvc3RTY29wZShzY29wZS5pcyxzY29wZS5leHRlbmRzKTonaHRtbCc7dmFyIHBhcnNlZFNlbGVjdG9yPXJ1bGUucGFyc2VkU2VsZWN0b3I7dmFyIGlzUm9vdD10aGlzLl9jaGVja1Jvb3QoaG9zdFNjb3BlLHBhcnNlZFNlbGVjdG9yKTt2YXIgaXNIb3N0PSFpc1Jvb3QmJnBhcnNlZFNlbGVjdG9yLmluZGV4T2YoJzpob3N0Jyk9PT0wO3ZhciBjc3NCdWlsZD1zY29wZS5fX2Nzc0J1aWxkfHxzdHlsZS5fX2Nzc0J1aWxkO2lmKGNzc0J1aWxkPT09J3NoYWR5Jyl7aXNSb290PXBhcnNlZFNlbGVjdG9yPT09aG9zdFNjb3BlKycgPiAqLicraG9zdFNjb3BlfHxwYXJzZWRTZWxlY3Rvci5pbmRleE9mKCdodG1sJyk+LTE7aXNIb3N0PSFpc1Jvb3QmJnBhcnNlZFNlbGVjdG9yLmluZGV4T2YoaG9zdFNjb3BlKT09PTA7fQppZighaXNSb290JiYhaXNIb3N0KXtyZXR1cm47fQp2YXIgc2VsZWN0b3JUb01hdGNoPWhvc3RTY29wZTtpZihpc0hvc3Qpe2lmKHNldHRpbmdzLnVzZU5hdGl2ZVNoYWRvdyYmIXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvcil7cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yPXN0eWxlVHJhbnNmb3JtZXIuX3RyYW5zZm9ybVJ1bGVDc3MocnVsZSxzdHlsZVRyYW5zZm9ybWVyLl90cmFuc2Zvcm1Db21wbGV4U2VsZWN0b3Isc2NvcGUuaXMsaG9zdFNjb3BlKTt9CnNlbGVjdG9yVG9NYXRjaD1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3J8fHJ1bGUucGFyc2VkU2VsZWN0b3I7fQppZihpc1Jvb3QmJmhvc3RTY29wZT09PSdodG1sJyl7c2VsZWN0b3JUb01hdGNoPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvcnx8cnVsZS5wYXJzZWRTZWxlY3Rvcjt9CmNhbGxiYWNrKHtzZWxlY3RvcjpzZWxlY3RvclRvTWF0Y2gsaXNIb3N0OmlzSG9zdCxpc1Jvb3Q6aXNSb290fSk7fSxob3N0QW5kUm9vdFByb3BlcnRpZXNGb3JTY29wZTpmdW5jdGlvbihzY29wZSl7dmFyIGhvc3RQcm9wcz17fSxyb290UHJvcHM9e30sc2VsZj10aGlzO3N0eWxlVXRpbC5mb3JBY3RpdmVSdWxlc0luU3R5bGVzKHNjb3BlLl9zdHlsZXMsZnVuY3Rpb24ocnVsZSxzdHlsZSl7c2VsZi53aGVuSG9zdE9yUm9vdFJ1bGUoc2NvcGUscnVsZSxzdHlsZSxmdW5jdGlvbihpbmZvKXt2YXIgZWxlbWVudD1zY29wZS5fZWxlbWVudHx8c2NvcGU7aWYobWF0Y2hlc1NlbGVjdG9yLmNhbGwoZWxlbWVudCxpbmZvLnNlbGVjdG9yKSl7aWYoaW5mby5pc0hvc3Qpe3NlbGYuY29sbGVjdFByb3BlcnRpZXMocnVsZSxob3N0UHJvcHMpO31lbHNle3NlbGYuY29sbGVjdFByb3BlcnRpZXMocnVsZSxyb290UHJvcHMpO319fSk7fSk7cmV0dXJue3Jvb3RQcm9wczpyb290UHJvcHMsaG9zdFByb3BzOmhvc3RQcm9wc307fSx0cmFuc2Zvcm1TdHlsZXM6ZnVuY3Rpb24oZWxlbWVudCxwcm9wZXJ0aWVzLHNjb3BlU2VsZWN0b3Ipe3ZhciBzZWxmPXRoaXM7dmFyIGhvc3RTZWxlY3Rvcj1zdHlsZVRyYW5zZm9ybWVyLl9jYWxjSG9zdFNjb3BlKGVsZW1lbnQuaXMsZWxlbWVudC5leHRlbmRzKTt2YXIgcnhIb3N0U2VsZWN0b3I9ZWxlbWVudC5leHRlbmRzPydcXCcraG9zdFNlbGVjdG9yLnNsaWNlKDAsLTEpKydcXF0nOmhvc3RTZWxlY3Rvcjt2YXIgaG9zdFJ4PW5ldyBSZWdFeHAodGhpcy5yeC5IT1NUX1BSRUZJWCtyeEhvc3RTZWxlY3Rvcit0aGlzLnJ4LkhPU1RfU1VGRklYKTt2YXIga2V5ZnJhbWVUcmFuc2Zvcm1zPXRoaXMuX2VsZW1lbnRLZXlmcmFtZVRyYW5zZm9ybXMoZWxlbWVudCxzY29wZVNlbGVjdG9yKTtyZXR1cm4gc3R5bGVUcmFuc2Zvcm1lci5lbGVtZW50U3R5bGVzKGVsZW1lbnQsZnVuY3Rpb24ocnVsZSl7c2VsZi5hcHBseVByb3BlcnRpZXMocnVsZSxwcm9wZXJ0aWVzKTtpZighc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93JiYhUG9seW1lci5TdHlsZVV0aWwuaXNLZXlmcmFtZXNTZWxlY3RvcihydWxlKSYmcnVsZS5jc3NUZXh0KXtzZWxmLmFwcGx5S2V5ZnJhbWVUcmFuc2Zvcm1zKHJ1bGUsa2V5ZnJhbWVUcmFuc2Zvcm1zKTtzZWxmLl9zY29wZVNlbGVjdG9yKHJ1bGUsaG9zdFJ4LGhvc3RTZWxlY3RvcixlbGVtZW50Ll9zY29wZUNzc1ZpYUF0dHIsc2NvcGVTZWxlY3Rvcik7fX0pO30sX2VsZW1lbnRLZXlmcmFtZVRyYW5zZm9ybXM6ZnVuY3Rpb24oZWxlbWVudCxzY29wZVNlbGVjdG9yKXt2YXIga2V5ZnJhbWVzUnVsZXM9ZWxlbWVudC5fc3R5bGVzLl9rZXlmcmFtZXM7dmFyIGtleWZyYW1lVHJhbnNmb3Jtcz17fTtpZighc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93JiZrZXlmcmFtZXNSdWxlcyl7Zm9yKHZhciBpPTAsa2V5ZnJhbWVzUnVsZT1rZXlmcmFtZXNSdWxlc1tpXTtpPGtleWZyYW1lc1J1bGVzLmxlbmd0aDtrZXlmcmFtZXNSdWxlPWtleWZyYW1lc1J1bGVzWysraV0pe3RoaXMuX3Njb3BlS2V5ZnJhbWVzKGtleWZyYW1lc1J1bGUsc2NvcGVTZWxlY3Rvcik7a2V5ZnJhbWVUcmFuc2Zvcm1zW2tleWZyYW1lc1J1bGUua2V5ZnJhbWVzTmFtZV09dGhpcy5fa2V5ZnJhbWVzUnVsZVRyYW5zZm9ybWVyKGtleWZyYW1lc1J1bGUpO319CnJldHVybiBrZXlmcmFtZVRyYW5zZm9ybXM7fSxfa2V5ZnJhbWVzUnVsZVRyYW5zZm9ybWVyOmZ1bmN0aW9uKGtleWZyYW1lc1J1bGUpe3JldHVybiBmdW5jdGlvbihjc3NUZXh0KXtyZXR1cm4gY3NzVGV4dC5yZXBsYWNlKGtleWZyYW1lc1J1bGUua2V5ZnJhbWVzTmFtZVJ4LGtleWZyYW1lc1J1bGUudHJhbnNmb3JtZWRLZXlmcmFtZXNOYW1lKTt9O30sX3Njb3BlS2V5ZnJhbWVzOmZ1bmN0aW9uKHJ1bGUsc2NvcGVJZCl7cnVsZS5rZXlmcmFtZXNOYW1lUng9bmV3IFJlZ0V4cCgnXFxiJytydWxlLmtleWZyYW1lc05hbWUrJyg/IVxcQnwtKScsJ2cnKTtydWxlLnRyYW5zZm9ybWVkS2V5ZnJhbWVzTmFtZT1ydWxlLmtleWZyYW1lc05hbWUrJy0nK3Njb3BlSWQ7cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvcnx8cnVsZS5zZWxlY3RvcjtydWxlLnNlbGVjdG9yPXJ1bGUudHJhbnNmb3JtZWRTZWxlY3Rvci5yZXBsYWNlKHJ1bGUua2V5ZnJhbWVzTmFtZSxydWxlLnRyYW5zZm9ybWVkS2V5ZnJhbWVzTmFtZSk7fSxfaGFzRGlyT3JIb3N0Q29udGV4dDpmdW5jdGlvbihwYXJzZWRTZWxlY3Rvcil7cmV0dXJuLzpob3N0LWNvbnRleHR8OmRpci8udGVzdChwYXJzZWRTZWxlY3Rvcik7fSxfc2NvcGVTZWxlY3RvcjpmdW5jdGlvbihydWxlLGhvc3RSeCxob3N0U2VsZWN0b3IsdmlhQXR0cixzY29wZUlkKXtydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I9cnVsZS50cmFuc2Zvcm1lZFNlbGVjdG9yfHxydWxlLnNlbGVjdG9yO3ZhciBzZWxlY3Rvcj1ydWxlLnRyYW5zZm9ybWVkU2VsZWN0b3I7dmFyIHNjb3BlPXN0eWxlVHJhbnNmb3JtZXIuX2NhbGNFbGVtZW50U2NvcGUoc2NvcGVJZCx2aWFBdHRyKTt2YXIgaG9zdFNjb3BlPXN0eWxlVHJhbnNmb3JtZXIuX2NhbGNFbGVtZW50U2NvcGUoaG9zdFNlbGVjdG9yLHZpYUF0dHIpO3ZhciBwYXJ0cz1zZWxlY3Rvci5zcGxpdCgnLCcpO3ZhciBpc0Rpck9ySG9zdENvbnRleHRTZWxlY3Rvcj10aGlzLl9oYXNEaXJPckhvc3RDb250ZXh0KHJ1bGUucGFyc2VkU2VsZWN0b3IpO2Zvcih2YXIgaT0wLGw9cGFydHMubGVuZ3RoLHA7aTxsJiYocD1wYXJ0c1tpXSk7aSsrKXtwYXJ0c1tpXT1wLm1hdGNoKGhvc3RSeCk/cC5yZXBsYWNlKGhvc3RTZWxlY3RvcixzY29wZSk6aXNEaXJPckhvc3RDb250ZXh0U2VsZWN0b3I/cC5yZXBsYWNlKGhvc3RTY29wZSxzY29wZSsnICcraG9zdFNjb3BlKTpzY29wZSsnICcrcDt9CnJ1bGUuc2VsZWN0b3I9cGFydHMuam9pbignLCcpO30sYXBwbHlFbGVtZW50U2NvcGVTZWxlY3RvcjpmdW5jdGlvbihlbGVtZW50LHNlbGVjdG9yLG9sZCx2aWFBdHRyKXt2YXIgYz12aWFBdHRyP2VsZW1lbnQuZ2V0QXR0cmlidXRlKHN0eWxlVHJhbnNmb3JtZXIuU0NPUEVfTkFNRSk6ZWxlbWVudC5nZXRBdHRyaWJ1dGUoJ2NsYXNzJyl8fCcnO3ZhciB2PW9sZD9jLnJlcGxhY2Uob2xkLHNlbGVjdG9yKTooYz9jKycgJzonJykrdGhpcy5YU0NPUEVfTkFNRSsnICcrc2VsZWN0b3I7aWYoYyE9PXYpe2lmKHZpYUF0dHIpe2VsZW1lbnQuc2V0QXR0cmlidXRlKHN0eWxlVHJhbnNmb3JtZXIuU0NPUEVfTkFNRSx2KTt9ZWxzZXtlbGVtZW50LnNldEF0dHJpYnV0ZSgnY2xhc3MnLHYpO319fSxhcHBseUVsZW1lbnRTdHlsZTpmdW5jdGlvbihlbGVtZW50LHByb3BlcnRpZXMsc2VsZWN0b3Isc3R5bGUpe3ZhciBjc3NUZXh0PXN0eWxlP3N0eWxlLnRleHRDb250ZW50fHwnJzp0aGlzLnRyYW5zZm9ybVN0eWxlcyhlbGVtZW50LHByb3BlcnRpZXMsc2VsZWN0b3IpO3ZhciBzPWVsZW1lbnQuX2N1c3RvbVN0eWxlO2lmKHMmJiFzZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cmJnMhPT1zdHlsZSl7cy5fdXNlQ291bnQtLTtpZihzLl91c2VDb3VudDw9MCYmcy5wYXJlbnROb2RlKXtzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQocyk7fX0KaWYoc2V0dGluZ3MudXNlTmF0aXZlU2hhZG93KXtpZihlbGVtZW50Ll9jdXN0b21TdHlsZSl7ZWxlbWVudC5fY3VzdG9tU3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDtzdHlsZT1lbGVtZW50Ll9jdXN0b21TdHlsZTt9ZWxzZSBpZihjc3NUZXh0KXtzdHlsZT1zdHlsZVV0aWwuYXBwbHlDc3MoY3NzVGV4dCxzZWxlY3RvcixlbGVtZW50LnJvb3QsZWxlbWVudC5fc2NvcGVTdHlsZSk7fX1lbHNle2lmKCFzdHlsZSl7aWYoY3NzVGV4dCl7c3R5bGU9c3R5bGVVdGlsLmFwcGx5Q3NzKGNzc1RleHQsc2VsZWN0b3IsbnVsbCxlbGVtZW50Ll9zY29wZVN0eWxlKTt9fWVsc2UgaWYoIXN0eWxlLnBhcmVudE5vZGUpe2lmKElTX0lFJiZjc3NUZXh0LmluZGV4T2YoJ0BtZWRpYScpPi0xKXtzdHlsZS50ZXh0Q29udGVudD1jc3NUZXh0O30Kc3R5bGVVdGlsLmFwcGx5U3R5bGUoc3R5bGUsbnVsbCxlbGVtZW50Ll9zY29wZVN0eWxlKTt9fQppZihzdHlsZSl7c3R5bGUuX3VzZUNvdW50PXN0eWxlLl91c2VDb3VudHx8MDtpZihlbGVtZW50Ll9jdXN0b21TdHlsZSE9c3R5bGUpe3N0eWxlLl91c2VDb3VudCsrO30KZWxlbWVudC5fY3VzdG9tU3R5bGU9c3R5bGU7fQpyZXR1cm4gc3R5bGU7fSxtaXhpbkN1c3RvbVN0eWxlOmZ1bmN0aW9uKHByb3BzLGN1c3RvbVN0eWxlKXt2YXIgdjtmb3IodmFyIGkgaW4gY3VzdG9tU3R5bGUpe3Y9Y3VzdG9tU3R5bGVbaV07aWYodnx8dj09PTApe3Byb3BzW2ldPXY7fX19LHVwZGF0ZU5hdGl2ZVN0eWxlUHJvcGVydGllczpmdW5jdGlvbihlbGVtZW50LHByb3BlcnRpZXMpe3ZhciBvbGRQcm9wZXJ0eU5hbWVzPWVsZW1lbnQuX19jdXN0b21TdHlsZVByb3BlcnRpZXM7aWYob2xkUHJvcGVydHlOYW1lcyl7Zm9yKHZhciBpPTA7aTxvbGRQcm9wZXJ0eU5hbWVzLmxlbmd0aDtpKyspe2VsZW1lbnQuc3R5bGUucmVtb3ZlUHJvcGVydHkob2xkUHJvcGVydHlOYW1lc1tpXSk7fX0KdmFyIHByb3BlcnR5TmFtZXM9W107Zm9yKHZhciBwIGluIHByb3BlcnRpZXMpe2lmKHByb3BlcnRpZXNbcF0hPT1udWxsKXtlbGVtZW50LnN0eWxlLnNldFByb3BlcnR5KHAscHJvcGVydGllc1twXSk7cHJvcGVydHlOYW1lcy5wdXNoKHApO319CmVsZW1lbnQuX19jdXN0b21TdHlsZVByb3BlcnRpZXM9cHJvcGVydHlOYW1lczt9LHJ4OnN0eWxlVXRpbC5yeCxYU0NPUEVfTkFNRToneC1zY29wZSd9O2Z1bmN0aW9uIGFkZFRvQml0TWFzayhuLGJpdHMpe3ZhciBvPXBhcnNlSW50KG4vMzIpO3ZhciB2PTE8PG4lMzI7Yml0c1tvXT0oYml0c1tvXXx8MCl8djt9fSgpOyhmdW5jdGlvbigpe1BvbHltZXIuU3R5bGVDYWNoZT1mdW5jdGlvbigpe3RoaXMuY2FjaGU9e307fTtQb2x5bWVyLlN0eWxlQ2FjaGUucHJvdG90eXBlPXtNQVg6MTAwLHN0b3JlOmZ1bmN0aW9uKGlzLGRhdGEsa2V5VmFsdWVzLGtleVN0eWxlcyl7ZGF0YS5rZXlWYWx1ZXM9a2V5VmFsdWVzO2RhdGEuc3R5bGVzPWtleVN0eWxlczt2YXIgcyQ9dGhpcy5jYWNoZVtpc109dGhpcy5jYWNoZVtpc118fFtdO3MkLnB1c2goZGF0YSk7aWYocyQubGVuZ3RoPnRoaXMuTUFYKXtzJC5zaGlmdCgpO319LHJldHJpZXZlOmZ1bmN0aW9uKGlzLGtleVZhbHVlcyxrZXlTdHlsZXMpe3ZhciBjYWNoZT10aGlzLmNhY2hlW2lzXTtpZihjYWNoZSl7Zm9yKHZhciBpPWNhY2hlLmxlbmd0aC0xLGRhdGE7aT49MDtpLS0pe2RhdGE9Y2FjaGVbaV07aWYoa2V5U3R5bGVzPT09ZGF0YS5zdHlsZXMmJnRoaXMuX29iamVjdHNFcXVhbChrZXlWYWx1ZXMsZGF0YS5rZXlWYWx1ZXMpKXtyZXR1cm4gZGF0YTt9fX19LGNsZWFyOmZ1bmN0aW9uKCl7dGhpcy5jYWNoZT17fTt9LF9vYmplY3RzRXF1YWw6ZnVuY3Rpb24odGFyZ2V0LHNvdXJjZSl7dmFyIHQscztmb3IodmFyIGkgaW4gdGFyZ2V0KXt0PXRhcmdldFtpXSxzPXNvdXJjZVtpXTtpZighKHR5cGVvZiB0PT09J29iamVjdCcmJnQ/dGhpcy5fb2JqZWN0c1N0cmljdGx5RXF1YWwodCxzKTp0PT09cykpe3JldHVybiBmYWxzZTt9fQppZihBcnJheS5pc0FycmF5KHRhcmdldCkpe3JldHVybiB0YXJnZXQubGVuZ3RoPT09c291cmNlLmxlbmd0aDt9CnJldHVybiB0cnVlO30sX29iamVjdHNTdHJpY3RseUVxdWFsOmZ1bmN0aW9uKHRhcmdldCxzb3VyY2Upe3JldHVybiB0aGlzLl9vYmplY3RzRXF1YWwodGFyZ2V0LHNvdXJjZSkmJnRoaXMuX29iamVjdHNFcXVhbChzb3VyY2UsdGFyZ2V0KTt9fTt9KCkpO1BvbHltZXIuU3R5bGVEZWZhdWx0cz1mdW5jdGlvbigpe3ZhciBzdHlsZVByb3BlcnRpZXM9UG9seW1lci5TdHlsZVByb3BlcnRpZXM7dmFyIFN0eWxlQ2FjaGU9UG9seW1lci5TdHlsZUNhY2hlO3ZhciBuYXRpdmVWYXJpYWJsZXM9UG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzO3ZhciBhcGk9e19zdHlsZXM6W10sX3Byb3BlcnRpZXM6bnVsbCxjdXN0b21TdHlsZTp7fSxfc3R5bGVDYWNoZTpuZXcgU3R5bGVDYWNoZSgpLF9lbGVtZW50OlBvbHltZXIuRG9tQXBpLndyYXAoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50KSxhZGRTdHlsZTpmdW5jdGlvbihzdHlsZSl7dGhpcy5fc3R5bGVzLnB1c2goc3R5bGUpO3RoaXMuX3Byb3BlcnRpZXM9bnVsbDt9LGdldCBfc3R5bGVQcm9wZXJ0aWVzKCl7aWYoIXRoaXMuX3Byb3BlcnRpZXMpe3N0eWxlUHJvcGVydGllcy5kZWNvcmF0ZVN0eWxlcyh0aGlzLl9zdHlsZXMsdGhpcyk7dGhpcy5fc3R5bGVzLl9zY29wZVN0eWxlUHJvcGVydGllcz1udWxsO3RoaXMuX3Byb3BlcnRpZXM9c3R5bGVQcm9wZXJ0aWVzLmhvc3RBbmRSb290UHJvcGVydGllc0ZvclNjb3BlKHRoaXMpLnJvb3RQcm9wcztzdHlsZVByb3BlcnRpZXMubWl4aW5DdXN0b21TdHlsZSh0aGlzLl9wcm9wZXJ0aWVzLHRoaXMuY3VzdG9tU3R5bGUpO3N0eWxlUHJvcGVydGllcy5yZWlmeSh0aGlzLl9wcm9wZXJ0aWVzKTt9CnJldHVybiB0aGlzLl9wcm9wZXJ0aWVzO30saGFzU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4odGhpcy5fcHJvcGVydGllcyk7fSxfbmVlZHNTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXt9LF9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0eWxlUHJvcGVydGllczt9LHVwZGF0ZVN0eWxlczpmdW5jdGlvbihwcm9wZXJ0aWVzKXt0aGlzLl9wcm9wZXJ0aWVzPW51bGw7aWYocHJvcGVydGllcyl7UG9seW1lci5CYXNlLm1peGluKHRoaXMuY3VzdG9tU3R5bGUscHJvcGVydGllcyk7fQp0aGlzLl9zdHlsZUNhY2hlLmNsZWFyKCk7Zm9yKHZhciBpPTAscztpPHRoaXMuX3N0eWxlcy5sZW5ndGg7aSsrKXtzPXRoaXMuX3N0eWxlc1tpXTtzPXMuX19pbXBvcnRFbGVtZW50fHxzO3MuX2FwcGx5KCk7fQppZihuYXRpdmVWYXJpYWJsZXMpe3N0eWxlUHJvcGVydGllcy51cGRhdGVOYXRpdmVTdHlsZVByb3BlcnRpZXMoZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHRoaXMuY3VzdG9tU3R5bGUpO319fTtyZXR1cm4gYXBpO30oKTsoZnVuY3Rpb24oKXsndXNlIHN0cmljdCc7dmFyIHNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGU9UG9seW1lci5CYXNlLnNlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGU7dmFyIHByb3BlcnR5VXRpbHM9UG9seW1lci5TdHlsZVByb3BlcnRpZXM7dmFyIHN0eWxlVHJhbnNmb3JtZXI9UG9seW1lci5TdHlsZVRyYW5zZm9ybWVyO3ZhciBzdHlsZURlZmF1bHRzPVBvbHltZXIuU3R5bGVEZWZhdWx0czt2YXIgbmF0aXZlU2hhZG93PVBvbHltZXIuU2V0dGluZ3MudXNlTmF0aXZlU2hhZG93O3ZhciBuYXRpdmVWYXJpYWJsZXM9UG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzO1BvbHltZXIuQmFzZS5fYWRkRmVhdHVyZSh7X3ByZXBTdHlsZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXtpZighbmF0aXZlVmFyaWFibGVzKXt0aGlzLl9vd25TdHlsZVByb3BlcnR5TmFtZXM9dGhpcy5fc3R5bGVzJiZ0aGlzLl9zdHlsZXMubGVuZ3RoP3Byb3BlcnR5VXRpbHMuZGVjb3JhdGVTdHlsZXModGhpcy5fc3R5bGVzLHRoaXMpOm51bGw7fX0sY3VzdG9tU3R5bGU6bnVsbCxnZXRDb21wdXRlZFN0eWxlVmFsdWU6ZnVuY3Rpb24ocHJvcGVydHkpe2lmKCFuYXRpdmVWYXJpYWJsZXMmJiF0aGlzLl9zdHlsZVByb3BlcnRpZXMpe3RoaXMuX2NvbXB1dGVTdHlsZVByb3BlcnRpZXMoKTt9CnJldHVybiFuYXRpdmVWYXJpYWJsZXMmJnRoaXMuX3N0eWxlUHJvcGVydGllcyYmdGhpcy5fc3R5bGVQcm9wZXJ0aWVzW3Byb3BlcnR5XXx8Z2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5nZXRQcm9wZXJ0eVZhbHVlKHByb3BlcnR5KTt9LF9zZXR1cFN0eWxlUHJvcGVydGllczpmdW5jdGlvbigpe3RoaXMuY3VzdG9tU3R5bGU9e307dGhpcy5fc3R5bGVDYWNoZT1udWxsO3RoaXMuX3N0eWxlUHJvcGVydGllcz1udWxsO3RoaXMuX3Njb3BlU2VsZWN0b3I9bnVsbDt0aGlzLl9vd25TdHlsZVByb3BlcnRpZXM9bnVsbDt0aGlzLl9jdXN0b21TdHlsZT1udWxsO30sX25lZWRzU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7cmV0dXJuIEJvb2xlYW4oIW5hdGl2ZVZhcmlhYmxlcyYmdGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzJiZ0aGlzLl9vd25TdHlsZVByb3BlcnR5TmFtZXMubGVuZ3RoKTt9LF92YWxpZGF0ZUFwcGx5U2hpbTpmdW5jdGlvbigpe2lmKHRoaXMuX19hcHBseVNoaW1JbnZhbGlkKXtQb2x5bWVyLkFwcGx5U2hpbS50cmFuc2Zvcm0odGhpcy5fc3R5bGVzLHRoaXMuX19wcm90b19fKTt2YXIgY3NzVGV4dD1zdHlsZVRyYW5zZm9ybWVyLmVsZW1lbnRTdHlsZXModGhpcyk7aWYobmF0aXZlU2hhZG93KXt2YXIgdGVtcGxhdGVTdHlsZT10aGlzLl90ZW1wbGF0ZS5jb250ZW50LnF1ZXJ5U2VsZWN0b3IoJ3N0eWxlJyk7aWYodGVtcGxhdGVTdHlsZSl7dGVtcGxhdGVTdHlsZS50ZXh0Q29udGVudD1jc3NUZXh0O319ZWxzZXt2YXIgc2hhZHlTdHlsZT10aGlzLl9zY29wZVN0eWxlJiZ0aGlzLl9zY29wZVN0eWxlLm5leHRTaWJsaW5nO2lmKHNoYWR5U3R5bGUpe3NoYWR5U3R5bGUudGV4dENvbnRlbnQ9Y3NzVGV4dDt9fX19LF9iZWZvcmVBdHRhY2hlZDpmdW5jdGlvbigpe2lmKCghdGhpcy5fc2NvcGVTZWxlY3Rvcnx8dGhpcy5fX3N0eWxlUHJvcGVydGllc0ludmFsaWQpJiZ0aGlzLl9uZWVkc1N0eWxlUHJvcGVydGllcygpKXt0aGlzLl9fc3R5bGVQcm9wZXJ0aWVzSW52YWxpZD1mYWxzZTt0aGlzLl91cGRhdGVTdHlsZVByb3BlcnRpZXMoKTt9fSxfZmluZFN0eWxlSG9zdDpmdW5jdGlvbigpe3ZhciBlPXRoaXMscm9vdDt3aGlsZShyb290PVBvbHltZXIuZG9tKGUpLmdldE93bmVyUm9vdCgpKXtpZihQb2x5bWVyLmlzSW5zdGFuY2Uocm9vdC5ob3N0KSl7cmV0dXJuIHJvb3QuaG9zdDt9CmU9cm9vdC5ob3N0O30KcmV0dXJuIHN0eWxlRGVmYXVsdHM7fSxfdXBkYXRlU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKCl7dmFyIGluZm8sc2NvcGU9dGhpcy5fZmluZFN0eWxlSG9zdCgpO2lmKCFzY29wZS5fc3R5bGVQcm9wZXJ0aWVzKXtzY29wZS5fY29tcHV0ZVN0eWxlUHJvcGVydGllcygpO30KaWYoIXNjb3BlLl9zdHlsZUNhY2hlKXtzY29wZS5fc3R5bGVDYWNoZT1uZXcgUG9seW1lci5TdHlsZUNhY2hlKCk7fQp2YXIgc2NvcGVEYXRhPXByb3BlcnR5VXRpbHMucHJvcGVydHlEYXRhRnJvbVN0eWxlcyhzY29wZS5fc3R5bGVzLHRoaXMpO3ZhciBzY29wZUNhY2hlYWJsZT0hdGhpcy5fX25vdFN0eWxlU2NvcGVDYWNoZWFibGU7aWYoc2NvcGVDYWNoZWFibGUpe3Njb3BlRGF0YS5rZXkuY3VzdG9tU3R5bGU9dGhpcy5jdXN0b21TdHlsZTtpbmZvPXNjb3BlLl9zdHlsZUNhY2hlLnJldHJpZXZlKHRoaXMuaXMsc2NvcGVEYXRhLmtleSx0aGlzLl9zdHlsZXMpO30KdmFyIHNjb3BlQ2FjaGVkPUJvb2xlYW4oaW5mbyk7aWYoc2NvcGVDYWNoZWQpe3RoaXMuX3N0eWxlUHJvcGVydGllcz1pbmZvLl9zdHlsZVByb3BlcnRpZXM7fWVsc2V7dGhpcy5fY29tcHV0ZVN0eWxlUHJvcGVydGllcyhzY29wZURhdGEucHJvcGVydGllcyk7fQp0aGlzLl9jb21wdXRlT3duU3R5bGVQcm9wZXJ0aWVzKCk7aWYoIXNjb3BlQ2FjaGVkKXtpbmZvPXN0eWxlQ2FjaGUucmV0cmlldmUodGhpcy5pcyx0aGlzLl9vd25TdHlsZVByb3BlcnRpZXMsdGhpcy5fc3R5bGVzKTt9CnZhciBnbG9iYWxDYWNoZWQ9Qm9vbGVhbihpbmZvKSYmIXNjb3BlQ2FjaGVkO3ZhciBzdHlsZT10aGlzLl9hcHBseVN0eWxlUHJvcGVydGllcyhpbmZvKTtpZighc2NvcGVDYWNoZWQpe3N0eWxlPXN0eWxlJiZuYXRpdmVTaGFkb3c/c3R5bGUuY2xvbmVOb2RlKHRydWUpOnN0eWxlO2luZm89e3N0eWxlOnN0eWxlLF9zY29wZVNlbGVjdG9yOnRoaXMuX3Njb3BlU2VsZWN0b3IsX3N0eWxlUHJvcGVydGllczp0aGlzLl9zdHlsZVByb3BlcnRpZXN9O2lmKHNjb3BlQ2FjaGVhYmxlKXtzY29wZURhdGEua2V5LmN1c3RvbVN0eWxlPXt9O3RoaXMubWl4aW4oc2NvcGVEYXRhLmtleS5jdXN0b21TdHlsZSx0aGlzLmN1c3RvbVN0eWxlKTtzY29wZS5fc3R5bGVDYWNoZS5zdG9yZSh0aGlzLmlzLGluZm8sc2NvcGVEYXRhLmtleSx0aGlzLl9zdHlsZXMpO30KaWYoIWdsb2JhbENhY2hlZCl7c3R5bGVDYWNoZS5zdG9yZSh0aGlzLmlzLE9iamVjdC5jcmVhdGUoaW5mbyksdGhpcy5fb3duU3R5bGVQcm9wZXJ0aWVzLHRoaXMuX3N0eWxlcyk7fX19LF9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKHNjb3BlUHJvcHMpe3ZhciBzY29wZT10aGlzLl9maW5kU3R5bGVIb3N0KCk7aWYoIXNjb3BlLl9zdHlsZVByb3BlcnRpZXMpe3Njb3BlLl9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzKCk7fQp2YXIgcHJvcHM9T2JqZWN0LmNyZWF0ZShzY29wZS5fc3R5bGVQcm9wZXJ0aWVzKTt2YXIgaG9zdEFuZFJvb3RQcm9wcz1wcm9wZXJ0eVV0aWxzLmhvc3RBbmRSb290UHJvcGVydGllc0ZvclNjb3BlKHRoaXMpO3RoaXMubWl4aW4ocHJvcHMsaG9zdEFuZFJvb3RQcm9wcy5ob3N0UHJvcHMpO3Njb3BlUHJvcHM9c2NvcGVQcm9wc3x8cHJvcGVydHlVdGlscy5wcm9wZXJ0eURhdGFGcm9tU3R5bGVzKHNjb3BlLl9zdHlsZXMsdGhpcykucHJvcGVydGllczt0aGlzLm1peGluKHByb3BzLHNjb3BlUHJvcHMpO3RoaXMubWl4aW4ocHJvcHMsaG9zdEFuZFJvb3RQcm9wcy5yb290UHJvcHMpO3Byb3BlcnR5VXRpbHMubWl4aW5DdXN0b21TdHlsZShwcm9wcyx0aGlzLmN1c3RvbVN0eWxlKTtwcm9wZXJ0eVV0aWxzLnJlaWZ5KHByb3BzKTt0aGlzLl9zdHlsZVByb3BlcnRpZXM9cHJvcHM7fSxfY29tcHV0ZU93blN0eWxlUHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBwcm9wcz17fTtmb3IodmFyIGk9MCxuO2k8dGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzLmxlbmd0aDtpKyspe249dGhpcy5fb3duU3R5bGVQcm9wZXJ0eU5hbWVzW2ldO3Byb3BzW25dPXRoaXMuX3N0eWxlUHJvcGVydGllc1tuXTt9CnRoaXMuX293blN0eWxlUHJvcGVydGllcz1wcm9wczt9LF9zY29wZUNvdW50OjAsX2FwcGx5U3R5bGVQcm9wZXJ0aWVzOmZ1bmN0aW9uKGluZm8pe3ZhciBvbGRTY29wZVNlbGVjdG9yPXRoaXMuX3Njb3BlU2VsZWN0b3I7dGhpcy5fc2NvcGVTZWxlY3Rvcj1pbmZvP2luZm8uX3Njb3BlU2VsZWN0b3I6dGhpcy5pcysnLScrdGhpcy5fX3Byb3RvX18uX3Njb3BlQ291bnQrKzt2YXIgc3R5bGU9cHJvcGVydHlVdGlscy5hcHBseUVsZW1lbnRTdHlsZSh0aGlzLHRoaXMuX3N0eWxlUHJvcGVydGllcyx0aGlzLl9zY29wZVNlbGVjdG9yLGluZm8mJmluZm8uc3R5bGUpO2lmKCFuYXRpdmVTaGFkb3cpe3Byb3BlcnR5VXRpbHMuYXBwbHlFbGVtZW50U2NvcGVTZWxlY3Rvcih0aGlzLHRoaXMuX3Njb3BlU2VsZWN0b3Isb2xkU2NvcGVTZWxlY3Rvcix0aGlzLl9zY29wZUNzc1ZpYUF0dHIpO30KcmV0dXJuIHN0eWxlO30sc2VyaWFsaXplVmFsdWVUb0F0dHJpYnV0ZTpmdW5jdGlvbih2YWx1ZSxhdHRyaWJ1dGUsbm9kZSl7bm9kZT1ub2RlfHx0aGlzO2lmKGF0dHJpYnV0ZT09PSdjbGFzcycmJiFuYXRpdmVTaGFkb3cpe3ZhciBob3N0PW5vZGU9PT10aGlzP3RoaXMuZG9tSG9zdHx8dGhpcy5kYXRhSG9zdDp0aGlzO2lmKGhvc3Qpe3ZhbHVlPWhvc3QuX3Njb3BlRWxlbWVudENsYXNzKG5vZGUsdmFsdWUpO319Cm5vZGU9dGhpcy5zaGFkeVJvb3QmJnRoaXMuc2hhZHlSb290Ll9oYXNEaXN0cmlidXRlZD9Qb2x5bWVyLmRvbShub2RlKTpub2RlO3NlcmlhbGl6ZVZhbHVlVG9BdHRyaWJ1dGUuY2FsbCh0aGlzLHZhbHVlLGF0dHJpYnV0ZSxub2RlKTt9LF9zY29wZUVsZW1lbnRDbGFzczpmdW5jdGlvbihlbGVtZW50LHNlbGVjdG9yKXtpZighbmF0aXZlU2hhZG93JiYhdGhpcy5fc2NvcGVDc3NWaWFBdHRyKXtzZWxlY3Rvcj0oc2VsZWN0b3I/c2VsZWN0b3IrJyAnOicnKStTQ09QRV9OQU1FKycgJyt0aGlzLmlzKyhlbGVtZW50Ll9zY29wZVNlbGVjdG9yPycgJytYU0NPUEVfTkFNRSsnICcrZWxlbWVudC5fc2NvcGVTZWxlY3RvcjonJyk7fQpyZXR1cm4gc2VsZWN0b3I7fSx1cGRhdGVTdHlsZXM6ZnVuY3Rpb24ocHJvcGVydGllcyl7aWYocHJvcGVydGllcyl7dGhpcy5taXhpbih0aGlzLmN1c3RvbVN0eWxlLHByb3BlcnRpZXMpO30KaWYobmF0aXZlVmFyaWFibGVzKXtwcm9wZXJ0eVV0aWxzLnVwZGF0ZU5hdGl2ZVN0eWxlUHJvcGVydGllcyh0aGlzLHRoaXMuY3VzdG9tU3R5bGUpO31lbHNle2lmKHRoaXMuaXNBdHRhY2hlZCl7aWYodGhpcy5fbmVlZHNTdHlsZVByb3BlcnRpZXMoKSl7dGhpcy5fdXBkYXRlU3R5bGVQcm9wZXJ0aWVzKCk7fWVsc2V7dGhpcy5fc3R5bGVQcm9wZXJ0aWVzPW51bGw7fX1lbHNle3RoaXMuX19zdHlsZVByb3BlcnRpZXNJbnZhbGlkPXRydWU7fQppZih0aGlzLl9zdHlsZUNhY2hlKXt0aGlzLl9zdHlsZUNhY2hlLmNsZWFyKCk7fQp0aGlzLl91cGRhdGVSb290U3R5bGVzKCk7fX0sX3VwZGF0ZVJvb3RTdHlsZXM6ZnVuY3Rpb24ocm9vdCl7cm9vdD1yb290fHx0aGlzLnJvb3Q7dmFyIGMkPVBvbHltZXIuZG9tKHJvb3QpLl9xdWVyeShmdW5jdGlvbihlKXtyZXR1cm4gZS5zaGFkeVJvb3R8fGUuc2hhZG93Um9vdDt9KTtmb3IodmFyIGk9MCxsPWMkLmxlbmd0aCxjO2k8bCYmKGM9YyRbaV0pO2krKyl7aWYoYy51cGRhdGVTdHlsZXMpe2MudXBkYXRlU3R5bGVzKCk7fX19fSk7UG9seW1lci51cGRhdGVTdHlsZXM9ZnVuY3Rpb24ocHJvcGVydGllcyl7c3R5bGVEZWZhdWx0cy51cGRhdGVTdHlsZXMocHJvcGVydGllcyk7UG9seW1lci5CYXNlLl91cGRhdGVSb290U3R5bGVzKGRvY3VtZW50KTt9O3ZhciBzdHlsZUNhY2hlPW5ldyBQb2x5bWVyLlN0eWxlQ2FjaGUoKTtQb2x5bWVyLmN1c3RvbVN0eWxlQ2FjaGU9c3R5bGVDYWNoZTt2YXIgU0NPUEVfTkFNRT1zdHlsZVRyYW5zZm9ybWVyLlNDT1BFX05BTUU7dmFyIFhTQ09QRV9OQU1FPXByb3BlcnR5VXRpbHMuWFNDT1BFX05BTUU7fSgpKTtQb2x5bWVyLkJhc2UuX2FkZEZlYXR1cmUoe19yZWdpc3RlckZlYXR1cmVzOmZ1bmN0aW9uKCl7dGhpcy5fcHJlcElzKCk7aWYodGhpcy5mYWN0b3J5SW1wbCl7dGhpcy5fcHJlcENvbnN0cnVjdG9yKCk7fQp0aGlzLl9wcmVwU3R5bGVzKCk7fSxfZmluaXNoUmVnaXN0ZXJGZWF0dXJlczpmdW5jdGlvbigpe3RoaXMuX3ByZXBUZW1wbGF0ZSgpO3RoaXMuX3ByZXBTaGltU3R5bGVzKCk7dGhpcy5fcHJlcEFubm90YXRpb25zKCk7dGhpcy5fcHJlcEVmZmVjdHMoKTt0aGlzLl9wcmVwQmVoYXZpb3JzKCk7dGhpcy5fcHJlcFByb3BlcnR5SW5mbygpO3RoaXMuX3ByZXBCaW5kaW5ncygpO3RoaXMuX3ByZXBTaGFkeSgpO30sX3ByZXBCZWhhdmlvcjpmdW5jdGlvbihiKXt0aGlzLl9hZGRQcm9wZXJ0eUVmZmVjdHMoYi5wcm9wZXJ0aWVzKTt0aGlzLl9hZGRDb21wbGV4T2JzZXJ2ZXJFZmZlY3RzKGIub2JzZXJ2ZXJzKTt0aGlzLl9hZGRIb3N0QXR0cmlidXRlcyhiLmhvc3RBdHRyaWJ1dGVzKTt9LF9pbml0RmVhdHVyZXM6ZnVuY3Rpb24oKXt0aGlzLl9zZXR1cEdlc3R1cmVzKCk7dGhpcy5fc2V0dXBDb25maWd1cmUodGhpcy5fX2RhdGFfXyk7dGhpcy5fc2V0dXBTdHlsZVByb3BlcnRpZXMoKTt0aGlzLl9zZXR1cERlYm91bmNlcnMoKTt0aGlzLl9zZXR1cFNoYWR5KCk7dGhpcy5fcmVnaXN0ZXJIb3N0KCk7aWYodGhpcy5fdGVtcGxhdGUpe3RoaXMuX3ZhbGlkYXRlQXBwbHlTaGltKCk7dGhpcy5fcG9vbENvbnRlbnQoKTt0aGlzLl9iZWdpbkhvc3RpbmcoKTt0aGlzLl9zdGFtcFRlbXBsYXRlKCk7dGhpcy5fZW5kSG9zdGluZygpO3RoaXMuX21hcnNoYWxBbm5vdGF0aW9uUmVmZXJlbmNlcygpO30KdGhpcy5fbWFyc2hhbEluc3RhbmNlRWZmZWN0cygpO3RoaXMuX21hcnNoYWxCZWhhdmlvcnMoKTt0aGlzLl9tYXJzaGFsSG9zdEF0dHJpYnV0ZXMoKTt0aGlzLl9tYXJzaGFsQXR0cmlidXRlcygpO3RoaXMuX3RyeVJlYWR5KCk7fSxfbWFyc2hhbEJlaGF2aW9yOmZ1bmN0aW9uKGIpe2lmKGIubGlzdGVuZXJzKXt0aGlzLl9saXN0ZW5MaXN0ZW5lcnMoYi5saXN0ZW5lcnMpO319fSk7KGZ1bmN0aW9uKCl7dmFyIHByb3BlcnR5VXRpbHM9UG9seW1lci5TdHlsZVByb3BlcnRpZXM7dmFyIHN0eWxlVXRpbD1Qb2x5bWVyLlN0eWxlVXRpbDt2YXIgY3NzUGFyc2U9UG9seW1lci5Dc3NQYXJzZTt2YXIgc3R5bGVEZWZhdWx0cz1Qb2x5bWVyLlN0eWxlRGVmYXVsdHM7dmFyIHN0eWxlVHJhbnNmb3JtZXI9UG9seW1lci5TdHlsZVRyYW5zZm9ybWVyO3ZhciBhcHBseVNoaW09UG9seW1lci5BcHBseVNoaW07dmFyIGRlYm91bmNlPVBvbHltZXIuRGVib3VuY2U7dmFyIHNldHRpbmdzPVBvbHltZXIuU2V0dGluZ3M7dmFyIHVwZGF0ZURlYm91bmNlcjtQb2x5bWVyKHtpczonY3VzdG9tLXN0eWxlJyxleHRlbmRzOidzdHlsZScsX3RlbXBsYXRlOm51bGwscHJvcGVydGllczp7aW5jbHVkZTpTdHJpbmd9LHJlYWR5OmZ1bmN0aW9uKCl7dGhpcy5fX2FwcGxpZWRFbGVtZW50PXRoaXMuX19hcHBsaWVkRWxlbWVudHx8dGhpczt0aGlzLl9fY3NzQnVpbGQ9c3R5bGVVdGlsLmdldENzc0J1aWxkVHlwZSh0aGlzKTtpZih0aGlzLl9fYXBwbGllZEVsZW1lbnQhPT10aGlzKXt0aGlzLl9fYXBwbGllZEVsZW1lbnQuX19jc3NCdWlsZD10aGlzLl9fY3NzQnVpbGQ7fQppZih0aGlzLm93bmVyRG9jdW1lbnQhPT13aW5kb3cuZG9jdW1lbnQmJnRoaXMuX19hcHBsaWVkRWxlbWVudD09PXRoaXMpe2RvY3VtZW50LmhlYWQuYXBwZW5kQ2hpbGQodGhpcyk7fQp0aGlzLl90cnlBcHBseSgpO30sYXR0YWNoZWQ6ZnVuY3Rpb24oKXt0aGlzLl90cnlBcHBseSgpO30sX3RyeUFwcGx5OmZ1bmN0aW9uKCl7aWYoIXRoaXMuX2FwcGxpZXNUb0RvY3VtZW50KXtpZih0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5sb2NhbE5hbWUhPT0nZG9tLW1vZHVsZScpe3RoaXMuX2FwcGxpZXNUb0RvY3VtZW50PXRydWU7dmFyIGU9dGhpcy5fX2FwcGxpZWRFbGVtZW50O2lmKCFzZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzKXt0aGlzLl9fbmVlZHNVcGRhdGVTdHlsZXM9c3R5bGVEZWZhdWx0cy5oYXNTdHlsZVByb3BlcnRpZXMoKTtzdHlsZURlZmF1bHRzLmFkZFN0eWxlKGUpO30KaWYoZS50ZXh0Q29udGVudHx8dGhpcy5pbmNsdWRlKXt0aGlzLl9hcHBseSh0cnVlKTt9ZWxzZXt2YXIgc2VsZj10aGlzO3ZhciBvYnNlcnZlcj1uZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbigpe29ic2VydmVyLmRpc2Nvbm5lY3QoKTtzZWxmLl9hcHBseSh0cnVlKTt9KTtvYnNlcnZlci5vYnNlcnZlKGUse2NoaWxkTGlzdDp0cnVlfSk7fX19fSxfdXBkYXRlU3R5bGVzOmZ1bmN0aW9uKCl7UG9seW1lci51cGRhdGVTdHlsZXMoKTt9LF9hcHBseTpmdW5jdGlvbihpbml0aWFsQXBwbHkpe3ZhciBlPXRoaXMuX19hcHBsaWVkRWxlbWVudDtpZih0aGlzLmluY2x1ZGUpe2UudGV4dENvbnRlbnQ9c3R5bGVVdGlsLmNzc0Zyb21Nb2R1bGVzKHRoaXMuaW5jbHVkZSx0cnVlKStlLnRleHRDb250ZW50O30KaWYoIWUudGV4dENvbnRlbnQpe3JldHVybjt9CnZhciBidWlsZFR5cGU9dGhpcy5fX2Nzc0J1aWxkO3ZhciB0YXJnZXRlZEJ1aWxkPXN0eWxlVXRpbC5pc1RhcmdldGVkQnVpbGQoYnVpbGRUeXBlKTtpZihzZXR0aW5ncy51c2VOYXRpdmVDU1NQcm9wZXJ0aWVzJiZ0YXJnZXRlZEJ1aWxkKXtyZXR1cm47fQp2YXIgc3R5bGVSdWxlcz1zdHlsZVV0aWwucnVsZXNGb3JTdHlsZShlKTtpZighdGFyZ2V0ZWRCdWlsZCl7c3R5bGVVdGlsLmZvckVhY2hSdWxlKHN0eWxlUnVsZXMsZnVuY3Rpb24ocnVsZSl7c3R5bGVUcmFuc2Zvcm1lci5kb2N1bWVudFJ1bGUocnVsZSk7fSk7aWYoc2V0dGluZ3MudXNlTmF0aXZlQ1NTUHJvcGVydGllcyYmIWJ1aWxkVHlwZSl7YXBwbHlTaGltLnRyYW5zZm9ybShbZV0pO319CmlmKHNldHRpbmdzLnVzZU5hdGl2ZUNTU1Byb3BlcnRpZXMpe2UudGV4dENvbnRlbnQ9c3R5bGVVdGlsLnRvQ3NzVGV4dChzdHlsZVJ1bGVzKTt9ZWxzZXt2YXIgc2VsZj10aGlzO3ZhciBmbj1mdW5jdGlvbiBmbigpe3NlbGYuX2ZsdXNoQ3VzdG9tUHJvcGVydGllcygpO307aWYoaW5pdGlhbEFwcGx5KXtQb2x5bWVyLlJlbmRlclN0YXR1cy53aGVuUmVhZHkoZm4pO31lbHNle2ZuKCk7fX19LF9mbHVzaEN1c3RvbVByb3BlcnRpZXM6ZnVuY3Rpb24oKXtpZih0aGlzLl9fbmVlZHNVcGRhdGVTdHlsZXMpe3RoaXMuX19uZWVkc1VwZGF0ZVN0eWxlcz1mYWxzZTt1cGRhdGVEZWJvdW5jZXI9ZGVib3VuY2UodXBkYXRlRGVib3VuY2VyLHRoaXMuX3VwZGF0ZVN0eWxlcyk7fWVsc2V7dGhpcy5fYXBwbHlDdXN0b21Qcm9wZXJ0aWVzKCk7fX0sX2FwcGx5Q3VzdG9tUHJvcGVydGllczpmdW5jdGlvbigpe3ZhciBlbGVtZW50PXRoaXMuX19hcHBsaWVkRWxlbWVudDt0aGlzLl9jb21wdXRlU3R5bGVQcm9wZXJ0aWVzKCk7dmFyIHByb3BzPXRoaXMuX3N0eWxlUHJvcGVydGllczt2YXIgcnVsZXM9c3R5bGVVdGlsLnJ1bGVzRm9yU3R5bGUoZWxlbWVudCk7aWYoIXJ1bGVzKXtyZXR1cm47fQplbGVtZW50LnRleHRDb250ZW50PXN0eWxlVXRpbC50b0Nzc1RleHQocnVsZXMsZnVuY3Rpb24ocnVsZSl7dmFyIGNzcz1ydWxlLmNzc1RleHQ9cnVsZS5wYXJzZWRDc3NUZXh0O2lmKHJ1bGUucHJvcGVydHlJbmZvJiZydWxlLnByb3BlcnR5SW5mby5jc3NUZXh0KXtjc3M9Y3NzUGFyc2UucmVtb3ZlQ3VzdG9tUHJvcEFzc2lnbm1lbnQoY3NzKTtydWxlLmNzc1RleHQ9cHJvcGVydHlVdGlscy52YWx1ZUZvclByb3BlcnRpZXMoY3NzLHByb3BzKTt9fSk7fX0pO30oKSk7UG9seW1lci5UZW1wbGF0aXplcj17cHJvcGVydGllczp7X19oaWRlVGVtcGxhdGVDaGlsZHJlbl9fOntvYnNlcnZlcjonX3Nob3dIaWRlQ2hpbGRyZW4nfX0sX2luc3RhbmNlUHJvcHM6UG9seW1lci5ub2IsX3BhcmVudFByb3BQcmVmaXg6J19wYXJlbnRfJyx0ZW1wbGF0aXplOmZ1bmN0aW9uKHRlbXBsYXRlKXt0aGlzLl90ZW1wbGF0aXplZD10ZW1wbGF0ZTtpZighdGVtcGxhdGUuX2NvbnRlbnQpe3RlbXBsYXRlLl9jb250ZW50PXRlbXBsYXRlLmNvbnRlbnQ7fQppZih0ZW1wbGF0ZS5fY29udGVudC5fY3Rvcil7dGhpcy5jdG9yPXRlbXBsYXRlLl9jb250ZW50Ll9jdG9yO3RoaXMuX3ByZXBQYXJlbnRQcm9wZXJ0aWVzKHRoaXMuY3Rvci5wcm90b3R5cGUsdGVtcGxhdGUpO3JldHVybjt9CnZhciBhcmNoZXR5cGU9T2JqZWN0LmNyZWF0ZShQb2x5bWVyLkJhc2UpO3RoaXMuX2N1c3RvbVByZXBBbm5vdGF0aW9ucyhhcmNoZXR5cGUsdGVtcGxhdGUpO3RoaXMuX3ByZXBQYXJlbnRQcm9wZXJ0aWVzKGFyY2hldHlwZSx0ZW1wbGF0ZSk7YXJjaGV0eXBlLl9wcmVwRWZmZWN0cygpO3RoaXMuX2N1c3RvbVByZXBFZmZlY3RzKGFyY2hldHlwZSk7YXJjaGV0eXBlLl9wcmVwQmVoYXZpb3JzKCk7YXJjaGV0eXBlLl9wcmVwUHJvcGVydHlJbmZvKCk7YXJjaGV0eXBlLl9wcmVwQmluZGluZ3MoKTthcmNoZXR5cGUuX25vdGlmeVBhdGhVcD10aGlzLl9ub3RpZnlQYXRoVXBJbXBsO2FyY2hldHlwZS5fc2NvcGVFbGVtZW50Q2xhc3M9dGhpcy5fc2NvcGVFbGVtZW50Q2xhc3NJbXBsO2FyY2hldHlwZS5saXN0ZW49dGhpcy5fbGlzdGVuSW1wbDthcmNoZXR5cGUuX3Nob3dIaWRlQ2hpbGRyZW49dGhpcy5fc2hvd0hpZGVDaGlsZHJlbkltcGw7YXJjaGV0eXBlLl9fc2V0UHJvcGVydHlPcmlnPXRoaXMuX19zZXRQcm9wZXJ0eTthcmNoZXR5cGUuX19zZXRQcm9wZXJ0eT10aGlzLl9fc2V0UHJvcGVydHlJbXBsO3ZhciBfY29uc3RydWN0b3I9dGhpcy5fY29uc3RydWN0b3JJbXBsO3ZhciBjdG9yPWZ1bmN0aW9uIFRlbXBsYXRlSW5zdGFuY2UobW9kZWwsaG9zdCl7X2NvbnN0cnVjdG9yLmNhbGwodGhpcyxtb2RlbCxob3N0KTt9O2N0b3IucHJvdG90eXBlPWFyY2hldHlwZTthcmNoZXR5cGUuY29uc3RydWN0b3I9Y3Rvcjt0ZW1wbGF0ZS5fY29udGVudC5fY3Rvcj1jdG9yO3RoaXMuY3Rvcj1jdG9yO30sX2dldFJvb3REYXRhSG9zdDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmRhdGFIb3N0JiZ0aGlzLmRhdGFIb3N0Ll9yb290RGF0YUhvc3R8fHRoaXMuZGF0YUhvc3Q7fSxfc2hvd0hpZGVDaGlsZHJlbkltcGw6ZnVuY3Rpb24oaGlkZSl7dmFyIGM9dGhpcy5fY2hpbGRyZW47Zm9yKHZhciBpPTA7aTxjLmxlbmd0aDtpKyspe3ZhciBuPWNbaV07aWYoQm9vbGVhbihoaWRlKSE9Qm9vbGVhbihuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXykpe2lmKG4ubm9kZVR5cGU9PT1Ob2RlLlRFWFRfTk9ERSl7aWYoaGlkZSl7bi5fX3BvbHltZXJUZXh0Q29udGVudF9fPW4udGV4dENvbnRlbnQ7bi50ZXh0Q29udGVudD0nJzt9ZWxzZXtuLnRleHRDb250ZW50PW4uX19wb2x5bWVyVGV4dENvbnRlbnRfXzt9fWVsc2UgaWYobi5zdHlsZSl7aWYoaGlkZSl7bi5fX3BvbHltZXJEaXNwbGF5X189bi5zdHlsZS5kaXNwbGF5O24uc3R5bGUuZGlzcGxheT0nbm9uZSc7fWVsc2V7bi5zdHlsZS5kaXNwbGF5PW4uX19wb2x5bWVyRGlzcGxheV9fO319fQpuLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXz1oaWRlO319LF9fc2V0UHJvcGVydHlJbXBsOmZ1bmN0aW9uKHByb3BlcnR5LHZhbHVlLGZyb21BYm92ZSxub2RlKXtpZihub2RlJiZub2RlLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fXyYmcHJvcGVydHk9PSd0ZXh0Q29udGVudCcpe3Byb3BlcnR5PSdfX3BvbHltZXJUZXh0Q29udGVudF9fJzt9CnRoaXMuX19zZXRQcm9wZXJ0eU9yaWcocHJvcGVydHksdmFsdWUsZnJvbUFib3ZlLG5vZGUpO30sX2RlYm91bmNlVGVtcGxhdGU6ZnVuY3Rpb24oZm4pe1BvbHltZXIuZG9tLmFkZERlYm91bmNlcih0aGlzLmRlYm91bmNlKCdfZGVib3VuY2VUZW1wbGF0ZScsZm4pKTt9LF9mbHVzaFRlbXBsYXRlczpmdW5jdGlvbigpe1BvbHltZXIuZG9tLmZsdXNoKCk7fSxfY3VzdG9tUHJlcEVmZmVjdHM6ZnVuY3Rpb24oYXJjaGV0eXBlKXt2YXIgcGFyZW50UHJvcHM9YXJjaGV0eXBlLl9wYXJlbnRQcm9wcztmb3IodmFyIHByb3AgaW4gcGFyZW50UHJvcHMpe2FyY2hldHlwZS5fYWRkUHJvcGVydHlFZmZlY3QocHJvcCwnZnVuY3Rpb24nLHRoaXMuX2NyZWF0ZUhvc3RQcm9wRWZmZWN0b3IocHJvcCkpO30KZm9yKHByb3AgaW4gdGhpcy5faW5zdGFuY2VQcm9wcyl7YXJjaGV0eXBlLl9hZGRQcm9wZXJ0eUVmZmVjdChwcm9wLCdmdW5jdGlvbicsdGhpcy5fY3JlYXRlSW5zdGFuY2VQcm9wRWZmZWN0b3IocHJvcCkpO319LF9jdXN0b21QcmVwQW5ub3RhdGlvbnM6ZnVuY3Rpb24oYXJjaGV0eXBlLHRlbXBsYXRlKXt2YXIgdD1hcmNoZXR5cGUuX3RlbXBsYXRlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RlbXBsYXRlJyk7dmFyIGM9dC5fY29udGVudD10ZW1wbGF0ZS5fY29udGVudDtpZighYy5fbm90ZXMpe3ZhciByb290RGF0YUhvc3Q9YXJjaGV0eXBlLl9yb290RGF0YUhvc3Q7aWYocm9vdERhdGFIb3N0KXtQb2x5bWVyLkFubm90YXRpb25zLnByZXBFbGVtZW50PWZ1bmN0aW9uKCl7cm9vdERhdGFIb3N0Ll9wcmVwRWxlbWVudCgpO307fQpjLl9ub3Rlcz1Qb2x5bWVyLkFubm90YXRpb25zLnBhcnNlQW5ub3RhdGlvbnModGVtcGxhdGUpO1BvbHltZXIuQW5ub3RhdGlvbnMucHJlcEVsZW1lbnQ9bnVsbDt0aGlzLl9wcm9jZXNzQW5ub3RhdGlvbnMoYy5fbm90ZXMpO30KYXJjaGV0eXBlLl9ub3Rlcz1jLl9ub3RlczthcmNoZXR5cGUuX3BhcmVudFByb3BzPWMuX3BhcmVudFByb3BzO30sX3ByZXBQYXJlbnRQcm9wZXJ0aWVzOmZ1bmN0aW9uKGFyY2hldHlwZSx0ZW1wbGF0ZSl7dmFyIHBhcmVudFByb3BzPXRoaXMuX3BhcmVudFByb3BzPWFyY2hldHlwZS5fcGFyZW50UHJvcHM7aWYodGhpcy5fZm9yd2FyZFBhcmVudFByb3AmJnBhcmVudFByb3BzKXt2YXIgcHJvdG89YXJjaGV0eXBlLl9wYXJlbnRQcm9wUHJvdG87dmFyIHByb3A7aWYoIXByb3RvKXtmb3IocHJvcCBpbiB0aGlzLl9pbnN0YW5jZVByb3BzKXtkZWxldGUgcGFyZW50UHJvcHNbcHJvcF07fQpwcm90bz1hcmNoZXR5cGUuX3BhcmVudFByb3BQcm90bz1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHRlbXBsYXRlIT10aGlzKXtQb2x5bWVyLkJpbmQucHJlcGFyZU1vZGVsKHByb3RvKTtQb2x5bWVyLkJhc2UucHJlcGFyZU1vZGVsTm90aWZ5UGF0aChwcm90byk7fQpmb3IocHJvcCBpbiBwYXJlbnRQcm9wcyl7dmFyIHBhcmVudFByb3A9dGhpcy5fcGFyZW50UHJvcFByZWZpeCtwcm9wO3ZhciBlZmZlY3RzPVt7a2luZDonZnVuY3Rpb24nLGVmZmVjdDp0aGlzLl9jcmVhdGVGb3J3YXJkUHJvcEVmZmVjdG9yKHByb3ApLGZuOlBvbHltZXIuQmluZC5fZnVuY3Rpb25FZmZlY3R9LHtraW5kOidub3RpZnknLGZuOlBvbHltZXIuQmluZC5fbm90aWZ5RWZmZWN0LGVmZmVjdDp7ZXZlbnQ6UG9seW1lci5DYXNlTWFwLmNhbWVsVG9EYXNoQ2FzZShwYXJlbnRQcm9wKSsnLWNoYW5nZWQnfX1dO3Byb3RvLl9wcm9wZXJ0eUVmZmVjdHM9cHJvdG8uX3Byb3BlcnR5RWZmZWN0c3x8e307cHJvdG8uX3Byb3BlcnR5RWZmZWN0c1twYXJlbnRQcm9wXT1lZmZlY3RzO1BvbHltZXIuQmluZC5fY3JlYXRlQWNjZXNzb3JzKHByb3RvLHBhcmVudFByb3AsZWZmZWN0cyk7fX0KdmFyIHNlbGY9dGhpcztpZih0ZW1wbGF0ZSE9dGhpcyl7UG9seW1lci5CaW5kLnByZXBhcmVJbnN0YW5jZSh0ZW1wbGF0ZSk7dGVtcGxhdGUuX2ZvcndhcmRQYXJlbnRQcm9wPWZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSl7c2VsZi5fZm9yd2FyZFBhcmVudFByb3Aoc291cmNlLHZhbHVlKTt9O30KdGhpcy5fZXh0ZW5kVGVtcGxhdGUodGVtcGxhdGUscHJvdG8pO3RlbXBsYXRlLl9wYXRoRWZmZWN0b3I9ZnVuY3Rpb24ocGF0aCx2YWx1ZSxmcm9tQWJvdmUpe3JldHVybiBzZWxmLl9wYXRoRWZmZWN0b3JJbXBsKHBhdGgsdmFsdWUsZnJvbUFib3ZlKTt9O319LF9jcmVhdGVGb3J3YXJkUHJvcEVmZmVjdG9yOmZ1bmN0aW9uKHByb3Ape3JldHVybiBmdW5jdGlvbihzb3VyY2UsdmFsdWUpe3RoaXMuX2ZvcndhcmRQYXJlbnRQcm9wKHByb3AsdmFsdWUpO307fSxfY3JlYXRlSG9zdFByb3BFZmZlY3RvcjpmdW5jdGlvbihwcm9wKXt2YXIgcHJlZml4PXRoaXMuX3BhcmVudFByb3BQcmVmaXg7cmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSl7dGhpcy5kYXRhSG9zdC5fdGVtcGxhdGl6ZWRbcHJlZml4K3Byb3BdPXZhbHVlO307fSxfY3JlYXRlSW5zdGFuY2VQcm9wRWZmZWN0b3I6ZnVuY3Rpb24ocHJvcCl7cmV0dXJuIGZ1bmN0aW9uKHNvdXJjZSx2YWx1ZSxvbGQsZnJvbUFib3ZlKXtpZighZnJvbUFib3ZlKXt0aGlzLmRhdGFIb3N0Ll9mb3J3YXJkSW5zdGFuY2VQcm9wKHRoaXMscHJvcCx2YWx1ZSk7fX07fSxfZXh0ZW5kVGVtcGxhdGU6ZnVuY3Rpb24odGVtcGxhdGUscHJvdG8pe3ZhciBuJD1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhwcm90byk7aWYocHJvdG8uX3Byb3BlcnR5U2V0dGVyKXt0ZW1wbGF0ZS5fcHJvcGVydHlTZXR0ZXI9cHJvdG8uX3Byb3BlcnR5U2V0dGVyO30KZm9yKHZhciBpPTAsbjtpPG4kLmxlbmd0aCYmKG49biRbaV0pO2krKyl7dmFyIHZhbD10ZW1wbGF0ZVtuXTtpZih2YWwmJm49PSdfcHJvcGVydHlFZmZlY3RzJyl7dmFyIHBlPVBvbHltZXIuQmFzZS5taXhpbih7fSx2YWwpO3RlbXBsYXRlLl9wcm9wZXJ0eUVmZmVjdHM9UG9seW1lci5CYXNlLm1peGluKHBlLHByb3RvLl9wcm9wZXJ0eUVmZmVjdHMpO31lbHNle3ZhciBwZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHByb3RvLG4pO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0ZW1wbGF0ZSxuLHBkKTtpZih2YWwhPT11bmRlZmluZWQpe3RlbXBsYXRlLl9wcm9wZXJ0eVNldHRlcihuLHZhbCk7fX19fSxfc2hvd0hpZGVDaGlsZHJlbjpmdW5jdGlvbihoaWRkZW4pe30sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oaW5zdCxwYXRoLHZhbHVlKXt9LF9mb3J3YXJkSW5zdGFuY2VQcm9wOmZ1bmN0aW9uKGluc3QscHJvcCx2YWx1ZSl7fSxfbm90aWZ5UGF0aFVwSW1wbDpmdW5jdGlvbihwYXRoLHZhbHVlKXt2YXIgZGF0YUhvc3Q9dGhpcy5kYXRhSG9zdDt2YXIgcm9vdD1Qb2x5bWVyLlBhdGgucm9vdChwYXRoKTtkYXRhSG9zdC5fZm9yd2FyZEluc3RhbmNlUGF0aC5jYWxsKGRhdGFIb3N0LHRoaXMscGF0aCx2YWx1ZSk7aWYocm9vdCBpbiBkYXRhSG9zdC5fcGFyZW50UHJvcHMpe2RhdGFIb3N0Ll90ZW1wbGF0aXplZC5fbm90aWZ5UGF0aChkYXRhSG9zdC5fcGFyZW50UHJvcFByZWZpeCtwYXRoLHZhbHVlKTt9fSxfcGF0aEVmZmVjdG9ySW1wbDpmdW5jdGlvbihwYXRoLHZhbHVlLGZyb21BYm92ZSl7aWYodGhpcy5fZm9yd2FyZFBhcmVudFBhdGgpe2lmKHBhdGguaW5kZXhPZih0aGlzLl9wYXJlbnRQcm9wUHJlZml4KT09PTApe3ZhciBzdWJQYXRoPXBhdGguc3Vic3RyaW5nKHRoaXMuX3BhcmVudFByb3BQcmVmaXgubGVuZ3RoKTt2YXIgbW9kZWw9UG9seW1lci5QYXRoLnJvb3Qoc3ViUGF0aCk7aWYobW9kZWwgaW4gdGhpcy5fcGFyZW50UHJvcHMpe3RoaXMuX2ZvcndhcmRQYXJlbnRQYXRoKHN1YlBhdGgsdmFsdWUpO319fQpQb2x5bWVyLkJhc2UuX3BhdGhFZmZlY3Rvci5jYWxsKHRoaXMuX3RlbXBsYXRpemVkLHBhdGgsdmFsdWUsZnJvbUFib3ZlKTt9LF9jb25zdHJ1Y3RvckltcGw6ZnVuY3Rpb24obW9kZWwsaG9zdCl7dGhpcy5fcm9vdERhdGFIb3N0PWhvc3QuX2dldFJvb3REYXRhSG9zdCgpO3RoaXMuX3NldHVwQ29uZmlndXJlKG1vZGVsKTt0aGlzLl9yZWdpc3Rlckhvc3QoaG9zdCk7dGhpcy5fYmVnaW5Ib3N0aW5nKCk7dGhpcy5yb290PXRoaXMuaW5zdGFuY2VUZW1wbGF0ZSh0aGlzLl90ZW1wbGF0ZSk7dGhpcy5yb290Ll9fbm9Db250ZW50PSF0aGlzLl9ub3Rlcy5faGFzQ29udGVudDt0aGlzLnJvb3QuX19zdHlsZVNjb3BlZD10cnVlO3RoaXMuX2VuZEhvc3RpbmcoKTt0aGlzLl9tYXJzaGFsQW5ub3RhdGVkTm9kZXMoKTt0aGlzLl9tYXJzaGFsSW5zdGFuY2VFZmZlY3RzKCk7dGhpcy5fbWFyc2hhbEFubm90YXRlZExpc3RlbmVycygpO3ZhciBjaGlsZHJlbj1bXTtmb3IodmFyIG49dGhpcy5yb290LmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpe2NoaWxkcmVuLnB1c2gobik7bi5fdGVtcGxhdGVJbnN0YW5jZT10aGlzO30KdGhpcy5fY2hpbGRyZW49Y2hpbGRyZW47aWYoaG9zdC5fX2hpZGVUZW1wbGF0ZUNoaWxkcmVuX18pe3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4odHJ1ZSk7fQp0aGlzLl90cnlSZWFkeSgpO30sX2xpc3RlbkltcGw6ZnVuY3Rpb24obm9kZSxldmVudE5hbWUsbWV0aG9kTmFtZSl7dmFyIG1vZGVsPXRoaXM7dmFyIGhvc3Q9dGhpcy5fcm9vdERhdGFIb3N0O3ZhciBoYW5kbGVyPWhvc3QuX2NyZWF0ZUV2ZW50SGFuZGxlcihub2RlLGV2ZW50TmFtZSxtZXRob2ROYW1lKTt2YXIgZGVjb3JhdGVkPWZ1bmN0aW9uKGUpe2UubW9kZWw9bW9kZWw7aGFuZGxlcihlKTt9O2hvc3QuX2xpc3Rlbihub2RlLGV2ZW50TmFtZSxkZWNvcmF0ZWQpO30sX3Njb3BlRWxlbWVudENsYXNzSW1wbDpmdW5jdGlvbihub2RlLHZhbHVlKXt2YXIgaG9zdD10aGlzLl9yb290RGF0YUhvc3Q7aWYoaG9zdCl7cmV0dXJuIGhvc3QuX3Njb3BlRWxlbWVudENsYXNzKG5vZGUsdmFsdWUpO30KcmV0dXJuIHZhbHVlO30sc3RhbXA6ZnVuY3Rpb24obW9kZWwpe21vZGVsPW1vZGVsfHx7fTtpZih0aGlzLl9wYXJlbnRQcm9wcyl7dmFyIHRlbXBsYXRpemVkPXRoaXMuX3RlbXBsYXRpemVkO2Zvcih2YXIgcHJvcCBpbiB0aGlzLl9wYXJlbnRQcm9wcyl7aWYobW9kZWxbcHJvcF09PT11bmRlZmluZWQpe21vZGVsW3Byb3BdPXRlbXBsYXRpemVkW3RoaXMuX3BhcmVudFByb3BQcmVmaXgrcHJvcF07fX19CnJldHVybiBuZXcgdGhpcy5jdG9yKG1vZGVsLHRoaXMpO30sbW9kZWxGb3JFbGVtZW50OmZ1bmN0aW9uKGVsKXt2YXIgbW9kZWw7d2hpbGUoZWwpe2lmKG1vZGVsPWVsLl90ZW1wbGF0ZUluc3RhbmNlKXtpZihtb2RlbC5kYXRhSG9zdCE9dGhpcyl7ZWw9bW9kZWwuZGF0YUhvc3Q7fWVsc2V7cmV0dXJuIG1vZGVsO319ZWxzZXtlbD1lbC5wYXJlbnROb2RlO319fX07UG9seW1lcih7aXM6J2RvbS10ZW1wbGF0ZScsZXh0ZW5kczondGVtcGxhdGUnLF90ZW1wbGF0ZTpudWxsLGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcl0scmVhZHk6ZnVuY3Rpb24oKXt0aGlzLnRlbXBsYXRpemUodGhpcyk7fX0pO1BvbHltZXIuX2NvbGxlY3Rpb25zPW5ldyBXZWFrTWFwKCk7UG9seW1lci5Db2xsZWN0aW9uPWZ1bmN0aW9uKHVzZXJBcnJheSl7UG9seW1lci5fY29sbGVjdGlvbnMuc2V0KHVzZXJBcnJheSx0aGlzKTt0aGlzLnVzZXJBcnJheT11c2VyQXJyYXk7dGhpcy5zdG9yZT11c2VyQXJyYXkuc2xpY2UoKTt0aGlzLmluaXRNYXAoKTt9O1BvbHltZXIuQ29sbGVjdGlvbi5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlBvbHltZXIuQ29sbGVjdGlvbixpbml0TWFwOmZ1bmN0aW9uKCl7dmFyIG9tYXA9dGhpcy5vbWFwPW5ldyBXZWFrTWFwKCk7dmFyIHBtYXA9dGhpcy5wbWFwPXt9O3ZhciBzPXRoaXMuc3RvcmU7Zm9yKHZhciBpPTA7aTxzLmxlbmd0aDtpKyspe3ZhciBpdGVtPXNbaV07aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXtvbWFwLnNldChpdGVtLGkpO31lbHNle3BtYXBbaXRlbV09aTt9fX0sYWRkOmZ1bmN0aW9uKGl0ZW0pe3ZhciBrZXk9dGhpcy5zdG9yZS5wdXNoKGl0ZW0pLTE7aWYoaXRlbSYmdHlwZW9mIGl0ZW09PSdvYmplY3QnKXt0aGlzLm9tYXAuc2V0KGl0ZW0sa2V5KTt9ZWxzZXt0aGlzLnBtYXBbaXRlbV09a2V5O30KcmV0dXJuJyMnK2tleTt9LHJlbW92ZUtleTpmdW5jdGlvbihrZXkpe2lmKGtleT10aGlzLl9wYXJzZUtleShrZXkpKXt0aGlzLl9yZW1vdmVGcm9tTWFwKHRoaXMuc3RvcmVba2V5XSk7ZGVsZXRlIHRoaXMuc3RvcmVba2V5XTt9fSxfcmVtb3ZlRnJvbU1hcDpmdW5jdGlvbihpdGVtKXtpZihpdGVtJiZ0eXBlb2YgaXRlbT09J29iamVjdCcpe3RoaXMub21hcC5kZWxldGUoaXRlbSk7fWVsc2V7ZGVsZXRlIHRoaXMucG1hcFtpdGVtXTt9fSxyZW1vdmU6ZnVuY3Rpb24oaXRlbSl7dmFyIGtleT10aGlzLmdldEtleShpdGVtKTt0aGlzLnJlbW92ZUtleShrZXkpO3JldHVybiBrZXk7fSxnZXRLZXk6ZnVuY3Rpb24oaXRlbSl7dmFyIGtleTtpZihpdGVtJiZ0eXBlb2YgaXRlbT09J29iamVjdCcpe2tleT10aGlzLm9tYXAuZ2V0KGl0ZW0pO31lbHNle2tleT10aGlzLnBtYXBbaXRlbV07fQppZihrZXkhPXVuZGVmaW5lZCl7cmV0dXJuJyMnK2tleTt9fSxnZXRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuc3RvcmUpLm1hcChmdW5jdGlvbihrZXkpe3JldHVybicjJytrZXk7fSk7fSxfcGFyc2VLZXk6ZnVuY3Rpb24oa2V5KXtpZihrZXkmJmtleVswXT09JyMnKXtyZXR1cm4ga2V5LnNsaWNlKDEpO319LHNldEl0ZW06ZnVuY3Rpb24oa2V5LGl0ZW0pe2lmKGtleT10aGlzLl9wYXJzZUtleShrZXkpKXt2YXIgb2xkPXRoaXMuc3RvcmVba2V5XTtpZihvbGQpe3RoaXMuX3JlbW92ZUZyb21NYXAob2xkKTt9CmlmKGl0ZW0mJnR5cGVvZiBpdGVtPT0nb2JqZWN0Jyl7dGhpcy5vbWFwLnNldChpdGVtLGtleSk7fWVsc2V7dGhpcy5wbWFwW2l0ZW1dPWtleTt9CnRoaXMuc3RvcmVba2V5XT1pdGVtO319LGdldEl0ZW06ZnVuY3Rpb24oa2V5KXtpZihrZXk9dGhpcy5fcGFyc2VLZXkoa2V5KSl7cmV0dXJuIHRoaXMuc3RvcmVba2V5XTt9fSxnZXRJdGVtczpmdW5jdGlvbigpe3ZhciBpdGVtcz1bXSxzdG9yZT10aGlzLnN0b3JlO2Zvcih2YXIga2V5IGluIHN0b3JlKXtpdGVtcy5wdXNoKHN0b3JlW2tleV0pO30KcmV0dXJuIGl0ZW1zO30sX2FwcGx5U3BsaWNlczpmdW5jdGlvbihzcGxpY2VzKXt2YXIga2V5TWFwPXt9LGtleTtmb3IodmFyIGk9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7cy5hZGRlZEtleXM9W107Zm9yKHZhciBqPTA7ajxzLnJlbW92ZWQubGVuZ3RoO2orKyl7a2V5PXRoaXMuZ2V0S2V5KHMucmVtb3ZlZFtqXSk7a2V5TWFwW2tleV09a2V5TWFwW2tleV0/bnVsbDotMTt9CmZvcihqPTA7ajxzLmFkZGVkQ291bnQ7aisrKXt2YXIgaXRlbT10aGlzLnVzZXJBcnJheVtzLmluZGV4K2pdO2tleT10aGlzLmdldEtleShpdGVtKTtrZXk9a2V5PT09dW5kZWZpbmVkP3RoaXMuYWRkKGl0ZW0pOmtleTtrZXlNYXBba2V5XT1rZXlNYXBba2V5XT9udWxsOjE7cy5hZGRlZEtleXMucHVzaChrZXkpO319CnZhciByZW1vdmVkPVtdO3ZhciBhZGRlZD1bXTtmb3Ioa2V5IGluIGtleU1hcCl7aWYoa2V5TWFwW2tleV08MCl7dGhpcy5yZW1vdmVLZXkoa2V5KTtyZW1vdmVkLnB1c2goa2V5KTt9CmlmKGtleU1hcFtrZXldPjApe2FkZGVkLnB1c2goa2V5KTt9fQpyZXR1cm5be3JlbW92ZWQ6cmVtb3ZlZCxhZGRlZDphZGRlZH1dO319O1BvbHltZXIuQ29sbGVjdGlvbi5nZXQ9ZnVuY3Rpb24odXNlckFycmF5KXtyZXR1cm4gUG9seW1lci5fY29sbGVjdGlvbnMuZ2V0KHVzZXJBcnJheSl8fG5ldyBQb2x5bWVyLkNvbGxlY3Rpb24odXNlckFycmF5KTt9O1BvbHltZXIuQ29sbGVjdGlvbi5hcHBseVNwbGljZXM9ZnVuY3Rpb24odXNlckFycmF5LHNwbGljZXMpe3ZhciBjb2xsPVBvbHltZXIuX2NvbGxlY3Rpb25zLmdldCh1c2VyQXJyYXkpO3JldHVybiBjb2xsP2NvbGwuX2FwcGx5U3BsaWNlcyhzcGxpY2VzKTpudWxsO307UG9seW1lcih7aXM6J2RvbS1yZXBlYXQnLGV4dGVuZHM6J3RlbXBsYXRlJyxfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOntpdGVtczp7dHlwZTpBcnJheX0sYXM6e3R5cGU6U3RyaW5nLHZhbHVlOidpdGVtJ30saW5kZXhBczp7dHlwZTpTdHJpbmcsdmFsdWU6J2luZGV4J30sc29ydDp7dHlwZTpGdW5jdGlvbixvYnNlcnZlcjonX3NvcnRDaGFuZ2VkJ30sZmlsdGVyOnt0eXBlOkZ1bmN0aW9uLG9ic2VydmVyOidfZmlsdGVyQ2hhbmdlZCd9LG9ic2VydmU6e3R5cGU6U3RyaW5nLG9ic2VydmVyOidfb2JzZXJ2ZUNoYW5nZWQnfSxkZWxheTpOdW1iZXIscmVuZGVyZWRJdGVtQ291bnQ6e3R5cGU6TnVtYmVyLG5vdGlmeTohUG9seW1lci5TZXR0aW5ncy5zdXBwcmVzc1RlbXBsYXRlTm90aWZpY2F0aW9ucyxyZWFkT25seTp0cnVlfSxpbml0aWFsQ291bnQ6e3R5cGU6TnVtYmVyLG9ic2VydmVyOidfaW5pdGlhbGl6ZUNodW5raW5nJ30sdGFyZ2V0RnJhbWVyYXRlOnt0eXBlOk51bWJlcix2YWx1ZToyMH0sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59LF90YXJnZXRGcmFtZVRpbWU6e3R5cGU6TnVtYmVyLGNvbXB1dGVkOidfY29tcHV0ZUZyYW1lVGltZSh0YXJnZXRGcmFtZXJhdGUpJ319LGJlaGF2aW9yczpbUG9seW1lci5UZW1wbGF0aXplcl0sb2JzZXJ2ZXJzOlsnX2l0ZW1zQ2hhbmdlZChpdGVtcy4qKSddLGNyZWF0ZWQ6ZnVuY3Rpb24oKXt0aGlzLl9pbnN0YW5jZXM9W107dGhpcy5fcG9vbD1bXTt0aGlzLl9saW1pdD1JbmZpbml0eTt2YXIgc2VsZj10aGlzO3RoaXMuX2JvdW5kUmVuZGVyQ2h1bms9ZnVuY3Rpb24oKXtzZWxmLl9yZW5kZXJDaHVuaygpO307fSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX19pc0RldGFjaGVkPXRydWU7Zm9yKHZhciBpPTA7aTx0aGlzLl9pbnN0YW5jZXMubGVuZ3RoO2krKyl7dGhpcy5fZGV0YWNoSW5zdGFuY2UoaSk7fX0sYXR0YWNoZWQ6ZnVuY3Rpb24oKXtpZih0aGlzLl9faXNEZXRhY2hlZCl7dGhpcy5fX2lzRGV0YWNoZWQ9ZmFsc2U7dmFyIHJlZk5vZGU7dmFyIHBhcmVudE5vZGU9UG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZTtpZihwYXJlbnROb2RlLmxvY2FsTmFtZT09dGhpcy5pcyl7cmVmTm9kZT1wYXJlbnROb2RlO3BhcmVudE5vZGU9UG9seW1lci5kb20ocGFyZW50Tm9kZSkucGFyZW50Tm9kZTt9ZWxzZXtyZWZOb2RlPXRoaXM7fQp2YXIgcGFyZW50PVBvbHltZXIuZG9tKHBhcmVudE5vZGUpO2Zvcih2YXIgaT0wO2k8dGhpcy5faW5zdGFuY2VzLmxlbmd0aDtpKyspe3RoaXMuX2F0dGFjaEluc3RhbmNlKGkscGFyZW50LHJlZk5vZGUpO319fSxyZWFkeTpmdW5jdGlvbigpe3RoaXMuX2luc3RhbmNlUHJvcHM9e19fa2V5X186dHJ1ZX07dGhpcy5faW5zdGFuY2VQcm9wc1t0aGlzLmFzXT10cnVlO3RoaXMuX2luc3RhbmNlUHJvcHNbdGhpcy5pbmRleEFzXT10cnVlO2lmKCF0aGlzLmN0b3Ipe3RoaXMudGVtcGxhdGl6ZSh0aGlzKTt9fSxfc29ydENoYW5nZWQ6ZnVuY3Rpb24oc29ydCl7dmFyIGRhdGFIb3N0PXRoaXMuX2dldFJvb3REYXRhSG9zdCgpO3RoaXMuX3NvcnRGbj1zb3J0JiYodHlwZW9mIHNvcnQ9PSdmdW5jdGlvbic/c29ydDpmdW5jdGlvbigpe3JldHVybiBkYXRhSG9zdFtzb3J0XS5hcHBseShkYXRhSG9zdCxhcmd1bWVudHMpO30pO3RoaXMuX25lZWRGdWxsUmVmcmVzaD10cnVlO2lmKHRoaXMuaXRlbXMpe3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9fSxfZmlsdGVyQ2hhbmdlZDpmdW5jdGlvbihmaWx0ZXIpe3ZhciBkYXRhSG9zdD10aGlzLl9nZXRSb290RGF0YUhvc3QoKTt0aGlzLl9maWx0ZXJGbj1maWx0ZXImJih0eXBlb2YgZmlsdGVyPT0nZnVuY3Rpb24nP2ZpbHRlcjpmdW5jdGlvbigpe3JldHVybiBkYXRhSG9zdFtmaWx0ZXJdLmFwcGx5KGRhdGFIb3N0LGFyZ3VtZW50cyk7fSk7dGhpcy5fbmVlZEZ1bGxSZWZyZXNoPXRydWU7aWYodGhpcy5pdGVtcyl7dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9yZW5kZXIpO319LF9jb21wdXRlRnJhbWVUaW1lOmZ1bmN0aW9uKHJhdGUpe3JldHVybiBNYXRoLmNlaWwoMTAwMC9yYXRlKTt9LF9pbml0aWFsaXplQ2h1bmtpbmc6ZnVuY3Rpb24oKXtpZih0aGlzLmluaXRpYWxDb3VudCl7dGhpcy5fbGltaXQ9dGhpcy5pbml0aWFsQ291bnQ7dGhpcy5fY2h1bmtDb3VudD10aGlzLmluaXRpYWxDb3VudDt0aGlzLl9sYXN0Q2h1bmtUaW1lPXBlcmZvcm1hbmNlLm5vdygpO319LF90cnlSZW5kZXJDaHVuazpmdW5jdGlvbigpe2lmKHRoaXMuaXRlbXMmJnRoaXMuX2xpbWl0PHRoaXMuaXRlbXMubGVuZ3RoKXt0aGlzLmRlYm91bmNlKCdyZW5kZXJDaHVuaycsdGhpcy5fcmVxdWVzdFJlbmRlckNodW5rKTt9fSxfcmVxdWVzdFJlbmRlckNodW5rOmZ1bmN0aW9uKCl7cmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMuX2JvdW5kUmVuZGVyQ2h1bmspO30sX3JlbmRlckNodW5rOmZ1bmN0aW9uKCl7dmFyIGN1cnJDaHVua1RpbWU9cGVyZm9ybWFuY2Uubm93KCk7dmFyIHJhdGlvPXRoaXMuX3RhcmdldEZyYW1lVGltZS8oY3VyckNodW5rVGltZS10aGlzLl9sYXN0Q2h1bmtUaW1lKTt0aGlzLl9jaHVua0NvdW50PU1hdGgucm91bmQodGhpcy5fY2h1bmtDb3VudCpyYXRpbyl8fDE7dGhpcy5fbGltaXQrPXRoaXMuX2NodW5rQ291bnQ7dGhpcy5fbGFzdENodW5rVGltZT1jdXJyQ2h1bmtUaW1lO3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9LF9vYnNlcnZlQ2hhbmdlZDpmdW5jdGlvbigpe3RoaXMuX29ic2VydmVQYXRocz10aGlzLm9ic2VydmUmJnRoaXMub2JzZXJ2ZS5yZXBsYWNlKCcuKicsJy4nKS5zcGxpdCgnICcpO30sX2l0ZW1zQ2hhbmdlZDpmdW5jdGlvbihjaGFuZ2Upe2lmKGNoYW5nZS5wYXRoPT0naXRlbXMnKXtpZihBcnJheS5pc0FycmF5KHRoaXMuaXRlbXMpKXt0aGlzLmNvbGxlY3Rpb249UG9seW1lci5Db2xsZWN0aW9uLmdldCh0aGlzLml0ZW1zKTt9ZWxzZSBpZighdGhpcy5pdGVtcyl7dGhpcy5jb2xsZWN0aW9uPW51bGw7fWVsc2V7dGhpcy5fZXJyb3IodGhpcy5fbG9nZignZG9tLXJlcGVhdCcsJ2V4cGVjdGVkIGFycmF5IGZvciBgaXRlbXNgLCcrJyBmb3VuZCcsdGhpcy5pdGVtcykpO30KdGhpcy5fa2V5U3BsaWNlcz1bXTt0aGlzLl9pbmRleFNwbGljZXM9W107dGhpcy5fbmVlZEZ1bGxSZWZyZXNoPXRydWU7dGhpcy5faW5pdGlhbGl6ZUNodW5raW5nKCk7dGhpcy5fZGVib3VuY2VUZW1wbGF0ZSh0aGlzLl9yZW5kZXIpO31lbHNlIGlmKGNoYW5nZS5wYXRoPT0naXRlbXMuc3BsaWNlcycpe3RoaXMuX2tleVNwbGljZXM9dGhpcy5fa2V5U3BsaWNlcy5jb25jYXQoY2hhbmdlLnZhbHVlLmtleVNwbGljZXMpO3RoaXMuX2luZGV4U3BsaWNlcz10aGlzLl9pbmRleFNwbGljZXMuY29uY2F0KGNoYW5nZS52YWx1ZS5pbmRleFNwbGljZXMpO3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9ZWxzZXt2YXIgc3VicGF0aD1jaGFuZ2UucGF0aC5zbGljZSg2KTt0aGlzLl9mb3J3YXJkSXRlbVBhdGgoc3VicGF0aCxjaGFuZ2UudmFsdWUpO3RoaXMuX2NoZWNrT2JzZXJ2ZWRQYXRocyhzdWJwYXRoKTt9fSxfY2hlY2tPYnNlcnZlZFBhdGhzOmZ1bmN0aW9uKHBhdGgpe2lmKHRoaXMuX29ic2VydmVQYXRocyl7cGF0aD1wYXRoLnN1YnN0cmluZyhwYXRoLmluZGV4T2YoJy4nKSsxKTt2YXIgcGF0aHM9dGhpcy5fb2JzZXJ2ZVBhdGhzO2Zvcih2YXIgaT0wO2k8cGF0aHMubGVuZ3RoO2krKyl7aWYocGF0aC5pbmRleE9mKHBhdGhzW2ldKT09PTApe3RoaXMuX25lZWRGdWxsUmVmcmVzaD10cnVlO2lmKHRoaXMuZGVsYXkpe3RoaXMuZGVib3VuY2UoJ3JlbmRlcicsdGhpcy5fcmVuZGVyLHRoaXMuZGVsYXkpO31lbHNle3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9CnJldHVybjt9fX19LHJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX25lZWRGdWxsUmVmcmVzaD10cnVlO3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt0aGlzLl9mbHVzaFRlbXBsYXRlcygpO30sX3JlbmRlcjpmdW5jdGlvbigpe2lmKHRoaXMuX25lZWRGdWxsUmVmcmVzaCl7dGhpcy5fYXBwbHlGdWxsUmVmcmVzaCgpO3RoaXMuX25lZWRGdWxsUmVmcmVzaD1mYWxzZTt9ZWxzZSBpZih0aGlzLl9rZXlTcGxpY2VzLmxlbmd0aCl7aWYodGhpcy5fc29ydEZuKXt0aGlzLl9hcHBseVNwbGljZXNVc2VyU29ydCh0aGlzLl9rZXlTcGxpY2VzKTt9ZWxzZXtpZih0aGlzLl9maWx0ZXJGbil7dGhpcy5fYXBwbHlGdWxsUmVmcmVzaCgpO31lbHNle3RoaXMuX2FwcGx5U3BsaWNlc0FycmF5T3JkZXIodGhpcy5faW5kZXhTcGxpY2VzKTt9fX1lbHNle30KdGhpcy5fa2V5U3BsaWNlcz1bXTt0aGlzLl9pbmRleFNwbGljZXM9W107dmFyIGtleVRvSWR4PXRoaXMuX2tleVRvSW5zdElkeD17fTtmb3IodmFyIGk9dGhpcy5faW5zdGFuY2VzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgaW5zdD10aGlzLl9pbnN0YW5jZXNbaV07aWYoaW5zdC5pc1BsYWNlaG9sZGVyJiZpPHRoaXMuX2xpbWl0KXtpbnN0PXRoaXMuX2luc2VydEluc3RhbmNlKGksaW5zdC5fX2tleV9fKTt9ZWxzZSBpZighaW5zdC5pc1BsYWNlaG9sZGVyJiZpPj10aGlzLl9saW1pdCl7aW5zdD10aGlzLl9kb3duZ3JhZGVJbnN0YW5jZShpLGluc3QuX19rZXlfXyk7fQprZXlUb0lkeFtpbnN0Ll9fa2V5X19dPWk7aWYoIWluc3QuaXNQbGFjZWhvbGRlcil7aW5zdC5fX3NldFByb3BlcnR5KHRoaXMuaW5kZXhBcyxpLHRydWUpO319CnRoaXMuX3Bvb2wubGVuZ3RoPTA7dGhpcy5fc2V0UmVuZGVyZWRJdGVtQ291bnQodGhpcy5faW5zdGFuY2VzLmxlbmd0aCk7aWYoIVBvbHltZXIuU2V0dGluZ3Muc3VwcHJlc3NUZW1wbGF0ZU5vdGlmaWNhdGlvbnN8fHRoaXMubm90aWZ5RG9tQ2hhbmdlKXt0aGlzLmZpcmUoJ2RvbS1jaGFuZ2UnKTt9CnRoaXMuX3RyeVJlbmRlckNodW5rKCk7fSxfYXBwbHlGdWxsUmVmcmVzaDpmdW5jdGlvbigpe3ZhciBjPXRoaXMuY29sbGVjdGlvbjt2YXIga2V5cztpZih0aGlzLl9zb3J0Rm4pe2tleXM9Yz9jLmdldEtleXMoKTpbXTt9ZWxzZXtrZXlzPVtdO3ZhciBpdGVtcz10aGlzLml0ZW1zO2lmKGl0ZW1zKXtmb3IodmFyIGk9MDtpPGl0ZW1zLmxlbmd0aDtpKyspe2tleXMucHVzaChjLmdldEtleShpdGVtc1tpXSkpO319fQp2YXIgc2VsZj10aGlzO2lmKHRoaXMuX2ZpbHRlckZuKXtrZXlzPWtleXMuZmlsdGVyKGZ1bmN0aW9uKGEpe3JldHVybiBzZWxmLl9maWx0ZXJGbihjLmdldEl0ZW0oYSkpO30pO30KaWYodGhpcy5fc29ydEZuKXtrZXlzLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gc2VsZi5fc29ydEZuKGMuZ2V0SXRlbShhKSxjLmdldEl0ZW0oYikpO30pO30KZm9yKGk9MDtpPGtleXMubGVuZ3RoO2krKyl7dmFyIGtleT1rZXlzW2ldO3ZhciBpbnN0PXRoaXMuX2luc3RhbmNlc1tpXTtpZihpbnN0KXtpbnN0Ll9fa2V5X189a2V5O2lmKCFpbnN0LmlzUGxhY2Vob2xkZXImJmk8dGhpcy5fbGltaXQpe2luc3QuX19zZXRQcm9wZXJ0eSh0aGlzLmFzLGMuZ2V0SXRlbShrZXkpLHRydWUpO319ZWxzZSBpZihpPHRoaXMuX2xpbWl0KXt0aGlzLl9pbnNlcnRJbnN0YW5jZShpLGtleSk7fWVsc2V7dGhpcy5faW5zZXJ0UGxhY2Vob2xkZXIoaSxrZXkpO319CmZvcih2YXIgaj10aGlzLl9pbnN0YW5jZXMubGVuZ3RoLTE7aj49aTtqLS0pe3RoaXMuX2RldGFjaEFuZFJlbW92ZUluc3RhbmNlKGopO319LF9udW1lcmljU29ydDpmdW5jdGlvbihhLGIpe3JldHVybiBhLWI7fSxfYXBwbHlTcGxpY2VzVXNlclNvcnQ6ZnVuY3Rpb24oc3BsaWNlcyl7dmFyIGM9dGhpcy5jb2xsZWN0aW9uO3ZhciBrZXlNYXA9e307dmFyIGtleTtmb3IodmFyIGk9MCxzO2k8c3BsaWNlcy5sZW5ndGgmJihzPXNwbGljZXNbaV0pO2krKyl7Zm9yKHZhciBqPTA7ajxzLnJlbW92ZWQubGVuZ3RoO2orKyl7a2V5PXMucmVtb3ZlZFtqXTtrZXlNYXBba2V5XT1rZXlNYXBba2V5XT9udWxsOi0xO30KZm9yKGo9MDtqPHMuYWRkZWQubGVuZ3RoO2orKyl7a2V5PXMuYWRkZWRbal07a2V5TWFwW2tleV09a2V5TWFwW2tleV0/bnVsbDoxO319CnZhciByZW1vdmVkSWR4cz1bXTt2YXIgYWRkZWRLZXlzPVtdO2ZvcihrZXkgaW4ga2V5TWFwKXtpZihrZXlNYXBba2V5XT09PS0xKXtyZW1vdmVkSWR4cy5wdXNoKHRoaXMuX2tleVRvSW5zdElkeFtrZXldKTt9CmlmKGtleU1hcFtrZXldPT09MSl7YWRkZWRLZXlzLnB1c2goa2V5KTt9fQppZihyZW1vdmVkSWR4cy5sZW5ndGgpe3JlbW92ZWRJZHhzLnNvcnQodGhpcy5fbnVtZXJpY1NvcnQpO2ZvcihpPXJlbW92ZWRJZHhzLmxlbmd0aC0xO2k+PTA7aS0tKXt2YXIgaWR4PXJlbW92ZWRJZHhzW2ldO2lmKGlkeCE9PXVuZGVmaW5lZCl7dGhpcy5fZGV0YWNoQW5kUmVtb3ZlSW5zdGFuY2UoaWR4KTt9fX0KdmFyIHNlbGY9dGhpcztpZihhZGRlZEtleXMubGVuZ3RoKXtpZih0aGlzLl9maWx0ZXJGbil7YWRkZWRLZXlzPWFkZGVkS2V5cy5maWx0ZXIoZnVuY3Rpb24oYSl7cmV0dXJuIHNlbGYuX2ZpbHRlckZuKGMuZ2V0SXRlbShhKSk7fSk7fQphZGRlZEtleXMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBzZWxmLl9zb3J0Rm4oYy5nZXRJdGVtKGEpLGMuZ2V0SXRlbShiKSk7fSk7dmFyIHN0YXJ0PTA7Zm9yKGk9MDtpPGFkZGVkS2V5cy5sZW5ndGg7aSsrKXtzdGFydD10aGlzLl9pbnNlcnRSb3dVc2VyU29ydChzdGFydCxhZGRlZEtleXNbaV0pO319fSxfaW5zZXJ0Um93VXNlclNvcnQ6ZnVuY3Rpb24oc3RhcnQsa2V5KXt2YXIgYz10aGlzLmNvbGxlY3Rpb247dmFyIGl0ZW09Yy5nZXRJdGVtKGtleSk7dmFyIGVuZD10aGlzLl9pbnN0YW5jZXMubGVuZ3RoLTE7dmFyIGlkeD0tMTt3aGlsZShzdGFydDw9ZW5kKXt2YXIgbWlkPXN0YXJ0K2VuZD4+MTt2YXIgbWlkS2V5PXRoaXMuX2luc3RhbmNlc1ttaWRdLl9fa2V5X187dmFyIGNtcD10aGlzLl9zb3J0Rm4oYy5nZXRJdGVtKG1pZEtleSksaXRlbSk7aWYoY21wPDApe3N0YXJ0PW1pZCsxO31lbHNlIGlmKGNtcD4wKXtlbmQ9bWlkLTE7fWVsc2V7aWR4PW1pZDticmVhazt9fQppZihpZHg8MCl7aWR4PWVuZCsxO30KdGhpcy5faW5zZXJ0UGxhY2Vob2xkZXIoaWR4LGtleSk7cmV0dXJuIGlkeDt9LF9hcHBseVNwbGljZXNBcnJheU9yZGVyOmZ1bmN0aW9uKHNwbGljZXMpe2Zvcih2YXIgaT0wLHM7aTxzcGxpY2VzLmxlbmd0aCYmKHM9c3BsaWNlc1tpXSk7aSsrKXtmb3IodmFyIGo9MDtqPHMucmVtb3ZlZC5sZW5ndGg7aisrKXt0aGlzLl9kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZShzLmluZGV4KTt9CmZvcihqPTA7ajxzLmFkZGVkS2V5cy5sZW5ndGg7aisrKXt0aGlzLl9pbnNlcnRQbGFjZWhvbGRlcihzLmluZGV4K2oscy5hZGRlZEtleXNbal0pO319fSxfZGV0YWNoSW5zdGFuY2U6ZnVuY3Rpb24oaWR4KXt2YXIgaW5zdD10aGlzLl9pbnN0YW5jZXNbaWR4XTtpZighaW5zdC5pc1BsYWNlaG9sZGVyKXtmb3IodmFyIGk9MDtpPGluc3QuX2NoaWxkcmVuLmxlbmd0aDtpKyspe3ZhciBlbD1pbnN0Ll9jaGlsZHJlbltpXTtQb2x5bWVyLmRvbShpbnN0LnJvb3QpLmFwcGVuZENoaWxkKGVsKTt9CnJldHVybiBpbnN0O319LF9hdHRhY2hJbnN0YW5jZTpmdW5jdGlvbihpZHgscGFyZW50LHJlZk5vZGUpe3ZhciBpbnN0PXRoaXMuX2luc3RhbmNlc1tpZHhdO2lmKCFpbnN0LmlzUGxhY2Vob2xkZXIpe3BhcmVudC5pbnNlcnRCZWZvcmUoaW5zdC5yb290LHJlZk5vZGUpO319LF9kZXRhY2hBbmRSZW1vdmVJbnN0YW5jZTpmdW5jdGlvbihpZHgpe3ZhciBpbnN0PXRoaXMuX2RldGFjaEluc3RhbmNlKGlkeCk7aWYoaW5zdCl7dGhpcy5fcG9vbC5wdXNoKGluc3QpO30KdGhpcy5faW5zdGFuY2VzLnNwbGljZShpZHgsMSk7fSxfaW5zZXJ0UGxhY2Vob2xkZXI6ZnVuY3Rpb24oaWR4LGtleSl7dGhpcy5faW5zdGFuY2VzLnNwbGljZShpZHgsMCx7aXNQbGFjZWhvbGRlcjp0cnVlLF9fa2V5X186a2V5fSk7fSxfc3RhbXBJbnN0YW5jZTpmdW5jdGlvbihpZHgsa2V5KXt2YXIgbW9kZWw9e19fa2V5X186a2V5fTttb2RlbFt0aGlzLmFzXT10aGlzLmNvbGxlY3Rpb24uZ2V0SXRlbShrZXkpO21vZGVsW3RoaXMuaW5kZXhBc109aWR4O3JldHVybiB0aGlzLnN0YW1wKG1vZGVsKTt9LF9pbnNlcnRJbnN0YW5jZTpmdW5jdGlvbihpZHgsa2V5KXt2YXIgaW5zdD10aGlzLl9wb29sLnBvcCgpO2lmKGluc3Qpe2luc3QuX19zZXRQcm9wZXJ0eSh0aGlzLmFzLHRoaXMuY29sbGVjdGlvbi5nZXRJdGVtKGtleSksdHJ1ZSk7aW5zdC5fX3NldFByb3BlcnR5KCdfX2tleV9fJyxrZXksdHJ1ZSk7fWVsc2V7aW5zdD10aGlzLl9zdGFtcEluc3RhbmNlKGlkeCxrZXkpO30KdmFyIGJlZm9yZVJvdz10aGlzLl9pbnN0YW5jZXNbaWR4KzFdO3ZhciBiZWZvcmVOb2RlPWJlZm9yZVJvdyYmIWJlZm9yZVJvdy5pc1BsYWNlaG9sZGVyP2JlZm9yZVJvdy5fY2hpbGRyZW5bMF06dGhpczt2YXIgcGFyZW50Tm9kZT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlO2lmKHBhcmVudE5vZGUubG9jYWxOYW1lPT10aGlzLmlzKXtpZihiZWZvcmVOb2RlPT10aGlzKXtiZWZvcmVOb2RlPXBhcmVudE5vZGU7fQpwYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fQpQb2x5bWVyLmRvbShwYXJlbnROb2RlKS5pbnNlcnRCZWZvcmUoaW5zdC5yb290LGJlZm9yZU5vZGUpO3RoaXMuX2luc3RhbmNlc1tpZHhdPWluc3Q7cmV0dXJuIGluc3Q7fSxfZG93bmdyYWRlSW5zdGFuY2U6ZnVuY3Rpb24oaWR4LGtleSl7dmFyIGluc3Q9dGhpcy5fZGV0YWNoSW5zdGFuY2UoaWR4KTtpZihpbnN0KXt0aGlzLl9wb29sLnB1c2goaW5zdCk7fQppbnN0PXtpc1BsYWNlaG9sZGVyOnRydWUsX19rZXlfXzprZXl9O3RoaXMuX2luc3RhbmNlc1tpZHhdPWluc3Q7cmV0dXJuIGluc3Q7fSxfc2hvd0hpZGVDaGlsZHJlbjpmdW5jdGlvbihoaWRkZW4pe2Zvcih2YXIgaT0wO2k8dGhpcy5faW5zdGFuY2VzLmxlbmd0aDtpKyspe2lmKCF0aGlzLl9pbnN0YW5jZXNbaV0uaXNQbGFjZWhvbGRlcikKdGhpcy5faW5zdGFuY2VzW2ldLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7fX0sX2ZvcndhcmRJbnN0YW5jZVByb3A6ZnVuY3Rpb24oaW5zdCxwcm9wLHZhbHVlKXtpZihwcm9wPT10aGlzLmFzKXt2YXIgaWR4O2lmKHRoaXMuX3NvcnRGbnx8dGhpcy5fZmlsdGVyRm4pe2lkeD10aGlzLml0ZW1zLmluZGV4T2YodGhpcy5jb2xsZWN0aW9uLmdldEl0ZW0oaW5zdC5fX2tleV9fKSk7fWVsc2V7aWR4PWluc3RbdGhpcy5pbmRleEFzXTt9CnRoaXMuc2V0KCdpdGVtcy4nK2lkeCx2YWx1ZSk7fX0sX2ZvcndhcmRJbnN0YW5jZVBhdGg6ZnVuY3Rpb24oaW5zdCxwYXRoLHZhbHVlKXtpZihwYXRoLmluZGV4T2YodGhpcy5hcysnLicpPT09MCl7dGhpcy5fbm90aWZ5UGF0aCgnaXRlbXMuJytpbnN0Ll9fa2V5X18rJy4nK3BhdGguc2xpY2UodGhpcy5hcy5sZW5ndGgrMSksdmFsdWUpO319LF9mb3J3YXJkUGFyZW50UHJvcDpmdW5jdGlvbihwcm9wLHZhbHVlKXt2YXIgaSQ9dGhpcy5faW5zdGFuY2VzO2Zvcih2YXIgaT0wLGluc3Q7aTxpJC5sZW5ndGgmJihpbnN0PWkkW2ldKTtpKyspe2lmKCFpbnN0LmlzUGxhY2Vob2xkZXIpe2luc3QuX19zZXRQcm9wZXJ0eShwcm9wLHZhbHVlLHRydWUpO319fSxfZm9yd2FyZFBhcmVudFBhdGg6ZnVuY3Rpb24ocGF0aCx2YWx1ZSl7dmFyIGkkPXRoaXMuX2luc3RhbmNlcztmb3IodmFyIGk9MCxpbnN0O2k8aSQubGVuZ3RoJiYoaW5zdD1pJFtpXSk7aSsrKXtpZighaW5zdC5pc1BsYWNlaG9sZGVyKXtpbnN0Ll9ub3RpZnlQYXRoKHBhdGgsdmFsdWUsdHJ1ZSk7fX19LF9mb3J3YXJkSXRlbVBhdGg6ZnVuY3Rpb24ocGF0aCx2YWx1ZSl7aWYodGhpcy5fa2V5VG9JbnN0SWR4KXt2YXIgZG90PXBhdGguaW5kZXhPZignLicpO3ZhciBrZXk9cGF0aC5zdWJzdHJpbmcoMCxkb3Q8MD9wYXRoLmxlbmd0aDpkb3QpO3ZhciBpZHg9dGhpcy5fa2V5VG9JbnN0SWR4W2tleV07dmFyIGluc3Q9dGhpcy5faW5zdGFuY2VzW2lkeF07aWYoaW5zdCYmIWluc3QuaXNQbGFjZWhvbGRlcil7aWYoZG90Pj0wKXtwYXRoPXRoaXMuYXMrJy4nK3BhdGguc3Vic3RyaW5nKGRvdCsxKTtpbnN0Ll9ub3RpZnlQYXRoKHBhdGgsdmFsdWUsdHJ1ZSk7fWVsc2V7aW5zdC5fX3NldFByb3BlcnR5KHRoaXMuYXMsdmFsdWUsdHJ1ZSk7fX19fSxpdGVtRm9yRWxlbWVudDpmdW5jdGlvbihlbCl7dmFyIGluc3RhbmNlPXRoaXMubW9kZWxGb3JFbGVtZW50KGVsKTtyZXR1cm4gaW5zdGFuY2UmJmluc3RhbmNlW3RoaXMuYXNdO30sa2V5Rm9yRWxlbWVudDpmdW5jdGlvbihlbCl7dmFyIGluc3RhbmNlPXRoaXMubW9kZWxGb3JFbGVtZW50KGVsKTtyZXR1cm4gaW5zdGFuY2UmJmluc3RhbmNlLl9fa2V5X187fSxpbmRleEZvckVsZW1lbnQ6ZnVuY3Rpb24oZWwpe3ZhciBpbnN0YW5jZT10aGlzLm1vZGVsRm9yRWxlbWVudChlbCk7cmV0dXJuIGluc3RhbmNlJiZpbnN0YW5jZVt0aGlzLmluZGV4QXNdO319KTtQb2x5bWVyKHtpczonYXJyYXktc2VsZWN0b3InLF90ZW1wbGF0ZTpudWxsLHByb3BlcnRpZXM6e2l0ZW1zOnt0eXBlOkFycmF5LG9ic2VydmVyOidjbGVhclNlbGVjdGlvbid9LG11bHRpOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2Usb2JzZXJ2ZXI6J2NsZWFyU2VsZWN0aW9uJ30sc2VsZWN0ZWQ6e3R5cGU6T2JqZWN0LG5vdGlmeTp0cnVlfSxzZWxlY3RlZEl0ZW06e3R5cGU6T2JqZWN0LG5vdGlmeTp0cnVlfSx0b2dnbGU6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmYWxzZX19LGNsZWFyU2VsZWN0aW9uOmZ1bmN0aW9uKCl7aWYoQXJyYXkuaXNBcnJheSh0aGlzLnNlbGVjdGVkKSl7Zm9yKHZhciBpPTA7aTx0aGlzLnNlbGVjdGVkLmxlbmd0aDtpKyspe3RoaXMudW5saW5rUGF0aHMoJ3NlbGVjdGVkLicraSk7fX1lbHNle3RoaXMudW5saW5rUGF0aHMoJ3NlbGVjdGVkJyk7dGhpcy51bmxpbmtQYXRocygnc2VsZWN0ZWRJdGVtJyk7fQppZih0aGlzLm11bHRpKXtpZighdGhpcy5zZWxlY3RlZHx8dGhpcy5zZWxlY3RlZC5sZW5ndGgpe3RoaXMuc2VsZWN0ZWQ9W107dGhpcy5fc2VsZWN0ZWRDb2xsPVBvbHltZXIuQ29sbGVjdGlvbi5nZXQodGhpcy5zZWxlY3RlZCk7fX1lbHNle3RoaXMuc2VsZWN0ZWQ9bnVsbDt0aGlzLl9zZWxlY3RlZENvbGw9bnVsbDt9CnRoaXMuc2VsZWN0ZWRJdGVtPW51bGw7fSxpc1NlbGVjdGVkOmZ1bmN0aW9uKGl0ZW0pe2lmKHRoaXMubXVsdGkpe3JldHVybiB0aGlzLl9zZWxlY3RlZENvbGwuZ2V0S2V5KGl0ZW0pIT09dW5kZWZpbmVkO31lbHNle3JldHVybiB0aGlzLnNlbGVjdGVkPT1pdGVtO319LGRlc2VsZWN0OmZ1bmN0aW9uKGl0ZW0pe2lmKHRoaXMubXVsdGkpe2lmKHRoaXMuaXNTZWxlY3RlZChpdGVtKSl7dmFyIHNrZXk9dGhpcy5fc2VsZWN0ZWRDb2xsLmdldEtleShpdGVtKTt0aGlzLmFycmF5RGVsZXRlKCdzZWxlY3RlZCcsaXRlbSk7dGhpcy51bmxpbmtQYXRocygnc2VsZWN0ZWQuJytza2V5KTt9fWVsc2V7dGhpcy5zZWxlY3RlZD1udWxsO3RoaXMuc2VsZWN0ZWRJdGVtPW51bGw7dGhpcy51bmxpbmtQYXRocygnc2VsZWN0ZWQnKTt0aGlzLnVubGlua1BhdGhzKCdzZWxlY3RlZEl0ZW0nKTt9fSxzZWxlY3Q6ZnVuY3Rpb24oaXRlbSl7dmFyIGljb2w9UG9seW1lci5Db2xsZWN0aW9uLmdldCh0aGlzLml0ZW1zKTt2YXIga2V5PWljb2wuZ2V0S2V5KGl0ZW0pO2lmKHRoaXMubXVsdGkpe2lmKHRoaXMuaXNTZWxlY3RlZChpdGVtKSl7aWYodGhpcy50b2dnbGUpe3RoaXMuZGVzZWxlY3QoaXRlbSk7fX1lbHNle3RoaXMucHVzaCgnc2VsZWN0ZWQnLGl0ZW0pO3ZhciBza2V5PXRoaXMuX3NlbGVjdGVkQ29sbC5nZXRLZXkoaXRlbSk7dGhpcy5saW5rUGF0aHMoJ3NlbGVjdGVkLicrc2tleSwnaXRlbXMuJytrZXkpO319ZWxzZXtpZih0aGlzLnRvZ2dsZSYmaXRlbT09dGhpcy5zZWxlY3RlZCl7dGhpcy5kZXNlbGVjdCgpO31lbHNle3RoaXMuc2VsZWN0ZWQ9aXRlbTt0aGlzLnNlbGVjdGVkSXRlbT1pdGVtO3RoaXMubGlua1BhdGhzKCdzZWxlY3RlZCcsJ2l0ZW1zLicra2V5KTt0aGlzLmxpbmtQYXRocygnc2VsZWN0ZWRJdGVtJywnaXRlbXMuJytrZXkpO319fX0pO1BvbHltZXIoe2lzOidkb20taWYnLGV4dGVuZHM6J3RlbXBsYXRlJyxfdGVtcGxhdGU6bnVsbCxwcm9wZXJ0aWVzOnsnaWYnOnt0eXBlOkJvb2xlYW4sdmFsdWU6ZmFsc2Usb2JzZXJ2ZXI6J19xdWV1ZVJlbmRlcid9LHJlc3RhbXA6e3R5cGU6Qm9vbGVhbix2YWx1ZTpmYWxzZSxvYnNlcnZlcjonX3F1ZXVlUmVuZGVyJ30sbm90aWZ5RG9tQ2hhbmdlOnt0eXBlOkJvb2xlYW59fSxiZWhhdmlvcnM6W1BvbHltZXIuVGVtcGxhdGl6ZXJdLF9xdWV1ZVJlbmRlcjpmdW5jdGlvbigpe3RoaXMuX2RlYm91bmNlVGVtcGxhdGUodGhpcy5fcmVuZGVyKTt9LGRldGFjaGVkOmZ1bmN0aW9uKCl7dmFyIHBhcmVudE5vZGU9dGhpcy5wYXJlbnROb2RlO2lmKHBhcmVudE5vZGUmJnBhcmVudE5vZGUubG9jYWxOYW1lPT10aGlzLmlzKXtwYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fQppZighcGFyZW50Tm9kZXx8cGFyZW50Tm9kZS5ub2RlVHlwZT09Tm9kZS5ET0NVTUVOVF9GUkFHTUVOVF9OT0RFJiYoIVBvbHltZXIuU2V0dGluZ3MuaGFzU2hhZG93fHwhKHBhcmVudE5vZGUgaW5zdGFuY2VvZiBTaGFkb3dSb290KSkpe3RoaXMuX3RlYXJkb3duSW5zdGFuY2UoKTt9fSxhdHRhY2hlZDpmdW5jdGlvbigpe2lmKHRoaXMuaWYmJnRoaXMuY3Rvcil7dGhpcy5hc3luYyh0aGlzLl9lbnN1cmVJbnN0YW5jZSk7fX0scmVuZGVyOmZ1bmN0aW9uKCl7dGhpcy5fZmx1c2hUZW1wbGF0ZXMoKTt9LF9yZW5kZXI6ZnVuY3Rpb24oKXtpZih0aGlzLmlmKXtpZighdGhpcy5jdG9yKXt0aGlzLnRlbXBsYXRpemUodGhpcyk7fQp0aGlzLl9lbnN1cmVJbnN0YW5jZSgpO3RoaXMuX3Nob3dIaWRlQ2hpbGRyZW4oKTt9ZWxzZSBpZih0aGlzLnJlc3RhbXApe3RoaXMuX3RlYXJkb3duSW5zdGFuY2UoKTt9CmlmKCF0aGlzLnJlc3RhbXAmJnRoaXMuX2luc3RhbmNlKXt0aGlzLl9zaG93SGlkZUNoaWxkcmVuKCk7fQppZih0aGlzLmlmIT10aGlzLl9sYXN0SWYpe2lmKCFQb2x5bWVyLlNldHRpbmdzLnN1cHByZXNzVGVtcGxhdGVOb3RpZmljYXRpb25zfHx0aGlzLm5vdGlmeURvbUNoYW5nZSl7dGhpcy5maXJlKCdkb20tY2hhbmdlJyk7fQp0aGlzLl9sYXN0SWY9dGhpcy5pZjt9fSxfZW5zdXJlSW5zdGFuY2U6ZnVuY3Rpb24oKXt2YXIgcmVmTm9kZTt2YXIgcGFyZW50Tm9kZT1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlO2lmKHBhcmVudE5vZGUmJnBhcmVudE5vZGUubG9jYWxOYW1lPT10aGlzLmlzKXtyZWZOb2RlPXBhcmVudE5vZGU7cGFyZW50Tm9kZT1Qb2x5bWVyLmRvbShwYXJlbnROb2RlKS5wYXJlbnROb2RlO31lbHNle3JlZk5vZGU9dGhpczt9CmlmKHBhcmVudE5vZGUpe2lmKCF0aGlzLl9pbnN0YW5jZSl7dGhpcy5faW5zdGFuY2U9dGhpcy5zdGFtcCgpO3ZhciByb290PXRoaXMuX2luc3RhbmNlLnJvb3Q7UG9seW1lci5kb20ocGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHJvb3QscmVmTm9kZSk7fWVsc2V7dmFyIGMkPXRoaXMuX2luc3RhbmNlLl9jaGlsZHJlbjtpZihjJCYmYyQubGVuZ3RoKXt2YXIgbGFzdENoaWxkPVBvbHltZXIuZG9tKHJlZk5vZGUpLnByZXZpb3VzU2libGluZztpZihsYXN0Q2hpbGQhPT1jJFtjJC5sZW5ndGgtMV0pe2Zvcih2YXIgaT0wLG47aTxjJC5sZW5ndGgmJihuPWMkW2ldKTtpKyspe1BvbHltZXIuZG9tKHBhcmVudE5vZGUpLmluc2VydEJlZm9yZShuLHJlZk5vZGUpO319fX19fSxfdGVhcmRvd25JbnN0YW5jZTpmdW5jdGlvbigpe2lmKHRoaXMuX2luc3RhbmNlKXt2YXIgYyQ9dGhpcy5faW5zdGFuY2UuX2NoaWxkcmVuO2lmKGMkJiZjJC5sZW5ndGgpe3ZhciBwYXJlbnQ9UG9seW1lci5kb20oUG9seW1lci5kb20oYyRbMF0pLnBhcmVudE5vZGUpO2Zvcih2YXIgaT0wLG47aTxjJC5sZW5ndGgmJihuPWMkW2ldKTtpKyspe3BhcmVudC5yZW1vdmVDaGlsZChuKTt9fQp0aGlzLl9pbnN0YW5jZT1udWxsO319LF9zaG93SGlkZUNoaWxkcmVuOmZ1bmN0aW9uKCl7dmFyIGhpZGRlbj10aGlzLl9faGlkZVRlbXBsYXRlQ2hpbGRyZW5fX3x8IXRoaXMuaWY7aWYodGhpcy5faW5zdGFuY2Upe3RoaXMuX2luc3RhbmNlLl9zaG93SGlkZUNoaWxkcmVuKGhpZGRlbik7fX0sX2ZvcndhcmRQYXJlbnRQcm9wOmZ1bmN0aW9uKHByb3AsdmFsdWUpe2lmKHRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZS5fX3NldFByb3BlcnR5KHByb3AsdmFsdWUsdHJ1ZSk7fX0sX2ZvcndhcmRQYXJlbnRQYXRoOmZ1bmN0aW9uKHBhdGgsdmFsdWUpe2lmKHRoaXMuX2luc3RhbmNlKXt0aGlzLl9pbnN0YW5jZS5fbm90aWZ5UGF0aChwYXRoLHZhbHVlLHRydWUpO319fSk7UG9seW1lcih7aXM6J2RvbS1iaW5kJyxwcm9wZXJ0aWVzOntub3RpZnlEb21DaGFuZ2U6e3R5cGU6Qm9vbGVhbn19LGV4dGVuZHM6J3RlbXBsYXRlJyxfdGVtcGxhdGU6bnVsbCxjcmVhdGVkOmZ1bmN0aW9uKCl7dmFyIHNlbGY9dGhpcztQb2x5bWVyLlJlbmRlclN0YXR1cy53aGVuUmVhZHkoZnVuY3Rpb24oKXtpZihkb2N1bWVudC5yZWFkeVN0YXRlPT0nbG9hZGluZycpe2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ0RPTUNvbnRlbnRMb2FkZWQnLGZ1bmN0aW9uKCl7c2VsZi5fbWFya0ltcG9ydHNSZWFkeSgpO30pO31lbHNle3NlbGYuX21hcmtJbXBvcnRzUmVhZHkoKTt9fSk7fSxfZW5zdXJlUmVhZHk6ZnVuY3Rpb24oKXtpZighdGhpcy5fcmVhZGllZCl7dGhpcy5fcmVhZHlTZWxmKCk7fX0sX21hcmtJbXBvcnRzUmVhZHk6ZnVuY3Rpb24oKXt0aGlzLl9pbXBvcnRzUmVhZHk9dHJ1ZTt0aGlzLl9lbnN1cmVSZWFkeSgpO30sX3JlZ2lzdGVyRmVhdHVyZXM6ZnVuY3Rpb24oKXt0aGlzLl9wcmVwQ29uc3RydWN0b3IoKTt9LF9pbnNlcnRDaGlsZHJlbjpmdW5jdGlvbigpe3ZhciByZWZOb2RlO3ZhciBwYXJlbnROb2RlPVBvbHltZXIuZG9tKHRoaXMpLnBhcmVudE5vZGU7aWYocGFyZW50Tm9kZS5sb2NhbE5hbWU9PXRoaXMuaXMpe3JlZk5vZGU9cGFyZW50Tm9kZTtwYXJlbnROb2RlPVBvbHltZXIuZG9tKHBhcmVudE5vZGUpLnBhcmVudE5vZGU7fWVsc2V7cmVmTm9kZT10aGlzO30KUG9seW1lci5kb20ocGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHRoaXMucm9vdCxyZWZOb2RlKTt9LF9yZW1vdmVDaGlsZHJlbjpmdW5jdGlvbigpe2lmKHRoaXMuX2NoaWxkcmVuKXtmb3IodmFyIGk9MDtpPHRoaXMuX2NoaWxkcmVuLmxlbmd0aDtpKyspe3RoaXMucm9vdC5hcHBlbmRDaGlsZCh0aGlzLl9jaGlsZHJlbltpXSk7fX19LF9pbml0RmVhdHVyZXM6ZnVuY3Rpb24oKXt9LF9zY29wZUVsZW1lbnRDbGFzczpmdW5jdGlvbihlbGVtZW50LHNlbGVjdG9yKXtpZih0aGlzLmRhdGFIb3N0KXtyZXR1cm4gdGhpcy5kYXRhSG9zdC5fc2NvcGVFbGVtZW50Q2xhc3MoZWxlbWVudCxzZWxlY3Rvcik7fWVsc2V7cmV0dXJuIHNlbGVjdG9yO319LF9jb25maWd1cmVJbnN0YW5jZVByb3BlcnRpZXM6ZnVuY3Rpb24oKXt9LF9wcmVwQ29uZmlndXJlOmZ1bmN0aW9uKCl7dmFyIGNvbmZpZz17fTtmb3IodmFyIHByb3AgaW4gdGhpcy5fcHJvcGVydHlFZmZlY3RzKXtjb25maWdbcHJvcF09dGhpc1twcm9wXTt9CnZhciBzZXR1cENvbmZpZ3VyZT10aGlzLl9zZXR1cENvbmZpZ3VyZTt0aGlzLl9zZXR1cENvbmZpZ3VyZT1mdW5jdGlvbigpe3NldHVwQ29uZmlndXJlLmNhbGwodGhpcyxjb25maWcpO307fSxhdHRhY2hlZDpmdW5jdGlvbigpe2lmKHRoaXMuX2ltcG9ydHNSZWFkeSl7dGhpcy5yZW5kZXIoKTt9fSxkZXRhY2hlZDpmdW5jdGlvbigpe3RoaXMuX3JlbW92ZUNoaWxkcmVuKCk7fSxyZW5kZXI6ZnVuY3Rpb24oKXt0aGlzLl9lbnN1cmVSZWFkeSgpO2lmKCF0aGlzLl9jaGlsZHJlbil7dGhpcy5fdGVtcGxhdGU9dGhpczt0aGlzLl9wcmVwQW5ub3RhdGlvbnMoKTt0aGlzLl9wcmVwRWZmZWN0cygpO3RoaXMuX3ByZXBCZWhhdmlvcnMoKTt0aGlzLl9wcmVwQ29uZmlndXJlKCk7dGhpcy5fcHJlcEJpbmRpbmdzKCk7dGhpcy5fcHJlcFByb3BlcnR5SW5mbygpO1BvbHltZXIuQmFzZS5faW5pdEZlYXR1cmVzLmNhbGwodGhpcyk7dGhpcy5fY2hpbGRyZW49UG9seW1lci5UcmVlQXBpLmFycmF5Q29weUNoaWxkTm9kZXModGhpcy5yb290KTt9CnRoaXMuX2luc2VydENoaWxkcmVuKCk7aWYoIVBvbHltZXIuU2V0dGluZ3Muc3VwcHJlc3NUZW1wbGF0ZU5vdGlmaWNhdGlvbnN8fHRoaXMubm90aWZ5RG9tQ2hhbmdlKXt0aGlzLmZpcmUoJ2RvbS1jaGFuZ2UnKTt9fX0pOyd1c2Ugc3RyaWN0JztpZighd2luZG93LkN1c3RvbUVsZW1lbnRzfHx3aW5kb3cuQ3VzdG9tRWxlbWVudHMuaGFzTmF0aXZlKXtpZighUG9seW1lci5TZXR0aW5ncy51c2VOYXRpdmVTaGFkb3cpe3RyLnNob3dQYW5pYygnUG9seW1lciBlcnJvcicsJ2Jhc2Ugc2hvdWxkIHVzZSBuYXRpdmUgc2hhZG93IHdoZW4gcG9zc2libGUuJyk7fX0ndXNlIHN0cmljdCc7Y29uc3QgZ2xvYmFsPXRoaXMud2luZG93fHx0aGlzLmdsb2JhbDt0aGlzLnRyPShmdW5jdGlvbigpe2lmKGdsb2JhbC50cilyZXR1cm4gZ2xvYmFsLnRyO2Z1bmN0aW9uIGV4cG9ydFBhdGgobmFtZSl7Y29uc3QgcGFydHM9bmFtZS5zcGxpdCgnLicpO2xldCBjdXI9Z2xvYmFsO2ZvcihsZXQgcGFydDtwYXJ0cy5sZW5ndGgmJihwYXJ0PXBhcnRzLnNoaWZ0KCkpOyl7aWYocGFydCBpbiBjdXIpe2N1cj1jdXJbcGFydF07fWVsc2V7Y3VyPWN1cltwYXJ0XT17fTt9fQpyZXR1cm4gY3VyO30KZnVuY3Rpb24gaXNFeHBvcnRlZChuYW1lKXtjb25zdCBwYXJ0cz1uYW1lLnNwbGl0KCcuJyk7bGV0IGN1cj1nbG9iYWw7Zm9yKGxldCBwYXJ0O3BhcnRzLmxlbmd0aCYmKHBhcnQ9cGFydHMuc2hpZnQoKSk7KXtpZihwYXJ0IGluIGN1cil7Y3VyPWN1cltwYXJ0XTt9ZWxzZXtyZXR1cm4gZmFsc2U7fX0KcmV0dXJuIHRydWU7fQpmdW5jdGlvbiBpc0RlZmluZWQobmFtZSl7Y29uc3QgcGFydHM9bmFtZS5zcGxpdCgnLicpO2xldCBjdXJPYmplY3Q9Z2xvYmFsO2ZvcihsZXQgaT0wO2k8cGFydHMubGVuZ3RoO2krKyl7Y29uc3QgcGFydE5hbWU9cGFydHNbaV07Y29uc3QgbmV4dE9iamVjdD1jdXJPYmplY3RbcGFydE5hbWVdO2lmKG5leHRPYmplY3Q9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2N1ck9iamVjdD1uZXh0T2JqZWN0O30KcmV0dXJuIHRydWU7fQpsZXQgcGFuaWNFbGVtZW50PXVuZGVmaW5lZDtjb25zdCByYXdQYW5pY01lc3NhZ2VzPVtdO2Z1bmN0aW9uIHNob3dQYW5pY0VsZW1lbnRJZk5lZWRlZCgpe2lmKHBhbmljRWxlbWVudClyZXR1cm47Y29uc3QgcGFuaWNPdmVybGF5PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3BhbmljT3ZlcmxheS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9J3doaXRlJztwYW5pY092ZXJsYXkuc3R5bGUuYm9yZGVyPSczcHggc29saWQgcmVkJztwYW5pY092ZXJsYXkuc3R5bGUuYm94U2l6aW5nPSdib3JkZXItYm94JztwYW5pY092ZXJsYXkuc3R5bGUuY29sb3I9J2JsYWNrJztwYW5pY092ZXJsYXkuc3R5bGUuZGlzcGxheT0nZmxleCc7cGFuaWNPdmVybGF5LnN0eWxlLmhlaWdodD0nMTAwJSc7cGFuaWNPdmVybGF5LnN0eWxlLmxlZnQ9MDtwYW5pY092ZXJsYXkuc3R5bGUucGFkZGluZz0nOHB4JztwYW5pY092ZXJsYXkuc3R5bGUucG9zaXRpb249J2ZpeGVkJztwYW5pY092ZXJsYXkuc3R5bGUudG9wPTA7cGFuaWNPdmVybGF5LnN0eWxlLndlYmtpdEZsZXhEaXJlY3Rpb249J2NvbHVtbic7cGFuaWNPdmVybGF5LnN0eWxlLndpZHRoPScxMDAlJztwYW5pY0VsZW1lbnQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7cGFuaWNFbGVtZW50LnN0eWxlLndlYmtpdEZsZXg9JzEgMSBhdXRvJztwYW5pY0VsZW1lbnQuc3R5bGUub3ZlcmZsb3c9J2F1dG8nO3BhbmljT3ZlcmxheS5hcHBlbmRDaGlsZChwYW5pY0VsZW1lbnQpO2lmKCFkb2N1bWVudC5ib2R5KXtzZXRUaW1lb3V0KGZ1bmN0aW9uKCl7ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChwYW5pY092ZXJsYXkpO30sMTUwKTt9ZWxzZXtkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKHBhbmljT3ZlcmxheSk7fX0KZnVuY3Rpb24gc2hvd1BhbmljKHBhbmljVGl0bGUscGFuaWNEZXRhaWxzKXtpZih0ci5pc0hlYWRsZXNzKXtpZihwYW5pY0RldGFpbHMgaW5zdGFuY2VvZiBFcnJvcil0aHJvdyBwYW5pY0RldGFpbHM7dGhyb3cgbmV3IEVycm9yKCdQYW5pYzogJytwYW5pY1RpdGxlKyc6XG4nK3BhbmljRGV0YWlscyk7fQppZihwYW5pY0RldGFpbHMgaW5zdGFuY2VvZiBFcnJvcil7cGFuaWNEZXRhaWxzPXBhbmljRGV0YWlscy5zdGFjazt9CnNob3dQYW5pY0VsZW1lbnRJZk5lZWRlZCgpO2NvbnN0IHBhbmljTWVzc2FnZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO3BhbmljTWVzc2FnZUVsLmlubmVySFRNTD0nPGgyIGlkPSJtZXNzYWdlIj48L2gyPicrJzxwcmUgaWQ9ImRldGFpbHMiPjwvcHJlPic7cGFuaWNNZXNzYWdlRWwucXVlcnlTZWxlY3RvcignI21lc3NhZ2UnKS50ZXh0Q29udGVudD1wYW5pY1RpdGxlO3BhbmljTWVzc2FnZUVsLnF1ZXJ5U2VsZWN0b3IoJyNkZXRhaWxzJykudGV4dENvbnRlbnQ9cGFuaWNEZXRhaWxzO3BhbmljRWxlbWVudC5hcHBlbmRDaGlsZChwYW5pY01lc3NhZ2VFbCk7cmF3UGFuaWNNZXNzYWdlcy5wdXNoKHt0aXRsZTpwYW5pY1RpdGxlLGRldGFpbHM6cGFuaWNEZXRhaWxzfSk7fQpmdW5jdGlvbiBoYXNQYW5pYygpe3JldHVybiByYXdQYW5pY01lc3NhZ2VzLmxlbmd0aCE9PTA7fQpmdW5jdGlvbiBnZXRQYW5pY1RleHQoKXtyZXR1cm4gcmF3UGFuaWNNZXNzYWdlcy5tYXAoZnVuY3Rpb24obXNnKXtyZXR1cm4gbXNnLnRpdGxlO30pLmpvaW4oJywgJyk7fQpmdW5jdGlvbiBleHBvcnRUbyhuYW1lc3BhY2UsZm4pe2NvbnN0IG9iaj1leHBvcnRQYXRoKG5hbWVzcGFjZSk7Y29uc3QgZXhwb3J0cz1mbigpO2Zvcihjb25zdCBwcm9wZXJ0eU5hbWUgaW4gZXhwb3J0cyl7Y29uc3QgcHJvcGVydHlEZXNjcmlwdG9yPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZXhwb3J0cyxwcm9wZXJ0eU5hbWUpO2lmKHByb3BlcnR5RGVzY3JpcHRvcil7T2JqZWN0LmRlZmluZVByb3BlcnR5KG9iaixwcm9wZXJ0eU5hbWUscHJvcGVydHlEZXNjcmlwdG9yKTt9fX0KZnVuY3Rpb24gaW5pdGlhbGl6ZSgpe2lmKGdsb2JhbC5pc1Zpbm4pe3RyLmlzVmlubj10cnVlO31lbHNlIGlmKGdsb2JhbC5wcm9jZXNzJiZnbG9iYWwucHJvY2Vzcy52ZXJzaW9ucy5ub2RlKXt0ci5pc05vZGU9dHJ1ZTt9ZWxzZXt0ci5pc1Zpbm49ZmFsc2U7dHIuaXNOb2RlPWZhbHNlO3RyLmRvYz1kb2N1bWVudDt0ci5pc01hYz0vTWFjLy50ZXN0KG5hdmlnYXRvci5wbGF0Zm9ybSk7dHIuaXNXaW5kb3dzPS9XaW4vLnRlc3QobmF2aWdhdG9yLnBsYXRmb3JtKTt0ci5pc0Nocm9tZU9TPS9Dck9TLy50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO3RyLmlzTGludXg9L0xpbnV4Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpO30KdHIuaXNIZWFkbGVzcz10ci5pc1Zpbm58fHRyLmlzTm9kZTt9CnJldHVybntpbml0aWFsaXplLGV4cG9ydFRvLGlzRXhwb3J0ZWQsaXNEZWZpbmVkLHNob3dQYW5pYyxoYXNQYW5pYyxnZXRQYW5pY1RleHQsfTt9KSgpO3RyLmluaXRpYWxpemUoKTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRXZlbnRUYXJnZXQoKXt9CkV2ZW50VGFyZ2V0LmRlY29yYXRlPWZ1bmN0aW9uKHRhcmdldCl7Zm9yKGNvbnN0IGsgaW4gRXZlbnRUYXJnZXQucHJvdG90eXBlKXtpZihrPT09J2RlY29yYXRlJyljb250aW51ZTtjb25zdCB2PUV2ZW50VGFyZ2V0LnByb3RvdHlwZVtrXTtpZih0eXBlb2YgdiE9PSdmdW5jdGlvbicpY29udGludWU7dGFyZ2V0W2tdPXY7fX07RXZlbnRUYXJnZXQucHJvdG90eXBlPXthZGRFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlcil7aWYoIXRoaXMubGlzdGVuZXJzXyl7dGhpcy5saXN0ZW5lcnNfPU9iamVjdC5jcmVhdGUobnVsbCk7fQppZighKHR5cGUgaW4gdGhpcy5saXN0ZW5lcnNfKSl7dGhpcy5saXN0ZW5lcnNfW3R5cGVdPVtoYW5kbGVyXTt9ZWxzZXtjb25zdCBoYW5kbGVycz10aGlzLmxpc3RlbmVyc19bdHlwZV07aWYoaGFuZGxlcnMuaW5kZXhPZihoYW5kbGVyKTwwKXtoYW5kbGVycy5wdXNoKGhhbmRsZXIpO319fSxyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsaGFuZGxlcil7aWYoIXRoaXMubGlzdGVuZXJzXylyZXR1cm47aWYodHlwZSBpbiB0aGlzLmxpc3RlbmVyc18pe2NvbnN0IGhhbmRsZXJzPXRoaXMubGlzdGVuZXJzX1t0eXBlXTtjb25zdCBpbmRleD1oYW5kbGVycy5pbmRleE9mKGhhbmRsZXIpO2lmKGluZGV4Pj0wKXtpZihoYW5kbGVycy5sZW5ndGg9PT0xKXtkZWxldGUgdGhpcy5saXN0ZW5lcnNfW3R5cGVdO31lbHNle2hhbmRsZXJzLnNwbGljZShpbmRleCwxKTt9fX19LGRpc3BhdGNoRXZlbnQoZXZlbnQpe2lmKCF0aGlzLmxpc3RlbmVyc18pcmV0dXJuIHRydWU7ZXZlbnQuX19kZWZpbmVHZXR0ZXJfXygndGFyZ2V0JywoKT0+dGhpcyk7Y29uc3QgcmVhbFByZXZlbnREZWZhdWx0PWV2ZW50LnByZXZlbnREZWZhdWx0O2V2ZW50LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7cmVhbFByZXZlbnREZWZhdWx0LmNhbGwodGhpcyk7dGhpcy5yYXdSZXR1cm5WYWx1ZT1mYWxzZTt9O2NvbnN0IHR5cGU9ZXZlbnQudHlwZTtsZXQgcHJldmVudGVkPTA7aWYodHlwZSBpbiB0aGlzLmxpc3RlbmVyc18pe2NvbnN0IGhhbmRsZXJzPXRoaXMubGlzdGVuZXJzX1t0eXBlXS5jb25jYXQoKTtmb3IobGV0IGk9MCxoYW5kbGVyO2hhbmRsZXI9aGFuZGxlcnNbaV07aSsrKXtpZihoYW5kbGVyLmhhbmRsZUV2ZW50KXtwcmV2ZW50ZWR8PWhhbmRsZXIuaGFuZGxlRXZlbnQuY2FsbChoYW5kbGVyLGV2ZW50KT09PWZhbHNlO31lbHNle3ByZXZlbnRlZHw9aGFuZGxlci5jYWxsKHRoaXMsZXZlbnQpPT09ZmFsc2U7fX19CnJldHVybiFwcmV2ZW50ZWQmJmV2ZW50LnJhd1JldHVyblZhbHVlO30sYXN5bmMgZGlzcGF0Y2hBc3luYyhldmVudCl7aWYoIXRoaXMubGlzdGVuZXJzXylyZXR1cm4gdHJ1ZTtjb25zdCBsaXN0ZW5lcnM9dGhpcy5saXN0ZW5lcnNfW2V2ZW50LnR5cGVdO2lmKGxpc3RlbmVycz09PXVuZGVmaW5lZClyZXR1cm47YXdhaXQgUHJvbWlzZS5hbGwobGlzdGVuZXJzLnNsaWNlKCkubWFwKGxpc3RlbmVyPT57aWYobGlzdGVuZXIuaGFuZGxlRXZlbnQpe3JldHVybiBsaXN0ZW5lci5oYW5kbGVFdmVudC5jYWxsKGxpc3RlbmVyLGV2ZW50KTt9CnJldHVybiBsaXN0ZW5lci5jYWxsKHRoaXMsZXZlbnQpO30pKTt9LGhhc0V2ZW50TGlzdGVuZXIodHlwZSl7cmV0dXJuKHRoaXMubGlzdGVuZXJzXyE9PXVuZGVmaW5lZCYmdGhpcy5saXN0ZW5lcnNfW3R5cGVdIT09dW5kZWZpbmVkKTt9fTtyZXR1cm57RXZlbnRUYXJnZXQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVnaXN0ZXJlZFR5cGVJbmZvKGNvbnN0cnVjdG9yLG1ldGFkYXRhKXt0aGlzLmNvbnN0cnVjdG9yPWNvbnN0cnVjdG9yO3RoaXMubWV0YWRhdGE9bWV0YWRhdGE7fQpjb25zdCBCQVNJQ19SRUdJU1RSWV9NT0RFPSdCQVNJQ19SRUdJU1RSWV9NT0RFJztjb25zdCBUWVBFX0JBU0VEX1JFR0lTVFJZX01PREU9J1RZUEVfQkFTRURfUkVHSVNUUllfTU9ERSc7Y29uc3QgQUxMX01PREVTPXtCQVNJQ19SRUdJU1RSWV9NT0RFOnRydWUsVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFOnRydWV9O2Z1bmN0aW9uIEV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyhtb2RlKXtpZihtb2RlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ01vZGUgaXMgcmVxdWlyZWQnKTt9CmlmKCFBTExfTU9ERVNbbW9kZV0pe3Rocm93IG5ldyBFcnJvcignTm90IGEgbW9kZS4nKTt9CnRoaXMubW9kZV89bW9kZTt0aGlzLmRlZmF1bHRNZXRhZGF0YV89e307dGhpcy5kZWZhdWx0Q29uc3RydWN0b3JfPXVuZGVmaW5lZDt0aGlzLmRlZmF1bHRUeXBlSW5mb189dW5kZWZpbmVkO3RoaXMuZnJvemVuXz1mYWxzZTt9CkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy5wcm90b3R5cGU9e2ZyZWV6ZSgpe2lmKHRoaXMuZnJvemVuXyl7dGhyb3cgbmV3IEVycm9yKCdGcm96ZW4nKTt9CnRoaXMuZnJvemVuXz10cnVlO30sZ2V0IG1vZGUoKXtyZXR1cm4gdGhpcy5tb2RlXzt9LGdldCBkZWZhdWx0TWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TWV0YWRhdGFfO30sc2V0IGRlZmF1bHRNZXRhZGF0YShkZWZhdWx0TWV0YWRhdGEpe2lmKHRoaXMuZnJvemVuXyl7dGhyb3cgbmV3IEVycm9yKCdGcm96ZW4nKTt9CnRoaXMuZGVmYXVsdE1ldGFkYXRhXz1kZWZhdWx0TWV0YWRhdGE7dGhpcy5kZWZhdWx0VHlwZUluZm9fPXVuZGVmaW5lZDt9LGdldCBkZWZhdWx0Q29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5kZWZhdWx0Q29uc3RydWN0b3JfO30sc2V0IGRlZmF1bHRDb25zdHJ1Y3RvcihkZWZhdWx0Q29uc3RydWN0b3Ipe2lmKHRoaXMuZnJvemVuXyl7dGhyb3cgbmV3IEVycm9yKCdGcm96ZW4nKTt9CnRoaXMuZGVmYXVsdENvbnN0cnVjdG9yXz1kZWZhdWx0Q29uc3RydWN0b3I7dGhpcy5kZWZhdWx0VHlwZUluZm9fPXVuZGVmaW5lZDt9LGdldCBkZWZhdWx0VHlwZUluZm8oKXtpZih0aGlzLmRlZmF1bHRUeXBlSW5mb189PT11bmRlZmluZWQmJnRoaXMuZGVmYXVsdENvbnN0cnVjdG9yXyl7dGhpcy5kZWZhdWx0VHlwZUluZm9fPW5ldyBSZWdpc3RlcmVkVHlwZUluZm8odGhpcy5kZWZhdWx0Q29uc3RydWN0b3IsdGhpcy5kZWZhdWx0TWV0YWRhdGEpO30KcmV0dXJuIHRoaXMuZGVmYXVsdFR5cGVJbmZvXzt9LHZhbGlkYXRlQ29uc3RydWN0b3IoY29uc3RydWN0b3Ipe2lmKCF0aGlzLm1hbmRhdG9yeUJhc2VDbGFzcylyZXR1cm47bGV0IGN1clByb3RvPWNvbnN0cnVjdG9yLnByb3RvdHlwZS5fX3Byb3RvX187bGV0IG9rPWZhbHNlO3doaWxlKGN1clByb3RvKXtpZihjdXJQcm90bz09PXRoaXMubWFuZGF0b3J5QmFzZUNsYXNzLnByb3RvdHlwZSl7b2s9dHJ1ZTticmVhazt9CmN1clByb3RvPWN1clByb3RvLl9fcHJvdG9fXzt9CmlmKCFvayl7dGhyb3cgbmV3IEVycm9yKGNvbnN0cnVjdG9yKydtdXN0IGJlIHN1YmNsYXNzIG9mICcrcmVnaXN0cnkpO319fTtyZXR1cm57QkFTSUNfUkVHSVNUUllfTU9ERSxUWVBFX0JBU0VEX1JFR0lTVFJZX01PREUsRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLFJlZ2lzdGVyZWRUeXBlSW5mbyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtsZXQgRXZlbnQ7aWYodHIuaXNIZWFkbGVzcyl7ZnVuY3Rpb24gSGVhZGxlc3NFdmVudCh0eXBlLG9wdF9idWJibGVzLG9wdF9wcmV2ZW50YWJsZSl7dGhpcy50eXBlPXR5cGU7dGhpcy5idWJibGVzPShvcHRfYnViYmxlcyE9PXVuZGVmaW5lZD8hIW9wdF9idWJibGVzOmZhbHNlKTt0aGlzLmNhbmNlbGFibGU9KG9wdF9wcmV2ZW50YWJsZSE9PXVuZGVmaW5lZD8hIW9wdF9wcmV2ZW50YWJsZTpmYWxzZSk7dGhpcy5kZWZhdWx0UHJldmVudGVkPWZhbHNlO3RoaXMuY2FuY2VsQnViYmxlPWZhbHNlO30KSGVhZGxlc3NFdmVudC5wcm90b3R5cGU9e3ByZXZlbnREZWZhdWx0KCl7dGhpcy5kZWZhdWx0UHJldmVudGVkPXRydWU7fSxzdG9wUHJvcGFnYXRpb24oKXt0aGlzLmNhbmNlbEJ1YmJsZT10cnVlO319O0V2ZW50PUhlYWRsZXNzRXZlbnQ7fWVsc2V7ZnVuY3Rpb24gVHJFdmVudCh0eXBlLG9wdF9idWJibGVzLG9wdF9wcmV2ZW50YWJsZSl7Y29uc3QgZT10ci5kb2MuY3JlYXRlRXZlbnQoJ0V2ZW50Jyk7ZS5pbml0RXZlbnQodHlwZSwhIW9wdF9idWJibGVzLCEhb3B0X3ByZXZlbnRhYmxlKTtlLl9fcHJvdG9fXz1nbG9iYWwuRXZlbnQucHJvdG90eXBlO3JldHVybiBlO30KVHJFdmVudC5wcm90b3R5cGU9e19fcHJvdG9fXzpnbG9iYWwuRXZlbnQucHJvdG90eXBlfTtFdmVudD1UckV2ZW50O30KZnVuY3Rpb24gZGlzcGF0Y2hTaW1wbGVFdmVudCh0YXJnZXQsdHlwZSxvcHRfYnViYmxlcyxvcHRfY2FuY2VsYWJsZSxvcHRfZmllbGRzKXtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KHR5cGUsb3B0X2J1YmJsZXMsb3B0X2NhbmNlbGFibGUpO09iamVjdC5hc3NpZ24oZSxvcHRfZmllbGRzKTtyZXR1cm4gdGFyZ2V0LmRpc3BhdGNoRXZlbnQoZSk7fQphc3luYyBmdW5jdGlvbiBkaXNwYXRjaFNpbXBsZUV2ZW50QXN5bmModGFyZ2V0LHR5cGUsb3B0X2ZpZWxkcyl7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCh0eXBlLGZhbHNlLGZhbHNlKTtPYmplY3QuYXNzaWduKGUsb3B0X2ZpZWxkcyk7cmV0dXJuIGF3YWl0IHRhcmdldC5kaXNwYXRjaEFzeW5jKGUpO30KcmV0dXJue0V2ZW50LGRpc3BhdGNoU2ltcGxlRXZlbnQsZGlzcGF0Y2hTaW1wbGVFdmVudEFzeW5jLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IFJlZ2lzdGVyZWRUeXBlSW5mbz10ci5iLlJlZ2lzdGVyZWRUeXBlSW5mbztjb25zdCBFeHRlbnNpb25SZWdpc3RyeU9wdGlvbnM9dHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnM7ZnVuY3Rpb24gZGVjb3JhdGVCYXNpY0V4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyl7Y29uc3Qgc2F2ZWRTdGF0ZVN0YWNrPVtdO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPVtdO3JlZ2lzdHJ5LnJlZ2lzdGVyPWZ1bmN0aW9uKGNvbnN0cnVjdG9yLG9wdF9tZXRhZGF0YSl7aWYocmVnaXN0cnkuZmluZEluZGV4T2ZSZWdpc3RlcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0hhbmRsZXIgYWxyZWFkeSByZWdpc3RlcmVkIGZvciAnK2NvbnN0cnVjdG9yKTt9CmV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy52YWxpZGF0ZUNvbnN0cnVjdG9yKGNvbnN0cnVjdG9yKTtjb25zdCBtZXRhZGF0YT17fTtmb3IoY29uc3QgayBpbiBleHRlbnNpb25SZWdpc3RyeU9wdGlvbnMuZGVmYXVsdE1ldGFkYXRhKXttZXRhZGF0YVtrXT1leHRlbnNpb25SZWdpc3RyeU9wdGlvbnMuZGVmYXVsdE1ldGFkYXRhW2tdO30KaWYob3B0X21ldGFkYXRhKXtmb3IoY29uc3QgayBpbiBvcHRfbWV0YWRhdGEpe21ldGFkYXRhW2tdPW9wdF9tZXRhZGF0YVtrXTt9fQpjb25zdCB0eXBlSW5mbz1uZXcgUmVnaXN0ZXJlZFR5cGVJbmZvKGNvbnN0cnVjdG9yLG1ldGFkYXRhKTtsZXQgZT1uZXcgdHIuYi5FdmVudCgnd2lsbC1yZWdpc3RlcicpO2UudHlwZUluZm89dHlwZUluZm87cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTtyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXy5wdXNoKHR5cGVJbmZvKTtlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LnB1c2hDbGVhblN0YXRlQmVmb3JlVGVzdD1mdW5jdGlvbigpe3NhdmVkU3RhdGVTdGFjay5wdXNoKHJlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfKTtyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXz1bXTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LnBvcENsZWFuU3RhdGVBZnRlclRlc3Q9ZnVuY3Rpb24oKXtyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXz1zYXZlZFN0YXRlU3RhY2tbMF07c2F2ZWRTdGF0ZVN0YWNrLnNwbGljZSgwLDEpO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkuZmluZEluZGV4T2ZSZWdpc3RlcmVkQ29uc3RydWN0b3I9ZnVuY3Rpb24oY29uc3RydWN0b3Ipe2ZvcihsZXQgaT0wO2k8cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18ubGVuZ3RoO2krKyl7aWYocmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc19baV0uY29uc3RydWN0b3I9PT1jb25zdHJ1Y3Rvcil7cmV0dXJuIGk7fX0KcmV0dXJuIHVuZGVmaW5lZDt9O3JlZ2lzdHJ5LnVucmVnaXN0ZXI9ZnVuY3Rpb24oY29uc3RydWN0b3Ipe2NvbnN0IGZvdW5kSW5kZXg9cmVnaXN0cnkuZmluZEluZGV4T2ZSZWdpc3RlcmVkQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO2lmKGZvdW5kSW5kZXg9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihjb25zdHJ1Y3RvcisnIG5vdCByZWdpc3RlcmVkJyk7fQpyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXy5zcGxpY2UoZm91bmRJbmRleCwxKTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LmdldEFsbFJlZ2lzdGVyZWRUeXBlSW5mb3M9ZnVuY3Rpb24oKXtyZXR1cm4gcmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc187fTtyZWdpc3RyeS5maW5kVHlwZUluZm89ZnVuY3Rpb24oY29uc3RydWN0b3Ipe2NvbnN0IGZvdW5kSW5kZXg9dGhpcy5maW5kSW5kZXhPZlJlZ2lzdGVyZWRDb25zdHJ1Y3Rvcihjb25zdHJ1Y3Rvcik7aWYoZm91bmRJbmRleCE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMucmVnaXN0ZXJlZFR5cGVJbmZvc19bZm91bmRJbmRleF07fQpyZXR1cm4gdW5kZWZpbmVkO307cmVnaXN0cnkuZmluZFR5cGVJbmZvTWF0Y2hpbmc9ZnVuY3Rpb24ocHJlZGljYXRlLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpcz9vcHRfdGhpczp1bmRlZmluZWQ7Zm9yKGxldCBpPTA7aTxyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXy5sZW5ndGg7KytpKXtjb25zdCB0eXBlSW5mbz1yZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zX1tpXTtpZihwcmVkaWNhdGUuY2FsbChvcHRfdGhpcyx0eXBlSW5mbykpe3JldHVybiB0eXBlSW5mbzt9fQpyZXR1cm4gZXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLmRlZmF1bHRUeXBlSW5mbzt9O3JlZ2lzdHJ5LmZpbmRUeXBlSW5mb1dpdGhOYW1lPWZ1bmN0aW9uKG5hbWUpe2lmKHR5cGVvZihuYW1lKSE9PSdzdHJpbmcnKXt0aHJvdyBuZXcgRXJyb3IoJ05hbWUgaXMgbm90IGEgc3RyaW5nLicpO30KY29uc3QgdHlwZUluZm89cmVnaXN0cnkuZmluZFR5cGVJbmZvTWF0Y2hpbmcoZnVuY3Rpb24odGkpe3JldHVybiB0aS5jb25zdHJ1Y3Rvci5uYW1lPT09bmFtZTt9KTtpZih0eXBlSW5mbylyZXR1cm4gdHlwZUluZm87cmV0dXJuIHVuZGVmaW5lZDt9O30KcmV0dXJue19kZWNvcmF0ZUJhc2ljRXh0ZW5zaW9uUmVnaXN0cnk6ZGVjb3JhdGVCYXNpY0V4dGVuc2lvblJlZ2lzdHJ5fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgY2F0ZWdvcnlQYXJ0c0Zvcj17fTtmdW5jdGlvbiBnZXRDYXRlZ29yeVBhcnRzKGNhdGVnb3J5KXtsZXQgcGFydHM9Y2F0ZWdvcnlQYXJ0c0ZvcltjYXRlZ29yeV07aWYocGFydHMhPT11bmRlZmluZWQpcmV0dXJuIHBhcnRzO3BhcnRzPWNhdGVnb3J5LnNwbGl0KCcsJyk7Y2F0ZWdvcnlQYXJ0c0ZvcltjYXRlZ29yeV09cGFydHM7cmV0dXJuIHBhcnRzO30KcmV0dXJue2dldENhdGVnb3J5UGFydHMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgZ2V0Q2F0ZWdvcnlQYXJ0cz10ci5iLmdldENhdGVnb3J5UGFydHM7Y29uc3QgUmVnaXN0ZXJlZFR5cGVJbmZvPXRyLmIuUmVnaXN0ZXJlZFR5cGVJbmZvO2NvbnN0IEV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucz10ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucztmdW5jdGlvbiBkZWNvcmF0ZVR5cGVCYXNlZEV4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyl7Y29uc3Qgc2F2ZWRTdGF0ZVN0YWNrPVtdO3JlZ2lzdHJ5LnJlZ2lzdGVyZWRUeXBlSW5mb3NfPVtdO3JlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBfPW5ldyBNYXAoKTtyZWdpc3RyeS50eXBlTmFtZVRvVHlwZUluZm9NYXBfPW5ldyBNYXAoKTtyZWdpc3RyeS5yZWdpc3Rlcj1mdW5jdGlvbihjb25zdHJ1Y3RvcixtZXRhZGF0YSl7ZXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zLnZhbGlkYXRlQ29uc3RydWN0b3IoY29uc3RydWN0b3IpO2NvbnN0IHR5cGVJbmZvPW5ldyBSZWdpc3RlcmVkVHlwZUluZm8oY29uc3RydWN0b3IsbWV0YWRhdGF8fGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy5kZWZhdWx0TWV0YWRhdGEpO3R5cGVJbmZvLnR5cGVOYW1lcz1bXTt0eXBlSW5mby5jYXRlZ29yeVBhcnRzPVtdO2lmKG1ldGFkYXRhJiZtZXRhZGF0YS50eXBlTmFtZSl7dHlwZUluZm8udHlwZU5hbWVzLnB1c2gobWV0YWRhdGEudHlwZU5hbWUpO30KaWYobWV0YWRhdGEmJm1ldGFkYXRhLnR5cGVOYW1lcyl7dHlwZUluZm8udHlwZU5hbWVzLnB1c2guYXBwbHkodHlwZUluZm8udHlwZU5hbWVzLG1ldGFkYXRhLnR5cGVOYW1lcyk7fQppZihtZXRhZGF0YSYmbWV0YWRhdGEuY2F0ZWdvcnlQYXJ0cyl7dHlwZUluZm8uY2F0ZWdvcnlQYXJ0cy5wdXNoLmFwcGx5KHR5cGVJbmZvLmNhdGVnb3J5UGFydHMsbWV0YWRhdGEuY2F0ZWdvcnlQYXJ0cyk7fQppZih0eXBlSW5mby50eXBlTmFtZXMubGVuZ3RoPT09MCYmdHlwZUluZm8uY2F0ZWdvcnlQYXJ0cy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ3R5cGVOYW1lIG9yIHR5cGVOYW1lcyBtdXN0IGJlIHByb3ZpZGVkJyk7fQp0eXBlSW5mby50eXBlTmFtZXMuZm9yRWFjaChmdW5jdGlvbih0eXBlTmFtZSl7aWYocmVnaXN0cnkudHlwZU5hbWVUb1R5cGVJbmZvTWFwXy5oYXModHlwZU5hbWUpKXt0aHJvdyBuZXcgRXJyb3IoJ3R5cGVOYW1lICcrdHlwZU5hbWUrJyBhbHJlYWR5IHJlZ2lzdGVyZWQnKTt9fSk7dHlwZUluZm8uY2F0ZWdvcnlQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5UGFydCl7aWYocmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF8uaGFzKGNhdGVnb3J5UGFydCkpe3Rocm93IG5ldyBFcnJvcignY2F0ZWdvcnlQYXJ0ICcrY2F0ZWdvcnlQYXJ0KycgYWxyZWFkeSByZWdpc3RlcmVkJyk7fX0pO2xldCBlPW5ldyB0ci5iLkV2ZW50KCd3aWxsLXJlZ2lzdGVyJyk7ZS50eXBlSW5mbz10eXBlSW5mbztyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO3R5cGVJbmZvLnR5cGVOYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKHR5cGVOYW1lKXtyZWdpc3RyeS50eXBlTmFtZVRvVHlwZUluZm9NYXBfLnNldCh0eXBlTmFtZSx0eXBlSW5mbyk7fSk7dHlwZUluZm8uY2F0ZWdvcnlQYXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGNhdGVnb3J5UGFydCl7cmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF8uc2V0KGNhdGVnb3J5UGFydCx0eXBlSW5mbyk7fSk7cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18ucHVzaCh0eXBlSW5mbyk7ZT1uZXcgdHIuYi5FdmVudCgncmVnaXN0cnktY2hhbmdlZCcpO3JlZ2lzdHJ5LmRpc3BhdGNoRXZlbnQoZSk7fTtyZWdpc3RyeS5wdXNoQ2xlYW5TdGF0ZUJlZm9yZVRlc3Q9ZnVuY3Rpb24oKXtzYXZlZFN0YXRlU3RhY2sucHVzaCh7cmVnaXN0ZXJlZFR5cGVJbmZvczpyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXyx0eXBlTmFtZVRvVHlwZUluZm9NYXA6cmVnaXN0cnkudHlwZU5hbWVUb1R5cGVJbmZvTWFwXyxjYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwOnJlZ2lzdHJ5LmNhdGVnb3J5UGFydFRvVHlwZUluZm9NYXBffSk7cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc189W107cmVnaXN0cnkudHlwZU5hbWVUb1R5cGVJbmZvTWFwXz1uZXcgTWFwKCk7cmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF89bmV3IE1hcCgpO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkucG9wQ2xlYW5TdGF0ZUFmdGVyVGVzdD1mdW5jdGlvbigpe2NvbnN0IHN0YXRlPXNhdmVkU3RhdGVTdGFja1swXTtzYXZlZFN0YXRlU3RhY2suc3BsaWNlKDAsMSk7cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc189c3RhdGUucmVnaXN0ZXJlZFR5cGVJbmZvcztyZWdpc3RyeS50eXBlTmFtZVRvVHlwZUluZm9NYXBfPXN0YXRlLnR5cGVOYW1lVG9UeXBlSW5mb01hcDtyZWdpc3RyeS5jYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwXz1zdGF0ZS5jYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3JlZ2lzdHJ5LWNoYW5nZWQnKTtyZWdpc3RyeS5kaXNwYXRjaEV2ZW50KGUpO307cmVnaXN0cnkudW5yZWdpc3Rlcj1mdW5jdGlvbihjb25zdHJ1Y3Rvcil7bGV0IHR5cGVJbmZvSW5kZXg9LTE7Zm9yKGxldCBpPTA7aTxyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zXy5sZW5ndGg7aSsrKXtpZihyZWdpc3RyeS5yZWdpc3RlcmVkVHlwZUluZm9zX1tpXS5jb25zdHJ1Y3Rvcj09PWNvbnN0cnVjdG9yKXt0eXBlSW5mb0luZGV4PWk7YnJlYWs7fX0KaWYodHlwZUluZm9JbmRleD09PS0xKXt0aHJvdyBuZXcgRXJyb3IoY29uc3RydWN0b3IrJyBub3QgcmVnaXN0ZXJlZCcpO30KY29uc3QgdHlwZUluZm89cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc19bdHlwZUluZm9JbmRleF07cmVnaXN0cnkucmVnaXN0ZXJlZFR5cGVJbmZvc18uc3BsaWNlKHR5cGVJbmZvSW5kZXgsMSk7dHlwZUluZm8udHlwZU5hbWVzLmZvckVhY2goZnVuY3Rpb24odHlwZU5hbWUpe3JlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF8uZGVsZXRlKHR5cGVOYW1lKTt9KTt0eXBlSW5mby5jYXRlZ29yeVBhcnRzLmZvckVhY2goZnVuY3Rpb24oY2F0ZWdvcnlQYXJ0KXtyZWdpc3RyeS5jYXRlZ29yeVBhcnRUb1R5cGVJbmZvTWFwXy5kZWxldGUoY2F0ZWdvcnlQYXJ0KTt9KTtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyZWdpc3RyeS1jaGFuZ2VkJyk7cmVnaXN0cnkuZGlzcGF0Y2hFdmVudChlKTt9O3JlZ2lzdHJ5LmdldFR5cGVJbmZvPWZ1bmN0aW9uKGNhdGVnb3J5LHR5cGVOYW1lKXtpZihjYXRlZ29yeSl7Y29uc3QgY2F0ZWdvcnlQYXJ0cz1nZXRDYXRlZ29yeVBhcnRzKGNhdGVnb3J5KTtmb3IobGV0IGk9MDtpPGNhdGVnb3J5UGFydHMubGVuZ3RoO2krKyl7Y29uc3QgY2F0ZWdvcnlQYXJ0PWNhdGVnb3J5UGFydHNbaV07Y29uc3QgdHlwZUluZm89cmVnaXN0cnkuY2F0ZWdvcnlQYXJ0VG9UeXBlSW5mb01hcF8uZ2V0KGNhdGVnb3J5UGFydCk7aWYodHlwZUluZm8hPT11bmRlZmluZWQpcmV0dXJuIHR5cGVJbmZvO319CmNvbnN0IHR5cGVJbmZvPXJlZ2lzdHJ5LnR5cGVOYW1lVG9UeXBlSW5mb01hcF8uZ2V0KHR5cGVOYW1lKTtpZih0eXBlSW5mbyE9PXVuZGVmaW5lZClyZXR1cm4gdHlwZUluZm87cmV0dXJuIGV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucy5kZWZhdWx0VHlwZUluZm87fTtyZWdpc3RyeS5nZXRDb25zdHJ1Y3Rvcj1mdW5jdGlvbihjYXRlZ29yeSx0eXBlTmFtZSl7Y29uc3QgdHlwZUluZm89cmVnaXN0cnkuZ2V0VHlwZUluZm8oY2F0ZWdvcnksdHlwZU5hbWUpO2lmKHR5cGVJbmZvKXJldHVybiB0eXBlSW5mby5jb25zdHJ1Y3RvcjtyZXR1cm4gdW5kZWZpbmVkO307fQpyZXR1cm57X2RlY29yYXRlVHlwZUJhc2VkRXh0ZW5zaW9uUmVnaXN0cnk6ZGVjb3JhdGVUeXBlQmFzZWRFeHRlbnNpb25SZWdpc3RyeX07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IFVSTF9SRUdFWD0vXihodHRwcz86XC9cLyh3d3dcLik/Wy1hLXpBLVowLTlAOiUuX1wrfiM9XXsyLDI1Nn1cLlthLXpdezIsNn1cYnxmaWxlOlwvXC8pKFstYS16QS1aMC05QDolX1wrLn4jPyYvLz1dKikkLztmdW5jdGlvbiBkZWVwQ29weSh2YWx1ZSl7aWYoISh2YWx1ZSBpbnN0YW5jZW9mIE9iamVjdCkpe2lmKHZhbHVlPT09dW5kZWZpbmVkfHx2YWx1ZT09PW51bGwpcmV0dXJuIHZhbHVlO2lmKHR5cGVvZiB2YWx1ZT09PSdzdHJpbmcnKXJldHVybiB2YWx1ZS5zdWJzdHJpbmcoKTtpZih0eXBlb2YgdmFsdWU9PT0nYm9vbGVhbicpcmV0dXJuIHZhbHVlO2lmKHR5cGVvZiB2YWx1ZT09PSdudW1iZXInKXJldHVybiB2YWx1ZTt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZDogJyt0eXBlb2YgdmFsdWUpO30KY29uc3Qgb2JqZWN0PXZhbHVlO2lmKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KXtjb25zdCByZXM9bmV3IEFycmF5KG9iamVjdC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8b2JqZWN0Lmxlbmd0aDtpKyspe3Jlc1tpXT1kZWVwQ29weShvYmplY3RbaV0pO30KcmV0dXJuIHJlczt9CmlmKG9iamVjdC5fX3Byb3RvX18hPT1PYmplY3QucHJvdG90eXBlKXt0aHJvdyBuZXcgRXJyb3IoJ0NhbiBvbmx5IGNsb25lIHNpbXBsZSB0eXBlcycpO30KY29uc3QgcmVzPXt9O2Zvcihjb25zdCBrZXkgaW4gb2JqZWN0KXtyZXNba2V5XT1kZWVwQ29weShvYmplY3Rba2V5XSk7fQpyZXR1cm4gcmVzO30KZnVuY3Rpb24gbm9ybWFsaXplRXhjZXB0aW9uKGUpe2lmKGU9PT11bmRlZmluZWR8fGU9PT1udWxsKXtyZXR1cm57dHlwZU5hbWU6J1VuZGVmaW5lZEVycm9yJyxtZXNzYWdlOidVbmtub3duOiBudWxsIG9yIHVuZGVmaW5lZCBleGNlcHRpb24nLHN0YWNrOidVbmtub3duJ307fQppZih0eXBlb2YoZSk9PT0nc3RyaW5nJyl7cmV0dXJue3R5cGVOYW1lOidTdHJpbmdFcnJvcicsbWVzc2FnZTplLHN0YWNrOltlXX07fQpsZXQgdHlwZU5hbWU7aWYoZS5uYW1lKXt0eXBlTmFtZT1lLm5hbWU7fWVsc2UgaWYoZS5jb25zdHJ1Y3Rvcil7aWYoZS5jb25zdHJ1Y3Rvci5uYW1lKXt0eXBlTmFtZT1lLmNvbnN0cnVjdG9yLm5hbWU7fWVsc2V7dHlwZU5hbWU9J0Fub255bW91c0Vycm9yJzt9fWVsc2V7dHlwZU5hbWU9J0Vycm9yV2l0aE5vQ29uc3RydWN0b3InO30KY29uc3QgbXNnPWUubWVzc2FnZT9lLm1lc3NhZ2U6J1Vua25vd24nO3JldHVybnt0eXBlTmFtZSxtZXNzYWdlOm1zZyxzdGFjazplLnN0YWNrP2Uuc3RhY2s6W21zZ119O30KZnVuY3Rpb24gc3RhY2tUcmFjZUFzU3RyaW5nKCl7cmV0dXJuIG5ldyBFcnJvcigpLnN0YWNrKycnO30KZnVuY3Rpb24gc3RhY2tUcmFjZSgpe2xldCBzdGFjaz1zdGFja1RyYWNlQXNTdHJpbmcoKTtzdGFjaz1zdGFjay5zcGxpdCgnXG4nKTtyZXR1cm4gc3RhY2suc2xpY2UoMik7fQpmdW5jdGlvbiBnZXRVc2luZ1BhdGgocGF0aCxmcm9tRGljdCl7Y29uc3QgcGFydHM9cGF0aC5zcGxpdCgnLicpO2xldCBjdXI9ZnJvbURpY3Q7Zm9yKGxldCBwYXJ0O3BhcnRzLmxlbmd0aCYmKHBhcnQ9cGFydHMuc2hpZnQoKSk7KXtpZighcGFydHMubGVuZ3RoKXtyZXR1cm4gY3VyW3BhcnRdO31lbHNlIGlmKHBhcnQgaW4gY3VyKXtjdXI9Y3VyW3BhcnRdO31lbHNle3JldHVybiB1bmRlZmluZWQ7fX0KcmV0dXJuIHVuZGVmaW5lZDt9CmZ1bmN0aW9uIGZvcm1hdERhdGUoZGF0ZSl7cmV0dXJuIGRhdGUudG9JU09TdHJpbmcoKS5yZXBsYWNlKCdUJywnICcpLnNsaWNlKDAsMTkpO30KZnVuY3Rpb24gbnVtYmVyVG9Kc29uKG4pe2lmKGlzTmFOKG4pKXJldHVybidOYU4nO2lmKG49PT1JbmZpbml0eSlyZXR1cm4nSW5maW5pdHknO2lmKG49PT0tSW5maW5pdHkpcmV0dXJuJy1JbmZpbml0eSc7cmV0dXJuIG47fQpmdW5jdGlvbiBudW1iZXJGcm9tSnNvbihuKXtpZihuPT09J05hTid8fG49PT1udWxsKXJldHVybiBOYU47aWYobj09PSdJbmZpbml0eScpcmV0dXJuIEluZmluaXR5O2lmKG49PT0nLUluZmluaXR5JylyZXR1cm4tSW5maW5pdHk7cmV0dXJuIG47fQpmdW5jdGlvbiBydW5MZW5ndGhFbmNvZGluZyhhcnkpe2NvbnN0IGVuY29kZWRBcnJheT1bXTtmb3IoY29uc3QgZWxlbWVudCBvZiBhcnkpe2lmKGVuY29kZWRBcnJheS5sZW5ndGg9PT0wfHxlbmNvZGVkQXJyYXlbZW5jb2RlZEFycmF5Lmxlbmd0aC0xXS52YWx1ZSE9PWVsZW1lbnQpe2VuY29kZWRBcnJheS5wdXNoKHt2YWx1ZTplbGVtZW50LGNvdW50OjEsfSk7fWVsc2V7ZW5jb2RlZEFycmF5W2VuY29kZWRBcnJheS5sZW5ndGgtMV0uY291bnQrPTE7fX0KcmV0dXJuIGVuY29kZWRBcnJheTt9CmZ1bmN0aW9uIGlzVXJsKHMpe3JldHVybiB0eXBlb2Yocyk9PT0nc3RyaW5nJyYmcy5tYXRjaChVUkxfUkVHRVgpIT09bnVsbDt9CmZ1bmN0aW9uIGdldE9ubHlFbGVtZW50KGl0ZXJhYmxlKXtjb25zdCBpdGVyYXRvcj1pdGVyYWJsZVtTeW1ib2wuaXRlcmF0b3JdKCk7Y29uc3QgZmlyc3RJdGVyYXRpb249aXRlcmF0b3IubmV4dCgpO2lmKGZpcnN0SXRlcmF0aW9uLmRvbmUpe3Rocm93IG5ldyBFcnJvcignZ2V0T25seUVsZW1lbnQgd2FzIHBhc3NlZCBhbiBlbXB0eSBpdGVyYWJsZS4nKTt9CmNvbnN0IHNlY29uZEl0ZXJhdGlvbj1pdGVyYXRvci5uZXh0KCk7aWYoIXNlY29uZEl0ZXJhdGlvbi5kb25lKXt0aHJvdyBuZXcgRXJyb3IoJ2dldE9ubHlFbGVtZW50IHdhcyBwYXNzZWQgYW4gaXRlcmFibGUgd2l0aCBtdWx0aXBsZSBlbGVtZW50cy4nKTt9CnJldHVybiBmaXJzdEl0ZXJhdGlvbi52YWx1ZTt9CmZ1bmN0aW9uIGdldEZpcnN0RWxlbWVudChpdGVyYWJsZSl7Y29uc3QgaXRlcmF0b3I9aXRlcmFibGVbU3ltYm9sLml0ZXJhdG9yXSgpO2NvbnN0IHJlc3VsdD1pdGVyYXRvci5uZXh0KCk7aWYocmVzdWx0LmRvbmUpe3Rocm93IG5ldyBFcnJvcignZ2V0Rmlyc3RFbGVtZW50IHdhcyBwYXNzZWQgYW4gZW1wdHkgaXRlcmFibGUuJyk7fQpyZXR1cm4gcmVzdWx0LnZhbHVlO30KZnVuY3Rpb24gY29tcGFyZUFycmF5cyh4LHksZWxlbWVudENtcCl7Y29uc3QgbWluTGVuZ3RoPU1hdGgubWluKHgubGVuZ3RoLHkubGVuZ3RoKTtsZXQgaTtmb3IoaT0wO2k8bWluTGVuZ3RoO2krKyl7Y29uc3QgdG1wPWVsZW1lbnRDbXAoeFtpXSx5W2ldKTtpZih0bXApcmV0dXJuIHRtcDt9CmlmKHgubGVuZ3RoPT09eS5sZW5ndGgpcmV0dXJuIDA7aWYoeFtpXT09PXVuZGVmaW5lZClyZXR1cm4tMTtyZXR1cm4gMTt9CmZ1bmN0aW9uIGdyb3VwSW50b01hcChhcnksY2FsbGJhY2ssb3B0X3RoaXMsb3B0X2FycmF5Q29uc3RydWN0b3Ipe2NvbnN0IGFycmF5Q29uc3RydWN0b3I9b3B0X2FycmF5Q29uc3RydWN0b3J8fEFycmF5O2NvbnN0IHJlc3VsdHM9bmV3IE1hcCgpO2Zvcihjb25zdCBlbGVtZW50IG9mIGFyeSl7Y29uc3Qga2V5PWNhbGxiYWNrLmNhbGwob3B0X3RoaXMsZWxlbWVudCk7bGV0IGl0ZW1zPXJlc3VsdHMuZ2V0KGtleSk7aWYoaXRlbXM9PT11bmRlZmluZWQpe2l0ZW1zPW5ldyBhcnJheUNvbnN0cnVjdG9yKCk7cmVzdWx0cy5zZXQoa2V5LGl0ZW1zKTt9Cml0ZW1zLnB1c2goZWxlbWVudCk7fQpyZXR1cm4gcmVzdWx0czt9CmZ1bmN0aW9uIGluUGxhY2VGaWx0ZXIoYXJyYXkscHJlZGljYXRlLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpc3x8dGhpcztsZXQgbmV4dFBvc2l0aW9uPTA7Zm9yKGxldCBpPTA7aTxhcnJheS5sZW5ndGg7aSsrKXtpZighcHJlZGljYXRlLmNhbGwob3B0X3RoaXMsYXJyYXlbaV0saSkpY29udGludWU7aWYobmV4dFBvc2l0aW9uPGkpe2FycmF5W25leHRQb3NpdGlvbl09YXJyYXlbaV07fQpuZXh0UG9zaXRpb24rKzt9CmlmKG5leHRQb3NpdGlvbjxhcnJheS5sZW5ndGgpe2FycmF5Lmxlbmd0aD1uZXh0UG9zaXRpb247fX0KZnVuY3Rpb24gaW52ZXJ0QXJyYXlPZkRpY3RzKGFycmF5LG9wdF9kaWN0R2V0dGVyLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpc3x8dGhpcztjb25zdCByZXN1bHQ9e307Zm9yKGxldCBpPTA7aTxhcnJheS5sZW5ndGg7aSsrKXtjb25zdCBpdGVtPWFycmF5W2ldO2lmKGl0ZW09PT11bmRlZmluZWQpY29udGludWU7Y29uc3QgZGljdD1vcHRfZGljdEdldHRlcj9vcHRfZGljdEdldHRlci5jYWxsKG9wdF90aGlzLGl0ZW0pOml0ZW07aWYoZGljdD09PXVuZGVmaW5lZCljb250aW51ZTtmb3IoY29uc3Qga2V5IGluIGRpY3Qpe2xldCB2YWx1ZUxpc3Q9cmVzdWx0W2tleV07aWYodmFsdWVMaXN0PT09dW5kZWZpbmVkKXtyZXN1bHRba2V5XT12YWx1ZUxpc3Q9bmV3IEFycmF5KGFycmF5Lmxlbmd0aCk7fQp2YWx1ZUxpc3RbaV09ZGljdFtrZXldO319CnJldHVybiByZXN1bHQ7fQpmdW5jdGlvbiBzZXRzRXF1YWwoYSxiKXtpZighKGEgaW5zdGFuY2VvZiBTZXQpfHwhKGIgaW5zdGFuY2VvZiBTZXQpKXJldHVybiBmYWxzZTtpZihhLnNpemUhPT1iLnNpemUpcmV0dXJuIGZhbHNlO2Zvcihjb25zdCB4IG9mIGEpe2lmKCFiLmhhcyh4KSlyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9CmZ1bmN0aW9uIGZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoYXJ5LG1hcEZuLGxvVmFsKXtpZihhcnkubGVuZ3RoPT09MClyZXR1cm4gMTtsZXQgbG93PTA7bGV0IGhpZ2g9YXJ5Lmxlbmd0aC0xO2xldCBpO2xldCBjb21wYXJpc29uO2xldCBoaXRQb3M9LTE7d2hpbGUobG93PD1oaWdoKXtpPU1hdGguZmxvb3IoKGxvdytoaWdoKS8yKTtjb21wYXJpc29uPW1hcEZuKGFyeVtpXSktbG9WYWw7aWYoY29tcGFyaXNvbjwwKXtsb3c9aSsxO2NvbnRpbnVlO31lbHNlIGlmKGNvbXBhcmlzb24+MCl7aGlnaD1pLTE7Y29udGludWU7fWVsc2V7aGl0UG9zPWk7aGlnaD1pLTE7fX0KcmV0dXJuIGhpdFBvcyE9PS0xP2hpdFBvczpsb3c7fQpmdW5jdGlvbiBmaW5kSW5kZXhJblNvcnRlZEludGVydmFscyhhcnksbWFwTG9GbixtYXBXaWR0aEZuLGxvVmFsKXtjb25zdCBmaXJzdD1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBMb0ZuLGxvVmFsKTtpZihmaXJzdD09PTApe2lmKGxvVmFsPj1tYXBMb0ZuKGFyeVswXSkmJmxvVmFsPG1hcExvRm4oYXJ5WzBdKSttYXBXaWR0aEZuKGFyeVswXSwwKSl7cmV0dXJuIDA7fQpyZXR1cm4tMTt9CmlmKGZpcnN0PGFyeS5sZW5ndGgpe2lmKGxvVmFsPj1tYXBMb0ZuKGFyeVtmaXJzdF0pJiZsb1ZhbDxtYXBMb0ZuKGFyeVtmaXJzdF0pK21hcFdpZHRoRm4oYXJ5W2ZpcnN0XSxmaXJzdCkpe3JldHVybiBmaXJzdDt9CmlmKGxvVmFsPj1tYXBMb0ZuKGFyeVtmaXJzdC0xXSkmJmxvVmFsPG1hcExvRm4oYXJ5W2ZpcnN0LTFdKSsKbWFwV2lkdGhGbihhcnlbZmlyc3QtMV0sZmlyc3QtMSkpe3JldHVybiBmaXJzdC0xO30KcmV0dXJuIGFyeS5sZW5ndGg7fQppZihmaXJzdD09PWFyeS5sZW5ndGgpe2lmKGxvVmFsPj1tYXBMb0ZuKGFyeVtmaXJzdC0xXSkmJmxvVmFsPG1hcExvRm4oYXJ5W2ZpcnN0LTFdKSsKbWFwV2lkdGhGbihhcnlbZmlyc3QtMV0sZmlyc3QtMSkpe3JldHVybiBmaXJzdC0xO30KcmV0dXJuIGFyeS5sZW5ndGg7fQpyZXR1cm4gYXJ5Lmxlbmd0aDt9CmZ1bmN0aW9uIGZpbmRJbmRleEluU29ydGVkQ2xvc2VkSW50ZXJ2YWxzKGFyeSxtYXBMb0ZuLG1hcEhpRm4sdmFsKXtjb25zdCBpPWZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoYXJ5LG1hcExvRm4sdmFsKTtpZihpPT09MCl7aWYodmFsPj1tYXBMb0ZuKGFyeVswXSwwKSYmdmFsPD1tYXBIaUZuKGFyeVswXSwwKSl7cmV0dXJuIDA7fQpyZXR1cm4tMTt9CmlmKGk8YXJ5Lmxlbmd0aCl7aWYodmFsPj1tYXBMb0ZuKGFyeVtpLTFdLGktMSkmJnZhbDw9bWFwSGlGbihhcnlbaS0xXSxpLTEpKXtyZXR1cm4gaS0xO30KaWYodmFsPj1tYXBMb0ZuKGFyeVtpXSxpKSYmdmFsPD1tYXBIaUZuKGFyeVtpXSxpKSl7cmV0dXJuIGk7fQpyZXR1cm4gYXJ5Lmxlbmd0aDt9CmlmKGk9PT1hcnkubGVuZ3RoKXtpZih2YWw+PW1hcExvRm4oYXJ5W2ktMV0saS0xKSYmdmFsPD1tYXBIaUZuKGFyeVtpLTFdLGktMSkpe3JldHVybiBpLTE7fQpyZXR1cm4gYXJ5Lmxlbmd0aDt9CnJldHVybiBhcnkubGVuZ3RoO30KZnVuY3Rpb24gaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHMoYXJ5LG1hcExvRm4sbWFwV2lkdGhGbixsb1ZhbCxoaVZhbCxjYil7aWYoYXJ5Lmxlbmd0aD09PTApcmV0dXJuO2lmKGxvVmFsPmhpVmFsKXJldHVybjtsZXQgaT1maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KGFyeSxtYXBMb0ZuLGxvVmFsKTtpZihpPT09LTEpe3JldHVybjt9CmlmKGk+MCl7Y29uc3QgaGk9bWFwTG9GbihhcnlbaS0xXSkrbWFwV2lkdGhGbihhcnlbaS0xXSxpLTEpO2lmKGhpPj1sb1ZhbCl7Y2IoYXJ5W2ktMV0saS0xKTt9fQppZihpPT09YXJ5Lmxlbmd0aCl7cmV0dXJuO30KZm9yKGxldCBuPWFyeS5sZW5ndGg7aTxuO2krKyl7Y29uc3QgbG89bWFwTG9GbihhcnlbaV0pO2lmKGxvPj1oaVZhbClicmVhaztjYihhcnlbaV0saSk7fX0KZnVuY3Rpb24gZmluZENsb3Nlc3RFbGVtZW50SW5Tb3J0ZWRBcnJheShhcnksbWFwRm4sdmFsLG1heERpZmYpe2lmKGFyeS5sZW5ndGg9PT0wKXJldHVybiBudWxsO2xldCBhZnRJZHg9ZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShhcnksbWFwRm4sdmFsKTtjb25zdCBiZWZJZHg9YWZ0SWR4PjA/YWZ0SWR4LTE6MDtpZihhZnRJZHg9PT1hcnkubGVuZ3RoKWFmdElkeC09MTtjb25zdCBiZWZEaWZmPU1hdGguYWJzKHZhbC1tYXBGbihhcnlbYmVmSWR4XSkpO2NvbnN0IGFmdERpZmY9TWF0aC5hYnModmFsLW1hcEZuKGFyeVthZnRJZHhdKSk7aWYoYmVmRGlmZj5tYXhEaWZmJiZhZnREaWZmPm1heERpZmYpcmV0dXJuIG51bGw7Y29uc3QgaWR4PWJlZkRpZmY8YWZ0RGlmZj9iZWZJZHg6YWZ0SWR4O3JldHVybiBhcnlbaWR4XTt9CmZ1bmN0aW9uIGZpbmRDbG9zZXN0SW50ZXJ2YWxJblNvcnRlZEludGVydmFscyhhcnksbWFwTG9GbixtYXBIaUZuLHZhbCxtYXhEaWZmKXtpZihhcnkubGVuZ3RoPT09MClyZXR1cm4gbnVsbDtsZXQgaWR4PWZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoYXJ5LG1hcExvRm4sdmFsKTtpZihpZHg+MClpZHgtPTE7Y29uc3QgaGlJbnQ9YXJ5W2lkeF07bGV0IGxvSW50PWhpSW50O2lmKHZhbD5tYXBIaUZuKGhpSW50KSYmaWR4KzE8YXJ5Lmxlbmd0aCl7bG9JbnQ9YXJ5W2lkeCsxXTt9CmNvbnN0IGxvRGlmZj1NYXRoLmFicyh2YWwtbWFwTG9Gbihsb0ludCkpO2NvbnN0IGhpRGlmZj1NYXRoLmFicyh2YWwtbWFwSGlGbihoaUludCkpO2lmKGxvRGlmZj5tYXhEaWZmJiZoaURpZmY+bWF4RGlmZilyZXR1cm4gbnVsbDtpZihsb0RpZmY8aGlEaWZmKXJldHVybiBsb0ludDtyZXR1cm4gaGlJbnQ7fQpmdW5jdGlvbiBmaW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KGFycmF5LHRlc3Qpe2xldCBpMD0wO2xldCBpMT1hcnJheS5sZW5ndGg7d2hpbGUoaTA8aTEpe2NvbnN0IGk9TWF0aC50cnVuYygoaTAraTEpLzIpO2lmKHRlc3QoYXJyYXlbaV0pKXtpMT1pO31lbHNle2kwPWkrMTt9fQpyZXR1cm4gaTE7fQpyZXR1cm57Y29tcGFyZUFycmF5cyxkZWVwQ29weSxmaW5kQ2xvc2VzdEVsZW1lbnRJblNvcnRlZEFycmF5LGZpbmRDbG9zZXN0SW50ZXJ2YWxJblNvcnRlZEludGVydmFscyxmaW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5LGZpbmRJbmRleEluU29ydGVkQ2xvc2VkSW50ZXJ2YWxzLGZpbmRJbmRleEluU29ydGVkSW50ZXJ2YWxzLGZpbmRMb3dJbmRleEluU29ydGVkQXJyYXksZm9ybWF0RGF0ZSxnZXRGaXJzdEVsZW1lbnQsZ2V0T25seUVsZW1lbnQsZ2V0VXNpbmdQYXRoLGdyb3VwSW50b01hcCxpblBsYWNlRmlsdGVyLGludmVydEFycmF5T2ZEaWN0cyxpc1VybCxpdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyxub3JtYWxpemVFeGNlcHRpb24sbnVtYmVyRnJvbUpzb24sbnVtYmVyVG9Kc29uLHJ1bkxlbmd0aEVuY29kaW5nLHNldHNFcXVhbCxzdGFja1RyYWNlLHN0YWNrVHJhY2VBc1N0cmluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBkZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LHJlZ2lzdHJ5T3B0aW9ucyl7aWYocmVnaXN0cnkucmVnaXN0ZXIpe3Rocm93IG5ldyBFcnJvcignQWxyZWFkeSBoYXMgcmVnaXN0cnknKTt9CnJlZ2lzdHJ5T3B0aW9ucy5mcmVlemUoKTtpZihyZWdpc3RyeU9wdGlvbnMubW9kZT09PXRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSl7dHIuYi5fZGVjb3JhdGVCYXNpY0V4dGVuc2lvblJlZ2lzdHJ5KHJlZ2lzdHJ5LHJlZ2lzdHJ5T3B0aW9ucyk7fWVsc2UgaWYocmVnaXN0cnlPcHRpb25zLm1vZGU9PT10ci5iLlRZUEVfQkFTRURfUkVHSVNUUllfTU9ERSl7dHIuYi5fZGVjb3JhdGVUeXBlQmFzZWRFeHRlbnNpb25SZWdpc3RyeShyZWdpc3RyeSxyZWdpc3RyeU9wdGlvbnMpO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIG1vZGUnKTt9CmlmKHJlZ2lzdHJ5LmFkZEV2ZW50TGlzdGVuZXI9PT11bmRlZmluZWQpe3RyLmIuRXZlbnRUYXJnZXQuZGVjb3JhdGUocmVnaXN0cnkpO319CnJldHVybntkZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBJbXBvcnRlcigpe30KSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgaW1wb3J0ZXJOYW1lKCl7cmV0dXJuJ0ltcG9ydGVyJzt9LGlzVHJhY2VEYXRhQ29udGFpbmVyKCl7cmV0dXJuIGZhbHNlO30sZXh0cmFjdFN1YnRyYWNlcygpe3JldHVybltdO30saW1wb3J0Q2xvY2tTeW5jTWFya2Vycygpe30saW1wb3J0RXZlbnRzKCl7fSxpbXBvcnRTYW1wbGVEYXRhKCl7fSxmaW5hbGl6ZUltcG9ydCgpe319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e307b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9SW1wb3J0ZXI7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KEltcG9ydGVyLG9wdGlvbnMpO0ltcG9ydGVyLmZpbmRJbXBvcnRlckZvcj1mdW5jdGlvbihldmVudERhdGEpe2NvbnN0IHR5cGVJbmZvPUltcG9ydGVyLmZpbmRUeXBlSW5mb01hdGNoaW5nKGZ1bmN0aW9uKHRpKXtyZXR1cm4gdGkuY29uc3RydWN0b3IuY2FuSW1wb3J0KGV2ZW50RGF0YSk7fSk7aWYodHlwZUluZm8pe3JldHVybiB0eXBlSW5mby5jb25zdHJ1Y3Rvcjt9CnJldHVybiB1bmRlZmluZWQ7fTtyZXR1cm57SW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuZ2Nsb3VkX3RyYWNlJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEdjbG91ZFRyYWNlSW1wb3J0ZXIobW9kZWwsZXZlbnREYXRhKXt0aGlzLmltcG9ydFByaW9yaXR5PTI7dGhpcy5ldmVudERhdGFfPWV2ZW50RGF0YTt9CkdjbG91ZFRyYWNlSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7aWYodHlwZW9mKGV2ZW50RGF0YSkhPT0nc3RyaW5nJyYmIShldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpKXtyZXR1cm4gZmFsc2U7fQpjb25zdCBub3JtYWxpemVkRXZlbnREYXRhPWV2ZW50RGF0YS5zbGljZSgwLDIwKS5yZXBsYWNlKC9ccy9nLCcnKTtpZihub3JtYWxpemVkRXZlbnREYXRhLmxlbmd0aDwxNClyZXR1cm4gZmFsc2U7cmV0dXJuIG5vcm1hbGl6ZWRFdmVudERhdGEuc2xpY2UoMCwxNCk9PT0neyJwcm9qZWN0SWQiOiInO307R2Nsb3VkVHJhY2VJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidHY2xvdWRUcmFjZUltcG9ydGVyJzt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtjb25zdCB0cmFjZUV2ZW50cz10aGlzLmNyZWF0ZUV2ZW50c0ZvclRyYWNlKCk7cmV0dXJuIHRyYWNlRXZlbnRzP1t0cmFjZUV2ZW50c106W107fSxjcmVhdGVFdmVudHNGb3JUcmFjZSgpe2NvbnN0IGV2ZW50cz1bXTtjb25zdCB0cmFjZT1KU09OLnBhcnNlKHRoaXMuZXZlbnREYXRhXyk7Y29uc3Qgc3Bhbkxlbmd0aD10cmFjZS5zcGFucy5sZW5ndGg7Zm9yKGxldCBpPTA7aTxzcGFuTGVuZ3RoO2krKyl7ZXZlbnRzLnB1c2godGhpcy5jcmVhdGVFdmVudEZvclNwYW4odHJhY2UudHJhY2VJZCx0cmFjZS5zcGFuc1tpXSkpO30KcmV0dXJueyd0cmFjZUV2ZW50cyc6ZXZlbnRzfTt9LGNyZWF0ZUV2ZW50Rm9yU3Bhbih0cmFjZUlkLHNwYW4pe2xldCBuZXdBcmdzPXt9O2lmKHNwYW4ubGFiZWxzKXtuZXdBcmdzPUpTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoc3Bhbi5sYWJlbHMpKTt9Cm5ld0FyZ3NbJ1NwYW4gSUQnXT1zcGFuLnNwYW5JZDtuZXdBcmdzWydTdGFydCBUaW1lJ109c3Bhbi5zdGFydFRpbWU7bmV3QXJnc1snRW5kIFRpbWUnXT1zcGFuLmVuZFRpbWU7aWYoc3Bhbi5wYXJlbnRTcGFuSWQpe25ld0FyZ3NbJ1BhcmVudCBTcGFuIElEJ109c3Bhbi5wYXJlbnRTcGFuSWQ7fQpyZXR1cm57bmFtZTpzcGFuLm5hbWUsYXJnczpuZXdBcmdzLHBpZDp0cmFjZUlkLHRzOkRhdGUucGFyc2Uoc3Bhbi5zdGFydFRpbWUpKjEwMDAsZHVyOihEYXRlLnBhcnNlKHNwYW4uZW5kVGltZSktRGF0ZS5wYXJzZShzcGFuLnN0YXJ0VGltZSkpKjEwMDAsY2F0Oid0cmFjZXNwYW4nLHRpZDp0cmFjZUlkLHBoOidYJ307fX07dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucmVnaXN0ZXIoR2Nsb3VkVHJhY2VJbXBvcnRlcik7cmV0dXJue0djbG91ZFRyYWNlSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBjb252ZXJ0RXZlbnRzVG9SYW5nZXMoZXZlbnRzKXtyZXR1cm4gZXZlbnRzLm1hcChmdW5jdGlvbihldmVudCl7cmV0dXJuIHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShldmVudC5zdGFydCxldmVudC5lbmQpO30pO30KZnVuY3Rpb24gbWVyZ2VSYW5nZXMoaW5SYW5nZXMsbWVyZ2VUaHJlc2hvbGQsbWVyZ2VGdW5jdGlvbil7Y29uc3QgcmVtYWluaW5nRXZlbnRzPWluUmFuZ2VzLnNsaWNlKCk7cmVtYWluaW5nRXZlbnRzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5taW4teS5taW47fSk7aWYocmVtYWluaW5nRXZlbnRzLmxlbmd0aDw9MSl7Y29uc3QgbWVyZ2VkPVtdO2lmKHJlbWFpbmluZ0V2ZW50cy5sZW5ndGg9PT0xKXttZXJnZWQucHVzaChtZXJnZUZ1bmN0aW9uKHJlbWFpbmluZ0V2ZW50cykpO30KcmV0dXJuIG1lcmdlZDt9CmNvbnN0IG1lcmdlZEV2ZW50cz1bXTtsZXQgY3VycmVudE1lcmdlQnVmZmVyPVtdO2xldCByaWdodEVkZ2U7ZnVuY3Rpb24gYmVnaW5NZXJnaW5nKCl7Y3VycmVudE1lcmdlQnVmZmVyLnB1c2gocmVtYWluaW5nRXZlbnRzWzBdKTtyZW1haW5pbmdFdmVudHMuc3BsaWNlKDAsMSk7cmlnaHRFZGdlPWN1cnJlbnRNZXJnZUJ1ZmZlclswXS5tYXg7fQpmdW5jdGlvbiBmbHVzaEN1cnJlbnRNZXJnZUJ1ZmZlcigpe2lmKGN1cnJlbnRNZXJnZUJ1ZmZlci5sZW5ndGg9PT0wKXJldHVybjttZXJnZWRFdmVudHMucHVzaChtZXJnZUZ1bmN0aW9uKGN1cnJlbnRNZXJnZUJ1ZmZlcikpO2N1cnJlbnRNZXJnZUJ1ZmZlcj1bXTtpZihyZW1haW5pbmdFdmVudHMubGVuZ3RoIT09MCliZWdpbk1lcmdpbmcoKTt9CmJlZ2luTWVyZ2luZygpO3doaWxlKHJlbWFpbmluZ0V2ZW50cy5sZW5ndGgpe2NvbnN0IGN1cnJlbnRFdmVudD1yZW1haW5pbmdFdmVudHNbMF07Y29uc3QgZGlzdGFuY2VGcm9tUmlnaHRFZGdlPWN1cnJlbnRFdmVudC5taW4tcmlnaHRFZGdlO2lmKGRpc3RhbmNlRnJvbVJpZ2h0RWRnZTxtZXJnZVRocmVzaG9sZCl7cmlnaHRFZGdlPU1hdGgubWF4KHJpZ2h0RWRnZSxjdXJyZW50RXZlbnQubWF4KTtyZW1haW5pbmdFdmVudHMuc3BsaWNlKDAsMSk7Y3VycmVudE1lcmdlQnVmZmVyLnB1c2goY3VycmVudEV2ZW50KTtjb250aW51ZTt9CmZsdXNoQ3VycmVudE1lcmdlQnVmZmVyKCk7fQpmbHVzaEN1cnJlbnRNZXJnZUJ1ZmZlcigpO3JldHVybiBtZXJnZWRFdmVudHM7fQpmdW5jdGlvbiBmaW5kRW1wdHlSYW5nZXNCZXR3ZWVuUmFuZ2VzKGluUmFuZ2VzLG9wdF90b3RhbFJhbmdlKXtpZihvcHRfdG90YWxSYW5nZSYmb3B0X3RvdGFsUmFuZ2UuaXNFbXB0eSlvcHRfdG90YWxSYW5nZT11bmRlZmluZWQ7Y29uc3QgZW1wdHlSYW5nZXM9W107aWYoIWluUmFuZ2VzLmxlbmd0aCl7aWYob3B0X3RvdGFsUmFuZ2UpZW1wdHlSYW5nZXMucHVzaChvcHRfdG90YWxSYW5nZSk7cmV0dXJuIGVtcHR5UmFuZ2VzO30KaW5SYW5nZXM9aW5SYW5nZXMuc2xpY2UoKTtpblJhbmdlcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHgubWluLXkubWluO30pO2lmKG9wdF90b3RhbFJhbmdlJiYob3B0X3RvdGFsUmFuZ2UubWluPGluUmFuZ2VzWzBdLm1pbikpe2VtcHR5UmFuZ2VzLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG9wdF90b3RhbFJhbmdlLm1pbixpblJhbmdlc1swXS5taW4pKTt9CmluUmFuZ2VzLmZvckVhY2goZnVuY3Rpb24ocmFuZ2UsaW5kZXgpe2ZvcihsZXQgb3RoZXJJbmRleD0wO290aGVySW5kZXg8aW5SYW5nZXMubGVuZ3RoOysrb3RoZXJJbmRleCl7aWYoaW5kZXg9PT1vdGhlckluZGV4KWNvbnRpbnVlO2NvbnN0IG90aGVyPWluUmFuZ2VzW290aGVySW5kZXhdO2lmKG90aGVyLm1pbj5yYW5nZS5tYXgpe2VtcHR5UmFuZ2VzLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHJhbmdlLm1heCxvdGhlci5taW4pKTtyZXR1cm47fQppZihvdGhlci5tYXg+cmFuZ2UubWF4KXtyZXR1cm47fX0KaWYob3B0X3RvdGFsUmFuZ2UmJihyYW5nZS5tYXg8b3B0X3RvdGFsUmFuZ2UubWF4KSl7ZW1wdHlSYW5nZXMucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocmFuZ2UubWF4LG9wdF90b3RhbFJhbmdlLm1heCkpO319KTtyZXR1cm4gZW1wdHlSYW5nZXM7fQpyZXR1cm57Y29udmVydEV2ZW50c1RvUmFuZ2VzLGZpbmRFbXB0eVJhbmdlc0JldHdlZW5SYW5nZXMsbWVyZ2VSYW5nZXMsfTt9KTshZnVuY3Rpb24odCxuKXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJvYmplY3QiPT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPW4oKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKG4pO2Vsc2V7dmFyIHI9bigpO2Zvcih2YXIgYSBpbiByKSgib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHM/ZXhwb3J0czp0KVthXT1yW2FdfX0odGhpcyxmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiBuKGEpe2lmKHJbYV0pcmV0dXJuIHJbYV0uZXhwb3J0czt2YXIgZT1yW2FdPXtleHBvcnRzOnt9LGlkOmEsbG9hZGVkOiExfTtyZXR1cm4gdFthXS5jYWxsKGUuZXhwb3J0cyxlLGUuZXhwb3J0cyxuKSxlLmxvYWRlZD0hMCxlLmV4cG9ydHN9dmFyIHI9e307cmV0dXJuIG4ubT10LG4uYz1yLG4ucD0iIixuKDApfShbZnVuY3Rpb24odCxuLHIpe24uZ2xNYXRyaXg9cigxKSxuLm1hdDI9cigyKSxuLm1hdDJkPXIoMyksbi5tYXQzPXIoNCksbi5tYXQ0PXIoNSksbi5xdWF0PXIoNiksbi52ZWMyPXIoOSksbi52ZWMzPXIoNyksbi52ZWM0PXIoOCl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT17fTthLkVQU0lMT049MWUtNixhLkFSUkFZX1RZUEU9InVuZGVmaW5lZCIhPXR5cGVvZiBGbG9hdDMyQXJyYXk/RmxvYXQzMkFycmF5OkFycmF5LGEuUkFORE9NPU1hdGgucmFuZG9tLGEuc2V0TWF0cml4QXJyYXlUeXBlPWZ1bmN0aW9uKHQpe0dMTUFUX0FSUkFZX1RZUEU9dH07dmFyIGU9TWF0aC5QSS8xODA7YS50b1JhZGlhbj1mdW5jdGlvbih0KXtyZXR1cm4gdCplfSx0LmV4cG9ydHM9YX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT17fTtlLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxufSxlLmNvcHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdFszXT1uWzNdLHR9LGUuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxlLnRyYW5zcG9zZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXt2YXIgcj1uWzFdO3RbMV09blsyXSx0WzJdPXJ9ZWxzZSB0WzBdPW5bMF0sdFsxXT1uWzJdLHRbMl09blsxXSx0WzNdPW5bM107cmV0dXJuIHR9LGUuaW52ZXJ0PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPXIqdS1lKmE7cmV0dXJuIG8/KG89MS9vLHRbMF09dSpvLHRbMV09LWEqbyx0WzJdPS1lKm8sdFszXT1yKm8sdCk6bnVsbH0sZS5hZGpvaW50PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXTtyZXR1cm4gdFswXT1uWzNdLHRbMV09LW5bMV0sdFsyXT0tblsyXSx0WzNdPXIsdH0sZS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXtyZXR1cm4gdFswXSp0WzNdLXRbMl0qdFsxXX0sZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPXJbMF0sYz1yWzFdLGY9clsyXSxzPXJbM107cmV0dXJuIHRbMF09YSppK3UqYyx0WzFdPWUqaStvKmMsdFsyXT1hKmYrdSpzLHRbM109ZSpmK28qcyx0fSxlLm11bD1lLm11bHRpcGx5LGUucm90YXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9TWF0aC5zaW4ociksYz1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1hKmMrdSppLHRbMV09ZSpjK28qaSx0WzJdPWEqLWkrdSpjLHRbM109ZSotaStvKmMsdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPXJbMF0sYz1yWzFdO3JldHVybiB0WzBdPWEqaSx0WzFdPWUqaSx0WzJdPXUqYyx0WzNdPW8qYyx0fSxlLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LG4pe3ZhciByPU1hdGguc2luKG4pLGE9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09YSx0WzFdPXIsdFsyXT0tcix0WzNdPWEsdH0sZS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT0wLHRbMl09MCx0WzNdPW5bMV0sdH0sZS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuIm1hdDIoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIpIn0sZS5mcm9iPWZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnNxcnQoTWF0aC5wb3codFswXSwyKStNYXRoLnBvdyh0WzFdLDIpK01hdGgucG93KHRbMl0sMikrTWF0aC5wb3codFszXSwyKSl9LGUuTERVPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiB0WzJdPWFbMl0vYVswXSxyWzBdPWFbMF0sclsxXT1hWzFdLHJbM109YVszXS10WzJdKnJbMV0sW3QsbixyXX0sdC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDYpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoNik7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG59LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHRbMl09blsyXSx0WzNdPW5bM10sdFs0XT1uWzRdLHRbNV09bls1XSx0fSxlLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT0wLHRbNV09MCx0fSxlLmludmVydD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1uWzRdLGk9bls1XSxjPXIqdS1hKmU7cmV0dXJuIGM/KGM9MS9jLHRbMF09dSpjLHRbMV09LWEqYyx0WzJdPS1lKmMsdFszXT1yKmMsdFs0XT0oZSppLXUqbykqYyx0WzVdPShhKm8tcippKSpjLHQpOm51bGx9LGUuZGV0ZXJtaW5hbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF0qdFszXS10WzFdKnRbMl19LGUubXVsdGlwbHk9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPXJbMF0scz1yWzFdLGg9clsyXSxNPXJbM10sbD1yWzRdLHY9cls1XTtyZXR1cm4gdFswXT1hKmYrdSpzLHRbMV09ZSpmK28qcyx0WzJdPWEqaCt1Kk0sdFszXT1lKmgrbypNLHRbNF09YSpsK3UqditpLHRbNV09ZSpsK28qditjLHR9LGUubXVsPWUubXVsdGlwbHksZS5yb3RhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPU1hdGguc2luKHIpLHM9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09YSpzK3UqZix0WzFdPWUqcytvKmYsdFsyXT1hKi1mK3Uqcyx0WzNdPWUqLWYrbypzLHRbNF09aSx0WzVdPWMsdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9clswXSxzPXJbMV07cmV0dXJuIHRbMF09YSpmLHRbMV09ZSpmLHRbMl09dSpzLHRbM109bypzLHRbNF09aSx0WzVdPWMsdH0sZS50cmFuc2xhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPXJbMF0scz1yWzFdO3JldHVybiB0WzBdPWEsdFsxXT1lLHRbMl09dSx0WzNdPW8sdFs0XT1hKmYrdSpzK2ksdFs1XT1lKmYrbypzK2MsdH0sZS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLnNpbihuKSxhPU1hdGguY29zKG4pO3JldHVybiB0WzBdPWEsdFsxXT1yLHRbMl09LXIsdFszXT1hLHRbNF09MCx0WzVdPTAsdH0sZS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT0wLHRbMl09MCx0WzNdPW5bMV0sdFs0XT0wLHRbNV09MCx0fSxlLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTEsdFs0XT1uWzBdLHRbNV09blsxXSx0fSxlLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4ibWF0MmQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIsICIrdFs0XSsiLCAiK3RbNV0rIikifSxlLmZyb2I9ZnVuY3Rpb24odCl7cmV0dXJuIE1hdGguc3FydChNYXRoLnBvdyh0WzBdLDIpK01hdGgucG93KHRbMV0sMikrTWF0aC5wb3codFsyXSwyKStNYXRoLnBvdyh0WzNdLDIpK01hdGgucG93KHRbNF0sMikrTWF0aC5wb3codFs1XSwyKSsxKX0sdC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDkpO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0xLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSxlLmZyb21NYXQ0PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT1uWzJdLHRbM109bls0XSx0WzRdPW5bNV0sdFs1XT1uWzZdLHRbNl09bls4XSx0WzddPW5bOV0sdFs4XT1uWzEwXSx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoOSk7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG59LGUuY29weT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT1uWzFdLHRbMl09blsyXSx0WzNdPW5bM10sdFs0XT1uWzRdLHRbNV09bls1XSx0WzZdPW5bNl0sdFs3XT1uWzddLHRbOF09bls4XSx0fSxlLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0xLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSxlLnRyYW5zcG9zZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXt2YXIgcj1uWzFdLGE9blsyXSxlPW5bNV07dFsxXT1uWzNdLHRbMl09bls2XSx0WzNdPXIsdFs1XT1uWzddLHRbNl09YSx0WzddPWV9ZWxzZSB0WzBdPW5bMF0sdFsxXT1uWzNdLHRbMl09bls2XSx0WzNdPW5bMV0sdFs0XT1uWzRdLHRbNV09bls3XSx0WzZdPW5bMl0sdFs3XT1uWzVdLHRbOF09bls4XTtyZXR1cm4gdH0sZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89bls0XSxpPW5bNV0sYz1uWzZdLGY9bls3XSxzPW5bOF0saD1zKm8taSpmLE09LXMqdStpKmMsbD1mKnUtbypjLHY9cipoK2EqTStlKmw7cmV0dXJuIHY/KHY9MS92LHRbMF09aCp2LHRbMV09KC1zKmErZSpmKSp2LHRbMl09KGkqYS1lKm8pKnYsdFszXT1NKnYsdFs0XT0ocypyLWUqYykqdix0WzVdPSgtaSpyK2UqdSkqdix0WzZdPWwqdix0WzddPSgtZipyK2EqYykqdix0WzhdPShvKnItYSp1KSp2LHQpOm51bGx9LGUuYWRqb2ludD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1uWzRdLGk9bls1XSxjPW5bNl0sZj1uWzddLHM9bls4XTtyZXR1cm4gdFswXT1vKnMtaSpmLHRbMV09ZSpmLWEqcyx0WzJdPWEqaS1lKm8sdFszXT1pKmMtdSpzLHRbNF09cipzLWUqYyx0WzVdPWUqdS1yKmksdFs2XT11KmYtbypjLHRbN109YSpjLXIqZix0WzhdPXIqby1hKnUsdH0sZS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxhPXRbMl0sZT10WzNdLHU9dFs0XSxvPXRbNV0saT10WzZdLGM9dFs3XSxmPXRbOF07cmV0dXJuIG4qKGYqdS1vKmMpK3IqKC1mKmUrbyppKSthKihjKmUtdSppKX0sZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9bls2XSxzPW5bN10saD1uWzhdLE09clswXSxsPXJbMV0sdj1yWzJdLG09clszXSxwPXJbNF0sZD1yWzVdLEE9cls2XSxSPXJbN10sdz1yWzhdO3JldHVybiB0WzBdPU0qYStsKm8rdipmLHRbMV09TSplK2wqaSt2KnMsdFsyXT1NKnUrbCpjK3YqaCx0WzNdPW0qYStwKm8rZCpmLHRbNF09bSplK3AqaStkKnMsdFs1XT1tKnUrcCpjK2QqaCx0WzZdPUEqYStSKm8rdypmLHRbN109QSplK1IqaSt3KnMsdFs4XT1BKnUrUipjK3cqaCx0fSxlLm11bD1lLm11bHRpcGx5LGUudHJhbnNsYXRlPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9bls0XSxjPW5bNV0sZj1uWzZdLHM9bls3XSxoPW5bOF0sTT1yWzBdLGw9clsxXTtyZXR1cm4gdFswXT1hLHRbMV09ZSx0WzJdPXUsdFszXT1vLHRbNF09aSx0WzVdPWMsdFs2XT1NKmErbCpvK2YsdFs3XT1NKmUrbCppK3MsdFs4XT1NKnUrbCpjK2gsdH0sZS5yb3RhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPW5bNl0scz1uWzddLGg9bls4XSxNPU1hdGguc2luKHIpLGw9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09bCphK00qbyx0WzFdPWwqZStNKmksdFsyXT1sKnUrTSpjLHRbM109bCpvLU0qYSx0WzRdPWwqaS1NKmUsdFs1XT1sKmMtTSp1LHRbNl09Zix0WzddPXMsdFs4XT1oLHR9LGUuc2NhbGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPXJbMF0sZT1yWzFdO3JldHVybiB0WzBdPWEqblswXSx0WzFdPWEqblsxXSx0WzJdPWEqblsyXSx0WzNdPWUqblszXSx0WzRdPWUqbls0XSx0WzVdPWUqbls1XSx0WzZdPW5bNl0sdFs3XT1uWzddLHRbOF09bls4XSx0fSxlLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0xLHRbNV09MCx0WzZdPW5bMF0sdFs3XT1uWzFdLHRbOF09MSx0fSxlLmZyb21Sb3RhdGlvbj1mdW5jdGlvbih0LG4pe3ZhciByPU1hdGguc2luKG4pLGE9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09YSx0WzFdPXIsdFsyXT0wLHRbM109LXIsdFs0XT1hLHRbNV09MCx0WzZdPTAsdFs3XT0wLHRbOF09MSx0fSxlLmZyb21TY2FsaW5nPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPW5bMV0sdFs1XT0wLHRbNl09MCx0WzddPTAsdFs4XT0xLHR9LGUuZnJvbU1hdDJkPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT0wLHRbM109blsyXSx0WzRdPW5bM10sdFs1XT0wLHRbNl09bls0XSx0WzddPW5bNV0sdFs4XT0xLHR9LGUuZnJvbVF1YXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89cityLGk9YSthLGM9ZStlLGY9cipvLHM9YSpvLGg9YSppLE09ZSpvLGw9ZSppLHY9ZSpjLG09dSpvLHA9dSppLGQ9dSpjO3JldHVybiB0WzBdPTEtaC12LHRbM109cy1kLHRbNl09TStwLHRbMV09cytkLHRbNF09MS1mLXYsdFs3XT1sLW0sdFsyXT1NLXAsdFs1XT1sK20sdFs4XT0xLWYtaCx0fSxlLm5vcm1hbEZyb21NYXQ0PWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPW5bNF0saT1uWzVdLGM9bls2XSxmPW5bN10scz1uWzhdLGg9bls5XSxNPW5bMTBdLGw9blsxMV0sdj1uWzEyXSxtPW5bMTNdLHA9blsxNF0sZD1uWzE1XSxBPXIqaS1hKm8sUj1yKmMtZSpvLHc9cipmLXUqbyxxPWEqYy1lKmksWT1hKmYtdSppLGc9ZSpmLXUqYyx5PXMqbS1oKnYseD1zKnAtTSp2LFA9cypkLWwqdixFPWgqcC1NKm0sVD1oKmQtbCptLGI9TSpkLWwqcCxEPUEqYi1SKlQrdypFK3EqUC1ZKngrZyp5O3JldHVybiBEPyhEPTEvRCx0WzBdPShpKmItYypUK2YqRSkqRCx0WzFdPShjKlAtbypiLWYqeCkqRCx0WzJdPShvKlQtaSpQK2YqeSkqRCx0WzNdPShlKlQtYSpiLXUqRSkqRCx0WzRdPShyKmItZSpQK3UqeCkqRCx0WzVdPShhKlAtcipULXUqeSkqRCx0WzZdPShtKmctcCpZK2QqcSkqRCx0WzddPShwKnctdipnLWQqUikqRCx0WzhdPSh2KlktbSp3K2QqQSkqRCx0KTpudWxsfSxlLnN0cj1mdW5jdGlvbih0KXtyZXR1cm4ibWF0MygiK3RbMF0rIiwgIit0WzFdKyIsICIrdFsyXSsiLCAiK3RbM10rIiwgIit0WzRdKyIsICIrdFs1XSsiLCAiK3RbNl0rIiwgIit0WzddKyIsICIrdFs4XSsiKSJ9LGUuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpK01hdGgucG93KHRbNl0sMikrTWF0aC5wb3codFs3XSwyKStNYXRoLnBvdyh0WzhdLDIpKX0sdC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDE2KTtyZXR1cm4gdFswXT0xLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPTEsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGUuY2xvbmU9ZnVuY3Rpb24odCl7dmFyIG49bmV3IGEuQVJSQVlfVFlQRSgxNik7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG5bM109dFszXSxuWzRdPXRbNF0sbls1XT10WzVdLG5bNl09dFs2XSxuWzddPXRbN10sbls4XT10WzhdLG5bOV09dFs5XSxuWzEwXT10WzEwXSxuWzExXT10WzExXSxuWzEyXT10WzEyXSxuWzEzXT10WzEzXSxuWzE0XT10WzE0XSxuWzE1XT10WzE1XSxufSxlLmNvcHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdFszXT1uWzNdLHRbNF09bls0XSx0WzVdPW5bNV0sdFs2XT1uWzZdLHRbN109bls3XSx0WzhdPW5bOF0sdFs5XT1uWzldLHRbMTBdPW5bMTBdLHRbMTFdPW5bMTFdLHRbMTJdPW5bMTJdLHRbMTNdPW5bMTNdLHRbMTRdPW5bMTRdLHRbMTVdPW5bMTVdLHR9LGUuaWRlbnRpdHk9ZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09MSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0xLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxlLnRyYW5zcG9zZT1mdW5jdGlvbih0LG4pe2lmKHQ9PT1uKXt2YXIgcj1uWzFdLGE9blsyXSxlPW5bM10sdT1uWzZdLG89bls3XSxpPW5bMTFdO3RbMV09bls0XSx0WzJdPW5bOF0sdFszXT1uWzEyXSx0WzRdPXIsdFs2XT1uWzldLHRbN109blsxM10sdFs4XT1hLHRbOV09dSx0WzExXT1uWzE0XSx0WzEyXT1lLHRbMTNdPW8sdFsxNF09aX1lbHNlIHRbMF09blswXSx0WzFdPW5bNF0sdFsyXT1uWzhdLHRbM109blsxMl0sdFs0XT1uWzFdLHRbNV09bls1XSx0WzZdPW5bOV0sdFs3XT1uWzEzXSx0WzhdPW5bMl0sdFs5XT1uWzZdLHRbMTBdPW5bMTBdLHRbMTFdPW5bMTRdLHRbMTJdPW5bM10sdFsxM109bls3XSx0WzE0XT1uWzExXSx0WzE1XT1uWzE1XTtyZXR1cm4gdH0sZS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89bls0XSxpPW5bNV0sYz1uWzZdLGY9bls3XSxzPW5bOF0saD1uWzldLE09blsxMF0sbD1uWzExXSx2PW5bMTJdLG09blsxM10scD1uWzE0XSxkPW5bMTVdLEE9cippLWEqbyxSPXIqYy1lKm8sdz1yKmYtdSpvLHE9YSpjLWUqaSxZPWEqZi11KmksZz1lKmYtdSpjLHk9cyptLWgqdix4PXMqcC1NKnYsUD1zKmQtbCp2LEU9aCpwLU0qbSxUPWgqZC1sKm0sYj1NKmQtbCpwLEQ9QSpiLVIqVCt3KkUrcSpQLVkqeCtnKnk7cmV0dXJuIEQ/KEQ9MS9ELHRbMF09KGkqYi1jKlQrZipFKSpELHRbMV09KGUqVC1hKmItdSpFKSpELHRbMl09KG0qZy1wKlkrZCpxKSpELHRbM109KE0qWS1oKmctbCpxKSpELHRbNF09KGMqUC1vKmItZip4KSpELHRbNV09KHIqYi1lKlArdSp4KSpELHRbNl09KHAqdy12KmctZCpSKSpELHRbN109KHMqZy1NKncrbCpSKSpELHRbOF09KG8qVC1pKlArZip5KSpELHRbOV09KGEqUC1yKlQtdSp5KSpELHRbMTBdPSh2KlktbSp3K2QqQSkqRCx0WzExXT0oaCp3LXMqWS1sKkEpKkQsdFsxMl09KGkqeC1vKkUtYyp5KSpELHRbMTNdPShyKkUtYSp4K2UqeSkqRCx0WzE0XT0obSpSLXYqcS1wKkEpKkQsdFsxNV09KHMqcS1oKlIrTSpBKSpELHQpOm51bGx9LGUuYWRqb2ludD1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9blsyXSx1PW5bM10sbz1uWzRdLGk9bls1XSxjPW5bNl0sZj1uWzddLHM9bls4XSxoPW5bOV0sTT1uWzEwXSxsPW5bMTFdLHY9blsxMl0sbT1uWzEzXSxwPW5bMTRdLGQ9blsxNV07cmV0dXJuIHRbMF09aSooTSpkLWwqcCktaCooYypkLWYqcCkrbSooYypsLWYqTSksdFsxXT0tKGEqKE0qZC1sKnApLWgqKGUqZC11KnApK20qKGUqbC11Kk0pKSx0WzJdPWEqKGMqZC1mKnApLWkqKGUqZC11KnApK20qKGUqZi11KmMpLHRbM109LShhKihjKmwtZipNKS1pKihlKmwtdSpNKStoKihlKmYtdSpjKSksdFs0XT0tKG8qKE0qZC1sKnApLXMqKGMqZC1mKnApK3YqKGMqbC1mKk0pKSx0WzVdPXIqKE0qZC1sKnApLXMqKGUqZC11KnApK3YqKGUqbC11Kk0pLHRbNl09LShyKihjKmQtZipwKS1vKihlKmQtdSpwKSt2KihlKmYtdSpjKSksdFs3XT1yKihjKmwtZipNKS1vKihlKmwtdSpNKStzKihlKmYtdSpjKSx0WzhdPW8qKGgqZC1sKm0pLXMqKGkqZC1mKm0pK3YqKGkqbC1mKmgpLHRbOV09LShyKihoKmQtbCptKS1zKihhKmQtdSptKSt2KihhKmwtdSpoKSksdFsxMF09ciooaSpkLWYqbSktbyooYSpkLXUqbSkrdiooYSpmLXUqaSksdFsxMV09LShyKihpKmwtZipoKS1vKihhKmwtdSpoKStzKihhKmYtdSppKSksdFsxMl09LShvKihoKnAtTSptKS1zKihpKnAtYyptKSt2KihpKk0tYypoKSksdFsxM109ciooaCpwLU0qbSktcyooYSpwLWUqbSkrdiooYSpNLWUqaCksdFsxNF09LShyKihpKnAtYyptKS1vKihhKnAtZSptKSt2KihhKmMtZSppKSksdFsxNV09ciooaSpNLWMqaCktbyooYSpNLWUqaCkrcyooYSpjLWUqaSksdH0sZS5kZXRlcm1pbmFudD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxhPXRbMl0sZT10WzNdLHU9dFs0XSxvPXRbNV0saT10WzZdLGM9dFs3XSxmPXRbOF0scz10WzldLGg9dFsxMF0sTT10WzExXSxsPXRbMTJdLHY9dFsxM10sbT10WzE0XSxwPXRbMTVdLGQ9bipvLXIqdSxBPW4qaS1hKnUsUj1uKmMtZSp1LHc9cippLWEqbyxxPXIqYy1lKm8sWT1hKmMtZSppLGc9Zip2LXMqbCx5PWYqbS1oKmwseD1mKnAtTSpsLFA9cyptLWgqdixFPXMqcC1NKnYsVD1oKnAtTSptO3JldHVybiBkKlQtQSpFK1IqUCt3KngtcSp5K1kqZ30sZS5tdWx0aXBseT1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPW5bNF0sYz1uWzVdLGY9bls2XSxzPW5bN10saD1uWzhdLE09bls5XSxsPW5bMTBdLHY9blsxMV0sbT1uWzEyXSxwPW5bMTNdLGQ9blsxNF0sQT1uWzE1XSxSPXJbMF0sdz1yWzFdLHE9clsyXSxZPXJbM107cmV0dXJuIHRbMF09UiphK3cqaStxKmgrWSptLHRbMV09UiplK3cqYytxKk0rWSpwLHRbMl09Uip1K3cqZitxKmwrWSpkLHRbM109UipvK3cqcytxKnYrWSpBLFI9cls0XSx3PXJbNV0scT1yWzZdLFk9cls3XSx0WzRdPVIqYSt3KmkrcSpoK1kqbSx0WzVdPVIqZSt3KmMrcSpNK1kqcCx0WzZdPVIqdSt3KmYrcSpsK1kqZCx0WzddPVIqbyt3KnMrcSp2K1kqQSxSPXJbOF0sdz1yWzldLHE9clsxMF0sWT1yWzExXSx0WzhdPVIqYSt3KmkrcSpoK1kqbSx0WzldPVIqZSt3KmMrcSpNK1kqcCx0WzEwXT1SKnUrdypmK3EqbCtZKmQsdFsxMV09UipvK3cqcytxKnYrWSpBLFI9clsxMl0sdz1yWzEzXSxxPXJbMTRdLFk9clsxNV0sdFsxMl09UiphK3cqaStxKmgrWSptLHRbMTNdPVIqZSt3KmMrcSpNK1kqcCx0WzE0XT1SKnUrdypmK3EqbCtZKmQsdFsxNV09UipvK3cqcytxKnYrWSpBLHR9LGUubXVsPWUubXVsdGlwbHksZS50cmFuc2xhdGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhLGUsdSxvLGksYyxmLHMsaCxNLGwsdixtPXJbMF0scD1yWzFdLGQ9clsyXTtyZXR1cm4gbj09PXQ/KHRbMTJdPW5bMF0qbStuWzRdKnArbls4XSpkK25bMTJdLHRbMTNdPW5bMV0qbStuWzVdKnArbls5XSpkK25bMTNdLHRbMTRdPW5bMl0qbStuWzZdKnArblsxMF0qZCtuWzE0XSx0WzE1XT1uWzNdKm0rbls3XSpwK25bMTFdKmQrblsxNV0pOihhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1uWzRdLGM9bls1XSxmPW5bNl0scz1uWzddLGg9bls4XSxNPW5bOV0sbD1uWzEwXSx2PW5bMTFdLHRbMF09YSx0WzFdPWUsdFsyXT11LHRbM109byx0WzRdPWksdFs1XT1jLHRbNl09Zix0WzddPXMsdFs4XT1oLHRbOV09TSx0WzEwXT1sLHRbMTFdPXYsdFsxMl09YSptK2kqcCtoKmQrblsxMl0sdFsxM109ZSptK2MqcCtNKmQrblsxM10sdFsxNF09dSptK2YqcCtsKmQrblsxNF0sdFsxNV09byptK3MqcCt2KmQrblsxNV0pLHR9LGUuc2NhbGU9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPXJbMF0sZT1yWzFdLHU9clsyXTtyZXR1cm4gdFswXT1uWzBdKmEsdFsxXT1uWzFdKmEsdFsyXT1uWzJdKmEsdFszXT1uWzNdKmEsdFs0XT1uWzRdKmUsdFs1XT1uWzVdKmUsdFs2XT1uWzZdKmUsdFs3XT1uWzddKmUsdFs4XT1uWzhdKnUsdFs5XT1uWzldKnUsdFsxMF09blsxMF0qdSx0WzExXT1uWzExXSp1LHRbMTJdPW5bMTJdLHRbMTNdPW5bMTNdLHRbMTRdPW5bMTRdLHRbMTVdPW5bMTVdLHR9LGUucm90YXRlPWZ1bmN0aW9uKHQsbixyLGUpe3ZhciB1LG8saSxjLGYscyxoLE0sbCx2LG0scCxkLEEsUix3LHEsWSxnLHkseCxQLEUsVCxiPWVbMF0sRD1lWzFdLEw9ZVsyXSxfPU1hdGguc3FydChiKmIrRCpEK0wqTCk7cmV0dXJuIE1hdGguYWJzKF8pPGEuRVBTSUxPTj9udWxsOihfPTEvXyxiKj1fLEQqPV8sTCo9Xyx1PU1hdGguc2luKHIpLG89TWF0aC5jb3MociksaT0xLW8sYz1uWzBdLGY9blsxXSxzPW5bMl0saD1uWzNdLE09bls0XSxsPW5bNV0sdj1uWzZdLG09bls3XSxwPW5bOF0sZD1uWzldLEE9blsxMF0sUj1uWzExXSx3PWIqYippK28scT1EKmIqaStMKnUsWT1MKmIqaS1EKnUsZz1iKkQqaS1MKnUseT1EKkQqaStvLHg9TCpEKmkrYip1LFA9YipMKmkrRCp1LEU9RCpMKmktYip1LFQ9TCpMKmkrbyx0WzBdPWMqdytNKnErcCpZLHRbMV09Zip3K2wqcStkKlksdFsyXT1zKncrdipxK0EqWSx0WzNdPWgqdyttKnErUipZLHRbNF09YypnK00qeStwKngsdFs1XT1mKmcrbCp5K2QqeCx0WzZdPXMqZyt2KnkrQSp4LHRbN109aCpnK20qeStSKngsdFs4XT1jKlArTSpFK3AqVCx0WzldPWYqUCtsKkUrZCpULHRbMTBdPXMqUCt2KkUrQSpULHRbMTFdPWgqUCttKkUrUipULG4hPT10JiYodFsxMl09blsxMl0sdFsxM109blsxM10sdFsxNF09blsxNF0sdFsxNV09blsxNV0pLHQpfSxlLnJvdGF0ZVg9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPU1hdGguc2luKHIpLGU9TWF0aC5jb3MociksdT1uWzRdLG89bls1XSxpPW5bNl0sYz1uWzddLGY9bls4XSxzPW5bOV0saD1uWzEwXSxNPW5bMTFdO3JldHVybiBuIT09dCYmKHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT1uWzJdLHRbM109blszXSx0WzEyXT1uWzEyXSx0WzEzXT1uWzEzXSx0WzE0XT1uWzE0XSx0WzE1XT1uWzE1XSksdFs0XT11KmUrZiphLHRbNV09byplK3MqYSx0WzZdPWkqZStoKmEsdFs3XT1jKmUrTSphLHRbOF09ZiplLXUqYSx0WzldPXMqZS1vKmEsdFsxMF09aCplLWkqYSx0WzExXT1NKmUtYyphLHR9LGUucm90YXRlWT1mdW5jdGlvbih0LG4scil7dmFyIGE9TWF0aC5zaW4ociksZT1NYXRoLmNvcyhyKSx1PW5bMF0sbz1uWzFdLGk9blsyXSxjPW5bM10sZj1uWzhdLHM9bls5XSxoPW5bMTBdLE09blsxMV07cmV0dXJuIG4hPT10JiYodFs0XT1uWzRdLHRbNV09bls1XSx0WzZdPW5bNl0sdFs3XT1uWzddLHRbMTJdPW5bMTJdLHRbMTNdPW5bMTNdLHRbMTRdPW5bMTRdLHRbMTVdPW5bMTVdKSx0WzBdPXUqZS1mKmEsdFsxXT1vKmUtcyphLHRbMl09aSplLWgqYSx0WzNdPWMqZS1NKmEsdFs4XT11KmErZiplLHRbOV09byphK3MqZSx0WzEwXT1pKmEraCplLHRbMTFdPWMqYStNKmUsdH0sZS5yb3RhdGVaPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1NYXRoLnNpbihyKSxlPU1hdGguY29zKHIpLHU9blswXSxvPW5bMV0saT1uWzJdLGM9blszXSxmPW5bNF0scz1uWzVdLGg9bls2XSxNPW5bN107cmV0dXJuIG4hPT10JiYodFs4XT1uWzhdLHRbOV09bls5XSx0WzEwXT1uWzEwXSx0WzExXT1uWzExXSx0WzEyXT1uWzEyXSx0WzEzXT1uWzEzXSx0WzE0XT1uWzE0XSx0WzE1XT1uWzE1XSksdFswXT11KmUrZiphLHRbMV09byplK3MqYSx0WzJdPWkqZStoKmEsdFszXT1jKmUrTSphLHRbNF09ZiplLXUqYSx0WzVdPXMqZS1vKmEsdFs2XT1oKmUtaSphLHRbN109TSplLWMqYSx0fSxlLmZyb21UcmFuc2xhdGlvbj1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09MSx0WzExXT0wLHRbMTJdPW5bMF0sdFsxM109blsxXSx0WzE0XT1uWzJdLHRbMTVdPTEsdH0sZS5mcm9tU2NhbGluZz1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPW5bMF0sdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09blsxXSx0WzZdPTAsdFs3XT0wLHRbOF09MCx0WzldPTAsdFsxMF09blsyXSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sZS5mcm9tUm90YXRpb249ZnVuY3Rpb24odCxuLHIpe3ZhciBlLHUsbyxpPXJbMF0sYz1yWzFdLGY9clsyXSxzPU1hdGguc3FydChpKmkrYypjK2YqZik7cmV0dXJuIE1hdGguYWJzKHMpPGEuRVBTSUxPTj9udWxsOihzPTEvcyxpKj1zLGMqPXMsZio9cyxlPU1hdGguc2luKG4pLHU9TWF0aC5jb3Mobiksbz0xLXUsdFswXT1pKmkqbyt1LHRbMV09YyppKm8rZiplLHRbMl09ZippKm8tYyplLHRbM109MCx0WzRdPWkqYypvLWYqZSx0WzVdPWMqYypvK3UsdFs2XT1mKmMqbytpKmUsdFs3XT0wLHRbOF09aSpmKm8rYyplLHRbOV09YypmKm8taSplLHRbMTBdPWYqZipvK3UsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHQpfSxlLmZyb21YUm90YXRpb249ZnVuY3Rpb24odCxuKXt2YXIgcj1NYXRoLnNpbihuKSxhPU1hdGguY29zKG4pO3JldHVybiB0WzBdPTEsdFsxXT0wLHRbMl09MCx0WzNdPTAsdFs0XT0wLHRbNV09YSx0WzZdPXIsdFs3XT0wLHRbOF09MCx0WzldPS1yLHRbMTBdPWEsdFsxMV09MCx0WzEyXT0wLHRbMTNdPTAsdFsxNF09MCx0WzE1XT0xLHR9LGUuZnJvbVlSb3RhdGlvbj1mdW5jdGlvbih0LG4pe3ZhciByPU1hdGguc2luKG4pLGE9TWF0aC5jb3Mobik7cmV0dXJuIHRbMF09YSx0WzFdPTAsdFsyXT0tcix0WzNdPTAsdFs0XT0wLHRbNV09MSx0WzZdPTAsdFs3XT0wLHRbOF09cix0WzldPTAsdFsxMF09YSx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sZS5mcm9tWlJvdGF0aW9uPWZ1bmN0aW9uKHQsbil7dmFyIHI9TWF0aC5zaW4obiksYT1NYXRoLmNvcyhuKTtyZXR1cm4gdFswXT1hLHRbMV09cix0WzJdPTAsdFszXT0wLHRbNF09LXIsdFs1XT1hLHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0xLHRbMTFdPTAsdFsxMl09MCx0WzEzXT0wLHRbMTRdPTAsdFsxNV09MSx0fSxlLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9YSthLGM9ZStlLGY9dSt1LHM9YSppLGg9YSpjLE09YSpmLGw9ZSpjLHY9ZSpmLG09dSpmLHA9byppLGQ9bypjLEE9bypmO3JldHVybiB0WzBdPTEtKGwrbSksdFsxXT1oK0EsdFsyXT1NLWQsdFszXT0wLHRbNF09aC1BLHRbNV09MS0ocyttKSx0WzZdPXYrcCx0WzddPTAsdFs4XT1NK2QsdFs5XT12LXAsdFsxMF09MS0ocytsKSx0WzExXT0wLHRbMTJdPXJbMF0sdFsxM109clsxXSx0WzE0XT1yWzJdLHRbMTVdPTEsdH0sZS5mcm9tUm90YXRpb25UcmFuc2xhdGlvblNjYWxlPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPW5bMF0sdT1uWzFdLG89blsyXSxpPW5bM10sYz1lK2UsZj11K3Uscz1vK28saD1lKmMsTT1lKmYsbD1lKnMsdj11KmYsbT11KnMscD1vKnMsZD1pKmMsQT1pKmYsUj1pKnMsdz1hWzBdLHE9YVsxXSxZPWFbMl07cmV0dXJuIHRbMF09KDEtKHYrcCkpKncsdFsxXT0oTStSKSp3LHRbMl09KGwtQSkqdyx0WzNdPTAsdFs0XT0oTS1SKSpxLHRbNV09KDEtKGgrcCkpKnEsdFs2XT0obStkKSpxLHRbN109MCx0WzhdPShsK0EpKlksdFs5XT0obS1kKSpZLHRbMTBdPSgxLShoK3YpKSpZLHRbMTFdPTAsdFsxMl09clswXSx0WzEzXT1yWzFdLHRbMTRdPXJbMl0sdFsxNV09MSx0fSxlLmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uU2NhbGVPcmlnaW49ZnVuY3Rpb24odCxuLHIsYSxlKXt2YXIgdT1uWzBdLG89blsxXSxpPW5bMl0sYz1uWzNdLGY9dSt1LHM9bytvLGg9aStpLE09dSpmLGw9dSpzLHY9dSpoLG09bypzLHA9bypoLGQ9aSpoLEE9YypmLFI9YypzLHc9YypoLHE9YVswXSxZPWFbMV0sZz1hWzJdLHk9ZVswXSx4PWVbMV0sUD1lWzJdO3JldHVybiB0WzBdPSgxLShtK2QpKSpxLHRbMV09KGwrdykqcSx0WzJdPSh2LVIpKnEsdFszXT0wLHRbNF09KGwtdykqWSx0WzVdPSgxLShNK2QpKSpZLHRbNl09KHArQSkqWSx0WzddPTAsdFs4XT0oditSKSpnLHRbOV09KHAtQSkqZyx0WzEwXT0oMS0oTSttKSkqZyx0WzExXT0wLHRbMTJdPXJbMF0reS0odFswXSp5K3RbNF0qeCt0WzhdKlApLHRbMTNdPXJbMV0reC0odFsxXSp5K3RbNV0qeCt0WzldKlApLHRbMTRdPXJbMl0rUC0odFsyXSp5K3RbNl0qeCt0WzEwXSpQKSx0WzE1XT0xLHR9LGUuZnJvbVF1YXQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89cityLGk9YSthLGM9ZStlLGY9cipvLHM9YSpvLGg9YSppLE09ZSpvLGw9ZSppLHY9ZSpjLG09dSpvLHA9dSppLGQ9dSpjO3JldHVybiB0WzBdPTEtaC12LHRbMV09cytkLHRbMl09TS1wLHRbM109MCx0WzRdPXMtZCx0WzVdPTEtZi12LHRbNl09bCttLHRbN109MCx0WzhdPU0rcCx0WzldPWwtbSx0WzEwXT0xLWYtaCx0WzExXT0wLHRbMTJdPTAsdFsxM109MCx0WzE0XT0wLHRbMTVdPTEsdH0sZS5mcnVzdHVtPWZ1bmN0aW9uKHQsbixyLGEsZSx1LG8pe3ZhciBpPTEvKHItbiksYz0xLyhlLWEpLGY9MS8odS1vKTtyZXR1cm4gdFswXT0yKnUqaSx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT0yKnUqYyx0WzZdPTAsdFs3XT0wLHRbOF09KHIrbikqaSx0WzldPShlK2EpKmMsdFsxMF09KG8rdSkqZix0WzExXT0tMSx0WzEyXT0wLHRbMTNdPTAsdFsxNF09byp1KjIqZix0WzE1XT0wLHR9LGUucGVyc3BlY3RpdmU9ZnVuY3Rpb24odCxuLHIsYSxlKXt2YXIgdT0xL01hdGgudGFuKG4vMiksbz0xLyhhLWUpO3JldHVybiB0WzBdPXUvcix0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT11LHRbNl09MCx0WzddPTAsdFs4XT0wLHRbOV09MCx0WzEwXT0oZSthKSpvLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT0yKmUqYSpvLHRbMTVdPTAsdH0sZS5wZXJzcGVjdGl2ZUZyb21GaWVsZE9mVmlldz1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1NYXRoLnRhbihuLnVwRGVncmVlcypNYXRoLlBJLzE4MCksdT1NYXRoLnRhbihuLmRvd25EZWdyZWVzKk1hdGguUEkvMTgwKSxvPU1hdGgudGFuKG4ubGVmdERlZ3JlZXMqTWF0aC5QSS8xODApLGk9TWF0aC50YW4obi5yaWdodERlZ3JlZXMqTWF0aC5QSS8xODApLGM9Mi8obytpKSxmPTIvKGUrdSk7cmV0dXJuIHRbMF09Yyx0WzFdPTAsdFsyXT0wLHRbM109MCx0WzRdPTAsdFs1XT1mLHRbNl09MCx0WzddPTAsdFs4XT0tKChvLWkpKmMqLjUpLHRbOV09KGUtdSkqZiouNSx0WzEwXT1hLyhyLWEpLHRbMTFdPS0xLHRbMTJdPTAsdFsxM109MCx0WzE0XT1hKnIvKHItYSksdFsxNV09MCx0fSxlLm9ydGhvPWZ1bmN0aW9uKHQsbixyLGEsZSx1LG8pe3ZhciBpPTEvKG4tciksYz0xLyhhLWUpLGY9MS8odS1vKTtyZXR1cm4gdFswXT0tMippLHRbMV09MCx0WzJdPTAsdFszXT0wLHRbNF09MCx0WzVdPS0yKmMsdFs2XT0wLHRbN109MCx0WzhdPTAsdFs5XT0wLHRbMTBdPTIqZix0WzExXT0wLHRbMTJdPShuK3IpKmksdFsxM109KGUrYSkqYyx0WzE0XT0obyt1KSpmLHRbMTVdPTEsdH0sZS5sb29rQXQ9ZnVuY3Rpb24odCxuLHIsdSl7dmFyIG8saSxjLGYscyxoLE0sbCx2LG0scD1uWzBdLGQ9blsxXSxBPW5bMl0sUj11WzBdLHc9dVsxXSxxPXVbMl0sWT1yWzBdLGc9clsxXSx5PXJbMl07cmV0dXJuIE1hdGguYWJzKHAtWSk8YS5FUFNJTE9OJiZNYXRoLmFicyhkLWcpPGEuRVBTSUxPTiYmTWF0aC5hYnMoQS15KTxhLkVQU0lMT04/ZS5pZGVudGl0eSh0KTooTT1wLVksbD1kLWcsdj1BLXksbT0xL01hdGguc3FydChNKk0rbCpsK3YqdiksTSo9bSxsKj1tLHYqPW0sbz13KnYtcSpsLGk9cSpNLVIqdixjPVIqbC13Kk0sbT1NYXRoLnNxcnQobypvK2kqaStjKmMpLG0/KG09MS9tLG8qPW0saSo9bSxjKj1tKToobz0wLGk9MCxjPTApLGY9bCpjLXYqaSxzPXYqby1NKmMsaD1NKmktbCpvLG09TWF0aC5zcXJ0KGYqZitzKnMraCpoKSxtPyhtPTEvbSxmKj1tLHMqPW0saCo9bSk6KGY9MCxzPTAsaD0wKSx0WzBdPW8sdFsxXT1mLHRbMl09TSx0WzNdPTAsdFs0XT1pLHRbNV09cyx0WzZdPWwsdFs3XT0wLHRbOF09Yyx0WzldPWgsdFsxMF09dix0WzExXT0wLHRbMTJdPS0obypwK2kqZCtjKkEpLHRbMTNdPS0oZipwK3MqZCtoKkEpLHRbMTRdPS0oTSpwK2wqZCt2KkEpLHRbMTVdPTEsdCl9LGUuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJtYXQ0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiLCAiK3RbNF0rIiwgIit0WzVdKyIsICIrdFs2XSsiLCAiK3RbN10rIiwgIit0WzhdKyIsICIrdFs5XSsiLCAiK3RbMTBdKyIsICIrdFsxMV0rIiwgIit0WzEyXSsiLCAiK3RbMTNdKyIsICIrdFsxNF0rIiwgIit0WzE1XSsiKSJ9LGUuZnJvYj1mdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5zcXJ0KE1hdGgucG93KHRbMF0sMikrTWF0aC5wb3codFsxXSwyKStNYXRoLnBvdyh0WzJdLDIpK01hdGgucG93KHRbM10sMikrTWF0aC5wb3codFs0XSwyKStNYXRoLnBvdyh0WzVdLDIpK01hdGgucG93KHRbNl0sMikrTWF0aC5wb3codFs3XSwyKStNYXRoLnBvdyh0WzhdLDIpK01hdGgucG93KHRbOV0sMikrTWF0aC5wb3codFsxMF0sMikrTWF0aC5wb3codFsxMV0sMikrTWF0aC5wb3codFsxMl0sMikrTWF0aC5wb3codFsxM10sMikrTWF0aC5wb3codFsxNF0sMikrTWF0aC5wb3codFsxNV0sMikpfSx0LmV4cG9ydHM9ZX0sZnVuY3Rpb24odCxuLHIpe3ZhciBhPXIoMSksZT1yKDQpLHU9cig3KSxvPXIoOCksaT17fTtpLmNyZWF0ZT1mdW5jdGlvbigpe3ZhciB0PW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHRbMF09MCx0WzFdPTAsdFsyXT0wLHRbM109MSx0fSxpLnJvdGF0aW9uVG89ZnVuY3Rpb24oKXt2YXIgdD11LmNyZWF0ZSgpLG49dS5mcm9tVmFsdWVzKDEsMCwwKSxyPXUuZnJvbVZhbHVlcygwLDEsMCk7cmV0dXJuIGZ1bmN0aW9uKGEsZSxvKXt2YXIgYz11LmRvdChlLG8pO3JldHVybi0uOTk5OTk5PmM/KHUuY3Jvc3ModCxuLGUpLHUubGVuZ3RoKHQpPDFlLTYmJnUuY3Jvc3ModCxyLGUpLHUubm9ybWFsaXplKHQsdCksaS5zZXRBeGlzQW5nbGUoYSx0LE1hdGguUEkpLGEpOmM+Ljk5OTk5OT8oYVswXT0wLGFbMV09MCxhWzJdPTAsYVszXT0xLGEpOih1LmNyb3NzKHQsZSxvKSxhWzBdPXRbMF0sYVsxXT10WzFdLGFbMl09dFsyXSxhWzNdPTErYyxpLm5vcm1hbGl6ZShhLGEpKX19KCksaS5zZXRBeGVzPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24obixyLGEsZSl7cmV0dXJuIHRbMF09YVswXSx0WzNdPWFbMV0sdFs2XT1hWzJdLHRbMV09ZVswXSx0WzRdPWVbMV0sdFs3XT1lWzJdLHRbMl09LXJbMF0sdFs1XT0tclsxXSx0WzhdPS1yWzJdLGkubm9ybWFsaXplKG4saS5mcm9tTWF0MyhuLHQpKX19KCksaS5jbG9uZT1vLmNsb25lLGkuZnJvbVZhbHVlcz1vLmZyb21WYWx1ZXMsaS5jb3B5PW8uY29weSxpLnNldD1vLnNldCxpLmlkZW50aXR5PWZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTEsdH0saS5zZXRBeGlzQW5nbGU9ZnVuY3Rpb24odCxuLHIpe3I9LjUqcjt2YXIgYT1NYXRoLnNpbihyKTtyZXR1cm4gdFswXT1hKm5bMF0sdFsxXT1hKm5bMV0sdFsyXT1hKm5bMl0sdFszXT1NYXRoLmNvcyhyKSx0fSxpLmFkZD1vLmFkZCxpLm11bHRpcGx5PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9clswXSxjPXJbMV0sZj1yWzJdLHM9clszXTtyZXR1cm4gdFswXT1hKnMrbyppK2UqZi11KmMsdFsxXT1lKnMrbypjK3UqaS1hKmYsdFsyXT11KnMrbypmK2EqYy1lKmksdFszXT1vKnMtYSppLWUqYy11KmYsdH0saS5tdWw9aS5tdWx0aXBseSxpLnNjYWxlPW8uc2NhbGUsaS5yb3RhdGVYPWZ1bmN0aW9uKHQsbixyKXtyKj0uNTt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1uWzNdLGk9TWF0aC5zaW4ociksYz1NYXRoLmNvcyhyKTtyZXR1cm4gdFswXT1hKmMrbyppLHRbMV09ZSpjK3UqaSx0WzJdPXUqYy1lKmksdFszXT1vKmMtYSppLHR9LGkucm90YXRlWT1mdW5jdGlvbih0LG4scil7cio9LjU7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXSxpPU1hdGguc2luKHIpLGM9TWF0aC5jb3Mocik7cmV0dXJuIHRbMF09YSpjLXUqaSx0WzFdPWUqYytvKmksdFsyXT11KmMrYSppLHRbM109bypjLWUqaSx0fSxpLnJvdGF0ZVo9ZnVuY3Rpb24odCxuLHIpe3IqPS41O3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPW5bM10saT1NYXRoLnNpbihyKSxjPU1hdGguY29zKHIpO3JldHVybiB0WzBdPWEqYytlKmksdFsxXT1lKmMtYSppLHRbMl09dSpjK28qaSx0WzNdPW8qYy11KmksdH0saS5jYWxjdWxhdGVXPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdO3JldHVybiB0WzBdPXIsdFsxXT1hLHRbMl09ZSx0WzNdPU1hdGguc3FydChNYXRoLmFicygxLXIqci1hKmEtZSplKSksdH0saS5kb3Q9by5kb3QsaS5sZXJwPW8ubGVycCxpLnNsZXJwPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlLHUsbyxpLGMsZj1uWzBdLHM9blsxXSxoPW5bMl0sTT1uWzNdLGw9clswXSx2PXJbMV0sbT1yWzJdLHA9clszXTtyZXR1cm4gdT1mKmwrcyp2K2gqbStNKnAsMD51JiYodT0tdSxsPS1sLHY9LXYsbT0tbSxwPS1wKSwxLXU+MWUtNj8oZT1NYXRoLmFjb3ModSksbz1NYXRoLnNpbihlKSxpPU1hdGguc2luKCgxLWEpKmUpL28sYz1NYXRoLnNpbihhKmUpL28pOihpPTEtYSxjPWEpLHRbMF09aSpmK2MqbCx0WzFdPWkqcytjKnYsdFsyXT1pKmgrYyptLHRbM109aSpNK2MqcCx0fSxpLnNxbGVycD1mdW5jdGlvbigpe3ZhciB0PWkuY3JlYXRlKCksbj1pLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihyLGEsZSx1LG8sYyl7cmV0dXJuIGkuc2xlcnAodCxhLG8sYyksaS5zbGVycChuLGUsdSxjKSxpLnNsZXJwKHIsdCxuLDIqYyooMS1jKSkscn19KCksaS5pbnZlcnQ9ZnVuY3Rpb24odCxuKXt2YXIgcj1uWzBdLGE9blsxXSxlPW5bMl0sdT1uWzNdLG89cipyK2EqYStlKmUrdSp1LGk9bz8xL286MDtyZXR1cm4gdFswXT0tcippLHRbMV09LWEqaSx0WzJdPS1lKmksdFszXT11KmksdH0saS5jb25qdWdhdGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0tblswXSx0WzFdPS1uWzFdLHRbMl09LW5bMl0sdFszXT1uWzNdLHR9LGkubGVuZ3RoPW8ubGVuZ3RoLGkubGVuPWkubGVuZ3RoLGkuc3F1YXJlZExlbmd0aD1vLnNxdWFyZWRMZW5ndGgsaS5zcXJMZW49aS5zcXVhcmVkTGVuZ3RoLGkubm9ybWFsaXplPW8ubm9ybWFsaXplLGkuZnJvbU1hdDM9ZnVuY3Rpb24odCxuKXt2YXIgcixhPW5bMF0rbls0XStuWzhdO2lmKGE+MClyPU1hdGguc3FydChhKzEpLHRbM109LjUqcixyPS41L3IsdFswXT0obls1XS1uWzddKSpyLHRbMV09KG5bNl0tblsyXSkqcix0WzJdPShuWzFdLW5bM10pKnI7ZWxzZXt2YXIgZT0wO25bNF0+blswXSYmKGU9MSksbls4XT5uWzMqZStlXSYmKGU9Mik7dmFyIHU9KGUrMSklMyxvPShlKzIpJTM7cj1NYXRoLnNxcnQoblszKmUrZV0tblszKnUrdV0tblszKm8rb10rMSksdFtlXT0uNSpyLHI9LjUvcix0WzNdPShuWzMqdStvXS1uWzMqbyt1XSkqcix0W3VdPShuWzMqdStlXStuWzMqZSt1XSkqcix0W29dPShuWzMqbytlXStuWzMqZStvXSkqcn1yZXR1cm4gdH0saS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInF1YXQoIit0WzBdKyIsICIrdFsxXSsiLCAiK3RbMl0rIiwgIit0WzNdKyIpIn0sdC5leHBvcnRzPWl9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDMpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoMyk7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sblsyXT10WzJdLG59LGUuZnJvbVZhbHVlcz1mdW5jdGlvbih0LG4scil7dmFyIGU9bmV3IGEuQVJSQVlfVFlQRSgzKTtyZXR1cm4gZVswXT10LGVbMV09bixlWzJdPXIsZX0sZS5jb3B5PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09blswXSx0WzFdPW5bMV0sdFsyXT1uWzJdLHR9LGUuc2V0PWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiB0WzBdPW4sdFsxXT1yLHRbMl09YSx0fSxlLmFkZD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXStyWzBdLHRbMV09blsxXStyWzFdLHRbMl09blsyXStyWzJdLHR9LGUuc3VidHJhY3Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0tclswXSx0WzFdPW5bMV0tclsxXSx0WzJdPW5bMl0tclsyXSx0fSxlLnN1Yj1lLnN1YnRyYWN0LGUubXVsdGlwbHk9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0qclswXSx0WzFdPW5bMV0qclsxXSx0WzJdPW5bMl0qclsyXSx0fSxlLm11bD1lLm11bHRpcGx5LGUuZGl2aWRlPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdL3JbMF0sdFsxXT1uWzFdL3JbMV0sdFsyXT1uWzJdL3JbMl0sdH0sZS5kaXY9ZS5kaXZpZGUsZS5taW49ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPU1hdGgubWluKG5bMF0sclswXSksdFsxXT1NYXRoLm1pbihuWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oblsyXSxyWzJdKSx0fSxlLm1heD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09TWF0aC5tYXgoblswXSxyWzBdKSx0WzFdPU1hdGgubWF4KG5bMV0sclsxXSksdFsyXT1NYXRoLm1heChuWzJdLHJbMl0pLHR9LGUuc2NhbGU9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0qcix0WzFdPW5bMV0qcix0WzJdPW5bMl0qcix0fSxlLnNjYWxlQW5kQWRkPWZ1bmN0aW9uKHQsbixyLGEpe3JldHVybiB0WzBdPW5bMF0rclswXSphLHRbMV09blsxXStyWzFdKmEsdFsyXT1uWzJdK3JbMl0qYSx0fSxlLmRpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdLGU9blsyXS10WzJdO3JldHVybiBNYXRoLnNxcnQocipyK2EqYStlKmUpfSxlLmRpc3Q9ZS5kaXN0YW5jZSxlLnNxdWFyZWREaXN0YW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0tdFswXSxhPW5bMV0tdFsxXSxlPW5bMl0tdFsyXTtyZXR1cm4gcipyK2EqYStlKmV9LGUuc3FyRGlzdD1lLnNxdWFyZWREaXN0YW5jZSxlLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxhPXRbMl07cmV0dXJuIE1hdGguc3FydChuKm4rcipyK2EqYSl9LGUubGVuPWUubGVuZ3RoLGUuc3F1YXJlZExlbmd0aD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxhPXRbMl07cmV0dXJuIG4qbityKnIrYSphfSxlLnNxckxlbj1lLnNxdWFyZWRMZW5ndGgsZS5uZWdhdGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0tblswXSx0WzFdPS1uWzFdLHRbMl09LW5bMl0sdH0sZS5pbnZlcnNlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MS9uWzBdLHRbMV09MS9uWzFdLHRbMl09MS9uWzJdLHR9LGUubm9ybWFsaXplPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9cipyK2EqYStlKmU7cmV0dXJuIHU+MCYmKHU9MS9NYXRoLnNxcnQodSksdFswXT1uWzBdKnUsdFsxXT1uWzFdKnUsdFsyXT1uWzJdKnUpLHR9LGUuZG90PWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF0qblswXSt0WzFdKm5bMV0rdFsyXSpuWzJdfSxlLmNyb3NzPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1yWzBdLGk9clsxXSxjPXJbMl07cmV0dXJuIHRbMF09ZSpjLXUqaSx0WzFdPXUqby1hKmMsdFsyXT1hKmktZSpvLHR9LGUubGVycD1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1uWzBdLHU9blsxXSxvPW5bMl07cmV0dXJuIHRbMF09ZSthKihyWzBdLWUpLHRbMV09dSthKihyWzFdLXUpLHRbMl09bythKihyWzJdLW8pLHR9LGUuaGVybWl0ZT1mdW5jdGlvbih0LG4scixhLGUsdSl7dmFyIG89dSp1LGk9byooMip1LTMpKzEsYz1vKih1LTIpK3UsZj1vKih1LTEpLHM9byooMy0yKnUpO3JldHVybiB0WzBdPW5bMF0qaStyWzBdKmMrYVswXSpmK2VbMF0qcyx0WzFdPW5bMV0qaStyWzFdKmMrYVsxXSpmK2VbMV0qcyx0WzJdPW5bMl0qaStyWzJdKmMrYVsyXSpmK2VbMl0qcyx0fSxlLmJlemllcj1mdW5jdGlvbih0LG4scixhLGUsdSl7dmFyIG89MS11LGk9bypvLGM9dSp1LGY9aSpvLHM9Myp1KmksaD0zKmMqbyxNPWMqdTtyZXR1cm4gdFswXT1uWzBdKmYrclswXSpzK2FbMF0qaCtlWzBdKk0sdFsxXT1uWzFdKmYrclsxXSpzK2FbMV0qaCtlWzFdKk0sdFsyXT1uWzJdKmYrclsyXSpzK2FbMl0qaCtlWzJdKk0sdH0sZS5yYW5kb209ZnVuY3Rpb24odCxuKXtuPW58fDE7dmFyIHI9MiphLlJBTkRPTSgpKk1hdGguUEksZT0yKmEuUkFORE9NKCktMSx1PU1hdGguc3FydCgxLWUqZSkqbjtyZXR1cm4gdFswXT1NYXRoLmNvcyhyKSp1LHRbMV09TWF0aC5zaW4ocikqdSx0WzJdPWUqbix0fSxlLnRyYW5zZm9ybU1hdDQ9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXSxvPXJbM10qYStyWzddKmUrclsxMV0qdStyWzE1XTtyZXR1cm4gbz1vfHwxLHRbMF09KHJbMF0qYStyWzRdKmUrcls4XSp1K3JbMTJdKS9vLHRbMV09KHJbMV0qYStyWzVdKmUrcls5XSp1K3JbMTNdKS9vLHRbMl09KHJbMl0qYStyWzZdKmUrclsxMF0qdStyWzE0XSkvbyx0fSxlLnRyYW5zZm9ybU1hdDM9ZnVuY3Rpb24odCxuLHIpe3ZhciBhPW5bMF0sZT1uWzFdLHU9blsyXTtyZXR1cm4gdFswXT1hKnJbMF0rZSpyWzNdK3Uqcls2XSx0WzFdPWEqclsxXStlKnJbNF0rdSpyWzddLHRbMl09YSpyWzJdK2Uqcls1XSt1KnJbOF0sdH0sZS50cmFuc2Zvcm1RdWF0PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1yWzBdLGk9clsxXSxjPXJbMl0sZj1yWzNdLHM9ZiphK2kqdS1jKmUsaD1mKmUrYyphLW8qdSxNPWYqdStvKmUtaSphLGw9LW8qYS1pKmUtYyp1O3JldHVybiB0WzBdPXMqZitsKi1vK2gqLWMtTSotaSx0WzFdPWgqZitsKi1pK00qLW8tcyotYyx0WzJdPU0qZitsKi1jK3MqLWktaCotbyx0fSxlLnJvdGF0ZVg9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIGU9W10sdT1bXTtyZXR1cm4gZVswXT1uWzBdLXJbMF0sZVsxXT1uWzFdLXJbMV0sZVsyXT1uWzJdLXJbMl0sdVswXT1lWzBdLHVbMV09ZVsxXSpNYXRoLmNvcyhhKS1lWzJdKk1hdGguc2luKGEpLHVbMl09ZVsxXSpNYXRoLnNpbihhKStlWzJdKk1hdGguY29zKGEpLHRbMF09dVswXStyWzBdLHRbMV09dVsxXStyWzFdLHRbMl09dVsyXStyWzJdLHR9LGUucm90YXRlWT1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1bXSx1PVtdO3JldHVybiBlWzBdPW5bMF0tclswXSxlWzFdPW5bMV0tclsxXSxlWzJdPW5bMl0tclsyXSx1WzBdPWVbMl0qTWF0aC5zaW4oYSkrZVswXSpNYXRoLmNvcyhhKSx1WzFdPWVbMV0sdVsyXT1lWzJdKk1hdGguY29zKGEpLWVbMF0qTWF0aC5zaW4oYSksdFswXT11WzBdK3JbMF0sdFsxXT11WzFdK3JbMV0sdFsyXT11WzJdK3JbMl0sdH0sZS5yb3RhdGVaPWZ1bmN0aW9uKHQsbixyLGEpe3ZhciBlPVtdLHU9W107cmV0dXJuIGVbMF09blswXS1yWzBdLGVbMV09blsxXS1yWzFdLGVbMl09blsyXS1yWzJdLHVbMF09ZVswXSpNYXRoLmNvcyhhKS1lWzFdKk1hdGguc2luKGEpLHVbMV09ZVswXSpNYXRoLnNpbihhKStlWzFdKk1hdGguY29zKGEpLHVbMl09ZVsyXSx0WzBdPXVbMF0rclswXSx0WzFdPXVbMV0rclsxXSx0WzJdPXVbMl0rclsyXSx0fSxlLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1lLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihuLHIsYSxlLHUsbyl7dmFyIGksYztmb3Iocnx8KHI9MyksYXx8KGE9MCksYz1lP01hdGgubWluKGUqcithLG4ubGVuZ3RoKTpuLmxlbmd0aCxpPWE7Yz5pO2krPXIpdFswXT1uW2ldLHRbMV09bltpKzFdLHRbMl09bltpKzJdLHUodCx0LG8pLG5baV09dFswXSxuW2krMV09dFsxXSxuW2krMl09dFsyXTtyZXR1cm4gbn19KCksZS5hbmdsZT1mdW5jdGlvbih0LG4pe3ZhciByPWUuZnJvbVZhbHVlcyh0WzBdLHRbMV0sdFsyXSksYT1lLmZyb21WYWx1ZXMoblswXSxuWzFdLG5bMl0pO2Uubm9ybWFsaXplKHIsciksZS5ub3JtYWxpemUoYSxhKTt2YXIgdT1lLmRvdChyLGEpO3JldHVybiB1PjE/MDpNYXRoLmFjb3ModSl9LGUuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJ2ZWMzKCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIpIn0sdC5leHBvcnRzPWV9LGZ1bmN0aW9uKHQsbixyKXt2YXIgYT1yKDEpLGU9e307ZS5jcmVhdGU9ZnVuY3Rpb24oKXt2YXIgdD1uZXcgYS5BUlJBWV9UWVBFKDQpO3JldHVybiB0WzBdPTAsdFsxXT0wLHRbMl09MCx0WzNdPTAsdH0sZS5jbG9uZT1mdW5jdGlvbih0KXt2YXIgbj1uZXcgYS5BUlJBWV9UWVBFKDQpO3JldHVybiBuWzBdPXRbMF0sblsxXT10WzFdLG5bMl09dFsyXSxuWzNdPXRbM10sbn0sZS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsbixyLGUpe3ZhciB1PW5ldyBhLkFSUkFZX1RZUEUoNCk7cmV0dXJuIHVbMF09dCx1WzFdPW4sdVsyXT1yLHVbM109ZSx1fSxlLmNvcHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0WzJdPW5bMl0sdFszXT1uWzNdLHR9LGUuc2V0PWZ1bmN0aW9uKHQsbixyLGEsZSl7cmV0dXJuIHRbMF09bix0WzFdPXIsdFsyXT1hLHRbM109ZSx0fSxlLmFkZD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXStyWzBdLHRbMV09blsxXStyWzFdLHRbMl09blsyXStyWzJdLHRbM109blszXStyWzNdLHR9LGUuc3VidHJhY3Q9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0tclswXSx0WzFdPW5bMV0tclsxXSx0WzJdPW5bMl0tclsyXSx0WzNdPW5bM10tclszXSx0fSxlLnN1Yj1lLnN1YnRyYWN0LGUubXVsdGlwbHk9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0qclswXSx0WzFdPW5bMV0qclsxXSx0WzJdPW5bMl0qclsyXSx0WzNdPW5bM10qclszXSx0fSxlLm11bD1lLm11bHRpcGx5LGUuZGl2aWRlPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdL3JbMF0sdFsxXT1uWzFdL3JbMV0sdFsyXT1uWzJdL3JbMl0sdFszXT1uWzNdL3JbM10sdH0sZS5kaXY9ZS5kaXZpZGUsZS5taW49ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPU1hdGgubWluKG5bMF0sclswXSksdFsxXT1NYXRoLm1pbihuWzFdLHJbMV0pLHRbMl09TWF0aC5taW4oblsyXSxyWzJdKSx0WzNdPU1hdGgubWluKG5bM10sclszXSksdH0sZS5tYXg9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPU1hdGgubWF4KG5bMF0sclswXSksdFsxXT1NYXRoLm1heChuWzFdLHJbMV0pLHRbMl09TWF0aC5tYXgoblsyXSxyWzJdKSx0WzNdPU1hdGgubWF4KG5bM10sclszXSksdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXSpyLHRbMV09blsxXSpyLHRbMl09blsyXSpyLHRbM109blszXSpyLHR9LGUuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxuLHIsYSl7cmV0dXJuIHRbMF09blswXStyWzBdKmEsdFsxXT1uWzFdK3JbMV0qYSx0WzJdPW5bMl0rclsyXSphLHRbM109blszXStyWzNdKmEsdH0sZS5kaXN0YW5jZT1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0tdFswXSxhPW5bMV0tdFsxXSxlPW5bMl0tdFsyXSx1PW5bM10tdFszXTtyZXR1cm4gTWF0aC5zcXJ0KHIqcithKmErZSplK3UqdSl9LGUuZGlzdD1lLmRpc3RhbmNlLGUuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdLGU9blsyXS10WzJdLHU9blszXS10WzNdO3JldHVybiByKnIrYSphK2UqZSt1KnV9LGUuc3FyRGlzdD1lLnNxdWFyZWREaXN0YW5jZSxlLmxlbmd0aD1mdW5jdGlvbih0KXt2YXIgbj10WzBdLHI9dFsxXSxhPXRbMl0sZT10WzNdO3JldHVybiBNYXRoLnNxcnQobipuK3IqcithKmErZSplKX0sZS5sZW49ZS5sZW5ndGgsZS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdLGE9dFsyXSxlPXRbM107cmV0dXJuIG4qbityKnIrYSphK2UqZX0sZS5zcXJMZW49ZS5zcXVhcmVkTGVuZ3RoLGUubmVnYXRlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09LW5bMF0sdFsxXT0tblsxXSx0WzJdPS1uWzJdLHRbM109LW5bM10sdH0sZS5pbnZlcnNlPWZ1bmN0aW9uKHQsbil7cmV0dXJuIHRbMF09MS9uWzBdLHRbMV09MS9uWzFdLHRbMl09MS9uWzJdLHRbM109MS9uWzNdLHR9LGUubm9ybWFsaXplPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXSxhPW5bMV0sZT1uWzJdLHU9blszXSxvPXIqcithKmErZSplK3UqdTtyZXR1cm4gbz4wJiYobz0xL01hdGguc3FydChvKSx0WzBdPXIqbyx0WzFdPWEqbyx0WzJdPWUqbyx0WzNdPXUqbyksdH0sZS5kb3Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXSt0WzJdKm5bMl0rdFszXSpuWzNdfSxlLmxlcnA9ZnVuY3Rpb24odCxuLHIsYSl7dmFyIGU9blswXSx1PW5bMV0sbz1uWzJdLGk9blszXTtyZXR1cm4gdFswXT1lK2EqKHJbMF0tZSksdFsxXT11K2EqKHJbMV0tdSksdFsyXT1vK2EqKHJbMl0tbyksdFszXT1pK2EqKHJbM10taSksdH0sZS5yYW5kb209ZnVuY3Rpb24odCxuKXtyZXR1cm4gbj1ufHwxLHRbMF09YS5SQU5ET00oKSx0WzFdPWEuUkFORE9NKCksdFsyXT1hLlJBTkRPTSgpLHRbM109YS5SQU5ET00oKSxlLm5vcm1hbGl6ZSh0LHQpLGUuc2NhbGUodCx0LG4pLHR9LGUudHJhbnNmb3JtTWF0ND1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSxlPW5bMV0sdT1uWzJdLG89blszXTtyZXR1cm4gdFswXT1yWzBdKmErcls0XSplK3JbOF0qdStyWzEyXSpvLHRbMV09clsxXSphK3JbNV0qZStyWzldKnUrclsxM10qbyx0WzJdPXJbMl0qYStyWzZdKmUrclsxMF0qdStyWzE0XSpvLHRbM109clszXSphK3JbN10qZStyWzExXSp1K3JbMTVdKm8sdH0sZS50cmFuc2Zvcm1RdWF0PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXSx1PW5bMl0sbz1yWzBdLGk9clsxXSxjPXJbMl0sZj1yWzNdLHM9ZiphK2kqdS1jKmUsaD1mKmUrYyphLW8qdSxNPWYqdStvKmUtaSphLGw9LW8qYS1pKmUtYyp1O3JldHVybiB0WzBdPXMqZitsKi1vK2gqLWMtTSotaSx0WzFdPWgqZitsKi1pK00qLW8tcyotYyx0WzJdPU0qZitsKi1jK3MqLWktaCotbyx0WzNdPW5bM10sdH0sZS5mb3JFYWNoPWZ1bmN0aW9uKCl7dmFyIHQ9ZS5jcmVhdGUoKTtyZXR1cm4gZnVuY3Rpb24obixyLGEsZSx1LG8pe3ZhciBpLGM7Zm9yKHJ8fChyPTQpLGF8fChhPTApLGM9ZT9NYXRoLm1pbihlKnIrYSxuLmxlbmd0aCk6bi5sZW5ndGgsaT1hO2M+aTtpKz1yKXRbMF09bltpXSx0WzFdPW5baSsxXSx0WzJdPW5baSsyXSx0WzNdPW5baSszXSx1KHQsdCxvKSxuW2ldPXRbMF0sbltpKzFdPXRbMV0sbltpKzJdPXRbMl0sbltpKzNdPXRbM107cmV0dXJuIG59fSgpLGUuc3RyPWZ1bmN0aW9uKHQpe3JldHVybiJ2ZWM0KCIrdFswXSsiLCAiK3RbMV0rIiwgIit0WzJdKyIsICIrdFszXSsiKSJ9LHQuZXhwb3J0cz1lfSxmdW5jdGlvbih0LG4scil7dmFyIGE9cigxKSxlPXt9O2UuY3JlYXRlPWZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGEuQVJSQVlfVFlQRSgyKTtyZXR1cm4gdFswXT0wLHRbMV09MCx0fSxlLmNsb25lPWZ1bmN0aW9uKHQpe3ZhciBuPW5ldyBhLkFSUkFZX1RZUEUoMik7cmV0dXJuIG5bMF09dFswXSxuWzFdPXRbMV0sbn0sZS5mcm9tVmFsdWVzPWZ1bmN0aW9uKHQsbil7dmFyIHI9bmV3IGEuQVJSQVlfVFlQRSgyKTtyZXR1cm4gclswXT10LHJbMV09bixyfSxlLmNvcHk9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT1uWzBdLHRbMV09blsxXSx0fSxlLnNldD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09bix0WzFdPXIsdH0sZS5hZGQ9ZnVuY3Rpb24odCxuLHIpe3JldHVybiB0WzBdPW5bMF0rclswXSx0WzFdPW5bMV0rclsxXSx0fSxlLnN1YnRyYWN0PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdLXJbMF0sdFsxXT1uWzFdLXJbMV0sdH0sZS5zdWI9ZS5zdWJ0cmFjdCxlLm11bHRpcGx5PWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1uWzBdKnJbMF0sdFsxXT1uWzFdKnJbMV0sdH0sZS5tdWw9ZS5tdWx0aXBseSxlLmRpdmlkZT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXS9yWzBdLHRbMV09blsxXS9yWzFdLHR9LGUuZGl2PWUuZGl2aWRlLGUubWluPWZ1bmN0aW9uKHQsbixyKXtyZXR1cm4gdFswXT1NYXRoLm1pbihuWzBdLHJbMF0pLHRbMV09TWF0aC5taW4oblsxXSxyWzFdKSx0fSxlLm1heD1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09TWF0aC5tYXgoblswXSxyWzBdKSx0WzFdPU1hdGgubWF4KG5bMV0sclsxXSksdH0sZS5zY2FsZT1mdW5jdGlvbih0LG4scil7cmV0dXJuIHRbMF09blswXSpyLHRbMV09blsxXSpyLHR9LGUuc2NhbGVBbmRBZGQ9ZnVuY3Rpb24odCxuLHIsYSl7cmV0dXJuIHRbMF09blswXStyWzBdKmEsdFsxXT1uWzFdK3JbMV0qYSx0fSxlLmRpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdO3JldHVybiBNYXRoLnNxcnQocipyK2EqYSl9LGUuZGlzdD1lLmRpc3RhbmNlLGUuc3F1YXJlZERpc3RhbmNlPWZ1bmN0aW9uKHQsbil7dmFyIHI9blswXS10WzBdLGE9blsxXS10WzFdO3JldHVybiByKnIrYSphfSxlLnNxckRpc3Q9ZS5zcXVhcmVkRGlzdGFuY2UsZS5sZW5ndGg9ZnVuY3Rpb24odCl7dmFyIG49dFswXSxyPXRbMV07cmV0dXJuIE1hdGguc3FydChuKm4rcipyKX0sZS5sZW49ZS5sZW5ndGgsZS5zcXVhcmVkTGVuZ3RoPWZ1bmN0aW9uKHQpe3ZhciBuPXRbMF0scj10WzFdO3JldHVybiBuKm4rcipyfSxlLnNxckxlbj1lLnNxdWFyZWRMZW5ndGgsZS5uZWdhdGU9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXT0tblswXSx0WzFdPS1uWzFdLHR9LGUuaW52ZXJzZT1mdW5jdGlvbih0LG4pe3JldHVybiB0WzBdPTEvblswXSx0WzFdPTEvblsxXSx0fSxlLm5vcm1hbGl6ZT1mdW5jdGlvbih0LG4pe3ZhciByPW5bMF0sYT1uWzFdLGU9cipyK2EqYTtyZXR1cm4gZT4wJiYoZT0xL01hdGguc3FydChlKSx0WzBdPW5bMF0qZSx0WzFdPW5bMV0qZSksdH0sZS5kb3Q9ZnVuY3Rpb24odCxuKXtyZXR1cm4gdFswXSpuWzBdK3RbMV0qblsxXX0sZS5jcm9zcz1mdW5jdGlvbih0LG4scil7dmFyIGE9blswXSpyWzFdLW5bMV0qclswXTtyZXR1cm4gdFswXT10WzFdPTAsdFsyXT1hLHR9LGUubGVycD1mdW5jdGlvbih0LG4scixhKXt2YXIgZT1uWzBdLHU9blsxXTtyZXR1cm4gdFswXT1lK2EqKHJbMF0tZSksdFsxXT11K2EqKHJbMV0tdSksdH0sZS5yYW5kb209ZnVuY3Rpb24odCxuKXtuPW58fDE7dmFyIHI9MiphLlJBTkRPTSgpKk1hdGguUEk7cmV0dXJuIHRbMF09TWF0aC5jb3Mocikqbix0WzFdPU1hdGguc2luKHIpKm4sdH0sZS50cmFuc2Zvcm1NYXQyPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXTtyZXR1cm4gdFswXT1yWzBdKmErclsyXSplLHRbMV09clsxXSphK3JbM10qZSx0fSxlLnRyYW5zZm9ybU1hdDJkPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXTtyZXR1cm4gdFswXT1yWzBdKmErclsyXSplK3JbNF0sdFsxXT1yWzFdKmErclszXSplK3JbNV0sdH0sZS50cmFuc2Zvcm1NYXQzPWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXTtyZXR1cm4gdFswXT1yWzBdKmErclszXSplK3JbNl0sdFsxXT1yWzFdKmErcls0XSplK3JbN10sdH0sZS50cmFuc2Zvcm1NYXQ0PWZ1bmN0aW9uKHQsbixyKXt2YXIgYT1uWzBdLGU9blsxXTtyZXR1cm4gdFswXT1yWzBdKmErcls0XSplK3JbMTJdLHRbMV09clsxXSphK3JbNV0qZStyWzEzXSx0fSxlLmZvckVhY2g9ZnVuY3Rpb24oKXt2YXIgdD1lLmNyZWF0ZSgpO3JldHVybiBmdW5jdGlvbihuLHIsYSxlLHUsbyl7dmFyIGksYztmb3Iocnx8KHI9MiksYXx8KGE9MCksYz1lP01hdGgubWluKGUqcithLG4ubGVuZ3RoKTpuLmxlbmd0aCxpPWE7Yz5pO2krPXIpdFswXT1uW2ldLHRbMV09bltpKzFdLHUodCx0LG8pLG5baV09dFswXSxuW2krMV09dFsxXTtyZXR1cm4gbn19KCksZS5zdHI9ZnVuY3Rpb24odCl7cmV0dXJuInZlYzIoIit0WzBdKyIsICIrdFsxXSsiKSJ9LHQuZXhwb3J0cz1lfV0pfSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbihnbG9iYWwpe2lmKHRyLmlzTm9kZSl7Y29uc3QgZ2xNYXRyaXhBYnNQYXRoPUhUTUxJbXBvcnRzTG9hZGVyLmhyZWZUb0Fic29sdXRlUGF0aCgnL2dsLW1hdHJpeC1taW4uanMnKTtjb25zdCBnbE1hdHJpeE1vZHVsZT1yZXF1aXJlKGdsTWF0cml4QWJzUGF0aCk7Zm9yKGNvbnN0IGV4cG9ydE5hbWUgaW4gZ2xNYXRyaXhNb2R1bGUpe2dsb2JhbFtleHBvcnROYW1lXT1nbE1hdHJpeE1vZHVsZVtleHBvcnROYW1lXTt9fX0pKHRoaXMpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYi5tYXRoJyxmdW5jdGlvbigpe2NvbnN0IFBSRUZFUlJFRF9OVU1CRVJfU0VSSUVTX01VTFRJUExJRVJTPVsxLDIsNSwxMF07ZnVuY3Rpb24gYXBwcm94aW1hdGVseSh4LHksZGVsdGEpe2lmKGRlbHRhPT09dW5kZWZpbmVkKWRlbHRhPTFlLTk7cmV0dXJuIE1hdGguYWJzKHgteSk8ZGVsdGE7fQpmdW5jdGlvbiBjbGFtcCh4LGxvLGhpKXtyZXR1cm4gTWF0aC5taW4oTWF0aC5tYXgoeCxsbyksaGkpO30KZnVuY3Rpb24gbGVycChwZXJjZW50YWdlLGxvLGhpKXtjb25zdCByYW5nZT1oaS1sbztyZXR1cm4gbG8rcGVyY2VudGFnZSpyYW5nZTt9CmZ1bmN0aW9uIG5vcm1hbGl6ZSh2YWx1ZSxsbyxoaSl7cmV0dXJuKHZhbHVlLWxvKS8oaGktbG8pO30KZnVuY3Rpb24gZGVnMnJhZChkZWcpe3JldHVybihNYXRoLlBJKmRlZykvMTgwLjA7fQpmdW5jdGlvbiBlcmYoeCl7Y29uc3Qgc2lnbj0oeD49MCk/MTotMTt4PU1hdGguYWJzKHgpO2NvbnN0IGExPTAuMjU0ODI5NTkyO2NvbnN0IGEyPS0wLjI4NDQ5NjczNjtjb25zdCBhMz0xLjQyMTQxMzc0MTtjb25zdCBhND0tMS40NTMxNTIwMjc7Y29uc3QgYTU9MS4wNjE0MDU0Mjk7Y29uc3QgcD0wLjMyNzU5MTE7Y29uc3QgdD0xLjAvKDEuMCtwKngpO2NvbnN0IHk9MS4wLSgoKCgoYTUqdCthNCkqdCkrYTMpKnQrYTIpKnQrYTEpKnQqTWF0aC5leHAoLXgqeCk7cmV0dXJuIHNpZ24qeTt9CmNvbnN0IHRtcFZlYzI9dmVjMi5jcmVhdGUoKTtjb25zdCB0bXBWZWMyYj12ZWMyLmNyZWF0ZSgpO2NvbnN0IHRtcFZlYzQ9dmVjNC5jcmVhdGUoKTtjb25zdCB0bXBNYXQyZD1tYXQyZC5jcmVhdGUoKTt2ZWMyLmNyZWF0ZUZyb21BcnJheT1mdW5jdGlvbihhcnIpe2lmKGFyci5sZW5ndGghPT0yKXRocm93IG5ldyBFcnJvcignU2hvdWxkIGJlIGxlbmd0aCAyJyk7Y29uc3Qgdj12ZWMyLmNyZWF0ZSgpO3ZlYzIuc2V0KHYsYXJyWzBdLGFyclsxXSk7cmV0dXJuIHY7fTt2ZWMyLmNyZWF0ZVhZPWZ1bmN0aW9uKHgseSl7Y29uc3Qgdj12ZWMyLmNyZWF0ZSgpO3ZlYzIuc2V0KHYseCx5KTtyZXR1cm4gdjt9O3ZlYzIudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuJ1snK2FbMF0rJywgJythWzFdKyddJzt9O3ZlYzIuYWRkVHdvU2NhbGVkVW5pdFZlY3RvcnM9ZnVuY3Rpb24ob3V0LHUxLHNjYWxlMSx1MixzY2FsZTIpe3ZlYzIuc2NhbGUodG1wVmVjMix1MSxzY2FsZTEpO3ZlYzIuc2NhbGUodG1wVmVjMmIsdTIsc2NhbGUyKTt2ZWMyLmFkZChvdXQsdG1wVmVjMix0bXBWZWMyYik7fTt2ZWMyLmludGVycG9sYXRlUGllY2V3aXNlRnVuY3Rpb249ZnVuY3Rpb24ocG9pbnRzLHgpe2lmKHg8cG9pbnRzWzBdWzBdKXJldHVybiBwb2ludHNbMF1bMV07Zm9yKGxldCBpPTE7aTxwb2ludHMubGVuZ3RoOysraSl7aWYoeDxwb2ludHNbaV1bMF0pe2NvbnN0IHBlcmNlbnQ9bm9ybWFsaXplKHgscG9pbnRzW2ktMV1bMF0scG9pbnRzW2ldWzBdKTtyZXR1cm4gbGVycChwZXJjZW50LHBvaW50c1tpLTFdWzFdLHBvaW50c1tpXVsxXSk7fX0KcmV0dXJuIHBvaW50c1twb2ludHMubGVuZ3RoLTFdWzFdO307dmVjMy5jcmVhdGVYWVo9ZnVuY3Rpb24oeCx5LHope2NvbnN0IHY9dmVjMy5jcmVhdGUoKTt2ZWMzLnNldCh2LHgseSx6KTtyZXR1cm4gdjt9O3ZlYzMudG9TdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuJ3ZlYzMoJythWzBdKycsICcrYVsxXSsnLCAnK2FbMl0rJyknO307bWF0MmQudHJhbnNsYXRlWFk9ZnVuY3Rpb24ob3V0LHgseSl7dmVjMi5zZXQodG1wVmVjMix4LHkpO21hdDJkLnRyYW5zbGF0ZShvdXQsb3V0LHRtcFZlYzIpO307bWF0MmQuc2NhbGVYWT1mdW5jdGlvbihvdXQseCx5KXt2ZWMyLnNldCh0bXBWZWMyLHgseSk7bWF0MmQuc2NhbGUob3V0LG91dCx0bXBWZWMyKTt9O3ZlYzQudW5pdGl6ZT1mdW5jdGlvbihvdXQsYSl7b3V0WzBdPWFbMF0vYVszXTtvdXRbMV09YVsxXS9hWzNdO291dFsyXT1hWzJdL2FbM107b3V0WzNdPTE7cmV0dXJuIG91dDt9O3ZlYzIuY29weUZyb21WZWM0PWZ1bmN0aW9uKG91dCxhKXt2ZWM0LnVuaXRpemUodG1wVmVjNCxhKTt2ZWMyLmNvcHkob3V0LHRtcFZlYzQpO307ZnVuY3Rpb24gbG9nT3JMb2cxMCh4LGJhc2Upe2lmKGJhc2U9PT0xMClyZXR1cm4gTWF0aC5sb2cxMCh4KTtyZXR1cm4gTWF0aC5sb2coeCkvTWF0aC5sb2coYmFzZSk7fQpmdW5jdGlvbiBsZXNzZXJQb3dlcih4LG9wdF9iYXNlKXtjb25zdCBiYXNlPW9wdF9iYXNlfHwxMDtyZXR1cm4gTWF0aC5wb3coYmFzZSxNYXRoLmZsb29yKGxvZ09yTG9nMTAoeCxiYXNlKSkpO30KZnVuY3Rpb24gZ3JlYXRlclBvd2VyKHgsb3B0X2Jhc2Upe2NvbnN0IGJhc2U9b3B0X2Jhc2V8fDEwO3JldHVybiBNYXRoLnBvdyhiYXNlLE1hdGguY2VpbChsb2dPckxvZzEwKHgsYmFzZSkpKTt9CmZ1bmN0aW9uIGxlc3Nlcldob2xlTnVtYmVyKHgpe2lmKHg9PT0wKXJldHVybiAwO2NvbnN0IHBvdzEwPSh4PDApPy1sZXNzZXJQb3dlcigteCk6bGVzc2VyUG93ZXIoeCk7cmV0dXJuIHBvdzEwKk1hdGguZmxvb3IoeC9wb3cxMCk7fQpmdW5jdGlvbiBncmVhdGVyV2hvbGVOdW1iZXIoeCl7aWYoeD09PTApcmV0dXJuIDA7Y29uc3QgcG93MTA9KHg8MCk/LWxlc3NlclBvd2VyKC14KTpsZXNzZXJQb3dlcih4KTtyZXR1cm4gcG93MTAqTWF0aC5jZWlsKHgvcG93MTApO30KZnVuY3Rpb24gdHJ1bmNhdGUodmFsdWUsZGlnaXRzKXtjb25zdCBwb3cxMD1NYXRoLnBvdygxMCxkaWdpdHMpO3JldHVybiBNYXRoLnJvdW5kKHZhbHVlKnBvdzEwKS9wb3cxMDt9CmZ1bmN0aW9uIHByZWZlcnJlZE51bWJlckxhcmdlclRoYW5NaW4obWluKXtjb25zdCBhYnNNaW49TWF0aC5hYnMobWluKTtjb25zdCBjb25zZXJ2YXRpdmVHdWVzcz10ci5iLm1hdGgubGVzc2VyUG93ZXIoYWJzTWluKTtsZXQgbWluUHJlZmVyZWROdW1iZXI9dW5kZWZpbmVkO2Zvcihjb25zdCBtdWx0aXBsaWVyIG9mIFBSRUZFUlJFRF9OVU1CRVJfU0VSSUVTX01VTFRJUExJRVJTKXtjb25zdCB0aWdodGVuZWRHdWVzcz1jb25zZXJ2YXRpdmVHdWVzcyptdWx0aXBsaWVyO2lmKHRpZ2h0ZW5lZEd1ZXNzPj1hYnNNaW4pe21pblByZWZlcmVkTnVtYmVyPXRpZ2h0ZW5lZEd1ZXNzO2JyZWFrO319CmlmKG1pblByZWZlcmVkTnVtYmVyPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBjb21wdXRlIHByZWZlcnJlZCBudW1iZXIgZm9yICcrbWluKTt9CmlmKG1pbjwwKW1pblByZWZlcmVkTnVtYmVyKj0tMTtyZXR1cm4gbWluUHJlZmVyZWROdW1iZXI7fQpyZXR1cm57YXBwcm94aW1hdGVseSxjbGFtcCxsZXJwLG5vcm1hbGl6ZSxkZWcycmFkLGVyZixsZXNzZXJQb3dlcixncmVhdGVyUG93ZXIsbGVzc2VyV2hvbGVOdW1iZXIsZ3JlYXRlcldob2xlTnVtYmVyLHByZWZlcnJlZE51bWJlckxhcmdlclRoYW5NaW4sdHJ1bmNhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBSYW5nZSgpe3RoaXMuaXNFbXB0eV89dHJ1ZTt0aGlzLm1pbl89dW5kZWZpbmVkO3RoaXMubWF4Xz11bmRlZmluZWQ7fQpSYW5nZS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLGNsb25lKCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiBuZXcgUmFuZ2UoKTtyZXR1cm4gUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UodGhpcy5taW5fLHRoaXMubWF4Xyk7fSxyZXNldCgpe3RoaXMuaXNFbXB0eV89dHJ1ZTt0aGlzLm1pbl89dW5kZWZpbmVkO3RoaXMubWF4Xz11bmRlZmluZWQ7fSxnZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLmlzRW1wdHlfO30sYWRkUmFuZ2UocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuO3RoaXMuYWRkVmFsdWUocmFuZ2UubWluKTt0aGlzLmFkZFZhbHVlKHJhbmdlLm1heCk7fSxhZGRWYWx1ZSh2YWx1ZSl7aWYodGhpcy5pc0VtcHR5Xyl7dGhpcy5tYXhfPXZhbHVlO3RoaXMubWluXz12YWx1ZTt0aGlzLmlzRW1wdHlfPWZhbHNlO3JldHVybjt9CnRoaXMubWF4Xz1NYXRoLm1heCh0aGlzLm1heF8sdmFsdWUpO3RoaXMubWluXz1NYXRoLm1pbih0aGlzLm1pbl8sdmFsdWUpO30sc2V0IG1pbihtaW4pe3RoaXMuaXNFbXB0eV89ZmFsc2U7dGhpcy5taW5fPW1pbjt9LGdldCBtaW4oKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWluXzt9LGdldCBtYXgoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWF4Xzt9LHNldCBtYXgobWF4KXt0aGlzLmlzRW1wdHlfPWZhbHNlO3RoaXMubWF4Xz1tYXg7fSxnZXQgcmFuZ2UoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubWF4Xy10aGlzLm1pbl87fSxnZXQgY2VudGVyKCl7cmV0dXJuKHRoaXMubWluXyt0aGlzLm1heF8pKjAuNTt9LGdldCBkdXJhdGlvbigpe2lmKHRoaXMuaXNFbXB0eV8pcmV0dXJuIDA7cmV0dXJuIHRoaXMubWF4Xy10aGlzLm1pbl87fSxlbmNsb3NpbmdQb3dlcnMob3B0X2Jhc2Upe2lmKHRoaXMuaXNFbXB0eSlyZXR1cm4gbmV3IFJhbmdlKCk7cmV0dXJuIFJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHRyLmIubWF0aC5sZXNzZXJQb3dlcih0aGlzLm1pbl8sb3B0X2Jhc2UpLHRyLmIubWF0aC5ncmVhdGVyUG93ZXIodGhpcy5tYXhfLG9wdF9iYXNlKSk7fSxub3JtYWxpemUoeCl7cmV0dXJuIHRyLmIubWF0aC5ub3JtYWxpemUoeCx0aGlzLm1pbix0aGlzLm1heCk7fSxsZXJwKHgpe3JldHVybiB0ci5iLm1hdGgubGVycCh4LHRoaXMubWluLHRoaXMubWF4KTt9LGNsYW1wKHgpe3JldHVybiB0ci5iLm1hdGguY2xhbXAoeCx0aGlzLm1pbix0aGlzLm1heCk7fSxlcXVhbHModGhhdCl7aWYodGhpcy5pc0VtcHR5JiZ0aGF0LmlzRW1wdHkpcmV0dXJuIHRydWU7aWYodGhpcy5pc0VtcHR5IT09dGhhdC5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4odHIuYi5tYXRoLmFwcHJveGltYXRlbHkodGhpcy5taW4sdGhhdC5taW4pJiZ0ci5iLm1hdGguYXBwcm94aW1hdGVseSh0aGlzLm1heCx0aGF0Lm1heCkpO30sY29udGFpbnNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKG1pbixtYXgpe2lmKHRoaXMuaXNFbXB0eSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMubWluXzw9bWluJiZtYXg8PXRoaXMubWF4Xzt9LGNvbnRhaW5zRXhwbGljaXRSYW5nZUV4Y2x1c2l2ZShtaW4sbWF4KXtpZih0aGlzLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLm1pbl88bWluJiZtYXg8dGhpcy5tYXhfO30saW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUobWluLG1heCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5taW5fPD1tYXgmJm1pbjw9dGhpcy5tYXhfO30saW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VFeGNsdXNpdmUobWluLG1heCl7aWYodGhpcy5pc0VtcHR5KXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5taW5fPG1heCYmbWluPHRoaXMubWF4Xzt9LGNvbnRhaW5zUmFuZ2VJbmNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmNvbnRhaW5zRXhwbGljaXRSYW5nZUluY2x1c2l2ZShyYW5nZS5taW5fLHJhbmdlLm1heF8pO30sY29udGFpbnNSYW5nZUV4Y2x1c2l2ZShyYW5nZSl7aWYocmFuZ2UuaXNFbXB0eSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMuY29udGFpbnNFeHBsaWNpdFJhbmdlRXhjbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxpbnRlcnNlY3RzUmFuZ2VJbmNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxpbnRlcnNlY3RzUmFuZ2VFeGNsdXNpdmUocmFuZ2Upe2lmKHJhbmdlLmlzRW1wdHkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlRXhjbHVzaXZlKHJhbmdlLm1pbl8scmFuZ2UubWF4Xyk7fSxmaW5kRXhwbGljaXRJbnRlcnNlY3Rpb25EdXJhdGlvbihtaW4sbWF4KXttaW49TWF0aC5tYXgodGhpcy5taW4sbWluKTttYXg9TWF0aC5taW4odGhpcy5tYXgsbWF4KTtpZihtYXg8bWluKXJldHVybiAwO3JldHVybiBtYXgtbWluO30sZmluZEludGVyc2VjdGlvbihyYW5nZSl7aWYodGhpcy5pc0VtcHR5fHxyYW5nZS5pc0VtcHR5KXJldHVybiBuZXcgUmFuZ2UoKTtjb25zdCBtaW49TWF0aC5tYXgodGhpcy5taW4scmFuZ2UubWluKTtjb25zdCBtYXg9TWF0aC5taW4odGhpcy5tYXgscmFuZ2UubWF4KTtpZihtYXg8bWluKXJldHVybiBuZXcgUmFuZ2UoKTtyZXR1cm4gUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UobWluLG1heCk7fSx0b0pTT04oKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybntpc0VtcHR5OnRydWV9O3JldHVybntpc0VtcHR5OmZhbHNlLG1heDp0aGlzLm1heCxtaW46dGhpcy5taW59O30sZmlsdGVyQXJyYXkoc29ydGVkQXJyYXksb3B0X2tleUZ1bmMsb3B0X3RoaXMpe2lmKHRoaXMuaXNFbXB0eV8pcmV0dXJuW107Y29uc3Qga2V5RnVuYz1vcHRfa2V5RnVuY3x8KHg9PngpO2Z1bmN0aW9uIGdldFZhbHVlKG9iail7cmV0dXJuIGtleUZ1bmMuY2FsbChvcHRfdGhpcyxvYmopO30KY29uc3QgZmlyc3Q9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEFycmF5LG9iaj0+dGhpcy5taW5fPT09dW5kZWZpbmVkfHx0aGlzLm1pbl88PWdldFZhbHVlKG9iaikpO2NvbnN0IGxhc3Q9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEFycmF5LG9iaj0+dGhpcy5tYXhfIT09dW5kZWZpbmVkJiZ0aGlzLm1heF88Z2V0VmFsdWUob2JqKSk7cmV0dXJuIHNvcnRlZEFycmF5LnNsaWNlKGZpcnN0LGxhc3QpO319O1JhbmdlLmZyb21EaWN0PWZ1bmN0aW9uKGQpe2lmKGQuaXNFbXB0eT09PXRydWUpcmV0dXJuIG5ldyBSYW5nZSgpO2lmKGQuaXNFbXB0eT09PWZhbHNlKXtjb25zdCByYW5nZT1uZXcgUmFuZ2UoKTtyYW5nZS5taW49ZC5taW47cmFuZ2UubWF4PWQubWF4O3JldHVybiByYW5nZTt9CnRocm93IG5ldyBFcnJvcignTm90IGEgcmFuZ2UnKTt9O1JhbmdlLmZyb21FeHBsaWNpdFJhbmdlPWZ1bmN0aW9uKG1pbixtYXgpe2NvbnN0IHJhbmdlPW5ldyBSYW5nZSgpO3JhbmdlLm1pbj1taW47cmFuZ2UubWF4PW1heDtyZXR1cm4gcmFuZ2U7fTtSYW5nZS5jb21wYXJlQnlNaW5UaW1lcz1mdW5jdGlvbihhLGIpe2lmKCFhLmlzRW1wdHkmJiFiLmlzRW1wdHkpcmV0dXJuIGEubWluXy1iLm1pbl87aWYoYS5pc0VtcHR5JiYhYi5pc0VtcHR5KXJldHVybi0xO2lmKCFhLmlzRW1wdHkmJmIuaXNFbXB0eSlyZXR1cm4gMTtyZXR1cm4gMDt9O1JhbmdlLmZpbmREaWZmZXJlbmNlPWZ1bmN0aW9uKHJhbmdlQSxyYW5nZUIpe2lmKCFyYW5nZUF8fHJhbmdlQS5kdXJhdGlvbjwwfHwhcmFuZ2VCfHxyYW5nZUIuZHVyYXRpb248MCl7dGhyb3cgbmV3IEVycm9yKGBDb3VsZG4ndCBzdWJ0cmFjdCByYW5nZXNgKTt9CmNvbnN0IHJlc3VsdFJhbmdlcz1bXTtpZihyYW5nZUEuaXNFbXB0eSlyZXR1cm4gcmVzdWx0UmFuZ2VzO2lmKHJhbmdlQi5pc0VtcHR5KXJldHVybltyYW5nZUEuY2xvbmUoKV07Y29uc3QgaW50ZXJzZWN0aW9uPXJhbmdlQS5maW5kSW50ZXJzZWN0aW9uKHJhbmdlQik7aWYoaW50ZXJzZWN0aW9uLmlzRW1wdHkpe3JldHVybltyYW5nZUEuY2xvbmUoKV07fQppZihyYW5nZUEuZHVyYXRpb249PT0wJiZyYW5nZUIuZHVyYXRpb249PT0wKXtpZihpbnRlcnNlY3Rpb24uZW1wdHkpcmV0dXJuW3JhbmdlQS5jbG9uZSgpXTtlbHNlIGlmKGludGVyc2VjdGlvbi5kdXJhdGlvbj09PTApcmV0dXJuIHJlc3VsdFJhbmdlczt0aHJvdyBuZXcgRXJyb3IoYFR3byBwb2ludHMnIGludGVyc2VjdGlvbiBjYW4gb25seSBiZSBhIHBvaW50IG9yIGVtcHR5YCk7fQpjb25zdCBsZWZ0UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHJhbmdlQS5taW4saW50ZXJzZWN0aW9uLm1pbik7aWYobGVmdFJhbmdlLmR1cmF0aW9uPjApe3Jlc3VsdFJhbmdlcy5wdXNoKGxlZnRSYW5nZSk7fQpjb25zdCByaWdodFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShpbnRlcnNlY3Rpb24ubWF4LHJhbmdlQS5tYXgpO2lmKHJpZ2h0UmFuZ2UuZHVyYXRpb24+MCl7cmVzdWx0UmFuZ2VzLnB1c2gocmlnaHRSYW5nZSk7fQpyZXR1cm4gcmVzdWx0UmFuZ2VzO307UmFuZ2UuUEVSQ0VOVF9SQU5HRT1SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLDEpO09iamVjdC5mcmVlemUoUmFuZ2UuUEVSQ0VOVF9SQU5HRSk7cmV0dXJue1JhbmdlLH07fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbihleHBvcnRzKXt2YXIgcmFuaz17c3RhbmRhcmQ6ZnVuY3Rpb24oYXJyYXksa2V5KXthcnJheT1hcnJheS5zb3J0KGZ1bmN0aW9uKGEsYil7dmFyIHg9YVtrZXldO3ZhciB5PWJba2V5XTtyZXR1cm4oKHg8eSk/LTE6KCh4PnkpPzE6MCkpO30pO2Zvcih2YXIgaT0xO2k8YXJyYXkubGVuZ3RoKzE7aSsrKXthcnJheVtpLTFdWydyYW5rJ109aTt9CnJldHVybiBhcnJheTt9LGZyYWN0aW9uYWw6ZnVuY3Rpb24oYXJyYXksa2V5KXthcnJheT10aGlzLnN0YW5kYXJkKGFycmF5LGtleSk7dmFyIHBvcz0wO3doaWxlKHBvczxhcnJheS5sZW5ndGgpe3ZhciBzdW09MDt2YXIgaT0wO2ZvcihpPTA7YXJyYXlbcG9zK2krMV0mJihhcnJheVtwb3MraV1ba2V5XT09PWFycmF5W3BvcytpKzFdW2tleV0pO2krKyl7c3VtKz1hcnJheVtwb3MraV1bJ3JhbmsnXTt9CnN1bSs9YXJyYXlbcG9zK2ldWydyYW5rJ107dmFyIGVuZFBvcz1wb3MraSsxO2Zvcihwb3M7cG9zPGVuZFBvcztwb3MrKyl7YXJyYXlbcG9zXVsncmFuayddPXN1bS8oaSsxKTt9CnBvcz1lbmRQb3M7fQpyZXR1cm4gYXJyYXk7fSxyYW5rOmZ1bmN0aW9uKHgseSl7dmFyIG54PXgubGVuZ3RoLG55PXkubGVuZ3RoLGNvbWJpbmVkPVtdLHJhbmtlZDt3aGlsZShueC0tKXtjb21iaW5lZC5wdXNoKHtzZXQ6J3gnLHZhbDp4W254XX0pO30Kd2hpbGUobnktLSl7Y29tYmluZWQucHVzaCh7c2V0Oid5Jyx2YWw6eVtueV19KTt9CnJhbmtlZD10aGlzLmZyYWN0aW9uYWwoY29tYmluZWQsJ3ZhbCcpO3JldHVybiByYW5rZWR9fTt2YXIgZXJmPWZ1bmN0aW9uIGVyZih4KXt2YXIgY29mPVstMS4zMDI2NTM3MTk3ODE3MDk0LDYuNDE5Njk3OTIzNTY0OTAyNmUtMSwxLjk0NzY0NzMyMDQxODU4MzZlLTIsLTkuNTYxNTE0Nzg2ODA4NjMxZS0zLC05LjQ2NTk1MzQ0NDgyMDM2ZS00LDMuNjY4Mzk0OTc4NTI3NjFlLTQsNC4yNTIzMzI0ODA2OTA3ZS01LC0yLjAyNzg1NzgxMTI1MzRlLTUsLTEuNjI0MjkwMDA0NjQ3ZS02LDEuMzAzNjU1ODM1NTgwZS02LDEuNTYyNjQ0MTcyMmUtOCwtOC41MjM4MDk1OTE1ZS04LDYuNTI5MDU0NDM5ZS05LDUuMDU5MzQzNDk1ZS05LC05LjkxMzY0MTU2ZS0xMCwtMi4yNzM2NTEyMmUtMTAsOS42NDY3OTExZS0xMSwyLjM5NDAzOGUtMTIsLTYuODg2MDI3ZS0xMiw4Ljk0NDg3ZS0xMywzLjEzMDkyZS0xMywtMS4xMjcwOGUtMTMsMy44MWUtMTYsNy4xMDZlLTE1LC0xLjUyM2UtMTUsLTkuNGUtMTcsMS4yMWUtMTYsLTIuOGUtMTddO3ZhciBqPWNvZi5sZW5ndGgtMTt2YXIgaXNuZWc9ZmFsc2U7dmFyIGQ9MDt2YXIgZGQ9MDt2YXIgdCx0eSx0bXAscmVzO2lmKHg8MCl7eD0teDtpc25lZz10cnVlO30KdD0yLygyK3gpO3R5PTQqdC0yO2Zvcig7aj4wO2otLSl7dG1wPWQ7ZD10eSpkLWRkK2NvZltqXTtkZD10bXA7fQpyZXM9dCpNYXRoLmV4cCgteCp4KzAuNSooY29mWzBdK3R5KmQpLWRkKTtyZXR1cm4gaXNuZWc/cmVzLTE6MS1yZXM7fTt2YXIgZG5vcm09ZnVuY3Rpb24oeCxtZWFuLHN0ZCl7cmV0dXJuIDAuNSooMStlcmYoKHgtbWVhbikvTWF0aC5zcXJ0KDIqc3RkKnN0ZCkpKTt9CnZhciBzdGF0aXN0aWM9ZnVuY3Rpb24oeCx5KXt2YXIgcmFua2VkPXJhbmsucmFuayh4LHkpLG5yPXJhbmtlZC5sZW5ndGgsbng9eC5sZW5ndGgsbnk9eS5sZW5ndGgscmFua3N1bXM9e3g6MCx5OjB9LGk9MCx0PTAsbnQ9MSx0Y2YsdXgsdXk7d2hpbGUoaTxucil7aWYoaT4wKXtpZihyYW5rZWRbaV0udmFsPT1yYW5rZWRbaS0xXS52YWwpe250Kys7fWVsc2V7aWYobnQ+MSl7dCs9TWF0aC5wb3cobnQsMyktbnQKbnQ9MTt9fX0KcmFua3N1bXNbcmFua2VkW2ldLnNldF0rPXJhbmtlZFtpXS5yYW5rCmkrKzt9CnRjZj0xLSh0LyhNYXRoLnBvdyhuciwzKS1ucikpCnV4PW54Km55KyhueCoobngrMSkvMiktcmFua3N1bXMueDt1eT1ueCpueS11eDtyZXR1cm57dGNmOnRjZix1eDp1eCx1eTp1eSxiaWc6TWF0aC5tYXgodXgsdXkpLHNtYWxsOk1hdGgubWluKHV4LHV5KX19CmV4cG9ydHMudGVzdD1mdW5jdGlvbih4LHksYWx0LGNvcnIpe2FsdD10eXBlb2YgYWx0IT09J3VuZGVmaW5lZCc/YWx0Oid0d28tc2lkZWQnO2NvcnI9dHlwZW9mIGNvcnIhPT0ndW5kZWZpbmVkJz9jb3JyOnRydWU7dmFyIG54PXgubGVuZ3RoLG55PXkubGVuZ3RoLGY9MSx1LG11LHN0ZCx6LHA7dT1zdGF0aXN0aWMoeCx5KTtpZihjb3JyKXttdT0obngqbnkvMikrMC41O31lbHNle211PW54Km55LzI7fQpzdGQ9TWF0aC5zcXJ0KHUudGNmKm54Km55KihueCtueSsxKS8xMik7aWYoYWx0PT0nbGVzcycpe3o9KHUudXgtbXUpL3N0ZDt9ZWxzZSBpZihhbHQ9PSdncmVhdGVyJyl7ej0odS51eS1tdSkvc3RkO31lbHNlIGlmKGFsdD09J3R3by1zaWRlZCcpe3o9TWF0aC5hYnMoKHUuYmlnLW11KS9zdGQpO31lbHNle2NvbnNvbGUubG9nKCdVbmtub3duIGFsdGVybmF0aXZlIGFyZ3VtZW50Jyk7fQppZihhbHQ9PSd0d28tc2lkZWQnKXtmPTI7fQpwPWRub3JtKC16LDAsMSkqZjtyZXR1cm57VTp1LnNtYWxsLHA6cH07fX0pKHR5cGVvZiBleHBvcnRzPT09J3VuZGVmaW5lZCc/dGhpc1snbWFubndoaXRuZXl1J109e306ZXhwb3J0cyk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbihnbG9iYWwpe2lmKHRyLmlzTm9kZSl7Y29uc3QgbXd1QWJzUGF0aD1IVE1MSW1wb3J0c0xvYWRlci5ocmVmVG9BYnNvbHV0ZVBhdGgoJy9tYW5ud2hpdG5leXUuanMnKTtjb25zdCBtd3VNb2R1bGU9cmVxdWlyZShtd3VBYnNQYXRoKTtmb3IoY29uc3QgZXhwb3J0TmFtZSBpbiBtd3VNb2R1bGUpe2dsb2JhbFtleHBvcnROYW1lXT1td3VNb2R1bGVbZXhwb3J0TmFtZV07fX19KSh0aGlzKTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtjb25zdCBTdGF0aXN0aWNzPXt9O1N0YXRpc3RpY3MuZGl2aWRlSWZQb3NzaWJsZU9yWmVybz1mdW5jdGlvbihudW1lcmF0b3IsZGVub21pbmF0b3Ipe2lmKGRlbm9taW5hdG9yPT09MClyZXR1cm4gMDtyZXR1cm4gbnVtZXJhdG9yL2Rlbm9taW5hdG9yO307U3RhdGlzdGljcy5zdW09ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtjb25zdCBmdW5jPW9wdF9mdW5jfHwoeD0+eCk7bGV0IHJldD0wO2xldCBpPTA7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe3JldCs9ZnVuYy5jYWxsKG9wdF90aGlzLGVsdCxpKyspO30KcmV0dXJuIHJldDt9O1N0YXRpc3RpY3MubWVhbj1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtsZXQgc3VtPTA7bGV0IGk9MDtmb3IoY29uc3QgZWx0IG9mIGFyeSl7c3VtKz1mdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKyk7fQppZihpPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBzdW0vaTt9O1N0YXRpc3RpY3MuZ2VvbWV0cmljTWVhbj1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtsZXQgaT0wO2xldCBsb2dzdW09MDtmb3IoY29uc3QgZWx0IG9mIGFyeSl7Y29uc3QgeD1mdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKyk7aWYoeDw9MClyZXR1cm4gMDtsb2dzdW0rPU1hdGgubG9nKE1hdGguYWJzKHgpKTt9CmlmKGk9PT0wKXJldHVybiAxO3JldHVybiBNYXRoLmV4cChsb2dzdW0vaSk7fTtTdGF0aXN0aWNzLndlaWdodGVkTWVhbj1mdW5jdGlvbihhcnksd2VpZ2h0Q2FsbGJhY2ssb3B0X3ZhbHVlQ2FsbGJhY2ssb3B0X3RoaXMpe2NvbnN0IHZhbHVlQ2FsbGJhY2s9b3B0X3ZhbHVlQ2FsbGJhY2t8fCh4PT54KTtsZXQgbnVtZXJhdG9yPTA7bGV0IGRlbm9taW5hdG9yPTA7bGV0IGk9LTE7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe2krKztjb25zdCB2YWx1ZT12YWx1ZUNhbGxiYWNrLmNhbGwob3B0X3RoaXMsZWx0LGkpO2lmKHZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHdlaWdodD13ZWlnaHRDYWxsYmFjay5jYWxsKG9wdF90aGlzLGVsdCxpLHZhbHVlKTtudW1lcmF0b3IrPXdlaWdodCp2YWx1ZTtkZW5vbWluYXRvcis9d2VpZ2h0O30KaWYoZGVub21pbmF0b3I9PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG51bWVyYXRvci9kZW5vbWluYXRvcjt9O1N0YXRpc3RpY3MudmFyaWFuY2U9ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtpZihhcnkubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKGFyeS5sZW5ndGg9PT0xKXJldHVybiAwO2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtjb25zdCBtZWFuPVN0YXRpc3RpY3MubWVhbihhcnksZnVuYyxvcHRfdGhpcyk7Y29uc3Qgc3VtT2ZTcXVhcmVkRGlzdGFuY2VzPVN0YXRpc3RpY3Muc3VtKGFyeSxmdW5jdGlvbihkLGkpe2NvbnN0IHY9ZnVuYy5jYWxsKHRoaXMsZCxpKS1tZWFuO3JldHVybiB2KnY7fSxvcHRfdGhpcyk7cmV0dXJuIHN1bU9mU3F1YXJlZERpc3RhbmNlcy8oYXJ5Lmxlbmd0aC0xKTt9O1N0YXRpc3RpY3Muc3RkZGV2PWZ1bmN0aW9uKGFyeSxvcHRfZnVuYyxvcHRfdGhpcyl7aWYoYXJ5Lmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gTWF0aC5zcXJ0KFN0YXRpc3RpY3MudmFyaWFuY2UoYXJ5LG9wdF9mdW5jLG9wdF90aGlzKSk7fTtTdGF0aXN0aWNzLm1heD1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtsZXQgcmV0PS1JbmZpbml0eTtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtyZXQ9TWF0aC5tYXgocmV0LGZ1bmMuY2FsbChvcHRfdGhpcyxlbHQsaSsrKSk7fQpyZXR1cm4gcmV0O307U3RhdGlzdGljcy5taW49ZnVuY3Rpb24oYXJ5LG9wdF9mdW5jLG9wdF90aGlzKXtjb25zdCBmdW5jPW9wdF9mdW5jfHwoeD0+eCk7bGV0IHJldD1JbmZpbml0eTtsZXQgaT0wO2Zvcihjb25zdCBlbHQgb2YgYXJ5KXtyZXQ9TWF0aC5taW4ocmV0LGZ1bmMuY2FsbChvcHRfdGhpcyxlbHQsaSsrKSk7fQpyZXR1cm4gcmV0O307U3RhdGlzdGljcy5yYW5nZT1mdW5jdGlvbihhcnksb3B0X2Z1bmMsb3B0X3RoaXMpe2NvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtjb25zdCByZXQ9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2xldCBpPTA7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe3JldC5hZGRWYWx1ZShmdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKykpO30KcmV0dXJuIHJldDt9O1N0YXRpc3RpY3MucGVyY2VudGlsZT1mdW5jdGlvbihhcnkscGVyY2VudCxvcHRfZnVuYyxvcHRfdGhpcyl7aWYoIShwZXJjZW50Pj0wJiZwZXJjZW50PD0xKSl7dGhyb3cgbmV3IEVycm9yKCdwZXJjZW50IG11c3QgYmUgWzAsMV0nKTt9CmNvbnN0IGZ1bmM9b3B0X2Z1bmN8fCh4PT54KTtjb25zdCB0bXA9bmV3IEFycmF5KGFyeS5sZW5ndGgpO2xldCBpPTA7Zm9yKGNvbnN0IGVsdCBvZiBhcnkpe3RtcFtpXT1mdW5jLmNhbGwob3B0X3RoaXMsZWx0LGkrKyk7fQp0bXAuc29ydCgoYSxiKT0+YS1iKTtjb25zdCBpZHg9TWF0aC5mbG9vcigoYXJ5Lmxlbmd0aC0xKSpwZXJjZW50KTtyZXR1cm4gdG1wW2lkeF07fTtTdGF0aXN0aWNzLm5vcm1hbGl6ZVNhbXBsZXM9ZnVuY3Rpb24oc2FtcGxlcyl7aWYoc2FtcGxlcy5sZW5ndGg9PT0wKXtyZXR1cm57bm9ybWFsaXplZF9zYW1wbGVzOnNhbXBsZXMsc2NhbGU6MS4wfTt9CnNhbXBsZXM9c2FtcGxlcy5zbGljZSgpLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS1iO30pO2NvbnN0IGxvdz1NYXRoLm1pbi5hcHBseShudWxsLHNhbXBsZXMpO2NvbnN0IGhpZ2g9TWF0aC5tYXguYXBwbHkobnVsbCxzYW1wbGVzKTtjb25zdCBuZXdMb3c9MC41L3NhbXBsZXMubGVuZ3RoO2NvbnN0IG5ld0hpZ2g9KHNhbXBsZXMubGVuZ3RoLTAuNSkvc2FtcGxlcy5sZW5ndGg7aWYoaGlnaC1sb3c9PT0wLjApe3NhbXBsZXM9QXJyYXkuYXBwbHkobnVsbCxuZXcgQXJyYXkoc2FtcGxlcy5sZW5ndGgpKS5tYXAoZnVuY3Rpb24oKXtyZXR1cm4gMC41O30pO3JldHVybntub3JtYWxpemVkX3NhbXBsZXM6c2FtcGxlcyxzY2FsZToxLjB9O30KY29uc3Qgc2NhbGU9KG5ld0hpZ2gtbmV3TG93KS8oaGlnaC1sb3cpO2ZvcihsZXQgaT0wO2k8c2FtcGxlcy5sZW5ndGg7aSsrKXtzYW1wbGVzW2ldPShzYW1wbGVzW2ldLWxvdykqc2NhbGUrbmV3TG93O30KcmV0dXJue25vcm1hbGl6ZWRfc2FtcGxlczpzYW1wbGVzLHNjYWxlfTt9O1N0YXRpc3RpY3MuZGlzY3JlcGFuY3k9ZnVuY3Rpb24oc2FtcGxlcyxvcHRfbG9jYXRpb25Db3VudCl7aWYoc2FtcGxlcy5sZW5ndGg9PT0wKXJldHVybiAwLjA7bGV0IG1heExvY2FsRGlzY3JlcGFuY3k9MDtjb25zdCBpbnZTYW1wbGVDb3VudD0xLjAvc2FtcGxlcy5sZW5ndGg7Y29uc3QgbG9jYXRpb25zPVtdO2NvbnN0IGNvdW50TGVzcz1bXTtjb25zdCBjb3VudExlc3NFcXVhbD1bXTtpZihvcHRfbG9jYXRpb25Db3VudCE9PXVuZGVmaW5lZCl7bGV0IHNhbXBsZUluZGV4PTA7Zm9yKGxldCBpPTA7aTxvcHRfbG9jYXRpb25Db3VudDtpKyspe2NvbnN0IGxvY2F0aW9uPWkvKG9wdF9sb2NhdGlvbkNvdW50LTEpO2xvY2F0aW9ucy5wdXNoKGxvY2F0aW9uKTt3aGlsZShzYW1wbGVJbmRleDxzYW1wbGVzLmxlbmd0aCYmc2FtcGxlc1tzYW1wbGVJbmRleF08bG9jYXRpb24pe3NhbXBsZUluZGV4Kz0xO30KY291bnRMZXNzLnB1c2goc2FtcGxlSW5kZXgpO3doaWxlKHNhbXBsZUluZGV4PHNhbXBsZXMubGVuZ3RoJiZzYW1wbGVzW3NhbXBsZUluZGV4XTw9bG9jYXRpb24pe3NhbXBsZUluZGV4Kz0xO30KY291bnRMZXNzRXF1YWwucHVzaChzYW1wbGVJbmRleCk7fX1lbHNle2lmKHNhbXBsZXNbMF0+MC4wKXtsb2NhdGlvbnMucHVzaCgwLjApO2NvdW50TGVzcy5wdXNoKDApO2NvdW50TGVzc0VxdWFsLnB1c2goMCk7fQpmb3IobGV0IGk9MDtpPHNhbXBsZXMubGVuZ3RoO2krKyl7bG9jYXRpb25zLnB1c2goc2FtcGxlc1tpXSk7Y291bnRMZXNzLnB1c2goaSk7Y291bnRMZXNzRXF1YWwucHVzaChpKzEpO30KaWYoc2FtcGxlc1stMV08MS4wKXtsb2NhdGlvbnMucHVzaCgxLjApO2NvdW50TGVzcy5wdXNoKHNhbXBsZXMubGVuZ3RoKTtjb3VudExlc3NFcXVhbC5wdXNoKHNhbXBsZXMubGVuZ3RoKTt9fQpsZXQgbWF4RGlmZj0wO2xldCBtaW5EaWZmPTA7Zm9yKGxldCBpPTE7aTxsb2NhdGlvbnMubGVuZ3RoO2krKyl7Y29uc3QgbGVuZ3RoPWxvY2F0aW9uc1tpXS1sb2NhdGlvbnNbaS0xXTtjb25zdCBjb3VudENsb3NlZD1jb3VudExlc3NFcXVhbFtpXS1jb3VudExlc3NbaS0xXTtjb25zdCBjb3VudE9wZW49Y291bnRMZXNzW2ldLWNvdW50TGVzc0VxdWFsW2ktMV07Y29uc3QgY291bnRDbG9zZWRJbmNyZW1lbnQ9Y291bnRMZXNzRXF1YWxbaV0tY291bnRMZXNzRXF1YWxbaS0xXTtjb25zdCBjb3VudE9wZW5JbmNyZW1lbnQ9Y291bnRMZXNzW2ldLWNvdW50TGVzc1tpLTFdO21heERpZmY9TWF0aC5tYXgoY291bnRDbG9zZWRJbmNyZW1lbnQqaW52U2FtcGxlQ291bnQtbGVuZ3RoK21heERpZmYsY291bnRDbG9zZWQqaW52U2FtcGxlQ291bnQtbGVuZ3RoKTttaW5EaWZmPU1hdGgubWluKGNvdW50T3BlbkluY3JlbWVudCppbnZTYW1wbGVDb3VudC1sZW5ndGgrbWluRGlmZixjb3VudE9wZW4qaW52U2FtcGxlQ291bnQtbGVuZ3RoKTttYXhMb2NhbERpc2NyZXBhbmN5PU1hdGgubWF4KG1heERpZmYsLW1pbkRpZmYsbWF4TG9jYWxEaXNjcmVwYW5jeSk7fQpyZXR1cm4gbWF4TG9jYWxEaXNjcmVwYW5jeTt9O1N0YXRpc3RpY3MudGltZXN0YW1wc0Rpc2NyZXBhbmN5PWZ1bmN0aW9uKHRpbWVzdGFtcHMsb3B0X2Fic29sdXRlLG9wdF9sb2NhdGlvbkNvdW50KXtpZih0aW1lc3RhbXBzLmxlbmd0aD09PTApcmV0dXJuIDAuMDtpZihvcHRfYWJzb2x1dGU9PT11bmRlZmluZWQpb3B0X2Fic29sdXRlPXRydWU7aWYoQXJyYXkuaXNBcnJheSh0aW1lc3RhbXBzWzBdKSl7Y29uc3QgcmFuZ2VEaXNjcmVwYW5jaWVzPXRpbWVzdGFtcHMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBTdGF0aXN0aWNzLnRpbWVzdGFtcHNEaXNjcmVwYW5jeShyKTt9KTtyZXR1cm4gTWF0aC5tYXguYXBwbHkobnVsbCxyYW5nZURpc2NyZXBhbmNpZXMpO30KY29uc3Qgcz1TdGF0aXN0aWNzLm5vcm1hbGl6ZVNhbXBsZXModGltZXN0YW1wcyk7Y29uc3Qgc2FtcGxlcz1zLm5vcm1hbGl6ZWRfc2FtcGxlcztjb25zdCBzYW1wbGVTY2FsZT1zLnNjYWxlO2xldCBkaXNjcmVwYW5jeT1TdGF0aXN0aWNzLmRpc2NyZXBhbmN5KHNhbXBsZXMsb3B0X2xvY2F0aW9uQ291bnQpO2NvbnN0IGludlNhbXBsZUNvdW50PTEuMC9zYW1wbGVzLmxlbmd0aDtpZihvcHRfYWJzb2x1dGU9PT10cnVlKXtkaXNjcmVwYW5jeS89c2FtcGxlU2NhbGU7fWVsc2V7ZGlzY3JlcGFuY3k9dHIuYi5tYXRoLmNsYW1wKChkaXNjcmVwYW5jeS1pbnZTYW1wbGVDb3VudCkvKDEuMC1pbnZTYW1wbGVDb3VudCksMC4wLDEuMCk7fQpyZXR1cm4gZGlzY3JlcGFuY3k7fTtTdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZUFycmF5PWZ1bmN0aW9uKHNhbXBsZXMsY291bnQpe2lmKHNhbXBsZXMubGVuZ3RoPD1jb3VudCl7cmV0dXJuIHNhbXBsZXM7fQp3aGlsZShzYW1wbGVzLmxlbmd0aD5jb3VudCl7Y29uc3QgaT1wYXJzZUludChNYXRoLnJhbmRvbSgpKnNhbXBsZXMubGVuZ3RoKTtzYW1wbGVzLnNwbGljZShpLDEpO30KcmV0dXJuIHNhbXBsZXM7fTtTdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZVN0cmVhbT1mdW5jdGlvbihzYW1wbGVzLHN0cmVhbUxlbmd0aCxuZXdFbGVtZW50LG51bVNhbXBsZXMpe2lmKHN0cmVhbUxlbmd0aDw9bnVtU2FtcGxlcyl7aWYoc2FtcGxlcy5sZW5ndGg+PXN0cmVhbUxlbmd0aCl7c2FtcGxlc1tzdHJlYW1MZW5ndGgtMV09bmV3RWxlbWVudDt9ZWxzZXtzYW1wbGVzLnB1c2gobmV3RWxlbWVudCk7fQpyZXR1cm47fQpjb25zdCBwcm9iVG9LZWVwPW51bVNhbXBsZXMvc3RyZWFtTGVuZ3RoO2lmKE1hdGgucmFuZG9tKCk+cHJvYlRvS2VlcClyZXR1cm47Y29uc3QgaW5kZXg9TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKm51bVNhbXBsZXMpO3NhbXBsZXNbaW5kZXhdPW5ld0VsZW1lbnQ7fTtTdGF0aXN0aWNzLm1lcmdlU2FtcGxlZFN0cmVhbXM9ZnVuY3Rpb24oc2FtcGxlc0Esc3RyZWFtTGVuZ3RoQSxzYW1wbGVzQixzdHJlYW1MZW5ndGhCLG51bVNhbXBsZXMpe2lmKHN0cmVhbUxlbmd0aEI8bnVtU2FtcGxlcyl7Y29uc3QgbmJFbGVtZW50cz1NYXRoLm1pbihzdHJlYW1MZW5ndGhCLHNhbXBsZXNCLmxlbmd0aCk7Zm9yKGxldCBpPTA7aTxuYkVsZW1lbnRzOysraSl7U3RhdGlzdGljcy51bmlmb3JtbHlTYW1wbGVTdHJlYW0oc2FtcGxlc0Esc3RyZWFtTGVuZ3RoQStpKzEsc2FtcGxlc0JbaV0sbnVtU2FtcGxlcyk7fQpyZXR1cm47fQppZihzdHJlYW1MZW5ndGhBPG51bVNhbXBsZXMpe2NvbnN0IG5iRWxlbWVudHM9TWF0aC5taW4oc3RyZWFtTGVuZ3RoQSxzYW1wbGVzQS5sZW5ndGgpO2NvbnN0IHRlbXBTYW1wbGVzPXNhbXBsZXNCLnNsaWNlKCk7Zm9yKGxldCBpPTA7aTxuYkVsZW1lbnRzOysraSl7U3RhdGlzdGljcy51bmlmb3JtbHlTYW1wbGVTdHJlYW0odGVtcFNhbXBsZXMsc3RyZWFtTGVuZ3RoQitpKzEsc2FtcGxlc0FbaV0sbnVtU2FtcGxlcyk7fQpmb3IobGV0IGk9MDtpPHRlbXBTYW1wbGVzLmxlbmd0aDsrK2kpe3NhbXBsZXNBW2ldPXRlbXBTYW1wbGVzW2ldO30KcmV0dXJuO30KY29uc3QgbmJFbGVtZW50cz1NYXRoLm1pbihudW1TYW1wbGVzLHNhbXBsZXNCLmxlbmd0aCk7Y29uc3QgcHJvYk9mU3dhcHBpbmc9c3RyZWFtTGVuZ3RoQi8oc3RyZWFtTGVuZ3RoQStzdHJlYW1MZW5ndGhCKTtmb3IobGV0IGk9MDtpPG5iRWxlbWVudHM7KytpKXtpZihNYXRoLnJhbmRvbSgpPHByb2JPZlN3YXBwaW5nKXtzYW1wbGVzQVtpXT1zYW1wbGVzQltpXTt9fX07ZnVuY3Rpb24gRGlzdHJpYnV0aW9uKCl7fQpEaXN0cmlidXRpb24ucHJvdG90eXBlPXtjb21wdXRlRGVuc2l0eSh4KXt0aHJvdyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxjb21wdXRlUGVyY2VudGlsZSh4KXt0aHJvdyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxjb21wdXRlQ29tcGxlbWVudGFyeVBlcmNlbnRpbGUoeCl7cmV0dXJuIDEtdGhpcy5jb21wdXRlUGVyY2VudGlsZSh4KTt9LGdldCBtZWFuKCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IG1vZGUoKXt0aHJvdyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgbWVkaWFuKCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IHN0YW5kYXJkRGV2aWF0aW9uKCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IHZhcmlhbmNlKCl7dGhyb3cgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O1N0YXRpc3RpY3MuVW5pZm9ybURpc3RyaWJ1dGlvbj1mdW5jdGlvbihvcHRfcmFuZ2Upe2lmKCFvcHRfcmFuZ2Upb3B0X3JhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLDEpO3RoaXMucmFuZ2U9b3B0X3JhbmdlO307U3RhdGlzdGljcy5Vbmlmb3JtRGlzdHJpYnV0aW9uLnByb3RvdHlwZT17X19wcm90b19fOkRpc3RyaWJ1dGlvbi5wcm90b3R5cGUsY29tcHV0ZURlbnNpdHkoeCl7cmV0dXJuIDEvdGhpcy5yYW5nZS5yYW5nZTt9LGNvbXB1dGVQZXJjZW50aWxlKHgpe3JldHVybiB0ci5iLm1hdGgubm9ybWFsaXplKHgsdGhpcy5yYW5nZS5taW4sdGhpcy5yYW5nZS5tYXgpO30sZ2V0IG1lYW4oKXtyZXR1cm4gdGhpcy5yYW5nZS5jZW50ZXI7fSxnZXQgbW9kZSgpe3JldHVybiB1bmRlZmluZWQ7fSxnZXQgbWVkaWFuKCl7cmV0dXJuIHRoaXMubWVhbjt9LGdldCBzdGFuZGFyZERldmlhdGlvbigpe3JldHVybiBNYXRoLnNxcnQodGhpcy52YXJpYW5jZSk7fSxnZXQgdmFyaWFuY2UoKXtyZXR1cm4gTWF0aC5wb3codGhpcy5yYW5nZS5yYW5nZSwyKS8xMjt9fTtTdGF0aXN0aWNzLk5vcm1hbERpc3RyaWJ1dGlvbj1mdW5jdGlvbihvcHRfbWVhbixvcHRfdmFyaWFuY2Upe3RoaXMubWVhbl89b3B0X21lYW58fDA7dGhpcy52YXJpYW5jZV89b3B0X3ZhcmlhbmNlfHwxO3RoaXMuc3RhbmRhcmREZXZpYXRpb25fPU1hdGguc3FydCh0aGlzLnZhcmlhbmNlXyk7fTtTdGF0aXN0aWNzLk5vcm1hbERpc3RyaWJ1dGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzpEaXN0cmlidXRpb24ucHJvdG90eXBlLGNvbXB1dGVEZW5zaXR5KHgpe2NvbnN0IHNjYWxlPSgxLjAvKHRoaXMuc3RhbmRhcmREZXZpYXRpb24qTWF0aC5zcXJ0KDIuMCpNYXRoLlBJKSkpO2NvbnN0IGV4cG9uZW50PS1NYXRoLnBvdyh4LXRoaXMubWVhbiwyKS8oMi4wKnRoaXMudmFyaWFuY2UpO3JldHVybiBzY2FsZSpNYXRoLmV4cChleHBvbmVudCk7fSxjb21wdXRlUGVyY2VudGlsZSh4KXtjb25zdCBzdGFuZGFyZGl6ZWRYPSgoeC10aGlzLm1lYW4pL01hdGguc3FydCgyLjAqdGhpcy52YXJpYW5jZSkpO3JldHVybigxLjArdHIuYi5tYXRoLmVyZihzdGFuZGFyZGl6ZWRYKSkvMi4wO30sZ2V0IG1lYW4oKXtyZXR1cm4gdGhpcy5tZWFuXzt9LGdldCBtZWRpYW4oKXtyZXR1cm4gdGhpcy5tZWFuO30sZ2V0IG1vZGUoKXtyZXR1cm4gdGhpcy5tZWFuO30sZ2V0IHN0YW5kYXJkRGV2aWF0aW9uKCl7cmV0dXJuIHRoaXMuc3RhbmRhcmREZXZpYXRpb25fO30sZ2V0IHZhcmlhbmNlKCl7cmV0dXJuIHRoaXMudmFyaWFuY2VfO319O1N0YXRpc3RpY3MuTG9nTm9ybWFsRGlzdHJpYnV0aW9uPWZ1bmN0aW9uKG9wdF9sb2NhdGlvbixvcHRfc2hhcGUpe3RoaXMubm9ybWFsRGlzdHJpYnV0aW9uXz1uZXcgU3RhdGlzdGljcy5Ob3JtYWxEaXN0cmlidXRpb24ob3B0X2xvY2F0aW9uLE1hdGgucG93KG9wdF9zaGFwZXx8MSwyKSk7fTtTdGF0aXN0aWNzLkxvZ05vcm1hbERpc3RyaWJ1dGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzpTdGF0aXN0aWNzLk5vcm1hbERpc3RyaWJ1dGlvbi5wcm90b3R5cGUsY29tcHV0ZURlbnNpdHkoeCl7cmV0dXJuIHRoaXMubm9ybWFsRGlzdHJpYnV0aW9uXy5jb21wdXRlRGVuc2l0eShNYXRoLmxvZyh4KSkveDt9LGNvbXB1dGVQZXJjZW50aWxlKHgpe3JldHVybiB0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8uY29tcHV0ZVBlcmNlbnRpbGUoTWF0aC5sb2coeCkpO30sZ2V0IG1lYW4oKXtyZXR1cm4gTWF0aC5leHAodGhpcy5ub3JtYWxEaXN0cmlidXRpb25fLm1lYW4rCih0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8udmFyaWFuY2UvMikpO30sZ2V0IHZhcmlhbmNlKCl7Y29uc3Qgbm09dGhpcy5ub3JtYWxEaXN0cmlidXRpb25fLm1lYW47Y29uc3QgbnY9dGhpcy5ub3JtYWxEaXN0cmlidXRpb25fLnZhcmlhbmNlO3JldHVybihNYXRoLmV4cCgyKihubStudikpLQpNYXRoLmV4cCgyKm5tK252KSk7fSxnZXQgc3RhbmRhcmREZXZpYXRpb24oKXtyZXR1cm4gTWF0aC5zcXJ0KHRoaXMudmFyaWFuY2UpO30sZ2V0IG1lZGlhbigpe3JldHVybiBNYXRoLmV4cCh0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8ubWVhbik7fSxnZXQgbW9kZSgpe3JldHVybiBNYXRoLmV4cCh0aGlzLm5vcm1hbERpc3RyaWJ1dGlvbl8ubWVhbi0KdGhpcy5ub3JtYWxEaXN0cmlidXRpb25fLnZhcmlhbmNlKTt9fTtTdGF0aXN0aWNzLkxvZ05vcm1hbERpc3RyaWJ1dGlvbi5mcm9tTWVkaWFuQW5kRGltaW5pc2hpbmdSZXR1cm5zPWZ1bmN0aW9uKG1lZGlhbixkaW1pbmlzaGluZ1JldHVybnMpe2RpbWluaXNoaW5nUmV0dXJucz1NYXRoLmxvZyhkaW1pbmlzaGluZ1JldHVybnMvbWVkaWFuKTtjb25zdCBzaGFwZT1NYXRoLnNxcnQoMS0zKmRpbWluaXNoaW5nUmV0dXJucy0KTWF0aC5zcXJ0KE1hdGgucG93KGRpbWluaXNoaW5nUmV0dXJucy0zLDIpLTgpKS8yO2NvbnN0IGxvY2F0aW9uPU1hdGgubG9nKG1lZGlhbik7cmV0dXJuIG5ldyBTdGF0aXN0aWNzLkxvZ05vcm1hbERpc3RyaWJ1dGlvbihsb2NhdGlvbixzaGFwZSk7fTtTdGF0aXN0aWNzLkRFRkFVTFRfQUxQSEE9MC4wMTtTdGF0aXN0aWNzLk1BWF9TVUdHRVNURURfU0FNUExFX1NJWkU9MjA7U3RhdGlzdGljcy5TaWduaWZpY2FuY2U9e1NJR05JRklDQU5UOidSRUpFQ1QnLElOU0lHTklGSUNBTlQ6J0ZBSUxfVE9fUkVKRUNUJyxORUVEX01PUkVfREFUQTonTkVFRF9NT1JFX0RBVEEnLERPTlRfQ0FSRTonRE9OVF9DQVJFJyx9O2NsYXNzIEh5cG90aGVzaXNUZXN0UmVzdWx0e2NvbnN0cnVjdG9yKHAsdSxuZWVkTW9yZURhdGEsb3B0X2FscGhhKXt0aGlzLnBfPXA7dGhpcy51Xz11O3RoaXMubmVlZE1vcmVEYXRhXz1uZWVkTW9yZURhdGE7dGhpcy5jb21wYXJlKG9wdF9hbHBoYSk7fQpnZXQgcCgpe3JldHVybiB0aGlzLnBfO30KZ2V0IFUoKXtyZXR1cm4gdGhpcy51Xzt9CmdldCBzaWduaWZpY2FuY2UoKXtyZXR1cm4gdGhpcy5zaWduaWZpY2FuY2VfO30KY29tcGFyZShvcHRfYWxwaGEpe2NvbnN0IGFscGhhPW9wdF9hbHBoYXx8U3RhdGlzdGljcy5ERUZBVUxUX0FMUEhBO2lmKHRoaXMucDxhbHBoYSl7dGhpcy5zaWduaWZpY2FuY2VfPVN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLlNJR05JRklDQU5UO31lbHNlIGlmKHRoaXMubmVlZE1vcmVEYXRhXyl7dGhpcy5zaWduaWZpY2FuY2VfPVN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLk5FRURfTU9SRV9EQVRBO31lbHNle3RoaXMuc2lnbmlmaWNhbmNlXz1TdGF0aXN0aWNzLlNpZ25pZmljYW5jZS5JTlNJR05JRklDQU5UO30KcmV0dXJuIHRoaXMuc2lnbmlmaWNhbmNlXzt9CmFzRGljdCgpe3JldHVybntwOnRoaXMucCxVOnRoaXMuVSxzaWduaWZpY2FuY2U6dGhpcy5zaWduaWZpY2FuY2UsfTt9fQpTdGF0aXN0aWNzLm13dT1mdW5jdGlvbihhLGIsb3B0X2FscGhhLG9wdF9yZXFTYW1wbGVTaXplKXtjb25zdCByZXN1bHQ9bWFubndoaXRuZXl1LnRlc3QoYSxiKTtjb25zdCBuZWVkTW9yZURhdGE9b3B0X3JlcVNhbXBsZVNpemUmJk1hdGgubWluKGEubGVuZ3RoLGIubGVuZ3RoKTxvcHRfcmVxU2FtcGxlU2l6ZTtyZXR1cm4gbmV3IEh5cG90aGVzaXNUZXN0UmVzdWx0KHJlc3VsdC5wLHJlc3VsdC5VLG5lZWRNb3JlRGF0YSxvcHRfYWxwaGEpO307cmV0dXJue1N0YXRpc3RpY3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgR1JFRUtfU01BTExfTEVUVEVSX01VPVN0cmluZy5mcm9tQ2hhckNvZGUoOTU2KTtjb25zdCBTRUNPTkRTX0lOX0FfTUlOVVRFPTYwO2NvbnN0IFNFQ09ORFNfSU5fQU5fSE9VUj1TRUNPTkRTX0lOX0FfTUlOVVRFKjYwO2NvbnN0IFNFQ09ORFNfSU5fQV9EQVk9U0VDT05EU19JTl9BTl9IT1VSKjI0O2NvbnN0IFNFQ09ORFNfSU5fQV9XRUVLPVNFQ09ORFNfSU5fQV9EQVkqNztjb25zdCBTRUNPTkRTX0lOX0FfWUVBUj1TRUNPTkRTX0lOX0FfREFZKjM2NS4yNDIyO2NvbnN0IFNFQ09ORFNfSU5fQV9NT05USD1TRUNPTkRTX0lOX0FfWUVBUi8xMjtjb25zdCBVbml0UHJlZml4U2NhbGU9e307Y29uc3QgVW5pdFNjYWxlPXt9O2Z1bmN0aW9uIGRlZmluZVVuaXRQcmVmaXhTY2FsZShuYW1lLHByZWZpeGVzKXtpZihVbml0UHJlZml4U2NhbGVbbmFtZV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5pdCBwcmVmaXggc2NhbGUgXCcnK25hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQppZihwcmVmaXhlcy5BVVRPIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBcJ0FVVE9cJyB1bml0IHByZWZpeCBpcyBub3Qgc3VwcG9ydGVkIGZvciB1bml0JysncHJlZml4IHNjYWxlcyBhbmQgY2Fubm90IGJlIGFkZGVkIHRvIHNjYWxlIFwnJytuYW1lKydcJycpO30KVW5pdFByZWZpeFNjYWxlW25hbWVdPXByZWZpeGVzO30KVW5pdFNjYWxlLmRlZmluZVVuaXRTY2FsZT1mdW5jdGlvbihuYW1lLHVuaXRTY2FsZSl7aWYoVW5pdFNjYWxlW25hbWVdIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgc2NhbGUgXCcnK25hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQppZih1bml0U2NhbGUuQVVUTyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdcJ0FVVE9cJyB1bml0IHNjYWxlIHdpbGwgYmUgYWRkZWQgYXV0b21hdGljYWxseSAnKydmb3IgdW5pdCBzY2FsZSBcJycrbmFtZSsnXCcnKTt9CnVuaXRTY2FsZS5BVVRPPU9iamVjdC52YWx1ZXModW5pdFNjYWxlKTt1bml0U2NhbGUuQVVUTy5zb3J0KChhLGIpPT5hLnZhbHVlLWIudmFsdWUpO2lmKG5hbWUpVW5pdFNjYWxlW25hbWVdPXVuaXRTY2FsZTtyZXR1cm4gdW5pdFNjYWxlO307ZnVuY3Rpb24gZGVmaW5lUHJlZml4U2NhbGVGcm9tVW5pdFNjYWxlKHByZWZpeE5hbWUsdW5pdFNjYWxlKXtpZighdW5pdFNjYWxlKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgUHJlZml4U2NhbGUgd2l0aG91dCBhIHVuaXQgc2NhbGUuJyk7fQpjb25zdCBwcmVmaXhTY2FsZT17fTtmb3IoY29uc3RbY3VyUHJlZml4LGN1clNjYWxlXW9mIE9iamVjdC5lbnRyaWVzKHVuaXRTY2FsZSkpe2lmKGN1clByZWZpeD09PSdBVVRPJyl7Y29udGludWU7fQppZihjdXJTY2FsZS5zeW1ib2w9PT11bmRlZmluZWR8fCFjdXJTY2FsZS52YWx1ZSl7dGhyb3cgbmV3IEVycm9yKGBDYW5ub3QgY3JlYXRlIFByZWZpeFNjYWxlIGZyb20gbWFsZm9ybWVkIHVuaXQgJHtjdXJTY2FsZX0uYCk7fQpwcmVmaXhTY2FsZVtjdXJQcmVmaXhdPXt2YWx1ZTpjdXJTY2FsZS52YWx1ZSxzeW1ib2w6Y3VyU2NhbGUuc3ltYm9sfTt9CnJldHVybiBkZWZpbmVVbml0UHJlZml4U2NhbGUocHJlZml4TmFtZSxwcmVmaXhTY2FsZSk7fQpVbml0U2NhbGUuZGVmaW5lVW5pdFNjYWxlRnJvbVByZWZpeFNjYWxlPWZ1bmN0aW9uKGJhc2VTeW1ib2wsYmFzZU5hbWUscHJlZml4U2NhbGUsb3B0X3NjYWxlTmFtZSl7aWYoYmFzZVN5bWJvbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaXRTY2FsZSB3aXRoIHVuZGVmaW5lZCBiYXNlU3ltYm9sLicpO30KaWYoIWJhc2VOYW1lKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBjcmVhdGUgVW5pdFNjYWxlIHdpdGhvdXQgYSBiYXNlTmFtZS4nKTt9CmlmKCFwcmVmaXhTY2FsZSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY3JlYXRlIFVuaXRTY2FsZSB3aXRob3V0IGEgcHJlZml4IHNjYWxlLicpO30KY29uc3QgdW5pdFNjYWxlPXt9O2Zvcihjb25zdCBjdXJQcmVmaXggb2YgT2JqZWN0LmtleXMocHJlZml4U2NhbGUpKXtjb25zdCBjdXJTY2FsZT1wcmVmaXhTY2FsZVtjdXJQcmVmaXhdO2lmKGN1clNjYWxlLnN5bWJvbD09PXVuZGVmaW5lZHx8IWN1clNjYWxlLnZhbHVlKXt0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCBjb252ZXJ0IFByZWZpeFNjYWxlIHdpdGggbWFsZm9ybWVkIHByZWZpeCAke2N1clNjYWxlfS5gKTt9CmNvbnN0IG5hbWU9Y3VyUHJlZml4PT09J05PTkUnP2Jhc2VOYW1lOmAke2N1clByZWZpeH1fJHtiYXNlTmFtZX1gO3VuaXRTY2FsZVtuYW1lXT17dmFsdWU6Y3VyU2NhbGUudmFsdWUsc3ltYm9sOmN1clNjYWxlLnN5bWJvbCtiYXNlU3ltYm9sLGJhc2VTeW1ib2x9O30KcmV0dXJuIFVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGUob3B0X3NjYWxlTmFtZSx1bml0U2NhbGUpO307ZnVuY3Rpb24gY29udmVydFVuaXQodmFsdWUsZnJvbVNjYWxlLHRvU2NhbGUpe2lmKHZhbHVlPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgZnJvbVNjYWxlQmFzZT1mcm9tU2NhbGUuYmFzZVN5bWJvbDtjb25zdCB0b1NjYWxlQmFzZT10b1NjYWxlLmJhc2VTeW1ib2w7aWYoZnJvbVNjYWxlQmFzZSE9PXVuZGVmaW5lZCYmdG9TY2FsZUJhc2UhPT11bmRlZmluZWQmJmZyb21TY2FsZUJhc2UhPT10b1NjYWxlQmFzZSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29udmVydCBiZXR3ZWVuIHVuaXRzIHdpdGggZGlmZmVyZW50IGJhc2Ugc3ltYm9scy4nKTt9CnJldHVybiB2YWx1ZSooZnJvbVNjYWxlLnZhbHVlL3RvU2NhbGUudmFsdWUpO30KZGVmaW5lVW5pdFByZWZpeFNjYWxlKCdCSU5BUlknLHtOT05FOnt2YWx1ZTpNYXRoLnBvdygxMDI0LDApLHN5bWJvbDonJ30sS0lCSTp7dmFsdWU6TWF0aC5wb3coMTAyNCwxKSxzeW1ib2w6J0tpJ30sTUVCSTp7dmFsdWU6TWF0aC5wb3coMTAyNCwyKSxzeW1ib2w6J01pJ30sR0lCSTp7dmFsdWU6TWF0aC5wb3coMTAyNCwzKSxzeW1ib2w6J0dpJ30sVEVCSTp7dmFsdWU6TWF0aC5wb3coMTAyNCw0KSxzeW1ib2w6J1RpJ319KTtkZWZpbmVVbml0UHJlZml4U2NhbGUoJ01FVFJJQycse05BTk86e3ZhbHVlOjFlLTksc3ltYm9sOiduJ30sTUlDUk86e3ZhbHVlOjFlLTYsc3ltYm9sOkdSRUVLX1NNQUxMX0xFVFRFUl9NVX0sTUlMTEk6e3ZhbHVlOjFlLTMsc3ltYm9sOidtJ30sTk9ORTp7dmFsdWU6MSxzeW1ib2w6Jyd9LEtJTE86e3ZhbHVlOjFlMyxzeW1ib2w6J2snfSxNRUdBOnt2YWx1ZToxZTYsc3ltYm9sOidNJ30sR0lHQTp7dmFsdWU6MWU5LHN5bWJvbDonRyd9fSk7VW5pdFNjYWxlLmRlZmluZVVuaXRTY2FsZSgnVElNRScse05BTk9fU0VDOnt2YWx1ZToxZS05LHN5bWJvbDonbnMnLGJhc2VTeW1ib2w6J3MnfSxNSUNST19TRUM6e3ZhbHVlOjFlLTYsc3ltYm9sOkdSRUVLX1NNQUxMX0xFVFRFUl9NVSsncycsYmFzZVN5bWJvbDoncyd9LE1JTExJX1NFQzp7dmFsdWU6MWUtMyxzeW1ib2w6J21zJyxiYXNlU3ltYm9sOidzJ30sU0VDOnt2YWx1ZToxLHN5bWJvbDoncycsYmFzZVN5bWJvbDoncyd9LE1JTlVURTp7dmFsdWU6U0VDT05EU19JTl9BX01JTlVURSxzeW1ib2w6J21pbicsYmFzZVN5bWJvbDoncyd9LEhPVVI6e3ZhbHVlOlNFQ09ORFNfSU5fQU5fSE9VUixzeW1ib2w6J2hyJyxiYXNlU3ltYm9sOidzJ30sREFZOnt2YWx1ZTpTRUNPTkRTX0lOX0FfREFZLHN5bWJvbDonZGF5cycsYmFzZVN5bWJvbDoncyd9LFdFRUs6e3ZhbHVlOlNFQ09ORFNfSU5fQV9XRUVLLHN5bWJvbDond2Vla3MnLGJhc2VTeW1ib2w6J3MnfSxNT05USDp7dmFsdWU6U0VDT05EU19JTl9BX01PTlRILHN5bWJvbDonbW9udGhzJyxiYXNlU3ltYm9sOidzJ30sWUVBUjp7dmFsdWU6U0VDT05EU19JTl9BX1lFQVIsc3ltYm9sOid5ZWFycycsYmFzZVN5bWJvbDoncyd9fSk7VW5pdFNjYWxlLmRlZmluZVVuaXRTY2FsZUZyb21QcmVmaXhTY2FsZSgnQicsJ0JZVEUnLFVuaXRQcmVmaXhTY2FsZS5CSU5BUlksJ01FTU9SWScpO2RlZmluZVByZWZpeFNjYWxlRnJvbVVuaXRTY2FsZSgnREFUQV9TSVpFJyxVbml0U2NhbGUuTUVNT1JZKTtVbml0U2NhbGUuZGVmaW5lVW5pdFNjYWxlRnJvbVByZWZpeFNjYWxlKCcvcycsJ1NFQ09ORFMnLFVuaXRQcmVmaXhTY2FsZS5EQVRBX1NJWkUsJ0JBTkRXSURUSF9CWVRFUycpO3JldHVybntVbml0UHJlZml4U2NhbGUsVW5pdFNjYWxlLGNvbnZlcnRVbml0LEdSRUVLX1NNQUxMX0xFVFRFUl9NVSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjb25zdCBtc0Rpc3BsYXlNb2RlPXtzY2FsZToxZS0zLHN1ZmZpeDonbXMnLHJvdW5kZWRMZXNzKGEsYil7cmV0dXJuIE1hdGgucm91bmQoYSoxMDAwKTxNYXRoLnJvdW5kKGIqMTAwMCk7fSxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3RyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDXSxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6Myx9fTtjb25zdCBuc0Rpc3BsYXlNb2RlPXtzY2FsZToxZS05LHN1ZmZpeDonbnMnLHJvdW5kZWRMZXNzKGEsYil7cmV0dXJuIE1hdGgucm91bmQoYSoxMDAwMDAwKTxNYXRoLnJvdW5kKGIqMTAwMDAwMCk7fSxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3RyLmIuVW5pdFNjYWxlLlRJTUUuTkFOT19TRUNdLG1heGltdW1GcmFjdGlvbkRpZ2l0czowfX07Y29uc3QgVGltZURpc3BsYXlNb2Rlcz17bnM6bnNEaXNwbGF5TW9kZSxtczptc0Rpc3BsYXlNb2RlfTtyZXR1cm57VGltZURpc3BsYXlNb2Rlcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBpdGVyYXRlRWxlbWVudERlZXBseUltcGwoZWxlbWVudCxjYix0aGlzQXJnLGluY2x1ZGVFbGVtZW50KXtpZihpbmNsdWRlRWxlbWVudCYmY2IuY2FsbCh0aGlzQXJnLGVsZW1lbnQpKXJldHVybiB0cnVlO2lmKGVsZW1lbnQucm9vdCYmZWxlbWVudC5yb290IT09ZWxlbWVudCYmaXRlcmF0ZUVsZW1lbnREZWVwbHlJbXBsKGVsZW1lbnQucm9vdCxjYix0aGlzQXJnLGZhbHNlKSl7cmV0dXJuIHRydWU7fQpjb25zdCBjaGlsZHJlbj1Qb2x5bWVyLmRvbShlbGVtZW50KS5jaGlsZHJlbjtmb3IobGV0IGk9MDtpPGNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKGl0ZXJhdGVFbGVtZW50RGVlcGx5SW1wbChjaGlsZHJlbltpXSxjYix0aGlzQXJnLHRydWUpKXtyZXR1cm4gdHJ1ZTt9fQpyZXR1cm4gZmFsc2U7fQpmdW5jdGlvbiBpdGVyYXRlRWxlbWVudERlZXBseShlbGVtZW50LGNiLHRoaXNBcmcpe2l0ZXJhdGVFbGVtZW50RGVlcGx5SW1wbChlbGVtZW50LGNiLHRoaXNBcmcsZmFsc2UpO30KZnVuY3Rpb24gZmluZERlZXBFbGVtZW50TWF0Y2hpbmdQcmVkaWNhdGUoZWxlbWVudCxwcmVkaWNhdGUpe2xldCBmb3VuZEVsZW1lbnQ9dW5kZWZpbmVkO2Z1bmN0aW9uIG1hdGNoZXMoZWxlbWVudCl7Y29uc3QgbWF0Y2g9cHJlZGljYXRlKGVsZW1lbnQpO2lmKCFtYXRjaCl7cmV0dXJuIGZhbHNlO30KZm91bmRFbGVtZW50PWVsZW1lbnQ7cmV0dXJuIHRydWU7fQppdGVyYXRlRWxlbWVudERlZXBseShlbGVtZW50LG1hdGNoZXMpO3JldHVybiBmb3VuZEVsZW1lbnQ7fQpmdW5jdGlvbiBmaW5kRGVlcEVsZW1lbnRzTWF0Y2hpbmdQcmVkaWNhdGUoZWxlbWVudCxwcmVkaWNhdGUpe2NvbnN0IGZvdW5kRWxlbWVudHM9W107ZnVuY3Rpb24gbWF0Y2hlcyhlbGVtZW50KXtjb25zdCBtYXRjaD1wcmVkaWNhdGUoZWxlbWVudCk7aWYobWF0Y2gpe2ZvdW5kRWxlbWVudHMucHVzaChlbGVtZW50KTt9CnJldHVybiBmYWxzZTt9Cml0ZXJhdGVFbGVtZW50RGVlcGx5KGVsZW1lbnQsbWF0Y2hlcyk7cmV0dXJuIGZvdW5kRWxlbWVudHM7fQpmdW5jdGlvbiBmaW5kRGVlcEVsZW1lbnRNYXRjaGluZyhlbGVtZW50LHNlbGVjdG9yKXtyZXR1cm4gZmluZERlZXBFbGVtZW50TWF0Y2hpbmdQcmVkaWNhdGUoZWxlbWVudCxmdW5jdGlvbihlbGVtZW50KXtyZXR1cm4gZWxlbWVudC5tYXRjaGVzKHNlbGVjdG9yKTt9KTt9CmZ1bmN0aW9uIGZpbmREZWVwRWxlbWVudHNNYXRjaGluZyhlbGVtZW50LHNlbGVjdG9yKXtyZXR1cm4gZmluZERlZXBFbGVtZW50c01hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQsZnVuY3Rpb24oZWxlbWVudCl7cmV0dXJuIGVsZW1lbnQubWF0Y2hlcyhzZWxlY3Rvcik7fSk7fQpmdW5jdGlvbiBmaW5kRGVlcEVsZW1lbnRXaXRoVGV4dENvbnRlbnQoZWxlbWVudCxyZSl7cmV0dXJuIGZpbmREZWVwRWxlbWVudE1hdGNoaW5nUHJlZGljYXRlKGVsZW1lbnQsZnVuY3Rpb24oZWxlbWVudCl7aWYoZWxlbWVudC5jaGlsZHJlbi5sZW5ndGghPT0wKXJldHVybiBmYWxzZTtyZXR1cm4gcmUudGVzdChQb2x5bWVyLmRvbShlbGVtZW50KS50ZXh0Q29udGVudCk7fSk7fQpyZXR1cm57ZmluZERlZXBFbGVtZW50TWF0Y2hpbmcsZmluZERlZXBFbGVtZW50c01hdGNoaW5nLGZpbmREZWVwRWxlbWVudE1hdGNoaW5nUHJlZGljYXRlLGZpbmREZWVwRWxlbWVudHNNYXRjaGluZ1ByZWRpY2F0ZSxmaW5kRGVlcEVsZW1lbnRXaXRoVGV4dENvbnRlbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y29uc3QgVGltZURpc3BsYXlNb2Rlcz10ci5iLlRpbWVEaXNwbGF5TW9kZXM7Y29uc3QgUExVU19NSU5VU19TSUdOPVN0cmluZy5mcm9tQ2hhckNvZGUoMTc3KTtjb25zdCBDQUNIRURfRk9STUFUVEVSUz17fTtmdW5jdGlvbiBnZXROdW1iZXJGb3JtYXR0ZXIobWluU3BlYyxtYXhTcGVjLG1pbkN0eCxtYXhDdHgpe2NvbnN0IGtleT1taW5TcGVjKyctJyttYXhTcGVjKyctJyttaW5DdHgrJy0nK21heEN0eDtsZXQgZm9ybWF0dGVyPUNBQ0hFRF9GT1JNQVRURVJTW2tleV07aWYoZm9ybWF0dGVyPT09dW5kZWZpbmVkKXtsZXQgbWluaW11bUZyYWN0aW9uRGlnaXRzPW1pbkN0eCE9PXVuZGVmaW5lZD9taW5DdHg6bWluU3BlYztsZXQgbWF4aW11bUZyYWN0aW9uRGlnaXRzPW1heEN0eCE9PXVuZGVmaW5lZD9tYXhDdHg6bWF4U3BlYztpZihtaW5pbXVtRnJhY3Rpb25EaWdpdHM+bWF4aW11bUZyYWN0aW9uRGlnaXRzKXtpZihtaW5DdHghPT11bmRlZmluZWQmJm1heEN0eD09PXVuZGVmaW5lZCl7bWF4aW11bUZyYWN0aW9uRGlnaXRzPW1pbmltdW1GcmFjdGlvbkRpZ2l0czt9ZWxzZSBpZihtaW5DdHg9PT11bmRlZmluZWQmJm1heEN0eCE9PXVuZGVmaW5lZCl7bWluaW11bUZyYWN0aW9uRGlnaXRzPW1heGltdW1GcmFjdGlvbkRpZ2l0czt9fQpmb3JtYXR0ZXI9bmV3IEludGwuTnVtYmVyRm9ybWF0KHVuZGVmaW5lZCx7bWluaW11bUZyYWN0aW9uRGlnaXRzLG1heGltdW1GcmFjdGlvbkRpZ2l0cyx9KTtDQUNIRURfRk9STUFUVEVSU1trZXldPWZvcm1hdHRlcjt9CnJldHVybiBmb3JtYXR0ZXI7fQpmdW5jdGlvbiBtYXgoYSxiKXtpZihhPT09dW5kZWZpbmVkKXJldHVybiBiO2lmKGI9PT11bmRlZmluZWQpcmV0dXJuIGE7cmV0dXJuIGEuc2NhbGU+Yi5zY2FsZT9hOmI7fQpjb25zdCBJbXByb3ZlbWVudERpcmVjdGlvbj17RE9OVF9DQVJFOjAsQklHR0VSX0lTX0JFVFRFUjoxLFNNQUxMRVJfSVNfQkVUVEVSOjJ9O2Z1bmN0aW9uIFVuaXQodW5pdE5hbWUsanNvbk5hbWUsc2NhbGVCYXNlVW5pdCxpc0RlbHRhLGltcHJvdmVtZW50RGlyZWN0aW9uLGZvcm1hdFNwZWMpe3RoaXMudW5pdE5hbWU9dW5pdE5hbWU7dGhpcy5qc29uTmFtZT1qc29uTmFtZTt0aGlzLnNjYWxlQmFzZVVuaXQ9c2NhbGVCYXNlVW5pdDt0aGlzLmlzRGVsdGE9aXNEZWx0YTt0aGlzLmltcHJvdmVtZW50RGlyZWN0aW9uPWltcHJvdmVtZW50RGlyZWN0aW9uO3RoaXMuZm9ybWF0U3BlY189Zm9ybWF0U3BlYzt0aGlzLmJhc2VVbml0PXVuZGVmaW5lZDt0aGlzLmNvcnJlc3BvbmRpbmdEZWx0YVVuaXQ9dW5kZWZpbmVkO30KVW5pdC5wcm90b3R5cGU9e2FzSlNPTigpe3JldHVybiB0aGlzLmpzb25OYW1lO30sYXNKU09OMigpe3JldHVybiB0aGlzLmFzSlNPTigpLnJlcGxhY2UoJ19zbWFsbGVySXNCZXR0ZXInLCctJykucmVwbGFjZSgnX2JpZ2dlcklzQmV0dGVyJywnKycpO30sdHJ1bmNhdGUodmFsdWUpe2lmKHR5cGVvZiB2YWx1ZSE9PSdudW1iZXInKXJldHVybiB2YWx1ZTtpZigwPT09KHZhbHVlJTEpKXJldHVybiB2YWx1ZTtpZih0eXBlb2YgdGhpcy5mb3JtYXRTcGVjXyE9PSdmdW5jdGlvbicmJighdGhpcy5mb3JtYXRTcGVjXy51bml0U2NhbGV8fCgodGhpcy5mb3JtYXRTcGVjXy51bml0U2NhbGUubGVuZ3RoPT09MSkmJih0aGlzLmZvcm1hdFNwZWNfLnVuaXRTY2FsZVswXS52YWx1ZT09PTEpKSkpe2NvbnN0IGRpZ2l0cz10aGlzLmZvcm1hdFNwZWNfLm1heGltdW1GcmFjdGlvbkRpZ2l0c3x8dGhpcy5mb3JtYXRTcGVjXy5taW5pbXVtRnJhY3Rpb25EaWdpdHM7cmV0dXJuIHRyLmIubWF0aC50cnVuY2F0ZSh2YWx1ZSxkaWdpdHMrMSk7fQpjb25zdCBmb3JtYXR0ZWQ9dGhpcy5mb3JtYXQodmFsdWUpO2xldCB0ZXN0PU1hdGgucm91bmQodmFsdWUpO2lmKGZvcm1hdHRlZD09PXRoaXMuZm9ybWF0KHRlc3QpKXJldHVybiB0ZXN0O2xldCBsbz0xO2xldCBoaT0xNjt3aGlsZShsbzxoaS0xKXtjb25zdCBkaWdpdHM9cGFyc2VJbnQoKGxvK2hpKS8yKTt0ZXN0PXRyLmIubWF0aC50cnVuY2F0ZSh2YWx1ZSxkaWdpdHMpO2lmKGZvcm1hdHRlZD09PXRoaXMuZm9ybWF0KHRlc3QpKXtoaT1kaWdpdHM7fWVsc2V7bG89ZGlnaXRzO319CnRlc3Q9dHIuYi5tYXRoLnRydW5jYXRlKHZhbHVlLGxvKTtpZihmb3JtYXR0ZWQ9PT10aGlzLmZvcm1hdCh0ZXN0KSlyZXR1cm4gdGVzdDtyZXR1cm4gdHIuYi5tYXRoLnRydW5jYXRlKHZhbHVlLGhpKTt9LGdldFVuaXRTY2FsZV8ob3B0X2NvbnRleHQpe2xldCBmb3JtYXRTcGVjPXRoaXMuZm9ybWF0U3BlY187bGV0IGZvcm1hdFNwZWNXYXNGdW5jdGlvbj1mYWxzZTtpZih0eXBlb2YgZm9ybWF0U3BlYz09PSdmdW5jdGlvbicpe2Zvcm1hdFNwZWNXYXNGdW5jdGlvbj10cnVlO2Zvcm1hdFNwZWM9Zm9ybWF0U3BlYygpO30KY29uc3QgY29udGV4dD1vcHRfY29udGV4dHx8e307bGV0IHNjYWxlPXVuZGVmaW5lZDtpZihjb250ZXh0LnVuaXRTY2FsZSl7c2NhbGU9Y29udGV4dC51bml0U2NhbGU7fWVsc2UgaWYoY29udGV4dC51bml0UHJlZml4KXtjb25zdCBzeW1ib2w9Zm9ybWF0U3BlYy5iYXNlU3ltYm9sP2Zvcm1hdFNwZWMuYmFzZVN5bWJvbDp0aGlzLnNjYWxlQmFzZVVuaXQuYmFzZVN5bWJvbDtzY2FsZT10ci5iLlVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoc3ltYm9sLHN5bWJvbCxbY29udGV4dC51bml0UHJlZml4XSkuQVVUTzt9ZWxzZXtzY2FsZT1mb3JtYXRTcGVjLnVuaXRTY2FsZTtpZighc2NhbGUpe3NjYWxlPVt7dmFsdWU6MSxzeW1ib2w6Zm9ybWF0U3BlYy5iYXNlU3ltYm9sfHwnJyxiYXNlU3ltYm9sOmZvcm1hdFNwZWMuYmFzZVN5bWJvbHx8Jyd9XTtpZighZm9ybWF0U3BlY1dhc0Z1bmN0aW9uKWZvcm1hdFNwZWMudW5pdFNjYWxlPXNjYWxlO319CmlmKCEoc2NhbGUgaW5zdGFuY2VvZiBBcnJheSkpe3Rocm93IG5ldyBFcnJvcignVW5pdCBoYXMgYSBtYWxmb3JtZWQgdW5pdCBzY2FsZS4nKTt9CnJldHVybiBzY2FsZTt9LGdldCB1bml0U3RyaW5nKCl7Y29uc3Qgc2NhbGU9dGhpcy5nZXRVbml0U2NhbGVfKCk7aWYoIXNjYWxlKXt0aHJvdyBuZXcgRXJyb3IoJ0EgVW5pdFNjYWxlIGNvdWxkIG5vdCBiZSBmb3VuZCBmb3IgVW5pdCAnK3RoaXMudW5pdE5hbWUpO30KcmV0dXJuIHNjYWxlWzBdLnN5bWJvbDt9LGZvcm1hdCh2YWx1ZSxvcHRfY29udGV4dCl7bGV0IHNpZ25TdHJpbmc9Jyc7aWYodmFsdWU8MCl7c2lnblN0cmluZz0nLSc7dmFsdWU9LXZhbHVlO31lbHNlIGlmKHRoaXMuaXNEZWx0YSl7c2lnblN0cmluZz12YWx1ZT09PTA/UExVU19NSU5VU19TSUdOOicrJzt9CmNvbnN0IGNvbnRleHQ9b3B0X2NvbnRleHR8fHt9O2NvbnN0IHNjYWxlPXRoaXMuZ2V0VW5pdFNjYWxlXyhjb250ZXh0KTtsZXQgZGVsdGFWYWx1ZT1jb250ZXh0LmRlbHRhVmFsdWU9PT11bmRlZmluZWQ/dmFsdWU6Y29udGV4dC5kZWx0YVZhbHVlO2RlbHRhVmFsdWU9TWF0aC5hYnMoZGVsdGFWYWx1ZSkqdGhpcy5zY2FsZUJhc2VVbml0LnZhbHVlO2lmKGRlbHRhVmFsdWU9PT0wKXtkZWx0YVZhbHVlPTE7fQpsZXQgaT0wO3doaWxlKGk8c2NhbGUubGVuZ3RoLTEmJmRlbHRhVmFsdWUvc2NhbGVbaSsxXS52YWx1ZT49MSl7aSsrO30KY29uc3Qgc2VsZWN0ZWRTdWJVbml0PXNjYWxlW2ldO2xldCBmb3JtYXRTcGVjPXRoaXMuZm9ybWF0U3BlY187aWYodHlwZW9mIGZvcm1hdFNwZWM9PT0nZnVuY3Rpb24nKWZvcm1hdFNwZWM9Zm9ybWF0U3BlYygpO2xldCB1bml0U3RyaW5nPScnO2lmKHNlbGVjdGVkU3ViVW5pdC5zeW1ib2wpe2lmKCFmb3JtYXRTcGVjLmF2b2lkU3BhY2VQcmVjZWRpbmdVbml0KXVuaXRTdHJpbmc9JyAnO3VuaXRTdHJpbmcrPXNlbGVjdGVkU3ViVW5pdC5zeW1ib2w7fQp2YWx1ZT10ci5iLmNvbnZlcnRVbml0KHZhbHVlLHRoaXMuc2NhbGVCYXNlVW5pdCxzZWxlY3RlZFN1YlVuaXQpO2NvbnN0IG51bWJlclN0cmluZz1nZXROdW1iZXJGb3JtYXR0ZXIoZm9ybWF0U3BlYy5taW5pbXVtRnJhY3Rpb25EaWdpdHMsZm9ybWF0U3BlYy5tYXhpbXVtRnJhY3Rpb25EaWdpdHMsY29udGV4dC5taW5pbXVtRnJhY3Rpb25EaWdpdHMsY29udGV4dC5tYXhpbXVtRnJhY3Rpb25EaWdpdHMpLmZvcm1hdCh2YWx1ZSk7cmV0dXJuIHNpZ25TdHJpbmcrbnVtYmVyU3RyaW5nK3VuaXRTdHJpbmc7fX07VW5pdC5yZXNldD1mdW5jdGlvbigpe1VuaXQuY3VycmVudFRpbWVEaXNwbGF5TW9kZT1UaW1lRGlzcGxheU1vZGVzLm1zO307VW5pdC50aW1lc3RhbXBGcm9tVXM9ZnVuY3Rpb24odXMpe3JldHVybiB0ci5iLmNvbnZlcnRVbml0KHVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO307T2JqZWN0LmRlZmluZVByb3BlcnR5KFVuaXQsJ2N1cnJlbnRUaW1lRGlzcGxheU1vZGUnLHtnZXQoKXtyZXR1cm4gVW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlXzt9LHNldCh2YWx1ZSl7aWYoVW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlXz09PXZhbHVlKXJldHVybjtVbml0LmN1cnJlbnRUaW1lRGlzcGxheU1vZGVfPXZhbHVlO1VuaXQuZGlzcGF0Y2hFdmVudChuZXcgdHIuYi5FdmVudCgnZGlzcGxheS1tb2RlLWNoYW5nZWQnKSk7fX0pO1VuaXQuZGlkUHJlZmVycmVkVGltZURpc3BsYXlVbml0Q2hhbmdlPWZ1bmN0aW9uKCl7bGV0IGxhcmdlc3Q9dW5kZWZpbmVkO2NvbnN0IGVscz10ci51aS5iLmZpbmREZWVwRWxlbWVudHNNYXRjaGluZyhkb2N1bWVudC5ib2R5LCd0ci12LXVpLXByZWZlcnJlZC1kaXNwbGF5LXVuaXQnKTtlbHMuZm9yRWFjaChmdW5jdGlvbihlbCl7bGFyZ2VzdD1tYXgobGFyZ2VzdCxlbC5wcmVmZXJyZWRUaW1lRGlzcGxheU1vZGUpO30pO1VuaXQuY3VycmVudFRpbWVEaXNwbGF5TW9kZT1sYXJnZXN0PT09dW5kZWZpbmVkP1RpbWVEaXNwbGF5TW9kZXMubXM6bGFyZ2VzdDt9O1VuaXQuYnlOYW1lPXt9O1VuaXQuYnlKU09OTmFtZT17fTtVbml0LmZyb21KU09OPWZ1bmN0aW9uKG9iamVjdCl7aWYodHlwZW9mKG9iamVjdCk9PT0nc3RyaW5nJyl7aWYob2JqZWN0LmVuZHNXaXRoKCcrJykpe29iamVjdD1vYmplY3Quc2xpY2UoMCxvYmplY3QubGVuZ3RoLTEpKydfYmlnZ2VySXNCZXR0ZXInO31lbHNlIGlmKG9iamVjdC5lbmRzV2l0aCgnLScpKXtvYmplY3Q9b2JqZWN0LnNsaWNlKDAsb2JqZWN0Lmxlbmd0aC0xKSsnX3NtYWxsZXJJc0JldHRlcic7fQpjb25zdCB1PVVuaXQuYnlKU09OTmFtZVtvYmplY3RdO2lmKHUpcmV0dXJuIHU7fQp0aHJvdyBuZXcgRXJyb3IoYFVucmVjb2duaXplZCB1bml0ICIke29iamVjdH0iYCk7fTtVbml0LmRlZmluZT1mdW5jdGlvbihwYXJhbXMpe2NvbnN0IGRlZmluZWRVbml0cz1bXTtmb3IoY29uc3QgaW1wcm92ZW1lbnREaXJlY3Rpb24gb2YgT2JqZWN0LnZhbHVlcyhJbXByb3ZlbWVudERpcmVjdGlvbikpe2NvbnN0IHJlZ3VsYXJVbml0PVVuaXQuZGVmaW5lVW5pdFZhcmlhbnRfKHBhcmFtcyxmYWxzZSxpbXByb3ZlbWVudERpcmVjdGlvbik7Y29uc3QgZGVsdGFVbml0PVVuaXQuZGVmaW5lVW5pdFZhcmlhbnRfKHBhcmFtcyx0cnVlLGltcHJvdmVtZW50RGlyZWN0aW9uKTtyZWd1bGFyVW5pdC5jb3JyZXNwb25kaW5nRGVsdGFVbml0PWRlbHRhVW5pdDtkZWx0YVVuaXQuY29ycmVzcG9uZGluZ0RlbHRhVW5pdD1kZWx0YVVuaXQ7ZGVmaW5lZFVuaXRzLnB1c2gocmVndWxhclVuaXQsZGVsdGFVbml0KTt9CmNvbnN0IGJhc2VVbml0PVVuaXQuYnlOYW1lW3BhcmFtcy5iYXNlVW5pdE5hbWVdO2RlZmluZWRVbml0cy5mb3JFYWNoKHU9PnUuYmFzZVVuaXQ9YmFzZVVuaXQpO307VW5pdC5uYW1lU3VmZml4Rm9ySW1wcm92ZW1lbnREaXJlY3Rpb249ZnVuY3Rpb24oaW1wcm92ZW1lbnREaXJlY3Rpb24pe3N3aXRjaChpbXByb3ZlbWVudERpcmVjdGlvbil7Y2FzZSBJbXByb3ZlbWVudERpcmVjdGlvbi5ET05UX0NBUkU6cmV0dXJuJyc7Y2FzZSBJbXByb3ZlbWVudERpcmVjdGlvbi5CSUdHRVJfSVNfQkVUVEVSOnJldHVybidfYmlnZ2VySXNCZXR0ZXInO2Nhc2UgSW1wcm92ZW1lbnREaXJlY3Rpb24uU01BTExFUl9JU19CRVRURVI6cmV0dXJuJ19zbWFsbGVySXNCZXR0ZXInO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGltcHJvdmVtZW50IGRpcmVjdGlvbjogJytpbXByb3ZlbWVudERpcmVjdGlvbik7fX07VW5pdC5kZWZpbmVVbml0VmFyaWFudF89ZnVuY3Rpb24ocGFyYW1zLGlzRGVsdGEsaW1wcm92ZW1lbnREaXJlY3Rpb24pe2xldCBuYW1lU3VmZml4PWlzRGVsdGE/J0RlbHRhJzonJztuYW1lU3VmZml4Kz1Vbml0Lm5hbWVTdWZmaXhGb3JJbXByb3ZlbWVudERpcmVjdGlvbihpbXByb3ZlbWVudERpcmVjdGlvbik7Y29uc3QgdW5pdE5hbWU9cGFyYW1zLmJhc2VVbml0TmFtZStuYW1lU3VmZml4O2NvbnN0IGpzb25OYW1lPXBhcmFtcy5iYXNlSnNvbk5hbWUrbmFtZVN1ZmZpeDtpZihVbml0LmJ5TmFtZVt1bml0TmFtZV0hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5pdCBcJycrdW5pdE5hbWUrJ1wnIGFscmVhZHkgZXhpc3RzJyk7fQppZihVbml0LmJ5SlNPTk5hbWVbanNvbk5hbWVdIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0pTT04gdW5pdCBcJycranNvbk5hbWUrJ1wnIGFscmVhZCBleGlzdHMnKTt9CmxldCBzY2FsZUJhc2VVbml0PXBhcmFtcy5zY2FsZUJhc2VVbml0O2lmKCFzY2FsZUJhc2VVbml0KXtsZXQgZm9ybWF0U3BlYz1wYXJhbXMuZm9ybWF0U3BlYztpZih0eXBlb2YgZm9ybWF0U3BlYz09PSdmdW5jdGlvbicpZm9ybWF0U3BlYz1mb3JtYXRTcGVjKCk7Y29uc3QgYmFzZVN5bWJvbD1mb3JtYXRTcGVjLnVuaXRTY2FsZT9mb3JtYXRTcGVjLnVuaXRTY2FsZVswXS5iYXNlU3ltYm9sOihmb3JtYXRTcGVjLmJhc2VTeW1ib2x8fCcnKTtzY2FsZUJhc2VVbml0PXt2YWx1ZToxLHN5bWJvbDpiYXNlU3ltYm9sLGJhc2VTeW1ib2x9O30KY29uc3QgdW5pdD1uZXcgVW5pdCh1bml0TmFtZSxqc29uTmFtZSxzY2FsZUJhc2VVbml0LGlzRGVsdGEsaW1wcm92ZW1lbnREaXJlY3Rpb24scGFyYW1zLmZvcm1hdFNwZWMpO1VuaXQuYnlOYW1lW3VuaXROYW1lXT11bml0O1VuaXQuYnlKU09OTmFtZVtqc29uTmFtZV09dW5pdDtyZXR1cm4gdW5pdDt9O3RyLmIuRXZlbnRUYXJnZXQuZGVjb3JhdGUoVW5pdCk7VW5pdC5yZXNldCgpO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3RpbWVJbk1zQXV0b0Zvcm1hdCcsYmFzZUpzb25OYW1lOidtc0Jlc3RGaXRGb3JtYXQnLHNjYWxlQmFzZVVuaXQ6dHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMsZm9ybWF0U3BlYzp7dW5pdFNjYWxlOnRyLmIuVW5pdFNjYWxlLlRJTUUuQVVUTyxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6MCxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6M319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOid0aW1lRHVyYXRpb25Jbk1zJyxiYXNlSnNvbk5hbWU6J21zJyxzY2FsZUJhc2VVbml0OnRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDLGZvcm1hdFNwZWMoKXtyZXR1cm4gVW5pdC5jdXJyZW50VGltZURpc3BsYXlNb2RlXy5mb3JtYXRTcGVjO319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOid0aW1lU3RhbXBJbk1zJyxiYXNlSnNvbk5hbWU6J3RzTXMnLHNjYWxlQmFzZVVuaXQ6dHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMsZm9ybWF0U3BlYygpe3JldHVybiBVbml0LmN1cnJlbnRUaW1lRGlzcGxheU1vZGVfLmZvcm1hdFNwZWM7fX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J25vcm1hbGl6ZWRQZXJjZW50YWdlJyxiYXNlSnNvbk5hbWU6J24lJyxmb3JtYXRTcGVjOnt1bml0U2NhbGU6W3t2YWx1ZTowLjAxLHN5bWJvbDonJSd9XSxhdm9pZFNwYWNlUHJlY2VkaW5nVW5pdDp0cnVlLG1pbmltdW1GcmFjdGlvbkRpZ2l0czoxLG1heGltdW1GcmFjdGlvbkRpZ2l0czoxfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3NpemVJbkJ5dGVzJyxiYXNlSnNvbk5hbWU6J3NpemVJbkJ5dGVzJyxmb3JtYXRTcGVjOnt1bml0U2NhbGU6dHIuYi5Vbml0U2NhbGUuTUVNT1JZLkFVVE8sbWluaW11bUZyYWN0aW9uRGlnaXRzOjEsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjF9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZTonYmFuZHdpZHRoSW5CeXRlc1BlclNlY29uZCcsYmFzZUpzb25OYW1lOidieXRlc1BlclNlY29uZCcsZm9ybWF0U3BlYzp7dW5pdFNjYWxlOnRyLmIuVW5pdFNjYWxlLkJBTkRXSURUSF9CWVRFUy5BVVRPLG1pbmltdW1GcmFjdGlvbkRpZ2l0czoxLG1heGltdW1GcmFjdGlvbkRpZ2l0czoxfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J2VuZXJneUluSm91bGVzJyxiYXNlSnNvbk5hbWU6J0onLGZvcm1hdFNwZWM6e3VuaXRTY2FsZTp0ci5iLlVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoJ0onLCdKT1VMRScsdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLCdKT1VMRScpLkFVVE8sbWluaW11bUZyYWN0aW9uRGlnaXRzOjN9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZToncG93ZXJJbldhdHRzJyxiYXNlSnNvbk5hbWU6J1cnLGZvcm1hdFNwZWM6e3VuaXRTY2FsZTp0ci5iLlVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoJ1cnLCdXQVRUJyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMsJ1dBVFQnKS5BVVRPLG1pbmltdW1GcmFjdGlvbkRpZ2l0czozfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J2VsZWN0cmljQ3VycmVudEluQW1wZXJlcycsYmFzZUpzb25OYW1lOidBJyxmb3JtYXRTcGVjOntiYXNlU3ltYm9sOidBJyx1bml0U2NhbGU6dHIuYi5Vbml0U2NhbGUuZGVmaW5lVW5pdFNjYWxlRnJvbVByZWZpeFNjYWxlKCdBJywnQU1QRVJFJyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMsJ0FNUEVSRScpLkFVVE8sbWluaW11bUZyYWN0aW9uRGlnaXRzOjN9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZTonZWxlY3RyaWNQb3RlbnRpYWxJblZvbHRzJyxiYXNlSnNvbk5hbWU6J1YnLGZvcm1hdFNwZWM6e2Jhc2VTeW1ib2w6J1YnLHVuaXRTY2FsZTp0ci5iLlVuaXRTY2FsZS5kZWZpbmVVbml0U2NhbGVGcm9tUHJlZml4U2NhbGUoJ1YnLCdWT0xUJyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMsJ1ZPTFQnKS5BVVRPLG1pbmltdW1GcmFjdGlvbkRpZ2l0czozfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J2ZyZXF1ZW5jeUluSGVydHonLGJhc2VKc29uTmFtZTonSHonLGZvcm1hdFNwZWM6e2Jhc2VTeW1ib2w6J0h6Jyx1bml0U2NhbGU6dHIuYi5Vbml0U2NhbGUuZGVmaW5lVW5pdFNjYWxlRnJvbVByZWZpeFNjYWxlKCdIeicsJ0hFUlRaJyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMsJ0hFUlRaJykuQVVUTyxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6M319KTtVbml0LmRlZmluZSh7YmFzZVVuaXROYW1lOid1bml0bGVzc051bWJlcicsYmFzZUpzb25OYW1lOid1bml0bGVzcycsZm9ybWF0U3BlYzp7bWluaW11bUZyYWN0aW9uRGlnaXRzOjMsbWF4aW11bUZyYWN0aW9uRGlnaXRzOjN9fSk7VW5pdC5kZWZpbmUoe2Jhc2VVbml0TmFtZTonY291bnQnLGJhc2VKc29uTmFtZTonY291bnQnLGZvcm1hdFNwZWM6e21pbmltdW1GcmFjdGlvbkRpZ2l0czowLG1heGltdW1GcmFjdGlvbkRpZ2l0czowfX0pO1VuaXQuZGVmaW5lKHtiYXNlVW5pdE5hbWU6J3NpZ21hJyxiYXNlSnNvbk5hbWU6J3NpZ21hJyxmb3JtYXRTcGVjOntiYXNlU3ltYm9sOlN0cmluZy5mcm9tQ2hhckNvZGUoOTYzKSxtaW5pbXVtRnJhY3Rpb25EaWdpdHM6MSxtYXhpbXVtRnJhY3Rpb25EaWdpdHM6MX19KTtyZXR1cm57SW1wcm92ZW1lbnREaXJlY3Rpb24sVW5pdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjbGFzcyBTY2FsYXJ7Y29uc3RydWN0b3IodW5pdCx2YWx1ZSl7aWYoISh1bml0IGluc3RhbmNlb2YgdHIuYi5Vbml0KSl7dGhyb3cgbmV3IEVycm9yKCdFeHBlY3RlZCBVbml0Jyk7fQppZighKHR5cGVvZih2YWx1ZSk9PT0nbnVtYmVyJykpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgdmFsdWUgdG8gYmUgbnVtYmVyJyk7fQp0aGlzLnVuaXQ9dW5pdDt0aGlzLnZhbHVlPXZhbHVlO30KYXNEaWN0KCl7cmV0dXJue3VuaXQ6dGhpcy51bml0LmFzSlNPTigpLHZhbHVlOnRyLmIubnVtYmVyVG9Kc29uKHRoaXMudmFsdWUpLH07fQp0b1N0cmluZygpe3JldHVybiB0aGlzLnVuaXQuZm9ybWF0KHRoaXMudmFsdWUpO30Kc3RhdGljIGZyb21EaWN0KGQpe3JldHVybiBuZXcgU2NhbGFyKHRyLmIuVW5pdC5mcm9tSlNPTihkLnVuaXQpLHRyLmIubnVtYmVyRnJvbUpzb24oZC52YWx1ZSkpO319CnJldHVybntTY2FsYXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQXVkaXRvcihtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7fQpBdWRpdG9yLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30scnVuQW5ub3RhdGUoKXt9LGluc3RhbGxVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcklmTmVlZGVkKCl7fSxydW5BdWRpdCgpe319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e307b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9QXVkaXRvcjt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoQXVkaXRvcixvcHRpb25zKTtyZXR1cm57QXVkaXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBjbGFtcDAxKHZhbHVlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLHZhbHVlKSk7fQpmdW5jdGlvbiBDb2xvcihvcHRfcixvcHRfZyxvcHRfYixvcHRfYSl7dGhpcy5yPU1hdGguZmxvb3Iob3B0X3IpfHwwO3RoaXMuZz1NYXRoLmZsb29yKG9wdF9nKXx8MDt0aGlzLmI9TWF0aC5mbG9vcihvcHRfYil8fDA7dGhpcy5hPW9wdF9hO30KQ29sb3IuZnJvbVN0cmluZz1mdW5jdGlvbihzdHIpe2xldCB0bXA7bGV0IHZhbHVlcztpZihzdHIuc3Vic3RyKDAsNCk9PT0ncmdiKCcpe3RtcD1zdHIuc3Vic3RyKDQsc3RyLmxlbmd0aC01KTt2YWx1ZXM9dG1wLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL15ccysvLCcnLCdnJyk7fSk7aWYodmFsdWVzLmxlbmd0aCE9PTMpe3Rocm93IG5ldyBFcnJvcignTWFsZm9ybWF0dGVkIHJnYi1leHByZXNzaW9uJyk7fQpyZXR1cm4gbmV3IENvbG9yKHBhcnNlSW50KHZhbHVlc1swXSkscGFyc2VJbnQodmFsdWVzWzFdKSxwYXJzZUludCh2YWx1ZXNbMl0pKTt9CmlmKHN0ci5zdWJzdHIoMCw1KT09PSdyZ2JhKCcpe3RtcD1zdHIuc3Vic3RyKDUsc3RyLmxlbmd0aC02KTt2YWx1ZXM9dG1wLnNwbGl0KCcsJykubWFwKGZ1bmN0aW9uKHYpe3JldHVybiB2LnJlcGxhY2UoL15ccysvLCcnLCdnJyk7fSk7aWYodmFsdWVzLmxlbmd0aCE9PTQpe3Rocm93IG5ldyBFcnJvcignTWFsZm9ybWF0dGVkIHJnYi1leHByZXNzaW9uJyk7fQpyZXR1cm4gbmV3IENvbG9yKHBhcnNlSW50KHZhbHVlc1swXSkscGFyc2VJbnQodmFsdWVzWzFdKSxwYXJzZUludCh2YWx1ZXNbMl0pLHBhcnNlRmxvYXQodmFsdWVzWzNdKSk7fQppZihzdHJbMF09PT0nIycmJnN0ci5sZW5ndGg9PT03KXtyZXR1cm4gbmV3IENvbG9yKHBhcnNlSW50KHN0ci5zdWJzdHIoMSwyKSwxNikscGFyc2VJbnQoc3RyLnN1YnN0cigzLDIpLDE2KSxwYXJzZUludChzdHIuc3Vic3RyKDUsMiksMTYpKTt9CnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIHN0cmluZyBmb3JtYXQuJyk7fTtDb2xvci5sZXJwPWZ1bmN0aW9uKGEsYixwZXJjZW50KXtpZihhLmEhPT11bmRlZmluZWQmJmIuYSE9PXVuZGVmaW5lZCl7cmV0dXJuIENvbG9yLmxlcnBSR0JBKGEsYixwZXJjZW50KTt9CnJldHVybiBDb2xvci5sZXJwUkdCKGEsYixwZXJjZW50KTt9O0NvbG9yLmxlcnBSR0I9ZnVuY3Rpb24oYSxiLHBlcmNlbnQpe3JldHVybiBuZXcgQ29sb3IoKChiLnItYS5yKSpwZXJjZW50KSthLnIsKChiLmctYS5nKSpwZXJjZW50KSthLmcsKChiLmItYS5iKSpwZXJjZW50KSthLmIpO307Q29sb3IubGVycFJHQkE9ZnVuY3Rpb24oYSxiLHBlcmNlbnQpe3JldHVybiBuZXcgQ29sb3IoKChiLnItYS5yKSpwZXJjZW50KSthLnIsKChiLmctYS5nKSpwZXJjZW50KSthLmcsKChiLmItYS5iKSpwZXJjZW50KSthLmIsKChiLmEtYS5hKSpwZXJjZW50KSthLmEpO307Q29sb3IuZnJvbURpY3Q9ZnVuY3Rpb24oZGljdCl7cmV0dXJuIG5ldyBDb2xvcihkaWN0LnIsZGljdC5nLGRpY3QuYixkaWN0LmEpO307Q29sb3IuZnJvbUhTTEV4cGxpY2l0PWZ1bmN0aW9uKGgscyxsLGEpe2xldCByO2xldCBnO2xldCBiO2Z1bmN0aW9uIGh1ZTJyZ2IocCxxLHQpe2lmKHQ8MCl0Kz0xO2lmKHQ+MSl0LT0xO2lmKHQ8MS82KXJldHVybiBwKyhxLXApKjYqdDtpZih0PDEvMilyZXR1cm4gcTtpZih0PDIvMylyZXR1cm4gcCsocS1wKSooMi8zLXQpKjY7cmV0dXJuIHA7fQppZihzPT09MCl7cj1nPWI9bDt9ZWxzZXtjb25zdCBxPWw8MC41P2wqKDErcyk6bCtzLWwqcztjb25zdCBwPTIqbC1xO3I9aHVlMnJnYihwLHEsaCsxLzMpO2c9aHVlMnJnYihwLHEsaCk7Yj1odWUycmdiKHAscSxoLTEvMyk7fQpyZXR1cm4gbmV3IENvbG9yKE1hdGguZmxvb3IocioyNTUpLE1hdGguZmxvb3IoZyoyNTUpLE1hdGguZmxvb3IoYioyNTUpLGEpO307Q29sb3IuZnJvbUhTTD1mdW5jdGlvbihoc2wpe3JldHVybiBDb2xvci5mcm9tSFNMRXhwbGljaXQoaHNsLmgsaHNsLnMsaHNsLmwsaHNsLmEpO307Q29sb3IucHJvdG90eXBlPXtjbG9uZSgpe2NvbnN0IGM9bmV3IENvbG9yKCk7Yy5yPXRoaXMucjtjLmc9dGhpcy5nO2MuYj10aGlzLmI7Yy5hPXRoaXMuYTtyZXR1cm4gYzt9LGJsZW5kT3ZlcihiZ0NvbG9yKXtjb25zdCBvbmVNaW51c1RoaXNBbHBoYT0xLXRoaXMuYTtjb25zdCBvdXRBPXRoaXMuYStiZ0NvbG9yLmEqb25lTWludXNUaGlzQWxwaGE7Y29uc3QgYmdCbGVuZD0oYmdDb2xvci5hKm9uZU1pbnVzVGhpc0FscGhhKS9iZ0NvbG9yLmE7cmV0dXJuIG5ldyBDb2xvcih0aGlzLnIqdGhpcy5hK2JnQ29sb3IucipiZ0JsZW5kLHRoaXMuZyp0aGlzLmErYmdDb2xvci5nKmJnQmxlbmQsdGhpcy5iKnRoaXMuYStiZ0NvbG9yLmIqYmdCbGVuZCxvdXRBKTt9LGJyaWdodGVuKG9wdF9rKXtjb25zdCBrPW9wdF9rfHwwLjQ1O3JldHVybiBuZXcgQ29sb3IoTWF0aC5taW4oMjU1LHRoaXMucitNYXRoLmZsb29yKHRoaXMuciprKSksTWF0aC5taW4oMjU1LHRoaXMuZytNYXRoLmZsb29yKHRoaXMuZyprKSksTWF0aC5taW4oMjU1LHRoaXMuYitNYXRoLmZsb29yKHRoaXMuYiprKSksdGhpcy5hKTt9LGxpZ2h0ZW4oayxvcHRfbWF4TCl7Y29uc3QgbWF4TD1vcHRfbWF4TCE9PXVuZGVmaW5lZD9vcHRfbWF4TDoxLjA7Y29uc3QgaHNsPXRoaXMudG9IU0woKTtoc2wubD1NYXRoLm1pbihoc2wubCtrLG1heEwpO3JldHVybiBDb2xvci5mcm9tSFNMKGhzbCk7fSxkYXJrZW4ob3B0X2spe2xldCBrO2lmKG9wdF9rIT09dW5kZWZpbmVkKXtrPW9wdF9rO31lbHNle2s9MC40NTt9CnJldHVybiBuZXcgQ29sb3IoTWF0aC5taW4oMjU1LHRoaXMuci1NYXRoLmZsb29yKHRoaXMuciprKSksTWF0aC5taW4oMjU1LHRoaXMuZy1NYXRoLmZsb29yKHRoaXMuZyprKSksTWF0aC5taW4oMjU1LHRoaXMuYi1NYXRoLmZsb29yKHRoaXMuYiprKSksdGhpcy5hKTt9LGRlc2F0dXJhdGUob3B0X2Rlc2F0dXJhdGVGYWN0b3Ipe2xldCBkZXNhdHVyYXRlRmFjdG9yO2lmKG9wdF9kZXNhdHVyYXRlRmFjdG9yIT09dW5kZWZpbmVkKXtkZXNhdHVyYXRlRmFjdG9yPW9wdF9kZXNhdHVyYXRlRmFjdG9yO31lbHNle2Rlc2F0dXJhdGVGYWN0b3I9MTt9CmNvbnN0IGhzbD10aGlzLnRvSFNMKCk7aHNsLnM9Y2xhbXAwMShoc2wucyooMS1kZXNhdHVyYXRlRmFjdG9yKSk7cmV0dXJuIENvbG9yLmZyb21IU0woaHNsKTt9LHdpdGhBbHBoYShhKXtyZXR1cm4gbmV3IENvbG9yKHRoaXMucix0aGlzLmcsdGhpcy5iLGEpO30sdG9TdHJpbmcoKXtpZih0aGlzLmEhPT11bmRlZmluZWQpe3JldHVybidyZ2JhKCcrCnRoaXMucisnLCcrdGhpcy5nKycsJysKdGhpcy5iKycsJyt0aGlzLmErJyknO30KcmV0dXJuJ3JnYignK3RoaXMucisnLCcrdGhpcy5nKycsJyt0aGlzLmIrJyknO30sdG9IU0woKXtjb25zdCByPXRoaXMuci8yNTU7Y29uc3QgZz10aGlzLmcvMjU1O2NvbnN0IGI9dGhpcy5iLzI1NTtjb25zdCBtYXg9TWF0aC5tYXgocixnLGIpO2NvbnN0IG1pbj1NYXRoLm1pbihyLGcsYik7bGV0IGg7bGV0IHM7Y29uc3QgbD0obWF4K21pbikvMjtpZihtaW49PT1tYXgpe2g9MDtzPTA7fWVsc2V7Y29uc3QgZGVsdGE9bWF4LW1pbjtpZihsPjAuNSl7cz1kZWx0YS8oMi1tYXgtbWluKTt9ZWxzZXtzPWRlbHRhLyhtYXgrbWluKTt9CmlmKHI9PT1tYXgpe2g9KGctYikvZGVsdGE7aWYoZzxiKWgrPTY7fWVsc2UgaWYoZz09PW1heCl7aD0yKygoYi1yKS9kZWx0YSk7fWVsc2V7aD00Kygoci1nKS9kZWx0YSk7fQpoLz02O30KcmV0dXJue2gscyxsLGE6dGhpcy5hfTt9LHRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUoYWxwaGEpe3JldHVybidyZ2JhKCcrCnRoaXMucisnLCcrdGhpcy5nKycsJysKdGhpcy5iKycsJythbHBoYSsnKSc7fX07cmV0dXJue0NvbG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNpbmVib3dDb2xvckdlbmVyYXRvcihvcHRfYSxvcHRfYnJpZ2h0bmVzcyl7dGhpcy5hXz0ob3B0X2E9PT11bmRlZmluZWQpPzE6b3B0X2E7dGhpcy5icmlnaHRuZXNzXz0ob3B0X2JyaWdodG5lc3M9PT11bmRlZmluZWQpPzE6b3B0X2JyaWdodG5lc3M7dGhpcy5jb2xvckluZGV4Xz0wO3RoaXMua2V5VG9Db2xvcj17fTt9ClNpbmVib3dDb2xvckdlbmVyYXRvci5wcm90b3R5cGU9e2NvbG9yRm9yS2V5KGtleSl7aWYoIXRoaXMua2V5VG9Db2xvcltrZXldKXt0aGlzLmtleVRvQ29sb3Jba2V5XT10aGlzLm5leHRDb2xvcigpO30KcmV0dXJuIHRoaXMua2V5VG9Db2xvcltrZXldO30sbmV4dENvbG9yKCl7Y29uc3QgY29tcG9uZW50cz1TaW5lYm93Q29sb3JHZW5lcmF0b3IubnRoQ29sb3IodGhpcy5jb2xvckluZGV4XysrKTtyZXR1cm4gdHIuYi5Db2xvci5mcm9tU3RyaW5nKFNpbmVib3dDb2xvckdlbmVyYXRvci5jYWxjdWxhdGVDb2xvcihjb21wb25lbnRzWzBdLGNvbXBvbmVudHNbMV0sY29tcG9uZW50c1syXSx0aGlzLmFfLHRoaXMuYnJpZ2h0bmVzc18pKTt9fTtTaW5lYm93Q29sb3JHZW5lcmF0b3IuUEhJPSgxK01hdGguc3FydCg1KSkvMjtTaW5lYm93Q29sb3JHZW5lcmF0b3Iuc2luZWJvdz1mdW5jdGlvbihoKXtoKz0wLjU7aD0taDtsZXQgcj1NYXRoLnNpbihNYXRoLlBJKmgpO2xldCBnPU1hdGguc2luKE1hdGguUEkqKGgrMS8zKSk7bGV0IGI9TWF0aC5zaW4oTWF0aC5QSSooaCsyLzMpKTtyKj1yO2cqPWc7Yio9Yjtjb25zdCB5PTIqKDAuMjk4OSpyKzAuNTg3MCpnKzAuMTE0MCpiKTtyLz15O2cvPXk7Yi89eTtyZXR1cm5bMjU2KnIsMjU2KmcsMjU2KmJdO307U2luZWJvd0NvbG9yR2VuZXJhdG9yLm50aENvbG9yPWZ1bmN0aW9uKG4pe3JldHVybiBTaW5lYm93Q29sb3JHZW5lcmF0b3Iuc2luZWJvdyhuKnRoaXMuUEhJKTt9O1NpbmVib3dDb2xvckdlbmVyYXRvci5jYWxjdWxhdGVDb2xvcj1mdW5jdGlvbihyLGcsYixhLGJyaWdodG5lc3Mpe2lmKGJyaWdodG5lc3M8PTEpe3IqPWJyaWdodG5lc3M7Zyo9YnJpZ2h0bmVzcztiKj1icmlnaHRuZXNzO31lbHNle3I9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksciwyNTUpO2c9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksZywyNTUpO2I9dHIuYi5tYXRoLmxlcnAodHIuYi5tYXRoLm5vcm1hbGl6ZShicmlnaHRuZXNzLDEsMiksYiwyNTUpO30Kcj1NYXRoLnJvdW5kKHIpO2c9TWF0aC5yb3VuZChnKTtiPU1hdGgucm91bmQoYik7cmV0dXJuJ3JnYmEoJytyKycsJytnKycsJytiKycsICcrYSsnKSc7fTtyZXR1cm57U2luZWJvd0NvbG9yR2VuZXJhdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IG51bUdlbmVyYWxQdXJwb3NlQ29sb3JJZHM9MjM7Y29uc3QgZ2VuZXJhbFB1cnBvc2VDb2xvcnM9bmV3IEFycmF5KG51bUdlbmVyYWxQdXJwb3NlQ29sb3JJZHMpO2NvbnN0IHNpbmVib3dBbHBoYT0xLjA7Y29uc3Qgc2luZWJvd0JyaWdodG5lc3M9MS41O2NvbnN0IHNpbmVib3dDb2xvckdlbmVyYXRvcj1uZXcgdHIuYi5TaW5lYm93Q29sb3JHZW5lcmF0b3Ioc2luZWJvd0FscGhhLHNpbmVib3dCcmlnaHRuZXNzKTtmb3IobGV0IGk9MDtpPG51bUdlbmVyYWxQdXJwb3NlQ29sb3JJZHM7aSsrKXtnZW5lcmFsUHVycG9zZUNvbG9yc1tpXT1zaW5lYm93Q29sb3JHZW5lcmF0b3IubmV4dENvbG9yKCk7fQpjb25zdCByZXNlcnZlZENvbG9yc0J5TmFtZT17dGhyZWFkX3N0YXRlX3VuaW50ZXJydXB0aWJsZTpuZXcgdHIuYi5Db2xvcigxODIsMTI1LDE0MyksdGhyZWFkX3N0YXRlX2lvd2FpdDpuZXcgdHIuYi5Db2xvcigyNTUsMTQwLDApLHRocmVhZF9zdGF0ZV9ydW5uaW5nOm5ldyB0ci5iLkNvbG9yKDEyNiwyMDAsMTQ4KSx0aHJlYWRfc3RhdGVfcnVubmFibGU6bmV3IHRyLmIuQ29sb3IoMTMzLDE2MCwyMTApLHRocmVhZF9zdGF0ZV9zbGVlcGluZzpuZXcgdHIuYi5Db2xvcigyNDAsMjQwLDI0MCksdGhyZWFkX3N0YXRlX3Vua25vd246bmV3IHRyLmIuQ29sb3IoMTk5LDE1NSwxMjUpLGJhY2tncm91bmRfbWVtb3J5X2R1bXA6bmV3IHRyLmIuQ29sb3IoMCwxODAsMTgwKSxsaWdodF9tZW1vcnlfZHVtcDpuZXcgdHIuYi5Db2xvcigwLDAsMTgwKSxkZXRhaWxlZF9tZW1vcnlfZHVtcDpuZXcgdHIuYi5Db2xvcigxODAsMCwxODApLHZzeW5jX2hpZ2hsaWdodF9jb2xvcjpuZXcgdHIuYi5Db2xvcigwLDAsMjU1KSxnZW5lcmljX3dvcms6bmV3IHRyLmIuQ29sb3IoMTI1LDEyNSwxMjUpLGdvb2Q6bmV3IHRyLmIuQ29sb3IoMCwxMjUsMCksYmFkOm5ldyB0ci5iLkNvbG9yKDE4MCwxMjUsMCksdGVycmlibGU6bmV3IHRyLmIuQ29sb3IoMTgwLDAsMCksYmxhY2s6bmV3IHRyLmIuQ29sb3IoMCwwLDApLGdyZXk6bmV3IHRyLmIuQ29sb3IoMjIxLDIyMSwyMjEpLHdoaXRlOm5ldyB0ci5iLkNvbG9yKDI1NSwyNTUsMjU1KSx5ZWxsb3c6bmV3IHRyLmIuQ29sb3IoMjU1LDI1NSwwKSxvbGl2ZTpuZXcgdHIuYi5Db2xvcigxMDAsMTAwLDApLHJhaWxfcmVzcG9uc2U6bmV3IHRyLmIuQ29sb3IoNjcsMTM1LDI1MykscmFpbF9hbmltYXRpb246bmV3IHRyLmIuQ29sb3IoMjQ0LDc0LDYzKSxyYWlsX2lkbGU6bmV3IHRyLmIuQ29sb3IoMjM4LDE0MiwwKSxyYWlsX2xvYWQ6bmV3IHRyLmIuQ29sb3IoMTMsMTY4LDk3KSxzdGFydHVwOm5ldyB0ci5iLkNvbG9yKDIzMCwyMzAsMCksaGVhcF9kdW1wX3N0YWNrX2ZyYW1lOm5ldyB0ci5iLkNvbG9yKDEyOCwxMjgsMTI4KSxoZWFwX2R1bXBfb2JqZWN0X3R5cGU6bmV3IHRyLmIuQ29sb3IoMCwwLDI1NSksaGVhcF9kdW1wX2NoaWxkX25vZGVfYXJyb3c6bmV3IHRyLmIuQ29sb3IoMjA0LDEwMiwwKSxjcV9idWlsZF9ydW5uaW5nOm5ldyB0ci5iLkNvbG9yKDI1NSwyNTUsMTE5KSxjcV9idWlsZF9wYXNzZWQ6bmV3IHRyLmIuQ29sb3IoMTUzLDIzOCwxMDIpLGNxX2J1aWxkX2ZhaWxlZDpuZXcgdHIuYi5Db2xvcigyMzgsMTM2LDEzNiksY3FfYnVpbGRfYWJhbmRvbmVkOm5ldyB0ci5iLkNvbG9yKDE4NywxODcsMTg3KSxjcV9idWlsZF9hdHRlbXB0X3J1bm5pZzpuZXcgdHIuYi5Db2xvcigyMjIsMjIyLDc1KSxjcV9idWlsZF9hdHRlbXB0X3Bhc3NlZDpuZXcgdHIuYi5Db2xvcigxMDMsMjE4LDM1KSxjcV9idWlsZF9hdHRlbXB0X2ZhaWxlZDpuZXcgdHIuYi5Db2xvcigxOTcsODEsODEpfTtjb25zdCBudW1SZXNlcnZlZENvbG9ySWRzPU9iamVjdC5rZXlzKHJlc2VydmVkQ29sb3JzQnlOYW1lKS5sZW5ndGg7Y29uc3QgbnVtQ29sb3JzUGVyVmFyaWFudD1udW1HZW5lcmFsUHVycG9zZUNvbG9ySWRzK251bVJlc2VydmVkQ29sb3JJZHM7ZnVuY3Rpb24gQ29sb3JTY2hlbWUoKXt9CmNvbnN0IHBhbGV0dGVCYXNlPVtdO3BhbGV0dGVCYXNlLnB1c2guYXBwbHkocGFsZXR0ZUJhc2UsZ2VuZXJhbFB1cnBvc2VDb2xvcnMpO3BhbGV0dGVCYXNlLnB1c2guYXBwbHkocGFsZXR0ZUJhc2UsT2JqZWN0LnZhbHVlcyhyZXNlcnZlZENvbG9yc0J5TmFtZSkpO0NvbG9yU2NoZW1lLmNvbG9ycz1bXTtDb2xvclNjaGVtZS5wcm9wZXJ0aWVzPXt9O0NvbG9yU2NoZW1lLnByb3BlcnRpZXM9e251bUNvbG9yc1BlclZhcmlhbnQsfTtmdW5jdGlvbiBwdXNoVmFyaWFudChmdW5jKXtjb25zdCB2YXJpYW50Q29sb3JzPXBhbGV0dGVCYXNlLm1hcChmdW5jKTtDb2xvclNjaGVtZS5jb2xvcnMucHVzaC5hcHBseShDb2xvclNjaGVtZS5jb2xvcnMsdmFyaWFudENvbG9ycyk7fQpwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYzt9KTtDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzPVtdO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodGVuKDAuMywwLjgpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5saWdodGVuKDAuNDgsMC44NSk7fSk7Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0cy5wdXNoKENvbG9yU2NoZW1lLmNvbG9ycy5sZW5ndGgpO3B1c2hWYXJpYW50KGZ1bmN0aW9uKGMpe3JldHVybiBjLmxpZ2h0ZW4oMC42NSwwLjkpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0cz1bXTtDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmRpbW1lZE9mZnNldHMucHVzaChDb2xvclNjaGVtZS5jb2xvcnMubGVuZ3RoKTtwdXNoVmFyaWFudChmdW5jdGlvbihjKXtyZXR1cm4gYy5kZXNhdHVyYXRlKCk7fSk7Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzLnB1c2goQ29sb3JTY2hlbWUuY29sb3JzLmxlbmd0aCk7cHVzaFZhcmlhbnQoZnVuY3Rpb24oYyl7cmV0dXJuIGMuZGVzYXR1cmF0ZSgwLjUpO30pO0NvbG9yU2NoZW1lLnByb3BlcnRpZXMuZGltbWVkT2Zmc2V0cy5wdXNoKENvbG9yU2NoZW1lLmNvbG9ycy5sZW5ndGgpO3B1c2hWYXJpYW50KGZ1bmN0aW9uKGMpe3JldHVybiBjLmRlc2F0dXJhdGUoMC4zKTt9KTtDb2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3M9Q29sb3JTY2hlbWUuY29sb3JzLm1hcChmdW5jdGlvbihjKXtyZXR1cm4gYy50b1N0cmluZygpO30pO2NvbnN0IHJlc2VydmVkQ29sb3JOYW1lVG9JZE1hcD0oZnVuY3Rpb24oKXtjb25zdCBtPW5ldyBNYXAoKTtsZXQgaT1nZW5lcmFsUHVycG9zZUNvbG9ycy5sZW5ndGg7Zm9yKGNvbnN0IGtleSBvZiBPYmplY3Qua2V5cyhyZXNlcnZlZENvbG9yc0J5TmFtZSkpe20uc2V0KGtleSxpKyspO30KcmV0dXJuIG07fSkoKTtDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lPWZ1bmN0aW9uKG5hbWUpe2NvbnN0IGlkPXJlc2VydmVkQ29sb3JOYW1lVG9JZE1hcC5nZXQobmFtZSk7aWYoaWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGNvbG9yICcrbmFtZSk7fQpyZXR1cm4gaWQ7fTtDb2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nPWZ1bmN0aW9uKHJlc2VydmVkTmFtZSl7Y29uc3QgaWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZShyZXNlcnZlZE5hbWUpO3JldHVybiBDb2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3NbaWRdO307Q29sb3JTY2hlbWUuZ2V0U3RyaW5nSGFzaD1mdW5jdGlvbihuYW1lKXtsZXQgaGFzaD0wO2ZvcihsZXQgaT0wO2k8bmFtZS5sZW5ndGg7KytpKXtoYXNoPShoYXNoKzM3Kmhhc2grMTEqbmFtZS5jaGFyQ29kZUF0KGkpKSUweEZGRkZGRkZGO30KcmV0dXJuIGhhc2g7fTtjb25zdCBzdHJpbmdDb2xvcklkQ2FjaGU9bmV3IE1hcCgpO0NvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZz1mdW5jdGlvbihzdHJpbmcpe2lmKHN0cmluZ0NvbG9ySWRDYWNoZS5nZXQoc3RyaW5nKT09PXVuZGVmaW5lZCl7Y29uc3QgaGFzaD1Db2xvclNjaGVtZS5nZXRTdHJpbmdIYXNoKHN0cmluZyk7c3RyaW5nQ29sb3JJZENhY2hlLnNldChzdHJpbmcsaGFzaCVudW1HZW5lcmFsUHVycG9zZUNvbG9ySWRzKTt9CnJldHVybiBzdHJpbmdDb2xvcklkQ2FjaGUuZ2V0KHN0cmluZyk7fTtDb2xvclNjaGVtZS5nZXRBbm90aGVyQ29sb3JJZD1mdW5jdGlvbihjb2xvcklkLG4pe3JldHVybihjb2xvcklkK24pJW51bUNvbG9yc1BlclZhcmlhbnQ7fTtDb2xvclNjaGVtZS5nZXRWYXJpYW50Q29sb3JJZD1mdW5jdGlvbihjb2xvcklkLG9mZnNldCl7cmV0dXJuIGNvbG9ySWQrb2Zmc2V0O307cmV0dXJue0NvbG9yU2NoZW1lLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2Z1bmN0aW9uIEV2ZW50SW5mbyh0aXRsZSxkZXNjcmlwdGlvbixkb2NMaW5rcyl7dGhpcy50aXRsZT10aXRsZTt0aGlzLmRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uO3RoaXMuZG9jTGlua3M9ZG9jTGlua3M7dGhpcy5jb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyh0aXRsZSk7fQpyZXR1cm57RXZlbnRJbmZvLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2xldCBuZXh0R1VJRD0xO2NvbnN0IFVVSUQ0X1BBVFRFUk49J3h4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eCc7Y29uc3QgR1VJRD17YWxsb2NhdGVTaW1wbGUoKXtyZXR1cm4gbmV4dEdVSUQrKzt9LGdldExhc3RTaW1wbGVHdWlkKCl7cmV0dXJuIG5leHRHVUlELTE7fSxhbGxvY2F0ZVVVSUQ0KCl7cmV0dXJuIFVVSUQ0X1BBVFRFUk4ucmVwbGFjZSgvW3h5XS9nLGZ1bmN0aW9uKGMpe2xldCByPXBhcnNlSW50KE1hdGgucmFuZG9tKCkqMTYpO2lmKGM9PT0neScpcj0ociYzKSs4O3JldHVybiByLnRvU3RyaW5nKDE2KTt9KTt9fTtyZXR1cm57R1VJRCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRXZlbnRSZWdpc3RyeSgpe30KY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRXZlbnRSZWdpc3RyeSxvcHRpb25zKTtFdmVudFJlZ2lzdHJ5LmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IG1ldGFkYXRhPWUudHlwZUluZm8ubWV0YWRhdGE7aWYobWV0YWRhdGEubmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZWdpc3RlcmVkIGV2ZW50cyBtdXN0IHByb3ZpZGUgbmFtZSBtZXRhZGF0YScpO30KaWYobWV0YWRhdGEucGx1cmFsTmFtZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZWdpc3RlcmVkIGV2ZW50cyBtdXN0IHByb3ZpZGUgcGx1cmFsTmFtZSBtZXRhZGF0YScpO30KaWYobWV0YWRhdGEuc3ViVHlwZXM9PT11bmRlZmluZWQpe21ldGFkYXRhLnN1YlR5cGVzPXt9O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1lLnR5cGVJbmZvLmNvbnN0cnVjdG9yO29wdGlvbnMuZGVmYXVsdENvbnN0cnVjdG9yPWUudHlwZUluZm8uY29uc3RydWN0b3I7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KG1ldGFkYXRhLnN1YlR5cGVzLG9wdGlvbnMpO31lbHNle2lmKCFtZXRhZGF0YS5zdWJUeXBlcy5yZWdpc3Rlcil7dGhyb3cgbmV3IEVycm9yKCdtZXRhZGF0YS5zdWJUeXBlcyBtdXN0IGJlIGFuIGV4dGVuc2lvbiByZWdpc3RyeS4nKTt9fQplLnR5cGVJbmZvLmNvbnN0cnVjdG9yLnN1YlR5cGVzPW1ldGFkYXRhLnN1YlR5cGVzO30pO2xldCBldmVudHNCeVR5cGVOYW1lPXVuZGVmaW5lZDtFdmVudFJlZ2lzdHJ5LmdldEV2ZW50VHlwZUluZm9CeVR5cGVOYW1lPWZ1bmN0aW9uKHR5cGVOYW1lKXtpZihldmVudHNCeVR5cGVOYW1lPT09dW5kZWZpbmVkKXtldmVudHNCeVR5cGVOYW1lPXt9O0V2ZW50UmVnaXN0cnkuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8pe2V2ZW50c0J5VHlwZU5hbWVbdHlwZUluZm8ubWV0YWRhdGEubmFtZV09dHlwZUluZm87fSk7fQpyZXR1cm4gZXZlbnRzQnlUeXBlTmFtZVt0eXBlTmFtZV07fTtFdmVudFJlZ2lzdHJ5LmFkZEV2ZW50TGlzdGVuZXIoJ3JlZ2lzdHJ5LWNoYW5nZWQnLGZ1bmN0aW9uKCl7ZXZlbnRzQnlUeXBlTmFtZT11bmRlZmluZWQ7fSk7ZnVuY3Rpb24gY29udmVydENhbWVsQ2FzZVRvVGl0bGVDYXNlKG5hbWUpe2xldCByZXN1bHQ9bmFtZS5yZXBsYWNlKC9bQS1aXS9nLCcgJCYnKTtyZXN1bHQ9cmVzdWx0LmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK3Jlc3VsdC5zbGljZSgxKTtyZXR1cm4gcmVzdWx0O30KRXZlbnRSZWdpc3RyeS5nZXRVc2VyRnJpZW5kbHlTaW5ndWxhck5hbWU9ZnVuY3Rpb24odHlwZU5hbWUpe2NvbnN0IHR5cGVJbmZvPUV2ZW50UmVnaXN0cnkuZ2V0RXZlbnRUeXBlSW5mb0J5VHlwZU5hbWUodHlwZU5hbWUpO2NvbnN0IHN0cj10eXBlSW5mby5tZXRhZGF0YS5uYW1lO3JldHVybiBjb252ZXJ0Q2FtZWxDYXNlVG9UaXRsZUNhc2Uoc3RyKTt9O0V2ZW50UmVnaXN0cnkuZ2V0VXNlckZyaWVuZGx5UGx1cmFsTmFtZT1mdW5jdGlvbih0eXBlTmFtZSl7Y29uc3QgdHlwZUluZm89RXZlbnRSZWdpc3RyeS5nZXRFdmVudFR5cGVJbmZvQnlUeXBlTmFtZSh0eXBlTmFtZSk7Y29uc3Qgc3RyPXR5cGVJbmZvLm1ldGFkYXRhLnBsdXJhbE5hbWU7cmV0dXJuIGNvbnZlcnRDYW1lbENhc2VUb1RpdGxlQ2FzZShzdHIpO307cmV0dXJue0V2ZW50UmVnaXN0cnksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50UmVnaXN0cnk9dHIubW9kZWwuRXZlbnRSZWdpc3RyeTtjb25zdCBSZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQ9dHIuYi5FdmVudC5iaW5kKHVuZGVmaW5lZCwncmVxdWVzdFNlbGVjdGlvbkNoYW5nZScsdHJ1ZSxmYWxzZSk7ZnVuY3Rpb24gRXZlbnRTZXQob3B0X2V2ZW50cyl7dGhpcy5ib3VuZHNfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmV2ZW50c189bmV3IFNldCgpO3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7aWYob3B0X2V2ZW50cyl7aWYob3B0X2V2ZW50cyBpbnN0YW5jZW9mIEFycmF5KXtmb3IoY29uc3QgZXZlbnQgb2Ygb3B0X2V2ZW50cyl7dGhpcy5wdXNoKGV2ZW50KTt9fWVsc2UgaWYob3B0X2V2ZW50cyBpbnN0YW5jZW9mIEV2ZW50U2V0KXt0aGlzLmFkZEV2ZW50U2V0KG9wdF9ldmVudHMpO31lbHNle3RoaXMucHVzaChvcHRfZXZlbnRzKTt9fX0KRXZlbnRTZXQucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgYm91bmRzKCl7cmV0dXJuIHRoaXMuYm91bmRzXzt9LGdldCBkdXJhdGlvbigpe2lmKHRoaXMuYm91bmRzXy5pc0VtcHR5KXJldHVybiAwO3JldHVybiB0aGlzLmJvdW5kc18ubWF4LXRoaXMuYm91bmRzXy5taW47fSxnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZXZlbnRzXy5zaXplO30sZ2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LCpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmV2ZW50c18pe3lpZWxkIGV2ZW50O319LGNsZWFyKCl7dGhpcy5ib3VuZHNfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmV2ZW50c18uY2xlYXIoKTt9LHB1c2goLi4uZXZlbnRzKXtsZXQgbnVtUHVzaGVkO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50Lmd1aWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignRXZlbnQgbXVzdCBoYXZlIGEgR1VJRCcpO30KaWYoIXRoaXMuZXZlbnRzXy5oYXMoZXZlbnQpKXt0aGlzLmV2ZW50c18uYWRkKGV2ZW50KTtpZihldmVudC5hZGRCb3VuZHNUb1JhbmdlKXtpZih0aGlzLmJvdW5kc18hPT11bmRlZmluZWQpe2V2ZW50LmFkZEJvdW5kc1RvUmFuZ2UodGhpcy5ib3VuZHNfKTt9fX0KbnVtUHVzaGVkKys7fQpyZXR1cm4gbnVtUHVzaGVkO30sY29udGFpbnMoZXZlbnQpe2lmKHRoaXMuZXZlbnRzXy5oYXMoZXZlbnQpKXJldHVybiBldmVudDtyZXR1cm4gdW5kZWZpbmVkO30sYWRkRXZlbnRTZXQoZXZlbnRTZXQpe2Zvcihjb25zdCBldmVudCBvZiBldmVudFNldCl7dGhpcy5wdXNoKGV2ZW50KTt9fSxpbnRlcnNlY3Rpb25Jc0VtcHR5KG90aGVyRXZlbnRTZXQpe3JldHVybiF0aGlzLnNvbWUoZXZlbnQ9Pm90aGVyRXZlbnRTZXQuY29udGFpbnMoZXZlbnQpKTt9LGVxdWFscyh0aGF0KXtpZih0aGlzLmxlbmd0aCE9PXRoYXQubGVuZ3RoKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5ldmVyeShldmVudD0+dGhhdC5jb250YWlucyhldmVudCkpO30sc29ydEV2ZW50cyhjb21wYXJlKXtjb25zdCBhcnk9dGhpcy50b0FycmF5KCk7YXJ5LnNvcnQoY29tcGFyZSk7dGhpcy5jbGVhcigpO2Zvcihjb25zdCBldmVudCBvZiBhcnkpe3RoaXMucHVzaChldmVudCk7fX0sZ2V0RXZlbnRzT3JnYW5pemVkQnlCYXNlVHlwZShvcHRfcHJ1bmVFbXB0eSl7Y29uc3QgYWxsVHlwZUluZm9zPUV2ZW50UmVnaXN0cnkuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpO2NvbnN0IGV2ZW50cz10aGlzLmdldEV2ZW50c09yZ2FuaXplZEJ5Q2FsbGJhY2soZnVuY3Rpb24oZXZlbnQpe2xldCBtYXhFdmVudEluZGV4PS0xO2xldCBtYXhFdmVudFR5cGVJbmZvPXVuZGVmaW5lZDthbGxUeXBlSW5mb3MuZm9yRWFjaChmdW5jdGlvbihldmVudFR5cGVJbmZvLGV2ZW50SW5kZXgpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiBldmVudFR5cGVJbmZvLmNvbnN0cnVjdG9yKSlyZXR1cm47aWYoZXZlbnRJbmRleD5tYXhFdmVudEluZGV4KXttYXhFdmVudEluZGV4PWV2ZW50SW5kZXg7bWF4RXZlbnRUeXBlSW5mbz1ldmVudFR5cGVJbmZvO319KTtpZihtYXhFdmVudEluZGV4PT09LTEpe3Rocm93IG5ldyBFcnJvcihgVW5yZWNvZ25pemVkIGV2ZW50IHR5cGU6ICR7ZXZlbnQuY29uc3RydWN0b3IubmFtZX1gKTt9CnJldHVybiBtYXhFdmVudFR5cGVJbmZvLm1ldGFkYXRhLm5hbWU7fSk7aWYoIW9wdF9wcnVuZUVtcHR5KXthbGxUeXBlSW5mb3MuZm9yRWFjaChmdW5jdGlvbihldmVudFR5cGVJbmZvKXtpZihldmVudHNbZXZlbnRUeXBlSW5mby5tZXRhZGF0YS5uYW1lXT09PXVuZGVmaW5lZCl7ZXZlbnRzW2V2ZW50VHlwZUluZm8ubWV0YWRhdGEubmFtZV09bmV3IEV2ZW50U2V0KCk7fX0pO30KcmV0dXJuIGV2ZW50czt9LGdldEV2ZW50c09yZ2FuaXplZEJ5VGl0bGUoKXtyZXR1cm4gdGhpcy5nZXRFdmVudHNPcmdhbml6ZWRCeUNhbGxiYWNrKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC50aXRsZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdBbiBldmVudCBkaWRuXCd0IGhhdmUgYSB0aXRsZSEnKTt9CnJldHVybiBldmVudC50aXRsZTt9KTt9LGdldEV2ZW50c09yZ2FuaXplZEJ5Q2FsbGJhY2soY2Isb3B0X3RoaXMpe2NvbnN0IGdyb3VwZWRFdmVudHM9dHIuYi5ncm91cEludG9NYXAodGhpcyxjYixvcHRfdGhpc3x8dGhpcyk7Y29uc3QgZ3JvdXBlZEV2ZW50c0RpY3Q9e307Zm9yKGNvbnN0W2ssZXZlbnRzXW9mIGdyb3VwZWRFdmVudHMpe2dyb3VwZWRFdmVudHNEaWN0W2tdPW5ldyBFdmVudFNldChldmVudHMpO30KcmV0dXJuIGdyb3VwZWRFdmVudHNEaWN0O30sZW51bUV2ZW50c09mVHlwZSh0eXBlLGZ1bmMpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXtpZihldmVudCBpbnN0YW5jZW9mIHR5cGUpe2Z1bmMoZXZlbnQpO319fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe2lmKHRoaXMubGVuZ3RoPT09MCl7dGhyb3cgbmV3IEVycm9yKCdFbXB0eSBldmVudCBzZXQnKTt9CmNvbnN0IGV2ZW50c0J5QmFzZVR5cGU9dGhpcy5nZXRFdmVudHNPcmdhbml6ZWRCeUJhc2VUeXBlKHRydWUpO2NvbnN0IGV2ZW50VHlwZU5hbWU9T2JqZWN0LmtleXMoZXZlbnRzQnlCYXNlVHlwZSlbMF07aWYodGhpcy5sZW5ndGg9PT0xKXtjb25zdCB0bXA9RXZlbnRSZWdpc3RyeS5nZXRVc2VyRnJpZW5kbHlTaW5ndWxhck5hbWUoZXZlbnRUeXBlTmFtZSk7cmV0dXJuIHRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5ldmVudHNfKS51c2VyRnJpZW5kbHlOYW1lO30KY29uc3QgbnVtRXZlbnRUeXBlcz1PYmplY3Qua2V5cyhldmVudHNCeUJhc2VUeXBlKS5sZW5ndGg7aWYobnVtRXZlbnRUeXBlcyE9PTEpe3JldHVybiB0aGlzLmxlbmd0aCsnIGV2ZW50cyBvZiB2YXJpb3VzIHR5cGVzJzt9CmNvbnN0IHRtcD1FdmVudFJlZ2lzdHJ5LmdldFVzZXJGcmllbmRseVBsdXJhbE5hbWUoZXZlbnRUeXBlTmFtZSk7cmV0dXJuIHRoaXMubGVuZ3RoKycgJyt0bXA7fSxmaWx0ZXIoZm4sb3B0X3RoaXMpe2NvbnN0IHJlcz1uZXcgRXZlbnRTZXQoKTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7aWYoZm4uY2FsbChvcHRfdGhpcyxldmVudCkpe3Jlcy5wdXNoKGV2ZW50KTt9fQpyZXR1cm4gcmVzO30sdG9BcnJheSgpe2NvbnN0IGFyeT1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7YXJ5LnB1c2goZXZlbnQpO30KcmV0dXJuIGFyeTt9LGZvckVhY2goZm4sb3B0X3RoaXMpe2Zvcihjb25zdCBldmVudCBvZiB0aGlzKXtmbi5jYWxsKG9wdF90aGlzLGV2ZW50KTt9fSxtYXAoZm4sb3B0X3RoaXMpe2NvbnN0IHJlcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7cmVzLnB1c2goZm4uY2FsbChvcHRfdGhpcyxldmVudCkpO30KcmV0dXJuIHJlczt9LGV2ZXJ5KGZuLG9wdF90aGlzKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7aWYoIWZuLmNhbGwob3B0X3RoaXMsZXZlbnQpKXtyZXR1cm4gZmFsc2U7fX0KcmV0dXJuIHRydWU7fSxzb21lKGZuLG9wdF90aGlzKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7aWYoZm4uY2FsbChvcHRfdGhpcyxldmVudCkpe3JldHVybiB0cnVlO319CnJldHVybiBmYWxzZTt9LGFzRGljdCgpe2NvbnN0IHN0YWJsZUlkcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7c3RhYmxlSWRzLnB1c2goZXZlbnQuc3RhYmxlSWQpO30KcmV0dXJueydldmVudHMnOnN0YWJsZUlkc307fSxhc1NldCgpe3JldHVybiB0aGlzLmV2ZW50c187fX07RXZlbnRTZXQuSU1NVVRBQkxFX0VNUFRZX1NFVD0oZnVuY3Rpb24oKXtjb25zdCBzPW5ldyBFdmVudFNldCgpO3MucHVzaD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHB1c2ggdG8gYW4gaW1tdXRhYmxlIGV2ZW50IHNldCcpO307cy5hZGRFdmVudFNldD1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCB0byBhbiBpbW11dGFibGUgZXZlbnQgc2V0Jyk7fTtPYmplY3QuZnJlZXplKHMpO3JldHVybiBzO30pKCk7cmV0dXJue0V2ZW50U2V0LFJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBTZWxlY3Rpb25TdGF0ZT17Tk9ORTowLFNFTEVDVEVEOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHNbMF0sSElHSExJR0hURUQ6Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0c1sxXSxESU1NRUQ6Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzWzBdLEJSSUdIVEVORUQwOkNvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHNbMF0sQlJJR0hURU5FRDE6Q29sb3JTY2hlbWUucHJvcGVydGllcy5icmlnaHRlbmVkT2Zmc2V0c1sxXSxCUklHSFRFTkVEMjpDb2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzJdLERJTU1FRDA6Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzWzBdLERJTU1FRDE6Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzWzFdLERJTU1FRDI6Q29sb3JTY2hlbWUucHJvcGVydGllcy5kaW1tZWRPZmZzZXRzWzJdfTtjb25zdCBicmlnaHRlbmluZ0xldmVscz1bU2VsZWN0aW9uU3RhdGUuTk9ORSxTZWxlY3Rpb25TdGF0ZS5CUklHSFRFTkVEMCxTZWxlY3Rpb25TdGF0ZS5CUklHSFRFTkVEMSxTZWxlY3Rpb25TdGF0ZS5CUklHSFRFTkVEMl07U2VsZWN0aW9uU3RhdGUuZ2V0RnJvbUJyaWdodGVuaW5nTGV2ZWw9ZnVuY3Rpb24obGV2ZWwpe3JldHVybiBicmlnaHRlbmluZ0xldmVsc1tsZXZlbF07fTtjb25zdCBkaW1taW5nTGV2ZWxzPVtTZWxlY3Rpb25TdGF0ZS5ESU1NRUQwLFNlbGVjdGlvblN0YXRlLkRJTU1FRDEsU2VsZWN0aW9uU3RhdGUuRElNTUVEMl07U2VsZWN0aW9uU3RhdGUuZ2V0RnJvbURpbW1pbmdMZXZlbD1mdW5jdGlvbihsZXZlbCl7cmV0dXJuIGRpbW1pbmdMZXZlbHNbbGV2ZWxdO307cmV0dXJue1NlbGVjdGlvblN0YXRlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtmdW5jdGlvbiBTZWxlY3RhYmxlSXRlbShtb2RlbEl0ZW0pe3RoaXMubW9kZWxJdGVtXz1tb2RlbEl0ZW07fQpTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGU9e2dldCBtb2RlbEl0ZW0oKXtyZXR1cm4gdGhpcy5tb2RlbEl0ZW1fO30sZ2V0IHNlbGVjdGVkKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uU3RhdGU9PT1TZWxlY3Rpb25TdGF0ZS5TRUxFQ1RFRDt9LGFkZFRvU2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3QgbW9kZWxJdGVtPXRoaXMubW9kZWxJdGVtXztpZighbW9kZWxJdGVtKXJldHVybjtzZWxlY3Rpb24ucHVzaChtb2RlbEl0ZW0pO30sYWRkVG9UcmFja01hcChldmVudFRvVHJhY2tNYXAsdHJhY2spe2NvbnN0IG1vZGVsSXRlbT10aGlzLm1vZGVsSXRlbV87aWYoIW1vZGVsSXRlbSlyZXR1cm47ZXZlbnRUb1RyYWNrTWFwLmFkZEV2ZW50KG1vZGVsSXRlbSx0cmFjayk7fX07cmV0dXJue1NlbGVjdGFibGVJdGVtLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBTZWxlY3RhYmxlSXRlbT10ci5tb2RlbC5TZWxlY3RhYmxlSXRlbTtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtjb25zdCBJTU1VVEFCTEVfRU1QVFlfU0VUPXRyLm1vZGVsLkV2ZW50U2V0LklNTVVUQUJMRV9FTVBUWV9TRVQ7ZnVuY3Rpb24gRXZlbnQoKXtTZWxlY3RhYmxlSXRlbS5jYWxsKHRoaXMsdGhpcyk7dGhpcy5ndWlkXz10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt0aGlzLnNlbGVjdGlvblN0YXRlPVNlbGVjdGlvblN0YXRlLk5PTkU7dGhpcy5pbmZvPXVuZGVmaW5lZDt9CkV2ZW50LnByb3RvdHlwZT17X19wcm90b19fOlNlbGVjdGFibGVJdGVtLnByb3RvdHlwZSxnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCByYW5nZSgpe2NvbnN0IHJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLmFkZEJvdW5kc1RvUmFuZ2UocmFuZ2UpO3JldHVybiByYW5nZTt9LGFzc29jaWF0ZWRBbGVydHM6SU1NVVRBQkxFX0VNUFRZX1NFVCxhZGRBc3NvY2lhdGVkQWxlcnQoYWxlcnQpe2lmKHRoaXMuYXNzb2NpYXRlZEFsZXJ0cz09PUlNTVVUQUJMRV9FTVBUWV9TRVQpe3RoaXMuYXNzb2NpYXRlZEFsZXJ0cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt9CnRoaXMuYXNzb2NpYXRlZEFsZXJ0cy5wdXNoKGFsZXJ0KTt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe319O3JldHVybntFdmVudCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVGltZWRFdmVudChzdGFydCl7dHIubW9kZWwuRXZlbnQuY2FsbCh0aGlzKTt0aGlzLnN0YXJ0PXN0YXJ0O3RoaXMuZHVyYXRpb249MDt0aGlzLmNwdVN0YXJ0PXVuZGVmaW5lZDt0aGlzLmNwdUR1cmF0aW9uPXVuZGVmaW5lZDt0aGlzLmNvbnRleHRzPU9iamVjdC5mcmVlemUoW10pO30KVGltZWRFdmVudC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudC5wcm90b3R5cGUsZ2V0IGVuZCgpe3JldHVybiB0aGlzLnN0YXJ0K3RoaXMuZHVyYXRpb247fSxnZXQgYm91bmRzUmFuZ2UoKXtyZXR1cm4gdHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHRoaXMuc3RhcnQsdGhpcy5lbmQpO30sYWRkQm91bmRzVG9SYW5nZShyYW5nZSl7cmFuZ2UuYWRkVmFsdWUodGhpcy5zdGFydCk7cmFuZ2UuYWRkVmFsdWUodGhpcy5lbmQpO30sYm91bmRzKHRoYXQsb3B0X3ByZWNpc2lvblVuaXQpe2lmKG9wdF9wcmVjaXNpb25Vbml0PT09dW5kZWZpbmVkKXtvcHRfcHJlY2lzaW9uVW5pdD10ci5iLlRpbWVEaXNwbGF5TW9kZXMubXM7fQpjb25zdCBzdGFydHNCZWZvcmU9b3B0X3ByZWNpc2lvblVuaXQucm91bmRlZExlc3ModGhhdC5zdGFydCx0aGlzLnN0YXJ0KTtjb25zdCBlbmRzQWZ0ZXI9b3B0X3ByZWNpc2lvblVuaXQucm91bmRlZExlc3ModGhpcy5lbmQsdGhhdC5lbmQpO3JldHVybiFzdGFydHNCZWZvcmUmJiFlbmRzQWZ0ZXI7fX07cmV0dXJue1RpbWVkRXZlbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEFsZXJ0KGluZm8sc3RhcnQsb3B0X2Fzc29jaWF0ZWRFdmVudHMsb3B0X2FyZ3Mpe3RyLm1vZGVsLlRpbWVkRXZlbnQuY2FsbCh0aGlzLHN0YXJ0KTt0aGlzLmluZm89aW5mbzt0aGlzLmFyZ3M9b3B0X2FyZ3N8fHt9O3RoaXMuYXNzb2NpYXRlZEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQob3B0X2Fzc29jaWF0ZWRFdmVudHMpO3RoaXMuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtldmVudC5hZGRBc3NvY2lhdGVkQWxlcnQodGhpcyk7fSx0aGlzKTt9CkFsZXJ0LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlRpbWVkRXZlbnQucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0aGlzLmluZm8udGl0bGU7fSxnZXQgY29sb3JJZCgpe3JldHVybiB0aGlzLmluZm8uY29sb3JJZDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0FsZXJ0ICcrdGhpcy50aXRsZSsnIGF0ICcrCnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQodGhpcy5zdGFydCk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihBbGVydCx7bmFtZTonYWxlcnQnLHBsdXJhbE5hbWU6J2FsZXJ0cyd9KTtyZXR1cm57QWxlcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgU3RhdGlzdGljcz10ci5iLm1hdGguU3RhdGlzdGljcztjb25zdCBGUkFNRV9QRVJGX0NMQVNTPXtHT09EOidnb29kJyxCQUQ6J2JhZCcsVEVSUklCTEU6J3RlcnJpYmxlJyxORVVUUkFMOidnZW5lcmljX3dvcmsnfTtmdW5jdGlvbiBGcmFtZShhc3NvY2lhdGVkRXZlbnRzLHRocmVhZFRpbWVSYW5nZXMsb3B0X2FyZ3Mpe3RyLm1vZGVsLkV2ZW50LmNhbGwodGhpcyk7dGhpcy50aHJlYWRUaW1lUmFuZ2VzPXRocmVhZFRpbWVSYW5nZXM7dGhpcy5hc3NvY2lhdGVkRXZlbnRzPW5ldyB0ci5tb2RlbC5FdmVudFNldChhc3NvY2lhdGVkRXZlbnRzKTt0aGlzLmFyZ3M9b3B0X2FyZ3N8fHt9O3RoaXMudGl0bGU9J0ZyYW1lJzt0aGlzLnN0YXJ0PVN0YXRpc3RpY3MubWluKHRocmVhZFRpbWVSYW5nZXMsZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSk7dGhpcy5lbmQ9U3RhdGlzdGljcy5tYXgodGhyZWFkVGltZVJhbmdlcyxmdW5jdGlvbih4KXtyZXR1cm4geC5lbmQ7fSk7dGhpcy50b3RhbER1cmF0aW9uPVN0YXRpc3RpY3Muc3VtKHRocmVhZFRpbWVSYW5nZXMsZnVuY3Rpb24oeCl7cmV0dXJuIHguZW5kLXguc3RhcnQ7fSk7dGhpcy5wZXJmQ2xhc3M9RlJBTUVfUEVSRl9DTEFTUy5ORVVUUkFMO30KRnJhbWUucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnQucHJvdG90eXBlLHNldCBwZXJmQ2xhc3MocGVyZkNsYXNzKXt0aGlzLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZShwZXJmQ2xhc3MpO3RoaXMucGVyZkNsYXNzXz1wZXJmQ2xhc3M7fSxnZXQgcGVyZkNsYXNzKCl7cmV0dXJuIHRoaXMucGVyZkNsYXNzXzt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXt0aGlzLnN0YXJ0Kz1hbW91bnQ7dGhpcy5lbmQrPWFtb3VudDtmb3IobGV0IGk9MDtpPHRoaXMudGhyZWFkVGltZVJhbmdlcy5sZW5ndGg7aSsrKXt0aGlzLnRocmVhZFRpbWVSYW5nZXNbaV0uc3RhcnQrPWFtb3VudDt0aGlzLnRocmVhZFRpbWVSYW5nZXNbaV0uZW5kKz1hbW91bnQ7fX0sYWRkQm91bmRzVG9SYW5nZShyYW5nZSl7cmFuZ2UuYWRkVmFsdWUodGhpcy5zdGFydCk7cmFuZ2UuYWRkVmFsdWUodGhpcy5lbmQpO319O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoRnJhbWUse25hbWU6J2ZyYW1lJyxwbHVyYWxOYW1lOidmcmFtZXMnfSk7cmV0dXJue0ZyYW1lLEZSQU1FX1BFUkZfQ0xBU1MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7Y29uc3QgRnJhbWU9dHIubW9kZWwuRnJhbWU7Y29uc3QgU3RhdGlzdGljcz10ci5iLm1hdGguU3RhdGlzdGljcztjb25zdCBVSV9EUkFXX1RZUEU9e05PTkU6J25vbmUnLExFR0FDWTonbGVnYWN5JyxNQVJTSE1BTExPVzonbWFyc2htYWxsb3cnfTtjb25zdCBVSV9USFJFQURfRFJBV19OQU1FUz17J3BlcmZvcm1UcmF2ZXJzYWxzJzpVSV9EUkFXX1RZUEUuTEVHQUNZLCdDaG9yZW9ncmFwaGVyI2RvRnJhbWUnOlVJX0RSQVdfVFlQRS5NQVJTSE1BTExPV307Y29uc3QgUkVOREVSX1RIUkVBRF9EUkFXX05BTUU9J0RyYXdGcmFtZSc7Y29uc3QgUkVOREVSX1RIUkVBRF9JTkRFUF9EUkFXX05BTUU9J2RvRnJhbWUnO2NvbnN0IFJFTkRFUl9USFJFQURfUVVFVUVfTkFNRT0ncXVldWVCdWZmZXInO2NvbnN0IFJFTkRFUl9USFJFQURfU1dBUF9OQU1FPSdlZ2xTd2FwQnVmZmVycyc7Y29uc3QgVEhSRUFEX1NZTkNfTkFNRT0nc3luY0ZyYW1lU3RhdGUnO2Z1bmN0aW9uIGdldFNsaWNlc0ZvclRocmVhZFRpbWVSYW5nZXModGhyZWFkVGltZVJhbmdlcyl7Y29uc3QgcmV0PVtdO3RocmVhZFRpbWVSYW5nZXMuZm9yRWFjaChmdW5jdGlvbih0aHJlYWRUaW1lUmFuZ2Upe2NvbnN0IHNsaWNlcz1bXTt0aHJlYWRUaW1lUmFuZ2UudGhyZWFkLnNsaWNlR3JvdXAuaXRlclNsaWNlc0luVGltZVJhbmdlKGZ1bmN0aW9uKHNsaWNlKXtzbGljZXMucHVzaChzbGljZSk7fSx0aHJlYWRUaW1lUmFuZ2Uuc3RhcnQsdGhyZWFkVGltZVJhbmdlLmVuZCk7cmV0LnB1c2guYXBwbHkocmV0LHNsaWNlcyk7fSk7cmV0dXJuIHJldDt9CmZ1bmN0aW9uIG1ha2VGcmFtZSh0aHJlYWRUaW1lUmFuZ2VzLHN1cmZhY2VGbGluZ2VyKXtjb25zdCBhcmdzPXt9O2lmKHN1cmZhY2VGbGluZ2VyJiZzdXJmYWNlRmxpbmdlci5oYXNWc3luY3Mpe2NvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKHRocmVhZFRpbWVSYW5nZXMsZnVuY3Rpb24odGhyZWFkVGltZVJhbmdlcyl7cmV0dXJuIHRocmVhZFRpbWVSYW5nZXMuc3RhcnQ7fSk7YXJncy5kZWFkbGluZT1zdXJmYWNlRmxpbmdlci5nZXRGcmFtZURlYWRsaW5lKHN0YXJ0KTthcmdzLmZyYW1lS2lja29mZj1zdXJmYWNlRmxpbmdlci5nZXRGcmFtZUtpY2tvZmYoc3RhcnQpO30KY29uc3QgZXZlbnRzPWdldFNsaWNlc0ZvclRocmVhZFRpbWVSYW5nZXModGhyZWFkVGltZVJhbmdlcyk7cmV0dXJuIG5ldyBGcmFtZShldmVudHMsdGhyZWFkVGltZVJhbmdlcyxhcmdzKTt9CmZ1bmN0aW9uIGZpbmRPdmVybGFwcGluZ0RyYXdGcmFtZShyZW5kZXJUaHJlYWQsdWlEcmF3U2xpY2Upe2lmKCFyZW5kZXJUaHJlYWQpcmV0dXJuIHVuZGVmaW5lZDtsZXQgb3ZlcmxhcHBpbmdEcmF3RnJhbWU7Y29uc3Qgc2xpY2VzPXRyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHMocmVuZGVyVGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzLGZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gcmFuZ2Uuc3RhcnQ7fSxmdW5jdGlvbihyYW5nZSl7cmV0dXJuIHJhbmdlLmVuZDt9LHVpRHJhd1NsaWNlLnN0YXJ0LHVpRHJhd1NsaWNlLmVuZCxmdW5jdGlvbihydERyYXdTbGljZSl7aWYocnREcmF3U2xpY2UudGl0bGU9PT1SRU5ERVJfVEhSRUFEX0RSQVdfTkFNRSl7Y29uc3QgcnRTeW5jU2xpY2U9cnREcmF3U2xpY2UuZmluZERlc2NlbmRlbnRTbGljZShUSFJFQURfU1lOQ19OQU1FKTtpZihydFN5bmNTbGljZSYmcnRTeW5jU2xpY2Uuc3RhcnQ+PXVpRHJhd1NsaWNlLnN0YXJ0JiZydFN5bmNTbGljZS5lbmQ8PXVpRHJhd1NsaWNlLmVuZCl7b3ZlcmxhcHBpbmdEcmF3RnJhbWU9cnREcmF3U2xpY2U7fX19KTtyZXR1cm4gb3ZlcmxhcHBpbmdEcmF3RnJhbWU7fQpmdW5jdGlvbiBnZXRQcmVUcmF2ZXJzYWxXb3JrUmFuZ2VzKHVpVGhyZWFkKXtpZighdWlUaHJlYWQpcmV0dXJuW107Y29uc3QgcHJlRnJhbWVFdmVudHM9W107dWlUaHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYoc2xpY2UudGl0bGU9PT0nb2J0YWluVmlldyd8fHNsaWNlLnRpdGxlPT09J3NldHVwTGlzdEl0ZW0nfHxzbGljZS50aXRsZT09PSdkZWxpdmVySW5wdXRFdmVudCd8fHNsaWNlLnRpdGxlPT09J1JWIFNjcm9sbCcpe3ByZUZyYW1lRXZlbnRzLnB1c2goc2xpY2UpO319KTt1aVRocmVhZC5hc3luY1NsaWNlR3JvdXAuc2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe2lmKHNsaWNlLnRpdGxlPT09J2RlbGl2ZXJJbnB1dEV2ZW50Jyl7cHJlRnJhbWVFdmVudHMucHVzaChzbGljZSk7fX0pO3JldHVybiB0ci5iLm1hdGgubWVyZ2VSYW5nZXModHIuYi5tYXRoLmNvbnZlcnRFdmVudHNUb1JhbmdlcyhwcmVGcmFtZUV2ZW50cyksMyxmdW5jdGlvbihldmVudHMpe3JldHVybntzdGFydDpldmVudHNbMF0ubWluLGVuZDpldmVudHNbZXZlbnRzLmxlbmd0aC0xXS5tYXh9O30pO30KZnVuY3Rpb24gZ2V0RnJhbWVTdGFydFRpbWUodHJhdmVyc2FsU3RhcnQscHJlVHJhdmVyc2FsV29ya1Jhbmdlcyl7Y29uc3QgcHJlVHJhdmVyc2FsV29ya1JhbmdlPXRyLmIuZmluZENsb3Nlc3RJbnRlcnZhbEluU29ydGVkSW50ZXJ2YWxzKHByZVRyYXZlcnNhbFdvcmtSYW5nZXMsZnVuY3Rpb24ocmFuZ2Upe3JldHVybiByYW5nZS5zdGFydDt9LGZ1bmN0aW9uKHJhbmdlKXtyZXR1cm4gcmFuZ2UuZW5kO30sdHJhdmVyc2FsU3RhcnQsMyk7aWYocHJlVHJhdmVyc2FsV29ya1JhbmdlKXtyZXR1cm4gcHJlVHJhdmVyc2FsV29ya1JhbmdlLnN0YXJ0O30KcmV0dXJuIHRyYXZlcnNhbFN0YXJ0O30KZnVuY3Rpb24gZ2V0UnRGcmFtZUVuZFRpbWUocnREcmF3U2xpY2Upe2NvbnN0IHJ0UXVldWVTbGljZT1ydERyYXdTbGljZS5maW5kRGVzY2VuZGVudFNsaWNlKFJFTkRFUl9USFJFQURfUVVFVUVfTkFNRSk7aWYocnRRdWV1ZVNsaWNlKXtyZXR1cm4gcnRRdWV1ZVNsaWNlLmVuZDt9CmNvbnN0IHJ0U3dhcFNsaWNlPXJ0RHJhd1NsaWNlLmZpbmREZXNjZW5kZW50U2xpY2UoUkVOREVSX1RIUkVBRF9TV0FQX05BTUUpO2lmKHJ0U3dhcFNsaWNlKXtyZXR1cm4gcnRTd2FwU2xpY2UuZW5kO30KcmV0dXJuIHJ0RHJhd1NsaWNlLmVuZDt9CmZ1bmN0aW9uIGdldFVpVGhyZWFkRHJpdmVuRnJhbWVzKGFwcCl7aWYoIWFwcC51aVRocmVhZClyZXR1cm5bXTtsZXQgcHJlVHJhdmVyc2FsV29ya1Jhbmdlcz1bXTtpZihhcHAudWlEcmF3VHlwZT09PVVJX0RSQVdfVFlQRS5MRUdBQ1kpe3ByZVRyYXZlcnNhbFdvcmtSYW5nZXM9Z2V0UHJlVHJhdmVyc2FsV29ya1JhbmdlcyhhcHAudWlUaHJlYWQpO30KY29uc3QgZnJhbWVzPVtdO2FwcC51aVRocmVhZC5zbGljZUdyb3VwLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtpZighKHNsaWNlLnRpdGxlIGluIFVJX1RIUkVBRF9EUkFXX05BTUVTKSl7cmV0dXJuO30KY29uc3QgdGhyZWFkVGltZVJhbmdlcz1bXTtjb25zdCB1aVRocmVhZFRpbWVSYW5nZT17dGhyZWFkOmFwcC51aVRocmVhZCxzdGFydDpnZXRGcmFtZVN0YXJ0VGltZShzbGljZS5zdGFydCxwcmVUcmF2ZXJzYWxXb3JrUmFuZ2VzKSxlbmQ6c2xpY2UuZW5kfTt0aHJlYWRUaW1lUmFuZ2VzLnB1c2godWlUaHJlYWRUaW1lUmFuZ2UpO2NvbnN0IHJ0RHJhd1NsaWNlPWZpbmRPdmVybGFwcGluZ0RyYXdGcmFtZShhcHAucmVuZGVyVGhyZWFkLHNsaWNlKTtpZihydERyYXdTbGljZSl7Y29uc3QgcnRTeW5jU2xpY2U9cnREcmF3U2xpY2UuZmluZERlc2NlbmRlbnRTbGljZShUSFJFQURfU1lOQ19OQU1FKTtpZihydFN5bmNTbGljZSl7dWlUaHJlYWRUaW1lUmFuZ2UuZW5kPU1hdGgubWluKHVpVGhyZWFkVGltZVJhbmdlLmVuZCxydFN5bmNTbGljZS5zdGFydCk7fQp0aHJlYWRUaW1lUmFuZ2VzLnB1c2goe3RocmVhZDphcHAucmVuZGVyVGhyZWFkLHN0YXJ0OnJ0RHJhd1NsaWNlLnN0YXJ0LGVuZDpnZXRSdEZyYW1lRW5kVGltZShydERyYXdTbGljZSl9KTt9CmZyYW1lcy5wdXNoKG1ha2VGcmFtZSh0aHJlYWRUaW1lUmFuZ2VzLGFwcC5zdXJmYWNlRmxpbmdlcikpO30pO3JldHVybiBmcmFtZXM7fQpmdW5jdGlvbiBnZXRSZW5kZXJUaHJlYWREcml2ZW5GcmFtZXMoYXBwKXtpZighYXBwLnJlbmRlclRocmVhZClyZXR1cm5bXTtjb25zdCBmcmFtZXM9W107YXBwLnJlbmRlclRocmVhZC5zbGljZUdyb3VwLmdldFNsaWNlc09mTmFtZShSRU5ERVJfVEhSRUFEX0lOREVQX0RSQVdfTkFNRSkuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7Y29uc3QgdGhyZWFkVGltZVJhbmdlcz1be3RocmVhZDphcHAucmVuZGVyVGhyZWFkLHN0YXJ0OnNsaWNlLnN0YXJ0LGVuZDpzbGljZS5lbmR9XTtmcmFtZXMucHVzaChtYWtlRnJhbWUodGhyZWFkVGltZVJhbmdlcyxhcHAuc3VyZmFjZUZsaW5nZXIpKTt9KTtyZXR1cm4gZnJhbWVzO30KZnVuY3Rpb24gZ2V0VWlEcmF3VHlwZSh1aVRocmVhZCl7aWYoIXVpVGhyZWFkKXtyZXR1cm4gVUlfRFJBV19UWVBFLk5PTkU7fQpjb25zdCBzbGljZXM9dWlUaHJlYWQuc2xpY2VHcm91cC5zbGljZXM7Zm9yKGxldCBpPTA7aTxzbGljZXMubGVuZ3RoO2krKyl7aWYoc2xpY2VzW2ldLnRpdGxlIGluIFVJX1RIUkVBRF9EUkFXX05BTUVTKXtyZXR1cm4gVUlfVEhSRUFEX0RSQVdfTkFNRVNbc2xpY2VzW2ldLnRpdGxlXTt9fQpyZXR1cm4gVUlfRFJBV19UWVBFLk5PTkU7fQpmdW5jdGlvbiBnZXRJbnB1dFNhbXBsZXMocHJvY2Vzcyl7bGV0IHNhbXBsZXM9dW5kZWZpbmVkO2Zvcihjb25zdCBjb3VudGVyTmFtZSBpbiBwcm9jZXNzLmNvdW50ZXJzKXtpZigvXmFuZHJvaWRcLmFxXDpwZW5kaW5nLy50ZXN0KGNvdW50ZXJOYW1lKSYmcHJvY2Vzcy5jb3VudGVyc1tjb3VudGVyTmFtZV0ubnVtU2VyaWVzPT09MSl7c2FtcGxlcz1wcm9jZXNzLmNvdW50ZXJzW2NvdW50ZXJOYW1lXS5zZXJpZXNbMF0uc2FtcGxlczticmVhazt9fQppZighc2FtcGxlcylyZXR1cm5bXTtjb25zdCBpbnB1dFNhbXBsZXM9W107bGV0IGxhc3RWYWx1ZT0wO3NhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe2lmKHNhbXBsZS52YWx1ZT5sYXN0VmFsdWUpe2lucHV0U2FtcGxlcy5wdXNoKHNhbXBsZSk7fQpsYXN0VmFsdWU9c2FtcGxlLnZhbHVlO30pO3JldHVybiBpbnB1dFNhbXBsZXM7fQpmdW5jdGlvbiBnZXRBbmltYXRpb25Bc3luY1NsaWNlcyh1aVRocmVhZCl7aWYoIXVpVGhyZWFkKXJldHVybltdO2NvbnN0IHNsaWNlcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgdWlUaHJlYWQuYXN5bmNTbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoL15hbmltYXRvclw6Ly50ZXN0KHNsaWNlLnRpdGxlKSl7c2xpY2VzLnB1c2goc2xpY2UpO319CnJldHVybiBzbGljZXM7fQpmdW5jdGlvbiBBbmRyb2lkQXBwKHByb2Nlc3MsdWlUaHJlYWQscmVuZGVyVGhyZWFkLHN1cmZhY2VGbGluZ2VyLHVpRHJhd1R5cGUpe3RoaXMucHJvY2Vzcz1wcm9jZXNzO3RoaXMudWlUaHJlYWQ9dWlUaHJlYWQ7dGhpcy5yZW5kZXJUaHJlYWQ9cmVuZGVyVGhyZWFkO3RoaXMuc3VyZmFjZUZsaW5nZXI9c3VyZmFjZUZsaW5nZXI7dGhpcy51aURyYXdUeXBlPXVpRHJhd1R5cGU7dGhpcy5mcmFtZXNfPXVuZGVmaW5lZDt0aGlzLmlucHV0c189dW5kZWZpbmVkO30KQW5kcm9pZEFwcC5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZT1mdW5jdGlvbihwcm9jZXNzLHN1cmZhY2VGbGluZ2VyKXtsZXQgdWlUaHJlYWQ9cHJvY2Vzcy5nZXRUaHJlYWQocHJvY2Vzcy5waWQpO2NvbnN0IHVpRHJhd1R5cGU9Z2V0VWlEcmF3VHlwZSh1aVRocmVhZCk7aWYodWlEcmF3VHlwZT09PVVJX0RSQVdfVFlQRS5OT05FKXt1aVRocmVhZD11bmRlZmluZWQ7fQpjb25zdCByZW5kZXJUaHJlYWRzPXByb2Nlc3MuZmluZEFsbFRocmVhZHNOYW1lZCgnUmVuZGVyVGhyZWFkJyk7Y29uc3QgcmVuZGVyVGhyZWFkPShyZW5kZXJUaHJlYWRzLmxlbmd0aD09PTE/cmVuZGVyVGhyZWFkc1swXTp1bmRlZmluZWQpO2lmKHVpVGhyZWFkfHxyZW5kZXJUaHJlYWQpe3JldHVybiBuZXcgQW5kcm9pZEFwcChwcm9jZXNzLHVpVGhyZWFkLHJlbmRlclRocmVhZCxzdXJmYWNlRmxpbmdlcix1aURyYXdUeXBlKTt9fTtBbmRyb2lkQXBwLnByb3RvdHlwZT17Z2V0RnJhbWVzKCl7aWYoIXRoaXMuZnJhbWVzXyl7Y29uc3QgdWlGcmFtZXM9Z2V0VWlUaHJlYWREcml2ZW5GcmFtZXModGhpcyk7Y29uc3QgcnRGcmFtZXM9Z2V0UmVuZGVyVGhyZWFkRHJpdmVuRnJhbWVzKHRoaXMpO3RoaXMuZnJhbWVzXz11aUZyYW1lcy5jb25jYXQocnRGcmFtZXMpO3RoaXMuZnJhbWVzXy5zb3J0KGZ1bmN0aW9uKGEsYil7YS5lbmQtYi5lbmQ7fSk7fQpyZXR1cm4gdGhpcy5mcmFtZXNfO30sZ2V0SW5wdXRTYW1wbGVzKCl7aWYoIXRoaXMuaW5wdXRzXyl7dGhpcy5pbnB1dHNfPWdldElucHV0U2FtcGxlcyh0aGlzLnByb2Nlc3MpO30KcmV0dXJuIHRoaXMuaW5wdXRzXzt9LGdldEFuaW1hdGlvbkFzeW5jU2xpY2VzKCl7aWYoIXRoaXMuYW5pbWF0aW9uc18pe3RoaXMuYW5pbWF0aW9uc189Z2V0QW5pbWF0aW9uQXN5bmNTbGljZXModGhpcy51aVRocmVhZCk7fQpyZXR1cm4gdGhpcy5hbmltYXRpb25zXzt9fTtyZXR1cm57QW5kcm9pZEFwcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBmaW5kTG93SW5kZXhJblNvcnRlZEFycmF5PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheTtjb25zdCBWU1lOQ19TRl9OQU1FPSdhbmRyb2lkLlZTWU5DLXNmJztjb25zdCBWU1lOQ19BUFBfTkFNRT0nYW5kcm9pZC5WU1lOQy1hcHAnO2NvbnN0IFZTWU5DX0ZBTExCQUNLX05BTUU9J2FuZHJvaWQuVlNZTkMnO2NvbnN0IFRJTUVTVEFNUF9GVURHRV9NUz0wLjAxO2Z1bmN0aW9uIGdldFZzeW5jVGltZXN0YW1wcyhwcm9jZXNzLGNvdW50ZXJOYW1lKXtsZXQgdnN5bmM9cHJvY2Vzcy5jb3VudGVyc1tjb3VudGVyTmFtZV07aWYoIXZzeW5jKXt2c3luYz1wcm9jZXNzLmNvdW50ZXJzW1ZTWU5DX0ZBTExCQUNLX05BTUVdO30KaWYodnN5bmMmJnZzeW5jLm51bVNlcmllcz09PTEmJnZzeW5jLm51bVNhbXBsZXM+MSl7cmV0dXJuIHZzeW5jLnNlcmllc1swXS50aW1lc3RhbXBzO30KcmV0dXJuIHVuZGVmaW5lZDt9CmZ1bmN0aW9uIEFuZHJvaWRTdXJmYWNlRmxpbmdlcihwcm9jZXNzLHRocmVhZCl7dGhpcy5wcm9jZXNzPXByb2Nlc3M7dGhpcy50aHJlYWQ9dGhyZWFkO3RoaXMuYXBwVnN5bmNfPXVuZGVmaW5lZDt0aGlzLnNmVnN5bmNfPXVuZGVmaW5lZDt0aGlzLmFwcFZzeW5jVGltZXN0YW1wc189Z2V0VnN5bmNUaW1lc3RhbXBzKHByb2Nlc3MsVlNZTkNfQVBQX05BTUUpO3RoaXMuc2ZWc3luY1RpbWVzdGFtcHNfPWdldFZzeW5jVGltZXN0YW1wcyhwcm9jZXNzLFZTWU5DX1NGX05BTUUpO3RoaXMuZGVhZGxpbmVEZWxheU1zXz10aGlzLmFwcFZzeW5jVGltZXN0YW1wc18hPT10aGlzLnNmVnN5bmNUaW1lc3RhbXBzXz81OlRJTUVTVEFNUF9GVURHRV9NUzt9CkFuZHJvaWRTdXJmYWNlRmxpbmdlci5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZT1mdW5jdGlvbihwcm9jZXNzKXtjb25zdCBtYWluVGhyZWFkPXByb2Nlc3MuZ2V0VGhyZWFkKHByb2Nlc3MucGlkKTtpZihtYWluVGhyZWFkJiZtYWluVGhyZWFkLm5hbWUmJi9zdXJmYWNlZmxpbmdlci8udGVzdChtYWluVGhyZWFkLm5hbWUpKXtyZXR1cm4gbmV3IEFuZHJvaWRTdXJmYWNlRmxpbmdlcihwcm9jZXNzLG1haW5UaHJlYWQpO30KY29uc3QgcHJpbWFyeVRocmVhZHM9cHJvY2Vzcy5maW5kQWxsVGhyZWFkc05hbWVkKCdTdXJmYWNlRmxpbmdlcicpO2lmKHByaW1hcnlUaHJlYWRzLmxlbmd0aD09PTEpe3JldHVybiBuZXcgQW5kcm9pZFN1cmZhY2VGbGluZ2VyKHByb2Nlc3MscHJpbWFyeVRocmVhZHNbMF0pO30KcmV0dXJuIHVuZGVmaW5lZDt9O0FuZHJvaWRTdXJmYWNlRmxpbmdlci5wcm90b3R5cGU9e2dldCBoYXNWc3luY3MoKXtyZXR1cm4hIXRoaXMuYXBwVnN5bmNUaW1lc3RhbXBzXyYmISF0aGlzLnNmVnN5bmNUaW1lc3RhbXBzXzt9LGdldEZyYW1lS2lja29mZih0aW1lc3RhbXApe2lmKCF0aGlzLmhhc1ZzeW5jcyl7dGhyb3cgbmV3IEVycm9yKCdjYW5ub3QgcXVlcnkgdnN5bmMgaW5mbyB3aXRob3V0IHZzeW5jcycpO30KY29uc3QgZmlyc3RHcmVhdGVySW5kZXg9ZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLmFwcFZzeW5jVGltZXN0YW1wc18sZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSx0aW1lc3RhbXArVElNRVNUQU1QX0ZVREdFX01TKTtpZihmaXJzdEdyZWF0ZXJJbmRleDwxKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuYXBwVnN5bmNUaW1lc3RhbXBzX1tmaXJzdEdyZWF0ZXJJbmRleC0xXTt9LGdldEZyYW1lRGVhZGxpbmUodGltZXN0YW1wKXtpZighdGhpcy5oYXNWc3luY3Mpe3Rocm93IG5ldyBFcnJvcignY2Fubm90IHF1ZXJ5IHZzeW5jIGluZm8gd2l0aG91dCB2c3luY3MnKTt9CmNvbnN0IGZpcnN0R3JlYXRlckluZGV4PWZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zZlZzeW5jVGltZXN0YW1wc18sZnVuY3Rpb24oeCl7cmV0dXJuIHg7fSx0aW1lc3RhbXArdGhpcy5kZWFkbGluZURlbGF5TXNfKTtpZihmaXJzdEdyZWF0ZXJJbmRleD49dGhpcy5zZlZzeW5jVGltZXN0YW1wc18ubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMuc2ZWc3luY1RpbWVzdGFtcHNfW2ZpcnN0R3JlYXRlckluZGV4XTt9fTtyZXR1cm57QW5kcm9pZFN1cmZhY2VGbGluZ2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC5oZWxwZXJzJyxmdW5jdGlvbigpe2NvbnN0IEFuZHJvaWRBcHA9dHIubW9kZWwuaGVscGVycy5BbmRyb2lkQXBwO2NvbnN0IEFuZHJvaWRTdXJmYWNlRmxpbmdlcj10ci5tb2RlbC5oZWxwZXJzLkFuZHJvaWRTdXJmYWNlRmxpbmdlcjtjb25zdCBJTVBPUlRBTlRfU1VSRkFDRV9GTElOR0VSX1NMSUNFUz17J2RvQ29tcG9zaXRpb24nOnRydWUsJ3VwZGF0ZVRleEltYWdlJzp0cnVlLCdwb3N0RnJhbWVidWZmZXInOnRydWV9O2NvbnN0IElNUE9SVEFOVF9VSV9USFJFQURfU0xJQ0VTPXsnQ2hvcmVvZ3JhcGhlciNkb0ZyYW1lJzp0cnVlLCdwZXJmb3JtVHJhdmVyc2Fscyc6dHJ1ZSwnZGVsaXZlcklucHV0RXZlbnQnOnRydWV9O2NvbnN0IElNUE9SVEFOVF9SRU5ERVJfVEhSRUFEX1NMSUNFUz17J2RvRnJhbWUnOnRydWV9O2Z1bmN0aW9uIGl0ZXJhdGVJbXBvcnRhbnRUaHJlYWRTbGljZXModGhyZWFkLGltcG9ydGFudCxjYWxsYmFjayl7aWYoIXRocmVhZClyZXR1cm47dGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe2lmKHNsaWNlLnRpdGxlIGluIGltcG9ydGFudCl7Y2FsbGJhY2soc2xpY2UpO319KTt9CmZ1bmN0aW9uIEFuZHJvaWRNb2RlbEhlbHBlcihtb2RlbCl7dGhpcy5tb2RlbD1tb2RlbDt0aGlzLmFwcHM9W107dGhpcy5zdXJmYWNlRmxpbmdlcj11bmRlZmluZWQ7Y29uc3QgcHJvY2Vzc2VzPW1vZGVsLmdldEFsbFByb2Nlc3NlcygpO2ZvcihsZXQgaT0wO2k8cHJvY2Vzc2VzLmxlbmd0aCYmIXRoaXMuc3VyZmFjZUZsaW5nZXI7aSsrKXt0aGlzLnN1cmZhY2VGbGluZ2VyPUFuZHJvaWRTdXJmYWNlRmxpbmdlci5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZShwcm9jZXNzZXNbaV0pO30KbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkuZm9yRWFjaChmdW5jdGlvbihwcm9jZXNzKXtjb25zdCBhcHA9QW5kcm9pZEFwcC5jcmVhdGVGb3JQcm9jZXNzSWZQb3NzaWJsZShwcm9jZXNzLHRoaXMuc3VyZmFjZUZsaW5nZXIpO2lmKGFwcCl7dGhpcy5hcHBzLnB1c2goYXBwKTt9fSx0aGlzKTt9CkFuZHJvaWRNb2RlbEhlbHBlci5ndWlkPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO0FuZHJvaWRNb2RlbEhlbHBlci5zdXBwb3J0c01vZGVsPWZ1bmN0aW9uKG1vZGVsKXtyZXR1cm4gdHJ1ZTt9O0FuZHJvaWRNb2RlbEhlbHBlci5wcm90b3R5cGU9e2l0ZXJhdGVJbXBvcnRhbnRTbGljZXMoY2FsbGJhY2spe2lmKHRoaXMuc3VyZmFjZUZsaW5nZXIpe2l0ZXJhdGVJbXBvcnRhbnRUaHJlYWRTbGljZXModGhpcy5zdXJmYWNlRmxpbmdlci50aHJlYWQsSU1QT1JUQU5UX1NVUkZBQ0VfRkxJTkdFUl9TTElDRVMsY2FsbGJhY2spO30KdGhpcy5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXtpdGVyYXRlSW1wb3J0YW50VGhyZWFkU2xpY2VzKGFwcC51aVRocmVhZCxJTVBPUlRBTlRfVUlfVEhSRUFEX1NMSUNFUyxjYWxsYmFjayk7aXRlcmF0ZUltcG9ydGFudFRocmVhZFNsaWNlcyhhcHAucmVuZGVyVGhyZWFkLElNUE9SVEFOVF9SRU5ERVJfVEhSRUFEX1NMSUNFUyxjYWxsYmFjayk7fSk7fX07cmV0dXJue0FuZHJvaWRNb2RlbEhlbHBlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2xpY2UoY2F0ZWdvcnksdGl0bGUsY29sb3JJZCxzdGFydCxhcmdzLG9wdF9kdXJhdGlvbixvcHRfY3B1U3RhcnQsb3B0X2NwdUR1cmF0aW9uLG9wdF9hcmdzU3RyaXBwZWQsb3B0X2JpbmRJZCl7aWYobmV3LnRhcmdldCl7dGhyb3cgbmV3IEVycm9yKCdDYW5cJ3QgaW5zdGFudGlhdGUgcHVyZSB2aXJ0dWFsIGNsYXNzIFNsaWNlJyk7fQp0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeXx8Jyc7dGhpcy50aXRsZT10aXRsZTt0aGlzLmNvbG9ySWQ9Y29sb3JJZDt0aGlzLmFyZ3M9YXJnczt0aGlzLnN0YXJ0U3RhY2tGcmFtZT11bmRlZmluZWQ7dGhpcy5lbmRTdGFja0ZyYW1lPXVuZGVmaW5lZDt0aGlzLmRpZE5vdEZpbmlzaD1mYWxzZTt0aGlzLmluRmxvd0V2ZW50cz1bXTt0aGlzLm91dEZsb3dFdmVudHM9W107dGhpcy5zdWJTbGljZXM9W107dGhpcy5zZWxmVGltZT11bmRlZmluZWQ7dGhpcy5jcHVTZWxmVGltZT11bmRlZmluZWQ7dGhpcy5pbXBvcnRhbnQ9ZmFsc2U7dGhpcy5wYXJlbnRDb250YWluZXI9dW5kZWZpbmVkO3RoaXMuYXJnc1N0cmlwcGVkPWZhbHNlO3RoaXMuYmluZF9pZF89b3B0X2JpbmRJZDt0aGlzLnBhcmVudFNsaWNlPXVuZGVmaW5lZDt0aGlzLmlzVG9wTGV2ZWw9ZmFsc2U7aWYob3B0X2R1cmF0aW9uIT09dW5kZWZpbmVkKXt0aGlzLmR1cmF0aW9uPW9wdF9kdXJhdGlvbjt9CmlmKG9wdF9jcHVTdGFydCE9PXVuZGVmaW5lZCl7dGhpcy5jcHVTdGFydD1vcHRfY3B1U3RhcnQ7fQppZihvcHRfY3B1RHVyYXRpb24hPT11bmRlZmluZWQpe3RoaXMuY3B1RHVyYXRpb249b3B0X2NwdUR1cmF0aW9uO30KaWYob3B0X2FyZ3NTdHJpcHBlZCE9PXVuZGVmaW5lZCl7dGhpcy5hcmdzU3RyaXBwZWQ9dHJ1ZTt9fQpTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5UaW1lZEV2ZW50LnByb3RvdHlwZSxnZXQgYW5hbHlzaXNUeXBlTmFtZSgpe3JldHVybiB0aGlzLnRpdGxlO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nU2xpY2UgJyt0aGlzLnRpdGxlKycgYXQgJysKdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnN0YXJ0KTt9LGdldCBzdGFibGVJZCgpe2NvbnN0IHBhcmVudFNsaWNlR3JvdXA9dGhpcy5wYXJlbnRDb250YWluZXIuc2xpY2VHcm91cDtyZXR1cm4gcGFyZW50U2xpY2VHcm91cC5zdGFibGVJZCsnLicrCnBhcmVudFNsaWNlR3JvdXAuc2xpY2VzLmluZGV4T2YodGhpcyk7fSxnZXQgYmluZElkKCl7cmV0dXJuIHRoaXMuYmluZF9pZF87fSxmaW5kRGVzY2VuZGVudFNsaWNlKHRhcmdldFRpdGxlKXtpZighdGhpcy5zdWJTbGljZXMpe3JldHVybiB1bmRlZmluZWQ7fQpmb3IobGV0IGk9MDtpPHRoaXMuc3ViU2xpY2VzLmxlbmd0aDtpKyspe2lmKHRoaXMuc3ViU2xpY2VzW2ldLnRpdGxlPT09dGFyZ2V0VGl0bGUpe3JldHVybiB0aGlzLnN1YlNsaWNlc1tpXTt9CmNvbnN0IHNsaWNlPXRoaXMuc3ViU2xpY2VzW2ldLmZpbmREZXNjZW5kZW50U2xpY2UodGFyZ2V0VGl0bGUpO2lmKHNsaWNlKXJldHVybiBzbGljZTt9CnJldHVybiB1bmRlZmluZWQ7fSxnZXQgbW9zdFRvcExldmVsU2xpY2UoKXtpZighdGhpcy5wYXJlbnRTbGljZSlyZXR1cm4gdGhpcztyZXR1cm4gdGhpcy5wYXJlbnRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTt9LGdldFByb2Nlc3MoKXtjb25zdCB0aHJlYWQ9dGhpcy5wYXJlbnRDb250YWluZXI7aWYodGhyZWFkJiZ0aHJlYWQuZ2V0UHJvY2Vzcyl7cmV0dXJuIHRocmVhZC5nZXRQcm9jZXNzKCk7fQpyZXR1cm4gdW5kZWZpbmVkO30sZ2V0IG1vZGVsKCl7Y29uc3QgcHJvY2Vzcz10aGlzLmdldFByb2Nlc3MoKTtpZihwcm9jZXNzIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5nZXRQcm9jZXNzKCkubW9kZWw7fQpyZXR1cm4gdW5kZWZpbmVkO30sKmZpbmRUb3Btb3N0U2xpY2VzUmVsYXRpdmVUb1RoaXNTbGljZShldmVudFByZWRpY2F0ZSl7aWYoZXZlbnRQcmVkaWNhdGUodGhpcykpe3lpZWxkIHRoaXM7cmV0dXJuO30KZm9yKGNvbnN0IHMgb2YgdGhpcy5zdWJTbGljZXMpe3lpZWxkKnMuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlKTt9fSxpdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhjYWxsYmFjayxvcHRfdGhpcyl7Y29uc3QgcGFyZW50U3RhY2s9W107bGV0IHN0YXJ0ZWQ9ZmFsc2U7Y29uc3QgdG9wbW9zdFNsaWNlPXRoaXMubW9zdFRvcExldmVsU2xpY2U7cGFyZW50U3RhY2sucHVzaCh0b3Btb3N0U2xpY2UpO3doaWxlKHBhcmVudFN0YWNrLmxlbmd0aCE9PTApe2NvbnN0IGN1clNsaWNlPXBhcmVudFN0YWNrLnBvcCgpO2lmKHN0YXJ0ZWQpe2NhbGxiYWNrLmNhbGwob3B0X3RoaXMsY3VyU2xpY2UpO31lbHNle3N0YXJ0ZWQ9KGN1clNsaWNlLmd1aWQ9PT10aGlzLmd1aWQpO30KZm9yKGxldCBpPWN1clNsaWNlLnN1YlNsaWNlcy5sZW5ndGgtMTtpPj0wO2ktLSl7cGFyZW50U3RhY2sucHVzaChjdXJTbGljZS5zdWJTbGljZXNbaV0pO319fSxnZXQgc3Vic2VxdWVudFNsaWNlcygpe2NvbnN0IHJlcz1bXTt0aGlzLml0ZXJhdGVBbGxTdWJzZXF1ZW50U2xpY2VzKGZ1bmN0aW9uKHN1YnNlcVNsaWNlKXtyZXMucHVzaChzdWJzZXFTbGljZSk7fSk7cmV0dXJuIHJlczt9LCplbnVtZXJhdGVBbGxBbmNlc3RvcnMoKXtsZXQgY3VyU2xpY2U9dGhpcy5wYXJlbnRTbGljZTt3aGlsZShjdXJTbGljZSl7eWllbGQgY3VyU2xpY2U7Y3VyU2xpY2U9Y3VyU2xpY2UucGFyZW50U2xpY2U7fX0sZ2V0IGFuY2VzdG9yU2xpY2VzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy5lbnVtZXJhdGVBbGxBbmNlc3RvcnMoKSk7fSxpdGVyYXRlRW50aXJlSGllcmFyY2h5KGNhbGxiYWNrLG9wdF90aGlzKXtjb25zdCBtb3N0VG9wTGV2ZWxTbGljZT10aGlzLm1vc3RUb3BMZXZlbFNsaWNlO2NhbGxiYWNrLmNhbGwob3B0X3RoaXMsbW9zdFRvcExldmVsU2xpY2UpO21vc3RUb3BMZXZlbFNsaWNlLml0ZXJhdGVBbGxTdWJzZXF1ZW50U2xpY2VzKGNhbGxiYWNrLG9wdF90aGlzKTt9LGdldCBlbnRpcmVIaWVyYXJjaHkoKXtjb25zdCByZXM9W107dGhpcy5pdGVyYXRlRW50aXJlSGllcmFyY2h5KGZ1bmN0aW9uKHNsaWNlKXtyZXMucHVzaChzbGljZSk7fSk7cmV0dXJuIHJlczt9LGdldCBhbmNlc3RvckFuZFN1YnNlcXVlbnRTbGljZXMoKXtjb25zdCByZXM9W107cmVzLnB1c2godGhpcyk7Zm9yKGNvbnN0IGFTbGljZSBvZiB0aGlzLmVudW1lcmF0ZUFsbEFuY2VzdG9ycygpKXtyZXMucHVzaChhU2xpY2UpO30KdGhpcy5pdGVyYXRlQWxsU3Vic2VxdWVudFNsaWNlcyhmdW5jdGlvbihzU2xpY2Upe3Jlcy5wdXNoKHNTbGljZSk7fSk7cmV0dXJuIHJlczt9LCplbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnN1YlNsaWNlcyl7eWllbGQgc2xpY2U7fQpmb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy5zdWJTbGljZXMpe3lpZWxkKnNsaWNlLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCk7fX0sZ2V0IGRlc2NlbmRlbnRTbGljZXMoKXtjb25zdCByZXM9W107Zm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMoKSl7cmVzLnB1c2goc2xpY2UpO30KcmV0dXJuIHJlczt9fTtyZXR1cm57U2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFNsaWNlPXRyLm1vZGVsLlNsaWNlO2NvbnN0IFNDSEVEVUxJTkdfU1RBVEU9e0RFQlVHOidEZWJ1ZycsRVhJVF9ERUFEOidFeGl0IERlYWQnLFJVTk5BQkxFOidSdW5uYWJsZScsUlVOTklORzonUnVubmluZycsU0xFRVBJTkc6J1NsZWVwaW5nJyxTVE9QUEVEOidTdG9wcGVkJyxUQVNLX0RFQUQ6J1Rhc2sgRGVhZCcsVU5JTlRSX1NMRUVQOidVbmludGVycnVwdGlibGUgU2xlZXAnLFVOSU5UUl9TTEVFUF9XQUtFX0tJTEw6J1VuaW50ZXJydXB0aWJsZSBTbGVlcCB8IFdha2VLaWxsJyxVTklOVFJfU0xFRVBfV0FLSU5HOidVbmludGVycnVwdGlibGUgU2xlZXAgfCBXYWtpbmcnLFVOSU5UUl9TTEVFUF9JTzonVW5pbnRlcnJ1cHRpYmxlIFNsZWVwIC0gQmxvY2sgSS9PJyxVTklOVFJfU0xFRVBfV0FLRV9LSUxMX0lPOidVbmludGVycnVwdGlibGUgU2xlZXAgfCBXYWtlS2lsbCAtIEJsb2NrIEkvTycsVU5JTlRSX1NMRUVQX1dBS0lOR19JTzonVW5pbnRlcnJ1cHRpYmxlIFNsZWVwIHwgV2FraW5nIC0gQmxvY2sgSS9PJyxVTktOT1dOOidVTktOT1dOJyxXQUtFX0tJTEw6J1dha2VraWxsJyxXQUtJTkc6J1dha2luZycsWk9NQklFOidab21iaWUnfTtmdW5jdGlvbiBUaHJlYWRUaW1lU2xpY2UodGhyZWFkLHNjaGVkdWxpbmdTdGF0ZSxjYXQsc3RhcnQsYXJncyxvcHRfZHVyYXRpb24pe1NsaWNlLmNhbGwodGhpcyxjYXQsc2NoZWR1bGluZ1N0YXRlLHRoaXMuZ2V0Q29sb3JGb3JTdGF0ZV8oc2NoZWR1bGluZ1N0YXRlKSxzdGFydCxhcmdzLG9wdF9kdXJhdGlvbik7dGhpcy50aHJlYWQ9dGhyZWFkO3RoaXMuc2NoZWR1bGluZ1N0YXRlPXNjaGVkdWxpbmdTdGF0ZTt0aGlzLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nPXVuZGVmaW5lZDt9ClRocmVhZFRpbWVTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpTbGljZS5wcm90b3R5cGUsZ2V0Q29sb3JGb3JTdGF0ZV8oc3RhdGUpe2NvbnN0IGdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWU9dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lO3N3aXRjaChzdGF0ZSl7Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlJVTk5BQkxFOnJldHVybiBnZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCd0aHJlYWRfc3RhdGVfcnVubmFibGUnKTtjYXNlIFNDSEVEVUxJTkdfU1RBVEUuUlVOTklORzpyZXR1cm4gZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgndGhyZWFkX3N0YXRlX3J1bm5pbmcnKTtjYXNlIFNDSEVEVUxJTkdfU1RBVEUuU0xFRVBJTkc6cmV0dXJuIGdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3RocmVhZF9zdGF0ZV9zbGVlcGluZycpO2Nhc2UgU0NIRURVTElOR19TVEFURS5ERUJVRzpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuRVhJVF9ERUFEOmNhc2UgU0NIRURVTElOR19TVEFURS5TVE9QUEVEOmNhc2UgU0NIRURVTElOR19TVEFURS5UQVNLX0RFQUQ6Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUDpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0VfS0lMTDpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0lORzpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuVU5LTk9XTjpjYXNlIFNDSEVEVUxJTkdfU1RBVEUuV0FLRV9LSUxMOmNhc2UgU0NIRURVTElOR19TVEFURS5XQUtJTkc6Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlpPTUJJRTpyZXR1cm4gZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgndGhyZWFkX3N0YXRlX3VuaW50ZXJydXB0aWJsZScpO2Nhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfSU86Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtFX0tJTExfSU86Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtJTkdfSU86cmV0dXJuIGdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3RocmVhZF9zdGF0ZV9pb3dhaXQnKTtkZWZhdWx0OnJldHVybiBnZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCd0aHJlYWRfc3RhdGVfdW5rbm93bicpO319LGdldCBhbmFseXNpc1R5cGVOYW1lKCl7cmV0dXJuJ3RyLnVpLmFuYWx5c2lzLlRocmVhZFRpbWVTbGljZSc7fSxnZXRBc3NvY2lhdGVkQ3B1U2xpY2UoKXtpZighdGhpcy5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGNwdVNsaWNlcz10aGlzLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nLnNsaWNlcztmb3IobGV0IGk9MDtpPGNwdVNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCBjcHVTbGljZT1jcHVTbGljZXNbaV07aWYoY3B1U2xpY2Uuc3RhcnQhPT10aGlzLnN0YXJ0KWNvbnRpbnVlO2lmKGNwdVNsaWNlLmR1cmF0aW9uIT09dGhpcy5kdXJhdGlvbiljb250aW51ZTtyZXR1cm4gY3B1U2xpY2U7fQpyZXR1cm4gdW5kZWZpbmVkO30sZ2V0Q3B1U2xpY2VUaGF0VG9va0NwdSgpe2lmKHRoaXMuY3B1T25XaGljaFRocmVhZFdhc1J1bm5pbmcpcmV0dXJuIHVuZGVmaW5lZDtsZXQgY3VySW5kZXg9dGhpcy50aHJlYWQuaW5kZXhPZlRpbWVTbGljZSh0aGlzKTtsZXQgY3B1U2xpY2VXaGVuTGFzdFJ1bm5pbmc7d2hpbGUoY3VySW5kZXg+PTApe2NvbnN0IGN1clNsaWNlPXRoaXMudGhyZWFkLnRpbWVTbGljZXNbY3VySW5kZXhdO2lmKCFjdXJTbGljZS5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZyl7Y3VySW5kZXgtLTtjb250aW51ZTt9CmNwdVNsaWNlV2hlbkxhc3RSdW5uaW5nPWN1clNsaWNlLmdldEFzc29jaWF0ZWRDcHVTbGljZSgpO2JyZWFrO30KaWYoIWNwdVNsaWNlV2hlbkxhc3RSdW5uaW5nKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgY3B1PWNwdVNsaWNlV2hlbkxhc3RSdW5uaW5nLmNwdTtjb25zdCBpbmRleE9mU2xpY2VPbkNwdVdoZW5MYXN0UnVubmluZz1jcHUuaW5kZXhPZihjcHVTbGljZVdoZW5MYXN0UnVubmluZyk7Y29uc3QgbmV4dFJ1bm5pbmdTbGljZT1jcHUuc2xpY2VzW2luZGV4T2ZTbGljZU9uQ3B1V2hlbkxhc3RSdW5uaW5nKzFdO2lmKCFuZXh0UnVubmluZ1NsaWNlKXJldHVybiB1bmRlZmluZWQ7aWYoTWF0aC5hYnMobmV4dFJ1bm5pbmdTbGljZS5zdGFydC1jcHVTbGljZVdoZW5MYXN0UnVubmluZy5lbmQpPDAuMDAwMDEpe3JldHVybiBuZXh0UnVubmluZ1NsaWNlO30KcmV0dXJuIHVuZGVmaW5lZDt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFRocmVhZFRpbWVTbGljZSx7bmFtZTondGhyZWFkVGltZVNsaWNlJyxwbHVyYWxOYW1lOid0aHJlYWRUaW1lU2xpY2VzJ30pO3JldHVybntUaHJlYWRUaW1lU2xpY2UsU0NIRURVTElOR19TVEFURSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlPXtOT1RfU0VMRUNURUQ6MCxFVkVOVF9TRUxFQ1RFRDoweDEsU09NRV9BU1NPQ0lBVEVEX0VWRU5UU19TRUxFQ1RFRDoweDIsQUxMX0FTU09DSUFURURfRVZFTlRTX1NFTEVDVEVEOjB4NCxFVkVOVF9BTkRfU09NRV9BU1NPQ0lBVEVEX1NFTEVDVEVEOjB4MXwweDIsRVZFTlRfQU5EX0FMTF9BU1NPQ0lBVEVEX1NFTEVDVEVEOjB4MXwweDR9O3JldHVybntDb21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2NvbnN0IENvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5Db21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGU7ZnVuY3Rpb24gVXNlckV4cGVjdGF0aW9uKHBhcmVudE1vZGVsLGluaXRpYXRvclR5cGUsc3RhcnQsZHVyYXRpb24pe3RyLm1vZGVsLlRpbWVkRXZlbnQuY2FsbCh0aGlzLHN0YXJ0KTt0aGlzLmFzc29jaWF0ZWRFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5kdXJhdGlvbj1kdXJhdGlvbjt0aGlzLmluaXRpYXRvclR5cGVfPWluaXRpYXRvclR5cGU7dGhpcy5wYXJlbnRNb2RlbD1wYXJlbnRNb2RlbDt0aGlzLnR5cGVJbmZvXz11bmRlZmluZWQ7dGhpcy5zb3VyY2VFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7fQpjb25zdCBJTklUSUFUT1JfVFlQRT17S0VZQk9BUkQ6J0tleWJvYXJkJyxNT1VTRTonTW91c2UnLE1PVVNFX1dIRUVMOidNb3VzZVdoZWVsJyxUQVA6J1RhcCcsUElOQ0g6J1BpbmNoJyxGTElORzonRmxpbmcnLFRPVUNIOidUb3VjaCcsU0NST0xMOidTY3JvbGwnLENTUzonQ1NTJyxXRUJHTDonV2ViR0wnLFZJREVPOidWaWRlbycsVlI6J1ZSJyx9O1VzZXJFeHBlY3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5UaW1lZEV2ZW50LnByb3RvdHlwZSxjb21wdXRlQ29tcG91bmRFdmVuU2VsZWN0aW9uU3RhdGUoc2VsZWN0aW9uKXtsZXQgY2Vzcz1Db21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUuTk9UX1NFTEVDVEVEO2lmKHNlbGVjdGlvbi5jb250YWlucyh0aGlzKSl7Y2Vzc3w9Q29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlLkVWRU5UX1NFTEVDVEVEO30KaWYodGhpcy5hc3NvY2lhdGVkRXZlbnRzLmludGVyc2VjdGlvbklzRW1wdHkoc2VsZWN0aW9uKSl7cmV0dXJuIGNlc3M7fQpjb25zdCBhbGxDb250YWluZWQ9dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmV2ZXJ5KGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gc2VsZWN0aW9uLmNvbnRhaW5zKGV2ZW50KTt9KTtpZihhbGxDb250YWluZWQpe2Nlc3N8PUNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZS5BTExfQVNTT0NJQVRFRF9FVkVOVFNfU0VMRUNURUQ7fWVsc2V7Y2Vzc3w9Q29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlLlNPTUVfQVNTT0NJQVRFRF9FVkVOVFNfU0VMRUNURUQ7fQpyZXR1cm4gY2Vzczt9LGdldCBhc3NvY2lhdGVkU2FtcGxlcygpe2NvbnN0IHNhbXBsZXM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuVGhyZWFkU2xpY2Upe3NhbXBsZXMuYWRkRXZlbnRTZXQoZXZlbnQub3ZlcmxhcHBpbmdTYW1wbGVzKTt9fSk7cmV0dXJuIHNhbXBsZXM7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybiB0aGlzLnRpdGxlKycgVXNlciBFeHBlY3RhdGlvbiBhdCAnKwp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuKCdVc2VyRXhwZWN0YXRpb24uJyt0aGlzLmd1aWQpO30sZ2V0IHR5cGVJbmZvKCl7aWYoIXRoaXMudHlwZUluZm9fKXt0aGlzLnR5cGVJbmZvXz1Vc2VyRXhwZWN0YXRpb24uc3ViVHlwZXMuZmluZFR5cGVJbmZvKHRoaXMuY29uc3RydWN0b3IpO30KaWYoIXRoaXMudHlwZUluZm9fKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVnaXN0ZXJlZCBVc2VyRXhwZWN0YXRpb24nKTt9CnJldHVybiB0aGlzLnR5cGVJbmZvXzt9LGdldCBjb2xvcklkKCl7cmV0dXJuIHRoaXMudHlwZUluZm8ubWV0YWRhdGEuY29sb3JJZDt9LGdldCBzdGFnZVRpdGxlKCl7cmV0dXJuIHRoaXMudHlwZUluZm8ubWV0YWRhdGEuc3RhZ2VUaXRsZTt9LGdldCBpbml0aWF0b3JUeXBlKCl7cmV0dXJuIHRoaXMuaW5pdGlhdG9yVHlwZV87fSxnZXQgdGl0bGUoKXtpZighdGhpcy5pbml0aWF0b3JUeXBlKXtyZXR1cm4gdGhpcy5zdGFnZVRpdGxlO30KcmV0dXJuIHRoaXMuaW5pdGlhdG9yVHlwZSsnICcrdGhpcy5zdGFnZVRpdGxlO30sZ2V0IHRvdGFsQ3B1TXMoKXtsZXQgY3B1TXM9MDt0aGlzLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoZXZlbnQuY3B1U2VsZlRpbWUpe2NwdU1zKz1ldmVudC5jcHVTZWxmVGltZTt9fSk7cmV0dXJuIGNwdU1zO319O2NvbnN0IHN1YlR5cGVzPXt9O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KHN1YlR5cGVzLG9wdGlvbnMpO3N1YlR5cGVzLmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IG1ldGFkYXRhPWUudHlwZUluZm8ubWV0YWRhdGE7aWYobWV0YWRhdGEuc3RhZ2VUaXRsZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZWdpc3RlcmVkIFVzZXJFeHBlY3RhdGlvbnMgbXVzdCBwcm92aWRlICcrJ3N0YWdlVGl0bGUnKTt9CmlmKG1ldGFkYXRhLmNvbG9ySWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBVc2VyRXhwZWN0YXRpb25zIG11c3QgcHJvdmlkZSAnKydjb2xvcklkJyk7fX0pO3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoVXNlckV4cGVjdGF0aW9uLHtuYW1lOid1c2VyRXhwZWN0YXRpb24nLHBsdXJhbE5hbWU6J3VzZXJFeHBlY3RhdGlvbnMnLHN1YlR5cGVzfSk7cmV0dXJue1VzZXJFeHBlY3RhdGlvbixJTklUSUFUT1JfVFlQRSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVzcG9uc2VFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbixvcHRfaXNBbmltYXRpb25CZWdpbil7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbik7dGhpcy5pc0FuaW1hdGlvbkJlZ2luPW9wdF9pc0FuaW1hdGlvbkJlZ2lufHxmYWxzZTt9ClJlc3BvbnNlRXhwZWN0YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnByb3RvdHlwZSxjb25zdHJ1Y3RvcjpSZXNwb25zZUV4cGVjdGF0aW9ufTt0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24uc3ViVHlwZXMucmVnaXN0ZXIoUmVzcG9uc2VFeHBlY3RhdGlvbix7c3RhZ2VUaXRsZTonUmVzcG9uc2UnLGNvbG9ySWQ6dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdyYWlsX3Jlc3BvbnNlJyl9KTtyZXR1cm57UmVzcG9uc2VFeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5hdWRpdHMnLGZ1bmN0aW9uKCl7Y29uc3QgU0NIRURVTElOR19TVEFURT10ci5tb2RlbC5TQ0hFRFVMSU5HX1NUQVRFO2NvbnN0IEF1ZGl0b3I9dHIuYy5BdWRpdG9yO2NvbnN0IEFuZHJvaWRNb2RlbEhlbHBlcj10ci5tb2RlbC5oZWxwZXJzLkFuZHJvaWRNb2RlbEhlbHBlcjtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFN0YXRpc3RpY3M9dHIuYi5tYXRoLlN0YXRpc3RpY3M7Y29uc3QgRlJBTUVfUEVSRl9DTEFTUz10ci5tb2RlbC5GUkFNRV9QRVJGX0NMQVNTO2NvbnN0IEFsZXJ0PXRyLm1vZGVsLkFsZXJ0O2NvbnN0IEV2ZW50SW5mbz10ci5tb2RlbC5FdmVudEluZm87Y29uc3QgU2NhbGFyPXRyLmIuU2NhbGFyO2NvbnN0IHRpbWVEdXJhdGlvbkluTXM9dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zO2NvbnN0IEVYUEVDVEVEX0ZSQU1FX1RJTUVfTVM9MTYuNjc7ZnVuY3Rpb24gZ2V0U3RhcnQoZSl7cmV0dXJuIGUuc3RhcnQ7fQpmdW5jdGlvbiBnZXREdXJhdGlvbihlKXtyZXR1cm4gZS5kdXJhdGlvbjt9CmZ1bmN0aW9uIGdldENwdUR1cmF0aW9uKGUpe3JldHVybihlLmNwdUR1cmF0aW9uIT09dW5kZWZpbmVkKT9lLmNwdUR1cmF0aW9uOmUuZHVyYXRpb247fQpmdW5jdGlvbiBmcmFtZUlzQWN0aXZpdHlTdGFydChmcmFtZSl7cmV0dXJuIGZyYW1lLmFzc29jaWF0ZWRFdmVudHMuYW55KHg9PngudGl0bGU9PT0nYWN0aXZpdHlTdGFydCcpO30KZnVuY3Rpb24gZnJhbWVNaXNzZWREZWFkbGluZShmcmFtZSl7cmV0dXJuIGZyYW1lLmFyZ3MuZGVhZGxpbmUmJmZyYW1lLmFyZ3MuZGVhZGxpbmU8ZnJhbWUuZW5kO30KZnVuY3Rpb24gRG9jTGlua0J1aWxkZXIoKXt0aGlzLmRvY0xpbmtzPVtdO30KRG9jTGlua0J1aWxkZXIucHJvdG90eXBlPXthZGRBcHBWaWRlbyhuYW1lLHZpZGVvSWQpe3RoaXMuZG9jTGlua3MucHVzaCh7bGFiZWw6J1ZpZGVvIExpbmsnLHRleHRDb250ZW50OignQW5kcm9pZCBQZXJmb3JtYW5jZSBQYXR0ZXJuczogJytuYW1lKSxocmVmOidodHRwczovL3d3dy55b3V0dWJlLmNvbS93YXRjaD9saXN0PVBMV3o1ckoyRUtLYzlDQnhyM0JWalBUUG9EUExkUElGQ0Umdj0nK3ZpZGVvSWR9KTtyZXR1cm4gdGhpczt9LGFkZERhY1JlZihuYW1lLGxpbmspe3RoaXMuZG9jTGlua3MucHVzaCh7bGFiZWw6J0RvYyBMaW5rJyx0ZXh0Q29udGVudDoobmFtZSsnIGRvY3VtZW50YXRpb24nKSxocmVmOidodHRwczovL2RldmVsb3Blci5hbmRyb2lkLmNvbS9yZWZlcmVuY2UvJytsaW5rfSk7cmV0dXJuIHRoaXM7fSxidWlsZCgpe3JldHVybiB0aGlzLmRvY0xpbmtzO319O2Z1bmN0aW9uIEFuZHJvaWRBdWRpdG9yKG1vZGVsKXtBdWRpdG9yLmNhbGwodGhpcyxtb2RlbCk7Y29uc3QgaGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKEFuZHJvaWRNb2RlbEhlbHBlcik7aWYoaGVscGVyLmFwcHMubGVuZ3RofHxoZWxwZXIuc3VyZmFjZUZsaW5nZXIpe3RoaXMuaGVscGVyPWhlbHBlcjt9fQpBbmRyb2lkQXVkaXRvci52aWV3QWxwaGFBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0luZWZmaWNpZW50IFZpZXcgYWxwaGEgdXNhZ2UnLCdTZXR0aW5nIGFuIGFscGhhIGJldHdlZW4gMCBhbmQgMSBoYXMgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgY29zdHMsIGlmIG9uZSBvZiB0aGUgZmFzdCBhbHBoYSBwYXRocyBpcyBub3QgdXNlZC4nLG5ldyBEb2NMaW5rQnVpbGRlcigpLmFkZEFwcFZpZGVvKCdIaWRkZW4gQ29zdCBvZiBUcmFuc3BhcmVuY3knLCd3SXk4Zzh5TmhOaycpLmFkZERhY1JlZignVmlldyNzZXRBbHBoYSgpJywnYW5kcm9pZC92aWV3L1ZpZXcuaHRtbCNzZXRBbHBoYShmbG9hdCknKS5idWlsZCgpKTtBbmRyb2lkQXVkaXRvci5zYXZlTGF5ZXJBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0V4cGVuc2l2ZSByZW5kZXJpbmcgd2l0aCBDYW52YXMjc2F2ZUxheWVyKCknLCdDYW52YXMjc2F2ZUxheWVyKCkgaW5jdXJzIGV4dHJlbWVseSBoaWdoIHJlbmRlcmluZyBjb3N0LiBUaGV5IGRpc3J1cHQgdGhlIHJlbmRlcmluZyBwaXBlbGluZSB3aGVuIGRyYXduLCBmb3JjaW5nIGEgZmx1c2ggb2YgZHJhd2luZyBjb250ZW50LiBJbnN0ZWFkIHVzZSBWaWV3IGhhcmR3YXJlIGxheWVycywgb3Igc3RhdGljIEJpdG1hcHMuIFRoaXMgZW5hYmxlcyB0aGUgb2Zmc2NyZWVuIGJ1ZmZlcnMgdG8gYmUgcmV1c2VkIGluIGJldHdlZW4gZnJhbWVzLCBhbmQgYXZvaWRzIHRoZSBkaXNydXB0aXZlIHJlbmRlciB0YXJnZXQgc3dpdGNoLicsbmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkQXBwVmlkZW8oJ0hpZGRlbiBDb3N0IG9mIFRyYW5zcGFyZW5jeScsJ3dJeThnOHlOaE5rJykuYWRkRGFjUmVmKCdDYW52YXMjc2F2ZUxheWVyQWxwaGEoKScsJ2FuZHJvaWQvZ3JhcGhpY3MvQ2FudmFzLmh0bWwjc2F2ZUxheWVyQWxwaGEoYW5kcm9pZC5ncmFwaGljcy5SZWN0RiwgaW50LCBpbnQpJykuYnVpbGQoKSk7QW5kcm9pZEF1ZGl0b3IuZ2V0U2F2ZUxheWVyQWxlcnRzXz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgYmFkQWxwaGFSZWdFeD0vXiguKykgYWxwaGEgY2F1c2VkICh1bmNsaXBwZWQgKT9zYXZlTGF5ZXIgKFxkKyl4KFxkKykkLztjb25zdCBzYXZlTGF5ZXJSZWdFeD0vXih1bmNsaXBwZWQgKT9zYXZlTGF5ZXIgKFxkKyl4KFxkKykkLztjb25zdCByZXQ9W107Y29uc3QgZXZlbnRzPVtdO2ZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7Y29uc3QgbWF0Y2g9YmFkQWxwaGFSZWdFeC5leGVjKHNsaWNlLnRpdGxlKTtpZihtYXRjaCl7Y29uc3QgYXJncz17J3ZpZXcgbmFtZSc6bWF0Y2hbMV0sJ3dpZHRoJzpwYXJzZUludChtYXRjaFszXSksJ2hlaWdodCc6cGFyc2VJbnQobWF0Y2hbNF0pfTtyZXQucHVzaChuZXcgQWxlcnQoQW5kcm9pZEF1ZGl0b3Iudmlld0FscGhhQWxlcnRJbmZvXyxzbGljZS5zdGFydCxbc2xpY2VdLGFyZ3MpKTt9ZWxzZSBpZihzYXZlTGF5ZXJSZWdFeC50ZXN0KHNsaWNlLnRpdGxlKSl7ZXZlbnRzLnB1c2goc2xpY2UpO319LHRoaXMpO2lmKGV2ZW50cy5sZW5ndGg+cmV0Lmxlbmd0aCl7Y29uc3QgdW5jbGlwcGVkU2Vlbj1TdGF0aXN0aWNzLnN1bShldmVudHMsZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzYXZlTGF5ZXJSZWdFeC5leGVjKHNsaWNlLnRpdGxlKVsxXT8xOjA7fSk7Y29uc3QgY2xpcHBlZFNlZW49ZXZlbnRzLmxlbmd0aC11bmNsaXBwZWRTZWVuO2NvbnN0IGVhcmxpZXN0U3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2Uuc3RhcnQ7fSk7Y29uc3QgYXJncz17J1VuY2xpcHBlZCBzYXZlTGF5ZXIgY291bnQgKGVzcGVjaWFsbHkgYmFkISknOnVuY2xpcHBlZFNlZW4sJ0NsaXBwZWQgc2F2ZUxheWVyIGNvdW50JzpjbGlwcGVkU2Vlbn07ZXZlbnRzLnB1c2goZnJhbWUpO3JldC5wdXNoKG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci5zYXZlTGF5ZXJBbGVydEluZm9fLGVhcmxpZXN0U3RhcnQsZXZlbnRzLGFyZ3MpKTt9CnJldHVybiByZXQ7fTtBbmRyb2lkQXVkaXRvci5wYXRoQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdQYXRoIHRleHR1cmUgY2h1cm4nLCdQYXRocyBhcmUgZHJhd24gd2l0aCBhIG1hc2sgdGV4dHVyZSwgc28gd2hlbiBhIHBhdGggaXMgbW9kaWZpZWQgLyBuZXdseSBkcmF3biwgdGhhdCB0ZXh0dXJlIG11c3QgYmUgZ2VuZXJhdGVkIGFuZCB1cGxvYWRlZCB0byB0aGUgR1BVLiBFbnN1cmUgdGhhdCB5b3UgY2FjaGUgcGF0aHMgYmV0d2VlbiBmcmFtZXMgYW5kIGRvIG5vdCB1bm5lY2Vzc2FyaWx5IGNhbGwgUGF0aCNyZXNldCgpLiBZb3UgY2FuIGN1dCBkb3duIG9uIHRoaXMgY29zdCBieSBzaGFyaW5nIFBhdGggb2JqZWN0IGluc3RhbmNlcyBiZXR3ZWVuIGRyYXdhYmxlcy92aWV3cy4nKTtBbmRyb2lkQXVkaXRvci5nZXRQYXRoQWxlcnRfPWZ1bmN0aW9uKGZyYW1lKXtjb25zdCB1cGxvYWRSZWdFeD0vXkdlbmVyYXRlIFBhdGggVGV4dHVyZSQvO2NvbnN0IGV2ZW50cz1mcmFtZS5hc3NvY2lhdGVkRXZlbnRzLmZpbHRlcihmdW5jdGlvbihldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09J0dlbmVyYXRlIFBhdGggVGV4dHVyZSc7fSk7Y29uc3Qgc3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGdldFN0YXJ0KTtjb25zdCBkdXJhdGlvbj1TdGF0aXN0aWNzLnN1bShldmVudHMsZ2V0RHVyYXRpb24pO2lmKGR1cmF0aW9uPDMpcmV0dXJuIHVuZGVmaW5lZDtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci5wYXRoQWxlcnRJbmZvXyxzdGFydCxldmVudHMseydUaW1lIHNwZW50JzpuZXcgU2NhbGFyKHRpbWVEdXJhdGlvbkluTXMsZHVyYXRpb24pfSk7fTtBbmRyb2lkQXVkaXRvci51cGxvYWRBbGVydEluZm9fPW5ldyBFdmVudEluZm8oJ0V4cGVuc2l2ZSBCaXRtYXAgdXBsb2FkcycsJ0JpdG1hcHMgdGhhdCBoYXZlIGJlZW4gbW9kaWZpZWQgLyBuZXdseSBkcmF3biBtdXN0IGJlIHVwbG9hZGVkIHRvIHRoZSBHUFUuIFNpbmNlIHRoaXMgaXMgZXhwZW5zaXZlIGlmIHRoZSB0b3RhbCBudW1iZXIgb2YgcGl4ZWxzIHVwbG9hZGVkIGlzIGxhcmdlLCByZWR1Y2UgdGhlIGFtb3VudCBvZiBCaXRtYXAgY2h1cm4gaW4gdGhpcyBhbmltYXRpb24vY29udGV4dCwgcGVyIGZyYW1lLicpO0FuZHJvaWRBdWRpdG9yLmdldFVwbG9hZEFsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgdXBsb2FkUmVnRXg9L15VcGxvYWQgKFxkKyl4KFxkKykgVGV4dHVyZSQvO2NvbnN0IGV2ZW50cz1bXTtsZXQgc3RhcnQ9TnVtYmVyLlBPU0lUSVZFX0lORklOSVRZO2xldCBkdXJhdGlvbj0wO2xldCBwaXhlbHNVcGxvYWRlZD0wO2ZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y29uc3QgbWF0Y2g9dXBsb2FkUmVnRXguZXhlYyhldmVudC50aXRsZSk7aWYobWF0Y2gpe2V2ZW50cy5wdXNoKGV2ZW50KTtzdGFydD1NYXRoLm1pbihzdGFydCxldmVudC5zdGFydCk7ZHVyYXRpb24rPWV2ZW50LmR1cmF0aW9uO3BpeGVsc1VwbG9hZGVkKz1wYXJzZUludChtYXRjaFsxXSkqcGFyc2VJbnQobWF0Y2hbMl0pO319KTtpZihldmVudHMubGVuZ3RoPT09MHx8ZHVyYXRpb248MylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IG1QaXhlbHM9KHBpeGVsc1VwbG9hZGVkLzEwMDAwMDApLnRvRml4ZWQoMikrJyBtaWxsaW9uJztjb25zdCBhcmdzPXsnUGl4ZWxzIHVwbG9hZGVkJzptUGl4ZWxzLCdUaW1lIHNwZW50JzpuZXcgU2NhbGFyKHRpbWVEdXJhdGlvbkluTXMsZHVyYXRpb24pfTtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci51cGxvYWRBbGVydEluZm9fLHN0YXJ0LGV2ZW50cyxhcmdzKTt9O0FuZHJvaWRBdWRpdG9yLkxpc3RWaWV3SW5mbGF0ZUFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnSW5mbGF0aW9uIGR1cmluZyBMaXN0VmlldyByZWN5Y2xpbmcnLCdMaXN0VmlldyBpdGVtIHJlY3ljbGluZyBpbnZvbHZlZCBpbmZsYXRpbmcgdmlld3MuIEVuc3VyZSB5b3VyIEFkYXB0ZXIjZ2V0VmlldygpIHJlY3ljbGVzIHRoZSBpbmNvbWluZyBWaWV3LCBpbnN0ZWFkIG9mIGNvbnN0cnVjdGluZyBhIG5ldyBvbmUuJyk7QW5kcm9pZEF1ZGl0b3IuTGlzdFZpZXdCaW5kQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdJbmVmZmljaWVudCBMaXN0VmlldyByZWN5Y2xpbmcvcmViaW5kaW5nJywnTGlzdFZpZXcgcmVjeWNsaW5nIHRha2luZyB0b28gbXVjaCB0aW1lIHBlciBmcmFtZS4gRW5zdXJlIHlvdXIgQWRhcHRlciNnZXRWaWV3KCkgYmluZHMgZGF0YSBlZmZpY2llbnRseS4nKTtBbmRyb2lkQXVkaXRvci5nZXRMaXN0Vmlld0FsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgZXZlbnRzPWZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZmlsdGVyKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nb2J0YWluVmlldyd8fGV2ZW50LnRpdGxlPT09J3NldHVwTGlzdEl0ZW0nO30pO2NvbnN0IGR1cmF0aW9uPVN0YXRpc3RpY3Muc3VtKGV2ZW50cyxnZXRDcHVEdXJhdGlvbik7aWYoZXZlbnRzLmxlbmd0aD09PTB8fGR1cmF0aW9uPDMpcmV0dXJuIHVuZGVmaW5lZDtsZXQgaGFzSW5mbGF0aW9uPWZhbHNlO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LmZpbmREZXNjZW5kZW50U2xpY2UoJ2luZmxhdGUnKSl7aGFzSW5mbGF0aW9uPXRydWU7fX0KY29uc3Qgc3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGdldFN0YXJ0KTtjb25zdCBhcmdzPXsnVGltZSBzcGVudCc6bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLGR1cmF0aW9uKX07YXJnc1snTGlzdFZpZXcgaXRlbXMgJysoaGFzSW5mbGF0aW9uPydpbmZsYXRlZCc6J3JlYm91bmQnKV09ZXZlbnRzLmxlbmd0aC8yO2NvbnN0IGV2ZW50SW5mbz1oYXNJbmZsYXRpb24/QW5kcm9pZEF1ZGl0b3IuTGlzdFZpZXdJbmZsYXRlQWxlcnRJbmZvXzpBbmRyb2lkQXVkaXRvci5MaXN0Vmlld0JpbmRBbGVydEluZm9fO2V2ZW50cy5wdXNoKGZyYW1lKTtyZXR1cm4gbmV3IEFsZXJ0KGV2ZW50SW5mbyxzdGFydCxldmVudHMsYXJncyk7fTtBbmRyb2lkQXVkaXRvci5tZWFzdXJlTGF5b3V0QWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdFeHBlbnNpdmUgbWVhc3VyZS9sYXlvdXQgcGFzcycsJ01lYXN1cmUvTGF5b3V0IHRvb2sgYSBzaWduaWZpY2FudCB0aW1lLCBjb250cmlidXRpbmcgdG8gamFuay4gQXZvaWQgdHJpZ2dlcmluZyBsYXlvdXQgZHVyaW5nIGFuaW1hdGlvbnMuJyxuZXcgRG9jTGlua0J1aWxkZXIoKS5hZGRBcHBWaWRlbygnSW52YWxpZGF0aW9ucywgTGF5b3V0cywgYW5kIFBlcmZvcm1hbmNlJywnd2U2cG9QMGt3NkUnKS5idWlsZCgpKTtBbmRyb2lkQXVkaXRvci5nZXRNZWFzdXJlTGF5b3V0QWxlcnRfPWZ1bmN0aW9uKGZyYW1lKXtjb25zdCBldmVudHM9ZnJhbWUuYXNzb2NpYXRlZEV2ZW50cy5maWx0ZXIoZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PSdtZWFzdXJlJ3x8ZXZlbnQudGl0bGU9PT0nbGF5b3V0Jzt9KTtjb25zdCBkdXJhdGlvbj1TdGF0aXN0aWNzLnN1bShldmVudHMsZ2V0Q3B1RHVyYXRpb24pO2lmKGV2ZW50cy5sZW5ndGg9PT0wfHxkdXJhdGlvbjwzKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc3RhcnQ9U3RhdGlzdGljcy5taW4oZXZlbnRzLGdldFN0YXJ0KTtldmVudHMucHVzaChmcmFtZSk7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci5tZWFzdXJlTGF5b3V0QWxlcnRJbmZvXyxzdGFydCxldmVudHMseydUaW1lIHNwZW50JzpuZXcgU2NhbGFyKHRpbWVEdXJhdGlvbkluTXMsZHVyYXRpb24pfSk7fTtBbmRyb2lkQXVkaXRvci52aWV3RHJhd0FsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnTG9uZyBWaWV3I2RyYXcoKScsJ1JlY29yZGluZyB0aGUgZHJhd2luZyBjb21tYW5kcyBvZiBpbnZhbGlkYXRlZCBWaWV3cyB0b29rIGEgbG9uZyB0aW1lLiBBdm9pZCBzaWduaWZpY2FudCB3b3JrIGluIFZpZXcgb3IgRHJhd2FibGUgY3VzdG9tIGRyYXdpbmcsIGVzcGVjaWFsbHkgYWxsb2NhdGlvbnMgb3IgZHJhd2luZyB0byBCaXRtYXBzLicsbmV3IERvY0xpbmtCdWlsZGVyKCkuYWRkQXBwVmlkZW8oJ0ludmFsaWRhdGlvbnMsIExheW91dHMsIGFuZCBQZXJmb3JtYW5jZScsJ3dlNnBvUDBrdzZFJykuYWRkQXBwVmlkZW8oJ0F2b2lkaW5nIEFsbG9jYXRpb25zIGluIG9uRHJhdygpJywnSEFLNWFjSFE1M0UnKS5idWlsZCgpKTtBbmRyb2lkQXVkaXRvci5nZXRWaWV3RHJhd0FsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7bGV0IHNsaWNlPXVuZGVmaW5lZDtmb3IoY29uc3QgZXZlbnQgb2YgZnJhbWUuYXNzb2NpYXRlZEV2ZW50cyl7aWYoZXZlbnQudGl0bGU9PT0nZ2V0RGlzcGxheUxpc3QnfHxldmVudC50aXRsZT09PSdSZWNvcmQgVmlldyNkcmF3KCknKXtzbGljZT1ldmVudDticmVhazt9fQppZighc2xpY2V8fGdldENwdUR1cmF0aW9uKHNsaWNlKTwzKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyBBbGVydChBbmRyb2lkQXVkaXRvci52aWV3RHJhd0FsZXJ0SW5mb18sc2xpY2Uuc3RhcnQsW3NsaWNlLGZyYW1lXSx7J1RpbWUgc3BlbnQnOm5ldyBTY2FsYXIodGltZUR1cmF0aW9uSW5NcyxnZXRDcHVEdXJhdGlvbihzbGljZSkpfSk7fTtBbmRyb2lkQXVkaXRvci5ibG9ja2luZ0djQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdCbG9ja2luZyBHYXJiYWdlIENvbGxlY3Rpb24nLCdCbG9ja2luZyBHQ3MgYXJlIGNhdXNlZCBieSBvYmplY3QgY2h1cm4sIGFuZCBtYWRlIHdvcnNlIGJ5IGhhdmluZyBsYXJnZSBudW1iZXJzIG9mIG9iamVjdHMgaW4gdGhlIGhlYXAuIEF2b2lkIGFsbG9jYXRpbmcgb2JqZWN0cyBkdXJpbmcgYW5pbWF0aW9ucy9zY3JvbGxpbmcsIGFuZCByZWN5Y2xlIEJpdG1hcHMgdG8gYXZvaWQgdHJpZ2dlcmluZyBnYXJiYWdlIGNvbGxlY3Rpb24uJyxuZXcgRG9jTGlua0J1aWxkZXIoKS5hZGRBcHBWaWRlbygnR2FyYmFnZSBDb2xsZWN0aW9uIGluIEFuZHJvaWQnLCdwemZ6ejUwVzVVbycpLmFkZEFwcFZpZGVvKCdBdm9pZGluZyBBbGxvY2F0aW9ucyBpbiBvbkRyYXcoKScsJ0hBSzVhY0hRNTNFJykuYnVpbGQoKSk7QW5kcm9pZEF1ZGl0b3IuZ2V0QmxvY2tpbmdHY0FsZXJ0Xz1mdW5jdGlvbihmcmFtZSl7Y29uc3QgZXZlbnRzPWZyYW1lLmFzc29jaWF0ZWRFdmVudHMuZmlsdGVyKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nRFZNIFN1c3BlbmQnfHxldmVudC50aXRsZT09PSdHQzogV2FpdCBGb3IgQ29uY3VycmVudCc7fSk7Y29uc3QgYmxvY2tlZER1cmF0aW9uPVN0YXRpc3RpY3Muc3VtKGV2ZW50cyxnZXREdXJhdGlvbik7aWYoYmxvY2tlZER1cmF0aW9uPDMpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBzdGFydD1TdGF0aXN0aWNzLm1pbihldmVudHMsZ2V0U3RhcnQpO2V2ZW50cy5wdXNoKGZyYW1lKTtyZXR1cm4gbmV3IEFsZXJ0KEFuZHJvaWRBdWRpdG9yLmJsb2NraW5nR2NBbGVydEluZm9fLHN0YXJ0LGV2ZW50cyx7J0Jsb2NrZWQgZHVyYXRpb24nOm5ldyBTY2FsYXIodGltZUR1cmF0aW9uSW5NcyxibG9ja2VkRHVyYXRpb24pfSk7fTtBbmRyb2lkQXVkaXRvci5sb2NrQ29udGVudGlvbkFsZXJ0SW5mb189bmV3IEV2ZW50SW5mbygnTG9jayBjb250ZW50aW9uJywnVUkgdGhyZWFkIGxvY2sgY29udGVudGlvbiBpcyBjYXVzZWQgd2hlbiBhbm90aGVyIHRocmVhZCBob2xkcyBhIGxvY2sgdGhhdCB0aGUgVUkgdGhyZWFkIGlzIHRyeWluZyB0byB1c2UuIFVJIHRocmVhZCBwcm9ncmVzcyBpcyBibG9ja2VkIHVudGlsIHRoZSBsb2NrIGlzIHJlbGVhc2VkLiBJbnNwZWN0IGxvY2tpbmcgZG9uZSB3aXRoaW4gdGhlIFVJIHRocmVhZCwgYW5kIGVuc3VyZSBjcml0aWNhbCBzZWN0aW9ucyBhcmUgc2hvcnQuJyk7QW5kcm9pZEF1ZGl0b3IuZ2V0TG9ja0NvbnRlbnRpb25BbGVydF89ZnVuY3Rpb24oZnJhbWUpe2NvbnN0IGV2ZW50cz1mcmFtZS5hc3NvY2lhdGVkRXZlbnRzLmZpbHRlcihmdW5jdGlvbihldmVudCl7cmV0dXJuL15Mb2NrIENvbnRlbnRpb24gb24gLy50ZXN0KGV2ZW50LnRpdGxlKTt9KTtjb25zdCBibG9ja2VkRHVyYXRpb249U3RhdGlzdGljcy5zdW0oZXZlbnRzLGdldER1cmF0aW9uKTtpZihibG9ja2VkRHVyYXRpb248MSlyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHN0YXJ0PVN0YXRpc3RpY3MubWluKGV2ZW50cyxnZXRTdGFydCk7ZXZlbnRzLnB1c2goZnJhbWUpO3JldHVybiBuZXcgQWxlcnQoQW5kcm9pZEF1ZGl0b3IubG9ja0NvbnRlbnRpb25BbGVydEluZm9fLHN0YXJ0LGV2ZW50cyx7J0Jsb2NrZWQgZHVyYXRpb24nOm5ldyBTY2FsYXIodGltZUR1cmF0aW9uSW5NcyxibG9ja2VkRHVyYXRpb24pfSk7fTtBbmRyb2lkQXVkaXRvci5zY2hlZHVsaW5nQWxlcnRJbmZvXz1uZXcgRXZlbnRJbmZvKCdTY2hlZHVsaW5nIGRlbGF5JywnV29yayB0byBwcm9kdWNlIHRoaXMgZnJhbWUgd2FzIGRlc2NoZWR1bGVkIGZvciBzZXZlcmFsIG1pbGxpc2Vjb25kcywgY29udHJpYnV0aW5nIHRvIGphbmsuIEVuc3VyZSB0aGF0IGNvZGUgb24gdGhlIFVJIHRocmVhZCBkb2VzblwndCBibG9jayBvbiB3b3JrIGJlaW5nIGRvbmUgb24gb3RoZXIgdGhyZWFkcywgYW5kIHRoYXQgYmFja2dyb3VuZCB0aHJlYWRzIChkb2luZyBlLmcuIG5ldHdvcmsgb3IgYml0bWFwIGxvYWRpbmcpIGFyZSBydW5uaW5nIGF0IGFuZHJvaWQub3MuUHJvY2VzcyNUSFJFQURfUFJJT1JJVFlfQkFDS0dST1VORCBvciBsb3dlciBzbyB0aGV5IGFyZSBsZXNzIGxpa2VseSB0byBpbnRlcnJ1cHQgdGhlIFVJIHRocmVhZC4gVGhlc2UgYmFja2dyb3VuZCB0aHJlYWRzIHNob3VsZCBzaG93IHVwIHdpdGggYSBwcmlvcml0eSBudW1iZXIgb2YgMTMwIG9yIGhpZ2hlciBpbiB0aGUgc2NoZWR1bGluZyBzZWN0aW9uIHVuZGVyIHRoZSBLZXJuZWwgcHJvY2Vzcy4nKTtBbmRyb2lkQXVkaXRvci5nZXRTY2hlZHVsaW5nQWxlcnRfPWZ1bmN0aW9uKGZyYW1lKXtsZXQgdG90YWxEdXJhdGlvbj0wO2NvbnN0IHRvdGFsU3RhdHM9e307Zm9yKGNvbnN0IHR0ciBvZiBmcmFtZS50aHJlYWRUaW1lUmFuZ2VzKXtjb25zdCBzdGF0cz10dHIudGhyZWFkLmdldFNjaGVkdWxpbmdTdGF0c0ZvclJhbmdlKHR0ci5zdGFydCx0dHIuZW5kKTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHN0YXRzKSl7aWYoIShrZXkgaW4gdG90YWxTdGF0cykpe3RvdGFsU3RhdHNba2V5XT0wO30KdG90YWxTdGF0c1trZXldKz12YWx1ZTt0b3RhbER1cmF0aW9uKz12YWx1ZTt9fQppZighKFNDSEVEVUxJTkdfU1RBVEUuUlVOTklORyBpbiB0b3RhbFN0YXRzKXx8dG90YWxEdXJhdGlvbj09PTB8fHRvdGFsRHVyYXRpb24tdG90YWxTdGF0c1tTQ0hFRFVMSU5HX1NUQVRFLlJVTk5JTkddPDMpe3JldHVybjt9CmNvbnN0IGFyZ3M9e307Zm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyh0b3RhbFN0YXRzKSl7bGV0IG5ld0tleT1rZXk7aWYoa2V5PT09U0NIRURVTElOR19TVEFURS5SVU5OQUJMRSl7bmV3S2V5PSdOb3Qgc2NoZWR1bGVkLCBidXQgcnVubmFibGUnO31lbHNlIGlmKGtleT09PVNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQKXtuZXdLZXk9J0Jsb2NraW5nIEkvTyBkZWxheSc7fQphcmdzW25ld0tleV09bmV3IFNjYWxhcih0aW1lRHVyYXRpb25Jbk1zLHZhbHVlKTt9CnJldHVybiBuZXcgQWxlcnQoQW5kcm9pZEF1ZGl0b3Iuc2NoZWR1bGluZ0FsZXJ0SW5mb18sZnJhbWUuc3RhcnQsW2ZyYW1lXSxhcmdzKTt9O0FuZHJvaWRBdWRpdG9yLnByb3RvdHlwZT17X19wcm90b19fOkF1ZGl0b3IucHJvdG90eXBlLHJlbmFtZUFuZFNvcnRfKCl7dGhpcy5tb2RlbC5rZXJuZWwuaW1wb3J0YW50PWZhbHNlO3RoaXMubW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkuZm9yRWFjaChmdW5jdGlvbihwcm9jZXNzKXtpZih0aGlzLmhlbHBlci5zdXJmYWNlRmxpbmdlciYmcHJvY2Vzcz09PXRoaXMuaGVscGVyLnN1cmZhY2VGbGluZ2VyLnByb2Nlc3Mpe2lmKCFwcm9jZXNzLm5hbWUpe3Byb2Nlc3MubmFtZT0nU3VyZmFjZUZsaW5nZXInO30KcHJvY2Vzcy5zb3J0SW5kZXg9TnVtYmVyLk5FR0FUSVZFX0lORklOSVRZO3Byb2Nlc3MuaW1wb3J0YW50PWZhbHNlO3JldHVybjt9CmNvbnN0IHVpVGhyZWFkPXByb2Nlc3MuZ2V0VGhyZWFkKHByb2Nlc3MucGlkKTtpZighcHJvY2Vzcy5uYW1lJiZ1aVRocmVhZCYmdWlUaHJlYWQubmFtZSl7aWYoL15uZHJvaWRcLi8udGVzdCh1aVRocmVhZC5uYW1lKSl7dWlUaHJlYWQubmFtZT0nYScrdWlUaHJlYWQubmFtZTt9CnByb2Nlc3MubmFtZT11aVRocmVhZC5uYW1lO3VpVGhyZWFkLm5hbWU9J1VJIFRocmVhZCc7fQpwcm9jZXNzLnNvcnRJbmRleD0wO2Zvcihjb25zdCB0aWQgaW4gcHJvY2Vzcy50aHJlYWRzKXtwcm9jZXNzLnNvcnRJbmRleC09cHJvY2Vzcy50aHJlYWRzW3RpZF0uc2xpY2VHcm91cC5zbGljZXMubGVuZ3RoO319LHRoaXMpO3RoaXMubW9kZWwuZ2V0QWxsVGhyZWFkcygpLmZvckVhY2goZnVuY3Rpb24odGhyZWFkKXtpZih0aHJlYWQudGlkPT09dGhyZWFkLnBhcmVudC5waWQpe3RocmVhZC5zb3J0SW5kZXg9LTM7fQppZih0aHJlYWQubmFtZT09PSdSZW5kZXJUaHJlYWQnKXt0aHJlYWQuc29ydEluZGV4PS0yO30KaWYoL15od3VpVGFzay8udGVzdCh0aHJlYWQubmFtZSkpe3RocmVhZC5zb3J0SW5kZXg9LTE7fX0pO30scHVzaEZyYW1lc0FuZEp1ZGdlSmFua18oKXtsZXQgYmFkRnJhbWVzT2JzZXJ2ZWQ9MDtsZXQgZnJhbWVzT2JzZXJ2ZWQ9MDtjb25zdCBzdXJmYWNlRmxpbmdlcj10aGlzLmhlbHBlci5zdXJmYWNlRmxpbmdlcjt0aGlzLmhlbHBlci5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXthcHAucHJvY2Vzcy5mcmFtZXM9YXBwLmdldEZyYW1lcygpO2FwcC5wcm9jZXNzLmZyYW1lcy5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lKXtpZihmcmFtZS50b3RhbER1cmF0aW9uPkVYUEVDVEVEX0ZSQU1FX1RJTUVfTVMqMil7YmFkRnJhbWVzT2JzZXJ2ZWQrPTI7ZnJhbWUucGVyZkNsYXNzPUZSQU1FX1BFUkZfQ0xBU1MuVEVSUklCTEU7fWVsc2UgaWYoZnJhbWUudG90YWxEdXJhdGlvbj5FWFBFQ1RFRF9GUkFNRV9USU1FX01TfHxmcmFtZU1pc3NlZERlYWRsaW5lKGZyYW1lKSl7YmFkRnJhbWVzT2JzZXJ2ZWQrKztmcmFtZS5wZXJmQ2xhc3M9RlJBTUVfUEVSRl9DTEFTUy5CQUQ7fWVsc2V7ZnJhbWUucGVyZkNsYXNzPUZSQU1FX1BFUkZfQ0xBU1MuR09PRDt9fSk7ZnJhbWVzT2JzZXJ2ZWQrPWFwcC5wcm9jZXNzLmZyYW1lcy5sZW5ndGg7fSk7aWYoZnJhbWVzT2JzZXJ2ZWQpe2NvbnN0IHBvcnRpb25CYWQ9YmFkRnJhbWVzT2JzZXJ2ZWQvZnJhbWVzT2JzZXJ2ZWQ7aWYocG9ydGlvbkJhZD4wLjMpe3RoaXMubW9kZWwuZmF2aWNvbkh1ZT0ncmVkJzt9ZWxzZSBpZihwb3J0aW9uQmFkPjAuMDUpe3RoaXMubW9kZWwuZmF2aWNvbkh1ZT0neWVsbG93Jzt9ZWxzZXt0aGlzLm1vZGVsLmZhdmljb25IdWU9J2dyZWVuJzt9fX0scHVzaEV2ZW50SW5mb18oKXtjb25zdCBhcHBBbm5vdGF0b3I9bmV3IEFwcEFubm90YXRvcigpO3RoaXMuaGVscGVyLmFwcHMuZm9yRWFjaChmdW5jdGlvbihhcHApe2lmKGFwcC51aVRocmVhZCl7YXBwQW5ub3RhdG9yLmFwcGx5RXZlbnRJbmZvcyhhcHAudWlUaHJlYWQuc2xpY2VHcm91cCk7fQppZihhcHAucmVuZGVyVGhyZWFkKXthcHBBbm5vdGF0b3IuYXBwbHlFdmVudEluZm9zKGFwcC5yZW5kZXJUaHJlYWQuc2xpY2VHcm91cCk7fX0pO30scnVuQW5ub3RhdGUoKXtpZighdGhpcy5oZWxwZXIpcmV0dXJuO3RoaXMucmVuYW1lQW5kU29ydF8oKTt0aGlzLnB1c2hGcmFtZXNBbmRKdWRnZUphbmtfKCk7dGhpcy5wdXNoRXZlbnRJbmZvXygpO3RoaXMuaGVscGVyLml0ZXJhdGVJbXBvcnRhbnRTbGljZXMoZnVuY3Rpb24oc2xpY2Upe3NsaWNlLmltcG9ydGFudD10cnVlO30pO30scnVuQXVkaXQoKXtpZighdGhpcy5oZWxwZXIpcmV0dXJuO2NvbnN0IGFsZXJ0cz10aGlzLm1vZGVsLmFsZXJ0czt0aGlzLmhlbHBlci5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXthcHAuZ2V0RnJhbWVzKCkuZm9yRWFjaChmdW5jdGlvbihmcmFtZSl7YWxlcnRzLnB1c2guYXBwbHkoYWxlcnRzLEFuZHJvaWRBdWRpdG9yLmdldFNhdmVMYXllckFsZXJ0c18oZnJhbWUpKTtpZihmcmFtZS5wZXJmQ2xhc3M9PT1GUkFNRV9QRVJGX0NMQVNTLk5FVVRSQUx8fGZyYW1lLnBlcmZDbGFzcz09PUZSQU1FX1BFUkZfQ0xBU1MuR09PRCl7cmV0dXJuO30KbGV0IGFsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldFBhdGhBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRVcGxvYWRBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRMaXN0Vmlld0FsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldE1lYXN1cmVMYXlvdXRBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRWaWV3RHJhd0FsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldEJsb2NraW5nR2NBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTthbGVydD1BbmRyb2lkQXVkaXRvci5nZXRMb2NrQ29udGVudGlvbkFsZXJ0XyhmcmFtZSk7aWYoYWxlcnQpYWxlcnRzLnB1c2goYWxlcnQpO2FsZXJ0PUFuZHJvaWRBdWRpdG9yLmdldFNjaGVkdWxpbmdBbGVydF8oZnJhbWUpO2lmKGFsZXJ0KWFsZXJ0cy5wdXNoKGFsZXJ0KTt9KTt9LHRoaXMpO3RoaXMuYWRkUmVuZGVyaW5nSW50ZXJhY3Rpb25SZWNvcmRzKCk7dGhpcy5hZGRJbnB1dEludGVyYWN0aW9uUmVjb3JkcygpO30sYWRkUmVuZGVyaW5nSW50ZXJhY3Rpb25SZWNvcmRzKCl7Y29uc3QgZXZlbnRzPVtdO3RoaXMuaGVscGVyLmFwcHMuZm9yRWFjaChmdW5jdGlvbihhcHApe2V2ZW50cy5wdXNoLmFwcGx5KGV2ZW50cyxhcHAuZ2V0QW5pbWF0aW9uQXN5bmNTbGljZXMoKSk7ZXZlbnRzLnB1c2guYXBwbHkoZXZlbnRzLGFwcC5nZXRGcmFtZXMoKSk7fSk7Y29uc3QgbWVyZ2VyRnVuY3Rpb249ZnVuY3Rpb24oZXZlbnRzKXtjb25zdCBpcj1uZXcgdHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbih0aGlzLm1vZGVsLCdSZW5kZXJpbmcnLGV2ZW50c1swXS5taW4sZXZlbnRzW2V2ZW50cy5sZW5ndGgtMV0ubWF4LWV2ZW50c1swXS5taW4pO3RoaXMubW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucy5wdXNoKGlyKTt9LmJpbmQodGhpcyk7dHIuYi5tYXRoLm1lcmdlUmFuZ2VzKHRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMoZXZlbnRzKSwzMCxtZXJnZXJGdW5jdGlvbik7fSxhZGRJbnB1dEludGVyYWN0aW9uUmVjb3Jkcygpe2NvbnN0IGlucHV0U2FtcGxlcz1bXTt0aGlzLmhlbHBlci5hcHBzLmZvckVhY2goZnVuY3Rpb24oYXBwKXtpbnB1dFNhbXBsZXMucHVzaC5hcHBseShpbnB1dFNhbXBsZXMsYXBwLmdldElucHV0U2FtcGxlcygpKTt9KTtjb25zdCBtZXJnZXJGdW5jdGlvbj1mdW5jdGlvbihldmVudHMpe2NvbnN0IGlyPW5ldyB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKHRoaXMubW9kZWwsJ0lucHV0JyxldmVudHNbMF0ubWluLGV2ZW50c1tldmVudHMubGVuZ3RoLTFdLm1heC1ldmVudHNbMF0ubWluKTt0aGlzLm1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMucHVzaChpcik7fS5iaW5kKHRoaXMpO2NvbnN0IGlucHV0UmFuZ2VzPWlucHV0U2FtcGxlcy5tYXAoZnVuY3Rpb24oc2FtcGxlKXtyZXR1cm4gdHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNhbXBsZS50aW1lc3RhbXAsc2FtcGxlLnRpbWVzdGFtcCk7fSk7dHIuYi5tYXRoLm1lcmdlUmFuZ2VzKGlucHV0UmFuZ2VzLDMwLG1lcmdlckZ1bmN0aW9uKTt9fTtBdWRpdG9yLnJlZ2lzdGVyKEFuZHJvaWRBdWRpdG9yKTtmdW5jdGlvbiBBcHBBbm5vdGF0b3IoKXt0aGlzLnRpdGxlSW5mb0xvb2t1cD1uZXcgTWFwKCk7dGhpcy50aXRsZVBhcmVudExvb2t1cD1uZXcgTWFwKCk7dGhpcy5idWlsZF8oKTt9CkFwcEFubm90YXRvci5wcm90b3R5cGU9e2J1aWxkXygpe2NvbnN0IHJlZ2lzdGVyRXZlbnRJbmZvPWZ1bmN0aW9uKGRpY3Qpe3RoaXMudGl0bGVJbmZvTG9va3VwLnNldChkaWN0LnRpdGxlLG5ldyBFdmVudEluZm8oZGljdC50aXRsZSxkaWN0LmRlc2NyaXB0aW9uLGRpY3QuZG9jTGlua3MpKTtpZihkaWN0LnBhcmVudHMpe3RoaXMudGl0bGVQYXJlbnRMb29rdXAuc2V0KGRpY3QudGl0bGUsZGljdC5wYXJlbnRzKTt9fS5iaW5kKHRoaXMpO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonaW5mbGF0ZScsZGVzY3JpcHRpb246J0NvbnN0cnVjdGluZyBhIFZpZXcgaGllcmFyY2h5IGZyb20gcHJlLXByb2Nlc3NlZCBYTUwgdmlhIExheW91dEluZmxhdGVyI2xheW91dC4gVGhpcyBpbmNsdWRlcyBjb25zdHJ1Y3RpbmcgYWxsIG9mIHRoZSBWaWV3IG9iamVjdHMgaW4gdGhlIGhpZXJhcmNoeSwgYW5kIGFwcGx5aW5nIHN0eWxlZCBhdHRyaWJ1dGVzLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J29idGFpblZpZXcnLGRlc2NyaXB0aW9uOidBZGFwdGVyI2dldFZpZXcoKSBjYWxsZWQgdG8gYmluZCBjb250ZW50IHRvIGEgcmVjeWNsZWQgVmlldyB0aGF0IGlzIGJlaW5nIHByZXNlbnRlZC4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidzZXR1cExpc3RJdGVtJyxkZXNjcmlwdGlvbjonQXR0YWNoZWQgYSBuZXdseS1ib3VuZCwgcmVjeWNsZWQgVmlldyB0byBpdHMgcGFyZW50IExpc3RWaWV3Lid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J3NldHVwR3JpZEl0ZW0nLGRlc2NyaXB0aW9uOidBdHRhY2hlZCBhIG5ld2x5LWJvdW5kLCByZWN5Y2xlZCBWaWV3IHRvIGl0cyBwYXJlbnQgR3JpZFZpZXcuJ30pO2NvbnN0IGNob3Jlb2dyYXBoZXJMaW5rcz1uZXcgRG9jTGlua0J1aWxkZXIoKS5hZGREYWNSZWYoJ0Nob3Jlb2dyYXBoZXInLCdhbmRyb2lkL3ZpZXcvQ2hvcmVvZ3JhcGhlci5odG1sJykuYnVpbGQoKTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J0Nob3Jlb2dyYXBoZXIjZG9GcmFtZScsZG9jTGlua3M6Y2hvcmVvZ3JhcGhlckxpbmtzLGRlc2NyaXB0aW9uOidDaG9yZW9ncmFwaGVyIGV4ZWN1dGVzIGZyYW1lIGNhbGxiYWNrcyBmb3IgaW5wdXRzLCBhbmltYXRpb25zLCBhbmQgcmVuZGVyaW5nIHRyYXZlcnNhbHMuIFdoZW4gdGhpcyB3b3JrIGlzIGRvbmUsIGEgZnJhbWUgd2lsbCBiZSBwcmVzZW50ZWQgdG8gdGhlIHVzZXIuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonaW5wdXQnLHBhcmVudHM6WydDaG9yZW9ncmFwaGVyI2RvRnJhbWUnXSxkb2NMaW5rczpjaG9yZW9ncmFwaGVyTGlua3MsZGVzY3JpcHRpb246J0lucHV0IGNhbGxiYWNrcyBhcmUgcHJvY2Vzc2VkLiBUaGlzIGdlbmVyYWxseSBlbmNvbXBhc3NlcyBkaXNwYXRjaGluZyBpbnB1dCB0byBWaWV3cywgYXMgd2VsbCBhcyBhbnkgd29yayB0aGUgVmlld3MgZG8gdG8gcHJvY2VzcyB0aGlzIGlucHV0L2dlc3R1cmUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonYW5pbWF0aW9uJyxwYXJlbnRzOlsnQ2hvcmVvZ3JhcGhlciNkb0ZyYW1lJ10sZG9jTGlua3M6Y2hvcmVvZ3JhcGhlckxpbmtzLGRlc2NyaXB0aW9uOidBbmltYXRpb24gY2FsbGJhY2tzIGFyZSBwcm9jZXNzZWQuIFRoaXMgaXMgZ2VuZXJhbGx5IG1pbmltYWwgd29yaywgYXMgYW5pbWF0aW9ucyBkZXRlcm1pbmUgcHJvZ3Jlc3MgZm9yIHRoZSBmcmFtZSwgYW5kIHB1c2ggbmV3IHN0YXRlIHRvIGFuaW1hdGVkIG9iamVjdHMgKHN1Y2ggYXMgc2V0dGluZyBWaWV3IHByb3BlcnRpZXMpLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J3RyYXZlcnNhbHMnLHBhcmVudHM6WydDaG9yZW9ncmFwaGVyI2RvRnJhbWUnXSxkb2NMaW5rczpjaG9yZW9ncmFwaGVyTGlua3MsZGVzY3JpcHRpb246J1ByaW1hcnkgZHJhdyB0cmF2ZXJzYWxzLiBUaGlzIGlzIHRoZSBwcmltYXJ5IHRyYXZlcnNhbCBvZiB0aGUgVmlldyBoaWVyYXJjaHksIGluY2x1ZGluZyBsYXlvdXQgYW5kIGRyYXcgcGFzc2VzLid9KTtjb25zdCB0cmF2ZXJzYWxQYXJlbnRzPVsnQ2hvcmVvZ3JhcGhlciNkb0ZyYW1lJywncGVyZm9ybVRyYXZlcnNhbHMnXTtjb25zdCBsYXlvdXRMaW5rcz1uZXcgRG9jTGlua0J1aWxkZXIoKS5hZGREYWNSZWYoJ1ZpZXcjTGF5b3V0JywnYW5kcm9pZC92aWV3L1ZpZXcuaHRtbCNMYXlvdXQnKS5idWlsZCgpO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZToncGVyZm9ybVRyYXZlcnNhbHMnLGRlc2NyaXB0aW9uOidBIGRyYXdpbmcgdHJhdmVyc2FsIG9mIHRoZSBWaWV3IGhpZXJhcmNoeSwgY29tcHJpc2VkIG9mIGFsbCBsYXlvdXQgYW5kIGRyYXdpbmcgbmVlZGVkIHRvIHByb2R1Y2UgdGhlIGZyYW1lLid9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J21lYXN1cmUnLHBhcmVudHM6dHJhdmVyc2FsUGFyZW50cyxkb2NMaW5rczpsYXlvdXRMaW5rcyxkZXNjcmlwdGlvbjonRmlyc3Qgb2YgdHdvIHBoYXNlcyBpbiB2aWV3IGhpZXJhcmNoeSBsYXlvdXQuIFZpZXdzIGFyZSBhc2tlZCB0byBzaXplIHRoZW1zZWx2ZXMgYWNjb3JkaW5nIHRvIGNvbnN0cmFpbnRzIHN1cHBsaWVkIGJ5IHRoZWlyIHBhcmVudC4gU29tZSBWaWV3R3JvdXBzIG1heSBtZWFzdXJlIGEgY2hpbGQgbW9yZSB0aGFuIG9uY2UgdG8gaGVscCBzYXRpc2Z5IHRoZWlyIG93biBjb25zdHJhaW50cy4gTmVzdGluZyBWaWV3R3JvdXBzIHRoYXQgbWVhc3VyZSBjaGlsZHJlbiBtb3JlIHRoYW4gb25jZSBjYW4gbGVhZCB0byBleGNlc3NpdmUgYW5kIHJlcGVhdGVkIHdvcmsuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonbGF5b3V0JyxwYXJlbnRzOnRyYXZlcnNhbFBhcmVudHMsZG9jTGlua3M6bGF5b3V0TGlua3MsZGVzY3JpcHRpb246J1NlY29uZCBvZiB0d28gcGhhc2VzIGluIHZpZXcgaGllcmFyY2h5IGxheW91dCwgcmVwb3NpdGlvbmluZyBjb250ZW50IGFuZCBjaGlsZCBWaWV3cyBpbnRvIHRoZWlyIG5ldyBsb2NhdGlvbnMuJ30pO2NvbnN0IGRyYXdTdHJpbmc9J0RyYXcgcGFzcyBvdmVyIHRoZSBWaWV3IGhpZXJhcmNoeS4gRXZlcnkgaW52YWxpZGF0ZWQgVmlldyB3aWxsIGhhdmUgaXRzIGRyYXdpbmcgY29tbWFuZHMgcmVjb3JkZWQuIE9uIEFuZHJvaWQgdmVyc2lvbnMgcHJpb3IgdG8gTG9sbGlwb3AsIHRoaXMgd291bGQgYWxzbyBpbmNsdWRlIHRoZSBpc3N1aW5nIG9mIGRyYXcgY29tbWFuZHMgdG8gdGhlIEdQVS4gU3RhcnRpbmcgd2l0aCBMb2xsaXBvcCwgaXQgb25seSBpbmNsdWRlcyB0aGUgcmVjb3JkaW5nIG9mIGNvbW1hbmRzLCBhbmQgc3luY2luZyB0aGF0IGluZm9ybWF0aW9uIHRvIHRoZSBSZW5kZXJUaHJlYWQuJztyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2RyYXcnLHBhcmVudHM6dHJhdmVyc2FsUGFyZW50cyxkZXNjcmlwdGlvbjpkcmF3U3RyaW5nfSk7Y29uc3QgcmVjb3JkU3RyaW5nPSdFdmVyeSBpbnZhbGlkYXRlZCBWaWV3XCdzIGRyYXdpbmcgY29tbWFuZHMgYXJlIHJlY29yZGVkLiBFYWNoIHdpbGwgaGF2ZSBWaWV3I2RyYXcoKSBjYWxsZWQsIGFuZCBpcyBwYXNzZWQgYSBDYW52YXMgdGhhdCB3aWxsIHJlY29yZCBhbmQgc3RvcmUgaXRzIGRyYXdpbmcgY29tbWFuZHMgdW50aWwgaXQgaXMgbmV4dCBpbnZhbGlkYXRlZC9yZXJlY29yZGVkLic7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidnZXREaXNwbGF5TGlzdCcscGFyZW50czpbJ2RyYXcnXSxkZXNjcmlwdGlvbjpyZWNvcmRTdHJpbmd9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J1JlY29yZCBWaWV3I2RyYXcoKScscGFyZW50czpbJ2RyYXcnXSxkZXNjcmlwdGlvbjpyZWNvcmRTdHJpbmd9KTtyZWdpc3RlckV2ZW50SW5mbyh7dGl0bGU6J2RyYXdEaXNwbGF5TGlzdCcscGFyZW50czpbJ2RyYXcnXSxkZXNjcmlwdGlvbjonRXhlY3V0aW9uIG9mIHJlY29yZGVkIGRyYXcgY29tbWFuZHMgdG8gZ2VuZXJhdGUgYSBmcmFtZS4gVGhpcyByZXByZXNlbnRzIHRoZSBhY3R1YWwgZm9ybWF0aW9uIGFuZCBpc3N1aW5nIG9mIGRyYXdpbmcgY29tbWFuZHMgdG8gdGhlIEdQVS4gT24gQW5kcm9pZCBMIGFuZCBoaWdoZXIgZGV2aWNlcywgdGhpcyB3b3JrIGlzIGRvbmUgb24gYSBkZWRpY2F0ZWQgUmVuZGVyVGhyZWFkLCBpbnN0ZWFkIG9mIG9uIHRoZSBVSSBUaHJlYWQuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonRHJhd0ZyYW1lJyxkZXNjcmlwdGlvbjonUmVuZGVyVGhyZWFkIHBvcnRpb24gb2YgdGhlIHN0YW5kYXJkIFVJL1JlbmRlclRocmVhZCBzcGxpdCBmcmFtZS4gVGhpcyByZXByZXNlbnRzIHRoZSBhY3R1YWwgZm9ybWF0aW9uIGFuZCBpc3N1aW5nIG9mIGRyYXdpbmcgY29tbWFuZHMgdG8gdGhlIEdQVS4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidkb0ZyYW1lJyxkZXNjcmlwdGlvbjonUmVuZGVyVGhyZWFkIGFuaW1hdGlvbiBmcmFtZS4gUmVwcmVzZW50cyBkcmF3aW5nIHdvcmsgZG9uZSBieSB0aGUgUmVuZGVyVGhyZWFkIG9uIGEgZnJhbWUgd2hlcmUgdGhlIFVJIHRocmVhZCBkaWQgbm90IHByb2R1Y2UgbmV3IGRyYXdpbmcgY29udGVudC4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidzeW5jRnJhbWVTdGF0ZScsZGVzY3JpcHRpb246J1N5bmMgc3RhZ2UgYmV0d2VlbiB0aGUgVUkgdGhyZWFkIGFuZCB0aGUgUmVuZGVyVGhyZWFkLCB3aGVyZSB0aGUgVUkgdGhyZWFkIGhhbmRzIG9mZiBhIGZyYW1lIChpbmNsdWRpbmcgaW5mb3JtYXRpb24gYWJvdXQgbW9kaWZpZWQgVmlld3MpLiBUaW1lIGluIHRoaXMgbWV0aG9kIHByaW1hcmlseSBjb25zaXN0cyBvZiB1cGxvYWRpbmcgbW9kaWZpZWQgQml0bWFwcyB0byB0aGUgR1BVLiBBZnRlciB0aGlzIHN5bmMgaXMgY29tcGxldGVkLCB0aGUgVUkgdGhyZWFkIGlzIHVuYmxvY2tlZCwgYW5kIHRoZSBSZW5kZXJUaHJlYWQgc3RhcnRzIHRvIHJlbmRlciB0aGUgZnJhbWUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonZmx1c2ggZHJhd2luZyBjb21tYW5kcycsZGVzY3JpcHRpb246J0lzc3VpbmcgdGhlIG5vdyBjb21wbGV0ZSBkcmF3aW5nIGNvbW1hbmRzIHRvIHRoZSBHUFUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonZWdsU3dhcEJ1ZmZlcnMnLGRlc2NyaXB0aW9uOidDb21wbGV0ZSBHUFUgcmVuZGVyaW5nIG9mIHRoZSBmcmFtZS4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidSViBTY3JvbGwnLGRlc2NyaXB0aW9uOidSZWN5Y2xlclZpZXcgaXMgY2FsY3VsYXRpbmcgYSBzY3JvbGwuIElmIHRoZXJlIGFyZSB0b28gbWFueSBvZiB0aGVzZSBpbiBTeXN0cmFjZSwgc29tZSBWaWV3cyBpbnNpZGUgUmVjeWNsZXJWaWV3IG1pZ2h0IGJlIGNhdXNpbmcgaXQuIFRyeSB0byBhdm9pZCB1c2luZyBFZGl0VGV4dCwgZm9jdXNhYmxlIHZpZXdzIG9yIGhhbmRsZSB0aGVtIHdpdGggY2FyZS4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidSViBPbkxheW91dCcsZGVzY3JpcHRpb246J09uTGF5b3V0IGhhcyBiZWVuIGNhbGxlZCBieSB0aGUgVmlldyBzeXN0ZW0uIElmIHRoaXMgc2hvd3MgdXAgdG9vIG1hbnkgdGltZXMgaW4gU3lzdHJhY2UsIG1ha2Ugc3VyZSB0aGUgY2hpbGRyZW4gb2YgUmVjeWNsZXJWaWV3IGRvIG5vdCB1cGRhdGUgdGhlbXNlbHZlcyBkaXJlY3RseS4gVGhpcyB3aWxsIGNhdXNlIGEgZnVsbCByZS1sYXlvdXQgYnV0IHdoZW4gaXQgaGFwcGVucyB2aWEgdGhlIEFkYXB0ZXIgbm90aWZ5SXRlbUNoYW5nZWQsIFJlY3ljbGVyVmlldyBjYW4gYXZvaWQgZnVsbCBsYXlvdXQgY2FsY3VsYXRpb24uJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgRnVsbEludmFsaWRhdGUnLGRlc2NyaXB0aW9uOidOb3RpZnlEYXRhU2V0Q2hhbmdlZCBvciBlcXVhbCBoYXMgYmVlbiBjYWxsZWQuIElmIHRoaXMgaXMgdGFraW5nIGEgbG9uZyB0aW1lLCB0cnkgc2VuZGluZyBncmFudWxhciBub3RpZnkgYWRhcHRlciBjaGFuZ2VzIGluc3RlYWQgb2YganVzdCBjYWxsaW5nIG5vdGlmeURhdGFTZXRDaGFuZ2VkIG9yIHNldEFkYXB0ZXIgLyBzd2FwQWRhcHRlci4gQWRkaW5nIHN0YWJsZSBpZHMgdG8geW91ciBhZGFwdGVyIG1pZ2h0IGhlbHAuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgUGFydGlhbEludmFsaWRhdGUnLGRlc2NyaXB0aW9uOidSZWN5Y2xlclZpZXcgaXMgcmViaW5kaW5nIGEgVmlldy4gSWYgdGhpcyBpcyB0YWtpbmcgYSBsb3Qgb2YgdGltZSwgY29uc2lkZXIgb3B0aW1pemluZyB5b3VyIGxheW91dCBvciBtYWtlIHN1cmUgeW91IGFyZSBub3QgZG9pbmcgZXh0cmEgb3BlcmF0aW9ucyBpbiBvbkJpbmRWaWV3SG9sZGVyIGNhbGwuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonUlYgT25CaW5kVmlldycsZGVzY3JpcHRpb246J1JlY3ljbGVyVmlldyBpcyByZWJpbmRpbmcgYSBWaWV3LiBJZiB0aGlzIGlzIHRha2luZyBhIGxvdCBvZiB0aW1lLCBjb25zaWRlciBvcHRpbWl6aW5nIHlvdXIgbGF5b3V0IG9yIG1ha2Ugc3VyZSB5b3UgYXJlIG5vdCBkb2luZyBleHRyYSBvcGVyYXRpb25zIGluIG9uQmluZFZpZXdIb2xkZXIgY2FsbC4nfSk7cmVnaXN0ZXJFdmVudEluZm8oe3RpdGxlOidSViBDcmVhdGVWaWV3JyxkZXNjcmlwdGlvbjonUmVjeWNsZXJWaWV3IGlzIGNyZWF0aW5nIGEgbmV3IFZpZXcuIElmIHRvbyBtYW55IG9mIHRoZXNlIGFyZSBwcmVzZW50OiAxKSBUaGVyZSBtaWdodCBiZSBhIHByb2JsZW0gaW4gUmVjeWNsaW5nIChlLmcuIGN1c3RvbSBBbmltYXRpb25zIHRoYXQgc2V0IHRyYW5zaWVudCBzdGF0ZSBhbmQgcHJldmVudCByZWN5Y2xpbmcgb3IgSXRlbUFuaW1hdG9yIG5vdCBpbXBsZW1lbnRpbmcgdGhlIGNvbnRyYWN0IHByb3Blcmx5LiBTZWUgQWRhcHRlciNvbkZhaWxlZFRvUmVjeWNsZVZpZXcoVmlld0hvbGRlcikuIDIpIFRoZXJlIG1heSBiZSB0b28gbWFueSBpdGVtIHZpZXcgdHlwZXMuIFRyeSBtZXJnaW5nIHRoZW0uIDMpIFRoZXJlIG1pZ2h0IGJlIHRvbyBtYW55IGl0ZW1DaGFuZ2UgYW5pbWF0aW9ucyBhbmQgbm90IGVub3VnaCBzcGFjZSBpbiBSZWN5Y2xlclBvb2wuIFRyeSBpbmNyZWFzaW5nIHlvdXIgcG9vbCBzaXplIGFuZCBpdGVtIGNhY2hlIHNpemUuJ30pO3JlZ2lzdGVyRXZlbnRJbmZvKHt0aXRsZTonZWdsU3dhcEJ1ZmZlcnMnLGRlc2NyaXB0aW9uOidUaGUgQ1BVIGhhcyBmaW5pc2hlZCBwcm9kdWNpbmcgZHJhd2luZyBjb21tYW5kcywgYW5kIGlzIGZsdXNoaW5nIGRyYXdpbmcgd29yayB0byB0aGUgR1BVLCBhbmQgcG9zdGluZyB0aGF0IGJ1ZmZlciB0byB0aGUgY29uc3VtZXIgKHdoaWNoIGlzIG9mdGVuIFN1cmZhY2VGbGluZ2VyIHdpbmRvdyBjb21wb3NpdGlvbikuIE9uY2UgdGhpcyBpcyBjb21wbGV0ZWQsIHRoZSBHUFUgY2FuIHByb2R1Y2UgdGhlIGZyYW1lIGNvbnRlbnQgd2l0aG91dCBhbnkgaW52b2x2ZW1lbnQgZnJvbSB0aGUgQ1BVLid9KTt9LGFwcGx5RXZlbnRJbmZvc1JlY3Vyc2l2ZV8ocGFyZW50TmFtZXMsc2xpY2Upe2NvbnN0IGNoZWNrRXhwZWN0ZWRQYXJlbnROYW1lcz1mdW5jdGlvbihleHBlY3RlZFBhcmVudE5hbWVzKXtpZighZXhwZWN0ZWRQYXJlbnROYW1lcylyZXR1cm4gdHJ1ZTtyZXR1cm4gZXhwZWN0ZWRQYXJlbnROYW1lcy5zb21lKGZ1bmN0aW9uKG5hbWUpe3JldHVybiBwYXJlbnROYW1lcy5oYXMobmFtZSk7fSk7fTtpZih0aGlzLnRpdGxlSW5mb0xvb2t1cC5oYXMoc2xpY2UudGl0bGUpKXtpZihjaGVja0V4cGVjdGVkUGFyZW50TmFtZXModGhpcy50aXRsZVBhcmVudExvb2t1cC5nZXQoc2xpY2UudGl0bGUpKSl7c2xpY2UuaW5mbz10aGlzLnRpdGxlSW5mb0xvb2t1cC5nZXQoc2xpY2UudGl0bGUpO319CmlmKHNsaWNlLnN1YlNsaWNlcy5sZW5ndGg+MCl7aWYoIXBhcmVudE5hbWVzLmhhcyhzbGljZS50aXRsZSkpe3BhcmVudE5hbWVzLnNldChzbGljZS50aXRsZSwwKTt9CnBhcmVudE5hbWVzLnNldChzbGljZS50aXRsZSxwYXJlbnROYW1lcy5nZXQoc2xpY2UudGl0bGUpKzEpO3NsaWNlLnN1YlNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHN1YlNsaWNlKXt0aGlzLmFwcGx5RXZlbnRJbmZvc1JlY3Vyc2l2ZV8ocGFyZW50TmFtZXMsc3ViU2xpY2UpO30sdGhpcyk7cGFyZW50TmFtZXMuc2V0KHNsaWNlLnRpdGxlLHBhcmVudE5hbWVzLmdldChzbGljZS50aXRsZSktMSk7aWYocGFyZW50TmFtZXMuZ2V0KHNsaWNlLnRpdGxlKT09PTApe2RlbGV0ZSBwYXJlbnROYW1lc1tzbGljZS50aXRsZV07fX19LGFwcGx5RXZlbnRJbmZvcyhzbGljZUdyb3VwKXtzbGljZUdyb3VwLnRvcExldmVsU2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe3RoaXMuYXBwbHlFdmVudEluZm9zUmVjdXJzaXZlXyhuZXcgTWFwKCksc2xpY2UpO30sdGhpcyk7fX07cmV0dXJue0FuZHJvaWRBdWRpdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBPYmplY3RTbmFwc2hvdChvYmplY3RJbnN0YW5jZSx0cyxhcmdzKXt0ci5tb2RlbC5FdmVudC5jYWxsKHRoaXMpO3RoaXMub2JqZWN0SW5zdGFuY2U9b2JqZWN0SW5zdGFuY2U7dGhpcy50cz10czt0aGlzLmFyZ3M9YXJnczt9Ck9iamVjdFNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7fSxpbml0aWFsaXplKCl7fSxyZWZlcmVuY2VkQXQoaXRlbSxvYmplY3QsZmllbGQpe30sYWRkQm91bmRzVG9SYW5nZShyYW5nZSl7cmFuZ2UuYWRkVmFsdWUodGhpcy50cyk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidTbmFwc2hvdCBvZiAnK3RoaXMub2JqZWN0SW5zdGFuY2UudXNlckZyaWVuZGx5TmFtZSsnIEAgJysKdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnRzKTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKE9iamVjdFNuYXBzaG90LHtuYW1lOidvYmplY3RTbmFwc2hvdCcscGx1cmFsTmFtZTonb2JqZWN0U25hcHNob3RzJ30pO3JldHVybntPYmplY3RTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7ZnVuY3Rpb24gT2JqZWN0SW5zdGFuY2UocGFyZW50LHNjb3BlZElkLGNhdGVnb3J5LG5hbWUsY3JlYXRpb25UcyxvcHRfYmFzZVR5cGVOYW1lKXt0ci5tb2RlbC5FdmVudC5jYWxsKHRoaXMpO3RoaXMucGFyZW50PXBhcmVudDt0aGlzLnNjb3BlZElkPXNjb3BlZElkO3RoaXMuY2F0ZWdvcnk9Y2F0ZWdvcnk7dGhpcy5iYXNlVHlwZU5hbWU9b3B0X2Jhc2VUeXBlTmFtZT9vcHRfYmFzZVR5cGVOYW1lOm5hbWU7dGhpcy5uYW1lPW5hbWU7dGhpcy5jcmVhdGlvblRzPWNyZWF0aW9uVHM7dGhpcy5jcmVhdGlvblRzV2FzRXhwbGljaXQ9ZmFsc2U7dGhpcy5kZWxldGlvblRzPU51bWJlci5NQVhfVkFMVUU7dGhpcy5kZWxldGlvblRzV2FzRXhwbGljaXQ9ZmFsc2U7dGhpcy5jb2xvcklkPTA7dGhpcy5ib3VuZHM9bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuc25hcHNob3RzPVtdO3RoaXMuaGFzSW1wbGljaXRTbmFwc2hvdHM9ZmFsc2U7fQpPYmplY3RJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudC5wcm90b3R5cGUsZ2V0IHR5cGVOYW1lKCl7cmV0dXJuIHRoaXMubmFtZTt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFJhbmdlKHRoaXMuYm91bmRzKTt9LGFkZFNuYXBzaG90KHRzLGFyZ3Msb3B0X25hbWUsb3B0X2Jhc2VUeXBlTmFtZSl7aWYodHM8dGhpcy5jcmVhdGlvblRzKXt0aHJvdyBuZXcgRXJyb3IoJ1NuYXBzaG90cyBtdXN0IGJlID49IGluc3RhbmNlLmNyZWF0aW9uVHMnKTt9CmlmKHRzPj10aGlzLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcignU25hcHNob3RzIGNhbm5vdCBiZSBhZGRlZCBhZnRlciAnKydhbiBvYmplY3RzIGRlbGV0aW9uIHRpbWVzdGFtcC4nKTt9CmxldCBsYXN0U25hcHNob3Q7aWYodGhpcy5zbmFwc2hvdHMubGVuZ3RoPjApe2xhc3RTbmFwc2hvdD10aGlzLnNuYXBzaG90c1t0aGlzLnNuYXBzaG90cy5sZW5ndGgtMV07aWYobGFzdFNuYXBzaG90LnRzPT09dHMpe3Rocm93IG5ldyBFcnJvcignU25hcHNob3RzIGFscmVhZHkgZXhpc3RzIGF0IHRoaXMgdGltZSEnKTt9CmlmKHRzPGxhc3RTbmFwc2hvdC50cyl7dGhyb3cgbmV3IEVycm9yKCdTbmFwc2hvdHMgbXVzdCBiZSBhZGRlZCBpbiBpbmNyZWFzaW5nIHRpbWVzdGFtcCBvcmRlcicpO319CmlmKG9wdF9uYW1lJiYodGhpcy5uYW1lIT09b3B0X25hbWUpKXtpZighb3B0X2Jhc2VUeXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYmFzZSB0eXBlIG5hbWUgZm9yIG5hbWUgdXBkYXRlJyk7fQppZih0aGlzLmJhc2VUeXBlTmFtZSE9PW9wdF9iYXNlVHlwZU5hbWUpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHVwZGF0ZSB0eXBlIG5hbWU6IGJhc2UgdHlwZXMgZG9udCBtYXRjaCcpO30KdGhpcy5uYW1lPW9wdF9uYW1lO30KY29uc3Qgc25hcHNob3RDb25zdHJ1Y3Rvcj10ci5tb2RlbC5PYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5nZXRDb25zdHJ1Y3Rvcih0aGlzLmNhdGVnb3J5LHRoaXMubmFtZSk7Y29uc3Qgc25hcHNob3Q9bmV3IHNuYXBzaG90Q29uc3RydWN0b3IodGhpcyx0cyxhcmdzKTt0aGlzLnNuYXBzaG90cy5wdXNoKHNuYXBzaG90KTtyZXR1cm4gc25hcHNob3Q7fSx3YXNEZWxldGVkKHRzKXtsZXQgbGFzdFNuYXBzaG90O2lmKHRoaXMuc25hcHNob3RzLmxlbmd0aD4wKXtsYXN0U25hcHNob3Q9dGhpcy5zbmFwc2hvdHNbdGhpcy5zbmFwc2hvdHMubGVuZ3RoLTFdO2lmKGxhc3RTbmFwc2hvdC50cz50cyl7dGhyb3cgbmV3IEVycm9yKCdJbnN0YW5jZSBjYW5ub3QgYmUgZGVsZXRlZCBhdCB0cz0nKwp0cysnLiBBIHNuYXBzaG90IGV4aXN0cyB0aGF0IGlzIG9sZGVyLicpO319CnRoaXMuZGVsZXRpb25Ucz10czt0aGlzLmRlbGV0aW9uVHNXYXNFeHBsaWNpdD10cnVlO30scHJlSW5pdGlhbGl6ZSgpe2ZvcihsZXQgaT0wO2k8dGhpcy5zbmFwc2hvdHMubGVuZ3RoO2krKyl7dGhpcy5zbmFwc2hvdHNbaV0ucHJlSW5pdGlhbGl6ZSgpO319LGluaXRpYWxpemUoKXtmb3IobGV0IGk9MDtpPHRoaXMuc25hcHNob3RzLmxlbmd0aDtpKyspe3RoaXMuc25hcHNob3RzW2ldLmluaXRpYWxpemUoKTt9fSxpc0FsaXZlQXQodHMpe2lmKHRzPHRoaXMuY3JlYXRpb25UcyYmdGhpcy5jcmVhdGlvblRzV2FzRXhwbGljaXQpe3JldHVybiBmYWxzZTt9CmlmKHRzPnRoaXMuZGVsZXRpb25Ucyl7cmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fSxnZXRTbmFwc2hvdEF0KHRzKXtpZih0czx0aGlzLmNyZWF0aW9uVHMpe2lmKHRoaXMuY3JlYXRpb25Uc1dhc0V4cGxpY2l0KXt0aHJvdyBuZXcgRXJyb3IoJ3RzIG11c3QgYmUgd2l0aGluIGxpZmV0aW1lIG9mIHRoaXMgaW5zdGFuY2UnKTt9CnJldHVybiB0aGlzLnNuYXBzaG90c1swXTt9CmlmKHRzPnRoaXMuZGVsZXRpb25Ucyl7dGhyb3cgbmV3IEVycm9yKCd0cyBtdXN0IGJlIHdpdGhpbiBsaWZldGltZSBvZiB0aGlzIGluc3RhbmNlJyk7fQpjb25zdCBzbmFwc2hvdHM9dGhpcy5zbmFwc2hvdHM7Y29uc3QgaT10ci5iLmZpbmRJbmRleEluU29ydGVkSW50ZXJ2YWxzKHNuYXBzaG90cyxmdW5jdGlvbihzbmFwc2hvdCl7cmV0dXJuIHNuYXBzaG90LnRzO30sZnVuY3Rpb24oc25hcHNob3QsaSl7aWYoaT09PXNuYXBzaG90cy5sZW5ndGgtMSl7cmV0dXJuIHNuYXBzaG90c1tpXS5vYmplY3RJbnN0YW5jZS5kZWxldGlvblRzO30KcmV0dXJuIHNuYXBzaG90c1tpKzFdLnRzLXNuYXBzaG90c1tpXS50czt9LHRzKTtpZihpPDApe3JldHVybiB0aGlzLnNuYXBzaG90c1swXTt9CmlmKGk+PXRoaXMuc25hcHNob3RzLmxlbmd0aCl7cmV0dXJuIHRoaXMuc25hcHNob3RzW3RoaXMuc25hcHNob3RzLmxlbmd0aC0xXTt9CnJldHVybiB0aGlzLnNuYXBzaG90c1tpXTt9LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy5jcmVhdGlvblRzKTtpZih0aGlzLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKXt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLmRlbGV0aW9uVHMpO31lbHNlIGlmKHRoaXMuc25hcHNob3RzLmxlbmd0aD4wKXt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNuYXBzaG90c1t0aGlzLnNuYXBzaG90cy5sZW5ndGgtMV0udHMpO319LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXt0aGlzLmNyZWF0aW9uVHMrPWFtb3VudDtpZih0aGlzLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKXt0aGlzLmRlbGV0aW9uVHMrPWFtb3VudDt9CnRoaXMuc25hcHNob3RzLmZvckVhY2goZnVuY3Rpb24oc25hcHNob3Qpe3NuYXBzaG90LnRzKz1hbW91bnQ7fSk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybiB0aGlzLnR5cGVOYW1lKycgb2JqZWN0ICcrdGhpcy5zY29wZWRJZDt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKE9iamVjdEluc3RhbmNlLHtuYW1lOidvYmplY3RJbnN0YW5jZScscGx1cmFsTmFtZTonb2JqZWN0SW5zdGFuY2VzJ30pO3JldHVybntPYmplY3RJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7Y29uc3QgT2JqZWN0SW5zdGFuY2U9dHIubW9kZWwuT2JqZWN0SW5zdGFuY2U7ZnVuY3Rpb24gQmxhbWVDb250ZXh0U25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpCbGFtZUNvbnRleHRTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUsZ2V0IHBhcmVudENvbnRleHQoKXtpZih0aGlzLmFyZ3MucGFyZW50IGluc3RhbmNlb2YgQmxhbWVDb250ZXh0U25hcHNob3Qpe3JldHVybiB0aGlzLmFyZ3MucGFyZW50O30KcmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0JsYW1lQ29udGV4dCc7fX07ZnVuY3Rpb24gQmxhbWVDb250ZXh0SW5zdGFuY2UoKXtPYmplY3RJbnN0YW5jZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpCbGFtZUNvbnRleHRJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RJbnN0YW5jZS5wcm90b3R5cGUsZ2V0IGJsYW1lQ29udGV4dFR5cGUoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O3JldHVybntCbGFtZUNvbnRleHRTbmFwc2hvdCxCbGFtZUNvbnRleHRJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgQmxhbWVDb250ZXh0SW5zdGFuY2U9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0SW5zdGFuY2U7ZnVuY3Rpb24gRnJhbWVUcmVlTm9kZVNuYXBzaG90KCl7QmxhbWVDb250ZXh0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KRnJhbWVUcmVlTm9kZVNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOkJsYW1lQ29udGV4dFNuYXBzaG90LnByb3RvdHlwZSxnZXQgcmVuZGVyRnJhbWUoKXtpZih0aGlzLmFyZ3MucmVuZGVyRnJhbWUgaW5zdGFuY2VvZiB0ci5lLmNocm9tZS5SZW5kZXJGcmFtZVNuYXBzaG90KXtyZXR1cm4gdGhpcy5hcmdzLnJlbmRlckZyYW1lO30KcmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1cmwoKXtyZXR1cm4gdGhpcy5hcmdzLnVybDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0ZyYW1lVHJlZU5vZGUnO319O3RyLm1vZGVsLk9iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKEZyYW1lVHJlZU5vZGVTbmFwc2hvdCx7dHlwZU5hbWU6J0ZyYW1lVHJlZU5vZGUnfSk7ZnVuY3Rpb24gRnJhbWVUcmVlTm9kZUluc3RhbmNlKCl7QmxhbWVDb250ZXh0SW5zdGFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KRnJhbWVUcmVlTm9kZUluc3RhbmNlLnByb3RvdHlwZT17X19wcm90b19fOkJsYW1lQ29udGV4dEluc3RhbmNlLnByb3RvdHlwZSxnZXQgYmxhbWVDb250ZXh0VHlwZSgpe3JldHVybidGcmFtZSc7fX07dHIubW9kZWwuT2JqZWN0SW5zdGFuY2Uuc3ViVHlwZXMucmVnaXN0ZXIoRnJhbWVUcmVlTm9kZUluc3RhbmNlLHt0eXBlTmFtZTonRnJhbWVUcmVlTm9kZSd9KTtyZXR1cm57RnJhbWVUcmVlTm9kZVNuYXBzaG90LEZyYW1lVHJlZU5vZGVJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgQmxhbWVDb250ZXh0SW5zdGFuY2U9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0SW5zdGFuY2U7ZnVuY3Rpb24gUmVuZGVyRnJhbWVTbmFwc2hvdCgpe0JsYW1lQ29udGV4dFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ClJlbmRlckZyYW1lU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186QmxhbWVDb250ZXh0U25hcHNob3QucHJvdG90eXBlLHJlZmVyZW5jZWRBdChpdGVtLG9iamVjdCxmaWVsZCl7aWYoaXRlbSBpbnN0YW5jZW9mIHRyLmUuY2hyb21lLkZyYW1lVHJlZU5vZGVTbmFwc2hvdCYmb2JqZWN0PT09aXRlbS5hcmdzJiZmaWVsZD09PSdyZW5kZXJGcmFtZScpe3RoaXMuYXJncy5mcmFtZVRyZWVOb2RlPWl0ZW07fX0sZ2V0IGZyYW1lVHJlZU5vZGUoKXtpZih0aGlzLmFyZ3MuZnJhbWVUcmVlTm9kZSBpbnN0YW5jZW9mCnRyLmUuY2hyb21lLkZyYW1lVHJlZU5vZGVTbmFwc2hvdCl7cmV0dXJuIHRoaXMuYXJncy5mcmFtZVRyZWVOb2RlO30KcmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1cmwoKXtpZih0aGlzLmZyYW1lVHJlZU5vZGUpe3JldHVybiB0aGlzLmZyYW1lVHJlZU5vZGUudXJsO30KcmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1JlbmRlckZyYW1lJzt9fTt0ci5tb2RlbC5PYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihSZW5kZXJGcmFtZVNuYXBzaG90LHt0eXBlTmFtZTonUmVuZGVyRnJhbWUnfSk7ZnVuY3Rpb24gUmVuZGVyRnJhbWVJbnN0YW5jZSgpe0JsYW1lQ29udGV4dEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ClJlbmRlckZyYW1lSW5zdGFuY2UucHJvdG90eXBlPXtfX3Byb3RvX186QmxhbWVDb250ZXh0SW5zdGFuY2UucHJvdG90eXBlLGdldCBibGFtZUNvbnRleHRUeXBlKCl7cmV0dXJuJ0ZyYW1lJzt9fTt0ci5tb2RlbC5PYmplY3RJbnN0YW5jZS5zdWJUeXBlcy5yZWdpc3RlcihSZW5kZXJGcmFtZUluc3RhbmNlLHt0eXBlTmFtZTonUmVuZGVyRnJhbWUnfSk7cmV0dXJue1JlbmRlckZyYW1lU25hcHNob3QsUmVuZGVyRnJhbWVJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQmxhbWVDb250ZXh0U25hcHNob3Q9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0U25hcHNob3Q7Y29uc3QgQmxhbWVDb250ZXh0SW5zdGFuY2U9dHIuZS5jaHJvbWUuQmxhbWVDb250ZXh0SW5zdGFuY2U7ZnVuY3Rpb24gVG9wTGV2ZWxTbmFwc2hvdCgpe0JsYW1lQ29udGV4dFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ClRvcExldmVsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186QmxhbWVDb250ZXh0U25hcHNob3QucHJvdG90eXBlLGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1RvcExldmVsJzt9fTt0ci5tb2RlbC5PYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihUb3BMZXZlbFNuYXBzaG90LHt0eXBlTmFtZTonVG9wTGV2ZWwnfSk7ZnVuY3Rpb24gVG9wTGV2ZWxJbnN0YW5jZSgpe0JsYW1lQ29udGV4dEluc3RhbmNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9ClRvcExldmVsSW5zdGFuY2UucHJvdG90eXBlPXtfX3Byb3RvX186QmxhbWVDb250ZXh0SW5zdGFuY2UucHJvdG90eXBlLGdldCBibGFtZUNvbnRleHRUeXBlKCl7cmV0dXJuJ1RvcExldmVsJzt9fTt0ci5tb2RlbC5PYmplY3RJbnN0YW5jZS5zdWJUeXBlcy5yZWdpc3RlcihUb3BMZXZlbEluc3RhbmNlLHt0eXBlTmFtZTonVG9wTGV2ZWwnfSk7cmV0dXJue1RvcExldmVsU25hcHNob3QsVG9wTGV2ZWxJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQXN5bmNTbGljZShjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3MsZHVyYXRpb24sb3B0X2lzVG9wTGV2ZWwsb3B0X2NwdVN0YXJ0LG9wdF9jcHVEdXJhdGlvbixvcHRfYXJnc1N0cmlwcGVkKXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeXx8Jyc7dGhpcy5vcmlnaW5hbFRpdGxlPXRpdGxlO3RoaXMudGl0bGU9dGl0bGU7dGhpcy5jb2xvcklkPWNvbG9ySWQ7dGhpcy5hcmdzPWFyZ3M7dGhpcy5zdGFydFN0YWNrRnJhbWU9dW5kZWZpbmVkO3RoaXMuZW5kU3RhY2tGcmFtZT11bmRlZmluZWQ7dGhpcy5kaWROb3RGaW5pc2g9ZmFsc2U7dGhpcy5pbXBvcnRhbnQ9ZmFsc2U7dGhpcy5zdWJTbGljZXM9W107dGhpcy5wYXJlbnRDb250YWluZXJfPXVuZGVmaW5lZDt0aGlzLmlkPXVuZGVmaW5lZDt0aGlzLnN0YXJ0VGhyZWFkPXVuZGVmaW5lZDt0aGlzLmVuZFRocmVhZD11bmRlZmluZWQ7dGhpcy5jcHVTdGFydD11bmRlZmluZWQ7dGhpcy5jcHVEdXJhdGlvbj11bmRlZmluZWQ7dGhpcy5hcmdzU3RyaXBwZWQ9ZmFsc2U7dGhpcy5zdGFydFN0YWNrRnJhbWU9dW5kZWZpbmVkO3RoaXMuZW5kU3RhY2tGcmFtZT11bmRlZmluZWQ7dGhpcy5kdXJhdGlvbj1kdXJhdGlvbjt0aGlzLmlzVG9wTGV2ZWw9KG9wdF9pc1RvcExldmVsPT09dHJ1ZSk7aWYob3B0X2NwdVN0YXJ0IT09dW5kZWZpbmVkKXt0aGlzLmNwdVN0YXJ0PW9wdF9jcHVTdGFydDt9CmlmKG9wdF9jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7dGhpcy5jcHVEdXJhdGlvbj1vcHRfY3B1RHVyYXRpb247fQppZihvcHRfYXJnc1N0cmlwcGVkIT09dW5kZWZpbmVkKXt0aGlzLmFyZ3NTdHJpcHBlZD1vcHRfYXJnc1N0cmlwcGVkO319CkFzeW5jU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsZ2V0IGFuYWx5c2lzVHlwZU5hbWUoKXtyZXR1cm4gdGhpcy50aXRsZTt9LGdldCBwYXJlbnRDb250YWluZXIoKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJfO30sc2V0IHBhcmVudENvbnRhaW5lcihwYXJlbnRDb250YWluZXIpe3RoaXMucGFyZW50Q29udGFpbmVyXz1wYXJlbnRDb250YWluZXI7Zm9yKGxldCBpPTA7aTx0aGlzLnN1YlNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCBzdWJTbGljZT10aGlzLnN1YlNsaWNlc1tpXTtpZihzdWJTbGljZS5wYXJlbnRDb250YWluZXI9PT11bmRlZmluZWQpe3N1YlNsaWNlLnBhcmVudENvbnRhaW5lcj1wYXJlbnRDb250YWluZXI7fX19LGdldCB2aWV3U3ViR3JvdXBUaXRsZSgpe3JldHVybiB0aGlzLnRpdGxlO30sZ2V0IHZpZXdTdWJHcm91cEdyb3VwaW5nS2V5KCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0FzeW5jIHNsaWNlICcrdGhpcy50aXRsZSsnIGF0ICcrCnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQodGhpcy5zdGFydCk7fSxnZXQgc3RhYmxlSWQoKXtjb25zdCBwYXJlbnRBc3luY1NsaWNlR3JvdXA9dGhpcy5wYXJlbnRDb250YWluZXIuYXN5bmNTbGljZUdyb3VwO3JldHVybiBwYXJlbnRBc3luY1NsaWNlR3JvdXAuc3RhYmxlSWQrJy4nKwpwYXJlbnRBc3luY1NsaWNlR3JvdXAuc2xpY2VzLmluZGV4T2YodGhpcyk7fSwqZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKXtpZihldmVudFByZWRpY2F0ZSh0aGlzKSl7eWllbGQgdGhpcztyZXR1cm47fQpmb3IoY29uc3QgcyBvZiB0aGlzLnN1YlNsaWNlcyl7eWllbGQqcy5maW5kVG9wbW9zdFNsaWNlc1JlbGF0aXZlVG9UaGlzU2xpY2UoZXZlbnRQcmVkaWNhdGUpO319LGZpbmREZXNjZW5kZW50U2xpY2UodGFyZ2V0VGl0bGUpe2lmKCF0aGlzLnN1YlNsaWNlcylyZXR1cm4gdW5kZWZpbmVkO2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJTbGljZXMubGVuZ3RoO2krKyl7aWYodGhpcy5zdWJTbGljZXNbaV0udGl0bGU9PT10YXJnZXRUaXRsZSl7cmV0dXJuIHRoaXMuc3ViU2xpY2VzW2ldO30KY29uc3Qgc2xpY2U9dGhpcy5zdWJTbGljZXNbaV0uZmluZERlc2NlbmRlbnRTbGljZSh0YXJnZXRUaXRsZSk7aWYoc2xpY2UpcmV0dXJuIHNsaWNlO30KcmV0dXJuIHVuZGVmaW5lZDt9LCplbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnN1YlNsaWNlcyl7eWllbGQgc2xpY2U7fQpmb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy5zdWJTbGljZXMpe2lmKHNsaWNlLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzIT09dW5kZWZpbmVkKXt5aWVsZCpzbGljZS5lbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpO319fSxjb21wYXJlVG8odGhhdCl7cmV0dXJuIHRoaXMudGl0bGUubG9jYWxlQ29tcGFyZSh0aGF0LnRpdGxlKTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKEFzeW5jU2xpY2Use25hbWU6J2FzeW5jU2xpY2UnLHBsdXJhbE5hbWU6J2FzeW5jU2xpY2VzJ30pO3JldHVybntBc3luY1NsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmJsaW5rJyxmdW5jdGlvbigpe2NsYXNzIEJsaW5rU2NoZWR1bGVyQXN5bmNTbGljZSBleHRlbmRzIHRyLm1vZGVsLkFzeW5jU2xpY2V7Z2V0IHZpZXdTdWJHcm91cEdyb3VwaW5nS2V5KCl7aWYodGhpcy50aXRsZS5zdGFydHNXaXRoKCdGcmFtZVNjaGVkdWxlci4nKSl7cmV0dXJuJ0ZyYW1lJyt0aGlzLmlkO30KaWYodGhpcy50aXRsZS5zdGFydHNXaXRoKCdTY2hlZHVsZXIuJykpe3JldHVybidSZW5kZXJlciBTY2hlZHVsZXInO30KcmV0dXJuIHVuZGVmaW5lZDt9CmdldCB2aWV3U3ViR3JvdXBUaXRsZSgpe2lmKHRoaXMudGl0bGUuc3RhcnRzV2l0aCgnRnJhbWVTY2hlZHVsZXIuJykpe3JldHVybiB0aGlzLnRpdGxlLnN1YnN0cmluZygxNSk7fQppZih0aGlzLnRpdGxlLnN0YXJ0c1dpdGgoJ1NjaGVkdWxlci4nKSl7cmV0dXJuIHRoaXMudGl0bGUuc3Vic3RyaW5nKDEwKTt9CnJldHVybiB0aGlzLnRpdGxlO319CnRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMucmVnaXN0ZXIoQmxpbmtTY2hlZHVsZXJBc3luY1NsaWNlLHtjYXRlZ29yeVBhcnRzOlsncmVuZGVyZXIuc2NoZWR1bGVyJywnZGlzYWJsZWQtYnktZGVmYXVsdC1yZW5kZXJlci5zY2hlZHVsZXInLCdkaXNhYmxlZC1ieS1kZWZhdWx0LXJlbmRlcmVyLnNjaGVkdWxlci5kZWJ1ZycsXX0pO3JldHVybntCbGlua1NjaGVkdWxlckFzeW5jU2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7Y29uc3QgTUFJTl9GUkFNRVRJTUVfVFlQRT0nbWFpbl9mcmFtZXRpbWVfdHlwZSc7Y29uc3QgSU1QTF9GUkFNRVRJTUVfVFlQRT0naW1wbF9mcmFtZXRpbWVfdHlwZSc7Y29uc3QgTUFJTl9SRU5ERVJJTkdfU1RBVFM9J0JlbmNobWFya0luc3RydW1lbnRhdGlvbjo6TWFpblRocmVhZFJlbmRlcmluZ1N0YXRzJztjb25zdCBJTVBMX1JFTkRFUklOR19TVEFUUz0nQmVuY2htYXJrSW5zdHJ1bWVudGF0aW9uOjpJbXBsVGhyZWFkUmVuZGVyaW5nU3RhdHMnO2Z1bmN0aW9uIGdldFNsaWNlc0ludGVyc2VjdGluZ1JhbmdlKHJhbmdlT2ZJbnRlcmVzdCxzbGljZXMpe2NvbnN0IHNsaWNlc0luRmlsdGVyUmFuZ2U9W107Zm9yKGxldCBpPTA7aTxzbGljZXMubGVuZ3RoO2krKyl7Y29uc3Qgc2xpY2U9c2xpY2VzW2ldO2lmKHJhbmdlT2ZJbnRlcmVzdC5pbnRlcnNlY3RzRXhwbGljaXRSYW5nZUluY2x1c2l2ZShzbGljZS5zdGFydCxzbGljZS5lbmQpKXtzbGljZXNJbkZpbHRlclJhbmdlLnB1c2goc2xpY2UpO319CnJldHVybiBzbGljZXNJbkZpbHRlclJhbmdlO30KZnVuY3Rpb24gQ2hyb21lUHJvY2Vzc0hlbHBlcihtb2RlbEhlbHBlcixwcm9jZXNzKXt0aGlzLm1vZGVsSGVscGVyPW1vZGVsSGVscGVyO3RoaXMucHJvY2Vzcz1wcm9jZXNzO3RoaXMudGVsZW1ldHJ5SW50ZXJuYWxSYW5nZXNfPXVuZGVmaW5lZDt9CkNocm9tZVByb2Nlc3NIZWxwZXIucHJvdG90eXBlPXtnZXQgcGlkKCl7cmV0dXJuIHRoaXMucHJvY2Vzcy5waWQ7fSxpc1RlbGVtZXRyeUludGVybmFsRXZlbnQoc2xpY2Upe2lmKHRoaXMudGVsZW1ldHJ5SW50ZXJuYWxSYW5nZXNfPT09dW5kZWZpbmVkKXt0aGlzLmZpbmRUZWxlbWV0cnlJbnRlcm5hbFJhbmdlc18oKTt9CmZvcihjb25zdCByYW5nZSBvZiB0aGlzLnRlbGVtZXRyeUludGVybmFsUmFuZ2VzXyl7aWYocmFuZ2UuY29udGFpbnNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCkpe3JldHVybiB0cnVlO319CnJldHVybiBmYWxzZTt9LGZpbmRUZWxlbWV0cnlJbnRlcm5hbFJhbmdlc18oKXt0aGlzLnRlbGVtZXRyeUludGVybmFsUmFuZ2VzXz1bXTtsZXQgc3RhcnQ9MDtmb3IoY29uc3QgdGhyZWFkIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzLnRocmVhZHMpKXtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhyZWFkLmFzeW5jU2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKC9edGVsZW1ldHJ5XC5pbnRlcm5hbFwuLipcLnN0YXJ0JC8udGVzdChzbGljZS50aXRsZSkpe3N0YXJ0PXNsaWNlLnN0YXJ0O31lbHNlIGlmKC9edGVsZW1ldHJ5XC5pbnRlcm5hbFwuLipcLmVuZCQvLnRlc3Qoc2xpY2UudGl0bGUpJiZzdGFydCE9PXVuZGVmaW5lZCl7dGhpcy50ZWxlbWV0cnlJbnRlcm5hbFJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc3RhcnQsc2xpY2UuZW5kKSk7c3RhcnQ9dW5kZWZpbmVkO319fX0sZ2V0RnJhbWVFdmVudHNJblJhbmdlKGZyYW1ldGltZVR5cGUscmFuZ2Upe2NvbnN0IHRpdGxlVG9HZXQ9KGZyYW1ldGltZVR5cGU9PT1NQUlOX0ZSQU1FVElNRV9UWVBFP01BSU5fUkVOREVSSU5HX1NUQVRTOklNUExfUkVOREVSSU5HX1NUQVRTKTtjb25zdCBmcmFtZUV2ZW50cz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5wcm9jZXNzLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT10aXRsZVRvR2V0KXtpZihyYW5nZS5pbnRlcnNlY3RzRXhwbGljaXRSYW5nZUluY2x1c2l2ZShldmVudC5zdGFydCxldmVudC5lbmQpKXtmcmFtZUV2ZW50cy5wdXNoKGV2ZW50KTt9fX0KZnJhbWVFdmVudHMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnN0YXJ0LWIuc3RhcnQ7fSk7cmV0dXJuIGZyYW1lRXZlbnRzO319O2Z1bmN0aW9uIGdldEZyYW1ldGltZURhdGFGcm9tRXZlbnRzKGZyYW1lRXZlbnRzKXtjb25zdCBmcmFtZXRpbWVEYXRhPVtdO2ZvcihsZXQgaT0xO2k8ZnJhbWVFdmVudHMubGVuZ3RoO2krKyl7Y29uc3QgZGlmZj1mcmFtZUV2ZW50c1tpXS5zdGFydC1mcmFtZUV2ZW50c1tpLTFdLnN0YXJ0O2ZyYW1ldGltZURhdGEucHVzaCh7J3gnOmZyYW1lRXZlbnRzW2ldLnN0YXJ0LCdmcmFtZXRpbWUnOmRpZmZ9KTt9CnJldHVybiBmcmFtZXRpbWVEYXRhO30KcmV0dXJue0Nocm9tZVByb2Nlc3NIZWxwZXIsTUFJTl9GUkFNRVRJTUVfVFlQRSxJTVBMX0ZSQU1FVElNRV9UWVBFLE1BSU5fUkVOREVSSU5HX1NUQVRTLElNUExfUkVOREVSSU5HX1NUQVRTLGdldFNsaWNlc0ludGVyc2VjdGluZ1JhbmdlLGdldEZyYW1ldGltZURhdGFGcm9tRXZlbnRzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC5oZWxwZXJzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENocm9tZUJyb3dzZXJIZWxwZXIobW9kZWxIZWxwZXIscHJvY2Vzcyl7dHIubW9kZWwuaGVscGVycy5DaHJvbWVQcm9jZXNzSGVscGVyLmNhbGwodGhpcyxtb2RlbEhlbHBlcixwcm9jZXNzKTt0aGlzLm1haW5UaHJlYWRfPXByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDckJyb3dzZXJNYWluJyk7aWYoIXByb2Nlc3MubmFtZSl7cHJvY2Vzcy5uYW1lPUNocm9tZUJyb3dzZXJIZWxwZXIuUFJPQ0VTU19OQU1FO319CkNocm9tZUJyb3dzZXJIZWxwZXIuUFJPQ0VTU19OQU1FPSdCcm93c2VyJztDaHJvbWVCcm93c2VySGVscGVyLmlzQnJvd3NlclByb2Nlc3M9ZnVuY3Rpb24ocHJvY2Vzcyl7cmV0dXJuISFwcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JCcm93c2VyTWFpbicpO307Q2hyb21lQnJvd3NlckhlbHBlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5oZWxwZXJzLkNocm9tZVByb2Nlc3NIZWxwZXIucHJvdG90eXBlLGdldCBicm93c2VyTmFtZSgpe2NvbnN0IGhhc0luUHJvY2Vzc1JlbmRlcmVyVGhyZWFkPXRoaXMucHJvY2Vzcy5maW5kQWxsVGhyZWFkc05hbWVkKCdDaHJvbWVfSW5Qcm9jUmVuZGVyZXJUaHJlYWQnKS5sZW5ndGg+MDtyZXR1cm4gaGFzSW5Qcm9jZXNzUmVuZGVyZXJUaHJlYWQ/J3dlYnZpZXcnOidjaHJvbWUnO30sZ2V0IG1haW5UaHJlYWQoKXtyZXR1cm4gdGhpcy5tYWluVGhyZWFkXzt9LGdldCByZW5kZXJlckhlbHBlcnMoKXtyZXR1cm4gdGhpcy5tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnM7fSxnZXRMb2FkaW5nRXZlbnRzSW5SYW5nZShyYW5nZU9mSW50ZXJlc3Qpe3JldHVybiB0aGlzLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzbGljZS50aXRsZS5pbmRleE9mKCdXZWJDb250ZW50c0ltcGwgTG9hZGluZycpPT09MCYmcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCk7fSk7fSxnZXRDb21taXRQcm92aXNpb25hbExvYWRFdmVudHNJblJhbmdlKHJhbmdlT2ZJbnRlcmVzdCl7cmV0dXJuIHRoaXMuZ2V0QWxsQXN5bmNTbGljZXNNYXRjaGluZyhmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnRpdGxlPT09J1JlbmRlckZyYW1lSW1wbDo6ZGlkQ29tbWl0UHJvdmlzaW9uYWxMb2FkJyYmcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCk7fSk7fSxnZXQgaGFzTGF0ZW5jeUV2ZW50cygpe2xldCBoYXNMYXRlbmN5PWZhbHNlO2Zvcihjb25zdCB0aHJlYWQgb2YgdGhpcy5tb2RlbEhlbHBlci5tb2RlbC5nZXRBbGxUaHJlYWRzKCkpe2Zvcihjb25zdCBldmVudCBvZiB0aHJlYWQuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighZXZlbnQuaXNUb3BMZXZlbCljb250aW51ZTtpZighKGV2ZW50IGluc3RhbmNlb2YgdHIuZS5jYy5JbnB1dExhdGVuY3lBc3luY1NsaWNlKSl7Y29udGludWU7fQpoYXNMYXRlbmN5PXRydWU7fX0KcmV0dXJuIGhhc0xhdGVuY3k7fSxnZXRMYXRlbmN5RXZlbnRzSW5SYW5nZShyYW5nZU9mSW50ZXJlc3Qpe3JldHVybiB0aGlzLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoZnVuY3Rpb24oc2xpY2Upe3JldHVybihzbGljZS50aXRsZS5pbmRleE9mKCdJbnB1dExhdGVuY3knKT09PTApJiZyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoc2xpY2Uuc3RhcnQsc2xpY2UuZW5kKTt9KTt9LGdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcocHJlZCxvcHRfdGhpcyl7Y29uc3QgZXZlbnRzPVtdO3RoaXMuaXRlckFsbFRocmVhZHMoZnVuY3Rpb24odGhyZWFkKXtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhyZWFkLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYocHJlZC5jYWxsKG9wdF90aGlzLHNsaWNlKSl7ZXZlbnRzLnB1c2goc2xpY2UpO319fSk7cmV0dXJuIGV2ZW50czt9LGl0ZXJBbGxUaHJlYWRzKGZ1bmMsb3B0X3RoaXMpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnByb2Nlc3MudGhyZWFkcykpe2Z1bmMuY2FsbChvcHRfdGhpcyx0aHJlYWQpO30KZm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCByZW5kZXJlclByb2Nlc3M9cmVuZGVyZXJIZWxwZXIucHJvY2Vzcztmb3IoY29uc3QgdGhyZWFkIG9mIE9iamVjdC52YWx1ZXMocmVuZGVyZXJQcm9jZXNzLnRocmVhZHMpKXtmdW5jLmNhbGwob3B0X3RoaXMsdGhyZWFkKTt9fX19O3JldHVybntDaHJvbWVCcm93c2VySGVscGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC5oZWxwZXJzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENocm9tZUdwdUhlbHBlcihtb2RlbEhlbHBlcixwcm9jZXNzKXt0ci5tb2RlbC5oZWxwZXJzLkNocm9tZVByb2Nlc3NIZWxwZXIuY2FsbCh0aGlzLG1vZGVsSGVscGVyLHByb2Nlc3MpO2lmKCFwcm9jZXNzLm5hbWUpe3Byb2Nlc3MubmFtZT1DaHJvbWVHcHVIZWxwZXIuUFJPQ0VTU19OQU1FO319CkNocm9tZUdwdUhlbHBlci5QUk9DRVNTX05BTUU9J0dQVSBQcm9jZXNzJztDaHJvbWVHcHVIZWxwZXIuaXNHcHVQcm9jZXNzPWZ1bmN0aW9uKHByb2Nlc3Mpe2lmKHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDckJyb3dzZXJNYWluJyl8fHByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDclJlbmRlcmVyTWFpbicpKXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gcHJvY2Vzcy5maW5kQWxsVGhyZWFkc05hbWVkKCdDckdwdU1haW4nKS5sZW5ndGg+MDt9O0Nocm9tZUdwdUhlbHBlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5oZWxwZXJzLkNocm9tZVByb2Nlc3NIZWxwZXIucHJvdG90eXBlfTtyZXR1cm57Q2hyb21lR3B1SGVscGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC5oZWxwZXJzJyxmdW5jdGlvbigpe2NvbnN0IE5FVF9DQVRFR09SSUVTPW5ldyBTZXQoWyduZXQnLCduZXRsb2cnLCdkaXNhYmxlZC1ieS1kZWZhdWx0LW5ldGxvZycsJ2Rpc2FibGVkLWJ5LWRlZmF1bHQtbmV0d29yayddKTtjbGFzcyBDaHJvbWVUaHJlYWRIZWxwZXJ7Y29uc3RydWN0b3IodGhyZWFkKXt0aGlzLnRocmVhZD10aHJlYWQ7fQpnZXROZXR3b3JrRXZlbnRzKCl7Y29uc3QgbmV0d29ya0V2ZW50cz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhpcy50aHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcyl7Y29uc3QgY2F0ZWdvcmllcz10ci5iLmdldENhdGVnb3J5UGFydHMoc2xpY2UuY2F0ZWdvcnkpO2NvbnN0IGlzTmV0RXZlbnQ9Y2F0ZWdvcnk9Pk5FVF9DQVRFR09SSUVTLmhhcyhjYXRlZ29yeSk7aWYoY2F0ZWdvcmllcy5maWx0ZXIoaXNOZXRFdmVudCkubGVuZ3RoPT09MCljb250aW51ZTtuZXR3b3JrRXZlbnRzLnB1c2goc2xpY2UpO30KcmV0dXJuIG5ldHdvcmtFdmVudHM7fX0KcmV0dXJue0Nocm9tZVRocmVhZEhlbHBlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuaGVscGVycycsZnVuY3Rpb24oKXtjb25zdCBDaHJvbWVUaHJlYWRIZWxwZXI9dHIubW9kZWwuaGVscGVycy5DaHJvbWVUaHJlYWRIZWxwZXI7ZnVuY3Rpb24gQ2hyb21lUmVuZGVyZXJIZWxwZXIobW9kZWxIZWxwZXIscHJvY2Vzcyl7dHIubW9kZWwuaGVscGVycy5DaHJvbWVQcm9jZXNzSGVscGVyLmNhbGwodGhpcyxtb2RlbEhlbHBlcixwcm9jZXNzKTt0aGlzLm1haW5UaHJlYWRfPXByb2Nlc3MuZmluZEF0TW9zdE9uZVRocmVhZE5hbWVkKCdDclJlbmRlcmVyTWFpbicpfHxwcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ2hyb21lX0luUHJvY1JlbmRlcmVyVGhyZWFkJyk7dGhpcy5jb21wb3NpdG9yVGhyZWFkXz1wcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ29tcG9zaXRvcicpO3RoaXMucmFzdGVyV29ya2VyVGhyZWFkc189cHJvY2Vzcy5maW5kQWxsVGhyZWFkc01hdGNoaW5nKGZ1bmN0aW9uKHQpe2lmKHQubmFtZT09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7aWYodC5uYW1lLnN0YXJ0c1dpdGgoJ0NvbXBvc2l0b3JUaWxlV29ya2VyJykpcmV0dXJuIHRydWU7aWYodC5uYW1lLnN0YXJ0c1dpdGgoJ0NvbXBvc2l0b3JSYXN0ZXJXb3JrZXInKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fSk7dGhpcy5kZWRpY2F0ZWRXb3JrZXJUaHJlYWRzXz1wcm9jZXNzLmZpbmRBbGxUaHJlYWRzTWF0Y2hpbmcoZnVuY3Rpb24odCl7cmV0dXJuIHQubmFtZSYmdC5uYW1lLnN0YXJ0c1dpdGgoJ0RlZGljYXRlZFdvcmtlcicpO30pO3RoaXMuZm9yZWdyb3VuZFdvcmtlclRocmVhZHNfPXByb2Nlc3MuZmluZEFsbFRocmVhZHNNYXRjaGluZyhmdW5jdGlvbih0KXtyZXR1cm4gdC5uYW1lJiZ0Lm5hbWUuc3RhcnRzV2l0aCgnVGhyZWFkUG9vbEZvcmVncm91bmRXb3JrZXInKTt9KTtpZighcHJvY2Vzcy5uYW1lKXtwcm9jZXNzLm5hbWU9Q2hyb21lUmVuZGVyZXJIZWxwZXIuUFJPQ0VTU19OQU1FO319CkNocm9tZVJlbmRlcmVySGVscGVyLlBST0NFU1NfTkFNRT0nUmVuZGVyZXInO0Nocm9tZVJlbmRlcmVySGVscGVyLmlzUmVuZGVyUHJvY2Vzcz1mdW5jdGlvbihwcm9jZXNzKXtpZihwcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JSZW5kZXJlck1haW4nKSlyZXR1cm4gdHJ1ZTtpZihwcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ29tcG9zaXRvcicpKXJldHVybiB0cnVlO3JldHVybiBmYWxzZTt9O0Nocm9tZVJlbmRlcmVySGVscGVyLmlzVHJhY2luZ1Byb2Nlc3M9ZnVuY3Rpb24ocHJvY2Vzcyl7cmV0dXJuIHByb2Nlc3MubGFiZWxzIT09dW5kZWZpbmVkJiZwcm9jZXNzLmxhYmVscy5sZW5ndGg9PT0xJiZwcm9jZXNzLmxhYmVsc1swXT09PSdjaHJvbWU6Ly90cmFjaW5nJzt9O0Nocm9tZVJlbmRlcmVySGVscGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUHJvY2Vzc0hlbHBlci5wcm90b3R5cGUsZ2V0IG1haW5UaHJlYWQoKXtyZXR1cm4gdGhpcy5tYWluVGhyZWFkXzt9LGdldCBjb21wb3NpdG9yVGhyZWFkKCl7cmV0dXJuIHRoaXMuY29tcG9zaXRvclRocmVhZF87fSxnZXQgcmFzdGVyV29ya2VyVGhyZWFkcygpe3JldHVybiB0aGlzLnJhc3RlcldvcmtlclRocmVhZHNfO30sZ2V0IGRlZGljYXRlZFdvcmtlclRocmVhZHMoKXtyZXR1cm4gdGhpcy5kZWRpY2F0ZWRXb3JrZXJUaHJlYWRzXzt9LGdldCBmb3JlZ3JvdW5kV29ya2VyVGhyZWFkcygpe3JldHVybiB0aGlzLmZvcmVncm91bmRXb3JrZXJUaHJlYWRzXzt9LGdldCBpc0Nocm9tZVRyYWNpbmdVSSgpe3JldHVybiBDaHJvbWVSZW5kZXJlckhlbHBlci5pc1RyYWNpbmdQcm9jZXNzKHRoaXMucHJvY2Vzcyk7fSx9O3JldHVybntDaHJvbWVSZW5kZXJlckhlbHBlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7Y2xhc3MgU2VnbWVudCBleHRlbmRzIHRyLm1vZGVsLlRpbWVkRXZlbnR7Y29uc3RydWN0b3Ioc3RhcnQsZHVyYXRpb24pe3N1cGVyKHN0YXJ0KTt0aGlzLmR1cmF0aW9uPWR1cmF0aW9uO3RoaXMuZXhwZWN0YXRpb25zXz1bXTt9CmdldCBleHBlY3RhdGlvbnMoKXtyZXR1cm4gdGhpcy5leHBlY3RhdGlvbnNfO30KY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgU2VnbWVudCh0aGlzLnN0YXJ0LHRoaXMuZHVyYXRpb24pO2Nsb25lLmV4cGVjdGF0aW9ucy5wdXNoKC4uLnRoaXMuZXhwZWN0YXRpb25zKTtyZXR1cm4gY2xvbmU7fQphZGRTZWdtZW50KG90aGVyKXt0aGlzLmR1cmF0aW9uKz1vdGhlci5kdXJhdGlvbjt0aGlzLmV4cGVjdGF0aW9ucy5wdXNoKC4uLm90aGVyLmV4cGVjdGF0aW9ucyk7fX0KcmV0dXJue1NlZ21lbnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7Y29uc3QgR0VTVFVSRV9FVkVOVD0nU3ludGhldGljR2VzdHVyZUNvbnRyb2xsZXI6OnJ1bm5pbmcnO2NvbnN0IElSX1JFR19FWFA9L0ludGVyYWN0aW9uXC4oW14vXSspKFwvW14vXSopPyQvO2NvbnN0IENocm9tZVJlbmRlcmVySGVscGVyPXRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUmVuZGVyZXJIZWxwZXI7Y2xhc3MgVGVsZW1ldHJ5SGVscGVye2NvbnN0cnVjdG9yKG1vZGVsSGVscGVyKXt0aGlzLm1vZGVsSGVscGVyPW1vZGVsSGVscGVyO3RoaXMucmVuZGVyZXJzV2l0aElSXz11bmRlZmluZWQ7dGhpcy5pclNlZ21lbnRzXz11bmRlZmluZWQ7dGhpcy51aVNlZ21lbnRzXz11bmRlZmluZWQ7dGhpcy5hbmltYXRpb25TZWdtZW50c189dW5kZWZpbmVkO30KZ2V0IHJlbmRlcmVyc1dpdGhJUigpe3RoaXMuZmluZElSc18oKTtyZXR1cm4gdGhpcy5yZW5kZXJlcnNXaXRoSVJfO30KZ2V0IGlyU2VnbWVudHMoKXt0aGlzLmZpbmRJUnNfKCk7cmV0dXJuIHRoaXMuaXJTZWdtZW50c187fQpnZXQgdWlTZWdtZW50cygpe3RoaXMuZmluZElSc18oKTtyZXR1cm4gdGhpcy51aVNlZ21lbnRzXzt9CmdldCBhbmltYXRpb25TZWdtZW50cygpe2lmKHRoaXMuYW5pbWF0aW9uU2VnbWVudHNfPT09dW5kZWZpbmVkKXtjb25zdCBtb2RlbD10aGlzLm1vZGVsSGVscGVyLm1vZGVsO3RoaXMuYW5pbWF0aW9uU2VnbWVudHNfPW1vZGVsLnVzZXJNb2RlbC5zZWdtZW50cy5maWx0ZXIoc2VnbWVudD0+c2VnbWVudC5leHBlY3RhdGlvbnMuZmluZCh1ZT0+dWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5BbmltYXRpb25FeHBlY3RhdGlvbikpO3RoaXMuYW5pbWF0aW9uU2VnbWVudHNfLnNvcnQoKHgseSk9Pnguc3RhcnQteS5zdGFydCk7fQpyZXR1cm4gdGhpcy5hbmltYXRpb25TZWdtZW50c187fQpmaW5kSVJzXygpe2lmKHRoaXMuaXJTZWdtZW50c18hPT11bmRlZmluZWQpcmV0dXJuO3RoaXMucmVuZGVyZXJzV2l0aElSXz1bXTtjb25zdCBnZXN0dXJlRXZlbnRzPVtdO2NvbnN0IGludGVyYWN0aW9uUmVjb3Jkcz1bXTtjb25zdCBwcm9jZXNzZXM9T2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycykuY29uY2F0KHRoaXMubW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcnMpLm1hcChwcm9jZXNzSGVscGVyPT5wcm9jZXNzSGVscGVyLnByb2Nlc3MpO2Zvcihjb25zdCBwcm9jZXNzIG9mIHByb2Nlc3Nlcyl7bGV0IGZvdW5kSVI9ZmFsc2U7Zm9yKGNvbnN0IHRocmVhZCBvZiBPYmplY3QudmFsdWVzKHByb2Nlc3MudGhyZWFkcykpe2Zvcihjb25zdCBzbGljZSBvZiB0aHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcyl7aWYoc2xpY2UudGl0bGU9PT1HRVNUVVJFX0VWRU5UKXtnZXN0dXJlRXZlbnRzLnB1c2goc2xpY2UpO31lbHNlIGlmKElSX1JFR19FWFAudGVzdChzbGljZS50aXRsZSkpe2ludGVyYWN0aW9uUmVjb3Jkcy5wdXNoKHNsaWNlKTtmb3VuZElSPXRydWU7fX19CmlmKGZvdW5kSVImJkNocm9tZVJlbmRlcmVySGVscGVyLmlzUmVuZGVyUHJvY2Vzcyhwcm9jZXNzKSYmIUNocm9tZVJlbmRlcmVySGVscGVyLmlzVHJhY2luZ1Byb2Nlc3MocHJvY2Vzcykpe3RoaXMucmVuZGVyZXJzV2l0aElSXy5wdXNoKG5ldyBDaHJvbWVSZW5kZXJlckhlbHBlcih0aGlzLm1vZGVsSGVscGVyLHByb2Nlc3MpKTt9fQp0aGlzLmlyU2VnbWVudHNfPVtdO3RoaXMudWlTZWdtZW50c189W107Zm9yKGNvbnN0IGlyIG9mIGludGVyYWN0aW9uUmVjb3Jkcyl7Y29uc3QgcGFydHM9SVJfUkVHX0VYUC5leGVjKGlyLnRpdGxlKTtsZXQgZ2VzdHVyZUV2ZW50Rm91bmQ9ZmFsc2U7aWYocGFydHNbMV0uc3RhcnRzV2l0aCgnR2VzdHVyZV8nKSl7Zm9yKGNvbnN0IGdlc3R1cmVFdmVudCBvZiBnZXN0dXJlRXZlbnRzKXtpZihpci5ib3VuZHNSYW5nZS5pbnRlcnNlY3RzUmFuZ2VJbmNsdXNpdmUoZ2VzdHVyZUV2ZW50LmJvdW5kc1JhbmdlKSl7dGhpcy5pclNlZ21lbnRzXy5wdXNoKG5ldyB0ci5tb2RlbC51bS5TZWdtZW50KGdlc3R1cmVFdmVudC5zdGFydCxnZXN0dXJlRXZlbnQuZHVyYXRpb24pKTtnZXN0dXJlRXZlbnRGb3VuZD10cnVlO2JyZWFrO319fWVsc2UgaWYocGFydHNbMV0uc3RhcnRzV2l0aCgndWlfJykpe3RoaXMudWlTZWdtZW50c18ucHVzaChuZXcgdHIubW9kZWwudW0uU2VnbWVudChpci5zdGFydCxpci5kdXJhdGlvbikpO30KaWYoIWdlc3R1cmVFdmVudEZvdW5kKXt0aGlzLmlyU2VnbWVudHNfLnB1c2gobmV3IHRyLm1vZGVsLnVtLlNlZ21lbnQoaXIuc3RhcnQsaXIuZHVyYXRpb24pKTt9fQp0aGlzLmlyU2VnbWVudHNfLnNvcnQoKHgseSk9Pnguc3RhcnQteS5zdGFydCk7dGhpcy51aVNlZ21lbnRzXy5zb3J0KCh4LHkpPT54LnN0YXJ0LXkuc3RhcnQpO319CnJldHVybntUZWxlbWV0cnlIZWxwZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLmhlbHBlcnMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZmluZENocm9tZUJyb3dzZXJQcm9jZXNzZXMobW9kZWwpe3JldHVybiBtb2RlbC5nZXRBbGxQcm9jZXNzZXModHIubW9kZWwuaGVscGVycy5DaHJvbWVCcm93c2VySGVscGVyLmlzQnJvd3NlclByb2Nlc3MpO30KZnVuY3Rpb24gZmluZENocm9tZVJlbmRlclByb2Nlc3Nlcyhtb2RlbCl7cmV0dXJuIG1vZGVsLmdldEFsbFByb2Nlc3Nlcyh0ci5tb2RlbC5oZWxwZXJzLkNocm9tZVJlbmRlcmVySGVscGVyLmlzUmVuZGVyUHJvY2Vzcyk7fQpmdW5jdGlvbiBmaW5kQ2hyb21lR3B1UHJvY2Vzcyhtb2RlbCl7Y29uc3QgZ3B1UHJvY2Vzc2VzPW1vZGVsLmdldEFsbFByb2Nlc3Nlcyh0ci5tb2RlbC5oZWxwZXJzLkNocm9tZUdwdUhlbHBlci5pc0dwdVByb2Nlc3MpO2lmKGdwdVByb2Nlc3Nlcy5sZW5ndGghPT0xKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGdwdVByb2Nlc3Nlc1swXTt9CmZ1bmN0aW9uIGZpbmRUZWxlbWV0cnlTdXJmYWNlRmxpbmdlclByb2Nlc3MobW9kZWwpe2NvbnN0IHN1cmZhY2VGbGluZ2VyUHJvY2Vzc2VzPW1vZGVsLmdldEFsbFByb2Nlc3Nlcyhwcm9jZXNzPT4ocHJvY2Vzcy5uYW1lPT09J1N1cmZhY2VGbGluZ2VyJykpO2lmKHN1cmZhY2VGbGluZ2VyUHJvY2Vzc2VzLmxlbmd0aCE9PTEpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gc3VyZmFjZUZsaW5nZXJQcm9jZXNzZXNbMF07fQpmdW5jdGlvbiBDaHJvbWVNb2RlbEhlbHBlcihtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7Y29uc3QgYnJvd3NlclByb2Nlc3Nlcz1maW5kQ2hyb21lQnJvd3NlclByb2Nlc3Nlcyhtb2RlbCk7dGhpcy5icm93c2VySGVscGVyc189YnJvd3NlclByb2Nlc3Nlcy5tYXAocD0+bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lQnJvd3NlckhlbHBlcih0aGlzLHApKTtjb25zdCBncHVQcm9jZXNzPWZpbmRDaHJvbWVHcHVQcm9jZXNzKG1vZGVsKTtpZihncHVQcm9jZXNzKXt0aGlzLmdwdUhlbHBlcl89bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lR3B1SGVscGVyKHRoaXMsZ3B1UHJvY2Vzcyk7fWVsc2V7dGhpcy5ncHVIZWxwZXJfPXVuZGVmaW5lZDt9CmNvbnN0IHJlbmRlcmVyUHJvY2Vzc2VzXz1maW5kQ2hyb21lUmVuZGVyUHJvY2Vzc2VzKG1vZGVsKTt0aGlzLnJlbmRlcmVySGVscGVyc189e307cmVuZGVyZXJQcm9jZXNzZXNfLmZvckVhY2goZnVuY3Rpb24ocmVuZGVyUHJvY2Vzcyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUmVuZGVyZXJIZWxwZXIodGhpcyxyZW5kZXJQcm9jZXNzKTt0aGlzLnJlbmRlcmVySGVscGVyc19bcmVuZGVyZXJIZWxwZXIucGlkXT1yZW5kZXJlckhlbHBlcjt9LHRoaXMpO3RoaXMuc3VyZmFjZUZsaW5nZXJQcm9jZXNzXz1maW5kVGVsZW1ldHJ5U3VyZmFjZUZsaW5nZXJQcm9jZXNzKG1vZGVsKTt0aGlzLmNocm9tZUJvdW5kc189dW5kZWZpbmVkO3RoaXMudGVsZW1ldHJ5SGVscGVyXz1uZXcgdHIubW9kZWwuaGVscGVycy5UZWxlbWV0cnlIZWxwZXIodGhpcyk7fQpDaHJvbWVNb2RlbEhlbHBlci5ndWlkPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO0Nocm9tZU1vZGVsSGVscGVyLnN1cHBvcnRzTW9kZWw9ZnVuY3Rpb24obW9kZWwpe2lmKGZpbmRDaHJvbWVCcm93c2VyUHJvY2Vzc2VzKG1vZGVsKS5sZW5ndGgpcmV0dXJuIHRydWU7aWYoZmluZENocm9tZVJlbmRlclByb2Nlc3Nlcyhtb2RlbCkubGVuZ3RoKXJldHVybiB0cnVlO3JldHVybiBmYWxzZTt9O0Nocm9tZU1vZGVsSGVscGVyLnByb3RvdHlwZT17Z2V0IHBpZCgpe3Rocm93IG5ldyBFcnJvcignd29haCcpO30sZ2V0IHByb2Nlc3MoKXt0aHJvdyBuZXcgRXJyb3IoJ3dvYWgnKTt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LGdldCBicm93c2VyUHJvY2Vzcygpe2lmKHRoaXMuYnJvd3NlckhlbHBlcj09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLmJyb3dzZXJIZWxwZXIucHJvY2Vzczt9LGdldCBicm93c2VySGVscGVyKCl7cmV0dXJuIHRoaXMuYnJvd3NlckhlbHBlcnNfWzBdO30sZ2V0IGJyb3dzZXJIZWxwZXJzKCl7cmV0dXJuIHRoaXMuYnJvd3NlckhlbHBlcnNfO30sZ2V0IGdwdUhlbHBlcigpe3JldHVybiB0aGlzLmdwdUhlbHBlcl87fSxnZXQgcmVuZGVyZXJIZWxwZXJzKCl7cmV0dXJuIHRoaXMucmVuZGVyZXJIZWxwZXJzXzt9LGdldCBzdXJmYWNlRmxpbmdlclByb2Nlc3MoKXtyZXR1cm4gdGhpcy5zdXJmYWNlRmxpbmdlclByb2Nlc3NfO30sZ2V0IGNocm9tZUJvdW5kcygpe2lmKCF0aGlzLmNocm9tZUJvdW5kc18pe3RoaXMuY2hyb21lQm91bmRzXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IGJyb3dzZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmJyb3dzZXJIZWxwZXJzKSl7dGhpcy5jaHJvbWVCb3VuZHNfLmFkZFJhbmdlKGJyb3dzZXJIZWxwZXIucHJvY2Vzcy5ib3VuZHMpO30KZm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXModGhpcy5yZW5kZXJlckhlbHBlcnMpKXt0aGlzLmNocm9tZUJvdW5kc18uYWRkUmFuZ2UocmVuZGVyZXJIZWxwZXIucHJvY2Vzcy5ib3VuZHMpO30KaWYodGhpcy5ncHVIZWxwZXIpe3RoaXMuY2hyb21lQm91bmRzXy5hZGRSYW5nZSh0aGlzLmdwdUhlbHBlci5wcm9jZXNzLmJvdW5kcyk7fX0KaWYodGhpcy5jaHJvbWVCb3VuZHNfLmlzRW1wdHkpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gdGhpcy5jaHJvbWVCb3VuZHNfO30sZ2V0IHRlbGVtZXRyeUhlbHBlcigpe3JldHVybiB0aGlzLnRlbGVtZXRyeUhlbHBlcl87fX07cmV0dXJue0Nocm9tZU1vZGVsSGVscGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IEFzeW5jU2xpY2U9dHIubW9kZWwuQXN5bmNTbGljZTtjb25zdCBFdmVudFNldD10ci5tb2RlbC5FdmVudFNldDtjb25zdCBVSV9DT01QX05BTUU9J0lOUFVUX0VWRU5UX0xBVEVOQ1lfVUlfQ09NUE9ORU5UJztjb25zdCBPUklHSU5BTF9DT01QX05BTUU9J0lOUFVUX0VWRU5UX0xBVEVOQ1lfT1JJR0lOQUxfQ09NUE9ORU5UJztjb25zdCBCRUdJTl9DT01QX05BTUU9J0lOUFVUX0VWRU5UX0xBVEVOQ1lfQkVHSU5fUldIX0NPTVBPTkVOVCc7Y29uc3QgRU5EX0NPTVBfTkFNRT0nSU5QVVRfRVZFTlRfR1BVX1NXQVBfQlVGRkVSX0NPTVBPTkVOVCc7Y29uc3QgTEVHQUNZX0VORF9DT01QX05BTUU9J0lOUFVUX0VWRU5UX0xBVEVOQ1lfVEVSTUlOQVRFRF9GUkFNRV9TV0FQX0NPTVBPTkVOVCc7Y29uc3QgTUFJTl9SRU5ERVJFUl9USFJFQURfTkFNRT0nQ3JSZW5kZXJlck1haW4nO2NvbnN0IENPTVBPU0lUT1JfVEhSRUFEX05BTUU9J0NvbXBvc2l0b3InO2NvbnN0IFBPU1RUQVNLX0ZMT1dfRVZFTlQ9J2Rpc2FibGVkLWJ5LWRlZmF1bHQtdG9wbGV2ZWwuZmxvdyc7Y29uc3QgSVBDX0ZMT1dfRVZFTlQ9J2Rpc2FibGVkLWJ5LWRlZmF1bHQtaXBjLmZsb3cnO2NvbnN0IElOUFVUX0VWRU5UX1RZUEVfTkFNRVM9e0NIQVI6J0NoYXInLENMSUNLOidHZXN0dXJlQ2xpY2snLENPTlRFWFRfTUVOVTonQ29udGV4dE1lbnUnLEZMSU5HX0NBTkNFTDonR2VzdHVyZUZsaW5nQ2FuY2VsJyxGTElOR19TVEFSVDonR2VzdHVyZUZsaW5nU3RhcnQnLEtFWV9ET1dOOidLZXlEb3duJyxLRVlfRE9XTl9SQVc6J1Jhd0tleURvd24nLEtFWV9VUDonS2V5VXAnLExBVEVOQ1lfU0NST0xMX1VQREFURTonU2Nyb2xsVXBkYXRlJyxNT1VTRV9ET1dOOidNb3VzZURvd24nLE1PVVNFX0VOVEVSOidNb3VzZUVudGVyJyxNT1VTRV9MRUFWRTonTW91c2VMZWF2ZScsTU9VU0VfTU9WRTonTW91c2VNb3ZlJyxNT1VTRV9VUDonTW91c2VVcCcsTU9VU0VfV0hFRUw6J01vdXNlV2hlZWwnLFBJTkNIX0JFR0lOOidHZXN0dXJlUGluY2hCZWdpbicsUElOQ0hfRU5EOidHZXN0dXJlUGluY2hFbmQnLFBJTkNIX1VQREFURTonR2VzdHVyZVBpbmNoVXBkYXRlJyxTQ1JPTExfQkVHSU46J0dlc3R1cmVTY3JvbGxCZWdpbicsU0NST0xMX0VORDonR2VzdHVyZVNjcm9sbEVuZCcsU0NST0xMX1VQREFURTonR2VzdHVyZVNjcm9sbFVwZGF0ZScsU0NST0xMX1VQREFURV9SRU5ERVJFUjonU2Nyb2xsVXBkYXRlJyxTSE9XX1BSRVNTOidHZXN0dXJlU2hvd1ByZXNzJyxUQVA6J0dlc3R1cmVUYXAnLFRBUF9DQU5DRUw6J0dlc3R1cmVUYXBDYW5jZWwnLFRBUF9ET1dOOidHZXN0dXJlVGFwRG93bicsVE9VQ0hfQ0FOQ0VMOidUb3VjaENhbmNlbCcsVE9VQ0hfRU5EOidUb3VjaEVuZCcsVE9VQ0hfTU9WRTonVG91Y2hNb3ZlJyxUT1VDSF9TVEFSVDonVG91Y2hTdGFydCcsVU5LTk9XTjonVU5LTk9XTid9O2Z1bmN0aW9uIElucHV0TGF0ZW5jeUFzeW5jU2xpY2UoKXtBc3luY1NsaWNlLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmFzc29jaWF0ZWRFdmVudHNfPW5ldyBFdmVudFNldCgpO3RoaXMudHlwZU5hbWVfPXVuZGVmaW5lZDtpZighdGhpcy5pc0xlZ2FjeUV2ZW50KXt0aGlzLmRldGVybWluZU1vZGVyblR5cGVOYW1lXygpO319CklucHV0TGF0ZW5jeUFzeW5jU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186QXN5bmNTbGljZS5wcm90b3R5cGUsZ2V0IGlzTGVnYWN5RXZlbnQoKXtyZXR1cm4gdGhpcy50aXRsZT09PSdJbnB1dExhdGVuY3knO30sZ2V0IHR5cGVOYW1lKCl7aWYoIXRoaXMudHlwZU5hbWVfKXt0aGlzLmRldGVybWluZUxlZ2FjeVR5cGVOYW1lXygpO30KcmV0dXJuIHRoaXMudHlwZU5hbWVfO30sY2hlY2tUeXBlTmFtZV8oKXtpZighdGhpcy50eXBlTmFtZV8pe3Rocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGRldGVybWluZSB0eXBlTmFtZScpO30KbGV0IGZvdW5kPWZhbHNlO2Zvcihjb25zdCB0eXBlTmFtZSBpbiBJTlBVVF9FVkVOVF9UWVBFX05BTUVTKXtpZih0aGlzLnR5cGVOYW1lPT09SU5QVVRfRVZFTlRfVFlQRV9OQU1FU1t0eXBlTmFtZV0pe2ZvdW5kPXRydWU7YnJlYWs7fX0KaWYoIWZvdW5kKXt0aGlzLnR5cGVOYW1lXz1JTlBVVF9FVkVOVF9UWVBFX05BTUVTLlVOS05PV047fX0sZGV0ZXJtaW5lTW9kZXJuVHlwZU5hbWVfKCl7Y29uc3QgbGFzdENvbG9uSW5kZXg9dGhpcy50aXRsZS5sYXN0SW5kZXhPZignOicpO2lmKGxhc3RDb2xvbkluZGV4PDApcmV0dXJuO2NvbnN0IGNoYXJhY3RlckFmdGVyTGFzdENvbG9uSW5kZXg9bGFzdENvbG9uSW5kZXgrMTt0aGlzLnR5cGVOYW1lXz10aGlzLnRpdGxlLnNsaWNlKGNoYXJhY3RlckFmdGVyTGFzdENvbG9uSW5kZXgpO3RoaXMuY2hlY2tUeXBlTmFtZV8oKTt9LGRldGVybWluZUxlZ2FjeVR5cGVOYW1lXygpe2Zvcihjb25zdCBzdWJTbGljZSBvZiB0aGlzLmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKCkpe2NvbnN0IHN1YlNsaWNlSXNBSW5wdXRMYXRlbmN5QXN5bmNTbGljZT0oc3ViU2xpY2UgaW5zdGFuY2VvZiBJbnB1dExhdGVuY3lBc3luY1NsaWNlKTtpZighc3ViU2xpY2VJc0FJbnB1dExhdGVuY3lBc3luY1NsaWNlKWNvbnRpbnVlO2lmKCFzdWJTbGljZS50eXBlTmFtZSljb250aW51ZTtpZih0aGlzLnR5cGVOYW1lXyYmc3ViU2xpY2UudHlwZU5hbWVfKXtjb25zdCBzdWJTbGljZUhhc0RpZmZlcmVudFR5cGVOYW1lPSh0aGlzLnR5cGVOYW1lXyE9PXN1YlNsaWNlLnR5cGVOYW1lXyk7aWYoc3ViU2xpY2VIYXNEaWZmZXJlbnRUeXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdJbnB1dExhdGVuY3lBc3luY1NsaWNlLmRldGVybWluZUxlZ2FjeVR5cGVOYW1lXygpICcrJyBmb3VuZCBtdWx0aXBsZSB0eXBlTmFtZXMnKTt9fQp0aGlzLnR5cGVOYW1lXz1zdWJTbGljZS50eXBlTmFtZV87fQppZighdGhpcy50eXBlTmFtZV8pe3Rocm93IG5ldyBFcnJvcignSW5wdXRMYXRlbmN5QXN5bmNTbGljZS5kZXRlcm1pbmVMZWdhY3lUeXBlTmFtZV8oKSBmYWlsZWQnKTt9CnRoaXMuY2hlY2tUeXBlTmFtZV8oKTt9LGdldFJlbmRlcmVySGVscGVyKHNvdXJjZVNsaWNlcyl7Y29uc3QgdHJhY2VNb2RlbD10aGlzLnN0YXJ0VGhyZWFkLnBhcmVudC5tb2RlbDtjb25zdCBtb2RlbEhlbHBlcj10cmFjZU1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKCFtb2RlbEhlbHBlcilyZXR1cm4gdW5kZWZpbmVkO2xldCBtYWluVGhyZWFkPXVuZGVmaW5lZDtsZXQgY29tcG9zaXRvclRocmVhZD11bmRlZmluZWQ7Zm9yKGNvbnN0IGkgaW4gc291cmNlU2xpY2VzKXtpZihzb3VyY2VTbGljZXNbaV0ucGFyZW50Q29udGFpbmVyLm5hbWU9PT1NQUlOX1JFTkRFUkVSX1RIUkVBRF9OQU1FKXttYWluVGhyZWFkPXNvdXJjZVNsaWNlc1tpXS5wYXJlbnRDb250YWluZXI7fWVsc2UgaWYoc291cmNlU2xpY2VzW2ldLnBhcmVudENvbnRhaW5lci5uYW1lPT09Q09NUE9TSVRPUl9USFJFQURfTkFNRSl7Y29tcG9zaXRvclRocmVhZD1zb3VyY2VTbGljZXNbaV0ucGFyZW50Q29udGFpbmVyO30KaWYobWFpblRocmVhZCYmY29tcG9zaXRvclRocmVhZClicmVhazt9CmNvbnN0IHJlbmRlcmVySGVscGVycz1tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnM7Y29uc3QgcGlkcz1PYmplY3Qua2V5cyhyZW5kZXJlckhlbHBlcnMpO2ZvcihsZXQgaT0wO2k8cGlkcy5sZW5ndGg7aSsrKXtjb25zdCBwaWQ9cGlkc1tpXTtjb25zdCByZW5kZXJlckhlbHBlcj1yZW5kZXJlckhlbHBlcnNbcGlkXTtpZihyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkPT09bWFpblRocmVhZHx8cmVuZGVyZXJIZWxwZXIuY29tcG9zaXRvclRocmVhZD09PWNvbXBvc2l0b3JUaHJlYWQpe3JldHVybiByZW5kZXJlckhlbHBlcjt9fQpyZXR1cm4gdW5kZWZpbmVkO30sYWRkRW50aXJlU2xpY2VIaWVyYXJjaHkoc2xpY2Upe3RoaXMuYXNzb2NpYXRlZEV2ZW50c18ucHVzaChzbGljZSk7c2xpY2UuaXRlcmF0ZUFsbFN1YnNlcXVlbnRTbGljZXMoZnVuY3Rpb24oc3Vic2VxdWVudFNsaWNlKXt0aGlzLmFzc29jaWF0ZWRFdmVudHNfLnB1c2goc3Vic2VxdWVudFNsaWNlKTt9LHRoaXMpO30sYWRkRGlyZWN0bHlBc3NvY2lhdGVkRXZlbnRzKGZsb3dFdmVudHMpe2NvbnN0IHNsaWNlcz1bXTtmbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvd0V2ZW50KXt0aGlzLmFzc29jaWF0ZWRFdmVudHNfLnB1c2goZmxvd0V2ZW50KTtjb25zdCBuZXdTb3VyY2U9Zmxvd0V2ZW50LnN0YXJ0U2xpY2UubW9zdFRvcExldmVsU2xpY2U7aWYoc2xpY2VzLmluZGV4T2YobmV3U291cmNlKT09PS0xKXtzbGljZXMucHVzaChuZXdTb3VyY2UpO319LHRoaXMpO2NvbnN0IGxhc3RGbG93RXZlbnQ9Zmxvd0V2ZW50c1tmbG93RXZlbnRzLmxlbmd0aC0xXTtjb25zdCBsYXN0U291cmNlPWxhc3RGbG93RXZlbnQuZW5kU2xpY2UubW9zdFRvcExldmVsU2xpY2U7aWYoc2xpY2VzLmluZGV4T2YobGFzdFNvdXJjZSk9PT0tMSl7c2xpY2VzLnB1c2gobGFzdFNvdXJjZSk7fQpyZXR1cm4gc2xpY2VzO30sYmVsb25nVG9PdGhlcklucHV0cyhzbGljZSxmbG93RXZlbnRzKXtsZXQgZnJvbU90aGVySW5wdXRzPWZhbHNlO3NsaWNlLml0ZXJhdGVFbnRpcmVIaWVyYXJjaHkoZnVuY3Rpb24oc3Vic2VxdWVudFNsaWNlKXtpZihmcm9tT3RoZXJJbnB1dHMpcmV0dXJuO3N1YnNlcXVlbnRTbGljZS5pbkZsb3dFdmVudHMuZm9yRWFjaChmdW5jdGlvbihpbmZsb3cpe2lmKGZyb21PdGhlcklucHV0cylyZXR1cm47aWYoaW5mbG93LmNhdGVnb3J5LmluZGV4T2YoJ2lucHV0Jyk+LTEpe2lmKGZsb3dFdmVudHMuaW5kZXhPZihpbmZsb3cpPT09LTEpe2Zyb21PdGhlcklucHV0cz10cnVlO319fSx0aGlzKTt9LHRoaXMpO3JldHVybiBmcm9tT3RoZXJJbnB1dHM7fSx0cmlnZ2VyT3RoZXJJbnB1dHMoZXZlbnQsZmxvd0V2ZW50cyl7aWYoZXZlbnQub3V0Rmxvd0V2ZW50cz09PXVuZGVmaW5lZHx8ZXZlbnQub3V0Rmxvd0V2ZW50cy5sZW5ndGg9PT0wKXtyZXR1cm4gZmFsc2U7fQpjb25zdCBmbG93PWV2ZW50Lm91dEZsb3dFdmVudHNbMF07aWYoZmxvdy5jYXRlZ29yeSE9PVBPU1RUQVNLX0ZMT1dfRVZFTlR8fCFmbG93LmVuZFNsaWNlKXtyZXR1cm4gZmFsc2U7fQpjb25zdCBlbmRTbGljZT1mbG93LmVuZFNsaWNlO2lmKHRoaXMuYmVsb25nVG9PdGhlcklucHV0cyhlbmRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZSxmbG93RXZlbnRzKSl7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fSxmb2xsb3dTdWJzZXF1ZW50U2xpY2VzKGV2ZW50LHF1ZXVlLHZpc2l0ZWQsZmxvd0V2ZW50cyl7bGV0IHN0b3BGb2xsb3dpbmc9ZmFsc2U7bGV0IGlucHV0QWNrPWZhbHNlO2V2ZW50Lml0ZXJhdGVBbGxTdWJzZXF1ZW50U2xpY2VzKGZ1bmN0aW9uKHNsaWNlKXtpZihzdG9wRm9sbG93aW5nKXJldHVybjtpZihzbGljZS50aXRsZT09PSdUYXNrUXVldWVNYW5hZ2VyOjpSdW5UYXNrJylyZXR1cm47aWYoc2xpY2UudGl0bGU9PT0nVGhyZWFkUHJveHk6OlNjaGVkdWxlZEFjdGlvblNlbmRCZWdpbk1haW5GcmFtZScpe3JldHVybjt9CmlmKHNsaWNlLnRpdGxlPT09J1NjaGVkdWxlcjo6U2NoZWR1bGVCZWdpbkltcGxGcmFtZURlYWRsaW5lJyl7aWYodGhpcy50cmlnZ2VyT3RoZXJJbnB1dHMoc2xpY2UsZmxvd0V2ZW50cykpcmV0dXJuO30KaWYoc2xpY2UudGl0bGU9PT0nQ29tcG9zaXRvckltcGw6OlBvc3RDb21wb3NpdGUnKXtpZih0aGlzLnRyaWdnZXJPdGhlcklucHV0cyhzbGljZSxmbG93RXZlbnRzKSlyZXR1cm47fQppZihzbGljZS50aXRsZT09PSdJbnB1dFJvdXRlckltcGw6OlByb2Nlc3NJbnB1dEV2ZW50QWNrJyl7aW5wdXRBY2s9dHJ1ZTt9CmlmKGlucHV0QWNrJiZzbGljZS50aXRsZT09PSdJbnB1dFJvdXRlckltcGw6OkZpbHRlckFuZFNlbmRXZWJJbnB1dEV2ZW50Jyl7c3RvcEZvbGxvd2luZz10cnVlO30KdGhpcy5mb2xsb3dDdXJyZW50U2xpY2Uoc2xpY2UscXVldWUsdmlzaXRlZCk7fSx0aGlzKTt9LGZvbGxvd0N1cnJlbnRTbGljZShldmVudCxxdWV1ZSx2aXNpdGVkKXtldmVudC5vdXRGbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24ob3V0Zmxvdyl7aWYoKG91dGZsb3cuY2F0ZWdvcnk9PT1QT1NUVEFTS19GTE9XX0VWRU5UfHxvdXRmbG93LmNhdGVnb3J5PT09SVBDX0ZMT1dfRVZFTlQpJiZvdXRmbG93LmVuZFNsaWNlKXt0aGlzLmFzc29jaWF0ZWRFdmVudHNfLnB1c2gob3V0Zmxvdyk7Y29uc3QgbmV4dEV2ZW50PW91dGZsb3cuZW5kU2xpY2UubW9zdFRvcExldmVsU2xpY2U7aWYoIXZpc2l0ZWQuY29udGFpbnMobmV4dEV2ZW50KSl7dmlzaXRlZC5wdXNoKG5leHRFdmVudCk7cXVldWUucHVzaChuZXh0RXZlbnQpO319fSx0aGlzKTt9LGJhY2t0cmFjZUZyb21EcmF3KGJlZ2luSW1wbEZyYW1lLHZpc2l0ZWQpe2NvbnN0IHBlbmRpbmdFdmVudFF1ZXVlPVtdO3BlbmRpbmdFdmVudFF1ZXVlLnB1c2goYmVnaW5JbXBsRnJhbWUubW9zdFRvcExldmVsU2xpY2UpO3doaWxlKHBlbmRpbmdFdmVudFF1ZXVlLmxlbmd0aCE9PTApe2NvbnN0IGV2ZW50PXBlbmRpbmdFdmVudFF1ZXVlLnBvcCgpO3RoaXMuYWRkRW50aXJlU2xpY2VIaWVyYXJjaHkoZXZlbnQpO2V2ZW50LmluRmxvd0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGluZmxvdyl7aWYoaW5mbG93LmNhdGVnb3J5PT09UE9TVFRBU0tfRkxPV19FVkVOVCYmaW5mbG93LnN0YXJ0U2xpY2Upe2NvbnN0IG5leHRFdmVudD1pbmZsb3cuc3RhcnRTbGljZS5tb3N0VG9wTGV2ZWxTbGljZTtpZighdmlzaXRlZC5jb250YWlucyhuZXh0RXZlbnQpKXt2aXNpdGVkLnB1c2gobmV4dEV2ZW50KTtwZW5kaW5nRXZlbnRRdWV1ZS5wdXNoKG5leHRFdmVudCk7fX19LHRoaXMpO319LHNvcnRSYXN0ZXJpemVyU2xpY2VzKHJhc3RlcldvcmtlclRocmVhZHMsc29ydGVkUmFzdGVyaXplclNsaWNlcyl7cmFzdGVyV29ya2VyVGhyZWFkcy5mb3JFYWNoKGZ1bmN0aW9uKHJhc3Rlcml6ZXIpe0FycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMscmFzdGVyaXplci5zbGljZUdyb3VwLnNsaWNlcyk7fSx0aGlzKTtzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLnN0YXJ0IT09Yi5zdGFydCl7cmV0dXJuIGEuc3RhcnQtYi5zdGFydDt9CnJldHVybiBhLmd1aWQtYi5ndWlkO30pO30sYWRkUmFzdGVyaXphdGlvbkV2ZW50cyhwcmVwYXJlVGlsZXMscmVuZGVyZXJIZWxwZXIsdmlzaXRlZCxmbG93RXZlbnRzLHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMpe2lmKCFwcmVwYXJlVGlsZXMuYXJncy5wcmVwYXJlX3RpbGVzX2lkKXJldHVybjtpZighcmVuZGVyZXJIZWxwZXJ8fCFyZW5kZXJlckhlbHBlci5yYXN0ZXJXb3JrZXJUaHJlYWRzKXtyZXR1cm47fQpjb25zdCByYXN0ZXJXb3JrZXJUaHJlYWRzPXJlbmRlcmVySGVscGVyLnJhc3RlcldvcmtlclRocmVhZHM7Y29uc3QgcHJlcGFyZVRpbGVJZD1wcmVwYXJlVGlsZXMuYXJncy5wcmVwYXJlX3RpbGVzX2lkO2NvbnN0IHBlbmRpbmdFdmVudFF1ZXVlPVtdO2lmKHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMubGVuZ3RoPT09MCl7dGhpcy5zb3J0UmFzdGVyaXplclNsaWNlcyhyYXN0ZXJXb3JrZXJUaHJlYWRzLHNvcnRlZFJhc3Rlcml6ZXJTbGljZXMpO30KbGV0IG51bUZpbmlzaGVkVGFza3M9MDtjb25zdCBSQVNURVJfVEFTS19USVRMRT0nUmFzdGVyaXplclRhc2tJbXBsOjpSdW5PbldvcmtlclRocmVhZCc7Y29uc3QgSU1BR0VERUNPREVfVEFTS19USVRMRT0nSW1hZ2VEZWNvZGVUYXNrSW1wbDo6UnVuT25Xb3JrZXJUaHJlYWQnO2NvbnN0IEZJTklTSEVEX1RBU0tfVElUTEU9J1Rhc2tTZXRGaW5pc2hlZFRhc2tJbXBsOjpSdW5PbldvcmtlclRocmVhZCc7Zm9yKGxldCBpPTA7aTxzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHRhc2s9c29ydGVkUmFzdGVyaXplclNsaWNlc1tpXTtpZih0YXNrLnRpdGxlPT09UkFTVEVSX1RBU0tfVElUTEV8fHRhc2sudGl0bGU9PT1JTUFHRURFQ09ERV9UQVNLX1RJVExFKXtpZih0YXNrLmFyZ3Muc291cmNlX3ByZXBhcmVfdGlsZXNfaWQ9PT1wcmVwYXJlVGlsZUlkKXt0aGlzLmFkZEVudGlyZVNsaWNlSGllcmFyY2h5KHRhc2subW9zdFRvcExldmVsU2xpY2UpO319ZWxzZSBpZih0YXNrLnRpdGxlPT09RklOSVNIRURfVEFTS19USVRMRSl7aWYodGFzay5zdGFydD5wcmVwYXJlVGlsZXMuc3RhcnQpe3BlbmRpbmdFdmVudFF1ZXVlLnB1c2godGFzay5tb3N0VG9wTGV2ZWxTbGljZSk7aWYoKytudW1GaW5pc2hlZFRhc2tzPT09MylicmVhazt9fX0Kd2hpbGUocGVuZGluZ0V2ZW50UXVldWUubGVuZ3RoIT09MCl7Y29uc3QgZXZlbnQ9cGVuZGluZ0V2ZW50UXVldWUucG9wKCk7dGhpcy5hZGRFbnRpcmVTbGljZUhpZXJhcmNoeShldmVudCk7dGhpcy5mb2xsb3dTdWJzZXF1ZW50U2xpY2VzKGV2ZW50LHBlbmRpbmdFdmVudFF1ZXVlLHZpc2l0ZWQsZmxvd0V2ZW50cyk7fX0sYWRkT3RoZXJDYXVzYWxseVJlbGF0ZWRFdmVudHMocmVuZGVyZXJIZWxwZXIsc291cmNlU2xpY2VzLGZsb3dFdmVudHMsc29ydGVkUmFzdGVyaXplclNsaWNlcyl7Y29uc3QgcGVuZGluZ0V2ZW50UXVldWU9W107Y29uc3QgdmlzaXRlZEV2ZW50cz1uZXcgRXZlbnRTZXQoKTtsZXQgYmVnaW5JbXBsRnJhbWU9dW5kZWZpbmVkO2xldCBwcmVwYXJlVGlsZXM9dW5kZWZpbmVkO3NvcnRlZFJhc3Rlcml6ZXJTbGljZXM9W107c291cmNlU2xpY2VzLmZvckVhY2goZnVuY3Rpb24oc291cmNlU2xpY2Upe2lmKCF2aXNpdGVkRXZlbnRzLmNvbnRhaW5zKHNvdXJjZVNsaWNlKSl7dmlzaXRlZEV2ZW50cy5wdXNoKHNvdXJjZVNsaWNlKTtwZW5kaW5nRXZlbnRRdWV1ZS5wdXNoKHNvdXJjZVNsaWNlKTt9fSx0aGlzKTt3aGlsZShwZW5kaW5nRXZlbnRRdWV1ZS5sZW5ndGghPT0wKXtjb25zdCBldmVudD1wZW5kaW5nRXZlbnRRdWV1ZS5wb3AoKTt0aGlzLmFkZEVudGlyZVNsaWNlSGllcmFyY2h5KGV2ZW50KTt0aGlzLmZvbGxvd0N1cnJlbnRTbGljZShldmVudCxwZW5kaW5nRXZlbnRRdWV1ZSx2aXNpdGVkRXZlbnRzKTt0aGlzLmZvbGxvd1N1YnNlcXVlbnRTbGljZXMoZXZlbnQscGVuZGluZ0V2ZW50UXVldWUsdmlzaXRlZEV2ZW50cyxmbG93RXZlbnRzKTtjb25zdCBDT01QT1NJVE9SX1BSRVBBUkVfVElMRVM9J1RpbGVNYW5hZ2VyOjpQcmVwYXJlVGlsZXMnO3ByZXBhcmVUaWxlcz1ldmVudC5maW5kRGVzY2VuZGVudFNsaWNlKENPTVBPU0lUT1JfUFJFUEFSRV9USUxFUyk7aWYocHJlcGFyZVRpbGVzKXt0aGlzLmFkZFJhc3Rlcml6YXRpb25FdmVudHMocHJlcGFyZVRpbGVzLHJlbmRlcmVySGVscGVyLHZpc2l0ZWRFdmVudHMsZmxvd0V2ZW50cyxzb3J0ZWRSYXN0ZXJpemVyU2xpY2VzKTt9CmNvbnN0IENPTVBPU0lUT1JfT05fQklGRD0nU2NoZWR1bGVyOjpPbkJlZ2luSW1wbEZyYW1lRGVhZGxpbmUnO2JlZ2luSW1wbEZyYW1lPWV2ZW50LmZpbmREZXNjZW5kZW50U2xpY2UoQ09NUE9TSVRPUl9PTl9CSUZEKTtpZihiZWdpbkltcGxGcmFtZSl7dGhpcy5iYWNrdHJhY2VGcm9tRHJhdyhiZWdpbkltcGxGcmFtZSx2aXNpdGVkRXZlbnRzKTt9fX0sZ2V0IGFzc29jaWF0ZWRFdmVudHMoKXtpZih0aGlzLmFzc29jaWF0ZWRFdmVudHNfLmxlbmd0aCE9PTApe3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHNfO30KY29uc3QgbW9kZWxJbmRpY2VzPXRoaXMuc3RhcnRUaHJlYWQucGFyZW50Lm1vZGVsLm1vZGVsSW5kaWNlcztjb25zdCBmbG93RXZlbnRzPW1vZGVsSW5kaWNlcy5nZXRGbG93RXZlbnRzV2l0aElkKHRoaXMuaWQpO2lmKGZsb3dFdmVudHMubGVuZ3RoPT09MCl7cmV0dXJuIHRoaXMuYXNzb2NpYXRlZEV2ZW50c187fQpjb25zdCBzb3VyY2VTbGljZXM9dGhpcy5hZGREaXJlY3RseUFzc29jaWF0ZWRFdmVudHMoZmxvd0V2ZW50cyk7Y29uc3QgcmVuZGVyZXJIZWxwZXI9dGhpcy5nZXRSZW5kZXJlckhlbHBlcihzb3VyY2VTbGljZXMpO3RoaXMuYWRkT3RoZXJDYXVzYWxseVJlbGF0ZWRFdmVudHMocmVuZGVyZXJIZWxwZXIsc291cmNlU2xpY2VzLGZsb3dFdmVudHMpO3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHNfO30sZ2V0IGlucHV0TGF0ZW5jeSgpe2lmKCEoJ2RhdGEnaW4gdGhpcy5hcmdzKSlyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGRhdGE9dGhpcy5hcmdzLmRhdGE7Y29uc3QgZW5kVGltZUNvbXA9ZGF0YVtFTkRfQ09NUF9OQU1FXXx8ZGF0YVtMRUdBQ1lfRU5EX0NPTVBfTkFNRV07aWYoZW5kVGltZUNvbXA9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtsZXQgbGF0ZW5jeT0wO2NvbnN0IGVuZFRpbWU9ZW5kVGltZUNvbXAudGltZTtpZihPUklHSU5BTF9DT01QX05BTUUgaW4gZGF0YSl7bGF0ZW5jeT1lbmRUaW1lLWRhdGFbT1JJR0lOQUxfQ09NUF9OQU1FXS50aW1lO31lbHNlIGlmKFVJX0NPTVBfTkFNRSBpbiBkYXRhKXtsYXRlbmN5PWVuZFRpbWUtZGF0YVtVSV9DT01QX05BTUVdLnRpbWU7fWVsc2UgaWYoQkVHSU5fQ09NUF9OQU1FIGluIGRhdGEpe2xhdGVuY3k9ZW5kVGltZS1kYXRhW0JFR0lOX0NPTVBfTkFNRV0udGltZTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ05vIHZhbGlkIGJlZ2luIGxhdGVuY3kgY29tcG9uZW50Jyk7fQpyZXR1cm4gbGF0ZW5jeTt9fTtjb25zdCBldmVudFR5cGVOYW1lcz1bJ0NoYXInLCdDb250ZXh0TWVudScsJ0dlc3R1cmVDbGljaycsJ0dlc3R1cmVGbGluZ0NhbmNlbCcsJ0dlc3R1cmVGbGluZ1N0YXJ0JywnR2VzdHVyZVNjcm9sbEJlZ2luJywnR2VzdHVyZVNjcm9sbEVuZCcsJ0dlc3R1cmVTY3JvbGxVcGRhdGUnLCdHZXN0dXJlU2hvd1ByZXNzJywnR2VzdHVyZVRhcCcsJ0dlc3R1cmVUYXBDYW5jZWwnLCdHZXN0dXJlVGFwRG93bicsJ0dlc3R1cmVQaW5jaEJlZ2luJywnR2VzdHVyZVBpbmNoRW5kJywnR2VzdHVyZVBpbmNoVXBkYXRlJywnS2V5RG93bicsJ0tleVVwJywnTW91c2VEb3duJywnTW91c2VFbnRlcicsJ01vdXNlTGVhdmUnLCdNb3VzZU1vdmUnLCdNb3VzZVVwJywnTW91c2VXaGVlbCcsJ1Jhd0tleURvd24nLCdTY3JvbGxVcGRhdGUnLCdUb3VjaENhbmNlbCcsJ1RvdWNoRW5kJywnVG91Y2hNb3ZlJywnVG91Y2hTdGFydCddO2NvbnN0IGFsbFR5cGVOYW1lcz1bJ0lucHV0TGF0ZW5jeSddO2V2ZW50VHlwZU5hbWVzLmZvckVhY2goZnVuY3Rpb24oZXZlbnRUeXBlTmFtZSl7YWxsVHlwZU5hbWVzLnB1c2goJ0lucHV0TGF0ZW5jeTonK2V2ZW50VHlwZU5hbWUpO2FsbFR5cGVOYW1lcy5wdXNoKCdJbnB1dExhdGVuY3k6OicrZXZlbnRUeXBlTmFtZSk7fSk7QXN5bmNTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihJbnB1dExhdGVuY3lBc3luY1NsaWNlLHt0eXBlTmFtZXM6YWxsVHlwZU5hbWVzLGNhdGVnb3J5UGFydHM6WydsYXRlbmN5SW5mbyddfSk7cmV0dXJue0lucHV0TGF0ZW5jeUFzeW5jU2xpY2UsSU5QVVRfRVZFTlRfVFlQRV9OQU1FUyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgU0FNRV9BU19QQVJFTlQ9J3NhbWUtYXMtcGFyZW50Jztjb25zdCBUSVRMRVNfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlk9e2NvbXBvc2l0ZTpbJ0NvbXBvc2l0aW5nSW5wdXRzVXBkYXRlcjo6dXBkYXRlJywnVGhyZWFkUHJveHk6OlNldE5lZWRzVXBkYXRlTGF5ZXJzJywnTGF5ZXJUcmVlSG9zdDo6RG9VcGRhdGVMYXllcnMnLCdMYXllclRyZWVIb3N0OjpVcGRhdGVMYXllcnM6OkJ1aWxkUHJvcGVydHlUcmVlcycsJ0xvY2FsRnJhbWVWaWV3OjpwdXNoUGFpbnRBcnRpZmFjdFRvQ29tcG9zaXRvcicsJ0xvY2FsRnJhbWVWaWV3Ojp1cGRhdGVDb21wb3NpdGVkU2VsZWN0aW9uSWZOZWVkZWQnLCdMb2NhbEZyYW1lVmlldzo6UnVuQ29tcG9zaXRpbmdMaWZlY3ljbGVQaGFzZScsJ1VwZGF0ZUxheWVyVHJlZScsXSxnYzpbJ21pbm9yR0MnLCdtYWpvckdDJywnTWFqb3JHQycsJ01pbm9yR0MnLCdWOC5HQ1NjYXZlbmdlcicsJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nJywnVjguR0NJZGxlTm90aWZpY2F0aW9uJywnVjguR0NDb250ZXh0JywnVjguR0NDb21wYWN0b3InLCdWOEdDQ29udHJvbGxlcjo6dHJhY2VET01XcmFwcGVycycsXSxpZnJhbWVfY3JlYXRpb246WydXZWJMb2NhbEZyYW1lSW1wbDo6Y3JlYXRlQ2hpbGRmcmFtZScsXSxpbWFnZURlY29kZTpbJ0RlY29kZSBJbWFnZScsJ0ltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZScsJ0ltYWdlRnJhbWVHZW5lcmF0b3I6OmRlY29kZUFuZFNjYWxlJywnSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlVG9ZVVYnLCdJbWFnZVJlc291cmNlQ29udGVudDo6dXBkYXRlSW1hZ2UnLF0saW5wdXQ6WydIaXRUZXN0JywnU2Nyb2xsYWJsZUFyZWE6OnNjcm9sbFBvc2l0aW9uQ2hhbmdlZCcsJ0V2ZW50SGFuZGxlcjo6aGFuZGxlTW91c2VNb3ZlRXZlbnQnLF0sbGF5b3V0OlsnSW50ZXJzZWN0aW9uT2JzZXJ2ZXJDb250cm9sbGVyOjpjb21wdXRlVHJhY2tlZEludGVyc2VjdGlvbk9ic2VydmF0aW9ucycsJ0xvY2FsRnJhbWVWaWV3OjppbnZhbGlkYXRlVHJlZScsJ0xvY2FsRnJhbWVWaWV3OjpsYXlvdXQnLCdMb2NhbEZyYW1lVmlldzo6cGVyZm9ybUxheW91dCcsJ0xvY2FsRnJhbWVWaWV3OjpwZXJmb3JtUG9zdExheW91dFRhc2tzJywnTG9jYWxGcmFtZVZpZXc6OnBlcmZvcm1QcmVMYXlvdXRUYXNrcycsJ0xvY2FsRnJhbWVWaWV3OjpSdW5TdHlsZUFuZExheW91dENvbXBvc2l0aW5nUGhhc2VzJywnTGF5b3V0JywnUGFpbnRMYXllcjo6dXBkYXRlTGF5ZXJQb3NpdGlvbnNBZnRlckxheW91dCcsJ1Jlc291cmNlTG9hZFByaW9yaXR5T3B0aW1pemVyOjp1cGRhdGVBbGxJbWFnZVJlc291cmNlUHJpb3JpdGllcycsJ1dlYlZpZXdJbXBsOjp1cGRhdGVBbGxMaWZlY3ljbGVQaGFzZXMnLCdXZWJWaWV3SW1wbDo6YmVnaW5GcmFtZScsXSxwYXJzZUhUTUw6WydCYWNrZ3JvdW5kSFRNTFBhcnNlcjo6cHVtcFRva2VuaXplcicsJ0JhY2tncm91bmRIVE1MUGFyc2VyOjpzZW5kVG9rZW5zVG9NYWluVGhyZWFkJywnSFRNTERvY3VtZW50UGFyc2VyOjpkaWRSZWNlaXZlUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlcicsJ0hUTUxEb2N1bWVudFBhcnNlcjo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlJywnSFRNTERvY3VtZW50UGFyc2VyOjpub3RpZnlQZW5kaW5nVG9rZW5pemVkQ2h1bmtzJywnSFRNTERvY3VtZW50UGFyc2VyOjpwcm9jZXNzUGFyc2VkQ2h1bmtGcm9tQmFja2dyb3VuZFBhcnNlcicsJ0hUTUxEb2N1bWVudFBhcnNlcjo6cHJvY2Vzc1Rva2VuaXplZENodW5rRnJvbUJhY2tncm91bmRQYXJzZXInLCdQYXJzZUhUTUwnLF0scmFzdGVyOlsnRGlzcGxheUxpc3RSYXN0ZXJTb3VyY2U6OlBlcmZvcm1Tb2xpZENvbG9yQW5hbHlzaXMnLCdQaWN0dXJlOjpSYXN0ZXInLCdSYXN0ZXJCdWZmZXJJbXBsOjpQbGF5YmFjaycsJ1Jhc3RlclRhc2snLCdSYXN0ZXJpemVyVGFza0ltcGw6OlJ1bk9uV29ya2VyVGhyZWFkJywnU2tDYW52YXM6OmRyYXdJbWFnZVJlY3QoKScsJ1NrQ2FudmFzOjpkcmF3UGljdHVyZSgpJywnU2tDYW52YXM6OmRyYXdUZXh0QmxvYigpJywnVGlsZVRhc2tXb3JrZXJQb29sOjpQbGF5YmFja1RvTWVtb3J5JyxdLHJlY29yZDpbJ0NhbnZhczJETGF5ZXJCcmlkZ2U6OmZsdXNoUmVjb3JkaW5nT25seScsJ0NvbXBvc2l0aW5nSW5wdXRzVXBkYXRlcjo6dXBkYXRlJywnQ29tcG9zaXRpbmdSZXF1aXJlbWVudHNVcGRhdGVyOjp1cGRhdGVSZWN1cnNpdmUnLCdDb250ZW50TGF5ZXJEZWxlZ2F0ZTo6cGFpbnRDb250ZW50cycsJ0Rpc3BsYXlJdGVtTGlzdDo6RmluYWxpemUnLCdMb2NhbEZyYW1lVmlldzo6UnVuUGFpbnRMaWZlY3ljbGVQaGFzZScsJ0xvY2FsRnJhbWVWaWV3OjpSdW5QcmVQYWludExpZmVjeWNsZVBoYXNlJywnUGFpbnQnLCdQYWludENvbnRyb2xsZXI6OmNvbW1pdE5ld0Rpc3BsYXlJdGVtcycsJ1BhaW50TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVJZk5lZWRlZFJlY3Vyc2l2ZScsJ1BpY3R1cmU6OlJlY29yZCcsJ1BpY3R1cmVMYXllcjo6VXBkYXRlJyxdLHN0eWxlOlsnQ1NTUGFyc2VySW1wbDo6cGFyc2VTdHlsZVNoZWV0LnBhcnNlJywnQ1NTUGFyc2VySW1wbDo6cGFyc2VTdHlsZVNoZWV0LnRva2VuaXplJywnRG9jdW1lbnQ6OnJlYnVpbGRMYXlvdXRUcmVlJywnRG9jdW1lbnQ6OnJlY2FsY1N0eWxlJywnRG9jdW1lbnQ6OnVwZGF0ZUFjdGl2ZVN0eWxlJywnRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlJywnRG9jdW1lbnQ6OnVwZGF0ZVN0eWxlSW52YWxpZGF0aW9uSWZOZWVkZWQnLCdMb2NhbEZyYW1lVmlldzo6dXBkYXRlU3R5bGVBbmRMYXlvdXRJZk5lZWRlZFJlY3Vyc2l2ZScsJ1BhcnNlQXV0aG9yU3R5bGVTaGVldCcsJ1J1bGVTZXQ6OmFkZFJ1bGVzRnJvbVNoZWV0JywnU3R5bGVFbGVtZW50Ojpwcm9jZXNzU3R5bGVTaGVldCcsJ1N0eWxlRW5naW5lOjpjcmVhdGVSZXNvbHZlcicsJ1N0eWxlRW5naW5lOjp1cGRhdGVBY3RpdmVTdHlsZVNoZWV0cycsJ1N0eWxlU2hlZXRDb250ZW50czo6cGFyc2VBdXRob3JTdHlsZVNoZWV0JywnVXBkYXRlTGF5b3V0VHJlZScsXSxzY3JpcHRfcGFyc2VfYW5kX2NvbXBpbGU6WydWOC5Db21waWxlRnVsbENvZGUnLCdWOC5OZXdDb250ZXh0JywnVjguUGFyc2UnLCdWOC5QYXJzZUxhenknLCdWOC5SZWNvbXBpbGVTeW5jaHJvbm91cycsJ1Y4LlNjcmlwdENvbXBpbGVyJywndjguY29tcGlsZScsJ3Y4LnBhcnNlT25CYWNrZ3JvdW5kJyxdLHNjcmlwdF9leGVjdXRlOlsnRXZhbHVhdGVTY3JpcHQnLCdGdW5jdGlvbkNhbGwnLCdIVE1MUGFyc2VyU2NyaXB0UnVubmVyIEV4ZWN1dGVTY3JpcHQnLCdWOC5FeGVjdXRlJywnVjguUnVuTWljcm90YXNrcycsJ1Y4LlRhc2snLCdXaW5kb3dQcm94eTo6aW5pdGlhbGl6ZScsJ3Y4LmNhbGxGdW5jdGlvbicsJ3Y4LnJ1bicsXSxyZXNvdXJjZV9sb2FkaW5nOlsnUmVuZGVyRnJhbWVJbXBsOjpkaWRGaW5pc2hEb2N1bWVudExvYWQnLCdSZW5kZXJGcmFtZUltcGw6OmRpZEZpbmlzaExvYWQnLCdSZXNvdXJjZTo6YXBwZW5kRGF0YScsJ1Jlc291cmNlRGlzcGF0Y2hlcjo6T25SZWNlaXZlZERhdGEnLCdSZXNvdXJjZURpc3BhdGNoZXI6Ok9uUmVjZWl2ZWRSZXNwb25zZScsJ1Jlc291cmNlRGlzcGF0Y2hlcjo6T25SZXF1ZXN0Q29tcGxldGUnLCdSZXNvdXJjZUZldGNoZXI6OnJlcXVlc3RSZXNvdXJjZScsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6OkNhbmNlbCcsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6Ok9uQ29tcGxldGVkUmVxdWVzdCcsJ1dlYlVSTExvYWRlckltcGw6OkNvbnRleHQ6Ok9uUmVjZWl2ZWREYXRhJywnV2ViVVJMTG9hZGVySW1wbDo6Q29udGV4dDo6T25SZWNlaXZlZFJlZGlyZWN0JywnV2ViVVJMTG9hZGVySW1wbDo6Q29udGV4dDo6T25SZWNlaXZlZFJlc3BvbnNlJywnV2ViVVJMTG9hZGVySW1wbDo6Q29udGV4dDo6U3RhcnQnLCdXZWJVUkxMb2FkZXJJbXBsOjpsb2FkQXN5bmNocm9ub3VzbHknLCdXZWJVUkxMb2FkZXJJbXBsOjpsb2FkU3luY2hyb25vdXNseScsJ2NvbnRlbnQ6Om1vam9tOjpVUkxMb2FkZXJDbGllbnQnLF0scmVuZGVyZXJfbWlzYzpbJ0RlY29kZUZvbnQnLCdUaHJlYWRTdGF0ZTo6Y29tcGxldGVTd2VlcCcsXSx2OF9ydW50aW1lOltdLFtTQU1FX0FTX1BBUkVOVF06WydTeW5jQ2hhbm5lbDo6U2VuZCcsXX07Y29uc3QgQ09MT1JfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlk9bmV3IHRyLmIuU2luZWJvd0NvbG9yR2VuZXJhdG9yKCk7Y29uc3QgVVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfVElUTEU9bmV3IE1hcCgpO2Zvcihjb25zdCBjYXRlZ29yeSBpbiBUSVRMRVNfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlkpe1RJVExFU19GT1JfVVNFUl9GUklFTkRMWV9DQVRFR09SWVtjYXRlZ29yeV0uZm9yRWFjaChmdW5jdGlvbih0aXRsZSl7VVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfVElUTEUuc2V0KHRpdGxlLGNhdGVnb3J5KTt9KTt9CmNvbnN0IFVTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX0VWRU5UX0NBVEVHT1JZPXtuZXRsb2c6J25ldCcsb3ZlcmhlYWQ6J292ZXJoZWFkJyxzdGFydHVwOidzdGFydHVwJyxncHU6J2dwdScsfTtmdW5jdGlvbiBDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcigpe30KQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuZnJvbUV2ZW50PWZ1bmN0aW9uKGV2ZW50KXtsZXQgdXNlckZyaWVuZGx5Q2F0ZWdvcnk9VVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfVElUTEUuZ2V0KGV2ZW50LnRpdGxlKTtpZih1c2VyRnJpZW5kbHlDYXRlZ29yeSl7aWYodXNlckZyaWVuZGx5Q2F0ZWdvcnk9PT1TQU1FX0FTX1BBUkVOVCl7aWYoZXZlbnQucGFyZW50U2xpY2Upe3JldHVybiBDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5mcm9tRXZlbnQoZXZlbnQucGFyZW50U2xpY2UpO319ZWxzZXtyZXR1cm4gdXNlckZyaWVuZGx5Q2F0ZWdvcnk7fX0KY29uc3QgZXZlbnRDYXRlZ29yeVBhcnRzPXRyLmIuZ2V0Q2F0ZWdvcnlQYXJ0cyhldmVudC5jYXRlZ29yeSk7Zm9yKGxldCBpPTA7aTxldmVudENhdGVnb3J5UGFydHMubGVuZ3RoOysraSl7Y29uc3QgZXZlbnRDYXRlZ29yeT1ldmVudENhdGVnb3J5UGFydHNbaV07dXNlckZyaWVuZGx5Q2F0ZWdvcnk9VVNFUl9GUklFTkRMWV9DQVRFR09SWV9GT1JfRVZFTlRfQ0FURUdPUllbZXZlbnRDYXRlZ29yeV07aWYodXNlckZyaWVuZGx5Q2F0ZWdvcnkpe3JldHVybiB1c2VyRnJpZW5kbHlDYXRlZ29yeTt9fQpyZXR1cm4nb3RoZXInO307Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuZ2V0Q29sb3I9ZnVuY3Rpb24odWZjKXtyZXR1cm4gQ09MT1JfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlkuY29sb3JGb3JLZXkodWZjKTt9O0Nocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyLkFMTF9USVRMRVM9WydvdGhlciddO2Zvcihjb25zdCBjYXRlZ29yeSBpbiBUSVRMRVNfRk9SX1VTRVJfRlJJRU5ETFlfQ0FURUdPUlkpe2lmKGNhdGVnb3J5PT09U0FNRV9BU19QQVJFTlQpY29udGludWU7Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUy5wdXNoKGNhdGVnb3J5KTt9CmZvcihjb25zdCBjYXRlZ29yeSBvZiBPYmplY3QudmFsdWVzKFVTRVJfRlJJRU5ETFlfQ0FURUdPUllfRk9SX0VWRU5UX0NBVEVHT1JZKSl7Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuQUxMX1RJVExFUy5wdXNoKGNhdGVnb3J5KTt9CkNocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyLkFMTF9USVRMRVMuc29ydCgpO2Zvcihjb25zdCBjYXRlZ29yeSBvZiBDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5BTExfVElUTEVTKXtDaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5nZXRDb2xvcihjYXRlZ29yeSk7fQpyZXR1cm57Q2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe3JldHVybntCUk9XU0VSX1BST0NFU1NfUElEX1JFRjotMSxPQkpFQ1RfREVGQVVMVF9TQ09QRToncHRyJyxMT0NBTF9JRF9QSEFTRVM6bmV3IFNldChbJ04nLCdEJywnTycsJygnLCcpJ10pfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuYXVkaXRzJyxmdW5jdGlvbigpe2NvbnN0IEF1ZGl0b3I9dHIuYy5BdWRpdG9yO2NvbnN0IEFsZXJ0PXRyLm1vZGVsLkFsZXJ0O2NvbnN0IEV2ZW50SW5mbz10ci5tb2RlbC5FdmVudEluZm87ZnVuY3Rpb24gQ2hyb21lQXVkaXRvcihtb2RlbCl7QXVkaXRvci5jYWxsKHRoaXMsbW9kZWwpO2NvbnN0IG1vZGVsSGVscGVyPXRoaXMubW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYobW9kZWxIZWxwZXImJm1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIpe3RoaXMubW9kZWxIZWxwZXI9bW9kZWxIZWxwZXI7fWVsc2V7dGhpcy5tb2RlbEhlbHBlcj11bmRlZmluZWQ7fX0KZnVuY3Rpb24gZ2V0TWlzc2VkRnJhbWVBbGVydHMocmVuZGVyZXJIZWxwZXJzKXtjb25zdCBhbGVydHM9W107Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIHJlbmRlcmVySGVscGVycyl7aWYoIXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQpY29udGludWU7Y29uc3QgdGhyZWFkPXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ7Y29uc3QgYXN5bmNTbGljZXM9T2JqZWN0LnZhbHVlcyh0aHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcyk7Zm9yKGNvbnN0IHNsaWNlIG9mIGFzeW5jU2xpY2VzKXtpZihzbGljZS50aXRsZSE9PSdQaXBlbGluZVJlcG9ydGVyJ3x8IXNsaWNlLmFyZ3MudGVybWluYXRpb25fc3RhdHVzfHxzbGljZS5hcmdzLnRlcm1pbmF0aW9uX3N0YXR1cyE9PSdtaXNzZWRfZnJhbWUnKWNvbnRpbnVlO2NvbnN0IGFsZXJ0U2xpY2VzPVtzbGljZV0uY29uY2F0KHNsaWNlLnN1YlNsaWNlcyk7YWxlcnRzLnB1c2gobmV3IEFsZXJ0KG5ldyBFdmVudEluZm8oJ01pc3NlZCBGcmFtZScsJ0ZyYW1lIHdhcyBub3Qgc3VibWl0dGVkIGJlZm9yZSBkZWFkbGluZS4nKSxzbGljZS5zdGFydCxhbGVydFNsaWNlcykpO319CnJldHVybiBhbGVydHM7fQpDaHJvbWVBdWRpdG9yLnByb3RvdHlwZT17X19wcm90b19fOkF1ZGl0b3IucHJvdG90eXBlLHJ1bkFubm90YXRlKCl7aWYoIXRoaXMubW9kZWxIZWxwZXIpcmV0dXJuO2Zvcihjb25zdCBwaWQgaW4gdGhpcy5tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2NvbnN0IHJlbmRlcmVySGVscGVyPXRoaXMubW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF07aWYocmVuZGVyZXJIZWxwZXIuaXNDaHJvbWVUcmFjaW5nVUkpe3JlbmRlcmVySGVscGVyLnByb2Nlc3MuaW1wb3J0YW50PWZhbHNlO319fSxpbnN0YWxsVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXJJZk5lZWRlZCgpe3RoaXMubW9kZWwuYWRkVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIodHIuZS5jaHJvbWUuQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIpO30scnVuQXVkaXQoKXtpZighdGhpcy5tb2RlbEhlbHBlcilyZXR1cm47dGhpcy5tb2RlbC5yZXBsYWNlUElEUmVmc0luUGF0Y2h1cHModHIubW9kZWwuQlJPV1NFUl9QUk9DRVNTX1BJRF9SRUYsdGhpcy5tb2RlbEhlbHBlci5icm93c2VyUHJvY2Vzcy5waWQpO3RoaXMubW9kZWwuYXBwbHlPYmplY3RSZWZQYXRjaHVwcygpO2NvbnN0IGFsZXJ0cz1nZXRNaXNzZWRGcmFtZUFsZXJ0cyhPYmplY3QudmFsdWVzKHRoaXMubW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSk7dGhpcy5tb2RlbC5hbGVydHM9dGhpcy5tb2RlbC5hbGVydHMuY29uY2F0KGFsZXJ0cyk7fX07QXVkaXRvci5yZWdpc3RlcihDaHJvbWVBdWRpdG9yKTtyZXR1cm57Q2hyb21lQXVkaXRvcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgS05PV05fUFJPUEVSVElFUz17YWJzWDoxLGFic1k6MSxhZGRyZXNzOjEsYW5vbnltb3VzOjEsY2hpbGROZWVkczoxLGNoaWxkcmVuOjEsY2xhc3NOYW1lczoxLGNvbDoxLGNvbFNwYW46MSxmbG9hdDoxLGhlaWdodDoxLGh0bWxJZDoxLG5hbWU6MSxwb3NDaGlsZE5lZWRzOjEscG9zaXRpb25lZDoxLHBvc2l0aW9uZWRNb3ZlbWVudDoxLHJlbFg6MSxyZWxZOjEscmVsYXRpdmVQb3NpdGlvbmVkOjEscm93OjEscm93U3BhbjoxLHNlbGZOZWVkczoxLHN0aWNreVBvc2l0aW9uZWQ6MSx0YWc6MSx3aWR0aDoxfTtmdW5jdGlvbiBMYXlvdXRPYmplY3Qoc25hcHNob3QsYXJncyl7dGhpcy5zbmFwc2hvdF89c25hcHNob3Q7dGhpcy5pZF89YXJncy5hZGRyZXNzO3RoaXMubmFtZV89YXJncy5uYW1lO3RoaXMuY2hpbGRMYXlvdXRPYmplY3RzXz1bXTt0aGlzLm90aGVyUHJvcGVydGllc189e307dGhpcy50YWdfPWFyZ3MudGFnO3RoaXMucmVsYXRpdmVSZWN0Xz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSChhcmdzLnJlbFgsYXJncy5yZWxZLGFyZ3Mud2lkdGgsYXJncy5oZWlnaHQpO3RoaXMuYWJzb2x1dGVSZWN0Xz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSChhcmdzLmFic1gsYXJncy5hYnNZLGFyZ3Mud2lkdGgsYXJncy5oZWlnaHQpO3RoaXMuaXNGbG9hdF89YXJncy5mbG9hdDt0aGlzLmlzU3RpY2t5UG9zaXRpb25lZF89YXJncy5zdGlja3lQb3NpdGlvbmVkO3RoaXMuaXNQb3NpdGlvbmVkXz1hcmdzLnBvc2l0aW9uZWQ7dGhpcy5pc1JlbGF0aXZlUG9zaXRpb25lZF89YXJncy5yZWxhdGl2ZVBvc2l0aW9uZWQ7dGhpcy5pc0Fub255bW91c189YXJncy5hbm9ueW1vdXM7dGhpcy5odG1sSWRfPWFyZ3MuaHRtbElkO3RoaXMuY2xhc3NOYW1lc189YXJncy5jbGFzc05hbWVzO3RoaXMubmVlZHNMYXlvdXRSZWFzb25zXz1bXTtpZihhcmdzLnNlbGZOZWVkcyl7dGhpcy5uZWVkc0xheW91dFJlYXNvbnNfLnB1c2goJ3NlbGYnKTt9CmlmKGFyZ3MuY2hpbGROZWVkcyl7dGhpcy5uZWVkc0xheW91dFJlYXNvbnNfLnB1c2goJ2NoaWxkJyk7fQppZihhcmdzLnBvc0NoaWxkTmVlZHMpe3RoaXMubmVlZHNMYXlvdXRSZWFzb25zXy5wdXNoKCdwb3NpdGlvbmVkQ2hpbGQnKTt9CmlmKGFyZ3MucG9zaXRpb25lZE1vdmVtZW50KXt0aGlzLm5lZWRzTGF5b3V0UmVhc29uc18ucHVzaCgncG9zaXRpb25lZE1vdmVtZW50Jyk7fQp0aGlzLnRhYmxlUm93Xz1hcmdzLnJvdzt0aGlzLnRhYmxlQ29sXz1hcmdzLmNvbDt0aGlzLnRhYmxlUm93U3Bhbl89YXJncy5yb3dTcGFuO3RoaXMudGFibGVDb2xTcGFuXz1hcmdzLmNvbFNwYW47aWYoYXJncy5jaGlsZHJlbil7YXJncy5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXt0aGlzLmNoaWxkTGF5b3V0T2JqZWN0c18ucHVzaChuZXcgTGF5b3V0T2JqZWN0KHNuYXBzaG90LGNoaWxkKSk7fS5iaW5kKHRoaXMpKTt9CmZvcihjb25zdCBwcm9wZXJ0eSBpbiBhcmdzKXtpZighS05PV05fUFJPUEVSVElFU1twcm9wZXJ0eV0pe3RoaXMub3RoZXJQcm9wZXJ0aWVzX1twcm9wZXJ0eV09YXJnc1twcm9wZXJ0eV07fX19CkxheW91dE9iamVjdC5wcm90b3R5cGU9e2dldCBzbmFwc2hvdCgpe3JldHVybiB0aGlzLnNuYXBzaG90Xzt9LGdldCBpZCgpe3JldHVybiB0aGlzLmlkXzt9LGdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fSxnZXQgdGFnKCl7cmV0dXJuIHRoaXMudGFnXzt9LGdldCByZWxhdGl2ZVJlY3QoKXtyZXR1cm4gdGhpcy5yZWxhdGl2ZVJlY3RfO30sZ2V0IGFic29sdXRlUmVjdCgpe3JldHVybiB0aGlzLmFic29sdXRlUmVjdF87fSxnZXQgaXNQb3NpdGlvbmVkKCl7cmV0dXJuIHRoaXMuaXNQb3NpdGlvbmVkXzt9LGdldCBpc0Zsb2F0KCl7cmV0dXJuIHRoaXMuaXNGbG9hdF87fSxnZXQgaXNTdGlja3lQb3NpdGlvbmVkKCl7cmV0dXJuIHRoaXMuaXNTdGlja3lQb3NpdGlvbmVkXzt9LGdldCBpc1JlbGF0aXZlUG9zaXRpb25lZCgpe3JldHVybiB0aGlzLmlzUmVsYXRpdmVQb3NpdGlvbmVkXzt9LGdldCBpc0Fub255bW91cygpe3JldHVybiB0aGlzLmlzQW5vbnltb3VzXzt9LGdldCB0YWJsZVJvdygpe3JldHVybiB0aGlzLnRhYmxlUm93Xzt9LGdldCB0YWJsZUNvbCgpe3JldHVybiB0aGlzLnRhYmxlQ29sXzt9LGdldCB0YWJsZVJvd1NwYW4oKXtyZXR1cm4gdGhpcy50YWJsZVJvd1NwYW5fO30sZ2V0IHRhYmxlQ29sU3Bhbigpe3JldHVybiB0aGlzLnRhYmxlQ29sU3Bhbl87fSxnZXQgaHRtbElkKCl7cmV0dXJuIHRoaXMuaHRtbElkXzt9LGdldCBjbGFzc05hbWVzKCl7cmV0dXJuIHRoaXMuY2xhc3NOYW1lc187fSxnZXQgbmVlZHNMYXlvdXRSZWFzb25zKCl7cmV0dXJuIHRoaXMubmVlZHNMYXlvdXRSZWFzb25zXzt9LGdldCBoYXNDaGlsZExheW91dE9iamVjdHMoKXtyZXR1cm4gdGhpcy5jaGlsZExheW91dE9iamVjdHNfLmxlbmd0aD4wO30sZ2V0IGNoaWxkTGF5b3V0T2JqZWN0cygpe3JldHVybiB0aGlzLmNoaWxkTGF5b3V0T2JqZWN0c187fSx0cmF2ZXJzZVRyZWUoY2Isb3B0X3RoaXMpe2NiLmNhbGwob3B0X3RoaXMsdGhpcyk7aWYoIXRoaXMuaGFzQ2hpbGRMYXlvdXRPYmplY3RzKXJldHVybjt0aGlzLmNoaWxkTGF5b3V0T2JqZWN0cy5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkKXtjaGlsZC50cmF2ZXJzZVRyZWUoY2Isb3B0X3RoaXMpO30pO30sZ2V0IG90aGVyUHJvcGVydHlOYW1lcygpe2NvbnN0IG5hbWVzPVtdO2Zvcihjb25zdCBuYW1lIGluIHRoaXMub3RoZXJQcm9wZXJ0aWVzXyl7bmFtZXMucHVzaChuYW1lKTt9CnJldHVybiBuYW1lczt9LGdldFByb3BlcnR5KG5hbWUpe3JldHVybiB0aGlzLm90aGVyUHJvcGVydGllc19bbmFtZV07fSxnZXQgcHJldmlvdXNTbmFwc2hvdExheW91dE9iamVjdCgpe2lmKCF0aGlzLnNuYXBzaG90LnByZXZpb3VzU25hcHNob3QpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5zbmFwc2hvdC5wcmV2aW91c1NuYXBzaG90LmdldExheW91dE9iamVjdEJ5SWQodGhpcy5pZCk7fSxnZXQgbmV4dFNuYXBzaG90TGF5b3V0T2JqZWN0KCl7aWYoIXRoaXMuc25hcHNob3QubmV4dFNuYXBzaG90KXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuc25hcHNob3QubmV4dFNuYXBzaG90LmdldExheW91dE9iamVjdEJ5SWQodGhpcy5pZCk7fX07cmV0dXJue0xheW91dE9iamVjdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7Y29uc3QgT2JqZWN0SW5zdGFuY2U9dHIubW9kZWwuT2JqZWN0SW5zdGFuY2U7ZnVuY3Rpb24gTGF5b3V0VHJlZUluc3RhbmNlKCl7T2JqZWN0SW5zdGFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KTGF5b3V0VHJlZUluc3RhbmNlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdEluc3RhbmNlLnByb3RvdHlwZSx9O09iamVjdEluc3RhbmNlLnN1YlR5cGVzLnJlZ2lzdGVyKExheW91dFRyZWVJbnN0YW5jZSx7dHlwZU5hbWU6J0xheW91dFRyZWUnfSk7ZnVuY3Rpb24gTGF5b3V0VHJlZVNuYXBzaG90KCl7T2JqZWN0U25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMucm9vdExheW91dE9iamVjdD1uZXcgdHIuZS5jaHJvbWUuTGF5b3V0T2JqZWN0KHRoaXMsdGhpcy5hcmdzKTt9CkxheW91dFRyZWVTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUsfTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihMYXlvdXRUcmVlU25hcHNob3Qse3R5cGVOYW1lOidMYXlvdXRUcmVlJ30pO3JldHVybntMYXlvdXRUcmVlSW5zdGFuY2UsTGF5b3V0VHJlZVNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBFdmVudENvbnRhaW5lcigpe3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7dGhpcy5pbXBvcnRhbnQ9dHJ1ZTt0aGlzLmJvdW5kc189bmV3IHRyLmIubWF0aC5SYW5nZSgpO30KRXZlbnRDb250YWluZXIucHJvdG90eXBlPXtnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sZ2V0IHN0YWJsZUlkKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBib3VuZHMoKXtyZXR1cm4gdGhpcy5ib3VuZHNfO30sdXBkYXRlQm91bmRzKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sKmNoaWxkRXZlbnRzKCl7fSwqZ2V0RGVzY2VuZGFudEV2ZW50cygpe3lpZWxkKnRoaXMuY2hpbGRFdmVudHMoKTtmb3IoY29uc3QgY29udGFpbmVyIG9mIHRoaXMuY2hpbGRFdmVudENvbnRhaW5lcnMoKSl7eWllbGQqY29udGFpbmVyLmdldERlc2NlbmRhbnRFdmVudHMoKTt9fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt9LCpnZXREZXNjZW5kYW50RXZlbnRDb250YWluZXJzKCl7eWllbGQgdGhpcztmb3IoY29uc3QgY29udGFpbmVyIG9mIHRoaXMuY2hpbGRFdmVudENvbnRhaW5lcnMoKSl7eWllbGQqY29udGFpbmVyLmdldERlc2NlbmRhbnRFdmVudENvbnRhaW5lcnMoKTt9fSwqZ2V0RGVzY2VuZGFudEV2ZW50c0luU29ydGVkUmFuZ2VzKHJhbmdlcyxvcHRfY29udGFpbmVyUHJlZGljYXRlKXtpZihvcHRfY29udGFpbmVyUHJlZGljYXRlPT09dW5kZWZpbmVkfHxvcHRfY29udGFpbmVyUHJlZGljYXRlKHRoaXMpKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5jaGlsZEV2ZW50cygpKXtjb25zdCBpPXRyLmIuZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheShyYW5nZXMscmFuZ2U9PmV2ZW50LnN0YXJ0PD1yYW5nZS5tYXgpO2lmKGk8cmFuZ2VzLmxlbmd0aCYmZXZlbnQuZW5kPj1yYW5nZXNbaV0ubWluKXlpZWxkIGV2ZW50O319CmZvcihjb25zdCBjb250YWluZXIgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXt5aWVsZCpjb250YWluZXIuZ2V0RGVzY2VuZGFudEV2ZW50c0luU29ydGVkUmFuZ2VzKHJhbmdlcyxvcHRfY29udGFpbmVyUHJlZGljYXRlKTt9fSwqZmluZFRvcG1vc3RTbGljZXNJblRoaXNDb250YWluZXIoZXZlbnRQcmVkaWNhdGUsb3B0X3RoaXMpe30sKmZpbmRUb3Btb3N0U2xpY2VzKGV2ZW50UHJlZGljYXRlKXtmb3IoY29uc3QgZWMgb2YgdGhpcy5nZXREZXNjZW5kYW50RXZlbnRDb250YWluZXJzKCkpe3lpZWxkKmVjLmZpbmRUb3Btb3N0U2xpY2VzSW5UaGlzQ29udGFpbmVyKGV2ZW50UHJlZGljYXRlKTt9fSwqZmluZFRvcG1vc3RTbGljZXNOYW1lZChuYW1lKXt5aWVsZCp0aGlzLmZpbmRUb3Btb3N0U2xpY2VzKGU9PmUudGl0bGU9PT1uYW1lKTt9fTtyZXR1cm57RXZlbnRDb250YWluZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50PXRyLm1vZGVsLkV2ZW50O2NvbnN0IEV2ZW50UmVnaXN0cnk9dHIubW9kZWwuRXZlbnRSZWdpc3RyeTtjbGFzcyBSZXNvdXJjZVVzYWdlU2FtcGxlIGV4dGVuZHMgRXZlbnR7Y29uc3RydWN0b3Ioc2VyaWVzLHN0YXJ0LHVzYWdlKXtzdXBlcigpO3RoaXMuc2VyaWVzXz1zZXJpZXM7dGhpcy5zdGFydF89c3RhcnQ7dGhpcy51c2FnZV89dXNhZ2U7fQpnZXQgc2VyaWVzKCl7cmV0dXJuIHRoaXMuc2VyaWVzXzt9CmdldCBzdGFydCgpe3JldHVybiB0aGlzLnN0YXJ0Xzt9CnNldCBzdGFydCh2YWx1ZSl7dGhpcy5zdGFydF89dmFsdWU7fQpnZXQgdXNhZ2UoKXtyZXR1cm4gdGhpcy51c2FnZV87fQpzZXQgdXNhZ2UodmFsdWUpe3RoaXMudXNhZ2VfPXZhbHVlO30KYWRkQm91bmRzVG9SYW5nZShyYW5nZSl7cmFuZ2UuYWRkVmFsdWUodGhpcy5zdGFydCk7fX0KRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihSZXNvdXJjZVVzYWdlU2FtcGxlLHtuYW1lOidyZXNvdXJjZVVzYWdlU2FtcGxlJyxwbHVyYWxOYW1lOidyZXNvdXJjZVVzYWdlU2FtcGxlcyd9KTtyZXR1cm57UmVzb3VyY2VVc2FnZVNhbXBsZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgUmVzb3VyY2VVc2FnZVNhbXBsZT10ci5tb2RlbC5SZXNvdXJjZVVzYWdlU2FtcGxlO2NsYXNzIFJlc291cmNlVXNhZ2VTZXJpZXMgZXh0ZW5kcyB0ci5tb2RlbC5FdmVudENvbnRhaW5lcntjb25zdHJ1Y3RvcihkZXZpY2Upe3N1cGVyKCk7dGhpcy5kZXZpY2VfPWRldmljZTt0aGlzLnNhbXBsZXNfPVtdO30KZ2V0IGRldmljZSgpe3JldHVybiB0aGlzLmRldmljZV87fQpnZXQgc2FtcGxlcygpe3JldHVybiB0aGlzLnNhbXBsZXNfO30KZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMuZGV2aWNlXy5zdGFibGVJZCsnLlJlc291cmNlVXNhZ2VTZXJpZXMnO30KYWRkVXNhZ2VTYW1wbGUodHMsdmFsKXtjb25zdCBzYW1wbGU9bmV3IFJlc291cmNlVXNhZ2VTYW1wbGUodGhpcyx0cyx2YWwpO3RoaXMuc2FtcGxlc18ucHVzaChzYW1wbGUpO3JldHVybiBzYW1wbGU7fQpjb21wdXRlUmVzb3VyY2VUaW1lQ29uc3VtZWRJbk1zKHN0YXJ0LGVuZCl7Y29uc3QgbWVhc3VyZW1lbnRSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc3RhcnQsZW5kKTtsZXQgcmVzb3VyY2VUaW1lSW5Ncz0wO2xldCBzdGFydEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxzdGFydCktMTtjb25zdCBlbmRJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zYW1wbGVzLHg9Pnguc3RhcnQsZW5kKTtpZihzdGFydEluZGV4PDApc3RhcnRJbmRleD0wO2ZvcihsZXQgaT1zdGFydEluZGV4O2k8ZW5kSW5kZXg7aSsrKXtjb25zdCBzYW1wbGU9dGhpcy5zYW1wbGVzW2ldO2NvbnN0IG5leHRTYW1wbGU9dGhpcy5zYW1wbGVzW2krMV07Y29uc3Qgc2FtcGxlUmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO3NhbXBsZVJhbmdlLmFkZFZhbHVlKHNhbXBsZS5zdGFydCk7c2FtcGxlUmFuZ2UuYWRkVmFsdWUobmV4dFNhbXBsZT9uZXh0U2FtcGxlLnN0YXJ0OnNhbXBsZS5zdGFydCk7Y29uc3QgaW50ZXJzZWN0aW9uUmFuZ2VJbk1zPW1lYXN1cmVtZW50UmFuZ2UuZmluZEludGVyc2VjdGlvbihzYW1wbGVSYW5nZSk7cmVzb3VyY2VUaW1lSW5Ncys9aW50ZXJzZWN0aW9uUmFuZ2VJbk1zLmR1cmF0aW9uKnNhbXBsZS51c2FnZTt9CnJldHVybiByZXNvdXJjZVRpbWVJbk1zO30KZ2V0U2FtcGxlc1dpdGhpblJhbmdlKHN0YXJ0LGVuZCl7Y29uc3Qgc3RhcnRJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5zYW1wbGVzLHg9Pnguc3RhcnQsc3RhcnQpO2NvbnN0IGVuZEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxlbmQpO3JldHVybiB0aGlzLnNhbXBsZXMuc2xpY2Uoc3RhcnRJbmRleCxlbmRJbmRleCk7fQpzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7Zm9yKGxldCBpPTA7aTx0aGlzLnNhbXBsZXNfLmxlbmd0aDsrK2kpe3RoaXMuc2FtcGxlc19baV0uc3RhcnQrPWFtb3VudDt9fQp1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2lmKHRoaXMuc2FtcGxlc18ubGVuZ3RoPT09MClyZXR1cm47dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy5zYW1wbGVzX1swXS5zdGFydCk7dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy5zYW1wbGVzX1t0aGlzLnNhbXBsZXNfLmxlbmd0aC0xXS5zdGFydCk7fSpjaGlsZEV2ZW50cygpe3lpZWxkKnRoaXMuc2FtcGxlc187fX0KcmV0dXJue1Jlc291cmNlVXNhZ2VTZXJpZXMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuYXVkaXRzJyxmdW5jdGlvbigpe2NsYXNzIENwdVVzYWdlQXVkaXRvciBleHRlbmRzIHRyLmMuQXVkaXRvcntjb25zdHJ1Y3Rvcihtb2RlbCl7c3VwZXIoKTt0aGlzLm1vZGVsXz1tb2RlbDt9CnJ1bkFubm90YXRlKCl7dGhpcy5tb2RlbF8uZGV2aWNlLmNwdVVzYWdlU2VyaWVzPXRoaXMuY29tcHV0ZUNwdVVzYWdlU2VyaWVzXyh0aGlzLm1vZGVsXy5ib3VuZHMubWluLHRoaXMubW9kZWxfLmJvdW5kcy5tYXgsdGhpcy5jb21wdXRlQ3B1VXNhZ2VfKCkpO30KY29tcHV0ZUJpblNpemVfKHN0YXJ0LGVuZCl7Y29uc3QgTUlOX0JJTl9TSVpFX01TPTEuMDtjb25zdCBNQVhfTlVNX0JJTlM9MTAwMDAwO2NvbnN0IGludGVydmFsPWVuZC1zdGFydDtsZXQgYmluU2l6ZT1NSU5fQklOX1NJWkVfTVM7d2hpbGUoYmluU2l6ZSpNQVhfTlVNX0JJTlM8aW50ZXJ2YWwpYmluU2l6ZSo9MjtyZXR1cm4gYmluU2l6ZTt9CmNvbXB1dGVDcHVVc2FnZVNlcmllc18oc3RhcnQsZW5kLHVzYWdlUmVjb3Jkcyl7Y29uc3Qgc2VyaWVzPW5ldyB0ci5tb2RlbC5SZXNvdXJjZVVzYWdlU2VyaWVzKCk7aWYoc3RhcnQ9PT11bmRlZmluZWR8fHVzYWdlUmVjb3Jkcy5sZW5ndGg9PT0wKXJldHVybiBzZXJpZXM7Y29uc3QgYmluU2l6ZT10aGlzLmNvbXB1dGVCaW5TaXplXyhzdGFydCxlbmQpO2NvbnN0IG51bUJpbnM9TWF0aC5jZWlsKChlbmQtc3RhcnQpL2JpblNpemUpO2NvbnN0IGFycj1uZXcgQXJyYXkobnVtQmlucykuZmlsbCgwKTtmb3IoY29uc3QgcmVjb3JkIG9mIHVzYWdlUmVjb3Jkcyl7Y29uc3QgZmlyc3RJbmRleD1NYXRoLmNlaWwoKHJlY29yZC5zdGFydC1zdGFydCkvYmluU2l6ZSk7Y29uc3QgbGFzdEluZGV4PU1hdGguZmxvb3IoKHJlY29yZC5lbmQtc3RhcnQpL2JpblNpemUpO2ZvcihsZXQgaT1maXJzdEluZGV4O2k8PWxhc3RJbmRleDtpKyspYXJyW2ldKz1yZWNvcmQudXNhZ2U7fQpmb3IobGV0IGk9MDtpPG51bUJpbnM7aSsrKXtzZXJpZXMuYWRkVXNhZ2VTYW1wbGUoc3RhcnQrKGkqYmluU2l6ZSksYXJyW2ldKTt9CnJldHVybiBzZXJpZXM7fQpjb21wdXRlQ3B1VXNhZ2VfKCl7Y29uc3QgbW9kZWw9dGhpcy5tb2RlbF87Y29uc3QgcmVzdWx0PVtdO2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtmb3IoY29uc3QgZSBvZiBtb2RlbC5wcm9jZXNzZXNbcGlkXS5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCEoZSBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFNsaWNlKXx8ZS5kdXJhdGlvbj09PTB8fGUuY3B1RHVyYXRpb249PT11bmRlZmluZWQpe2NvbnRpbnVlO30KaWYoZS5zZWxmVGltZT09PTB8fGUuc2VsZlRpbWU9PT11bmRlZmluZWR8fGUuY3B1U2VsZlRpbWU9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KY29uc3QgdXNhZ2U9dHIuYi5tYXRoLmNsYW1wKGUuY3B1U2VsZlRpbWUvZS5zZWxmVGltZSwwLDEpO2xldCBsYXN0VGltZT1lLnN0YXJ0O2Zvcihjb25zdCBzdWJzbGljZSBvZiBlLnN1YlNsaWNlcyl7cmVzdWx0LnB1c2goe3VzYWdlLHN0YXJ0Omxhc3RUaW1lLGVuZDpzdWJzbGljZS5zdGFydH0pO2xhc3RUaW1lPXN1YnNsaWNlLmVuZDt9CnJlc3VsdC5wdXNoKHt1c2FnZSxzdGFydDpsYXN0VGltZSxlbmQ6ZS5lbmR9KTt9fQpyZXR1cm4gcmVzdWx0O319CnRyLmMuQXVkaXRvci5yZWdpc3RlcihDcHVVc2FnZUF1ZGl0b3IpO3JldHVybntDcHVVc2FnZUF1ZGl0b3J9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbWcnLGZ1bmN0aW9uKCl7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7ZnVuY3Rpb24gSW1hZ2VTbmFwc2hvdCgpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9CkltYWdlU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLGluaXRpYWxpemUoKXt0aGlzLmRhdGFfPXRoaXMuYXJncy5kYXRhO3RoaXMudHlwZV89dGhpcy5hcmdzLnBhcmFtcy50eXBlO30sZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9LGdldCB0eXBlKCl7cmV0dXJuIHRoaXMudHlwZV87fSx9O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKEltYWdlU25hcHNob3Qse3R5cGVOYW1lczpbJ2dmeDo6SW1hZ2UnXX0pO3JldHVybntJbWFnZVNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEJhc2U2NCgpe30KZnVuY3Rpb24gYjY0VG9VaW50NihuQ2hyKXtpZihuQ2hyPjY0JiZuQ2hyPDkxKXJldHVybiBuQ2hyLTY1O2lmKG5DaHI+OTYmJm5DaHI8MTIzKXJldHVybiBuQ2hyLTcxO2lmKG5DaHI+NDcmJm5DaHI8NTgpcmV0dXJuIG5DaHIrNDtpZihuQ2hyPT09NDMpcmV0dXJuIDYyO2lmKG5DaHI9PT00NylyZXR1cm4gNjM7cmV0dXJuIDA7fQpCYXNlNjQuZ2V0RGVjb2RlZEJ1ZmZlckxlbmd0aD1mdW5jdGlvbihpbnB1dCl7bGV0IHBhZD0wO2lmKGlucHV0LnN1YnN0cigtMik9PT0nPT0nKXtwYWQ9Mjt9ZWxzZSBpZihpbnB1dC5zdWJzdHIoLTEpPT09Jz0nKXtwYWQ9MTt9CnJldHVybigoaW5wdXQubGVuZ3RoKjMrMSk+PjIpLXBhZDt9O0Jhc2U2NC5FbmNvZGVBcnJheUJ1ZmZlclRvU3RyaW5nPWZ1bmN0aW9uKGlucHV0KXtsZXQgYmluYXJ5PScnO2NvbnN0IGJ5dGVzPW5ldyBVaW50OEFycmF5KGlucHV0KTtjb25zdCBsZW49Ynl0ZXMuYnl0ZUxlbmd0aDtmb3IobGV0IGk9MDtpPGxlbjtpKyspe2JpbmFyeSs9U3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7fQpyZXR1cm4gYnRvYShiaW5hcnkpO307QmFzZTY0LkRlY29kZVRvVHlwZWRBcnJheT1mdW5jdGlvbihpbnB1dCxvdXRwdXQpe2NvbnN0IG5Jbkxlbj1pbnB1dC5sZW5ndGg7Y29uc3Qgbk91dExlbj1CYXNlNjQuZ2V0RGVjb2RlZEJ1ZmZlckxlbmd0aChpbnB1dCk7bGV0IG5Nb2QzPTA7bGV0IG5Nb2Q0PTA7bGV0IG5VaW50MjQ9MDtsZXQgbk91dElkeD0wO2lmKG5PdXRMZW4+b3V0cHV0LmJ5dGVMZW5ndGgpe3Rocm93IG5ldyBFcnJvcignT3V0cHV0IGJ1ZmZlciB0b28gc21hbGwgdG8gZGVjb2RlLicpO30KZm9yKGxldCBuSW5JZHg9MDtuSW5JZHg8bkluTGVuO25JbklkeCsrKXtuTW9kND1uSW5JZHgmMztuVWludDI0fD1iNjRUb1VpbnQ2KGlucHV0LmNoYXJDb2RlQXQobkluSWR4KSk8PDE4LTYqbk1vZDQ7aWYobk1vZDQ9PT0zfHxuSW5MZW4tbkluSWR4PT09MSl7Zm9yKG5Nb2QzPTA7bk1vZDM8MyYmbk91dElkeDxuT3V0TGVuO25Nb2QzKyssbk91dElkeCsrKXtvdXRwdXQuc2V0VWludDgobk91dElkeCxuVWludDI0Pj4+KDE2Pj4+bk1vZDMmMjQpJjI1NSk7fQpuVWludDI0PTA7fX0KcmV0dXJuIG5PdXRMZW47fTtCYXNlNjQuYnRvYT1mdW5jdGlvbihpbnB1dCl7cmV0dXJuIGJ0b2EoaW5wdXQpO307QmFzZTY0LmF0b2I9ZnVuY3Rpb24oaW5wdXQpe3JldHVybiBhdG9iKGlucHV0KTt9O3JldHVybntCYXNlNjQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuZXR3JyxmdW5jdGlvbigpe2Z1bmN0aW9uIFBhcnNlcihpbXBvcnRlcil7dGhpcy5pbXBvcnRlcj1pbXBvcnRlcjt0aGlzLm1vZGVsPWltcG9ydGVyLm1vZGVsO30KUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGV9O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9UGFyc2VyO3RyLmIuZGVjb3JhdGVFeHRlbnNpb25SZWdpc3RyeShQYXJzZXIsb3B0aW9ucyk7cmV0dXJue1BhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5ldHcnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIuZXR3LlBhcnNlcjtjb25zdCBndWlkPSc2OEZERDkwMC00QTNFLTExRDEtODRGNC0wMDAwRjgwNDY0RTMnO2NvbnN0IGtFdmVudFRyYWNlSGVhZGVyT3Bjb2RlPTA7ZnVuY3Rpb24gRXZlbnRUcmFjZVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrRXZlbnRUcmFjZUhlYWRlck9wY29kZSxFdmVudFRyYWNlUGFyc2VyLnByb3RvdHlwZS5kZWNvZGVIZWFkZXIuYmluZCh0aGlzKSk7fQpFdmVudFRyYWNlUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKXtpZihoZWFkZXIudmVyc2lvbiE9PTIpe3Rocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIEV2ZW50VHJhY2UgZXZlbnQgdmVyc2lvbi4nKTt9CmNvbnN0IGJ1ZmZlclNpemU9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCB2ZXJzaW9uPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgcHJvdmlkZXJWZXJzaW9uPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgbnVtYmVyT2ZQcm9jZXNzb3JzPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgZW5kVGltZT1kZWNvZGVyLmRlY29kZVVJbnQ2NFRvU3RyaW5nKCk7Y29uc3QgdGltZXJSZXNvbHV0aW9uPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgbWF4RmlsZVNpemU9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBsb2dGaWxlTW9kZT1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IGJ1ZmZlcnNXcml0dGVuPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3Qgc3RhcnRCdWZmZXJzPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgcG9pbnRlclNpemU9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBldmVudHNMb3N0PWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgY3B1U3BlZWQ9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBsb2dnZXJOYW1lPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO2NvbnN0IGxvZ0ZpbGVOYW1lPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO2NvbnN0IHRpbWVab25lSW5mb3JtYXRpb249ZGVjb2Rlci5kZWNvZGVUaW1lWm9uZUluZm9ybWF0aW9uKCk7Y29uc3QgcGFkZGluZz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IGJvb3RUaW1lPWRlY29kZXIuZGVjb2RlVUludDY0VG9TdHJpbmcoKTtjb25zdCBwZXJmRnJlcT1kZWNvZGVyLmRlY29kZVVJbnQ2NFRvU3RyaW5nKCk7Y29uc3Qgc3RhcnRUaW1lPWRlY29kZXIuZGVjb2RlVUludDY0VG9TdHJpbmcoKTtjb25zdCByZXNlcnZlZEZsYWdzPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgYnVmZmVyc0xvc3Q9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBzZXNzaW9uTmFtZVN0cmluZz1kZWNvZGVyLmRlY29kZVcxNlN0cmluZygpO2NvbnN0IGxvZ0ZpbGVOYW1lU3RyaW5nPWRlY29kZXIuZGVjb2RlVzE2U3RyaW5nKCk7cmV0dXJue2J1ZmZlclNpemUsdmVyc2lvbixwcm92aWRlclZlcnNpb24sbnVtYmVyT2ZQcm9jZXNzb3JzLGVuZFRpbWUsdGltZXJSZXNvbHV0aW9uLG1heEZpbGVTaXplLGxvZ0ZpbGVNb2RlLGJ1ZmZlcnNXcml0dGVuLHN0YXJ0QnVmZmVycyxwb2ludGVyU2l6ZSxldmVudHNMb3N0LGNwdVNwZWVkLGxvZ2dlck5hbWUsbG9nRmlsZU5hbWUsdGltZVpvbmVJbmZvcm1hdGlvbixib290VGltZSxwZXJmRnJlcSxzdGFydFRpbWUscmVzZXJ2ZWRGbGFncyxidWZmZXJzTG9zdCxzZXNzaW9uTmFtZVN0cmluZyxsb2dGaWxlTmFtZVN0cmluZ307fSxkZWNvZGVIZWFkZXIoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKEV2ZW50VHJhY2VQYXJzZXIpO3JldHVybntFdmVudFRyYWNlUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmV0dycsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5ldHcuUGFyc2VyO2NvbnN0IGd1aWQ9JzNENkZBOEQwLUZFMDUtMTFEMC05RERBLTAwQzA0RkQ3QkE3Qyc7Y29uc3Qga1Byb2Nlc3NTdGFydE9wY29kZT0xO2NvbnN0IGtQcm9jZXNzRW5kT3Bjb2RlPTI7Y29uc3Qga1Byb2Nlc3NEQ1N0YXJ0T3Bjb2RlPTM7Y29uc3Qga1Byb2Nlc3NEQ0VuZE9wY29kZT00O2NvbnN0IGtQcm9jZXNzRGVmdW5jdE9wY29kZT0zOTtmdW5jdGlvbiBQcm9jZXNzUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtQcm9jZXNzU3RhcnRPcGNvZGUsUHJvY2Vzc1BhcnNlci5wcm90b3R5cGUuZGVjb2RlU3RhcnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrUHJvY2Vzc0VuZE9wY29kZSxQcm9jZXNzUGFyc2VyLnByb3RvdHlwZS5kZWNvZGVFbmQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrUHJvY2Vzc0RDU3RhcnRPcGNvZGUsUHJvY2Vzc1BhcnNlci5wcm90b3R5cGUuZGVjb2RlRENTdGFydC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtQcm9jZXNzRENFbmRPcGNvZGUsUHJvY2Vzc1BhcnNlci5wcm90b3R5cGUuZGVjb2RlRENFbmQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoZ3VpZCxrUHJvY2Vzc0RlZnVuY3RPcGNvZGUsUHJvY2Vzc1BhcnNlci5wcm90b3R5cGUuZGVjb2RlRGVmdW5jdC5iaW5kKHRoaXMpKTt9ClByb2Nlc3NQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxkZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpe2lmKGhlYWRlci52ZXJzaW9uPjUpe3Rocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIFByb2Nlc3MgZXZlbnQgdmVyc2lvbi4nKTt9CmxldCBwYWdlRGlyZWN0b3J5QmFzZTtpZihoZWFkZXIudmVyc2lvbj09PTEpe3BhZ2VEaXJlY3RvcnlCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KbGV0IHVuaXF1ZVByb2Nlc3NLZXk7aWYoaGVhZGVyLnZlcnNpb24+PTIpe3VuaXF1ZVByb2Nlc3NLZXk9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7fQpjb25zdCBwcm9jZXNzSWQ9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtjb25zdCBwYXJlbnRJZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2xldCBzZXNzaW9uSWQ7bGV0IGV4aXRTdGF0dXM7aWYoaGVhZGVyLnZlcnNpb24+PTEpe3Nlc3Npb25JZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2V4aXRTdGF0dXM9ZGVjb2Rlci5kZWNvZGVJbnQzMigpO30KbGV0IGRpcmVjdG9yeVRhYmxlQmFzZTtpZihoZWFkZXIudmVyc2lvbj49Myl7ZGlyZWN0b3J5VGFibGVCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO30KbGV0IGZsYWdzO2lmKGhlYWRlci52ZXJzaW9uPj00KXtmbGFncz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO30KY29uc3QgdXNlclNJRD1kZWNvZGVyLmRlY29kZVNJRChoZWFkZXIuaXM2NCk7bGV0IGltYWdlRmlsZU5hbWU7aWYoaGVhZGVyLnZlcnNpb24+PTEpe2ltYWdlRmlsZU5hbWU9ZGVjb2Rlci5kZWNvZGVTdHJpbmcoKTt9CmxldCBjb21tYW5kTGluZTtpZihoZWFkZXIudmVyc2lvbj49Mil7Y29tbWFuZExpbmU9ZGVjb2Rlci5kZWNvZGVXMTZTdHJpbmcoKTt9CmxldCBwYWNrYWdlRnVsbE5hbWU7bGV0IGFwcGxpY2F0aW9uSWQ7aWYoaGVhZGVyLnZlcnNpb24+PTQpe3BhY2thZ2VGdWxsTmFtZT1kZWNvZGVyLmRlY29kZVcxNlN0cmluZygpO2FwcGxpY2F0aW9uSWQ9ZGVjb2Rlci5kZWNvZGVXMTZTdHJpbmcoKTt9CmxldCBleGl0VGltZTtpZihoZWFkZXIudmVyc2lvbj09PTUmJmhlYWRlci5vcGNvZGU9PT1rUHJvY2Vzc0RlZnVuY3RPcGNvZGUpe2V4aXRUaW1lPWRlY29kZXIuZGVjb2RlVUludDY0VG9TdHJpbmcoKTt9CnJldHVybntwYWdlRGlyZWN0b3J5QmFzZSx1bmlxdWVQcm9jZXNzS2V5LHByb2Nlc3NJZCxwYXJlbnRJZCxzZXNzaW9uSWQsZXhpdFN0YXR1cyxkaXJlY3RvcnlUYWJsZUJhc2UsZmxhZ3MsdXNlclNJRCxpbWFnZUZpbGVOYW1lLGNvbW1hbmRMaW5lLHBhY2thZ2VGdWxsTmFtZSxhcHBsaWNhdGlvbklkLGV4aXRUaW1lfTt9LGRlY29kZVN0YXJ0KGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbC5nZXRPckNyZWF0ZVByb2Nlc3MoZmllbGRzLnByb2Nlc3NJZCk7aWYocHJvY2Vzcy5oYXNPd25Qcm9wZXJ0eSgnaGFzX2VuZGVkJykpe3Rocm93IG5ldyBFcnJvcignUHJvY2VzcyBjbGFzaCBkZXRlY3RlZC4nKTt9CnByb2Nlc3MubmFtZT1maWVsZHMuaW1hZ2VGaWxlTmFtZTtyZXR1cm4gdHJ1ZTt9LGRlY29kZUVuZChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWwuZ2V0T3JDcmVhdGVQcm9jZXNzKGZpZWxkcy5wcm9jZXNzSWQpO3Byb2Nlc3MuaGFzX2VuZGVkPXRydWU7cmV0dXJuIHRydWU7fSxkZWNvZGVEQ1N0YXJ0KGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbC5nZXRPckNyZWF0ZVByb2Nlc3MoZmllbGRzLnByb2Nlc3NJZCk7aWYocHJvY2Vzcy5oYXNPd25Qcm9wZXJ0eSgnaGFzX2VuZGVkJykpe3Rocm93IG5ldyBFcnJvcignUHJvY2VzcyBjbGFzaCBkZXRlY3RlZC4nKTt9CnByb2Nlc3MubmFtZT1maWVsZHMuaW1hZ2VGaWxlTmFtZTtyZXR1cm4gdHJ1ZTt9LGRlY29kZURDRW5kKGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbC5nZXRPckNyZWF0ZVByb2Nlc3MoZmllbGRzLnByb2Nlc3NJZCk7cHJvY2Vzcy5oYXNfZW5kZWQ9dHJ1ZTtyZXR1cm4gdHJ1ZTt9LGRlY29kZURlZnVuY3QoaGVhZGVyLGRlY29kZXIpe2NvbnN0IGZpZWxkcz10aGlzLmRlY29kZUZpZWxkcyhoZWFkZXIsZGVjb2Rlcik7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKFByb2Nlc3NQYXJzZXIpO3JldHVybntQcm9jZXNzUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmV0dycsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5ldHcuUGFyc2VyO2NvbnN0IGd1aWQ9JzNENkZBOEQxLUZFMDUtMTFEMC05RERBLTAwQzA0RkQ3QkE3Qyc7Y29uc3Qga1RocmVhZFN0YXJ0T3Bjb2RlPTE7Y29uc3Qga1RocmVhZEVuZE9wY29kZT0yO2NvbnN0IGtUaHJlYWREQ1N0YXJ0T3Bjb2RlPTM7Y29uc3Qga1RocmVhZERDRW5kT3Bjb2RlPTQ7Y29uc3Qga1RocmVhZENTd2l0Y2hPcGNvZGU9MzY7ZnVuY3Rpb24gVGhyZWFkUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtUaHJlYWRTdGFydE9wY29kZSxUaHJlYWRQYXJzZXIucHJvdG90eXBlLmRlY29kZVN0YXJ0LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1RocmVhZEVuZE9wY29kZSxUaHJlYWRQYXJzZXIucHJvdG90eXBlLmRlY29kZUVuZC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtUaHJlYWREQ1N0YXJ0T3Bjb2RlLFRocmVhZFBhcnNlci5wcm90b3R5cGUuZGVjb2RlRENTdGFydC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihndWlkLGtUaHJlYWREQ0VuZE9wY29kZSxUaHJlYWRQYXJzZXIucHJvdG90eXBlLmRlY29kZURDRW5kLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsa1RocmVhZENTd2l0Y2hPcGNvZGUsVGhyZWFkUGFyc2VyLnByb3RvdHlwZS5kZWNvZGVDU3dpdGNoLmJpbmQodGhpcykpO30KVGhyZWFkUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKXtpZihoZWFkZXIudmVyc2lvbj4zKXt0aHJvdyBuZXcgRXJyb3IoJ0luY29tcGF0aWJsZSBUaHJlYWQgZXZlbnQgdmVyc2lvbiAnKwpoZWFkZXIudmVyc2lvbisnLicpO30KY29uc3QgcHJvY2Vzc0lkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgdGhyZWFkSWQ9ZGVjb2Rlci5kZWNvZGVVSW50MzIoKTtsZXQgc3RhY2tCYXNlO2xldCBzdGFja0xpbWl0O2xldCB1c2VyU3RhY2tCYXNlO2xldCB1c2VyU3RhY2tMaW1pdDtsZXQgYWZmaW5pdHk7bGV0IHN0YXJ0QWRkcjtsZXQgd2luMzJTdGFydEFkZHI7bGV0IHRlYkJhc2U7bGV0IHN1YlByb2Nlc3NUYWc7bGV0IGJhc2VQcmlvcml0eTtsZXQgcGFnZVByaW9yaXR5O2xldCBpb1ByaW9yaXR5O2xldCB0aHJlYWRGbGFncztsZXQgd2FpdE1vZGU7aWYoaGVhZGVyLnZlcnNpb249PT0xKXtpZihoZWFkZXIub3Bjb2RlPT09a1RocmVhZFN0YXJ0T3Bjb2RlfHxoZWFkZXIub3Bjb2RlPT09a1RocmVhZERDU3RhcnRPcGNvZGUpe3N0YWNrQmFzZT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTtzdGFja0xpbWl0PWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3VzZXJTdGFja0Jhc2U9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7dXNlclN0YWNrTGltaXQ9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7c3RhcnRBZGRyPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3dpbjMyU3RhcnRBZGRyPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3dhaXRNb2RlPWRlY29kZXIuZGVjb2RlSW50OCgpO2RlY29kZXIuc2tpcCgzKTt9fWVsc2V7c3RhY2tCYXNlPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3N0YWNrTGltaXQ9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7dXNlclN0YWNrQmFzZT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTt1c2VyU3RhY2tMaW1pdD1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTtpZihoZWFkZXIudmVyc2lvbj09PTIpe3N0YXJ0QWRkcj1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTt9ZWxzZXthZmZpbml0eT1kZWNvZGVyLmRlY29kZVVJbnRlZ2VyKGhlYWRlci5pczY0KTt9CndpbjMyU3RhcnRBZGRyPWRlY29kZXIuZGVjb2RlVUludGVnZXIoaGVhZGVyLmlzNjQpO3RlYkJhc2U9ZGVjb2Rlci5kZWNvZGVVSW50ZWdlcihoZWFkZXIuaXM2NCk7c3ViUHJvY2Vzc1RhZz1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2lmKGhlYWRlci52ZXJzaW9uPT09Myl7YmFzZVByaW9yaXR5PWRlY29kZXIuZGVjb2RlVUludDgoKTtwYWdlUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVVSW50OCgpO2lvUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVVSW50OCgpO3RocmVhZEZsYWdzPWRlY29kZXIuZGVjb2RlVUludDgoKTt9fQpyZXR1cm57cHJvY2Vzc0lkLHRocmVhZElkLHN0YWNrQmFzZSxzdGFja0xpbWl0LHVzZXJTdGFja0Jhc2UsdXNlclN0YWNrTGltaXQsYWZmaW5pdHksc3RhcnRBZGRyLHdpbjMyU3RhcnRBZGRyLHRlYkJhc2Usc3ViUHJvY2Vzc1RhZyx3YWl0TW9kZSxiYXNlUHJpb3JpdHkscGFnZVByaW9yaXR5LGlvUHJpb3JpdHksdGhyZWFkRmxhZ3N9O30sZGVjb2RlQ1N3aXRjaEZpZWxkcyhoZWFkZXIsZGVjb2Rlcil7aWYoaGVhZGVyLnZlcnNpb248Mnx8aGVhZGVyLnZlcnNpb24+NCl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbXBhdGlibGUgY3N3aXRjaCBldmVudCB2ZXJzaW9uICcrCmhlYWRlci52ZXJzaW9uKycuJyk7fQpjb25zdCBuZXdUaHJlYWRJZD1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IG9sZFRocmVhZElkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7Y29uc3QgbmV3VGhyZWFkUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVJbnQ4KCk7Y29uc3Qgb2xkVGhyZWFkUHJpb3JpdHk9ZGVjb2Rlci5kZWNvZGVJbnQ4KCk7Y29uc3QgcHJldmlvdXNDU3RhdGU9ZGVjb2Rlci5kZWNvZGVVSW50OCgpO2NvbnN0IHNwYXJlQnl0ZT1kZWNvZGVyLmRlY29kZUludDgoKTtjb25zdCBvbGRUaHJlYWRXYWl0UmVhc29uPWRlY29kZXIuZGVjb2RlSW50OCgpO2NvbnN0IG9sZFRocmVhZFdhaXRNb2RlPWRlY29kZXIuZGVjb2RlSW50OCgpO2NvbnN0IG9sZFRocmVhZFN0YXRlPWRlY29kZXIuZGVjb2RlSW50OCgpO2NvbnN0IG9sZFRocmVhZFdhaXRJZGVhbFByb2Nlc3Nvcj1kZWNvZGVyLmRlY29kZUludDgoKTtjb25zdCBuZXdUaHJlYWRXYWl0VGltZT1kZWNvZGVyLmRlY29kZVVJbnQzMigpO2NvbnN0IHJlc2VydmVkPWRlY29kZXIuZGVjb2RlVUludDMyKCk7cmV0dXJue25ld1RocmVhZElkLG9sZFRocmVhZElkLG5ld1RocmVhZFByaW9yaXR5LG9sZFRocmVhZFByaW9yaXR5LHByZXZpb3VzQ1N0YXRlLHNwYXJlQnl0ZSxvbGRUaHJlYWRXYWl0UmVhc29uLG9sZFRocmVhZFdhaXRNb2RlLG9sZFRocmVhZFN0YXRlLG9sZFRocmVhZFdhaXRJZGVhbFByb2Nlc3NvcixuZXdUaHJlYWRXYWl0VGltZSxyZXNlcnZlZH07fSxkZWNvZGVTdGFydChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTt0aGlzLmltcG9ydGVyLmNyZWF0ZVRocmVhZElmTmVlZGVkKGZpZWxkcy5wcm9jZXNzSWQsZmllbGRzLnRocmVhZElkKTtyZXR1cm4gdHJ1ZTt9LGRlY29kZUVuZChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTt0aGlzLmltcG9ydGVyLnJlbW92ZVRocmVhZElmUHJlc2VudChmaWVsZHMudGhyZWFkSWQpO3JldHVybiB0cnVlO30sZGVjb2RlRENTdGFydChoZWFkZXIsZGVjb2Rlcil7Y29uc3QgZmllbGRzPXRoaXMuZGVjb2RlRmllbGRzKGhlYWRlcixkZWNvZGVyKTt0aGlzLmltcG9ydGVyLmNyZWF0ZVRocmVhZElmTmVlZGVkKGZpZWxkcy5wcm9jZXNzSWQsZmllbGRzLnRocmVhZElkKTtyZXR1cm4gdHJ1ZTt9LGRlY29kZURDRW5kKGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVGaWVsZHMoaGVhZGVyLGRlY29kZXIpO3RoaXMuaW1wb3J0ZXIucmVtb3ZlVGhyZWFkSWZQcmVzZW50KGZpZWxkcy50aHJlYWRJZCk7cmV0dXJuIHRydWU7fSxkZWNvZGVDU3dpdGNoKGhlYWRlcixkZWNvZGVyKXtjb25zdCBmaWVsZHM9dGhpcy5kZWNvZGVDU3dpdGNoRmllbGRzKGhlYWRlcixkZWNvZGVyKTtjb25zdCBjcHU9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUNwdShoZWFkZXIuY3B1KTtjb25zdCBuZXdUaHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRUaHJlYWRGcm9tV2luZG93c1RpZChmaWVsZHMubmV3VGhyZWFkSWQpO2xldCBuZXdUaHJlYWROYW1lO2lmKG5ld1RocmVhZCYmbmV3VGhyZWFkLnVzZXJGcmllbmRseU5hbWUpe25ld1RocmVhZE5hbWU9bmV3VGhyZWFkLnVzZXJGcmllbmRseU5hbWU7fWVsc2V7Y29uc3QgbmV3UHJvY2Vzc0lkPXRoaXMuaW1wb3J0ZXIuZ2V0UGlkRnJvbVdpbmRvd3NUaWQoZmllbGRzLm5ld1RocmVhZElkKTtjb25zdCBuZXdQcm9jZXNzPXRoaXMubW9kZWwuZ2V0UHJvY2VzcyhuZXdQcm9jZXNzSWQpO2xldCBuZXdQcm9jZXNzTmFtZTtpZihuZXdQcm9jZXNzKXtuZXdQcm9jZXNzTmFtZT1uZXdQcm9jZXNzLm5hbWU7fWVsc2V7bmV3UHJvY2Vzc05hbWU9J1Vua25vd24gcHJvY2Vzcyc7fQpuZXdUaHJlYWROYW1lPW5ld1Byb2Nlc3NOYW1lKycgKHRpZCAnK2ZpZWxkcy5uZXdUaHJlYWRJZCsnKSc7fQpjcHUuc3dpdGNoQWN0aXZlVGhyZWFkKGhlYWRlci50aW1lc3RhbXAse30sZmllbGRzLm5ld1RocmVhZElkLG5ld1RocmVhZE5hbWUsZmllbGRzKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoVGhyZWFkUGFyc2VyKTtyZXR1cm57VGhyZWFkUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIG1heChhLGIpe2lmKGE9PT11bmRlZmluZWQpcmV0dXJuIGI7aWYoYj09PXVuZGVmaW5lZClyZXR1cm4gYTtyZXR1cm4gTWF0aC5tYXgoYSxiKTt9CmZ1bmN0aW9uIEludGVydmFsVHJlZShiZWdpblBvc2l0aW9uQ2IsZW5kUG9zaXRpb25DYil7dGhpcy5iZWdpblBvc2l0aW9uQ2JfPWJlZ2luUG9zaXRpb25DYjt0aGlzLmVuZFBvc2l0aW9uQ2JfPWVuZFBvc2l0aW9uQ2I7dGhpcy5yb290Xz11bmRlZmluZWQ7dGhpcy5zaXplXz0wO30KSW50ZXJ2YWxUcmVlLnByb3RvdHlwZT17aW5zZXJ0KGRhdHVtKXtjb25zdCBzdGFydFBvc2l0aW9uPXRoaXMuYmVnaW5Qb3NpdGlvbkNiXyhkYXR1bSk7Y29uc3QgZW5kUG9zaXRpb249dGhpcy5lbmRQb3NpdGlvbkNiXyhkYXR1bSk7Y29uc3Qgbm9kZT1uZXcgSW50ZXJ2YWxUcmVlTm9kZShkYXR1bSxzdGFydFBvc2l0aW9uLGVuZFBvc2l0aW9uKTt0aGlzLnNpemVfKys7dGhpcy5yb290Xz10aGlzLmluc2VydE5vZGVfKHRoaXMucm9vdF8sbm9kZSk7dGhpcy5yb290Xy5jb2xvdXI9Q29sb3VyLkJMQUNLO3JldHVybiBkYXR1bTt9LGluc2VydE5vZGVfKHJvb3Qsbm9kZSl7aWYocm9vdD09PXVuZGVmaW5lZClyZXR1cm4gbm9kZTtpZihyb290LmxlZnROb2RlJiZyb290LmxlZnROb2RlLmlzUmVkJiZyb290LnJpZ2h0Tm9kZSYmcm9vdC5yaWdodE5vZGUuaXNSZWQpe3RoaXMuZmxpcE5vZGVDb2xvdXJfKHJvb3QpO30KaWYobm9kZS5rZXk8cm9vdC5rZXkpe3Jvb3QubGVmdE5vZGU9dGhpcy5pbnNlcnROb2RlXyhyb290LmxlZnROb2RlLG5vZGUpO31lbHNlIGlmKG5vZGUua2V5PT09cm9vdC5rZXkpe3Jvb3QubWVyZ2Uobm9kZSk7fWVsc2V7cm9vdC5yaWdodE5vZGU9dGhpcy5pbnNlcnROb2RlXyhyb290LnJpZ2h0Tm9kZSxub2RlKTt9CmlmKHJvb3QucmlnaHROb2RlJiZyb290LnJpZ2h0Tm9kZS5pc1JlZCYmKHJvb3QubGVmdE5vZGU9PT11bmRlZmluZWR8fCFyb290LmxlZnROb2RlLmlzUmVkKSl7cm9vdD10aGlzLnJvdGF0ZUxlZnRfKHJvb3QpO30KaWYocm9vdC5sZWZ0Tm9kZSYmcm9vdC5sZWZ0Tm9kZS5pc1JlZCYmcm9vdC5sZWZ0Tm9kZS5sZWZ0Tm9kZSYmcm9vdC5sZWZ0Tm9kZS5sZWZ0Tm9kZS5pc1JlZCl7cm9vdD10aGlzLnJvdGF0ZVJpZ2h0Xyhyb290KTt9CnJldHVybiByb290O30scm90YXRlUmlnaHRfKG5vZGUpe2NvbnN0IHNpYmxpbmc9bm9kZS5sZWZ0Tm9kZTtub2RlLmxlZnROb2RlPXNpYmxpbmcucmlnaHROb2RlO3NpYmxpbmcucmlnaHROb2RlPW5vZGU7c2libGluZy5jb2xvdXI9bm9kZS5jb2xvdXI7bm9kZS5jb2xvdXI9Q29sb3VyLlJFRDtyZXR1cm4gc2libGluZzt9LHJvdGF0ZUxlZnRfKG5vZGUpe2NvbnN0IHNpYmxpbmc9bm9kZS5yaWdodE5vZGU7bm9kZS5yaWdodE5vZGU9c2libGluZy5sZWZ0Tm9kZTtzaWJsaW5nLmxlZnROb2RlPW5vZGU7c2libGluZy5jb2xvdXI9bm9kZS5jb2xvdXI7bm9kZS5jb2xvdXI9Q29sb3VyLlJFRDtyZXR1cm4gc2libGluZzt9LGZsaXBOb2RlQ29sb3VyXyhub2RlKXtub2RlLmNvbG91cj10aGlzLmZsaXBDb2xvdXJfKG5vZGUuY29sb3VyKTtub2RlLmxlZnROb2RlLmNvbG91cj10aGlzLmZsaXBDb2xvdXJfKG5vZGUubGVmdE5vZGUuY29sb3VyKTtub2RlLnJpZ2h0Tm9kZS5jb2xvdXI9dGhpcy5mbGlwQ29sb3VyXyhub2RlLnJpZ2h0Tm9kZS5jb2xvdXIpO30sZmxpcENvbG91cl8oY29sb3VyKXtyZXR1cm4gY29sb3VyPT09Q29sb3VyLlJFRD9Db2xvdXIuQkxBQ0s6Q29sb3VyLlJFRDt9LHVwZGF0ZUhpZ2hWYWx1ZXMoKXt0aGlzLnVwZGF0ZUhpZ2hWYWx1ZXNfKHRoaXMucm9vdF8pO30sdXBkYXRlSGlnaFZhbHVlc18obm9kZSl7aWYobm9kZT09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO25vZGUubWF4SGlnaExlZnQ9dGhpcy51cGRhdGVIaWdoVmFsdWVzXyhub2RlLmxlZnROb2RlKTtub2RlLm1heEhpZ2hSaWdodD10aGlzLnVwZGF0ZUhpZ2hWYWx1ZXNfKG5vZGUucmlnaHROb2RlKTtyZXR1cm4gbWF4KG1heChub2RlLm1heEhpZ2hMZWZ0LG5vZGUuaGlnaFZhbHVlKSxub2RlLm1heEhpZ2hSaWdodCk7fSx2YWxpZGF0ZUZpbmRBcmd1bWVudHNfKHF1ZXJ5TG93LHF1ZXJ5SGlnaCl7aWYocXVlcnlMb3c9PT11bmRlZmluZWR8fHF1ZXJ5SGlnaD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdxdWVyeUxvdyBhbmQgcXVlcnlIaWdoIG11c3QgYmUgZGVmaW5lZCcpO30KaWYoKHR5cGVvZiBxdWVyeUxvdyE9PSdudW1iZXInKXx8KHR5cGVvZiBxdWVyeUhpZ2ghPT0nbnVtYmVyJykpe3Rocm93IG5ldyBFcnJvcigncXVlcnlMb3cgYW5kIHF1ZXJ5SGlnaCBtdXN0IGJlIG51bWJlcnMnKTt9fSxmaW5kSW50ZXJzZWN0aW9uKHF1ZXJ5TG93LHF1ZXJ5SGlnaCl7dGhpcy52YWxpZGF0ZUZpbmRBcmd1bWVudHNfKHF1ZXJ5TG93LHF1ZXJ5SGlnaCk7aWYodGhpcy5yb290Xz09PXVuZGVmaW5lZClyZXR1cm5bXTtjb25zdCByZXQ9W107dGhpcy5yb290Xy5hcHBlbmRJbnRlcnNlY3Rpb25zSW50b18ocmV0LHF1ZXJ5TG93LHF1ZXJ5SGlnaCk7cmV0dXJuIHJldDt9LGdldCBzaXplKCl7cmV0dXJuIHRoaXMuc2l6ZV87fSxnZXQgcm9vdCgpe3JldHVybiB0aGlzLnJvb3RfO30sZHVtcF8oKXtpZih0aGlzLnJvb3RfPT09dW5kZWZpbmVkKXJldHVybltdO3JldHVybiB0aGlzLnJvb3RfLmR1bXAoKTt9fTtjb25zdCBDb2xvdXI9e1JFRDoncmVkJyxCTEFDSzonYmxhY2snfTtmdW5jdGlvbiBJbnRlcnZhbFRyZWVOb2RlKGRhdHVtLGxvd1ZhbHVlLGhpZ2hWYWx1ZSl7dGhpcy5sb3dWYWx1ZV89bG93VmFsdWU7dGhpcy5kYXRhXz1be2RhdHVtLGhpZ2g6aGlnaFZhbHVlLGxvdzpsb3dWYWx1ZX1dO3RoaXMuY29sb3VyXz1Db2xvdXIuUkVEO3RoaXMucGFyZW50Tm9kZV89dW5kZWZpbmVkO3RoaXMubGVmdE5vZGVfPXVuZGVmaW5lZDt0aGlzLnJpZ2h0Tm9kZV89dW5kZWZpbmVkO3RoaXMubWF4SGlnaExlZnRfPXVuZGVmaW5lZDt0aGlzLm1heEhpZ2hSaWdodF89dW5kZWZpbmVkO30KSW50ZXJ2YWxUcmVlTm9kZS5wcm90b3R5cGU9e2FwcGVuZEludGVyc2VjdGlvbnNJbnRvXyhyZXQscXVlcnlMb3cscXVlcnlIaWdoKXtpZih0aGlzLmxvd1ZhbHVlXz49cXVlcnlIaWdoKXtpZighdGhpcy5sZWZ0Tm9kZV8pcmV0dXJuO3JldHVybiB0aGlzLmxlZnROb2RlXy5hcHBlbmRJbnRlcnNlY3Rpb25zSW50b18ocmV0LHF1ZXJ5TG93LHF1ZXJ5SGlnaCk7fQppZih0aGlzLm1heEhpZ2hMZWZ0Xz5xdWVyeUxvdyl7dGhpcy5sZWZ0Tm9kZV8uYXBwZW5kSW50ZXJzZWN0aW9uc0ludG9fKHJldCxxdWVyeUxvdyxxdWVyeUhpZ2gpO30KaWYodGhpcy5oaWdoVmFsdWU+cXVlcnlMb3cpe2ZvcihsZXQgaT0odGhpcy5kYXRhLmxlbmd0aC0xKTtpPj0wOy0taSl7aWYodGhpcy5kYXRhW2ldLmhpZ2g8cXVlcnlMb3cpYnJlYWs7cmV0LnB1c2godGhpcy5kYXRhW2ldLmRhdHVtKTt9fQppZih0aGlzLnJpZ2h0Tm9kZV8pe3RoaXMucmlnaHROb2RlXy5hcHBlbmRJbnRlcnNlY3Rpb25zSW50b18ocmV0LHF1ZXJ5TG93LHF1ZXJ5SGlnaCk7fX0sZ2V0IGNvbG91cigpe3JldHVybiB0aGlzLmNvbG91cl87fSxzZXQgY29sb3VyKGNvbG91cil7dGhpcy5jb2xvdXJfPWNvbG91cjt9LGdldCBrZXkoKXtyZXR1cm4gdGhpcy5sb3dWYWx1ZV87fSxnZXQgbG93VmFsdWUoKXtyZXR1cm4gdGhpcy5sb3dWYWx1ZV87fSxnZXQgaGlnaFZhbHVlKCl7cmV0dXJuIHRoaXMuZGF0YV9bdGhpcy5kYXRhXy5sZW5ndGgtMV0uaGlnaDt9LHNldCBsZWZ0Tm9kZShsZWZ0KXt0aGlzLmxlZnROb2RlXz1sZWZ0O30sZ2V0IGxlZnROb2RlKCl7cmV0dXJuIHRoaXMubGVmdE5vZGVfO30sZ2V0IGhhc0xlZnROb2RlKCl7cmV0dXJuIHRoaXMubGVmdE5vZGVfIT09dW5kZWZpbmVkO30sc2V0IHJpZ2h0Tm9kZShyaWdodCl7dGhpcy5yaWdodE5vZGVfPXJpZ2h0O30sZ2V0IHJpZ2h0Tm9kZSgpe3JldHVybiB0aGlzLnJpZ2h0Tm9kZV87fSxnZXQgaGFzUmlnaHROb2RlKCl7cmV0dXJuIHRoaXMucmlnaHROb2RlXyE9PXVuZGVmaW5lZDt9LHNldCBwYXJlbnROb2RlKHBhcmVudCl7dGhpcy5wYXJlbnROb2RlXz1wYXJlbnQ7fSxnZXQgcGFyZW50Tm9kZSgpe3JldHVybiB0aGlzLnBhcmVudE5vZGVfO30sZ2V0IGlzUm9vdE5vZGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlXz09PXVuZGVmaW5lZDt9LHNldCBtYXhIaWdoTGVmdChoaWdoKXt0aGlzLm1heEhpZ2hMZWZ0Xz1oaWdoO30sZ2V0IG1heEhpZ2hMZWZ0KCl7cmV0dXJuIHRoaXMubWF4SGlnaExlZnRfO30sc2V0IG1heEhpZ2hSaWdodChoaWdoKXt0aGlzLm1heEhpZ2hSaWdodF89aGlnaDt9LGdldCBtYXhIaWdoUmlnaHQoKXtyZXR1cm4gdGhpcy5tYXhIaWdoUmlnaHRfO30sZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9LGdldCBpc1JlZCgpe3JldHVybiB0aGlzLmNvbG91cl89PT1Db2xvdXIuUkVEO30sbWVyZ2Uobm9kZSl7Zm9yKGxldCBpPTA7aTxub2RlLmRhdGEubGVuZ3RoO2krKyl7dGhpcy5kYXRhXy5wdXNoKG5vZGUuZGF0YVtpXSk7fQp0aGlzLmRhdGFfLnNvcnQoZnVuY3Rpb24oYSxiKXtyZXR1cm4gYS5oaWdoLWIuaGlnaDt9KTt9LGR1bXAoKXtjb25zdCByZXQ9e307aWYodGhpcy5sZWZ0Tm9kZV8pe3JldC5sZWZ0PXRoaXMubGVmdE5vZGVfLmR1bXAoKTt9CnJldC5kYXRhPXRoaXMuZGF0YV8ubWFwKGZ1bmN0aW9uKGQpe3JldHVybltkLmxvdyxkLmhpZ2hdO30pO2lmKHRoaXMucmlnaHROb2RlXyl7cmV0LnJpZ2h0PXRoaXMucmlnaHROb2RlXy5kdW1wKCk7fQpyZXR1cm4gcmV0O319O3JldHVybntJbnRlcnZhbFRyZWUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmIubWF0aCcsZnVuY3Rpb24oKXtjb25zdCB0bXBWZWMycz1bXTtmb3IobGV0IGk9MDtpPDg7aSsrKXt0bXBWZWMyc1tpXT12ZWMyLmNyZWF0ZSgpO30KY29uc3QgdG1wVmVjMmE9dmVjNC5jcmVhdGUoKTtjb25zdCB0bXBWZWM0YT12ZWM0LmNyZWF0ZSgpO2NvbnN0IHRtcFZlYzRiPXZlYzQuY3JlYXRlKCk7Y29uc3QgdG1wTWF0ND1tYXQ0LmNyZWF0ZSgpO2NvbnN0IHRtcE1hdDRiPW1hdDQuY3JlYXRlKCk7Y29uc3QgcDAwPXZlYzIuY3JlYXRlWFkoMCwwKTtjb25zdCBwMTA9dmVjMi5jcmVhdGVYWSgxLDApO2NvbnN0IHAwMT12ZWMyLmNyZWF0ZVhZKDAsMSk7Y29uc3QgcDExPXZlYzIuY3JlYXRlWFkoMSwxKTtjb25zdCBsZXJwaW5nVmVjQT12ZWMyLmNyZWF0ZSgpO2NvbnN0IGxlcnBpbmdWZWNCPXZlYzIuY3JlYXRlKCk7ZnVuY3Rpb24gbGVycFZlYzIob3V0LGEsYixhbXQpe3ZlYzIuc2NhbGUobGVycGluZ1ZlY0EsYSxhbXQpO3ZlYzIuc2NhbGUobGVycGluZ1ZlY0IsYiwxLWFtdCk7dmVjMi5hZGQob3V0LGxlcnBpbmdWZWNBLGxlcnBpbmdWZWNCKTt2ZWMyLm5vcm1hbGl6ZShvdXQsb3V0KTtyZXR1cm4gb3V0O30KZnVuY3Rpb24gUXVhZCgpe3RoaXMucDE9dmVjMi5jcmVhdGUoKTt0aGlzLnAyPXZlYzIuY3JlYXRlKCk7dGhpcy5wMz12ZWMyLmNyZWF0ZSgpO3RoaXMucDQ9dmVjMi5jcmVhdGUoKTt9ClF1YWQuZnJvbVhZV0g9ZnVuY3Rpb24oeCx5LHcsaCl7Y29uc3QgcT1uZXcgUXVhZCgpO3ZlYzIuc2V0KHEucDEseCx5KTt2ZWMyLnNldChxLnAyLHgrdyx5KTt2ZWMyLnNldChxLnAzLHgrdyx5K2gpO3ZlYzIuc2V0KHEucDQseCx5K2gpO3JldHVybiBxO307UXVhZC5mcm9tUmVjdD1mdW5jdGlvbihyKXtyZXR1cm4gbmV3IFF1YWQuZnJvbVhZV0goci54LHIueSxyLndpZHRoLHIuaGVpZ2h0KTt9O1F1YWQuZnJvbTRWZWNzPWZ1bmN0aW9uKHAxLHAyLHAzLHA0KXtjb25zdCBxPW5ldyBRdWFkKCk7dmVjMi5zZXQocS5wMSxwMVswXSxwMVsxXSk7dmVjMi5zZXQocS5wMixwMlswXSxwMlsxXSk7dmVjMi5zZXQocS5wMyxwM1swXSxwM1sxXSk7dmVjMi5zZXQocS5wNCxwNFswXSxwNFsxXSk7cmV0dXJuIHE7fTtRdWFkLmZyb204QXJyYXk9ZnVuY3Rpb24oYXJyKXtpZihhcnIubGVuZ3RoIT09OCl7dGhyb3cgbmV3IEVycm9yKCdBcnJheSBtdXN0IGJlIDggbG9uZycpO30KY29uc3QgcT1uZXcgUXVhZCgpO3EucDFbMF09YXJyWzBdO3EucDFbMV09YXJyWzFdO3EucDJbMF09YXJyWzJdO3EucDJbMV09YXJyWzNdO3EucDNbMF09YXJyWzRdO3EucDNbMV09YXJyWzVdO3EucDRbMF09YXJyWzZdO3EucDRbMV09YXJyWzddO3JldHVybiBxO307UXVhZC5wcm90b3R5cGU9e3BvaW50SW5zaWRlKHBvaW50KXtyZXR1cm4gcG9pbnRJbkltcGxpY2l0UXVhZChwb2ludCx0aGlzLnAxLHRoaXMucDIsdGhpcy5wMyx0aGlzLnA0KTt9LGJvdW5kaW5nUmVjdCgpe2NvbnN0IHgwPU1hdGgubWluKHRoaXMucDFbMF0sdGhpcy5wMlswXSx0aGlzLnAzWzBdLHRoaXMucDRbMF0pO2NvbnN0IHkwPU1hdGgubWluKHRoaXMucDFbMV0sdGhpcy5wMlsxXSx0aGlzLnAzWzFdLHRoaXMucDRbMV0pO2NvbnN0IHgxPU1hdGgubWF4KHRoaXMucDFbMF0sdGhpcy5wMlswXSx0aGlzLnAzWzBdLHRoaXMucDRbMF0pO2NvbnN0IHkxPU1hdGgubWF4KHRoaXMucDFbMV0sdGhpcy5wMlsxXSx0aGlzLnAzWzFdLHRoaXMucDRbMV0pO3JldHVybiBuZXcgdHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goeDAseTAseDEteDAseTEteTApO30sY2xvbmUoKXtjb25zdCBxPW5ldyBRdWFkKCk7dmVjMi5jb3B5KHEucDEsdGhpcy5wMSk7dmVjMi5jb3B5KHEucDIsdGhpcy5wMik7dmVjMi5jb3B5KHEucDMsdGhpcy5wMyk7dmVjMi5jb3B5KHEucDQsdGhpcy5wNCk7cmV0dXJuIHE7fSxzY2FsZShzKXtjb25zdCBxPW5ldyBRdWFkKCk7dGhpcy5zY2FsZUZhc3QocSxzKTtyZXR1cm4gcTt9LHNjYWxlRmFzdChkc3RRdWFkLHMpe3ZlYzIuY29weShkc3RRdWFkLnAxLHRoaXMucDEscyk7dmVjMi5jb3B5KGRzdFF1YWQucDIsdGhpcy5wMixzKTt2ZWMyLmNvcHkoZHN0UXVhZC5wMyx0aGlzLnAzLHMpO3ZlYzIuY29weShkc3RRdWFkLnAzLHRoaXMucDMscyk7fSxpc1JlY3RhbmdsZSgpe2NvbnN0IGJvdW5kcz10aGlzLmJvdW5kaW5nUmVjdCgpO3JldHVybihib3VuZHMueD09PXRoaXMucDFbMF0mJmJvdW5kcy55PT09dGhpcy5wMVsxXSYmYm91bmRzLndpZHRoPT09dGhpcy5wMlswXS10aGlzLnAxWzBdJiZib3VuZHMueT09PXRoaXMucDJbMV0mJmJvdW5kcy53aWR0aD09PXRoaXMucDNbMF0tdGhpcy5wMVswXSYmYm91bmRzLmhlaWdodD09PXRoaXMucDNbMV0tdGhpcy5wMlsxXSYmYm91bmRzLng9PT10aGlzLnA0WzBdJiZib3VuZHMuaGVpZ2h0PT09dGhpcy5wNFsxXS10aGlzLnAyWzFdKTt9LHByb2plY3RVbml0UmVjdChyZWN0KXtjb25zdCBxPW5ldyBRdWFkKCk7dGhpcy5wcm9qZWN0VW5pdFJlY3RGYXN0KHEscmVjdCk7cmV0dXJuIHE7fSxwcm9qZWN0VW5pdFJlY3RGYXN0KGRzdFF1YWQscmVjdCl7Y29uc3QgdjEyPXRtcFZlYzJzWzBdO2NvbnN0IHYxND10bXBWZWMyc1sxXTtjb25zdCB2MjM9dG1wVmVjMnNbMl07Y29uc3QgdjQzPXRtcFZlYzJzWzNdO3ZlYzIuc3ViKHYxMix0aGlzLnAyLHRoaXMucDEpO2NvbnN0IGwxMj12ZWMyLmxlbmd0aCh2MTIpO3ZlYzIuc2NhbGUodjEyLHYxMiwxL2wxMik7dmVjMi5zdWIodjE0LHRoaXMucDQsdGhpcy5wMSk7Y29uc3QgbDE0PXZlYzIubGVuZ3RoKHYxNCk7dmVjMi5zY2FsZSh2MTQsdjE0LDEvbDE0KTt2ZWMyLnN1Yih2MjMsdGhpcy5wMyx0aGlzLnAyKTtjb25zdCBsMjM9dmVjMi5sZW5ndGgodjIzKTt2ZWMyLnNjYWxlKHYyMyx2MjMsMS9sMjMpO3ZlYzIuc3ViKHY0Myx0aGlzLnAzLHRoaXMucDQpO2NvbnN0IGw0Mz12ZWMyLmxlbmd0aCh2NDMpO3ZlYzIuc2NhbGUodjQzLHY0MywxL2w0Myk7Y29uc3QgYjEyPXRtcFZlYzJzWzBdO2NvbnN0IGIxND10bXBWZWMyc1sxXTtjb25zdCBiMjM9dG1wVmVjMnNbMl07Y29uc3QgYjQzPXRtcFZlYzJzWzNdO2xlcnBWZWMyKGIxMix2MTIsdjQzLHJlY3QueSk7bGVycFZlYzIoYjQzLHYxMix2NDMsMS1yZWN0LmJvdHRvbSk7bGVycFZlYzIoYjE0LHYxNCx2MjMscmVjdC54KTtsZXJwVmVjMihiMjMsdjE0LHYyMywxLXJlY3QucmlnaHQpO3ZlYzIuYWRkVHdvU2NhbGVkVW5pdFZlY3RvcnModG1wVmVjMmEsYjEyLGwxMipyZWN0LngsYjE0LGwxNCpyZWN0LnkpO3ZlYzIuYWRkKGRzdFF1YWQucDEsdGhpcy5wMSx0bXBWZWMyYSk7dmVjMi5hZGRUd29TY2FsZWRVbml0VmVjdG9ycyh0bXBWZWMyYSxiMTIsbDEyKi0oMS4wLXJlY3QucmlnaHQpLGIyMyxsMjMqcmVjdC55KTt2ZWMyLmFkZChkc3RRdWFkLnAyLHRoaXMucDIsdG1wVmVjMmEpO3ZlYzIuYWRkVHdvU2NhbGVkVW5pdFZlY3RvcnModG1wVmVjMmEsYjQzLGw0MyotKDEuMC1yZWN0LnJpZ2h0KSxiMjMsbDIzKi0oMS4wLXJlY3QuYm90dG9tKSk7dmVjMi5hZGQoZHN0UXVhZC5wMyx0aGlzLnAzLHRtcFZlYzJhKTt2ZWMyLmFkZFR3b1NjYWxlZFVuaXRWZWN0b3JzKHRtcFZlYzJhLGI0MyxsNDMqcmVjdC5sZWZ0LGIxNCxsMTQqLSgxLjAtcmVjdC5ib3R0b20pKTt2ZWMyLmFkZChkc3RRdWFkLnA0LHRoaXMucDQsdG1wVmVjMmEpO30sdG9TdHJpbmcoKXtyZXR1cm4nUXVhZCgnKwp2ZWMyLnRvU3RyaW5nKHRoaXMucDEpKycsICcrCnZlYzIudG9TdHJpbmcodGhpcy5wMikrJywgJysKdmVjMi50b1N0cmluZyh0aGlzLnAzKSsnLCAnKwp2ZWMyLnRvU3RyaW5nKHRoaXMucDQpKycpJzt9fTtmdW5jdGlvbiBzaWduKHAxLHAyLHAzKXtyZXR1cm4ocDFbMF0tcDNbMF0pKihwMlsxXS1wM1sxXSktCihwMlswXS1wM1swXSkqKHAxWzFdLXAzWzFdKTt9CmZ1bmN0aW9uIHBvaW50SW5UcmlhbmdsZTIocHQscDEscDIscDMpe2NvbnN0IGIxPXNpZ24ocHQscDEscDIpPDAuMDtjb25zdCBiMj1zaWduKHB0LHAyLHAzKTwwLjA7Y29uc3QgYjM9c2lnbihwdCxwMyxwMSk8MC4wO3JldHVybigoYjE9PT1iMikmJihiMj09PWIzKSk7fQpmdW5jdGlvbiBwb2ludEluSW1wbGljaXRRdWFkKHBvaW50LHAxLHAyLHAzLHA0KXtyZXR1cm4gcG9pbnRJblRyaWFuZ2xlMihwb2ludCxwMSxwMixwMyl8fHBvaW50SW5UcmlhbmdsZTIocG9pbnQscDEscDMscDQpO30KcmV0dXJue3BvaW50SW5UcmlhbmdsZTIscG9pbnRJbkltcGxpY2l0UXVhZCxRdWFkLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IEVTVElNQVRFRF9JRExFX1BFUklPRF9MRU5HVEhfTUlMTElTRUNPTkRTPTEwO2NvbnN0IFJFUVVFU1RfSURMRV9DQUxMQkFDS19USU1FT1VUX01JTExJU0VDT05EUz0xMDA7Y29uc3QgcmVjb3JkUkFGU3RhY2tzPWZhbHNlO2xldCBwZW5kaW5nUHJlQUZzPVtdO2xldCBwZW5kaW5nUkFGcz1bXTtjb25zdCBwZW5kaW5nSWRsZUNhbGxiYWNrcz1bXTtsZXQgY3VycmVudFJBRkRpc3BhdGNoTGlzdD11bmRlZmluZWQ7bGV0IHJhZlNjaGVkdWxlZD1mYWxzZTtsZXQgaWRsZVdvcmtTY2hlZHVsZWQ9ZmFsc2U7ZnVuY3Rpb24gc2NoZWR1bGVSQUYoKXtpZihyYWZTY2hlZHVsZWQpcmV0dXJuO3JhZlNjaGVkdWxlZD10cnVlO2lmKHRyLmlzSGVhZGxlc3Mpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXtwcm9jZXNzUmVxdWVzdHMoZmFsc2UsMCk7fSxmdW5jdGlvbihlKXt0aHJvdyBlO30pO31lbHNle2lmKHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUpe3dpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocHJvY2Vzc1JlcXVlc3RzLmJpbmQodGhpcyxmYWxzZSkpO31lbHNle2NvbnN0IGRlbHRhPURhdGUubm93KCktd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO3dpbmRvdy53ZWJraXRSZXF1ZXN0QW5pbWF0aW9uRnJhbWUoZnVuY3Rpb24oZG9tVGltZVN0YW1wKXtwcm9jZXNzUmVxdWVzdHMoZmFsc2UsZG9tVGltZVN0YW1wLWRlbHRhKTt9KTt9fX0KZnVuY3Rpb24gbmF0aXZlUmVxdWVzdElkbGVDYWxsYmFja1N1cHBvcnRlZCgpe3JldHVybiF0ci5pc0hlYWRsZXNzJiZ3aW5kb3cucmVxdWVzdElkbGVDYWxsYmFjazt9CmZ1bmN0aW9uIHNjaGVkdWxlSWRsZVdvcmsoKXtpZihpZGxlV29ya1NjaGVkdWxlZClyZXR1cm47aWYoIW5hdGl2ZVJlcXVlc3RJZGxlQ2FsbGJhY2tTdXBwb3J0ZWQoKSl7c2NoZWR1bGVSQUYoKTtyZXR1cm47fQppZGxlV29ya1NjaGVkdWxlZD10cnVlO3dpbmRvdy5yZXF1ZXN0SWRsZUNhbGxiYWNrKGZ1bmN0aW9uKGRlYWRsaW5lLGRpZFRpbWVvdXQpe3Byb2Nlc3NJZGxlV29yayhmYWxzZSxkZWFkbGluZSk7fSx7dGltZW91dDpSRVFVRVNUX0lETEVfQ0FMTEJBQ0tfVElNRU9VVF9NSUxMSVNFQ09ORFN9KTt9CmZ1bmN0aW9uIG9uQW5pbWF0aW9uRnJhbWVFcnJvcihlLG9wdF9zdGFjayl7Y29uc29sZS5sb2coZS5zdGFjayk7aWYodHIuaXNIZWFkbGVzcyl0aHJvdyBlO2lmKG9wdF9zdGFjayljb25zb2xlLmxvZyhvcHRfc3RhY2spO2lmKGUubWVzc2FnZSl7Y29uc29sZS5lcnJvcihlLm1lc3NhZ2UsZS5zdGFjayk7fWVsc2V7Y29uc29sZS5lcnJvcihlKTt9fQpmdW5jdGlvbiBydW5UYXNrKHRhc2ssZnJhbWVCZWdpblRpbWUpe3RyeXt0YXNrLmNhbGxiYWNrLmNhbGwodGFzay5jb250ZXh0LGZyYW1lQmVnaW5UaW1lKTt9Y2F0Y2goZSl7dHIuYi5vbkFuaW1hdGlvbkZyYW1lRXJyb3IoZSx0YXNrLnN0YWNrKTt9fQpmdW5jdGlvbiBwcm9jZXNzUmVxdWVzdHMoZm9yY2VBbGxUYXNrc1RvUnVuLGZyYW1lQmVnaW5UaW1lKXtyYWZTY2hlZHVsZWQ9ZmFsc2U7Y29uc3QgY3VycmVudFByZUFGcz1wZW5kaW5nUHJlQUZzO2N1cnJlbnRSQUZEaXNwYXRjaExpc3Q9cGVuZGluZ1JBRnM7cGVuZGluZ1ByZUFGcz1bXTtwZW5kaW5nUkFGcz1bXTtjb25zdCBoYXNSQUZUYXNrcz1jdXJyZW50UHJlQUZzLmxlbmd0aHx8Y3VycmVudFJBRkRpc3BhdGNoTGlzdC5sZW5ndGg7Zm9yKGxldCBpPTA7aTxjdXJyZW50UHJlQUZzLmxlbmd0aDtpKyspe3J1blRhc2soY3VycmVudFByZUFGc1tpXSxmcmFtZUJlZ2luVGltZSk7fQp3aGlsZShjdXJyZW50UkFGRGlzcGF0Y2hMaXN0Lmxlbmd0aD4wKXtydW5UYXNrKGN1cnJlbnRSQUZEaXNwYXRjaExpc3Quc2hpZnQoKSxmcmFtZUJlZ2luVGltZSk7fQpjdXJyZW50UkFGRGlzcGF0Y2hMaXN0PXVuZGVmaW5lZDtpZigoIWhhc1JBRlRhc2tzJiYhbmF0aXZlUmVxdWVzdElkbGVDYWxsYmFja1N1cHBvcnRlZCgpKXx8Zm9yY2VBbGxUYXNrc1RvUnVuKXtjb25zdCByYWZDb21wbGV0aW9uRGVhZGxpbmU9ZnJhbWVCZWdpblRpbWUrRVNUSU1BVEVEX0lETEVfUEVSSU9EX0xFTkdUSF9NSUxMSVNFQ09ORFM7cHJvY2Vzc0lkbGVXb3JrKGZvcmNlQWxsVGFza3NUb1J1bix7dGltZVJlbWFpbmluZygpe3JldHVybiByYWZDb21wbGV0aW9uRGVhZGxpbmUtd2luZG93LnBlcmZvcm1hbmNlLm5vdygpO319KTt9CmlmKHBlbmRpbmdJZGxlQ2FsbGJhY2tzLmxlbmd0aD4wKXNjaGVkdWxlSWRsZVdvcmsoKTt9CmZ1bmN0aW9uIHByb2Nlc3NJZGxlV29yayhmb3JjZUFsbFRhc2tzVG9SdW4sZGVhZGxpbmUpe2lkbGVXb3JrU2NoZWR1bGVkPWZhbHNlO3doaWxlKHBlbmRpbmdJZGxlQ2FsbGJhY2tzLmxlbmd0aD4wKXtydW5UYXNrKHBlbmRpbmdJZGxlQ2FsbGJhY2tzLnNoaWZ0KCkpO2lmKCFmb3JjZUFsbFRhc2tzVG9SdW4mJih0ci5pc0hlYWRsZXNzfHxkZWFkbGluZS50aW1lUmVtYWluaW5nKCk8PTApKXticmVhazt9fQppZihwZW5kaW5nSWRsZUNhbGxiYWNrcy5sZW5ndGg+MClzY2hlZHVsZUlkbGVXb3JrKCk7fQpmdW5jdGlvbiBnZXRTdGFja18oKXtpZighcmVjb3JkUkFGU3RhY2tzKXJldHVybicnO2NvbnN0IHN0YWNrTGluZXM9dHIuYi5zdGFja1RyYWNlKCk7c3RhY2tMaW5lcy5zaGlmdCgpO3JldHVybiBzdGFja0xpbmVzLmpvaW4oJ1xuJyk7fQpmdW5jdGlvbiByZXF1ZXN0UHJlQW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssb3B0X3RoaXMpe3BlbmRpbmdQcmVBRnMucHVzaCh7Y2FsbGJhY2ssY29udGV4dDpvcHRfdGhpc3x8Z2xvYmFsLHN0YWNrOmdldFN0YWNrXygpfSk7c2NoZWR1bGVSQUYoKTt9CmZ1bmN0aW9uIHJlcXVlc3RBbmltYXRpb25GcmFtZUluVGhpc0ZyYW1lSWZQb3NzaWJsZShjYWxsYmFjayxvcHRfdGhpcyl7aWYoIWN1cnJlbnRSQUZEaXNwYXRjaExpc3Qpe3JlcXVlc3RBbmltYXRpb25GcmFtZShjYWxsYmFjayxvcHRfdGhpcyk7cmV0dXJuO30KY3VycmVudFJBRkRpc3BhdGNoTGlzdC5wdXNoKHtjYWxsYmFjayxjb250ZXh0Om9wdF90aGlzfHxnbG9iYWwsc3RhY2s6Z2V0U3RhY2tfKCl9KTtyZXR1cm47fQpmdW5jdGlvbiByZXF1ZXN0QW5pbWF0aW9uRnJhbWUoY2FsbGJhY2ssb3B0X3RoaXMpe3BlbmRpbmdSQUZzLnB1c2goe2NhbGxiYWNrLGNvbnRleHQ6b3B0X3RoaXN8fGdsb2JhbCxzdGFjazpnZXRTdGFja18oKX0pO3NjaGVkdWxlUkFGKCk7fQpmdW5jdGlvbiBhbmltYXRpb25GcmFtZSgpe3JldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlPT5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUocmVzb2x2ZSkpO30KZnVuY3Rpb24gcmVxdWVzdElkbGVDYWxsYmFjayhjYWxsYmFjayxvcHRfdGhpcyl7cGVuZGluZ0lkbGVDYWxsYmFja3MucHVzaCh7Y2FsbGJhY2ssY29udGV4dDpvcHRfdGhpc3x8Z2xvYmFsLHN0YWNrOmdldFN0YWNrXygpfSk7c2NoZWR1bGVJZGxlV29yaygpO30KZnVuY3Rpb24gZm9yY2VQZW5kaW5nUkFGVGFza3NUb1J1bihmcmFtZUJlZ2luVGltZSl7aWYoIXJhZlNjaGVkdWxlZClyZXR1cm47cHJvY2Vzc1JlcXVlc3RzKGZhbHNlLGZyYW1lQmVnaW5UaW1lKTt9CmZ1bmN0aW9uIGZvcmNlQWxsUGVuZGluZ1Rhc2tzVG9SdW5Gb3JUZXN0KCl7aWYoIXJhZlNjaGVkdWxlZCYmIWlkbGVXb3JrU2NoZWR1bGVkKXJldHVybjtwcm9jZXNzUmVxdWVzdHModHJ1ZSwwKTt9CmZ1bmN0aW9uIHRpbWVvdXQobXMpe3JldHVybiBuZXcgUHJvbWlzZShyZXNvbHZlPT53aW5kb3cuc2V0VGltZW91dChyZXNvbHZlLG1zKSk7fQpmdW5jdGlvbiBpZGxlKCl7cmV0dXJuIG5ldyBQcm9taXNlKHJlc29sdmU9PnJlcXVlc3RJZGxlQ2FsbGJhY2socmVzb2x2ZSkpO30KcmV0dXJue2FuaW1hdGlvbkZyYW1lLGZvcmNlQWxsUGVuZGluZ1Rhc2tzVG9SdW5Gb3JUZXN0LGZvcmNlUGVuZGluZ1JBRlRhc2tzVG9SdW4saWRsZSxvbkFuaW1hdGlvbkZyYW1lRXJyb3IscmVxdWVzdEFuaW1hdGlvbkZyYW1lLHJlcXVlc3RBbmltYXRpb25GcmFtZUluVGhpc0ZyYW1lSWZQb3NzaWJsZSxyZXF1ZXN0SWRsZUNhbGxiYWNrLHJlcXVlc3RQcmVBbmltYXRpb25GcmFtZSx0aW1lb3V0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIE1hcmt7Y29uc3RydWN0b3IoZ3JvdXBOYW1lLGZ1bmN0aW9uTmFtZSxvcHRfdGltZXN0YW1wKXtpZih0ci5pc0hlYWRsZXNzKXJldHVybjt0aGlzLmdyb3VwTmFtZV89Z3JvdXBOYW1lO3RoaXMuZnVuY3Rpb25OYW1lXz1mdW5jdGlvbk5hbWU7Y29uc3QgZ3VpZD10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt0aGlzLm1lYXN1cmVOYW1lXz1gJHtncm91cE5hbWV9ICR7ZnVuY3Rpb25OYW1lfWA7aWYob3B0X3RpbWVzdGFtcCl7dGhpcy5zdGFydE1hcmtfPXtzdGFydFRpbWU6b3B0X3RpbWVzdGFtcH07fWVsc2V7dGhpcy5zdGFydE1hcmtOYW1lXz1gJHt0aGlzLm1lYXN1cmVOYW1lfSAke2d1aWR9IHN0YXJ0YDt9CnRoaXMuZW5kTWFya189dW5kZWZpbmVkO3RoaXMuZW5kTWFya05hbWVfPWAke3RoaXMubWVhc3VyZU5hbWV9ICR7Z3VpZH0gZW5kYDt3aW5kb3cucGVyZm9ybWFuY2UubWFyayh0aGlzLnN0YXJ0TWFya05hbWVfKTt9CmdldCBncm91cE5hbWUoKXtyZXR1cm4gdGhpcy5ncm91cE5hbWVfO30KZ2V0IGZ1bmN0aW9uTmFtZSgpe3JldHVybiB0aGlzLmZ1bmN0aW9uTmFtZV87fQpnZXQgbWVhc3VyZU5hbWUoKXtyZXR1cm4gdGhpcy5tZWFzdXJlTmFtZV87fQpnZXQgc3RhcnRNYXJrKCl7cmV0dXJuIHRoaXMuc3RhcnRNYXJrX3x8dHIuYi5nZXRPbmx5RWxlbWVudCh3aW5kb3cucGVyZm9ybWFuY2UuZ2V0RW50cmllc0J5TmFtZSh0aGlzLnN0YXJ0TWFya05hbWVfKSk7fQpnZXQgZW5kTWFyaygpe3JldHVybiB0aGlzLmVuZE1hcmtffHx0ci5iLmdldE9ubHlFbGVtZW50KHdpbmRvdy5wZXJmb3JtYW5jZS5nZXRFbnRyaWVzQnlOYW1lKHRoaXMuZW5kTWFya05hbWVfKSk7fQpnZXQgZHVyYXRpb25Ncygpe3JldHVybiB0aGlzLmVuZE1hcmsuc3RhcnRUaW1lLXRoaXMuc3RhcnRNYXJrLnN0YXJ0VGltZTt9CmVuZChvcHRfdGltZXN0YW1wKXtpZih0ci5pc0hlYWRsZXNzKXJldHVybjtpZihvcHRfdGltZXN0YW1wKXt0aGlzLmVuZE1hcmtfPXtzdGFydFRpbWU6b3B0X3RpbWVzdGFtcH07fWVsc2V7d2luZG93LnBlcmZvcm1hbmNlLm1hcmsodGhpcy5lbmRNYXJrTmFtZV8pO30KaWYoIXRoaXMuc3RhcnRNYXJrXyYmIXRoaXMuZW5kTWFya18pe3dpbmRvdy5wZXJmb3JtYW5jZS5tZWFzdXJlKHRoaXMubWVhc3VyZU5hbWVfLHRoaXMuc3RhcnRNYXJrTmFtZV8sdGhpcy5lbmRNYXJrTmFtZV8pO31lbHNlIGlmKFRpbWluZy5sb2dWb2lkTWFya3MmJiEod2luZG93LmdhIGluc3RhbmNlb2YgRnVuY3Rpb24pKXtjb25zb2xlLmxvZygndm9pZCBtYXJrJyx0aGlzLmdyb3VwTmFtZSx0aGlzLmZ1bmN0aW9uTmFtZSx0aGlzLmR1cmF0aW9uTXMpO30KaWYoISh3aW5kb3cuZ2EgaW5zdGFuY2VvZiBGdW5jdGlvbikpcmV0dXJuO2dhKCdzZW5kJyx7aGl0VHlwZTonZXZlbnQnLGV2ZW50Q2F0ZWdvcnk6dGhpcy5ncm91cE5hbWUsZXZlbnRBY3Rpb246dGhpcy5mdW5jdGlvbk5hbWUsZXZlbnRWYWx1ZTp0aGlzLmR1cmF0aW9uTXMsfSk7fX0KY2xhc3MgVGltaW5ne3N0YXRpYyBtYXJrKGdyb3VwTmFtZSxmdW5jdGlvbk5hbWUsb3B0X3RpbWVzdGFtcCl7cmV0dXJuIG5ldyBNYXJrKGdyb3VwTmFtZSxmdW5jdGlvbk5hbWUsb3B0X3RpbWVzdGFtcCk7fQpzdGF0aWMgaW5zdGFudChncm91cE5hbWUsZnVuY3Rpb25OYW1lLG9wdF92YWx1ZSl7Y29uc3QgdmFsdWVTdHJpbmc9b3B0X3ZhbHVlPT09dW5kZWZpbmVkPycnOicgJytvcHRfdmFsdWU7aWYoY29uc29sZSYmY29uc29sZS50aW1lU3RhbXApe2NvbnNvbGUudGltZVN0YW1wKGAke2dyb3VwTmFtZX0gJHtmdW5jdGlvbk5hbWV9JHt2YWx1ZVN0cmluZ31gKTt9CmlmKHdpbmRvdyYmd2luZG93LmdhIGluc3RhbmNlb2YgRnVuY3Rpb24pe2dhKCdzZW5kJyx7aGl0VHlwZTonZXZlbnQnLGV2ZW50Q2F0ZWdvcnk6Z3JvdXBOYW1lLGV2ZW50QWN0aW9uOmZ1bmN0aW9uTmFtZSxldmVudFZhbHVlOm9wdF92YWx1ZSx9KTt9fQpzdGF0aWMgZ2V0Q3VycmVudFRpbWVNcygpe3RyeXtyZXR1cm4gcGVyZm9ybWFuY2Uubm93KCk7fWNhdGNoKGVycm9yKXt9CnJldHVybiAwO319ClRpbWluZy5sb2dWb2lkTWFya3M9ZmFsc2U7cmV0dXJue1RpbWluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjb25zdCBUaW1pbmc9dHIuYi5UaW1pbmc7ZnVuY3Rpb24gVGFzayhydW5DYix0aGlzQXJnKXtpZihydW5DYiE9PXVuZGVmaW5lZCYmdGhpc0FyZz09PXVuZGVmaW5lZCYmcnVuQ2IucHJvdG90eXBlIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0FsbW9zdCBjZXJ0YWlubHkgeW91IG1lYW50IHRvIHBhc3MgYSBib3VuZCBjYWxsYmFjayAnKydvciB0aGlzQXJnLicpO30KdGhpcy5ydW5DYl89cnVuQ2I7dGhpcy50aGlzQXJnXz10aGlzQXJnO3RoaXMuYWZ0ZXJUYXNrXz11bmRlZmluZWQ7dGhpcy5zdWJUYXNrc189W107dGhpcy51cGRhdGVzVWlfPWZhbHNlO30KVGFzay5wcm90b3R5cGU9e2dldCBuYW1lKCl7cmV0dXJuIHRoaXMucnVuQ2JfLm5hbWU7fSxzZXQgdXBkYXRlc1VpKHZhbHVlKXt0aGlzLnVwZGF0ZXNVaV89dmFsdWU7fSxzdWJUYXNrKGNiLHRoaXNBcmcpe2lmKGNiIGluc3RhbmNlb2YgVGFzayl7dGhpcy5zdWJUYXNrc18ucHVzaChjYik7fWVsc2V7dGhpcy5zdWJUYXNrc18ucHVzaChuZXcgVGFzayhjYix0aGlzQXJnKSk7fQpyZXR1cm4gdGhpcy5zdWJUYXNrc19bdGhpcy5zdWJUYXNrc18ubGVuZ3RoLTFdO30scnVuKCl7aWYodGhpcy5ydW5DYl8hPT11bmRlZmluZWQpdGhpcy5ydW5DYl8uY2FsbCh0aGlzLnRoaXNBcmdfLHRoaXMpO2NvbnN0IHN1YlRhc2tzPXRoaXMuc3ViVGFza3NfO3RoaXMuc3ViVGFza3NfPXVuZGVmaW5lZDtpZighc3ViVGFza3MubGVuZ3RoKXJldHVybiB0aGlzLmFmdGVyVGFza187Zm9yKGxldCBpPTE7aTxzdWJUYXNrcy5sZW5ndGg7aSsrKXtzdWJUYXNrc1tpLTFdLmFmdGVyVGFza189c3ViVGFza3NbaV07fQpzdWJUYXNrc1tzdWJUYXNrcy5sZW5ndGgtMV0uYWZ0ZXJUYXNrXz10aGlzLmFmdGVyVGFza187cmV0dXJuIHN1YlRhc2tzWzBdO30sYWZ0ZXIoY2IsdGhpc0FyZyl7aWYodGhpcy5hZnRlclRhc2tfKXt0aHJvdyBuZXcgRXJyb3IoJ0hhcyBhbiBhZnRlciB0YXNrIGFscmVhZHknKTt9CmlmKGNiIGluc3RhbmNlb2YgVGFzayl7dGhpcy5hZnRlclRhc2tfPWNiO31lbHNle3RoaXMuYWZ0ZXJUYXNrXz1uZXcgVGFzayhjYix0aGlzQXJnKTt9CnJldHVybiB0aGlzLmFmdGVyVGFza187fSxlbnF1ZXVlKGNiLHRoaXNBcmcpe2lmKCF0aGlzLmFmdGVyVGFza18pcmV0dXJuIHRoaXMuYWZ0ZXIoY2IsdGhpc0FyZyk7cmV0dXJuIHRoaXMuYWZ0ZXJUYXNrXy5lbnF1ZXVlKGNiLHRoaXNBcmcpO319O1Rhc2suUnVuU3luY2hyb25vdXNseT1mdW5jdGlvbih0YXNrKXtsZXQgY3VyVGFzaz10YXNrO3doaWxlKGN1clRhc2spe2N1clRhc2s9Y3VyVGFzay5ydW4oKTt9fTtUYXNrLlJ1bldoZW5JZGxlPWZ1bmN0aW9uKHRhc2spe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyZXNvbHZlLHJlamVjdCl7bGV0IGN1clRhc2s9dGFzaztmdW5jdGlvbiBydW5Bbm90aGVyKCl7dHJ5e2N1clRhc2s9Y3VyVGFzay5ydW4oKTt9Y2F0Y2goZSl7cmVqZWN0KGUpO3JldHVybjt9CmlmKGN1clRhc2spe2lmKGN1clRhc2sudXBkYXRlc1VpXyl7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUocnVuQW5vdGhlcik7fWVsc2V7dHIuYi5yZXF1ZXN0SWRsZUNhbGxiYWNrKHJ1bkFub3RoZXIpO30KcmV0dXJuO30KcmVzb2x2ZSgpO30KdHIuYi5yZXF1ZXN0SWRsZUNhbGxiYWNrKHJ1bkFub3RoZXIpO30pO307cmV0dXJue1Rhc2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmMnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbWFrZUNhc2VJbnNlbnNpdGl2ZVJlZ2V4KHBhdHRlcm4pe3BhdHRlcm49cGF0dGVybi5yZXBsYWNlKC9bLiorP14ke30oKXxbXF1cXF0vZywnXFwkJicpO3JldHVybiBuZXcgUmVnRXhwKHBhdHRlcm4sJ2knKTt9CmZ1bmN0aW9uIEZpbHRlcigpe30KRmlsdGVyLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsbWF0Y2hDb3VudGVyKGNvdW50ZXIpe3JldHVybiB0cnVlO30sbWF0Y2hDcHUoY3B1KXtyZXR1cm4gdHJ1ZTt9LG1hdGNoUHJvY2Vzcyhwcm9jZXNzKXtyZXR1cm4gdHJ1ZTt9LG1hdGNoU2xpY2Uoc2xpY2Upe3JldHVybiB0cnVlO30sbWF0Y2hUaHJlYWQodGhyZWFkKXtyZXR1cm4gdHJ1ZTt9fTtmdW5jdGlvbiBUaXRsZU9yQ2F0ZWdvcnlGaWx0ZXIodGV4dCl7RmlsdGVyLmNhbGwodGhpcyk7dGhpcy5yZWdleF89bWFrZUNhc2VJbnNlbnNpdGl2ZVJlZ2V4KHRleHQpO2lmKCF0ZXh0Lmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCdGaWx0ZXIgdGV4dCBpcyBlbXB0eS4nKTt9fQpUaXRsZU9yQ2F0ZWdvcnlGaWx0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186RmlsdGVyLnByb3RvdHlwZSxtYXRjaFNsaWNlKHNsaWNlKXtpZihzbGljZS50aXRsZT09PXVuZGVmaW5lZCYmc2xpY2UuY2F0ZWdvcnk9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CnJldHVybiB0aGlzLnJlZ2V4Xy50ZXN0KHNsaWNlLnRpdGxlKXx8KCEhc2xpY2UuY2F0ZWdvcnkmJnRoaXMucmVnZXhfLnRlc3Qoc2xpY2UuY2F0ZWdvcnkpKTt9fTtmdW5jdGlvbiBFeGFjdFRpdGxlRmlsdGVyKHRleHQpe0ZpbHRlci5jYWxsKHRoaXMpO3RoaXMudGV4dF89dGV4dDtpZighdGV4dC5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignRmlsdGVyIHRleHQgaXMgZW1wdHkuJyk7fX0KRXhhY3RUaXRsZUZpbHRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpGaWx0ZXIucHJvdG90eXBlLG1hdGNoU2xpY2Uoc2xpY2Upe3JldHVybiBzbGljZS50aXRsZT09PXRoaXMudGV4dF87fX07ZnVuY3Rpb24gRnVsbFRleHRGaWx0ZXIodGV4dCl7RmlsdGVyLmNhbGwodGhpcyk7dGhpcy5yZWdleF89bWFrZUNhc2VJbnNlbnNpdGl2ZVJlZ2V4KHRleHQpO3RoaXMudGl0bGVPckNhdGVnb3J5RmlsdGVyXz1uZXcgVGl0bGVPckNhdGVnb3J5RmlsdGVyKHRleHQpO30KRnVsbFRleHRGaWx0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186RmlsdGVyLnByb3RvdHlwZSxtYXRjaE9iamVjdF8ob2JqKXtmb3IoY29uc3Qga2V5IGluIG9iail7aWYoIW9iai5oYXNPd25Qcm9wZXJ0eShrZXkpKWNvbnRpbnVlO2lmKHRoaXMucmVnZXhfLnRlc3Qoa2V5KSlyZXR1cm4gdHJ1ZTtpZih0aGlzLnJlZ2V4Xy50ZXN0KG9ialtrZXldKSlyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9LG1hdGNoU2xpY2Uoc2xpY2Upe2lmKHRoaXMudGl0bGVPckNhdGVnb3J5RmlsdGVyXy5tYXRjaFNsaWNlKHNsaWNlKSlyZXR1cm4gdHJ1ZTtyZXR1cm4gdGhpcy5tYXRjaE9iamVjdF8oc2xpY2UuYXJncyk7fX07cmV0dXJue0ZpbHRlcixUaXRsZU9yQ2F0ZWdvcnlGaWx0ZXIsRXhhY3RUaXRsZUZpbHRlcixGdWxsVGV4dEZpbHRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ2xvY2tEb21haW5JZD17QkFUVE9SOidCQVRUT1InLFVOS05PV05fQ0hST01FX0xFR0FDWTonVU5LTk9XTl9DSFJPTUVfTEVHQUNZJyxMSU5VWF9DTE9DS19NT05PVE9OSUM6J0xJTlVYX0NMT0NLX01PTk9UT05JQycsTElOVVhfRlRSQUNFX0dMT0JBTDonTElOVVhfRlRSQUNFX0dMT0JBTCcsTUFDX01BQ0hfQUJTT0xVVEVfVElNRTonTUFDX01BQ0hfQUJTT0xVVEVfVElNRScsV0lOX1JPTExPVkVSX1BST1RFQ1RFRF9USU1FX0dFVF9USU1FOidXSU5fUk9MTE9WRVJfUFJPVEVDVEVEX1RJTUVfR0VUX1RJTUUnLFdJTl9RUEM6J1dJTl9RUEMnLFNZU1RSQUNFOidTWVNUUkFDRScsVEVMRU1FVFJZOidURUxFTUVUUlknfTtjb25zdCBQT1NTSUJMRV9DSFJPTUVfQ0xPQ0tfRE9NQUlOUz1uZXcgU2V0KFtDbG9ja0RvbWFpbklkLlVOS05PV05fQ0hST01FX0xFR0FDWSxDbG9ja0RvbWFpbklkLkxJTlVYX0NMT0NLX01PTk9UT05JQyxDbG9ja0RvbWFpbklkLk1BQ19NQUNIX0FCU09MVVRFX1RJTUUsQ2xvY2tEb21haW5JZC5XSU5fUk9MTE9WRVJfUFJPVEVDVEVEX1RJTUVfR0VUX1RJTUUsQ2xvY2tEb21haW5JZC5XSU5fUVBDXSk7Y29uc3QgQkFUVE9SX0ZBU1RfU1lOQ19USFJFU0hPTERfTVM9MztmdW5jdGlvbiBDbG9ja1N5bmNNYW5hZ2VyKCl7dGhpcy5kb21haW5zU2Vlbl89bmV3IFNldCgpO3RoaXMubWFya2Vyc0J5U3luY0lkXz1uZXcgTWFwKCk7dGhpcy50cmFuc2Zvcm1lck1hcEJ5RG9tYWluSWRfPXt9O30KQ2xvY2tTeW5jTWFuYWdlci5wcm90b3R5cGU9e2FkZENsb2NrU3luY01hcmtlcihkb21haW5JZCxzeW5jSWQsc3RhcnRUcyxvcHRfZW5kVHMpe3RoaXMub25Eb21haW5TZWVuXyhkb21haW5JZCk7aWYoT2JqZWN0LnZhbHVlcyhDbG9ja0RvbWFpbklkKS5pbmRleE9mKGRvbWFpbklkKTwwKXt0aHJvdyBuZXcgRXJyb3IoJyInK2RvbWFpbklkKyciIGlzIG5vdCBpbiB0aGUgbGlzdCBvZiBrbm93biAnKydjbG9jayBkb21haW4gSURzLicpO30KaWYodGhpcy5tb2RlbERvbWFpbklkXyl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWRkIG5ldyBjbG9jayBzeW5jIG1hcmtlcnMgYWZ0ZXIgZ2V0dGluZyAnKydhIG1vZGVsIHRpbWUgdHJhbnNmb3JtZXIuJyk7fQpjb25zdCBtYXJrZXI9bmV3IENsb2NrU3luY01hcmtlcihkb21haW5JZCxzdGFydFRzLG9wdF9lbmRUcyk7aWYoIXRoaXMubWFya2Vyc0J5U3luY0lkXy5oYXMoc3luY0lkKSl7dGhpcy5tYXJrZXJzQnlTeW5jSWRfLnNldChzeW5jSWQsW21hcmtlcl0pO3JldHVybjt9CmNvbnN0IG1hcmtlcnM9dGhpcy5tYXJrZXJzQnlTeW5jSWRfLmdldChzeW5jSWQpO2lmKG1hcmtlcnMubGVuZ3RoPT09Mil7dGhyb3cgbmV3IEVycm9yKCdDbG9jayBzeW5jIHdpdGggSUQgIicrc3luY0lkKyciIGlzIGFscmVhZHkgJysnY29tcGxldGUgLSBjYW5ub3QgYWRkIGEgdGhpcmQgY2xvY2sgc3luYyBtYXJrZXIgdG8gaXQuJyk7fQppZihtYXJrZXJzWzBdLmRvbWFpbklkPT09ZG9tYWluSWQpe3Rocm93IG5ldyBFcnJvcignQSBjbG9jayBkb21haW4gY2Fubm90IHN5bmMgd2l0aCBpdHNlbGYuJyk7fQptYXJrZXJzLnB1c2gobWFya2VyKTt0aGlzLm9uU3luY0NvbXBsZXRlZF8obWFya2Vyc1swXSxtYXJrZXIpO30sZ2V0IGNvbXBsZXRlU3luY0lkcygpe2NvbnN0IGNvbXBsZXRlU3luY0lkcz1bXTtmb3IoY29uc3Rbc3luY0lkLG1hcmtlcnNdb2YgdGhpcy5tYXJrZXJzQnlTeW5jSWQpe2lmKG1hcmtlcnMubGVuZ3RoPT09Miljb21wbGV0ZVN5bmNJZHMucHVzaChzeW5jSWQpO30KcmV0dXJuIGNvbXBsZXRlU3luY0lkczt9LGdldCBtYXJrZXJzQnlTeW5jSWQoKXtyZXR1cm4gdGhpcy5tYXJrZXJzQnlTeW5jSWRfO30sZ2V0IGRvbWFpbnNTZWVuKCl7cmV0dXJuIHRoaXMuZG9tYWluc1NlZW5fO30sZ2V0TW9kZWxUaW1lVHJhbnNmb3JtZXIoZG9tYWluSWQpe3RoaXMub25Eb21haW5TZWVuXyhkb21haW5JZCk7aWYoIXRoaXMubW9kZWxEb21haW5JZF8pe3RoaXMuc2VsZWN0TW9kZWxEb21haW5JZF8oKTt9CnJldHVybiB0aGlzLmdldFRpbWVUcmFuc2Zvcm1lclJhd18oZG9tYWluSWQsdGhpcy5tb2RlbERvbWFpbklkXykuZm47fSxnZXRUaW1lVHJhbnNmb3JtZXJFcnJvcihmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7dGhpcy5vbkRvbWFpblNlZW5fKGZyb21Eb21haW5JZCk7dGhpcy5vbkRvbWFpblNlZW5fKHRvRG9tYWluSWQpO3JldHVybiB0aGlzLmdldFRpbWVUcmFuc2Zvcm1lclJhd18oZnJvbURvbWFpbklkLHRvRG9tYWluSWQpLmVycm9yO30sZ2V0VGltZVRyYW5zZm9ybWVyUmF3Xyhmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7Y29uc3QgdHJhbnNmb3JtZXI9dGhpcy5nZXRUcmFuc2Zvcm1lckJldHdlZW5fKGZyb21Eb21haW5JZCx0b0RvbWFpbklkKTtpZighdHJhbnNmb3JtZXIpe3Rocm93IG5ldyBFcnJvcignTm8gY2xvY2sgc3luYyBtYXJrZXJzIGV4aXN0IHBhaXJpbmcgY2xvY2sgZG9tYWluICInKwpmcm9tRG9tYWluSWQrJyIgJysnd2l0aCB0YXJnZXQgY2xvY2sgZG9tYWluICInKwp0b0RvbWFpbklkKyciLicpO30KcmV0dXJuIHRyYW5zZm9ybWVyO30sZ2V0VHJhbnNmb3JtZXJCZXR3ZWVuXyhmcm9tRG9tYWluSWQsdG9Eb21haW5JZCl7Y29uc3QgdmlzaXRlZERvbWFpbklkcz1uZXcgU2V0KCk7Y29uc3QgcXVldWU9W3tkb21haW5JZDpmcm9tRG9tYWluSWQsdHJhbnNmb3JtZXI6VHJhbnNmb3JtZXIuSURFTlRJVFl9XTt3aGlsZShxdWV1ZS5sZW5ndGg+MCl7cXVldWUuc29ydCgoZG9tYWluMSxkb21haW4yKT0+ZG9tYWluMS50cmFuc2Zvcm1lci5lcnJvci1kb21haW4yLnRyYW5zZm9ybWVyLmVycm9yKTtjb25zdCBjdXJyZW50PXF1ZXVlLnNoaWZ0KCk7aWYoY3VycmVudC5kb21haW5JZD09PXRvRG9tYWluSWQpe3JldHVybiBjdXJyZW50LnRyYW5zZm9ybWVyO30KaWYodmlzaXRlZERvbWFpbklkcy5oYXMoY3VycmVudC5kb21haW5JZCkpe2NvbnRpbnVlO30KdmlzaXRlZERvbWFpbklkcy5hZGQoY3VycmVudC5kb21haW5JZCk7Y29uc3Qgb3V0Z29pbmdUcmFuc2Zvcm1lcnM9dGhpcy50cmFuc2Zvcm1lck1hcEJ5RG9tYWluSWRfW2N1cnJlbnQuZG9tYWluSWRdO2lmKCFvdXRnb2luZ1RyYW5zZm9ybWVycyljb250aW51ZTtmb3IoY29uc3Qgb3V0Z29pbmdEb21haW5JZCBpbiBvdXRnb2luZ1RyYW5zZm9ybWVycyl7Y29uc3QgdG9OZXh0RG9tYWluVHJhbnNmb3JtZXI9b3V0Z29pbmdUcmFuc2Zvcm1lcnNbb3V0Z29pbmdEb21haW5JZF07Y29uc3QgdG9DdXJyZW50RG9tYWluVHJhbnNmb3JtZXI9Y3VycmVudC50cmFuc2Zvcm1lcjtxdWV1ZS5wdXNoKHtkb21haW5JZDpvdXRnb2luZ0RvbWFpbklkLHRyYW5zZm9ybWVyOlRyYW5zZm9ybWVyLmNvbXBvc2UodG9OZXh0RG9tYWluVHJhbnNmb3JtZXIsdG9DdXJyZW50RG9tYWluVHJhbnNmb3JtZXIpfSk7fX0KcmV0dXJuIHVuZGVmaW5lZDt9LHNlbGVjdE1vZGVsRG9tYWluSWRfKCl7dGhpcy5lbnN1cmVBbGxEb21haW5zQXJlQ29ubmVjdGVkXygpO2Zvcihjb25zdCBjaHJvbWVEb21haW5JZCBvZiBQT1NTSUJMRV9DSFJPTUVfQ0xPQ0tfRE9NQUlOUyl7aWYodGhpcy5kb21haW5zU2Vlbl8uaGFzKGNocm9tZURvbWFpbklkKSl7dGhpcy5tb2RlbERvbWFpbklkXz1jaHJvbWVEb21haW5JZDtyZXR1cm47fX0KY29uc3QgZG9tYWluc1NlZW5BcnJheT1BcnJheS5mcm9tKHRoaXMuZG9tYWluc1NlZW5fKTtkb21haW5zU2VlbkFycmF5LnNvcnQoKTt0aGlzLm1vZGVsRG9tYWluSWRfPWRvbWFpbnNTZWVuQXJyYXlbMF07fSxlbnN1cmVBbGxEb21haW5zQXJlQ29ubmVjdGVkXygpe2xldCBmaXJzdERvbWFpbklkPXVuZGVmaW5lZDtmb3IoY29uc3QgZG9tYWluSWQgb2YgdGhpcy5kb21haW5zU2Vlbl8pe2lmKCFmaXJzdERvbWFpbklkKXtmaXJzdERvbWFpbklkPWRvbWFpbklkO2NvbnRpbnVlO30KaWYoIXRoaXMuZ2V0VHJhbnNmb3JtZXJCZXR3ZWVuXyhmaXJzdERvbWFpbklkLGRvbWFpbklkKSl7dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gc2VsZWN0IGEgbWFzdGVyIGNsb2NrIGRvbWFpbiBiZWNhdXNlIG5vICcrJ3BhdGggY2FuIGJlIGZvdW5kIGZyb20gIicrZmlyc3REb21haW5JZCsnIiB0byAiJytkb21haW5JZCsnIi4nKTt9fQpyZXR1cm4gdHJ1ZTt9LG9uRG9tYWluU2Vlbl8oZG9tYWluSWQpe2lmKGRvbWFpbklkPT09Q2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kmJiF0aGlzLmRvbWFpbnNTZWVuXy5oYXMoQ2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kpKXtmb3IoY29uc3QgY2hyb21lRG9tYWluSWQgb2YgUE9TU0lCTEVfQ0hST01FX0NMT0NLX0RPTUFJTlMpe2lmKGNocm9tZURvbWFpbklkPT09Q2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1kpe2NvbnRpbnVlO30KdGhpcy5jb2xsYXBzZURvbWFpbnNfKENsb2NrRG9tYWluSWQuVU5LTk9XTl9DSFJPTUVfTEVHQUNZLGNocm9tZURvbWFpbklkKTt9fQp0aGlzLmRvbWFpbnNTZWVuXy5hZGQoZG9tYWluSWQpO30sb25TeW5jQ29tcGxldGVkXyhtYXJrZXIxLG1hcmtlcjIpe2NvbnN0IGZvcndhcmRUcmFuc2Zvcm1lcj1UcmFuc2Zvcm1lci5mcm9tTWFya2VycyhtYXJrZXIxLG1hcmtlcjIpO2NvbnN0IGJhY2t3YXJkVHJhbnNmb3JtZXI9VHJhbnNmb3JtZXIuZnJvbU1hcmtlcnMobWFya2VyMixtYXJrZXIxKTtjb25zdCBleGlzdGluZ1RyYW5zZm9ybWVyPXRoaXMuZ2V0T3JDcmVhdGVUcmFuc2Zvcm1lck1hcF8obWFya2VyMS5kb21haW5JZClbbWFya2VyMi5kb21haW5JZF07aWYoIWV4aXN0aW5nVHJhbnNmb3JtZXJ8fGZvcndhcmRUcmFuc2Zvcm1lci5lcnJvcjxleGlzdGluZ1RyYW5zZm9ybWVyLmVycm9yKXt0aGlzLmdldE9yQ3JlYXRlVHJhbnNmb3JtZXJNYXBfKG1hcmtlcjEuZG9tYWluSWQpW21hcmtlcjIuZG9tYWluSWRdPWZvcndhcmRUcmFuc2Zvcm1lcjt0aGlzLmdldE9yQ3JlYXRlVHJhbnNmb3JtZXJNYXBfKG1hcmtlcjIuZG9tYWluSWQpW21hcmtlcjEuZG9tYWluSWRdPWJhY2t3YXJkVHJhbnNmb3JtZXI7fX0sY29sbGFwc2VEb21haW5zXyhkb21haW4xSWQsZG9tYWluMklkKXt0aGlzLmdldE9yQ3JlYXRlVHJhbnNmb3JtZXJNYXBfKGRvbWFpbjFJZClbZG9tYWluMklkXT10aGlzLmdldE9yQ3JlYXRlVHJhbnNmb3JtZXJNYXBfKGRvbWFpbjJJZClbZG9tYWluMUlkXT1UcmFuc2Zvcm1lci5JREVOVElUWTt9LGdldE9yQ3JlYXRlVHJhbnNmb3JtZXJNYXBfKGRvbWFpbklkKXtpZighdGhpcy50cmFuc2Zvcm1lck1hcEJ5RG9tYWluSWRfW2RvbWFpbklkXSl7dGhpcy50cmFuc2Zvcm1lck1hcEJ5RG9tYWluSWRfW2RvbWFpbklkXT17fTt9CnJldHVybiB0aGlzLnRyYW5zZm9ybWVyTWFwQnlEb21haW5JZF9bZG9tYWluSWRdO30sY29tcHV0ZURvdEdyYXBoKCl7bGV0IGRvdFN0cmluZz0nZ3JhcGgge1xuJztjb25zdCBkb21haW5zU2Vlbj1bLi4udGhpcy5kb21haW5zU2Vlbl9dLnNvcnQoKTtmb3IoY29uc3QgZG9tYWluSWQgb2YgZG9tYWluc1NlZW4pe2RvdFN0cmluZys9YCAgJHtkb21haW5JZH1bc2hhcGU9Ym94XVxuYDt9CmNvbnN0IG1hcmtlcnNCeVN5bmNJZEVudHJpZXM9Wy4uLnRoaXMubWFya2Vyc0J5U3luY0lkXy5lbnRyaWVzKCldLnNvcnQoKFtzeW5jSWQxLG1hcmtlcnMxXSxbc3luY0lkMixtYXJrZXJzMl0pPT5zeW5jSWQxLmxvY2FsZUNvbXBhcmUoc3luY0lkMikpO2Zvcihjb25zdFtzeW5jSWQsbWFya2Vyc11vZiBtYXJrZXJzQnlTeW5jSWRFbnRyaWVzKXtjb25zdCBzb3J0ZWRNYXJrZXJzPW1hcmtlcnMuc29ydCgoYSxiKT0+YS5kb21haW5JZC5sb2NhbGVDb21wYXJlKGIuZG9tYWluSWQpKTtmb3IoY29uc3QgbSBvZiBtYXJrZXJzKXtkb3RTdHJpbmcrPWAgICIke3N5bmNJZH0iIC0tICR7bS5kb21haW5JZH0gYDtkb3RTdHJpbmcrPWBbbGFiZWw9Ilske20uc3RhcnRUc30sICR7bS5lbmRUc31dIl1cbmA7fX0KZG90U3RyaW5nKz0nfSc7cmV0dXJuIGRvdFN0cmluZzt9fTtmdW5jdGlvbiBDbG9ja1N5bmNNYXJrZXIoZG9tYWluSWQsc3RhcnRUcyxvcHRfZW5kVHMpe3RoaXMuZG9tYWluSWQ9ZG9tYWluSWQ7dGhpcy5zdGFydFRzPXN0YXJ0VHM7dGhpcy5lbmRUcz1vcHRfZW5kVHM9PT11bmRlZmluZWQ/c3RhcnRUczpvcHRfZW5kVHM7fQpDbG9ja1N5bmNNYXJrZXIucHJvdG90eXBlPXtnZXQgZHVyYXRpb24oKXtyZXR1cm4gdGhpcy5lbmRUcy10aGlzLnN0YXJ0VHM7fSxnZXQgdHMoKXtyZXR1cm4gdGhpcy5zdGFydFRzK3RoaXMuZHVyYXRpb24vMjt9fTtmdW5jdGlvbiBUcmFuc2Zvcm1lcihmbixlcnJvcil7dGhpcy5mbj1mbjt0aGlzLmVycm9yPWVycm9yO30KVHJhbnNmb3JtZXIuSURFTlRJVFk9bmV3IFRyYW5zZm9ybWVyKCh4PT54KSwwKTtUcmFuc2Zvcm1lci5jb21wb3NlPWZ1bmN0aW9uKGFUb0IsYlRvQyl7cmV0dXJuIG5ldyBUcmFuc2Zvcm1lcigodHMpPT5iVG9DLmZuKGFUb0IuZm4odHMpKSxhVG9CLmVycm9yK2JUb0MuZXJyb3IpO307VHJhbnNmb3JtZXIuZnJvbU1hcmtlcnM9ZnVuY3Rpb24oZnJvbU1hcmtlcix0b01hcmtlcil7bGV0IGZyb21Ucz1mcm9tTWFya2VyLnRzO2xldCB0b1RzPXRvTWFya2VyLnRzO2lmKGZyb21NYXJrZXIuZG9tYWluSWQ9PT1DbG9ja0RvbWFpbklkLkJBVFRPUiYmdG9NYXJrZXIuZHVyYXRpb24+QkFUVE9SX0ZBU1RfU1lOQ19USFJFU0hPTERfTVMpe3RvVHM9dG9NYXJrZXIuc3RhcnRUczt9ZWxzZSBpZih0b01hcmtlci5kb21haW5JZD09PUNsb2NrRG9tYWluSWQuQkFUVE9SJiZmcm9tTWFya2VyLmR1cmF0aW9uPkJBVFRPUl9GQVNUX1NZTkNfVEhSRVNIT0xEX01TKXtmcm9tVHM9ZnJvbU1hcmtlci5zdGFydFRzO30KY29uc3QgdHNTaGlmdD10b1RzLWZyb21UcztyZXR1cm4gbmV3IFRyYW5zZm9ybWVyKCh0cyk9PnRzK3RzU2hpZnQsZnJvbU1hcmtlci5kdXJhdGlvbit0b01hcmtlci5kdXJhdGlvbik7fTtyZXR1cm57Q2xvY2tEb21haW5JZCxDbG9ja1N5bmNNYW5hZ2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb3VudGVyU2FtcGxlKHNlcmllcyx0aW1lc3RhbXAsdmFsdWUpe3RyLm1vZGVsLkV2ZW50LmNhbGwodGhpcyk7dGhpcy5zZXJpZXNfPXNlcmllczt0aGlzLnRpbWVzdGFtcF89dGltZXN0YW1wO3RoaXMudmFsdWVfPXZhbHVlO30KQ291bnRlclNhbXBsZS5ncm91cEJ5VGltZXN0YW1wPWZ1bmN0aW9uKHNhbXBsZXMpe2NvbnN0IHNhbXBsZXNCeVRpbWVzdGFtcD10ci5iLmdyb3VwSW50b01hcChzYW1wbGVzLHM9PnMudGltZXN0YW1wKTtjb25zdCB0aW1lc3RhbXBzPUFycmF5LmZyb20oc2FtcGxlc0J5VGltZXN0YW1wLmtleXMoKSk7dGltZXN0YW1wcy5zb3J0KCk7Y29uc3QgZ3JvdXBzPVtdO2Zvcihjb25zdCB0cyBvZiB0aW1lc3RhbXBzKXtjb25zdCBncm91cD1zYW1wbGVzQnlUaW1lc3RhbXAuZ2V0KHRzKTtncm91cC5zb3J0KCh4LHkpPT54LnNlcmllcy5zZXJpZXNJbmRleC15LnNlcmllcy5zZXJpZXNJbmRleCk7Z3JvdXBzLnB1c2goZ3JvdXApO30KcmV0dXJuIGdyb3Vwczt9O0NvdW50ZXJTYW1wbGUucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnQucHJvdG90eXBlLGdldCBzZXJpZXMoKXtyZXR1cm4gdGhpcy5zZXJpZXNfO30sZ2V0IHRpbWVzdGFtcCgpe3JldHVybiB0aGlzLnRpbWVzdGFtcF87fSxnZXQgdmFsdWUoKXtyZXR1cm4gdGhpcy52YWx1ZV87fSxzZXQgdGltZXN0YW1wKHRpbWVzdGFtcCl7dGhpcy50aW1lc3RhbXBfPXRpbWVzdGFtcDt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMudGltZXN0YW1wKTt9LGdldFNhbXBsZUluZGV4KCl7cmV0dXJuIHRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNlcmllcy50aW1lc3RhbXBzLGZ1bmN0aW9uKHgpe3JldHVybiB4O30sdGhpcy50aW1lc3RhbXBfKTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0NvdW50ZXIgc2FtcGxlIGZyb20gJyt0aGlzLnNlcmllc18udGl0bGUrJyBhdCAnKwp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMudGltZXN0YW1wKTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKENvdW50ZXJTYW1wbGUse25hbWU6J2NvdW50ZXJTYW1wbGUnLHBsdXJhbE5hbWU6J2NvdW50ZXJTYW1wbGVzJ30pO3JldHVybntDb3VudGVyU2FtcGxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb3VudGVyU2FtcGxlPXRyLm1vZGVsLkNvdW50ZXJTYW1wbGU7ZnVuY3Rpb24gQ291bnRlclNlcmllcyhuYW1lLGNvbG9yKXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMubmFtZV89bmFtZTt0aGlzLmNvbG9yXz1jb2xvcjt0aGlzLnRpbWVzdGFtcHNfPVtdO3RoaXMuc2FtcGxlc189W107dGhpcy5jb3VudGVyPXVuZGVmaW5lZDt0aGlzLnNlcmllc0luZGV4PXVuZGVmaW5lZDt9CkNvdW50ZXJTZXJpZXMucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy50aW1lc3RhbXBzXy5sZW5ndGg7fSxnZXQgbmFtZSgpe3JldHVybiB0aGlzLm5hbWVfO30sZ2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuY29sb3JfO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCB0aW1lc3RhbXBzKCl7cmV0dXJuIHRoaXMudGltZXN0YW1wc187fSxnZXRTYW1wbGUoaWR4KXtyZXR1cm4gdGhpcy5zYW1wbGVzX1tpZHhdO30sZ2V0VGltZXN0YW1wKGlkeCl7cmV0dXJuIHRoaXMudGltZXN0YW1wc19baWR4XTt9LGFkZENvdW50ZXJTYW1wbGUodHMsdmFsKXtjb25zdCBzYW1wbGU9bmV3IENvdW50ZXJTYW1wbGUodGhpcyx0cyx2YWwpO3RoaXMuYWRkU2FtcGxlKHNhbXBsZSk7cmV0dXJuIHNhbXBsZTt9LGFkZFNhbXBsZShzYW1wbGUpe3RoaXMudGltZXN0YW1wc18ucHVzaChzYW1wbGUudGltZXN0YW1wKTt0aGlzLnNhbXBsZXNfLnB1c2goc2FtcGxlKTt9LGdldFN0YXRpc3RpY3Moc2FtcGxlSW5kaWNlcyl7bGV0IHN1bT0wO2xldCBtaW49TnVtYmVyLk1BWF9WQUxVRTtsZXQgbWF4PS1OdW1iZXIuTUFYX1ZBTFVFO2ZvcihsZXQgaT0wO2k8c2FtcGxlSW5kaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzYW1wbGU9dGhpcy5nZXRTYW1wbGUoc2FtcGxlSW5kaWNlc1tpXSkudmFsdWU7c3VtKz1zYW1wbGU7bWluPU1hdGgubWluKHNhbXBsZSxtaW4pO21heD1NYXRoLm1heChzYW1wbGUsbWF4KTt9CnJldHVybnttaW4sbWF4LGF2Zzooc3VtL3NhbXBsZUluZGljZXMubGVuZ3RoKSxzdGFydDp0aGlzLmdldFNhbXBsZShzYW1wbGVJbmRpY2VzWzBdKS52YWx1ZSxlbmQ6dGhpcy5nZXRTYW1wbGUoc2FtcGxlSW5kaWNlcy5sZW5ndGgtMSkudmFsdWV9O30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2ZvcihsZXQgaT0wO2k8dGhpcy50aW1lc3RhbXBzXy5sZW5ndGg7KytpKXt0aGlzLnRpbWVzdGFtcHNfW2ldKz1hbW91bnQ7dGhpcy5zYW1wbGVzX1tpXS50aW1lc3RhbXA9dGhpcy50aW1lc3RhbXBzX1tpXTt9fSwqY2hpbGRFdmVudHMoKXt5aWVsZCp0aGlzLnNhbXBsZXNfO30sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7fX07cmV0dXJue0NvdW50ZXJTZXJpZXMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENvdW50ZXIocGFyZW50LGlkLGNhdGVnb3J5LG5hbWUpe3RyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5wYXJlbnRfPXBhcmVudDt0aGlzLmlkXz1pZDt0aGlzLmNhdGVnb3J5Xz1jYXRlZ29yeXx8Jyc7dGhpcy5uYW1lXz1uYW1lO3RoaXMuc2VyaWVzXz1bXTt0aGlzLnRvdGFscz1bXTt9CkNvdW50ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBwYXJlbnQoKXtyZXR1cm4gdGhpcy5wYXJlbnRfO30sZ2V0IGlkKCl7cmV0dXJuIHRoaXMuaWRfO30sZ2V0IGNhdGVnb3J5KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnlfO30sZ2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lXzt9LCpjaGlsZEV2ZW50cygpe30sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7eWllbGQqdGhpcy5zZXJpZXM7fSxzZXQgdGltZXN0YW1wcyhhcmcpe3Rocm93IG5ldyBFcnJvcignQmFkIGNvdW50ZXIgQVBJLiBObyBjb29raWUuJyk7fSxzZXQgc2VyaWVzTmFtZXMoYXJnKXt0aHJvdyBuZXcgRXJyb3IoJ0JhZCBjb3VudGVyIEFQSS4gTm8gY29va2llLicpO30sc2V0IHNlcmllc0NvbG9ycyhhcmcpe3Rocm93IG5ldyBFcnJvcignQmFkIGNvdW50ZXIgQVBJLiBObyBjb29raWUuJyk7fSxzZXQgc2FtcGxlcyhhcmcpe3Rocm93IG5ldyBFcnJvcignQmFkIGNvdW50ZXIgQVBJLiBObyBjb29raWUuJyk7fSxhZGRTZXJpZXMoc2VyaWVzKXtzZXJpZXMuY291bnRlcj10aGlzO3Nlcmllcy5zZXJpZXNJbmRleD10aGlzLnNlcmllc18ubGVuZ3RoO3RoaXMuc2VyaWVzXy5wdXNoKHNlcmllcyk7cmV0dXJuIHNlcmllczt9LGdldFNlcmllcyhpZHgpe3JldHVybiB0aGlzLnNlcmllc19baWR4XTt9LGdldCBzZXJpZXMoKXtyZXR1cm4gdGhpcy5zZXJpZXNfO30sZ2V0IG51bVNlcmllcygpe3JldHVybiB0aGlzLnNlcmllc18ubGVuZ3RoO30sZ2V0IG51bVNhbXBsZXMoKXtpZih0aGlzLnNlcmllc18ubGVuZ3RoPT09MClyZXR1cm4gMDtyZXR1cm4gdGhpcy5zZXJpZXNfWzBdLmxlbmd0aDt9LGdldCB0aW1lc3RhbXBzKCl7aWYodGhpcy5zZXJpZXNfLmxlbmd0aD09PTApcmV0dXJuW107cmV0dXJuIHRoaXMuc2VyaWVzX1swXS50aW1lc3RhbXBzO30sZ2V0U2FtcGxlU3RhdGlzdGljcyhzYW1wbGVJbmRpY2VzKXtzYW1wbGVJbmRpY2VzLnNvcnQoKTtjb25zdCByZXQ9W107dGhpcy5zZXJpZXNfLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtyZXQucHVzaChzZXJpZXMuZ2V0U3RhdGlzdGljcyhzYW1wbGVJbmRpY2VzKSk7fSk7cmV0dXJuIHJldDt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IGk9MDtpPHRoaXMuc2VyaWVzXy5sZW5ndGg7KytpKXt0aGlzLnNlcmllc19baV0uc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpO319LHVwZGF0ZUJvdW5kcygpe3RoaXMudG90YWxzPVtdO3RoaXMubWF4VG90YWw9MDt0aGlzLmJvdW5kcy5yZXNldCgpO2lmKHRoaXMuc2VyaWVzXy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBmaXJzdFNlcmllcz10aGlzLnNlcmllc19bMF07Y29uc3QgbGFzdFNlcmllcz10aGlzLnNlcmllc19bdGhpcy5zZXJpZXNfLmxlbmd0aC0xXTt0aGlzLmJvdW5kcy5hZGRWYWx1ZShmaXJzdFNlcmllcy5nZXRUaW1lc3RhbXAoMCkpO3RoaXMuYm91bmRzLmFkZFZhbHVlKGxhc3RTZXJpZXMuZ2V0VGltZXN0YW1wKGxhc3RTZXJpZXMubGVuZ3RoLTEpKTtjb25zdCBudW1TZXJpZXM9dGhpcy5udW1TZXJpZXM7dGhpcy5tYXhUb3RhbD0tSW5maW5pdHk7Zm9yKGxldCBpPTA7aTxmaXJzdFNlcmllcy5sZW5ndGg7KytpKXtsZXQgdG90YWw9MDt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3RvdGFsKz1zZXJpZXMuZ2V0U2FtcGxlKGkpLnZhbHVlO3RoaXMudG90YWxzLnB1c2godG90YWwpO30uYmluZCh0aGlzKSk7dGhpcy5tYXhUb3RhbD1NYXRoLm1heCh0b3RhbCx0aGlzLm1heFRvdGFsKTt9fX07Q291bnRlci5jb21wYXJlPWZ1bmN0aW9uKHgseSl7bGV0IHRtcD14LnBhcmVudC5jb21wYXJlVG8oeS5wYXJlbnQpO2lmKHRtcCE9PTApcmV0dXJuIHRtcDt0bXA9eC5uYW1lLmxvY2FsZUNvbXBhcmUoeS5uYW1lKTtpZih0bXA9PT0wKXJldHVybiB4LnRpZC15LnRpZDtyZXR1cm4gdG1wO307cmV0dXJue0NvdW50ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFNsaWNlPXRyLm1vZGVsLlNsaWNlO2Z1bmN0aW9uIENwdVNsaWNlKGNhdCx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3Msb3B0X2R1cmF0aW9uKXtTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50aHJlYWRUaGF0V2FzUnVubmluZz11bmRlZmluZWQ7dGhpcy5jcHU9dW5kZWZpbmVkO30KQ3B1U2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186U2xpY2UucHJvdG90eXBlLGdldCBhbmFseXNpc1R5cGVOYW1lKCl7cmV0dXJuJ3RyLnVpLmFuYWx5c2lzLkNwdVNsaWNlJzt9LGdldEFzc29jaWF0ZWRUaW1lc2xpY2UoKXtpZighdGhpcy50aHJlYWRUaGF0V2FzUnVubmluZyl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IHRpbWVTbGljZXM9dGhpcy50aHJlYWRUaGF0V2FzUnVubmluZy50aW1lU2xpY2VzO2ZvcihsZXQgaT0wO2k8dGltZVNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCB0aW1lU2xpY2U9dGltZVNsaWNlc1tpXTtpZih0aW1lU2xpY2Uuc3RhcnQhPT10aGlzLnN0YXJ0KXtjb250aW51ZTt9CmlmKHRpbWVTbGljZS5kdXJhdGlvbiE9PXRoaXMuZHVyYXRpb24pe2NvbnRpbnVlO30KcmV0dXJuIHRpbWVTbGljZTt9CnJldHVybiB1bmRlZmluZWQ7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihDcHVTbGljZSx7bmFtZTonY3B1U2xpY2UnLHBsdXJhbE5hbWU6J2NwdVNsaWNlcyd9KTtyZXR1cm57Q3B1U2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFRpbWVUb09iamVjdEluc3RhbmNlTWFwKGNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb24scGFyZW50LHNjb3BlZElkKXt0aGlzLmNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb25fPWNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb247dGhpcy5wYXJlbnQ9cGFyZW50O3RoaXMuc2NvcGVkSWQ9c2NvcGVkSWQ7dGhpcy5pbnN0YW5jZXM9W107fQpUaW1lVG9PYmplY3RJbnN0YW5jZU1hcC5wcm90b3R5cGU9e2lkV2FzQ3JlYXRlZChjYXRlZ29yeSxuYW1lLHRzKXtpZih0aGlzLmluc3RhbmNlcy5sZW5ndGg9PT0wKXt0aGlzLmluc3RhbmNlcy5wdXNoKHRoaXMuY3JlYXRlT2JqZWN0SW5zdGFuY2VGdW5jdGlvbl8odGhpcy5wYXJlbnQsdGhpcy5zY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKSk7dGhpcy5pbnN0YW5jZXNbMF0uY3JlYXRpb25Uc1dhc0V4cGxpY2l0PXRydWU7cmV0dXJuIHRoaXMuaW5zdGFuY2VzWzBdO30KbGV0IGxhc3RJbnN0YW5jZT10aGlzLmluc3RhbmNlc1t0aGlzLmluc3RhbmNlcy5sZW5ndGgtMV07aWYodHM8bGFzdEluc3RhbmNlLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcignTXV0YXRpb24gb2YgdGhlIFRpbWVUb09iamVjdEluc3RhbmNlTWFwIG11c3QgYmUgJysnZG9uZSBpbiBhc2NlbmRpbmcgdGltZXN0YW1wIG9yZGVyLicpO30KbGFzdEluc3RhbmNlPXRoaXMuY3JlYXRlT2JqZWN0SW5zdGFuY2VGdW5jdGlvbl8odGhpcy5wYXJlbnQsdGhpcy5zY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKTtsYXN0SW5zdGFuY2UuY3JlYXRpb25Uc1dhc0V4cGxpY2l0PXRydWU7dGhpcy5pbnN0YW5jZXMucHVzaChsYXN0SW5zdGFuY2UpO3JldHVybiBsYXN0SW5zdGFuY2U7fSxhZGRTbmFwc2hvdChjYXRlZ29yeSxuYW1lLHRzLGFyZ3Msb3B0X2Jhc2VUeXBlTmFtZSl7aWYodGhpcy5pbnN0YW5jZXMubGVuZ3RoPT09MCl7dGhpcy5pbnN0YW5jZXMucHVzaCh0aGlzLmNyZWF0ZU9iamVjdEluc3RhbmNlRnVuY3Rpb25fKHRoaXMucGFyZW50LHRoaXMuc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSx0cyxvcHRfYmFzZVR5cGVOYW1lKSk7fQpjb25zdCBpPXRyLmIuZmluZEluZGV4SW5Tb3J0ZWRJbnRlcnZhbHModGhpcy5pbnN0YW5jZXMsZnVuY3Rpb24oaW5zdCl7cmV0dXJuIGluc3QuY3JlYXRpb25Uczt9LGZ1bmN0aW9uKGluc3Qpe3JldHVybiBpbnN0LmRlbGV0aW9uVHMtaW5zdC5jcmVhdGlvblRzO30sdHMpO2xldCBpbnN0YW5jZTtpZihpPDApe2luc3RhbmNlPXRoaXMuaW5zdGFuY2VzWzBdO2lmKHRzPmluc3RhbmNlLmRlbGV0aW9uVHN8fGluc3RhbmNlLmNyZWF0aW9uVHNXYXNFeHBsaWNpdCl7dGhyb3cgbmV3IEVycm9yKCdBdCB0aGUgcHJvdmlkZWQgdGltZXN0YW1wLCBubyBpbnN0YW5jZSB3YXMgc3RpbGwgYWxpdmUnKTt9CmlmKGluc3RhbmNlLnNuYXBzaG90cy5sZW5ndGghPT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzaGlmdCBjcmVhdGlvblRzIGZvcndhcmQsICcrJ3NuYXBzaG90cyBoYXZlIGJlZW4gYWRkZWQuIEZpcnN0IHNuYXAgd2FzIGF0IHRzPScrCmluc3RhbmNlLnNuYXBzaG90c1swXS50cysnIGFuZCBjcmVhdGlvblRzIHdhcyAnKwppbnN0YW5jZS5jcmVhdGlvblRzKTt9Cmluc3RhbmNlLmNyZWF0aW9uVHM9dHM7fWVsc2UgaWYoaT49dGhpcy5pbnN0YW5jZXMubGVuZ3RoKXtpbnN0YW5jZT10aGlzLmluc3RhbmNlc1t0aGlzLmluc3RhbmNlcy5sZW5ndGgtMV07aWYodHM+PWluc3RhbmNlLmRlbGV0aW9uVHMpe2luc3RhbmNlPXRoaXMuY3JlYXRlT2JqZWN0SW5zdGFuY2VGdW5jdGlvbl8odGhpcy5wYXJlbnQsdGhpcy5zY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzLG9wdF9iYXNlVHlwZU5hbWUpO3RoaXMuaW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO31lbHNle2xldCBsYXN0VmFsaWRJbmRleDtmb3IobGV0IGk9dGhpcy5pbnN0YW5jZXMubGVuZ3RoLTE7aT49MDtpLS0pe2NvbnN0IHRtcD10aGlzLmluc3RhbmNlc1tpXTtpZih0cz49dG1wLmRlbGV0aW9uVHMpYnJlYWs7aWYodG1wLmNyZWF0aW9uVHNXYXNFeHBsaWNpdD09PWZhbHNlJiZ0bXAuc25hcHNob3RzLmxlbmd0aD09PTApe2xhc3RWYWxpZEluZGV4PWk7fX0KaWYobGFzdFZhbGlkSW5kZXg9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBzbmFwc2hvdC4gTm8gaW5zdGFuY2Ugd2FzIGFsaXZlIHRoYXQgd2FzIG11dGFibGUuJyk7fQppbnN0YW5jZT10aGlzLmluc3RhbmNlc1tsYXN0VmFsaWRJbmRleF07aW5zdGFuY2UuY3JlYXRpb25Ucz10czt9fWVsc2V7aW5zdGFuY2U9dGhpcy5pbnN0YW5jZXNbaV07fQpyZXR1cm4gaW5zdGFuY2UuYWRkU25hcHNob3QodHMsYXJncyxuYW1lLG9wdF9iYXNlVHlwZU5hbWUpO30sZ2V0IGxhc3RJbnN0YW5jZSgpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5pbnN0YW5jZXNbdGhpcy5pbnN0YW5jZXMubGVuZ3RoLTFdO30saWRXYXNEZWxldGVkKGNhdGVnb3J5LG5hbWUsdHMpe2lmKHRoaXMuaW5zdGFuY2VzLmxlbmd0aD09PTApe3RoaXMuaW5zdGFuY2VzLnB1c2godGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZUZ1bmN0aW9uXyh0aGlzLnBhcmVudCx0aGlzLnNjb3BlZElkLGNhdGVnb3J5LG5hbWUsdHMpKTt9CmxldCBsYXN0SW5zdGFuY2U9dGhpcy5pbnN0YW5jZXNbdGhpcy5pbnN0YW5jZXMubGVuZ3RoLTFdO2lmKHRzPGxhc3RJbnN0YW5jZS5jcmVhdGlvblRzKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBkZWxldGUgYW4gaWQgYmVmb3JlIGl0IHdhcyBjcmVhdGVkJyk7fQppZihsYXN0SW5zdGFuY2UuZGVsZXRpb25Ucz09PU51bWJlci5NQVhfVkFMVUUpe2xhc3RJbnN0YW5jZS53YXNEZWxldGVkKHRzKTtyZXR1cm4gbGFzdEluc3RhbmNlO30KaWYodHM8bGFzdEluc3RhbmNlLmRlbGV0aW9uVHMpe3Rocm93IG5ldyBFcnJvcignaWQgd2FzIGFscmVhZHkgZGVsZXRlZCBlYXJsaWVyLicpO30KbGFzdEluc3RhbmNlPXRoaXMuY3JlYXRlT2JqZWN0SW5zdGFuY2VGdW5jdGlvbl8odGhpcy5wYXJlbnQsdGhpcy5zY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKTt0aGlzLmluc3RhbmNlcy5wdXNoKGxhc3RJbnN0YW5jZSk7bGFzdEluc3RhbmNlLndhc0RlbGV0ZWQodHMpO3JldHVybiBsYXN0SW5zdGFuY2U7fSxnZXRJbnN0YW5jZUF0KHRzKXtjb25zdCBpPXRyLmIuZmluZEluZGV4SW5Tb3J0ZWRJbnRlcnZhbHModGhpcy5pbnN0YW5jZXMsZnVuY3Rpb24oaW5zdCl7cmV0dXJuIGluc3QuY3JlYXRpb25Uczt9LGZ1bmN0aW9uKGluc3Qpe3JldHVybiBpbnN0LmRlbGV0aW9uVHMtaW5zdC5jcmVhdGlvblRzO30sdHMpO2lmKGk8MCl7aWYodGhpcy5pbnN0YW5jZXNbMF0uY3JlYXRpb25Uc1dhc0V4cGxpY2l0KXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMuaW5zdGFuY2VzWzBdO31lbHNlIGlmKGk+PXRoaXMuaW5zdGFuY2VzLmxlbmd0aCl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybiB0aGlzLmluc3RhbmNlc1tpXTt9fTtyZXR1cm57VGltZVRvT2JqZWN0SW5zdGFuY2VNYXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdEluc3RhbmNlPXRyLm1vZGVsLk9iamVjdEluc3RhbmNlO2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIE9iamVjdENvbGxlY3Rpb24ocGFyZW50KXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMucGFyZW50PXBhcmVudDt0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfPXt9O3RoaXMuaW5zdGFuY2VzQnlUeXBlTmFtZV89e307dGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV89dGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV8uYmluZCh0aGlzKTt9Ck9iamVjdENvbGxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLCpjaGlsZEV2ZW50cygpe2Zvcihjb25zdCBpbnN0YW5jZSBvZiB0aGlzLmdldEFsbE9iamVjdEluc3RhbmNlcygpKXt5aWVsZCBpbnN0YW5jZTt5aWVsZCppbnN0YW5jZS5zbmFwc2hvdHM7fX0sY3JlYXRlT2JqZWN0SW5zdGFuY2VfKHBhcmVudCxzY29wZWRJZCxjYXRlZ29yeSxuYW1lLGNyZWF0aW9uVHMsb3B0X2Jhc2VUeXBlTmFtZSl7Y29uc3QgY29uc3RydWN0b3I9dHIubW9kZWwuT2JqZWN0SW5zdGFuY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoY2F0ZWdvcnksbmFtZSk7Y29uc3QgaW5zdGFuY2U9bmV3IGNvbnN0cnVjdG9yKHBhcmVudCxzY29wZWRJZCxjYXRlZ29yeSxuYW1lLGNyZWF0aW9uVHMsb3B0X2Jhc2VUeXBlTmFtZSk7Y29uc3QgdHlwZU5hbWU9aW5zdGFuY2UudHlwZU5hbWU7bGV0IGluc3RhbmNlc09mVHlwZU5hbWU9dGhpcy5pbnN0YW5jZXNCeVR5cGVOYW1lX1t0eXBlTmFtZV07aWYoIWluc3RhbmNlc09mVHlwZU5hbWUpe2luc3RhbmNlc09mVHlwZU5hbWU9W107dGhpcy5pbnN0YW5jZXNCeVR5cGVOYW1lX1t0eXBlTmFtZV09aW5zdGFuY2VzT2ZUeXBlTmFtZTt9Cmluc3RhbmNlc09mVHlwZU5hbWUucHVzaChpbnN0YW5jZSk7cmV0dXJuIGluc3RhbmNlO30sZ2V0T3JDcmVhdGVJbnN0YW5jZU1hcF8oc2NvcGVkSWQpe2xldCBkaWN0O2lmKHNjb3BlZElkLnNjb3BlIGluIHRoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF8pe2RpY3Q9dGhpcy5pbnN0YW5jZU1hcHNCeVNjb3BlZElkX1tzY29wZWRJZC5zY29wZV07fWVsc2V7ZGljdD17fTt0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfW3Njb3BlZElkLnNjb3BlXT1kaWN0O30KbGV0IGluc3RhbmNlTWFwPWRpY3Rbc2NvcGVkSWQuaWRdO2lmKGluc3RhbmNlTWFwKXJldHVybiBpbnN0YW5jZU1hcDtpbnN0YW5jZU1hcD1uZXcgdHIubW9kZWwuVGltZVRvT2JqZWN0SW5zdGFuY2VNYXAodGhpcy5jcmVhdGVPYmplY3RJbnN0YW5jZV8sdGhpcy5wYXJlbnQsc2NvcGVkSWQpO2RpY3Rbc2NvcGVkSWQuaWRdPWluc3RhbmNlTWFwO3JldHVybiBpbnN0YW5jZU1hcDt9LGlkV2FzQ3JlYXRlZChzY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKXtjb25zdCBpbnN0YW5jZU1hcD10aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2VNYXBfKHNjb3BlZElkKTtyZXR1cm4gaW5zdGFuY2VNYXAuaWRXYXNDcmVhdGVkKGNhdGVnb3J5LG5hbWUsdHMpO30sYWRkU25hcHNob3Qoc2NvcGVkSWQsY2F0ZWdvcnksbmFtZSx0cyxhcmdzLG9wdF9iYXNlVHlwZU5hbWUpe2NvbnN0IGluc3RhbmNlTWFwPXRoaXMuZ2V0T3JDcmVhdGVJbnN0YW5jZU1hcF8oc2NvcGVkSWQpO2NvbnN0IHNuYXBzaG90PWluc3RhbmNlTWFwLmFkZFNuYXBzaG90KGNhdGVnb3J5LG5hbWUsdHMsYXJncyxvcHRfYmFzZVR5cGVOYW1lKTtpZihzbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5jYXRlZ29yeSE9PWNhdGVnb3J5KXtjb25zdCBtc2c9J0FkZGVkIHNuYXBzaG90IG5hbWU9JytuYW1lKycgd2l0aCBjYXQ9JytjYXRlZ29yeSsnIGltcG9zc2libGUuIEl0IGluc3RhbmNlIHdhcyBjcmVhdGVkL3NuYXBzaG90dGVkIHdpdGggY2F0PScrCnNuYXBzaG90Lm9iamVjdEluc3RhbmNlLmNhdGVnb3J5KycgbmFtZT0nKwpzbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5uYW1lO3Rocm93IG5ldyBFcnJvcihtc2cpO30KaWYob3B0X2Jhc2VUeXBlTmFtZSYmc25hcHNob3Qub2JqZWN0SW5zdGFuY2UuYmFzZVR5cGVOYW1lIT09b3B0X2Jhc2VUeXBlTmFtZSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgYWRkIHNuYXBzaG90IHdpdGggYmFzZVR5cGVOYW1lPScrCm9wdF9iYXNlVHlwZU5hbWUrJy4gSXQgJysnd2FzIHByZXZpb3VzbHkgY3JlYXRlZCB3aXRoIG5hbWU9JysKc25hcHNob3Qub2JqZWN0SW5zdGFuY2UuYmFzZVR5cGVOYW1lKTt9CmlmKHNuYXBzaG90Lm9iamVjdEluc3RhbmNlLm5hbWUhPT1uYW1lKXt0aHJvdyBuZXcgRXJyb3IoJ0NvdWxkIG5vdCBhZGQgc25hcHNob3Qgd2l0aCBuYW1lPScrbmFtZSsnLiBJdCAnKyd3YXMgcHJldmlvdXNseSBjcmVhdGVkIHdpdGggbmFtZT0nKwpzbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5uYW1lKTt9CnJldHVybiBzbmFwc2hvdDt9LGlkV2FzRGVsZXRlZChzY29wZWRJZCxjYXRlZ29yeSxuYW1lLHRzKXtjb25zdCBpbnN0YW5jZU1hcD10aGlzLmdldE9yQ3JlYXRlSW5zdGFuY2VNYXBfKHNjb3BlZElkKTtjb25zdCBkZWxldGVkSW5zdGFuY2U9aW5zdGFuY2VNYXAuaWRXYXNEZWxldGVkKGNhdGVnb3J5LG5hbWUsdHMpO2lmKCFkZWxldGVkSW5zdGFuY2UpcmV0dXJuO2lmKGRlbGV0ZWRJbnN0YW5jZS5jYXRlZ29yeSE9PWNhdGVnb3J5KXtjb25zdCBtc2c9J0RlbGV0aW5nIG9iamVjdCAnK2RlbGV0ZWRJbnN0YW5jZS5uYW1lKycgd2l0aCBhIGRpZmZlcmVudCBjYXRlZ29yeSAnKyd0aGFuIHdoZW4gaXQgd2FzIGNyZWF0ZWQuIEl0IHByZXZpb3VzIGhhZCBjYXQ9JysKZGVsZXRlZEluc3RhbmNlLmNhdGVnb3J5KycgYnV0IHRoZSBkZWxldGUgY29tbWFuZCAnKydoYWQgY2F0PScrY2F0ZWdvcnk7dGhyb3cgbmV3IEVycm9yKG1zZyk7fQppZihkZWxldGVkSW5zdGFuY2UuYmFzZVR5cGVOYW1lIT09bmFtZSl7dGhyb3cgbmV3IEVycm9yKCdEZWxldGlvbiByZXF1ZXN0ZWQgZm9yIG5hbWU9JysKbmFtZSsnIGNvdWxkIG5vdCBwcm9jZWVkOiAnKydBbiBleGlzdGluZyBvYmplY3Qgd2l0aCBiYXNlVHlwZU5hbWU9JysKZGVsZXRlZEluc3RhbmNlLmJhc2VUeXBlTmFtZSsnIGV4aXN0ZWQuJyk7fX0sYXV0b0RlbGV0ZU9iamVjdHMobWF4VGltZXN0YW1wKXtmb3IoY29uc3QgaW1hcEJ5SWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfKSl7Zm9yKGNvbnN0IGkyaW1hcCBvZiBPYmplY3QudmFsdWVzKGltYXBCeUlkKSl7Y29uc3QgbGFzdEluc3RhbmNlPWkyaW1hcC5sYXN0SW5zdGFuY2U7aWYobGFzdEluc3RhbmNlLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKWNvbnRpbnVlO2kyaW1hcC5pZFdhc0RlbGV0ZWQobGFzdEluc3RhbmNlLmNhdGVnb3J5LGxhc3RJbnN0YW5jZS5uYW1lLG1heFRpbWVzdGFtcCk7bGFzdEluc3RhbmNlLmRlbGV0aW9uVHNXYXNFeHBsaWNpdD1mYWxzZTt9fX0sZ2V0T2JqZWN0SW5zdGFuY2VBdChzY29wZWRJZCx0cyl7bGV0IGluc3RhbmNlTWFwO2lmKHNjb3BlZElkLnNjb3BlIGluIHRoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF8pe2luc3RhbmNlTWFwPXRoaXMuaW5zdGFuY2VNYXBzQnlTY29wZWRJZF9bc2NvcGVkSWQuc2NvcGVdW3Njb3BlZElkLmlkXTt9CmlmKCFpbnN0YW5jZU1hcClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBpbnN0YW5jZU1hcC5nZXRJbnN0YW5jZUF0KHRzKTt9LGdldFNuYXBzaG90QXQoc2NvcGVkSWQsdHMpe2NvbnN0IGluc3RhbmNlPXRoaXMuZ2V0T2JqZWN0SW5zdGFuY2VBdChzY29wZWRJZCx0cyk7aWYoIWluc3RhbmNlKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGluc3RhbmNlLmdldFNuYXBzaG90QXQodHMpO30saXRlck9iamVjdEluc3RhbmNlcyhpdGVyLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpc3x8dGhpcztmb3IoY29uc3QgaW1hcEJ5SWQgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmluc3RhbmNlTWFwc0J5U2NvcGVkSWRfKSl7Zm9yKGNvbnN0IGkyaW1hcCBvZiBPYmplY3QudmFsdWVzKGltYXBCeUlkKSl7aTJpbWFwLmluc3RhbmNlcy5mb3JFYWNoKGl0ZXIsb3B0X3RoaXMpO319fSxnZXRBbGxPYmplY3RJbnN0YW5jZXMoKXtjb25zdCBpbnN0YW5jZXM9W107dGhpcy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKGkpe2luc3RhbmNlcy5wdXNoKGkpO30pO3JldHVybiBpbnN0YW5jZXM7fSxnZXRBbGxJbnN0YW5jZXNOYW1lZChuYW1lKXtyZXR1cm4gdGhpcy5pbnN0YW5jZXNCeVR5cGVOYW1lX1tuYW1lXTt9LGdldEFsbEluc3RhbmNlc0J5VHlwZU5hbWUoKXtyZXR1cm4gdGhpcy5pbnN0YW5jZXNCeVR5cGVOYW1lXzt9LHByZUluaXRpYWxpemVBbGxPYmplY3RzKCl7dGhpcy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKGluc3RhbmNlKXtpbnN0YW5jZS5wcmVJbml0aWFsaXplKCk7fSk7fSxpbml0aWFsaXplQWxsT2JqZWN0cygpe3RoaXMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aW5zdGFuY2UuaW5pdGlhbGl6ZSgpO30pO30saW5pdGlhbGl6ZUluc3RhbmNlcygpe3RoaXMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aW5zdGFuY2UuaW5pdGlhbGl6ZSgpO30pO30sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTt0aGlzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKGluc3RhbmNlLmJvdW5kcyk7fSx0aGlzKTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXt0aGlzLml0ZXJPYmplY3RJbnN0YW5jZXMoZnVuY3Rpb24oaW5zdGFuY2Upe2luc3RhbmNlLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9KTt9LGFkZENhdGVnb3JpZXNUb0RpY3QoY2F0ZWdvcmllc0RpY3Qpe3RoaXMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7Y2F0ZWdvcmllc0RpY3RbaW5zdGFuY2UuY2F0ZWdvcnldPXRydWU7fSk7fX07cmV0dXJue09iamVjdENvbGxlY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NsYXNzIEFzeW5jU2xpY2VHcm91cCBleHRlbmRzIHRyLm1vZGVsLkV2ZW50Q29udGFpbmVye2NvbnN0cnVjdG9yKHBhcmVudENvbnRhaW5lcixvcHRfbmFtZSl7c3VwZXIoKTt0aGlzLnBhcmVudENvbnRhaW5lcl89cGFyZW50Q29udGFpbmVyO3RoaXMubmFtZV89b3B0X25hbWU7dGhpcy5zbGljZXM9W107dGhpcy52aWV3U3ViR3JvdXBzXz11bmRlZmluZWQ7dGhpcy5uZXN0ZWRMZXZlbF89MDt0aGlzLmhhc05lc3RlZFN1Ykdyb3Vwc189dHJ1ZTt0aGlzLnRpdGxlXz11bmRlZmluZWQ7fQpnZXQgcGFyZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyXzt9CmdldCBtb2RlbCgpe3JldHVybiB0aGlzLnBhcmVudENvbnRhaW5lcl8ucGFyZW50Lm1vZGVsO30KZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyXy5zdGFibGVJZCsnLkFzeW5jU2xpY2VHcm91cCc7fQpnZXQgdGl0bGUoKXtpZih0aGlzLm5lc3RlZF9sZXZlbF89PT0wKXtyZXR1cm4nPHJvb3Q+Jzt9CnJldHVybiB0aGlzLnRpdGxlXzt9CmdldFNldHRpbmdzS2V5KCl7aWYodGhpcy5uYW1lXz09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IHBhcmVudEtleT10aGlzLnBhcmVudENvbnRhaW5lcl8uZ2V0U2V0dGluZ3NLZXkoKTtpZihwYXJlbnRLZXk9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gcGFyZW50S2V5KycuJyt0aGlzLm5hbWVfO30KcHVzaChzbGljZSl7aWYodGhpcy52aWV3U3ViR3JvdXBzXyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdObyBuZXcgc2xpY2VzIGFyZSBhbGxvd2VkIHdoZW4gdmlldyBzdWItZ3JvdXBzIGFscmVhZHkgZm9ybWVkLicpO30Kc2xpY2UucGFyZW50Q29udGFpbmVyPXRoaXMucGFyZW50Q29udGFpbmVyO3RoaXMuc2xpY2VzLnB1c2goc2xpY2UpO3JldHVybiBzbGljZTt9CmdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5zbGljZXMubGVuZ3RoO30Kc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLmNoaWxkRXZlbnRzKCkpe3NsaWNlLnN0YXJ0Kz1hbW91bnQ7fX0KdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTtmb3IobGV0IGk9MDtpPHRoaXMuc2xpY2VzLmxlbmd0aDtpKyspe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMuc2xpY2VzW2ldLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNsaWNlc1tpXS5lbmQpO319CmF1dG9DbG9zZU9wZW5TbGljZXMoKXtjb25zdCBtYXhUaW1lc3RhbXA9dGhpcy5wYXJlbnRDb250YWluZXJfLnBhcmVudC5tb2RlbC5ib3VuZHMubWF4O2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLmNoaWxkRXZlbnRzKCkpe2lmKHNsaWNlLmRpZE5vdEZpbmlzaCl7c2xpY2UuZHVyYXRpb249bWF4VGltZXN0YW1wLXNsaWNlLnN0YXJ0O319fQpnZXQgdmlld1N1Ykdyb3Vwcygpe2lmKCF0aGlzLmhhc05lc3RlZFN1Ykdyb3Vwc198fHRoaXMubmVzdGVkTGV2ZWxfPT09Mil7cmV0dXJuW107fQppZih0aGlzLnZpZXdTdWJHcm91cHNfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy52aWV3U3ViR3JvdXBzXzt9CmNvbnN0IHN1Ykdyb3Vwc0J5VGl0bGU9bmV3IE1hcCgpO2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnNsaWNlcyl7bGV0IHN1Ykdyb3VwVGl0bGU9c2xpY2Uudmlld1N1Ykdyb3VwVGl0bGU7bGV0IGhhc05lc3RlZFN1Ykdyb3Vwcz1mYWxzZTtpZih0aGlzLm5lc3RlZExldmVsXz09PTAmJnNsaWNlLnZpZXdTdWJHcm91cEdyb3VwaW5nS2V5IT09dW5kZWZpbmVkKXtzdWJHcm91cFRpdGxlPXNsaWNlLnZpZXdTdWJHcm91cEdyb3VwaW5nS2V5O2hhc05lc3RlZFN1Ykdyb3Vwcz10cnVlO30KbGV0IHN1Ykdyb3VwPXN1Ykdyb3Vwc0J5VGl0bGUuZ2V0KHN1Ykdyb3VwVGl0bGUpO2lmKHN1Ykdyb3VwPT09dW5kZWZpbmVkKXtsZXQgbmFtZTtpZih0aGlzLm5hbWVfIT09dW5kZWZpbmVkKXtuYW1lPXRoaXMubmFtZV8rJy4nK3N1Ykdyb3VwVGl0bGU7fWVsc2V7bmFtZT1zdWJHcm91cFRpdGxlO30Kc3ViR3JvdXA9bmV3IEFzeW5jU2xpY2VHcm91cCh0aGlzLnBhcmVudENvbnRhaW5lcl8sbmFtZSk7c3ViR3JvdXAudGl0bGVfPXN1Ykdyb3VwVGl0bGU7c3ViR3JvdXAuaGFzTmVzdGVkU3ViR3JvdXBzXz1oYXNOZXN0ZWRTdWJHcm91cHM7c3ViR3JvdXAubmVzdGVkTGV2ZWxfPXRoaXMubmVzdGVkTGV2ZWxfKzE7c3ViR3JvdXBzQnlUaXRsZS5zZXQoc3ViR3JvdXBUaXRsZSxzdWJHcm91cCk7fQpzdWJHcm91cC5wdXNoKHNsaWNlKTt9CnRoaXMudmlld1N1Ykdyb3Vwc189QXJyYXkuZnJvbShzdWJHcm91cHNCeVRpdGxlLnZhbHVlcygpKTt0aGlzLnZpZXdTdWJHcm91cHNfLnNvcnQoKGEsYik9PmEudGl0bGUubG9jYWxlQ29tcGFyZShiLnRpdGxlKSk7cmV0dXJuIHRoaXMudmlld1N1Ykdyb3Vwc187fSpmaW5kVG9wbW9zdFNsaWNlc0luVGhpc0NvbnRhaW5lcihldmVudFByZWRpY2F0ZSxvcHRfdGhpcyl7Zm9yKGNvbnN0IHNsaWNlIG9mIHRoaXMuc2xpY2VzKXtpZihzbGljZS5pc1RvcExldmVsKXt5aWVsZCpzbGljZS5maW5kVG9wbW9zdFNsaWNlc1JlbGF0aXZlVG9UaGlzU2xpY2UoZXZlbnRQcmVkaWNhdGUsb3B0X3RoaXMpO319fSpjaGlsZEV2ZW50cygpe2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLnNsaWNlcyl7eWllbGQgc2xpY2U7eWllbGQqc2xpY2UuZW51bWVyYXRlQWxsRGVzY2VuZGVudHMoKTt9fSpjaGlsZEV2ZW50Q29udGFpbmVycygpe319CnJldHVybntBc3luY1NsaWNlR3JvdXAsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFNsaWNlPXRyLm1vZGVsLlNsaWNlO2Z1bmN0aW9uIFRocmVhZFNsaWNlKGNhdCx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3Msb3B0X2R1cmF0aW9uLG9wdF9jcHVTdGFydCxvcHRfY3B1RHVyYXRpb24sb3B0X2FyZ3NTdHJpcHBlZCxvcHRfYmluZElkKXtTbGljZS5jYWxsKHRoaXMsY2F0LHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyxvcHRfZHVyYXRpb24sb3B0X2NwdVN0YXJ0LG9wdF9jcHVEdXJhdGlvbixvcHRfYXJnc1N0cmlwcGVkLG9wdF9iaW5kSWQpO3RoaXMuc3ViU2xpY2VzPVtdO30KVGhyZWFkU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186U2xpY2UucHJvdG90eXBlLGdldCBvdmVybGFwcGluZ1NhbXBsZXMoKXtjb25zdCBzYW1wbGVzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2lmKCF0aGlzLnBhcmVudENvbnRhaW5lcnx8IXRoaXMucGFyZW50Q29udGFpbmVyLnNhbXBsZXMpe3JldHVybiBzYW1wbGVzO30KdGhpcy5wYXJlbnRDb250YWluZXIuc2FtcGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHNhbXBsZSl7aWYodGhpcy5zdGFydDw9c2FtcGxlLnN0YXJ0JiZzYW1wbGUuc3RhcnQ8PXRoaXMuZW5kKXtzYW1wbGVzLnB1c2goc2FtcGxlKTt9fSx0aGlzKTtyZXR1cm4gc2FtcGxlczt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFRocmVhZFNsaWNlLHtuYW1lOidzbGljZScscGx1cmFsTmFtZTonc2xpY2VzJ30pO3JldHVybntUaHJlYWRTbGljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBUaHJlYWRTbGljZT10ci5tb2RlbC5UaHJlYWRTbGljZTtmdW5jdGlvbiBnZXRTbGljZUxvKHMpe3JldHVybiBzLnN0YXJ0O30KZnVuY3Rpb24gZ2V0U2xpY2VIaShzKXtyZXR1cm4gcy5lbmQ7fQpmdW5jdGlvbiBTbGljZUdyb3VwKHBhcmVudENvbnRhaW5lcixvcHRfc2xpY2VDb25zdHJ1Y3RvcixvcHRfbmFtZSl7dHIubW9kZWwuRXZlbnRDb250YWluZXIuY2FsbCh0aGlzKTt0aGlzLnBhcmVudENvbnRhaW5lcl89cGFyZW50Q29udGFpbmVyO2NvbnN0IHNsaWNlQ29uc3RydWN0b3I9b3B0X3NsaWNlQ29uc3RydWN0b3J8fFRocmVhZFNsaWNlO3RoaXMuc2xpY2VDb25zdHJ1Y3Rvcj1zbGljZUNvbnN0cnVjdG9yO3RoaXMuc2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzPXRoaXMuc2xpY2VDb25zdHJ1Y3Rvci5zdWJUeXBlcztpZighdGhpcy5zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXMpe3Rocm93IG5ldyBFcnJvcignb3B0X3NsaWNlQ29uc3RydWN0b3IgbXVzdCBoYXZlIGEgc3VidHlwZSByZWdpc3RyeS4nKTt9CnRoaXMub3BlblBhcnRpYWxTbGljZXNfPVtdO3RoaXMuc2xpY2VzPVtdO3RoaXMudG9wTGV2ZWxTbGljZXM9W107dGhpcy5oYXZlVG9wTGV2ZWxTbGljZXNCZWVuQnVpbHQ9ZmFsc2U7dGhpcy5uYW1lXz1vcHRfbmFtZTtpZih0aGlzLm1vZGVsPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1NsaWNlR3JvdXAgbXVzdCBoYXZlIG1vZGVsIGRlZmluZWQuJyk7fX0KU2xpY2VHcm91cC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsZ2V0IHBhcmVudENvbnRhaW5lcigpe3JldHVybiB0aGlzLnBhcmVudENvbnRhaW5lcl87fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5wYXJlbnRDb250YWluZXJfLm1vZGVsO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMucGFyZW50Q29udGFpbmVyXy5zdGFibGVJZCsnLlNsaWNlR3JvdXAnO30sZ2V0U2V0dGluZ3NLZXkoKXtpZighdGhpcy5uYW1lXylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBhcmVudEtleT10aGlzLnBhcmVudENvbnRhaW5lcl8uZ2V0U2V0dGluZ3NLZXkoKTtpZighcGFyZW50S2V5KXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHBhcmVudEtleSsnLicrdGhpcy5uYW1lO30sZ2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLnNsaWNlcy5sZW5ndGg7fSxwdXNoU2xpY2Uoc2xpY2Upe3RoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0PWZhbHNlO3NsaWNlLnBhcmVudENvbnRhaW5lcj10aGlzLnBhcmVudENvbnRhaW5lcl87dGhpcy5zbGljZXMucHVzaChzbGljZSk7cmV0dXJuIHNsaWNlO30scHVzaFNsaWNlcyhzbGljZXMpe3RoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0PWZhbHNlO3NsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtzbGljZS5wYXJlbnRDb250YWluZXI9dGhpcy5wYXJlbnRDb250YWluZXJfO3RoaXMuc2xpY2VzLnB1c2goc2xpY2UpO30sdGhpcyk7fSxiZWdpblNsaWNlKGNhdGVnb3J5LHRpdGxlLHRzLG9wdF9hcmdzLG9wdF90dHMsb3B0X2FyZ3NTdHJpcHBlZCxvcHRfY29sb3JJZCxvcHRfYmluZElkKXtjb25zdCBjb2xvcklkPW9wdF9jb2xvcklkfHxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcodGl0bGUpO2NvbnN0IHNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcz10aGlzLnNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcztjb25zdCBzbGljZVR5cGU9c2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzLmdldENvbnN0cnVjdG9yKGNhdGVnb3J5LHRpdGxlKTtjb25zdCBzbGljZT1uZXcgc2xpY2VUeXBlKGNhdGVnb3J5LHRpdGxlLGNvbG9ySWQsdHMsb3B0X2FyZ3M/b3B0X2FyZ3M6e30sbnVsbCxvcHRfdHRzLHVuZGVmaW5lZCxvcHRfYXJnc1N0cmlwcGVkLG9wdF9iaW5kSWQpO3RoaXMub3BlblBhcnRpYWxTbGljZXNfLnB1c2goc2xpY2UpO3NsaWNlLmRpZE5vdEZpbmlzaD10cnVlO3RoaXMucHVzaFNsaWNlKHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxpc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cyl7aWYoIXRoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aClyZXR1cm4gdHJ1ZTtjb25zdCB0b3A9dGhpcy5vcGVuUGFydGlhbFNsaWNlc19bdGhpcy5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoLTFdO3JldHVybiB0cz49dG9wLnN0YXJ0O30sZ2V0IG9wZW5TbGljZUNvdW50KCl7cmV0dXJuIHRoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aDt9LGdldCBtb3N0UmVjZW50bHlPcGVuZWRQYXJ0aWFsU2xpY2UoKXtpZighdGhpcy5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMub3BlblBhcnRpYWxTbGljZXNfW3RoaXMub3BlblBhcnRpYWxTbGljZXNfLmxlbmd0aC0xXTt9LGVuZFNsaWNlKHRzLG9wdF90dHMsb3B0X2NvbG9ySWQpe2lmKCF0aGlzLm9wZW5TbGljZUNvdW50KXt0aHJvdyBuZXcgRXJyb3IoJ2VuZFNsaWNlIGNhbGxlZCB3aXRob3V0IGFuIG9wZW4gc2xpY2UnKTt9CmNvbnN0IHNsaWNlPXRoaXMub3BlblBhcnRpYWxTbGljZXNfW3RoaXMub3BlblNsaWNlQ291bnQtMV07dGhpcy5vcGVuUGFydGlhbFNsaWNlc18uc3BsaWNlKHRoaXMub3BlblNsaWNlQ291bnQtMSwxKTtpZih0czxzbGljZS5zdGFydCl7dGhyb3cgbmV3IEVycm9yKCdTbGljZSAnK3NsaWNlLnRpdGxlKycgZW5kIHRpbWUgaXMgYmVmb3JlIGl0cyBzdGFydC4nKTt9CnNsaWNlLmR1cmF0aW9uPXRzLXNsaWNlLnN0YXJ0O3NsaWNlLmRpZE5vdEZpbmlzaD1mYWxzZTtzbGljZS5jb2xvcklkPW9wdF9jb2xvcklkfHxzbGljZS5jb2xvcklkO2lmKG9wdF90dHMmJnNsaWNlLmNwdVN0YXJ0IT09dW5kZWZpbmVkKXtzbGljZS5jcHVEdXJhdGlvbj1vcHRfdHRzLXNsaWNlLmNwdVN0YXJ0O30KcmV0dXJuIHNsaWNlO30scHVzaENvbXBsZXRlU2xpY2UoY2F0ZWdvcnksdGl0bGUsdHMsZHVyYXRpb24sdHRzLGNwdUR1cmF0aW9uLG9wdF9hcmdzLG9wdF9hcmdzU3RyaXBwZWQsb3B0X2NvbG9ySWQsb3B0X2JpbmRJZCl7Y29uc3QgY29sb3JJZD1vcHRfY29sb3JJZHx8Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRpdGxlKTtjb25zdCBzbGljZUNvbnN0cnVjdG9yU3ViVHlwZXM9dGhpcy5zbGljZUNvbnN0cnVjdG9yU3ViVHlwZXM7Y29uc3Qgc2xpY2VUeXBlPXNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihjYXRlZ29yeSx0aXRsZSk7Y29uc3Qgc2xpY2U9bmV3IHNsaWNlVHlwZShjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHRzLG9wdF9hcmdzP29wdF9hcmdzOnt9LGR1cmF0aW9uLHR0cyxjcHVEdXJhdGlvbixvcHRfYXJnc1N0cmlwcGVkLG9wdF9iaW5kSWQpO2lmKGR1cmF0aW9uPT09dW5kZWZpbmVkKXtzbGljZS5kaWROb3RGaW5pc2g9dHJ1ZTt9CnRoaXMucHVzaFNsaWNlKHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxhdXRvQ2xvc2VPcGVuU2xpY2VzKCl7dGhpcy51cGRhdGVCb3VuZHMoKTtjb25zdCBtYXhUaW1lc3RhbXA9dGhpcy5ib3VuZHMubWF4O2ZvcihsZXQgc0k9MDtzSTx0aGlzLnNsaWNlcy5sZW5ndGg7c0krKyl7Y29uc3Qgc2xpY2U9dGhpcy5zbGljZXNbc0ldO2lmKHNsaWNlLmRpZE5vdEZpbmlzaCl7c2xpY2UuZHVyYXRpb249bWF4VGltZXN0YW1wLXNsaWNlLnN0YXJ0O319CnRoaXMub3BlblBhcnRpYWxTbGljZXNfPVtdO30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2ZvcihsZXQgc0k9MDtzSTx0aGlzLnNsaWNlcy5sZW5ndGg7c0krKyl7Y29uc3Qgc2xpY2U9dGhpcy5zbGljZXNbc0ldO3NsaWNlLnN0YXJ0PShzbGljZS5zdGFydCthbW91bnQpO319LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7Zm9yKGxldCBpPTA7aTx0aGlzLnNsaWNlcy5sZW5ndGg7aSsrKXt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNsaWNlc1tpXS5zdGFydCk7dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy5zbGljZXNbaV0uZW5kKTt9fSxjb3B5U2xpY2Uoc2xpY2Upe2NvbnN0IHNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcz10aGlzLnNsaWNlQ29uc3RydWN0b3JTdWJUeXBlcztjb25zdCBzbGljZVR5cGU9c2xpY2VDb25zdHJ1Y3RvclN1YlR5cGVzLmdldENvbnN0cnVjdG9yKHNsaWNlLmNhdGVnb3J5LHNsaWNlLnRpdGxlKTtjb25zdCBuZXdTbGljZT1uZXcgc2xpY2VUeXBlKHNsaWNlLmNhdGVnb3J5LHNsaWNlLnRpdGxlLHNsaWNlLmNvbG9ySWQsc2xpY2Uuc3RhcnQsc2xpY2UuYXJncyxzbGljZS5kdXJhdGlvbixzbGljZS5jcHVTdGFydCxzbGljZS5jcHVEdXJhdGlvbik7bmV3U2xpY2UuZGlkTm90RmluaXNoPXNsaWNlLmRpZE5vdEZpbmlzaDtyZXR1cm4gbmV3U2xpY2U7fSwqZmluZFRvcG1vc3RTbGljZXNJblRoaXNDb250YWluZXIoZXZlbnRQcmVkaWNhdGUsb3B0X3RoaXMpe2lmKCF0aGlzLmhhdmVUb3BMZXZlbFNsaWNlc0JlZW5CdWlsdCl7dGhyb3cgbmV3IEVycm9yKCdOb3BlJyk7fQpmb3IoY29uc3QgcyBvZiB0aGlzLnRvcExldmVsU2xpY2VzKXt5aWVsZCpzLmZpbmRUb3Btb3N0U2xpY2VzUmVsYXRpdmVUb1RoaXNTbGljZShldmVudFByZWRpY2F0ZSk7fX0sKmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5zbGljZXM7fSwqY2hpbGRFdmVudENvbnRhaW5lcnMoKXt9LCpnZXREZXNjZW5kYW50RXZlbnRzSW5Tb3J0ZWRSYW5nZXMocmFuZ2VzLG9wdF9jb250YWluZXJQcmVkaWNhdGUpe2lmKHJhbmdlcy5sZW5ndGg9PT0wfHwob3B0X2NvbnRhaW5lclByZWRpY2F0ZSE9PXVuZGVmaW5lZCYmIW9wdF9jb250YWluZXJQcmVkaWNhdGUodGhpcykpKXtyZXR1cm47fQpsZXQgcmFuZ2VJbmRleD0wO2xldCByYW5nZT1yYW5nZXNbcmFuZ2VJbmRleF07Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuY2hpbGRFdmVudHMoKSl7d2hpbGUoZXZlbnQuc3RhcnQ+cmFuZ2UubWF4KXtyYW5nZUluZGV4Kys7aWYocmFuZ2VJbmRleD49cmFuZ2VzLmxlbmd0aClyZXR1cm47cmFuZ2U9cmFuZ2VzW3JhbmdlSW5kZXhdO30KaWYoZXZlbnQuZW5kPj1yYW5nZS5taW4peWllbGQgZXZlbnQ7fX0sZ2V0U2xpY2VzT2ZOYW1lKHRpdGxlKXtjb25zdCBzbGljZXM9W107Zm9yKGxldCBpPTA7aTx0aGlzLnNsaWNlcy5sZW5ndGg7aSsrKXtpZih0aGlzLnNsaWNlc1tpXS50aXRsZT09PXRpdGxlKXtzbGljZXMucHVzaCh0aGlzLnNsaWNlc1tpXSk7fX0KcmV0dXJuIHNsaWNlczt9LGl0ZXJTbGljZXNJblRpbWVSYW5nZShjYWxsYmFjayxzdGFydCxlbmQpe2NvbnN0IHJldD1bXTt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMudG9wTGV2ZWxTbGljZXMsZnVuY3Rpb24ocyl7cmV0dXJuIHMuc3RhcnQ7fSxmdW5jdGlvbihzKXtyZXR1cm4gcy5kdXJhdGlvbjt9LHN0YXJ0LGVuZCxmdW5jdGlvbih0b3BMZXZlbFNsaWNlKXtjYWxsYmFjayh0b3BMZXZlbFNsaWNlKTtmb3IoY29uc3Qgc2xpY2Ugb2YgdG9wTGV2ZWxTbGljZS5lbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpKXtjYWxsYmFjayhzbGljZSk7fX0pO3JldHVybiByZXQ7fSxmaW5kRmlyc3RTbGljZSgpe2lmKCF0aGlzLmhhdmVUb3BMZXZlbFNsaWNlc0JlZW5CdWlsdCl7dGhyb3cgbmV3IEVycm9yKCdOb3BlJyk7fQppZigwPT09dGhpcy5zbGljZXMubGVuZ3RoKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuc2xpY2VzWzBdO30sZmluZFNsaWNlQXRUcyh0cyl7aWYoIXRoaXMuaGF2ZVRvcExldmVsU2xpY2VzQmVlbkJ1aWx0KXRocm93IG5ldyBFcnJvcignTm9wZScpO2xldCBpPXRyLmIuZmluZEluZGV4SW5Tb3J0ZWRDbG9zZWRJbnRlcnZhbHModGhpcy50b3BMZXZlbFNsaWNlcyxnZXRTbGljZUxvLGdldFNsaWNlSGksdHMpO2lmKGk9PT0tMXx8aT09PXRoaXMudG9wTGV2ZWxTbGljZXMubGVuZ3RoKXtyZXR1cm4gdW5kZWZpbmVkO30KbGV0IGN1clNsaWNlPXRoaXMudG9wTGV2ZWxTbGljZXNbaV07d2hpbGUodHJ1ZSl7aT10ci5iLmZpbmRJbmRleEluU29ydGVkQ2xvc2VkSW50ZXJ2YWxzKGN1clNsaWNlLnN1YlNsaWNlcyxnZXRTbGljZUxvLGdldFNsaWNlSGksdHMpO2lmKGk9PT0tMXx8aT09PWN1clNsaWNlLnN1YlNsaWNlcy5sZW5ndGgpe3JldHVybiBjdXJTbGljZTt9CmN1clNsaWNlPWN1clNsaWNlLnN1YlNsaWNlc1tpXTt9fSxmaW5kTmV4dFNsaWNlQWZ0ZXIodHMscmVmR3VpZCl7bGV0IGk9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2xpY2VzLGdldFNsaWNlTG8sdHMpO2lmKGk9PT10aGlzLnNsaWNlcy5sZW5ndGgpe3JldHVybiB1bmRlZmluZWQ7fQpmb3IoO2k8dGhpcy5zbGljZXMubGVuZ3RoO2krKyl7Y29uc3Qgc2xpY2U9dGhpcy5zbGljZXNbaV07aWYoc2xpY2Uuc3RhcnQ+dHMpcmV0dXJuIHNsaWNlO2lmKHNsaWNlLmd1aWQ8PXJlZkd1aWQpY29udGludWU7cmV0dXJuIHNsaWNlO30KcmV0dXJuIHVuZGVmaW5lZDt9LGhhc0NwdUR1cmF0aW9uXygpe2lmKHRoaXMuc2xpY2VzLnNvbWUoZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzbGljZS5jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZDt9KSlyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fSxjcmVhdGVTdWJTbGljZXMoKXt0aGlzLmhhdmVUb3BMZXZlbFNsaWNlc0JlZW5CdWlsdD10cnVlO3RoaXMuY3JlYXRlU3ViU2xpY2VzSW1wbF8oKTtpZighdGhpcy5oYXNDcHVEdXJhdGlvbl8oKSYmdGhpcy5wYXJlbnRDb250YWluZXIudGltZVNsaWNlcyl7dGhpcy5hZGRDcHVUaW1lVG9TdWJzbGljZXNfKHRoaXMucGFyZW50Q29udGFpbmVyLnRpbWVTbGljZXMpO30KdGhpcy5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7bGV0IHNlbGZUaW1lPXNsaWNlLmR1cmF0aW9uO2ZvcihsZXQgaT0wO2k8c2xpY2Uuc3ViU2xpY2VzLmxlbmd0aDtpKyspe3NlbGZUaW1lLT1zbGljZS5zdWJTbGljZXNbaV0uZHVyYXRpb247fQpzbGljZS5zZWxmVGltZT1zZWxmVGltZTtpZihzbGljZS5jcHVEdXJhdGlvbj09PXVuZGVmaW5lZClyZXR1cm47bGV0IGNwdVNlbGZUaW1lPXNsaWNlLmNwdUR1cmF0aW9uO2ZvcihsZXQgaT0wO2k8c2xpY2Uuc3ViU2xpY2VzLmxlbmd0aDtpKyspe2lmKHNsaWNlLnN1YlNsaWNlc1tpXS5jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7Y3B1U2VsZlRpbWUtPXNsaWNlLnN1YlNsaWNlc1tpXS5jcHVEdXJhdGlvbjt9fQpzbGljZS5jcHVTZWxmVGltZT1jcHVTZWxmVGltZTt9KTt9LGNyZWF0ZVN1YlNsaWNlc0ltcGxfKCl7Y29uc3QgcHJlY2lzaW9uVW5pdD10aGlzLm1vZGVsLmludHJpbnNpY1RpbWVVbml0O2Z1bmN0aW9uIGFkZFNsaWNlSWZCb3VuZHMocGFyZW50LGNoaWxkKXtpZihwYXJlbnQuYm91bmRzKGNoaWxkLHByZWNpc2lvblVuaXQpKXtjaGlsZC5wYXJlbnRTbGljZT1wYXJlbnQ7aWYocGFyZW50LnN1YlNsaWNlcz09PXVuZGVmaW5lZCl7cGFyZW50LnN1YlNsaWNlcz1bXTt9CnBhcmVudC5zdWJTbGljZXMucHVzaChjaGlsZCk7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fQppZighdGhpcy5zbGljZXMubGVuZ3RoKXJldHVybjtjb25zdCBvcHM9W107Zm9yKGxldCBpPTA7aTx0aGlzLnNsaWNlcy5sZW5ndGg7aSsrKXtpZih0aGlzLnNsaWNlc1tpXS5zdWJTbGljZXMpe3RoaXMuc2xpY2VzW2ldLnN1YlNsaWNlcy5zcGxpY2UoMCx0aGlzLnNsaWNlc1tpXS5zdWJTbGljZXMubGVuZ3RoKTt9Cm9wcy5wdXNoKGkpO30KY29uc3Qgb3JpZ2luYWxTbGljZXM9dGhpcy5zbGljZXM7b3BzLnNvcnQoZnVuY3Rpb24oaXgsaXkpe2NvbnN0IHg9b3JpZ2luYWxTbGljZXNbaXhdO2NvbnN0IHk9b3JpZ2luYWxTbGljZXNbaXldO2lmKHguc3RhcnQhPT15LnN0YXJ0KXtyZXR1cm4geC5zdGFydC15LnN0YXJ0O30KcmV0dXJuIGl4LWl5O30pO2NvbnN0IHNsaWNlcz1uZXcgQXJyYXkodGhpcy5zbGljZXMubGVuZ3RoKTtmb3IobGV0IGk9MDtpPG9wcy5sZW5ndGg7aSsrKXtzbGljZXNbaV09b3JpZ2luYWxTbGljZXNbb3BzW2ldXTt9CmxldCByb290U2xpY2U9c2xpY2VzWzBdO3RoaXMudG9wTGV2ZWxTbGljZXM9W107dGhpcy50b3BMZXZlbFNsaWNlcy5wdXNoKHJvb3RTbGljZSk7cm9vdFNsaWNlLmlzVG9wTGV2ZWw9dHJ1ZTtmb3IobGV0IGk9MTtpPHNsaWNlcy5sZW5ndGg7aSsrKXtjb25zdCBzbGljZT1zbGljZXNbaV07d2hpbGUocm9vdFNsaWNlIT09dW5kZWZpbmVkJiYoIWFkZFNsaWNlSWZCb3VuZHMocm9vdFNsaWNlLHNsaWNlKSkpe3Jvb3RTbGljZT1yb290U2xpY2UucGFyZW50U2xpY2U7fQppZihyb290U2xpY2U9PT11bmRlZmluZWQpe3RoaXMudG9wTGV2ZWxTbGljZXMucHVzaChzbGljZSk7c2xpY2UuaXNUb3BMZXZlbD10cnVlO30Kcm9vdFNsaWNlPXNsaWNlO30KdGhpcy5zbGljZXM9c2xpY2VzO30sYWRkQ3B1VGltZVRvU3Vic2xpY2VzXyh0aW1lU2xpY2VzKXtjb25zdCBTQ0hFRFVMSU5HX1NUQVRFPXRyLm1vZGVsLlNDSEVEVUxJTkdfU1RBVEU7bGV0IHNsaWNlSWR4PTA7dGltZVNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHRpbWVTbGljZSl7aWYodGltZVNsaWNlLnNjaGVkdWxpbmdTdGF0ZT09PVNDSEVEVUxJTkdfU1RBVEUuUlVOTklORyl7d2hpbGUoc2xpY2VJZHg8dGhpcy50b3BMZXZlbFNsaWNlcy5sZW5ndGgpe2lmKHRoaXMuYWRkQ3B1VGltZVRvU3Vic2xpY2VfKHRoaXMudG9wTGV2ZWxTbGljZXNbc2xpY2VJZHhdLHRpbWVTbGljZSkpe3NsaWNlSWR4Kys7fWVsc2V7YnJlYWs7fX19fSx0aGlzKTt9LGFkZENwdVRpbWVUb1N1YnNsaWNlXyhzbGljZSx0aW1lU2xpY2Upe2lmKHNsaWNlLnN0YXJ0PnRpbWVTbGljZS5lbmR8fHNsaWNlLmVuZDx0aW1lU2xpY2Uuc3RhcnQpe3JldHVybiBzbGljZS5lbmQ8PXRpbWVTbGljZS5lbmQ7fQpsZXQgZHVyYXRpb249dGltZVNsaWNlLmR1cmF0aW9uO2lmKHNsaWNlLnN0YXJ0PnRpbWVTbGljZS5zdGFydCl7ZHVyYXRpb24tPXNsaWNlLnN0YXJ0LXRpbWVTbGljZS5zdGFydDt9CmlmKHRpbWVTbGljZS5lbmQ+c2xpY2UuZW5kKXtkdXJhdGlvbi09dGltZVNsaWNlLmVuZC1zbGljZS5lbmQ7fQppZihzbGljZS5jcHVEdXJhdGlvbil7c2xpY2UuY3B1RHVyYXRpb24rPWR1cmF0aW9uO31lbHNle3NsaWNlLmNwdUR1cmF0aW9uPWR1cmF0aW9uO30KZm9yKGxldCBpPTA7aTxzbGljZS5zdWJTbGljZXMubGVuZ3RoO2krKyl7dGhpcy5hZGRDcHVUaW1lVG9TdWJzbGljZV8oc2xpY2Uuc3ViU2xpY2VzW2ldLHRpbWVTbGljZSk7fQpyZXR1cm4gc2xpY2UuZW5kPD10aW1lU2xpY2UuZW5kO319O1NsaWNlR3JvdXAubWVyZ2U9ZnVuY3Rpb24oZ3JvdXBBLGdyb3VwQil7aWYoZ3JvdXBBLm9wZW5QYXJ0aWFsU2xpY2VzXy5sZW5ndGg+MCl7dGhyb3cgbmV3IEVycm9yKCdncm91cEEgaGFzIG9wZW4gcGFydGlhbCBzbGljZXMnKTt9CmlmKGdyb3VwQi5vcGVuUGFydGlhbFNsaWNlc18ubGVuZ3RoPjApe3Rocm93IG5ldyBFcnJvcignZ3JvdXBCIGhhcyBvcGVuIHBhcnRpYWwgc2xpY2VzJyk7fQppZihncm91cEEucGFyZW50Q29udGFpbmVyIT09Z3JvdXBCLnBhcmVudENvbnRhaW5lcil7dGhyb3cgbmV3IEVycm9yKCdEaWZmZXJlbnQgcGFyZW50IHRocmVhZHMuIENhbm5vdCBtZXJnZScpO30KaWYoZ3JvdXBBLnNsaWNlQ29uc3RydWN0b3IhPT1ncm91cEIuc2xpY2VDb25zdHJ1Y3Rvcil7dGhyb3cgbmV3IEVycm9yKCdEaWZmZXJlbnQgc2xpY2UgY29uc3RydWN0b3JzLiBDYW5ub3QgbWVyZ2UnKTt9CmNvbnN0IHJlc3VsdD1uZXcgU2xpY2VHcm91cChncm91cEEucGFyZW50Q29udGFpbmVyLGdyb3VwQS5zbGljZUNvbnN0cnVjdG9yLGdyb3VwQS5uYW1lXyk7Y29uc3Qgc2xpY2VzQT1ncm91cEEuc2xpY2VzO2NvbnN0IHNsaWNlc0I9Z3JvdXBCLnNsaWNlcztsZXQgaWR4QT0wO2xldCBpZHhCPTA7Y29uc3Qgb3BlbkE9W107Y29uc3Qgb3BlbkI9W107Y29uc3Qgc3BsaXRPcGVuU2xpY2VzPWZ1bmN0aW9uKHdoZW4pe2ZvcihsZXQgaT0wO2k8b3BlbkIubGVuZ3RoO2krKyl7Y29uc3Qgb2xkU2xpY2U9b3BlbkJbaV07Y29uc3Qgb2xkRW5kPW9sZFNsaWNlLmVuZDtpZih3aGVuPG9sZFNsaWNlLnN0YXJ0fHxvbGRFbmQ8d2hlbil7dGhyb3cgbmV3IEVycm9yKCdzbGljZSBzaG91bGQgbm90IGJlIHNwbGl0Jyk7fQpjb25zdCBuZXdTbGljZT1yZXN1bHQuY29weVNsaWNlKG9sZFNsaWNlKTtuZXdTbGljZS5zdGFydD13aGVuO25ld1NsaWNlLmR1cmF0aW9uPW9sZEVuZC13aGVuO2lmKG5ld1NsaWNlLnRpdGxlLmluZGV4T2YoJyAoY29udC4pJyk9PT0tMSl7bmV3U2xpY2UudGl0bGUrPScgKGNvbnQuKSc7fQpvbGRTbGljZS5kdXJhdGlvbj13aGVuLW9sZFNsaWNlLnN0YXJ0O29wZW5CW2ldPW5ld1NsaWNlO3Jlc3VsdC5wdXNoU2xpY2UobmV3U2xpY2UpO319O2NvbnN0IGNsb3NlT3BlblNsaWNlcz1mdW5jdGlvbih1cFRvKXt3aGlsZShvcGVuQS5sZW5ndGg+MHx8b3BlbkIubGVuZ3RoPjApe2NvbnN0IG5leHRBPW9wZW5BW29wZW5BLmxlbmd0aC0xXTtjb25zdCBuZXh0Qj1vcGVuQltvcGVuQi5sZW5ndGgtMV07Y29uc3QgZW5kQT1uZXh0QSYmbmV4dEEuZW5kO2NvbnN0IGVuZEI9bmV4dEImJm5leHRCLmVuZDtpZigoZW5kQT09PXVuZGVmaW5lZHx8ZW5kQT51cFRvKSYmKGVuZEI9PT11bmRlZmluZWR8fGVuZEI+dXBUbykpe3JldHVybjt9CmlmKGVuZEI9PT11bmRlZmluZWR8fGVuZEE8ZW5kQil7c3BsaXRPcGVuU2xpY2VzKGVuZEEpO29wZW5BLnBvcCgpO31lbHNle29wZW5CLnBvcCgpO319fTt3aGlsZShpZHhBPHNsaWNlc0EubGVuZ3RofHxpZHhCPHNsaWNlc0IubGVuZ3RoKXtjb25zdCBzQT1zbGljZXNBW2lkeEFdO2NvbnN0IHNCPXNsaWNlc0JbaWR4Ql07bGV0IG5leHRTbGljZTtsZXQgaXNGcm9tQjtpZihzQT09PXVuZGVmaW5lZHx8KHNCIT09dW5kZWZpbmVkJiZzQS5zdGFydD5zQi5zdGFydCkpe25leHRTbGljZT1yZXN1bHQuY29weVNsaWNlKHNCKTtpc0Zyb21CPXRydWU7aWR4QisrO31lbHNle25leHRTbGljZT1yZXN1bHQuY29weVNsaWNlKHNBKTtpc0Zyb21CPWZhbHNlO2lkeEErKzt9CmNsb3NlT3BlblNsaWNlcyhuZXh0U2xpY2Uuc3RhcnQpO3Jlc3VsdC5wdXNoU2xpY2UobmV4dFNsaWNlKTtpZihpc0Zyb21CKXtvcGVuQi5wdXNoKG5leHRTbGljZSk7fWVsc2V7c3BsaXRPcGVuU2xpY2VzKG5leHRTbGljZS5zdGFydCk7b3BlbkEucHVzaChuZXh0U2xpY2UpO319CmNsb3NlT3BlblNsaWNlcygpO3JldHVybiByZXN1bHQ7fTtyZXR1cm57U2xpY2VHcm91cCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgQXN5bmNTbGljZT10ci5tb2RlbC5Bc3luY1NsaWNlO2NvbnN0IEFzeW5jU2xpY2VHcm91cD10ci5tb2RlbC5Bc3luY1NsaWNlR3JvdXA7Y29uc3QgU2xpY2VHcm91cD10ci5tb2RlbC5TbGljZUdyb3VwO2NvbnN0IFRocmVhZFNsaWNlPXRyLm1vZGVsLlRocmVhZFNsaWNlO2NvbnN0IFRocmVhZFRpbWVTbGljZT10ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2U7ZnVuY3Rpb24gVGhyZWFkKHBhcmVudCx0aWQpe2lmKCFwYXJlbnQpe3Rocm93IG5ldyBFcnJvcignUGFyZW50IG11c3QgYmUgcHJvdmlkZWQuJyk7fQp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMucGFyZW50PXBhcmVudDt0aGlzLnNvcnRJbmRleD0wO3RoaXMudGlkPXRpZDt0aGlzLm5hbWU9dW5kZWZpbmVkO3RoaXMuc2FtcGxlc189dW5kZWZpbmVkO3RoaXMuc2xpY2VHcm91cD1uZXcgU2xpY2VHcm91cCh0aGlzLFRocmVhZFNsaWNlLCdzbGljZXMnKTt0aGlzLnRpbWVTbGljZXM9dW5kZWZpbmVkO3RoaXMua2VybmVsU2xpY2VHcm91cD1uZXcgU2xpY2VHcm91cCh0aGlzLFRocmVhZFNsaWNlLCdrZXJuZWwtc2xpY2VzJyk7dGhpcy5hc3luY1NsaWNlR3JvdXA9bmV3IEFzeW5jU2xpY2VHcm91cCh0aGlzLCdhc3luYy1zbGljZXMnKTt9ClRocmVhZC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMucGFyZW50Lm1vZGVsO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMucGFyZW50LnN0YWJsZUlkKycuJyt0aGlzLnRpZDt9LGNvbXBhcmVUbyh0aGF0KXtyZXR1cm4gVGhyZWFkLmNvbXBhcmUodGhpcyx0aGF0KTt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe2lmKHRoaXMuc2xpY2VHcm91cC5sZW5ndGgpe3lpZWxkIHRoaXMuc2xpY2VHcm91cDt9CmlmKHRoaXMua2VybmVsU2xpY2VHcm91cC5sZW5ndGgpe3lpZWxkIHRoaXMua2VybmVsU2xpY2VHcm91cDt9CmlmKHRoaXMuYXN5bmNTbGljZUdyb3VwLmxlbmd0aCl7eWllbGQgdGhpcy5hc3luY1NsaWNlR3JvdXA7fX0sKmNoaWxkRXZlbnRzKCl7aWYodGhpcy50aW1lU2xpY2VzKXt5aWVsZCp0aGlzLnRpbWVTbGljZXM7fX0saXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYil7Y2IodGhpcyk7aWYodGhpcy5zbGljZUdyb3VwLmxlbmd0aCl7Y2IodGhpcy5zbGljZUdyb3VwKTt9CnRoaXMuYXN5bmNTbGljZUdyb3VwLnZpZXdTdWJHcm91cHMuZm9yRWFjaChjYik7fSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhpcy5zbGljZUdyb3VwLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTtpZih0aGlzLnRpbWVTbGljZXMpe2ZvcihsZXQgaT0wO2k8dGhpcy50aW1lU2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHNsaWNlPXRoaXMudGltZVNsaWNlc1tpXTtzbGljZS5zdGFydCs9YW1vdW50O319CnRoaXMua2VybmVsU2xpY2VHcm91cC5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7dGhpcy5hc3luY1NsaWNlR3JvdXAuc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpO30sZ2V0IGlzRW1wdHkoKXtpZih0aGlzLnNsaWNlR3JvdXAubGVuZ3RoKXJldHVybiBmYWxzZTtpZih0aGlzLnNsaWNlR3JvdXAub3BlblNsaWNlQ291bnQpcmV0dXJuIGZhbHNlO2lmKHRoaXMudGltZVNsaWNlcyYmdGhpcy50aW1lU2xpY2VzLmxlbmd0aClyZXR1cm4gZmFsc2U7aWYodGhpcy5rZXJuZWxTbGljZUdyb3VwLmxlbmd0aClyZXR1cm4gZmFsc2U7aWYodGhpcy5hc3luY1NsaWNlR3JvdXAubGVuZ3RoKXJldHVybiBmYWxzZTtpZih0aGlzLnNhbXBsZXNfLmxlbmd0aClyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO3RoaXMuc2xpY2VHcm91cC51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZSh0aGlzLnNsaWNlR3JvdXAuYm91bmRzKTt0aGlzLmtlcm5lbFNsaWNlR3JvdXAudXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHMuYWRkUmFuZ2UodGhpcy5rZXJuZWxTbGljZUdyb3VwLmJvdW5kcyk7dGhpcy5hc3luY1NsaWNlR3JvdXAudXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHMuYWRkUmFuZ2UodGhpcy5hc3luY1NsaWNlR3JvdXAuYm91bmRzKTtpZih0aGlzLnRpbWVTbGljZXMmJnRoaXMudGltZVNsaWNlcy5sZW5ndGgpe3RoaXMuYm91bmRzLmFkZFZhbHVlKHRoaXMudGltZVNsaWNlc1swXS5zdGFydCk7dGhpcy5ib3VuZHMuYWRkVmFsdWUodGhpcy50aW1lU2xpY2VzW3RoaXMudGltZVNsaWNlcy5sZW5ndGgtMV0uZW5kKTt9CmlmKHRoaXMuc2FtcGxlc18mJnRoaXMuc2FtcGxlc18ubGVuZ3RoKXt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfWzBdLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfW3RoaXMuc2FtcGxlc18ubGVuZ3RoLTFdLmVuZCk7fX0sYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCl7Zm9yKGxldCBpPTA7aTx0aGlzLnNsaWNlR3JvdXAubGVuZ3RoO2krKyl7Y2F0ZWdvcmllc0RpY3RbdGhpcy5zbGljZUdyb3VwLnNsaWNlc1tpXS5jYXRlZ29yeV09dHJ1ZTt9CmZvcihsZXQgaT0wO2k8dGhpcy5rZXJuZWxTbGljZUdyb3VwLmxlbmd0aDtpKyspe2NhdGVnb3JpZXNEaWN0W3RoaXMua2VybmVsU2xpY2VHcm91cC5zbGljZXNbaV0uY2F0ZWdvcnldPXRydWU7fQpmb3IobGV0IGk9MDtpPHRoaXMuYXN5bmNTbGljZUdyb3VwLmxlbmd0aDtpKyspe2NhdGVnb3JpZXNEaWN0W3RoaXMuYXN5bmNTbGljZUdyb3VwLnNsaWNlc1tpXS5jYXRlZ29yeV09dHJ1ZTt9CmlmKHRoaXMuc2FtcGxlc18pe2ZvcihsZXQgaT0wO2k8dGhpcy5zYW1wbGVzXy5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLnNhbXBsZXNfW2ldLmNhdGVnb3J5XT10cnVlO319fSxhdXRvQ2xvc2VPcGVuU2xpY2VzKCl7dGhpcy5zbGljZUdyb3VwLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt0aGlzLmFzeW5jU2xpY2VHcm91cC5hdXRvQ2xvc2VPcGVuU2xpY2VzKCk7dGhpcy5rZXJuZWxTbGljZUdyb3VwLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt9LG1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCl7aWYodGhpcy5rZXJuZWxTbGljZUdyb3VwLmxlbmd0aD4wKXtjb25zdCBuZXdTbGljZXM9U2xpY2VHcm91cC5tZXJnZSh0aGlzLnNsaWNlR3JvdXAsdGhpcy5rZXJuZWxTbGljZUdyb3VwKTt0aGlzLnNsaWNlR3JvdXAuc2xpY2VzPW5ld1NsaWNlcy5zbGljZXM7dGhpcy5rZXJuZWxTbGljZUdyb3VwPW5ldyBTbGljZUdyb3VwKHRoaXMpO3RoaXMudXBkYXRlQm91bmRzKCk7fX0sY3JlYXRlU3ViU2xpY2VzKCl7dGhpcy5zbGljZUdyb3VwLmNyZWF0ZVN1YlNsaWNlcygpO3RoaXMuc2FtcGxlc189dGhpcy5wYXJlbnQubW9kZWwuc2FtcGxlcy5maWx0ZXIoc2FtcGxlPT5zYW1wbGUudGhyZWFkPT09dGhpcyk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybiB0aGlzLm5hbWV8fHRoaXMudGlkO30sZ2V0IHVzZXJGcmllbmRseURldGFpbHMoKXtyZXR1cm4ndGlkOiAnK3RoaXMudGlkKwoodGhpcy5uYW1lPycsIG5hbWU6ICcrdGhpcy5uYW1lOicnKTt9LGdldFNldHRpbmdzS2V5KCl7aWYoIXRoaXMubmFtZSlyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBhcmVudEtleT10aGlzLnBhcmVudC5nZXRTZXR0aW5nc0tleSgpO2lmKCFwYXJlbnRLZXkpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcGFyZW50S2V5KycuJyt0aGlzLm5hbWU7fSxnZXRQcm9jZXNzKCl7cmV0dXJuIHRoaXMucGFyZW50O30saW5kZXhPZlRpbWVTbGljZSh0aW1lU2xpY2Upe2NvbnN0IGk9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMudGltZVNsaWNlcyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnN0YXJ0O30sdGltZVNsaWNlLnN0YXJ0KTtpZih0aGlzLnRpbWVTbGljZXNbaV0hPT10aW1lU2xpY2UpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gaTt9LHN1bU92ZXJUb3BsZXZlbFNsaWNlc0luUmFuZ2UocmFuZ2UsZnVuYyl7bGV0IHN1bT0wO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzLHNsaWNlPT5zbGljZS5zdGFydCxzbGljZT0+c2xpY2UuZW5kLHJhbmdlLm1pbixyYW5nZS5tYXgsc2xpY2U9PntsZXQgZnJhY3Rpb25PZlNsaWNlSW5zaWRlUmFuZ2VPZkludGVyZXN0PTE7aWYoc2xpY2UuZHVyYXRpb24+MCl7Y29uc3QgaW50ZXJzZWN0aW9uPXJhbmdlLmZpbmRJbnRlcnNlY3Rpb24oc2xpY2UucmFuZ2UpO2ZyYWN0aW9uT2ZTbGljZUluc2lkZVJhbmdlT2ZJbnRlcmVzdD1pbnRlcnNlY3Rpb24uZHVyYXRpb24vc2xpY2UuZHVyYXRpb247fQpzdW0rPWZ1bmMoc2xpY2UpKmZyYWN0aW9uT2ZTbGljZUluc2lkZVJhbmdlT2ZJbnRlcmVzdDt9KTtyZXR1cm4gc3VtO30sZ2V0Q3B1VGltZUZvclJhbmdlKHJhbmdlKXtyZXR1cm4gdGhpcy5zdW1PdmVyVG9wbGV2ZWxTbGljZXNJblJhbmdlKHJhbmdlLHNsaWNlPT5zbGljZS5jcHVEdXJhdGlvbnx8MCk7fSxnZXROdW1Ub3BsZXZlbFNsaWNlc0ZvclJhbmdlKHJhbmdlKXtyZXR1cm4gdGhpcy5zdW1PdmVyVG9wbGV2ZWxTbGljZXNJblJhbmdlKHJhbmdlLHNsaWNlPT4xKTt9LGdldFNjaGVkdWxpbmdTdGF0c0ZvclJhbmdlKHN0YXJ0LGVuZCl7Y29uc3Qgc3RhdHM9e307aWYoIXRoaXMudGltZVNsaWNlcylyZXR1cm4gc3RhdHM7ZnVuY3Rpb24gYWRkU3RhdHNGb3JTbGljZSh0aHJlYWRUaW1lU2xpY2Upe2NvbnN0IG92ZXJsYXBTdGFydD1NYXRoLm1heCh0aHJlYWRUaW1lU2xpY2Uuc3RhcnQsc3RhcnQpO2NvbnN0IG92ZXJsYXBFbmQ9TWF0aC5taW4odGhyZWFkVGltZVNsaWNlLmVuZCxlbmQpO2NvbnN0IHNjaGVkdWxpbmdTdGF0ZT10aHJlYWRUaW1lU2xpY2Uuc2NoZWR1bGluZ1N0YXRlO2lmKCEoc2NoZWR1bGluZ1N0YXRlIGluIHN0YXRzKSlzdGF0c1tzY2hlZHVsaW5nU3RhdGVdPTA7c3RhdHNbc2NoZWR1bGluZ1N0YXRlXSs9b3ZlcmxhcEVuZC1vdmVybGFwU3RhcnQ7fQp0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMudGltZVNsaWNlcyxmdW5jdGlvbih4KXtyZXR1cm4geC5zdGFydDt9LGZ1bmN0aW9uKHgpe3JldHVybiB4LmVuZDt9LHN0YXJ0LGVuZCxhZGRTdGF0c0ZvclNsaWNlKTtyZXR1cm4gc3RhdHM7fSxnZXQgc2FtcGxlcygpe3JldHVybiB0aGlzLnNhbXBsZXNfO30sZ2V0IHR5cGUoKXtjb25zdCByZT0vXlteMC05fFwvXSsvO2NvbnN0IG1hdGNoZXM9cmUuZXhlYyh0aGlzLm5hbWUpO2lmKG1hdGNoZXMmJm1hdGNoZXNbMF0pcmV0dXJuIG1hdGNoZXNbMF07dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZGV0ZXJtaW5lIHRocmVhZCB0eXBlIGZvciB0aHJlYWQgbmFtZSAnKwp0aGlzLm5hbWUpO319O1RocmVhZC5jb21wYXJlPWZ1bmN0aW9uKHgseSl7bGV0IHRtcD14LnBhcmVudC5jb21wYXJlVG8oeS5wYXJlbnQpO2lmKHRtcClyZXR1cm4gdG1wO3RtcD14LnNvcnRJbmRleC15LnNvcnRJbmRleDtpZih0bXApcmV0dXJuIHRtcDtpZih4Lm5hbWUhPT11bmRlZmluZWQpe2lmKHkubmFtZSE9PXVuZGVmaW5lZCl7dG1wPXgubmFtZS5sb2NhbGVDb21wYXJlKHkubmFtZSk7fWVsc2V7dG1wPS0xO319ZWxzZSBpZih5Lm5hbWUhPT11bmRlZmluZWQpe3RtcD0xO30KaWYodG1wKXJldHVybiB0bXA7cmV0dXJuIHgudGlkLXkudGlkO307cmV0dXJue1RocmVhZCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgVGhyZWFkPXRyLm1vZGVsLlRocmVhZDtjb25zdCBDb3VudGVyPXRyLm1vZGVsLkNvdW50ZXI7ZnVuY3Rpb24gUHJvY2Vzc0Jhc2UobW9kZWwpe2lmKCFtb2RlbCl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSBtb2RlbCcpO30KdHIubW9kZWwuRXZlbnRDb250YWluZXIuY2FsbCh0aGlzKTt0aGlzLm1vZGVsPW1vZGVsO3RoaXMudGhyZWFkcz17fTt0aGlzLmNvdW50ZXJzPXt9O3RoaXMub2JqZWN0cz1uZXcgdHIubW9kZWwuT2JqZWN0Q29sbGVjdGlvbih0aGlzKTt0aGlzLnNvcnRJbmRleD0wO30KUHJvY2Vzc0Jhc2UuY29tcGFyZT1mdW5jdGlvbih4LHkpe3JldHVybiB4LnNvcnRJbmRleC15LnNvcnRJbmRleDt9O1Byb2Nlc3NCYXNlLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkV2ZW50Q29udGFpbmVyLnByb3RvdHlwZSxnZXQgc3RhYmxlSWQoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7eWllbGQqT2JqZWN0LnZhbHVlcyh0aGlzLnRocmVhZHMpO3lpZWxkKk9iamVjdC52YWx1ZXModGhpcy5jb3VudGVycyk7eWllbGQgdGhpcy5vYmplY3RzO30saXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYil7Y2IodGhpcyk7Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe3RoaXMudGhyZWFkc1t0aWRdLml0ZXJhdGVBbGxQZXJzaXN0YWJsZU9iamVjdHMoY2IpO319LGdldCBudW1UaHJlYWRzKCl7bGV0IG49MDtmb3IoY29uc3QgcCBpbiB0aGlzLnRocmVhZHMpe24rKzt9CnJldHVybiBuO30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2Zvcihjb25zdCBjaGlsZCBvZiB0aGlzLmNoaWxkRXZlbnRDb250YWluZXJzKCkpe2NoaWxkLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KTt9fSxhdXRvQ2xvc2VPcGVuU2xpY2VzKCl7Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNbdGlkXTt0aHJlYWQuYXV0b0Nsb3NlT3BlblNsaWNlcygpO319LGF1dG9EZWxldGVPYmplY3RzKG1heFRpbWVzdGFtcCl7dGhpcy5vYmplY3RzLmF1dG9EZWxldGVPYmplY3RzKG1heFRpbWVzdGFtcCk7fSxwcmVJbml0aWFsaXplT2JqZWN0cygpe3RoaXMub2JqZWN0cy5wcmVJbml0aWFsaXplQWxsT2JqZWN0cygpO30saW5pdGlhbGl6ZU9iamVjdHMoKXt0aGlzLm9iamVjdHMuaW5pdGlhbGl6ZUFsbE9iamVjdHMoKTt9LG1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCl7Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLnRocmVhZHMpe2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNbdGlkXTt0aHJlYWQubWVyZ2VLZXJuZWxXaXRoVXNlcmxhbmQoKTt9fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXt0aGlzLnRocmVhZHNbdGlkXS51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZSh0aGlzLnRocmVhZHNbdGlkXS5ib3VuZHMpO30KZm9yKGNvbnN0IGlkIGluIHRoaXMuY291bnRlcnMpe3RoaXMuY291bnRlcnNbaWRdLnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKHRoaXMuY291bnRlcnNbaWRdLmJvdW5kcyk7fQp0aGlzLm9iamVjdHMudXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHMuYWRkUmFuZ2UodGhpcy5vYmplY3RzLmJvdW5kcyk7fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXtmb3IoY29uc3QgdGlkIGluIHRoaXMudGhyZWFkcyl7dGhpcy50aHJlYWRzW3RpZF0uYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCk7fQpmb3IoY29uc3QgaWQgaW4gdGhpcy5jb3VudGVycyl7Y2F0ZWdvcmllc0RpY3RbdGhpcy5jb3VudGVyc1tpZF0uY2F0ZWdvcnldPXRydWU7fQp0aGlzLm9iamVjdHMuYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCk7fSxmaW5kQWxsVGhyZWFkc01hdGNoaW5nKHByZWRpY2F0ZSxvcHRfdGhpcyl7Y29uc3QgdGhyZWFkcz1bXTtmb3IoY29uc3QgdGlkIGluIHRoaXMudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXRoaXMudGhyZWFkc1t0aWRdO2lmKHByZWRpY2F0ZS5jYWxsKG9wdF90aGlzLHRocmVhZCkpe3RocmVhZHMucHVzaCh0aHJlYWQpO319CnJldHVybiB0aHJlYWRzO30sZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKXtjb25zdCB0aHJlYWRzPXRoaXMuZmluZEFsbFRocmVhZHNNYXRjaGluZyhmdW5jdGlvbih0aHJlYWQpe2lmKCF0aHJlYWQubmFtZSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRocmVhZC5uYW1lPT09bmFtZTt9KTtyZXR1cm4gdGhyZWFkczt9LGZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZChuYW1lKXtjb25zdCB0aHJlYWRzPXRoaXMuZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKTtpZih0aHJlYWRzLmxlbmd0aD09PTApcmV0dXJuIHVuZGVmaW5lZDtpZih0aHJlYWRzLmxlbmd0aD4xKXt0aHJvdyBuZXcgRXJyb3IoJ0V4cGVjdGVkIG5vIG1vcmUgdGhhbiBvbmUgJytuYW1lKTt9CnJldHVybiB0aHJlYWRzWzBdO30scHJ1bmVFbXB0eUNvbnRhaW5lcnMoKXtjb25zdCB0aHJlYWRzVG9LZWVwPXt9O2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXtjb25zdCB0aHJlYWQ9dGhpcy50aHJlYWRzW3RpZF07aWYoIXRocmVhZC5pc0VtcHR5KXt0aHJlYWRzVG9LZWVwW3RpZF09dGhyZWFkO319CnRoaXMudGhyZWFkcz10aHJlYWRzVG9LZWVwO30sZ2V0VGhyZWFkKHRpZCl7cmV0dXJuIHRoaXMudGhyZWFkc1t0aWRdO30sZ2V0T3JDcmVhdGVUaHJlYWQodGlkKXtpZighdGhpcy50aHJlYWRzW3RpZF0pe3RoaXMudGhyZWFkc1t0aWRdPW5ldyBUaHJlYWQodGhpcyx0aWQpO30KcmV0dXJuIHRoaXMudGhyZWFkc1t0aWRdO30sZ2V0T3JDcmVhdGVDb3VudGVyKGNhdCxuYW1lKXtjb25zdCBpZD1jYXQrJy4nK25hbWU7aWYoIXRoaXMuY291bnRlcnNbaWRdKXt0aGlzLmNvdW50ZXJzW2lkXT1uZXcgQ291bnRlcih0aGlzLGlkLGNhdCxuYW1lKTt9CnJldHVybiB0aGlzLmNvdW50ZXJzW2lkXTt9LGdldFNldHRpbmdzS2V5KCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGNyZWF0ZVN1YlNsaWNlcygpe2Zvcihjb25zdCB0aWQgaW4gdGhpcy50aHJlYWRzKXt0aGlzLnRocmVhZHNbdGlkXS5jcmVhdGVTdWJTbGljZXMoKTt9fX07cmV0dXJue1Byb2Nlc3NCYXNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IENvdW50ZXI9dHIubW9kZWwuQ291bnRlcjtjb25zdCBDcHVTbGljZT10ci5tb2RlbC5DcHVTbGljZTtmdW5jdGlvbiBDcHUoa2VybmVsLG51bWJlcil7aWYoa2VybmVsPT09dW5kZWZpbmVkfHxudW1iZXI9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyBhcmd1bWVudHMnKTt9CnRoaXMua2VybmVsPWtlcm5lbDt0aGlzLmNwdU51bWJlcj1udW1iZXI7dGhpcy5zbGljZXM9W107dGhpcy5jb3VudGVycz17fTt0aGlzLmJvdW5kc189bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuc2FtcGxlc189dW5kZWZpbmVkO3RoaXMubGFzdEFjdGl2ZVRpbWVzdGFtcF89dW5kZWZpbmVkO3RoaXMubGFzdEFjdGl2ZVRocmVhZF89dW5kZWZpbmVkO3RoaXMubGFzdEFjdGl2ZU5hbWVfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVBcmdzXz11bmRlZmluZWQ7fQpDcHUucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBzYW1wbGVzKCl7cmV0dXJuIHRoaXMuc2FtcGxlc187fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidDUFUgJyt0aGlzLmNwdU51bWJlcjt9LCpmaW5kVG9wbW9zdFNsaWNlc0luVGhpc0NvbnRhaW5lcihldmVudFByZWRpY2F0ZSxvcHRfdGhpcyl7Zm9yKGNvbnN0IHMgb2YgdGhpcy5zbGljZXMpe3lpZWxkKnMuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKGV2ZW50UHJlZGljYXRlLG9wdF90aGlzKTt9fSwqY2hpbGRFdmVudHMoKXt5aWVsZCp0aGlzLnNsaWNlcztpZih0aGlzLnNhbXBsZXNfKXt5aWVsZCp0aGlzLnNhbXBsZXNfO319LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe3lpZWxkKk9iamVjdC52YWx1ZXModGhpcy5jb3VudGVycyk7fSxnZXRPckNyZWF0ZUNvdW50ZXIoY2F0LG5hbWUpe2NvbnN0IGlkPWNhdCsnLicrbmFtZTtpZighdGhpcy5jb3VudGVyc1tpZF0pe3RoaXMuY291bnRlcnNbaWRdPW5ldyBDb3VudGVyKHRoaXMsaWQsY2F0LG5hbWUpO30KcmV0dXJuIHRoaXMuY291bnRlcnNbaWRdO30sZ2V0Q291bnRlcihjYXQsbmFtZSl7Y29uc3QgaWQ9Y2F0KycuJytuYW1lO2lmKCF0aGlzLmNvdW50ZXJzW2lkXSl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybiB0aGlzLmNvdW50ZXJzW2lkXTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IHNJPTA7c0k8dGhpcy5zbGljZXMubGVuZ3RoO3NJKyspe3RoaXMuc2xpY2VzW3NJXS5zdGFydD0odGhpcy5zbGljZXNbc0ldLnN0YXJ0K2Ftb3VudCk7fQpmb3IoY29uc3QgaWQgaW4gdGhpcy5jb3VudGVycyl7dGhpcy5jb3VudGVyc1tpZF0uc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpO319LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzXy5yZXNldCgpO2lmKHRoaXMuc2xpY2VzLmxlbmd0aCl7dGhpcy5ib3VuZHNfLmFkZFZhbHVlKHRoaXMuc2xpY2VzWzBdLnN0YXJ0KTt0aGlzLmJvdW5kc18uYWRkVmFsdWUodGhpcy5zbGljZXNbdGhpcy5zbGljZXMubGVuZ3RoLTFdLmVuZCk7fQpmb3IoY29uc3QgaWQgaW4gdGhpcy5jb3VudGVycyl7dGhpcy5jb3VudGVyc1tpZF0udXBkYXRlQm91bmRzKCk7dGhpcy5ib3VuZHNfLmFkZFJhbmdlKHRoaXMuY291bnRlcnNbaWRdLmJvdW5kcyk7fQppZih0aGlzLnNhbXBsZXNfJiZ0aGlzLnNhbXBsZXNfLmxlbmd0aCl7dGhpcy5ib3VuZHNfLmFkZFZhbHVlKHRoaXMuc2FtcGxlc19bMF0uc3RhcnQpO3RoaXMuYm91bmRzXy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfW3RoaXMuc2FtcGxlc18ubGVuZ3RoLTFdLmVuZCk7fX0sY3JlYXRlU3ViU2xpY2VzKCl7dGhpcy5zYW1wbGVzXz10aGlzLmtlcm5lbC5tb2RlbC5zYW1wbGVzLmZpbHRlcihmdW5jdGlvbihzYW1wbGUpe3JldHVybiBzYW1wbGUuY3B1PT09dGhpczt9LHRoaXMpO30sYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCl7Zm9yKGxldCBpPTA7aTx0aGlzLnNsaWNlcy5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLnNsaWNlc1tpXS5jYXRlZ29yeV09dHJ1ZTt9CmZvcihjb25zdCBpZCBpbiB0aGlzLmNvdW50ZXJzKXtjYXRlZ29yaWVzRGljdFt0aGlzLmNvdW50ZXJzW2lkXS5jYXRlZ29yeV09dHJ1ZTt9CmZvcihsZXQgaT0wO2k8dGhpcy5zYW1wbGVzXy5sZW5ndGg7aSsrKXtjYXRlZ29yaWVzRGljdFt0aGlzLnNhbXBsZXNfW2ldLmNhdGVnb3J5XT10cnVlO319LGluZGV4T2YoY3B1U2xpY2Upe2NvbnN0IGk9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2xpY2VzLGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2Uuc3RhcnQ7fSxjcHVTbGljZS5zdGFydCk7aWYodGhpcy5zbGljZXNbaV0hPT1jcHVTbGljZSlyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBpO30sY2xvc2VBY3RpdmVUaHJlYWQoZW5kVGltZXN0YW1wLGFyZ3Mpe2lmKHRoaXMubGFzdEFjdGl2ZVRocmVhZF89PT11bmRlZmluZWR8fHRoaXMubGFzdEFjdGl2ZVRocmVhZF89PT0wKXtyZXR1cm47fQppZihlbmRUaW1lc3RhbXA8dGhpcy5sYXN0QWN0aXZlVGltZXN0YW1wXyl7dGhyb3cgbmV3IEVycm9yKCdUaGUgZW5kIHRpbWVzdGFtcCBvZiBhIHRocmVhZCBydW5uaW5nIG9uIENQVSAnKwp0aGlzLmNwdU51bWJlcisnIGlzIGJlZm9yZSBpdHMgc3RhcnQgdGltZXN0YW1wLicpO30KZm9yKGNvbnN0IGtleSBpbiBhcmdzKXt0aGlzLmxhc3RBY3RpdmVBcmdzX1trZXldPWFyZ3Nba2V5XTt9CmNvbnN0IGR1cmF0aW9uPWVuZFRpbWVzdGFtcC10aGlzLmxhc3RBY3RpdmVUaW1lc3RhbXBfO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5DcHVTbGljZSgnJyx0aGlzLmxhc3RBY3RpdmVOYW1lXyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcodGhpcy5sYXN0QWN0aXZlTmFtZV8pLHRoaXMubGFzdEFjdGl2ZVRpbWVzdGFtcF8sdGhpcy5sYXN0QWN0aXZlQXJnc18sZHVyYXRpb24pO3NsaWNlLmNwdT10aGlzO3RoaXMuc2xpY2VzLnB1c2goc2xpY2UpO3RoaXMubGFzdEFjdGl2ZVRpbWVzdGFtcF89dW5kZWZpbmVkO3RoaXMubGFzdEFjdGl2ZVRocmVhZF89dW5kZWZpbmVkO3RoaXMubGFzdEFjdGl2ZU5hbWVfPXVuZGVmaW5lZDt0aGlzLmxhc3RBY3RpdmVBcmdzXz11bmRlZmluZWQ7fSxzd2l0Y2hBY3RpdmVUaHJlYWQodGltZXN0YW1wLG9sZFRocmVhZEFyZ3MsbmV3VGhyZWFkSWQsbmV3VGhyZWFkTmFtZSxuZXdUaHJlYWRBcmdzKXt0aGlzLmNsb3NlQWN0aXZlVGhyZWFkKHRpbWVzdGFtcCxvbGRUaHJlYWRBcmdzKTt0aGlzLmxhc3RBY3RpdmVUaW1lc3RhbXBfPXRpbWVzdGFtcDt0aGlzLmxhc3RBY3RpdmVUaHJlYWRfPW5ld1RocmVhZElkO3RoaXMubGFzdEFjdGl2ZU5hbWVfPW5ld1RocmVhZE5hbWU7dGhpcy5sYXN0QWN0aXZlQXJnc189bmV3VGhyZWFkQXJnczt9LGdldEZyZXFTdGF0c0ZvclJhbmdlKHJhbmdlKXtjb25zdCBzdGF0cz17fTtmdW5jdGlvbiBhZGRTdGF0c0ZvckZyZXEoZnJlcVNhbXBsZSxpbmRleCl7Y29uc3QgZnJlcUVuZD0oaW5kZXg8ZnJlcVNhbXBsZS5zZXJpZXNfLmxlbmd0aC0xKT9mcmVxU2FtcGxlLnNlcmllc18uc2FtcGxlc19baW5kZXgrMV0udGltZXN0YW1wOnJhbmdlLm1heDtjb25zdCBmcmVxUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGZyZXFTYW1wbGUudGltZXN0YW1wLGZyZXFFbmQpO2NvbnN0IGludGVyc2VjdGlvbj1mcmVxUmFuZ2UuZmluZEludGVyc2VjdGlvbihyYW5nZSk7aWYoIShmcmVxU2FtcGxlLnZhbHVlIGluIHN0YXRzKSl7c3RhdHNbZnJlcVNhbXBsZS52YWx1ZV09MDt9CnN0YXRzW2ZyZXFTYW1wbGUudmFsdWVdKz1pbnRlcnNlY3Rpb24uZHVyYXRpb247fQpjb25zdCBmcmVxQ291bnRlcj10aGlzLmdldENvdW50ZXIoJycsJ0Nsb2NrIEZyZXF1ZW5jeScpO2lmKGZyZXFDb3VudGVyIT09dW5kZWZpbmVkKXtjb25zdCBmcmVxU2VyaWVzPWZyZXFDb3VudGVyLmdldFNlcmllcygwKTtpZighZnJlcVNlcmllcylyZXR1cm47dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyhmcmVxU2VyaWVzLnNhbXBsZXNfLGZ1bmN0aW9uKHgpe3JldHVybiB4LnRpbWVzdGFtcDt9LGZ1bmN0aW9uKHgsaW5kZXgpe2lmKGluZGV4PGZyZXFTZXJpZXMubGVuZ3RoLTEpe3JldHVybiBmcmVxU2VyaWVzLnNhbXBsZXNfW2luZGV4KzFdLnRpbWVzdGFtcDt9CnJldHVybiByYW5nZS5tYXg7fSxyYW5nZS5taW4scmFuZ2UubWF4LGFkZFN0YXRzRm9yRnJlcSk7fQpyZXR1cm4gc3RhdHM7fX07Q3B1LmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5jcHVOdW1iZXIteS5jcHVOdW1iZXI7fTtyZXR1cm57Q3B1LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBFdmVudD10ci5tb2RlbC5FdmVudDtjb25zdCBFdmVudFJlZ2lzdHJ5PXRyLm1vZGVsLkV2ZW50UmVnaXN0cnk7ZnVuY3Rpb24gUG93ZXJTYW1wbGUoc2VyaWVzLHN0YXJ0LHBvd2VySW5XKXtFdmVudC5jYWxsKHRoaXMpO3RoaXMuc2VyaWVzXz1zZXJpZXM7dGhpcy5zdGFydF89cGFyc2VGbG9hdChzdGFydCk7dGhpcy5wb3dlckluV189cGFyc2VGbG9hdChwb3dlckluVyk7fQpQb3dlclNhbXBsZS5wcm90b3R5cGU9e19fcHJvdG9fXzpFdmVudC5wcm90b3R5cGUsZ2V0IHNlcmllcygpe3JldHVybiB0aGlzLnNlcmllc187fSxnZXQgc3RhcnQoKXtyZXR1cm4gdGhpcy5zdGFydF87fSxzZXQgc3RhcnQodmFsdWUpe3RoaXMuc3RhcnRfPXZhbHVlO30sZ2V0IHBvd2VySW5XKCl7cmV0dXJuIHRoaXMucG93ZXJJbldfO30sc2V0IHBvd2VySW5XKHZhbHVlKXt0aGlzLnBvd2VySW5XXz12YWx1ZTt9LGFkZEJvdW5kc1RvUmFuZ2UocmFuZ2Upe3JhbmdlLmFkZFZhbHVlKHRoaXMuc3RhcnQpO319O0V2ZW50UmVnaXN0cnkucmVnaXN0ZXIoUG93ZXJTYW1wbGUse25hbWU6J3Bvd2VyU2FtcGxlJyxwbHVyYWxOYW1lOidwb3dlclNhbXBsZXMnfSk7cmV0dXJue1Bvd2VyU2FtcGxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBQb3dlclNhbXBsZT10ci5tb2RlbC5Qb3dlclNhbXBsZTtmdW5jdGlvbiBQb3dlclNlcmllcyhkZXZpY2Upe3RyLm1vZGVsLkV2ZW50Q29udGFpbmVyLmNhbGwodGhpcyk7dGhpcy5kZXZpY2VfPWRldmljZTt0aGlzLnNhbXBsZXNfPVtdO30KUG93ZXJTZXJpZXMucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldCBkZXZpY2UoKXtyZXR1cm4gdGhpcy5kZXZpY2VfO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCBzdGFibGVJZCgpe3JldHVybiB0aGlzLmRldmljZV8uc3RhYmxlSWQrJy5Qb3dlclNlcmllcyc7fSxhZGRQb3dlclNhbXBsZSh0cyx2YWwpe2NvbnN0IHNhbXBsZT1uZXcgUG93ZXJTYW1wbGUodGhpcyx0cyx2YWwpO3RoaXMuc2FtcGxlc18ucHVzaChzYW1wbGUpO3JldHVybiBzYW1wbGU7fSxnZXRFbmVyZ3lDb25zdW1lZEluSihzdGFydCxlbmQpe2NvbnN0IG1lYXN1cmVtZW50UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0LGVuZCk7bGV0IGVuZXJneUNvbnN1bWVkSW5KPTA7bGV0IHN0YXJ0SW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2FtcGxlcyx4PT54LnN0YXJ0LHN0YXJ0KS0xO2NvbnN0IGVuZEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxlbmQpO2lmKHN0YXJ0SW5kZXg8MCl7c3RhcnRJbmRleD0wO30KZm9yKGxldCBpPXN0YXJ0SW5kZXg7aTxlbmRJbmRleDtpKyspe2NvbnN0IHNhbXBsZT10aGlzLnNhbXBsZXNbaV07Y29uc3QgbmV4dFNhbXBsZT10aGlzLnNhbXBsZXNbaSsxXTtjb25zdCBzYW1wbGVSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7c2FtcGxlUmFuZ2UuYWRkVmFsdWUoc2FtcGxlLnN0YXJ0KTtzYW1wbGVSYW5nZS5hZGRWYWx1ZShuZXh0U2FtcGxlP25leHRTYW1wbGUuc3RhcnQ6c2FtcGxlLnN0YXJ0KTtjb25zdCBpbnRlcnNlY3Rpb25SYW5nZUluTXM9bWVhc3VyZW1lbnRSYW5nZS5maW5kSW50ZXJzZWN0aW9uKHNhbXBsZVJhbmdlKTtjb25zdCBkdXJhdGlvbkluUz10ci5iLmNvbnZlcnRVbml0KGludGVyc2VjdGlvblJhbmdlSW5Ncy5kdXJhdGlvbix0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUpO2VuZXJneUNvbnN1bWVkSW5KKz1kdXJhdGlvbkluUypzYW1wbGUucG93ZXJJblc7fQpyZXR1cm4gZW5lcmd5Q29uc3VtZWRJbko7fSxnZXRTYW1wbGVzV2l0aGluUmFuZ2Uoc3RhcnQsZW5kKXtjb25zdCBzdGFydEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLnNhbXBsZXMseD0+eC5zdGFydCxzdGFydCk7Y29uc3QgZW5kSW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuc2FtcGxlcyx4PT54LnN0YXJ0LGVuZCk7cmV0dXJuIHRoaXMuc2FtcGxlcy5zbGljZShzdGFydEluZGV4LGVuZEluZGV4KTt9LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IobGV0IGk9MDtpPHRoaXMuc2FtcGxlc18ubGVuZ3RoOysraSl7dGhpcy5zYW1wbGVzX1tpXS5zdGFydCs9YW1vdW50O319LHVwZGF0ZUJvdW5kcygpe3RoaXMuYm91bmRzLnJlc2V0KCk7aWYodGhpcy5zYW1wbGVzXy5sZW5ndGg9PT0wKXJldHVybjt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfWzBdLnN0YXJ0KTt0aGlzLmJvdW5kcy5hZGRWYWx1ZSh0aGlzLnNhbXBsZXNfW3RoaXMuc2FtcGxlc18ubGVuZ3RoLTFdLnN0YXJ0KTt9LCpjaGlsZEV2ZW50cygpe3lpZWxkKnRoaXMuc2FtcGxlc187fSx9O3JldHVybntQb3dlclNlcmllcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRGV2aWNlKG1vZGVsKXtpZighbW9kZWwpe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgbW9kZWwuJyk7fQp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RoaXMucG93ZXJTZXJpZXNfPXVuZGVmaW5lZDt0aGlzLmNwdVVzYWdlU2VyaWVzXz11bmRlZmluZWQ7dGhpcy52U3luY1RpbWVzdGFtcHNfPVtdO30KRGV2aWNlLmNvbXBhcmU9ZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5ndWlkLXkuZ3VpZDt9O0RldmljZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5FdmVudENvbnRhaW5lci5wcm90b3R5cGUsY29tcGFyZVRvKHRoYXQpe3JldHVybiBEZXZpY2UuY29tcGFyZSh0aGlzLHRoYXQpO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4nRGV2aWNlJzt9LGdldCB1c2VyRnJpZW5kbHlEZXRhaWxzKCl7cmV0dXJuJ0RldmljZSc7fSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4nRGV2aWNlJzt9LGdldFNldHRpbmdzS2V5KCl7cmV0dXJuJ2RldmljZSc7fSxnZXQgcG93ZXJTZXJpZXMoKXtyZXR1cm4gdGhpcy5wb3dlclNlcmllc187fSxzZXQgcG93ZXJTZXJpZXMocG93ZXJTZXJpZXMpe3RoaXMucG93ZXJTZXJpZXNfPXBvd2VyU2VyaWVzO30sZ2V0IGNwdVVzYWdlU2VyaWVzKCl7cmV0dXJuIHRoaXMuY3B1VXNhZ2VTZXJpZXNfO30sc2V0IGNwdVVzYWdlU2VyaWVzKGNwdVVzYWdlU2VyaWVzKXt0aGlzLmNwdVVzYWdlU2VyaWVzXz1jcHVVc2FnZVNlcmllczt9LGdldCB2U3luY1RpbWVzdGFtcHMoKXtyZXR1cm4gdGhpcy52U3luY1RpbWVzdGFtcHNfO30sc2V0IHZTeW5jVGltZXN0YW1wcyh2YWx1ZSl7dGhpcy52U3luY1RpbWVzdGFtcHNfPXZhbHVlO30sdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTtmb3IoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtjaGlsZC51cGRhdGVCb3VuZHMoKTt0aGlzLmJvdW5kcy5hZGRSYW5nZShjaGlsZC5ib3VuZHMpO319LHNoaWZ0VGltZXN0YW1wc0ZvcndhcmQoYW1vdW50KXtmb3IoY29uc3QgY2hpbGQgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtjaGlsZC5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fQpmb3IobGV0IGk9MDtpPHRoaXMudlN5bmNUaW1lc3RhbXBzXy5sZW5ndGg7aSsrKXt0aGlzLnZTeW5jVGltZXN0YW1wc19baV0rPWFtb3VudDt9fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe2lmKHRoaXMucG93ZXJTZXJpZXNfKXt5aWVsZCB0aGlzLnBvd2VyU2VyaWVzXzt9CmlmKHRoaXMuY3B1VXNhZ2VTZXJpZXNfKXt5aWVsZCB0aGlzLmNwdVVzYWdlU2VyaWVzXzt9fX07cmV0dXJue0RldmljZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmxvd0V2ZW50KGNhdGVnb3J5LGlkLHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyxvcHRfZHVyYXRpb24pe3RyLm1vZGVsLlRpbWVkRXZlbnQuY2FsbCh0aGlzLHN0YXJ0KTt0aGlzLmNhdGVnb3J5PWNhdGVnb3J5fHwnJzt0aGlzLnRpdGxlPXRpdGxlO3RoaXMuY29sb3JJZD1jb2xvcklkO3RoaXMuc3RhcnQ9c3RhcnQ7dGhpcy5hcmdzPWFyZ3M7dGhpcy5pZD1pZDt0aGlzLnN0YXJ0U2xpY2U9dW5kZWZpbmVkO3RoaXMuZW5kU2xpY2U9dW5kZWZpbmVkO3RoaXMuc3RhcnRTdGFja0ZyYW1lPXVuZGVmaW5lZDt0aGlzLmVuZFN0YWNrRnJhbWU9dW5kZWZpbmVkO2lmKG9wdF9kdXJhdGlvbiE9PXVuZGVmaW5lZCl7dGhpcy5kdXJhdGlvbj1vcHRfZHVyYXRpb247fX0KRmxvd0V2ZW50LnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlRpbWVkRXZlbnQucHJvdG90eXBlLGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0Zsb3cgZXZlbnQgbmFtZWQgJyt0aGlzLnRpdGxlKycgYXQgJysKdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnRpbWVzdGFtcCk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihGbG93RXZlbnQse25hbWU6J2Zsb3dFdmVudCcscGx1cmFsTmFtZTonZmxvd0V2ZW50cyd9KTtyZXR1cm57Rmxvd0V2ZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb250YWluZXJNZW1vcnlEdW1wKHN0YXJ0KXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5sZXZlbE9mRGV0YWlsPXVuZGVmaW5lZDt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz11bmRlZmluZWQ7dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVfPXVuZGVmaW5lZDt9CkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbD17QkFDS0dST1VORDowLExJR0hUOjEsREVUQUlMRUQ6Mn07Q29udGFpbmVyTWVtb3J5RHVtcC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5UaW1lZEV2ZW50LnByb3RvdHlwZSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhpcy5zdGFydCs9YW1vdW50O30sZ2V0IG1lbW9yeUFsbG9jYXRvckR1bXBzKCl7cmV0dXJuIHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfO30sc2V0IG1lbW9yeUFsbG9jYXRvckR1bXBzKG1lbW9yeUFsbG9jYXRvckR1bXBzKXt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz1tZW1vcnlBbGxvY2F0b3JEdW1wczt0aGlzLmZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKTt9LGdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKGZ1bGxOYW1lKXtpZih0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2lmKHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lXz09PXVuZGVmaW5lZCl7Y29uc3QgaW5kZXg9e307ZnVuY3Rpb24gYWRkRHVtcHNUb0luZGV4KGR1bXBzKXtkdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGR1bXApe2luZGV4W2R1bXAuZnVsbE5hbWVdPWR1bXA7YWRkRHVtcHNUb0luZGV4KGR1bXAuY2hpbGRyZW4pO30pO30KYWRkRHVtcHNUb0luZGV4KHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfKTt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZV89aW5kZXg7fQpyZXR1cm4gdGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVfW2Z1bGxOYW1lXTt9LGZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKXt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZV89dW5kZWZpbmVkO30saXRlcmF0ZVJvb3RBbGxvY2F0b3JEdW1wcyhmbixvcHRfdGhpcyl7aWYodGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wcy5mb3JFYWNoKGZuLG9wdF90aGlzfHx0aGlzKTt9fTtyZXR1cm57Q29udGFpbmVyTWVtb3J5RHVtcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTWVtb3J5QWxsb2NhdG9yRHVtcChjb250YWluZXJNZW1vcnlEdW1wLGZ1bGxOYW1lLG9wdF9ndWlkKXt0aGlzLmZ1bGxOYW1lPWZ1bGxOYW1lO3RoaXMucGFyZW50PXVuZGVmaW5lZDt0aGlzLmNoaWxkcmVuPVtdO3RoaXMubnVtZXJpY3M9e307dGhpcy5kaWFnbm9zdGljcz17fTt0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXA9Y29udGFpbmVyTWVtb3J5RHVtcDt0aGlzLm93bnM9dW5kZWZpbmVkO3RoaXMub3duZWRCeT1bXTt0aGlzLm93bmVkQnlTaWJsaW5nU2l6ZXM9bmV3IE1hcCgpO3RoaXMucmV0YWlucz1bXTt0aGlzLnJldGFpbmVkQnk9W107dGhpcy53ZWFrPWZhbHNlO3RoaXMuaW5mb3M9W107dGhpcy5ndWlkPW9wdF9ndWlkO30KTWVtb3J5QWxsb2NhdG9yRHVtcC5TSVpFX05VTUVSSUNfTkFNRT0nc2l6ZSc7TWVtb3J5QWxsb2NhdG9yRHVtcC5FRkZFQ1RJVkVfU0laRV9OVU1FUklDX05BTUU9J2VmZmVjdGl2ZV9zaXplJztNZW1vcnlBbGxvY2F0b3JEdW1wLlJFU0lERU5UX1NJWkVfTlVNRVJJQ19OQU1FPSdyZXNpZGVudF9zaXplJztNZW1vcnlBbGxvY2F0b3JEdW1wLkRJU1BMQVlFRF9TSVpFX05VTUVSSUNfTkFNRT1NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRTtNZW1vcnlBbGxvY2F0b3JEdW1wLnByb3RvdHlwZT17Z2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5mdWxsTmFtZS5zdWJzdHJpbmcodGhpcy5mdWxsTmFtZS5sYXN0SW5kZXhPZignLycpKzEpO30sZ2V0IHF1YW50aWZpZWROYW1lKCl7cmV0dXJuJ1wnJyt0aGlzLmZ1bGxOYW1lKydcJyBpbiAnKwp0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXAuY29udGFpbmVyTmFtZTt9LGdldERlc2NlbmRhbnREdW1wQnlGdWxsTmFtZShmdWxsTmFtZSl7cmV0dXJuIHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSh0aGlzLmZ1bGxOYW1lKycvJytmdWxsTmFtZSk7fSxpc0Rlc2NlbmRhbnRPZihvdGhlckR1bXApe2lmKHRoaXM9PT1vdGhlckR1bXApcmV0dXJuIHRydWU7aWYodGhpcy5wYXJlbnQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnBhcmVudC5pc0Rlc2NlbmRhbnRPZihvdGhlckR1bXApO30sYWRkTnVtZXJpYyhuYW1lLG51bWVyaWMpe2lmKCEobnVtZXJpYyBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKSl7dGhyb3cgbmV3IEVycm9yKCdOdW1lcmljIHZhbHVlIG11c3QgYmUgYW4gaW5zdGFuY2Ugb2YgU2NhbGFyLicpO30KaWYobmFtZSBpbiB0aGlzLm51bWVyaWNzKXt0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBudW1lcmljIG5hbWU6ICcrbmFtZSsnLicpO30KdGhpcy5udW1lcmljc1tuYW1lXT1udW1lcmljO30sYWRkRGlhZ25vc3RpYyhuYW1lLHRleHQpe2lmKHR5cGVvZiB0ZXh0IT09J3N0cmluZycpe3Rocm93IG5ldyBFcnJvcignRGlhZ25vc3RpYyB0ZXh0IG11c3QgYmUgYSBzdHJpbmcuJyk7fQppZihuYW1lIGluIHRoaXMuZGlhZ25vc3RpY3Mpe3Rocm93IG5ldyBFcnJvcignRHVwbGljYXRlIGRpYWdub3N0aWMgbmFtZTogJytuYW1lKycuJyk7fQp0aGlzLmRpYWdub3N0aWNzW25hbWVdPXRleHQ7fSxhZ2dyZWdhdGVOdW1lcmljc1JlY3Vyc2l2ZWx5KG9wdF9tb2RlbCl7Y29uc3QgbnVtZXJpY05hbWVzPW5ldyBTZXQoKTt0aGlzLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGQpe2NoaWxkLmFnZ3JlZ2F0ZU51bWVyaWNzUmVjdXJzaXZlbHkob3B0X21vZGVsKTtmb3IoY29uc3RbaXRlbSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhjaGlsZC5udW1lcmljcykpe251bWVyaWNOYW1lcy5hZGQoaXRlbSx2YWx1ZSk7fX0sdGhpcyk7bnVtZXJpY05hbWVzLmZvckVhY2goZnVuY3Rpb24obnVtZXJpY05hbWUpe2lmKG51bWVyaWNOYW1lPT09TWVtb3J5QWxsb2NhdG9yRHVtcC5TSVpFX05VTUVSSUNfTkFNRXx8bnVtZXJpY05hbWU9PT1NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRXx8dGhpcy5udW1lcmljc1tudW1lcmljTmFtZV0hPT11bmRlZmluZWQpe3JldHVybjt9CnRoaXMubnVtZXJpY3NbbnVtZXJpY05hbWVdPU1lbW9yeUFsbG9jYXRvckR1bXAuYWdncmVnYXRlTnVtZXJpY3ModGhpcy5jaGlsZHJlbi5tYXAoZnVuY3Rpb24oY2hpbGQpe3JldHVybiBjaGlsZC5udW1lcmljc1tudW1lcmljTmFtZV07fSksb3B0X21vZGVsKTt9LHRoaXMpO319O01lbW9yeUFsbG9jYXRvckR1bXAuYWdncmVnYXRlTnVtZXJpY3M9ZnVuY3Rpb24obnVtZXJpY3Msb3B0X21vZGVsKXtsZXQgc2hvdWxkTG9nV2FybmluZz0hIW9wdF9tb2RlbDtsZXQgYWdncmVnYXRlZFVuaXQ9dW5kZWZpbmVkO2xldCBhZ2dyZWdhdGVkVmFsdWU9MDtudW1lcmljcy5mb3JFYWNoKGZ1bmN0aW9uKG51bWVyaWMpe2lmKG51bWVyaWM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHVuaXQ9bnVtZXJpYy51bml0O2lmKGFnZ3JlZ2F0ZWRVbml0PT09dW5kZWZpbmVkKXthZ2dyZWdhdGVkVW5pdD11bml0O31lbHNlIGlmKGFnZ3JlZ2F0ZWRVbml0IT09dW5pdCl7aWYoc2hvdWxkTG9nV2FybmluZyl7b3B0X21vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J251bWVyaWNfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J011bHRpcGxlIHVuaXRzIHByb3ZpZGVkIGZvciBudW1lcmljOiBcJycrCmFnZ3JlZ2F0ZWRVbml0LnVuaXROYW1lKydcJyBhbmQgXCcnK3VuaXQudW5pdE5hbWUrJ1wnLid9KTtzaG91bGRMb2dXYXJuaW5nPWZhbHNlO30KYWdncmVnYXRlZFVuaXQ9dHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9zbWFsbGVySXNCZXR0ZXI7fQphZ2dyZWdhdGVkVmFsdWUrPW51bWVyaWMudmFsdWU7fSx0aGlzKTtpZihhZ2dyZWdhdGVkVW5pdD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIoYWdncmVnYXRlZFVuaXQsYWdncmVnYXRlZFZhbHVlKTt9O2Z1bmN0aW9uIE1lbW9yeUFsbG9jYXRvckR1bXBMaW5rKHNvdXJjZSx0YXJnZXQsb3B0X2ltcG9ydGFuY2Upe3RoaXMuc291cmNlPXNvdXJjZTt0aGlzLnRhcmdldD10YXJnZXQ7dGhpcy5pbXBvcnRhbmNlPW9wdF9pbXBvcnRhbmNlO3RoaXMuc2l6ZT11bmRlZmluZWQ7fQpjb25zdCBNZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGU9e1BST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU46MCxQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9MQVJHRVNUX09XTkVSOjF9O3JldHVybntNZW1vcnlBbGxvY2F0b3JEdW1wLE1lbW9yeUFsbG9jYXRvckR1bXBMaW5rLE1lbW9yeUFsbG9jYXRvckR1bXBJbmZvVHlwZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gR2xvYmFsTWVtb3J5RHVtcChtb2RlbCxzdGFydCl7dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMubW9kZWw9bW9kZWw7dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHM9e307fQpjb25zdCBTSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLlNJWkVfTlVNRVJJQ19OQU1FO2NvbnN0IEVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRTtjb25zdCBNZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlO2NvbnN0IFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU49TWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlLlBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU47Y29uc3QgUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUj1NZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGUuUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUjtmdW5jdGlvbiBnZXRTaXplKGR1bXApe2NvbnN0IG51bWVyaWM9ZHVtcC5udW1lcmljc1tTSVpFX05VTUVSSUNfTkFNRV07aWYobnVtZXJpYz09PXVuZGVmaW5lZClyZXR1cm4gMDtyZXR1cm4gbnVtZXJpYy52YWx1ZTt9CmZ1bmN0aW9uIGhhc1NpemUoZHVtcCl7cmV0dXJuIGR1bXAubnVtZXJpY3NbU0laRV9OVU1FUklDX05BTUVdIT09dW5kZWZpbmVkO30KZnVuY3Rpb24gb3B0aW9uYWwodmFsdWUsZGVmYXVsdFZhbHVlKXtpZih2YWx1ZT09PXVuZGVmaW5lZClyZXR1cm4gZGVmYXVsdFZhbHVlO3JldHVybiB2YWx1ZTt9Ckdsb2JhbE1lbW9yeUR1bXAucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5wcm90b3R5cGUsZ2V0IHN0YWJsZUlkKCl7cmV0dXJuJ21lbW9yeS4nK3RoaXMubW9kZWwuZ2xvYmFsTWVtb3J5RHVtcHMuaW5kZXhPZih0aGlzKTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0dsb2JhbCBtZW1vcnkgZHVtcCBhdCAnKwp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuc3RhcnQpO30sZ2V0IGNvbnRhaW5lck5hbWUoKXtyZXR1cm4nZ2xvYmFsIHNwYWNlJzt9LGZpbmFsaXplR3JhcGgoKXt0aGlzLnJlbW92ZVdlYWtEdW1wcygpO3RoaXMuc2V0VXBUcmFjaW5nT3ZlcmhlYWRPd25lcnNoaXAoKTt0aGlzLmFnZ3JlZ2F0ZU51bWVyaWNzKCk7dGhpcy5jYWxjdWxhdGVTaXplcygpO3RoaXMuY2FsY3VsYXRlRWZmZWN0aXZlU2l6ZXMoKTt0aGlzLmRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucygpO3RoaXMuZm9yY2VSZWJ1aWxkaW5nTWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWVJbmRpY2VzKCk7fSxyZW1vdmVXZWFrRHVtcHMoKXt0aGlzLnRyYXZlcnNlQWxsb2NhdG9yRHVtcHNJbkRlcHRoRmlyc3RQcmVPcmRlcihmdW5jdGlvbihkdW1wKXtpZihkdW1wLndlYWspcmV0dXJuO2lmKChkdW1wLm93bnMhPT11bmRlZmluZWQmJmR1bXAub3ducy50YXJnZXQud2Vhayl8fChkdW1wLnBhcmVudCE9PXVuZGVmaW5lZCYmZHVtcC5wYXJlbnQud2Vhaykpe2R1bXAud2Vhaz10cnVlO319KTtmdW5jdGlvbiByZW1vdmVXZWFrRHVtcHNGcm9tTGlzdFJlY3Vyc2l2ZWx5KGR1bXBzKXt0ci5iLmluUGxhY2VGaWx0ZXIoZHVtcHMsZnVuY3Rpb24oZHVtcCl7aWYoZHVtcC53ZWFrKXtyZXR1cm4gZmFsc2U7fQpyZW1vdmVXZWFrRHVtcHNGcm9tTGlzdFJlY3Vyc2l2ZWx5KGR1bXAuY2hpbGRyZW4pO3RyLmIuaW5QbGFjZUZpbHRlcihkdW1wLm93bmVkQnksZnVuY3Rpb24ob3duZXJzaGlwTGluayl7cmV0dXJuIW93bmVyc2hpcExpbmsuc291cmNlLndlYWs7fSk7cmV0dXJuIHRydWU7fSk7fQp0aGlzLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihjb250YWluZXJEdW1wKXtjb25zdCBtZW1vcnlBbGxvY2F0b3JEdW1wcz1jb250YWluZXJEdW1wLm1lbW9yeUFsbG9jYXRvckR1bXBzO2lmKG1lbW9yeUFsbG9jYXRvckR1bXBzIT09dW5kZWZpbmVkKXtyZW1vdmVXZWFrRHVtcHNGcm9tTGlzdFJlY3Vyc2l2ZWx5KG1lbW9yeUFsbG9jYXRvckR1bXBzKTt9fSk7fSxjYWxjdWxhdGVTaXplcygpe3RoaXMudHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFBvc3RPcmRlcih0aGlzLmNhbGN1bGF0ZU1lbW9yeUFsbG9jYXRvckR1bXBTaXplXy5iaW5kKHRoaXMpKTt9LGNhbGN1bGF0ZU1lbW9yeUFsbG9jYXRvckR1bXBTaXplXyhkdW1wKXtsZXQgc2hvdWxkRGVmaW5lU2l6ZT1mYWxzZTtmdW5jdGlvbiBnZXREZXBlbmRlbmN5U2l6ZShkZXBlbmRlbmN5RHVtcCl7Y29uc3QgbnVtZXJpYz1kZXBlbmRlbmN5RHVtcC5udW1lcmljc1tTSVpFX05VTUVSSUNfTkFNRV07aWYobnVtZXJpYz09PXVuZGVmaW5lZClyZXR1cm4gMDtzaG91bGREZWZpbmVTaXplPXRydWU7cmV0dXJuIG51bWVyaWMudmFsdWU7fQpjb25zdCBzaXplTnVtZXJpYz1kdW1wLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXTtsZXQgc2l6ZT0wO2xldCBjaGVja0RlcGVuZGVuY3lTaXplSXNDb25zaXN0ZW50PWZ1bmN0aW9uKCl7fTtpZihzaXplTnVtZXJpYyE9PXVuZGVmaW5lZCl7c2l6ZT1zaXplTnVtZXJpYy52YWx1ZTtzaG91bGREZWZpbmVTaXplPXRydWU7aWYoc2l6ZU51bWVyaWMudW5pdCE9PXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyKXt0aGlzLm1vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidJbnZhbGlkIHVuaXQgb2YgXCdzaXplXCcgbnVtZXJpYyBvZiBtZW1vcnkgYWxsb2NhdG9yICcrJ2R1bXAgJytkdW1wLnF1YW50aWZpZWROYW1lKyc6ICcrCnNpemVOdW1lcmljLnVuaXQudW5pdE5hbWUrJy4nfSk7fQpjaGVja0RlcGVuZGVuY3lTaXplSXNDb25zaXN0ZW50PWZ1bmN0aW9uKGRlcGVuZGVuY3lTaXplLGRlcGVuZGVuY3lJbmZvVHlwZSxkZXBlbmRlbmN5TmFtZSl7aWYoc2l6ZT49ZGVwZW5kZW5jeVNpemUpcmV0dXJuO3RoaXMubW9kZWwuaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1NpemUgcHJvdmlkZWQgYnkgbWVtb3J5IGFsbG9jYXRvciBkdW1wIFwnJysKZHVtcC5mdWxsTmFtZSsnXCcnKwp0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzLmZvcm1hdChzaXplKSsnKSBpcyBsZXNzIHRoYW4gJytkZXBlbmRlbmN5TmFtZSsnICgnKwp0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzLmZvcm1hdChkZXBlbmRlbmN5U2l6ZSkrJykuJ30pO2R1bXAuaW5mb3MucHVzaCh7dHlwZTpkZXBlbmRlbmN5SW5mb1R5cGUscHJvdmlkZWRTaXplOnNpemUsZGVwZW5kZW5jeVNpemV9KTt9LmJpbmQodGhpcyk7fQpsZXQgYWdncmVnYXRlZENoaWxkcmVuU2l6ZT0wO2NvbnN0IGFsbE92ZXJsYXBzPXt9O2R1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZER1bXApe2Z1bmN0aW9uIGFnZ3JlZ2F0ZURlc2NlbmRhbnREdW1wKGRlc2NlbmRhbnREdW1wKXtjb25zdCBvd25lZER1bXBMaW5rPWRlc2NlbmRhbnREdW1wLm93bnM7aWYob3duZWREdW1wTGluayE9PXVuZGVmaW5lZCYmb3duZWREdW1wTGluay50YXJnZXQuaXNEZXNjZW5kYW50T2YoZHVtcCkpe2xldCBvd25lZENoaWxkRHVtcD1vd25lZER1bXBMaW5rLnRhcmdldDt3aGlsZShvd25lZENoaWxkRHVtcC5wYXJlbnQhPT1kdW1wKXtvd25lZENoaWxkRHVtcD1vd25lZENoaWxkRHVtcC5wYXJlbnQ7fQppZihjaGlsZER1bXAhPT1vd25lZENoaWxkRHVtcCl7Y29uc3Qgb3duZWRCeVNpYmxpbmdTaXplPWdldERlcGVuZGVuY3lTaXplKGRlc2NlbmRhbnREdW1wKTtpZihvd25lZEJ5U2libGluZ1NpemU+MCl7Y29uc3QgcHJldmlvdXNUb3RhbE93bmVkQnlTaWJsaW5nU2l6ZT1vd25lZENoaWxkRHVtcC5vd25lZEJ5U2libGluZ1NpemVzLmdldChjaGlsZER1bXApfHwwO2NvbnN0IHVwZGF0ZWRUb3RhbE93bmVkQnlTaWJsaW5nU2l6ZT1wcmV2aW91c1RvdGFsT3duZWRCeVNpYmxpbmdTaXplK293bmVkQnlTaWJsaW5nU2l6ZTtvd25lZENoaWxkRHVtcC5vd25lZEJ5U2libGluZ1NpemVzLnNldChjaGlsZER1bXAsdXBkYXRlZFRvdGFsT3duZWRCeVNpYmxpbmdTaXplKTt9fQpyZXR1cm47fQppZihkZXNjZW5kYW50RHVtcC5jaGlsZHJlbi5sZW5ndGg9PT0wKXthZ2dyZWdhdGVkQ2hpbGRyZW5TaXplKz1nZXREZXBlbmRlbmN5U2l6ZShkZXNjZW5kYW50RHVtcCk7cmV0dXJuO30KZGVzY2VuZGFudER1bXAuY2hpbGRyZW4uZm9yRWFjaChhZ2dyZWdhdGVEZXNjZW5kYW50RHVtcCk7fQphZ2dyZWdhdGVEZXNjZW5kYW50RHVtcChjaGlsZER1bXApO30pO2NoZWNrRGVwZW5kZW5jeVNpemVJc0NvbnNpc3RlbnQoYWdncmVnYXRlZENoaWxkcmVuU2l6ZSxQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9BR0dSRUdBVEVEX0NISUxEUkVOLCd0aGUgYWdncmVnYXRlZCBzaXplIG9mIGl0cyBjaGlsZHJlbicpO2xldCBsYXJnZXN0T3duZXJTaXplPTA7ZHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24ob3duZXJzaGlwTGluayl7Y29uc3Qgb3duZXI9b3duZXJzaGlwTGluay5zb3VyY2U7Y29uc3Qgb3duZXJTaXplPWdldERlcGVuZGVuY3lTaXplKG93bmVyKTtsYXJnZXN0T3duZXJTaXplPU1hdGgubWF4KGxhcmdlc3RPd25lclNpemUsb3duZXJTaXplKTt9KTtjaGVja0RlcGVuZGVuY3lTaXplSXNDb25zaXN0ZW50KGxhcmdlc3RPd25lclNpemUsUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUiwndGhlIHNpemUgb2YgaXRzIGxhcmdlc3Qgb3duZXInKTtpZighc2hvdWxkRGVmaW5lU2l6ZSl7ZGVsZXRlIGR1bXAubnVtZXJpY3NbU0laRV9OVU1FUklDX05BTUVdO3JldHVybjt9CnNpemU9TWF0aC5tYXgoc2l6ZSxhZ2dyZWdhdGVkQ2hpbGRyZW5TaXplLGxhcmdlc3RPd25lclNpemUpO2R1bXAubnVtZXJpY3NbU0laRV9OVU1FUklDX05BTUVdPW5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixzaXplKTtpZihhZ2dyZWdhdGVkQ2hpbGRyZW5TaXplPHNpemUmJmR1bXAuY2hpbGRyZW4hPT11bmRlZmluZWQmJmR1bXAuY2hpbGRyZW4ubGVuZ3RoPjApe2NvbnN0IHZpcnR1YWxDaGlsZD1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcChkdW1wLmNvbnRhaW5lck1lbW9yeUR1bXAsZHVtcC5mdWxsTmFtZSsnLzx1bnNwZWNpZmllZD4nKTt2aXJ0dWFsQ2hpbGQucGFyZW50PWR1bXA7ZHVtcC5jaGlsZHJlbi51bnNoaWZ0KHZpcnR1YWxDaGlsZCk7dmlydHVhbENoaWxkLm51bWVyaWNzW1NJWkVfTlVNRVJJQ19OQU1FXT1uZXcgdHIuYi5TY2FsYXIodHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsc2l6ZS1hZ2dyZWdhdGVkQ2hpbGRyZW5TaXplKTt9fSxjYWxjdWxhdGVFZmZlY3RpdmVTaXplcygpe3RoaXMudHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFBvc3RPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBTdWJTaXplc18uYmluZCh0aGlzKSk7dGhpcy50cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UG9zdE9yZGVyKHRoaXMuY2FsY3VsYXRlRHVtcE93bmVyc2hpcENvZWZmaWNpZW50Xy5iaW5kKHRoaXMpKTt0aGlzLnRyYXZlcnNlQWxsb2NhdG9yRHVtcHNJbkRlcHRoRmlyc3RQcmVPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBDdW11bGF0aXZlT3duZXJzaGlwQ29lZmZpY2llbnRfLmJpbmQodGhpcykpO3RoaXMudHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFBvc3RPcmRlcih0aGlzLmNhbGN1bGF0ZUR1bXBFZmZlY3RpdmVTaXplXy5iaW5kKHRoaXMpKTt9LGNhbGN1bGF0ZUR1bXBTdWJTaXplc18oZHVtcCl7aWYoIWhhc1NpemUoZHVtcCkpcmV0dXJuO2lmKGR1bXAuY2hpbGRyZW49PT11bmRlZmluZWR8fGR1bXAuY2hpbGRyZW4ubGVuZ3RoPT09MCl7Y29uc3Qgc2l6ZT1nZXRTaXplKGR1bXApO2R1bXAubm90T3duaW5nU3ViU2l6ZV89c2l6ZTtkdW1wLm5vdE93bmVkU3ViU2l6ZV89c2l6ZTtyZXR1cm47fQpsZXQgbm90T3duaW5nU3ViU2l6ZT0wO2R1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihjaGlsZER1bXApe2lmKGNoaWxkRHVtcC5vd25zIT09dW5kZWZpbmVkKXJldHVybjtub3RPd25pbmdTdWJTaXplKz1vcHRpb25hbChjaGlsZER1bXAubm90T3duaW5nU3ViU2l6ZV8sMCk7fSk7ZHVtcC5ub3RPd25pbmdTdWJTaXplXz1ub3RPd25pbmdTdWJTaXplO2xldCBub3RPd25lZFN1YlNpemU9MDtkdW1wLmNoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGREdW1wKXtpZihjaGlsZER1bXAub3duZWRCeS5sZW5ndGg9PT0wKXtub3RPd25lZFN1YlNpemUrPW9wdGlvbmFsKGNoaWxkRHVtcC5ub3RPd25lZFN1YlNpemVfLDApO3JldHVybjt9CmxldCBsYXJnZXN0Q2hpbGRPd25lclNpemU9MDtjaGlsZER1bXAub3duZWRCeS5mb3JFYWNoKGZ1bmN0aW9uKG93bmVyc2hpcExpbmspe2xhcmdlc3RDaGlsZE93bmVyU2l6ZT1NYXRoLm1heChsYXJnZXN0Q2hpbGRPd25lclNpemUsZ2V0U2l6ZShvd25lcnNoaXBMaW5rLnNvdXJjZSkpO30pO25vdE93bmVkU3ViU2l6ZSs9Z2V0U2l6ZShjaGlsZER1bXApLWxhcmdlc3RDaGlsZE93bmVyU2l6ZTt9KTtkdW1wLm5vdE93bmVkU3ViU2l6ZV89bm90T3duZWRTdWJTaXplO30sY2FsY3VsYXRlRHVtcE93bmVyc2hpcENvZWZmaWNpZW50XyhkdW1wKXtpZighaGFzU2l6ZShkdW1wKSlyZXR1cm47aWYoZHVtcC5vd25lZEJ5Lmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IG93bmVycz1kdW1wLm93bmVkQnkubWFwKGZ1bmN0aW9uKG93bmVyc2hpcExpbmspe3JldHVybntkdW1wOm93bmVyc2hpcExpbmsuc291cmNlLGltcG9ydGFuY2U6b3B0aW9uYWwob3duZXJzaGlwTGluay5pbXBvcnRhbmNlLDApLG5vdE93bmluZ1N1YlNpemU6b3B0aW9uYWwob3duZXJzaGlwTGluay5zb3VyY2Uubm90T3duaW5nU3ViU2l6ZV8sMCl9O30pO293bmVycy5zb3J0KGZ1bmN0aW9uKGEsYil7aWYoYS5pbXBvcnRhbmNlPT09Yi5pbXBvcnRhbmNlKXtyZXR1cm4gYS5ub3RPd25pbmdTdWJTaXplLWIubm90T3duaW5nU3ViU2l6ZTt9CnJldHVybiBiLmltcG9ydGFuY2UtYS5pbXBvcnRhbmNlO30pO2xldCBjdXJyZW50SW1wb3J0YW5jZVN0YXJ0UG9zPTA7bGV0IGFscmVhZHlBdHRyaWJ1dGVkU3ViU2l6ZT0wO3doaWxlKGN1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3M8b3duZXJzLmxlbmd0aCl7Y29uc3QgY3VycmVudEltcG9ydGFuY2U9b3duZXJzW2N1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3NdLmltcG9ydGFuY2U7bGV0IG5leHRJbXBvcnRhbmNlU3RhcnRQb3M9Y3VycmVudEltcG9ydGFuY2VTdGFydFBvcysxO3doaWxlKG5leHRJbXBvcnRhbmNlU3RhcnRQb3M8b3duZXJzLmxlbmd0aCYmb3duZXJzW25leHRJbXBvcnRhbmNlU3RhcnRQb3NdLmltcG9ydGFuY2U9PT1jdXJyZW50SW1wb3J0YW5jZSl7bmV4dEltcG9ydGFuY2VTdGFydFBvcysrO30KbGV0IGF0dHJpYnV0ZWROb3RPd25pbmdTdWJTaXplPTA7Zm9yKGxldCBwb3M9Y3VycmVudEltcG9ydGFuY2VTdGFydFBvcztwb3M8bmV4dEltcG9ydGFuY2VTdGFydFBvcztwb3MrKyl7Y29uc3Qgb3duZXI9b3duZXJzW3Bvc107Y29uc3Qgbm90T3duaW5nU3ViU2l6ZT1vd25lci5ub3RPd25pbmdTdWJTaXplO2lmKG5vdE93bmluZ1N1YlNpemU+YWxyZWFkeUF0dHJpYnV0ZWRTdWJTaXplKXthdHRyaWJ1dGVkTm90T3duaW5nU3ViU2l6ZSs9KG5vdE93bmluZ1N1YlNpemUtYWxyZWFkeUF0dHJpYnV0ZWRTdWJTaXplKS8obmV4dEltcG9ydGFuY2VTdGFydFBvcy1wb3MpO2FscmVhZHlBdHRyaWJ1dGVkU3ViU2l6ZT1ub3RPd25pbmdTdWJTaXplO30KbGV0IG93bmluZ0NvZWZmaWNpZW50PTA7aWYobm90T3duaW5nU3ViU2l6ZSE9PTApe293bmluZ0NvZWZmaWNpZW50PWF0dHJpYnV0ZWROb3RPd25pbmdTdWJTaXplL25vdE93bmluZ1N1YlNpemU7fQpvd25lci5kdW1wLm93bmluZ0NvZWZmaWNpZW50Xz1vd25pbmdDb2VmZmljaWVudDt9CmN1cnJlbnRJbXBvcnRhbmNlU3RhcnRQb3M9bmV4dEltcG9ydGFuY2VTdGFydFBvczt9CmNvbnN0IG5vdE93bmVkU3ViU2l6ZT1vcHRpb25hbChkdW1wLm5vdE93bmVkU3ViU2l6ZV8sMCk7Y29uc3QgcmVtYWluZGVyU3ViU2l6ZT1ub3RPd25lZFN1YlNpemUtYWxyZWFkeUF0dHJpYnV0ZWRTdWJTaXplO2xldCBvd25lZENvZWZmaWNpZW50PTA7aWYobm90T3duZWRTdWJTaXplIT09MCl7b3duZWRDb2VmZmljaWVudD1yZW1haW5kZXJTdWJTaXplL25vdE93bmVkU3ViU2l6ZTt9CmR1bXAub3duZWRDb2VmZmljaWVudF89b3duZWRDb2VmZmljaWVudDt9LGNhbGN1bGF0ZUR1bXBDdW11bGF0aXZlT3duZXJzaGlwQ29lZmZpY2llbnRfKGR1bXApe2lmKCFoYXNTaXplKGR1bXApKXJldHVybjtsZXQgY3VtdWxhdGl2ZU93bmVkQ29lZmZpY2llbnQ9b3B0aW9uYWwoZHVtcC5vd25lZENvZWZmaWNpZW50XywxKTtjb25zdCBwYXJlbnQ9ZHVtcC5wYXJlbnQ7aWYoZHVtcC5wYXJlbnQhPT11bmRlZmluZWQpe2N1bXVsYXRpdmVPd25lZENvZWZmaWNpZW50Kj1kdW1wLnBhcmVudC5jdW11bGF0aXZlT3duZWRDb2VmZmljaWVudF87fQpkdW1wLmN1bXVsYXRpdmVPd25lZENvZWZmaWNpZW50Xz1jdW11bGF0aXZlT3duZWRDb2VmZmljaWVudDtsZXQgY3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50O2lmKGR1bXAub3ducyE9PXVuZGVmaW5lZCl7Y3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50PWR1bXAub3duaW5nQ29lZmZpY2llbnRfKmR1bXAub3ducy50YXJnZXQuY3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50Xzt9ZWxzZSBpZihkdW1wLnBhcmVudCE9PXVuZGVmaW5lZCl7Y3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50PWR1bXAucGFyZW50LmN1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudF87fWVsc2V7Y3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50PTE7fQpkdW1wLmN1bXVsYXRpdmVPd25pbmdDb2VmZmljaWVudF89Y3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50O30sY2FsY3VsYXRlRHVtcEVmZmVjdGl2ZVNpemVfKGR1bXApe2lmKCFoYXNTaXplKGR1bXApKXtkZWxldGUgZHVtcC5udW1lcmljc1tFRkZFQ1RJVkVfU0laRV9OVU1FUklDX05BTUVdO3JldHVybjt9CmxldCBlZmZlY3RpdmVTaXplO2lmKGR1bXAuY2hpbGRyZW49PT11bmRlZmluZWR8fGR1bXAuY2hpbGRyZW4ubGVuZ3RoPT09MCl7ZWZmZWN0aXZlU2l6ZT1nZXRTaXplKGR1bXApKmR1bXAuY3VtdWxhdGl2ZU93bmluZ0NvZWZmaWNpZW50XypkdW1wLmN1bXVsYXRpdmVPd25lZENvZWZmaWNpZW50Xzt9ZWxzZXtlZmZlY3RpdmVTaXplPTA7ZHVtcC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKGNoaWxkRHVtcCl7aWYoIWhhc1NpemUoY2hpbGREdW1wKSlyZXR1cm47ZWZmZWN0aXZlU2l6ZSs9Y2hpbGREdW1wLm51bWVyaWNzW0VGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRV0udmFsdWU7fSk7fQpkdW1wLm51bWVyaWNzW0VGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRV09bmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGVmZmVjdGl2ZVNpemUpO30sYWdncmVnYXRlTnVtZXJpY3MoKXt0aGlzLml0ZXJhdGVSb290QWxsb2NhdG9yRHVtcHMoZnVuY3Rpb24oZHVtcCl7ZHVtcC5hZ2dyZWdhdGVOdW1lcmljc1JlY3Vyc2l2ZWx5KHRoaXMubW9kZWwpO30pO3RoaXMuaXRlcmF0ZVJvb3RBbGxvY2F0b3JEdW1wcyh0aGlzLnByb3BhZ2F0ZU51bWVyaWNzQW5kRGlhZ25vc3RpY3NSZWN1cnNpdmVseSk7Zm9yKGNvbnN0IHByb2Nlc3NNZW1vcnlEdW1wIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzTWVtb3J5RHVtcHMpKXtwcm9jZXNzTWVtb3J5RHVtcC5pdGVyYXRlUm9vdEFsbG9jYXRvckR1bXBzKGZ1bmN0aW9uKGR1bXApe2R1bXAuYWdncmVnYXRlTnVtZXJpY3NSZWN1cnNpdmVseSh0aGlzLm1vZGVsKTt9LHRoaXMpO319LHByb3BhZ2F0ZU51bWVyaWNzQW5kRGlhZ25vc3RpY3NSZWN1cnNpdmVseShnbG9iYWxBbGxvY2F0b3JEdW1wKXtbJ251bWVyaWNzJywnZGlhZ25vc3RpY3MnXS5mb3JFYWNoKGZ1bmN0aW9uKGZpZWxkKXtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZgpPYmplY3QuZW50cmllcyhnbG9iYWxBbGxvY2F0b3JEdW1wW2ZpZWxkXSkpe2dsb2JhbEFsbG9jYXRvckR1bXAub3duZWRCeS5mb3JFYWNoKGZ1bmN0aW9uKG93bmVyc2hpcExpbmspe2NvbnN0IHByb2Nlc3NBbGxvY2F0b3JEdW1wPW93bmVyc2hpcExpbmsuc291cmNlO2lmKHByb2Nlc3NBbGxvY2F0b3JEdW1wW2ZpZWxkXVtuYW1lXSE9PXVuZGVmaW5lZCl7cmV0dXJuO30KcHJvY2Vzc0FsbG9jYXRvckR1bXBbZmllbGRdW25hbWVdPXZhbHVlO30pO319KTtnbG9iYWxBbGxvY2F0b3JEdW1wLmNoaWxkcmVuLmZvckVhY2godGhpcy5wcm9wYWdhdGVOdW1lcmljc0FuZERpYWdub3N0aWNzUmVjdXJzaXZlbHksdGhpcyk7fSxzZXRVcFRyYWNpbmdPdmVyaGVhZE93bmVyc2hpcCgpe2Zvcihjb25zdCBkdW1wIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzTWVtb3J5RHVtcHMpKXtkdW1wLnNldFVwVHJhY2luZ092ZXJoZWFkT3duZXJzaGlwKHRoaXMubW9kZWwpO319LGRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucygpe2Zvcihjb25zdCBkdW1wIG9mIE9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzTWVtb3J5RHVtcHMpKXtkdW1wLmRpc2NvdW50VHJhY2luZ092ZXJoZWFkRnJvbVZtUmVnaW9ucyh0aGlzLm1vZGVsKTt9fSxmb3JjZVJlYnVpbGRpbmdNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZUluZGljZXMoKXt0aGlzLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihjb250YWluZXJEdW1wKXtjb250YWluZXJEdW1wLmZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKTt9KTt9LGl0ZXJhdGVDb250YWluZXJEdW1wcyhmbil7Zm4uY2FsbCh0aGlzLHRoaXMpO2Zvcihjb25zdCBwcm9jZXNzRHVtcCBvZiBPYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzKSl7Zm4uY2FsbCh0aGlzLHByb2Nlc3NEdW1wKTt9fSxpdGVyYXRlQWxsUm9vdEFsbG9jYXRvckR1bXBzKGZuKXt0aGlzLml0ZXJhdGVDb250YWluZXJEdW1wcyhmdW5jdGlvbihjb250YWluZXJEdW1wKXtjb250YWluZXJEdW1wLml0ZXJhdGVSb290QWxsb2NhdG9yRHVtcHMoZm4sdGhpcyk7fSk7fSx0cmF2ZXJzZUFsbG9jYXRvckR1bXBzSW5EZXB0aEZpcnN0UG9zdE9yZGVyKGZuKXtjb25zdCB2aXNpdGVkRHVtcHM9bmV3IFdlYWtTZXQoKTtjb25zdCBvcGVuRHVtcHM9bmV3IFdlYWtTZXQoKTtmdW5jdGlvbiB2aXNpdChkdW1wKXtpZih2aXNpdGVkRHVtcHMuaGFzKGR1bXApKXJldHVybjtpZihvcGVuRHVtcHMuaGFzKGR1bXApKXt0aHJvdyBuZXcgRXJyb3IoZHVtcC51c2VyRnJpZW5kbHlOYW1lKycgY29udGFpbnMgYSBjeWNsZScpO30Kb3BlbkR1bXBzLmFkZChkdW1wKTtkdW1wLm93bmVkQnkuZm9yRWFjaChmdW5jdGlvbihvd25lcnNoaXBMaW5rKXt2aXNpdC5jYWxsKHRoaXMsb3duZXJzaGlwTGluay5zb3VyY2UpO30sdGhpcyk7ZHVtcC5jaGlsZHJlbi5mb3JFYWNoKHZpc2l0LHRoaXMpO2ZuLmNhbGwodGhpcyxkdW1wKTt2aXNpdGVkRHVtcHMuYWRkKGR1bXApO29wZW5EdW1wcy5kZWxldGUoZHVtcCk7fQp0aGlzLml0ZXJhdGVBbGxSb290QWxsb2NhdG9yRHVtcHModmlzaXQpO30sdHJhdmVyc2VBbGxvY2F0b3JEdW1wc0luRGVwdGhGaXJzdFByZU9yZGVyKGZuKXtjb25zdCB2aXNpdGVkRHVtcHM9bmV3IFdlYWtTZXQoKTtmdW5jdGlvbiB2aXNpdChkdW1wKXtpZih2aXNpdGVkRHVtcHMuaGFzKGR1bXApKXJldHVybjtpZihkdW1wLm93bnMhPT11bmRlZmluZWQmJiF2aXNpdGVkRHVtcHMuaGFzKGR1bXAub3ducy50YXJnZXQpKXtyZXR1cm47fQppZihkdW1wLnBhcmVudCE9PXVuZGVmaW5lZCYmIXZpc2l0ZWREdW1wcy5oYXMoZHVtcC5wYXJlbnQpKXtyZXR1cm47fQpmbi5jYWxsKHRoaXMsZHVtcCk7dmlzaXRlZER1bXBzLmFkZChkdW1wKTtkdW1wLm93bmVkQnkuZm9yRWFjaChmdW5jdGlvbihvd25lcnNoaXBMaW5rKXt2aXNpdC5jYWxsKHRoaXMsb3duZXJzaGlwTGluay5zb3VyY2UpO30sdGhpcyk7ZHVtcC5jaGlsZHJlbi5mb3JFYWNoKHZpc2l0LHRoaXMpO30KdGhpcy5pdGVyYXRlQWxsUm9vdEFsbG9jYXRvckR1bXBzKHZpc2l0KTt9fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKEdsb2JhbE1lbW9yeUR1bXAse25hbWU6J2dsb2JhbE1lbW9yeUR1bXAnLHBsdXJhbE5hbWU6J2dsb2JhbE1lbW9yeUR1bXBzJ30pO3JldHVybntHbG9iYWxNZW1vcnlEdW1wLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBJbnN0YW50RXZlbnRUeXBlPXtHTE9CQUw6MSxQUk9DRVNTOjJ9O2Z1bmN0aW9uIEluc3RhbnRFdmVudChjYXRlZ29yeSx0aXRsZSxjb2xvcklkLHN0YXJ0LGFyZ3MscGFyZW50KXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeXx8Jyc7dGhpcy50aXRsZT10aXRsZTt0aGlzLmNvbG9ySWQ9Y29sb3JJZDt0aGlzLmFyZ3M9YXJnczt0aGlzLnBhcmVudF89cGFyZW50O3RoaXMudHlwZT11bmRlZmluZWQ7fQpJbnN0YW50RXZlbnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuVGltZWRFdmVudC5wcm90b3R5cGUsfTtmdW5jdGlvbiBHbG9iYWxJbnN0YW50RXZlbnQoY2F0ZWdvcnksdGl0bGUsY29sb3JJZCxzdGFydCxhcmdzLHBhcmVudCl7SW5zdGFudEV2ZW50LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLnR5cGU9SW5zdGFudEV2ZW50VHlwZS5HTE9CQUw7fQpHbG9iYWxJbnN0YW50RXZlbnQucHJvdG90eXBlPXtfX3Byb3RvX186SW5zdGFudEV2ZW50LnByb3RvdHlwZSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidHbG9iYWwgaW5zdGFudCBldmVudCAnK3RoaXMudGl0bGUrJyBAICcrCnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncy5mb3JtYXQoc3RhcnQpO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuJ2luc3RhbnQuJyt0aGlzLnBhcmVudF8uaW5zdGFudEV2ZW50cy5pbmRleE9mKHRoaXMpO30sfTtmdW5jdGlvbiBQcm9jZXNzSW5zdGFudEV2ZW50KGNhdGVnb3J5LHRpdGxlLGNvbG9ySWQsc3RhcnQsYXJncyxwYXJlbnQpe0luc3RhbnRFdmVudC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50eXBlPUluc3RhbnRFdmVudFR5cGUuUFJPQ0VTUzt9ClByb2Nlc3NJbnN0YW50RXZlbnQucHJvdG90eXBlPXtfX3Byb3RvX186SW5zdGFudEV2ZW50LnByb3RvdHlwZSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidQcm9jZXNzLWxldmVsIGluc3RhbnQgZXZlbnQgJyt0aGlzLnRpdGxlKycgQCAnKwp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHN0YXJ0KTt9LGdldCBzdGFibGVJZCgpe3JldHVybiB0aGlzLnBhcmVudF8uc3RhYmxlSWQrJy5pbnN0YW50LicrCnRoaXMucGFyZW50Xy5pbnN0YW50RXZlbnRzLmluZGV4T2YodGhpcyk7fSx9O3RyLm1vZGVsLkV2ZW50UmVnaXN0cnkucmVnaXN0ZXIoSW5zdGFudEV2ZW50LHtuYW1lOidpbnN0YW50RXZlbnQnLHBsdXJhbE5hbWU6J2luc3RhbnRFdmVudHMnfSk7cmV0dXJue0dsb2JhbEluc3RhbnRFdmVudCxQcm9jZXNzSW5zdGFudEV2ZW50LEluc3RhbnRFdmVudFR5cGUsSW5zdGFudEV2ZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDcHU9dHIubW9kZWwuQ3B1O2NvbnN0IFByb2Nlc3NCYXNlPXRyLm1vZGVsLlByb2Nlc3NCYXNlO2Z1bmN0aW9uIEtlcm5lbChtb2RlbCl7UHJvY2Vzc0Jhc2UuY2FsbCh0aGlzLG1vZGVsKTt0aGlzLmNwdXM9e307dGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfPXVuZGVmaW5lZDt9Cktlcm5lbC5jb21wYXJlPWZ1bmN0aW9uKHgseSl7cmV0dXJuIDA7fTtLZXJuZWwucHJvdG90eXBlPXtfX3Byb3RvX186UHJvY2Vzc0Jhc2UucHJvdG90eXBlLGNvbXBhcmVUbyh0aGF0KXtyZXR1cm4gS2VybmVsLmNvbXBhcmUodGhpcyx0aGF0KTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ0tlcm5lbCc7fSxnZXQgdXNlckZyaWVuZGx5RGV0YWlscygpe3JldHVybidLZXJuZWwnO30sZ2V0IHN0YWJsZUlkKCl7cmV0dXJuJ0tlcm5lbCc7fSxnZXRPckNyZWF0ZUNwdShjcHVOdW1iZXIpe2lmKCF0aGlzLmNwdXNbY3B1TnVtYmVyXSl7dGhpcy5jcHVzW2NwdU51bWJlcl09bmV3IENwdSh0aGlzLGNwdU51bWJlcik7fQpyZXR1cm4gdGhpcy5jcHVzW2NwdU51bWJlcl07fSxnZXQgc29mdHdhcmVNZWFzdXJlZENwdUNvdW50KCl7cmV0dXJuIHRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50Xzt9LHNldCBzb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQoc29mdHdhcmVNZWFzdXJlZENwdUNvdW50KXtpZih0aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF8hPT11bmRlZmluZWQmJnRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50XyE9PXNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY2hhbmdlIHRoZSBzb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQgb25jZSBpdCBpcyBzZXQnKTt9CnRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50Xz1zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQ7fSxnZXQgYmVzdEd1ZXNzQXRDcHVDb3VudCgpe2NvbnN0IHJlYWxDcHVDb3VudD1PYmplY3Qua2V5cyh0aGlzLmNwdXMpLmxlbmd0aDtpZihyZWFsQ3B1Q291bnQhPT0wKXtyZXR1cm4gcmVhbENwdUNvdW50O30KcmV0dXJuIHRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50O30sdXBkYXRlQm91bmRzKCl7UHJvY2Vzc0Jhc2UucHJvdG90eXBlLnVwZGF0ZUJvdW5kcy5jYWxsKHRoaXMpO2Zvcihjb25zdCBjcHVOdW1iZXIgaW4gdGhpcy5jcHVzKXtjb25zdCBjcHU9dGhpcy5jcHVzW2NwdU51bWJlcl07Y3B1LnVwZGF0ZUJvdW5kcygpO3RoaXMuYm91bmRzLmFkZFJhbmdlKGNwdS5ib3VuZHMpO319LGNyZWF0ZVN1YlNsaWNlcygpe1Byb2Nlc3NCYXNlLnByb3RvdHlwZS5jcmVhdGVTdWJTbGljZXMuY2FsbCh0aGlzKTtmb3IoY29uc3QgY3B1TnVtYmVyIGluIHRoaXMuY3B1cyl7Y29uc3QgY3B1PXRoaXMuY3B1c1tjcHVOdW1iZXJdO2NwdS5jcmVhdGVTdWJTbGljZXMoKTt9fSxhZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXtQcm9jZXNzQmFzZS5wcm90b3R5cGUuYWRkQ2F0ZWdvcmllc1RvRGljdC5jYWxsKHRoaXMsY2F0ZWdvcmllc0RpY3QpO2Zvcihjb25zdCBjcHVOdW1iZXIgaW4gdGhpcy5jcHVzKXt0aGlzLmNwdXNbY3B1TnVtYmVyXS5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTt9fSxnZXRTZXR0aW5nc0tleSgpe3JldHVybidrZXJuZWwnO30sKmNoaWxkRXZlbnRDb250YWluZXJzKCl7eWllbGQqUHJvY2Vzc0Jhc2UucHJvdG90eXBlLmNoaWxkRXZlbnRDb250YWluZXJzLmNhbGwodGhpcyk7eWllbGQqT2JqZWN0LnZhbHVlcyh0aGlzLmNwdXMpO30sfTtyZXR1cm57S2VybmVsLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBNb2RlbEluZGljZXMobW9kZWwpe3RoaXMuZmxvd0V2ZW50c0J5SWRfPXt9O21vZGVsLmZsb3dFdmVudHMuZm9yRWFjaChmdW5jdGlvbihmZSl7aWYoZmUuaWQhPT11bmRlZmluZWQpe2lmKCF0aGlzLmZsb3dFdmVudHNCeUlkXy5oYXNPd25Qcm9wZXJ0eShmZS5pZCkpe3RoaXMuZmxvd0V2ZW50c0J5SWRfW2ZlLmlkXT1bXTt9CnRoaXMuZmxvd0V2ZW50c0J5SWRfW2ZlLmlkXS5wdXNoKGZlKTt9fSx0aGlzKTt9Ck1vZGVsSW5kaWNlcy5wcm90b3R5cGU9e2FkZEV2ZW50V2l0aElkKGlkLGV2ZW50KXtpZighdGhpcy5mbG93RXZlbnRzQnlJZF8uaGFzT3duUHJvcGVydHkoaWQpKXt0aGlzLmZsb3dFdmVudHNCeUlkX1tpZF09W107fQp0aGlzLmZsb3dFdmVudHNCeUlkX1tpZF0ucHVzaChldmVudCk7fSxnZXRGbG93RXZlbnRzV2l0aElkKGlkKXtpZighdGhpcy5mbG93RXZlbnRzQnlJZF8uaGFzT3duUHJvcGVydHkoaWQpKXtyZXR1cm5bXTt9CnJldHVybiB0aGlzLmZsb3dFdmVudHNCeUlkX1tpZF07fX07cmV0dXJue01vZGVsSW5kaWNlcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gTW9kZWxTdGF0cygpe3RoaXMudHJhY2VFdmVudENvdW50c0J5S2V5Xz1uZXcgTWFwKCk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNfPVtdO3RoaXMudHJhY2VFdmVudFN0YXRzSW5UaW1lSW50ZXJ2YWxzXz1uZXcgTWFwKCk7dGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNJblRpbWVJbnRlcnZhbHNfPVtdO3RoaXMuaGFzRXZlbnRTaXplc2luQnl0ZXNfPWZhbHNlO3RoaXMudHJhY2VJbXBvcnREdXJhdGlvbk1zXz11bmRlZmluZWQ7fQpNb2RlbFN0YXRzLnByb3RvdHlwZT17VElNRV9JTlRFUlZBTF9TSVpFX0lOX01TOjEwMCx3aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudChwaGFzZSxjYXRlZ29yeSx0aXRsZSx0cyxvcHRfZXZlbnRTaXplaW5CeXRlcyl7Y29uc3Qga2V5PXBoYXNlKycvJytjYXRlZ29yeSsnLycrdGl0bGU7bGV0IGV2ZW50U3RhdHM9dGhpcy50cmFjZUV2ZW50Q291bnRzQnlLZXlfLmdldChrZXkpO2lmKGV2ZW50U3RhdHM9PT11bmRlZmluZWQpe2V2ZW50U3RhdHM9e3BoYXNlLGNhdGVnb3J5LHRpdGxlLG51bUV2ZW50czowLHRvdGFsRXZlbnRTaXplaW5CeXRlczowfTt0aGlzLnRyYWNlRXZlbnRDb3VudHNCeUtleV8uc2V0KGtleSxldmVudFN0YXRzKTt0aGlzLmFsbFRyYWNlRXZlbnRTdGF0c18ucHVzaChldmVudFN0YXRzKTt9CmV2ZW50U3RhdHMubnVtRXZlbnRzKys7Y29uc3QgdGltZUludGVydmFsS2V5PU1hdGguZmxvb3IodHIuYi5Vbml0LnRpbWVzdGFtcEZyb21Vcyh0cykvdGhpcy5USU1FX0lOVEVSVkFMX1NJWkVfSU5fTVMpO2xldCBldmVudFN0YXRzQnlUaW1lSW52ZXJ2YWw9dGhpcy50cmFjZUV2ZW50U3RhdHNJblRpbWVJbnRlcnZhbHNfLmdldCh0aW1lSW50ZXJ2YWxLZXkpO2lmKGV2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbD09PXVuZGVmaW5lZCl7ZXZlbnRTdGF0c0J5VGltZUludmVydmFsPXt0aW1lSW50ZXJ2YWw6dGltZUludGVydmFsS2V5LG51bUV2ZW50czowLHRvdGFsRXZlbnRTaXplaW5CeXRlczowfTt0aGlzLnRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFsc18uc2V0KHRpbWVJbnRlcnZhbEtleSxldmVudFN0YXRzQnlUaW1lSW52ZXJ2YWwpO3RoaXMuYWxsVHJhY2VFdmVudFN0YXRzSW5UaW1lSW50ZXJ2YWxzXy5wdXNoKGV2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbCk7fQpldmVudFN0YXRzQnlUaW1lSW52ZXJ2YWwubnVtRXZlbnRzKys7aWYob3B0X2V2ZW50U2l6ZWluQnl0ZXMhPT11bmRlZmluZWQpe3RoaXMuaGFzRXZlbnRTaXplc2luQnl0ZXNfPXRydWU7ZXZlbnRTdGF0cy50b3RhbEV2ZW50U2l6ZWluQnl0ZXMrPW9wdF9ldmVudFNpemVpbkJ5dGVzO2V2ZW50U3RhdHNCeVRpbWVJbnZlcnZhbC50b3RhbEV2ZW50U2l6ZWluQnl0ZXMrPW9wdF9ldmVudFNpemVpbkJ5dGVzO319LGdldCBhbGxUcmFjZUV2ZW50U3RhdHMoKXtyZXR1cm4gdGhpcy5hbGxUcmFjZUV2ZW50U3RhdHNfO30sZ2V0IGFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFscygpe3JldHVybiB0aGlzLmFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFsc187fSxnZXQgaGFzRXZlbnRTaXplc2luQnl0ZXMoKXtyZXR1cm4gdGhpcy5oYXNFdmVudFNpemVzaW5CeXRlc187fSxnZXQgdHJhY2VJbXBvcnREdXJhdGlvbk1zKCl7cmV0dXJuIHRoaXMudHJhY2VJbXBvcnREdXJhdGlvbk1zXzt9LHNldCB0cmFjZUltcG9ydER1cmF0aW9uTXModHJhY2VJbXBvcnREdXJhdGlvbk1zKXt0aGlzLnRyYWNlSW1wb3J0RHVyYXRpb25Nc189dHJhY2VJbXBvcnREdXJhdGlvbk1zO319O3JldHVybntNb2RlbFN0YXRzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBWTVJlZ2lvbihzdGFydEFkZHJlc3Msc2l6ZUluQnl0ZXMscHJvdGVjdGlvbkZsYWdzLG1hcHBlZEZpbGUsYnl0ZVN0YXRzKXt0aGlzLnN0YXJ0QWRkcmVzcz1zdGFydEFkZHJlc3M7dGhpcy5zaXplSW5CeXRlcz1zaXplSW5CeXRlczt0aGlzLnByb3RlY3Rpb25GbGFncz1wcm90ZWN0aW9uRmxhZ3M7dGhpcy5tYXBwZWRGaWxlPW1hcHBlZEZpbGV8fCcnO3RoaXMuYnl0ZVN0YXRzPWJ5dGVTdGF0c3x8e307fQpWTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfUkVBRD00O1ZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19XUklURT0yO1ZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19FWEVDVVRFPTE7Vk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX01BWVNIQVJFPTEyODtWTVJlZ2lvbi5wcm90b3R5cGU9e2dldCB1bmlxdWVJZFdpdGhpblByb2Nlc3MoKXtyZXR1cm4gdGhpcy5tYXBwZWRGaWxlKycjJyt0aGlzLnN0YXJ0QWRkcmVzczt9LGdldCBwcm90ZWN0aW9uRmxhZ3NUb1N0cmluZygpe2lmKHRoaXMucHJvdGVjdGlvbkZsYWdzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuKCh0aGlzLnByb3RlY3Rpb25GbGFncyZWTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfUkVBRD8ncic6Jy0nKSsKKHRoaXMucHJvdGVjdGlvbkZsYWdzJlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19XUklURT8ndyc6Jy0nKSsKKHRoaXMucHJvdGVjdGlvbkZsYWdzJlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19FWEVDVVRFPyd4JzonLScpKwoodGhpcy5wcm90ZWN0aW9uRmxhZ3MmVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX01BWVNIQVJFPydzJzoncCcpKTt9fTtWTVJlZ2lvbi5mcm9tRGljdD1mdW5jdGlvbihkaWN0KXtyZXR1cm4gbmV3IFZNUmVnaW9uKGRpY3Quc3RhcnRBZGRyZXNzLGRpY3Quc2l6ZUluQnl0ZXMsZGljdC5wcm90ZWN0aW9uRmxhZ3MsZGljdC5tYXBwZWRGaWxlLGRpY3QuYnl0ZVN0YXRzKTt9O2Z1bmN0aW9uIFZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlKG9wdF9ydWxlKXt0aGlzLnJ1bGVfPW9wdF9ydWxlfHxWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5DTEFTU0lGSUNBVElPTl9SVUxFUzt0aGlzLmhhc1JlZ2lvbnM9ZmFsc2U7dGhpcy5zaXplSW5CeXRlcz11bmRlZmluZWQ7dGhpcy5ieXRlU3RhdHM9e307dGhpcy5jaGlsZHJlbl89dW5kZWZpbmVkO3RoaXMucmVnaW9uc189W107fQpWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5DTEFTU0lGSUNBVElPTl9SVUxFUz17bmFtZTonVG90YWwnLGNoaWxkcmVuOlt7bmFtZTonQW5kcm9pZCcsZmlsZTovXlwvZGV2XC9hc2htZW0oPyFcL2xpYmMgbWFsbG9jKS8sY2hpbGRyZW46W3tuYW1lOidKYXZhIHJ1bnRpbWUnLGZpbGU6L15cL2RldlwvYXNobWVtXC9kYWx2aWstLyxjaGlsZHJlbjpbe25hbWU6J1NwYWNlcycsZmlsZTovXC9kYWx2aWstKGFsbG9jfG1haW58bGFyZ2Ugb2JqZWN0fG5vbiBtb3Zpbmd8enlnb3RlKSBzcGFjZS8sY2hpbGRyZW46W3tuYW1lOidOb3JtYWwnLGZpbGU6L1wvZGFsdmlrLShhbGxvY3xtYWluKS99LHtuYW1lOidMYXJnZScsZmlsZTovXC9kYWx2aWstbGFyZ2Ugb2JqZWN0L30se25hbWU6J1p5Z290ZScsZmlsZTovXC9kYWx2aWstenlnb3RlL30se25hbWU6J05vbi1tb3ZpbmcnLGZpbGU6L1wvZGFsdmlrLW5vbiBtb3ZpbmcvfV19LHtuYW1lOidMaW5lYXIgQWxsb2MnLGZpbGU6L1wvZGFsdmlrLUxpbmVhckFsbG9jL30se25hbWU6J0luZGlyZWN0IFJlZmVyZW5jZSBUYWJsZScsZmlsZTovXC9kYWx2aWstaW5kaXJlY3QucmVmL30se25hbWU6J0NhY2hlJyxmaWxlOi9cL2RhbHZpay1qaXQtY29kZS1jYWNoZS99LHtuYW1lOidBY2NvdW50aW5nJ31dfSx7bmFtZTonQ3Vyc29yJyxmaWxlOi9cL0N1cnNvcldpbmRvdy99LHtuYW1lOidBc2htZW0nfV19LHtuYW1lOidOYXRpdmUgaGVhcCcsZmlsZTovXigoXFtoZWFwXF0pfChcW2Fub246KXwoXC9kZXZcL2FzaG1lbVwvbGliYyBtYWxsb2MpfChcW2Rpc2NvdW50ZWQgdHJhY2luZyBvdmVyaGVhZFxdKXwkKS99LHtuYW1lOidTdGFjaycsZmlsZTovXlxbc3RhY2svfSx7bmFtZTonRmlsZXMnLGZpbGU6L1wuKCgoKGphcil8KGFwayl8KHR0Zil8KG9kZXgpfChvYXQpfChhcnQpKSQpfChkZXgpfChzbykpLyxjaGlsZHJlbjpbe25hbWU6J3NvJyxmaWxlOi9cLnNvL30se25hbWU6J2phcicsZmlsZTovXC5qYXIkL30se25hbWU6J2FwaycsZmlsZTovXC5hcGskL30se25hbWU6J3R0ZicsZmlsZTovXC50dGYkL30se25hbWU6J2RleCcsZmlsZTovXC4oKGRleCl8KG9kZXgkKSkvfSx7bmFtZTonb2F0JyxmaWxlOi9cLm9hdCQvfSx7bmFtZTonYXJ0JyxmaWxlOi9cLmFydCQvfV19LHtuYW1lOidEZXZpY2VzJyxmaWxlOi8oXlwvZGV2XC8pfChhbm9uX2lub2RlOmRtYWJ1ZikvLGNoaWxkcmVuOlt7bmFtZTonR1BVJyxmaWxlOi9cLygobnYpfChtYWxpKXwoa2dzbCkpL30se25hbWU6J0RNQScsZmlsZTovYW5vbl9pbm9kZTpkbWFidWYvfV19XX07Vk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUuT1RIRVJfUlVMRT17bmFtZTonT3RoZXInfTtWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5mcm9tUmVnaW9ucz1mdW5jdGlvbihyZWdpb25zLG9wdF9ydWxlcyl7Y29uc3QgdHJlZT1uZXcgVk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUob3B0X3J1bGVzKTt0cmVlLnJlZ2lvbnNfPXJlZ2lvbnM7Zm9yKGxldCBpPTA7aTxyZWdpb25zLmxlbmd0aDtpKyspe3RyZWUuYWRkU3RhdHNGcm9tUmVnaW9uXyhyZWdpb25zW2ldKTt9CnJldHVybiB0cmVlO307Vk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUucHJvdG90eXBlPXtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5ydWxlXy5uYW1lO30sZ2V0IGNoaWxkcmVuKCl7aWYodGhpcy5pc0xlYWZOb2RlKXtyZXR1cm4gdW5kZWZpbmVkO30KaWYodGhpcy5jaGlsZHJlbl89PT11bmRlZmluZWQpe3RoaXMuYnVpbGRUcmVlXygpO30KcmV0dXJuIHRoaXMuY2hpbGRyZW5fO30sZ2V0IHJlZ2lvbnMoKXtpZighdGhpcy5pc0xlYWZOb2RlKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMucmVnaW9uc187fSxnZXQgYWxsUmVnaW9uc0ZvclRlc3RpbmcoKXtpZih0aGlzLnJlZ2lvbnNfIT09dW5kZWZpbmVkKXtpZih0aGlzLmNoaWxkcmVuXyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBlcnJvcjogYSBWTSByZWdpb24gY2xhc3NpZmljYXRpb24gbm9kZSAnKydjYW5ub3QgaGF2ZSBib3RoIHJlZ2lvbnMgYW5kIGNoaWxkcmVuJyk7fQpyZXR1cm4gdGhpcy5yZWdpb25zXzt9CmxldCByZWdpb25zPVtdO3RoaXMuY2hpbGRyZW5fLmZvckVhY2goZnVuY3Rpb24oY2hpbGROb2RlKXtyZWdpb25zPXJlZ2lvbnMuY29uY2F0KGNoaWxkTm9kZS5hbGxSZWdpb25zRm9yVGVzdGluZyk7fSk7cmV0dXJuIHJlZ2lvbnM7fSxnZXQgaXNMZWFmTm9kZSgpe2NvbnN0IGNoaWxkcmVuPXRoaXMucnVsZV8uY2hpbGRyZW47cmV0dXJuIGNoaWxkcmVuPT09dW5kZWZpbmVkfHxjaGlsZHJlbi5sZW5ndGg9PT0wO30sYWRkUmVnaW9uKHJlZ2lvbil7dGhpcy5hZGRSZWdpb25SZWN1cnNpdmVseV8ocmVnaW9uLHRydWUpO30sc29tZVJlZ2lvbihmbixvcHRfdGhpcyl7aWYodGhpcy5yZWdpb25zXyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMucmVnaW9uc18uc29tZShmbixvcHRfdGhpcyk7fQpyZXR1cm4gdGhpcy5jaGlsZHJlbl8uc29tZShmdW5jdGlvbihjaGlsZE5vZGUpe3JldHVybiBjaGlsZE5vZGUuc29tZVJlZ2lvbihmbixvcHRfdGhpcyk7fSk7fSxhZGRSZWdpb25SZWN1cnNpdmVseV8ocmVnaW9uLGFkZFN0YXRzVG9UaGlzTm9kZSl7aWYoYWRkU3RhdHNUb1RoaXNOb2RlKXt0aGlzLmFkZFN0YXRzRnJvbVJlZ2lvbl8ocmVnaW9uKTt9CmlmKHRoaXMucmVnaW9uc18hPT11bmRlZmluZWQpe2lmKHRoaXMuY2hpbGRyZW5fIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBhIFZNIHJlZ2lvbiBjbGFzc2lmaWNhdGlvbiBub2RlICcrJ2Nhbm5vdCBoYXZlIGJvdGggcmVnaW9ucyBhbmQgY2hpbGRyZW4nKTt9CnRoaXMucmVnaW9uc18ucHVzaChyZWdpb24pO3JldHVybjt9CmZ1bmN0aW9uIHJlZ2lvblJvd01hdGNoZXNDaGlsZE5pZGUoY2hpbGQpe2NvbnN0IGZpbGVSZWdFeHA9Y2hpbGQucnVsZV8uZmlsZTtpZihmaWxlUmVnRXhwPT09dW5kZWZpbmVkKXJldHVybiB0cnVlO3JldHVybiBmaWxlUmVnRXhwLnRlc3QocmVnaW9uLm1hcHBlZEZpbGUpO30KbGV0IG1hdGNoZWRDaGlsZD10aGlzLmNoaWxkcmVuXy5maW5kKHJlZ2lvblJvd01hdGNoZXNDaGlsZE5pZGUpO2lmKG1hdGNoZWRDaGlsZD09PXVuZGVmaW5lZCl7aWYodGhpcy5jaGlsZHJlbl8ubGVuZ3RoIT09dGhpcy5ydWxlXy5jaGlsZHJlbi5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3InKTt9Cm1hdGNoZWRDaGlsZD1uZXcgVk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUoVk1SZWdpb25DbGFzc2lmaWNhdGlvbk5vZGUuT1RIRVJfUlVMRSk7dGhpcy5jaGlsZHJlbl8ucHVzaChtYXRjaGVkQ2hpbGQpO30KbWF0Y2hlZENoaWxkLmFkZFJlZ2lvblJlY3Vyc2l2ZWx5XyhyZWdpb24sdHJ1ZSk7fSxidWlsZFRyZWVfKCl7Y29uc3QgY2FjaGVkUmVnaW9ucz10aGlzLnJlZ2lvbnNfO3RoaXMucmVnaW9uc189dW5kZWZpbmVkO3RoaXMuYnVpbGRDaGlsZE5vZGVzUmVjdXJzaXZlbHlfKCk7Zm9yKGxldCBpPTA7aTxjYWNoZWRSZWdpb25zLmxlbmd0aDtpKyspe3RoaXMuYWRkUmVnaW9uUmVjdXJzaXZlbHlfKGNhY2hlZFJlZ2lvbnNbaV0sZmFsc2UpO319LGJ1aWxkQ2hpbGROb2Rlc1JlY3Vyc2l2ZWx5Xygpe2lmKHRoaXMuY2hpbGRyZW5fIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBDbGFzc2lmaWNhdGlvbiBub2RlIGFscmVhZHkgaGFzIGNoaWxkcmVuJyk7fQppZih0aGlzLnJlZ2lvbnNfIT09dW5kZWZpbmVkJiZ0aGlzLnJlZ2lvbnNfLmxlbmd0aCE9PTApe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3I6IENsYXNzaWZpY2F0aW9uIG5vZGUgc2hvdWxkIGhhdmUgbm8gcmVnaW9ucycpO30KaWYodGhpcy5pc0xlYWZOb2RlKXtyZXR1cm47fQp0aGlzLnJlZ2lvbnNfPXVuZGVmaW5lZDt0aGlzLmNoaWxkcmVuXz10aGlzLnJ1bGVfLmNoaWxkcmVuLm1hcChmdW5jdGlvbihjaGlsZFJ1bGUpe2NvbnN0IGNoaWxkPW5ldyBWTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShjaGlsZFJ1bGUpO2NoaWxkLmJ1aWxkQ2hpbGROb2Rlc1JlY3Vyc2l2ZWx5XygpO3JldHVybiBjaGlsZDt9KTt9LGFkZFN0YXRzRnJvbVJlZ2lvbl8ocmVnaW9uKXt0aGlzLmhhc1JlZ2lvbnM9dHJ1ZTtjb25zdCByZWdpb25TaXplSW5CeXRlcz1yZWdpb24uc2l6ZUluQnl0ZXM7aWYocmVnaW9uU2l6ZUluQnl0ZXMhPT11bmRlZmluZWQpe3RoaXMuc2l6ZUluQnl0ZXM9KHRoaXMuc2l6ZUluQnl0ZXN8fDApK3JlZ2lvblNpemVJbkJ5dGVzO30KY29uc3QgdGhpc0J5dGVTdGF0cz10aGlzLmJ5dGVTdGF0cztjb25zdCByZWdpb25CeXRlU3RhdHM9cmVnaW9uLmJ5dGVTdGF0cztmb3IoY29uc3QgYnl0ZVN0YXROYW1lIGluIHJlZ2lvbkJ5dGVTdGF0cyl7Y29uc3QgcmVnaW9uQnl0ZVN0YXRWYWx1ZT1yZWdpb25CeXRlU3RhdHNbYnl0ZVN0YXROYW1lXTtpZihyZWdpb25CeXRlU3RhdFZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO3RoaXNCeXRlU3RhdHNbYnl0ZVN0YXROYW1lXT0odGhpc0J5dGVTdGF0c1tieXRlU3RhdE5hbWVdfHwwKStyZWdpb25CeXRlU3RhdFZhbHVlO30KaWYocmVnaW9uLm1hcHBlZEZpbGUuaW5jbHVkZXMoJy9iYXNlLm9kZXgnKXx8cmVnaW9uLm1hcHBlZEZpbGUuaW5jbHVkZXMoJy9iYXNlLnZkZXgnKSl7aWYocmVnaW9uLmJ5dGVTdGF0cy5wcm9wb3J0aW9uYWxSZXNpZGVudCE9PXVuZGVmaW5lZCl7dGhpc0J5dGVTdGF0cy5qYXZhQmFzZVBzcz0odGhpc0J5dGVTdGF0cy5qYXZhQmFzZVBzc3x8MCkrCnJlZ2lvbi5ieXRlU3RhdHMucHJvcG9ydGlvbmFsUmVzaWRlbnQ7fQppZihyZWdpb24uYnl0ZVN0YXRzLnByaXZhdGVDbGVhblJlc2lkZW50IT09dW5kZWZpbmVkKXt0aGlzQnl0ZVN0YXRzLmphdmFCYXNlQ2xlYW5SZXNpZGVudD0odGhpc0J5dGVTdGF0cy5qYXZhQmFzZUNsZWFuUmVzaWRlbnR8fDApKwpyZWdpb24uYnl0ZVN0YXRzLnByaXZhdGVDbGVhblJlc2lkZW50O30KaWYocmVnaW9uLmJ5dGVTdGF0cy5zaGFyZWRDbGVhblJlc2lkZW50IT09dW5kZWZpbmVkKXt0aGlzQnl0ZVN0YXRzLmphdmFCYXNlQ2xlYW5SZXNpZGVudD0odGhpc0J5dGVTdGF0cy5qYXZhQmFzZUNsZWFuUmVzaWRlbnR8fDApKwpyZWdpb24uYnl0ZVN0YXRzLnNoYXJlZENsZWFuUmVzaWRlbnQ7fX0KY29uc3QgdGV4dFByb3RlY3Rpb25GbGFncz0oVk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX1JFQUR8Vk1SZWdpb24uUFJPVEVDVElPTl9GTEFHX0VYRUNVVEUpO2lmKChyZWdpb24ucHJvdGVjdGlvbkZsYWdzPT09dGV4dFByb3RlY3Rpb25GbGFncykmJihyZWdpb24ubWFwcGVkRmlsZS5pbmNsdWRlcygnL2Jhc2UuYXBrJyl8fHJlZ2lvbi5tYXBwZWRGaWxlLmluY2x1ZGVzKCcvbGliY2hyb21lLnNvJykpKXtpZihyZWdpb25TaXplSW5CeXRlcyE9PXVuZGVmaW5lZCl7dGhpcy5uYXRpdmVMaWJyYXJ5U2l6ZUluQnl0ZXM9KHRoaXMubmF0aXZlTGlicmFyeVNpemVJbkJ5dGVzfHwwKStyZWdpb25TaXplSW5CeXRlczt9CmlmKHJlZ2lvbi5ieXRlU3RhdHMucHJpdmF0ZUNsZWFuUmVzaWRlbnQhPT11bmRlZmluZWQpe3RoaXNCeXRlU3RhdHMubmF0aXZlTGlicmFyeVByaXZhdGVDbGVhblJlc2lkZW50PSh0aGlzQnl0ZVN0YXRzLm5hdGl2ZUxpYnJhcnlQcml2YXRlQ2xlYW5SZXNpZGVudHx8MCkrCnJlZ2lvbi5ieXRlU3RhdHMucHJpdmF0ZUNsZWFuUmVzaWRlbnQ7fQppZihyZWdpb24uYnl0ZVN0YXRzLnNoYXJlZENsZWFuUmVzaWRlbnQhPT11bmRlZmluZWQpe3RoaXNCeXRlU3RhdHMubmF0aXZlTGlicmFyeVNoYXJlZENsZWFuUmVzaWRlbnQ9KHRoaXNCeXRlU3RhdHMubmF0aXZlTGlicmFyeVNoYXJlZENsZWFuUmVzaWRlbnR8fDApKwpyZWdpb24uYnl0ZVN0YXRzLnNoYXJlZENsZWFuUmVzaWRlbnQ7fQppZihyZWdpb24uYnl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50IT09dW5kZWZpbmVkKXt0aGlzQnl0ZVN0YXRzLm5hdGl2ZUxpYnJhcnlQcm9wb3J0aW9uYWxSZXNpZGVudD0odGhpc0J5dGVTdGF0cy5uYXRpdmVMaWJyYXJ5UHJvcG9ydGlvbmFsUmVzaWRlbnR8fDApKwpyZWdpb24uYnl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50O319fX07cmV0dXJue1ZNUmVnaW9uLFZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBESVNDT1VOVEVEX0FMTE9DQVRPUl9OQU1FUz1bJ3dpbmhlYXAnLCdtYWxsb2MnXTtjb25zdCBUUkFDSU5HX09WRVJIRUFEX1BBVEg9WydhbGxvY2F0ZWRfb2JqZWN0cycsJ3RyYWNpbmdfb3ZlcmhlYWQnXTtjb25zdCBTSVpFX05VTUVSSUNfTkFNRT10ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLlNJWkVfTlVNRVJJQ19OQU1FO2NvbnN0IFJFU0lERU5UX1NJWkVfTlVNRVJJQ19OQU1FPXRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAuUkVTSURFTlRfU0laRV9OVU1FUklDX05BTUU7ZnVuY3Rpb24gZ2V0U2l6ZU51bWVyaWNWYWx1ZShkdW1wLHNpemVOdW1lcmljTmFtZSl7Y29uc3Qgc2l6ZU51bWVyaWM9ZHVtcC5udW1lcmljc1tzaXplTnVtZXJpY05hbWVdO2lmKHNpemVOdW1lcmljPT09dW5kZWZpbmVkKXJldHVybiAwO3JldHVybiBzaXplTnVtZXJpYy52YWx1ZTt9CmZ1bmN0aW9uIFByb2Nlc3NNZW1vcnlEdW1wKGdsb2JhbE1lbW9yeUR1bXAscHJvY2VzcyxzdGFydCl7dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5jYWxsKHRoaXMsc3RhcnQpO3RoaXMucHJvY2Vzcz1wcm9jZXNzO3RoaXMuZ2xvYmFsTWVtb3J5RHVtcD1nbG9iYWxNZW1vcnlEdW1wO3RoaXMudG90YWxzPXVuZGVmaW5lZDt0aGlzLnZtUmVnaW9ucz11bmRlZmluZWQ7dGhpcy5oZWFwRHVtcHM9dW5kZWZpbmVkO3RoaXMudHJhY2luZ092ZXJoZWFkT3duZXJzaGlwU2V0VXBfPWZhbHNlO3RoaXMudHJhY2luZ092ZXJoZWFkRGlzY291bnRlZEZyb21WbVJlZ2lvbnNfPWZhbHNlO30KUHJvY2Vzc01lbW9yeUR1bXAucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5wcm90b3R5cGUsZ2V0IHN0YWJsZUlkKCl7cmV0dXJuIHRoaXMucHJvY2Vzcy5zdGFibGVJZCsnLm1lbW9yeS4nKwp0aGlzLnByb2Nlc3MubWVtb3J5RHVtcHMuaW5kZXhPZih0aGlzKTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7cmV0dXJuJ1Byb2Nlc3MgbWVtb3J5IGR1bXAgYXQgJysKdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnN0YXJ0KTt9LGdldCBjb250YWluZXJOYW1lKCl7cmV0dXJuIHRoaXMucHJvY2Vzcy51c2VyRnJpZW5kbHlOYW1lO30sZ2V0IHByb2Nlc3NNZW1vcnlEdW1wcygpe2NvbnN0IGR1bXBzPXt9O2R1bXBzW3RoaXMucHJvY2Vzcy5waWRdPXRoaXM7cmV0dXJuIGR1bXBzO30sZ2V0IGhhc093blZtUmVnaW9ucygpe3JldHVybiB0aGlzLnZtUmVnaW9ucyE9PXVuZGVmaW5lZDt9LHNldFVwVHJhY2luZ092ZXJoZWFkT3duZXJzaGlwKG9wdF9tb2RlbCl7aWYodGhpcy50cmFjaW5nT3ZlcmhlYWRPd25lcnNoaXBTZXRVcF8pcmV0dXJuO3RoaXMudHJhY2luZ092ZXJoZWFkT3duZXJzaGlwU2V0VXBfPXRydWU7Y29uc3QgdHJhY2luZ0R1bXA9dGhpcy5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSgndHJhY2luZycpO2lmKHRyYWNpbmdEdW1wPT09dW5kZWZpbmVkfHx0cmFjaW5nRHVtcC5vd25zIT09dW5kZWZpbmVkKXtyZXR1cm47fQppZih0cmFjaW5nRHVtcC5vd25zIT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBoYXNEaXNjb3VudGVkRnJvbUFsbG9jYXRvckR1bXBzPURJU0NPVU5URURfQUxMT0NBVE9SX05BTUVTLnNvbWUoZnVuY3Rpb24oYWxsb2NhdG9yTmFtZSl7Y29uc3QgYWxsb2NhdG9yRHVtcD10aGlzLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKGFsbG9jYXRvck5hbWUpO2lmKGFsbG9jYXRvckR1bXA9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmxldCBuZXh0UGF0aEluZGV4PTA7bGV0IGN1cnJlbnREdW1wPWFsbG9jYXRvckR1bXA7bGV0IGN1cnJlbnRGdWxsTmFtZT1hbGxvY2F0b3JOYW1lO2Zvcig7bmV4dFBhdGhJbmRleDxUUkFDSU5HX09WRVJIRUFEX1BBVEgubGVuZ3RoO25leHRQYXRoSW5kZXgrKyl7Y29uc3QgY2hpbGRGdWxsTmFtZT1jdXJyZW50RnVsbE5hbWUrJy8nKwpUUkFDSU5HX09WRVJIRUFEX1BBVEhbbmV4dFBhdGhJbmRleF07Y29uc3QgY2hpbGREdW1wPXRoaXMuZ2V0TWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWUoY2hpbGRGdWxsTmFtZSk7aWYoY2hpbGREdW1wPT09dW5kZWZpbmVkKWJyZWFrO2N1cnJlbnREdW1wPWNoaWxkRHVtcDtjdXJyZW50RnVsbE5hbWU9Y2hpbGRGdWxsTmFtZTt9CmZvcig7bmV4dFBhdGhJbmRleDxUUkFDSU5HX09WRVJIRUFEX1BBVEgubGVuZ3RoO25leHRQYXRoSW5kZXgrKyl7Y29uc3QgY2hpbGRGdWxsTmFtZT1jdXJyZW50RnVsbE5hbWUrJy8nKwpUUkFDSU5HX09WRVJIRUFEX1BBVEhbbmV4dFBhdGhJbmRleF07Y29uc3QgY2hpbGREdW1wPW5ldyB0ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wKGN1cnJlbnREdW1wLmNvbnRhaW5lck1lbW9yeUR1bXAsY2hpbGRGdWxsTmFtZSk7Y2hpbGREdW1wLnBhcmVudD1jdXJyZW50RHVtcDtjdXJyZW50RHVtcC5jaGlsZHJlbi5wdXNoKGNoaWxkRHVtcCk7Y3VycmVudEZ1bGxOYW1lPWNoaWxkRnVsbE5hbWU7Y3VycmVudER1bXA9Y2hpbGREdW1wO30KY29uc3Qgb3duZXJzaGlwTGluaz1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcExpbmsodHJhY2luZ0R1bXAsY3VycmVudER1bXApO3RyYWNpbmdEdW1wLm93bnM9b3duZXJzaGlwTGluaztjdXJyZW50RHVtcC5vd25lZEJ5LnB1c2gob3duZXJzaGlwTGluayk7cmV0dXJuIHRydWU7fSx0aGlzKTtpZihoYXNEaXNjb3VudGVkRnJvbUFsbG9jYXRvckR1bXBzKXt0aGlzLmZvcmNlUmVidWlsZGluZ01lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lSW5kZXgoKTt9fSxkaXNjb3VudFRyYWNpbmdPdmVyaGVhZEZyb21WbVJlZ2lvbnMob3B0X21vZGVsKXtpZih0aGlzLnRyYWNpbmdPdmVyaGVhZERpc2NvdW50ZWRGcm9tVm1SZWdpb25zXylyZXR1cm47dGhpcy50cmFjaW5nT3ZlcmhlYWREaXNjb3VudGVkRnJvbVZtUmVnaW9uc189dHJ1ZTtjb25zdCB0cmFjaW5nRHVtcD10aGlzLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKCd0cmFjaW5nJyk7aWYodHJhY2luZ0R1bXA9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGRpc2NvdW50ZWRTaXplPWdldFNpemVOdW1lcmljVmFsdWUodHJhY2luZ0R1bXAsU0laRV9OVU1FUklDX05BTUUpO2NvbnN0IGRpc2NvdW50ZWRSZXNpZGVudFNpemU9Z2V0U2l6ZU51bWVyaWNWYWx1ZSh0cmFjaW5nRHVtcCxSRVNJREVOVF9TSVpFX05VTUVSSUNfTkFNRSk7aWYoZGlzY291bnRlZFNpemU8PTAmJmRpc2NvdW50ZWRSZXNpZGVudFNpemU8PTApcmV0dXJuO2lmKHRoaXMudG90YWxzIT09dW5kZWZpbmVkKXtpZih0aGlzLnRvdGFscy5yZXNpZGVudEJ5dGVzIT09dW5kZWZpbmVkKXt0aGlzLnRvdGFscy5yZXNpZGVudEJ5dGVzLT1kaXNjb3VudGVkUmVzaWRlbnRTaXplO30KaWYodGhpcy50b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXMhPT11bmRlZmluZWQpe3RoaXMudG90YWxzLnBlYWtSZXNpZGVudEJ5dGVzLT1kaXNjb3VudGVkUmVzaWRlbnRTaXplO319CmlmKHRoaXMudm1SZWdpb25zIT09dW5kZWZpbmVkKXtjb25zdCBoYXNTaXplSW5CeXRlcz10aGlzLnZtUmVnaW9ucy5zaXplSW5CeXRlcyE9PXVuZGVmaW5lZDtjb25zdCBoYXNQcml2YXRlRGlydHlSZXNpZGVudD10aGlzLnZtUmVnaW9ucy5ieXRlU3RhdHMucHJpdmF0ZURpcnR5UmVzaWRlbnQhPT11bmRlZmluZWQ7Y29uc3QgaGFzUHJvcG9ydGlvbmFsUmVzaWRlbnQ9dGhpcy52bVJlZ2lvbnMuYnl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50IT09dW5kZWZpbmVkO2lmKChoYXNTaXplSW5CeXRlcyYmZGlzY291bnRlZFNpemU+MCl8fCgoaGFzUHJpdmF0ZURpcnR5UmVzaWRlbnR8fGhhc1Byb3BvcnRpb25hbFJlc2lkZW50KSYmZGlzY291bnRlZFJlc2lkZW50U2l6ZT4wKSl7Y29uc3QgYnl0ZVN0YXRzPXt9O2lmKGhhc1ByaXZhdGVEaXJ0eVJlc2lkZW50KXtieXRlU3RhdHMucHJpdmF0ZURpcnR5UmVzaWRlbnQ9LWRpc2NvdW50ZWRSZXNpZGVudFNpemU7fQppZihoYXNQcm9wb3J0aW9uYWxSZXNpZGVudCl7Ynl0ZVN0YXRzLnByb3BvcnRpb25hbFJlc2lkZW50PS1kaXNjb3VudGVkUmVzaWRlbnRTaXplO30KdGhpcy52bVJlZ2lvbnMuYWRkUmVnaW9uKHRyLm1vZGVsLlZNUmVnaW9uLmZyb21EaWN0KHttYXBwZWRGaWxlOidbZGlzY291bnRlZCB0cmFjaW5nIG92ZXJoZWFkXScsc2l6ZUluQnl0ZXM6aGFzU2l6ZUluQnl0ZXM/LWRpc2NvdW50ZWRTaXplOnVuZGVmaW5lZCxieXRlU3RhdHN9KSk7fX19fTtQcm9jZXNzTWVtb3J5RHVtcC5ob29rVXBNb3N0UmVjZW50Vm1SZWdpb25zTGlua3M9ZnVuY3Rpb24ocHJvY2Vzc0R1bXBzKXtsZXQgbW9zdFJlY2VudFZtUmVnaW9ucz11bmRlZmluZWQ7cHJvY2Vzc0R1bXBzLmZvckVhY2goZnVuY3Rpb24ocHJvY2Vzc0R1bXApe2lmKHByb2Nlc3NEdW1wLnZtUmVnaW9ucyE9PXVuZGVmaW5lZCl7bW9zdFJlY2VudFZtUmVnaW9ucz1wcm9jZXNzRHVtcC52bVJlZ2lvbnM7fQpwcm9jZXNzRHVtcC5tb3N0UmVjZW50Vm1SZWdpb25zPW1vc3RSZWNlbnRWbVJlZ2lvbnM7fSk7fTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFByb2Nlc3NNZW1vcnlEdW1wLHtuYW1lOidwcm9jZXNzTWVtb3J5RHVtcCcscGx1cmFsTmFtZToncHJvY2Vzc01lbW9yeUR1bXBzJ30pO3JldHVybntQcm9jZXNzTWVtb3J5RHVtcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgUHJvY2Vzc0Jhc2U9dHIubW9kZWwuUHJvY2Vzc0Jhc2U7Y29uc3QgUHJvY2Vzc0luc3RhbnRFdmVudD10ci5tb2RlbC5Qcm9jZXNzSW5zdGFudEV2ZW50O2NvbnN0IEZyYW1lPXRyLm1vZGVsLkZyYW1lO2NvbnN0IFByb2Nlc3NNZW1vcnlEdW1wPXRyLm1vZGVsLlByb2Nlc3NNZW1vcnlEdW1wO2Z1bmN0aW9uIFByb2Nlc3MobW9kZWwscGlkKXtpZihtb2RlbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdtb2RlbCBtdXN0IGJlIHByb3ZpZGVkJyk7fQppZihwaWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcigncGlkIG11c3QgYmUgcHJvdmlkZWQnKTt9CnRyLm1vZGVsLlByb2Nlc3NCYXNlLmNhbGwodGhpcyxtb2RlbCk7dGhpcy5waWQ9cGlkO3RoaXMubmFtZT11bmRlZmluZWQ7dGhpcy5sYWJlbHM9W107dGhpcy51cHRpbWVfc2Vjb25kcz0wO3RoaXMuaW5zdGFudEV2ZW50cz1bXTt0aGlzLm1lbW9yeUR1bXBzPVtdO3RoaXMuZnJhbWVzPVtdO3RoaXMuYWN0aXZpdGllcz1bXTt9ClByb2Nlc3MuY29tcGFyZT1mdW5jdGlvbih4LHkpe2xldCB0bXA9dHIubW9kZWwuUHJvY2Vzc0Jhc2UuY29tcGFyZSh4LHkpO2lmKHRtcClyZXR1cm4gdG1wO2lmKHgubmFtZSE9PXVuZGVmaW5lZCl7aWYoeS5uYW1lIT09dW5kZWZpbmVkKXt0bXA9eC5uYW1lLmxvY2FsZUNvbXBhcmUoeS5uYW1lKTt9ZWxzZXt0bXA9LTE7fX1lbHNlIGlmKHkubmFtZSE9PXVuZGVmaW5lZCl7dG1wPTE7fQppZih0bXApcmV0dXJuIHRtcDt0bXA9dHIuYi5jb21wYXJlQXJyYXlzKHgubGFiZWxzLHkubGFiZWxzLGZ1bmN0aW9uKHgseSl7cmV0dXJuIHgubG9jYWxlQ29tcGFyZSh5KTt9KTtpZih0bXApcmV0dXJuIHRtcDtyZXR1cm4geC5waWQteS5waWQ7fTtQcm9jZXNzLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLlByb2Nlc3NCYXNlLnByb3RvdHlwZSxnZXQgc3RhYmxlSWQoKXtyZXR1cm4gdGhpcy5waWQ7fSxjb21wYXJlVG8odGhhdCl7cmV0dXJuIFByb2Nlc3MuY29tcGFyZSh0aGlzLHRoYXQpO30sKmNoaWxkRXZlbnRzKCl7eWllbGQqUHJvY2Vzc0Jhc2UucHJvdG90eXBlLmNoaWxkRXZlbnRzLmNhbGwodGhpcyk7eWllbGQqdGhpcy5pbnN0YW50RXZlbnRzO3lpZWxkKnRoaXMuZnJhbWVzO3lpZWxkKnRoaXMubWVtb3J5RHVtcHM7fSxhZGRMYWJlbElmTmVlZGVkKGxhYmVsTmFtZSl7Zm9yKGxldCBpPTA7aTx0aGlzLmxhYmVscy5sZW5ndGg7aSsrKXtpZih0aGlzLmxhYmVsc1tpXT09PWxhYmVsTmFtZSlyZXR1cm47fQp0aGlzLmxhYmVscy5wdXNoKGxhYmVsTmFtZSk7fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe2xldCByZXM7aWYodGhpcy5uYW1lKXtyZXM9dGhpcy5uYW1lKycgKHBpZCAnK3RoaXMucGlkKycpJzt9ZWxzZXtyZXM9J1Byb2Nlc3MgJyt0aGlzLnBpZDt9CmlmKHRoaXMubGFiZWxzLmxlbmd0aCl7cmVzKz0nOiAnK3RoaXMubGFiZWxzLmpvaW4oJywgJyk7fQppZih0aGlzLnVwdGltZV9zZWNvbmRzKXtyZXMrPScsIHVwdGltZTonK3RoaXMudXB0aW1lX3NlY29uZHMrJ3MnO30KcmV0dXJuIHJlczt9LGdldCB1c2VyRnJpZW5kbHlEZXRhaWxzKCl7aWYodGhpcy5uYW1lKXtyZXR1cm4gdGhpcy5uYW1lKycgKHBpZCAnK3RoaXMucGlkKycpJzt9CnJldHVybidwaWQ6ICcrdGhpcy5waWQ7fSxnZXRTZXR0aW5nc0tleSgpe2lmKCF0aGlzLm5hbWUpcmV0dXJuIHVuZGVmaW5lZDtpZighdGhpcy5sYWJlbHMubGVuZ3RoKXJldHVybidwcm9jZXNzZXMuJyt0aGlzLm5hbWU7cmV0dXJuJ3Byb2Nlc3Nlcy4nK3RoaXMubmFtZSsnLicrdGhpcy5sYWJlbHMuam9pbignLicpO30sc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpe2ZvcihsZXQgaT0wO2k8dGhpcy5pbnN0YW50RXZlbnRzLmxlbmd0aDtpKyspe3RoaXMuaW5zdGFudEV2ZW50c1tpXS5zdGFydCs9YW1vdW50O30KZm9yKGxldCBpPTA7aTx0aGlzLmZyYW1lcy5sZW5ndGg7aSsrKXt0aGlzLmZyYW1lc1tpXS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fQpmb3IobGV0IGk9MDtpPHRoaXMubWVtb3J5RHVtcHMubGVuZ3RoO2krKyl7dGhpcy5tZW1vcnlEdW1wc1tpXS5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCk7fQpmb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZpdGllcy5sZW5ndGg7aSsrKXt0aGlzLmFjdGl2aXRpZXNbaV0uc2hpZnRUaW1lc3RhbXBzRm9yd2FyZChhbW91bnQpO30KdHIubW9kZWwuUHJvY2Vzc0Jhc2UucHJvdG90eXBlLnNoaWZ0VGltZXN0YW1wc0ZvcndhcmQuYXBwbHkodGhpcyxhcmd1bWVudHMpO30sdXBkYXRlQm91bmRzKCl7dHIubW9kZWwuUHJvY2Vzc0Jhc2UucHJvdG90eXBlLnVwZGF0ZUJvdW5kcy5hcHBseSh0aGlzKTtmb3IobGV0IGk9MDtpPHRoaXMuZnJhbWVzLmxlbmd0aDtpKyspe3RoaXMuZnJhbWVzW2ldLmFkZEJvdW5kc1RvUmFuZ2UodGhpcy5ib3VuZHMpO30KZm9yKGxldCBpPTA7aTx0aGlzLm1lbW9yeUR1bXBzLmxlbmd0aDtpKyspe3RoaXMubWVtb3J5RHVtcHNbaV0uYWRkQm91bmRzVG9SYW5nZSh0aGlzLmJvdW5kcyk7fQpmb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZpdGllcy5sZW5ndGg7aSsrKXt0aGlzLmFjdGl2aXRpZXNbaV0uYWRkQm91bmRzVG9SYW5nZSh0aGlzLmJvdW5kcyk7fX0sc29ydE1lbW9yeUR1bXBzKCl7dGhpcy5tZW1vcnlEdW1wcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc3RhcnQteS5zdGFydDt9KTt0ci5tb2RlbC5Qcm9jZXNzTWVtb3J5RHVtcC5ob29rVXBNb3N0UmVjZW50Vm1SZWdpb25zTGlua3ModGhpcy5tZW1vcnlEdW1wcyk7fX07cmV0dXJue1Byb2Nlc3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNhbXBsZShzdGFydCx0aXRsZSxsZWFmTm9kZSx0aHJlYWQsb3B0X2NwdSxvcHRfd2VpZ2h0LG9wdF9hcmdzKXt0ci5tb2RlbC5UaW1lZEV2ZW50LmNhbGwodGhpcyxzdGFydCk7dGhpcy5zdGFydF89c3RhcnQ7dGhpcy50aXRsZV89dGl0bGU7dGhpcy5sZWFmTm9kZV89bGVhZk5vZGU7dGhpcy50aHJlYWRfPXRocmVhZDt0aGlzLmNvbG9ySWRfPWxlYWZOb2RlLmNvbG9ySWQ7dGhpcy5jcHVfPW9wdF9jcHU7dGhpcy53ZWlnaHRfPW9wdF93ZWlnaHQ7dGhpcy5hcmdzPW9wdF9hcmdzfHx7fTt9ClNhbXBsZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5UaW1lZEV2ZW50LnByb3RvdHlwZSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZV87fSxnZXQgY29sb3JJZCgpe3JldHVybiB0aGlzLmNvbG9ySWRfO30sZ2V0IHRocmVhZCgpe3JldHVybiB0aGlzLnRocmVhZF87fSxnZXQgbGVhZk5vZGUoKXtyZXR1cm4gdGhpcy5sZWFmTm9kZV87fSxnZXQgdXNlckZyaWVuZGx5TmFtZSgpe3JldHVybidTYW1wbGUgYXQgJysKdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLnN0YXJ0KTt9LGdldCB1c2VyRnJpZW5kbHlTdGFjaygpe3JldHVybiB0aGlzLmxlYWZOb2RlXy51c2VyRnJpZW5kbHlTdGFjazt9LGdldE5vZGVzQXNBcnJheSgpe2NvbnN0IG5vZGVzPVtdO2xldCBub2RlPXRoaXMubGVhZk5vZGVfO3doaWxlKG5vZGUhPT11bmRlZmluZWQpe25vZGVzLnB1c2gobm9kZSk7bm9kZT1ub2RlLnBhcmVudE5vZGU7fQpyZXR1cm4gbm9kZXM7fSxnZXQgY3B1KCl7cmV0dXJuIHRoaXMuY3B1Xzt9LGdldCB3ZWlnaHQoKXtyZXR1cm4gdGhpcy53ZWlnaHRfO30sfTt0ci5tb2RlbC5FdmVudFJlZ2lzdHJ5LnJlZ2lzdGVyKFNhbXBsZSx7bmFtZTonU2FtcGxlJyxwbHVyYWxOYW1lOidTYW1wbGVzJ30pO3JldHVybntTYW1wbGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFN0YWNrRnJhbWUocGFyZW50RnJhbWUsaWQsdGl0bGUsY29sb3JJZCxvcHRfc291cmNlSW5mbyl7aWYoaWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignaWQgbXVzdCBiZSBnaXZlbicpO30KdGhpcy5wYXJlbnRGcmFtZV89cGFyZW50RnJhbWU7dGhpcy5pZD1pZDt0aGlzLnRpdGxlXz10aXRsZTt0aGlzLmNvbG9ySWQ9Y29sb3JJZDt0aGlzLmNoaWxkcmVuPVtdO3RoaXMuc291cmNlSW5mb189b3B0X3NvdXJjZUluZm87aWYodGhpcy5wYXJlbnRGcmFtZV8pe3RoaXMucGFyZW50RnJhbWVfLmFkZENoaWxkKHRoaXMpO319ClN0YWNrRnJhbWUucHJvdG90eXBlPXtnZXQgcGFyZW50RnJhbWUoKXtyZXR1cm4gdGhpcy5wYXJlbnRGcmFtZV87fSxnZXQgdGl0bGUoKXtpZih0aGlzLnNvdXJjZUluZm9fKXtjb25zdCBzcmM9dGhpcy5zb3VyY2VJbmZvXy50b1N0cmluZygpO3JldHVybiB0aGlzLnRpdGxlXysoc3JjPT09Jyc/Jyc6JyAnK3NyYyk7fQpyZXR1cm4gdGhpcy50aXRsZV87fSxnZXQgZG9tYWluKCl7bGV0IHJlc3VsdD0ndW5rbm93bic7aWYodGhpcy5zb3VyY2VJbmZvXyYmdGhpcy5zb3VyY2VJbmZvXy5kb21haW4pe3Jlc3VsdD10aGlzLnNvdXJjZUluZm9fLmRvbWFpbjt9CmlmKHJlc3VsdD09PSd1bmtub3duJyYmdGhpcy5wYXJlbnRGcmFtZSl7cmVzdWx0PXRoaXMucGFyZW50RnJhbWUuZG9tYWluO30KcmV0dXJuIHJlc3VsdDt9LGdldCBzb3VyY2VJbmZvKCl7cmV0dXJuIHRoaXMuc291cmNlSW5mb187fSxzZXQgcGFyZW50RnJhbWUocGFyZW50RnJhbWUpe2lmKHRoaXMucGFyZW50RnJhbWVfKXtQb2x5bWVyLmRvbSh0aGlzLnBhcmVudEZyYW1lXykucmVtb3ZlQ2hpbGQodGhpcyk7fQp0aGlzLnBhcmVudEZyYW1lXz1wYXJlbnRGcmFtZTtpZih0aGlzLnBhcmVudEZyYW1lXyl7dGhpcy5wYXJlbnRGcmFtZV8uYWRkQ2hpbGQodGhpcyk7fX0sYWRkQ2hpbGQoY2hpbGQpe3RoaXMuY2hpbGRyZW4ucHVzaChjaGlsZCk7fSxyZW1vdmVDaGlsZChjaGlsZCl7Y29uc3QgaT10aGlzLmNoaWxkcmVuLmluZGV4T2YoY2hpbGQuaWQpO2lmKGk9PT0tMSl7dGhyb3cgbmV3IEVycm9yKCdvbWcnKTt9CnRoaXMuY2hpbGRyZW4uc3BsaWNlKGksMSk7fSxyZW1vdmVBbGxDaGlsZHJlbigpe2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXt0aGlzLmNoaWxkcmVuW2ldLnBhcmVudEZyYW1lXz11bmRlZmluZWQ7fQp0aGlzLmNoaWxkcmVuLnNwbGljZSgwLHRoaXMuY2hpbGRyZW4ubGVuZ3RoKTt9LGdldCBzdGFja1RyYWNlKCl7Y29uc3Qgc3RhY2s9W3RoaXNdO2xldCBjdXI9dGhpcy5wYXJlbnRGcmFtZTt3aGlsZShjdXIpe3N0YWNrLnB1c2goY3VyKTtjdXI9Y3VyLnBhcmVudEZyYW1lO30KcmV0dXJuIHN0YWNrO30sZ2V0VXNlckZyaWVuZGx5U3RhY2tUcmFjZSgpe3JldHVybiB0aGlzLnN0YWNrVHJhY2UubWFwKGZ1bmN0aW9uKHgpe3JldHVybiB4LnRpdGxlO30pO319O3JldHVybntTdGFja0ZyYW1lLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC51bScsZnVuY3Rpb24oKXtjbGFzcyBVc2VyTW9kZWwgZXh0ZW5kcyB0ci5tb2RlbC5FdmVudENvbnRhaW5lcntjb25zdHJ1Y3RvcihwYXJlbnRNb2RlbCl7c3VwZXIoKTt0aGlzLnBhcmVudE1vZGVsXz1wYXJlbnRNb2RlbDt0aGlzLmV4cGVjdGF0aW9uc189bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5zZWdtZW50c189W107fQpnZXQgc3RhYmxlSWQoKXtyZXR1cm4nVXNlck1vZGVsJzt9CmdldCBwYXJlbnRNb2RlbCgpe3JldHVybiB0aGlzLnBhcmVudE1vZGVsXzt9CnNvcnRFeHBlY3RhdGlvbnMoKXt0aGlzLmV4cGVjdGF0aW9uc18uc29ydEV2ZW50cygoeCx5KT0+KHguc3RhcnQteS5zdGFydCkpO30KZ2V0IGV4cGVjdGF0aW9ucygpe3JldHVybiB0aGlzLmV4cGVjdGF0aW9uc187fQpzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7fQphZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KXt9CmdldCBzZWdtZW50cygpe3JldHVybiB0aGlzLnNlZ21lbnRzXzt9KmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5leHBlY3RhdGlvbnM7fSpjaGlsZEV2ZW50Q29udGFpbmVycygpe30KdXBkYXRlQm91bmRzKCl7dGhpcy5ib3VuZHMucmVzZXQoKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5leHBlY3RhdGlvbnMpe2V4cGVjdGF0aW9uLmFkZEJvdW5kc1RvUmFuZ2UodGhpcy5ib3VuZHMpO319CnJlc2VnbWVudChnZXRLZXlGb3JTZWdtZW50KXtjb25zdCBuZXdTZWdtZW50cz1bXTtsZXQgcHJldktleT11bmRlZmluZWQ7bGV0IHByZXZTZWdtZW50PXVuZGVmaW5lZDtmb3IobGV0IGk9MDtpPHRoaXMuc2VnbWVudHMubGVuZ3RoOysraSl7Y29uc3Qgc2VnbWVudD10aGlzLnNlZ21lbnRzW2ldO2NvbnN0IGtleT1nZXRLZXlGb3JTZWdtZW50KHNlZ21lbnQsaSk7aWYocHJldlNlZ21lbnQhPT11bmRlZmluZWQmJmtleT09PXByZXZLZXkpe3ByZXZTZWdtZW50LmFkZFNlZ21lbnQoc2VnbWVudCk7fWVsc2V7cHJldlNlZ21lbnQ9c2VnbWVudC5jbG9uZSgpO25ld1NlZ21lbnRzLnB1c2gocHJldlNlZ21lbnQpO30KcHJldktleT1rZXk7fQpyZXR1cm4gbmV3U2VnbWVudHM7fX0KcmV0dXJue1VzZXJNb2RlbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHInLGZ1bmN0aW9uKCl7Y29uc3QgUHJvY2Vzcz10ci5tb2RlbC5Qcm9jZXNzO2NvbnN0IERldmljZT10ci5tb2RlbC5EZXZpY2U7Y29uc3QgS2VybmVsPXRyLm1vZGVsLktlcm5lbDtjb25zdCBHbG9iYWxNZW1vcnlEdW1wPXRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXA7Y29uc3QgR2xvYmFsSW5zdGFudEV2ZW50PXRyLm1vZGVsLkdsb2JhbEluc3RhbnRFdmVudDtjb25zdCBGbG93RXZlbnQ9dHIubW9kZWwuRmxvd0V2ZW50O2NvbnN0IEFsZXJ0PXRyLm1vZGVsLkFsZXJ0O2NvbnN0IFNhbXBsZT10ci5tb2RlbC5TYW1wbGU7ZnVuY3Rpb24gTW9kZWwoKXt0ci5tb2RlbC5FdmVudENvbnRhaW5lci5jYWxsKHRoaXMpO3RyLmIuRXZlbnRUYXJnZXQuZGVjb3JhdGUodGhpcyk7dGhpcy50aW1lc3RhbXBTaGlmdFRvWmVyb0Ftb3VudF89MDt0aGlzLmZhdmljb25IdWU9J2JsdWUnO3RoaXMuZGV2aWNlPW5ldyBEZXZpY2UodGhpcyk7dGhpcy5rZXJuZWw9bmV3IEtlcm5lbCh0aGlzKTt0aGlzLnByb2Nlc3Nlcz17fTt0aGlzLm1ldGFkYXRhPVtdO3RoaXMuY2F0ZWdvcmllcz1bXTt0aGlzLmluc3RhbnRFdmVudHM9W107dGhpcy5mbG93RXZlbnRzPVtdO3RoaXMuY2xvY2tTeW5jTWFuYWdlcj1uZXcgdHIubW9kZWwuQ2xvY2tTeW5jTWFuYWdlcigpO3RoaXMuaW50cmluc2ljVGltZVVuaXRfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVzPXt9O3RoaXMuc2FtcGxlcz1bXTt0aGlzLmFsZXJ0cz1bXTt0aGlzLnVzZXJNb2RlbD1uZXcgdHIubW9kZWwudW0uVXNlck1vZGVsKHRoaXMpO3RoaXMuZmxvd0ludGVydmFsVHJlZT1uZXcgdHIuYi5JbnRlcnZhbFRyZWUoKGYpPT5mLnN0YXJ0LChmKT0+Zi5lbmQpO3RoaXMuZ2xvYmFsTWVtb3J5RHVtcHM9W107dGhpcy51c2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcnNfPVtdO3RoaXMuYW5ub3RhdGlvbnNCeUd1aWRfPXt9O3RoaXMubW9kZWxJbmRpY2VzPXVuZGVmaW5lZDt0aGlzLnN0YXRzPW5ldyB0ci5tb2RlbC5Nb2RlbFN0YXRzKCk7dGhpcy5pbXBvcnRXYXJuaW5nc189W107dGhpcy5yZXBvcnRlZEltcG9ydFdhcm5pbmdzXz17fTt0aGlzLmlzVGltZUhpZ2hSZXNvbHV0aW9uXz10cnVlO3RoaXMucGF0Y2h1cHNUb0FwcGx5Xz1bXTt0aGlzLmRvZXNIZWxwZXJHVUlEU3VwcG9ydFRoaXNNb2RlbF89e307dGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfPXt9O3RoaXMuZXZlbnRzQnlTdGFibGVJZF89dW5kZWZpbmVkO30KTW9kZWwucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuRXZlbnRDb250YWluZXIucHJvdG90eXBlLGdldEV2ZW50QnlTdGFibGVJZChzdGFibGVJZCl7aWYodGhpcy5ldmVudHNCeVN0YWJsZUlkXz09PXVuZGVmaW5lZCl7dGhpcy5ldmVudHNCeVN0YWJsZUlkXz17fTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5nZXREZXNjZW5kYW50RXZlbnRzKCkpe3RoaXMuZXZlbnRzQnlTdGFibGVJZF9bZXZlbnQuc3RhYmxlSWRdPWV2ZW50O319CnJldHVybiB0aGlzLmV2ZW50c0J5U3RhYmxlSWRfW3N0YWJsZUlkXTt9LGdldE9yQ3JlYXRlSGVscGVyKGNvbnN0cnVjdG9yKXtpZighY29uc3RydWN0b3IuZ3VpZCl7dGhyb3cgbmV3IEVycm9yKCdIZWxwZXIgY29uc3RydWN0b3JzIG11c3QgaGF2ZSBHVUlEcycpO30KaWYodGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfW2NvbnN0cnVjdG9yLmd1aWRdPT09dW5kZWZpbmVkKXtpZih0aGlzLmRvZXNIZWxwZXJHVUlEU3VwcG9ydFRoaXNNb2RlbF9bY29uc3RydWN0b3IuZ3VpZF09PT11bmRlZmluZWQpe3RoaXMuZG9lc0hlbHBlckdVSURTdXBwb3J0VGhpc01vZGVsX1tjb25zdHJ1Y3Rvci5ndWlkXT1jb25zdHJ1Y3Rvci5zdXBwb3J0c01vZGVsKHRoaXMpO30KaWYoIXRoaXMuZG9lc0hlbHBlckdVSURTdXBwb3J0VGhpc01vZGVsX1tjb25zdHJ1Y3Rvci5ndWlkXSl7cmV0dXJuIHVuZGVmaW5lZDt9CnRoaXMuaGVscGVyc0J5Q29uc3RydWN0b3JHVUlEX1tjb25zdHJ1Y3Rvci5ndWlkXT1uZXcgY29uc3RydWN0b3IodGhpcyk7fQpyZXR1cm4gdGhpcy5oZWxwZXJzQnlDb25zdHJ1Y3RvckdVSURfW2NvbnN0cnVjdG9yLmd1aWRdO30sKmNoaWxkRXZlbnRzKCl7eWllbGQqdGhpcy5nbG9iYWxNZW1vcnlEdW1wczt5aWVsZCp0aGlzLmluc3RhbnRFdmVudHM7eWllbGQqdGhpcy5mbG93RXZlbnRzO3lpZWxkKnRoaXMuYWxlcnRzO3lpZWxkKnRoaXMuc2FtcGxlczt9LCpjaGlsZEV2ZW50Q29udGFpbmVycygpe3lpZWxkIHRoaXMudXNlck1vZGVsO3lpZWxkIHRoaXMuZGV2aWNlO3lpZWxkIHRoaXMua2VybmVsO3lpZWxkKk9iamVjdC52YWx1ZXModGhpcy5wcm9jZXNzZXMpO30saXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYWxsYmFjayl7dGhpcy5rZXJuZWwuaXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhjYWxsYmFjayk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5pdGVyYXRlQWxsUGVyc2lzdGFibGVPYmplY3RzKGNhbGxiYWNrKTt9fSx1cGRhdGVCb3VuZHMoKXt0aGlzLmJvdW5kcy5yZXNldCgpO2NvbnN0IGJvdW5kcz10aGlzLmJvdW5kcztmb3IoY29uc3QgZWMgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtlYy51cGRhdGVCb3VuZHMoKTtib3VuZHMuYWRkUmFuZ2UoZWMuYm91bmRzKTt9CmZvcihjb25zdCBldmVudCBvZiB0aGlzLmNoaWxkRXZlbnRzKCkpe2V2ZW50LmFkZEJvdW5kc1RvUmFuZ2UoYm91bmRzKTt9fSxzaGlmdFdvcmxkVG9aZXJvKCl7Y29uc3Qgc2hpZnRBbW91bnQ9LXRoaXMuYm91bmRzLm1pbjt0aGlzLnRpbWVzdGFtcFNoaWZ0VG9aZXJvQW1vdW50Xz1zaGlmdEFtb3VudDtmb3IoY29uc3QgZWMgb2YgdGhpcy5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtlYy5zaGlmdFRpbWVzdGFtcHNGb3J3YXJkKHNoaWZ0QW1vdW50KTt9CmZvcihjb25zdCBldmVudCBvZiB0aGlzLmNoaWxkRXZlbnRzKCkpe2V2ZW50LnN0YXJ0Kz1zaGlmdEFtb3VudDt9CnRoaXMudXBkYXRlQm91bmRzKCk7fSxjb252ZXJ0VGltZXN0YW1wVG9Nb2RlbFRpbWUoc291cmNlQ2xvY2tEb21haW5OYW1lLHRzKXtpZihzb3VyY2VDbG9ja0RvbWFpbk5hbWUhPT0ndHJhY2VFdmVudENsb2NrJyl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IHRyYWNlRXZlbnRDbG9jayBpcyBzdXBwb3J0ZWQuJyk7fQpyZXR1cm4gdHIuYi5Vbml0LnRpbWVzdGFtcEZyb21Vcyh0cykrCnRoaXMudGltZXN0YW1wU2hpZnRUb1plcm9BbW91bnRfO30sZ2V0IG51bVByb2Nlc3Nlcygpe2xldCBuPTA7Zm9yKGNvbnN0IHAgaW4gdGhpcy5wcm9jZXNzZXMpe24rKzt9CnJldHVybiBuO30sZ2V0UHJvY2VzcyhwaWQpe3JldHVybiB0aGlzLnByb2Nlc3Nlc1twaWRdO30sZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCl7aWYoIXRoaXMucHJvY2Vzc2VzW3BpZF0pe3RoaXMucHJvY2Vzc2VzW3BpZF09bmV3IFByb2Nlc3ModGhpcyxwaWQpO30KcmV0dXJuIHRoaXMucHJvY2Vzc2VzW3BpZF07fSxhZGRTdGFja0ZyYW1lKHN0YWNrRnJhbWUpe2lmKHRoaXMuc3RhY2tGcmFtZXNbc3RhY2tGcmFtZS5pZF0pe3Rocm93IG5ldyBFcnJvcignU3RhY2sgZnJhbWUgYWxyZWFkeSBleGlzdHMnKTt9CnRoaXMuc3RhY2tGcmFtZXNbc3RhY2tGcmFtZS5pZF09c3RhY2tGcmFtZTtyZXR1cm4gc3RhY2tGcmFtZTt9LHVwZGF0ZUNhdGVnb3JpZXNfKCl7Y29uc3QgY2F0ZWdvcmllc0RpY3Q9e307dGhpcy51c2VyTW9kZWwuYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCk7dGhpcy5kZXZpY2UuYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCk7dGhpcy5rZXJuZWwuYWRkQ2F0ZWdvcmllc1RvRGljdChjYXRlZ29yaWVzRGljdCk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5hZGRDYXRlZ29yaWVzVG9EaWN0KGNhdGVnb3JpZXNEaWN0KTt9CnRoaXMuY2F0ZWdvcmllcz1bXTtmb3IoY29uc3QgY2F0ZWdvcnkgaW4gY2F0ZWdvcmllc0RpY3Qpe2lmKGNhdGVnb3J5IT09Jycpe3RoaXMuY2F0ZWdvcmllcy5wdXNoKGNhdGVnb3J5KTt9fX0sZ2V0QWxsVGhyZWFkcygpe2NvbnN0IHRocmVhZHM9W107Zm9yKGNvbnN0IHRpZCBpbiB0aGlzLmtlcm5lbC50aHJlYWRzKXt0aHJlYWRzLnB1c2gocHJvY2Vzcy50aHJlYWRzW3RpZF0pO30KZm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7Y29uc3QgcHJvY2Vzcz10aGlzLnByb2Nlc3Nlc1twaWRdO2Zvcihjb25zdCB0aWQgaW4gcHJvY2Vzcy50aHJlYWRzKXt0aHJlYWRzLnB1c2gocHJvY2Vzcy50aHJlYWRzW3RpZF0pO319CnJldHVybiB0aHJlYWRzO30sZ2V0QWxsUHJvY2Vzc2VzKG9wdF9wcmVkaWNhdGUpe2NvbnN0IHByb2Nlc3Nlcz1bXTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPXRoaXMucHJvY2Vzc2VzW3BpZF07aWYob3B0X3ByZWRpY2F0ZT09PXVuZGVmaW5lZHx8b3B0X3ByZWRpY2F0ZShwcm9jZXNzKSl7cHJvY2Vzc2VzLnB1c2gocHJvY2Vzcyk7fX0KcmV0dXJuIHByb2Nlc3Nlczt9LGdldEFsbENvdW50ZXJzKCl7Y29uc3QgY291bnRlcnM9W107Y291bnRlcnMucHVzaC5hcHBseShjb3VudGVycyxPYmplY3QudmFsdWVzKHRoaXMuZGV2aWNlLmNvdW50ZXJzfHx7fSkpO2NvdW50ZXJzLnB1c2guYXBwbHkoY291bnRlcnMsT2JqZWN0LnZhbHVlcyh0aGlzLmtlcm5lbC5jb3VudGVyc3x8e30pKTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPXRoaXMucHJvY2Vzc2VzW3BpZF07Zm9yKGNvbnN0IHRpZCBpbiBwcm9jZXNzLmNvdW50ZXJzKXtjb3VudGVycy5wdXNoKHByb2Nlc3MuY291bnRlcnNbdGlkXSk7fX0KcmV0dXJuIGNvdW50ZXJzO30sZ2V0QW5ub3RhdGlvbkJ5R1VJRChndWlkKXtyZXR1cm4gdGhpcy5hbm5vdGF0aW9uc0J5R3VpZF9bZ3VpZF07fSxhZGRBbm5vdGF0aW9uKGFubm90YXRpb24pe2lmKCFhbm5vdGF0aW9uLmd1aWQpe3Rocm93IG5ldyBFcnJvcignQW5ub3RhdGlvbiB3aXRoIHVuZGVmaW5lZCBndWlkIGdpdmVuJyk7fQp0aGlzLmFubm90YXRpb25zQnlHdWlkX1thbm5vdGF0aW9uLmd1aWRdPWFubm90YXRpb247dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2Fubm90YXRpb25DaGFuZ2UnKTt9LHJlbW92ZUFubm90YXRpb24oYW5ub3RhdGlvbil7dGhpcy5hbm5vdGF0aW9uc0J5R3VpZF9bYW5ub3RhdGlvbi5ndWlkXS5vblJlbW92ZSgpO2RlbGV0ZSB0aGlzLmFubm90YXRpb25zQnlHdWlkX1thbm5vdGF0aW9uLmd1aWRdO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdhbm5vdGF0aW9uQ2hhbmdlJyk7fSxnZXRBbGxBbm5vdGF0aW9ucygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuYW5ub3RhdGlvbnNCeUd1aWRfKTt9LGFkZFVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyKHVmY2Qpe3RoaXMudXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXJzXy5wdXNoKHVmY2QpO30sZ2V0VXNlckZyaWVuZGx5Q2F0ZWdvcnlGcm9tRXZlbnQoZXZlbnQpe2ZvcihsZXQgaT0wO2k8dGhpcy51c2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcnNfLmxlbmd0aDtpKyspe2NvbnN0IHVmYz10aGlzLnVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyc19baV0uZnJvbUV2ZW50KGV2ZW50KTtpZih1ZmMhPT11bmRlZmluZWQpcmV0dXJuIHVmYzt9CnJldHVybiB1bmRlZmluZWQ7fSxmaW5kQWxsVGhyZWFkc05hbWVkKG5hbWUpe2NvbnN0IG5hbWVkVGhyZWFkcz1bXTtuYW1lZFRocmVhZHMucHVzaC5hcHBseShuYW1lZFRocmVhZHMsdGhpcy5rZXJuZWwuZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKSk7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7bmFtZWRUaHJlYWRzLnB1c2guYXBwbHkobmFtZWRUaHJlYWRzLHRoaXMucHJvY2Vzc2VzW3BpZF0uZmluZEFsbFRocmVhZHNOYW1lZChuYW1lKSk7fQpyZXR1cm4gbmFtZWRUaHJlYWRzO30sZ2V0IGltcG9ydE9wdGlvbnMoKXtyZXR1cm4gdGhpcy5pbXBvcnRPcHRpb25zXzt9LHNldCBpbXBvcnRPcHRpb25zKG9wdGlvbnMpe3RoaXMuaW1wb3J0T3B0aW9uc189b3B0aW9uczt9LGdldCBpbnRyaW5zaWNUaW1lVW5pdCgpe2lmKHRoaXMuaW50cmluc2ljVGltZVVuaXRfPT09dW5kZWZpbmVkKXtyZXR1cm4gdHIuYi5UaW1lRGlzcGxheU1vZGVzLm1zO30KcmV0dXJuIHRoaXMuaW50cmluc2ljVGltZVVuaXRfO30sc2V0IGludHJpbnNpY1RpbWVVbml0KHZhbHVlKXtpZih0aGlzLmludHJpbnNpY1RpbWVVbml0Xz09PXZhbHVlKXJldHVybjtpZih0aGlzLmludHJpbnNpY1RpbWVVbml0XyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdJbnRyaW5zaWMgdGltZSB1bml0IGFscmVhZHkgc2V0Jyk7fQp0aGlzLmludHJpbnNpY1RpbWVVbml0Xz12YWx1ZTt9LGdldCBpc1RpbWVIaWdoUmVzb2x1dGlvbigpe3JldHVybiB0aGlzLmlzVGltZUhpZ2hSZXNvbHV0aW9uXzt9LHNldCBpc1RpbWVIaWdoUmVzb2x1dGlvbih2YWx1ZSl7dGhpcy5pc1RpbWVIaWdoUmVzb2x1dGlvbl89dmFsdWU7fSxnZXQgY2Fub25pY2FsVXJsKCl7cmV0dXJuIHRoaXMuY2Fub25pY2FsVXJsXzt9LHNldCBjYW5vbmljYWxVcmwodmFsdWUpe2lmKHRoaXMuY2Fub25pY2FsVXJsXz09PXZhbHVlKXJldHVybjtpZih0aGlzLmNhbm9uaWNhbFVybF8hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignY2Fub25pY2FsVXJsIGFscmVhZHkgc2V0Jyk7fQp0aGlzLmNhbm9uaWNhbFVybF89dmFsdWU7fSxpbXBvcnRXYXJuaW5nKGRhdGEpe2RhdGEuc2hvd1RvVXNlcj0hIWRhdGEuc2hvd1RvVXNlcjt0aGlzLmltcG9ydFdhcm5pbmdzXy5wdXNoKGRhdGEpO2lmKHRoaXMucmVwb3J0ZWRJbXBvcnRXYXJuaW5nc19bZGF0YS50eXBlXT09PXRydWUpcmV0dXJuO3RoaXMucmVwb3J0ZWRJbXBvcnRXYXJuaW5nc19bZGF0YS50eXBlXT10cnVlO30sZ2V0IGhhc0ltcG9ydFdhcm5pbmdzKCl7cmV0dXJuKHRoaXMuaW1wb3J0V2FybmluZ3NfLmxlbmd0aD4wKTt9LGdldCBpbXBvcnRXYXJuaW5ncygpe3JldHVybiB0aGlzLmltcG9ydFdhcm5pbmdzXzt9LGdldCBpbXBvcnRXYXJuaW5nc1RoYXRTaG91bGRCZVNob3duVG9Vc2VyKCl7cmV0dXJuIHRoaXMuaW1wb3J0V2FybmluZ3NfLmZpbHRlcihmdW5jdGlvbih3YXJuaW5nKXtyZXR1cm4gd2FybmluZy5zaG93VG9Vc2VyO30pO30sYXV0b0Nsb3NlT3BlblNsaWNlcygpe3RoaXMuc2FtcGxlcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc3RhcnQteS5zdGFydDt9KTt0aGlzLnVwZGF0ZUJvdW5kcygpO3RoaXMua2VybmVsLmF1dG9DbG9zZU9wZW5TbGljZXMoKTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt9fSxjcmVhdGVTdWJTbGljZXMoKXt0aGlzLmtlcm5lbC5jcmVhdGVTdWJTbGljZXMoKTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLmNyZWF0ZVN1YlNsaWNlcygpO319LHByZUluaXRpYWxpemVPYmplY3RzKCl7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5wcmVJbml0aWFsaXplT2JqZWN0cygpO319LGluaXRpYWxpemVPYmplY3RzKCl7Zm9yKGNvbnN0IHBpZCBpbiB0aGlzLnByb2Nlc3Nlcyl7dGhpcy5wcm9jZXNzZXNbcGlkXS5pbml0aWFsaXplT2JqZWN0cygpO319LHBydW5lRW1wdHlDb250YWluZXJzKCl7dGhpcy5rZXJuZWwucHJ1bmVFbXB0eUNvbnRhaW5lcnMoKTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLnBydW5lRW1wdHlDb250YWluZXJzKCk7fX0sbWVyZ2VLZXJuZWxXaXRoVXNlcmxhbmQoKXtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLm1lcmdlS2VybmVsV2l0aFVzZXJsYW5kKCk7fX0sY29tcHV0ZVdvcmxkQm91bmRzKHNoaWZ0V29ybGRUb1plcm8pe3RoaXMudXBkYXRlQm91bmRzKCk7dGhpcy51cGRhdGVDYXRlZ29yaWVzXygpO2lmKHNoaWZ0V29ybGRUb1plcm8pe3RoaXMuc2hpZnRXb3JsZFRvWmVybygpO319LGJ1aWxkRmxvd0V2ZW50SW50ZXJ2YWxUcmVlKCl7Zm9yKGxldCBpPTA7aTx0aGlzLmZsb3dFdmVudHMubGVuZ3RoOysraSl7Y29uc3QgZmxvd0V2ZW50PXRoaXMuZmxvd0V2ZW50c1tpXTt0aGlzLmZsb3dJbnRlcnZhbFRyZWUuaW5zZXJ0KGZsb3dFdmVudCk7fQp0aGlzLmZsb3dJbnRlcnZhbFRyZWUudXBkYXRlSGlnaFZhbHVlcygpO30sY2xlYW51cFVuZGVsZXRlZE9iamVjdHMoKXtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLmF1dG9EZWxldGVPYmplY3RzKHRoaXMuYm91bmRzLm1heCk7fX0sc29ydE1lbW9yeUR1bXBzKCl7dGhpcy5nbG9iYWxNZW1vcnlEdW1wcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc3RhcnQteS5zdGFydDt9KTtmb3IoY29uc3QgcGlkIGluIHRoaXMucHJvY2Vzc2VzKXt0aGlzLnByb2Nlc3Nlc1twaWRdLnNvcnRNZW1vcnlEdW1wcygpO319LGZpbmFsaXplTWVtb3J5R3JhcGhzKCl7dGhpcy5nbG9iYWxNZW1vcnlEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGR1bXApe2R1bXAuZmluYWxpemVHcmFwaCgpO30pO30sYnVpbGRFdmVudEluZGljZXMoKXt0aGlzLm1vZGVsSW5kaWNlcz1uZXcgdHIubW9kZWwuTW9kZWxJbmRpY2VzKHRoaXMpO30sc29ydEFsZXJ0cygpe3RoaXMuYWxlcnRzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5zdGFydC15LnN0YXJ0O30pO30sYXBwbHlPYmplY3RSZWZQYXRjaHVwcygpe2NvbnN0IHVucmVzb2x2ZWQ9W107dGhpcy5wYXRjaHVwc1RvQXBwbHlfLmZvckVhY2goZnVuY3Rpb24ocGF0Y2h1cCl7aWYocGF0Y2h1cC5waWRSZWYgaW4gdGhpcy5wcm9jZXNzZXMpe2NvbnN0IHNuYXBzaG90PXRoaXMucHJvY2Vzc2VzW3BhdGNodXAucGlkUmVmXS5vYmplY3RzLmdldFNuYXBzaG90QXQocGF0Y2h1cC5zY29wZWRJZCxwYXRjaHVwLnRzKTtpZihzbmFwc2hvdCl7cGF0Y2h1cC5vYmplY3RbcGF0Y2h1cC5maWVsZF09c25hcHNob3Q7c25hcHNob3QucmVmZXJlbmNlZEF0KHBhdGNodXAuaXRlbSxwYXRjaHVwLm9iamVjdCxwYXRjaHVwLmZpZWxkKTtyZXR1cm47fX0KdW5yZXNvbHZlZC5wdXNoKHBhdGNodXApO30sdGhpcyk7dGhpcy5wYXRjaHVwc1RvQXBwbHlfPXVucmVzb2x2ZWQ7fSxyZXBsYWNlUElEUmVmc0luUGF0Y2h1cHMob2xkUGlkUmVmLG5ld1BpZFJlZil7dGhpcy5wYXRjaHVwc1RvQXBwbHlfLmZvckVhY2goZnVuY3Rpb24ocGF0Y2h1cCl7aWYocGF0Y2h1cC5waWRSZWY9PT1vbGRQaWRSZWYpe3BhdGNodXAucGlkUmVmPW5ld1BpZFJlZjt9fSk7fSxqb2luUmVmcygpe3RoaXMuam9pbk9iamVjdFJlZnNfKCk7dGhpcy5hcHBseU9iamVjdFJlZlBhdGNodXBzKCk7fSxqb2luT2JqZWN0UmVmc18oKXtmb3IoY29uc3RbcGlkLHByb2Nlc3Ndb2YgT2JqZWN0LmVudHJpZXModGhpcy5wcm9jZXNzZXMpKXt0aGlzLmpvaW5PYmplY3RSZWZzRm9yUHJvY2Vzc18ocGlkLHByb2Nlc3MpO319LGpvaW5PYmplY3RSZWZzRm9yUHJvY2Vzc18ocGlkLHByb2Nlc3Mpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jZXNzLnRocmVhZHMpKXt0aHJlYWQuYXN5bmNTbGljZUdyb3VwLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe3RoaXMuc2VhcmNoSXRlbUZvcklEUmVmc18ocGlkLCdzdGFydCcsaXRlbSk7fSx0aGlzKTt0aHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZm9yRWFjaChmdW5jdGlvbihpdGVtKXt0aGlzLnNlYXJjaEl0ZW1Gb3JJRFJlZnNfKHBpZCwnc3RhcnQnLGl0ZW0pO30sdGhpcyk7fQpwcm9jZXNzLm9iamVjdHMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aW5zdGFuY2Uuc25hcHNob3RzLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7dGhpcy5zZWFyY2hJdGVtRm9ySURSZWZzXyhwaWQsJ3RzJyxpdGVtKTt9LHRoaXMpO30sdGhpcyk7fSxzZWFyY2hJdGVtRm9ySURSZWZzXyhwaWQsaXRlbVRpbWVzdGFtcEZpZWxkLGl0ZW0pe2lmKCFpdGVtLmFyZ3MmJiFpdGVtLmNvbnRleHRzKXJldHVybjtjb25zdCBwYXRjaHVwc1RvQXBwbHk9dGhpcy5wYXRjaHVwc1RvQXBwbHlfO2Z1bmN0aW9uIGhhbmRsZUZpZWxkKG9iamVjdCxmaWVsZE5hbWUsZmllbGRWYWx1ZSl7aWYoIWZpZWxkVmFsdWV8fCghZmllbGRWYWx1ZS5pZF9yZWYmJiFmaWVsZFZhbHVlLmlkUmVmKSl7cmV0dXJuO30KY29uc3Qgc2NvcGU9ZmllbGRWYWx1ZS5zY29wZXx8dHIubW9kZWwuT0JKRUNUX0RFRkFVTFRfU0NPUEU7Y29uc3QgaWRSZWY9ZmllbGRWYWx1ZS5pZF9yZWZ8fGZpZWxkVmFsdWUuaWRSZWY7Y29uc3Qgc2NvcGVkSWQ9bmV3IHRyLm1vZGVsLlNjb3BlZElkKHNjb3BlLGlkUmVmKTtjb25zdCBwaWRSZWY9ZmllbGRWYWx1ZS5waWRfcmVmfHxmaWVsZFZhbHVlLnBpZFJlZnx8cGlkO2NvbnN0IHRzPWl0ZW1baXRlbVRpbWVzdGFtcEZpZWxkXTtwYXRjaHVwc1RvQXBwbHkucHVzaCh7aXRlbSxvYmplY3QsZmllbGQ6ZmllbGROYW1lLHBpZFJlZixzY29wZWRJZCx0c30pO30KZnVuY3Rpb24gaXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KG9iamVjdCl7aWYoIShvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybjtpZigob2JqZWN0IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0U25hcHNob3QpfHwob2JqZWN0IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KXx8KG9iamVjdCBpbnN0YW5jZW9mIHRyLmIubWF0aC5RdWFkKSl7cmV0dXJuO30KaWYob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpe2ZvcihsZXQgaT0wO2k8b2JqZWN0Lmxlbmd0aDtpKyspe2hhbmRsZUZpZWxkKG9iamVjdCxpLG9iamVjdFtpXSk7aXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KG9iamVjdFtpXSk7fQpyZXR1cm47fQpmb3IoY29uc3Qga2V5IGluIG9iamVjdCl7Y29uc3QgdmFsdWU9b2JqZWN0W2tleV07aGFuZGxlRmllbGQob2JqZWN0LGtleSx2YWx1ZSk7aXRlck9iamVjdEZpZWxkc1JlY3Vyc2l2ZWx5KHZhbHVlKTt9fQppdGVyT2JqZWN0RmllbGRzUmVjdXJzaXZlbHkoaXRlbS5hcmdzKTtpdGVyT2JqZWN0RmllbGRzUmVjdXJzaXZlbHkoaXRlbS5jb250ZXh0cyk7fX07cmV0dXJue01vZGVsLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmV0dycsZnVuY3Rpb24oKXtjb25zdCBrVGhyZWFkR3VpZD0nM0Q2RkE4RDEtRkUwNS0xMUQwLTlEREEtMDBDMDRGRDdCQTdDJztjb25zdCBrVGhyZWFkRENTdGFydE9wY29kZT0zO2Z1bmN0aW9uIERlY29kZXIoKXt0aGlzLnBheWxvYWRfPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoMjU2KSk7fQpEZWNvZGVyLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUscmVzZXQoYmFzZTY0UGF5bG9hZCl7Y29uc3QgZGVjb2RlZFNpemU9dHIuYi5CYXNlNjQuZ2V0RGVjb2RlZEJ1ZmZlckxlbmd0aChiYXNlNjRQYXlsb2FkKTtpZihkZWNvZGVkU2l6ZT50aGlzLnBheWxvYWRfLmJ5dGVMZW5ndGgpe3RoaXMucGF5bG9hZF89bmV3IERhdGFWaWV3KG5ldyBBcnJheUJ1ZmZlcihkZWNvZGVkU2l6ZSkpO30KdHIuYi5CYXNlNjQuRGVjb2RlVG9UeXBlZEFycmF5KGJhc2U2NFBheWxvYWQsdGhpcy5wYXlsb2FkXyk7dGhpcy5wb3NpdGlvbl89MDt9LHNraXAobGVuZ3RoKXt0aGlzLnBvc2l0aW9uXys9bGVuZ3RoO30sZGVjb2RlVUludDgoKXtjb25zdCByZXN1bHQ9dGhpcy5wYXlsb2FkXy5nZXRVaW50OCh0aGlzLnBvc2l0aW9uXyx0cnVlKTt0aGlzLnBvc2l0aW9uXys9MTtyZXR1cm4gcmVzdWx0O30sZGVjb2RlVUludDE2KCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0VWludDE2KHRoaXMucG9zaXRpb25fLHRydWUpO3RoaXMucG9zaXRpb25fKz0yO3JldHVybiByZXN1bHQ7fSxkZWNvZGVVSW50MzIoKXtjb25zdCByZXN1bHQ9dGhpcy5wYXlsb2FkXy5nZXRVaW50MzIodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTQ7cmV0dXJuIHJlc3VsdDt9LGRlY29kZVVJbnQ2NFRvU3RyaW5nKCl7Y29uc3QgbG93PXRoaXMuZGVjb2RlVUludDMyKCk7Y29uc3QgaGlnaD10aGlzLmRlY29kZVVJbnQzMigpO2NvbnN0IGxvd1N0cj0oJzAwMDAwMDAnK2xvdy50b1N0cmluZygxNikpLnN1YnN0cigtOCk7Y29uc3QgaGlnaFN0cj0oJzAwMDAwMDAnK2hpZ2gudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTgpO2NvbnN0IHJlc3VsdD1oaWdoU3RyK2xvd1N0cjtyZXR1cm4gcmVzdWx0O30sZGVjb2RlSW50OCgpe2NvbnN0IHJlc3VsdD10aGlzLnBheWxvYWRfLmdldEludDgodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTE7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDE2KCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0SW50MTYodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTI7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDMyKCl7Y29uc3QgcmVzdWx0PXRoaXMucGF5bG9hZF8uZ2V0SW50MzIodGhpcy5wb3NpdGlvbl8sdHJ1ZSk7dGhpcy5wb3NpdGlvbl8rPTQ7cmV0dXJuIHJlc3VsdDt9LGRlY29kZUludDY0VG9TdHJpbmcoKXtyZXR1cm4gdGhpcy5kZWNvZGVVSW50NjRUb1N0cmluZygpO30sZGVjb2RlVUludGVnZXIoaXM2NCl7aWYoaXM2NCl7cmV0dXJuIHRoaXMuZGVjb2RlVUludDY0VG9TdHJpbmcoKTt9CnJldHVybiB0aGlzLmRlY29kZVVJbnQzMigpO30sZGVjb2RlU3RyaW5nKCl7bGV0IHN0cj0nJzt3aGlsZSh0cnVlKXtjb25zdCBjPXRoaXMuZGVjb2RlVUludDgoKTtpZighYylyZXR1cm4gc3RyO3N0cj1zdHIrU3RyaW5nLmZyb21DaGFyQ29kZShjKTt9fSxkZWNvZGVXMTZTdHJpbmcoKXtsZXQgc3RyPScnO3doaWxlKHRydWUpe2NvbnN0IGM9dGhpcy5kZWNvZGVVSW50MTYoKTtpZighYylyZXR1cm4gc3RyO3N0cj1zdHIrU3RyaW5nLmZyb21DaGFyQ29kZShjKTt9fSxkZWNvZGVGaXhlZFcxNlN0cmluZyhsZW5ndGgpe2NvbnN0IG9sZFBvc2l0aW9uPXRoaXMucG9zaXRpb25fO2xldCBzdHI9Jyc7Zm9yKGxldCBpPTA7aTxsZW5ndGg7aSsrKXtjb25zdCBjPXRoaXMuZGVjb2RlVUludDE2KCk7aWYoIWMpYnJlYWs7c3RyPXN0citTdHJpbmcuZnJvbUNoYXJDb2RlKGMpO30KdGhpcy5wb3NpdGlvbl89b2xkUG9zaXRpb24rMipsZW5ndGg7cmV0dXJuIHN0cjt9LGRlY29kZUJ5dGVzKGxlbmd0aCl7Y29uc3QgYnl0ZXM9W107Zm9yKGxldCBpPTA7aTxsZW5ndGg7KytpKXtjb25zdCBjPXRoaXMuZGVjb2RlVUludDgoKTtieXRlcy5wdXNoKGMpO30KcmV0dXJuIGJ5dGVzO30sZGVjb2RlU0lEKGlzNjQpe2NvbnN0IHBTaWQ9dGhpcy5kZWNvZGVVSW50ZWdlcihpczY0KTtjb25zdCBhdHRyaWJ1dGVzPXRoaXMuZGVjb2RlVUludDMyKCk7aWYoaXM2NCl7dGhpcy5kZWNvZGVVSW50MzIoKTt9CmNvbnN0IHJldmlzaW9uPXRoaXMuZGVjb2RlVUludDgoKTtjb25zdCBzdWJBdXRob3JpdHlDb3VudD10aGlzLmRlY29kZVVJbnQ4KCk7dGhpcy5kZWNvZGVVSW50MTYoKTt0aGlzLmRlY29kZVVJbnQzMigpO2lmKHJldmlzaW9uIT09MSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFNJRCByZXZpc2lvbjogY291bGQgbm90IGRlY29kZSB0aGUgU0lEIHN0cnVjdHVyZS4nKTt9CmNvbnN0IHNpZD10aGlzLmRlY29kZUJ5dGVzKDQqc3ViQXV0aG9yaXR5Q291bnQpO3JldHVybntwU2lkLGF0dHJpYnV0ZXMsc2lkfTt9LGRlY29kZVN5c3RlbVRpbWUoKXtjb25zdCB3WWVhcj10aGlzLmRlY29kZUludDE2KCk7Y29uc3Qgd01vbnRoPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3RGF5T2ZXZWVrPXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3RGF5PXRoaXMuZGVjb2RlSW50MTYoKTtjb25zdCB3SG91cj10aGlzLmRlY29kZUludDE2KCk7Y29uc3Qgd01pbnV0ZT10aGlzLmRlY29kZUludDE2KCk7Y29uc3Qgd1NlY29uZD10aGlzLmRlY29kZUludDE2KCk7Y29uc3Qgd01pbGxpc2Vjb25kcz10aGlzLmRlY29kZUludDE2KCk7cmV0dXJue3dZZWFyLHdNb250aCx3RGF5T2ZXZWVrLHdEYXksd0hvdXIsd01pbnV0ZSx3U2Vjb25kLHdNaWxsaXNlY29uZHN9O30sZGVjb2RlVGltZVpvbmVJbmZvcm1hdGlvbigpe2NvbnN0IGJpYXM9dGhpcy5kZWNvZGVVSW50MzIoKTtjb25zdCBzdGFuZGFyZE5hbWU9dGhpcy5kZWNvZGVGaXhlZFcxNlN0cmluZygzMik7Y29uc3Qgc3RhbmRhcmREYXRlPXRoaXMuZGVjb2RlU3lzdGVtVGltZSgpO2NvbnN0IHN0YW5kYXJkQmlhcz10aGlzLmRlY29kZVVJbnQzMigpO2NvbnN0IGRheWxpZ2h0TmFtZT10aGlzLmRlY29kZUZpeGVkVzE2U3RyaW5nKDMyKTtjb25zdCBkYXlsaWdodERhdGU9dGhpcy5kZWNvZGVTeXN0ZW1UaW1lKCk7Y29uc3QgZGF5bGlnaHRCaWFzPXRoaXMuZGVjb2RlVUludDMyKCk7cmV0dXJue2JpYXMsc3RhbmRhcmROYW1lLHN0YW5kYXJkRGF0ZSxzdGFuZGFyZEJpYXMsZGF5bGlnaHROYW1lLGRheWxpZ2h0RGF0ZSxkYXlsaWdodEJpYXN9O319O2Z1bmN0aW9uIEV0d0ltcG9ydGVyKG1vZGVsLGV2ZW50cyl7dGhpcy5pbXBvcnRQcmlvcml0eT0zO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz1ldmVudHM7dGhpcy5oYW5kbGVyc189e307dGhpcy5kZWNvZGVyXz1uZXcgRGVjb2RlcigpO3RoaXMud2FsbHRpbWVfPXVuZGVmaW5lZDt0aGlzLnRpY2tzXz11bmRlZmluZWQ7dGhpcy5pczY0Yml0Xz11bmRlZmluZWQ7dGhpcy50aWRzVG9QaWRfPXt9O2NvbnN0IGFsbFR5cGVJbmZvcz10ci5lLmltcG9ydGVyLmV0dy5QYXJzZXIuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpO3RoaXMucGFyc2Vyc189YWxsVHlwZUluZm9zLm1hcChmdW5jdGlvbih0eXBlSW5mbyl7cmV0dXJuIG5ldyB0eXBlSW5mby5jb25zdHJ1Y3Rvcih0aGlzKTt9LHRoaXMpO30KRXR3SW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50cyl7aWYoIWV2ZW50cy5oYXNPd25Qcm9wZXJ0eSgnbmFtZScpfHwhZXZlbnRzLmhhc093blByb3BlcnR5KCdjb250ZW50Jyl8fGV2ZW50cy5uYW1lIT09J0VUVycpe3JldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO307RXR3SW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRXR3SW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sY3JlYXRlVGhyZWFkSWZOZWVkZWQocGlkLHRpZCl7dGhpcy50aWRzVG9QaWRfW3RpZF09cGlkO30scmVtb3ZlVGhyZWFkSWZQcmVzZW50KHRpZCl7dGhpcy50aWRzVG9QaWRfW3RpZF09dW5kZWZpbmVkO30sZ2V0UGlkRnJvbVdpbmRvd3NUaWQodGlkKXtpZih0aWQ9PT0wKXJldHVybiAwO2NvbnN0IHBpZD10aGlzLnRpZHNUb1BpZF9bdGlkXTtpZihwaWQ9PT11bmRlZmluZWQpe3JldHVybiAwO30KcmV0dXJuIHBpZDt9LGdldFRocmVhZEZyb21XaW5kb3dzVGlkKHRpZCl7Y29uc3QgcGlkPXRoaXMuZ2V0UGlkRnJvbVdpbmRvd3NUaWQodGlkKTtjb25zdCBwcm9jZXNzPXRoaXMubW9kZWxfLmdldFByb2Nlc3MocGlkKTtpZighcHJvY2VzcylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBwcm9jZXNzLmdldFRocmVhZCh0aWQpO30sZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKXtjb25zdCBjcHU9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ3B1KGNwdU51bWJlcik7cmV0dXJuIGNwdTt9LGltcG9ydEV2ZW50cygpe3RoaXMuZXZlbnRzXy5jb250ZW50LmZvckVhY2godGhpcy5wYXJzZUluZm8uYmluZCh0aGlzKSk7aWYodGhpcy53YWxsdGltZV89PT11bmRlZmluZWR8fHRoaXMudGlja3NfPT09dW5kZWZpbmVkKXt0aHJvdyBFcnJvcignQ2Fubm90IGZpbmQgY2xvY2sgc3luYyBpbmZvcm1hdGlvbiBpbiB0aGUgc3lzdGVtIHRyYWNlLicpO30KaWYodGhpcy5pczY0Yml0Xz09PXVuZGVmaW5lZCl7dGhyb3cgRXJyb3IoJ0Nhbm5vdCBkZXRlcm1pbmUgcG9pbnRlciBzaXplIG9mIHRoZSBzeXN0ZW0gdHJhY2UuJysnQ29uc2lkZXIgZGVzZWxlY3RpbmcgIlN5c3RlbSB0cmFjaW5nIiBvciBkaXNhYmxpbmcgdGhlICJQYWdpbmcgJysnRXhlY3V0aXZlIiBmZWF0dXJlIG9mIFdpbmRvd3MnKTt9CnRoaXMuZXZlbnRzXy5jb250ZW50LmZvckVhY2godGhpcy5wYXJzZUV2ZW50LmJpbmQodGhpcykpO30saW1wb3J0VGltZXN0YW1wKHRpbWVzdGFtcCl7Y29uc3QgdHM9cGFyc2VJbnQodGltZXN0YW1wLDE2KTtyZXR1cm4odHMtdGhpcy53YWxsdGltZV8rdGhpcy50aWNrc18pLzEwMDAuO30scGFyc2VJbmZvKGV2ZW50KXtpZihldmVudC5oYXNPd25Qcm9wZXJ0eSgnZ3VpZCcpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgnd2FsbHRpbWUnKSYmZXZlbnQuaGFzT3duUHJvcGVydHkoJ3RpY2snKSYmZXZlbnQuZ3VpZD09PSdDbG9ja1N5bmMnKXt0aGlzLndhbGx0aW1lXz1wYXJzZUludChldmVudC53YWxsdGltZSwxNik7dGhpcy50aWNrc189cGFyc2VJbnQoZXZlbnQudGljaywxNik7fQppZih0aGlzLmlzNjRiaXRfPT09dW5kZWZpbmVkJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgnZ3VpZCcpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgnb3AnKSYmZXZlbnQuaGFzT3duUHJvcGVydHkoJ3ZlcicpJiZldmVudC5oYXNPd25Qcm9wZXJ0eSgncGF5bG9hZCcpJiZldmVudC5ndWlkPT09a1RocmVhZEd1aWQmJmV2ZW50Lm9wPT09a1RocmVhZERDU3RhcnRPcGNvZGUpe2NvbnN0IGRlY29kZWRTaXplPXRyLmIuQmFzZTY0LmdldERlY29kZWRCdWZmZXJMZW5ndGgoZXZlbnQucGF5bG9hZCk7aWYoZXZlbnQudmVyPT09MSl7aWYoZGVjb2RlZFNpemU+PTUyKXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fWVsc2UgaWYoZXZlbnQudmVyPT09Mil7aWYoZGVjb2RlZFNpemU+PTY0KXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fWVsc2UgaWYoZXZlbnQudmVyPT09Myl7aWYoZGVjb2RlZFNpemU+PTYwKXt0aGlzLmlzNjRiaXRfPXRydWU7fWVsc2V7dGhpcy5pczY0Yml0Xz1mYWxzZTt9fX0KcmV0dXJuIHRydWU7fSxwYXJzZUV2ZW50KGV2ZW50KXtpZighZXZlbnQuaGFzT3duUHJvcGVydHkoJ2d1aWQnKXx8IWV2ZW50Lmhhc093blByb3BlcnR5KCdvcCcpfHwhZXZlbnQuaGFzT3duUHJvcGVydHkoJ3ZlcicpfHwhZXZlbnQuaGFzT3duUHJvcGVydHkoJ2NwdScpfHwhZXZlbnQuaGFzT3duUHJvcGVydHkoJ3RzJyl8fCFldmVudC5oYXNPd25Qcm9wZXJ0eSgncGF5bG9hZCcpKXtyZXR1cm4gZmFsc2U7fQpjb25zdCB0aW1lc3RhbXA9dGhpcy5pbXBvcnRUaW1lc3RhbXAoZXZlbnQudHMpO2NvbnN0IGhlYWRlcj17Z3VpZDpldmVudC5ndWlkLG9wY29kZTpldmVudC5vcCx2ZXJzaW9uOmV2ZW50LnZlcixjcHU6ZXZlbnQuY3B1LHRpbWVzdGFtcCxpczY0OnRoaXMuaXM2NGJpdF99O2NvbnN0IGRlY29kZXI9dGhpcy5kZWNvZGVyXztkZWNvZGVyLnJlc2V0KGV2ZW50LnBheWxvYWQpO2NvbnN0IGhhbmRsZXI9dGhpcy5nZXRFdmVudEhhbmRsZXIoaGVhZGVyLmd1aWQsaGVhZGVyLm9wY29kZSk7aWYoIWhhbmRsZXIpcmV0dXJuIGZhbHNlO2lmKCFoYW5kbGVyKGhlYWRlcixkZWNvZGVyKSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J01hbGZvcm1lZCAnK2hlYWRlci5ndWlkKycgZXZlbnQgKCcrZXZlbnQucGF5bG9hZCsnKSd9KTtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9LHJlZ2lzdGVyRXZlbnRIYW5kbGVyKGd1aWQsb3Bjb2RlLGhhbmRsZXIpe2lmKHRoaXMuaGFuZGxlcnNfW2d1aWRdPT09dW5kZWZpbmVkKXt0aGlzLmhhbmRsZXJzX1tndWlkXT1bXTt9CnRoaXMuaGFuZGxlcnNfW2d1aWRdW29wY29kZV09aGFuZGxlcjt9LGdldEV2ZW50SGFuZGxlcihndWlkLG9wY29kZSl7aWYodGhpcy5oYW5kbGVyc19bZ3VpZF09PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gdGhpcy5oYW5kbGVyc19bZ3VpZF1bb3Bjb2RlXTt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihFdHdJbXBvcnRlcik7cmV0dXJue0V0d0ltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIFRyYWNlU3RyZWFte3N0YXRpYyBnZXQgSEVBREVSX1NJWkUoKXtyZXR1cm4gTWF0aC5wb3coMiwxMCk7fQpzdGF0aWMgZ2V0IENIVU5LX1NJWkUoKXtyZXR1cm4gTWF0aC5wb3coMiwyMCk7fQpnZXQgaXNCaW5hcnkoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30KZ2V0IGhhc0RhdGEoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30KZ2V0IGhlYWRlcigpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fQpyZWFkVW50aWxEZWxpbWl0ZXIoZGVsaW0pe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fQpyZWFkTnVtQnl0ZXMob3B0X3NpemUpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fQpyZXdpbmQoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30Kc3Vic3RyZWFtKG9mZnNldCxvcHRfbGVuZ3RoLG9wdF9oZWFkZXJTaXplKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319CnJldHVybntUcmFjZVN0cmVhbSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5mdWNoc2lhJyxmdW5jdGlvbigpe2NvbnN0IElNUE9SVF9QUklPUklUWT0wO2NvbnN0IElETEVfVEhSRUFEX1RIUkVTSE9MRD02NDQ0MDAwMDAwO2NvbnN0IFpYX1RIUkVBRF9TVEFURV9ORVc9MDtjb25zdCBaWF9USFJFQURfU1RBVEVfUlVOTklORz0xO2NvbnN0IFpYX1RIUkVBRF9TVEFURV9TVVNQRU5ERUQ9Mjtjb25zdCBaWF9USFJFQURfU1RBVEVfQkxPQ0tFRD0zO2NvbnN0IFpYX1RIUkVBRF9TVEFURV9EWUlORz00O2NvbnN0IFpYX1RIUkVBRF9TVEFURV9ERUFEPTU7Y2xhc3MgRnVjaHNpYUltcG9ydGVyIGV4dGVuZHMgdHIuaW1wb3J0ZXIuSW1wb3J0ZXJ7Y29uc3RydWN0b3IobW9kZWwsZXZlbnREYXRhKXtzdXBlcihtb2RlbCxldmVudERhdGEpO3RoaXMuaW1wb3J0UHJpb3JpdHk9SU1QT1JUX1BSSU9SSVRZO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz1ldmVudERhdGEuZXZlbnRzO3RoaXMucGFyc2Vyc189W107dGhpcy50aHJlYWRJbmZvXz1uZXcgTWFwKCk7dGhpcy5wcm9jZXNzTmFtZXNfPW5ldyBNYXAoKTt0aGlzLnRocmVhZFN0YXRlc189bmV3IE1hcCgpO30Kc3RhdGljIGNhbkltcG9ydChldmVudERhdGEpe2lmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pe2lmKGV2ZW50RGF0YS5pc0JpbmFyeSlyZXR1cm4gZmFsc2U7ZXZlbnREYXRhPWV2ZW50RGF0YS5oZWFkZXI7fQppZihldmVudERhdGEgaW5zdGFuY2VvZiBPYmplY3QmJmV2ZW50RGF0YS50eXBlPT09J2Z1Y2hzaWEnKXtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9CmdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRnVjaHNpYUltcG9ydGVyJzt9CmdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9CmltcG9ydENsb2NrU3luY01hcmtlcnMoKXt9CmZpbmFsaXplSW1wb3J0KCl7fQppc0lkbGVUaHJlYWQocHJpbyx0aWQpe2lmKHByaW89PT11bmRlZmluZWQpe3JldHVybiB0aWQ+SURMRV9USFJFQURfVEhSRVNIT0xEO30KcmV0dXJuIHByaW89PT0wO30KcmVjb3JkVGhyZWFkU3RhdGVfKHRpZCx0aW1lc3RhbXAsc3RhdGUscHJpbyl7aWYodGhpcy5pc0lkbGVUaHJlYWQocHJpbyx0aWQpKXtyZXR1cm47fQpjb25zdCBzdGF0ZXM9dGhpcy50aHJlYWRTdGF0ZXNfLmhhcyh0aWQpP3RoaXMudGhyZWFkU3RhdGVzXy5nZXQodGlkKTpbXTtzdGF0ZXMucHVzaCh7J3RzJzp0aW1lc3RhbXAsc3RhdGV9KTt0aGlzLnRocmVhZFN0YXRlc18uc2V0KHRpZCxzdGF0ZXMpO30KcHJvY2Vzc0NvbnRleHRTd2l0Y2hFdmVudF8oZXZlbnQpe2xldCB0aWQ9ZXZlbnQuaW4udGlkO2xldCB0aHJlYWROYW1lPXRpZC50b1N0cmluZygpO2xldCBwcm9jTmFtZT0nJztjb25zdCBwcmlvPWV2ZW50LmluLnByaW87aWYodGhpcy50aHJlYWRJbmZvXy5oYXModGlkKSl7Y29uc3QgdGhyZWFkSW5mbz10aGlzLnRocmVhZEluZm9fLmdldCh0aWQpO3RocmVhZE5hbWU9dGhyZWFkSW5mby5uYW1lO2NvbnN0IHBpZD10aHJlYWRJbmZvLnBpZDtpZih0aGlzLnByb2Nlc3NOYW1lc18uaGFzKHBpZCkpe3Byb2NOYW1lPXRoaXMucHJvY2Vzc05hbWVzXy5nZXQocGlkKSsnOic7fX0KY29uc3QgbmFtZT1wcm9jTmFtZSt0aHJlYWROYW1lO2lmKHRoaXMuaXNJZGxlVGhyZWFkKHByaW8sdGlkKSl7dGlkPXVuZGVmaW5lZDt9CmNvbnN0IGNwdT10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDcHUoZXZlbnQuY3B1KTtjb25zdCB0aW1lc3RhbXA9dHIuYi5Vbml0LnRpbWVzdGFtcEZyb21VcyhldmVudC50cyk7Y3B1LnN3aXRjaEFjdGl2ZVRocmVhZCh0aW1lc3RhbXAse30sdGlkLG5hbWUsdGlkKTtjb25zdCBTQ0hFRFVMSU5HX1NUQVRFPXRyLm1vZGVsLlNDSEVEVUxJTkdfU1RBVEU7dGhpcy5yZWNvcmRUaHJlYWRTdGF0ZV8odGlkLHRpbWVzdGFtcCxTQ0hFRFVMSU5HX1NUQVRFLlJVTk5JTkcscHJpbyk7bGV0IG91dFN0YXRlPVNDSEVEVUxJTkdfU1RBVEUuVU5LTk9XTjtzd2l0Y2goZXZlbnQub3V0LnN0YXRlKXtjYXNlIFpYX1RIUkVBRF9TVEFURV9ORVc6b3V0U3RhdGU9U0NIRURVTElOR19TVEFURS5SVU5OQUJMRTticmVhaztjYXNlIFpYX1RIUkVBRF9TVEFURV9SVU5OSU5HOm91dFN0YXRlPVNDSEVEVUxJTkdfU1RBVEUuUlVOTkFCTEU7YnJlYWs7Y2FzZSBaWF9USFJFQURfU1RBVEVfQkxPQ0tFRDpvdXRTdGF0ZT1TQ0hFRFVMSU5HX1NUQVRFLlNMRUVQSU5HO2JyZWFrO2Nhc2UgWlhfVEhSRUFEX1NUQVRFX1NVU1BFTkRFRDpvdXRTdGF0ZT1TQ0hFRFVMSU5HX1NUQVRFLlNUT1BQRUQ7YnJlYWs7Y2FzZSBaWF9USFJFQURfU1RBVEVfREVBRDpvdXRTdGF0ZT1TQ0hFRFVMSU5HX1NUQVRFLlRBU0tfREVBRDticmVhazt9CnRoaXMucmVjb3JkVGhyZWFkU3RhdGVfKGV2ZW50Lm91dC50aWQsdGltZXN0YW1wLG91dFN0YXRlLGV2ZW50Lm91dC5wcmlvKTt9CnByb2Nlc3NQcm9jZXNzSW5mb0V2ZW50XyhldmVudCl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLm5hbWU9ZXZlbnQubmFtZTt0aGlzLnByb2Nlc3NOYW1lc18uc2V0KGV2ZW50LnBpZCxldmVudC5uYW1lKTtpZignc29ydF9pbmRleCdpbiBldmVudCl7cHJvY2Vzcy5zb3J0SW5kZXg9ZXZlbnQuc29ydF9pbmRleDt9fQpwcm9jZXNzVGhyZWFkSW5mb0V2ZW50XyhldmVudCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhyZWFkLm5hbWU9ZXZlbnQubmFtZTt0aGlzLnRocmVhZEluZm9fLnNldChldmVudC50aWQseyduYW1lJzpldmVudC5uYW1lLCdwaWQnOmV2ZW50LnBpZH0pO2lmKCdzb3J0X2luZGV4J2luIGV2ZW50KXtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTt0aHJlYWQuc29ydEluZGV4PWV2ZW50LnNvcnRfaW5kZXg7fX0KcHJvY2Vzc0V2ZW50XyhldmVudCl7c3dpdGNoKGV2ZW50LnBoKXtjYXNlJ2snOnRoaXMucHJvY2Vzc0NvbnRleHRTd2l0Y2hFdmVudF8oZXZlbnQpO2JyZWFrO2Nhc2UncCc6dGhpcy5wcm9jZXNzUHJvY2Vzc0luZm9FdmVudF8oZXZlbnQpO2JyZWFrO2Nhc2UndCc6dGhpcy5wcm9jZXNzVGhyZWFkSW5mb0V2ZW50XyhldmVudCk7YnJlYWs7fX0KcG9zdFByb2Nlc3NTdGF0ZXNfKCl7Zm9yKGNvbnN0W3RpZCxzdGF0ZXNdb2YgdGhpcy50aHJlYWRTdGF0ZXNfKXtpZighdGhpcy50aHJlYWRJbmZvXy5oYXModGlkKSl7Y29udGludWU7fQpjb25zdCBwaWQ9dGhpcy50aHJlYWRJbmZvXy5nZXQodGlkKS5waWQ7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7Y29uc3Qgc2xpY2VzPVtdO2ZvcihsZXQgaT0wO2k8c3RhdGVzLmxlbmd0aC0xO2krKyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsc3RhdGVzW2ldLnN0YXRlLCcnLHN0YXRlc1tpXS50cyx7fSxzdGF0ZXNbaSsxXS50cy1zdGF0ZXNbaV0udHMpKTt9CnRocmVhZC50aW1lU2xpY2VzPXNsaWNlczt9fQppbXBvcnRFdmVudHMoKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5ldmVudHNfKXt0aGlzLnByb2Nlc3NFdmVudF8oZXZlbnQpO30KdGhpcy5wb3N0UHJvY2Vzc1N0YXRlc18oKTt9fQp0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihGdWNoc2lhSW1wb3J0ZXIpO3JldHVybntGdWNoc2lhSW1wb3J0ZXIsSU1QT1JUX1BSSU9SSVRZLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NvbnN0IE1BWF9GVU5DVElPTl9BUkdTX0NPVU5UPU1hdGgucG93KDIsMTUpLTE7Y2xhc3MgSW5NZW1vcnlUcmFjZVN0cmVhbSBleHRlbmRzIHRyLmIuVHJhY2VTdHJlYW17Y29uc3RydWN0b3IoYnVmZmVyLGlzQmluYXJ5LG9wdF9oZWFkZXJTaXplKXtzdXBlcigpO2lmKCFidWZmZXIgaW5zdGFuY2VvZiBVaW50OEFycmF5KXt0aHJvdyBuZXcgRXJyb3IoJ2J1ZmZlciBzaG91bGQgYmUgYSBVaW50OEFycmF5Jyk7fQpjb25zdCBoZWFkZXJTaXplPW9wdF9oZWFkZXJTaXplfHx0ci5iLlRyYWNlU3RyZWFtLkhFQURFUl9TSVpFO3RoaXMuZGF0YV89YnVmZmVyO3RoaXMuaXNCaW5hcnlfPWlzQmluYXJ5O3RoaXMuaGVhZGVyXz1Jbk1lbW9yeVRyYWNlU3RyZWFtLnVpbnQ4QXJyYXlUb1N0cmluZ18odGhpcy5kYXRhXy5zdWJhcnJheSgwLGhlYWRlclNpemUpKTt0aGlzLmN1cnNvcl89MDt9CmdldCBpc0JpbmFyeSgpe3JldHVybiB0aGlzLmlzQmluYXJ5Xzt9CmdldCBoYXNEYXRhKCl7cmV0dXJuIHRoaXMuY3Vyc29yXzx0aGlzLmRhdGFfLmxlbmd0aDt9CmdldCBoZWFkZXIoKXtyZXR1cm4gdGhpcy5oZWFkZXJfO30KZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9CnRvU3RyaW5nKCl7dGhpcy5yZXdpbmQoKTtyZXR1cm4gdGhpcy5yZWFkTnVtQnl0ZXMoTnVtYmVyLk1BWF9WQUxVRSk7fQpyZWFkVW50aWxEZWxpbWl0ZXIoZGVsaW0pe2lmKGRlbGltLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBFcnJvcignZGVsaW0gbXVzdCBiZSBleGFjdGx5IG9uZSBjaGFyYWN0ZXInKTt9CmNvbnN0IG9mZnNldD10aGlzLmRhdGFfLmluZGV4T2YoZGVsaW0uY2hhckNvZGVBdCgwKSx0aGlzLmN1cnNvcl8pKzE7cmV0dXJuIHRoaXMucmVhZFRvT2Zmc2V0XyhvZmZzZXQ+MD9NYXRoLm1pbihvZmZzZXQsdGhpcy5kYXRhXy5sZW5ndGgpOnRoaXMuZGF0YV8ubGVuZ3RoKTt9CnJlYWROdW1CeXRlcyhvcHRfc2l6ZSl7aWYob3B0X3NpemUhPT11bmRlZmluZWQmJm9wdF9zaXplPD0wKXt0aHJvdyBuZXcgRXJyb3IoYHJlYWROdW1CeXRlcyBleHBlY3RzIGEgcG9zaXRpdmUgc2l6ZSAoJHtvcHRfc2l6ZX0gZ2l2ZW4pYCk7fQpjb25zdCBzaXplPW9wdF9zaXplfHx0ci5iLlRyYWNlU3RyZWFtLkNIVU5LX1NJWkU7Y29uc3Qgb2Zmc2V0PU1hdGgubWluKHRoaXMuY3Vyc29yXytzaXplLHRoaXMuZGF0YV8ubGVuZ3RoKTtyZXR1cm4gdGhpcy5yZWFkVG9PZmZzZXRfKG9mZnNldCk7fQpyZXdpbmQoKXt0aGlzLmN1cnNvcl89MDt9CnN1YnN0cmVhbShzdGFydE9mZnNldCxvcHRfZW5kT2Zmc2V0LG9wdF9oZWFkZXJTaXplKXtyZXR1cm4gbmV3IEluTWVtb3J5VHJhY2VTdHJlYW0odGhpcy5kYXRhXy5zdWJhcnJheShzdGFydE9mZnNldCxvcHRfZW5kT2Zmc2V0KSx0aGlzLmlzQmluYXJ5XyxvcHRfaGVhZGVyU2l6ZSk7fQpyZWFkVG9PZmZzZXRfKG9mZnNldCl7Y29uc3Qgb3V0PUluTWVtb3J5VHJhY2VTdHJlYW0udWludDhBcnJheVRvU3RyaW5nXyh0aGlzLmRhdGFfLnN1YmFycmF5KHRoaXMuY3Vyc29yXyxvZmZzZXQpKTt0aGlzLmN1cnNvcl89b2Zmc2V0O3JldHVybiBvdXQ7fQpzdGF0aWMgdWludDhBcnJheVRvU3RyaW5nXyhhcnIpe2lmKHR5cGVvZiBUZXh0RGVjb2RlciE9PSd1bmRlZmluZWQnKXtjb25zdCBkZWNvZGVyPW5ldyBUZXh0RGVjb2RlcigndXRmLTgnKTtyZXR1cm4gZGVjb2Rlci5kZWNvZGUoYXJyKTt9CmNvbnN0IGM9W107Zm9yKGxldCBpPTA7aTxhcnIubGVuZ3RoO2krPU1BWF9GVU5DVElPTl9BUkdTX0NPVU5UKXtjLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSguLi5hcnIuc3ViYXJyYXkoaSxpK01BWF9GVU5DVElPTl9BUkdTX0NPVU5UKSkpO30KcmV0dXJuIGMuam9pbignJyk7fX0KcmV0dXJue0luTWVtb3J5VHJhY2VTdHJlYW0sfTt9KTshZnVuY3Rpb24odCl7aWYoIm9iamVjdCI9PXR5cGVvZiBleHBvcnRzJiYidW5kZWZpbmVkIiE9dHlwZW9mIG1vZHVsZSltb2R1bGUuZXhwb3J0cz10KCk7ZWxzZSBpZigiZnVuY3Rpb24iPT10eXBlb2YgZGVmaW5lJiZkZWZpbmUuYW1kKWRlZmluZShbXSx0KTtlbHNleygidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Z2xvYmFsOiJ1bmRlZmluZWQiIT10eXBlb2Ygc2VsZj9zZWxmOnRoaXMpLnBha289dCgpfX0oZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24gdChlLGEsaSl7ZnVuY3Rpb24gbihzLG8pe2lmKCFhW3NdKXtpZighZVtzXSl7dmFyIGw9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmU7aWYoIW8mJmwpcmV0dXJuIGwocywhMCk7aWYocilyZXR1cm4gcihzLCEwKTt2YXIgaD1uZXcgRXJyb3IoIkNhbm5vdCBmaW5kIG1vZHVsZSAnIitzKyInIik7dGhyb3cgaC5jb2RlPSJNT0RVTEVfTk9UX0ZPVU5EIixofXZhciBkPWFbc109e2V4cG9ydHM6e319O2Vbc11bMF0uY2FsbChkLmV4cG9ydHMsZnVuY3Rpb24odCl7dmFyIGE9ZVtzXVsxXVt0XTtyZXR1cm4gbihhfHx0KX0sZCxkLmV4cG9ydHMsdCxlLGEsaSl9cmV0dXJuIGFbc10uZXhwb3J0c31mb3IodmFyIHI9ImZ1bmN0aW9uIj09dHlwZW9mIHJlcXVpcmUmJnJlcXVpcmUscz0wO3M8aS5sZW5ndGg7cysrKW4oaVtzXSk7cmV0dXJuIG59KHsxOltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7aWYoISh0aGlzIGluc3RhbmNlb2YgaSkpcmV0dXJuIG5ldyBpKHQpO3RoaXMub3B0aW9ucz1zLmFzc2lnbih7bGV2ZWw6XyxtZXRob2Q6YyxjaHVua1NpemU6MTYzODQsd2luZG93Qml0czoxNSxtZW1MZXZlbDo4LHN0cmF0ZWd5OnUsdG86IiJ9LHR8fHt9KTt2YXIgZT10aGlzLm9wdGlvbnM7ZS5yYXcmJmUud2luZG93Qml0cz4wP2Uud2luZG93Qml0cz0tZS53aW5kb3dCaXRzOmUuZ3ppcCYmZS53aW5kb3dCaXRzPjAmJmUud2luZG93Qml0czwxNiYmKGUud2luZG93Qml0cys9MTYpLHRoaXMuZXJyPTAsdGhpcy5tc2c9IiIsdGhpcy5lbmRlZD0hMSx0aGlzLmNodW5rcz1bXSx0aGlzLnN0cm09bmV3IGgsdGhpcy5zdHJtLmF2YWlsX291dD0wO3ZhciBhPXIuZGVmbGF0ZUluaXQyKHRoaXMuc3RybSxlLmxldmVsLGUubWV0aG9kLGUud2luZG93Qml0cyxlLm1lbUxldmVsLGUuc3RyYXRlZ3kpO2lmKGEhPT1mKXRocm93IG5ldyBFcnJvcihsW2FdKTtpZihlLmhlYWRlciYmci5kZWZsYXRlU2V0SGVhZGVyKHRoaXMuc3RybSxlLmhlYWRlciksZS5kaWN0aW9uYXJ5KXt2YXIgbjtpZihuPSJzdHJpbmciPT10eXBlb2YgZS5kaWN0aW9uYXJ5P28uc3RyaW5nMmJ1ZihlLmRpY3Rpb25hcnkpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1kLmNhbGwoZS5kaWN0aW9uYXJ5KT9uZXcgVWludDhBcnJheShlLmRpY3Rpb25hcnkpOmUuZGljdGlvbmFyeSwoYT1yLmRlZmxhdGVTZXREaWN0aW9uYXJ5KHRoaXMuc3RybSxuKSkhPT1mKXRocm93IG5ldyBFcnJvcihsW2FdKTt0aGlzLl9kaWN0X3NldD0hMH19ZnVuY3Rpb24gbih0LGUpe3ZhciBhPW5ldyBpKGUpO2lmKGEucHVzaCh0LCEwKSxhLmVycil0aHJvdyBhLm1zZ3x8bFthLmVycl07cmV0dXJuIGEucmVzdWx0fXZhciByPXQoIi4vemxpYi9kZWZsYXRlIikscz10KCIuL3V0aWxzL2NvbW1vbiIpLG89dCgiLi91dGlscy9zdHJpbmdzIiksbD10KCIuL3psaWIvbWVzc2FnZXMiKSxoPXQoIi4vemxpYi96c3RyZWFtIiksZD1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLGY9MCxfPS0xLHU9MCxjPTg7aS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciBhLGksbj10aGlzLnN0cm0sbD10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7aT1lPT09fn5lP2U6ITA9PT1lPzQ6MCwic3RyaW5nIj09dHlwZW9mIHQ/bi5pbnB1dD1vLnN0cmluZzJidWYodCk6IltvYmplY3QgQXJyYXlCdWZmZXJdIj09PWQuY2FsbCh0KT9uLmlucHV0PW5ldyBVaW50OEFycmF5KHQpOm4uaW5wdXQ9dCxuLm5leHRfaW49MCxuLmF2YWlsX2luPW4uaW5wdXQubGVuZ3RoO2Rve2lmKDA9PT1uLmF2YWlsX291dCYmKG4ub3V0cHV0PW5ldyBzLkJ1ZjgobCksbi5uZXh0X291dD0wLG4uYXZhaWxfb3V0PWwpLDEhPT0oYT1yLmRlZmxhdGUobixpKSkmJmEhPT1mKXJldHVybiB0aGlzLm9uRW5kKGEpLHRoaXMuZW5kZWQ9ITAsITE7MCE9PW4uYXZhaWxfb3V0JiYoMCE9PW4uYXZhaWxfaW58fDQhPT1pJiYyIT09aSl8fCgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz90aGlzLm9uRGF0YShvLmJ1ZjJiaW5zdHJpbmcocy5zaHJpbmtCdWYobi5vdXRwdXQsbi5uZXh0X291dCkpKTp0aGlzLm9uRGF0YShzLnNocmlua0J1ZihuLm91dHB1dCxuLm5leHRfb3V0KSkpfXdoaWxlKChuLmF2YWlsX2luPjB8fDA9PT1uLmF2YWlsX291dCkmJjEhPT1hKTtyZXR1cm4gND09PWk/KGE9ci5kZWZsYXRlRW5kKHRoaXMuc3RybSksdGhpcy5vbkVuZChhKSx0aGlzLmVuZGVkPSEwLGE9PT1mKToyIT09aXx8KHRoaXMub25FbmQoZiksbi5hdmFpbF9vdXQ9MCwhMCl9LGkucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfSxpLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09ZiYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMucmVzdWx0PXRoaXMuY2h1bmtzLmpvaW4oIiIpOnRoaXMucmVzdWx0PXMuZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPXQsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYS5EZWZsYXRlPWksYS5kZWZsYXRlPW4sYS5kZWZsYXRlUmF3PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIGU9ZXx8e30sZS5yYXc9ITAsbih0LGUpfSxhLmd6aXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHx7fSxlLmd6aXA9ITAsbih0LGUpfX0seyIuL3V0aWxzL2NvbW1vbiI6MywiLi91dGlscy9zdHJpbmdzIjo0LCIuL3psaWIvZGVmbGF0ZSI6OCwiLi96bGliL21lc3NhZ2VzIjoxMywiLi96bGliL3pzdHJlYW0iOjE1fV0sMjpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe2lmKCEodGhpcyBpbnN0YW5jZW9mIGkpKXJldHVybiBuZXcgaSh0KTt0aGlzLm9wdGlvbnM9cy5hc3NpZ24oe2NodW5rU2l6ZToxNjM4NCx3aW5kb3dCaXRzOjAsdG86IiJ9LHR8fHt9KTt2YXIgZT10aGlzLm9wdGlvbnM7ZS5yYXcmJmUud2luZG93Qml0cz49MCYmZS53aW5kb3dCaXRzPDE2JiYoZS53aW5kb3dCaXRzPS1lLndpbmRvd0JpdHMsMD09PWUud2luZG93Qml0cyYmKGUud2luZG93Qml0cz0tMTUpKSwhKGUud2luZG93Qml0cz49MCYmZS53aW5kb3dCaXRzPDE2KXx8dCYmdC53aW5kb3dCaXRzfHwoZS53aW5kb3dCaXRzKz0zMiksZS53aW5kb3dCaXRzPjE1JiZlLndpbmRvd0JpdHM8NDgmJjA9PSgxNSZlLndpbmRvd0JpdHMpJiYoZS53aW5kb3dCaXRzfD0xNSksdGhpcy5lcnI9MCx0aGlzLm1zZz0iIix0aGlzLmVuZGVkPSExLHRoaXMuY2h1bmtzPVtdLHRoaXMuc3RybT1uZXcgZCx0aGlzLnN0cm0uYXZhaWxfb3V0PTA7dmFyIGE9ci5pbmZsYXRlSW5pdDIodGhpcy5zdHJtLGUud2luZG93Qml0cyk7aWYoYSE9PWwuWl9PSyl0aHJvdyBuZXcgRXJyb3IoaFthXSk7dGhpcy5oZWFkZXI9bmV3IGYsci5pbmZsYXRlR2V0SGVhZGVyKHRoaXMuc3RybSx0aGlzLmhlYWRlcil9ZnVuY3Rpb24gbih0LGUpe3ZhciBhPW5ldyBpKGUpO2lmKGEucHVzaCh0LCEwKSxhLmVycil0aHJvdyBhLm1zZ3x8aFthLmVycl07cmV0dXJuIGEucmVzdWx0fXZhciByPXQoIi4vemxpYi9pbmZsYXRlIikscz10KCIuL3V0aWxzL2NvbW1vbiIpLG89dCgiLi91dGlscy9zdHJpbmdzIiksbD10KCIuL3psaWIvY29uc3RhbnRzIiksaD10KCIuL3psaWIvbWVzc2FnZXMiKSxkPXQoIi4vemxpYi96c3RyZWFtIiksZj10KCIuL3psaWIvZ3poZWFkZXIiKSxfPU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmc7aS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbih0LGUpe3ZhciBhLGksbixoLGQsZix1PXRoaXMuc3RybSxjPXRoaXMub3B0aW9ucy5jaHVua1NpemUsYj10aGlzLm9wdGlvbnMuZGljdGlvbmFyeSxnPSExO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7aT1lPT09fn5lP2U6ITA9PT1lP2wuWl9GSU5JU0g6bC5aX05PX0ZMVVNILCJzdHJpbmciPT10eXBlb2YgdD91LmlucHV0PW8uYmluc3RyaW5nMmJ1Zih0KToiW29iamVjdCBBcnJheUJ1ZmZlcl0iPT09Xy5jYWxsKHQpP3UuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkodCk6dS5pbnB1dD10LHUubmV4dF9pbj0wLHUuYXZhaWxfaW49dS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PXUuYXZhaWxfb3V0JiYodS5vdXRwdXQ9bmV3IHMuQnVmOChjKSx1Lm5leHRfb3V0PTAsdS5hdmFpbF9vdXQ9YyksKGE9ci5pbmZsYXRlKHUsbC5aX05PX0ZMVVNIKSk9PT1sLlpfTkVFRF9ESUNUJiZiJiYoZj0ic3RyaW5nIj09dHlwZW9mIGI/by5zdHJpbmcyYnVmKGIpOiJbb2JqZWN0IEFycmF5QnVmZmVyXSI9PT1fLmNhbGwoYik/bmV3IFVpbnQ4QXJyYXkoYik6YixhPXIuaW5mbGF0ZVNldERpY3Rpb25hcnkodGhpcy5zdHJtLGYpKSxhPT09bC5aX0JVRl9FUlJPUiYmITA9PT1nJiYoYT1sLlpfT0ssZz0hMSksYSE9PWwuWl9TVFJFQU1fRU5EJiZhIT09bC5aX09LKXJldHVybiB0aGlzLm9uRW5kKGEpLHRoaXMuZW5kZWQ9ITAsITE7dS5uZXh0X291dCYmKDAhPT11LmF2YWlsX291dCYmYSE9PWwuWl9TVFJFQU1fRU5EJiYoMCE9PXUuYXZhaWxfaW58fGkhPT1sLlpfRklOSVNIJiZpIT09bC5aX1NZTkNfRkxVU0gpfHwoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/KG49by51dGY4Ym9yZGVyKHUub3V0cHV0LHUubmV4dF9vdXQpLGg9dS5uZXh0X291dC1uLGQ9by5idWYyc3RyaW5nKHUub3V0cHV0LG4pLHUubmV4dF9vdXQ9aCx1LmF2YWlsX291dD1jLWgsaCYmcy5hcnJheVNldCh1Lm91dHB1dCx1Lm91dHB1dCxuLGgsMCksdGhpcy5vbkRhdGEoZCkpOnRoaXMub25EYXRhKHMuc2hyaW5rQnVmKHUub3V0cHV0LHUubmV4dF9vdXQpKSkpLDA9PT11LmF2YWlsX2luJiYwPT09dS5hdmFpbF9vdXQmJihnPSEwKX13aGlsZSgodS5hdmFpbF9pbj4wfHwwPT09dS5hdmFpbF9vdXQpJiZhIT09bC5aX1NUUkVBTV9FTkQpO3JldHVybiBhPT09bC5aX1NUUkVBTV9FTkQmJihpPWwuWl9GSU5JU0gpLGk9PT1sLlpfRklOSVNIPyhhPXIuaW5mbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYSksdGhpcy5lbmRlZD0hMCxhPT09bC5aX09LKTppIT09bC5aX1NZTkNfRkxVU0h8fCh0aGlzLm9uRW5kKGwuWl9PSyksdS5hdmFpbF9vdXQ9MCwhMCl9LGkucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbih0KXt0aGlzLmNodW5rcy5wdXNoKHQpfSxpLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbih0KXt0PT09bC5aX09LJiYoInN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5yZXN1bHQ9dGhpcy5jaHVua3Muam9pbigiIik6dGhpcy5yZXN1bHQ9cy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9dCx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxhLkluZmxhdGU9aSxhLmluZmxhdGU9bixhLmluZmxhdGVSYXc9ZnVuY3Rpb24odCxlKXtyZXR1cm4gZT1lfHx7fSxlLnJhdz0hMCxuKHQsZSl9LGEudW5nemlwPW59LHsiLi91dGlscy9jb21tb24iOjMsIi4vdXRpbHMvc3RyaW5ncyI6NCwiLi96bGliL2NvbnN0YW50cyI6NiwiLi96bGliL2d6aGVhZGVyIjo5LCIuL3psaWIvaW5mbGF0ZSI6MTEsIi4vemxpYi9tZXNzYWdlcyI6MTMsIi4vemxpYi96c3RyZWFtIjoxNX1dLDM6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCxlKX12YXIgbj0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDE2QXJyYXkmJiJ1bmRlZmluZWQiIT10eXBlb2YgSW50MzJBcnJheTthLmFzc2lnbj1mdW5jdGlvbih0KXtmb3IodmFyIGU9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO2UubGVuZ3RoOyl7dmFyIGE9ZS5zaGlmdCgpO2lmKGEpe2lmKCJvYmplY3QiIT10eXBlb2YgYSl0aHJvdyBuZXcgVHlwZUVycm9yKGErIm11c3QgYmUgbm9uLW9iamVjdCIpO2Zvcih2YXIgbiBpbiBhKWkoYSxuKSYmKHRbbl09YVtuXSl9fXJldHVybiB0fSxhLnNocmlua0J1Zj1mdW5jdGlvbih0LGUpe3JldHVybiB0Lmxlbmd0aD09PWU/dDp0LnN1YmFycmF5P3Quc3ViYXJyYXkoMCxlKToodC5sZW5ndGg9ZSx0KX07dmFyIHI9e2FycmF5U2V0OmZ1bmN0aW9uKHQsZSxhLGksbil7aWYoZS5zdWJhcnJheSYmdC5zdWJhcnJheSl0LnNldChlLnN1YmFycmF5KGEsYStpKSxuKTtlbHNlIGZvcih2YXIgcj0wO3I8aTtyKyspdFtuK3JdPWVbYStyXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbih0KXt2YXIgZSxhLGksbixyLHM7Zm9yKGk9MCxlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKWkrPXRbZV0ubGVuZ3RoO2ZvcihzPW5ldyBVaW50OEFycmF5KGkpLG49MCxlPTAsYT10Lmxlbmd0aDtlPGE7ZSsrKXI9dFtlXSxzLnNldChyLG4pLG4rPXIubGVuZ3RoO3JldHVybiBzfX0scz17YXJyYXlTZXQ6ZnVuY3Rpb24odCxlLGEsaSxuKXtmb3IodmFyIHI9MDtyPGk7cisrKXRbbityXT1lW2Ercl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24odCl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLHQpfX07YS5zZXRUeXBlZD1mdW5jdGlvbih0KXt0PyhhLkJ1Zjg9VWludDhBcnJheSxhLkJ1ZjE2PVVpbnQxNkFycmF5LGEuQnVmMzI9SW50MzJBcnJheSxhLmFzc2lnbihhLHIpKTooYS5CdWY4PUFycmF5LGEuQnVmMTY9QXJyYXksYS5CdWYzMj1BcnJheSxhLmFzc2lnbihhLHMpKX0sYS5zZXRUeXBlZChuKX0se31dLDQ6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0LGUpe2lmKGU8NjU1MzcmJih0LnN1YmFycmF5JiZzfHwhdC5zdWJhcnJheSYmcikpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuLnNocmlua0J1Zih0LGUpKTtmb3IodmFyIGE9IiIsaT0wO2k8ZTtpKyspYSs9U3RyaW5nLmZyb21DaGFyQ29kZSh0W2ldKTtyZXR1cm4gYX12YXIgbj10KCIuL2NvbW1vbiIpLHI9ITAscz0hMDt0cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLFswXSl9Y2F0Y2godCl7cj0hMX10cnl7U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDEpKX1jYXRjaCh0KXtzPSExfWZvcih2YXIgbz1uZXcgbi5CdWY4KDI1NiksbD0wO2w8MjU2O2wrKylvW2xdPWw+PTI1Mj82Omw+PTI0OD81Omw+PTI0MD80Omw+PTIyND8zOmw+PTE5Mj8yOjE7b1syNTRdPW9bMjU0XT0xLGEuc3RyaW5nMmJ1Zj1mdW5jdGlvbih0KXt2YXIgZSxhLGkscixzLG89dC5sZW5ndGgsbD0wO2ZvcihyPTA7cjxvO3IrKyk1NTI5Nj09KDY0NTEyJihhPXQuY2hhckNvZGVBdChyKSkpJiZyKzE8byYmNTYzMjA9PSg2NDUxMiYoaT10LmNoYXJDb2RlQXQocisxKSkpJiYoYT02NTUzNisoYS01NTI5Njw8MTApKyhpLTU2MzIwKSxyKyspLGwrPWE8MTI4PzE6YTwyMDQ4PzI6YTw2NTUzNj8zOjQ7Zm9yKGU9bmV3IG4uQnVmOChsKSxzPTAscj0wO3M8bDtyKyspNTUyOTY9PSg2NDUxMiYoYT10LmNoYXJDb2RlQXQocikpKSYmcisxPG8mJjU2MzIwPT0oNjQ1MTImKGk9dC5jaGFyQ29kZUF0KHIrMSkpKSYmKGE9NjU1MzYrKGEtNTUyOTY8PDEwKSsoaS01NjMyMCkscisrKSxhPDEyOD9lW3MrK109YTphPDIwNDg/KGVbcysrXT0xOTJ8YT4+PjYsZVtzKytdPTEyOHw2MyZhKTphPDY1NTM2PyhlW3MrK109MjI0fGE+Pj4xMixlW3MrK109MTI4fGE+Pj42JjYzLGVbcysrXT0xMjh8NjMmYSk6KGVbcysrXT0yNDB8YT4+PjE4LGVbcysrXT0xMjh8YT4+PjEyJjYzLGVbcysrXT0xMjh8YT4+PjYmNjMsZVtzKytdPTEyOHw2MyZhKTtyZXR1cm4gZX0sYS5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKHQpe3JldHVybiBpKHQsdC5sZW5ndGgpfSxhLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24odCl7Zm9yKHZhciBlPW5ldyBuLkJ1ZjgodC5sZW5ndGgpLGE9MCxpPWUubGVuZ3RoO2E8aTthKyspZVthXT10LmNoYXJDb2RlQXQoYSk7cmV0dXJuIGV9LGEuYnVmMnN0cmluZz1mdW5jdGlvbih0LGUpe3ZhciBhLG4scixzLGw9ZXx8dC5sZW5ndGgsaD1uZXcgQXJyYXkoMipsKTtmb3Iobj0wLGE9MDthPGw7KWlmKChyPXRbYSsrXSk8MTI4KWhbbisrXT1yO2Vsc2UgaWYoKHM9b1tyXSk+NCloW24rK109NjU1MzMsYSs9cy0xO2Vsc2V7Zm9yKHImPTI9PT1zPzMxOjM9PT1zPzE1Ojc7cz4xJiZhPGw7KXI9cjw8Nnw2MyZ0W2ErK10scy0tO3M+MT9oW24rK109NjU1MzM6cjw2NTUzNj9oW24rK109cjooci09NjU1MzYsaFtuKytdPTU1Mjk2fHI+PjEwJjEwMjMsaFtuKytdPTU2MzIwfDEwMjMmcil9cmV0dXJuIGkoaCxuKX0sYS51dGY4Ym9yZGVyPWZ1bmN0aW9uKHQsZSl7dmFyIGE7Zm9yKChlPWV8fHQubGVuZ3RoKT50Lmxlbmd0aCYmKGU9dC5sZW5ndGgpLGE9ZS0xO2E+PTAmJjEyOD09KDE5MiZ0W2FdKTspYS0tO3JldHVybiBhPDA/ZTowPT09YT9lOmErb1t0W2FdXT5lP2E6ZX19LHsiLi9jb21tb24iOjN9XSw1OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbih0LGUsYSxpKXtmb3IodmFyIG49NjU1MzUmdHwwLHI9dD4+PjE2JjY1NTM1fDAscz0wOzAhPT1hOyl7YS09cz1hPjJlMz8yZTM6YTtkb3tyPXIrKG49bitlW2krK118MCl8MH13aGlsZSgtLXMpO24lPTY1NTIxLHIlPTY1NTIxfXJldHVybiBufHI8PDE2fDB9fSx7fV0sNjpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e1pfTk9fRkxVU0g6MCxaX1BBUlRJQUxfRkxVU0g6MSxaX1NZTkNfRkxVU0g6MixaX0ZVTExfRkxVU0g6MyxaX0ZJTklTSDo0LFpfQkxPQ0s6NSxaX1RSRUVTOjYsWl9PSzowLFpfU1RSRUFNX0VORDoxLFpfTkVFRF9ESUNUOjIsWl9FUlJOTzotMSxaX1NUUkVBTV9FUlJPUjotMixaX0RBVEFfRVJST1I6LTMsWl9CVUZfRVJST1I6LTUsWl9OT19DT01QUkVTU0lPTjowLFpfQkVTVF9TUEVFRDoxLFpfQkVTVF9DT01QUkVTU0lPTjo5LFpfREVGQVVMVF9DT01QUkVTU0lPTjotMSxaX0ZJTFRFUkVEOjEsWl9IVUZGTUFOX09OTFk6MixaX1JMRTozLFpfRklYRUQ6NCxaX0RFRkFVTFRfU1RSQVRFR1k6MCxaX0JJTkFSWTowLFpfVEVYVDoxLFpfVU5LTk9XTjoyLFpfREVGTEFURUQ6OH19LHt9XSw3OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO3ZhciBpPWZ1bmN0aW9uKCl7Zm9yKHZhciB0LGU9W10sYT0wO2E8MjU2O2ErKyl7dD1hO2Zvcih2YXIgaT0wO2k8ODtpKyspdD0xJnQ/Mzk4ODI5MjM4NF50Pj4+MTp0Pj4+MTtlW2FdPXR9cmV0dXJuIGV9KCk7ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxhLG4pe3ZhciByPWkscz1uK2E7dF49LTE7Zm9yKHZhciBvPW47bzxzO28rKyl0PXQ+Pj44XnJbMjU1Jih0XmVbb10pXTtyZXR1cm4tMV50fX0se31dLDg6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gaSh0LGUpe3JldHVybiB0Lm1zZz1BW2VdLGV9ZnVuY3Rpb24gbih0KXtyZXR1cm4odDw8MSktKHQ+ND85OjApfWZ1bmN0aW9uIHIodCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT49MDspdFtlXT0wfWZ1bmN0aW9uIHModCl7dmFyIGU9dC5zdGF0ZSxhPWUucGVuZGluZzthPnQuYXZhaWxfb3V0JiYoYT10LmF2YWlsX291dCksMCE9PWEmJih6LmFycmF5U2V0KHQub3V0cHV0LGUucGVuZGluZ19idWYsZS5wZW5kaW5nX291dCxhLHQubmV4dF9vdXQpLHQubmV4dF9vdXQrPWEsZS5wZW5kaW5nX291dCs9YSx0LnRvdGFsX291dCs9YSx0LmF2YWlsX291dC09YSxlLnBlbmRpbmctPWEsMD09PWUucGVuZGluZyYmKGUucGVuZGluZ19vdXQ9MCkpfWZ1bmN0aW9uIG8odCxlKXtCLl90cl9mbHVzaF9ibG9jayh0LHQuYmxvY2tfc3RhcnQ+PTA/dC5ibG9ja19zdGFydDotMSx0LnN0cnN0YXJ0LXQuYmxvY2tfc3RhcnQsZSksdC5ibG9ja19zdGFydD10LnN0cnN0YXJ0LHModC5zdHJtKX1mdW5jdGlvbiBsKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZX1mdW5jdGlvbiBoKHQsZSl7dC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109ZT4+PjgmMjU1LHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPTI1NSZlfWZ1bmN0aW9uIGQodCxlLGEsaSl7dmFyIG49dC5hdmFpbF9pbjtyZXR1cm4gbj5pJiYobj1pKSwwPT09bj8wOih0LmF2YWlsX2luLT1uLHouYXJyYXlTZXQoZSx0LmlucHV0LHQubmV4dF9pbixuLGEpLDE9PT10LnN0YXRlLndyYXA/dC5hZGxlcj1TKHQuYWRsZXIsZSxuLGEpOjI9PT10LnN0YXRlLndyYXAmJih0LmFkbGVyPUUodC5hZGxlcixlLG4sYSkpLHQubmV4dF9pbis9bix0LnRvdGFsX2luKz1uLG4pfWZ1bmN0aW9uIGYodCxlKXt2YXIgYSxpLG49dC5tYXhfY2hhaW5fbGVuZ3RoLHI9dC5zdHJzdGFydCxzPXQucHJldl9sZW5ndGgsbz10Lm5pY2VfbWF0Y2gsbD10LnN0cnN0YXJ0PnQud19zaXplLWl0P3Quc3Ryc3RhcnQtKHQud19zaXplLWl0KTowLGg9dC53aW5kb3csZD10LndfbWFzayxmPXQucHJldixfPXQuc3Ryc3RhcnQrYXQsdT1oW3Ircy0xXSxjPWhbcitzXTt0LnByZXZfbGVuZ3RoPj10Lmdvb2RfbWF0Y2gmJihuPj49Miksbz50Lmxvb2thaGVhZCYmKG89dC5sb29rYWhlYWQpO2Rve2lmKGE9ZSxoW2Erc109PT1jJiZoW2Ercy0xXT09PXUmJmhbYV09PT1oW3JdJiZoWysrYV09PT1oW3IrMV0pe3IrPTIsYSsrO2Rve313aGlsZShoWysrcl09PT1oWysrYV0mJmhbKytyXT09PWhbKythXSYmaFsrK3JdPT09aFsrK2FdJiZoWysrcl09PT1oWysrYV0mJmhbKytyXT09PWhbKythXSYmaFsrK3JdPT09aFsrK2FdJiZoWysrcl09PT1oWysrYV0mJmhbKytyXT09PWhbKythXSYmcjxfKTtpZihpPWF0LShfLXIpLHI9Xy1hdCxpPnMpe2lmKHQubWF0Y2hfc3RhcnQ9ZSxzPWksaT49bylicmVhazt1PWhbcitzLTFdLGM9aFtyK3NdfX19d2hpbGUoKGU9ZltlJmRdKT5sJiYwIT0tLW4pO3JldHVybiBzPD10Lmxvb2thaGVhZD9zOnQubG9va2FoZWFkfWZ1bmN0aW9uIF8odCl7dmFyIGUsYSxpLG4scixzPXQud19zaXplO2Rve2lmKG49dC53aW5kb3dfc2l6ZS10Lmxvb2thaGVhZC10LnN0cnN0YXJ0LHQuc3Ryc3RhcnQ+PXMrKHMtaXQpKXt6LmFycmF5U2V0KHQud2luZG93LHQud2luZG93LHMscywwKSx0Lm1hdGNoX3N0YXJ0LT1zLHQuc3Ryc3RhcnQtPXMsdC5ibG9ja19zdGFydC09cyxlPWE9dC5oYXNoX3NpemU7ZG97aT10LmhlYWRbLS1lXSx0LmhlYWRbZV09aT49cz9pLXM6MH13aGlsZSgtLWEpO2U9YT1zO2Rve2k9dC5wcmV2Wy0tZV0sdC5wcmV2W2VdPWk+PXM/aS1zOjB9d2hpbGUoLS1hKTtuKz1zfWlmKDA9PT10LnN0cm0uYXZhaWxfaW4pYnJlYWs7aWYoYT1kKHQuc3RybSx0LndpbmRvdyx0LnN0cnN0YXJ0K3QubG9va2FoZWFkLG4pLHQubG9va2FoZWFkKz1hLHQubG9va2FoZWFkK3QuaW5zZXJ0Pj1ldClmb3Iocj10LnN0cnN0YXJ0LXQuaW5zZXJ0LHQuaW5zX2g9dC53aW5kb3dbcl0sdC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3IrMV0pJnQuaGFzaF9tYXNrO3QuaW5zZXJ0JiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3IrZXQtMV0pJnQuaGFzaF9tYXNrLHQucHJldltyJnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXIscisrLHQuaW5zZXJ0LS0sISh0Lmxvb2thaGVhZCt0Lmluc2VydDxldCkpOyk7fXdoaWxlKHQubG9va2FoZWFkPGl0JiYwIT09dC5zdHJtLmF2YWlsX2luKX1mdW5jdGlvbiB1KHQsZSl7Zm9yKHZhciBhLGk7Oyl7aWYodC5sb29rYWhlYWQ8aXQpe2lmKF8odCksdC5sb29rYWhlYWQ8aXQmJmU9PT1aKXJldHVybiBfdDtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYoYT0wLHQubG9va2FoZWFkPj1ldCYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K2V0LTFdKSZ0Lmhhc2hfbWFzayxhPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpLDAhPT1hJiZ0LnN0cnN0YXJ0LWE8PXQud19zaXplLWl0JiYodC5tYXRjaF9sZW5ndGg9Zih0LGEpKSx0Lm1hdGNoX2xlbmd0aD49ZXQpaWYoaT1CLl90cl90YWxseSh0LHQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydCx0Lm1hdGNoX2xlbmd0aC1ldCksdC5sb29rYWhlYWQtPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPD10Lm1heF9sYXp5X21hdGNoJiZ0Lmxvb2thaGVhZD49ZXQpe3QubWF0Y2hfbGVuZ3RoLS07ZG97dC5zdHJzdGFydCsrLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K2V0LTFdKSZ0Lmhhc2hfbWFzayxhPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnR9d2hpbGUoMCE9LS10Lm1hdGNoX2xlbmd0aCk7dC5zdHJzdGFydCsrfWVsc2UgdC5zdHJzdGFydCs9dC5tYXRjaF9sZW5ndGgsdC5tYXRjaF9sZW5ndGg9MCx0Lmluc19oPXQud2luZG93W3Quc3Ryc3RhcnRdLHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0KzFdKSZ0Lmhhc2hfbWFzaztlbHNlIGk9Qi5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnRdKSx0Lmxvb2thaGVhZC0tLHQuc3Ryc3RhcnQrKztpZihpJiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIF90fXJldHVybiB0Lmluc2VydD10LnN0cnN0YXJ0PGV0LTE/dC5zdHJzdGFydDpldC0xLGU9PT1OPyhvKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P2N0OmJ0KTp0Lmxhc3RfbGl0JiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCk/X3Q6dXR9ZnVuY3Rpb24gYyh0LGUpe2Zvcih2YXIgYSxpLG47Oyl7aWYodC5sb29rYWhlYWQ8aXQpe2lmKF8odCksdC5sb29rYWhlYWQ8aXQmJmU9PT1aKXJldHVybiBfdDtpZigwPT09dC5sb29rYWhlYWQpYnJlYWt9aWYoYT0wLHQubG9va2FoZWFkPj1ldCYmKHQuaW5zX2g9KHQuaW5zX2g8PHQuaGFzaF9zaGlmdF50LndpbmRvd1t0LnN0cnN0YXJ0K2V0LTFdKSZ0Lmhhc2hfbWFzayxhPXQucHJldlt0LnN0cnN0YXJ0JnQud19tYXNrXT10LmhlYWRbdC5pbnNfaF0sdC5oZWFkW3QuaW5zX2hdPXQuc3Ryc3RhcnQpLHQucHJldl9sZW5ndGg9dC5tYXRjaF9sZW5ndGgsdC5wcmV2X21hdGNoPXQubWF0Y2hfc3RhcnQsdC5tYXRjaF9sZW5ndGg9ZXQtMSwwIT09YSYmdC5wcmV2X2xlbmd0aDx0Lm1heF9sYXp5X21hdGNoJiZ0LnN0cnN0YXJ0LWE8PXQud19zaXplLWl0JiYodC5tYXRjaF9sZW5ndGg9Zih0LGEpLHQubWF0Y2hfbGVuZ3RoPD01JiYodC5zdHJhdGVneT09PUh8fHQubWF0Y2hfbGVuZ3RoPT09ZXQmJnQuc3Ryc3RhcnQtdC5tYXRjaF9zdGFydD40MDk2KSYmKHQubWF0Y2hfbGVuZ3RoPWV0LTEpKSx0LnByZXZfbGVuZ3RoPj1ldCYmdC5tYXRjaF9sZW5ndGg8PXQucHJldl9sZW5ndGgpe249dC5zdHJzdGFydCt0Lmxvb2thaGVhZC1ldCxpPUIuX3RyX3RhbGx5KHQsdC5zdHJzdGFydC0xLXQucHJldl9tYXRjaCx0LnByZXZfbGVuZ3RoLWV0KSx0Lmxvb2thaGVhZC09dC5wcmV2X2xlbmd0aC0xLHQucHJldl9sZW5ndGgtPTI7ZG97Kyt0LnN0cnN0YXJ0PD1uJiYodC5pbnNfaD0odC5pbnNfaDw8dC5oYXNoX3NoaWZ0XnQud2luZG93W3Quc3Ryc3RhcnQrZXQtMV0pJnQuaGFzaF9tYXNrLGE9dC5wcmV2W3Quc3Ryc3RhcnQmdC53X21hc2tdPXQuaGVhZFt0Lmluc19oXSx0LmhlYWRbdC5pbnNfaF09dC5zdHJzdGFydCl9d2hpbGUoMCE9LS10LnByZXZfbGVuZ3RoKTtpZih0Lm1hdGNoX2F2YWlsYWJsZT0wLHQubWF0Y2hfbGVuZ3RoPWV0LTEsdC5zdHJzdGFydCsrLGkmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gX3R9ZWxzZSBpZih0Lm1hdGNoX2F2YWlsYWJsZSl7aWYoKGk9Qi5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnQtMV0pKSYmbyh0LCExKSx0LnN0cnN0YXJ0KyssdC5sb29rYWhlYWQtLSwwPT09dC5zdHJtLmF2YWlsX291dClyZXR1cm4gX3R9ZWxzZSB0Lm1hdGNoX2F2YWlsYWJsZT0xLHQuc3Ryc3RhcnQrKyx0Lmxvb2thaGVhZC0tfXJldHVybiB0Lm1hdGNoX2F2YWlsYWJsZSYmKGk9Qi5fdHJfdGFsbHkodCwwLHQud2luZG93W3Quc3Ryc3RhcnQtMV0pLHQubWF0Y2hfYXZhaWxhYmxlPTApLHQuaW5zZXJ0PXQuc3Ryc3RhcnQ8ZXQtMT90LnN0cnN0YXJ0OmV0LTEsZT09PU4/KG8odCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Y3Q6YnQpOnQubGFzdF9saXQmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9fdDp1dH1mdW5jdGlvbiBiKHQsZSl7Zm9yKHZhciBhLGksbixyLHM9dC53aW5kb3c7Oyl7aWYodC5sb29rYWhlYWQ8PWF0KXtpZihfKHQpLHQubG9va2FoZWFkPD1hdCYmZT09PVopcmV0dXJuIF90O2lmKDA9PT10Lmxvb2thaGVhZClicmVha31pZih0Lm1hdGNoX2xlbmd0aD0wLHQubG9va2FoZWFkPj1ldCYmdC5zdHJzdGFydD4wJiYobj10LnN0cnN0YXJ0LTEsKGk9c1tuXSk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0pKXtyPXQuc3Ryc3RhcnQrYXQ7ZG97fXdoaWxlKGk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJmk9PT1zWysrbl0mJm48cik7dC5tYXRjaF9sZW5ndGg9YXQtKHItbiksdC5tYXRjaF9sZW5ndGg+dC5sb29rYWhlYWQmJih0Lm1hdGNoX2xlbmd0aD10Lmxvb2thaGVhZCl9aWYodC5tYXRjaF9sZW5ndGg+PWV0PyhhPUIuX3RyX3RhbGx5KHQsMSx0Lm1hdGNoX2xlbmd0aC1ldCksdC5sb29rYWhlYWQtPXQubWF0Y2hfbGVuZ3RoLHQuc3Ryc3RhcnQrPXQubWF0Y2hfbGVuZ3RoLHQubWF0Y2hfbGVuZ3RoPTApOihhPUIuX3RyX3RhbGx5KHQsMCx0LndpbmRvd1t0LnN0cnN0YXJ0XSksdC5sb29rYWhlYWQtLSx0LnN0cnN0YXJ0KyspLGEmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gX3R9cmV0dXJuIHQuaW5zZXJ0PTAsZT09PU4/KG8odCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Y3Q6YnQpOnQubGFzdF9saXQmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9fdDp1dH1mdW5jdGlvbiBnKHQsZSl7Zm9yKHZhciBhOzspe2lmKDA9PT10Lmxvb2thaGVhZCYmKF8odCksMD09PXQubG9va2FoZWFkKSl7aWYoZT09PVopcmV0dXJuIF90O2JyZWFrfWlmKHQubWF0Y2hfbGVuZ3RoPTAsYT1CLl90cl90YWxseSh0LDAsdC53aW5kb3dbdC5zdHJzdGFydF0pLHQubG9va2FoZWFkLS0sdC5zdHJzdGFydCsrLGEmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gX3R9cmV0dXJuIHQuaW5zZXJ0PTAsZT09PU4/KG8odCwhMCksMD09PXQuc3RybS5hdmFpbF9vdXQ/Y3Q6YnQpOnQubGFzdF9saXQmJihvKHQsITEpLDA9PT10LnN0cm0uYXZhaWxfb3V0KT9fdDp1dH1mdW5jdGlvbiBtKHQsZSxhLGksbil7dGhpcy5nb29kX2xlbmd0aD10LHRoaXMubWF4X2xhenk9ZSx0aGlzLm5pY2VfbGVuZ3RoPWEsdGhpcy5tYXhfY2hhaW49aSx0aGlzLmZ1bmM9bn1mdW5jdGlvbiB3KHQpe3Qud2luZG93X3NpemU9Mip0Lndfc2l6ZSxyKHQuaGVhZCksdC5tYXhfbGF6eV9tYXRjaD14W3QubGV2ZWxdLm1heF9sYXp5LHQuZ29vZF9tYXRjaD14W3QubGV2ZWxdLmdvb2RfbGVuZ3RoLHQubmljZV9tYXRjaD14W3QubGV2ZWxdLm5pY2VfbGVuZ3RoLHQubWF4X2NoYWluX2xlbmd0aD14W3QubGV2ZWxdLm1heF9jaGFpbix0LnN0cnN0YXJ0PTAsdC5ibG9ja19zdGFydD0wLHQubG9va2FoZWFkPTAsdC5pbnNlcnQ9MCx0Lm1hdGNoX2xlbmd0aD10LnByZXZfbGVuZ3RoPWV0LTEsdC5tYXRjaF9hdmFpbGFibGU9MCx0Lmluc19oPTB9ZnVuY3Rpb24gcCgpe3RoaXMuc3RybT1udWxsLHRoaXMuc3RhdHVzPTAsdGhpcy5wZW5kaW5nX2J1Zj1udWxsLHRoaXMucGVuZGluZ19idWZfc2l6ZT0wLHRoaXMucGVuZGluZ19vdXQ9MCx0aGlzLnBlbmRpbmc9MCx0aGlzLndyYXA9MCx0aGlzLmd6aGVhZD1udWxsLHRoaXMuZ3ppbmRleD0wLHRoaXMubWV0aG9kPXEsdGhpcy5sYXN0X2ZsdXNoPS0xLHRoaXMud19zaXplPTAsdGhpcy53X2JpdHM9MCx0aGlzLndfbWFzaz0wLHRoaXMud2luZG93PW51bGwsdGhpcy53aW5kb3dfc2l6ZT0wLHRoaXMucHJldj1udWxsLHRoaXMuaGVhZD1udWxsLHRoaXMuaW5zX2g9MCx0aGlzLmhhc2hfc2l6ZT0wLHRoaXMuaGFzaF9iaXRzPTAsdGhpcy5oYXNoX21hc2s9MCx0aGlzLmhhc2hfc2hpZnQ9MCx0aGlzLmJsb2NrX3N0YXJ0PTAsdGhpcy5tYXRjaF9sZW5ndGg9MCx0aGlzLnByZXZfbWF0Y2g9MCx0aGlzLm1hdGNoX2F2YWlsYWJsZT0wLHRoaXMuc3Ryc3RhcnQ9MCx0aGlzLm1hdGNoX3N0YXJ0PTAsdGhpcy5sb29rYWhlYWQ9MCx0aGlzLnByZXZfbGVuZ3RoPTAsdGhpcy5tYXhfY2hhaW5fbGVuZ3RoPTAsdGhpcy5tYXhfbGF6eV9tYXRjaD0wLHRoaXMubGV2ZWw9MCx0aGlzLnN0cmF0ZWd5PTAsdGhpcy5nb29kX21hdGNoPTAsdGhpcy5uaWNlX21hdGNoPTAsdGhpcy5keW5fbHRyZWU9bmV3IHouQnVmMTYoMiokKSx0aGlzLmR5bl9kdHJlZT1uZXcgei5CdWYxNigyKigyKlErMSkpLHRoaXMuYmxfdHJlZT1uZXcgei5CdWYxNigyKigyKlYrMSkpLHIodGhpcy5keW5fbHRyZWUpLHIodGhpcy5keW5fZHRyZWUpLHIodGhpcy5ibF90cmVlKSx0aGlzLmxfZGVzYz1udWxsLHRoaXMuZF9kZXNjPW51bGwsdGhpcy5ibF9kZXNjPW51bGwsdGhpcy5ibF9jb3VudD1uZXcgei5CdWYxNih0dCsxKSx0aGlzLmhlYXA9bmV3IHouQnVmMTYoMipKKzEpLHIodGhpcy5oZWFwKSx0aGlzLmhlYXBfbGVuPTAsdGhpcy5oZWFwX21heD0wLHRoaXMuZGVwdGg9bmV3IHouQnVmMTYoMipKKzEpLHIodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gdih0KXt2YXIgZTtyZXR1cm4gdCYmdC5zdGF0ZT8odC50b3RhbF9pbj10LnRvdGFsX291dD0wLHQuZGF0YV90eXBlPVksZT10LnN0YXRlLGUucGVuZGluZz0wLGUucGVuZGluZ19vdXQ9MCxlLndyYXA8MCYmKGUud3JhcD0tZS53cmFwKSxlLnN0YXR1cz1lLndyYXA/cnQ6ZHQsdC5hZGxlcj0yPT09ZS53cmFwPzA6MSxlLmxhc3RfZmx1c2g9WixCLl90cl9pbml0KGUpLEQpOmkodCxVKX1mdW5jdGlvbiBrKHQpe3ZhciBlPXYodCk7cmV0dXJuIGU9PT1EJiZ3KHQuc3RhdGUpLGV9ZnVuY3Rpb24geSh0LGUsYSxuLHIscyl7aWYoIXQpcmV0dXJuIFU7dmFyIG89MTtpZihlPT09TCYmKGU9NiksbjwwPyhvPTAsbj0tbik6bj4xNSYmKG89MixuLT0xNikscjwxfHxyPkd8fGEhPT1xfHxuPDh8fG4+MTV8fGU8MHx8ZT45fHxzPDB8fHM+TSlyZXR1cm4gaSh0LFUpOzg9PT1uJiYobj05KTt2YXIgbD1uZXcgcDtyZXR1cm4gdC5zdGF0ZT1sLGwuc3RybT10LGwud3JhcD1vLGwuZ3poZWFkPW51bGwsbC53X2JpdHM9bixsLndfc2l6ZT0xPDxsLndfYml0cyxsLndfbWFzaz1sLndfc2l6ZS0xLGwuaGFzaF9iaXRzPXIrNyxsLmhhc2hfc2l6ZT0xPDxsLmhhc2hfYml0cyxsLmhhc2hfbWFzaz1sLmhhc2hfc2l6ZS0xLGwuaGFzaF9zaGlmdD1+figobC5oYXNoX2JpdHMrZXQtMSkvZXQpLGwud2luZG93PW5ldyB6LkJ1ZjgoMipsLndfc2l6ZSksbC5oZWFkPW5ldyB6LkJ1ZjE2KGwuaGFzaF9zaXplKSxsLnByZXY9bmV3IHouQnVmMTYobC53X3NpemUpLGwubGl0X2J1ZnNpemU9MTw8cis2LGwucGVuZGluZ19idWZfc2l6ZT00KmwubGl0X2J1ZnNpemUsbC5wZW5kaW5nX2J1Zj1uZXcgei5CdWY4KGwucGVuZGluZ19idWZfc2l6ZSksbC5kX2J1Zj0xKmwubGl0X2J1ZnNpemUsbC5sX2J1Zj0zKmwubGl0X2J1ZnNpemUsbC5sZXZlbD1lLGwuc3RyYXRlZ3k9cyxsLm1ldGhvZD1hLGsodCl9dmFyIHgsej10KCIuLi91dGlscy9jb21tb24iKSxCPXQoIi4vdHJlZXMiKSxTPXQoIi4vYWRsZXIzMiIpLEU9dCgiLi9jcmMzMiIpLEE9dCgiLi9tZXNzYWdlcyIpLFo9MCxSPTEsQz0zLE49NCxPPTUsRD0wLEk9MSxVPS0yLFQ9LTMsRj0tNSxMPS0xLEg9MSxqPTIsSz0zLE09NCxQPTAsWT0yLHE9OCxHPTksWD0xNSxXPTgsSj0yODYsUT0zMCxWPTE5LCQ9MipKKzEsdHQ9MTUsZXQ9MyxhdD0yNTgsaXQ9YXQrZXQrMSxudD0zMixydD00MixzdD02OSxvdD03MyxsdD05MSxodD0xMDMsZHQ9MTEzLGZ0PTY2NixfdD0xLHV0PTIsY3Q9MyxidD00LGd0PTM7eD1bbmV3IG0oMCwwLDAsMCxmdW5jdGlvbih0LGUpe3ZhciBhPTY1NTM1O2ZvcihhPnQucGVuZGluZ19idWZfc2l6ZS01JiYoYT10LnBlbmRpbmdfYnVmX3NpemUtNSk7Oyl7aWYodC5sb29rYWhlYWQ8PTEpe2lmKF8odCksMD09PXQubG9va2FoZWFkJiZlPT09WilyZXR1cm4gX3Q7aWYoMD09PXQubG9va2FoZWFkKWJyZWFrfXQuc3Ryc3RhcnQrPXQubG9va2FoZWFkLHQubG9va2FoZWFkPTA7dmFyIGk9dC5ibG9ja19zdGFydCthO2lmKCgwPT09dC5zdHJzdGFydHx8dC5zdHJzdGFydD49aSkmJih0Lmxvb2thaGVhZD10LnN0cnN0YXJ0LWksdC5zdHJzdGFydD1pLG8odCwhMSksMD09PXQuc3RybS5hdmFpbF9vdXQpKXJldHVybiBfdDtpZih0LnN0cnN0YXJ0LXQuYmxvY2tfc3RhcnQ+PXQud19zaXplLWl0JiYobyh0LCExKSwwPT09dC5zdHJtLmF2YWlsX291dCkpcmV0dXJuIF90fXJldHVybiB0Lmluc2VydD0wLGU9PT1OPyhvKHQsITApLDA9PT10LnN0cm0uYXZhaWxfb3V0P2N0OmJ0KToodC5zdHJzdGFydD50LmJsb2NrX3N0YXJ0JiYobyh0LCExKSx0LnN0cm0uYXZhaWxfb3V0KSxfdCl9KSxuZXcgbSg0LDQsOCw0LHUpLG5ldyBtKDQsNSwxNiw4LHUpLG5ldyBtKDQsNiwzMiwzMix1KSxuZXcgbSg0LDQsMTYsMTYsYyksbmV3IG0oOCwxNiwzMiwzMixjKSxuZXcgbSg4LDE2LDEyOCwxMjgsYyksbmV3IG0oOCwzMiwxMjgsMjU2LGMpLG5ldyBtKDMyLDEyOCwyNTgsMTAyNCxjKSxuZXcgbSgzMiwyNTgsMjU4LDQwOTYsYyldLGEuZGVmbGF0ZUluaXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4geSh0LGUscSxYLFcsUCl9LGEuZGVmbGF0ZUluaXQyPXksYS5kZWZsYXRlUmVzZXQ9ayxhLmRlZmxhdGVSZXNldEtlZXA9dixhLmRlZmxhdGVTZXRIZWFkZXI9ZnVuY3Rpb24odCxlKXtyZXR1cm4gdCYmdC5zdGF0ZT8yIT09dC5zdGF0ZS53cmFwP1U6KHQuc3RhdGUuZ3poZWFkPWUsRCk6VX0sYS5kZWZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIGEsbyxkLGY7aWYoIXR8fCF0LnN0YXRlfHxlPk98fGU8MClyZXR1cm4gdD9pKHQsVSk6VTtpZihvPXQuc3RhdGUsIXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW58fG8uc3RhdHVzPT09ZnQmJmUhPT1OKXJldHVybiBpKHQsMD09PXQuYXZhaWxfb3V0P0Y6VSk7aWYoby5zdHJtPXQsYT1vLmxhc3RfZmx1c2gsby5sYXN0X2ZsdXNoPWUsby5zdGF0dXM9PT1ydClpZigyPT09by53cmFwKXQuYWRsZXI9MCxsKG8sMzEpLGwobywxMzkpLGwobyw4KSxvLmd6aGVhZD8obChvLChvLmd6aGVhZC50ZXh0PzE6MCkrKG8uZ3poZWFkLmhjcmM/MjowKSsoby5nemhlYWQuZXh0cmE/NDowKSsoby5nemhlYWQubmFtZT84OjApKyhvLmd6aGVhZC5jb21tZW50PzE2OjApKSxsKG8sMjU1Jm8uZ3poZWFkLnRpbWUpLGwobyxvLmd6aGVhZC50aW1lPj44JjI1NSksbChvLG8uZ3poZWFkLnRpbWU+PjE2JjI1NSksbChvLG8uZ3poZWFkLnRpbWU+PjI0JjI1NSksbChvLDk9PT1vLmxldmVsPzI6by5zdHJhdGVneT49anx8by5sZXZlbDwyPzQ6MCksbChvLDI1NSZvLmd6aGVhZC5vcyksby5nemhlYWQuZXh0cmEmJm8uZ3poZWFkLmV4dHJhLmxlbmd0aCYmKGwobywyNTUmby5nemhlYWQuZXh0cmEubGVuZ3RoKSxsKG8sby5nemhlYWQuZXh0cmEubGVuZ3RoPj44JjI1NSkpLG8uZ3poZWFkLmhjcmMmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZywwKSksby5nemluZGV4PTAsby5zdGF0dXM9c3QpOihsKG8sMCksbChvLDApLGwobywwKSxsKG8sMCksbChvLDApLGwobyw5PT09by5sZXZlbD8yOm8uc3RyYXRlZ3k+PWp8fG8ubGV2ZWw8Mj80OjApLGwobyxndCksby5zdGF0dXM9ZHQpO2Vsc2V7dmFyIF89cSsoby53X2JpdHMtODw8NCk8PDg7X3w9KG8uc3RyYXRlZ3k+PWp8fG8ubGV2ZWw8Mj8wOm8ubGV2ZWw8Nj8xOjY9PT1vLmxldmVsPzI6Myk8PDYsMCE9PW8uc3Ryc3RhcnQmJihffD1udCksXys9MzEtXyUzMSxvLnN0YXR1cz1kdCxoKG8sXyksMCE9PW8uc3Ryc3RhcnQmJihoKG8sdC5hZGxlcj4+PjE2KSxoKG8sNjU1MzUmdC5hZGxlcikpLHQuYWRsZXI9MX1pZihvLnN0YXR1cz09PXN0KWlmKG8uZ3poZWFkLmV4dHJhKXtmb3IoZD1vLnBlbmRpbmc7by5nemluZGV4PCg2NTUzNSZvLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoby5wZW5kaW5nIT09by5wZW5kaW5nX2J1Zl9zaXplfHwoby5nemhlYWQuaGNyYyYmby5wZW5kaW5nPmQmJih0LmFkbGVyPUUodC5hZGxlcixvLnBlbmRpbmdfYnVmLG8ucGVuZGluZy1kLGQpKSxzKHQpLGQ9by5wZW5kaW5nLG8ucGVuZGluZyE9PW8ucGVuZGluZ19idWZfc2l6ZSkpOylsKG8sMjU1Jm8uZ3poZWFkLmV4dHJhW28uZ3ppbmRleF0pLG8uZ3ppbmRleCsrO28uZ3poZWFkLmhjcmMmJm8ucGVuZGluZz5kJiYodC5hZGxlcj1FKHQuYWRsZXIsby5wZW5kaW5nX2J1ZixvLnBlbmRpbmctZCxkKSksby5nemluZGV4PT09by5nemhlYWQuZXh0cmEubGVuZ3RoJiYoby5nemluZGV4PTAsby5zdGF0dXM9b3QpfWVsc2Ugby5zdGF0dXM9b3Q7aWYoby5zdGF0dXM9PT1vdClpZihvLmd6aGVhZC5uYW1lKXtkPW8ucGVuZGluZztkb3tpZihvLnBlbmRpbmc9PT1vLnBlbmRpbmdfYnVmX3NpemUmJihvLmd6aGVhZC5oY3JjJiZvLnBlbmRpbmc+ZCYmKHQuYWRsZXI9RSh0LmFkbGVyLG8ucGVuZGluZ19idWYsby5wZW5kaW5nLWQsZCkpLHModCksZD1vLnBlbmRpbmcsby5wZW5kaW5nPT09by5wZW5kaW5nX2J1Zl9zaXplKSl7Zj0xO2JyZWFrfWY9by5nemluZGV4PG8uZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZvLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoby5nemluZGV4KyspOjAsbChvLGYpfXdoaWxlKDAhPT1mKTtvLmd6aGVhZC5oY3JjJiZvLnBlbmRpbmc+ZCYmKHQuYWRsZXI9RSh0LmFkbGVyLG8ucGVuZGluZ19idWYsby5wZW5kaW5nLWQsZCkpLDA9PT1mJiYoby5nemluZGV4PTAsby5zdGF0dXM9bHQpfWVsc2Ugby5zdGF0dXM9bHQ7aWYoby5zdGF0dXM9PT1sdClpZihvLmd6aGVhZC5jb21tZW50KXtkPW8ucGVuZGluZztkb3tpZihvLnBlbmRpbmc9PT1vLnBlbmRpbmdfYnVmX3NpemUmJihvLmd6aGVhZC5oY3JjJiZvLnBlbmRpbmc+ZCYmKHQuYWRsZXI9RSh0LmFkbGVyLG8ucGVuZGluZ19idWYsby5wZW5kaW5nLWQsZCkpLHModCksZD1vLnBlbmRpbmcsby5wZW5kaW5nPT09by5wZW5kaW5nX2J1Zl9zaXplKSl7Zj0xO2JyZWFrfWY9by5nemluZGV4PG8uZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZvLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoby5nemluZGV4KyspOjAsbChvLGYpfXdoaWxlKDAhPT1mKTtvLmd6aGVhZC5oY3JjJiZvLnBlbmRpbmc+ZCYmKHQuYWRsZXI9RSh0LmFkbGVyLG8ucGVuZGluZ19idWYsby5wZW5kaW5nLWQsZCkpLDA9PT1mJiYoby5zdGF0dXM9aHQpfWVsc2Ugby5zdGF0dXM9aHQ7aWYoby5zdGF0dXM9PT1odCYmKG8uZ3poZWFkLmhjcmM/KG8ucGVuZGluZysyPm8ucGVuZGluZ19idWZfc2l6ZSYmcyh0KSxvLnBlbmRpbmcrMjw9by5wZW5kaW5nX2J1Zl9zaXplJiYobChvLDI1NSZ0LmFkbGVyKSxsKG8sdC5hZGxlcj4+OCYyNTUpLHQuYWRsZXI9MCxvLnN0YXR1cz1kdCkpOm8uc3RhdHVzPWR0KSwwIT09by5wZW5kaW5nKXtpZihzKHQpLDA9PT10LmF2YWlsX291dClyZXR1cm4gby5sYXN0X2ZsdXNoPS0xLER9ZWxzZSBpZigwPT09dC5hdmFpbF9pbiYmbihlKTw9bihhKSYmZSE9PU4pcmV0dXJuIGkodCxGKTtpZihvLnN0YXR1cz09PWZ0JiYwIT09dC5hdmFpbF9pbilyZXR1cm4gaSh0LEYpO2lmKDAhPT10LmF2YWlsX2lufHwwIT09by5sb29rYWhlYWR8fGUhPT1aJiZvLnN0YXR1cyE9PWZ0KXt2YXIgdT1vLnN0cmF0ZWd5PT09aj9nKG8sZSk6by5zdHJhdGVneT09PUs/YihvLGUpOnhbby5sZXZlbF0uZnVuYyhvLGUpO2lmKHUhPT1jdCYmdSE9PWJ0fHwoby5zdGF0dXM9ZnQpLHU9PT1fdHx8dT09PWN0KXJldHVybiAwPT09dC5hdmFpbF9vdXQmJihvLmxhc3RfZmx1c2g9LTEpLEQ7aWYodT09PXV0JiYoZT09PVI/Qi5fdHJfYWxpZ24obyk6ZSE9PU8mJihCLl90cl9zdG9yZWRfYmxvY2sobywwLDAsITEpLGU9PT1DJiYocihvLmhlYWQpLDA9PT1vLmxvb2thaGVhZCYmKG8uc3Ryc3RhcnQ9MCxvLmJsb2NrX3N0YXJ0PTAsby5pbnNlcnQ9MCkpKSxzKHQpLDA9PT10LmF2YWlsX291dCkpcmV0dXJuIG8ubGFzdF9mbHVzaD0tMSxEfXJldHVybiBlIT09Tj9EOm8ud3JhcDw9MD9JOigyPT09by53cmFwPyhsKG8sMjU1JnQuYWRsZXIpLGwobyx0LmFkbGVyPj44JjI1NSksbChvLHQuYWRsZXI+PjE2JjI1NSksbChvLHQuYWRsZXI+PjI0JjI1NSksbChvLDI1NSZ0LnRvdGFsX2luKSxsKG8sdC50b3RhbF9pbj4+OCYyNTUpLGwobyx0LnRvdGFsX2luPj4xNiYyNTUpLGwobyx0LnRvdGFsX2luPj4yNCYyNTUpKTooaChvLHQuYWRsZXI+Pj4xNiksaChvLDY1NTM1JnQuYWRsZXIpKSxzKHQpLG8ud3JhcD4wJiYoby53cmFwPS1vLndyYXApLDAhPT1vLnBlbmRpbmc/RDpJKX0sYS5kZWZsYXRlRW5kPWZ1bmN0aW9uKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUuc3RhdHVzKSE9PXJ0JiZlIT09c3QmJmUhPT1vdCYmZSE9PWx0JiZlIT09aHQmJmUhPT1kdCYmZSE9PWZ0P2kodCxVKToodC5zdGF0ZT1udWxsLGU9PT1kdD9pKHQsVCk6RCk6VX0sYS5kZWZsYXRlU2V0RGljdGlvbmFyeT1mdW5jdGlvbih0LGUpe3ZhciBhLGksbixzLG8sbCxoLGQsZj1lLmxlbmd0aDtpZighdHx8IXQuc3RhdGUpcmV0dXJuIFU7aWYoYT10LnN0YXRlLDI9PT0ocz1hLndyYXApfHwxPT09cyYmYS5zdGF0dXMhPT1ydHx8YS5sb29rYWhlYWQpcmV0dXJuIFU7Zm9yKDE9PT1zJiYodC5hZGxlcj1TKHQuYWRsZXIsZSxmLDApKSxhLndyYXA9MCxmPj1hLndfc2l6ZSYmKDA9PT1zJiYocihhLmhlYWQpLGEuc3Ryc3RhcnQ9MCxhLmJsb2NrX3N0YXJ0PTAsYS5pbnNlcnQ9MCksZD1uZXcgei5CdWY4KGEud19zaXplKSx6LmFycmF5U2V0KGQsZSxmLWEud19zaXplLGEud19zaXplLDApLGU9ZCxmPWEud19zaXplKSxvPXQuYXZhaWxfaW4sbD10Lm5leHRfaW4saD10LmlucHV0LHQuYXZhaWxfaW49Zix0Lm5leHRfaW49MCx0LmlucHV0PWUsXyhhKTthLmxvb2thaGVhZD49ZXQ7KXtpPWEuc3Ryc3RhcnQsbj1hLmxvb2thaGVhZC0oZXQtMSk7ZG97YS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2krZXQtMV0pJmEuaGFzaF9tYXNrLGEucHJldltpJmEud19tYXNrXT1hLmhlYWRbYS5pbnNfaF0sYS5oZWFkW2EuaW5zX2hdPWksaSsrfXdoaWxlKC0tbik7YS5zdHJzdGFydD1pLGEubG9va2FoZWFkPWV0LTEsXyhhKX1yZXR1cm4gYS5zdHJzdGFydCs9YS5sb29rYWhlYWQsYS5ibG9ja19zdGFydD1hLnN0cnN0YXJ0LGEuaW5zZXJ0PWEubG9va2FoZWFkLGEubG9va2FoZWFkPTAsYS5tYXRjaF9sZW5ndGg9YS5wcmV2X2xlbmd0aD1ldC0xLGEubWF0Y2hfYXZhaWxhYmxlPTAsdC5uZXh0X2luPWwsdC5pbnB1dD1oLHQuYXZhaWxfaW49byxhLndyYXA9cyxEfSxhLmRlZmxhdGVJbmZvPSJwYWtvIGRlZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjMsIi4vYWRsZXIzMiI6NSwiLi9jcmMzMiI6NywiLi9tZXNzYWdlcyI6MTMsIi4vdHJlZXMiOjE0fV0sOTpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt0aGlzLnRleHQ9MCx0aGlzLnRpbWU9MCx0aGlzLnhmbGFncz0wLHRoaXMub3M9MCx0aGlzLmV4dHJhPW51bGwsdGhpcy5leHRyYV9sZW49MCx0aGlzLm5hbWU9IiIsdGhpcy5jb21tZW50PSIiLHRoaXMuaGNyYz0wLHRoaXMuZG9uZT0hMX19LHt9XSwxMDpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24odCxlKXt2YXIgYSxpLG4scixzLG8sbCxoLGQsZixfLHUsYyxiLGcsbSx3LHAsdixrLHkseCx6LEIsUzthPXQuc3RhdGUsaT10Lm5leHRfaW4sQj10LmlucHV0LG49aSsodC5hdmFpbF9pbi01KSxyPXQubmV4dF9vdXQsUz10Lm91dHB1dCxzPXItKGUtdC5hdmFpbF9vdXQpLG89cisodC5hdmFpbF9vdXQtMjU3KSxsPWEuZG1heCxoPWEud3NpemUsZD1hLndoYXZlLGY9YS53bmV4dCxfPWEud2luZG93LHU9YS5ob2xkLGM9YS5iaXRzLGI9YS5sZW5jb2RlLGc9YS5kaXN0Y29kZSxtPSgxPDxhLmxlbmJpdHMpLTEsdz0oMTw8YS5kaXN0Yml0cyktMTt0OmRve2M8MTUmJih1Kz1CW2krK108PGMsYys9OCx1Kz1CW2krK108PGMsYys9OCkscD1iW3UmbV07ZTpmb3IoOzspe2lmKHY9cD4+PjI0LHU+Pj49dixjLT12LDA9PT0odj1wPj4+MTYmMjU1KSlTW3IrK109NjU1MzUmcDtlbHNle2lmKCEoMTYmdikpe2lmKDA9PSg2NCZ2KSl7cD1iWyg2NTUzNSZwKSsodSYoMTw8diktMSldO2NvbnRpbnVlIGV9aWYoMzImdil7YS5tb2RlPTEyO2JyZWFrIHR9dC5tc2c9ImludmFsaWQgbGl0ZXJhbC9sZW5ndGggY29kZSIsYS5tb2RlPTMwO2JyZWFrIHR9az02NTUzNSZwLCh2Jj0xNSkmJihjPHYmJih1Kz1CW2krK108PGMsYys9OCksays9dSYoMTw8diktMSx1Pj4+PXYsYy09diksYzwxNSYmKHUrPUJbaSsrXTw8YyxjKz04LHUrPUJbaSsrXTw8YyxjKz04KSxwPWdbdSZ3XTthOmZvcig7Oyl7aWYodj1wPj4+MjQsdT4+Pj12LGMtPXYsISgxNiYodj1wPj4+MTYmMjU1KSkpe2lmKDA9PSg2NCZ2KSl7cD1nWyg2NTUzNSZwKSsodSYoMTw8diktMSldO2NvbnRpbnVlIGF9dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgY29kZSIsYS5tb2RlPTMwO2JyZWFrIHR9aWYoeT02NTUzNSZwLHYmPTE1LGM8diYmKHUrPUJbaSsrXTw8YywoYys9OCk8diYmKHUrPUJbaSsrXTw8YyxjKz04KSksKHkrPXUmKDE8PHYpLTEpPmwpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYS5tb2RlPTMwO2JyZWFrIHR9aWYodT4+Pj12LGMtPXYsdj1yLXMseT52KXtpZigodj15LXYpPmQmJmEuc2FuZSl7dC5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixhLm1vZGU9MzA7YnJlYWsgdH1pZih4PTAsej1fLDA9PT1mKXtpZih4Kz1oLXYsdjxrKXtrLT12O2Rve1NbcisrXT1fW3grK119d2hpbGUoLS12KTt4PXIteSx6PVN9fWVsc2UgaWYoZjx2KXtpZih4Kz1oK2Ytdiwodi09Zik8ayl7ay09djtkb3tTW3IrK109X1t4KytdfXdoaWxlKC0tdik7aWYoeD0wLGY8ayl7ay09dj1mO2Rve1NbcisrXT1fW3grK119d2hpbGUoLS12KTt4PXIteSx6PVN9fX1lbHNlIGlmKHgrPWYtdix2PGspe2stPXY7ZG97U1tyKytdPV9beCsrXX13aGlsZSgtLXYpO3g9ci15LHo9U31mb3IoO2s+MjspU1tyKytdPXpbeCsrXSxTW3IrK109elt4KytdLFNbcisrXT16W3grK10say09MztrJiYoU1tyKytdPXpbeCsrXSxrPjEmJihTW3IrK109elt4KytdKSl9ZWxzZXt4PXIteTtkb3tTW3IrK109U1t4KytdLFNbcisrXT1TW3grK10sU1tyKytdPVNbeCsrXSxrLT0zfXdoaWxlKGs+Mik7ayYmKFNbcisrXT1TW3grK10saz4xJiYoU1tyKytdPVNbeCsrXSkpfWJyZWFrfX1icmVha319d2hpbGUoaTxuJiZyPG8pO2ktPWs9Yz4+Myx1Jj0oMTw8KGMtPWs8PDMpKS0xLHQubmV4dF9pbj1pLHQubmV4dF9vdXQ9cix0LmF2YWlsX2luPWk8bj9uLWkrNTo1LShpLW4pLHQuYXZhaWxfb3V0PXI8bz9vLXIrMjU3OjI1Ny0oci1vKSxhLmhvbGQ9dSxhLmJpdHM9Y319LHt9XSwxMTpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBpKHQpe3JldHVybih0Pj4+MjQmMjU1KSsodD4+PjgmNjUyODApKygoNjUyODAmdCk8PDgpKygoMjU1JnQpPDwyNCl9ZnVuY3Rpb24gbigpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgdS5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgdS5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiByKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUsdC50b3RhbF9pbj10LnRvdGFsX291dD1lLnRvdGFsPTAsdC5tc2c9IiIsZS53cmFwJiYodC5hZGxlcj0xJmUud3JhcCksZS5tb2RlPU4sZS5sYXN0PTAsZS5oYXZlZGljdD0wLGUuZG1heD0zMjc2OCxlLmhlYWQ9bnVsbCxlLmhvbGQ9MCxlLmJpdHM9MCxlLmxlbmNvZGU9ZS5sZW5keW49bmV3IHUuQnVmMzIoZHQpLGUuZGlzdGNvZGU9ZS5kaXN0ZHluPW5ldyB1LkJ1ZjMyKGZ0KSxlLnNhbmU9MSxlLmJhY2s9LTEseik6RX1mdW5jdGlvbiBzKHQpe3ZhciBlO3JldHVybiB0JiZ0LnN0YXRlPyhlPXQuc3RhdGUsZS53c2l6ZT0wLGUud2hhdmU9MCxlLnduZXh0PTAscih0KSk6RX1mdW5jdGlvbiBvKHQsZSl7dmFyIGEsaTtyZXR1cm4gdCYmdC5zdGF0ZT8oaT10LnN0YXRlLGU8MD8oYT0wLGU9LWUpOihhPTErKGU+PjQpLGU8NDgmJihlJj0xNSkpLGUmJihlPDh8fGU+MTUpP0U6KG51bGwhPT1pLndpbmRvdyYmaS53Yml0cyE9PWUmJihpLndpbmRvdz1udWxsKSxpLndyYXA9YSxpLndiaXRzPWUscyh0KSkpOkV9ZnVuY3Rpb24gbCh0LGUpe3ZhciBhLGk7cmV0dXJuIHQ/KGk9bmV3IG4sdC5zdGF0ZT1pLGkud2luZG93PW51bGwsKGE9byh0LGUpKSE9PXomJih0LnN0YXRlPW51bGwpLGEpOkV9ZnVuY3Rpb24gaCh0KXtpZih1dCl7dmFyIGU7Zm9yKGY9bmV3IHUuQnVmMzIoNTEyKSxfPW5ldyB1LkJ1ZjMyKDMyKSxlPTA7ZTwxNDQ7KXQubGVuc1tlKytdPTg7Zm9yKDtlPDI1NjspdC5sZW5zW2UrK109OTtmb3IoO2U8MjgwOyl0LmxlbnNbZSsrXT03O2Zvcig7ZTwyODg7KXQubGVuc1tlKytdPTg7Zm9yKG0ocCx0LmxlbnMsMCwyODgsZiwwLHQud29yayx7Yml0czo5fSksZT0wO2U8MzI7KXQubGVuc1tlKytdPTU7bSh2LHQubGVucywwLDMyLF8sMCx0Lndvcmsse2JpdHM6NX0pLHV0PSExfXQubGVuY29kZT1mLHQubGVuYml0cz05LHQuZGlzdGNvZGU9Xyx0LmRpc3RiaXRzPTV9ZnVuY3Rpb24gZCh0LGUsYSxpKXt2YXIgbixyPXQuc3RhdGU7cmV0dXJuIG51bGw9PT1yLndpbmRvdyYmKHIud3NpemU9MTw8ci53Yml0cyxyLnduZXh0PTAsci53aGF2ZT0wLHIud2luZG93PW5ldyB1LkJ1Zjgoci53c2l6ZSkpLGk+PXIud3NpemU/KHUuYXJyYXlTZXQoci53aW5kb3csZSxhLXIud3NpemUsci53c2l6ZSwwKSxyLnduZXh0PTAsci53aGF2ZT1yLndzaXplKTooKG49ci53c2l6ZS1yLnduZXh0KT5pJiYobj1pKSx1LmFycmF5U2V0KHIud2luZG93LGUsYS1pLG4sci53bmV4dCksKGktPW4pPyh1LmFycmF5U2V0KHIud2luZG93LGUsYS1pLGksMCksci53bmV4dD1pLHIud2hhdmU9ci53c2l6ZSk6KHIud25leHQrPW4sci53bmV4dD09PXIud3NpemUmJihyLnduZXh0PTApLHIud2hhdmU8ci53c2l6ZSYmKHIud2hhdmUrPW4pKSksMH12YXIgZixfLHU9dCgiLi4vdXRpbHMvY29tbW9uIiksYz10KCIuL2FkbGVyMzIiKSxiPXQoIi4vY3JjMzIiKSxnPXQoIi4vaW5mZmFzdCIpLG09dCgiLi9pbmZ0cmVlcyIpLHc9MCxwPTEsdj0yLGs9NCx5PTUseD02LHo9MCxCPTEsUz0yLEU9LTIsQT0tMyxaPS00LFI9LTUsQz04LE49MSxPPTIsRD0zLEk9NCxVPTUsVD02LEY9NyxMPTgsSD05LGo9MTAsSz0xMSxNPTEyLFA9MTMsWT0xNCxxPTE1LEc9MTYsWD0xNyxXPTE4LEo9MTksUT0yMCxWPTIxLCQ9MjIsdHQ9MjMsZXQ9MjQsYXQ9MjUsaXQ9MjYsbnQ9MjcscnQ9Mjgsc3Q9Mjksb3Q9MzAsbHQ9MzEsaHQ9MzIsZHQ9ODUyLGZ0PTU5MixfdD0xNSx1dD0hMDthLmluZmxhdGVSZXNldD1zLGEuaW5mbGF0ZVJlc2V0Mj1vLGEuaW5mbGF0ZVJlc2V0S2VlcD1yLGEuaW5mbGF0ZUluaXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGwodCxfdCl9LGEuaW5mbGF0ZUluaXQyPWwsYS5pbmZsYXRlPWZ1bmN0aW9uKHQsZSl7dmFyIGEsbixyLHMsbyxsLGYsXyxkdCxmdCxfdCx1dCxjdCxidCxndCxtdCx3dCxwdCx2dCxrdCx5dCx4dCx6dCxCdCxTdD0wLEV0PW5ldyB1LkJ1ZjgoNCksQXQ9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdO2lmKCF0fHwhdC5zdGF0ZXx8IXQub3V0cHV0fHwhdC5pbnB1dCYmMCE9PXQuYXZhaWxfaW4pcmV0dXJuIEU7KGE9dC5zdGF0ZSkubW9kZT09PU0mJihhLm1vZGU9UCksbz10Lm5leHRfb3V0LHI9dC5vdXRwdXQsZj10LmF2YWlsX291dCxzPXQubmV4dF9pbixuPXQuaW5wdXQsbD10LmF2YWlsX2luLF89YS5ob2xkLGR0PWEuYml0cyxmdD1sLF90PWYseHQ9ejt0OmZvcig7Oylzd2l0Y2goYS5tb2RlKXtjYXNlIE46aWYoMD09PWEud3JhcCl7YS5tb2RlPVA7YnJlYWt9Zm9yKDtkdDwxNjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYoMiZhLndyYXAmJjM1NjE1PT09Xyl7YS5jaGVjaz0wLEV0WzBdPTI1NSZfLEV0WzFdPV8+Pj44JjI1NSxhLmNoZWNrPWIoYS5jaGVjayxFdCwyLDApLF89MCxkdD0wLGEubW9kZT1PO2JyZWFrfWlmKGEuZmxhZ3M9MCxhLmhlYWQmJihhLmhlYWQuZG9uZT0hMSksISgxJmEud3JhcCl8fCgoKDI1NSZfKTw8OCkrKF8+PjgpKSUzMSl7dC5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLGEubW9kZT1vdDticmVha31pZigoMTUmXykhPT1DKXt0Lm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLGEubW9kZT1vdDticmVha31pZihfPj4+PTQsZHQtPTQseXQ9OCsoMTUmXyksMD09PWEud2JpdHMpYS53Yml0cz15dDtlbHNlIGlmKHl0PmEud2JpdHMpe3QubXNnPSJpbnZhbGlkIHdpbmRvdyBzaXplIixhLm1vZGU9b3Q7YnJlYWt9YS5kbWF4PTE8PHl0LHQuYWRsZXI9YS5jaGVjaz0xLGEubW9kZT01MTImXz9qOk0sXz0wLGR0PTA7YnJlYWs7Y2FzZSBPOmZvcig7ZHQ8MTY7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKGEuZmxhZ3M9XywoMjU1JmEuZmxhZ3MpIT09Qyl7dC5tc2c9InVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIixhLm1vZGU9b3Q7YnJlYWt9aWYoNTczNDQmYS5mbGFncyl7dC5tc2c9InVua25vd24gaGVhZGVyIGZsYWdzIHNldCIsYS5tb2RlPW90O2JyZWFrfWEuaGVhZCYmKGEuaGVhZC50ZXh0PV8+PjgmMSksNTEyJmEuZmxhZ3MmJihFdFswXT0yNTUmXyxFdFsxXT1fPj4+OCYyNTUsYS5jaGVjaz1iKGEuY2hlY2ssRXQsMiwwKSksXz0wLGR0PTAsYS5tb2RlPUQ7Y2FzZSBEOmZvcig7ZHQ8MzI7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEuaGVhZCYmKGEuaGVhZC50aW1lPV8pLDUxMiZhLmZsYWdzJiYoRXRbMF09MjU1Jl8sRXRbMV09Xz4+PjgmMjU1LEV0WzJdPV8+Pj4xNiYyNTUsRXRbM109Xz4+PjI0JjI1NSxhLmNoZWNrPWIoYS5jaGVjayxFdCw0LDApKSxfPTAsZHQ9MCxhLm1vZGU9STtjYXNlIEk6Zm9yKDtkdDwxNjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9YS5oZWFkJiYoYS5oZWFkLnhmbGFncz0yNTUmXyxhLmhlYWQub3M9Xz4+OCksNTEyJmEuZmxhZ3MmJihFdFswXT0yNTUmXyxFdFsxXT1fPj4+OCYyNTUsYS5jaGVjaz1iKGEuY2hlY2ssRXQsMiwwKSksXz0wLGR0PTAsYS5tb2RlPVU7Y2FzZSBVOmlmKDEwMjQmYS5mbGFncyl7Zm9yKDtkdDwxNjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9YS5sZW5ndGg9XyxhLmhlYWQmJihhLmhlYWQuZXh0cmFfbGVuPV8pLDUxMiZhLmZsYWdzJiYoRXRbMF09MjU1Jl8sRXRbMV09Xz4+PjgmMjU1LGEuY2hlY2s9YihhLmNoZWNrLEV0LDIsMCkpLF89MCxkdD0wfWVsc2UgYS5oZWFkJiYoYS5oZWFkLmV4dHJhPW51bGwpO2EubW9kZT1UO2Nhc2UgVDppZigxMDI0JmEuZmxhZ3MmJigodXQ9YS5sZW5ndGgpPmwmJih1dD1sKSx1dCYmKGEuaGVhZCYmKHl0PWEuaGVhZC5leHRyYV9sZW4tYS5sZW5ndGgsYS5oZWFkLmV4dHJhfHwoYS5oZWFkLmV4dHJhPW5ldyBBcnJheShhLmhlYWQuZXh0cmFfbGVuKSksdS5hcnJheVNldChhLmhlYWQuZXh0cmEsbixzLHV0LHl0KSksNTEyJmEuZmxhZ3MmJihhLmNoZWNrPWIoYS5jaGVjayxuLHV0LHMpKSxsLT11dCxzKz11dCxhLmxlbmd0aC09dXQpLGEubGVuZ3RoKSlicmVhayB0O2EubGVuZ3RoPTAsYS5tb2RlPUY7Y2FzZSBGOmlmKDIwNDgmYS5mbGFncyl7aWYoMD09PWwpYnJlYWsgdDt1dD0wO2Rve3l0PW5bcyt1dCsrXSxhLmhlYWQmJnl0JiZhLmxlbmd0aDw2NTUzNiYmKGEuaGVhZC5uYW1lKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHl0KSl9d2hpbGUoeXQmJnV0PGwpO2lmKDUxMiZhLmZsYWdzJiYoYS5jaGVjaz1iKGEuY2hlY2ssbix1dCxzKSksbC09dXQscys9dXQseXQpYnJlYWsgdH1lbHNlIGEuaGVhZCYmKGEuaGVhZC5uYW1lPW51bGwpO2EubGVuZ3RoPTAsYS5tb2RlPUw7Y2FzZSBMOmlmKDQwOTYmYS5mbGFncyl7aWYoMD09PWwpYnJlYWsgdDt1dD0wO2Rve3l0PW5bcyt1dCsrXSxhLmhlYWQmJnl0JiZhLmxlbmd0aDw2NTUzNiYmKGEuaGVhZC5jb21tZW50Kz1TdHJpbmcuZnJvbUNoYXJDb2RlKHl0KSl9d2hpbGUoeXQmJnV0PGwpO2lmKDUxMiZhLmZsYWdzJiYoYS5jaGVjaz1iKGEuY2hlY2ssbix1dCxzKSksbC09dXQscys9dXQseXQpYnJlYWsgdH1lbHNlIGEuaGVhZCYmKGEuaGVhZC5jb21tZW50PW51bGwpO2EubW9kZT1IO2Nhc2UgSDppZig1MTImYS5mbGFncyl7Zm9yKDtkdDwxNjspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9aWYoXyE9PSg2NTUzNSZhLmNoZWNrKSl7dC5tc2c9ImhlYWRlciBjcmMgbWlzbWF0Y2giLGEubW9kZT1vdDticmVha31fPTAsZHQ9MH1hLmhlYWQmJihhLmhlYWQuaGNyYz1hLmZsYWdzPj45JjEsYS5oZWFkLmRvbmU9ITApLHQuYWRsZXI9YS5jaGVjaz0wLGEubW9kZT1NO2JyZWFrO2Nhc2Ugajpmb3IoO2R0PDMyOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH10LmFkbGVyPWEuY2hlY2s9aShfKSxfPTAsZHQ9MCxhLm1vZGU9SztjYXNlIEs6aWYoMD09PWEuaGF2ZWRpY3QpcmV0dXJuIHQubmV4dF9vdXQ9byx0LmF2YWlsX291dD1mLHQubmV4dF9pbj1zLHQuYXZhaWxfaW49bCxhLmhvbGQ9XyxhLmJpdHM9ZHQsUzt0LmFkbGVyPWEuY2hlY2s9MSxhLm1vZGU9TTtjYXNlIE06aWYoZT09PXl8fGU9PT14KWJyZWFrIHQ7Y2FzZSBQOmlmKGEubGFzdCl7Xz4+Pj03JmR0LGR0LT03JmR0LGEubW9kZT1udDticmVha31mb3IoO2R0PDM7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fXN3aXRjaChhLmxhc3Q9MSZfLF8+Pj49MSxkdC09MSwzJl8pe2Nhc2UgMDphLm1vZGU9WTticmVhaztjYXNlIDE6aWYoaChhKSxhLm1vZGU9USxlPT09eCl7Xz4+Pj0yLGR0LT0yO2JyZWFrIHR9YnJlYWs7Y2FzZSAyOmEubW9kZT1YO2JyZWFrO2Nhc2UgMzp0Lm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixhLm1vZGU9b3R9Xz4+Pj0yLGR0LT0yO2JyZWFrO2Nhc2UgWTpmb3IoXz4+Pj03JmR0LGR0LT03JmR0O2R0PDMyOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZigoNjU1MzUmXykhPShfPj4+MTZeNjU1MzUpKXt0Lm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsYS5tb2RlPW90O2JyZWFrfWlmKGEubGVuZ3RoPTY1NTM1Jl8sXz0wLGR0PTAsYS5tb2RlPXEsZT09PXgpYnJlYWsgdDtjYXNlIHE6YS5tb2RlPUc7Y2FzZSBHOmlmKHV0PWEubGVuZ3RoKXtpZih1dD5sJiYodXQ9bCksdXQ+ZiYmKHV0PWYpLDA9PT11dClicmVhayB0O3UuYXJyYXlTZXQocixuLHMsdXQsbyksbC09dXQscys9dXQsZi09dXQsbys9dXQsYS5sZW5ndGgtPXV0O2JyZWFrfWEubW9kZT1NO2JyZWFrO2Nhc2UgWDpmb3IoO2R0PDE0Oyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZihhLm5sZW49MjU3KygzMSZfKSxfPj4+PTUsZHQtPTUsYS5uZGlzdD0xKygzMSZfKSxfPj4+PTUsZHQtPTUsYS5uY29kZT00KygxNSZfKSxfPj4+PTQsZHQtPTQsYS5ubGVuPjI4Nnx8YS5uZGlzdD4zMCl7dC5tc2c9InRvbyBtYW55IGxlbmd0aCBvciBkaXN0YW5jZSBzeW1ib2xzIixhLm1vZGU9b3Q7YnJlYWt9YS5oYXZlPTAsYS5tb2RlPVc7Y2FzZSBXOmZvcig7YS5oYXZlPGEubmNvZGU7KXtmb3IoO2R0PDM7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWEubGVuc1tBdFthLmhhdmUrK11dPTcmXyxfPj4+PTMsZHQtPTN9Zm9yKDthLmhhdmU8MTk7KWEubGVuc1tBdFthLmhhdmUrK11dPTA7aWYoYS5sZW5jb2RlPWEubGVuZHluLGEubGVuYml0cz03LHp0PXtiaXRzOmEubGVuYml0c30seHQ9bSh3LGEubGVucywwLDE5LGEubGVuY29kZSwwLGEud29yayx6dCksYS5sZW5iaXRzPXp0LmJpdHMseHQpe3QubXNnPSJpbnZhbGlkIGNvZGUgbGVuZ3RocyBzZXQiLGEubW9kZT1vdDticmVha31hLmhhdmU9MCxhLm1vZGU9SjtjYXNlIEo6Zm9yKDthLmhhdmU8YS5ubGVuK2EubmRpc3Q7KXtmb3IoO1N0PWEubGVuY29kZVtfJigxPDxhLmxlbmJpdHMpLTFdLGd0PVN0Pj4+MjQsbXQ9U3Q+Pj4xNiYyNTUsd3Q9NjU1MzUmU3QsIShndDw9ZHQpOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZih3dDwxNilfPj4+PWd0LGR0LT1ndCxhLmxlbnNbYS5oYXZlKytdPXd0O2Vsc2V7aWYoMTY9PT13dCl7Zm9yKEJ0PWd0KzI7ZHQ8QnQ7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKF8+Pj49Z3QsZHQtPWd0LDA9PT1hLmhhdmUpe3QubXNnPSJpbnZhbGlkIGJpdCBsZW5ndGggcmVwZWF0IixhLm1vZGU9b3Q7YnJlYWt9eXQ9YS5sZW5zW2EuaGF2ZS0xXSx1dD0zKygzJl8pLF8+Pj49MixkdC09Mn1lbHNlIGlmKDE3PT09d3Qpe2ZvcihCdD1ndCszO2R0PEJ0Oyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1kdC09Z3QseXQ9MCx1dD0zKyg3JihfPj4+PWd0KSksXz4+Pj0zLGR0LT0zfWVsc2V7Zm9yKEJ0PWd0Kzc7ZHQ8QnQ7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWR0LT1ndCx5dD0wLHV0PTExKygxMjcmKF8+Pj49Z3QpKSxfPj4+PTcsZHQtPTd9aWYoYS5oYXZlK3V0PmEubmxlbithLm5kaXN0KXt0Lm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsYS5tb2RlPW90O2JyZWFrfWZvcig7dXQtLTspYS5sZW5zW2EuaGF2ZSsrXT15dH19aWYoYS5tb2RlPT09b3QpYnJlYWs7aWYoMD09PWEubGVuc1syNTZdKXt0Lm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixhLm1vZGU9b3Q7YnJlYWt9aWYoYS5sZW5iaXRzPTksenQ9e2JpdHM6YS5sZW5iaXRzfSx4dD1tKHAsYS5sZW5zLDAsYS5ubGVuLGEubGVuY29kZSwwLGEud29yayx6dCksYS5sZW5iaXRzPXp0LmJpdHMseHQpe3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLGEubW9kZT1vdDticmVha31pZihhLmRpc3RiaXRzPTYsYS5kaXN0Y29kZT1hLmRpc3RkeW4senQ9e2JpdHM6YS5kaXN0Yml0c30seHQ9bSh2LGEubGVucyxhLm5sZW4sYS5uZGlzdCxhLmRpc3Rjb2RlLDAsYS53b3JrLHp0KSxhLmRpc3RiaXRzPXp0LmJpdHMseHQpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLGEubW9kZT1vdDticmVha31pZihhLm1vZGU9USxlPT09eClicmVhayB0O2Nhc2UgUTphLm1vZGU9VjtjYXNlIFY6aWYobD49NiYmZj49MjU4KXt0Lm5leHRfb3V0PW8sdC5hdmFpbF9vdXQ9Zix0Lm5leHRfaW49cyx0LmF2YWlsX2luPWwsYS5ob2xkPV8sYS5iaXRzPWR0LGcodCxfdCksbz10Lm5leHRfb3V0LHI9dC5vdXRwdXQsZj10LmF2YWlsX291dCxzPXQubmV4dF9pbixuPXQuaW5wdXQsbD10LmF2YWlsX2luLF89YS5ob2xkLGR0PWEuYml0cyxhLm1vZGU9PT1NJiYoYS5iYWNrPS0xKTticmVha31mb3IoYS5iYWNrPTA7U3Q9YS5sZW5jb2RlW18mKDE8PGEubGVuYml0cyktMV0sZ3Q9U3Q+Pj4yNCxtdD1TdD4+PjE2JjI1NSx3dD02NTUzNSZTdCwhKGd0PD1kdCk7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKG10JiYwPT0oMjQwJm10KSl7Zm9yKHB0PWd0LHZ0PW10LGt0PXd0O1N0PWEubGVuY29kZVtrdCsoKF8mKDE8PHB0K3Z0KS0xKT4+cHQpXSxndD1TdD4+PjI0LG10PVN0Pj4+MTYmMjU1LHd0PTY1NTM1JlN0LCEocHQrZ3Q8PWR0KTspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9Xz4+Pj1wdCxkdC09cHQsYS5iYWNrKz1wdH1pZihfPj4+PWd0LGR0LT1ndCxhLmJhY2srPWd0LGEubGVuZ3RoPXd0LDA9PT1tdCl7YS5tb2RlPWl0O2JyZWFrfWlmKDMyJm10KXthLmJhY2s9LTEsYS5tb2RlPU07YnJlYWt9aWYoNjQmbXQpe3QubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGEubW9kZT1vdDticmVha31hLmV4dHJhPTE1Jm10LGEubW9kZT0kO2Nhc2UgJDppZihhLmV4dHJhKXtmb3IoQnQ9YS5leHRyYTtkdDxCdDspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9YS5sZW5ndGgrPV8mKDE8PGEuZXh0cmEpLTEsXz4+Pj1hLmV4dHJhLGR0LT1hLmV4dHJhLGEuYmFjays9YS5leHRyYX1hLndhcz1hLmxlbmd0aCxhLm1vZGU9dHQ7Y2FzZSB0dDpmb3IoO1N0PWEuZGlzdGNvZGVbXyYoMTw8YS5kaXN0Yml0cyktMV0sZ3Q9U3Q+Pj4yNCxtdD1TdD4+PjE2JjI1NSx3dD02NTUzNSZTdCwhKGd0PD1kdCk7KXtpZigwPT09bClicmVhayB0O2wtLSxfKz1uW3MrK108PGR0LGR0Kz04fWlmKDA9PSgyNDAmbXQpKXtmb3IocHQ9Z3QsdnQ9bXQsa3Q9d3Q7U3Q9YS5kaXN0Y29kZVtrdCsoKF8mKDE8PHB0K3Z0KS0xKT4+cHQpXSxndD1TdD4+PjI0LG10PVN0Pj4+MTYmMjU1LHd0PTY1NTM1JlN0LCEocHQrZ3Q8PWR0KTspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9Xz4+Pj1wdCxkdC09cHQsYS5iYWNrKz1wdH1pZihfPj4+PWd0LGR0LT1ndCxhLmJhY2srPWd0LDY0Jm10KXt0Lm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixhLm1vZGU9b3Q7YnJlYWt9YS5vZmZzZXQ9d3QsYS5leHRyYT0xNSZtdCxhLm1vZGU9ZXQ7Y2FzZSBldDppZihhLmV4dHJhKXtmb3IoQnQ9YS5leHRyYTtkdDxCdDspe2lmKDA9PT1sKWJyZWFrIHQ7bC0tLF8rPW5bcysrXTw8ZHQsZHQrPTh9YS5vZmZzZXQrPV8mKDE8PGEuZXh0cmEpLTEsXz4+Pj1hLmV4dHJhLGR0LT1hLmV4dHJhLGEuYmFjays9YS5leHRyYX1pZihhLm9mZnNldD5hLmRtYXgpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYS5tb2RlPW90O2JyZWFrfWEubW9kZT1hdDtjYXNlIGF0OmlmKDA9PT1mKWJyZWFrIHQ7aWYodXQ9X3QtZixhLm9mZnNldD51dCl7aWYoKHV0PWEub2Zmc2V0LXV0KT5hLndoYXZlJiZhLnNhbmUpe3QubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYS5tb2RlPW90O2JyZWFrfXV0PmEud25leHQ/KHV0LT1hLnduZXh0LGN0PWEud3NpemUtdXQpOmN0PWEud25leHQtdXQsdXQ+YS5sZW5ndGgmJih1dD1hLmxlbmd0aCksYnQ9YS53aW5kb3d9ZWxzZSBidD1yLGN0PW8tYS5vZmZzZXQsdXQ9YS5sZW5ndGg7dXQ+ZiYmKHV0PWYpLGYtPXV0LGEubGVuZ3RoLT11dDtkb3tyW28rK109YnRbY3QrK119d2hpbGUoLS11dCk7MD09PWEubGVuZ3RoJiYoYS5tb2RlPVYpO2JyZWFrO2Nhc2UgaXQ6aWYoMD09PWYpYnJlYWsgdDtyW28rK109YS5sZW5ndGgsZi0tLGEubW9kZT1WO2JyZWFrO2Nhc2UgbnQ6aWYoYS53cmFwKXtmb3IoO2R0PDMyOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sX3w9bltzKytdPDxkdCxkdCs9OH1pZihfdC09Zix0LnRvdGFsX291dCs9X3QsYS50b3RhbCs9X3QsX3QmJih0LmFkbGVyPWEuY2hlY2s9YS5mbGFncz9iKGEuY2hlY2sscixfdCxvLV90KTpjKGEuY2hlY2sscixfdCxvLV90KSksX3Q9ZiwoYS5mbGFncz9fOmkoXykpIT09YS5jaGVjayl7dC5tc2c9ImluY29ycmVjdCBkYXRhIGNoZWNrIixhLm1vZGU9b3Q7YnJlYWt9Xz0wLGR0PTB9YS5tb2RlPXJ0O2Nhc2UgcnQ6aWYoYS53cmFwJiZhLmZsYWdzKXtmb3IoO2R0PDMyOyl7aWYoMD09PWwpYnJlYWsgdDtsLS0sXys9bltzKytdPDxkdCxkdCs9OH1pZihfIT09KDQyOTQ5NjcyOTUmYS50b3RhbCkpe3QubXNnPSJpbmNvcnJlY3QgbGVuZ3RoIGNoZWNrIixhLm1vZGU9b3Q7YnJlYWt9Xz0wLGR0PTB9YS5tb2RlPXN0O2Nhc2Ugc3Q6eHQ9QjticmVhayB0O2Nhc2Ugb3Q6eHQ9QTticmVhayB0O2Nhc2UgbHQ6cmV0dXJuIFo7Y2FzZSBodDpkZWZhdWx0OnJldHVybiBFfXJldHVybiB0Lm5leHRfb3V0PW8sdC5hdmFpbF9vdXQ9Zix0Lm5leHRfaW49cyx0LmF2YWlsX2luPWwsYS5ob2xkPV8sYS5iaXRzPWR0LChhLndzaXplfHxfdCE9PXQuYXZhaWxfb3V0JiZhLm1vZGU8b3QmJihhLm1vZGU8bnR8fGUhPT1rKSkmJmQodCx0Lm91dHB1dCx0Lm5leHRfb3V0LF90LXQuYXZhaWxfb3V0KT8oYS5tb2RlPWx0LFopOihmdC09dC5hdmFpbF9pbixfdC09dC5hdmFpbF9vdXQsdC50b3RhbF9pbis9ZnQsdC50b3RhbF9vdXQrPV90LGEudG90YWwrPV90LGEud3JhcCYmX3QmJih0LmFkbGVyPWEuY2hlY2s9YS5mbGFncz9iKGEuY2hlY2sscixfdCx0Lm5leHRfb3V0LV90KTpjKGEuY2hlY2sscixfdCx0Lm5leHRfb3V0LV90KSksdC5kYXRhX3R5cGU9YS5iaXRzKyhhLmxhc3Q/NjQ6MCkrKGEubW9kZT09PU0/MTI4OjApKyhhLm1vZGU9PT1RfHxhLm1vZGU9PT1xPzI1NjowKSwoMD09PWZ0JiYwPT09X3R8fGU9PT1rKSYmeHQ9PT16JiYoeHQ9UikseHQpfSxhLmluZmxhdGVFbmQ9ZnVuY3Rpb24odCl7aWYoIXR8fCF0LnN0YXRlKXJldHVybiBFO3ZhciBlPXQuc3RhdGU7cmV0dXJuIGUud2luZG93JiYoZS53aW5kb3c9bnVsbCksdC5zdGF0ZT1udWxsLHp9LGEuaW5mbGF0ZUdldEhlYWRlcj1mdW5jdGlvbih0LGUpe3ZhciBhO3JldHVybiB0JiZ0LnN0YXRlPzA9PSgyJihhPXQuc3RhdGUpLndyYXApP0U6KGEuaGVhZD1lLGUuZG9uZT0hMSx6KTpFfSxhLmluZmxhdGVTZXREaWN0aW9uYXJ5PWZ1bmN0aW9uKHQsZSl7dmFyIGEsaSxuPWUubGVuZ3RoO3JldHVybiB0JiZ0LnN0YXRlPzAhPT0oYT10LnN0YXRlKS53cmFwJiZhLm1vZGUhPT1LP0U6YS5tb2RlPT09SyYmKGk9MSwoaT1jKGksZSxuLDApKSE9PWEuY2hlY2spP0E6ZCh0LGUsbixuKT8oYS5tb2RlPWx0LFopOihhLmhhdmVkaWN0PTEseik6RX0sYS5pbmZsYXRlSW5mbz0icGFrbyBpbmZsYXRlIChmcm9tIE5vZGVjYSBwcm9qZWN0KSJ9LHsiLi4vdXRpbHMvY29tbW9uIjozLCIuL2FkbGVyMzIiOjUsIi4vY3JjMzIiOjcsIi4vaW5mZmFzdCI6MTAsIi4vaW5mdHJlZXMiOjEyfV0sMTI6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7dmFyIGk9dCgiLi4vdXRpbHMvY29tbW9uIiksbj1bMyw0LDUsNiw3LDgsOSwxMCwxMSwxMywxNSwxNywxOSwyMywyNywzMSwzNSw0Myw1MSw1OSw2Nyw4Myw5OSwxMTUsMTMxLDE2MywxOTUsMjI3LDI1OCwwLDBdLHI9WzE2LDE2LDE2LDE2LDE2LDE2LDE2LDE2LDE3LDE3LDE3LDE3LDE4LDE4LDE4LDE4LDE5LDE5LDE5LDE5LDIwLDIwLDIwLDIwLDIxLDIxLDIxLDIxLDE2LDcyLDc4XSxzPVsxLDIsMyw0LDUsNyw5LDEzLDE3LDI1LDMzLDQ5LDY1LDk3LDEyOSwxOTMsMjU3LDM4NSw1MTMsNzY5LDEwMjUsMTUzNywyMDQ5LDMwNzMsNDA5Nyw2MTQ1LDgxOTMsMTIyODksMTYzODUsMjQ1NzcsMCwwXSxvPVsxNiwxNiwxNiwxNiwxNywxNywxOCwxOCwxOSwxOSwyMCwyMCwyMSwyMSwyMiwyMiwyMywyMywyNCwyNCwyNSwyNSwyNiwyNiwyNywyNywyOCwyOCwyOSwyOSw2NCw2NF07ZS5leHBvcnRzPWZ1bmN0aW9uKHQsZSxhLGwsaCxkLGYsXyl7dmFyIHUsYyxiLGcsbSx3LHAsdixrLHk9Xy5iaXRzLHg9MCx6PTAsQj0wLFM9MCxFPTAsQT0wLFo9MCxSPTAsQz0wLE49MCxPPW51bGwsRD0wLEk9bmV3IGkuQnVmMTYoMTYpLFU9bmV3IGkuQnVmMTYoMTYpLFQ9bnVsbCxGPTA7Zm9yKHg9MDt4PD0xNTt4KyspSVt4XT0wO2Zvcih6PTA7ejxsO3orKylJW2VbYSt6XV0rKztmb3IoRT15LFM9MTU7Uz49MSYmMD09PUlbU107Uy0tKTtpZihFPlMmJihFPVMpLDA9PT1TKXJldHVybiBoW2QrK109MjA5NzE1MjAsaFtkKytdPTIwOTcxNTIwLF8uYml0cz0xLDA7Zm9yKEI9MTtCPFMmJjA9PT1JW0JdO0IrKyk7Zm9yKEU8QiYmKEU9QiksUj0xLHg9MTt4PD0xNTt4KyspaWYoUjw8PTEsKFItPUlbeF0pPDApcmV0dXJuLTE7aWYoUj4wJiYoMD09PXR8fDEhPT1TKSlyZXR1cm4tMTtmb3IoVVsxXT0wLHg9MTt4PDE1O3grKylVW3grMV09VVt4XStJW3hdO2Zvcih6PTA7ejxsO3orKykwIT09ZVthK3pdJiYoZltVW2VbYSt6XV0rK109eik7aWYoMD09PXQ/KE89VD1mLHc9MTkpOjE9PT10PyhPPW4sRC09MjU3LFQ9cixGLT0yNTcsdz0yNTYpOihPPXMsVD1vLHc9LTEpLE49MCx6PTAseD1CLG09ZCxBPUUsWj0wLGI9LTEsQz0xPDxFLGc9Qy0xLDE9PT10JiZDPjg1Mnx8Mj09PXQmJkM+NTkyKXJldHVybiAxO2Zvcig7Oyl7cD14LVosZlt6XTx3Pyh2PTAsaz1mW3pdKTpmW3pdPnc/KHY9VFtGK2Zbel1dLGs9T1tEK2Zbel1dKToodj05NixrPTApLHU9MTw8eC1aLEI9Yz0xPDxBO2Rve2hbbSsoTj4+WikrKGMtPXUpXT1wPDwyNHx2PDwxNnxrfDB9d2hpbGUoMCE9PWMpO2Zvcih1PTE8PHgtMTtOJnU7KXU+Pj0xO2lmKDAhPT11PyhOJj11LTEsTis9dSk6Tj0wLHorKywwPT0tLUlbeF0pe2lmKHg9PT1TKWJyZWFrO3g9ZVthK2Zbel1dfWlmKHg+RSYmKE4mZykhPT1iKXtmb3IoMD09PVomJihaPUUpLG0rPUIsUj0xPDwoQT14LVopO0ErWjxTJiYhKChSLT1JW0ErWl0pPD0wKTspQSsrLFI8PD0xO2lmKEMrPTE8PEEsMT09PXQmJkM+ODUyfHwyPT09dCYmQz41OTIpcmV0dXJuIDE7aFtiPU4mZ109RTw8MjR8QTw8MTZ8bS1kfDB9fXJldHVybiAwIT09TiYmKGhbbStOXT14LVo8PDI0fDY0PDwxNnwwKSxfLmJpdHM9RSwwfX0seyIuLi91dGlscy9jb21tb24iOjN9XSwxMzpbZnVuY3Rpb24odCxlLGEpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0se31dLDE0OltmdW5jdGlvbih0LGUsYSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGkodCl7Zm9yKHZhciBlPXQubGVuZ3RoOy0tZT49MDspdFtlXT0wfWZ1bmN0aW9uIG4odCxlLGEsaSxuKXt0aGlzLnN0YXRpY190cmVlPXQsdGhpcy5leHRyYV9iaXRzPWUsdGhpcy5leHRyYV9iYXNlPWEsdGhpcy5lbGVtcz1pLHRoaXMubWF4X2xlbmd0aD1uLHRoaXMuaGFzX3N0cmVlPXQmJnQubGVuZ3RofWZ1bmN0aW9uIHIodCxlKXt0aGlzLmR5bl90cmVlPXQsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPWV9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gdDwyNTY/ZXRbdF06ZXRbMjU2Kyh0Pj4+NyldfWZ1bmN0aW9uIG8odCxlKXt0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT0yNTUmZSx0LnBlbmRpbmdfYnVmW3QucGVuZGluZysrXT1lPj4+OCYyNTV9ZnVuY3Rpb24gbCh0LGUsYSl7dC5iaV92YWxpZD5NLWE/KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LG8odCx0LmJpX2J1ZiksdC5iaV9idWY9ZT4+TS10LmJpX3ZhbGlkLHQuYmlfdmFsaWQrPWEtTSk6KHQuYmlfYnVmfD1lPDx0LmJpX3ZhbGlkJjY1NTM1LHQuYmlfdmFsaWQrPWEpfWZ1bmN0aW9uIGgodCxlLGEpe2wodCxhWzIqZV0sYVsyKmUrMV0pfWZ1bmN0aW9uIGQodCxlKXt2YXIgYT0wO2Rve2F8PTEmdCx0Pj4+PTEsYTw8PTF9d2hpbGUoLS1lPjApO3JldHVybiBhPj4+MX1mdW5jdGlvbiBmKHQpezE2PT09dC5iaV92YWxpZD8obyh0LHQuYmlfYnVmKSx0LmJpX2J1Zj0wLHQuYmlfdmFsaWQ9MCk6dC5iaV92YWxpZD49OCYmKHQucGVuZGluZ19idWZbdC5wZW5kaW5nKytdPTI1NSZ0LmJpX2J1Zix0LmJpX2J1Zj4+PTgsdC5iaV92YWxpZC09OCl9ZnVuY3Rpb24gXyh0LGUpe3ZhciBhLGksbixyLHMsbyxsPWUuZHluX3RyZWUsaD1lLm1heF9jb2RlLGQ9ZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsZj1lLnN0YXRfZGVzYy5oYXNfc3RyZWUsXz1lLnN0YXRfZGVzYy5leHRyYV9iaXRzLHU9ZS5zdGF0X2Rlc2MuZXh0cmFfYmFzZSxjPWUuc3RhdF9kZXNjLm1heF9sZW5ndGgsYj0wO2ZvcihyPTA7cjw9SztyKyspdC5ibF9jb3VudFtyXT0wO2ZvcihsWzIqdC5oZWFwW3QuaGVhcF9tYXhdKzFdPTAsYT10LmhlYXBfbWF4KzE7YTxqO2ErKykocj1sWzIqbFsyKihpPXQuaGVhcFthXSkrMV0rMV0rMSk+YyYmKHI9YyxiKyspLGxbMippKzFdPXIsaT5ofHwodC5ibF9jb3VudFtyXSsrLHM9MCxpPj11JiYocz1fW2ktdV0pLG89bFsyKmldLHQub3B0X2xlbis9byoocitzKSxmJiYodC5zdGF0aWNfbGVuKz1vKihkWzIqaSsxXStzKSkpO2lmKDAhPT1iKXtkb3tmb3Iocj1jLTE7MD09PXQuYmxfY291bnRbcl07KXItLTt0LmJsX2NvdW50W3JdLS0sdC5ibF9jb3VudFtyKzFdKz0yLHQuYmxfY291bnRbY10tLSxiLT0yfXdoaWxlKGI+MCk7Zm9yKHI9YzswIT09cjtyLS0pZm9yKGk9dC5ibF9jb3VudFtyXTswIT09aTspKG49dC5oZWFwWy0tYV0pPmh8fChsWzIqbisxXSE9PXImJih0Lm9wdF9sZW4rPShyLWxbMipuKzFdKSpsWzIqbl0sbFsyKm4rMV09ciksaS0tKX19ZnVuY3Rpb24gdSh0LGUsYSl7dmFyIGksbixyPW5ldyBBcnJheShLKzEpLHM9MDtmb3IoaT0xO2k8PUs7aSsrKXJbaV09cz1zK2FbaS0xXTw8MTtmb3Iobj0wO248PWU7bisrKXt2YXIgbz10WzIqbisxXTswIT09byYmKHRbMipuXT1kKHJbb10rKyxvKSl9fWZ1bmN0aW9uIGMoKXt2YXIgdCxlLGEsaSxyLHM9bmV3IEFycmF5KEsrMSk7Zm9yKGE9MCxpPTA7aTxVLTE7aSsrKWZvcihpdFtpXT1hLHQ9MDt0PDE8PFdbaV07dCsrKWF0W2ErK109aTtmb3IoYXRbYS0xXT1pLHI9MCxpPTA7aTwxNjtpKyspZm9yKG50W2ldPXIsdD0wO3Q8MTw8SltpXTt0KyspZXRbcisrXT1pO2ZvcihyPj49NztpPEw7aSsrKWZvcihudFtpXT1yPDw3LHQ9MDt0PDE8PEpbaV0tNzt0KyspZXRbMjU2K3IrK109aTtmb3IoZT0wO2U8PUs7ZSsrKXNbZV09MDtmb3IodD0wO3Q8PTE0MzspJFsyKnQrMV09OCx0Kyssc1s4XSsrO2Zvcig7dDw9MjU1OykkWzIqdCsxXT05LHQrKyxzWzldKys7Zm9yKDt0PD0yNzk7KSRbMip0KzFdPTcsdCsrLHNbN10rKztmb3IoO3Q8PTI4NzspJFsyKnQrMV09OCx0Kyssc1s4XSsrO2Zvcih1KCQsRisxLHMpLHQ9MDt0PEw7dCsrKXR0WzIqdCsxXT01LHR0WzIqdF09ZCh0LDUpO3J0PW5ldyBuKCQsVyxUKzEsRixLKSxzdD1uZXcgbih0dCxKLDAsTCxLKSxvdD1uZXcgbihuZXcgQXJyYXkoMCksUSwwLEgsUCl9ZnVuY3Rpb24gYih0KXt2YXIgZTtmb3IoZT0wO2U8RjtlKyspdC5keW5fbHRyZWVbMiplXT0wO2ZvcihlPTA7ZTxMO2UrKyl0LmR5bl9kdHJlZVsyKmVdPTA7Zm9yKGU9MDtlPEg7ZSsrKXQuYmxfdHJlZVsyKmVdPTA7dC5keW5fbHRyZWVbMipZXT0xLHQub3B0X2xlbj10LnN0YXRpY19sZW49MCx0Lmxhc3RfbGl0PXQubWF0Y2hlcz0wfWZ1bmN0aW9uIGcodCl7dC5iaV92YWxpZD44P28odCx0LmJpX2J1Zik6dC5iaV92YWxpZD4wJiYodC5wZW5kaW5nX2J1Zlt0LnBlbmRpbmcrK109dC5iaV9idWYpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wfWZ1bmN0aW9uIG0odCxlLGEsaSl7Zyh0KSxpJiYobyh0LGEpLG8odCx+YSkpLEEuYXJyYXlTZXQodC5wZW5kaW5nX2J1Zix0LndpbmRvdyxlLGEsdC5wZW5kaW5nKSx0LnBlbmRpbmcrPWF9ZnVuY3Rpb24gdyh0LGUsYSxpKXt2YXIgbj0yKmUscj0yKmE7cmV0dXJuIHRbbl08dFtyXXx8dFtuXT09PXRbcl0mJmlbZV08PWlbYV19ZnVuY3Rpb24gcCh0LGUsYSl7Zm9yKHZhciBpPXQuaGVhcFthXSxuPWE8PDE7bjw9dC5oZWFwX2xlbiYmKG48dC5oZWFwX2xlbiYmdyhlLHQuaGVhcFtuKzFdLHQuaGVhcFtuXSx0LmRlcHRoKSYmbisrLCF3KGUsaSx0LmhlYXBbbl0sdC5kZXB0aCkpOyl0LmhlYXBbYV09dC5oZWFwW25dLGE9bixuPDw9MTt0LmhlYXBbYV09aX1mdW5jdGlvbiB2KHQsZSxhKXt2YXIgaSxuLHIsbyxkPTA7aWYoMCE9PXQubGFzdF9saXQpZG97aT10LnBlbmRpbmdfYnVmW3QuZF9idWYrMipkXTw8OHx0LnBlbmRpbmdfYnVmW3QuZF9idWYrMipkKzFdLG49dC5wZW5kaW5nX2J1Zlt0LmxfYnVmK2RdLGQrKywwPT09aT9oKHQsbixlKTooaCh0LChyPWF0W25dKStUKzEsZSksMCE9PShvPVdbcl0pJiZsKHQsbi09aXRbcl0sbyksaCh0LHI9cygtLWkpLGEpLDAhPT0obz1KW3JdKSYmbCh0LGktPW50W3JdLG8pKX13aGlsZShkPHQubGFzdF9saXQpO2godCxZLGUpfWZ1bmN0aW9uIGsodCxlKXt2YXIgYSxpLG4scj1lLmR5bl90cmVlLHM9ZS5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsbz1lLnN0YXRfZGVzYy5oYXNfc3RyZWUsbD1lLnN0YXRfZGVzYy5lbGVtcyxoPS0xO2Zvcih0LmhlYXBfbGVuPTAsdC5oZWFwX21heD1qLGE9MDthPGw7YSsrKTAhPT1yWzIqYV0/KHQuaGVhcFsrK3QuaGVhcF9sZW5dPWg9YSx0LmRlcHRoW2FdPTApOnJbMiphKzFdPTA7Zm9yKDt0LmhlYXBfbGVuPDI7KXJbMioobj10LmhlYXBbKyt0LmhlYXBfbGVuXT1oPDI/KytoOjApXT0xLHQuZGVwdGhbbl09MCx0Lm9wdF9sZW4tLSxvJiYodC5zdGF0aWNfbGVuLT1zWzIqbisxXSk7Zm9yKGUubWF4X2NvZGU9aCxhPXQuaGVhcF9sZW4+PjE7YT49MTthLS0pcCh0LHIsYSk7bj1sO2Rve2E9dC5oZWFwWzFdLHQuaGVhcFsxXT10LmhlYXBbdC5oZWFwX2xlbi0tXSxwKHQsciwxKSxpPXQuaGVhcFsxXSx0LmhlYXBbLS10LmhlYXBfbWF4XT1hLHQuaGVhcFstLXQuaGVhcF9tYXhdPWksclsyKm5dPXJbMiphXStyWzIqaV0sdC5kZXB0aFtuXT0odC5kZXB0aFthXT49dC5kZXB0aFtpXT90LmRlcHRoW2FdOnQuZGVwdGhbaV0pKzEsclsyKmErMV09clsyKmkrMV09bix0LmhlYXBbMV09bisrLHAodCxyLDEpfXdoaWxlKHQuaGVhcF9sZW4+PTIpO3QuaGVhcFstLXQuaGVhcF9tYXhdPXQuaGVhcFsxXSxfKHQsZSksdShyLGgsdC5ibF9jb3VudCl9ZnVuY3Rpb24geSh0LGUsYSl7dmFyIGksbixyPS0xLHM9ZVsxXSxvPTAsbD03LGg9NDtmb3IoMD09PXMmJihsPTEzOCxoPTMpLGVbMiooYSsxKSsxXT02NTUzNSxpPTA7aTw9YTtpKyspbj1zLHM9ZVsyKihpKzEpKzFdLCsrbzxsJiZuPT09c3x8KG88aD90LmJsX3RyZWVbMipuXSs9bzowIT09bj8obiE9PXImJnQuYmxfdHJlZVsyKm5dKyssdC5ibF90cmVlWzIqcV0rKyk6bzw9MTA/dC5ibF90cmVlWzIqR10rKzp0LmJsX3RyZWVbMipYXSsrLG89MCxyPW4sMD09PXM/KGw9MTM4LGg9Myk6bj09PXM/KGw9NixoPTMpOihsPTcsaD00KSl9ZnVuY3Rpb24geCh0LGUsYSl7dmFyIGksbixyPS0xLHM9ZVsxXSxvPTAsZD03LGY9NDtmb3IoMD09PXMmJihkPTEzOCxmPTMpLGk9MDtpPD1hO2krKylpZihuPXMscz1lWzIqKGkrMSkrMV0sISgrK288ZCYmbj09PXMpKXtpZihvPGYpZG97aCh0LG4sdC5ibF90cmVlKX13aGlsZSgwIT0tLW8pO2Vsc2UgMCE9PW4/KG4hPT1yJiYoaCh0LG4sdC5ibF90cmVlKSxvLS0pLGgodCxxLHQuYmxfdHJlZSksbCh0LG8tMywyKSk6bzw9MTA/KGgodCxHLHQuYmxfdHJlZSksbCh0LG8tMywzKSk6KGgodCxYLHQuYmxfdHJlZSksbCh0LG8tMTEsNykpO289MCxyPW4sMD09PXM/KGQ9MTM4LGY9Myk6bj09PXM/KGQ9NixmPTMpOihkPTcsZj00KX19ZnVuY3Rpb24geih0KXt2YXIgZTtmb3IoeSh0LHQuZHluX2x0cmVlLHQubF9kZXNjLm1heF9jb2RlKSx5KHQsdC5keW5fZHRyZWUsdC5kX2Rlc2MubWF4X2NvZGUpLGsodCx0LmJsX2Rlc2MpLGU9SC0xO2U+PTMmJjA9PT10LmJsX3RyZWVbMipWW2VdKzFdO2UtLSk7cmV0dXJuIHQub3B0X2xlbis9MyooZSsxKSs1KzUrNCxlfWZ1bmN0aW9uIEIodCxlLGEsaSl7dmFyIG47Zm9yKGwodCxlLTI1Nyw1KSxsKHQsYS0xLDUpLGwodCxpLTQsNCksbj0wO248aTtuKyspbCh0LHQuYmxfdHJlZVsyKlZbbl0rMV0sMyk7eCh0LHQuZHluX2x0cmVlLGUtMSkseCh0LHQuZHluX2R0cmVlLGEtMSl9ZnVuY3Rpb24gUyh0KXt2YXIgZSxhPTQwOTM2MjQ0NDc7Zm9yKGU9MDtlPD0zMTtlKyssYT4+Pj0xKWlmKDEmYSYmMCE9PXQuZHluX2x0cmVlWzIqZV0pcmV0dXJuIFI7aWYoMCE9PXQuZHluX2x0cmVlWzE4XXx8MCE9PXQuZHluX2x0cmVlWzIwXXx8MCE9PXQuZHluX2x0cmVlWzI2XSlyZXR1cm4gQztmb3IoZT0zMjtlPFQ7ZSsrKWlmKDAhPT10LmR5bl9sdHJlZVsyKmVdKXJldHVybiBDO3JldHVybiBSfWZ1bmN0aW9uIEUodCxlLGEsaSl7bCh0LChPPDwxKSsoaT8xOjApLDMpLG0odCxlLGEsITApfXZhciBBPXQoIi4uL3V0aWxzL2NvbW1vbiIpLFo9NCxSPTAsQz0xLE49MixPPTAsRD0xLEk9MixVPTI5LFQ9MjU2LEY9VCsxK1UsTD0zMCxIPTE5LGo9MipGKzEsSz0xNSxNPTE2LFA9NyxZPTI1NixxPTE2LEc9MTcsWD0xOCxXPVswLDAsMCwwLDAsMCwwLDAsMSwxLDEsMSwyLDIsMiwyLDMsMywzLDMsNCw0LDQsNCw1LDUsNSw1LDBdLEo9WzAsMCwwLDAsMSwxLDIsMiwzLDMsNCw0LDUsNSw2LDYsNyw3LDgsOCw5LDksMTAsMTAsMTEsMTEsMTIsMTIsMTMsMTNdLFE9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLFY9WzE2LDE3LDE4LDAsOCw3LDksNiwxMCw1LDExLDQsMTIsMywxMywyLDE0LDEsMTVdLCQ9bmV3IEFycmF5KDIqKEYrMikpO2koJCk7dmFyIHR0PW5ldyBBcnJheSgyKkwpO2kodHQpO3ZhciBldD1uZXcgQXJyYXkoNTEyKTtpKGV0KTt2YXIgYXQ9bmV3IEFycmF5KDI1Nik7aShhdCk7dmFyIGl0PW5ldyBBcnJheShVKTtpKGl0KTt2YXIgbnQ9bmV3IEFycmF5KEwpO2kobnQpO3ZhciBydCxzdCxvdCxsdD0hMTthLl90cl9pbml0PWZ1bmN0aW9uKHQpe2x0fHwoYygpLGx0PSEwKSx0LmxfZGVzYz1uZXcgcih0LmR5bl9sdHJlZSxydCksdC5kX2Rlc2M9bmV3IHIodC5keW5fZHRyZWUsc3QpLHQuYmxfZGVzYz1uZXcgcih0LmJsX3RyZWUsb3QpLHQuYmlfYnVmPTAsdC5iaV92YWxpZD0wLGIodCl9LGEuX3RyX3N0b3JlZF9ibG9jaz1FLGEuX3RyX2ZsdXNoX2Jsb2NrPWZ1bmN0aW9uKHQsZSxhLGkpe3ZhciBuLHIscz0wO3QubGV2ZWw+MD8odC5zdHJtLmRhdGFfdHlwZT09PU4mJih0LnN0cm0uZGF0YV90eXBlPVModCkpLGsodCx0LmxfZGVzYyksayh0LHQuZF9kZXNjKSxzPXoodCksbj10Lm9wdF9sZW4rMys3Pj4+Mywocj10LnN0YXRpY19sZW4rMys3Pj4+Myk8PW4mJihuPXIpKTpuPXI9YSs1LGErNDw9biYmLTEhPT1lP0UodCxlLGEsaSk6dC5zdHJhdGVneT09PVp8fHI9PT1uPyhsKHQsKEQ8PDEpKyhpPzE6MCksMyksdih0LCQsdHQpKToobCh0LChJPDwxKSsoaT8xOjApLDMpLEIodCx0LmxfZGVzYy5tYXhfY29kZSsxLHQuZF9kZXNjLm1heF9jb2RlKzEscysxKSx2KHQsdC5keW5fbHRyZWUsdC5keW5fZHRyZWUpKSxiKHQpLGkmJmcodCl9LGEuX3RyX3RhbGx5PWZ1bmN0aW9uKHQsZSxhKXtyZXR1cm4gdC5wZW5kaW5nX2J1Zlt0LmRfYnVmKzIqdC5sYXN0X2xpdF09ZT4+PjgmMjU1LHQucGVuZGluZ19idWZbdC5kX2J1ZisyKnQubGFzdF9saXQrMV09MjU1JmUsdC5wZW5kaW5nX2J1Zlt0LmxfYnVmK3QubGFzdF9saXRdPTI1NSZhLHQubGFzdF9saXQrKywwPT09ZT90LmR5bl9sdHJlZVsyKmFdKys6KHQubWF0Y2hlcysrLGUtLSx0LmR5bl9sdHJlZVsyKihhdFthXStUKzEpXSsrLHQuZHluX2R0cmVlWzIqcyhlKV0rKyksdC5sYXN0X2xpdD09PXQubGl0X2J1ZnNpemUtMX0sYS5fdHJfYWxpZ249ZnVuY3Rpb24odCl7bCh0LEQ8PDEsMyksaCh0LFksJCksZih0KX19LHsiLi4vdXRpbHMvY29tbW9uIjozfV0sMTU6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhpcy5pbnB1dD1udWxsLHRoaXMubmV4dF9pbj0wLHRoaXMuYXZhaWxfaW49MCx0aGlzLnRvdGFsX2luPTAsdGhpcy5vdXRwdXQ9bnVsbCx0aGlzLm5leHRfb3V0PTAsdGhpcy5hdmFpbF9vdXQ9MCx0aGlzLnRvdGFsX291dD0wLHRoaXMubXNnPSIiLHRoaXMuc3RhdGU9bnVsbCx0aGlzLmRhdGFfdHlwZT0yLHRoaXMuYWRsZXI9MH19LHt9XSwiLyI6W2Z1bmN0aW9uKHQsZSxhKXsidXNlIHN0cmljdCI7dmFyIGk9e307KDAsdCgiLi9saWIvdXRpbHMvY29tbW9uIikuYXNzaWduKShpLHQoIi4vbGliL2RlZmxhdGUiKSx0KCIuL2xpYi9pbmZsYXRlIiksdCgiLi9saWIvemxpYi9jb25zdGFudHMiKSksZS5leHBvcnRzPWl9LHsiLi9saWIvZGVmbGF0ZSI6MSwiLi9saWIvaW5mbGF0ZSI6MiwiLi9saWIvdXRpbHMvY29tbW9uIjozLCIuL2xpYi96bGliL2NvbnN0YW50cyI6Nn1dfSx7fSxbXSkoIi8iKX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBHWklQX01FTUJFUl9IRUFERVJfSURfU0laRT0zO2NvbnN0IEdaSVBfSEVBREVSX0lEMT0weDFmO2NvbnN0IEdaSVBfSEVBREVSX0lEMj0weDhiO2NvbnN0IEdaSVBfREVGTEFURV9DT01QUkVTU0lPTj04O2Z1bmN0aW9uIF9zdHJpbmdUb1VJbnQ4QXJyYXkoc3RyKXtjb25zdCBhcnJheT1uZXcgVWludDhBcnJheShzdHIubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHN0ci5sZW5ndGg7KytpKXthcnJheVtpXT1zdHIuY2hhckNvZGVBdChpKTt9CnJldHVybiBhcnJheTt9CmZ1bmN0aW9uIEd6aXBJbXBvcnRlcihtb2RlbCxldmVudERhdGEpe3RoaXMuaW5mbGF0ZUFzVHJhY2VTdHJlYW09ZmFsc2U7aWYodHlwZW9mKGV2ZW50RGF0YSk9PT0nc3RyaW5nJ3x8ZXZlbnREYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtldmVudERhdGE9X3N0cmluZ1RvVUludDhBcnJheShldmVudERhdGEpO31lbHNlIGlmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXtldmVudERhdGE9bmV3IFVpbnQ4QXJyYXkoZXZlbnREYXRhKTt9ZWxzZSBpZihldmVudERhdGEgaW5zdGFuY2VvZiB0ci5iLkluTWVtb3J5VHJhY2VTdHJlYW0pe2V2ZW50RGF0YT1ldmVudERhdGEuZGF0YTt0aGlzLmluZmxhdGVBc1RyYWNlU3RyZWFtXz10cnVlO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5rbm93biBnemlwIGRhdGEgZm9ybWF0Jyk7fQp0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmd6aXBEYXRhXz1ldmVudERhdGE7fQpHemlwSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgdHIuYi5Jbk1lbW9yeVRyYWNlU3RyZWFtKXtldmVudERhdGE9ZXZlbnREYXRhLmhlYWRlcjt9CmxldCBoZWFkZXI7aWYoZXZlbnREYXRhIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpe2hlYWRlcj1uZXcgVWludDhBcnJheShldmVudERhdGEuc2xpY2UoMCxHWklQX01FTUJFUl9IRUFERVJfSURfU0laRSkpO31lbHNlIGlmKHR5cGVvZihldmVudERhdGEpPT09J3N0cmluZyd8fGV2ZW50RGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7aGVhZGVyPWV2ZW50RGF0YS5zdWJzdHJpbmcoMCxHWklQX01FTUJFUl9IRUFERVJfSURfU0laRSk7aGVhZGVyPV9zdHJpbmdUb1VJbnQ4QXJyYXkoaGVhZGVyKTt9ZWxzZXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gaGVhZGVyWzBdPT09R1pJUF9IRUFERVJfSUQxJiZoZWFkZXJbMV09PT1HWklQX0hFQURFUl9JRDImJmhlYWRlclsyXT09PUdaSVBfREVGTEFURV9DT01QUkVTU0lPTjt9O0d6aXBJbXBvcnRlci5pbmZsYXRlR3ppcERhdGFfPWZ1bmN0aW9uKGRhdGEpe2xldCBwb3NpdGlvbj0wO2Z1bmN0aW9uIGdldEJ5dGUoKXtpZihwb3NpdGlvbj49ZGF0YS5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBlbmQgb2YgZ3ppcCBkYXRhJyk7fQpyZXR1cm4gZGF0YVtwb3NpdGlvbisrXTt9CmZ1bmN0aW9uIGdldFdvcmQoKXtjb25zdCBsb3c9Z2V0Qnl0ZSgpO2NvbnN0IGhpZ2g9Z2V0Qnl0ZSgpO3JldHVybihoaWdoPDw4KStsb3c7fQpmdW5jdGlvbiBza2lwQnl0ZXMoYW1vdW50KXtwb3NpdGlvbis9YW1vdW50O30KZnVuY3Rpb24gc2tpcFplcm9UZXJtaW5hdGVkU3RyaW5nKCl7d2hpbGUoZ2V0Qnl0ZSgpIT09MCl7fX0KY29uc3QgaWQxPWdldEJ5dGUoKTtjb25zdCBpZDI9Z2V0Qnl0ZSgpO2lmKGlkMSE9PUdaSVBfSEVBREVSX0lEMXx8aWQyIT09R1pJUF9IRUFERVJfSUQyKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBnemlwIGRhdGEnKTt9CmNvbnN0IGNvbXByZXNzaW9uTWV0aG9kPWdldEJ5dGUoKTtpZihjb21wcmVzc2lvbk1ldGhvZCE9PUdaSVBfREVGTEFURV9DT01QUkVTU0lPTil7dGhyb3cgbmV3IEVycm9yKCdVbnN1cHBvcnRlZCBjb21wcmVzc2lvbiBtZXRob2Q6ICcrY29tcHJlc3Npb25NZXRob2QpO30KY29uc3QgZmxhZ3M9Z2V0Qnl0ZSgpO2NvbnN0IGhhdmVIZWFkZXJDcmM9ZmxhZ3MmKDE8PDEpO2NvbnN0IGhhdmVFeHRyYUZpZWxkcz1mbGFncyYoMTw8Mik7Y29uc3QgaGF2ZUZpbGVOYW1lPWZsYWdzJigxPDwzKTtjb25zdCBoYXZlQ29tbWVudD1mbGFncyYoMTw8NCk7c2tpcEJ5dGVzKDQrMSsxKTtpZihoYXZlRXh0cmFGaWVsZHMpe2NvbnN0IGJ5dGVzVG9Ta2lwPWdldFdvcmQoKTtza2lwQnl0ZXMoYnl0ZXNUb1NraXApO30KaWYoaGF2ZUZpbGVOYW1lKXNraXBaZXJvVGVybWluYXRlZFN0cmluZygpO2lmKGhhdmVDb21tZW50KXNraXBaZXJvVGVybWluYXRlZFN0cmluZygpO2lmKGhhdmVIZWFkZXJDcmMpZ2V0V29yZCgpO2NvbnN0IGluZmxhdGVkRGF0YT1wYWtvLmluZmxhdGVSYXcoZGF0YS5zdWJhcnJheShwb3NpdGlvbikpO2lmKHRoaXMuaW5mbGF0ZUFzVHJhY2VTdHJlYW1fKXtyZXR1cm4gR3ppcEltcG9ydGVyLnRyYW5zZm9ybVRvU3RyZWFtKGluZmxhdGVkRGF0YSk7fQpsZXQgc3RyaW5nO3RyeXtzdHJpbmc9R3ppcEltcG9ydGVyLnRyYW5zZm9ybVRvU3RyaW5nKGluZmxhdGVkRGF0YSk7fWNhdGNoKGVycil7cmV0dXJuIEd6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmVhbShpbmZsYXRlZERhdGEpO30KaWYoaW5mbGF0ZWREYXRhLmxlbmd0aD4wJiZzdHJpbmcubGVuZ3RoPT09MCl7cmV0dXJuIEd6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmVhbShpbmZsYXRlZERhdGEpO30KcmV0dXJuIHN0cmluZzt9O0d6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmVhbT1mdW5jdGlvbihkYXRhKXtpZihkYXRhIGluc3RhbmNlb2YgVWludDhBcnJheSl7cmV0dXJuIG5ldyB0ci5iLkluTWVtb3J5VHJhY2VTdHJlYW0oZGF0YSxmYWxzZSk7fQp0aHJvdyBuZXcgRXJyb3IoYENhbm5vdCB0cmFuc2Zvcm0gJHt0eXBlfSB0byBUcmFjZVN0cmVhbS5gKTt9O0d6aXBJbXBvcnRlci50cmFuc2Zvcm1Ub1N0cmluZz1mdW5jdGlvbihkYXRhKXtpZih0eXBlb2YoZGF0YSk9PT0nc3RyaW5nJylyZXR1cm4gZGF0YTtpZih0eXBlb2YgVGV4dERlY29kZXI9PT0ndW5kZWZpbmVkJyl7aWYoZGF0YSBpbnN0YW5jZW9mIEFycmF5QnVmZmVyKXtkYXRhPW5ldyBVaW50OEFycmF5KGRhdGEpO30KY29uc3QgcmVzdWx0PVtdO2xldCBjaHVuaz02NTUzNjtsZXQgaz0wO2NvbnN0IGxlbj1kYXRhLmxlbmd0aDt3aGlsZShrPGxlbiYmY2h1bms+MSl7dHJ5e2NvbnN0IGNodW5rbGVuPU1hdGgubWluKGsrY2h1bmssbGVuKTtsZXQgZGF0YXNsaWNlO2lmKGRhdGEgaW5zdGFuY2VvZiBBcnJheSl7ZGF0YXNsaWNlPWRhdGEuc2xpY2UoayxjaHVua2xlbik7fWVsc2V7ZGF0YXNsaWNlPWRhdGEuc3ViYXJyYXkoayxjaHVua2xlbik7fQpyZXN1bHQucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZGF0YXNsaWNlKSk7ays9Y2h1bms7fWNhdGNoKGUpe2NodW5rPU1hdGguZmxvb3IoY2h1bmsvMik7fX0KcmV0dXJuIHJlc3VsdC5qb2luKCcnKTt9CmlmKGRhdGEgaW5zdGFuY2VvZiBBcnJheSl7ZGF0YT1uZXcgVWludDhBcnJheShkYXRhKTt9CnJldHVybiBuZXcgVGV4dERlY29kZXIoJ3V0Zi04JykuZGVjb2RlKGRhdGEpO307R3ppcEltcG9ydGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLmltcG9ydGVyLkltcG9ydGVyLnByb3RvdHlwZSxnZXQgaW1wb3J0ZXJOYW1lKCl7cmV0dXJuJ0d6aXBJbXBvcnRlcic7fSxpc1RyYWNlRGF0YUNvbnRhaW5lcigpe3JldHVybiB0cnVlO30sZXh0cmFjdFN1YnRyYWNlcygpe2NvbnN0IGV2ZW50RGF0YT1HemlwSW1wb3J0ZXIuaW5mbGF0ZUd6aXBEYXRhXyh0aGlzLmd6aXBEYXRhXyk7cmV0dXJuIGV2ZW50RGF0YT9bZXZlbnREYXRhXTpbXTt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihHemlwSW1wb3J0ZXIpO3JldHVybntHemlwSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmltcG9ydGVyJyxmdW5jdGlvbigpe2NsYXNzIFNpbXBsZUxpbmVSZWFkZXJ7Y29uc3RydWN0b3IodGV4dCl7dGhpcy5kYXRhXz10ZXh0IGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbT90ZXh0OnRleHQuc3BsaXQobmV3IFJlZ0V4cCgnXHI/XG4nKSk7dGhpcy5jdXJMaW5lXz0wO3RoaXMucmVhZExhc3RMaW5lXz1mYWxzZTt0aGlzLnNhdmVkTGluZXNfPXVuZGVmaW5lZDt9KltTeW1ib2wuaXRlcmF0b3JdKCl7bGV0IGxhc3RMaW5lPXVuZGVmaW5lZDt3aGlsZSh0aGlzLmhhc0RhdGFfKXtpZih0aGlzLnJlYWRMYXN0TGluZV8pe3RoaXMuY3VyTGluZV8rKzt0aGlzLnJlYWRMYXN0TGluZV89ZmFsc2U7fWVsc2UgaWYodGhpcy5kYXRhXyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pe3RoaXMuY3VyTGluZV8rKztjb25zdCBsaW5lPXRoaXMuZGF0YV8ucmVhZFVudGlsRGVsaW1pdGVyKCdcbicpO2lmKGxpbmUuZW5kc1dpdGgoJ1xyXG4nKSl7bGFzdExpbmU9bGluZS5zbGljZSgwLC0yKTt9ZWxzZSBpZihsaW5lLmVuZHNXaXRoKCdcbicpKXtsYXN0TGluZT1saW5lLnNsaWNlKDAsLTEpO31lbHNle2xhc3RMaW5lPWxpbmU7fX1lbHNle3RoaXMuY3VyTGluZV8rKztsYXN0TGluZT10aGlzLmRhdGFfW3RoaXMuY3VyTGluZV8tMV07fQp5aWVsZCBsYXN0TGluZTt9fQpnZXQgY3VyTGluZU51bWJlcigpe3JldHVybiB0aGlzLmN1ckxpbmVfO30KZ2V0IGhhc0RhdGFfKCl7aWYodGhpcy5kYXRhXyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pcmV0dXJuIHRoaXMuZGF0YV8uaGFzRGF0YTtyZXR1cm4gdGhpcy5jdXJMaW5lXzx0aGlzLmRhdGFfLmxlbmd0aDt9CmFkdmFuY2VUb0xpbmVNYXRjaGluZyhyZWdleCl7Zm9yKGNvbnN0IGxpbmUgb2YgdGhpcyl7aWYodGhpcy5zYXZlZExpbmVzXyE9PXVuZGVmaW5lZCl0aGlzLnNhdmVkTGluZXNfLnB1c2gobGluZSk7aWYocmVnZXgudGVzdChsaW5lKSl7dGhpcy5nb0JhY2tfKCk7cmV0dXJuIHRydWU7fX0KcmV0dXJuIGZhbHNlO30KZ29CYWNrXygpe2lmKHRoaXMucmVhZExhc3RMaW5lXyl7dGhyb3cgbmV3IEVycm9yKCdUaGVyZSBzaG91bGQgYmUgYXQgbGVhc3Qgb25lIG5leHRMaW5lIGNhbGwgYmV0d2VlbiAnKydhbnkgdHdvIGdvQmFjayBjYWxscy4nKTt9CmlmKHRoaXMuY3VyTGluZV89PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIHNob3VsZCBiZSBhdCBsZWFzdCBvbmUgbmV4dExpbmUgY2FsbCBiZWZvcmUgJysndGhlIGZpcnN0IGdvQmFjayBjYWxsLicpO30KdGhpcy5yZWFkTGFzdExpbmVfPXRydWU7dGhpcy5jdXJMaW5lXy0tO30KYmVnaW5TYXZpbmdMaW5lcygpe3RoaXMuc2F2ZWRMaW5lc189W107fQplbmRTYXZpbmdMaW5lc0FuZEdldFJlc3VsdCgpe2NvbnN0IHRtcD10aGlzLnNhdmVkTGluZXNfO3RoaXMuc2F2ZWRMaW5lc189dW5kZWZpbmVkO3JldHVybiB0bXA7fX0KcmV0dXJue1NpbXBsZUxpbmVSZWFkZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gVHJhY2UySFRNTEltcG9ydGVyKG1vZGVsLGV2ZW50cyl7dGhpcy5pbXBvcnRQcmlvcml0eT0wO30KVHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc189W107ZnVuY3Rpb24gX2V4dHJhY3RFdmVudHNGcm9tSFRNTCh0ZXh0KXtUcmFjZTJIVE1MSW1wb3J0ZXIuc3VidHJhY2VzXz1bXTtjb25zdCByPW5ldyB0ci5pbXBvcnRlci5TaW1wbGVMaW5lUmVhZGVyKHRleHQpO3doaWxlKHRydWUpe2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZyhuZXcgUmVnRXhwKCdePFxzKnNjcmlwdCBpZD0idmlld2VyLWRhdGEiICcrJ3R5cGU9IihhcHBsaWNhdGlvblwvanNvbnx0ZXh0XC9wbGFpbikiPlxyPyQnKSkpe2JyZWFrO30Kci5iZWdpblNhdmluZ0xpbmVzKCk7aWYoIXIuYWR2YW5jZVRvTGluZU1hdGNoaW5nKC9ePFwvXHMqc2NyaXB0PlxyPyQvKSlyZXR1cm47bGV0IHJhd0V2ZW50cz1yLmVuZFNhdmluZ0xpbmVzQW5kR2V0UmVzdWx0KCk7cmF3RXZlbnRzPXJhd0V2ZW50cy5zbGljZSgxLHJhd0V2ZW50cy5sZW5ndGgtMSk7Y29uc3QgZGF0YTY0PXJhd0V2ZW50cy5qb2luKCdcbicpO2NvbnN0IGJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIodHIuYi5CYXNlNjQuZ2V0RGVjb2RlZEJ1ZmZlckxlbmd0aChkYXRhNjQpKTtjb25zdCBsZW49dHIuYi5CYXNlNjQuRGVjb2RlVG9UeXBlZEFycmF5KGRhdGE2NCxuZXcgRGF0YVZpZXcoYnVmZmVyKSk7VHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc18ucHVzaChidWZmZXIuc2xpY2UoMCxsZW4pKTt9fQpmdW5jdGlvbiBfY2FuSW1wb3J0RnJvbUhUTUwodGV4dCl7aWYoIS9ePCFET0NUWVBFIGh0bWw+Ly50ZXN0KHRleHQpKXJldHVybiBmYWxzZTtfZXh0cmFjdEV2ZW50c0Zyb21IVE1MKHRleHQpO2lmKFRyYWNlMkhUTUxJbXBvcnRlci5zdWJ0cmFjZXNfLmxlbmd0aD09PTApcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30KVHJhY2UySFRNTEltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudHMpe2lmKGV2ZW50cyBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pcmV0dXJuIGZhbHNlO3JldHVybiBfY2FuSW1wb3J0RnJvbUhUTUwoZXZlbnRzKTt9O1RyYWNlMkhUTUxJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidUcmFjZTJIVE1MSW1wb3J0ZXInO30saXNUcmFjZURhdGFDb250YWluZXIoKXtyZXR1cm4gdHJ1ZTt9LGV4dHJhY3RTdWJ0cmFjZXMoKXtyZXR1cm4gVHJhY2UySFRNTEltcG9ydGVyLnN1YnRyYWNlc187fSxpbXBvcnRFdmVudHMoKXt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihUcmFjZTJIVE1MSW1wb3J0ZXIpO3JldHVybntUcmFjZTJIVE1MSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIudjgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU3BsYXlUcmVlKCl7fQpTcGxheVRyZWUucHJvdG90eXBlLnJvb3RfPW51bGw7U3BsYXlUcmVlLnByb3RvdHlwZS5pc0VtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMucm9vdF87fTtTcGxheVRyZWUucHJvdG90eXBlLmluc2VydD1mdW5jdGlvbihrZXksdmFsdWUpe2lmKHRoaXMuaXNFbXB0eSgpKXt0aGlzLnJvb3RfPW5ldyBTcGxheVRyZWUuTm9kZShrZXksdmFsdWUpO3JldHVybjt9CnRoaXMuc3BsYXlfKGtleSk7aWYodGhpcy5yb290Xy5rZXk9PT1rZXkpe3JldHVybjt9CmNvbnN0IG5vZGU9bmV3IFNwbGF5VHJlZS5Ob2RlKGtleSx2YWx1ZSk7aWYoa2V5PnRoaXMucm9vdF8ua2V5KXtub2RlLmxlZnQ9dGhpcy5yb290Xztub2RlLnJpZ2h0PXRoaXMucm9vdF8ucmlnaHQ7dGhpcy5yb290Xy5yaWdodD1udWxsO31lbHNle25vZGUucmlnaHQ9dGhpcy5yb290Xztub2RlLmxlZnQ9dGhpcy5yb290Xy5sZWZ0O3RoaXMucm9vdF8ubGVmdD1udWxsO30KdGhpcy5yb290Xz1ub2RlO307U3BsYXlUcmVlLnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oa2V5KXtpZih0aGlzLmlzRW1wdHkoKSl7dGhyb3cgRXJyb3IoJ0tleSBub3QgZm91bmQ6ICcra2V5KTt9CnRoaXMuc3BsYXlfKGtleSk7aWYodGhpcy5yb290Xy5rZXkhPT1rZXkpe3Rocm93IEVycm9yKCdLZXkgbm90IGZvdW5kOiAnK2tleSk7fQpjb25zdCByZW1vdmVkPXRoaXMucm9vdF87aWYoIXRoaXMucm9vdF8ubGVmdCl7dGhpcy5yb290Xz10aGlzLnJvb3RfLnJpZ2h0O31lbHNle2NvbnN0IHJpZ2h0PXRoaXMucm9vdF8ucmlnaHQ7dGhpcy5yb290Xz10aGlzLnJvb3RfLmxlZnQ7dGhpcy5zcGxheV8oa2V5KTt0aGlzLnJvb3RfLnJpZ2h0PXJpZ2h0O30KcmV0dXJuIHJlbW92ZWQ7fTtTcGxheVRyZWUucHJvdG90eXBlLmZpbmQ9ZnVuY3Rpb24oa2V5KXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDt0aGlzLnNwbGF5XyhrZXkpO3JldHVybiB0aGlzLnJvb3RfLmtleT09PWtleT90aGlzLnJvb3RfOm51bGw7fTtTcGxheVRyZWUucHJvdG90eXBlLmZpbmRNaW49ZnVuY3Rpb24oKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDtsZXQgY3VycmVudD10aGlzLnJvb3RfO3doaWxlKGN1cnJlbnQubGVmdCl7Y3VycmVudD1jdXJyZW50LmxlZnQ7fQpyZXR1cm4gY3VycmVudDt9O1NwbGF5VHJlZS5wcm90b3R5cGUuZmluZE1heD1mdW5jdGlvbihvcHRfc3RhcnROb2RlKXtpZih0aGlzLmlzRW1wdHkoKSlyZXR1cm4gbnVsbDtsZXQgY3VycmVudD1vcHRfc3RhcnROb2RlfHx0aGlzLnJvb3RfO3doaWxlKGN1cnJlbnQucmlnaHQpe2N1cnJlbnQ9Y3VycmVudC5yaWdodDt9CnJldHVybiBjdXJyZW50O307U3BsYXlUcmVlLnByb3RvdHlwZS5maW5kR3JlYXRlc3RMZXNzVGhhbj1mdW5jdGlvbihrZXkpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybiBudWxsO3RoaXMuc3BsYXlfKGtleSk7aWYodGhpcy5yb290Xy5rZXk8PWtleSl7cmV0dXJuIHRoaXMucm9vdF87fQppZih0aGlzLnJvb3RfLmxlZnQpe3JldHVybiB0aGlzLmZpbmRNYXgodGhpcy5yb290Xy5sZWZ0KTt9CnJldHVybiBudWxsO307U3BsYXlUcmVlLnByb3RvdHlwZS5leHBvcnRLZXlzQW5kVmFsdWVzPWZ1bmN0aW9uKCl7Y29uc3QgcmVzdWx0PVtdO3RoaXMudHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpe3Jlc3VsdC5wdXNoKFtub2RlLmtleSxub2RlLnZhbHVlXSk7fSk7cmV0dXJuIHJlc3VsdDt9O1NwbGF5VHJlZS5wcm90b3R5cGUuZXhwb3J0VmFsdWVzPWZ1bmN0aW9uKCl7Y29uc3QgcmVzdWx0PVtdO3RoaXMudHJhdmVyc2VfKGZ1bmN0aW9uKG5vZGUpe3Jlc3VsdC5wdXNoKG5vZGUudmFsdWUpO30pO3JldHVybiByZXN1bHQ7fTtTcGxheVRyZWUucHJvdG90eXBlLnNwbGF5Xz1mdW5jdGlvbihrZXkpe2lmKHRoaXMuaXNFbXB0eSgpKXJldHVybjtjb25zdCBkdW1teT1uZXcgU3BsYXlUcmVlLk5vZGUobnVsbCxudWxsKTtsZXQgbGVmdD1kdW1teTtsZXQgcmlnaHQ9ZHVtbXk7bGV0IGN1cnJlbnQ9dGhpcy5yb290Xzt3aGlsZSh0cnVlKXtpZihrZXk8Y3VycmVudC5rZXkpe2lmKCFjdXJyZW50LmxlZnQpe2JyZWFrO30KaWYoa2V5PGN1cnJlbnQubGVmdC5rZXkpe2NvbnN0IHRtcD1jdXJyZW50LmxlZnQ7Y3VycmVudC5sZWZ0PXRtcC5yaWdodDt0bXAucmlnaHQ9Y3VycmVudDtjdXJyZW50PXRtcDtpZighY3VycmVudC5sZWZ0KXticmVhazt9fQpyaWdodC5sZWZ0PWN1cnJlbnQ7cmlnaHQ9Y3VycmVudDtjdXJyZW50PWN1cnJlbnQubGVmdDt9ZWxzZSBpZihrZXk+Y3VycmVudC5rZXkpe2lmKCFjdXJyZW50LnJpZ2h0KXticmVhazt9CmlmKGtleT5jdXJyZW50LnJpZ2h0LmtleSl7Y29uc3QgdG1wPWN1cnJlbnQucmlnaHQ7Y3VycmVudC5yaWdodD10bXAubGVmdDt0bXAubGVmdD1jdXJyZW50O2N1cnJlbnQ9dG1wO2lmKCFjdXJyZW50LnJpZ2h0KXticmVhazt9fQpsZWZ0LnJpZ2h0PWN1cnJlbnQ7bGVmdD1jdXJyZW50O2N1cnJlbnQ9Y3VycmVudC5yaWdodDt9ZWxzZXticmVhazt9fQpsZWZ0LnJpZ2h0PWN1cnJlbnQubGVmdDtyaWdodC5sZWZ0PWN1cnJlbnQucmlnaHQ7Y3VycmVudC5sZWZ0PWR1bW15LnJpZ2h0O2N1cnJlbnQucmlnaHQ9ZHVtbXkubGVmdDt0aGlzLnJvb3RfPWN1cnJlbnQ7fTtTcGxheVRyZWUucHJvdG90eXBlLnRyYXZlcnNlXz1mdW5jdGlvbihmKXtjb25zdCBub2Rlc1RvVmlzaXQ9W3RoaXMucm9vdF9dO3doaWxlKG5vZGVzVG9WaXNpdC5sZW5ndGg+MCl7Y29uc3Qgbm9kZT1ub2Rlc1RvVmlzaXQuc2hpZnQoKTtpZihub2RlPT09bnVsbCljb250aW51ZTtmKG5vZGUpO25vZGVzVG9WaXNpdC5wdXNoKG5vZGUubGVmdCk7bm9kZXNUb1Zpc2l0LnB1c2gobm9kZS5yaWdodCk7fX07U3BsYXlUcmVlLk5vZGU9ZnVuY3Rpb24oa2V5LHZhbHVlKXt0aGlzLmtleT1rZXk7dGhpcy52YWx1ZT12YWx1ZTt9O1NwbGF5VHJlZS5Ob2RlLnByb3RvdHlwZS5sZWZ0PW51bGw7U3BsYXlUcmVlLk5vZGUucHJvdG90eXBlLnJpZ2h0PW51bGw7cmV0dXJue1NwbGF5VHJlZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci52OCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb2RlTWFwKCl7dGhpcy5keW5hbWljc189bmV3IHRyLmUuaW1wb3J0ZXIudjguU3BsYXlUcmVlKCk7dGhpcy5keW5hbWljc05hbWVHZW5fPW5ldyB0ci5lLmltcG9ydGVyLnY4LkNvZGVNYXAuTmFtZUdlbmVyYXRvcigpO3RoaXMuc3RhdGljc189bmV3IHRyLmUuaW1wb3J0ZXIudjguU3BsYXlUcmVlKCk7dGhpcy5saWJyYXJpZXNfPW5ldyB0ci5lLmltcG9ydGVyLnY4LlNwbGF5VHJlZSgpO3RoaXMucGFnZXNfPVtdO30KQ29kZU1hcC5QQUdFX0FMSUdOTUVOVD0xMjtDb2RlTWFwLlBBR0VfU0laRT0xPDxDb2RlTWFwLlBBR0VfQUxJR05NRU5UO0NvZGVNYXAucHJvdG90eXBlLmFkZENvZGU9ZnVuY3Rpb24oc3RhcnQsY29kZUVudHJ5KXt0aGlzLmRlbGV0ZUFsbENvdmVyZWROb2Rlc18odGhpcy5keW5hbWljc18sc3RhcnQsc3RhcnQrY29kZUVudHJ5LnNpemUpO3RoaXMuZHluYW1pY3NfLmluc2VydChzdGFydCxjb2RlRW50cnkpO307Q29kZU1hcC5wcm90b3R5cGUubW92ZUNvZGU9ZnVuY3Rpb24oZnJvbSx0byl7Y29uc3QgcmVtb3ZlZE5vZGU9dGhpcy5keW5hbWljc18ucmVtb3ZlKGZyb20pO3RoaXMuZGVsZXRlQWxsQ292ZXJlZE5vZGVzXyh0aGlzLmR5bmFtaWNzXyx0byx0bytyZW1vdmVkTm9kZS52YWx1ZS5zaXplKTt0aGlzLmR5bmFtaWNzXy5pbnNlcnQodG8scmVtb3ZlZE5vZGUudmFsdWUpO307Q29kZU1hcC5wcm90b3R5cGUuZGVsZXRlQ29kZT1mdW5jdGlvbihzdGFydCl7Y29uc3QgcmVtb3ZlZE5vZGU9dGhpcy5keW5hbWljc18ucmVtb3ZlKHN0YXJ0KTt9O0NvZGVNYXAucHJvdG90eXBlLmFkZExpYnJhcnk9ZnVuY3Rpb24oc3RhcnQsY29kZUVudHJ5KXt0aGlzLm1hcmtQYWdlc18oc3RhcnQsc3RhcnQrY29kZUVudHJ5LnNpemUpO3RoaXMubGlicmFyaWVzXy5pbnNlcnQoc3RhcnQsY29kZUVudHJ5KTt9O0NvZGVNYXAucHJvdG90eXBlLmFkZFN0YXRpY0NvZGU9ZnVuY3Rpb24oc3RhcnQsY29kZUVudHJ5KXt0aGlzLnN0YXRpY3NfLmluc2VydChzdGFydCxjb2RlRW50cnkpO307Q29kZU1hcC5wcm90b3R5cGUubWFya1BhZ2VzXz1mdW5jdGlvbihzdGFydCxlbmQpe2ZvcihsZXQgYWRkcj1zdGFydDthZGRyPD1lbmQ7YWRkcis9Q29kZU1hcC5QQUdFX1NJWkUpe3RoaXMucGFnZXNfW2FkZHI+Pj5Db2RlTWFwLlBBR0VfQUxJR05NRU5UXT0xO319O0NvZGVNYXAucHJvdG90eXBlLmRlbGV0ZUFsbENvdmVyZWROb2Rlc189ZnVuY3Rpb24odHJlZSxzdGFydCxlbmQpe2NvbnN0IHRvRGVsZXRlPVtdO2xldCBhZGRyPWVuZC0xO3doaWxlKGFkZHI+PXN0YXJ0KXtjb25zdCBub2RlPXRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oYWRkcik7aWYoIW5vZGUpYnJlYWs7Y29uc3Qgc3RhcnQyPW5vZGUua2V5O2NvbnN0IGVuZDI9c3RhcnQyK25vZGUudmFsdWUuc2l6ZTtpZihzdGFydDI8ZW5kJiZzdGFydDxlbmQyKXRvRGVsZXRlLnB1c2goc3RhcnQyKTthZGRyPXN0YXJ0Mi0xO30KZm9yKGxldCBpPTAsbD10b0RlbGV0ZS5sZW5ndGg7aTxsOysraSl0cmVlLnJlbW92ZSh0b0RlbGV0ZVtpXSk7fTtDb2RlTWFwLnByb3RvdHlwZS5pc0FkZHJlc3NCZWxvbmdzVG9fPWZ1bmN0aW9uKGFkZHIsbm9kZSl7cmV0dXJuIGFkZHI+PW5vZGUua2V5JiZhZGRyPChub2RlLmtleStub2RlLnZhbHVlLnNpemUpO307Q29kZU1hcC5wcm90b3R5cGUuZmluZEluVHJlZV89ZnVuY3Rpb24odHJlZSxhZGRyKXtjb25zdCBub2RlPXRyZWUuZmluZEdyZWF0ZXN0TGVzc1RoYW4oYWRkcik7cmV0dXJuIG5vZGUmJnRoaXMuaXNBZGRyZXNzQmVsb25nc1RvXyhhZGRyLG5vZGUpP25vZGUudmFsdWU6bnVsbDt9O0NvZGVNYXAucHJvdG90eXBlLmZpbmRFbnRyeUluTGlicmFyaWVzPWZ1bmN0aW9uKGFkZHIpe2NvbnN0IHBhZ2VBZGRyPWFkZHI+Pj5Db2RlTWFwLlBBR0VfQUxJR05NRU5UO2lmKHBhZ2VBZGRyIGluIHRoaXMucGFnZXNfKXtyZXR1cm4gdGhpcy5maW5kSW5UcmVlXyh0aGlzLmxpYnJhcmllc18sYWRkcik7fQpyZXR1cm4gdW5kZWZpbmVkO307Q29kZU1hcC5wcm90b3R5cGUuZmluZEVudHJ5PWZ1bmN0aW9uKGFkZHIpe2NvbnN0IHBhZ2VBZGRyPWFkZHI+Pj5Db2RlTWFwLlBBR0VfQUxJR05NRU5UO2lmKHBhZ2VBZGRyIGluIHRoaXMucGFnZXNfKXtyZXR1cm4gdGhpcy5maW5kSW5UcmVlXyh0aGlzLnN0YXRpY3NfLGFkZHIpfHx0aGlzLmZpbmRJblRyZWVfKHRoaXMubGlicmFyaWVzXyxhZGRyKTt9CmNvbnN0IG1pbj10aGlzLmR5bmFtaWNzXy5maW5kTWluKCk7Y29uc3QgbWF4PXRoaXMuZHluYW1pY3NfLmZpbmRNYXgoKTtpZihtYXghPT1udWxsJiZhZGRyPChtYXgua2V5K21heC52YWx1ZS5zaXplKSYmYWRkcj49bWluLmtleSl7Y29uc3QgZHluYUVudHJ5PXRoaXMuZmluZEluVHJlZV8odGhpcy5keW5hbWljc18sYWRkcik7aWYoZHluYUVudHJ5PT09bnVsbClyZXR1cm4gbnVsbDtpZighZHluYUVudHJ5Lm5hbWVVcGRhdGVkXyl7ZHluYUVudHJ5Lm5hbWU9dGhpcy5keW5hbWljc05hbWVHZW5fLmdldE5hbWUoZHluYUVudHJ5Lm5hbWUpO2R5bmFFbnRyeS5uYW1lVXBkYXRlZF89dHJ1ZTt9CnJldHVybiBkeW5hRW50cnk7fQpyZXR1cm4gbnVsbDt9O0NvZGVNYXAucHJvdG90eXBlLmZpbmREeW5hbWljRW50cnlCeVN0YXJ0QWRkcmVzcz1mdW5jdGlvbihhZGRyKXtjb25zdCBub2RlPXRoaXMuZHluYW1pY3NfLmZpbmQoYWRkcik7cmV0dXJuIG5vZGU/bm9kZS52YWx1ZTpudWxsO307Q29kZU1hcC5wcm90b3R5cGUuZ2V0QWxsRHluYW1pY0VudHJpZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keW5hbWljc18uZXhwb3J0VmFsdWVzKCk7fTtDb2RlTWFwLnByb3RvdHlwZS5nZXRBbGxEeW5hbWljRW50cmllc1dpdGhBZGRyZXNzZXM9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5keW5hbWljc18uZXhwb3J0S2V5c0FuZFZhbHVlcygpO307Q29kZU1hcC5wcm90b3R5cGUuZ2V0QWxsU3RhdGljRW50cmllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLnN0YXRpY3NfLmV4cG9ydFZhbHVlcygpO307Q29kZU1hcC5wcm90b3R5cGUuZ2V0QWxsTGlicmFyaWVzRW50cmllcz1mdW5jdGlvbigpe3JldHVybiB0aGlzLmxpYnJhcmllc18uZXhwb3J0VmFsdWVzKCk7fTtDb2RlTWFwLkNvZGVTdGF0ZT17Q09NUElMRUQ6MCxPUFRJTUlaQUJMRToxLE9QVElNSVpFRDoyfTtDb2RlTWFwLkNvZGVFbnRyeT1mdW5jdGlvbihzaXplLG9wdF9uYW1lLG9wdF90eXBlKXt0aGlzLmlkPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMuc2l6ZT1zaXplO3RoaXMubmFtZV89b3B0X25hbWV8fCcnO3RoaXMudHlwZT1vcHRfdHlwZXx8Jyc7dGhpcy5uYW1lVXBkYXRlZF89ZmFsc2U7fTtDb2RlTWFwLkNvZGVFbnRyeS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLGdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fSxzZXQgbmFtZSh2YWx1ZSl7dGhpcy5uYW1lXz12YWx1ZTt9LHRvU3RyaW5nKCl7dGhpcy5uYW1lXysnOiAnK3RoaXMuc2l6ZS50b1N0cmluZygxNik7fX07Q29kZU1hcC5Db2RlRW50cnkuVFlQRT17U0hBUkVEX0xJQjonU0hBUkVEX0xJQicsQ1BQOidDUFAnfTtDb2RlTWFwLkR5bmFtaWNGdW5jQ29kZUVudHJ5PWZ1bmN0aW9uKHNpemUsdHlwZSxmdW5jLHN0YXRlKXtDb2RlTWFwLkNvZGVFbnRyeS5jYWxsKHRoaXMsc2l6ZSwnJyx0eXBlKTt0aGlzLmZ1bmM9ZnVuYzt0aGlzLnN0YXRlPXN0YXRlO307Q29kZU1hcC5EeW5hbWljRnVuY0NvZGVFbnRyeS5TVEFURV9QUkVGSVg9WycnLCd+JywnKiddO0NvZGVNYXAuRHluYW1pY0Z1bmNDb2RlRW50cnkucHJvdG90eXBlPXtfX3Byb3RvX186Q29kZU1hcC5Db2RlRW50cnkucHJvdG90eXBlLGdldCBuYW1lKCl7cmV0dXJuIENvZGVNYXAuRHluYW1pY0Z1bmNDb2RlRW50cnkuU1RBVEVfUFJFRklYW3RoaXMuc3RhdGVdKwp0aGlzLmZ1bmMubmFtZTt9LHNldCBuYW1lKHZhbHVlKXt0aGlzLm5hbWVfPXZhbHVlO30sZ2V0UmF3TmFtZSgpe3JldHVybiB0aGlzLmZ1bmMuZ2V0TmFtZSgpO30saXNKU0Z1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSx0b1N0cmluZygpe3JldHVybiB0aGlzLnR5cGUrJzogJyt0aGlzLm5hbWUrJzogJyt0aGlzLnNpemUudG9TdHJpbmcoMTYpO319O0NvZGVNYXAuRnVuY3Rpb25FbnRyeT1mdW5jdGlvbihuYW1lKXtDb2RlTWFwLkNvZGVFbnRyeS5jYWxsKHRoaXMsMCxuYW1lKTt9O0NvZGVNYXAuRnVuY3Rpb25FbnRyeS5wcm90b3R5cGU9e19fcHJvdG9fXzpDb2RlTWFwLkNvZGVFbnRyeS5wcm90b3R5cGUsZ2V0IG5hbWUoKXtsZXQgbmFtZT10aGlzLm5hbWVfO2lmKG5hbWUubGVuZ3RoPT09MCl7bmFtZT0nPGFub255bW91cz4nO31lbHNlIGlmKG5hbWUuY2hhckF0KDApPT09JyAnKXtuYW1lPSc8YW5vbnltb3VzPicrbmFtZTt9CnJldHVybiBuYW1lO30sc2V0IG5hbWUodmFsdWUpe3RoaXMubmFtZV89dmFsdWU7fX07Q29kZU1hcC5OYW1lR2VuZXJhdG9yPWZ1bmN0aW9uKCl7dGhpcy5rbm93bk5hbWVzXz17fTt9O0NvZGVNYXAuTmFtZUdlbmVyYXRvci5wcm90b3R5cGUuZ2V0TmFtZT1mdW5jdGlvbihuYW1lKXtpZighKG5hbWUgaW4gdGhpcy5rbm93bk5hbWVzXykpe3RoaXMua25vd25OYW1lc19bbmFtZV09MDtyZXR1cm4gbmFtZTt9CmNvbnN0IGNvdW50PSsrdGhpcy5rbm93bk5hbWVzX1tuYW1lXTtyZXR1cm4gbmFtZSsnIHsnK2NvdW50Kyd9Jzt9O3JldHVybntDb2RlTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLnY4JyxmdW5jdGlvbigpe2Z1bmN0aW9uIENzdlBhcnNlcigpe30KQ3N2UGFyc2VyLkNTVl9GSUVMRF9SRV89L14iKCg/OlteIl18IiIpKikifChbXixdKikvO0NzdlBhcnNlci5ET1VCTEVfUVVPVEVfUkVfPS8iIi9nO0NzdlBhcnNlci5wcm90b3R5cGUucGFyc2VMaW5lPWZ1bmN0aW9uKGxpbmUpe2NvbnN0IGZpZWxkUmU9Q3N2UGFyc2VyLkNTVl9GSUVMRF9SRV87Y29uc3QgZG91YmxlUXVvdGVSZT1Dc3ZQYXJzZXIuRE9VQkxFX1FVT1RFX1JFXztsZXQgcG9zPTA7Y29uc3QgZW5kUG9zPWxpbmUubGVuZ3RoO2NvbnN0IGZpZWxkcz1bXTtpZihlbmRQb3M+MCl7ZG97Y29uc3QgZmllbGRNYXRjaD1maWVsZFJlLmV4ZWMobGluZS5zdWJzdHIocG9zKSk7aWYodHlwZW9mIGZpZWxkTWF0Y2hbMV09PT0nc3RyaW5nJyl7Y29uc3QgZmllbGQ9ZmllbGRNYXRjaFsxXTtwb3MrPWZpZWxkLmxlbmd0aCszO2ZpZWxkcy5wdXNoKGZpZWxkLnJlcGxhY2UoZG91YmxlUXVvdGVSZSwnIicpKTt9ZWxzZXtjb25zdCBmaWVsZD1maWVsZE1hdGNoWzJdO3Bvcys9ZmllbGQubGVuZ3RoKzE7ZmllbGRzLnB1c2goZmllbGQpO319d2hpbGUocG9zPD1lbmRQb3MpO30KcmV0dXJuIGZpZWxkczt9O2Z1bmN0aW9uIExvZ1JlYWRlcihkaXNwYXRjaFRhYmxlKXt0aGlzLmRpc3BhdGNoVGFibGVfPWRpc3BhdGNoVGFibGU7dGhpcy5saW5lTnVtXz0wO3RoaXMuY3N2UGFyc2VyXz1uZXcgQ3N2UGFyc2VyKCk7fQpMb2dSZWFkZXIucHJvdG90eXBlLnByaW50RXJyb3I9ZnVuY3Rpb24oc3RyKXt9O0xvZ1JlYWRlci5wcm90b3R5cGUucHJvY2Vzc0xvZ0NodW5rPWZ1bmN0aW9uKGNodW5rKXt0aGlzLnByb2Nlc3NMb2dfKGNodW5rLnNwbGl0KCdcbicpKTt9O0xvZ1JlYWRlci5wcm90b3R5cGUucHJvY2Vzc0xvZ0xpbmU9ZnVuY3Rpb24obGluZSl7dGhpcy5wcm9jZXNzTG9nXyhbbGluZV0pO307TG9nUmVhZGVyLnByb3RvdHlwZS5wcm9jZXNzU3RhY2s9ZnVuY3Rpb24ocGMsZnVuYyxzdGFjayl7Y29uc3QgZnVsbFN0YWNrPWZ1bmM/W3BjLGZ1bmNdOltwY107bGV0IHByZXZGcmFtZT1wYztmb3IobGV0IGk9MCxuPXN0YWNrLmxlbmd0aDtpPG47KytpKXtjb25zdCBmcmFtZT1zdGFja1tpXTtjb25zdCBmaXJzdENoYXI9ZnJhbWUuY2hhckF0KDApO2lmKGZpcnN0Q2hhcj09PScrJ3x8Zmlyc3RDaGFyPT09Jy0nKXtwcmV2RnJhbWUrPXBhcnNlSW50KGZyYW1lLDE2KTtmdWxsU3RhY2sucHVzaChwcmV2RnJhbWUpO31lbHNlIGlmKGZpcnN0Q2hhciE9PSdvJyl7ZnVsbFN0YWNrLnB1c2gocGFyc2VJbnQoZnJhbWUsMTYpKTt9fQpyZXR1cm4gZnVsbFN0YWNrO307TG9nUmVhZGVyLnByb3RvdHlwZS5za2lwRGlzcGF0Y2g9ZnVuY3Rpb24oZGlzcGF0Y2gpe3JldHVybiBmYWxzZTt9O0xvZ1JlYWRlci5wcm90b3R5cGUuZGlzcGF0Y2hMb2dSb3dfPWZ1bmN0aW9uKGZpZWxkcyl7Y29uc3QgY29tbWFuZD1maWVsZHNbMF07aWYoIShjb21tYW5kIGluIHRoaXMuZGlzcGF0Y2hUYWJsZV8pKXJldHVybjtjb25zdCBkaXNwYXRjaD10aGlzLmRpc3BhdGNoVGFibGVfW2NvbW1hbmRdO2lmKGRpc3BhdGNoPT09bnVsbHx8dGhpcy5za2lwRGlzcGF0Y2goZGlzcGF0Y2gpKXtyZXR1cm47fQpjb25zdCBwYXJzZWRGaWVsZHM9W107Zm9yKGxldCBpPTA7aTxkaXNwYXRjaC5wYXJzZXJzLmxlbmd0aDsrK2kpe2NvbnN0IHBhcnNlcj1kaXNwYXRjaC5wYXJzZXJzW2ldO2lmKHBhcnNlcj09PW51bGwpe3BhcnNlZEZpZWxkcy5wdXNoKGZpZWxkc1sxK2ldKTt9ZWxzZSBpZih0eXBlb2YgcGFyc2VyPT09J2Z1bmN0aW9uJyl7cGFyc2VkRmllbGRzLnB1c2gocGFyc2VyKGZpZWxkc1sxK2ldKSk7fWVsc2V7cGFyc2VkRmllbGRzLnB1c2goZmllbGRzLnNsaWNlKDEraSkpO2JyZWFrO319CmRpc3BhdGNoLnByb2Nlc3Nvci5hcHBseSh0aGlzLHBhcnNlZEZpZWxkcyk7fTtMb2dSZWFkZXIucHJvdG90eXBlLnByb2Nlc3NMb2dfPWZ1bmN0aW9uKGxpbmVzKXtmb3IobGV0IGk9MCxuPWxpbmVzLmxlbmd0aDtpPG47KytpLCsrdGhpcy5saW5lTnVtXyl7Y29uc3QgbGluZT1saW5lc1tpXTtpZighbGluZSl7Y29udGludWU7fQp0cnl7Y29uc3QgZmllbGRzPXRoaXMuY3N2UGFyc2VyXy5wYXJzZUxpbmUobGluZSk7dGhpcy5kaXNwYXRjaExvZ1Jvd18oZmllbGRzKTt9Y2F0Y2goZSl7dGhpcy5wcmludEVycm9yKCdsaW5lICcrKHRoaXMubGluZU51bV8rMSkrJzogJysKKGUubWVzc2FnZXx8ZSkpO319fTtyZXR1cm57TG9nUmVhZGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBQcm9maWxlTm9kZShpZCx0aXRsZSxwYXJlbnROb2RlKXt0aGlzLmlkXz1pZDt0aGlzLnRpdGxlXz10aXRsZTt0aGlzLnBhcmVudE5vZGVfPXBhcmVudE5vZGU7dGhpcy5jb2xvcklkXz0tMTt0aGlzLnVzZXJGcmllbmRseVN0YWNrXz1bXTt9ClByb2ZpbGVOb2RlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMudGl0bGVfO30sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdGhpcy5wYXJlbnROb2RlXzt9LHNldCBwYXJlbnROb2RlKHZhbHVlKXt0aGlzLnBhcmVudE5vZGVfPXZhbHVlO30sZ2V0IGlkKCl7cmV0dXJuIHRoaXMuaWRfO30sZ2V0IGNvbG9ySWQoKXtyZXR1cm4gdGhpcy5jb2xvcklkXzt9LHNldCBjb2xvcklkKHZhbHVlKXt0aGlzLmNvbG9ySWRfPXZhbHVlO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtyZXR1cm4gdGhpcy50aXRsZV87fSxnZXQgdXNlckZyaWVuZGx5U3RhY2soKXtpZih0aGlzLnVzZXJGcmllbmRseVN0YWNrXy5sZW5ndGg9PT0wKXt0aGlzLnVzZXJGcmllbmRseVN0YWNrXz1bdGhpcy51c2VyRnJpZW5kbHlOYW1lXTtpZih0aGlzLnBhcmVudE5vZGVfIT09dW5kZWZpbmVkKXt0aGlzLnVzZXJGcmllbmRseVN0YWNrXz10aGlzLnVzZXJGcmllbmRseVN0YWNrXy5jb25jYXQodGhpcy5wYXJlbnROb2RlXy51c2VyRnJpZW5kbHlTdGFjayk7fX0KcmV0dXJuIHRoaXMudXNlckZyaWVuZGx5U3RhY2tfO30sZ2V0IHNhbXBsZVRpdGxlKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQuJyk7fX07dHIubW9kZWwuRXZlbnRSZWdpc3RyeS5yZWdpc3RlcihQcm9maWxlTm9kZSx7bmFtZTonTm9kZScscGx1cmFsTmFtZTonTm9kZXMnfSk7cmV0dXJue1Byb2ZpbGVOb2RlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IFByb2ZpbGVOb2RlPXRyLm1vZGVsLlByb2ZpbGVOb2RlO2Z1bmN0aW9uIFY4Q3B1UHJvZmlsZU5vZGUoaWQsY2FsbEZyYW1lLHBhcmVudE5vZGUpe1Byb2ZpbGVOb2RlLmNhbGwodGhpcyxpZCxjYWxsRnJhbWUuZnVuY3Rpb25OYW1lLHBhcmVudE5vZGUpO3RoaXMuY2FsbEZyYW1lXz10ci5iLmRlZXBDb3B5KGNhbGxGcmFtZSk7dGhpcy5kZW9wdFJlYXNvbl89Jyc7dGhpcy5jb2xvcklkXz10ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjYWxsRnJhbWUuZnVuY3Rpb25OYW1lKTt9ClY4Q3B1UHJvZmlsZU5vZGUucHJvdG90eXBlPXtfX3Byb3RvX186UHJvZmlsZU5vZGUucHJvdG90eXBlLGdldCBmdW5jdGlvbk5hbWUoKXtyZXR1cm4gdGhpcy5jYWxsRnJhbWVfLmZ1bmN0aW9uTmFtZTt9LGdldCBzY3JpcHRJZCgpe3JldHVybiB0aGlzLmNhbGxGcmFtZV8uc2NyaXB0SWQ7fSxnZXQgdXJsKCl7aWYoIXRoaXMuY2FsbEZyYW1lXy51cmwpe3JldHVybid1bmtub3duJzt9CmxldCB1cmw9dGhpcy5jYWxsRnJhbWVfLnVybDtpZih0aGlzLmNhbGxGcmFtZV8ubGluZU51bWJlcj09PXVuZGVmaW5lZCl7cmV0dXJuIHVybDt9CnVybD11cmwrJzonK3RoaXMuY2FsbEZyYW1lXy5saW5lTnVtYmVyO2lmKHRoaXMuY2FsbEZyYW1lXy5jb2x1bW5OdW1iZXI9PT11bmRlZmluZWQpe3JldHVybiB1cmw7fQp1cmw9dXJsKyc6Jyt0aGlzLmNhbGxGcmFtZV8uY29sdW1uTnVtYmVyO3JldHVybiB1cmw7fSxnZXQgZGVvcHRSZWFzb24oKXtyZXR1cm4gdGhpcy5kZW9wdFJlYXNvbl87fSxzZXQgZGVvcHRSZWFzb24odmFsdWUpe3RoaXMuZGVvcHRSZWFzb25fPXZhbHVlO30sZ2V0IHVzZXJGcmllbmRseU5hbWUoKXtjb25zdCBuYW1lPXRoaXMuZnVuY3Rpb25OYW1lKycgdXJsOiAnK3RoaXMudXJsO3JldHVybiF0aGlzLmRlb3B0UmVhc29uXz9uYW1lOm5hbWUrJyBEZW9wdGltaXplZCByZWFzb246ICcrdGhpcy5kZW9wdFJlYXNvbl87fSxnZXQgc2FtcGxlVGl0bGUoKXtyZXR1cm4nVjggU2FtcGxlJzt9fTtWOENwdVByb2ZpbGVOb2RlLmNvbnN0cnVjdEZyb21PYmplY3Q9ZnVuY3Rpb24ocHJvZmlsZVRyZWUsbm9kZSl7Y29uc3Qgbm9kZUlkPW5vZGUuaWQ7aWYobm9kZUlkPT09MSl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IHBhcmVudE5vZGU9cHJvZmlsZVRyZWUuZ2V0Tm9kZShub2RlLnBhcmVudCk7Y29uc3QgcHJvZmlsZU5vZGU9bmV3IFY4Q3B1UHJvZmlsZU5vZGUobm9kZUlkLG5vZGUuY2FsbEZyYW1lLHBhcmVudE5vZGUpO2lmKG5vZGUuZGVvcHRSZWFzb24hPT11bmRlZmluZWQpe3Byb2ZpbGVOb2RlLmRlb3B0UmVhc29uPW5vZGUuZGVvcHRSZWFzb247fQpyZXR1cm4gcHJvZmlsZU5vZGU7fTtQcm9maWxlTm9kZS5zdWJUeXBlcy5yZWdpc3RlcihWOENwdVByb2ZpbGVOb2RlLHt0eXBlTmFtZTonY3B1UHJvZmlsZScsbmFtZTondjggY3B1IHByb2ZpbGUgbm9kZScscGx1cmFsTmFtZTondjggY3B1IHByb2ZpbGUgbm9kZXMnfSk7UHJvZmlsZU5vZGUuc3ViVHlwZXMucmVnaXN0ZXIoVjhDcHVQcm9maWxlTm9kZSx7dHlwZU5hbWU6J2xlZ2FjeVNhbXBsZScsbmFtZTondjggY3B1IHByb2ZpbGUgbm9kZScscGx1cmFsTmFtZTondjggY3B1IHByb2ZpbGUgbm9kZXMnfSk7cmV0dXJue1Byb2ZpbGVOb2RlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBQcm9maWxlVHJlZSgpe3RoaXMuc3RhcnRUaW1lXz11bmRlZmluZWQ7dGhpcy5lbmRUaW1lXz11bmRlZmluZWQ7dGhpcy50cmVlXz1uZXcgTWFwKCk7dGhpcy5waWRfPS0xO3RoaXMudGlkXz0tMTt9ClByb2ZpbGVUcmVlLnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdC5wcm90b3R5cGUsZ2V0IHBpZCgpe3JldHVybiB0aGlzLnBpZF87fSxzZXQgcGlkKHZhbHVlKXt0aGlzLnBpZF89dmFsdWU7fSxnZXQgdGlkKCl7cmV0dXJuIHRoaXMudGlkXzt9LHNldCB0aWQodmFsdWUpe3RoaXMudGlkXz12YWx1ZTt9LGdldCB0cmVlKCl7cmV0dXJuIHRoaXMudHJlZV87fSxnZXQgc3RhcnRUaW1lKCl7cmV0dXJuIHRoaXMuc3RhcnRUaW1lXzt9LHNldCBzdGFydFRpbWUodmFsdWUpe3RoaXMuc3RhcnRUaW1lXz12YWx1ZTt0aGlzLmVuZFRpbWVfPXZhbHVlO30sZ2V0IGVuZFRpbWUoKXtyZXR1cm4gdGhpcy5lbmRUaW1lXzt9LHNldCBlbmRUaW1lKHZhbHVlKXt0aGlzLmVuZFRpbWVfPXZhbHVlO30sYWRkKG5vZGUpe2lmKHRoaXMudHJlZV8uaGFzKG5vZGUuaWQpKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbmZsaWN0IGlkIGluIHRoZSBwcm9maWxlIHRyZWUuJyk7fQp0aGlzLnRyZWVfLnNldChub2RlLmlkLG5vZGUpO3JldHVybiBub2RlO30sZ2V0Tm9kZShub2RlSWQpe3JldHVybiB0aGlzLnRyZWVfLmdldChub2RlSWQpO319O3JldHVybntQcm9maWxlVHJlZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci52OCcsZnVuY3Rpb24oKXtjb25zdCBDb2RlRW50cnk9dHIuZS5pbXBvcnRlci52OC5Db2RlTWFwLkNvZGVFbnRyeTtjb25zdCBDb2RlTWFwPXRyLmUuaW1wb3J0ZXIudjguQ29kZU1hcDtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IER5bmFtaWNGdW5jQ29kZUVudHJ5PXRyLmUuaW1wb3J0ZXIudjguQ29kZU1hcC5EeW5hbWljRnVuY0NvZGVFbnRyeTtjb25zdCBGdW5jdGlvbkVudHJ5PXRyLmUuaW1wb3J0ZXIudjguQ29kZU1hcC5GdW5jdGlvbkVudHJ5O2NvbnN0IFByb2ZpbGVOb2RlVHlwZT10ci5tb2RlbC5Qcm9maWxlTm9kZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3Rvcih1bmRlZmluZWQsJ2xlZ2FjeVNhbXBsZScpO2Z1bmN0aW9uIFY4TG9nSW1wb3J0ZXIobW9kZWwsZXZlbnREYXRhKXt0aGlzLmltcG9ydFByaW9yaXR5PTM7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5sb2dEYXRhXz1ldmVudERhdGE7dGhpcy5jb2RlX21hcF89bmV3IENvZGVNYXAoKTt0aGlzLnY4X3RpbWVyX3RocmVhZF89dW5kZWZpbmVkO3RoaXMudjhfdGhyZWFkXz11bmRlZmluZWQ7dGhpcy5wcm9maWxlVHJlZV89bmV3IHRyLm1vZGVsLlByb2ZpbGVUcmVlKCk7dGhpcy5wcm9maWxlVHJlZV8uYWRkKG5ldyBQcm9maWxlTm9kZVR5cGUoLTEse3VybDonJyxmdW5jdGlvbk5hbWU6J3Vua25vd24nfSkpO3RoaXMudjhfc3RhY2tfdGltZWxpbmVfPVtdO30KY29uc3Qga1Y4QmluYXJ5U3VmZml4ZXM9WycvZDgnLCcvbGlidjguc28nXTtjb25zdCBUaW1lckV2ZW50RGVmYXVsdEFyZ3M9eydWOC5FeGVjdXRlJzp7cGF1c2U6ZmFsc2Usbm9fZXhlY3V0aW9uOmZhbHNlfSwnVjguRXh0ZXJuYWwnOntwYXVzZTpmYWxzZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LkNvbXBpbGVGdWxsQ29kZSc6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9LCdWOC5SZWNvbXBpbGVTeW5jaHJvbm91cyc6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9LCdWOC5SZWNvbXBpbGVQYXJhbGxlbCc6e3BhdXNlOmZhbHNlLG5vX2V4ZWN1dGlvbjpmYWxzZX0sJ1Y4LkNvbXBpbGVFdmFsJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LlBhcnNlJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LlByZVBhcnNlJzp7cGF1c2U6dHJ1ZSxub19leGVjdXRpb246dHJ1ZX0sJ1Y4LlBhcnNlTGF6eSc6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9LCdWOC5HQ1NjYXZlbmdlcic6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9LCdWOC5HQ0NvbXBhY3Rvcic6e3BhdXNlOnRydWUsbm9fZXhlY3V0aW9uOnRydWV9LCdWOC5HQ0NvbnRleHQnOntwYXVzZTp0cnVlLG5vX2V4ZWN1dGlvbjp0cnVlfX07VjhMb2dJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnREYXRhKXtpZih0eXBlb2YoZXZlbnREYXRhKSE9PSdzdHJpbmcnJiYhKGV2ZW50RGF0YSBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9CnJldHVybiBldmVudERhdGEuc3Vic3RyaW5nKDAsMTEpPT09J3Y4LXZlcnNpb24sJ3x8ZXZlbnREYXRhLnN1YnN0cmluZygwLDEyKT09PSd0aW1lci1ldmVudCwnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsNSk9PT0ndGljaywnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsMTUpPT09J3NoYXJlZC1saWJyYXJ5LCd8fGV2ZW50RGF0YS5zdWJzdHJpbmcoMCw5KT09PSdwcm9maWxlciwnfHxldmVudERhdGEuc3Vic3RyaW5nKDAsMTQpPT09J2NvZGUtY3JlYXRpb24sJzt9O1Y4TG9nSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nVjhMb2dJbXBvcnRlcic7fSxwcm9jZXNzVGltZXJFdmVudF8obmFtZSxzdGFydEluVXMsbGVuZ3RoSW5Vcyl7Y29uc3QgYXJncz1UaW1lckV2ZW50RGVmYXVsdEFyZ3NbbmFtZV07aWYoYXJncz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3RhcnRJbk1zPXRyLmIuY29udmVydFVuaXQoc3RhcnRJblVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2NvbnN0IGxlbmd0aEluTXM9dHIuYi5jb252ZXJ0VW5pdChsZW5ndGhJblVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2NvbnN0IGNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG5hbWUpO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgndjgnLG5hbWUsY29sb3JJZCxzdGFydEluTXMsYXJncyxsZW5ndGhJbk1zKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30scHJvY2Vzc1RpbWVyRXZlbnRTdGFydF8obmFtZSxzdGFydEluVXMpe2NvbnN0IGFyZ3M9VGltZXJFdmVudERlZmF1bHRBcmdzW25hbWVdO2lmKGFyZ3M9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHN0YXJ0SW5Ncz10ci5iLmNvbnZlcnRVbml0KHN0YXJ0SW5Vcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5iZWdpblNsaWNlKCd2OCcsbmFtZSxzdGFydEluTXMsYXJncyk7fSxwcm9jZXNzVGltZXJFdmVudEVuZF8obmFtZSxlbmRJblVzKXtjb25zdCBlbmRJbk1zPXRyLmIuY29udmVydFVuaXQoZW5kSW5Vcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlDUk8sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJKTt0aGlzLnY4X3RpbWVyX3RocmVhZF8uc2xpY2VHcm91cC5lbmRTbGljZShlbmRJbk1zKTt9LHByb2Nlc3NDb2RlQ3JlYXRlRXZlbnRfKHR5cGUsa2luZCxhZGRyZXNzLHNpemUsbmFtZSxtYXliZUZ1bmMpe2Z1bmN0aW9uIHBhcnNlU3RhdGUocyl7c3dpdGNoKHMpe2Nhc2UnJzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuQ09NUElMRUQ7Y2FzZSd+JzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuT1BUSU1JWkFCTEU7Y2FzZScqJzpyZXR1cm4gQ29kZU1hcC5Db2RlU3RhdGUuT1BUSU1JWkVEO30KdGhyb3cgbmV3IEVycm9yKCd1bmtub3duIGNvZGUgc3RhdGU6ICcrcyk7fQppZihtYXliZUZ1bmMubGVuZ3RoKXtjb25zdCBmdW5jQWRkcj1wYXJzZUludChtYXliZUZ1bmNbMF0pO2NvbnN0IHN0YXRlPXBhcnNlU3RhdGUobWF5YmVGdW5jWzFdKTtsZXQgZnVuYz10aGlzLmNvZGVfbWFwXy5maW5kRHluYW1pY0VudHJ5QnlTdGFydEFkZHJlc3MoZnVuY0FkZHIpO2lmKCFmdW5jKXtmdW5jPW5ldyBGdW5jdGlvbkVudHJ5KG5hbWUpO2Z1bmMua2luZD1raW5kO3RoaXMuY29kZV9tYXBfLmFkZENvZGUoZnVuY0FkZHIsZnVuYyk7fWVsc2UgaWYoZnVuYy5uYW1lIT09bmFtZSl7ZnVuYy5uYW1lPW5hbWU7fQpsZXQgZW50cnk9dGhpcy5jb2RlX21hcF8uZmluZER5bmFtaWNFbnRyeUJ5U3RhcnRBZGRyZXNzKGFkZHJlc3MpO2lmKGVudHJ5KXtpZihlbnRyeS5zaXplPT09c2l6ZSYmZW50cnkuZnVuYz09PWZ1bmMpe2VudHJ5LnN0YXRlPXN0YXRlO319ZWxzZXtlbnRyeT1uZXcgRHluYW1pY0Z1bmNDb2RlRW50cnkoc2l6ZSx0eXBlLGZ1bmMsc3RhdGUpO2VudHJ5LmtpbmQ9a2luZDt0aGlzLmNvZGVfbWFwXy5hZGRDb2RlKGFkZHJlc3MsZW50cnkpO319ZWxzZXtjb25zdCBjb2RlRW50cnk9bmV3IENvZGVFbnRyeShzaXplLG5hbWUpO2NvZGVFbnRyeS5raW5kPWtpbmQ7dGhpcy5jb2RlX21hcF8uYWRkQ29kZShhZGRyZXNzLGNvZGVFbnRyeSk7fX0scHJvY2Vzc0NvZGVNb3ZlRXZlbnRfKGZyb20sdG8pe3RoaXMuY29kZV9tYXBfLm1vdmVDb2RlKGZyb20sdG8pO30scHJvY2Vzc0NvZGVEZWxldGVFdmVudF8oYWRkcmVzcyl7dGhpcy5jb2RlX21hcF8uZGVsZXRlQ29kZShhZGRyZXNzKTt9LHByb2Nlc3NTaGFyZWRMaWJyYXJ5XyhuYW1lLHN0YXJ0LGVuZCl7Y29uc3QgY29kZUVudHJ5PW5ldyBDb2RlRW50cnkoZW5kLXN0YXJ0LG5hbWUsQ29kZUVudHJ5LlRZUEUuU0hBUkVEX0xJQik7Y29kZUVudHJ5LmtpbmQ9LTM7Zm9yKGxldCBpPTA7aTxrVjhCaW5hcnlTdWZmaXhlcy5sZW5ndGg7aSsrKXtjb25zdCBzdWZmaXg9a1Y4QmluYXJ5U3VmZml4ZXNbaV07aWYobmFtZS5pbmRleE9mKHN1ZmZpeCxuYW1lLmxlbmd0aC1zdWZmaXgubGVuZ3RoKT49MCl7Y29kZUVudHJ5LmtpbmQ9LTE7YnJlYWs7fX0KdGhpcy5jb2RlX21hcF8uYWRkTGlicmFyeShzdGFydCxjb2RlRW50cnkpO30scHJvY2Vzc0NwcFN5bWJvbF8oYWRkcmVzcyxzaXplLG5hbWUpe2NvbnN0IGNvZGVFbnRyeT1uZXcgQ29kZUVudHJ5KHNpemUsbmFtZSxDb2RlRW50cnkuVFlQRS5DUFApO2NvZGVFbnRyeS5raW5kPS0xO3RoaXMuY29kZV9tYXBfLmFkZFN0YXRpY0NvZGUoYWRkcmVzcyxjb2RlRW50cnkpO30scHJvY2Vzc1RpY2tFdmVudF8ocGMsc3RhcnRJblVzLGlzRXh0ZXJuYWxDYWxsYmFjayx0b3NPckV4dGVybmFsQ2FsbGJhY2ssdm1zdGF0ZSxzdGFjayl7Y29uc3Qgc3RhcnRJbk1zPXRyLmIuY29udmVydFVuaXQoc3RhcnRJblVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2Z1bmN0aW9uIGZpbmRDaGlsZFdpdGhFbnRyeUlEKHN0YWNrRnJhbWUsZW50cnlJRCl7Zm9yKGxldCBpPTA7aTxzdGFja0ZyYW1lLmNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKHN0YWNrRnJhbWUuY2hpbGRyZW5baV0uZW50cnlJRD09PWVudHJ5SUQpe3JldHVybiBzdGFja0ZyYW1lLmNoaWxkcmVuW2ldO319CnJldHVybiB1bmRlZmluZWQ7fQpmdW5jdGlvbiBwcm9jZXNzU3RhY2socGMsZnVuYyxzdGFjayl7Y29uc3QgZnVsbFN0YWNrPWZ1bmM/W3BjLGZ1bmNdOltwY107bGV0IHByZXZGcmFtZT1wYztmb3IobGV0IGk9MCxuPXN0YWNrLmxlbmd0aDtpPG47KytpKXtjb25zdCBmcmFtZT1zdGFja1tpXTtjb25zdCBmaXJzdENoYXI9ZnJhbWUuY2hhckF0KDApO2lmKGZpcnN0Q2hhcj09PScrJ3x8Zmlyc3RDaGFyPT09Jy0nKXtwcmV2RnJhbWUrPXBhcnNlSW50KGZyYW1lLDE2KTtmdWxsU3RhY2sucHVzaChwcmV2RnJhbWUpO31lbHNlIGlmKGZpcnN0Q2hhciE9PSdvJyl7ZnVsbFN0YWNrLnB1c2gocGFyc2VJbnQoZnJhbWUsMTYpKTt9fQpyZXR1cm4gZnVsbFN0YWNrO30KaWYoaXNFeHRlcm5hbENhbGxiYWNrKXtwYz10b3NPckV4dGVybmFsQ2FsbGJhY2s7dG9zT3JFeHRlcm5hbENhbGxiYWNrPTA7fWVsc2UgaWYodG9zT3JFeHRlcm5hbENhbGxiYWNrKXtjb25zdCBmdW5jRW50cnk9dGhpcy5jb2RlX21hcF8uZmluZEVudHJ5KHRvc09yRXh0ZXJuYWxDYWxsYmFjayk7aWYoIWZ1bmNFbnRyeXx8IWZ1bmNFbnRyeS5pc0pTRnVuY3Rpb258fCFmdW5jRW50cnkuaXNKU0Z1bmN0aW9uKCkpe3Rvc09yRXh0ZXJuYWxDYWxsYmFjaz0wO319CmxldCBwcm9jZXNzZWRTdGFjaz1wcm9jZXNzU3RhY2socGMsdG9zT3JFeHRlcm5hbENhbGxiYWNrLHN0YWNrKTtsZXQgbm9kZT11bmRlZmluZWQ7bGV0IGxhc3ROb2RlPXVuZGVmaW5lZDtwcm9jZXNzZWRTdGFjaz1wcm9jZXNzZWRTdGFjay5yZXZlcnNlKCk7Zm9yKGxldCBpPTAsbj1wcm9jZXNzZWRTdGFjay5sZW5ndGg7aTxuO2krKyl7Y29uc3QgZnJhbWU9cHJvY2Vzc2VkU3RhY2tbaV07aWYoIWZyYW1lKWJyZWFrO2NvbnN0IGVudHJ5PXRoaXMuY29kZV9tYXBfLmZpbmRFbnRyeShmcmFtZSk7aWYoIWVudHJ5JiZpIT09MCl7Y29udGludWU7fQpsZXQgc291cmNlSW5mbz11bmRlZmluZWQ7aWYoZW50cnkmJmVudHJ5LnR5cGU9PT1Db2RlRW50cnkuVFlQRS5DUFApe2NvbnN0IGxpYkVudHJ5PXRoaXMuY29kZV9tYXBfLmZpbmRFbnRyeUluTGlicmFyaWVzKGZyYW1lKTtpZihsaWJFbnRyeSl7c291cmNlSW5mbz17ZmlsZTpsaWJFbnRyeS5uYW1lfTt9fQpjb25zdCBlbnRyeUlkPWVudHJ5P2VudHJ5LmlkOi0xO25vZGU9dGhpcy5wcm9maWxlVHJlZV8uZ2V0Tm9kZShlbnRyeUlkKTtpZihub2RlPT09dW5kZWZpbmVkKXtub2RlPXRoaXMucHJvZmlsZVRyZWVfLmFkZChuZXcgUHJvZmlsZU5vZGVUeXBlKGVudHJ5SWQse2Z1bmN0aW9uTmFtZTplbnRyeS5uYW1lLHVybDpzb3VyY2VJbmZvP3NvdXJjZUluZm8uZmlsZTonJyxsaW5lTnVtYmVyOnNvdXJjZUluZm8/c291cmNlSW5mby5saW5lOnVuZGVmaW5lZCxjb2x1bW5OdW1iZXI6c291cmNlSW5mbz9zb3VyY2VJbmZvLmNvbHVtbjp1bmRlZmluZWQsc2NyaXB0SWQ6c291cmNlSW5mbz9zb3VyY2VJbmZvLnNjcmlwdElkOnVuZGVmaW5lZH0sbGFzdE5vZGUpKTt9Cmxhc3ROb2RlPW5vZGU7fQp0aGlzLm1vZGVsXy5zYW1wbGVzLnB1c2gobmV3IHRyLm1vZGVsLlNhbXBsZShzdGFydEluTXMsJ1Y4IFBDJyxub2RlLHRoaXMudjhfdGhyZWFkXyx1bmRlZmluZWQsMSkpO30scHJvY2Vzc0Rpc3RvcnRpb25fKGRpc3RvcnRpb25JblBpY29zZWNvbmRzKXt9LHByb2Nlc3NQbG90UmFuZ2VfKHN0YXJ0LGVuZCl7fSxwcm9jZXNzVjhWZXJzaW9uXyhtYWpvcixtaW5vcixidWlsZCxwYXRjaCxjYW5kaWRhdGUpe30saW1wb3J0RXZlbnRzKCl7Y29uc3QgbG9ncmVhZGVyPW5ldyB0ci5lLmltcG9ydGVyLnY4LkxvZ1JlYWRlcih7J3RpbWVyLWV2ZW50Jzp7cGFyc2VyczpbbnVsbCxwYXJzZUludCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1RpbWVyRXZlbnRfLmJpbmQodGhpcyl9LCdzaGFyZWQtbGlicmFyeSc6e3BhcnNlcnM6W251bGwscGFyc2VJbnQscGFyc2VJbnRdLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NTaGFyZWRMaWJyYXJ5Xy5iaW5kKHRoaXMpfSwndGltZXItZXZlbnQtc3RhcnQnOntwYXJzZXJzOltudWxsLHBhcnNlSW50XSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzVGltZXJFdmVudFN0YXJ0Xy5iaW5kKHRoaXMpfSwndGltZXItZXZlbnQtZW5kJzp7cGFyc2VyczpbbnVsbCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1RpbWVyRXZlbnRFbmRfLmJpbmQodGhpcyl9LCdjb2RlLWNyZWF0aW9uJzp7cGFyc2VyczpbbnVsbCxwYXJzZUludCxwYXJzZUludCxwYXJzZUludCxudWxsLCd2YXItYXJncyddLHByb2Nlc3Nvcjp0aGlzLnByb2Nlc3NDb2RlQ3JlYXRlRXZlbnRfLmJpbmQodGhpcyl9LCdjb2RlLW1vdmUnOntwYXJzZXJzOltwYXJzZUludCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc0NvZGVNb3ZlRXZlbnRfLmJpbmQodGhpcyl9LCdjb2RlLWRlbGV0ZSc6e3BhcnNlcnM6W3BhcnNlSW50XSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzQ29kZURlbGV0ZUV2ZW50Xy5iaW5kKHRoaXMpfSwnY3BwJzp7cGFyc2VyczpbcGFyc2VJbnQscGFyc2VJbnQsbnVsbF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc0NwcFN5bWJvbF8uYmluZCh0aGlzKX0sJ3RpY2snOntwYXJzZXJzOltwYXJzZUludCxwYXJzZUludCxwYXJzZUludCxwYXJzZUludCxwYXJzZUludCwndmFyLWFyZ3MnXSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzVGlja0V2ZW50Xy5iaW5kKHRoaXMpfSwnZGlzdG9ydGlvbic6e3BhcnNlcnM6W3BhcnNlSW50XSxwcm9jZXNzb3I6dGhpcy5wcm9jZXNzRGlzdG9ydGlvbl8uYmluZCh0aGlzKX0sJ3Bsb3QtcmFuZ2UnOntwYXJzZXJzOltwYXJzZUludCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1Bsb3RSYW5nZV8uYmluZCh0aGlzKX0sJ3Y4LXZlcnNpb24nOntwYXJzZXJzOltwYXJzZUludCxwYXJzZUludCxwYXJzZUludCxwYXJzZUludCxwYXJzZUludF0scHJvY2Vzc29yOnRoaXMucHJvY2Vzc1Y4VmVyc2lvbl8uYmluZCh0aGlzKX19KTt0aGlzLnY4X3RpbWVyX3RocmVhZF89dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKC0zMikuZ2V0T3JDcmVhdGVUaHJlYWQoMSk7dGhpcy52OF90aW1lcl90aHJlYWRfLm5hbWU9J1Y4IFRpbWVycyc7dGhpcy52OF90aHJlYWRfPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcygtMzIpLmdldE9yQ3JlYXRlVGhyZWFkKDIpO3RoaXMudjhfdGhyZWFkXy5uYW1lPSdWOCc7Y29uc3QgbGluZXM9dGhpcy5sb2dEYXRhXy5zcGxpdCgnXG4nKTtmb3IobGV0IGk9MDtpPGxpbmVzLmxlbmd0aDtpKyspe2xvZ3JlYWRlci5wcm9jZXNzTG9nTGluZShsaW5lc1tpXSk7fQpmdW5jdGlvbiBhZGRTbGljZXMoc2xpY2VzLHRocmVhZCl7Zm9yKGxldCBpPTA7aTxzbGljZXMubGVuZ3RoO2krKyl7Y29uc3QgZHVyYXRpb249c2xpY2VzW2ldLmVuZC1zbGljZXNbaV0uc3RhcnQ7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCd2OCcsc2xpY2VzW2ldLm5hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHNsaWNlc1tpXS5uYW1lKSxzbGljZXNbaV0uc3RhcnQse30sZHVyYXRpb24pO3RocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7YWRkU2xpY2VzKHNsaWNlc1tpXS5jaGlsZHJlbix0aHJlYWQpO319CmFkZFNsaWNlcyh0aGlzLnY4X3N0YWNrX3RpbWVsaW5lXyx0aGlzLnY4X3RocmVhZF8pO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKFY4TG9nSW1wb3J0ZXIpO3JldHVybntWOExvZ0ltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO2lmKHRyLmlzVmlubil7Z2xvYmFsLndpbmRvdz17fTt9CiFmdW5jdGlvbihhKXtpZigib2JqZWN0Ij09dHlwZW9mIGV4cG9ydHMmJiJ1bmRlZmluZWQiIT10eXBlb2YgbW9kdWxlKW1vZHVsZS5leHBvcnRzPWEoKTtlbHNlIGlmKCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQpZGVmaW5lKFtdLGEpO2Vsc2V7dmFyIGI7InVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3c/Yj13aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBnbG9iYWw/Yj1nbG9iYWw6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYoYj1zZWxmKSxiLkpTWmlwPWEoKX19KGZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uIGEoYixjLGQpe2Z1bmN0aW9uIGUoZyxoKXtpZighY1tnXSl7aWYoIWJbZ10pe3ZhciBpPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlO2lmKCFoJiZpKXJldHVybiBpKGcsITApO2lmKGYpcmV0dXJuIGYoZywhMCk7dGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgZmluZCBtb2R1bGUgJyIrZysiJyIpfXZhciBqPWNbZ109e2V4cG9ydHM6e319O2JbZ11bMF0uY2FsbChqLmV4cG9ydHMsZnVuY3Rpb24oYSl7dmFyIGM9YltnXVsxXVthXTtyZXR1cm4gZShjP2M6YSl9LGosai5leHBvcnRzLGEsYixjLGQpfXJldHVybiBjW2ddLmV4cG9ydHN9Zm9yKHZhciBmPSJmdW5jdGlvbiI9PXR5cGVvZiByZXF1aXJlJiZyZXF1aXJlLGc9MDtnPGQubGVuZ3RoO2crKyllKGRbZ10pO3JldHVybiBlfSh7MTpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijt2YXIgZD0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLz0iO2MuZW5jb2RlPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYixjLGUsZixnLGgsaSxqPSIiLGs9MDtrPGEubGVuZ3RoOyliPWEuY2hhckNvZGVBdChrKyspLGM9YS5jaGFyQ29kZUF0KGsrKyksZT1hLmNoYXJDb2RlQXQoaysrKSxmPWI+PjIsZz0oMyZiKTw8NHxjPj40LGg9KDE1JmMpPDwyfGU+PjYsaT02MyZlLGlzTmFOKGMpP2g9aT02NDppc05hTihlKSYmKGk9NjQpLGo9aitkLmNoYXJBdChmKStkLmNoYXJBdChnKStkLmNoYXJBdChoKStkLmNoYXJBdChpKTtyZXR1cm4gan0sYy5kZWNvZGU9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsZyxoLGksaj0iIixrPTA7Zm9yKGE9YS5yZXBsYWNlKC9bXkEtWmEtejAtOVwrXC9cPV0vZywiIik7azxhLmxlbmd0aDspZj1kLmluZGV4T2YoYS5jaGFyQXQoaysrKSksZz1kLmluZGV4T2YoYS5jaGFyQXQoaysrKSksaD1kLmluZGV4T2YoYS5jaGFyQXQoaysrKSksaT1kLmluZGV4T2YoYS5jaGFyQXQoaysrKSksYj1mPDwyfGc+PjQsYz0oMTUmZyk8PDR8aD4+MixlPSgzJmgpPDw2fGksais9U3RyaW5nLmZyb21DaGFyQ29kZShiKSw2NCE9aCYmKGorPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpLDY0IT1pJiYoais9U3RyaW5nLmZyb21DaGFyQ29kZShlKSk7cmV0dXJuIGp9fSx7fV0sMjpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe3RoaXMuY29tcHJlc3NlZFNpemU9MCx0aGlzLnVuY29tcHJlc3NlZFNpemU9MCx0aGlzLmNyYzMyPTAsdGhpcy5jb21wcmVzc2lvbk1ldGhvZD1udWxsLHRoaXMuY29tcHJlc3NlZENvbnRlbnQ9bnVsbH1jLnByb3RvdHlwZT17Z2V0Q29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfSxnZXRDb21wcmVzc2VkQ29udGVudDpmdW5jdGlvbigpe3JldHVybiBudWxsfX0sYi5leHBvcnRzPWN9LHt9XSwzOltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2MuU1RPUkU9e21hZ2ljOiJceDAwXHgwMCIsY29tcHJlc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LHVuY29tcHJlc3M6ZnVuY3Rpb24oYSl7cmV0dXJuIGF9LGNvbXByZXNzSW5wdXRUeXBlOm51bGwsdW5jb21wcmVzc0lucHV0VHlwZTpudWxsfSxjLkRFRkxBVEU9YSgiLi9mbGF0ZSIpfSx7Ii4vZmxhdGUiOjh9XSw0OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL3V0aWxzIiksZD1bMCwxOTk2OTU5ODk0LDM5OTM5MTk3ODgsMjU2NzUyNDc5NCwxMjQ2MzQxMzcsMTg4NjA1NzYxNSwzOTE1NjIxNjg1LDI2NTczOTIwMzUsMjQ5MjY4Mjc0LDIwNDQ1MDgzMjQsMzc3MjExNTIzMCwyNTQ3MTc3ODY0LDE2Mjk0MTk5NSwyMTI1NTYxMDIxLDM4ODc2MDcwNDcsMjQyODQ0NDA0OSw0OTg1MzY1NDgsMTc4OTkyNzY2Niw0MDg5MDE2NjQ4LDIyMjcwNjEyMTQsNDUwNTQ4ODYxLDE4NDMyNTg2MDMsNDEwNzU4MDc1MywyMjExNjc3NjM5LDMyNTg4Mzk5MCwxNjg0Nzc3MTUyLDQyNTExMjIwNDIsMjMyMTkyNjYzNiwzMzU2MzM0ODcsMTY2MTM2NTQ2NSw0MTk1MzAyNzU1LDIzNjYxMTUzMTcsOTk3MDczMDk2LDEyODE5NTM4ODYsMzU3OTg1NTMzMiwyNzI0Njg4MjQyLDEwMDY4ODgxNDUsMTI1ODYwNzY4NywzNTI0MTAxNjI5LDI3Njg5NDI0NDMsOTAxMDk3NzIyLDExMTkwMDA2ODQsMzY4NjUxNzIwNiwyODk4MDY1NzI4LDg1MzA0NDQ1MSwxMTcyMjY2MTAxLDM3MDUwMTU3NTksMjg4MjYxNjY2NSw2NTE3Njc5ODAsMTM3MzUwMzU0NiwzMzY5NTU0MzA0LDMyMTgxMDQ1OTgsNTY1NTA3MjUzLDE0NTQ2MjE3MzEsMzQ4NTExMTcwNSwzMDk5NDM2MzAzLDY3MTI2Njk3NCwxNTk0MTk4MDI0LDMzMjI3MzA5MzAsMjk3MDM0NzgxMiw3OTU4MzU1MjcsMTQ4MzIzMDIyNSwzMjQ0MzY3Mjc1LDMwNjAxNDk1NjUsMTk5NDE0NjE5MiwzMTE1ODUzNCwyNTYzOTA3NzcyLDQwMjM3MTc5MzAsMTkwNzQ1OTQ2NSwxMTI2MzcyMTUsMjY4MDE1MzI1MywzOTA0NDI3MDU5LDIwMTM3NzYyOTAsMjUxNzIyMDM2LDI1MTcyMTUzNzQsMzc3NTgzMDA0MCwyMTM3NjU2NzYzLDE0MTM3NjgxMywyNDM5Mjc3NzE5LDM4NjUyNzEyOTcsMTgwMjE5NTQ0NCw0NzY4NjQ4NjYsMjIzODAwMTM2OCw0MDY2NTA4ODc4LDE4MTIzNzA5MjUsNDUzMDkyNzMxLDIxODE2MjUwMjUsNDExMTQ1MTIyMywxNzA2MDg4OTAyLDMxNDA0MjcwNCwyMzQ0NTMyMjAyLDQyNDAwMTc1MzIsMTY1ODY1ODI3MSwzNjY2MTk5NzcsMjM2MjY3MDMyMyw0MjI0OTk0NDA1LDEzMDM1MzU5NjAsOTg0OTYxNDg2LDI3NDcwMDcwOTIsMzU2OTAzNzUzOCwxMjU2MTcwODE3LDEwMzc2MDQzMTEsMjc2NTIxMDczMywzNTU0MDc5OTk1LDExMzEwMTQ1MDYsODc5Njc5OTk2LDI5MDkyNDM0NjIsMzY2Mzc3MTg1NiwxMTQxMTI0NDY3LDg1NTg0MjI3NywyODUyODAxNjMxLDM3MDg2NDg2NDksMTM0MjUzMzk0OCw2NTQ0NTkzMDYsMzE4ODM5NjA0OCwzMzczMDE1MTc0LDE0NjY0Nzk5MDksNTQ0MTc5NjM1LDMxMTA1MjM5MTMsMzQ2MjUyMjAxNSwxNTkxNjcxMDU0LDcwMjEzODc3NiwyOTY2NDYwNDUwLDMzNTI3OTk0MTIsMTUwNDkxODgwNyw3ODM1NTE4NzMsMzA4MjY0MDQ0MywzMjMzNDQyOTg5LDM5ODgyOTIzODQsMjU5NjI1NDY0Niw2MjMxNzA2OCwxOTU3ODEwODQyLDM5Mzk4NDU5NDUsMjY0NzgxNjExMSw4MTQ3MDk5NywxOTQzODAzNTIzLDM4MTQ5MTg5MzAsMjQ4OTU5NjgwNCwyMjUyNzQ0MzAsMjA1Mzc5MDM3NiwzODI2MTc1NzU1LDI0NjY5MDYwMTMsMTY3ODE2NzQzLDIwOTc2NTEzNzcsNDAyNzU1MjU4MCwyMjY1NDkwMzg2LDUwMzQ0NDA3MiwxNzYyMDUwODE0LDQxNTA0MTcyNDUsMjE1NDEyOTM1NSw0MjY1MjIyMjUsMTg1MjUwNzg3OSw0Mjc1MzEzNTI2LDIzMTIzMTc5MjAsMjgyNzUzNjI2LDE3NDI1NTU4NTIsNDE4OTcwODE0MywyMzk0ODc3OTQ1LDM5NzkxNzc2MywxNjIyMTgzNjM3LDM2MDQzOTA4ODgsMjcxNDg2NjU1OCw5NTM3Mjk3MzIsMTM0MDA3NjYyNiwzNTE4NzE5OTg1LDI3OTczNjA5OTksMTA2ODgyODM4MSwxMjE5NjM4ODU5LDM2MjQ3NDE4NTAsMjkzNjY3NTE0OCw5MDYxODU0NjIsMTA5MDgxMjUxMiwzNzQ3NjcyMDAzLDI4MjUzNzk2NjksODI5MzI5MTM1LDExODEzMzUxNjEsMzQxMjE3NzgwNCwzMTYwODM0ODQyLDYyODA4NTQwOCwxMzgyNjA1MzY2LDM0MjMzNjkxMDksMzEzODA3ODQ2Nyw1NzA1NjIyMzMsMTQyNjQwMDgxNSwzMzE3MzE2NTQyLDI5OTg3MzM2MDgsNzMzMjM5OTU0LDE1NTUyNjE5NTYsMzI2ODkzNTU5MSwzMDUwMzYwNjI1LDc1MjQ1OTQwMywxNTQxMzIwMjIxLDI2MDcwNzE5MjAsMzk2NTk3MzAzMCwxOTY5OTIyOTcyLDQwNzM1NDk4LDI2MTc4MzcyMjUsMzk0MzU3NzE1MSwxOTEzMDg3ODc3LDgzOTA4MzcxLDI1MTIzNDE2MzQsMzgwMzc0MDY5MiwyMDc1MjA4NjIyLDIxMzI2MTExMiwyNDYzMjcyNjAzLDM4NTU5OTAyODUsMjA5NDg1NDA3MSwxOTg5NTg4ODEsMjI2MjAyOTAxMiw0MDU3MjYwNjEwLDE3NTkzNTk5OTIsNTM0NDE0MTkwLDIxNzY3MTg1NDEsNDEzOTMyOTExNSwxODczODM2MDAxLDQxNDY2NDU2NywyMjgyMjQ4OTM0LDQyNzkyMDAzNjgsMTcxMTY4NDU1NCwyODUyODExMTYsMjQwNTgwMTcyNyw0MTY3MjE2NzQ1LDE2MzQ0Njc3OTUsMzc2MjI5NzAxLDI2ODUwNjc4OTYsMzYwODAwNzQwNiwxMzA4OTE4NjEyLDk1NjU0MzkzOCwyODA4NTU1MTA1LDM0OTU5NTgyNjMsMTIzMTYzNjMwMSwxMDQ3NDI3MDM1LDI5MzI5NTk4MTgsMzY1NDcwMzgzNiwxMDg4MzU5MjcwLDkzNjkxOGUzLDI4NDc3MTQ4OTksMzczNjgzNzgyOSwxMjAyOTAwODYzLDgxNzIzMzg5NywzMTgzMzQyMTA4LDM0MDEyMzcxMzAsMTQwNDI3NzU1Miw2MTU4MTgxNTAsMzEzNDIwNzQ5MywzNDUzNDIxMjAzLDE0MjM4NTc0NDksNjAxNDUwNDMxLDMwMDk4Mzc2MTQsMzI5NDcxMDQ1NiwxNTY3MTAzNzQ2LDcxMTkyODcyNCwzMDIwNjY4NDcxLDMyNzIzODAwNjUsMTUxMDMzNDIzNSw3NTUxNjcxMTddO2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgYXx8IWEubGVuZ3RoKXJldHVybiAwO3ZhciBlPSJzdHJpbmciIT09Yy5nZXRUeXBlT2YoYSk7InVuZGVmaW5lZCI9PXR5cGVvZiBiJiYoYj0wKTt2YXIgZj0wLGc9MCxoPTA7Yj0tMV5iO2Zvcih2YXIgaT0wLGo9YS5sZW5ndGg7aj5pO2krKyloPWU/YVtpXTphLmNoYXJDb2RlQXQoaSksZz0yNTUmKGJeaCksZj1kW2ddLGI9Yj4+PjheZjtyZXR1cm4tMV5ifX0seyIuL3V0aWxzIjoyMX1dLDU6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLmRhdGE9bnVsbCx0aGlzLmxlbmd0aD0wLHRoaXMuaW5kZXg9MH12YXIgZD1hKCIuL3V0aWxzIik7Yy5wcm90b3R5cGU9e2NoZWNrT2Zmc2V0OmZ1bmN0aW9uKGEpe3RoaXMuY2hlY2tJbmRleCh0aGlzLmluZGV4K2EpfSxjaGVja0luZGV4OmZ1bmN0aW9uKGEpe2lmKHRoaXMubGVuZ3RoPGF8fDA+YSl0aHJvdyBuZXcgRXJyb3IoIkVuZCBvZiBkYXRhIHJlYWNoZWQgKGRhdGEgbGVuZ3RoID0gIit0aGlzLmxlbmd0aCsiLCBhc2tlZCBpbmRleCA9ICIrYSsiKS4gQ29ycnVwdGVkIHppcCA/Iil9LHNldEluZGV4OmZ1bmN0aW9uKGEpe3RoaXMuY2hlY2tJbmRleChhKSx0aGlzLmluZGV4PWF9LHNraXA6ZnVuY3Rpb24oYSl7dGhpcy5zZXRJbmRleCh0aGlzLmluZGV4K2EpfSxieXRlQXQ6ZnVuY3Rpb24oKXt9LHJlYWRJbnQ6ZnVuY3Rpb24oYSl7dmFyIGIsYz0wO2Zvcih0aGlzLmNoZWNrT2Zmc2V0KGEpLGI9dGhpcy5pbmRleCthLTE7Yj49dGhpcy5pbmRleDtiLS0pYz0oYzw8OCkrdGhpcy5ieXRlQXQoYik7cmV0dXJuIHRoaXMuaW5kZXgrPWEsY30scmVhZFN0cmluZzpmdW5jdGlvbihhKXtyZXR1cm4gZC50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnJlYWREYXRhKGEpKX0scmVhZERhdGE6ZnVuY3Rpb24oKXt9LGxhc3RJbmRleE9mU2lnbmF0dXJlOmZ1bmN0aW9uKCl7fSxyZWFkRGF0ZTpmdW5jdGlvbigpe3ZhciBhPXRoaXMucmVhZEludCg0KTtyZXR1cm4gbmV3IERhdGUoKGE+PjI1JjEyNykrMTk4MCwoYT4+MjEmMTUpLTEsYT4+MTYmMzEsYT4+MTEmMzEsYT4+NSY2MywoMzEmYSk8PDEpfX0sYi5leHBvcnRzPWN9LHsiLi91dGlscyI6MjF9XSw2OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2MuYmFzZTY0PSExLGMuYmluYXJ5PSExLGMuZGlyPSExLGMuY3JlYXRlRm9sZGVycz0hMSxjLmRhdGU9bnVsbCxjLmNvbXByZXNzaW9uPW51bGwsYy5jb21tZW50PW51bGx9LHt9XSw3OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPWEoIi4vdXRpbHMiKTtjLnN0cmluZzJiaW5hcnk9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuc3RyaW5nMmJpbmFyeShhKX0sYy5zdHJpbmcyVWludDhBcnJheT1mdW5jdGlvbihhKXtyZXR1cm4gZC50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSl9LGMudWludDhBcnJheTJTdHJpbmc9ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsYSl9LGMuc3RyaW5nMkJsb2I9ZnVuY3Rpb24oYSl7dmFyIGI9ZC50cmFuc2Zvcm1UbygiYXJyYXlidWZmZXIiLGEpO3JldHVybiBkLmFycmF5QnVmZmVyMkJsb2IoYil9LGMuYXJyYXlCdWZmZXIyQmxvYj1mdW5jdGlvbihhKXtyZXR1cm4gZC5hcnJheUJ1ZmZlcjJCbG9iKGEpfSxjLnRyYW5zZm9ybVRvPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGQudHJhbnNmb3JtVG8oYSxiKX0sYy5nZXRUeXBlT2Y9ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZ2V0VHlwZU9mKGEpfSxjLmNoZWNrU3VwcG9ydD1mdW5jdGlvbihhKXtyZXR1cm4gZC5jaGVja1N1cHBvcnQoYSl9LGMuTUFYX1ZBTFVFXzE2QklUUz1kLk1BWF9WQUxVRV8xNkJJVFMsYy5NQVhfVkFMVUVfMzJCSVRTPWQuTUFYX1ZBTFVFXzMyQklUUyxjLnByZXR0eT1mdW5jdGlvbihhKXtyZXR1cm4gZC5wcmV0dHkoYSl9LGMuZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGEpe3JldHVybiBkLmZpbmRDb21wcmVzc2lvbihhKX0sYy5pc1JlZ0V4cD1mdW5jdGlvbihhKXtyZXR1cm4gZC5pc1JlZ0V4cChhKX19LHsiLi91dGlscyI6MjF9XSw4OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO3ZhciBkPSJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MTZBcnJheSYmInVuZGVmaW5lZCIhPXR5cGVvZiBVaW50MzJBcnJheSxlPWEoInBha28iKTtjLnVuY29tcHJlc3NJbnB1dFR5cGU9ZD8idWludDhhcnJheSI6ImFycmF5IixjLmNvbXByZXNzSW5wdXRUeXBlPWQ/InVpbnQ4YXJyYXkiOiJhcnJheSIsYy5tYWdpYz0iXGJceDAwIixjLmNvbXByZXNzPWZ1bmN0aW9uKGEpe3JldHVybiBlLmRlZmxhdGVSYXcoYSl9LGMudW5jb21wcmVzcz1mdW5jdGlvbihhKXtyZXR1cm4gZS5pbmZsYXRlUmF3KGEpfX0se3Bha286MjR9XSw5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYil7cmV0dXJuIHRoaXMgaW5zdGFuY2VvZiBjPyh0aGlzLmZpbGVzPXt9LHRoaXMuY29tbWVudD1udWxsLHRoaXMucm9vdD0iIixhJiZ0aGlzLmxvYWQoYSxiKSx2b2lkKHRoaXMuY2xvbmU9ZnVuY3Rpb24oKXt2YXIgYT1uZXcgYztmb3IodmFyIGIgaW4gdGhpcykiZnVuY3Rpb24iIT10eXBlb2YgdGhpc1tiXSYmKGFbYl09dGhpc1tiXSk7cmV0dXJuIGF9KSk6bmV3IGMoYSxiKX12YXIgZD1hKCIuL2Jhc2U2NCIpO2MucHJvdG90eXBlPWEoIi4vb2JqZWN0IiksYy5wcm90b3R5cGUubG9hZD1hKCIuL2xvYWQiKSxjLnN1cHBvcnQ9YSgiLi9zdXBwb3J0IiksYy5kZWZhdWx0cz1hKCIuL2RlZmF1bHRzIiksYy51dGlscz1hKCIuL2RlcHJlY2F0ZWRQdWJsaWNVdGlscyIpLGMuYmFzZTY0PXtlbmNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZW5jb2RlKGEpfSxkZWNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGQuZGVjb2RlKGEpfX0sYy5jb21wcmVzc2lvbnM9YSgiLi9jb21wcmVzc2lvbnMiKSxiLmV4cG9ydHM9Y30seyIuL2Jhc2U2NCI6MSwiLi9jb21wcmVzc2lvbnMiOjMsIi4vZGVmYXVsdHMiOjYsIi4vZGVwcmVjYXRlZFB1YmxpY1V0aWxzIjo3LCIuL2xvYWQiOjEwLCIuL29iamVjdCI6MTMsIi4vc3VwcG9ydCI6MTd9XSwxMDpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi9iYXNlNjQiKSxkPWEoIi4vemlwRW50cmllcyIpO2IuZXhwb3J0cz1mdW5jdGlvbihhLGIpe3ZhciBlLGYsZyxoO2ZvcihiPWJ8fHt9LGIuYmFzZTY0JiYoYT1jLmRlY29kZShhKSksZj1uZXcgZChhLGIpLGU9Zi5maWxlcyxnPTA7ZzxlLmxlbmd0aDtnKyspaD1lW2ddLHRoaXMuZmlsZShoLmZpbGVOYW1lLGguZGVjb21wcmVzc2VkLHtiaW5hcnk6ITAsb3B0aW1pemVkQmluYXJ5U3RyaW5nOiEwLGRhdGU6aC5kYXRlLGRpcjpoLmRpcixjb21tZW50OmguZmlsZUNvbW1lbnQubGVuZ3RoP2guZmlsZUNvbW1lbnQ6bnVsbCxjcmVhdGVGb2xkZXJzOmIuY3JlYXRlRm9sZGVyc30pO3JldHVybiBmLnppcENvbW1lbnQubGVuZ3RoJiYodGhpcy5jb21tZW50PWYuemlwQ29tbWVudCksdGhpc319LHsiLi9iYXNlNjQiOjEsIi4vemlwRW50cmllcyI6MjJ9XSwxMTpbZnVuY3Rpb24oYSxiKXsoZnVuY3Rpb24oYSl7InVzZSBzdHJpY3QiO2IuZXhwb3J0cz1mdW5jdGlvbihiLGMpe3JldHVybiBuZXcgYShiLGMpfSxiLmV4cG9ydHMudGVzdD1mdW5jdGlvbihiKXtyZXR1cm4gYS5pc0J1ZmZlcihiKX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxMjpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXt0aGlzLmRhdGE9YSx0aGlzLmxlbmd0aD10aGlzLmRhdGEubGVuZ3RoLHRoaXMuaW5kZXg9MH12YXIgZD1hKCIuL3VpbnQ4QXJyYXlSZWFkZXIiKTtjLnByb3RvdHlwZT1uZXcgZCxjLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNoZWNrT2Zmc2V0KGEpO3ZhciBiPXRoaXMuZGF0YS5zbGljZSh0aGlzLmluZGV4LHRoaXMuaW5kZXgrYSk7cmV0dXJuIHRoaXMuaW5kZXgrPWEsYn0sYi5leHBvcnRzPWN9LHsiLi91aW50OEFycmF5UmVhZGVyIjoxOH1dLDEzOltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL3N1cHBvcnQiKSxkPWEoIi4vdXRpbHMiKSxlPWEoIi4vY3JjMzIiKSxmPWEoIi4vc2lnbmF0dXJlIiksZz1hKCIuL2RlZmF1bHRzIiksaD1hKCIuL2Jhc2U2NCIpLGk9YSgiLi9jb21wcmVzc2lvbnMiKSxqPWEoIi4vY29tcHJlc3NlZE9iamVjdCIpLGs9YSgiLi9ub2RlQnVmZmVyIiksbD1hKCIuL3V0ZjgiKSxtPWEoIi4vc3RyaW5nV3JpdGVyIiksbj1hKCIuL3VpbnQ4QXJyYXlXcml0ZXIiKSxvPWZ1bmN0aW9uKGEpe2lmKGEuX2RhdGEgaW5zdGFuY2VvZiBqJiYoYS5fZGF0YT1hLl9kYXRhLmdldENvbnRlbnQoKSxhLm9wdGlvbnMuYmluYXJ5PSEwLGEub3B0aW9ucy5iYXNlNjQ9ITEsInVpbnQ4YXJyYXkiPT09ZC5nZXRUeXBlT2YoYS5fZGF0YSkpKXt2YXIgYj1hLl9kYXRhO2EuX2RhdGE9bmV3IFVpbnQ4QXJyYXkoYi5sZW5ndGgpLDAhPT1iLmxlbmd0aCYmYS5fZGF0YS5zZXQoYiwwKX1yZXR1cm4gYS5fZGF0YX0scD1mdW5jdGlvbihhKXt2YXIgYj1vKGEpLGU9ZC5nZXRUeXBlT2YoYik7cmV0dXJuInN0cmluZyI9PT1lPyFhLm9wdGlvbnMuYmluYXJ5JiZjLm5vZGVidWZmZXI/ayhiLCJ1dGYtOCIpOmEuYXNCaW5hcnkoKTpifSxxPWZ1bmN0aW9uKGEpe3ZhciBiPW8odGhpcyk7cmV0dXJuIG51bGw9PT1ifHwidW5kZWZpbmVkIj09dHlwZW9mIGI/IiI6KHRoaXMub3B0aW9ucy5iYXNlNjQmJihiPWguZGVjb2RlKGIpKSxiPWEmJnRoaXMub3B0aW9ucy5iaW5hcnk/QS51dGY4ZGVjb2RlKGIpOmQudHJhbnNmb3JtVG8oInN0cmluZyIsYiksYXx8dGhpcy5vcHRpb25zLmJpbmFyeXx8KGI9ZC50cmFuc2Zvcm1Ubygic3RyaW5nIixBLnV0ZjhlbmNvZGUoYikpKSxiKX0scj1mdW5jdGlvbihhLGIsYyl7dGhpcy5uYW1lPWEsdGhpcy5kaXI9Yy5kaXIsdGhpcy5kYXRlPWMuZGF0ZSx0aGlzLmNvbW1lbnQ9Yy5jb21tZW50LHRoaXMuX2RhdGE9Yix0aGlzLm9wdGlvbnM9Yyx0aGlzLl9pbml0aWFsTWV0YWRhdGE9e2RpcjpjLmRpcixkYXRlOmMuZGF0ZX19O3IucHJvdG90eXBlPXthc1RleHQ6ZnVuY3Rpb24oKXtyZXR1cm4gcS5jYWxsKHRoaXMsITApfSxhc0JpbmFyeTpmdW5jdGlvbigpe3JldHVybiBxLmNhbGwodGhpcywhMSl9LGFzTm9kZUJ1ZmZlcjpmdW5jdGlvbigpe3ZhciBhPXAodGhpcyk7cmV0dXJuIGQudHJhbnNmb3JtVG8oIm5vZGVidWZmZXIiLGEpfSxhc1VpbnQ4QXJyYXk6ZnVuY3Rpb24oKXt2YXIgYT1wKHRoaXMpO3JldHVybiBkLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixhKX0sYXNBcnJheUJ1ZmZlcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmFzVWludDhBcnJheSgpLmJ1ZmZlcn19O3ZhciBzPWZ1bmN0aW9uKGEsYil7dmFyIGMsZD0iIjtmb3IoYz0wO2I+YztjKyspZCs9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmYSksYT4+Pj04O3JldHVybiBkfSx0PWZ1bmN0aW9uKCl7dmFyIGEsYixjPXt9O2ZvcihhPTA7YTxhcmd1bWVudHMubGVuZ3RoO2ErKylmb3IoYiBpbiBhcmd1bWVudHNbYV0pYXJndW1lbnRzW2FdLmhhc093blByb3BlcnR5KGIpJiYidW5kZWZpbmVkIj09dHlwZW9mIGNbYl0mJihjW2JdPWFyZ3VtZW50c1thXVtiXSk7cmV0dXJuIGN9LHU9ZnVuY3Rpb24oYSl7cmV0dXJuIGE9YXx8e30sYS5iYXNlNjQhPT0hMHx8bnVsbCE9PWEuYmluYXJ5JiZ2b2lkIDAhPT1hLmJpbmFyeXx8KGEuYmluYXJ5PSEwKSxhPXQoYSxnKSxhLmRhdGU9YS5kYXRlfHxuZXcgRGF0ZSxudWxsIT09YS5jb21wcmVzc2lvbiYmKGEuY29tcHJlc3Npb249YS5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpKSxhfSx2PWZ1bmN0aW9uKGEsYixjKXt2YXIgZSxmPWQuZ2V0VHlwZU9mKGIpO2lmKGM9dShjKSxjLmNyZWF0ZUZvbGRlcnMmJihlPXcoYSkpJiZ4LmNhbGwodGhpcyxlLCEwKSxjLmRpcnx8bnVsbD09PWJ8fCJ1bmRlZmluZWQiPT10eXBlb2YgYiljLmJhc2U2ND0hMSxjLmJpbmFyeT0hMSxiPW51bGw7ZWxzZSBpZigic3RyaW5nIj09PWYpYy5iaW5hcnkmJiFjLmJhc2U2NCYmYy5vcHRpbWl6ZWRCaW5hcnlTdHJpbmchPT0hMCYmKGI9ZC5zdHJpbmcyYmluYXJ5KGIpKTtlbHNle2lmKGMuYmFzZTY0PSExLGMuYmluYXJ5PSEwLCEoZnx8YiBpbnN0YW5jZW9mIGopKXRocm93IG5ldyBFcnJvcigiVGhlIGRhdGEgb2YgJyIrYSsiJyBpcyBpbiBhbiB1bnN1cHBvcnRlZCBmb3JtYXQgISIpOyJhcnJheWJ1ZmZlciI9PT1mJiYoYj1kLnRyYW5zZm9ybVRvKCJ1aW50OGFycmF5IixiKSl9dmFyIGc9bmV3IHIoYSxiLGMpO3JldHVybiB0aGlzLmZpbGVzW2FdPWcsZ30sdz1mdW5jdGlvbihhKXsiLyI9PWEuc2xpY2UoLTEpJiYoYT1hLnN1YnN0cmluZygwLGEubGVuZ3RoLTEpKTt2YXIgYj1hLmxhc3RJbmRleE9mKCIvIik7cmV0dXJuIGI+MD9hLnN1YnN0cmluZygwLGIpOiIifSx4PWZ1bmN0aW9uKGEsYil7cmV0dXJuIi8iIT1hLnNsaWNlKC0xKSYmKGErPSIvIiksYj0idW5kZWZpbmVkIiE9dHlwZW9mIGI/YjohMSx0aGlzLmZpbGVzW2FdfHx2LmNhbGwodGhpcyxhLG51bGwse2RpcjohMCxjcmVhdGVGb2xkZXJzOmJ9KSx0aGlzLmZpbGVzW2FdfSx5PWZ1bmN0aW9uKGEsYil7dmFyIGMsZj1uZXcgajtyZXR1cm4gYS5fZGF0YSBpbnN0YW5jZW9mIGo/KGYudW5jb21wcmVzc2VkU2l6ZT1hLl9kYXRhLnVuY29tcHJlc3NlZFNpemUsZi5jcmMzMj1hLl9kYXRhLmNyYzMyLDA9PT1mLnVuY29tcHJlc3NlZFNpemV8fGEuZGlyPyhiPWkuU1RPUkUsZi5jb21wcmVzc2VkQ29udGVudD0iIixmLmNyYzMyPTApOmEuX2RhdGEuY29tcHJlc3Npb25NZXRob2Q9PT1iLm1hZ2ljP2YuY29tcHJlc3NlZENvbnRlbnQ9YS5fZGF0YS5nZXRDb21wcmVzc2VkQ29udGVudCgpOihjPWEuX2RhdGEuZ2V0Q29udGVudCgpLGYuY29tcHJlc3NlZENvbnRlbnQ9Yi5jb21wcmVzcyhkLnRyYW5zZm9ybVRvKGIuY29tcHJlc3NJbnB1dFR5cGUsYykpKSk6KGM9cChhKSwoIWN8fDA9PT1jLmxlbmd0aHx8YS5kaXIpJiYoYj1pLlNUT1JFLGM9IiIpLGYudW5jb21wcmVzc2VkU2l6ZT1jLmxlbmd0aCxmLmNyYzMyPWUoYyksZi5jb21wcmVzc2VkQ29udGVudD1iLmNvbXByZXNzKGQudHJhbnNmb3JtVG8oYi5jb21wcmVzc0lucHV0VHlwZSxjKSkpLGYuY29tcHJlc3NlZFNpemU9Zi5jb21wcmVzc2VkQ29udGVudC5sZW5ndGgsZi5jb21wcmVzc2lvbk1ldGhvZD1iLm1hZ2ljLGZ9LHo9ZnVuY3Rpb24oYSxiLGMsZyl7dmFyIGgsaSxqLGssbT0oYy5jb21wcmVzc2VkQ29udGVudCxkLnRyYW5zZm9ybVRvKCJzdHJpbmciLGwudXRmOGVuY29kZShiLm5hbWUpKSksbj1iLmNvbW1lbnR8fCIiLG89ZC50cmFuc2Zvcm1Ubygic3RyaW5nIixsLnV0ZjhlbmNvZGUobikpLHA9bS5sZW5ndGghPT1iLm5hbWUubGVuZ3RoLHE9by5sZW5ndGghPT1uLmxlbmd0aCxyPWIub3B0aW9ucyx0PSIiLHU9IiIsdj0iIjtqPWIuX2luaXRpYWxNZXRhZGF0YS5kaXIhPT1iLmRpcj9iLmRpcjpyLmRpcixrPWIuX2luaXRpYWxNZXRhZGF0YS5kYXRlIT09Yi5kYXRlP2IuZGF0ZTpyLmRhdGUsaD1rLmdldEhvdXJzKCksaDw8PTYsaHw9ay5nZXRNaW51dGVzKCksaDw8PTUsaHw9ay5nZXRTZWNvbmRzKCkvMixpPWsuZ2V0RnVsbFllYXIoKS0xOTgwLGk8PD00LGl8PWsuZ2V0TW9udGgoKSsxLGk8PD01LGl8PWsuZ2V0RGF0ZSgpLHAmJih1PXMoMSwxKStzKGUobSksNCkrbSx0Kz0idXAiK3ModS5sZW5ndGgsMikrdSkscSYmKHY9cygxLDEpK3ModGhpcy5jcmMzMihvKSw0KStvLHQrPSJ1YyIrcyh2Lmxlbmd0aCwyKSt2KTt2YXIgdz0iIjt3Kz0iXG5ceDAwIix3Kz1wfHxxPyJceDAwXGIiOiJceDAwXHgwMCIsdys9Yy5jb21wcmVzc2lvbk1ldGhvZCx3Kz1zKGgsMiksdys9cyhpLDIpLHcrPXMoYy5jcmMzMiw0KSx3Kz1zKGMuY29tcHJlc3NlZFNpemUsNCksdys9cyhjLnVuY29tcHJlc3NlZFNpemUsNCksdys9cyhtLmxlbmd0aCwyKSx3Kz1zKHQubGVuZ3RoLDIpO3ZhciB4PWYuTE9DQUxfRklMRV9IRUFERVIrdyttK3QseT1mLkNFTlRSQUxfRklMRV9IRUFERVIrIhRceDAwIit3K3Moby5sZW5ndGgsMikrIlx4MDBceDAwXHgwMFx4MDAiKyhqPT09ITA/IhBceDAwXHgwMFx4MDAiOiJceDAwXHgwMFx4MDBceDAwIikrcyhnLDQpK20rdCtvO3JldHVybntmaWxlUmVjb3JkOngsZGlyUmVjb3JkOnksY29tcHJlc3NlZE9iamVjdDpjfX0sQT17bG9hZDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTG9hZCBtZXRob2QgaXMgbm90IGRlZmluZWQuIElzIHRoZSBmaWxlIGpzemlwLWxvYWQuanMgaW5jbHVkZWQgPyIpfSxmaWx0ZXI6ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGUsZj1bXTtmb3IoYiBpbiB0aGlzLmZpbGVzKXRoaXMuZmlsZXMuaGFzT3duUHJvcGVydHkoYikmJihkPXRoaXMuZmlsZXNbYl0sZT1uZXcgcihkLm5hbWUsZC5fZGF0YSx0KGQub3B0aW9ucykpLGM9Yi5zbGljZSh0aGlzLnJvb3QubGVuZ3RoLGIubGVuZ3RoKSxiLnNsaWNlKDAsdGhpcy5yb290Lmxlbmd0aCk9PT10aGlzLnJvb3QmJmEoYyxlKSYmZi5wdXNoKGUpKTtyZXR1cm4gZn0sZmlsZTpmdW5jdGlvbihhLGIsYyl7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKGQuaXNSZWdFeHAoYSkpe3ZhciBlPWE7cmV0dXJuIHRoaXMuZmlsdGVyKGZ1bmN0aW9uKGEsYil7cmV0dXJuIWIuZGlyJiZlLnRlc3QoYSl9KX1yZXR1cm4gdGhpcy5maWx0ZXIoZnVuY3Rpb24oYixjKXtyZXR1cm4hYy5kaXImJmI9PT1hfSlbMF18fG51bGx9cmV0dXJuIGE9dGhpcy5yb290K2Esdi5jYWxsKHRoaXMsYSxiLGMpLHRoaXN9LGZvbGRlcjpmdW5jdGlvbihhKXtpZighYSlyZXR1cm4gdGhpcztpZihkLmlzUmVnRXhwKGEpKXJldHVybiB0aGlzLmZpbHRlcihmdW5jdGlvbihiLGMpe3JldHVybiBjLmRpciYmYS50ZXN0KGIpfSk7dmFyIGI9dGhpcy5yb290K2EsYz14LmNhbGwodGhpcyxiKSxlPXRoaXMuY2xvbmUoKTtyZXR1cm4gZS5yb290PWMubmFtZSxlfSxyZW1vdmU6ZnVuY3Rpb24oYSl7YT10aGlzLnJvb3QrYTt2YXIgYj10aGlzLmZpbGVzW2FdO2lmKGJ8fCgiLyIhPWEuc2xpY2UoLTEpJiYoYSs9Ii8iKSxiPXRoaXMuZmlsZXNbYV0pLGImJiFiLmRpcilkZWxldGUgdGhpcy5maWxlc1thXTtlbHNlIGZvcih2YXIgYz10aGlzLmZpbHRlcihmdW5jdGlvbihiLGMpe3JldHVybiBjLm5hbWUuc2xpY2UoMCxhLmxlbmd0aCk9PT1hfSksZD0wO2Q8Yy5sZW5ndGg7ZCsrKWRlbGV0ZSB0aGlzLmZpbGVzW2NbZF0ubmFtZV07cmV0dXJuIHRoaXN9LGdlbmVyYXRlOmZ1bmN0aW9uKGEpe2E9dChhfHx7fSx7YmFzZTY0OiEwLGNvbXByZXNzaW9uOiJTVE9SRSIsdHlwZToiYmFzZTY0Iixjb21tZW50Om51bGx9KSxkLmNoZWNrU3VwcG9ydChhLnR5cGUpO3ZhciBiLGMsZT1bXSxnPTAsaj0wLGs9ZC50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLnV0ZjhlbmNvZGUoYS5jb21tZW50fHx0aGlzLmNvbW1lbnR8fCIiKSk7Zm9yKHZhciBsIGluIHRoaXMuZmlsZXMpaWYodGhpcy5maWxlcy5oYXNPd25Qcm9wZXJ0eShsKSl7dmFyIG89dGhpcy5maWxlc1tsXSxwPW8ub3B0aW9ucy5jb21wcmVzc2lvbnx8YS5jb21wcmVzc2lvbi50b1VwcGVyQ2FzZSgpLHE9aVtwXTtpZighcSl0aHJvdyBuZXcgRXJyb3IocCsiIGlzIG5vdCBhIHZhbGlkIGNvbXByZXNzaW9uIG1ldGhvZCAhIik7dmFyIHI9eS5jYWxsKHRoaXMsbyxxKSx1PXouY2FsbCh0aGlzLGwsbyxyLGcpO2crPXUuZmlsZVJlY29yZC5sZW5ndGgrci5jb21wcmVzc2VkU2l6ZSxqKz11LmRpclJlY29yZC5sZW5ndGgsZS5wdXNoKHUpfXZhciB2PSIiO3Y9Zi5DRU5UUkFMX0RJUkVDVE9SWV9FTkQrIlx4MDBceDAwXHgwMFx4MDAiK3MoZS5sZW5ndGgsMikrcyhlLmxlbmd0aCwyKStzKGosNCkrcyhnLDQpK3Moay5sZW5ndGgsMikrazt2YXIgdz1hLnR5cGUudG9Mb3dlckNhc2UoKTtmb3IoYj0idWludDhhcnJheSI9PT13fHwiYXJyYXlidWZmZXIiPT09d3x8ImJsb2IiPT09d3x8Im5vZGVidWZmZXIiPT09dz9uZXcgbihnK2ordi5sZW5ndGgpOm5ldyBtKGcrait2Lmxlbmd0aCksYz0wO2M8ZS5sZW5ndGg7YysrKWIuYXBwZW5kKGVbY10uZmlsZVJlY29yZCksYi5hcHBlbmQoZVtjXS5jb21wcmVzc2VkT2JqZWN0LmNvbXByZXNzZWRDb250ZW50KTtmb3IoYz0wO2M8ZS5sZW5ndGg7YysrKWIuYXBwZW5kKGVbY10uZGlyUmVjb3JkKTtiLmFwcGVuZCh2KTt2YXIgeD1iLmZpbmFsaXplKCk7c3dpdGNoKGEudHlwZS50b0xvd2VyQ2FzZSgpKXtjYXNlInVpbnQ4YXJyYXkiOmNhc2UiYXJyYXlidWZmZXIiOmNhc2Uibm9kZWJ1ZmZlciI6cmV0dXJuIGQudHJhbnNmb3JtVG8oYS50eXBlLnRvTG93ZXJDYXNlKCkseCk7Y2FzZSJibG9iIjpyZXR1cm4gZC5hcnJheUJ1ZmZlcjJCbG9iKGQudHJhbnNmb3JtVG8oImFycmF5YnVmZmVyIix4KSk7Y2FzZSJiYXNlNjQiOnJldHVybiBhLmJhc2U2ND9oLmVuY29kZSh4KTp4O2RlZmF1bHQ6cmV0dXJuIHh9fSxjcmMzMjpmdW5jdGlvbihhLGIpe3JldHVybiBlKGEsYil9LHV0ZjhlbmNvZGU6ZnVuY3Rpb24oYSl7cmV0dXJuIGQudHJhbnNmb3JtVG8oInN0cmluZyIsbC51dGY4ZW5jb2RlKGEpKX0sdXRmOGRlY29kZTpmdW5jdGlvbihhKXtyZXR1cm4gbC51dGY4ZGVjb2RlKGEpfX07Yi5leHBvcnRzPUF9LHsiLi9iYXNlNjQiOjEsIi4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9jb21wcmVzc2lvbnMiOjMsIi4vY3JjMzIiOjQsIi4vZGVmYXVsdHMiOjYsIi4vbm9kZUJ1ZmZlciI6MTEsIi4vc2lnbmF0dXJlIjoxNCwiLi9zdHJpbmdXcml0ZXIiOjE2LCIuL3N1cHBvcnQiOjE3LCIuL3VpbnQ4QXJyYXlXcml0ZXIiOjE5LCIuL3V0ZjgiOjIwLCIuL3V0aWxzIjoyMX1dLDE0OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2MuTE9DQUxfRklMRV9IRUFERVI9IlBLAwQiLGMuQ0VOVFJBTF9GSUxFX0hFQURFUj0iUEsBAiIsYy5DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLBQYiLGMuWklQNjRfQ0VOVFJBTF9ESVJFQ1RPUllfTE9DQVRPUj0iUEsGByIsYy5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9FTkQ9IlBLBgYiLGMuREFUQV9ERVNDUklQVE9SPSJQSwdcYiJ9LHt9XSwxNTpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhLGIpe3RoaXMuZGF0YT1hLGJ8fCh0aGlzLmRhdGE9ZS5zdHJpbmcyYmluYXJ5KHRoaXMuZGF0YSkpLHRoaXMubGVuZ3RoPXRoaXMuZGF0YS5sZW5ndGgsdGhpcy5pbmRleD0wfXZhciBkPWEoIi4vZGF0YVJlYWRlciIpLGU9YSgiLi91dGlscyIpO2MucHJvdG90eXBlPW5ldyBkLGMucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhLmNoYXJDb2RlQXQoYSl9LGMucHJvdG90eXBlLmxhc3RJbmRleE9mU2lnbmF0dXJlPWZ1bmN0aW9uKGEpe3JldHVybiB0aGlzLmRhdGEubGFzdEluZGV4T2YoYSl9LGMucHJvdG90eXBlLnJlYWREYXRhPWZ1bmN0aW9uKGEpe3RoaXMuY2hlY2tPZmZzZXQoYSk7dmFyIGI9dGhpcy5kYXRhLnNsaWNlKHRoaXMuaW5kZXgsdGhpcy5pbmRleCthKTtyZXR1cm4gdGhpcy5pbmRleCs9YSxifSxiLmV4cG9ydHM9Y30seyIuL2RhdGFSZWFkZXIiOjUsIi4vdXRpbHMiOjIxfV0sMTY6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vdXRpbHMiKSxkPWZ1bmN0aW9uKCl7dGhpcy5kYXRhPVtdfTtkLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKGEpe2E9Yy50cmFuc2Zvcm1Ubygic3RyaW5nIixhKSx0aGlzLmRhdGEucHVzaChhKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhLmpvaW4oIiIpfX0sYi5leHBvcnRzPWR9LHsiLi91dGlscyI6MjF9XSwxNzpbZnVuY3Rpb24oYSxiLGMpeyhmdW5jdGlvbihhKXsidXNlIHN0cmljdCI7aWYoYy5iYXNlNjQ9ITAsYy5hcnJheT0hMCxjLnN0cmluZz0hMCxjLmFycmF5YnVmZmVyPSJ1bmRlZmluZWQiIT10eXBlb2YgQXJyYXlCdWZmZXImJiJ1bmRlZmluZWQiIT10eXBlb2YgVWludDhBcnJheSxjLm5vZGVidWZmZXI9InVuZGVmaW5lZCIhPXR5cGVvZiBhLGMudWludDhhcnJheT0idW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQ4QXJyYXksInVuZGVmaW5lZCI9PXR5cGVvZiBBcnJheUJ1ZmZlciljLmJsb2I9ITE7ZWxzZXt2YXIgYj1uZXcgQXJyYXlCdWZmZXIoMCk7dHJ5e2MuYmxvYj0wPT09bmV3IEJsb2IoW2JdLHt0eXBlOiJhcHBsaWNhdGlvbi96aXAifSkuc2l6ZX1jYXRjaChkKXt0cnl7dmFyIGU9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIsZj1uZXcgZTtmLmFwcGVuZChiKSxjLmJsb2I9MD09PWYuZ2V0QmxvYigiYXBwbGljYXRpb24vemlwIikuc2l6ZX1jYXRjaChkKXtjLmJsb2I9ITF9fX19KS5jYWxsKHRoaXMsInVuZGVmaW5lZCIhPXR5cGVvZiBCdWZmZXI/QnVmZmVyOnZvaWQgMCl9LHt9XSwxODpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYyhhKXthJiYodGhpcy5kYXRhPWEsdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aCx0aGlzLmluZGV4PTApfXZhciBkPWEoIi4vZGF0YVJlYWRlciIpO2MucHJvdG90eXBlPW5ldyBkLGMucHJvdG90eXBlLmJ5dGVBdD1mdW5jdGlvbihhKXtyZXR1cm4gdGhpcy5kYXRhW2FdfSxjLnByb3RvdHlwZS5sYXN0SW5kZXhPZlNpZ25hdHVyZT1mdW5jdGlvbihhKXtmb3IodmFyIGI9YS5jaGFyQ29kZUF0KDApLGM9YS5jaGFyQ29kZUF0KDEpLGQ9YS5jaGFyQ29kZUF0KDIpLGU9YS5jaGFyQ29kZUF0KDMpLGY9dGhpcy5sZW5ndGgtNDtmPj0wOy0tZilpZih0aGlzLmRhdGFbZl09PT1iJiZ0aGlzLmRhdGFbZisxXT09PWMmJnRoaXMuZGF0YVtmKzJdPT09ZCYmdGhpcy5kYXRhW2YrM109PT1lKXJldHVybiBmO3JldHVybi0xfSxjLnByb3RvdHlwZS5yZWFkRGF0YT1mdW5jdGlvbihhKXtpZih0aGlzLmNoZWNrT2Zmc2V0KGEpLDA9PT1hKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgYj10aGlzLmRhdGEuc3ViYXJyYXkodGhpcy5pbmRleCx0aGlzLmluZGV4K2EpO3JldHVybiB0aGlzLmluZGV4Kz1hLGJ9LGIuZXhwb3J0cz1jfSx7Ii4vZGF0YVJlYWRlciI6NX1dLDE5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0Ijt2YXIgYz1hKCIuL3V0aWxzIiksZD1mdW5jdGlvbihhKXt0aGlzLmRhdGE9bmV3IFVpbnQ4QXJyYXkoYSksdGhpcy5pbmRleD0wfTtkLnByb3RvdHlwZT17YXBwZW5kOmZ1bmN0aW9uKGEpezAhPT1hLmxlbmd0aCYmKGE9Yy50cmFuc2Zvcm1UbygidWludDhhcnJheSIsYSksdGhpcy5kYXRhLnNldChhLHRoaXMuaW5kZXgpLHRoaXMuaW5kZXgrPWEubGVuZ3RoKX0sZmluYWxpemU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5kYXRhfX0sYi5leHBvcnRzPWR9LHsiLi91dGlscyI6MjF9XSwyMDpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0Ijtmb3IodmFyIGQ9YSgiLi91dGlscyIpLGU9YSgiLi9zdXBwb3J0IiksZj1hKCIuL25vZGVCdWZmZXIiKSxnPW5ldyBBcnJheSgyNTYpLGg9MDsyNTY+aDtoKyspZ1toXT1oPj0yNTI/NjpoPj0yNDg/NTpoPj0yNDA/NDpoPj0yMjQ/MzpoPj0xOTI/MjoxO2dbMjU0XT1nWzI1NF09MTt2YXIgaT1mdW5jdGlvbihhKXt2YXIgYixjLGQsZixnLGg9YS5sZW5ndGgsaT0wO2ZvcihmPTA7aD5mO2YrKyljPWEuY2hhckNvZGVBdChmKSw1NTI5Nj09PSg2NDUxMiZjKSYmaD5mKzEmJihkPWEuY2hhckNvZGVBdChmKzEpLDU2MzIwPT09KDY0NTEyJmQpJiYoYz02NTUzNisoYy01NTI5Njw8MTApKyhkLTU2MzIwKSxmKyspKSxpKz0xMjg+Yz8xOjIwNDg+Yz8yOjY1NTM2PmM/Mzo0O2ZvcihiPWUudWludDhhcnJheT9uZXcgVWludDhBcnJheShpKTpuZXcgQXJyYXkoaSksZz0wLGY9MDtpPmc7ZisrKWM9YS5jaGFyQ29kZUF0KGYpLDU1Mjk2PT09KDY0NTEyJmMpJiZoPmYrMSYmKGQ9YS5jaGFyQ29kZUF0KGYrMSksNTYzMjA9PT0oNjQ1MTImZCkmJihjPTY1NTM2KyhjLTU1Mjk2PDwxMCkrKGQtNTYzMjApLGYrKykpLDEyOD5jP2JbZysrXT1jOjIwNDg+Yz8oYltnKytdPTE5MnxjPj4+NixiW2crK109MTI4fDYzJmMpOjY1NTM2PmM/KGJbZysrXT0yMjR8Yz4+PjEyLGJbZysrXT0xMjh8Yz4+PjYmNjMsYltnKytdPTEyOHw2MyZjKTooYltnKytdPTI0MHxjPj4+MTgsYltnKytdPTEyOHxjPj4+MTImNjMsYltnKytdPTEyOHxjPj4+NiY2MyxiW2crK109MTI4fDYzJmMpO3JldHVybiBifSxqPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKGI9Ynx8YS5sZW5ndGgsYj5hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGM9Yi0xO2M+PTAmJjEyOD09PSgxOTImYVtjXSk7KWMtLTtyZXR1cm4gMD5jP2I6MD09PWM/YjpjK2dbYVtjXV0+Yj9jOmJ9LGs9ZnVuY3Rpb24oYSl7dmFyIGIsYyxlLGYsaD1hLmxlbmd0aCxpPW5ldyBBcnJheSgyKmgpO2ZvcihjPTAsYj0wO2g+YjspaWYoZT1hW2IrK10sMTI4PmUpaVtjKytdPWU7ZWxzZSBpZihmPWdbZV0sZj40KWlbYysrXT02NTUzMyxiKz1mLTE7ZWxzZXtmb3IoZSY9Mj09PWY/MzE6Mz09PWY/MTU6NztmPjEmJmg+YjspZT1lPDw2fDYzJmFbYisrXSxmLS07Zj4xP2lbYysrXT02NTUzMzo2NTUzNj5lP2lbYysrXT1lOihlLT02NTUzNixpW2MrK109NTUyOTZ8ZT4+MTAmMTAyMyxpW2MrK109NTYzMjB8MTAyMyZlKX1yZXR1cm4gaS5sZW5ndGghPT1jJiYoaS5zdWJhcnJheT9pPWkuc3ViYXJyYXkoMCxjKTppLmxlbmd0aD1jKSxkLmFwcGx5RnJvbUNoYXJDb2RlKGkpfTtjLnV0ZjhlbmNvZGU9ZnVuY3Rpb24oYSl7cmV0dXJuIGUubm9kZWJ1ZmZlcj9mKGEsInV0Zi04Iik6aShhKX0sYy51dGY4ZGVjb2RlPWZ1bmN0aW9uKGEpe2lmKGUubm9kZWJ1ZmZlcilyZXR1cm4gZC50cmFuc2Zvcm1Ubygibm9kZWJ1ZmZlciIsYSkudG9TdHJpbmcoInV0Zi04Iik7YT1kLnRyYW5zZm9ybVRvKGUudWludDhhcnJheT8idWludDhhcnJheSI6ImFycmF5IixhKTtmb3IodmFyIGI9W10sYz0wLGY9YS5sZW5ndGgsZz02NTUzNjtmPmM7KXt2YXIgaD1qKGEsTWF0aC5taW4oYytnLGYpKTtiLnB1c2goZS51aW50OGFycmF5P2soYS5zdWJhcnJheShjLGgpKTprKGEuc2xpY2UoYyxoKSkpLGM9aH1yZXR1cm4gYi5qb2luKCIiKX19LHsiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxNywiLi91dGlscyI6MjF9XSwyMTpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybiBhfWZ1bmN0aW9uIGUoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoOysrYyliW2NdPTI1NSZhLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9ZnVuY3Rpb24gZihhKXt2YXIgYj02NTUzNixkPVtdLGU9YS5sZW5ndGgsZj1jLmdldFR5cGVPZihhKSxnPTAsaD0hMDt0cnl7c3dpdGNoKGYpe2Nhc2UidWludDhhcnJheSI6U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLG5ldyBVaW50OEFycmF5KDApKTticmVhaztjYXNlIm5vZGVidWZmZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxqKDApKX19Y2F0Y2goaSl7aD0hMX1pZighaCl7Zm9yKHZhciBrPSIiLGw9MDtsPGEubGVuZ3RoO2wrKylrKz1TdHJpbmcuZnJvbUNoYXJDb2RlKGFbbF0pO3JldHVybiBrfWZvcig7ZT5nJiZiPjE7KXRyeXtkLnB1c2goImFycmF5Ij09PWZ8fCJub2RlYnVmZmVyIj09PWY/U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShudWxsLGEuc2xpY2UoZyxNYXRoLm1pbihnK2IsZSkpKTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsYS5zdWJhcnJheShnLE1hdGgubWluKGcrYixlKSkpKSxnKz1ifWNhdGNoKGkpe2I9TWF0aC5mbG9vcihiLzIpfXJldHVybiBkLmpvaW4oIiIpfWZ1bmN0aW9uIGcoYSxiKXtmb3IodmFyIGM9MDtjPGEubGVuZ3RoO2MrKyliW2NdPWFbY107cmV0dXJuIGJ9dmFyIGg9YSgiLi9zdXBwb3J0IiksaT1hKCIuL2NvbXByZXNzaW9ucyIpLGo9YSgiLi9ub2RlQnVmZmVyIik7Yy5zdHJpbmcyYmluYXJ5PWZ1bmN0aW9uKGEpe2Zvcih2YXIgYj0iIixjPTA7YzxhLmxlbmd0aDtjKyspYis9U3RyaW5nLmZyb21DaGFyQ29kZSgyNTUmYS5jaGFyQ29kZUF0KGMpKTtyZXR1cm4gYn0sYy5hcnJheUJ1ZmZlcjJCbG9iPWZ1bmN0aW9uKGEpe2MuY2hlY2tTdXBwb3J0KCJibG9iIik7dHJ5e3JldHVybiBuZXcgQmxvYihbYV0se3R5cGU6ImFwcGxpY2F0aW9uL3ppcCJ9KX1jYXRjaChiKXt0cnl7dmFyIGQ9d2luZG93LkJsb2JCdWlsZGVyfHx3aW5kb3cuV2ViS2l0QmxvYkJ1aWxkZXJ8fHdpbmRvdy5Nb3pCbG9iQnVpbGRlcnx8d2luZG93Lk1TQmxvYkJ1aWxkZXIsZT1uZXcgZDtyZXR1cm4gZS5hcHBlbmQoYSksZS5nZXRCbG9iKCJhcHBsaWNhdGlvbi96aXAiKX1jYXRjaChiKXt0aHJvdyBuZXcgRXJyb3IoIkJ1ZyA6IGNhbid0IGNvbnN0cnVjdCB0aGUgQmxvYi4iKX19fSxjLmFwcGx5RnJvbUNoYXJDb2RlPWY7dmFyIGs9e307ay5zdHJpbmc9e3N0cmluZzpkLGFycmF5OmZ1bmN0aW9uKGEpe3JldHVybiBlKGEsbmV3IEFycmF5KGEubGVuZ3RoKSl9LGFycmF5YnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBrLnN0cmluZy51aW50OGFycmF5KGEpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZShhLG5ldyBVaW50OEFycmF5KGEubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGUoYSxqKGEubGVuZ3RoKSl9fSxrLmFycmF5PXtzdHJpbmc6ZixhcnJheTpkLGFycmF5YnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBuZXcgVWludDhBcnJheShhKS5idWZmZXJ9LHVpbnQ4YXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBqKGEpfX0say5hcnJheWJ1ZmZlcj17c3RyaW5nOmZ1bmN0aW9uKGEpe3JldHVybiBmKG5ldyBVaW50OEFycmF5KGEpKX0sYXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGcobmV3IFVpbnQ4QXJyYXkoYSksbmV3IEFycmF5KGEuYnl0ZUxlbmd0aCkpfSxhcnJheWJ1ZmZlcjpkLHVpbnQ4YXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIG5ldyBVaW50OEFycmF5KGEpfSxub2RlYnVmZmVyOmZ1bmN0aW9uKGEpe3JldHVybiBqKG5ldyBVaW50OEFycmF5KGEpKX19LGsudWludDhhcnJheT17c3RyaW5nOmYsYXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGcoYSxuZXcgQXJyYXkoYS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGEuYnVmZmVyfSx1aW50OGFycmF5OmQsbm9kZWJ1ZmZlcjpmdW5jdGlvbihhKXtyZXR1cm4gaihhKX19LGsubm9kZWJ1ZmZlcj17c3RyaW5nOmYsYXJyYXk6ZnVuY3Rpb24oYSl7cmV0dXJuIGcoYSxuZXcgQXJyYXkoYS5sZW5ndGgpKX0sYXJyYXlidWZmZXI6ZnVuY3Rpb24oYSl7cmV0dXJuIGsubm9kZWJ1ZmZlci51aW50OGFycmF5KGEpLmJ1ZmZlcn0sdWludDhhcnJheTpmdW5jdGlvbihhKXtyZXR1cm4gZyhhLG5ldyBVaW50OEFycmF5KGEubGVuZ3RoKSl9LG5vZGVidWZmZXI6ZH0sYy50cmFuc2Zvcm1Ubz1mdW5jdGlvbihhLGIpe2lmKGJ8fChiPSIiKSwhYSlyZXR1cm4gYjtjLmNoZWNrU3VwcG9ydChhKTt2YXIgZD1jLmdldFR5cGVPZihiKSxlPWtbZF1bYV0oYik7cmV0dXJuIGV9LGMuZ2V0VHlwZU9mPWZ1bmN0aW9uKGEpe3JldHVybiJzdHJpbmciPT10eXBlb2YgYT8ic3RyaW5nIjoiW29iamVjdCBBcnJheV0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpPyJhcnJheSI6aC5ub2RlYnVmZmVyJiZqLnRlc3QoYSk/Im5vZGVidWZmZXIiOmgudWludDhhcnJheSYmYSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXk/InVpbnQ4YXJyYXkiOmguYXJyYXlidWZmZXImJmEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcj8iYXJyYXlidWZmZXIiOnZvaWQgMH0sYy5jaGVja1N1cHBvcnQ9ZnVuY3Rpb24oYSl7dmFyIGI9aFthLnRvTG93ZXJDYXNlKCldO2lmKCFiKXRocm93IG5ldyBFcnJvcihhKyIgaXMgbm90IHN1cHBvcnRlZCBieSB0aGlzIGJyb3dzZXIiKX0sYy5NQVhfVkFMVUVfMTZCSVRTPTY1NTM1LGMuTUFYX1ZBTFVFXzMyQklUUz0tMSxjLnByZXR0eT1mdW5jdGlvbihhKXt2YXIgYixjLGQ9IiI7Zm9yKGM9MDtjPChhfHwiIikubGVuZ3RoO2MrKyliPWEuY2hhckNvZGVBdChjKSxkKz0iXFx4IisoMTY+Yj8iMCI6IiIpK2IudG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCk7cmV0dXJuIGR9LGMuZmluZENvbXByZXNzaW9uPWZ1bmN0aW9uKGEpe2Zvcih2YXIgYiBpbiBpKWlmKGkuaGFzT3duUHJvcGVydHkoYikmJmlbYl0ubWFnaWM9PT1hKXJldHVybiBpW2JdO3JldHVybiBudWxsfSxjLmlzUmVnRXhwPWZ1bmN0aW9uKGEpe3JldHVybiJbb2JqZWN0IFJlZ0V4cF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGEpfX0seyIuL2NvbXByZXNzaW9ucyI6MywiLi9ub2RlQnVmZmVyIjoxMSwiLi9zdXBwb3J0IjoxN31dLDIyOltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYil7dGhpcy5maWxlcz1bXSx0aGlzLmxvYWRPcHRpb25zPWIsYSYmdGhpcy5sb2FkKGEpfXZhciBkPWEoIi4vc3RyaW5nUmVhZGVyIiksZT1hKCIuL25vZGVCdWZmZXJSZWFkZXIiKSxmPWEoIi4vdWludDhBcnJheVJlYWRlciIpLGc9YSgiLi91dGlscyIpLGg9YSgiLi9zaWduYXR1cmUiKSxpPWEoIi4vemlwRW50cnkiKSxqPWEoIi4vc3VwcG9ydCIpLGs9YSgiLi9vYmplY3QiKTtjLnByb3RvdHlwZT17Y2hlY2tTaWduYXR1cmU6ZnVuY3Rpb24oYSl7dmFyIGI9dGhpcy5yZWFkZXIucmVhZFN0cmluZyg0KTtpZihiIT09YSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgb3IgYnVnIDogdW5leHBlY3RlZCBzaWduYXR1cmUgKCIrZy5wcmV0dHkoYikrIiwgZXhwZWN0ZWQgIitnLnByZXR0eShhKSsiKSIpfSxyZWFkQmxvY2tFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt0aGlzLmRpc2tOdW1iZXI9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmRpc2tXaXRoQ2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyUmVjb3Jkc09uVGhpc0Rpc2s9dGhpcy5yZWFkZXIucmVhZEludCgyKSx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5jZW50cmFsRGlyU2l6ZT10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpck9mZnNldD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuemlwQ29tbWVudExlbmd0aD10aGlzLnJlYWRlci5yZWFkSW50KDIpLHRoaXMuemlwQ29tbWVudD10aGlzLnJlYWRlci5yZWFkU3RyaW5nKHRoaXMuemlwQ29tbWVudExlbmd0aCksdGhpcy56aXBDb21tZW50PWsudXRmOGRlY29kZSh0aGlzLnppcENvbW1lbnQpfSxyZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbDpmdW5jdGlvbigpe3RoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy52ZXJzaW9uTWFkZUJ5PXRoaXMucmVhZGVyLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPXRoaXMucmVhZGVyLnJlYWRJbnQoMiksdGhpcy5kaXNrTnVtYmVyPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrV2l0aENlbnRyYWxEaXJTdGFydD10aGlzLnJlYWRlci5yZWFkSW50KDQpLHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5jZW50cmFsRGlyUmVjb3Jkcz10aGlzLnJlYWRlci5yZWFkSW50KDgpLHRoaXMuY2VudHJhbERpclNpemU9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9dGhpcy5yZWFkZXIucmVhZEludCg4KSx0aGlzLnppcDY0RXh0ZW5zaWJsZURhdGE9e307Zm9yKHZhciBhLGIsYyxkPXRoaXMuemlwNjRFbmRPZkNlbnRyYWxTaXplLTQ0LGU9MDtkPmU7KWE9dGhpcy5yZWFkZXIucmVhZEludCgyKSxiPXRoaXMucmVhZGVyLnJlYWRJbnQoNCksYz10aGlzLnJlYWRlci5yZWFkU3RyaW5nKGIpLHRoaXMuemlwNjRFeHRlbnNpYmxlRGF0YVthXT17aWQ6YSxsZW5ndGg6Yix2YWx1ZTpjfX0scmVhZEJsb2NrWmlwNjRFbmRPZkNlbnRyYWxMb2NhdG9yOmZ1bmN0aW9uKCl7aWYodGhpcy5kaXNrV2l0aFppcDY0Q2VudHJhbERpclN0YXJ0PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5yZWxhdGl2ZU9mZnNldEVuZE9mWmlwNjRDZW50cmFsRGlyPXRoaXMucmVhZGVyLnJlYWRJbnQoOCksdGhpcy5kaXNrc0NvdW50PXRoaXMucmVhZGVyLnJlYWRJbnQoNCksdGhpcy5kaXNrc0NvdW50PjEpdGhyb3cgbmV3IEVycm9yKCJNdWx0aS12b2x1bWVzIHppcCBhcmUgbm90IHN1cHBvcnRlZCIpfSxyZWFkTG9jYWxGaWxlczpmdW5jdGlvbigpe3ZhciBhLGI7Zm9yKGE9MDthPHRoaXMuZmlsZXMubGVuZ3RoO2ErKyliPXRoaXMuZmlsZXNbYV0sdGhpcy5yZWFkZXIuc2V0SW5kZXgoYi5sb2NhbEhlYWRlck9mZnNldCksdGhpcy5jaGVja1NpZ25hdHVyZShoLkxPQ0FMX0ZJTEVfSEVBREVSKSxiLnJlYWRMb2NhbFBhcnQodGhpcy5yZWFkZXIpLGIuaGFuZGxlVVRGOCgpfSxyZWFkQ2VudHJhbERpcjpmdW5jdGlvbigpe3ZhciBhO2Zvcih0aGlzLnJlYWRlci5zZXRJbmRleCh0aGlzLmNlbnRyYWxEaXJPZmZzZXQpO3RoaXMucmVhZGVyLnJlYWRTdHJpbmcoNCk9PT1oLkNFTlRSQUxfRklMRV9IRUFERVI7KWE9bmV3IGkoe3ppcDY0OnRoaXMuemlwNjR9LHRoaXMubG9hZE9wdGlvbnMpLGEucmVhZENlbnRyYWxQYXJ0KHRoaXMucmVhZGVyKSx0aGlzLmZpbGVzLnB1c2goYSl9LHJlYWRFbmRPZkNlbnRyYWw6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShoLkNFTlRSQUxfRElSRUNUT1JZX0VORCk7aWYoLTE9PT1hKXRocm93IG5ldyBFcnJvcigiQ29ycnVwdGVkIHppcCA6IGNhbid0IGZpbmQgZW5kIG9mIGNlbnRyYWwgZGlyZWN0b3J5Iik7aWYodGhpcy5yZWFkZXIuc2V0SW5kZXgoYSksdGhpcy5jaGVja1NpZ25hdHVyZShoLkNFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2tFbmRPZkNlbnRyYWwoKSx0aGlzLmRpc2tOdW1iZXI9PT1nLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuZGlza1dpdGhDZW50cmFsRGlyU3RhcnQ9PT1nLk1BWF9WQUxVRV8xNkJJVFN8fHRoaXMuY2VudHJhbERpclJlY29yZHNPblRoaXNEaXNrPT09Zy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJSZWNvcmRzPT09Zy5NQVhfVkFMVUVfMTZCSVRTfHx0aGlzLmNlbnRyYWxEaXJTaXplPT09Zy5NQVhfVkFMVUVfMzJCSVRTfHx0aGlzLmNlbnRyYWxEaXJPZmZzZXQ9PT1nLk1BWF9WQUxVRV8zMkJJVFMpe2lmKHRoaXMuemlwNjQ9ITAsYT10aGlzLnJlYWRlci5sYXN0SW5kZXhPZlNpZ25hdHVyZShoLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0xPQ0FUT1IpLC0xPT09YSl0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjYW4ndCBmaW5kIHRoZSBaSVA2NCBlbmQgb2YgY2VudHJhbCBkaXJlY3RvcnkgbG9jYXRvciIpO3RoaXMucmVhZGVyLnNldEluZGV4KGEpLHRoaXMuY2hlY2tTaWduYXR1cmUoaC5aSVA2NF9DRU5UUkFMX0RJUkVDVE9SWV9MT0NBVE9SKSx0aGlzLnJlYWRCbG9ja1ppcDY0RW5kT2ZDZW50cmFsTG9jYXRvcigpLHRoaXMucmVhZGVyLnNldEluZGV4KHRoaXMucmVsYXRpdmVPZmZzZXRFbmRPZlppcDY0Q2VudHJhbERpciksdGhpcy5jaGVja1NpZ25hdHVyZShoLlpJUDY0X0NFTlRSQUxfRElSRUNUT1JZX0VORCksdGhpcy5yZWFkQmxvY2taaXA2NEVuZE9mQ2VudHJhbCgpfX0scHJlcGFyZVJlYWRlcjpmdW5jdGlvbihhKXt2YXIgYj1nLmdldFR5cGVPZihhKTt0aGlzLnJlYWRlcj0ic3RyaW5nIiE9PWJ8fGoudWludDhhcnJheT8ibm9kZWJ1ZmZlciI9PT1iP25ldyBlKGEpOm5ldyBmKGcudHJhbnNmb3JtVG8oInVpbnQ4YXJyYXkiLGEpKTpuZXcgZChhLHRoaXMubG9hZE9wdGlvbnMub3B0aW1pemVkQmluYXJ5U3RyaW5nKX0sbG9hZDpmdW5jdGlvbihhKXt0aGlzLnByZXBhcmVSZWFkZXIoYSksdGhpcy5yZWFkRW5kT2ZDZW50cmFsKCksdGhpcy5yZWFkQ2VudHJhbERpcigpLHRoaXMucmVhZExvY2FsRmlsZXMoKX19LGIuZXhwb3J0cz1jfSx7Ii4vbm9kZUJ1ZmZlclJlYWRlciI6MTIsIi4vb2JqZWN0IjoxMywiLi9zaWduYXR1cmUiOjE0LCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vc3VwcG9ydCI6MTcsIi4vdWludDhBcnJheVJlYWRlciI6MTgsIi4vdXRpbHMiOjIxLCIuL3ppcEVudHJ5IjoyM31dLDIzOltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYil7dGhpcy5vcHRpb25zPWEsdGhpcy5sb2FkT3B0aW9ucz1ifXZhciBkPWEoIi4vc3RyaW5nUmVhZGVyIiksZT1hKCIuL3V0aWxzIiksZj1hKCIuL2NvbXByZXNzZWRPYmplY3QiKSxnPWEoIi4vb2JqZWN0Iik7Yy5wcm90b3R5cGU9e2lzRW5jcnlwdGVkOmZ1bmN0aW9uKCl7cmV0dXJuIDE9PT0oMSZ0aGlzLmJpdEZsYWcpfSx1c2VVVEY4OmZ1bmN0aW9uKCl7cmV0dXJuIDIwNDg9PT0oMjA0OCZ0aGlzLmJpdEZsYWcpfSxwcmVwYXJlQ29tcHJlc3NlZENvbnRlbnQ6ZnVuY3Rpb24oYSxiLGMpe3JldHVybiBmdW5jdGlvbigpe3ZhciBkPWEuaW5kZXg7YS5zZXRJbmRleChiKTt2YXIgZT1hLnJlYWREYXRhKGMpO3JldHVybiBhLnNldEluZGV4KGQpLGV9fSxwcmVwYXJlQ29udGVudDpmdW5jdGlvbihhLGIsYyxkLGYpe3JldHVybiBmdW5jdGlvbigpe3ZhciBhPWUudHJhbnNmb3JtVG8oZC51bmNvbXByZXNzSW5wdXRUeXBlLHRoaXMuZ2V0Q29tcHJlc3NlZENvbnRlbnQoKSksYj1kLnVuY29tcHJlc3MoYSk7aWYoYi5sZW5ndGghPT1mKXRocm93IG5ldyBFcnJvcigiQnVnIDogdW5jb21wcmVzc2VkIGRhdGEgc2l6ZSBtaXNtYXRjaCIpO3JldHVybiBifX0scmVhZExvY2FsUGFydDpmdW5jdGlvbihhKXt2YXIgYixjO2lmKGEuc2tpcCgyMiksdGhpcy5maWxlTmFtZUxlbmd0aD1hLnJlYWRJbnQoMiksYz1hLnJlYWRJbnQoMiksdGhpcy5maWxlTmFtZT1hLnJlYWRTdHJpbmcodGhpcy5maWxlTmFtZUxlbmd0aCksYS5za2lwKGMpLC0xPT10aGlzLmNvbXByZXNzZWRTaXplfHwtMT09dGhpcy51bmNvbXByZXNzZWRTaXplKXRocm93IG5ldyBFcnJvcigiQnVnIG9yIGNvcnJ1cHRlZCB6aXAgOiBkaWRuJ3QgZ2V0IGVub3VnaCBpbmZvcm1hdGlvbnMgZnJvbSB0aGUgY2VudHJhbCBkaXJlY3RvcnkgKGNvbXByZXNzZWRTaXplID09IC0xIHx8IHVuY29tcHJlc3NlZFNpemUgPT0gLTEpIik7aWYoYj1lLmZpbmRDb21wcmVzc2lvbih0aGlzLmNvbXByZXNzaW9uTWV0aG9kKSxudWxsPT09Yil0aHJvdyBuZXcgRXJyb3IoIkNvcnJ1cHRlZCB6aXAgOiBjb21wcmVzc2lvbiAiK2UucHJldHR5KHRoaXMuY29tcHJlc3Npb25NZXRob2QpKyIgdW5rbm93biAoaW5uZXIgZmlsZSA6ICIrdGhpcy5maWxlTmFtZSsiKSIpO2lmKHRoaXMuZGVjb21wcmVzc2VkPW5ldyBmLHRoaXMuZGVjb21wcmVzc2VkLmNvbXByZXNzZWRTaXplPXRoaXMuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQudW5jb21wcmVzc2VkU2l6ZT10aGlzLnVuY29tcHJlc3NlZFNpemUsdGhpcy5kZWNvbXByZXNzZWQuY3JjMzI9dGhpcy5jcmMzMix0aGlzLmRlY29tcHJlc3NlZC5jb21wcmVzc2lvbk1ldGhvZD10aGlzLmNvbXByZXNzaW9uTWV0aG9kLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbXByZXNzZWRDb250ZW50PXRoaXMucHJlcGFyZUNvbXByZXNzZWRDb250ZW50KGEsYS5pbmRleCx0aGlzLmNvbXByZXNzZWRTaXplLGIpLHRoaXMuZGVjb21wcmVzc2VkLmdldENvbnRlbnQ9dGhpcy5wcmVwYXJlQ29udGVudChhLGEuaW5kZXgsdGhpcy5jb21wcmVzc2VkU2l6ZSxiLHRoaXMudW5jb21wcmVzc2VkU2l6ZSksdGhpcy5sb2FkT3B0aW9ucy5jaGVja0NSQzMyJiYodGhpcy5kZWNvbXByZXNzZWQ9ZS50cmFuc2Zvcm1Ubygic3RyaW5nIix0aGlzLmRlY29tcHJlc3NlZC5nZXRDb250ZW50KCkpLGcuY3JjMzIodGhpcy5kZWNvbXByZXNzZWQpIT09dGhpcy5jcmMzMikpdGhyb3cgbmV3IEVycm9yKCJDb3JydXB0ZWQgemlwIDogQ1JDMzIgbWlzbWF0Y2giKX0scmVhZENlbnRyYWxQYXJ0OmZ1bmN0aW9uKGEpe2lmKHRoaXMudmVyc2lvbk1hZGVCeT1hLnJlYWRTdHJpbmcoMiksdGhpcy52ZXJzaW9uTmVlZGVkPWEucmVhZEludCgyKSx0aGlzLmJpdEZsYWc9YS5yZWFkSW50KDIpLHRoaXMuY29tcHJlc3Npb25NZXRob2Q9YS5yZWFkU3RyaW5nKDIpLHRoaXMuZGF0ZT1hLnJlYWREYXRlKCksdGhpcy5jcmMzMj1hLnJlYWRJbnQoNCksdGhpcy5jb21wcmVzc2VkU2l6ZT1hLnJlYWRJbnQoNCksdGhpcy51bmNvbXByZXNzZWRTaXplPWEucmVhZEludCg0KSx0aGlzLmZpbGVOYW1lTGVuZ3RoPWEucmVhZEludCgyKSx0aGlzLmV4dHJhRmllbGRzTGVuZ3RoPWEucmVhZEludCgyKSx0aGlzLmZpbGVDb21tZW50TGVuZ3RoPWEucmVhZEludCgyKSx0aGlzLmRpc2tOdW1iZXJTdGFydD1hLnJlYWRJbnQoMiksdGhpcy5pbnRlcm5hbEZpbGVBdHRyaWJ1dGVzPWEucmVhZEludCgyKSx0aGlzLmV4dGVybmFsRmlsZUF0dHJpYnV0ZXM9YS5yZWFkSW50KDQpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9YS5yZWFkSW50KDQpLHRoaXMuaXNFbmNyeXB0ZWQoKSl0aHJvdyBuZXcgRXJyb3IoIkVuY3J5cHRlZCB6aXAgYXJlIG5vdCBzdXBwb3J0ZWQiKTt0aGlzLmZpbGVOYW1lPWEucmVhZFN0cmluZyh0aGlzLmZpbGVOYW1lTGVuZ3RoKSx0aGlzLnJlYWRFeHRyYUZpZWxkcyhhKSx0aGlzLnBhcnNlWklQNjRFeHRyYUZpZWxkKGEpLHRoaXMuZmlsZUNvbW1lbnQ9YS5yZWFkU3RyaW5nKHRoaXMuZmlsZUNvbW1lbnRMZW5ndGgpLHRoaXMuZGlyPTE2JnRoaXMuZXh0ZXJuYWxGaWxlQXR0cmlidXRlcz8hMDohMX0scGFyc2VaSVA2NEV4dHJhRmllbGQ6ZnVuY3Rpb24oKXtpZih0aGlzLmV4dHJhRmllbGRzWzFdKXt2YXIgYT1uZXcgZCh0aGlzLmV4dHJhRmllbGRzWzFdLnZhbHVlKTt0aGlzLnVuY29tcHJlc3NlZFNpemU9PT1lLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLnVuY29tcHJlc3NlZFNpemU9YS5yZWFkSW50KDgpKSx0aGlzLmNvbXByZXNzZWRTaXplPT09ZS5NQVhfVkFMVUVfMzJCSVRTJiYodGhpcy5jb21wcmVzc2VkU2l6ZT1hLnJlYWRJbnQoOCkpLHRoaXMubG9jYWxIZWFkZXJPZmZzZXQ9PT1lLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmxvY2FsSGVhZGVyT2Zmc2V0PWEucmVhZEludCg4KSksdGhpcy5kaXNrTnVtYmVyU3RhcnQ9PT1lLk1BWF9WQUxVRV8zMkJJVFMmJih0aGlzLmRpc2tOdW1iZXJTdGFydD1hLnJlYWRJbnQoNCkpfX0scmVhZEV4dHJhRmllbGRzOmZ1bmN0aW9uKGEpe3ZhciBiLGMsZCxlPWEuaW5kZXg7Zm9yKHRoaXMuZXh0cmFGaWVsZHM9dGhpcy5leHRyYUZpZWxkc3x8e307YS5pbmRleDxlK3RoaXMuZXh0cmFGaWVsZHNMZW5ndGg7KWI9YS5yZWFkSW50KDIpLGM9YS5yZWFkSW50KDIpLGQ9YS5yZWFkU3RyaW5nKGMpLHRoaXMuZXh0cmFGaWVsZHNbYl09e2lkOmIsbGVuZ3RoOmMsdmFsdWU6ZH19LGhhbmRsZVVURjg6ZnVuY3Rpb24oKXtpZih0aGlzLnVzZVVURjgoKSl0aGlzLmZpbGVOYW1lPWcudXRmOGRlY29kZSh0aGlzLmZpbGVOYW1lKSx0aGlzLmZpbGVDb21tZW50PWcudXRmOGRlY29kZSh0aGlzLmZpbGVDb21tZW50KTtlbHNle3ZhciBhPXRoaXMuZmluZEV4dHJhRmllbGRVbmljb2RlUGF0aCgpO251bGwhPT1hJiYodGhpcy5maWxlTmFtZT1hKTt2YXIgYj10aGlzLmZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQoKTtudWxsIT09YiYmKHRoaXMuZmlsZUNvbW1lbnQ9Yil9fSxmaW5kRXh0cmFGaWVsZFVuaWNvZGVQYXRoOmZ1bmN0aW9uKCl7dmFyIGE9dGhpcy5leHRyYUZpZWxkc1syODc4OV07aWYoYSl7dmFyIGI9bmV3IGQoYS52YWx1ZSk7cmV0dXJuIDEhPT1iLnJlYWRJbnQoMSk/bnVsbDpnLmNyYzMyKHRoaXMuZmlsZU5hbWUpIT09Yi5yZWFkSW50KDQpP251bGw6Zy51dGY4ZGVjb2RlKGIucmVhZFN0cmluZyhhLmxlbmd0aC01KSl9cmV0dXJuIG51bGx9LGZpbmRFeHRyYUZpZWxkVW5pY29kZUNvbW1lbnQ6ZnVuY3Rpb24oKXt2YXIgYT10aGlzLmV4dHJhRmllbGRzWzI1NDYxXTtpZihhKXt2YXIgYj1uZXcgZChhLnZhbHVlKTtyZXR1cm4gMSE9PWIucmVhZEludCgxKT9udWxsOmcuY3JjMzIodGhpcy5maWxlQ29tbWVudCkhPT1iLnJlYWRJbnQoNCk/bnVsbDpnLnV0ZjhkZWNvZGUoYi5yZWFkU3RyaW5nKGEubGVuZ3RoLTUpKX1yZXR1cm4gbnVsbH19LGIuZXhwb3J0cz1jfSx7Ii4vY29tcHJlc3NlZE9iamVjdCI6MiwiLi9vYmplY3QiOjEzLCIuL3N0cmluZ1JlYWRlciI6MTUsIi4vdXRpbHMiOjIxfV0sMjQ6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPWEoIi4vbGliL3V0aWxzL2NvbW1vbiIpLmFzc2lnbixkPWEoIi4vbGliL2RlZmxhdGUiKSxlPWEoIi4vbGliL2luZmxhdGUiKSxmPWEoIi4vbGliL3psaWIvY29uc3RhbnRzIiksZz17fTtjKGcsZCxlLGYpLGIuZXhwb3J0cz1nfSx7Ii4vbGliL2RlZmxhdGUiOjI1LCIuL2xpYi9pbmZsYXRlIjoyNiwiLi9saWIvdXRpbHMvY29tbW9uIjoyNywiLi9saWIvemxpYi9jb25zdGFudHMiOjMwfV0sMjU6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gZChhLGIpe3ZhciBjPW5ldyBzKGIpO2lmKGMucHVzaChhLCEwKSxjLmVycil0aHJvdyBjLm1zZztyZXR1cm4gYy5yZXN1bHR9ZnVuY3Rpb24gZShhLGIpe3JldHVybiBiPWJ8fHt9LGIucmF3PSEwLGQoYSxiKX1mdW5jdGlvbiBmKGEsYil7cmV0dXJuIGI9Ynx8e30sYi5nemlwPSEwLGQoYSxiKX12YXIgZz1hKCIuL3psaWIvZGVmbGF0ZS5qcyIpLGg9YSgiLi91dGlscy9jb21tb24iKSxpPWEoIi4vdXRpbHMvc3RyaW5ncyIpLGo9YSgiLi96bGliL21lc3NhZ2VzIiksaz1hKCIuL3psaWIvenN0cmVhbSIpLGw9MCxtPTQsbj0wLG89MSxwPS0xLHE9MCxyPTgscz1mdW5jdGlvbihhKXt0aGlzLm9wdGlvbnM9aC5hc3NpZ24oe2xldmVsOnAsbWV0aG9kOnIsY2h1bmtTaXplOjE2Mzg0LHdpbmRvd0JpdHM6MTUsbWVtTGV2ZWw6OCxzdHJhdGVneTpxLHRvOiIifSxhfHx7fSk7dmFyIGI9dGhpcy5vcHRpb25zO2IucmF3JiZiLndpbmRvd0JpdHM+MD9iLndpbmRvd0JpdHM9LWIud2luZG93Qml0czpiLmd6aXAmJmIud2luZG93Qml0cz4wJiZiLndpbmRvd0JpdHM8MTYmJihiLndpbmRvd0JpdHMrPTE2KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBrLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgYz1nLmRlZmxhdGVJbml0Mih0aGlzLnN0cm0sYi5sZXZlbCxiLm1ldGhvZCxiLndpbmRvd0JpdHMsYi5tZW1MZXZlbCxiLnN0cmF0ZWd5KTtpZihjIT09bil0aHJvdyBuZXcgRXJyb3IoaltjXSk7Yi5oZWFkZXImJmcuZGVmbGF0ZVNldEhlYWRlcih0aGlzLnN0cm0sYi5oZWFkZXIpfTtzLnByb3RvdHlwZS5wdXNoPWZ1bmN0aW9uKGEsYil7dmFyIGMsZCxlPXRoaXMuc3RybSxmPXRoaXMub3B0aW9ucy5jaHVua1NpemU7aWYodGhpcy5lbmRlZClyZXR1cm4hMTtkPWI9PT1+fmI/YjpiPT09ITA/bTpsLGUuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBhP2kuc3RyaW5nMmJ1ZihhKTphLGUubmV4dF9pbj0wLGUuYXZhaWxfaW49ZS5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWUuYXZhaWxfb3V0JiYoZS5vdXRwdXQ9bmV3IGguQnVmOChmKSxlLm5leHRfb3V0PTAsZS5hdmFpbF9vdXQ9ZiksYz1nLmRlZmxhdGUoZSxkKSxjIT09byYmYyE9PW4pcmV0dXJuIHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCwhMTsoMD09PWUuYXZhaWxfb3V0fHwwPT09ZS5hdmFpbF9pbiYmZD09PW0pJiZ0aGlzLm9uRGF0YSgic3RyaW5nIj09PXRoaXMub3B0aW9ucy50bz9pLmJ1ZjJiaW5zdHJpbmcoaC5zaHJpbmtCdWYoZS5vdXRwdXQsZS5uZXh0X291dCkpOmguc2hyaW5rQnVmKGUub3V0cHV0LGUubmV4dF9vdXQpKX13aGlsZSgoZS5hdmFpbF9pbj4wfHwwPT09ZS5hdmFpbF9vdXQpJiZjIT09byk7cmV0dXJuIGQ9PT1tPyhjPWcuZGVmbGF0ZUVuZCh0aGlzLnN0cm0pLHRoaXMub25FbmQoYyksdGhpcy5lbmRlZD0hMCxjPT09bik6ITB9LHMucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNodW5rcy5wdXNoKGEpfSxzLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihhKXthPT09biYmKHRoaXMucmVzdWx0PSJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvP3RoaXMuY2h1bmtzLmpvaW4oIiIpOmguZmxhdHRlbkNodW5rcyh0aGlzLmNodW5rcykpLHRoaXMuY2h1bmtzPVtdLHRoaXMuZXJyPWEsdGhpcy5tc2c9dGhpcy5zdHJtLm1zZ30sYy5EZWZsYXRlPXMsYy5kZWZsYXRlPWQsYy5kZWZsYXRlUmF3PWUsYy5nemlwPWZ9LHsiLi91dGlscy9jb21tb24iOjI3LCIuL3V0aWxzL3N0cmluZ3MiOjI4LCIuL3psaWIvZGVmbGF0ZS5qcyI6MzIsIi4vemxpYi9tZXNzYWdlcyI6MzcsIi4vemxpYi96c3RyZWFtIjozOX1dLDI2OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXt2YXIgYz1uZXcgbShiKTtpZihjLnB1c2goYSwhMCksYy5lcnIpdGhyb3cgYy5tc2c7cmV0dXJuIGMucmVzdWx0fWZ1bmN0aW9uIGUoYSxiKXtyZXR1cm4gYj1ifHx7fSxiLnJhdz0hMCxkKGEsYil9dmFyIGY9YSgiLi96bGliL2luZmxhdGUuanMiKSxnPWEoIi4vdXRpbHMvY29tbW9uIiksaD1hKCIuL3V0aWxzL3N0cmluZ3MiKSxpPWEoIi4vemxpYi9jb25zdGFudHMiKSxqPWEoIi4vemxpYi9tZXNzYWdlcyIpLGs9YSgiLi96bGliL3pzdHJlYW0iKSxsPWEoIi4vemxpYi9nemhlYWRlciIpLG09ZnVuY3Rpb24oYSl7dGhpcy5vcHRpb25zPWcuYXNzaWduKHtjaHVua1NpemU6MTYzODQsd2luZG93Qml0czowLHRvOiIifSxhfHx7fSk7dmFyIGI9dGhpcy5vcHRpb25zO2IucmF3JiZiLndpbmRvd0JpdHM+PTAmJmIud2luZG93Qml0czwxNiYmKGIud2luZG93Qml0cz0tYi53aW5kb3dCaXRzLDA9PT1iLndpbmRvd0JpdHMmJihiLndpbmRvd0JpdHM9LTE1KSksIShiLndpbmRvd0JpdHM+PTAmJmIud2luZG93Qml0czwxNil8fGEmJmEud2luZG93Qml0c3x8KGIud2luZG93Qml0cys9MzIpLGIud2luZG93Qml0cz4xNSYmYi53aW5kb3dCaXRzPDQ4JiYwPT09KDE1JmIud2luZG93Qml0cykmJihiLndpbmRvd0JpdHN8PTE1KSx0aGlzLmVycj0wLHRoaXMubXNnPSIiLHRoaXMuZW5kZWQ9ITEsdGhpcy5jaHVua3M9W10sdGhpcy5zdHJtPW5ldyBrLHRoaXMuc3RybS5hdmFpbF9vdXQ9MDt2YXIgYz1mLmluZmxhdGVJbml0Mih0aGlzLnN0cm0sYi53aW5kb3dCaXRzKTtpZihjIT09aS5aX09LKXRocm93IG5ldyBFcnJvcihqW2NdKTt0aGlzLmhlYWRlcj1uZXcgbCxmLmluZmxhdGVHZXRIZWFkZXIodGhpcy5zdHJtLHRoaXMuaGVhZGVyKX07bS5wcm90b3R5cGUucHVzaD1mdW5jdGlvbihhLGIpe3ZhciBjLGQsZSxqLGssbD10aGlzLnN0cm0sbT10aGlzLm9wdGlvbnMuY2h1bmtTaXplO2lmKHRoaXMuZW5kZWQpcmV0dXJuITE7ZD1iPT09fn5iP2I6Yj09PSEwP2kuWl9GSU5JU0g6aS5aX05PX0ZMVVNILGwuaW5wdXQ9InN0cmluZyI9PXR5cGVvZiBhP2guYmluc3RyaW5nMmJ1ZihhKTphLGwubmV4dF9pbj0wLGwuYXZhaWxfaW49bC5pbnB1dC5sZW5ndGg7ZG97aWYoMD09PWwuYXZhaWxfb3V0JiYobC5vdXRwdXQ9bmV3IGcuQnVmOChtKSxsLm5leHRfb3V0PTAsbC5hdmFpbF9vdXQ9bSksYz1mLmluZmxhdGUobCxpLlpfTk9fRkxVU0gpLGMhPT1pLlpfU1RSRUFNX0VORCYmYyE9PWkuWl9PSylyZXR1cm4gdGhpcy5vbkVuZChjKSx0aGlzLmVuZGVkPSEwLCExO2wubmV4dF9vdXQmJigwPT09bC5hdmFpbF9vdXR8fGM9PT1pLlpfU1RSRUFNX0VORHx8MD09PWwuYXZhaWxfaW4mJmQ9PT1pLlpfRklOSVNIKSYmKCJzdHJpbmciPT09dGhpcy5vcHRpb25zLnRvPyhlPWgudXRmOGJvcmRlcihsLm91dHB1dCxsLm5leHRfb3V0KSxqPWwubmV4dF9vdXQtZSxrPWguYnVmMnN0cmluZyhsLm91dHB1dCxlKSxsLm5leHRfb3V0PWosbC5hdmFpbF9vdXQ9bS1qLGomJmcuYXJyYXlTZXQobC5vdXRwdXQsbC5vdXRwdXQsZSxqLDApLHRoaXMub25EYXRhKGspKTp0aGlzLm9uRGF0YShnLnNocmlua0J1ZihsLm91dHB1dCxsLm5leHRfb3V0KSkpfXdoaWxlKGwuYXZhaWxfaW4+MCYmYyE9PWkuWl9TVFJFQU1fRU5EKTtyZXR1cm4gYz09PWkuWl9TVFJFQU1fRU5EJiYoZD1pLlpfRklOSVNIKSxkPT09aS5aX0ZJTklTSD8oYz1mLmluZmxhdGVFbmQodGhpcy5zdHJtKSx0aGlzLm9uRW5kKGMpLHRoaXMuZW5kZWQ9ITAsYz09PWkuWl9PSyk6ITB9LG0ucHJvdG90eXBlLm9uRGF0YT1mdW5jdGlvbihhKXt0aGlzLmNodW5rcy5wdXNoKGEpfSxtLnByb3RvdHlwZS5vbkVuZD1mdW5jdGlvbihhKXthPT09aS5aX09LJiYodGhpcy5yZXN1bHQ9InN0cmluZyI9PT10aGlzLm9wdGlvbnMudG8/dGhpcy5jaHVua3Muam9pbigiIik6Zy5mbGF0dGVuQ2h1bmtzKHRoaXMuY2h1bmtzKSksdGhpcy5jaHVua3M9W10sdGhpcy5lcnI9YSx0aGlzLm1zZz10aGlzLnN0cm0ubXNnfSxjLkluZmxhdGU9bSxjLmluZmxhdGU9ZCxjLmluZmxhdGVSYXc9ZSxjLnVuZ3ppcD1kfSx7Ii4vdXRpbHMvY29tbW9uIjoyNywiLi91dGlscy9zdHJpbmdzIjoyOCwiLi96bGliL2NvbnN0YW50cyI6MzAsIi4vemxpYi9nemhlYWRlciI6MzMsIi4vemxpYi9pbmZsYXRlLmpzIjozNSwiLi96bGliL21lc3NhZ2VzIjozNywiLi96bGliL3pzdHJlYW0iOjM5fV0sMjc6W2Z1bmN0aW9uKGEsYixjKXsidXNlIHN0cmljdCI7dmFyIGQ9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIFVpbnQxNkFycmF5JiYidW5kZWZpbmVkIiE9dHlwZW9mIEludDMyQXJyYXk7Yy5hc3NpZ249ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGFyZ3VtZW50cywxKTtiLmxlbmd0aDspe3ZhciBjPWIuc2hpZnQoKTtpZihjKXtpZigib2JqZWN0IiE9dHlwZW9mIGMpdGhyb3cgbmV3IFR5cGVFcnJvcihjKyJtdXN0IGJlIG5vbi1vYmplY3QiKTtmb3IodmFyIGQgaW4gYyljLmhhc093blByb3BlcnR5KGQpJiYoYVtkXT1jW2RdKX19cmV0dXJuIGF9LGMuc2hyaW5rQnVmPWZ1bmN0aW9uKGEsYil7cmV0dXJuIGEubGVuZ3RoPT09Yj9hOmEuc3ViYXJyYXk/YS5zdWJhcnJheSgwLGIpOihhLmxlbmd0aD1iLGEpfTt2YXIgZT17YXJyYXlTZXQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtpZihiLnN1YmFycmF5JiZhLnN1YmFycmF5KXJldHVybiB2b2lkIGEuc2V0KGIuc3ViYXJyYXkoYyxjK2QpLGUpO2Zvcih2YXIgZj0wO2Q+ZjtmKyspYVtlK2ZdPWJbYytmXX0sZmxhdHRlbkNodW5rczpmdW5jdGlvbihhKXt2YXIgYixjLGQsZSxmLGc7Zm9yKGQ9MCxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWQrPWFbYl0ubGVuZ3RoO2ZvcihnPW5ldyBVaW50OEFycmF5KGQpLGU9MCxiPTAsYz1hLmxlbmd0aDtjPmI7YisrKWY9YVtiXSxnLnNldChmLGUpLGUrPWYubGVuZ3RoO3JldHVybiBnfX0sZj17YXJyYXlTZXQ6ZnVuY3Rpb24oYSxiLGMsZCxlKXtmb3IodmFyIGY9MDtkPmY7ZisrKWFbZStmXT1iW2MrZl19LGZsYXR0ZW5DaHVua3M6ZnVuY3Rpb24oYSl7cmV0dXJuW10uY29uY2F0LmFwcGx5KFtdLGEpfX07Yy5zZXRUeXBlZD1mdW5jdGlvbihhKXthPyhjLkJ1Zjg9VWludDhBcnJheSxjLkJ1ZjE2PVVpbnQxNkFycmF5LGMuQnVmMzI9SW50MzJBcnJheSxjLmFzc2lnbihjLGUpKTooYy5CdWY4PUFycmF5LGMuQnVmMTY9QXJyYXksYy5CdWYzMj1BcnJheSxjLmFzc2lnbihjLGYpKX0sYy5zZXRUeXBlZChkKX0se31dLDI4OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSxiKXtpZig2NTUzNz5iJiYoYS5zdWJhcnJheSYmZ3x8IWEuc3ViYXJyYXkmJmYpKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zaHJpbmtCdWYoYSxiKSk7Zm9yKHZhciBjPSIiLGQ9MDtiPmQ7ZCsrKWMrPVN0cmluZy5mcm9tQ2hhckNvZGUoYVtkXSk7cmV0dXJuIGN9dmFyIGU9YSgiLi9jb21tb24iKSxmPSEwLGc9ITA7dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxbMF0pfWNhdGNoKGgpe2Y9ITF9dHJ5e1N0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkobnVsbCxuZXcgVWludDhBcnJheSgxKSl9Y2F0Y2goaCl7Zz0hMX1mb3IodmFyIGk9bmV3IGUuQnVmOCgyNTYpLGo9MDsyNTY+ajtqKyspaVtqXT1qPj0yNTI/NjpqPj0yNDg/NTpqPj0yNDA/NDpqPj0yMjQ/MzpqPj0xOTI/MjoxO2lbMjU0XT1pWzI1NF09MSxjLnN0cmluZzJidWY9ZnVuY3Rpb24oYSl7dmFyIGIsYyxkLGYsZyxoPWEubGVuZ3RoLGk9MDtmb3IoZj0wO2g+ZjtmKyspYz1hLmNoYXJDb2RlQXQoZiksNTUyOTY9PT0oNjQ1MTImYykmJmg+ZisxJiYoZD1hLmNoYXJDb2RlQXQoZisxKSw1NjMyMD09PSg2NDUxMiZkKSYmKGM9NjU1MzYrKGMtNTUyOTY8PDEwKSsoZC01NjMyMCksZisrKSksaSs9MTI4PmM/MToyMDQ4PmM/Mjo2NTUzNj5jPzM6NDtmb3IoYj1uZXcgZS5CdWY4KGkpLGc9MCxmPTA7aT5nO2YrKyljPWEuY2hhckNvZGVBdChmKSw1NTI5Nj09PSg2NDUxMiZjKSYmaD5mKzEmJihkPWEuY2hhckNvZGVBdChmKzEpLDU2MzIwPT09KDY0NTEyJmQpJiYoYz02NTUzNisoYy01NTI5Njw8MTApKyhkLTU2MzIwKSxmKyspKSwxMjg+Yz9iW2crK109YzoyMDQ4PmM/KGJbZysrXT0xOTJ8Yz4+PjYsYltnKytdPTEyOHw2MyZjKTo2NTUzNj5jPyhiW2crK109MjI0fGM+Pj4xMixiW2crK109MTI4fGM+Pj42JjYzLGJbZysrXT0xMjh8NjMmYyk6KGJbZysrXT0yNDB8Yz4+PjE4LGJbZysrXT0xMjh8Yz4+PjEyJjYzLGJbZysrXT0xMjh8Yz4+PjYmNjMsYltnKytdPTEyOHw2MyZjKTtyZXR1cm4gYn0sYy5idWYyYmluc3RyaW5nPWZ1bmN0aW9uKGEpe3JldHVybiBkKGEsYS5sZW5ndGgpfSxjLmJpbnN0cmluZzJidWY9ZnVuY3Rpb24oYSl7Zm9yKHZhciBiPW5ldyBlLkJ1ZjgoYS5sZW5ndGgpLGM9MCxkPWIubGVuZ3RoO2Q+YztjKyspYltjXT1hLmNoYXJDb2RlQXQoYyk7cmV0dXJuIGJ9LGMuYnVmMnN0cmluZz1mdW5jdGlvbihhLGIpe3ZhciBjLGUsZixnLGg9Ynx8YS5sZW5ndGgsaj1uZXcgQXJyYXkoMipoKTtmb3IoZT0wLGM9MDtoPmM7KWlmKGY9YVtjKytdLDEyOD5mKWpbZSsrXT1mO2Vsc2UgaWYoZz1pW2ZdLGc+NClqW2UrK109NjU1MzMsYys9Zy0xO2Vsc2V7Zm9yKGYmPTI9PT1nPzMxOjM9PT1nPzE1Ojc7Zz4xJiZoPmM7KWY9Zjw8Nnw2MyZhW2MrK10sZy0tO2c+MT9qW2UrK109NjU1MzM6NjU1MzY+Zj9qW2UrK109ZjooZi09NjU1MzYsaltlKytdPTU1Mjk2fGY+PjEwJjEwMjMsaltlKytdPTU2MzIwfDEwMjMmZil9cmV0dXJuIGQoaixlKX0sYy51dGY4Ym9yZGVyPWZ1bmN0aW9uKGEsYil7dmFyIGM7Zm9yKGI9Ynx8YS5sZW5ndGgsYj5hLmxlbmd0aCYmKGI9YS5sZW5ndGgpLGM9Yi0xO2M+PTAmJjEyOD09PSgxOTImYVtjXSk7KWMtLTtyZXR1cm4gMD5jP2I6MD09PWM/YjpjK2lbYVtjXV0+Yj9jOmJ9fSx7Ii4vY29tbW9uIjoyN31dLDI5OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBjKGEsYixjLGQpe2Zvcih2YXIgZT02NTUzNSZhfDAsZj1hPj4+MTYmNjU1MzV8MCxnPTA7MCE9PWM7KXtnPWM+MmUzPzJlMzpjLGMtPWc7ZG8gZT1lK2JbZCsrXXwwLGY9ZitlfDA7d2hpbGUoLS1nKTtlJT02NTUyMSxmJT02NTUyMX1yZXR1cm4gZXxmPDwxNnwwfWIuZXhwb3J0cz1jfSx7fV0sMzA6W2Z1bmN0aW9uKGEsYil7Yi5leHBvcnRzPXtaX05PX0ZMVVNIOjAsWl9QQVJUSUFMX0ZMVVNIOjEsWl9TWU5DX0ZMVVNIOjIsWl9GVUxMX0ZMVVNIOjMsWl9GSU5JU0g6NCxaX0JMT0NLOjUsWl9UUkVFUzo2LFpfT0s6MCxaX1NUUkVBTV9FTkQ6MSxaX05FRURfRElDVDoyLFpfRVJSTk86LTEsWl9TVFJFQU1fRVJST1I6LTIsWl9EQVRBX0VSUk9SOi0zLFpfQlVGX0VSUk9SOi01LFpfTk9fQ09NUFJFU1NJT046MCxaX0JFU1RfU1BFRUQ6MSxaX0JFU1RfQ09NUFJFU1NJT046OSxaX0RFRkFVTFRfQ09NUFJFU1NJT046LTEsWl9GSUxURVJFRDoxLFpfSFVGRk1BTl9PTkxZOjIsWl9STEU6MyxaX0ZJWEVEOjQsWl9ERUZBVUxUX1NUUkFURUdZOjAsWl9CSU5BUlk6MCxaX1RFWFQ6MSxaX1VOS05PV046MixaX0RFRkxBVEVEOjh9fSx7fV0sMzE6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXtmb3IodmFyIGEsYj1bXSxjPTA7MjU2PmM7YysrKXthPWM7Zm9yKHZhciBkPTA7OD5kO2QrKylhPTEmYT8zOTg4MjkyMzg0XmE+Pj4xOmE+Pj4xO2JbY109YX1yZXR1cm4gYn1mdW5jdGlvbiBkKGEsYixjLGQpe3ZhciBmPWUsZz1kK2M7YT0tMV5hO2Zvcih2YXIgaD1kO2c+aDtoKyspYT1hPj4+OF5mWzI1NSYoYV5iW2hdKV07cmV0dXJuLTFeYX12YXIgZT1jKCk7Yi5leHBvcnRzPWR9LHt9XSwzMjpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEsYil7cmV0dXJuIGEubXNnPUdbYl0sYn1mdW5jdGlvbiBlKGEpe3JldHVybihhPDwxKS0oYT40Pzk6MCl9ZnVuY3Rpb24gZihhKXtmb3IodmFyIGI9YS5sZW5ndGg7LS1iPj0wOylhW2JdPTB9ZnVuY3Rpb24gZyhhKXt2YXIgYj1hLnN0YXRlLGM9Yi5wZW5kaW5nO2M+YS5hdmFpbF9vdXQmJihjPWEuYXZhaWxfb3V0KSwwIT09YyYmKEMuYXJyYXlTZXQoYS5vdXRwdXQsYi5wZW5kaW5nX2J1ZixiLnBlbmRpbmdfb3V0LGMsYS5uZXh0X291dCksYS5uZXh0X291dCs9YyxiLnBlbmRpbmdfb3V0Kz1jLGEudG90YWxfb3V0Kz1jLGEuYXZhaWxfb3V0LT1jLGIucGVuZGluZy09YywwPT09Yi5wZW5kaW5nJiYoYi5wZW5kaW5nX291dD0wKSl9ZnVuY3Rpb24gaChhLGIpe0QuX3RyX2ZsdXNoX2Jsb2NrKGEsYS5ibG9ja19zdGFydD49MD9hLmJsb2NrX3N0YXJ0Oi0xLGEuc3Ryc3RhcnQtYS5ibG9ja19zdGFydCxiKSxhLmJsb2NrX3N0YXJ0PWEuc3Ryc3RhcnQsZyhhLnN0cm0pfWZ1bmN0aW9uIGkoYSxiKXthLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT1ifWZ1bmN0aW9uIGooYSxiKXthLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT1iPj4+OCYyNTUsYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109MjU1JmJ9ZnVuY3Rpb24gayhhLGIsYyxkKXt2YXIgZT1hLmF2YWlsX2luO3JldHVybiBlPmQmJihlPWQpLDA9PT1lPzA6KGEuYXZhaWxfaW4tPWUsQy5hcnJheVNldChiLGEuaW5wdXQsYS5uZXh0X2luLGUsYyksMT09PWEuc3RhdGUud3JhcD9hLmFkbGVyPUUoYS5hZGxlcixiLGUsYyk6Mj09PWEuc3RhdGUud3JhcCYmKGEuYWRsZXI9RihhLmFkbGVyLGIsZSxjKSksYS5uZXh0X2luKz1lLGEudG90YWxfaW4rPWUsZSl9ZnVuY3Rpb24gbChhLGIpe3ZhciBjLGQsZT1hLm1heF9jaGFpbl9sZW5ndGgsZj1hLnN0cnN0YXJ0LGc9YS5wcmV2X2xlbmd0aCxoPWEubmljZV9tYXRjaCxpPWEuc3Ryc3RhcnQ+YS53X3NpemUtamI/YS5zdHJzdGFydC0oYS53X3NpemUtamIpOjAsaj1hLndpbmRvdyxrPWEud19tYXNrLGw9YS5wcmV2LG09YS5zdHJzdGFydCtpYixuPWpbZitnLTFdLG89altmK2ddO2EucHJldl9sZW5ndGg+PWEuZ29vZF9tYXRjaCYmKGU+Pj0yKSxoPmEubG9va2FoZWFkJiYoaD1hLmxvb2thaGVhZCk7ZG8gaWYoYz1iLGpbYytnXT09PW8mJmpbYytnLTFdPT09biYmaltjXT09PWpbZl0mJmpbKytjXT09PWpbZisxXSl7Zis9MixjKys7ZG87d2hpbGUoalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJmpbKytmXT09PWpbKytjXSYmalsrK2ZdPT09alsrK2NdJiZqWysrZl09PT1qWysrY10mJm0+Zik7aWYoZD1pYi0obS1mKSxmPW0taWIsZD5nKXtpZihhLm1hdGNoX3N0YXJ0PWIsZz1kLGQ+PWgpYnJlYWs7bj1qW2YrZy0xXSxvPWpbZitnXX19d2hpbGUoKGI9bFtiJmtdKT5pJiYwIT09LS1lKTtyZXR1cm4gZzw9YS5sb29rYWhlYWQ/ZzphLmxvb2thaGVhZH1mdW5jdGlvbiBtKGEpe3ZhciBiLGMsZCxlLGYsZz1hLndfc2l6ZTtkb3tpZihlPWEud2luZG93X3NpemUtYS5sb29rYWhlYWQtYS5zdHJzdGFydCxhLnN0cnN0YXJ0Pj1nKyhnLWpiKSl7Qy5hcnJheVNldChhLndpbmRvdyxhLndpbmRvdyxnLGcsMCksYS5tYXRjaF9zdGFydC09ZyxhLnN0cnN0YXJ0LT1nLGEuYmxvY2tfc3RhcnQtPWcsYz1hLmhhc2hfc2l6ZSxiPWM7ZG8gZD1hLmhlYWRbLS1iXSxhLmhlYWRbYl09ZD49Zz9kLWc6MDt3aGlsZSgtLWMpO2M9ZyxiPWM7ZG8gZD1hLnByZXZbLS1iXSxhLnByZXZbYl09ZD49Zz9kLWc6MDt3aGlsZSgtLWMpO2UrPWd9aWYoMD09PWEuc3RybS5hdmFpbF9pbilicmVhaztpZihjPWsoYS5zdHJtLGEud2luZG93LGEuc3Ryc3RhcnQrYS5sb29rYWhlYWQsZSksYS5sb29rYWhlYWQrPWMsYS5sb29rYWhlYWQrYS5pbnNlcnQ+PWhiKWZvcihmPWEuc3Ryc3RhcnQtYS5pbnNlcnQsYS5pbnNfaD1hLndpbmRvd1tmXSxhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbZisxXSkmYS5oYXNoX21hc2s7YS5pbnNlcnQmJihhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbZitoYi0xXSkmYS5oYXNoX21hc2ssYS5wcmV2W2YmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09ZixmKyssYS5pbnNlcnQtLSwhKGEubG9va2FoZWFkK2EuaW5zZXJ0PGhiKSk7KTt9d2hpbGUoYS5sb29rYWhlYWQ8amImJjAhPT1hLnN0cm0uYXZhaWxfaW4pfWZ1bmN0aW9uIG4oYSxiKXt2YXIgYz02NTUzNTtmb3IoYz5hLnBlbmRpbmdfYnVmX3NpemUtNSYmKGM9YS5wZW5kaW5nX2J1Zl9zaXplLTUpOzspe2lmKGEubG9va2FoZWFkPD0xKXtpZihtKGEpLDA9PT1hLmxvb2thaGVhZCYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31hLnN0cnN0YXJ0Kz1hLmxvb2thaGVhZCxhLmxvb2thaGVhZD0wO3ZhciBkPWEuYmxvY2tfc3RhcnQrYztpZigoMD09PWEuc3Ryc3RhcnR8fGEuc3Ryc3RhcnQ+PWQpJiYoYS5sb29rYWhlYWQ9YS5zdHJzdGFydC1kLGEuc3Ryc3RhcnQ9ZCxoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2I7aWYoYS5zdHJzdGFydC1hLmJsb2NrX3N0YXJ0Pj1hLndfc2l6ZS1qYiYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1yZXR1cm4gYS5pbnNlcnQ9MCxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5zdHJzdGFydD5hLmJsb2NrX3N0YXJ0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6c2J9ZnVuY3Rpb24gbyhhLGIpe2Zvcih2YXIgYyxkOzspe2lmKGEubG9va2FoZWFkPGpiKXtpZihtKGEpLGEubG9va2FoZWFkPGpiJiZiPT09SClyZXR1cm4gc2I7aWYoMD09PWEubG9va2FoZWFkKWJyZWFrfWlmKGM9MCxhLmxvb2thaGVhZD49aGImJihhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbYS5zdHJzdGFydCtoYi0xXSkmYS5oYXNoX21hc2ssYz1hLnByZXZbYS5zdHJzdGFydCZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1hLnN0cnN0YXJ0KSwwIT09YyYmYS5zdHJzdGFydC1jPD1hLndfc2l6ZS1qYiYmKGEubWF0Y2hfbGVuZ3RoPWwoYSxjKSksYS5tYXRjaF9sZW5ndGg+PWhiKWlmKGQ9RC5fdHJfdGFsbHkoYSxhLnN0cnN0YXJ0LWEubWF0Y2hfc3RhcnQsYS5tYXRjaF9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aDw9YS5tYXhfbGF6eV9tYXRjaCYmYS5sb29rYWhlYWQ+PWhiKXthLm1hdGNoX2xlbmd0aC0tO2RvIGEuc3Ryc3RhcnQrKyxhLmluc19oPShhLmluc19oPDxhLmhhc2hfc2hpZnReYS53aW5kb3dbYS5zdHJzdGFydCtoYi0xXSkmYS5oYXNoX21hc2ssYz1hLnByZXZbYS5zdHJzdGFydCZhLndfbWFza109YS5oZWFkW2EuaW5zX2hdLGEuaGVhZFthLmluc19oXT1hLnN0cnN0YXJ0O3doaWxlKDAhPT0tLWEubWF0Y2hfbGVuZ3RoKTthLnN0cnN0YXJ0Kyt9ZWxzZSBhLnN0cnN0YXJ0Kz1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aD0wLGEuaW5zX2g9YS53aW5kb3dbYS5zdHJzdGFydF0sYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQrMV0pJmEuaGFzaF9tYXNrO2Vsc2UgZD1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydF0pLGEubG9va2FoZWFkLS0sYS5zdHJzdGFydCsrO2lmKGQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KSlyZXR1cm4gc2J9cmV0dXJuIGEuaW5zZXJ0PWEuc3Ryc3RhcnQ8aGItMT9hLnN0cnN0YXJ0OmhiLTEsYj09PUs/KGgoYSwhMCksMD09PWEuc3RybS5hdmFpbF9vdXQ/dWI6dmIpOmEubGFzdF9saXQmJihoKGEsITEpLDA9PT1hLnN0cm0uYXZhaWxfb3V0KT9zYjp0Yn1mdW5jdGlvbiBwKGEsYil7Zm9yKHZhciBjLGQsZTs7KXtpZihhLmxvb2thaGVhZDxqYil7aWYobShhKSxhLmxvb2thaGVhZDxqYiYmYj09PUgpcmV0dXJuIHNiO2lmKDA9PT1hLmxvb2thaGVhZClicmVha31pZihjPTAsYS5sb29rYWhlYWQ+PWhiJiYoYS5pbnNfaD0oYS5pbnNfaDw8YS5oYXNoX3NoaWZ0XmEud2luZG93W2Euc3Ryc3RhcnQraGItMV0pJmEuaGFzaF9tYXNrLGM9YS5wcmV2W2Euc3Ryc3RhcnQmYS53X21hc2tdPWEuaGVhZFthLmluc19oXSxhLmhlYWRbYS5pbnNfaF09YS5zdHJzdGFydCksYS5wcmV2X2xlbmd0aD1hLm1hdGNoX2xlbmd0aCxhLnByZXZfbWF0Y2g9YS5tYXRjaF9zdGFydCxhLm1hdGNoX2xlbmd0aD1oYi0xLDAhPT1jJiZhLnByZXZfbGVuZ3RoPGEubWF4X2xhenlfbWF0Y2gmJmEuc3Ryc3RhcnQtYzw9YS53X3NpemUtamImJihhLm1hdGNoX2xlbmd0aD1sKGEsYyksYS5tYXRjaF9sZW5ndGg8PTUmJihhLnN0cmF0ZWd5PT09U3x8YS5tYXRjaF9sZW5ndGg9PT1oYiYmYS5zdHJzdGFydC1hLm1hdGNoX3N0YXJ0PjQwOTYpJiYoYS5tYXRjaF9sZW5ndGg9aGItMSkpLGEucHJldl9sZW5ndGg+PWhiJiZhLm1hdGNoX2xlbmd0aDw9YS5wcmV2X2xlbmd0aCl7ZT1hLnN0cnN0YXJ0K2EubG9va2FoZWFkLWhiLGQ9RC5fdHJfdGFsbHkoYSxhLnN0cnN0YXJ0LTEtYS5wcmV2X21hdGNoLGEucHJldl9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLnByZXZfbGVuZ3RoLTEsYS5wcmV2X2xlbmd0aC09MjtkbysrYS5zdHJzdGFydDw9ZSYmKGEuaW5zX2g9KGEuaW5zX2g8PGEuaGFzaF9zaGlmdF5hLndpbmRvd1thLnN0cnN0YXJ0K2hiLTFdKSZhLmhhc2hfbWFzayxjPWEucHJldlthLnN0cnN0YXJ0JmEud19tYXNrXT1hLmhlYWRbYS5pbnNfaF0sYS5oZWFkW2EuaW5zX2hdPWEuc3Ryc3RhcnQpO3doaWxlKDAhPT0tLWEucHJldl9sZW5ndGgpO2lmKGEubWF0Y2hfYXZhaWxhYmxlPTAsYS5tYXRjaF9sZW5ndGg9aGItMSxhLnN0cnN0YXJ0KyssZCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpKXJldHVybiBzYn1lbHNlIGlmKGEubWF0Y2hfYXZhaWxhYmxlKXtpZihkPUQuX3RyX3RhbGx5KGEsMCxhLndpbmRvd1thLnN0cnN0YXJ0LTFdKSxkJiZoKGEsITEpLGEuc3Ryc3RhcnQrKyxhLmxvb2thaGVhZC0tLDA9PT1hLnN0cm0uYXZhaWxfb3V0KXJldHVybiBzYn1lbHNlIGEubWF0Y2hfYXZhaWxhYmxlPTEsYS5zdHJzdGFydCsrLGEubG9va2FoZWFkLS19cmV0dXJuIGEubWF0Y2hfYXZhaWxhYmxlJiYoZD1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydC0xXSksYS5tYXRjaF9hdmFpbGFibGU9MCksYS5pbnNlcnQ9YS5zdHJzdGFydDxoYi0xP2Euc3Ryc3RhcnQ6aGItMSxiPT09Sz8oaChhLCEwKSwwPT09YS5zdHJtLmF2YWlsX291dD91Yjp2Yik6YS5sYXN0X2xpdCYmKGgoYSwhMSksMD09PWEuc3RybS5hdmFpbF9vdXQpP3NiOnRifWZ1bmN0aW9uIHEoYSxiKXtmb3IodmFyIGMsZCxlLGYsZz1hLndpbmRvdzs7KXtpZihhLmxvb2thaGVhZDw9aWIpe2lmKG0oYSksYS5sb29rYWhlYWQ8PWliJiZiPT09SClyZXR1cm4gc2I7aWYoMD09PWEubG9va2FoZWFkKWJyZWFrfWlmKGEubWF0Y2hfbGVuZ3RoPTAsYS5sb29rYWhlYWQ+PWhiJiZhLnN0cnN0YXJ0PjAmJihlPWEuc3Ryc3RhcnQtMSxkPWdbZV0sZD09PWdbKytlXSYmZD09PWdbKytlXSYmZD09PWdbKytlXSkpe2Y9YS5zdHJzdGFydCtpYjtkbzt3aGlsZShkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZkPT09Z1srK2VdJiZmPmUpO2EubWF0Y2hfbGVuZ3RoPWliLShmLWUpLGEubWF0Y2hfbGVuZ3RoPmEubG9va2FoZWFkJiYoYS5tYXRjaF9sZW5ndGg9YS5sb29rYWhlYWQpfWlmKGEubWF0Y2hfbGVuZ3RoPj1oYj8oYz1ELl90cl90YWxseShhLDEsYS5tYXRjaF9sZW5ndGgtaGIpLGEubG9va2FoZWFkLT1hLm1hdGNoX2xlbmd0aCxhLnN0cnN0YXJ0Kz1hLm1hdGNoX2xlbmd0aCxhLm1hdGNoX2xlbmd0aD0wKTooYz1ELl90cl90YWxseShhLDAsYS53aW5kb3dbYS5zdHJzdGFydF0pLGEubG9va2FoZWFkLS0sYS5zdHJzdGFydCsrKSxjJiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNifXJldHVybiBhLmluc2VydD0wLGI9PT1LPyhoKGEsITApLDA9PT1hLnN0cm0uYXZhaWxfb3V0P3ViOnZiKTphLmxhc3RfbGl0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6dGJ9ZnVuY3Rpb24gcihhLGIpe2Zvcih2YXIgYzs7KXtpZigwPT09YS5sb29rYWhlYWQmJihtKGEpLDA9PT1hLmxvb2thaGVhZCkpe2lmKGI9PT1IKXJldHVybiBzYjticmVha31pZihhLm1hdGNoX2xlbmd0aD0wLGM9RC5fdHJfdGFsbHkoYSwwLGEud2luZG93W2Euc3Ryc3RhcnRdKSxhLmxvb2thaGVhZC0tLGEuc3Ryc3RhcnQrKyxjJiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCkpcmV0dXJuIHNifXJldHVybiBhLmluc2VydD0wLGI9PT1LPyhoKGEsITApLDA9PT1hLnN0cm0uYXZhaWxfb3V0P3ViOnZiKTphLmxhc3RfbGl0JiYoaChhLCExKSwwPT09YS5zdHJtLmF2YWlsX291dCk/c2I6dGJ9ZnVuY3Rpb24gcyhhKXthLndpbmRvd19zaXplPTIqYS53X3NpemUsZihhLmhlYWQpLGEubWF4X2xhenlfbWF0Y2g9QlthLmxldmVsXS5tYXhfbGF6eSxhLmdvb2RfbWF0Y2g9QlthLmxldmVsXS5nb29kX2xlbmd0aCxhLm5pY2VfbWF0Y2g9QlthLmxldmVsXS5uaWNlX2xlbmd0aCxhLm1heF9jaGFpbl9sZW5ndGg9QlthLmxldmVsXS5tYXhfY2hhaW4sYS5zdHJzdGFydD0wLGEuYmxvY2tfc3RhcnQ9MCxhLmxvb2thaGVhZD0wLGEuaW5zZXJ0PTAsYS5tYXRjaF9sZW5ndGg9YS5wcmV2X2xlbmd0aD1oYi0xLGEubWF0Y2hfYXZhaWxhYmxlPTAsYS5pbnNfaD0wfWZ1bmN0aW9uIHQoKXt0aGlzLnN0cm09bnVsbCx0aGlzLnN0YXR1cz0wLHRoaXMucGVuZGluZ19idWY9bnVsbCx0aGlzLnBlbmRpbmdfYnVmX3NpemU9MCx0aGlzLnBlbmRpbmdfb3V0PTAsdGhpcy5wZW5kaW5nPTAsdGhpcy53cmFwPTAsdGhpcy5nemhlYWQ9bnVsbCx0aGlzLmd6aW5kZXg9MCx0aGlzLm1ldGhvZD1ZLHRoaXMubGFzdF9mbHVzaD0tMSx0aGlzLndfc2l6ZT0wLHRoaXMud19iaXRzPTAsdGhpcy53X21hc2s9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMud2luZG93X3NpemU9MCx0aGlzLnByZXY9bnVsbCx0aGlzLmhlYWQ9bnVsbCx0aGlzLmluc19oPTAsdGhpcy5oYXNoX3NpemU9MCx0aGlzLmhhc2hfYml0cz0wLHRoaXMuaGFzaF9tYXNrPTAsdGhpcy5oYXNoX3NoaWZ0PTAsdGhpcy5ibG9ja19zdGFydD0wLHRoaXMubWF0Y2hfbGVuZ3RoPTAsdGhpcy5wcmV2X21hdGNoPTAsdGhpcy5tYXRjaF9hdmFpbGFibGU9MCx0aGlzLnN0cnN0YXJ0PTAsdGhpcy5tYXRjaF9zdGFydD0wLHRoaXMubG9va2FoZWFkPTAsdGhpcy5wcmV2X2xlbmd0aD0wLHRoaXMubWF4X2NoYWluX2xlbmd0aD0wLHRoaXMubWF4X2xhenlfbWF0Y2g9MCx0aGlzLmxldmVsPTAsdGhpcy5zdHJhdGVneT0wLHRoaXMuZ29vZF9tYXRjaD0wLHRoaXMubmljZV9tYXRjaD0wLHRoaXMuZHluX2x0cmVlPW5ldyBDLkJ1ZjE2KDIqZmIpLHRoaXMuZHluX2R0cmVlPW5ldyBDLkJ1ZjE2KDIqKDIqZGIrMSkpLHRoaXMuYmxfdHJlZT1uZXcgQy5CdWYxNigyKigyKmViKzEpKSxmKHRoaXMuZHluX2x0cmVlKSxmKHRoaXMuZHluX2R0cmVlKSxmKHRoaXMuYmxfdHJlZSksdGhpcy5sX2Rlc2M9bnVsbCx0aGlzLmRfZGVzYz1udWxsLHRoaXMuYmxfZGVzYz1udWxsLHRoaXMuYmxfY291bnQ9bmV3IEMuQnVmMTYoZ2IrMSksdGhpcy5oZWFwPW5ldyBDLkJ1ZjE2KDIqY2IrMSksZih0aGlzLmhlYXApLHRoaXMuaGVhcF9sZW49MCx0aGlzLmhlYXBfbWF4PTAsdGhpcy5kZXB0aD1uZXcgQy5CdWYxNigyKmNiKzEpLGYodGhpcy5kZXB0aCksdGhpcy5sX2J1Zj0wLHRoaXMubGl0X2J1ZnNpemU9MCx0aGlzLmxhc3RfbGl0PTAsdGhpcy5kX2J1Zj0wLHRoaXMub3B0X2xlbj0wLHRoaXMuc3RhdGljX2xlbj0wLHRoaXMubWF0Y2hlcz0wLHRoaXMuaW5zZXJ0PTAsdGhpcy5iaV9idWY9MCx0aGlzLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gdShhKXt2YXIgYjtyZXR1cm4gYSYmYS5zdGF0ZT8oYS50b3RhbF9pbj1hLnRvdGFsX291dD0wLGEuZGF0YV90eXBlPVgsYj1hLnN0YXRlLGIucGVuZGluZz0wLGIucGVuZGluZ19vdXQ9MCxiLndyYXA8MCYmKGIud3JhcD0tYi53cmFwKSxiLnN0YXR1cz1iLndyYXA/bGI6cWIsYS5hZGxlcj0yPT09Yi53cmFwPzA6MSxiLmxhc3RfZmx1c2g9SCxELl90cl9pbml0KGIpLE0pOmQoYSxPKX1mdW5jdGlvbiB2KGEpe3ZhciBiPXUoYSk7cmV0dXJuIGI9PT1NJiZzKGEuc3RhdGUpLGJ9ZnVuY3Rpb24gdyhhLGIpe3JldHVybiBhJiZhLnN0YXRlPzIhPT1hLnN0YXRlLndyYXA/TzooYS5zdGF0ZS5nemhlYWQ9YixNKTpPfWZ1bmN0aW9uIHgoYSxiLGMsZSxmLGcpe2lmKCFhKXJldHVybiBPO3ZhciBoPTE7aWYoYj09PVImJihiPTYpLDA+ZT8oaD0wLGU9LWUpOmU+MTUmJihoPTIsZS09MTYpLDE+Znx8Zj5afHxjIT09WXx8OD5lfHxlPjE1fHwwPmJ8fGI+OXx8MD5nfHxnPlYpcmV0dXJuIGQoYSxPKTs4PT09ZSYmKGU9OSk7dmFyIGk9bmV3IHQ7cmV0dXJuIGEuc3RhdGU9aSxpLnN0cm09YSxpLndyYXA9aCxpLmd6aGVhZD1udWxsLGkud19iaXRzPWUsaS53X3NpemU9MTw8aS53X2JpdHMsaS53X21hc2s9aS53X3NpemUtMSxpLmhhc2hfYml0cz1mKzcsaS5oYXNoX3NpemU9MTw8aS5oYXNoX2JpdHMsaS5oYXNoX21hc2s9aS5oYXNoX3NpemUtMSxpLmhhc2hfc2hpZnQ9fn4oKGkuaGFzaF9iaXRzK2hiLTEpL2hiKSxpLndpbmRvdz1uZXcgQy5CdWY4KDIqaS53X3NpemUpLGkuaGVhZD1uZXcgQy5CdWYxNihpLmhhc2hfc2l6ZSksaS5wcmV2PW5ldyBDLkJ1ZjE2KGkud19zaXplKSxpLmxpdF9idWZzaXplPTE8PGYrNixpLnBlbmRpbmdfYnVmX3NpemU9NCppLmxpdF9idWZzaXplLGkucGVuZGluZ19idWY9bmV3IEMuQnVmOChpLnBlbmRpbmdfYnVmX3NpemUpLGkuZF9idWY9aS5saXRfYnVmc2l6ZT4+MSxpLmxfYnVmPTMqaS5saXRfYnVmc2l6ZSxpLmxldmVsPWIsaS5zdHJhdGVneT1nLGkubWV0aG9kPWMsdihhKX1mdW5jdGlvbiB5KGEsYil7cmV0dXJuIHgoYSxiLFksJCxfLFcpfWZ1bmN0aW9uIHooYSxiKXt2YXIgYyxoLGssbDtpZighYXx8IWEuc3RhdGV8fGI+THx8MD5iKXJldHVybiBhP2QoYSxPKTpPO2lmKGg9YS5zdGF0ZSwhYS5vdXRwdXR8fCFhLmlucHV0JiYwIT09YS5hdmFpbF9pbnx8aC5zdGF0dXM9PT1yYiYmYiE9PUspcmV0dXJuIGQoYSwwPT09YS5hdmFpbF9vdXQ/UTpPKTtpZihoLnN0cm09YSxjPWgubGFzdF9mbHVzaCxoLmxhc3RfZmx1c2g9YixoLnN0YXR1cz09PWxiKWlmKDI9PT1oLndyYXApYS5hZGxlcj0wLGkoaCwzMSksaShoLDEzOSksaShoLDgpLGguZ3poZWFkPyhpKGgsKGguZ3poZWFkLnRleHQ/MTowKSsoaC5nemhlYWQuaGNyYz8yOjApKyhoLmd6aGVhZC5leHRyYT80OjApKyhoLmd6aGVhZC5uYW1lPzg6MCkrKGguZ3poZWFkLmNvbW1lbnQ/MTY6MCkpLGkoaCwyNTUmaC5nemhlYWQudGltZSksaShoLGguZ3poZWFkLnRpbWU+PjgmMjU1KSxpKGgsaC5nemhlYWQudGltZT4+MTYmMjU1KSxpKGgsaC5nemhlYWQudGltZT4+MjQmMjU1KSxpKGgsOT09PWgubGV2ZWw/MjpoLnN0cmF0ZWd5Pj1UfHxoLmxldmVsPDI/NDowKSxpKGgsMjU1JmguZ3poZWFkLm9zKSxoLmd6aGVhZC5leHRyYSYmaC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaShoLDI1NSZoLmd6aGVhZC5leHRyYS5sZW5ndGgpLGkoaCxoLmd6aGVhZC5leHRyYS5sZW5ndGg+PjgmMjU1KSksaC5nemhlYWQuaGNyYyYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLDApKSxoLmd6aW5kZXg9MCxoLnN0YXR1cz1tYik6KGkoaCwwKSxpKGgsMCksaShoLDApLGkoaCwwKSxpKGgsMCksaShoLDk9PT1oLmxldmVsPzI6aC5zdHJhdGVneT49VHx8aC5sZXZlbDwyPzQ6MCksaShoLHdiKSxoLnN0YXR1cz1xYik7ZWxzZXt2YXIgbT1ZKyhoLndfYml0cy04PDw0KTw8OCxuPS0xO249aC5zdHJhdGVneT49VHx8aC5sZXZlbDwyPzA6aC5sZXZlbDw2PzE6Nj09PWgubGV2ZWw/MjozLG18PW48PDYsMCE9PWguc3Ryc3RhcnQmJihtfD1rYiksbSs9MzEtbSUzMSxoLnN0YXR1cz1xYixqKGgsbSksMCE9PWguc3Ryc3RhcnQmJihqKGgsYS5hZGxlcj4+PjE2KSxqKGgsNjU1MzUmYS5hZGxlcikpLGEuYWRsZXI9MX1pZihoLnN0YXR1cz09PW1iKWlmKGguZ3poZWFkLmV4dHJhKXtmb3Ioaz1oLnBlbmRpbmc7aC5nemluZGV4PCg2NTUzNSZoLmd6aGVhZC5leHRyYS5sZW5ndGgpJiYoaC5wZW5kaW5nIT09aC5wZW5kaW5nX2J1Zl9zaXplfHwoaC5nemhlYWQuaGNyYyYmaC5wZW5kaW5nPmsmJihhLmFkbGVyPUYoYS5hZGxlcixoLnBlbmRpbmdfYnVmLGgucGVuZGluZy1rLGspKSxnKGEpLGs9aC5wZW5kaW5nLGgucGVuZGluZyE9PWgucGVuZGluZ19idWZfc2l6ZSkpOylpKGgsMjU1JmguZ3poZWFkLmV4dHJhW2guZ3ppbmRleF0pLGguZ3ppbmRleCsrO2guZ3poZWFkLmhjcmMmJmgucGVuZGluZz5rJiYoYS5hZGxlcj1GKGEuYWRsZXIsaC5wZW5kaW5nX2J1ZixoLnBlbmRpbmctayxrKSksaC5nemluZGV4PT09aC5nemhlYWQuZXh0cmEubGVuZ3RoJiYoaC5nemluZGV4PTAsaC5zdGF0dXM9bmIpfWVsc2UgaC5zdGF0dXM9bmI7aWYoaC5zdGF0dXM9PT1uYilpZihoLmd6aGVhZC5uYW1lKXtrPWgucGVuZGluZztkb3tpZihoLnBlbmRpbmc9PT1oLnBlbmRpbmdfYnVmX3NpemUmJihoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLGcoYSksaz1oLnBlbmRpbmcsaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplKSl7bD0xO2JyZWFrfWw9aC5nemluZGV4PGguZ3poZWFkLm5hbWUubGVuZ3RoPzI1NSZoLmd6aGVhZC5uYW1lLmNoYXJDb2RlQXQoaC5nemluZGV4KyspOjAsaShoLGwpfXdoaWxlKDAhPT1sKTtoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLDA9PT1sJiYoaC5nemluZGV4PTAsaC5zdGF0dXM9b2IpfWVsc2UgaC5zdGF0dXM9b2I7aWYoaC5zdGF0dXM9PT1vYilpZihoLmd6aGVhZC5jb21tZW50KXtrPWgucGVuZGluZztkb3tpZihoLnBlbmRpbmc9PT1oLnBlbmRpbmdfYnVmX3NpemUmJihoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLGcoYSksaz1oLnBlbmRpbmcsaC5wZW5kaW5nPT09aC5wZW5kaW5nX2J1Zl9zaXplKSl7bD0xO2JyZWFrfWw9aC5nemluZGV4PGguZ3poZWFkLmNvbW1lbnQubGVuZ3RoPzI1NSZoLmd6aGVhZC5jb21tZW50LmNoYXJDb2RlQXQoaC5nemluZGV4KyspOjAsaShoLGwpfXdoaWxlKDAhPT1sKTtoLmd6aGVhZC5oY3JjJiZoLnBlbmRpbmc+ayYmKGEuYWRsZXI9RihhLmFkbGVyLGgucGVuZGluZ19idWYsaC5wZW5kaW5nLWssaykpLDA9PT1sJiYoaC5zdGF0dXM9cGIpfWVsc2UgaC5zdGF0dXM9cGI7aWYoaC5zdGF0dXM9PT1wYiYmKGguZ3poZWFkLmhjcmM/KGgucGVuZGluZysyPmgucGVuZGluZ19idWZfc2l6ZSYmZyhhKSxoLnBlbmRpbmcrMjw9aC5wZW5kaW5nX2J1Zl9zaXplJiYoaShoLDI1NSZhLmFkbGVyKSxpKGgsYS5hZGxlcj4+OCYyNTUpLGEuYWRsZXI9MCxoLnN0YXR1cz1xYikpOmguc3RhdHVzPXFiKSwwIT09aC5wZW5kaW5nKXtpZihnKGEpLDA9PT1hLmF2YWlsX291dClyZXR1cm4gaC5sYXN0X2ZsdXNoPS0xLE19ZWxzZSBpZigwPT09YS5hdmFpbF9pbiYmZShiKTw9ZShjKSYmYiE9PUspcmV0dXJuIGQoYSxRKTtpZihoLnN0YXR1cz09PXJiJiYwIT09YS5hdmFpbF9pbilyZXR1cm4gZChhLFEpO2lmKDAhPT1hLmF2YWlsX2lufHwwIT09aC5sb29rYWhlYWR8fGIhPT1IJiZoLnN0YXR1cyE9PXJiKXt2YXIgbz1oLnN0cmF0ZWd5PT09VD9yKGgsYik6aC5zdHJhdGVneT09PVU/cShoLGIpOkJbaC5sZXZlbF0uZnVuYyhoLGIpO2lmKChvPT09dWJ8fG89PT12YikmJihoLnN0YXR1cz1yYiksbz09PXNifHxvPT09dWIpcmV0dXJuIDA9PT1hLmF2YWlsX291dCYmKGgubGFzdF9mbHVzaD0tMSksTTtpZihvPT09dGImJihiPT09ST9ELl90cl9hbGlnbihoKTpiIT09TCYmKEQuX3RyX3N0b3JlZF9ibG9jayhoLDAsMCwhMSksYj09PUomJihmKGguaGVhZCksMD09PWgubG9va2FoZWFkJiYoaC5zdHJzdGFydD0wLGguYmxvY2tfc3RhcnQ9MCxoLmluc2VydD0wKSkpLGcoYSksMD09PWEuYXZhaWxfb3V0KSlyZXR1cm4gaC5sYXN0X2ZsdXNoPS0xLE19cmV0dXJuIGIhPT1LP006aC53cmFwPD0wP046KDI9PT1oLndyYXA/KGkoaCwyNTUmYS5hZGxlciksaShoLGEuYWRsZXI+PjgmMjU1KSxpKGgsYS5hZGxlcj4+MTYmMjU1KSxpKGgsYS5hZGxlcj4+MjQmMjU1KSxpKGgsMjU1JmEudG90YWxfaW4pLGkoaCxhLnRvdGFsX2luPj44JjI1NSksaShoLGEudG90YWxfaW4+PjE2JjI1NSksaShoLGEudG90YWxfaW4+PjI0JjI1NSkpOihqKGgsYS5hZGxlcj4+PjE2KSxqKGgsNjU1MzUmYS5hZGxlcikpLGcoYSksaC53cmFwPjAmJihoLndyYXA9LWgud3JhcCksMCE9PWgucGVuZGluZz9NOk4pfWZ1bmN0aW9uIEEoYSl7dmFyIGI7cmV0dXJuIGEmJmEuc3RhdGU/KGI9YS5zdGF0ZS5zdGF0dXMsYiE9PWxiJiZiIT09bWImJmIhPT1uYiYmYiE9PW9iJiZiIT09cGImJmIhPT1xYiYmYiE9PXJiP2QoYSxPKTooYS5zdGF0ZT1udWxsLGI9PT1xYj9kKGEsUCk6TSkpOk99dmFyIEIsQz1hKCIuLi91dGlscy9jb21tb24iKSxEPWEoIi4vdHJlZXMiKSxFPWEoIi4vYWRsZXIzMiIpLEY9YSgiLi9jcmMzMiIpLEc9YSgiLi9tZXNzYWdlcyIpLEg9MCxJPTEsSj0zLEs9NCxMPTUsTT0wLE49MSxPPS0yLFA9LTMsUT0tNSxSPS0xLFM9MSxUPTIsVT0zLFY9NCxXPTAsWD0yLFk9OCxaPTksJD0xNSxfPTgsYWI9MjksYmI9MjU2LGNiPWJiKzErYWIsZGI9MzAsZWI9MTksZmI9MipjYisxLGdiPTE1LGhiPTMsaWI9MjU4LGpiPWliK2hiKzEsa2I9MzIsbGI9NDIsbWI9NjksbmI9NzMsb2I9OTEscGI9MTAzLHFiPTExMyxyYj02NjYsc2I9MSx0Yj0yLHViPTMsdmI9NCx3Yj0zLHhiPWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5nb29kX2xlbmd0aD1hLHRoaXMubWF4X2xhenk9Yix0aGlzLm5pY2VfbGVuZ3RoPWMsdGhpcy5tYXhfY2hhaW49ZCx0aGlzLmZ1bmM9ZX07Qj1bbmV3IHhiKDAsMCwwLDAsbiksbmV3IHhiKDQsNCw4LDQsbyksbmV3IHhiKDQsNSwxNiw4LG8pLG5ldyB4Yig0LDYsMzIsMzIsbyksbmV3IHhiKDQsNCwxNiwxNixwKSxuZXcgeGIoOCwxNiwzMiwzMixwKSxuZXcgeGIoOCwxNiwxMjgsMTI4LHApLG5ldyB4Yig4LDMyLDEyOCwyNTYscCksbmV3IHhiKDMyLDEyOCwyNTgsMTAyNCxwKSxuZXcgeGIoMzIsMjU4LDI1OCw0MDk2LHApXSxjLmRlZmxhdGVJbml0PXksYy5kZWZsYXRlSW5pdDI9eCxjLmRlZmxhdGVSZXNldD12LGMuZGVmbGF0ZVJlc2V0S2VlcD11LGMuZGVmbGF0ZVNldEhlYWRlcj13LGMuZGVmbGF0ZT16LGMuZGVmbGF0ZUVuZD1BLGMuZGVmbGF0ZUluZm89InBha28gZGVmbGF0ZSAoZnJvbSBOb2RlY2EgcHJvamVjdCkifSx7Ii4uL3V0aWxzL2NvbW1vbiI6MjcsIi4vYWRsZXIzMiI6MjksIi4vY3JjMzIiOjMxLCIuL21lc3NhZ2VzIjozNywiLi90cmVlcyI6Mzh9XSwzMzpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYygpe3RoaXMudGV4dD0wLHRoaXMudGltZT0wLHRoaXMueGZsYWdzPTAsdGhpcy5vcz0wLHRoaXMuZXh0cmE9bnVsbCx0aGlzLmV4dHJhX2xlbj0wLHRoaXMubmFtZT0iIix0aGlzLmNvbW1lbnQ9IiIsdGhpcy5oY3JjPTAsdGhpcy5kb25lPSExfWIuZXhwb3J0cz1jfSx7fV0sMzQ6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO3ZhciBjPTMwLGQ9MTI7Yi5leHBvcnRzPWZ1bmN0aW9uKGEsYil7dmFyIGUsZixnLGgsaSxqLGssbCxtLG4sbyxwLHEscixzLHQsdSx2LHcseCx5LHosQSxCLEM7ZT1hLnN0YXRlLGY9YS5uZXh0X2luLEI9YS5pbnB1dCxnPWYrKGEuYXZhaWxfaW4tNSksaD1hLm5leHRfb3V0LEM9YS5vdXRwdXQsaT1oLShiLWEuYXZhaWxfb3V0KSxqPWgrKGEuYXZhaWxfb3V0LTI1Nyksaz1lLmRtYXgsbD1lLndzaXplLG09ZS53aGF2ZSxuPWUud25leHQsbz1lLndpbmRvdyxwPWUuaG9sZCxxPWUuYml0cyxyPWUubGVuY29kZSxzPWUuZGlzdGNvZGUsdD0oMTw8ZS5sZW5iaXRzKS0xLHU9KDE8PGUuZGlzdGJpdHMpLTE7YTpkb3sxNT5xJiYocCs9QltmKytdPDxxLHErPTgscCs9QltmKytdPDxxLHErPTgpLHY9cltwJnRdO2I6Zm9yKDs7KXtpZih3PXY+Pj4yNCxwPj4+PXcscS09dyx3PXY+Pj4xNiYyNTUsMD09PXcpQ1toKytdPTY1NTM1JnY7ZWxzZXtpZighKDE2JncpKXtpZigwPT09KDY0JncpKXt2PXJbKDY1NTM1JnYpKyhwJigxPDx3KS0xKV07Y29udGludWUgYn1pZigzMiZ3KXtlLm1vZGU9ZDticmVhayBhfWEubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGUubW9kZT1jO2JyZWFrIGF9eD02NTUzNSZ2LHcmPTE1LHcmJih3PnEmJihwKz1CW2YrK108PHEscSs9OCkseCs9cCYoMTw8dyktMSxwPj4+PXcscS09dyksMTU+cSYmKHArPUJbZisrXTw8cSxxKz04LHArPUJbZisrXTw8cSxxKz04KSx2PXNbcCZ1XTtjOmZvcig7Oyl7aWYodz12Pj4+MjQscD4+Pj13LHEtPXcsdz12Pj4+MTYmMjU1LCEoMTYmdykpe2lmKDA9PT0oNjQmdykpe3Y9c1soNjU1MzUmdikrKHAmKDE8PHcpLTEpXTtjb250aW51ZSBjfWEubXNnPSJpbnZhbGlkIGRpc3RhbmNlIGNvZGUiLGUubW9kZT1jO2JyZWFrIGF9aWYoeT02NTUzNSZ2LHcmPTE1LHc+cSYmKHArPUJbZisrXTw8cSxxKz04LHc+cSYmKHArPUJbZisrXTw8cSxxKz04KSkseSs9cCYoMTw8dyktMSx5Pmspe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsZS5tb2RlPWM7YnJlYWsgYX1pZihwPj4+PXcscS09dyx3PWgtaSx5Pncpe2lmKHc9eS13LHc+bSYmZS5zYW5lKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSB0b28gZmFyIGJhY2siLGUubW9kZT1jO2JyZWFrIGF9aWYoej0wLEE9bywwPT09bil7aWYoeis9bC13LHg+dyl7eC09dztkbyBDW2grK109b1t6KytdO3doaWxlKC0tdyk7ej1oLXksQT1DfX1lbHNlIGlmKHc+bil7aWYoeis9bCtuLXcsdy09bix4Pncpe3gtPXc7ZG8gQ1toKytdPW9beisrXTt3aGlsZSgtLXcpO2lmKHo9MCx4Pm4pe3c9bix4LT13O2RvIENbaCsrXT1vW3orK107d2hpbGUoLS13KTt6PWgteSxBPUN9fX1lbHNlIGlmKHorPW4tdyx4Pncpe3gtPXc7ZG8gQ1toKytdPW9beisrXTt3aGlsZSgtLXcpO3o9aC15LEE9Q31mb3IoO3g+MjspQ1toKytdPUFbeisrXSxDW2grK109QVt6KytdLENbaCsrXT1BW3orK10seC09Mzt4JiYoQ1toKytdPUFbeisrXSx4PjEmJihDW2grK109QVt6KytdKSl9ZWxzZXt6PWgteTtkbyBDW2grK109Q1t6KytdLENbaCsrXT1DW3orK10sQ1toKytdPUNbeisrXSx4LT0zO3doaWxlKHg+Mik7eCYmKENbaCsrXT1DW3orK10seD4xJiYoQ1toKytdPUNbeisrXSkpfWJyZWFrfX1icmVha319d2hpbGUoZz5mJiZqPmgpO3g9cT4+MyxmLT14LHEtPXg8PDMscCY9KDE8PHEpLTEsYS5uZXh0X2luPWYsYS5uZXh0X291dD1oLGEuYXZhaWxfaW49Zz5mPzUrKGctZik6NS0oZi1nKSxhLmF2YWlsX291dD1qPmg/MjU3KyhqLWgpOjI1Ny0oaC1qKSxlLmhvbGQ9cCxlLmJpdHM9cX19LHt9XSwzNTpbZnVuY3Rpb24oYSxiLGMpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBkKGEpe3JldHVybihhPj4+MjQmMjU1KSsoYT4+PjgmNjUyODApKygoNjUyODAmYSk8PDgpKygoMjU1JmEpPDwyNCl9ZnVuY3Rpb24gZSgpe3RoaXMubW9kZT0wLHRoaXMubGFzdD0hMSx0aGlzLndyYXA9MCx0aGlzLmhhdmVkaWN0PSExLHRoaXMuZmxhZ3M9MCx0aGlzLmRtYXg9MCx0aGlzLmNoZWNrPTAsdGhpcy50b3RhbD0wLHRoaXMuaGVhZD1udWxsLHRoaXMud2JpdHM9MCx0aGlzLndzaXplPTAsdGhpcy53aGF2ZT0wLHRoaXMud25leHQ9MCx0aGlzLndpbmRvdz1udWxsLHRoaXMuaG9sZD0wLHRoaXMuYml0cz0wLHRoaXMubGVuZ3RoPTAsdGhpcy5vZmZzZXQ9MCx0aGlzLmV4dHJhPTAsdGhpcy5sZW5jb2RlPW51bGwsdGhpcy5kaXN0Y29kZT1udWxsLHRoaXMubGVuYml0cz0wLHRoaXMuZGlzdGJpdHM9MCx0aGlzLm5jb2RlPTAsdGhpcy5ubGVuPTAsdGhpcy5uZGlzdD0wLHRoaXMuaGF2ZT0wLHRoaXMubmV4dD1udWxsLHRoaXMubGVucz1uZXcgci5CdWYxNigzMjApLHRoaXMud29yaz1uZXcgci5CdWYxNigyODgpLHRoaXMubGVuZHluPW51bGwsdGhpcy5kaXN0ZHluPW51bGwsdGhpcy5zYW5lPTAsdGhpcy5iYWNrPTAsdGhpcy53YXM9MH1mdW5jdGlvbiBmKGEpe3ZhciBiO3JldHVybiBhJiZhLnN0YXRlPyhiPWEuc3RhdGUsYS50b3RhbF9pbj1hLnRvdGFsX291dD1iLnRvdGFsPTAsYS5tc2c9IiIsYi53cmFwJiYoYS5hZGxlcj0xJmIud3JhcCksYi5tb2RlPUssYi5sYXN0PTAsYi5oYXZlZGljdD0wLGIuZG1heD0zMjc2OCxiLmhlYWQ9bnVsbCxiLmhvbGQ9MCxiLmJpdHM9MCxiLmxlbmNvZGU9Yi5sZW5keW49bmV3IHIuQnVmMzIob2IpLGIuZGlzdGNvZGU9Yi5kaXN0ZHluPW5ldyByLkJ1ZjMyKHBiKSxiLnNhbmU9MSxiLmJhY2s9LTEsQyk6Rn1mdW5jdGlvbiBnKGEpe3ZhciBiO3JldHVybiBhJiZhLnN0YXRlPyhiPWEuc3RhdGUsYi53c2l6ZT0wLGIud2hhdmU9MCxiLnduZXh0PTAsZihhKSk6Rn1mdW5jdGlvbiBoKGEsYil7dmFyIGMsZDtyZXR1cm4gYSYmYS5zdGF0ZT8oZD1hLnN0YXRlLDA+Yj8oYz0wLGI9LWIpOihjPShiPj40KSsxLDQ4PmImJihiJj0xNSkpLGImJig4PmJ8fGI+MTUpP0Y6KG51bGwhPT1kLndpbmRvdyYmZC53Yml0cyE9PWImJihkLndpbmRvdz1udWxsKSxkLndyYXA9YyxkLndiaXRzPWIsZyhhKSkpOkZ9ZnVuY3Rpb24gaShhLGIpe3ZhciBjLGQ7cmV0dXJuIGE/KGQ9bmV3IGUsYS5zdGF0ZT1kLGQud2luZG93PW51bGwsYz1oKGEsYiksYyE9PUMmJihhLnN0YXRlPW51bGwpLGMpOkZ9ZnVuY3Rpb24gaihhKXtyZXR1cm4gaShhLHJiKX1mdW5jdGlvbiBrKGEpe2lmKHNiKXt2YXIgYjtmb3IocD1uZXcgci5CdWYzMig1MTIpLHE9bmV3IHIuQnVmMzIoMzIpLGI9MDsxNDQ+YjspYS5sZW5zW2IrK109ODtmb3IoOzI1Nj5iOylhLmxlbnNbYisrXT05O2Zvcig7MjgwPmI7KWEubGVuc1tiKytdPTc7Zm9yKDsyODg+YjspYS5sZW5zW2IrK109ODtmb3Iodih4LGEubGVucywwLDI4OCxwLDAsYS53b3JrLHtiaXRzOjl9KSxiPTA7MzI+YjspYS5sZW5zW2IrK109NTt2KHksYS5sZW5zLDAsMzIscSwwLGEud29yayx7Yml0czo1fSksc2I9ITF9YS5sZW5jb2RlPXAsYS5sZW5iaXRzPTksYS5kaXN0Y29kZT1xLGEuZGlzdGJpdHM9NX1mdW5jdGlvbiBsKGEsYixjLGQpe3ZhciBlLGY9YS5zdGF0ZTtyZXR1cm4gbnVsbD09PWYud2luZG93JiYoZi53c2l6ZT0xPDxmLndiaXRzLGYud25leHQ9MCxmLndoYXZlPTAsZi53aW5kb3c9bmV3IHIuQnVmOChmLndzaXplKSksZD49Zi53c2l6ZT8oci5hcnJheVNldChmLndpbmRvdyxiLGMtZi53c2l6ZSxmLndzaXplLDApLGYud25leHQ9MCxmLndoYXZlPWYud3NpemUpOihlPWYud3NpemUtZi53bmV4dCxlPmQmJihlPWQpLHIuYXJyYXlTZXQoZi53aW5kb3csYixjLWQsZSxmLnduZXh0KSxkLT1lLGQ/KHIuYXJyYXlTZXQoZi53aW5kb3csYixjLWQsZCwwKSxmLnduZXh0PWQsZi53aGF2ZT1mLndzaXplKTooZi53bmV4dCs9ZSxmLnduZXh0PT09Zi53c2l6ZSYmKGYud25leHQ9MCksZi53aGF2ZTxmLndzaXplJiYoZi53aGF2ZSs9ZSkpKSwwfWZ1bmN0aW9uIG0oYSxiKXt2YXIgYyxlLGYsZyxoLGksaixtLG4sbyxwLHEsb2IscGIscWIscmIsc2IsdGIsdWIsdmIsd2IseGIseWIsemIsQWI9MCxCYj1uZXcgci5CdWY4KDQpLENiPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XTtpZighYXx8IWEuc3RhdGV8fCFhLm91dHB1dHx8IWEuaW5wdXQmJjAhPT1hLmF2YWlsX2luKXJldHVybiBGO2M9YS5zdGF0ZSxjLm1vZGU9PT1WJiYoYy5tb2RlPVcpLGg9YS5uZXh0X291dCxmPWEub3V0cHV0LGo9YS5hdmFpbF9vdXQsZz1hLm5leHRfaW4sZT1hLmlucHV0LGk9YS5hdmFpbF9pbixtPWMuaG9sZCxuPWMuYml0cyxvPWkscD1qLHhiPUM7YTpmb3IoOzspc3dpdGNoKGMubW9kZSl7Y2FzZSBLOmlmKDA9PT1jLndyYXApe2MubW9kZT1XO2JyZWFrfWZvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKDImYy53cmFwJiYzNTYxNT09PW0pe2MuY2hlY2s9MCxCYlswXT0yNTUmbSxCYlsxXT1tPj4+OCYyNTUsYy5jaGVjaz10KGMuY2hlY2ssQmIsMiwwKSxtPTAsbj0wLGMubW9kZT1MO2JyZWFrfWlmKGMuZmxhZ3M9MCxjLmhlYWQmJihjLmhlYWQuZG9uZT0hMSksISgxJmMud3JhcCl8fCgoKDI1NSZtKTw8OCkrKG0+PjgpKSUzMSl7YS5tc2c9ImluY29ycmVjdCBoZWFkZXIgY2hlY2siLGMubW9kZT1sYjticmVha31pZigoMTUmbSkhPT1KKXthLm1zZz0idW5rbm93biBjb21wcmVzc2lvbiBtZXRob2QiLGMubW9kZT1sYjticmVha31pZihtPj4+PTQsbi09NCx3Yj0oMTUmbSkrOCwwPT09Yy53Yml0cyljLndiaXRzPXdiO2Vsc2UgaWYod2I+Yy53Yml0cyl7YS5tc2c9ImludmFsaWQgd2luZG93IHNpemUiLGMubW9kZT1sYjticmVha31jLmRtYXg9MTw8d2IsYS5hZGxlcj1jLmNoZWNrPTEsYy5tb2RlPTUxMiZtP1Q6VixtPTAsbj0wO2JyZWFrO2Nhc2UgTDpmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZihjLmZsYWdzPW0sKDI1NSZjLmZsYWdzKSE9PUope2EubXNnPSJ1bmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCIsYy5tb2RlPWxiO2JyZWFrfWlmKDU3MzQ0JmMuZmxhZ3Mpe2EubXNnPSJ1bmtub3duIGhlYWRlciBmbGFncyBzZXQiLGMubW9kZT1sYjticmVha31jLmhlYWQmJihjLmhlYWQudGV4dD1tPj44JjEpLDUxMiZjLmZsYWdzJiYoQmJbMF09MjU1Jm0sQmJbMV09bT4+PjgmMjU1LGMuY2hlY2s9dChjLmNoZWNrLEJiLDIsMCkpLG09MCxuPTAsYy5tb2RlPU07Y2FzZSBNOmZvcig7MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMuaGVhZCYmKGMuaGVhZC50aW1lPW0pLDUxMiZjLmZsYWdzJiYoQmJbMF09MjU1Jm0sQmJbMV09bT4+PjgmMjU1LEJiWzJdPW0+Pj4xNiYyNTUsQmJbM109bT4+PjI0JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiw0LDApKSxtPTAsbj0wLGMubW9kZT1OO2Nhc2UgTjpmb3IoOzE2Pm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1jLmhlYWQmJihjLmhlYWQueGZsYWdzPTI1NSZtLGMuaGVhZC5vcz1tPj44KSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiwyLDApKSxtPTAsbj0wLGMubW9kZT1PO2Nhc2UgTzppZigxMDI0JmMuZmxhZ3Mpe2Zvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWMubGVuZ3RoPW0sYy5oZWFkJiYoYy5oZWFkLmV4dHJhX2xlbj1tKSw1MTImYy5mbGFncyYmKEJiWzBdPTI1NSZtLEJiWzFdPW0+Pj44JjI1NSxjLmNoZWNrPXQoYy5jaGVjayxCYiwyLDApKSxtPTAsbj0wfWVsc2UgYy5oZWFkJiYoYy5oZWFkLmV4dHJhPW51bGwpO2MubW9kZT1QO2Nhc2UgUDppZigxMDI0JmMuZmxhZ3MmJihxPWMubGVuZ3RoLHE+aSYmKHE9aSkscSYmKGMuaGVhZCYmKHdiPWMuaGVhZC5leHRyYV9sZW4tYy5sZW5ndGgsYy5oZWFkLmV4dHJhfHwoYy5oZWFkLmV4dHJhPW5ldyBBcnJheShjLmhlYWQuZXh0cmFfbGVuKSksci5hcnJheVNldChjLmhlYWQuZXh0cmEsZSxnLHEsd2IpKSw1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLGMubGVuZ3RoLT1xKSxjLmxlbmd0aCkpYnJlYWsgYTtjLmxlbmd0aD0wLGMubW9kZT1RO2Nhc2UgUTppZigyMDQ4JmMuZmxhZ3Mpe2lmKDA9PT1pKWJyZWFrIGE7cT0wO2RvIHdiPWVbZytxKytdLGMuaGVhZCYmd2ImJmMubGVuZ3RoPDY1NTM2JiYoYy5oZWFkLm5hbWUrPVN0cmluZy5mcm9tQ2hhckNvZGUod2IpKTt3aGlsZSh3YiYmaT5xKTtpZig1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLHdiKWJyZWFrIGF9ZWxzZSBjLmhlYWQmJihjLmhlYWQubmFtZT1udWxsKTtjLmxlbmd0aD0wLGMubW9kZT1SO2Nhc2UgUjppZig0MDk2JmMuZmxhZ3Mpe2lmKDA9PT1pKWJyZWFrIGE7cT0wO2RvIHdiPWVbZytxKytdLGMuaGVhZCYmd2ImJmMubGVuZ3RoPDY1NTM2JiYoYy5oZWFkLmNvbW1lbnQrPVN0cmluZy5mcm9tQ2hhckNvZGUod2IpKTt3aGlsZSh3YiYmaT5xKTtpZig1MTImYy5mbGFncyYmKGMuY2hlY2s9dChjLmNoZWNrLGUscSxnKSksaS09cSxnKz1xLHdiKWJyZWFrIGF9ZWxzZSBjLmhlYWQmJihjLmhlYWQuY29tbWVudD1udWxsKTtjLm1vZGU9UztjYXNlIFM6aWYoNTEyJmMuZmxhZ3Mpe2Zvcig7MTY+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKG0hPT0oNjU1MzUmYy5jaGVjaykpe2EubXNnPSJoZWFkZXIgY3JjIG1pc21hdGNoIixjLm1vZGU9bGI7YnJlYWt9bT0wLG49MH1jLmhlYWQmJihjLmhlYWQuaGNyYz1jLmZsYWdzPj45JjEsYy5oZWFkLmRvbmU9ITApLGEuYWRsZXI9Yy5jaGVjaz0wLGMubW9kZT1WO2JyZWFrO2Nhc2UgVDpmb3IoOzMyPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1hLmFkbGVyPWMuY2hlY2s9ZChtKSxtPTAsbj0wLGMubW9kZT1VO2Nhc2UgVTppZigwPT09Yy5oYXZlZGljdClyZXR1cm4gYS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLEU7YS5hZGxlcj1jLmNoZWNrPTEsYy5tb2RlPVY7Y2FzZSBWOmlmKGI9PT1BfHxiPT09QilicmVhayBhO2Nhc2UgVzppZihjLmxhc3Qpe20+Pj49NyZuLG4tPTcmbixjLm1vZGU9aWI7YnJlYWt9Zm9yKDszPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1zd2l0Y2goYy5sYXN0PTEmbSxtPj4+PTEsbi09MSwzJm0pe2Nhc2UgMDpjLm1vZGU9WDticmVhaztjYXNlIDE6aWYoayhjKSxjLm1vZGU9YmIsYj09PUIpe20+Pj49MixuLT0yO2JyZWFrIGF9YnJlYWs7Y2FzZSAyOmMubW9kZT0kO2JyZWFrO2Nhc2UgMzphLm1zZz0iaW52YWxpZCBibG9jayB0eXBlIixjLm1vZGU9bGJ9bT4+Pj0yLG4tPTI7YnJlYWs7Y2FzZSBYOmZvcihtPj4+PTcmbixuLT03Jm47MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKCg2NTUzNSZtKSE9PShtPj4+MTZeNjU1MzUpKXthLm1zZz0iaW52YWxpZCBzdG9yZWQgYmxvY2sgbGVuZ3RocyIsYy5tb2RlPWxiO2JyZWFrfWlmKGMubGVuZ3RoPTY1NTM1Jm0sbT0wLG49MCxjLm1vZGU9WSxiPT09QilicmVhayBhO2Nhc2UgWTpjLm1vZGU9WjtjYXNlIFo6aWYocT1jLmxlbmd0aCl7aWYocT5pJiYocT1pKSxxPmomJihxPWopLDA9PT1xKWJyZWFrIGE7ci5hcnJheVNldChmLGUsZyxxLGgpLGktPXEsZys9cSxqLT1xLGgrPXEsYy5sZW5ndGgtPXE7YnJlYWt9Yy5tb2RlPVY7YnJlYWs7Y2FzZSAkOmZvcig7MTQ+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fWlmKGMubmxlbj0oMzEmbSkrMjU3LG0+Pj49NSxuLT01LGMubmRpc3Q9KDMxJm0pKzEsbT4+Pj01LG4tPTUsYy5uY29kZT0oMTUmbSkrNCxtPj4+PTQsbi09NCxjLm5sZW4+Mjg2fHxjLm5kaXN0PjMwKXthLm1zZz0idG9vIG1hbnkgbGVuZ3RoIG9yIGRpc3RhbmNlIHN5bWJvbHMiLGMubW9kZT1sYjticmVha31jLmhhdmU9MCxjLm1vZGU9XztjYXNlIF86Zm9yKDtjLmhhdmU8Yy5uY29kZTspe2Zvcig7Mz5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5sZW5zW0NiW2MuaGF2ZSsrXV09NyZtLG0+Pj49MyxuLT0zfWZvcig7Yy5oYXZlPDE5OyljLmxlbnNbQ2JbYy5oYXZlKytdXT0wO2lmKGMubGVuY29kZT1jLmxlbmR5bixjLmxlbmJpdHM9Nyx5Yj17Yml0czpjLmxlbmJpdHN9LHhiPXYodyxjLmxlbnMsMCwxOSxjLmxlbmNvZGUsMCxjLndvcmsseWIpLGMubGVuYml0cz15Yi5iaXRzLHhiKXthLm1zZz0iaW52YWxpZCBjb2RlIGxlbmd0aHMgc2V0IixjLm1vZGU9bGI7YnJlYWt9Yy5oYXZlPTAsYy5tb2RlPWFiO2Nhc2UgYWI6Zm9yKDtjLmhhdmU8Yy5ubGVuK2MubmRpc3Q7KXtmb3IoO0FiPWMubGVuY29kZVttJigxPDxjLmxlbmJpdHMpLTFdLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj1xYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZigxNj5zYiltPj4+PXFiLG4tPXFiLGMubGVuc1tjLmhhdmUrK109c2I7ZWxzZXtpZigxNj09PXNiKXtmb3IoemI9cWIrMjt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYobT4+Pj1xYixuLT1xYiwwPT09Yy5oYXZlKXthLm1zZz0iaW52YWxpZCBiaXQgbGVuZ3RoIHJlcGVhdCIsYy5tb2RlPWxiO2JyZWFrfXdiPWMubGVuc1tjLmhhdmUtMV0scT0zKygzJm0pLG0+Pj49MixuLT0yfWVsc2UgaWYoMTc9PT1zYil7Zm9yKHpiPXFiKzM7emI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG0rPWVbZysrXTw8bixuKz04fW0+Pj49cWIsbi09cWIsd2I9MCxxPTMrKDcmbSksbT4+Pj0zLG4tPTN9ZWxzZXtmb3IoemI9cWIrNzt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9bT4+Pj1xYixuLT1xYix3Yj0wLHE9MTErKDEyNyZtKSxtPj4+PTcsbi09N31pZihjLmhhdmUrcT5jLm5sZW4rYy5uZGlzdCl7YS5tc2c9ImludmFsaWQgYml0IGxlbmd0aCByZXBlYXQiLGMubW9kZT1sYjticmVha31mb3IoO3EtLTspYy5sZW5zW2MuaGF2ZSsrXT13Yn19aWYoYy5tb2RlPT09bGIpYnJlYWs7aWYoMD09PWMubGVuc1syNTZdKXthLm1zZz0iaW52YWxpZCBjb2RlIC0tIG1pc3NpbmcgZW5kLW9mLWJsb2NrIixjLm1vZGU9bGI7YnJlYWt9aWYoYy5sZW5iaXRzPTkseWI9e2JpdHM6Yy5sZW5iaXRzfSx4Yj12KHgsYy5sZW5zLDAsYy5ubGVuLGMubGVuY29kZSwwLGMud29yayx5YiksYy5sZW5iaXRzPXliLmJpdHMseGIpe2EubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RocyBzZXQiLGMubW9kZT1sYjticmVha31pZihjLmRpc3RiaXRzPTYsYy5kaXN0Y29kZT1jLmRpc3RkeW4seWI9e2JpdHM6Yy5kaXN0Yml0c30seGI9dih5LGMubGVucyxjLm5sZW4sYy5uZGlzdCxjLmRpc3Rjb2RlLDAsYy53b3JrLHliKSxjLmRpc3RiaXRzPXliLmJpdHMseGIpe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlcyBzZXQiLGMubW9kZT1sYjticmVha31pZihjLm1vZGU9YmIsYj09PUIpYnJlYWsgYTtjYXNlIGJiOmMubW9kZT1jYjtjYXNlIGNiOmlmKGk+PTYmJmo+PTI1OCl7YS5uZXh0X291dD1oLGEuYXZhaWxfb3V0PWosYS5uZXh0X2luPWcsYS5hdmFpbF9pbj1pLGMuaG9sZD1tLGMuYml0cz1uLHUoYSxwKSxoPWEubmV4dF9vdXQsZj1hLm91dHB1dCxqPWEuYXZhaWxfb3V0LGc9YS5uZXh0X2luLGU9YS5pbnB1dCxpPWEuYXZhaWxfaW4sbT1jLmhvbGQsbj1jLmJpdHMsYy5tb2RlPT09ViYmKGMuYmFjaz0tMSk7YnJlYWt9Zm9yKGMuYmFjaz0wO0FiPWMubGVuY29kZVttJigxPDxjLmxlbmJpdHMpLTFdLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj1xYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZihyYiYmMD09PSgyNDAmcmIpKXtmb3IodGI9cWIsdWI9cmIsdmI9c2I7QWI9Yy5sZW5jb2RlW3ZiKygobSYoMTw8dGIrdWIpLTEpPj50YildLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj10YitxYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1tPj4+PXRiLG4tPXRiLGMuYmFjays9dGJ9aWYobT4+Pj1xYixuLT1xYixjLmJhY2srPXFiLGMubGVuZ3RoPXNiLDA9PT1yYil7Yy5tb2RlPWhiO2JyZWFrfWlmKDMyJnJiKXtjLmJhY2s9LTEsYy5tb2RlPVY7YnJlYWt9aWYoNjQmcmIpe2EubXNnPSJpbnZhbGlkIGxpdGVyYWwvbGVuZ3RoIGNvZGUiLGMubW9kZT1sYjticmVha31jLmV4dHJhPTE1JnJiLGMubW9kZT1kYjtjYXNlIGRiOmlmKGMuZXh0cmEpe2Zvcih6Yj1jLmV4dHJhO3piPm47KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1jLmxlbmd0aCs9bSYoMTw8Yy5leHRyYSktMSxtPj4+PWMuZXh0cmEsbi09Yy5leHRyYSxjLmJhY2srPWMuZXh0cmF9Yy53YXM9Yy5sZW5ndGgsYy5tb2RlPWViO2Nhc2UgZWI6Zm9yKDtBYj1jLmRpc3Rjb2RlW20mKDE8PGMuZGlzdGJpdHMpLTFdLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj1xYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1pZigwPT09KDI0MCZyYikpe2Zvcih0Yj1xYix1Yj1yYix2Yj1zYjtBYj1jLmRpc3Rjb2RlW3ZiKygobSYoMTw8dGIrdWIpLTEpPj50YildLHFiPUFiPj4+MjQscmI9QWI+Pj4xNiYyNTUsc2I9NjU1MzUmQWIsIShuPj10YitxYik7KXtpZigwPT09aSlicmVhayBhO2ktLSxtKz1lW2crK108PG4sbis9OH1tPj4+PXRiLG4tPXRiLGMuYmFjays9dGJ9aWYobT4+Pj1xYixuLT1xYixjLmJhY2srPXFiLDY0JnJiKXthLm1zZz0iaW52YWxpZCBkaXN0YW5jZSBjb2RlIixjLm1vZGU9bGI7YnJlYWt9Yy5vZmZzZXQ9c2IsYy5leHRyYT0xNSZyYixjLm1vZGU9ZmI7Y2FzZSBmYjppZihjLmV4dHJhKXtmb3IoemI9Yy5leHRyYTt6Yj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9Yy5vZmZzZXQrPW0mKDE8PGMuZXh0cmEpLTEsbT4+Pj1jLmV4dHJhLG4tPWMuZXh0cmEsYy5iYWNrKz1jLmV4dHJhfWlmKGMub2Zmc2V0PmMuZG1heCl7YS5tc2c9ImludmFsaWQgZGlzdGFuY2UgdG9vIGZhciBiYWNrIixjLm1vZGU9bGI7YnJlYWt9Yy5tb2RlPWdiO2Nhc2UgZ2I6aWYoMD09PWopYnJlYWsgYTtpZihxPXAtaixjLm9mZnNldD5xKXtpZihxPWMub2Zmc2V0LXEscT5jLndoYXZlJiZjLnNhbmUpe2EubXNnPSJpbnZhbGlkIGRpc3RhbmNlIHRvbyBmYXIgYmFjayIsYy5tb2RlPWxiO2JyZWFrfXE+Yy53bmV4dD8ocS09Yy53bmV4dCxvYj1jLndzaXplLXEpOm9iPWMud25leHQtcSxxPmMubGVuZ3RoJiYocT1jLmxlbmd0aCkscGI9Yy53aW5kb3d9ZWxzZSBwYj1mLG9iPWgtYy5vZmZzZXQscT1jLmxlbmd0aDtxPmomJihxPWopLGotPXEsYy5sZW5ndGgtPXE7ZG8gZltoKytdPXBiW29iKytdO3doaWxlKC0tcSk7MD09PWMubGVuZ3RoJiYoYy5tb2RlPWNiKTticmVhaztjYXNlIGhiOmlmKDA9PT1qKWJyZWFrIGE7ZltoKytdPWMubGVuZ3RoLGotLSxjLm1vZGU9Y2I7YnJlYWs7Y2FzZSBpYjppZihjLndyYXApe2Zvcig7MzI+bjspe2lmKDA9PT1pKWJyZWFrIGE7aS0tLG18PWVbZysrXTw8bixuKz04fWlmKHAtPWosYS50b3RhbF9vdXQrPXAsYy50b3RhbCs9cCxwJiYoYS5hZGxlcj1jLmNoZWNrPWMuZmxhZ3M/dChjLmNoZWNrLGYscCxoLXApOnMoYy5jaGVjayxmLHAsaC1wKSkscD1qLChjLmZsYWdzP206ZChtKSkhPT1jLmNoZWNrKXthLm1zZz0iaW5jb3JyZWN0IGRhdGEgY2hlY2siLGMubW9kZT1sYjticmVha31tPTAsbj0wfWMubW9kZT1qYjtjYXNlIGpiOmlmKGMud3JhcCYmYy5mbGFncyl7Zm9yKDszMj5uOyl7aWYoMD09PWkpYnJlYWsgYTtpLS0sbSs9ZVtnKytdPDxuLG4rPTh9aWYobSE9PSg0Mjk0OTY3Mjk1JmMudG90YWwpKXthLm1zZz0iaW5jb3JyZWN0IGxlbmd0aCBjaGVjayIsYy5tb2RlPWxiO2JyZWFrfW09MCxuPTB9Yy5tb2RlPWtiO2Nhc2Uga2I6eGI9RDticmVhayBhO2Nhc2UgbGI6eGI9RzticmVhayBhO2Nhc2UgbWI6cmV0dXJuIEg7Y2FzZSBuYjpkZWZhdWx0OnJldHVybiBGfXJldHVybiBhLm5leHRfb3V0PWgsYS5hdmFpbF9vdXQ9aixhLm5leHRfaW49ZyxhLmF2YWlsX2luPWksYy5ob2xkPW0sYy5iaXRzPW4sKGMud3NpemV8fHAhPT1hLmF2YWlsX291dCYmYy5tb2RlPGxiJiYoYy5tb2RlPGlifHxiIT09eikpJiZsKGEsYS5vdXRwdXQsYS5uZXh0X291dCxwLWEuYXZhaWxfb3V0KT8oYy5tb2RlPW1iLEgpOihvLT1hLmF2YWlsX2luLHAtPWEuYXZhaWxfb3V0LGEudG90YWxfaW4rPW8sYS50b3RhbF9vdXQrPXAsYy50b3RhbCs9cCxjLndyYXAmJnAmJihhLmFkbGVyPWMuY2hlY2s9Yy5mbGFncz90KGMuY2hlY2ssZixwLGEubmV4dF9vdXQtcCk6cyhjLmNoZWNrLGYscCxhLm5leHRfb3V0LXApKSxhLmRhdGFfdHlwZT1jLmJpdHMrKGMubGFzdD82NDowKSsoYy5tb2RlPT09Vj8xMjg6MCkrKGMubW9kZT09PWJifHxjLm1vZGU9PT1ZPzI1NjowKSwoMD09PW8mJjA9PT1wfHxiPT09eikmJnhiPT09QyYmKHhiPUkpLHhiKX1mdW5jdGlvbiBuKGEpe2lmKCFhfHwhYS5zdGF0ZSlyZXR1cm4gRjt2YXIgYj1hLnN0YXRlO3JldHVybiBiLndpbmRvdyYmKGIud2luZG93PW51bGwpLGEuc3RhdGU9bnVsbCxDfWZ1bmN0aW9uIG8oYSxiKXt2YXIgYztyZXR1cm4gYSYmYS5zdGF0ZT8oYz1hLnN0YXRlLDA9PT0oMiZjLndyYXApP0Y6KGMuaGVhZD1iLGIuZG9uZT0hMSxDKSk6Rn12YXIgcCxxLHI9YSgiLi4vdXRpbHMvY29tbW9uIikscz1hKCIuL2FkbGVyMzIiKSx0PWEoIi4vY3JjMzIiKSx1PWEoIi4vaW5mZmFzdCIpLHY9YSgiLi9pbmZ0cmVlcyIpLHc9MCx4PTEseT0yLHo9NCxBPTUsQj02LEM9MCxEPTEsRT0yLEY9LTIsRz0tMyxIPS00LEk9LTUsSj04LEs9MSxMPTIsTT0zLE49NCxPPTUsUD02LFE9NyxSPTgsUz05LFQ9MTAsVT0xMSxWPTEyLFc9MTMsWD0xNCxZPTE1LFo9MTYsJD0xNyxfPTE4LGFiPTE5LGJiPTIwLGNiPTIxLGRiPTIyLGViPTIzLGZiPTI0LGdiPTI1LGhiPTI2LGliPTI3LGpiPTI4LGtiPTI5LGxiPTMwLG1iPTMxLG5iPTMyLG9iPTg1MixwYj01OTIscWI9MTUscmI9cWIsc2I9ITA7Yy5pbmZsYXRlUmVzZXQ9ZyxjLmluZmxhdGVSZXNldDI9aCxjLmluZmxhdGVSZXNldEtlZXA9ZixjLmluZmxhdGVJbml0PWosYy5pbmZsYXRlSW5pdDI9aSxjLmluZmxhdGU9bSxjLmluZmxhdGVFbmQ9bixjLmluZmxhdGVHZXRIZWFkZXI9byxjLmluZmxhdGVJbmZvPSJwYWtvIGluZmxhdGUgKGZyb20gTm9kZWNhIHByb2plY3QpIn0seyIuLi91dGlscy9jb21tb24iOjI3LCIuL2FkbGVyMzIiOjI5LCIuL2NyYzMyIjozMSwiLi9pbmZmYXN0IjozNCwiLi9pbmZ0cmVlcyI6MzZ9XSwzNjpbZnVuY3Rpb24oYSxiKXsidXNlIHN0cmljdCI7dmFyIGM9YSgiLi4vdXRpbHMvY29tbW9uIiksZD0xNSxlPTg1MixmPTU5MixnPTAsaD0xLGk9MixqPVszLDQsNSw2LDcsOCw5LDEwLDExLDEzLDE1LDE3LDE5LDIzLDI3LDMxLDM1LDQzLDUxLDU5LDY3LDgzLDk5LDExNSwxMzEsMTYzLDE5NSwyMjcsMjU4LDAsMF0saz1bMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTYsMTcsMTcsMTcsMTcsMTgsMTgsMTgsMTgsMTksMTksMTksMTksMjAsMjAsMjAsMjAsMjEsMjEsMjEsMjEsMTYsNzIsNzhdLGw9WzEsMiwzLDQsNSw3LDksMTMsMTcsMjUsMzMsNDksNjUsOTcsMTI5LDE5MywyNTcsMzg1LDUxMyw3NjksMTAyNSwxNTM3LDIwNDksMzA3Myw0MDk3LDYxNDUsODE5MywxMjI4OSwxNjM4NSwyNDU3NywwLDBdLG09WzE2LDE2LDE2LDE2LDE3LDE3LDE4LDE4LDE5LDE5LDIwLDIwLDIxLDIxLDIyLDIyLDIzLDIzLDI0LDI0LDI1LDI1LDI2LDI2LDI3LDI3LDI4LDI4LDI5LDI5LDY0LDY0XTtiLmV4cG9ydHM9ZnVuY3Rpb24oYSxiLG4sbyxwLHEscixzKXt2YXIgdCx1LHYsdyx4LHkseixBLEIsQz1zLmJpdHMsRD0wLEU9MCxGPTAsRz0wLEg9MCxJPTAsSj0wLEs9MCxMPTAsTT0wLE49bnVsbCxPPTAsUD1uZXcgYy5CdWYxNihkKzEpLFE9bmV3IGMuQnVmMTYoZCsxKSxSPW51bGwsUz0wO2ZvcihEPTA7ZD49RDtEKyspUFtEXT0wO2ZvcihFPTA7bz5FO0UrKylQW2JbbitFXV0rKztmb3IoSD1DLEc9ZDtHPj0xJiYwPT09UFtHXTtHLS0pO2lmKEg+RyYmKEg9RyksMD09PUcpcmV0dXJuIHBbcSsrXT0yMDk3MTUyMCxwW3ErK109MjA5NzE1MjAscy5iaXRzPTEsMDtmb3IoRj0xO0c+RiYmMD09PVBbRl07RisrKTtmb3IoRj5IJiYoSD1GKSxLPTEsRD0xO2Q+PUQ7RCsrKWlmKEs8PD0xLEstPVBbRF0sMD5LKXJldHVybi0xO2lmKEs+MCYmKGE9PT1nfHwxIT09RykpcmV0dXJuLTE7Zm9yKFFbMV09MCxEPTE7ZD5EO0QrKylRW0QrMV09UVtEXStQW0RdO2ZvcihFPTA7bz5FO0UrKykwIT09YltuK0VdJiYocltRW2JbbitFXV0rK109RSk7aWYoYT09PWc/KE49Uj1yLHk9MTkpOmE9PT1oPyhOPWosTy09MjU3LFI9ayxTLT0yNTcseT0yNTYpOihOPWwsUj1tLHk9LTEpLE09MCxFPTAsRD1GLHg9cSxJPUgsSj0wLHY9LTEsTD0xPDxILHc9TC0xLGE9PT1oJiZMPmV8fGE9PT1pJiZMPmYpcmV0dXJuIDE7Zm9yKHZhciBUPTA7Oyl7VCsrLHo9RC1KLHJbRV08eT8oQT0wLEI9cltFXSk6cltFXT55PyhBPVJbUytyW0VdXSxCPU5bTytyW0VdXSk6KEE9OTYsQj0wKSx0PTE8PEQtSix1PTE8PEksRj11O2RvIHUtPXQscFt4KyhNPj5KKSt1XT16PDwyNHxBPDwxNnxCfDA7d2hpbGUoMCE9PXUpO2Zvcih0PTE8PEQtMTtNJnQ7KXQ+Pj0xO2lmKDAhPT10PyhNJj10LTEsTSs9dCk6TT0wLEUrKywwPT09LS1QW0RdKXtpZihEPT09RylicmVhaztEPWJbbityW0VdXX1pZihEPkgmJihNJncpIT09dil7Zm9yKDA9PT1KJiYoSj1IKSx4Kz1GLEk9RC1KLEs9MTw8STtHPkkrSiYmKEstPVBbSStKXSwhKDA+PUspKTspSSsrLEs8PD0xO2lmKEwrPTE8PEksYT09PWgmJkw+ZXx8YT09PWkmJkw+ZilyZXR1cm4gMTt2PU0mdyxwW3ZdPUg8PDI0fEk8PDE2fHgtcXwwfX1yZXR1cm4gMCE9PU0mJihwW3grTV09RC1KPDwyNHw2NDw8MTZ8MCkscy5iaXRzPUgsMH19LHsiLi4vdXRpbHMvY29tbW9uIjoyN31dLDM3OltmdW5jdGlvbihhLGIpeyJ1c2Ugc3RyaWN0IjtiLmV4cG9ydHM9ezI6Im5lZWQgZGljdGlvbmFyeSIsMToic3RyZWFtIGVuZCIsMDoiIiwiLTEiOiJmaWxlIGVycm9yIiwiLTIiOiJzdHJlYW0gZXJyb3IiLCItMyI6ImRhdGEgZXJyb3IiLCItNCI6Imluc3VmZmljaWVudCBtZW1vcnkiLCItNSI6ImJ1ZmZlciBlcnJvciIsIi02IjoiaW5jb21wYXRpYmxlIHZlcnNpb24ifX0se31dLDM4OltmdW5jdGlvbihhLGIsYyl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGQoYSl7Zm9yKHZhciBiPWEubGVuZ3RoOy0tYj49MDspYVtiXT0wfWZ1bmN0aW9uIGUoYSl7cmV0dXJuIDI1Nj5hP2diW2FdOmdiWzI1NisoYT4+PjcpXX1mdW5jdGlvbiBmKGEsYil7YS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109MjU1JmIsYS5wZW5kaW5nX2J1ZlthLnBlbmRpbmcrK109Yj4+PjgmMjU1fWZ1bmN0aW9uIGcoYSxiLGMpe2EuYmlfdmFsaWQ+Vi1jPyhhLmJpX2J1Znw9Yjw8YS5iaV92YWxpZCY2NTUzNSxmKGEsYS5iaV9idWYpLGEuYmlfYnVmPWI+PlYtYS5iaV92YWxpZCxhLmJpX3ZhbGlkKz1jLVYpOihhLmJpX2J1Znw9Yjw8YS5iaV92YWxpZCY2NTUzNSxhLmJpX3ZhbGlkKz1jKX1mdW5jdGlvbiBoKGEsYixjKXtnKGEsY1syKmJdLGNbMipiKzFdKX1mdW5jdGlvbiBpKGEsYil7dmFyIGM9MDtkbyBjfD0xJmEsYT4+Pj0xLGM8PD0xO3doaWxlKC0tYj4wKTtyZXR1cm4gYz4+PjF9ZnVuY3Rpb24gaihhKXsxNj09PWEuYmlfdmFsaWQ/KGYoYSxhLmJpX2J1ZiksYS5iaV9idWY9MCxhLmJpX3ZhbGlkPTApOmEuYmlfdmFsaWQ+PTgmJihhLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT0yNTUmYS5iaV9idWYsYS5iaV9idWY+Pj04LGEuYmlfdmFsaWQtPTgpfWZ1bmN0aW9uIGsoYSxiKXt2YXIgYyxkLGUsZixnLGgsaT1iLmR5bl90cmVlLGo9Yi5tYXhfY29kZSxrPWIuc3RhdF9kZXNjLnN0YXRpY190cmVlLGw9Yi5zdGF0X2Rlc2MuaGFzX3N0cmVlLG09Yi5zdGF0X2Rlc2MuZXh0cmFfYml0cyxuPWIuc3RhdF9kZXNjLmV4dHJhX2Jhc2Usbz1iLnN0YXRfZGVzYy5tYXhfbGVuZ3RoLHA9MDtmb3IoZj0wO1U+PWY7ZisrKWEuYmxfY291bnRbZl09MDtmb3IoaVsyKmEuaGVhcFthLmhlYXBfbWF4XSsxXT0wLGM9YS5oZWFwX21heCsxO1Q+YztjKyspZD1hLmhlYXBbY10sZj1pWzIqaVsyKmQrMV0rMV0rMSxmPm8mJihmPW8scCsrKSxpWzIqZCsxXT1mLGQ+anx8KGEuYmxfY291bnRbZl0rKyxnPTAsZD49biYmKGc9bVtkLW5dKSxoPWlbMipkXSxhLm9wdF9sZW4rPWgqKGYrZyksbCYmKGEuc3RhdGljX2xlbis9aCooa1syKmQrMV0rZykpKTtpZigwIT09cCl7ZG97Zm9yKGY9by0xOzA9PT1hLmJsX2NvdW50W2ZdOylmLS07YS5ibF9jb3VudFtmXS0tLGEuYmxfY291bnRbZisxXSs9MixhLmJsX2NvdW50W29dLS0scC09Mn13aGlsZShwPjApO2ZvcihmPW87MCE9PWY7Zi0tKWZvcihkPWEuYmxfY291bnRbZl07MCE9PWQ7KWU9YS5oZWFwWy0tY10sZT5qfHwoaVsyKmUrMV0hPT1mJiYoYS5vcHRfbGVuKz0oZi1pWzIqZSsxXSkqaVsyKmVdLGlbMiplKzFdPWYpLGQtLSl9fWZ1bmN0aW9uIGwoYSxiLGMpe3ZhciBkLGUsZj1uZXcgQXJyYXkoVSsxKSxnPTA7Zm9yKGQ9MTtVPj1kO2QrKylmW2RdPWc9ZytjW2QtMV08PDE7Zm9yKGU9MDtiPj1lO2UrKyl7dmFyIGg9YVsyKmUrMV07MCE9PWgmJihhWzIqZV09aShmW2hdKyssaCkpfX1mdW5jdGlvbiBtKCl7dmFyIGEsYixjLGQsZSxmPW5ldyBBcnJheShVKzEpO2ZvcihjPTAsZD0wO08tMT5kO2QrKylmb3IoaWJbZF09YyxhPTA7YTwxPDxfW2RdO2ErKyloYltjKytdPWQ7Zm9yKGhiW2MtMV09ZCxlPTAsZD0wOzE2PmQ7ZCsrKWZvcihqYltkXT1lLGE9MDthPDE8PGFiW2RdO2ErKylnYltlKytdPWQ7Zm9yKGU+Pj03O1I+ZDtkKyspZm9yKGpiW2RdPWU8PDcsYT0wO2E8MTw8YWJbZF0tNzthKyspZ2JbMjU2K2UrK109ZDtmb3IoYj0wO1U+PWI7YisrKWZbYl09MDtmb3IoYT0wOzE0Mz49YTspZWJbMiphKzFdPTgsYSsrLGZbOF0rKztmb3IoOzI1NT49YTspZWJbMiphKzFdPTksYSsrLGZbOV0rKztmb3IoOzI3OT49YTspZWJbMiphKzFdPTcsYSsrLGZbN10rKztmb3IoOzI4Nz49YTspZWJbMiphKzFdPTgsYSsrLGZbOF0rKztmb3IobChlYixRKzEsZiksYT0wO1I+YTthKyspZmJbMiphKzFdPTUsZmJbMiphXT1pKGEsNSk7a2I9bmV3IG5iKGViLF8sUCsxLFEsVSksbGI9bmV3IG5iKGZiLGFiLDAsUixVKSxtYj1uZXcgbmIobmV3IEFycmF5KDApLGJiLDAsUyxXKX1mdW5jdGlvbiBuKGEpe3ZhciBiO2ZvcihiPTA7UT5iO2IrKylhLmR5bl9sdHJlZVsyKmJdPTA7Zm9yKGI9MDtSPmI7YisrKWEuZHluX2R0cmVlWzIqYl09MDtmb3IoYj0wO1M+YjtiKyspYS5ibF90cmVlWzIqYl09MDthLmR5bl9sdHJlZVsyKlhdPTEsYS5vcHRfbGVuPWEuc3RhdGljX2xlbj0wLGEubGFzdF9saXQ9YS5tYXRjaGVzPTB9ZnVuY3Rpb24gbyhhKXthLmJpX3ZhbGlkPjg/ZihhLGEuYmlfYnVmKTphLmJpX3ZhbGlkPjAmJihhLnBlbmRpbmdfYnVmW2EucGVuZGluZysrXT1hLmJpX2J1ZiksYS5iaV9idWY9MCxhLmJpX3ZhbGlkPTB9ZnVuY3Rpb24gcChhLGIsYyxkKXtvKGEpLGQmJihmKGEsYyksZihhLH5jKSksRS5hcnJheVNldChhLnBlbmRpbmdfYnVmLGEud2luZG93LGIsYyxhLnBlbmRpbmcpLGEucGVuZGluZys9Y31mdW5jdGlvbiBxKGEsYixjLGQpe3ZhciBlPTIqYixmPTIqYztyZXR1cm4gYVtlXTxhW2ZdfHxhW2VdPT09YVtmXSYmZFtiXTw9ZFtjXX1mdW5jdGlvbiByKGEsYixjKXtmb3IodmFyIGQ9YS5oZWFwW2NdLGU9Yzw8MTtlPD1hLmhlYXBfbGVuJiYoZTxhLmhlYXBfbGVuJiZxKGIsYS5oZWFwW2UrMV0sYS5oZWFwW2VdLGEuZGVwdGgpJiZlKyssIXEoYixkLGEuaGVhcFtlXSxhLmRlcHRoKSk7KWEuaGVhcFtjXT1hLmhlYXBbZV0sYz1lLGU8PD0xO2EuaGVhcFtjXT1kfWZ1bmN0aW9uIHMoYSxiLGMpe3ZhciBkLGYsaSxqLGs9MDtpZigwIT09YS5sYXN0X2xpdClkbyBkPWEucGVuZGluZ19idWZbYS5kX2J1ZisyKmtdPDw4fGEucGVuZGluZ19idWZbYS5kX2J1ZisyKmsrMV0sZj1hLnBlbmRpbmdfYnVmW2EubF9idWYra10saysrLDA9PT1kP2goYSxmLGIpOihpPWhiW2ZdLGgoYSxpK1ArMSxiKSxqPV9baV0sMCE9PWomJihmLT1pYltpXSxnKGEsZixqKSksZC0tLGk9ZShkKSxoKGEsaSxjKSxqPWFiW2ldLDAhPT1qJiYoZC09amJbaV0sZyhhLGQsaikpKTt3aGlsZShrPGEubGFzdF9saXQpO2goYSxYLGIpfWZ1bmN0aW9uIHQoYSxiKXt2YXIgYyxkLGUsZj1iLmR5bl90cmVlLGc9Yi5zdGF0X2Rlc2Muc3RhdGljX3RyZWUsaD1iLnN0YXRfZGVzYy5oYXNfc3RyZWUsaT1iLnN0YXRfZGVzYy5lbGVtcyxqPS0xO2ZvcihhLmhlYXBfbGVuPTAsYS5oZWFwX21heD1ULGM9MDtpPmM7YysrKTAhPT1mWzIqY10/KGEuaGVhcFsrK2EuaGVhcF9sZW5dPWo9YyxhLmRlcHRoW2NdPTApOmZbMipjKzFdPTA7Zm9yKDthLmhlYXBfbGVuPDI7KWU9YS5oZWFwWysrYS5oZWFwX2xlbl09Mj5qPysrajowLGZbMiplXT0xLGEuZGVwdGhbZV09MCxhLm9wdF9sZW4tLSxoJiYoYS5zdGF0aWNfbGVuLT1nWzIqZSsxXSk7Zm9yKGIubWF4X2NvZGU9aixjPWEuaGVhcF9sZW4+PjE7Yz49MTtjLS0pcihhLGYsYyk7ZT1pO2RvIGM9YS5oZWFwWzFdLGEuaGVhcFsxXT1hLmhlYXBbYS5oZWFwX2xlbi0tXSxyKGEsZiwxKSxkPWEuaGVhcFsxXSxhLmhlYXBbLS1hLmhlYXBfbWF4XT1jLGEuaGVhcFstLWEuaGVhcF9tYXhdPWQsZlsyKmVdPWZbMipjXStmWzIqZF0sYS5kZXB0aFtlXT0oYS5kZXB0aFtjXT49YS5kZXB0aFtkXT9hLmRlcHRoW2NdOmEuZGVwdGhbZF0pKzEsZlsyKmMrMV09ZlsyKmQrMV09ZSxhLmhlYXBbMV09ZSsrLHIoYSxmLDEpO3doaWxlKGEuaGVhcF9sZW4+PTIpO2EuaGVhcFstLWEuaGVhcF9tYXhdPWEuaGVhcFsxXSxrKGEsYiksbChmLGosYS5ibF9jb3VudCl9ZnVuY3Rpb24gdShhLGIsYyl7dmFyIGQsZSxmPS0xLGc9YlsxXSxoPTAsaT03LGo9NDtmb3IoMD09PWcmJihpPTEzOCxqPTMpLGJbMiooYysxKSsxXT02NTUzNSxkPTA7Yz49ZDtkKyspZT1nLGc9YlsyKihkKzEpKzFdLCsraDxpJiZlPT09Z3x8KGo+aD9hLmJsX3RyZWVbMiplXSs9aDowIT09ZT8oZSE9PWYmJmEuYmxfdHJlZVsyKmVdKyssYS5ibF90cmVlWzIqWV0rKyk6MTA+PWg/YS5ibF90cmVlWzIqWl0rKzphLmJsX3RyZWVbMiokXSsrLGg9MCxmPWUsMD09PWc/KGk9MTM4LGo9Myk6ZT09PWc/KGk9NixqPTMpOihpPTcsaj00KSl9ZnVuY3Rpb24gdihhLGIsYyl7dmFyIGQsZSxmPS0xLGk9YlsxXSxqPTAsaz03LGw9NDtmb3IoMD09PWkmJihrPTEzOCxsPTMpLGQ9MDtjPj1kO2QrKylpZihlPWksaT1iWzIqKGQrMSkrMV0sISgrK2o8ayYmZT09PWkpKXtpZihsPmope2RvIGgoYSxlLGEuYmxfdHJlZSk7d2hpbGUoMCE9PS0tail9ZWxzZSAwIT09ZT8oZSE9PWYmJihoKGEsZSxhLmJsX3RyZWUpLGotLSksaChhLFksYS5ibF90cmVlKSxnKGEsai0zLDIpKToxMD49aj8oaChhLFosYS5ibF90cmVlKSxnKGEsai0zLDMpKTooaChhLCQsYS5ibF90cmVlKSxnKGEsai0xMSw3KSk7aj0wLGY9ZSwwPT09aT8oaz0xMzgsbD0zKTplPT09aT8oaz02LGw9Myk6KGs9NyxsPTQpfX1mdW5jdGlvbiB3KGEpe3ZhciBiO2Zvcih1KGEsYS5keW5fbHRyZWUsYS5sX2Rlc2MubWF4X2NvZGUpLHUoYSxhLmR5bl9kdHJlZSxhLmRfZGVzYy5tYXhfY29kZSksdChhLGEuYmxfZGVzYyksYj1TLTE7Yj49MyYmMD09PWEuYmxfdHJlZVsyKmNiW2JdKzFdO2ItLSk7cmV0dXJuIGEub3B0X2xlbis9MyooYisxKSs1KzUrNCxifWZ1bmN0aW9uIHgoYSxiLGMsZCl7dmFyIGU7Zm9yKGcoYSxiLTI1Nyw1KSxnKGEsYy0xLDUpLGcoYSxkLTQsNCksZT0wO2Q+ZTtlKyspZyhhLGEuYmxfdHJlZVsyKmNiW2VdKzFdLDMpO3YoYSxhLmR5bl9sdHJlZSxiLTEpLHYoYSxhLmR5bl9kdHJlZSxjLTEpfWZ1bmN0aW9uIHkoYSl7dmFyIGIsYz00MDkzNjI0NDQ3O2ZvcihiPTA7MzE+PWI7YisrLGM+Pj49MSlpZigxJmMmJjAhPT1hLmR5bl9sdHJlZVsyKmJdKXJldHVybiBHO2lmKDAhPT1hLmR5bl9sdHJlZVsxOF18fDAhPT1hLmR5bl9sdHJlZVsyMF18fDAhPT1hLmR5bl9sdHJlZVsyNl0pcmV0dXJuIEg7Zm9yKGI9MzI7UD5iO2IrKylpZigwIT09YS5keW5fbHRyZWVbMipiXSlyZXR1cm4gSDtyZXR1cm4gR31mdW5jdGlvbiB6KGEpe3BifHwobSgpLHBiPSEwKSxhLmxfZGVzYz1uZXcgb2IoYS5keW5fbHRyZWUsa2IpLGEuZF9kZXNjPW5ldyBvYihhLmR5bl9kdHJlZSxsYiksYS5ibF9kZXNjPW5ldyBvYihhLmJsX3RyZWUsbWIpLGEuYmlfYnVmPTAsYS5iaV92YWxpZD0wLG4oYSl9ZnVuY3Rpb24gQShhLGIsYyxkKXtnKGEsKEo8PDEpKyhkPzE6MCksMykscChhLGIsYywhMCl9ZnVuY3Rpb24gQihhKXtnKGEsSzw8MSwzKSxoKGEsWCxlYiksaihhKX1mdW5jdGlvbiBDKGEsYixjLGQpe3ZhciBlLGYsaD0wO2EubGV2ZWw+MD8oYS5zdHJtLmRhdGFfdHlwZT09PUkmJihhLnN0cm0uZGF0YV90eXBlPXkoYSkpLHQoYSxhLmxfZGVzYyksdChhLGEuZF9kZXNjKSxoPXcoYSksZT1hLm9wdF9sZW4rMys3Pj4+MyxmPWEuc3RhdGljX2xlbiszKzc+Pj4zLGU+PWYmJihlPWYpKTplPWY9Yys1LGU+PWMrNCYmLTEhPT1iP0EoYSxiLGMsZCk6YS5zdHJhdGVneT09PUZ8fGY9PT1lPyhnKGEsKEs8PDEpKyhkPzE6MCksMykscyhhLGViLGZiKSk6KGcoYSwoTDw8MSkrKGQ/MTowKSwzKSx4KGEsYS5sX2Rlc2MubWF4X2NvZGUrMSxhLmRfZGVzYy5tYXhfY29kZSsxLGgrMSkscyhhLGEuZHluX2x0cmVlLGEuZHluX2R0cmVlKSksbihhKSxkJiZvKGEpfWZ1bmN0aW9uIEQoYSxiLGMpe3JldHVybiBhLnBlbmRpbmdfYnVmW2EuZF9idWYrMiphLmxhc3RfbGl0XT1iPj4+OCYyNTUsYS5wZW5kaW5nX2J1ZlthLmRfYnVmKzIqYS5sYXN0X2xpdCsxXT0yNTUmYixhLnBlbmRpbmdfYnVmW2EubF9idWYrYS5sYXN0X2xpdF09MjU1JmMsYS5sYXN0X2xpdCsrLDA9PT1iP2EuZHluX2x0cmVlWzIqY10rKzooYS5tYXRjaGVzKyssYi0tLGEuZHluX2x0cmVlWzIqKGhiW2NdK1ArMSldKyssYS5keW5fZHRyZWVbMiplKGIpXSsrKSxhLmxhc3RfbGl0PT09YS5saXRfYnVmc2l6ZS0xfXZhciBFPWEoIi4uL3V0aWxzL2NvbW1vbiIpLEY9NCxHPTAsSD0xLEk9MixKPTAsSz0xLEw9MixNPTMsTj0yNTgsTz0yOSxQPTI1NixRPVArMStPLFI9MzAsUz0xOSxUPTIqUSsxLFU9MTUsVj0xNixXPTcsWD0yNTYsWT0xNixaPTE3LCQ9MTgsXz1bMCwwLDAsMCwwLDAsMCwwLDEsMSwxLDEsMiwyLDIsMiwzLDMsMywzLDQsNCw0LDQsNSw1LDUsNSwwXSxhYj1bMCwwLDAsMCwxLDEsMiwyLDMsMyw0LDQsNSw1LDYsNiw3LDcsOCw4LDksOSwxMCwxMCwxMSwxMSwxMiwxMiwxMywxM10sYmI9WzAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMiwzLDddLGNiPVsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSxkYj01MTIsZWI9bmV3IEFycmF5KDIqKFErMikpO2QoZWIpO3ZhciBmYj1uZXcgQXJyYXkoMipSKTtkKGZiKTt2YXIgZ2I9bmV3IEFycmF5KGRiKTtkKGdiKTt2YXIgaGI9bmV3IEFycmF5KE4tTSsxKTtkKGhiKTt2YXIgaWI9bmV3IEFycmF5KE8pO2QoaWIpO3ZhciBqYj1uZXcgQXJyYXkoUik7ZChqYik7dmFyIGtiLGxiLG1iLG5iPWZ1bmN0aW9uKGEsYixjLGQsZSl7dGhpcy5zdGF0aWNfdHJlZT1hLHRoaXMuZXh0cmFfYml0cz1iLHRoaXMuZXh0cmFfYmFzZT1jLHRoaXMuZWxlbXM9ZCx0aGlzLm1heF9sZW5ndGg9ZSx0aGlzLmhhc19zdHJlZT1hJiZhLmxlbmd0aH0sb2I9ZnVuY3Rpb24oYSxiKXt0aGlzLmR5bl90cmVlPWEsdGhpcy5tYXhfY29kZT0wLHRoaXMuc3RhdF9kZXNjPWJ9LHBiPSExO2MuX3RyX2luaXQ9eixjLl90cl9zdG9yZWRfYmxvY2s9QSxjLl90cl9mbHVzaF9ibG9jaz1DLGMuX3RyX3RhbGx5PUQsYy5fdHJfYWxpZ249Qn0seyIuLi91dGlscy9jb21tb24iOjI3fV0sMzk6W2Z1bmN0aW9uKGEsYil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIGMoKXt0aGlzLmlucHV0PW51bGwsdGhpcy5uZXh0X2luPTAsdGhpcy5hdmFpbF9pbj0wLHRoaXMudG90YWxfaW49MCx0aGlzLm91dHB1dD1udWxsLHRoaXMubmV4dF9vdXQ9MCx0aGlzLmF2YWlsX291dD0wLHRoaXMudG90YWxfb3V0PTAsdGhpcy5tc2c9IiIsdGhpcy5zdGF0ZT1udWxsLHRoaXMuZGF0YV90eXBlPTIsdGhpcy5hZGxlcj0wfWIuZXhwb3J0cz1jfSx7fV19LHt9LFs5XSkoOSl9KTsndXNlIHN0cmljdCc7aWYodHIuaXNWaW5uKXtnbG9iYWwuSlNaaXA9Z2xvYmFsLndpbmRvdy5KU1ppcDtnbG9iYWwud2luZG93PXVuZGVmaW5lZDt9ZWxzZSBpZih0ci5pc05vZGUpe2NvbnN0IGpzWmlwQWJzUGF0aD1IVE1MSW1wb3J0c0xvYWRlci5ocmVmVG9BYnNvbHV0ZVBhdGgoJy9qc3ppcC5taW4uanMnKTtjb25zdCBqc1ppcE1vZHVsZT1yZXF1aXJlKGpzWmlwQWJzUGF0aCk7Z2xvYmFsLkpTWmlwPWpzWmlwTW9kdWxlO30ndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gWmlwSW1wb3J0ZXIobW9kZWwsZXZlbnREYXRhKXtpZihldmVudERhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7ZXZlbnREYXRhPW5ldyBVaW50OEFycmF5KGV2ZW50RGF0YSk7fQp0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmV2ZW50RGF0YV89ZXZlbnREYXRhO30KWmlwSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50RGF0YSl7bGV0IGhlYWRlcjtpZihldmVudERhdGEgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcil7aGVhZGVyPW5ldyBVaW50OEFycmF5KGV2ZW50RGF0YS5zbGljZSgwLDIpKTt9ZWxzZSBpZih0eXBlb2YoZXZlbnREYXRhKT09PSdzdHJpbmcnfHxldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe2hlYWRlcj1bZXZlbnREYXRhLmNoYXJDb2RlQXQoMCksZXZlbnREYXRhLmNoYXJDb2RlQXQoMSldO31lbHNle3JldHVybiBmYWxzZTt9CnJldHVybiBoZWFkZXJbMF09PT0nUCcuY2hhckNvZGVBdCgwKSYmaGVhZGVyWzFdPT09J0snLmNoYXJDb2RlQXQoMCk7fTtaaXBJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidaaXBJbXBvcnRlcic7fSxpc1RyYWNlRGF0YUNvbnRhaW5lcigpe3JldHVybiB0cnVlO30sZXh0cmFjdFN1YnRyYWNlcygpe2NvbnN0IHppcD1uZXcgSlNaaXAodGhpcy5ldmVudERhdGFfKTtjb25zdCBzdWJ0cmFjZXM9W107Zm9yKGNvbnN0IGlkeCBpbiB6aXAuZmlsZXMpe3N1YnRyYWNlcy5wdXNoKHppcC5maWxlc1tpZHhdLmFzQmluYXJ5KCkpO30KcmV0dXJuIHN1YnRyYWNlczt9fTt0ci5pbXBvcnRlci5JbXBvcnRlci5yZWdpc3RlcihaaXBJbXBvcnRlcik7cmV0dXJue1ppcEltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBIZWFwRW50cnkoaGVhcER1bXAsbGVhZlN0YWNrRnJhbWUsb2JqZWN0VHlwZU5hbWUsc2l6ZSxjb3VudCx2YWx1ZXNBcmVUb3RhbHMpe3RoaXMuaGVhcER1bXA9aGVhcER1bXA7dGhpcy5sZWFmU3RhY2tGcmFtZT1sZWFmU3RhY2tGcmFtZTt0aGlzLm9iamVjdFR5cGVOYW1lPW9iamVjdFR5cGVOYW1lO3RoaXMuc2l6ZT1zaXplO3RoaXMuY291bnQ9Y291bnQ7dGhpcy52YWx1ZXNBcmVUb3RhbHM9dmFsdWVzQXJlVG90YWxzO30KZnVuY3Rpb24gSGVhcER1bXAocHJvY2Vzc01lbW9yeUR1bXAsYWxsb2NhdG9yTmFtZSxpc0NvbXBsZXRlKXt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wPXByb2Nlc3NNZW1vcnlEdW1wO3RoaXMuYWxsb2NhdG9yTmFtZT1hbGxvY2F0b3JOYW1lO3RoaXMuaXNDb21wbGV0ZT1pc0NvbXBsZXRlO3RoaXMuZW50cmllcz1bXTt9CkhlYXBEdW1wLnByb3RvdHlwZT17YWRkRW50cnkobGVhZlN0YWNrRnJhbWUsb2JqZWN0VHlwZU5hbWUsc2l6ZSxjb3VudCxvcHRfdmFsdWVzQXJlVG90YWxzKXtpZihvcHRfdmFsdWVzQXJlVG90YWxzPT09dW5kZWZpbmVkKW9wdF92YWx1ZXNBcmVUb3RhbHM9dHJ1ZTtjb25zdCB2YWx1ZXNBcmVUb3RhbHM9b3B0X3ZhbHVlc0FyZVRvdGFscztjb25zdCBlbnRyeT1uZXcgSGVhcEVudHJ5KHRoaXMsbGVhZlN0YWNrRnJhbWUsb2JqZWN0VHlwZU5hbWUsc2l6ZSxjb3VudCx2YWx1ZXNBcmVUb3RhbHMpO3RoaXMuZW50cmllcy5wdXNoKGVudHJ5KTtyZXR1cm4gZW50cnk7fX07cmV0dXJue0hlYXBFbnRyeSxIZWFwRHVtcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcihoZWFwUHJvZmlsZUV4cGFuZGVyLHN0YWNrRnJhbWVzLHByb2Nlc3NNZW1vcnlEdW1wLGlkUHJlZml4LG1vZGVsKXt0aGlzLmV4cGFuZGVyPWhlYXBQcm9maWxlRXhwYW5kZXI7dGhpcy5zdGFja0ZyYW1lcz1zdGFja0ZyYW1lczt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wPXByb2Nlc3NNZW1vcnlEdW1wO3RoaXMuaWRQcmVmaXg9aWRQcmVmaXg7dGhpcy5tb2RlbD1tb2RlbDt9CkhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyLnByb3RvdHlwZT17Z2V0TGVhZlN0YWNrRnJhbWUoc3RhY2tGcmFtZUlkKXtpZihzdGFja0ZyYW1lSWQ9PT0nJylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBhcmVudElkPXRoaXMuaWRQcmVmaXgrc3RhY2tGcmFtZUlkO2NvbnN0IGlkPXBhcmVudElkKyc6c2VsZic7aWYoIXRoaXMuc3RhY2tGcmFtZXNbaWRdKXtjb25zdCBwYXJlbnRTdGFja0ZyYW1lPXRoaXMuc3RhY2tGcmFtZXNbcGFyZW50SWRdO2NvbnN0IHN0YWNrRnJhbWU9bmV3IHRyLm1vZGVsLlN0YWNrRnJhbWUocGFyZW50U3RhY2tGcmFtZSxpZCwnPHNlbGY+Jyx1bmRlZmluZWQpO3RoaXMubW9kZWwuYWRkU3RhY2tGcmFtZShzdGFja0ZyYW1lKTt9CnJldHVybiB0aGlzLnN0YWNrRnJhbWVzW2lkXTt9LHBhcnNlRW50cnkoZW50cnksaGVhcER1bXApe2NvbnN0IHNpemU9ZW50cnkuc2l6ZTtjb25zdCBjb3VudD1lbnRyeS5jb3VudDtjb25zdCBsZWFmU3RhY2tGcmFtZT10aGlzLmdldExlYWZTdGFja0ZyYW1lKGVudHJ5Lm5vZGUuaWQpO2NvbnN0IG9iamVjdFR5cGVOYW1lPWVudHJ5LnR5cGUubmFtZTtjb25zdCB2YWx1ZXNBcmVUb3RhbHM9ZmFsc2U7aWYob2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIG9iamVjdCB0eXBlIG5hbWUgKElEICcrdHlwZUlkKycpJyx9KTt9CmhlYXBEdW1wLmFkZEVudHJ5KGxlYWZTdGFja0ZyYW1lLG9iamVjdFR5cGVOYW1lLHNpemUsY291bnQsdmFsdWVzQXJlVG90YWxzKTt9LHBhcnNlKCl7Y29uc3QgaGVhcER1bXBzPXt9O2NvbnN0IGluZmxhdGVkPXRoaXMuZXhwYW5kZXIuaW5mbGF0ZWQ7Zm9yKGNvbnN0W2FsbG9jYXRvck5hbWUsZW50cmllc11vZiBPYmplY3QuZW50cmllcyhpbmZsYXRlZCkpe2NvbnN0IGhlYXBEdW1wPW5ldyB0ci5tb2RlbC5IZWFwRHVtcCh0aGlzLnByb2Nlc3NNZW1vcnlEdW1wLGFsbG9jYXRvck5hbWUpO2Zvcihjb25zdCBlbnRyeSBvZiBlbnRyaWVzKXt0aGlzLnBhcnNlRW50cnkoZW50cnksaGVhcER1bXApO30KaGVhcER1bXAuaXNDb21wbGV0ZT10cnVlO2hlYXBEdW1wc1thbGxvY2F0b3JOYW1lXT1oZWFwRHVtcDt9CnJldHVybiBoZWFwRHVtcHM7fSx9O3JldHVybntIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBMZWdhY3lIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcihtb2RlbCxwcm9jZXNzTWVtb3J5RHVtcCxwcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXAsaWRQcmVmaXgsZHVtcElkLHJhd0hlYXBEdW1wcyl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5wcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXBfPXByb2Nlc3NPYmplY3RUeXBlTmFtZU1hcDt0aGlzLmlkUHJlZml4Xz1pZFByZWZpeDt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wXz1wcm9jZXNzTWVtb3J5RHVtcDt0aGlzLnBpZF89dGhpcy5wcm9jZXNzTWVtb3J5RHVtcF8ucHJvY2Vzcy5waWQ7dGhpcy5kdW1wSWRfPWR1bXBJZDt0aGlzLnJhd0hlYXBEdW1wc189cmF3SGVhcER1bXBzO30KTGVnYWN5SGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIucHJvdG90eXBlPXtwYXJzZVJhd0hlYXBEdW1wKHJhd0hlYXBEdW1wLGFsbG9jYXRvck5hbWUpe2NvbnN0IG1vZGVsPXRoaXMubW9kZWxfO2NvbnN0IHByb2Nlc3NNZW1vcnlEdW1wPXRoaXMucHJvY2Vzc01lbW9yeUR1bXBfO2NvbnN0IGhlYXBEdW1wPW5ldyB0ci5tb2RlbC5IZWFwRHVtcChwcm9jZXNzTWVtb3J5RHVtcCxhbGxvY2F0b3JOYW1lKTtjb25zdCBlbnRyaWVzPXJhd0hlYXBEdW1wLmVudHJpZXM7aWYoZW50cmllcz09PXVuZGVmaW5lZHx8ZW50cmllcy5sZW5ndGg9PT0wKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTm8gaGVhcCBlbnRyaWVzIGluIGEgJythbGxvY2F0b3JOYW1lKycgaGVhcCBkdW1wIGZvciBQSUQ9Jyt0aGlzLnBpZF8rJyBhbmQgZHVtcCBJRD0nK3RoaXMuZHVtcElkXysnLid9KTtyZXR1cm4gdW5kZWZpbmVkO30KY29uc3QgaXNPbGRGb3JtYXQ9ZW50cmllc1swXS5idD09PXVuZGVmaW5lZDtpZighaXNPbGRGb3JtYXQmJnRoaXMucHJvY2Vzc09iamVjdFR5cGVOYW1lTWFwXz09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9CmZvcihsZXQgaT0wO2k8ZW50cmllcy5sZW5ndGg7aSsrKXtjb25zdCBlbnRyeT1lbnRyaWVzW2ldO2NvbnN0IHNpemU9cGFyc2VJbnQoZW50cnkuc2l6ZSwxNik7Y29uc3QgbGVhZlN0YWNrRnJhbWVJbmRleD1lbnRyeS5idDtsZXQgbGVhZlN0YWNrRnJhbWU7aWYoaXNPbGRGb3JtYXQpe2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT11bmRlZmluZWQpe2xlYWZTdGFja0ZyYW1lPXVuZGVmaW5lZDt9ZWxzZXtsZXQgbGVhZlN0YWNrRnJhbWVJZD10aGlzLmlkUHJlZml4XytsZWFmU3RhY2tGcmFtZUluZGV4O2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT0nJyl7bGVhZlN0YWNrRnJhbWU9dW5kZWZpbmVkO31lbHNle2xlYWZTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW2xlYWZTdGFja0ZyYW1lSWRdO2lmKGxlYWZTdGFja0ZyYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWlzc2luZyBsZWFmIHN0YWNrIGZyYW1lIChJRCAnKwpsZWFmU3RhY2tGcmFtZUlkKycpIG9mIGhlYXAgZW50cnkgJytpKycgKHNpemUgJysKc2l6ZSsnKSBpbiBhICcrYWxsb2NhdG9yTmFtZSsnIGhlYXAgZHVtcCBmb3IgUElEPScrdGhpcy5waWRfKycuJ30pO2NvbnRpbnVlO319CmxlYWZTdGFja0ZyYW1lSWQrPSc6c2VsZic7aWYobW9kZWwuc3RhY2tGcmFtZXNbbGVhZlN0YWNrRnJhbWVJZF0hPT11bmRlZmluZWQpe2xlYWZTdGFja0ZyYW1lPW1vZGVsLnN0YWNrRnJhbWVzW2xlYWZTdGFja0ZyYW1lSWRdO31lbHNle2xlYWZTdGFja0ZyYW1lPW5ldyB0ci5tb2RlbC5TdGFja0ZyYW1lKGxlYWZTdGFja0ZyYW1lLGxlYWZTdGFja0ZyYW1lSWQsJzxzZWxmPicsdW5kZWZpbmVkKTttb2RlbC5hZGRTdGFja0ZyYW1lKGxlYWZTdGFja0ZyYW1lKTt9fX1lbHNle2lmKGxlYWZTdGFja0ZyYW1lSW5kZXg9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIHN0YWNrIGZyYW1lIElEIG9mIGhlYXAgZW50cnkgJytpKycgKHNpemUgJytzaXplKycpIGluIGEgJythbGxvY2F0b3JOYW1lKycgaGVhcCBkdW1wIGZvciBQSUQ9Jyt0aGlzLnBpZF8rJy4nfSk7Y29udGludWU7fQpjb25zdCBsZWFmU3RhY2tGcmFtZUlkPXRoaXMuaWRQcmVmaXhfK2xlYWZTdGFja0ZyYW1lSW5kZXg7aWYobGVhZlN0YWNrRnJhbWVJbmRleD09PScnKXtsZWFmU3RhY2tGcmFtZT11bmRlZmluZWQ7fWVsc2V7bGVhZlN0YWNrRnJhbWU9bW9kZWwuc3RhY2tGcmFtZXNbbGVhZlN0YWNrRnJhbWVJZF07aWYobGVhZlN0YWNrRnJhbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIGxlYWYgc3RhY2sgZnJhbWUgKElEICcrbGVhZlN0YWNrRnJhbWVJZCsnKSBvZiBoZWFwIGVudHJ5ICcraSsnIChzaXplICcrc2l6ZSsnKSBpbiBhICcrCmFsbG9jYXRvck5hbWUrJyBoZWFwIGR1bXAgZm9yIFBJRD0nK3RoaXMucGlkXysnLid9KTtjb250aW51ZTt9fX0KY29uc3Qgb2JqZWN0VHlwZUlkPWVudHJ5LnR5cGU7bGV0IG9iamVjdFR5cGVOYW1lO2lmKG9iamVjdFR5cGVJZD09PXVuZGVmaW5lZCl7b2JqZWN0VHlwZU5hbWU9dW5kZWZpbmVkO31lbHNlIGlmKHRoaXMucHJvY2Vzc09iamVjdFR5cGVOYW1lTWFwXz09PXVuZGVmaW5lZCl7Y29udGludWU7fWVsc2V7b2JqZWN0VHlwZU5hbWU9dGhpcy5wcm9jZXNzT2JqZWN0VHlwZU5hbWVNYXBfW29iamVjdFR5cGVJZF07aWYob2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIG9iamVjdCB0eXBlIG5hbWUgKElEICcrb2JqZWN0VHlwZUlkKycpIG9mIGhlYXAgZW50cnkgJytpKycgKHNpemUgJytzaXplKycpIGluIGEgJysKYWxsb2NhdG9yTmFtZSsnIGhlYXAgZHVtcCBmb3IgUElEPScrdGhpcy5waWRfKycuJ30pO2NvbnRpbnVlO319CmNvbnN0IGNvdW50PWVudHJ5LmNvdW50PT09dW5kZWZpbmVkP3VuZGVmaW5lZDpwYXJzZUludChlbnRyeS5jb3VudCwxNik7aGVhcER1bXAuYWRkRW50cnkobGVhZlN0YWNrRnJhbWUsb2JqZWN0VHlwZU5hbWUsc2l6ZSxjb3VudCk7fQpyZXR1cm4gaGVhcER1bXA7fSxwYXJzZSgpe2NvbnN0IGhlYXBEdW1wcz17fTtmb3IoY29uc3QgYWxsb2NhdG9yTmFtZSBpbiB0aGlzLnJhd0hlYXBEdW1wc18pe2NvbnN0IHJhd0hlYXBEdW1wPXRoaXMucmF3SGVhcER1bXBzX1thbGxvY2F0b3JOYW1lXTtjb25zdCBoZWFwRHVtcD10aGlzLnBhcnNlUmF3SGVhcER1bXAocmF3SGVhcER1bXAsYWxsb2NhdG9yTmFtZSk7aWYoaGVhcER1bXAhPT11bmRlZmluZWQmJmhlYXBEdW1wLmVudHJpZXMubGVuZ3RoPjApe2hlYXBEdW1wc1thbGxvY2F0b3JOYW1lXT1oZWFwRHVtcDt9fQpyZXR1cm4gaGVhcER1bXBzO30sfTtyZXR1cm57TGVnYWN5SGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7aWYodHIuaXNIZWFkbGVzcyl7Z2xvYmFsLndpbmRvdz17fTt9CihmdW5jdGlvbih3aW5kb3csT2JqZWN0LEFycmF5LEVycm9yLEpTT04sdW5kZWZpbmVkKXt2YXIgcGFydGlhbENvbXBsZXRlPXZhckFyZ3MoZnVuY3Rpb24oZm4sYXJncyl7dmFyIG51bUJvdW5kQXJncz1hcmdzLmxlbmd0aDtyZXR1cm4gdmFyQXJncyhmdW5jdGlvbihjYWxsQXJncyl7Zm9yKHZhciBpPTA7aTxjYWxsQXJncy5sZW5ndGg7aSsrKXthcmdzW251bUJvdW5kQXJncytpXT1jYWxsQXJnc1tpXTt9CmFyZ3MubGVuZ3RoPW51bUJvdW5kQXJncytjYWxsQXJncy5sZW5ndGg7cmV0dXJuIGZuLmFwcGx5KHRoaXMsYXJncyk7fSk7fSksY29tcG9zZT12YXJBcmdzKGZ1bmN0aW9uKGZucyl7dmFyIGZuc0xpc3Q9YXJyYXlBc0xpc3QoZm5zKTtmdW5jdGlvbiBuZXh0KHBhcmFtcyxjdXJGbil7cmV0dXJuW2FwcGx5KHBhcmFtcyxjdXJGbildO30KcmV0dXJuIHZhckFyZ3MoZnVuY3Rpb24oc3RhcnRQYXJhbXMpe3JldHVybiBmb2xkUihuZXh0LHN0YXJ0UGFyYW1zLGZuc0xpc3QpWzBdO30pO30pO2Z1bmN0aW9uIGNvbXBvc2UyKGYxLGYyKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZjEuY2FsbCh0aGlzLGYyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSk7fX0KZnVuY3Rpb24gYXR0cihrZXkpe3JldHVybiBmdW5jdGlvbihvKXtyZXR1cm4gb1trZXldO307fQp2YXIgbGF6eVVuaW9uPXZhckFyZ3MoZnVuY3Rpb24oZm5zKXtyZXR1cm4gdmFyQXJncyhmdW5jdGlvbihwYXJhbXMpe3ZhciBtYXliZVZhbHVlO2Zvcih2YXIgaT0wO2k8bGVuKGZucyk7aSsrKXttYXliZVZhbHVlPWFwcGx5KHBhcmFtcyxmbnNbaV0pO2lmKG1heWJlVmFsdWUpe3JldHVybiBtYXliZVZhbHVlO319fSk7fSk7ZnVuY3Rpb24gYXBwbHkoYXJncyxmbil7cmV0dXJuIGZuLmFwcGx5KHVuZGVmaW5lZCxhcmdzKTt9CmZ1bmN0aW9uIHZhckFyZ3MoZm4pe3ZhciBudW1iZXJPZkZpeGVkQXJndW1lbnRzPWZuLmxlbmd0aC0xLHNsaWNlPUFycmF5LnByb3RvdHlwZS5zbGljZTtpZihudW1iZXJPZkZpeGVkQXJndW1lbnRzPT0wKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZm4uY2FsbCh0aGlzLHNsaWNlLmNhbGwoYXJndW1lbnRzKSk7fX1lbHNlIGlmKG51bWJlck9mRml4ZWRBcmd1bWVudHM9PTEpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBmbi5jYWxsKHRoaXMsYXJndW1lbnRzWzBdLHNsaWNlLmNhbGwoYXJndW1lbnRzLDEpKTt9fQp2YXIgYXJnc0hvbGRlcj1BcnJheShmbi5sZW5ndGgpO3JldHVybiBmdW5jdGlvbigpe2Zvcih2YXIgaT0wO2k8bnVtYmVyT2ZGaXhlZEFyZ3VtZW50cztpKyspe2FyZ3NIb2xkZXJbaV09YXJndW1lbnRzW2ldO30KYXJnc0hvbGRlcltudW1iZXJPZkZpeGVkQXJndW1lbnRzXT1zbGljZS5jYWxsKGFyZ3VtZW50cyxudW1iZXJPZkZpeGVkQXJndW1lbnRzKTtyZXR1cm4gZm4uYXBwbHkodGhpcyxhcmdzSG9sZGVyKTt9fQpmdW5jdGlvbiBmbGlwKGZuKXtyZXR1cm4gZnVuY3Rpb24oYSxiKXtyZXR1cm4gZm4oYixhKTt9fQpmdW5jdGlvbiBsYXp5SW50ZXJzZWN0aW9uKGZuMSxmbjIpe3JldHVybiBmdW5jdGlvbihwYXJhbSl7cmV0dXJuIGZuMShwYXJhbSkmJmZuMihwYXJhbSk7fTt9CmZ1bmN0aW9uIG5vb3AoKXt9CmZ1bmN0aW9uIGFsd2F5cygpe3JldHVybiB0cnVlfQpmdW5jdGlvbiBmdW5jdG9yKHZhbCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIHZhbDt9fQpmdW5jdGlvbiBpc09mVHlwZShULG1heWJlU29tZXRoaW5nKXtyZXR1cm4gbWF5YmVTb21ldGhpbmcmJm1heWJlU29tZXRoaW5nLmNvbnN0cnVjdG9yPT09VDt9CnZhciBsZW49YXR0cignbGVuZ3RoJyksaXNTdHJpbmc9cGFydGlhbENvbXBsZXRlKGlzT2ZUeXBlLFN0cmluZyk7ZnVuY3Rpb24gZGVmaW5lZCh2YWx1ZSl7cmV0dXJuIHZhbHVlIT09dW5kZWZpbmVkO30KZnVuY3Rpb24gaGFzQWxsUHJvcGVydGllcyhmaWVsZExpc3Qsbyl7cmV0dXJuKG8gaW5zdGFuY2VvZiBPYmplY3QpJiZhbGwoZnVuY3Rpb24oZmllbGQpe3JldHVybihmaWVsZCBpbiBvKTt9LGZpZWxkTGlzdCk7fQpmdW5jdGlvbiBjb25zKHgseHMpe3JldHVyblt4LHhzXTt9CnZhciBlbXB0eUxpc3Q9bnVsbCxoZWFkPWF0dHIoMCksdGFpbD1hdHRyKDEpO2Z1bmN0aW9uIGFycmF5QXNMaXN0KGlucHV0QXJyYXkpe3JldHVybiByZXZlcnNlTGlzdChpbnB1dEFycmF5LnJlZHVjZShmbGlwKGNvbnMpLGVtcHR5TGlzdCkpO30KdmFyIGxpc3Q9dmFyQXJncyhhcnJheUFzTGlzdCk7ZnVuY3Rpb24gbGlzdEFzQXJyYXkobGlzdCl7cmV0dXJuIGZvbGRSKGZ1bmN0aW9uKGFycmF5U29GYXIsbGlzdEl0ZW0pe2FycmF5U29GYXIudW5zaGlmdChsaXN0SXRlbSk7cmV0dXJuIGFycmF5U29GYXI7fSxbXSxsaXN0KTt9CmZ1bmN0aW9uIG1hcChmbixsaXN0KXtyZXR1cm4gbGlzdD9jb25zKGZuKGhlYWQobGlzdCkpLG1hcChmbix0YWlsKGxpc3QpKSk6ZW1wdHlMaXN0O30KZnVuY3Rpb24gZm9sZFIoZm4sc3RhcnRWYWx1ZSxsaXN0KXtyZXR1cm4gbGlzdD9mbihmb2xkUihmbixzdGFydFZhbHVlLHRhaWwobGlzdCkpLGhlYWQobGlzdCkpOnN0YXJ0VmFsdWU7fQpmdW5jdGlvbiBmb2xkUjEoZm4sbGlzdCl7cmV0dXJuIHRhaWwobGlzdCk/Zm4oZm9sZFIxKGZuLHRhaWwobGlzdCkpLGhlYWQobGlzdCkpOmhlYWQobGlzdCk7fQpmdW5jdGlvbiB3aXRob3V0KGxpc3QsdGVzdCxyZW1vdmVkRm4pe3JldHVybiB3aXRob3V0SW5uZXIobGlzdCxyZW1vdmVkRm58fG5vb3ApO2Z1bmN0aW9uIHdpdGhvdXRJbm5lcihzdWJMaXN0LHJlbW92ZWRGbil7cmV0dXJuIHN1Ykxpc3Q/KHRlc3QoaGVhZChzdWJMaXN0KSk/KHJlbW92ZWRGbihoZWFkKHN1Ykxpc3QpKSx0YWlsKHN1Ykxpc3QpKTpjb25zKGhlYWQoc3ViTGlzdCksd2l0aG91dElubmVyKHRhaWwoc3ViTGlzdCkscmVtb3ZlZEZuKSkpOmVtcHR5TGlzdDt9fQpmdW5jdGlvbiBhbGwoZm4sbGlzdCl7cmV0dXJuIWxpc3R8fChmbihoZWFkKGxpc3QpKSYmYWxsKGZuLHRhaWwobGlzdCkpKTt9CmZ1bmN0aW9uIGFwcGx5RWFjaChmbkxpc3QsYXJncyl7aWYoZm5MaXN0KXtoZWFkKGZuTGlzdCkuYXBwbHkobnVsbCxhcmdzKTthcHBseUVhY2godGFpbChmbkxpc3QpLGFyZ3MpO319CmZ1bmN0aW9uIHJldmVyc2VMaXN0KGxpc3Qpe2Z1bmN0aW9uIHJldmVyc2VJbm5lcihsaXN0LHJldmVyc2VkQWxyZWFkeSl7aWYoIWxpc3Qpe3JldHVybiByZXZlcnNlZEFscmVhZHk7fQpyZXR1cm4gcmV2ZXJzZUlubmVyKHRhaWwobGlzdCksY29ucyhoZWFkKGxpc3QpLHJldmVyc2VkQWxyZWFkeSkpfQpyZXR1cm4gcmV2ZXJzZUlubmVyKGxpc3QsZW1wdHlMaXN0KTt9CmZ1bmN0aW9uIGZpcnN0KHRlc3QsbGlzdCl7cmV0dXJuIGxpc3QmJih0ZXN0KGhlYWQobGlzdCkpP2hlYWQobGlzdCk6Zmlyc3QodGVzdCx0YWlsKGxpc3QpKSk7fQpmdW5jdGlvbiBjbGFyaW5ldChldmVudEJ1cyl7InVzZSBzdHJpY3QiO3ZhcgplbWl0U2F4S2V5PWV2ZW50QnVzKFNBWF9LRVkpLmVtaXQsZW1pdFZhbHVlT3Blbj1ldmVudEJ1cyhTQVhfVkFMVUVfT1BFTikuZW1pdCxlbWl0VmFsdWVDbG9zZT1ldmVudEJ1cyhTQVhfVkFMVUVfQ0xPU0UpLmVtaXQsZW1pdEZhaWw9ZXZlbnRCdXMoRkFJTF9FVkVOVCkuZW1pdCxNQVhfQlVGRkVSX0xFTkdUSD02NCoxMDI0LHN0cmluZ1Rva2VuUGF0dGVybj0vW1xcIlxuXS9nLF9uPTAsQkVHSU49X24rKyxWQUxVRT1fbisrLE9QRU5fT0JKRUNUPV9uKyssQ0xPU0VfT0JKRUNUPV9uKyssT1BFTl9BUlJBWT1fbisrLENMT1NFX0FSUkFZPV9uKyssU1RSSU5HPV9uKyssT1BFTl9LRVk9X24rKyxDTE9TRV9LRVk9X24rKyxUUlVFPV9uKyssVFJVRTI9X24rKyxUUlVFMz1fbisrLEZBTFNFPV9uKyssRkFMU0UyPV9uKyssRkFMU0UzPV9uKyssRkFMU0U0PV9uKyssTlVMTD1fbisrLE5VTEwyPV9uKyssTlVMTDM9X24rKyxOVU1CRVJfREVDSU1BTF9QT0lOVD1fbisrLE5VTUJFUl9ESUdJVD1fbixidWZmZXJDaGVja1Bvc2l0aW9uPU1BWF9CVUZGRVJfTEVOR1RILGxhdGVzdEVycm9yLGMscCx0ZXh0Tm9kZT11bmRlZmluZWQsbnVtYmVyTm9kZT0iIixzbGFzaGVkPWZhbHNlLGNsb3NlZD1mYWxzZSxzdGF0ZT1CRUdJTixzdGFjaz1bXSx1bmljb2RlUz1udWxsLHVuaWNvZGVJPTAsZGVwdGg9MCxwb3NpdGlvbj0wLGNvbHVtbj0wLGxpbmU9MTtmdW5jdGlvbiBjaGVja0J1ZmZlckxlbmd0aCgpe3ZhciBtYXhBY3R1YWw9MDtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCYmdGV4dE5vZGUubGVuZ3RoPk1BWF9CVUZGRVJfTEVOR1RIKXtlbWl0RXJyb3IoIk1heCBidWZmZXIgbGVuZ3RoIGV4Y2VlZGVkOiB0ZXh0Tm9kZSIpO21heEFjdHVhbD1NYXRoLm1heChtYXhBY3R1YWwsdGV4dE5vZGUubGVuZ3RoKTt9CmlmKG51bWJlck5vZGUubGVuZ3RoPk1BWF9CVUZGRVJfTEVOR1RIKXtlbWl0RXJyb3IoIk1heCBidWZmZXIgbGVuZ3RoIGV4Y2VlZGVkOiBudW1iZXJOb2RlIik7bWF4QWN0dWFsPU1hdGgubWF4KG1heEFjdHVhbCxudW1iZXJOb2RlLmxlbmd0aCk7fQpidWZmZXJDaGVja1Bvc2l0aW9uPShNQVhfQlVGRkVSX0xFTkdUSC1tYXhBY3R1YWwpCitwb3NpdGlvbjt9CmV2ZW50QnVzKFNUUkVBTV9EQVRBKS5vbihoYW5kbGVEYXRhKTtldmVudEJ1cyhTVFJFQU1fRU5EKS5vbihoYW5kbGVTdHJlYW1FbmQpO2Z1bmN0aW9uIGVtaXRFcnJvcihlcnJvclN0cmluZyl7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRWYWx1ZU9wZW4odGV4dE5vZGUpO2VtaXRWYWx1ZUNsb3NlKCk7dGV4dE5vZGU9dW5kZWZpbmVkO30KbGF0ZXN0RXJyb3I9RXJyb3IoZXJyb3JTdHJpbmcrIlxuTG46ICIrbGluZSsiXG5Db2w6ICIrY29sdW1uKyJcbkNocjogIitjKTtlbWl0RmFpbChlcnJvclJlcG9ydCh1bmRlZmluZWQsdW5kZWZpbmVkLGxhdGVzdEVycm9yKSk7fQpmdW5jdGlvbiBoYW5kbGVTdHJlYW1FbmQoKXtpZihzdGF0ZT09QkVHSU4pe2VtaXRWYWx1ZU9wZW4oe30pO2VtaXRWYWx1ZUNsb3NlKCk7Y2xvc2VkPXRydWU7cmV0dXJuO30KaWYoc3RhdGUhPT1WQUxVRXx8ZGVwdGghPT0wKQplbWl0RXJyb3IoIlVuZXhwZWN0ZWQgZW5kIik7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRWYWx1ZU9wZW4odGV4dE5vZGUpO2VtaXRWYWx1ZUNsb3NlKCk7dGV4dE5vZGU9dW5kZWZpbmVkO30KY2xvc2VkPXRydWU7fQpmdW5jdGlvbiB3aGl0ZXNwYWNlKGMpe3JldHVybiBjPT0nXHInfHxjPT0nXG4nfHxjPT0nICd8fGM9PSdcdCc7fQpmdW5jdGlvbiBoYW5kbGVEYXRhKGNodW5rKXtpZihsYXRlc3RFcnJvcikKcmV0dXJuO2lmKGNsb3NlZCl7cmV0dXJuIGVtaXRFcnJvcigiQ2Fubm90IHdyaXRlIGFmdGVyIGNsb3NlIik7fQp2YXIgaT0wO2M9Y2h1bmtbMF07d2hpbGUoYyl7cD1jO2M9Y2h1bmtbaSsrXTtpZighYylicmVhaztwb3NpdGlvbisrO2lmKGM9PSJcbiIpe2xpbmUrKztjb2x1bW49MDt9ZWxzZSBjb2x1bW4rKztzd2l0Y2goc3RhdGUpe2Nhc2UgQkVHSU46aWYoYz09PSJ7IilzdGF0ZT1PUEVOX09CSkVDVDtlbHNlIGlmKGM9PT0iWyIpc3RhdGU9T1BFTl9BUlJBWTtlbHNlIGlmKCF3aGl0ZXNwYWNlKGMpKQpyZXR1cm4gZW1pdEVycm9yKCJOb24td2hpdGVzcGFjZSBiZWZvcmUge1suIik7Y29udGludWU7Y2FzZSBPUEVOX0tFWTpjYXNlIE9QRU5fT0JKRUNUOmlmKHdoaXRlc3BhY2UoYykpY29udGludWU7aWYoc3RhdGU9PT1PUEVOX0tFWSlzdGFjay5wdXNoKENMT1NFX0tFWSk7ZWxzZXtpZihjPT09J30nKXtlbWl0VmFsdWVPcGVuKHt9KTtlbWl0VmFsdWVDbG9zZSgpO3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTtjb250aW51ZTt9ZWxzZSBzdGFjay5wdXNoKENMT1NFX09CSkVDVCk7fQppZihjPT09JyInKQpzdGF0ZT1TVFJJTkc7ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCJNYWxmb3JtZWQgb2JqZWN0IGtleSBzaG91bGQgc3RhcnQgd2l0aCBcIiAiKTtjb250aW51ZTtjYXNlIENMT1NFX0tFWTpjYXNlIENMT1NFX09CSkVDVDppZih3aGl0ZXNwYWNlKGMpKWNvbnRpbnVlO2lmKGM9PT0nOicpe2lmKHN0YXRlPT09Q0xPU0VfT0JKRUNUKXtzdGFjay5wdXNoKENMT1NFX09CSkVDVCk7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRWYWx1ZU9wZW4oe30pO2VtaXRTYXhLZXkodGV4dE5vZGUpO3RleHROb2RlPXVuZGVmaW5lZDt9CmRlcHRoKys7fWVsc2V7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRTYXhLZXkodGV4dE5vZGUpO3RleHROb2RlPXVuZGVmaW5lZDt9fQpzdGF0ZT1WQUxVRTt9ZWxzZSBpZihjPT09J30nKXtpZih0ZXh0Tm9kZSE9PXVuZGVmaW5lZCl7ZW1pdFZhbHVlT3Blbih0ZXh0Tm9kZSk7ZW1pdFZhbHVlQ2xvc2UoKTt0ZXh0Tm9kZT11bmRlZmluZWQ7fQplbWl0VmFsdWVDbG9zZSgpO2RlcHRoLS07c3RhdGU9c3RhY2sucG9wKCl8fFZBTFVFO31lbHNlIGlmKGM9PT0nLCcpe2lmKHN0YXRlPT09Q0xPU0VfT0JKRUNUKQpzdGFjay5wdXNoKENMT1NFX09CSkVDVCk7aWYodGV4dE5vZGUhPT11bmRlZmluZWQpe2VtaXRWYWx1ZU9wZW4odGV4dE5vZGUpO2VtaXRWYWx1ZUNsb3NlKCk7dGV4dE5vZGU9dW5kZWZpbmVkO30Kc3RhdGU9T1BFTl9LRVk7fWVsc2UKcmV0dXJuIGVtaXRFcnJvcignQmFkIG9iamVjdCcpO2NvbnRpbnVlO2Nhc2UgT1BFTl9BUlJBWTpjYXNlIFZBTFVFOmlmKHdoaXRlc3BhY2UoYykpY29udGludWU7aWYoc3RhdGU9PT1PUEVOX0FSUkFZKXtlbWl0VmFsdWVPcGVuKFtdKTtkZXB0aCsrO3N0YXRlPVZBTFVFO2lmKGM9PT0nXScpe2VtaXRWYWx1ZUNsb3NlKCk7ZGVwdGgtLTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7Y29udGludWU7fWVsc2V7c3RhY2sucHVzaChDTE9TRV9BUlJBWSk7fX0KaWYoYz09PSciJylzdGF0ZT1TVFJJTkc7ZWxzZSBpZihjPT09J3snKXN0YXRlPU9QRU5fT0JKRUNUO2Vsc2UgaWYoYz09PSdbJylzdGF0ZT1PUEVOX0FSUkFZO2Vsc2UgaWYoYz09PSd0JylzdGF0ZT1UUlVFO2Vsc2UgaWYoYz09PSdmJylzdGF0ZT1GQUxTRTtlbHNlIGlmKGM9PT0nbicpc3RhdGU9TlVMTDtlbHNlIGlmKGM9PT0nLScpe251bWJlck5vZGUrPWM7fWVsc2UgaWYoYz09PScwJyl7bnVtYmVyTm9kZSs9YztzdGF0ZT1OVU1CRVJfRElHSVQ7fWVsc2UgaWYoJzEyMzQ1Njc4OScuaW5kZXhPZihjKSE9PS0xKXtudW1iZXJOb2RlKz1jO3N0YXRlPU5VTUJFUl9ESUdJVDt9ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCJCYWQgdmFsdWUiKTtjb250aW51ZTtjYXNlIENMT1NFX0FSUkFZOmlmKGM9PT0nLCcpe3N0YWNrLnB1c2goQ0xPU0VfQVJSQVkpO2lmKHRleHROb2RlIT09dW5kZWZpbmVkKXtlbWl0VmFsdWVPcGVuKHRleHROb2RlKTtlbWl0VmFsdWVDbG9zZSgpO3RleHROb2RlPXVuZGVmaW5lZDt9CnN0YXRlPVZBTFVFO31lbHNlIGlmKGM9PT0nXScpe2lmKHRleHROb2RlIT09dW5kZWZpbmVkKXtlbWl0VmFsdWVPcGVuKHRleHROb2RlKTtlbWl0VmFsdWVDbG9zZSgpO3RleHROb2RlPXVuZGVmaW5lZDt9CmVtaXRWYWx1ZUNsb3NlKCk7ZGVwdGgtLTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7fWVsc2UgaWYod2hpdGVzcGFjZShjKSkKY29udGludWU7ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCdCYWQgYXJyYXknKTtjb250aW51ZTtjYXNlIFNUUklORzppZih0ZXh0Tm9kZT09PXVuZGVmaW5lZCl7dGV4dE5vZGU9IiI7fQp2YXIgc3RhcnRpPWktMTtTVFJJTkdfQklHTE9PUDp3aGlsZSh0cnVlKXt3aGlsZSh1bmljb2RlST4wKXt1bmljb2RlUys9YztjPWNodW5rLmNoYXJBdChpKyspO2lmKHVuaWNvZGVJPT09NCl7dGV4dE5vZGUrPVN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQodW5pY29kZVMsMTYpKTt1bmljb2RlST0wO3N0YXJ0aT1pLTE7fWVsc2V7dW5pY29kZUkrKzt9CmlmKCFjKWJyZWFrIFNUUklOR19CSUdMT09QO30KaWYoYz09PSciJyYmIXNsYXNoZWQpe3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTt0ZXh0Tm9kZSs9Y2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSxpLTEpO2JyZWFrO30KaWYoYz09PSdcXCcmJiFzbGFzaGVkKXtzbGFzaGVkPXRydWU7dGV4dE5vZGUrPWNodW5rLnN1YnN0cmluZyhzdGFydGksaS0xKTtjPWNodW5rLmNoYXJBdChpKyspO2lmKCFjKWJyZWFrO30KaWYoc2xhc2hlZCl7c2xhc2hlZD1mYWxzZTtpZihjPT09J24nKXt0ZXh0Tm9kZSs9J1xuJzt9CmVsc2UgaWYoYz09PSdyJyl7dGV4dE5vZGUrPSdccic7fQplbHNlIGlmKGM9PT0ndCcpe3RleHROb2RlKz0nXHQnO30KZWxzZSBpZihjPT09J2YnKXt0ZXh0Tm9kZSs9J1xmJzt9CmVsc2UgaWYoYz09PSdiJyl7dGV4dE5vZGUrPSdcYic7fQplbHNlIGlmKGM9PT0ndScpe3VuaWNvZGVJPTE7dW5pY29kZVM9Jyc7fWVsc2V7dGV4dE5vZGUrPWM7fQpjPWNodW5rLmNoYXJBdChpKyspO3N0YXJ0aT1pLTE7aWYoIWMpYnJlYWs7ZWxzZSBjb250aW51ZTt9CnN0cmluZ1Rva2VuUGF0dGVybi5sYXN0SW5kZXg9aTt2YXIgcmVSZXN1bHQ9c3RyaW5nVG9rZW5QYXR0ZXJuLmV4ZWMoY2h1bmspO2lmKCFyZVJlc3VsdCl7aT1jaHVuay5sZW5ndGgrMTt0ZXh0Tm9kZSs9Y2h1bmsuc3Vic3RyaW5nKHN0YXJ0aSxpLTEpO2JyZWFrO30KaT1yZVJlc3VsdC5pbmRleCsxO2M9Y2h1bmsuY2hhckF0KHJlUmVzdWx0LmluZGV4KTtpZighYyl7dGV4dE5vZGUrPWNodW5rLnN1YnN0cmluZyhzdGFydGksaS0xKTticmVhazt9fQpjb250aW51ZTtjYXNlIFRSVUU6aWYoIWMpY29udGludWU7aWYoYz09PSdyJylzdGF0ZT1UUlVFMjtlbHNlCnJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgdHJ1ZSBzdGFydGVkIHdpdGggdCcrYyk7Y29udGludWU7Y2FzZSBUUlVFMjppZighYyljb250aW51ZTtpZihjPT09J3UnKXN0YXRlPVRSVUUzO2Vsc2UKcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCB0cnVlIHN0YXJ0ZWQgd2l0aCB0cicrYyk7Y29udGludWU7Y2FzZSBUUlVFMzppZighYyljb250aW51ZTtpZihjPT09J2UnKXtlbWl0VmFsdWVPcGVuKHRydWUpO2VtaXRWYWx1ZUNsb3NlKCk7c3RhdGU9c3RhY2sucG9wKCl8fFZBTFVFO31lbHNlCnJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgdHJ1ZSBzdGFydGVkIHdpdGggdHJ1JytjKTtjb250aW51ZTtjYXNlIEZBTFNFOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nYScpc3RhdGU9RkFMU0UyO2Vsc2UKcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBmYWxzZSBzdGFydGVkIHdpdGggZicrYyk7Y29udGludWU7Y2FzZSBGQUxTRTI6aWYoIWMpY29udGludWU7aWYoYz09PSdsJylzdGF0ZT1GQUxTRTM7ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIGZhbHNlIHN0YXJ0ZWQgd2l0aCBmYScrYyk7Y29udGludWU7Y2FzZSBGQUxTRTM6aWYoIWMpY29udGludWU7aWYoYz09PSdzJylzdGF0ZT1GQUxTRTQ7ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIGZhbHNlIHN0YXJ0ZWQgd2l0aCBmYWwnK2MpO2NvbnRpbnVlO2Nhc2UgRkFMU0U0OmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nZScpe2VtaXRWYWx1ZU9wZW4oZmFsc2UpO2VtaXRWYWx1ZUNsb3NlKCk7c3RhdGU9c3RhY2sucG9wKCl8fFZBTFVFO31lbHNlCnJldHVybiBlbWl0RXJyb3IoJ0ludmFsaWQgZmFsc2Ugc3RhcnRlZCB3aXRoIGZhbHMnK2MpO2NvbnRpbnVlO2Nhc2UgTlVMTDppZighYyljb250aW51ZTtpZihjPT09J3UnKXN0YXRlPU5VTEwyO2Vsc2UKcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBudWxsIHN0YXJ0ZWQgd2l0aCBuJytjKTtjb250aW51ZTtjYXNlIE5VTEwyOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nbCcpc3RhdGU9TlVMTDM7ZWxzZQpyZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIG51bGwgc3RhcnRlZCB3aXRoIG51JytjKTtjb250aW51ZTtjYXNlIE5VTEwzOmlmKCFjKWNvbnRpbnVlO2lmKGM9PT0nbCcpe2VtaXRWYWx1ZU9wZW4obnVsbCk7ZW1pdFZhbHVlQ2xvc2UoKTtzdGF0ZT1zdGFjay5wb3AoKXx8VkFMVUU7fWVsc2UKcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBudWxsIHN0YXJ0ZWQgd2l0aCBudWwnK2MpO2NvbnRpbnVlO2Nhc2UgTlVNQkVSX0RFQ0lNQUxfUE9JTlQ6aWYoYz09PScuJyl7bnVtYmVyTm9kZSs9YztzdGF0ZT1OVU1CRVJfRElHSVQ7fWVsc2UKcmV0dXJuIGVtaXRFcnJvcignTGVhZGluZyB6ZXJvIG5vdCBmb2xsb3dlZCBieSAuJyk7Y29udGludWU7Y2FzZSBOVU1CRVJfRElHSVQ6aWYoJzAxMjM0NTY3ODknLmluZGV4T2YoYykhPT0tMSludW1iZXJOb2RlKz1jO2Vsc2UgaWYoYz09PScuJyl7aWYobnVtYmVyTm9kZS5pbmRleE9mKCcuJykhPT0tMSkKcmV0dXJuIGVtaXRFcnJvcignSW52YWxpZCBudW1iZXIgaGFzIHR3byBkb3RzJyk7bnVtYmVyTm9kZSs9Yzt9ZWxzZSBpZihjPT09J2UnfHxjPT09J0UnKXtpZihudW1iZXJOb2RlLmluZGV4T2YoJ2UnKSE9PS0xfHxudW1iZXJOb2RlLmluZGV4T2YoJ0UnKSE9PS0xKQpyZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIG51bWJlciBoYXMgdHdvIGV4cG9uZW50aWFsJyk7bnVtYmVyTm9kZSs9Yzt9ZWxzZSBpZihjPT09IisifHxjPT09Ii0iKXtpZighKHA9PT0nZSd8fHA9PT0nRScpKQpyZXR1cm4gZW1pdEVycm9yKCdJbnZhbGlkIHN5bWJvbCBpbiBudW1iZXInKTtudW1iZXJOb2RlKz1jO31lbHNle2lmKG51bWJlck5vZGUpe2VtaXRWYWx1ZU9wZW4ocGFyc2VGbG9hdChudW1iZXJOb2RlKSk7ZW1pdFZhbHVlQ2xvc2UoKTtudW1iZXJOb2RlPSIiO30KaS0tO3N0YXRlPXN0YWNrLnBvcCgpfHxWQUxVRTt9CmNvbnRpbnVlO2RlZmF1bHQ6cmV0dXJuIGVtaXRFcnJvcigiVW5rbm93biBzdGF0ZTogIitzdGF0ZSk7fX0KaWYocG9zaXRpb24+PWJ1ZmZlckNoZWNrUG9zaXRpb24pCmNoZWNrQnVmZmVyTGVuZ3RoKCk7fX0KZnVuY3Rpb24gYXNjZW50TWFuYWdlcihvYm9lQnVzLGhhbmRsZXJzKXsidXNlIHN0cmljdCI7dmFyIGxpc3RlbmVySWQ9e30sYXNjZW50O2Z1bmN0aW9uIHN0YXRlQWZ0ZXIoaGFuZGxlcil7cmV0dXJuIGZ1bmN0aW9uKHBhcmFtKXthc2NlbnQ9aGFuZGxlcihhc2NlbnQscGFyYW0pO319CmZvcih2YXIgZXZlbnROYW1lIGluIGhhbmRsZXJzKXtvYm9lQnVzKGV2ZW50TmFtZSkub24oc3RhdGVBZnRlcihoYW5kbGVyc1tldmVudE5hbWVdKSxsaXN0ZW5lcklkKTt9Cm9ib2VCdXMoTk9ERV9TV0FQKS5vbihmdW5jdGlvbihuZXdOb2RlKXt2YXIgb2xkSGVhZD1oZWFkKGFzY2VudCksa2V5PWtleU9mKG9sZEhlYWQpLGFuY2VzdG9ycz10YWlsKGFzY2VudCkscGFyZW50Tm9kZTtpZihhbmNlc3RvcnMpe3BhcmVudE5vZGU9bm9kZU9mKGhlYWQoYW5jZXN0b3JzKSk7cGFyZW50Tm9kZVtrZXldPW5ld05vZGU7fX0pO29ib2VCdXMoTk9ERV9EUk9QKS5vbihmdW5jdGlvbigpe3ZhciBvbGRIZWFkPWhlYWQoYXNjZW50KSxrZXk9a2V5T2Yob2xkSGVhZCksYW5jZXN0b3JzPXRhaWwoYXNjZW50KSxwYXJlbnROb2RlO2lmKGFuY2VzdG9ycyl7cGFyZW50Tm9kZT1ub2RlT2YoaGVhZChhbmNlc3RvcnMpKTtkZWxldGUgcGFyZW50Tm9kZVtrZXldO319KTtvYm9lQnVzKEFCT1JUSU5HKS5vbihmdW5jdGlvbigpe2Zvcih2YXIgZXZlbnROYW1lIGluIGhhbmRsZXJzKXtvYm9lQnVzKGV2ZW50TmFtZSkudW4obGlzdGVuZXJJZCk7fX0pO30KZnVuY3Rpb24gcGFyc2VSZXNwb25zZUhlYWRlcnMoaGVhZGVyU3RyKXt2YXIgaGVhZGVycz17fTtoZWFkZXJTdHImJmhlYWRlclN0ci5zcGxpdCgnXHUwMDBkXHUwMDBhJykuZm9yRWFjaChmdW5jdGlvbihoZWFkZXJQYWlyKXt2YXIgaW5kZXg9aGVhZGVyUGFpci5pbmRleE9mKCdcdTAwM2FcdTAwMjAnKTtoZWFkZXJzW2hlYWRlclBhaXIuc3Vic3RyaW5nKDAsaW5kZXgpXT1oZWFkZXJQYWlyLnN1YnN0cmluZyhpbmRleCsyKTt9KTtyZXR1cm4gaGVhZGVyczt9CmZ1bmN0aW9uIGlzQ3Jvc3NPcmlnaW4ocGFnZUxvY2F0aW9uLGFqYXhIb3N0KXtmdW5jdGlvbiBkZWZhdWx0UG9ydChwcm90b2NvbCl7cmV0dXJueydodHRwOic6ODAsJ2h0dHBzOic6NDQzfVtwcm90b2NvbF07fQpmdW5jdGlvbiBwb3J0T2YobG9jYXRpb24pe3JldHVybiBsb2NhdGlvbi5wb3J0fHxkZWZhdWx0UG9ydChsb2NhdGlvbi5wcm90b2NvbHx8cGFnZUxvY2F0aW9uLnByb3RvY29sKTt9CnJldHVybiEhKChhamF4SG9zdC5wcm90b2NvbCYmKGFqYXhIb3N0LnByb3RvY29sIT1wYWdlTG9jYXRpb24ucHJvdG9jb2wpKXx8KGFqYXhIb3N0Lmhvc3QmJihhamF4SG9zdC5ob3N0IT1wYWdlTG9jYXRpb24uaG9zdCkpfHwoYWpheEhvc3QuaG9zdCYmKHBvcnRPZihhamF4SG9zdCkhPXBvcnRPZihwYWdlTG9jYXRpb24pKSkpO30KZnVuY3Rpb24gcGFyc2VVcmxPcmlnaW4odXJsKXt2YXIgVVJMX0hPU1RfUEFUVEVSTj0vKFx3KzopPyg/OlwvXC8pKFtcdy4tXSspPyg/OjooXGQrKSk/XC8/Lyx1cmxIb3N0TWF0Y2g9VVJMX0hPU1RfUEFUVEVSTi5leGVjKHVybCl8fFtdO3JldHVybntwcm90b2NvbDp1cmxIb3N0TWF0Y2hbMV18fCcnLGhvc3Q6dXJsSG9zdE1hdGNoWzJdfHwnJyxwb3J0OnVybEhvc3RNYXRjaFszXXx8Jyd9O30KZnVuY3Rpb24gaHR0cFRyYW5zcG9ydCgpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3QoKTt9CmZ1bmN0aW9uIHN0cmVhbWluZ0h0dHAob2JvZUJ1cyx4aHIsbWV0aG9kLHVybCxkYXRhLGhlYWRlcnMsd2l0aENyZWRlbnRpYWxzKXsidXNlIHN0cmljdCI7dmFyIGVtaXRTdHJlYW1EYXRhPW9ib2VCdXMoU1RSRUFNX0RBVEEpLmVtaXQsZW1pdEZhaWw9b2JvZUJ1cyhGQUlMX0VWRU5UKS5lbWl0LG51bWJlck9mQ2hhcnNBbHJlYWR5R2l2ZW5Ub0NhbGxiYWNrPTAsc3RpbGxUb1NlbmRTdGFydEV2ZW50PXRydWU7b2JvZUJ1cyhBQk9SVElORykub24oZnVuY3Rpb24oKXt4aHIub25yZWFkeXN0YXRlY2hhbmdlPW51bGw7eGhyLmFib3J0KCk7fSk7ZnVuY3Rpb24gaGFuZGxlUHJvZ3Jlc3MoKXt2YXIgdGV4dFNvRmFyPXhoci5yZXNwb25zZVRleHQsbmV3VGV4dD10ZXh0U29GYXIuc3Vic3RyKG51bWJlck9mQ2hhcnNBbHJlYWR5R2l2ZW5Ub0NhbGxiYWNrKTtpZihuZXdUZXh0KXtlbWl0U3RyZWFtRGF0YShuZXdUZXh0KTt9Cm51bWJlck9mQ2hhcnNBbHJlYWR5R2l2ZW5Ub0NhbGxiYWNrPWxlbih0ZXh0U29GYXIpO30KaWYoJ29ucHJvZ3Jlc3MnaW4geGhyKXt4aHIub25wcm9ncmVzcz1oYW5kbGVQcm9ncmVzczt9Cnhoci5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBzZW5kU3RhcnRJZk5vdEFscmVhZHkoKXt0cnl7c3RpbGxUb1NlbmRTdGFydEV2ZW50JiZvYm9lQnVzKEhUVFBfU1RBUlQpLmVtaXQoeGhyLnN0YXR1cyxwYXJzZVJlc3BvbnNlSGVhZGVycyh4aHIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpKTtzdGlsbFRvU2VuZFN0YXJ0RXZlbnQ9ZmFsc2U7fWNhdGNoKGUpe319CnN3aXRjaCh4aHIucmVhZHlTdGF0ZSl7Y2FzZSAyOmNhc2UgMzpyZXR1cm4gc2VuZFN0YXJ0SWZOb3RBbHJlYWR5KCk7Y2FzZSA0OnNlbmRTdGFydElmTm90QWxyZWFkeSgpO3ZhciBzdWNjZXNzZnVsPVN0cmluZyh4aHIuc3RhdHVzKVswXT09MjtpZihzdWNjZXNzZnVsKXtoYW5kbGVQcm9ncmVzcygpO29ib2VCdXMoU1RSRUFNX0VORCkuZW1pdCgpO31lbHNle2VtaXRGYWlsKGVycm9yUmVwb3J0KHhoci5zdGF0dXMseGhyLnJlc3BvbnNlVGV4dCkpO319fTt0cnl7eGhyLm9wZW4obWV0aG9kLHVybCx0cnVlKTtmb3IodmFyIGhlYWRlck5hbWUgaW4gaGVhZGVycyl7eGhyLnNldFJlcXVlc3RIZWFkZXIoaGVhZGVyTmFtZSxoZWFkZXJzW2hlYWRlck5hbWVdKTt9CmlmKCFpc0Nyb3NzT3JpZ2luKHdpbmRvdy5sb2NhdGlvbixwYXJzZVVybE9yaWdpbih1cmwpKSl7eGhyLnNldFJlcXVlc3RIZWFkZXIoJ1gtUmVxdWVzdGVkLVdpdGgnLCdYTUxIdHRwUmVxdWVzdCcpO30KeGhyLndpdGhDcmVkZW50aWFscz13aXRoQ3JlZGVudGlhbHM7eGhyLnNlbmQoZGF0YSk7fWNhdGNoKGUpe3dpbmRvdy5zZXRUaW1lb3V0KHBhcnRpYWxDb21wbGV0ZShlbWl0RmFpbCxlcnJvclJlcG9ydCh1bmRlZmluZWQsdW5kZWZpbmVkLGUpKSwwKTt9fQp2YXIganNvblBhdGhTeW50YXg9KGZ1bmN0aW9uKCl7dmFyCnJlZ2V4RGVzY3JpcHRvcj1mdW5jdGlvbiByZWdleERlc2NyaXB0b3IocmVnZXgpe3JldHVybiByZWdleC5leGVjLmJpbmQocmVnZXgpO30sanNvblBhdGhDbGF1c2U9dmFyQXJncyhmdW5jdGlvbihjb21wb25lbnRSZWdleGVzKXtjb21wb25lbnRSZWdleGVzLnVuc2hpZnQoL14vKTtyZXR1cm4gcmVnZXhEZXNjcmlwdG9yKFJlZ0V4cChjb21wb25lbnRSZWdleGVzLm1hcChhdHRyKCdzb3VyY2UnKSkuam9pbignJykpKTt9KSxwb3NzaWJseUNhcHR1cmluZz0vKFwkPykvLG5hbWVkTm9kZT0vKFtcdy1fXSt8XCopLyxuYW1lUGxhY2Vob2xkZXI9LygpLyxub2RlSW5BcnJheU5vdGF0aW9uPS9cWyIoW14iXSspIlxdLyxudW1iZXJlZE5vZGVJbkFycmF5Tm90YXRpb249L1xbKFxkK3xcKilcXS8sZmllbGRMaXN0PS97KFtcdyBdKj8pfS8sb3B0aW9uYWxGaWVsZExpc3Q9Lyg/OnsoW1x3IF0qPyl9KT8vCixqc29uUGF0aE5hbWVkTm9kZUluT2JqZWN0Tm90YXRpb249anNvblBhdGhDbGF1c2UocG9zc2libHlDYXB0dXJpbmcsbmFtZWROb2RlLG9wdGlvbmFsRmllbGRMaXN0KSxqc29uUGF0aE5hbWVkTm9kZUluQXJyYXlOb3RhdGlvbj1qc29uUGF0aENsYXVzZShwb3NzaWJseUNhcHR1cmluZyxub2RlSW5BcnJheU5vdGF0aW9uLG9wdGlvbmFsRmllbGRMaXN0KSxqc29uUGF0aE51bWJlcmVkTm9kZUluQXJyYXlOb3RhdGlvbj1qc29uUGF0aENsYXVzZShwb3NzaWJseUNhcHR1cmluZyxudW1iZXJlZE5vZGVJbkFycmF5Tm90YXRpb24sb3B0aW9uYWxGaWVsZExpc3QpLGpzb25QYXRoUHVyZUR1Y2tUeXBpbmc9anNvblBhdGhDbGF1c2UocG9zc2libHlDYXB0dXJpbmcsbmFtZVBsYWNlaG9sZGVyLGZpZWxkTGlzdCksanNvblBhdGhEb3VibGVEb3Q9anNvblBhdGhDbGF1c2UoL1wuXC4vKSxqc29uUGF0aERvdD1qc29uUGF0aENsYXVzZSgvXC4vKSxqc29uUGF0aEJhbmc9anNvblBhdGhDbGF1c2UocG9zc2libHlDYXB0dXJpbmcsLyEvKSxlbXB0eVN0cmluZz1qc29uUGF0aENsYXVzZSgvJC8pO3JldHVybiBmdW5jdGlvbihmbil7cmV0dXJuIGZuKGxhenlVbmlvbihqc29uUGF0aE5hbWVkTm9kZUluT2JqZWN0Tm90YXRpb24sanNvblBhdGhOYW1lZE5vZGVJbkFycmF5Tm90YXRpb24sanNvblBhdGhOdW1iZXJlZE5vZGVJbkFycmF5Tm90YXRpb24sanNvblBhdGhQdXJlRHVja1R5cGluZyksanNvblBhdGhEb3VibGVEb3QsanNvblBhdGhEb3QsanNvblBhdGhCYW5nLGVtcHR5U3RyaW5nKTt9O30oKSk7ZnVuY3Rpb24gbmFtZWROb2RlKGtleSxub2RlKXtyZXR1cm57a2V5OmtleSxub2RlOm5vZGV9O30KdmFyIGtleU9mPWF0dHIoJ2tleScpO3ZhciBub2RlT2Y9YXR0cignbm9kZScpO3ZhciBST09UX1BBVEg9e307ZnVuY3Rpb24gaW5jcmVtZW50YWxDb250ZW50QnVpbGRlcihvYm9lQnVzKXt2YXIgZW1pdE5vZGVPcGVuZWQ9b2JvZUJ1cyhOT0RFX09QRU5FRCkuZW1pdCxlbWl0Tm9kZUNsb3NlZD1vYm9lQnVzKE5PREVfQ0xPU0VEKS5lbWl0LGVtaXRSb290T3BlbmVkPW9ib2VCdXMoUk9PVF9QQVRIX0ZPVU5EKS5lbWl0LGVtaXRSb290Q2xvc2VkPW9ib2VCdXMoUk9PVF9OT0RFX0ZPVU5EKS5lbWl0O2Z1bmN0aW9uIGFycmF5SW5kaWNlc0FyZUtleXMocG9zc2libHlJbmNvbnNpc3RlbnRBc2NlbnQsbmV3RGVlcGVzdE5vZGUpe3ZhciBwYXJlbnROb2RlPW5vZGVPZihoZWFkKHBvc3NpYmx5SW5jb25zaXN0ZW50QXNjZW50KSk7cmV0dXJuIGlzT2ZUeXBlKEFycmF5LHBhcmVudE5vZGUpP2tleUZvdW5kKHBvc3NpYmx5SW5jb25zaXN0ZW50QXNjZW50LGxlbihwYXJlbnROb2RlKSxuZXdEZWVwZXN0Tm9kZSk6cG9zc2libHlJbmNvbnNpc3RlbnRBc2NlbnQ7fQpmdW5jdGlvbiBub2RlT3BlbmVkKGFzY2VudCxuZXdEZWVwZXN0Tm9kZSl7aWYoIWFzY2VudCl7ZW1pdFJvb3RPcGVuZWQobmV3RGVlcGVzdE5vZGUpO3JldHVybiBrZXlGb3VuZChhc2NlbnQsUk9PVF9QQVRILG5ld0RlZXBlc3ROb2RlKTt9CnZhciBhcnJheUNvbnNpc3RlbnRBc2NlbnQ9YXJyYXlJbmRpY2VzQXJlS2V5cyhhc2NlbnQsbmV3RGVlcGVzdE5vZGUpLGFuY2VzdG9yQnJhbmNoZXM9dGFpbChhcnJheUNvbnNpc3RlbnRBc2NlbnQpLHByZXZpb3VzbHlVbm1hcHBlZE5hbWU9a2V5T2YoaGVhZChhcnJheUNvbnNpc3RlbnRBc2NlbnQpKTthcHBlbmRCdWlsdENvbnRlbnQoYW5jZXN0b3JCcmFuY2hlcyxwcmV2aW91c2x5VW5tYXBwZWROYW1lLG5ld0RlZXBlc3ROb2RlKTtyZXR1cm4gY29ucyhuYW1lZE5vZGUocHJldmlvdXNseVVubWFwcGVkTmFtZSxuZXdEZWVwZXN0Tm9kZSksYW5jZXN0b3JCcmFuY2hlcyk7fQpmdW5jdGlvbiBhcHBlbmRCdWlsdENvbnRlbnQoYW5jZXN0b3JCcmFuY2hlcyxrZXksbm9kZSl7bm9kZU9mKGhlYWQoYW5jZXN0b3JCcmFuY2hlcykpW2tleV09bm9kZTt9CmZ1bmN0aW9uIGtleUZvdW5kKGFzY2VudCxuZXdEZWVwZXN0TmFtZSxtYXliZU5ld0RlZXBlc3ROb2RlKXtpZihhc2NlbnQpe2FwcGVuZEJ1aWx0Q29udGVudChhc2NlbnQsbmV3RGVlcGVzdE5hbWUsbWF5YmVOZXdEZWVwZXN0Tm9kZSk7fQp2YXIgYXNjZW50V2l0aE5ld1BhdGg9Y29ucyhuYW1lZE5vZGUobmV3RGVlcGVzdE5hbWUsbWF5YmVOZXdEZWVwZXN0Tm9kZSksYXNjZW50KTtlbWl0Tm9kZU9wZW5lZChhc2NlbnRXaXRoTmV3UGF0aCk7cmV0dXJuIGFzY2VudFdpdGhOZXdQYXRoO30KZnVuY3Rpb24gbm9kZUNsb3NlZChhc2NlbnQpe2VtaXROb2RlQ2xvc2VkKGFzY2VudCk7cmV0dXJuIHRhaWwoYXNjZW50KXx8ZW1pdFJvb3RDbG9zZWQobm9kZU9mKGhlYWQoYXNjZW50KSkpO30KdmFyIGNvbnRlbnRCdWlsZGVySGFuZGxlcnM9e307Y29udGVudEJ1aWxkZXJIYW5kbGVyc1tTQVhfVkFMVUVfT1BFTl09bm9kZU9wZW5lZDtjb250ZW50QnVpbGRlckhhbmRsZXJzW1NBWF9WQUxVRV9DTE9TRV09bm9kZUNsb3NlZDtjb250ZW50QnVpbGRlckhhbmRsZXJzW1NBWF9LRVldPWtleUZvdW5kO3JldHVybiBjb250ZW50QnVpbGRlckhhbmRsZXJzO30KdmFyIGpzb25QYXRoQ29tcGlsZXI9anNvblBhdGhTeW50YXgoZnVuY3Rpb24ocGF0aE5vZGVTeW50YXgsZG91YmxlRG90U3ludGF4LGRvdFN5bnRheCxiYW5nU3ludGF4LGVtcHR5U3ludGF4KXt2YXIgQ0FQVFVSSU5HX0lOREVYPTE7dmFyIE5BTUVfSU5ERVg9Mjt2YXIgRklFTERfTElTVF9JTkRFWD0zO3ZhciBoZWFkS2V5PWNvbXBvc2UyKGtleU9mLGhlYWQpLGhlYWROb2RlPWNvbXBvc2UyKG5vZGVPZixoZWFkKTtmdW5jdGlvbiBuYW1lQ2xhdXNlKHByZXZpb3VzRXhwcixkZXRlY3Rpb24pe3ZhciBuYW1lPWRldGVjdGlvbltOQU1FX0lOREVYXSxtYXRjaGVzTmFtZT0oIW5hbWV8fG5hbWU9PScqJyk/YWx3YXlzOmZ1bmN0aW9uKGFzY2VudCl7cmV0dXJuIGhlYWRLZXkoYXNjZW50KT09bmFtZX07cmV0dXJuIGxhenlJbnRlcnNlY3Rpb24obWF0Y2hlc05hbWUscHJldmlvdXNFeHByKTt9CmZ1bmN0aW9uIGR1Y2tUeXBlQ2xhdXNlKHByZXZpb3VzRXhwcixkZXRlY3Rpb24pe3ZhciBmaWVsZExpc3RTdHI9ZGV0ZWN0aW9uW0ZJRUxEX0xJU1RfSU5ERVhdO2lmKCFmaWVsZExpc3RTdHIpCnJldHVybiBwcmV2aW91c0V4cHI7dmFyIGhhc0FsbHJlcXVpcmVkRmllbGRzPXBhcnRpYWxDb21wbGV0ZShoYXNBbGxQcm9wZXJ0aWVzLGFycmF5QXNMaXN0KGZpZWxkTGlzdFN0ci5zcGxpdCgvXFcrLykpKSxpc01hdGNoPWNvbXBvc2UyKGhhc0FsbHJlcXVpcmVkRmllbGRzLGhlYWROb2RlKTtyZXR1cm4gbGF6eUludGVyc2VjdGlvbihpc01hdGNoLHByZXZpb3VzRXhwcik7fQpmdW5jdGlvbiBjYXB0dXJlKHByZXZpb3VzRXhwcixkZXRlY3Rpb24pe3ZhciBjYXB0dXJpbmc9ISFkZXRlY3Rpb25bQ0FQVFVSSU5HX0lOREVYXTtpZighY2FwdHVyaW5nKQpyZXR1cm4gcHJldmlvdXNFeHByO3JldHVybiBsYXp5SW50ZXJzZWN0aW9uKHByZXZpb3VzRXhwcixoZWFkKTt9CmZ1bmN0aW9uIHNraXAxKHByZXZpb3VzRXhwcil7aWYocHJldmlvdXNFeHByPT1hbHdheXMpe3JldHVybiBhbHdheXM7fQpmdW5jdGlvbiBub3RBdFJvb3QoYXNjZW50KXtyZXR1cm4gaGVhZEtleShhc2NlbnQpIT1ST09UX1BBVEg7fQpyZXR1cm4gbGF6eUludGVyc2VjdGlvbihub3RBdFJvb3QsY29tcG9zZTIocHJldmlvdXNFeHByLHRhaWwpKTt9CmZ1bmN0aW9uIHNraXBNYW55KHByZXZpb3VzRXhwcil7aWYocHJldmlvdXNFeHByPT1hbHdheXMpe3JldHVybiBhbHdheXM7fQp2YXIKdGVybWluYWxDYXNlV2hlbkFycml2aW5nQXRSb290PXJvb3RFeHByKCksdGVybWluYWxDYXNlV2hlblByZXZpb3VzRXhwcmVzc2lvbklzU2F0aXNmaWVkPXByZXZpb3VzRXhwcixyZWN1cnNpdmVDYXNlPXNraXAxKGZ1bmN0aW9uKGFzY2VudCl7cmV0dXJuIGNhc2VzKGFzY2VudCk7fSksY2FzZXM9bGF6eVVuaW9uKHRlcm1pbmFsQ2FzZVdoZW5BcnJpdmluZ0F0Um9vdCx0ZXJtaW5hbENhc2VXaGVuUHJldmlvdXNFeHByZXNzaW9uSXNTYXRpc2ZpZWQscmVjdXJzaXZlQ2FzZSk7cmV0dXJuIGNhc2VzO30KZnVuY3Rpb24gcm9vdEV4cHIoKXtyZXR1cm4gZnVuY3Rpb24oYXNjZW50KXtyZXR1cm4gaGVhZEtleShhc2NlbnQpPT1ST09UX1BBVEg7fTt9CmZ1bmN0aW9uIHN0YXRlbWVudEV4cHIobGFzdENsYXVzZSl7cmV0dXJuIGZ1bmN0aW9uKGFzY2VudCl7dmFyIGV4cHJNYXRjaD1sYXN0Q2xhdXNlKGFzY2VudCk7cmV0dXJuIGV4cHJNYXRjaD09PXRydWU/aGVhZChhc2NlbnQpOmV4cHJNYXRjaDt9O30KZnVuY3Rpb24gZXhwcmVzc2lvbnNSZWFkZXIoZXhwcnMscGFyc2VyR2VuZXJhdGVkU29GYXIsZGV0ZWN0aW9uKXtyZXR1cm4gZm9sZFIoZnVuY3Rpb24ocGFyc2VyR2VuZXJhdGVkU29GYXIsZXhwcil7cmV0dXJuIGV4cHIocGFyc2VyR2VuZXJhdGVkU29GYXIsZGV0ZWN0aW9uKTt9LHBhcnNlckdlbmVyYXRlZFNvRmFyLGV4cHJzKTt9CmZ1bmN0aW9uIGdlbmVyYXRlQ2xhdXNlUmVhZGVySWZUb2tlbkZvdW5kKHRva2VuRGV0ZWN0b3IsY2xhdXNlRXZhbHVhdG9yR2VuZXJhdG9ycyxqc29uUGF0aCxwYXJzZXJHZW5lcmF0ZWRTb0ZhcixvblN1Y2Nlc3Mpe3ZhciBkZXRlY3RlZD10b2tlbkRldGVjdG9yKGpzb25QYXRoKTtpZihkZXRlY3RlZCl7dmFyIGNvbXBpbGVkUGFyc2VyPWV4cHJlc3Npb25zUmVhZGVyKGNsYXVzZUV2YWx1YXRvckdlbmVyYXRvcnMscGFyc2VyR2VuZXJhdGVkU29GYXIsZGV0ZWN0ZWQpLHJlbWFpbmluZ1VucGFyc2VkSnNvblBhdGg9anNvblBhdGguc3Vic3RyKGxlbihkZXRlY3RlZFswXSkpO3JldHVybiBvblN1Y2Nlc3MocmVtYWluaW5nVW5wYXJzZWRKc29uUGF0aCxjb21waWxlZFBhcnNlcik7fX0KZnVuY3Rpb24gY2xhdXNlTWF0Y2hlcih0b2tlbkRldGVjdG9yLGV4cHJzKXtyZXR1cm4gcGFydGlhbENvbXBsZXRlKGdlbmVyYXRlQ2xhdXNlUmVhZGVySWZUb2tlbkZvdW5kLHRva2VuRGV0ZWN0b3IsZXhwcnMpO30KdmFyIGNsYXVzZUZvckpzb25QYXRoPWxhenlVbmlvbihjbGF1c2VNYXRjaGVyKHBhdGhOb2RlU3ludGF4LGxpc3QoY2FwdHVyZSxkdWNrVHlwZUNsYXVzZSxuYW1lQ2xhdXNlLHNraXAxKSksY2xhdXNlTWF0Y2hlcihkb3VibGVEb3RTeW50YXgsbGlzdChza2lwTWFueSkpLGNsYXVzZU1hdGNoZXIoZG90U3ludGF4LGxpc3QoKSksY2xhdXNlTWF0Y2hlcihiYW5nU3ludGF4LGxpc3QoY2FwdHVyZSxyb290RXhwcikpLGNsYXVzZU1hdGNoZXIoZW1wdHlTeW50YXgsbGlzdChzdGF0ZW1lbnRFeHByKSksZnVuY3Rpb24oanNvblBhdGgpe3Rocm93IEVycm9yKCciJytqc29uUGF0aCsnIiBjb3VsZCBub3QgYmUgdG9rZW5pc2VkJyl9KTtmdW5jdGlvbiByZXR1cm5Gb3VuZFBhcnNlcihfcmVtYWluaW5nSnNvblBhdGgsY29tcGlsZWRQYXJzZXIpe3JldHVybiBjb21waWxlZFBhcnNlcn0KZnVuY3Rpb24gY29tcGlsZUpzb25QYXRoVG9GdW5jdGlvbih1bmNvbXBpbGVkSnNvblBhdGgscGFyc2VyR2VuZXJhdGVkU29GYXIpe3ZhciBvbkZpbmQ9dW5jb21waWxlZEpzb25QYXRoP2NvbXBpbGVKc29uUGF0aFRvRnVuY3Rpb246cmV0dXJuRm91bmRQYXJzZXI7cmV0dXJuIGNsYXVzZUZvckpzb25QYXRoKHVuY29tcGlsZWRKc29uUGF0aCxwYXJzZXJHZW5lcmF0ZWRTb0ZhcixvbkZpbmQpO30KcmV0dXJuIGZ1bmN0aW9uKGpzb25QYXRoKXt0cnl7cmV0dXJuIGNvbXBpbGVKc29uUGF0aFRvRnVuY3Rpb24oanNvblBhdGgsYWx3YXlzKTt9Y2F0Y2goZSl7dGhyb3cgRXJyb3IoJ0NvdWxkIG5vdCBjb21waWxlICInK2pzb25QYXRoKyciIGJlY2F1c2UgJytlLm1lc3NhZ2UpO319fSk7ZnVuY3Rpb24gc2luZ2xlRXZlbnRQdWJTdWIoZXZlbnRUeXBlLG5ld0xpc3RlbmVyLHJlbW92ZUxpc3RlbmVyKXt2YXIgbGlzdGVuZXJUdXBsZUxpc3QsbGlzdGVuZXJMaXN0O2Z1bmN0aW9uIGhhc0lkKGlkKXtyZXR1cm4gZnVuY3Rpb24odHVwbGUpe3JldHVybiB0dXBsZS5pZD09aWQ7fTt9CnJldHVybntvbjpmdW5jdGlvbihsaXN0ZW5lcixsaXN0ZW5lcklkKXt2YXIgdHVwbGU9e2xpc3RlbmVyOmxpc3RlbmVyLGlkOmxpc3RlbmVySWR8fGxpc3RlbmVyfTtpZihuZXdMaXN0ZW5lcil7bmV3TGlzdGVuZXIuZW1pdChldmVudFR5cGUsbGlzdGVuZXIsdHVwbGUuaWQpO30KbGlzdGVuZXJUdXBsZUxpc3Q9Y29ucyh0dXBsZSxsaXN0ZW5lclR1cGxlTGlzdCk7bGlzdGVuZXJMaXN0PWNvbnMobGlzdGVuZXIsbGlzdGVuZXJMaXN0KTtyZXR1cm4gdGhpczt9LGVtaXQ6ZnVuY3Rpb24oKXthcHBseUVhY2gobGlzdGVuZXJMaXN0LGFyZ3VtZW50cyk7fSx1bjpmdW5jdGlvbihsaXN0ZW5lcklkKXt2YXIgcmVtb3ZlZDtsaXN0ZW5lclR1cGxlTGlzdD13aXRob3V0KGxpc3RlbmVyVHVwbGVMaXN0LGhhc0lkKGxpc3RlbmVySWQpLGZ1bmN0aW9uKHR1cGxlKXtyZW1vdmVkPXR1cGxlO30pO2lmKHJlbW92ZWQpe2xpc3RlbmVyTGlzdD13aXRob3V0KGxpc3RlbmVyTGlzdCxmdW5jdGlvbihsaXN0ZW5lcil7cmV0dXJuIGxpc3RlbmVyPT1yZW1vdmVkLmxpc3RlbmVyO30pO2lmKHJlbW92ZUxpc3RlbmVyKXtyZW1vdmVMaXN0ZW5lci5lbWl0KGV2ZW50VHlwZSxyZW1vdmVkLmxpc3RlbmVyLHJlbW92ZWQuaWQpO319fSxsaXN0ZW5lcnM6ZnVuY3Rpb24oKXtyZXR1cm4gbGlzdGVuZXJMaXN0O30saGFzTGlzdGVuZXI6ZnVuY3Rpb24obGlzdGVuZXJJZCl7dmFyIHRlc3Q9bGlzdGVuZXJJZD9oYXNJZChsaXN0ZW5lcklkKTphbHdheXM7cmV0dXJuIGRlZmluZWQoZmlyc3QodGVzdCxsaXN0ZW5lclR1cGxlTGlzdCkpO319O30KZnVuY3Rpb24gcHViU3ViKCl7dmFyIHNpbmdsZXM9e30sbmV3TGlzdGVuZXI9bmV3U2luZ2xlKCduZXdMaXN0ZW5lcicpLHJlbW92ZUxpc3RlbmVyPW5ld1NpbmdsZSgncmVtb3ZlTGlzdGVuZXInKTtmdW5jdGlvbiBuZXdTaW5nbGUoZXZlbnROYW1lKXtyZXR1cm4gc2luZ2xlc1tldmVudE5hbWVdPXNpbmdsZUV2ZW50UHViU3ViKGV2ZW50TmFtZSxuZXdMaXN0ZW5lcixyZW1vdmVMaXN0ZW5lcik7fQpmdW5jdGlvbiBwdWJTdWJJbnN0YW5jZShldmVudE5hbWUpe3JldHVybiBzaW5nbGVzW2V2ZW50TmFtZV18fG5ld1NpbmdsZShldmVudE5hbWUpO30KWydlbWl0Jywnb24nLCd1biddLmZvckVhY2goZnVuY3Rpb24obWV0aG9kTmFtZSl7cHViU3ViSW5zdGFuY2VbbWV0aG9kTmFtZV09dmFyQXJncyhmdW5jdGlvbihldmVudE5hbWUscGFyYW1ldGVycyl7YXBwbHkocGFyYW1ldGVycyxwdWJTdWJJbnN0YW5jZShldmVudE5hbWUpW21ldGhvZE5hbWVdKTt9KTt9KTtyZXR1cm4gcHViU3ViSW5zdGFuY2U7fQp2YXIKX1M9MSxOT0RFX09QRU5FRD1fUysrLE5PREVfQ0xPU0VEPV9TKyssTk9ERV9TV0FQPV9TKyssTk9ERV9EUk9QPV9TKyssRkFJTF9FVkVOVD0nZmFpbCcsUk9PVF9OT0RFX0ZPVU5EPV9TKyssUk9PVF9QQVRIX0ZPVU5EPV9TKyssSFRUUF9TVEFSVD0nc3RhcnQnLFNUUkVBTV9EQVRBPSdkYXRhJyxTVFJFQU1fRU5EPSdlbmQnLEFCT1JUSU5HPV9TKyssU0FYX0tFWT1fUysrLFNBWF9WQUxVRV9PUEVOPV9TKyssU0FYX1ZBTFVFX0NMT1NFPV9TKys7ZnVuY3Rpb24gZXJyb3JSZXBvcnQoc3RhdHVzQ29kZSxib2R5LGVycm9yKXt0cnl7dmFyIGpzb25Cb2R5PUpTT04ucGFyc2UoYm9keSk7fWNhdGNoKGUpe30KcmV0dXJue3N0YXR1c0NvZGU6c3RhdHVzQ29kZSxib2R5OmJvZHksanNvbkJvZHk6anNvbkJvZHksdGhyb3duOmVycm9yfTt9CmZ1bmN0aW9uIHBhdHRlcm5BZGFwdGVyKG9ib2VCdXMsanNvblBhdGhDb21waWxlcil7dmFyIHByZWRpY2F0ZUV2ZW50TWFwPXtub2RlOm9ib2VCdXMoTk9ERV9DTE9TRUQpLHBhdGg6b2JvZUJ1cyhOT0RFX09QRU5FRCl9O2Z1bmN0aW9uIGVtaXRNYXRjaGluZ05vZGUoZW1pdE1hdGNoLG5vZGUsYXNjZW50KXt2YXIgZGVzY2VudD1yZXZlcnNlTGlzdChhc2NlbnQpO2VtaXRNYXRjaChub2RlLGxpc3RBc0FycmF5KHRhaWwobWFwKGtleU9mLGRlc2NlbnQpKSksbGlzdEFzQXJyYXkobWFwKG5vZGVPZixkZXNjZW50KSkpO30KZnVuY3Rpb24gYWRkVW5kZXJseWluZ0xpc3RlbmVyKGZ1bGxFdmVudE5hbWUscHJlZGljYXRlRXZlbnQsY29tcGlsZWRKc29uUGF0aCl7dmFyIGVtaXRNYXRjaD1vYm9lQnVzKGZ1bGxFdmVudE5hbWUpLmVtaXQ7cHJlZGljYXRlRXZlbnQub24oZnVuY3Rpb24oYXNjZW50KXt2YXIgbWF5YmVNYXRjaGluZ01hcHBpbmc9Y29tcGlsZWRKc29uUGF0aChhc2NlbnQpO2lmKG1heWJlTWF0Y2hpbmdNYXBwaW5nIT09ZmFsc2Upe2VtaXRNYXRjaGluZ05vZGUoZW1pdE1hdGNoLG5vZGVPZihtYXliZU1hdGNoaW5nTWFwcGluZyksYXNjZW50KTt9fSxmdWxsRXZlbnROYW1lKTtvYm9lQnVzKCdyZW1vdmVMaXN0ZW5lcicpLm9uKGZ1bmN0aW9uKHJlbW92ZWRFdmVudE5hbWUpe2lmKHJlbW92ZWRFdmVudE5hbWU9PWZ1bGxFdmVudE5hbWUpe2lmKCFvYm9lQnVzKHJlbW92ZWRFdmVudE5hbWUpLmxpc3RlbmVycygpKXtwcmVkaWNhdGVFdmVudC51bihmdWxsRXZlbnROYW1lKTt9fX0pO30Kb2JvZUJ1cygnbmV3TGlzdGVuZXInKS5vbihmdW5jdGlvbihmdWxsRXZlbnROYW1lKXt2YXIgbWF0Y2g9Lyhub2RlfHBhdGgpOiguKikvLmV4ZWMoZnVsbEV2ZW50TmFtZSk7aWYobWF0Y2gpe3ZhciBwcmVkaWNhdGVFdmVudD1wcmVkaWNhdGVFdmVudE1hcFttYXRjaFsxXV07aWYoIXByZWRpY2F0ZUV2ZW50Lmhhc0xpc3RlbmVyKGZ1bGxFdmVudE5hbWUpKXthZGRVbmRlcmx5aW5nTGlzdGVuZXIoZnVsbEV2ZW50TmFtZSxwcmVkaWNhdGVFdmVudCxqc29uUGF0aENvbXBpbGVyKG1hdGNoWzJdKSk7fX19KX0KZnVuY3Rpb24gaW5zdGFuY2VBcGkob2JvZUJ1cyxjb250ZW50U291cmNlKXt2YXIgb2JvZUFwaSxmdWxseVF1YWxpZmllZE5hbWVQYXR0ZXJuPS9eKG5vZGV8cGF0aCk6Li8scm9vdE5vZGVGaW5pc2hlZEV2ZW50PW9ib2VCdXMoUk9PVF9OT0RFX0ZPVU5EKSxlbWl0Tm9kZURyb3A9b2JvZUJ1cyhOT0RFX0RST1ApLmVtaXQsZW1pdE5vZGVTd2FwPW9ib2VCdXMoTk9ERV9TV0FQKS5lbWl0LGFkZExpc3RlbmVyPXZhckFyZ3MoZnVuY3Rpb24oZXZlbnRJZCxwYXJhbWV0ZXJzKXtpZihvYm9lQXBpW2V2ZW50SWRdKXthcHBseShwYXJhbWV0ZXJzLG9ib2VBcGlbZXZlbnRJZF0pO31lbHNle3ZhciBldmVudD1vYm9lQnVzKGV2ZW50SWQpLGxpc3RlbmVyPXBhcmFtZXRlcnNbMF07aWYoZnVsbHlRdWFsaWZpZWROYW1lUGF0dGVybi50ZXN0KGV2ZW50SWQpKXthZGRGb3JnZXR0YWJsZUNhbGxiYWNrKGV2ZW50LGxpc3RlbmVyKTt9ZWxzZXtldmVudC5vbihsaXN0ZW5lcik7fX0KcmV0dXJuIG9ib2VBcGk7fSkscmVtb3ZlTGlzdGVuZXI9ZnVuY3Rpb24oZXZlbnRJZCxwMixwMyl7aWYoZXZlbnRJZD09J2RvbmUnKXtyb290Tm9kZUZpbmlzaGVkRXZlbnQudW4ocDIpO31lbHNlIGlmKGV2ZW50SWQ9PSdub2RlJ3x8ZXZlbnRJZD09J3BhdGgnKXtvYm9lQnVzLnVuKGV2ZW50SWQrJzonK3AyLHAzKTt9ZWxzZXt2YXIgbGlzdGVuZXI9cDI7b2JvZUJ1cyhldmVudElkKS51bihsaXN0ZW5lcik7fQpyZXR1cm4gb2JvZUFwaTt9O2Z1bmN0aW9uIGFkZFByb3RlY3RlZENhbGxiYWNrKGV2ZW50TmFtZSxjYWxsYmFjayl7b2JvZUJ1cyhldmVudE5hbWUpLm9uKHByb3RlY3RlZENhbGxiYWNrKGNhbGxiYWNrKSxjYWxsYmFjayk7cmV0dXJuIG9ib2VBcGk7fQpmdW5jdGlvbiBhZGRGb3JnZXR0YWJsZUNhbGxiYWNrKGV2ZW50LGNhbGxiYWNrLGxpc3RlbmVySWQpe2xpc3RlbmVySWQ9bGlzdGVuZXJJZHx8Y2FsbGJhY2s7dmFyIHNhZmVDYWxsYmFjaz1wcm90ZWN0ZWRDYWxsYmFjayhjYWxsYmFjayk7ZXZlbnQub24oZnVuY3Rpb24oKXt2YXIgZGlzY2FyZD1mYWxzZTtvYm9lQXBpLmZvcmdldD1mdW5jdGlvbigpe2Rpc2NhcmQ9dHJ1ZTt9O2FwcGx5KGFyZ3VtZW50cyxzYWZlQ2FsbGJhY2spO2RlbGV0ZSBvYm9lQXBpLmZvcmdldDtpZihkaXNjYXJkKXtldmVudC51bihsaXN0ZW5lcklkKTt9fSxsaXN0ZW5lcklkKTtyZXR1cm4gb2JvZUFwaTt9CmZ1bmN0aW9uIHByb3RlY3RlZENhbGxiYWNrKGNhbGxiYWNrKXtyZXR1cm4gZnVuY3Rpb24oKXt0cnl7cmV0dXJuIGNhbGxiYWNrLmFwcGx5KG9ib2VBcGksYXJndW1lbnRzKTt9Y2F0Y2goZSl7c2V0VGltZW91dChmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcihlLm1lc3NhZ2UpO30pO319fQpmdW5jdGlvbiBmdWxseVF1YWxpZmllZFBhdHRlcm5NYXRjaEV2ZW50KHR5cGUscGF0dGVybil7cmV0dXJuIG9ib2VCdXModHlwZSsnOicrcGF0dGVybik7fQpmdW5jdGlvbiB3cmFwQ2FsbGJhY2tUb1N3YXBOb2RlSWZTb21ldGhpbmdSZXR1cm5lZChjYWxsYmFjayl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHJldHVyblZhbHVlRnJvbUNhbGxiYWNrPWNhbGxiYWNrLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtpZihkZWZpbmVkKHJldHVyblZhbHVlRnJvbUNhbGxiYWNrKSl7aWYocmV0dXJuVmFsdWVGcm9tQ2FsbGJhY2s9PW9ib2UuZHJvcCl7ZW1pdE5vZGVEcm9wKCk7fWVsc2V7ZW1pdE5vZGVTd2FwKHJldHVyblZhbHVlRnJvbUNhbGxiYWNrKTt9fX19CmZ1bmN0aW9uIGFkZFNpbmdsZU5vZGVPclBhdGhMaXN0ZW5lcihldmVudElkLHBhdHRlcm4sY2FsbGJhY2spe3ZhciBlZmZlY3RpdmVDYWxsYmFjaztpZihldmVudElkPT0nbm9kZScpe2VmZmVjdGl2ZUNhbGxiYWNrPXdyYXBDYWxsYmFja1RvU3dhcE5vZGVJZlNvbWV0aGluZ1JldHVybmVkKGNhbGxiYWNrKTt9ZWxzZXtlZmZlY3RpdmVDYWxsYmFjaz1jYWxsYmFjazt9CmFkZEZvcmdldHRhYmxlQ2FsbGJhY2soZnVsbHlRdWFsaWZpZWRQYXR0ZXJuTWF0Y2hFdmVudChldmVudElkLHBhdHRlcm4pLGVmZmVjdGl2ZUNhbGxiYWNrLGNhbGxiYWNrKTt9CmZ1bmN0aW9uIGFkZE11bHRpcGxlTm9kZU9yUGF0aExpc3RlbmVycyhldmVudElkLGxpc3RlbmVyTWFwKXtmb3IodmFyIHBhdHRlcm4gaW4gbGlzdGVuZXJNYXApe2FkZFNpbmdsZU5vZGVPclBhdGhMaXN0ZW5lcihldmVudElkLHBhdHRlcm4sbGlzdGVuZXJNYXBbcGF0dGVybl0pO319CmZ1bmN0aW9uIGFkZE5vZGVPclBhdGhMaXN0ZW5lckFwaShldmVudElkLGpzb25QYXRoT3JMaXN0ZW5lck1hcCxjYWxsYmFjayl7aWYoaXNTdHJpbmcoanNvblBhdGhPckxpc3RlbmVyTWFwKSl7YWRkU2luZ2xlTm9kZU9yUGF0aExpc3RlbmVyKGV2ZW50SWQsanNvblBhdGhPckxpc3RlbmVyTWFwLGNhbGxiYWNrKTt9ZWxzZXthZGRNdWx0aXBsZU5vZGVPclBhdGhMaXN0ZW5lcnMoZXZlbnRJZCxqc29uUGF0aE9yTGlzdGVuZXJNYXApO30KcmV0dXJuIG9ib2VBcGk7fQpvYm9lQnVzKFJPT1RfUEFUSF9GT1VORCkub24oZnVuY3Rpb24ocm9vdE5vZGUpe29ib2VBcGkucm9vdD1mdW5jdG9yKHJvb3ROb2RlKTt9KTtvYm9lQnVzKEhUVFBfU1RBUlQpLm9uKGZ1bmN0aW9uKF9zdGF0dXNDb2RlLGhlYWRlcnMpe29ib2VBcGkuaGVhZGVyPWZ1bmN0aW9uKG5hbWUpe3JldHVybiBuYW1lP2hlYWRlcnNbbmFtZV06aGVhZGVyczt9fSk7cmV0dXJuIG9ib2VBcGk9e29uOmFkZExpc3RlbmVyLGFkZExpc3RlbmVyOmFkZExpc3RlbmVyLHJlbW92ZUxpc3RlbmVyOnJlbW92ZUxpc3RlbmVyLGVtaXQ6b2JvZUJ1cy5lbWl0LG5vZGU6cGFydGlhbENvbXBsZXRlKGFkZE5vZGVPclBhdGhMaXN0ZW5lckFwaSwnbm9kZScpLHBhdGg6cGFydGlhbENvbXBsZXRlKGFkZE5vZGVPclBhdGhMaXN0ZW5lckFwaSwncGF0aCcpLGRvbmU6cGFydGlhbENvbXBsZXRlKGFkZEZvcmdldHRhYmxlQ2FsbGJhY2sscm9vdE5vZGVGaW5pc2hlZEV2ZW50KSxzdGFydDpwYXJ0aWFsQ29tcGxldGUoYWRkUHJvdGVjdGVkQ2FsbGJhY2ssSFRUUF9TVEFSVCksZmFpbDpvYm9lQnVzKEZBSUxfRVZFTlQpLm9uLGFib3J0Om9ib2VCdXMoQUJPUlRJTkcpLmVtaXQsd3JpdGU6b2JvZUJ1cyhTVFJFQU1fREFUQSkuZW1pdCxmaW5pc2g6b2JvZUJ1cyhTVFJFQU1fRU5EKS5lbWl0LGhlYWRlcjpub29wLHJvb3Q6bm9vcCxzb3VyY2U6Y29udGVudFNvdXJjZX07fQpmdW5jdGlvbiB3aXJlKGh0dHBNZXRob2ROYW1lLGNvbnRlbnRTb3VyY2UsYm9keSxoZWFkZXJzLHdpdGhDcmVkZW50aWFscyl7dmFyIG9ib2VCdXM9cHViU3ViKCk7aWYoY29udGVudFNvdXJjZSl7c3RyZWFtaW5nSHR0cChvYm9lQnVzLGh0dHBUcmFuc3BvcnQoKSxodHRwTWV0aG9kTmFtZSxjb250ZW50U291cmNlLGJvZHksaGVhZGVycyx3aXRoQ3JlZGVudGlhbHMpO30KY2xhcmluZXQob2JvZUJ1cyk7YXNjZW50TWFuYWdlcihvYm9lQnVzLGluY3JlbWVudGFsQ29udGVudEJ1aWxkZXIob2JvZUJ1cykpO3BhdHRlcm5BZGFwdGVyKG9ib2VCdXMsanNvblBhdGhDb21waWxlcik7cmV0dXJuIGluc3RhbmNlQXBpKG9ib2VCdXMsY29udGVudFNvdXJjZSk7fQpmdW5jdGlvbiBhcHBseURlZmF1bHRzKHBhc3N0aHJvdWdoLHVybCxodHRwTWV0aG9kTmFtZSxib2R5LGhlYWRlcnMsd2l0aENyZWRlbnRpYWxzLGNhY2hlZCl7aGVhZGVycz1oZWFkZXJzP0pTT04ucGFyc2UoSlNPTi5zdHJpbmdpZnkoaGVhZGVycykpOnt9O2lmKGJvZHkpe2lmKCFpc1N0cmluZyhib2R5KSl7Ym9keT1KU09OLnN0cmluZ2lmeShib2R5KTtoZWFkZXJzWydDb250ZW50LVR5cGUnXT1oZWFkZXJzWydDb250ZW50LVR5cGUnXXx8J2FwcGxpY2F0aW9uL2pzb24nO319ZWxzZXtib2R5PW51bGw7fQpmdW5jdGlvbiBtb2RpZmllZFVybChiYXNlVXJsLGNhY2hlZCl7aWYoY2FjaGVkPT09ZmFsc2Upe2lmKGJhc2VVcmwuaW5kZXhPZignPycpPT0tMSl7YmFzZVVybCs9Jz8nO31lbHNle2Jhc2VVcmwrPScmJzt9CmJhc2VVcmwrPSdfPScrbmV3IERhdGUoKS5nZXRUaW1lKCk7fQpyZXR1cm4gYmFzZVVybDt9CnJldHVybiBwYXNzdGhyb3VnaChodHRwTWV0aG9kTmFtZXx8J0dFVCcsbW9kaWZpZWRVcmwodXJsLGNhY2hlZCksYm9keSxoZWFkZXJzLHdpdGhDcmVkZW50aWFsc3x8ZmFsc2UpO30KZnVuY3Rpb24gb2JvZShhcmcxKXt2YXIgbm9kZVN0cmVhbU1ldGhvZE5hbWVzPWxpc3QoJ3Jlc3VtZScsJ3BhdXNlJywncGlwZScpLGlzU3RyZWFtPXBhcnRpYWxDb21wbGV0ZShoYXNBbGxQcm9wZXJ0aWVzLG5vZGVTdHJlYW1NZXRob2ROYW1lcyk7aWYoYXJnMSl7aWYoaXNTdHJlYW0oYXJnMSl8fGlzU3RyaW5nKGFyZzEpKXtyZXR1cm4gYXBwbHlEZWZhdWx0cyh3aXJlLGFyZzEpO31lbHNle3JldHVybiBhcHBseURlZmF1bHRzKHdpcmUsYXJnMS51cmwsYXJnMS5tZXRob2QsYXJnMS5ib2R5LGFyZzEuaGVhZGVycyxhcmcxLndpdGhDcmVkZW50aWFscyxhcmcxLmNhY2hlZCk7fX1lbHNle3JldHVybiB3aXJlKCk7fX0Kb2JvZS5kcm9wPWZ1bmN0aW9uKCl7cmV0dXJuIG9ib2UuZHJvcDt9O2lmKHR5cGVvZiBkZWZpbmU9PT0iZnVuY3Rpb24iJiZkZWZpbmUuYW1kKXtkZWZpbmUoIm9ib2UiLFtdLGZ1bmN0aW9uKCl7cmV0dXJuIG9ib2U7fSk7fWVsc2UgaWYodHlwZW9mIGV4cG9ydHM9PT0nb2JqZWN0Jyl7bW9kdWxlLmV4cG9ydHM9b2JvZTt9ZWxzZXt3aW5kb3cub2JvZT1vYm9lO319KSgoZnVuY3Rpb24oKXt0cnl7cmV0dXJuIHdpbmRvdzt9Y2F0Y2goZSl7cmV0dXJuIHNlbGY7fX0oKSksT2JqZWN0LEFycmF5LEVycm9yLEpTT04pOyd1c2Ugc3RyaWN0JztpZih0ci5pc1Zpbm4pe2dsb2JhbC5vYm9lPWdsb2JhbC53aW5kb3cub2JvZTtnbG9iYWwud2luZG93PXVuZGVmaW5lZDt9ZWxzZSBpZih0ci5pc05vZGUpe2dsb2JhbC53aW5kb3c9dW5kZWZpbmVkO2NvbnN0IHBhdGg9SFRNTEltcG9ydHNMb2FkZXIuaHJlZlRvQWJzb2x1dGVQYXRoKCcvb2JvZS9kaXN0L29ib2Utbm9kZS5qcycpO2dsb2JhbC5vYm9lPXJlcXVpcmUocGF0aCk7fSd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBTVFJJTkdfSURfU1VGRklYPSdfc2lkJztjb25zdCBQTFVSQUxfU1RSSU5HX0lEX1NVRkZJWD0nX3NpZHMnO2Z1bmN0aW9uIGlzU3RyaW5nUmVmZXJlbmNlKHMpe3JldHVybiBzLmVuZHNXaXRoKFNUUklOR19JRF9TVUZGSVgpfHxzLmVuZHNXaXRoKFBMVVJBTF9TVFJJTkdfSURfU1VGRklYKTt9CmZ1bmN0aW9uIGdldFN0cmluZ1JlZmVyZW5jZU5hbWUobmFtZSl7aWYobmFtZS5lbmRzV2l0aChQTFVSQUxfU1RSSU5HX0lEX1NVRkZJWCkpe3JldHVybiBuYW1lLnNsaWNlKDAsLVBMVVJBTF9TVFJJTkdfSURfU1VGRklYLmxlbmd0aCk7fQpyZXR1cm4gbmFtZS5zbGljZSgwLC1TVFJJTkdfSURfU1VGRklYLmxlbmd0aCk7fQpmdW5jdGlvbiBkZWZlcmVuY2VTdHJpbmdzKGlkVG9TdHJpbmcsbyl7Y29uc3QgY2xvbmU9T2JqZWN0LmFzc2lnbih7fSxvKTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGNsb25lKSl7aWYoaXNTdHJpbmdSZWZlcmVuY2Uoa2V5KSl7Y29uc3QgbmFtZT1nZXRTdHJpbmdSZWZlcmVuY2VOYW1lKGtleSk7Y2xvbmVbbmFtZV09aWRUb1N0cmluZyh2YWx1ZSk7fX0KcmV0dXJuIGNsb25lO30KZnVuY3Rpb24gc2luZ3VsYXJpemUod29yZCl7aWYod29yZC5lbmRzV2l0aCgncycpKXtyZXR1cm4gd29yZC5zbGljZSgwLC0xKTt9CnJldHVybiB3b3JkO30KZnVuY3Rpb24gZ2V0TWV0YWRhdGFQYWlycyhkYXRhSnNvbil7Y29uc3QgaXNNZXRhZGF0YT12PT50eXBlb2YgdiE9PSdvYmplY3QnfHxBcnJheS5pc0FycmF5KHYpO2NvbnN0IHBhaXJzPU9iamVjdC5lbnRyaWVzKGRhdGFKc29uKTtjb25zdCBtZXRhZGF0YVBhaXJzPXBhaXJzLmZpbHRlcigoW18sdl0pPT5pc01ldGFkYXRhKHYpKTtyZXR1cm4gbWV0YWRhdGFQYWlyczt9CmZ1bmN0aW9uIGdldEdyb3VwUGFpcnMoZGF0YUpzb24pe2NvbnN0IHBhaXJzPU9iamVjdC5lbnRyaWVzKGRhdGFKc29uKTtjb25zdCBub25NYXBQYWlycz1wYWlycy5maWx0ZXIoKFtrLF9dKT0+ayE9PSdtYXBzJyk7Y29uc3QgZ3JvdXBQYWlycz1ub25NYXBQYWlycy5maWx0ZXIoKFtfLHZdKT0+dHlwZW9mIHY9PT0nb2JqZWN0Jyk7cmV0dXJuIGdyb3VwUGFpcnM7fQpmdW5jdGlvbiBjcmVhdGVNYXAobWFwSnNvbil7Y29uc3QgbWFwPW5ldyBNYXAoKTtmb3IoY29uc3QgZW50cnkgb2YgbWFwSnNvbil7aWYoZW50cnkuaWQ9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBrZXkgImlkIiBpbiBzdHJlYW1pbmcgZXZlbnQuJyk7fQptYXAuc2V0KGVudHJ5LmlkLGVudHJ5KTt9CnJldHVybiBtYXA7fQpmdW5jdGlvbiBjcmVhdGVNYXBzKG1hcHNKc29uKXtjb25zdCBtYXBzPW5ldyBNYXAoKTtmb3IoY29uc3RbbmFtZSxtYXBKc29uXW9mIE9iamVjdC5lbnRyaWVzKG1hcHNKc29uKSl7bWFwcy5zZXQobmFtZSxjcmVhdGVNYXAobWFwSnNvbikpO30KcmV0dXJuIG1hcHM7fQpmdW5jdGlvbiBjcmVhdGVHcm91cChncm91cEpzb24sb3B0X3N0YXJ0VGltZSl7Y29uc3QgZW50cmllcz1bXTtjb25zdCBuPU9iamVjdC52YWx1ZXMoZ3JvdXBKc29uKVswXS5sZW5ndGg7Zm9yKGxldCBpPTA7aTxuO2krKyl7Y29uc3QgZW50cnk9e307Zm9yKGNvbnN0IG5hbWUgaW4gZ3JvdXBKc29uKXtlbnRyeVtuYW1lXT1ncm91cEpzb25bbmFtZV1baV07fQplbnRyaWVzLnB1c2goZW50cnkpO30KY29uc3QgdGltZURlbHRhPWdyb3VwSnNvbi50aW1lRGVsdGE7aWYob3B0X3N0YXJ0VGltZT09PXVuZGVmaW5lZCYmdGltZURlbHRhIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgcmVxdWlyZWQga2V5ICJzdGFydFRpbWUiIGluIHN0cmVhbWluZyBldmVudC4nKTt9CmlmKG9wdF9zdGFydFRpbWUpe2xldCBkZWx0YT0wO2Zvcihjb25zdCBlbnRyeSBvZiBlbnRyaWVzKXtkZWx0YSs9ZW50cnkudGltZURlbHRhP2VudHJ5LnRpbWVEZWx0YTowO2VudHJ5LnRpbWU9b3B0X3N0YXJ0VGltZStkZWx0YTt9fQpyZXR1cm4gZW50cmllczt9CmZ1bmN0aW9uIGNyZWF0ZUdyb3Vwcyhncm91cHNKc29uLG9wdF9zdGFydFRpbWUpe2NvbnN0IGdyb3Vwcz1uZXcgTWFwKCk7Zm9yKGNvbnN0W25hbWUsZ3JvdXBKc29uXW9mIE9iamVjdC5lbnRyaWVzKGdyb3Vwc0pzb24pKXtncm91cHMuc2V0KG5hbWUsY3JlYXRlR3JvdXAoZ3JvdXBKc29uLG9wdF9zdGFydFRpbWUpKTt9CnJldHVybiBncm91cHM7fQpmdW5jdGlvbiBjcmVhdGVNZXRhZGF0YShtZXRhZGF0YVBhaXJzKXtjb25zdCBtZXRhZGF0YT1uZXcgTWFwKCk7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgbWV0YWRhdGFQYWlycyl7bWV0YWRhdGEuc2V0KG5hbWUsdmFsdWUpO30KaWYobWV0YWRhdGEuZ2V0KCd2ZXJzaW9uJyk9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyByZXF1aXJlZCBrZXkgInZlcnNpb24iIGluIHN0cmVhbWluZyBldmVudC4nKTt9CnJldHVybiBtZXRhZGF0YTt9CmNsYXNzIFByb2ZpbGluZ0RpY3Rpb25hcnlSZWFkZXJ7Y29uc3RydWN0b3Iob3B0X21ldGFkYXRhLG9wdF9tYXBzLG9wdF9ncm91cHMsb3B0X3BhcmVudCl7dGhpcy5tZXRhZGF0YT1vcHRfbWV0YWRhdGF8fG5ldyBNYXAoKTt0aGlzLm1hcHM9b3B0X21hcHN8fG5ldyBNYXAoKTt0aGlzLmdyb3Vwcz1vcHRfZ3JvdXBzfHxuZXcgTWFwKCk7dGhpcy5wYXJlbnRfPW9wdF9wYXJlbnR8fHVuZGVmaW5lZDt0aGlzLmluZmxhdGVkXz11bmRlZmluZWQ7dGhpcy5yYXdfPXVuZGVmaW5lZDt0aGlzLmJvdW5kR2V0U3RyaW5nXz10aGlzLmdldFN0cmluZy5iaW5kKHRoaXMpO3RoaXMuZGVmZXJlbmNlU3RyaW5nc189bz0+ZGVmZXJlbmNlU3RyaW5ncyh0aGlzLmJvdW5kR2V0U3RyaW5nXyxvKTt9CnN0YXRpYyBlbXB0eSgpe3JldHVybiBuZXcgUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcigpO30KZ2V0IHBhcmVudCgpe3JldHVybiB0aGlzLnBhcmVudF87fQpnZXQgcmF3KCl7aWYodGhpcy5yYXdfKXJldHVybiB0aGlzLnJhd187dGhpcy5yYXdfPXt9O2Zvcihjb25zdFtuYW1lLGdyb3VwXW9mIHRoaXMuZ3JvdXBzLmVudHJpZXMoKSl7dGhpcy5yYXdfW25hbWVdPWdyb3VwO30KcmV0dXJuIHRoaXMucmF3Xzt9CmdldCBpbmZsYXRlZCgpe2lmKHRoaXMuaW5mbGF0ZWRfKXJldHVybiB0aGlzLmluZmxhdGVkXzt0aGlzLmluZmxhdGVkXz17fTtmb3IoY29uc3RbbmFtZSxncm91cF1vZiB0aGlzLmdyb3Vwcy5lbnRyaWVzKCkpe3RoaXMuaW5mbGF0ZWRfW25hbWVdPXRoaXMuaW5mbGF0ZUdyb3VwKGdyb3VwKTt9CnJldHVybiB0aGlzLmluZmxhdGVkXzt9CmdldE5ld01hcChuYW1lKXtyZXR1cm4gdGhpcy5tYXBzLmdldChuYW1lKXx8bmV3IE1hcCgpO30KZ2V0TWFwVmFsdWUobWFwTmFtZSxpZCl7bGV0IHZhbHVlPXRoaXMuZ2V0TmV3TWFwKG1hcE5hbWUpLmdldChpZCk7aWYodmFsdWU9PT11bmRlZmluZWQmJnRoaXMucGFyZW50KXt2YWx1ZT10aGlzLnBhcmVudC5nZXRNYXBWYWx1ZShtYXBOYW1lLGlkKTt9CnJldHVybiB2YWx1ZTt9CmdldFN0cmluZyhpZCl7Y29uc3QgdmFsdWU9dGhpcy5nZXRNYXBWYWx1ZSgnc3RyaW5ncycsaWQpO2lmKHZhbHVlPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHZhbHVlLnN0cmluZzt9Cmhhc01hcChuYW1lKXtpZih0aGlzLm1hcHMuaGFzKG5hbWUpKXJldHVybiB0cnVlO2lmKHRoaXMucGFyZW50PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5wYXJlbnQuaGFzTWFwKG5hbWUpO30KaW5mbGF0ZUdyb3VwKGdyb3VwKXtyZXR1cm4gZ3JvdXAubWFwKHRoaXMuaW5mbGF0ZUVudHJ5LmJpbmQodGhpcykpO30KaW5mbGF0ZUVudHJ5KGVudHJ5KXtjb25zdCBpbmZsYXRlZEVudHJ5PXt9O2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGVudHJ5KSl7bGV0IGluZmxhdGVkVmFsdWU7aWYodGhpcy5oYXNNYXAobmFtZSkpe2NvbnN0IGlkPXZhbHVlO2luZmxhdGVkVmFsdWU9dGhpcy5kZWZlcmVuY2VTdHJpbmdzXyh0aGlzLmdldE1hcFZhbHVlKG5hbWUsaWQpKTt9ZWxzZXtpbmZsYXRlZFZhbHVlPXZhbHVlO30KaW5mbGF0ZWRFbnRyeVtzaW5ndWxhcml6ZShuYW1lKV09aW5mbGF0ZWRWYWx1ZTt9CnJldHVybiB0aGlzLmRlZmVyZW5jZVN0cmluZ3NfKGluZmxhdGVkRW50cnkpO30KZXhwYW5kRGF0YShkYXRhKXtjb25zdCBtYXBzSnNvbj1kYXRhLm1hcHN8fHt9O2NvbnN0IGdyb3Vwc0pzb249ZGF0YS5hbGxvY2F0b3JzfHx7fTtjb25zdCBtZXRhZGF0YVBhaXJzPWdldE1ldGFkYXRhUGFpcnMoZGF0YSk7Y29uc3QgbWV0YWRhdGE9Y3JlYXRlTWV0YWRhdGEobWV0YWRhdGFQYWlycyk7Y29uc3Qgb3B0X3N0YXJ0VGltZT1tZXRhZGF0YS5nZXQoJ3N0YXJ0VGltZScpO2NvbnN0IG1hcHM9Y3JlYXRlTWFwcyhtYXBzSnNvbik7Y29uc3QgZ3JvdXBzPWNyZWF0ZUdyb3Vwcyhncm91cHNKc29uLG9wdF9zdGFydFRpbWUpO3JldHVybiBuZXcgUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcihtZXRhZGF0YSxtYXBzLGdyb3Vwcyx0aGlzKTt9CmV4cGFuZEV2ZW50KGV2ZW50KXtyZXR1cm4gdGhpcy5leHBhbmREYXRhKGV2ZW50LmFyZ3MuZGF0YSk7fX0KcmV0dXJue1Byb2ZpbGluZ0RpY3Rpb25hcnlSZWFkZXIsc2luZ3VsYXJpemUsZGVmZXJlbmNlU3RyaW5nc0ZvclRlc3Q6ZGVmZXJlbmNlU3RyaW5ncyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuc291cmNlX2luZm8nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU291cmNlSW5mbyhmaWxlLG9wdF9saW5lLG9wdF9jb2x1bW4pe3RoaXMuZmlsZV89ZmlsZTt0aGlzLmxpbmVfPW9wdF9saW5lfHwtMTt0aGlzLmNvbHVtbl89b3B0X2NvbHVtbnx8LTE7fQpTb3VyY2VJbmZvLnByb3RvdHlwZT17Z2V0IGZpbGUoKXtyZXR1cm4gdGhpcy5maWxlXzt9LGdldCBsaW5lKCl7cmV0dXJuIHRoaXMubGluZV87fSxnZXQgY29sdW1uKCl7cmV0dXJuIHRoaXMuY29sdW1uXzt9LGdldCBkb21haW4oKXtpZighdGhpcy5maWxlXylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGRvbWFpbj10aGlzLmZpbGVfLm1hdGNoKC8oLio6XC9cL1teOlwvXSopL2kpO3JldHVybiBkb21haW4/ZG9tYWluWzFdOnVuZGVmaW5lZDt9LHRvU3RyaW5nKCl7bGV0IHN0cj0nJztpZih0aGlzLmZpbGVfKXtzdHIrPXRoaXMuZmlsZV87fQppZih0aGlzLmxpbmVfPjApe3N0cis9JzonK3RoaXMubGluZV87fQppZih0aGlzLmNvbHVtbl8+MCl7c3RyKz0nOicrdGhpcy5jb2x1bW5fO30KcmV0dXJuIHN0cjt9fTtyZXR1cm57U291cmNlSW5mbyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwuc291cmNlX2luZm8nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSlNTb3VyY2VJbmZvKGZpbGUsbGluZSxjb2x1bW4saXNOYXRpdmUsc2NyaXB0SWQsc3RhdGUpe3RyLm1vZGVsLnNvdXJjZV9pbmZvLlNvdXJjZUluZm8uY2FsbCh0aGlzLGZpbGUsbGluZSxjb2x1bW4pO3RoaXMuaXNOYXRpdmVfPWlzTmF0aXZlO3RoaXMuc2NyaXB0SWRfPXNjcmlwdElkO3RoaXMuc3RhdGVfPXN0YXRlO30KSlNTb3VyY2VJbmZvLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLnNvdXJjZV9pbmZvLlNvdXJjZUluZm8ucHJvdG90eXBlLGdldCBzdGF0ZSgpe3JldHVybiB0aGlzLnN0YXRlXzt9LGdldCBpc05hdGl2ZSgpe3JldHVybiB0aGlzLmlzTmF0aXZlXzt9LGdldCBzY3JpcHRJZCgpe3JldHVybiB0aGlzLnNjcmlwdElkXzt9LHRvU3RyaW5nKCl7Y29uc3Qgc3RyPXRoaXMuaXNOYXRpdmVfPydbbmF0aXZlIHY4XSAnOicnO3JldHVybiBzdHIrCnRyLm1vZGVsLnNvdXJjZV9pbmZvLlNvdXJjZUluZm8ucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwodGhpcyk7fX07Y29uc3QgSlNTb3VyY2VTdGF0ZT17Q09NUElMRUQ6J2NvbXBpbGVkJyxPUFRJTUlaQUJMRTonb3B0aW1pemFibGUnLE9QVElNSVpFRDonb3B0aW1pemVkJyxVTktOT1dOOid1bmtub3duJyx9O3JldHVybntKU1NvdXJjZUluZm8sSlNTb3VyY2VTdGF0ZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBUcmFjZUNvZGVFbnRyeShhZGRyZXNzLHNpemUsbmFtZSxzY3JpcHRJZCl7dGhpcy5pZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7dGhpcy5hZGRyZXNzXz1hZGRyZXNzO3RoaXMuc2l6ZV89c2l6ZTtjb25zdCByZVByZWZpeD0vXihcdyo6KT8oWyp+XT8pKC4qKSQvbTtjb25zdCB0b2tlbnM9cmVQcmVmaXguZXhlYyhuYW1lKTtjb25zdCBwcmVmaXg9dG9rZW5zWzFdO2xldCBzdGF0ZT10b2tlbnNbMl07Y29uc3QgYm9keT10b2tlbnNbM107aWYoc3RhdGU9PT0nKicpe3N0YXRlPXRyLm1vZGVsLnNvdXJjZV9pbmZvLkpTU291cmNlU3RhdGUuT1BUSU1JWkVEO31lbHNlIGlmKHN0YXRlPT09J34nKXtzdGF0ZT10ci5tb2RlbC5zb3VyY2VfaW5mby5KU1NvdXJjZVN0YXRlLk9QVElNSVpBQkxFO31lbHNlIGlmKHN0YXRlPT09Jycpe3N0YXRlPXRyLm1vZGVsLnNvdXJjZV9pbmZvLkpTU291cmNlU3RhdGUuQ09NUElMRUQ7fWVsc2V7c3RhdGU9dHIubW9kZWwuc291cmNlX2luZm8uSlNTb3VyY2VTdGF0ZS5VTktOT1dOO30KbGV0IHJhd05hbWU7bGV0IHJhd1VybDtpZihwcmVmaXg9PT0nU2NyaXB0Oicpe3Jhd05hbWU9Jyc7cmF3VXJsPWJvZHk7fWVsc2V7Y29uc3Qgc3BhY2VQb3M9Ym9keS5sYXN0SW5kZXhPZignICcpO3Jhd05hbWU9c3BhY2VQb3MhPT0tMT9ib2R5LnN1YnN0cigwLHNwYWNlUG9zKTpib2R5O3Jhd1VybD1zcGFjZVBvcyE9PS0xP2JvZHkuc3Vic3RyKHNwYWNlUG9zKzEpOicnO30KZnVuY3Rpb24gc3BsaXRMaW5lQW5kQ29sdW1uKHVybCl7Y29uc3QgbGluZUNvbHVtblJlZ0V4PS8oPzo6KFxkKykpPyg/OjooXGQrKSk/JC87Y29uc3QgbGluZUNvbHVtbk1hdGNoPWxpbmVDb2x1bW5SZWdFeC5leGVjKHVybCk7bGV0IGxpbmVOdW1iZXI7bGV0IGNvbHVtbk51bWJlcjtpZih0eXBlb2YobGluZUNvbHVtbk1hdGNoWzFdKT09PSdzdHJpbmcnKXtsaW5lTnVtYmVyPXBhcnNlSW50KGxpbmVDb2x1bW5NYXRjaFsxXSwxMCk7bGluZU51bWJlcj1pc05hTihsaW5lTnVtYmVyKT91bmRlZmluZWQ6bGluZU51bWJlci0xO30KaWYodHlwZW9mKGxpbmVDb2x1bW5NYXRjaFsyXSk9PT0nc3RyaW5nJyl7Y29sdW1uTnVtYmVyPXBhcnNlSW50KGxpbmVDb2x1bW5NYXRjaFsyXSwxMCk7Y29sdW1uTnVtYmVyPWlzTmFOKGNvbHVtbk51bWJlcik/dW5kZWZpbmVkOmNvbHVtbk51bWJlci0xO30KcmV0dXJue3VybDp1cmwuc3Vic3RyaW5nKDAsdXJsLmxlbmd0aC1saW5lQ29sdW1uTWF0Y2hbMF0ubGVuZ3RoKSxsaW5lTnVtYmVyLGNvbHVtbk51bWJlcn07fQpjb25zdCBuYXRpdmVTdWZmaXg9JyBuYXRpdmUnO2NvbnN0IGlzTmF0aXZlPXJhd05hbWUuZW5kc1dpdGgobmF0aXZlU3VmZml4KTt0aGlzLm5hbWVfPWlzTmF0aXZlP3Jhd05hbWUuc2xpY2UoMCwtbmF0aXZlU3VmZml4Lmxlbmd0aCk6cmF3TmFtZTtjb25zdCB1cmxEYXRhPXNwbGl0TGluZUFuZENvbHVtbihyYXdVcmwpO2NvbnN0IHVybD11cmxEYXRhLnVybHx8Jyc7Y29uc3QgbGluZT11cmxEYXRhLmxpbmVOdW1iZXJ8fDA7Y29uc3QgY29sdW1uPXVybERhdGEuY29sdW1uTnVtYmVyfHwwO3RoaXMuc291cmNlSW5mb189bmV3IHRyLm1vZGVsLnNvdXJjZV9pbmZvLkpTU291cmNlSW5mbyh1cmwsbGluZSxjb2x1bW4saXNOYXRpdmUsc2NyaXB0SWQsc3RhdGUpO30KVHJhY2VDb2RlRW50cnkucHJvdG90eXBlPXtnZXQgaWQoKXtyZXR1cm4gdGhpcy5pZF87fSxnZXQgc291cmNlSW5mbygpe3JldHVybiB0aGlzLnNvdXJjZUluZm9fO30sZ2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lXzt9LHNldCBhZGRyZXNzKGFkZHJlc3Mpe3RoaXMuYWRkcmVzc189YWRkcmVzczt9LGdldCBhZGRyZXNzKCl7cmV0dXJuIHRoaXMuYWRkcmVzc187fSxzZXQgc2l6ZShzaXplKXt0aGlzLnNpemVfPXNpemU7fSxnZXQgc2l6ZSgpe3JldHVybiB0aGlzLnNpemVfO319O3JldHVybntUcmFjZUNvZGVFbnRyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBUcmFjZUNvZGVNYXAoKXt0aGlzLmJhbmtzXz1uZXcgTWFwKCk7fQpUcmFjZUNvZGVNYXAucHJvdG90eXBlPXthZGRFbnRyeShhZGRyZXNzSGV4LHNpemUsbmFtZSxzY3JpcHRJZCl7Y29uc3QgZW50cnk9bmV3IHRyLmUuaW1wb3J0ZXIuVHJhY2VDb2RlRW50cnkodGhpcy5nZXRBZGRyZXNzXyhhZGRyZXNzSGV4KSxzaXplLG5hbWUsc2NyaXB0SWQpO3RoaXMuYWRkRW50cnlfKGFkZHJlc3NIZXgsZW50cnkpO30sbW92ZUVudHJ5KG9sZEFkZHJlc3NIZXgsbmV3QWRkcmVzc0hleCxzaXplKXtjb25zdCBlbnRyeT10aGlzLmdldEJhbmtfKG9sZEFkZHJlc3NIZXgpLnJlbW92ZUVudHJ5KHRoaXMuZ2V0QWRkcmVzc18ob2xkQWRkcmVzc0hleCkpO2lmKCFlbnRyeSlyZXR1cm47ZW50cnkuYWRkcmVzcz10aGlzLmdldEFkZHJlc3NfKG5ld0FkZHJlc3NIZXgpO2VudHJ5LnNpemU9c2l6ZTt0aGlzLmFkZEVudHJ5XyhuZXdBZGRyZXNzSGV4LGVudHJ5KTt9LGxvb2t1cEVudHJ5KGFkZHJlc3NIZXgpe3JldHVybiB0aGlzLmdldEJhbmtfKGFkZHJlc3NIZXgpLmxvb2t1cEVudHJ5KHRoaXMuZ2V0QWRkcmVzc18oYWRkcmVzc0hleCkpO30sYWRkRW50cnlfKGFkZHJlc3NIZXgsZW50cnkpe3RoaXMuZ2V0QmFua18oYWRkcmVzc0hleCkuYWRkRW50cnkoZW50cnkpO30sZ2V0QWRkcmVzc18oYWRkcmVzc0hleCl7Y29uc3QgYmFua1NpemVIZXhEaWdpdHM9MTM7YWRkcmVzc0hleD1hZGRyZXNzSGV4LnNsaWNlKDIpO3JldHVybiBwYXJzZUludChhZGRyZXNzSGV4LnNsaWNlKC1iYW5rU2l6ZUhleERpZ2l0cyksMTYpO30sZ2V0QmFua18oYWRkcmVzc0hleCl7YWRkcmVzc0hleD1hZGRyZXNzSGV4LnNsaWNlKDIpO2NvbnN0IGJhbmtTaXplSGV4RGlnaXRzPTEzO2NvbnN0IG1heEhleERpZ2l0cz0xNjtjb25zdCBiYW5rTmFtZT1hZGRyZXNzSGV4LnNsaWNlKC1tYXhIZXhEaWdpdHMsLWJhbmtTaXplSGV4RGlnaXRzKTtsZXQgYmFuaz10aGlzLmJhbmtzXy5nZXQoYmFua05hbWUpO2lmKCFiYW5rKXtiYW5rPW5ldyBUcmFjZUNvZGVCYW5rKCk7dGhpcy5iYW5rc18uc2V0KGJhbmtOYW1lLGJhbmspO30KcmV0dXJuIGJhbms7fX07ZnVuY3Rpb24gVHJhY2VDb2RlQmFuaygpe3RoaXMuZW50cmllc189W107fQpUcmFjZUNvZGVCYW5rLnByb3RvdHlwZT17cmVtb3ZlRW50cnkoYWRkcmVzcyl7aWYodGhpcy5lbnRyaWVzXy5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgaW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMuZW50cmllc18sZnVuY3Rpb24oZW50cnkpe3JldHVybiBlbnRyeS5hZGRyZXNzO30sYWRkcmVzcyk7Y29uc3QgZW50cnk9dGhpcy5lbnRyaWVzX1tpbmRleF07aWYoIWVudHJ5fHxlbnRyeS5hZGRyZXNzIT09YWRkcmVzcylyZXR1cm4gdW5kZWZpbmVkO3RoaXMuZW50cmllc18uc3BsaWNlKGluZGV4LDEpO3JldHVybiBlbnRyeTt9LGxvb2t1cEVudHJ5KGFkZHJlc3Mpe2NvbnN0IGluZGV4PXRyLmIuZmluZEZpcnN0VHJ1ZUluZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLmVudHJpZXNfLGU9PihhZGRyZXNzPGUuYWRkcmVzcykpLTE7Y29uc3QgZW50cnk9dGhpcy5lbnRyaWVzX1tpbmRleF07cmV0dXJuIGVudHJ5JiZhZGRyZXNzPGVudHJ5LmFkZHJlc3MrZW50cnkuc2l6ZT9lbnRyeTp1bmRlZmluZWQ7fSxhZGRFbnRyeShuZXdFbnRyeSl7aWYodGhpcy5lbnRyaWVzXy5sZW5ndGg9PT0wKXt0aGlzLmVudHJpZXNfLnB1c2gobmV3RW50cnkpO30KY29uc3QgZW5kQWRkcmVzcz1uZXdFbnRyeS5hZGRyZXNzK25ld0VudHJ5LnNpemU7Y29uc3QgbGFzdEluZGV4PXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheSh0aGlzLmVudHJpZXNfLGZ1bmN0aW9uKGVudHJ5KXtyZXR1cm4gZW50cnkuYWRkcmVzczt9LGVuZEFkZHJlc3MpO2xldCBpbmRleDtmb3IoaW5kZXg9bGFzdEluZGV4LTE7aW5kZXg+PTA7LS1pbmRleCl7Y29uc3QgZW50cnk9dGhpcy5lbnRyaWVzX1tpbmRleF07Y29uc3QgZW50cnlFbmRBZGRyZXNzPWVudHJ5LmFkZHJlc3MrZW50cnkuc2l6ZTtpZihlbnRyeUVuZEFkZHJlc3M8PW5ld0VudHJ5LmFkZHJlc3MpYnJlYWs7fQorK2luZGV4O3RoaXMuZW50cmllc18uc3BsaWNlKGluZGV4LGxhc3RJbmRleC1pbmRleCxuZXdFbnRyeSk7fX07cmV0dXJue1RyYWNlQ29kZU1hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5tZWFzdXJlJyxmdW5jdGlvbigpe2NvbnN0IEFzeW5jU2xpY2U9dHIubW9kZWwuQXN5bmNTbGljZTtjb25zdCBNRUFTVVJFX05BTUVfUkVHRVg9LyhbXlwvOl0rKTooLio/KSg/OlwvKFtBLVphLXowLTkrL10rPT89PykpPyQvO2Z1bmN0aW9uIE1lYXN1cmVBc3luY1NsaWNlKCl7dGhpcy5ncm91cFRpdGxlXz0nVW5ncm91cGVkIE1lYXN1cmUnO2NvbnN0IG1hdGNoZWQ9TUVBU1VSRV9OQU1FX1JFR0VYLmV4ZWMoYXJndW1lbnRzWzFdKTtpZihtYXRjaGVkIT09bnVsbCl7YXJndW1lbnRzWzFdPW1hdGNoZWRbMl07dGhpcy5ncm91cFRpdGxlXz1tYXRjaGVkWzFdO30KQXN5bmNTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpNZWFzdXJlQXN5bmNTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpBc3luY1NsaWNlLnByb3RvdHlwZSxnZXQgdmlld1N1Ykdyb3VwVGl0bGUoKXtyZXR1cm4gdGhpcy5ncm91cFRpdGxlXzt9LGdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9LHNldCB0aXRsZSh0aXRsZSl7dGhpcy50aXRsZV89dGl0bGU7fX07QXN5bmNTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihNZWFzdXJlQXN5bmNTbGljZSx7Y2F0ZWdvcnlQYXJ0czpbJ2JsaW5rLnVzZXJfdGltaW5nJ119KTtyZXR1cm57TUVBU1VSRV9OQU1FX1JFR0VYLE1lYXN1cmVBc3luY1NsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb250ZXh0UHJvY2Vzc29yKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmFjdGl2ZUNvbnRleHRzXz1bXTt0aGlzLnN0YWNrUGVyVHlwZV89e307dGhpcy5jb250ZXh0Q2FjaGVfPXt9O3RoaXMuY29udGV4dFNldENhY2hlXz17fTt0aGlzLmNhY2hlZEVudHJ5Rm9yQWN0aXZlQ29udGV4dHNfPXVuZGVmaW5lZDt0aGlzLnNlZW5TbmFwc2hvdHNfPXt9O30KQ29udGV4dFByb2Nlc3Nvci5wcm90b3R5cGU9e2VudGVyQ29udGV4dChjb250ZXh0VHlwZSxzY29wZWRJZCl7Y29uc3QgbmV3QWN0aXZlQ29udGV4dHM9W3RoaXMuZ2V0T3JDcmVhdGVDb250ZXh0Xyhjb250ZXh0VHlwZSxzY29wZWRJZCksXTtmb3IoY29uc3Qgb2xkQ29udGV4dCBvZiB0aGlzLmFjdGl2ZUNvbnRleHRzXyl7aWYob2xkQ29udGV4dC50eXBlPT09Y29udGV4dFR5cGUpe3RoaXMucHVzaENvbnRleHRfKG9sZENvbnRleHQpO31lbHNle25ld0FjdGl2ZUNvbnRleHRzLnB1c2gob2xkQ29udGV4dCk7fX0KdGhpcy5hY3RpdmVDb250ZXh0c189bmV3QWN0aXZlQ29udGV4dHM7dGhpcy5jYWNoZWRFbnRyeUZvckFjdGl2ZUNvbnRleHRzXz11bmRlZmluZWQ7fSxsZWF2ZUNvbnRleHQoY29udGV4dFR5cGUsc2NvcGVkSWQpe3RoaXMubGVhdmVDb250ZXh0SW1wbF8oY29udGV4dD0+Y29udGV4dC50eXBlPT09Y29udGV4dFR5cGUmJmNvbnRleHQuc25hcHNob3Quc2NvcGU9PT1zY29wZWRJZC5zY29wZSYmY29udGV4dC5zbmFwc2hvdC5pZFJlZj09PXNjb3BlZElkLmlkKTt9LGRlc3Ryb3lDb250ZXh0KHNjb3BlZElkKXtmb3IoY29uc3Qgc3RhY2sgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLnN0YWNrUGVyVHlwZV8pKXtsZXQgbmV3TGVuZ3RoPTA7Zm9yKGxldCBpPTA7aTxzdGFjay5sZW5ndGg7KytpKXtpZihzdGFja1tpXS5zbmFwc2hvdC5zY29wZSE9PXNjb3BlZElkLnNjb3BlfHxzdGFja1tpXS5zbmFwc2hvdC5pZFJlZiE9PXNjb3BlZElkLmlkKXtzdGFja1tuZXdMZW5ndGgrK109c3RhY2tbaV07fX0Kc3RhY2subGVuZ3RoPW5ld0xlbmd0aDt9CnRoaXMubGVhdmVDb250ZXh0SW1wbF8oY29udGV4dD0+Y29udGV4dC5zbmFwc2hvdC5zY29wZT09PXNjb3BlZElkLnNjb3BlJiZjb250ZXh0LnNuYXBzaG90LmlkUmVmPT09c2NvcGVkSWQuaWQpO30sbGVhdmVDb250ZXh0SW1wbF8ocHJlZGljYXRlKXtjb25zdCBuZXdBY3RpdmVDb250ZXh0cz1bXTtmb3IoY29uc3Qgb2xkQ29udGV4dCBvZiB0aGlzLmFjdGl2ZUNvbnRleHRzXyl7aWYocHJlZGljYXRlKG9sZENvbnRleHQpKXtjb25zdCBwcmV2aW91c0NvbnRleHQ9dGhpcy5wb3BDb250ZXh0XyhvbGRDb250ZXh0LnR5cGUpO2lmKHByZXZpb3VzQ29udGV4dCl7bmV3QWN0aXZlQ29udGV4dHMucHVzaChwcmV2aW91c0NvbnRleHQpO319ZWxzZXtuZXdBY3RpdmVDb250ZXh0cy5wdXNoKG9sZENvbnRleHQpO319CnRoaXMuYWN0aXZlQ29udGV4dHNfPW5ld0FjdGl2ZUNvbnRleHRzO3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dW5kZWZpbmVkO30sZ2V0T3JDcmVhdGVDb250ZXh0Xyhjb250ZXh0VHlwZSxzY29wZWRJZCl7Y29uc3QgY29udGV4dD17dHlwZTpjb250ZXh0VHlwZSxzbmFwc2hvdDp7c2NvcGU6c2NvcGVkSWQuc2NvcGUsaWRSZWY6c2NvcGVkSWQuaWR9fTtjb25zdCBrZXk9dGhpcy5nZXRDb250ZXh0S2V5Xyhjb250ZXh0KTtpZihrZXkgaW4gdGhpcy5jb250ZXh0Q2FjaGVfKXtyZXR1cm4gdGhpcy5jb250ZXh0Q2FjaGVfW2tleV07fQp0aGlzLmNvbnRleHRDYWNoZV9ba2V5XT1jb250ZXh0O2NvbnN0IHNuYXBzaG90S2V5PXRoaXMuZ2V0U25hcHNob3RLZXlfKHNjb3BlZElkKTt0aGlzLnNlZW5TbmFwc2hvdHNfW3NuYXBzaG90S2V5XT10cnVlO3JldHVybiBjb250ZXh0O30scHVzaENvbnRleHRfKGNvbnRleHQpe2lmKCEoY29udGV4dC50eXBlIGluIHRoaXMuc3RhY2tQZXJUeXBlXykpe3RoaXMuc3RhY2tQZXJUeXBlX1tjb250ZXh0LnR5cGVdPVtdO30KdGhpcy5zdGFja1BlclR5cGVfW2NvbnRleHQudHlwZV0ucHVzaChjb250ZXh0KTt9LHBvcENvbnRleHRfKGNvbnRleHRUeXBlKXtpZighKGNvbnRleHRUeXBlIGluIHRoaXMuc3RhY2tQZXJUeXBlXykpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gdGhpcy5zdGFja1BlclR5cGVfW2NvbnRleHRUeXBlXS5wb3AoKTt9LGdldENvbnRleHRLZXlfKGNvbnRleHQpe3JldHVybltjb250ZXh0LnR5cGUsY29udGV4dC5zbmFwc2hvdC5zY29wZSxjb250ZXh0LnNuYXBzaG90LmlkUmVmXS5qb2luKCdceDAwJyk7fSxnZXRTbmFwc2hvdEtleV8oc2NvcGVkSWQpe3JldHVybltzY29wZWRJZC5zY29wZSxzY29wZWRJZC5pZFJlZl0uam9pbignXHgwMCcpO30sZ2V0IGFjdGl2ZUNvbnRleHRzKCl7aWYodGhpcy5jYWNoZWRFbnRyeUZvckFjdGl2ZUNvbnRleHRzXz09PXVuZGVmaW5lZCl7bGV0IGtleT1bXTtmb3IoY29uc3QgY29udGV4dCBvZiB0aGlzLmFjdGl2ZUNvbnRleHRzXyl7a2V5LnB1c2godGhpcy5nZXRDb250ZXh0S2V5Xyhjb250ZXh0KSk7fQprZXkuc29ydCgpO2tleT1rZXkuam9pbignXHgwMCcpO2lmKGtleSBpbiB0aGlzLmNvbnRleHRTZXRDYWNoZV8pe3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dGhpcy5jb250ZXh0U2V0Q2FjaGVfW2tleV07fWVsc2V7dGhpcy5hY3RpdmVDb250ZXh0c18uc29ydChmdW5jdGlvbihhLGIpe2NvbnN0IGtleUE9dGhpcy5nZXRDb250ZXh0S2V5XyhhKTtjb25zdCBrZXlCPXRoaXMuZ2V0Q29udGV4dEtleV8oYik7aWYoa2V5QTxrZXlCKXtyZXR1cm4tMTt9CmlmKGtleUE+a2V5Qil7cmV0dXJuIDE7fQpyZXR1cm4gMDt9LmJpbmQodGhpcykpO3RoaXMuY29udGV4dFNldENhY2hlX1trZXldPU9iamVjdC5mcmVlemUodGhpcy5hY3RpdmVDb250ZXh0c18pO3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dGhpcy5jb250ZXh0U2V0Q2FjaGVfW2tleV07fX0KcmV0dXJuIHRoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c187fSxpbnZhbGlkYXRlQ29udGV4dENhY2hlRm9yU25hcHNob3Qoc2NvcGVkSWQpe2NvbnN0IHNuYXBzaG90S2V5PXRoaXMuZ2V0U25hcHNob3RLZXlfKHNjb3BlZElkKTtpZighKHNuYXBzaG90S2V5IGluIHRoaXMuc2VlblNuYXBzaG90c18pKXJldHVybjt0aGlzLmNvbnRleHRDYWNoZV89e307dGhpcy5jb250ZXh0U2V0Q2FjaGVfPXt9O3RoaXMuY2FjaGVkRW50cnlGb3JBY3RpdmVDb250ZXh0c189dW5kZWZpbmVkO3RoaXMuYWN0aXZlQ29udGV4dHNfPXRoaXMuYWN0aXZlQ29udGV4dHNfLm1hcChmdW5jdGlvbihjb250ZXh0KXtpZihjb250ZXh0LnNuYXBzaG90LnNjb3BlIT09c2NvcGVkSWQuc2NvcGV8fGNvbnRleHQuc25hcHNob3QuaWRSZWYhPT1zY29wZWRJZC5pZCl7cmV0dXJuIGNvbnRleHQ7fQpyZXR1cm57dHlwZTpjb250ZXh0LnR5cGUsc25hcHNob3Q6e3Njb3BlOmNvbnRleHQuc25hcHNob3Quc2NvcGUsaWRSZWY6Y29udGV4dC5zbmFwc2hvdC5pZFJlZn19O30pO3RoaXMuc2VlblNuYXBzaG90c189e307fSx9O3JldHVybntDb250ZXh0UHJvY2Vzc29yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbm5vdGF0aW9uKCl7dGhpcy5ndWlkXz10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt0aGlzLnZpZXdfPXVuZGVmaW5lZDt9CkFubm90YXRpb24uZnJvbURpY3RJZlBvc3NpYmxlPWZ1bmN0aW9uKGFyZ3Mpe2lmKGFyZ3MudHlwZU5hbWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWlzc2luZyB0eXBlTmFtZSBhcmd1bWVudCcpO30KY29uc3QgdHlwZUluZm89QW5ub3RhdGlvbi5maW5kVHlwZUluZm9NYXRjaGluZyhmdW5jdGlvbih0eXBlSW5mbyl7cmV0dXJuIHR5cGVJbmZvLm1ldGFkYXRhLnR5cGVOYW1lPT09YXJncy50eXBlTmFtZTt9KTtpZih0eXBlSW5mbz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0eXBlSW5mby5jb25zdHJ1Y3Rvci5mcm9tRGljdChhcmdzKTt9O0Fubm90YXRpb24uZnJvbURpY3Q9ZnVuY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO307QW5ub3RhdGlvbi5wcm90b3R5cGU9e2dldCBndWlkKCl7cmV0dXJuIHRoaXMuZ3VpZF87fSxvblJlbW92ZSgpe30sdG9EaWN0KCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldE9yQ3JlYXRlVmlldyh2aWV3cG9ydCl7aWYoIXRoaXMudmlld18pe3RoaXMudmlld189dGhpcy5jcmVhdGVWaWV3Xyh2aWV3cG9ydCk7fQpyZXR1cm4gdGhpcy52aWV3Xzt9LGNyZWF0ZVZpZXdfKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fTtjb25zdCBvcHRpb25zPW5ldyB0ci5iLkV4dGVuc2lvblJlZ2lzdHJ5T3B0aW9ucyh0ci5iLkJBU0lDX1JFR0lTVFJZX01PREUpO3RyLmIuZGVjb3JhdGVFeHRlbnNpb25SZWdpc3RyeShBbm5vdGF0aW9uLG9wdGlvbnMpO0Fubm90YXRpb24uYWRkRXZlbnRMaXN0ZW5lcignd2lsbC1yZWdpc3RlcicsZnVuY3Rpb24oZSl7aWYoIWUudHlwZUluZm8uY29uc3RydWN0b3IuaGFzT3duUHJvcGVydHkoJ2Zyb21EaWN0Jykpe3Rocm93IG5ldyBFcnJvcignTXVzdCBoYXZlIGZyb21EaWN0IG1ldGhvZCcpO30KaWYoIWUudHlwZUluZm8ubWV0YWRhdGEudHlwZU5hbWUpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBBbm5vdGF0aW9ucyBtdXN0IHByb3ZpZGUgdHlwZU5hbWUnKTt9fSk7cmV0dXJue0Fubm90YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFlDb21wb25lbnQoc3RhYmxlSWQseVBlcmNlbnRPZmZzZXQpe3RoaXMuc3RhYmxlSWQ9c3RhYmxlSWQ7dGhpcy55UGVyY2VudE9mZnNldD15UGVyY2VudE9mZnNldDt9CllDb21wb25lbnQucHJvdG90eXBlPXt0b0RpY3QoKXtyZXR1cm57c3RhYmxlSWQ6dGhpcy5zdGFibGVJZCx5UGVyY2VudE9mZnNldDp0aGlzLnlQZXJjZW50T2Zmc2V0fTt9fTtmdW5jdGlvbiBMb2NhdGlvbih4V29ybGQseUNvbXBvbmVudHMpe3RoaXMueFdvcmxkXz14V29ybGQ7dGhpcy55Q29tcG9uZW50c189eUNvbXBvbmVudHM7fQpMb2NhdGlvbi5mcm9tVmlld0Nvb3JkaW5hdGVzPWZ1bmN0aW9uKHZpZXdwb3J0LHZpZXdYLHZpZXdZKXtjb25zdCBkdD12aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB4V29ybGQ9ZHQueFZpZXdUb1dvcmxkKHZpZXdYKTtjb25zdCB5Q29tcG9uZW50cz1bXTtsZXQgZWxlbT1kb2N1bWVudC5lbGVtZW50RnJvbVBvaW50KHZpZXdYK3ZpZXdwb3J0Lm1vZGVsVHJhY2tDb250YWluZXIuY2FudmFzLm9mZnNldExlZnQsdmlld1krdmlld3BvcnQubW9kZWxUcmFja0NvbnRhaW5lci5jYW52YXMub2Zmc2V0VG9wKTt3aGlsZShlbGVtIGluc3RhbmNlb2YgdHIudWkudHJhY2tzLlRyYWNrKXtpZihlbGVtLmV2ZW50Q29udGFpbmVyKXtjb25zdCBib3VuZFJlY3Q9ZWxlbS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB5UGVyY2VudE9mZnNldD0odmlld1ktYm91bmRSZWN0LnRvcCkvYm91bmRSZWN0LmhlaWdodDt5Q29tcG9uZW50cy5wdXNoKG5ldyBZQ29tcG9uZW50KGVsZW0uZXZlbnRDb250YWluZXIuc3RhYmxlSWQseVBlcmNlbnRPZmZzZXQpKTt9CmVsZW09ZWxlbS5wYXJlbnRFbGVtZW50O30KaWYoeUNvbXBvbmVudHMubGVuZ3RoPT09MClyZXR1cm47cmV0dXJuIG5ldyBMb2NhdGlvbih4V29ybGQseUNvbXBvbmVudHMpO307TG9jYXRpb24uZnJvbVN0YWJsZUlkQW5kVGltZXN0YW1wPWZ1bmN0aW9uKHZpZXdwb3J0LHN0YWJsZUlkLHRzKXtjb25zdCB4V29ybGQ9dHM7Y29uc3QgeUNvbXBvbmVudHM9W107Y29uc3QgY29udGFpbmVyVG9UcmFjaz12aWV3cG9ydC5jb250YWluZXJUb1RyYWNrTWFwO2xldCBlbGVtPWNvbnRhaW5lclRvVHJhY2suZ2V0VHJhY2tCeVN0YWJsZUlkKHN0YWJsZUlkKTtpZighZWxlbSlyZXR1cm47Y29uc3QgZmlyc3RZPWVsZW0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO3doaWxlKGVsZW0gaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spe2lmKGVsZW0uZXZlbnRDb250YWluZXIpe2NvbnN0IGJvdW5kUmVjdD1lbGVtLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHlQZXJjZW50T2Zmc2V0PShmaXJzdFktYm91bmRSZWN0LnRvcCkvYm91bmRSZWN0LmhlaWdodDt5Q29tcG9uZW50cy5wdXNoKG5ldyBZQ29tcG9uZW50KGVsZW0uZXZlbnRDb250YWluZXIuc3RhYmxlSWQseVBlcmNlbnRPZmZzZXQpKTt9CmVsZW09ZWxlbS5wYXJlbnRFbGVtZW50O30KaWYoeUNvbXBvbmVudHMubGVuZ3RoPT09MClyZXR1cm47cmV0dXJuIG5ldyBMb2NhdGlvbih4V29ybGQseUNvbXBvbmVudHMpO307TG9jYXRpb24ucHJvdG90eXBlPXtnZXQgeFdvcmxkKCl7cmV0dXJuIHRoaXMueFdvcmxkXzt9LGdldENvbnRhaW5pbmdUcmFjayh2aWV3cG9ydCl7Y29uc3QgY29udGFpbmVyVG9UcmFjaz12aWV3cG9ydC5jb250YWluZXJUb1RyYWNrTWFwO2Zvcihjb25zdCBpIGluIHRoaXMueUNvbXBvbmVudHNfKXtjb25zdCB5Q29tcG9uZW50PXRoaXMueUNvbXBvbmVudHNfW2ldO2NvbnN0IHRyYWNrPWNvbnRhaW5lclRvVHJhY2suZ2V0VHJhY2tCeVN0YWJsZUlkKHlDb21wb25lbnQuc3RhYmxlSWQpO2lmKHRyYWNrIT09dW5kZWZpbmVkKXJldHVybiB0cmFjazt9fSx0b1ZpZXdDb29yZGluYXRlcyh2aWV3cG9ydCl7Y29uc3QgZHQ9dmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgY29udGFpbmVyVG9UcmFjaz12aWV3cG9ydC5jb250YWluZXJUb1RyYWNrTWFwO2NvbnN0IHZpZXdYPWR0LnhXb3JsZFRvVmlldyh0aGlzLnhXb3JsZF8pO2xldCB2aWV3WT0tMTtmb3IoY29uc3QgaW5kZXggaW4gdGhpcy55Q29tcG9uZW50c18pe2NvbnN0IHlDb21wb25lbnQ9dGhpcy55Q29tcG9uZW50c19baW5kZXhdO2NvbnN0IHRyYWNrPWNvbnRhaW5lclRvVHJhY2suZ2V0VHJhY2tCeVN0YWJsZUlkKHlDb21wb25lbnQuc3RhYmxlSWQpO2lmKHRyYWNrIT09dW5kZWZpbmVkKXtjb25zdCBib3VuZFJlY3Q9dHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dmlld1k9eUNvbXBvbmVudC55UGVyY2VudE9mZnNldCpib3VuZFJlY3QuaGVpZ2h0K2JvdW5kUmVjdC50b3A7YnJlYWs7fX0KcmV0dXJue3ZpZXdYLHZpZXdZfTt9LHRvRGljdCgpe3JldHVybnt4V29ybGQ6dGhpcy54V29ybGRfLHlDb21wb25lbnRzOnRoaXMueUNvbXBvbmVudHNffTt9fTtyZXR1cm57TG9jYXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFubm90YXRpb25zJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEFubm90YXRpb25WaWV3KHZpZXdwb3J0LGFubm90YXRpb24pe30KQW5ub3RhdGlvblZpZXcucHJvdG90eXBlPXtkcmF3KGN0eCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9fTtyZXR1cm57QW5ub3RhdGlvblZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFubm90YXRpb25zJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFJlY3RBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCxhbm5vdGF0aW9uKXt0aGlzLnZpZXdwb3J0Xz12aWV3cG9ydDt0aGlzLmFubm90YXRpb25fPWFubm90YXRpb247fQpSZWN0QW5ub3RhdGlvblZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5ub3RhdGlvbnMuQW5ub3RhdGlvblZpZXcucHJvdG90eXBlLGRyYXcoY3R4KXtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBzdGFydENvb3Jkcz10aGlzLmFubm90YXRpb25fLnN0YXJ0TG9jYXRpb24udG9WaWV3Q29vcmRpbmF0ZXModGhpcy52aWV3cG9ydF8pO2NvbnN0IGVuZENvb3Jkcz10aGlzLmFubm90YXRpb25fLmVuZExvY2F0aW9uLnRvVmlld0Nvb3JkaW5hdGVzKHRoaXMudmlld3BvcnRfKTtsZXQgc3RhcnRZPXN0YXJ0Q29vcmRzLnZpZXdZLWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wO2NvbnN0IHNpemVZPWVuZENvb3Jkcy52aWV3WS1zdGFydENvb3Jkcy52aWV3WTtpZihzdGFydFkrc2l6ZVk8MCl7c3RhcnRZPXNpemVZO31lbHNlIGlmKHN0YXJ0WTwwKXtzdGFydFk9MDt9CmN0eC5maWxsU3R5bGU9dGhpcy5hbm5vdGF0aW9uXy5maWxsU3R5bGU7Y3R4LmZpbGxSZWN0KHN0YXJ0Q29vcmRzLnZpZXdYLHN0YXJ0WSxlbmRDb29yZHMudmlld1gtc3RhcnRDb29yZHMudmlld1gsc2l6ZVkpO319O3JldHVybntSZWN0QW5ub3RhdGlvblZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFJlY3RBbm5vdGF0aW9uKHN0YXJ0LGVuZCl7dHIubW9kZWwuQW5ub3RhdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5zdGFydExvY2F0aW9uXz1zdGFydDt0aGlzLmVuZExvY2F0aW9uXz1lbmQ7dGhpcy5maWxsU3R5bGU9J3JnYmEoMjU1LCAxODAsIDAsIDAuMyknO30KUmVjdEFubm90YXRpb24uZnJvbURpY3Q9ZnVuY3Rpb24oZGljdCl7Y29uc3QgYXJncz1kaWN0LmFyZ3M7Y29uc3Qgc3RhcnRMb2M9bmV3IHRyLm1vZGVsLkxvY2F0aW9uKGFyZ3Muc3RhcnQueFdvcmxkLGFyZ3Muc3RhcnQueUNvbXBvbmVudHMpO2NvbnN0IGVuZExvYz1uZXcgdHIubW9kZWwuTG9jYXRpb24oYXJncy5lbmQueFdvcmxkLGFyZ3MuZW5kLnlDb21wb25lbnRzKTtyZXR1cm4gbmV3IHRyLm1vZGVsLlJlY3RBbm5vdGF0aW9uKHN0YXJ0TG9jLGVuZExvYyk7fTtSZWN0QW5ub3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5Bbm5vdGF0aW9uLnByb3RvdHlwZSxnZXQgc3RhcnRMb2NhdGlvbigpe3JldHVybiB0aGlzLnN0YXJ0TG9jYXRpb25fO30sZ2V0IGVuZExvY2F0aW9uKCl7cmV0dXJuIHRoaXMuZW5kTG9jYXRpb25fO30sdG9EaWN0KCl7cmV0dXJue3R5cGVOYW1lOidyZWN0JyxhcmdzOntzdGFydDp0aGlzLnN0YXJ0TG9jYXRpb24udG9EaWN0KCksZW5kOnRoaXMuZW5kTG9jYXRpb24udG9EaWN0KCl9fTt9LGNyZWF0ZVZpZXdfKHZpZXdwb3J0KXtyZXR1cm4gbmV3IHRyLnVpLmFubm90YXRpb25zLlJlY3RBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCx0aGlzKTt9fTt0ci5tb2RlbC5Bbm5vdGF0aW9uLnJlZ2lzdGVyKFJlY3RBbm5vdGF0aW9uLHt0eXBlTmFtZToncmVjdCd9KTtyZXR1cm57UmVjdEFubm90YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFubm90YXRpb25zJyxmdW5jdGlvbigpe2Z1bmN0aW9uIENvbW1lbnRCb3hBbm5vdGF0aW9uVmlldyh2aWV3cG9ydCxhbm5vdGF0aW9uKXt0aGlzLnZpZXdwb3J0Xz12aWV3cG9ydDt0aGlzLmFubm90YXRpb25fPWFubm90YXRpb247dGhpcy50ZXh0QXJlYV89dW5kZWZpbmVkO3RoaXMuc3R5bGVXaWR0aD0yNTA7dGhpcy5zdHlsZUhlaWdodD01MDt0aGlzLmZvbnRTaXplPTEwO3RoaXMucmlnaHRPZmZzZXQ9NTA7dGhpcy50b3BPZmZzZXQ9MjU7fQpDb21tZW50Qm94QW5ub3RhdGlvblZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5ub3RhdGlvbnMuQW5ub3RhdGlvblZpZXcucHJvdG90eXBlLHJlbW92ZVRleHRBcmVhKCl7UG9seW1lci5kb20oUG9seW1lci5kb20odGhpcy50ZXh0QXJlYV8pLnBhcmVudE5vZGUpLnJlbW92ZUNoaWxkKHRoaXMudGV4dEFyZWFfKTt9LGRyYXcoY3R4KXtjb25zdCBjb29yZHM9dGhpcy5hbm5vdGF0aW9uXy5sb2NhdGlvbi50b1ZpZXdDb29yZGluYXRlcyh0aGlzLnZpZXdwb3J0Xyk7aWYoY29vcmRzLnZpZXdYPDApe2lmKHRoaXMudGV4dEFyZWFfKXt0aGlzLnRleHRBcmVhXy5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO30KcmV0dXJuO30KaWYoIXRoaXMudGV4dEFyZWFfKXt0aGlzLnRleHRBcmVhXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZXh0YXJlYScpO3RoaXMudGV4dEFyZWFfLnN0eWxlLnBvc2l0aW9uPSdhYnNvbHV0ZSc7dGhpcy50ZXh0QXJlYV8ucmVhZE9ubHk9dHJ1ZTt0aGlzLnRleHRBcmVhXy52YWx1ZT10aGlzLmFubm90YXRpb25fLnRleHQ7dGhpcy50ZXh0QXJlYV8uc3R5bGUuekluZGV4PTE7UG9seW1lci5kb20oUG9seW1lci5kb20oY3R4LmNhbnZhcykucGFyZW50Tm9kZSkuYXBwZW5kQ2hpbGQodGhpcy50ZXh0QXJlYV8pO30KdGhpcy50ZXh0QXJlYV8uc3R5bGUud2lkdGg9dGhpcy5zdHlsZVdpZHRoKydweCc7dGhpcy50ZXh0QXJlYV8uc3R5bGUuaGVpZ2h0PXRoaXMuc3R5bGVIZWlnaHQrJ3B4Jzt0aGlzLnRleHRBcmVhXy5zdHlsZS5mb250U2l6ZT10aGlzLmZvbnRTaXplKydweCc7dGhpcy50ZXh0QXJlYV8uc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7dGhpcy50ZXh0QXJlYV8uc3R5bGUubGVmdD1jb29yZHMudmlld1grY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0Kwp0aGlzLnJpZ2h0T2Zmc2V0KydweCc7dGhpcy50ZXh0QXJlYV8uc3R5bGUudG9wPWNvb3Jkcy52aWV3WS1jdHguY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC0KdGhpcy50b3BPZmZzZXQrJ3B4JztjdHguc3Ryb2tlU3R5bGU9J3JnYigwLCAwLCAwKSc7Y3R4LmxpbmVXaWR0aD0yO2N0eC5iZWdpblBhdGgoKTt0ci51aS5iLmRyYXdMaW5lKGN0eCxjb29yZHMudmlld1gsY29vcmRzLnZpZXdZLWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkudG9wLGNvb3Jkcy52aWV3WCt0aGlzLnJpZ2h0T2Zmc2V0LGNvb3Jkcy52aWV3WS10aGlzLnRvcE9mZnNldC0KY3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS50b3ApO2N0eC5zdHJva2UoKTt9fTtyZXR1cm57Q29tbWVudEJveEFubm90YXRpb25WaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb21tZW50Qm94QW5ub3RhdGlvbihsb2NhdGlvbix0ZXh0KXt0ci5tb2RlbC5Bbm5vdGF0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmxvY2F0aW9uPWxvY2F0aW9uO3RoaXMudGV4dD10ZXh0O30KQ29tbWVudEJveEFubm90YXRpb24uZnJvbURpY3Q9ZnVuY3Rpb24oZGljdCl7Y29uc3QgYXJncz1kaWN0LmFyZ3M7Y29uc3QgbG9jYXRpb249bmV3IHRyLm1vZGVsLkxvY2F0aW9uKGFyZ3MubG9jYXRpb24ueFdvcmxkLGFyZ3MubG9jYXRpb24ueUNvbXBvbmVudHMpO3JldHVybiBuZXcgdHIubW9kZWwuQ29tbWVudEJveEFubm90YXRpb24obG9jYXRpb24sYXJncy50ZXh0KTt9O0NvbW1lbnRCb3hBbm5vdGF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLm1vZGVsLkFubm90YXRpb24ucHJvdG90eXBlLG9uUmVtb3ZlKCl7dGhpcy52aWV3Xy5yZW1vdmVUZXh0QXJlYSgpO30sdG9EaWN0KCl7cmV0dXJue3R5cGVOYW1lOidjb21tZW50X2JveCcsYXJnczp7dGV4dDp0aGlzLnRleHQsbG9jYXRpb246dGhpcy5sb2NhdGlvbi50b0RpY3QoKX19O30sY3JlYXRlVmlld18odmlld3BvcnQpe3JldHVybiBuZXcgdHIudWkuYW5ub3RhdGlvbnMuQ29tbWVudEJveEFubm90YXRpb25WaWV3KHZpZXdwb3J0LHRoaXMpO319O3RyLm1vZGVsLkFubm90YXRpb24ucmVnaXN0ZXIoQ29tbWVudEJveEFubm90YXRpb24se3R5cGVOYW1lOidjb21tZW50X2JveCd9KTtyZXR1cm57Q29tbWVudEJveEFubm90YXRpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNjb3BlZElkKHNjb3BlLGlkLHBpZCl7aWYoc2NvcGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU2NvcGUgc2hvdWxkIGJlIGRlZmluZWQuIFVzZSBcJycrCnRyLm1vZGVsLk9CSkVDVF9ERUZBVUxUX1NDT1BFKydcJyBhcyB0aGUgZGVmYXVsdCBzY29wZS4nKTt9CnRoaXMuc2NvcGU9c2NvcGU7dGhpcy5pZD1pZDt0aGlzLnBpZD1waWQ7fQpTY29wZWRJZC5wcm90b3R5cGU9e3RvU3RyaW5nKCl7Y29uc3QgcGlkU3RyPXRoaXMucGlkPT09dW5kZWZpbmVkPycnOidwaWQ6ICcrdGhpcy5waWQrJywgJztyZXR1cm4neycrcGlkU3RyKydzY29wZTogJyt0aGlzLnNjb3BlKycsIGlkOiAnK3RoaXMuaWQrJ30nO30sdG9TdHJpbmdXaXRoRGVsaW1pdGVyKGRlbGltKXtyZXR1cm4odGhpcy5waWQ9PT11bmRlZmluZWQ/Jyc6dGhpcy5waWQpK2RlbGltKwp0aGlzLnNjb3BlK2RlbGltK3RoaXMuaWQ7fX07cmV0dXJue1Njb3BlZElkLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbm5vdGF0aW9ucycsZnVuY3Rpb24oKXtmdW5jdGlvbiBYTWFya2VyQW5ub3RhdGlvblZpZXcodmlld3BvcnQsYW5ub3RhdGlvbil7dGhpcy52aWV3cG9ydF89dmlld3BvcnQ7dGhpcy5hbm5vdGF0aW9uXz1hbm5vdGF0aW9uO30KWE1hcmtlckFubm90YXRpb25WaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFubm90YXRpb25zLkFubm90YXRpb25WaWV3LnByb3RvdHlwZSxkcmF3KGN0eCl7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgdmlld1g9ZHQueFdvcmxkVG9WaWV3KHRoaXMuYW5ub3RhdGlvbl8udGltZXN0YW1wKTtjdHguYmVnaW5QYXRoKCk7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld1gsMCx2aWV3WCxjdHguY2FudmFzLmhlaWdodCk7Y3R4LnN0cm9rZVN0eWxlPXRoaXMuYW5ub3RhdGlvbl8uc3Ryb2tlU3R5bGU7Y3R4LnN0cm9rZSgpO319O3JldHVybntYTWFya2VyQW5ub3RhdGlvblZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFhNYXJrZXJBbm5vdGF0aW9uKHRpbWVzdGFtcCl7dHIubW9kZWwuQW5ub3RhdGlvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy50aW1lc3RhbXA9dGltZXN0YW1wO3RoaXMuc3Ryb2tlU3R5bGU9J3JnYmEoMCwgMCwgMjU1LCAwLjUpJzt9ClhNYXJrZXJBbm5vdGF0aW9uLmZyb21EaWN0PWZ1bmN0aW9uKGRpY3Qpe3JldHVybiBuZXcgWE1hcmtlckFubm90YXRpb24oZGljdC5hcmdzLnRpbWVzdGFtcCk7fTtYTWFya2VyQW5ub3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5Bbm5vdGF0aW9uLnByb3RvdHlwZSx0b0RpY3QoKXtyZXR1cm57dHlwZU5hbWU6J3htYXJrZXInLGFyZ3M6e3RpbWVzdGFtcDp0aGlzLnRpbWVzdGFtcH19O30sY3JlYXRlVmlld18odmlld3BvcnQpe3JldHVybiBuZXcgdHIudWkuYW5ub3RhdGlvbnMuWE1hcmtlckFubm90YXRpb25WaWV3KHZpZXdwb3J0LHRoaXMpO319O3RyLm1vZGVsLkFubm90YXRpb24ucmVnaXN0ZXIoWE1hcmtlckFubm90YXRpb24se3R5cGVOYW1lOid4bWFya2VyJ30pO3JldHVybntYTWFya2VyQW5ub3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBCYXNlNjQ9dHIuYi5CYXNlNjQ7Y29uc3QgZGVlcENvcHk9dHIuYi5kZWVwQ29weTtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IEhlYXBEdW1wVHJhY2VFdmVudEltcG9ydGVyPXRyLmUuaW1wb3J0ZXIuSGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXI7Y29uc3QgTGVnYWN5SGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXI9dHIuZS5pbXBvcnRlci5MZWdhY3lIZWFwRHVtcFRyYWNlRXZlbnRJbXBvcnRlcjtjb25zdCBTdHJlYW1pbmdFdmVudEV4cGFuZGVyPXRyLmUuaW1wb3J0ZXIuU3RyZWFtaW5nRXZlbnRFeHBhbmRlcjtjb25zdCBQcm9maWxpbmdEaWN0aW9uYXJ5UmVhZGVyPXRyLmUuaW1wb3J0ZXIuUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcjtjb25zdCBNRUFTVVJFX05BTUVfUkVHRVg9dHIuZS5tZWFzdXJlLk1FQVNVUkVfTkFNRV9SRUdFWDtmdW5jdGlvbiBnZXRFdmVudENvbG9yKGV2ZW50LG9wdF9jdXN0b21OYW1lKXtpZihldmVudC5jbmFtZSl7cmV0dXJuIENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoZXZlbnQuY25hbWUpO31lbHNlIGlmKG9wdF9jdXN0b21OYW1lfHxldmVudC5uYW1lKXtyZXR1cm4gQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG9wdF9jdXN0b21OYW1lfHxldmVudC5uYW1lKTt9fQpmdW5jdGlvbiBpc0xlZ2FjeUNocm9tZUNsb2NrU3luY0V2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQubmFtZSE9PXVuZGVmaW5lZCYmZXZlbnQubmFtZS5zdGFydHNXaXRoKExFR0FDWV9DSFJPTUVfQ0xPQ0tfU1lOQ19FVkVOVF9OQU1FX1BSRUZJWCkmJigoZXZlbnQucGg9PT0nUycpfHwoZXZlbnQucGg9PT0nRicpKTt9CmNvbnN0IFBST0RVQ0VSPSdwcm9kdWNlcic7Y29uc3QgQ09OU1VNRVI9J2NvbnN1bWVyJztjb25zdCBTVEVQPSdzdGVwJztjb25zdCBCQUNLR1JPVU5EPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5CQUNLR1JPVU5EO2NvbnN0IExJR0hUPXRyLm1vZGVsLkNvbnRhaW5lck1lbW9yeUR1bXAuTGV2ZWxPZkRldGFpbC5MSUdIVDtjb25zdCBERVRBSUxFRD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuREVUQUlMRUQ7Y29uc3QgTUVNT1JZX0RVTVBfTEVWRUxfT0ZfREVUQUlMX09SREVSPVt1bmRlZmluZWQsQkFDS0dST1VORCxMSUdIVCxERVRBSUxFRF07Y29uc3QgR0xPQkFMX01FTU9SWV9BTExPQ0FUT1JfRFVNUF9QUkVGSVg9J2dsb2JhbC8nO2NvbnN0IExFR0FDWV9DSFJPTUVfQ0xPQ0tfU1lOQ19FVkVOVF9OQU1FX1BSRUZJWD0nQ2xvY2tTeW5jRXZlbnQuJztjb25zdCBCWVRFX1NUQVRfTkFNRV9NQVA9eydwYyc6J3ByaXZhdGVDbGVhblJlc2lkZW50JywncGQnOidwcml2YXRlRGlydHlSZXNpZGVudCcsJ3NjJzonc2hhcmVkQ2xlYW5SZXNpZGVudCcsJ3NkJzonc2hhcmVkRGlydHlSZXNpZGVudCcsJ3Bzcyc6J3Byb3BvcnRpb25hbFJlc2lkZW50Jywnc3cnOidzd2FwcGVkJ307Y29uc3QgV0VBS19NRU1PUllfQUxMT0NBVE9SX0RVTVBfRkxBRz0xPDwwO2NvbnN0IE9CSkVDVF9UWVBFX05BTUVfUEFUVEVSTlM9W3twcmVmaXg6J2NvbnN0IGNoYXIgKldURjo6Z2V0U3RyaW5nV2l0aFR5cGVOYW1lKCkgW1QgPSAnLHN1ZmZpeDonXSd9LHtwcmVmaXg6J2NvbnN0IGNoYXIqIFdURjo6Z2V0U3RyaW5nV2l0aFR5cGVOYW1lKCkgW3dpdGggVCA9ICcsc3VmZml4OiddJ30se3ByZWZpeDonY29uc3QgY2hhciAqX19jZGVjbCBXVEY6OmdldFN0cmluZ1dpdGhUeXBlTmFtZTwnLHN1ZmZpeDonPih2b2lkKSd9XTtjb25zdCBTVUJUUkFDRV9GSUVMRFM9bmV3IFNldChbJ3Bvd2VyVHJhY2VBc1N0cmluZycsJ3N5c3RlbVRyYWNlRXZlbnRzJywnYW5kcm9pZFByb2Nlc3NEdW1wJyxdKTtjb25zdCBOT05fTUVUQURBVEFfRklFTERTPW5ldyBTZXQoWydkaXNwbGF5VGltZVVuaXQnLCdzYW1wbGVzJywnc3RhY2tGcmFtZXMnLCd0cmFjZUFubm90YXRpb25zJywndHJhY2VFdmVudHMnLC4uLlNVQlRSQUNFX0ZJRUxEU10pO2Z1bmN0aW9uIFRyYWNlRXZlbnRJbXBvcnRlcihtb2RlbCxldmVudERhdGEpe3RoaXMuaGFzRXZlbnRzXz11bmRlZmluZWQ7dGhpcy5pbXBvcnRQcmlvcml0eT0xO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz11bmRlZmluZWQ7dGhpcy5zYW1wbGVFdmVudHNfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVFdmVudHNfPXVuZGVmaW5lZDt0aGlzLnN0YWNrRnJhbWVUcmVlXz1uZXcgdHIubW9kZWwuUHJvZmlsZVRyZWUoKTt0aGlzLnN1YnRyYWNlc189W107dGhpcy5ldmVudHNXZXJlRnJvbVN0cmluZ189ZmFsc2U7dGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfPXVuZGVmaW5lZDt0aGlzLmFsbEFzeW5jRXZlbnRzXz1bXTt0aGlzLmFsbEZsb3dFdmVudHNfPVtdO3RoaXMuYWxsT2JqZWN0RXZlbnRzXz1bXTt0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWQ9e307dGhpcy50cmFjZUV2ZW50U2FtcGxlU3RhY2tGcmFtZXNCeU5hbWVfPXt9O3RoaXMudjhQcm9jZXNzQ29kZU1hcHNfPXt9O3RoaXMudjhQcm9jZXNzUm9vdFN0YWNrRnJhbWVfPXt9O3RoaXMudjhTYW1wbGluZ0RhdGFfPVtdO3RoaXMucHJvZmlsZVRyZWVzXz1uZXcgTWFwKCk7dGhpcy5wcm9maWxlSW5mb189bmV3IE1hcCgpO3RoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jU3RhcnRFdmVudF89dW5kZWZpbmVkO3RoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jRmluaXNoRXZlbnRfPXVuZGVmaW5lZDt0aGlzLmFsbE1lbW9yeUR1bXBFdmVudHNfPXt9O3RoaXMuaGVhcFByb2ZpbGVFeHBhbmRlcj1uZXcgUHJvZmlsaW5nRGljdGlvbmFyeVJlYWRlcigpO3RoaXMub2JqZWN0VHlwZU5hbWVNYXBfPXt9O3RoaXMuY2xvY2tEb21haW5JZF89dHIubW9kZWwuQ2xvY2tEb21haW5JZC5VTktOT1dOX0NIUk9NRV9MRUdBQ1k7dGhpcy50b01vZGVsVGltZV89dW5kZWZpbmVkO2lmKHR5cGVvZihldmVudERhdGEpPT09J3N0cmluZyd8fGV2ZW50RGF0YSBpbnN0YW5jZW9mIFN0cmluZyl7ZXZlbnREYXRhPWV2ZW50RGF0YS50cmltKCk7aWYoZXZlbnREYXRhWzBdPT09J1snKXtldmVudERhdGE9ZXZlbnREYXRhLnJlcGxhY2UoL1xzKixccyokLywnJyk7aWYoZXZlbnREYXRhW2V2ZW50RGF0YS5sZW5ndGgtMV0hPT0nXScpe2V2ZW50RGF0YT1ldmVudERhdGErJ10nO319CnRoaXMuZXZlbnRzXz1KU09OLnBhcnNlKGV2ZW50RGF0YSk7dGhpcy5ldmVudHNXZXJlRnJvbVN0cmluZ189dHJ1ZTt9ZWxzZXt0aGlzLmV2ZW50c189ZXZlbnREYXRhO30KaWYodGhpcy5ldmVudHNfLnRyYWNlRXZlbnRzKXtjb25zdCBjb250YWluZXI9dGhpcy5ldmVudHNfO3RoaXMuZXZlbnRzXz10aGlzLmV2ZW50c18udHJhY2VFdmVudHM7Zm9yKGNvbnN0IHN1YnRyYWNlRmllbGQgb2YgU1VCVFJBQ0VfRklFTERTKXtpZihjb250YWluZXJbc3VidHJhY2VGaWVsZF0pe3RoaXMuc3RvcmVTdWJ0cmFjZV8oY29udGFpbmVyW3N1YnRyYWNlRmllbGRdKTt9fQp0aGlzLnN0b3JlU2FtcGxlc18oY29udGFpbmVyLnNhbXBsZXMpO3RoaXMuc3RvcmVTdGFja0ZyYW1lc18oY29udGFpbmVyLnN0YWNrRnJhbWVzKTt0aGlzLnN0b3JlRGlzcGxheVRpbWVVbml0Xyhjb250YWluZXIuZGlzcGxheVRpbWVVbml0KTt0aGlzLnN0b3JlVHJhY2VBbm5vdGF0aW9uc18oY29udGFpbmVyLnRyYWNlQW5ub3RhdGlvbnMpO3RoaXMuc3RvcmVNZXRhZGF0YV8oY29udGFpbmVyKTt9ZWxzZSBpZih0aGlzLmV2ZW50c18gaW5zdGFuY2VvZiB0ci5iLlRyYWNlU3RyZWFtKXtjb25zdCBwYXJzZXI9b2JvZSgpLm5vZGUoJ3tjYXQgcGh9JyxmdW5jdGlvbihlKXtyZXR1cm4gb2JvZS5kcm9wO30pLm5vZGUoJyEucG93ZXJUcmFjZUFzU3RyaW5nJyx0aGlzLnN0b3JlU3VidHJhY2VfLmJpbmQodGhpcykpLm5vZGUoJyEuc3lzdGVtVHJhY2VFdmVudHMnLHRoaXMuc3RvcmVTdWJ0cmFjZV8uYmluZCh0aGlzKSkubm9kZSgnIS5zYW1wbGVzJyx0aGlzLnN0b3JlU2FtcGxlc18uYmluZCh0aGlzKSkubm9kZSgnIS5zdGFja0ZyYW1lcycsdGhpcy5zdG9yZVN0YWNrRnJhbWVzXy5iaW5kKHRoaXMpKS5ub2RlKCchLmRpc3BsYXlUaW1lVW5pdCcsdGhpcy5zdG9yZURpc3BsYXlUaW1lVW5pdF8uYmluZCh0aGlzKSkubm9kZSgnIS50cmFjZUFubm90YXRpb25zJyx0aGlzLnN0b3JlVHJhY2VBbm5vdGF0aW9uc18uYmluZCh0aGlzKSkuZG9uZSh0aGlzLnN0b3JlTWV0YWRhdGFfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRzXy5yZXdpbmQoKTt3aGlsZSh0aGlzLmV2ZW50c18uaGFzRGF0YSl7cGFyc2VyLndyaXRlKHRoaXMuZXZlbnRzXy5yZWFkTnVtQnl0ZXMoKSk7fQpwYXJzZXIuZmluaXNoKCk7fX0KVHJhY2VFdmVudEltcG9ydGVyLmNhbkltcG9ydD1mdW5jdGlvbihldmVudERhdGEpe2lmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIHRyLmIuVHJhY2VTdHJlYW0pe2lmKGV2ZW50RGF0YS5pc0JpbmFyeSlyZXR1cm4gZmFsc2U7ZXZlbnREYXRhPWV2ZW50RGF0YS5oZWFkZXI7fQppZih0eXBlb2YoZXZlbnREYXRhKT09PSdzdHJpbmcnfHxldmVudERhdGEgaW5zdGFuY2VvZiBTdHJpbmcpe2V2ZW50RGF0YT1ldmVudERhdGEudHJpbSgpO3JldHVybiBldmVudERhdGFbMF09PT0neyd8fGV2ZW50RGF0YVswXT09PSdbJzt9CmlmKGV2ZW50RGF0YSBpbnN0YW5jZW9mIEFycmF5JiZldmVudERhdGEubGVuZ3RoJiZldmVudERhdGFbMF0ucGgpe3JldHVybiB0cnVlO30KaWYoZXZlbnREYXRhLnRyYWNlRXZlbnRzKXtpZihldmVudERhdGEudHJhY2VFdmVudHMgaW5zdGFuY2VvZiBBcnJheSl7aWYoZXZlbnREYXRhLnRyYWNlRXZlbnRzLmxlbmd0aCYmZXZlbnREYXRhLnRyYWNlRXZlbnRzWzBdLnBoKXtyZXR1cm4gdHJ1ZTt9CmlmKGV2ZW50RGF0YS5zYW1wbGVzJiZldmVudERhdGEuc2FtcGxlcy5sZW5ndGgmJmV2ZW50RGF0YS5zdGFja0ZyYW1lcyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRydWU7fX19CnJldHVybiBmYWxzZTt9O1RyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50Xz1mdW5jdGlvbihldmVudCl7Y29uc3Qgc2NvcGU9ZXZlbnQuc2NvcGV8fHRyLm1vZGVsLk9CSkVDVF9ERUZBVUxUX1NDT1BFO2xldCBwaWQ9dW5kZWZpbmVkO2lmKGV2ZW50LmlkIT09dW5kZWZpbmVkKXtpZihldmVudC5pZDIhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignRXZlbnQgaGFzIGJvdGggaWQgYW5kIGlkMicpO30KcGlkPXRyLm1vZGVsLkxPQ0FMX0lEX1BIQVNFUy5oYXMoZXZlbnQucGgpP2V2ZW50LnBpZDp1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5tb2RlbC5TY29wZWRJZChzY29wZSxldmVudC5pZCxwaWQpO31lbHNlIGlmKGV2ZW50LmlkMiE9PXVuZGVmaW5lZCl7aWYoZXZlbnQuaWQyLmdsb2JhbCE9PXVuZGVmaW5lZCl7cmV0dXJuIG5ldyB0ci5tb2RlbC5TY29wZWRJZChzY29wZSxldmVudC5pZDIuZ2xvYmFsKTt9ZWxzZSBpZihldmVudC5pZDIubG9jYWwhPT11bmRlZmluZWQpe3JldHVybiBuZXcgdHIubW9kZWwuU2NvcGVkSWQoc2NvcGUsZXZlbnQuaWQyLmxvY2FsLGV2ZW50LnBpZCk7fQp0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IHRoYXQgdXNlcyBpZDIgbXVzdCBoYXZlIGVpdGhlciBhIGdsb2JhbCBvciBsb2NhbCBJRCcpO30KcmV0dXJuIHVuZGVmaW5lZDt9O1RyYWNlRXZlbnRJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5pbXBvcnRlci5JbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidUcmFjZUV2ZW50SW1wb3J0ZXInO30sZXh0cmFjdFN1YnRyYWNlcygpe2NvbnN0IHN1YnRyYWNlcz10aGlzLnN1YnRyYWNlc187dGhpcy5zdWJ0cmFjZXNfPVtdO3JldHVybiBzdWJ0cmFjZXM7fSxkZWVwQ29weUlmTmVlZGVkXyhvYmope2lmKG9iaj09PXVuZGVmaW5lZClvYmo9e307aWYodGhpcy5ldmVudHNXZXJlRnJvbVN0cmluZ18pcmV0dXJuIG9iajtyZXR1cm4gZGVlcENvcHkob2JqKTt9LGRlZXBDb3B5QWx3YXlzXyhvYmope2lmKG9iaj09PXVuZGVmaW5lZClvYmo9e307cmV0dXJuIGRlZXBDb3B5KG9iaik7fSxwcm9jZXNzQXN5bmNFdmVudChldmVudCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhpcy5hbGxBc3luY0V2ZW50c18ucHVzaCh7c2VxdWVuY2VOdW1iZXI6dGhpcy5hbGxBc3luY0V2ZW50c18ubGVuZ3RoLGV2ZW50LHRocmVhZH0pO30scHJvY2Vzc0Zsb3dFdmVudChldmVudCxvcHRfc2xpY2Upe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO3RoaXMuYWxsRmxvd0V2ZW50c18ucHVzaCh7cmVmR3VpZDp0ci5iLkdVSUQuZ2V0TGFzdFNpbXBsZUd1aWQoKSxzZXF1ZW5jZU51bWJlcjp0aGlzLmFsbEZsb3dFdmVudHNfLmxlbmd0aCxldmVudCxzbGljZTpvcHRfc2xpY2UsdGhyZWFkfSk7fSxwcm9jZXNzQ291bnRlckV2ZW50KGV2ZW50KXtsZXQgY3RyTmFtZTtpZihldmVudC5pZCE9PXVuZGVmaW5lZCl7Y3RyTmFtZT1ldmVudC5uYW1lKydbJytldmVudC5pZCsnXSc7fWVsc2V7Y3RyTmFtZT1ldmVudC5uYW1lO30KY29uc3QgY3RyPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlQ291bnRlcihldmVudC5jYXQsY3RyTmFtZSk7Y29uc3QgcmVzZXJ2ZWRDb2xvcklkPWV2ZW50LmNuYW1lP2dldEV2ZW50Q29sb3IoZXZlbnQpOnVuZGVmaW5lZDtpZihjdHIubnVtU2VyaWVzPT09MCl7Zm9yKGNvbnN0IHNlcmllc05hbWUgaW4gZXZlbnQuYXJncyl7Y29uc3QgY29sb3JJZD1yZXNlcnZlZENvbG9ySWR8fGdldEV2ZW50Q29sb3IoZXZlbnQsY3RyLm5hbWUrJy4nK3Nlcmllc05hbWUpO2N0ci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoc2VyaWVzTmFtZSxjb2xvcklkKSk7fQppZihjdHIubnVtU2VyaWVzPT09MCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonY291bnRlcl9wYXJzZV9lcnJvcicsbWVzc2FnZTonRXhwZWN0ZWQgY291bnRlciAnK2V2ZW50Lm5hbWUrJyB0byBoYXZlIGF0IGxlYXN0IG9uZSBhcmd1bWVudCB0byB1c2UgYXMgYSB2YWx1ZS4nfSk7ZGVsZXRlIGN0ci5wYXJlbnQuY291bnRlcnNbY3RyLm5hbWVdO3JldHVybjt9fQpjb25zdCB0cz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyk7Y3RyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7Y29uc3QgdmFsPWV2ZW50LmFyZ3Nbc2VyaWVzLm5hbWVdP2V2ZW50LmFyZ3Nbc2VyaWVzLm5hbWVdOjA7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsdmFsKTt9KTt9LHByb2Nlc3NPYmplY3RFdmVudChldmVudCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhpcy5hbGxPYmplY3RFdmVudHNfLnB1c2goe3NlcXVlbmNlTnVtYmVyOnRoaXMuYWxsT2JqZWN0RXZlbnRzXy5sZW5ndGgsZXZlbnQsdGhyZWFkfSk7aWYodGhyZWFkLmd1aWQgaW4gdGhpcy5jb250ZXh0UHJvY2Vzc29yUGVyVGhyZWFkKXtjb25zdCBwcm9jZXNzb3I9dGhpcy5jb250ZXh0UHJvY2Vzc29yUGVyVGhyZWFkW3RocmVhZC5ndWlkXTtjb25zdCBzY29wZWRJZD1UcmFjZUV2ZW50SW1wb3J0ZXIuc2NvcGVkSWRGb3JFdmVudF8oZXZlbnQpO2lmKGV2ZW50LnBoPT09J0QnKXtwcm9jZXNzb3IuZGVzdHJveUNvbnRleHQoc2NvcGVkSWQpO30KcHJvY2Vzc29yLmludmFsaWRhdGVDb250ZXh0Q2FjaGVGb3JTbmFwc2hvdChzY29wZWRJZCk7fX0scHJvY2Vzc0NvbnRleHRFdmVudChldmVudCl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7aWYoISh0aHJlYWQuZ3VpZCBpbiB0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWQpKXt0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWRbdGhyZWFkLmd1aWRdPW5ldyB0ci5pbXBvcnRlci5Db250ZXh0UHJvY2Vzc29yKHRoaXMubW9kZWxfKTt9CmNvbnN0IHNjb3BlZElkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7Y29uc3QgY29udGV4dFR5cGU9ZXZlbnQubmFtZTtjb25zdCBwcm9jZXNzb3I9dGhpcy5jb250ZXh0UHJvY2Vzc29yUGVyVGhyZWFkW3RocmVhZC5ndWlkXTtpZihldmVudC5waD09PScoJyl7cHJvY2Vzc29yLmVudGVyQ29udGV4dChjb250ZXh0VHlwZSxzY29wZWRJZCk7fWVsc2UgaWYoZXZlbnQucGg9PT0nKScpe3Byb2Nlc3Nvci5sZWF2ZUNvbnRleHQoY29udGV4dFR5cGUsc2NvcGVkSWQpO31lbHNle3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3Vua25vd25fY29udGV4dF9waGFzZScsbWVzc2FnZTonVW5rbm93biBjb250ZXh0IGV2ZW50IHBoYXNlOiAnK2V2ZW50LnBoKycuJ30pO319LHNldENvbnRleHRzRnJvbVRocmVhZF8odGhyZWFkLHNsaWNlKXtpZih0aHJlYWQuZ3VpZCBpbiB0aGlzLmNvbnRleHRQcm9jZXNzb3JQZXJUaHJlYWQpe3NsaWNlLmNvbnRleHRzPXRoaXMuY29udGV4dFByb2Nlc3NvclBlclRocmVhZFt0aHJlYWQuZ3VpZF0uYWN0aXZlQ29udGV4dHM7fX0scHJvY2Vzc0R1cmF0aW9uRXZlbnQoZXZlbnQpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO2NvbnN0IHRzPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKTtpZihldmVudC5kdXI9PT0wJiYhdGhyZWFkLnNsaWNlR3JvdXAuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidkdXJhdGlvbl9wYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm47fQppZihldmVudC5waD09PSdCJyl7Y29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZShldmVudC5jYXQsZXZlbnQubmFtZSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksdGhpcy5kZWVwQ29weUlmTmVlZGVkXyhldmVudC5hcmdzKSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50dHMpLGV2ZW50LmFyZ3NTdHJpcHBlZCxnZXRFdmVudENvbG9yKGV2ZW50KSxldmVudC5iaW5kX2lkKTtzbGljZS5zdGFydFN0YWNrRnJhbWU9dGhpcy5nZXRTdGFja0ZyYW1lRm9yRXZlbnRfKGV2ZW50KTt0aGlzLnNldENvbnRleHRzRnJvbVRocmVhZF8odGhyZWFkLHNsaWNlKTt9ZWxzZSBpZihldmVudC5waD09PSdJJ3x8ZXZlbnQucGg9PT0naSd8fGV2ZW50LnBoPT09J1InKXtpZihldmVudC5zIT09dW5kZWZpbmVkJiZldmVudC5zIT09J3QnKXt0aHJvdyBuZXcgRXJyb3IoJ1RoaXMgc2hvdWxkIG5ldmVyIGhhcHBlbicpO30KdGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZShldmVudC5jYXQsZXZlbnQubmFtZSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksdGhpcy5kZWVwQ29weUlmTmVlZGVkXyhldmVudC5hcmdzKSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50dHMpLGV2ZW50LmFyZ3NTdHJpcHBlZCxnZXRFdmVudENvbG9yKGV2ZW50KSxldmVudC5iaW5kX2lkKTtjb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHRzKSk7c2xpY2Uuc3RhcnRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCk7c2xpY2UuZW5kU3RhY2tGcmFtZT11bmRlZmluZWQ7fWVsc2V7aWYoIXRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidkdXJhdGlvbl9wYXJzZV9lcnJvcicsbWVzc2FnZTonRSBwaGFzZSBldmVudCB3aXRob3V0IGEgbWF0Y2hpbmcgQiBwaGFzZSBldmVudC4nfSk7cmV0dXJuO30KY29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuZW5kU2xpY2UodGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnR0cyksZ2V0RXZlbnRDb2xvcihldmVudCkpO2lmKGV2ZW50Lm5hbWUmJnNsaWNlLnRpdGxlIT09ZXZlbnQubmFtZSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTondGl0bGVfbWF0Y2hfZXJyb3InLG1lc3NhZ2U6J1RpdGxlcyBkbyBub3QgbWF0Y2guIFRpdGxlIGlzICcrCnNsaWNlLnRpdGxlKycgaW4gb3BlblNsaWNlLCBhbmQgaXMgJysKZXZlbnQubmFtZSsnIGluIGVuZFNsaWNlJ30pO30Kc2xpY2UuZW5kU3RhY2tGcmFtZT10aGlzLmdldFN0YWNrRnJhbWVGb3JFdmVudF8oZXZlbnQpO3RoaXMubWVyZ2VBcmdzSW50b18oc2xpY2UuYXJncyxldmVudC5hcmdzLHNsaWNlLnRpdGxlKTt9fSxtZXJnZUFyZ3NJbnRvXyhkc3RBcmdzLHNyY0FyZ3MsZXZlbnROYW1lKXtmb3IoY29uc3QgYXJnIGluIHNyY0FyZ3Mpe2lmKGRzdEFyZ3NbYXJnXSE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonYXJnX21lcmdlX2Vycm9yJyxtZXNzYWdlOidEaWZmZXJlbnQgcGhhc2VzIG9mICcrZXZlbnROYW1lKycgcHJvdmlkZWQgdmFsdWVzIGZvciBhcmd1bWVudCAnK2FyZysnLicrJyBUaGUgbGFzdCBwcm92aWRlZCB2YWx1ZSB3aWxsIGJlIHVzZWQuJ30pO30KZHN0QXJnc1thcmddPXRoaXMuZGVlcENvcHlJZk5lZWRlZF8oc3JjQXJnc1thcmddKTt9fSxwcm9jZXNzQ29tcGxldGVFdmVudChldmVudCl7aWYoZXZlbnQuY2F0IT09dW5kZWZpbmVkJiZldmVudC5jYXQuaW5kZXhPZigndHJhY2VfZXZlbnRfb3ZlcmhlYWQnKT4tMSl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO2lmKGV2ZW50LmZsb3dfb3V0KXtpZihldmVudC5mbG93X2luKXtldmVudC5mbG93UGhhc2U9U1RFUDt9ZWxzZXtldmVudC5mbG93UGhhc2U9UFJPRFVDRVI7fX1lbHNlIGlmKGV2ZW50LmZsb3dfaW4pe2V2ZW50LmZsb3dQaGFzZT1DT05TVU1FUjt9CmNvbnN0IHNsaWNlPXRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKGV2ZW50LmNhdCxldmVudC5uYW1lLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKSx0aGlzLmR1cmF0aW9uRnJvbVVzXyhldmVudC5kdXIpLHRoaXMubWF5YmVUb01vZGVsVGltZUZyb21Vc18oZXZlbnQudHRzKSx0aGlzLmR1cmF0aW9uRnJvbVVzXyhldmVudC50ZHVyKSx0aGlzLmRlZXBDb3B5SWZOZWVkZWRfKGV2ZW50LmFyZ3MpLGV2ZW50LmFyZ3NTdHJpcHBlZCxnZXRFdmVudENvbG9yKGV2ZW50KSxldmVudC5iaW5kX2lkKTtzbGljZS5zdGFydFN0YWNrRnJhbWU9dGhpcy5nZXRTdGFja0ZyYW1lRm9yRXZlbnRfKGV2ZW50KTtzbGljZS5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhldmVudCx0cnVlKTt0aGlzLnNldENvbnRleHRzRnJvbVRocmVhZF8odGhyZWFkLHNsaWNlKTtyZXR1cm4gc2xpY2U7fSxwcm9jZXNzSml0Q29kZUV2ZW50KGV2ZW50KXtpZih0aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdPT09dW5kZWZpbmVkKXt0aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdPW5ldyB0ci5lLmltcG9ydGVyLlRyYWNlQ29kZU1hcCgpO30KY29uc3QgbWFwPXRoaXMudjhQcm9jZXNzQ29kZU1hcHNfW2V2ZW50LnBpZF07Y29uc3QgZGF0YT1ldmVudC5hcmdzLmRhdGE7aWYoZXZlbnQubmFtZT09PSdKaXRDb2RlTW92ZWQnKXttYXAubW92ZUVudHJ5KGRhdGEuY29kZV9zdGFydCxkYXRhLm5ld19jb2RlX3N0YXJ0LGRhdGEuY29kZV9sZW4pO31lbHNle21hcC5hZGRFbnRyeShkYXRhLmNvZGVfc3RhcnQsZGF0YS5jb2RlX2xlbixkYXRhLm5hbWUsZGF0YS5zY3JpcHRfaWQpO319LHByb2Nlc3NNZXRhZGF0YUV2ZW50KGV2ZW50KXtpZihldmVudC5uYW1lPT09J0ppdENvZGVBZGRlZCd8fGV2ZW50Lm5hbWU9PT0nSml0Q29kZU1vdmVkJyl7dGhpcy52OFNhbXBsaW5nRGF0YV8ucHVzaChldmVudCk7cmV0dXJuO30KaWYoZXZlbnQuYXJnc1N0cmlwcGVkKXJldHVybjtpZihldmVudC5uYW1lPT09J3Byb2Nlc3NfbmFtZScpe2NvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCk7cHJvY2Vzcy5uYW1lPWV2ZW50LmFyZ3MubmFtZTt9ZWxzZSBpZihldmVudC5uYW1lPT09J3Byb2Nlc3NfbGFiZWxzJyl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtjb25zdCBzdGFja0ZyYW1lcz1ldmVudC5hcmdzLnN0YWNrRnJhbWVzO2lmKGV2ZW50LmFyZ3MubGFiZWxzPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZXRhZGF0YV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTm8gbGFiZWxzIGZvdW5kIGluIGEgXCcnK2V2ZW50Lm5hbWUrJ1wnIG1ldGFkYXRhIGV2ZW50J30pO31lbHNle2NvbnN0IGxhYmVscz1ldmVudC5hcmdzLmxhYmVscy5zcGxpdCgnLCcpO2ZvcihsZXQgaT0wO2k8bGFiZWxzLmxlbmd0aDtpKyspe3Byb2Nlc3MuYWRkTGFiZWxJZk5lZWRlZChsYWJlbHNbaV0pO319fWVsc2UgaWYoZXZlbnQubmFtZT09PSdwcm9jZXNzX3VwdGltZV9zZWNvbmRzJyl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLnVwdGltZV9zZWNvbmRzPWV2ZW50LmFyZ3MudXB0aW1lO31lbHNlIGlmKGV2ZW50Lm5hbWU9PT0ncHJvY2Vzc19zb3J0X2luZGV4Jyl7Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKTtwcm9jZXNzLnNvcnRJbmRleD1ldmVudC5hcmdzLnNvcnRfaW5kZXg7fWVsc2UgaWYoZXZlbnQubmFtZT09PSd0aHJlYWRfbmFtZScpe2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoZXZlbnQucGlkKS5nZXRPckNyZWF0ZVRocmVhZChldmVudC50aWQpO3RocmVhZC5uYW1lPWV2ZW50LmFyZ3MubmFtZTt9ZWxzZSBpZihldmVudC5uYW1lPT09J3RocmVhZF9zb3J0X2luZGV4Jyl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7dGhyZWFkLnNvcnRJbmRleD1ldmVudC5hcmdzLnNvcnRfaW5kZXg7fWVsc2UgaWYoZXZlbnQubmFtZT09PSdudW1fY3B1cycpe2xldCBuPWV2ZW50LmFyZ3MubnVtYmVyO2lmKHRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50XyE9PXVuZGVmaW5lZCl7bj1NYXRoLm1heChuLHRoaXMuc29mdHdhcmVNZWFzdXJlZENwdUNvdW50Xyk7fQp0aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF89bjt9ZWxzZSBpZihldmVudC5uYW1lPT09J3N0YWNrRnJhbWVzJyl7Y29uc3Qgc3RhY2tGcmFtZXM9ZXZlbnQuYXJncy5zdGFja0ZyYW1lcztpZihzdGFja0ZyYW1lcz09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWV0YWRhdGFfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J05vIHN0YWNrIGZyYW1lcyBmb3VuZCBpbiBhIFwnJytldmVudC5uYW1lKydcJyBtZXRhZGF0YSBldmVudCd9KTt9ZWxzZXt0aGlzLmltcG9ydFN0YWNrRnJhbWVzXyhzdGFja0ZyYW1lcywncCcrZXZlbnQucGlkKyc6Jyk7fX1lbHNlIGlmKGV2ZW50Lm5hbWU9PT0ndHlwZU5hbWVzJyl7Y29uc3Qgb2JqZWN0VHlwZU5hbWVNYXA9ZXZlbnQuYXJncy50eXBlTmFtZXM7aWYob2JqZWN0VHlwZU5hbWVNYXA9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21ldGFkYXRhX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidObyBtYXBwaW5nIGZyb20gb2JqZWN0IHR5cGUgSURzIHRvIG5hbWVzIGZvdW5kIGluIGEgXCcnKwpldmVudC5uYW1lKydcJyBtZXRhZGF0YSBldmVudCd9KTt9ZWxzZXt0aGlzLmltcG9ydE9iamVjdFR5cGVOYW1lTWFwXyhvYmplY3RUeXBlTmFtZU1hcCxldmVudC5waWQpO319ZWxzZSBpZihldmVudC5uYW1lPT09J1RyYWNlQ29uZmlnJyl7dGhpcy5tb2RlbF8ubWV0YWRhdGEucHVzaCh7bmFtZTonVHJhY2VDb25maWcnLHZhbHVlOmV2ZW50LmFyZ3MudmFsdWV9KTt9ZWxzZXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZXRhZGF0YV9wYXJzZV9lcnJvcicsbWVzc2FnZTonVW5yZWNvZ25pemVkIG1ldGFkYXRhIG5hbWU6ICcrZXZlbnQubmFtZX0pO319LHByb2Nlc3NJbnN0YW50RXZlbnQoZXZlbnQpe2lmKGV2ZW50Lm5hbWU9PT0nSml0Q29kZUFkZGVkJ3x8ZXZlbnQubmFtZT09PSdKaXRDb2RlTW92ZWQnKXt0aGlzLnY4U2FtcGxpbmdEYXRhXy5wdXNoKGV2ZW50KTtyZXR1cm47fQppZihldmVudC5zPT09J3QnfHxldmVudC5zPT09dW5kZWZpbmVkKXt0aGlzLnByb2Nlc3NEdXJhdGlvbkV2ZW50KGV2ZW50KTtyZXR1cm47fQpsZXQgY29uc3RydWN0b3I7bGV0IHBhcmVudDtzd2l0Y2goZXZlbnQucyl7Y2FzZSdnJzpjb25zdHJ1Y3Rvcj10ci5tb2RlbC5HbG9iYWxJbnN0YW50RXZlbnQ7cGFyZW50PXRoaXMubW9kZWxfO2JyZWFrO2Nhc2UncCc6Y29uc3RydWN0b3I9dHIubW9kZWwuUHJvY2Vzc0luc3RhbnRFdmVudDtwYXJlbnQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidpbnN0YW50X3BhcnNlX2Vycm9yJyxtZXNzYWdlOidJIHBoYXNlIGV2ZW50IHdpdGggdW5rbm93biAicyIgZmllbGQgdmFsdWUuJ30pO3JldHVybjt9CmNvbnN0IGluc3RhbnRFdmVudD1uZXcgY29uc3RydWN0b3IoZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZ2V0RXZlbnRDb2xvcihldmVudCksdGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnQuYXJncykscGFyZW50KTtwYXJlbnQuaW5zdGFudEV2ZW50cy5wdXNoKGluc3RhbnRFdmVudCk7fSxnZXRPckNyZWF0ZVByb2ZpbGVUcmVlXyhzYW1wbGVUeXBlLGlkKXtpZighdGhpcy5wcm9maWxlVHJlZXNfLmhhcyhzYW1wbGVUeXBlKSl7dGhpcy5wcm9maWxlVHJlZXNfLnNldChzYW1wbGVUeXBlLG5ldyBNYXAoKSk7fQpjb25zdCBwcm9maWxlVHJlZU1hcD10aGlzLnByb2ZpbGVUcmVlc18uZ2V0KHNhbXBsZVR5cGUpO2lmKHByb2ZpbGVUcmVlTWFwLmhhcyhpZCkpe3JldHVybiBwcm9maWxlVHJlZU1hcC5nZXQoaWQpO30KY29uc3QgcHJvZmlsZVRyZWU9bmV3IHRyLm1vZGVsLlByb2ZpbGVUcmVlKCk7cHJvZmlsZVRyZWVNYXAuc2V0KGlkLHByb2ZpbGVUcmVlKTtjb25zdCBpbmZvPXRoaXMucHJvZmlsZUluZm9fLmdldChpZCk7aWYoaW5mbyE9PXVuZGVmaW5lZCl7cHJvZmlsZVRyZWUuc3RhcnRUaW1lPWluZm8uc3RhcnRUaW1lO3Byb2ZpbGVUcmVlLnBpZD1pbmZvLnBpZDtwcm9maWxlVHJlZS50aWQ9aW5mby50aWQ7fQpyZXR1cm4gcHJvZmlsZVRyZWU7fSxwcm9jZXNzU2FtcGxlKGV2ZW50KXtpZihldmVudC5hcmdzPT09dW5kZWZpbmVkfHxldmVudC5hcmdzLmRhdGE9PT11bmRlZmluZWQpe3JldHVybjt9CmlmKGV2ZW50LmlkPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ05vIGV2ZW50IElEIGluIHNhbXBsZScpO30KY29uc3QgZGF0YT1ldmVudC5hcmdzLmRhdGE7aWYoZGF0YS5zdGFydFRpbWUhPT11bmRlZmluZWQpe3RoaXMucHJvZmlsZUluZm9fLnNldChldmVudC5pZCx7c3RhcnRUaW1lOmRhdGEuc3RhcnRUaW1lLHBpZDpldmVudC5waWQsdGlkOmV2ZW50LnRpZH0pO30KY29uc3QgdGltZURlbHRhcz1kYXRhLnRpbWVEZWx0YXM7Zm9yKGNvbnN0IHNhbXBsZVR5cGUgaW4gZGF0YSl7aWYoc2FtcGxlVHlwZT09PSd0aW1lRGVsdGFzJ3x8c2FtcGxlVHlwZT09PSdzdGFydFRpbWUnKXtjb250aW51ZTt9CmlmKGRhdGFbc2FtcGxlVHlwZV0uc2FtcGxlcyYmdGltZURlbHRhcyYmZGF0YVtzYW1wbGVUeXBlXS5zYW1wbGVzLmxlbmd0aCE9PXRpbWVEZWx0YXMubGVuZ3RoKXt0aHJvdyBuZXcgRXJyb3IoJ3NhbXBsZXMgYW5kIHRpbWVEZWx0YXMgYXJyYXkgc2hvdWxkIGhhdmUgc2FtZSBsZW5ndGgnKTt9CmNvbnN0IHByb2ZpbGVUcmVlPXRoaXMuZ2V0T3JDcmVhdGVQcm9maWxlVHJlZV8oc2FtcGxlVHlwZSxldmVudC5pZCk7Y29uc3Qgbm9kZXM9ZGF0YVtzYW1wbGVUeXBlXS5ub2Rlcztjb25zdCBzYW1wbGVzPWRhdGFbc2FtcGxlVHlwZV0uc2FtcGxlcztpZihub2RlcyE9PXVuZGVmaW5lZCl7Zm9yKGNvbnN0IG5vZGUgb2Ygbm9kZXMpe2NvbnN0IFByb2ZpbGVOb2RlVHlwZT10ci5tb2RlbC5Qcm9maWxlTm9kZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3Rvcih1bmRlZmluZWQsc2FtcGxlVHlwZSk7Y29uc3QgcHJvZmlsZU5vZGU9UHJvZmlsZU5vZGVUeXBlLmNvbnN0cnVjdEZyb21PYmplY3QocHJvZmlsZVRyZWUsbm9kZSk7aWYocHJvZmlsZU5vZGU9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KcHJvZmlsZVRyZWUuYWRkKHByb2ZpbGVOb2RlKTt9fQppZihzYW1wbGVzIT09dW5kZWZpbmVkKXtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHByb2ZpbGVUcmVlLnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocHJvZmlsZVRyZWUudGlkKTtmb3IobGV0IGk9MCxsZW49c2FtcGxlcy5sZW5ndGg7aTxsZW47KytpKXtjb25zdCBub2RlPXByb2ZpbGVUcmVlLmdldE5vZGUoc2FtcGxlc1tpXSk7cHJvZmlsZVRyZWUuZW5kVGltZSs9dGltZURlbHRhc1tpXTtpZihub2RlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHN0YXJ0PXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKHByb2ZpbGVUcmVlLmVuZFRpbWUpO3RoaXMubW9kZWxfLnNhbXBsZXMucHVzaChuZXcgdHIubW9kZWwuU2FtcGxlKHN0YXJ0LG5vZGUuc2FtcGxlVGl0bGUsbm9kZSx0aHJlYWQpKTt9fX19LHByb2Nlc3NMZWdhY3lWOFNhbXBsZShldmVudCl7Y29uc3QgZGF0YT1ldmVudC5hcmdzLmRhdGE7Y29uc3Qgc2FtcGxlVHlwZT0nbGVnYWN5U2FtcGxlJztjb25zdCBQcm9maWxlTm9kZVR5cGU9dHIubW9kZWwuUHJvZmlsZU5vZGUuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IodW5kZWZpbmVkLHNhbXBsZVR5cGUpO2lmKGRhdGEudm1fc3RhdGU9PT0nanMnJiYhZGF0YS5zdGFjay5sZW5ndGgpcmV0dXJuO2NvbnN0IHByb2ZpbGVUcmVlPXRoaXMuZ2V0T3JDcmVhdGVQcm9maWxlVHJlZV8oc2FtcGxlVHlwZSxldmVudC5waWQpO2lmKHByb2ZpbGVUcmVlLmdldE5vZGUoLTEpPT09dW5kZWZpbmVkKXtwcm9maWxlVHJlZS5hZGQobmV3IFByb2ZpbGVOb2RlVHlwZSgtMSx7dXJsOicnLHNjcmlwdElkOi0xLGZ1bmN0aW9uTmFtZTondW5rbm93bid9LHVuZGVmaW5lZCkpO30KbGV0IG5vZGU9dW5kZWZpbmVkO2lmKGRhdGEuc3RhY2subGVuZ3RoPjAmJnRoaXMudjhQcm9jZXNzQ29kZU1hcHNfW2V2ZW50LnBpZF0pe2NvbnN0IG1hcD10aGlzLnY4UHJvY2Vzc0NvZGVNYXBzX1tldmVudC5waWRdO2RhdGEuc3RhY2sucmV2ZXJzZSgpO2xldCBwYXJlbnROb2RlPXVuZGVmaW5lZDtmb3IobGV0IGk9MDtpPGRhdGEuc3RhY2subGVuZ3RoO2krKyl7Y29uc3QgZW50cnk9bWFwLmxvb2t1cEVudHJ5KGRhdGEuc3RhY2tbaV0pO2lmKGVudHJ5PT09dW5kZWZpbmVkKXtub2RlPXByb2ZpbGVUcmVlLmdldE5vZGUoLTEpO31lbHNle25vZGU9cHJvZmlsZVRyZWUuZ2V0Tm9kZShlbnRyeS5pZCk7aWYobm9kZT09PXVuZGVmaW5lZCl7Y29uc3Qgc291cmNlSW5mbz1lbnRyeS5zb3VyY2VJbmZvO25vZGU9bmV3IFByb2ZpbGVOb2RlVHlwZShlbnRyeS5pZCx7ZnVuY3Rpb25OYW1lOmVudHJ5Lm5hbWUsdXJsOmVudHJ5LnNvdXJjZUluZm8uZmlsZSxsaW5lTnVtYmVyOnNvdXJjZUluZm8ubGluZSE9PS0xP3NvdXJjZUluZm8ubGluZTp1bmRlZmluZWQsY29sdW1uTnVtYmVyOnNvdXJjZUluZm8uY29sdW1uIT09LTE/c291cmNlSW5mby5jb2x1bW46dW5kZWZpbmVkLHNjcmlwdGlkOmVudHJ5LnNvdXJjZUluZm8uc2NyaXB0SWR9LHBhcmVudE5vZGUpO3Byb2ZpbGVUcmVlLmFkZChub2RlKTt9fQpwYXJlbnROb2RlPW5vZGU7fX1lbHNle25vZGU9cHJvZmlsZVRyZWUuZ2V0Tm9kZShkYXRhLnZtX3N0YXRlKTtpZihub2RlPT09dW5kZWZpbmVkKXtub2RlPW5ldyBQcm9maWxlTm9kZVR5cGUoZGF0YS52bV9zdGF0ZSx7dXJsOicnLGZ1bmN0aW9uTmFtZTpkYXRhLnZtX3N0YXRlfSx1bmRlZmluZWQpO3Byb2ZpbGVUcmVlLmFkZChub2RlKTt9fQpjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTt0aGlzLm1vZGVsXy5zYW1wbGVzLnB1c2gobmV3IHRyLm1vZGVsLlNhbXBsZSh0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyksbm9kZS5zYW1wbGVUaXRsZSxub2RlLHRocmVhZCkpO30scHJvY2Vzc1RyYWNlU2FtcGxlRXZlbnQoZXZlbnQpe2lmKGV2ZW50Lm5hbWU9PT0nVjhTYW1wbGUnfHxldmVudC5uYW1lLnN0YXJ0c1dpdGgoJ1Byb2ZpbGUnKSl7dGhpcy52OFNhbXBsaW5nRGF0YV8ucHVzaChldmVudCk7cmV0dXJuO30KbGV0IG5vZGU9dGhpcy5zdGFja0ZyYW1lVHJlZV8uZ2V0Tm9kZShldmVudC5uYW1lKTtpZihub2RlPT09dW5kZWZpbmVkJiZldmVudC5zZiE9PXVuZGVmaW5lZCl7bm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5nZXROb2RlKCdnJytldmVudC5zZik7fQppZihub2RlPT09dW5kZWZpbmVkKXtsZXQgaWQ9ZXZlbnQubmFtZTtpZihldmVudC5zZil7aWQ9J2cnK2V2ZW50LnNmO30KY29uc3QgUHJvZmlsZU5vZGVUeXBlPXRyLm1vZGVsLlByb2ZpbGVOb2RlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKHVuZGVmaW5lZCwnbGVnYWN5U2FtcGxlJyk7bm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5hZGQobmV3IFByb2ZpbGVOb2RlVHlwZShpZCx7ZnVuY3Rpb25OYW1lOmV2ZW50Lm5hbWV9LHVuZGVmaW5lZCkpO30KY29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhldmVudC5waWQpLmdldE9yQ3JlYXRlVGhyZWFkKGV2ZW50LnRpZCk7Y29uc3Qgc2FtcGxlPW5ldyB0ci5tb2RlbC5TYW1wbGUodGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpLCdUcmFjZSBFdmVudCBTYW1wbGUnLG5vZGUsdGhyZWFkLHVuZGVmaW5lZCwxLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnQuYXJncykpO3RoaXMuc2V0Q29udGV4dHNGcm9tVGhyZWFkXyh0aHJlYWQsc2FtcGxlKTt0aGlzLm1vZGVsXy5zYW1wbGVzLnB1c2goc2FtcGxlKTt9LHByb2Nlc3NNZW1vcnlEdW1wRXZlbnQoZXZlbnQpe2lmKGV2ZW50LnBoIT09J3YnKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbWVtb3J5IGR1bXAgZXZlbnQgcGhhc2UgIicrZXZlbnQucGgrJyIuJyk7fQpjb25zdCBkdW1wSWQ9ZXZlbnQuaWQ7aWYoZHVtcElkPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWVtb3J5IGR1bXAgZXZlbnQgKHBoYXNlIFwnJytldmVudC5waCsnXCcpIHdpdGhvdXQgYSBkdW1wIElELid9KTtyZXR1cm47fQpjb25zdCBwaWQ9ZXZlbnQucGlkO2lmKHBpZD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01lbW9yeSBkdW1wIGV2ZW50IChwaGFzZVwnJytldmVudC5waCsnXCcsIGR1bXAgSUQgXCcnKwpkdW1wSWQrJ1wnKSB3aXRob3V0IGEgUElELid9KTtyZXR1cm47fQpjb25zdCBhbGxFdmVudHM9dGhpcy5hbGxNZW1vcnlEdW1wRXZlbnRzXztsZXQgZHVtcElkRXZlbnRzPWFsbEV2ZW50c1tkdW1wSWRdO2lmKGR1bXBJZEV2ZW50cz09PXVuZGVmaW5lZCl7YWxsRXZlbnRzW2R1bXBJZF09ZHVtcElkRXZlbnRzPXt9O30KbGV0IHByb2Nlc3NFdmVudHM9ZHVtcElkRXZlbnRzW3BpZF07aWYocHJvY2Vzc0V2ZW50cz09PXVuZGVmaW5lZCl7ZHVtcElkRXZlbnRzW3BpZF09cHJvY2Vzc0V2ZW50cz1bXTt9CnByb2Nlc3NFdmVudHMucHVzaChldmVudCk7fSxwcm9jZXNzQ2xvY2tTeW5jRXZlbnQoZXZlbnQpe2lmKGV2ZW50LnBoIT09J2MnKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgY2xvY2sgc3luYyBldmVudCBwaGFzZSAiJytldmVudC5waCsnIi4nKTt9CmNvbnN0IHN5bmNJZD1ldmVudC5hcmdzLnN5bmNfaWQ7aWYoc3luY0lkPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidjbG9ja19zeW5jX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidDbG9jayBzeW5jIGF0IHRpbWUgJytldmVudC50cysnIHdpdGhvdXQgYW4gSUQuJ30pO3JldHVybjt9CmlmKGV2ZW50LmFyZ3MmJmV2ZW50LmFyZ3MuaXNzdWVfdHMhPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuYWRkQ2xvY2tTeW5jTWFya2VyKHRoaXMuY2xvY2tEb21haW5JZF8sc3luY0lkLHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXMoZXZlbnQuYXJncy5pc3N1ZV90cyksdHIuYi5Vbml0LnRpbWVzdGFtcEZyb21VcyhldmVudC50cykpO31lbHNle3RoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuYWRkQ2xvY2tTeW5jTWFya2VyKHRoaXMuY2xvY2tEb21haW5JZF8sc3luY0lkLHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXMoZXZlbnQudHMpKTt9fSxwcm9jZXNzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jRXZlbnQoZXZlbnQpe2lmKGV2ZW50LnBoPT09J1MnKXt0aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY1N0YXJ0RXZlbnRfPWV2ZW50O31lbHNlIGlmKGV2ZW50LnBoPT09J0YnKXt0aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY0ZpbmlzaEV2ZW50Xz1ldmVudDt9CmlmKHRoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jU3RhcnRFdmVudF89PT11bmRlZmluZWR8fHRoaXMubGVnYWN5Q2hyb21lQ2xvY2tTeW5jRmluaXNoRXZlbnRfPT09dW5kZWZpbmVkKXtyZXR1cm47fQpjb25zdCBzdGFydFN5bmNJZD10aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY1N0YXJ0RXZlbnRfLm5hbWUuc3Vic3RyaW5nKExFR0FDWV9DSFJPTUVfQ0xPQ0tfU1lOQ19FVkVOVF9OQU1FX1BSRUZJWC5sZW5ndGgpO2NvbnN0IGZpbmlzaFN5bmNJZD10aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY0ZpbmlzaEV2ZW50Xy5uYW1lLnN1YnN0cmluZyhMRUdBQ1lfQ0hST01FX0NMT0NLX1NZTkNfRVZFTlRfTkFNRV9QUkVGSVgubGVuZ3RoKTtpZihzdGFydFN5bmNJZCE9PWZpbmlzaFN5bmNJZCl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbnNpc3RlbnQgY2xvY2sgc3luYyBJRCBvZiBsZWdhY3kgQ2hyb21lIGNsb2NrIHN5bmMgZXZlbnRzJyk7fQp0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0aGlzLmNsb2NrRG9tYWluSWRfLHN0YXJ0U3luY0lkLHRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModGhpcy5sZWdhY3lDaHJvbWVDbG9ja1N5bmNTdGFydEV2ZW50Xy50cyksdHIuYi5Vbml0LnRpbWVzdGFtcEZyb21Vcyh0aGlzLmxlZ2FjeUNocm9tZUNsb2NrU3luY0ZpbmlzaEV2ZW50Xy50cykpO30scHJvY2Vzc1Y4RXZlbnRzKCl7dGhpcy52OFNhbXBsaW5nRGF0YV8uc29ydChmdW5jdGlvbihhLGIpe2lmKGEudHMhPT1iLnRzKXJldHVybiBhLnRzLWIudHM7aWYoYS5waD09PSdNJ3x8YS5waD09PSdJJyl7cmV0dXJuLTE7fWVsc2UgaWYoYi5waD09PSdNJ3x8Yi5waD09PSdJJyl7cmV0dXJuIDE7fQpyZXR1cm4gMDt9KTtjb25zdCBsZW5ndGg9dGhpcy52OFNhbXBsaW5nRGF0YV8ubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bGVuZ3RoOysraSl7Y29uc3QgZXZlbnQ9dGhpcy52OFNhbXBsaW5nRGF0YV9baV07aWYoZXZlbnQucGg9PT0nTSd8fGV2ZW50LnBoPT09J0knKXt0aGlzLnByb2Nlc3NKaXRDb2RlRXZlbnQoZXZlbnQpO31lbHNlIGlmKGV2ZW50LnBoPT09J1AnKXtpZihldmVudC5uYW1lLnN0YXJ0c1dpdGgoJ1Byb2ZpbGUnKSl7dGhpcy5wcm9jZXNzU2FtcGxlKGV2ZW50KTt9ZWxzZXt0aGlzLnByb2Nlc3NMZWdhY3lWOFNhbXBsZShldmVudCk7fX19fSxpbXBvcnRDbG9ja1N5bmNNYXJrZXJzKCl7aWYodGhpcy5ldmVudHNfIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbSl7Y29uc3QgcGFyc2VyPW9ib2UoKS5ub2RlKCd7Y2F0IHBofScsdGhpcy5pbXBvcnRDbG9ja1N5bmNNYXJrZXJfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRzXy5yZXdpbmQoKTt3aGlsZSh0aGlzLmV2ZW50c18uaGFzRGF0YSl7cGFyc2VyLndyaXRlKHRoaXMuZXZlbnRzXy5yZWFkTnVtQnl0ZXMoKSk7fQpwYXJzZXIuZmluaXNoKCk7fWVsc2V7Zm9yKGxldCBpPTA7aTx0aGlzLmV2ZW50c18ubGVuZ3RoO2krKyl7dGhpcy5pbXBvcnRDbG9ja1N5bmNNYXJrZXJfKHRoaXMuZXZlbnRzX1tpXSk7fX19LGltcG9ydENsb2NrU3luY01hcmtlcl8oZXZlbnQpe2NvbnN0IGlzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jPWlzTGVnYWN5Q2hyb21lQ2xvY2tTeW5jRXZlbnQoZXZlbnQpO2lmKGV2ZW50LnBoIT09J2MnJiYhaXNMZWdhY3lDaHJvbWVDbG9ja1N5bmMpcmV0dXJuO2NvbnN0IGV2ZW50U2l6ZUluQnl0ZXM9dGhpcy5tb2RlbF8uaW1wb3J0T3B0aW9ucy50cmFja0RldGFpbGVkTW9kZWxTdGF0cz9KU09OLnN0cmluZ2lmeShldmVudCkubGVuZ3RoOnVuZGVmaW5lZDt0aGlzLm1vZGVsXy5zdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnY2xvY2tfc3luYycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7aWYoaXNMZWdhY3lDaHJvbWVDbG9ja1N5bmMpe3RoaXMucHJvY2Vzc0xlZ2FjeUNocm9tZUNsb2NrU3luY0V2ZW50KGV2ZW50KTt9ZWxzZXt0aGlzLnByb2Nlc3NDbG9ja1N5bmNFdmVudChldmVudCk7fX0saW1wb3J0RXZlbnRzKCl7dGhpcy5oYXNFdmVudHNfPWZhbHNlO2lmKHRoaXMuc3RhY2tGcmFtZUV2ZW50c18pe3RoaXMuaW1wb3J0U3RhY2tGcmFtZXNfKHRoaXMuc3RhY2tGcmFtZUV2ZW50c18sJ2cnKTt9CmlmKHRoaXMudHJhY2VBbm5vdGF0aW9uc18pdGhpcy5pbXBvcnRBbm5vdGF0aW9uc18oKTtpZih0aGlzLmV2ZW50c18gaW5zdGFuY2VvZiB0ci5iLlRyYWNlU3RyZWFtKXtjb25zdCBwYXJzZXI9b2JvZSgpLm5vZGUoJ3tjYXQgcGh9Jyx0aGlzLnByb2Nlc3NFdmVudF8uYmluZCh0aGlzKSk7dGhpcy5ldmVudHNfLnJld2luZCgpO3doaWxlKHRoaXMuZXZlbnRzXy5oYXNEYXRhKXtwYXJzZXIud3JpdGUodGhpcy5ldmVudHNfLnJlYWROdW1CeXRlcygpKTt9CnBhcnNlci5maW5pc2goKTt9ZWxzZXtmb3IobGV0IGVJPTA7ZUk8dGhpcy5ldmVudHNfLmxlbmd0aDtlSSsrKXt0aGlzLnByb2Nlc3NFdmVudF8odGhpcy5ldmVudHNfW2VJXSk7fX0KdGhpcy5jcmVhdGVBc3luY1NsaWNlc18oKTt0aGlzLnByb2Nlc3NWOEV2ZW50cygpO2Zvcihjb25zdCBmcmFtZSBvZiBPYmplY3QudmFsdWVzKHRoaXMudjhQcm9jZXNzUm9vdFN0YWNrRnJhbWVfKSl7ZnJhbWUucmVtb3ZlQWxsQ2hpbGRyZW4oKTt9fSxzdG9yZVN1YnRyYWNlXyhzdWJ0cmFjZSl7dGhpcy5zdWJ0cmFjZXNfLnB1c2goc3VidHJhY2UpO3JldHVybiBvYm9lLmRyb3A7fSxzdG9yZVNhbXBsZXNfKHNhbXBsZXMpe3RoaXMuc2FtcGxlRXZlbnRzXz1zYW1wbGVzO3JldHVybiBvYm9lLmRyb3A7fSxzdG9yZVN0YWNrRnJhbWVzXyhzdGFja0ZyYW1lcyl7dGhpcy5zdGFja0ZyYW1lRXZlbnRzXz1zdGFja0ZyYW1lcztyZXR1cm4gb2JvZS5kcm9wO30sc3RvcmVEaXNwbGF5VGltZVVuaXRfKHVuaXROYW1lKXtpZighdW5pdE5hbWUpcmV0dXJuO2NvbnN0IHVuaXQ9dHIuYi5UaW1lRGlzcGxheU1vZGVzW3VuaXROYW1lXTtpZih1bml0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgJyt1bml0TmFtZSsnIGlzIG5vdCBzdXBwb3J0ZWQuJyk7fQp0aGlzLm1vZGVsXy5pbnRyaW5zaWNUaW1lVW5pdD11bml0O3JldHVybiBvYm9lLmRyb3A7fSxzdG9yZVRyYWNlQW5ub3RhdGlvbnNfKHRyYWNlQW5ub3RhdGlvbnMpe3RoaXMudHJhY2VBbm5vdGF0aW9uc189dHJhY2VBbm5vdGF0aW9ucztyZXR1cm4gb2JvZS5kcm9wO30sc3RvcmVNZXRhZGF0YV8oY29udGFpbmVyKXtmb3IoY29uc3QgZmllbGROYW1lIG9mIE9iamVjdC5rZXlzKGNvbnRhaW5lcikpe2lmKE5PTl9NRVRBREFUQV9GSUVMRFMuaGFzKGZpZWxkTmFtZSkpY29udGludWU7dGhpcy5tb2RlbF8ubWV0YWRhdGEucHVzaCh7bmFtZTpmaWVsZE5hbWUsdmFsdWU6Y29udGFpbmVyW2ZpZWxkTmFtZV19KTtpZihmaWVsZE5hbWUhPT0nbWV0YWRhdGEnKWNvbnRpbnVlO2NvbnN0IG1ldGFkYXRhPWNvbnRhaW5lcltmaWVsZE5hbWVdO2lmKG1ldGFkYXRhWydoaWdocmVzLXRpY2tzJ10pe3RoaXMubW9kZWxfLmlzVGltZUhpZ2hSZXNvbHV0aW9uPW1ldGFkYXRhWydoaWdocmVzLXRpY2tzJ107fQppZihtZXRhZGF0YVsnY2xvY2stZG9tYWluJ10pe3RoaXMuY2xvY2tEb21haW5JZF89bWV0YWRhdGFbJ2Nsb2NrLWRvbWFpbiddO319CnJldHVybiBvYm9lLmRyb3A7fSxwcm9jZXNzRXZlbnRfKGV2ZW50KXt0aGlzLmhhc0V2ZW50c189dHJ1ZTtjb25zdCBpbXBvcnRPcHRpb25zPXRoaXMubW9kZWxfLmltcG9ydE9wdGlvbnM7Y29uc3QgdHJhY2tEZXRhaWxlZE1vZGVsU3RhdHM9aW1wb3J0T3B0aW9ucy50cmFja0RldGFpbGVkTW9kZWxTdGF0cztjb25zdCBtb2RlbFN0YXRzPXRoaXMubW9kZWxfLnN0YXRzO2lmKGV2ZW50LmFyZ3M9PT0nX19zdHJpcHBlZF9fJyl7ZXZlbnQuYXJnc1N0cmlwcGVkPXRydWU7ZXZlbnQuYXJncz11bmRlZmluZWQ7fQpsZXQgZXZlbnRTaXplSW5CeXRlcz11bmRlZmluZWQ7aWYodHJhY2tEZXRhaWxlZE1vZGVsU3RhdHMpe2V2ZW50U2l6ZUluQnl0ZXM9SlNPTi5zdHJpbmdpZnkoZXZlbnQpLmxlbmd0aDt9CnN3aXRjaChldmVudC5waCl7Y2FzZSdCJzpjYXNlJ0UnOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ2JlZ2luX2VuZCAobm9uLWNvbXBhY3QpJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLnByb2Nlc3NEdXJhdGlvbkV2ZW50KGV2ZW50KTticmVhaztjYXNlJ1gnOnttb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCdiZWdpbl9lbmQgKGNvbXBhY3QpJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTtjb25zdCBzbGljZT10aGlzLnByb2Nlc3NDb21wbGV0ZUV2ZW50KGV2ZW50KTtpZihzbGljZSE9PXVuZGVmaW5lZCYmZXZlbnQuYmluZF9pZCE9PXVuZGVmaW5lZCl7dGhpcy5wcm9jZXNzRmxvd0V2ZW50KGV2ZW50LHNsaWNlKTt9CmJyZWFrO30KY2FzZSdiJzpjYXNlJ2UnOmNhc2Unbic6Y2FzZSdTJzpjYXNlJ0YnOmNhc2UnVCc6Y2FzZSdwJzptb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCdhc3luYycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzQXN5bmNFdmVudChldmVudCk7YnJlYWs7Y2FzZSdJJzpjYXNlJ2knOmNhc2UnUic6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnaW5zdGFudCcsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzSW5zdGFudEV2ZW50KGV2ZW50KTticmVhaztjYXNlJ1AnOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ3NhbXBsZXMnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc1RyYWNlU2FtcGxlRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnQyc6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnY291bnRlcnMnLGV2ZW50LmNhdCxldmVudC5uYW1lLGV2ZW50LnRzLGV2ZW50U2l6ZUluQnl0ZXMpO3RoaXMucHJvY2Vzc0NvdW50ZXJFdmVudChldmVudCk7YnJlYWs7Y2FzZSdNJzptb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCdtZXRhZGF0YScsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzTWV0YWRhdGFFdmVudChldmVudCk7YnJlYWs7Y2FzZSdOJzpjYXNlJ0QnOmNhc2UnTyc6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnb2JqZWN0cycsZXZlbnQuY2F0LGV2ZW50Lm5hbWUsZXZlbnQudHMsZXZlbnRTaXplSW5CeXRlcyk7dGhpcy5wcm9jZXNzT2JqZWN0RXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2Uncyc6Y2FzZSd0JzpjYXNlJ2YnOm1vZGVsU3RhdHMud2lsbFByb2Nlc3NCYXNpY1RyYWNlRXZlbnQoJ2Zsb3dzJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLnByb2Nlc3NGbG93RXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2Undic6bW9kZWxTdGF0cy53aWxsUHJvY2Vzc0Jhc2ljVHJhY2VFdmVudCgnbWVtb3J5X2R1bXBzJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLnByb2Nlc3NNZW1vcnlEdW1wRXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnKCc6Y2FzZScpJzp0aGlzLnByb2Nlc3NDb250ZXh0RXZlbnQoZXZlbnQpO2JyZWFrO2Nhc2UnYyc6YnJlYWs7ZGVmYXVsdDptb2RlbFN0YXRzLndpbGxQcm9jZXNzQmFzaWNUcmFjZUV2ZW50KCd1bmtub3duJyxldmVudC5jYXQsZXZlbnQubmFtZSxldmVudC50cyxldmVudFNpemVJbkJ5dGVzKTt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVW5yZWNvZ25pemVkIGV2ZW50IHBoYXNlOiAnKwpldmVudC5waCsnICgnK2V2ZW50Lm5hbWUrJyknfSk7fQpyZXR1cm4gb2JvZS5kcm9wO30saW1wb3J0U3RhY2tGcmFtZXNfKHJhd1N0YWNrRnJhbWVzLGlkUHJlZml4KXtjb25zdCBtb2RlbD10aGlzLm1vZGVsXztmb3IoY29uc3QgaWQgaW4gcmF3U3RhY2tGcmFtZXMpe2NvbnN0IHJhd1N0YWNrRnJhbWU9cmF3U3RhY2tGcmFtZXNbaWRdO2NvbnN0IGZ1bGxJZD1pZFByZWZpeCtpZDtjb25zdCB0ZXh0Rm9yQ29sb3I9cmF3U3RhY2tGcmFtZS5jYXRlZ29yeT9yYXdTdGFja0ZyYW1lLmNhdGVnb3J5OnJhd1N0YWNrRnJhbWUubmFtZTtjb25zdCBzdGFja0ZyYW1lPW5ldyB0ci5tb2RlbC5TdGFja0ZyYW1lKHVuZGVmaW5lZCxmdWxsSWQscmF3U3RhY2tGcmFtZS5uYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyh0ZXh0Rm9yQ29sb3IpKTttb2RlbC5hZGRTdGFja0ZyYW1lKHN0YWNrRnJhbWUpO30KZm9yKGNvbnN0IGlkIGluIHJhd1N0YWNrRnJhbWVzKXtjb25zdCBmdWxsSWQ9aWRQcmVmaXgraWQ7Y29uc3Qgc3RhY2tGcmFtZT1tb2RlbC5zdGFja0ZyYW1lc1tmdWxsSWRdO2lmKHN0YWNrRnJhbWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3InKTt9CmNvbnN0IHJhd1N0YWNrRnJhbWU9cmF3U3RhY2tGcmFtZXNbaWRdO2NvbnN0IHBhcmVudElkPXJhd1N0YWNrRnJhbWUucGFyZW50O2xldCBwYXJlbnRTdGFja0ZyYW1lO2lmKHBhcmVudElkPT09dW5kZWZpbmVkKXtwYXJlbnRTdGFja0ZyYW1lPXVuZGVmaW5lZDt9ZWxzZXtjb25zdCBwYXJlbnRGdWxsSWQ9aWRQcmVmaXgrcGFyZW50SWQ7cGFyZW50U3RhY2tGcmFtZT1tb2RlbC5zdGFja0ZyYW1lc1twYXJlbnRGdWxsSWRdO2lmKHBhcmVudFN0YWNrRnJhbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21ldGFkYXRhX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNaXNzaW5nIHBhcmVudCBmcmFtZSB3aXRoIElEICcrcGFyZW50RnVsbElkKycgZm9yIHN0YWNrIGZyYW1lIFwnJytzdGFja0ZyYW1lLm5hbWUrJ1wnIChJRCAnK2Z1bGxJZCsnKS4nfSk7fX0Kc3RhY2tGcmFtZS5wYXJlbnRGcmFtZT1wYXJlbnRTdGFja0ZyYW1lO30KY29uc3QgUHJvZmlsZU5vZGVUeXBlPXRyLm1vZGVsLlByb2ZpbGVOb2RlLnN1YlR5cGVzLmdldENvbnN0cnVjdG9yKHVuZGVmaW5lZCwnbGVnYWN5U2FtcGxlJyk7aWYoaWRQcmVmaXg9PT0nZycpe2Zvcihjb25zdCBpZCBpbiByYXdTdGFja0ZyYW1lcyl7Y29uc3QgcmF3U3RhY2tGcmFtZT1yYXdTdGFja0ZyYW1lc1tpZF07Y29uc3QgdGV4dEZvckNvbG9yPXJhd1N0YWNrRnJhbWUuY2F0ZWdvcnk/cmF3U3RhY2tGcmFtZS5jYXRlZ29yeTpyYXdTdGFja0ZyYW1lLm5hbWU7Y29uc3Qgbm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5hZGQobmV3IFByb2ZpbGVOb2RlVHlwZSgnZycraWQse2Z1bmN0aW9uTmFtZTpyYXdTdGFja0ZyYW1lLm5hbWV9LHVuZGVmaW5lZCkpO25vZGUuY29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcodGV4dEZvckNvbG9yKTtub2RlLnBhcmVudElkPXJhd1N0YWNrRnJhbWUucGFyZW50O30KZm9yKGNvbnN0IGlkIGluIHJhd1N0YWNrRnJhbWVzKXtjb25zdCBub2RlPXRoaXMuc3RhY2tGcmFtZVRyZWVfLmdldE5vZGUoJ2cnK2lkKTtjb25zdCBwYXJlbnRJZD1ub2RlLnBhcmVudElkO2xldCBwYXJlbnROb2RlPXVuZGVmaW5lZDtpZihwYXJlbnRJZCE9PXVuZGVmaW5lZCl7cGFyZW50Tm9kZT10aGlzLnN0YWNrRnJhbWVUcmVlXy5nZXROb2RlKCdnJytwYXJlbnRJZCk7aWYocGFyZW50Tm9kZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWV0YWRhdGFfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01pc3NpbmcgcGFyZW50IGZyYW1lIHdpdGggSUQgJytwYXJlbnRJZCsnIGZvciBzdGFjayBmcmFtZSBcJycrbm9kZS5uYW1lKydcJyAoSUQgJytub2RlLmlkKycpLid9KTt9Cm5vZGUucGFyZW50Tm9kZT1wYXJlbnROb2RlO319fX0saW1wb3J0T2JqZWN0VHlwZU5hbWVNYXBfKHJhd09iamVjdFR5cGVOYW1lTWFwLHBpZCl7aWYocGlkIGluIHRoaXMub2JqZWN0VHlwZU5hbWVNYXBfKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZXRhZGF0YV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTWFwcGluZyBmcm9tIG9iamVjdCB0eXBlIElEcyB0byBuYW1lcyBwcm92aWRlZCBmb3IgcGlkPScrCnBpZCsnIG11bHRpcGxlIHRpbWVzLid9KTtyZXR1cm47fQpsZXQgb2JqZWN0VHlwZU5hbWVQcmVmaXg9dW5kZWZpbmVkO2xldCBvYmplY3RUeXBlTmFtZVN1ZmZpeD11bmRlZmluZWQ7Y29uc3Qgb2JqZWN0VHlwZU5hbWVNYXA9e307Zm9yKGNvbnN0IG9iamVjdFR5cGVJZCBpbiByYXdPYmplY3RUeXBlTmFtZU1hcCl7Y29uc3QgcmF3T2JqZWN0VHlwZU5hbWU9cmF3T2JqZWN0VHlwZU5hbWVNYXBbb2JqZWN0VHlwZUlkXTtpZihvYmplY3RUeXBlTmFtZVByZWZpeD09PXVuZGVmaW5lZCl7Zm9yKGxldCBpPTA7aTxPQkpFQ1RfVFlQRV9OQU1FX1BBVFRFUk5TLmxlbmd0aDtpKyspe2NvbnN0IHBhdHRlcm49T0JKRUNUX1RZUEVfTkFNRV9QQVRURVJOU1tpXTtpZihyYXdPYmplY3RUeXBlTmFtZS5zdGFydHNXaXRoKHBhdHRlcm4ucHJlZml4KSYmcmF3T2JqZWN0VHlwZU5hbWUuZW5kc1dpdGgocGF0dGVybi5zdWZmaXgpKXtvYmplY3RUeXBlTmFtZVByZWZpeD1wYXR0ZXJuLnByZWZpeDtvYmplY3RUeXBlTmFtZVN1ZmZpeD1wYXR0ZXJuLnN1ZmZpeDticmVhazt9fX0KaWYob2JqZWN0VHlwZU5hbWVQcmVmaXghPT11bmRlZmluZWQmJnJhd09iamVjdFR5cGVOYW1lLnN0YXJ0c1dpdGgob2JqZWN0VHlwZU5hbWVQcmVmaXgpJiZyYXdPYmplY3RUeXBlTmFtZS5lbmRzV2l0aChvYmplY3RUeXBlTmFtZVN1ZmZpeCkpe29iamVjdFR5cGVOYW1lTWFwW29iamVjdFR5cGVJZF09cmF3T2JqZWN0VHlwZU5hbWUuc3Vic3RyaW5nKG9iamVjdFR5cGVOYW1lUHJlZml4Lmxlbmd0aCxyYXdPYmplY3RUeXBlTmFtZS5sZW5ndGgtb2JqZWN0VHlwZU5hbWVTdWZmaXgubGVuZ3RoKTt9ZWxzZXtvYmplY3RUeXBlTmFtZU1hcFtvYmplY3RUeXBlSWRdPXJhd09iamVjdFR5cGVOYW1lO319CnRoaXMub2JqZWN0VHlwZU5hbWVNYXBfW3BpZF09b2JqZWN0VHlwZU5hbWVNYXA7fSxpbXBvcnRBbm5vdGF0aW9uc18oKXtmb3IoY29uc3QgaWQgaW4gdGhpcy50cmFjZUFubm90YXRpb25zXyl7Y29uc3QgYW5ub3RhdGlvbj10ci5tb2RlbC5Bbm5vdGF0aW9uLmZyb21EaWN0SWZQb3NzaWJsZSh0aGlzLnRyYWNlQW5ub3RhdGlvbnNfW2lkXSk7aWYoIWFubm90YXRpb24pe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Fubm90YXRpb25fd2FybmluZycsbWVzc2FnZTonVW5yZWNvZ25pemVkIHRyYWNlQW5ub3RhdGlvbiB0eXBlTmFtZSBcIicrCnRoaXMudHJhY2VBbm5vdGF0aW9uc19baWRdLnR5cGVOYW1lKydcIid9KTtjb250aW51ZTt9CnRoaXMubW9kZWxfLmFkZEFubm90YXRpb24oYW5ub3RhdGlvbik7fX0sZmluYWxpemVJbXBvcnQoKXtpZih0aGlzLnNvZnR3YXJlTWVhc3VyZWRDcHVDb3VudF8hPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmtlcm5lbC5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnQ9dGhpcy5zb2Z0d2FyZU1lYXN1cmVkQ3B1Q291bnRfO30KdGhpcy5jcmVhdGVGbG93U2xpY2VzXygpO3RoaXMuY3JlYXRlRXhwbGljaXRPYmplY3RzXygpO3RoaXMuY3JlYXRlSW1wbGljaXRPYmplY3RzXygpO3RoaXMuY3JlYXRlTWVtb3J5RHVtcHNfKCk7fSxnZXRTdGFja0ZyYW1lRm9yRXZlbnRfKGV2ZW50LG9wdF9sb29rRm9yRW5kRXZlbnQpe2xldCBzZjtsZXQgc3RhY2s7aWYob3B0X2xvb2tGb3JFbmRFdmVudCl7c2Y9ZXZlbnQuZXNmO3N0YWNrPWV2ZW50LmVzdGFjazt9ZWxzZXtzZj1ldmVudC5zZjtzdGFjaz1ldmVudC5zdGFjazt9CmlmKHN0YWNrIT09dW5kZWZpbmVkJiZzZiE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonc3RhY2tfZnJhbWVfYW5kX3N0YWNrX2Vycm9yJyxtZXNzYWdlOidFdmVudCBhdCAnK2V2ZW50LnRzKycgY2Fubm90IGhhdmUgYm90aCBhIHN0YWNrIGFuZCBhIHN0YWNrZnJhbWUuJ30pO3JldHVybiB1bmRlZmluZWQ7fQppZihzdGFjayE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMubW9kZWxfLnJlc29sdmVTdGFja1RvU3RhY2tGcmFtZV8oZXZlbnQucGlkLHN0YWNrKTt9CmlmKHNmPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc3RhY2tGcmFtZT10aGlzLm1vZGVsXy5zdGFja0ZyYW1lc1snZycrc2ZdO2lmKHN0YWNrRnJhbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3NhbXBsZV9pbXBvcnRfZXJyb3InLG1lc3NhZ2U6J05vIGZyYW1lIGZvciAnK3NmfSk7cmV0dXJuO30KcmV0dXJuIHN0YWNrRnJhbWU7fSxyZXNvbHZlU3RhY2tUb1N0YWNrRnJhbWVfKHBpZCxzdGFjayl7cmV0dXJuIHVuZGVmaW5lZDt9LGltcG9ydFNhbXBsZURhdGEoKXtpZighdGhpcy5zYW1wbGVFdmVudHNfKXJldHVybjtjb25zdCBtPXRoaXMubW9kZWxfO2NvbnN0IGV2ZW50cz10aGlzLnNhbXBsZUV2ZW50c187aWYodGhpcy5oYXNFdmVudHNfPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2ltcG9ydEV2ZW50cyBpcyBub3QgcnVuIGJlZm9yZSBpbXBvcnRTYW1wbGVEYXRhJyk7fWVsc2UgaWYoIXRoaXMuaGFzRXZlbnRzXyl7Zm9yKGxldCBpPTA7aTxldmVudHMubGVuZ3RoO2krKyl7Y29uc3QgZXZlbnQ9ZXZlbnRzW2ldO20uZ2V0T3JDcmVhdGVQcm9jZXNzKGV2ZW50LnRpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoZXZlbnQudGlkKTt9fQpjb25zdCB0aHJlYWRzQnlUaWQ9e307bS5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0KXt0aHJlYWRzQnlUaWRbdC50aWRdPXQ7fSk7Zm9yKGxldCBpPTA7aTxldmVudHMubGVuZ3RoO2krKyl7Y29uc3QgZXZlbnQ9ZXZlbnRzW2ldO2NvbnN0IHRocmVhZD10aHJlYWRzQnlUaWRbZXZlbnQudGlkXTtpZih0aHJlYWQ9PT11bmRlZmluZWQpe20uaW1wb3J0V2FybmluZyh7dHlwZTonc2FtcGxlX2ltcG9ydF9lcnJvcicsbWVzc2FnZTonVGhyZWFkICcrZXZlbnRzLnRpZCsnbm90IGZvdW5kJ30pO2NvbnRpbnVlO30KbGV0IGNwdTtpZihldmVudC5jcHUhPT11bmRlZmluZWQpe2NwdT1tLmtlcm5lbC5nZXRPckNyZWF0ZUNwdShldmVudC5jcHUpO30KY29uc3QgbGVhZk5vZGU9dGhpcy5zdGFja0ZyYW1lVHJlZV8uZ2V0Tm9kZSgnZycrZXZlbnQuc2YpO2NvbnN0IHNhbXBsZT1uZXcgdHIubW9kZWwuU2FtcGxlKHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKSxldmVudC5uYW1lLGxlYWZOb2RlLHRocmVhZCxjcHUsZXZlbnQud2VpZ2h0KTttLnNhbXBsZXMucHVzaChzYW1wbGUpO319LGNyZWF0ZUFzeW5jU2xpY2VzXygpe2lmKHRoaXMuYWxsQXN5bmNFdmVudHNfLmxlbmd0aD09PTApcmV0dXJuO3RoaXMuYWxsQXN5bmNFdmVudHNfLnNvcnQoZnVuY3Rpb24oeCx5KXtjb25zdCBkPXguZXZlbnQudHMteS5ldmVudC50cztpZihkIT09MClyZXR1cm4gZDtyZXR1cm4geC5zZXF1ZW5jZU51bWJlci15LnNlcXVlbmNlTnVtYmVyO30pO2NvbnN0IGxlZ2FjeUV2ZW50cz1bXTtjb25zdCBuZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXk9e307Y29uc3QgbmVzdGFibGVNZWFzdXJlQXN5bmNFdmVudHNCeUtleT17fTtmb3IobGV0IGk9MDtpPHRoaXMuYWxsQXN5bmNFdmVudHNfLmxlbmd0aDtpKyspe2NvbnN0IGFzeW5jRXZlbnRTdGF0ZT10aGlzLmFsbEFzeW5jRXZlbnRzX1tpXTtjb25zdCBldmVudD1hc3luY0V2ZW50U3RhdGUuZXZlbnQ7aWYoZXZlbnQucGg9PT0nUyd8fGV2ZW50LnBoPT09J0YnfHxldmVudC5waD09PSdUJ3x8ZXZlbnQucGg9PT0ncCcpe2xlZ2FjeUV2ZW50cy5wdXNoKGFzeW5jRXZlbnRTdGF0ZSk7Y29udGludWU7fQppZihldmVudC5jYXQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidOZXN0YWJsZSBhc3luYyBldmVudHMgKHBoOiBiLCBlLCBvciBuKSByZXF1aXJlIGEgJysnY2F0IHBhcmFtZXRlci4nfSk7Y29udGludWU7fQppZihldmVudC5uYW1lPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTmVzdGFibGUgYXN5bmMgZXZlbnRzIChwaDogYiwgZSwgb3IgbikgcmVxdWlyZSBhICcrJ25hbWUgcGFyYW1ldGVyLid9KTtjb250aW51ZTt9CmNvbnN0IGlkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7aWYoaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidOZXN0YWJsZSBhc3luYyBldmVudHMgKHBoOiBiLCBlLCBvciBuKSByZXF1aXJlIGFuICcrJ2lkIHBhcmFtZXRlci4nfSk7Y29udGludWU7fQppZihldmVudC5jYXQ9PT0nYmxpbmsudXNlcl90aW1pbmcnKXtjb25zdCBtYXRjaGVkPU1FQVNVUkVfTkFNRV9SRUdFWC5leGVjKGV2ZW50Lm5hbWUpO2lmKG1hdGNoZWQhPT1udWxsKXtjb25zdCBrZXk9bWF0Y2hlZFsxXSsnOicrZXZlbnQuY2F0O3RyeXtldmVudC5hcmdzPUpTT04ucGFyc2UoQmFzZTY0LmF0b2IobWF0Y2hlZFszXSl8fCd7fScpO31jYXRjaChlKXt9CmlmKG5lc3RhYmxlTWVhc3VyZUFzeW5jRXZlbnRzQnlLZXlba2V5XT09PXVuZGVmaW5lZCl7bmVzdGFibGVNZWFzdXJlQXN5bmNFdmVudHNCeUtleVtrZXldPVtdO30KbmVzdGFibGVNZWFzdXJlQXN5bmNFdmVudHNCeUtleVtrZXldLnB1c2goYXN5bmNFdmVudFN0YXRlKTtjb250aW51ZTt9fQpjb25zdCBrZXk9ZXZlbnQuY2F0Kyc6JytpZC50b1N0cmluZ1dpdGhEZWxpbWl0ZXIoJzonKTtpZihuZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXlba2V5XT09PXVuZGVmaW5lZCl7bmVzdGFibGVBc3luY0V2ZW50c0J5S2V5W2tleV09W107fQpuZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXlba2V5XS5wdXNoKGFzeW5jRXZlbnRTdGF0ZSk7fQp0aGlzLmNyZWF0ZUxlZ2FjeUFzeW5jU2xpY2VzXyhsZWdhY3lFdmVudHMpO3RoaXMuY3JlYXRlTmVzdGFibGVBc3luY1NsaWNlc18obmVzdGFibGVNZWFzdXJlQXN5bmNFdmVudHNCeUtleSk7dGhpcy5jcmVhdGVOZXN0YWJsZUFzeW5jU2xpY2VzXyhuZXN0YWJsZUFzeW5jRXZlbnRzQnlLZXkpO30sY3JlYXRlTGVnYWN5QXN5bmNTbGljZV8oZXZlbnRzKXtjb25zdCBhc3luY0V2ZW50U3RhdGU9ZXZlbnRzW2V2ZW50cy5sZW5ndGgtMV07Y29uc3QgZXZlbnQ9YXN5bmNFdmVudFN0YXRlLmV2ZW50O2NvbnN0IG5hbWU9ZXZlbnQubmFtZTtjb25zdCBpZD1UcmFjZUV2ZW50SW1wb3J0ZXIuc2NvcGVkSWRGb3JFdmVudF8oZXZlbnQpO2NvbnN0IGtleT1pZC50b1N0cmluZ1dpdGhEZWxpbWl0ZXIoJzonKTtjb25zdCBhc3luY1NsaWNlQ29uc3RydWN0b3I9dHIubW9kZWwuQXN5bmNTbGljZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihldmVudHNbMF0uZXZlbnQuY2F0LG5hbWUpO2xldCBkdXJhdGlvbjtpZihldmVudC50cyE9PXVuZGVmaW5lZCl7ZHVyYXRpb249dGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMtZXZlbnRzWzBdLmV2ZW50LnRzKTt9CmNvbnN0IHNsaWNlPW5ldyBhc3luY1NsaWNlQ29uc3RydWN0b3IoZXZlbnRzWzBdLmV2ZW50LmNhdCxuYW1lLGdldEV2ZW50Q29sb3IoZXZlbnRzWzBdLmV2ZW50KSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudHNbMF0uZXZlbnQudHMpLE9iamVjdC5hc3NpZ24oe30sZXZlbnRzWzBdLmV2ZW50LmFyZ3MsZXZlbnQuYXJncyksZHVyYXRpb258fDAsdHJ1ZSx1bmRlZmluZWQsdW5kZWZpbmVkLGV2ZW50c1swXS5ldmVudC5hcmdzU3RyaXBwZWQpO2lmKGR1cmF0aW9uPT09dW5kZWZpbmVkKXtzbGljZS5kaWROb3RGaW5pc2g9dHJ1ZTtzbGljZS5lcnJvcj0nU2xpY2UgaGFzIG5vIG1hdGNoaW5nIEVORC4gRW5kIHRpbWUgaGFzIGJlZW4gYWRqdXN0ZWQuJzt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTGVnYWN5IGFzeW5jIEJFR0lOIGV2ZW50IGF0ICcrCmV2ZW50c1swXS5ldmVudC50cysnIHdpdGggbmFtZT0iJysKbmFtZSsnIiBhbmQgaWQ9JytrZXkrJyB3YXMgdW5tYXRjaGVkLid9KTt9CnNsaWNlLnN0YXJ0VGhyZWFkPWV2ZW50c1swXS50aHJlYWQ7c2xpY2UuZW5kVGhyZWFkPWFzeW5jRXZlbnRTdGF0ZS50aHJlYWQ7c2xpY2UuaWQ9a2V5O2NvbnN0IHN0ZXBUeXBlPWV2ZW50c1sxXS5ldmVudC5waDtsZXQgaXNWYWxpZD10cnVlO2ZvcihsZXQgaj0xO2o8ZXZlbnRzLmxlbmd0aC0xOysrail7aWYoZXZlbnRzW2pdLmV2ZW50LnBoPT09J1QnfHxldmVudHNbal0uZXZlbnQucGg9PT0ncCcpe2lzVmFsaWQ9dGhpcy5hc3NlcnRTdGVwVHlwZU1hdGNoZXNfKHN0ZXBUeXBlLGV2ZW50c1tqXSk7aWYoIWlzVmFsaWQpYnJlYWs7fQppZihldmVudHNbal0uZXZlbnQucGg9PT0nUycpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBdCAnK2V2ZW50c1tqXS5ldmVudC50cysnLCBhIHNsaWNlIG5hbWVkICInKwpuYW1lKyciIHdpdGggaWQ9JytpZCsnIGhhZCBhIHN0ZXAgYmVmb3JlIHRoZSBzdGFydCBldmVudC4nfSk7Y29udGludWU7fQppZihldmVudHNbal0uZXZlbnQucGg9PT0nRicpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBdCAnK2V2ZW50c1tqXS5ldmVudC50cysnLCBhIHNsaWNlIG5hbWVkICcrCm5hbWUrJyB3aXRoIGlkPScraWQrJyBoYWQgYSBzdGVwIGFmdGVyIHRoZSBmaW5pc2ggZXZlbnQuJ30pO2NvbnRpbnVlO30KY29uc3Qgc3RhcnRJbmRleD1qKyhzdGVwVHlwZT09PSdUJz8wOi0xKTtjb25zdCBlbmRJbmRleD1zdGFydEluZGV4KzE7bGV0IHN1Yk5hbWU9bmFtZTtpZighZXZlbnRzW2pdLmV2ZW50LmFyZ3NTdHJpcHBlZCYmKGV2ZW50c1tqXS5ldmVudC5waD09PSdUJ3x8ZXZlbnRzW2pdLmV2ZW50LnBoPT09J3AnKSl7c3ViTmFtZT1ldmVudHNbal0uZXZlbnQuYXJncy5zdGVwO30KY29uc3QgYXN5bmNTbGljZUNvbnN0cnVjdG9yPXRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoZXZlbnRzWzBdLmV2ZW50LmNhdCxzdWJOYW1lKTtsZXQgZHVyYXRpb247aWYoZXZlbnRzW2VuZEluZGV4XS5ldmVudC50cyE9PXVuZGVmaW5lZCl7ZHVyYXRpb249dGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnRzW2VuZEluZGV4XS5ldmVudC50cy1ldmVudHNbc3RhcnRJbmRleF0uZXZlbnQudHMpO30KY29uc3Qgc3ViU2xpY2U9bmV3IGFzeW5jU2xpY2VDb25zdHJ1Y3RvcihldmVudHNbMF0uZXZlbnQuY2F0LHN1Yk5hbWUsZ2V0RXZlbnRDb2xvcihldmVudHNbMF0uZXZlbnQsc3ViTmFtZStqKSx0aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudHNbc3RhcnRJbmRleF0uZXZlbnQudHMpLHRoaXMuZGVlcENvcHlJZk5lZWRlZF8oZXZlbnRzW2pdLmV2ZW50LmFyZ3MpLGR1cmF0aW9ufHwwLHVuZGVmaW5lZCx1bmRlZmluZWQsZXZlbnRzW3N0YXJ0SW5kZXhdLmV2ZW50LmFyZ3NTdHJpcHBlZCk7aWYoZHVyYXRpb249PT11bmRlZmluZWQpe3N1YlNsaWNlLmRpZE5vdEZpbmlzaD10cnVlO3N1YlNsaWNlLmVycm9yPSdTbGljZSBoYXMgbm8gbWF0Y2hpbmcgRU5ELiBFbmQgdGltZSBoYXMgYmVlbiBhZGp1c3RlZC4nO30Kc3ViU2xpY2Uuc3RhcnRUaHJlYWQ9ZXZlbnRzW3N0YXJ0SW5kZXhdLnRocmVhZDtzdWJTbGljZS5lbmRUaHJlYWQ9ZXZlbnRzW2VuZEluZGV4XS50aHJlYWQ7c3ViU2xpY2UuaWQ9a2V5O3NsaWNlLnN1YlNsaWNlcy5wdXNoKHN1YlNsaWNlKTt9CmlmKGlzVmFsaWQpe3NsaWNlLnN0YXJ0VGhyZWFkLmFzeW5jU2xpY2VHcm91cC5wdXNoKHNsaWNlKTt9fSxjcmVhdGVMZWdhY3lBc3luY1NsaWNlc18obGVnYWN5RXZlbnRzKXtpZihsZWdhY3lFdmVudHMubGVuZ3RoPT09MClyZXR1cm47bGVnYWN5RXZlbnRzLnNvcnQoZnVuY3Rpb24oeCx5KXtjb25zdCBkPXguZXZlbnQudHMteS5ldmVudC50cztpZihkIT09MClyZXR1cm4gZDtyZXR1cm4geC5zZXF1ZW5jZU51bWJlci15LnNlcXVlbmNlTnVtYmVyO30pO2NvbnN0IGFzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSUQ9e307Zm9yKGxldCBpPTA7aTxsZWdhY3lFdmVudHMubGVuZ3RoO2krKyl7Y29uc3QgYXN5bmNFdmVudFN0YXRlPWxlZ2FjeUV2ZW50c1tpXTtjb25zdCBldmVudD1hc3luY0V2ZW50U3RhdGUuZXZlbnQ7Y29uc3QgbmFtZT1ldmVudC5uYW1lO2lmKG5hbWU9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBc3luYyBldmVudHMgKHBoOiBTLCBULCBwLCBvciBGKSByZXF1aXJlIGEgbmFtZSAnKycgcGFyYW1ldGVyLid9KTtjb250aW51ZTt9CmNvbnN0IGlkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudCk7aWYoaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBc3luYyBldmVudHMgKHBoOiBTLCBULCBwLCBvciBGKSByZXF1aXJlIGFuIGlkIHBhcmFtZXRlci4nfSk7Y29udGludWU7fQpjb25zdCBrZXk9aWQudG9TdHJpbmdXaXRoRGVsaW1pdGVyKCc6Jyk7aWYoZXZlbnQucGg9PT0nUycpe2lmKGFzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSURbbmFtZV09PT11bmRlZmluZWQpe2FzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSURbbmFtZV09e307fQppZihhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdW2tleV0pe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBdCAnK2V2ZW50LnRzKycsIGEgc2xpY2Ugb2YgdGhlIHNhbWUgaWQgJytpZCsnIHdhcyBhbHJhZHkgb3Blbi4nfSk7Y29udGludWU7fQphc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdW2tleV09W107YXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRFtuYW1lXVtrZXldLnB1c2goYXN5bmNFdmVudFN0YXRlKTt9ZWxzZXtpZihhc3luY0V2ZW50U3RhdGVzQnlOYW1lVGhlbklEW25hbWVdPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTpgQXQgJHtldmVudC50c30sIG5vIHNsaWNlIG5hbWVkICIke25hbWV9IiB3YXMgb3Blbi5gLH0pO2NvbnRpbnVlO30KaWYoYXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRFtuYW1lXVtrZXldPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTpgQXQgJHtldmVudC50c30sIG5vIHNsaWNlIG5hbWVkICIke25hbWV9IiB3aXRoIGlkPSR7aWR9IHdhcyBgKydvcGVuLicsfSk7Y29udGludWU7fQpjb25zdCBldmVudHM9YXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRFtuYW1lXVtrZXldO2V2ZW50cy5wdXNoKGFzeW5jRXZlbnRTdGF0ZSk7aWYoZXZlbnQucGg9PT0nRicpe3RoaXMuY3JlYXRlTGVnYWN5QXN5bmNTbGljZV8oZXZlbnRzKTtkZWxldGUgYXN5bmNFdmVudFN0YXRlc0J5TmFtZVRoZW5JRFtuYW1lXVtrZXldO319fQpmb3IoY29uc3RbbmFtZSxzdGF0ZXNCeUlEXW9mCk9iamVjdC5lbnRyaWVzKGFzeW5jRXZlbnRTdGF0ZXNCeU5hbWVUaGVuSUQpKXtmb3IoY29uc3RbaWQsc3RhdGVzXW9mIE9iamVjdC5lbnRyaWVzKHN0YXRlc0J5SUQpKXtjb25zdCBzdGFydEV2ZW50PXN0YXRlc1swXS5ldmVudDtzdGF0ZXMucHVzaCh7c2VxdWVuY2VOdW1iZXI6MStzdGF0ZXNbc3RhdGVzLmxlbmd0aC0xXS5zZXF1ZW5jZU51bWJlcixldmVudDp7cGg6J0YnLG5hbWUsaWQ6c3RhcnRFdmVudC5pZCxpZDI6c3RhcnRFdmVudC5pZDIsc2NvcGU6c3RhcnRFdmVudC5zY29wZSxwaWQ6c3RhcnRFdmVudC5waWQsdGlkOnN0YXJ0RXZlbnQudGlkLGNhdDpzdGFydEV2ZW50LmNhdCxhcmdzOnt9LH0sdGhyZWFkOnRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhzdGFydEV2ZW50LnBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQoc3RhcnRFdmVudC50aWQpLH0pO3RoaXMuY3JlYXRlTGVnYWN5QXN5bmNTbGljZV8oc3RhdGVzKTt9fX0sY3JlYXRlTmVzdGFibGVBc3luY1NsaWNlc18obmVzdGFibGVFdmVudHNCeUtleSl7Zm9yKGNvbnN0IGtleSBpbiBuZXN0YWJsZUV2ZW50c0J5S2V5KXtjb25zdCBldmVudFN0YXRlRW50cmllcz1uZXN0YWJsZUV2ZW50c0J5S2V5W2tleV07Y29uc3QgcGFyZW50U3RhY2s9W107Zm9yKGxldCBpPTA7aTxldmVudFN0YXRlRW50cmllcy5sZW5ndGg7KytpKXtjb25zdCBldmVudFN0YXRlRW50cnk9ZXZlbnRTdGF0ZUVudHJpZXNbaV07aWYoZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnBoPT09J2UnKXtsZXQgcGFyZW50SW5kZXg9LTE7Zm9yKGxldCBrPXBhcmVudFN0YWNrLmxlbmd0aC0xO2s+PTA7LS1rKXtpZihwYXJlbnRTdGFja1trXS5ldmVudC5uYW1lPT09ZXZlbnRTdGF0ZUVudHJ5LmV2ZW50Lm5hbWUpe3BhcmVudEluZGV4PWs7YnJlYWs7fX0KaWYocGFyZW50SW5kZXg9PT0tMSl7ZXZlbnRTdGF0ZUVudHJ5LmZpbmlzaGVkPWZhbHNlO31lbHNle3BhcmVudFN0YWNrW3BhcmVudEluZGV4XS5lbmQ9ZXZlbnRTdGF0ZUVudHJ5O3doaWxlKHBhcmVudEluZGV4PHBhcmVudFN0YWNrLmxlbmd0aCl7cGFyZW50U3RhY2sucG9wKCk7fX19CmlmKHBhcmVudFN0YWNrLmxlbmd0aD4wKXtldmVudFN0YXRlRW50cnkucGFyZW50RW50cnk9cGFyZW50U3RhY2tbcGFyZW50U3RhY2subGVuZ3RoLTFdO30KaWYoZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnBoPT09J2InKXtwYXJlbnRTdGFjay5wdXNoKGV2ZW50U3RhdGVFbnRyeSk7fX0KY29uc3QgdG9wTGV2ZWxTbGljZXM9W107Zm9yKGxldCBpPTA7aTxldmVudFN0YXRlRW50cmllcy5sZW5ndGg7KytpKXtjb25zdCBldmVudFN0YXRlRW50cnk9ZXZlbnRTdGF0ZUVudHJpZXNbaV07aWYoZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnBoPT09J2UnJiZldmVudFN0YXRlRW50cnkuZmluaXNoZWQ9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KbGV0IHN0YXJ0U3RhdGU9dW5kZWZpbmVkO2xldCBlbmRTdGF0ZT11bmRlZmluZWQ7bGV0IHNsaWNlQXJncz1ldmVudFN0YXRlRW50cnkuZXZlbnQuYXJnc3x8e307bGV0IHNsaWNlRXJyb3I9dW5kZWZpbmVkO2NvbnN0IGlkPVRyYWNlRXZlbnRJbXBvcnRlci5zY29wZWRJZEZvckV2ZW50XyhldmVudFN0YXRlRW50cnkuZXZlbnQpO2lmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSduJyl7c3RhcnRTdGF0ZT1ldmVudFN0YXRlRW50cnk7ZW5kU3RhdGU9ZXZlbnRTdGF0ZUVudHJ5O31lbHNlIGlmKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5waD09PSdiJyl7aWYoZXZlbnRTdGF0ZUVudHJ5LmVuZD09PXVuZGVmaW5lZCl7ZXZlbnRTdGF0ZUVudHJ5LmVuZD1ldmVudFN0YXRlRW50cmllc1tldmVudFN0YXRlRW50cmllcy5sZW5ndGgtMV07c2xpY2VFcnJvcj0nU2xpY2UgaGFzIG5vIG1hdGNoaW5nIEVORC4gRW5kIHRpbWUgaGFzIGJlZW4gYWRqdXN0ZWQuJzt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidhc3luY19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonTmVzdGFibGUgYXN5bmMgQkVHSU4gZXZlbnQgYXQgJysKZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnRzKycgd2l0aCBuYW1lPSInKwpldmVudFN0YXRlRW50cnkuZXZlbnQubmFtZSsnIiBhbmQgaWQ9JytpZCsnIHdhcyB1bm1hdGNoZWQuJ30pO31lbHNle2Z1bmN0aW9uIGNvbmNhdGVuYXRlQXJndW1lbnRzKGFyZ3MxLGFyZ3MyKXtpZihhcmdzMS5wYXJhbXM9PT11bmRlZmluZWR8fGFyZ3MyLnBhcmFtcz09PXVuZGVmaW5lZCl7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYXJnczEsYXJnczIpO30KY29uc3QgYXJnczM9e307YXJnczMucGFyYW1zPU9iamVjdC5hc3NpZ24oe30sYXJnczEucGFyYW1zLGFyZ3MyLnBhcmFtcyk7cmV0dXJuIE9iamVjdC5hc3NpZ24oe30sYXJnczEsYXJnczIsYXJnczMpO30KY29uc3QgZW5kQXJncz1ldmVudFN0YXRlRW50cnkuZW5kLmV2ZW50LmFyZ3N8fHt9O3NsaWNlQXJncz1jb25jYXRlbmF0ZUFyZ3VtZW50cyhzbGljZUFyZ3MsZW5kQXJncyk7fQpzdGFydFN0YXRlPWV2ZW50U3RhdGVFbnRyeTtlbmRTdGF0ZT1ldmVudFN0YXRlRW50cnkuZW5kO31lbHNle3NsaWNlRXJyb3I9J1NsaWNlIGhhcyBubyBtYXRjaGluZyBCRUdJTi4gU3RhcnQgdGltZSBoYXMgYmVlbiBhZGp1c3RlZC4nO3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidOZXN0YWJsZSBhc3luYyBFTkQgZXZlbnQgYXQgJysKZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LnRzKycgd2l0aCBuYW1lPScrCmV2ZW50U3RhdGVFbnRyeS5ldmVudC5uYW1lKycgYW5kIGlkPScraWQrJyB3YXMgdW5tYXRjaGVkLid9KTtzdGFydFN0YXRlPWV2ZW50U3RhdGVFbnRyaWVzWzBdO2VuZFN0YXRlPWV2ZW50U3RhdGVFbnRyeTt9CmNvbnN0IGlzVG9wTGV2ZWw9KGV2ZW50U3RhdGVFbnRyeS5wYXJlbnRFbnRyeT09PXVuZGVmaW5lZCk7Y29uc3QgYXN5bmNTbGljZUNvbnN0cnVjdG9yPXRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoZXZlbnRTdGF0ZUVudHJ5LmV2ZW50LmNhdCxldmVudFN0YXRlRW50cnkuZXZlbnQubmFtZSk7bGV0IHRocmVhZFN0YXJ0PXVuZGVmaW5lZDtsZXQgdGhyZWFkRHVyYXRpb249dW5kZWZpbmVkO2lmKHN0YXJ0U3RhdGUuZXZlbnQudHRzJiZzdGFydFN0YXRlLmV2ZW50LnVzZV9hc3luY190dHMpe3RocmVhZFN0YXJ0PXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKHN0YXJ0U3RhdGUuZXZlbnQudHRzKTtpZihlbmRTdGF0ZS5ldmVudC50dHMpe2NvbnN0IHRocmVhZEVuZD10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhlbmRTdGF0ZS5ldmVudC50dHMpO3RocmVhZER1cmF0aW9uPXRocmVhZEVuZC10aHJlYWRTdGFydDt9fQpjb25zdCBzbGljZT1uZXcgYXN5bmNTbGljZUNvbnN0cnVjdG9yKGV2ZW50U3RhdGVFbnRyeS5ldmVudC5jYXQsZXZlbnRTdGF0ZUVudHJ5LmV2ZW50Lm5hbWUsZ2V0RXZlbnRDb2xvcihlbmRTdGF0ZS5ldmVudCksdGhpcy50b01vZGVsVGltZUZyb21Vc18oc3RhcnRTdGF0ZS5ldmVudC50cyksc2xpY2VBcmdzLHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGVuZFN0YXRlLmV2ZW50LnRzLXN0YXJ0U3RhdGUuZXZlbnQudHMpLGlzVG9wTGV2ZWwsdGhyZWFkU3RhcnQsdGhyZWFkRHVyYXRpb24sc3RhcnRTdGF0ZS5ldmVudC5hcmdzU3RyaXBwZWQpO3NsaWNlLnN0YXJ0VGhyZWFkPXN0YXJ0U3RhdGUudGhyZWFkO3NsaWNlLmVuZFRocmVhZD1lbmRTdGF0ZS50aHJlYWQ7c2xpY2Uuc3RhcnRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhzdGFydFN0YXRlLmV2ZW50KTtzbGljZS5lbmRTdGFja0ZyYW1lPXRoaXMuZ2V0U3RhY2tGcmFtZUZvckV2ZW50XyhlbmRTdGF0ZS5ldmVudCk7c2xpY2UuaWQ9a2V5O2lmKHNsaWNlRXJyb3IhPT11bmRlZmluZWQpe3NsaWNlLmVycm9yPXNsaWNlRXJyb3I7fQpldmVudFN0YXRlRW50cnkuc2xpY2U9c2xpY2U7aWYoaXNUb3BMZXZlbCl7dG9wTGV2ZWxTbGljZXMucHVzaChzbGljZSk7fWVsc2UgaWYoZXZlbnRTdGF0ZUVudHJ5LnBhcmVudEVudHJ5LnNsaWNlIT09dW5kZWZpbmVkKXtldmVudFN0YXRlRW50cnkucGFyZW50RW50cnkuc2xpY2Uuc3ViU2xpY2VzLnB1c2goc2xpY2UpO319CmZvcihsZXQgc2k9MDtzaTx0b3BMZXZlbFNsaWNlcy5sZW5ndGg7c2krKyl7dG9wTGV2ZWxTbGljZXNbc2ldLnN0YXJ0VGhyZWFkLmFzeW5jU2xpY2VHcm91cC5wdXNoKHRvcExldmVsU2xpY2VzW3NpXSk7fX19LGFzc2VydFN0ZXBUeXBlTWF0Y2hlc18oc3RlcFR5cGUsZXZlbnQpe2lmKHN0ZXBUeXBlIT09ZXZlbnQuZXZlbnQucGgpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2FzeW5jX3NsaWNlX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidBdCAnK2V2ZW50LmV2ZW50LnRzKycsIGEgc2xpY2UgbmFtZWQgJysKZXZlbnQuZXZlbnQubmFtZSsnIHdpdGggaWQ9JysKVHJhY2VFdmVudEltcG9ydGVyLnNjb3BlZElkRm9yRXZlbnRfKGV2ZW50LmV2ZW50KSsnIGhhZCBib3RoIGJlZ2luIGFuZCBlbmQgc3RlcHMsIHdoaWNoIGlzIG5vdCBhbGxvd2VkLid9KTtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9LHZhbGlkYXRlRmxvd0V2ZW50XyhldmVudCl7aWYoZXZlbnQubmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonRmxvdyBldmVudHMgKHBoOiBzLCB0IG9yIGYpIHJlcXVpcmUgYSBuYW1lIHBhcmFtZXRlci4nfSk7cmV0dXJuIGZhbHNlO30KaWYoZXZlbnQucGg9PT0ncyd8fGV2ZW50LnBoPT09J2YnfHxldmVudC5waD09PSd0Jyl7aWYoZXZlbnQuaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2VfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0Zsb3cgZXZlbnRzIChwaDogcywgdCBvciBmKSByZXF1aXJlIGFuIGlkIHBhcmFtZXRlci4nfSk7cmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fQppZihldmVudC5iaW5kX2lkKXtpZihldmVudC5mbG93X2luPT09dW5kZWZpbmVkJiZldmVudC5mbG93X291dD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9wYXJzZV9lcnJvcicsbWVzc2FnZTonRmxvdyBwcm9kdWNlciBvciBjb25zdW1lciByZXF1aXJlIGZsb3dfaW4gb3IgZmxvd19vdXQuJ30pO3JldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30sY3JlYXRlRmxvd1NsaWNlc18oKXtpZih0aGlzLmFsbEZsb3dFdmVudHNfLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGNyZWF0ZUZsb3dFdmVudD1mdW5jdGlvbih0aHJlYWQsZXZlbnQsb3B0X3NsaWNlKXtsZXQgc3RhcnRTbGljZTtsZXQgZmxvd0lkO2xldCBmbG93U3RhcnRUcztpZihldmVudC5iaW5kX2lkKXtzdGFydFNsaWNlPW9wdF9zbGljZTtmbG93SWQ9ZXZlbnQuYmluZF9pZDtmbG93U3RhcnRUcz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cytldmVudC5kdXIpO31lbHNle2NvbnN0IHRzPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKTtzdGFydFNsaWNlPXRocmVhZC5zbGljZUdyb3VwLmZpbmRTbGljZUF0VHModHMpO2lmKHN0YXJ0U2xpY2U9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtmbG93SWQ9ZXZlbnQuaWQ7Zmxvd1N0YXJ0VHM9dHM7fQpjb25zdCBmbG93RXZlbnQ9bmV3IHRyLm1vZGVsLkZsb3dFdmVudChldmVudC5jYXQsZmxvd0lkLGV2ZW50Lm5hbWUsZ2V0RXZlbnRDb2xvcihldmVudCksZmxvd1N0YXJ0VHMsdGhpcy5kZWVwQ29weUFsd2F5c18oZXZlbnQuYXJncykpO2Zsb3dFdmVudC5zdGFydFNsaWNlPXN0YXJ0U2xpY2U7Zmxvd0V2ZW50LnN0YXJ0U3RhY2tGcmFtZT10aGlzLmdldFN0YWNrRnJhbWVGb3JFdmVudF8oZXZlbnQpO2Zsb3dFdmVudC5lbmRTdGFja0ZyYW1lPXVuZGVmaW5lZDtzdGFydFNsaWNlLm91dEZsb3dFdmVudHMucHVzaChmbG93RXZlbnQpO3JldHVybiBmbG93RXZlbnQ7fS5iaW5kKHRoaXMpO2NvbnN0IGZpbmlzaEZsb3dFdmVudFdpdGg9ZnVuY3Rpb24oZmxvd0V2ZW50LHRocmVhZCxldmVudCxyZWZHdWlkLGJpbmRUb1BhcmVudCxvcHRfc2xpY2Upe2xldCBlbmRTbGljZTtpZihldmVudC5iaW5kX2lkKXtlbmRTbGljZT1vcHRfc2xpY2U7fWVsc2V7Y29uc3QgdHM9dGhpcy50b01vZGVsVGltZUZyb21Vc18oZXZlbnQudHMpO2lmKGJpbmRUb1BhcmVudCl7ZW5kU2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuZmluZFNsaWNlQXRUcyh0cyk7fWVsc2V7ZW5kU2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuZmluZE5leHRTbGljZUFmdGVyKHRzLHJlZkd1aWQpO30KaWYoZW5kU2xpY2U9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO30KZW5kU2xpY2UuaW5GbG93RXZlbnRzLnB1c2goZmxvd0V2ZW50KTtmbG93RXZlbnQuZW5kU2xpY2U9ZW5kU2xpY2U7Zmxvd0V2ZW50LmR1cmF0aW9uPXRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKGV2ZW50LnRzKS1mbG93RXZlbnQuc3RhcnQ7Zmxvd0V2ZW50LmVuZFN0YWNrRnJhbWU9dGhpcy5nZXRTdGFja0ZyYW1lRm9yRXZlbnRfKGV2ZW50KTt0aGlzLm1lcmdlQXJnc0ludG9fKGZsb3dFdmVudC5hcmdzLGV2ZW50LmFyZ3MsZmxvd0V2ZW50LnRpdGxlKTtyZXR1cm4gdHJ1ZTt9LmJpbmQodGhpcyk7Y29uc3QgcHJvY2Vzc0Zsb3dDb25zdW1lcj1mdW5jdGlvbihmbG93SWRUb0V2ZW50LHNsaWNlR3VpZFRvRXZlbnQsZXZlbnQsc2xpY2Upe2xldCBmbG93RXZlbnQ9Zmxvd0lkVG9FdmVudFtldmVudC5iaW5kX2lkXTtpZihmbG93RXZlbnQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfb3JkZXJpbmdfZXJyb3InLG1lc3NhZ2U6J0Zsb3cgY29uc3VtZXIgJytldmVudC5iaW5kX2lkKycgZG9lcyBub3QgaGF2ZSAnKydhIGZsb3cgcHJvZHVjZXInfSk7cmV0dXJuIGZhbHNlO31lbHNlIGlmKGZsb3dFdmVudC5lbmRTbGljZSl7Y29uc3QgZmxvd1Byb2R1Y2VyPWZsb3dFdmVudC5zdGFydFNsaWNlO2Zsb3dFdmVudD1jcmVhdGVGbG93RXZlbnQodW5kZWZpbmVkLHNsaWNlR3VpZFRvRXZlbnRbZmxvd1Byb2R1Y2VyLmd1aWRdLGZsb3dQcm9kdWNlcik7fQpjb25zdCByZWZHdWlkPXVuZGVmaW5lZDtjb25zdCBvaz1maW5pc2hGbG93RXZlbnRXaXRoKGZsb3dFdmVudCx1bmRlZmluZWQsZXZlbnQscmVmR3VpZCx1bmRlZmluZWQsc2xpY2UpO2lmKG9rKXt0aGlzLm1vZGVsXy5mbG93RXZlbnRzLnB1c2goZmxvd0V2ZW50KTt9ZWxzZXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX2VuZF9lcnJvcicsbWVzc2FnZTonRmxvdyBjb25zdW1lciAnK2V2ZW50LmJpbmRfaWQrJyBkb2VzIG5vdCBlbmQgJysnYXQgYW4gYWN0dWFsIHNsaWNlLCBzbyBjYW5ub3QgYmUgY3JlYXRlZC4nfSk7cmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fS5iaW5kKHRoaXMpO2NvbnN0IHByb2Nlc3NGbG93UHJvZHVjZXI9ZnVuY3Rpb24oZmxvd0lkVG9FdmVudCxmbG93U3RhdHVzLGV2ZW50LHNsaWNlKXtpZihmbG93SWRUb0V2ZW50W2V2ZW50LmJpbmRfaWRdJiZmbG93U3RhdHVzW2V2ZW50LmJpbmRfaWRdKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidmbG93X3NsaWNlX3N0YXJ0X2Vycm9yJyxtZXNzYWdlOidGbG93IHByb2R1Y2VyICcrZXZlbnQuYmluZF9pZCsnIGFscmVhZHkgc2Vlbid9KTtyZXR1cm4gZmFsc2U7fQpjb25zdCBmbG93RXZlbnQ9Y3JlYXRlRmxvd0V2ZW50KHVuZGVmaW5lZCxldmVudCxzbGljZSk7aWYoIWZsb3dFdmVudCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9zdGFydF9lcnJvcicsbWVzc2FnZTonRmxvdyBwcm9kdWNlciAnK2V2ZW50LmJpbmRfaWQrJyBkb2VzIG5vdCBzdGFydCcrJ2EgZmxvdyd9KTtyZXR1cm4gZmFsc2U7fQpmbG93SWRUb0V2ZW50W2V2ZW50LmJpbmRfaWRdPWZsb3dFdmVudDt9LmJpbmQodGhpcyk7dGhpcy5hbGxGbG93RXZlbnRzXy5zb3J0KGZ1bmN0aW9uKHgseSl7Y29uc3QgZD14LmV2ZW50LnRzLXkuZXZlbnQudHM7aWYoZCE9PTApcmV0dXJuIGQ7cmV0dXJuIHguc2VxdWVuY2VOdW1iZXIteS5zZXF1ZW5jZU51bWJlcjt9KTtjb25zdCBmbG93SWRUb0V2ZW50PXt9O2NvbnN0IHNsaWNlR3VpZFRvRXZlbnQ9e307Y29uc3QgZmxvd1N0YXR1cz17fTtmb3IobGV0IGk9MDtpPHRoaXMuYWxsRmxvd0V2ZW50c18ubGVuZ3RoOysraSl7Y29uc3QgZGF0YT10aGlzLmFsbEZsb3dFdmVudHNfW2ldO2NvbnN0IHJlZkd1aWQ9ZGF0YS5yZWZHdWlkO2NvbnN0IGV2ZW50PWRhdGEuZXZlbnQ7Y29uc3QgdGhyZWFkPWRhdGEudGhyZWFkO2lmKCF0aGlzLnZhbGlkYXRlRmxvd0V2ZW50XyhldmVudCkpY29udGludWU7aWYoZXZlbnQuYmluZF9pZCl7Y29uc3Qgc2xpY2U9ZGF0YS5zbGljZTtzbGljZUd1aWRUb0V2ZW50W3NsaWNlLmd1aWRdPWV2ZW50O2lmKGV2ZW50LmZsb3dQaGFzZT09PVBST0RVQ0VSKXtpZighcHJvY2Vzc0Zsb3dQcm9kdWNlcihmbG93SWRUb0V2ZW50LGZsb3dTdGF0dXMsZXZlbnQsc2xpY2UpKXtjb250aW51ZTt9CmZsb3dTdGF0dXNbZXZlbnQuYmluZF9pZF09dHJ1ZTt9ZWxzZXtpZighcHJvY2Vzc0Zsb3dDb25zdW1lcihmbG93SWRUb0V2ZW50LHNsaWNlR3VpZFRvRXZlbnQsZXZlbnQsc2xpY2UpKXtjb250aW51ZTt9CmZsb3dTdGF0dXNbZXZlbnQuYmluZF9pZF09ZmFsc2U7aWYoZXZlbnQuZmxvd1BoYXNlPT09U1RFUCl7aWYoIXByb2Nlc3NGbG93UHJvZHVjZXIoZmxvd0lkVG9FdmVudCxmbG93U3RhdHVzLGV2ZW50LHNsaWNlKSl7Y29udGludWU7fQpmbG93U3RhdHVzW2V2ZW50LmJpbmRfaWRdPXRydWU7fX0KY29udGludWU7fQpjb25zdCBmdWxsRmxvd0lkPUpTT04uc3RyaW5naWZ5KHtpZDpldmVudC5pZCxjYXQ6ZXZlbnQuY2F0LG5hbWU6ZXZlbnQubmFtZX0pO2xldCBmbG93RXZlbnQ7aWYoZXZlbnQucGg9PT0ncycpe2lmKGZsb3dJZFRvRXZlbnRbZnVsbEZsb3dJZF0pe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfc3RhcnRfZXJyb3InLG1lc3NhZ2U6J2V2ZW50IGlkICcrZXZlbnQuaWQrJyBhbHJlYWR5IHNlZW4gd2hlbiAnKydlbmNvdW50ZXJpbmcgc3RhcnQgb2YgZmxvdyBldmVudC4nfSk7Y29udGludWU7fQpmbG93RXZlbnQ9Y3JlYXRlRmxvd0V2ZW50KHRocmVhZCxldmVudCk7aWYoIWZsb3dFdmVudCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9zdGFydF9lcnJvcicsbWVzc2FnZTonZXZlbnQgaWQgJytldmVudC5pZCsnIGRvZXMgbm90IHN0YXJ0ICcrJ2F0IGFuIGFjdHVhbCBzbGljZSwgc28gY2Fubm90IGJlIGNyZWF0ZWQuJ30pO2NvbnRpbnVlO30KZmxvd0lkVG9FdmVudFtmdWxsRmxvd0lkXT1mbG93RXZlbnQ7fWVsc2UgaWYoZXZlbnQucGg9PT0ndCd8fGV2ZW50LnBoPT09J2YnKXtmbG93RXZlbnQ9Zmxvd0lkVG9FdmVudFtmdWxsRmxvd0lkXTtpZihmbG93RXZlbnQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2Zsb3dfc2xpY2Vfb3JkZXJpbmdfZXJyb3InLG1lc3NhZ2U6J0ZvdW5kIGZsb3cgcGhhc2UgJytldmVudC5waCsnIGZvciBpZDogJytldmVudC5pZCsnIGJ1dCBubyBmbG93IHN0YXJ0IGZvdW5kLid9KTtjb250aW51ZTt9CmxldCBiaW5kVG9QYXJlbnQ9ZXZlbnQucGg9PT0ndCc7aWYoZXZlbnQucGg9PT0nZicpe2lmKGV2ZW50LmJwPT09dW5kZWZpbmVkKXtpZihldmVudC5jYXQuaW5kZXhPZignaW5wdXQnKT4tMSl7YmluZFRvUGFyZW50PXRydWU7fWVsc2UgaWYoZXZlbnQuY2F0LmluZGV4T2YoJ2lwYy5mbG93Jyk+LTEpe2JpbmRUb1BhcmVudD10cnVlO319ZWxzZXtpZihldmVudC5icCE9PSdlJyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9iaW5kX3BvaW50X2Vycm9yJyxtZXNzYWdlOidGbG93IGV2ZW50IHdpdGggaW52YWxpZCBiaW5kaW5nIHBvaW50IChldmVudC5icCkuJ30pO2NvbnRpbnVlO30KYmluZFRvUGFyZW50PXRydWU7fX0KY29uc3Qgb2s9ZmluaXNoRmxvd0V2ZW50V2l0aChmbG93RXZlbnQsdGhyZWFkLGV2ZW50LHJlZkd1aWQsYmluZFRvUGFyZW50KTtpZihvayl7dGhpcy5tb2RlbF8uZmxvd0V2ZW50cy5wdXNoKGZsb3dFdmVudCk7fWVsc2V7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZmxvd19zbGljZV9lbmRfZXJyb3InLG1lc3NhZ2U6J2V2ZW50IGlkICcrZXZlbnQuaWQrJyBkb2VzIG5vdCBlbmQgJysnYXQgYW4gYWN0dWFsIHNsaWNlLCBzbyBjYW5ub3QgYmUgY3JlYXRlZC4nfSk7fQpmbG93SWRUb0V2ZW50W2Z1bGxGbG93SWRdPXVuZGVmaW5lZDtpZihvayYmZXZlbnQucGg9PT0ndCcpe2Zsb3dFdmVudD1jcmVhdGVGbG93RXZlbnQodGhyZWFkLGV2ZW50KTtmbG93SWRUb0V2ZW50W2Z1bGxGbG93SWRdPWZsb3dFdmVudDt9fX19LGNyZWF0ZUV4cGxpY2l0T2JqZWN0c18oKXtpZih0aGlzLmFsbE9iamVjdEV2ZW50c18ubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgcHJvY2Vzc0V2ZW50PWZ1bmN0aW9uKG9iamVjdEV2ZW50U3RhdGUpe2NvbnN0IGV2ZW50PW9iamVjdEV2ZW50U3RhdGUuZXZlbnQ7Y29uc3Qgc2NvcGVkSWQ9VHJhY2VFdmVudEltcG9ydGVyLnNjb3BlZElkRm9yRXZlbnRfKGV2ZW50KTtjb25zdCB0aHJlYWQ9b2JqZWN0RXZlbnRTdGF0ZS50aHJlYWQ7aWYoZXZlbnQubmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonb2JqZWN0X3BhcnNlX2Vycm9yJyxtZXNzYWdlOidXaGlsZSBwcm9jZXNzaW5nICcrSlNPTi5zdHJpbmdpZnkoZXZlbnQpKyc6ICcrJ09iamVjdCBldmVudHMgcmVxdWlyZSBhbiBuYW1lIHBhcmFtZXRlci4nfSk7fQppZihzY29wZWRJZD09PXVuZGVmaW5lZHx8c2NvcGVkSWQuaWQ9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyAnK0pTT04uc3RyaW5naWZ5KGV2ZW50KSsnOiAnKydPYmplY3QgZXZlbnRzIHJlcXVpcmUgYW4gaWQgcGFyYW1ldGVyLid9KTt9CmNvbnN0IHByb2Nlc3M9dGhyZWFkLnBhcmVudDtjb25zdCB0cz10aGlzLnRvTW9kZWxUaW1lRnJvbVVzXyhldmVudC50cyk7bGV0IGluc3RhbmNlO2lmKGV2ZW50LnBoPT09J04nKXt0cnl7aW5zdGFuY2U9cHJvY2Vzcy5vYmplY3RzLmlkV2FzQ3JlYXRlZChzY29wZWRJZCxldmVudC5jYXQsZXZlbnQubmFtZSx0cyk7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyBjcmVhdGUgb2YgJysKc2NvcGVkSWQrJyBhdCB0cz0nK3RzKyc6ICcrZX0pO3JldHVybjt9fWVsc2UgaWYoZXZlbnQucGg9PT0nTycpe2lmKGV2ZW50LmFyZ3Muc25hcHNob3Q9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyAnK3Njb3BlZElkKycgYXQgdHM9Jyt0cysnOiAnKydTbmFwc2hvdHMgbXVzdCBoYXZlIGFyZ3M6IHtzbmFwc2hvdDogLi4ufSd9KTtyZXR1cm47fQpsZXQgc25hcHNob3Q7dHJ5e2NvbnN0IGFyZ3M9dGhpcy5kZWVwQ29weUlmTmVlZGVkXyhldmVudC5hcmdzLnNuYXBzaG90KTtsZXQgY2F0O2lmKGFyZ3MuY2F0KXtjYXQ9YXJncy5jYXQ7ZGVsZXRlIGFyZ3MuY2F0O31lbHNle2NhdD1ldmVudC5jYXQ7fQpsZXQgYmFzZVR5cGVuYW1lO2lmKGFyZ3MuYmFzZV90eXBlKXtiYXNlVHlwZW5hbWU9YXJncy5iYXNlX3R5cGU7ZGVsZXRlIGFyZ3MuYmFzZV90eXBlO31lbHNle2Jhc2VUeXBlbmFtZT11bmRlZmluZWQ7fQpzbmFwc2hvdD1wcm9jZXNzLm9iamVjdHMuYWRkU25hcHNob3Qoc2NvcGVkSWQsY2F0LGV2ZW50Lm5hbWUsdHMsYXJncyxiYXNlVHlwZW5hbWUpO3NuYXBzaG90LnNuYXBzaG90dGVkT25UaHJlYWQ9dGhyZWFkO31jYXRjaChlKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidvYmplY3RfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1doaWxlIHByb2Nlc3Npbmcgc25hcHNob3Qgb2YgJysKc2NvcGVkSWQrJyBhdCB0cz0nK3RzKyc6ICcrZX0pO3JldHVybjt9Cmluc3RhbmNlPXNuYXBzaG90Lm9iamVjdEluc3RhbmNlO31lbHNlIGlmKGV2ZW50LnBoPT09J0QnKXt0cnl7cHJvY2Vzcy5vYmplY3RzLmlkV2FzRGVsZXRlZChzY29wZWRJZCxldmVudC5jYXQsZXZlbnQubmFtZSx0cyk7Y29uc3QgaW5zdGFuY2VNYXA9cHJvY2Vzcy5vYmplY3RzLmdldE9yQ3JlYXRlSW5zdGFuY2VNYXBfKHNjb3BlZElkKTtpbnN0YW5jZT1pbnN0YW5jZU1hcC5sYXN0SW5zdGFuY2U7fWNhdGNoKGUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J29iamVjdF9wYXJzZV9lcnJvcicsbWVzc2FnZTonV2hpbGUgcHJvY2Vzc2luZyBkZWxldGUgb2YgJysKc2NvcGVkSWQrJyBhdCB0cz0nK3RzKyc6ICcrZX0pO3JldHVybjt9fQppZihpbnN0YW5jZSl7aW5zdGFuY2UuY29sb3JJZD1nZXRFdmVudENvbG9yKGV2ZW50LGluc3RhbmNlLnR5cGVOYW1lKTt9fS5iaW5kKHRoaXMpO3RoaXMuYWxsT2JqZWN0RXZlbnRzXy5zb3J0KGZ1bmN0aW9uKHgseSl7Y29uc3QgZD14LmV2ZW50LnRzLXkuZXZlbnQudHM7aWYoZCE9PTApcmV0dXJuIGQ7cmV0dXJuIHguc2VxdWVuY2VOdW1iZXIteS5zZXF1ZW5jZU51bWJlcjt9KTtjb25zdCBhbGxPYmplY3RFdmVudHM9dGhpcy5hbGxPYmplY3RFdmVudHNfO2ZvcihsZXQgaT0wO2k8YWxsT2JqZWN0RXZlbnRzLmxlbmd0aDtpKyspe2NvbnN0IG9iamVjdEV2ZW50U3RhdGU9YWxsT2JqZWN0RXZlbnRzW2ldO3RyeXtwcm9jZXNzRXZlbnQuY2FsbCh0aGlzLG9iamVjdEV2ZW50U3RhdGUpO31jYXRjaChlKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidvYmplY3RfcGFyc2VfZXJyb3InLG1lc3NhZ2U6ZS5tZXNzYWdlfSk7fX19LGNyZWF0ZUltcGxpY2l0T2JqZWN0c18oKXtmb3IoY29uc3QgcHJvYyBvZiBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxfLnByb2Nlc3Nlcykpe3RoaXMuY3JlYXRlSW1wbGljaXRPYmplY3RzRm9yUHJvY2Vzc18ocHJvYyk7fX0sY3JlYXRlSW1wbGljaXRPYmplY3RzRm9yUHJvY2Vzc18ocHJvY2Vzcyl7ZnVuY3Rpb24gcHJvY2Vzc0ZpZWxkKHJlZmVyZW5jaW5nT2JqZWN0LHJlZmVyZW5jaW5nT2JqZWN0RmllbGROYW1lLHJlZmVyZW5jaW5nT2JqZWN0RmllbGRWYWx1ZSxjb250YWluaW5nU25hcHNob3Qpe2lmKCFyZWZlcmVuY2luZ09iamVjdEZpZWxkVmFsdWUpcmV0dXJuO2lmKHJlZmVyZW5jaW5nT2JqZWN0RmllbGRWYWx1ZSBpbnN0YW5jZW9mCnRyLm1vZGVsLk9iamVjdFNuYXBzaG90KXtyZXR1cm4gbnVsbDt9CmlmKHJlZmVyZW5jaW5nT2JqZWN0RmllbGRWYWx1ZS5pZD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaW1wbGljaXRTbmFwc2hvdD1yZWZlcmVuY2luZ09iamVjdEZpZWxkVmFsdWU7Y29uc3QgcmF3SWQ9aW1wbGljaXRTbmFwc2hvdC5pZDtjb25zdCBtPS8oLispXC8oLispLy5leGVjKHJhd0lkKTtpZighbSl7dGhyb3cgbmV3IEVycm9yKCdJbXBsaWNpdCBzbmFwc2hvdHMgbXVzdCBoYXZlIG5hbWVzLicpO30KZGVsZXRlIGltcGxpY2l0U25hcHNob3QuaWQ7Y29uc3QgbmFtZT1tWzFdO2NvbnN0IGlkPW1bMl07bGV0IHJlcztsZXQgY2F0O2lmKGltcGxpY2l0U25hcHNob3QuY2F0IT09dW5kZWZpbmVkKXtjYXQ9aW1wbGljaXRTbmFwc2hvdC5jYXQ7fWVsc2V7Y2F0PWNvbnRhaW5pbmdTbmFwc2hvdC5vYmplY3RJbnN0YW5jZS5jYXRlZ29yeTt9CmxldCBiYXNlVHlwZW5hbWU7aWYoaW1wbGljaXRTbmFwc2hvdC5iYXNlX3R5cGUpe2Jhc2VUeXBlbmFtZT1pbXBsaWNpdFNuYXBzaG90LmJhc2VfdHlwZTt9ZWxzZXtiYXNlVHlwZW5hbWU9dW5kZWZpbmVkO30KY29uc3Qgc2NvcGU9Y29udGFpbmluZ1NuYXBzaG90Lm9iamVjdEluc3RhbmNlLnNjb3BlZElkLnNjb3BlO3RyeXtyZXM9cHJvY2Vzcy5vYmplY3RzLmFkZFNuYXBzaG90KG5ldyB0ci5tb2RlbC5TY29wZWRJZChzY29wZSxpZCksY2F0LG5hbWUsY29udGFpbmluZ1NuYXBzaG90LnRzLGltcGxpY2l0U25hcHNob3QsYmFzZVR5cGVuYW1lKTt9Y2F0Y2goZSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonb2JqZWN0X3NuYXBzaG90X3BhcnNlX2Vycm9yJyxtZXNzYWdlOidXaGlsZSBwcm9jZXNzaW5nIGltcGxpY2l0IHNuYXBzaG90IG9mICcrCnJhd0lkKycgYXQgdHM9Jytjb250YWluaW5nU25hcHNob3QudHMrJzogJytlfSk7cmV0dXJuO30KcmVzLm9iamVjdEluc3RhbmNlLmhhc0ltcGxpY2l0U25hcHNob3RzPXRydWU7cmVzLmNvbnRhaW5pbmdTbmFwc2hvdD1jb250YWluaW5nU25hcHNob3Q7cmVzLnNuYXBzaG90dGVkT25UaHJlYWQ9Y29udGFpbmluZ1NuYXBzaG90LnNuYXBzaG90dGVkT25UaHJlYWQ7cmVmZXJlbmNpbmdPYmplY3RbcmVmZXJlbmNpbmdPYmplY3RGaWVsZE5hbWVdPXJlcztpZighKHJlcyBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdFNuYXBzaG90KSl7dGhyb3cgbmV3IEVycm9yKCdDcmVhdGVkIG9iamVjdCBtdXN0IGJlIGluc3RhbmNlb2Ygc25hcHNob3QnKTt9CnJldHVybiByZXMuYXJnczt9CmZ1bmN0aW9uIGl0ZXJPYmplY3Qob2JqZWN0LGZ1bmMsY29udGFpbmluZ1NuYXBzaG90LHRoaXNBcmcpe2lmKCEob2JqZWN0IGluc3RhbmNlb2YgT2JqZWN0KSlyZXR1cm47aWYob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpe2ZvcihsZXQgaT0wO2k8b2JqZWN0Lmxlbmd0aDtpKyspe2NvbnN0IHJlcz1mdW5jLmNhbGwodGhpc0FyZyxvYmplY3QsaSxvYmplY3RbaV0sY29udGFpbmluZ1NuYXBzaG90KTtpZihyZXM9PT1udWxsKWNvbnRpbnVlO2lmKHJlcyl7aXRlck9iamVjdChyZXMsZnVuYyxjb250YWluaW5nU25hcHNob3QsdGhpc0FyZyk7fWVsc2V7aXRlck9iamVjdChvYmplY3RbaV0sZnVuYyxjb250YWluaW5nU25hcHNob3QsdGhpc0FyZyk7fX0KcmV0dXJuO30KZm9yKGNvbnN0IGtleSBpbiBvYmplY3Qpe2NvbnN0IHJlcz1mdW5jLmNhbGwodGhpc0FyZyxvYmplY3Qsa2V5LG9iamVjdFtrZXldLGNvbnRhaW5pbmdTbmFwc2hvdCk7aWYocmVzPT09bnVsbCljb250aW51ZTtpZihyZXMpe2l0ZXJPYmplY3QocmVzLGZ1bmMsY29udGFpbmluZ1NuYXBzaG90LHRoaXNBcmcpO31lbHNle2l0ZXJPYmplY3Qob2JqZWN0W2tleV0sZnVuYyxjb250YWluaW5nU25hcHNob3QsdGhpc0FyZyk7fX19CnByb2Nlc3Mub2JqZWN0cy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKGluc3RhbmNlKXtpbnN0YW5jZS5zbmFwc2hvdHMuZm9yRWFjaChmdW5jdGlvbihzbmFwc2hvdCl7aWYoc25hcHNob3QuYXJncy5pZCE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdhcmdzIGNhbm5vdCBoYXZlIGFuIGlkIGZpZWxkIGluc2lkZSBpdCcpO30KaXRlck9iamVjdChzbmFwc2hvdC5hcmdzLHByb2Nlc3NGaWVsZCxzbmFwc2hvdCx0aGlzKTt9LHRoaXMpO30sdGhpcyk7fSxtaW5pbWFsVGltZXN0YW1wSW5QaWRUb0V2ZW50c18ocGlkVG9FdmVudHMpe2xldCBzbWFsbGVzdFRzPUluZmluaXR5O2Zvcihjb25zdCBldmVudHMgb2YgT2JqZWN0LnZhbHVlcyhwaWRUb0V2ZW50cykpe2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LnRzPHNtYWxsZXN0VHMpe3NtYWxsZXN0VHM9ZXZlbnQudHM7fX19CnJldHVybiBzbWFsbGVzdFRzO30sY3JlYXRlTWVtb3J5RHVtcHNfKCl7Y29uc3QgcGFpcnM9T2JqZWN0LmVudHJpZXModGhpcy5hbGxNZW1vcnlEdW1wRXZlbnRzXyk7Y29uc3Qga2V5PXg9PnRoaXMubWluaW1hbFRpbWVzdGFtcEluUGlkVG9FdmVudHNfKHgpO3BhaXJzLnNvcnQoKHgseSk9PmtleSh4WzFdKS1rZXkoeVsxXSkpO2Zvcihjb25zdFtkdW1wSWQscGlkVG9FdmVudHNdb2YgcGFpcnMpe3RoaXMuY3JlYXRlR2xvYmFsTWVtb3J5RHVtcF8ocGlkVG9FdmVudHMsZHVtcElkKTt9fSxjcmVhdGVHbG9iYWxNZW1vcnlEdW1wXyhkdW1wSWRFdmVudHMsZHVtcElkKXtjb25zdCBnbG9iYWxSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IHBpZCBpbiBkdW1wSWRFdmVudHMpe2NvbnN0IHByb2Nlc3NFdmVudHM9ZHVtcElkRXZlbnRzW3BpZF07Zm9yKGxldCBpPTA7aTxwcm9jZXNzRXZlbnRzLmxlbmd0aDtpKyspe2dsb2JhbFJhbmdlLmFkZFZhbHVlKHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKHByb2Nlc3NFdmVudHNbaV0udHMpKTt9fQppZihnbG9iYWxSYW5nZS5pc0VtcHR5KXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBHbG9iYWwgbWVtb3J5IGR1bXAgd2l0aG91dCBldmVudHMnKTt9CmNvbnN0IGdsb2JhbE1lbW9yeUR1bXA9bmV3IHRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXAodGhpcy5tb2RlbF8sZ2xvYmFsUmFuZ2UubWluKTtnbG9iYWxNZW1vcnlEdW1wLmR1cmF0aW9uPWdsb2JhbFJhbmdlLnJhbmdlO3RoaXMubW9kZWxfLmdsb2JhbE1lbW9yeUR1bXBzLnB1c2goZ2xvYmFsTWVtb3J5RHVtcCk7Y29uc3QgZ2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lPXt9O2NvbnN0IGxldmVsc09mRGV0YWlsPXt9O2NvbnN0IGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkPXt9O2Zvcihjb25zdCBwaWQgaW4gZHVtcElkRXZlbnRzKXt0aGlzLmNyZWF0ZVByb2Nlc3NNZW1vcnlEdW1wXyhnbG9iYWxNZW1vcnlEdW1wLGdsb2JhbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSxsZXZlbHNPZkRldGFpbCxhbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZCxkdW1wSWRFdmVudHNbcGlkXSxwaWQsZHVtcElkKTt9Cmdsb2JhbE1lbW9yeUR1bXAubGV2ZWxPZkRldGFpbD1sZXZlbHNPZkRldGFpbC5nbG9iYWw7Z2xvYmFsTWVtb3J5RHVtcC5tZW1vcnlBbGxvY2F0b3JEdW1wcz10aGlzLmluZmVyTWVtb3J5QWxsb2NhdG9yRHVtcFRyZWVfKGdsb2JhbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSk7dGhpcy5wYXJzZU1lbW9yeUR1bXBBbGxvY2F0b3JFZGdlc18oYWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWQsZHVtcElkRXZlbnRzLGR1bXBJZCk7fSxjcmVhdGVQcm9jZXNzTWVtb3J5RHVtcF8oZ2xvYmFsTWVtb3J5RHVtcCxnbG9iYWxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUsbGV2ZWxzT2ZEZXRhaWwsYWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWQscHJvY2Vzc0V2ZW50cyxwaWQsZHVtcElkKXtjb25zdCBwcm9jZXNzUmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2ZvcihsZXQgaT0wO2k8cHJvY2Vzc0V2ZW50cy5sZW5ndGg7aSsrKXtwcm9jZXNzUmFuZ2UuYWRkVmFsdWUodGhpcy50b01vZGVsVGltZUZyb21Vc18ocHJvY2Vzc0V2ZW50c1tpXS50cykpO30KaWYocHJvY2Vzc1JhbmdlLmlzRW1wdHkpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgZXJyb3I6IFByb2Nlc3MgbWVtb3J5IGR1bXAgd2l0aG91dCBldmVudHMnKTt9CmNvbnN0IHByb2Nlc3M9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCk7Y29uc3QgcHJvY2Vzc01lbW9yeUR1bXA9bmV3IHRyLm1vZGVsLlByb2Nlc3NNZW1vcnlEdW1wKGdsb2JhbE1lbW9yeUR1bXAscHJvY2Vzcyxwcm9jZXNzUmFuZ2UubWluKTtwcm9jZXNzTWVtb3J5RHVtcC5kdXJhdGlvbj1wcm9jZXNzUmFuZ2UucmFuZ2U7cHJvY2Vzcy5tZW1vcnlEdW1wcy5wdXNoKHByb2Nlc3NNZW1vcnlEdW1wKTtnbG9iYWxNZW1vcnlEdW1wLnByb2Nlc3NNZW1vcnlEdW1wc1twaWRdPXByb2Nlc3NNZW1vcnlEdW1wO2NvbnN0IHByb2Nlc3NNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWU9e307Zm9yKGxldCBpPTA7aTxwcm9jZXNzRXZlbnRzLmxlbmd0aDtpKyspe2NvbnN0IHByb2Nlc3NFdmVudD1wcm9jZXNzRXZlbnRzW2ldO2NvbnN0IGR1bXBzPXByb2Nlc3NFdmVudC5hcmdzLmR1bXBzO2lmKGR1bXBzPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonXCdkdW1wc1wnIGZpZWxkIG5vdCBmb3VuZCBpbiBhIHByb2Nlc3MgbWVtb3J5IGR1bXAnKycgZXZlbnQgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycuJ30pO2NvbnRpbnVlO30KdGhpcy5wYXJzZU1lbW9yeUR1bXBUb3RhbHNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpO3RoaXMucGFyc2VNZW1vcnlEdW1wVm1SZWdpb25zXyhwcm9jZXNzTWVtb3J5RHVtcCxkdW1wcyxwaWQsZHVtcElkKTt0aGlzLnBhcnNlTWVtb3J5RHVtcEhlYXBEdW1wc18ocHJvY2Vzc01lbW9yeUR1bXAsZHVtcHMscGlkLGR1bXBJZCk7dGhpcy5wYXJzZU1lbW9yeUR1bXBMZXZlbE9mRGV0YWlsXyhsZXZlbHNPZkRldGFpbCxkdW1wcyxwaWQsZHVtcElkKTt0aGlzLnBhcnNlTWVtb3J5RHVtcEFsbG9jYXRvckR1bXBzXyhwcm9jZXNzTWVtb3J5RHVtcCxnbG9iYWxNZW1vcnlEdW1wLHByb2Nlc3NNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUsZ2xvYmFsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lLGFsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkLGR1bXBzLHBpZCxkdW1wSWQpO30KaWYobGV2ZWxzT2ZEZXRhaWwucHJvY2Vzcz09PXVuZGVmaW5lZCl7bGV2ZWxzT2ZEZXRhaWwucHJvY2Vzcz1wcm9jZXNzTWVtb3J5RHVtcC52bVJlZ2lvbnM/REVUQUlMRUQ6TElHSFQ7fQppZighdGhpcy51cGRhdGVNZW1vcnlEdW1wTGV2ZWxPZkRldGFpbF8obGV2ZWxzT2ZEZXRhaWwsJ2dsb2JhbCcsbGV2ZWxzT2ZEZXRhaWwucHJvY2Vzcykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidkaWZmZW50IGxldmVscyBvZiBkZXRhaWwgcHJvdmlkZWQgZm9yIGdsb2JhbCBtZW1vcnknKycgZHVtcCAoZHVtcCBJRD0nK2R1bXBJZCsnKS4nfSk7fQpwcm9jZXNzTWVtb3J5RHVtcC5sZXZlbE9mRGV0YWlsPWxldmVsc09mRGV0YWlsLnByb2Nlc3M7ZGVsZXRlIGxldmVsc09mRGV0YWlsLnByb2Nlc3M7cHJvY2Vzc01lbW9yeUR1bXAubWVtb3J5QWxsb2NhdG9yRHVtcHM9dGhpcy5pbmZlck1lbW9yeUFsbG9jYXRvckR1bXBUcmVlXyhwcm9jZXNzTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lKTt9LHBhcnNlTWVtb3J5RHVtcFRvdGFsc18ocHJvY2Vzc01lbW9yeUR1bXAsZHVtcHMscGlkLGR1bXBJZCl7Y29uc3QgcmF3VG90YWxzPWR1bXBzLnByb2Nlc3NfdG90YWxzO2lmKHJhd1RvdGFscz09PXVuZGVmaW5lZClyZXR1cm47aWYocHJvY2Vzc01lbW9yeUR1bXAudG90YWxzIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonUHJvY2VzcyB0b3RhbHMgcHJvdmlkZWQgbXVsdGlwbGUgdGltZXMgZm9yJysnIHByb2Nlc3MgbWVtb3J5IGR1bXAgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycuJ30pO3JldHVybjt9CmNvbnN0IHRvdGFscz17fTtsZXQgcGxhdGZvcm1TcGVjaWZpY1RvdGFscz11bmRlZmluZWQ7Zm9yKGNvbnN0IHJhd1RvdGFsTmFtZSBpbiByYXdUb3RhbHMpe2NvbnN0IHJhd1RvdGFsVmFsdWU9cmF3VG90YWxzW3Jhd1RvdGFsTmFtZV07aWYocmF3VG90YWxWYWx1ZT09PXVuZGVmaW5lZCljb250aW51ZTtpZihyYXdUb3RhbE5hbWU9PT0ncmVzaWRlbnRfc2V0X2J5dGVzJyl7dG90YWxzLnJlc2lkZW50Qnl0ZXM9cGFyc2VJbnQocmF3VG90YWxWYWx1ZSwxNik7Y29udGludWU7fQppZihyYXdUb3RhbE5hbWU9PT0ncGVha19yZXNpZGVudF9zZXRfYnl0ZXMnKXt0b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXM9cGFyc2VJbnQocmF3VG90YWxWYWx1ZSwxNik7Y29udGludWU7fQppZihyYXdUb3RhbE5hbWU9PT0naXNfcGVha19yc3NfcmVzZXRhYmxlJyl7dG90YWxzLmFyZVBlYWtSZXNpZGVudEJ5dGVzUmVzZXR0YWJsZT0hIXJhd1RvdGFsVmFsdWU7Y29udGludWU7fQppZihyYXdUb3RhbE5hbWU9PT0ncHJpdmF0ZV9mb290cHJpbnRfYnl0ZXMnKXt0b3RhbHMucHJpdmF0ZUZvb3RwcmludEJ5dGVzPXBhcnNlSW50KHJhd1RvdGFsVmFsdWUsMTYpO2NvbnRpbnVlO30KaWYocGxhdGZvcm1TcGVjaWZpY1RvdGFscz09PXVuZGVmaW5lZCl7cGxhdGZvcm1TcGVjaWZpY1RvdGFscz17fTt0b3RhbHMucGxhdGZvcm1TcGVjaWZpYz1wbGF0Zm9ybVNwZWNpZmljVG90YWxzO30KcGxhdGZvcm1TcGVjaWZpY1RvdGFsc1tyYXdUb3RhbE5hbWVdPXBhcnNlSW50KHJhd1RvdGFsVmFsdWUsMTYpO30KaWYodG90YWxzLnBlYWtSZXNpZGVudEJ5dGVzPT09dW5kZWZpbmVkJiZ0b3RhbHMuYXJlUGVha1Jlc2lkZW50Qnl0ZXNSZXNldHRhYmxlIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonT3B0aW9uYWwgZmllbGQgcGVha19yZXNpZGVudF9zZXRfYnl0ZXMgZm91bmQnKycgYnV0IGlzX3BlYWtfcnNzX3Jlc2V0YWJsZSBub3QgZm91bmQgaW4nKycgcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJy4nfSk7fQppZih0b3RhbHMuYXJlUGVha1Jlc2lkZW50Qnl0ZXNSZXNldHRhYmxlIT09dW5kZWZpbmVkJiZ0b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXM9PT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidPcHRpb25hbCBmaWVsZCBpc19wZWFrX3Jzc19yZXNldGFibGUgZm91bmQnKycgYnV0IHBlYWtfcmVzaWRlbnRfc2V0X2J5dGVzIG5vdCBmb3VuZCBpbicrJyBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTt9CnByb2Nlc3NNZW1vcnlEdW1wLnRvdGFscz10b3RhbHM7fSxwYXJzZU1lbW9yeUR1bXBWbVJlZ2lvbnNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpe2NvbnN0IHJhd1Byb2Nlc3NNbWFwcz1kdW1wcy5wcm9jZXNzX21tYXBzO2lmKHJhd1Byb2Nlc3NNbWFwcz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcmF3Vm1SZWdpb25zPXJhd1Byb2Nlc3NNbWFwcy52bV9yZWdpb25zO2lmKHJhd1ZtUmVnaW9ucz09PXVuZGVmaW5lZClyZXR1cm47aWYocHJvY2Vzc01lbW9yeUR1bXAudm1SZWdpb25zIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonVk0gcmVnaW9ucyBwcm92aWRlZCBtdWx0aXBsZSB0aW1lcyBmb3InKycgcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJy4nfSk7cmV0dXJuO30KY29uc3Qgdm1SZWdpb25zPW5ldyBBcnJheShyYXdWbVJlZ2lvbnMubGVuZ3RoKTtmb3IobGV0IGk9MDtpPHJhd1ZtUmVnaW9ucy5sZW5ndGg7aSsrKXtjb25zdCByYXdWbVJlZ2lvbj1yYXdWbVJlZ2lvbnNbaV07Y29uc3QgYnl0ZVN0YXRzPXt9O2NvbnN0IHJhd0J5dGVTdGF0cz1yYXdWbVJlZ2lvbi5icztmb3IoY29uc3QgcmF3Qnl0ZVN0YXROYW1lIGluIHJhd0J5dGVTdGF0cyl7Y29uc3QgcmF3Qnl0ZVN0YXRWYWx1ZT1yYXdCeXRlU3RhdHNbcmF3Qnl0ZVN0YXROYW1lXTtpZihyYXdCeXRlU3RhdFZhbHVlPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonQnl0ZSBzdGF0IFwnJytyYXdCeXRlU3RhdE5hbWUrJ1wnIG9mIFZNIHJlZ2lvbiAnKwppKycgKCcrcmF3Vm1SZWdpb24ubWYrJykgaW4gcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgJysnUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBkb2VzIG5vdCBoYXZlIGEgdmFsdWUuJ30pO2NvbnRpbnVlO30KY29uc3QgYnl0ZVN0YXROYW1lPUJZVEVfU1RBVF9OQU1FX01BUFtyYXdCeXRlU3RhdE5hbWVdO2lmKGJ5dGVTdGF0TmFtZT09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J1Vua25vd24gYnl0ZSBzdGF0IG5hbWUgXCcnK3Jhd0J5dGVTdGF0TmFtZSsnXCcgKCcrCnJhd0J5dGVTdGF0VmFsdWUrJykgb2YgVk0gcmVnaW9uICcraSsnICgnKwpyYXdWbVJlZ2lvbi5tZisnKSBpbiBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtjb250aW51ZTt9CmJ5dGVTdGF0c1tieXRlU3RhdE5hbWVdPXBhcnNlSW50KHJhd0J5dGVTdGF0VmFsdWUsMTYpO2lmKGJ5dGVTdGF0TmFtZT09PSdwcm9wb3J0aW9uYWxSZXNpZGVudCcmJmJ5dGVTdGF0c1tieXRlU3RhdE5hbWVdPT09MCl7Ynl0ZVN0YXRzW2J5dGVTdGF0TmFtZV09dW5kZWZpbmVkO319CnZtUmVnaW9uc1tpXT1uZXcgdHIubW9kZWwuVk1SZWdpb24ocGFyc2VJbnQocmF3Vm1SZWdpb24uc2EsMTYpLHBhcnNlSW50KHJhd1ZtUmVnaW9uLnN6LDE2KSxyYXdWbVJlZ2lvbi5wZixyYXdWbVJlZ2lvbi5tZixieXRlU3RhdHMpO30KcHJvY2Vzc01lbW9yeUR1bXAudm1SZWdpb25zPXRyLm1vZGVsLlZNUmVnaW9uQ2xhc3NpZmljYXRpb25Ob2RlLmZyb21SZWdpb25zKHZtUmVnaW9ucyk7fSxwYXJzZU1lbW9yeUR1bXBIZWFwRHVtcHNfKHByb2Nlc3NNZW1vcnlEdW1wLGR1bXBzLHBpZCxkdW1wSWQpe2NvbnN0IGlkUHJlZml4PSdwJytwaWQrJzonO2xldCBpbXBvcnRlcjtpZihkdW1wcy5oZWFwcyl7Y29uc3QgcHJvY2Vzc1R5cGVNYXA9dGhpcy5vYmplY3RUeXBlTmFtZU1hcF9bcGlkXTtpZihwcm9jZXNzVHlwZU1hcD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01pc3NpbmcgbWFwcGluZyBmcm9tIG9iamVjdCB0eXBlIElEcyB0byBuYW1lcy4nfSk7fQppbXBvcnRlcj1uZXcgTGVnYWN5SGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIodGhpcy5tb2RlbF8scHJvY2Vzc01lbW9yeUR1bXAscHJvY2Vzc1R5cGVNYXAsaWRQcmVmaXgsZHVtcElkLGR1bXBzLmhlYXBzKTt9ZWxzZSBpZihkdW1wcy5oZWFwc192Mil7Y29uc3QgZGF0YT1kdW1wcy5oZWFwc192Mjt0aGlzLmhlYXBQcm9maWxlRXhwYW5kZXI9dGhpcy5oZWFwUHJvZmlsZUV4cGFuZGVyLmV4cGFuZERhdGEoZGF0YSk7dGhpcy5hZGROZXdTdGFja0ZyYW1lc0Zyb21FeHBhbmRlcl8odGhpcy5oZWFwUHJvZmlsZUV4cGFuZGVyLGlkUHJlZml4KTtpbXBvcnRlcj1uZXcgSGVhcER1bXBUcmFjZUV2ZW50SW1wb3J0ZXIodGhpcy5oZWFwUHJvZmlsZUV4cGFuZGVyLHRoaXMubW9kZWxfLnN0YWNrRnJhbWVzLHByb2Nlc3NNZW1vcnlEdW1wLGlkUHJlZml4LHRoaXMubW9kZWxfKTt9CmlmKCFpbXBvcnRlcilyZXR1cm47Y29uc3QgaGVhcER1bXBzPWltcG9ydGVyLnBhcnNlKCk7aWYoIWhlYXBEdW1wcylyZXR1cm47aWYocHJvY2Vzc01lbW9yeUR1bXAuaGVhcER1bXBzIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonSGVhcCBkdW1wcyBwcm92aWRlZCBtdWx0aXBsZSB0aW1lcyBmb3InKycgcHJvY2VzcyBtZW1vcnkgZHVtcCBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJy4nfSk7cmV0dXJuO30KaWYoT2JqZWN0LmtleXMoaGVhcER1bXBzKS5sZW5ndGg+MCl7cHJvY2Vzc01lbW9yeUR1bXAuaGVhcER1bXBzPWhlYXBEdW1wczt9fSxhZGROZXdTdGFja0ZyYW1lc0Zyb21FeHBhbmRlcl8oZXhwYW5kZXIsaWRQcmVmaXgpe2NvbnN0IG5vZGVNYXA9ZXhwYW5kZXIuZ2V0TmV3TWFwKCdub2RlcycpO2NvbnN0IG5ld1N0YWNrRnJhbWVzPXt9O2Zvcihjb25zdFtpZCxzdGFja0ZyYW1lXW9mIG5vZGVNYXAuZW50cmllcygpKXtpZighdGhpcy5tb2RlbF8uc3RhY2tGcmFtZXNbaWRQcmVmaXgraWRdKXtuZXdTdGFja0ZyYW1lc1tpZF09e2lkLG5hbWU6ZXhwYW5kZXIuZ2V0U3RyaW5nKHN0YWNrRnJhbWUubmFtZV9zaWQpLH07aWYoc3RhY2tGcmFtZS5wYXJlbnQpbmV3U3RhY2tGcmFtZXNbaWRdLnBhcmVudD1zdGFja0ZyYW1lLnBhcmVudDt9fQp0aGlzLmltcG9ydFN0YWNrRnJhbWVzXyhuZXdTdGFja0ZyYW1lcyxpZFByZWZpeCk7fSxwYXJzZU1lbW9yeUR1bXBMZXZlbE9mRGV0YWlsXyhsZXZlbHNPZkRldGFpbCxkdW1wcyxwaWQsZHVtcElkKXtjb25zdCByYXdMZXZlbE9mRGV0YWlsPWR1bXBzLmxldmVsX29mX2RldGFpbDtsZXQgbGV2ZWw7c3dpdGNoKHJhd0xldmVsT2ZEZXRhaWwpe2Nhc2UnYmFja2dyb3VuZCc6bGV2ZWw9QkFDS0dST1VORDticmVhaztjYXNlJ2xpZ2h0JzpsZXZlbD1MSUdIVDticmVhaztjYXNlJ2RldGFpbGVkJzpsZXZlbD1ERVRBSUxFRDticmVhaztjYXNlIHVuZGVmaW5lZDpsZXZlbD11bmRlZmluZWQ7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTondW5rbm93biByYXcgbGV2ZWwgb2YgZGV0YWlsIFwnJytyYXdMZXZlbE9mRGV0YWlsKydcJyBvZiBwcm9jZXNzIG1lbW9yeSBkdW1wIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnLid9KTtyZXR1cm47fQppZighdGhpcy51cGRhdGVNZW1vcnlEdW1wTGV2ZWxPZkRldGFpbF8obGV2ZWxzT2ZEZXRhaWwsJ3Byb2Nlc3MnLGxldmVsKSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J2RpZmZlbnQgbGV2ZWxzIG9mIGRldGFpbCBwcm92aWRlZCBmb3IgcHJvY2VzcyBtZW1vcnknKycgZHVtcCBmb3IgUElEPScrcGlkKycgKGR1bXAgSUQ9JytkdW1wSWQrJykuJ30pO319LHVwZGF0ZU1lbW9yeUR1bXBMZXZlbE9mRGV0YWlsXyhsZXZlbHNPZkRldGFpbCxzY29wZSxsZXZlbCl7aWYoIShzY29wZSBpbiBsZXZlbHNPZkRldGFpbCl8fGxldmVsPT09bGV2ZWxzT2ZEZXRhaWxbc2NvcGVdKXtsZXZlbHNPZkRldGFpbFtzY29wZV09bGV2ZWw7cmV0dXJuIHRydWU7fQppZihNRU1PUllfRFVNUF9MRVZFTF9PRl9ERVRBSUxfT1JERVIuaW5kZXhPZihsZXZlbCk+TUVNT1JZX0RVTVBfTEVWRUxfT0ZfREVUQUlMX09SREVSLmluZGV4T2YobGV2ZWxzT2ZEZXRhaWxbc2NvcGVdKSl7bGV2ZWxzT2ZEZXRhaWxbc2NvcGVdPWxldmVsO30KcmV0dXJuIGZhbHNlO30scGFyc2VNZW1vcnlEdW1wQWxsb2NhdG9yRHVtcHNfKHByb2Nlc3NNZW1vcnlEdW1wLGdsb2JhbE1lbW9yeUR1bXAscHJvY2Vzc01lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSxnbG9iYWxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUsYWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWQsZHVtcHMscGlkLGR1bXBJZCl7Y29uc3QgcmF3QWxsb2NhdG9yRHVtcHM9ZHVtcHMuYWxsb2NhdG9ycztpZihyYXdBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGxldCBmdWxsTmFtZSBpbiByYXdBbGxvY2F0b3JEdW1wcyl7Y29uc3QgcmF3QWxsb2NhdG9yRHVtcD1yYXdBbGxvY2F0b3JEdW1wc1tmdWxsTmFtZV07Y29uc3QgZ3VpZD1yYXdBbGxvY2F0b3JEdW1wLmd1aWQ7aWYoZ3VpZD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycgZG9lcyBub3QgaGF2ZSBhIEdVSUQuJ30pO30KY29uc3QgZmxhZ3M9cmF3QWxsb2NhdG9yRHVtcC5mbGFnc3x8MDtjb25zdCBpc1dlYWtEdW1wPSEhKGZsYWdzJldFQUtfTUVNT1JZX0FMTE9DQVRPUl9EVU1QX0ZMQUcpO2xldCBjb250YWluZXJNZW1vcnlEdW1wO2xldCBkc3RJbmRleDtpZihmdWxsTmFtZS5zdGFydHNXaXRoKEdMT0JBTF9NRU1PUllfQUxMT0NBVE9SX0RVTVBfUFJFRklYKSl7ZnVsbE5hbWU9ZnVsbE5hbWUuc3Vic3RyaW5nKEdMT0JBTF9NRU1PUllfQUxMT0NBVE9SX0RVTVBfUFJFRklYLmxlbmd0aCk7Y29udGFpbmVyTWVtb3J5RHVtcD1nbG9iYWxNZW1vcnlEdW1wO2RzdEluZGV4PWdsb2JhbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZTt9ZWxzZXtjb250YWluZXJNZW1vcnlEdW1wPXByb2Nlc3NNZW1vcnlEdW1wO2RzdEluZGV4PXByb2Nlc3NNZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWU7fQpsZXQgYWxsb2NhdG9yRHVtcD1hbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZFtndWlkXTtpZihhbGxvY2F0b3JEdW1wPT09dW5kZWZpbmVkKXtpZihmdWxsTmFtZSBpbiBkc3RJbmRleCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J011bHRpcGxlIEdVSURzIHByb3ZpZGVkIGZvcicrJyBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnOiAnKwpkc3RJbmRleFtmdWxsTmFtZV0uZ3VpZCsnLCAnK2d1aWQrJyAoaWdub3JlZCkgZm9yJysnIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycuJ30pO2NvbnRpbnVlO30KYWxsb2NhdG9yRHVtcD1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcChjb250YWluZXJNZW1vcnlEdW1wLGZ1bGxOYW1lLGd1aWQpO2FsbG9jYXRvckR1bXAud2Vhaz1pc1dlYWtEdW1wO2RzdEluZGV4W2Z1bGxOYW1lXT1hbGxvY2F0b3JEdW1wO2lmKGd1aWQhPT11bmRlZmluZWQpe2FsbE1lbW9yeUFsbG9jYXRvckR1bXBzQnlHdWlkW2d1aWRdPWFsbG9jYXRvckR1bXA7fX1lbHNle2lmKGFsbG9jYXRvckR1bXAuY29udGFpbmVyTWVtb3J5RHVtcCE9PWNvbnRhaW5lck1lbW9yeUR1bXApe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnIChHVUlEPScrZ3VpZCsnKSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JysKZHVtcElkKycgZHVtcGVkIGluIGRpZmZlcmVudCBjb250ZXh0cy4nfSk7Y29udGludWU7fQppZihhbGxvY2F0b3JEdW1wLmZ1bGxOYW1lIT09ZnVsbE5hbWUpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNZW1vcnkgYWxsb2NhdG9yIGR1bXAgd2l0aCBHVUlEPScrZ3VpZCsnIGZvciBQSUQ9JysKcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBoYXMgbXVsdGlwbGUgbmFtZXM6ICcrCmFsbG9jYXRvckR1bXAuZnVsbE5hbWUrJywgJytmdWxsTmFtZSsnIChpZ25vcmVkKS4nfSk7Y29udGludWU7fQppZighaXNXZWFrRHVtcCl7YWxsb2NhdG9yRHVtcC53ZWFrPWZhbHNlO319CmxldCBhdHRyaWJ1dGVzPXJhd0FsbG9jYXRvckR1bXAuYXR0cnM7aWYoYXR0cmlidXRlcz09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J01lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgKEdVSUQ9JytndWlkKycpIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnIGRvZXMgbm90IGhhdmUgYXR0cmlidXRlcy4nfSk7YXR0cmlidXRlcz17fTt9CmZvcihjb25zdCBhdHRyTmFtZSBpbiBhdHRyaWJ1dGVzKXtjb25zdCBhdHRyQXJncz1hdHRyaWJ1dGVzW2F0dHJOYW1lXTtjb25zdCBhdHRyVHlwZT1hdHRyQXJncy50eXBlO2NvbnN0IGF0dHJWYWx1ZT1hdHRyQXJncy52YWx1ZTtzd2l0Y2goYXR0clR5cGUpe2Nhc2Unc2NhbGFyJzp7aWYoYXR0ck5hbWUgaW4gYWxsb2NhdG9yRHVtcC5udW1lcmljcyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J011bHRpcGxlIHZhbHVlcyBwcm92aWRlZCBmb3Igc2NhbGFyIGF0dHJpYnV0ZSAnKwphdHRyTmFtZSsnIG9mIG1lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgKEdVSUQ9JytndWlkKycpIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nKwpkdW1wSWQrJy4nfSk7YnJlYWs7fQpjb25zdCB1bml0PWF0dHJBcmdzLnVuaXRzPT09J2J5dGVzJz90ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcjp0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcjtjb25zdCB2YWx1ZT1wYXJzZUludChhdHRyVmFsdWUsMTYpO2FsbG9jYXRvckR1bXAuYWRkTnVtZXJpYyhhdHRyTmFtZSxuZXcgdHIuYi5TY2FsYXIodW5pdCx2YWx1ZSkpO2JyZWFrO30KY2FzZSdzdHJpbmcnOmlmKGF0dHJOYW1lIGluIGFsbG9jYXRvckR1bXAuZGlhZ25vc3RpY3Mpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNdWx0aXBsZSB2YWx1ZXMgcHJvdmlkZWQgZm9yIHN0cmluZyBhdHRyaWJ1dGUgJysKYXR0ck5hbWUrJyBvZiBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytmdWxsTmFtZSsnIChHVUlEPScrZ3VpZCsnKSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JysKZHVtcElkKycuJ30pO2JyZWFrO30KYWxsb2NhdG9yRHVtcC5hZGREaWFnbm9zdGljKGF0dHJOYW1lLGF0dHJWYWx1ZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonVW5rbm93biB0eXBlIHByb3ZpZGVkIGZvciBhdHRyaWJ1dGUgJythdHRyTmFtZSsnIG9mIG1lbW9yeSBhbGxvY2F0b3IgZHVtcCAnK2Z1bGxOYW1lKycgKEdVSUQ9JytndWlkKycpIGZvciBQSUQ9JytwaWQrJyBhbmQgZHVtcCBJRD0nK2R1bXBJZCsnOiAnKwphdHRyVHlwZX0pO2JyZWFrO319fX0saW5mZXJNZW1vcnlBbGxvY2F0b3JEdW1wVHJlZV8obWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lKXtjb25zdCByb290QWxsb2NhdG9yRHVtcHM9W107Y29uc3QgZnVsbE5hbWVzPU9iamVjdC5rZXlzKG1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZSk7ZnVsbE5hbWVzLnNvcnQoKTtmb3IobGV0IGk9MDtpPGZ1bGxOYW1lcy5sZW5ndGg7aSsrKXtsZXQgZnVsbE5hbWU9ZnVsbE5hbWVzW2ldO2xldCBhbGxvY2F0b3JEdW1wPW1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZVtmdWxsTmFtZV07d2hpbGUodHJ1ZSl7Y29uc3QgbGFzdFNsYXNoSW5kZXg9ZnVsbE5hbWUubGFzdEluZGV4T2YoJy8nKTtpZihsYXN0U2xhc2hJbmRleD09PS0xKXtyb290QWxsb2NhdG9yRHVtcHMucHVzaChhbGxvY2F0b3JEdW1wKTticmVhazt9CmNvbnN0IHBhcmVudEZ1bGxOYW1lPWZ1bGxOYW1lLnN1YnN0cmluZygwLGxhc3RTbGFzaEluZGV4KTtsZXQgcGFyZW50QWxsb2NhdG9yRHVtcD1tZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWVbcGFyZW50RnVsbE5hbWVdO2xldCBwYXJlbnRBbHJlYWR5RXhpc3RlZD10cnVlO2lmKHBhcmVudEFsbG9jYXRvckR1bXA9PT11bmRlZmluZWQpe3BhcmVudEFscmVhZHlFeGlzdGVkPWZhbHNlO3BhcmVudEFsbG9jYXRvckR1bXA9bmV3IHRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAoYWxsb2NhdG9yRHVtcC5jb250YWluZXJNZW1vcnlEdW1wLHBhcmVudEZ1bGxOYW1lKTtpZihhbGxvY2F0b3JEdW1wLndlYWshPT1mYWxzZSl7cGFyZW50QWxsb2NhdG9yRHVtcC53ZWFrPXVuZGVmaW5lZDt9Cm1lbW9yeUFsbG9jYXRvckR1bXBzQnlGdWxsTmFtZVtwYXJlbnRGdWxsTmFtZV09cGFyZW50QWxsb2NhdG9yRHVtcDt9CmFsbG9jYXRvckR1bXAucGFyZW50PXBhcmVudEFsbG9jYXRvckR1bXA7cGFyZW50QWxsb2NhdG9yRHVtcC5jaGlsZHJlbi5wdXNoKGFsbG9jYXRvckR1bXApO2lmKHBhcmVudEFscmVhZHlFeGlzdGVkKXtpZighYWxsb2NhdG9yRHVtcC53ZWFrKXt3aGlsZShwYXJlbnRBbGxvY2F0b3JEdW1wIT09dW5kZWZpbmVkJiZwYXJlbnRBbGxvY2F0b3JEdW1wLndlYWs9PT11bmRlZmluZWQpe3BhcmVudEFsbG9jYXRvckR1bXAud2Vhaz1mYWxzZTtwYXJlbnRBbGxvY2F0b3JEdW1wPXBhcmVudEFsbG9jYXRvckR1bXAucGFyZW50O319CmJyZWFrO30KZnVsbE5hbWU9cGFyZW50RnVsbE5hbWU7YWxsb2NhdG9yRHVtcD1wYXJlbnRBbGxvY2F0b3JEdW1wO319CmZvcihjb25zdCBmdWxsTmFtZSBpbiBtZW1vcnlBbGxvY2F0b3JEdW1wc0J5RnVsbE5hbWUpe2NvbnN0IGFsbG9jYXRvckR1bXA9bWVtb3J5QWxsb2NhdG9yRHVtcHNCeUZ1bGxOYW1lW2Z1bGxOYW1lXTtpZihhbGxvY2F0b3JEdW1wLndlYWs9PT11bmRlZmluZWQpe2FsbG9jYXRvckR1bXAud2Vhaz10cnVlO319CnJldHVybiByb290QWxsb2NhdG9yRHVtcHM7fSxwYXJzZU1lbW9yeUR1bXBBbGxvY2F0b3JFZGdlc18oYWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWQsZHVtcElkRXZlbnRzLGR1bXBJZCl7Zm9yKGNvbnN0IHBpZCBpbiBkdW1wSWRFdmVudHMpe2NvbnN0IHByb2Nlc3NFdmVudHM9ZHVtcElkRXZlbnRzW3BpZF07Zm9yKGxldCBpPTA7aTxwcm9jZXNzRXZlbnRzLmxlbmd0aDtpKyspe2NvbnN0IHByb2Nlc3NFdmVudD1wcm9jZXNzRXZlbnRzW2ldO2NvbnN0IGR1bXBzPXByb2Nlc3NFdmVudC5hcmdzLmR1bXBzO2lmKGR1bXBzPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHJhd0VkZ2VzPWR1bXBzLmFsbG9jYXRvcnNfZ3JhcGg7aWYocmF3RWRnZXM9PT11bmRlZmluZWQpY29udGludWU7Zm9yKGxldCBqPTA7ajxyYXdFZGdlcy5sZW5ndGg7aisrKXtjb25zdCByYXdFZGdlPXJhd0VkZ2VzW2pdO2NvbnN0IHNvdXJjZUd1aWQ9cmF3RWRnZS5zb3VyY2U7Y29uc3Qgc291cmNlRHVtcD1hbGxNZW1vcnlBbGxvY2F0b3JEdW1wc0J5R3VpZFtzb3VyY2VHdWlkXTtpZihzb3VyY2VEdW1wPT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonRWRnZSBmb3IgUElEPScrcGlkKycgYW5kIGR1bXAgSUQ9JytkdW1wSWQrJyBpcyBtaXNzaW5nIHNvdXJjZSBtZW1vcnkgYWxsb2NhdG9yIGR1bXAgKEdVSUQ9JysKc291cmNlR3VpZCsnKS4nfSk7Y29udGludWU7fQpjb25zdCB0YXJnZXRHdWlkPXJhd0VkZ2UudGFyZ2V0O2NvbnN0IHRhcmdldER1bXA9YWxsTWVtb3J5QWxsb2NhdG9yRHVtcHNCeUd1aWRbdGFyZ2V0R3VpZF07aWYodGFyZ2V0RHVtcD09PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonbWVtb3J5X2R1bXBfcGFyc2VfZXJyb3InLG1lc3NhZ2U6J0VkZ2UgZm9yIFBJRD0nK3BpZCsnIGFuZCBkdW1wIElEPScrZHVtcElkKycgaXMgbWlzc2luZyB0YXJnZXQgbWVtb3J5IGFsbG9jYXRvciBkdW1wIChHVUlEPScrCnRhcmdldEd1aWQrJykuJ30pO2NvbnRpbnVlO30KY29uc3QgaW1wb3J0YW5jZT1yYXdFZGdlLmltcG9ydGFuY2U7Y29uc3QgZWRnZT1uZXcgdHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcExpbmsoc291cmNlRHVtcCx0YXJnZXREdW1wLGltcG9ydGFuY2UpO3N3aXRjaChyYXdFZGdlLnR5cGUpe2Nhc2Unb3duZXJzaGlwJzppZihzb3VyY2VEdW1wLm93bnMhPT11bmRlZmluZWQpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J21lbW9yeV9kdW1wX3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNZW1vcnkgYWxsb2NhdG9yIGR1bXAgJytzb3VyY2VEdW1wLmZ1bGxOYW1lKycgKEdVSUQ9Jytzb3VyY2VHdWlkKycpIGFscmVhZHkgb3ducyBhIG1lbW9yeScrJyBhbGxvY2F0b3IgZHVtcCAoJysKc291cmNlRHVtcC5vd25zLnRhcmdldC5mdWxsTmFtZSsnKS4nfSk7fWVsc2V7c291cmNlRHVtcC5vd25zPWVkZ2U7dGFyZ2V0RHVtcC5vd25lZEJ5LnB1c2goZWRnZSk7fQpicmVhaztjYXNlJ3JldGVudGlvbic6c291cmNlRHVtcC5yZXRhaW5zLnB1c2goZWRnZSk7dGFyZ2V0RHVtcC5yZXRhaW5lZEJ5LnB1c2goZWRnZSk7YnJlYWs7ZGVmYXVsdDp0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidtZW1vcnlfZHVtcF9wYXJzZV9lcnJvcicsbWVzc2FnZTonSW52YWxpZCBlZGdlIHR5cGU6ICcrcmF3RWRnZS50eXBlKycgKFBJRD0nK3BpZCsnLCBkdW1wIElEPScrZHVtcElkKycsIHNvdXJjZT0nK3NvdXJjZUd1aWQrJywgdGFyZ2V0PScrdGFyZ2V0R3VpZCsnLCBpbXBvcnRhbmNlPScraW1wb3J0YW5jZSsnKS4nfSk7fX19fX0sdG9Nb2RlbFRpbWVGcm9tVXNfKHRzKXtpZighdGhpcy50b01vZGVsVGltZV8pe3RoaXMudG9Nb2RlbFRpbWVfPXRoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuZ2V0TW9kZWxUaW1lVHJhbnNmb3JtZXIodGhpcy5jbG9ja0RvbWFpbklkXyk7fQpyZXR1cm4gdGhpcy50b01vZGVsVGltZV8odHIuYi5Vbml0LnRpbWVzdGFtcEZyb21Vcyh0cykpO30sbWF5YmVUb01vZGVsVGltZUZyb21Vc18odHMpe2lmKHRzPT09dW5kZWZpbmVkKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMudG9Nb2RlbFRpbWVGcm9tVXNfKHRzKTt9LGR1cmF0aW9uRnJvbVVzXyhkdXIpe2lmKGR1cj09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybiB0ci5iLlVuaXQudGltZXN0YW1wRnJvbVVzKGR1cik7fX07dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucmVnaXN0ZXIoVHJhY2VFdmVudEltcG9ydGVyKTtyZXR1cm57VHJhY2VFdmVudEltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLm5ldCcsZnVuY3Rpb24oKXtjb25zdCBBc3luY1NsaWNlPXRyLm1vZGVsLkFzeW5jU2xpY2U7ZnVuY3Rpb24gTmV0QXN5bmNTbGljZSgpe0FzeW5jU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudXJsXz11bmRlZmluZWQ7dGhpcy5ieXRlQ291bnRfPXVuZGVmaW5lZDt0aGlzLmlzVGl0bGVDb21wdXRlZF89ZmFsc2U7dGhpcy5pc1VybENvbXB1dGVkXz1mYWxzZTt9Ck5ldEFzeW5jU2xpY2UucHJvdG90eXBlPXtfX3Byb3RvX186QXN5bmNTbGljZS5wcm90b3R5cGUsZ2V0IHZpZXdTdWJHcm91cFRpdGxlKCl7cmV0dXJuJ05ldExvZyc7fSxnZXQgdGl0bGUoKXtpZih0aGlzLmlzVGl0bGVDb21wdXRlZF98fCF0aGlzLmlzVG9wTGV2ZWwpe3JldHVybiB0aGlzLnRpdGxlXzt9CmlmKHRoaXMudXJsIT09dW5kZWZpbmVkJiZ0aGlzLnVybC5sZW5ndGg+MCl7dGhpcy50aXRsZV89dGhpcy51cmw7fWVsc2UgaWYodGhpcy5hcmdzIT09dW5kZWZpbmVkJiZ0aGlzLmFyZ3Muc291cmNlX3R5cGUhPT11bmRlZmluZWQpe3RoaXMudGl0bGVfPXRoaXMuYXJncy5zb3VyY2VfdHlwZTt9CnRoaXMuaXNUaXRsZUNvbXB1dGVkXz10cnVlO3JldHVybiB0aGlzLnRpdGxlXzt9LHNldCB0aXRsZSh0aXRsZSl7dGhpcy50aXRsZV89dGl0bGU7fSxnZXQgdXJsKCl7aWYodGhpcy5pc1VybENvbXB1dGVkXyl7cmV0dXJuIHRoaXMudXJsXzt9CmlmKHRoaXMuYXJncyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcy51cmwhPT11bmRlZmluZWQpe3RoaXMudXJsXz10aGlzLmFyZ3MucGFyYW1zLnVybDt9ZWxzZSBpZih0aGlzLnN1YlNsaWNlcyE9PXVuZGVmaW5lZCYmdGhpcy5zdWJTbGljZXMubGVuZ3RoPjApe2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJTbGljZXMubGVuZ3RoJiYhdGhpcy51cmxfO2krKyl7aWYodGhpcy5zdWJTbGljZXNbaV0udXJsIT09dW5kZWZpbmVkKXt0aGlzLnVybF89dGhpcy5zdWJTbGljZXNbaV0udXJsO319fQp0aGlzLmlzVXJsQ29tcHV0ZWRfPXRydWU7cmV0dXJuIHRoaXMudXJsXzt9LGdldCBieXRlQ291bnQoKXtpZih0aGlzLmJ5dGVDb3VudF8hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLmJ5dGVDb3VudF87fQp0aGlzLmJ5dGVDb3VudF89MDtpZigodGhpcy5vcmlnaW5hbFRpdGxlPT09J1VSTF9SRVFVRVNUX0pPQl9GSUxURVJFRF9CWVRFU19SRUFEJ3x8dGhpcy5vcmlnaW5hbFRpdGxlPT09J1VSTF9SRVFVRVNUX0pPQl9CWVRFU19SRUFEJykmJnRoaXMuYXJncyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcyE9PXVuZGVmaW5lZCYmdGhpcy5hcmdzLnBhcmFtcy5ieXRlX2NvdW50IT09dW5kZWZpbmVkKXt0aGlzLmJ5dGVDb3VudF89dGhpcy5hcmdzLnBhcmFtcy5ieXRlX2NvdW50O30KZm9yKGxldCBpPTA7aTx0aGlzLnN1YlNsaWNlcy5sZW5ndGg7aSsrKXt0aGlzLmJ5dGVDb3VudF8rPXRoaXMuc3ViU2xpY2VzW2ldLmJ5dGVDb3VudDt9CnJldHVybiB0aGlzLmJ5dGVDb3VudF87fX07QXN5bmNTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihOZXRBc3luY1NsaWNlLHtjYXRlZ29yeVBhcnRzOlsnbmV0bG9nJywnZGlzYWJsZWQtYnktZGVmYXVsdC1uZXRsb2cnXX0pO3JldHVybntOZXRBc3luY1NsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUGFyc2VyKGltcG9ydGVyKXt0aGlzLmltcG9ydGVyPWltcG9ydGVyO3RoaXMubW9kZWw9aW1wb3J0ZXIubW9kZWw7fQpQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZX07Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1QYXJzZXI7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFBhcnNlcixvcHRpb25zKTtyZXR1cm57UGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBBbmRyb2lkUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigndHJhY2luZ19tYXJrX3dyaXRlOmFuZHJvaWQnLEFuZHJvaWRQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQW5kcm9pZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCcwOmFuZHJvaWQnLEFuZHJvaWRQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQW5kcm9pZEV2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt0aGlzLnBwaWRzXz17fTt9CmZ1bmN0aW9uIHBhcnNlQXJncyhhcmdzU3RyaW5nKXtjb25zdCBhcmdzPXt9O2lmKGFyZ3NTdHJpbmcpe2NvbnN0IGFyZ3NBcnJheT1hcmdzU3RyaW5nLnNwbGl0KCc7Jyk7Zm9yKGxldCBpPTA7aTxhcmdzQXJyYXkubGVuZ3RoOysraSl7Y29uc3QgcGFydHM9YXJnc0FycmF5W2ldLnNwbGl0KCc9Jyk7aWYocGFydHNbMF0pe2FyZ3NbcGFydHMuc2hpZnQoKV09cGFydHMuam9pbignPScpO319fQpyZXR1cm4gYXJnczt9CkFuZHJvaWRQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxvcGVuQXN5bmNTbGljZSh0aHJlYWQsY2F0ZWdvcnksbmFtZSxjb29raWUsdHMsYXJncyl7Y29uc3QgYXN5bmNTbGljZUNvbnN0cnVjdG9yPXRyLm1vZGVsLkFzeW5jU2xpY2Uuc3ViVHlwZXMuZ2V0Q29uc3RydWN0b3IoY2F0ZWdvcnksbmFtZSk7Y29uc3Qgc2xpY2U9bmV3IGFzeW5jU2xpY2VDb25zdHJ1Y3RvcihjYXRlZ29yeSxuYW1lLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhuYW1lKSx0cyxhcmdzKTtjb25zdCBrZXk9Y2F0ZWdvcnkrJzonK25hbWUrJzonK2Nvb2tpZTtzbGljZS5pZD1jb29raWU7c2xpY2Uuc3RhcnRUaHJlYWQ9dGhyZWFkO2lmKCF0aGlzLm9wZW5Bc3luY1NsaWNlcyl7dGhpcy5vcGVuQXN5bmNTbGljZXM9e307fQp0aGlzLm9wZW5Bc3luY1NsaWNlc1trZXldPXNsaWNlO30sY2xvc2VBc3luY1NsaWNlKHRocmVhZCxjYXRlZ29yeSxuYW1lLGNvb2tpZSx0cyxhcmdzKXtpZighdGhpcy5vcGVuQXN5bmNTbGljZXMpe3JldHVybjt9CmNvbnN0IGtleT1jYXRlZ29yeSsnOicrbmFtZSsnOicrY29va2llO2NvbnN0IHNsaWNlPXRoaXMub3BlbkFzeW5jU2xpY2VzW2tleV07aWYoIXNsaWNlKXtyZXR1cm47fQpmb3IoY29uc3QgYXJnIGluIGFyZ3Mpe2lmKHNsaWNlLmFyZ3NbYXJnXSE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J0JvdGggdGhlIFMgYW5kIEYgZXZlbnRzIG9mICcrc2xpY2UudGl0bGUrJyBwcm92aWRlZCB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcrYXJnKycuJysnIFRoZSB2YWx1ZSBvZiB0aGUgRiBldmVudCB3aWxsIGJlIHVzZWQuJ30pO30Kc2xpY2UuYXJnc1thcmddPWFyZ3NbYXJnXTt9CnNsaWNlLmVuZFRocmVhZD10aHJlYWQ7c2xpY2UuZHVyYXRpb249dHMtc2xpY2Uuc3RhcnQ7c2xpY2Uuc3RhcnRUaHJlYWQuYXN5bmNTbGljZUdyb3VwLnB1c2goc2xpY2UpO2RlbGV0ZSB0aGlzLm9wZW5Bc3luY1NsaWNlc1trZXldO30sdHJhY2VNYXJrV3JpdGVBbmRyb2lkRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudERhdGE9ZXZlbnRCYXNlLmRldGFpbHMuc3BsaXQoJ3wnKTtzd2l0Y2goZXZlbnREYXRhWzBdKXtjYXNlJ0InOntjb25zdCBwcGlkPXBhcnNlSW50KGV2ZW50RGF0YVsxXSk7Y29uc3QgdGl0bGU9ZXZlbnREYXRhWzJdO2NvbnN0IGFyZ3M9cGFyc2VBcmdzKGV2ZW50RGF0YVszXSk7bGV0IGNhdGVnb3J5PWV2ZW50RGF0YVs0XTtpZihjYXRlZ29yeT09PXVuZGVmaW5lZCljYXRlZ29yeT0nYW5kcm9pZCc7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwcGlkKS5nZXRPckNyZWF0ZVRocmVhZChwaWQpO3RocmVhZC5uYW1lPWV2ZW50QmFzZS50aHJlYWROYW1lO2lmKCF0aHJlYWQuc2xpY2VHcm91cC5pc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidUaW1lc3RhbXBzIGFyZSBtb3ZpbmcgYmFja3dhcmQuJ30pO3JldHVybiBmYWxzZTt9CnRoaXMucHBpZHNfW3BpZF09cHBpZDt0aHJlYWQuc2xpY2VHcm91cC5iZWdpblNsaWNlKGNhdGVnb3J5LHRpdGxlLHRzLGFyZ3MpO2JyZWFrO30KY2FzZSdFJzp7Y29uc3QgcHBpZD10aGlzLnBwaWRzX1twaWRdO2lmKHBwaWQ9PT11bmRlZmluZWQpe2JyZWFrO30KY29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwcGlkKS5nZXRPckNyZWF0ZVRocmVhZChwaWQpO2lmKCF0aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudCl7YnJlYWs7fQpjb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh0cyk7Y29uc3QgYXJncz1wYXJzZUFyZ3MoZXZlbnREYXRhWzNdKTtmb3IoY29uc3QgYXJnIGluIGFyZ3Mpe2lmKHNsaWNlLmFyZ3NbYXJnXSE9PXVuZGVmaW5lZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J0JvdGggdGhlIEIgYW5kIEUgZXZlbnRzIG9mICcrc2xpY2UudGl0bGUrJyBwcm92aWRlZCB2YWx1ZXMgZm9yIGFyZ3VtZW50ICcrYXJnKycuJysnIFRoZSB2YWx1ZSBvZiB0aGUgRSBldmVudCB3aWxsIGJlIHVzZWQuJ30pO30Kc2xpY2UuYXJnc1thcmddPWFyZ3NbYXJnXTt9CmJyZWFrO30KY2FzZSdDJzp7Y29uc3QgcHBpZD1wYXJzZUludChldmVudERhdGFbMV0pO2NvbnN0IG5hbWU9ZXZlbnREYXRhWzJdO2NvbnN0IHZhbHVlPXBhcnNlSW50KGV2ZW50RGF0YVszXSk7bGV0IGNhdGVnb3J5PWV2ZW50RGF0YVs0XTtpZihjYXRlZ29yeT09PXVuZGVmaW5lZCljYXRlZ29yeT0nYW5kcm9pZCc7Y29uc3QgY3RyPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwcGlkKS5nZXRPckNyZWF0ZUNvdW50ZXIoY2F0ZWdvcnksbmFtZSk7aWYoY3RyLm51bVNlcmllcz09PTApe2N0ci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXModmFsdWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KY3RyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsdmFsdWUpO30pO2JyZWFrO30KY2FzZSdTJzp7Y29uc3QgcHBpZD1wYXJzZUludChldmVudERhdGFbMV0pO2NvbnN0IG5hbWU9ZXZlbnREYXRhWzJdO2NvbnN0IGNvb2tpZT1wYXJzZUludChldmVudERhdGFbM10pO2NvbnN0IGFyZ3M9cGFyc2VBcmdzKGV2ZW50RGF0YVs0XSk7bGV0IGNhdGVnb3J5PWV2ZW50RGF0YVs1XTtpZihjYXRlZ29yeT09PXVuZGVmaW5lZCljYXRlZ29yeT0nYW5kcm9pZCc7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwcGlkKS5nZXRPckNyZWF0ZVRocmVhZChwaWQpO3RocmVhZC5uYW1lPWV2ZW50QmFzZS50aHJlYWROYW1lO3RoaXMucHBpZHNfW3BpZF09cHBpZDt0aGlzLm9wZW5Bc3luY1NsaWNlKHRocmVhZCxjYXRlZ29yeSxuYW1lLGNvb2tpZSx0cyxhcmdzKTticmVhazt9CmNhc2UnRic6e2NvbnN0IHBwaWQ9cGFyc2VJbnQoZXZlbnREYXRhWzFdKTtjb25zdCBuYW1lPWV2ZW50RGF0YVsyXTtjb25zdCBjb29raWU9cGFyc2VJbnQoZXZlbnREYXRhWzNdKTtjb25zdCBhcmdzPXBhcnNlQXJncyhldmVudERhdGFbNF0pO2xldCBjYXRlZ29yeT1ldmVudERhdGFbNV07aWYoY2F0ZWdvcnk9PT11bmRlZmluZWQpY2F0ZWdvcnk9J2FuZHJvaWQnO2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MocHBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTt0aGlzLnBwaWRzX1twaWRdPXBwaWQ7dGhpcy5jbG9zZUFzeW5jU2xpY2UodGhyZWFkLGNhdGVnb3J5LG5hbWUsY29va2llLHRzLGFyZ3MpO2JyZWFrO30KZGVmYXVsdDpyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoQW5kcm9pZFBhcnNlcik7cmV0dXJue0FuZHJvaWRQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2NvbnN0IGJpbmRlclRyYW5zUkU9bmV3IFJlZ0V4cCgndHJhbnNhY3Rpb249KFxcZCspIGRlc3Rfbm9kZT0oXFxkKykgJysnZGVzdF9wcm9jPShcXGQrKSBkZXN0X3RocmVhZD0oXFxkKykgJysncmVwbHk9KFxcZCspIGZsYWdzPSgweFswLTlhLWZBLUZdKykgJysnY29kZT0oMHhbMC05YS1mQS1GXSspJyk7Y29uc3QgYmluZGVyQWxsb2NSRT1uZXcgUmVnRXhwKCd0cmFuc2FjdGlvbj0oXFxkKykgZGF0YV9zaXplPShcXGQrKSAnKydvZmZzZXRzX3NpemU9KFxcZCspJyk7Y29uc3QgYmluZGVyVHJhbnNSZWNlaXZlZFJFPS90cmFuc2FjdGlvbj0oXGQrKS87ZnVuY3Rpb24gaXNCaW5kZXJUaHJlYWQobmFtZSl7cmV0dXJuKG5hbWUuaW5kZXhPZignQmluZGVyJyk+LTEpO30KY29uc3QgVEZfT05FX1dBWT0weDAxO2NvbnN0IFRGX1JPT1RfT0JKRUNUPTB4MDQ7Y29uc3QgVEZfU1RBVFVTX0NPREU9MHgwODtjb25zdCBURl9BQ0NFUFRfRkRTPTB4MTA7Y29uc3QgTk9fRkxBR1M9MDtmdW5jdGlvbiBiaW5kZXJGbGFnc1RvSHVtYW4obnVtKXtjb25zdCBmbGFnPXBhcnNlSW50KG51bSwxNik7bGV0IHN0cj0nJztpZihmbGFnJlRGX09ORV9XQVkpe3N0cis9J3RoaXMgaXMgYSBvbmUtd2F5IGNhbGw6IGFzeW5jLCBubyByZXR1cm47ICc7fQppZihmbGFnJlRGX1JPT1RfT0JKRUNUKXtzdHIrPSdjb250ZW50cyBhcmUgdGhlIGNvbXBvbmVudHMgcm9vdCBvYmplY3Q7ICc7fQppZihmbGFnJlRGX1NUQVRVU19DT0RFKXtzdHIrPSdjb250ZW50cyBhcmUgYSAzMi1iaXQgc3RhdHVzIGNvZGU7ICc7fQppZihmbGFnJlRGX0FDQ0VQVF9GRFMpe3N0cis9J2FsbG93IHJlcGxpZXMgd2l0aCBmaWxlIGRlc2NyaXB0b3JzOyAnO30KaWYoZmxhZz09PU5PX0ZMQUdTKXtzdHIrPSdObyBGbGFncyBTZXQnO30KcmV0dXJuIHN0cjt9CmZ1bmN0aW9uIGlzUmVwbHlUb09yaWdpbihjYWxsaW5nLGNhbGxlZCl7cmV0dXJuKGNhbGxlZC5kZXN0X3Byb2M9PT1jYWxsaW5nLmNhbGxpbmdfcGlkfHxjYWxsZWQuZGVzdF90aHJlYWQ9PT1jYWxsaW5nLmNhbGxpbmdfcGlkKTt9CmZ1bmN0aW9uIGJpbmRlckNvZGVUb0h1bWFuKGNvZGUpe3JldHVybidKYXZhIExheWVyIERlcGVuZGVudCc7fQpmdW5jdGlvbiBkb0ludGVybmFsU2xpY2UodHJhbnMsc2xpY2UsdHMpe2lmKHNsaWNlLnN1YlNsaWNlcy5sZW5ndGghPT0wKXtzbGljZS5zdWJTbGljZXNbMF0uc3RhcnQ9dHM7cmV0dXJuIHNsaWNlLnN1YlNsaWNlc1swXTt9CmNvbnN0IGt0aHJlYWQ9dHJhbnMuY2FsbGluZ19rdGhyZWFkLnRocmVhZDtjb25zdCBpbnRlcm5hbFNsaWNlPWt0aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJyxzbGljZS50aXRsZSx0cywuMDAxLDAsMCxzbGljZS5hcmdzKTtpbnRlcm5hbFNsaWNlLnRpdGxlPXNsaWNlLnRpdGxlO2ludGVybmFsU2xpY2UuaWQ9c2xpY2UuaWQ7aW50ZXJuYWxTbGljZS5jb2xvcklkPXNsaWNlLmNvbG9ySWQ7c2xpY2Uuc3ViU2xpY2VzLnB1c2goaW50ZXJuYWxTbGljZSk7cmV0dXJuIGludGVybmFsU2xpY2U7fQpmdW5jdGlvbiBnZW5lcmF0ZUJpbmRlckFyZ3NGb3JTbGljZSh0cmFucyxjVGhyZWFkTmFtZSl7cmV0dXJueydUcmFuc2FjdGlvbiBJZCc6dHJhbnMudHJhbnNhY3Rpb25fa2V5LCdEZXN0aW5hdGlvbiBOb2RlJzp0cmFucy5kZXN0X25vZGUsJ0Rlc3RpbmF0aW9uIFByb2Nlc3MnOnRyYW5zLmRlc3RfcHJvYywnRGVzdGluYXRpb24gVGhyZWFkJzp0cmFucy5kZXN0X3RocmVhZCwnRGVzdGluYXRpb24gTmFtZSc6Y1RocmVhZE5hbWUsJ1JlcGx5IHRyYW5zYWN0aW9uPyc6dHJhbnMuaXNfcmVwbHlfdHJhbnNhY3Rpb24sJ0ZsYWdzJzp0cmFucy5mbGFncysnICcrCmJpbmRlckZsYWdzVG9IdW1hbih0cmFucy5mbGFncyksJ0NvZGUnOnRyYW5zLmNvZGUrJyAnKwpiaW5kZXJDb2RlVG9IdW1hbih0cmFucy5jb2RlKSwnQ2FsbGluZyBQSUQnOnRyYW5zLmNhbGxpbmdfcGlkLCdDYWxsaW5nIHRnaWQnOnRyYW5zLmNhbGxpbmdfa3RocmVhZC50aHJlYWQucGFyZW50LnBpZH07fQpmdW5jdGlvbiBCaW5kZXJUcmFuc2FjdGlvbihldmVudHMsY2FsbGluZ1BpZCxjYWxsaW5nVHMsY2FsbGluZ0t0aHJlYWQpe3RoaXMudHJhbnNhY3Rpb25fa2V5PXBhcnNlSW50KGV2ZW50c1sxXSk7dGhpcy5kZXN0X25vZGU9cGFyc2VJbnQoZXZlbnRzWzJdKTt0aGlzLmRlc3RfcHJvYz1wYXJzZUludChldmVudHNbM10pO3RoaXMuZGVzdF90aHJlYWQ9cGFyc2VJbnQoZXZlbnRzWzRdKTt0aGlzLmlzX3JlcGx5X3RyYW5zYWN0aW9uPXBhcnNlSW50KGV2ZW50c1s1XSk9PT0xP3RydWU6ZmFsc2U7dGhpcy5leHBlY3RfcmVwbHk9KCh0aGlzLmlzX3JlcGx5X3RyYW5zYWN0aW9uPT09ZmFsc2UpJiYocGFyc2VJbnQoZXZlbnRzWzZdLDE2KSZURl9PTkVfV0FZKT09PTApO3RoaXMuZmxhZ3M9ZXZlbnRzWzZdO3RoaXMuY29kZT1ldmVudHNbN107dGhpcy5jYWxsaW5nX3BpZD1jYWxsaW5nUGlkO3RoaXMuY2FsbGluZ190cz1jYWxsaW5nVHM7dGhpcy5jYWxsaW5nX2t0aHJlYWQ9Y2FsbGluZ0t0aHJlYWQ7fQpmdW5jdGlvbiBCaW5kZXJQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdiaW5kZXJfbG9ja2VkJyxCaW5kZXJQYXJzZXIucHJvdG90eXBlLmJpbmRlckxvY2tlZC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignYmluZGVyX3VubG9jaycsQmluZGVyUGFyc2VyLnByb3RvdHlwZS5iaW5kZXJVbmxvY2suYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2JpbmRlcl9sb2NrJyxCaW5kZXJQYXJzZXIucHJvdG90eXBlLmJpbmRlckxvY2suYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2JpbmRlcl90cmFuc2FjdGlvbicsQmluZGVyUGFyc2VyLnByb3RvdHlwZS5iaW5kZXJUcmFuc2FjdGlvbi5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignYmluZGVyX3RyYW5zYWN0aW9uX3JlY2VpdmVkJyxCaW5kZXJQYXJzZXIucHJvdG90eXBlLmJpbmRlclRyYW5zYWN0aW9uUmVjZWl2ZWQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2JpbmRlcl90cmFuc2FjdGlvbl9hbGxvY19idWYnLEJpbmRlclBhcnNlci5wcm90b3R5cGUuYmluZGVyVHJhbnNhY3Rpb25BbGxvY0J1Zi5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbDt0aGlzLmt0aHJlYWRsb29rdXA9e307dGhpcy5pbXBvcnRlcl89aW1wb3J0ZXI7dGhpcy50cmFuc1dhaXRpbmdSZWN2PXt9O3RoaXMuc3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb249e307dGhpcy5yZWN1cnNpdmVTeW5jVHJhbnNXYWl0aW5nQ29tcGxldGlvbl9CeVBJRD17fTt0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbj17fTt9CkJpbmRlclBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGJpbmRlckxvY2soZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtpZihpc05hTih0Z2lkKSlyZXR1cm4gZmFsc2U7dGhpcy5kb05hbWVNYXBwaW5ncyhwaWQsdGdpZCxldmVudE5hbWUudGhyZWFkTmFtZSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7a3RocmVhZC5iaW5kZXJBdHRlbXB0TG9ja1RTPXRzO2t0aHJlYWQuYmluZGVyT3BlblRzQT10cztyZXR1cm4gdHJ1ZTt9LGJpbmRlckxvY2tlZChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2lmKGlzTmFOKHRnaWQpKXJldHVybiBmYWxzZTtjb25zdCBiaW5kZXJUaHJlYWQ9aXNCaW5kZXJUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUpO2NvbnN0IG5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7dGhpcy5kb05hbWVNYXBwaW5ncyhwaWQsdGdpZCxuYW1lKTtjb25zdCBydGhyZWFkPWt0aHJlYWQudGhyZWFkO2t0aHJlYWQuYmluZGVyTG9ja0FxdWlyZWRUUz10cztpZihrdGhyZWFkLmJpbmRlckF0dGVtcHRMb2NrVFM9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2NvbnN0IGFyZ3M9dGhpcy5nZW5lcmF0ZUFyZ3NGb3JTbGljZSh0Z2lkLHBpZCxuYW1lLGt0aHJlYWQpO3J0aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnYmluZGVyIGxvY2sgd2FpdGluZycsa3RocmVhZC5iaW5kZXJBdHRlbXB0TG9ja1RTLHRzLWt0aHJlYWQuYmluZGVyQXR0ZW1wdExvY2tUUywwLDAsYXJncyk7a3RocmVhZC5iaW5kZXJBdHRlbXB0TG9ja1RTPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LGJpbmRlclVubG9jayhldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2lmKGlzTmFOKHRnaWQpKXJldHVybiBmYWxzZTtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXJfLmdldE9yQ3JlYXRlQmluZGVyS2VybmVsVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lLHRnaWQscGlkKTtpZihrdGhyZWFkLmJpbmRlckxvY2tBcXVpcmVkVFM9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2NvbnN0IGFyZ3M9dGhpcy5nZW5lcmF0ZUFyZ3NGb3JTbGljZSh0Z2lkLHBpZCxldmVudEJhc2UudGhyZWFkTmFtZSxrdGhyZWFkKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdiaW5kZXInLCdiaW5kZXIgbG9jayBoZWxkJyxrdGhyZWFkLmJpbmRlckxvY2tBcXVpcmVkVFMsdHMta3RocmVhZC5iaW5kZXJMb2NrQXF1aXJlZFRTLDAsMCxhcmdzKTtrdGhyZWFkLmJpbmRlckxvY2tBcXVpcmVkVFM9dW5kZWZpbmVkO3JldHVybiB0cnVlO30sYmluZGVyVHJhbnNhY3Rpb24oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1iaW5kZXJUcmFuc1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKGV2ZW50PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtpZihpc05hTih0Z2lkKSlyZXR1cm4gZmFsc2U7dGhpcy5kb05hbWVNYXBwaW5ncyhwaWQsdGdpZCxldmVudEJhc2UudGhyZWFkTmFtZSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7Y29uc3QgdHJhbnM9bmV3IEJpbmRlclRyYW5zYWN0aW9uKGV2ZW50LHBpZCx0cyxrdGhyZWFkKTtjb25zdCBhcmdzPWdlbmVyYXRlQmluZGVyQXJnc0ZvclNsaWNlKHRyYW5zLGV2ZW50QmFzZS50aHJlYWROYW1lKTtjb25zdCBwcmlvclJlY2VpdmU9dGhpcy5nZXRQcmlvclJlY2VpdmVPblBJRChwaWQpO2lmKHByaW9yUmVjZWl2ZSE9PWZhbHNlKXtyZXR1cm4gdGhpcy5tb2RlbFByaW9yUmVjZWl2ZShwcmlvclJlY2VpdmUsdHMscGlkLHRnaWQsa3RocmVhZCx0cmFucyxhcmdzLGV2ZW50KTt9CmNvbnN0IHJlY3Vyc2l2ZVRyYW5zPXRoaXMuZ2V0UmVjdXJzaXZlVHJhbnNhY3Rpb25OZWVkaW5nQ29tcGxldGlvbihwaWQpO2lmKHJlY3Vyc2l2ZVRyYW5zIT09ZmFsc2Upe3JldHVybiB0aGlzLm1vZGVsUmVjdXJzaXZlVHJhbnNhY3Rpb25zKHJlY3Vyc2l2ZVRyYW5zLHRzLHBpZCxrdGhyZWFkLHRyYW5zLGFyZ3MpO30KY29uc3Qgc2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnJyx0cywuMDMsMCwwLGFyZ3MpO3NsaWNlLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRzLnRvU3RyaW5nKCkpO3RyYW5zLnNsaWNlPXNsaWNlO2lmKHRyYW5zLmV4cGVjdF9yZXBseSl7c2xpY2UudGl0bGU9J2JpbmRlciB0cmFuc2FjdGlvbic7fWVsc2V7c2xpY2UudGl0bGU9J2JpbmRlciB0cmFuc2FjdGlvbiBhc3luYyc7fQp0aGlzLmFkZFRyYW5zYWN0aW9uV2FpdGluZ0ZvclJlY3YodHJhbnMudHJhbnNhY3Rpb25fa2V5LHRyYW5zKTtyZXR1cm4gdHJ1ZTt9LGJpbmRlclRyYW5zYWN0aW9uUmVjZWl2ZWQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1iaW5kZXJUcmFuc1JlY2VpdmVkUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoZXZlbnQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2lmKGlzTmFOKHRnaWQpKXJldHVybiBmYWxzZTtjb25zdCB0cmFuc2FjdGlvbmtleT1wYXJzZUludChldmVudFsxXSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7Y29uc3Qgc3luY0NvbXBsZXRlPXRoaXMuZ2V0U3luY1RyYW5zTmVlZHNDb21wbGV0aW9uKHRyYW5zYWN0aW9ua2V5KTtpZihzeW5jQ29tcGxldGUhPT1mYWxzZSl7Y29uc3Qgc3luY1RyYW5zPXN5bmNDb21wbGV0ZVswXTtjb25zdCBzeW5jU2xpY2U9c3luY1RyYW5zLnNsaWNlO2NvbnN0IHJlc3BvbnNlVHJhbnM9c3luY0NvbXBsZXRlWzFdO2NvbnN0IHJlc3BvbnNlU2xpY2U9cmVzcG9uc2VUcmFucy5zbGljZTtzeW5jU2xpY2UuZHVyYXRpb249dHMtc3luY1NsaWNlLnN0YXJ0O2NvbnN0IHN5bmNJbnRlcm5hbD1kb0ludGVybmFsU2xpY2Uoc3luY1RyYW5zLHN5bmNTbGljZSx0cyk7Y29uc3QgcmVzcG9uc2VUcz1yZXNwb25zZVNsaWNlLnN0YXJ0K3Jlc3BvbnNlU2xpY2UuZHVyYXRpb247Y29uc3QgcmVzcG9uc2VJbnRlcm5hbD1kb0ludGVybmFsU2xpY2UocmVzcG9uc2VUcmFucyxyZXNwb25zZVNsaWNlLHJlc3BvbnNlVHMpO2lmKHJlc3BvbnNlU2xpY2Uub3V0Rmxvd0V2ZW50cy5sZW5ndGg9PT0wfHxzeW5jU2xpY2UuaW5GbG93RXZlbnRzLmxlbmd0aD09PTApe2NvbnN0IGZsb3c9dGhpcy5nZW5lcmF0ZUZsb3cocmVzcG9uc2VJbnRlcm5hbCxzeW5jSW50ZXJuYWwscmVzcG9uc2VUcmFucyxzeW5jVHJhbnMpO3N5bmNTbGljZS5pbkZsb3dFdmVudHMucHVzaChmbG93KTtyZXNwb25zZVNsaWNlLm91dEZsb3dFdmVudHMucHVzaChmbG93KTt0aGlzLm1vZGVsXy5mbG93RXZlbnRzLnB1c2goZmxvdyk7fQpmb3IobGV0IGk9MTtpPHN5bmNTbGljZS5pbkZsb3dFdmVudHMubGVuZ3RoO2krKyl7c3luY1NsaWNlLmluRmxvd0V2ZW50c1tpXS5kdXJhdGlvbj10cy1zeW5jU2xpY2UuaW5GbG93RXZlbnRzW2ldLnN0YXJ0O30KcmV0dXJuIHRydWU7fQpjb25zdCB0ckZvclJlY3Y9dGhpcy5nZXRUcmFuc2FjdGlvbldhaXRpbmdGb3JSZWN2KHRyYW5zYWN0aW9ua2V5KTtpZih0ckZvclJlY3YhPT1mYWxzZSl7aWYoIXRyRm9yUmVjdi5leHBlY3RfcmVwbHkpe2NvbnN0IGFyZ3M9Z2VuZXJhdGVCaW5kZXJBcmdzRm9yU2xpY2UodHJGb3JSZWN2LGV2ZW50QmFzZS50aHJlYWROYW1lKTtjb25zdCBzbGljZT1rdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdiaW5kZXInLCdiaW5kZXIgQXN5bmMgcmVjdicsdHMsLjAzLDAsMCxhcmdzKTtjb25zdCBmYWtlRXZlbnQ9WzAsMCwwLDAsMCwwLDBdO2NvbnN0IGZha2VUcmFucz1uZXcgQmluZGVyVHJhbnNhY3Rpb24oZmFrZUV2ZW50LHBpZCx0cyxrdGhyZWFkKTtjb25zdCBmbG93PXRoaXMuZ2VuZXJhdGVGbG93KHRyRm9yUmVjdi5zbGljZSxzbGljZSx0ckZvclJlY3YsZmFrZVRyYW5zKTt0aGlzLm1vZGVsXy5mbG93RXZlbnRzLnB1c2goZmxvdyk7dHJGb3JSZWN2LnNsaWNlLnRpdGxlPSdiaW5kZXIgdHJhbnNhY3Rpb24gYXN5bmMnO3RyRm9yUmVjdi5zbGljZS5kdXJhdGlvbj0uMDM7cmV0dXJuIHRydWU7fQp0ckZvclJlY3Yuc2xpY2UudGl0bGU9J2JpbmRlciB0cmFuc2FjdGlvbic7dGhpcy5zZXRDdXJyZW50UmVjZWl2ZU9uUElEKHBpZCxbdHMsdHJGb3JSZWN2XSk7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fSxiaW5kZXJUcmFuc2FjdGlvbkFsbG9jQnVmKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9YmluZGVyQWxsb2NSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZihldmVudD09PW51bGwpcmV0dXJuIGZhbHNlO2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2lmKGlzTmFOKHRnaWQpKXJldHVybiBmYWxzZTtjb25zdCB0cmFuc2FjdGlvbmtleT1wYXJzZUludChldmVudFsxXSk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyXy5nZXRPckNyZWF0ZUJpbmRlcktlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7Y29uc3QgdHJhbnM9dGhpcy5wZWVrVHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSk7aWYodHJhbnMmJnRyYW5zLnNsaWNlKXt0cmFucy5zbGljZS5hcmdzWydEYXRhIFNpemUnXT1wYXJzZUludChldmVudFsyXSk7dHJhbnMuc2xpY2UuYXJnc1snT2Zmc2V0cyBTaXplJ109cGFyc2VJbnQoZXZlbnRbM10pO3JldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30sbW9kZWxSZWN1cnNpdmVUcmFuc2FjdGlvbnMocmVjdXJzaXZlVHJhbnMsdHMscGlkLGt0aHJlYWQsdHJhbnMsYXJncyl7Y29uc3QgcmVjdXJzaXZlU2xpY2U9cmVjdXJzaXZlVHJhbnNbMV0uc2xpY2U7Y29uc3Qgb3JpZ1NsaWNlPXJlY3Vyc2l2ZVRyYW5zWzBdLnNsaWNlO3JlY3Vyc2l2ZVNsaWNlLmR1cmF0aW9uPXRzLXJlY3Vyc2l2ZVNsaWNlLnN0YXJ0O3JlY3Vyc2l2ZVNsaWNlLmFyZ3M9YXJnczt0cmFucy5zbGljZT1yZWN1cnNpdmVTbGljZTtpZih0cmFucy5pc19yZXBseV90cmFuc2FjdGlvbil7b3JpZ1NsaWNlLmR1cmF0aW9uPXRzLW9yaWdTbGljZS5zdGFydDt0aGlzLmFkZFN5bmNUcmFuc05lZWRpbmdDb21wbGV0aW9uKHRyYW5zLnRyYW5zYWN0aW9uX2tleSxyZWN1cnNpdmVUcmFucyk7aWYoaXNSZXBseVRvT3JpZ2luKHJlY3Vyc2l2ZVRyYW5zWzBdLHRyYW5zKSl7dGhpcy5yZW1vdmVSZWN1cnNpdmVUcmFuc2FjdGlvbihwaWQpO319ZWxzZXtjb25zdCBzbGljZT1rdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hDb21wbGV0ZVNsaWNlKCdiaW5kZXInLCcnLHRzLC4wMywwLDAsYXJncyk7dHJhbnMuc2xpY2U9c2xpY2U7dGhpcy5hZGRUcmFuc2FjdGlvbldhaXRpbmdGb3JSZWN2KHRyYW5zLnRyYW5zYWN0aW9uX2tleSx0cmFucyk7fQpyZXR1cm4gdHJ1ZTt9LG1vZGVsUHJpb3JSZWNlaXZlKHByaW9yUmVjZWl2ZSx0cyxwaWQsdGdpZCxrdGhyZWFkLHRyYW5zLGFyZ3MsZXZlbnQpe2NvbnN0IGNhbGxlZVNsaWNlPXByaW9yUmVjZWl2ZVsxXS5zbGljZTtjb25zdCBjYWxsZWVUcmFucz1wcmlvclJlY2VpdmVbMV07Y29uc3QgcmVjdlRzPXByaW9yUmVjZWl2ZVswXTtsZXQgc2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnJyxyZWN2VHMsdHMtcmVjdlRzLDAsMCk7Y29uc3QgZmxvdz10aGlzLmdlbmVyYXRlRmxvdyhjYWxsZWVTbGljZSxzbGljZSxjYWxsZWVUcmFucyx0cmFucyk7dGhpcy5tb2RlbF8uZmxvd0V2ZW50cy5wdXNoKGZsb3cpO3RyYW5zLnNsaWNlPXNsaWNlO2lmKHRyYW5zLmlzX3JlcGx5X3RyYW5zYWN0aW9uKXtzbGljZS50aXRsZT0nYmluZGVyIHJlcGx5JztzbGljZS5hcmdzPWFyZ3M7dGhpcy5hZGRTeW5jVHJhbnNOZWVkaW5nQ29tcGxldGlvbih0cmFucy50cmFuc2FjdGlvbl9rZXksW2NhbGxlZVRyYW5zLHRyYW5zXSk7fWVsc2V7c2xpY2UudGl0bGU9J2JpbmRlciByZXBseSc7Y29uc3QgdHJhbnMxPW5ldyBCaW5kZXJUcmFuc2FjdGlvbihldmVudCxwaWQsdHMsa3RocmVhZCk7c2xpY2U9a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnYmluZGVyJywnYmluZGVyIHRyYW5zYWN0aW9uJyxyZWN2VHMsKHRzLXJlY3ZUcyksMCwwLGFyZ3MpO2lmKCF0cmFucy5leHBlY3RfcmVwbHkpe3NsaWNlLnRpdGxlPSdiaW5kZXIgdHJhbnNhY3Rpb24gYXN5bmMnO3NsaWNlLmR1cmF0aW9uPS4wMzt9ZWxzZXt9CnRyYW5zMS5zbGljZT1zbGljZTt0aGlzLmFkZFJlY3Vyc2l2ZVN5bmNUcmFuc05lZWRpbmdDb21wbGV0aW9uKHBpZCxbY2FsbGVlVHJhbnMsdHJhbnNdKTt0aGlzLmFkZFRyYW5zYWN0aW9uV2FpdGluZ0ZvclJlY3YodHJhbnMudHJhbnNhY3Rpb25fa2V5LHRyYW5zMSk7fQpyZXR1cm4gdHJ1ZTt9LGdldFJlY3Vyc2l2ZVRyYW5zYWN0aW9uTmVlZGluZ0NvbXBsZXRpb24ocGlkKXtpZih0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF09PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IGxlbj10aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF0ubGVuZ3RoO2lmKGxlbj09PTApcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF1bbGVuLTFdO30sYWRkUmVjdXJzaXZlU3luY1RyYW5zTmVlZGluZ0NvbXBsZXRpb24ocGlkLHR1cGxlKXtpZih0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF09PT11bmRlZmluZWQpe3RoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXT1bXTt9CnRoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXS5wdXNoKHR1cGxlKTt9LHJlbW92ZVJlY3Vyc2l2ZVRyYW5zYWN0aW9uKHBpZCl7Y29uc3QgbGVuPXRoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXS5sZW5ndGg7aWYobGVuPT09MCl7ZGVsZXRlIHRoaXMucmVjdXJzaXZlU3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25fQnlQSURbcGlkXTtyZXR1cm47fQp0aGlzLnJlY3Vyc2l2ZVN5bmNUcmFuc1dhaXRpbmdDb21wbGV0aW9uX0J5UElEW3BpZF0uc3BsaWNlKGxlbi0xLDEpO30sc2V0Q3VycmVudFJlY2VpdmVPblBJRChwaWQsdHVwbGUpe2lmKHRoaXMucmVjZWl2ZWRUcmFuc1dhaXRpbmdDb252ZXJzaW9uW3BpZF09PT11bmRlZmluZWQpe3RoaXMucmVjZWl2ZWRUcmFuc1dhaXRpbmdDb252ZXJzaW9uW3BpZF09W107fQp0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbltwaWRdLnB1c2godHVwbGUpO30sZ2V0UHJpb3JSZWNlaXZlT25QSUQocGlkKXtpZih0aGlzLnJlY2VpdmVkVHJhbnNXYWl0aW5nQ29udmVyc2lvbltwaWRdPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2U7fQpjb25zdCBsZW49dGhpcy5yZWNlaXZlZFRyYW5zV2FpdGluZ0NvbnZlcnNpb25bcGlkXS5sZW5ndGg7aWYobGVuPT09MClyZXR1cm4gZmFsc2U7cmV0dXJuIHRoaXMucmVjZWl2ZWRUcmFuc1dhaXRpbmdDb252ZXJzaW9uW3BpZF0uc3BsaWNlKGxlbi0xLDEpWzBdO30sYWRkU3luY1RyYW5zTmVlZGluZ0NvbXBsZXRpb24odHJhbnNhY3Rpb25rZXksdHVwbGUpe2NvbnN0IGRpY3Q9dGhpcy5zeW5jVHJhbnNXYWl0aW5nQ29tcGxldGlvbjtkaWN0W3RyYW5zYWN0aW9ua2V5XT10dXBsZTt9LGdldFN5bmNUcmFuc05lZWRzQ29tcGxldGlvbih0cmFuc2FjdGlvbmtleSl7Y29uc3QgcmV0PXRoaXMuc3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25bdHJhbnNhY3Rpb25rZXldO2lmKHJldD09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7ZGVsZXRlIHRoaXMuc3luY1RyYW5zV2FpdGluZ0NvbXBsZXRpb25bdHJhbnNhY3Rpb25rZXldO3JldHVybiByZXQ7fSxnZXRUcmFuc2FjdGlvbldhaXRpbmdGb3JSZWN2KHRyYW5zYWN0aW9ua2V5KXtjb25zdCByZXQ9dGhpcy50cmFuc1dhaXRpbmdSZWN2W3RyYW5zYWN0aW9ua2V5XTtpZihyZXQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2RlbGV0ZSB0aGlzLnRyYW5zV2FpdGluZ1JlY3ZbdHJhbnNhY3Rpb25rZXldO3JldHVybiByZXQ7fSxwZWVrVHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSl7Y29uc3QgcmV0PXRoaXMudHJhbnNXYWl0aW5nUmVjdlt0cmFuc2FjdGlvbmtleV07aWYocmV0PT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtyZXR1cm4gcmV0O30sYWRkVHJhbnNhY3Rpb25XYWl0aW5nRm9yUmVjdih0cmFuc2FjdGlvbmtleSx0cmFuc2FjdGlvbil7dGhpcy50cmFuc1dhaXRpbmdSZWN2W3RyYW5zYWN0aW9ua2V5XT10cmFuc2FjdGlvbjt9LGdlbmVyYXRlRmxvdyhmcm9tLHRvLGZyb21UcmFucyx0b1RyYW5zKXtjb25zdCB0aXRsZT0nVHJhbnNhY3Rpb24gZnJvbSA6ICcrCnRoaXMucGlkMm5hbWUoZnJvbVRyYW5zLmNhbGxpbmdfcGlkKSsnIEZyb20gUElEOiAnK2Zyb21UcmFucy5jYWxsaW5nX3BpZCsnIHRvIHBpZDogJysKdG9UcmFucy5jYWxsaW5nX3BpZCsnIFRocmVhZCBOYW1lOiAnK3RoaXMucGlkMm5hbWUodG9UcmFucy5jYWxsaW5nX3BpZCk7Y29uc3QgdHM9ZnJvbS5zdGFydDtjb25zdCBmbG93PW5ldyB0ci5tb2RlbC5GbG93RXZlbnQoJ2JpbmRlcicsJ2JpbmRlcicsdGl0bGUsMSx0cyxbXSk7Zmxvdy5zdGFydFNsaWNlPWZyb207Zmxvdy5lbmRTbGljZT10bztmbG93LnN0YXJ0PWZyb20uc3RhcnQ7Zmxvdy5kdXJhdGlvbj10by5zdGFydC10cztmcm9tLm91dEZsb3dFdmVudHMucHVzaChmbG93KTt0by5pbkZsb3dFdmVudHMucHVzaChmbG93KTtyZXR1cm4gZmxvdzt9LGdlbmVyYXRlQXJnc0ZvclNsaWNlKHRnaWQscGlkLG5hbWUsa3RocmVhZCl7cmV0dXJueydUaHJlYWQgTmFtZSc6bmFtZSxwaWQsJ2dpZCc6dGdpZH07fSxwaWQybmFtZShwaWQpe3JldHVybiB0aGlzLmt0aHJlYWRsb29rdXBbcGlkXTt9LGRvTmFtZU1hcHBpbmdzKHBpZCx0Z2lkLG5hbWUpe3RoaXMucmVnaXN0ZXJQaWROYW1lKHBpZCxuYW1lKTt0aGlzLnJlZ2lzdGVyUGlkTmFtZSh0Z2lkLG5hbWUpO30scmVnaXN0ZXJQaWROYW1lKHBpZCxuYW1lKXtpZih0aGlzLnBpZDJuYW1lKHBpZCk9PT11bmRlZmluZWQpe3RoaXMua3RocmVhZGxvb2t1cFtwaWRdPW5hbWU7fX19O1BhcnNlci5yZWdpc3RlcihCaW5kZXJQYXJzZXIpO3JldHVybntCaW5kZXJQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEJ1c1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21lbW9yeV9idXNfdXNhZ2UnLEJ1c1BhcnNlci5wcm90b3R5cGUudHJhY2VNYXJrV3JpdGVCdXNFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87dGhpcy5wcGlkc189e307fQpCdXNQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSx0cmFjZU1hcmtXcml0ZUJ1c0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCByZT1uZXcgUmVnRXhwKCdidXM9KFxcUyspIHJ3X2J5dGVzPShcXGQrKSByX2J5dGVzPShcXGQrKSAnKyd3X2J5dGVzPShcXGQrKSBjeWNsZXM9KFxcZCspIG5zPShcXGQrKScpO2NvbnN0IGV2ZW50PXJlLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgcndCeXRlcz1wYXJzZUludChldmVudFsyXSk7Y29uc3QgckJ5dGVzPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCB3Qnl0ZXM9cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGN5Y2xlcz1wYXJzZUludChldmVudFs1XSk7Y29uc3QgbnM9cGFyc2VJbnQoZXZlbnRbNl0pO2NvbnN0IHNlYz10ci5iLmNvbnZlcnRVbml0KG5zLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OQU5PLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OT05FKTtjb25zdCByZWFkQmFuZHdpZHRoSW5CcHM9ckJ5dGVzL3NlYztjb25zdCByZWFkQmFuZHdpZHRoSW5NaUJwcz10ci5iLmNvbnZlcnRVbml0KHJlYWRCYW5kd2lkdGhJbkJwcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSk7Y29uc3Qgd3JpdGVCYW5kd2lkdGhJbkJwcz13Qnl0ZXMvc2VjO2NvbnN0IHdyaXRlQmFuZHdpZHRoSW5NaUJwcz10ci5iLmNvbnZlcnRVbml0KHdyaXRlQmFuZHdpZHRoSW5CcHMsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkkpO2xldCBjdHI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihudWxsLCdidXMgJytuYW1lKycgcmVhZCcpO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtjdHIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCd2YWx1ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KY3RyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMscmVhZEJhbmR3aWR0aEluTWlCcHMpO30pO2N0cj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKG51bGwsJ2J1cyAnK25hbWUrJyB3cml0ZScpO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtjdHIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCd2YWx1ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KY3RyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsd3JpdGVCYW5kd2lkdGhJbk1pQnBzKTt9KTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoQnVzUGFyc2VyKTtyZXR1cm57QnVzUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBDbG9ja1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Nsb2NrX3NldF9yYXRlJyxDbG9ja1BhcnNlci5wcm90b3R5cGUudHJhY2VNYXJrV3JpdGVDbG9ja0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjbGtfc2V0X3JhdGUnLENsb2NrUGFyc2VyLnByb3RvdHlwZS50cmFjZU1hcmtXcml0ZUNsa0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjbG9ja19lbmFibGUnLENsb2NrUGFyc2VyLnByb3RvdHlwZS50cmFjZU1hcmtXcml0ZUNsb2NrT25PZmZFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY2xvY2tfZGlzYWJsZScsQ2xvY2tQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQ2xvY2tPbk9mZkV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjbGtfZW5hYmxlJyxDbG9ja1BhcnNlci5wcm90b3R5cGUudHJhY2VNYXJrV3JpdGVDbGtPbkV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjbGtfZGlzYWJsZScsQ2xvY2tQYXJzZXIucHJvdG90eXBlLnRyYWNlTWFya1dyaXRlQ2xrT2ZmRXZlbnQuYmluZCh0aGlzKSk7dGhpcy5tb2RlbF89aW1wb3J0ZXIubW9kZWxfO3RoaXMucHBpZHNfPXt9O30KQ2xvY2tQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxjbG9ja01hcmsobmFtZSxzdWJOYW1lLHZhbHVlLHRzKXtjb25zdCBjdHI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihudWxsLG5hbWUrJyAnK3N1Yk5hbWUpO2lmKGN0ci5udW1TZXJpZXM9PT0wKXtjdHIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCd2YWx1ZScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ci5uYW1lKycuJysndmFsdWUnKSkpO30KY3RyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsdmFsdWUpO30pO30sdHJhY2VNYXJrV3JpdGVDbG9ja0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCBldmVudD0vKFxTKykgc3RhdGU9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgcmF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jbG9ja01hcmsobmFtZSwnRnJlcXVlbmN5JyxyYXRlLHRzKTtyZXR1cm4gdHJ1ZTt9LHRyYWNlTWFya1dyaXRlQ2xrRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpe2NvbnN0IGV2ZW50PS8oXFMrKSAoXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7Y29uc3QgbmFtZT1ldmVudFsxXTtjb25zdCByYXRlPXBhcnNlSW50KGV2ZW50WzJdKTt0aGlzLmNsb2NrTWFyayhuYW1lLCdGcmVxdWVuY3knLHJhdGUsdHMpO3JldHVybiB0cnVlO30sdHJhY2VNYXJrV3JpdGVDbG9ja09uT2ZmRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpe2NvbnN0IGV2ZW50PS8oXFMrKSBzdGF0ZT0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7Y29uc3QgbmFtZT1ldmVudFsxXTtjb25zdCBzdGF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jbG9ja01hcmsobmFtZSwnU3RhdGUnLHN0YXRlLHRzKTtyZXR1cm4gdHJ1ZTt9LHRyYWNlTWFya1dyaXRlQ2xrT25FdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2UsdGhyZWFkTmFtZSl7Y29uc3QgZXZlbnQ9L1xTKy8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7Y29uc3QgbmFtZT1ldmVudFswXTt0aGlzLmNsb2NrTWFyayhuYW1lLCdTdGF0ZScsMSx0cyk7cmV0dXJuIHRydWU7fSx0cmFjZU1hcmtXcml0ZUNsa09mZkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCBldmVudD0vXFMrLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtjb25zdCBuYW1lPWV2ZW50WzBdO3RoaXMuY2xvY2tNYXJrKG5hbWUsJ1N0YXRlJywwLHRzKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoQ2xvY2tQYXJzZXIpO3JldHVybntDbG9ja1BhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gQ3B1ZnJlcVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfdXAnLENwdWZyZXFQYXJzZXIucHJvdG90eXBlLmNwdWZyZXFVcERvd25FdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1ZnJlcV9pbnRlcmFjdGl2ZV9kb3duJyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxVXBEb3duRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfYWxyZWFkeScsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcVRhcmdldEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX25vdHlldCcsQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGUuY3B1ZnJlcVRhcmdldEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVmcmVxX2ludGVyYWN0aXZlX3NldHNwZWVkJyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxVGFyZ2V0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfdGFyZ2V0JyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxVGFyZ2V0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdWZyZXFfaW50ZXJhY3RpdmVfYm9vc3QnLENwdWZyZXFQYXJzZXIucHJvdG90eXBlLmNwdWZyZXFCb29zdFVuYm9vc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignY3B1ZnJlcV9pbnRlcmFjdGl2ZV91bmJvb3N0JyxDcHVmcmVxUGFyc2VyLnByb3RvdHlwZS5jcHVmcmVxQm9vc3RVbmJvb3N0RXZlbnQuYmluZCh0aGlzKSk7fQpmdW5jdGlvbiBzcGxpdERhdGEoaW5wdXQpe2NvbnN0IGRhdGE9e307Y29uc3QgYXJncz1pbnB1dC5zcGxpdCgvXHMrLyk7Y29uc3QgbGVuPWFyZ3MubGVuZ3RoO2ZvcihsZXQgaT0wO2k8bGVuO2krKyl7Y29uc3QgaXRlbT1hcmdzW2ldLnNwbGl0KCc9Jyk7ZGF0YVtpdGVtWzBdXT1wYXJzZUludChpdGVtWzFdKTt9CnJldHVybiBkYXRhO30KQ3B1ZnJlcVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGNwdWZyZXFTbGljZSh0cyxldmVudE5hbWUsY3B1LGFyZ3Mpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnY3B1ZnJlcScpO2t0aHJlYWQub3BlblNsaWNlPWV2ZW50TmFtZTtjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSx0cyxhcmdzLDApO2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9LGNwdWZyZXFCb29zdFNsaWNlKHRzLGV2ZW50TmFtZSxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2NwdWZyZXFfYm9vc3QnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWU7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxjcHVmcmVxVXBEb3duRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBkYXRhPXNwbGl0RGF0YShldmVudEJhc2UuZGV0YWlscyk7dGhpcy5jcHVmcmVxU2xpY2UodHMsZXZlbnROYW1lLGRhdGEuY3B1LGRhdGEpO3JldHVybiB0cnVlO30sY3B1ZnJlcVRhcmdldEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZGF0YT1zcGxpdERhdGEoZXZlbnRCYXNlLmRldGFpbHMpO3RoaXMuY3B1ZnJlcVNsaWNlKHRzLGV2ZW50TmFtZSxkYXRhLmNwdSxkYXRhKTtyZXR1cm4gdHJ1ZTt9LGNwdWZyZXFCb29zdFVuYm9vc3RFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3RoaXMuY3B1ZnJlcUJvb3N0U2xpY2UodHMsZXZlbnROYW1lLHt0eXBlOmV2ZW50QmFzZS5kZXRhaWxzfSk7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKENwdWZyZXFQYXJzZXIpO3JldHVybntDcHVmcmVxUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBEaXNrUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZjJmc193cml0ZV9iZWdpbicsRGlza1BhcnNlci5wcm90b3R5cGUuZjJmc1dyaXRlQmVnaW5FdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZjJmc193cml0ZV9lbmQnLERpc2tQYXJzZXIucHJvdG90eXBlLmYyZnNXcml0ZUVuZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdmMmZzX3N5bmNfZmlsZV9lbnRlcicsRGlza1BhcnNlci5wcm90b3R5cGUuZjJmc1N5bmNGaWxlRW50ZXJFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZjJmc19zeW5jX2ZpbGVfZXhpdCcsRGlza1BhcnNlci5wcm90b3R5cGUuZjJmc1N5bmNGaWxlRXhpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdleHQ0X3N5bmNfZmlsZV9lbnRlcicsRGlza1BhcnNlci5wcm90b3R5cGUuZXh0NFN5bmNGaWxlRW50ZXJFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh0NF9zeW5jX2ZpbGVfZXhpdCcsRGlza1BhcnNlci5wcm90b3R5cGUuZXh0NFN5bmNGaWxlRXhpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdleHQ0X2RhX3dyaXRlX2JlZ2luJyxEaXNrUGFyc2VyLnByb3RvdHlwZS5leHQ0V3JpdGVCZWdpbkV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdleHQ0X2RhX3dyaXRlX2VuZCcsRGlza1BhcnNlci5wcm90b3R5cGUuZXh0NFdyaXRlRW5kRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2Jsb2NrX3JxX2lzc3VlJyxEaXNrUGFyc2VyLnByb3RvdHlwZS5ibG9ja1JxSXNzdWVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignYmxvY2tfcnFfY29tcGxldGUnLERpc2tQYXJzZXIucHJvdG90eXBlLmJsb2NrUnFDb21wbGV0ZUV2ZW50LmJpbmQodGhpcykpO30KRGlza1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLG9wZW5Bc3luY1NsaWNlKHRzLGNhdGVnb3J5LHRocmVhZE5hbWUscGlkLGtleSxuYW1lKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVLZXJuZWxUaHJlYWQoY2F0ZWdvcnkrJzonK3RocmVhZE5hbWUscGlkKTtjb25zdCBhc3luY1NsaWNlQ29uc3RydWN0b3I9dHIubW9kZWwuQXN5bmNTbGljZS5zdWJUeXBlcy5nZXRDb25zdHJ1Y3RvcihjYXRlZ29yeSxuYW1lKTtjb25zdCBzbGljZT1uZXcgYXN5bmNTbGljZUNvbnN0cnVjdG9yKGNhdGVnb3J5LG5hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG5hbWUpLHRzKTtzbGljZS5zdGFydFRocmVhZD1rdGhyZWFkLnRocmVhZDtpZigha3RocmVhZC5vcGVuQXN5bmNTbGljZXMpe2t0aHJlYWQub3BlbkFzeW5jU2xpY2VzPXt9O30Ka3RocmVhZC5vcGVuQXN5bmNTbGljZXNba2V5XT1zbGljZTt9LGNsb3NlQXN5bmNTbGljZSh0cyxjYXRlZ29yeSx0aHJlYWROYW1lLHBpZCxrZXksYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGNhdGVnb3J5Kyc6Jyt0aHJlYWROYW1lLHBpZCk7aWYoa3RocmVhZC5vcGVuQXN5bmNTbGljZXMpe2NvbnN0IHNsaWNlPWt0aHJlYWQub3BlbkFzeW5jU2xpY2VzW2tleV07aWYoc2xpY2Upe3NsaWNlLmR1cmF0aW9uPXRzLXNsaWNlLnN0YXJ0O3NsaWNlLmFyZ3M9YXJncztzbGljZS5lbmRUaHJlYWQ9a3RocmVhZC50aHJlYWQ7c2xpY2Uuc3ViU2xpY2VzPVtuZXcgdHIubW9kZWwuQXN5bmNTbGljZShjYXRlZ29yeSxzbGljZS50aXRsZSxzbGljZS5jb2xvcklkLHNsaWNlLnN0YXJ0LHNsaWNlLmFyZ3Msc2xpY2UuZHVyYXRpb24pXTtrdGhyZWFkLnRocmVhZC5hc3luY1NsaWNlR3JvdXAucHVzaChzbGljZSk7ZGVsZXRlIGt0aHJlYWQub3BlbkFzeW5jU2xpY2VzW2tleV07fX19LGYyZnNXcml0ZUJlZ2luRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2ID0gXCgoXGQrLFxkKylcKSwgaW5vID0gKFxkKyksIHBvcyA9IChcZCspLCBsZW4gPSAoXGQrKSwgZmxhZ3MgPSAoXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHBvcz1wYXJzZUludChldmVudFszXSk7Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzRdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZjJmcycsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksJ2YyZnNfd3JpdGUnKTtyZXR1cm4gdHJ1ZTt9LGYyZnNXcml0ZUVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2RldiA9IFwoKFxkKyxcZCspXCksIGlubyA9IChcZCspLCBwb3MgPSAoXGQrKSwgbGVuID0gKFxkKyksIGNvcGllZCA9IChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgcG9zPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBsZW49cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGVycm9yPXBhcnNlSW50KGV2ZW50WzVdKSE9PWxlbjtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGV4dDRXcml0ZUJlZ2luRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2IChcZCssXGQrKSBpbm8gKFxkKykgcG9zIChcZCspIGxlbiAoXGQrKSBmbGFncyAoXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHBvcz1wYXJzZUludChldmVudFszXSk7Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzRdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZXh0NCcsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksJ2V4dDRfd3JpdGUnKTtyZXR1cm4gdHJ1ZTt9LGV4dDRXcml0ZUVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2RldiAoXGQrLFxkKykgaW5vIChcZCspIHBvcyAoXGQrKSBsZW4gKFxkKykgY29waWVkIChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgcG9zPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBsZW49cGFyc2VJbnQoZXZlbnRbNF0pO2NvbnN0IGVycm9yPXBhcnNlSW50KGV2ZW50WzVdKSE9PWxlbjtjb25zdCBrZXk9ZGV2aWNlKyctJytpbm9kZSsnLScrcG9zKyctJytsZW47dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2V4dDQnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGYyZnNTeW5jRmlsZUVudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1uZXcgUmVnRXhwKCdkZXYgPSBcXCgoXFxkKyxcXGQrKVxcKSwgaW5vID0gKFxcZCspLCBwaW5vID0gKFxcZCspLCBpX21vZGUgPSAoXFxTKyksICcrJ2lfc2l6ZSA9IChcXGQrKSwgaV9ubGluayA9IChcXGQrKSwgaV9ibG9ja3MgPSAoXFxkKyksIGlfYWR2aXNlID0gKFxcZCspJykuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3QgaW5vZGU9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGtleT1kZXZpY2UrJy0nK2lub2RlO3RoaXMub3BlbkFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LCdmc3luYycpO3JldHVybiB0cnVlO30sZjJmc1N5bmNGaWxlRXhpdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9bmV3IFJlZ0V4cCgnZGV2ID0gXFwoKFxcZCssXFxkKylcXCksIGlubyA9IChcXGQrKSwgY2hlY2twb2ludCBpcyAoXFxTKyksICcrJ2RhdGFzeW5jID0gKFxcZCspLCByZXQgPSAoXFxkKyknKS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzLnJlcGxhY2UoJ25vdCBuZWVkZWQnLCdub3RfbmVlZGVkJykpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IGlub2RlPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBlcnJvcj1wYXJzZUludChldmVudFs1XSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2YyZnMnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGV4dDRTeW5jRmlsZUVudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2IChcZCssXGQrKSBpbm8gKFxkKykgcGFyZW50IChcZCspIGRhdGFzeW5jIChcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldmljZT1ldmVudFsxXTtjb25zdCBpbm9kZT1wYXJzZUludChldmVudFsyXSk7Y29uc3QgZGF0YXN5bmM9KGV2ZW50WzRdPT09JzEnKXx8KGV2ZW50WzRdPT09MSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7Y29uc3QgYWN0aW9uPWRhdGFzeW5jPydmZGF0YXN5bmMnOidmc3luYyc7dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnZXh0NCcsZXZlbnRCYXNlLnRocmVhZE5hbWUsZXZlbnRCYXNlLnBpZCxrZXksYWN0aW9uKTtyZXR1cm4gdHJ1ZTt9LGV4dDRTeW5jRmlsZUV4aXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXYgKFxkKyxcZCspIGlubyAoXGQrKSByZXQgKFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IGlub2RlPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBlcnJvcj1wYXJzZUludChldmVudFszXSk7Y29uc3Qga2V5PWRldmljZSsnLScraW5vZGU7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2V4dDQnLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LHtkZXZpY2UsaW5vZGUsZXJyb3J9KTtyZXR1cm4gdHJ1ZTt9LGJsb2NrUnFJc3N1ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9bmV3IFJlZ0V4cCgnKFxcZCssXFxkKykgKEYpPyhbRFdSTl0pKEYpPyhBKT8oUyk/KE0pPyAnKydcXGQrIFxcKC4qXFwpIChcXGQrKSBcXCsgKFxcZCspIFxcWy4qXFxdJykuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtsZXQgYWN0aW9uO3N3aXRjaChldmVudFszXSl7Y2FzZSdEJzphY3Rpb249J2Rpc2NhcmQnO2JyZWFrO2Nhc2UnVyc6YWN0aW9uPSd3cml0ZSc7YnJlYWs7Y2FzZSdSJzphY3Rpb249J3JlYWQnO2JyZWFrO2Nhc2UnTic6YWN0aW9uPSdub25lJzticmVhaztkZWZhdWx0OmFjdGlvbj0ndW5rbm93bic7YnJlYWs7fQppZihldmVudFsyXSl7YWN0aW9uKz0nIGZsdXNoJzt9CmlmKGV2ZW50WzRdPT09J0YnKXthY3Rpb24rPScgZnVhJzt9CmlmKGV2ZW50WzVdPT09J0EnKXthY3Rpb24rPScgYWhlYWQnO30KaWYoZXZlbnRbNl09PT0nUycpe2FjdGlvbis9JyBzeW5jJzt9CmlmKGV2ZW50WzddPT09J00nKXthY3Rpb24rPScgbWV0YSc7fQpjb25zdCBkZXZpY2U9ZXZlbnRbMV07Y29uc3Qgc2VjdG9yPXBhcnNlSW50KGV2ZW50WzhdKTtjb25zdCBudW1TZWN0b3JzPXBhcnNlSW50KGV2ZW50WzldKTtjb25zdCBrZXk9ZGV2aWNlKyctJytzZWN0b3IrJy0nK251bVNlY3RvcnM7dGhpcy5vcGVuQXN5bmNTbGljZSh0cywnYmxvY2snLGV2ZW50QmFzZS50aHJlYWROYW1lLGV2ZW50QmFzZS5waWQsa2V5LGFjdGlvbik7cmV0dXJuIHRydWU7fSxibG9ja1JxQ29tcGxldGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PW5ldyBSZWdFeHAoJyhcXGQrLFxcZCspIChGKT8oW0RXUk5dKShGKT8oQSk/KFMpPyhNKT8gJysnXFwoLipcXCkgKFxcZCspIFxcKyAoXFxkKykgXFxbKC4qKVxcXScpLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2aWNlPWV2ZW50WzFdO2NvbnN0IHNlY3Rvcj1wYXJzZUludChldmVudFs4XSk7Y29uc3QgbnVtU2VjdG9ycz1wYXJzZUludChldmVudFs5XSk7Y29uc3QgZXJyb3I9cGFyc2VJbnQoZXZlbnRbMTBdKTtjb25zdCBrZXk9ZGV2aWNlKyctJytzZWN0b3IrJy0nK251bVNlY3RvcnM7dGhpcy5jbG9zZUFzeW5jU2xpY2UodHMsJ2Jsb2NrJyxldmVudEJhc2UudGhyZWFkTmFtZSxldmVudEJhc2UucGlkLGtleSx7ZGV2aWNlLHNlY3RvcixudW1TZWN0b3JzLGVycm9yfSk7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKERpc2tQYXJzZXIpO3JldHVybntEaXNrUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBEbWFGZW5jZVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7dGhpcy5tb2RlbF89aW1wb3J0ZXIubW9kZWxfO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdkbWFfZmVuY2VfaW5pdCcsRG1hRmVuY2VQYXJzZXIucHJvdG90eXBlLmluaXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZG1hX2ZlbmNlX2VtaXQnLERtYUZlbmNlUGFyc2VyLnByb3RvdHlwZS5pbml0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2RtYV9mZW5jZV9kZXN0cm95JyxEbWFGZW5jZVBhcnNlci5wcm90b3R5cGUuZmVuY2VEZXN0cm95RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2RtYV9mZW5jZV9lbmFibGVfc2lnbmFsJyxEbWFGZW5jZVBhcnNlci5wcm90b3R5cGUuZmVuY2VFbmFibGVTaWduYWxFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZG1hX2ZlbmNlX3NpZ25hbGVkJyxEbWFGZW5jZVBhcnNlci5wcm90b3R5cGUuZmVuY2VTaWduYWxlZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdkbWFfZmVuY2Vfd2FpdF9zdGFydCcsRG1hRmVuY2VQYXJzZXIucHJvdG90eXBlLmZlbmNlV2FpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdkbWFfZmVuY2Vfd2FpdF9lbmQnLERtYUZlbmNlUGFyc2VyLnByb3RvdHlwZS5mZW5jZVdhaXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZmVuY2VfaW5pdCcsRG1hRmVuY2VQYXJzZXIucHJvdG90eXBlLmluaXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZmVuY2VfZW1pdCcsRG1hRmVuY2VQYXJzZXIucHJvdG90eXBlLmluaXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZmVuY2VfZGVzdHJveScsRG1hRmVuY2VQYXJzZXIucHJvdG90eXBlLmZlbmNlRGVzdHJveUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdmZW5jZV9lbmFibGVfc2lnbmFsJyxEbWFGZW5jZVBhcnNlci5wcm90b3R5cGUuZmVuY2VFbmFibGVTaWduYWxFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZmVuY2Vfc2lnbmFsZWQnLERtYUZlbmNlUGFyc2VyLnByb3RvdHlwZS5mZW5jZVNpZ25hbGVkRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2ZlbmNlX3dhaXRfc3RhcnQnLERtYUZlbmNlUGFyc2VyLnByb3RvdHlwZS5mZW5jZVdhaXRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZmVuY2Vfd2FpdF9lbmQnLERtYUZlbmNlUGFyc2VyLnByb3RvdHlwZS5mZW5jZVdhaXRFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87fQpjb25zdCBmZW5jZVJFPS9kcml2ZXI9KFxTKykgdGltZWxpbmU9KFxTKykgY29udGV4dD0oXGQrKSBzZXFubz0oXGQrKS87RG1hRmVuY2VQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxpbml0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1mZW5jZVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKGV2ZW50WzJdKTt0aHJlYWQubGFzdEFjdGl2ZVRzPXRzO3JldHVybiB0cnVlO30sZmVuY2VEZXN0cm95RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1mZW5jZVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKGV2ZW50WzJdKTtjb25zdCBuYW1lPSdmZW5jZV9kZXN0cm95KCcrZXZlbnRbNF0rJyknO2NvbnN0IGNvbG9yTmFtZT0nZmVuY2UoJytldmVudFs0XSsnKSc7aWYodGhyZWFkLmxhc3RBY3RpdmVUcyE9PXVuZGVmaW5lZCl7Y29uc3QgZHVyYXRpb249dHMtdGhyZWFkLmxhc3RBY3RpdmVUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsbmFtZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoY29sb3JOYW1lKSx0aHJlYWQubGFzdEFjdGl2ZVRzLHtkcml2ZXI6ZXZlbnRbMV0sY29udGV4dDpldmVudFszXX0sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KaWYodGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50PjApe3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh0cyk7fQp0aHJlYWQubGFzdEFjdGl2ZVRzPXRzO30sZmVuY2VFbmFibGVTaWduYWxFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWZlbmNlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtpZihldmVudEJhc2UudGdpZD09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KY29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoZXZlbnRbMl0pO2NvbnN0IG5hbWU9J2ZlbmNlX2VuYWJsZSgnK2V2ZW50WzRdKycpJztjb25zdCBjb2xvck5hbWU9J2ZlbmNlKCcrZXZlbnRbNF0rJyknO2lmKHRocmVhZC5sYXN0QWN0aXZlVHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0QWN0aXZlVHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLG5hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNvbG9yTmFtZSksdGhyZWFkLmxhc3RBY3RpdmVUcyx7ZHJpdmVyOmV2ZW50WzFdLGNvbnRleHQ6ZXZlbnRbM119LGR1cmF0aW9uKTt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9CmlmKHRocmVhZC50aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudD4wKXt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAuZW5kU2xpY2UodHMpO30KdGhyZWFkLmxhc3RBY3RpdmVUcz10czt9LGZlbmNlU2lnbmFsZWRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWZlbmNlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtpZihldmVudEJhc2UudGdpZD09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KY29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoZXZlbnRbMl0pO2NvbnN0IG5hbWU9J2ZlbmNlX3NpZ25hbCgnK2V2ZW50WzRdKycpJztjb25zdCBjb2xvck5hbWU9J2ZlbmNlKCcrZXZlbnRbNF0rJyknO2lmKHRocmVhZC5sYXN0QWN0aXZlVHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0QWN0aXZlVHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLG5hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNvbG9yTmFtZSksdGhyZWFkLmxhc3RBY3RpdmVUcyx7ZHJpdmVyOmV2ZW50WzFdLGNvbnRleHQ6ZXZlbnRbM119LGR1cmF0aW9uKTt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9CmlmKHRocmVhZC50aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudD4wKXt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAuZW5kU2xpY2UodHMpO30KdGhyZWFkLmxhc3RBY3RpdmVUcz10cztyZXR1cm4gdHJ1ZTt9LGZlbmNlV2FpdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2NvbnN0IGV2ZW50PWZlbmNlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHRnaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7Y29uc3Qgc2xpY2VzPXRocmVhZC5rZXJuZWxTbGljZUdyb3VwO2lmKCFzbGljZXMuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm4gZmFsc2U7fQpjb25zdCBuYW1lPSdkbWFfZmVuY2Vfd2FpdCgiJytldmVudFsyXSsnIiknO2lmKGV2ZW50TmFtZS5lbmRzV2l0aCgnc3RhcnQnKSl7Y29uc3Qgc2xpY2U9c2xpY2VzLmJlZ2luU2xpY2UobnVsbCxuYW1lLHRzLHtkcml2ZXI6ZXZlbnRbMV0sY29udGV4dDpldmVudFszXSxzZXFubzpldmVudFs0XSx9KTt9ZWxzZXtpZihzbGljZXMub3BlblNsaWNlQ291bnQ+MCl7c2xpY2VzLmVuZFNsaWNlKHRzKTt9fQpyZXR1cm4gdHJ1ZTt9LH07UGFyc2VyLnJlZ2lzdGVyKERtYUZlbmNlUGFyc2VyKTtyZXR1cm57RG1hRmVuY2VQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIERybVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2RybV92YmxhbmtfZXZlbnQnLERybVBhcnNlci5wcm90b3R5cGUudmJsYW5rRXZlbnQuYmluZCh0aGlzKSk7fQpEcm1QYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxkcm1WYmxhbmtTbGljZSh0cyxldmVudE5hbWUsYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdkcm1fdmJsYW5rJyk7a3RocmVhZC5vcGVuU2xpY2U9ZXZlbnROYW1lO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyxrdGhyZWFkLm9wZW5TbGljZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoa3RocmVhZC5vcGVuU2xpY2UpLHRzLGFyZ3MsMCk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30sdmJsYW5rRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vY3J0Yz0oXGQrKSwgc2VxPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGNydGM9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IHNlcT1wYXJzZUludChldmVudFsyXSk7dGhpcy5kcm1WYmxhbmtTbGljZSh0cywndmJsYW5rOicrY3J0Yyx7Y3J0YyxzZXF9KTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoRHJtUGFyc2VyKTtyZXR1cm57RHJtUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBFeHlub3NQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdleHlub3NfYnVzZnJlcV90YXJnZXRfaW50JyxFeHlub3NQYXJzZXIucHJvdG90eXBlLmJ1c2ZyZXFUYXJnZXRJbnRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignZXh5bm9zX2J1c2ZyZXFfdGFyZ2V0X21pZicsRXh5bm9zUGFyc2VyLnByb3RvdHlwZS5idXNmcmVxVGFyZ2V0TWlmRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2V4eW5vc19wYWdlX2ZsaXBfc3RhdGUnLEV4eW5vc1BhcnNlci5wcm90b3R5cGUucGFnZUZsaXBTdGF0ZUV2ZW50LmJpbmQodGhpcykpO30KRXh5bm9zUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZXh5bm9zQnVzZnJlcVNhbXBsZShuYW1lLHRzLGZyZXF1ZW5jeSl7Y29uc3QgdGFyZ2V0Q3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUoMCk7Y29uc3QgY291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLG5hbWUpO2lmKGNvdW50ZXIubnVtU2VyaWVzPT09MCl7Y291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ2ZyZXF1ZW5jeScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNvdW50ZXIubmFtZSsnLicrJ2ZyZXF1ZW5jeScpKSk7fQpjb3VudGVyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsZnJlcXVlbmN5KTt9KTt9LGJ1c2ZyZXFUYXJnZXRJbnRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9mcmVxdWVuY3k9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7dGhpcy5leHlub3NCdXNmcmVxU2FtcGxlKCdJTlQgRnJlcXVlbmN5Jyx0cyxwYXJzZUludChldmVudFsxXSkpO3JldHVybiB0cnVlO30sYnVzZnJlcVRhcmdldE1pZkV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L2ZyZXF1ZW5jeT0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTt0aGlzLmV4eW5vc0J1c2ZyZXFTYW1wbGUoJ01JRiBGcmVxdWVuY3knLHRzLHBhcnNlSW50KGV2ZW50WzFdKSk7cmV0dXJuIHRydWU7fSxleHlub3NQYWdlRmxpcFN0YXRlT3BlblNsaWNlKHRzLHBpcGUsZmIsc3RhdGUpe2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnZXh5bm9zX2ZsaXBfc3RhdGUgKHBpcGU6JytwaXBlKycsIGZiOicrZmIrJyknKTtrdGhyZWFkLm9wZW5TbGljZVRTPXRzO2t0aHJlYWQub3BlblNsaWNlPXN0YXRlO30sZXh5bm9zUGFnZUZsaXBTdGF0ZUNsb3NlU2xpY2UodHMscGlwZSxmYixhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2V4eW5vc19mbGlwX3N0YXRlIChwaXBlOicrcGlwZSsnLCBmYjonK2ZiKycpJyk7aWYoa3RocmVhZC5vcGVuU2xpY2Upe2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyxrdGhyZWFkLm9wZW5TbGljZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoa3RocmVhZC5vcGVuU2xpY2UpLGt0aHJlYWQub3BlblNsaWNlVFMsYXJncyx0cy1rdGhyZWFkLm9wZW5TbGljZVRTKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQprdGhyZWFkLm9wZW5TbGljZT11bmRlZmluZWQ7fSxwYWdlRmxpcFN0YXRlRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vcGlwZT0oXGQrKSwgZmI9KFxkKyksIHN0YXRlPSguKikvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgcGlwZT1wYXJzZUludChldmVudFsxXSk7Y29uc3QgZmI9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHN0YXRlPWV2ZW50WzNdO3RoaXMuZXh5bm9zUGFnZUZsaXBTdGF0ZUNsb3NlU2xpY2UodHMscGlwZSxmYix7cGlwZSxmYn0pO2lmKHN0YXRlIT09J2ZsaXBwZWQnKXt0aGlzLmV4eW5vc1BhZ2VGbGlwU3RhdGVPcGVuU2xpY2UodHMscGlwZSxmYixzdGF0ZSk7fQpyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoRXh5bm9zUGFyc2VyKTtyZXR1cm57RXh5bm9zUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gR2VzdHVyZVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3RyYWNpbmdfbWFya193cml0ZTpsb2cnLEdlc3R1cmVQYXJzZXIucHJvdG90eXBlLmxvZ0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6U3luY0ludGVycHJldCcsR2VzdHVyZVBhcnNlci5wcm90b3R5cGUuc3luY0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6SGFuZGxlVGltZXInLEdlc3R1cmVQYXJzZXIucHJvdG90eXBlLnRpbWVyRXZlbnQuYmluZCh0aGlzKSk7fQpHZXN0dXJlUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZ2VzdHVyZU9wZW5TbGljZSh0aXRsZSx0cyxvcHRfYXJncyl7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2dlc3R1cmUnKS50aHJlYWQ7dGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZSgndG91Y2hwYWRfZ2VzdHVyZScsdGl0bGUsdHMsb3B0X2FyZ3MpO30sZ2VzdHVyZUNsb3NlU2xpY2UodGl0bGUsdHMpe2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdnZXN0dXJlJykudGhyZWFkO2lmKHRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXtjb25zdCBzbGljZT10aHJlYWQuc2xpY2VHcm91cC5tb3N0UmVjZW50bHlPcGVuZWRQYXJ0aWFsU2xpY2U7aWYoc2xpY2UudGl0bGUhPT10aXRsZSl7dGhpcy5pbXBvcnRlci5tb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOid0aXRsZV9tYXRjaF9lcnJvcicsbWVzc2FnZTonVGl0bGVzIGRvIG5vdCBtYXRjaC4gVGl0bGUgaXMgJysKc2xpY2UudGl0bGUrJyBpbiBvcGVuU2xpY2UsIGFuZCBpcyAnKwp0aXRsZSsnIGluIGVuZFNsaWNlJ30pO31lbHNle3RocmVhZC5zbGljZUdyb3VwLmVuZFNsaWNlKHRzKTt9fX0sbG9nRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBpbm5lckV2ZW50PS9eXHMqKFx3Kyk6XHMqKFx3KykkLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtzd2l0Y2goaW5uZXJFdmVudFsxXSl7Y2FzZSdzdGFydCc6dGhpcy5nZXN0dXJlT3BlblNsaWNlKCdHZXN0dXJlTG9nJyx0cyx7bmFtZTppbm5lckV2ZW50WzJdfSk7YnJlYWs7Y2FzZSdlbmQnOnRoaXMuZ2VzdHVyZUNsb3NlU2xpY2UoJ0dlc3R1cmVMb2cnLHRzKTt9CnJldHVybiB0cnVlO30sc3luY0V2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgaW5uZXJFdmVudD0vXlxzKihcdyspOlxzKihcdyspJC8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7c3dpdGNoKGlubmVyRXZlbnRbMV0pe2Nhc2Unc3RhcnQnOnRoaXMuZ2VzdHVyZU9wZW5TbGljZSgnU3luY0ludGVycHJldCcsdHMse2ludGVycHJldGVyOmlubmVyRXZlbnRbMl19KTticmVhaztjYXNlJ2VuZCc6dGhpcy5nZXN0dXJlQ2xvc2VTbGljZSgnU3luY0ludGVycHJldCcsdHMpO30KcmV0dXJuIHRydWU7fSx0aW1lckV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgaW5uZXJFdmVudD0vXlxzKihcdyspOlxzKihcdyspJC8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7c3dpdGNoKGlubmVyRXZlbnRbMV0pe2Nhc2Unc3RhcnQnOnRoaXMuZ2VzdHVyZU9wZW5TbGljZSgnSGFuZGxlVGltZXInLHRzLHtpbnRlcnByZXRlcjppbm5lckV2ZW50WzJdfSk7YnJlYWs7Y2FzZSdlbmQnOnRoaXMuZ2VzdHVyZUNsb3NlU2xpY2UoJ0hhbmRsZVRpbWVyJyx0cyk7fQpyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoR2VzdHVyZVBhcnNlcik7cmV0dXJue0dlc3R1cmVQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEkyY1BhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2kyY193cml0ZScsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNXcml0ZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpMmNfcmVhZCcsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNSZWFkRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2kyY19yZXBseScsSTJjUGFyc2VyLnByb3RvdHlwZS5pMmNSZXBseUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpMmNfcmVzdWx0JyxJMmNQYXJzZXIucHJvdG90eXBlLmkyY1Jlc3VsdEV2ZW50LmJpbmQodGhpcykpO30KY29uc3QgaTJjV3JpdGVSZXBseVJFPW5ldyBSZWdFeHAoJ2kyYy0oXFxkKykgIyhcXGQrKSBhPShbXFxkYS1mQS1GXSspIGY9KFtcXGRhLWZBLUZdKykgbD0oXFxkKykgJysnKFxcW1tcXGRhLWZBLUZcXC1dK1xcXSknKTtjb25zdCBpMmNSZWFkUkU9L2kyYy0oXGQrKSAjKFxkKykgYT0oW1xkYS1mQS1GXSspIGY9KFtcZGEtZkEtRl0rKSBsPShcZCspLztjb25zdCBpMmNSZXN1bHRSRT0vaTJjLShcZCspIG49KFxkKykgcmV0PShcZCspLztJMmNQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxpMmNXcml0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9aTJjV3JpdGVSZXBseVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgYWRhcHRlck51bWJlcj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgbWVzc2FnZU51bWJlcj1ldmVudFsyXTtjb25zdCBhZGRyZXNzPWV2ZW50WzNdO2NvbnN0IGZsYWdzPWV2ZW50WzRdO2NvbnN0IGRhdGFMZW5ndGg9ZXZlbnRbNV07Y29uc3QgZGF0YT1ldmVudFs2XTtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaTJjIGFkYXB0ZXIgJythZGFwdGVyTnVtYmVyKTtwdXNoTGFzdFNsaWNlSWZOZWVkZWQodGhyZWFkLGV2ZW50WzFdLHRzKTt0aHJlYWQubGFzdEVudHJ5VGl0bGU9J2kyYyB3cml0ZSc7dGhyZWFkLmxhc3RFbnRyeVRzPXRzO3RocmVhZC5sYXN0RW50cnlBcmdzPXsnTWVzc2FnZSBudW1iZXInOm1lc3NhZ2VOdW1iZXIsJ0FkZHJlc3MnOmFkZHJlc3MsJ0ZsYWdzJzpmbGFncywnRGF0YSBMZW5ndGgnOmRhdGFMZW5ndGgsJ0RhdGEnOmRhdGF9O3JldHVybiB0cnVlO30saTJjUmVhZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9aTJjUmVhZFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgYWRhcHRlck51bWJlcj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgbWVzc2FnZU51bWJlcj1ldmVudFsyXTtjb25zdCBhZGRyZXNzPWV2ZW50WzNdO2NvbnN0IGZsYWdzPWV2ZW50WzRdO2NvbnN0IGRhdGFMZW5ndGg9ZXZlbnRbNV07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2kyYyBhZGFwdGVyICcrYWRhcHRlck51bWJlcik7cHVzaExhc3RTbGljZUlmTmVlZGVkKHRocmVhZCxldmVudFsxXSx0cyk7dGhyZWFkLmxhc3RFbnRyeVRpdGxlPSdpMmMgcmVhZCc7dGhyZWFkLmxhc3RFbnRyeVRzPXRzO3RocmVhZC5sYXN0RW50cnlBcmdzPXsnTWVzc2FnZSBudW1iZXInOm1lc3NhZ2VOdW1iZXIsJ0FkZHJlc3MnOmFkZHJlc3MsJ0ZsYWdzJzpmbGFncywnRGF0YSBMZW5ndGgnOmRhdGFMZW5ndGh9O3JldHVybiB0cnVlO30saTJjUmVwbHlFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWkyY1dyaXRlUmVwbHlSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGFkYXB0ZXJOdW1iZXI9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG1lc3NhZ2VOdW1iZXI9ZXZlbnRbMl07Y29uc3QgYWRkcmVzcz1ldmVudFszXTtjb25zdCBmbGFncz1ldmVudFs0XTtjb25zdCBkYXRhTGVuZ3RoPWV2ZW50WzVdO2NvbnN0IGRhdGE9ZXZlbnRbNl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2kyYyBhZGFwdGVyICcrYWRhcHRlck51bWJlcik7cHVzaExhc3RTbGljZUlmTmVlZGVkKHRocmVhZCxldmVudFsxXSx0cyk7dGhyZWFkLmxhc3RFbnRyeVRpdGxlPSdpMmMgcmVwbHknO3RocmVhZC5sYXN0RW50cnlUcz10czt0aHJlYWQubGFzdEVudHJ5QXJncz17J01lc3NhZ2UgbnVtYmVyJzptZXNzYWdlTnVtYmVyLCdBZGRyZXNzJzphZGRyZXNzLCdGbGFncyc6ZmxhZ3MsJ0RhdGEgTGVuZ3RoJzpkYXRhTGVuZ3RoLCdEYXRhJzpkYXRhfTtyZXR1cm4gdHJ1ZTt9LGkyY1Jlc3VsdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9aTJjUmVzdWx0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBhZGFwdGVyTnVtYmVyPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBudW1NZXNzYWdlcz1ldmVudFsyXTtjb25zdCByZXQ9ZXZlbnRbM107Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2kyYyBhZGFwdGVyICcrYWRhcHRlck51bWJlcik7Y29uc3QgYXJncz10aHJlYWQubGFzdEVudHJ5QXJncztpZihhcmdzIT09dW5kZWZpbmVkKXthcmdzWydOdW1iZXIgb2YgbWVzc2FnZXMnXT1udW1NZXNzYWdlczthcmdzLlJldHVybj1yZXQ7fQpwdXNoTGFzdFNsaWNlSWZOZWVkZWQodGhyZWFkLGV2ZW50WzFdLHRzKTt0aHJlYWQubGFzdEVudHJ5VGl0bGU9dW5kZWZpbmVkO3RocmVhZC5sYXN0RW50cnlUcz11bmRlZmluZWQ7dGhyZWFkLmxhc3RFbnRyeUFyZ3M9dW5kZWZpbmVkO3JldHVybiB0cnVlO30sfTtmdW5jdGlvbiBwdXNoTGFzdFNsaWNlSWZOZWVkZWQodGhyZWFkLGlkLGN1cnJlbnRUcyl7aWYodGhyZWFkLmxhc3RFbnRyeVRzIT09dW5kZWZpbmVkKXtjb25zdCBkdXJhdGlvbj1jdXJyZW50VHMtdGhyZWFkLmxhc3RFbnRyeVRzO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyx0aHJlYWQubGFzdEVudHJ5VGl0bGUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGlkKSx0aHJlYWQubGFzdEVudHJ5VHMsdGhyZWFkLmxhc3RFbnRyeUFyZ3MsZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO319ClBhcnNlci5yZWdpc3RlcihJMmNQYXJzZXIpO3JldHVybntJMmNQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEk5MTVQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfY3JlYXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1PYmplY3RDcmVhdGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2JpbmQnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdEJpbmRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X3VuYmluZCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0QmluZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfY2hhbmdlX2RvbWFpbicsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0Q2hhbmdlRG9tYWluRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX29iamVjdF9wcmVhZCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0UHJlYWRXcml0ZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9vYmplY3RfcHdyaXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1PYmplY3RQcmVhZFdyaXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX29iamVjdF9mYXVsdCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtT2JqZWN0RmF1bHRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2NsZmx1c2gnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdERlc3Ryb3lFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fb2JqZWN0X2Rlc3Ryb3knLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbU9iamVjdERlc3Ryb3lFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmluZ19kaXNwYXRjaCcsSTkxNVBhcnNlci5wcm90b3R5cGUuZ2VtUmluZ0Rpc3BhdGNoRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JpbmdfZmx1c2gnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJpbmdGbHVzaEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9yZXF1ZXN0JyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3RfYWRkJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3RfY29tcGxldGUnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmVxdWVzdF9yZXRpcmUnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmVxdWVzdF93YWl0X2JlZ2luJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SZXF1ZXN0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2k5MTVfZ2VtX3JlcXVlc3Rfd2FpdF9lbmQnLEk5MTVQYXJzZXIucHJvdG90eXBlLmdlbVJlcXVlc3RFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9nZW1fcmluZ193YWl0X2JlZ2luJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SaW5nV2FpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X2dlbV9yaW5nX3dhaXRfZW5kJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5nZW1SaW5nV2FpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpOTE1X3JlZ19ydycsSTkxNVBhcnNlci5wcm90b3R5cGUucmVnUldFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9mbGlwX3JlcXVlc3QnLEk5MTVQYXJzZXIucHJvdG90eXBlLmZsaXBFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaTkxNV9mbGlwX2NvbXBsZXRlJyxJOTE1UGFyc2VyLnByb3RvdHlwZS5mbGlwRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2ludGVsX2dwdV9mcmVxX2NoYW5nZScsSTkxNVBhcnNlci5wcm90b3R5cGUuZ3B1RnJlcXVlbmN5LmJpbmQodGhpcykpO30KSTkxNVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGk5MTVGbGlwT3BlblNsaWNlKHRzLG9iaixwbGFuZSl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpOTE1X2ZsaXAnKTtrdGhyZWFkLm9wZW5TbGljZVRTPXRzO2t0aHJlYWQub3BlblNsaWNlPSdmbGlwOicrb2JqKycvJytwbGFuZTt9LGk5MTVGbGlwQ2xvc2VTbGljZSh0cyxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2k5MTVfZmxpcCcpO2lmKGt0aHJlYWQub3BlblNsaWNlKXtjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsa3RocmVhZC5vcGVuU2xpY2UsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGt0aHJlYWQub3BlblNsaWNlKSxrdGhyZWFkLm9wZW5TbGljZVRTLGFyZ3MsdHMta3RocmVhZC5vcGVuU2xpY2VUUyk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30Ka3RocmVhZC5vcGVuU2xpY2U9dW5kZWZpbmVkO30saTkxNUdlbU9iamVjdFNsaWNlKHRzLGV2ZW50TmFtZSxvYmosYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpOTE1X2dlbScpO2t0aHJlYWQub3BlblNsaWNlPWV2ZW50TmFtZSsnOicrb2JqO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJyxrdGhyZWFkLm9wZW5TbGljZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoa3RocmVhZC5vcGVuU2xpY2UpLHRzLGFyZ3MsMCk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30saTkxNUdlbVJpbmdTbGljZSh0cyxldmVudE5hbWUsZGV2LHJpbmcsYXJncyl7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpOTE1X2dlbV9yaW5nJyk7a3RocmVhZC5vcGVuU2xpY2U9ZXZlbnROYW1lKyc6JytkZXYrJy4nK3Jpbmc7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxpOTE1UmVnU2xpY2UodHMsZXZlbnROYW1lLHJlZyxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2k5MTVfcmVnJyk7a3RocmVhZC5vcGVuU2xpY2U9ZXZlbnROYW1lKyc6JytyZWc7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxpOTE1RnJlcUNoYW5nZVNsaWNlKHRzLGV2ZW50TmFtZSxhcmdzKXtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2k5MTVfZ3B1X2ZyZXEnKTtrdGhyZWFkLm9wZW5TbGljZT1ldmVudE5hbWU7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksdHMsYXJncywwKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fSxnZW1PYmplY3RDcmVhdGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9vYmo9KFx3KyksIHNpemU9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3Qgb2JqPWV2ZW50WzFdO2NvbnN0IHNpemU9cGFyc2VJbnQoZXZlbnRbMl0pO3RoaXMuaTkxNUdlbU9iamVjdFNsaWNlKHRzLGV2ZW50TmFtZSxvYmose29iaixzaXplfSk7cmV0dXJuIHRydWU7fSxnZW1PYmplY3RCaW5kRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vb2JqPShcdyspLCBvZmZzZXQ9KFx3KyksIHNpemU9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3Qgb2JqPWV2ZW50WzFdO2NvbnN0IG9mZnNldD1ldmVudFsyXTtjb25zdCBzaXplPXBhcnNlSW50KGV2ZW50WzNdKTt0aGlzLmk5MTVPYmplY3RHZW1TbGljZSh0cyxldmVudE5hbWUrJzonK29iaix7b2JqLG9mZnNldCxzaXplfSk7cmV0dXJuIHRydWU7fSxnZW1PYmplY3RDaGFuZ2VEb21haW5FdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9vYmo9KFx3KyksIHJlYWQ9KFx3Kz0+XHcrKSwgd3JpdGU9KFx3Kz0+XHcrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvYmo9ZXZlbnRbMV07Y29uc3QgcmVhZD1ldmVudFsyXTtjb25zdCB3cml0ZT1ldmVudFszXTt0aGlzLmk5MTVHZW1PYmplY3RTbGljZSh0cyxldmVudE5hbWUsb2JqLHtvYmoscmVhZCx3cml0ZX0pO3JldHVybiB0cnVlO30sZ2VtT2JqZWN0UHJlYWRXcml0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L29iaj0oXHcrKSwgb2Zmc2V0PShcZCspLCBsZW49KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3Qgb2JqPWV2ZW50WzFdO2NvbnN0IG9mZnNldD1wYXJzZUludChldmVudFsyXSk7Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzNdKTt0aGlzLmk5MTVHZW1PYmplY3RTbGljZSh0cyxldmVudE5hbWUsb2JqLHtvYmosb2Zmc2V0LGxlbn0pO3JldHVybiB0cnVlO30sZ2VtT2JqZWN0RmF1bHRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9vYmo9KFx3KyksIChcdyspIGluZGV4PShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG9iaj1ldmVudFsxXTtjb25zdCB0eXBlPWV2ZW50WzJdO2NvbnN0IGluZGV4PXBhcnNlSW50KGV2ZW50WzNdKTt0aGlzLmk5MTVHZW1PYmplY3RTbGljZSh0cyxldmVudE5hbWUsb2JqLHtvYmosdHlwZSxpbmRleH0pO3JldHVybiB0cnVlO30sZ2VtT2JqZWN0RGVzdHJveUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L29iaj0oXHcrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBvYmo9ZXZlbnRbMV07dGhpcy5pOTE1R2VtT2JqZWN0U2xpY2UodHMsZXZlbnROYW1lLG9iaix7b2JqfSk7cmV0dXJuIHRydWU7fSxnZW1SaW5nRGlzcGF0Y2hFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXY9KFxkKyksIHJpbmc9KFxkKyksIHNlcW5vPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgcmluZz1wYXJzZUludChldmVudFsyXSk7Y29uc3Qgc2Vxbm89cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaTkxNUdlbVJpbmdTbGljZSh0cyxldmVudE5hbWUsZGV2LHJpbmcse2RldixyaW5nLHNlcW5vfSk7cmV0dXJuIHRydWU7fSxnZW1SaW5nRmx1c2hFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXY9KFxkKyksIHJpbmc9KFx3KyksIGludmFsaWRhdGU9KFx3KyksIGZsdXNoPShcdyspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGRldj1wYXJzZUludChldmVudFsxXSk7Y29uc3QgcmluZz1wYXJzZUludChldmVudFsyXSk7Y29uc3QgaW52YWxpZGF0ZT1ldmVudFszXTtjb25zdCBmbHVzaD1ldmVudFs0XTt0aGlzLmk5MTVHZW1SaW5nU2xpY2UodHMsZXZlbnROYW1lLGRldixyaW5nLHtkZXYscmluZyxpbnZhbGlkYXRlLGZsdXNofSk7cmV0dXJuIHRydWU7fSxnZW1SZXF1ZXN0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZGV2PShcZCspLCByaW5nPShcZCspLCBzZXFubz0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBkZXY9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IHJpbmc9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHNlcW5vPXBhcnNlSW50KGV2ZW50WzNdKTt0aGlzLmk5MTVHZW1SaW5nU2xpY2UodHMsZXZlbnROYW1lLGRldixyaW5nLHtkZXYscmluZyxzZXFub30pO3JldHVybiB0cnVlO30sZ2VtUmluZ1dhaXRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9kZXY9KFxkKyksIHJpbmc9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZGV2PXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCByaW5nPXBhcnNlSW50KGV2ZW50WzJdKTt0aGlzLmk5MTVHZW1SaW5nU2xpY2UodHMsZXZlbnROYW1lLGRldixyaW5nLHtkZXYscmluZ30pO3JldHVybiB0cnVlO30scmVnUldFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS8oXHcrKSByZWc9KFx3KyksIGxlbj0oXGQrKSwgdmFsPShcKFx3KywgXHcrXCkpLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHJ3PWV2ZW50WzFdO2NvbnN0IHJlZz1ldmVudFsyXTtjb25zdCBsZW49ZXZlbnRbM107Y29uc3QgZGF0YT1ldmVudFszXTt0aGlzLmk5MTVSZWdTbGljZSh0cyxydyxyZWcse3J3LHJlZyxsZW4sZGF0YX0pO3JldHVybiB0cnVlO30sZmxpcEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3BsYW5lPShcZCspLCBvYmo9KFx3KykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgcGxhbmU9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG9iaj1ldmVudFsyXTtpZihldmVudE5hbWU9PT0naTkxNV9mbGlwX3JlcXVlc3QnKXt0aGlzLmk5MTVGbGlwT3BlblNsaWNlKHRzLG9iaixwbGFuZSk7fWVsc2V7dGhpcy5pOTE1RmxpcENsb3NlU2xpY2UodHMse29iaixwbGFuZX0pO30KcmV0dXJuIHRydWU7fSxncHVGcmVxdWVuY3koZXZlbnROYW1lLGNwdU51bXZlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vbmV3X2ZyZXE9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZnJlcT1wYXJzZUludChldmVudFsxXSk7dGhpcy5pOTE1RnJlcUNoYW5nZVNsaWNlKHRzLGV2ZW50TmFtZSx7ZnJlcX0pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihJOTE1UGFyc2VyKTtyZXR1cm57STkxNVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gSW9uSGVhcFBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2lvbl9oZWFwX3NocmluaycsSW9uSGVhcFBhcnNlci5wcm90b3R5cGUudHJhY2VJb25IZWFwU2hyaW5rLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpb25faGVhcF9ncm93JyxJb25IZWFwUGFyc2VyLnByb3RvdHlwZS50cmFjZUlvbkhlYXBHcm93LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt9CmNvbnN0IFRlc3RFeHBvcnRzPXt9O2NvbnN0IGlvbkhlYXBSRT1uZXcgUmVnRXhwKCdoZWFwX25hbWU9KFxcUyspLCBsZW49KFxcZCspLCB0b3RhbF9hbGxvY2F0ZWQ9KFxcZCspJyk7VGVzdEV4cG9ydHMuaW9uSGVhcFJFPWlvbkhlYXBSRTtJb25IZWFwUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsdHJhY2VJb25IZWFwU2hyaW5rKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtjb25zdCBldmVudD1pb25IZWFwUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBuYW1lPWV2ZW50WzFdO2NvbnN0IGxlbj1wYXJzZUludChldmVudFsyXSk7Y29uc3QgdG90YWxBbGxvY2F0ZWQ9cGFyc2VJbnQoZXZlbnRbM10pO2NvbnN0IGlvbkhlYXA9dG90YWxBbGxvY2F0ZWQrbGVuO2NvbnN0IGN0cj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKG51bGwsbmFtZSsnIGlvbiBoZWFwJyk7aWYoY3RyLm51bVNlcmllcz09PTApe2N0ci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ3ZhbHVlJyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoY3RyLm5hbWUrJy4nKyd2YWx1ZScpKSk7fQpjdHIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxpb25IZWFwKTt9KTtyZXR1cm4gdHJ1ZTt9LHRyYWNlSW9uSGVhcEdyb3coZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpe2NvbnN0IGV2ZW50PWlvbkhlYXBSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG5hbWU9ZXZlbnRbMV07Y29uc3QgbGVuPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCB0b3RhbEFsbG9jYXRlZD1wYXJzZUludChldmVudFszXSk7Y29uc3QgaW9uSGVhcD10b3RhbEFsbG9jYXRlZCtsZW47Y29uc3QgY3RyPXRoaXMubW9kZWxfLmtlcm5lbC5nZXRPckNyZWF0ZUNvdW50ZXIobnVsbCxuYW1lKycgaW9uIGhlYXAnKTtpZihjdHIubnVtU2VyaWVzPT09MCl7Y3RyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygndmFsdWUnLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhjdHIubmFtZSsnLicrJ3ZhbHVlJykpKTt9CmN0ci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLGlvbkhlYXApO30pO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihJb25IZWFwUGFyc2VyKTtyZXR1cm57SW9uSGVhcFBhcnNlcixfSW9uSGVhcFBhcnNlclRlc3RFeHBvcnRzOlRlc3RFeHBvcnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIElycVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2lycV9oYW5kbGVyX2VudHJ5JyxJcnFQYXJzZXIucHJvdG90eXBlLmlycUhhbmRsZXJFbnRyeUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpcnFfaGFuZGxlcl9leGl0JyxJcnFQYXJzZXIucHJvdG90eXBlLmlycUhhbmRsZXJFeGl0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NvZnRpcnFfcmFpc2UnLElycVBhcnNlci5wcm90b3R5cGUuc29mdGlycVJhaXNlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NvZnRpcnFfZW50cnknLElycVBhcnNlci5wcm90b3R5cGUuc29mdGlycUVudHJ5RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NvZnRpcnFfZXhpdCcsSXJxUGFyc2VyLnByb3RvdHlwZS5zb2Z0aXJxRXhpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdpcGlfZW50cnknLElycVBhcnNlci5wcm90b3R5cGUuaXBpRW50cnlFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaXBpX2V4aXQnLElycVBhcnNlci5wcm90b3R5cGUuaXBpRXhpdEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdwcmVlbXB0X2Rpc2FibGUnLElycVBhcnNlci5wcm90b3R5cGUucHJlZW1wdFN0YXJ0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3ByZWVtcHRfZW5hYmxlJyxJcnFQYXJzZXIucHJvdG90eXBlLnByZWVtcHRFbmRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaXJxX2Rpc2FibGUnLElycVBhcnNlci5wcm90b3R5cGUuaXJxb2ZmU3RhcnRFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignaXJxX2VuYWJsZScsSXJxUGFyc2VyLnByb3RvdHlwZS5pcnFvZmZFbmRFdmVudC5iaW5kKHRoaXMpKTt9CmNvbnN0IGlycUhhbmRsZXJFbnRyeVJFPS9pcnE9KFxkKykgbmFtZT0oLispLztjb25zdCBpcnFIYW5kbGVyRXhpdFJFPS9pcnE9KFxkKykgcmV0PSguKykvO2NvbnN0IHNvZnRpcnFSRT0vdmVjPShcZCspIFxbYWN0aW9uPSguKylcXS87Y29uc3QgaXBpSGFuZGxlckV4aXRSRT0vXCgoLispXCkvO2NvbnN0IHByZWVtcHRpcnFSRT0vY2FsbGVyPSguKykgcGFyZW50PSguKykvO0lycVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGlycUhhbmRsZXJFbnRyeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9aXJxSGFuZGxlckVudHJ5UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBpcnE9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IG5hbWU9ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycXMgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7dGhyZWFkLmlycU5hbWU9bmFtZTtyZXR1cm4gdHJ1ZTt9LGlycUhhbmRsZXJFeGl0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1pcnFIYW5kbGVyRXhpdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgaXJxPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCByZXQ9ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycXMgY3B1ICcrY3B1TnVtYmVyKTtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0RW50cnlUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsJ0lSUSAoJyt0aHJlYWQuaXJxTmFtZSsnKScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGV2ZW50WzFdKSx0aHJlYWQubGFzdEVudHJ5VHMse3JldH0sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDt0aHJlYWQuaXJxTmFtZT11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxzb2Z0aXJxUmFpc2VFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0cnVlO30sc29mdGlycUVudHJ5RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1zb2Z0aXJxUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBhY3Rpb249ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3NvZnRpcnEgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7cmV0dXJuIHRydWU7fSxzb2Z0aXJxRXhpdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9c29mdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdmVjPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBhY3Rpb249ZXZlbnRbMl07Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3NvZnRpcnEgY3B1ICcrY3B1TnVtYmVyKTtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0RW50cnlUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsYWN0aW9uLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhldmVudFsxXSksdGhyZWFkLmxhc3RFbnRyeVRzLHt2ZWN9LGR1cmF0aW9uKTt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9CnRocmVhZC5sYXN0RW50cnlUcz11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxpcGlFbnRyeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ2lycXMgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7cmV0dXJuIHRydWU7fSxpcGlFeGl0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1pcGlIYW5kbGVyRXhpdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgaXBpTmFtZT1ldmVudFsxXTtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaXJxcyBjcHUgJytjcHVOdW1iZXIpO2lmKHRocmVhZC5sYXN0RW50cnlUcyE9PXVuZGVmaW5lZCl7Y29uc3QgZHVyYXRpb249dHMtdGhyZWFkLmxhc3RFbnRyeVRzO2NvbnN0IHNsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRTbGljZSgnJywnSVBJICgnK2lwaU5hbWUrJyknLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhpcGlOYW1lKSx0aHJlYWQubGFzdEVudHJ5VHMse30sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LHByZWVtcHRTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cHJlZW1wdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3ByZWVtcHQgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQubGFzdEVudHJ5VHM9dHM7dGhyZWFkLnByZWVtcHRTdGFydENhbGxlcj1ldmVudFsxXTt0aHJlYWQucHJlZW1wdFN0YXJ0UGFyZW50PWV2ZW50WzJdO3JldHVybiB0cnVlO30scHJlZW1wdEVuZEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cHJlZW1wdGlycVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVQc2V1ZG9UaHJlYWQoJ3ByZWVtcHQgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQucHJlZW1wdEVuZENhbGxlcj1ldmVudFsxXTt0aHJlYWQucHJlZW1wdEVuZFBhcmVudD1ldmVudFsyXTtpZih0aHJlYWQubGFzdEVudHJ5VHMhPT11bmRlZmluZWQpe2NvbnN0IGR1cmF0aW9uPXRzLXRocmVhZC5sYXN0RW50cnlUcztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsdGhyZWFkLnByZWVtcHRTdGFydFBhcmVudCsnOiAnK3RocmVhZC5wcmVlbXB0U3RhcnRDYWxsZXIsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRocmVhZC5wcmVlbXB0RW5kQ2FsbGVyKSx0aHJlYWQubGFzdEVudHJ5VHMse30sZHVyYXRpb24pO3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoU2xpY2Uoc2xpY2UpO30KdGhyZWFkLmxhc3RFbnRyeVRzPXVuZGVmaW5lZDtyZXR1cm4gdHJ1ZTt9LGlycW9mZlN0YXJ0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1wcmVlbXB0aXJxUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZVBzZXVkb1RocmVhZCgnaXJxb2ZmIGNwdSAnK2NwdU51bWJlcik7dGhyZWFkLmxhc3RFbnRyeVRzPXRzO3RocmVhZC5pcnFvZmZTdGFydENhbGxlcj1ldmVudFsxXTt0aHJlYWQuaXJxb2ZmU3RhcnRQYXJlbnQ9ZXZlbnRbMl07cmV0dXJuIHRydWU7fSxpcnFvZmZFbmRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXByZWVtcHRpcnFSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKCdpcnFvZmYgY3B1ICcrY3B1TnVtYmVyKTt0aHJlYWQuaXJxb2ZmRW5kQ2FsbGVyPWV2ZW50WzFdO3RocmVhZC5pcnFvZmZFbmRQYXJlbnQ9ZXZlbnRbMl07aWYodGhyZWFkLmxhc3RFbnRyeVRzIT09dW5kZWZpbmVkKXtjb25zdCBkdXJhdGlvbj10cy10aHJlYWQubGFzdEVudHJ5VHM7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLHRocmVhZC5pcnFvZmZTdGFydFBhcmVudCsnOiAnK3RocmVhZC5pcnFvZmZTdGFydENhbGxlcixDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcodGhyZWFkLmlycW9mZkVuZENhbGxlciksdGhyZWFkLmxhc3RFbnRyeVRzLHt9LGR1cmF0aW9uKTt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9CnRocmVhZC5sYXN0RW50cnlUcz11bmRlZmluZWQ7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKElycVBhcnNlcik7cmV0dXJue0lycVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IExpbnV4UGVyZlBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIEtlcm5lbEZ1bmNQYXJzZXIoaW1wb3J0ZXIpe0xpbnV4UGVyZlBhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdncmFwaF9lbnQnLEtlcm5lbEZ1bmNQYXJzZXIucHJvdG90eXBlLnRyYWNlS2VybmVsRnVuY0VudGVyRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2dyYXBoX3JldCcsS2VybmVsRnVuY1BhcnNlci5wcm90b3R5cGUudHJhY2VLZXJuZWxGdW5jUmV0dXJuRXZlbnQuYmluZCh0aGlzKSk7dGhpcy5tb2RlbF89aW1wb3J0ZXIubW9kZWxfO3RoaXMucHBpZHNfPXt9O30KY29uc3QgVGVzdEV4cG9ydHM9e307Y29uc3QgZnVuY0VudGVyUkU9bmV3IFJlZ0V4cCgnZnVuYz0oLispJyk7VGVzdEV4cG9ydHMuZnVuY0VudGVyUkU9ZnVuY0VudGVyUkU7S2VybmVsRnVuY1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpMaW51eFBlcmZQYXJzZXIucHJvdG90eXBlLHRyYWNlS2VybmVsRnVuY0VudGVyRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudERhdGE9ZnVuY0VudGVyUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50RGF0YSlyZXR1cm4gZmFsc2U7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IG5hbWU9ZXZlbnREYXRhWzFdO2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3ModGdpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTtjb25zdCBzbGljZXM9dGhyZWFkLmtlcm5lbFNsaWNlR3JvdXA7aWYoIXNsaWNlcy5pc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidUaW1lc3RhbXBzIGFyZSBtb3ZpbmcgYmFja3dhcmQuJ30pO3JldHVybiBmYWxzZTt9CmNvbnN0IHNsaWNlPXNsaWNlcy5iZWdpblNsaWNlKG51bGwsbmFtZSx0cyx7fSk7cmV0dXJuIHRydWU7fSx0cmFjZUtlcm5lbEZ1bmNSZXR1cm5FdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2lmKGV2ZW50QmFzZS50Z2lkPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2U7fQpjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCB0aHJlYWQ9dGhpcy5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHRnaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHBpZCk7dGhyZWFkLm5hbWU9ZXZlbnRCYXNlLnRocmVhZE5hbWU7Y29uc3Qgc2xpY2VzPXRocmVhZC5rZXJuZWxTbGljZUdyb3VwO2lmKCFzbGljZXMuaXNUaW1lc3RhbXBWYWxpZEZvckJlZ2luT3JFbmQodHMpKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGltZXN0YW1wcyBhcmUgbW92aW5nIGJhY2t3YXJkLid9KTtyZXR1cm4gZmFsc2U7fQppZihzbGljZXMub3BlblNsaWNlQ291bnQ+MCl7c2xpY2VzLmVuZFNsaWNlKHRzKTt9CnJldHVybiB0cnVlO319O0xpbnV4UGVyZlBhcnNlci5yZWdpc3RlcihLZXJuZWxGdW5jUGFyc2VyKTtyZXR1cm57S2VybmVsRnVuY1BhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gTWFsaVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21hbGlfZHZmc19ldmVudCcsTWFsaVBhcnNlci5wcm90b3R5cGUuZHZmc0V2ZW50RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21hbGlfZHZmc19zZXRfY2xvY2snLE1hbGlQYXJzZXIucHJvdG90eXBlLmR2ZnNTZXRDbG9ja0V2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtYWxpX2R2ZnNfc2V0X3ZvbHRhZ2UnLE1hbGlQYXJzZXIucHJvdG90eXBlLmR2ZnNTZXRWb2x0YWdlRXZlbnQuYmluZCh0aGlzKSk7dGhpcy5hZGRKTUNvdW50ZXIoJ21hbGlfaHdjX01FU1NBR0VTX1NFTlQnLCdNZXNzYWdlcyBTZW50Jyk7dGhpcy5hZGRKTUNvdW50ZXIoJ21hbGlfaHdjX01FU1NBR0VTX1JFQ0VJVkVEJywnTWVzc2FnZXMgUmVjZWl2ZWQnKTt0aGlzLmFkZEpNQ3ljbGVzKCdtYWxpX2h3Y19HUFVfQUNUSVZFJywnR1BVIEFjdGl2ZScpO3RoaXMuYWRkSk1DeWNsZXMoJ21hbGlfaHdjX0lSUV9BQ1RJVkUnLCdJUlEgQWN0aXZlJyk7Zm9yKGxldCBpPTA7aTw3O2krKyl7Y29uc3Qgam9iU3RyPSdKUycraTtjb25zdCBqb2JIV0NTdHI9J21hbGlfaHdjXycram9iU3RyO3RoaXMuYWRkSk1Db3VudGVyKGpvYkhXQ1N0cisnX0pPQlMnLGpvYlN0cisnIEpvYnMnKTt0aGlzLmFkZEpNQ291bnRlcihqb2JIV0NTdHIrJ19UQVNLUycsam9iU3RyKycgVGFza3MnKTt0aGlzLmFkZEpNQ3ljbGVzKGpvYkhXQ1N0cisnX0FDVElWRScsam9iU3RyKycgQWN0aXZlJyk7dGhpcy5hZGRKTUN5Y2xlcyhqb2JIV0NTdHIrJ19XQUlUX1JFQUQnLGpvYlN0cisnIFdhaXQgUmVhZCcpO3RoaXMuYWRkSk1DeWNsZXMoam9iSFdDU3RyKydfV0FJVF9JU1NVRScsam9iU3RyKycgV2FpdCBJc3N1ZScpO3RoaXMuYWRkSk1DeWNsZXMoam9iSFdDU3RyKydfV0FJVF9ERVBFTkQnLGpvYlN0cisnIFdhaXQgRGVwZW5kJyk7dGhpcy5hZGRKTUN5Y2xlcyhqb2JIV0NTdHIrJ19XQUlUX0ZJTklTSCcsam9iU3RyKycgV2FpdCBGaW5pc2gnKTt9CnRoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19UUklBTkdMRVMnLCdUcmlhbmdsZXMnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUVVBRFMnLCdRdWFkcycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19QT0xZR09OUycsJ1BvbHlnb25zJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1BPSU5UUycsJ1BvaW50cycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19MSU5FUycsJ0xpbmVzJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1ZDQUNIRV9ISVQnLCdWQ2FjaGUgSGl0Jyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1ZDQUNIRV9NSVNTJywnVkNhY2hlIE1pc3MnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfRlJPTlRfRkFDSU5HJywnRnJvbnQgRmFjaW5nJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX0JBQ0tfRkFDSU5HJywnQmFjayBGYWNpbmcnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUFJJTV9WSVNJQkxFJywnUHJpbSBWaXNpYmxlJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1BSSU1fQ1VMTEVEJywnUHJpbSBDdWxsZWQnKTt0aGlzLmFkZFRpbGVyQ291bnRlcignbWFsaV9od2NfUFJJTV9DTElQUEVEJywnUHJpbSBDbGlwcGVkJyk7dGhpcy5hZGRUaWxlckNvdW50ZXIoJ21hbGlfaHdjX1dSQlVGX0hJVCcsJ1dyYnVmIEhpdCcpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9NSVNTJywnV3JidWYgTWlzcycpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9MSU5FJywnV3JidWYgTGluZScpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9QQVJUSUFMJywnV3JidWYgUGFydGlhbCcpO3RoaXMuYWRkVGlsZXJDb3VudGVyKCdtYWxpX2h3Y19XUkJVRl9TVEFMTCcsJ1dyYnVmIFN0YWxsJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfQUNUSVZFJywnVGlsZXIgQWN0aXZlJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfSU5ERVhfV0FJVCcsJ0luZGV4IFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19JTkRFWF9SQU5HRV9XQUlUJywnSW5kZXggUmFuZ2UgV2FpdCcpO3RoaXMuYWRkVGlsZXJDeWNsZXMoJ21hbGlfaHdjX1ZFUlRFWF9XQUlUJywnVmVydGV4IFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19QQ0FDSEVfV0FJVCcsJ1BjYWNoZSBXYWl0Jyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfV1JCVUZfV0FJVCcsJ1dyYnVmIFdhaXQnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19CVVNfUkVBRCcsJ0J1cyBSZWFkJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfQlVTX1dSSVRFJywnQnVzIFdyaXRlJyk7dGhpcy5hZGRUaWxlckN5Y2xlcygnbWFsaV9od2NfVElMRVJfVVRMQl9TVEFMTCcsJ1RpbGVyIFVUTEIgU3RhbGwnKTt0aGlzLmFkZFRpbGVyQ3ljbGVzKCdtYWxpX2h3Y19USUxFUl9VVExCX0hJVCcsJ1RpbGVyIFVUTEIgSGl0Jyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUFJJTUFUSVZFUycsJ1ByaW1pdGl2ZXMnKTt0aGlzLmFkZEZyYWdDb3VudGVyKCdtYWxpX2h3Y19GUkFHX1BSSU1BVElWRVNfRFJPUFBFRCcsJ1ByaW1pdGl2ZXMgRHJvcHBlZCcpO3RoaXMuYWRkRnJhZ0N5Y2xlcygnbWFsaV9od2NfRlJBR19DWUNMRV9ERVNDJywnRGVzY3JpcHRvciBQcm9jZXNzaW5nJyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0NZQ0xFU19QTFInLCdQTFIgUHJvY2Vzc2luZz8/Jyk7dGhpcy5hZGRGcmFnQ3ljbGVzKCdtYWxpX2h3Y19GUkFHX0NZQ0xFU19WRVJUJywnVmVydGV4IFByb2Nlc3NpbmcnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVTX1RSSVNFVFVQJywnVHJpYW5nbGUgU2V0dXAnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVTX1JBU1QnLCdSYXN0ZXJpemF0aW9uPz8/Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19USFJFQURTJywnVGhyZWFkcycpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfRFVNTVlfVEhSRUFEUycsJ0R1bW15IFRocmVhZHMnKTt0aGlzLmFkZEZyYWdDb3VudGVyKCdtYWxpX2h3Y19GUkFHX1FVQURTX1JBU1QnLCdRdWFkcyBSYXN0Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19RVUFEU19FWlNfVEVTVCcsJ1F1YWRzIEVaUyBUZXN0Jyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19RVUFEU19FWlNfS0lMTEVEJywnUXVhZHMgRVpTIEtpbGxlZCcpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUVVBRFNfTFpTX1RFU1QnLCdRdWFkcyBMWlMgVGVzdCcpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfUVVBRFNfTFpTX0tJTExFRCcsJ1F1YWRzIExaUyBLaWxsZWQnKTt0aGlzLmFkZEZyYWdDeWNsZXMoJ21hbGlfaHdjX0ZSQUdfQ1lDTEVfTk9fVElMRScsJ05vIFRpbGVzJyk7dGhpcy5hZGRGcmFnQ291bnRlcignbWFsaV9od2NfRlJBR19OVU1fVElMRVMnLCdUaWxlcycpO3RoaXMuYWRkRnJhZ0NvdW50ZXIoJ21hbGlfaHdjX0ZSQUdfVFJBTlNfRUxJTScsJ1RyYW5zYWN0aW9ucyBFbGltaW5hdGVkJyk7dGhpcy5hZGRDb21wdXRlQ3ljbGVzKCdtYWxpX2h3Y19DT01QVVRFX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkQ29tcHV0ZUNvdW50ZXIoJ21hbGlfaHdjX0NPTVBVVEVfVEFTS1MnLCdUYXNrcycpO3RoaXMuYWRkQ29tcHV0ZUNvdW50ZXIoJ21hbGlfaHdjX0NPTVBVVEVfVEhSRUFEUycsJ1RocmVhZHMgU3RhcnRlZCcpO3RoaXMuYWRkQ29tcHV0ZUN5Y2xlcygnbWFsaV9od2NfQ09NUFVURV9DWUNMRVNfREVTQycsJ1dhaXRpbmcgZm9yIERlc2NyaXB0b3JzJyk7dGhpcy5hZGRUcmlwaXBlQ3ljbGVzKCdtYWxpX2h3Y19UUklQSVBFX0FDVElWRScsJ0FjdGl2ZScpO3RoaXMuYWRkQXJpdGhDb3VudGVyKCdtYWxpX2h3Y19BUklUSF9XT1JEUycsJ0luc3RydWN0aW9ucyAoL1BpcGVzKScpO3RoaXMuYWRkQXJpdGhDeWNsZXMoJ21hbGlfaHdjX0FSSVRIX0NZQ0xFU19SRUcnLCdSZWcgc2NoZWR1bGluZyBzdGFsbHMgKC9QaXBlcyknKTt0aGlzLmFkZEFyaXRoQ3ljbGVzKCdtYWxpX2h3Y19BUklUSF9DWUNMRVNfTDAnLCdMMCBjYWNoZSBtaXNzIHN0YWxscyAoL1BpcGVzKScpO3RoaXMuYWRkQXJpdGhDb3VudGVyKCdtYWxpX2h3Y19BUklUSF9GUkFHX0RFUEVORCcsJ0ZyYWcgZGVwIGNoZWNrIGZhaWx1cmVzICgvUGlwZXMpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1dPUkRTJywnSW5zdHJ1Y3Rpb24gV29yZHMgQ29tcGxldGVkJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX0lTU1VFUycsJ0Z1bGwgUGlwZWxpbmUgSXNzdWVzJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFU1RBUlRTJywnUmVzdGFydHMgKHVucGFpcmFibGUgaW5zdHMpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVTX01JU1MnLCdQaXBlbGluZSByZWlzc3VlIChjYWNoZSBtaXNzL3VUTEIpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVTX1ZEJywnUGlwZWxpbmUgcmVpc3N1ZSAodmFyeWluZyBkYXRhKScpO3RoaXMuYWRkTFNDb3VudGVyKCdtYWxpX2h3Y19MU19SRUlTU1VFX0FUVFJJQl9NSVNTJywnUGlwZWxpbmUgcmVpc3N1ZSAoYXR0cmlidXRlIGNhY2hlIG1pc3MpJyk7dGhpcy5hZGRMU0NvdW50ZXIoJ21hbGlfaHdjX0xTX1JFSVNTVUVfTk9fV0InLCdXcml0ZWJhY2sgbm90IHVzZWQnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9XT1JEUycsJ1dvcmRzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfQlVCQkxFUycsJ0J1YmJsZXMnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9XT1JEU19MMCcsJ1dvcmRzIEwwJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfV09SRFNfREVTQycsJ1dvcmRzIERlc2MnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9USFJFQURTJywnVGhyZWFkcycpO3RoaXMuYWRkVGV4Q291bnRlcignbWFsaV9od2NfVEVYX1JFQ0lSQ19GTUlTUycsJ1JlY2lyYyBkdWUgdG8gRnVsbCBNaXNzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfUkVDSVJDX0RFU0MnLCdSZWNpcmMgZHVlIHRvIERlc2MgTWlzcycpO3RoaXMuYWRkVGV4Q291bnRlcignbWFsaV9od2NfVEVYX1JFQ0lSQ19NVUxUSScsJ1JlY2lyYyBkdWUgdG8gTXVsdGlwYXNzJyk7dGhpcy5hZGRUZXhDb3VudGVyKCdtYWxpX2h3Y19URVhfUkVDSVJDX1BNSVNTJywnUmVjaXJjIGR1ZSB0byBQYXJ0aWFsIENhY2hlIE1pc3MnKTt0aGlzLmFkZFRleENvdW50ZXIoJ21hbGlfaHdjX1RFWF9SRUNJUkNfQ09ORicsJ1JlY2lyYyBkdWUgdG8gQ2FjaGUgQ29uZmxpY3QnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19SRUFEX0hJVFMnLCdSZWFkIEhpdHMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19SRUFEX01JU1NFUycsJ1JlYWQgTWlzc2VzJyk7dGhpcy5hZGRMU0NDb3VudGVyKCdtYWxpX2h3Y19MU0NfV1JJVEVfSElUUycsJ1dyaXRlIEhpdHMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19XUklURV9NSVNTRVMnLCdXcml0ZSBNaXNzZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19BVE9NSUNfSElUUycsJ0F0b21pYyBIaXRzJyk7dGhpcy5hZGRMU0NDb3VudGVyKCdtYWxpX2h3Y19MU0NfQVRPTUlDX01JU1NFUycsJ0F0b21pYyBNaXNzZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19MSU5FX0ZFVENIRVMnLCdMaW5lIEZldGNoZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19ESVJUWV9MSU5FJywnRGlydHkgTGluZXMnKTt0aGlzLmFkZExTQ0NvdW50ZXIoJ21hbGlfaHdjX0xTQ19TTk9PUFMnLCdTbm9vcHMnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfU1RBTEwnLCdBZGRyZXNzIGNoYW5uZWwgc3RhbGwnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfTUlTUycsJ0NhY2hlIE1pc3MnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0FYSV9UTEJfVFJBTlNBQ1RJT04nLCdUcmFuc2FjdGlvbnMnKTt0aGlzLmFkZEFYSUNvdW50ZXIoJ21hbGlfaHdjX0xTX1RMQl9NSVNTJywnTFMgQ2FjaGUgTWlzcycpO3RoaXMuYWRkQVhJQ291bnRlcignbWFsaV9od2NfTFNfVExCX0hJVCcsJ0xTIENhY2hlIEhpdCcpO3RoaXMuYWRkQVhJQ291bnRlcignbWFsaV9od2NfQVhJX0JFQVRTX1JFQUQnLCdSZWFkIEJlYXRzJyk7dGhpcy5hZGRBWElDb3VudGVyKCdtYWxpX2h3Y19BWElfQkVBVFNfV1JJVEUnLCdXcml0ZSBCZWF0cycpO3RoaXMuYWRkTU1VQ291bnRlcignbWFsaV9od2NfTU1VX1RBQkxFX1dBTEsnLCdQYWdlIFRhYmxlIFdhbGtzJyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfUkVQTEFZX01JU1MnLCdDYWNoZSBNaXNzIGZyb20gUmVwbGF5IEJ1ZmZlcicpO3RoaXMuYWRkTU1VQ291bnRlcignbWFsaV9od2NfTU1VX1JFUExBWV9GVUxMJywnUmVwbGF5IEJ1ZmZlciBGdWxsJyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfTkVXX01JU1MnLCdDYWNoZSBNaXNzIG9uIE5ldyBSZXF1ZXN0Jyk7dGhpcy5hZGRNTVVDb3VudGVyKCdtYWxpX2h3Y19NTVVfSElUJywnQ2FjaGUgSGl0Jyk7dGhpcy5hZGRNTVVDeWNsZXMoJ21hbGlfaHdjX1VUTEJfU1RBTEwnLCdVVExCIFN0YWxsZWQnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9SRVBMQVlfTUlTUycsJ1VUTEIgUmVwbGF5IE1pc3MnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9SRVBMQVlfRlVMTCcsJ1VUTEIgUmVwbGF5IEZ1bGwnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9ORVdfTUlTUycsJ1VUTEIgTmV3IE1pc3MnKTt0aGlzLmFkZE1NVUN5Y2xlcygnbWFsaV9od2NfVVRMQl9ISVQnLCdVVExCIEhpdCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX0JFQVRTJywnUmVhZCBCZWF0cycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9CRUFUUycsJ1dyaXRlIEJlYXRzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0FOWV9MT09LVVAnLCdBbnkgTG9va3VwJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1JFQURfTE9PS1VQJywnUmVhZCBMb29rdXAnKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfU1JFQURfTE9PS1VQJywnU2hhcmVhYmxlIFJlYWQgTG9va3VwJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1JFQURfUkVQTEFZJywnUmVhZCBSZXBsYXllZCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX1NOT09QJywnUmVhZCBTbm9vcCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9SRUFEX0hJVCcsJ1JlYWQgQ2FjaGUgSGl0Jyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0NMRUFOX01JU1MnLCdDbGVhblVuaXF1ZSBNaXNzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1dSSVRFX0xPT0tVUCcsJ1dyaXRlIExvb2t1cCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9TV1JJVEVfTE9PS1VQJywnU2hhcmVhYmxlIFdyaXRlIExvb2t1cCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9SRVBMQVknLCdXcml0ZSBSZXBsYXllZCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9XUklURV9TTk9PUCcsJ1dyaXRlIFNub29wJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1dSSVRFX0hJVCcsJ1dyaXRlIENhY2hlIEhpdCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9GVUxMJywnRXh0UkQgd2l0aCBCSVUgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9IQUxGJywnRXh0UkQgd2l0aCBCSVUgPjEvMiBGdWxsJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XUklURV9GVUxMJywnRXh0V1Igd2l0aCBCSVUgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEVfSEFMRicsJ0V4dFdSIHdpdGggQklVID4xLzIgRnVsbCcpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRCcsJ0V4dGVybmFsIFJlYWQgKEV4dFJEKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkVBRF9MSU5FJywnRXh0UkQgKGxpbmVmaWxsKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEUnLCdFeHRlcm5hbCBXcml0ZSAoRXh0V1IpJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XUklURV9MSU5FJywnRXh0V1IgKGxpbmVmaWxsKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfV1JJVEVfU01BTEwnLCdFeHRXUiAoYnVyc3Qgc2l6ZSA8NjRCKScpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfQkFSUklFUicsJ0V4dGVybmFsIEJhcnJpZXInKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfRVhUX0FSX1NUQUxMJywnQWRkcmVzcyBSZWFkIHN0YWxscycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUl9CVUZfRlVMTCcsJ1Jlc3BvbnNlIEJ1ZmZlciBmdWxsIHN0YWxscycpO3RoaXMuYWRkTDJDb3VudGVyKCdtYWxpX2h3Y19MMl9FWFRfUkRfQlVGX0ZVTEwnLCdSZWFkIERhdGEgQnVmZmVyIGZ1bGwgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9SX1JBVycsJ1JBVyBoYXphcmQgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9XX1NUQUxMJywnV3JpdGUgRGF0YSBzdGFsbHMnKTt0aGlzLmFkZEwyQ291bnRlcignbWFsaV9od2NfTDJfRVhUX1dfQlVGX0ZVTEwnLCdXcml0ZSBEYXRhIEJ1ZmZlciBmdWxsJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX0VYVF9SX1dfSEFaQVJEJywnV0FXIG9yIFdBUiBoYXphcmQgc3RhbGxzJyk7dGhpcy5hZGRMMkNvdW50ZXIoJ21hbGlfaHdjX0wyX1RBR19IQVpBUkQnLCdUYWcgaGF6YXJkIHJlcGxheXMnKTt0aGlzLmFkZEwyQ3ljbGVzKCdtYWxpX2h3Y19MMl9TTk9PUF9GVUxMJywnU25vb3AgYnVmZmVyIGZ1bGwnKTt0aGlzLmFkZEwyQ3ljbGVzKCdtYWxpX2h3Y19MMl9SRVBMQVlfRlVMTCcsJ1JlcGxheSBidWZmZXIgZnVsbCcpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGU6bWFsaV9kcml2ZXInLE1hbGlQYXJzZXIucHJvdG90eXBlLm1hbGlEREtFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbWFsaV9qb2Jfc3lzdHJhY2VfZXZlbnRfc3RhcnQnLE1hbGlQYXJzZXIucHJvdG90eXBlLm1hbGlKb2JFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbWFsaV9qb2Jfc3lzdHJhY2VfZXZlbnRfc3RvcCcsTWFsaVBhcnNlci5wcm90b3R5cGUubWFsaUpvYkV2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt0aGlzLmRlZmVycmVkSm9ic189e307fQpNYWxpUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsbWFsaURES09wZW5TbGljZShwaWQsdGlkLHRzLGZ1bmMsYmxvY2tpbmZvKXtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQodGlkKTtjb25zdCBmdW5jQXJncz0vXihbXHdcZF9dKikoPzpcKFwpKT86P1xzKiguKikkLy5leGVjKGZ1bmMpO3RocmVhZC5zbGljZUdyb3VwLmJlZ2luU2xpY2UoJ2dwdS1kcml2ZXInLGZ1bmNBcmdzWzFdLHRzLHsnYXJncyc6ZnVuY0FyZ3NbMl0sYmxvY2tpbmZvfSk7fSxtYWxpRERLQ2xvc2VTbGljZShwaWQsdGlkLHRzLGFyZ3MsYmxvY2tpbmZvKXtjb25zdCB0aHJlYWQ9dGhpcy5pbXBvcnRlci5tb2RlbF8uZ2V0T3JDcmVhdGVQcm9jZXNzKHBpZCkuZ2V0T3JDcmVhdGVUaHJlYWQodGlkKTtpZighdGhyZWFkLnNsaWNlR3JvdXAub3BlblNsaWNlQ291bnQpe3JldHVybjt9CnRocmVhZC5zbGljZUdyb3VwLmVuZFNsaWNlKHRzKTt9LGF1dG9EZXRlY3RMaW5lUkUobGluZSl7Y29uc3QgbGluZVJFV2l0aFRocmVhZD0vXlxzKlwoKFtcd1wtXSopXClccyooXHcrKTpccyooW1x3XFxcL1wuXC1dKkBcZCopOj9ccyooLiopJC87aWYobGluZVJFV2l0aFRocmVhZC50ZXN0KGxpbmUpKXtyZXR1cm4gbGluZVJFV2l0aFRocmVhZDt9CmNvbnN0IGxpbmVSRU5vVGhyZWFkPS9ecyooKShcdyspOlxzKihbXHdcXFwvLlwtXSopOj9ccyooLiopJC87aWYobGluZVJFTm9UaHJlYWQudGVzdChsaW5lKSl7cmV0dXJuIGxpbmVSRU5vVGhyZWFkO30KcmV0dXJuIG51bGw7fSxsaW5lUkU6bnVsbCxtYWxpRERLRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtpZih0aGlzLmxpbmVSRT09PW51bGwpe3RoaXMubGluZVJFPXRoaXMuYXV0b0RldGVjdExpbmVSRShldmVudEJhc2UuZGV0YWlscyk7aWYodGhpcy5saW5lUkU9PT1udWxsKXJldHVybiBmYWxzZTt9CmNvbnN0IG1hbGlFdmVudD10aGlzLmxpbmVSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtjb25zdCB0aWQ9KG1hbGlFdmVudFsxXT09PScnPydtYWxpJzptYWxpRXZlbnRbMV0pO3N3aXRjaChtYWxpRXZlbnRbMl0pe2Nhc2UnY3Jvc190cmFjZV9wcmludF9lbnRlcic6dGhpcy5tYWxpRERLT3BlblNsaWNlKHBpZCx0aWQsdHMsbWFsaUV2ZW50WzRdLG1hbGlFdmVudFszXSk7YnJlYWs7Y2FzZSdjcm9zX3RyYWNlX3ByaW50X2V4aXQnOnRoaXMubWFsaURES0Nsb3NlU2xpY2UocGlkLHRpZCx0cyxbXSxtYWxpRXZlbnRbM10pO30KcmV0dXJuIHRydWU7fSxtYWxpSm9iRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBqb2JFdmVudFJFPS9eLip0cmFjaW5nX21hcmtfd3JpdGU6IChTfEYpXHwoXGQrKVx8KFx3Kyktam9iXHwoXGQrKVx8KFxkKylcfChcZCspXHwoXGQrKVx8KFxkKylcfChbYS16MC05XSspXHwoXGQrKSQvO2NvbnN0IGpvYkV2ZW50PWpvYkV2ZW50UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWpvYkV2ZW50KXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsYXJnczondW5leHBlY3RlZCBtYWxpX2pvYl9zeXN0cmFjZV9ldmVudF8qIGV2ZW50IHN5bnRheCd9KTtyZXR1cm47fQpjb25zdCBqb2JUeXBlPWpvYkV2ZW50WzNdO2NvbnN0IGpvYklkPWpvYkV2ZW50WzRdO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoMCkuZ2V0T3JDcmVhdGVUaHJlYWQoJ21hbGk6Jytqb2JUeXBlKTtzd2l0Y2goam9iRXZlbnRbMV0pe2Nhc2UnUyc6e2NvbnN0IGFyZ3M9e2N0eDpqb2JFdmVudFs5XSxwaWQ6cGFyc2VJbnQoam9iRXZlbnRbMl0sMTApLGRlcDA6cGFyc2VJbnQoam9iRXZlbnRbNV0sMTApLGRlcDE6cGFyc2VJbnQoam9iRXZlbnRbN10sMTApfTtpZih0aHJlYWQuc2xpY2VHcm91cC5vcGVuU2xpY2VDb3VudCl7aWYoIShqb2JUeXBlIGluIHRoaXMuZGVmZXJyZWRKb2JzXykpe3RoaXMuZGVmZXJyZWRKb2JzX1tqb2JUeXBlXT1bXTt9CnRoaXMuZGVmZXJyZWRKb2JzX1tqb2JUeXBlXS5wdXNoKHtpZDpqb2JJZCxhcmdzfSk7fWVsc2V7dGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZShudWxsLGpvYklkLHRzLGFyZ3MpO319YnJlYWs7Y2FzZSdGJzp7aWYoIXRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXtyZXR1cm47fQppZih0aHJlYWQuc2xpY2VHcm91cC5tb3N0UmVjZW50bHlPcGVuZWRQYXJ0aWFsU2xpY2UudGl0bGUhPT1qb2JJZCl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonaW52YWxpZCBldmVudCBuZXN0aW5nJyxtZXNzYWdlOidub24tc2VxdWVudGlhbCBqb2JzIGluIHNhbWUgbWFsaSBqb2Igc2xvdCd9KTt9CnRocmVhZC5zbGljZUdyb3VwLmVuZFNsaWNlKHRzKTtjb25zdCBkZWZlcnJlZEpvYnM9dGhpcy5kZWZlcnJlZEpvYnNfW2pvYlR5cGVdO2lmKGRlZmVycmVkSm9icyYmZGVmZXJyZWRKb2JzLmxlbmd0aCl7Y29uc3Qgam9iPWRlZmVycmVkSm9icy5zaGlmdCgpO3RocmVhZC5zbGljZUdyb3VwLmJlZ2luU2xpY2UobnVsbCxqb2IuaWQsdHMsam9iLmFyZ3MpO319YnJlYWs7fQpyZXR1cm4gdHJ1ZTt9LGR2ZnNTYW1wbGUoY291bnRlck5hbWUsc2VyaWVzTmFtZSx0cyxzKXtjb25zdCB2YWx1ZT1wYXJzZUludChzKTtjb25zdCBjb3VudGVyPXRoaXMubW9kZWxfLmtlcm5lbC5nZXRPckNyZWF0ZUNvdW50ZXIoJ0RWRlMnLGNvdW50ZXJOYW1lKTtpZihjb3VudGVyLm51bVNlcmllcz09PTApe2NvdW50ZXIuYWRkU2VyaWVzKG5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKHNlcmllc05hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGNvdW50ZXIubmFtZSkpKTt9CmNvdW50ZXIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyx2YWx1ZSk7fSk7fSxkdmZzRXZlbnRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS91dGlsaXphdGlvbj0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTt0aGlzLmR2ZnNTYW1wbGUoJ0RWRlMgVXRpbGl6YXRpb24nLCd1dGlsaXphdGlvbicsdHMsZXZlbnRbMV0pO3JldHVybiB0cnVlO30sZHZmc1NldENsb2NrRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vZnJlcXVlbmN5PShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO3RoaXMuZHZmc1NhbXBsZSgnRFZGUyBGcmVxdWVuY3knLCdmcmVxdWVuY3knLHRzLGV2ZW50WzFdKTtyZXR1cm4gdHJ1ZTt9LGR2ZnNTZXRWb2x0YWdlRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD0vdm9sdGFnZT0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTt0aGlzLmR2ZnNTYW1wbGUoJ0RWRlMgVm9sdGFnZScsJ3ZvbHRhZ2UnLHRzLGV2ZW50WzFdKTtyZXR1cm4gdHJ1ZTt9LGh3Y1NhbXBsZShjYXQsY291bnRlck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS92YWw9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdmFsdWU9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IGNvdW50ZXI9dGhpcy5tb2RlbF8ua2VybmVsLmdldE9yQ3JlYXRlQ291bnRlcihjYXQsY291bnRlck5hbWUpO2lmKGNvdW50ZXIubnVtU2VyaWVzPT09MCl7Y291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoc2VyaWVzTmFtZSxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoY291bnRlci5uYW1lKSkpO30KY291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbHVlKTt9KTtyZXR1cm4gdHJ1ZTt9LGptU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpqbScsJ0pNOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkSk1Db3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmptU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRKTUN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5qbVNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LHRpbGVyU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTp0aWxlcicsJ1RpbGVyOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkVGlsZXJDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLnRpbGVyU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRUaWxlckN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy50aWxlclNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGZyYWdTYW1wbGUoY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOmZyYWdtZW50JywnRnJhZ21lbnQ6ICcrY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSk7fSxhZGRGcmFnQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5mcmFnU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRGcmFnQ3ljbGVzKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmZyYWdTYW1wbGUoaHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxjb21wdXRlU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpjb21wdXRlJywnQ29tcHV0ZTogJytjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKTt9LGFkZENvbXB1dGVDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmNvbXB1dGVTYW1wbGUoaHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZENvbXB1dGVDeWNsZXMoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuY29tcHV0ZVNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZFRyaXBpcGVDeWNsZXMoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOnNoYWRlcicsJ1RyaXBpcGU6ICcraHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhcml0aFNhbXBsZShjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5od2NTYW1wbGUoJ21hbGk6YXJpdGgnLCdBcml0aDogJytjdHJOYW1lLHNlcmllc05hbWUsdHMsZXZlbnRCYXNlKTt9LGFkZEFyaXRoQ291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5hcml0aFNhbXBsZShod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQp0aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkQXJpdGhDeWNsZXMoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuYXJpdGhTYW1wbGUoaHdjVGl0bGUsJ2N5Y2xlcycsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRMU0NvdW50ZXIoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOmxzJywnTFM6ICcraHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LHRleHR1cmVTYW1wbGUoY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOnRleHR1cmUnLCdUZXh0dXJlOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkVGV4Q291bnRlcihod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy50ZXh0dXJlU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRMU0NDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpsc2MnLCdMU0M6ICcraHdjVGl0bGUsJ2NvdW50Jyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGFkZEFYSUNvdW50ZXIoaHdjRXZlbnROYW1lLGh3Y1RpdGxlKXtmdW5jdGlvbiBoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRoaXMuaHdjU2FtcGxlKCdtYWxpOmF4aScsJ0FYSTogJytod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQp0aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sbW11U2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTptbXUnLCdNTVU6ICcrY3RyTmFtZSxzZXJpZXNOYW1lLHRzLGV2ZW50QmFzZSk7fSxhZGRNTVVDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLm1tdVNhbXBsZShod2NUaXRsZSwnY291bnQnLHRzLGV2ZW50QmFzZSk7fQp0aGlzLmltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKGh3Y0V2ZW50TmFtZSxoYW5kbGVyLmJpbmQodGhpcykpO30sYWRkTU1VQ3ljbGVzKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLm1tdVNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9LGwyU2FtcGxlKGN0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmh3Y1NhbXBsZSgnbWFsaTpsMicsJ0wyOiAnK2N0ck5hbWUsc2VyaWVzTmFtZSx0cyxldmVudEJhc2UpO30sYWRkTDJDb3VudGVyKGh3Y0V2ZW50TmFtZSxod2NUaXRsZSl7ZnVuY3Rpb24gaGFuZGxlcihldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe3JldHVybiB0aGlzLmwyU2FtcGxlKGh3Y1RpdGxlLCdjb3VudCcsdHMsZXZlbnRCYXNlKTt9CnRoaXMuaW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoaHdjRXZlbnROYW1lLGhhbmRsZXIuYmluZCh0aGlzKSk7fSxhZGRMMkN5Y2xlcyhod2NFdmVudE5hbWUsaHdjVGl0bGUpe2Z1bmN0aW9uIGhhbmRsZXIoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdGhpcy5sMlNhbXBsZShod2NUaXRsZSwnY3ljbGVzJyx0cyxldmVudEJhc2UpO30KdGhpcy5pbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcihod2NFdmVudE5hbWUsaGFuZGxlci5iaW5kKHRoaXMpKTt9fTtQYXJzZXIucmVnaXN0ZXIoTWFsaVBhcnNlcik7cmV0dXJue01hbGlQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBNZW1SZWNsYWltUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbW1fdm1zY2FuX2tzd2FwZF93YWtlJyxNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZS5rc3dhcGRXYWtlLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdtbV92bXNjYW5fa3N3YXBkX3NsZWVwJyxNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZS5rc3dhcGRTbGVlcC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcignbW1fdm1zY2FuX2RpcmVjdF9yZWNsYWltX2JlZ2luJyxNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZS5yZWNsYWltQmVnaW4uYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ21tX3Ztc2Nhbl9kaXJlY3RfcmVjbGFpbV9lbmQnLE1lbVJlY2xhaW1QYXJzZXIucHJvdG90eXBlLnJlY2xhaW1FbmQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2xvd21lbW9yeV9raWxsJyxNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZS5sb3dtZW1vcnlLaWxsLmJpbmQodGhpcykpO30KY29uc3Qga3N3YXBkV2FrZVJFPS9uaWQ9KFxkKykgb3JkZXI9KFxkKykvO2NvbnN0IGtzd2FwZFNsZWVwUkU9L25pZD0oXGQrKS87Y29uc3QgcmVjbGFpbUJlZ2luUkU9L29yZGVyPShcZCspIG1heV93cml0ZXBhZ2U9XGQrIGdmcF9mbGFncz0oLispLztjb25zdCByZWNsYWltRW5kUkU9L25yX3JlY2xhaW1lZD0oXGQrKS87Y29uc3QgbG93bWVtb3J5UkU9LyhbXiBdKykgXCgoXGQrKVwpLCBwYWdlIGNhY2hlIChcZCspa0IgXChsaW1pdCAoXGQrKWtCXCksIGZyZWUgKC0/XGQrKUtiLztNZW1SZWNsYWltUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsa3N3YXBkV2FrZShldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PWtzd2FwZFdha2VSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IG5pZD1wYXJzZUludChldmVudFsxXSk7Y29uc3Qgb3JkZXI9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7aWYoa3RocmVhZC5vcGVuU2xpY2VUUyl7aWYob3JkZXI+a3RocmVhZC5vcmRlcil7a3RocmVhZC5vcmRlcj1vcmRlcjt9fWVsc2V7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9yZGVyPW9yZGVyO30KcmV0dXJuIHRydWU7fSxrc3dhcGRTbGVlcChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7aWYoa3RocmVhZC5vcGVuU2xpY2VUUyl7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnbWVtcmVjbGFpbScsZXZlbnRCYXNlLnRocmVhZE5hbWUsa3RocmVhZC5vcGVuU2xpY2VUUyx0cy1rdGhyZWFkLm9wZW5TbGljZVRTLDAsMCx7b3JkZXI6a3RocmVhZC5vcmRlcn0pO30Ka3RocmVhZC5vcGVuU2xpY2VUUz11bmRlZmluZWQ7a3RocmVhZC5vcmRlcj11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxyZWNsYWltQmVnaW4oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1yZWNsYWltQmVnaW5SRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG9yZGVyPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBnZnA9ZXZlbnRbMl07Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7Y29uc3Qga3RocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGV2ZW50QmFzZS50aHJlYWROYW1lLHRnaWQscGlkKTtrdGhyZWFkLm9wZW5TbGljZVRTPXRzO2t0aHJlYWQub3JkZXI9b3JkZXI7a3RocmVhZC5nZnA9Z2ZwO3JldHVybiB0cnVlO30scmVjbGFpbUVuZChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXJlY2xhaW1FbmRSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IG5yUmVjbGFpbWVkPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUsdGdpZCxwaWQpO2lmKGt0aHJlYWQub3BlblNsaWNlVFMhPT11bmRlZmluZWQpe2t0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaENvbXBsZXRlU2xpY2UoJ21lbXJlY2xhaW0nLCdkaXJlY3QgcmVjbGFpbScsa3RocmVhZC5vcGVuU2xpY2VUUyx0cy1rdGhyZWFkLm9wZW5TbGljZVRTLDAsMCx7b3JkZXI6a3RocmVhZC5vcmRlcixnZnA6a3RocmVhZC5nZnAsbnJfcmVjbGFpbWVkOm5yUmVjbGFpbWVkfSk7fQprdGhyZWFkLm9wZW5TbGljZVRTPXVuZGVmaW5lZDtrdGhyZWFkLm9yZGVyPXVuZGVmaW5lZDtrdGhyZWFkLmdmcD11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxsb3dtZW1vcnlLaWxsKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9bG93bWVtb3J5UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCBraWxsZWROYW1lPWV2ZW50WzFdO2NvbnN0IGtpbGxlZFBpZD1wYXJzZUludChldmVudFsyXSk7Y29uc3QgY2FjaGU9cGFyc2VJbnQoZXZlbnRbM10pO2NvbnN0IGZyZWU9cGFyc2VJbnQoZXZlbnRbNV0pO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSx0Z2lkLHBpZCk7a3RocmVhZC50aHJlYWQuc2xpY2VHcm91cC5wdXNoQ29tcGxldGVTbGljZSgnbG93bWVtb3J5JywnbG93IG1lbW9yeSBraWxsJyx0cywwLDAsMCx7a2lsbGVkX25hbWU6a2lsbGVkTmFtZSxraWxsZWRfcGlkOmtpbGxlZFBpZCxjYWNoZSxmcmVlfSk7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKE1lbVJlY2xhaW1QYXJzZXIpO3JldHVybntNZW1SZWNsYWltUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBQb3dlclBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3Bvd2VyX3N0YXJ0JyxQb3dlclBhcnNlci5wcm90b3R5cGUucG93ZXJTdGFydEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdwb3dlcl9mcmVxdWVuY3knLFBvd2VyUGFyc2VyLnByb3RvdHlwZS5wb3dlckZyZXF1ZW5jeUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdjcHVfZnJlcXVlbmN5JyxQb3dlclBhcnNlci5wcm90b3R5cGUuY3B1RnJlcXVlbmN5RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdV9mcmVxdWVuY3lfbGltaXRzJyxQb3dlclBhcnNlci5wcm90b3R5cGUuY3B1RnJlcXVlbmN5TGltaXRzRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ2NwdV9pZGxlJyxQb3dlclBhcnNlci5wcm90b3R5cGUuY3B1SWRsZUV2ZW50LmJpbmQodGhpcykpO30KUG93ZXJQYXJzZXIucHJvdG90eXBlPXtfX3Byb3RvX186UGFyc2VyLnByb3RvdHlwZSxjcHVTdGF0ZVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixldmVudFR5cGUsY3B1U3RhdGUpe2NvbnN0IHRhcmdldENwdT10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlQ3B1KHRhcmdldENwdU51bWJlcik7aWYoZXZlbnRUeXBlIT09JzEnKXt0aGlzLmltcG9ydGVyLm1vZGVsLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidEb25cJ3QgdW5kZXJzdGFuZCBwb3dlcl9zdGFydCBldmVudHMgb2YgJysndHlwZSAnK2V2ZW50VHlwZX0pO3JldHVybjt9CmNvbnN0IHBvd2VyQ291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLCdDLVN0YXRlJyk7aWYocG93ZXJDb3VudGVyLm51bVNlcmllcz09PTApe3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ3N0YXRlJyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcocG93ZXJDb3VudGVyLm5hbWUrJy4nKydzdGF0ZScpKSk7fQpwb3dlckNvdW50ZXIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxjcHVTdGF0ZSk7fSk7fSxjcHVJZGxlU2xpY2UodHMsdGFyZ2V0Q3B1TnVtYmVyLGNwdVN0YXRlKXtjb25zdCB0YXJnZXRDcHU9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUNwdSh0YXJnZXRDcHVOdW1iZXIpO2NvbnN0IHBvd2VyQ291bnRlcj10YXJnZXRDcHUuZ2V0T3JDcmVhdGVDb3VudGVyKCcnLCdDLVN0YXRlJyk7aWYocG93ZXJDb3VudGVyLm51bVNlcmllcz09PTApe3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ3N0YXRlJyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcocG93ZXJDb3VudGVyLm5hbWUpKSk7fQpjb25zdCB2YWw9KGNwdVN0YXRlIT09NDI5NDk2NzI5NT9jcHVTdGF0ZSsxOjApO3Bvd2VyQ291bnRlci5zZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLHZhbCk7fSk7fSxjcHVGcmVxdWVuY3lTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIscG93ZXJTdGF0ZSl7Y29uc3QgdGFyZ2V0Q3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUodGFyZ2V0Q3B1TnVtYmVyKTtjb25zdCBwb3dlckNvdW50ZXI9dGFyZ2V0Q3B1LmdldE9yQ3JlYXRlQ291bnRlcignJywnQ2xvY2sgRnJlcXVlbmN5Jyk7aWYocG93ZXJDb3VudGVyLm51bVNlcmllcz09PTApe3Bvd2VyQ291bnRlci5hZGRTZXJpZXMobmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ3N0YXRlJyxDb2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcocG93ZXJDb3VudGVyLm5hbWUrJy4nKydzdGF0ZScpKSk7fQpwb3dlckNvdW50ZXIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxwb3dlclN0YXRlKTt9KTt9LGNwdUZyZXF1ZW5jeUxpbWl0c1NsaWNlKHRzLHRhcmdldENwdU51bWJlcixtaW5GcmVxLG1heEZyZXEpe2NvbnN0IHRhcmdldENwdT10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlQ3B1KHRhcmdldENwdU51bWJlcik7Y29uc3QgcG93ZXJDb3VudGVyPXRhcmdldENwdS5nZXRPckNyZWF0ZUNvdW50ZXIoJycsJ0Nsb2NrIEZyZXF1ZW5jeSBMaW1pdHMnKTtpZihwb3dlckNvdW50ZXIubnVtU2VyaWVzPT09MCl7cG93ZXJDb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnTWluIEZyZXF1ZW5jeScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHBvd2VyQ291bnRlci5uYW1lKycuJysnTWluIEZyZXF1ZW5jeScpKSk7cG93ZXJDb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnTWF4IEZyZXF1ZW5jeScsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHBvd2VyQ291bnRlci5uYW1lKycuJysnTWF4IEZyZXF1ZW5jeScpKSk7fQpwb3dlckNvdW50ZXIuc2VyaWVzLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtpZihzZXJpZXMubmFtZT09PSdNaW4gRnJlcXVlbmN5Jyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsbWluRnJlcSk7fQppZihzZXJpZXMubmFtZT09PSdNYXggRnJlcXVlbmN5Jyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsbWF4RnJlcSk7fX0pO30scG93ZXJTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3R5cGU9KFxkKykgc3RhdGU9KFxkKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzNdKTtjb25zdCBjcHVTdGF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVTdGF0ZVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixldmVudFsxXSxjcHVTdGF0ZSk7cmV0dXJuIHRydWU7fSxwb3dlckZyZXF1ZW5jeUV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L3R5cGU9KFxkKykgc3RhdGU9KFxkKykgY3B1X2lkPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRhcmdldENwdU51bWJlcj1wYXJzZUludChldmVudFszXSk7Y29uc3QgcG93ZXJTdGF0ZT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVGcmVxdWVuY3lTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIscG93ZXJTdGF0ZSk7cmV0dXJuIHRydWU7fSxjcHVGcmVxdWVuY3lFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9zdGF0ZT0oXGQrKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBwb3dlclN0YXRlPXBhcnNlSW50KGV2ZW50WzFdKTt0aGlzLmNwdUZyZXF1ZW5jeVNsaWNlKHRzLHRhcmdldENwdU51bWJlcixwb3dlclN0YXRlKTtyZXR1cm4gdHJ1ZTt9LGNwdUZyZXF1ZW5jeUxpbWl0c0V2ZW50KGV2ZW50TmFtZSxjcHUscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9L21pbj0oXGQrKSBtYXg9KFxkKykgY3B1X2lkPShcZCspLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRhcmdldENwdU51bWJlcj1wYXJzZUludChldmVudFszXSk7Y29uc3QgbWluRnJlcT1wYXJzZUludChldmVudFsxXSk7Y29uc3QgbWF4RnJlcT1wYXJzZUludChldmVudFsyXSk7dGhpcy5jcHVGcmVxdWVuY3lMaW1pdHNTbGljZSh0cyx0YXJnZXRDcHVOdW1iZXIsbWluRnJlcSxtYXhGcmVxKTtyZXR1cm4gdHJ1ZTt9LGNwdUlkbGVFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9zdGF0ZT0oXGQrKSBjcHVfaWQ9KFxkKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgdGFyZ2V0Q3B1TnVtYmVyPXBhcnNlSW50KGV2ZW50WzJdKTtjb25zdCBjcHVTdGF0ZT1wYXJzZUludChldmVudFsxXSk7dGhpcy5jcHVJZGxlU2xpY2UodHMsdGFyZ2V0Q3B1TnVtYmVyLGNwdVN0YXRlKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoUG93ZXJQYXJzZXIpO3JldHVybntQb3dlclBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gUmVndWxhdG9yUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2VuYWJsZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JFbmFibGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2VuYWJsZV9kZWxheScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JFbmFibGVEZWxheUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdyZWd1bGF0b3JfZW5hYmxlX2NvbXBsZXRlJyxSZWd1bGF0b3JQYXJzZXIucHJvdG90eXBlLnJlZ3VsYXRvckVuYWJsZUNvbXBsZXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9kaXNhYmxlJyxSZWd1bGF0b3JQYXJzZXIucHJvdG90eXBlLnJlZ3VsYXRvckRpc2FibGVFdmVudC5iaW5kKHRoaXMpKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncmVndWxhdG9yX2Rpc2FibGVfY29tcGxldGUnLFJlZ3VsYXRvclBhcnNlci5wcm90b3R5cGUucmVndWxhdG9yRGlzYWJsZUNvbXBsZXRlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9zZXRfdm9sdGFnZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JTZXRWb2x0YWdlRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3JlZ3VsYXRvcl9zZXRfdm9sdGFnZV9jb21wbGV0ZScsUmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZS5yZWd1bGF0b3JTZXRWb2x0YWdlQ29tcGxldGVFdmVudC5iaW5kKHRoaXMpKTt0aGlzLm1vZGVsXz1pbXBvcnRlci5tb2RlbF87fQpjb25zdCByZWd1bGF0b3JFbmFibGVSRT0vbmFtZT0oLispLztjb25zdCByZWd1bGF0b3JEaXNhYmxlUkU9L25hbWU9KC4rKS87Y29uc3QgcmVndWxhdG9yU2V0Vm9sdGFnZUNvbXBsZXRlUkU9L25hbWU9KFxTKyksIHZhbD0oXGQrKS87UmVndWxhdG9yUGFyc2VyLnByb3RvdHlwZT17X19wcm90b19fOlBhcnNlci5wcm90b3R5cGUsZ2V0Q3RyXyhjdHJOYW1lLHZhbHVlTmFtZSl7Y29uc3QgY3RyPXRoaXMubW9kZWxfLmtlcm5lbC5nZXRPckNyZWF0ZUNvdW50ZXIobnVsbCwndnJlZyAnK2N0ck5hbWUrJyAnK3ZhbHVlTmFtZSk7aWYoY3RyLnNlcmllc1swXT09PXVuZGVmaW5lZCl7Y3RyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcyh2YWx1ZU5hbWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGN0ck5hbWUrJy4nK3ZhbHVlTmFtZSkpKTt9CnJldHVybiBjdHI7fSxyZWd1bGF0b3JFbmFibGVFdmVudChldmVudE5hbWUsY3B1TnVtLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXJlZ3VsYXRvckVuYWJsZVJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgbmFtZT1ldmVudFsxXTtjb25zdCBjdHI9dGhpcy5nZXRDdHJfKG5hbWUsJ2VuYWJsZWQnKTtjdHIuc2VyaWVzWzBdLmFkZENvdW50ZXJTYW1wbGUodHMsMSk7cmV0dXJuIHRydWU7fSxyZWd1bGF0b3JFbmFibGVEZWxheUV2ZW50KGV2ZW50TmFtZSxjcHVOdW0scGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRydWU7fSxyZWd1bGF0b3JFbmFibGVDb21wbGV0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW0scGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRydWU7fSxyZWd1bGF0b3JEaXNhYmxlRXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1yZWd1bGF0b3JEaXNhYmxlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBuYW1lPWV2ZW50WzFdO2NvbnN0IGN0cj10aGlzLmdldEN0cl8obmFtZSwnZW5hYmxlZCcpO2N0ci5zZXJpZXNbMF0uYWRkQ291bnRlclNhbXBsZSh0cywwKTtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvckRpc2FibGVDb21wbGV0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW0scGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRydWU7fSxyZWd1bGF0b3JTZXRWb2x0YWdlRXZlbnQoZXZlbnROYW1lLGNwdU51bSxwaWQsdHMsZXZlbnRCYXNlKXtyZXR1cm4gdHJ1ZTt9LHJlZ3VsYXRvclNldFZvbHRhZ2VDb21wbGV0ZUV2ZW50KGV2ZW50TmFtZSxjcHVOdW0scGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9cmVndWxhdG9yU2V0Vm9sdGFnZUNvbXBsZXRlUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBuYW1lPWV2ZW50WzFdO2NvbnN0IHZvbHRhZ2U9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGN0cj10aGlzLmdldEN0cl8obmFtZSwndm9sdGFnZScpO2N0ci5zZXJpZXNbMF0uYWRkQ291bnRlclNhbXBsZSh0cyx2b2x0YWdlKTtyZXR1cm4gdHJ1ZTt9fTtQYXJzZXIucmVnaXN0ZXIoUmVndWxhdG9yUGFyc2VyKTtyZXR1cm57UmVndWxhdG9yUGFyc2VyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYnLGZ1bmN0aW9uKCl7Y29uc3QgUGFyc2VyPXRyLmUuaW1wb3J0ZXIubGludXhfcGVyZi5QYXJzZXI7ZnVuY3Rpb24gUnNzUGFyc2VyKGltcG9ydGVyKXtQYXJzZXIuY2FsbCh0aGlzLGltcG9ydGVyKTtpbXBvcnRlci5yZWdpc3RlckV2ZW50SGFuZGxlcigncnNzX3N0YXQnLFJzc1BhcnNlci5wcm90b3R5cGUucnNzU3RhdC5iaW5kKHRoaXMpKTt9CmNvbnN0IFRlc3RFeHBvcnRzPXt9O2NvbnN0IHJzc1N0YXRSRT1uZXcgUmVnRXhwKCdtZW1iZXI9KFxcZCspIHNpemU9KFxcZCspJyk7VGVzdEV4cG9ydHMucnNzU3RhdFJFPXJzc1N0YXRSRTtjb25zdCB1bmtub3duVGhyZWFkTmFtZT0nPC4uLj4nO1Jzc1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLHJzc1N0YXQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1yc3NTdGF0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBtZW1iZXI9cGFyc2VJbnQoZXZlbnRbMV0pO2NvbnN0IHNpemU9cGFyc2VJbnQoZXZlbnRbMl0pO2lmKGV2ZW50QmFzZS50Z2lkPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2U7fQpjb25zdCB0Z2lkPXBhcnNlSW50KGV2ZW50QmFzZS50Z2lkKTtjb25zdCBwcm9jZXNzPXRoaXMuaW1wb3J0ZXIubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2Vzcyh0Z2lkKTtsZXQgc3ViVGl0bGU9Jyc7aWYobWVtYmVyPT09MCl7c3ViVGl0bGU9JyAoZmlsZSBwYWdlcyknO31lbHNlIGlmKG1lbWJlcj09PTEpe3N1YlRpdGxlPScgKGFub24pJzt9CmNvbnN0IHJzc0NvdW50ZXI9cHJvY2Vzcy5nZXRPckNyZWF0ZUNvdW50ZXIoJ1JTUycsJ1JTUyAnK21lbWJlcitzdWJUaXRsZSk7aWYocnNzQ291bnRlci5udW1TZXJpZXM9PT0wKXtyc3NDb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnUlNTJyx0ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhyc3NDb3VudGVyLm5hbWUpKSk7fQpyc3NDb3VudGVyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsc2l6ZSk7fSk7cmV0dXJuIHRydWU7fSx9O1BhcnNlci5yZWdpc3RlcihSc3NQYXJzZXIpO3JldHVybntSc3NQYXJzZXIsX1Jzc1BhcnNlclRlc3RFeHBvcnRzOlRlc3RFeHBvcnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBQYXJzZXI9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlcjtmdW5jdGlvbiBTY2hlZFBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX3N3aXRjaCcsU2NoZWRQYXJzZXIucHJvdG90eXBlLnNjaGVkU3dpdGNoRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX3dha2V1cCcsU2NoZWRQYXJzZXIucHJvdG90eXBlLnNjaGVkV2FrZXVwRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX2Jsb2NrZWRfcmVhc29uJyxTY2hlZFBhcnNlci5wcm90b3R5cGUuc2NoZWRCbG9ja2VkRXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3NjaGVkX2NwdV9ob3RwbHVnJyxTY2hlZFBhcnNlci5wcm90b3R5cGUuc2NoZWRDcHVIb3RwbHVnRXZlbnQuYmluZCh0aGlzKSk7fQpjb25zdCBUZXN0RXhwb3J0cz17fTtjb25zdCBzY2hlZFN3aXRjaFJFPW5ldyBSZWdFeHAoJ3ByZXZfY29tbT0oLispIHByZXZfcGlkPShcXGQrKSBwcmV2X3ByaW89KFxcZCspICcrJ3ByZXZfc3RhdGU9KFxcU1xcKz98XFxTXFx8XFxTKSA9PT4gJysnbmV4dF9jb21tPSguKykgbmV4dF9waWQ9KFxcZCspIG5leHRfcHJpbz0oXFxkKyknKTtjb25zdCBzY2hlZEJsb2NrZWRSRT1uZXcgUmVnRXhwKCdwaWQ9KFxcZCspIGlvd2FpdD0oXFxkKSBjYWxsZXI9KC4rKScpO1Rlc3RFeHBvcnRzLnNjaGVkU3dpdGNoUkU9c2NoZWRTd2l0Y2hSRTtjb25zdCBzY2hlZFdha2V1cFJFPS9jb21tPSguKykgcGlkPShcZCspIHByaW89KFxkKykoPzogc3VjY2Vzcz1cZCspPyB0YXJnZXRfY3B1PShcZCspLztUZXN0RXhwb3J0cy5zY2hlZFdha2V1cFJFPXNjaGVkV2FrZXVwUkU7Y29uc3QgdW5rbm93blRocmVhZE5hbWU9JzwuLi4+JztTY2hlZFBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLHNjaGVkU3dpdGNoRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1zY2hlZFN3aXRjaFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgcHJldlN0YXRlPWV2ZW50WzRdO2NvbnN0IG5leHRDb21tPWV2ZW50WzVdO2NvbnN0IG5leHRQaWQ9cGFyc2VJbnQoZXZlbnRbNl0pO2NvbnN0IG5leHRQcmlvPXBhcnNlSW50KGV2ZW50WzddKTtpZihldmVudEJhc2UudGdpZCE9PXVuZGVmaW5lZCl7Y29uc3QgdGdpZD1wYXJzZUludChldmVudEJhc2UudGdpZCk7Y29uc3QgcHJvY2Vzcz10aGlzLmltcG9ydGVyLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3ModGdpZCk7Y29uc3Qgc3RvcmVkVGhyZWFkPXByb2Nlc3MuZ2V0VGhyZWFkKHBpZCk7aWYoIXN0b3JlZFRocmVhZCl7Y29uc3QgdGhyZWFkPXByb2Nlc3MuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTt9ZWxzZSBpZihzdG9yZWRUaHJlYWQubmFtZT09PXVua25vd25UaHJlYWROYW1lKXtzdG9yZWRUaHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTt9fQpjb25zdCBuZXh0VGhyZWFkPXRoaXMuaW1wb3J0ZXIudGhyZWFkc0J5TGludXhQaWRbbmV4dFBpZF07bGV0IG5leHROYW1lO2lmKG5leHRUaHJlYWQpe25leHROYW1lPW5leHRUaHJlYWQudXNlckZyaWVuZGx5TmFtZTt9ZWxzZXtuZXh0TmFtZT1uZXh0Q29tbTt9CmNvbnN0IGNwdT10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlQ3B1KGNwdU51bWJlcik7Y3B1LnN3aXRjaEFjdGl2ZVRocmVhZCh0cyx7c3RhdGVXaGVuRGVzY2hlZHVsZWQ6cHJldlN0YXRlfSxuZXh0UGlkLG5leHROYW1lLHtjb21tOm5leHRDb21tLHRpZDpuZXh0UGlkLHByaW86bmV4dFByaW99KTtyZXR1cm4gdHJ1ZTt9LHNjaGVkV2FrZXVwRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1zY2hlZFdha2V1cFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7Y29uc3QgZnJvbVBpZD1waWQ7Y29uc3QgY29tbT1ldmVudFsxXTtwaWQ9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IHByaW89cGFyc2VJbnQoZXZlbnRbM10pO3RoaXMuaW1wb3J0ZXIubWFya1BpZFJ1bm5hYmxlKHRzLHBpZCxjb21tLHByaW8sZnJvbVBpZCk7cmV0dXJuIHRydWU7fSxzY2hlZENwdUhvdHBsdWdFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PS9jcHUgKFxkKykgKC4rKSBlcnJvcj0oXGQrKS8uZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjcHVOdW1iZXI9ZXZlbnRbMV07Y29uc3Qgc3RhdGU9ZXZlbnRbMl07Y29uc3QgdGFyZ2V0Q3B1PXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKTtjb25zdCBwb3dlckNvdW50ZXI9dGFyZ2V0Q3B1LmdldE9yQ3JlYXRlQ291bnRlcignJywnQ3B1IEhvdHBsdWcnKTtpZihwb3dlckNvdW50ZXIubnVtU2VyaWVzPT09MCl7cG93ZXJDb3VudGVyLmFkZFNlcmllcyhuZXcgdHIubW9kZWwuQ291bnRlclNlcmllcygnU3RhdGUnLHRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHBvd2VyQ291bnRlci5uYW1lKycuJysnU3RhdGUnKSkpO30KcG93ZXJDb3VudGVyLnNlcmllcy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7aWYoc2VyaWVzLm5hbWU9PT0nU3RhdGUnKXtzZXJpZXMuYWRkQ291bnRlclNhbXBsZSh0cyxzdGF0ZS5sb2NhbGVDb21wYXJlKCdvZmZsaW5lJyk/MDoxKTt9fSk7cmV0dXJuIHRydWU7fSxzY2hlZEJsb2NrZWRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXNjaGVkQmxvY2tlZFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7cGlkPXBhcnNlSW50KGV2ZW50WzFdKTtjb25zdCBpb3dhaXQ9cGFyc2VJbnQoZXZlbnRbMl0pO2NvbnN0IGNhbGxlcj1ldmVudFszXTt0aGlzLmltcG9ydGVyLmFkZFBpZEJsb2NrZWRSZWFzb24odHMscGlkLGlvd2FpdCxjYWxsZXIpO3JldHVybiB0cnVlO319O1BhcnNlci5yZWdpc3RlcihTY2hlZFBhcnNlcik7cmV0dXJue1NjaGVkUGFyc2VyLF9TY2hlZFBhcnNlclRlc3RFeHBvcnRzOlRlc3RFeHBvcnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIFN5bmNQYXJzZXIoaW1wb3J0ZXIpe1BhcnNlci5jYWxsKHRoaXMsaW1wb3J0ZXIpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdzeW5jX3RpbWVsaW5lJyxTeW5jUGFyc2VyLnByb3RvdHlwZS50aW1lbGluZUV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCdzeW5jX3dhaXQnLFN5bmNQYXJzZXIucHJvdG90eXBlLnN5bmNXYWl0RXZlbnQuYmluZCh0aGlzKSk7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3N5bmNfcHQnLFN5bmNQYXJzZXIucHJvdG90eXBlLnN5bmNQdEV2ZW50LmJpbmQodGhpcykpO3RoaXMubW9kZWxfPWltcG9ydGVyLm1vZGVsXzt9CmNvbnN0IHN5bmNUaW1lbGluZVJFPS9uYW1lPShcUyspIHZhbHVlPShcUyopLztjb25zdCBzeW5jV2FpdFJFPS8oXFMrKSBuYW1lPShcUyspIHN0YXRlPShcZCspLztjb25zdCBzeW5jUHRSRT0vbmFtZT0oXFMrKSB2YWx1ZT0oXFMqKS87U3luY1BhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLHRpbWVsaW5lRXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1zeW5jVGltZWxpbmVSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IHRocmVhZD10aGlzLmltcG9ydGVyLmdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKGV2ZW50WzFdKTtpZih0aHJlYWQubGFzdEFjdGl2ZVRzIT09dW5kZWZpbmVkKXtjb25zdCBkdXJhdGlvbj10cy10aHJlYWQubGFzdEFjdGl2ZVRzO2xldCB2YWx1ZT10aHJlYWQubGFzdEFjdGl2ZVZhbHVlO2lmKHZhbHVlPT09dW5kZWZpbmVkKXZhbHVlPScgJztjb25zdCBzbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkU2xpY2UoJycsdmFsdWUsQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHZhbHVlKSx0aHJlYWQubGFzdEFjdGl2ZVRzLHt9LGR1cmF0aW9uKTt0aHJlYWQudGhyZWFkLnNsaWNlR3JvdXAucHVzaFNsaWNlKHNsaWNlKTt9CnRocmVhZC5sYXN0QWN0aXZlVHM9dHM7dGhyZWFkLmxhc3RBY3RpdmVWYWx1ZT1ldmVudFsyXTtyZXR1cm4gdHJ1ZTt9LHN5bmNXYWl0RXZlbnQoZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtjb25zdCBldmVudD1zeW5jV2FpdFJFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7aWYoZXZlbnRCYXNlLnRnaWQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IHRnaWQ9cGFyc2VJbnQoZXZlbnRCYXNlLnRnaWQpO2NvbnN0IHRocmVhZD10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3ModGdpZCkuZ2V0T3JDcmVhdGVUaHJlYWQocGlkKTt0aHJlYWQubmFtZT1ldmVudEJhc2UudGhyZWFkTmFtZTtjb25zdCBzbGljZXM9dGhyZWFkLmtlcm5lbFNsaWNlR3JvdXA7aWYoIXNsaWNlcy5pc1RpbWVzdGFtcFZhbGlkRm9yQmVnaW5PckVuZCh0cykpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidUaW1lc3RhbXBzIGFyZSBtb3ZpbmcgYmFja3dhcmQuJ30pO3JldHVybiBmYWxzZTt9CmNvbnN0IG5hbWU9J2ZlbmNlX3dhaXQoIicrZXZlbnRbMl0rJyIpJztpZihldmVudFsxXT09PSdiZWdpbicpe2NvbnN0IHNsaWNlPXNsaWNlcy5iZWdpblNsaWNlKG51bGwsbmFtZSx0cyx7J1N0YXJ0IHN0YXRlJzpldmVudFszXX0pO31lbHNlIGlmKGV2ZW50WzFdPT09J2VuZCcpe2lmKHNsaWNlcy5vcGVuU2xpY2VDb3VudD4wKXtzbGljZXMuZW5kU2xpY2UodHMpO319ZWxzZXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9LHN5bmNQdEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuISFzeW5jUHRSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTt9fTtQYXJzZXIucmVnaXN0ZXIoU3luY1BhcnNlcik7cmV0dXJue1N5bmNQYXJzZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIubGludXhfcGVyZicsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFBhcnNlcj10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuUGFyc2VyO2Z1bmN0aW9uIFdvcmtxdWV1ZVBhcnNlcihpbXBvcnRlcil7UGFyc2VyLmNhbGwodGhpcyxpbXBvcnRlcik7aW1wb3J0ZXIucmVnaXN0ZXJFdmVudEhhbmRsZXIoJ3dvcmtxdWV1ZV9leGVjdXRlX3N0YXJ0JyxXb3JrcXVldWVQYXJzZXIucHJvdG90eXBlLmV4ZWN1dGVTdGFydEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd3b3JrcXVldWVfZXhlY3V0ZV9lbmQnLFdvcmtxdWV1ZVBhcnNlci5wcm90b3R5cGUuZXhlY3V0ZUVuZEV2ZW50LmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd3b3JrcXVldWVfcXVldWVfd29yaycsV29ya3F1ZXVlUGFyc2VyLnByb3RvdHlwZS5leGVjdXRlUXVldWVXb3JrLmJpbmQodGhpcykpO2ltcG9ydGVyLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd3b3JrcXVldWVfYWN0aXZhdGVfd29yaycsV29ya3F1ZXVlUGFyc2VyLnByb3RvdHlwZS5leGVjdXRlQWN0aXZhdGVXb3JrLmJpbmQodGhpcykpO30KY29uc3Qgd29ya3F1ZXVlRXhlY3V0ZVN0YXJ0UkU9L3dvcmsgc3RydWN0ICguKyk6IGZ1bmN0aW9uIChcUyspLztjb25zdCB3b3JrcXVldWVFeGVjdXRlRW5kUkU9L3dvcmsgc3RydWN0ICguKykvO1dvcmtxdWV1ZVBhcnNlci5wcm90b3R5cGU9e19fcHJvdG9fXzpQYXJzZXIucHJvdG90eXBlLGV4ZWN1dGVTdGFydEV2ZW50KGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7Y29uc3QgZXZlbnQ9d29ya3F1ZXVlRXhlY3V0ZVN0YXJ0UkUuZXhlYyhldmVudEJhc2UuZGV0YWlscyk7aWYoIWV2ZW50KXJldHVybiBmYWxzZTtjb25zdCBrdGhyZWFkPXRoaXMuaW1wb3J0ZXIuZ2V0T3JDcmVhdGVLZXJuZWxUaHJlYWQoZXZlbnRCYXNlLnRocmVhZE5hbWUscGlkLHBpZCk7a3RocmVhZC5vcGVuU2xpY2VUUz10cztrdGhyZWFkLm9wZW5TbGljZT1ldmVudFsyXTtyZXR1cm4gdHJ1ZTt9LGV4ZWN1dGVFbmRFdmVudChldmVudE5hbWUsY3B1TnVtYmVyLHBpZCx0cyxldmVudEJhc2Upe2NvbnN0IGV2ZW50PXdvcmtxdWV1ZUV4ZWN1dGVFbmRSRS5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpcmV0dXJuIGZhbHNlO2NvbnN0IGt0aHJlYWQ9dGhpcy5pbXBvcnRlci5nZXRPckNyZWF0ZUtlcm5lbFRocmVhZChldmVudEJhc2UudGhyZWFkTmFtZSxwaWQscGlkKTtpZihrdGhyZWFkLm9wZW5TbGljZSl7Y29uc3Qgc2xpY2U9bmV3IHRyLm1vZGVsLlRocmVhZFNsaWNlKCcnLGt0aHJlYWQub3BlblNsaWNlLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhrdGhyZWFkLm9wZW5TbGljZSksa3RocmVhZC5vcGVuU2xpY2VUUyx7fSx0cy1rdGhyZWFkLm9wZW5TbGljZVRTKTtrdGhyZWFkLnRocmVhZC5zbGljZUdyb3VwLnB1c2hTbGljZShzbGljZSk7fQprdGhyZWFkLm9wZW5TbGljZT11bmRlZmluZWQ7cmV0dXJuIHRydWU7fSxleGVjdXRlUXVldWVXb3JrKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRydWU7fSxleGVjdXRlQWN0aXZhdGVXb3JrKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSl7cmV0dXJuIHRydWU7fX07UGFyc2VyLnJlZ2lzdGVyKFdvcmtxdWV1ZVBhcnNlcik7cmV0dXJue1dvcmtxdWV1ZVBhcnNlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5saW51eF9wZXJmJyxmdW5jdGlvbigpe2NvbnN0IE1PTk9UT05JQ19UT19GVFJBQ0VfR0xPQkFMX1NZTkNfSUQ9J2xpbnV4X2Nsb2NrX21vbm90b25pY190b19mdHJhY2VfZ2xvYmFsJztjb25zdCBJTVBPUlRfUFJJT1JJVFk9MjtmdW5jdGlvbiBGVHJhY2VJbXBvcnRlcihtb2RlbCxldmVudHMpe3RoaXMuaW1wb3J0UHJpb3JpdHk9SU1QT1JUX1BSSU9SSVRZO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuZXZlbnRzXz1ldmVudHM7dGhpcy53YWtldXBzXz1bXTt0aGlzLmJsb2NrZWRSZWFzb25zXz1bXTt0aGlzLmtlcm5lbFRocmVhZFN0YXRlc189e307dGhpcy5idWlsZE1hcEZyb21MaW51eFBpZHNUb1RocmVhZHNfKCk7dGhpcy5saW5lc189W107dGhpcy5wc2V1ZG9UaHJlYWRDb3VudGVyPTE7dGhpcy5wYXJzZXJzXz1bXTt0aGlzLmV2ZW50SGFuZGxlcnNfPXt9O3RoaXMuaGF2ZUNsb2NrU3luY2VkTW9ub3RvbmljVG9HbG9iYWxfPWZhbHNlO3RoaXMuY2xvY2tEb21haW5JZF89dHIubW9kZWwuQ2xvY2tEb21haW5JZC5MSU5VWF9GVFJBQ0VfR0xPQkFMO30KY29uc3QgVGVzdEV4cG9ydHM9e307Y29uc3QgbGluZVJFV2l0aFRHSUQ9bmV3IFJlZ0V4cCgnXlxccyooLispLShcXGQrKVxccytcXChcXHMqKFxcZCt8LSspXFwpXFxzXFxbKFxcZCspXFxdJysnXFxzK1tkWC5dW05ucC5dW0hocy5dWzAtOWEtZi5dJysnXFxzKyhcXGQrXFwuXFxkKyk6XFxzKyhcXFMrKTpcXHMoLiopJCcpO2NvbnN0IGxpbmVQYXJzZXJXaXRoVEdJRD1mdW5jdGlvbihsaW5lKXtjb25zdCBncm91cHM9bGluZVJFV2l0aFRHSUQuZXhlYyhsaW5lKTtpZighZ3JvdXBzKXJldHVybiBncm91cHM7bGV0IHRnaWQ9Z3JvdXBzWzNdO2lmKHRnaWRbMF09PT0nLScpdGdpZD11bmRlZmluZWQ7cmV0dXJue3RocmVhZE5hbWU6Z3JvdXBzWzFdLHBpZDpncm91cHNbMl0sdGdpZCxjcHVOdW1iZXI6Z3JvdXBzWzRdLHRpbWVzdGFtcDpncm91cHNbNV0sZXZlbnROYW1lOmdyb3Vwc1s2XSxkZXRhaWxzOmdyb3Vwc1s3XX07fTtUZXN0RXhwb3J0cy5saW5lUGFyc2VyV2l0aFRHSUQ9bGluZVBhcnNlcldpdGhUR0lEO2NvbnN0IGxpbmVSRVdpdGhJUlFJbmZvPW5ldyBSZWdFeHAoJ15cXHMqKC4rKS0oXFxkKylcXHMrXFxbKFxcZCspXFxdJysnXFxzK1tkWC5dW05ucC5dW0hocy5dWzAtOWEtZi5dJysnXFxzKyhcXGQrXFwuXFxkKyk6XFxzKyhcXFMrKTpcXHMoLiopJCcpO2NvbnN0IGxpbmVQYXJzZXJXaXRoSVJRSW5mbz1mdW5jdGlvbihsaW5lKXtjb25zdCBncm91cHM9bGluZVJFV2l0aElSUUluZm8uZXhlYyhsaW5lKTtpZighZ3JvdXBzKXJldHVybiBncm91cHM7cmV0dXJue3RocmVhZE5hbWU6Z3JvdXBzWzFdLHBpZDpncm91cHNbMl0sY3B1TnVtYmVyOmdyb3Vwc1szXSx0aW1lc3RhbXA6Z3JvdXBzWzRdLGV2ZW50TmFtZTpncm91cHNbNV0sZGV0YWlsczpncm91cHNbNl19O307VGVzdEV4cG9ydHMubGluZVBhcnNlcldpdGhJUlFJbmZvPWxpbmVQYXJzZXJXaXRoSVJRSW5mbztjb25zdCBsaW5lUkVXaXRoTGVnYWN5Rm10PS9eXHMqKC4rKS0oXGQrKVxzK1xbKFxkKylcXVxzKihcZCtcLlxkKyk6XHMrKFxTKyk6XHMoLiopJC87Y29uc3QgbGluZVBhcnNlcldpdGhMZWdhY3lGbXQ9ZnVuY3Rpb24obGluZSl7Y29uc3QgZ3JvdXBzPWxpbmVSRVdpdGhMZWdhY3lGbXQuZXhlYyhsaW5lKTtpZighZ3JvdXBzKXtyZXR1cm4gZ3JvdXBzO30KcmV0dXJue3RocmVhZE5hbWU6Z3JvdXBzWzFdLHBpZDpncm91cHNbMl0sY3B1TnVtYmVyOmdyb3Vwc1szXSx0aW1lc3RhbXA6Z3JvdXBzWzRdLGV2ZW50TmFtZTpncm91cHNbNV0sZGV0YWlsczpncm91cHNbNl19O307VGVzdEV4cG9ydHMubGluZVBhcnNlcldpdGhMZWdhY3lGbXQ9bGluZVBhcnNlcldpdGhMZWdhY3lGbXQ7Y29uc3QgdHJhY2VFdmVudENsb2NrU3luY1JFPS90cmFjZV9ldmVudF9jbG9ja19zeW5jOiBwYXJlbnRfdHM9KFxkK1wuP1xkKikvO1Rlc3RFeHBvcnRzLnRyYWNlRXZlbnRDbG9ja1N5bmNSRT10cmFjZUV2ZW50Q2xvY2tTeW5jUkU7Y29uc3QgcmVhbFRpbWVDbG9ja1N5bmNSRT0vdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogcmVhbHRpbWVfdHM9KFxkKykvO2NvbnN0IGdlbmVyaWNDbG9ja1N5bmNSRT0vdHJhY2VfZXZlbnRfY2xvY2tfc3luYzogbmFtZT0oW1x3XC1dKykvO2NvbnN0IHBzZXVkb0tlcm5lbFBJRD0wO2Z1bmN0aW9uIGF1dG9EZXRlY3RMaW5lUGFyc2VyKGxpbmUpe2lmKGxpbmVbMF09PT0neycpcmV0dXJuIGZhbHNlO2lmKGxpbmVSRVdpdGhUR0lELnRlc3QobGluZSkpcmV0dXJuIGxpbmVQYXJzZXJXaXRoVEdJRDtpZihsaW5lUkVXaXRoSVJRSW5mby50ZXN0KGxpbmUpKXJldHVybiBsaW5lUGFyc2VyV2l0aElSUUluZm87aWYobGluZVJFV2l0aExlZ2FjeUZtdC50ZXN0KGxpbmUpKXJldHVybiBsaW5lUGFyc2VyV2l0aExlZ2FjeUZtdDtyZXR1cm4gdW5kZWZpbmVkO30KVGVzdEV4cG9ydHMuYXV0b0RldGVjdExpbmVQYXJzZXI9YXV0b0RldGVjdExpbmVQYXJzZXI7RlRyYWNlSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50cyl7aWYoZXZlbnRzIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbSlldmVudHM9ZXZlbnRzLmhlYWRlcjtpZighKHR5cGVvZihldmVudHMpPT09J3N0cmluZyd8fGV2ZW50cyBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9CmlmKEZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlSFRNTChldmVudHMsZmFsc2UpLm9rKXtyZXR1cm4gdHJ1ZTt9CmlmKEZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlTXVsdGlIVE1MKGV2ZW50cyxmYWxzZSkub2spe3JldHVybiB0cnVlO30KaWYoL14jIHRyYWNlcjovLnRlc3QoZXZlbnRzKSlyZXR1cm4gdHJ1ZTtjb25zdCBsaW5lQnJlYWtJbmRleD1ldmVudHMuaW5kZXhPZignXG4nKTtpZihsaW5lQnJlYWtJbmRleD4tMSlldmVudHM9ZXZlbnRzLnN1YnN0cmluZygwLGxpbmVCcmVha0luZGV4KTtpZihhdXRvRGV0ZWN0TGluZVBhcnNlcihldmVudHMpKXJldHVybiB0cnVlO3JldHVybiBmYWxzZTt9O0ZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlSFRNTD1mdW5jdGlvbihpbmNvbWluZ0V2ZW50cyxwcm9kdWNlUmVzdWx0KXtjb25zdCBmYWlsdXJlPXtvazpmYWxzZX07aWYocHJvZHVjZVJlc3VsdD09PXVuZGVmaW5lZClwcm9kdWNlUmVzdWx0PXRydWU7Y29uc3QgaGVhZGVyPWluY29taW5nRXZlbnRzIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbT9pbmNvbWluZ0V2ZW50cy5oZWFkZXI6aW5jb21pbmdFdmVudHM7aWYoIS9ePCFET0NUWVBFIGh0bWw+Ly50ZXN0KGhlYWRlcikpcmV0dXJuIGZhaWx1cmU7Y29uc3Qgcj1uZXcgdHIuaW1wb3J0ZXIuU2ltcGxlTGluZVJlYWRlcihpbmNvbWluZ0V2ZW50cyk7aWYoIXIuYWR2YW5jZVRvTGluZU1hdGNoaW5nKC9eICA8c2NyaXB0PiQvKSlyZXR1cm4gZmFpbHVyZTtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL14gIHZhciBsaW51eFBlcmZEYXRhID0gIlxcJC8pKXJldHVybiBmYWlsdXJlO2NvbnN0IGV2ZW50c0JlZ2luQXRMaW5lPXIuY3VyTGluZU51bWJlcisxO3IuYmVnaW5TYXZpbmdMaW5lcygpO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXiAgPFwvc2NyaXB0PiQvKSlyZXR1cm4gZmFpbHVyZTtsZXQgcmF3RXZlbnRzPXIuZW5kU2F2aW5nTGluZXNBbmRHZXRSZXN1bHQoKTtyYXdFdmVudHM9cmF3RXZlbnRzLnNsaWNlKDEscmF3RXZlbnRzLmxlbmd0aC0xKTtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL148XC9ib2R5PiQvKSlyZXR1cm4gZmFpbHVyZTtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL148XC9odG1sPiQvKSlyZXR1cm4gZmFpbHVyZTtmdW5jdGlvbiBlbmRzV2l0aChzdHIsc3VmZml4KXtyZXR1cm4gc3RyLmluZGV4T2Yoc3VmZml4LHN0ci5sZW5ndGgtc3VmZml4Lmxlbmd0aCkhPT0tMTt9CmZ1bmN0aW9uIHN0cmlwU3VmZml4KHN0cixzdWZmaXgpe2lmKCFlbmRzV2l0aChzdHIsc3VmZml4KSlyZXR1cm4gc3RyO3JldHVybiBzdHIuc3Vic3RyaW5nKHN0cixzdHIubGVuZ3RoLXN1ZmZpeC5sZW5ndGgpO30KbGV0IGV2ZW50cz1bXTtpZihwcm9kdWNlUmVzdWx0KXtmb3IobGV0IGk9MDtpPHJhd0V2ZW50cy5sZW5ndGg7aSsrKXtsZXQgZXZlbnQ9cmF3RXZlbnRzW2ldO2V2ZW50PXN0cmlwU3VmZml4KGV2ZW50LCdcXG5cXCcpO2V2ZW50cy5wdXNoKGV2ZW50KTt9fWVsc2V7ZXZlbnRzPVtyYXdFdmVudHNbcmF3RXZlbnRzLmxlbmd0aC0xXV07fQpjb25zdCBvbGRMYXN0RXZlbnQ9ZXZlbnRzW2V2ZW50cy5sZW5ndGgtMV07Y29uc3QgbmV3TGFzdEV2ZW50PXN0cmlwU3VmZml4KG9sZExhc3RFdmVudCwnXFxuIjsnKTtpZihuZXdMYXN0RXZlbnQ9PT1vbGRMYXN0RXZlbnQpcmV0dXJuIGZhaWx1cmU7ZXZlbnRzW2V2ZW50cy5sZW5ndGgtMV09bmV3TGFzdEV2ZW50O3JldHVybntvazp0cnVlLGxpbmVzOnByb2R1Y2VSZXN1bHQ/ZXZlbnRzOnVuZGVmaW5lZCxldmVudHNCZWdpbkF0TGluZX07fTtGVHJhY2VJbXBvcnRlci5fZXh0cmFjdEV2ZW50c0Zyb21TeXN0cmFjZU11bHRpSFRNTD1mdW5jdGlvbihpbmNvbWluZ0V2ZW50cyxwcm9kdWNlUmVzdWx0KXtjb25zdCBmYWlsdXJlPXtvazpmYWxzZX07aWYocHJvZHVjZVJlc3VsdD09PXVuZGVmaW5lZClwcm9kdWNlUmVzdWx0PXRydWU7Y29uc3QgaGVhZGVyPWluY29taW5nRXZlbnRzIGluc3RhbmNlb2YgdHIuYi5UcmFjZVN0cmVhbT9pbmNvbWluZ0V2ZW50cy5oZWFkZXI6aW5jb21pbmdFdmVudHM7aWYoIShuZXcgUmVnRXhwKCdePCFET0NUWVBFIEhUTUw+JywnaScpLnRlc3QoaGVhZGVyKSkpcmV0dXJuIGZhaWx1cmU7Y29uc3Qgcj1uZXcgdHIuaW1wb3J0ZXIuU2ltcGxlTGluZVJlYWRlcihpbmNvbWluZ0V2ZW50cyk7bGV0IGV2ZW50cz1bXTtsZXQgZXZlbnRzQmVnaW5BdExpbmU7d2hpbGUoIS9eIyB0cmFjZXI6Ly50ZXN0KGV2ZW50cykpe2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXiAgPHNjcmlwdCBjbGFzcz0idHJhY2UtZGF0YSIgdHlwZT0iYXBwbGljYXRpb25cL3RleHQiPiQvKSl7cmV0dXJuIGZhaWx1cmU7fQpldmVudHNCZWdpbkF0TGluZT1yLmN1ckxpbmVOdW1iZXIrMTtyLmJlZ2luU2F2aW5nTGluZXMoKTtpZighci5hZHZhbmNlVG9MaW5lTWF0Y2hpbmcoL14gIDxcL3NjcmlwdD4kLykpcmV0dXJuIGZhaWx1cmU7ZXZlbnRzPXIuZW5kU2F2aW5nTGluZXNBbmRHZXRSZXN1bHQoKTtldmVudHM9ZXZlbnRzLnNsaWNlKDEsZXZlbnRzLmxlbmd0aC0xKTt9CmlmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXjxcL2JvZHk+JC8pKXJldHVybiBmYWlsdXJlO2lmKCFyLmFkdmFuY2VUb0xpbmVNYXRjaGluZygvXjxcL2h0bWw+JC8pKXJldHVybiBmYWlsdXJlO3JldHVybntvazp0cnVlLGxpbmVzOnByb2R1Y2VSZXN1bHQ/ZXZlbnRzOnVuZGVmaW5lZCxldmVudHNCZWdpbkF0TGluZSx9O307RlRyYWNlSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRlRyYWNlSW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30saW1wb3J0Q2xvY2tTeW5jTWFya2Vycygpe3RoaXMubGF6eUluaXRfKCk7dGhpcy5mb3JFYWNoTGluZV8oZnVuY3Rpb24odGV4dCxldmVudEJhc2UsY3B1TnVtYmVyLHBpZCx0cyl7Y29uc3QgZXZlbnROYW1lPWV2ZW50QmFzZS5ldmVudE5hbWU7aWYoZXZlbnROYW1lIT09J3RyYWNpbmdfbWFya193cml0ZScmJmV2ZW50TmFtZSE9PScwJylyZXR1cm47aWYodHJhY2VFdmVudENsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpfHxnZW5lcmljQ2xvY2tTeW5jUkUuZXhlYyhldmVudEJhc2UuZGV0YWlscykpe3RoaXMudHJhY2VDbG9ja1N5bmNFdmVudF8oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKTt9ZWxzZSBpZihyZWFsVGltZUNsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpKXtjb25zdCBtYXRjaD1yZWFsVGltZUNsb2NrU3luY1JFLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO3RoaXMubW9kZWxfLnJlYWx0aW1lX3RvX21vbm90b25pY19vZmZzZXRfbXM9dHMtbWF0Y2hbMV07fX0uYmluZCh0aGlzKSk7fSxpbXBvcnRFdmVudHMoKXtpZih0aGlzLmxpbmVzXy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBtb2RlbFRpbWVUcmFuc2Zvcm1lcj10aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmdldE1vZGVsVGltZVRyYW5zZm9ybWVyKHRoaXMuY2xvY2tEb21haW5JZF8pO3RoaXMuaW1wb3J0Q3B1RGF0YV8obW9kZWxUaW1lVHJhbnNmb3JtZXIpO3RoaXMuYnVpbGRNYXBGcm9tTGludXhQaWRzVG9UaHJlYWRzXygpO3RoaXMuYnVpbGRQZXJUaHJlYWRDcHVTbGljZXNGcm9tQ3B1U3RhdGVfKCk7fSxyZWdpc3RlckV2ZW50SGFuZGxlcihldmVudE5hbWUsaGFuZGxlcil7dGhpcy5ldmVudEhhbmRsZXJzX1tldmVudE5hbWVdPWhhbmRsZXI7fSxnZXRPckNyZWF0ZUNwdShjcHVOdW1iZXIpe3JldHVybiB0aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDcHUoY3B1TnVtYmVyKTt9LGdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKGtlcm5lbFRocmVhZE5hbWUscGlkLHRpZCl7aWYoIXRoaXMua2VybmVsVGhyZWFkU3RhdGVzX1trZXJuZWxUaHJlYWROYW1lXSl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7dGhyZWFkLm5hbWU9a2VybmVsVGhyZWFkTmFtZTt0aGlzLmtlcm5lbFRocmVhZFN0YXRlc19ba2VybmVsVGhyZWFkTmFtZV09e3BpZCx0aHJlYWQsb3BlblNsaWNlOnVuZGVmaW5lZCxvcGVuU2xpY2VUUzp1bmRlZmluZWR9O3RoaXMudGhyZWFkc0J5TGludXhQaWRbdGlkXT10aHJlYWQ7fQpyZXR1cm4gdGhpcy5rZXJuZWxUaHJlYWRTdGF0ZXNfW2tlcm5lbFRocmVhZE5hbWVdO30sZ2V0T3JDcmVhdGVCaW5kZXJLZXJuZWxUaHJlYWQoa2VybmVsVGhyZWFkTmFtZSxwaWQsdGlkKXtjb25zdCBrZXk9a2VybmVsVGhyZWFkTmFtZStwaWQrdGlkO2lmKCF0aGlzLmtlcm5lbFRocmVhZFN0YXRlc19ba2V5XSl7Y29uc3QgdGhyZWFkPXRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhwaWQpLmdldE9yQ3JlYXRlVGhyZWFkKHRpZCk7dGhyZWFkLm5hbWU9a2VybmVsVGhyZWFkTmFtZTt0aGlzLmtlcm5lbFRocmVhZFN0YXRlc19ba2V5XT17cGlkLHRocmVhZCxvcGVuU2xpY2U6dW5kZWZpbmVkLG9wZW5TbGljZVRTOnVuZGVmaW5lZH07dGhpcy50aHJlYWRzQnlMaW51eFBpZFt0aWRdPXRocmVhZDt9CnJldHVybiB0aGlzLmtlcm5lbFRocmVhZFN0YXRlc19ba2V5XTt9LGdldE9yQ3JlYXRlUHNldWRvVGhyZWFkKHRocmVhZE5hbWUpe2xldCB0aHJlYWQ9dGhpcy5rZXJuZWxUaHJlYWRTdGF0ZXNfW3RocmVhZE5hbWVdO2lmKCF0aHJlYWQpe3RocmVhZD10aGlzLmdldE9yQ3JlYXRlS2VybmVsVGhyZWFkKHRocmVhZE5hbWUscHNldWRvS2VybmVsUElELHRoaXMucHNldWRvVGhyZWFkQ291bnRlcik7dGhpcy5wc2V1ZG9UaHJlYWRDb3VudGVyKys7fQpyZXR1cm4gdGhyZWFkO30sbWFya1BpZFJ1bm5hYmxlKHRzLHBpZCxjb21tLHByaW8sZnJvbVBpZCl7dGhpcy53YWtldXBzXy5wdXNoKHt0cyx0aWQ6cGlkLGZyb21UaWQ6ZnJvbVBpZH0pO30sYWRkUGlkQmxvY2tlZFJlYXNvbih0cyxwaWQsaW93YWl0LGNhbGxlcil7dGhpcy5ibG9ja2VkUmVhc29uc18ucHVzaCh7dHMsdGlkOnBpZCxpb3dhaXQsY2FsbGVyfSk7fSxidWlsZE1hcEZyb21MaW51eFBpZHNUb1RocmVhZHNfKCl7dGhpcy50aHJlYWRzQnlMaW51eFBpZD17fTt0aGlzLm1vZGVsXy5nZXRBbGxUaHJlYWRzKCkuZm9yRWFjaChmdW5jdGlvbih0aHJlYWQpe3RoaXMudGhyZWFkc0J5TGludXhQaWRbdGhyZWFkLnRpZF09dGhyZWFkO30uYmluZCh0aGlzKSk7fSxidWlsZFBlclRocmVhZENwdVNsaWNlc0Zyb21DcHVTdGF0ZV8oKXtjb25zdCBTQ0hFRFVMSU5HX1NUQVRFPXRyLm1vZGVsLlNDSEVEVUxJTkdfU1RBVEU7Zm9yKGNvbnN0IGNwdU51bWJlciBpbiB0aGlzLm1vZGVsXy5rZXJuZWwuY3B1cyl7Y29uc3QgY3B1PXRoaXMubW9kZWxfLmtlcm5lbC5jcHVzW2NwdU51bWJlcl07Zm9yKGxldCBpPTA7aTxjcHUuc2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IGNwdVNsaWNlPWNwdS5zbGljZXNbaV07Y29uc3QgdGhyZWFkPXRoaXMudGhyZWFkc0J5TGludXhQaWRbY3B1U2xpY2UuYXJncy50aWRdO2lmKCF0aHJlYWQpY29udGludWU7Y3B1U2xpY2UudGhyZWFkVGhhdFdhc1J1bm5pbmc9dGhyZWFkO2lmKCF0aHJlYWQudGVtcENwdVNsaWNlcyl7dGhyZWFkLnRlbXBDcHVTbGljZXM9W107fQp0aHJlYWQudGVtcENwdVNsaWNlcy5wdXNoKGNwdVNsaWNlKTt9fQpmb3IoY29uc3QgaSBpbiB0aGlzLndha2V1cHNfKXtjb25zdCB3YWtldXA9dGhpcy53YWtldXBzX1tpXTtjb25zdCB0aHJlYWQ9dGhpcy50aHJlYWRzQnlMaW51eFBpZFt3YWtldXAudGlkXTtpZighdGhyZWFkKWNvbnRpbnVlO3RocmVhZC50ZW1wV2FrZXVwcz10aHJlYWQudGVtcFdha2V1cHN8fFtdO3RocmVhZC50ZW1wV2FrZXVwcy5wdXNoKHdha2V1cCk7fQpmb3IoY29uc3QgaSBpbiB0aGlzLmJsb2NrZWRSZWFzb25zXyl7Y29uc3QgcmVhc29uPXRoaXMuYmxvY2tlZFJlYXNvbnNfW2ldO2NvbnN0IHRocmVhZD10aGlzLnRocmVhZHNCeUxpbnV4UGlkW3JlYXNvbi50aWRdO2lmKCF0aHJlYWQpY29udGludWU7dGhyZWFkLnRlbXBCbG9ja2VkUmVhc29ucz10aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zfHxbXTt0aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zLnB1c2gocmVhc29uKTt9CnRoaXMubW9kZWxfLmdldEFsbFRocmVhZHMoKS5mb3JFYWNoKGZ1bmN0aW9uKHRocmVhZCl7aWYodGhyZWFkLnRlbXBDcHVTbGljZXM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IG9yaWdTbGljZXM9dGhyZWFkLnRlbXBDcHVTbGljZXM7ZGVsZXRlIHRocmVhZC50ZW1wQ3B1U2xpY2VzO29yaWdTbGljZXMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fSk7Y29uc3Qgd2FrZXVwcz10aHJlYWQudGVtcFdha2V1cHN8fFtdO2RlbGV0ZSB0aHJlYWQudGVtcFdha2V1cHM7d2FrZXVwcy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHgudHMteS50czt9KTtjb25zdCByZWFzb25zPXRocmVhZC50ZW1wQmxvY2tlZFJlYXNvbnN8fFtdO2RlbGV0ZSB0aHJlYWQudGVtcEJsb2NrZWRSZWFzb25zO3JlYXNvbnMuc29ydChmdW5jdGlvbih4LHkpe3JldHVybiB4LnRzLXkudHM7fSk7Y29uc3Qgc2xpY2VzPVtdO2lmKG9yaWdTbGljZXMubGVuZ3RoKXtjb25zdCBzbGljZT1vcmlnU2xpY2VzWzBdO2lmKHdha2V1cHMubGVuZ3RoJiZ3YWtldXBzWzBdLnRzPHNsaWNlLnN0YXJ0KXtjb25zdCB3YWtldXA9d2FrZXVwcy5zaGlmdCgpO2NvbnN0IHdha2V1cER1cmF0aW9uPXNsaWNlLnN0YXJ0LXdha2V1cC50cztjb25zdCBhcmdzPXsnd2FrZXVwIGZyb20gdGlkJzp3YWtldXAuZnJvbVRpZH07c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5SVU5OQUJMRSwnJyx3YWtldXAudHMsYXJncyx3YWtldXBEdXJhdGlvbikpO30KY29uc3QgcnVubmluZ1NsaWNlPW5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuUlVOTklORywnJyxzbGljZS5zdGFydCx7fSxzbGljZS5kdXJhdGlvbik7cnVubmluZ1NsaWNlLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nPXNsaWNlLmNwdTtzbGljZXMucHVzaChydW5uaW5nU2xpY2UpO30KZm9yKGxldCBpPTE7aTxvcmlnU2xpY2VzLmxlbmd0aDtpKyspe2xldCB3YWtldXA9dW5kZWZpbmVkO2NvbnN0IHByZXZTbGljZT1vcmlnU2xpY2VzW2ktMV07Y29uc3QgbmV4dFNsaWNlPW9yaWdTbGljZXNbaV07bGV0IG1pZER1cmF0aW9uPW5leHRTbGljZS5zdGFydC1wcmV2U2xpY2UuZW5kO3doaWxlKHdha2V1cHMubGVuZ3RoJiZ3YWtldXBzWzBdLnRzPG5leHRTbGljZS5zdGFydCl7Y29uc3Qgdz13YWtldXBzLnNoaWZ0KCk7aWYod2FrZXVwPT09dW5kZWZpbmVkJiZ3LnRzPnByZXZTbGljZS5lbmQpe3dha2V1cD13O319CmxldCBibG9ja2VkUmVhc29uPXVuZGVmaW5lZDt3aGlsZShyZWFzb25zLmxlbmd0aCYmcmVhc29uc1swXS50czxwcmV2U2xpY2UuZW5kKXtjb25zdCByPXJlYXNvbnMuc2hpZnQoKTt9CmlmKHdha2V1cCE9PXVuZGVmaW5lZCYmcmVhc29ucy5sZW5ndGgmJnJlYXNvbnNbMF0udHM8d2FrZXVwLnRzKXtibG9ja2VkUmVhc29uPXJlYXNvbnMuc2hpZnQoKTt9CmNvbnN0IHB1c2hTbGVlcD1mdW5jdGlvbihzdGF0ZSl7aWYod2FrZXVwIT09dW5kZWZpbmVkKXttaWREdXJhdGlvbj13YWtldXAudHMtcHJldlNsaWNlLmVuZDt9CmlmKGJsb2NrZWRSZWFzb24hPT11bmRlZmluZWQpe2NvbnN0IGFyZ3M9eydrZXJuZWwgY2FsbHNpdGUgd2hlbiBibG9ja2VkOic6YmxvY2tlZFJlYXNvbi5jYWxsZXJ9O2lmKGJsb2NrZWRSZWFzb24uaW93YWl0KXtzd2l0Y2goc3RhdGUpe2Nhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVA6c3RhdGU9U0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfSU87YnJlYWs7Y2FzZSBTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtFX0tJTEw6c3RhdGU9U0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfV0FLRV9LSUxMX0lPO2JyZWFrO2Nhc2UgU0NIRURVTElOR19TVEFURS5VTklOVFJfU0xFRVBfV0FLSU5HOnN0YXRlPVNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQX1dBS0VfS0lMTF9JTzticmVhaztkZWZhdWx0On19CnNsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLHN0YXRlLCcnLHByZXZTbGljZS5lbmQsYXJncyxtaWREdXJhdGlvbikpO31lbHNle3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLHN0YXRlLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9CmlmKHdha2V1cCE9PXVuZGVmaW5lZCl7Y29uc3Qgd2FrZXVwRHVyYXRpb249bmV4dFNsaWNlLnN0YXJ0LXdha2V1cC50cztjb25zdCBhcmdzPXsnd2FrZXVwIGZyb20gdGlkJzp3YWtldXAuZnJvbVRpZH07c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5SVU5OQUJMRSwnJyx3YWtldXAudHMsYXJncyx3YWtldXBEdXJhdGlvbikpO3dha2V1cD11bmRlZmluZWQ7fX07aWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nUycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlNMRUVQSU5HKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdSJ3x8cHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nUisnKXtzbGljZXMucHVzaChuZXcgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKHRocmVhZCxTQ0hFRFVMSU5HX1NUQVRFLlJVTk5BQkxFLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdEJyl7cHVzaFNsZWVwKFNDSEVEVUxJTkdfU1RBVEUuVU5JTlRSX1NMRUVQKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdUJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5TVE9QUEVELCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSd0Jyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5ERUJVRywnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7fWVsc2UgaWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nWicpe3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuWk9NQklFLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdYJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5FWElUX0RFQUQsJycscHJldlNsaWNlLmVuZCx7fSxtaWREdXJhdGlvbikpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J3gnKXtzbGljZXMucHVzaChuZXcgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKHRocmVhZCxTQ0hFRFVMSU5HX1NUQVRFLlRBU0tfREVBRCwnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7fWVsc2UgaWYocHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWQ9PT0nSycpe3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuV0FLRV9LSUxMLCcnLHByZXZTbGljZS5lbmQse30sbWlkRHVyYXRpb24pKTt9ZWxzZSBpZihwcmV2U2xpY2UuYXJncy5zdGF0ZVdoZW5EZXNjaGVkdWxlZD09PSdXJyl7c2xpY2VzLnB1c2gobmV3IHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSh0aHJlYWQsU0NIRURVTElOR19TVEFURS5XQUtJTkcsJycscHJldlNsaWNlLmVuZCx7fSxtaWREdXJhdGlvbikpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J0R8Sycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtFX0tJTEwpO31lbHNlIGlmKHByZXZTbGljZS5hcmdzLnN0YXRlV2hlbkRlc2NoZWR1bGVkPT09J0R8Vycpe3B1c2hTbGVlcChTQ0hFRFVMSU5HX1NUQVRFLlVOSU5UUl9TTEVFUF9XQUtJTkcpO31lbHNle3NsaWNlcy5wdXNoKG5ldyB0ci5tb2RlbC5UaHJlYWRUaW1lU2xpY2UodGhyZWFkLFNDSEVEVUxJTkdfU1RBVEUuVU5LTk9XTiwnJyxwcmV2U2xpY2UuZW5kLHt9LG1pZER1cmF0aW9uKSk7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBzbGVlcCBzdGF0ZTogJysKcHJldlNsaWNlLmFyZ3Muc3RhdGVXaGVuRGVzY2hlZHVsZWR9KTt9CmNvbnN0IHJ1bm5pbmdTbGljZT1uZXcgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKHRocmVhZCxTQ0hFRFVMSU5HX1NUQVRFLlJVTk5JTkcsJycsbmV4dFNsaWNlLnN0YXJ0LHt9LG5leHRTbGljZS5kdXJhdGlvbik7cnVubmluZ1NsaWNlLmNwdU9uV2hpY2hUaHJlYWRXYXNSdW5uaW5nPXByZXZTbGljZS5jcHU7c2xpY2VzLnB1c2gocnVubmluZ1NsaWNlKTt9CnRocmVhZC50aW1lU2xpY2VzPXNsaWNlczt9LHRoaXMpO30sY3JlYXRlUGFyc2Vyc18oKXtjb25zdCBhbGxUeXBlSW5mb3M9dHIuZS5pbXBvcnRlci5saW51eF9wZXJmLlBhcnNlci5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCk7Y29uc3QgcGFyc2Vycz1hbGxUeXBlSW5mb3MubWFwKGZ1bmN0aW9uKHR5cGVJbmZvKXtyZXR1cm4gbmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKHRoaXMpO30sdGhpcyk7cmV0dXJuIHBhcnNlcnM7fSxyZWdpc3RlckRlZmF1bHRIYW5kbGVyc18oKXt0aGlzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCd0cmFjaW5nX21hcmtfd3JpdGUnLEZUcmFjZUltcG9ydGVyLnByb3RvdHlwZS50cmFjZU1hcmtpbmdXcml0ZUV2ZW50Xy5iaW5kKHRoaXMpKTt0aGlzLnJlZ2lzdGVyRXZlbnRIYW5kbGVyKCcwJyxGVHJhY2VJbXBvcnRlci5wcm90b3R5cGUudHJhY2VNYXJraW5nV3JpdGVFdmVudF8uYmluZCh0aGlzKSk7dGhpcy5yZWdpc3RlckV2ZW50SGFuZGxlcigndHJhY2luZ19tYXJrX3dyaXRlOnRyYWNlX2V2ZW50X2Nsb2NrX3N5bmMnLGZ1bmN0aW9uKCl7cmV0dXJuIHRydWU7fSk7dGhpcy5yZWdpc3RlckV2ZW50SGFuZGxlcignMDp0cmFjZV9ldmVudF9jbG9ja19zeW5jJyxmdW5jdGlvbigpe3JldHVybiB0cnVlO30pO30sdHJhY2VDbG9ja1N5bmNFdmVudF8oZXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlKXtsZXQgZXZlbnQ9L25hbWU9KFx3Kz8pXHMoLispLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZihldmVudCl7Y29uc3QgbmFtZT1ldmVudFsxXTtjb25zdCBwaWVjZXM9ZXZlbnRbMl0uc3BsaXQoJyAnKTtjb25zdCBhcmdzPXtwZXJmVHM6dHN9O2ZvcihsZXQgaT0wO2k8cGllY2VzLmxlbmd0aDtpKyspe2NvbnN0IHBhcnRzPXBpZWNlc1tpXS5zcGxpdCgnPScpO2lmKHBhcnRzLmxlbmd0aCE9PTIpe3Rocm93IG5ldyBFcnJvcignb21nYmJxJyk7fQphcmdzW3BhcnRzWzBdXT1wYXJ0c1sxXTt9CnRoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuYWRkQ2xvY2tTeW5jTWFya2VyKHRoaXMuY2xvY2tEb21haW5JZF8sbmFtZSx0cyk7cmV0dXJuIHRydWU7fQpldmVudD0vbmFtZT0oW1x3XC1dKykvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKGV2ZW50KXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0aGlzLmNsb2NrRG9tYWluSWRfLGV2ZW50WzFdLHRzKTtyZXR1cm4gdHJ1ZTt9CmV2ZW50PS9wYXJlbnRfdHM9KFxkK1wuP1xkKikvLmV4ZWMoZXZlbnRCYXNlLmRldGFpbHMpO2lmKCFldmVudClyZXR1cm4gZmFsc2U7bGV0IG1vbm90b25pY1RzPWV2ZW50WzFdKjEwMDA7aWYobW9ub3RvbmljVHM9PT0wKW1vbm90b25pY1RzPXRzO2lmKHRoaXMuaGF2ZUNsb2NrU3luY2VkTW9ub3RvbmljVG9HbG9iYWxfKXtyZXR1cm4gdHJ1ZTt9CnRoaXMubW9kZWxfLmNsb2NrU3luY01hbmFnZXIuYWRkQ2xvY2tTeW5jTWFya2VyKHRoaXMuY2xvY2tEb21haW5JZF8sTU9OT1RPTklDX1RPX0ZUUkFDRV9HTE9CQUxfU1lOQ19JRCx0cyk7dGhpcy5tb2RlbF8uY2xvY2tTeW5jTWFuYWdlci5hZGRDbG9ja1N5bmNNYXJrZXIodHIubW9kZWwuQ2xvY2tEb21haW5JZC5MSU5VWF9DTE9DS19NT05PVE9OSUMsTU9OT1RPTklDX1RPX0ZUUkFDRV9HTE9CQUxfU1lOQ19JRCxtb25vdG9uaWNUcyk7dGhpcy5oYXZlQ2xvY2tTeW5jZWRNb25vdG9uaWNUb0dsb2JhbF89dHJ1ZTtyZXR1cm4gdHJ1ZTt9LHRyYWNlTWFya2luZ1dyaXRlRXZlbnRfKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSx0aHJlYWROYW1lKXtldmVudEJhc2UuZGV0YWlscz1ldmVudEJhc2UuZGV0YWlscy5yZXBsYWNlKC9cXG4uKiQvLCcnKTtjb25zdCBldmVudD0vXlxzKihcdyspOlxzKiguKikkLy5leGVjKGV2ZW50QmFzZS5kZXRhaWxzKTtpZighZXZlbnQpe2NvbnN0IHRhZz1ldmVudEJhc2UuZGV0YWlscy5zdWJzdHJpbmcoMCwyKTtpZih0YWc9PT0nQnwnfHx0YWc9PT0nRSd8fHRhZz09PSdFfCd8fHRhZz09PSdYfCd8fHRhZz09PSdDfCd8fHRhZz09PSdTfCd8fHRhZz09PSdGfCcpe2V2ZW50QmFzZS5zdWJFdmVudE5hbWU9J2FuZHJvaWQnO31lbHNle3JldHVybiBmYWxzZTt9fWVsc2V7ZXZlbnRCYXNlLnN1YkV2ZW50TmFtZT1ldmVudFsxXTtldmVudEJhc2UuZGV0YWlscz1ldmVudFsyXTt9CmNvbnN0IHdyaXRlRXZlbnROYW1lPWV2ZW50TmFtZSsnOicrZXZlbnRCYXNlLnN1YkV2ZW50TmFtZTtjb25zdCBoYW5kbGVyPXRoaXMuZXZlbnRIYW5kbGVyc19bd3JpdGVFdmVudE5hbWVdO2lmKCFoYW5kbGVyKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVW5rbm93biB0cmFjZV9tYXJraW5nX3dyaXRlIGV2ZW50ICcrd3JpdGVFdmVudE5hbWV9KTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBoYW5kbGVyKHdyaXRlRXZlbnROYW1lLGNwdU51bWJlcixwaWQsdHMsZXZlbnRCYXNlLHRocmVhZE5hbWUpO30saW1wb3J0Q3B1RGF0YV8obW9kZWxUaW1lVHJhbnNmb3JtZXIpe3RoaXMuZm9yRWFjaExpbmVfKGZ1bmN0aW9uKHRleHQsZXZlbnRCYXNlLGNwdU51bWJlcixwaWQsdHMpe2NvbnN0IGV2ZW50TmFtZT1ldmVudEJhc2UuZXZlbnROYW1lO2NvbnN0IGhhbmRsZXI9dGhpcy5ldmVudEhhbmRsZXJzX1tldmVudE5hbWVdO2lmKCFoYW5kbGVyKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVW5rbm93biBldmVudCAnK2V2ZW50TmFtZSsnICgnK3RleHQrJyknfSk7cmV0dXJuO30KdHM9bW9kZWxUaW1lVHJhbnNmb3JtZXIodHMpO2lmKCFoYW5kbGVyKGV2ZW50TmFtZSxjcHVOdW1iZXIscGlkLHRzLGV2ZW50QmFzZSkpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidNYWxmb3JtZWQgJytldmVudE5hbWUrJyBldmVudCAoJyt0ZXh0KycpJ30pO319LmJpbmQodGhpcykpO30scGFyc2VMaW5lc18oKXtsZXQgZXh0cmFjdFJlc3VsdD1GVHJhY2VJbXBvcnRlci5fZXh0cmFjdEV2ZW50c0Zyb21TeXN0cmFjZUhUTUwodGhpcy5ldmVudHNfLHRydWUpO2lmKCFleHRyYWN0UmVzdWx0Lm9rKXtleHRyYWN0UmVzdWx0PUZUcmFjZUltcG9ydGVyLl9leHRyYWN0RXZlbnRzRnJvbVN5c3RyYWNlTXVsdGlIVE1MKHRoaXMuZXZlbnRzXyx0cnVlKTt9CmxldCBsaW5lUGFyc2VyPXVuZGVmaW5lZDtpZihleHRyYWN0UmVzdWx0Lm9rKXtmb3IoY29uc3QgbGluZSBvZiBleHRyYWN0UmVzdWx0LmxpbmVzKXtsaW5lUGFyc2VyPXRoaXMucGFyc2VMaW5lXyhsaW5lLGxpbmVQYXJzZXIpO319ZWxzZXtjb25zdCByPW5ldyB0ci5pbXBvcnRlci5TaW1wbGVMaW5lUmVhZGVyKHRoaXMuZXZlbnRzXyk7Zm9yKGNvbnN0IGxpbmUgb2Ygcil7bGluZVBhcnNlcj10aGlzLnBhcnNlTGluZV8obGluZSxsaW5lUGFyc2VyKTt9fX0scGFyc2VMaW5lXyhsaW5lLGxpbmVQYXJzZXIpe2xpbmU9bGluZS50cmltKCk7aWYobGluZS5sZW5ndGg9PT0wKXJldHVybiBsaW5lUGFyc2VyO2lmKC9eIy8udGVzdChsaW5lKSl7Y29uc3QgY2xvY2tUeXBlPS9eIyBjbG9ja190eXBlPShbQS1aX10rKSQvLmV4ZWMobGluZSk7aWYoY2xvY2tUeXBlKXt0aGlzLmNsb2NrRG9tYWluSWRfPWNsb2NrVHlwZVsxXTt9CnJldHVybiBsaW5lUGFyc2VyO30KaWYoIWxpbmVQYXJzZXIpe2xpbmVQYXJzZXI9YXV0b0RldGVjdExpbmVQYXJzZXIobGluZSk7aWYoIWxpbmVQYXJzZXIpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidDYW5ub3QgcGFyc2UgbGluZTogJytsaW5lfSk7cmV0dXJuIGxpbmVQYXJzZXI7fX0KY29uc3QgZXZlbnRCYXNlPWxpbmVQYXJzZXIobGluZSk7aWYoIWV2ZW50QmFzZSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZToncGFyc2VfZXJyb3InLG1lc3NhZ2U6J1VucmVjb2duaXplZCBsaW5lOiAnK2xpbmV9KTtyZXR1cm4gbGluZVBhcnNlcjt9CnRoaXMubGluZXNfLnB1c2goW2xpbmUsZXZlbnRCYXNlLHBhcnNlSW50KGV2ZW50QmFzZS5jcHVOdW1iZXIpLHBhcnNlSW50KGV2ZW50QmFzZS5waWQpLHBhcnNlRmxvYXQoZXZlbnRCYXNlLnRpbWVzdGFtcCkqMTAwMF0pO3JldHVybiBsaW5lUGFyc2VyO30sZm9yRWFjaExpbmVfKGhhbmRsZXIpe2ZvcihsZXQgaT0wO2k8dGhpcy5saW5lc18ubGVuZ3RoOysraSl7Y29uc3QgbGluZT10aGlzLmxpbmVzX1tpXTtoYW5kbGVyLmFwcGx5KHRoaXMsbGluZSk7fX0sbGF6eUluaXRfKCl7dGhpcy5wYXJzZXJzXz10aGlzLmNyZWF0ZVBhcnNlcnNfKCk7dGhpcy5yZWdpc3RlckRlZmF1bHRIYW5kbGVyc18oKTt0aGlzLnBhcnNlTGluZXNfKCk7fX07dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucmVnaXN0ZXIoRlRyYWNlSW1wb3J0ZXIpO3JldHVybntGVHJhY2VJbXBvcnRlcixfRlRyYWNlSW1wb3J0ZXJUZXN0RXhwb3J0czpUZXN0RXhwb3J0cyxJTVBPUlRfUFJJT1JJVFksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuYW5kcm9pZC5hdHJhY2VfcHJvY2Vzc19kdW1wJyxmdW5jdGlvbigpe2NvbnN0IElNUE9SVF9QUklPUklUWT10ci5lLmltcG9ydGVyLmxpbnV4X3BlcmYuSU1QT1JUX1BSSU9SSVRZKzE7Y29uc3QgSEVBREVSPSdBVFJBQ0VfUFJPQ0VTU19EVU1QJztjb25zdCBQUk9URUNUSU9OX0ZMQUdfTEVUVEVSUz17Jy0nOjAsJ3InOnRyLm1vZGVsLlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19SRUFELCd3Jzp0ci5tb2RlbC5WTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfV1JJVEUsJ3gnOnRyLm1vZGVsLlZNUmVnaW9uLlBST1RFQ1RJT05fRkxBR19FWEVDVVRFLCdzJzp0ci5tb2RlbC5WTVJlZ2lvbi5QUk9URUNUSU9OX0ZMQUdfTUFZU0hBUkUsfTtjbGFzcyBBdHJhY2VQcm9jZXNzRHVtcEltcG9ydGVyIGV4dGVuZHMgdHIuaW1wb3J0ZXIuSW1wb3J0ZXJ7Y29uc3RydWN0b3IobW9kZWwsZGF0YSl7c3VwZXIobW9kZWwsZGF0YSk7dGhpcy5pbXBvcnRQcmlvcml0eT1JTVBPUlRfUFJJT1JJVFk7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5yYXdfZGF0YV89ZGF0YTt0aGlzLmNsb2NrX3N5bmNfbWFya2Vyc189e307dGhpcy5zbmFwc2hvdHNfPVtdO3RoaXMucHJvY2Vzc2VzXz17fTt9CnN0YXRpYyBjYW5JbXBvcnQoZXZlbnRzKXtpZighKHR5cGVvZihldmVudHMpPT09J3N0cmluZyd8fGV2ZW50cyBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9CnJldHVybiBldmVudHMuc3RhcnRzV2l0aChIRUFERVIpO30KZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidBdHJhY2VQcm9jZXNzRHVtcEltcG9ydGVyJzt9CmdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9CmxhenlQYXJzZURhdGEoKXtpZih0aGlzLnJhd19kYXRhXz09PXVuZGVmaW5lZCl7cmV0dXJuO30KY29uc3QgZHVtcD1KU09OLnBhcnNlKHRoaXMucmF3X2RhdGFfLnNsaWNlKEhFQURFUi5sZW5ndGgrMSkpO3RoaXMuY2xvY2tfc3luY19tYXJrZXJzXz1kdW1wLmNsb2NrX3N5bmNfbWFya2Vyczt0aGlzLnNuYXBzaG90c189ZHVtcC5kdW1wLnNuYXBzaG90czt0aGlzLnByb2Nlc3Nlc189ZHVtcC5kdW1wLnByb2Nlc3Nlczt0aGlzLnJhd19kYXRhXz11bmRlZmluZWQ7fQppbXBvcnRDbG9ja1N5bmNNYXJrZXJzKCl7dGhpcy5sYXp5UGFyc2VEYXRhKCk7Zm9yKGNvbnN0IHN5bmNJZCBpbiB0aGlzLmNsb2NrX3N5bmNfbWFya2Vyc18pe2NvbnN0IHRzPXBhcnNlSW50KHRoaXMuY2xvY2tfc3luY19tYXJrZXJzX1tzeW5jSWRdKTt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0ci5tb2RlbC5DbG9ja0RvbWFpbklkLkxJTlVYX0NMT0NLX01PTk9UT05JQyxzeW5jSWQsdHMpO319CnNldFByb2Nlc3NNZW1vcnlEdW1wVG90YWxzXyhwbWQscHJvY2Vzc0luZm8pe3BtZC50b3RhbHM9eydyZXNpZGVudEJ5dGVzJzpwcm9jZXNzSW5mby5yc3MqMTAyNCwncGxhdGZvcm1TcGVjaWZpYyc6eyd2bSc6cHJvY2Vzc0luZm8udm0qMTAyNH19O2NvbnN0IHRvdGFscz1wbWQudG90YWxzLnBsYXRmb3JtU3BlY2lmaWM7ZnVuY3Rpb24gaW1wb3J0R3B1TWV0cmljKG5hbWUpe2lmKHByb2Nlc3NJbmZvW25hbWVdIT09dW5kZWZpbmVkJiZwcm9jZXNzSW5mb1tuYW1lXT4wKXt0b3RhbHNbbmFtZV09cHJvY2Vzc0luZm9bbmFtZV0qMTAyNDt0b3RhbHNbbmFtZSsnX3BzcyddPXByb2Nlc3NJbmZvW25hbWUrJ19wc3MnXSoxMDI0O319CmltcG9ydEdwdU1ldHJpYygnZ3B1X2VnbCcpO2ltcG9ydEdwdU1ldHJpYygnZ3B1X2dsJyk7aW1wb3J0R3B1TWV0cmljKCdncHVfZXRjJyk7aWYocHJvY2Vzc0luZm8ucHNzIT09dW5kZWZpbmVkKXt0b3RhbHMucHNzPXByb2Nlc3NJbmZvLnBzcyoxMDI0O3RvdGFscy5zd3A9cHJvY2Vzc0luZm8uc3dwKjEwMjQ7dG90YWxzLnBjPXByb2Nlc3NJbmZvLnBjKjEwMjQ7dG90YWxzLnBkPXByb2Nlc3NJbmZvLnBkKjEwMjQ7dG90YWxzLnNjPXByb2Nlc3NJbmZvLnNjKjEwMjQ7dG90YWxzLnNkPXByb2Nlc3NJbmZvLnNkKjEwMjQ7fX0Kc2V0UHJvY2Vzc01lbW9yeUR1bXBWbVJlZ2lvbnNfKHBtZCxwcm9jZXNzSW5mbyl7aWYocHJvY2Vzc0luZm8ubW1hcHM9PT11bmRlZmluZWQpe3JldHVybjt9CmNvbnN0IHZtUmVnaW9ucz1bXTtmb3IoY29uc3QgbWVtb3J5TWFwIG9mIHByb2Nlc3NJbmZvLm1tYXBzKXtjb25zdCBhZGRyPW1lbW9yeU1hcC52bS5zcGxpdCgnLScpLm1hcCh4PT5wYXJzZUludCh4LDE2KSk7bGV0IGZsYWdzPTA7Zm9yKGNvbnN0IGxldHRlciBvZiBtZW1vcnlNYXAuZmxhZ3Mpe2ZsYWdzfD1QUk9URUNUSU9OX0ZMQUdfTEVUVEVSU1tsZXR0ZXJdO30KY29uc3QgdG90YWxzPXsncHJvcG9ydGlvbmFsUmVzaWRlbnQnOm1lbW9yeU1hcC5wc3MqMTAyNCwncHJpdmF0ZUNsZWFuUmVzaWRlbnQnOm1lbW9yeU1hcC5wYyoxMDI0LCdwcml2YXRlRGlydHlSZXNpZGVudCc6bWVtb3J5TWFwLnBkKjEwMjQsJ3NoYXJlZENsZWFuUmVzaWRlbnQnOm1lbW9yeU1hcC5zYyoxMDI0LCdzaGFyZWREaXJ0eVJlc2lkZW50JzptZW1vcnlNYXAuc2QqMTAyNCwnc3dhcHBlZCc6bWVtb3J5TWFwLnN3cCoxMDI0LH07dm1SZWdpb25zLnB1c2gobmV3IHRyLm1vZGVsLlZNUmVnaW9uKGFkZHJbMF0sYWRkclsxXS1hZGRyWzBdLGZsYWdzLG1lbW9yeU1hcC5maWxlLHRvdGFscykpO30KcG1kLnZtUmVnaW9ucz10ci5tb2RlbC5WTVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZS5mcm9tUmVnaW9ucyh2bVJlZ2lvbnMpO30KaW1wb3J0RXZlbnRzKCl7dGhpcy5sYXp5UGFyc2VEYXRhKCk7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzXW9mIE9iamVjdC5lbnRyaWVzKHRoaXMucHJvY2Vzc2VzXykpe2NvbnN0IG1vZGVsUHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRQcm9jZXNzKHBpZCk7aWYobW9kZWxQcm9jZXNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Cm1vZGVsUHJvY2Vzcy5uYW1lPXByb2Nlc3MubmFtZTtjb25zdCB0aHJlYWRzPXByb2Nlc3MudGhyZWFkcztpZih0aHJlYWRzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9CmZvcihjb25zdFt0aWQsdGhyZWFkXW9mIE9iamVjdC5lbnRyaWVzKHRocmVhZHMpKXtjb25zdCBtb2RlbFRocmVhZD1tb2RlbFByb2Nlc3MudGhyZWFkc1t0aWRdO2lmKG1vZGVsVGhyZWFkPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Cm1vZGVsVGhyZWFkLm5hbWU9dGhyZWFkLm5hbWU7fX0KY29uc3QgbWVtQ291bnRlcj10aGlzLm1vZGVsXy5rZXJuZWwuZ2V0T3JDcmVhdGVDb3VudGVyKCdnbG9iYWwnLCdTeXN0ZW1NZW1vcnknKTtjb25zdCBtZW1Vc2VkU2VyaWVzPW5ldyB0ci5tb2RlbC5Db3VudGVyU2VyaWVzKCdVc2VkIChLQiknLDApO2NvbnN0IG1lbVN3YXBwZWRTZXJpZXM9bmV3IHRyLm1vZGVsLkNvdW50ZXJTZXJpZXMoJ1N3YXBwZWQgKEtCKScsMCk7bWVtQ291bnRlci5hZGRTZXJpZXMobWVtVXNlZFNlcmllcyk7bWVtQ291bnRlci5hZGRTZXJpZXMobWVtU3dhcHBlZFNlcmllcyk7Zm9yKGNvbnN0IHNuYXBzaG90IG9mIHRoaXMuc25hcHNob3RzXyl7Y29uc3QgdHM9cGFyc2VJbnQoc25hcHNob3QudHMpO2NvbnN0IG1lbW9yeUR1bXA9c25hcHNob3QubWVtZHVtcDtpZihtZW1vcnlEdW1wPT09dW5kZWZpbmVkKXtjb25zdCBtZW1JbmZvPXNuYXBzaG90Lm1lbWluZm87aWYobWVtSW5mbz09PXVuZGVmaW5lZCl7Y29udGludWU7fQpjb25zdCBtZW1DYWNoZXM9bWVtSW5mby5CdWZmZXJzK21lbUluZm8uQ2FjaGVkLW1lbUluZm8uTWFwcGVkO2NvbnN0IG1lbVVzZWQ9bWVtSW5mby5NZW1Ub3RhbC1tZW1JbmZvLk1lbUZyZWUtbWVtQ2FjaGVzO2NvbnN0IG1lbVN3YXBwZWQ9bWVtSW5mby5Td2FwVG90YWwtbWVtSW5mby5Td2FwRnJlZTttZW1Vc2VkU2VyaWVzLmFkZENvdW50ZXJTYW1wbGUodHMsbWVtVXNlZCk7bWVtU3dhcHBlZFNlcmllcy5hZGRDb3VudGVyU2FtcGxlKHRzLG1lbVN3YXBwZWQpO2NvbnRpbnVlO30KY29uc3QgZ21kPW5ldyB0ci5tb2RlbC5HbG9iYWxNZW1vcnlEdW1wKHRoaXMubW9kZWxfLHRzKTt0aGlzLm1vZGVsXy5nbG9iYWxNZW1vcnlEdW1wcy5wdXNoKGdtZCk7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzSW5mb11vZiBPYmplY3QuZW50cmllcyhtZW1vcnlEdW1wKSl7aWYocHJvY2Vzc0luZm8ucnNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9CmNvbnN0IG1vZGVsUHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRQcm9jZXNzKHBpZCk7aWYobW9kZWxQcm9jZXNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9CmNvbnN0IHBtZD1uZXcgdHIubW9kZWwuUHJvY2Vzc01lbW9yeUR1bXAoZ21kLG1vZGVsUHJvY2Vzcyx0cyk7Z21kLnByb2Nlc3NNZW1vcnlEdW1wc1twaWRdPXBtZDttb2RlbFByb2Nlc3MubWVtb3J5RHVtcHMucHVzaChwbWQpO3RoaXMuc2V0UHJvY2Vzc01lbW9yeUR1bXBUb3RhbHNfKHBtZCxwcm9jZXNzSW5mbyk7dGhpcy5zZXRQcm9jZXNzTWVtb3J5RHVtcFZtUmVnaW9uc18ocG1kLHByb2Nlc3NJbmZvKTt9fX19CnRyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEF0cmFjZVByb2Nlc3NEdW1wSW1wb3J0ZXIpO3JldHVybntBdHJhY2VQcm9jZXNzRHVtcEltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbCcsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2Z1bmN0aW9uIEFjdGl2aXR5KG5hbWUsY2F0ZWdvcnkscmFuZ2UsYXJncyl7dHIubW9kZWwuVGltZWRFdmVudC5jYWxsKHRoaXMscmFuZ2UubWluKTt0aGlzLnRpdGxlPW5hbWU7dGhpcy5jYXRlZ29yeT1jYXRlZ29yeTt0aGlzLmNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKG5hbWUpO3RoaXMuZHVyYXRpb249cmFuZ2UuZHVyYXRpb247dGhpcy5hcmdzPWFyZ3M7dGhpcy5uYW1lPW5hbWU7fQpBY3Rpdml0eS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5UaW1lZEV2ZW50LnByb3RvdHlwZSxzaGlmdFRpbWVzdGFtcHNGb3J3YXJkKGFtb3VudCl7dGhpcy5zdGFydCs9YW1vdW50O30sYWRkQm91bmRzVG9SYW5nZShyYW5nZSl7cmFuZ2UuYWRkVmFsdWUodGhpcy5zdGFydCk7cmFuZ2UuYWRkVmFsdWUodGhpcy5lbmQpO319O3JldHVybntBY3Rpdml0eSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5hbmRyb2lkJyxmdW5jdGlvbigpe2NvbnN0IEltcG9ydGVyPXRyLmltcG9ydGVyLkltcG9ydGVyO2NvbnN0IEFDVElWSVRZX1NUQVRFPXtOT05FOidub25lJyxDUkVBVEVEOidjcmVhdGVkJyxTVEFSVEVEOidzdGFydGVkJyxSRVNVTUVEOidyZXN1bWVkJyxQQVVTRUQ6J3BhdXNlZCcsU1RPUFBFRDonc3RvcHBlZCcsREVTVFJPWUVEOidkZXN0cm95ZWQnfTtjb25zdCBhY3Rpdml0eU1hcD17fTtmdW5jdGlvbiBFdmVudExvZ0ltcG9ydGVyKG1vZGVsLGV2ZW50cyl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5ldmVudHNfPWV2ZW50czt0aGlzLmltcG9ydFByaW9yaXR5PTM7fQpjb25zdCBldmVudExvZ0FjdGl2aXR5UkU9bmV3IFJlZ0V4cCgnKFxcZHsyfS1cXGR7Mn0gXFxkezJ9OlxcZHsyfTpcXGR7Mn0uXFxkKyknKydcXHMrKFxcZCspXFxzKyhcXGQrKVxccysoW0EtWl0pXFxzKicrJyhhbV9cXHcrKVxccyo6KC4qKScpO2NvbnN0IGFtQ3JlYXRlUkU9bmV3IFJlZ0V4cCgnXHMqXFxbLiosLiosLiosKC4qKSwuKiwuKiwuKiwuKlxcXScpO2NvbnN0IGFtRm9jdXNlZFJFPW5ldyBSZWdFeHAoJ1xzKlxcW1xcZCssKC4qKVxcXScpO2NvbnN0IGFtUHJvY1N0YXJ0UkU9bmV3IFJlZ0V4cCgnXHMqXFxbXFxkKyxcXGQrLFxcZCssLiosYWN0aXZpdHksKC4qKVxcXScpO2NvbnN0IGFtT25SZXN1bWVSRT1uZXcgUmVnRXhwKCdccypcXFtcXGQrLCguKilcXF0nKTtjb25zdCBhbU9uUGF1c2VSRT1uZXcgUmVnRXhwKCdccypcXFtcXGQrLCguKilcXF0nKTtjb25zdCBhbUxhdW5jaFRpbWVSRT1uZXcgUmVnRXhwKCdccypcXFtcXGQrLFxcZCssKC4qKSwoXFxkKyksKFxcZCspJyk7Y29uc3QgYW1EZXN0cm95UkU9bmV3IFJlZ0V4cCgnXHMqXFxbXFxkKyxcXGQrLFxcZCssKC4qKVxcXScpO0V2ZW50TG9nSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGV2ZW50cyl7aWYoISh0eXBlb2YoZXZlbnRzKT09PSdzdHJpbmcnfHxldmVudHMgaW5zdGFuY2VvZiBTdHJpbmcpKXtyZXR1cm4gZmFsc2U7fQppZigvXjwhRE9DVFlQRSBodG1sPi8udGVzdChldmVudHMpKXJldHVybiBmYWxzZTtyZXR1cm4gZXZlbnRMb2dBY3Rpdml0eVJFLnRlc3QoZXZlbnRzKTt9O0V2ZW50TG9nSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186SW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRXZlbnRMb2dJbXBvcnRlcic7fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxnZXRGdWxsQWN0aXZpdHlOYW1lKGNvbXBvbmVudCl7Y29uc3QgY29tcG9uZW50U3BsaXQ9Y29tcG9uZW50LnNwbGl0KCcvJyk7aWYoY29tcG9uZW50U3BsaXRbMV0uc3RhcnRzV2l0aCgnLicpKXtyZXR1cm4gY29tcG9uZW50U3BsaXRbMF0rY29tcG9uZW50U3BsaXRbMV07fQpyZXR1cm4gY29tcG9uZW50U3BsaXRbMV07fSxnZXRQcm9jTmFtZShjb21wb25lbnQpe2NvbnN0IGNvbXBvbmVudFNwbGl0PWNvbXBvbmVudC5zcGxpdCgnLycpO3JldHVybiBjb21wb25lbnRTcGxpdFswXTt9LGZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSl7aWYoYWN0aXZpdHlOYW1lIGluIGFjdGl2aXR5TWFwKXtyZXR1cm4gYWN0aXZpdHlNYXBbYWN0aXZpdHlOYW1lXTt9CmNvbnN0IGFjdGl2aXR5PXtzdGF0ZTpBQ1RJVklUWV9TVEFURS5OT05FLG5hbWU6YWN0aXZpdHlOYW1lfTthY3Rpdml0eU1hcFthY3Rpdml0eU5hbWVdPWFjdGl2aXR5O3JldHVybiBhY3Rpdml0eTt9LGRlbGV0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSl7ZGVsZXRlIGFjdGl2aXR5TWFwW2FjdGl2aXR5TmFtZV07fSxoYW5kbGVDcmVhdGVBY3Rpdml0eSh0cyxhY3Rpdml0eU5hbWUpe2NvbnN0IGFjdGl2aXR5PXRoaXMuZmluZE9yQ3JlYXRlQWN0aXZpdHkoYWN0aXZpdHlOYW1lKTthY3Rpdml0eS5zdGF0ZT1BQ1RJVklUWV9TVEFURS5DUkVBVEVEO2FjdGl2aXR5LmNyZWF0ZWRUcz10czt9LGhhbmRsZUZvY3VzQWN0aXZpdHkodHMscHJvY05hbWUsYWN0aXZpdHlOYW1lKXtjb25zdCBhY3Rpdml0eT10aGlzLmZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7YWN0aXZpdHkubGFzdEZvY3VzZWRUcz10czt9LGhhbmRsZVByb2NTdGFydEZvckFjdGl2aXR5KHRzLGFjdGl2aXR5TmFtZSl7Y29uc3QgYWN0aXZpdHk9dGhpcy5maW5kT3JDcmVhdGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpO2FjdGl2aXR5LnByb2NTdGFydFRzPXRzO30saGFuZGxlT25SZXN1bWVDYWxsZWQodHMscGlkLGFjdGl2aXR5TmFtZSl7Y29uc3QgYWN0aXZpdHk9dGhpcy5maW5kT3JDcmVhdGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpO2FjdGl2aXR5LnN0YXRlPUFDVElWSVRZX1NUQVRFLlJFU1VNRUQ7YWN0aXZpdHkubGFzdFJlc3VtZVRzPXRzO2FjdGl2aXR5LnBpZD1waWQ7fSxoYW5kbGVPblBhdXNlQ2FsbGVkKHRzLGFjdGl2aXR5TmFtZSl7Y29uc3QgYWN0aXZpdHk9dGhpcy5maW5kT3JDcmVhdGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpO2FjdGl2aXR5LnN0YXRlPUFDVElWSVRZX1NUQVRFLlBBVVNFRDthY3Rpdml0eS5sYXN0UGF1c2VUcz10cztpZih0cz50aGlzLm1vZGVsXy5ib3VuZHMubWluJiZ0czx0aGlzLm1vZGVsXy5ib3VuZHMubWF4KXt0aGlzLmFkZEFjdGl2aXR5VG9Qcm9jZXNzKGFjdGl2aXR5KTt9fSxoYW5kbGVMYXVuY2hUaW1lKHRzLGFjdGl2aXR5TmFtZSxsYXVuY2hUaW1lKXtjb25zdCBhY3Rpdml0eT10aGlzLmZpbmRPckNyZWF0ZUFjdGl2aXR5KGFjdGl2aXR5TmFtZSk7YWN0aXZpdHkubGF1bmNoVGltZT1sYXVuY2hUaW1lO30saGFuZGxlRGVzdHJveUFjdGl2aXR5KHRzLGFjdGl2aXR5TmFtZSl7dGhpcy5kZWxldGVBY3Rpdml0eShhY3Rpdml0eU5hbWUpO30sYWRkQWN0aXZpdHlUb1Byb2Nlc3MoYWN0aXZpdHkpe2lmKGFjdGl2aXR5LnBpZD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcHJvY2Vzcz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZVByb2Nlc3MoYWN0aXZpdHkucGlkKTtjb25zdCByYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoTWF0aC5tYXgodGhpcy5tb2RlbF8uYm91bmRzLm1pbixhY3Rpdml0eS5sYXN0UmVzdW1lVHMpLGFjdGl2aXR5Lmxhc3RQYXVzZVRzKTtjb25zdCBuZXdBY3Rpdml0eT1uZXcgdHIubW9kZWwuQWN0aXZpdHkoYWN0aXZpdHkubmFtZSwnQW5kcm9pZCBBY3Rpdml0eScscmFuZ2Use2NyZWF0ZWQ6YWN0aXZpdHkuY3JlYXRlZFRzLHByb2NzdGFydDphY3Rpdml0eS5wcm9jU3RhcnRUcyxsYXN0Zm9jdXM6YWN0aXZpdHkubGFzdEZvY3VzZWRUc30pO3Byb2Nlc3MuYWN0aXZpdGllcy5wdXNoKG5ld0FjdGl2aXR5KTt9LHBhcnNlQW1MaW5lXyhsaW5lKXtsZXQgbWF0Y2g9ZXZlbnRMb2dBY3Rpdml0eVJFLmV4ZWMobGluZSk7aWYoIW1hdGNoKXJldHVybjtjb25zdCBmaXJzdFJlYWx0aW1lVHM9dGhpcy5tb2RlbF8uYm91bmRzLm1pbi0KdGhpcy5tb2RlbF8ucmVhbHRpbWVfdG9fbW9ub3RvbmljX29mZnNldF9tcztjb25zdCB5ZWFyPW5ldyBEYXRlKGZpcnN0UmVhbHRpbWVUcykuZ2V0RnVsbFllYXIoKTtjb25zdCB0cz1tYXRjaFsxXS5zdWJzdHJpbmcoMCw1KSsnLScreWVhcisnICcrCm1hdGNoWzFdLnN1YnN0cmluZyg1LG1hdGNoWzFdLmxlbmd0aCk7Y29uc3QgbW9ub3RvbmljVHM9RGF0ZS5wYXJzZSh0cykrCnRoaXMubW9kZWxfLnJlYWx0aW1lX3RvX21vbm90b25pY19vZmZzZXRfbXM7Y29uc3QgcGlkPW1hdGNoWzJdO2NvbnN0IGFjdGlvbj1tYXRjaFs1XTtjb25zdCBkYXRhPW1hdGNoWzZdO2lmKGFjdGlvbj09PSdhbV9jcmVhdGVfYWN0aXZpdHknKXttYXRjaD1hbUNyZWF0ZVJFLmV4ZWMoZGF0YSk7aWYobWF0Y2gmJm1hdGNoLmxlbmd0aD49Mil7dGhpcy5oYW5kbGVDcmVhdGVBY3Rpdml0eShtb25vdG9uaWNUcyx0aGlzLmdldEZ1bGxBY3Rpdml0eU5hbWUobWF0Y2hbMV0pKTt9fWVsc2UgaWYoYWN0aW9uPT09J2FtX2ZvY3VzZWRfYWN0aXZpdHknKXttYXRjaD1hbUZvY3VzZWRSRS5leGVjKGRhdGEpO2lmKG1hdGNoJiZtYXRjaC5sZW5ndGg+PTIpe3RoaXMuaGFuZGxlRm9jdXNBY3Rpdml0eShtb25vdG9uaWNUcyx0aGlzLmdldFByb2NOYW1lKG1hdGNoWzFdKSx0aGlzLmdldEZ1bGxBY3Rpdml0eU5hbWUobWF0Y2hbMV0pKTt9fWVsc2UgaWYoYWN0aW9uPT09J2FtX3Byb2Nfc3RhcnQnKXttYXRjaD1hbVByb2NTdGFydFJFLmV4ZWMoZGF0YSk7aWYobWF0Y2gmJm1hdGNoLmxlbmd0aD49Mil7dGhpcy5oYW5kbGVQcm9jU3RhcnRGb3JBY3Rpdml0eShtb25vdG9uaWNUcyx0aGlzLmdldEZ1bGxBY3Rpdml0eU5hbWUobWF0Y2hbMV0pKTt9fWVsc2UgaWYoYWN0aW9uPT09J2FtX29uX3Jlc3VtZV9jYWxsZWQnKXttYXRjaD1hbU9uUmVzdW1lUkUuZXhlYyhkYXRhKTtpZihtYXRjaCYmbWF0Y2gubGVuZ3RoPj0yKXt0aGlzLmhhbmRsZU9uUmVzdW1lQ2FsbGVkKG1vbm90b25pY1RzLHBpZCxtYXRjaFsxXSk7fX1lbHNlIGlmKGFjdGlvbj09PSdhbV9vbl9wYXVzZWRfY2FsbGVkJyl7bWF0Y2g9YW1PblBhdXNlUkUuZXhlYyhkYXRhKTtpZihtYXRjaCYmbWF0Y2gubGVuZ3RoPj0yKXt0aGlzLmhhbmRsZU9uUGF1c2VDYWxsZWQobW9ub3RvbmljVHMsbWF0Y2hbMV0pO319ZWxzZSBpZihhY3Rpb249PT0nYW1fYWN0aXZpdHlfbGF1bmNoX3RpbWUnKXttYXRjaD1hbUxhdW5jaFRpbWVSRS5leGVjKGRhdGEpO3RoaXMuaGFuZGxlTGF1bmNoVGltZShtb25vdG9uaWNUcyx0aGlzLmdldEZ1bGxBY3Rpdml0eU5hbWUobWF0Y2hbMV0pLG1hdGNoWzJdKTt9ZWxzZSBpZihhY3Rpb249PT0nYW1fZGVzdHJveV9hY3Rpdml0eScpe21hdGNoPWFtRGVzdHJveVJFLmV4ZWMoZGF0YSk7aWYobWF0Y2gmJm1hdGNoLmxlbmd0aD09PTIpe3RoaXMuaGFuZGxlRGVzdHJveUFjdGl2aXR5KG1vbm90b25pY1RzLHRoaXMuZ2V0RnVsbEFjdGl2aXR5TmFtZShtYXRjaFsxXSkpO319fSxpbXBvcnRFdmVudHMoKXtpZihpc05hTih0aGlzLm1vZGVsXy5yZWFsdGltZV90b19tb25vdG9uaWNfb2Zmc2V0X21zKSl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonZXZlbmdfbG9nX2Nsb2NrX3N5bmMnLG1lc3NhZ2U6J05lZWQgYSB0cmFjZV9ldmVudF9jbG9ja19zeW5jIHRvIG1hcCByZWFsdGltZSB0byBpbXBvcnQuJ30pO3JldHVybjt9CnRoaXMubW9kZWxfLnVwZGF0ZUJvdW5kcygpO2NvbnN0IGxpbmVzPXRoaXMuZXZlbnRzXy5zcGxpdCgnXG4nKTtsaW5lcy5mb3JFYWNoKHRoaXMucGFyc2VBbUxpbmVfLHRoaXMpO2Zvcihjb25zdCBhY3Rpdml0eU5hbWUgaW4gYWN0aXZpdHlNYXApe2NvbnN0IGFjdGl2aXR5PWFjdGl2aXR5TWFwW2FjdGl2aXR5TmFtZV07aWYoYWN0aXZpdHkuc3RhdGU9PT1BQ1RJVklUWV9TVEFURS5SRVNVTUVEKXthY3Rpdml0eS5sYXN0UGF1c2VUcz10aGlzLm1vZGVsXy5ib3VuZHMubWF4O3RoaXMuYWRkQWN0aXZpdHlUb1Byb2Nlc3MoYWN0aXZpdHkpO319fX07SW1wb3J0ZXIucmVnaXN0ZXIoRXZlbnRMb2dJbXBvcnRlcik7cmV0dXJue0V2ZW50TG9nSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuYW5kcm9pZC5wcm9jZXNzX2RhdGEnLGZ1bmN0aW9uKCl7Y29uc3QgSW1wb3J0ZXI9dHIuaW1wb3J0ZXIuSW1wb3J0ZXI7Y29uc3QgUFJPQ0VTU19EVU1QX0hFQURFUj0nUFJPQ0VTUyBEVU1QJztmdW5jdGlvbiBQcm9jZXNzRGF0YUltcG9ydGVyKG1vZGVsLHByb2Nlc3NEYXRhKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnByb2Nlc3NEYXRhTGluZXM9cHJvY2Vzc0RhdGEuc3BsaXQoJ1xuJyk7dGhpcy5pbXBvcnRQcmlvcml0eT0zO30KUHJvY2Vzc0RhdGFJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnRzKXtpZighKHR5cGVvZihldmVudHMpPT09J3N0cmluZyd8fGV2ZW50cyBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9CmlmKGV2ZW50cy5zcGxpdCgnXG4nKVswXT09PVBST0NFU1NfRFVNUF9IRUFERVIpe3JldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO307UHJvY2Vzc0RhdGFJbXBvcnRlci5wcm90b3R5cGU9e19fcHJvdG9fXzpJbXBvcnRlci5wcm90b3R5cGUsZ2V0IGltcG9ydGVyTmFtZSgpe3JldHVybidQcm9jZXNzRGF0YUltcG9ydGVyJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHBhcnNlRXZlbnREYXRhKGRhdGEpe2NvbnN0IGFsbER1bXBlZFByb2Nlc3Nlcz17fTtsZXQgcGFyc2VQcm9jZXNzZXM9ZmFsc2U7bGV0IHBhcnNlVGhyZWFkcz1mYWxzZTtsZXQgbGVnYWN5PWZhbHNlO2ZvcihsZXQgaT0xO2k8ZGF0YS5sZW5ndGg7aSsrKXtjb25zdCBjb2xzPWRhdGFbaV0uc3BsaXQoL1xzKy8pO2lmKGNvbHNbMF0uc3RhcnRzV2l0aCgnVVNFUicpKXtpZihwYXJzZVByb2Nlc3Nlcyl7cGFyc2VQcm9jZXNzZXM9ZmFsc2U7cGFyc2VUaHJlYWRzPXRydWU7fWVsc2V7cGFyc2VUaHJlYWRzPWZhbHNlO3BhcnNlUHJvY2Vzc2VzPXRydWU7fQpjb25zdCBjb2xDb3VudD1jb2xzLmxlbmd0aDtpZihwYXJzZVByb2Nlc3NlcyYmY29sQ291bnQ9PT05KXtsZWdhY3k9ZmFsc2U7fWVsc2UgaWYocGFyc2VQcm9jZXNzZXMmJmNvbENvdW50PT09OCl7bGVnYWN5PXRydWU7fQpjb250aW51ZTt9CmlmKHBhcnNlUHJvY2Vzc2VzKXtjb25zdCBwaWQ9TnVtYmVyKGNvbHNbMV0pO2lmKGFsbER1bXBlZFByb2Nlc3Nlc1twaWRdPT09dW5kZWZpbmVkKXthbGxEdW1wZWRQcm9jZXNzZXNbcGlkXT17fTt9CmFsbER1bXBlZFByb2Nlc3Nlc1twaWRdPXsnbmFtZSc6Y29sc1s4XSxwaWQsJ2NvbW0nOmNvbHNbOV19O2NvbnRpbnVlO30KaWYocGFyc2VUaHJlYWRzKXtsZXQgcGlkO2xldCB0aWQ7bGV0IG5hbWU7aWYobGVnYWN5KXtwaWQ9TnVtYmVyKGNvbHNbMV0pO2lmKGFsbER1bXBlZFByb2Nlc3Nlc1twaWRdIT09dW5kZWZpbmVkKXt0aWQ9cGlkO31lbHNle3RpZD1waWQ7cGlkPU51bWJlcihjb2xzWzJdKTt9Cm5hbWU9Y29scy5zbGljZSg4KS5qb2luKCcgJyk7fWVsc2V7cGlkPU51bWJlcihjb2xzWzFdKTt0aWQ9TnVtYmVyKGNvbHNbMl0pO25hbWU9Y29scy5zbGljZSgzKS5qb2luKCcgJyk7fQppZihhbGxEdW1wZWRQcm9jZXNzZXNbcGlkXT09PXVuZGVmaW5lZCljb250aW51ZTtpZihhbGxEdW1wZWRQcm9jZXNzZXNbcGlkXS50aHJlYWRzPT09dW5kZWZpbmVkKXthbGxEdW1wZWRQcm9jZXNzZXNbcGlkXS50aHJlYWRzPXt9O30KYWxsRHVtcGVkUHJvY2Vzc2VzW3BpZF0udGhyZWFkc1t0aWRdPXt0aWQsbmFtZX07Y29udGludWU7fX0KcmV0dXJuIGFsbER1bXBlZFByb2Nlc3Nlczt9LGltcG9ydEV2ZW50cygpe2NvbnN0IGFsbER1bXBlZFByb2Nlc3Nlcz10aGlzLnBhcnNlRXZlbnREYXRhKHRoaXMucHJvY2Vzc0RhdGFMaW5lcyk7Y29uc3QgbW9kZWxQcm9jZXNzZXM9dGhpcy5tb2RlbF8uZ2V0QWxsUHJvY2Vzc2VzKCk7Zm9yKGxldCBpPTA7aTxtb2RlbFByb2Nlc3Nlcy5sZW5ndGg7aSsrKXtjb25zdCBtb2RlbFByb2Nlc3M9bW9kZWxQcm9jZXNzZXNbaV07Y29uc3QgcGlkPW1vZGVsUHJvY2Vzcy5waWQ7Y29uc3QgZHVtcGVkUHJvY2Vzcz1hbGxEdW1wZWRQcm9jZXNzZXNbcGlkXTtpZihkdW1wZWRQcm9jZXNzPT09dW5kZWZpbmVkKXtjb250aW51ZTt9Cm1vZGVsUHJvY2Vzcy5uYW1lPWR1bXBlZFByb2Nlc3MubmFtZTtjb25zdCBwcm9jZXNzRHVtcFRocmVhZHM9ZHVtcGVkUHJvY2Vzcy50aHJlYWRzO2lmKHByb2Nlc3NEdW1wVGhyZWFkcyE9PXVuZGVmaW5lZCl7Zm9yKGNvbnN0IHRpZCBpbiBtb2RlbFByb2Nlc3MudGhyZWFkcyl7Y29uc3QgbW9kZWxUaHJlYWQ9bW9kZWxQcm9jZXNzLnRocmVhZHNbdGlkXTtpZihOdW1iZXIocGlkKT09PU51bWJlcih0aWQpKXttb2RlbFRocmVhZC5uYW1lPSdVSSB0aHJlYWQnO31lbHNlIGlmKG1vZGVsVGhyZWFkLm5hbWU9PT0nPC4uLj4nKXtpZihwcm9jZXNzRHVtcFRocmVhZHNbdGlkXSE9PXVuZGVmaW5lZCl7bW9kZWxUaHJlYWQubmFtZT1wcm9jZXNzRHVtcFRocmVhZHNbdGlkXS5uYW1lO319fX19fX07SW1wb3J0ZXIucmVnaXN0ZXIoUHJvY2Vzc0RhdGFJbXBvcnRlcik7cmV0dXJue1Byb2Nlc3NEYXRhSW1wb3J0ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuaW1wb3J0ZXIuYmF0dG9yJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEJhdHRvckltcG9ydGVyKG1vZGVsLGV2ZW50cyl7dGhpcy5pbXBvcnRQcmlvcml0eT0zO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMuc2FtcGxlc189W107dGhpcy5zeW5jVGltZXN0YW1wc0J5SWRfPW5ldyBNYXAoKTt0aGlzLnBhcnNlVHJhY2VfKGV2ZW50cyk7fQpjb25zdCBiYXR0b3JEYXRhTGluZVJFPW5ldyBSZWdFeHAoJ14oLT9cXGQrXFwuXFxkKylcXHMrKC0/XFxkK1xcLlxcZCspXFxzKygtP1xcZCtcXC5cXGQrKScrJyg/Olxccys8KFxcUyspPik/JCcpO2NvbnN0IGJhdHRvckhlYWRlckxpbmVSRT0vXiMgQmF0dE9yLztCYXR0b3JJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnRzKXtpZighKHR5cGVvZihldmVudHMpPT09J3N0cmluZyd8fGV2ZW50cyBpbnN0YW5jZW9mIFN0cmluZykpe3JldHVybiBmYWxzZTt9CnJldHVybiBiYXR0b3JIZWFkZXJMaW5lUkUudGVzdChldmVudHMpO307QmF0dG9ySW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nQmF0dG9ySW1wb3J0ZXInO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30saW1wb3J0Q2xvY2tTeW5jTWFya2Vycygpe2Zvcihjb25zdFtzeW5jSWQsdHNdb2YgdGhpcy5zeW5jVGltZXN0YW1wc0J5SWRfKXt0aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmFkZENsb2NrU3luY01hcmtlcih0ci5tb2RlbC5DbG9ja0RvbWFpbklkLkJBVFRPUixzeW5jSWQsdHMpO319LGltcG9ydEV2ZW50cygpe2lmKHRoaXMubW9kZWxfLmRldmljZS5wb3dlclNlcmllcyl7dGhpcy5tb2RlbF8uaW1wb3J0V2FybmluZyh7dHlwZTonaW1wb3J0X2Vycm9yJyxtZXNzYWdlOidQb3dlciBjb3VudGVyIGV4aXN0cywgY2FuIG5vdCBpbXBvcnQgQmF0dE9yIHBvd2VyIHRyYWNlLid9KTtyZXR1cm47fQpjb25zdCBtb2RlbFRpbWVUcmFuc2Zvcm1lcj10aGlzLm1vZGVsXy5jbG9ja1N5bmNNYW5hZ2VyLmdldE1vZGVsVGltZVRyYW5zZm9ybWVyKHRyLm1vZGVsLkNsb2NrRG9tYWluSWQuQkFUVE9SKTtjb25zdCBwb3dlclNlcmllcz10aGlzLm1vZGVsXy5kZXZpY2UucG93ZXJTZXJpZXM9bmV3IHRyLm1vZGVsLlBvd2VyU2VyaWVzKHRoaXMubW9kZWxfLmRldmljZSk7Zm9yKGxldCBpPTA7aTx0aGlzLnNhbXBsZXNfLmxlbmd0aDtpKyspe2NvbnN0IHNhbXBsZT10aGlzLnNhbXBsZXNfW2ldO3Bvd2VyU2VyaWVzLmFkZFBvd2VyU2FtcGxlKG1vZGVsVGltZVRyYW5zZm9ybWVyKHNhbXBsZS50cyksc2FtcGxlLnBvd2VySW5XKTt9fSxwYXJzZVRyYWNlXyh0cmFjZSl7Y29uc3QgbGluZXM9dHJhY2Uuc3BsaXQoJ1xuJyk7Zm9yKGxldCBsaW5lIG9mIGxpbmVzKXtsaW5lPWxpbmUudHJpbSgpO2lmKGxpbmUubGVuZ3RoPT09MCljb250aW51ZTtpZihsaW5lLnN0YXJ0c1dpdGgoJyMnKSljb250aW51ZTtjb25zdCBncm91cHM9YmF0dG9yRGF0YUxpbmVSRS5leGVjKGxpbmUpO2lmKCFncm91cHMpe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J3BhcnNlX2Vycm9yJyxtZXNzYWdlOidVbnJlY29nbml6ZWQgbGluZSBpbiBCYXR0T3IgdHJhY2U6ICcrbGluZX0pO2NvbnRpbnVlO30KY29uc3QgdHM9cGFyc2VGbG9hdChncm91cHNbMV0pO2NvbnN0IHZvbHRhZ2VJblY9dHIuYi5jb252ZXJ0VW5pdChwYXJzZUZsb2F0KGdyb3Vwc1syXSksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JTExJLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5OT05FKTtjb25zdCBjdXJyZW50SW5BPXRyLmIuY29udmVydFVuaXQocGFyc2VGbG9hdChncm91cHNbM10pLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSk7Y29uc3Qgc3luY0lkPWdyb3Vwc1s0XTtpZihzeW5jSWQpe3RoaXMuc3luY1RpbWVzdGFtcHNCeUlkXy5zZXQoc3luY0lkLHRzKTt9CmlmKHZvbHRhZ2VJblY8MHx8Y3VycmVudEluQTwwKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOidwYXJzZV9lcnJvcicsbWVzc2FnZTonVGhlIGZvbGxvd2luZyBsaW5lIGluIHRoZSBCYXR0T3IgdHJhY2UgaGFzIGEgbmVnYXRpdmUgJysndm9sdGFnZSBvciBjdXJyZW50LCBuZWl0aGVyIG9mIHdoaWNoIGFyZSBhbGxvd2VkOiAnK2xpbmUrJy4gQSBjb21tb24gY2F1c2Ugb2YgdGhpcyBpcyB0aGF0IHRoZSBkZXZpY2UgaXMgY2hhcmdpbmcgJysnd2hpbGUgdGhlIHRyYWNlIGlzIGJlaW5nIHJlY29yZGVkLid9KTtjb250aW51ZTt9CnRoaXMuc2FtcGxlc18ucHVzaChuZXcgU2FtcGxlKHRzLHZvbHRhZ2VJblYsY3VycmVudEluQSkpO319fTtmdW5jdGlvbiBTYW1wbGUodHMsdm9sdGFnZUluVixjdXJyZW50SW5BKXt0aGlzLnRzPXRzO3RoaXMudm9sdGFnZUluVj12b2x0YWdlSW5WO3RoaXMuY3VycmVudEluQT1jdXJyZW50SW5BO30KU2FtcGxlLnByb3RvdHlwZT17Z2V0IHBvd2VySW5XKCl7cmV0dXJuIHRoaXMudm9sdGFnZUluVip0aGlzLmN1cnJlbnRJbkE7fX07dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucmVnaXN0ZXIoQmF0dG9ySW1wb3J0ZXIpO3JldHVybntCYXR0b3JJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5pbXBvcnRlci5kZG1zJyxmdW5jdGlvbigpe2NvbnN0IGtQaWQ9MDtjb25zdCBrQ2F0ZWdvcnk9J2phdmEnO2NvbnN0IGtNZXRob2RMdXRFbmRNYXJrZXI9J1xuKmVuZFxuJztjb25zdCBrVGhyZWFkc1N0YXJ0PSdcbip0aHJlYWRzXG4nO2NvbnN0IGtNZXRob2RzU3RhcnQ9J1xuKm1ldGhvZHNcbic7Y29uc3Qga1RyYWNlTWV0aG9kRW50ZXI9MHgwMDtjb25zdCBrVHJhY2VNZXRob2RFeGl0PTB4MDE7Y29uc3Qga1RyYWNlVW5yb2xsPTB4MDI7Y29uc3Qga1RyYWNlTWV0aG9kQWN0aW9uTWFzaz0weDAzO2NvbnN0IGtUcmFjZUhlYWRlckxlbmd0aD0zMjtjb25zdCBrVHJhY2VNYWdpY1ZhbHVlPTB4NTc0ZjRjNTM7Y29uc3Qga1RyYWNlVmVyc2lvblNpbmdsZUNsb2NrPTI7Y29uc3Qga1RyYWNlVmVyc2lvbkR1YWxDbG9jaz0zO2NvbnN0IGtUcmFjZVJlY29yZFNpemVTaW5nbGVDbG9jaz0xMDtjb25zdCBrVHJhY2VSZWNvcmRTaXplRHVhbENsb2NrPTE0O2Z1bmN0aW9uIFJlYWRlcihzdHJpbmdQYXlsb2FkKXt0aGlzLnBvc2l0aW9uXz0wO3RoaXMuZGF0YV89bmV3IFVpbnQ4QXJyYXkoc3RyaW5nUGF5bG9hZC5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8c3RyaW5nUGF5bG9hZC5sZW5ndGg7KytpKXt0aGlzLmRhdGFfW2ldPXN0cmluZ1BheWxvYWQuY2hhckNvZGVBdChpKTt9fQpSZWFkZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSx1aW50OCgpe2NvbnN0IHJlc3VsdD10aGlzLmRhdGFfW3RoaXMucG9zaXRpb25fXTt0aGlzLnBvc2l0aW9uXys9MTtyZXR1cm4gcmVzdWx0O30sdWludDE2KCl7bGV0IHJlc3VsdD0wO3Jlc3VsdCs9dGhpcy51aW50OCgpO3Jlc3VsdCs9dGhpcy51aW50OCgpPDw4O3JldHVybiByZXN1bHQ7fSx1aW50MzIoKXtsZXQgcmVzdWx0PTA7cmVzdWx0Kz10aGlzLnVpbnQ4KCk7cmVzdWx0Kz10aGlzLnVpbnQ4KCk8PDg7cmVzdWx0Kz10aGlzLnVpbnQ4KCk8PDE2O3Jlc3VsdCs9dGhpcy51aW50OCgpPDwyNDtyZXR1cm4gcmVzdWx0O30sdWludDY0KCl7Y29uc3QgbG93PXRoaXMudWludDMyKCk7Y29uc3QgaGlnaD10aGlzLnVpbnQzMigpO2NvbnN0IGxvd1N0cj0oJzAwMDAwMDAnK2xvdy50b1N0cmluZygxNikpLnN1YnN0cigtOCk7Y29uc3QgaGlnaFN0cj0oJzAwMDAwMDAnK2hpZ2gudG9TdHJpbmcoMTYpKS5zdWJzdHIoLTgpO2NvbnN0IHJlc3VsdD1oaWdoU3RyK2xvd1N0cjtyZXR1cm4gcmVzdWx0O30sc2Vla1RvKHBvc2l0aW9uKXt0aGlzLnBvc2l0aW9uXz1wb3NpdGlvbjt9LGhhc01vcmUoKXtyZXR1cm4gdGhpcy5wb3NpdGlvbl88dGhpcy5kYXRhXy5sZW5ndGg7fX07ZnVuY3Rpb24gRGRtc0ltcG9ydGVyKG1vZGVsLGRhdGEpe3RoaXMuaW1wb3J0UHJpb3JpdHk9Mzt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLmRhdGFfPWRhdGE7fQpEZG1zSW1wb3J0ZXIuY2FuSW1wb3J0PWZ1bmN0aW9uKGRhdGEpe2lmKHR5cGVvZihkYXRhKT09PSdzdHJpbmcnfHxkYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtjb25zdCBoZWFkZXI9ZGF0YS5zbGljZSgwLDEwMDApO3JldHVybiBoZWFkZXIuc3RhcnRzV2l0aCgnKnZlcnNpb25cbicpJiZoZWFkZXIuaW5kZXhPZignXG52bT0nKT49MCYmaGVhZGVyLmluZGV4T2Yoa1RocmVhZHNTdGFydCk+PTA7fQpyZXR1cm4gZmFsc2U7fTtEZG1zSW1wb3J0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuaW1wb3J0ZXIuSW1wb3J0ZXIucHJvdG90eXBlLGdldCBpbXBvcnRlck5hbWUoKXtyZXR1cm4nRGRtc0ltcG9ydGVyJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LGltcG9ydEV2ZW50cygpe2NvbnN0IGRpdmlkZXI9dGhpcy5kYXRhXy5pbmRleE9mKGtNZXRob2RMdXRFbmRNYXJrZXIpKwprTWV0aG9kTHV0RW5kTWFya2VyLmxlbmd0aDt0aGlzLm1ldGFkYXRhXz10aGlzLmRhdGFfLnNsaWNlKDAsZGl2aWRlcik7dGhpcy5tZXRob2RzXz17fTt0aGlzLnBhcnNlVGhyZWFkcygpO3RoaXMucGFyc2VNZXRob2RzKCk7Y29uc3QgdHJhY2VSZWFkZXI9bmV3IFJlYWRlcih0aGlzLmRhdGFfLnNsaWNlKGRpdmlkZXIpKTtjb25zdCBtYWdpYz10cmFjZVJlYWRlci51aW50MzIoKTtpZihtYWdpYyE9PWtUcmFjZU1hZ2ljVmFsdWUpe3Rocm93IEVycm9yKCdGYWlsZWQgdG8gbWF0Y2ggbWFnaWMgdmFsdWUnKTt9CnRoaXMudmVyc2lvbl89dHJhY2VSZWFkZXIudWludDE2KCk7aWYodGhpcy52ZXJzaW9uXyE9PWtUcmFjZVZlcnNpb25EdWFsQ2xvY2spe3Rocm93IEVycm9yKCdVbmtub3duIHZlcnNpb24nKTt9CmNvbnN0IGRhdGFPZmZlc3Q9dHJhY2VSZWFkZXIudWludDE2KCk7Y29uc3Qgc3RhcnREYXRlVGltZT10cmFjZVJlYWRlci51aW50NjQoKTtjb25zdCByZWNvcmRTaXplPXRyYWNlUmVhZGVyLnVpbnQxNigpO3RyYWNlUmVhZGVyLnNlZWtUbyhkYXRhT2ZmZXN0KTt3aGlsZSh0cmFjZVJlYWRlci5oYXNNb3JlKCkpe3RoaXMucGFyc2VUcmFjZUVudHJ5KHRyYWNlUmVhZGVyKTt9fSxwYXJzZVRyYWNlRW50cnkocmVhZGVyKXtjb25zdCB0aWQ9cmVhZGVyLnVpbnQxNigpO2NvbnN0IG1ldGhvZFBhY2tlZD1yZWFkZXIudWludDMyKCk7Y29uc3QgY3B1U2luY2VTdGFydD1yZWFkZXIudWludDMyKCk7Y29uc3Qgd2FsbENsb2NrU2luY2VTdGFydD1yZWFkZXIudWludDMyKCk7bGV0IG1ldGhvZD1tZXRob2RQYWNrZWQmfmtUcmFjZU1ldGhvZEFjdGlvbk1hc2s7Y29uc3QgYWN0aW9uPW1ldGhvZFBhY2tlZCZrVHJhY2VNZXRob2RBY3Rpb25NYXNrO2NvbnN0IHRocmVhZD10aGlzLmdldFRpZCh0aWQpO21ldGhvZD10aGlzLmdldE1ldGhvZE5hbWUobWV0aG9kKTtpZihhY3Rpb249PT1rVHJhY2VNZXRob2RFbnRlcil7dGhyZWFkLnNsaWNlR3JvdXAuYmVnaW5TbGljZShrQ2F0ZWdvcnksbWV0aG9kLHdhbGxDbG9ja1NpbmNlU3RhcnQsdW5kZWZpbmVkLGNwdVNpbmNlU3RhcnQpO31lbHNlIGlmKHRocmVhZC5zbGljZUdyb3VwLm9wZW5TbGljZUNvdW50KXt0aHJlYWQuc2xpY2VHcm91cC5lbmRTbGljZSh3YWxsQ2xvY2tTaW5jZVN0YXJ0LGNwdVNpbmNlU3RhcnQpO319LHBhcnNlVGhyZWFkcygpe2xldCB0aHJlYWRzPXRoaXMubWV0YWRhdGFfLnNsaWNlKHRoaXMubWV0YWRhdGFfLmluZGV4T2Yoa1RocmVhZHNTdGFydCkrCmtUaHJlYWRzU3RhcnQubGVuZ3RoKTt0aHJlYWRzPXRocmVhZHMuc2xpY2UoMCx0aHJlYWRzLmluZGV4T2YoJ1xuKicpKTt0aHJlYWRzPXRocmVhZHMuc3BsaXQoJ1xuJyk7dGhyZWFkcy5mb3JFYWNoKHRoaXMucGFyc2VUaHJlYWQuYmluZCh0aGlzKSk7fSxwYXJzZVRocmVhZCh0aHJlYWRMaW5lKXtjb25zdCB0aWQ9dGhyZWFkTGluZS5zbGljZSgwLHRocmVhZExpbmUuaW5kZXhPZignXHQnKSk7Y29uc3QgdGhyZWFkPXRoaXMuZ2V0VGlkKHBhcnNlSW50KHRpZCkpO3RocmVhZC5uYW1lPXRocmVhZExpbmUuc2xpY2UodGhyZWFkTGluZS5pbmRleE9mKCdcdCcpKzEpO30sZ2V0VGlkKHRpZCl7cmV0dXJuIHRoaXMubW9kZWxfLmdldE9yQ3JlYXRlUHJvY2VzcyhrUGlkKS5nZXRPckNyZWF0ZVRocmVhZCh0aWQpO30scGFyc2VNZXRob2RzKCl7bGV0IG1ldGhvZHM9dGhpcy5tZXRhZGF0YV8uc2xpY2UodGhpcy5tZXRhZGF0YV8uaW5kZXhPZihrTWV0aG9kc1N0YXJ0KSsKa01ldGhvZHNTdGFydC5sZW5ndGgpO21ldGhvZHM9bWV0aG9kcy5zbGljZSgwLG1ldGhvZHMuaW5kZXhPZignXG4qJykpO21ldGhvZHM9bWV0aG9kcy5zcGxpdCgnXG4nKTttZXRob2RzLmZvckVhY2godGhpcy5wYXJzZU1ldGhvZC5iaW5kKHRoaXMpKTt9LHBhcnNlTWV0aG9kKG1ldGhvZExpbmUpe2NvbnN0IGRhdGE9bWV0aG9kTGluZS5zcGxpdCgnXHQnKTtjb25zdCBtZXRob2RJZD1wYXJzZUludChkYXRhWzBdKTtjb25zdCBtZXRob2ROYW1lPWRhdGFbMV0rJy4nK2RhdGFbMl0rZGF0YVszXTt0aGlzLmFkZE1ldGhvZChtZXRob2RJZCxtZXRob2ROYW1lKTt9LGFkZE1ldGhvZChtZXRob2RJZCxtZXRob2ROYW1lKXt0aGlzLm1ldGhvZHNfW21ldGhvZElkXT1tZXRob2ROYW1lO30sZ2V0TWV0aG9kTmFtZShtZXRob2RJZCl7cmV0dXJuIHRoaXMubWV0aG9kc19bbWV0aG9kSWRdO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKERkbXNJbXBvcnRlcik7cmV0dXJue0RkbXNJbXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5hdWRpdHMnLGZ1bmN0aW9uKCl7Y2xhc3MgTG93TWVtb3J5QXVkaXRvciBleHRlbmRzIHRyLmMuQXVkaXRvcntjb25zdHJ1Y3Rvcihtb2RlbCl7c3VwZXIoKTt0aGlzLm1vZGVsXz1tb2RlbDt9CnJ1bkFubm90YXRlKCl7dGhpcy5tb2RlbF8uZGV2aWNlLmxvd01lbW9yeUV2ZW50cz10aGlzLmdldExvd01lbW9yeUV2ZW50c18oKTt9CmdldExvd01lbW9yeUV2ZW50c18oKXtjb25zdCBtb2RlbD10aGlzLm1vZGVsXztjb25zdCByZXN1bHQ9W107Zm9yKGNvbnN0IHByb2Nlc3Mgb2YgbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkpe2Zvcihjb25zdCBlIG9mIHByb2Nlc3MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighKGUgaW5zdGFuY2VvZiB0ci5tb2RlbC5UaHJlYWRTbGljZSl8fGUuZHVyYXRpb24hPT0wKXtjb250aW51ZTt9CmlmKGUuY2F0ZWdvcnkhPT0nbG93bWVtb3J5Jyl7Y29udGludWU7fQpyZXN1bHQucHVzaChlKTt9fQpyZXR1cm4gcmVzdWx0O319CnRyLmMuQXVkaXRvci5yZWdpc3RlcihMb3dNZW1vcnlBdWRpdG9yKTtyZXR1cm57TG93TWVtb3J5QXVkaXRvcn07fSk7J3VzZSBzdHJpY3QnO2Z1bmN0aW9uIGZpbHRlckR1cGxpY2F0ZVRpbWVzdGFtcHModGltZXN0YW1wcyl7Y29uc3QgZGVkdXBlZFRpbWVzdGFtcHM9W107bGV0IGxhc3RUcz0wO2Zvcihjb25zdCB0cyBvZiB0aW1lc3RhbXBzKXtpZih0cy1sYXN0VHM+PTEpe2RlZHVwZWRUaW1lc3RhbXBzLnB1c2godHMpO2xhc3RUcz10czt9fQpyZXR1cm4gZGVkdXBlZFRpbWVzdGFtcHM7fQp0ci5leHBvcnRUbygndHIuZS5hdWRpdHMnLGZ1bmN0aW9uKCl7Y29uc3QgVlNZTkNfQ09VTlRFUl9QUkVDSVNJT05TPXsnYW5kcm9pZC5WU1lOQy1hcHAnOjE1LCdhbmRyb2lkLlZTWU5DJzoxNX07Y29uc3QgVlNZTkNfU0xJQ0VfUFJFQ0lTSU9OUz17J1JlbmRlcldpZGdldEhvc3RWaWV3QW5kcm9pZDo6T25WU3luYyc6NSwnVlNZTkMnOjEwLCd2YmxhbmsnOjEwLCdEaXNwbGF5TGlua01hYzo6R2V0VlN5bmNQYXJhbWV0ZXJzJzo1fTtjb25zdCBCRUdJTl9GUkFNRV9TTElDRV9QUkVDSVNJT049eydEaXNwbGF5U2NoZWR1bGVyOjpCZWdpbkZyYW1lJzoxMH07ZnVuY3Rpb24gVlN5bmNBdWRpdG9yKG1vZGVsKXt0ci5jLkF1ZGl0b3IuY2FsbCh0aGlzLG1vZGVsKTt9ClZTeW5jQXVkaXRvci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5jLkF1ZGl0b3IucHJvdG90eXBlLHJ1bkFubm90YXRlKCl7dGhpcy5tb2RlbC5kZXZpY2UudlN5bmNUaW1lc3RhbXBzPXRoaXMuZmluZFZTeW5jVGltZXN0YW1wcyh0aGlzLm1vZGVsKTt9LGZpbmRWU3luY1RpbWVzdGFtcHMobW9kZWwpe2xldCB0aW1lcz1bXTtsZXQgbWF4UHJlY2lzaW9uPU51bWJlci5ORUdBVElWRV9JTkZJTklUWTtsZXQgbWF4VGl0bGU9dW5kZWZpbmVkO2Z1bmN0aW9uIHVzZUluc3RlYWQodGl0bGUscHJlY2lzaW9ucyl7Y29uc3QgcHJlY2lzaW9uPXByZWNpc2lvbnNbdGl0bGVdO2lmKHByZWNpc2lvbj09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7aWYodGl0bGU9PT1tYXhUaXRsZSlyZXR1cm4gdHJ1ZTtpZihwcmVjaXNpb248PW1heFByZWNpc2lvbil7aWYocHJlY2lzaW9uPT09bWF4UHJlY2lzaW9uKXttb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidWU3luY0F1ZGl0b3InLG1lc3NhZ2U6J0VuY291bnRlcmVkIHR3byBkaWZmZXJlbnQgVlN5bmMgZXZlbnRzICgnKwptYXhUaXRsZSsnLCAnK3RpdGxlKycpIHdpdGggdGhlIHNhbWUgcHJlY2lzaW9uLCAnKydpZ25vcmluZyB0aGUgbmV3ZXIgb25lICgnK3RpdGxlKycpJyxzaG93VG9Vc2VyOmZhbHNlLH0pO30KcmV0dXJuIGZhbHNlO30KbWF4UHJlY2lzaW9uPXByZWNpc2lvbjttYXhUaXRsZT10aXRsZTt0aW1lcz1bXTtyZXR1cm4gdHJ1ZTt9CmZvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPW1vZGVsLnByb2Nlc3Nlc1twaWRdO2Zvcihjb25zdCBjaWQgaW4gcHJvY2Vzcy5jb3VudGVycyl7aWYodXNlSW5zdGVhZChjaWQsVlNZTkNfQ09VTlRFUl9QUkVDSVNJT05TKSl7Y29uc3QgY291bnRlcj1wcm9jZXNzLmNvdW50ZXJzW2NpZF07Zm9yKGxldCBpPTA7aTxjb3VudGVyLnNlcmllcy5sZW5ndGg7aSsrKXtjb25zdCBzZXJpZXM9Y291bnRlci5zZXJpZXNbaV07QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkodGltZXMsc2VyaWVzLnRpbWVzdGFtcHMpO319fQpmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO2ZvcihsZXQgaT0wO2k8dGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzLmxlbmd0aDtpKyspe2NvbnN0IHNsaWNlPXRocmVhZC5zbGljZUdyb3VwLnNsaWNlc1tpXTtpZih1c2VJbnN0ZWFkKHNsaWNlLnRpdGxlLFZTWU5DX1NMSUNFX1BSRUNJU0lPTlMpKXt0aW1lcy5wdXNoKHNsaWNlLnN0YXJ0KTt9ZWxzZSBpZih1c2VJbnN0ZWFkKHNsaWNlLnRpdGxlLEJFR0lOX0ZSQU1FX1NMSUNFX1BSRUNJU0lPTikmJnNsaWNlLmFyZ3MuYXJncyYmc2xpY2UuYXJncy5hcmdzLmZyYW1lX3RpbWVfdXMpe3RpbWVzLnB1c2goc2xpY2UuYXJncy5hcmdzLmZyYW1lX3RpbWVfdXMvMTAwMC4wKTt9fX19CnRpbWVzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC15O30pO3JldHVybiBmaWx0ZXJEdXBsaWNhdGVUaW1lc3RhbXBzKHRpbWVzKTt9fTt0ci5jLkF1ZGl0b3IucmVnaXN0ZXIoVlN5bmNBdWRpdG9yKTtyZXR1cm57VlN5bmNBdWRpdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBFbXB0eUltcG9ydGVyKGV2ZW50cyl7dGhpcy5pbXBvcnRQcmlvcml0eT0wO30KRW1wdHlJbXBvcnRlci5jYW5JbXBvcnQ9ZnVuY3Rpb24oZXZlbnREYXRhKXtpZihldmVudERhdGEgaW5zdGFuY2VvZiBBcnJheSYmZXZlbnREYXRhLmxlbmd0aD09PTApe3JldHVybiB0cnVlO30KaWYodHlwZW9mKGV2ZW50RGF0YSk9PT0nc3RyaW5nJ3x8ZXZlbnREYXRhIGluc3RhbmNlb2YgU3RyaW5nKXtyZXR1cm4gZXZlbnREYXRhLmxlbmd0aD09PTA7fQpyZXR1cm4gZmFsc2U7fTtFbXB0eUltcG9ydGVyLnByb3RvdHlwZT17X19wcm90b19fOnRyLmltcG9ydGVyLkltcG9ydGVyLnByb3RvdHlwZSxnZXQgaW1wb3J0ZXJOYW1lKCl7cmV0dXJuJ0VtcHR5SW1wb3J0ZXInO319O3RyLmltcG9ydGVyLkltcG9ydGVyLnJlZ2lzdGVyKEVtcHR5SW1wb3J0ZXIpO3JldHVybntFbXB0eUltcG9ydGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tb2RlbC51bScsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbmltYXRpb25FeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbil7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbik7dGhpcy5mcmFtZUV2ZW50c189dW5kZWZpbmVkO30KQW5pbWF0aW9uRXhwZWN0YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnByb3RvdHlwZSxjb25zdHJ1Y3RvcjpBbmltYXRpb25FeHBlY3RhdGlvbixnZXQgZnJhbWVFdmVudHMoKXtpZih0aGlzLmZyYW1lRXZlbnRzXyl7cmV0dXJuIHRoaXMuZnJhbWVFdmVudHNfO30KdGhpcy5mcmFtZUV2ZW50c189bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKGV2ZW50LnRpdGxlPT09dHIubW9kZWwuaGVscGVycy5JTVBMX1JFTkRFUklOR19TVEFUUyl7dGhpcy5mcmFtZUV2ZW50c18ucHVzaChldmVudCk7fX0sdGhpcyk7cmV0dXJuIHRoaXMuZnJhbWVFdmVudHNfO319O3RyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5zdWJUeXBlcy5yZWdpc3RlcihBbmltYXRpb25FeHBlY3RhdGlvbix7c3RhZ2VUaXRsZTonQW5pbWF0aW9uJyxjb2xvcklkOnRyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvclJlc2VydmVkTmFtZSgncmFpbF9hbmltYXRpb24nKX0pO3JldHVybntBbmltYXRpb25FeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUHJvdG9FeHBlY3RhdGlvbih0eXBlLGluaXRpYXRvclR5cGUpe3RoaXMudHlwZT10eXBlO3RoaXMuaW5pdGlhdG9yVHlwZT1pbml0aWF0b3JUeXBlO3RoaXMuc3RhcnQ9SW5maW5pdHk7dGhpcy5lbmQ9LUluZmluaXR5O3RoaXMuYXNzb2NpYXRlZEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTt0aGlzLmlzQW5pbWF0aW9uQmVnaW49ZmFsc2U7fQpQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEU9J3InO1Byb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEU9J2EnO1Byb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFPSdpZ25vcmVkJztjb25zdCBJTklUSUFUT1JfSElFUkFSQ0hZPVt0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5QSU5DSCx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5GTElORyx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5NT1VTRV9XSEVFTCx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5TQ1JPTEwsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuVlIsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuVklERU8sdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuV0VCR0wsdHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuQ1NTLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLk1PVVNFLHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLktFWUJPQVJELHRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLlRBUCx0ci5tb2RlbC51bS5JTklUSUFUT1JfVFlQRS5UT1VDSF07ZnVuY3Rpb24gY29tYmluZUluaXRpYXRvclR5cGVzKHRpdGxlMSx0aXRsZTIpe2Zvcihjb25zdCBpdGVtIG9mIElOSVRJQVRPUl9ISUVSQVJDSFkpe2lmKHRpdGxlMT09PWl0ZW18fHRpdGxlMj09PWl0ZW0pcmV0dXJuIGl0ZW07fQp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdGl0bGVzIGluIGNvbWJpbmVJbml0aWF0b3JUeXBlcycpO30KUHJvdG9FeHBlY3RhdGlvbi5wcm90b3R5cGU9e2dldCBpc1ZhbGlkKCl7cmV0dXJuIHRoaXMuZW5kPnRoaXMuc3RhcnQ7fSxjb250YWluc1R5cGVOYW1lcyh0eXBlTmFtZXMpe3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHMuc29tZSh4PT50eXBlTmFtZXMuaW5kZXhPZih4LnR5cGVOYW1lKT49MCk7fSxjb250YWluc1NsaWNlVGl0bGUodGl0bGUpe3JldHVybiB0aGlzLmFzc29jaWF0ZWRFdmVudHMuc29tZSh4PT50aXRsZT09PXgudGl0bGUpO30sY3JlYXRlSW50ZXJhY3Rpb25SZWNvcmQobW9kZWwpe2lmKHRoaXMudHlwZSE9PVByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFJiYhdGhpcy5pc1ZhbGlkKXttb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidQcm90b0V4cGVjdGF0aW9uJyxtZXNzYWdlOidQbGVhc2UgZmlsZSBhIGJ1ZyB3aXRoIHRoaXMgdHJhY2UuICcrdGhpcy5kZWJ1ZygpLHNob3dUb1VzZXI6dHJ1ZX0pO3JldHVybiB1bmRlZmluZWQ7fQpjb25zdCBkdXJhdGlvbj10aGlzLmVuZC10aGlzLnN0YXJ0O2xldCBpcj11bmRlZmluZWQ7c3dpdGNoKHRoaXMudHlwZSl7Y2FzZSBQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEU6aXI9bmV3IHRyLm1vZGVsLnVtLlJlc3BvbnNlRXhwZWN0YXRpb24obW9kZWwsdGhpcy5pbml0aWF0b3JUeXBlLHRoaXMuc3RhcnQsZHVyYXRpb24sdGhpcy5pc0FuaW1hdGlvbkJlZ2luKTticmVhaztjYXNlIFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEU6aXI9bmV3IHRyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9uKG1vZGVsLHRoaXMuaW5pdGlhdG9yVHlwZSx0aGlzLnN0YXJ0LGR1cmF0aW9uKTticmVhazt9CmlmKCFpcilyZXR1cm4gdW5kZWZpbmVkO2lyLnNvdXJjZUV2ZW50cy5hZGRFdmVudFNldCh0aGlzLmFzc29jaWF0ZWRFdmVudHMpO2Z1bmN0aW9uIHB1c2hBc3NvY2lhdGVkRXZlbnRzKGV2ZW50KXtpci5hc3NvY2lhdGVkRXZlbnRzLnB1c2goZXZlbnQpO2lmKGV2ZW50LmFzc29jaWF0ZWRFdmVudHMpe2lyLmFzc29jaWF0ZWRFdmVudHMuYWRkRXZlbnRTZXQoZXZlbnQuYXNzb2NpYXRlZEV2ZW50cyk7fX0KdGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe3B1c2hBc3NvY2lhdGVkRXZlbnRzKGV2ZW50KTtpZihldmVudC5zdWJTbGljZXMpe2V2ZW50LnN1YlNsaWNlcy5mb3JFYWNoKHB1c2hBc3NvY2lhdGVkRXZlbnRzKTt9fSk7cmV0dXJuIGlyO30sbWVyZ2Uob3RoZXIpe3RoaXMuaW5pdGlhdG9yVHlwZT1jb21iaW5lSW5pdGlhdG9yVHlwZXModGhpcy5pbml0aWF0b3JUeXBlLG90aGVyLmluaXRpYXRvclR5cGUpO3RoaXMuYXNzb2NpYXRlZEV2ZW50cy5hZGRFdmVudFNldChvdGhlci5hc3NvY2lhdGVkRXZlbnRzKTt0aGlzLnN0YXJ0PU1hdGgubWluKHRoaXMuc3RhcnQsb3RoZXIuc3RhcnQpO3RoaXMuZW5kPU1hdGgubWF4KHRoaXMuZW5kLG90aGVyLmVuZCk7aWYob3RoZXIuaXNBbmltYXRpb25CZWdpbil7dGhpcy5pc0FuaW1hdGlvbkJlZ2luPXRydWU7fX0scHVzaEV2ZW50KGV2ZW50KXt0aGlzLnN0YXJ0PU1hdGgubWluKHRoaXMuc3RhcnQsZXZlbnQuc3RhcnQpO3RoaXMuZW5kPU1hdGgubWF4KHRoaXMuZW5kLGV2ZW50LmVuZCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLnB1c2goZXZlbnQpO30scHVzaFNhbXBsZShzYW1wbGUpe3RoaXMuc3RhcnQ9TWF0aC5taW4odGhpcy5zdGFydCxzYW1wbGUudGltZXN0YW1wKTt0aGlzLmVuZD1NYXRoLm1heCh0aGlzLmVuZCxzYW1wbGUudGltZXN0YW1wKTt0aGlzLmFzc29jaWF0ZWRFdmVudHMucHVzaChzYW1wbGUpO30sY29udGFpbnNUaW1lc3RhbXBJbmNsdXNpdmUodGltZXN0YW1wKXtyZXR1cm4odGhpcy5zdGFydDw9dGltZXN0YW1wKSYmKHRpbWVzdGFtcDw9dGhpcy5lbmQpO30saW50ZXJzZWN0cyhvdGhlcil7cmV0dXJuKG90aGVyLnN0YXJ0PHRoaXMuZW5kKSYmKG90aGVyLmVuZD50aGlzLnN0YXJ0KTt9LGlzTmVhcihldmVudCx0aHJlc2hvbGQpe3JldHVybih0aGlzLmVuZCt0aHJlc2hvbGQpPmV2ZW50LnN0YXJ0O30sZGVidWcoKXtsZXQgZGVidWdTdHJpbmc9dGhpcy50eXBlKycoJztkZWJ1Z1N0cmluZys9cGFyc2VJbnQodGhpcy5zdGFydCkrJyAnO2RlYnVnU3RyaW5nKz1wYXJzZUludCh0aGlzLmVuZCk7dGhpcy5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2RlYnVnU3RyaW5nKz0nICcrZXZlbnQudHlwZU5hbWU7fSk7cmV0dXJuIGRlYnVnU3RyaW5nKycpJzt9fTtyZXR1cm57UHJvdG9FeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgUHJvdG9FeHBlY3RhdGlvbj10ci5pbXBvcnRlci5Qcm90b0V4cGVjdGF0aW9uO2NvbnN0IElOSVRJQVRPUl9UWVBFPXRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFO2NvbnN0IElOUFVUX1RZUEU9dHIuZS5jYy5JTlBVVF9FVkVOVF9UWVBFX05BTUVTO2NvbnN0IEtFWUJPQVJEX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuQ0hBUixJTlBVVF9UWVBFLktFWV9ET1dOX1JBVyxJTlBVVF9UWVBFLktFWV9ET1dOLElOUFVUX1RZUEUuS0VZX1VQXTtjb25zdCBNT1VTRV9SRVNQT05TRV9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLkNMSUNLLElOUFVUX1RZUEUuQ09OVEVYVF9NRU5VXTtjb25zdCBNT1VTRV9XSEVFTF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLk1PVVNFX1dIRUVMXTtjb25zdCBNT1VTRV9EUkFHX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuTU9VU0VfRE9XTixJTlBVVF9UWVBFLk1PVVNFX01PVkUsSU5QVVRfVFlQRS5NT1VTRV9VUF07Y29uc3QgVEFQX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuVEFQLElOUFVUX1RZUEUuVEFQX0NBTkNFTCxJTlBVVF9UWVBFLlRBUF9ET1dOXTtjb25zdCBQSU5DSF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLlBJTkNIX0JFR0lOLElOUFVUX1RZUEUuUElOQ0hfRU5ELElOUFVUX1RZUEUuUElOQ0hfVVBEQVRFXTtjb25zdCBGTElOR19UWVBFX05BTUVTPVtJTlBVVF9UWVBFLkZMSU5HX0NBTkNFTCxJTlBVVF9UWVBFLkZMSU5HX1NUQVJUXTtjb25zdCBUT1VDSF9UWVBFX05BTUVTPVtJTlBVVF9UWVBFLlRPVUNIX0VORCxJTlBVVF9UWVBFLlRPVUNIX01PVkUsSU5QVVRfVFlQRS5UT1VDSF9TVEFSVF07Y29uc3QgU0NST0xMX1RZUEVfTkFNRVM9W0lOUFVUX1RZUEUuU0NST0xMX0JFR0lOLElOUFVUX1RZUEUuU0NST0xMX0VORCxJTlBVVF9UWVBFLlNDUk9MTF9VUERBVEVdO2NvbnN0IEFMTF9IQU5ETEVEX1RZUEVfTkFNRVM9W10uY29uY2F0KEtFWUJPQVJEX1RZUEVfTkFNRVMsTU9VU0VfUkVTUE9OU0VfVFlQRV9OQU1FUyxNT1VTRV9XSEVFTF9UWVBFX05BTUVTLE1PVVNFX0RSQUdfVFlQRV9OQU1FUyxQSU5DSF9UWVBFX05BTUVTLFRBUF9UWVBFX05BTUVTLEZMSU5HX1RZUEVfTkFNRVMsVE9VQ0hfVFlQRV9OQU1FUyxTQ1JPTExfVFlQRV9OQU1FUyk7Y29uc3QgUkVOREVSRVJfRkxJTkdfVElUTEU9J0lucHV0SGFuZGxlclByb3h5OjpIYW5kbGVHZXN0dXJlRmxpbmc6OnN0YXJ0ZWQnO2NvbnN0IFBMQVlCQUNLX0VWRU5UX1RJVExFPSdWaWRlb1BsYXliYWNrJztjb25zdCBDU1NfQU5JTUFUSU9OX1RJVExFPSdBbmltYXRpb24nO2NvbnN0IFZSX0NPVU5URVJfTkFNRVM9WydncHUuV2ViVlIgRlBTJywnZ3B1LldlYlZSIGZyYW1lIHRpbWUgKG1zKScsJ2dwdS5XZWJWUiBwb3NlIHByZWRpY3Rpb24gKG1zKScsJ2dwdS5XZWJYUiBGUFMnLF07Y29uc3QgVlJfRVhQRUNUQVRJT05fRVZFTlRTPXsnVnIuQWNxdWlyZUd2ckZyYW1lJzp7J2hpc3RvZ3JhbU5hbWUnOidhY3F1aXJlX2ZyYW1lJywnZGVzY3JpcHRpb24nOidEdXJhdGlvbiBhY3F1aXJlIGEgZnJhbWUgZnJvbSBHVlInLCdoYXNDcHVUaW1lJzp0cnVlLH0sJ1ZyLkRyYXdGcmFtZSc6eydoaXN0b2dyYW1OYW1lJzonZHJhd19mcmFtZScsJ2Rlc2NyaXB0aW9uJzonRHVyYXRpb24gdG8gcmVuZGVyIG9uZSBmcmFtZScsJ2hhc0NwdVRpbWUnOnRydWUsfSwnVnIuUG9zdFN1Ym1pdERyYXdPbkdwdSc6eydoaXN0b2dyYW1OYW1lJzoncG9zdF9zdWJtaXRfZHJhd19vbl9ncHUnLCdkZXNjcmlwdGlvbic6J0R1cmF0aW9uIHRvIGRyYXcgYSBmcmFtZSBvbiBHUFUgcG9zdCBzdWJtaXQgdG8gJysnR1ZSLiBOb3RlIHRoaXMgZHVyYXRpb24gbWF5IGluY2x1ZGUgdGltZSBzcGVudCBvbiAnKydyZXByb2plY3Rpb24nLCdoYXNDcHVUaW1lJzpmYWxzZSx9LCdWci5Qcm9jZXNzQ29udHJvbGxlcklucHV0Jzp7J2hpc3RvZ3JhbU5hbWUnOid1cGRhdGVfY29udHJvbGxlcicsJ2Rlc2NyaXB0aW9uJzonRHVyYXRpb24gdG8gcXVlcnkgaW5wdXQgZnJvbSB0aGUgY29udHJvbGxlcicsJ2hhc0NwdVRpbWUnOnRydWUsfSwnVnIuUHJvY2Vzc0NvbnRyb2xsZXJJbnB1dEZvcldlYlhyJzp7J2hpc3RvZ3JhbU5hbWUnOid1cGRhdGVfY29udHJvbGxlcl93ZWJ4cicsJ2Rlc2NyaXB0aW9uJzonRHVyYXRpb24gdG8gcXVlcnkgaW5wdXQgZnJvbSB0aGUgY29udHJvbGxlciBmb3IgV2ViWFInLCdoYXNDcHVUaW1lJzp0cnVlLH0sJ1ZyLlN1Ym1pdEZyYW1lTm93Jzp7J2hpc3RvZ3JhbU5hbWUnOidzdWJtaXRfZnJhbWUnLCdkZXNjcmlwdGlvbic6J0R1cmF0aW9uIHRvIHN1Ym1pdCBhIGZyYW1lIHRvIEdWUicsJ2hhc0NwdVRpbWUnOnRydWUsfX07Y29uc3QgV0VCWFJfSU5TVEFOVF9FVkVOVFM9eydXZWJYUiBmcmFtZSB0aW1lIChtcyknOnsnamF2YXNjcmlwdCc6eydoaXN0b2dyYW1OYW1lJzond2VieHJfZnJhbWVfdGltZV9qYXZhc2NyaXB0JywnZGVzY3JpcHRpb24nOidXZWJYUiBmcmFtZSB0aW1lIHNwZW50IG9uIEphdmFTY3JpcHQnLH0sJ3JlbmRlcmluZyc6eydoaXN0b2dyYW1OYW1lJzond2VieHJfZnJhbWVfdGltZV9yZW5kZXJpbmcnLCdkZXNjcmlwdGlvbic6J1dlYlhSIGZyYW1lIHRpbWUgc3BlbnQgb24gcmVuZGVyaW5nJ319LCdXZWJYUiBwb3NlIHByZWRpY3Rpb24nOnsnbWlsbGlzZWNvbmRzJzp7J2hpc3RvZ3JhbU5hbWUnOid3ZWJ4cl9wb3NlX3ByZWRpY3Rpb24nLCdkZXNjcmlwdGlvbic6J1dlYlhSIHBvc2UgcHJlZGljdGlvbiBpbiBtcycsfSx9LH07Y29uc3QgWFJfREVWSUNFX1NFUlZJQ0VfUFJPQ0VTUz0nU2VydmljZTogeHJfZGV2aWNlX3NlcnZpY2UnO2Z1bmN0aW9uIGlzWHJEZXZpY2VTZXJ2aWNlUHJvY2Vzcyhwcm9jZXNzKXtpZihwcm9jZXNzLm5hbWU9PT1YUl9ERVZJQ0VfU0VSVklDRV9QUk9DRVNTKXJldHVybiB0cnVlO3JldHVybiBmYWxzZTt9CmNvbnN0IFZSX1JFU1BPTlNFX01TPTEwMDA7Y29uc3QgSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TPTIwMDtjb25zdCBBTklNQVRJT05fTUVSR0VfVEhSRVNIT0xEX01TPTMyO2NvbnN0IE1PVVNFX1dIRUVMX1RIUkVTSE9MRF9NUz00MDtjb25zdCBNT1VTRV9NT1ZFX1RIUkVTSE9MRF9NUz00MDtmdW5jdGlvbiBjb21wYXJlRXZlbnRzKHgseSl7aWYoeC5zdGFydCE9PXkuc3RhcnQpe3JldHVybiB4LnN0YXJ0LXkuc3RhcnQ7fQppZih4LmVuZCE9PXkuZW5kKXtyZXR1cm4geC5lbmQteS5lbmQ7fQppZih4Lmd1aWQmJnkuZ3VpZCl7cmV0dXJuIHguZ3VpZC15Lmd1aWQ7fQpyZXR1cm4gMDt9CmZ1bmN0aW9uIGZvckV2ZW50VHlwZXNJbihldmVudHMsdHlwZU5hbWVzLGNiLG9wdF90aGlzKXtldmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYodHlwZU5hbWVzLmluZGV4T2YoZXZlbnQudHlwZU5hbWUpPj0wKXtjYi5jYWxsKG9wdF90aGlzLGV2ZW50KTt9fSk7fQpmdW5jdGlvbiBjYXVzZWRGcmFtZShldmVudCl7cmV0dXJuIGV2ZW50LmFzc29jaWF0ZWRFdmVudHMuc29tZShpc0ltcGxGcmFtZUV2ZW50KTt9CmZ1bmN0aW9uIGdldFNvcnRlZEZyYW1lRXZlbnRzQnlQcm9jZXNzKG1vZGVsSGVscGVyKXtjb25zdCBmcmFtZUV2ZW50c0J5UGlkPXt9O2Zvcihjb25zdFtwaWQscmVuZGVyZXJIZWxwZXJdb2YKT2JqZWN0LmVudHJpZXMobW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7ZnJhbWVFdmVudHNCeVBpZFtwaWRdPXJlbmRlcmVySGVscGVyLmdldEZyYW1lRXZlbnRzSW5SYW5nZSh0ci5tb2RlbC5oZWxwZXJzLklNUExfRlJBTUVUSU1FX1RZUEUsbW9kZWxIZWxwZXIubW9kZWwuYm91bmRzKTt9CnJldHVybiBmcmFtZUV2ZW50c0J5UGlkO30KZnVuY3Rpb24gZ2V0U29ydGVkSW5wdXRFdmVudHMobW9kZWxIZWxwZXIpe2NvbnN0IGlucHV0RXZlbnRzPVtdO2NvbnN0IGJyb3dzZXJQcm9jZXNzPW1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIucHJvY2Vzcztjb25zdCBtYWluVGhyZWFkPWJyb3dzZXJQcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JCcm93c2VyTWFpbicpO2Zvcihjb25zdCBzbGljZSBvZiBtYWluVGhyZWFkLmFzeW5jU2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCFzbGljZS5pc1RvcExldmVsKWNvbnRpbnVlO2lmKCEoc2xpY2UgaW5zdGFuY2VvZiB0ci5lLmNjLklucHV0TGF0ZW5jeUFzeW5jU2xpY2UpKWNvbnRpbnVlO2lmKGlzTmFOKHNsaWNlLnN0YXJ0KXx8aXNOYU4oc2xpY2UuZHVyYXRpb24pfHxpc05hTihzbGljZS5lbmQpKXtjb250aW51ZTt9CmlucHV0RXZlbnRzLnB1c2goc2xpY2UpO30KcmV0dXJuIGlucHV0RXZlbnRzLnNvcnQoY29tcGFyZUV2ZW50cyk7fQpmdW5jdGlvbiBmaW5kUHJvdG9FeHBlY3RhdGlvbnMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107Y29uc3QgaGFuZGxlcnM9W2hhbmRsZUtleWJvYXJkRXZlbnRzLGhhbmRsZU1vdXNlUmVzcG9uc2VFdmVudHMsaGFuZGxlTW91c2VXaGVlbEV2ZW50cyxoYW5kbGVNb3VzZURyYWdFdmVudHMsaGFuZGxlVGFwUmVzcG9uc2VFdmVudHMsaGFuZGxlUGluY2hFdmVudHMsaGFuZGxlRmxpbmdFdmVudHMsaGFuZGxlVG91Y2hFdmVudHMsaGFuZGxlU2Nyb2xsRXZlbnRzLGhhbmRsZUNTU0FuaW1hdGlvbnMsaGFuZGxlV2ViR0xBbmltYXRpb25zLGhhbmRsZVZpZGVvQW5pbWF0aW9ucyxoYW5kbGVWckFuaW1hdGlvbnMsXTtoYW5kbGVycy5mb3JFYWNoKGZ1bmN0aW9uKGhhbmRsZXIpe3Byb3RvRXhwZWN0YXRpb25zLnB1c2guYXBwbHkocHJvdG9FeHBlY3RhdGlvbnMsaGFuZGxlcihtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKSk7fSk7cHJvdG9FeHBlY3RhdGlvbnMuc29ydChjb21wYXJlRXZlbnRzKTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBoYW5kbGVLZXlib2FyZEV2ZW50cyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBwcm90b0V4cGVjdGF0aW9ucz1bXTtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsS0VZQk9BUkRfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLktFWUJPQVJEKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO30pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9CmZ1bmN0aW9uIGhhbmRsZU1vdXNlUmVzcG9uc2VFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLE1PVVNFX1JFU1BPTlNFX1RZUEVfTkFNRVMsZnVuY3Rpb24oZXZlbnQpe2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5NT1VTRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTt9KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBoYW5kbGVNb3VzZVdoZWVsRXZlbnRzKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByb3RvRXhwZWN0YXRpb25zPVtdO2xldCBjdXJyZW50UEU9dW5kZWZpbmVkO2xldCBwcmV2RXZlbnRfPXVuZGVmaW5lZDtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsTU9VU0VfV0hFRUxfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7Y29uc3QgcHJldkV2ZW50PXByZXZFdmVudF87cHJldkV2ZW50Xz1ldmVudDtpZihjdXJyZW50UEUmJihwcmV2RXZlbnQuc3RhcnQrTU9VU0VfV0hFRUxfVEhSRVNIT0xEX01TKT49ZXZlbnQuc3RhcnQpe2lmKGN1cnJlbnRQRS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fWVsc2V7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0VfV0hFRUwpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9CnJldHVybjt9CmN1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0VfV0hFRUwpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBoYW5kbGVNb3VzZURyYWdFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7bGV0IG1vdXNlRG93bkV2ZW50PXVuZGVmaW5lZDtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsTU9VU0VfRFJBR19UWVBFX05BTUVTLGZ1bmN0aW9uKGV2ZW50KXtzd2l0Y2goZXZlbnQudHlwZU5hbWUpe2Nhc2UgSU5QVVRfVFlQRS5NT1VTRV9ET1dOOmlmKGNhdXNlZEZyYW1lKGV2ZW50KSl7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLk1PVVNFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO31lbHNle21vdXNlRG93bkV2ZW50PWV2ZW50O30KYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLk1PVVNFX01PVkU6aWYoIWNhdXNlZEZyYW1lKGV2ZW50KSl7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7fWVsc2UgaWYoIWN1cnJlbnRQRXx8IWN1cnJlbnRQRS5pc05lYXIoZXZlbnQsTU9VU0VfTU9WRV9USFJFU0hPTERfTVMpKXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLk1PVVNFKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtpZihtb3VzZURvd25FdmVudCl7Y3VycmVudFBFLmFzc29jaWF0ZWRFdmVudHMucHVzaChtb3VzZURvd25FdmVudCk7bW91c2VEb3duRXZlbnQ9dW5kZWZpbmVkO30KcHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO31lbHNle2lmKGN1cnJlbnRQRS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fWVsc2V7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuTU9VU0UpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9fQpicmVhaztjYXNlIElOUFVUX1RZUEUuTU9VU0VfVVA6aWYoIW1vdXNlRG93bkV2ZW50KXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihjYXVzZWRGcmFtZShldmVudCk/UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFOlByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFLElOSVRJQVRPUl9UWVBFLk1PVVNFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO2JyZWFrO30KaWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLk1PVVNFKTtpZihtb3VzZURvd25FdmVudCl7Y3VycmVudFBFLmFzc29jaWF0ZWRFdmVudHMucHVzaChtb3VzZURvd25FdmVudCk7fQpjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQptb3VzZURvd25FdmVudD11bmRlZmluZWQ7Y3VycmVudFBFPXVuZGVmaW5lZDticmVhazt9fSk7aWYobW91c2VEb3duRXZlbnQpe2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7Y3VycmVudFBFLnB1c2hFdmVudChtb3VzZURvd25FdmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO30KcmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KZnVuY3Rpb24gaGFuZGxlVGFwUmVzcG9uc2VFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLFRBUF9UWVBFX05BTUVTLGZ1bmN0aW9uKGV2ZW50KXtzd2l0Y2goZXZlbnQudHlwZU5hbWUpe2Nhc2UgSU5QVVRfVFlQRS5UQVBfRE9XTjpjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRBUCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO2JyZWFrO2Nhc2UgSU5QVVRfVFlQRS5UQVA6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRBUCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO30KY3VycmVudFBFPXVuZGVmaW5lZDticmVhaztjYXNlIElOUFVUX1RZUEUuVEFQX0NBTkNFTDppZighY3VycmVudFBFKXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTticmVhazt9CmlmKGN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fWVsc2V7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5UQVApO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9CmN1cnJlbnRQRT11bmRlZmluZWQ7YnJlYWs7fX0pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9CmZ1bmN0aW9uIGhhbmRsZVBpbmNoRXZlbnRzKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByb3RvRXhwZWN0YXRpb25zPVtdO2xldCBjdXJyZW50UEU9dW5kZWZpbmVkO2xldCBzYXdGaXJzdFVwZGF0ZT1mYWxzZTtjb25zdCBtb2RlbEJvdW5kcz1tb2RlbEhlbHBlci5tb2RlbC5ib3VuZHM7Zm9yRXZlbnRUeXBlc0luKHNvcnRlZElucHV0RXZlbnRzLFBJTkNIX1RZUEVfTkFNRVMsZnVuY3Rpb24oZXZlbnQpe3N3aXRjaChldmVudC50eXBlTmFtZSl7Y2FzZSBJTlBVVF9UWVBFLlBJTkNIX0JFR0lOOmlmKGN1cnJlbnRQRSYmY3VycmVudFBFLmlzTmVhcihldmVudCxJTlBVVF9NRVJHRV9USFJFU0hPTERfTVMpKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTticmVhazt9CmN1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuUElOQ0gpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO2N1cnJlbnRQRS5pc0FuaW1hdGlvbkJlZ2luPXRydWU7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO3Nhd0ZpcnN0VXBkYXRlPWZhbHNlO2JyZWFrO2Nhc2UgSU5QVVRfVFlQRS5QSU5DSF9VUERBVEU6aWYoIWN1cnJlbnRQRXx8KChjdXJyZW50UEUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSkmJnNhd0ZpcnN0VXBkYXRlKXx8IWN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSl7Y3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuUElOQ0gpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9ZWxzZXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtzYXdGaXJzdFVwZGF0ZT10cnVlO30KYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlBJTkNIX0VORDppZihjdXJyZW50UEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO30KY3VycmVudFBFPXVuZGVmaW5lZDticmVhazt9fSk7cmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KZnVuY3Rpb24gaGFuZGxlRmxpbmdFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7ZnVuY3Rpb24gaXNSZW5kZXJlckZsaW5nKGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT1SRU5ERVJFUl9GTElOR19USVRMRTt9CmNvbnN0IGJyb3dzZXJIZWxwZXI9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcjtjb25zdCBmbGluZ0V2ZW50cz1icm93c2VySGVscGVyLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoaXNSZW5kZXJlckZsaW5nKTtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsRkxJTkdfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7ZmxpbmdFdmVudHMucHVzaChldmVudCk7fSk7ZmxpbmdFdmVudHMuc29ydChjb21wYXJlRXZlbnRzKTtmbGluZ0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC50aXRsZT09PVJFTkRFUkVSX0ZMSU5HX1RJVExFKXtpZihjdXJyZW50UEUpe2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLkZMSU5HKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQpyZXR1cm47fQpzd2l0Y2goZXZlbnQudHlwZU5hbWUpe2Nhc2UgSU5QVVRfVFlQRS5GTElOR19TVEFSVDppZihjdXJyZW50UEUpe3dhcm4oe3R5cGU6J1VzZXJNb2RlbEJ1aWxkZXInLG1lc3NhZ2U6J1VuZXhwZWN0ZWQgRmxpbmdTdGFydCcsc2hvd1RvVXNlcjpmYWxzZSx9KTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5GTElORyk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7Y3VycmVudFBFLmVuZD0wO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9CmJyZWFrO2Nhc2UgSU5QVVRfVFlQRS5GTElOR19DQU5DRUw6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuZW5kPWV2ZW50LnN0YXJ0O2N1cnJlbnRQRT11bmRlZmluZWQ7fWVsc2V7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7fQpicmVhazt9fSk7aWYoY3VycmVudFBFJiYhY3VycmVudFBFLmVuZCl7Y3VycmVudFBFLmVuZD1tb2RlbEhlbHBlci5tb2RlbC5ib3VuZHMubWF4O30KcmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KZnVuY3Rpb24gaGFuZGxlVG91Y2hFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7bGV0IHNhd0ZpcnN0TW92ZT1mYWxzZTtmb3JFdmVudFR5cGVzSW4oc29ydGVkSW5wdXRFdmVudHMsVE9VQ0hfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LnR5cGVOYW1lKXtjYXNlIElOUFVUX1RZUEUuVE9VQ0hfU1RBUlQ6aWYoY3VycmVudFBFKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTt9ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFLElOSVRJQVRPUl9UWVBFLlRPVUNIKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuaXNBbmltYXRpb25CZWdpbj10cnVlO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTtzYXdGaXJzdE1vdmU9ZmFsc2U7fQpicmVhaztjYXNlIElOUFVUX1RZUEUuVE9VQ0hfTU9WRTppZighY3VycmVudFBFKXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5UT1VDSCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO2JyZWFrO30KaWYoKHNhd0ZpcnN0TW92ZSYmKGN1cnJlbnRQRS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFKSl8fCFjdXJyZW50UEUuaXNOZWFyKGV2ZW50LElOUFVUX01FUkdFX1RIUkVTSE9MRF9NUykpe2NvbnN0IHByZXZFbmQ9Y3VycmVudFBFLmVuZDtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5UT1VDSCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7Y3VycmVudFBFLnN0YXJ0PXByZXZFbmQ7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO31lbHNle2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Nhd0ZpcnN0TW92ZT10cnVlO30KYnJlYWs7Y2FzZSBJTlBVVF9UWVBFLlRPVUNIX0VORDppZighY3VycmVudFBFKXtjb25zdCBwZT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLklHTk9SRURfVFlQRSk7cGUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKHBlKTticmVhazt9CmlmKGN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSl7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fWVsc2V7Y29uc3QgcGU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5JR05PUkVEX1RZUEUpO3BlLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChwZSk7fQpjdXJyZW50UEU9dW5kZWZpbmVkO2JyZWFrO319KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBoYW5kbGVTY3JvbGxFdmVudHMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7bGV0IHNhd0ZpcnN0VXBkYXRlPWZhbHNlO2ZvckV2ZW50VHlwZXNJbihzb3J0ZWRJbnB1dEV2ZW50cyxTQ1JPTExfVFlQRV9OQU1FUyxmdW5jdGlvbihldmVudCl7c3dpdGNoKGV2ZW50LnR5cGVOYW1lKXtjYXNlIElOUFVUX1RZUEUuU0NST0xMX0JFR0lOOmN1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUsSU5JVElBVE9SX1RZUEUuU0NST0xMKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtjdXJyZW50UEUuaXNBbmltYXRpb25CZWdpbj10cnVlO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTtzYXdGaXJzdFVwZGF0ZT1mYWxzZTticmVhaztjYXNlIElOUFVUX1RZUEUuU0NST0xMX1VQREFURTppZihjdXJyZW50UEUpe2lmKGN1cnJlbnRQRS5pc05lYXIoZXZlbnQsSU5QVVRfTUVSR0VfVEhSRVNIT0xEX01TKSYmKChjdXJyZW50UEUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUpfHwhc2F3Rmlyc3RVcGRhdGUpKXtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtzYXdGaXJzdFVwZGF0ZT10cnVlO31lbHNle2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLlNDUk9MTCk7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7cHJvdG9FeHBlY3RhdGlvbnMucHVzaChjdXJyZW50UEUpO319ZWxzZXtjdXJyZW50UEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5TQ1JPTEwpO2N1cnJlbnRQRS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2goY3VycmVudFBFKTt9CmJyZWFrO2Nhc2UgSU5QVVRfVFlQRS5TQ1JPTExfRU5EOmlmKCFjdXJyZW50UEUpe3dhcm4oe3R5cGU6J1VzZXJNb2RlbEJ1aWxkZXInLG1lc3NhZ2U6J1VuZXhwZWN0ZWQgU2Nyb2xsRW5kJyxzaG93VG9Vc2VyOmZhbHNlLH0pO2NvbnN0IHBlPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFKTtwZS5wdXNoRXZlbnQoZXZlbnQpO3Byb3RvRXhwZWN0YXRpb25zLnB1c2gocGUpO2JyZWFrO30KY3VycmVudFBFLnB1c2hFdmVudChldmVudCk7YnJlYWs7fX0pO3JldHVybiBwcm90b0V4cGVjdGF0aW9uczt9CmZ1bmN0aW9uIGhhbmRsZVZpZGVvQW5pbWF0aW9ucyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKXtjb25zdCBldmVudHM9W107Zm9yKGNvbnN0IHBpZCBpbiBtb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2Zvcihjb25zdCB0aWQgaW4gbW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF0ucHJvY2Vzcy50aHJlYWRzKXtmb3IoY29uc3QgYXN5bmNTbGljZSBvZgptb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnNbcGlkXS5wcm9jZXNzLnRocmVhZHNbdGlkXS5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtpZihhc3luY1NsaWNlLnRpdGxlPT09UExBWUJBQ0tfRVZFTlRfVElUTEUpe2V2ZW50cy5wdXNoKGFzeW5jU2xpY2UpO319fX0KZXZlbnRzLnNvcnQodHIuaW1wb3J0ZXIuY29tcGFyZUV2ZW50cyk7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y29uc3QgY3VycmVudFBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuVklERU8pO2N1cnJlbnRQRS5zdGFydD1ldmVudC5zdGFydDtjdXJyZW50UEUuZW5kPWV2ZW50LmVuZDtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fQpyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBoYW5kbGVWckFuaW1hdGlvbnMobW9kZWxIZWxwZXIsc29ydGVkSW5wdXRFdmVudHMsd2Fybil7Y29uc3QgZXZlbnRzPVtdO2NvbnN0IHByb2Nlc3Nlcz1bXTtpZih0eXBlb2YgbW9kZWxIZWxwZXIuZ3B1SGVscGVyIT09J3VuZGVmaW5lZCcpe3Byb2Nlc3Nlcy5wdXNoKG1vZGVsSGVscGVyLmdwdUhlbHBlci5wcm9jZXNzKTt9CmZvcihjb25zdCBoZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhtb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtwcm9jZXNzZXMucHVzaChoZWxwZXIucHJvY2Vzcyk7fQpmb3IoY29uc3QgaGVscGVyIG9mIE9iamVjdC52YWx1ZXMobW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcnMpKXtwcm9jZXNzZXMucHVzaChoZWxwZXIucHJvY2Vzcyk7fQpmb3IoY29uc3Qgc2VydmljZSBvZiBtb2RlbEhlbHBlci5tb2RlbC5nZXRBbGxQcm9jZXNzZXMoaXNYckRldmljZVNlcnZpY2VQcm9jZXNzKSl7cHJvY2Vzc2VzLnB1c2goc2VydmljZSk7fQpsZXQgdnJDb3VudGVyU3RhcnQ9TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVI7bGV0IHZyRXZlbnRTdGFydD1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUjtmb3IoY29uc3QgcHJvYyBvZiBwcm9jZXNzZXMpe2Zvcihjb25zdFtjb3VudGVyTmFtZSxjb3VudGVyU2VyaWVzXW9mCk9iamVjdC5lbnRyaWVzKHByb2MuY291bnRlcnMpKXtpZihWUl9DT1VOVEVSX05BTUVTLmluY2x1ZGVzKGNvdW50ZXJOYW1lKSl7Zm9yKGNvbnN0IHNlcmllcyBvZiBjb3VudGVyU2VyaWVzLnNlcmllcyl7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzZXJpZXMuc2FtcGxlcyl7ZXZlbnRzLnB1c2goc2FtcGxlKTt2ckNvdW50ZXJTdGFydD1NYXRoLm1pbih2ckNvdW50ZXJTdGFydCxzYW1wbGUudGltZXN0YW1wKTt9fX19CmZvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jLnRocmVhZHMpKXtmb3IoY29uc3QgY29udGFpbmVyIG9mIHRocmVhZC5jaGlsZEV2ZW50Q29udGFpbmVycygpKXtmb3IoY29uc3Qgc2xpY2Ugb2YgY29udGFpbmVyLnNsaWNlcyl7aWYoc2xpY2UudGl0bGUgaW4gVlJfRVhQRUNUQVRJT05fRVZFTlRTfHxzbGljZS50aXRsZSBpbiBXRUJYUl9JTlNUQU5UX0VWRU5UUyl7ZXZlbnRzLnB1c2goc2xpY2UpO3ZyRXZlbnRTdGFydD1NYXRoLm1pbih2ckV2ZW50U3RhcnQsc2xpY2Uuc3RhcnQpO319fX19CmlmKGV2ZW50cy5sZW5ndGg9PT0wKXtyZXR1cm5bXTt9CmV2ZW50cy5zb3J0KGZ1bmN0aW9uKHgseSl7aWYoeC5yYW5nZS5taW4hPT15LnJhbmdlLm1pbil7cmV0dXJuIHgucmFuZ2UubWluLXkucmFuZ2UubWluO30KcmV0dXJuIHguZ3VpZC15Lmd1aWQ7fSk7dnJDb3VudGVyU3RhcnQ9KHZyQ291bnRlclN0YXJ0PT09TnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpPzA6dnJDb3VudGVyU3RhcnQ7dnJFdmVudFN0YXJ0PSh2ckV2ZW50U3RhcnQ9PT1OdW1iZXIuTUFYX1NBRkVfSU5URUdFUik/MDp2ckV2ZW50U3RhcnQ7Y29uc3QgdnJBbmltYXRpb25TdGFydD1NYXRoLm1heCh2ckNvdW50ZXJTdGFydCx2ckV2ZW50U3RhcnQpKwpWUl9SRVNQT05TRV9NUztjb25zdCByZXNwb25zZVBFPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRSxJTklUSUFUT1JfVFlQRS5WUik7Y29uc3QgYW5pbWF0aW9uUEU9bmV3IFByb3RvRXhwZWN0YXRpb24oUHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSxJTklUSUFUT1JfVFlQRS5WUik7bGV0IGxhc3RSZXNwb25zZUV2ZW50O2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2lmKGV2ZW50LnJhbmdlLm1pbjx2ckFuaW1hdGlvblN0YXJ0KXtpZihldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLkNvdW50ZXJTYW1wbGUpe3Jlc3BvbnNlUEUucHVzaFNhbXBsZShldmVudCk7fWVsc2V7cmVzcG9uc2VQRS5wdXNoRXZlbnQoZXZlbnQpO30KbGFzdFJlc3BvbnNlRXZlbnQ9ZXZlbnQ7fWVsc2V7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5Db3VudGVyU2FtcGxlKXthbmltYXRpb25QRS5wdXNoU2FtcGxlKGV2ZW50KTt9ZWxzZXthbmltYXRpb25QRS5wdXNoRXZlbnQoZXZlbnQpO319fQppZihsYXN0UmVzcG9uc2VFdmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLkNvdW50ZXJTYW1wbGUpe2FuaW1hdGlvblBFLnB1c2hTYW1wbGUobGFzdFJlc3BvbnNlRXZlbnQpO31lbHNle2FuaW1hdGlvblBFLnB1c2hFdmVudChsYXN0UmVzcG9uc2VFdmVudCk7fQpyZXR1cm5bcmVzcG9uc2VQRSxhbmltYXRpb25QRV07fQpmdW5jdGlvbiBoYW5kbGVDU1NBbmltYXRpb25zKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IGFuaW1hdGlvbkV2ZW50cz1tb2RlbEhlbHBlci5icm93c2VySGVscGVyLmdldEFsbEFzeW5jU2xpY2VzTWF0Y2hpbmcoZnVuY3Rpb24oZXZlbnQpe3JldHVybigoZXZlbnQudGl0bGU9PT1DU1NfQU5JTUFUSU9OX1RJVExFKSYmZXZlbnQuaXNUb3BMZXZlbCYmKGV2ZW50LmR1cmF0aW9uPjApKTt9KTtjb25zdCBhbmltYXRpb25SYW5nZXM9W107ZnVuY3Rpb24gcHVzaEFuaW1hdGlvblJhbmdlKHN0YXJ0LGVuZCxhbmltYXRpb24pe2NvbnN0IHJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzdGFydCxlbmQpO3JhbmdlLmFuaW1hdGlvbj1hbmltYXRpb247YW5pbWF0aW9uUmFuZ2VzLnB1c2gocmFuZ2UpO30KYW5pbWF0aW9uRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oYW5pbWF0aW9uKXtpZihhbmltYXRpb24uc3ViU2xpY2VzLmxlbmd0aD09PTApe3B1c2hBbmltYXRpb25SYW5nZShhbmltYXRpb24uc3RhcnQsYW5pbWF0aW9uLmVuZCxhbmltYXRpb24pO31lbHNle2xldCBzdGFydD11bmRlZmluZWQ7YW5pbWF0aW9uLnN1YlNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHN1Yil7aWYoKHN1Yi5hcmdzLmRhdGEuc3RhdGU9PT0ncnVubmluZycpJiYoc3RhcnQ9PT11bmRlZmluZWQpKXtzdGFydD1zdWIuc3RhcnQ7fWVsc2UgaWYoKHN1Yi5hcmdzLmRhdGEuc3RhdGU9PT0ncGF1c2VkJyl8fChzdWIuYXJncy5kYXRhLnN0YXRlPT09J2lkbGUnKXx8KHN1Yi5hcmdzLmRhdGEuc3RhdGU9PT0nZmluaXNoZWQnKSl7aWYoc3RhcnQ9PT11bmRlZmluZWQpe3N0YXJ0PW1vZGVsSGVscGVyLm1vZGVsLmJvdW5kcy5taW47fQpwdXNoQW5pbWF0aW9uUmFuZ2Uoc3RhcnQsc3ViLnN0YXJ0LGFuaW1hdGlvbik7c3RhcnQ9dW5kZWZpbmVkO319KTtpZihzdGFydCE9PXVuZGVmaW5lZCl7cHVzaEFuaW1hdGlvblJhbmdlKHN0YXJ0LGFuaW1hdGlvbi5lbmQsYW5pbWF0aW9uKTt9fX0pO3JldHVybiBhbmltYXRpb25SYW5nZXMubWFwKGZ1bmN0aW9uKHJhbmdlKXtjb25zdCBwcm90b0V4cGVjdGF0aW9uPW5ldyBQcm90b0V4cGVjdGF0aW9uKFByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUsSU5JVElBVE9SX1RZUEUuQ1NTKTtwcm90b0V4cGVjdGF0aW9uLnN0YXJ0PXJhbmdlLm1pbjtwcm90b0V4cGVjdGF0aW9uLmVuZD1yYW5nZS5tYXg7cHJvdG9FeHBlY3RhdGlvbi5hc3NvY2lhdGVkRXZlbnRzLnB1c2gocmFuZ2UuYW5pbWF0aW9uKTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbjt9KTt9CmZ1bmN0aW9uIGZpbmRXZWJHTEV2ZW50cyhtb2RlbEhlbHBlcixtYWlsYm94RXZlbnRzLGFuaW1hdGlvbkV2ZW50cyl7Zm9yKGNvbnN0IGV2ZW50IG9mIG1vZGVsSGVscGVyLm1vZGVsLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nRHJhd2luZ0J1ZmZlcjo6cHJlcGFyZU1haWxib3gnKXttYWlsYm94RXZlbnRzLnB1c2goZXZlbnQpO31lbHNlIGlmKGV2ZW50LnRpdGxlPT09J1BhZ2VBbmltYXRvcjo6c2VydmljZVNjcmlwdGVkQW5pbWF0aW9ucycpe2FuaW1hdGlvbkV2ZW50cy5wdXNoKGV2ZW50KTt9fX0KZnVuY3Rpb24gZmluZE1haWxib3hFdmVudHNOZWFyQW5pbWF0aW9uRXZlbnRzKG1haWxib3hFdmVudHMsYW5pbWF0aW9uRXZlbnRzKXtpZihhbmltYXRpb25FdmVudHMubGVuZ3RoPT09MClyZXR1cm5bXTttYWlsYm94RXZlbnRzLnNvcnQoY29tcGFyZUV2ZW50cyk7YW5pbWF0aW9uRXZlbnRzLnNvcnQoY29tcGFyZUV2ZW50cyk7Y29uc3QgYW5pbWF0aW9uSXRlcmF0b3I9YW5pbWF0aW9uRXZlbnRzW1N5bWJvbC5pdGVyYXRvcl0oKTtsZXQgYW5pbWF0aW9uRXZlbnQ9YW5pbWF0aW9uSXRlcmF0b3IubmV4dCgpLnZhbHVlO2NvbnN0IGZpbHRlcmVkRXZlbnRzPVtdO2Zvcihjb25zdCBldmVudCBvZiBtYWlsYm94RXZlbnRzKXt3aGlsZShhbmltYXRpb25FdmVudCYmKGFuaW1hdGlvbkV2ZW50LnN0YXJ0PChldmVudC5zdGFydC1BTklNQVRJT05fTUVSR0VfVEhSRVNIT0xEX01TKSkpe2FuaW1hdGlvbkV2ZW50PWFuaW1hdGlvbkl0ZXJhdG9yLm5leHQoKS52YWx1ZTt9CmlmKCFhbmltYXRpb25FdmVudClicmVhaztpZihhbmltYXRpb25FdmVudC5zdGFydDwoZXZlbnQuc3RhcnQrQU5JTUFUSU9OX01FUkdFX1RIUkVTSE9MRF9NUykpe2ZpbHRlcmVkRXZlbnRzLnB1c2goZXZlbnQpO319CnJldHVybiBmaWx0ZXJlZEV2ZW50czt9CmZ1bmN0aW9uIGNyZWF0ZVByb3RvRXhwZWN0YXRpb25zRnJvbU1haWxib3hFdmVudHMobWFpbGJveEV2ZW50cyl7Y29uc3QgcHJvdG9FeHBlY3RhdGlvbnM9W107bGV0IGN1cnJlbnRQRT11bmRlZmluZWQ7Zm9yKGNvbnN0IGV2ZW50IG9mIG1haWxib3hFdmVudHMpe2lmKGN1cnJlbnRQRT09PXVuZGVmaW5lZHx8IWN1cnJlbnRQRS5pc05lYXIoZXZlbnQsQU5JTUFUSU9OX01FUkdFX1RIUkVTSE9MRF9NUykpe2N1cnJlbnRQRT1uZXcgUHJvdG9FeHBlY3RhdGlvbihQcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFLElOSVRJQVRPUl9UWVBFLldFQkdMKTtjdXJyZW50UEUucHVzaEV2ZW50KGV2ZW50KTtwcm90b0V4cGVjdGF0aW9ucy5wdXNoKGN1cnJlbnRQRSk7fWVsc2V7Y3VycmVudFBFLnB1c2hFdmVudChldmVudCk7fX0KcmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KZnVuY3Rpb24gaGFuZGxlV2ViR0xBbmltYXRpb25zKG1vZGVsSGVscGVyLHNvcnRlZElucHV0RXZlbnRzLHdhcm4pe2NvbnN0IHByZXBhcmVNYWlsYm94RXZlbnRzPVtdO2NvbnN0IHNjcmlwdGVkQW5pbWF0aW9uRXZlbnRzPVtdO2ZpbmRXZWJHTEV2ZW50cyhtb2RlbEhlbHBlcixwcmVwYXJlTWFpbGJveEV2ZW50cyxzY3JpcHRlZEFuaW1hdGlvbkV2ZW50cyk7Y29uc3Qgd2ViR0xNYWlsYm94RXZlbnRzPWZpbmRNYWlsYm94RXZlbnRzTmVhckFuaW1hdGlvbkV2ZW50cyhwcmVwYXJlTWFpbGJveEV2ZW50cyxzY3JpcHRlZEFuaW1hdGlvbkV2ZW50cyk7cmV0dXJuIGNyZWF0ZVByb3RvRXhwZWN0YXRpb25zRnJvbU1haWxib3hFdmVudHMod2ViR0xNYWlsYm94RXZlbnRzKTt9CmZ1bmN0aW9uIHBvc3RQcm9jZXNzUHJvdG9FeHBlY3RhdGlvbnMobW9kZWxIZWxwZXIscHJvdG9FeHBlY3RhdGlvbnMpe3Byb3RvRXhwZWN0YXRpb25zPWZpbmRGcmFtZUV2ZW50c0ZvckFuaW1hdGlvbnMobW9kZWxIZWxwZXIscHJvdG9FeHBlY3RhdGlvbnMpO3Byb3RvRXhwZWN0YXRpb25zPW1lcmdlSW50ZXJzZWN0aW5nUmVzcG9uc2VzKHByb3RvRXhwZWN0YXRpb25zKTtwcm90b0V4cGVjdGF0aW9ucz1tZXJnZUludGVyc2VjdGluZ0FuaW1hdGlvbnMocHJvdG9FeHBlY3RhdGlvbnMpO3Byb3RvRXhwZWN0YXRpb25zPWZpeFJlc3BvbnNlQW5pbWF0aW9uU3RhcnRzKHByb3RvRXhwZWN0YXRpb25zKTtwcm90b0V4cGVjdGF0aW9ucz1maXhUYXBSZXNwb25zZVRvdWNoQW5pbWF0aW9ucyhwcm90b0V4cGVjdGF0aW9ucyk7cmV0dXJuIHByb3RvRXhwZWN0YXRpb25zO30KZnVuY3Rpb24gbWVyZ2VJbnRlcnNlY3RpbmdSZXNwb25zZXMocHJvdG9FeHBlY3RhdGlvbnMpe2NvbnN0IG5ld1BFcz1bXTt3aGlsZShwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGgpe2NvbnN0IHBlPXByb3RvRXhwZWN0YXRpb25zLnNoaWZ0KCk7bmV3UEVzLnB1c2gocGUpO2lmKHBlLnR5cGUhPT1Qcm90b0V4cGVjdGF0aW9uLlJFU1BPTlNFX1RZUEUpY29udGludWU7Zm9yKGxldCBpPTA7aTxwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGg7KytpKXtjb25zdCBvdGhlclBFPXByb3RvRXhwZWN0YXRpb25zW2ldO2lmKG90aGVyUEUudHlwZSE9PXBlLnR5cGUpY29udGludWU7aWYoIW90aGVyUEUuaW50ZXJzZWN0cyhwZSkpY29udGludWU7Y29uc3QgdHlwZU5hbWVzPXBlLmFzc29jaWF0ZWRFdmVudHMubWFwKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQudHlwZU5hbWU7fSk7aWYob3RoZXJQRS5jb250YWluc1R5cGVOYW1lcyh0eXBlTmFtZXMpKWNvbnRpbnVlO3BlLm1lcmdlKG90aGVyUEUpO3Byb3RvRXhwZWN0YXRpb25zLnNwbGljZShpLDEpOy0taTt9fQpyZXR1cm4gbmV3UEVzO30KZnVuY3Rpb24gbWVyZ2VJbnRlcnNlY3RpbmdBbmltYXRpb25zKHByb3RvRXhwZWN0YXRpb25zKXtjb25zdCBuZXdQRXM9W107d2hpbGUocHJvdG9FeHBlY3RhdGlvbnMubGVuZ3RoKXtjb25zdCBwZT1wcm90b0V4cGVjdGF0aW9ucy5zaGlmdCgpO25ld1BFcy5wdXNoKHBlKTtpZihwZS50eXBlIT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSljb250aW51ZTtjb25zdCBpc0NTUz1wZS5pbml0aWF0b3JUeXBlPT09SU5JVElBVE9SX1RZUEUuQ1NTO2NvbnN0IGlzRmxpbmc9cGUuY29udGFpbnNUeXBlTmFtZXMoW0lOUFVUX1RZUEUuRkxJTkdfU1RBUlRdKTtjb25zdCBpc1ZpZGVvPXBlLmluaXRpYXRvclR5cGU9PT1JTklUSUFUT1JfVFlQRS5WSURFTztmb3IobGV0IGk9MDtpPHByb3RvRXhwZWN0YXRpb25zLmxlbmd0aDsrK2kpe2NvbnN0IG90aGVyUEU9cHJvdG9FeHBlY3RhdGlvbnNbaV07aWYob3RoZXJQRS50eXBlIT09cGUudHlwZSljb250aW51ZTtpZigoaXNDU1MmJm90aGVyUEUuaW5pdGlhdG9yVHlwZSE9PUlOSVRJQVRPUl9UWVBFLkNTUyl8fGlzRmxpbmchPT1vdGhlclBFLmNvbnRhaW5zVHlwZU5hbWVzKFtJTlBVVF9UWVBFLkZMSU5HX1NUQVJUXSl8fGlzVmlkZW8mJm90aGVyUEUuaW5pdGlhdG9yVHlwZSE9PUlOSVRJQVRPUl9UWVBFLlZJREVPfHxvdGhlclBFLmluaXRpYXRvclR5cGU9PT1JTklUSUFUT1JfVFlQRS5WUil7Y29udGludWU7fQppZihpc0NTUyl7aWYoIXBlLmlzTmVhcihvdGhlclBFLEFOSU1BVElPTl9NRVJHRV9USFJFU0hPTERfTVMpKXtjb250aW51ZTt9fWVsc2UgaWYoIW90aGVyUEUuaW50ZXJzZWN0cyhwZSkpe2NvbnRpbnVlO30KcGUubWVyZ2Uob3RoZXJQRSk7cHJvdG9FeHBlY3RhdGlvbnMuc3BsaWNlKGksMSk7LS1pO319CnJldHVybiBuZXdQRXM7fQpmdW5jdGlvbiBmaXhSZXNwb25zZUFuaW1hdGlvblN0YXJ0cyhwcm90b0V4cGVjdGF0aW9ucyl7cHJvdG9FeHBlY3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihhcGUpe2lmKGFwZS50eXBlIT09UHJvdG9FeHBlY3RhdGlvbi5BTklNQVRJT05fVFlQRSl7cmV0dXJuO30KcHJvdG9FeHBlY3RhdGlvbnMuZm9yRWFjaChmdW5jdGlvbihycGUpe2lmKHJwZS50eXBlIT09UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFKXtyZXR1cm47fQppZighYXBlLmNvbnRhaW5zVGltZXN0YW1wSW5jbHVzaXZlKHJwZS5lbmQpKXtyZXR1cm47fQppZihhcGUuY29udGFpbnNUaW1lc3RhbXBJbmNsdXNpdmUocnBlLnN0YXJ0KSl7cmV0dXJuO30KYXBlLnN0YXJ0PXJwZS5lbmQ7aWYoYXBlLmFzc29jaWF0ZWRFdmVudHMhPT11bmRlZmluZWQpe2FwZS5hc3NvY2lhdGVkRXZlbnRzPWFwZS5hc3NvY2lhdGVkRXZlbnRzLmZpbHRlcihlPT4oIWlzSW1wbEZyYW1lRXZlbnQoZSl8fGUuc3RhcnQ+PWFwZS5zdGFydCkpO319KTt9KTtyZXR1cm4gcHJvdG9FeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBpc0ltcGxGcmFtZUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT10ci5tb2RlbC5oZWxwZXJzLklNUExfUkVOREVSSU5HX1NUQVRTO30KZnVuY3Rpb24gZml4VGFwUmVzcG9uc2VUb3VjaEFuaW1hdGlvbnMocHJvdG9FeHBlY3RhdGlvbnMpe2Z1bmN0aW9uIGlzVGFwUmVzcG9uc2UocGUpe3JldHVybihwZS50eXBlPT09UHJvdG9FeHBlY3RhdGlvbi5SRVNQT05TRV9UWVBFKSYmcGUuY29udGFpbnNUeXBlTmFtZXMoW0lOUFVUX1RZUEUuVEFQXSk7fQpmdW5jdGlvbiBpc1RvdWNoQW5pbWF0aW9uKHBlKXtyZXR1cm4ocGUudHlwZT09PVByb3RvRXhwZWN0YXRpb24uQU5JTUFUSU9OX1RZUEUpJiZwZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5UT1VDSF9NT1ZFXSkmJiFwZS5jb250YWluc1R5cGVOYW1lcyhbSU5QVVRfVFlQRS5TQ1JPTExfVVBEQVRFLElOUFVUX1RZUEUuUElOQ0hfVVBEQVRFXSk7fQpjb25zdCBuZXdQRXM9W107d2hpbGUocHJvdG9FeHBlY3RhdGlvbnMubGVuZ3RoKXtjb25zdCBwZT1wcm90b0V4cGVjdGF0aW9ucy5zaGlmdCgpO25ld1BFcy5wdXNoKHBlKTtjb25zdCBwZUlzVGFwUmVzcG9uc2U9aXNUYXBSZXNwb25zZShwZSk7Y29uc3QgcGVJc1RvdWNoQW5pbWF0aW9uPWlzVG91Y2hBbmltYXRpb24ocGUpO2lmKCFwZUlzVGFwUmVzcG9uc2UmJiFwZUlzVG91Y2hBbmltYXRpb24pe2NvbnRpbnVlO30KZm9yKGxldCBpPTA7aTxwcm90b0V4cGVjdGF0aW9ucy5sZW5ndGg7KytpKXtjb25zdCBvdGhlclBFPXByb3RvRXhwZWN0YXRpb25zW2ldO2lmKCFvdGhlclBFLmludGVyc2VjdHMocGUpKWNvbnRpbnVlO2lmKHBlSXNUYXBSZXNwb25zZSYmIWlzVG91Y2hBbmltYXRpb24ob3RoZXJQRSkpY29udGludWU7aWYocGVJc1RvdWNoQW5pbWF0aW9uJiYhaXNUYXBSZXNwb25zZShvdGhlclBFKSljb250aW51ZTtwZS50eXBlPVByb3RvRXhwZWN0YXRpb24uUkVTUE9OU0VfVFlQRTtwZS5tZXJnZShvdGhlclBFKTtwcm90b0V4cGVjdGF0aW9ucy5zcGxpY2UoaSwxKTstLWk7fX0KcmV0dXJuIG5ld1BFczt9CmZ1bmN0aW9uIGZpbmRGcmFtZUV2ZW50c0ZvckFuaW1hdGlvbnMobW9kZWxIZWxwZXIscHJvdG9FeHBlY3RhdGlvbnMpe2NvbnN0IG5ld1BFcz1bXTtjb25zdCBmcmFtZUV2ZW50c0J5UGlkPWdldFNvcnRlZEZyYW1lRXZlbnRzQnlQcm9jZXNzKG1vZGVsSGVscGVyKTtmb3IoY29uc3QgcGUgb2YgcHJvdG9FeHBlY3RhdGlvbnMpe2lmKHBlLnR5cGUhPT1Qcm90b0V4cGVjdGF0aW9uLkFOSU1BVElPTl9UWVBFKXtuZXdQRXMucHVzaChwZSk7Y29udGludWU7fQpjb25zdCBmcmFtZUV2ZW50cz1bXTtmb3IoY29uc3QgcGlkIG9mIE9iamVjdC5rZXlzKG1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycykpe2NvbnN0IHJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwZS5zdGFydCxwZS5lbmQpO2ZyYW1lRXZlbnRzLnB1c2guYXBwbHkoZnJhbWVFdmVudHMscmFuZ2UuZmlsdGVyQXJyYXkoZnJhbWVFdmVudHNCeVBpZFtwaWRdLGU9PmUuc3RhcnQpKTt9CmlmKGZyYW1lRXZlbnRzLmxlbmd0aD09PTAmJiEocGUuaW5pdGlhdG9yVHlwZT09PUlOSVRJQVRPUl9UWVBFLldFQkdMfHxwZS5pbml0aWF0b3JUeXBlPT09SU5JVElBVE9SX1RZUEUuVlIpKXtwZS50eXBlPVByb3RvRXhwZWN0YXRpb24uSUdOT1JFRF9UWVBFO25ld1BFcy5wdXNoKHBlKTtjb250aW51ZTt9CnBlLmFzc29jaWF0ZWRFdmVudHMuYWRkRXZlbnRTZXQoZnJhbWVFdmVudHMpO25ld1BFcy5wdXNoKHBlKTt9CnJldHVybiBuZXdQRXM7fQpmdW5jdGlvbiBjaGVja0FsbElucHV0RXZlbnRzSGFuZGxlZChtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyxwcm90b0V4cGVjdGF0aW9ucyx3YXJuKXtjb25zdCBoYW5kbGVkRXZlbnRzPVtdO3Byb3RvRXhwZWN0YXRpb25zLmZvckVhY2goZnVuY3Rpb24ocHJvdG9FeHBlY3RhdGlvbil7cHJvdG9FeHBlY3RhdGlvbi5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKChldmVudC50aXRsZT09PUNTU19BTklNQVRJT05fVElUTEUpJiYoZXZlbnQuc3ViU2xpY2VzLmxlbmd0aD4wKSl7cmV0dXJuO30KaWYoKGhhbmRsZWRFdmVudHMuaW5kZXhPZihldmVudCk+PTApJiYoIWlzSW1wbEZyYW1lRXZlbnQoZXZlbnQpKSl7d2Fybih7dHlwZTonVXNlck1vZGVsQnVpbGRlcicsbWVzc2FnZTpgZG91YmxlLWhhbmRsZWQgZXZlbnQ6ICR7ZXZlbnQudHlwZU5hbWV9IEAgJHtldmVudC5zdGFydH1gLHNob3dUb1VzZXI6ZmFsc2UsfSk7cmV0dXJuO30KaGFuZGxlZEV2ZW50cy5wdXNoKGV2ZW50KTt9KTt9KTtzb3J0ZWRJbnB1dEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihoYW5kbGVkRXZlbnRzLmluZGV4T2YoZXZlbnQpPDApe3dhcm4oe3R5cGU6J1VzZXJNb2RlbEJ1aWxkZXInLG1lc3NhZ2U6YGRvdWJsZS1oYW5kbGVkIGV2ZW50OiAke2V2ZW50LnR5cGVOYW1lfSBAICR7ZXZlbnQuc3RhcnR9YCxzaG93VG9Vc2VyOmZhbHNlLH0pO319KTt9CmZ1bmN0aW9uIGZpbmRJbnB1dEV4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcil7bGV0IHdhcm5pbmc7ZnVuY3Rpb24gd2Fybih3KXtpZih3YXJuaW5nKXJldHVybjt3YXJuaW5nPXc7fQpjb25zdCBzb3J0ZWRJbnB1dEV2ZW50cz1nZXRTb3J0ZWRJbnB1dEV2ZW50cyhtb2RlbEhlbHBlcik7bGV0IHByb3RvRXhwZWN0YXRpb25zPWZpbmRQcm90b0V4cGVjdGF0aW9ucyhtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyx3YXJuKTtwcm90b0V4cGVjdGF0aW9ucz1wb3N0UHJvY2Vzc1Byb3RvRXhwZWN0YXRpb25zKG1vZGVsSGVscGVyLHByb3RvRXhwZWN0YXRpb25zKTtjaGVja0FsbElucHV0RXZlbnRzSGFuZGxlZChtb2RlbEhlbHBlcixzb3J0ZWRJbnB1dEV2ZW50cyxwcm90b0V4cGVjdGF0aW9ucyx3YXJuKTtpZih3YXJuaW5nKW1vZGVsSGVscGVyLm1vZGVsLmltcG9ydFdhcm5pbmcod2FybmluZyk7Y29uc3QgZXhwZWN0YXRpb25zPVtdO3Byb3RvRXhwZWN0YXRpb25zLmZvckVhY2goZnVuY3Rpb24ocHJvdG9FeHBlY3RhdGlvbil7Y29uc3QgaXI9cHJvdG9FeHBlY3RhdGlvbi5jcmVhdGVJbnRlcmFjdGlvblJlY29yZChtb2RlbEhlbHBlci5tb2RlbCk7aWYoaXIpe2V4cGVjdGF0aW9ucy5wdXNoKGlyKTt9fSk7cmV0dXJuIGV4cGVjdGF0aW9uczt9CnJldHVybntmaW5kSW5wdXRFeHBlY3RhdGlvbnMsY29tcGFyZUV2ZW50cyxDU1NfQU5JTUFUSU9OX1RJVExFLFZSX0VYUEVDVEFUSU9OX0VWRU5UUyxXRUJYUl9JTlNUQU5UX0VWRU5UUyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYicsZnVuY3Rpb24oKXtjbGFzcyBGaXhlZENvbG9yU2NoZW1le2NvbnN0cnVjdG9yKG5hbWVzVG9Db2xvcnMpe3RoaXMubmFtZXNUb0NvbG9yc189bmFtZXNUb0NvbG9yczt9CnN0YXRpYyBmcm9tTmFtZXMobmFtZXMpe2NvbnN0IG5hbWVzVG9Db2xvcnM9bmV3IE1hcCgpO2NvbnN0IGdlbmVyYXRvcj1uZXcgdHIuYi5TaW5lYm93Q29sb3JHZW5lcmF0b3IoKTtmb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7bmFtZXNUb0NvbG9ycy5zZXQobmFtZSxnZW5lcmF0b3IuY29sb3JGb3JLZXkobmFtZSkpO30KcmV0dXJuIG5ldyBGaXhlZENvbG9yU2NoZW1lKG5hbWVzVG9Db2xvcnMpO30KZ2V0Q29sb3IobmFtZSl7Y29uc3QgY29sb3I9dGhpcy5uYW1lc1RvQ29sb3JzXy5nZXQobmFtZSk7aWYoY29sb3I9PT11bmRlZmluZWQpdGhyb3cgbmV3IEVycm9yKCdVbmtub3duIGNvbG9yOiAnK25hbWUpO3JldHVybiBjb2xvcjt9fQpjb25zdCBNZW1vcnlDb2x1bW5Db2xvclNjaGVtZT1uZXcgRml4ZWRDb2xvclNjaGVtZShuZXcgTWFwKFtbJ3VzZWRfbWVtb3J5X2NvbHVtbicsbmV3IHRyLmIuQ29sb3IoMCwwLDI1NSldLFsnb2xkZXJfdXNlZF9tZW1vcnlfY29sdW1uJyxuZXcgdHIuYi5Db2xvcigxNTMsMjA0LDI1NSldLFsndHJhY2luZ19tZW1vcnlfY29sdW1uJyxuZXcgdHIuYi5Db2xvcigxNTMsMTUzLDE1MyldXSkpO2Z1bmN0aW9uIEZpeGVkQ29sb3JTY2hlbWVSZWdpc3RyeSgpe30KRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5Lmxvb2tVcD1mdW5jdGlvbihuYW1lKXtjb25zdCBpbmZvPXRoaXMuZmluZFR5cGVJbmZvTWF0Y2hpbmcoaW5mbz0+aW5mby5tZXRhZGF0YS5uYW1lPT09bmFtZSk7aWYoIWluZm8pcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gaW5mby5jb25zdHJ1Y3RvcigpO307Y29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5LG9wdGlvbnMpO3JldHVybntNZW1vcnlDb2x1bW5Db2xvclNjaGVtZSxGaXhlZENvbG9yU2NoZW1lLEZpeGVkQ29sb3JTY2hlbWVSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUuY2hyb21lX3Byb2Nlc3NlcycsZnVuY3Rpb24oKXtjb25zdCBDSFJPTUVfUFJPQ0VTU19OQU1FUz17QlJPV1NFUjonYnJvd3Nlcl9wcm9jZXNzJyxSRU5ERVJFUjoncmVuZGVyZXJfcHJvY2Vzc2VzJyxBTEw6J2FsbF9wcm9jZXNzZXMnLEdQVTonZ3B1X3Byb2Nlc3MnLFBQQVBJOidwcGFwaV9wcm9jZXNzJyxVTktOT1dOOid1bmtub3duX3Byb2Nlc3NlcycsfTtjb25zdCBQUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FPSdDaHJvbWVQcm9jZXNzTmFtZXMnO2NvbnN0IFBST0NFU1NfQ09MT1JfU0NIRU1FPXRyLmIuRml4ZWRDb2xvclNjaGVtZS5mcm9tTmFtZXMoT2JqZWN0LnZhbHVlcyhDSFJPTUVfUFJPQ0VTU19OQU1FUykpO3RyLmIuRml4ZWRDb2xvclNjaGVtZVJlZ2lzdHJ5LnJlZ2lzdGVyKCgpPT5QUk9DRVNTX0NPTE9SX1NDSEVNRSx7bmFtZTpQUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FLH0pO2Z1bmN0aW9uIGNhbm9uaWNhbGl6ZU5hbWUobmFtZSl7cmV0dXJuIG5hbWUudG9Mb3dlckNhc2UoKS5yZXBsYWNlKCcgJywnXycpO30KZnVuY3Rpb24gY2Fub25pY2FsaXplUHJvY2Vzc05hbWUocmF3UHJvY2Vzc05hbWUpe2lmKCFyYXdQcm9jZXNzTmFtZSlyZXR1cm4gQ0hST01FX1BST0NFU1NfTkFNRVMuVU5LTk9XTjtjb25zdCBiYXNlQ2Fub25pY2FsTmFtZT1jYW5vbmljYWxpemVOYW1lKHJhd1Byb2Nlc3NOYW1lKTtzd2l0Y2goYmFzZUNhbm9uaWNhbE5hbWUpe2Nhc2UncmVuZGVyZXInOnJldHVybiBDSFJPTUVfUFJPQ0VTU19OQU1FUy5SRU5ERVJFUjtjYXNlJ2Jyb3dzZXInOnJldHVybiBDSFJPTUVfUFJPQ0VTU19OQU1FUy5CUk9XU0VSO30KaWYoT2JqZWN0LnZhbHVlcyhDSFJPTUVfUFJPQ0VTU19OQU1FUykuaW5jbHVkZXMoYmFzZUNhbm9uaWNhbE5hbWUpKXtyZXR1cm4gYmFzZUNhbm9uaWNhbE5hbWU7fQpyZXR1cm4gQ0hST01FX1BST0NFU1NfTkFNRVMuVU5LTk9XTjt9CnJldHVybntDSFJPTUVfUFJPQ0VTU19OQU1FUyxQUk9DRVNTX0NPTE9SX1NDSEVNRSxQUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FLGNhbm9uaWNhbGl6ZU5hbWUsY2Fub25pY2FsaXplUHJvY2Vzc05hbWUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gcGVyY2VwdHVhbEJsZW5kKGlyLGluZGV4LHNjb3JlKXtyZXR1cm4gTWF0aC5leHAoMS1zY29yZSk7fQpmdW5jdGlvbiBmaWx0ZXJFeHBlY3RhdGlvbnNCeVJhbmdlKGlycyxvcHRfcmFuZ2Upe2NvbnN0IGZpbHRlcmVkRXhwZWN0YXRpb25zPVtdO2lycy5mb3JFYWNoKGZ1bmN0aW9uKGlyKXtpZighKGlyIGluc3RhbmNlb2YgdHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uKSlyZXR1cm47aWYoIW9wdF9yYW5nZXx8b3B0X3JhbmdlLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKGlyLnN0YXJ0LGlyLmVuZCkpe2ZpbHRlcmVkRXhwZWN0YXRpb25zLnB1c2goaXIpO319KTtyZXR1cm4gZmlsdGVyZWRFeHBlY3RhdGlvbnM7fQpmdW5jdGlvbiBzcGxpdEdsb2JhbER1bXBzQnlCcm93c2VyTmFtZShtb2RlbCxvcHRfcmFuZ2VPZkludGVyZXN0KXtjb25zdCBjaHJvbWVNb2RlbEhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBicm93c2VyTmFtZVRvR2xvYmFsRHVtcHM9bmV3IE1hcCgpO2NvbnN0IGdsb2JhbER1bXBUb0Jyb3dzZXJIZWxwZXI9bmV3IFdlYWtNYXAoKTtpZihjaHJvbWVNb2RlbEhlbHBlcil7Y2hyb21lTW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcnMuZm9yRWFjaChmdW5jdGlvbihoZWxwZXIpe2NvbnN0IGdsb2JhbER1bXBzPXNraXBEdW1wc1RoYXREb05vdEludGVyc2VjdFJhbmdlKGhlbHBlci5wcm9jZXNzLm1lbW9yeUR1bXBzLm1hcChkPT5kLmdsb2JhbE1lbW9yeUR1bXApLG9wdF9yYW5nZU9mSW50ZXJlc3QpO2dsb2JhbER1bXBzLmZvckVhY2goZnVuY3Rpb24oZ2xvYmFsRHVtcCl7Y29uc3QgZXhpc3RpbmdIZWxwZXI9Z2xvYmFsRHVtcFRvQnJvd3NlckhlbHBlci5nZXQoZ2xvYmFsRHVtcCk7aWYoZXhpc3RpbmdIZWxwZXIhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTWVtb3J5IGR1bXAgSUQgY2xhc2ggYWNyb3NzIG11bHRpcGxlIGJyb3dzZXJzICcrJ3dpdGggUElEczogJytleGlzdGluZ0hlbHBlci5waWQrJyBhbmQgJytoZWxwZXIucGlkKTt9Cmdsb2JhbER1bXBUb0Jyb3dzZXJIZWxwZXIuc2V0KGdsb2JhbER1bXAsaGVscGVyKTt9KTttYWtlS2V5VW5pcXVlQW5kU2V0KGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx0ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZU5hbWUoaGVscGVyLmJyb3dzZXJOYW1lKSxnbG9iYWxEdW1wcyk7fSk7fQpjb25zdCB1bmNsYXNzaWZpZWRHbG9iYWxEdW1wcz1za2lwRHVtcHNUaGF0RG9Ob3RJbnRlcnNlY3RSYW5nZShtb2RlbC5nbG9iYWxNZW1vcnlEdW1wcy5maWx0ZXIoZz0+IWdsb2JhbER1bXBUb0Jyb3dzZXJIZWxwZXIuaGFzKGcpKSxvcHRfcmFuZ2VPZkludGVyZXN0KTtpZih1bmNsYXNzaWZpZWRHbG9iYWxEdW1wcy5sZW5ndGg+MCl7bWFrZUtleVVuaXF1ZUFuZFNldChicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsJ3Vua25vd25fYnJvd3NlcicsdW5jbGFzc2lmaWVkR2xvYmFsRHVtcHMpO30KcmV0dXJuIGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wczt9CmZ1bmN0aW9uIG1ha2VLZXlVbmlxdWVBbmRTZXQobWFwLGtleSx2YWx1ZSl7bGV0IHVuaXF1ZUtleT1rZXk7bGV0IG5leHRJbmRleD0yO3doaWxlKG1hcC5oYXModW5pcXVlS2V5KSl7dW5pcXVlS2V5PWtleStuZXh0SW5kZXg7bmV4dEluZGV4Kys7fQptYXAuc2V0KHVuaXF1ZUtleSx2YWx1ZSk7fQpmdW5jdGlvbiBza2lwRHVtcHNUaGF0RG9Ob3RJbnRlcnNlY3RSYW5nZShkdW1wcyxvcHRfcmFuZ2Upe2lmKCFvcHRfcmFuZ2UpcmV0dXJuIGR1bXBzO3JldHVybiBkdW1wcy5maWx0ZXIoZD0+b3B0X3JhbmdlLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKGQuc3RhcnQsZC5lbmQpKTt9CmZ1bmN0aW9uIGhhc0NhdGVnb3J5QW5kTmFtZShldmVudCxjYXRlZ29yeSx0aXRsZSl7cmV0dXJuIGV2ZW50LnRpdGxlPT09dGl0bGUmJmV2ZW50LmNhdGVnb3J5JiZ0ci5iLmdldENhdGVnb3J5UGFydHMoZXZlbnQuY2F0ZWdvcnkpLmluY2x1ZGVzKGNhdGVnb3J5KTt9CnJldHVybntoYXNDYXRlZ29yeUFuZE5hbWUsZmlsdGVyRXhwZWN0YXRpb25zQnlSYW5nZSxwZXJjZXB0dWFsQmxlbmQsc3BsaXRHbG9iYWxEdW1wc0J5QnJvd3Nlck5hbWV9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgQ0hST01FX0lOVEVSTkFMX1VSTFM9WycnLCdhYm91dDpibGFuaycsJ2RhdGE6dGV4dC9odG1sLHBsdWdpbnBsYWNlaG9sZGVyZGF0YScsJ2Nocm9tZS1lcnJvcjovL2Nocm9tZXdlYmRhdGEvJ107Y29uc3QgU0NIRURVTEVSX1RPUF9MRVZFTF9UQVNLX1RJVExFPSdUaHJlYWRDb250cm9sbGVySW1wbDo6UnVuVGFzayc7Y29uc3QgU0NIRURVTEVSX1RPUF9MRVZFTF9UQVNLUz1uZXcgU2V0KFtTQ0hFRFVMRVJfVE9QX0xFVkVMX1RBU0tfVElUTEUsJ1RocmVhZENvbnRyb2xsZXJJbXBsOjpEb1dvcmsnLCdUYXNrUXVldWVNYW5hZ2VyOjpQcm9jZXNzVGFza0Zyb21Xb3JrUXVldWUnXSk7Y2xhc3MgRXZlbnRGaW5kZXJVdGlsc3tzdGF0aWMgaGFzQ2F0ZWdvcnlBbmROYW1lKGV2ZW50LGNhdGVnb3J5LHRpdGxlKXtyZXR1cm4gZXZlbnQudGl0bGU9PT10aXRsZSYmZXZlbnQuY2F0ZWdvcnkmJnRyLmIuZ2V0Q2F0ZWdvcnlQYXJ0cyhldmVudC5jYXRlZ29yeSkuaW5jbHVkZXMoY2F0ZWdvcnkpO30Kc3RhdGljKmdldE1haW5UaHJlYWRFdmVudHMocmVuZGVyZXJIZWxwZXIsZXZlbnRUaXRsZSxldmVudENhdGVnb3J5KXtpZighcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZClyZXR1cm47Zm9yKGNvbnN0IGV2IG9mIHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5jaGlsZEV2ZW50cygpKXtpZihyZW5kZXJlckhlbHBlci5pc1RlbGVtZXRyeUludGVybmFsRXZlbnQoZXYpKWNvbnRpbnVlO2lmKCF0aGlzLmhhc0NhdGVnb3J5QW5kTmFtZShldixldmVudENhdGVnb3J5LGV2ZW50VGl0bGUpKXtjb250aW51ZTt9CnlpZWxkIGV2O319CnN0YXRpYyBnZXROZXR3b3JrRXZlbnRzSW5SYW5nZShwcm9jZXNzLHJhbmdlKXtjb25zdCBuZXR3b3JrRXZlbnRzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jZXNzLnRocmVhZHMpKXtjb25zdCB0aHJlYWRIZWxwZXI9bmV3IHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lVGhyZWFkSGVscGVyKHRocmVhZCk7Y29uc3QgZXZlbnRzPXRocmVhZEhlbHBlci5nZXROZXR3b3JrRXZlbnRzKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7aWYocmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZXZlbnQuc3RhcnQsZXZlbnQuZW5kKSl7bmV0d29ya0V2ZW50cy5wdXNoKGV2ZW50KTt9fX0KcmV0dXJuIG5ldHdvcmtFdmVudHM7fQpzdGF0aWMgZ2V0U29ydGVkTWFpblRocmVhZEV2ZW50c0J5RnJhbWUocmVuZGVyZXJIZWxwZXIsZXZlbnRUaXRsZSxldmVudENhdGVnb3J5KXtjb25zdCBldmVudHNCeUZyYW1lPW5ldyBNYXAoKTtjb25zdCBldmVudHM9dGhpcy5nZXRNYWluVGhyZWFkRXZlbnRzKHJlbmRlcmVySGVscGVyLGV2ZW50VGl0bGUsZXZlbnRDYXRlZ29yeSk7Zm9yKGNvbnN0IGV2IG9mIGV2ZW50cyl7Y29uc3QgZnJhbWVJZFJlZj1ldi5hcmdzLmZyYW1lO2lmKGZyYW1lSWRSZWY9PT11bmRlZmluZWQpY29udGludWU7aWYoIWV2ZW50c0J5RnJhbWUuaGFzKGZyYW1lSWRSZWYpKXtldmVudHNCeUZyYW1lLnNldChmcmFtZUlkUmVmLFtdKTt9CmV2ZW50c0J5RnJhbWUuZ2V0KGZyYW1lSWRSZWYpLnB1c2goZXYpO30KcmV0dXJuIGV2ZW50c0J5RnJhbWU7fQpzdGF0aWMgZ2V0U29ydGVkTWFpblRocmVhZEV2ZW50c0J5TmF2SWQocmVuZGVyZXJIZWxwZXIsZXZlbnRUaXRsZSxldmVudENhdGVnb3J5KXtjb25zdCBldmVudHNCeU5hdklkPW5ldyBNYXAoKTtjb25zdCBldmVudHM9dGhpcy5nZXRNYWluVGhyZWFkRXZlbnRzKHJlbmRlcmVySGVscGVyLGV2ZW50VGl0bGUsZXZlbnRDYXRlZ29yeSk7Zm9yKGNvbnN0IGV2IG9mIGV2ZW50cyl7aWYoZXYuYXJncy5kYXRhPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IG5hdklkUmVmPWV2LmFyZ3MuZGF0YS5uYXZpZ2F0aW9uSWQ7aWYobmF2SWRSZWY9PT11bmRlZmluZWQpY29udGludWU7ZXZlbnRzQnlOYXZJZC5zZXQobmF2SWRSZWYsZXYpO30KcmV0dXJuIGV2ZW50c0J5TmF2SWQ7fQpzdGF0aWMgZmluZExhc3RFdmVudFN0YXJ0aW5nT25PckJlZm9yZVRpbWVzdGFtcChzb3J0ZWRFdmVudHMsdGltZXN0YW1wKXtjb25zdCBmaXJzdEluZGV4QWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0PnRpbWVzdGFtcCk7aWYoZmlyc3RJbmRleEFmdGVyVGltZXN0YW1wPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBzb3J0ZWRFdmVudHNbZmlyc3RJbmRleEFmdGVyVGltZXN0YW1wLTFdO30Kc3RhdGljIGZpbmRMYXN0RXZlbnRTdGFydGluZ0JlZm9yZVRpbWVzdGFtcChzb3J0ZWRFdmVudHMsdGltZXN0YW1wKXtjb25zdCBmaXJzdEluZGV4QWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0Pj10aW1lc3RhbXApO2lmKGZpcnN0SW5kZXhBZnRlclRpbWVzdGFtcD09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gc29ydGVkRXZlbnRzW2ZpcnN0SW5kZXhBZnRlclRpbWVzdGFtcC0xXTt9CnN0YXRpYyBmaW5kTmV4dEV2ZW50U3RhcnRpbmdPbk9yQWZ0ZXJUaW1lc3RhbXAoc29ydGVkRXZlbnRzLHRpbWVzdGFtcCl7Y29uc3QgZmlyc3RJbmRleE9uT3JBZnRlclRpbWVzdGFtcD10ci5iLmZpbmRGaXJzdFRydWVJbmRleEluU29ydGVkQXJyYXkoc29ydGVkRXZlbnRzLGU9PmUuc3RhcnQ+PXRpbWVzdGFtcCk7aWYoZmlyc3RJbmRleE9uT3JBZnRlclRpbWVzdGFtcD09PXNvcnRlZEV2ZW50cy5sZW5ndGgpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gc29ydGVkRXZlbnRzW2ZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXBdO30Kc3RhdGljIGZpbmROZXh0RXZlbnRTdGFydGluZ0FmdGVyVGltZXN0YW1wKHNvcnRlZEV2ZW50cyx0aW1lc3RhbXApe2NvbnN0IGZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXA9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHNvcnRlZEV2ZW50cyxlPT5lLnN0YXJ0PnRpbWVzdGFtcCk7aWYoZmlyc3RJbmRleE9uT3JBZnRlclRpbWVzdGFtcD09PXNvcnRlZEV2ZW50cy5sZW5ndGgpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gc29ydGVkRXZlbnRzW2ZpcnN0SW5kZXhPbk9yQWZ0ZXJUaW1lc3RhbXBdO30Kc3RhdGljIGZpbmRUb3BsZXZlbFNjaGVkdWxlclRhc2tzKG1haW5UaHJlYWQpe2NvbnN0IHRhc2tzPVtdO2Zvcihjb25zdCB0YXNrIG9mIG1haW5UaHJlYWQuZmluZFRvcG1vc3RTbGljZXMoc2xpY2U9PnNsaWNlLmNhdGVnb3J5PT09J3RvcGxldmVsJyYmU0NIRURVTEVSX1RPUF9MRVZFTF9UQVNLUy5oYXMoc2xpY2UudGl0bGUpKSl7dGFza3MucHVzaCh0YXNrKTt9CnJldHVybiB0YXNrczt9fQpyZXR1cm57RXZlbnRGaW5kZXJVdGlscyxDSFJPTUVfSU5URVJOQUxfVVJMUyxTQ0hFRFVMRVJfVE9QX0xFVkVMX1RBU0tfVElUTEUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2hyb21lJyxmdW5jdGlvbigpe2NvbnN0IFRJTUVfVE9fSU5URVJBQ1RJVkVfV0lORE9XX1NJWkVfTVM9NTAwMDtjb25zdCBBQ1RJVkVfUkVRVUVTVF9UT0xFUkFOQ0U9Mjtjb25zdCBGQ0lfTUlOX0NMVVNURVJfU0VQQVJBVElPTl9NUz0xMDAwO2NvbnN0IFRBU0tfQ0xVU1RFUl9IRUFWSU5FU1NfVEhSRVNIT0xEX01TPTI1MDtjb25zdCBFTkRQT0lOVF9UWVBFUz17TE9OR19UQVNLX1NUQVJUOidMT05HX1RBU0tfU1RBUlQnLExPTkdfVEFTS19FTkQ6J0xPTkdfVEFTS19FTkQnLFJFUVVFU1RfU1RBUlQ6J1JFUVVFU1RfU1RBUlQnLFJFUVVFU1RfRU5EOidSRVFVRVNUX0VORCd9O2Z1bmN0aW9uIGdldEVuZHBvaW50c18oZXZlbnRzLHN0YXJ0VHlwZSxlbmRUeXBlKXtjb25zdCBlbmRwb2ludHM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7ZW5kcG9pbnRzLnB1c2goe3RpbWU6ZXZlbnQuc3RhcnQsdHlwZTpzdGFydFR5cGV9KTtlbmRwb2ludHMucHVzaCh7dGltZTpldmVudC5lbmQsdHlwZTplbmRUeXBlfSk7fQpyZXR1cm4gZW5kcG9pbnRzO30KZnVuY3Rpb24gcmVhY2hlZFRUSVF1aXNjZW5jZV8odGltZXN0YW1wLG5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0LG1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0KXtpZihuZXR3b3JrUXVpZXRXaW5kb3dTdGFydD09PXVuZGVmaW5lZHx8bWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQ9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9CmNvbnN0IG1haW5UaHJlYWRRdWlldEZvckxvbmdFbm91Z2g9dGltZXN0YW1wLW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0Pj1USU1FX1RPX0lOVEVSQUNUSVZFX1dJTkRPV19TSVpFX01TO2NvbnN0IG5ldHdvcmtRdWlldEZvckxvbmdFbm91Z2g9dGltZXN0YW1wLW5ldHdvcmtRdWlldFdpbmRvd1N0YXJ0Pj1USU1FX1RPX0lOVEVSQUNUSVZFX1dJTkRPV19TSVpFX01TO3JldHVybiBtYWluVGhyZWFkUXVpZXRGb3JMb25nRW5vdWdoJiZuZXR3b3JrUXVpZXRGb3JMb25nRW5vdWdoO30KZnVuY3Rpb24gZmluZEludGVyYWN0aXZlVGltZShzZWFyY2hCZWdpbixzZWFyY2hFbmQsZG9tQ29udGVudExvYWRlZEVuZCxsb25nVGFza3NJbldpbmRvdyxuZXR3b3JrUmVxdWVzdHMpe2NvbnN0IGxvbmdUYXNrRW5kcG9pbnRzPWdldEVuZHBvaW50c18obG9uZ1Rhc2tzSW5XaW5kb3csRU5EUE9JTlRfVFlQRVMuTE9OR19UQVNLX1NUQVJULEVORFBPSU5UX1RZUEVTLkxPTkdfVEFTS19FTkQpO2NvbnN0IG5ldHdvcmtSZXF1ZXN0RW5kcG9pbnRzPWdldEVuZHBvaW50c18obmV0d29ya1JlcXVlc3RzLEVORFBPSU5UX1RZUEVTLlJFUVVFU1RfU1RBUlQsRU5EUE9JTlRfVFlQRVMuUkVRVUVTVF9FTkQpO2NvbnN0IGVuZHBvaW50cz1sb25nVGFza0VuZHBvaW50cy5jb25jYXQobmV0d29ya1JlcXVlc3RFbmRwb2ludHMpO2VuZHBvaW50cy5zb3J0KChhLGIpPT5hLnRpbWUtYi50aW1lKTtsZXQgbmV0d29ya1F1aWV0V2luZG93U3RhcnQ9c2VhcmNoQmVnaW47bGV0IG1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0PXNlYXJjaEJlZ2luO2xldCBpbnRlcmFjdGl2ZUNhbmRpZGF0ZT11bmRlZmluZWQ7bGV0IGFjdGl2ZVJlcXVlc3RzPTA7Zm9yKGNvbnN0IGVuZHBvaW50IG9mIGVuZHBvaW50cyl7aWYocmVhY2hlZFRUSVF1aXNjZW5jZV8oZW5kcG9pbnQudGltZSxuZXR3b3JrUXVpZXRXaW5kb3dTdGFydCxtYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydCkpe2ludGVyYWN0aXZlQ2FuZGlkYXRlPW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0O2JyZWFrO30Kc3dpdGNoKGVuZHBvaW50LnR5cGUpe2Nhc2UgRU5EUE9JTlRfVFlQRVMuTE9OR19UQVNLX1NUQVJUOm1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0PXVuZGVmaW5lZDticmVhaztjYXNlIEVORFBPSU5UX1RZUEVTLkxPTkdfVEFTS19FTkQ6bWFpblRocmVhZFF1aWV0V2luZG93U3RhcnQ9ZW5kcG9pbnQudGltZTticmVhaztjYXNlIEVORFBPSU5UX1RZUEVTLlJFUVVFU1RfU1RBUlQ6YWN0aXZlUmVxdWVzdHMrKztpZihhY3RpdmVSZXF1ZXN0cz5BQ1RJVkVfUkVRVUVTVF9UT0xFUkFOQ0Upe25ldHdvcmtRdWlldFdpbmRvd1N0YXJ0PXVuZGVmaW5lZDt9CmJyZWFrO2Nhc2UgRU5EUE9JTlRfVFlQRVMuUkVRVUVTVF9FTkQ6YWN0aXZlUmVxdWVzdHMtLTtpZihhY3RpdmVSZXF1ZXN0cz09PUFDVElWRV9SRVFVRVNUX1RPTEVSQU5DRSl7bmV0d29ya1F1aWV0V2luZG93U3RhcnQ9ZW5kcG9pbnQudGltZTt9CmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnRlcm5hbCBFcnJvcjogVW5oYW5kbGVkIGVuZHBvaW50IHR5cGUuJyk7fX0KaWYoaW50ZXJhY3RpdmVDYW5kaWRhdGU9PT11bmRlZmluZWQmJnJlYWNoZWRUVElRdWlzY2VuY2VfKHNlYXJjaEVuZCxuZXR3b3JrUXVpZXRXaW5kb3dTdGFydCxtYWluVGhyZWFkUXVpZXRXaW5kb3dTdGFydCkpe2ludGVyYWN0aXZlQ2FuZGlkYXRlPW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0O30KaWYoaW50ZXJhY3RpdmVDYW5kaWRhdGU9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gTWF0aC5tYXgoaW50ZXJhY3RpdmVDYW5kaWRhdGUsZG9tQ29udGVudExvYWRlZEVuZCk7fQpmdW5jdGlvbiByZXF1aXJlZEZDSVdpbmRvd1NpemVNcyh0aW1lU2luY2VTZWFyY2hCZWdpbk1zKXtjb25zdCB0aW1lQ29lZmZpY2llbnQ9MS8xNSpNYXRoLmxvZygyKTtjb25zdCB0aW1lU2luY2VTZWFyY2hCZWdpblNlY29uZHM9dHIuYi5jb252ZXJ0VW5pdCh0aW1lU2luY2VTZWFyY2hCZWdpbk1zLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSk7Y29uc3Qgd2luZG93U2l6ZVNlY29uZHM9NCpNYXRoLmV4cCgtdGltZUNvZWZmaWNpZW50KnRpbWVTaW5jZVNlYXJjaEJlZ2luU2Vjb25kcykrMTtyZXR1cm4gdHIuYi5jb252ZXJ0VW5pdCh3aW5kb3dTaXplU2Vjb25kcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO30KY2xhc3MgVGFza0NsdXN0ZXJ7Y29uc3RydWN0b3IodGFza3NJbkNsdXN0ZXJTb3J0ZWQpe2lmKHRhc2tzSW5DbHVzdGVyU29ydGVkLmxlbmd0aD09PTApe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgRXJyb3I6IFRhc2tDbHVzdGVyIG11c3QgaGF2ZSBub24gemVybyB0YXNrcycpO30KZm9yKGxldCBpPTA7aTx0YXNrc0luQ2x1c3RlclNvcnRlZC5sZW5ndGgtMTtpKyspe2NvbnN0IGR1cmF0aW9uQmV0d2VlblRhc2tzPXRhc2tzSW5DbHVzdGVyU29ydGVkW2krMV0uc3RhcnQtCnRhc2tzSW5DbHVzdGVyU29ydGVkW2ldLmVuZDtpZihkdXJhdGlvbkJldHdlZW5UYXNrcz49RkNJX01JTl9DTFVTVEVSX1NFUEFSQVRJT05fTVMpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgRXJyb3I6IFRhc2tzIGluIGEgVGFza0NsdXN0ZXIgY2Fubm90IGJlICcrJ21vcmUgdGhhbiAnK0ZDSV9NSU5fQ0xVU1RFUl9TRVBBUkFUSU9OX01TKycgbWlsaXNlY29uZHMgYXBhcnQnKTt9CmlmKGR1cmF0aW9uQmV0d2VlblRhc2tzPC0xZTcpe3Rocm93IG5ldyBFcnJvcignSW50ZXJuYWwgRXJyb3I6IExpc3Qgb2YgdGFza3MgdXNlZCB0byBjb25zdHJ1Y3QgJysnVGFza0NsdXN0ZXIgbXVzdCBiZSBzb3J0ZWQuJyk7fX0KdGhpcy5fY2x1c3RlclRhc2tzPXRhc2tzSW5DbHVzdGVyU29ydGVkO30KZ2V0IHN0YXJ0KCl7cmV0dXJuIHRoaXMuX2NsdXN0ZXJUYXNrc1swXS5zdGFydDt9CmdldCBlbmQoKXtyZXR1cm4gdGhpcy5fY2x1c3RlclRhc2tzW3RoaXMuX2NsdXN0ZXJUYXNrcy5sZW5ndGgtMV0uZW5kO30KaXNIZWF2eSgpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0PlRBU0tfQ0xVU1RFUl9IRUFWSU5FU1NfVEhSRVNIT0xEX01TO319CmZ1bmN0aW9uIGZpbmRGQ0lUYXNrQ2x1c3RlcnMoc29ydGVkTG9uZ1Rhc2tzKXtjb25zdCBjbHVzdGVycz1bXTtpZihzb3J0ZWRMb25nVGFza3MubGVuZ3RoPT09MClyZXR1cm4gY2x1c3RlcnM7Y29uc3QgZmlyc3RUYXNrPXNvcnRlZExvbmdUYXNrc1swXTtjb25zdCByZXN0T2ZUYXNrcz1zb3J0ZWRMb25nVGFza3Muc2xpY2UoMSk7bGV0IGN1cnJlbnRDbHVzdGVyVGFza3M9W2ZpcnN0VGFza107Zm9yKGNvbnN0IGN1cnJUYXNrIG9mIHJlc3RPZlRhc2tzKXtjb25zdCBwcmV2VGFzaz1jdXJyZW50Q2x1c3RlclRhc2tzW2N1cnJlbnRDbHVzdGVyVGFza3MubGVuZ3RoLTFdO2lmKGN1cnJUYXNrLnN0YXJ0LXByZXZUYXNrLmVuZDxGQ0lfTUlOX0NMVVNURVJfU0VQQVJBVElPTl9NUyl7Y3VycmVudENsdXN0ZXJUYXNrcy5wdXNoKGN1cnJUYXNrKTt9ZWxzZXtjbHVzdGVycy5wdXNoKG5ldyBUYXNrQ2x1c3RlcihjdXJyZW50Q2x1c3RlclRhc2tzKSk7Y3VycmVudENsdXN0ZXJUYXNrcz1bY3VyclRhc2tdO319CmNsdXN0ZXJzLnB1c2gobmV3IFRhc2tDbHVzdGVyKGN1cnJlbnRDbHVzdGVyVGFza3MpKTtyZXR1cm4gY2x1c3RlcnM7fQpmdW5jdGlvbiByZWFjaGVkRkNJUXVpZXNjZW5jZV8odGltZXN0YW1wLG1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0LHNlYXJjaEJlZ2luKXtjb25zdCBxdWlldFdpbmRvd1NpemU9dGltZXN0YW1wLW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0O2NvbnN0IHRpbWVTaW5jZVNlYXJjaEJlZ2luPW1haW5UaHJlYWRRdWlldFdpbmRvd1N0YXJ0LXNlYXJjaEJlZ2luO2NvbnN0IHJlcXVpcmVkV2luZG93U2l6ZT1yZXF1aXJlZEZDSVdpbmRvd1NpemVNcyh0aW1lU2luY2VTZWFyY2hCZWdpbik7cmV0dXJuIHF1aWV0V2luZG93U2l6ZT5yZXF1aXJlZFdpbmRvd1NpemU7fQpmdW5jdGlvbiBmaW5kRmlyc3RDcHVJZGxlVGltZShzZWFyY2hCZWdpbixzZWFyY2hFbmQsZG9tQ29udGVudExvYWRlZEVuZCxsb25nVGFza3NJbldpbmRvdyl7Y29uc3Qgc29ydGVkTG9uZ1Rhc2tzPWxvbmdUYXNrc0luV2luZG93LnNvcnQoKGEsYik9PmEuc3RhcnQtYi5zdGFydCk7Y29uc3QgdGFza0NsdXN0ZXJzPWZpbmRGQ0lUYXNrQ2x1c3RlcnMoc29ydGVkTG9uZ1Rhc2tzKTtjb25zdCBoZWF2eVRhc2tDbHVzdGVycz10YXNrQ2x1c3RlcnMuZmlsdGVyKGNsdXN0ZXI9PmNsdXN0ZXIuaXNIZWF2eSgpKTtsZXQgcXVpZXRXaW5kb3dCZWdpbj1zZWFyY2hCZWdpbjtsZXQgZmlDYW5kaWRhdGU9dW5kZWZpbmVkO2Zvcihjb25zdCBjbHVzdGVyIG9mIGhlYXZ5VGFza0NsdXN0ZXJzKXtpZihyZWFjaGVkRkNJUXVpZXNjZW5jZV8oY2x1c3Rlci5zdGFydCxxdWlldFdpbmRvd0JlZ2luLHNlYXJjaEJlZ2luKSl7ZmlDYW5kaWRhdGU9cXVpZXRXaW5kb3dCZWdpbjticmVhazt9CnF1aWV0V2luZG93QmVnaW49Y2x1c3Rlci5lbmQ7fQppZihmaUNhbmRpZGF0ZT09PXVuZGVmaW5lZCl7aWYocmVhY2hlZEZDSVF1aWVzY2VuY2VfKHNlYXJjaEVuZCxxdWlldFdpbmRvd0JlZ2luLHNlYXJjaEJlZ2luKSl7ZmlDYW5kaWRhdGU9cXVpZXRXaW5kb3dCZWdpbjt9ZWxzZXtyZXR1cm4gdW5kZWZpbmVkO319CnJldHVybiBNYXRoLm1heChmaUNhbmRpZGF0ZSxkb21Db250ZW50TG9hZGVkRW5kKTt9CnJldHVybntmaW5kSW50ZXJhY3RpdmVUaW1lLGZpbmRGaXJzdENwdUlkbGVUaW1lLHJlcXVpcmVkRkNJV2luZG93U2l6ZU1zLGZpbmRGQ0lUYXNrQ2x1c3RlcnMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2NvbnN0IExPQURfU1VCVFlQRV9OQU1FUz17U1VDQ0VTU0ZVTDonU3VjY2Vzc2Z1bCcsRkFJTEVEOidGYWlsZWQnLH07Y29uc3QgRE9FU19MT0FEX1NVQlRZUEVfTkFNRV9FWElTVD17fTtmb3IoY29uc3Qga2V5IGluIExPQURfU1VCVFlQRV9OQU1FUyl7RE9FU19MT0FEX1NVQlRZUEVfTkFNRV9FWElTVFtMT0FEX1NVQlRZUEVfTkFNRVNba2V5XV09dHJ1ZTt9CmZ1bmN0aW9uIExvYWRFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbixyZW5kZXJlcixuYXZpZ2F0aW9uU3RhcnQsZm1wRXZlbnQsZGNsRW5kRXZlbnQsY3B1SWRsZVRpbWUsdGltZVRvSW50ZXJhY3RpdmUsdXJsLGZyYW1lSWQpe2lmKCFET0VTX0xPQURfU1VCVFlQRV9OQU1FX0VYSVNUW2luaXRpYXRvclRpdGxlXSl7dGhyb3cgbmV3IEVycm9yKGluaXRpYXRvclRpdGxlKycgaXMgbm90IGluIExPQURfU1VCVFlQRV9OQU1FUycpO30KdHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCxpbml0aWF0b3JUaXRsZSxzdGFydCxkdXJhdGlvbik7dGhpcy5yZW5kZXJQcm9jZXNzPXJlbmRlcmVyO3RoaXMucmVuZGVyTWFpblRocmVhZD11bmRlZmluZWQ7dGhpcy5yb3V0aW5nSWQ9dW5kZWZpbmVkO3RoaXMucGFyZW50Um91dGluZ0lkPXVuZGVmaW5lZDt0aGlzLmxvYWRGaW5pc2hlZEV2ZW50PXVuZGVmaW5lZDt0aGlzLm5hdmlnYXRpb25TdGFydD1uYXZpZ2F0aW9uU3RhcnQ7dGhpcy5mbXBFdmVudD1mbXBFdmVudDt0aGlzLmRvbUNvbnRlbnRMb2FkZWRFbmRFdmVudD1kY2xFbmRFdmVudDt0aGlzLmZpcnN0Q3B1SWRsZVRpbWU9Y3B1SWRsZVRpbWU7dGhpcy50aW1lVG9JbnRlcmFjdGl2ZT10aW1lVG9JbnRlcmFjdGl2ZTt0aGlzLnVybD11cmw7dGhpcy5mcmFtZUlkPWZyYW1lSWQ7fQpMb2FkRXhwZWN0YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnByb3RvdHlwZSxjb25zdHJ1Y3RvcjpMb2FkRXhwZWN0YXRpb259O3RyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5zdWJUeXBlcy5yZWdpc3RlcihMb2FkRXhwZWN0YXRpb24se3N0YWdlVGl0bGU6J0xvYWQnLGNvbG9ySWQ6dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdyYWlsX2xvYWQnKX0pO3JldHVybntMT0FEX1NVQlRZUEVfTkFNRVMsTG9hZEV4cGVjdGF0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtjb25zdCBMT05HX1RBU0tfVEhSRVNIT0xEX01TPTUwO2NvbnN0IElHTk9SRV9VUkxTPVsnJywnYWJvdXQ6YmxhbmsnLF07ZnVuY3Rpb24gZmluZEZyYW1lTG9hZGVyU25hcHNob3RBdChyZW5kZXJlckhlbHBlcixmcmFtZUlkUmVmLHRzKXtjb25zdCBvYmplY3RzPXJlbmRlcmVySGVscGVyLnByb2Nlc3Mub2JqZWN0cztjb25zdCBmcmFtZUxvYWRlckluc3RhbmNlcz1vYmplY3RzLmluc3RhbmNlc0J5VHlwZU5hbWVfLkZyYW1lTG9hZGVyO2lmKGZyYW1lTG9hZGVySW5zdGFuY2VzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7bGV0IHNuYXBzaG90O2Zvcihjb25zdCBpbnN0YW5jZSBvZiBmcmFtZUxvYWRlckluc3RhbmNlcyl7aWYoIWluc3RhbmNlLmlzQWxpdmVBdCh0cykpY29udGludWU7Y29uc3QgbWF5YmVTbmFwc2hvdD1pbnN0YW5jZS5nZXRTbmFwc2hvdEF0KHRzKTtpZihmcmFtZUlkUmVmIT09bWF5YmVTbmFwc2hvdC5hcmdzLmZyYW1lLmlkX3JlZiljb250aW51ZTtzbmFwc2hvdD1tYXliZVNuYXBzaG90O30KcmV0dXJuIHNuYXBzaG90O30KZnVuY3Rpb24gZmluZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q2FuZGlkYXRlcyhyZW5kZXJlckhlbHBlcil7Y29uc3QgY2FuZGlkYXRlc0ZvckZyYW1lSWQ9e307Zm9yKGNvbnN0IGV2IG9mIHJlbmRlcmVySGVscGVyLnByb2Nlc3MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZighdHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5oYXNDYXRlZ29yeUFuZE5hbWUoZXYsJ2xvYWRpbmcnLCdmaXJzdE1lYW5pbmdmdWxQYWludENhbmRpZGF0ZScpKXtjb250aW51ZTt9CmlmKHJlbmRlcmVySGVscGVyLmlzVGVsZW1ldHJ5SW50ZXJuYWxFdmVudChldikpY29udGludWU7Y29uc3QgZnJhbWVJZFJlZj1ldi5hcmdzLmZyYW1lO2lmKGZyYW1lSWRSZWY9PT11bmRlZmluZWQpY29udGludWU7bGV0IGxpc3Q9Y2FuZGlkYXRlc0ZvckZyYW1lSWRbZnJhbWVJZFJlZl07aWYobGlzdD09PXVuZGVmaW5lZCl7Y2FuZGlkYXRlc0ZvckZyYW1lSWRbZnJhbWVJZFJlZl09bGlzdD1bXTt9Cmxpc3QucHVzaChldik7fQpyZXR1cm4gY2FuZGlkYXRlc0ZvckZyYW1lSWQ7fQpmdW5jdGlvbiBjb21wdXRlSW50ZXJhY3Rpdml0eU1ldHJpY1NhbXBsZV8ocmVuZGVyZXJIZWxwZXIsbmF2aWdhdGlvblN0YXJ0LGZtcEV2ZW50LGRvbUNvbnRlbnRMb2FkZWRFbmRFdmVudCxzZWFyY2hXaW5kb3dFbmQpe2lmKGRvbUNvbnRlbnRMb2FkZWRFbmRFdmVudD09PXVuZGVmaW5lZHx8Zm1wRXZlbnQ9PT11bmRlZmluZWQpe3JldHVybntpbnRlcmFjdGl2ZVRpbWU6dW5kZWZpbmVkLGZpcnN0Q3B1SWRsZVRpbWU6dW5kZWZpbmVkfTt9CmNvbnN0IGZpcnN0TWVhbmluZ2Z1bFBhaW50VGltZT1mbXBFdmVudC5zdGFydDtjb25zdCBtYWluVGhyZWFkVGFza3M9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5maW5kVG9wbGV2ZWxTY2hlZHVsZXJUYXNrcyhyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkKTtjb25zdCBsb25nVGFza3M9bWFpblRocmVhZFRhc2tzLmZpbHRlcih0YXNrPT50YXNrLmR1cmF0aW9uPj1MT05HX1RBU0tfVEhSRVNIT0xEX01TKTtjb25zdCBsb25nVGFza3NJbldpbmRvdz1sb25nVGFza3MuZmlsdGVyKHRhc2s9PnRhc2sucmFuZ2UuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLHNlYXJjaFdpbmRvd0VuZCkpO2NvbnN0IHJlc291cmNlTG9hZEV2ZW50cz10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzLmdldE5ldHdvcmtFdmVudHNJblJhbmdlKHJlbmRlcmVySGVscGVyLnByb2Nlc3MsdHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydC5zdGFydCxzZWFyY2hXaW5kb3dFbmQpKTtjb25zdCBmaXJzdENwdUlkbGVUaW1lPXRyLmUuY2hyb21lLmZpbmRGaXJzdENwdUlkbGVUaW1lKGZpcnN0TWVhbmluZ2Z1bFBhaW50VGltZSxzZWFyY2hXaW5kb3dFbmQsZG9tQ29udGVudExvYWRlZEVuZEV2ZW50LnN0YXJ0LGxvbmdUYXNrc0luV2luZG93KTtjb25zdCBpbnRlcmFjdGl2ZVRpbWU9cmVzb3VyY2VMb2FkRXZlbnRzLmxlbmd0aD4wP3RyLmUuY2hyb21lLmZpbmRJbnRlcmFjdGl2ZVRpbWUoZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLHNlYXJjaFdpbmRvd0VuZCxkb21Db250ZW50TG9hZGVkRW5kRXZlbnQuc3RhcnQsbG9uZ1Rhc2tzSW5XaW5kb3cscmVzb3VyY2VMb2FkRXZlbnRzKTp1bmRlZmluZWQ7cmV0dXJue2ludGVyYWN0aXZlVGltZSxmaXJzdENwdUlkbGVUaW1lfTt9CmZ1bmN0aW9uIGNvbnN0cnVjdExvYWRpbmdFeHBlY3RhdGlvbl8ocmVuZGVyZXJIZWxwZXIsZnJhbWVUb0RvbUNvbnRlbnRMb2FkZWRFbmRFdmVudHMsbmF2aWdhdGlvblN0YXJ0LGZtcEV2ZW50LHNlYXJjaFdpbmRvd0VuZCx1cmwsZnJhbWVJZCl7Y29uc3QgZGNsVGltZXNGb3JGcmFtZT1mcmFtZVRvRG9tQ29udGVudExvYWRlZEVuZEV2ZW50cy5nZXQoZnJhbWVJZCl8fFtdO2NvbnN0IGRjbFNlYXJjaFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShuYXZpZ2F0aW9uU3RhcnQuc3RhcnQsc2VhcmNoV2luZG93RW5kKTtjb25zdCBkY2xUaW1lc0luV2luZG93PWRjbFNlYXJjaFJhbmdlLmZpbHRlckFycmF5KGRjbFRpbWVzRm9yRnJhbWUsZXZlbnQ9PmV2ZW50LnN0YXJ0KTtsZXQgZG9tQ29udGVudExvYWRlZEVuZEV2ZW50PXVuZGVmaW5lZDtpZihkY2xUaW1lc0luV2luZG93Lmxlbmd0aCE9PTApe2RvbUNvbnRlbnRMb2FkZWRFbmRFdmVudD1kY2xUaW1lc0luV2luZG93W2RjbFRpbWVzSW5XaW5kb3cubGVuZ3RoLTFdO30KY29uc3R7aW50ZXJhY3RpdmVUaW1lLGZpcnN0Q3B1SWRsZVRpbWV9PWNvbXB1dGVJbnRlcmFjdGl2aXR5TWV0cmljU2FtcGxlXyhyZW5kZXJlckhlbHBlcixuYXZpZ2F0aW9uU3RhcnQsZm1wRXZlbnQsZG9tQ29udGVudExvYWRlZEVuZEV2ZW50LHNlYXJjaFdpbmRvd0VuZCk7Y29uc3QgZHVyYXRpb249KGludGVyYWN0aXZlVGltZT09PXVuZGVmaW5lZCk/c2VhcmNoV2luZG93RW5kLW5hdmlnYXRpb25TdGFydC5zdGFydDppbnRlcmFjdGl2ZVRpbWUtbmF2aWdhdGlvblN0YXJ0LnN0YXJ0O3JldHVybiBuZXcgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKHJlbmRlcmVySGVscGVyLm1vZGVsSGVscGVyLm1vZGVsLHRyLm1vZGVsLnVtLkxPQURfU1VCVFlQRV9OQU1FUy5TVUNDRVNTRlVMLG5hdmlnYXRpb25TdGFydC5zdGFydCxkdXJhdGlvbixyZW5kZXJlckhlbHBlci5wcm9jZXNzLG5hdmlnYXRpb25TdGFydCxmbXBFdmVudCxkb21Db250ZW50TG9hZGVkRW5kRXZlbnQsZmlyc3RDcHVJZGxlVGltZSxpbnRlcmFjdGl2ZVRpbWUsdXJsLGZyYW1lSWQpO30KZnVuY3Rpb24gY29sbGVjdExvYWRFeHBlY3RhdGlvbnNGb3JSZW5kZXJlcihyZW5kZXJlckhlbHBlcil7Y29uc3Qgc2FtcGxlcz1bXTtjb25zdCBmcmFtZVRvTmF2U3RhcnRFdmVudHM9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5nZXRTb3J0ZWRNYWluVGhyZWFkRXZlbnRzQnlGcmFtZShyZW5kZXJlckhlbHBlciwnbmF2aWdhdGlvblN0YXJ0JywnYmxpbmsudXNlcl90aW1pbmcnKTtjb25zdCBmcmFtZVRvRG9tQ29udGVudExvYWRlZEVuZEV2ZW50cz10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzLmdldFNvcnRlZE1haW5UaHJlYWRFdmVudHNCeUZyYW1lKHJlbmRlcmVySGVscGVyLCdkb21Db250ZW50TG9hZGVkRXZlbnRFbmQnLCdibGluay51c2VyX3RpbWluZycpO2Z1bmN0aW9uIGFkZFNhbXBsZXMoZnJhbWVJZFJlZixuYXZpZ2F0aW9uU3RhcnQsZm1wQ2FuZGlkYXRlRXZlbnRzLHNlYXJjaFdpbmRvd0VuZCx1cmwpe2xldCBmbXBNYXJrZXJFdmVudD10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzLmZpbmRMYXN0RXZlbnRTdGFydGluZ09uT3JCZWZvcmVUaW1lc3RhbXAoZm1wQ2FuZGlkYXRlRXZlbnRzLHNlYXJjaFdpbmRvd0VuZCk7aWYoZm1wTWFya2VyRXZlbnQhPT11bmRlZmluZWQmJm5hdmlnYXRpb25TdGFydC5zdGFydD5mbXBNYXJrZXJFdmVudC5zdGFydCl7Zm1wTWFya2VyRXZlbnQ9dW5kZWZpbmVkO30Kc2FtcGxlcy5wdXNoKGNvbnN0cnVjdExvYWRpbmdFeHBlY3RhdGlvbl8ocmVuZGVyZXJIZWxwZXIsZnJhbWVUb0RvbUNvbnRlbnRMb2FkZWRFbmRFdmVudHMsbmF2aWdhdGlvblN0YXJ0LGZtcE1hcmtlckV2ZW50LHNlYXJjaFdpbmRvd0VuZCx1cmwsZnJhbWVJZFJlZikpO30KY29uc3QgY2FuZGlkYXRlc0ZvckZyYW1lSWQ9ZmluZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q2FuZGlkYXRlcyhyZW5kZXJlckhlbHBlcik7Zm9yKGNvbnN0W2ZyYW1lSWRSZWYsbmF2U3RhcnRFdmVudHNdb2YgZnJhbWVUb05hdlN0YXJ0RXZlbnRzKXtjb25zdCBmbXBDYW5kaWRhdGVFdmVudHM9Y2FuZGlkYXRlc0ZvckZyYW1lSWRbZnJhbWVJZFJlZl18fFtdO2xldCBwcmV2TmF2aWdhdGlvbj17bmF2aWdhdGlvbkV2ZW50OnVuZGVmaW5lZCx1cmw6dW5kZWZpbmVkfTtmb3IobGV0IGluZGV4PTA7aW5kZXg8bmF2U3RhcnRFdmVudHMubGVuZ3RoO2luZGV4Kyspe2NvbnN0IGN1cnJOYXZpZ2F0aW9uPW5hdlN0YXJ0RXZlbnRzW2luZGV4XTtsZXQgdXJsO2xldCBpc0xvYWRpbmdNYWluRnJhbWU9ZmFsc2U7aWYoY3Vyck5hdmlnYXRpb24uYXJncy5kYXRhKXt1cmw9Y3Vyck5hdmlnYXRpb24uYXJncy5kYXRhLmRvY3VtZW50TG9hZGVyVVJMO2lzTG9hZGluZ01haW5GcmFtZT1jdXJyTmF2aWdhdGlvbi5hcmdzLmRhdGEuaXNMb2FkaW5nTWFpbkZyYW1lO31lbHNle2NvbnN0IHNuYXBzaG90PWZpbmRGcmFtZUxvYWRlclNuYXBzaG90QXQocmVuZGVyZXJIZWxwZXIsZnJhbWVJZFJlZixjdXJyTmF2aWdhdGlvbi5zdGFydCk7aWYoc25hcHNob3Qpe3VybD1zbmFwc2hvdC5hcmdzLmRvY3VtZW50TG9hZGVyVVJMO2lzTG9hZGluZ01haW5GcmFtZT1zbmFwc2hvdC5hcmdzLmlzTG9hZGluZ01haW5GcmFtZTt9fQppZighaXNMb2FkaW5nTWFpbkZyYW1lKWNvbnRpbnVlO2lmKHVybD09PXVuZGVmaW5lZHx8SUdOT1JFX1VSTFMuaW5jbHVkZXModXJsKSljb250aW51ZTtpZihwcmV2TmF2aWdhdGlvbi5uYXZpZ2F0aW9uRXZlbnQhPT11bmRlZmluZWQpe2FkZFNhbXBsZXMoZnJhbWVJZFJlZixwcmV2TmF2aWdhdGlvbi5uYXZpZ2F0aW9uRXZlbnQsZm1wQ2FuZGlkYXRlRXZlbnRzLGN1cnJOYXZpZ2F0aW9uLnN0YXJ0LHByZXZOYXZpZ2F0aW9uLnVybCk7fQpwcmV2TmF2aWdhdGlvbj17bmF2aWdhdGlvbkV2ZW50OmN1cnJOYXZpZ2F0aW9uLHVybH07fQppZihwcmV2TmF2aWdhdGlvbi5uYXZpZ2F0aW9uRXZlbnQhPT11bmRlZmluZWQpe2FkZFNhbXBsZXMoZnJhbWVJZFJlZixwcmV2TmF2aWdhdGlvbi5uYXZpZ2F0aW9uRXZlbnQsZm1wQ2FuZGlkYXRlRXZlbnRzLHJlbmRlcmVySGVscGVyLm1vZGVsSGVscGVyLmNocm9tZUJvdW5kcy5tYXgscHJldk5hdmlnYXRpb24udXJsKTt9fQpyZXR1cm4gc2FtcGxlczt9CmZ1bmN0aW9uIGZpbmRMb2FkRXhwZWN0YXRpb25zKG1vZGVsSGVscGVyKXtjb25zdCBsb2Fkcz1bXTtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWxIZWxwZXIubW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Zm9yKGNvbnN0IHBpZCBpbiBjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzKXtjb25zdCByZW5kZXJlckhlbHBlcj1jaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF07aWYocmVuZGVyZXJIZWxwZXIuaXNDaHJvbWVUcmFjaW5nVUkpY29udGludWU7bG9hZHMucHVzaC5hcHBseShsb2Fkcyxjb2xsZWN0TG9hZEV4cGVjdGF0aW9uc0ZvclJlbmRlcmVyKHJlbmRlcmVySGVscGVyKSk7fQpyZXR1cm4gbG9hZHM7fQpyZXR1cm57ZmluZExvYWRFeHBlY3RhdGlvbnMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsLnVtJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFN0YXJ0dXBFeHBlY3RhdGlvbihwYXJlbnRNb2RlbCxzdGFydCxkdXJhdGlvbil7dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLmNhbGwodGhpcyxwYXJlbnRNb2RlbCwnJyxzdGFydCxkdXJhdGlvbik7fQpTdGFydHVwRXhwZWN0YXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnByb3RvdHlwZSxjb25zdHJ1Y3RvcjpTdGFydHVwRXhwZWN0YXRpb259O3RyLm1vZGVsLnVtLlVzZXJFeHBlY3RhdGlvbi5zdWJUeXBlcy5yZWdpc3RlcihTdGFydHVwRXhwZWN0YXRpb24se3N0YWdlVGl0bGU6J1N0YXJ0dXAnLGNvbG9ySWQ6dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdzdGFydHVwJyl9KTtyZXR1cm57U3RhcnR1cEV4cGVjdGF0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5pbXBvcnRlcicsZnVuY3Rpb24oKXtmdW5jdGlvbiBnZXRBbGxGcmFtZUV2ZW50cyhtb2RlbEhlbHBlcil7Y29uc3QgZnJhbWVFdmVudHM9W107ZnJhbWVFdmVudHMucHVzaC5hcHBseShmcmFtZUV2ZW50cyxtb2RlbEhlbHBlci5icm93c2VySGVscGVyLmdldEZyYW1lRXZlbnRzSW5SYW5nZSh0ci5tb2RlbC5oZWxwZXJzLklNUExfRlJBTUVUSU1FX1RZUEUsbW9kZWxIZWxwZXIubW9kZWwuYm91bmRzKSk7Zm9yKGNvbnN0IHJlbmRlcmVyIG9mIE9iamVjdC52YWx1ZXMobW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7ZnJhbWVFdmVudHMucHVzaC5hcHBseShmcmFtZUV2ZW50cyxyZW5kZXJlci5nZXRGcmFtZUV2ZW50c0luUmFuZ2UodHIubW9kZWwuaGVscGVycy5JTVBMX0ZSQU1FVElNRV9UWVBFLG1vZGVsSGVscGVyLm1vZGVsLmJvdW5kcykpO30KcmV0dXJuIGZyYW1lRXZlbnRzLnNvcnQodHIuaW1wb3J0ZXIuY29tcGFyZUV2ZW50cyk7fQpmdW5jdGlvbiBnZXRTdGFydHVwRXZlbnRzKG1vZGVsSGVscGVyKXtmdW5jdGlvbiBpc1N0YXJ0dXBTbGljZShzbGljZSl7cmV0dXJuIHNsaWNlLnRpdGxlPT09J0Jyb3dzZXJNYWluTG9vcDo6Q3JlYXRlVGhyZWFkcyc7fQpjb25zdCBldmVudHM9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlci5nZXRBbGxBc3luY1NsaWNlc01hdGNoaW5nKGlzU3RhcnR1cFNsaWNlKTtjb25zdCBkZWR1cGVyPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjb25zdCBzbGljZUdyb3VwPWV2ZW50LnBhcmVudENvbnRhaW5lci5zbGljZUdyb3VwO2NvbnN0IHNsaWNlPXNsaWNlR3JvdXAmJnNsaWNlR3JvdXAuZmluZEZpcnN0U2xpY2UoKTtpZihzbGljZSl7ZGVkdXBlci5wdXNoKHNsaWNlKTt9fSk7cmV0dXJuIGRlZHVwZXIudG9BcnJheSgpO30KZnVuY3Rpb24gZmluZFN0YXJ0dXBFeHBlY3RhdGlvbnMobW9kZWxIZWxwZXIpe2NvbnN0IG9wZW5pbmdFdmVudHM9Z2V0U3RhcnR1cEV2ZW50cyhtb2RlbEhlbHBlcik7Y29uc3QgY2xvc2luZ0V2ZW50cz1nZXRBbGxGcmFtZUV2ZW50cyhtb2RlbEhlbHBlcik7Y29uc3Qgc3RhcnR1cHM9W107b3BlbmluZ0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKG9wZW5pbmdFdmVudCl7Y2xvc2luZ0V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGNsb3NpbmdFdmVudCl7aWYob3BlbmluZ0V2ZW50LmNsb3NpbmdFdmVudClyZXR1cm47aWYoY2xvc2luZ0V2ZW50Lm9wZW5pbmdFdmVudClyZXR1cm47aWYoY2xvc2luZ0V2ZW50LnN0YXJ0PD1vcGVuaW5nRXZlbnQuc3RhcnQpcmV0dXJuO2lmKG9wZW5pbmdFdmVudC5wYXJlbnRDb250YWluZXIucGFyZW50LnBpZCE9PWNsb3NpbmdFdmVudC5wYXJlbnRDb250YWluZXIucGFyZW50LnBpZCl7cmV0dXJuO30Kb3BlbmluZ0V2ZW50LmNsb3NpbmdFdmVudD1jbG9zaW5nRXZlbnQ7Y2xvc2luZ0V2ZW50Lm9wZW5pbmdFdmVudD1vcGVuaW5nRXZlbnQ7Y29uc3Qgc2U9bmV3IHRyLm1vZGVsLnVtLlN0YXJ0dXBFeHBlY3RhdGlvbihtb2RlbEhlbHBlci5tb2RlbCxvcGVuaW5nRXZlbnQuc3RhcnQsY2xvc2luZ0V2ZW50LmVuZC1vcGVuaW5nRXZlbnQuc3RhcnQpO3NlLmFzc29jaWF0ZWRFdmVudHMucHVzaChvcGVuaW5nRXZlbnQpO3NlLmFzc29jaWF0ZWRFdmVudHMucHVzaChjbG9zaW5nRXZlbnQpO3N0YXJ0dXBzLnB1c2goc2UpO30pO30pO3JldHVybiBzdGFydHVwczt9CnJldHVybntmaW5kU3RhcnR1cEV4cGVjdGF0aW9ucyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZ2V0QXNzb2NpYXRlZEV2ZW50cyhpcnMpe2NvbnN0IGFsbEFzc29jaWF0ZWRFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7aXJzLmZvckVhY2goZnVuY3Rpb24oaXIpe2lyLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5GbG93RXZlbnQpcmV0dXJuO2FsbEFzc29jaWF0ZWRFdmVudHMucHVzaChldmVudCk7fSk7fSk7cmV0dXJuIGFsbEFzc29jaWF0ZWRFdmVudHM7fQpmdW5jdGlvbiBnZXRVbmFzc29jaWF0ZWRFdmVudHMobW9kZWwsYXNzb2NpYXRlZEV2ZW50cyl7Y29uc3QgdW5hc3NvY2lhdGVkRXZlbnRzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBwcm9jIG9mIG1vZGVsLmdldEFsbFByb2Nlc3NlcygpKXtmb3IoY29uc3QgdGhyZWFkIG9mIE9iamVjdC52YWx1ZXMocHJvYy50aHJlYWRzKSl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIWFzc29jaWF0ZWRFdmVudHMuY29udGFpbnMoZXZlbnQpKXt1bmFzc29jaWF0ZWRFdmVudHMucHVzaChldmVudCk7fX19fQpyZXR1cm4gdW5hc3NvY2lhdGVkRXZlbnRzO30KZnVuY3Rpb24gZ2V0VG90YWxDcHVEdXJhdGlvbihldmVudHMpe2xldCBjcHVNcz0wO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5jcHVTZWxmVGltZSl7Y3B1TXMrPWV2ZW50LmNwdVNlbGZUaW1lO319KTtyZXR1cm4gY3B1TXM7fQpmdW5jdGlvbiBnZXRJUkNvdmVyYWdlRnJvbU1vZGVsKG1vZGVsKXtjb25zdCBhc3NvY2lhdGVkRXZlbnRzPWdldEFzc29jaWF0ZWRFdmVudHMobW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyk7aWYoIWFzc29jaWF0ZWRFdmVudHMubGVuZ3RoKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgdW5hc3NvY2lhdGVkRXZlbnRzPWdldFVuYXNzb2NpYXRlZEV2ZW50cyhtb2RlbCxhc3NvY2lhdGVkRXZlbnRzKTtjb25zdCBhc3NvY2lhdGVkQ3B1TXM9Z2V0VG90YWxDcHVEdXJhdGlvbihhc3NvY2lhdGVkRXZlbnRzKTtjb25zdCB1bmFzc29jaWF0ZWRDcHVNcz1nZXRUb3RhbENwdUR1cmF0aW9uKHVuYXNzb2NpYXRlZEV2ZW50cyk7Y29uc3QgdG90YWxFdmVudENvdW50PWFzc29jaWF0ZWRFdmVudHMubGVuZ3RoK3VuYXNzb2NpYXRlZEV2ZW50cy5sZW5ndGg7Y29uc3QgdG90YWxDcHVNcz1hc3NvY2lhdGVkQ3B1TXMrdW5hc3NvY2lhdGVkQ3B1TXM7bGV0IGNvdmVyZWRFdmVudHNDcHVUaW1lUmF0aW89dW5kZWZpbmVkO2lmKHRvdGFsQ3B1TXMhPT0wKXtjb3ZlcmVkRXZlbnRzQ3B1VGltZVJhdGlvPWFzc29jaWF0ZWRDcHVNcy90b3RhbENwdU1zO30KcmV0dXJue2Fzc29jaWF0ZWRFdmVudHNDb3VudDphc3NvY2lhdGVkRXZlbnRzLmxlbmd0aCx1bmFzc29jaWF0ZWRFdmVudHNDb3VudDp1bmFzc29jaWF0ZWRFdmVudHMubGVuZ3RoLGFzc29jaWF0ZWRFdmVudHNDcHVUaW1lTXM6YXNzb2NpYXRlZENwdU1zLHVuYXNzb2NpYXRlZEV2ZW50c0NwdVRpbWVNczp1bmFzc29jaWF0ZWRDcHVNcyxjb3ZlcmVkRXZlbnRzQ291bnRSYXRpbzphc3NvY2lhdGVkRXZlbnRzLmxlbmd0aC90b3RhbEV2ZW50Q291bnQsY292ZXJlZEV2ZW50c0NwdVRpbWVSYXRpb307fQpyZXR1cm57Z2V0SVJDb3ZlcmFnZUZyb21Nb2RlbCxnZXRBc3NvY2lhdGVkRXZlbnRzLGdldFVuYXNzb2NpYXRlZEV2ZW50cyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwudW0nLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gSWRsZUV4cGVjdGF0aW9uKHBhcmVudE1vZGVsLHN0YXJ0LGR1cmF0aW9uKXtjb25zdCBpbml0aWF0b3JUaXRsZT0nJzt0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24uY2FsbCh0aGlzLHBhcmVudE1vZGVsLGluaXRpYXRvclRpdGxlLHN0YXJ0LGR1cmF0aW9uKTt9CklkbGVFeHBlY3RhdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24ucHJvdG90eXBlLGNvbnN0cnVjdG9yOklkbGVFeHBlY3RhdGlvbn07dHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLnN1YlR5cGVzLnJlZ2lzdGVyKElkbGVFeHBlY3RhdGlvbix7c3RhZ2VUaXRsZTonSWRsZScsY29sb3JJZDp0ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ3JhaWxfaWRsZScpfSk7cmV0dXJue0lkbGVFeHBlY3RhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuaW1wb3J0ZXInLGZ1bmN0aW9uKCl7Y29uc3QgSU5TSUdOSUZJQ0FOVF9NUz0xO2NsYXNzIFVzZXJNb2RlbEJ1aWxkZXJ7Y29uc3RydWN0b3IobW9kZWwpe3RoaXMubW9kZWw9bW9kZWw7dGhpcy5tb2RlbEhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTt9CnN0YXRpYyBzdXBwb3J0c01vZGVsSGVscGVyKG1vZGVsSGVscGVyKXtyZXR1cm4gbW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlciE9PXVuZGVmaW5lZDt9CmJ1aWxkVXNlck1vZGVsKCl7aWYoIXRoaXMubW9kZWxIZWxwZXJ8fCF0aGlzLm1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIpcmV0dXJuO3RyeXtmb3IoY29uc3QgdWUgb2YgdGhpcy5maW5kVXNlckV4cGVjdGF0aW9ucygpKXt0aGlzLm1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMucHVzaCh1ZSk7fQp0aGlzLm1vZGVsLnVzZXJNb2RlbC5zZWdtZW50cy5wdXNoKC4uLnRoaXMuZmluZFNlZ21lbnRzKCkpO31jYXRjaChlcnJvcil7dGhpcy5tb2RlbC5pbXBvcnRXYXJuaW5nKHt0eXBlOidVc2VyTW9kZWxCdWlsZGVyJyxtZXNzYWdlOmVycm9yLHNob3dUb1VzZXI6dHJ1ZX0pO319CmZpbmRTZWdtZW50cygpe2xldCB0aW1lc3RhbXBzPW5ldyBTZXQoKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXt0aW1lc3RhbXBzLmFkZChleHBlY3RhdGlvbi5zdGFydCk7dGltZXN0YW1wcy5hZGQoZXhwZWN0YXRpb24uZW5kKTt9CnRpbWVzdGFtcHM9Wy4uLnRpbWVzdGFtcHNdO3RpbWVzdGFtcHMuc29ydCgoeCx5KT0+eC15KTtjb25zdCBzZWdtZW50cz1bXTtmb3IobGV0IGk9MDtpPHRpbWVzdGFtcHMubGVuZ3RoLTE7KytpKXtjb25zdCBzZWdtZW50PW5ldyB0ci5tb2RlbC51bS5TZWdtZW50KHRpbWVzdGFtcHNbaV0sdGltZXN0YW1wc1tpKzFdLXRpbWVzdGFtcHNbaV0pO3NlZ21lbnRzLnB1c2goc2VnbWVudCk7Y29uc3Qgc2VnbWVudFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzZWdtZW50LnN0YXJ0LHNlZ21lbnQuZW5kKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgdGhpcy5tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtjb25zdCBleHBlY3RhdGlvblJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShleHBlY3RhdGlvbi5zdGFydCxleHBlY3RhdGlvbi5lbmQpO2lmKHNlZ21lbnRSYW5nZS5pbnRlcnNlY3RzUmFuZ2VFeGNsdXNpdmUoZXhwZWN0YXRpb25SYW5nZSkpe3NlZ21lbnQuZXhwZWN0YXRpb25zLnB1c2goZXhwZWN0YXRpb24pO319fQpyZXR1cm4gc2VnbWVudHM7fQpmaW5kVXNlckV4cGVjdGF0aW9ucygpe2NvbnN0IGV4cGVjdGF0aW9ucz1bXTtleHBlY3RhdGlvbnMucHVzaC5hcHBseShleHBlY3RhdGlvbnMsdHIuaW1wb3J0ZXIuZmluZFN0YXJ0dXBFeHBlY3RhdGlvbnModGhpcy5tb2RlbEhlbHBlcikpO2V4cGVjdGF0aW9ucy5wdXNoLmFwcGx5KGV4cGVjdGF0aW9ucyx0ci5pbXBvcnRlci5maW5kTG9hZEV4cGVjdGF0aW9ucyh0aGlzLm1vZGVsSGVscGVyKSk7ZXhwZWN0YXRpb25zLnB1c2guYXBwbHkoZXhwZWN0YXRpb25zLHRyLmltcG9ydGVyLmZpbmRJbnB1dEV4cGVjdGF0aW9ucyh0aGlzLm1vZGVsSGVscGVyKSk7ZXhwZWN0YXRpb25zLnB1c2guYXBwbHkoZXhwZWN0YXRpb25zLHRoaXMuZmluZElkbGVFeHBlY3RhdGlvbnMoZXhwZWN0YXRpb25zKSk7dGhpcy5jb2xsZWN0VW5hc3NvY2lhdGVkRXZlbnRzXyhleHBlY3RhdGlvbnMpO3JldHVybiBleHBlY3RhdGlvbnM7fQpjb2xsZWN0VW5hc3NvY2lhdGVkRXZlbnRzXyhleHBlY3RhdGlvbnMpe2NvbnN0IHZhY3V1bVVFcz1bXTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgZXhwZWN0YXRpb25zKXtpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLklkbGVFeHBlY3RhdGlvbnx8ZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5Mb2FkRXhwZWN0YXRpb258fGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uU3RhcnR1cEV4cGVjdGF0aW9uKXt2YWN1dW1VRXMucHVzaChleHBlY3RhdGlvbik7fX0KaWYodmFjdXVtVUVzLmxlbmd0aD09PTApcmV0dXJuO2NvbnN0IGFsbEFzc29jaWF0ZWRFdmVudHM9dHIubW9kZWwuZ2V0QXNzb2NpYXRlZEV2ZW50cyhleHBlY3RhdGlvbnMpO2NvbnN0IHVuYXNzb2NpYXRlZEV2ZW50cz10ci5tb2RlbC5nZXRVbmFzc29jaWF0ZWRFdmVudHModGhpcy5tb2RlbCxhbGxBc3NvY2lhdGVkRXZlbnRzKTtmb3IoY29uc3QgZXZlbnQgb2YgdW5hc3NvY2lhdGVkRXZlbnRzKXtpZighKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuVGhyZWFkU2xpY2UpKWNvbnRpbnVlO2lmKCFldmVudC5pc1RvcExldmVsKWNvbnRpbnVlO2ZvcihsZXQgaW5kZXg9MDtpbmRleDx2YWN1dW1VRXMubGVuZ3RoOysraW5kZXgpe2NvbnN0IGV4cGVjdGF0aW9uPXZhY3V1bVVFc1tpbmRleF07aWYoKGV2ZW50LnN0YXJ0Pj1leHBlY3RhdGlvbi5zdGFydCkmJihldmVudC5zdGFydDxleHBlY3RhdGlvbi5lbmQpKXtleHBlY3RhdGlvbi5hc3NvY2lhdGVkRXZlbnRzLmFkZEV2ZW50U2V0KGV2ZW50LmVudGlyZUhpZXJhcmNoeSk7YnJlYWs7fX19fQpmaW5kSWRsZUV4cGVjdGF0aW9ucyhvdGhlclVFcyl7aWYodGhpcy5tb2RlbC5ib3VuZHMuaXNFbXB0eSlyZXR1cm47Y29uc3QgZW1wdHlSYW5nZXM9dHIuYi5tYXRoLmZpbmRFbXB0eVJhbmdlc0JldHdlZW5SYW5nZXModHIuYi5tYXRoLmNvbnZlcnRFdmVudHNUb1JhbmdlcyhvdGhlclVFcyksdGhpcy5tb2RlbC5ib3VuZHMpO2NvbnN0IGV4cGVjdGF0aW9ucz1bXTtjb25zdCBtb2RlbD10aGlzLm1vZGVsO2Zvcihjb25zdCByYW5nZSBvZiBlbXB0eVJhbmdlcyl7aWYocmFuZ2UubWF4PChyYW5nZS5taW4rSU5TSUdOSUZJQ0FOVF9NUykpY29udGludWU7ZXhwZWN0YXRpb25zLnB1c2gobmV3IHRyLm1vZGVsLnVtLklkbGVFeHBlY3RhdGlvbihtb2RlbCxyYW5nZS5taW4scmFuZ2UubWF4LXJhbmdlLm1pbikpO30KcmV0dXJuIGV4cGVjdGF0aW9uczt9fQpmdW5jdGlvbiBjcmVhdGVDdXN0b21pemVNb2RlbExpbmVzRnJvbU1vZGVsKG1vZGVsKXtjb25zdCBtb2RlbExpbmVzPVtdO21vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZEV2ZW50KG1vZGVsLmJyb3dzZXJNYWluLCcpO21vZGVsTGluZXMucHVzaCgnICAgICAgICAgIHt0aXRsZTogXCdtb2RlbCBzdGFydFwnLCBzdGFydDogMCwgZW5kOiAxfSk7Jyk7Y29uc3QgdHlwZU5hbWVzPXt9O2Zvcihjb25zdCB0eXBlTmFtZSBpbiB0ci5lLmNjLklOUFVUX0VWRU5UX1RZUEVfTkFNRVMpe3R5cGVOYW1lc1t0ci5lLmNjLklOUFVUX0VWRU5UX1RZUEVfTkFNRVNbdHlwZU5hbWVdXT10eXBlTmFtZTt9CmxldCBtb2RlbEV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3QgdWUgb2YgbW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7bW9kZWxFdmVudHMuYWRkRXZlbnRTZXQodWUuc291cmNlRXZlbnRzKTt9Cm1vZGVsRXZlbnRzPW1vZGVsRXZlbnRzLnRvQXJyYXkoKTttb2RlbEV2ZW50cy5zb3J0KHRyLmltcG9ydGVyLmNvbXBhcmVFdmVudHMpO2Zvcihjb25zdCBldmVudCBvZiBtb2RlbEV2ZW50cyl7Y29uc3Qgc3RhcnRBbmRFbmQ9J3N0YXJ0OiAnK3BhcnNlSW50KGV2ZW50LnN0YXJ0KSsnLCAnKydlbmQ6ICcrcGFyc2VJbnQoZXZlbnQuZW5kKSsnfSk7JztpZihldmVudCBpbnN0YW5jZW9mIHRyLmUuY2MuSW5wdXRMYXRlbmN5QXN5bmNTbGljZSl7bW9kZWxMaW5lcy5wdXNoKCcgICAgICBhdWRpdHMuYWRkSW5wdXRFdmVudChtb2RlbCwgSU5QVVRfVFlQRS4nKwp0eXBlTmFtZXNbZXZlbnQudHlwZU5hbWVdKycsJyk7fWVsc2UgaWYoZXZlbnQudGl0bGU9PT0nUmVuZGVyRnJhbWVJbXBsOjpkaWRDb21taXRQcm92aXNpb25hbExvYWQnKXttb2RlbExpbmVzLnB1c2goJyAgICAgIGF1ZGl0cy5hZGRDb21taXRMb2FkRXZlbnQobW9kZWwsJyk7fWVsc2UgaWYoZXZlbnQudGl0bGU9PT0nSW5wdXRIYW5kbGVyUHJveHk6OkhhbmRsZUdlc3R1cmVGbGluZzo6c3RhcnRlZCcpe21vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZEZsaW5nQW5pbWF0aW9uRXZlbnQobW9kZWwsJyk7fWVsc2UgaWYoZXZlbnQudGl0bGU9PT10ci5tb2RlbC5oZWxwZXJzLklNUExfUkVOREVSSU5HX1NUQVRTKXttb2RlbExpbmVzLnB1c2goJyAgICAgIGF1ZGl0cy5hZGRGcmFtZUV2ZW50KG1vZGVsLCcpO31lbHNlIGlmKGV2ZW50LnRpdGxlPT09dHIuaW1wb3J0ZXIuQ1NTX0FOSU1BVElPTl9USVRMRSl7bW9kZWxMaW5lcy5wdXNoKCcgICAgICBhdWRpdHMuYWRkRXZlbnQobW9kZWwucmVuZGVyZXJNYWluLCB7Jyk7bW9kZWxMaW5lcy5wdXNoKCcgICAgICAgIHRpdGxlOiBcJ0FuaW1hdGlvblwnLCAnK3N0YXJ0QW5kRW5kKTtyZXR1cm47fWVsc2V7dGhyb3cgbmV3IEVycm9yKCdZb3UgbXVzdCBleHRlbmQgY3JlYXRlQ3VzdG9taXplTW9kZWxMaW5lc0Zyb21Nb2RlbCgpJysndG8gc3VwcG9ydCB0aGlzIGV2ZW50OlxuJytldmVudC50aXRsZSsnXG4nKTt9Cm1vZGVsTGluZXMucHVzaCgnICAgICAgICAgIHsnK3N0YXJ0QW5kRW5kKTt9Cm1vZGVsTGluZXMucHVzaCgnICAgICAgYXVkaXRzLmFkZEV2ZW50KG1vZGVsLmJyb3dzZXJNYWluLCcpO21vZGVsTGluZXMucHVzaCgnICAgICAgICAgIHsnKyd0aXRsZTogXCdtb2RlbCBlbmRcJywgJysnc3RhcnQ6ICcrKHBhcnNlSW50KG1vZGVsLmJvdW5kcy5tYXgpLTEpKycsICcrJ2VuZDogJytwYXJzZUludChtb2RlbC5ib3VuZHMubWF4KSsnfSk7Jyk7cmV0dXJuIG1vZGVsTGluZXM7fQpmdW5jdGlvbiBjcmVhdGVFeHBlY3RlZFVFTGluZXNGcm9tTW9kZWwobW9kZWwpe2NvbnN0IGV4cGVjdGVkTGluZXM9W107Y29uc3QgdWVDb3VudD1tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zLmxlbmd0aDtmb3IobGV0IGluZGV4PTA7aW5kZXg8dWVDb3VudDsrK2luZGV4KXtjb25zdCBleHBlY3RhdGlvbj1tb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zW2luZGV4XTtsZXQgdWVTdHJpbmc9JyAgICAgIHsnO3VlU3RyaW5nKz0ndGl0bGU6IFwnJytleHBlY3RhdGlvbi50aXRsZSsnXCcsICc7dWVTdHJpbmcrPSdzdGFydDogJytwYXJzZUludChleHBlY3RhdGlvbi5zdGFydCkrJywgJzt1ZVN0cmluZys9J2VuZDogJytwYXJzZUludChleHBlY3RhdGlvbi5lbmQpKycsICc7dWVTdHJpbmcrPSdldmVudENvdW50OiAnK2V4cGVjdGF0aW9uLnNvdXJjZUV2ZW50cy5sZW5ndGg7dWVTdHJpbmcrPSd9JztpZihpbmRleDwodWVDb3VudC0xKSl1ZVN0cmluZys9JywnO2V4cGVjdGVkTGluZXMucHVzaCh1ZVN0cmluZyk7fQpyZXR1cm4gZXhwZWN0ZWRMaW5lczt9CmZ1bmN0aW9uIGNyZWF0ZVVFRmluZGVyVGVzdENhc2VTdHJpbmdGcm9tTW9kZWwobW9kZWwpe2NvbnN0IGZpbGVuYW1lPXdpbmRvdy5sb2NhdGlvbi5oYXNoLnN1YnN0cigxKTtsZXQgdGVzdE5hbWU9ZmlsZW5hbWUuc3Vic3RyKGZpbGVuYW1lLmxhc3RJbmRleE9mKCcvJykrMSk7dGVzdE5hbWU9dGVzdE5hbWUuc3Vic3RyKDAsdGVzdE5hbWUuaW5kZXhPZignLicpKTt0cnl7Y29uc3QgdGVzdExpbmVzPVtdO3Rlc3RMaW5lcy5wdXNoKCcgIC8qJyk7dGVzdExpbmVzLnB1c2goJyAgICBUaGlzIHRlc3Qgd2FzIGdlbmVyYXRlZCBmcm9tJyk7dGVzdExpbmVzLnB1c2goJyAgICAnK2ZpbGVuYW1lKycnKTt0ZXN0TGluZXMucHVzaCgnICAgKi8nKTt0ZXN0TGluZXMucHVzaCgnICB0ZXN0KFwnJyt0ZXN0TmFtZSsnXCcsIGZ1bmN0aW9uKCkgeycpO3Rlc3RMaW5lcy5wdXNoKCcgICAgY29uc3QgdmVyaWZpZXIgPSBuZXcgVXNlckV4cGVjdGF0aW9uVmVyaWZpZXIoKTsnKTt0ZXN0TGluZXMucHVzaCgnICAgIHZlcmlmaWVyLmN1c3RvbWl6ZU1vZGVsQ2FsbGJhY2sgPSBmdW5jdGlvbihtb2RlbCkgeycpO3Rlc3RMaW5lcy5wdXNoLmFwcGx5KHRlc3RMaW5lcyxjcmVhdGVDdXN0b21pemVNb2RlbExpbmVzRnJvbU1vZGVsKG1vZGVsKSk7dGVzdExpbmVzLnB1c2goJyAgICB9OycpO3Rlc3RMaW5lcy5wdXNoKCcgICAgdmVyaWZpZXIuZXhwZWN0ZWRVRXMgPSBbJyk7dGVzdExpbmVzLnB1c2guYXBwbHkodGVzdExpbmVzLGNyZWF0ZUV4cGVjdGVkVUVMaW5lc0Zyb21Nb2RlbChtb2RlbCkpO3Rlc3RMaW5lcy5wdXNoKCcgICAgXTsnKTt0ZXN0TGluZXMucHVzaCgnICAgIHZlcmlmaWVyLnZlcmlmeSgpOycpO3Rlc3RMaW5lcy5wdXNoKCcgIH0pOycpO3JldHVybiB0ZXN0TGluZXMuam9pbignXG4nKTt9Y2F0Y2goZXJyb3Ipe3JldHVybiBlcnJvcjt9fQpyZXR1cm57VXNlck1vZGVsQnVpbGRlcixjcmVhdGVVRUZpbmRlclRlc3RDYXNlU3RyaW5nRnJvbU1vZGVsLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGRlY29yYXRlKHNvdXJjZSxjb25zdHIpe2xldCBlbGVtZW50cztpZih0eXBlb2Ygc291cmNlPT09J3N0cmluZycpe2VsZW1lbnRzPVBvbHltZXIuZG9tKHRyLmRvYykucXVlcnlTZWxlY3RvckFsbChzb3VyY2UpO31lbHNle2VsZW1lbnRzPVtzb3VyY2VdO30KZm9yKGxldCBpPTAsZWw7ZWw9ZWxlbWVudHNbaV07aSsrKXtpZighKGVsIGluc3RhbmNlb2YgY29uc3RyKSl7Y29uc3RyLmRlY29yYXRlKGVsKTt9fX0KZnVuY3Rpb24gZGVmaW5lKGNsYXNzTmFtZSxvcHRfcGFyZW50Q29uc3RydWN0b3Isb3B0X3RhZ05TKXtpZih0eXBlb2YgY2xhc3NOYW1lPT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IEVycm9yKCdQYXNzaW5nIGZ1bmN0aW9ucyBhcyBjbGFzc05hbWUgaXMgZGVwcmVjYXRlZC4gUGxlYXNlICcrJ3VzZSAoY2xhc3NOYW1lLCBvcHRfcGFyZW50Q29uc3RydWN0b3IpIHRvIHN1YmNsYXNzJyk7fQpjbGFzc05hbWU9Y2xhc3NOYW1lLnRvTG93ZXJDYXNlKCk7aWYob3B0X3BhcmVudENvbnN0cnVjdG9yJiYhb3B0X3BhcmVudENvbnN0cnVjdG9yLnRhZ05hbWUpe3Rocm93IG5ldyBFcnJvcignb3B0X3BhcmVudENvbnN0cnVjdG9yIHdhcyBub3QgJysnY3JlYXRlZCBieSB0ci51aS5iLmRlZmluZScpO30KbGV0IHRhZ05hbWU9Y2xhc3NOYW1lO2xldCB0YWdOUz11bmRlZmluZWQ7aWYob3B0X3BhcmVudENvbnN0cnVjdG9yKXtpZihvcHRfdGFnTlMpe3Rocm93IG5ldyBFcnJvcignTXVzdCBub3Qgc3BlY2lmeSB0YWdOUyBpZiBwYXJlbnRDb25zdHJ1Y3RvciBpcyBnaXZlbicpO30KbGV0IHBhcmVudD1vcHRfcGFyZW50Q29uc3RydWN0b3I7d2hpbGUocGFyZW50JiZwYXJlbnQudGFnTmFtZSl7dGFnTmFtZT1wYXJlbnQudGFnTmFtZTt0YWdOUz1wYXJlbnQudGFnTlM7cGFyZW50PXBhcmVudC5wYXJlbnRDb25zdHJ1Y3Rvcjt9fWVsc2V7dGFnTlM9b3B0X3RhZ05TO30KZnVuY3Rpb24gZigpe2lmKG9wdF9wYXJlbnRDb25zdHJ1Y3RvciYmZi5wcm90b3R5cGUuX19wcm90b19fIT09b3B0X3BhcmVudENvbnN0cnVjdG9yLnByb3RvdHlwZSl7dGhyb3cgbmV3IEVycm9yKGNsYXNzTmFtZSsnIHByb3RvdHllXCdzIF9fcHJvdG9fXyBmaWVsZCBpcyBtZXNzZWQgdXAuICcrJ0l0IE1VU1QgYmUgdGhlIHByb3RvdHlwZSBvZiAnK29wdF9wYXJlbnRDb25zdHJ1Y3Rvci50YWdOYW1lKTt9CmxldCBlbDtpZih0YWdOUz09PXVuZGVmaW5lZCl7ZWw9dHIuZG9jLmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7fWVsc2V7ZWw9dHIuZG9jLmNyZWF0ZUVsZW1lbnROUyh0YWdOUyx0YWdOYW1lKTt9CmYuZGVjb3JhdGUuY2FsbCh0aGlzLGVsLGFyZ3VtZW50cyk7cmV0dXJuIGVsO30KZi5kZWNvcmF0ZT1mdW5jdGlvbihlbCl7ZWwuX19wcm90b19fPWYucHJvdG90eXBlO2VsLmRlY29yYXRlLmFwcGx5KGVsLGFyZ3VtZW50c1sxXSk7ZWwuY29uc3RydWN0b3I9Zjt9O2YuY2xhc3NOYW1lPWNsYXNzTmFtZTtmLnRhZ05hbWU9dGFnTmFtZTtmLnRhZ05TPXRhZ05TO2YucGFyZW50Q29uc3RydWN0b3I9KG9wdF9wYXJlbnRDb25zdHJ1Y3Rvcj9vcHRfcGFyZW50Q29uc3RydWN0b3I6dW5kZWZpbmVkKTtmLnRvU3RyaW5nPWZ1bmN0aW9uKCl7aWYoIWYucGFyZW50Q29uc3RydWN0b3Ipe3JldHVybiBmLnRhZ05hbWU7fQpyZXR1cm4gZi5wYXJlbnRDb25zdHJ1Y3Rvci50b1N0cmluZygpKyc6OicrZi5jbGFzc05hbWU7fTtyZXR1cm4gZjt9CmZ1bmN0aW9uIGVsZW1lbnRJc0NoaWxkT2YoZWwscG90ZW50aWFsUGFyZW50KXtpZihlbD09PXBvdGVudGlhbFBhcmVudClyZXR1cm4gZmFsc2U7bGV0IGN1cj1lbDt3aGlsZShQb2x5bWVyLmRvbShjdXIpLnBhcmVudE5vZGUpe2lmKGN1cj09PXBvdGVudGlhbFBhcmVudClyZXR1cm4gdHJ1ZTtjdXI9UG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlO30KcmV0dXJuIGZhbHNlO30KcmV0dXJue2RlY29yYXRlLGRlZmluZSxlbGVtZW50SXNDaGlsZE9mLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVjdCgpe3RoaXMueD0wO3RoaXMueT0wO3RoaXMud2lkdGg9MDt0aGlzLmhlaWdodD0wO30KUmVjdC5mcm9tWFlXSD1mdW5jdGlvbih4LHksdyxoKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7cmVjdC54PXg7cmVjdC55PXk7cmVjdC53aWR0aD13O3JlY3QuaGVpZ2h0PWg7cmV0dXJuIHJlY3Q7fTtSZWN0LmZyb21BcnJheT1mdW5jdGlvbihhcnkpe2lmKGFyeS5sZW5ndGghPT00KXt0aHJvdyBuZXcgRXJyb3IoJ2FyeS5sZW5ndGggbXVzdCBiZSA0Jyk7fQpjb25zdCByZWN0PW5ldyBSZWN0KCk7cmVjdC54PWFyeVswXTtyZWN0Lnk9YXJ5WzFdO3JlY3Qud2lkdGg9YXJ5WzJdO3JlY3QuaGVpZ2h0PWFyeVszXTtyZXR1cm4gcmVjdDt9O1JlY3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgbGVmdCgpe3JldHVybiB0aGlzLng7fSxnZXQgdG9wKCl7cmV0dXJuIHRoaXMueTt9LGdldCByaWdodCgpe3JldHVybiB0aGlzLngrdGhpcy53aWR0aDt9LGdldCBib3R0b20oKXtyZXR1cm4gdGhpcy55K3RoaXMuaGVpZ2h0O30sdG9TdHJpbmcoKXtyZXR1cm4nUmVjdCgnK3RoaXMueCsnLCAnK3RoaXMueSsnLCAnKwp0aGlzLndpZHRoKycsICcrdGhpcy5oZWlnaHQrJyknO30sdG9BcnJheSgpe3JldHVyblt0aGlzLngsdGhpcy55LHRoaXMud2lkdGgsdGhpcy5oZWlnaHRdO30sY2xvbmUoKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7cmVjdC54PXRoaXMueDtyZWN0Lnk9dGhpcy55O3JlY3Qud2lkdGg9dGhpcy53aWR0aDtyZWN0LmhlaWdodD10aGlzLmhlaWdodDtyZXR1cm4gcmVjdDt9LGVubGFyZ2UocGFkKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy5lbmxhcmdlRmFzdChyZWN0LHBhZCk7cmV0dXJuIHJlY3Q7fSxlbmxhcmdlRmFzdChvdXQscGFkKXtvdXQueD10aGlzLngtcGFkO291dC55PXRoaXMueS1wYWQ7b3V0LndpZHRoPXRoaXMud2lkdGgrMipwYWQ7b3V0LmhlaWdodD10aGlzLmhlaWdodCsyKnBhZDtyZXR1cm4gb3V0O30sc2l6ZSgpe3JldHVybnt3aWR0aDp0aGlzLndpZHRoLGhlaWdodDp0aGlzLmhlaWdodH07fSxzY2FsZShzKXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy5zY2FsZUZhc3QocmVjdCxzKTtyZXR1cm4gcmVjdDt9LHNjYWxlU2l6ZShzKXtyZXR1cm4gUmVjdC5mcm9tWFlXSCh0aGlzLngsdGhpcy55LHRoaXMud2lkdGgqcyx0aGlzLmhlaWdodCpzKTt9LHNjYWxlRmFzdChvdXQscyl7b3V0Lng9dGhpcy54KnM7b3V0Lnk9dGhpcy55KnM7b3V0LndpZHRoPXRoaXMud2lkdGgqcztvdXQuaGVpZ2h0PXRoaXMuaGVpZ2h0KnM7cmV0dXJuIG91dDt9LHRyYW5zbGF0ZSh2KXtjb25zdCByZWN0PW5ldyBSZWN0KCk7dGhpcy50cmFuc2xhdGVGYXN0KHJlY3Qsdik7cmV0dXJuIHJlY3Q7fSx0cmFuc2xhdGVGYXN0KG91dCx2KXtvdXQueD10aGlzLngrdlswXTtvdXQueT10aGlzLngrdlsxXTtvdXQud2lkdGg9dGhpcy53aWR0aDtvdXQuaGVpZ2h0PXRoaXMuaGVpZ2h0O3JldHVybiBvdXQ7fSxhc1VWUmVjdEluc2lkZShjb250YWluaW5nUmVjdCl7Y29uc3QgcmVjdD1uZXcgUmVjdCgpO3JlY3QueD0odGhpcy54LWNvbnRhaW5pbmdSZWN0LngpL2NvbnRhaW5pbmdSZWN0LndpZHRoO3JlY3QueT0odGhpcy55LWNvbnRhaW5pbmdSZWN0LnkpL2NvbnRhaW5pbmdSZWN0LmhlaWdodDtyZWN0LndpZHRoPXRoaXMud2lkdGgvY29udGFpbmluZ1JlY3Qud2lkdGg7cmVjdC5oZWlnaHQ9dGhpcy5oZWlnaHQvY29udGFpbmluZ1JlY3QuaGVpZ2h0O3JldHVybiByZWN0O30saW50ZXJzZWN0cyh0aGF0KXtsZXQgb2s9dHJ1ZTtvayY9dGhpcy54PHRoYXQucmlnaHQ7b2smPXRoaXMucmlnaHQ+dGhhdC54O29rJj10aGlzLnk8dGhhdC5ib3R0b207b2smPXRoaXMuYm90dG9tPnRoYXQueTtyZXR1cm4gb2s7fSxlcXVhbFRvKHJlY3Qpe3JldHVybiByZWN0JiYodGhpcy54PT09cmVjdC54KSYmKHRoaXMueT09PXJlY3QueSkmJih0aGlzLndpZHRoPT09cmVjdC53aWR0aCkmJih0aGlzLmhlaWdodD09PXJlY3QuaGVpZ2h0KTt9fTtyZXR1cm57UmVjdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBpbnN0YW50aWF0ZVRlbXBsYXRlKHNlbGVjdG9yLGRvYyl7ZG9jPWRvY3x8ZG9jdW1lbnQ7Y29uc3QgZWw9UG9seW1lci5kb20oZG9jKS5xdWVyeVNlbGVjdG9yKHNlbGVjdG9yKTtpZighZWwpe3Rocm93IG5ldyBFcnJvcignRWxlbWVudCBub3QgZm91bmQ6ICcrc2VsZWN0b3IpO30KcmV0dXJuIGRvYy5pbXBvcnROb2RlKGVsLmNvbnRlbnQsdHJ1ZSk7fQpmdW5jdGlvbiB3aW5kb3dSZWN0Rm9yRWxlbWVudChlbGVtZW50KXtjb25zdCBwb3NpdGlvbj1bZWxlbWVudC5vZmZzZXRMZWZ0LGVsZW1lbnQub2Zmc2V0VG9wXTtjb25zdCBzaXplPVtlbGVtZW50Lm9mZnNldFdpZHRoLGVsZW1lbnQub2Zmc2V0SGVpZ2h0XTtsZXQgbm9kZT1lbGVtZW50Lm9mZnNldFBhcmVudDt3aGlsZShub2RlKXtwb3NpdGlvblswXSs9bm9kZS5vZmZzZXRMZWZ0O3Bvc2l0aW9uWzFdKz1ub2RlLm9mZnNldFRvcDtub2RlPW5vZGUub2Zmc2V0UGFyZW50O30KcmV0dXJuIHRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHBvc2l0aW9uWzBdLHBvc2l0aW9uWzFdLHNpemVbMF0sc2l6ZVsxXSk7fQpmdW5jdGlvbiBzY3JvbGxJbnRvVmlld0lmTmVlZGVkKGVsKXtjb25zdCBwcj1lbC5wYXJlbnRFbGVtZW50LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGNyPWVsLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2lmKGNyLnRvcDxwci50b3Ape2VsLnNjcm9sbEludG9WaWV3KHRydWUpO31lbHNlIGlmKGNyLmJvdHRvbT5wci5ib3R0b20pe2VsLnNjcm9sbEludG9WaWV3KGZhbHNlKTt9fQpmdW5jdGlvbiBleHRyYWN0VXJsU3RyaW5nKHVybCl7bGV0IGV4dHJhY3RlZD11cmwucmVwbGFjZSgvdXJsXCgoLiopXCkvLCckMScpO2V4dHJhY3RlZD1leHRyYWN0ZWQucmVwbGFjZSgvXCIoLiopXCIvLCckMScpO3JldHVybiBleHRyYWN0ZWQ7fQpmdW5jdGlvbiB0b1RocmVlRGlnaXRMb2NhbGVTdHJpbmcodmFsdWUpe3JldHVybiB2YWx1ZS50b0xvY2FsZVN0cmluZyh1bmRlZmluZWQse21pbmltdW1GcmFjdGlvbkRpZ2l0czozLG1heGltdW1GcmFjdGlvbkRpZ2l0czozfSk7fQpmdW5jdGlvbiBpc1Vua25vd25FbGVtZW50TmFtZShuYW1lKXtyZXR1cm4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChuYW1lKWluc3RhbmNlb2YgSFRNTFVua25vd25FbGVtZW50O30KcmV0dXJue2lzVW5rbm93bkVsZW1lbnROYW1lLHRvVGhyZWVEaWdpdExvY2FsZVN0cmluZyxpbnN0YW50aWF0ZVRlbXBsYXRlLHdpbmRvd1JlY3RGb3JFbGVtZW50LHNjcm9sbEludG9WaWV3SWZOZWVkZWQsZXh0cmFjdFVybFN0cmluZyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtpZih0ci5pc0hlYWRsZXNzKXJldHVybnt9O2NvbnN0IFRISVNfRE9DPWRvY3VtZW50Ll9jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgT3ZlcmxheT10ci51aS5iLmRlZmluZSgnb3ZlcmxheScpO092ZXJsYXkucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnb3ZlcmxheScpO3RoaXMucGFyZW50RWxfPXRoaXMub3duZXJEb2N1bWVudC5ib2R5O3RoaXMudmlzaWJsZV89ZmFsc2U7dGhpcy51c2VyQ2FuQ2xvc2VfPXRydWU7dGhpcy5vbktleURvd25fPXRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO3RoaXMub25DbGlja189dGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpO3RoaXMub25Gb2N1c0luXz10aGlzLm9uRm9jdXNJbl8uYmluZCh0aGlzKTt0aGlzLm9uRG9jdW1lbnRDbGlja189dGhpcy5vbkRvY3VtZW50Q2xpY2tfLmJpbmQodGhpcyk7dGhpcy5vbkNsb3NlXz10aGlzLm9uQ2xvc2VfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCd2aXNpYmxlLWNoYW5nZScsdHIudWkuYi5PdmVybGF5LnByb3RvdHlwZS5vblZpc2libGVDaGFuZ2VfLmJpbmQodGhpcyksdHJ1ZSk7Y29uc3QgY3JlYXRlU2hhZG93Um9vdD10aGlzLmNyZWF0ZVNoYWRvd1Jvb3R8fHRoaXMud2Via2l0Q3JlYXRlU2hhZG93Um9vdDt0aGlzLnNoYWRvd189Y3JlYXRlU2hhZG93Um9vdC5jYWxsKHRoaXMpO1BvbHltZXIuZG9tKHRoaXMuc2hhZG93XykuYXBwZW5kQ2hpbGQodHIudWkuYi5pbnN0YW50aWF0ZVRlbXBsYXRlKCcjb3ZlcmxheS10ZW1wbGF0ZScsVEhJU19ET0MpKTt0aGlzLmNsb3NlQnRuXz1Qb2x5bWVyLmRvbSh0aGlzLnNoYWRvd18pLnF1ZXJ5U2VsZWN0b3IoJ2Nsb3NlLWJ1dHRvbicpO3RoaXMuY2xvc2VCdG5fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uQ2xvc2VfKTtQb2x5bWVyLmRvbSh0aGlzLnNoYWRvd18pLnF1ZXJ5U2VsZWN0b3IoJ292ZXJsYXktZnJhbWUnKS5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkNsaWNrXyk7dGhpcy5vYnNlcnZlcl89bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5kaWRCdXR0b25CYXJNdXRhdGVfLmJpbmQodGhpcykpO3RoaXMub2JzZXJ2ZXJfLm9ic2VydmUoUG9seW1lci5kb20odGhpcy5zaGFkb3dfKS5xdWVyeVNlbGVjdG9yKCdidXR0b24tYmFyJykse2NoaWxkTGlzdDp0cnVlfSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJ3RpdGxlJyx7Z2V0KCl7cmV0dXJuIFBvbHltZXIuZG9tKFBvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcigndGl0bGUnKSkudGV4dENvbnRlbnQ7fSxzZXQodGl0bGUpe1BvbHltZXIuZG9tKFBvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcigndGl0bGUnKSkudGV4dENvbnRlbnQ9dGl0bGU7fX0pO30sc2V0IHVzZXJDYW5DbG9zZSh1c2VyQ2FuQ2xvc2Upe3RoaXMudXNlckNhbkNsb3NlXz11c2VyQ2FuQ2xvc2U7dGhpcy5jbG9zZUJ0bl8uc3R5bGUuZGlzcGxheT11c2VyQ2FuQ2xvc2U/J2Jsb2NrJzonbm9uZSc7fSxnZXQgYnV0dG9ucygpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzLnNoYWRvd18pLnF1ZXJ5U2VsZWN0b3IoJ2J1dHRvbi1iYXInKTt9LGdldCB2aXNpYmxlKCl7cmV0dXJuIHRoaXMudmlzaWJsZV87fSxzZXQgdmlzaWJsZShuZXdWYWx1ZSl7aWYodGhpcy52aXNpYmxlXz09PW5ld1ZhbHVlKXJldHVybjt0aGlzLnZpc2libGVfPW5ld1ZhbHVlO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3Zpc2libGUtY2hhbmdlJyk7dGhpcy5kaXNwYXRjaEV2ZW50KGUpO30sb25WaXNpYmxlQ2hhbmdlXygpe3RoaXMudmlzaWJsZV8/dGhpcy5zaG93XygpOnRoaXMuaGlkZV8oKTt9LHNob3dfKCl7UG9seW1lci5kb20odGhpcy5wYXJlbnRFbF8pLmFwcGVuZENoaWxkKHRoaXMpO2lmKHRoaXMudXNlckNhbkNsb3NlXyl7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKSk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkRvY3VtZW50Q2xpY2tfLmJpbmQodGhpcykpO3RoaXMuY2xvc2VCdG5fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uQ2xvc2VfKTt9CnRoaXMucGFyZW50RWxfLmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzaW4nLHRoaXMub25Gb2N1c0luXyk7dGhpcy50YWJJbmRleD0wO2NvbnN0IGVsTGlzdD1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yQWxsKCdidXR0b24sIGlucHV0LCBsaXN0LCBzZWxlY3QsIGEnKTtpZihlbExpc3QubGVuZ3RoPjApe2lmKGVsTGlzdFswXT09PXRoaXMuY2xvc2VCdG5fKXtpZihlbExpc3QubGVuZ3RoPjEpcmV0dXJuIGVsTGlzdFsxXS5mb2N1cygpO31lbHNle3JldHVybiBlbExpc3RbMF0uZm9jdXMoKTt9fQp0aGlzLmZvY3VzKCk7fSxoaWRlXygpe1BvbHltZXIuZG9tKHRoaXMucGFyZW50RWxfKS5yZW1vdmVDaGlsZCh0aGlzKTt0aGlzLnBhcmVudEVsXy5yZW1vdmVFdmVudExpc3RlbmVyKCdmb2N1c2luJyx0aGlzLm9uRm9jdXNJbl8pO2lmKHRoaXMuY2xvc2VCdG5fKXt0aGlzLmNsb3NlQnRuXy5yZW1vdmVFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkNsb3NlXyk7fQpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8pO2RvY3VtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uRG9jdW1lbnRDbGlja18pO30sb25DbG9zZV8oZSl7dGhpcy52aXNpYmxlPWZhbHNlO2lmKChlLnR5cGUhPT0na2V5ZG93bicpfHwoZS50eXBlPT09J2tleWRvd24nJiZlLmtleUNvZGU9PT0yNykpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7fQplLnByZXZlbnREZWZhdWx0KCk7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2Nsb3NlY2xpY2snKTt9LG9uRm9jdXNJbl8oZSl7bGV0IG5vZGU9ZS50YXJnZXQ7d2hpbGUobm9kZSl7aWYobm9kZT09PXRoaXMpe3JldHVybjt9Cm5vZGU9bm9kZS5wYXJlbnROb2RlO30KdHIuYi50aW1lb3V0KDApLnRoZW4oKCk9PnRoaXMuZm9jdXMoKSk7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSxkaWRCdXR0b25CYXJNdXRhdGVfKGUpe2NvbnN0IGhhc0J1dHRvbnM9dGhpcy5idXR0b25zLmNoaWxkcmVuLmxlbmd0aD4wO2lmKGhhc0J1dHRvbnMpe1BvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcignYnV0dG9uLWJhcicpLnN0eWxlLmRpc3BsYXk9dW5kZWZpbmVkO31lbHNle1BvbHltZXIuZG9tKHRoaXMuc2hhZG93XykucXVlcnlTZWxlY3RvcignYnV0dG9uLWJhcicpLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LG9uS2V5RG93bl8oZSl7aWYoZS5rZXlDb2RlPT09OSYmZS5zaGlmdEtleSYmZS50YXJnZXQ9PT10aGlzKXtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuO30KaWYoZS5rZXlDb2RlIT09MjcpcmV0dXJuO3RoaXMub25DbG9zZV8oZSk7fSxvbkNsaWNrXyhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sb25Eb2N1bWVudENsaWNrXyhlKXtpZighdGhpcy51c2VyQ2FuQ2xvc2VfKXJldHVybjt0aGlzLm9uQ2xvc2VfKGUpO319O092ZXJsYXkuc2hvd0Vycm9yPWZ1bmN0aW9uKG1zZyxvcHRfZXJyKXtjb25zdCBvPW5ldyBPdmVybGF5KCk7by50aXRsZT0nRXJyb3InO1BvbHltZXIuZG9tKG8pLnRleHRDb250ZW50PW1zZztpZihvcHRfZXJyKXtjb25zdCBlPXRyLmIubm9ybWFsaXplRXhjZXB0aW9uKG9wdF9lcnIpO2NvbnN0IHN0YWNrRGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3ByZScpO1BvbHltZXIuZG9tKHN0YWNrRGl2KS50ZXh0Q29udGVudD1lLnN0YWNrO3N0YWNrRGl2LnN0eWxlLnBhZGRpbmdMZWZ0PSc4cHgnO3N0YWNrRGl2LnN0eWxlLm1hcmdpbj0wO1BvbHltZXIuZG9tKG8pLmFwcGVuZENoaWxkKHN0YWNrRGl2KTt9CmNvbnN0IGI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7UG9seW1lci5kb20oYikudGV4dENvbnRlbnQ9J09LJztiLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbigpe28udmlzaWJsZT1mYWxzZTt9KTtQb2x5bWVyLmRvbShvLmJ1dHRvbnMpLmFwcGVuZENoaWxkKGIpO28udmlzaWJsZT10cnVlO3JldHVybiBvO307cmV0dXJue092ZXJsYXksfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmltcG9ydGVyJyxmdW5jdGlvbigpe2NvbnN0IFRpbWluZz10ci5iLlRpbWluZztmdW5jdGlvbiBJbXBvcnRPcHRpb25zKCl7dGhpcy5zaGlmdFdvcmxkVG9aZXJvPXRydWU7dGhpcy5wcnVuZUVtcHR5Q29udGFpbmVycz10cnVlO3RoaXMuc2hvd0ltcG9ydFdhcm5pbmdzPXRydWU7dGhpcy50cmFja0RldGFpbGVkTW9kZWxTdGF0cz1mYWxzZTt0aGlzLmN1c3RvbWl6ZU1vZGVsQ2FsbGJhY2s9dW5kZWZpbmVkO2NvbnN0IGF1ZGl0b3JUeXBlcz10ci5jLkF1ZGl0b3IuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpO3RoaXMuYXVkaXRvckNvbnN0cnVjdG9ycz1hdWRpdG9yVHlwZXMubWFwKGZ1bmN0aW9uKHR5cGVJbmZvKXtyZXR1cm4gdHlwZUluZm8uY29uc3RydWN0b3I7fSk7fQpmdW5jdGlvbiBJbXBvcnQobW9kZWwsb3B0X29wdGlvbnMpe2lmKG1vZGVsPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ011c3QgcHJvdmlkZSBtb2RlbCB0byBpbXBvcnQgaW50by4nKTt9CnRoaXMuaW1wb3J0aW5nXz1mYWxzZTt0aGlzLmltcG9ydE9wdGlvbnNfPW9wdF9vcHRpb25zfHxuZXcgSW1wb3J0T3B0aW9ucygpO3RoaXMubW9kZWxfPW1vZGVsO3RoaXMubW9kZWxfLmltcG9ydE9wdGlvbnM9dGhpcy5pbXBvcnRPcHRpb25zXzt9CkltcG9ydC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3QucHJvdG90eXBlLGltcG9ydFRyYWNlcyh0cmFjZXMpe2NvbnN0IHByb2dyZXNzTWV0ZXI9e3VwZGF0ZShtc2cpe319O3RyLmIuVGFzay5SdW5TeW5jaHJvbm91c2x5KHRoaXMuY3JlYXRlSW1wb3J0VHJhY2VzVGFzayhwcm9ncmVzc01ldGVyLHRyYWNlcykpO30saW1wb3J0VHJhY2VzV2l0aFByb2dyZXNzRGlhbG9nKHRyYWNlcyl7aWYodHIuaXNIZWFkbGVzcyl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgdXNlIHRoaXMgbWV0aG9kIGluIGhlYWRsZXNzIG1vZGUuJyk7fQpjb25zdCBvdmVybGF5PXRyLnVpLmIuT3ZlcmxheSgpO292ZXJsYXkudGl0bGU9J0ltcG9ydGluZy4uLic7b3ZlcmxheS51c2VyQ2FuQ2xvc2U9ZmFsc2U7b3ZlcmxheS5tc2dFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtQb2x5bWVyLmRvbShvdmVybGF5KS5hcHBlbmRDaGlsZChvdmVybGF5Lm1zZ0VsKTtvdmVybGF5Lm1zZ0VsLnN0eWxlLm1hcmdpbj0nMjBweCc7b3ZlcmxheS51cGRhdGU9ZnVuY3Rpb24obXNnKXtQb2x5bWVyLmRvbSh0aGlzLm1zZ0VsKS50ZXh0Q29udGVudD1tc2c7fTtvdmVybGF5LnZpc2libGU9dHJ1ZTtjb25zdCBwcm9taXNlPXRyLmIuVGFzay5SdW5XaGVuSWRsZSh0aGlzLmNyZWF0ZUltcG9ydFRyYWNlc1Rhc2sob3ZlcmxheSx0cmFjZXMpKTtwcm9taXNlLnRoZW4oZnVuY3Rpb24oKXtvdmVybGF5LnZpc2libGU9ZmFsc2U7fSxmdW5jdGlvbihlcnIpe292ZXJsYXkudmlzaWJsZT1mYWxzZTt9KTtyZXR1cm4gcHJvbWlzZTt9LGNyZWF0ZUltcG9ydFRyYWNlc1Rhc2socHJvZ3Jlc3NNZXRlcix0cmFjZXMpe2NvbnN0IGltcG9ydFN0YXJ0VGltZU1zPXRyLmIuVGltaW5nLmdldEN1cnJlbnRUaW1lTXMoKTtpZih0aGlzLmltcG9ydGluZ18pe3Rocm93IG5ldyBFcnJvcignQWxyZWFkeSBpbXBvcnRpbmcuJyk7fQp0aGlzLmltcG9ydGluZ189dHJ1ZTtjb25zdCBpbXBvcnRUYXNrPW5ldyB0ci5iLlRhc2soZnVuY3Rpb24gcHJlcGFyZUltcG9ydCgpe3Byb2dyZXNzTWV0ZXIudXBkYXRlKCdJIHdpbGwgbm93IGltcG9ydCB5b3VyIHRyYWNlcyBmb3IgeW91Li4uJyk7fSx0aGlzKTtsZXQgbGFzdFRhc2s9aW1wb3J0VGFzaztjb25zdCBpbXBvcnRlcnM9W107ZnVuY3Rpb24gYWRkSW1wb3J0U3RhZ2UodGl0bGUsY2FsbGJhY2spe2xhc3RUYXNrPWxhc3RUYXNrLmFmdGVyKCgpPT5wcm9ncmVzc01ldGVyLnVwZGF0ZSh0aXRsZSkpO2xhc3RUYXNrLnVwZGF0ZXNVaT10cnVlO2xhc3RUYXNrPWxhc3RUYXNrLmFmdGVyKGNhbGxiYWNrKTt9CmZ1bmN0aW9uIGFkZFN0YWdlRm9yRWFjaEltcG9ydGVyKHRpdGxlLGNhbGxiYWNrKXtsYXN0VGFzaz1sYXN0VGFzay5hZnRlcigodGFzayk9PntpbXBvcnRlcnMuZm9yRWFjaCgoaW1wb3J0ZXIsaW5kZXgpPT57Y29uc3QgdWlTdWJUYXNrPXRhc2suc3ViVGFzaygoKT0+e3Byb2dyZXNzTWV0ZXIudXBkYXRlKGAke3RpdGxlfSAke2luZGV4ICsgMX0gb2YgJHtpbXBvcnRlcnMubGVuZ3RofWApO30pO3VpU3ViVGFzay51cGRhdGVzVWk9dHJ1ZTt0YXNrLnN1YlRhc2soKCk9PmNhbGxiYWNrKGltcG9ydGVyKSk7fSk7fSk7fQphZGRJbXBvcnRTdGFnZSgnQ3JlYXRpbmcgaW1wb3J0ZXJzLi4uJywoKT0+e3RyYWNlcz10cmFjZXMuc2xpY2UoMCk7cHJvZ3Jlc3NNZXRlci51cGRhdGUoJ0NyZWF0aW5nIGltcG9ydGVycy4uLicpO2ZvcihsZXQgaT0wO2k8dHJhY2VzLmxlbmd0aDsrK2kpe2ltcG9ydGVycy5wdXNoKHRoaXMuY3JlYXRlSW1wb3J0ZXJfKHRyYWNlc1tpXSkpO30KZm9yKGxldCBpPTA7aTxpbXBvcnRlcnMubGVuZ3RoO2krKyl7Y29uc3Qgc3VidHJhY2VzPWltcG9ydGVyc1tpXS5leHRyYWN0U3VidHJhY2VzKCk7Zm9yKGxldCBqPTA7ajxzdWJ0cmFjZXMubGVuZ3RoO2orKyl7dHJ5e3RyYWNlcy5wdXNoKHN1YnRyYWNlc1tqXSk7aW1wb3J0ZXJzLnB1c2godGhpcy5jcmVhdGVJbXBvcnRlcl8oc3VidHJhY2VzW2pdKSk7fWNhdGNoKGVycm9yKXt0aGlzLm1vZGVsXy5pbXBvcnRXYXJuaW5nKHt0eXBlOmVycm9yLm5hbWUsbWVzc2FnZTplcnJvci5tZXNzYWdlLHNob3dUb1VzZXI6dHJ1ZSx9KTtjb250aW51ZTt9fX0KaWYodHJhY2VzLmxlbmd0aCYmIXRoaXMuaGFzRXZlbnREYXRhRGVjb2Rlcl8oaW1wb3J0ZXJzKSl7dGhyb3cgbmV3IEVycm9yKCdDb3VsZCBub3QgZmluZCBhbiBpbXBvcnRlciBmb3IgdGhlIHByb3ZpZGVkIGV2ZW50RGF0YS4nKTt9CmltcG9ydGVycy5zb3J0KGZ1bmN0aW9uKHgseSl7cmV0dXJuIHguaW1wb3J0UHJpb3JpdHkteS5pbXBvcnRQcmlvcml0eTt9KTt9KTthZGRTdGFnZUZvckVhY2hJbXBvcnRlcignSW1wb3J0aW5nIGNsb2NrIHN5bmMgbWFya2VycycsaW1wb3J0ZXI9PmltcG9ydGVyLmltcG9ydENsb2NrU3luY01hcmtlcnMoKSk7YWRkU3RhZ2VGb3JFYWNoSW1wb3J0ZXIoJ0ltcG9ydGluZycsaW1wb3J0ZXI9PmltcG9ydGVyLmltcG9ydEV2ZW50cygpKTtpZih0aGlzLmltcG9ydE9wdGlvbnNfLmN1c3RvbWl6ZU1vZGVsQ2FsbGJhY2spe2FkZEltcG9ydFN0YWdlKCdDdXN0b21pemluZycsKCk9Pnt0aGlzLmltcG9ydE9wdGlvbnNfLmN1c3RvbWl6ZU1vZGVsQ2FsbGJhY2sodGhpcy5tb2RlbF8pO30pO30KYWRkU3RhZ2VGb3JFYWNoSW1wb3J0ZXIoJ0ltcG9ydGluZyBzYW1wbGUgZGF0YScsaW1wb3J0ZXI9PmltcG9ydGVyLmltcG9ydFNhbXBsZURhdGEoKSk7YWRkSW1wb3J0U3RhZ2UoJ0F1dG9jbG9zaW5nIG9wZW4gc2xpY2VzLi4uJywoKT0+e3RoaXMubW9kZWxfLmF1dG9DbG9zZU9wZW5TbGljZXMoKTt0aGlzLm1vZGVsXy5jcmVhdGVTdWJTbGljZXMoKTt9KTthZGRTdGFnZUZvckVhY2hJbXBvcnRlcignRmluYWxpemluZyBpbXBvcnQnLGltcG9ydGVyPT5pbXBvcnRlci5maW5hbGl6ZUltcG9ydCgpKTthZGRJbXBvcnRTdGFnZSgnSW5pdGlhbGl6aW5nIG9iamVjdHMgKHN0ZXAgMS8yKS4uLicsKCk9PnRoaXMubW9kZWxfLnByZUluaXRpYWxpemVPYmplY3RzKCkpO2lmKHRoaXMuaW1wb3J0T3B0aW9uc18ucHJ1bmVFbXB0eUNvbnRhaW5lcnMpe2FkZEltcG9ydFN0YWdlKCdQcnVuaW5nIGVtcHR5IGNvbnRhaW5lcnMuLi4nLCgpPT50aGlzLm1vZGVsXy5wcnVuZUVtcHR5Q29udGFpbmVycygpKTt9CmFkZEltcG9ydFN0YWdlKCdNZXJnaW5nIGtlcm5lbCB3aXRoIHVzZXJsYW5kLi4uJywoKT0+dGhpcy5tb2RlbF8ubWVyZ2VLZXJuZWxXaXRoVXNlcmxhbmQoKSk7bGV0IGF1ZGl0b3JzPVtdO2FkZEltcG9ydFN0YWdlKCdBZGRpbmcgYXJiaXRyYXJ5IGRhdGEgdG8gbW9kZWwuLi4nLCgpPT57YXVkaXRvcnM9dGhpcy5pbXBvcnRPcHRpb25zXy5hdWRpdG9yQ29uc3RydWN0b3JzLm1hcChhdWRpdG9yQ29uc3RydWN0b3I9Pm5ldyBhdWRpdG9yQ29uc3RydWN0b3IodGhpcy5tb2RlbF8pKTthdWRpdG9ycy5mb3JFYWNoKChhdWRpdG9yKT0+e2F1ZGl0b3IucnVuQW5ub3RhdGUoKTthdWRpdG9yLmluc3RhbGxVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlcklmTmVlZGVkKCk7fSk7fSk7YWRkSW1wb3J0U3RhZ2UoJ0NvbXB1dGluZyBmaW5hbCB3b3JsZCBib3VuZHMuLi4nLCgpPT57dGhpcy5tb2RlbF8uY29tcHV0ZVdvcmxkQm91bmRzKHRoaXMuaW1wb3J0T3B0aW9uc18uc2hpZnRXb3JsZFRvWmVybyk7fSk7YWRkSW1wb3J0U3RhZ2UoJ0J1aWxkaW5nIGZsb3cgZXZlbnQgbWFwLi4uJywoKT0+dGhpcy5tb2RlbF8uYnVpbGRGbG93RXZlbnRJbnRlcnZhbFRyZWUoKSk7YWRkSW1wb3J0U3RhZ2UoJ0pvaW5pbmcgb2JqZWN0IHJlZnMuLi4nLCgpPT50aGlzLm1vZGVsXy5qb2luUmVmcygpKTthZGRJbXBvcnRTdGFnZSgnQ2xlYW5pbmcgdXAgdW5kZWxldGVkIG9iamVjdHMuLi4nLCgpPT50aGlzLm1vZGVsXy5jbGVhbnVwVW5kZWxldGVkT2JqZWN0cygpKTthZGRJbXBvcnRTdGFnZSgnU29ydGluZyBtZW1vcnkgZHVtcHMuLi4nLCgpPT50aGlzLm1vZGVsXy5zb3J0TWVtb3J5RHVtcHMoKSk7YWRkSW1wb3J0U3RhZ2UoJ0ZpbmFsaXppbmcgbWVtb3J5IGR1bXAgZ3JhcGhzLi4uJywoKT0+dGhpcy5tb2RlbF8uZmluYWxpemVNZW1vcnlHcmFwaHMoKSk7YWRkSW1wb3J0U3RhZ2UoJ0luaXRpYWxpemluZyBvYmplY3RzIChzdGVwIDIvMikuLi4nLCgpPT50aGlzLm1vZGVsXy5pbml0aWFsaXplT2JqZWN0cygpKTthZGRJbXBvcnRTdGFnZSgnQnVpbGRpbmcgZXZlbnQgaW5kaWNlcy4uLicsKCk9PnRoaXMubW9kZWxfLmJ1aWxkRXZlbnRJbmRpY2VzKCkpO2FkZEltcG9ydFN0YWdlKCdCdWlsZGluZyBVc2VyTW9kZWwuLi4nLCgpPT57Y29uc3QgdXNlck1vZGVsQnVpbGRlcj1uZXcgdHIuaW1wb3J0ZXIuVXNlck1vZGVsQnVpbGRlcih0aGlzLm1vZGVsXyk7dXNlck1vZGVsQnVpbGRlci5idWlsZFVzZXJNb2RlbCgpO30pO2FkZEltcG9ydFN0YWdlKCdTb3J0aW5nIHVzZXIgZXhwZWN0YXRpb25zLi4uJywoKT0+dGhpcy5tb2RlbF8udXNlck1vZGVsLnNvcnRFeHBlY3RhdGlvbnMoKSk7YWRkSW1wb3J0U3RhZ2UoJ1J1bm5pbmcgYXVkaXRvcnMuLi4nLCgpPT57YXVkaXRvcnMuZm9yRWFjaChhdWRpdG9yPT5hdWRpdG9yLnJ1bkF1ZGl0KCkpO30pO2FkZEltcG9ydFN0YWdlKCdVcGRhdGluZyBhbGVydHMuLi4nLCgpPT50aGlzLm1vZGVsXy5zb3J0QWxlcnRzKCkpO2FkZEltcG9ydFN0YWdlKCdVcGRhdGUgYm91bmRzLi4uJywoKT0+dGhpcy5tb2RlbF8udXBkYXRlQm91bmRzKCkpO2FkZEltcG9ydFN0YWdlKCdMb29raW5nIGZvciB3YXJuaW5ncy4uLicsKCk9PntpZighdGhpcy5tb2RlbF8uaXNUaW1lSGlnaFJlc29sdXRpb24pe3RoaXMubW9kZWxfLmltcG9ydFdhcm5pbmcoe3R5cGU6J2xvd19yZXNvbHV0aW9uX3RpbWVyJyxtZXNzYWdlOidUcmFjZSB0aW1lIGlzIGxvdyByZXNvbHV0aW9uLCB0cmFjZSBtYXkgYmUgdW51c2FibGUuJyxzaG93VG9Vc2VyOnRydWV9KTt9fSk7bGFzdFRhc2suYWZ0ZXIoKCk9Pnt0aGlzLmltcG9ydGluZ189ZmFsc2U7dGhpcy5tb2RlbF8uc3RhdHMudHJhY2VJbXBvcnREdXJhdGlvbk1zPXRyLmIuVGltaW5nLmdldEN1cnJlbnRUaW1lTXMoKS1pbXBvcnRTdGFydFRpbWVNczt9KTtyZXR1cm4gaW1wb3J0VGFzazt9LGNyZWF0ZUltcG9ydGVyXyhldmVudERhdGEpe2NvbnN0IGltcG9ydGVyQ29uc3RydWN0b3I9dHIuaW1wb3J0ZXIuSW1wb3J0ZXIuZmluZEltcG9ydGVyRm9yKGV2ZW50RGF0YSk7aWYoIWltcG9ydGVyQ29uc3RydWN0b3Ipe3Rocm93IG5ldyBFcnJvcignQ291bGRuXCd0IGNyZWF0ZSBhbiBpbXBvcnRlciBmb3IgdGhlIHByb3ZpZGVkICcrJ2V2ZW50RGF0YS4nKTt9CnJldHVybiBuZXcgaW1wb3J0ZXJDb25zdHJ1Y3Rvcih0aGlzLm1vZGVsXyxldmVudERhdGEpO30saGFzRXZlbnREYXRhRGVjb2Rlcl8oaW1wb3J0ZXJzKXtmb3IobGV0IGk9MDtpPGltcG9ydGVycy5sZW5ndGg7KytpKXtpZighaW1wb3J0ZXJzW2ldLmlzVHJhY2VEYXRhQ29udGFpbmVyKCkpcmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fX07cmV0dXJue0ltcG9ydE9wdGlvbnMsSW1wb3J0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IFRocmVhZFNsaWNlPXRyLm1vZGVsLlRocmVhZFNsaWNlO2Z1bmN0aW9uIFY4R0NTdGF0c1RocmVhZFNsaWNlKCl7VGhyZWFkU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMubGl2ZU9iamVjdHNfPUpTT04ucGFyc2UodGhpcy5hcmdzLmxpdmUpO2RlbGV0ZSB0aGlzLmFyZ3MubGl2ZTt0aGlzLmRlYWRPYmplY3RzXz1KU09OLnBhcnNlKHRoaXMuYXJncy5kZWFkKTtkZWxldGUgdGhpcy5hcmdzLmRlYWQ7fQpWOEdDU3RhdHNUaHJlYWRTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpUaHJlYWRTbGljZS5wcm90b3R5cGUsZ2V0IGxpdmVPYmplY3RzKCl7cmV0dXJuIHRoaXMubGl2ZU9iamVjdHNfO30sZ2V0IGRlYWRPYmplY3RzKCl7cmV0dXJuIHRoaXMuZGVhZE9iamVjdHNfO319O1RocmVhZFNsaWNlLnN1YlR5cGVzLnJlZ2lzdGVyKFY4R0NTdGF0c1RocmVhZFNsaWNlLHtjYXRlZ29yeVBhcnRzOlsnZGlzYWJsZWQtYnktZGVmYXVsdC12OC5nY19zdGF0cyddLG5hbWU6J3Y4IGdjIHN0YXRzIHNsaWNlJyxwbHVyYWxOYW1lOid2OCBnYyBzdGF0cyBzbGljZXMnfSk7cmV0dXJue1Y4R0NTdGF0c1RocmVhZFNsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IFRocmVhZFNsaWNlPXRyLm1vZGVsLlRocmVhZFNsaWNlO2Z1bmN0aW9uIFY4SUNTdGF0c1RocmVhZFNsaWNlKCl7VGhyZWFkU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuaWNTdGF0c189dW5kZWZpbmVkO2lmKHRoaXMuYXJnc1snaWMtc3RhdHMnXSl7dGhpcy5pY1N0YXRzXz10aGlzLmFyZ3NbJ2ljLXN0YXRzJ10uZGF0YTtkZWxldGUgdGhpcy5hcmdzWydpYy1zdGF0cyddO319ClY4SUNTdGF0c1RocmVhZFNsaWNlLnByb3RvdHlwZT17X19wcm90b19fOlRocmVhZFNsaWNlLnByb3RvdHlwZSxnZXQgaWNTdGF0cygpe3JldHVybiB0aGlzLmljU3RhdHNfO319O1RocmVhZFNsaWNlLnN1YlR5cGVzLnJlZ2lzdGVyKFY4SUNTdGF0c1RocmVhZFNsaWNlLHtjYXRlZ29yeVBhcnRzOlsnZGlzYWJsZWQtYnktZGVmYXVsdC12OC5pY19zdGF0cyddLG5hbWU6J3Y4IGljIHN0YXRzIHNsaWNlJyxwbHVyYWxOYW1lOid2OCBpYyBzdGF0cyBzbGljZXMnfSk7cmV0dXJue1Y4SUNTdGF0c1RocmVhZFNsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NvbnN0IFRocmVhZFNsaWNlPXRyLm1vZGVsLlRocmVhZFNsaWNlO2Z1bmN0aW9uIFY4VGhyZWFkU2xpY2UoKXtUaHJlYWRTbGljZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7dGhpcy5ydW50aW1lQ2FsbFN0YXRzXz11bmRlZmluZWQ7fQpWOFRocmVhZFNsaWNlLnByb3RvdHlwZT17X19wcm90b19fOlRocmVhZFNsaWNlLnByb3RvdHlwZSxnZXQgcnVudGltZUNhbGxTdGF0cygpe2lmKCdydW50aW1lLWNhbGwtc3RhdHMnaW4gdGhpcy5hcmdzKXt0aGlzLnJ1bnRpbWVDYWxsU3RhdHNfPXRoaXMuYXJnc1sncnVudGltZS1jYWxsLXN0YXRzJ107ZGVsZXRlIHRoaXMuYXJnc1sncnVudGltZS1jYWxsLXN0YXRzJ107fQpyZXR1cm4gdGhpcy5ydW50aW1lQ2FsbFN0YXRzXzt9fTtUaHJlYWRTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihWOFRocmVhZFNsaWNlLHtjYXRlZ29yeVBhcnRzOlsndjgnLCdkaXNhYmxlZC1ieS1kZWZhdWx0LXY4LnJ1bnRpbWVfc3RhdHMnXSxuYW1lOid2OCBzbGljZScscGx1cmFsTmFtZTondjggc2xpY2VzJ30pO3JldHVybntWOFRocmVhZFNsaWNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFBpY3R1cmVBc0ltYWdlRGF0YShwaWN0dXJlLGVycm9yT3JJbWFnZURhdGEpe3RoaXMucGljdHVyZV89cGljdHVyZTtpZihlcnJvck9ySW1hZ2VEYXRhIGluc3RhbmNlb2YgSW1hZ2VEYXRhKXt0aGlzLmVycm9yXz11bmRlZmluZWQ7dGhpcy5pbWFnZURhdGFfPWVycm9yT3JJbWFnZURhdGE7fWVsc2V7dGhpcy5lcnJvcl89ZXJyb3JPckltYWdlRGF0YTt0aGlzLmltYWdlRGF0YV89dW5kZWZpbmVkO319ClBpY3R1cmVBc0ltYWdlRGF0YS5QZW5kaW5nPWZ1bmN0aW9uKHBpY3R1cmUpe3JldHVybiBuZXcgUGljdHVyZUFzSW1hZ2VEYXRhKHBpY3R1cmUsdW5kZWZpbmVkKTt9O1BpY3R1cmVBc0ltYWdlRGF0YS5wcm90b3R5cGU9e2dldCBwaWN0dXJlKCl7cmV0dXJuIHRoaXMucGljdHVyZV87fSxnZXQgZXJyb3IoKXtyZXR1cm4gdGhpcy5lcnJvcl87fSxnZXQgaW1hZ2VEYXRhKCl7cmV0dXJuIHRoaXMuaW1hZ2VEYXRhXzt9LGlzUGVuZGluZygpe3JldHVybiB0aGlzLmVycm9yXz09PXVuZGVmaW5lZCYmdGhpcy5pbWFnZURhdGFfPT09dW5kZWZpbmVkO30sYXNDYW52YXMoKXtpZighdGhpcy5pbWFnZURhdGFfKXJldHVybjtjb25zdCBjYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Y29uc3QgY3R4PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO2NhbnZhcy53aWR0aD10aGlzLmltYWdlRGF0YV8ud2lkdGg7Y2FudmFzLmhlaWdodD10aGlzLmltYWdlRGF0YV8uaGVpZ2h0O2N0eC5wdXRJbWFnZURhdGEodGhpcy5pbWFnZURhdGFfLDAsMCk7cmV0dXJuIGNhbnZhczt9fTtyZXR1cm57UGljdHVyZUFzSW1hZ2VEYXRhLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnZlcnRlZE5hbWVDYWNoZT17fTtmdW5jdGlvbiBjb252ZXJ0TmFtZVRvSlNDb252ZW50aW9uKG5hbWUpe2lmKG5hbWUgaW4gY29udmVydGVkTmFtZUNhY2hlKXtyZXR1cm4gY29udmVydGVkTmFtZUNhY2hlW25hbWVdO30KaWYobmFtZVswXT09PSdfJ3x8bmFtZVtuYW1lLmxlbmd0aC0xXT09PSdfJyl7Y29udmVydGVkTmFtZUNhY2hlW25hbWVdPW5hbWU7cmV0dXJuIG5hbWU7fQpjb25zdCB3b3Jkcz1uYW1lLnNwbGl0KCdfJyk7aWYod29yZHMubGVuZ3RoPT09MSl7Y29udmVydGVkTmFtZUNhY2hlW25hbWVdPXdvcmRzWzBdO3JldHVybiB3b3Jkc1swXTt9CmZvcihsZXQgaT0xO2k8d29yZHMubGVuZ3RoO2krKyl7d29yZHNbaV09d29yZHNbaV1bMF0udG9VcHBlckNhc2UoKSt3b3Jkc1tpXS5zdWJzdHJpbmcoMSk7fQpjb252ZXJ0ZWROYW1lQ2FjaGVbbmFtZV09d29yZHMuam9pbignJyk7cmV0dXJuIGNvbnZlcnRlZE5hbWVDYWNoZVtuYW1lXTt9CmZ1bmN0aW9uIG1vdmVSZXF1aXJlZEZpZWxkc0Zyb21BcmdzVG9Ub3BsZXZlbChvYmplY3QsZmllbGRzKXtmb3IobGV0IGk9MDtpPGZpZWxkcy5sZW5ndGg7aSsrKXtjb25zdCBrZXk9ZmllbGRzW2ldO2lmKG9iamVjdC5hcmdzW2tleV09PT11bmRlZmluZWQpe3Rocm93IEVycm9yKCdFeHBlY3RlZCBmaWVsZCAnK2tleSsnIG5vdCBmb3VuZCBpbiBhcmdzJyk7fQppZihvYmplY3Rba2V5XSE9PXVuZGVmaW5lZCl7dGhyb3cgRXJyb3IoJ0ZpZWxkICcra2V5KycgYWxyZWFkeSBpbiBvYmplY3QnKTt9Cm9iamVjdFtrZXldPW9iamVjdC5hcmdzW2tleV07ZGVsZXRlIG9iamVjdC5hcmdzW2tleV07fX0KZnVuY3Rpb24gbW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKG9iamVjdCxmaWVsZHMpe2ZvcihsZXQgaT0wO2k8ZmllbGRzLmxlbmd0aDtpKyspe2NvbnN0IGtleT1maWVsZHNbaV07aWYob2JqZWN0LmFyZ3Nba2V5XT09PXVuZGVmaW5lZCljb250aW51ZTtpZihvYmplY3Rba2V5XSE9PXVuZGVmaW5lZCl7dGhyb3cgRXJyb3IoJ0ZpZWxkICcra2V5KycgYWxyZWFkeSBpbiBvYmplY3QnKTt9Cm9iamVjdFtrZXldPW9iamVjdC5hcmdzW2tleV07ZGVsZXRlIG9iamVjdC5hcmdzW2tleV07fX0KZnVuY3Rpb24gcHJlSW5pdGlhbGl6ZU9iamVjdChvYmplY3Qpe3ByZUluaXRpYWxpemVPYmplY3RJbm5lcihvYmplY3QuYXJncyxmYWxzZSk7fQpmdW5jdGlvbiBwcmVJbml0aWFsaXplT2JqZWN0SW5uZXIob2JqZWN0LGhhc1JlY3Vyc2VkKXtpZighKG9iamVjdCBpbnN0YW5jZW9mIE9iamVjdCkpcmV0dXJuO2lmKG9iamVjdCBpbnN0YW5jZW9mIEFycmF5KXtmb3IobGV0IGk9MDtpPG9iamVjdC5sZW5ndGg7aSsrKXtwcmVJbml0aWFsaXplT2JqZWN0SW5uZXIob2JqZWN0W2ldLHRydWUpO30KcmV0dXJuO30KaWYoaGFzUmVjdXJzZWQmJihvYmplY3QgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdHx8b2JqZWN0IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0SW5zdGFuY2UpKXtyZXR1cm47fQpmb3IobGV0IGtleSBpbiBvYmplY3Qpe2NvbnN0IG5ld0tleT1jb252ZXJ0TmFtZVRvSlNDb252ZW50aW9uKGtleSk7aWYobmV3S2V5IT09a2V5KXtjb25zdCB2YWx1ZT1vYmplY3Rba2V5XTtkZWxldGUgb2JqZWN0W2tleV07b2JqZWN0W25ld0tleV09dmFsdWU7a2V5PW5ld0tleTt9CmlmKC9RdWFkJC8udGVzdChrZXkpJiYhKG9iamVjdFtrZXldaW5zdGFuY2VvZiB0ci5iLm1hdGguUXVhZCkpe2xldCBxO3RyeXtxPXRyLmIubWF0aC5RdWFkLmZyb204QXJyYXkob2JqZWN0W2tleV0pO31jYXRjaChlKXt9Cm9iamVjdFtrZXldPXE7Y29udGludWU7fQppZigvUmVjdCQvLnRlc3Qoa2V5KSYmIShvYmplY3Rba2V5XWluc3RhbmNlb2YgdHIuYi5tYXRoLlJlY3QpKXtsZXQgcjt0cnl7cj10ci5iLm1hdGguUmVjdC5mcm9tQXJyYXkob2JqZWN0W2tleV0pO31jYXRjaChlKXt9Cm9iamVjdFtrZXldPXI7fQpwcmVJbml0aWFsaXplT2JqZWN0SW5uZXIob2JqZWN0W2tleV0sdHJ1ZSk7fX0KcmV0dXJue3ByZUluaXRpYWxpemVPYmplY3QsY29udmVydE5hbWVUb0pTQ29udmVudGlvbixtb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwsbW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2NvbnN0IFBpY3R1cmVDb3VudD0wO2NvbnN0IE9QU19USU1JTkdfSVRFUkFUSU9OUz0zO2Z1bmN0aW9uIFBpY3R1cmUoc2twNjQsbGF5ZXJSZWN0KXt0aGlzLnNrcDY0Xz1za3A2NDt0aGlzLmxheWVyUmVjdF89bGF5ZXJSZWN0O3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7fQpQaWN0dXJlLnByb3RvdHlwZT17Z2V0IGNhblNhdmUoKXtyZXR1cm4gdHJ1ZTt9LGdldCBsYXllclJlY3QoKXtyZXR1cm4gdGhpcy5sYXllclJlY3RfO30sZ2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LGdldEJhc2U2NFNrcERhdGEoKXtyZXR1cm4gdGhpcy5za3A2NF87fSxnZXRPcHMoKXtpZighUGljdHVyZVNuYXBzaG90LkNhbkdldE9wcygpKXtjb25zb2xlLmVycm9yKFBpY3R1cmVTbmFwc2hvdC5Ib3dUb0VuYWJsZVBpY3R1cmVEZWJ1Z2dpbmcoKSk7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IG9wcz13aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcuZ2V0T3BzKHtza3A2NDp0aGlzLnNrcDY0XyxwYXJhbXM6e2xheWVyX3JlY3Q6dGhpcy5sYXllclJlY3RfLnRvQXJyYXkoKX19KTtpZighb3BzKXtjb25zb2xlLmVycm9yKCdGYWlsZWQgdG8gZ2V0IHBpY3R1cmUgb3BzLicpO30KcmV0dXJuIG9wczt9LGdldE9wVGltaW5ncygpe2lmKCFQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BUaW1pbmdzKCkpe2NvbnNvbGUuZXJyb3IoUGljdHVyZVNuYXBzaG90Lkhvd1RvRW5hYmxlUGljdHVyZURlYnVnZ2luZygpKTtyZXR1cm4gdW5kZWZpbmVkO30KY29uc3Qgb3BUaW1pbmdzPXdpbmRvdy5jaHJvbWUuc2tpYUJlbmNobWFya2luZy5nZXRPcFRpbWluZ3Moe3NrcDY0OnRoaXMuc2twNjRfLHBhcmFtczp7bGF5ZXJfcmVjdDp0aGlzLmxheWVyUmVjdF8udG9BcnJheSgpfX0pO2lmKCFvcFRpbWluZ3Mpe2NvbnNvbGUuZXJyb3IoJ0ZhaWxlZCB0byBnZXQgcGljdHVyZSBvcCB0aW1pbmdzLicpO30KcmV0dXJuIG9wVGltaW5nczt9LHRhZ09wc1dpdGhUaW1pbmdzKG9wcyl7Y29uc3Qgb3BUaW1pbmdzPVtdO2ZvcihsZXQgaXRlcmF0aW9uPTA7aXRlcmF0aW9uPE9QU19USU1JTkdfSVRFUkFUSU9OUztpdGVyYXRpb24rKyl7b3BUaW1pbmdzW2l0ZXJhdGlvbl09dGhpcy5nZXRPcFRpbWluZ3MoKTtpZighb3BUaW1pbmdzW2l0ZXJhdGlvbl18fCFvcFRpbWluZ3NbaXRlcmF0aW9uXS5jbWRfdGltZXMpe3JldHVybiBvcHM7fQppZihvcFRpbWluZ3NbaXRlcmF0aW9uXS5jbWRfdGltZXMubGVuZ3RoIT09b3BzLmxlbmd0aCl7cmV0dXJuIG9wczt9fQpmb3IobGV0IG9wSW5kZXg9MDtvcEluZGV4PG9wcy5sZW5ndGg7b3BJbmRleCsrKXtsZXQgbWluPU51bWJlci5NQVhfVkFMVUU7Zm9yKGxldCBpPTA7aTxPUFNfVElNSU5HX0lURVJBVElPTlM7aSsrKXttaW49TWF0aC5taW4obWluLG9wVGltaW5nc1tpXS5jbWRfdGltZXNbb3BJbmRleF0pO30Kb3BzW29wSW5kZXhdLmNtZF90aW1lPW1pbjt9CnJldHVybiBvcHM7fSxyYXN0ZXJpemUocGFyYW1zLHJhc3RlckNvbXBsZXRlQ2FsbGJhY2spe2lmKCFQaWN0dXJlU25hcHNob3QuQ2FuUmFzdGVyaXplKCl8fCFQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BzKCkpe3Jhc3RlckNvbXBsZXRlQ2FsbGJhY2sobmV3IHRyLmUuY2MuUGljdHVyZUFzSW1hZ2VEYXRhKHRoaXMsdHIuZS5jYy5QaWN0dXJlU25hcHNob3QuSG93VG9FbmFibGVQaWN0dXJlRGVidWdnaW5nKCkpKTtyZXR1cm47fQppZighdGhpcy5sYXllclJlY3RfLndpZHRofHwhdGhpcy5sYXllclJlY3RfLmhlaWdodCl7cmFzdGVyQ29tcGxldGVDYWxsYmFjayhuZXcgdHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEodGhpcyxudWxsKSk7cmV0dXJuO30KY29uc3QgcmFzdGVyPXdpbmRvdy5jaHJvbWUuc2tpYUJlbmNobWFya2luZy5yYXN0ZXJpemUoe3NrcDY0OnRoaXMuc2twNjRfLHBhcmFtczp7bGF5ZXJfcmVjdDp0aGlzLmxheWVyUmVjdF8udG9BcnJheSgpfX0se3N0b3A6cGFyYW1zLnN0b3BJbmRleD09PXVuZGVmaW5lZD8tMTpwYXJhbXMuc3RvcEluZGV4LG92ZXJkcmF3OiEhcGFyYW1zLnNob3dPdmVyZHJhdyxwYXJhbXM6e319KTtpZihyYXN0ZXIpe2NvbnN0IGNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtjb25zdCBjdHg9Y2FudmFzLmdldENvbnRleHQoJzJkJyk7Y2FudmFzLndpZHRoPXJhc3Rlci53aWR0aDtjYW52YXMuaGVpZ2h0PXJhc3Rlci5oZWlnaHQ7Y29uc3QgaW1hZ2VEYXRhPWN0eC5jcmVhdGVJbWFnZURhdGEocmFzdGVyLndpZHRoLHJhc3Rlci5oZWlnaHQpO2ltYWdlRGF0YS5kYXRhLnNldChuZXcgVWludDhDbGFtcGVkQXJyYXkocmFzdGVyLmRhdGEpKTtyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKG5ldyB0ci5lLmNjLlBpY3R1cmVBc0ltYWdlRGF0YSh0aGlzLGltYWdlRGF0YSkpO31lbHNle2NvbnN0IGVycm9yPSdGYWlsZWQgdG8gcmFzdGVyaXplIHBpY3R1cmUuICcrJ1lvdXIgcmVjb3JkaW5nIG1heSBiZSBmcm9tIGFuIG9sZCBDaHJvbWUgdmVyc2lvbi4gJysnVGhlIFNrUGljdHVyZSBmb3JtYXQgaXMgbm90IGJhY2t3YXJkIGNvbXBhdGlibGUuJztyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKG5ldyB0ci5lLmNjLlBpY3R1cmVBc0ltYWdlRGF0YSh0aGlzLGVycm9yKSk7fX19O2Z1bmN0aW9uIExheWVyZWRQaWN0dXJlKHBpY3R1cmVzKXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVNpbXBsZSgpO3RoaXMucGljdHVyZXNfPXBpY3R1cmVzO3RoaXMubGF5ZXJSZWN0Xz11bmRlZmluZWQ7fQpMYXllcmVkUGljdHVyZS5wcm90b3R5cGU9e19fcHJvdG9fXzpQaWN0dXJlLnByb3RvdHlwZSxnZXQgY2FuU2F2ZSgpe3JldHVybiBmYWxzZTt9LGdldCB0eXBlTmFtZSgpe3JldHVybidjYzo6TGF5ZXJlZFBpY3R1cmUnO30sZ2V0IGxheWVyUmVjdCgpe2lmKHRoaXMubGF5ZXJSZWN0XyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMubGF5ZXJSZWN0Xzt9CnRoaXMubGF5ZXJSZWN0Xz17eDowLHk6MCx3aWR0aDowLGhlaWdodDowfTtmb3IobGV0IGk9MDtpPHRoaXMucGljdHVyZXNfLmxlbmd0aDsrK2kpe2NvbnN0IHJlY3Q9dGhpcy5waWN0dXJlc19baV0ubGF5ZXJSZWN0O3RoaXMubGF5ZXJSZWN0Xy54PU1hdGgubWluKHRoaXMubGF5ZXJSZWN0Xy54LHJlY3QueCk7dGhpcy5sYXllclJlY3RfLnk9TWF0aC5taW4odGhpcy5sYXllclJlY3RfLnkscmVjdC55KTt0aGlzLmxheWVyUmVjdF8ud2lkdGg9TWF0aC5tYXgodGhpcy5sYXllclJlY3RfLndpZHRoLHJlY3QueCtyZWN0LndpZHRoKTt0aGlzLmxheWVyUmVjdF8uaGVpZ2h0PU1hdGgubWF4KHRoaXMubGF5ZXJSZWN0Xy5oZWlnaHQscmVjdC55K3JlY3QuaGVpZ2h0KTt9CnJldHVybiB0aGlzLmxheWVyUmVjdF87fSxnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sZ2V0QmFzZTY0U2twRGF0YSgpe3Rocm93IG5ldyBFcnJvcignTm90IGF2YWlsYWJsZSB3aXRoIGEgTGF5ZXJlZFBpY3R1cmUuJyk7fSxnZXRPcHMoKXtsZXQgb3BzPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5waWN0dXJlc18ubGVuZ3RoOysraSl7b3BzPW9wcy5jb25jYXQodGhpcy5waWN0dXJlc19baV0uZ2V0T3BzKCkpO30KcmV0dXJuIG9wczt9LGdldE9wVGltaW5ncygpe2NvbnN0IG9wVGltaW5ncz10aGlzLnBpY3R1cmVzX1swXS5nZXRPcFRpbWluZ3MoKTtmb3IobGV0IGk9MTtpPHRoaXMucGljdHVyZXNfLmxlbmd0aDsrK2kpe2NvbnN0IHRpbWluZ3M9dGhpcy5waWN0dXJlc19baV0uZ2V0T3BUaW1pbmdzKCk7b3BUaW1pbmdzLmNtZF90aW1lcz1vcFRpbWluZ3MuY21kX3RpbWVzLmNvbmNhdCh0aW1pbmdzLmNtZF90aW1lcyk7b3BUaW1pbmdzLnRvdGFsX3RpbWUrPXRpbWluZ3MudG90YWxfdGltZTt9CnJldHVybiBvcFRpbWluZ3M7fSx0YWdPcHNXaXRoVGltaW5ncyhvcHMpe2NvbnN0IG9wVGltaW5ncz1bXTtmb3IobGV0IGl0ZXJhdGlvbj0wO2l0ZXJhdGlvbjxPUFNfVElNSU5HX0lURVJBVElPTlM7aXRlcmF0aW9uKyspe29wVGltaW5nc1tpdGVyYXRpb25dPXRoaXMuZ2V0T3BUaW1pbmdzKCk7aWYoIW9wVGltaW5nc1tpdGVyYXRpb25dfHwhb3BUaW1pbmdzW2l0ZXJhdGlvbl0uY21kX3RpbWVzKXtyZXR1cm4gb3BzO319CmZvcihsZXQgb3BJbmRleD0wO29wSW5kZXg8b3BzLmxlbmd0aDtvcEluZGV4Kyspe2xldCBtaW49TnVtYmVyLk1BWF9WQUxVRTtmb3IobGV0IGk9MDtpPE9QU19USU1JTkdfSVRFUkFUSU9OUztpKyspe21pbj1NYXRoLm1pbihtaW4sb3BUaW1pbmdzW2ldLmNtZF90aW1lc1tvcEluZGV4XSk7fQpvcHNbb3BJbmRleF0uY21kX3RpbWU9bWluO30KcmV0dXJuIG9wczt9LHJhc3Rlcml6ZShwYXJhbXMscmFzdGVyQ29tcGxldGVDYWxsYmFjayl7dGhpcy5waWN0dXJlc0FzSW1hZ2VEYXRhXz1bXTtjb25zdCByYXN0ZXJDYWxsYmFjaz1mdW5jdGlvbihwaWN0dXJlQXNJbWFnZURhdGEpe3RoaXMucGljdHVyZXNBc0ltYWdlRGF0YV8ucHVzaChwaWN0dXJlQXNJbWFnZURhdGEpO2lmKHRoaXMucGljdHVyZXNBc0ltYWdlRGF0YV8ubGVuZ3RoIT09dGhpcy5waWN0dXJlc18ubGVuZ3RoKXtyZXR1cm47fQpjb25zdCBjYW52YXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7Y29uc3QgY3R4PWNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO2NhbnZhcy53aWR0aD10aGlzLmxheWVyUmVjdC53aWR0aDtjYW52YXMuaGVpZ2h0PXRoaXMubGF5ZXJSZWN0LmhlaWdodDtmb3IobGV0IGk9MDtpPHRoaXMucGljdHVyZXNBc0ltYWdlRGF0YV8ubGVuZ3RoOysraSl7Y3R4LnB1dEltYWdlRGF0YSh0aGlzLnBpY3R1cmVzQXNJbWFnZURhdGFfW2ldLmltYWdlRGF0YSx0aGlzLnBpY3R1cmVzX1tpXS5sYXllclJlY3QueCx0aGlzLnBpY3R1cmVzX1tpXS5sYXllclJlY3QueSk7fQp0aGlzLnBpY3R1cmVzQXNJbWFnZURhdGFfPVtdO3Jhc3RlckNvbXBsZXRlQ2FsbGJhY2sobmV3IHRyLmUuY2MuUGljdHVyZUFzSW1hZ2VEYXRhKHRoaXMsY3R4LmdldEltYWdlRGF0YSh0aGlzLmxheWVyUmVjdC54LHRoaXMubGF5ZXJSZWN0LnksdGhpcy5sYXllclJlY3Qud2lkdGgsdGhpcy5sYXllclJlY3QuaGVpZ2h0KSkpO30uYmluZCh0aGlzKTtmb3IobGV0IGk9MDtpPHRoaXMucGljdHVyZXNfLmxlbmd0aDsrK2kpe3RoaXMucGljdHVyZXNfW2ldLnJhc3Rlcml6ZShwYXJhbXMscmFzdGVyQ2FsbGJhY2spO319fTtmdW5jdGlvbiBQaWN0dXJlU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpQaWN0dXJlU25hcHNob3QuSGFzU2tpYUJlbmNobWFya2luZz1mdW5jdGlvbigpe3JldHVybiB0ci5pc0V4cG9ydGVkKCdjaHJvbWUuc2tpYUJlbmNobWFya2luZycpO307UGljdHVyZVNuYXBzaG90LkNhblJhc3Rlcml6ZT1mdW5jdGlvbigpe2lmKCFQaWN0dXJlU25hcHNob3QuSGFzU2tpYUJlbmNobWFya2luZygpKXtyZXR1cm4gZmFsc2U7fQppZighd2luZG93LmNocm9tZS5za2lhQmVuY2htYXJraW5nLnJhc3Rlcml6ZSl7cmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fTtQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BzPWZ1bmN0aW9uKCl7aWYoIVBpY3R1cmVTbmFwc2hvdC5IYXNTa2lhQmVuY2htYXJraW5nKCkpe3JldHVybiBmYWxzZTt9CmlmKCF3aW5kb3cuY2hyb21lLnNraWFCZW5jaG1hcmtpbmcuZ2V0T3BzKXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9O1BpY3R1cmVTbmFwc2hvdC5DYW5HZXRPcFRpbWluZ3M9ZnVuY3Rpb24oKXtpZighUGljdHVyZVNuYXBzaG90Lkhhc1NraWFCZW5jaG1hcmtpbmcoKSl7cmV0dXJuIGZhbHNlO30KaWYoIXdpbmRvdy5jaHJvbWUuc2tpYUJlbmNobWFya2luZy5nZXRPcFRpbWluZ3Mpe3JldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO307UGljdHVyZVNuYXBzaG90LkNhbkdldEluZm89ZnVuY3Rpb24oKXtpZighUGljdHVyZVNuYXBzaG90Lkhhc1NraWFCZW5jaG1hcmtpbmcoKSl7cmV0dXJuIGZhbHNlO30KaWYoIXdpbmRvdy5jaHJvbWUuc2tpYUJlbmNobWFya2luZy5nZXRJbmZvKXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9O1BpY3R1cmVTbmFwc2hvdC5Ib3dUb0VuYWJsZVBpY3R1cmVEZWJ1Z2dpbmc9ZnVuY3Rpb24oKXtpZih0ci5pc0hlYWRsZXNzKXtyZXR1cm4nUGljdHVyZXMgb25seSB3b3JrIGluIGNocm9tZSc7fQpjb25zdCB1c3VhbFJlYXNvbj1bJ0ZvciBwaWN0dXJlcyB0byBzaG93IHVwLCB0aGUgQ2hyb21lIGJyb3dzZXIgZGlzcGxheWluZyB0aGUgdHJhY2UgJywnbmVlZHMgdG8gYmUgcnVubmluZyB3aXRoIC0tZW5hYmxlLXNraWEtYmVuY2htYXJraW5nLiBQbGVhc2UgcmVzdGFydCAnLCdjaHJvbWUgd2l0aCB0aGlzIGZsYWcgYW5kIHRyeSBsb2FkaW5nIHRoZSB0cmFjZSBhZ2Fpbi4nXS5qb2luKCcnKTtpZighUGljdHVyZVNuYXBzaG90Lkhhc1NraWFCZW5jaG1hcmtpbmcoKSl7cmV0dXJuIHVzdWFsUmVhc29uO30KaWYoIVBpY3R1cmVTbmFwc2hvdC5DYW5SYXN0ZXJpemUoKSl7cmV0dXJuJ1lvdXIgY2hyb21lIGlzIG9sZDogY2hyb21lLnNraXBCZW5jaG1hcmtpbmcucmFzdGVyaXplIG5vdCBmb3VuZCc7fQppZighUGljdHVyZVNuYXBzaG90LkNhbkdldE9wcygpKXtyZXR1cm4nWW91ciBjaHJvbWUgaXMgb2xkOiBjaHJvbWUuc2tpYUJlbmNobWFya2luZy5nZXRPcHMgbm90IGZvdW5kJzt9CmlmKCFQaWN0dXJlU25hcHNob3QuQ2FuR2V0T3BUaW1pbmdzKCkpe3JldHVybidZb3VyIGNocm9tZSBpcyBvbGQ6ICcrJ2Nocm9tZS5za2lhQmVuY2htYXJraW5nLmdldE9wVGltaW5ncyBub3QgZm91bmQnO30KaWYoIVBpY3R1cmVTbmFwc2hvdC5DYW5HZXRJbmZvKCkpe3JldHVybidZb3VyIGNocm9tZSBpcyBvbGQ6IGNocm9tZS5za2lhQmVuY2htYXJraW5nLmdldEluZm8gbm90IGZvdW5kJzt9CnJldHVybiB1bmRlZmluZWQ7fTtQaWN0dXJlU25hcHNob3QuQ2FuRGVidWdQaWN0dXJlPWZ1bmN0aW9uKCl7cmV0dXJuIFBpY3R1cmVTbmFwc2hvdC5Ib3dUb0VuYWJsZVBpY3R1cmVEZWJ1Z2dpbmcoKT09PXVuZGVmaW5lZDt9O1BpY3R1cmVTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RTbmFwc2hvdC5wcm90b3R5cGUscHJlSW5pdGlhbGl6ZSgpe3RyLmUuY2MucHJlSW5pdGlhbGl6ZU9iamVjdCh0aGlzKTt0aGlzLnJhc3RlclJlc3VsdF89dW5kZWZpbmVkO30saW5pdGlhbGl6ZSgpe2lmKHRoaXMuYXJncy5hbGlhcyl7dGhpcy5hcmdzPXRoaXMuYXJncy5hbGlhcy5hcmdzO30KaWYoIXRoaXMuYXJncy5wYXJhbXMubGF5ZXJSZWN0KXt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgbGF5ZXIgcmVjdCcpO30KdGhpcy5sYXllclJlY3RfPXRoaXMuYXJncy5wYXJhbXMubGF5ZXJSZWN0O3RoaXMucGljdHVyZV89bmV3IFBpY3R1cmUodGhpcy5hcmdzLnNrcDY0LHRoaXMuYXJncy5wYXJhbXMubGF5ZXJSZWN0KTt9LHNldCBwaWN0dXJlKHBpY3R1cmUpe3RoaXMucGljdHVyZV89cGljdHVyZTt9LGdldCBjYW5TYXZlKCl7cmV0dXJuIHRoaXMucGljdHVyZV8uY2FuU2F2ZTt9LGdldCBsYXllclJlY3QoKXtyZXR1cm4gdGhpcy5sYXllclJlY3RfP3RoaXMubGF5ZXJSZWN0Xzp0aGlzLnBpY3R1cmVfLmxheWVyUmVjdDt9LGdldCBndWlkKCl7cmV0dXJuIHRoaXMucGljdHVyZV8uZ3VpZDt9LGdldEJhc2U2NFNrcERhdGEoKXtyZXR1cm4gdGhpcy5waWN0dXJlXy5nZXRCYXNlNjRTa3BEYXRhKCk7fSxnZXRPcHMoKXtyZXR1cm4gdGhpcy5waWN0dXJlXy5nZXRPcHMoKTt9LGdldE9wVGltaW5ncygpe3JldHVybiB0aGlzLnBpY3R1cmVfLmdldE9wVGltaW5ncygpO30sdGFnT3BzV2l0aFRpbWluZ3Mob3BzKXtyZXR1cm4gdGhpcy5waWN0dXJlXy50YWdPcHNXaXRoVGltaW5ncyhvcHMpO30scmFzdGVyaXplKHBhcmFtcyxyYXN0ZXJDb21wbGV0ZUNhbGxiYWNrKXt0aGlzLnBpY3R1cmVfLnJhc3Rlcml6ZShwYXJhbXMscmFzdGVyQ29tcGxldGVDYWxsYmFjayk7fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoUGljdHVyZVNuYXBzaG90LHt0eXBlTmFtZXM6WydjYzo6UGljdHVyZSddfSk7cmV0dXJue1BpY3R1cmVTbmFwc2hvdCxQaWN0dXJlLExheWVyZWRQaWN0dXJlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIERpc3BsYXlJdGVtTGlzdChza3A2NCxsYXllclJlY3Qpe3RyLmUuY2MuUGljdHVyZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpEaXNwbGF5SXRlbUxpc3QucHJvdG90eXBlPXtfX3Byb3RvX186dHIuZS5jYy5QaWN0dXJlLnByb3RvdHlwZX07ZnVuY3Rpb24gRGlzcGxheUl0ZW1MaXN0U25hcHNob3QoKXt0ci5lLmNjLlBpY3R1cmVTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpEaXNwbGF5SXRlbUxpc3RTbmFwc2hvdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLmNjLlBpY3R1cmVTbmFwc2hvdC5wcm90b3R5cGUsaW5pdGlhbGl6ZSgpe3RyLmUuY2MuUGljdHVyZVNuYXBzaG90LnByb3RvdHlwZS5pbml0aWFsaXplLmNhbGwodGhpcyk7dGhpcy5kaXNwbGF5SXRlbXNfPXRoaXMuYXJncy5wYXJhbXMuaXRlbXM7fSxnZXQgaXRlbXMoKXtyZXR1cm4gdGhpcy5kaXNwbGF5SXRlbXNfO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKERpc3BsYXlJdGVtTGlzdFNuYXBzaG90LHt0eXBlTmFtZXM6WydjYzo6RGlzcGxheUl0ZW1MaXN0J119KTtyZXR1cm57RGlzcGxheUl0ZW1MaXN0U25hcHNob3QsRGlzcGxheUl0ZW1MaXN0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQkJveDIoKXt0aGlzLmlzRW1wdHlfPXRydWU7dGhpcy5taW5fPXVuZGVmaW5lZDt0aGlzLm1heF89dW5kZWZpbmVkO30KQkJveDIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxyZXNldCgpe3RoaXMuaXNFbXB0eV89dHJ1ZTt0aGlzLm1pbl89dW5kZWZpbmVkO3RoaXMubWF4Xz11bmRlZmluZWQ7fSxnZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLmlzRW1wdHlfO30sYWRkQkJveDIoYmJveDIpe2lmKGJib3gyLmlzRW1wdHkpcmV0dXJuO3RoaXMuYWRkVmVjMihiYm94Mi5taW5fKTt0aGlzLmFkZFZlYzIoYmJveDIubWF4Xyk7fSxjbG9uZSgpe2NvbnN0IGJib3g9bmV3IEJCb3gyKCk7YmJveC5hZGRCQm94Mih0aGlzKTtyZXR1cm4gYmJveDt9LGFkZFhZKHgseSl7aWYodGhpcy5pc0VtcHR5Xyl7dGhpcy5tYXhfPXZlYzIuY3JlYXRlKCk7dGhpcy5taW5fPXZlYzIuY3JlYXRlKCk7dmVjMi5zZXQodGhpcy5tYXhfLHgseSk7dmVjMi5zZXQodGhpcy5taW5fLHgseSk7dGhpcy5pc0VtcHR5Xz1mYWxzZTtyZXR1cm47fQp0aGlzLm1heF9bMF09TWF0aC5tYXgodGhpcy5tYXhfWzBdLHgpO3RoaXMubWF4X1sxXT1NYXRoLm1heCh0aGlzLm1heF9bMV0seSk7dGhpcy5taW5fWzBdPU1hdGgubWluKHRoaXMubWluX1swXSx4KTt0aGlzLm1pbl9bMV09TWF0aC5taW4odGhpcy5taW5fWzFdLHkpO30sYWRkVmVjMih2YWx1ZSl7aWYodGhpcy5pc0VtcHR5Xyl7dGhpcy5tYXhfPXZlYzIuY3JlYXRlKCk7dGhpcy5taW5fPXZlYzIuY3JlYXRlKCk7dmVjMi5zZXQodGhpcy5tYXhfLHZhbHVlWzBdLHZhbHVlWzFdKTt2ZWMyLnNldCh0aGlzLm1pbl8sdmFsdWVbMF0sdmFsdWVbMV0pO3RoaXMuaXNFbXB0eV89ZmFsc2U7cmV0dXJuO30KdGhpcy5tYXhfWzBdPU1hdGgubWF4KHRoaXMubWF4X1swXSx2YWx1ZVswXSk7dGhpcy5tYXhfWzFdPU1hdGgubWF4KHRoaXMubWF4X1sxXSx2YWx1ZVsxXSk7dGhpcy5taW5fWzBdPU1hdGgubWluKHRoaXMubWluX1swXSx2YWx1ZVswXSk7dGhpcy5taW5fWzFdPU1hdGgubWluKHRoaXMubWluX1sxXSx2YWx1ZVsxXSk7fSxhZGRRdWFkKHF1YWQpe3RoaXMuYWRkVmVjMihxdWFkLnAxKTt0aGlzLmFkZFZlYzIocXVhZC5wMik7dGhpcy5hZGRWZWMyKHF1YWQucDMpO3RoaXMuYWRkVmVjMihxdWFkLnA0KTt9LGdldCBtaW5WZWMyKCl7aWYodGhpcy5pc0VtcHR5XylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLm1pbl87fSxnZXQgbWF4VmVjMigpe2lmKHRoaXMuaXNFbXB0eV8pcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5tYXhfO30sZ2V0IHNpemVBc1ZlYzIoKXtpZih0aGlzLmlzRW1wdHlfKXt0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IEJCb3gyIGhhcyBubyBzaXplJyk7fQpjb25zdCBzaXplPXZlYzIuY3JlYXRlKCk7dmVjMi5zdWJ0cmFjdChzaXplLHRoaXMubWF4Xyx0aGlzLm1pbl8pO3JldHVybiBzaXplO30sZ2V0IHNpemUoKXtpZih0aGlzLmlzRW1wdHlfKXt0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IEJCb3gyIGhhcyBubyBzaXplJyk7fQpyZXR1cm57d2lkdGg6dGhpcy5tYXhfWzBdLXRoaXMubWluX1swXSxoZWlnaHQ6dGhpcy5tYXhfWzFdLXRoaXMubWluX1sxXX07fSxnZXQgd2lkdGgoKXtpZih0aGlzLmlzRW1wdHlfKXt0aHJvdyBuZXcgRXJyb3IoJ0VtcHR5IEJCb3gyIGhhcyBubyB3aWR0aCcpO30KcmV0dXJuIHRoaXMubWF4X1swXS10aGlzLm1pbl9bMF07fSxnZXQgaGVpZ2h0KCl7aWYodGhpcy5pc0VtcHR5Xyl7dGhyb3cgbmV3IEVycm9yKCdFbXB0eSBCQm94MiBoYXMgbm8gd2lkdGgnKTt9CnJldHVybiB0aGlzLm1heF9bMV0tdGhpcy5taW5fWzFdO30sdG9TdHJpbmcoKXtpZih0aGlzLmlzRW1wdHlfKXJldHVybidlbXB0eSc7cmV0dXJuJ21pbj0oJyt0aGlzLm1pbl9bMF0rJywnK3RoaXMubWluX1sxXSsnKSAnKydtYXg9KCcrdGhpcy5tYXhfWzBdKycsJyt0aGlzLm1heF9bMV0rJyknO30sYXNSZWN0KCl7cmV0dXJuIHRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHRoaXMubWluX1swXSx0aGlzLm1pbl9bMV0sdGhpcy5tYXhfWzBdLXRoaXMubWluX1swXSx0aGlzLm1heF9bMV0tdGhpcy5taW5fWzFdKTt9fTtyZXR1cm57QkJveDIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgY29uc3RhbnRzPXt9O2NvbnN0YW50cy5BQ1RJVkVfVFJFRT0wO2NvbnN0YW50cy5QRU5ESU5HX1RSRUU9MTtjb25zdGFudHMuSElHSF9QUklPUklUWV9CSU49MDtjb25zdGFudHMuTE9XX1BSSU9SSVRZX0JJTj0xO2NvbnN0YW50cy5TRU5EX0JFR0lOX0ZSQU1FX0VWRU5UPSdUaHJlYWRQcm94eTo6U2NoZWR1bGVkQWN0aW9uU2VuZEJlZ2luTWFpbkZyYW1lJztjb25zdGFudHMuQkVHSU5fTUFJTl9GUkFNRV9FVkVOVD0nVGhyZWFkUHJveHk6OkJlZ2luTWFpbkZyYW1lJztyZXR1cm57Y29uc3RhbnRzfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmVnaW9uKCl7dGhpcy5yZWN0cz1bXTt9ClJlZ2lvbi5mcm9tQXJyYXk9ZnVuY3Rpb24oYXJyYXkpe2lmKGFycmF5Lmxlbmd0aCU0IT09MCl7dGhyb3cgbmV3IEVycm9yKCdBcnJheSBtdXN0IGNvbnNpc3QgYmUgYSBtdWx0aXBsZSBvZiA0IGluIGxlbmd0aCcpO30KY29uc3Qgcj1uZXcgUmVnaW9uKCk7Zm9yKGxldCBpPTA7aTxhcnJheS5sZW5ndGg7aSs9NCl7ci5yZWN0cy5wdXNoKHRyLmIubWF0aC5SZWN0LmZyb21YWVdIKGFycmF5W2ldLGFycmF5W2krMV0sYXJyYXlbaSsyXSxhcnJheVtpKzNdKSk7fQpyZXR1cm4gcjt9O1JlZ2lvbi5mcm9tQXJyYXlPclVuZGVmaW5lZD1mdW5jdGlvbihhcnJheSl7aWYoYXJyYXk9PT11bmRlZmluZWQpcmV0dXJuIG5ldyBSZWdpb24oKTtyZXR1cm4gUmVnaW9uLmZyb21BcnJheShhcnJheSk7fTtSZWdpb24ucHJvdG90eXBlPXtfX3Byb3RvX186UmVnaW9uLnByb3RvdHlwZSxyZWN0SW50ZXJzZWN0cyhyKXtmb3IobGV0IGk9MDtpPHRoaXMucmVjdHMubGVuZ3RoO2krKyl7aWYodGhpcy5yZWN0c1tpXS5pbnRlcnNlY3RzKHIpKXJldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30sYWRkUmVjdChyKXt0aGlzLnJlY3RzLnB1c2gocik7fX07cmV0dXJue1JlZ2lvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBUaWxlQ292ZXJhZ2VSZWN0KHJlY3QsdGlsZSl7dGhpcy5nZW9tZXRyeVJlY3Q9cmVjdDt0aGlzLnRpbGU9dGlsZTt9CnJldHVybntUaWxlQ292ZXJhZ2VSZWN0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBMYXllckltcGxTbmFwc2hvdCgpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9CkxheWVySW1wbFNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdFNuYXBzaG90LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7dHIuZS5jYy5wcmVJbml0aWFsaXplT2JqZWN0KHRoaXMpO3RoaXMubGF5ZXJUcmVlSW1wbF89dW5kZWZpbmVkO3RoaXMucGFyZW50TGF5ZXI9dW5kZWZpbmVkO30saW5pdGlhbGl6ZSgpe3RoaXMuaW52YWxpZGF0aW9uPW5ldyB0ci5lLmNjLlJlZ2lvbigpO3RoaXMudW5yZWNvcmRlZFJlZ2lvbj1uZXcgdHIuZS5jYy5SZWdpb24oKTt0aGlzLnBpY3R1cmVzPVtdO3RyLmUuY2MubW92ZVJlcXVpcmVkRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydsYXllcklkJywnbGF5ZXJRdWFkJ10pO3RyLmUuY2MubW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydjaGlsZHJlbicsJ21hc2tMYXllcicsJ3JlcGxpY2FMYXllcicsJ2lkZWFsQ29udGVudHNTY2FsZScsJ2dlb21ldHJ5Q29udGVudHNTY2FsZScsJ2xheW91dFJlY3RzJywndXNpbmdHcHVSYXN0ZXJpemF0aW9uJ10pO3RoaXMuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzPXRoaXMuYXJncy5ncHVNZW1vcnlVc2FnZTt0aGlzLmJvdW5kcz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSCgwLDAsdGhpcy5hcmdzLmJvdW5kcy53aWR0aCx0aGlzLmFyZ3MuYm91bmRzLmhlaWdodCk7aWYodGhpcy5hcmdzLmFuaW1hdGlvbkJvdW5kcyl7dGhpcy5hbmltYXRpb25Cb3VuZHNSZWN0PXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKHRoaXMuYXJncy5hbmltYXRpb25Cb3VuZHNbMF0sdGhpcy5hcmdzLmFuaW1hdGlvbkJvdW5kc1sxXSx0aGlzLmFyZ3MuYW5pbWF0aW9uQm91bmRzWzNdLHRoaXMuYXJncy5hbmltYXRpb25Cb3VuZHNbNF0pO30KaWYodGhpcy5jaGlsZHJlbil7Zm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkcmVuLmxlbmd0aDtpKyspe3RoaXMuY2hpbGRyZW5baV0ucGFyZW50TGF5ZXI9dGhpczt9fQppZih0aGlzLm1hc2tMYXllcil7dGhpcy5tYXNrTGF5ZXIucGFyZW50TGF5ZXI9dGhpczt9CmlmKHRoaXMucmVwbGljYUxheWVyKXt0aGlzLnJlcGxpY2FMYXllci5wYXJlbnRMYXllcj10aGlzO30KaWYoIXRoaXMuZ2VvbWV0cnlDb250ZW50c1NjYWxlKXt0aGlzLmdlb21ldHJ5Q29udGVudHNTY2FsZT0xLjA7fQppZighdGhpcy5pZGVhbENvbnRlbnRzU2NhbGUpe3RoaXMuaWRlYWxDb250ZW50c1NjYWxlPTEuMDt9CnRoaXMudG91Y2hFdmVudEhhbmRsZXJSZWdpb249dHIuZS5jYy5SZWdpb24uZnJvbUFycmF5T3JVbmRlZmluZWQodGhpcy5hcmdzLnRvdWNoRXZlbnRIYW5kbGVyUmVnaW9uKTt0aGlzLndoZWVsRXZlbnRIYW5kbGVyUmVnaW9uPXRyLmUuY2MuUmVnaW9uLmZyb21BcnJheU9yVW5kZWZpbmVkKHRoaXMuYXJncy53aGVlbEV2ZW50SGFuZGxlclJlZ2lvbik7dGhpcy5ub25GYXN0U2Nyb2xsYWJsZVJlZ2lvbj10ci5lLmNjLlJlZ2lvbi5mcm9tQXJyYXlPclVuZGVmaW5lZCh0aGlzLmFyZ3Mubm9uRmFzdFNjcm9sbGFibGVSZWdpb24pO30sZ2V0IGxheWVyVHJlZUltcGwoKXtpZih0aGlzLmxheWVyVHJlZUltcGxfKXtyZXR1cm4gdGhpcy5sYXllclRyZWVJbXBsXzt9CmlmKHRoaXMucGFyZW50TGF5ZXIpe3JldHVybiB0aGlzLnBhcmVudExheWVyLmxheWVyVHJlZUltcGw7fQpyZXR1cm4gdW5kZWZpbmVkO30sc2V0IGxheWVyVHJlZUltcGwobGF5ZXJUcmVlSW1wbCl7dGhpcy5sYXllclRyZWVJbXBsXz1sYXllclRyZWVJbXBsO30sZ2V0IGFjdGl2ZUxheWVyKCl7aWYodGhpcy5sYXllclRyZWVJbXBsLndoaWNoVHJlZT09PWNvbnN0YW50cy5BQ1RJVkVfVFJFRSl7cmV0dXJuIHRoaXM7fQpjb25zdCBhY3RpdmVUcmVlPXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5hY3RpdmVUcmVlO3JldHVybiBhY3RpdmVUcmVlLmZpbmRMYXllcldpdGhJZCh0aGlzLmxheWVySWQpO30sZ2V0IHBlbmRpbmdMYXllcigpe2lmKHRoaXMubGF5ZXJUcmVlSW1wbC53aGljaFRyZWU9PT1jb25zdGFudHMuUEVORElOR19UUkVFKXtyZXR1cm4gdGhpczt9CmNvbnN0IHBlbmRpbmdUcmVlPXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5wZW5kaW5nVHJlZTtyZXR1cm4gcGVuZGluZ1RyZWUuZmluZExheWVyV2l0aElkKHRoaXMubGF5ZXJJZCk7fX07ZnVuY3Rpb24gUGljdHVyZUxheWVySW1wbFNuYXBzaG90KCl7TGF5ZXJJbXBsU25hcHNob3QuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KUGljdHVyZUxheWVySW1wbFNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOkxheWVySW1wbFNuYXBzaG90LnByb3RvdHlwZSxpbml0aWFsaXplKCl7TGF5ZXJJbXBsU25hcHNob3QucHJvdG90eXBlLmluaXRpYWxpemUuY2FsbCh0aGlzKTtpZih0aGlzLmFyZ3MuZGVidWdJbmZvKXtmb3IoY29uc3QgaSBpbiB0aGlzLmFyZ3MuZGVidWdJbmZvKXt0aGlzLmFyZ3NbaV09dGhpcy5hcmdzLmRlYnVnSW5mb1tpXTt9CmRlbGV0ZSB0aGlzLmFyZ3MuZGVidWdJbmZvO30KaWYodGhpcy5hcmdzLmFubm90YXRlZEludmFsaWRhdGlvblJlY3RzKXt0aGlzLmludmFsaWRhdGlvbj1uZXcgdHIuZS5jYy5SZWdpb24oKTtmb3IoY29uc3QgYW5ub3RhdGVkUmVjdCBvZiB0aGlzLmFyZ3MuYW5ub3RhdGVkSW52YWxpZGF0aW9uUmVjdHMpe2NvbnN0IHJlY3Q9YW5ub3RhdGVkUmVjdC5nZW9tZXRyeVJlY3Q7cmVjdC5yZWFzb249YW5ub3RhdGVkUmVjdC5yZWFzb247cmVjdC5jbGllbnQ9YW5ub3RhdGVkUmVjdC5jbGllbnQ7dGhpcy5pbnZhbGlkYXRpb24uYWRkUmVjdChyZWN0KTt9CmRlbGV0ZSB0aGlzLmFyZ3MuYW5ub3RhdGVkSW52YWxpZGF0aW9uUmVjdHM7fWVsc2UgaWYodGhpcy5hcmdzLmludmFsaWRhdGlvbil7dGhpcy5pbnZhbGlkYXRpb249dHIuZS5jYy5SZWdpb24uZnJvbUFycmF5KHRoaXMuYXJncy5pbnZhbGlkYXRpb24pO30KZGVsZXRlIHRoaXMuYXJncy5pbnZhbGlkYXRpb247aWYodGhpcy5hcmdzLnVucmVjb3JkZWRSZWdpb24pe3RoaXMudW5yZWNvcmRlZFJlZ2lvbj10ci5lLmNjLlJlZ2lvbi5mcm9tQXJyYXkodGhpcy5hcmdzLnVucmVjb3JkZWRSZWdpb24pO2RlbGV0ZSB0aGlzLmFyZ3MudW5yZWNvcmRlZFJlZ2lvbjt9CmlmKHRoaXMuYXJncy5waWN0dXJlcyl7dGhpcy5waWN0dXJlcz10aGlzLmFyZ3MucGljdHVyZXM7dGhpcy5waWN0dXJlcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEudHMtYi50czt9KTt9CnRoaXMudGlsZUNvdmVyYWdlUmVjdHM9W107aWYodGhpcy5hcmdzLmNvdmVyYWdlVGlsZXMpe2ZvcihsZXQgaT0wO2k8dGhpcy5hcmdzLmNvdmVyYWdlVGlsZXMubGVuZ3RoOysraSl7Y29uc3QgcmVjdD10aGlzLmFyZ3MuY292ZXJhZ2VUaWxlc1tpXS5nZW9tZXRyeVJlY3Quc2NhbGUodGhpcy5pZGVhbENvbnRlbnRzU2NhbGUpO2NvbnN0IHRpbGU9dGhpcy5hcmdzLmNvdmVyYWdlVGlsZXNbaV0udGlsZTt0aGlzLnRpbGVDb3ZlcmFnZVJlY3RzLnB1c2gobmV3IHRyLmUuY2MuVGlsZUNvdmVyYWdlUmVjdChyZWN0LHRpbGUpKTt9CmRlbGV0ZSB0aGlzLmFyZ3MuY292ZXJhZ2VUaWxlczt9fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoUGljdHVyZUxheWVySW1wbFNuYXBzaG90LHt0eXBlTmFtZTonY2M6OlBpY3R1cmVMYXllckltcGwnfSk7T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoTGF5ZXJJbXBsU25hcHNob3Qse3R5cGVOYW1lczpbJ2NjOjpMYXllckltcGwnLCdjYzo6RGVsZWdhdGVkUmVuZGVyZXJMYXllckltcGwnLCdjYzo6SGVhZHNVcERpc3BsYXlMYXllckltcGwnLCdjYzo6SU9TdXJmYWNlTGF5ZXJJbXBsJywnY2M6Ok5pbmVQYXRjaExheWVySW1wbCcsJ2NjOjpQaWN0dXJlSW1hZ2VMYXllckltcGwnLCdjYzo6U2Nyb2xsYmFyTGF5ZXJJbXBsJywnY2M6OlNvbGlkQ29sb3JMYXllckltcGwnLCdjYzo6U29saWRDb2xvclNjcm9sbGJhckxheWVySW1wbCcsJ2NjOjpTdXJmYWNlTGF5ZXJJbXBsJywnY2M6OlRleHR1cmVMYXllckltcGwnLCdjYzo6VGlsZWRMYXllckltcGwnLCdjYzo6VmlkZW9MYXllckltcGwnLCdjYzo6UGFpbnRlZFNjcm9sbGJhckxheWVySW1wbCcsJ0NsYW5rUGF0Y2hMYXllcicsJ1RhYkJvcmRlckxheWVyJywnQ291bnRlckxheWVyJ119KTtyZXR1cm57TGF5ZXJJbXBsU25hcHNob3QsUGljdHVyZUxheWVySW1wbFNuYXBzaG90LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBMYXllclRyZWVJbXBsU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpMYXllclRyZWVJbXBsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7dGhpcy5sYXllclRyZWVIb3N0SW1wbD11bmRlZmluZWQ7dGhpcy53aGljaFRyZWU9dW5kZWZpbmVkO3RoaXMuc291cmNlRnJhbWVOdW1iZXI9dW5kZWZpbmVkO30saW5pdGlhbGl6ZSgpe3RyLmUuY2MubW92ZVJlcXVpcmVkRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydyZW5kZXJTdXJmYWNlTGF5ZXJMaXN0J10pO3RyLmUuY2MubW92ZU9wdGlvbmFsRmllbGRzRnJvbUFyZ3NUb1RvcGxldmVsKHRoaXMsWydyb290TGF5ZXInLCdsYXllcnMnXSk7aWYodGhpcy5hcmdzLnNvdXJjZUZyYW1lTnVtYmVyKXt0aGlzLnNvdXJjZUZyYW1lTnVtYmVyPXRoaXMuYXJncy5zb3VyY2VGcmFtZU51bWJlcjt9CmlmKHRoaXMucm9vdExheWVyKXt0aGlzLnJvb3RMYXllci5sYXllclRyZWVJbXBsPXRoaXM7fWVsc2V7Zm9yKGxldCBpPTA7aTx0aGlzLmxheWVycy5sZW5ndGg7aSsrKXt0aGlzLmxheWVyc1tpXS5sYXllclRyZWVJbXBsPXRoaXM7fX0KaWYodGhpcy5hcmdzLnN3YXBQcm9taXNlVHJhY2VJZHMmJnRoaXMuYXJncy5zd2FwUHJvbWlzZVRyYWNlSWRzLmxlbmd0aCl7dGhpcy50cmFjZWRJbnB1dExhdGVuY2llcz1bXTtjb25zdCBvd25Qcm9jZXNzPXRoaXMub2JqZWN0SW5zdGFuY2UucGFyZW50O2NvbnN0IG1vZGVsSGVscGVyPW93blByb2Nlc3MubW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYobW9kZWxIZWxwZXIpe3RoaXMuX2luaXRpYWxpemVUcmFjZWRJbnB1dExhdGVuY2llcyhtb2RlbEhlbHBlcik7fX19LF9pbml0aWFsaXplVHJhY2VkSW5wdXRMYXRlbmNpZXMobW9kZWxIZWxwZXIpe2NvbnN0IGxhdGVuY3lFdmVudHM9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlci5nZXRMYXRlbmN5RXZlbnRzSW5SYW5nZShtb2RlbEhlbHBlci5tb2RlbC5ib3VuZHMpO2xhdGVuY3lFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7Zm9yKGxldCBpPTA7aTx0aGlzLmFyZ3Muc3dhcFByb21pc2VUcmFjZUlkcy5sZW5ndGg7aSsrKXtpZighZXZlbnQuYXJncy5kYXRhfHwhZXZlbnQuYXJncy5kYXRhLnRyYWNlX2lkKXtjb250aW51ZTt9CmlmKHBhcnNlSW50KGV2ZW50LmFyZ3MuZGF0YS50cmFjZV9pZCk9PT10aGlzLmFyZ3Muc3dhcFByb21pc2VUcmFjZUlkc1tpXSl7dGhpcy50cmFjZWRJbnB1dExhdGVuY2llcy5wdXNoKGV2ZW50KTt9fX0sdGhpcyk7fSxnZXQgaGFzU291cmNlRnJhbWVCZWVuRHJhd25CZWZvcmUoKXtpZih0aGlzLndoaWNoVHJlZT09PXRyLmUuY2MuY29uc3RhbnRzLlBFTkRJTkdfVFJFRSl7cmV0dXJuIGZhbHNlO30KaWYodGhpcy5zb3VyY2VGcmFtZU51bWJlcj09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgdGhpc0xUSEk9dGhpcy5sYXllclRyZWVIb3N0SW1wbDtjb25zdCB0aGlzTFRISUluZGV4PXRoaXNMVEhJLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5pbmRleE9mKHRoaXNMVEhJKTtjb25zdCBwcmV2TFRISUluZGV4PXRoaXNMVEhJSW5kZXgtMTtpZihwcmV2TFRISUluZGV4PDB8fHByZXZMVEhJSW5kZXg+PXRoaXNMVEhJLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5sZW5ndGgpe3JldHVybiBmYWxzZTt9CmNvbnN0IHByZXZMVEhJPXRoaXNMVEhJLm9iamVjdEluc3RhbmNlLnNuYXBzaG90c1twcmV2TFRISUluZGV4XTtpZighcHJldkxUSEkuYWN0aXZlVHJlZSlyZXR1cm4gZmFsc2U7aWYocHJldkxUSEkuYWN0aXZlVHJlZS5zb3VyY2VGcmFtZU51bWJlcj09PXVuZGVmaW5lZClyZXR1cm47cmV0dXJuIHByZXZMVEhJLmFjdGl2ZVRyZWUuc291cmNlRnJhbWVOdW1iZXI9PT10aGlzLnNvdXJjZUZyYW1lTnVtYmVyO30sZ2V0IG90aGVyVHJlZSgpe2NvbnN0IG90aGVyPXRoaXMud2hpY2hUcmVlPT09Y29uc3RhbnRzLkFDVElWRV9UUkVFP2NvbnN0YW50cy5QRU5ESU5HX1RSRUU6Y29uc3RhbnRzLkFDVElWRV9UUkVFO3JldHVybiB0aGlzLmxheWVyVHJlZUhvc3RJbXBsLmdldFRyZWUob3RoZXIpO30sZ2V0IGdwdU1lbW9yeVVzYWdlSW5CeXRlcygpe2xldCB0b3RhbEJ5dGVzPTA7dGhpcy5pdGVyTGF5ZXJzKGZ1bmN0aW9uKGxheWVyKXtpZihsYXllci5ncHVNZW1vcnlVc2FnZUluQnl0ZXMhPT11bmRlZmluZWQpe3RvdGFsQnl0ZXMrPWxheWVyLmdwdU1lbW9yeVVzYWdlSW5CeXRlczt9fSk7cmV0dXJuIHRvdGFsQnl0ZXM7fSxpdGVyTGF5ZXJzKGZ1bmMsdGhpc0FyZyl7Y29uc3QgdmlzaXRlZExheWVycz17fTtmdW5jdGlvbiB2aXNpdExheWVyKGxheWVyLGRlcHRoLGlzTWFzayxpc1JlcGxpY2Epe2lmKHZpc2l0ZWRMYXllcnNbbGF5ZXIubGF5ZXJJZF0pcmV0dXJuO3Zpc2l0ZWRMYXllcnNbbGF5ZXIubGF5ZXJJZF09dHJ1ZTtmdW5jLmNhbGwodGhpc0FyZyxsYXllcixkZXB0aCxpc01hc2ssaXNSZXBsaWNhKTtpZihsYXllci5jaGlsZHJlbil7Zm9yKGxldCBpPTA7aTxsYXllci5jaGlsZHJlbi5sZW5ndGg7aSsrKXt2aXNpdExheWVyKGxheWVyLmNoaWxkcmVuW2ldLGRlcHRoKzEpO319CmlmKGxheWVyLm1hc2tMYXllcil7dmlzaXRMYXllcihsYXllci5tYXNrTGF5ZXIsZGVwdGgrMSx0cnVlLGZhbHNlKTt9CmlmKGxheWVyLnJlcGxpY2FMYXllcil7dmlzaXRMYXllcihsYXllci5yZXBsaWNhTGF5ZXIsZGVwdGgrMSxmYWxzZSx0cnVlKTt9fQppZih0aGlzLnJvb3RMYXllcil7dmlzaXRMYXllcih0aGlzLnJvb3RMYXllciwwLGZhbHNlLGZhbHNlKTt9ZWxzZXtmb3IobGV0IGk9MDtpPHRoaXMubGF5ZXJzLmxlbmd0aDtpKyspe3Zpc2l0TGF5ZXIodGhpcy5sYXllcnNbaV0sMCxmYWxzZSxmYWxzZSk7fX19LGZpbmRMYXllcldpdGhJZChpZCl7bGV0IGZvdW5kTGF5ZXI9dW5kZWZpbmVkO2Z1bmN0aW9uIHZpc2l0TGF5ZXIobGF5ZXIpe2lmKGxheWVyLmxheWVySWQ9PT1pZCl7Zm91bmRMYXllcj1sYXllcjt9fQp0aGlzLml0ZXJMYXllcnModmlzaXRMYXllcik7cmV0dXJuIGZvdW5kTGF5ZXI7fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoTGF5ZXJUcmVlSW1wbFNuYXBzaG90LHt0eXBlTmFtZTonY2M6OkxheWVyVHJlZUltcGwnfSk7cmV0dXJue0xheWVyVHJlZUltcGxTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBjb25zdGFudHM9dHIuZS5jYy5jb25zdGFudHM7Y29uc3QgT2JqZWN0U25hcHNob3Q9dHIubW9kZWwuT2JqZWN0U25hcHNob3Q7Y29uc3QgT2JqZWN0SW5zdGFuY2U9dHIubW9kZWwuT2JqZWN0SW5zdGFuY2U7ZnVuY3Rpb24gTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdCgpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9CkxheWVyVHJlZUhvc3RJbXBsU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7fSxpbml0aWFsaXplKCl7dHIuZS5jYy5tb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ2RldmljZVZpZXdwb3J0U2l6ZScsJ2FjdGl2ZVRyZWUnXSk7dHIuZS5jYy5tb3ZlT3B0aW9uYWxGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ3BlbmRpbmdUcmVlJ10pO2lmKHRoaXMuYXJncy5hY3RpdmVUaWxlcyE9PXVuZGVmaW5lZCl7dGhpcy5hY3RpdmVUaWxlcz10aGlzLmFyZ3MuYWN0aXZlVGlsZXM7ZGVsZXRlIHRoaXMuYXJncy5hY3RpdmVUaWxlczt9ZWxzZSBpZih0aGlzLmFyZ3MudGlsZXMhPT11bmRlZmluZWQpe3RoaXMuYWN0aXZlVGlsZXM9dGhpcy5hcmdzLnRpbGVzO2RlbGV0ZSB0aGlzLmFyZ3MudGlsZXM7fQppZighdGhpcy5hY3RpdmVUaWxlcyl7dGhpcy5hY3RpdmVUaWxlcz1bXTt9CnRoaXMuYWN0aXZlVHJlZS5sYXllclRyZWVIb3N0SW1wbD10aGlzO3RoaXMuYWN0aXZlVHJlZS53aGljaFRyZWU9Y29uc3RhbnRzLkFDVElWRV9UUkVFO2lmKHRoaXMucGVuZGluZ1RyZWUpe3RoaXMucGVuZGluZ1RyZWUubGF5ZXJUcmVlSG9zdEltcGw9dGhpczt0aGlzLnBlbmRpbmdUcmVlLndoaWNoVHJlZT1jb25zdGFudHMuUEVORElOR19UUkVFO319LGdldENvbnRlbnRzU2NhbGVOYW1lcygpe2NvbnN0IHNjYWxlcz17fTtmb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZlVGlsZXMubGVuZ3RoOysraSl7Y29uc3QgdGlsZT10aGlzLmFjdGl2ZVRpbGVzW2ldO3NjYWxlc1t0aWxlLmNvbnRlbnRzU2NhbGVdPXRpbGUucmVzb2x1dGlvbjt9CnJldHVybiBzY2FsZXM7fSxnZXRUcmVlKHdoaWNoVHJlZSl7aWYod2hpY2hUcmVlPT09Y29uc3RhbnRzLkFDVElWRV9UUkVFKXtyZXR1cm4gdGhpcy5hY3RpdmVUcmVlO30KaWYod2hpY2hUcmVlPT09Y29uc3RhbnRzLlBFTkRJTkdfVFJFRSl7cmV0dXJuIHRoaXMucGVuZGluZ1RyZWU7fQp0aHJvdyBuZXcgRXhjZXB0aW9uKCdVbmtub3duIHRyZWUgdHlwZSArICcrd2hpY2hUcmVlKTt9LGdldCB0aWxlc0hhdmVHcHVNZW1vcnlVc2FnZUluZm8oKXtpZih0aGlzLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mb18hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mb187fQpmb3IobGV0IGk9MDtpPHRoaXMuYWN0aXZlVGlsZXMubGVuZ3RoO2krKyl7aWYodGhpcy5hY3RpdmVUaWxlc1tpXS5ncHVNZW1vcnlVc2FnZUluQnl0ZXM9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KdGhpcy50aWxlc0hhdmVHcHVNZW1vcnlVc2FnZUluZm9fPXRydWU7cmV0dXJuIHRydWU7fQp0aGlzLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mb189ZmFsc2U7cmV0dXJuIGZhbHNlO30sZ2V0IGdwdU1lbW9yeVVzYWdlSW5CeXRlcygpe2lmKCF0aGlzLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mbylyZXR1cm47bGV0IHVzYWdlPTA7Zm9yKGxldCBpPTA7aTx0aGlzLmFjdGl2ZVRpbGVzLmxlbmd0aDtpKyspe2NvbnN0IHU9dGhpcy5hY3RpdmVUaWxlc1tpXS5ncHVNZW1vcnlVc2FnZUluQnl0ZXM7aWYodSE9PXVuZGVmaW5lZCl1c2FnZSs9dTt9CnJldHVybiB1c2FnZTt9LGdldCB1c2VyRnJpZW5kbHlOYW1lKCl7bGV0IGZyYW1lTnVtYmVyO2lmKCF0aGlzLmFjdGl2ZVRyZWUpe2ZyYW1lTnVtYmVyPXRoaXMub2JqZWN0SW5zdGFuY2Uuc25hcHNob3RzLmluZGV4T2YodGhpcyk7fWVsc2V7aWYodGhpcy5hY3RpdmVUcmVlLnNvdXJjZUZyYW1lTnVtYmVyPT09dW5kZWZpbmVkKXtmcmFtZU51bWJlcj10aGlzLm9iamVjdEluc3RhbmNlLnNuYXBzaG90cy5pbmRleE9mKHRoaXMpO31lbHNle2ZyYW1lTnVtYmVyPXRoaXMuYWN0aXZlVHJlZS5zb3VyY2VGcmFtZU51bWJlcjt9fQpyZXR1cm4nY2M6OkxheWVyVHJlZUhvc3RJbXBsIGZyYW1lICcrZnJhbWVOdW1iZXI7fX07T2JqZWN0U25hcHNob3Quc3ViVHlwZXMucmVnaXN0ZXIoTGF5ZXJUcmVlSG9zdEltcGxTbmFwc2hvdCx7dHlwZU5hbWU6J2NjOjpMYXllclRyZWVIb3N0SW1wbCd9KTtmdW5jdGlvbiBMYXllclRyZWVIb3N0SW1wbEluc3RhbmNlKCl7T2JqZWN0SW5zdGFuY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMuYWxsTGF5ZXJzQkJveF89dW5kZWZpbmVkO30KTGF5ZXJUcmVlSG9zdEltcGxJbnN0YW5jZS5wcm90b3R5cGU9e19fcHJvdG9fXzpPYmplY3RJbnN0YW5jZS5wcm90b3R5cGUsZ2V0IGFsbENvbnRlbnRzU2NhbGVzKCl7aWYodGhpcy5hbGxDb250ZW50c1NjYWxlc18pe3JldHVybiB0aGlzLmFsbENvbnRlbnRzU2NhbGVzXzt9CmNvbnN0IHNjYWxlcz17fTtmb3IoY29uc3QgdGlsZUlEIGluIHRoaXMuYWxsVGlsZUhpc3Rvcmllc18pe2NvbnN0IHRpbGVIaXN0b3J5PXRoaXMuYWxsVGlsZUhpc3Rvcmllc19bdGlsZUlEXTtzY2FsZXNbdGlsZUhpc3RvcnkuY29udGVudHNTY2FsZV09dHJ1ZTt9CnRoaXMuYWxsQ29udGVudHNTY2FsZXNfPU9iamVjdC5rZXlzKHNjYWxlcyk7cmV0dXJuIHRoaXMuYWxsQ29udGVudHNTY2FsZXNfO30sZ2V0IGFsbExheWVyc0JCb3goKXtpZih0aGlzLmFsbExheWVyc0JCb3hfKXtyZXR1cm4gdGhpcy5hbGxMYXllcnNCQm94Xzt9CmNvbnN0IGJib3g9bmV3IHRyLmIubWF0aC5CQm94MigpO2Z1bmN0aW9uIGhhbmRsZVRyZWUodHJlZSl7dHJlZS5yZW5kZXJTdXJmYWNlTGF5ZXJMaXN0LmZvckVhY2goZnVuY3Rpb24obGF5ZXIpe2Jib3guYWRkUXVhZChsYXllci5sYXllclF1YWQpO30pO30KdGhpcy5zbmFwc2hvdHMuZm9yRWFjaChmdW5jdGlvbihsdGhpKXtoYW5kbGVUcmVlKGx0aGkuYWN0aXZlVHJlZSk7aWYobHRoaS5wZW5kaW5nVHJlZSl7aGFuZGxlVHJlZShsdGhpLnBlbmRpbmdUcmVlKTt9fSk7dGhpcy5hbGxMYXllcnNCQm94Xz1iYm94O3JldHVybiB0aGlzLmFsbExheWVyc0JCb3hfO319O09iamVjdEluc3RhbmNlLnN1YlR5cGVzLnJlZ2lzdGVyKExheWVyVHJlZUhvc3RJbXBsSW5zdGFuY2Use3R5cGVOYW1lOidjYzo6TGF5ZXJUcmVlSG9zdEltcGwnfSk7cmV0dXJue0xheWVyVHJlZUhvc3RJbXBsU25hcHNob3QsTGF5ZXJUcmVlSG9zdEltcGxJbnN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCB0aWxlVHlwZXM9e2hpZ2hSZXM6J2hpZ2hSZXMnLGxvd1JlczonbG93UmVzJyxleHRyYUhpZ2hSZXM6J2V4dHJhSGlnaFJlcycsZXh0cmFMb3dSZXM6J2V4dHJhTG93UmVzJyxtaXNzaW5nOidtaXNzaW5nJyxjdWxsZWQ6J2N1bGxlZCcsc29saWRDb2xvcjonc29saWRDb2xvcicscGljdHVyZToncGljdHVyZScsZGlyZWN0UGljdHVyZTonZGlyZWN0UGljdHVyZScsdW5rbm93bjondW5rbm93bid9O2NvbnN0IHRpbGVCb3JkZXI9e2hpZ2hSZXM6e2NvbG9yOidyZ2JhKDgwLCAyMDAsIDIwMCwgMC43KScsd2lkdGg6MX0sbG93UmVzOntjb2xvcjoncmdiYSgyMTIsIDgzLCAxOTIsIDAuNyknLHdpZHRoOjJ9LGV4dHJhSGlnaFJlczp7Y29sb3I6J3JnYmEoMjM5LCAyMzEsIDIwLCAwLjcpJyx3aWR0aDoyfSxleHRyYUxvd1Jlczp7Y29sb3I6J3JnYmEoOTMsIDE4NiwgMTgsIDAuNyknLHdpZHRoOjJ9LG1pc3Npbmc6e2NvbG9yOidyZ2JhKDI1NSwgMCwgMCwgMC43KScsd2lkdGg6MX0sY3VsbGVkOntjb2xvcjoncmdiYSgxNjAsIDEwMCwgMCwgMC44KScsd2lkdGg6MX0sc29saWRDb2xvcjp7Y29sb3I6J3JnYmEoMTI4LCAxMjgsIDEyOCwgMC43KScsd2lkdGg6MX0scGljdHVyZTp7Y29sb3I6J3JnYmEoNjQsIDY0LCA2NCwgMC43KScsd2lkdGg6MX0sZGlyZWN0UGljdHVyZTp7Y29sb3I6J3JnYmEoMTI3LCAyNTUsIDAsIDEuMCknLHdpZHRoOjF9LHVua25vd246e2NvbG9yOidyZ2JhKDAsIDAsIDAsIDEuMCknLHdpZHRoOjJ9fTtyZXR1cm57dGlsZVR5cGVzLHRpbGVCb3JkZXJ9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBUaWxlU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpUaWxlU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7fSxpbml0aWFsaXplKCl7dHIuZS5jYy5tb3ZlT3B0aW9uYWxGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ2xheWVySWQnLCdjb250ZW50c1NjYWxlJywnY29udGVudFJlY3QnXSk7aWYodGhpcy5hcmdzLm1hbmFnZWRTdGF0ZSl7dGhpcy5yZXNvbHV0aW9uPXRoaXMuYXJncy5tYW5hZ2VkU3RhdGUucmVzb2x1dGlvbjt0aGlzLmlzU29saWRDb2xvcj10aGlzLmFyZ3MubWFuYWdlZFN0YXRlLmlzU29saWRDb2xvcjt0aGlzLmlzVXNpbmdHcHVNZW1vcnk9dGhpcy5hcmdzLm1hbmFnZWRTdGF0ZS5pc1VzaW5nR3B1TWVtb3J5O3RoaXMuaGFzUmVzb3VyY2U9dGhpcy5hcmdzLm1hbmFnZWRTdGF0ZS5oYXNSZXNvdXJjZTt0aGlzLnNjaGVkdWxlZFByaW9yaXR5PXRoaXMuYXJncy5zY2hlZHVsZWRQcmlvcml0eTt0aGlzLmdwdU1lbW9yeVVzYWdlSW5CeXRlcz10aGlzLmFyZ3MuZ3B1TWVtb3J5VXNhZ2U7fWVsc2V7dGhpcy5yZXNvbHV0aW9uPXRoaXMuYXJncy5yZXNvbHV0aW9uO3RoaXMuaXNTb2xpZENvbG9yPXRoaXMuYXJncy5kcmF3SW5mby5pc1NvbGlkQ29sb3I7dGhpcy5pc1VzaW5nR3B1TWVtb3J5PXRoaXMuYXJncy5pc1VzaW5nR3B1TWVtb3J5O3RoaXMuaGFzUmVzb3VyY2U9dGhpcy5hcmdzLmhhc1Jlc291cmNlO3RoaXMuc2NoZWR1bGVkUHJpb3JpdHk9dGhpcy5hcmdzLnNjaGVkdWxlZFByaW9yaXR5O3RoaXMuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzPXRoaXMuYXJncy5ncHVNZW1vcnlVc2FnZTt9CmlmKHRoaXMuY29udGVudFJlY3Qpe3RoaXMubGF5ZXJSZWN0PXRoaXMuY29udGVudFJlY3Quc2NhbGUoMS4wL3RoaXMuY29udGVudHNTY2FsZSk7fQppZih0aGlzLmlzU29saWRDb2xvcil7dGhpcy50eXBlXz10ci5lLmNjLnRpbGVUeXBlcy5zb2xpZENvbG9yO31lbHNlIGlmKCF0aGlzLmhhc1Jlc291cmNlKXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLm1pc3Npbmc7fWVsc2UgaWYodGhpcy5yZXNvbHV0aW9uPT09J0hJR0hfUkVTT0xVVElPTicpe3RoaXMudHlwZV89dHIuZS5jYy50aWxlVHlwZXMuaGlnaFJlczt9ZWxzZSBpZih0aGlzLnJlc29sdXRpb249PT0nTE9XX1JFU09MVVRJT04nKXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLmxvd1Jlczt9ZWxzZXt0aGlzLnR5cGVfPXRyLmUuY2MudGlsZVR5cGVzLnVua25vd247fX0sZ2V0VHlwZUZvckxheWVyKGxheWVyKXtsZXQgdHlwZT10aGlzLnR5cGVfO2lmKHR5cGU9PT10ci5lLmNjLnRpbGVUeXBlcy51bmtub3duKXtpZih0aGlzLmNvbnRlbnRzU2NhbGU8bGF5ZXIuaWRlYWxDb250ZW50c1NjYWxlKXt0eXBlPXRyLmUuY2MudGlsZVR5cGVzLmV4dHJhTG93UmVzO31lbHNlIGlmKHRoaXMuY29udGVudHNTY2FsZT5sYXllci5pZGVhbENvbnRlbnRzU2NhbGUpe3R5cGU9dHIuZS5jYy50aWxlVHlwZXMuZXh0cmFIaWdoUmVzO319CnJldHVybiB0eXBlO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKFRpbGVTbmFwc2hvdCx7dHlwZU5hbWU6J2NjOjpUaWxlJ30pO3JldHVybntUaWxlU25hcHNob3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTG9jYXRpb249dHIubW9kZWwuTG9jYXRpb247ZnVuY3Rpb24gVUlTdGF0ZShsb2NhdGlvbixzY2FsZVgpe3RoaXMubG9jYXRpb25fPWxvY2F0aW9uO3RoaXMuc2NhbGVYXz1zY2FsZVg7fQpVSVN0YXRlLmZyb21Vc2VyRnJpZW5kbHlTdHJpbmc9ZnVuY3Rpb24obW9kZWwsdmlld3BvcnQsc3RhdGVTdHJpbmcpe2NvbnN0IG5hdkJ5RmluZGVyUGF0dGVybj0vXigtP1xkKyhcLlxkKyk/KUAoLispeChcZCsoXC5cZCspPykkL2c7Y29uc3QgbWF0Y2g9bmF2QnlGaW5kZXJQYXR0ZXJuLmV4ZWMoc3RhdGVTdHJpbmcpO2lmKCFtYXRjaClyZXR1cm47Y29uc3QgdGltZXN0YW1wPXBhcnNlRmxvYXQobWF0Y2hbMV0pO2NvbnN0IHN0YWJsZUlkPW1hdGNoWzNdO2NvbnN0IHNjYWxlWD1wYXJzZUZsb2F0KG1hdGNoWzRdKTtpZihzY2FsZVg8PTApe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBTY2FsZVggdmFsdWUgaW4gVUkgU3RhdGUgc3RyaW5nLicpO30KaWYoIXZpZXdwb3J0LmNvbnRhaW5lclRvVHJhY2tNYXAuZ2V0VHJhY2tCeVN0YWJsZUlkKHN0YWJsZUlkKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIFN0YWJsZUlEIGdpdmVuIGluIFVJIFN0YXRlIFN0cmluZy4nKTt9CmNvbnN0IGxvYz10ci5tb2RlbC5Mb2NhdGlvbi5mcm9tU3RhYmxlSWRBbmRUaW1lc3RhbXAodmlld3BvcnQsc3RhYmxlSWQsdGltZXN0YW1wKTtyZXR1cm4gbmV3IFVJU3RhdGUobG9jLHNjYWxlWCk7fTtVSVN0YXRlLnByb3RvdHlwZT17Z2V0IGxvY2F0aW9uKCl7cmV0dXJuIHRoaXMubG9jYXRpb25fO30sZ2V0IHNjYWxlWCgpe3JldHVybiB0aGlzLnNjYWxlWF87fSx0b1VzZXJGcmllbmRseVN0cmluZyh2aWV3cG9ydCl7Y29uc3QgdGltZXN0YW1wPXRoaXMubG9jYXRpb25fLnhXb3JsZDtjb25zdCBzdGFibGVJZD10aGlzLmxvY2F0aW9uXy5nZXRDb250YWluaW5nVHJhY2sodmlld3BvcnQpLmV2ZW50Q29udGFpbmVyLnN0YWJsZUlkO2NvbnN0IHNjYWxlWD10aGlzLnNjYWxlWF87cmV0dXJuIHRpbWVzdGFtcC50b0ZpeGVkKDUpKydAJytzdGFibGVJZCsneCcrc2NhbGVYLnRvRml4ZWQoNSk7fSx0b0RpY3QoKXtyZXR1cm57bG9jYXRpb246dGhpcy5sb2NhdGlvbl8udG9EaWN0KCksc2NhbGVYOnRoaXMuc2NhbGVYX307fX07cmV0dXJue1VJU3RhdGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgRXZlbnRTZXQ9dHIubW9kZWwuRXZlbnRTZXQ7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7ZnVuY3Rpb24gQnJ1c2hpbmdTdGF0ZSgpe3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7dGhpcy5zZWxlY3Rpb25fPW5ldyBFdmVudFNldCgpO3RoaXMuZmluZE1hdGNoZXNfPW5ldyBFdmVudFNldCgpO3RoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c189bmV3IEV2ZW50U2V0KCk7dGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXz1uZXcgRXZlbnRTZXQoKTt0aGlzLmFwcGxpZWRUb01vZGVsXz11bmRlZmluZWQ7dGhpcy52aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlc189e307fQpCcnVzaGluZ1N0YXRlLnByb3RvdHlwZT17Z2V0IGd1aWQoKXtyZXR1cm4gdGhpcy5ndWlkXzt9LGNsb25lKCl7Y29uc3QgdGhhdD1uZXcgQnJ1c2hpbmdTdGF0ZSgpO3RoYXQuc2VsZWN0aW9uXz10aGlzLnNlbGVjdGlvbl87dGhhdC5maW5kTWF0Y2hlc189dGhpcy5maW5kTWF0Y2hlc187dGhhdC5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXz10aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfO3RoYXQuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c189dGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXzt0aGF0LnZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzXz10aGlzLnZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzXztyZXR1cm4gdGhhdDt9LGVxdWFscyh0aGF0KXtpZighdGhpcy5zZWxlY3Rpb25fLmVxdWFscyh0aGF0LnNlbGVjdGlvbl8pKXtyZXR1cm4gZmFsc2U7fQppZighdGhpcy5maW5kTWF0Y2hlc18uZXF1YWxzKHRoYXQuZmluZE1hdGNoZXNfKSl7cmV0dXJuIGZhbHNlO30KaWYoIXRoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c18uZXF1YWxzKHRoYXQuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c18pKXtyZXR1cm4gZmFsc2U7fQppZighdGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXy5lcXVhbHModGhhdC5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXykpe3JldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO30sZ2V0IHNlbGVjdGlvbk9mSW50ZXJlc3QoKXtpZih0aGlzLnNlbGVjdGlvbl8ubGVuZ3RoKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30KaWYodGhpcy5oaWdobGlnaHRfLmxlbmd0aCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0Xzt9CmlmKHRoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c18ubGVuZ3RoKXtyZXR1cm4gdGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXzt9CmlmKHRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c18ubGVuZ3RoKXtyZXR1cm4gdGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXzt9CnJldHVybiB0aGlzLnNlbGVjdGlvbl87fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZih0aGlzLmFwcGxpZWRUb01vZGVsXyl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXV0YXRlIHRoaXMgc3RhdGUgcmlnaHQgbm93Jyk7fQppZihzZWxlY3Rpb249PT11bmRlZmluZWQpe3NlbGVjdGlvbj1uZXcgRXZlbnRTZXQoKTt9CnRoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247fSxnZXQgZmluZE1hdGNoZXMoKXtyZXR1cm4gdGhpcy5maW5kTWF0Y2hlc187fSxzZXQgZmluZE1hdGNoZXMoZmluZE1hdGNoZXMpe2lmKHRoaXMuYXBwbGllZFRvTW9kZWxfKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdXRhdGUgdGhpcyBzdGF0ZSByaWdodCBub3cnKTt9CmlmKGZpbmRNYXRjaGVzPT09dW5kZWZpbmVkKXtmaW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt9CnRoaXMuZmluZE1hdGNoZXNfPWZpbmRNYXRjaGVzO30sZ2V0IGFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHMoKXtyZXR1cm4gdGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXzt9LHNldCBhbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzKGFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHMpe2lmKHRoaXMuYXBwbGllZFRvTW9kZWxfKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBtdXRhdGUgdGhpcyBzdGF0ZSByaWdodCBub3cnKTt9CmlmKCEoYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyBpbnN0YW5jZW9mIEV2ZW50U2V0KSl7YW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cz1uZXcgRXZlbnRTZXQoKTt9CnRoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c189YW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50czt9LGdldCBhbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKCl7cmV0dXJuIHRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c187fSxzZXQgYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cyhhbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKXtpZih0aGlzLmFwcGxpZWRUb01vZGVsXyl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgbXV0YXRlIHRoaXMgc3RhdGUgcmlnaHQgbm93Jyk7fQppZighKGFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHMgaW5zdGFuY2VvZiBFdmVudFNldCkpe2FuYWx5c2lzTGlua0hvdmVyZWRFdmVudHM9bmV3IEV2ZW50U2V0KCk7fQp0aGlzLmFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHNfPWFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHM7fSxnZXQgaXNBcHBsaWVkVG9Nb2RlbCgpe3JldHVybiB0aGlzLmFwcGxpZWRUb01vZGVsXyE9PXVuZGVmaW5lZDt9LGdldCB2aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlcygpe3JldHVybiB0aGlzLnZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGVzXzt9LHNldCB2aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlcyh2aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlcyl7dGhpcy52aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlc189dmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXM7fSxnZXQgZGVmYXVsdFN0YXRlXygpe2NvbnN0IHN0YW5kb3V0RXZlbnRFeGlzdHM9KHRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c18ubGVuZ3RoPjB8fHRoaXMuYW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50c18ubGVuZ3RoPjB8fHRoaXMuZmluZE1hdGNoZXNfLmxlbmd0aD4wKTtyZXR1cm4oc3RhbmRvdXRFdmVudEV4aXN0cz9TZWxlY3Rpb25TdGF0ZS5ESU1NRUQwOlNlbGVjdGlvblN0YXRlLk5PTkUpO30sZ2V0IGJyaWdodGVuZWRFdmVudHNfKCl7Y29uc3QgYnJpZ2h0ZW5lZEV2ZW50cz1uZXcgRXZlbnRTZXQoKTticmlnaHRlbmVkRXZlbnRzLmFkZEV2ZW50U2V0KHRoaXMuZmluZE1hdGNoZXMpO2JyaWdodGVuZWRFdmVudHMuYWRkRXZlbnRTZXQodGhpcy5hbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzXyk7YnJpZ2h0ZW5lZEV2ZW50cy5hZGRFdmVudFNldCh0aGlzLnNlbGVjdGlvbl8pO2JyaWdodGVuZWRFdmVudHMuYWRkRXZlbnRTZXQodGhpcy5hbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzXyk7cmV0dXJuIGJyaWdodGVuZWRFdmVudHM7fSxhcHBseVRvRXZlbnRTZWxlY3Rpb25TdGF0ZXMobW9kZWwpe3RoaXMuYXBwbGllZFRvTW9kZWxfPW1vZGVsO2lmKG1vZGVsKXtjb25zdCBuZXdEZWZhdWx0U3RhdGU9dGhpcy5kZWZhdWx0U3RhdGVfO2NvbnN0IGN1cnJlbnREZWZhdWx0U3RhdGU9dHIuYi5nZXRGaXJzdEVsZW1lbnQobW9kZWwuZ2V0RGVzY2VuZGFudEV2ZW50cygpKS5zZWxlY3Rpb25TdGF0ZTtpZihjdXJyZW50RGVmYXVsdFN0YXRlIT09bmV3RGVmYXVsdFN0YXRlKXtmb3IoY29uc3QgZSBvZiBtb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2Uuc2VsZWN0aW9uU3RhdGU9bmV3RGVmYXVsdFN0YXRlO319fQpsZXQgbGV2ZWw7Zm9yKGNvbnN0IGUgb2YgdGhpcy5icmlnaHRlbmVkRXZlbnRzXyl7bGV2ZWw9MDtpZih0aGlzLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHNfLmNvbnRhaW5zKGUpfHx0aGlzLmZpbmRNYXRjaGVzXy5jb250YWlucyhlKSl7bGV2ZWwrKzt9CmlmKHRoaXMuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50c18uY29udGFpbnMoZSkpe2xldmVsKys7fQppZih0aGlzLnNlbGVjdGlvbl8uY29udGFpbnMoZSkpe2xldmVsKys7fQplLnNlbGVjdGlvblN0YXRlPVNlbGVjdGlvblN0YXRlLmdldEZyb21CcmlnaHRlbmluZ0xldmVsKGxldmVsKTt9fSx0cmFuc2Zlck1vZGVsT3duZXJzaGlwVG9DbG9uZSh0aGF0KXtpZighdGhpcy5hcHBsaWVkVG9Nb2RlbF8pe3Rocm93IG5ldyBFcnJvcignTm90IGFwcGxpZWQnKTt9CnRoYXQuYXBwbGllZFRvTW9kZWxfPXRoaXMuYXBwbGllZFRvTW9kZWxfO3RoaXMuYXBwbGllZFRvTW9kZWxfPXVuZGVmaW5lZDt9LHVuYXBwbHlGcm9tRXZlbnRTZWxlY3Rpb25TdGF0ZXMoKXtpZighdGhpcy5hcHBsaWVkVG9Nb2RlbF8pe3Rocm93IG5ldyBFcnJvcignTm90IGFwcGxpZWQnKTt9CmNvbnN0IG1vZGVsPXRoaXMuYXBwbGllZFRvTW9kZWxfO3RoaXMuYXBwbGllZFRvTW9kZWxfPXVuZGVmaW5lZDtjb25zdCBkZWZhdWx0U3RhdGU9dGhpcy5kZWZhdWx0U3RhdGVfO2Zvcihjb25zdCBlIG9mIHRoaXMuYnJpZ2h0ZW5lZEV2ZW50c18pe2Uuc2VsZWN0aW9uU3RhdGU9ZGVmYXVsdFN0YXRlO30KcmV0dXJuIGRlZmF1bHRTdGF0ZTt9fTtyZXR1cm57QnJ1c2hpbmdTdGF0ZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbmltYXRpb24oKXt9CkFuaW1hdGlvbi5wcm90b3R5cGU9e2NhblRha2VPdmVyRm9yKGV4aXN0aW5nQW5pbWF0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sdGFrZU92ZXJGb3IoZXhpc3RpbmdBbmltYXRpb24sbmV3U3RhcnRUaW1lc3RhbXAsdGFyZ2V0KXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc3RhcnQodGltZXN0YW1wLHRhcmdldCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGRpZFN0b3BFYXJseSh0aW1lc3RhbXAsdGFyZ2V0LHdpbGxCZVRha2VuT3ZlckJ5QW5vdGhlckFuaW1hdGlvbil7fSx0aWNrKHRpbWVzdGFtcCx0YXJnZXQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fX07cmV0dXJue0FuaW1hdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBBbmltYXRpb25Db250cm9sbGVyKCl7dHIuYi5FdmVudFRhcmdldC5jYWxsKHRoaXMpO3RoaXMudGFyZ2V0Xz11bmRlZmluZWQ7dGhpcy5hY3RpdmVBbmltYXRpb25fPXVuZGVmaW5lZDt0aGlzLnRpY2tTY2hlZHVsZWRfPWZhbHNlO30KQW5pbWF0aW9uQ29udHJvbGxlci5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5iLkV2ZW50VGFyZ2V0LnByb3RvdHlwZSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMudGFyZ2V0Xzt9LHNldCB0YXJnZXQodGFyZ2V0KXtpZih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGNoYW5nZSB0YXJnZXQgd2hpbGUgYW5pbWF0aW9uIGlzIHJ1bm5pbmcuJyk7fQppZih0YXJnZXQuY2xvbmVBbmltYXRpb25TdGF0ZT09PXVuZGVmaW5lZHx8dHlwZW9mIHRhcmdldC5jbG9uZUFuaW1hdGlvblN0YXRlIT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IEVycm9yKCd0YXJnZXQgbXVzdCBoYXZlIGEgY2xvbmVBbmltYXRpb25TdGF0ZSBmdW5jdGlvbicpO30KdGhpcy50YXJnZXRfPXRhcmdldDt9LGdldCBhY3RpdmVBbmltYXRpb24oKXtyZXR1cm4gdGhpcy5hY3RpdmVBbmltYXRpb25fO30sZ2V0IGhhc0FjdGl2ZUFuaW1hdGlvbigpe3JldHVybiEhdGhpcy5hY3RpdmVBbmltYXRpb25fO30scXVldWVBbmltYXRpb24oYW5pbWF0aW9uLG9wdF9ub3cpe2lmKHRoaXMudGFyZ2V0Xz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcXVldWUgYW5pbWF0aW9ucyB3aXRob3V0IGEgdGFyZ2V0Jyk7fQpsZXQgbm93O2lmKG9wdF9ub3chPT11bmRlZmluZWQpe25vdz1vcHRfbm93O31lbHNle25vdz13aW5kb3cucGVyZm9ybWFuY2Uubm93KCk7fQppZih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pe2NvbnN0IGRvbmU9dGhpcy5hY3RpdmVBbmltYXRpb25fLnRpY2sobm93LHRoaXMudGFyZ2V0Xyk7aWYoZG9uZSl7dGhpcy5hY3RpdmVBbmltYXRpb25fPXVuZGVmaW5lZDt9fQppZih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pe2lmKGFuaW1hdGlvbi5jYW5UYWtlT3ZlckZvcih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pKXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl8uZGlkU3RvcEVhcmx5KG5vdyx0aGlzLnRhcmdldF8sdHJ1ZSk7YW5pbWF0aW9uLnRha2VPdmVyRm9yKHRoaXMuYWN0aXZlQW5pbWF0aW9uXyxub3csdGhpcy50YXJnZXRfKTt9ZWxzZXt0aGlzLmFjdGl2ZUFuaW1hdGlvbl8uZGlkU3RvcEVhcmx5KG5vdyx0aGlzLnRhcmdldF8sZmFsc2UpO319CnRoaXMuYWN0aXZlQW5pbWF0aW9uXz1hbmltYXRpb247dGhpcy5hY3RpdmVBbmltYXRpb25fLnN0YXJ0KG5vdyx0aGlzLnRhcmdldF8pO2lmKHRoaXMudGlja1NjaGVkdWxlZF8pcmV0dXJuO3RoaXMudGlja1NjaGVkdWxlZF89dHJ1ZTt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRpY2tBY3RpdmVBbmltYXRpb25fLHRoaXMpO30sY2FuY2VsQWN0aXZlQW5pbWF0aW9uKG9wdF9ub3cpe2lmKCF0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pcmV0dXJuO2xldCBub3c7aWYob3B0X25vdyE9PXVuZGVmaW5lZCl7bm93PW9wdF9ub3c7fWVsc2V7bm93PXdpbmRvdy5wZXJmb3JtYW5jZS5ub3coKTt9CnRoaXMuYWN0aXZlQW5pbWF0aW9uXy5kaWRTdG9wRWFybHkobm93LHRoaXMudGFyZ2V0XyxmYWxzZSk7dGhpcy5hY3RpdmVBbmltYXRpb25fPXVuZGVmaW5lZDt9LHRpY2tBY3RpdmVBbmltYXRpb25fKGZyYW1lQmVnaW5UaW1lKXt0aGlzLnRpY2tTY2hlZHVsZWRfPWZhbHNlO2lmKCF0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pcmV0dXJuO2lmKHRoaXMudGFyZ2V0Xz09PXVuZGVmaW5lZCl7dGhpcy5hY3RpdmVBbmltYXRpb25fLmRpZFN0b3BFYXJseShmcmFtZUJlZ2luVGltZSx0aGlzLnRhcmdldF8sZmFsc2UpO3JldHVybjt9CmNvbnN0IG9sZFRhcmdldFN0YXRlPXRoaXMudGFyZ2V0Xy5jbG9uZUFuaW1hdGlvblN0YXRlKCk7Y29uc3QgZG9uZT10aGlzLmFjdGl2ZUFuaW1hdGlvbl8udGljayhmcmFtZUJlZ2luVGltZSx0aGlzLnRhcmdldF8pO2lmKGRvbmUpe3RoaXMuYWN0aXZlQW5pbWF0aW9uXz11bmRlZmluZWQ7fQppZih0aGlzLmFjdGl2ZUFuaW1hdGlvbl8pe3RoaXMudGlja1NjaGVkdWxlZF89dHJ1ZTt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZSh0aGlzLnRpY2tBY3RpdmVBbmltYXRpb25fLHRoaXMpO30KaWYob2xkVGFyZ2V0U3RhdGUpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ2RpZHRpY2snKTtlLm9sZFRhcmdldFN0YXRlPW9sZFRhcmdldFN0YXRlO3RoaXMuZGlzcGF0Y2hFdmVudChlLGZhbHNlLGZhbHNlKTt9fX07cmV0dXJue0FuaW1hdGlvbkNvbnRyb2xsZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2V0dGluZ3MoKXtyZXR1cm4gU2V0dGluZ3M7fQppZih0ci5iLnVuaXR0ZXN0JiZ0ci5iLnVuaXR0ZXN0LlRlc3RSdW5uZXIpe3RyLmIudW5pdHRlc3QuVGVzdFJ1bm5lci5hZGRFdmVudExpc3RlbmVyKCd0ci11bml0dGVzdC13aWxsLXJ1bicsZnVuY3Rpb24oKXtpZih0ci5pc0hlYWRsZXNzKXtTZXR0aW5ncy5zZXRBbHRlcm5hdGl2ZVN0b3JhZ2VJbnN0YW5jZShuZXcgSGVhZGxlc3NTdG9yYWdlKCkpO31lbHNle1NldHRpbmdzLnNldEFsdGVybmF0aXZlU3RvcmFnZUluc3RhbmNlKGdsb2JhbC5zZXNzaW9uU3RvcmFnZSk7Z2xvYmFsLnNlc3Npb25TdG9yYWdlLmNsZWFyKCk7fX0pO30KZnVuY3Rpb24gU2Vzc2lvblNldHRpbmdzKCl7cmV0dXJuIFNlc3Npb25TZXR0aW5nczt9CmZ1bmN0aW9uIEFkZFN0YXRpY1N0b3JhZ2VGdW5jdGlvbnNUb0NsYXNzXyhpbnB1dENsYXNzLHN0b3JhZ2Upe2lucHV0Q2xhc3Muc3RvcmFnZV89c3RvcmFnZTtpbnB1dENsYXNzLmdldD1mdW5jdGlvbihrZXksb3B0X2RlZmF1bHQsb3B0X25hbWVzcGFjZSl7a2V5PWlucHV0Q2xhc3MubmFtZXNwYWNlXyhrZXksb3B0X25hbWVzcGFjZSk7Y29uc3QgcmF3VmFsPWlucHV0Q2xhc3Muc3RvcmFnZV8uZ2V0SXRlbShrZXkpO2lmKHJhd1ZhbD09PW51bGx8fHJhd1ZhbD09PXVuZGVmaW5lZCl7cmV0dXJuIG9wdF9kZWZhdWx0O30KdHJ5e3JldHVybiBKU09OLnBhcnNlKHJhd1ZhbCkudmFsdWU7fWNhdGNoKGUpe2lucHV0Q2xhc3Muc3RvcmFnZV8ucmVtb3ZlSXRlbShrZXkpO3JldHVybiBvcHRfZGVmYXVsdDt9fTtpbnB1dENsYXNzLnNldD1mdW5jdGlvbihrZXksdmFsdWUsb3B0X25hbWVzcGFjZSl7aWYodmFsdWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU2V0dGluZ3Muc2V0OiB2YWx1ZSBtdXN0IG5vdCBiZSB1bmRlZmluZWQnKTt9CmNvbnN0IHY9SlNPTi5zdHJpbmdpZnkoe3ZhbHVlfSk7aW5wdXRDbGFzcy5zdG9yYWdlXy5zZXRJdGVtKGlucHV0Q2xhc3MubmFtZXNwYWNlXyhrZXksb3B0X25hbWVzcGFjZSksdik7fTtpbnB1dENsYXNzLmtleXM9ZnVuY3Rpb24ob3B0X25hbWVzcGFjZSl7Y29uc3QgcmVzdWx0PVtdO29wdF9uYW1lc3BhY2U9b3B0X25hbWVzcGFjZXx8Jyc7Zm9yKGxldCBpPTA7aTxpbnB1dENsYXNzLnN0b3JhZ2VfLmxlbmd0aDtpKyspe2NvbnN0IGtleT1pbnB1dENsYXNzLnN0b3JhZ2VfLmtleShpKTtpZihpbnB1dENsYXNzLmlzbmFtZXNwYWNlZF8oa2V5LG9wdF9uYW1lc3BhY2UpKXtyZXN1bHQucHVzaChpbnB1dENsYXNzLnVubmFtZXNwYWNlXyhrZXksb3B0X25hbWVzcGFjZSkpO319CnJldHVybiByZXN1bHQ7fTtpbnB1dENsYXNzLmlzbmFtZXNwYWNlZF89ZnVuY3Rpb24oa2V5LG9wdF9uYW1lc3BhY2Upe3JldHVybiBrZXkuaW5kZXhPZihpbnB1dENsYXNzLm5vcm1hbGl6ZV8ob3B0X25hbWVzcGFjZSkpPT09MDt9O2lucHV0Q2xhc3MubmFtZXNwYWNlXz1mdW5jdGlvbihrZXksb3B0X25hbWVzcGFjZSl7cmV0dXJuIGlucHV0Q2xhc3Mubm9ybWFsaXplXyhvcHRfbmFtZXNwYWNlKStrZXk7fTtpbnB1dENsYXNzLnVubmFtZXNwYWNlXz1mdW5jdGlvbihrZXksb3B0X25hbWVzcGFjZSl7cmV0dXJuIGtleS5yZXBsYWNlKGlucHV0Q2xhc3Mubm9ybWFsaXplXyhvcHRfbmFtZXNwYWNlKSwnJyk7fTtpbnB1dENsYXNzLm5vcm1hbGl6ZV89ZnVuY3Rpb24ob3B0X25hbWVzcGFjZSl7cmV0dXJuIGlucHV0Q2xhc3MuTkFNRVNQQUNFKyhvcHRfbmFtZXNwYWNlP29wdF9uYW1lc3BhY2UrJy4nOicnKTt9O2lucHV0Q2xhc3Muc2V0QWx0ZXJuYXRpdmVTdG9yYWdlSW5zdGFuY2U9ZnVuY3Rpb24oaW5zdGFuY2Upe2lucHV0Q2xhc3Muc3RvcmFnZV89aW5zdGFuY2U7fTtpbnB1dENsYXNzLmdldEFsdGVybmF0aXZlU3RvcmFnZUluc3RhbmNlPWZ1bmN0aW9uKCl7aWYoIXRyLmlzSGVhZGxlc3MmJmlucHV0Q2xhc3Muc3RvcmFnZV89PT1sb2NhbFN0b3JhZ2Upe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gaW5wdXRDbGFzcy5zdG9yYWdlXzt9O2lucHV0Q2xhc3MuTkFNRVNQQUNFPSd0cmFjZS12aWV3ZXInO30KZnVuY3Rpb24gSGVhZGxlc3NTdG9yYWdlKCl7dGhpcy5sZW5ndGg9MDt0aGlzLmhhc0l0ZW1fPXt9O3RoaXMuaXRlbXNfPXt9O3RoaXMuaXRlbXNBc0FycmF5Xz11bmRlZmluZWQ7fQpIZWFkbGVzc1N0b3JhZ2UucHJvdG90eXBlPXtrZXkoaW5kZXgpe3JldHVybiB0aGlzLml0ZW1zQXNBcnJheVtpbmRleF07fSxnZXQgaXRlbXNBc0FycmF5KCl7aWYodGhpcy5pdGVtc0FzQXJyYXlfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5pdGVtc0FzQXJyYXlfO30KY29uc3QgaXRlbXNBc0FycmF5PVtdO2Zvcihjb25zdCBrIGluIHRoaXMuaXRlbXNfKXtpdGVtc0FzQXJyYXkucHVzaChrKTt9CnRoaXMuaXRlbXNBc0FycmF5Xz1pdGVtc0FzQXJyYXk7cmV0dXJuIHRoaXMuaXRlbXNBc0FycmF5Xzt9LGdldEl0ZW0oa2V5KXtpZighdGhpcy5oYXNJdGVtX1trZXldKXtyZXR1cm4gbnVsbDt9CnJldHVybiB0aGlzLml0ZW1zX1trZXldO30scmVtb3ZlSXRlbShrZXkpe2lmKCF0aGlzLmhhc0l0ZW1fW2tleV0pe3JldHVybjt9CmNvbnN0IHZhbHVlPXRoaXMuaXRlbXNfW2tleV07ZGVsZXRlIHRoaXMuaGFzSXRlbV9ba2V5XTtkZWxldGUgdGhpcy5pdGVtc19ba2V5XTt0aGlzLmxlbmd0aC0tO3RoaXMuaXRlbXNBc0FycmF5Xz11bmRlZmluZWQ7cmV0dXJuIHZhbHVlO30sc2V0SXRlbShrZXksdmFsdWUpe2lmKHRoaXMuaGFzSXRlbV9ba2V5XSl7dGhpcy5pdGVtc19ba2V5XT12YWx1ZTtyZXR1cm47fQp0aGlzLml0ZW1zX1trZXldPXZhbHVlO3RoaXMuaGFzSXRlbV9ba2V5XT10cnVlO3RoaXMubGVuZ3RoKys7dGhpcy5pdGVtc0FzQXJyYXlfPXVuZGVmaW5lZDtyZXR1cm4gdmFsdWU7fX07aWYodHIuaXNIZWFkbGVzcyl7QWRkU3RhdGljU3RvcmFnZUZ1bmN0aW9uc1RvQ2xhc3NfKFNldHRpbmdzLG5ldyBIZWFkbGVzc1N0b3JhZ2UoKSk7QWRkU3RhdGljU3RvcmFnZUZ1bmN0aW9uc1RvQ2xhc3NfKFNlc3Npb25TZXR0aW5ncyxuZXcgSGVhZGxlc3NTdG9yYWdlKCkpO31lbHNle0FkZFN0YXRpY1N0b3JhZ2VGdW5jdGlvbnNUb0NsYXNzXyhTZXR0aW5ncyxsb2NhbFN0b3JhZ2UpO0FkZFN0YXRpY1N0b3JhZ2VGdW5jdGlvbnNUb0NsYXNzXyhTZXNzaW9uU2V0dGluZ3Msc2Vzc2lvblN0b3JhZ2UpO30KcmV0dXJue1NldHRpbmdzLFNlc3Npb25TZXR0aW5ncyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBjcmVhdGVTcGFuKG9wdF9kaWN0aW9uYXJ5KXtsZXQgb3duZXJEb2N1bWVudD1kb2N1bWVudDtpZihvcHRfZGljdGlvbmFyeSYmb3B0X2RpY3Rpb25hcnkub3duZXJEb2N1bWVudCl7b3duZXJEb2N1bWVudD1vcHRfZGljdGlvbmFyeS5vd25lckRvY3VtZW50O30KY29uc3Qgc3BhbkVsPW93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2lmKG9wdF9kaWN0aW9uYXJ5KXtpZihvcHRfZGljdGlvbmFyeS5jbGFzc05hbWUpe3NwYW5FbC5jbGFzc05hbWU9b3B0X2RpY3Rpb25hcnkuY2xhc3NOYW1lO30KaWYob3B0X2RpY3Rpb25hcnkudGV4dENvbnRlbnQpe1BvbHltZXIuZG9tKHNwYW5FbCkudGV4dENvbnRlbnQ9b3B0X2RpY3Rpb25hcnkudGV4dENvbnRlbnQ7fQppZihvcHRfZGljdGlvbmFyeS50b29sdGlwKXtzcGFuRWwudGl0bGU9b3B0X2RpY3Rpb25hcnkudG9vbHRpcDt9CmlmKG9wdF9kaWN0aW9uYXJ5LnBhcmVudCl7UG9seW1lci5kb20ob3B0X2RpY3Rpb25hcnkucGFyZW50KS5hcHBlbmRDaGlsZChzcGFuRWwpO30KaWYob3B0X2RpY3Rpb25hcnkuYm9sZCl7c3BhbkVsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO30KaWYob3B0X2RpY3Rpb25hcnkuaXRhbGljKXtzcGFuRWwuc3R5bGUuZm9udFN0eWxlPSdpdGFsaWMnO30KaWYob3B0X2RpY3Rpb25hcnkubWFyZ2luTGVmdCl7c3BhbkVsLnN0eWxlLm1hcmdpbkxlZnQ9b3B0X2RpY3Rpb25hcnkubWFyZ2luTGVmdDt9CmlmKG9wdF9kaWN0aW9uYXJ5Lm1hcmdpblJpZ2h0KXtzcGFuRWwuc3R5bGUubWFyZ2luUmlnaHQ9b3B0X2RpY3Rpb25hcnkubWFyZ2luUmlnaHQ7fQppZihvcHRfZGljdGlvbmFyeS5iYWNrZ3JvdW5kQ29sb3Ipe3NwYW5FbC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9b3B0X2RpY3Rpb25hcnkuYmFja2dyb3VuZENvbG9yO30KaWYob3B0X2RpY3Rpb25hcnkuY29sb3Ipe3NwYW5FbC5zdHlsZS5jb2xvcj1vcHRfZGljdGlvbmFyeS5jb2xvcjt9fQpyZXR1cm4gc3BhbkVsO30KZnVuY3Rpb24gY3JlYXRlTGluayhvcHRfYXJncyl7bGV0IG93bmVyRG9jdW1lbnQ9ZG9jdW1lbnQ7aWYob3B0X2FyZ3MmJm9wdF9hcmdzLm93bmVyRG9jdW1lbnQpe293bmVyRG9jdW1lbnQ9b3B0X2FyZ3Mub3duZXJEb2N1bWVudDt9CmNvbnN0IGxpbmtFbD1vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtpZihvcHRfYXJncyl7aWYob3B0X2FyZ3MuaHJlZilsaW5rRWwuaHJlZj1vcHRfYXJncy5ocmVmO2lmKG9wdF9hcmdzLnRvb2x0aXApbGlua0VsLnRpdGxlPW9wdF9hcmdzLnRvb2x0aXA7aWYob3B0X2FyZ3MuY29sb3IpbGlua0VsLnN0eWxlLmNvbG9yPW9wdF9hcmdzLmNvbG9yO2lmKG9wdF9hcmdzLmJvbGQpbGlua0VsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2lmKG9wdF9hcmdzLml0YWxpYylsaW5rRWwuc3R5bGUuZm9udFN0eWxlPSdpdGFsaWMnO2lmKG9wdF9hcmdzLmNsYXNzTmFtZSlsaW5rRWwuY2xhc3NOYW1lPW9wdF9hcmdzLmNsYXNzTmFtZTtpZihvcHRfYXJncy5wYXJlbnQpUG9seW1lci5kb20ob3B0X2FyZ3MucGFyZW50KS5hcHBlbmRDaGlsZChsaW5rRWwpO2lmKG9wdF9hcmdzLm1hcmdpbkxlZnQpbGlua0VsLnN0eWxlLm1hcmdpbkxlZnQ9b3B0X2FyZ3MubWFyZ2luTGVmdDtpZihvcHRfYXJncy5tYXJnaW5SaWdodClsaW5rRWwuc3R5bGUubWFyZ2luUmlnaHQ9b3B0X2FyZ3MubWFyZ2luUmlnaHQ7aWYob3B0X2FyZ3MuYmFja2dyb3VuZENvbG9yKXtsaW5rRWwuc3R5bGUuYmFja2dyb3VuZENvbG9yPW9wdF9hcmdzLmJhY2tncm91bmRDb2xvcjt9CmlmKG9wdF9hcmdzLnRleHRDb250ZW50KXtQb2x5bWVyLmRvbShsaW5rRWwpLnRleHRDb250ZW50PW9wdF9hcmdzLnRleHRDb250ZW50O319CnJldHVybiBsaW5rRWw7fQpmdW5jdGlvbiBjcmVhdGVEaXYob3B0X2RpY3Rpb25hcnkpe2NvbnN0IGRpdkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2lmKG9wdF9kaWN0aW9uYXJ5KXtpZihvcHRfZGljdGlvbmFyeS5jbGFzc05hbWUpe2RpdkVsLmNsYXNzTmFtZT1vcHRfZGljdGlvbmFyeS5jbGFzc05hbWU7fQppZihvcHRfZGljdGlvbmFyeS5wYXJlbnQpe1BvbHltZXIuZG9tKG9wdF9kaWN0aW9uYXJ5LnBhcmVudCkuYXBwZW5kQ2hpbGQoZGl2RWwpO30KaWYob3B0X2RpY3Rpb25hcnkudGV4dENvbnRlbnQpe1BvbHltZXIuZG9tKGRpdkVsKS50ZXh0Q29udGVudD1vcHRfZGljdGlvbmFyeS50ZXh0Q29udGVudDt9CmlmKG9wdF9kaWN0aW9uYXJ5Lm1heFdpZHRoKXtkaXZFbC5zdHlsZS5tYXhXaWR0aD1vcHRfZGljdGlvbmFyeS5tYXhXaWR0aDt9fQpyZXR1cm4gZGl2RWw7fQpmdW5jdGlvbiBjcmVhdGVTY29wZWRTdHlsZShzdHlsZUNvbnRlbnQpe2NvbnN0IHN0eWxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3R5bGUnKTtzdHlsZUVsLnNjb3BlZD10cnVlO1BvbHltZXIuZG9tKHN0eWxlRWwpLmlubmVySFRNTD1zdHlsZUNvbnRlbnQ7cmV0dXJuIHN0eWxlRWw7fQpmdW5jdGlvbiB2YWx1ZXNFcXVhbChhLGIpe2lmKGEgaW5zdGFuY2VvZiBBcnJheSYmYiBpbnN0YW5jZW9mIEFycmF5KXtyZXR1cm4gYS5sZW5ndGg9PT1iLmxlbmd0aCYmSlNPTi5zdHJpbmdpZnkoYSk9PT1KU09OLnN0cmluZ2lmeShiKTt9CnJldHVybiBhPT09Yjt9CmZ1bmN0aW9uIGNyZWF0ZVNlbGVjdG9yKHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXksZGVmYXVsdFZhbHVlLGl0ZW1zLG9wdF9uYW1lc3BhY2Upe2xldCBkZWZhdWx0VmFsdWVJbmRleDtmb3IobGV0IGk9MDtpPGl0ZW1zLmxlbmd0aDtpKyspe2NvbnN0IGl0ZW09aXRlbXNbaV07aWYodmFsdWVzRXF1YWwoaXRlbS52YWx1ZSxkZWZhdWx0VmFsdWUpKXtkZWZhdWx0VmFsdWVJbmRleD1pO2JyZWFrO319CmlmKGRlZmF1bHRWYWx1ZUluZGV4PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2RlZmF1bHRWYWx1ZSBtdXN0IGJlIGluIHRoZSBpdGVtcyBsaXN0Jyk7fQpjb25zdCBzZWxlY3RvckVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NlbGVjdCcpO3NlbGVjdG9yRWwuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyxvbkNoYW5nZSk7Zm9yKGxldCBpPTA7aTxpdGVtcy5sZW5ndGg7aSsrKXtjb25zdCBpdGVtPWl0ZW1zW2ldO2NvbnN0IG9wdGlvbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1BvbHltZXIuZG9tKG9wdGlvbkVsKS50ZXh0Q29udGVudD1pdGVtLmxhYmVsO29wdGlvbkVsLnRhcmdldFByb3BlcnR5VmFsdWU9aXRlbS52YWx1ZTtvcHRpb25FbC5pdGVtPWl0ZW07UG9seW1lci5kb20oc2VsZWN0b3JFbCkuYXBwZW5kQ2hpbGQob3B0aW9uRWwpO30KZnVuY3Rpb24gb25DaGFuZ2UoZSl7Y29uc3QgdmFsdWU9c2VsZWN0b3JFbC5zZWxlY3RlZFZhbHVlO3RyLmIuU2V0dGluZ3Muc2V0KHNldHRpbmdzS2V5LHZhbHVlLG9wdF9uYW1lc3BhY2UpO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPXZhbHVlO30KY29uc3Qgb2xkU2V0dGVyPXRhcmdldEVsLl9fbG9va3VwU2V0dGVyX18oJ3NlbGVjdGVkSW5kZXgnKTtzZWxlY3RvckVsLl9fZGVmaW5lR2V0dGVyX18oJ3NlbGVjdGVkVmFsdWUnLGZ1bmN0aW9uKHYpe3JldHVybiBzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF0udGFyZ2V0UHJvcGVydHlWYWx1ZTt9KTtzZWxlY3RvckVsLl9fZGVmaW5lR2V0dGVyX18oJ3NlbGVjdGVkSXRlbScsZnVuY3Rpb24odil7cmV0dXJuIHNlbGVjdG9yRWwuY2hpbGRyZW5bc2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4XS5pdGVtO30pO3NlbGVjdG9yRWwuX19kZWZpbmVTZXR0ZXJfXygnc2VsZWN0ZWRWYWx1ZScsZnVuY3Rpb24odil7Zm9yKGxldCBpPTA7aTxzZWxlY3RvckVsLmNoaWxkcmVuLmxlbmd0aDtpKyspe2NvbnN0IHZhbHVlPXNlbGVjdG9yRWwuY2hpbGRyZW5baV0udGFyZ2V0UHJvcGVydHlWYWx1ZTtpZih2YWx1ZXNFcXVhbCh2YWx1ZSx2KSl7Y29uc3QgY2hhbmdlZD1zZWxlY3RvckVsLnNlbGVjdGVkSW5kZXghPT1pO2lmKGNoYW5nZWQpe3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleD1pO29uQ2hhbmdlKCk7fQpyZXR1cm47fX0KdGhyb3cgbmV3IEVycm9yKCdOb3QgYSB2YWxpZCB2YWx1ZScpO30pO2NvbnN0IGluaXRpYWxWYWx1ZT10ci5iLlNldHRpbmdzLmdldChzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUsb3B0X25hbWVzcGFjZSk7bGV0IGRpZFNldD1mYWxzZTtmb3IobGV0IGk9MDtpPHNlbGVjdG9yRWwuY2hpbGRyZW4ubGVuZ3RoO2krKyl7aWYodmFsdWVzRXF1YWwoc2VsZWN0b3JFbC5jaGlsZHJlbltpXS50YXJnZXRQcm9wZXJ0eVZhbHVlLGluaXRpYWxWYWx1ZSkpe2RpZFNldD10cnVlO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPWluaXRpYWxWYWx1ZTtzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXg9aTticmVhazt9fQppZighZGlkU2V0KXtzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXg9ZGVmYXVsdFZhbHVlSW5kZXg7dGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09ZGVmYXVsdFZhbHVlO30KcmV0dXJuIHNlbGVjdG9yRWw7fQpmdW5jdGlvbiBjcmVhdGVFZGl0Q2F0ZWdvcnlTcGFuKG9wdGlvbkdyb3VwRWwsdGFyZ2V0RWwpe2NvbnN0IHNwYW5FbD1jcmVhdGVTcGFuKHtjbGFzc05hbWU6J2VkaXQtY2F0ZWdvcmllcyd9KTtQb2x5bWVyLmRvbShzcGFuRWwpLnRleHRDb250ZW50PSdFZGl0IGNhdGVnb3JpZXMnO1BvbHltZXIuZG9tKHNwYW5FbCkuY2xhc3NMaXN0LmFkZCgnbGFiZWxlZC1vcHRpb24nKTtzcGFuRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7dGFyZ2V0RWwub25DbGlja0VkaXRDYXRlZ29yaWVzKCk7fSk7cmV0dXJuIHNwYW5FbDt9CmZ1bmN0aW9uIGNyZWF0ZU9wdGlvbkdyb3VwKHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXksZGVmYXVsdFZhbHVlLGl0ZW1zKXtmdW5jdGlvbiBvbkNoYW5nZSgpe2xldCB2YWx1ZT1bXTtpZih0aGlzLnZhbHVlLmxlbmd0aCl7dmFsdWU9dGhpcy52YWx1ZS5zcGxpdCgnLCcpO30KdHIuYi5TZXR0aW5ncy5zZXQoc2V0dGluZ3NLZXksdmFsdWUpO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPXZhbHVlO30KY29uc3Qgb3B0aW9uR3JvdXBFbD1jcmVhdGVTcGFuKHtjbGFzc05hbWU6J2xhYmVsZWQtb3B0aW9uLWdyb3VwJ30pO2NvbnN0IGluaXRpYWxWYWx1ZT10ci5iLlNldHRpbmdzLmdldChzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUpO2ZvcihsZXQgaT0wO2k8aXRlbXMubGVuZ3RoOysraSl7Y29uc3QgaXRlbT1pdGVtc1tpXTtjb25zdCBpZD0nY2F0ZWdvcnktcHJlc2V0LScraXRlbS5sYWJlbC5yZXBsYWNlKC8gL2csJy0nKTtjb25zdCByYWRpb0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7cmFkaW9FbC50eXBlPSdyYWRpbyc7UG9seW1lci5kb20ocmFkaW9FbCkuc2V0QXR0cmlidXRlKCdpZCcsaWQpO1BvbHltZXIuZG9tKHJhZGlvRWwpLnNldEF0dHJpYnV0ZSgnbmFtZScsJ2NhdGVnb3J5LXByZXNldHMtZ3JvdXAnKTtQb2x5bWVyLmRvbShyYWRpb0VsKS5zZXRBdHRyaWJ1dGUoJ3ZhbHVlJyxpdGVtLnZhbHVlKTtyYWRpb0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsb25DaGFuZ2UuYmluZChyYWRpb0VsLHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXkpKTtpZih2YWx1ZXNFcXVhbChpbml0aWFsVmFsdWUsaXRlbS52YWx1ZSkpe3JhZGlvRWwuY2hlY2tlZD10cnVlO30KY29uc3QgbGFiZWxFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PWl0ZW0ubGFiZWw7UG9seW1lci5kb20obGFiZWxFbCkuc2V0QXR0cmlidXRlKCdmb3InLGlkKTtjb25zdCBzcGFuRWw9Y3JlYXRlU3Bhbih7Y2xhc3NOYW1lOidsYWJlbGVkLW9wdGlvbid9KTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHJhZGlvRWwpO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQobGFiZWxFbCk7c3BhbkVsLl9fZGVmaW5lU2V0dGVyX18oJ2NoZWNrZWQnLGZ1bmN0aW9uKG9wdF9ib29sKXtjb25zdCBjaGFuZ2VkPXJhZGlvRWwuY2hlY2tlZCE9PSghIW9wdF9ib29sKTtpZighY2hhbmdlZClyZXR1cm47cmFkaW9FbC5jaGVja2VkPSEhb3B0X2Jvb2w7b25DaGFuZ2UoKTt9KTtzcGFuRWwuX19kZWZpbmVHZXR0ZXJfXygnY2hlY2tlZCcsZnVuY3Rpb24oKXtyZXR1cm4gcmFkaW9FbC5jaGVja2VkO30pO1BvbHltZXIuZG9tKG9wdGlvbkdyb3VwRWwpLmFwcGVuZENoaWxkKHNwYW5FbCk7fQpQb2x5bWVyLmRvbShvcHRpb25Hcm91cEVsKS5hcHBlbmRDaGlsZChjcmVhdGVFZGl0Q2F0ZWdvcnlTcGFuKG9wdGlvbkdyb3VwRWwsdGFyZ2V0RWwpKTtpZighaW5pdGlhbFZhbHVlLmxlbmd0aCl7UG9seW1lci5kb20ob3B0aW9uR3JvdXBFbCkuY2xhc3NMaXN0LmFkZCgnY2F0ZWdvcmllcy1leHBhbmRlZCcpO30KdGFyZ2V0RWxbdGFyZ2V0RWxQcm9wZXJ0eV09aW5pdGlhbFZhbHVlO3JldHVybiBvcHRpb25Hcm91cEVsO30KbGV0IG5leHRDaGVja2JveElkPTE7ZnVuY3Rpb24gY3JlYXRlQ2hlY2tCb3godGFyZ2V0RWwsdGFyZ2V0RWxQcm9wZXJ0eSxzZXR0aW5nc0tleSxkZWZhdWx0VmFsdWUsbGFiZWwsb3B0X2NoYW5nZUNiKXtjb25zdCBidXR0b25FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO2J1dHRvbkVsLnR5cGU9J2NoZWNrYm94JztsZXQgaW5pdGlhbFZhbHVlPWRlZmF1bHRWYWx1ZTtpZihzZXR0aW5nc0tleSE9PXVuZGVmaW5lZCl7aW5pdGlhbFZhbHVlPXRyLmIuU2V0dGluZ3MuZ2V0KHNldHRpbmdzS2V5LGRlZmF1bHRWYWx1ZSk7YnV0dG9uRWwuY2hlY2tlZD0hIWluaXRpYWxWYWx1ZTt9CmlmKHRhcmdldEVsKXt0YXJnZXRFbFt0YXJnZXRFbFByb3BlcnR5XT1pbml0aWFsVmFsdWU7fQpmdW5jdGlvbiBvbkNoYW5nZSgpe2lmKHNldHRpbmdzS2V5IT09dW5kZWZpbmVkKXt0ci5iLlNldHRpbmdzLnNldChzZXR0aW5nc0tleSxidXR0b25FbC5jaGVja2VkKTt9CmlmKHRhcmdldEVsKXt0YXJnZXRFbFt0YXJnZXRFbFByb3BlcnR5XT1idXR0b25FbC5jaGVja2VkO30KaWYob3B0X2NoYW5nZUNiKXtvcHRfY2hhbmdlQ2IuY2FsbCgpO319CmJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsb25DaGFuZ2UpO2NvbnN0IGlkPScjY2hlY2tib3gtJytuZXh0Q2hlY2tib3hJZCsrO2NvbnN0IHNwYW5FbD1jcmVhdGVTcGFuKCk7c3BhbkVsLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3NwYW5FbC5zdHlsZS53aGl0ZVNwYWNlPSdub3dyYXAnO1BvbHltZXIuZG9tKGJ1dHRvbkVsKS5zZXRBdHRyaWJ1dGUoJ2lkJyxpZCk7Y29uc3QgbGFiZWxFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsYWJlbCcpO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PWxhYmVsO1BvbHltZXIuZG9tKGxhYmVsRWwpLnNldEF0dHJpYnV0ZSgnZm9yJyxpZCk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZChidXR0b25FbCk7UG9seW1lci5kb20oc3BhbkVsKS5hcHBlbmRDaGlsZChsYWJlbEVsKTtzcGFuRWwuX19kZWZpbmVTZXR0ZXJfXygnY2hlY2tlZCcsZnVuY3Rpb24ob3B0X2Jvb2wpe2NvbnN0IGNoYW5nZWQ9YnV0dG9uRWwuY2hlY2tlZCE9PSghIW9wdF9ib29sKTtpZighY2hhbmdlZClyZXR1cm47YnV0dG9uRWwuY2hlY2tlZD0hIW9wdF9ib29sO29uQ2hhbmdlKCk7fSk7c3BhbkVsLl9fZGVmaW5lR2V0dGVyX18oJ2NoZWNrZWQnLGZ1bmN0aW9uKCl7cmV0dXJuIGJ1dHRvbkVsLmNoZWNrZWQ7fSk7cmV0dXJuIHNwYW5FbDt9CmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbihsYWJlbCxvcHRfY2FsbGJhY2ssb3B0X3RoaXMpe2NvbnN0IGJ1dHRvbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2lucHV0Jyk7YnV0dG9uRWwudHlwZT0nYnV0dG9uJztidXR0b25FbC52YWx1ZT1sYWJlbDtmdW5jdGlvbiBvbkNsaWNrKCl7b3B0X2NhbGxiYWNrLmNhbGwob3B0X3RoaXN8fGJ1dHRvbkVsKTt9CmlmKG9wdF9jYWxsYmFjayl7YnV0dG9uRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLG9uQ2xpY2spO30KcmV0dXJuIGJ1dHRvbkVsO30KZnVuY3Rpb24gY3JlYXRlVGV4dElucHV0KHRhcmdldEVsLHRhcmdldEVsUHJvcGVydHksc2V0dGluZ3NLZXksZGVmYXVsdFZhbHVlKXtjb25zdCBpbml0aWFsVmFsdWU9dHIuYi5TZXR0aW5ncy5nZXQoc2V0dGluZ3NLZXksZGVmYXVsdFZhbHVlKTtjb25zdCBlbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO2VsLnR5cGU9J3RleHQnO2Z1bmN0aW9uIG9uQ2hhbmdlKGUpe3RyLmIuU2V0dGluZ3Muc2V0KHNldHRpbmdzS2V5LGVsLnZhbHVlKTt0YXJnZXRFbFt0YXJnZXRFbFByb3BlcnR5XT1lbC52YWx1ZTt9CmVsLmFkZEV2ZW50TGlzdGVuZXIoJ2lucHV0JyxvbkNoYW5nZSk7ZWwudmFsdWU9aW5pdGlhbFZhbHVlO3RhcmdldEVsW3RhcmdldEVsUHJvcGVydHldPWluaXRpYWxWYWx1ZTtyZXR1cm4gZWw7fQpmdW5jdGlvbiBpc0VsZW1lbnRBdHRhY2hlZFRvRG9jdW1lbnQoZWwpe2xldCBjdXI9ZWw7d2hpbGUoUG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlKXtjdXI9UG9seW1lci5kb20oY3VyKS5wYXJlbnROb2RlO30KcmV0dXJuKGN1cj09PWVsLm93bmVyRG9jdW1lbnR8fGN1ci5ub2RlTmFtZT09PScjZG9jdW1lbnQtZnJhZ21lbnQnKTt9CmZ1bmN0aW9uIGFzSFRNTE9yVGV4dE5vZGUodmFsdWUsb3B0X293bmVyRG9jdW1lbnQpe2lmKHZhbHVlIGluc3RhbmNlb2YgTm9kZSl7cmV0dXJuIHZhbHVlO30KY29uc3Qgb3duZXJEb2N1bWVudD1vcHRfb3duZXJEb2N1bWVudHx8ZG9jdW1lbnQ7cmV0dXJuIG93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodmFsdWUpO30KcmV0dXJue2NyZWF0ZVNwYW4sY3JlYXRlTGluayxjcmVhdGVEaXYsY3JlYXRlU2NvcGVkU3R5bGUsY3JlYXRlU2VsZWN0b3IsY3JlYXRlT3B0aW9uR3JvdXAsY3JlYXRlQ2hlY2tCb3gsY3JlYXRlQnV0dG9uLGNyZWF0ZVRleHRJbnB1dCxpc0VsZW1lbnRBdHRhY2hlZFRvRG9jdW1lbnQsYXNIVE1MT3JUZXh0Tm9kZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBlbGlkZWRUaXRsZUNhY2hlRGljdD1uZXcgTWFwKCk7Y29uc3QgZWxpZGVkVGl0bGVDYWNoZT1uZXcgRWxpZGVkVGl0bGVDYWNoZSgpO2Z1bmN0aW9uIEVsaWRlZFRpdGxlQ2FjaGUoKXt0aGlzLnRleHRXaWR0aE1hcD1uZXcgTWFwKCk7fQpFbGlkZWRUaXRsZUNhY2hlLnByb3RvdHlwZT17Z2V0KGN0eCxwaXhXaWR0aCx0aXRsZSx3aWR0aCxzbGljZUR1cmF0aW9uKXtsZXQgZWxpZGVkRGljdD1lbGlkZWRUaXRsZUNhY2hlRGljdC5nZXQodGl0bGUpO2lmKCFlbGlkZWREaWN0KXtlbGlkZWREaWN0PW5ldyBNYXAoKTtlbGlkZWRUaXRsZUNhY2hlRGljdC5zZXQodGl0bGUsZWxpZGVkRGljdCk7fQpsZXQgZWxpZGVkRGljdEZvclBpeFdpZHRoPWVsaWRlZERpY3QuZ2V0KHBpeFdpZHRoKTtpZighZWxpZGVkRGljdEZvclBpeFdpZHRoKXtlbGlkZWREaWN0LnNldChwaXhXaWR0aCxuZXcgTWFwKCkpO2VsaWRlZERpY3RGb3JQaXhXaWR0aD1lbGlkZWREaWN0LmdldChwaXhXaWR0aCk7fQpsZXQgc3RyaW5nV2lkdGhQYWlyPWVsaWRlZERpY3RGb3JQaXhXaWR0aC5nZXQoc2xpY2VEdXJhdGlvbik7aWYoc3RyaW5nV2lkdGhQYWlyPT09dW5kZWZpbmVkKXtsZXQgbmV3dGl0bGU9dGl0bGU7bGV0IGVsaWRlZD1mYWxzZTt3aGlsZSh0aGlzLmxhYmVsV2lkdGhXb3JsZChjdHgsbmV3dGl0bGUscGl4V2lkdGgpPnNsaWNlRHVyYXRpb24pe2lmKG5ld3RpdGxlLmxlbmd0aCowLjc1PDEpYnJlYWs7bmV3dGl0bGU9bmV3dGl0bGUuc3Vic3RyaW5nKDAsbmV3dGl0bGUubGVuZ3RoKjAuNzUpO2VsaWRlZD10cnVlO30KaWYoZWxpZGVkJiZuZXd0aXRsZS5sZW5ndGg+Myl7bmV3dGl0bGU9bmV3dGl0bGUuc3Vic3RyaW5nKDAsbmV3dGl0bGUubGVuZ3RoLTMpKycuLi4nO30Kc3RyaW5nV2lkdGhQYWlyPW5ldyBFbGlkZWRTdHJpbmdXaWR0aFBhaXIobmV3dGl0bGUsdGhpcy5sYWJlbFdpZHRoKGN0eCxuZXd0aXRsZSkpO2VsaWRlZERpY3RGb3JQaXhXaWR0aC5zZXQoc2xpY2VEdXJhdGlvbixzdHJpbmdXaWR0aFBhaXIpO30KcmV0dXJuIHN0cmluZ1dpZHRoUGFpcjt9LHF1aWNrTWVhc3VyZVRleHRfKGN0eCx0ZXh0KXtsZXQgdz10aGlzLnRleHRXaWR0aE1hcC5nZXQodGV4dCk7aWYoIXcpe3c9Y3R4Lm1lYXN1cmVUZXh0KHRleHQpLndpZHRoO3RoaXMudGV4dFdpZHRoTWFwLnNldCh0ZXh0LHcpO30KcmV0dXJuIHc7fSxsYWJlbFdpZHRoKGN0eCx0aXRsZSl7cmV0dXJuIHRoaXMucXVpY2tNZWFzdXJlVGV4dF8oY3R4LHRpdGxlKSsyO30sbGFiZWxXaWR0aFdvcmxkKGN0eCx0aXRsZSxwaXhXaWR0aCl7cmV0dXJuIHRoaXMubGFiZWxXaWR0aChjdHgsdGl0bGUpKnBpeFdpZHRoO319O2Z1bmN0aW9uIEVsaWRlZFN0cmluZ1dpZHRoUGFpcihzdHJpbmcsd2lkdGgpe3RoaXMuc3RyaW5nPXN0cmluZzt0aGlzLndpZHRoPXdpZHRoO30KcmV0dXJue0VsaWRlZFRpdGxlQ2FjaGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBjb2xvcnM9Q29sb3JTY2hlbWUuY29sb3JzO2NvbnN0IGNvbG9yc0FzU3RyaW5ncz1Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3M7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgRXZlbnRQcmVzZW50ZXI9e2dldFNlbGVjdGFibGVJdGVtQ29sb3JBc1N0cmluZyhpdGVtKXtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhpdGVtKTtjb25zdCBjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGl0ZW0uY29sb3JJZCxvZmZzZXQpO3JldHVybiBjb2xvcnNBc1N0cmluZ3NbY29sb3JJZF07fSxnZXRDb2xvcklkT2Zmc2V0XyhldmVudCl7cmV0dXJuIGV2ZW50LnNlbGVjdGlvblN0YXRlO30sZ2V0VGV4dENvbG9yKGV2ZW50KXtpZihldmVudC5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLkRJTU1FRCl7cmV0dXJuJ3JnYig2MCw2MCw2MCknO30KcmV0dXJuJ3JnYigwLDAsMCknO30sZ2V0U2xpY2VDb2xvcklkKHNsaWNlKXtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhzbGljZSk7cmV0dXJuIENvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKHNsaWNlLmNvbG9ySWQsb2Zmc2V0KTt9LGdldFNsaWNlQWxwaGEoc2xpY2UsYXN5bmMpe2xldCBhbHBoYT0xO2lmKGFzeW5jKXthbHBoYSo9MC4zO30KcmV0dXJuIGFscGhhO30sZ2V0SW5zdGFudFNsaWNlQ29sb3IoaW5zdGFudCl7Y29uc3Qgb2Zmc2V0PXRoaXMuZ2V0Q29sb3JJZE9mZnNldF8oaW5zdGFudCk7Y29uc3QgY29sb3JJZD1Db2xvclNjaGVtZS5nZXRWYXJpYW50Q29sb3JJZChpbnN0YW50LmNvbG9ySWQsb2Zmc2V0KTtyZXR1cm4gY29sb3JzW2NvbG9ySWRdLnRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUoMS4wKTt9LGdldE9iamVjdEluc3RhbmNlQ29sb3IoaW5zdGFuY2Upe2NvbnN0IG9mZnNldD10aGlzLmdldENvbG9ySWRPZmZzZXRfKGluc3RhbmNlKTtjb25zdCBjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGluc3RhbmNlLmNvbG9ySWQsb2Zmc2V0KTtyZXR1cm4gY29sb3JzW2NvbG9ySWRdLnRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUoMC4yNSk7fSxnZXRPYmplY3RTbmFwc2hvdENvbG9yKHNuYXBzaG90KXtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhzbmFwc2hvdCk7bGV0IGNvbG9ySWQ9c25hcHNob3Qub2JqZWN0SW5zdGFuY2UuY29sb3JJZDtjb2xvcklkPUNvbG9yU2NoZW1lLmdldFZhcmlhbnRDb2xvcklkKGNvbG9ySWQsb2Zmc2V0KTtyZXR1cm4gY29sb3JzW2NvbG9ySWRdO30sZ2V0Q291bnRlclNlcmllc0NvbG9yKGNvbG9ySWQsc2VsZWN0aW9uU3RhdGUsb3B0X2FscGhhTXVsdGlwbGllcil7Y29uc3QgZXZlbnQ9e3NlbGVjdGlvblN0YXRlfTtjb25zdCBvZmZzZXQ9dGhpcy5nZXRDb2xvcklkT2Zmc2V0XyhldmVudCk7Y29uc3QgYz1jb2xvcnNbQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoY29sb3JJZCxvZmZzZXQpXTtyZXR1cm4gYy50b1N0cmluZ1dpdGhBbHBoYU92ZXJyaWRlKG9wdF9hbHBoYU11bHRpcGxpZXIhPT11bmRlZmluZWQ/b3B0X2FscGhhTXVsdGlwbGllcjoxLjApO30sZ2V0QmFyU25hcHNob3RDb2xvcihzbmFwc2hvdCxvZmZzZXQpe2NvbnN0IHNuYXBzaG90T2Zmc2V0PXRoaXMuZ2V0Q29sb3JJZE9mZnNldF8oc25hcHNob3QpO2xldCBjb2xvcklkPXNuYXBzaG90Lm9iamVjdEluc3RhbmNlLmNvbG9ySWQ7Y29sb3JJZD1Db2xvclNjaGVtZS5nZXRBbm90aGVyQ29sb3JJZChjb2xvcklkLG9mZnNldCk7Y29sb3JJZD1Db2xvclNjaGVtZS5nZXRWYXJpYW50Q29sb3JJZChjb2xvcklkLHNuYXBzaG90T2Zmc2V0KTtyZXR1cm4gY29sb3JzW2NvbG9ySWRdLnRvU3RyaW5nV2l0aEFscGhhT3ZlcnJpZGUoMS4wKTt9fTtyZXR1cm57RXZlbnRQcmVzZW50ZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgZWxpZGVkVGl0bGVDYWNoZT1uZXcgdHIudWkuYi5FbGlkZWRUaXRsZUNhY2hlKCk7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBjb2xvcnNBc1N0cmluZ3M9Q29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzO2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7Y29uc3QgYmxhY2tDb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ2JsYWNrJyk7Y29uc3QgVEhJTl9TTElDRV9IRUlHSFQ9NDtjb25zdCBTTElDRV9XQUlUSU5HX1dJRFRIX0RSQVdfVEhSRVNIT0xEPTM7Y29uc3QgU0xJQ0VfQUNUSVZFX1dJRFRIX0RSQVdfVEhSRVNIT0xEPTE7Y29uc3QgU0hPVUxEX0VMSURFX1RFWFQ9dHJ1ZTtmdW5jdGlvbiBkcmF3TGluZShjdHgseDEseTEseDIseTIpe2N0eC5tb3ZlVG8oeDEseTEpO2N0eC5saW5lVG8oeDIseTIpO30KZnVuY3Rpb24gZHJhd1RyaWFuZ2xlKGN0eCx4MSx5MSx4Mix5Mix4Myx5Myl7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeDEseTEpO2N0eC5saW5lVG8oeDIseTIpO2N0eC5saW5lVG8oeDMseTMpO2N0eC5jbG9zZVBhdGgoKTt9CmZ1bmN0aW9uIGRyYXdBcnJvdyhjdHgseDEseTEseDIseTIsYXJyb3dMZW5ndGgsYXJyb3dXaWR0aCl7Y29uc3QgZHg9eDIteDE7Y29uc3QgZHk9eTIteTE7Y29uc3QgbGVuPU1hdGguc3FydChkeCpkeCtkeSpkeSk7Y29uc3QgcGVyYz0obGVuLWFycm93TGVuZ3RoKS9sZW47Y29uc3QgYng9eDErcGVyYypkeDtjb25zdCBieT15MStwZXJjKmR5O2NvbnN0IHV4PWR4L2xlbjtjb25zdCB1eT1keS9sZW47Y29uc3QgYXg9dXkqYXJyb3dXaWR0aDtjb25zdCBheT0tdXgqYXJyb3dXaWR0aDtjdHguYmVnaW5QYXRoKCk7ZHJhd0xpbmUoY3R4LHgxLHkxLHgyLHkyKTtjdHguc3Ryb2tlKCk7ZHJhd1RyaWFuZ2xlKGN0eCxieCtheCxieStheSx4Mix5MixieC1heCxieS1heSk7Y3R4LmZpbGwoKTt9CmZ1bmN0aW9uIGRyYXdTbGljZXMoY3R4LGR0LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHNsaWNlcyxhc3luYyl7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBoZWlnaHQ9dmlld0hlaWdodCpwaXhlbFJhdGlvO2NvbnN0IHZpZXdMPWR0LnhXb3JsZFRvVmlldyh2aWV3TFdvcmxkKTtjb25zdCB2aWV3Uj1kdC54V29ybGRUb1ZpZXcodmlld1JXb3JsZCk7bGV0IGRhcmtSZWN0SGVpZ2h0PVRISU5fU0xJQ0VfSEVJR0hUKnBpeGVsUmF0aW87aWYoaGVpZ2h0PGRhcmtSZWN0SGVpZ2h0KXtkYXJrUmVjdEhlaWdodD0wO30KY29uc3QgbGlnaHRSZWN0SGVpZ2h0PWhlaWdodC1kYXJrUmVjdEhlaWdodDtjdHguc2F2ZSgpO2NvbnN0IHJlY3Q9bmV3IHRyLnVpLmIuRmFzdFJlY3RSZW5kZXJlcihjdHgsdmlld0wsdmlld1IsMiwyLGNvbG9yc0FzU3RyaW5ncyk7cmVjdC5zZXRZYW5kSCgwLGhlaWdodCk7Y29uc3QgbG93U2xpY2U9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHNsaWNlcyxmdW5jdGlvbihzbGljZSl7cmV0dXJuIHNsaWNlLnN0YXJ0K3NsaWNlLmR1cmF0aW9uO30sdmlld0xXb3JsZCk7bGV0IGhhZFRvcExldmVsPWZhbHNlO2ZvcihsZXQgaT1sb3dTbGljZTtpPHNsaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzbGljZT1zbGljZXNbaV07Y29uc3QgeD1zbGljZS5zdGFydDtpZih4PnZpZXdSV29ybGQpYnJlYWs7Y29uc3QgeFZpZXc9ZHQueFdvcmxkVG9WaWV3KHgpO2xldCB3Vmlldz0xO2lmKHNsaWNlLmR1cmF0aW9uPjApe2NvbnN0IHc9TWF0aC5tYXgoc2xpY2UuZHVyYXRpb24sMC4wMDAwMDEpO3dWaWV3PU1hdGgubWF4KGR0LnhXb3JsZFZlY3RvclRvVmlldyh3KSwxKTt9CmNvbnN0IGNvbG9ySWQ9RXZlbnRQcmVzZW50ZXIuZ2V0U2xpY2VDb2xvcklkKHNsaWNlKTtjb25zdCBhbHBoYT1FdmVudFByZXNlbnRlci5nZXRTbGljZUFscGhhKHNsaWNlLGFzeW5jKTtjb25zdCBsaWdodEFscGhhPWFscGhhKjAuNzA7aWYoYXN5bmMmJnNsaWNlLmlzVG9wTGV2ZWwpe3JlY3Quc2V0WWFuZEgoMyxoZWlnaHQtMyk7aGFkVG9wTGV2ZWw9dHJ1ZTt9ZWxzZXtyZWN0LnNldFlhbmRIKDAsaGVpZ2h0KTt9CmlmKCFzbGljZS5jcHVEdXJhdGlvbil7cmVjdC5maWxsUmVjdCh4Vmlldyx3Vmlldyxjb2xvcklkLGFscGhhKTtjb250aW51ZTt9CmxldCBhY3RpdmVXaWR0aD13Vmlldyooc2xpY2UuY3B1RHVyYXRpb24vc2xpY2UuZHVyYXRpb24pO2xldCB3YWl0aW5nV2lkdGg9d1ZpZXctYWN0aXZlV2lkdGg7aWYoYWN0aXZlV2lkdGg8U0xJQ0VfQUNUSVZFX1dJRFRIX0RSQVdfVEhSRVNIT0xEKXthY3RpdmVXaWR0aD0wO3dhaXRpbmdXaWR0aD13Vmlldzt9CmlmKHdhaXRpbmdXaWR0aDxTTElDRV9XQUlUSU5HX1dJRFRIX0RSQVdfVEhSRVNIT0xEKXthY3RpdmVXaWR0aD13Vmlldzt3YWl0aW5nV2lkdGg9MDt9CmlmKGFjdGl2ZVdpZHRoPjApe3JlY3QuZmlsbFJlY3QoeFZpZXcsYWN0aXZlV2lkdGgsY29sb3JJZCxhbHBoYSk7fQppZih3YWl0aW5nV2lkdGg+MCl7cmVjdC5zZXRZYW5kSCgwLGxpZ2h0UmVjdEhlaWdodCk7cmVjdC5maWxsUmVjdCh4VmlldythY3RpdmVXaWR0aC0xLHdhaXRpbmdXaWR0aCsxLGNvbG9ySWQsbGlnaHRBbHBoYSk7cmVjdC5zZXRZYW5kSChsaWdodFJlY3RIZWlnaHQsZGFya1JlY3RIZWlnaHQpO3JlY3QuZmlsbFJlY3QoeFZpZXcrYWN0aXZlV2lkdGgtMSx3YWl0aW5nV2lkdGgrMSxjb2xvcklkLGFscGhhKTtyZWN0LnNldFlhbmRIKDAsaGVpZ2h0KTt9fQpyZWN0LmZsdXNoKCk7aWYoYXN5bmMmJmhhZFRvcExldmVsKXtyZWN0LnNldFlhbmRIKDIsMSk7Zm9yKGxldCBpPWxvd1NsaWNlO2k8c2xpY2VzLmxlbmd0aDsrK2kpe2NvbnN0IHNsaWNlPXNsaWNlc1tpXTtjb25zdCB4PXNsaWNlLnN0YXJ0O2lmKHg+dmlld1JXb3JsZClicmVhaztpZighc2xpY2UuaXNUb3BMZXZlbCljb250aW51ZTtjb25zdCB4Vmlldz1kdC54V29ybGRUb1ZpZXcoeCk7bGV0IHdWaWV3PTE7aWYoc2xpY2UuZHVyYXRpb24+MCl7Y29uc3Qgdz1NYXRoLm1heChzbGljZS5kdXJhdGlvbiwwLjAwMDAwMSk7d1ZpZXc9TWF0aC5tYXgoZHQueFdvcmxkVmVjdG9yVG9WaWV3KHcpLDEpO30KcmVjdC5maWxsUmVjdCh4Vmlldyx3VmlldyxibGFja0NvbG9ySWQsMC43KTt9CnJlY3QuZmx1c2goKTt9CmN0eC5yZXN0b3JlKCk7fQpmdW5jdGlvbiBkcmF3SW5zdGFudFNsaWNlc0FzTGluZXMoY3R4LGR0LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHNsaWNlcyxsaW5lV2lkdGhJblBpeGVscyl7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBoZWlnaHQ9dmlld0hlaWdodCpwaXhlbFJhdGlvO2N0eC5zYXZlKCk7Y3R4LmxpbmVXaWR0aD1saW5lV2lkdGhJblBpeGVscypwaXhlbFJhdGlvO2NvbnN0IGxvd1NsaWNlPXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShzbGljZXMsZnVuY3Rpb24oc2xpY2Upe3JldHVybiBzbGljZS5zdGFydDt9LHZpZXdMV29ybGQpO2ZvcihsZXQgaT1sb3dTbGljZTtpPHNsaWNlcy5sZW5ndGg7KytpKXtjb25zdCBzbGljZT1zbGljZXNbaV07Y29uc3QgeD1zbGljZS5zdGFydDtpZih4PnZpZXdSV29ybGQpYnJlYWs7Y3R4LnN0cm9rZVN0eWxlPUV2ZW50UHJlc2VudGVyLmdldEluc3RhbnRTbGljZUNvbG9yKHNsaWNlKTtjb25zdCB4Vmlldz1kdC54V29ybGRUb1ZpZXcoeCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8oeFZpZXcsMCk7Y3R4LmxpbmVUbyh4VmlldyxoZWlnaHQpO2N0eC5zdHJva2UoKTt9CmN0eC5yZXN0b3JlKCk7fQpmdW5jdGlvbiBkcmF3TGFiZWxzKGN0eCxkdCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsc2xpY2VzLGFzeW5jLGZvbnRTaXplLHlPZmZzZXQpe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgcGl4V2lkdGg9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKDEpO2N0eC5zYXZlKCk7Y3R4LnRleHRBbGlnbj0nY2VudGVyJztjdHgudGV4dEJhc2VsaW5lPSd0b3AnO2N0eC5mb250PShmb250U2l6ZSpwaXhlbFJhdGlvKSsncHggc2Fucy1zZXJpZic7aWYoYXN5bmMpe2N0eC5mb250PSdpdGFsaWMgJytjdHguZm9udDt9CmNvbnN0IGNZPXlPZmZzZXQqcGl4ZWxSYXRpbztjb25zdCBsb3dTbGljZT10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoc2xpY2VzLGZ1bmN0aW9uKHNsaWNlKXtyZXR1cm4gc2xpY2Uuc3RhcnQrc2xpY2UuZHVyYXRpb247fSx2aWV3TFdvcmxkKTtjb25zdCBxdWlja0Rpc2NhcmRUaHJlc2hvbGQ9cGl4V2lkdGgqMjA7Zm9yKGxldCBpPWxvd1NsaWNlO2k8c2xpY2VzLmxlbmd0aDsrK2kpe2NvbnN0IHNsaWNlPXNsaWNlc1tpXTtpZihzbGljZS5zdGFydD52aWV3UldvcmxkKWJyZWFrO2lmKHNsaWNlLmR1cmF0aW9uPD1xdWlja0Rpc2NhcmRUaHJlc2hvbGQpY29udGludWU7Y29uc3QgeExlZnRDbGlwcGVkPU1hdGgubWF4KHNsaWNlLnN0YXJ0LHZpZXdMV29ybGQpO2NvbnN0IHhSaWdodENsaXBwZWQ9TWF0aC5taW4oc2xpY2Uuc3RhcnQrc2xpY2UuZHVyYXRpb24sdmlld1JXb3JsZCk7Y29uc3QgdmlzaWJsZVdpZHRoPXhSaWdodENsaXBwZWQteExlZnRDbGlwcGVkO2NvbnN0IHRpdGxlPXNsaWNlLnRpdGxlKwooc2xpY2UuZGlkTm90RmluaXNoPycgKERpZCBOb3QgRmluaXNoKSc6JycpO2xldCBkcmF3blRpdGxlPXRpdGxlO2xldCBkcmF3bldpZHRoPWVsaWRlZFRpdGxlQ2FjaGUubGFiZWxXaWR0aChjdHgsZHJhd25UaXRsZSk7Y29uc3QgZnVsbExhYmVsV2lkdGg9ZWxpZGVkVGl0bGVDYWNoZS5sYWJlbFdpZHRoV29ybGQoY3R4LGRyYXduVGl0bGUscGl4V2lkdGgpO2lmKFNIT1VMRF9FTElERV9URVhUJiZmdWxsTGFiZWxXaWR0aD52aXNpYmxlV2lkdGgpe2NvbnN0IGVsaWRlZFZhbHVlcz1lbGlkZWRUaXRsZUNhY2hlLmdldChjdHgscGl4V2lkdGgsZHJhd25UaXRsZSxkcmF3bldpZHRoLHZpc2libGVXaWR0aCk7ZHJhd25UaXRsZT1lbGlkZWRWYWx1ZXMuc3RyaW5nO2RyYXduV2lkdGg9ZWxpZGVkVmFsdWVzLndpZHRoO30KaWYoZHJhd25XaWR0aCpwaXhXaWR0aDx2aXNpYmxlV2lkdGgpe2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0VGV4dENvbG9yKHNsaWNlKTtjb25zdCBjWD1kdC54V29ybGRUb1ZpZXcoKHhMZWZ0Q2xpcHBlZCt4UmlnaHRDbGlwcGVkKS8yKTtjdHguZmlsbFRleHQoZHJhd25UaXRsZSxjWCxjWSxkcmF3bldpZHRoKTt9fQpjdHgucmVzdG9yZSgpO30KcmV0dXJue2RyYXdTbGljZXMsZHJhd0luc3RhbnRTbGljZXNBc0xpbmVzLGRyYXdMYWJlbHMsZHJhd0xpbmUsZHJhd1RyaWFuZ2xlLGRyYXdBcnJvdyxlbGlkZWRUaXRsZUNhY2hlXzplbGlkZWRUaXRsZUNhY2hlLFRISU5fU0xJQ0VfSEVJR0hULH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aScsZnVuY3Rpb24oKXtmdW5jdGlvbiBUaW1lbGluZURpc3BsYXlUcmFuc2Zvcm0ob3B0X3RoYXQpe2lmKG9wdF90aGF0KXt0aGlzLnNldChvcHRfdGhhdCk7cmV0dXJuO30KdGhpcy5zY2FsZVg9MTt0aGlzLnBhblg9MDt0aGlzLnBhblk9MDt9ClRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybS5wcm90b3R5cGU9e3NldCh0aGF0KXt0aGlzLnNjYWxlWD10aGF0LnNjYWxlWDt0aGlzLnBhblg9dGhhdC5wYW5YO3RoaXMucGFuWT10aGF0LnBhblk7fSxjbG9uZSgpe3JldHVybiBuZXcgVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtKHRoaXMpO30sZXF1YWxzKHRoYXQpe2xldCBlcT10cnVlO2lmKHRoYXQ9PT11bmRlZmluZWR8fHRoYXQ9PT1udWxsKXtyZXR1cm4gZmFsc2U7fQplcSY9dGhpcy5wYW5YPT09dGhhdC5wYW5YO2VxJj10aGlzLnBhblk9PT10aGF0LnBhblk7ZXEmPXRoaXMuc2NhbGVYPT09dGhhdC5zY2FsZVg7cmV0dXJuISFlcTt9LGFsbW9zdEVxdWFscyh0aGF0KXtsZXQgZXE9dHJ1ZTtpZih0aGF0PT09dW5kZWZpbmVkfHx0aGF0PT09bnVsbCl7cmV0dXJuIGZhbHNlO30KZXEmPU1hdGguYWJzKHRoaXMucGFuWC10aGF0LnBhblgpPDAuMDAxO2VxJj1NYXRoLmFicyh0aGlzLnBhblktdGhhdC5wYW5ZKTwwLjAwMTtlcSY9TWF0aC5hYnModGhpcy5zY2FsZVgtdGhhdC5zY2FsZVgpPDAuMDAxO3JldHVybiEhZXE7fSxpbmNyZW1lbnRQYW5YSW5WaWV3VW5pdHMoeERlbHRhVmlldyl7dGhpcy5wYW5YKz10aGlzLnhWaWV3VmVjdG9yVG9Xb3JsZCh4RGVsdGFWaWV3KTt9LHhQYW5Xb3JsZFBvc1RvVmlld1Bvcyh3b3JsZFgsdmlld1gsdmlld1dpZHRoKXtpZih0eXBlb2Ygdmlld1g9PT0nc3RyaW5nJyl7aWYodmlld1g9PT0nbGVmdCcpe3ZpZXdYPTA7fWVsc2UgaWYodmlld1g9PT0nY2VudGVyJyl7dmlld1g9dmlld1dpZHRoLzI7fWVsc2UgaWYodmlld1g9PT0ncmlnaHQnKXt2aWV3WD12aWV3V2lkdGgtMTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ3ZpZXdYIG11c3QgYmUgbGVmdHxjZW50ZXJ8cmlnaHQgb3IgbnVtYmVyLicpO319CnRoaXMucGFuWD0odmlld1gvdGhpcy5zY2FsZVgpLXdvcmxkWDt9LHhQYW5Xb3JsZEJvdW5kc0ludG9WaWV3KHdvcmxkTWluLHdvcmxkTWF4LHZpZXdXaWR0aCl7aWYodGhpcy54V29ybGRUb1ZpZXcod29ybGRNaW4pPDApe3RoaXMueFBhbldvcmxkUG9zVG9WaWV3UG9zKHdvcmxkTWluLCdsZWZ0Jyx2aWV3V2lkdGgpO31lbHNlIGlmKHRoaXMueFdvcmxkVG9WaWV3KHdvcmxkTWF4KT52aWV3V2lkdGgpe3RoaXMueFBhbldvcmxkUG9zVG9WaWV3UG9zKHdvcmxkTWF4LCdyaWdodCcsdmlld1dpZHRoKTt9fSx4U2V0V29ybGRCb3VuZHMod29ybGRNaW4sd29ybGRNYXgsdmlld1dpZHRoKXtjb25zdCB3b3JsZFdpZHRoPXdvcmxkTWF4LXdvcmxkTWluO2NvbnN0IHNjYWxlWD12aWV3V2lkdGgvd29ybGRXaWR0aDtjb25zdCBwYW5YPS13b3JsZE1pbjt0aGlzLnNldFBhbkFuZFNjYWxlKHBhblgsc2NhbGVYKTt9LHNldFBhbkFuZFNjYWxlKHAscyl7dGhpcy5zY2FsZVg9czt0aGlzLnBhblg9cDt9LHhXb3JsZFRvVmlldyh4KXtyZXR1cm4oeCt0aGlzLnBhblgpKnRoaXMuc2NhbGVYO30seFdvcmxkVmVjdG9yVG9WaWV3KHgpe3JldHVybiB4KnRoaXMuc2NhbGVYO30seFZpZXdUb1dvcmxkKHgpe3JldHVybih4L3RoaXMuc2NhbGVYKS10aGlzLnBhblg7fSx4Vmlld1ZlY3RvclRvV29ybGQoeCl7cmV0dXJuIHgvdGhpcy5zY2FsZVg7fX07cmV0dXJue1RpbWVsaW5lRGlzcGxheVRyYW5zZm9ybSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU25hcEluZGljYXRvcih5LGhlaWdodCl7dGhpcy55PXk7dGhpcy5oZWlnaHQ9aGVpZ2h0O30KZnVuY3Rpb24gVGltZWxpbmVJbnRlcmVzdFJhbmdlKHZwKXt0aGlzLnZpZXdwb3J0Xz12cDt0aGlzLnJhbmdlXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5sZWZ0U2VsZWN0ZWRfPWZhbHNlO3RoaXMucmlnaHRTZWxlY3RlZF89ZmFsc2U7dGhpcy5sZWZ0U25hcEluZGljYXRvcl89dW5kZWZpbmVkO3RoaXMucmlnaHRTbmFwSW5kaWNhdG9yXz11bmRlZmluZWQ7fQpUaW1lbGluZUludGVyZXN0UmFuZ2UucHJvdG90eXBlPXtnZXQgaXNFbXB0eSgpe3JldHVybiB0aGlzLnJhbmdlXy5pc0VtcHR5O30scmVzZXQoKXt0aGlzLnJhbmdlXy5yZXNldCgpO3RoaXMubGVmdFNlbGVjdGVkXz1mYWxzZTt0aGlzLnJpZ2h0U2VsZWN0ZWRfPWZhbHNlO3RoaXMubGVmdFNuYXBJbmRpY2F0b3JfPXVuZGVmaW5lZDt0aGlzLnJpZ2h0U25hcEluZGljYXRvcl89dW5kZWZpbmVkO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBtaW4oKXtyZXR1cm4gdGhpcy5yYW5nZV8ubWluO30sc2V0IG1pbihtaW4pe3RoaXMucmFuZ2VfLm1pbj1taW47dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZ2V0IG1heCgpe3JldHVybiB0aGlzLnJhbmdlXy5tYXg7fSxzZXQgbWF4KG1heCl7dGhpcy5yYW5nZV8ubWF4PW1heDt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxzZXQocmFuZ2Upe3RoaXMucmFuZ2VfLnJlc2V0KCk7dGhpcy5yYW5nZV8uYWRkUmFuZ2UocmFuZ2UpO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LHNldE1pbkFuZE1heChtaW4sbWF4KXt0aGlzLnJhbmdlXy5taW49bWluO3RoaXMucmFuZ2VfLm1heD1tYXg7dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZ2V0IHJhbmdlKCl7cmV0dXJuIHRoaXMucmFuZ2VfLnJhbmdlO30sYXNSYW5nZU9iamVjdCgpe2NvbnN0IHJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtyYW5nZS5hZGRSYW5nZSh0aGlzLnJhbmdlXyk7cmV0dXJuIHJhbmdlO30sZ2V0IGxlZnRTZWxlY3RlZCgpe3JldHVybiB0aGlzLmxlZnRTZWxlY3RlZF87fSxzZXQgbGVmdFNlbGVjdGVkKGxlZnRTZWxlY3RlZCl7aWYodGhpcy5sZWZ0U2VsZWN0ZWRfPT09bGVmdFNlbGVjdGVkKXJldHVybjt0aGlzLmxlZnRTZWxlY3RlZF89bGVmdFNlbGVjdGVkO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCByaWdodFNlbGVjdGVkKCl7cmV0dXJuIHRoaXMucmlnaHRTZWxlY3RlZF87fSxzZXQgcmlnaHRTZWxlY3RlZChyaWdodFNlbGVjdGVkKXtpZih0aGlzLnJpZ2h0U2VsZWN0ZWRfPT09cmlnaHRTZWxlY3RlZClyZXR1cm47dGhpcy5yaWdodFNlbGVjdGVkXz1yaWdodFNlbGVjdGVkO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBsZWZ0U25hcEluZGljYXRvcigpe3JldHVybiB0aGlzLmxlZnRTbmFwSW5kaWNhdG9yXzt9LHNldCBsZWZ0U25hcEluZGljYXRvcihsZWZ0U25hcEluZGljYXRvcil7dGhpcy5sZWZ0U25hcEluZGljYXRvcl89bGVmdFNuYXBJbmRpY2F0b3I7dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZ2V0IHJpZ2h0U25hcEluZGljYXRvcigpe3JldHVybiB0aGlzLnJpZ2h0U25hcEluZGljYXRvcl87fSxzZXQgcmlnaHRTbmFwSW5kaWNhdG9yKHJpZ2h0U25hcEluZGljYXRvcil7dGhpcy5yaWdodFNuYXBJbmRpY2F0b3JfPXJpZ2h0U25hcEluZGljYXRvcjt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxkcmF3KGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7aWYodGhpcy5yYW5nZV8uaXNFbXB0eSlyZXR1cm47Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgbWFya2VyTFdvcmxkPXRoaXMubWluO2NvbnN0IG1hcmtlclJXb3JsZD10aGlzLm1heDtjb25zdCBtYXJrZXJMVmlldz1NYXRoLnJvdW5kKGR0LnhXb3JsZFRvVmlldyhtYXJrZXJMV29ybGQpKTtjb25zdCBtYXJrZXJSVmlldz1NYXRoLnJvdW5kKGR0LnhXb3JsZFRvVmlldyhtYXJrZXJSV29ybGQpKTtjdHguZmlsbFN0eWxlPSdyZ2JhKDAsIDAsIDAsIDAuMiknO2lmKG1hcmtlckxXb3JsZD52aWV3TFdvcmxkKXtjdHguZmlsbFJlY3QoZHQueFdvcmxkVG9WaWV3KHZpZXdMV29ybGQpLDAsbWFya2VyTFZpZXcsdmlld0hlaWdodCk7fQppZihtYXJrZXJSV29ybGQ8dmlld1JXb3JsZCl7Y3R4LmZpbGxSZWN0KG1hcmtlclJWaWV3LDAsZHQueFdvcmxkVG9WaWV3KHZpZXdSV29ybGQpLHZpZXdIZWlnaHQpO30KY29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjdHgubGluZVdpZHRoPU1hdGgucm91bmQocGl4ZWxSYXRpbyk7aWYodGhpcy5yYW5nZV8ucmFuZ2U+MCl7dGhpcy5kcmF3TGluZV8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHRoaXMubWluLHRoaXMubGVmdFNlbGVjdGVkXyk7dGhpcy5kcmF3TGluZV8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0LHRoaXMubWF4LHRoaXMucmlnaHRTZWxlY3RlZF8pO31lbHNle3RoaXMuZHJhd0xpbmVfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCx0aGlzLm1pbix0aGlzLmxlZnRTZWxlY3RlZF98fHRoaXMucmlnaHRTZWxlY3RlZF8pO30KY3R4LmxpbmVXaWR0aD0xO30sZHJhd0xpbmVfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsaGVpZ2h0LHRzLHNlbGVjdGVkKXtpZih0czx2aWV3TFdvcmxkfHx0cz49dmlld1JXb3JsZClyZXR1cm47Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgdmlld1g9TWF0aC5yb3VuZChkdC54V29ybGRUb1ZpZXcodHMpKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoKE1hdGgucm91bmQoY3R4LmxpbmVXaWR0aCklMikvMiwwKTtjdHguYmVnaW5QYXRoKCk7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld1gsMCx2aWV3WCxoZWlnaHQpO2lmKHNlbGVjdGVkKXtjdHguc3Ryb2tlU3R5bGU9J3JnYigyNTUsIDAsIDApJzt9ZWxzZXtjdHguc3Ryb2tlU3R5bGU9J3JnYigwLCAwLCAwKSc7fQpjdHguc3Ryb2tlKCk7Y3R4LnJlc3RvcmUoKTt9LGRyYXdJbmRpY2F0b3JzKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQpe2lmKHRoaXMubGVmdFNuYXBJbmRpY2F0b3JfKXt0aGlzLmRyYXdJbmRpY2F0b3JfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdGhpcy5yYW5nZV8ubWluLHRoaXMubGVmdFNuYXBJbmRpY2F0b3JfLHRoaXMubGVmdFNlbGVjdGVkXyk7fQppZih0aGlzLnJpZ2h0U25hcEluZGljYXRvcl8pe3RoaXMuZHJhd0luZGljYXRvcl8oY3R4LHZpZXdMV29ybGQsdmlld1JXb3JsZCx0aGlzLnJhbmdlXy5tYXgsdGhpcy5yaWdodFNuYXBJbmRpY2F0b3JfLHRoaXMucmlnaHRTZWxlY3RlZF8pO319LGRyYXdJbmRpY2F0b3JfKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQseFdvcmxkLHNpLHNlbGVjdGVkKXtjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB2aWV3WD1NYXRoLnJvdW5kKGR0LnhXb3JsZFRvVmlldyh4V29ybGQpKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoKE1hdGgucm91bmQoY3R4LmxpbmVXaWR0aCklMikvMiwwKTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHZpZXdZPXNpLnkqZGV2aWNlUGl4ZWxSYXRpbztjb25zdCB2aWV3SGVpZ2h0PXNpLmhlaWdodCpkZXZpY2VQaXhlbFJhdGlvO2NvbnN0IGFycm93U2l6ZT00KnBpeGVsUmF0aW87aWYoc2VsZWN0ZWQpe2N0eC5maWxsU3R5bGU9J3JnYigyNTUsIDAsIDApJzt9ZWxzZXtjdHguZmlsbFN0eWxlPSdyZ2IoMCwgMCwgMCknO30KdHIudWkuYi5kcmF3VHJpYW5nbGUoY3R4LHZpZXdYLWFycm93U2l6ZSowLjc1LHZpZXdZLHZpZXdYK2Fycm93U2l6ZSowLjc1LHZpZXdZLHZpZXdYLHZpZXdZK2Fycm93U2l6ZSk7Y3R4LmZpbGwoKTt0ci51aS5iLmRyYXdUcmlhbmdsZShjdHgsdmlld1gtYXJyb3dTaXplKjAuNzUsdmlld1krdmlld0hlaWdodCx2aWV3WCthcnJvd1NpemUqMC43NSx2aWV3WSt2aWV3SGVpZ2h0LHZpZXdYLHZpZXdZK3ZpZXdIZWlnaHQtYXJyb3dTaXplKTtjdHguZmlsbCgpO2N0eC5yZXN0b3JlKCk7fX07cmV0dXJue1NuYXBJbmRpY2F0b3IsVGltZWxpbmVJbnRlcmVzdFJhbmdlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ29udGFpbmVyVG9UcmFja01hcCgpe3RoaXMuc3RhYmxlSWRUb1RyYWNrTWFwXz17fTt9CkNvbnRhaW5lclRvVHJhY2tNYXAucHJvdG90eXBlPXthZGRDb250YWluZXIoY29udGFpbmVyLHRyYWNrKXtpZighdHJhY2spe3Rocm93IG5ldyBFcnJvcignTXVzdCBwcm92aWRlIGEgdHJhY2suJyk7fQp0aGlzLnN0YWJsZUlkVG9UcmFja01hcF9bY29udGFpbmVyLnN0YWJsZUlkXT10cmFjazt9LGNsZWFyKCl7dGhpcy5zdGFibGVJZFRvVHJhY2tNYXBfPXt9O30sZ2V0VHJhY2tCeVN0YWJsZUlkKHN0YWJsZUlkKXtyZXR1cm4gdGhpcy5zdGFibGVJZFRvVHJhY2tNYXBfW3N0YWJsZUlkXTt9fTtyZXR1cm57Q29udGFpbmVyVG9UcmFja01hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIEV2ZW50VG9UcmFja01hcCgpe30KRXZlbnRUb1RyYWNrTWFwLnByb3RvdHlwZT17YWRkRXZlbnQoZXZlbnQsdHJhY2spe2lmKCF0cmFjayl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgYSB0cmFjay4nKTt9CnRoaXNbZXZlbnQuZ3VpZF09dHJhY2s7fX07cmV0dXJue0V2ZW50VG9UcmFja01hcCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7Y29uc3QgVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtPXRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybTtjb25zdCBUaW1lbGluZUludGVyZXN0UmFuZ2U9dHIudWkuVGltZWxpbmVJbnRlcmVzdFJhbmdlO2NvbnN0IElERUFMX01BSk9SX01BUktfRElTVEFOQ0VfUFg9MTUwO2NvbnN0IE1BSk9SX01BUktfUk9VTkRJTkdfRkFDVE9SPTEwMDAwMDtjbGFzcyBBbmltYXRpb25Db250cm9sbGVyUHJveHl7Y29uc3RydWN0b3IodGFyZ2V0KXt0aGlzLnRhcmdldF89dGFyZ2V0O30KZ2V0IHBhblgoKXtyZXR1cm4gdGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5wYW5YO30Kc2V0IHBhblgocGFuWCl7dGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5wYW5YPXBhblg7fQpnZXQgcGFuWSgpe3JldHVybiB0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnBhblk7fQpzZXQgcGFuWShwYW5ZKXt0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnBhblk9cGFuWTt9CmdldCBzY2FsZVgoKXtyZXR1cm4gdGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5zY2FsZVg7fQpzZXQgc2NhbGVYKHNjYWxlWCl7dGhpcy50YXJnZXRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtXy5zY2FsZVg9c2NhbGVYO30KY2xvbmVBbmltYXRpb25TdGF0ZSgpe3JldHVybiB0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLmNsb25lKCk7fQp4UGFuV29ybGRQb3NUb1ZpZXdQb3MoeFdvcmxkLHhWaWV3KXt0aGlzLnRhcmdldF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnhQYW5Xb3JsZFBvc1RvVmlld1Bvcyh4V29ybGQseFZpZXcsdGhpcy50YXJnZXRfLm1vZGVsVHJhY2tDb250YWluZXJfLmNhbnZhcy5jbGllbnRXaWR0aCk7fX0KZnVuY3Rpb24gVGltZWxpbmVWaWV3cG9ydChwYXJlbnRFbCl7dGhpcy5wYXJlbnRFbF89cGFyZW50RWw7dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXz11bmRlZmluZWQ7dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybV89bmV3IFRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybSgpO3RoaXMuaW5pdEFuaW1hdGlvbkNvbnRyb2xsZXJfKCk7dGhpcy5zZWxlY3RlZEZsb3dFdmVudHNfPW5ldyBTZXQoKTt0aGlzLmhpZ2hsaWdodFZTeW5jXz1mYWxzZTt0aGlzLmhpZ2hEZXRhaWxzXz1mYWxzZTt0aGlzLmdyaWRUaW1lYmFzZV89MDt0aGlzLmdyaWRTdGVwXz0xMDAwLzYwO3RoaXMuZ3JpZEVuYWJsZWRfPWZhbHNlO3RoaXMuaGFzQ2FsbGVkU2V0dXBGdW5jdGlvbl89ZmFsc2U7dGhpcy5vblJlc2l6ZV89dGhpcy5vblJlc2l6ZV8uYmluZCh0aGlzKTt0aGlzLm9uTW9kZWxUcmFja0NvbnRyb2xsZXJTY3JvbGxfPXRoaXMub25Nb2RlbFRyYWNrQ29udHJvbGxlclNjcm9sbF8uYmluZCh0aGlzKTt0aGlzLnRpbWVNb2RlXz1UaW1lbGluZVZpZXdwb3J0LlRpbWVNb2RlLlRJTUVfSU5fTVM7dGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc189W107dGhpcy5tYWpvck1hcmtVbml0Xz11bmRlZmluZWQ7dGhpcy5pbnRlcmVzdFJhbmdlXz1uZXcgVGltZWxpbmVJbnRlcmVzdFJhbmdlKHRoaXMpO3RoaXMuZXZlbnRUb1RyYWNrTWFwXz1uZXcgdHIudWkudHJhY2tzLkV2ZW50VG9UcmFja01hcCgpO3RoaXMuY29udGFpbmVyVG9UcmFja01hcD1uZXcgdHIudWkudHJhY2tzLkNvbnRhaW5lclRvVHJhY2tNYXAoKTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQ9dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50LmJpbmQodGhpcyk7fQpUaW1lbGluZVZpZXdwb3J0LlRpbWVNb2RlPXtUSU1FX0lOX01TOjAsUkVWSVNJT05TOjF9O1RpbWVsaW5lVmlld3BvcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYi5FdmVudFRhcmdldC5wcm90b3R5cGUsZ2V0IGlzQXR0YWNoZWRUb0RvY3VtZW50T3JJblRlc3RNb2RlKCl7aWYodGhpcy5wYXJlbnRFbF89PT11bmRlZmluZWQpcmV0dXJuO3JldHVybiB0ci51aS5iLmlzRWxlbWVudEF0dGFjaGVkVG9Eb2N1bWVudCh0aGlzLnBhcmVudEVsXyk7fSxvblJlc2l6ZV8oKXt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGRpc3BhdGNoQ2hhbmdlRXZlbnQoKXt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnY2hhbmdlJyk7fSxkZXRhY2goKXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncmVzaXplJyx0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQpO30saW5pdEFuaW1hdGlvbkNvbnRyb2xsZXJfKCl7dGhpcy5kdEFuaW1hdGlvbkNvbnRyb2xsZXJfPW5ldyB0ci51aS5iLkFuaW1hdGlvbkNvbnRyb2xsZXIoKTt0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8uYWRkRXZlbnRMaXN0ZW5lcignZGlkdGljaycsZnVuY3Rpb24oZSl7dGhpcy5vbkN1cmVudERpc3BsYXlUcmFuc2Zvcm1DaGFuZ2VfKGUub2xkVGFyZ2V0U3RhdGUpO30uYmluZCh0aGlzKSk7dGhpcy5kdEFuaW1hdGlvbkNvbnRyb2xsZXJfLnRhcmdldD1uZXcgQW5pbWF0aW9uQ29udHJvbGxlclByb3h5KHRoaXMpO30sZ2V0IGN1cnJlbnREaXNwbGF5VHJhbnNmb3JtKCl7cmV0dXJuIHRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fO30sc2V0RGlzcGxheVRyYW5zZm9ybUltbWVkaWF0ZWx5KGRpc3BsYXlUcmFuc2Zvcm0pe3RoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy5jYW5jZWxBY3RpdmVBbmltYXRpb24oKTtjb25zdCBvbGREaXNwbGF5VHJhbnNmb3JtPXRoaXMuZHRBbmltYXRpb25Db250cm9sbGVyXy50YXJnZXQuY2xvbmVBbmltYXRpb25TdGF0ZSgpO3RoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnNldChkaXNwbGF5VHJhbnNmb3JtKTt0aGlzLm9uQ3VyZW50RGlzcGxheVRyYW5zZm9ybUNoYW5nZV8ob2xkRGlzcGxheVRyYW5zZm9ybSk7fSxxdWV1ZURpc3BsYXlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uKXtpZighKGFuaW1hdGlvbiBpbnN0YW5jZW9mIHRyLnVpLmIuQW5pbWF0aW9uKSl7dGhyb3cgbmV3IEVycm9yKCdhbmltYXRpb24gbXVzdCBiZSBpbnN0YW5jZW9mIHRyLnVpLmIuQW5pbWF0aW9uJyk7fQp0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8ucXVldWVBbmltYXRpb24oYW5pbWF0aW9uKTt9LG9uQ3VyZW50RGlzcGxheVRyYW5zZm9ybUNoYW5nZV8ob2xkRGlzcGxheVRyYW5zZm9ybSl7aWYodGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXyl7dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5wYW5ZPXRyLmIubWF0aC5jbGFtcCh0aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnBhblksMCx0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnNjcm9sbEhlaWdodC0KdGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jbGllbnRIZWlnaHQpO30KY29uc3QgY2hhbmdlZD0hdGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5lcXVhbHMob2xkRGlzcGxheVRyYW5zZm9ybSk7Y29uc3QgeUNoYW5nZWQ9dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5wYW5ZIT09b2xkRGlzcGxheVRyYW5zZm9ybS5wYW5ZO2lmKHlDaGFuZ2VkKXt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnNjcm9sbFRvcD10aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnBhblk7fQppZihjaGFuZ2VkKXt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9fSxvbk1vZGVsVHJhY2tDb250cm9sbGVyU2Nyb2xsXyhlKXtpZih0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8uYWN0aXZlQW5pbWF0aW9uJiZ0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8uYWN0aXZlQW5pbWF0aW9uLmFmZmVjdHNQYW5ZKXt0aGlzLmR0QW5pbWF0aW9uQ29udHJvbGxlcl8uY2FuY2VsQWN0aXZlQW5pbWF0aW9uKCk7fQpjb25zdCBwYW5ZPXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uc2Nyb2xsVG9wO3RoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm1fLnBhblk9cGFuWTt9LGdldCBtb2RlbFRyYWNrQ29udGFpbmVyKCl7cmV0dXJuIHRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl87fSxzZXQgbW9kZWxUcmFja0NvbnRhaW5lcihtKXtpZih0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfKXt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy5vbk1vZGVsVHJhY2tDb250cm9sbGVyU2Nyb2xsXyk7fQp0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfPW07dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5hZGRFdmVudExpc3RlbmVyKCdzY3JvbGwnLHRoaXMub25Nb2RlbFRyYWNrQ29udHJvbGxlclNjcm9sbF8pO30sZ2V0IHNlbGVjdGVkRmxvd0V2ZW50cygpe3JldHVybiB0aGlzLnNlbGVjdGVkRmxvd0V2ZW50c187fSxzZXQgc2VsZWN0ZWRGbG93RXZlbnRzKHNlbGVjdGVkRmxvd0V2ZW50cyl7dGhpcy5zZWxlY3RlZEZsb3dFdmVudHNfPXNlbGVjdGVkRmxvd0V2ZW50czt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBoaWdobGlnaHRWU3luYygpe3JldHVybiB0aGlzLmhpZ2hsaWdodFZTeW5jXzt9LHNldCBoaWdobGlnaHRWU3luYyhoaWdobGlnaHRWU3luYyl7dGhpcy5oaWdobGlnaHRWU3luY189aGlnaGxpZ2h0VlN5bmM7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxnZXQgaGlnaERldGFpbHMoKXtyZXR1cm4gdGhpcy5oaWdoRGV0YWlsc187fSxzZXQgaGlnaERldGFpbHMoaGlnaERldGFpbHMpe3RoaXMuaGlnaERldGFpbHNfPWhpZ2hEZXRhaWxzO3RoaXMuZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sZ2V0IGdyaWRFbmFibGVkKCl7cmV0dXJuIHRoaXMuZ3JpZEVuYWJsZWRfO30sc2V0IGdyaWRFbmFibGVkKGVuYWJsZWQpe2lmKHRoaXMuZ3JpZEVuYWJsZWRfPT09ZW5hYmxlZClyZXR1cm47dGhpcy5ncmlkRW5hYmxlZF89ZW5hYmxlZCYmdHJ1ZTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBncmlkVGltZWJhc2UoKXtyZXR1cm4gdGhpcy5ncmlkVGltZWJhc2VfO30sc2V0IGdyaWRUaW1lYmFzZSh0aW1lYmFzZSl7aWYodGhpcy5ncmlkVGltZWJhc2VfPT09dGltZWJhc2UpcmV0dXJuO3RoaXMuZ3JpZFRpbWViYXNlXz10aW1lYmFzZTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9LGdldCBncmlkU3RlcCgpe3JldHVybiB0aGlzLmdyaWRTdGVwXzt9LGdldCBpbnRlcmVzdFJhbmdlKCl7cmV0dXJuIHRoaXMuaW50ZXJlc3RSYW5nZV87fSxnZXQgbWFqb3JNYXJrV29ybGRQb3NpdGlvbnMoKXtyZXR1cm4gdGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc187fSxnZXQgbWFqb3JNYXJrVW5pdCgpe3N3aXRjaCh0aGlzLnRpbWVNb2RlXyl7Y2FzZSBUaW1lbGluZVZpZXdwb3J0LlRpbWVNb2RlLlRJTUVfSU5fTVM6cmV0dXJuIHRyLmIuVW5pdC5ieU5hbWUudGltZUluTXNBdXRvRm9ybWF0O2Nhc2UgVGltZWxpbmVWaWV3cG9ydC5UaW1lTW9kZS5SRVZJU0lPTlM6cmV0dXJuIHRyLmIuVW5pdC5ieU5hbWUuY291bnQ7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBnZXQgVW5pdCBmb3IgdW5zdXBwb3J0ZWQgdGltZSBtb2RlICcrdGhpcy50aW1lTW9kZV8pO319LGdldCB0aW1lTW9kZSgpe3JldHVybiB0aGlzLnRpbWVNb2RlXzt9LHNldCB0aW1lTW9kZShtb2RlKXt0aGlzLnRpbWVNb2RlXz1tb2RlO3RoaXMuZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO30sdXBkYXRlTWFqb3JNYXJrRGF0YSh2aWV3TFdvcmxkLHZpZXdSV29ybGQpe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgZHQ9dGhpcy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBpZGVhbE1ham9yTWFya0Rpc3RhbmNlUGl4PUlERUFMX01BSk9SX01BUktfRElTVEFOQ0VfUFgqcGl4ZWxSYXRpbztjb25zdCBpZGVhbE1ham9yTWFya0Rpc3RhbmNlV29ybGQ9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKGlkZWFsTWFqb3JNYXJrRGlzdGFuY2VQaXgpO2NvbnN0IG1ham9yTWFya0Rpc3RhbmNlV29ybGQ9dHIuYi5tYXRoLnByZWZlcnJlZE51bWJlckxhcmdlclRoYW5NaW4oaWRlYWxNYWpvck1hcmtEaXN0YW5jZVdvcmxkKTtjb25zdCBmaXJzdE1ham9yTWFyaz1NYXRoLmZsb29yKHZpZXdMV29ybGQvbWFqb3JNYXJrRGlzdGFuY2VXb3JsZCkqbWFqb3JNYXJrRGlzdGFuY2VXb3JsZDt0aGlzLm1ham9yTWFya1dvcmxkUG9zaXRpb25zXz1bXTtpZihmaXJzdE1ham9yTWFyay9tYWpvck1hcmtEaXN0YW5jZVdvcmxkPjFlMTUpcmV0dXJuO2ZvcihsZXQgY3VyWD1maXJzdE1ham9yTWFyaztjdXJYPHZpZXdSV29ybGQ7Y3VyWCs9bWFqb3JNYXJrRGlzdGFuY2VXb3JsZCl7dGhpcy5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc18ucHVzaChNYXRoLmZsb29yKE1BSk9SX01BUktfUk9VTkRJTkdfRkFDVE9SKmN1clgpL01BSk9SX01BUktfUk9VTkRJTkdfRkFDVE9SKTt9fSxkcmF3TWFqb3JNYXJrTGluZXMoY3R4LHZpZXdIZWlnaHQpe2N0eC5zYXZlKCk7Y3R4LnRyYW5zbGF0ZSgoTWF0aC5yb3VuZChjdHgubGluZVdpZHRoKSUyKS8yLDApO2N0eC5iZWdpblBhdGgoKTtmb3IoY29uc3QgbWFqb3JNYXJrIG9mIHRoaXMubWFqb3JNYXJrV29ybGRQb3NpdGlvbnNfKXtjb25zdCB4PXRoaXMuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ueFdvcmxkVG9WaWV3KG1ham9yTWFyayk7dHIudWkuYi5kcmF3TGluZShjdHgseCwwLHgsdmlld0hlaWdodCk7fQpjdHguc3Ryb2tlU3R5bGU9JyNkZGQnO2N0eC5zdHJva2UoKTtjdHgucmVzdG9yZSgpO30sZHJhd0dyaWRMaW5lcyhjdHgsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe2lmKCF0aGlzLmdyaWRFbmFibGVkKXJldHVybjtjb25zdCBkdD10aGlzLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2xldCB4PXRoaXMuZ3JpZFRpbWViYXNlO2N0eC5zYXZlKCk7Y3R4LnRyYW5zbGF0ZSgoTWF0aC5yb3VuZChjdHgubGluZVdpZHRoKSUyKS8yLDApO2N0eC5iZWdpblBhdGgoKTt3aGlsZSh4PHZpZXdSV29ybGQpe2lmKHg+PXZpZXdMV29ybGQpe2NvbnN0IHZ4PU1hdGguZmxvb3IoZHQueFdvcmxkVG9WaWV3KHgpKTt0ci51aS5iLmRyYXdMaW5lKGN0eCx2eCwwLHZ4LHZpZXdIZWlnaHQpO30KeCs9dGhpcy5ncmlkU3RlcDt9CmN0eC5zdHJva2VTdHlsZT0ncmdiYSgyNTUsIDAsIDAsIDAuMjUpJztjdHguc3Ryb2tlKCk7Y3R4LnJlc3RvcmUoKTt9LGdldFNoaWZ0ZWRTZWxlY3Rpb24oc2VsZWN0aW9uLG9mZnNldCl7Y29uc3QgbmV3U2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBldmVudCBvZiBzZWxlY3Rpb24pe2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuRmxvd0V2ZW50KXtpZihvZmZzZXQ+MCl7bmV3U2VsZWN0aW9uLnB1c2goZXZlbnQuZW5kU2xpY2UpO31lbHNlIGlmKG9mZnNldDwwKXtuZXdTZWxlY3Rpb24ucHVzaChldmVudC5zdGFydFNsaWNlKTt9ZWxzZXt9CmNvbnRpbnVlO30KY29uc3QgdHJhY2s9dGhpcy50cmFja0ZvckV2ZW50KGV2ZW50KTt0cmFjay5hZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsbmV3U2VsZWN0aW9uKTt9CmlmKG5ld1NlbGVjdGlvbi5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ld1NlbGVjdGlvbjt9LHJlYnVpbGRFdmVudFRvVHJhY2tNYXAoKXt0aGlzLmV2ZW50VG9UcmFja01hcF89bmV3IHRyLnVpLnRyYWNrcy5FdmVudFRvVHJhY2tNYXAoKTt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmFkZEV2ZW50c1RvVHJhY2tNYXAodGhpcy5ldmVudFRvVHJhY2tNYXBfKTt9LHJlYnVpbGRDb250YWluZXJUb1RyYWNrTWFwKCl7dGhpcy5jb250YWluZXJUb1RyYWNrTWFwLmNsZWFyKCk7dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5hZGRDb250YWluZXJzVG9UcmFja01hcCh0aGlzLmNvbnRhaW5lclRvVHJhY2tNYXApO30sdHJhY2tGb3JFdmVudChldmVudCl7cmV0dXJuIHRoaXMuZXZlbnRUb1RyYWNrTWFwX1tldmVudC5ndWlkXTt9fTtyZXR1cm57VGltZWxpbmVWaWV3cG9ydCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYycsZnVuY3Rpb24oKXtjb25zdCBCcnVzaGluZ1N0YXRlPXRyLnVpLmIuQnJ1c2hpbmdTdGF0ZTtjb25zdCBFdmVudFNldD10ci5tb2RlbC5FdmVudFNldDtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtjb25zdCBWaWV3cG9ydD10ci51aS5UaW1lbGluZVZpZXdwb3J0O2Z1bmN0aW9uIEJydXNoaW5nU3RhdGVDb250cm9sbGVyKHRpbWVsaW5lVmlldyl7dHIuYi5FdmVudFRhcmdldC5jYWxsKHRoaXMpO3RoaXMudGltZWxpbmVWaWV3Xz10aW1lbGluZVZpZXc7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV89bmV3IEJydXNoaW5nU3RhdGUoKTt0aGlzLm9uUG9wU3RhdGVfPXRoaXMub25Qb3BTdGF0ZV8uYmluZCh0aGlzKTt0aGlzLmhpc3RvcnlFbmFibGVkXz1mYWxzZTt0aGlzLnNlbGVjdGlvbnNfPXt9O30KQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYi5FdmVudFRhcmdldC5wcm90b3R5cGUsZGlzcGF0Y2hDaGFuZ2VFdmVudF8oKXtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdjaGFuZ2UnLGZhbHNlLGZhbHNlKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fSxnZXQgbW9kZWwoKXtpZighdGhpcy50aW1lbGluZVZpZXdfKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMudGltZWxpbmVWaWV3Xy5tb2RlbDt9LGdldCB0cmFja1ZpZXcoKXtpZighdGhpcy50aW1lbGluZVZpZXdfKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMudGltZWxpbmVWaWV3Xy50cmFja1ZpZXc7fSxnZXQgdmlld3BvcnQoKXtpZighdGhpcy50aW1lbGluZVZpZXdfKXtyZXR1cm4gdW5kZWZpbmVkO30KaWYoIXRoaXMudGltZWxpbmVWaWV3Xy50cmFja1ZpZXcpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gdGhpcy50aW1lbGluZVZpZXdfLnRyYWNrVmlldy52aWV3cG9ydDt9LGdldCBoaXN0b3J5RW5hYmxlZCgpe3JldHVybiB0aGlzLmhpc3RvcnlFbmFibGVkXzt9LHNldCBoaXN0b3J5RW5hYmxlZChoaXN0b3J5RW5hYmxlZCl7dGhpcy5oaXN0b3J5RW5hYmxlZF89ISFoaXN0b3J5RW5hYmxlZDtpZihoaXN0b3J5RW5hYmxlZCl7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3BvcHN0YXRlJyx0aGlzLm9uUG9wU3RhdGVfKTt9ZWxzZXt3aW5kb3cucmVtb3ZlRXZlbnRMaXN0ZW5lcigncG9wc3RhdGUnLHRoaXMub25Qb3BTdGF0ZV8pO319LG1vZGVsV2lsbENoYW5nZSgpe2lmKHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmlzQXBwbGllZFRvTW9kZWwpe3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLnVuYXBwbHlGcm9tRXZlbnRTZWxlY3Rpb25TdGF0ZXMoKTt9fSxtb2RlbERpZENoYW5nZSgpe3RoaXMuc2VsZWN0aW9uc189e307dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV89bmV3IEJydXNoaW5nU3RhdGUoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5hcHBseVRvRXZlbnRTZWxlY3Rpb25TdGF0ZXModGhpcy5tb2RlbCk7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgnbW9kZWwtY2hhbmdlZCcsZmFsc2UsZmFsc2UpO3RoaXMuZGlzcGF0Y2hFdmVudChlKTt0aGlzLmRpc3BhdGNoQ2hhbmdlRXZlbnRfKCk7fSxvblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCl7Y29uc3Qgc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uO2lmKHRoaXMuaGlzdG9yeUVuYWJsZWQpe3RoaXMuc2VsZWN0aW9uc19bc2VsZWN0aW9uLmd1aWRdPXNlbGVjdGlvbjtjb25zdCBzdGF0ZT17c2VsZWN0aW9uX2d1aWQ6c2VsZWN0aW9uLmd1aWR9O3dpbmRvdy5oaXN0b3J5LnB1c2hTdGF0ZShzdGF0ZSxkb2N1bWVudC50aXRsZSk7fX0sb25Qb3BTdGF0ZV8oZSl7aWYoZS5zdGF0ZT09PW51bGwpcmV0dXJuO2NvbnN0IHNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbnNfW2Uuc3RhdGUuc2VsZWN0aW9uX2d1aWRdO2lmKHNlbGVjdGlvbil7Y29uc3QgbmV3U3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdTdGF0ZS5zZWxlY3Rpb249c2VsZWN0aW9uO3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGU9bmV3U3RhdGU7fQplLnN0b3BQcm9wYWdhdGlvbigpO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5zZWxlY3Rpb247fSxnZXQgZmluZE1hdGNoZXMoKXtyZXR1cm4gdGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uZmluZE1hdGNoZXM7fSxnZXQgc2VsZWN0aW9uT2ZJbnRlcmVzdCgpe3JldHVybiB0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5zZWxlY3Rpb25PZkludGVyZXN0O30sZ2V0IGN1cnJlbnRCcnVzaGluZ1N0YXRlKCl7cmV0dXJuIHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfO30sc2V0IGN1cnJlbnRCcnVzaGluZ1N0YXRlKG5ld0JydXNoaW5nU3RhdGUpe2lmKG5ld0JydXNoaW5nU3RhdGUuaXNBcHBsaWVkVG9Nb2RlbCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYXBwbHkgdGhpcyBzdGF0ZSwgaXQgaXMgYXBwbGllZCcpO30KY29uc3QgaGFzVmFsdWVDaGFuZ2VkPSF0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5lcXVhbHMobmV3QnJ1c2hpbmdTdGF0ZSk7aWYobmV3QnJ1c2hpbmdTdGF0ZSE9PXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfJiYhaGFzVmFsdWVDaGFuZ2VkKXtpZih0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5pc0FwcGxpZWRUb01vZGVsKXt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy50cmFuc2Zlck1vZGVsT3duZXJzaGlwVG9DbG9uZShuZXdCcnVzaGluZ1N0YXRlKTt9CnRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfPW5ld0JydXNoaW5nU3RhdGU7cmV0dXJuO30KaWYodGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uaXNBcHBsaWVkVG9Nb2RlbCl7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8udW5hcHBseUZyb21FdmVudFNlbGVjdGlvblN0YXRlcygpO30KdGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV89bmV3QnJ1c2hpbmdTdGF0ZTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5hcHBseVRvRXZlbnRTZWxlY3Rpb25TdGF0ZXModGhpcy5tb2RlbCk7dGhpcy5kaXNwYXRjaENoYW5nZUV2ZW50XygpO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbkFzVGFzayhmaWx0ZXIsc2VsZWN0aW9uKXtjb25zdCB0aW1lbGluZVZpZXc9dGhpcy50aW1lbGluZVZpZXdfLnRyYWNrVmlldztpZighdGltZWxpbmVWaWV3KXtyZXR1cm4gbmV3IHRyLmIuVGFzaygpO30KcmV0dXJuIHRpbWVsaW5lVmlldy5hZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uQXNUYXNrKGZpbHRlcixzZWxlY3Rpb24pO30sZmluZFRleHRDaGFuZ2VkVG8oYWxsUG9zc2libGVNYXRjaGVzKXtjb25zdCBuZXdCcnVzaGluZ1N0YXRlPXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmNsb25lKCk7bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1hbGxQb3NzaWJsZU1hdGNoZXM7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO30sZmluZEZvY3VzQ2hhbmdlZFRvKGN1cnJlbnRGb2N1cyl7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuc2VsZWN0aW9uPWN1cnJlbnRGb2N1czt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7dGhpcy5vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCk7fSxmaW5kVGV4dENsZWFyZWQoKXtpZih0aGlzLnhOYXZTdHJpbmdNYXJrZXJfIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsLnJlbW92ZUFubm90YXRpb24odGhpcy54TmF2U3RyaW5nTWFya2VyXyk7dGhpcy54TmF2U3RyaW5nTWFya2VyXz11bmRlZmluZWQ7fQppZih0aGlzLmd1aWRlTGluZUFubm90YXRpb25fIT09dW5kZWZpbmVkKXt0aGlzLm1vZGVsLnJlbW92ZUFubm90YXRpb24odGhpcy5ndWlkZUxpbmVBbm5vdGF0aW9uXyk7dGhpcy5ndWlkZUxpbmVBbm5vdGF0aW9uXz11bmRlZmluZWQ7fQpjb25zdCBuZXdCcnVzaGluZ1N0YXRlPXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmNsb25lKCk7bmV3QnJ1c2hpbmdTdGF0ZS5zZWxlY3Rpb249bmV3IEV2ZW50U2V0KCk7bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7dGhpcy5vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCk7fSx1aVN0YXRlRnJvbVN0cmluZyhzdHJpbmcpe3JldHVybiB0ci51aS5iLlVJU3RhdGUuZnJvbVVzZXJGcmllbmRseVN0cmluZyh0aGlzLm1vZGVsLHRoaXMudmlld3BvcnQsc3RyaW5nKTt9LG5hdlRvUG9zaXRpb24odWlTdGF0ZSxzaG93TmF2TGluZSl7dGhpcy50cmFja1ZpZXcubmF2VG9Qb3NpdGlvbih1aVN0YXRlLHNob3dOYXZMaW5lKTt9LGNoYW5nZVNlbGVjdGlvbkZyb21UaW1lbGluZShzZWxlY3Rpb24pe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnNlbGVjdGlvbj1zZWxlY3Rpb247bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7dGhpcy5vblVzZXJJbml0aWF0ZWRTZWxlY3Rpb25DaGFuZ2VfKCk7fSxzaG93U2NyaXB0Q29udHJvbFNlbGVjdGlvbihzZWxlY3Rpb24pe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLnNlbGVjdGlvbj1zZWxlY3Rpb247bmV3QnJ1c2hpbmdTdGF0ZS5maW5kTWF0Y2hlcz1uZXcgRXZlbnRTZXQoKTt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7fSxjaGFuZ2VTZWxlY3Rpb25Gcm9tUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KHNlbGVjdGlvbil7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuc2VsZWN0aW9uPXNlbGVjdGlvbjtuZXdCcnVzaGluZ1N0YXRlLmZpbmRNYXRjaGVzPW5ldyBFdmVudFNldCgpO3RoaXMuY3VycmVudEJydXNoaW5nU3RhdGU9bmV3QnJ1c2hpbmdTdGF0ZTt0aGlzLm9uVXNlckluaXRpYXRlZFNlbGVjdGlvbkNoYW5nZV8oKTt9LGNoYW5nZUFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHMoZXZlbnRTZXQpe2NvbnN0IG5ld0JydXNoaW5nU3RhdGU9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8uY2xvbmUoKTtuZXdCcnVzaGluZ1N0YXRlLmFuYWx5c2lzVmlld1JlbGF0ZWRFdmVudHM9ZXZlbnRTZXQ7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO30sY2hhbmdlQW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cyhldmVudFNldCl7Y29uc3QgbmV3QnJ1c2hpbmdTdGF0ZT10aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlXy5jbG9uZSgpO25ld0JydXNoaW5nU3RhdGUuYW5hbHlzaXNMaW5rSG92ZXJlZEV2ZW50cz1ldmVudFNldDt0aGlzLmN1cnJlbnRCcnVzaGluZ1N0YXRlPW5ld0JydXNoaW5nU3RhdGU7fSxnZXRWaWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlKHZpZXdJZCl7cmV0dXJuIHRoaXMuY3VycmVudEJydXNoaW5nU3RhdGUudmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXNbdmlld0lkXTt9LGNoYW5nZVZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkLG5ld1N0YXRlKXtjb25zdCBvbGRTdGF0ZXM9dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZV8udmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZXM7Y29uc3QgbmV3U3RhdGVzPXt9O2Zvcihjb25zdCBpZCBpbiBvbGRTdGF0ZXMpe25ld1N0YXRlc1tpZF09b2xkU3RhdGVzW2lkXTt9CmlmKG5ld1N0YXRlPT09dW5kZWZpbmVkKXtkZWxldGUgbmV3U3RhdGVzW3ZpZXdJZF07fWVsc2V7bmV3U3RhdGVzW3ZpZXdJZF09bmV3U3RhdGU7fQpjb25zdCBuZXdCcnVzaGluZ1N0YXRlPXRoaXMuY3VycmVudEJydXNoaW5nU3RhdGVfLmNsb25lKCk7bmV3QnJ1c2hpbmdTdGF0ZS52aWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlcz1uZXdTdGF0ZXM7dGhpcy5jdXJyZW50QnJ1c2hpbmdTdGF0ZT1uZXdCcnVzaGluZ1N0YXRlO319O0JydXNoaW5nU3RhdGVDb250cm9sbGVyLmdldENvbnRyb2xsZXJGb3JFbGVtZW50PWZ1bmN0aW9uKGVsZW1lbnQpe2lmKHRyLmlzSGVhZGxlc3Mpe3Rocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQnKTt9CmxldCBjdXJyZW50RWxlbWVudD1lbGVtZW50O3doaWxlKGN1cnJlbnRFbGVtZW50KXtpZihjdXJyZW50RWxlbWVudC5icnVzaGluZ1N0YXRlQ29udHJvbGxlcil7cmV0dXJuIGN1cnJlbnRFbGVtZW50LmJydXNoaW5nU3RhdGVDb250cm9sbGVyO30KaWYoY3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudCl7Y3VycmVudEVsZW1lbnQ9Y3VycmVudEVsZW1lbnQucGFyZW50RWxlbWVudDtjb250aW51ZTt9CmxldCBjdXJyZW50Tm9kZT1jdXJyZW50RWxlbWVudDt3aGlsZShQb2x5bWVyLmRvbShjdXJyZW50Tm9kZSkucGFyZW50Tm9kZSl7Y3VycmVudE5vZGU9UG9seW1lci5kb20oY3VycmVudE5vZGUpLnBhcmVudE5vZGU7fQpjdXJyZW50RWxlbWVudD1jdXJyZW50Tm9kZS5ob3N0O30KcmV0dXJuIHVuZGVmaW5lZDt9O3JldHVybntCcnVzaGluZ1N0YXRlQ29udHJvbGxlcix9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1hbmFseXNpcy1saW5rJyxwcm9wZXJ0aWVzOntocmVmOnt0eXBlOlN0cmluZ319LGxpc3RlbmVyczp7J2NsaWNrJzonb25DbGlja2VkXycsJ21vdXNlZW50ZXInOidvbk1vdXNlRW50ZXJfJywnbW91c2VsZWF2ZSc6J29uTW91c2VMZWF2ZV8nfSxyZWFkeSgpe3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7fSxhdHRhY2hlZCgpe3RoaXMuY29udHJvbGxlcl89dHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlci5nZXRDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzKTt9LGRldGFjaGVkKCl7dGhpcy5jbGVhckhpZ2hsaWdodF8oKTt0aGlzLmNvbnRyb2xsZXJfPXVuZGVmaW5lZDt9LHNldCBjb2xvcihjKXt0aGlzLnN0eWxlLmNvbG9yPWM7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PXNlbGVjdGlvbi51c2VyRnJpZW5kbHlOYW1lO30sc2V0U2VsZWN0aW9uQW5kQ29udGVudChzZWxlY3Rpb24sb3B0X3RleHRDb250ZW50KXt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO2lmKG9wdF90ZXh0Q29udGVudCl7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9b3B0X3RleHRDb250ZW50O319LGdldEN1cnJlbnRTZWxlY3Rpb25fKCl7aWYodHlwZW9mIHRoaXMuc2VsZWN0aW9uXz09PSdmdW5jdGlvbicpe3JldHVybiB0aGlzLnNlbGVjdGlvbl8oKTt9CnJldHVybiB0aGlzLnNlbGVjdGlvbl87fSxzZXRIaWdobGlnaHRfKG9wdF9ldmVudFNldCl7aWYodGhpcy5jb250cm9sbGVyXyl7dGhpcy5jb250cm9sbGVyXy5jaGFuZ2VBbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKG9wdF9ldmVudFNldCk7fX0sY2xlYXJIaWdobGlnaHRfKG9wdF9ldmVudFNldCl7dGhpcy5zZXRIaWdobGlnaHRfKCk7fSxvbkNsaWNrZWRfKGNsaWNrRXZlbnQpe2lmKCF0aGlzLnNlbGVjdGlvbl8pcmV0dXJuO2NsaWNrRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZXZlbnQ9bmV3IHRyLm1vZGVsLlJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO2V2ZW50LnNlbGVjdGlvbj10aGlzLmdldEN1cnJlbnRTZWxlY3Rpb25fKCk7dGhpcy5kaXNwYXRjaEV2ZW50KGV2ZW50KTt9LG9uTW91c2VFbnRlcl8oKXt0aGlzLnNldEhpZ2hsaWdodF8odGhpcy5nZXRDdXJyZW50U2VsZWN0aW9uXygpKTt9LG9uTW91c2VMZWF2ZV8oKXt0aGlzLmNsZWFySGlnaGxpZ2h0XygpO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgVGFibGVGb3JtYXQ9e307VGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZT17Tk9ORTowLFJPVzoxLENFTEw6Mn07VGFibGVGb3JtYXQuSGlnaGxpZ2h0U3R5bGU9e0RFRkFVTFQ6MCxOT05FOjEsTElHSFQ6MixEQVJLOjN9O1RhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudD17TEVGVDowLFJJR0hUOjF9O3JldHVybntUYWJsZUZvcm1hdCx9O30pOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oKXtjb25zdCBSSUdIVF9BUlJPVz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjViNik7Y29uc3QgVU5TT1JURURfQVJST1c9U3RyaW5nLmZyb21DaGFyQ29kZSgweDI1QkYpO2NvbnN0IEFTQ0VORElOR19BUlJPVz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjVCNCk7Y29uc3QgREVTQ0VORElOR19BUlJPVz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjVCRSk7Y29uc3QgU2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGU7Y29uc3QgU2VsZWN0aW9uTW9kZVZhbHVlcz1uZXcgU2V0KE9iamVjdC52YWx1ZXMoU2VsZWN0aW9uTW9kZSkpO2NvbnN0IEhpZ2hsaWdodFN0eWxlPXRyLnVpLmIuVGFibGVGb3JtYXQuSGlnaGxpZ2h0U3R5bGU7Y29uc3QgSGlnaGxpZ2h0U3R5bGVWYWx1ZXM9bmV3IFNldChPYmplY3QudmFsdWVzKEhpZ2hsaWdodFN0eWxlKSk7Y29uc3QgQ29sdW1uQWxpZ25tZW50PXRyLnVpLmIuVGFibGVGb3JtYXQuQ29sdW1uQWxpZ25tZW50O2NvbnN0IENvbHVtbkFsaWdubWVudFZhbHVlcz1uZXcgU2V0KE9iamVjdC52YWx1ZXMoQ29sdW1uQWxpZ25tZW50KSk7UG9seW1lcih7aXM6J3RyLXVpLWItdGFibGUnLGNyZWF0ZWQoKXt0aGlzLnNlbGVjdGlvbk1vZGVfPVNlbGVjdGlvbk1vZGUuTk9ORTt0aGlzLnJvd0hpZ2hsaWdodFN0eWxlXz1IaWdobGlnaHRTdHlsZS5ERUZBVUxUO3RoaXMuY2VsbEhpZ2hsaWdodFN0eWxlXz1IaWdobGlnaHRTdHlsZS5ERUZBVUxUO3RoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPXVuZGVmaW5lZDt0aGlzLnRhYmxlQ29sdW1uc189W107dGhpcy50YWJsZVJvd3NfPVtdO3RoaXMudGFibGVSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnRhYmxlRm9vdGVyUm93c189W107dGhpcy50YWJsZUZvb3RlclJvd3NJbmZvXz1uZXcgV2Vha01hcCgpO3RoaXMuc29ydENvbHVtbkluZGV4Xz11bmRlZmluZWQ7dGhpcy5zb3J0RGVzY2VuZGluZ189ZmFsc2U7dGhpcy5jb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnNfPVtdO3RoaXMuaGVhZGVyQ2VsbHNfPVtdO3RoaXMuc2hvd0hlYWRlcl89dHJ1ZTt0aGlzLmVtcHR5VmFsdWVfPXVuZGVmaW5lZDt0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfPSdzdWJSb3dzJzt0aGlzLmN1c3RvbWl6ZVRhYmxlUm93Q2FsbGJhY2tfPXVuZGVmaW5lZDt0aGlzLmRlZmF1bHRFeHBhbnNpb25TdGF0ZUNhbGxiYWNrXz11bmRlZmluZWQ7dGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXz10cnVlO3RoaXMuY29tcHV0ZWRGb250U2l6ZVB4Xz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuJC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpLHRydWUpO3RoaXMuJC5ib2R5LmFkZEV2ZW50TGlzdGVuZXIoJ2ZvY3VzJyx0aGlzLm9uRm9jdXNfLmJpbmQodGhpcyksdHJ1ZSk7fSxjbGVhcigpe3RoaXMuc2VsZWN0aW9uTW9kZV89U2VsZWN0aW9uTW9kZS5OT05FO3RoaXMucm93SGlnaGxpZ2h0U3R5bGVfPUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQ7dGhpcy5jZWxsSGlnaGxpZ2h0U3R5bGVfPUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQ7dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO3RoaXMudGFibGVDb2x1bW5zXz1bXTt0aGlzLnRhYmxlUm93c189W107dGhpcy50YWJsZVJvd3NJbmZvXz1uZXcgV2Vha01hcCgpO3RoaXMudGFibGVGb290ZXJSb3dzXz1bXTt0aGlzLnRhYmxlRm9vdGVyUm93c0luZm9fPW5ldyBXZWFrTWFwKCk7dGhpcy5zb3J0Q29sdW1uSW5kZXhfPXVuZGVmaW5lZDt0aGlzLnNvcnREZXNjZW5kaW5nXz1mYWxzZTt0aGlzLmNvbHVtbnNXaXRoRXhwYW5kQnV0dG9uc189W107dGhpcy5oZWFkZXJDZWxsc189W107dGhpcy5zaG93SGVhZGVyXz10cnVlO3RoaXMuZW1wdHlWYWx1ZV89dW5kZWZpbmVkO3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV89J3N1YlJvd3MnO3RoaXMuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2tfPXVuZGVmaW5lZDt0aGlzLnVzZXJDYW5Nb2RpZnlTb3J0T3JkZXJfPXRydWU7fSxzZXQgemVicmEoemVicmEpe2lmKHplYnJhKXt0aGlzLnNldEF0dHJpYnV0ZSgnemVicmEnLHRydWUpO31lbHNle3RoaXMucmVtb3ZlQXR0cmlidXRlKCd6ZWJyYScpO319LGdldCB6ZWJyYSgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgnemVicmEnKTt9LGdldCBzaG93SGVhZGVyKCl7cmV0dXJuIHRoaXMuc2hvd0hlYWRlcl87fSxzZXQgc2hvd0hlYWRlcihzaG93SGVhZGVyKXt0aGlzLnNob3dIZWFkZXJfPXNob3dIZWFkZXI7dGhpcy5zY2hlZHVsZVJlYnVpbGRIZWFkZXJzXygpO30sc2V0IHN1YlJvd3NQcm9wZXJ0eU5hbWUobmFtZSl7dGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lXz1uYW1lO30sc2V0IGRlZmF1bHRFeHBhbnNpb25TdGF0ZUNhbGxiYWNrKGNiKXt0aGlzLmRlZmF1bHRFeHBhbnNpb25TdGF0ZUNhbGxiYWNrXz1jYjt0aGlzLnNjaGVkdWxlUmVidWlsZEJvZHlfKCk7fSxzZXQgY3VzdG9taXplVGFibGVSb3dDYWxsYmFjayhjYil7dGhpcy5jdXN0b21pemVUYWJsZVJvd0NhbGxiYWNrXz1jYjt0aGlzLnNjaGVkdWxlUmVidWlsZEJvZHlfKCk7fSxnZXQgZW1wdHlWYWx1ZSgpe3JldHVybiB0aGlzLmVtcHR5VmFsdWVfO30sc2V0IGVtcHR5VmFsdWUoZW1wdHlWYWx1ZSl7Y29uc3QgcHJldmlvdXNFbXB0eVZhbHVlPXRoaXMuZW1wdHlWYWx1ZV87dGhpcy5lbXB0eVZhbHVlXz1lbXB0eVZhbHVlO2lmKHRoaXMudGFibGVSb3dzXy5sZW5ndGg9PT0wJiZlbXB0eVZhbHVlIT09cHJldmlvdXNFbXB0eVZhbHVlKXt0aGlzLnNjaGVkdWxlUmVidWlsZEJvZHlfKCk7fX0sc2V0IHRhYmxlQ29sdW1ucyhjb2x1bW5zKXtsZXQgY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zPVtdO2ZvcihsZXQgaT0wO2k8Y29sdW1ucy5sZW5ndGg7aSsrKXtpZihjb2x1bW5zW2ldLnNob3dFeHBhbmRCdXR0b25zKXtjb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnMucHVzaChpKTt9fQppZihjb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnMubGVuZ3RoPT09MCl7Y29sdW1uc1dpdGhFeHBhbmRCdXR0b25zPVswXTt9CmZvcihsZXQgaT0wO2k8Y29sdW1ucy5sZW5ndGg7aSsrKXtjb25zdCBjb2xJbmZvPWNvbHVtbnNbaV07aWYoY29sSW5mby53aWR0aD09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBoYXNFeHBhbmRCdXR0b249Y29sdW1uc1dpdGhFeHBhbmRCdXR0b25zLmluY2x1ZGVzKGkpO2NvbnN0IHc9Y29sSW5mby53aWR0aDtpZih3KXtpZigvXGQrcHgvLnRlc3Qodykpe2NvbnRpbnVlO31lbHNlIGlmKC9cZCslLy50ZXN0KHcpKXtpZihoYXNFeHBhbmRCdXR0b24pe3Rocm93IG5ldyBFcnJvcignQ29sdW1ucyBjYW5ub3QgYmUgJS1zaXplZCBhbmQgaG9zdCAnKycgYW4gZXhwYW5kIGJ1dHRvbicpO319ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCB3aWR0aCBzdHJpbmcnKTt9fX0KbGV0IHNvcnRJbmRleD11bmRlZmluZWQ7Y29uc3QgY3VycmVudFNvcnRDb2x1bW49dGhpcy50YWJsZUNvbHVtbnNbdGhpcy5zb3J0Q29sdW1uSW5kZXhfXTtpZihjdXJyZW50U29ydENvbHVtbil7Zm9yKGNvbnN0W2ksY29sdW1uXW9mIGNvbHVtbnMuZW50cmllcygpKXtpZihjdXJyZW50U29ydENvbHVtbi50aXRsZT09PWNvbHVtbi50aXRsZSl7c29ydEluZGV4PWk7YnJlYWs7fX19CnRoaXMudGFibGVDb2x1bW5zXz1jb2x1bW5zO3RoaXMuaGVhZGVyQ2VsbHNfPVtdO3RoaXMuY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zXz1jb2x1bW5zV2l0aEV4cGFuZEJ1dHRvbnM7dGhpcy5zY2hlZHVsZVJlYnVpbGRIZWFkZXJzXygpO3RoaXMuc29ydENvbHVtbkluZGV4PXNvcnRJbmRleDt0aGlzLnRhYmxlUm93cz10aGlzLnRhYmxlUm93c187fSxnZXQgdGFibGVDb2x1bW5zKCl7cmV0dXJuIHRoaXMudGFibGVDb2x1bW5zXzt9LHNldCB0YWJsZVJvd3Mocm93cyl7dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO3RoaXMudGFibGVSb3dzXz1yb3dzO3RoaXMudGFibGVSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnNjaGVkdWxlUmVidWlsZEJvZHlfKCk7fSxnZXQgdGFibGVSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVSb3dzXzt9LHNldCBmb290ZXJSb3dzKHJvd3Mpe3RoaXMudGFibGVGb290ZXJSb3dzXz1yb3dzO3RoaXMudGFibGVGb290ZXJSb3dzSW5mb189bmV3IFdlYWtNYXAoKTt0aGlzLnNjaGVkdWxlUmVidWlsZEZvb3Rlcl8oKTt9LGdldCBmb290ZXJSb3dzKCl7cmV0dXJuIHRoaXMudGFibGVGb290ZXJSb3dzXzt9LGdldCB1c2VyQ2FuTW9kaWZ5U29ydE9yZGVyKCl7cmV0dXJuIHRoaXMudXNlckNhbk1vZGlmeVNvcnRPcmRlcl87fSxzZXQgdXNlckNhbk1vZGlmeVNvcnRPcmRlcih1c2VyQ2FuTW9kaWZ5U29ydE9yZGVyKXtjb25zdCBuZXdVc2VyQ2FuTW9kaWZ5U29ydE9yZGVyPSEhdXNlckNhbk1vZGlmeVNvcnRPcmRlcjtpZihuZXdVc2VyQ2FuTW9kaWZ5U29ydE9yZGVyPT09dGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyl7cmV0dXJuO30KdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXz1uZXdVc2VyQ2FuTW9kaWZ5U29ydE9yZGVyO3RoaXMuc2NoZWR1bGVSZWJ1aWxkSGVhZGVyc18oKTt9LHNldCBzb3J0Q29sdW1uSW5kZXgobnVtYmVyKXtpZihudW1iZXI9PT10aGlzLnNvcnRDb2x1bW5JbmRleF8pcmV0dXJuO2lmKG51bWJlciE9PXVuZGVmaW5lZCl7aWYodGhpcy50YWJsZUNvbHVtbnNfLmxlbmd0aDw9bnVtYmVyKXt0aHJvdyBuZXcgRXJyb3IoJ0NvbHVtbiBudW1iZXIgJytudW1iZXIrJyBpcyBvdXQgb2YgYm91bmRzLicpO30KaWYoIXRoaXMudGFibGVDb2x1bW5zX1tudW1iZXJdLmNtcCl7dGhyb3cgbmV3IEVycm9yKCdDb2x1bW4gJytudW1iZXIrJyBkb2VzIG5vdCBoYXZlIGEgY29tcGFyYXRvci4nKTt9fQp0aGlzLnNvcnRDb2x1bW5JbmRleF89bnVtYmVyO3RoaXMudXBkYXRlSGVhZGVyQXJyb3dzXygpO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt0aGlzLmRpc3BhdGNoU29ydGluZ0NoYW5nZWRFdmVudF8oKTt9LGdldCBzb3J0Q29sdW1uSW5kZXgoKXtyZXR1cm4gdGhpcy5zb3J0Q29sdW1uSW5kZXhfO30sc2V0IHNvcnREZXNjZW5kaW5nKHZhbHVlKXtjb25zdCBuZXdWYWx1ZT0hIXZhbHVlO2lmKG5ld1ZhbHVlIT09dGhpcy5zb3J0RGVzY2VuZGluZ18pe3RoaXMuc29ydERlc2NlbmRpbmdfPW5ld1ZhbHVlO3RoaXMudXBkYXRlSGVhZGVyQXJyb3dzXygpO3RoaXMuc2NoZWR1bGVSZWJ1aWxkQm9keV8oKTt0aGlzLmRpc3BhdGNoU29ydGluZ0NoYW5nZWRFdmVudF8oKTt9fSxnZXQgc29ydERlc2NlbmRpbmcoKXtyZXR1cm4gdGhpcy5zb3J0RGVzY2VuZGluZ187fSx1cGRhdGVIZWFkZXJBcnJvd3NfKCl7Zm9yKGxldCBpPTA7aTx0aGlzLmhlYWRlckNlbGxzXy5sZW5ndGg7aSsrKXtjb25zdCBoZWFkZXJDZWxsPXRoaXMuaGVhZGVyQ2VsbHNfW2ldO2NvbnN0IGlzQ29sdW1uQ3VycmVudGx5U29ydGVkPWk9PT10aGlzLnNvcnRDb2x1bW5JbmRleF87aWYoIXRoaXMudGFibGVDb2x1bW5zX1tpXS5jbXB8fCghdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyYmIWlzQ29sdW1uQ3VycmVudGx5U29ydGVkKSl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudD0nJztjb250aW51ZTt9CmlmKCFpc0NvbHVtbkN1cnJlbnRseVNvcnRlZCl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudD1VTlNPUlRFRF9BUlJPVztoZWFkZXJDZWxsLnNpZGVDb250ZW50RGlzYWJsZWQ9ZmFsc2U7Y29udGludWU7fQpoZWFkZXJDZWxsLnNpZGVDb250ZW50PXRoaXMuc29ydERlc2NlbmRpbmdfP0RFU0NFTkRJTkdfQVJST1c6QVNDRU5ESU5HX0FSUk9XO2hlYWRlckNlbGwuc2lkZUNvbnRlbnREaXNhYmxlZD0hdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXzt9fSxnZW5lcmF0ZUhlYWRlckNvbHVtbnNfKCl7Y29uc3Qgc2VsZWN0ZWRUYWJsZUNvbHVtbkluZGV4PXRoaXMuc2VsZWN0ZWRUYWJsZUNvbHVtbkluZGV4O1BvbHltZXIuZG9tKHRoaXMuJC5jb2xzKS50ZXh0Q29udGVudD0nJztmb3IobGV0IGk9MDtpPHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg7KytpKXtjb25zdCBjb2xFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NvbCcpO2lmKGk9PT1zZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXgpe2NvbEVsZW1lbnQuc2V0QXR0cmlidXRlKCdzZWxlY3RlZCcsdHJ1ZSk7fQpQb2x5bWVyLmRvbSh0aGlzLiQuY29scykuYXBwZW5kQ2hpbGQoY29sRWxlbWVudCk7fQp0aGlzLmhlYWRlckNlbGxzXz1bXTtQb2x5bWVyLmRvbSh0aGlzLiQuaGVhZCkudGV4dENvbnRlbnQ9Jyc7aWYoIXRoaXMuc2hvd0hlYWRlcl8pcmV0dXJuO2NvbnN0IHRyPXRoaXMuYXBwZW5kTmV3RWxlbWVudF8odGhpcy4kLmhlYWQsJ3RyJyk7Zm9yKGxldCBpPTA7aTx0aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoO2krKyl7Y29uc3QgdGQ9dGhpcy5hcHBlbmROZXdFbGVtZW50Xyh0ciwndGQnKTtjb25zdCBoZWFkZXJDZWxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItdGFibGUtaGVhZGVyLWNlbGwnKTtoZWFkZXJDZWxsLmNvbHVtbj10aGlzLnRhYmxlQ29sdW1uc19baV07aWYodGhpcy50YWJsZUNvbHVtbnNfW2ldLmNtcCl7Y29uc3QgaXNDb2x1bW5DdXJyZW50bHlTb3J0ZWQ9aT09PXRoaXMuc29ydENvbHVtbkluZGV4XztpZihpc0NvbHVtbkN1cnJlbnRseVNvcnRlZCl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudD10aGlzLnNvcnREZXNjZW5kaW5nXz9ERVNDRU5ESU5HX0FSUk9XOkFTQ0VORElOR19BUlJPVztpZighdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudERpc2FibGVkPXRydWU7fX0KaWYodGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXyl7UG9seW1lci5kb20odGQpLmNsYXNzTGlzdC5hZGQoJ3NlbnNpdGl2ZScpO2lmKCFpc0NvbHVtbkN1cnJlbnRseVNvcnRlZCl7aGVhZGVyQ2VsbC5zaWRlQ29udGVudD1VTlNPUlRFRF9BUlJPVzt9CmhlYWRlckNlbGwudGFwQ2FsbGJhY2s9dGhpcy5jcmVhdGVTb3J0Q2FsbGJhY2tfKGkpO319ClBvbHltZXIuZG9tKHRkKS5hcHBlbmRDaGlsZChoZWFkZXJDZWxsKTt0aGlzLmhlYWRlckNlbGxzXy5wdXNoKGhlYWRlckNlbGwpO319LGFwcGx5U2l6ZXNfKCl7aWYodGhpcy50YWJsZVJvd3NfLmxlbmd0aD09PTAmJiF0aGlzLnNob3dIZWFkZXIpcmV0dXJuO2xldCByb3dUb1JlbW92ZVNpemluZztsZXQgcm93VG9TaXplO2lmKHRoaXMuc2hvd0hlYWRlcil7cm93VG9TaXplPVBvbHltZXIuZG9tKHRoaXMuJC5oZWFkKS5jaGlsZHJlblswXTtyb3dUb1JlbW92ZVNpemluZz1Qb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuY2hpbGRyZW5bMF07fWVsc2V7cm93VG9TaXplPVBvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5jaGlsZHJlblswXTtyb3dUb1JlbW92ZVNpemluZz1Qb2x5bWVyLmRvbSh0aGlzLiQuaGVhZCkuY2hpbGRyZW5bMF07fQpmb3IobGV0IGk9MDtpPHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg7aSsrKXtpZihyb3dUb1JlbW92ZVNpemluZyYmUG9seW1lci5kb20ocm93VG9SZW1vdmVTaXppbmcpLmNoaWxkcmVuW2ldKXtjb25zdCB0ZFRvUmVtb3ZlU2l6aW5nPVBvbHltZXIuZG9tKHJvd1RvUmVtb3ZlU2l6aW5nKS5jaGlsZHJlbltpXTt0ZFRvUmVtb3ZlU2l6aW5nLnN0eWxlLm1pbldpZHRoPScnO3RkVG9SZW1vdmVTaXppbmcuc3R5bGUud2lkdGg9Jyc7fQpjb25zdCB0ZD1Qb2x5bWVyLmRvbShyb3dUb1NpemUpLmNoaWxkcmVuW2ldO2xldCBkZWx0YTtpZih0aGlzLmNvbHVtbnNXaXRoRXhwYW5kQnV0dG9uc18uaW5jbHVkZXMoaSkpe3RkLnN0eWxlLnBhZGRpbmdMZWZ0PXRoaXMuYmFzaWNJbmRlbnRhdGlvbl8rJ3B4JztkZWx0YT10aGlzLmJhc2ljSW5kZW50YXRpb25fKydweCc7fWVsc2V7ZGVsdGE9dW5kZWZpbmVkO30KZnVuY3Rpb24gY2FsYyhiYXNlLGRlbHRhKXtpZihkZWx0YSl7cmV0dXJuJ2NhbGMoJytiYXNlKycgLSAnK2RlbHRhKycpJzt9CnJldHVybiBiYXNlO30KY29uc3Qgdz10aGlzLnRhYmxlQ29sdW1uc19baV0ud2lkdGg7aWYodyl7aWYoL1xkK3B4Ly50ZXN0KHcpKXt0ZC5zdHlsZS5taW5XaWR0aD1jYWxjKHcsZGVsdGEpO31lbHNlIGlmKC9cZCslLy50ZXN0KHcpKXt0ZC5zdHlsZS53aWR0aD13O31lbHNle3Rocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIHdpZHRoIHN0cmluZzogJyt3KTt9fX19LGNyZWF0ZVNvcnRDYWxsYmFja18oY29sdW1uTnVtYmVyKXtyZXR1cm4gZnVuY3Rpb24oKXtpZighdGhpcy51c2VyQ2FuTW9kaWZ5U29ydE9yZGVyXylyZXR1cm47Y29uc3QgcHJldmlvdXNJbmRleD10aGlzLnNvcnRDb2x1bW5JbmRleDt0aGlzLnNvcnRDb2x1bW5JbmRleD1jb2x1bW5OdW1iZXI7aWYocHJldmlvdXNJbmRleCE9PWNvbHVtbk51bWJlcil7dGhpcy5zb3J0RGVzY2VuZGluZz1mYWxzZTt9ZWxzZXt0aGlzLnNvcnREZXNjZW5kaW5nPSF0aGlzLnNvcnREZXNjZW5kaW5nO319LmJpbmQodGhpcyk7fSxnZW5lcmF0ZVRhYmxlUm93Tm9kZXNfKHRhYmxlU2VjdGlvbix1c2VyUm93cyxyb3dJbmZvTWFwLGluZGVudGF0aW9uLGxhc3RBZGRlZFJvdyxwYXJlbnRSb3dJbmZvKXtpZih0aGlzLnNvcnRDb2x1bW5JbmRleF8hPT11bmRlZmluZWQmJnRhYmxlU2VjdGlvbj09PXRoaXMuJC5ib2R5KXt1c2VyUm93cz11c2VyUm93cy5zbGljZSgpO3VzZXJSb3dzLnNvcnQoZnVuY3Rpb24ocm93QSxyb3dCKXtsZXQgYz10aGlzLnRhYmxlQ29sdW1uc19bdGhpcy5zb3J0Q29sdW1uSW5kZXhfXS5jbXAocm93QSxyb3dCKTtpZih0aGlzLnNvcnREZXNjZW5kaW5nXyl7Yz0tYzt9CnJldHVybiBjO30uYmluZCh0aGlzKSk7fQpmb3IobGV0IGk9MDtpPHVzZXJSb3dzLmxlbmd0aDtpKyspe2NvbnN0IHVzZXJSb3c9dXNlclJvd3NbaV07Y29uc3Qgcm93SW5mbz10aGlzLmdldE9yQ3JlYXRlUm93SW5mb0Zvcl8ocm93SW5mb01hcCx1c2VyUm93LHBhcmVudFJvd0luZm8pO2NvbnN0IGh0bWxOb2RlPXRoaXMuZ2V0SFRNTE5vZGVGb3JSb3dJbmZvXyh0YWJsZVNlY3Rpb24scm93SW5mbyxyb3dJbmZvTWFwLGluZGVudGF0aW9uKTtpZihsYXN0QWRkZWRSb3c9PT11bmRlZmluZWQpe1BvbHltZXIuZG9tKHRhYmxlU2VjdGlvbikuaW5zZXJ0QmVmb3JlKGh0bWxOb2RlLFBvbHltZXIuZG9tKHRhYmxlU2VjdGlvbikuZmlyc3RDaGlsZCk7fWVsc2V7Y29uc3QgbmV4dFNpYmxpbmdPZkxhc3RBZGRlZD1Qb2x5bWVyLmRvbShsYXN0QWRkZWRSb3cpLm5leHRTaWJsaW5nO1BvbHltZXIuZG9tKHRhYmxlU2VjdGlvbikuaW5zZXJ0QmVmb3JlKGh0bWxOb2RlLG5leHRTaWJsaW5nT2ZMYXN0QWRkZWQpO30KbGFzdEFkZGVkUm93PWh0bWxOb2RlO2lmKCFyb3dJbmZvLmlzRXhwYW5kZWQpY29udGludWU7bGFzdEFkZGVkUm93PXRoaXMuZ2VuZXJhdGVUYWJsZVJvd05vZGVzXyh0YWJsZVNlY3Rpb24sdXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXSxyb3dJbmZvTWFwLGluZGVudGF0aW9uKzEsbGFzdEFkZGVkUm93LHJvd0luZm8pO30KcmV0dXJuIGxhc3RBZGRlZFJvdzt9LGdldE9yQ3JlYXRlUm93SW5mb0Zvcl8ocm93SW5mb01hcCx1c2VyUm93LHBhcmVudFJvd0luZm8pe2xldCByb3dJbmZvPXVuZGVmaW5lZDtpZihyb3dJbmZvTWFwLmhhcyh1c2VyUm93KSl7cm93SW5mbz1yb3dJbmZvTWFwLmdldCh1c2VyUm93KTt9ZWxzZXtyb3dJbmZvPXt1c2VyUm93LGh0bWxOb2RlOnVuZGVmaW5lZCxwYXJlbnRSb3dJbmZvfTtyb3dJbmZvTWFwLnNldCh1c2VyUm93LHJvd0luZm8pO30Kcm93SW5mby5pc0V4cGFuZGVkPXRoaXMuZ2V0RXhwYW5kZWRGb3JVc2VyUm93Xyh1c2VyUm93KTtyZXR1cm4gcm93SW5mbzt9LGN1c3RvbWl6ZVRhYmxlUm93Xyh1c2VyUm93LHRyRWxlbWVudCl7aWYoIXRoaXMuY3VzdG9taXplVGFibGVSb3dDYWxsYmFja18pcmV0dXJuO3RoaXMuY3VzdG9taXplVGFibGVSb3dDYWxsYmFja18odXNlclJvdyx0ckVsZW1lbnQpO30sZ2V0IGJhc2ljSW5kZW50YXRpb25fKCl7aWYodGhpcy5jb21wdXRlZEZvbnRTaXplUHhfPT09dW5kZWZpbmVkKXt0aGlzLmNvbXB1dGVkRm9udFNpemVQeF89cGFyc2VJbnQoZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5mb250U2l6ZSl8fDE2O30KcmV0dXJuIHRoaXMuY29tcHV0ZWRGb250U2l6ZVB4Xy0yO30sZ2V0SFRNTE5vZGVGb3JSb3dJbmZvXyh0YWJsZVNlY3Rpb24scm93SW5mbyxyb3dJbmZvTWFwLGluZGVudGF0aW9uKXtpZihyb3dJbmZvLmh0bWxOb2RlKXt0aGlzLmN1c3RvbWl6ZVRhYmxlUm93Xyhyb3dJbmZvLnVzZXJSb3cscm93SW5mby5odG1sTm9kZSk7cmV0dXJuIHJvd0luZm8uaHRtbE5vZGU7fQpjb25zdCBJTkRFTlRfU1BBQ0U9aW5kZW50YXRpb24qMTY7Y29uc3QgSU5ERU5UX1NQQUNFX05PX0JVVFRPTj1pbmRlbnRhdGlvbioxNit0aGlzLmJhc2ljSW5kZW50YXRpb25fO2NvbnN0IHRyRWxlbWVudD10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTtyb3dJbmZvLmh0bWxOb2RlPXRyRWxlbWVudDtyb3dJbmZvLmluZGVudGF0aW9uPWluZGVudGF0aW9uO3RyRWxlbWVudC5yb3dJbmZvPXJvd0luZm87dGhpcy5jdXN0b21pemVUYWJsZVJvd18ocm93SW5mby51c2VyUm93LHRyRWxlbWVudCk7Y29uc3QgaXNCb2R5Um93PXRhYmxlU2VjdGlvbj09PXRoaXMuJC5ib2R5O2NvbnN0IGlzRXhwYW5kYWJsZVJvdz1yb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10mJnJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXS5sZW5ndGg7Zm9yKGxldCBpPTA7aTx0aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoOyl7Y29uc3QgdGQ9dGhpcy5hcHBlbmROZXdFbGVtZW50Xyh0ckVsZW1lbnQsJ3RkJyk7dGQuY29sdW1uSW5kZXg9aTtjb25zdCBjb2x1bW49dGhpcy50YWJsZUNvbHVtbnNfW2ldO2NvbnN0IHZhbHVlPWNvbHVtbi52YWx1ZShyb3dJbmZvLnVzZXJSb3cpO2NvbnN0IGNvbFNwYW49Y29sdW1uLmNvbFNwYW4/Y29sdW1uLmNvbFNwYW46MTt0ZC5zdHlsZS5jb2xTcGFuPWNvbFNwYW47c3dpdGNoKGNvbHVtbi5hbGlnbil7Y2FzZSB1bmRlZmluZWQ6Y2FzZSBDb2x1bW5BbGlnbm1lbnQuTEVGVDpicmVhaztjYXNlIENvbHVtbkFsaWdubWVudC5SSUdIVDp0ZC5zdHlsZS50ZXh0QWxpZ249J3JpZ2h0JzticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBhbGlnbm1lbnQgb2YgY29sdW1uIGF0IGluZGV4PScraSsnOiAnK2NvbHVtbi5hbGlnbik7fQppZih0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oaSkpe1BvbHltZXIuZG9tKHRkKS5jbGFzc0xpc3QuYWRkKCdzdXBwb3J0cy1zZWxlY3Rpb24nKTt9CmlmKHRoaXMuY29sdW1uc1dpdGhFeHBhbmRCdXR0b25zXy5pbmNsdWRlcyhpKSl7aWYocm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dJiZyb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPjApe3RkLnN0eWxlLnBhZGRpbmdMZWZ0PUlOREVOVF9TUEFDRSsncHgnO3RkLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO2NvbnN0IGV4cGFuZEJ1dHRvbj10aGlzLmFwcGVuZE5ld0VsZW1lbnRfKHRkLCdleHBhbmQtYnV0dG9uJyk7UG9seW1lci5kb20oZXhwYW5kQnV0dG9uKS50ZXh0Q29udGVudD1SSUdIVF9BUlJPVztpZihyb3dJbmZvLmlzRXhwYW5kZWQpe1BvbHltZXIuZG9tKGV4cGFuZEJ1dHRvbikuY2xhc3NMaXN0LmFkZCgnYnV0dG9uLWV4cGFuZGVkJyk7fX1lbHNle3RkLnN0eWxlLnBhZGRpbmdMZWZ0PUlOREVOVF9TUEFDRV9OT19CVVRUT04rJ3B4Jzt9fQppZih2YWx1ZSE9PXVuZGVmaW5lZCl7UG9seW1lci5kb20odGQpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSh2YWx1ZSx0aGlzLm93bmVyRG9jdW1lbnQpKTt9CnRkLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihpLGNsaWNrRXZlbnQpe2NsaWNrRXZlbnQucHJldmVudERlZmF1bHQoKTtpZighaXNCb2R5Um93JiYhaXNFeHBhbmRhYmxlUm93KXJldHVybjtjbGlja0V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2lmKGNsaWNrRXZlbnQudGFyZ2V0LnRhZ05hbWU9PT0nRVhQQU5ELUJVVFRPTicpe3RoaXMuc2V0RXhwYW5kZWRGb3JVc2VyUm93Xyh0YWJsZVNlY3Rpb24scm93SW5mb01hcCxyb3dJbmZvLnVzZXJSb3csIXJvd0luZm8uaXNFeHBhbmRlZCk7cmV0dXJuO30KaWYoaXNCb2R5Um93JiZ0aGlzLnNlbGVjdGlvbk1vZGVfIT09U2VsZWN0aW9uTW9kZS5OT05FKXtsZXQgc2hvdWxkU2VsZWN0PWZhbHNlO2xldCBzaG91bGRGb2N1cz1mYWxzZTtzd2l0Y2godGhpcy5zZWxlY3Rpb25Nb2RlXyl7Y2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzpzaG91bGRTZWxlY3Q9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18hPT1yb3dJbmZvO3Nob3VsZEZvY3VzPXRydWU7YnJlYWs7Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6aWYodGhpcy5kb2VzQ29sdW1uSW5kZXhTdXBwb3J0U2VsZWN0aW9uKGkpKXtzaG91bGRTZWxlY3Q9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18hPT1yb3dJbmZvfHx0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfIT09aTtzaG91bGRGb2N1cz10cnVlO30KYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VsZWN0aW9uIG1vZGUgJysKdGhpcy5zZWxlY3Rpb25Nb2RlXyk7fQppZihzaG91bGRGb2N1cyl7dGhpcy5mb2N1cygpO30KaWYoc2hvdWxkU2VsZWN0KXt0aGlzLmRpZFRhYmxlUm93SW5mb0dldENsaWNrZWRfKHJvd0luZm8saSk7cmV0dXJuO319CmlmKGlzRXhwYW5kYWJsZVJvdyl7dGhpcy5zZXRFeHBhbmRlZEZvclVzZXJSb3dfKHRhYmxlU2VjdGlvbixyb3dJbmZvTWFwLHJvd0luZm8udXNlclJvdywhcm93SW5mby5pc0V4cGFuZGVkKTt9fS5iaW5kKHRoaXMsaSkpO2lmKGlzQm9keVJvdyl7dGQuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLGZ1bmN0aW9uKGksZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLmRpc3BhdGNoU3RlcEludG9FdmVudF8ocm93SW5mbyxpKTt9LmJpbmQodGhpcyxpKSk7fQppKz1jb2xTcGFuO30KcmV0dXJuIHJvd0luZm8uaHRtbE5vZGU7fSxyZW1vdmVTdWJOb2Rlc18odGFibGVTZWN0aW9uLHJvd0luZm8scm93SW5mb01hcCl7aWYocm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dPT09dW5kZWZpbmVkKXJldHVybjtmb3IobGV0IGk9MDtpPHJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXS5sZW5ndGg7aSsrKXtjb25zdCBzdWJSb3c9cm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dW2ldO2NvbnN0IHN1YlJvd0luZm89cm93SW5mb01hcC5nZXQoc3ViUm93KTtpZighc3ViUm93SW5mbyljb250aW51ZTtjb25zdCBzdWJOb2RlPXN1YlJvd0luZm8uaHRtbE5vZGU7aWYoc3ViTm9kZSYmUG9seW1lci5kb20oc3ViTm9kZSkucGFyZW50Tm9kZT09PXRhYmxlU2VjdGlvbil7UG9seW1lci5kb20odGFibGVTZWN0aW9uKS5yZW1vdmVDaGlsZChzdWJOb2RlKTt0aGlzLnJlbW92ZVN1Yk5vZGVzXyh0YWJsZVNlY3Rpb24sc3ViUm93SW5mbyxyb3dJbmZvTWFwKTt9fX0sc2NoZWR1bGVSZWJ1aWxkSGVhZGVyc18oKXt0aGlzLmhlYWRlckRpcnR5Xz10cnVlO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sc2NoZWR1bGVSZWJ1aWxkQm9keV8oKXt0aGlzLmJvZHlEaXJ0eV89dHJ1ZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LHNjaGVkdWxlUmVidWlsZEZvb3Rlcl8oKXt0aGlzLmZvb3RlckRpcnR5Xz10cnVlO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sc2NoZWR1bGVSZWJ1aWxkXygpe2lmKHRoaXMucmVidWlsZFBlbmRpbmdfKXJldHVybjt0aGlzLnJlYnVpbGRQZW5kaW5nXz10cnVlO3NldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJlYnVpbGRQZW5kaW5nXz1mYWxzZTt0aGlzLnJlYnVpbGQoKTt9LmJpbmQodGhpcyksMCk7fSxyZWJ1aWxkSWZOZWVkZWRfKCl7dGhpcy5yZWJ1aWxkKCk7fSxyZWJ1aWxkKCl7Y29uc3Qgd2FzQm9keU9ySGVhZGVyRGlydHk9dGhpcy5oZWFkZXJEaXJ0eV98fHRoaXMuYm9keURpcnR5XztpZih0aGlzLmhlYWRlckRpcnR5Xyl7dGhpcy5nZW5lcmF0ZUhlYWRlckNvbHVtbnNfKCk7dGhpcy5oZWFkZXJEaXJ0eV89ZmFsc2U7fQppZih0aGlzLmJvZHlEaXJ0eV8pe1BvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS50ZXh0Q29udGVudD0nJzt0aGlzLmdlbmVyYXRlVGFibGVSb3dOb2Rlc18odGhpcy4kLmJvZHksdGhpcy50YWJsZVJvd3NfLHRoaXMudGFibGVSb3dzSW5mb18sMCx1bmRlZmluZWQsdW5kZWZpbmVkKTtpZih0aGlzLnRhYmxlUm93c18ubGVuZ3RoPT09MCYmdGhpcy5lbXB0eVZhbHVlXyE9PXVuZGVmaW5lZCl7Y29uc3QgdHJFbGVtZW50PXRoaXMub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1BvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5hcHBlbmRDaGlsZCh0ckVsZW1lbnQpO1BvbHltZXIuZG9tKHRyRWxlbWVudCkuY2xhc3NMaXN0LmFkZCgnZW1wdHktcm93Jyk7Y29uc3QgdGQ9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7UG9seW1lci5kb20odHJFbGVtZW50KS5hcHBlbmRDaGlsZCh0ZCk7dGQuY29sU3Bhbj10aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoO2NvbnN0IGVtcHR5VmFsdWU9dGhpcy5lbXB0eVZhbHVlXztQb2x5bWVyLmRvbSh0ZCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKGVtcHR5VmFsdWUsdGhpcy5vd25lckRvY3VtZW50KSk7fQp0aGlzLmJvZHlEaXJ0eV89ZmFsc2U7fQppZih3YXNCb2R5T3JIZWFkZXJEaXJ0eSl0aGlzLmFwcGx5U2l6ZXNfKCk7aWYodGhpcy5mb290ZXJEaXJ0eV8pe1BvbHltZXIuZG9tKHRoaXMuJC5mb290KS50ZXh0Q29udGVudD0nJzt0aGlzLmdlbmVyYXRlVGFibGVSb3dOb2Rlc18odGhpcy4kLmZvb3QsdGhpcy50YWJsZUZvb3RlclJvd3NfLHRoaXMudGFibGVGb290ZXJSb3dzSW5mb18sMCx1bmRlZmluZWQsdW5kZWZpbmVkKTtpZih0aGlzLnRhYmxlRm9vdGVyUm93c0luZm9fLmxlbmd0aCl7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLmNsYXNzTGlzdC5hZGQoJ2hhcy1mb290ZXInKTt9ZWxzZXtQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuY2xhc3NMaXN0LnJlbW92ZSgnaGFzLWZvb3RlcicpO30KdGhpcy5mb290ZXJEaXJ0eV89ZmFsc2U7fX0sYXBwZW5kTmV3RWxlbWVudF8ocGFyZW50LHRhZ05hbWUpe2NvbnN0IGVsZW1lbnQ9cGFyZW50Lm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCh0YWdOYW1lKTtQb2x5bWVyLmRvbShwYXJlbnQpLmFwcGVuZENoaWxkKGVsZW1lbnQpO3JldHVybiBlbGVtZW50O30sZ2V0RXhwYW5kZWRGb3JUYWJsZVJvdyh1c2VyUm93KXt0aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTtjb25zdCByb3dJbmZvPXRoaXMudGFibGVSb3dzSW5mb18uZ2V0KHVzZXJSb3cpO2lmKHJvd0luZm89PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUm93IGhhcyBub3QgYmVlbiBzZWVuLCBtdXN0IGV4cGFuZCBpdHMgcGFyZW50cycpO30KcmV0dXJuIHJvd0luZm8uaXNFeHBhbmRlZDt9LGdldEV4cGFuZGVkRm9yVXNlclJvd18odXNlclJvdyl7aWYodXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZCl7cmV0dXJuIGZhbHNlO30KaWYodXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXS5sZW5ndGg9PT0wKXtyZXR1cm4gZmFsc2U7fQppZih1c2VyUm93LmlzRXhwYW5kZWQpe3JldHVybiB0cnVlO30KaWYoKHVzZXJSb3cuaXNFeHBhbmRlZCE9PXVuZGVmaW5lZCkmJih1c2VyUm93LmlzRXhwYW5kZWQ9PT1mYWxzZSkpe3JldHVybiBmYWxzZTt9CmNvbnN0IHJvd0luZm89dGhpcy50YWJsZVJvd3NJbmZvXy5nZXQodXNlclJvdyk7aWYocm93SW5mbyYmcm93SW5mby5pc0V4cGFuZGVkKXtyZXR1cm4gdHJ1ZTt9CmlmKHRoaXMuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2tfPT09dW5kZWZpbmVkKXtyZXR1cm4gZmFsc2U7fQpsZXQgcGFyZW50VXNlclJvdz11bmRlZmluZWQ7aWYocm93SW5mbyYmcm93SW5mby5wYXJlbnRSb3dJbmZvKXtwYXJlbnRVc2VyUm93PXJvd0luZm8ucGFyZW50Um93SW5mby51c2VyUm93O30KcmV0dXJuIHRoaXMuZGVmYXVsdEV4cGFuc2lvblN0YXRlQ2FsbGJhY2tfKHVzZXJSb3cscGFyZW50VXNlclJvdyk7fSxzZXRFeHBhbmRlZEZvclRhYmxlUm93KHVzZXJSb3csZXhwYW5kZWQpe3RoaXMucmVidWlsZElmTmVlZGVkXygpO2NvbnN0IHJvd0luZm89dGhpcy50YWJsZVJvd3NJbmZvXy5nZXQodXNlclJvdyk7aWYocm93SW5mbz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSb3cgaGFzIG5vdCBiZWVuIHNlZW4sIG11c3QgZXhwYW5kIGl0cyBwYXJlbnRzJyk7fQpyZXR1cm4gdGhpcy5zZXRFeHBhbmRlZEZvclVzZXJSb3dfKHRoaXMuJC5ib2R5LHRoaXMudGFibGVSb3dzSW5mb18sdXNlclJvdyxleHBhbmRlZCk7fSxzZXRFeHBhbmRlZEZvclVzZXJSb3dfKHRhYmxlU2VjdGlvbixyb3dJbmZvTWFwLHVzZXJSb3csZXhwYW5kZWQpe3RoaXMucmVidWlsZElmTmVlZGVkXygpO2NvbnN0IHJvd0luZm89cm93SW5mb01hcC5nZXQodXNlclJvdyk7aWYocm93SW5mbz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSb3cgaGFzIG5vdCBiZWVuIHNlZW4sIG11c3QgZXhwYW5kIGl0cyBwYXJlbnRzJyk7fQpjb25zdCB3YXNFeHBhbmRlZD1yb3dJbmZvLmlzRXhwYW5kZWQ7cm93SW5mby5pc0V4cGFuZGVkPSEhZXhwYW5kZWQ7aWYocm93SW5mby5odG1sTm9kZT09PXVuZGVmaW5lZClyZXR1cm47aWYocm93SW5mby5odG1sTm9kZS5wYXJlbnRFbGVtZW50IT09dGFibGVTZWN0aW9uKXtyZXR1cm47fQpjb25zdCBleHBhbmRCdXR0b249UG9seW1lci5kb20ocm93SW5mby5odG1sTm9kZSkucXVlcnlTZWxlY3RvcignZXhwYW5kLWJ1dHRvbicpO2lmKHJvd0luZm8uaXNFeHBhbmRlZCl7UG9seW1lci5kb20oZXhwYW5kQnV0dG9uKS5jbGFzc0xpc3QuYWRkKCdidXR0b24tZXhwYW5kZWQnKTtjb25zdCBsYXN0QWRkZWRSb3c9cm93SW5mby5odG1sTm9kZTtpZihyb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10pe3RoaXMuZ2VuZXJhdGVUYWJsZVJvd05vZGVzXyh0YWJsZVNlY3Rpb24scm93SW5mby51c2VyUm93W3RoaXMuc3ViUm93c1Byb3BlcnR5TmFtZV9dLHJvd0luZm9NYXAscm93SW5mby5pbmRlbnRhdGlvbisxLGxhc3RBZGRlZFJvdyxyb3dJbmZvKTt9fWVsc2V7UG9seW1lci5kb20oZXhwYW5kQnV0dG9uKS5jbGFzc0xpc3QucmVtb3ZlKCdidXR0b24tZXhwYW5kZWQnKTt0aGlzLnJlbW92ZVN1Yk5vZGVzXyh0YWJsZVNlY3Rpb24scm93SW5mbyxyb3dJbmZvTWFwKTt9CmlmKHdhc0V4cGFuZGVkIT09cm93SW5mby5pc0V4cGFuZGVkKXtjb25zdCBlPW5ldyB0ci5iLkV2ZW50KCdyb3ctZXhwYW5kZWQtY2hhbmdlZCcpO2Uucm93PXJvd0luZm8udXNlclJvdzt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fQp0aGlzLm1heWJlVXBkYXRlU2VsZWN0ZWRSb3dfKCk7fSxnZXQgc2VsZWN0aW9uTW9kZSgpe3JldHVybiB0aGlzLnNlbGVjdGlvbk1vZGVfO30sc2V0IHNlbGVjdGlvbk1vZGUoc2VsZWN0aW9uTW9kZSl7aWYoIVNlbGVjdGlvbk1vZGVWYWx1ZXMuaGFzKHNlbGVjdGlvbk1vZGUpKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgc2VsZWN0aW9uIG1vZGUgJytzZWxlY3Rpb25Nb2RlKTt9CnRoaXMucmVidWlsZElmTmVlZGVkXygpO3RoaXMuc2VsZWN0aW9uTW9kZV89c2VsZWN0aW9uTW9kZTt0aGlzLmRpZFNlbGVjdGlvblN0YXRlQ2hhbmdlXygpO30sZ2V0IHJvd0hpZ2hsaWdodFN0eWxlKCl7cmV0dXJuIHRoaXMucm93SGlnaGxpZ2h0U3R5bGVfO30sc2V0IHJvd0hpZ2hsaWdodFN0eWxlKHJvd0hpZ2hsaWdodFN0eWxlKXtpZighSGlnaGxpZ2h0U3R5bGVWYWx1ZXMuaGFzKHJvd0hpZ2hsaWdodFN0eWxlKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHJvdyBoaWdobGlnaHQgc3R5bGUgJytyb3dIaWdobGlnaHRTdHlsZSk7fQp0aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTt0aGlzLnJvd0hpZ2hsaWdodFN0eWxlXz1yb3dIaWdobGlnaHRTdHlsZTt0aGlzLmRpZFNlbGVjdGlvblN0YXRlQ2hhbmdlXygpO30sZ2V0IHJlc29sdmVkUm93SGlnaGxpZ2h0U3R5bGUoKXtpZih0aGlzLnJvd0hpZ2hsaWdodFN0eWxlXyE9PUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQpe3JldHVybiB0aGlzLnJvd0hpZ2hsaWdodFN0eWxlXzt9CnN3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuTk9ORTpyZXR1cm4gSGlnaGxpZ2h0U3R5bGUuTk9ORTtjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnJldHVybiBIaWdobGlnaHRTdHlsZS5EQVJLO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOnJldHVybiBIaWdobGlnaHRTdHlsZS5MSUdIVDtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3NlbGVjdGlvbk1vZGUpO319LGdldCBjZWxsSGlnaGxpZ2h0U3R5bGUoKXtyZXR1cm4gdGhpcy5jZWxsSGlnaGxpZ2h0U3R5bGVfO30sc2V0IGNlbGxIaWdobGlnaHRTdHlsZShjZWxsSGlnaGxpZ2h0U3R5bGUpe2lmKCFIaWdobGlnaHRTdHlsZVZhbHVlcy5oYXMoY2VsbEhpZ2hsaWdodFN0eWxlKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGNlbGwgaGlnaGxpZ2h0IHN0eWxlICcrY2VsbEhpZ2hsaWdodFN0eWxlKTt9CnRoaXMucmVidWlsZElmTmVlZGVkXygpO3RoaXMuY2VsbEhpZ2hsaWdodFN0eWxlXz1jZWxsSGlnaGxpZ2h0U3R5bGU7dGhpcy5kaWRTZWxlY3Rpb25TdGF0ZUNoYW5nZV8oKTt9LGdldCByZXNvbHZlZENlbGxIaWdobGlnaHRTdHlsZSgpe2lmKHRoaXMuY2VsbEhpZ2hsaWdodFN0eWxlXyE9PUhpZ2hsaWdodFN0eWxlLkRFRkFVTFQpe3JldHVybiB0aGlzLmNlbGxIaWdobGlnaHRTdHlsZV87fQpzd2l0Y2godGhpcy5zZWxlY3Rpb25Nb2RlXyl7Y2FzZSBTZWxlY3Rpb25Nb2RlLk5PTkU6Y2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzpyZXR1cm4gSGlnaGxpZ2h0U3R5bGUuTk9ORTtjYXNlIFNlbGVjdGlvbk1vZGUuQ0VMTDpyZXR1cm4gSGlnaGxpZ2h0U3R5bGUuREFSSztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3NlbGVjdGlvbk1vZGUpO319LHNldEhpZ2hsaWdodFN0eWxlXyhoaWdobGlnaHRBdHRyaWJ1dGUscmVzb2x2ZWRIaWdobGlnaHRTdHlsZSl7c3dpdGNoKHJlc29sdmVkSGlnaGxpZ2h0U3R5bGUpe2Nhc2UgSGlnaGxpZ2h0U3R5bGUuTk9ORTpQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkucmVtb3ZlQXR0cmlidXRlKGhpZ2hsaWdodEF0dHJpYnV0ZSk7YnJlYWs7Y2FzZSBIaWdobGlnaHRTdHlsZS5MSUdIVDpQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuc2V0QXR0cmlidXRlKGhpZ2hsaWdodEF0dHJpYnV0ZSwnbGlnaHQnKTticmVhaztjYXNlIEhpZ2hsaWdodFN0eWxlLkRBUks6UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZShoaWdobGlnaHRBdHRyaWJ1dGUsJ2RhcmsnKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCByZXNvbHZlZCBoaWdobGlnaHQgc3R5bGUgJysKcmVzb2x2ZWRIaWdobGlnaHRTdHlsZSk7fX0sZGlkU2VsZWN0aW9uU3RhdGVDaGFuZ2VfKCl7dGhpcy5zZXRIaWdobGlnaHRTdHlsZV8oJ3Jvdy1oaWdobGlnaHQtc3R5bGUnLHRoaXMucmVzb2x2ZWRSb3dIaWdobGlnaHRTdHlsZSk7dGhpcy5zZXRIaWdobGlnaHRTdHlsZV8oJ2NlbGwtaGlnaGxpZ2h0LXN0eWxlJyx0aGlzLnJlc29sdmVkQ2VsbEhpZ2hsaWdodFN0eWxlKTt0aGlzLnJlbW92ZVNlbGVjdGVkU3RhdGVfKCk7c3dpdGNoKHRoaXMuc2VsZWN0aW9uTW9kZV8pe2Nhc2UgU2VsZWN0aW9uTW9kZS5ST1c6UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgnc2VsZWN0aW9uLW1vZGUnLCdyb3cnKTtQb2x5bWVyLmRvbSh0aGlzLiQuYm9keSkuc2V0QXR0cmlidXRlKCd0YWJpbmRleCcsMCk7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz11bmRlZmluZWQ7YnJlYWs7Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgnc2VsZWN0aW9uLW1vZGUnLCdjZWxsJyk7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLDApO2lmKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fJiZ0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXtjb25zdCBpPXRoaXMuZ2V0Rmlyc3RTZWxlY3RhYmxlQ29sdW1uSW5kZXhfKCk7aWYoaT09PS0xKXt0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz11bmRlZmluZWQ7fWVsc2V7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz1pO319CmJyZWFrO2Nhc2UgU2VsZWN0aW9uTW9kZS5OT05FOlBvbHltZXIuZG9tKHRoaXMuJC5ib2R5KS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGlvbi1tb2RlJyk7UG9seW1lci5kb20odGhpcy4kLmJvZHkpLnJlbW92ZUF0dHJpYnV0ZSgndGFiaW5kZXgnKTt0aGlzLiQuYm9keS5ibHVyKCk7dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrdGhpcy5zZWxlY3Rpb25Nb2RlXyk7fQp0aGlzLm1heWJlVXBkYXRlU2VsZWN0ZWRSb3dfKCk7fSxtYXliZVVwZGF0ZVNlbGVjdGVkUm93Xygpe2lmKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fPT09dW5kZWZpbmVkKXJldHVybjtmdW5jdGlvbiBpc1Zpc2libGUocm93SW5mbyl7aWYoIXJvd0luZm8uaHRtbE5vZGUpcmV0dXJuIGZhbHNlO3JldHVybiEhcm93SW5mby5odG1sTm9kZS5wYXJlbnRFbGVtZW50O30KaWYoaXNWaXNpYmxlKHRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fKSl7dGhpcy51cGRhdGVTZWxlY3RlZFN0YXRlXygpO3JldHVybjt9CnRoaXMucmVtb3ZlU2VsZWN0ZWRTdGF0ZV8oKTtsZXQgY3VyUm93SW5mbz10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXzt3aGlsZShjdXJSb3dJbmZvJiYhaXNWaXNpYmxlKGN1clJvd0luZm8pKXtjdXJSb3dJbmZvPWN1clJvd0luZm8ucGFyZW50Um93SW5mbzt9CnRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fPWN1clJvd0luZm87aWYodGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18pe3RoaXMudXBkYXRlU2VsZWN0ZWRTdGF0ZV8oKTt9ZWxzZXt0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPXVuZGVmaW5lZDt9fSxkaWRUYWJsZVJvd0luZm9HZXRDbGlja2VkXyhyb3dJbmZvLGNvbHVtbkluZGV4KXtzd2l0Y2godGhpcy5zZWxlY3Rpb25Nb2RlXyl7Y2FzZSBTZWxlY3Rpb25Nb2RlLk5PTkU6cmV0dXJuO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOmlmKCF0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oY29sdW1uSW5kZXgpKXtyZXR1cm47fQppZih0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXghPT1jb2x1bW5JbmRleCl7dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4PWNvbHVtbkluZGV4O30KY2FzZSBTZWxlY3Rpb25Nb2RlLlJPVzppZih0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXyE9PXJvd0luZm8pe3RoaXMuc2VsZWN0ZWRUYWJsZVJvdz1yb3dJbmZvLnVzZXJSb3c7fX19LGRpc3BhdGNoU3RlcEludG9FdmVudF8ocm93SW5mbyxjb2x1bW5JbmRleCl7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgnc3RlcC1pbnRvJyk7ZS50YWJsZVJvdz1yb3dJbmZvLnVzZXJSb3c7ZS50YWJsZUNvbHVtbj10aGlzLnRhYmxlQ29sdW1uc19bY29sdW1uSW5kZXhdO2UuY29sdW1uSW5kZXg9Y29sdW1uSW5kZXg7dGhpcy5kaXNwYXRjaEV2ZW50KGUpO30sZ2V0IHNlbGVjdGVkQ2VsbCgpe2NvbnN0IHJvdz10aGlzLnNlbGVjdGVkVGFibGVSb3c7Y29uc3QgY29sdW1uSW5kZXg9dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4O2lmKHJvdz09PXVuZGVmaW5lZHx8Y29sdW1uSW5kZXg9PT11bmRlZmluZWR8fHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg8PWNvbHVtbkluZGV4KXtyZXR1cm4gdW5kZWZpbmVkO30KY29uc3QgY29sdW1uPXRoaXMudGFibGVDb2x1bW5zX1tjb2x1bW5JbmRleF07cmV0dXJue3Jvdyxjb2x1bW4sdmFsdWU6Y29sdW1uLnZhbHVlKHJvdyl9O30sZ2V0IHNlbGVjdGVkVGFibGVDb2x1bW5JbmRleCgpe2NvbnN0IGNvbHM9UG9seW1lci5kb20odGhpcy4kLmNvbHMpLmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8Y29scy5sZW5ndGg7KytpKXtpZihjb2xzW2ldLmdldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnKSl7cmV0dXJuIGk7fX0KcmV0dXJuIHVuZGVmaW5lZDt9LHNldCBzZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXgoc2VsZWN0ZWRJbmRleCl7Y29uc3QgY29scz1Qb2x5bWVyLmRvbSh0aGlzLiQuY29scykuY2hpbGRyZW47Zm9yKGxldCBpPTA7aTxjb2xzLmxlbmd0aDsrK2kpe2lmKGk9PT1zZWxlY3RlZEluZGV4KXtjb2xzW2ldLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLHRydWUpO31lbHNle2NvbHNbaV0ucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO319fSxnZXQgc2VsZWN0ZWRUYWJsZVJvdygpe2lmKCF0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXy51c2VyUm93O30sc2V0IHNlbGVjdGVkVGFibGVSb3codXNlclJvdyl7dGhpcy5yZWJ1aWxkSWZOZWVkZWRfKCk7aWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuTk9ORSl7dGhyb3cgbmV3IEVycm9yKCdTZWxlY3Rpb24gaXMgb2ZmLicpO30KbGV0IHJvd0luZm87aWYodXNlclJvdz09PXVuZGVmaW5lZCl7cm93SW5mbz11bmRlZmluZWQ7fWVsc2V7cm93SW5mbz10aGlzLnRhYmxlUm93c0luZm9fLmdldCh1c2VyUm93KTtpZighcm93SW5mbyl7dGhyb3cgbmV3IEVycm9yKCdSb3cgaGFzIG5vdCBiZWVuIHNlZW4sIG11c3QgZXhwYW5kIGl0cyBwYXJlbnRzLicpO319CmNvbnN0IGU9dGhpcy5wcmVwYXJlVG9DaGFuZ2VTZWxlY3Rpb25fKCk7aWYoIXJvd0luZm8pe3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO31lbHNle3N3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89dW5kZWZpbmVkO2JyZWFrO2Nhc2UgU2VsZWN0aW9uTW9kZS5DRUxMOmlmKHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89PT11bmRlZmluZWQpe2NvbnN0IGk9dGhpcy5nZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF8oKTtpZihpPT09LTEpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGZpbmQgYSBzZWxlY3RhYmxlIGNvbHVtbi4nKTt9CnRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89aTt9CmJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrdGhpcy5zZWxlY3Rpb25Nb2RlXyk7fX0KdGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189cm93SW5mbzt0aGlzLnVwZGF0ZVNlbGVjdGVkU3RhdGVfKCk7dGhpcy5kaXNwYXRjaEV2ZW50KGUpO30scHJlcGFyZVRvQ2hhbmdlU2VsZWN0aW9uXygpe2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3NlbGVjdGlvbi1jaGFuZ2VkJyk7Y29uc3QgcHJldmlvdXNTZWxlY3RlZFJvd0luZm89dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb187aWYocHJldmlvdXNTZWxlY3RlZFJvd0luZm8pe2UucHJldmlvdXNTZWxlY3RlZFRhYmxlUm93PXByZXZpb3VzU2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3c7fWVsc2V7ZS5wcmV2aW91c1NlbGVjdGVkVGFibGVSb3c9dW5kZWZpbmVkO30KdGhpcy5yZW1vdmVTZWxlY3RlZFN0YXRlXygpO3JldHVybiBlO30scmVtb3ZlU2VsZWN0ZWRTdGF0ZV8oKXt0aGlzLnNldFNlbGVjdGVkU3RhdGVfKGZhbHNlKTt9LHVwZGF0ZVNlbGVjdGVkU3RhdGVfKCl7dGhpcy5zZXRTZWxlY3RlZFN0YXRlXyh0cnVlKTt9LHNldFNlbGVjdGVkU3RhdGVfKHNlbGVjdCl7aWYodGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb189PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHJvd05vZGU9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18uaHRtbE5vZGU7aWYoc2VsZWN0KXtQb2x5bWVyLmRvbShyb3dOb2RlKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJyx0cnVlKTt9ZWxzZXtQb2x5bWVyLmRvbShyb3dOb2RlKS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7fQpjb25zdCBjZWxsTm9kZT1Qb2x5bWVyLmRvbShyb3dOb2RlKS5jaGlsZHJlblt0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfXTtpZighY2VsbE5vZGUpcmV0dXJuO2lmKHNlbGVjdCl7UG9seW1lci5kb20oY2VsbE5vZGUpLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLHRydWUpO31lbHNle1BvbHltZXIuZG9tKGNlbGxOb2RlKS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7fX0sZG9lc0NvbHVtbkluZGV4U3VwcG9ydFNlbGVjdGlvbihjb2x1bW5JbmRleCl7Y29uc3QgY29sdW1uSW5mbz10aGlzLnRhYmxlQ29sdW1uc19bY29sdW1uSW5kZXhdO2NvbnN0IHNjcz1jb2x1bW5JbmZvLnN1cHBvcnRzQ2VsbFNlbGVjdGlvbjtpZihzY3M9PT1mYWxzZSlyZXR1cm4gZmFsc2U7cmV0dXJuIHRydWU7fSxnZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF8oKXtmb3IobGV0IGk9MDtpPHRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGg7aSsrKXtpZih0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oaSkpe3JldHVybiBpO319CnJldHVybi0xO30sZ2V0U2VsZWN0YWJsZU5vZGVHaXZlblRhYmxlUm93Tm9kZV8oaHRtbE5vZGUpe3N3aXRjaCh0aGlzLnNlbGVjdGlvbk1vZGVfKXtjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnJldHVybiBodG1sTm9kZTtjYXNlIFNlbGVjdGlvbk1vZGUuQ0VMTDpyZXR1cm4gUG9seW1lci5kb20oaHRtbE5vZGUpLmNoaWxkcmVuW3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF9dO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHNlbGVjdGlvbiBtb2RlICcrdGhpcy5zZWxlY3Rpb25Nb2RlXyk7fX0sZ2V0IHNlbGVjdGVkQ29sdW1uSW5kZXgoKXtpZih0aGlzLnNlbGVjdGlvbk1vZGVfIT09U2VsZWN0aW9uTW9kZS5DRUxMKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF87fSxzZXQgc2VsZWN0ZWRDb2x1bW5JbmRleChzZWxlY3RlZENvbHVtbkluZGV4KXt0aGlzLnJlYnVpbGRJZk5lZWRlZF8oKTtpZih0aGlzLnNlbGVjdGlvbk1vZGVfPT09U2VsZWN0aW9uTW9kZS5OT05FKXt0aHJvdyBuZXcgRXJyb3IoJ1NlbGVjdGlvbiBpcyBvZmYuJyk7fQppZihzZWxlY3RlZENvbHVtbkluZGV4PDB8fHNlbGVjdGVkQ29sdW1uSW5kZXg+PXRoaXMudGFibGVDb2x1bW5zXy5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleCcpO30KaWYoIXRoaXMuZG9lc0NvbHVtbkluZGV4U3VwcG9ydFNlbGVjdGlvbihzZWxlY3RlZENvbHVtbkluZGV4KSl7dGhyb3cgbmV3IEVycm9yKCdTZWxlY3Rpb24gaXMgbm90IHN1cHBvcnRlZCBvbiB0aGlzIGNvbHVtbicpO30KY29uc3QgZT10aGlzLnByZXBhcmVUb0NoYW5nZVNlbGVjdGlvbl8oKTtpZih0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXt0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz11bmRlZmluZWQ7fWVsc2UgaWYoIXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fKXtpZih0aGlzLnRhYmxlUm93c18ubGVuZ3RoPT09MCl7dGhyb3cgbmV3IEVycm9yKCdObyBhdmFpbGFibGUgcm93IHRvIGJlIHNlbGVjdGVkJyk7fQp0aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz10aGlzLnRhYmxlUm93c0luZm9fLmdldCh0aGlzLnRhYmxlUm93c19bMF0pO30KdGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xz1zZWxlY3RlZENvbHVtbkluZGV4O3RoaXMudXBkYXRlU2VsZWN0ZWRTdGF0ZV8oKTt0aGlzLmRpc3BhdGNoRXZlbnQoZSk7fSxvbktleURvd25fKGUpe2lmKHRoaXMuc2VsZWN0aW9uTW9kZV89PT1TZWxlY3Rpb25Nb2RlLk5PTkUpcmV0dXJuO2NvbnN0IENPREVfVE9fQ09NTUFORF9OQU1FUz17MTM6J0VOVEVSJywzMjonU1BBQ0UnLDM3OidBUlJPV19MRUZUJywzODonQVJST1dfVVAnLDM5OidBUlJPV19SSUdIVCcsNDA6J0FSUk9XX0RPV04nfTtjb25zdCBjbWROYW1lPUNPREVfVE9fQ09NTUFORF9OQU1FU1tlLmtleUNvZGVdO2lmKGNtZE5hbWU9PT11bmRlZmluZWQpcmV0dXJuO2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMucGVyZm9ybUtleUNvbW1hbmRfKGNtZE5hbWUpO30sb25Gb2N1c18oZSl7aWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuTk9ORXx8dGhpcy5zZWxlY3RlZFRhYmxlUm93fHx0aGlzLnRhYmxlUm93c18ubGVuZ3RoPT09MCl7cmV0dXJuO30KaWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuQ0VMTCYmdGhpcy5nZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF8oKT09PS0xKXtyZXR1cm47fQp0aGlzLnNlbGVjdGVkVGFibGVSb3c9dGhpcy50YWJsZVJvd3NfWzBdO30sZm9jdXMoKXt0aGlzLiQuYm9keS5mb2N1cygpO3RoaXMub25Gb2N1c18oKTt9LGJsdXIoKXt0aGlzLiQuYm9keS5ibHVyKCk7fSxnZXQgaXNGb2N1c2VkKCl7cmV0dXJuIHRoaXMucm9vdC5hY3RpdmVFbGVtZW50PT09dGhpcy4kLmJvZHk7fSxwZXJmb3JtS2V5Q29tbWFuZF8oY21kTmFtZSl7dGhpcy5yZWJ1aWxkSWZOZWVkZWRfKCk7c3dpdGNoKGNtZE5hbWUpe2Nhc2UnQVJST1dfVVAnOnRoaXMuc2VsZWN0UHJldmlvdXNPckZpcnN0Um93SWZQb3NzaWJsZV8oKTtyZXR1cm47Y2FzZSdBUlJPV19ET1dOJzp0aGlzLnNlbGVjdE5leHRPckZpcnN0Um93SWZQb3NzaWJsZV8oKTtyZXR1cm47Y2FzZSdBUlJPV19SSUdIVCc6c3dpdGNoKHRoaXMuc2VsZWN0aW9uTW9kZV8pe2Nhc2UgU2VsZWN0aW9uTW9kZS5OT05FOnJldHVybjtjYXNlIFNlbGVjdGlvbk1vZGUuUk9XOnRoaXMuZXhwYW5kUm93QW5kU2VsZWN0Q2hpbGRSb3dJZlBvc3NpYmxlXygpO3JldHVybjtjYXNlIFNlbGVjdGlvbk1vZGUuQ0VMTDp0aGlzLnNlbGVjdE5leHRTZWxlY3RhYmxlQ2VsbFRvVGhlUmlnaHRJZlBvc3NpYmxlXygpO3JldHVybjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3RoaXMuc2VsZWN0aW9uTW9kZV8pO30KY2FzZSdBUlJPV19MRUZUJzpzd2l0Y2godGhpcy5zZWxlY3Rpb25Nb2RlXyl7Y2FzZSBTZWxlY3Rpb25Nb2RlLk5PTkU6cmV0dXJuO2Nhc2UgU2VsZWN0aW9uTW9kZS5ST1c6dGhpcy5jb2xsYXBzZVJvd09yU2VsZWN0UGFyZW50Um93SWZQb3NzaWJsZV8oKTtyZXR1cm47Y2FzZSBTZWxlY3Rpb25Nb2RlLkNFTEw6dGhpcy5zZWxlY3ROZXh0U2VsZWN0YWJsZUNlbGxUb1RoZUxlZnRJZlBvc3NpYmxlXygpO3JldHVybjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWxlY3Rpb24gbW9kZSAnK3RoaXMuc2VsZWN0aW9uTW9kZV8pO30KY2FzZSdTUEFDRSc6dGhpcy50b2dnbGVSb3dFeHBhbnNpb25TdGF0ZUlmUG9zc2libGVfKCk7cmV0dXJuO2Nhc2UnRU5URVInOnRoaXMuc3RlcEludG9TZWxlY3Rpb25JZlBvc3NpYmxlXygpO3JldHVybjtkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIGNvbW1hbmQgJytjbWROYW1lKTt9fSxzZWxlY3RQcmV2aW91c09yRmlyc3RSb3dJZlBvc3NpYmxlXygpe2NvbnN0IHByZXY9dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18/dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18uaHRtbE5vZGUucHJldmlvdXNFbGVtZW50U2libGluZzp0aGlzLiQuYm9keS5maXJzdENoaWxkO2lmKCFwcmV2KXJldHVybjtpZih0aGlzLnNlbGVjdGlvbk1vZGVfPT09U2VsZWN0aW9uTW9kZS5DRUxMJiZ0aGlzLmdldEZpcnN0U2VsZWN0YWJsZUNvbHVtbkluZGV4XygpPT09LTEpe3JldHVybjt9CnRyLnVpLmIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChwcmV2KTt0aGlzLnNlbGVjdGVkVGFibGVSb3c9cHJldi5yb3dJbmZvLnVzZXJSb3c7fSxzZWxlY3ROZXh0T3JGaXJzdFJvd0lmUG9zc2libGVfKCl7dGhpcy5nZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF87Y29uc3QgbmV4dD10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXz90aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXy5odG1sTm9kZS5uZXh0RWxlbWVudFNpYmxpbmc6dGhpcy4kLmJvZHkuZmlyc3RDaGlsZDtpZighbmV4dClyZXR1cm47aWYodGhpcy5zZWxlY3Rpb25Nb2RlXz09PVNlbGVjdGlvbk1vZGUuQ0VMTCYmdGhpcy5nZXRGaXJzdFNlbGVjdGFibGVDb2x1bW5JbmRleF8oKT09PS0xKXtyZXR1cm47fQp0ci51aS5iLnNjcm9sbEludG9WaWV3SWZOZWVkZWQobmV4dCk7dGhpcy5zZWxlY3RlZFRhYmxlUm93PW5leHQucm93SW5mby51c2VyUm93O30sZXhwYW5kUm93QW5kU2VsZWN0Q2hpbGRSb3dJZlBvc3NpYmxlXygpe2NvbnN0IHNlbGVjdGVkUm93SW5mbz10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXztpZighc2VsZWN0ZWRSb3dJbmZvfHxzZWxlY3RlZFJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZHx8c2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPT09MCl7cmV0dXJuO30KaWYoIXNlbGVjdGVkUm93SW5mby5pc0V4cGFuZGVkKXt0aGlzLnNldEV4cGFuZGVkRm9yVGFibGVSb3coc2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3csdHJ1ZSk7fQp0aGlzLnNlbGVjdGVkVGFibGVSb3c9c2VsZWN0ZWRSb3dJbmZvLmh0bWxOb2RlLm5leHRFbGVtZW50U2libGluZy5yb3dJbmZvLnVzZXJSb3c7fSxjb2xsYXBzZVJvd09yU2VsZWN0UGFyZW50Um93SWZQb3NzaWJsZV8oKXtjb25zdCBzZWxlY3RlZFJvd0luZm89dGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb187aWYoIXNlbGVjdGVkUm93SW5mbylyZXR1cm47aWYoc2VsZWN0ZWRSb3dJbmZvLmlzRXhwYW5kZWQpe3RoaXMuc2V0RXhwYW5kZWRGb3JUYWJsZVJvdyhzZWxlY3RlZFJvd0luZm8udXNlclJvdyxmYWxzZSk7fWVsc2V7Y29uc3QgcGFyZW50Um93SW5mbz1zZWxlY3RlZFJvd0luZm8ucGFyZW50Um93SW5mbztpZihwYXJlbnRSb3dJbmZvKXt0aGlzLnNlbGVjdGVkVGFibGVSb3c9cGFyZW50Um93SW5mby51c2VyUm93O319fSxzZWxlY3ROZXh0U2VsZWN0YWJsZUNlbGxUb1RoZVJpZ2h0SWZQb3NzaWJsZV8oKXtpZighdGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb198fHRoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleF89PT11bmRlZmluZWQpe3JldHVybjt9CmZvcihsZXQgaT10aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfKzE7aTx0aGlzLnRhYmxlQ29sdW1uc18ubGVuZ3RoO2krKyl7aWYodGhpcy5kb2VzQ29sdW1uSW5kZXhTdXBwb3J0U2VsZWN0aW9uKGkpKXt0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXg9aTtyZXR1cm47fX19LHNlbGVjdE5leHRTZWxlY3RhYmxlQ2VsbFRvVGhlTGVmdElmUG9zc2libGVfKCl7aWYoIXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9ffHx0aGlzLnNlbGVjdGVkQ29sdW1uSW5kZXhfPT09dW5kZWZpbmVkKXtyZXR1cm47fQpmb3IobGV0IGk9dGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xy0xO2k+PTA7aS0tKXtpZih0aGlzLmRvZXNDb2x1bW5JbmRleFN1cHBvcnRTZWxlY3Rpb24oaSkpe3RoaXMuc2VsZWN0ZWRDb2x1bW5JbmRleD1pO3JldHVybjt9fX0sdG9nZ2xlUm93RXhwYW5zaW9uU3RhdGVJZlBvc3NpYmxlXygpe2NvbnN0IHNlbGVjdGVkUm93SW5mbz10aGlzLnNlbGVjdGVkVGFibGVSb3dJbmZvXztpZighc2VsZWN0ZWRSb3dJbmZvfHxzZWxlY3RlZFJvd0luZm8udXNlclJvd1t0aGlzLnN1YlJvd3NQcm9wZXJ0eU5hbWVfXT09PXVuZGVmaW5lZHx8c2VsZWN0ZWRSb3dJbmZvLnVzZXJSb3dbdGhpcy5zdWJSb3dzUHJvcGVydHlOYW1lX10ubGVuZ3RoPT09MCl7cmV0dXJuO30KdGhpcy5zZXRFeHBhbmRlZEZvclRhYmxlUm93KHNlbGVjdGVkUm93SW5mby51c2VyUm93LCFzZWxlY3RlZFJvd0luZm8uaXNFeHBhbmRlZCk7fSxzdGVwSW50b1NlbGVjdGlvbklmUG9zc2libGVfKCl7aWYoIXRoaXMuc2VsZWN0ZWRUYWJsZVJvd0luZm9fKXJldHVybjt0aGlzLmRpc3BhdGNoU3RlcEludG9FdmVudF8odGhpcy5zZWxlY3RlZFRhYmxlUm93SW5mb18sdGhpcy5zZWxlY3RlZENvbHVtbkluZGV4Xyk7fSxkaXNwYXRjaFNvcnRpbmdDaGFuZ2VkRXZlbnRfKCl7Y29uc3QgZT1uZXcgdHIuYi5FdmVudCgnc29ydC1jb2x1bW4tY2hhbmdlZCcpO2Uuc29ydENvbHVtbkluZGV4PXRoaXMuc29ydENvbHVtbkluZGV4XztlLnNvcnREZXNjZW5kaW5nPXRoaXMuc29ydERlc2NlbmRpbmdfO3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9fSk7fSkoKTsndXNlIHN0cmljdCc7Y29uc3QgQ29sdW1uQWxpZ25tZW50PXRyLnVpLmIuVGFibGVGb3JtYXQuQ29sdW1uQWxpZ25tZW50O1BvbHltZXIoe2lzOid0ci11aS1iLXRhYmxlLWhlYWRlci1jZWxsJyxjcmVhdGVkKCl7dGhpcy50YXBDYWxsYmFja189dW5kZWZpbmVkO3RoaXMuY2VsbFRpdGxlXz0nJzt0aGlzLmFsaWduXz11bmRlZmluZWQ7dGhpcy5zZWxlY3RhYmxlXz1mYWxzZTt0aGlzLmNvbHVtbl89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uVGFwXy5iaW5kKHRoaXMpKTt9LHNldCBjb2x1bW4oY29sdW1uKXt0aGlzLmNvbHVtbl89Y29sdW1uO3RoaXMuYWxpZ249Y29sdW1uLmFsaWduO3RoaXMuY2VsbFRpdGxlPWNvbHVtbi50aXRsZTt9LGdldCBjb2x1bW4oKXtyZXR1cm4gdGhpcy5jb2x1bW5fO30sc2V0IGNlbGxUaXRsZSh2YWx1ZSl7dGhpcy5jZWxsVGl0bGVfPXZhbHVlO2NvbnN0IHRpdGxlTm9kZT10ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUodGhpcy5jZWxsVGl0bGVfLHRoaXMub3duZXJEb2N1bWVudCk7dGhpcy4kLnRpdGxlLmlubmVyVGV4dD0nJztQb2x5bWVyLmRvbSh0aGlzLiQudGl0bGUpLmFwcGVuZENoaWxkKHRpdGxlTm9kZSk7fSxnZXQgY2VsbFRpdGxlKCl7cmV0dXJuIHRoaXMuY2VsbFRpdGxlXzt9LHNldCBhbGlnbihhbGlnbil7c3dpdGNoKGFsaWduKXtjYXNlIHVuZGVmaW5lZDpjYXNlIENvbHVtbkFsaWdubWVudC5MRUZUOnRoaXMuc3R5bGUuanVzdGlmeUNvbnRlbnQ9Jyc7YnJlYWs7Y2FzZSBDb2x1bW5BbGlnbm1lbnQuUklHSFQ6dGhpcy5zdHlsZS5qdXN0aWZ5Q29udGVudD0nZmxleC1lbmQnO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGFsaWdubWVudCBvZiBjb2x1bW4gKHRpdGxlPVwnJysKdGhpcy5jZWxsVGl0bGVfKydcJyk6ICcrYWxpZ24pO30KdGhpcy5hbGlnbl89YWxpZ247fSxnZXQgYWxpZ24oKXtyZXR1cm4gdGhpcy5hbGlnbl87fSxjbGVhclNpZGVDb250ZW50KCl7UG9seW1lci5kb20odGhpcy4kLnNpZGUpLnRleHRDb250ZW50PScnO30sc2V0IHNpZGVDb250ZW50KGNvbnRlbnQpe1BvbHltZXIuZG9tKHRoaXMuJC5zaWRlKS50ZXh0Q29udGVudD1jb250ZW50O3RoaXMuJC5zaWRlLnN0eWxlLmRpc3BsYXk9Y29udGVudD8naW5saW5lJzonbm9uZSc7fSxnZXQgc2lkZUNvbnRlbnQoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy4kLnNpZGUpLnRleHRDb250ZW50O30sc2V0IHNpZGVDb250ZW50RGlzYWJsZWQoc2lkZUNvbnRlbnREaXNhYmxlZCl7dGhpcy4kLnNpZGUuY2xhc3NMaXN0LnRvZ2dsZSgnZGlzYWJsZWQnLHNpZGVDb250ZW50RGlzYWJsZWQpO30sZ2V0IHNpZGVDb250ZW50RGlzYWJsZWQoKXtyZXR1cm4gdGhpcy4kLnNpZGUuY2xhc3NMaXN0LmNvbnRhaW5zKCdkaXNhYmxlZCcpO30sc2V0IHRhcENhbGxiYWNrKGNhbGxiYWNrKXt0aGlzLnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7dGhpcy50YXBDYWxsYmFja189Y2FsbGJhY2s7fSxnZXQgdGFwQ2FsbGJhY2soKXtyZXR1cm4gdGhpcy50YXBDYWxsYmFja187fSxvblRhcF8oKXtpZih0aGlzLnRhcENhbGxiYWNrXyl7dGhpcy50YXBDYWxsYmFja18oKTt9fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYi5tYXRoJyxmdW5jdGlvbigpe2NsYXNzIFJ1bm5pbmdTdGF0aXN0aWNze2NvbnN0cnVjdG9yKCl7dGhpcy5tZWFuXz0wO3RoaXMuY291bnRfPTA7dGhpcy5tYXhfPS1JbmZpbml0eTt0aGlzLm1pbl89SW5maW5pdHk7dGhpcy5zdW1fPTA7dGhpcy52YXJpYW5jZV89MDt0aGlzLm1lYW5sb2dzXz0wO30KZ2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuY291bnRfO30KZ2V0IGdlb21ldHJpY01lYW4oKXtpZih0aGlzLm1lYW5sb2dzXz09PXVuZGVmaW5lZClyZXR1cm4gMDtyZXR1cm4gTWF0aC5leHAodGhpcy5tZWFubG9nc18pO30KZ2V0IG1lYW4oKXtpZih0aGlzLmNvdW50Xz09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5tZWFuXzt9CmdldCBtYXgoKXtyZXR1cm4gdGhpcy5tYXhfO30KZ2V0IG1pbigpe3JldHVybiB0aGlzLm1pbl87fQpnZXQgc3VtKCl7cmV0dXJuIHRoaXMuc3VtXzt9CmdldCB2YXJpYW5jZSgpe2lmKHRoaXMuY291bnRfPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKHRoaXMuY291bnRfPT09MSlyZXR1cm4gMDtyZXR1cm4gdGhpcy52YXJpYW5jZV8vKHRoaXMuY291bnRfLTEpO30KZ2V0IHN0ZGRldigpe2lmKHRoaXMuY291bnRfPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBNYXRoLnNxcnQodGhpcy52YXJpYW5jZSk7fQphZGQoeCl7dGhpcy5jb3VudF8rKzt0aGlzLm1heF89TWF0aC5tYXgodGhpcy5tYXhfLHgpO3RoaXMubWluXz1NYXRoLm1pbih0aGlzLm1pbl8seCk7dGhpcy5zdW1fKz14O2lmKHg8PTApe3RoaXMubWVhbmxvZ3NfPXVuZGVmaW5lZDt9ZWxzZSBpZih0aGlzLm1lYW5sb2dzXyE9PXVuZGVmaW5lZCl7dGhpcy5tZWFubG9nc18rPShNYXRoLmxvZyhNYXRoLmFicyh4KSktdGhpcy5tZWFubG9nc18pL3RoaXMuY291bnQ7fQppZih0aGlzLmNvdW50Xz09PTEpe3RoaXMubWVhbl89eDt0aGlzLnZhcmlhbmNlXz0wO31lbHNle2NvbnN0IG9sZE1lYW49dGhpcy5tZWFuXztjb25zdCBvbGRWYXJpYW5jZT10aGlzLnZhcmlhbmNlXztpZihvbGRNZWFuPT09SW5maW5pdHl8fG9sZE1lYW49PT0tSW5maW5pdHkpe3RoaXMubWVhbl89dGhpcy5zdW1fL3RoaXMuY291bnRfO31lbHNle3RoaXMubWVhbl89b2xkTWVhbisoeC1vbGRNZWFuKS90aGlzLmNvdW50Xzt9CnRoaXMudmFyaWFuY2VfPW9sZFZhcmlhbmNlKyh4LW9sZE1lYW4pKih4LXRoaXMubWVhbl8pO319Cm1lcmdlKG90aGVyKXtjb25zdCByZXN1bHQ9bmV3IFJ1bm5pbmdTdGF0aXN0aWNzKCk7cmVzdWx0LmNvdW50Xz10aGlzLmNvdW50XytvdGhlci5jb3VudF87cmVzdWx0LnN1bV89dGhpcy5zdW1fK290aGVyLnN1bV87cmVzdWx0Lm1pbl89TWF0aC5taW4odGhpcy5taW5fLG90aGVyLm1pbl8pO3Jlc3VsdC5tYXhfPU1hdGgubWF4KHRoaXMubWF4XyxvdGhlci5tYXhfKTtpZihyZXN1bHQuY291bnQ9PT0wKXtyZXN1bHQubWVhbl89MDtyZXN1bHQudmFyaWFuY2VfPTA7cmVzdWx0Lm1lYW5sb2dzXz0wO31lbHNle3Jlc3VsdC5tZWFuXz1yZXN1bHQuc3VtL3Jlc3VsdC5jb3VudDtjb25zdCBkZWx0YU1lYW49KHRoaXMubWVhbnx8MCktKG90aGVyLm1lYW58fDApO3Jlc3VsdC52YXJpYW5jZV89dGhpcy52YXJpYW5jZV8rb3RoZXIudmFyaWFuY2VfKwoodGhpcy5jb3VudCpvdGhlci5jb3VudCpkZWx0YU1lYW4qZGVsdGFNZWFuL3Jlc3VsdC5jb3VudCk7aWYodGhpcy5tZWFubG9nc189PT11bmRlZmluZWR8fG90aGVyLm1lYW5sb2dzXz09PXVuZGVmaW5lZCl7cmVzdWx0Lm1lYW5sb2dzXz11bmRlZmluZWQ7fWVsc2V7cmVzdWx0Lm1lYW5sb2dzXz0odGhpcy5jb3VudCp0aGlzLm1lYW5sb2dzXysKb3RoZXIuY291bnQqb3RoZXIubWVhbmxvZ3NfKS9yZXN1bHQuY291bnQ7fX0KcmV0dXJuIHJlc3VsdDt9CnRydW5jYXRlKHVuaXQpe3RoaXMubWF4Xz11bml0LnRydW5jYXRlKHRoaXMubWF4Xyk7aWYodGhpcy5tZWFubG9nc18hPT11bmRlZmluZWQpe2NvbnN0IGZvcm1hdHRlZD11bml0LmZvcm1hdCh0aGlzLmdlb21ldHJpY01lYW4pO2xldCBsbz0xO2xldCBoaT0xNjt3aGlsZShsbzxoaS0xKXtjb25zdCBkaWdpdHM9cGFyc2VJbnQoKGxvK2hpKS8yKTtjb25zdCB0ZXN0PXRyLmIubWF0aC50cnVuY2F0ZSh0aGlzLm1lYW5sb2dzXyxkaWdpdHMpO2lmKGZvcm1hdHRlZD09PXVuaXQuZm9ybWF0KE1hdGguZXhwKHRlc3QpKSl7aGk9ZGlnaXRzO31lbHNle2xvPWRpZ2l0czt9fQpjb25zdCB0ZXN0PXRyLmIubWF0aC50cnVuY2F0ZSh0aGlzLm1lYW5sb2dzXyxsbyk7aWYoZm9ybWF0dGVkPT09dW5pdC5mb3JtYXQoTWF0aC5leHAodGVzdCkpKXt0aGlzLm1lYW5sb2dzXz10ZXN0O31lbHNle3RoaXMubWVhbmxvZ3NfPXRyLmIubWF0aC50cnVuY2F0ZSh0aGlzLm1lYW5sb2dzXyxoaSk7fX0KdGhpcy5tZWFuXz11bml0LnRydW5jYXRlKHRoaXMubWVhbl8pO3RoaXMubWluXz11bml0LnRydW5jYXRlKHRoaXMubWluXyk7dGhpcy5zdW1fPXVuaXQudHJ1bmNhdGUodGhpcy5zdW1fKTt0aGlzLnZhcmlhbmNlXz11bml0LnRydW5jYXRlKHRoaXMudmFyaWFuY2VfKTt9CmFzRGljdCgpe2lmKCF0aGlzLmNvdW50KXtyZXR1cm5bXTt9CnJldHVyblt0aGlzLmNvdW50Xyx0aGlzLm1heF8sdGhpcy5tZWFubG9nc18sdGhpcy5tZWFuXyx0aGlzLm1pbl8sdGhpcy5zdW1fLHRoaXMudmFyaWFuY2VfLF07fQpzdGF0aWMgZnJvbURpY3QoZGljdCl7Y29uc3QgcmVzdWx0PW5ldyBSdW5uaW5nU3RhdGlzdGljcygpO2lmKGRpY3QubGVuZ3RoIT09Nyl7cmV0dXJuIHJlc3VsdDt9CltyZXN1bHQuY291bnRfLHJlc3VsdC5tYXhfLHJlc3VsdC5tZWFubG9nc18scmVzdWx0Lm1lYW5fLHJlc3VsdC5taW5fLHJlc3VsdC5zdW1fLHJlc3VsdC52YXJpYW5jZV8sXT1kaWN0O3JldHVybiByZXN1bHQ7fX0KcmV0dXJue1J1bm5pbmdTdGF0aXN0aWNzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgRGlhZ25vc3RpY3tjb25zdHJ1Y3Rvcigpe3RoaXMuZ3VpZF89dW5kZWZpbmVkO30KY2xvbmUoKXtyZXR1cm4gbmV3IHRoaXMuY29uc3RydWN0b3IoKTt9CmNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gZmFsc2U7fQphZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7dGhyb3cgbmV3IEVycm9yKCdBYnN0cmFjdCB2aXJ0dWFsIG1ldGhvZDogc3ViY2xhc3NlcyBtdXN0IG92ZXJyaWRlICcrJ3RoaXMgbWV0aG9kIGlmIHRoZXkgb3ZlcnJpZGUgY2FuQWRkRGlhZ25vc3RpYycpO30KZ2V0IGd1aWQoKXtpZih0aGlzLmd1aWRfPT09dW5kZWZpbmVkKXt0aGlzLmd1aWRfPXRyLmIuR1VJRC5hbGxvY2F0ZVVVSUQ0KCk7fQpyZXR1cm4gdGhpcy5ndWlkXzt9CnNldCBndWlkKGd1aWQpe2lmKHRoaXMuZ3VpZF8hPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHJlc2V0IGd1aWQnKTt9CnRoaXMuZ3VpZF89Z3VpZDt9CmdldCBoYXNHdWlkKCl7cmV0dXJuIHRoaXMuZ3VpZF8hPT11bmRlZmluZWQ7fQphc0RpY3RPclJlZmVyZW5jZSgpe2lmKHRoaXMuZ3VpZF8hPT11bmRlZmluZWQpe3JldHVybiB0aGlzLmd1aWRfO30KcmV0dXJuIHRoaXMuYXNEaWN0KCk7fQphc0RpY3QoKXtjb25zdCByZXN1bHQ9e3R5cGU6dGhpcy5jb25zdHJ1Y3Rvci5uYW1lfTtpZih0aGlzLmd1aWRfIT09dW5kZWZpbmVkKXtyZXN1bHQuZ3VpZD10aGlzLmd1aWRfO30KdGhpcy5hc0RpY3RJbnRvXyhyZXN1bHQpO3JldHVybiByZXN1bHQ7fQphc0RpY3RJbnRvXyhkKXt0aHJvdyBuZXcgRXJyb3IoJ0Fic3RyYWN0IHZpcnR1YWwgbWV0aG9kOiBzdWJjbGFzc2VzIG11c3Qgb3ZlcnJpZGUgJysndGhpcyBtZXRob2QgaWYgdGhleSBvdmVycmlkZSBjYW5BZGREaWFnbm9zdGljJyk7fQpzdGF0aWMgZnJvbURpY3QoZCl7Y29uc3QgdHlwZUluZm89RGlhZ25vc3RpYy5maW5kVHlwZUluZm9XaXRoTmFtZShkLnR5cGUpO2lmKCF0eXBlSW5mbyl7dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgZGlhZ25vc3RpYyB0eXBlOiAnK2QudHlwZSk7fQpjb25zdCBkaWFnbm9zdGljPXR5cGVJbmZvLmNvbnN0cnVjdG9yLmZyb21EaWN0KGQpO2lmKGQuZ3VpZCE9PXVuZGVmaW5lZClkaWFnbm9zdGljLmd1aWQ9ZC5ndWlkO3JldHVybiBkaWFnbm9zdGljO30Kc3RhdGljIGRlc2VyaWFsaXplKHR5cGUsZCxkZXNlcmlhbGl6ZXIpe2NvbnN0IHR5cGVJbmZvPURpYWdub3N0aWMuZmluZFR5cGVJbmZvV2l0aE5hbWUodHlwZSk7aWYoIXR5cGVJbmZvKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBkaWFnbm9zdGljIHR5cGU6ICcrdHlwZSk7fQpyZXR1cm4gdHlwZUluZm8uY29uc3RydWN0b3IuZGVzZXJpYWxpemUoZCxkZXNlcmlhbGl6ZXIpO319CmNvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e307b3B0aW9ucy5tYW5kYXRvcnlCYXNlQ2xhc3M9RGlhZ25vc3RpYzt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoRGlhZ25vc3RpYyxvcHRpb25zKTtEaWFnbm9zdGljLmFkZEV2ZW50TGlzdGVuZXIoJ3dpbGwtcmVnaXN0ZXInLGZ1bmN0aW9uKGUpe2NvbnN0IGNvbnN0cnVjdG9yPWUudHlwZUluZm8uY29uc3RydWN0b3I7aWYoIShjb25zdHJ1Y3Rvci5kZXNlcmlhbGl6ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKXx8KGNvbnN0cnVjdG9yLmRlc2VyaWFsaXplPT09RGlhZ25vc3RpYy5kZXNlcmlhbGl6ZSl8fChjb25zdHJ1Y3Rvci5kZXNlcmlhbGl6ZS5sZW5ndGghPT0yKSl7dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgZGVmaW5lICR7Y29uc3RydWN0b3IubmFtZX0uZGVzZXJpYWxpemUoZGF0YSwgZGVzZXJpYWxpemVyKWApO30KaWYoIShjb25zdHJ1Y3Rvci5mcm9tRGljdCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXx8KGNvbnN0cnVjdG9yLmZyb21EaWN0PT09RGlhZ25vc3RpYy5mcm9tRGljdCl8fChjb25zdHJ1Y3Rvci5mcm9tRGljdC5sZW5ndGghPT0xKSl7dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgZGVmaW5lICR7Y29uc3RydWN0b3IubmFtZX0uZnJvbURpY3QoZClgKTt9CmlmKCEoY29uc3RydWN0b3IucHJvdG90eXBlLnNlcmlhbGl6ZSBpbnN0YW5jZW9mIEZ1bmN0aW9uKXx8KGNvbnN0cnVjdG9yLnByb3RvdHlwZS5zZXJpYWxpemU9PT1EaWFnbm9zdGljLnByb3RvdHlwZS5zZXJpYWxpemUpfHwoY29uc3RydWN0b3IucHJvdG90eXBlLnNlcmlhbGl6ZS5sZW5ndGghPT0xKSl7dGhyb3cgbmV3IEVycm9yKGBQbGVhc2UgZGVmaW5lICR7Y29uc3RydWN0b3IubmFtZX0uc2VyaWFsaXplKHNlcmlhbGl6ZXIpYCk7fX0pO3JldHVybntEaWFnbm9zdGljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgQnJlYWtkb3duIGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMudmFsdWVzXz1uZXcgTWFwKCk7dGhpcy5jb2xvclNjaGVtZT0nJzt9CnRydW5jYXRlKHVuaXQpe2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIHRoaXMpe3RoaXMudmFsdWVzXy5zZXQobmFtZSx1bml0LnRydW5jYXRlKHZhbHVlKSk7fX0KY2xvbmUoKXtjb25zdCBjbG9uZT1uZXcgQnJlYWtkb3duKCk7Y2xvbmUuY29sb3JTY2hlbWU9dGhpcy5jb2xvclNjaGVtZTtjbG9uZS5hZGREaWFnbm9zdGljKHRoaXMpO3JldHVybiBjbG9uZTt9CmVxdWFscyhvdGhlcil7aWYodGhpcy5jb2xvclNjaGVtZSE9PW90aGVyLmNvbG9yU2NoZW1lKXJldHVybiBmYWxzZTtpZih0aGlzLnZhbHVlc18uc2l6ZSE9PW90aGVyLnZhbHVlc18uc2l6ZSlyZXR1cm4gZmFsc2U7Zm9yKGNvbnN0W2ssdl1vZiB0aGlzKXtpZih2IT09b3RoZXIuZ2V0KGspKXJldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO30KY2FuQWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpe3JldHVybigob3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgQnJlYWtkb3duKSYmKG90aGVyRGlhZ25vc3RpYy5jb2xvclNjaGVtZT09PXRoaXMuY29sb3JTY2hlbWUpKTt9CmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBvdGhlckRpYWdub3N0aWMpe3RoaXMuc2V0KG5hbWUsdGhpcy5nZXQobmFtZSkrdmFsdWUpO30KcmV0dXJuIHRoaXM7fQpzZXQobmFtZSx2YWx1ZSl7aWYodHlwZW9mIG5hbWUhPT0nc3RyaW5nJ3x8dHlwZW9mIHZhbHVlIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcignQnJlYWtkb3duIG1hcHMgZnJvbSBzdHJpbmdzIHRvIG51bWJlcnMnKTt9CnRoaXMudmFsdWVzXy5zZXQobmFtZSx2YWx1ZSk7fQpnZXQobmFtZSl7cmV0dXJuIHRoaXMudmFsdWVzXy5nZXQobmFtZSl8fDA7fSpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCBwYWlyIG9mIHRoaXMudmFsdWVzXyl7eWllbGQgcGFpcjt9fQpnZXQgc2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlc18uc2l6ZTt9CnNlcmlhbGl6ZShzZXJpYWxpemVyKXtjb25zdCBrZXlzPVsuLi50aGlzLnZhbHVlc18ua2V5cygpXTtrZXlzLnNvcnQoKTtyZXR1cm5bc2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQodGhpcy5jb2xvclNjaGVtZSksc2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQoa2V5cy5tYXAoaz0+c2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQoaykpKSwuLi5rZXlzLm1hcChrPT50aGlzLmdldChrKSksXTt9CmFzRGljdEludG9fKGQpe2QudmFsdWVzPXt9O2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIHRoaXMpe2QudmFsdWVzW25hbWVdPXRyLmIubnVtYmVyVG9Kc29uKHZhbHVlKTt9CmlmKHRoaXMuY29sb3JTY2hlbWUpe2QuY29sb3JTY2hlbWU9dGhpcy5jb2xvclNjaGVtZTt9fQpzdGF0aWMgZnJvbUVudHJpZXMoZW50cmllcyl7Y29uc3QgYnJlYWtkb3duPW5ldyBCcmVha2Rvd24oKTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBlbnRyaWVzKXticmVha2Rvd24uc2V0KG5hbWUsdmFsdWUpO30KcmV0dXJuIGJyZWFrZG93bjt9CnN0YXRpYyBkZXNlcmlhbGl6ZShkYXRhLGRlc2VyaWFsaXplcil7Y29uc3QgYnJlYWtkb3duPW5ldyBCcmVha2Rvd24oKTticmVha2Rvd24uY29sb3JTY2hlbWU9ZGVzZXJpYWxpemVyLmdldE9iamVjdChkYXRhWzBdKTtjb25zdCBrZXlzPWRlc2VyaWFsaXplci5nZXRPYmplY3QoZGF0YVsxXSk7Zm9yKGxldCBpPTA7aTxrZXlzLmxlbmd0aDsrK2kpe2JyZWFrZG93bi5zZXQoZGVzZXJpYWxpemVyLmdldE9iamVjdChrZXlzW2ldKSx0ci5iLm51bWJlckZyb21Kc29uKGRhdGFbaSsyXSkpO30KcmV0dXJuIGJyZWFrZG93bjt9CnN0YXRpYyBmcm9tRGljdChkKXtjb25zdCBicmVha2Rvd249bmV3IEJyZWFrZG93bigpO2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGQudmFsdWVzKSl7YnJlYWtkb3duLnNldChuYW1lLHRyLmIubnVtYmVyRnJvbUpzb24odmFsdWUpKTt9CmlmKGQuY29sb3JTY2hlbWUpe2JyZWFrZG93bi5jb2xvclNjaGVtZT1kLmNvbG9yU2NoZW1lO30KcmV0dXJuIGJyZWFrZG93bjt9fQp0ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihCcmVha2Rvd24se2VsZW1lbnROYW1lOid0ci12LXVpLWJyZWFrZG93bi1zcGFuJ30pO3JldHVybntCcmVha2Rvd24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBDb2xsZWN0ZWRSZWxhdGVkRXZlbnRTZXQgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5ldmVudFNldHNCeUNhbm9uaWNhbFVybF89bmV3IE1hcCgpO30KYXNEaWN0SW50b18oZCl7ZC5ldmVudHM9e307Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudFNldF1vZiB0aGlzKXtkLmV2ZW50c1tjYW5vbmljYWxVcmxdPVtdO2Zvcihjb25zdCBldmVudCBvZiBldmVudFNldCl7ZC5ldmVudHNbY2Fub25pY2FsVXJsXS5wdXNoKHtzdGFibGVJZDpldmVudC5zdGFibGVJZCx0aXRsZTpldmVudC50aXRsZSxzdGFydDpldmVudC5zdGFydCxkdXJhdGlvbjpldmVudC5kdXJhdGlvbn0pO319fQpzdGF0aWMgZGVzZXJpYWxpemUoZXZlbnRzLGRlc2VyaWFsaXplcil7cmV0dXJuIENvbGxlY3RlZFJlbGF0ZWRFdmVudFNldC5mcm9tRGljdCh7ZXZlbnRzfSk7fQpzZXJpYWxpemUoc2VyaWFsaXplcil7Y29uc3QgZD17fTt0aGlzLmFzRGljdEludG8oZCk7cmV0dXJuIGQuZXZlbnRzO30Kc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IHJlc3VsdD1uZXcgQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0KCk7Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudHNdb2YgT2JqZWN0LmVudHJpZXMoZC5ldmVudHMpKXtyZXN1bHQuZXZlbnRTZXRzQnlDYW5vbmljYWxVcmxfLnNldChjYW5vbmljYWxVcmwsZXZlbnRzLm1hcChlPT5uZXcgdHIudi5kLkV2ZW50UmVmKGUpKSk7fQpyZXR1cm4gcmVzdWx0O30KZ2V0IHNpemUoKXtyZXR1cm4gdGhpcy5ldmVudFNldHNCeUNhbm9uaWNhbFVybF8uc2l6ZTt9CmdldChjYW5vbmljYWxVcmwpe3JldHVybiB0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXy5nZXQoY2Fub25pY2FsVXJsKTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0W2Nhbm9uaWNhbFVybCxldmVudFNldF1vZiB0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXyl7eWllbGRbY2Fub25pY2FsVXJsLGV2ZW50U2V0XTt9fQpjYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7cmV0dXJuIG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5SZWxhdGVkRXZlbnRTZXR8fG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5Db2xsZWN0ZWRSZWxhdGVkRXZlbnRTZXQ7fQphZGRFdmVudFNldEZvckNhbm9uaWNhbFVybChjYW5vbmljYWxVcmwsZXZlbnRzKXtsZXQgbXlFdmVudFNldD10aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXy5nZXQoY2Fub25pY2FsVXJsKTtpZihteUV2ZW50U2V0PT09dW5kZWZpbmVkKXtteUV2ZW50U2V0PW5ldyBTZXQoKTt0aGlzLmV2ZW50U2V0c0J5Q2Fub25pY2FsVXJsXy5zZXQoY2Fub25pY2FsVXJsLG15RXZlbnRTZXQpO30KZm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7bXlFdmVudFNldC5hZGQoZXZlbnQpO319CmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtpZihvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0KXtmb3IoY29uc3RbY2Fub25pY2FsVXJsLG90aGVyRXZlbnRTZXRdb2Ygb3RoZXJEaWFnbm9zdGljKXt0aGlzLmFkZEV2ZW50U2V0Rm9yQ2Fub25pY2FsVXJsKGNhbm9uaWNhbFVybCxvdGhlckV2ZW50U2V0KTt9CnJldHVybjt9CmlmKCFvdGhlckRpYWdub3N0aWMuY2Fub25pY2FsVXJsKXJldHVybjt0aGlzLmFkZEV2ZW50U2V0Rm9yQ2Fub25pY2FsVXJsKG90aGVyRGlhZ25vc3RpYy5jYW5vbmljYWxVcmwsb3RoZXJEaWFnbm9zdGljKTt9fQp0ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihDb2xsZWN0ZWRSZWxhdGVkRXZlbnRTZXQse2VsZW1lbnROYW1lOid0ci12LXVpLWNvbGxlY3RlZC1yZWxhdGVkLWV2ZW50LXNldC1zcGFuJ30pO3JldHVybntDb2xsZWN0ZWRSZWxhdGVkRXZlbnRTZXQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBEYXRlUmFuZ2UgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3Rvcihtcyl7c3VwZXIoKTt0aGlzLnJhbmdlXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7dGhpcy5yYW5nZV8uYWRkVmFsdWUobXMpO30KZ2V0IG1pblRpbWVzdGFtcCgpe3JldHVybiB0aGlzLnJhbmdlXy5taW47fQpnZXQgbWF4VGltZXN0YW1wKCl7cmV0dXJuIHRoaXMucmFuZ2VfLm1heDt9CmdldCBtaW5EYXRlKCl7cmV0dXJuIG5ldyBEYXRlKHRoaXMucmFuZ2VfLm1pbik7fQpnZXQgbWF4RGF0ZSgpe3JldHVybiBuZXcgRGF0ZSh0aGlzLnJhbmdlXy5tYXgpO30KZ2V0IGR1cmF0aW9uTXMoKXtyZXR1cm4gdGhpcy5yYW5nZV8uZHVyYXRpb247fQpjbG9uZSgpe2NvbnN0IGNsb25lPW5ldyB0ci52LmQuRGF0ZVJhbmdlKHRoaXMucmFuZ2VfLm1pbik7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQplcXVhbHMob3RoZXIpe2lmKCEob3RoZXIgaW5zdGFuY2VvZiBEYXRlUmFuZ2UpKXJldHVybiBmYWxzZTtyZXR1cm4gdGhpcy5yYW5nZV8uZXF1YWxzKG90aGVyLnJhbmdlXyk7fQpjYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7cmV0dXJuIG90aGVyRGlhZ25vc3RpYyBpbnN0YW5jZW9mIERhdGVSYW5nZTt9CmFkZERpYWdub3N0aWMob3RoZXIpe3RoaXMucmFuZ2VfLmFkZFJhbmdlKG90aGVyLnJhbmdlXyk7fQp0b1N0cmluZygpe2NvbnN0IG1pbkRhdGU9dHIuYi5mb3JtYXREYXRlKHRoaXMubWluRGF0ZSk7aWYodGhpcy5kdXJhdGlvbk1zPT09MClyZXR1cm4gbWluRGF0ZTtjb25zdCBtYXhEYXRlPXRyLmIuZm9ybWF0RGF0ZSh0aGlzLm1heERhdGUpO3JldHVybmAke21pbkRhdGV9IC0gJHttYXhEYXRlfWA7fQpzZXJpYWxpemUoc2VyaWFsaXplcil7aWYodGhpcy5kdXJhdGlvbk1zPT09MClyZXR1cm4gdGhpcy5yYW5nZV8ubWluO3JldHVyblt0aGlzLnJhbmdlXy5taW4sdGhpcy5yYW5nZV8ubWF4XTt9CmFzRGljdEludG9fKGQpe2QubWluPXRoaXMucmFuZ2VfLm1pbjtpZih0aGlzLmR1cmF0aW9uTXM9PT0wKXJldHVybjtkLm1heD10aGlzLnJhbmdlXy5tYXg7fQpzdGF0aWMgZGVzZXJpYWxpemUoZGF0YSxkZXNlcmlhbGl6ZXIpe2lmKGRhdGEgaW5zdGFuY2VvZiBBcnJheSl7Y29uc3QgZHI9bmV3IERhdGVSYW5nZShkYXRhWzBdKTtkci5yYW5nZV8uYWRkVmFsdWUoZGF0YVsxXSk7cmV0dXJuIGRyO30KcmV0dXJuIG5ldyBEYXRlUmFuZ2UoZGF0YSk7fQpzdGF0aWMgZnJvbURpY3QoZCl7Y29uc3QgZGF0ZVJhbmdlPW5ldyBEYXRlUmFuZ2UoZC5taW4pO2lmKGQubWF4IT09dW5kZWZpbmVkKWRhdGVSYW5nZS5yYW5nZV8uYWRkVmFsdWUoZC5tYXgpO3JldHVybiBkYXRlUmFuZ2U7fX0KdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoRGF0ZVJhbmdlLHtlbGVtZW50TmFtZTondHItdi11aS1kYXRlLXJhbmdlLXNwYW4nfSk7cmV0dXJue0RhdGVSYW5nZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2NsYXNzIERpYWdub3N0aWNSZWZ7Y29uc3RydWN0b3IoZ3VpZCl7dGhpcy5ndWlkPWd1aWQ7fQphc0RpY3QoKXtyZXR1cm4gdGhpcy5ndWlkO30KYXNEaWN0T3JSZWZlcmVuY2UoKXtyZXR1cm4gdGhpcy5hc0RpY3QoKTt9fQpyZXR1cm57RGlhZ25vc3RpY1JlZix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi5kJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHN0YWJsZVN0cmluZ2lmeShvYmope2xldCByZXBsYWNlcjtpZighKG9iaiBpbnN0YW5jZW9mIEFycmF5KSYmb2JqIT09bnVsbCl7cmVwbGFjZXI9T2JqZWN0LmtleXMob2JqKS5zb3J0KCk7fQpyZXR1cm4gSlNPTi5zdHJpbmdpZnkob2JqLHJlcGxhY2VyKTt9CmNsYXNzIEdlbmVyaWNTZXQgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3Rvcih2YWx1ZXMpe3N1cGVyKCk7aWYodHlwZW9mIHZhbHVlc1tTeW1ib2wuaXRlcmF0b3JdIT09J2Z1bmN0aW9uJyl7dGhyb3cgbmV3IEVycm9yKCdHZW5lcmljU2V0IG11c3QgYmUgY29uc3RydWN0ZWQgZnJvbSBhbiBpbnRlcmFibGUuJyk7fQp0aGlzLnZhbHVlc189bmV3IFNldCh2YWx1ZXMpO3RoaXMuaGFzX29iamVjdHNfPWZhbHNlO2Zvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe2lmKHR5cGVvZiB2YWx1ZT09PSdvYmplY3QnKXt0aGlzLmhhc19vYmplY3RzXz10cnVlO319fQpnZXQgc2l6ZSgpe3JldHVybiB0aGlzLnZhbHVlc18uc2l6ZTt9CmdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy52YWx1ZXNfLnNpemU7fSpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCB2YWx1ZSBvZiB0aGlzLnZhbHVlc18pe3lpZWxkIHZhbHVlO319Cmhhcyh2YWx1ZSl7aWYodHlwZW9mIHZhbHVlIT09J29iamVjdCcpcmV0dXJuIHRoaXMudmFsdWVzXy5oYXModmFsdWUpO2NvbnN0IGpzb249SlNPTi5zdHJpbmdpZnkodmFsdWUpO2Zvcihjb25zdCB4IG9mIHRoaXMpe2lmKHR5cGVvZiB4IT09J29iamVjdCcpY29udGludWU7aWYoanNvbj09PUpTT04uc3RyaW5naWZ5KHgpKXJldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30KZXF1YWxzKG90aGVyKXtpZighKG90aGVyIGluc3RhbmNlb2YgR2VuZXJpY1NldCkpcmV0dXJuIGZhbHNlO2lmKHRoaXMuc2l6ZSE9PW90aGVyLnNpemUpcmV0dXJuIGZhbHNlO2Zvcihjb25zdCB2YWx1ZSBvZiB0aGlzKXtpZighb3RoZXIuaGFzKHZhbHVlKSlyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9CmdldCBoYXNoS2V5KCl7aWYodGhpcy5oYXNfb2JqZWN0c18pcmV0dXJuIHVuZGVmaW5lZDtpZih0aGlzLmhhc2hfa2V5XyE9PXVuZGVmaW5lZCl7cmV0dXJuIHRoaXMuaGFzaF9rZXlfO30KbGV0IGtleT0nJztmb3IoY29uc3QgdmFsdWUgb2YgQXJyYXkuZnJvbSh0aGlzLnZhbHVlc18udmFsdWVzKCkpLnNvcnQoKSl7a2V5Kz12YWx1ZTt9CnRoaXMuaGFzaF9rZXlfPWtleTtyZXR1cm4ga2V5O30Kc2VyaWFsaXplKHNlcmlhbGl6ZXIpe2NvbnN0IGk9Wy4uLnRoaXNdLm1hcCh4PT5zZXJpYWxpemVyLmdldE9yQWxsb2NhdGVJZCh4KSk7cmV0dXJuKGkubGVuZ3RoPT09MSk/aVswXTppO30KYXNEaWN0SW50b18oZCl7ZC52YWx1ZXM9QXJyYXkuZnJvbSh0aGlzKTt9CnN0YXRpYyBkZXNlcmlhbGl6ZShkYXRhLGRlc2VyaWFsaXplcil7aWYoIShkYXRhIGluc3RhbmNlb2YgQXJyYXkpKXtkYXRhPVtkYXRhXTt9CnJldHVybiBuZXcgR2VuZXJpY1NldChkYXRhLm1hcChkYXR1bT0+ZGVzZXJpYWxpemVyLmdldE9iamVjdChkYXR1bSkpKTt9CnN0YXRpYyBmcm9tRGljdChkKXtyZXR1cm4gbmV3IEdlbmVyaWNTZXQoZC52YWx1ZXMpO30KY2xvbmUoKXtyZXR1cm4gbmV3IEdlbmVyaWNTZXQodGhpcy52YWx1ZXNfKTt9CmNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gb3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgR2VuZXJpY1NldDt9CmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtjb25zdCBqc29ucz1uZXcgU2V0KCk7Zm9yKGNvbnN0IHZhbHVlIG9mIHRoaXMpe2lmKHR5cGVvZiB2YWx1ZSE9PSdvYmplY3QnKWNvbnRpbnVlO2pzb25zLmFkZChzdGFibGVTdHJpbmdpZnkodmFsdWUpKTt9CmZvcihjb25zdCB2YWx1ZSBvZiBvdGhlckRpYWdub3N0aWMpe2lmKHR5cGVvZiB2YWx1ZT09PSdvYmplY3QnKXtpZihqc29ucy5oYXMoc3RhYmxlU3RyaW5naWZ5KHZhbHVlKSkpe2NvbnRpbnVlO30KdGhpcy5oYXNfb2JqZWN0c189dHJ1ZTt9CnRoaXMudmFsdWVzXy5hZGQodmFsdWUpO319fQp0ci52LmQuRGlhZ25vc3RpYy5yZWdpc3RlcihHZW5lcmljU2V0LHtlbGVtZW50TmFtZTondHItdi11aS1nZW5lcmljLXNldC1zcGFuJ30pO3JldHVybntHZW5lcmljU2V0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgRXZlbnRSZWZ7Y29uc3RydWN0b3IoZXZlbnQpe3RoaXMuc3RhYmxlSWQ9ZXZlbnQuc3RhYmxlSWQ7dGhpcy50aXRsZT1ldmVudC50aXRsZTt0aGlzLnN0YXJ0PWV2ZW50LnN0YXJ0O3RoaXMuZHVyYXRpb249ZXZlbnQuZHVyYXRpb247dGhpcy5lbmQ9dGhpcy5zdGFydCt0aGlzLmR1cmF0aW9uO3RoaXMuZ3VpZD10ci5iLkdVSUQuYWxsb2NhdGVTaW1wbGUoKTt9fQpyZXR1cm57RXZlbnRSZWYsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBSZWxhdGVkRXZlbnRTZXQgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3RvcihvcHRfZXZlbnRzKXtzdXBlcigpO3RoaXMuZXZlbnRzQnlTdGFibGVJZF89bmV3IE1hcCgpO3RoaXMuY2Fub25pY2FsVXJsXz11bmRlZmluZWQ7aWYob3B0X2V2ZW50cyl7aWYob3B0X2V2ZW50cyBpbnN0YW5jZW9mIHRyLm1vZGVsLkV2ZW50U2V0fHxvcHRfZXZlbnRzIGluc3RhbmNlb2YgQXJyYXkpe2Zvcihjb25zdCBldmVudCBvZiBvcHRfZXZlbnRzKXt0aGlzLmFkZChldmVudCk7fX1lbHNle3RoaXMuYWRkKG9wdF9ldmVudHMpO319fQpjbG9uZSgpe2NvbnN0IGNsb25lPW5ldyB0ci52LmQuQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0KCk7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQplcXVhbHMob3RoZXIpe2lmKHRoaXMubGVuZ3RoIT09b3RoZXIubGVuZ3RoKXJldHVybiBmYWxzZTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7aWYoIW90aGVyLmhhcyhldmVudCkpcmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fQphZGQoZXZlbnQpe3RoaXMuZXZlbnRzQnlTdGFibGVJZF8uc2V0KGV2ZW50LnN0YWJsZUlkLGV2ZW50KTt9CmhhcyhldmVudCl7cmV0dXJuIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8uaGFzKGV2ZW50LnN0YWJsZUlkKTt9CmdldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5ldmVudHNCeVN0YWJsZUlkXy5zaXplO30qW1N5bWJvbC5pdGVyYXRvcl0oKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5ldmVudHNCeVN0YWJsZUlkXy52YWx1ZXMoKSl7eWllbGQgZXZlbnQ7fX0KZ2V0IGNhbm9uaWNhbFVybCgpe3JldHVybiB0aGlzLmNhbm9uaWNhbFVybF87fQpyZXNvbHZlKG1vZGVsLG9wdF9yZXF1aXJlZCl7Zm9yKGNvbnN0W3N0YWJsZUlkLHZhbHVlXW9mIHRoaXMuZXZlbnRzQnlTdGFibGVJZF8pe2lmKCEodmFsdWUgaW5zdGFuY2VvZiB0ci52LmQuRXZlbnRSZWYpKWNvbnRpbnVlO2NvbnN0IGV2ZW50PW1vZGVsLmdldEV2ZW50QnlTdGFibGVJZChzdGFibGVJZCk7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudCl7dGhpcy5ldmVudHNCeVN0YWJsZUlkXy5zZXQoc3RhYmxlSWQsZXZlbnQpO31lbHNlIGlmKG9wdF9yZXF1aXJlZCl7dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gZmluZCBFdmVudCAnK3N0YWJsZUlkKTt9fX0Kc2VyaWFsaXplKHNlcmlhbGl6ZXIpe3JldHVyblsuLi50aGlzXS5tYXAoZXZlbnQ9PltldmVudC5zdGFibGVJZCxzZXJpYWxpemVyLmdldE9yQWxsb2NhdGVJZChldmVudC50aXRsZSksZXZlbnQuc3RhcnQsZXZlbnQuZHVyYXRpb24sXSk7fQphc0RpY3RJbnRvXyhkKXtkLmV2ZW50cz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcyl7ZC5ldmVudHMucHVzaCh7c3RhYmxlSWQ6ZXZlbnQuc3RhYmxlSWQsdGl0bGU6ZXZlbnQudGl0bGUsc3RhcnQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLnRydW5jYXRlKGV2ZW50LnN0YXJ0KSxkdXJhdGlvbjp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXMudHJ1bmNhdGUoZXZlbnQuZHVyYXRpb24pLH0pO319CnN0YXRpYyBkZXNlcmlhbGl6ZShkYXRhLGRlc2VyaWFsaXplcil7cmV0dXJuIG5ldyBSZWxhdGVkRXZlbnRTZXQoZGF0YS5tYXAoZXZlbnQ9Pm5ldyB0ci52LmQuRXZlbnRSZWYoe3N0YWJsZUlkOmV2ZW50WzBdLHRpdGxlOmRlc2VyaWFsaXplci5nZXRPYmplY3QoZXZlbnRbMV0pLHN0YXJ0OmV2ZW50WzJdLGR1cmF0aW9uOmV2ZW50WzNdLH0pKSk7fQpzdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIG5ldyBSZWxhdGVkRXZlbnRTZXQoZC5ldmVudHMubWFwKGV2ZW50PT5uZXcgdHIudi5kLkV2ZW50UmVmKGV2ZW50KSkpO319CnRyLnYuZC5EaWFnbm9zdGljLnJlZ2lzdGVyKFJlbGF0ZWRFdmVudFNldCx7ZWxlbWVudE5hbWU6J3RyLXYtdWktcmVsYXRlZC1ldmVudC1zZXQtc3Bhbid9KTtyZXR1cm57UmVsYXRlZEV2ZW50U2V0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgUmVsYXRlZE5hbWVNYXAgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3RvcihvcHRfaW5mbyl7c3VwZXIoKTt0aGlzLm1hcF89bmV3IE1hcCgpO2lmKG9wdF9pbmZvKXtmb3IoY29uc3Rba2V5LG5hbWVdb2YgT2JqZWN0LmVudHJpZXMob3B0X2luZm8pKXt0aGlzLnNldChrZXksbmFtZSk7fX19CmNsb25lKCl7Y29uc3QgY2xvbmU9bmV3IFJlbGF0ZWROYW1lTWFwKCk7Y2xvbmUuYWRkRGlhZ25vc3RpYyh0aGlzKTtyZXR1cm4gY2xvbmU7fQplcXVhbHMob3RoZXIpe2lmKCEob3RoZXIgaW5zdGFuY2VvZiBSZWxhdGVkTmFtZU1hcCkpcmV0dXJuIGZhbHNlO2NvbnN0IGtleXMxPW5ldyBTZXQodGhpcy5tYXBfLmtleXMoKSk7Y29uc3Qga2V5czI9bmV3IFNldChvdGhlci5tYXBfLmtleXMoKSk7aWYoIXRyLmIuc2V0c0VxdWFsKGtleXMxLGtleXMyKSlyZXR1cm4gZmFsc2U7Zm9yKGNvbnN0W2tleSxuYW1lXW9mIHRoaXMpe2lmKG5hbWUhPT1vdGhlci5nZXQoa2V5KSlyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9CmNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gb3RoZXJEaWFnbm9zdGljIGluc3RhbmNlb2YgUmVsYXRlZE5hbWVNYXA7fQphZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYyl7Zm9yKGNvbnN0W2tleSxuYW1lXW9mIG90aGVyRGlhZ25vc3RpYyl7Y29uc3QgZXhpc3Rpbmc9dGhpcy5nZXQoa2V5KTtpZihleGlzdGluZz09PXVuZGVmaW5lZCl7dGhpcy5zZXQoa2V5LG5hbWUpO31lbHNlIGlmKGV4aXN0aW5nIT09bmFtZSl7dGhyb3cgbmV3IEVycm9yKCdIaXN0b2dyYW0gbmFtZXMgZGlmZmVyOiAnK2AiJHtleGlzdGluZ30iICE9ICIke25hbWV9ImApO319fQpzZXJpYWxpemUoc2VyaWFsaXplcil7Y29uc3Qga2V5cz1bLi4udGhpcy5tYXBfLmtleXMoKV07a2V5cy5zb3J0KCk7Y29uc3QgbmFtZXM9a2V5cy5tYXAoaz0+c2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQodGhpcy5nZXQoaykpKTtjb25zdCBrZXlzSWQ9c2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQoa2V5cy5tYXAoaz0+c2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQoaykpKTtyZXR1cm5ba2V5c0lkLC4uLm5hbWVzXTt9CmFzRGljdEludG9fKGQpe2QubmFtZXM9e307Zm9yKGNvbnN0W2tleSxuYW1lXW9mIHRoaXMpZC5uYW1lc1trZXldPW5hbWU7fQpzZXQoa2V5LG5hbWUpe3RoaXMubWFwXy5zZXQoa2V5LG5hbWUpO30KZ2V0KGtleSl7cmV0dXJuIHRoaXMubWFwXy5nZXQoa2V5KTt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IHBhaXIgb2YgdGhpcy5tYXBfKXlpZWxkIHBhaXI7fSp2YWx1ZXMoKXtmb3IoY29uc3QgdmFsdWUgb2YgdGhpcy5tYXBfLnZhbHVlcygpKXlpZWxkIHZhbHVlO30Kc3RhdGljIGZyb21FbnRyaWVzKGVudHJpZXMpe2NvbnN0IG5hbWVzPW5ldyBSZWxhdGVkTmFtZU1hcCgpO2Zvcihjb25zdFtrZXksbmFtZV1vZiBlbnRyaWVzKXtuYW1lcy5zZXQoa2V5LG5hbWUpO30KcmV0dXJuIG5hbWVzO30Kc3RhdGljIGRlc2VyaWFsaXplKGRhdGEsZGVzZXJpYWxpemVyKXtjb25zdCBuYW1lcz1uZXcgUmVsYXRlZE5hbWVNYXAoKTtjb25zdCBrZXlzPWRlc2VyaWFsaXplci5nZXRPYmplY3QoZGF0YVswXSk7Zm9yKGxldCBpPTA7aTxrZXlzLmxlbmd0aDsrK2kpe25hbWVzLnNldChkZXNlcmlhbGl6ZXIuZ2V0T2JqZWN0KGtleXNbaV0pLGRlc2VyaWFsaXplci5nZXRPYmplY3QoZGF0YVtpKzFdKSk7fQpyZXR1cm4gbmFtZXM7fQpzdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIFJlbGF0ZWROYW1lTWFwLmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGQubmFtZXN8fHt9KSk7fX0KdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoUmVsYXRlZE5hbWVNYXAse2VsZW1lbnROYW1lOid0ci12LXVpLXJlbGF0ZWQtbmFtZS1tYXAtc3BhbicsfSk7cmV0dXJue1JlbGF0ZWROYW1lTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LmQnLGZ1bmN0aW9uKCl7Y2xhc3MgU2NhbGFyIGV4dGVuZHMgdHIudi5kLkRpYWdub3N0aWN7Y29uc3RydWN0b3IodmFsdWUpe3N1cGVyKCk7aWYoISh2YWx1ZSBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKSl7dGhyb3cgbmV3IEVycm9yKCdleHBlY3RlZCBTY2FsYXInKTt9CnRoaXMudmFsdWU9dmFsdWU7fQpjbG9uZSgpe3JldHVybiBuZXcgU2NhbGFyKHRoaXMudmFsdWUpO30Kc2VyaWFsaXplKHNlcmlhbGl6ZXIpe3JldHVybiB0aGlzLnZhbHVlLmFzRGljdCgpO30KYXNEaWN0SW50b18oZCl7ZC52YWx1ZT10aGlzLnZhbHVlLmFzRGljdCgpO30Kc3RhdGljIGRlc2VyaWFsaXplKHZhbHVlLGRlc2VyaWFsaXplcil7cmV0dXJuIFNjYWxhci5mcm9tRGljdCh7dmFsdWV9KTt9CnN0YXRpYyBmcm9tRGljdChkKXtyZXR1cm4gbmV3IFNjYWxhcih0ci5iLlNjYWxhci5mcm9tRGljdChkLnZhbHVlKSk7fX0KdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoU2NhbGFyLHtlbGVtZW50TmFtZTondHItdi11aS1zY2FsYXItZGlhZ25vc3RpYy1zcGFuJ30pO3JldHVybntTY2FsYXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBVbm1lcmdlYWJsZURpYWdub3N0aWNTZXQgZXh0ZW5kcyB0ci52LmQuRGlhZ25vc3RpY3tjb25zdHJ1Y3RvcihkaWFnbm9zdGljcyl7c3VwZXIoKTt0aGlzLl9kaWFnbm9zdGljcz1kaWFnbm9zdGljczt9CmNsb25lKCl7Y29uc3QgY2xvbmU9bmV3IHRyLnYuZC5Vbm1lcmdlYWJsZURpYWdub3N0aWNTZXQoKTtjbG9uZS5hZGREaWFnbm9zdGljKHRoaXMpO3JldHVybiBjbG9uZTt9CmNhbkFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtyZXR1cm4gdHJ1ZTt9CmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKXtpZihvdGhlckRpYWdub3N0aWMgaW5zdGFuY2VvZiBVbm1lcmdlYWJsZURpYWdub3N0aWNTZXQpe2Zvcihjb25zdCBzdWJPdGhlckRpYWdub3N0aWMgb2Ygb3RoZXJEaWFnbm9zdGljKXtjb25zdCBjbG9uZT1zdWJPdGhlckRpYWdub3N0aWMuY2xvbmUoKTt0aGlzLmFkZERpYWdub3N0aWMoY2xvbmUpO30KcmV0dXJuO30KZm9yKGxldCBpPTA7aTx0aGlzLl9kaWFnbm9zdGljcy5sZW5ndGg7KytpKXtpZih0aGlzLl9kaWFnbm9zdGljc1tpXS5jYW5BZGREaWFnbm9zdGljKG90aGVyRGlhZ25vc3RpYykpe3RoaXMuX2RpYWdub3N0aWNzW2ldLmFkZERpYWdub3N0aWMob3RoZXJEaWFnbm9zdGljKTtyZXR1cm47fX0KY29uc3QgY2xvbmU9b3RoZXJEaWFnbm9zdGljLmNsb25lKCk7dGhpcy5fZGlhZ25vc3RpY3MucHVzaChjbG9uZSk7fQpnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuX2RpYWdub3N0aWNzLmxlbmd0aDt9KltTeW1ib2wuaXRlcmF0b3JdKCl7Zm9yKGNvbnN0IGRpYWdub3N0aWMgb2YgdGhpcy5fZGlhZ25vc3RpY3MpeWllbGQgZGlhZ25vc3RpYzt9CmFzRGljdEludG9fKGQpe2QuZGlhZ25vc3RpY3M9dGhpcy5fZGlhZ25vc3RpY3MubWFwKGQ9PmQuYXNEaWN0T3JSZWZlcmVuY2UoKSk7fQpzdGF0aWMgZGVzZXJpYWxpemUoZGF0YSxkZXNlcmlhbGl6ZXIpe3JldHVybiBuZXcgVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KGQubWFwKGk9PmRlc2VyaWFsaXplci5nZXREaWFnbm9zdGljKGkpLmRpYWdub3N0aWMpKTt9CnNlcmlhbGl6ZShzZXJpYWxpemVyKXtyZXR1cm4gdGhpcy5fZGlhZ25vc3RpY3MubWFwKGQ9PnNlcmlhbGl6ZXIuZ2V0T3JBbGxvY2F0ZURpYWdub3N0aWNJZCgnJyxkKSk7fQpzdGF0aWMgZnJvbURpY3QoZCl7cmV0dXJuIG5ldyBVbm1lcmdlYWJsZURpYWdub3N0aWNTZXQoZC5kaWFnbm9zdGljcy5tYXAoZD0+KCh0eXBlb2YgZD09PSdzdHJpbmcnKT9uZXcgdHIudi5kLkRpYWdub3N0aWNSZWYoZCk6dHIudi5kLkRpYWdub3N0aWMuZnJvbURpY3QoZCkpKSk7fX0KdHIudi5kLkRpYWdub3N0aWMucmVnaXN0ZXIoVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0LHtlbGVtZW50TmFtZTondHItdi11aS11bm1lcmdlYWJsZS1kaWFnbm9zdGljLXNldC1zcGFuJ30pO3JldHVybntVbm1lcmdlYWJsZURpYWdub3N0aWNTZXQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjb25zdCBSRVNFUlZFRF9JTkZPUz17QU5HTEVfUkVWSVNJT05TOntuYW1lOidhbmdsZVJldmlzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQVJDSElURUNUVVJFUzp7bmFtZTonYXJjaGl0ZWN0dXJlcycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQkVOQ0hNQVJLUzp7bmFtZTonYmVuY2htYXJrcycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQkVOQ0hNQVJLX1NUQVJUOntuYW1lOidiZW5jaG1hcmtTdGFydCcsdHlwZTp0ci52LmQuRGF0ZVJhbmdlfSxCRU5DSE1BUktfREVTQ1JJUFRJT05TOntuYW1lOidiZW5jaG1hcmtEZXNjcmlwdGlvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LEJPVFM6e25hbWU6J2JvdHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LEJVR19DT01QT05FTlRTOntuYW1lOididWdDb21wb25lbnRzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxCVUlMRFM6e25hbWU6J2J1aWxkcycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQ0FUQVBVTFRfUkVWSVNJT05TOntuYW1lOidjYXRhcHVsdFJldmlzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sQ0hST01JVU1fQ09NTUlUX1BPU0lUSU9OUzp7bmFtZTonY2hyb21pdW1Db21taXRQb3NpdGlvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LENIUk9NSVVNX1JFVklTSU9OUzp7bmFtZTonY2hyb21pdW1SZXZpc2lvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LERFU0NSSVBUSU9OOntuYW1lOidkZXNjcmlwdGlvbicsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sREVWSUNFX0lEUzp7bmFtZTonZGV2aWNlSWRzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxET0NVTUVOVEFUSU9OX1VSTFM6e25hbWU6J2RvY3VtZW50YXRpb25VcmxzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxGVUNIU0lBX0dBUk5FVF9SRVZJU0lPTlM6e25hbWU6J2Z1Y2hzaWFHYXJuZXRSZXZpc2lvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LEZVQ0hTSUFfUEVSSURPVF9SRVZJU0lPTlM6e25hbWU6J2Z1Y2hzaWFQZXJpZG90UmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxGVUNIU0lBX1RPUEFaX1JFVklTSU9OUzp7bmFtZTonZnVjaHNpYVRvcGF6UmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxGVUNIU0lBX1pJUkNPTl9SRVZJU0lPTlM6e25hbWU6J2Z1Y2hzaWFaaXJjb25SZXZpc2lvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LEdQVVM6e25hbWU6J2dwdXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LElTX1JFRkVSRU5DRV9CVUlMRDp7bmFtZTonaXNSZWZlcmVuY2VCdWlsZCcsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sTEFCRUxTOntuYW1lOidsYWJlbHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LExPR19VUkxTOntuYW1lOidsb2dVcmxzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxNQVNURVJTOntuYW1lOidtYXN0ZXJzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxNRU1PUllfQU1PVU5UUzp7bmFtZTonbWVtb3J5QW1vdW50cycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sT1NfTkFNRVM6e25hbWU6J29zTmFtZXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LE9TX1ZFUlNJT05TOntuYW1lOidvc1ZlcnNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxPV05FUlM6e25hbWU6J293bmVycycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sUE9JTlRfSUQ6e25hbWU6J3BvaW50SWQnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFBST0RVQ1RfVkVSU0lPTlM6e25hbWU6J3Byb2R1Y3RWZXJzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sUkVWSVNJT05fVElNRVNUQU1QUzp7bmFtZToncmV2aXNpb25UaW1lc3RhbXBzJyx0eXBlOnRyLnYuZC5EYXRlUmFuZ2V9LFNLSUFfUkVWSVNJT05TOntuYW1lOidza2lhUmV2aXNpb25zJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxTVEFUSVNUSUNTX05BTUVTOntuYW1lOidzdGF0aXN0aWNzTmFtZXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFNUT1JJRVM6e25hbWU6J3N0b3JpZXMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFNUT1JZU0VUX1JFUEVBVFM6e25hbWU6J3N0b3J5c2V0UmVwZWF0cycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sU1RPUllfVEFHUzp7bmFtZTonc3RvcnlUYWdzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxTVU1NQVJZX0tFWVM6e25hbWU6J3N1bW1hcnlLZXlzJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxURVNUX1BBVEg6e25hbWU6J3Rlc3RQYXRoJyx0eXBlOnRyLnYuZC5HZW5lcmljU2V0fSxUUkFDRV9TVEFSVDp7bmFtZTondHJhY2VTdGFydCcsdHlwZTp0ci52LmQuRGF0ZVJhbmdlfSxUUkFDRV9VUkxTOntuYW1lOid0cmFjZVVybHMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFY4X0NPTU1JVF9QT1NJVElPTlM6e25hbWU6J3Y4Q29tbWl0UG9zaXRpb25zJyx0eXBlOnRyLnYuZC5EYXRlUmFuZ2V9LFY4X1JFVklTSU9OUzp7bmFtZTondjhSZXZpc2lvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LFdFQlJUQ19SRVZJU0lPTlM6e25hbWU6J3dlYnJ0Y1JldmlzaW9ucycsdHlwZTp0ci52LmQuR2VuZXJpY1NldH0sV0VCUlRDX0lOVEVSTkFMX1JFVklTSU9OUzp7bmFtZTond2VicnRjSW50ZXJuYWxSZXZpc2lvbnMnLHR5cGU6dHIudi5kLkdlbmVyaWNTZXR9LH07Y29uc3QgUkVTRVJWRURfTkFNRVM9e307Y29uc3QgUkVTRVJWRURfTkFNRVNfVE9fVFlQRVM9bmV3IE1hcCgpO2Zvcihjb25zdFtjb2RlbmFtZSxpbmZvXW9mIE9iamVjdC5lbnRyaWVzKFJFU0VSVkVEX0lORk9TKSl7UkVTRVJWRURfTkFNRVNbY29kZW5hbWVdPWluZm8ubmFtZTtpZihSRVNFUlZFRF9OQU1FU19UT19UWVBFUy5oYXMoaW5mby5uYW1lKSl7dGhyb3cgbmV3IEVycm9yKGBEdXBsaWNhdGUgcmVzZXJ2ZWQgbmFtZSAiJHtpbmZvLm5hbWV9ImApO30KUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMuc2V0KGluZm8ubmFtZSxpbmZvLnR5cGUpO30KY29uc3QgUkVTRVJWRURfTkFNRVNfU0VUPW5ldyBTZXQoT2JqZWN0LnZhbHVlcyhSRVNFUlZFRF9OQU1FUykpO3JldHVybntSRVNFUlZFRF9JTkZPUyxSRVNFUlZFRF9OQU1FUyxSRVNFUlZFRF9OQU1FU19TRVQsUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYuZCcsZnVuY3Rpb24oKXtjbGFzcyBEaWFnbm9zdGljTWFwIGV4dGVuZHMgTWFwe2NvbnN0cnVjdG9yKG9wdF9hbGxvd1Jlc2VydmVkTmFtZXMpe3N1cGVyKCk7aWYob3B0X2FsbG93UmVzZXJ2ZWROYW1lcz09PXVuZGVmaW5lZCl7b3B0X2FsbG93UmVzZXJ2ZWROYW1lcz10cnVlO30KdGhpcy5hbGxvd1Jlc2VydmVkTmFtZXNfPW9wdF9hbGxvd1Jlc2VydmVkTmFtZXM7fQpzZXQobmFtZSxkaWFnbm9zdGljKXtpZih0eXBlb2YobmFtZSkhPT0nc3RyaW5nJyl7dGhyb3cgbmV3IEVycm9yKGBuYW1lIG11c3QgYmUgc3RyaW5nLCBub3QgJHtuYW1lfWApO30KaWYoIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLkRpYWdub3N0aWMpJiYhKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpY1JlZikpe3Rocm93IG5ldyBFcnJvcihgTXVzdCBiZSBpbnN0YW5jZW9mIERpYWdub3N0aWM6ICR7ZGlhZ25vc3RpY31gKTt9CmlmKCF0aGlzLmFsbG93UmVzZXJ2ZWROYW1lc18mJnRyLnYuZC5SRVNFUlZFRF9OQU1FU19TRVQuaGFzKG5hbWUpJiYhKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KSYmIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHIudi5kLkRpYWdub3N0aWNSZWYpKXtjb25zdCB0eXBlPXRyLnYuZC5SRVNFUlZFRF9OQU1FU19UT19UWVBFUy5nZXQobmFtZSk7aWYodHlwZSYmIShkaWFnbm9zdGljIGluc3RhbmNlb2YgdHlwZSkpe3Rocm93IG5ldyBFcnJvcihgRGlhZ25vc3RpY3MgbmFtZWQgIiR7bmFtZX0iIG11c3QgYmUgJHt0eXBlLm5hbWV9LCBgK2Bub3QgJHtkaWFnbm9zdGljLmNvbnN0cnVjdG9yLm5hbWV9YCk7fX0KTWFwLnByb3RvdHlwZS5zZXQuY2FsbCh0aGlzLG5hbWUsZGlhZ25vc3RpYyk7fQpkZWxldGUobmFtZSl7aWYobmFtZT09PXVuZGVmaW5lZCl0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgbmFtZScpO01hcC5wcm90b3R5cGUuZGVsZXRlLmNhbGwodGhpcyxuYW1lKTt9CmRlc2VyaWFsaXplQWRkKGRhdGEsZGVzZXJpYWxpemVyKXtmb3IoY29uc3QgaWQgb2YgZGF0YSl7Y29uc3R7bmFtZSxkaWFnbm9zdGljfT1kZXNlcmlhbGl6ZXIuZ2V0RGlhZ25vc3RpYyhpZCk7dGhpcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9fQphZGREaWN0cyhkaWN0KXtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljRGljdF1vZiBPYmplY3QuZW50cmllcyhkaWN0KSl7aWYobmFtZT09PSd0YWdtYXAnKWNvbnRpbnVlO2lmKHR5cGVvZiBkaWFnbm9zdGljRGljdD09PSdzdHJpbmcnKXt0aGlzLnNldChuYW1lLG5ldyB0ci52LmQuRGlhZ25vc3RpY1JlZihkaWFnbm9zdGljRGljdCkpO31lbHNlIGlmKGRpYWdub3N0aWNEaWN0LnR5cGUhPT0nUmVsYXRlZEhpc3RvZ3JhbU1hcCcmJmRpYWdub3N0aWNEaWN0LnR5cGUhPT0nUmVsYXRlZEhpc3RvZ3JhbUJyZWFrZG93bicmJmRpYWdub3N0aWNEaWN0LnR5cGUhPT0nVGFnTWFwJyl7dGhpcy5zZXQobmFtZSx0ci52LmQuRGlhZ25vc3RpYy5mcm9tRGljdChkaWFnbm9zdGljRGljdCkpO319fQpyZXNvbHZlU2hhcmVkRGlhZ25vc3RpY3MoaGlzdG9ncmFtcyxvcHRfcmVxdWlyZWQpe2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIHRoaXMpe2lmKCEodmFsdWUgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpY1JlZikpe2NvbnRpbnVlO30KY29uc3QgZ3VpZD12YWx1ZS5ndWlkO2NvbnN0IGRpYWdub3N0aWM9aGlzdG9ncmFtcy5sb29rdXBEaWFnbm9zdGljKGd1aWQpO2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpYyl7dGhpcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9ZWxzZSBpZihvcHRfcmVxdWlyZWQpe3Rocm93IG5ldyBFcnJvcignVW5hYmxlIHRvIGZpbmQgc2hhcmVkIERpYWdub3N0aWMgJytndWlkKTt9fX0Kc2VyaWFsaXplKHNlcmlhbGl6ZXIpe2NvbnN0IGRhdGE9W107Zm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiB0aGlzKXtkYXRhLnB1c2goc2VyaWFsaXplci5nZXRPckFsbG9jYXRlRGlhZ25vc3RpY0lkKG5hbWUsZGlhZ25vc3RpYykpO30KcmV0dXJuIGRhdGE7fQphc0RpY3QoKXtjb25zdCBkaWN0PXt9O2Zvcihjb25zdFtuYW1lLGRpYWdub3N0aWNdb2YgdGhpcyl7ZGljdFtuYW1lXT1kaWFnbm9zdGljLmFzRGljdE9yUmVmZXJlbmNlKCk7fQpyZXR1cm4gZGljdDt9CnN0YXRpYyBkZXNlcmlhbGl6ZShkYXRhLGRlc2VyaWFsaXplcil7Y29uc3QgZGlhZ25vc3RpY3M9bmV3IERpYWdub3N0aWNNYXAoKTtkaWFnbm9zdGljcy5kZXNlcmlhbGl6ZUFkZChkYXRhLGRlc2VyaWFsaXplcik7cmV0dXJuIGRpYWdub3N0aWNzO30Kc3RhdGljIGZyb21EaWN0KGQpe2NvbnN0IGRpYWdub3N0aWNzPW5ldyBEaWFnbm9zdGljTWFwKCk7ZGlhZ25vc3RpY3MuYWRkRGljdHMoZCk7cmV0dXJuIGRpYWdub3N0aWNzO30Kc3RhdGljIGZyb21PYmplY3Qob2JqKXtjb25zdCBkaWFnbm9zdGljcz1uZXcgRGlhZ25vc3RpY01hcCgpO2lmKCEob2JqIGluc3RhbmNlb2YgTWFwKSlvYmo9T2JqZWN0LmVudHJpZXMob2JqKTtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIG9iail7aWYoIWRpYWdub3N0aWMpY29udGludWU7ZGlhZ25vc3RpY3Muc2V0KG5hbWUsZGlhZ25vc3RpYyk7fQpyZXR1cm4gZGlhZ25vc3RpY3M7fQphZGREaWFnbm9zdGljcyhvdGhlcil7Zm9yKGNvbnN0W25hbWUsb3RoZXJEaWFnbm9zdGljXW9mIG90aGVyKXtjb25zdCBteURpYWdub3N0aWM9dGhpcy5nZXQobmFtZSk7aWYobXlEaWFnbm9zdGljIT09dW5kZWZpbmVkJiZteURpYWdub3N0aWMuY2FuQWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpKXtteURpYWdub3N0aWMuYWRkRGlhZ25vc3RpYyhvdGhlckRpYWdub3N0aWMpO2NvbnRpbnVlO30KY29uc3QgY2xvbmU9b3RoZXJEaWFnbm9zdGljLmNsb25lKCk7aWYobXlEaWFnbm9zdGljPT09dW5kZWZpbmVkKXt0aGlzLnNldChuYW1lLGNsb25lKTtjb250aW51ZTt9CnRoaXMuc2V0KG5hbWUsbmV3IHRyLnYuZC5Vbm1lcmdlYWJsZURpYWdub3N0aWNTZXQoW215RGlhZ25vc3RpYyxjbG9uZV0pKTt9fX0KcmV0dXJue0RpYWdub3N0aWNNYXB9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjb25zdCBNQVhfRElBR05PU1RJQ19NQVBTPTE2O2NvbnN0IERFRkFVTFRfU0FNUExFX1ZBTFVFU19QRVJfQklOPTEwO2NvbnN0IERFRkFVTFRfUkVCSU5ORURfQ09VTlQ9NDA7Y29uc3QgREVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklUPW5ldyBNYXAoKTtjb25zdCBERUZBVUxUX0lURVJBVElPTl9GT1JfQk9PVFNUUkFQX1JFU0FNUExJTkc9NTAwO2NvbnN0IERFTFRBPVN0cmluZy5mcm9tQ2hhckNvZGUoOTE2KTtjb25zdCBaX1NDT1JFX05BTUU9J3otc2NvcmUnO2NvbnN0IFBfVkFMVUVfTkFNRT0ncC12YWx1ZSc7Y29uc3QgVV9TVEFUSVNUSUNfTkFNRT0nVSc7ZnVuY3Rpb24gcGVyY2VudFRvU3RyaW5nKHBlcmNlbnQsb3B0X2ZvcmNlMyl7aWYocGVyY2VudDwwfHxwZXJjZW50PjEpe3Rocm93IG5ldyBFcnJvcigncGVyY2VudCBtdXN0IGJlIGluIFswLDFdJyk7fQppZihwZXJjZW50PT09MClyZXR1cm4nMDAwJztpZihwZXJjZW50PT09MSlyZXR1cm4nMTAwJztsZXQgc3RyPXBlcmNlbnQudG9TdHJpbmcoKTtpZihzdHJbMV0hPT0nLicpe3Rocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBwZXJjZW50Jyk7fQpzdHI9c3RyKycwJy5yZXBlYXQoTWF0aC5tYXgoNC1zdHIubGVuZ3RoLDApKTtpZihzdHIubGVuZ3RoPjQpe2lmKG9wdF9mb3JjZTMpe3N0cj1zdHIuc2xpY2UoMCw0KTt9ZWxzZXtzdHI9c3RyLnNsaWNlKDAsNCkrJ18nK3N0ci5zbGljZSg0KTt9fQpyZXR1cm4nMCcrc3RyLnNsaWNlKDIpO30KZnVuY3Rpb24gcGVyY2VudEZyb21TdHJpbmcocyl7cmV0dXJuIHBhcnNlRmxvYXQoc1swXSsnLicrcy5zdWJzdHIoMSkucmVwbGFjZSgvXy9nLCcnKSk7fQpjbGFzcyBIaXN0b2dyYW1CaW57Y29uc3RydWN0b3IocmFuZ2Upe3RoaXMucmFuZ2U9cmFuZ2U7dGhpcy5jb3VudD0wO3RoaXMuZGlhZ25vc3RpY01hcHM9W107fQphZGRTYW1wbGUodmFsdWUpe3RoaXMuY291bnQrPTE7fQphZGREaWFnbm9zdGljTWFwKGRpYWdub3N0aWNzKXt0ci5iLm1hdGguU3RhdGlzdGljcy51bmlmb3JtbHlTYW1wbGVTdHJlYW0odGhpcy5kaWFnbm9zdGljTWFwcyx0aGlzLmNvdW50LGRpYWdub3N0aWNzLE1BWF9ESUFHTk9TVElDX01BUFMpO30KYWRkQmluKG90aGVyKXtpZighdGhpcy5yYW5nZS5lcXVhbHMob3RoZXIucmFuZ2UpKXt0aHJvdyBuZXcgRXJyb3IoJ01lcmdpbmcgaW5jb21wYXRpYmxlIEhpc3RvZ3JhbSBiaW5zLicpO30KdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVyZ2VTYW1wbGVkU3RyZWFtcyh0aGlzLmRpYWdub3N0aWNNYXBzLHRoaXMuY291bnQsb3RoZXIuZGlhZ25vc3RpY01hcHMsb3RoZXIuY291bnQsTUFYX0RJQUdOT1NUSUNfTUFQUyk7dGhpcy5jb3VudCs9b3RoZXIuY291bnQ7fQpkZXNlcmlhbGl6ZShkYXRhLGRlc2VyaWFsaXplcil7aWYoIShkYXRhIGluc3RhbmNlb2YgQXJyYXkpKXt0aGlzLmNvdW50PWRhdGE7cmV0dXJuO30KdGhpcy5jb3VudD1kYXRhWzBdO2Zvcihjb25zdCBzYW1wbGUgb2YgZGF0YS5zbGljZSgxKSl7aWYoIShzYW1wbGUgaW5zdGFuY2VvZiBBcnJheSkpY29udGludWU7dGhpcy5kaWFnbm9zdGljTWFwcy5wdXNoKHRyLnYuZC5EaWFnbm9zdGljTWFwLmRlc2VyaWFsaXplKHNhbXBsZS5zbGljZSgxKSxkZXNlcmlhbGl6ZXIpKTt9fQpmcm9tRGljdChkaWN0KXt0aGlzLmNvdW50PWRpY3RbMF07aWYoZGljdC5sZW5ndGg+MSl7Zm9yKGNvbnN0IG1hcCBvZiBkaWN0WzFdKXt0aGlzLmRpYWdub3N0aWNNYXBzLnB1c2godHIudi5kLkRpYWdub3N0aWNNYXAuZnJvbURpY3QobWFwKSk7fX19CnNlcmlhbGl6ZShzZXJpYWxpemVyKXtpZighdGhpcy5kaWFnbm9zdGljTWFwcy5sZW5ndGgpe3JldHVybiB0aGlzLmNvdW50O30KcmV0dXJuW3RoaXMuY291bnQsLi4udGhpcy5kaWFnbm9zdGljTWFwcy5tYXAoZD0+W3VuZGVmaW5lZCwuLi5kLnNlcmlhbGl6ZShzZXJpYWxpemVyKV0pXTt9CmFzRGljdCgpe2lmKCF0aGlzLmRpYWdub3N0aWNNYXBzLmxlbmd0aCl7cmV0dXJuW3RoaXMuY291bnRdO30KcmV0dXJuW3RoaXMuY291bnQsdGhpcy5kaWFnbm9zdGljTWFwcy5tYXAoZD0+ZC5hc0RpY3QoKSldO319CmNvbnN0IERFRkFVTFRfU1VNTUFSWV9PUFRJT05TPW5ldyBNYXAoW1snYXZnJyx0cnVlXSxbJ2NvdW50Jyx0cnVlXSxbJ2dlb21ldHJpY01lYW4nLGZhbHNlXSxbJ21heCcsdHJ1ZV0sWydtaW4nLHRydWVdLFsnbmFucycsZmFsc2VdLFsnc3RkJyx0cnVlXSxbJ3N1bScsdHJ1ZV0sXSk7Y2xhc3MgSGlzdG9ncmFte2NvbnN0cnVjdG9yKG5hbWUsdW5pdCxvcHRfYmluQm91bmRhcmllcyl7aWYoISh1bml0IGluc3RhbmNlb2YgdHIuYi5Vbml0KSl7dGhyb3cgbmV3IEVycm9yKCd1bml0IG11c3QgYmUgYSBVbml0OiAnK3VuaXQpO30KbGV0IGJpbkJvdW5kYXJpZXM9b3B0X2JpbkJvdW5kYXJpZXM7aWYoIWJpbkJvdW5kYXJpZXMpe2NvbnN0IGJhc2VVbml0PXVuaXQuYmFzZVVuaXQ/dW5pdC5iYXNlVW5pdDp1bml0O2JpbkJvdW5kYXJpZXM9REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULmdldChiYXNlVW5pdC51bml0TmFtZSk7fQp0aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xz1iaW5Cb3VuZGFyaWVzLmFzRGljdCgpO3RoaXMuYWxsQmlucz1iaW5Cb3VuZGFyaWVzLmJpbnMuc2xpY2UoKTt0aGlzLmRlc2NyaXB0aW9uPScnO2NvbnN0IGFsbG93UmVzZXJ2ZWROYW1lcz1mYWxzZTt0aGlzLmRpYWdub3N0aWNzXz1uZXcgdHIudi5kLkRpYWdub3N0aWNNYXAoYWxsb3dSZXNlcnZlZE5hbWVzKTt0aGlzLm1heE51bVNhbXBsZVZhbHVlc189dGhpcy5kZWZhdWx0TWF4TnVtU2FtcGxlVmFsdWVzXzt0aGlzLm5hbWVfPW5hbWU7dGhpcy5uYW5EaWFnbm9zdGljTWFwcz1bXTt0aGlzLm51bU5hbnM9MDt0aGlzLnJ1bm5pbmdfPXVuZGVmaW5lZDt0aGlzLnNhbXBsZVZhbHVlc189W107dGhpcy5zYW1wbGVNZWFuc189W107dGhpcy5zdW1tYXJ5T3B0aW9ucz1uZXcgTWFwKERFRkFVTFRfU1VNTUFSWV9PUFRJT05TKTt0aGlzLnN1bW1hcnlPcHRpb25zLnNldCgncGVyY2VudGlsZScsW10pO3RoaXMuc3VtbWFyeU9wdGlvbnMuc2V0KCdpcHJzJyxbXSk7dGhpcy5zdW1tYXJ5T3B0aW9ucy5zZXQoJ2NpJyxbXSk7dGhpcy51bml0PXVuaXQ7fQpzdGF0aWMgY3JlYXRlKG5hbWUsdW5pdCxzYW1wbGVzLG9wdF9vcHRpb25zKXtjb25zdCBvcHRpb25zPW9wdF9vcHRpb25zfHx7fTtjb25zdCBoaXN0PW5ldyBIaXN0b2dyYW0obmFtZSx1bml0LG9wdGlvbnMuYmluQm91bmRhcmllcyk7aWYob3B0aW9ucy5kZXNjcmlwdGlvbiloaXN0LmRlc2NyaXB0aW9uPW9wdGlvbnMuZGVzY3JpcHRpb247aWYob3B0aW9ucy5zdW1tYXJ5T3B0aW9ucyl7bGV0IHN1bW1hcnlPcHRpb25zPW9wdGlvbnMuc3VtbWFyeU9wdGlvbnM7aWYoIShzdW1tYXJ5T3B0aW9ucyBpbnN0YW5jZW9mIE1hcCkpe3N1bW1hcnlPcHRpb25zPU9iamVjdC5lbnRyaWVzKHN1bW1hcnlPcHRpb25zKTt9CmZvcihjb25zdFtuYW1lLHZhbHVlXW9mIHN1bW1hcnlPcHRpb25zKXtoaXN0LnN1bW1hcnlPcHRpb25zLnNldChuYW1lLHZhbHVlKTt9fQppZihvcHRpb25zLmRpYWdub3N0aWNzIT09dW5kZWZpbmVkKXtsZXQgZGlhZ25vc3RpY3M9b3B0aW9ucy5kaWFnbm9zdGljcztpZighKGRpYWdub3N0aWNzIGluc3RhbmNlb2YgTWFwKSl7ZGlhZ25vc3RpY3M9T2JqZWN0LmVudHJpZXMoZGlhZ25vc3RpY3MpO30KZm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiBkaWFnbm9zdGljcyl7aWYoIWRpYWdub3N0aWMpY29udGludWU7aGlzdC5kaWFnbm9zdGljcy5zZXQobmFtZSxkaWFnbm9zdGljKTt9fQppZighKHNhbXBsZXMgaW5zdGFuY2VvZiBBcnJheSkpc2FtcGxlcz1bc2FtcGxlc107Zm9yKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKXtpZih0eXBlb2Ygc2FtcGxlPT09J29iamVjdCcpe2hpc3QuYWRkU2FtcGxlKHNhbXBsZS52YWx1ZSxzYW1wbGUuZGlhZ25vc3RpY3MpO31lbHNle2hpc3QuYWRkU2FtcGxlKHNhbXBsZSk7fX0KcmV0dXJuIGhpc3Q7fQpnZXQgZGlhZ25vc3RpY3MoKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljc187fQpnZXQgcnVubmluZygpe3JldHVybiB0aGlzLnJ1bm5pbmdfO30KZ2V0IG1heE51bVNhbXBsZVZhbHVlcygpe3JldHVybiB0aGlzLm1heE51bVNhbXBsZVZhbHVlc187fQpzZXQgbWF4TnVtU2FtcGxlVmFsdWVzKG4pe3RoaXMubWF4TnVtU2FtcGxlVmFsdWVzXz1uO3RyLmIubWF0aC5TdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZUFycmF5KHRoaXMuc2FtcGxlVmFsdWVzXyx0aGlzLm1heE51bVNhbXBsZVZhbHVlc18pO30KZ2V0IG5hbWUoKXtyZXR1cm4gdGhpcy5uYW1lXzt9CmRlc2VyaWFsaXplU3RhdGlzdGljc18oKXtjb25zdCBzdGF0aXN0aWNzTmFtZXM9dGhpcy5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLlNUQVRJU1RJQ1NfTkFNRVMpO2lmKCFzdGF0aXN0aWNzTmFtZXMpcmV0dXJuO2Zvcihjb25zdCBzdGF0TmFtZSBvZiBzdGF0aXN0aWNzTmFtZXMpe2lmKHN0YXROYW1lLnN0YXJ0c1dpdGgoJ3BjdF8nKSl7Y29uc3QgcGVyY2VudD1wZXJjZW50RnJvbVN0cmluZyhzdGF0TmFtZS5zdWJzdHIoNCkpO3RoaXMuc3VtbWFyeU9wdGlvbnMuZ2V0KCdwZXJjZW50aWxlJykucHVzaChwZXJjZW50KTt9ZWxzZSBpZihzdGF0TmFtZS5zdGFydHNXaXRoKCdpcHJfJykpe2NvbnN0IGxvd2VyPXBlcmNlbnRGcm9tU3RyaW5nKHN0YXROYW1lLnN1YnN0cig0LDMpKTtjb25zdCB1cHBlcj1wZXJjZW50RnJvbVN0cmluZyhzdGF0TmFtZS5zdWJzdHIoOCkpO3RoaXMuc3VtbWFyeU9wdGlvbnMuZ2V0KCdpcHJzJykucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UobG93ZXIsdXBwZXIpKTt9ZWxzZSBpZihzdGF0TmFtZS5zdGFydHNXaXRoKCdjaV8nKSl7Y29uc3QgcGVyY2VudD1wZXJjZW50RnJvbVN0cmluZyhzdGF0TmFtZS5yZXBsYWNlKCdfbG93ZXInLCcnKS5yZXBsYWNlKCdfdXBwZXInLCcnKS5zdWJzdHIoMykpO2lmKCF0aGlzLnN1bW1hcnlPcHRpb25zLmdldCgnY2knKS5pbmNsdWRlcyhwZXJjZW50KSl7dGhpcy5zdW1tYXJ5T3B0aW9ucy5nZXQoJ2NpJykucHVzaChwZXJjZW50KTt9fX0KZm9yKGNvbnN0IHN0YXROYW1lIG9mIHRoaXMuc3VtbWFyeU9wdGlvbnMua2V5cygpKXtpZihzdGF0TmFtZT09PSdwZXJjZW50aWxlJ3x8c3RhdE5hbWU9PT0naXBycyd8fHN0YXROYW1lPT09J2NpJyl7Y29udGludWU7fQp0aGlzLnN1bW1hcnlPcHRpb25zLnNldChzdGF0TmFtZSxzdGF0aXN0aWNzTmFtZXMuaGFzKHN0YXROYW1lKSk7fX0KZGVzZXJpYWxpemVCaW5fKGksYmluLGRlc2VyaWFsaXplcil7dGhpcy5hbGxCaW5zW2ldPW5ldyBIaXN0b2dyYW1CaW4odGhpcy5hbGxCaW5zW2ldLnJhbmdlKTt0aGlzLmFsbEJpbnNbaV0uZGVzZXJpYWxpemUoYmluLGRlc2VyaWFsaXplcik7aWYoIShiaW4gaW5zdGFuY2VvZiBBcnJheSkpcmV0dXJuO2ZvcihsZXQgc2FtcGxlIG9mIGJpbi5zbGljZSgxKSl7aWYoc2FtcGxlIGluc3RhbmNlb2YgQXJyYXkpe3NhbXBsZT1zYW1wbGVbMF07fQp0aGlzLnNhbXBsZVZhbHVlc18ucHVzaChzYW1wbGUpO319CmRlc2VyaWFsaXplQmluc18oYmlucyxkZXNlcmlhbGl6ZXIpe2lmKGJpbnMgaW5zdGFuY2VvZiBBcnJheSl7Zm9yKGxldCBpPTA7aTxiaW5zLmxlbmd0aDsrK2kpe3RoaXMuZGVzZXJpYWxpemVCaW5fKGksYmluc1tpXSxkZXNlcmlhbGl6ZXIpO319ZWxzZXtmb3IoY29uc3RbaSxiaW5EYXRhXW9mIE9iamVjdC5lbnRyaWVzKGJpbnMpKXt0aGlzLmRlc2VyaWFsaXplQmluXyhpLGJpbkRhdGEsZGVzZXJpYWxpemVyKTt9fX0Kc3RhdGljIGRlc2VyaWFsaXplKGRhdGEsZGVzZXJpYWxpemVyKXtjb25zdFtuYW1lLHVuaXQsYm91bmRhcmllcyxkaWFnbm9zdGljcyxydW5uaW5nLGJpbnMsbmFuQmluXT1kYXRhO2NvbnN0IGhpc3Q9bmV3IEhpc3RvZ3JhbShkZXNlcmlhbGl6ZXIuZ2V0T2JqZWN0KG5hbWUpLHRyLmIuVW5pdC5mcm9tSlNPTih1bml0KSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmZyb21EaWN0KGRlc2VyaWFsaXplci5nZXRPYmplY3QoYm91bmRhcmllcykpKTtoaXN0LmRpYWdub3N0aWNzLmRlc2VyaWFsaXplQWRkKGRpYWdub3N0aWNzLGRlc2VyaWFsaXplcik7Y29uc3QgZGVzY3JpcHRpb249aGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkRFU0NSSVBUSU9OKTtpZihkZXNjcmlwdGlvbiYmZGVzY3JpcHRpb24ubGVuZ3RoKXtoaXN0LmRlc2NyaXB0aW9uPVsuLi5kZXNjcmlwdGlvbl1bMF07fQpoaXN0LmRlc2VyaWFsaXplU3RhdGlzdGljc18oKTtpZihydW5uaW5nKXtoaXN0LnJ1bm5pbmdfPXRyLmIubWF0aC5SdW5uaW5nU3RhdGlzdGljcy5mcm9tRGljdChydW5uaW5nKTt9CmlmKGJpbnMpe2hpc3QuZGVzZXJpYWxpemVCaW5zXyhiaW5zLGRlc2VyaWFsaXplcik7fQppZihuYW5CaW4pe2lmKCEobmFuQmluIGluc3RhbmNlb2YgQXJyYXkpKXtoaXN0Lm51bU5hbnM9bmFuQmluO31lbHNle2hpc3QubnVtTmFucz1uYW5CaW5bMF07Zm9yKGNvbnN0IHNhbXBsZSBvZiBuYW5CaW4uc2xpY2UoMSkpe2lmKCEoc2FtcGxlIGluc3RhbmNlb2YgQXJyYXkpKWNvbnRpbnVlO2hpc3QubmFuRGlhZ25vc3RpY01hcHMucHVzaCh0ci52LmQuRGlhZ25vc3RpY01hcC5kZXNlcmlhbGl6ZShzYW1wbGUuc2xpY2UoMSksZGVzZXJpYWxpemVyKSk7fX19CnJldHVybiBoaXN0O30Kc3RhdGljIGZyb21EaWN0KGRpY3Qpe2NvbnN0IGhpc3Q9bmV3IEhpc3RvZ3JhbShkaWN0Lm5hbWUsdHIuYi5Vbml0LmZyb21KU09OKGRpY3QudW5pdCksSGlzdG9ncmFtQmluQm91bmRhcmllcy5mcm9tRGljdChkaWN0LmJpbkJvdW5kYXJpZXMpKTtpZihkaWN0LmRlc2NyaXB0aW9uKXtoaXN0LmRlc2NyaXB0aW9uPWRpY3QuZGVzY3JpcHRpb247fQppZihkaWN0LmRpYWdub3N0aWNzKXtoaXN0LmRpYWdub3N0aWNzLmFkZERpY3RzKGRpY3QuZGlhZ25vc3RpY3MpO30KaWYoZGljdC5hbGxCaW5zKXtpZihkaWN0LmFsbEJpbnMubGVuZ3RoIT09dW5kZWZpbmVkKXtmb3IobGV0IGk9MDtpPGRpY3QuYWxsQmlucy5sZW5ndGg7KytpKXtoaXN0LmFsbEJpbnNbaV09bmV3IEhpc3RvZ3JhbUJpbihoaXN0LmFsbEJpbnNbaV0ucmFuZ2UpO2hpc3QuYWxsQmluc1tpXS5mcm9tRGljdChkaWN0LmFsbEJpbnNbaV0pO319ZWxzZXtmb3IoY29uc3RbaSxiaW5EaWN0XW9mIE9iamVjdC5lbnRyaWVzKGRpY3QuYWxsQmlucykpe2lmKGk+PWhpc3QuYWxsQmlucy5sZW5ndGh8fGk8MCl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4ICInK2krJyIgb3V0IG9mIGJvdW5kcyBvZiBbMC4uJytoaXN0LmFsbEJpbnMubGVuZ3RoKycpJyk7fQpoaXN0LmFsbEJpbnNbaV09bmV3IEhpc3RvZ3JhbUJpbihoaXN0LmFsbEJpbnNbaV0ucmFuZ2UpO2hpc3QuYWxsQmluc1tpXS5mcm9tRGljdChiaW5EaWN0KTt9fX0KaWYoZGljdC5ydW5uaW5nKXtoaXN0LnJ1bm5pbmdfPXRyLmIubWF0aC5SdW5uaW5nU3RhdGlzdGljcy5mcm9tRGljdChkaWN0LnJ1bm5pbmcpO30KaWYoZGljdC5zdW1tYXJ5T3B0aW9ucyl7aWYoZGljdC5zdW1tYXJ5T3B0aW9ucy5pcHJzKXtkaWN0LnN1bW1hcnlPcHRpb25zLmlwcnM9ZGljdC5zdW1tYXJ5T3B0aW9ucy5pcHJzLm1hcChyPT50ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoclswXSxyWzFdKSk7fQpoaXN0LmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKGRpY3Quc3VtbWFyeU9wdGlvbnMpO30KaWYoZGljdC5tYXhOdW1TYW1wbGVWYWx1ZXMhPT11bmRlZmluZWQpe2hpc3QubWF4TnVtU2FtcGxlVmFsdWVzPWRpY3QubWF4TnVtU2FtcGxlVmFsdWVzO30KaWYoZGljdC5zYW1wbGVWYWx1ZXMpe2hpc3Quc2FtcGxlVmFsdWVzXz1kaWN0LnNhbXBsZVZhbHVlczt9CmlmKGRpY3QubnVtTmFucyl7aGlzdC5udW1OYW5zPWRpY3QubnVtTmFuczt9CmlmKGRpY3QubmFuRGlhZ25vc3RpY3Mpe2Zvcihjb25zdCBtYXAgb2YgZGljdC5uYW5EaWFnbm9zdGljcyl7aGlzdC5uYW5EaWFnbm9zdGljTWFwcy5wdXNoKHRyLnYuZC5EaWFnbm9zdGljTWFwLmZyb21EaWN0KG1hcCkpO319CnJldHVybiBoaXN0O30KZ2V0IG51bVZhbHVlcygpe3JldHVybiB0aGlzLnJ1bm5pbmdfP3RoaXMucnVubmluZ18uY291bnQ6MDt9CmdldCBhdmVyYWdlKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5tZWFuOnVuZGVmaW5lZDt9CmdldCBzdGFuZGFyZERldmlhdGlvbigpe3JldHVybiB0aGlzLnJ1bm5pbmdfP3RoaXMucnVubmluZ18uc3RkZGV2OnVuZGVmaW5lZDt9CmdldCBnZW9tZXRyaWNNZWFuKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5nZW9tZXRyaWNNZWFuOjA7fQpnZXQgc3VtKCl7cmV0dXJuIHRoaXMucnVubmluZ18/dGhpcy5ydW5uaW5nXy5zdW06MDt9CmdldCBtaW4oKXtyZXR1cm4gdGhpcy5ydW5uaW5nXz90aGlzLnJ1bm5pbmdfLm1pbjpJbmZpbml0eTt9CmdldCBtYXgoKXtyZXR1cm4gdGhpcy5ydW5uaW5nXz90aGlzLnJ1bm5pbmdfLm1heDotSW5maW5pdHk7fQpnZXREaWZmZXJlbmNlU2lnbmlmaWNhbmNlKG90aGVyLG9wdF9hbHBoYSl7aWYodGhpcy51bml0IT09b3RoZXIudW5pdCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgY29tcGFyZSBIaXN0b2dyYW1zIHdpdGggZGlmZmVyZW50IHVuaXRzJyk7fQppZih0aGlzLnVuaXQuaW1wcm92ZW1lbnREaXJlY3Rpb249PT10ci5iLkltcHJvdmVtZW50RGlyZWN0aW9uLkRPTlRfQ0FSRSl7cmV0dXJuIHRyLmIubWF0aC5TdGF0aXN0aWNzLlNpZ25pZmljYW5jZS5ET05UX0NBUkU7fQppZighKG90aGVyIGluc3RhbmNlb2YgSGlzdG9ncmFtKSl7dGhyb3cgbmV3IEVycm9yKCdVbmFibGUgdG8gY29tcHV0ZSBhIHAtdmFsdWUnKTt9CmNvbnN0IHRlc3RSZXN1bHQ9dHIuYi5tYXRoLlN0YXRpc3RpY3MubXd1KHRoaXMuc2FtcGxlVmFsdWVzLG90aGVyLnNhbXBsZVZhbHVlcyxvcHRfYWxwaGEpO3JldHVybiB0ZXN0UmVzdWx0LnNpZ25pZmljYW5jZTt9CmdldEFwcHJveGltYXRlUGVyY2VudGlsZShwZXJjZW50KXtpZihwZXJjZW50PDB8fHBlcmNlbnQ+MSl7dGhyb3cgbmV3IEVycm9yKCdwZXJjZW50IG11c3QgYmUgaW4gWzAsMV0nKTt9CmlmKHRoaXMubnVtVmFsdWVzPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKHRoaXMuYWxsQmlucy5sZW5ndGg9PT0xKXtjb25zdCBzb3J0ZWRTYW1wbGVWYWx1ZXM9dGhpcy5zYW1wbGVWYWx1ZXMuc2xpY2UoKS5zb3J0KCh4LHkpPT54LXkpO3JldHVybiBzb3J0ZWRTYW1wbGVWYWx1ZXNbTWF0aC5mbG9vcigoc29ydGVkU2FtcGxlVmFsdWVzLmxlbmd0aC0xKSpwZXJjZW50KV07fQpsZXQgdmFsdWVzVG9Ta2lwPU1hdGguZmxvb3IoKHRoaXMubnVtVmFsdWVzLTEpKnBlcmNlbnQpO2Zvcihjb25zdCBiaW4gb2YgdGhpcy5hbGxCaW5zKXt2YWx1ZXNUb1NraXAtPWJpbi5jb3VudDtpZih2YWx1ZXNUb1NraXA+PTApY29udGludWU7aWYoYmluLnJhbmdlLm1pbj09PS1OdW1iZXIuTUFYX1ZBTFVFKXtyZXR1cm4gYmluLnJhbmdlLm1heDt9CmlmKGJpbi5yYW5nZS5tYXg9PT1OdW1iZXIuTUFYX1ZBTFVFKXtyZXR1cm4gYmluLnJhbmdlLm1pbjt9CnJldHVybiBiaW4ucmFuZ2UuY2VudGVyO30KcmV0dXJuIHRoaXMuYWxsQmluc1t0aGlzLmFsbEJpbnMubGVuZ3RoLTFdLnJhbmdlLm1pbjt9CmdldEJpbkluZGV4Rm9yVmFsdWUodmFsdWUpe2NvbnN0IGk9dHIuYi5maW5kRmlyc3RUcnVlSW5kZXhJblNvcnRlZEFycmF5KHRoaXMuYWxsQmlucyxiPT52YWx1ZTxiLnJhbmdlLm1heCk7aWYoMDw9aSYmaTx0aGlzLmFsbEJpbnMubGVuZ3RoKXJldHVybiBpO3JldHVybiB0aGlzLmFsbEJpbnMubGVuZ3RoLTE7fQpnZXRCaW5Gb3JWYWx1ZSh2YWx1ZSl7cmV0dXJuIHRoaXMuYWxsQmluc1t0aGlzLmdldEJpbkluZGV4Rm9yVmFsdWUodmFsdWUpXTt9CmFkZFNhbXBsZSh2YWx1ZSxvcHRfZGlhZ25vc3RpY3Mpe2lmKG9wdF9kaWFnbm9zdGljcyl7aWYoIShvcHRfZGlhZ25vc3RpY3MgaW5zdGFuY2VvZiB0ci52LmQuRGlhZ25vc3RpY01hcCkpe29wdF9kaWFnbm9zdGljcz10ci52LmQuRGlhZ25vc3RpY01hcC5mcm9tT2JqZWN0KG9wdF9kaWFnbm9zdGljcyk7fQpmb3IoY29uc3RbbmFtZSxkaWFnXW9mIG9wdF9kaWFnbm9zdGljcyl7aWYoZGlhZyBpbnN0YW5jZW9mIHRyLnYuZC5CcmVha2Rvd24pe2RpYWcudHJ1bmNhdGUodGhpcy51bml0KTt9fX0KaWYodHlwZW9mKHZhbHVlKSE9PSdudW1iZXInfHxpc05hTih2YWx1ZSkpe3RoaXMubnVtTmFucysrO2lmKG9wdF9kaWFnbm9zdGljcyl7dHIuYi5tYXRoLlN0YXRpc3RpY3MudW5pZm9ybWx5U2FtcGxlU3RyZWFtKHRoaXMubmFuRGlhZ25vc3RpY01hcHMsdGhpcy5udW1OYW5zLG9wdF9kaWFnbm9zdGljcyxNQVhfRElBR05PU1RJQ19NQVBTKTt9fWVsc2V7aWYodGhpcy5ydW5uaW5nXz09PXVuZGVmaW5lZCl7dGhpcy5ydW5uaW5nXz1uZXcgdHIuYi5tYXRoLlJ1bm5pbmdTdGF0aXN0aWNzKCk7fQp0aGlzLnNhbXBsZU1lYW5zXz1bXTt0aGlzLnJ1bm5pbmdfLmFkZCh2YWx1ZSk7dmFsdWU9dGhpcy51bml0LnRydW5jYXRlKHZhbHVlKTtjb25zdCBiaW5JbmRleD10aGlzLmdldEJpbkluZGV4Rm9yVmFsdWUodmFsdWUpO2xldCBiaW49dGhpcy5hbGxCaW5zW2JpbkluZGV4XTtpZihiaW4uY291bnQ9PT0wKXtiaW49bmV3IEhpc3RvZ3JhbUJpbihiaW4ucmFuZ2UpO3RoaXMuYWxsQmluc1tiaW5JbmRleF09YmluO30KYmluLmFkZFNhbXBsZSh2YWx1ZSk7aWYob3B0X2RpYWdub3N0aWNzKXtiaW4uYWRkRGlhZ25vc3RpY01hcChvcHRfZGlhZ25vc3RpY3MpO319CnRyLmIubWF0aC5TdGF0aXN0aWNzLnVuaWZvcm1seVNhbXBsZVN0cmVhbSh0aGlzLnNhbXBsZVZhbHVlc18sdGhpcy5udW1WYWx1ZXMrdGhpcy5udW1OYW5zLHZhbHVlLHRoaXMubWF4TnVtU2FtcGxlVmFsdWVzKTt9CnJlc2FtcGxlTWVhbl8ocGVyY2VudCl7Y29uc3QgZmlsdGVyZWRTYW1wbGVzPXRoaXMuc2FtcGxlVmFsdWVzXy5maWx0ZXIodmFsdWU9PnR5cGVvZih2YWx1ZSk9PT0nbnVtYmVyJyYmIWlzTmFOKHZhbHVlKSk7Y29uc3Qgc2FtcGxlQ291bnQ9ZmlsdGVyZWRTYW1wbGVzLmxlbmd0aDtpZihzYW1wbGVDb3VudD09PTB8fHBlcmNlbnQ8PTAuMHx8cGVyY2VudD49MS4wKXtyZXR1cm5bdW5kZWZpbmVkLHVuZGVmaW5lZF07fWVsc2UgaWYoc2FtcGxlQ291bnQ9PT0xKXtyZXR1cm5bZmlsdGVyZWRTYW1wbGVzWzBdLGZpbHRlcmVkU2FtcGxlc1swXV07fQpjb25zdCBpdGVyYXRpb25zPURFRkFVTFRfSVRFUkFUSU9OX0ZPUl9CT09UU1RSQVBfUkVTQU1QTElORztpZih0aGlzLnNhbXBsZU1lYW5zXy5sZW5ndGghPT1pdGVyYXRpb25zKXt0aGlzLnNhbXBsZU1lYW5zXz1bXTtmb3IobGV0IGk9MDtpPGl0ZXJhdGlvbnM7aSsrKXtsZXQgdGVtcFN1bT0wLjA7Zm9yKGxldCBqPTA7ajxzYW1wbGVDb3VudDtqKyspe3RlbXBTdW0rPWZpbHRlcmVkU2FtcGxlc1tNYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqc2FtcGxlQ291bnQpXTt9CnRoaXMuc2FtcGxlTWVhbnNfLnB1c2godGVtcFN1bS9zYW1wbGVDb3VudCk7fQp0aGlzLnNhbXBsZU1lYW5zXy5zb3J0KChhLGIpPT5hLWIpO30KcmV0dXJuW3RoaXMuc2FtcGxlTWVhbnNfW01hdGguZmxvb3IoKGl0ZXJhdGlvbnMtMSkqKDAuNS1wZXJjZW50LzIpKV0sdGhpcy5zYW1wbGVNZWFuc19bTWF0aC5jZWlsKChpdGVyYXRpb25zLTEpKigwLjUrcGVyY2VudC8yKSldLF07fQpzYW1wbGVWYWx1ZXNJbnRvKHNhbXBsZXMpe2Zvcihjb25zdCBzYW1wbGVWYWx1ZSBvZiB0aGlzLnNhbXBsZVZhbHVlcyl7c2FtcGxlcy5wdXNoKHNhbXBsZVZhbHVlKTt9fQpjYW5BZGRIaXN0b2dyYW0ob3RoZXIpe2lmKHRoaXMudW5pdCE9PW90aGVyLnVuaXQpe3JldHVybiBmYWxzZTt9CmlmKHRoaXMuYmluQm91bmRhcmllc0RpY3RfPT09b3RoZXIuYmluQm91bmRhcmllc0RpY3RfKXtyZXR1cm4gdHJ1ZTt9CmlmKCF0aGlzLmJpbkJvdW5kYXJpZXNEaWN0X3x8IW90aGVyLmJpbkJvdW5kYXJpZXNEaWN0Xyl7cmV0dXJuIHRydWU7fQppZih0aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xy5sZW5ndGghPT1vdGhlci5iaW5Cb3VuZGFyaWVzRGljdF8ubGVuZ3RoKXtyZXR1cm4gZmFsc2U7fQpmb3IobGV0IGk9MDtpPHRoaXMuYmluQm91bmRhcmllc0RpY3RfLmxlbmd0aDsrK2kpe2NvbnN0IHNsaWNlPXRoaXMuYmluQm91bmRhcmllc0RpY3RfW2ldO2NvbnN0IG90aGVyU2xpY2U9b3RoZXIuYmluQm91bmRhcmllc0RpY3RfW2ldO2lmKHNsaWNlIGluc3RhbmNlb2YgQXJyYXkpe2lmKCEob3RoZXJTbGljZSBpbnN0YW5jZW9mIEFycmF5KSl7cmV0dXJuIGZhbHNlO30KaWYoc2xpY2VbMF0hPT1vdGhlclNsaWNlWzBdfHwhdHIuYi5tYXRoLmFwcHJveGltYXRlbHkoc2xpY2VbMV0sb3RoZXJTbGljZVsxXSl8fHNsaWNlWzJdIT09b3RoZXJTbGljZVsyXSl7cmV0dXJuIGZhbHNlO319ZWxzZXtpZihvdGhlclNsaWNlIGluc3RhbmNlb2YgQXJyYXkpe3JldHVybiBmYWxzZTt9CmlmKCF0ci5iLm1hdGguYXBwcm94aW1hdGVseShzbGljZSxvdGhlclNsaWNlKSl7cmV0dXJuIGZhbHNlO319fQpyZXR1cm4gdHJ1ZTt9CmFkZEhpc3RvZ3JhbShvdGhlcil7aWYoIXRoaXMuY2FuQWRkSGlzdG9ncmFtKG90aGVyKSl7dGhyb3cgbmV3IEVycm9yKCdNZXJnaW5nIGluY29tcGF0aWJsZSBIaXN0b2dyYW1zJyk7fQppZighIXRoaXMuYmluQm91bmRhcmllc0RpY3RfPT09ISFvdGhlci5iaW5Cb3VuZGFyaWVzRGljdF8pe2ZvcihsZXQgaT0wO2k8dGhpcy5hbGxCaW5zLmxlbmd0aDsrK2kpe2xldCBiaW49dGhpcy5hbGxCaW5zW2ldO2lmKGJpbi5jb3VudD09PTApe2Jpbj1uZXcgSGlzdG9ncmFtQmluKGJpbi5yYW5nZSk7dGhpcy5hbGxCaW5zW2ldPWJpbjt9CmJpbi5hZGRCaW4ob3RoZXIuYWxsQmluc1tpXSk7fX1lbHNle2NvbnN0W211bHRpQmluLHNpbmdsZUJpbl09dGhpcy5iaW5Cb3VuZGFyaWVzRGljdF8/W3RoaXMsb3RoZXJdOltvdGhlcix0aGlzXTtmb3IoY29uc3QgdmFsdWUgb2Ygc2luZ2xlQmluLnNhbXBsZVZhbHVlcyl7aWYodHlwZW9mKHZhbHVlKSE9PSdudW1iZXInfHxpc05hTih2YWx1ZSkpe2NvbnRpbnVlO30KY29uc3QgYmluSW5kZXg9bXVsdGlCaW4uZ2V0QmluSW5kZXhGb3JWYWx1ZSh2YWx1ZSk7bGV0IGJpbj1tdWx0aUJpbi5hbGxCaW5zW2JpbkluZGV4XTtpZihiaW4uY291bnQ9PT0wKXtiaW49bmV3IEhpc3RvZ3JhbUJpbihiaW4ucmFuZ2UpO211bHRpQmluLmFsbEJpbnNbYmluSW5kZXhdPWJpbjt9CmJpbi5hZGRTYW1wbGUodmFsdWUpO319CnRyLmIubWF0aC5TdGF0aXN0aWNzLm1lcmdlU2FtcGxlZFN0cmVhbXModGhpcy5uYW5EaWFnbm9zdGljTWFwcyx0aGlzLm51bU5hbnMsb3RoZXIubmFuRGlhZ25vc3RpY01hcHMsb3RoZXIubnVtTmFucyxNQVhfRElBR05PU1RJQ19NQVBTKTt0ci5iLm1hdGguU3RhdGlzdGljcy5tZXJnZVNhbXBsZWRTdHJlYW1zKHRoaXMuc2FtcGxlVmFsdWVzLHRoaXMubnVtVmFsdWVzK3RoaXMubnVtTmFucyxvdGhlci5zYW1wbGVWYWx1ZXMsb3RoZXIubnVtVmFsdWVzK290aGVyLm51bU5hbnMsKHRoaXMubWF4TnVtU2FtcGxlVmFsdWVzK290aGVyLm1heE51bVNhbXBsZVZhbHVlcykvMik7dGhpcy5udW1OYW5zKz1vdGhlci5udW1OYW5zO2lmKG90aGVyLnJ1bm5pbmdfIT09dW5kZWZpbmVkKXtpZih0aGlzLnJ1bm5pbmdfPT09dW5kZWZpbmVkKXt0aGlzLnJ1bm5pbmdfPW5ldyB0ci5iLm1hdGguUnVubmluZ1N0YXRpc3RpY3MoKTt9CnRoaXMucnVubmluZ189dGhpcy5ydW5uaW5nXy5tZXJnZShvdGhlci5ydW5uaW5nXyk7fQp0aGlzLnNhbXBsZU1lYW5zXz1bXTt0aGlzLmRpYWdub3N0aWNzLmFkZERpYWdub3N0aWNzKG90aGVyLmRpYWdub3N0aWNzKTtmb3IoY29uc3Rbc3RhdCxvcHRpb25db2Ygb3RoZXIuc3VtbWFyeU9wdGlvbnMpe2lmKHN0YXQ9PT0ncGVyY2VudGlsZScpe2NvbnN0IHBlcmNlbnRpbGVzPXRoaXMuc3VtbWFyeU9wdGlvbnMuZ2V0KHN0YXQpO2Zvcihjb25zdCBwZXJjZW50IG9mIG9wdGlvbil7aWYoIXBlcmNlbnRpbGVzLmluY2x1ZGVzKHBlcmNlbnQpKXBlcmNlbnRpbGVzLnB1c2gocGVyY2VudCk7fX1lbHNlIGlmKHN0YXQ9PT0naXBycycpe2NvbnN0IHRoaXNJcHJzPXRoaXMuc3VtbWFyeU9wdGlvbnMuZ2V0KHN0YXQpO2Zvcihjb25zdCBpcHIgb2Ygb3B0aW9uKXtsZXQgZm91bmQ9ZmFsc2U7Zm9yKGNvbnN0IHRoaXNJcHIgb2YgdGhpc0lwcnMpe2ZvdW5kPWlwci5lcXVhbHModGhpc0lwcik7aWYoZm91bmQpYnJlYWs7fQppZighZm91bmQpdGhpc0lwcnMucHVzaChpcHIpO319ZWxzZSBpZihzdGF0PT09J2NpJyl7Y29uc3QgQ0lzPXRoaXMuc3VtbWFyeU9wdGlvbnMuZ2V0KHN0YXQpO2Zvcihjb25zdCBDSSBvZiBvcHRpb24pe2lmKCFDSXMuaW5jbHVkZXMoQ0kpKUNJcy5wdXNoKENJKTt9fWVsc2UgaWYob3B0aW9uJiYhdGhpcy5zdW1tYXJ5T3B0aW9ucy5nZXQoc3RhdCkpe3RoaXMuc3VtbWFyeU9wdGlvbnMuc2V0KHN0YXQsdHJ1ZSk7fX19CmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHN1bW1hcnlPcHRpb25zKXtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKHN1bW1hcnlPcHRpb25zKSl7dGhpcy5zdW1tYXJ5T3B0aW9ucy5zZXQoa2V5LHZhbHVlKTt9fQpnZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUsb3B0X3JlZmVyZW5jZUhpc3RvZ3JhbSxvcHRfbXd1KXtpZihzdGF0TmFtZT09PSdhdmcnKXtpZih0eXBlb2YodGhpcy5hdmVyYWdlKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQsdGhpcy5hdmVyYWdlKTt9CmlmKHN0YXROYW1lPT09J3N0ZCcpe2lmKHR5cGVvZih0aGlzLnN0YW5kYXJkRGV2aWF0aW9uKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQsdGhpcy5zdGFuZGFyZERldmlhdGlvbik7fQppZihzdGF0TmFtZT09PSdnZW9tZXRyaWNNZWFuJyl7aWYodHlwZW9mKHRoaXMuZ2VvbWV0cmljTWVhbikhPT0nbnVtYmVyJylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpcy51bml0LHRoaXMuZ2VvbWV0cmljTWVhbik7fQppZihzdGF0TmFtZT09PSdtaW4nfHxzdGF0TmFtZT09PSdtYXgnfHxzdGF0TmFtZT09PSdzdW0nKXtpZih0aGlzLnJ1bm5pbmdfPT09dW5kZWZpbmVkKXt0aGlzLnJ1bm5pbmdfPW5ldyB0ci5iLm1hdGguUnVubmluZ1N0YXRpc3RpY3MoKTt9CmlmKHR5cGVvZih0aGlzLnJ1bm5pbmdfW3N0YXROYW1lXSkhPT0nbnVtYmVyJylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpcy51bml0LHRoaXMucnVubmluZ19bc3RhdE5hbWVdKTt9CmlmKHN0YXROYW1lPT09J25hbnMnKXtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHRoaXMubnVtTmFucyk7fQppZihzdGF0TmFtZT09PSdjb3VudCcpe3JldHVybiBuZXcgdHIuYi5TY2FsYXIodHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIsdGhpcy5udW1WYWx1ZXMpO30KaWYoc3RhdE5hbWUuc3Vic3RyKDAsNCk9PT0ncGN0Xycpe2lmKHRoaXMubnVtVmFsdWVzPT09MClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHBlcmNlbnQ9cGVyY2VudEZyb21TdHJpbmcoc3RhdE5hbWUuc3Vic3RyKDQpKTtjb25zdCBwZXJjZW50aWxlPXRoaXMuZ2V0QXBwcm94aW1hdGVQZXJjZW50aWxlKHBlcmNlbnQpO2lmKHR5cGVvZihwZXJjZW50aWxlKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQscGVyY2VudGlsZSk7fQppZihzdGF0TmFtZS5zdWJzdHIoMCwzKT09PSdjaV8nKXtjb25zdCBwZXJjZW50PXBlcmNlbnRGcm9tU3RyaW5nKHN0YXROYW1lLnN1YnN0cigzLDMpKTtjb25zdFtsb3dDSSxoaWdoQ0ldPXRoaXMucmVzYW1wbGVNZWFuXyhwZXJjZW50KTtpZihzdGF0TmFtZS5zdWJzdHIoNyk9PT0nbG93ZXInKXtpZih0eXBlb2YobG93Q0kpIT09J251bWJlcicpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRoaXMudW5pdCxsb3dDSSk7fWVsc2UgaWYoc3RhdE5hbWUuc3Vic3RyKDcpPT09J3VwcGVyJyl7aWYodHlwZW9mKGhpZ2hDSSkhPT0nbnVtYmVyJylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpcy51bml0LGhpZ2hDSSk7fQppZih0eXBlb2YoaGlnaENJKSE9PSdudW1iZXInfHx0eXBlb2YobG93Q0kpIT09J251bWJlcicpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gbmV3IHRyLmIuU2NhbGFyKHRoaXMudW5pdCxoaWdoQ0ktbG93Q0kpO30KaWYoc3RhdE5hbWUuc3Vic3RyKDAsNCk9PT0naXByXycpe2xldCBsb3dlcj1wZXJjZW50RnJvbVN0cmluZyhzdGF0TmFtZS5zdWJzdHIoNCwzKSk7bGV0IHVwcGVyPXBlcmNlbnRGcm9tU3RyaW5nKHN0YXROYW1lLnN1YnN0cig4KSk7aWYobG93ZXI+PXVwcGVyKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW50ZXItcGVyY2VudGlsZSByYW5nZTogJytzdGF0TmFtZSk7fQpsb3dlcj10aGlzLmdldEFwcHJveGltYXRlUGVyY2VudGlsZShsb3dlcik7dXBwZXI9dGhpcy5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUodXBwZXIpO2NvbnN0IGlwcj11cHBlci1sb3dlcjtpZih0eXBlb2YoaXByKSE9PSdudW1iZXInKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0aGlzLnVuaXQsaXByKTt9CmlmKCF0aGlzLmNhbkNvbXBhcmUob3B0X3JlZmVyZW5jZUhpc3RvZ3JhbSkpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGNvbXB1dGUgJytzdGF0TmFtZSsnIHdoZW4gaGlzdG9ncmFtcyBhcmUgbm90IGNvbXBhcmFibGUnKTt9CmNvbnN0IHN1ZmZpeD10ci5iLlVuaXQubmFtZVN1ZmZpeEZvckltcHJvdmVtZW50RGlyZWN0aW9uKHRoaXMudW5pdC5pbXByb3ZlbWVudERpcmVjdGlvbik7Y29uc3QgZGVsdGFJbmRleD1zdGF0TmFtZS5pbmRleE9mKERFTFRBKTtpZihkZWx0YUluZGV4Pj0wKXtjb25zdCBiYXNlU3RhdE5hbWU9c3RhdE5hbWUuc3Vic3RyKGRlbHRhSW5kZXgrMSk7Y29uc3QgdGhpc1N0YXQ9dGhpcy5nZXRTdGF0aXN0aWNTY2FsYXIoYmFzZVN0YXROYW1lKTtjb25zdCBvdGhlclN0YXQ9b3B0X3JlZmVyZW5jZUhpc3RvZ3JhbS5nZXRTdGF0aXN0aWNTY2FsYXIoYmFzZVN0YXROYW1lKTtjb25zdCBkZWx0YVZhbHVlPXRoaXNTdGF0LnZhbHVlLW90aGVyU3RhdC52YWx1ZTtpZihzdGF0TmFtZVswXT09PSclJyl7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lWydub3JtYWxpemVkUGVyY2VudGFnZURlbHRhJytzdWZmaXhdLGRlbHRhVmFsdWUvb3RoZXJTdGF0LnZhbHVlKTt9CnJldHVybiBuZXcgdHIuYi5TY2FsYXIodGhpc1N0YXQudW5pdC5jb3JyZXNwb25kaW5nRGVsdGFVbml0LGRlbHRhVmFsdWUpO30KaWYoc3RhdE5hbWU9PT1aX1NDT1JFX05BTUUpe3JldHVybiBuZXcgdHIuYi5TY2FsYXIodHIuYi5Vbml0LmJ5TmFtZVsnc2lnbWFEZWx0YScrc3VmZml4XSwodGhpcy5hdmVyYWdlLW9wdF9yZWZlcmVuY2VIaXN0b2dyYW0uYXZlcmFnZSkvb3B0X3JlZmVyZW5jZUhpc3RvZ3JhbS5zdGFuZGFyZERldmlhdGlvbik7fQpjb25zdCBtd3U9b3B0X213dXx8dHIuYi5tYXRoLlN0YXRpc3RpY3MubXd1KHRoaXMuc2FtcGxlVmFsdWVzLG9wdF9yZWZlcmVuY2VIaXN0b2dyYW0uc2FtcGxlVmFsdWVzKTtpZihzdGF0TmFtZT09PVBfVkFMVUVfTkFNRSl7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyLG13dS5wKTt9CmlmKHN0YXROYW1lPT09VV9TVEFUSVNUSUNfTkFNRSl7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcih0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyLG13dS5VKTt9CnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIHN0YXRpc3RpYyBuYW1lOiAnK3N0YXROYW1lKTt9CmdldCBzdGF0aXN0aWNzTmFtZXMoKXtjb25zdCBzdGF0aXN0aWNzTmFtZXM9bmV3IFNldCgpO2Zvcihjb25zdFtzdGF0TmFtZSxvcHRpb25db2YgdGhpcy5zdW1tYXJ5T3B0aW9ucyl7aWYoc3RhdE5hbWU9PT0ncGVyY2VudGlsZScpe2Zvcihjb25zdCBwY3RpbGUgb2Ygb3B0aW9uKXtzdGF0aXN0aWNzTmFtZXMuYWRkKCdwY3RfJyt0ci52LnBlcmNlbnRUb1N0cmluZyhwY3RpbGUpKTt9fWVsc2UgaWYoc3RhdE5hbWU9PT0naXBycycpe2Zvcihjb25zdCByYW5nZSBvZiBvcHRpb24pe3N0YXRpc3RpY3NOYW1lcy5hZGQoJ2lwcl8nK3RyLnYucGVyY2VudFRvU3RyaW5nKHJhbmdlLm1pbix0cnVlKSsnXycrdHIudi5wZXJjZW50VG9TdHJpbmcocmFuZ2UubWF4LHRydWUpKTt9fWVsc2UgaWYoc3RhdE5hbWU9PT0nY2knKXtmb3IoY29uc3QgQ0lwY3RpbGUgb2Ygb3B0aW9uKXtjb25zdCBDSXBjdFN0cj10ci52LnBlcmNlbnRUb1N0cmluZyhDSXBjdGlsZSk7c3RhdGlzdGljc05hbWVzLmFkZCgnY2lfJytDSXBjdFN0cisnX2xvd2VyJyk7c3RhdGlzdGljc05hbWVzLmFkZCgnY2lfJytDSXBjdFN0cisnX3VwcGVyJyk7c3RhdGlzdGljc05hbWVzLmFkZCgnY2lfJytDSXBjdFN0cik7fX1lbHNlIGlmKG9wdGlvbil7c3RhdGlzdGljc05hbWVzLmFkZChzdGF0TmFtZSk7fX0KcmV0dXJuIHN0YXRpc3RpY3NOYW1lczt9CmNhbkNvbXBhcmUob3RoZXIpe3JldHVybiBvdGhlciBpbnN0YW5jZW9mIEhpc3RvZ3JhbSYmdGhpcy51bml0PT09b3RoZXIudW5pdCYmdGhpcy5udW1WYWx1ZXM+MCYmb3RoZXIubnVtVmFsdWVzPjA7fQpnZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKHN0YXROYW1lLG9wdF9yZWZlcmVuY2VIaXN0KXtpZih0aGlzLmNhbkNvbXBhcmUob3B0X3JlZmVyZW5jZUhpc3QpKXJldHVybiBzdGF0TmFtZTtpZihzdGF0TmFtZT09PVpfU0NPUkVfTkFNRXx8c3RhdE5hbWU9PT1QX1ZBTFVFX05BTUV8fHN0YXROYW1lPT09VV9TVEFUSVNUSUNfTkFNRSl7cmV0dXJuJ2F2Zyc7fQpjb25zdCBkZWx0YUluZGV4PXN0YXROYW1lLmluZGV4T2YoREVMVEEpO2lmKGRlbHRhSW5kZXg8MClyZXR1cm4gc3RhdE5hbWU7cmV0dXJuIHN0YXROYW1lLnN1YnN0cihkZWx0YUluZGV4KzEpO30Kc3RhdGljIGdldERlbHRhU3RhdGlzdGljc05hbWVzKHN0YXROYW1lcyl7Y29uc3QgZGVsdGFOYW1lcz1bXTtmb3IoY29uc3Qgc3RhdE5hbWUgb2Ygc3RhdE5hbWVzKXtkZWx0YU5hbWVzLnB1c2goYCR7REVMVEF9JHtzdGF0TmFtZX1gKTtkZWx0YU5hbWVzLnB1c2goYCUke0RFTFRBfSR7c3RhdE5hbWV9YCk7fQpyZXR1cm4gZGVsdGFOYW1lcy5jb25jYXQoW1pfU0NPUkVfTkFNRSxQX1ZBTFVFX05BTUUsVV9TVEFUSVNUSUNfTkFNRV0pO30KZ2V0IHN0YXRpc3RpY3NTY2FsYXJzKCl7Y29uc3QgcmVzdWx0cz1uZXcgTWFwKCk7Zm9yKGNvbnN0IHN0YXROYW1lIG9mIHRoaXMuc3RhdGlzdGljc05hbWVzKXtjb25zdCBzY2FsYXI9dGhpcy5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUpO2lmKHNjYWxhcj09PXVuZGVmaW5lZCljb250aW51ZTtyZXN1bHRzLnNldChzdGF0TmFtZSxzY2FsYXIpO30KcmV0dXJuIHJlc3VsdHM7fQpnZXQgc2FtcGxlVmFsdWVzKCl7cmV0dXJuIHRoaXMuc2FtcGxlVmFsdWVzXzt9CmNsb25lKCl7Y29uc3QgYmluQm91bmRhcmllcz1IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmZyb21EaWN0KHRoaXMuYmluQm91bmRhcmllc0RpY3RfKTtjb25zdCBoaXN0PW5ldyBIaXN0b2dyYW0odGhpcy5uYW1lLHRoaXMudW5pdCxiaW5Cb3VuZGFyaWVzKTtmb3IoY29uc3Rbc3RhdCxvcHRpb25db2YgdGhpcy5zdW1tYXJ5T3B0aW9ucyl7aWYoc3RhdD09PSdwZXJjZW50aWxlJ3x8c3RhdD09PSdpcHJzJ3x8c3RhdD09PSdjaScpe2hpc3Quc3VtbWFyeU9wdGlvbnMuc2V0KHN0YXQsQXJyYXkuZnJvbShvcHRpb24pKTt9ZWxzZXtoaXN0LnN1bW1hcnlPcHRpb25zLnNldChzdGF0LG9wdGlvbik7fX0KaGlzdC5hZGRIaXN0b2dyYW0odGhpcyk7cmV0dXJuIGhpc3Q7fQpyZWJpbihuZXdCb3VuZGFyaWVzKXtjb25zdCByZWJpbm5lZD1uZXcgdHIudi5IaXN0b2dyYW0odGhpcy5uYW1lLHRoaXMudW5pdCxuZXdCb3VuZGFyaWVzKTtyZWJpbm5lZC5kZXNjcmlwdGlvbj10aGlzLmRlc2NyaXB0aW9uO2Zvcihjb25zdCBzYW1wbGUgb2YgdGhpcy5zYW1wbGVWYWx1ZXMpe3JlYmlubmVkLmFkZFNhbXBsZShzYW1wbGUpO30KcmViaW5uZWQucnVubmluZ189dGhpcy5ydW5uaW5nXztmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljXW9mIHRoaXMuZGlhZ25vc3RpY3Mpe3JlYmlubmVkLmRpYWdub3N0aWNzLnNldChuYW1lLGRpYWdub3N0aWMpO30KZm9yKGNvbnN0W3N0YXQsb3B0aW9uXW9mIHRoaXMuc3VtbWFyeU9wdGlvbnMpe2lmKHN0YXQ9PT0ncGVyY2VudGlsZSd8fHN0YXQ9PT0nY2knKXtyZWJpbm5lZC5zdW1tYXJ5T3B0aW9ucy5zZXQoc3RhdCxBcnJheS5mcm9tKG9wdGlvbikpO31lbHNle3JlYmlubmVkLnN1bW1hcnlPcHRpb25zLnNldChzdGF0LG9wdGlvbik7fX0KcmV0dXJuIHJlYmlubmVkO30Kc2VyaWFsaXplKHNlcmlhbGl6ZXIpe2xldCBuYW5CaW49dGhpcy5udW1OYW5zO2lmKHRoaXMubmFuRGlhZ25vc3RpY01hcHMubGVuZ3RoKXtuYW5CaW49W25hbkJpbiwuLi50aGlzLm5hbkRpYWdub3N0aWNNYXBzLm1hcChkbT0+W3VuZGVmaW5lZCwuLi5kbS5zZXJpYWxpemUoc2VyaWFsaXplcildKV07fQp0aGlzLmRpYWdub3N0aWNzLnNldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RBVElTVElDU19OQU1FUyxuZXcgdHIudi5kLkdlbmVyaWNTZXQoWy4uLnRoaXMuc3RhdGlzdGljc05hbWVzXS5zb3J0KCkpKTt0aGlzLmRpYWdub3N0aWNzLnNldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuREVTQ1JJUFRJT04sbmV3IHRyLnYuZC5HZW5lcmljU2V0KFt0aGlzLmRlc2NyaXB0aW9uXS5zb3J0KCkpKTtyZXR1cm5bc2VyaWFsaXplci5nZXRPckFsbG9jYXRlSWQodGhpcy5uYW1lKSx0aGlzLnVuaXQuYXNKU09OMigpLHNlcmlhbGl6ZXIuZ2V0T3JBbGxvY2F0ZUlkKHRoaXMuYmluQm91bmRhcmllc0RpY3RfKSx0aGlzLmRpYWdub3N0aWNzLnNlcmlhbGl6ZShzZXJpYWxpemVyKSx0aGlzLnJ1bm5pbmdfP3RoaXMucnVubmluZ18uYXNEaWN0KCk6MCx0aGlzLnNlcmlhbGl6ZUJpbnNfKHNlcmlhbGl6ZXIpLG5hbkJpbixdO30KYXNEaWN0KCl7Y29uc3QgZGljdD17fTtkaWN0Lm5hbWU9dGhpcy5uYW1lO2RpY3QudW5pdD10aGlzLnVuaXQuYXNKU09OKCk7aWYodGhpcy5iaW5Cb3VuZGFyaWVzRGljdF8hPT11bmRlZmluZWQpe2RpY3QuYmluQm91bmRhcmllcz10aGlzLmJpbkJvdW5kYXJpZXNEaWN0Xzt9CmlmKHRoaXMuZGVzY3JpcHRpb24pe2RpY3QuZGVzY3JpcHRpb249dGhpcy5kZXNjcmlwdGlvbjt9CmlmKHRoaXMuZGlhZ25vc3RpY3Muc2l6ZSl7ZGljdC5kaWFnbm9zdGljcz10aGlzLmRpYWdub3N0aWNzLmFzRGljdCgpO30KaWYodGhpcy5tYXhOdW1TYW1wbGVWYWx1ZXMhPT10aGlzLmRlZmF1bHRNYXhOdW1TYW1wbGVWYWx1ZXNfKXtkaWN0Lm1heE51bVNhbXBsZVZhbHVlcz10aGlzLm1heE51bVNhbXBsZVZhbHVlczt9CmlmKHRoaXMubnVtTmFucyl7ZGljdC5udW1OYW5zPXRoaXMubnVtTmFuczt9CmlmKHRoaXMubmFuRGlhZ25vc3RpY01hcHMubGVuZ3RoKXtkaWN0Lm5hbkRpYWdub3N0aWNzPXRoaXMubmFuRGlhZ25vc3RpY01hcHMubWFwKGRtPT5kbS5hc0RpY3QoKSk7fQppZih0aGlzLm51bVZhbHVlcyl7ZGljdC5zYW1wbGVWYWx1ZXM9dGhpcy5zYW1wbGVWYWx1ZXMuc2xpY2UoKTt0aGlzLnJ1bm5pbmcudHJ1bmNhdGUodGhpcy51bml0KTtkaWN0LnJ1bm5pbmc9dGhpcy5ydW5uaW5nXy5hc0RpY3QoKTtkaWN0LmFsbEJpbnM9dGhpcy5hbGxCaW5zQXNEaWN0XygpO30KY29uc3Qgc3VtbWFyeU9wdGlvbnM9e307bGV0IGFueU92ZXJyaWRkZW5TdW1tYXJ5T3B0aW9ucz1mYWxzZTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiB0aGlzLnN1bW1hcnlPcHRpb25zKXtsZXQgb3B0aW9uO2lmKG5hbWU9PT0ncGVyY2VudGlsZScpe2lmKHZhbHVlLmxlbmd0aD09PTApY29udGludWU7b3B0aW9uPUFycmF5LmZyb20odmFsdWUpO31lbHNlIGlmKG5hbWU9PT0naXBycycpe2lmKHZhbHVlLmxlbmd0aD09PTApY29udGludWU7b3B0aW9uPXZhbHVlLm1hcChyPT5bci5taW4sci5tYXhdKTt9ZWxzZSBpZihuYW1lPT09J2NpJyl7aWYodmFsdWUubGVuZ3RoPT09MCljb250aW51ZTtvcHRpb249QXJyYXkuZnJvbSh2YWx1ZSk7fWVsc2UgaWYodmFsdWU9PT1ERUZBVUxUX1NVTU1BUllfT1BUSU9OUy5nZXQobmFtZSkpe2NvbnRpbnVlO31lbHNle29wdGlvbj12YWx1ZTt9CnN1bW1hcnlPcHRpb25zW25hbWVdPW9wdGlvbjthbnlPdmVycmlkZGVuU3VtbWFyeU9wdGlvbnM9dHJ1ZTt9CmlmKGFueU92ZXJyaWRkZW5TdW1tYXJ5T3B0aW9ucyl7ZGljdC5zdW1tYXJ5T3B0aW9ucz1zdW1tYXJ5T3B0aW9uczt9CnJldHVybiBkaWN0O30Kc2VyaWFsaXplQmluc18oc2VyaWFsaXplcil7Y29uc3QgbnVtQmlucz10aGlzLmFsbEJpbnMubGVuZ3RoO2xldCBlbXB0eUJpbnM9MDtmb3IobGV0IGk9MDtpPG51bUJpbnM7KytpKXtpZih0aGlzLmFsbEJpbnNbaV0uY291bnQ9PT0wKXsrK2VtcHR5Qmluczt9fQppZihlbXB0eUJpbnM9PT1udW1CaW5zKXtyZXR1cm4gMDt9CmlmKGVtcHR5Qmlucz4obnVtQmlucy8yKSl7Y29uc3QgYWxsQmluc0RpY3Q9e307Zm9yKGxldCBpPTA7aTxudW1CaW5zOysraSl7Y29uc3QgYmluPXRoaXMuYWxsQmluc1tpXTtpZihiaW4uY291bnQ+MCl7YWxsQmluc0RpY3RbaV09YmluLnNlcmlhbGl6ZShzZXJpYWxpemVyKTt9fQpyZXR1cm4gYWxsQmluc0RpY3Q7fQpjb25zdCBhbGxCaW5zQXJyYXk9W107Zm9yKGxldCBpPTA7aTxudW1CaW5zOysraSl7YWxsQmluc0FycmF5LnB1c2godGhpcy5hbGxCaW5zW2ldLnNlcmlhbGl6ZShzZXJpYWxpemVyKSk7fQpyZXR1cm4gYWxsQmluc0FycmF5O30KYWxsQmluc0FzRGljdF8oKXtjb25zdCBudW1CaW5zPXRoaXMuYWxsQmlucy5sZW5ndGg7bGV0IGVtcHR5Qmlucz0wO2ZvcihsZXQgaT0wO2k8bnVtQmluczsrK2kpe2lmKHRoaXMuYWxsQmluc1tpXS5jb3VudD09PTApeysrZW1wdHlCaW5zO319CmlmKGVtcHR5Qmlucz09PW51bUJpbnMpe3JldHVybiB1bmRlZmluZWQ7fQppZihlbXB0eUJpbnM+KG51bUJpbnMvMikpe2NvbnN0IGFsbEJpbnNEaWN0PXt9O2ZvcihsZXQgaT0wO2k8bnVtQmluczsrK2kpe2NvbnN0IGJpbj10aGlzLmFsbEJpbnNbaV07aWYoYmluLmNvdW50PjApe2FsbEJpbnNEaWN0W2ldPWJpbi5hc0RpY3QoKTt9fQpyZXR1cm4gYWxsQmluc0RpY3Q7fQpjb25zdCBhbGxCaW5zQXJyYXk9W107Zm9yKGxldCBpPTA7aTxudW1CaW5zOysraSl7YWxsQmluc0FycmF5LnB1c2godGhpcy5hbGxCaW5zW2ldLmFzRGljdCgpKTt9CnJldHVybiBhbGxCaW5zQXJyYXk7fQpnZXQgZGVmYXVsdE1heE51bVNhbXBsZVZhbHVlc18oKXtyZXR1cm4gREVGQVVMVF9TQU1QTEVfVkFMVUVTX1BFUl9CSU4qTWF0aC5tYXgodGhpcy5hbGxCaW5zLmxlbmd0aCxERUZBVUxUX1JFQklOTkVEX0NPVU5UKTt9fQpIaXN0b2dyYW0uQVZFUkFHRV9PTkxZX1NVTU1BUllfT1BUSU9OUz17Y291bnQ6ZmFsc2UsbWF4OmZhbHNlLG1pbjpmYWxzZSxzdGQ6ZmFsc2Usc3VtOmZhbHNlLH07Y29uc3QgSElTVE9HUkFNX0JJTl9CT1VOREFSSUVTX0NBQ0hFPW5ldyBNYXAoKTtjbGFzcyBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVze3N0YXRpYyBjcmVhdGVMaW5lYXIobWluLG1heCxudW1CaW5zKXtyZXR1cm4gbmV3IEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMobWluKS5hZGRMaW5lYXJCaW5zKG1heCxudW1CaW5zKTt9CnN0YXRpYyBjcmVhdGVFeHBvbmVudGlhbChtaW4sbWF4LG51bUJpbnMpe3JldHVybiBuZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhtaW4pLmFkZEV4cG9uZW50aWFsQmlucyhtYXgsbnVtQmlucyk7fQpzdGF0aWMgY3JlYXRlV2l0aEJvdW5kYXJpZXMoYmluQm91bmRhcmllcyl7Y29uc3QgYnVpbGRlcj1uZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhiaW5Cb3VuZGFyaWVzWzBdKTtmb3IoY29uc3QgYm91bmRhcnkgb2YgYmluQm91bmRhcmllcy5zbGljZSgxKSl7YnVpbGRlci5hZGRCaW5Cb3VuZGFyeShib3VuZGFyeSk7fQpyZXR1cm4gYnVpbGRlcjt9CmNvbnN0cnVjdG9yKG1pbkJpbkJvdW5kYXJ5KXt0aGlzLmJ1aWxkZXJfPVttaW5CaW5Cb3VuZGFyeV07dGhpcy5yYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMucmFuZ2VfLmFkZFZhbHVlKG1pbkJpbkJvdW5kYXJ5KTt0aGlzLmJpblJhbmdlc189dW5kZWZpbmVkO3RoaXMuYmluc189dW5kZWZpbmVkO30KZ2V0IHJhbmdlKCl7cmV0dXJuIHRoaXMucmFuZ2VfO30KYXNEaWN0KCl7aWYodGhpcy5idWlsZGVyXy5sZW5ndGg9PT0xJiZ0aGlzLmJ1aWxkZXJfWzBdPT09TnVtYmVyLk1BWF9WQUxVRSl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybiB0aGlzLmJ1aWxkZXJfO30KcHVzaEJ1aWxkZXJTbGljZV8oc2xpY2Upe3RoaXMuYnVpbGRlcl8ucHVzaChzbGljZSk7dGhpcy5idWlsZGVyXz10aGlzLmJ1aWxkZXJfLnNsaWNlKCk7fQpzdGF0aWMgZnJvbURpY3QoZGljdCl7aWYoZGljdD09PXVuZGVmaW5lZCl7cmV0dXJuIEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuU0lOR1VMQVI7fQpjb25zdCBjYWNoZUtleT1KU09OLnN0cmluZ2lmeShkaWN0KTtpZihISVNUT0dSQU1fQklOX0JPVU5EQVJJRVNfQ0FDSEUuaGFzKGNhY2hlS2V5KSl7cmV0dXJuIEhJU1RPR1JBTV9CSU5fQk9VTkRBUklFU19DQUNIRS5nZXQoY2FjaGVLZXkpO30KY29uc3QgYmluQm91bmRhcmllcz1uZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcyhkaWN0WzBdKTtmb3IoY29uc3Qgc2xpY2Ugb2YgZGljdC5zbGljZSgxKSl7aWYoIShzbGljZSBpbnN0YW5jZW9mIEFycmF5KSl7YmluQm91bmRhcmllcy5hZGRCaW5Cb3VuZGFyeShzbGljZSk7Y29udGludWU7fQpzd2l0Y2goc2xpY2VbMF0pe2Nhc2UgSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkxJTkVBUjpiaW5Cb3VuZGFyaWVzLmFkZExpbmVhckJpbnMoc2xpY2VbMV0sc2xpY2VbMl0pO2JyZWFrO2Nhc2UgSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkVYUE9ORU5USUFMOmJpbkJvdW5kYXJpZXMuYWRkRXhwb25lbnRpYWxCaW5zKHNsaWNlWzFdLHNsaWNlWzJdKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5yZWNvZ25pemVkIEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMgc2xpY2UgdHlwZScpO319CkhJU1RPR1JBTV9CSU5fQk9VTkRBUklFU19DQUNIRS5zZXQoY2FjaGVLZXksYmluQm91bmRhcmllcyk7cmV0dXJuIGJpbkJvdW5kYXJpZXM7fQpnZXQgYmlucygpe2lmKHRoaXMuYmluc189PT11bmRlZmluZWQpe3RoaXMuYnVpbGRCaW5zXygpO30KcmV0dXJuIHRoaXMuYmluc187fQpidWlsZEJpbnNfKCl7dGhpcy5iaW5zXz10aGlzLmJpblJhbmdlcy5tYXAocj0+bmV3IEhpc3RvZ3JhbUJpbihyKSk7fQpnZXQgYmluUmFuZ2VzKCl7aWYodGhpcy5iaW5SYW5nZXNfPT09dW5kZWZpbmVkKXt0aGlzLmJ1aWxkQmluUmFuZ2VzXygpO30KcmV0dXJuIHRoaXMuYmluUmFuZ2VzXzt9CmJ1aWxkQmluUmFuZ2VzXygpe2lmKHR5cGVvZiB0aGlzLmJ1aWxkZXJfWzBdIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBzdGFydCBvZiBidWlsZGVyXycpO30KdGhpcy5iaW5SYW5nZXNfPVtdO2xldCBwcmV2Qm91bmRhcnk9dGhpcy5idWlsZGVyX1swXTtpZihwcmV2Qm91bmRhcnk+LU51bWJlci5NQVhfVkFMVUUpe3RoaXMuYmluUmFuZ2VzXy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgtTnVtYmVyLk1BWF9WQUxVRSxwcmV2Qm91bmRhcnkpKTt9CmZvcihjb25zdCBzbGljZSBvZiB0aGlzLmJ1aWxkZXJfLnNsaWNlKDEpKXtpZighKHNsaWNlIGluc3RhbmNlb2YgQXJyYXkpKXt0aGlzLmJpblJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocHJldkJvdW5kYXJ5LHNsaWNlKSk7cHJldkJvdW5kYXJ5PXNsaWNlO2NvbnRpbnVlO30KY29uc3QgbmV4dE1heEJpbkJvdW5kYXJ5PXNsaWNlWzFdO2NvbnN0IGJpbkNvdW50PXNsaWNlWzJdO2NvbnN0IHNsaWNlTWluQmluQm91bmRhcnk9cHJldkJvdW5kYXJ5O3N3aXRjaChzbGljZVswXSl7Y2FzZSBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNMSUNFX1RZUEUuTElORUFSOntjb25zdCBiaW5XaWR0aD0obmV4dE1heEJpbkJvdW5kYXJ5LXByZXZCb3VuZGFyeSkvYmluQ291bnQ7Zm9yKGxldCBpPTE7aTxiaW5Db3VudDtpKyspe2NvbnN0IGJvdW5kYXJ5PXNsaWNlTWluQmluQm91bmRhcnkraSpiaW5XaWR0aDt0aGlzLmJpblJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocHJldkJvdW5kYXJ5LGJvdW5kYXJ5KSk7cHJldkJvdW5kYXJ5PWJvdW5kYXJ5O30KYnJlYWs7fQpjYXNlIEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuU0xJQ0VfVFlQRS5FWFBPTkVOVElBTDp7Y29uc3QgYmluRXhwb25lbnRXaWR0aD1NYXRoLmxvZyhuZXh0TWF4QmluQm91bmRhcnkvcHJldkJvdW5kYXJ5KS9iaW5Db3VudDtmb3IobGV0IGk9MTtpPGJpbkNvdW50O2krKyl7Y29uc3QgYm91bmRhcnk9c2xpY2VNaW5CaW5Cb3VuZGFyeSpNYXRoLmV4cChpKmJpbkV4cG9uZW50V2lkdGgpO3RoaXMuYmluUmFuZ2VzXy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwcmV2Qm91bmRhcnksYm91bmRhcnkpKTtwcmV2Qm91bmRhcnk9Ym91bmRhcnk7fQpicmVhazt9CmRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgSGlzdG9ncmFtQmluQm91bmRhcmllcyBzbGljZSB0eXBlJyk7fQp0aGlzLmJpblJhbmdlc18ucHVzaCh0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UocHJldkJvdW5kYXJ5LG5leHRNYXhCaW5Cb3VuZGFyeSkpO3ByZXZCb3VuZGFyeT1uZXh0TWF4QmluQm91bmRhcnk7fQppZihwcmV2Qm91bmRhcnk8TnVtYmVyLk1BWF9WQUxVRSl7dGhpcy5iaW5SYW5nZXNfLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHByZXZCb3VuZGFyeSxOdW1iZXIuTUFYX1ZBTFVFKSk7fX0KYWRkQmluQm91bmRhcnkobmV4dE1heEJpbkJvdW5kYXJ5KXtpZihuZXh0TWF4QmluQm91bmRhcnk8PXRoaXMucmFuZ2UubWF4KXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBhZGRlZCBtYXggYmluIGJvdW5kYXJ5IG11c3QgYmUgbGFyZ2VyIHRoYW4gJysndGhlIGN1cnJlbnQgbWF4IGJvdW5kYXJ5Jyk7fQp0aGlzLmJpblJhbmdlc189dW5kZWZpbmVkO3RoaXMuYmluc189dW5kZWZpbmVkO3RoaXMucHVzaEJ1aWxkZXJTbGljZV8obmV4dE1heEJpbkJvdW5kYXJ5KTt0aGlzLnJhbmdlLmFkZFZhbHVlKG5leHRNYXhCaW5Cb3VuZGFyeSk7cmV0dXJuIHRoaXM7fQphZGRMaW5lYXJCaW5zKG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudCl7aWYoYmluQ291bnQ8PTApe3Rocm93IG5ldyBFcnJvcignQmluIGNvdW50IG11c3QgYmUgcG9zaXRpdmUnKTt9CmlmKG5leHRNYXhCaW5Cb3VuZGFyeTw9dGhpcy5yYW5nZS5tYXgpe3Rocm93IG5ldyBFcnJvcignVGhlIG5ldyBtYXggYmluIGJvdW5kYXJ5IG11c3QgYmUgZ3JlYXRlciB0aGFuICcrJ3RoZSBwcmV2aW91cyBtYXggYmluIGJvdW5kYXJ5Jyk7fQp0aGlzLmJpblJhbmdlc189dW5kZWZpbmVkO3RoaXMuYmluc189dW5kZWZpbmVkO3RoaXMucHVzaEJ1aWxkZXJTbGljZV8oW0hpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuU0xJQ0VfVFlQRS5MSU5FQVIsbmV4dE1heEJpbkJvdW5kYXJ5LGJpbkNvdW50XSk7dGhpcy5yYW5nZS5hZGRWYWx1ZShuZXh0TWF4QmluQm91bmRhcnkpO3JldHVybiB0aGlzO30KYWRkRXhwb25lbnRpYWxCaW5zKG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudCl7aWYoYmluQ291bnQ8PTApe3Rocm93IG5ldyBFcnJvcignQmluIGNvdW50IG11c3QgYmUgcG9zaXRpdmUnKTt9CmlmKHRoaXMucmFuZ2UubWF4PD0wKXt0aHJvdyBuZXcgRXJyb3IoJ0N1cnJlbnQgbWF4IGJpbiBib3VuZGFyeSBtdXN0IGJlIHBvc2l0aXZlJyk7fQppZih0aGlzLnJhbmdlLm1heD49bmV4dE1heEJpbkJvdW5kYXJ5KXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBsYXN0IGFkZGVkIG1heCBib3VuZGFyeSBtdXN0IGJlIGdyZWF0ZXIgdGhhbiAnKyd0aGUgY3VycmVudCBtYXggYm91bmRhcnkgYm91bmRhcnknKTt9CnRoaXMuYmluUmFuZ2VzXz11bmRlZmluZWQ7dGhpcy5iaW5zXz11bmRlZmluZWQ7dGhpcy5wdXNoQnVpbGRlclNsaWNlXyhbSGlzdG9ncmFtQmluQm91bmRhcmllcy5TTElDRV9UWVBFLkVYUE9ORU5USUFMLG5leHRNYXhCaW5Cb3VuZGFyeSxiaW5Db3VudF0pO3RoaXMucmFuZ2UuYWRkVmFsdWUobmV4dE1heEJpbkJvdW5kYXJ5KTtyZXR1cm4gdGhpczt9fQpIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNMSUNFX1RZUEU9e0xJTkVBUjowLEVYUE9ORU5USUFMOjEsfTtIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLlNJTkdVTEFSPW5ldyBIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzKE51bWJlci5NQVhfVkFMVUUpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxZTYsMWUyKSk7REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULnNldCh0ci5iLlVuaXQuYnlOYW1lLnRpbWVJbk1zQXV0b0Zvcm1hdC51bml0TmFtZSxuZXcgSGlzdG9ncmFtQmluQm91bmRhcmllcygwKS5hZGRCaW5Cb3VuZGFyeSgxKS5hZGRFeHBvbmVudGlhbEJpbnMoMWUzLDMpLmFkZEJpbkJvdW5kYXJ5KHRyLmIuY29udmVydFVuaXQoMix0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KHRyLmIuY29udmVydFVuaXQoNSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KHRyLmIuY29udmVydFVuaXQoMTAsdHIuYi5Vbml0U2NhbGUuVElNRS5TRUMsdHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMpKS5hZGRCaW5Cb3VuZGFyeSh0ci5iLmNvbnZlcnRVbml0KDMwLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkodHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLk1JTlVURS52YWx1ZSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KDIqdHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLk1JTlVURS52YWx1ZSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KDUqdHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLk1JTlVURS52YWx1ZSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KDEwKnRyLmIuY29udmVydFVuaXQodHIuYi5Vbml0U2NhbGUuVElNRS5NSU5VVEUudmFsdWUsdHIuYi5Vbml0U2NhbGUuVElNRS5TRUMsdHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMpKS5hZGRCaW5Cb3VuZGFyeSgzMCp0ci5iLmNvbnZlcnRVbml0KHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlOVVRFLnZhbHVlLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkodHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLkhPVVIudmFsdWUsdHIuYi5Vbml0U2NhbGUuVElNRS5TRUMsdHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMpKS5hZGRCaW5Cb3VuZGFyeSgyKnRyLmIuY29udmVydFVuaXQodHIuYi5Vbml0U2NhbGUuVElNRS5IT1VSLnZhbHVlLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkoNip0ci5iLmNvbnZlcnRVbml0KHRyLmIuVW5pdFNjYWxlLlRJTUUuSE9VUi52YWx1ZSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KDEyKnRyLmIuY29udmVydFVuaXQodHIuYi5Vbml0U2NhbGUuVElNRS5IT1VSLnZhbHVlLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkodHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLkRBWS52YWx1ZSx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQykpLmFkZEJpbkJvdW5kYXJ5KHRyLmIuY29udmVydFVuaXQodHIuYi5Vbml0U2NhbGUuVElNRS5XRUVLLnZhbHVlLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkodHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLk1PTlRILnZhbHVlLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuTUlMTElfU0VDKSkuYWRkQmluQm91bmRhcnkodHIuYi5jb252ZXJ0VW5pdCh0ci5iLlVuaXRTY2FsZS5USU1FLllFQVIudmFsdWUsdHIuYi5Vbml0U2NhbGUuVElNRS5TRUMsdHIuYi5Vbml0U2NhbGUuVElNRS5NSUxMSV9TRUMpKSk7REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULnNldCh0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwxZTEwLDFlMykpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZS51bml0TmFtZSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDEuMCwyMCkpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcy51bml0TmFtZSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsMWUxMiwxZTIpKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUuZW5lcmd5SW5Kb3VsZXMudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxZS0zLDFlMyw1MCkpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS5wb3dlckluV2F0dHMudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxZS0zLDEsNTApKTtERUZBVUxUX0JPVU5EQVJJRVNfRk9SX1VOSVQuc2V0KHRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXIudW5pdE5hbWUsSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxZS0zLDFlMyw1MCkpO0RFRkFVTFRfQk9VTkRBUklFU19GT1JfVU5JVC5zZXQodHIuYi5Vbml0LmJ5TmFtZS5jb3VudC51bml0TmFtZSxIaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsMWUzLDIwKSk7REVGQVVMVF9CT1VOREFSSUVTX0ZPUl9VTklULnNldCh0ci5iLlVuaXQuYnlOYW1lLnNpZ21hLnVuaXROYW1lLEhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKC01LDUsNTApKTtyZXR1cm57REVGQVVMVF9SRUJJTk5FRF9DT1VOVCxERUxUQSxIaXN0b2dyYW0sSGlzdG9ncmFtQmluQm91bmRhcmllcyxQX1ZBTFVFX05BTUUsVV9TVEFUSVNUSUNfTkFNRSxaX1NDT1JFX05BTUUscGVyY2VudEZyb21TdHJpbmcscGVyY2VudFRvU3RyaW5nLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLXNjYWxhci1jb250ZXh0LWNvbnRyb2xsZXInLGNyZWF0ZWQoKXt0aGlzLmhvc3RfPXVuZGVmaW5lZDt0aGlzLmdyb3VwVG9Db250ZXh0Xz1uZXcgTWFwKCk7dGhpcy5kaXJ0eUdyb3Vwc189bmV3IFNldCgpO30sYXR0YWNoZWQoKXtpZih0aGlzLmhvc3RfKXt0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhciBjb250ZXh0IGNvbnRyb2xsZXIgaXMgYWxyZWFkeSBhdHRhY2hlZCB0byBhIGhvc3QnKTt9CmNvbnN0IGhvc3Q9ZmluZFBhcmVudE9ySG9zdCh0aGlzKTtpZihob3N0Ll9fc2NhbGFyQ29udGV4dENvbnRyb2xsZXIpe3Rocm93IG5ldyBFcnJvcignTXVsdGlwbGUgc2NhbGFyIGNvbnRleHQgY29udHJvbGxlcnMgYXR0YWNoZWQgdG8gdGhpcyBob3N0Jyk7fQpob3N0Ll9fc2NhbGFyQ29udGV4dENvbnRyb2xsZXI9dGhpczt0aGlzLmhvc3RfPWhvc3Q7fSxkZXRhY2hlZCgpe2lmKCF0aGlzLmhvc3RfKXt0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhciBjb250ZXh0IGNvbnRyb2xsZXIgaXMgbm90IGF0dGFjaGVkIHRvIGEgaG9zdCcpO30KaWYodGhpcy5ob3N0Xy5fX3NjYWxhckNvbnRleHRDb250cm9sbGVyIT09dGhpcyl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgY29udGV4dCBjb250cm9sbGVyIGlzIG5vdCBhdHRhY2hlZCB0byBpdHMgaG9zdCcpO30KZGVsZXRlIHRoaXMuaG9zdF8uX19zY2FsYXJDb250ZXh0Q29udHJvbGxlcjt0aGlzLmhvc3RfPXVuZGVmaW5lZDt9LGdldENvbnRleHQoZ3JvdXApe3JldHVybiB0aGlzLmdyb3VwVG9Db250ZXh0Xy5nZXQoZ3JvdXApO30sb25TY2FsYXJTcGFuQWRkZWQoZ3JvdXAsc3Bhbil7bGV0IGNvbnRleHQ9dGhpcy5ncm91cFRvQ29udGV4dF8uZ2V0KGdyb3VwKTtpZihjb250ZXh0PT09dW5kZWZpbmVkKXtjb250ZXh0PXtzcGFuczpuZXcgU2V0KCkscmFuZ2U6bmV3IHRyLmIubWF0aC5SYW5nZSgpfTt0aGlzLmdyb3VwVG9Db250ZXh0Xy5zZXQoZ3JvdXAsY29udGV4dCk7fQppZihjb250ZXh0LnNwYW5zLmhhcyhzcGFuKSl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgc3BhbiBhbHJlYWR5IHJlZ2lzdGVyZWQgd2l0aCBncm91cDogJytncm91cCk7fQpjb250ZXh0LnNwYW5zLmFkZChzcGFuKTt0aGlzLm1hcmtHcm91cERpcnR5QW5kU2NoZWR1bGVVcGRhdGVfKGdyb3VwKTt9LG9uU2NhbGFyU3BhblJlbW92ZWQoZ3JvdXAsc3Bhbil7Y29uc3QgY29udGV4dD10aGlzLmdyb3VwVG9Db250ZXh0Xy5nZXQoZ3JvdXApO2lmKCFjb250ZXh0LnNwYW5zLmhhcyhzcGFuKSl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgc3BhbiBub3QgcmVnaXN0ZXJlZCB3aXRoIGdyb3VwOiAnK2dyb3VwKTt9CmNvbnRleHQuc3BhbnMuZGVsZXRlKHNwYW4pO3RoaXMubWFya0dyb3VwRGlydHlBbmRTY2hlZHVsZVVwZGF0ZV8oZ3JvdXApO30sb25TY2FsYXJTcGFuVXBkYXRlZChncm91cCxzcGFuKXtjb25zdCBjb250ZXh0PXRoaXMuZ3JvdXBUb0NvbnRleHRfLmdldChncm91cCk7aWYoIWNvbnRleHQuc3BhbnMuaGFzKHNwYW4pKXt0aHJvdyBuZXcgRXJyb3IoJ1NjYWxhciBzcGFuIG5vdCByZWdpc3RlcmVkIHdpdGggZ3JvdXA6ICcrZ3JvdXApO30KdGhpcy5tYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCk7fSxtYXJrR3JvdXBEaXJ0eUFuZFNjaGVkdWxlVXBkYXRlXyhncm91cCl7Y29uc3QgYWxyZWFkeURpcnR5PXRoaXMuZGlydHlHcm91cHNfLnNpemU+MDt0aGlzLmRpcnR5R3JvdXBzXy5hZGQoZ3JvdXApO2lmKCFhbHJlYWR5RGlydHkpe3RyLmIucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5UaGlzRnJhbWVJZlBvc3NpYmxlKHRoaXMudXBkYXRlQ29udGV4dCx0aGlzKTt9fSx1cGRhdGVDb250ZXh0KCl7Y29uc3QgZ3JvdXBzPXRoaXMuZGlydHlHcm91cHNfO2lmKGdyb3Vwcy5zaXplPT09MClyZXR1cm47dGhpcy5kaXJ0eUdyb3Vwc189bmV3IFNldCgpO2Zvcihjb25zdCBncm91cCBvZiBncm91cHMpe3RoaXMudXBkYXRlR3JvdXBfKGdyb3VwKTt9CmNvbnN0IGV2ZW50PW5ldyB0ci5iLkV2ZW50KCdjb250ZXh0LXVwZGF0ZWQnKTtldmVudC5ncm91cHM9Z3JvdXBzO3RoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7fSx1cGRhdGVHcm91cF8oZ3JvdXApe2NvbnN0IGNvbnRleHQ9dGhpcy5ncm91cFRvQ29udGV4dF8uZ2V0KGdyb3VwKTtpZihjb250ZXh0LnNwYW5zLnNpemU9PT0wKXt0aGlzLmdyb3VwVG9Db250ZXh0Xy5kZWxldGUoZ3JvdXApO3JldHVybjt9CmNvbnRleHQucmFuZ2UucmVzZXQoKTtmb3IoY29uc3Qgc3BhbiBvZiBjb250ZXh0LnNwYW5zKXtjb250ZXh0LnJhbmdlLmFkZFZhbHVlKHNwYW4udmFsdWUpO319fSk7ZnVuY3Rpb24gZ2V0U2NhbGFyQ29udGV4dENvbnRyb2xsZXJGb3JFbGVtZW50KGVsZW1lbnQpe3doaWxlKGVsZW1lbnQpe2lmKGVsZW1lbnQuX19zY2FsYXJDb250ZXh0Q29udHJvbGxlcil7cmV0dXJuIGVsZW1lbnQuX19zY2FsYXJDb250ZXh0Q29udHJvbGxlcjt9CmVsZW1lbnQ9ZmluZFBhcmVudE9ySG9zdChlbGVtZW50KTt9CnJldHVybiB1bmRlZmluZWQ7fQpmdW5jdGlvbiBmaW5kUGFyZW50T3JIb3N0KG5vZGUpe2lmKG5vZGUucGFyZW50RWxlbWVudCl7cmV0dXJuIG5vZGUucGFyZW50RWxlbWVudDt9CndoaWxlKFBvbHltZXIuZG9tKG5vZGUpLnBhcmVudE5vZGUpe25vZGU9UG9seW1lci5kb20obm9kZSkucGFyZW50Tm9kZTt9CnJldHVybiBub2RlLmhvc3Q7fQpyZXR1cm57Z2V0U2NhbGFyQ29udGV4dENvbnRyb2xsZXJGb3JFbGVtZW50LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGNyZWF0ZVNjYWxhclNwYW4odmFsdWUsb3B0X2NvbmZpZyl7aWYodmFsdWU9PT11bmRlZmluZWQpcmV0dXJuJyc7Y29uc3QgY29uZmlnPW9wdF9jb25maWd8fHt9O2NvbnN0IG93bmVyRG9jdW1lbnQ9Y29uZmlnLm93bmVyRG9jdW1lbnR8fGRvY3VtZW50O2NvbnN0IHNwYW49dW53cmFwKG93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktc2NhbGFyLXNwYW4nKTtsZXQgbnVtZXJpY1ZhbHVlO2lmKHZhbHVlIGluc3RhbmNlb2YgdHIuYi5TY2FsYXIpe3NwYW4udmFsdWU9dmFsdWU7bnVtZXJpY1ZhbHVlPXZhbHVlLnZhbHVlO31lbHNlIGlmKHZhbHVlIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pe251bWVyaWNWYWx1ZT12YWx1ZS5hdmVyYWdlO2lmKG51bWVyaWNWYWx1ZT09PXVuZGVmaW5lZClyZXR1cm4nJztzcGFuLnNldFZhbHVlQW5kVW5pdChudW1lcmljVmFsdWUsdmFsdWUudW5pdCk7fWVsc2V7Y29uc3QgdW5pdD1jb25maWcudW5pdDtpZih1bml0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1VuaXQgbXVzdCBiZSBwcm92aWRlZCBpbiBjb25maWcgd2hlbiB2YWx1ZSBpcyBhIG51bWJlcicpO30Kc3Bhbi5zZXRWYWx1ZUFuZFVuaXQodmFsdWUsdW5pdCk7bnVtZXJpY1ZhbHVlPXZhbHVlO30KaWYoY29uZmlnLmNvbnRleHQpe3NwYW4uY29udGV4dD1jb25maWcuY29udGV4dDt9CmlmKGNvbmZpZy5jdXN0b21Db250ZXh0UmFuZ2Upe3NwYW4uY3VzdG9tQ29udGV4dFJhbmdlPWNvbmZpZy5jdXN0b21Db250ZXh0UmFuZ2U7fQppZihjb25maWcubGVmdEFsaWduKXtzcGFuLmxlZnRBbGlnbj10cnVlO30KaWYoY29uZmlnLmlubGluZSl7c3Bhbi5pbmxpbmU9dHJ1ZTt9CmlmKGNvbmZpZy5zaWduaWZpY2FuY2UhPT11bmRlZmluZWQpe3NwYW4uc2lnbmlmaWNhbmNlPWNvbmZpZy5zaWduaWZpY2FuY2U7fQppZihjb25maWcuY29udGV4dEdyb3VwIT09dW5kZWZpbmVkKXtzcGFuLmNvbnRleHRHcm91cD1jb25maWcuY29udGV4dEdyb3VwO30KcmV0dXJuIHNwYW47fQpyZXR1cm57Y3JlYXRlU2NhbGFyU3Bhbix9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdi11aS1zY2FsYXItc3BhbicscHJvcGVydGllczp7Y29udGV4dEdyb3VwOnt0eXBlOlN0cmluZyxyZWZsZWN0VG9BdHRyaWJ1dGU6dHJ1ZSxvYnNlcnZlcjonY29udGV4dEdyb3VwQ2hhbmdlZF8nfX0sY3JlYXRlZCgpe3RoaXMudmFsdWVfPXVuZGVmaW5lZDt0aGlzLnVuaXRfPXVuZGVmaW5lZDt0aGlzLmNvbnRleHRfPXVuZGVmaW5lZDt0aGlzLndhcm5pbmdfPXVuZGVmaW5lZDt0aGlzLnNpZ25pZmljYW5jZV89dHIuYi5tYXRoLlN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLkRPTlRfQ0FSRTt0aGlzLnNob3VsZFNlYXJjaEZvckNvbnRleHRDb250cm9sbGVyXz1mYWxzZTt0aGlzLmxhenlDb250ZXh0Q29udHJvbGxlcl89dW5kZWZpbmVkO3RoaXMub25Db250ZXh0VXBkYXRlZF89dGhpcy5vbkNvbnRleHRVcGRhdGVkXy5iaW5kKHRoaXMpO3RoaXMudXBkYXRlQ29udGVudHNfPXRoaXMudXBkYXRlQ29udGVudHNfLmJpbmQodGhpcyk7dGhpcy5jdXN0b21Db250ZXh0UmFuZ2VfPXVuZGVmaW5lZDt9LGdldCBzaWduaWZpY2FuY2UoKXtyZXR1cm4gdGhpcy5zaWduaWZpY2FuY2VfO30sc2V0IHNpZ25pZmljYW5jZShzKXt0aGlzLnNpZ25pZmljYW5jZV89czt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IGNvbnRlbnRUZXh0RGVjb3JhdGlvbihkZWNvKXt0aGlzLiQuY29udGVudC5zdHlsZS50ZXh0RGVjb3JhdGlvbj1kZWNvO30sZ2V0IHZhbHVlKCl7cmV0dXJuIHRoaXMudmFsdWVfO30sc2V0IHZhbHVlKHZhbHVlKXtpZih2YWx1ZSBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKXt0aGlzLnZhbHVlXz12YWx1ZS52YWx1ZTt0aGlzLnVuaXRfPXZhbHVlLnVuaXQ7fWVsc2V7dGhpcy52YWx1ZV89dmFsdWU7fQp0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO2lmKHRoaXMuaGFzQ29udGV4dF8odGhpcy5jb250ZXh0R3JvdXApKXt0aGlzLmNvbnRleHRDb250cm9sbGVyXy5vblNjYWxhclNwYW5VcGRhdGVkKHRoaXMuY29udGV4dEdyb3VwLHRoaXMpO31lbHNle3RoaXMudXBkYXRlU3BhcmtsaW5lXygpO319LGdldCBjb250ZXh0Q29udHJvbGxlcl8oKXtpZih0aGlzLnNob3VsZFNlYXJjaEZvckNvbnRleHRDb250cm9sbGVyXyl7dGhpcy5sYXp5Q29udGV4dENvbnRyb2xsZXJfPXRyLnYudWkuZ2V0U2NhbGFyQ29udGV4dENvbnRyb2xsZXJGb3JFbGVtZW50KHRoaXMpO3RoaXMuc2hvdWxkU2VhcmNoRm9yQ29udGV4dENvbnRyb2xsZXJfPWZhbHNlO30KcmV0dXJuIHRoaXMubGF6eUNvbnRleHRDb250cm9sbGVyXzt9LGhhc0NvbnRleHRfKGNvbnRleHRHcm91cCl7cmV0dXJuISEoY29udGV4dEdyb3VwJiZ0aGlzLmNvbnRleHRDb250cm9sbGVyXyk7fSxjb250ZXh0R3JvdXBDaGFuZ2VkXyhuZXdDb250ZXh0R3JvdXAsb2xkQ29udGV4dEdyb3VwKXt0aGlzLmRldGFjaEZyb21Db250ZXh0Q29udHJvbGxlcklmUG9zc2libGVfKG9sZENvbnRleHRHcm91cCk7aWYoIXRoaXMuYXR0YWNoVG9Db250ZXh0Q29udHJvbGxlcklmUG9zc2libGVfKG5ld0NvbnRleHRHcm91cCkpe3RoaXMub25Db250ZXh0VXBkYXRlZF8oKTt9fSxhdHRhY2hUb0NvbnRleHRDb250cm9sbGVySWZQb3NzaWJsZV8oY29udGV4dEdyb3VwKXtpZighdGhpcy5oYXNDb250ZXh0Xyhjb250ZXh0R3JvdXApKXJldHVybiBmYWxzZTt0aGlzLmNvbnRleHRDb250cm9sbGVyXy5hZGRFdmVudExpc3RlbmVyKCdjb250ZXh0LXVwZGF0ZWQnLHRoaXMub25Db250ZXh0VXBkYXRlZF8pO3RoaXMuY29udGV4dENvbnRyb2xsZXJfLm9uU2NhbGFyU3BhbkFkZGVkKGNvbnRleHRHcm91cCx0aGlzKTtyZXR1cm4gdHJ1ZTt9LGRldGFjaEZyb21Db250ZXh0Q29udHJvbGxlcklmUG9zc2libGVfKGNvbnRleHRHcm91cCl7aWYoIXRoaXMuaGFzQ29udGV4dF8oY29udGV4dEdyb3VwKSlyZXR1cm47dGhpcy5jb250ZXh0Q29udHJvbGxlcl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY29udGV4dC11cGRhdGVkJyx0aGlzLm9uQ29udGV4dFVwZGF0ZWRfKTt0aGlzLmNvbnRleHRDb250cm9sbGVyXy5vblNjYWxhclNwYW5SZW1vdmVkKGNvbnRleHRHcm91cCx0aGlzKTt9LGF0dGFjaGVkKCl7dHIuYi5Vbml0LmFkZEV2ZW50TGlzdGVuZXIoJ2Rpc3BsYXktbW9kZS1jaGFuZ2VkJyx0aGlzLnVwZGF0ZUNvbnRlbnRzXyk7dGhpcy5zaG91bGRTZWFyY2hGb3JDb250ZXh0Q29udHJvbGxlcl89dHJ1ZTt0aGlzLmF0dGFjaFRvQ29udGV4dENvbnRyb2xsZXJJZlBvc3NpYmxlXyh0aGlzLmNvbnRleHRHcm91cCk7fSxkZXRhY2hlZCgpe3RyLmIuVW5pdC5yZW1vdmVFdmVudExpc3RlbmVyKCdkaXNwbGF5LW1vZGUtY2hhbmdlZCcsdGhpcy51cGRhdGVDb250ZW50c18pO3RoaXMuZGV0YWNoRnJvbUNvbnRleHRDb250cm9sbGVySWZQb3NzaWJsZV8odGhpcy5jb250ZXh0R3JvdXApO3RoaXMuc2hvdWxkU2VhcmNoRm9yQ29udGV4dENvbnRyb2xsZXJfPWZhbHNlO3RoaXMubGF6eUNvbnRleHRDb250cm9sbGVyXz11bmRlZmluZWQ7fSxvbkNvbnRleHRVcGRhdGVkXygpe3RoaXMudXBkYXRlU3BhcmtsaW5lXygpO30sZ2V0IGNvbnRleHQoKXtyZXR1cm4gdGhpcy5jb250ZXh0Xzt9LHNldCBjb250ZXh0KGNvbnRleHQpe3RoaXMuY29udGV4dF89Y29udGV4dDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHVuaXQoKXtyZXR1cm4gdGhpcy51bml0Xzt9LHNldCB1bml0KHVuaXQpe3RoaXMudW5pdF89dW5pdDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMudXBkYXRlU3BhcmtsaW5lXygpO30sc2V0VmFsdWVBbmRVbml0KHZhbHVlLHVuaXQpe3RoaXMudmFsdWVfPXZhbHVlO3RoaXMudW5pdF89dW5pdDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGN1c3RvbUNvbnRleHRSYW5nZSgpe3JldHVybiB0aGlzLmN1c3RvbUNvbnRleHRSYW5nZV87fSxzZXQgY3VzdG9tQ29udGV4dFJhbmdlKGN1c3RvbUNvbnRleHRSYW5nZSl7dGhpcy5jdXN0b21Db250ZXh0UmFuZ2VfPWN1c3RvbUNvbnRleHRSYW5nZTt0aGlzLnVwZGF0ZVNwYXJrbGluZV8oKTt9LGdldCBpbmxpbmUoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmNvbnRhaW5zKCdpbmxpbmUnKTt9LHNldCBpbmxpbmUoaW5saW5lKXtpZihpbmxpbmUpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2lubGluZScpO31lbHNle1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5yZW1vdmUoJ2lubGluZScpO319LGdldCBsZWZ0QWxpZ24oKXtyZXR1cm4gUG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmNvbnRhaW5zKCdsZWZ0LWFsaWduJyk7fSxzZXQgbGVmdEFsaWduKGxlZnRBbGlnbil7aWYobGVmdEFsaWduKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdsZWZ0LWFsaWduJyk7fWVsc2V7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LnJlbW92ZSgnbGVmdC1hbGlnbicpO319LHVwZGF0ZVNwYXJrbGluZV8oKXtQb2x5bWVyLmRvbSh0aGlzLiQuc3BhcmtsaW5lKS5jbGFzc0xpc3QucmVtb3ZlKCdwb3NpdGl2ZScpO1BvbHltZXIuZG9tKHRoaXMuJC5zcGFya2xpbmUpLmNsYXNzTGlzdC5yZW1vdmUoJ2JldHRlcicpO1BvbHltZXIuZG9tKHRoaXMuJC5zcGFya2xpbmUpLmNsYXNzTGlzdC5yZW1vdmUoJ3dvcnNlJyk7UG9seW1lci5kb20odGhpcy4kLnNwYXJrbGluZSkuY2xhc3NMaXN0LnJlbW92ZSgnc2FtZScpO3RoaXMuJC5zcGFya2xpbmUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnNwYXJrbGluZS5zdHlsZS5sZWZ0PScwJzt0aGlzLiQuc3BhcmtsaW5lLnN0eWxlLndpZHRoPScwJztsZXQgcmFuZ2U9dGhpcy5jdXN0b21Db250ZXh0UmFuZ2VfO2lmKCFyYW5nZSYmdGhpcy5oYXNDb250ZXh0Xyh0aGlzLmNvbnRleHRHcm91cCkpe2NvbnN0IGNvbnRleHQ9dGhpcy5jb250ZXh0Q29udHJvbGxlcl8uZ2V0Q29udGV4dCh0aGlzLmNvbnRleHRHcm91cCk7aWYoY29udGV4dCl7cmFuZ2U9Y29udGV4dC5yYW5nZTt9fQppZighcmFuZ2V8fHJhbmdlLmlzRW1wdHkpcmV0dXJuO2NvbnN0IGxlZnRQb2ludD1NYXRoLm1pbihyYW5nZS5taW4sMCk7Y29uc3QgcmlnaHRQb2ludD1NYXRoLm1heChyYW5nZS5tYXgsMCk7Y29uc3QgcG9pbnREaXN0YW5jZT1yaWdodFBvaW50LWxlZnRQb2ludDtpZihwb2ludERpc3RhbmNlPT09MCl7cmV0dXJuO30KdGhpcy4kLnNwYXJrbGluZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7bGV0IGxlZnQ7bGV0IHdpZHRoO2lmKHRoaXMudmFsdWU+MCl7d2lkdGg9TWF0aC5taW4odGhpcy52YWx1ZSxyaWdodFBvaW50KTtsZWZ0PS1sZWZ0UG9pbnQ7UG9seW1lci5kb20odGhpcy4kLnNwYXJrbGluZSkuY2xhc3NMaXN0LmFkZCgncG9zaXRpdmUnKTt9ZWxzZSBpZih0aGlzLnZhbHVlPD0wKXt3aWR0aD0tTWF0aC5tYXgodGhpcy52YWx1ZSxsZWZ0UG9pbnQpO2xlZnQ9KC1sZWZ0UG9pbnQpLXdpZHRoO30KdGhpcy4kLnNwYXJrbGluZS5zdHlsZS5sZWZ0PXRoaXMuYnVpbGRTcGFya2xpbmVTdHlsZV8obGVmdC9wb2ludERpc3RhbmNlLGZhbHNlKTt0aGlzLiQuc3BhcmtsaW5lLnN0eWxlLndpZHRoPXRoaXMuYnVpbGRTcGFya2xpbmVTdHlsZV8od2lkdGgvcG9pbnREaXN0YW5jZSx0cnVlKTtjb25zdCBjaGFuZ2VDbGFzcz10aGlzLmNoYW5nZUNsYXNzTmFtZV87aWYoY2hhbmdlQ2xhc3Mpe1BvbHltZXIuZG9tKHRoaXMuJC5zcGFya2xpbmUpLmNsYXNzTGlzdC5hZGQoY2hhbmdlQ2xhc3MpO319LGJ1aWxkU3BhcmtsaW5lU3R5bGVfKHJhdGlvLGlzV2lkdGgpe2xldCBwb3NpdGlvbj0nY2FsYygnK3JhdGlvKycgKiAoMTAwJSAtIDFweCknO2lmKGlzV2lkdGgpe3Bvc2l0aW9uKz0nICsgMXB4Jzt9CnBvc2l0aW9uKz0nKSc7cmV0dXJuIHBvc2l0aW9uO30sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5jbGFzc0xpc3QucmVtb3ZlKCdiZXR0ZXInKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuY2xhc3NMaXN0LnJlbW92ZSgnd29yc2UnKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuY2xhc3NMaXN0LnJlbW92ZSgnc2FtZScpO3RoaXMuJC5pbnNpZ25pZmljYW50LnN0eWxlLmRpc3BsYXk9Jyc7dGhpcy4kLnNpZ25pZmljYW50bHlfYmV0dGVyLnN0eWxlLmRpc3BsYXk9Jyc7dGhpcy4kLnNpZ25pZmljYW50bHlfd29yc2Uuc3R5bGUuZGlzcGxheT0nJztpZih0aGlzLnVuaXRfPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLiQuY29udGVudC50aXRsZT0nJztQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9dGhpcy51bml0Xy5mb3JtYXQodGhpcy52YWx1ZSx0aGlzLmNvbnRleHQpO3RoaXMudXBkYXRlRGVsdGFfKCk7fSx1cGRhdGVEZWx0YV8oKXtsZXQgY2hhbmdlQ2xhc3M9dGhpcy5jaGFuZ2VDbGFzc05hbWVfO2lmKCFjaGFuZ2VDbGFzcyl7dGhpcy4kLnNpZ25pZmljYW5jZS5zdHlsZS5kaXNwbGF5PSdub25lJztyZXR1cm47fQp0aGlzLiQuc2lnbmlmaWNhbmNlLnN0eWxlLmRpc3BsYXk9J2lubGluZSc7bGV0IHRpdGxlO3N3aXRjaChjaGFuZ2VDbGFzcyl7Y2FzZSdiZXR0ZXInOnRpdGxlPSdpbXByb3ZlbWVudCc7YnJlYWs7Y2FzZSd3b3JzZSc6dGl0bGU9J3JlZ3Jlc3Npb24nO2JyZWFrO2Nhc2Unc2FtZSc6dGl0bGU9J25vIGNoYW5nZSc7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gY2hhbmdlIGNsYXNzOiAnK2NoYW5nZUNsYXNzKTt9ClBvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5jbGFzc0xpc3QuYWRkKGNoYW5nZUNsYXNzKTtzd2l0Y2godGhpcy5zaWduaWZpY2FuY2Upe2Nhc2UgdHIuYi5tYXRoLlN0YXRpc3RpY3MuU2lnbmlmaWNhbmNlLkRPTlRfQ0FSRTpicmVhaztjYXNlIHRyLmIubWF0aC5TdGF0aXN0aWNzLlNpZ25pZmljYW5jZS5JTlNJR05JRklDQU5UOmlmKGNoYW5nZUNsYXNzIT09J3NhbWUnKXRpdGxlPSdpbnNpZ25pZmljYW50ICcrdGl0bGU7dGhpcy4kLmluc2lnbmlmaWNhbnQuc3R5bGUuZGlzcGxheT0naW5saW5lJztjaGFuZ2VDbGFzcz0nc2FtZSc7YnJlYWs7Y2FzZSB0ci5iLm1hdGguU3RhdGlzdGljcy5TaWduaWZpY2FuY2UuU0lHTklGSUNBTlQ6aWYoY2hhbmdlQ2xhc3M9PT0nc2FtZScpe3Rocm93IG5ldyBFcnJvcignSG93IGNhbiBubyBjaGFuZ2UgYmUgc2lnbmlmaWNhbnQ/Jyk7fQp0aGlzLiRbJ3NpZ25pZmljYW50bHlfJytjaGFuZ2VDbGFzc10uc3R5bGUuZGlzcGxheT0naW5saW5lJzt0aXRsZT0nc2lnbmlmaWNhbnQgJyt0aXRsZTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biBzaWduaWZpY2FuY2UgJyt0aGlzLnNpZ25pZmljYW5jZSk7fQp0aGlzLiQuc2lnbmlmaWNhbmNlLnRpdGxlPXRpdGxlO3RoaXMuJC5jb250ZW50LnRpdGxlPXRpdGxlO30sZ2V0IGNoYW5nZUNsYXNzTmFtZV8oKXtpZighdGhpcy51bml0X3x8IXRoaXMudW5pdF8uaXNEZWx0YSlyZXR1cm4gdW5kZWZpbmVkO3N3aXRjaCh0aGlzLnVuaXRfLmltcHJvdmVtZW50RGlyZWN0aW9uKXtjYXNlIHRyLmIuSW1wcm92ZW1lbnREaXJlY3Rpb24uRE9OVF9DQVJFOnJldHVybiB1bmRlZmluZWQ7Y2FzZSB0ci5iLkltcHJvdmVtZW50RGlyZWN0aW9uLkJJR0dFUl9JU19CRVRURVI6aWYodGhpcy52YWx1ZT09PTApcmV0dXJuJ3NhbWUnO3JldHVybiB0aGlzLnZhbHVlPjA/J2JldHRlcic6J3dvcnNlJztjYXNlIHRyLmIuSW1wcm92ZW1lbnREaXJlY3Rpb24uU01BTExFUl9JU19CRVRURVI6aWYodGhpcy52YWx1ZT09PTApcmV0dXJuJ3NhbWUnO3JldHVybiB0aGlzLnZhbHVlPDA/J2JldHRlcic6J3dvcnNlJztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignVW5rbm93biBpbXByb3ZlbWVudCBkaXJlY3Rpb246ICcrCnRoaXMudW5pdF8uaW1wcm92ZW1lbnREaXJlY3Rpb24pO319LGdldCB3YXJuaW5nKCl7cmV0dXJuIHRoaXMud2FybmluZ187fSxzZXQgd2FybmluZyh3YXJuaW5nKXt0aGlzLndhcm5pbmdfPXdhcm5pbmc7Y29uc3Qgd2FybmluZ0VsPXRoaXMuJC53YXJuaW5nO2lmKHRoaXMud2FybmluZ18pe3dhcm5pbmdFbC50aXRsZT13YXJuaW5nO3dhcm5pbmdFbC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO31lbHNle3dhcm5pbmdFbC50aXRsZT0nJzt3YXJuaW5nRWwuc3R5bGUuZGlzcGxheT0nJzt9fSxnZXQgdGltZXN0YW1wKCl7cmV0dXJuIHRoaXMudmFsdWU7fSxzZXQgdGltZXN0YW1wKHRpbWVzdGFtcCl7aWYodGltZXN0YW1wIGluc3RhbmNlb2YgdHIuYi51LlRpbWVTdGFtcCl7dGhpcy52YWx1ZT10aW1lc3RhbXA7cmV0dXJuO30KdGhpcy5zZXRWYWx1ZUFuZFVuaXQodGltZXN0YW1wLHRyLmIudS5Vbml0cy50aW1lU3RhbXBJbk1zKTt9LGdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLnZhbHVlO30sc2V0IGR1cmF0aW9uKGR1cmF0aW9uKXtpZihkdXJhdGlvbiBpbnN0YW5jZW9mIHRyLmIudS5UaW1lRHVyYXRpb24pe3RoaXMudmFsdWU9ZHVyYXRpb247cmV0dXJuO30KdGhpcy5zZXRWYWx1ZUFuZFVuaXQoZHVyYXRpb24sdHIuYi51LlVuaXRzLnRpbWVEdXJhdGlvbkluTXMpO319KTsndXNlIHN0cmljdCc7ZnVuY3Rpb24gaXNUYWJsZShvYmplY3Qpe2lmKCEob2JqZWN0IGluc3RhbmNlb2YgQXJyYXkpfHwob2JqZWN0Lmxlbmd0aDwyKSlyZXR1cm4gZmFsc2U7Zm9yKGNvbnN0IGNvbE5hbWUgaW4gb2JqZWN0WzBdKXtpZih0eXBlb2YgY29sTmFtZSE9PSdzdHJpbmcnKXJldHVybiBmYWxzZTt9CmZvcihsZXQgaT0wO2k8b2JqZWN0Lmxlbmd0aDsrK2kpe2lmKCEob2JqZWN0W2ldaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybiBmYWxzZTtmb3IoY29uc3QgY29sTmFtZSBpbiBvYmplY3RbaV0pe2lmKGkmJihvYmplY3RbMF1bY29sTmFtZV09PT11bmRlZmluZWQpKXJldHVybiBmYWxzZTtjb25zdCBjZWxsVHlwZT10eXBlb2Ygb2JqZWN0W2ldW2NvbE5hbWVdO2lmKGNlbGxUeXBlIT09J3N0cmluZycmJmNlbGxUeXBlIT09J251bWJlcicpcmV0dXJuIGZhbHNlO30KaWYoaSl7Zm9yKGNvbnN0IGNvbE5hbWUgaW4gb2JqZWN0WzBdKXtpZihvYmplY3RbaV1bY29sTmFtZV09PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO319fQpyZXR1cm4gdHJ1ZTt9ClBvbHltZXIoe2lzOid0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnLHJlYWR5KCl7dGhpcy5vYmplY3RfPXVuZGVmaW5lZDt9LGdldCBvYmplY3QoKXtyZXR1cm4gdGhpcy5vYmplY3RfO30sc2V0IG9iamVjdChvYmplY3Qpe3RoaXMub2JqZWN0Xz1vYmplY3Q7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS50ZXh0Q29udGVudD0nJzt0aGlzLmFwcGVuZEVsZW1lbnRzRm9yVHlwZV8oJycsdGhpcy5vYmplY3RfLDAsMCw1LCcnKTt9LGFwcGVuZEVsZW1lbnRzRm9yVHlwZV8obGFiZWwsb2JqZWN0LGluZGVudCxkZXB0aCxtYXhEZXB0aCxzdWZmaXgpe2lmKGRlcHRoPm1heERlcHRoKXt0aGlzLmFwcGVuZFNpbXBsZVRleHRfKGxhYmVsLGluZGVudCwnPHJlY3Vyc2lvbiBsaW1pdCByZWFjaGVkPicsc3VmZml4KTtyZXR1cm47fQppZihvYmplY3Q9PT11bmRlZmluZWQpe3RoaXMuYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LCd1bmRlZmluZWQnLHN1ZmZpeCk7cmV0dXJuO30KaWYob2JqZWN0PT09bnVsbCl7dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsJ251bGwnLHN1ZmZpeCk7cmV0dXJuO30KaWYoIShvYmplY3QgaW5zdGFuY2VvZiBPYmplY3QpKXtjb25zdCB0eXBlPXR5cGVvZiBvYmplY3Q7aWYodHlwZSE9PSdzdHJpbmcnKXtyZXR1cm4gdGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsb2JqZWN0LHN1ZmZpeCk7fQpsZXQgb2JqZWN0UmVwbGFjZWQ9ZmFsc2U7aWYoKG9iamVjdFswXT09PSd7JyYmb2JqZWN0W29iamVjdC5sZW5ndGgtMV09PT0nfScpfHwob2JqZWN0WzBdPT09J1snJiZvYmplY3Rbb2JqZWN0Lmxlbmd0aC0xXT09PSddJykpe3RyeXtvYmplY3Q9SlNPTi5wYXJzZShvYmplY3QpO29iamVjdFJlcGxhY2VkPXRydWU7fWNhdGNoKGUpe319CmlmKCFvYmplY3RSZXBsYWNlZCl7aWYob2JqZWN0LmluY2x1ZGVzKCdcbicpKXtjb25zdCBsaW5lcz1vYmplY3Quc3BsaXQoJ1xuJyk7bGluZXMuZm9yRWFjaChmdW5jdGlvbihsaW5lLGkpe2xldCB0ZXh0O2xldCBpb2ZmO2xldCBsbDtsZXQgc3M7aWYoaT09PTApe3RleHQ9JyInK2xpbmU7aW9mZj0wO2xsPWxhYmVsO3NzPScnO31lbHNlIGlmKGk8bGluZXMubGVuZ3RoLTEpe3RleHQ9bGluZTtpb2ZmPTE7bGw9Jyc7c3M9Jyc7fWVsc2V7dGV4dD1saW5lKyciJztpb2ZmPTE7bGw9Jyc7c3M9c3VmZml4O30KY29uc3QgZWw9dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsbCxpbmRlbnQraW9mZipsYWJlbC5sZW5ndGgraW9mZix0ZXh0LHNzKTtlbC5zdHlsZS53aGl0ZVNwYWNlPSdwcmUnO3JldHVybiBlbDt9LHRoaXMpO3JldHVybjt9CmlmKHRyLmIuaXNVcmwob2JqZWN0KSl7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdhJyk7bGluay5ocmVmPW9iamVjdDtsaW5rLnRleHRDb250ZW50PW9iamVjdDt0aGlzLmFwcGVuZEVsZW1lbnRXaXRoTGFiZWxfKGxhYmVsLGluZGVudCxsaW5rLHN1ZmZpeCk7cmV0dXJuO30KdGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsJyInK29iamVjdCsnIicsc3VmZml4KTtyZXR1cm47fX0KaWYob2JqZWN0IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0U25hcHNob3Qpe2NvbnN0IGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGluay5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KG9iamVjdCk7dGhpcy5hcHBlbmRFbGVtZW50V2l0aExhYmVsXyhsYWJlbCxpbmRlbnQsbGluayxzdWZmaXgpO3JldHVybjt9CmlmKG9iamVjdCBpbnN0YW5jZW9mIHRyLm1vZGVsLk9iamVjdEluc3RhbmNlKXtjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmsuc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldChvYmplY3QpO3RoaXMuYXBwZW5kRWxlbWVudFdpdGhMYWJlbF8obGFiZWwsaW5kZW50LGxpbmssc3VmZml4KTtyZXR1cm47fQppZihvYmplY3QgaW5zdGFuY2VvZiB0ci5iLm1hdGguUmVjdCl7dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsb2JqZWN0LnRvU3RyaW5nKCksc3VmZml4KTtyZXR1cm47fQppZihvYmplY3QgaW5zdGFuY2VvZiB0ci5iLlNjYWxhcil7Y29uc3QgZWw9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktc2NhbGFyLXNwYW4nKTtlbC52YWx1ZT1vYmplY3Q7ZWwuaW5saW5lPXRydWU7dGhpcy5hcHBlbmRFbGVtZW50V2l0aExhYmVsXyhsYWJlbCxpbmRlbnQsZWwsc3VmZml4KTtyZXR1cm47fQppZihvYmplY3QgaW5zdGFuY2VvZiBBcnJheSl7dGhpcy5hcHBlbmRFbGVtZW50c0ZvckFycmF5XyhsYWJlbCxvYmplY3QsaW5kZW50LGRlcHRoLG1heERlcHRoLHN1ZmZpeCk7cmV0dXJuO30KdGhpcy5hcHBlbmRFbGVtZW50c0Zvck9iamVjdF8obGFiZWwsb2JqZWN0LGluZGVudCxkZXB0aCxtYXhEZXB0aCxzdWZmaXgpO30sYXBwZW5kRWxlbWVudHNGb3JBcnJheV8obGFiZWwsb2JqZWN0LGluZGVudCxkZXB0aCxtYXhEZXB0aCxzdWZmaXgpe2lmKG9iamVjdC5sZW5ndGg9PT0wKXt0aGlzLmFwcGVuZFNpbXBsZVRleHRfKGxhYmVsLGluZGVudCwnW10nLHN1ZmZpeCk7cmV0dXJuO30KaWYoaXNUYWJsZShvYmplY3QpKXtjb25zdCB0YWJsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlJyk7Y29uc3QgY29sdW1ucz1bXTtmb3IoY29uc3QgY29sTmFtZSBvZiBPYmplY3Qua2V5cyhvYmplY3RbMF0pKXtsZXQgYWxsU3RyaW5ncz10cnVlO2xldCBhbGxOdW1iZXJzPXRydWU7Zm9yKGxldCBpPTA7aTxvYmplY3QubGVuZ3RoOysraSl7aWYodHlwZW9mKG9iamVjdFtpXVtjb2xOYW1lXSkhPT0nc3RyaW5nJyl7YWxsU3RyaW5ncz1mYWxzZTt9CmlmKHR5cGVvZihvYmplY3RbaV1bY29sTmFtZV0pIT09J251bWJlcicpe2FsbE51bWJlcnM9ZmFsc2U7fQppZighYWxsU3RyaW5ncyYmIWFsbE51bWJlcnMpYnJlYWs7fQpjb25zdCBjb2x1bW49e3RpdGxlOmNvbE5hbWV9O2NvbHVtbi52YWx1ZT1mdW5jdGlvbihyb3cpe3JldHVybiByb3dbY29sTmFtZV07fTtpZihhbGxTdHJpbmdzKXtjb2x1bW4uY21wPWZ1bmN0aW9uKHgseSl7cmV0dXJuIHhbY29sTmFtZV0ubG9jYWxlQ29tcGFyZSh5W2NvbE5hbWVdKTt9O31lbHNlIGlmKGFsbE51bWJlcnMpe2NvbHVtbi5jbXA9ZnVuY3Rpb24oeCx5KXtyZXR1cm4geFtjb2xOYW1lXS15W2NvbE5hbWVdO307fQpjb2x1bW5zLnB1c2goY29sdW1uKTt9CnRhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RhYmxlLnRhYmxlUm93cz1vYmplY3Q7dGhpcy5hcHBlbmRFbGVtZW50V2l0aExhYmVsXyhsYWJlbCxpbmRlbnQsdGFibGUsc3VmZml4KTt0YWJsZS5yZWJ1aWxkKCk7cmV0dXJuO30KdGhpcy5hcHBlbmRFbGVtZW50c0ZvclR5cGVfKGxhYmVsKydbJyxvYmplY3RbMF0saW5kZW50LGRlcHRoKzEsbWF4RGVwdGgsb2JqZWN0Lmxlbmd0aD4xPycsJzonXScrc3VmZml4KTtmb3IobGV0IGk9MTtpPG9iamVjdC5sZW5ndGg7aSsrKXt0aGlzLmFwcGVuZEVsZW1lbnRzRm9yVHlwZV8oJycsb2JqZWN0W2ldLGluZGVudCtsYWJlbC5sZW5ndGgrMSxkZXB0aCsxLG1heERlcHRoLGk8b2JqZWN0Lmxlbmd0aC0xPycsJzonXScrc3VmZml4KTt9CnJldHVybjt9LGFwcGVuZEVsZW1lbnRzRm9yT2JqZWN0XyhsYWJlbCxvYmplY3QsaW5kZW50LGRlcHRoLG1heERlcHRoLHN1ZmZpeCl7Y29uc3Qga2V5cz1PYmplY3Qua2V5cyhvYmplY3QpO2lmKGtleXMubGVuZ3RoPT09MCl7dGhpcy5hcHBlbmRTaW1wbGVUZXh0XyhsYWJlbCxpbmRlbnQsJ3t9JyxzdWZmaXgpO3JldHVybjt9CnRoaXMuYXBwZW5kRWxlbWVudHNGb3JUeXBlXyhsYWJlbCsneycra2V5c1swXSsnOiAnLG9iamVjdFtrZXlzWzBdXSxpbmRlbnQsZGVwdGgsbWF4RGVwdGgsa2V5cy5sZW5ndGg+MT8nLCc6J30nK3N1ZmZpeCk7Zm9yKGxldCBpPTE7aTxrZXlzLmxlbmd0aDtpKyspe3RoaXMuYXBwZW5kRWxlbWVudHNGb3JUeXBlXyhrZXlzW2ldKyc6ICcsb2JqZWN0W2tleXNbaV1dLGluZGVudCtsYWJlbC5sZW5ndGgrMSxkZXB0aCsxLG1heERlcHRoLGk8a2V5cy5sZW5ndGgtMT8nLCc6J30nK3N1ZmZpeCk7fX0sYXBwZW5kRWxlbWVudFdpdGhMYWJlbF8obGFiZWwsaW5kZW50LGRhdGFFbGVtZW50LHN1ZmZpeCl7Y29uc3Qgcm93PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NvbnN0IGluZGVudFNwYW49ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2luZGVudFNwYW4uc3R5bGUud2hpdGVTcGFjZT0ncHJlJztmb3IobGV0IGk9MDtpPGluZGVudDtpKyspe1BvbHltZXIuZG9tKGluZGVudFNwYW4pLnRleHRDb250ZW50Kz0nICc7fQpQb2x5bWVyLmRvbShyb3cpLmFwcGVuZENoaWxkKGluZGVudFNwYW4pO2NvbnN0IGxhYmVsU3Bhbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20obGFiZWxTcGFuKS50ZXh0Q29udGVudD1sYWJlbDtQb2x5bWVyLmRvbShyb3cpLmFwcGVuZENoaWxkKGxhYmVsU3Bhbik7UG9seW1lci5kb20ocm93KS5hcHBlbmRDaGlsZChkYXRhRWxlbWVudCk7Y29uc3Qgc3VmZml4U3Bhbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20oc3VmZml4U3BhbikudGV4dENvbnRlbnQ9c3VmZml4O1BvbHltZXIuZG9tKHJvdykuYXBwZW5kQ2hpbGQoc3VmZml4U3Bhbik7cm93LmRhdGFFbGVtZW50PWRhdGFFbGVtZW50O1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5hcHBlbmRDaGlsZChyb3cpO30sYXBwZW5kU2ltcGxlVGV4dF8obGFiZWwsaW5kZW50LHRleHQsc3VmZml4KXtjb25zdCBlbD10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKGVsKS50ZXh0Q29udGVudD10ZXh0O3RoaXMuYXBwZW5kRWxlbWVudFdpdGhMYWJlbF8obGFiZWwsaW5kZW50LGVsLHN1ZmZpeCk7cmV0dXJuIGVsO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsJyxyZWFkeSgpe3RoaXMubGFiZWxFbF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7dGhpcy5nZW5lcmljT2JqZWN0Vmlld189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3Jyk7UG9seW1lci5kb20odGhpcy5yb290KS5hcHBlbmRDaGlsZCh0aGlzLmxhYmVsRWxfKTtQb2x5bWVyLmRvbSh0aGlzLnJvb3QpLmFwcGVuZENoaWxkKHRoaXMuZ2VuZXJpY09iamVjdFZpZXdfKTt9LGdldCBsYWJlbCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzLmxhYmVsRWxfKS50ZXh0Q29udGVudDt9LHNldCBsYWJlbChsYWJlbCl7UG9seW1lci5kb20odGhpcy5sYWJlbEVsXykudGV4dENvbnRlbnQ9bGFiZWw7fSxnZXQgb2JqZWN0KCl7cmV0dXJuIHRoaXMuZ2VuZXJpY09iamVjdFZpZXdfLm9iamVjdDt9LHNldCBvYmplY3Qob2JqZWN0KXt0aGlzLmdlbmVyaWNPYmplY3RWaWV3Xy5vYmplY3Q9b2JqZWN0O319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90Vmlldz10ci51aS5iLmRlZmluZSgnb2JqZWN0LXNuYXBzaG90LXZpZXcnKTtPYmplY3RTbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5vYmplY3RTbmFwc2hvdF89dW5kZWZpbmVkO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gdHJ1ZTt9LHNldCBtb2RlbEV2ZW50KG9iail7dGhpcy5vYmplY3RTbmFwc2hvdD1vYmo7fSxnZXQgbW9kZWxFdmVudCgpe3JldHVybiB0aGlzLm9iamVjdFNuYXBzaG90O30sZ2V0IG9iamVjdFNuYXBzaG90KCl7cmV0dXJuIHRoaXMub2JqZWN0U25hcHNob3RfO30sc2V0IG9iamVjdFNuYXBzaG90KGkpe3RoaXMub2JqZWN0U25hcHNob3RfPWk7dGhpcy51cGRhdGVDb250ZW50cygpO30sdXBkYXRlQ29udGVudHMoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1PYmplY3RTbmFwc2hvdFZpZXc7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e3Nob3dJbnN0YW5jZXM6dHJ1ZSxzaG93SW5UcmFja1ZpZXc6dHJ1ZX07dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KE9iamVjdFNuYXBzaG90VmlldyxvcHRpb25zKTtyZXR1cm57T2JqZWN0U25hcHNob3RWaWV3LH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWRyYWctaGFuZGxlJyxjcmVhdGVkKCl7dGhpcy5sYXN0TW91c2VQb3NfPTA7dGhpcy5vbk1vdXNlTW92ZV89dGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKTt0aGlzLm9uTW91c2VVcF89dGhpcy5vbk1vdXNlVXBfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fKTt0aGlzLnRhcmdldF89dW5kZWZpbmVkO3RoaXMuaG9yaXpvbnRhbD10cnVlO3RoaXMub2JzZXJ2ZXJfPW5ldyBNdXRhdGlvbk9ic2VydmVyKHRoaXMuZGlkVGFyZ2V0TXV0YXRlXy5iaW5kKHRoaXMpKTt0aGlzLnRhcmdldFNpemVzQnlNb2RlS2V5Xz17fTt0aGlzLmN1cnJlbnREcmFnZ2luZ1NpemVfPXVuZGVmaW5lZDt9LGdldCBtb2RlS2V5Xygpe3JldHVybiB0aGlzLnRhcmdldF8uY2xhc3NOYW1lPT09Jyc/Jy4nOnRoaXMudGFyZ2V0Xy5jbGFzc05hbWU7fSxnZXQgdGFyZ2V0KCl7cmV0dXJuIHRoaXMudGFyZ2V0Xzt9LHNldCB0YXJnZXQodGFyZ2V0KXt0aGlzLm9ic2VydmVyXy5kaXNjb25uZWN0KCk7dGhpcy50YXJnZXRfPXRhcmdldDtpZighdGhpcy50YXJnZXRfKXJldHVybjt0aGlzLm9ic2VydmVyXy5vYnNlcnZlKHRoaXMudGFyZ2V0Xyx7YXR0cmlidXRlczp0cnVlLGF0dHJpYnV0ZUZpbHRlcjpbJ2NsYXNzJ119KTt9LGdldCBob3Jpem9udGFsKCl7cmV0dXJuIHRoaXMuaG9yaXpvbnRhbF87fSxzZXQgaG9yaXpvbnRhbChoKXt0aGlzLmhvcml6b250YWxfPWg7aWYodGhpcy5ob3Jpem9udGFsXyl7dGhpcy5jbGFzc05hbWU9J2hvcml6b250YWwtZHJhZy1oYW5kbGUnO31lbHNle3RoaXMuY2xhc3NOYW1lPSd2ZXJ0aWNhbC1kcmFnLWhhbmRsZSc7fX0sZ2V0IHZlcnRpY2FsKCl7cmV0dXJuIXRoaXMuaG9yaXpvbnRhbF87fSxzZXQgdmVydGljYWwodil7dGhpcy5ob3Jpem9udGFsPSF2O30sZm9yY2VNdXRhdGlvbk9ic2VydmVyRmx1c2hfKCl7Y29uc3QgcmVjb3Jkcz10aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpO2lmKHJlY29yZHMubGVuZ3RoKXt0aGlzLmRpZFRhcmdldE11dGF0ZV8ocmVjb3Jkcyk7fX0sZGlkVGFyZ2V0TXV0YXRlXyhlKXtjb25zdCBtb2RlU2l6ZT10aGlzLnRhcmdldFNpemVzQnlNb2RlS2V5X1t0aGlzLm1vZGVLZXlfXTtpZihtb2RlU2l6ZSE9PXVuZGVmaW5lZCl7dGhpcy5zZXRUYXJnZXRTaXplXyhtb2RlU2l6ZSk7cmV0dXJuO30KdGhpcy50YXJnZXRfLnN0eWxlW3RoaXMudGFyZ2V0U3R5bGVLZXlfXT0nJzt9LGdldCB0YXJnZXRTdHlsZUtleV8oKXtyZXR1cm4gdGhpcy5ob3Jpem9udGFsXz8naGVpZ2h0Jzond2lkdGgnO30sZ2V0VGFyZ2V0U2l6ZV8oKXtjb25zdCBzaXplPXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMudGFyZ2V0XylbdGhpcy50YXJnZXRTdHlsZUtleV9dKTt0aGlzLnRhcmdldFNpemVzQnlNb2RlS2V5X1t0aGlzLm1vZGVLZXlfXT1zaXplO3JldHVybiBzaXplO30sc2V0VGFyZ2V0U2l6ZV8ocyl7dGhpcy50YXJnZXRfLnN0eWxlW3RoaXMudGFyZ2V0U3R5bGVLZXlfXT1zKydweCc7dGhpcy50YXJnZXRTaXplc0J5TW9kZUtleV9bdGhpcy5tb2RlS2V5X109dGhpcy5nZXRUYXJnZXRTaXplXygpO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdkcmFnLWhhbmRsZS1yZXNpemUnLHRydWUsZmFsc2UpO30sYXBwbHlEZWx0YV8oZGVsdGEpe2lmKHRoaXMudGFyZ2V0Xz09PXRoaXMubmV4dEVsZW1lbnRTaWJsaW5nKXt0aGlzLmN1cnJlbnREcmFnZ2luZ1NpemVfKz1kZWx0YTt9ZWxzZXt0aGlzLmN1cnJlbnREcmFnZ2luZ1NpemVfLT1kZWx0YTt9CnRoaXMuc2V0VGFyZ2V0U2l6ZV8odGhpcy5jdXJyZW50RHJhZ2dpbmdTaXplXyk7fSxvbk1vdXNlTW92ZV8oZSl7Y29uc3QgY3VyTW91c2VQb3M9dGhpcy5ob3Jpem9udGFsXz9lLmNsaWVudFk6ZS5jbGllbnRYO2NvbnN0IGRlbHRhPXRoaXMubGFzdE1vdXNlUG9zXy1jdXJNb3VzZVBvczt0aGlzLmFwcGx5RGVsdGFfKGRlbHRhKTt0aGlzLmxhc3RNb3VzZVBvc189Y3VyTW91c2VQb3M7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO30sb25Nb3VzZURvd25fKGUpe2lmKCF0aGlzLnRhcmdldF8pcmV0dXJuO3RoaXMuZm9yY2VNdXRhdGlvbk9ic2VydmVyRmx1c2hfKCk7dGhpcy5jdXJyZW50RHJhZ2dpbmdTaXplXz10aGlzLmdldFRhcmdldFNpemVfKCk7dGhpcy5sYXN0TW91c2VQb3NfPXRoaXMuaG9yaXpvbnRhbF8/ZS5jbGllbnRZOmUuY2xpZW50WDtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uTW91c2VVcF8pO2UucHJldmVudERlZmF1bHQoKTtyZXR1cm4gdHJ1ZTt9LG9uTW91c2VVcF8oZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uTW91c2VNb3ZlXyk7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsdGhpcy5vbk1vdXNlVXBfKTtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5jdXJyZW50RHJhZ2dpbmdTaXplXz11bmRlZmluZWQ7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtmdW5jdGlvbiBIb3RLZXkoZGljdCl7aWYoZGljdC5ldmVudFR5cGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignZXZlbnRUeXBlIG11c3QgYmUgZ2l2ZW4nKTt9CmlmKGRpY3Qua2V5Q29kZT09PXVuZGVmaW5lZCYmZGljdC5rZXlDb2Rlcz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdrZXlDb2RlIG9yIGtleUNvZGVzIG11c3QgYmUgZ2l2ZW4nKTt9CmlmKGRpY3Qua2V5Q29kZSE9PXVuZGVmaW5lZCYmZGljdC5rZXlDb2RlcyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IGtleUNvZGUgb3Iga2V5Q29kZXMgY2FuIGJlIGdpdmVuJyk7fQppZihkaWN0LmNhbGxiYWNrPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ2NhbGxiYWNrIG11c3QgYmUgZ2l2ZW4nKTt9CnRoaXMuZXZlbnRUeXBlXz1kaWN0LmV2ZW50VHlwZTt0aGlzLmtleUNvZGVzXz1bXTtpZihkaWN0LmtleUNvZGUpe3RoaXMucHVzaEtleUNvZGVfKGRpY3Qua2V5Q29kZSk7fWVsc2UgaWYoZGljdC5rZXlDb2Rlcyl7ZGljdC5rZXlDb2Rlcy5mb3JFYWNoKHRoaXMucHVzaEtleUNvZGVfLHRoaXMpO30KdGhpcy51c2VDYXB0dXJlXz0hIWRpY3QudXNlQ2FwdHVyZTt0aGlzLmNhbGxiYWNrXz1kaWN0LmNhbGxiYWNrO3RoaXMudGhpc0FyZ189ZGljdC50aGlzQXJnIT09dW5kZWZpbmVkP2RpY3QudGhpc0FyZzp1bmRlZmluZWQ7dGhpcy5oZWxwVGV4dF89ZGljdC5oZWxwVGV4dCE9PXVuZGVmaW5lZD9kaWN0LmhlbHBUZXh0OnVuZGVmaW5lZDt9CkhvdEtleS5wcm90b3R5cGU9e2dldCBldmVudFR5cGUoKXtyZXR1cm4gdGhpcy5ldmVudFR5cGVfO30sZ2V0IGtleUNvZGVzKCl7cmV0dXJuIHRoaXMua2V5Q29kZXNfO30sZ2V0IGhlbHBUZXh0KCl7cmV0dXJuIHRoaXMuaGVscFRleHRfO30sY2FsbChlKXt0aGlzLmNhbGxiYWNrXy5jYWxsKHRoaXMudGhpc0FyZ18sZSk7fSxwdXNoS2V5Q29kZV8oa2V5Q29kZSl7dGhpcy5rZXlDb2Rlc18ucHVzaChrZXlDb2RlKTt9fTtyZXR1cm57SG90S2V5LH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0di11aS1iLWhvdGtleS1jb250cm9sbGVyJyxjcmVhdGVkKCl7dGhpcy5pc0F0dGFjaGVkXz1mYWxzZTt0aGlzLmdsb2JhbE1vZGVfPWZhbHNlO3RoaXMuc2xhdmVkVG9QYXJlbnRDb250cm9sbGVyXz11bmRlZmluZWQ7dGhpcy5jdXJIb3N0Xz11bmRlZmluZWQ7dGhpcy5jaGlsZENvbnRyb2xsZXJzXz1bXTt0aGlzLmJ1YmJsaW5nS2V5RG93bkhvdEtleXNfPXt9O3RoaXMuY2FwdHVyaW5nS2V5RG93bkhvdEtleXNfPXt9O3RoaXMuYnViYmxpbmdLZXlQcmVzc0hvdEtleXNfPXt9O3RoaXMuY2FwdHVyaW5nS2V5UHJlc3NIb3RLZXlzXz17fTt0aGlzLm9uQnViYmxpbmdLZXlEb3duXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsZmFsc2UpO3RoaXMub25DYXB0dXJpbmdLZXlEb3duXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsdHJ1ZSk7dGhpcy5vbkJ1YmJsaW5nS2V5UHJlc3NfPXRoaXMub25LZXlfLmJpbmQodGhpcyxmYWxzZSk7dGhpcy5vbkNhcHR1cmluZ0tleVByZXNzXz10aGlzLm9uS2V5Xy5iaW5kKHRoaXMsdHJ1ZSk7fSxhdHRhY2hlZCgpe3RoaXMuaXNBdHRhY2hlZF89dHJ1ZTtjb25zdCBob3N0PXRoaXMuZmluZEhvc3RfKCk7aWYoaG9zdC5fX2hvdGtleUNvbnRyb2xsZXIpe3Rocm93IG5ldyBFcnJvcignTXVsdGlwbGUgaG90a2V5IGNvbnRyb2xsZXJzIGF0dGFjaGVkIHRvIHRoaXMgaG9zdCcpO30KaG9zdC5fX2hvdGtleUNvbnRyb2xsZXI9dGhpczt0aGlzLmN1ckhvc3RfPWhvc3Q7bGV0IHBhcmVudEVsZW1lbnQ7aWYoaG9zdC5wYXJlbnRFbGVtZW50KXtwYXJlbnRFbGVtZW50PWhvc3QucGFyZW50RWxlbWVudDt9ZWxzZXtwYXJlbnRFbGVtZW50PVBvbHltZXIuZG9tKGhvc3QpLnBhcmVudE5vZGUuaG9zdDt9CmNvbnN0IHBhcmVudENvbnRyb2xsZXI9dHIuYi5nZXRIb3RrZXlDb250cm9sbGVyRm9yRWxlbWVudChwYXJlbnRFbGVtZW50KTtpZihwYXJlbnRDb250cm9sbGVyKXt0aGlzLnNsYXZlZFRvUGFyZW50Q29udHJvbGxlcl89cGFyZW50Q29udHJvbGxlcjtwYXJlbnRDb250cm9sbGVyLmFkZENoaWxkQ29udHJvbGxlcl8odGhpcyk7cmV0dXJuO30KaG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQnViYmxpbmdLZXlEb3duXyxmYWxzZSk7aG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uQ2FwdHVyaW5nS2V5RG93bl8sdHJ1ZSk7aG9zdC5hZGRFdmVudExpc3RlbmVyKCdrZXlwcmVzcycsdGhpcy5vbkJ1YmJsaW5nS2V5UHJlc3NfLGZhbHNlKTtob3N0LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJyx0aGlzLm9uQ2FwdHVyaW5nS2V5UHJlc3NfLHRydWUpO30sZGV0YWNoZWQoKXt0aGlzLmlzQXR0YWNoZWRfPWZhbHNlO2NvbnN0IGhvc3Q9dGhpcy5jdXJIb3N0XztpZighaG9zdClyZXR1cm47ZGVsZXRlIGhvc3QuX19ob3RrZXlDb250cm9sbGVyO3RoaXMuY3VySG9zdF89dW5kZWZpbmVkO2lmKHRoaXMuc2xhdmVkVG9QYXJlbnRDb250cm9sbGVyXyl7dGhpcy5zbGF2ZWRUb1BhcmVudENvbnRyb2xsZXJfLnJlbW92ZUNoaWxkQ29udHJvbGxlcl8odGhpcyk7dGhpcy5zbGF2ZWRUb1BhcmVudENvbnRyb2xsZXJfPXVuZGVmaW5lZDtyZXR1cm47fQpob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25CdWJibGluZ0tleURvd25fLGZhbHNlKTtob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLHRoaXMub25DYXB0dXJpbmdLZXlEb3duXyx0cnVlKTtob3N0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2tleXByZXNzJyx0aGlzLm9uQnViYmxpbmdLZXlQcmVzc18sZmFsc2UpO2hvc3QucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5cHJlc3MnLHRoaXMub25DYXB0dXJpbmdLZXlQcmVzc18sdHJ1ZSk7fSxhZGRDaGlsZENvbnRyb2xsZXJfKGNvbnRyb2xsZXIpe2NvbnN0IGk9dGhpcy5jaGlsZENvbnRyb2xsZXJzXy5pbmRleE9mKGNvbnRyb2xsZXIpO2lmKGkhPT0tMSl7dGhyb3cgbmV3IEVycm9yKCdDb250cm9sbGVyIGFscmVhZHkgcmVnaXN0ZXJlZCcpO30KdGhpcy5jaGlsZENvbnRyb2xsZXJzXy5wdXNoKGNvbnRyb2xsZXIpO30scmVtb3ZlQ2hpbGRDb250cm9sbGVyXyhjb250cm9sbGVyKXtjb25zdCBpPXRoaXMuY2hpbGRDb250cm9sbGVyc18uaW5kZXhPZihjb250cm9sbGVyKTtpZihpPT09LTEpe3Rocm93IG5ldyBFcnJvcignQ29udHJvbGxlciBub3QgcmVnaXN0ZXJlZCcpO30KdGhpcy5jaGlsZENvbnRyb2xsZXJzXy5zcGxpY2UoaSwxKTtyZXR1cm4gY29udHJvbGxlcjt9LGdldEtleU1hcEZvckV2ZW50VHlwZV8oZXZlbnRUeXBlLHVzZUNhcHR1cmUpe2lmKGV2ZW50VHlwZT09PSdrZXlkb3duJyl7aWYoIXVzZUNhcHR1cmUpe3JldHVybiB0aGlzLmJ1YmJsaW5nS2V5RG93bkhvdEtleXNfO30KcmV0dXJuIHRoaXMuY2FwdHVyaW5nS2V5RG93bkhvdEtleXNfO30KaWYoZXZlbnRUeXBlPT09J2tleXByZXNzJyl7aWYoIXVzZUNhcHR1cmUpe3JldHVybiB0aGlzLmJ1YmJsaW5nS2V5UHJlc3NIb3RLZXlzXzt9CnJldHVybiB0aGlzLmNhcHR1cmluZ0tleVByZXNzSG90S2V5c187fQp0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGtleSBldmVudCcpO30sYWRkSG90S2V5KGhvdEtleSl7aWYoIShob3RLZXkgaW5zdGFuY2VvZiB0ci51aS5iLkhvdEtleSkpe3Rocm93IG5ldyBFcnJvcignaG90S2V5IG11c3QgYmUgYSB0ci51aS5iLkhvdEtleScpO30KY29uc3Qga2V5TWFwPXRoaXMuZ2V0S2V5TWFwRm9yRXZlbnRUeXBlXyhob3RLZXkuZXZlbnRUeXBlLGhvdEtleS51c2VDYXB0dXJlKTtmb3IobGV0IGk9MDtpPGhvdEtleS5rZXlDb2Rlcy5sZW5ndGg7aSsrKXtjb25zdCBrZXlDb2RlPWhvdEtleS5rZXlDb2Rlc1tpXTtpZihrZXlNYXBba2V5Q29kZV0pe3Rocm93IG5ldyBFcnJvcignS2V5IGlzIGFscmVhZHkgYm91bmQgZm9yIGtleUNvZGU9JytrZXlDb2RlKTt9fQpmb3IobGV0IGk9MDtpPGhvdEtleS5rZXlDb2Rlcy5sZW5ndGg7aSsrKXtjb25zdCBrZXlDb2RlPWhvdEtleS5rZXlDb2Rlc1tpXTtrZXlNYXBba2V5Q29kZV09aG90S2V5O30KcmV0dXJuIGhvdEtleTt9LHJlbW92ZUhvdEtleShob3RLZXkpe2lmKCEoaG90S2V5IGluc3RhbmNlb2YgdHIudWkuYi5Ib3RLZXkpKXt0aHJvdyBuZXcgRXJyb3IoJ2hvdEtleSBtdXN0IGJlIGEgdHIudWkuYi5Ib3RLZXknKTt9CmNvbnN0IGtleU1hcD10aGlzLmdldEtleU1hcEZvckV2ZW50VHlwZV8oaG90S2V5LmV2ZW50VHlwZSxob3RLZXkudXNlQ2FwdHVyZSk7Zm9yKGxldCBpPTA7aTxob3RLZXkua2V5Q29kZXMubGVuZ3RoO2krKyl7Y29uc3Qga2V5Q29kZT1ob3RLZXkua2V5Q29kZXNbaV07aWYoIWtleU1hcFtrZXlDb2RlXSl7dGhyb3cgbmV3IEVycm9yKCdLZXkgaXMgbm90IGJvdW5kIGZvciBrZXlDb2RlPScra2V5Q29kZSk7fQprZXlNYXBba2V5Q29kZV09aG90S2V5O30KZm9yKGxldCBpPTA7aTxob3RLZXkua2V5Q29kZXMubGVuZ3RoO2krKyl7Y29uc3Qga2V5Q29kZT1ob3RLZXkua2V5Q29kZXNbaV07ZGVsZXRlIGtleU1hcFtrZXlDb2RlXTt9CnJldHVybiBob3RLZXk7fSxnZXQgZ2xvYmFsTW9kZSgpe3JldHVybiB0aGlzLmdsb2JhbE1vZGVfO30sc2V0IGdsb2JhbE1vZGUoZ2xvYmFsTW9kZSl7Y29uc3Qgd2FzQXR0YWNoZWQ9dGhpcy5pc0F0dGFjaGVkXztpZih3YXNBdHRhY2hlZCl7dGhpcy5kZXRhY2hlZCgpO30KdGhpcy5nbG9iYWxNb2RlXz0hIWdsb2JhbE1vZGU7aWYod2FzQXR0YWNoZWQpe3RoaXMuYXR0YWNoZWQoKTt9fSxnZXQgdG9wbW9zdENvbnJvbGxlcl8oKXtpZih0aGlzLnNsYXZlZFRvUGFyZW50Q29udHJvbGxlcl8pe3JldHVybiB0aGlzLnNsYXZlZFRvUGFyZW50Q29udHJvbGxlcl8udG9wbW9zdENvbnJvbGxlcl87fQpyZXR1cm4gdGhpczt9LGNoaWxkUmVxdWVzdHNHZW5lcmFsRm9jdXMoY2hpbGQpe2NvbnN0IHRvcG1vc3Q9dGhpcy50b3Btb3N0Q29ucm9sbGVyXztpZih0b3Btb3N0LmN1ckhvc3RfKXtpZih0b3Btb3N0LmN1ckhvc3RfLmhhc0F0dHJpYnV0ZSgndGFiSW5kZXgnKSl7dG9wbW9zdC5jdXJIb3N0Xy5mb2N1cygpO31lbHNle2lmKGRvY3VtZW50LmFjdGl2ZUVsZW1lbnQpe2RvY3VtZW50LmFjdGl2ZUVsZW1lbnQuYmx1cigpO319fWVsc2V7aWYoZG9jdW1lbnQuYWN0aXZlRWxlbWVudCl7ZG9jdW1lbnQuYWN0aXZlRWxlbWVudC5ibHVyKCk7fX19LGNoaWxkUmVxdWVzdHNCbHVyKGNoaWxkKXtjaGlsZC5ibHVyKCk7Y29uc3QgdG9wbW9zdD10aGlzLnRvcG1vc3RDb25yb2xsZXJfO2lmKHRvcG1vc3QuY3VySG9zdF8pe3RvcG1vc3QuY3VySG9zdF8uZm9jdXMoKTt9fSxmaW5kSG9zdF8oKXtpZih0aGlzLmdsb2JhbE1vZGVfKXJldHVybiB3cmFwKGRvY3VtZW50LmJvZHkpO2lmKHRoaXMucGFyZW50RWxlbWVudClyZXR1cm4gdGhpcy5wYXJlbnRFbGVtZW50O2lmKCFQb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlKXJldHVybiB0aGlzLmhvc3Q7bGV0IG5vZGU9dGhpcy5wYXJlbnROb2RlO3doaWxlKFBvbHltZXIuZG9tKG5vZGUpLnBhcmVudE5vZGUpbm9kZT1Qb2x5bWVyLmRvbShub2RlKS5wYXJlbnROb2RlO3JldHVybiBub2RlLmhvc3Q7fSxhcHBlbmRNYXRjaGluZ0hvdEtleXNUb18obWF0Y2hlZEhvdEtleXMsdXNlQ2FwdHVyZSxlKXtjb25zdCBsb2NhbEtleU1hcD10aGlzLmdldEtleU1hcEZvckV2ZW50VHlwZV8oZS50eXBlLHVzZUNhcHR1cmUpO2NvbnN0IGxvY2FsSG90S2V5PWxvY2FsS2V5TWFwW2Uua2V5Q29kZV07aWYobG9jYWxIb3RLZXkpe21hdGNoZWRIb3RLZXlzLnB1c2gobG9jYWxIb3RLZXkpO30KZm9yKGxldCBpPTA7aTx0aGlzLmNoaWxkQ29udHJvbGxlcnNfLmxlbmd0aDtpKyspe2NvbnN0IGNvbnRyb2xsZXI9dGhpcy5jaGlsZENvbnRyb2xsZXJzX1tpXTtjb250cm9sbGVyLmFwcGVuZE1hdGNoaW5nSG90S2V5c1RvXyhtYXRjaGVkSG90S2V5cyx1c2VDYXB0dXJlLGUpO319LG9uS2V5Xyh1c2VDYXB0dXJlLGUpe2lmKCF1c2VDYXB0dXJlJiZlLnBhdGhbMF0udGFnTmFtZT09PSdJTlBVVCcpcmV0dXJuO2xldCBzb3J0ZWRDb250cm9sbGVycztjb25zdCBtYXRjaGVkSG90S2V5cz1bXTt0aGlzLmFwcGVuZE1hdGNoaW5nSG90S2V5c1RvXyhtYXRjaGVkSG90S2V5cyx1c2VDYXB0dXJlLGUpO2lmKG1hdGNoZWRIb3RLZXlzLmxlbmd0aD09PTApcmV0dXJuIGZhbHNlO2lmKG1hdGNoZWRIb3RLZXlzLmxlbmd0aD4xKXt0aHJvdyBuZXcgRXJyb3IoJ01vcmUgdGhhbiBvbmUgaG90S2V5IGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCcpO30KY29uc3QgaG90S2V5PW1hdGNoZWRIb3RLZXlzWzBdO2xldCBwcmV2ZW50ZWQ9MDtwcmV2ZW50ZWR8PWhvdEtleS5jYWxsKGUpO3JldHVybiFwcmV2ZW50ZWQmJmUuZGVmYXVsdFByZXZlbnRlZDt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldEhvdGtleUNvbnRyb2xsZXJGb3JFbGVtZW50KHJlZkVsZW1lbnQpe2xldCBjdXJFbGVtZW50PXJlZkVsZW1lbnQ7d2hpbGUoY3VyRWxlbWVudCl7aWYoY3VyRWxlbWVudC50YWdOYW1lPT09J3R2LXVpLWItaG90a2V5LWNvbnRyb2xsZXInKXtyZXR1cm4gY3VyRWxlbWVudDt9CmlmKGN1ckVsZW1lbnQuX19ob3RrZXlDb250cm9sbGVyKXtyZXR1cm4gY3VyRWxlbWVudC5fX2hvdGtleUNvbnRyb2xsZXI7fQppZihjdXJFbGVtZW50LnBhcmVudEVsZW1lbnQpe2N1ckVsZW1lbnQ9Y3VyRWxlbWVudC5wYXJlbnRFbGVtZW50O2NvbnRpbnVlO30KY3VyRWxlbWVudD1maW5kSG9zdChjdXJFbGVtZW50KTt9CnJldHVybiB1bmRlZmluZWQ7fQpmdW5jdGlvbiBmaW5kSG9zdChpbml0aWFsTm9kZSl7bGV0IG5vZGU9aW5pdGlhbE5vZGU7d2hpbGUoUG9seW1lci5kb20obm9kZSkucGFyZW50Tm9kZSl7bm9kZT1Qb2x5bWVyLmRvbShub2RlKS5wYXJlbnROb2RlO30KcmV0dXJuIG5vZGUuaG9zdDt9CnJldHVybntnZXRIb3RrZXlDb250cm9sbGVyRm9yRWxlbWVudCx9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi1pbmZvLWJhcicscmVhZHkoKXt0aGlzLm1lc3NhZ2VFbF89dGhpcy4kLm1lc3NhZ2U7dGhpcy5idXR0b25zRWxfPXRoaXMuJC5idXR0b25zO3RoaXMubWVzc2FnZT0nJzt9LGdldCBtZXNzYWdlKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMubWVzc2FnZUVsXykudGV4dENvbnRlbnQ7fSxzZXQgbWVzc2FnZShtZXNzYWdlKXtQb2x5bWVyLmRvbSh0aGlzLm1lc3NhZ2VFbF8pLnRleHRDb250ZW50PW1lc3NhZ2U7fSxnZXQgdmlzaWJsZSgpe3JldHVybiF0aGlzLmhpZGRlbjt9LHNldCB2aXNpYmxlKHZpc2libGUpe3RoaXMuaGlkZGVuPSF2aXNpYmxlO30scmVtb3ZlQWxsQnV0dG9ucygpe1BvbHltZXIuZG9tKHRoaXMuYnV0dG9uc0VsXykudGV4dENvbnRlbnQ9Jyc7fSxhZGRCdXR0b24odGV4dCxjbGlja0NhbGxiYWNrKXtjb25zdCBidXR0b249ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnV0dG9uJyk7UG9seW1lci5kb20oYnV0dG9uKS50ZXh0Q29udGVudD10ZXh0O2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsZXZlbnQ9PmNsaWNrQ2FsbGJhY2soZXZlbnQsdGhpcykpO1BvbHltZXIuZG9tKHRoaXMuYnV0dG9uc0VsXykuYXBwZW5kQ2hpbGQoYnV0dG9uKTtyZXR1cm4gYnV0dG9uO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuPXRyLnVpLmIuZGVmaW5lKCdkaXYnKTtDb250YWluZXJUaGF0RGVjb3JhdGVzSXRzQ2hpbGRyZW4ucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5vYnNlcnZlcl89bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5kaWRNdXRhdGVfLmJpbmQodGhpcykpO3RoaXMub2JzZXJ2ZXJfLm9ic2VydmUodGhpcyx7Y2hpbGRMaXN0OnRydWV9KTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywndGV4dENvbnRlbnQnLHtnZXQ6dW5kZWZpbmVkLHNldDp0aGlzLm9uU2V0VGV4dENvbnRlbnRffSk7fSxhcHBlbmRDaGlsZCh4KXtIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUuYXBwZW5kQ2hpbGQuY2FsbCh0aGlzLHgpO3RoaXMuZGlkTXV0YXRlXyh0aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpKTt9LGluc2VydEJlZm9yZSh4LHkpe0hUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5pbnNlcnRCZWZvcmUuY2FsbCh0aGlzLHgseSk7dGhpcy5kaWRNdXRhdGVfKHRoaXMub2JzZXJ2ZXJfLnRha2VSZWNvcmRzKCkpO30scmVtb3ZlQ2hpbGQoeCl7SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLnJlbW92ZUNoaWxkLmNhbGwodGhpcyx4KTt0aGlzLmRpZE11dGF0ZV8odGhpcy5vYnNlcnZlcl8udGFrZVJlY29yZHMoKSk7fSxyZXBsYWNlQ2hpbGQoeCx5KXtIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUucmVwbGFjZUNoaWxkLmNhbGwodGhpcyx4LHkpO3RoaXMuZGlkTXV0YXRlXyh0aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpKTt9LG9uU2V0VGV4dENvbnRlbnRfKHRleHRDb250ZW50KXtpZih0ZXh0Q29udGVudCE9PScnKXt0aHJvdyBuZXcgRXJyb3IoJ3RleHRDb250ZW50IGNhbiBvbmx5IGJlIHNldCB0byBcJ1wnLicpO30KdGhpcy5jbGVhcigpO30sY2xlYXIoKXt3aGlsZShQb2x5bWVyLmRvbSh0aGlzKS5sYXN0Q2hpbGQpe0hUTUxEaXZFbGVtZW50LnByb3RvdHlwZS5yZW1vdmVDaGlsZC5jYWxsKHRoaXMsUG9seW1lci5kb20odGhpcykubGFzdENoaWxkKTt9CnRoaXMuZGlkTXV0YXRlXyh0aGlzLm9ic2VydmVyXy50YWtlUmVjb3JkcygpKTt9LGRpZE11dGF0ZV8ocmVjb3Jkcyl7dGhpcy5iZWdpbkRlY29yYXRpbmdfKCk7Zm9yKGxldCBpPTA7aTxyZWNvcmRzLmxlbmd0aDtpKyspe2NvbnN0IGFkZGVkTm9kZXM9cmVjb3Jkc1tpXS5hZGRlZE5vZGVzO2lmKGFkZGVkTm9kZXMpe2ZvcihsZXQgaj0wO2o8YWRkZWROb2Rlcy5sZW5ndGg7aisrKXt0aGlzLmRlY29yYXRlQ2hpbGRfKGFkZGVkTm9kZXNbal0pO319CmNvbnN0IHJlbW92ZWROb2Rlcz1yZWNvcmRzW2ldLnJlbW92ZWROb2RlcztpZihyZW1vdmVkTm9kZXMpe2ZvcihsZXQgaj0wO2o8cmVtb3ZlZE5vZGVzLmxlbmd0aDtqKyspe3RoaXMudW5kZWNvcmF0ZUNoaWxkXyhyZW1vdmVkTm9kZXNbal0pO319fQp0aGlzLmRvbmVEZWNvcmF0aW5nRm9yTm93XygpO30sZGVjb3JhdGVDaGlsZF8oY2hpbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSx1bmRlY29yYXRlQ2hpbGRfKGNoaWxkKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sYmVnaW5EZWNvcmF0aW5nXygpe30sZG9uZURlY29yYXRpbmdGb3JOb3dfKCl7fX07cmV0dXJue0NvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBMaXN0Vmlldz10ci51aS5iLmRlZmluZSgneC1saXN0LXZpZXcnLHRyLnVpLmIuQ29udGFpbmVyVGhhdERlY29yYXRlc0l0c0NoaWxkcmVuKTtMaXN0Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbi5wcm90b3R5cGUsZGVjb3JhdGUoKXt0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbi5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd4LWxpc3QtdmlldycpO3RoaXMuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuc3R5bGUudXNlclNlbGVjdD0nbm9uZSc7dGhpcy5zdHlsZS5vdXRsaW5lPSdub25lJzt0aGlzLm9uSXRlbUNsaWNrZWRfPXRoaXMub25JdGVtQ2xpY2tlZF8uYmluZCh0aGlzKTt0aGlzLm9uS2V5RG93bl89dGhpcy5vbktleURvd25fLmJpbmQodGhpcyk7dGhpcy50YWJJbmRleD0wO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5vbktleURvd25fKTt0aGlzLnNlbGVjdGlvbkNoYW5nZWRfPWZhbHNlO30sZGVjb3JhdGVDaGlsZF8oaXRlbSl7UG9seW1lci5kb20oaXRlbSkuY2xhc3NMaXN0LmFkZCgnbGlzdC1pdGVtJyk7aXRlbS5zdHlsZS5wYWRkaW5nVG9wPScycHgnO2l0ZW0uc3R5bGUucGFkZGluZ1JpZ2h0PSc0cHgnO2l0ZW0uc3R5bGUucGFkZGluZ0JvdHRvbT0nMnB4JztpdGVtLnN0eWxlLnBhZGRpbmdMZWZ0PSc0cHgnO2l0ZW0uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25JdGVtQ2xpY2tlZF8sdHJ1ZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGl0ZW0sJ3NlbGVjdGVkJyx7Y29uZmlndXJhYmxlOnRydWUsZ2V0OigpPT5pdGVtLmhhc0F0dHJpYnV0ZSgnc2VsZWN0ZWQnKSxzZXQ6dmFsdWU9Pntjb25zdCBvbGRTZWxlY3Rpb249dGhpcy5zZWxlY3RlZEVsZW1lbnQ7aWYob2xkU2VsZWN0aW9uJiZvbGRTZWxlY3Rpb24hPT1pdGVtJiZ2YWx1ZSl7UG9seW1lci5kb20odGhpcy5zZWxlY3RlZEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTt9CmlmKHZhbHVlKXtQb2x5bWVyLmRvbShpdGVtKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJywnc2VsZWN0ZWQnKTtpdGVtLnN0eWxlLmJhY2tncm91bmRDb2xvcj0ncmdiKDE3MSwgMjE3LCAyMDIpJztpdGVtLnN0eWxlLm91dGxpbmU9JzFweCBkb3R0ZWQgcmdiYSgwLDAsMCwwLjEpJztpdGVtLnN0eWxlLm91dGxpbmVPZmZzZXQ9MDt9ZWxzZXtQb2x5bWVyLmRvbShpdGVtKS5yZW1vdmVBdHRyaWJ1dGUoJ3NlbGVjdGVkJyk7aXRlbS5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9Jyc7fQpjb25zdCBuZXdTZWxlY3Rpb249dGhpcy5zZWxlY3RlZEVsZW1lbnQ7aWYobmV3U2VsZWN0aW9uIT09b2xkU2VsZWN0aW9uKXt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZWQnLGZhbHNlKTt9fSx9KTt9LHVuZGVjb3JhdGVDaGlsZF8oaXRlbSl7dGhpcy5zZWxlY3Rpb25DaGFuZ2VkX3w9aXRlbS5zZWxlY3RlZDtQb2x5bWVyLmRvbShpdGVtKS5jbGFzc0xpc3QucmVtb3ZlKCdsaXN0LWl0ZW0nKTtpdGVtLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uSXRlbUNsaWNrZWRfKTtkZWxldGUgaXRlbS5zZWxlY3RlZDt9LGJlZ2luRGVjb3JhdGluZ18oKXt0aGlzLnNlbGVjdGlvbkNoYW5nZWRfPWZhbHNlO30sZG9uZURlY29yYXRpbmdGb3JOb3dfKCl7aWYodGhpcy5zZWxlY3Rpb25DaGFuZ2VkXyl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fX0sZ2V0IHNlbGVjdGVkRWxlbWVudCgpe2NvbnN0IGVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5saXN0LWl0ZW1bc2VsZWN0ZWRdJyk7aWYoIWVsKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGVsO30sc2V0IHNlbGVjdGVkRWxlbWVudChlbCl7aWYoIWVsKXtpZih0aGlzLnNlbGVjdGVkRWxlbWVudCl7dGhpcy5zZWxlY3RlZEVsZW1lbnQuc2VsZWN0ZWQ9ZmFsc2U7fQpyZXR1cm47fQppZihlbC5wYXJlbnRFbGVtZW50IT09dGhpcyl7dGhyb3cgbmV3IEVycm9yKCdDYW4gb25seSBzZWxlY3QgZWxlbWVudHMgdGhhdCBhcmUgY2hpbGRyZW4gb2YgdGhpcyBsaXN0IHZpZXcnKTt9CmVsLnNlbGVjdGVkPXRydWU7fSxnZXRFbGVtZW50QnlJbmRleChpbmRleCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5saXN0LWl0ZW06bnRoLWNoaWxkKCcraW5kZXgrJyknKTt9LGNsZWFyKCl7Y29uc3QgY2hhbmdlZD10aGlzLnNlbGVjdGVkRWxlbWVudCE9PXVuZGVmaW5lZDt0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbi5wcm90b3R5cGUuY2xlYXIuY2FsbCh0aGlzKTtpZihjaGFuZ2VkKXt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZWQnLGZhbHNlKTt9fSxvbkl0ZW1DbGlja2VkXyhlKXtjb25zdCBjdXJyZW50U2VsZWN0ZWRFbGVtZW50PXRoaXMuc2VsZWN0ZWRFbGVtZW50O2lmKGN1cnJlbnRTZWxlY3RlZEVsZW1lbnQpe1BvbHltZXIuZG9tKGN1cnJlbnRTZWxlY3RlZEVsZW1lbnQpLnJlbW92ZUF0dHJpYnV0ZSgnc2VsZWN0ZWQnKTt9CmxldCBlbGVtZW50PWUudGFyZ2V0O3doaWxlKGVsZW1lbnQucGFyZW50RWxlbWVudCE9PXRoaXMpe2VsZW1lbnQ9ZWxlbWVudC5wYXJlbnRFbGVtZW50O30KaWYoZWxlbWVudCE9PWN1cnJlbnRTZWxlY3RlZEVsZW1lbnQpe1BvbHltZXIuZG9tKGVsZW1lbnQpLnNldEF0dHJpYnV0ZSgnc2VsZWN0ZWQnLCdzZWxlY3RlZCcpO30KdHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmYWxzZSk7fSxvbktleURvd25fKGUpe2lmKHRoaXMuc2VsZWN0ZWRFbGVtZW50PT09dW5kZWZpbmVkKXJldHVybjtpZihlLmtleUNvZGU9PT0zOCl7Y29uc3QgcHJldj1Qb2x5bWVyLmRvbSh0aGlzLnNlbGVjdGVkRWxlbWVudCkucHJldmlvdXNTaWJsaW5nO2lmKHByZXYpe3ByZXYuc2VsZWN0ZWQ9dHJ1ZTt0ci51aS5iLnNjcm9sbEludG9WaWV3SWZOZWVkZWQocHJldik7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO319ZWxzZSBpZihlLmtleUNvZGU9PT00MCl7Y29uc3QgbmV4dD1Qb2x5bWVyLmRvbSh0aGlzLnNlbGVjdGVkRWxlbWVudCkubmV4dFNpYmxpbmc7aWYobmV4dCl7bmV4dC5zZWxlY3RlZD10cnVlO3RyLnVpLmIuc2Nyb2xsSW50b1ZpZXdJZk5lZWRlZChuZXh0KTtlLnByZXZlbnREZWZhdWx0KCk7cmV0dXJuIHRydWU7fX19LGFkZEl0ZW0odGV4dENvbnRlbnQpe2NvbnN0IGl0ZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20oaXRlbSkudGV4dENvbnRlbnQ9dGV4dENvbnRlbnQ7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoaXRlbSk7aXRlbS5zdHlsZS51c2VyU2VsZWN0PSdub25lJztyZXR1cm4gaXRlbTt9fTtyZXR1cm57TGlzdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTU9VU0VfU0VMRUNUT1JfTU9ERT17fTtNT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTj0weDE7TU9VU0VfU0VMRUNUT1JfTU9ERS5QQU5TQ0FOPTB4MjtNT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT009MHg0O01PVVNFX1NFTEVDVE9SX01PREUuVElNSU5HPTB4ODtNT1VTRV9TRUxFQ1RPUl9NT0RFLlJPVEFURT0weDEwO01PVVNFX1NFTEVDVE9SX01PREUuQUxMX01PREVTPTB4MUY7Y29uc3QgTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPUz17fTtNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTl09e25hbWU6J1BBTlNDQU4nLG1vZGU6TU9VU0VfU0VMRUNUT1JfTU9ERS5QQU5TQ0FOLHRpdGxlOidwYW4nLGV2ZW50TmFtZXM6e2VudGVyOidlbnRlcnBhbicsYmVnaW46J2JlZ2lucGFuJyx1cGRhdGU6J3VwZGF0ZXBhbicsZW5kOidlbmRwYW4nLGV4aXQ6J2V4aXRwYW4nfSxhY3RpdmVCYWNrZ3JvdW5kUG9zaXRpb246Jy0zMHB4IC0xMHB4JyxkZWZhdWx0QmFja2dyb3VuZFBvc2l0aW9uOicwIC0xMHB4J307TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1tNT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTl09e25hbWU6J1NFTEVDVElPTicsbW9kZTpNT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTix0aXRsZTonc2VsZWN0aW9uJyxldmVudE5hbWVzOntlbnRlcjonZW50ZXJzZWxlY3Rpb24nLGJlZ2luOidiZWdpbnNlbGVjdGlvbicsdXBkYXRlOid1cGRhdGVzZWxlY3Rpb24nLGVuZDonZW5kc2VsZWN0aW9uJyxleGl0OidleGl0c2VsZWN0aW9uJ30sYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uOictMzBweCAtNDBweCcsZGVmYXVsdEJhY2tncm91bmRQb3NpdGlvbjonMCAtNDBweCd9O01PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbTU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NXT17bmFtZTonWk9PTScsbW9kZTpNT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT00sdGl0bGU6J3pvb20nLGV2ZW50TmFtZXM6e2VudGVyOidlbnRlcnpvb20nLGJlZ2luOidiZWdpbnpvb20nLHVwZGF0ZTondXBkYXRlem9vbScsZW5kOidlbmR6b29tJyxleGl0OidleGl0em9vbSd9LGFjdGl2ZUJhY2tncm91bmRQb3NpdGlvbjonLTMwcHggLTcwcHgnLGRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb246JzAgLTcwcHgnfTtNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuVElNSU5HXT17bmFtZTonVElNSU5HJyxtb2RlOk1PVVNFX1NFTEVDVE9SX01PREUuVElNSU5HLHRpdGxlOid0aW1pbmcnLGV2ZW50TmFtZXM6e2VudGVyOidlbnRlcnRpbWluZycsYmVnaW46J2JlZ2ludGltaW5nJyx1cGRhdGU6J3VwZGF0ZXRpbWluZycsZW5kOidlbmR0aW1pbmcnLGV4aXQ6J2V4aXR0aW1pbmcnfSxhY3RpdmVCYWNrZ3JvdW5kUG9zaXRpb246Jy0zMHB4IC0xMDBweCcsZGVmYXVsdEJhY2tncm91bmRQb3NpdGlvbjonMCAtMTAwcHgnfTtNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuUk9UQVRFXT17bmFtZTonUk9UQVRFJyxtb2RlOk1PVVNFX1NFTEVDVE9SX01PREUuUk9UQVRFLHRpdGxlOidyb3RhdGUnLGV2ZW50TmFtZXM6e2VudGVyOidlbnRlcnJvdGF0ZScsYmVnaW46J2JlZ2lucm90YXRlJyx1cGRhdGU6J3VwZGF0ZXJvdGF0ZScsZW5kOidlbmRyb3RhdGUnLGV4aXQ6J2V4aXRyb3RhdGUnfSxhY3RpdmVCYWNrZ3JvdW5kUG9zaXRpb246Jy0zMHB4IC0xMzBweCcsZGVmYXVsdEJhY2tncm91bmRQb3NpdGlvbjonMCAtMTMwcHgnfTtyZXR1cm57TU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPUyxNT1VTRV9TRUxFQ1RPUl9NT0RFLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLW1vdXNlLW1vZGUtaWNvbicscHJvcGVydGllczp7bW9kZU5hbWU6e3R5cGU6U3RyaW5nLHJlZmxlY3RUb0F0dHJpYnV0ZTp0cnVlLG9ic2VydmVyOidtb2RlTmFtZUNoYW5nZWQnfSx9LGNyZWF0ZWQoKXt0aGlzLmFjdGl2ZV89ZmFsc2U7dGhpcy5hY2NlbGVyYXRvcktleV89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IG1vZGUoKXtyZXR1cm4gdHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFW3RoaXMubW9kZU5hbWVdO30sc2V0IG1vZGUobW9kZSl7Y29uc3QgbW9kZUluZm89dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW21vZGVdO2lmKG1vZGVJbmZvPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbW9kZScpO30KdGhpcy5tb2RlTmFtZT1tb2RlSW5mby5uYW1lO30sbW9kZU5hbWVDaGFuZ2VkKCl7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBhY3RpdmUoKXtyZXR1cm4gdGhpcy5hY3RpdmVfO30sc2V0IGFjdGl2ZShhY3RpdmUpe3RoaXMuYWN0aXZlXz0hIWFjdGl2ZTtpZih0aGlzLmFjdGl2ZV8pe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2FjdGl2ZScpO31lbHNle1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5yZW1vdmUoJ2FjdGl2ZScpO30KdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBhY2NlbGVyYXRvcktleSgpe3JldHVybiB0aGlzLmFjY2VsZXJhdG9yS2V5Xzt9LHNldCBhY2NlbGVyYXRvcktleShhY2NlbGVyYXRvcktleSl7dGhpcy5hY2NlbGVyYXRvcktleV89YWNjZWxlcmF0b3JLZXk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMubW9kZU5hbWU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IG1vZGU9dGhpcy5tb2RlO2lmKG1vZGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBtb2RlJyk7fQpjb25zdCBtb2RlSW5mbz10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbbW9kZV07aWYoIW1vZGVJbmZvKXt0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgbW9kZScpO30KbGV0IHRpdGxlPW1vZGVJbmZvLnRpdGxlO2lmKHRoaXMuYWNjZWxlcmF0b3JLZXlfKXt0aXRsZT10aXRsZSsnICgnK3RoaXMuYWNjZWxlcmF0b3JLZXlfKycpJzt9CnRoaXMudGl0bGU9dGl0bGU7bGV0IGJwO2lmKHRoaXMuYWN0aXZlXyl7YnA9bW9kZUluZm8uYWN0aXZlQmFja2dyb3VuZFBvc2l0aW9uO31lbHNle2JwPW1vZGVJbmZvLmRlZmF1bHRCYWNrZ3JvdW5kUG9zaXRpb247fQp0aGlzLnN0eWxlLmJhY2tncm91bmRQb3NpdGlvbj1icDt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIE1vdXNlVHJhY2tlcihvcHRfdGFyZ2V0RWxlbWVudCl7dGhpcy5vbk1vdXNlRG93bl89dGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTt0aGlzLm9uTW91c2VNb3ZlXz10aGlzLm9uTW91c2VNb3ZlXy5iaW5kKHRoaXMpO3RoaXMub25Nb3VzZVVwXz10aGlzLm9uTW91c2VVcF8uYmluZCh0aGlzKTt0aGlzLnRhcmdldEVsZW1lbnQ9b3B0X3RhcmdldEVsZW1lbnQ7fQpNb3VzZVRyYWNrZXIucHJvdG90eXBlPXtnZXQgdGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLnRhcmdldEVsZW1lbnRfO30sc2V0IHRhcmdldEVsZW1lbnQodGFyZ2V0RWxlbWVudCl7aWYodGhpcy50YXJnZXRFbGVtZW50Xyl7dGhpcy50YXJnZXRFbGVtZW50Xy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fKTt9CnRoaXMudGFyZ2V0RWxlbWVudF89dGFyZ2V0RWxlbWVudDtpZih0aGlzLnRhcmdldEVsZW1lbnRfKXt0aGlzLnRhcmdldEVsZW1lbnRfLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO319LG9uTW91c2VEb3duXyhlKXtpZihlLmJ1dHRvbiE9PTApcmV0dXJuIHRydWU7ZT10aGlzLnJlbWFrZUV2ZW50XyhlLCdtb3VzZS10cmFja2VyLXN0YXJ0Jyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsdGhpcy5vbk1vdXNlTW92ZV8pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNldXAnLHRoaXMub25Nb3VzZVVwXyk7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdibHVyJyx0aGlzLm9uTW91c2VVcF8pO3RoaXMuc2F2ZVByZXZpb3VzVXNlclNlbGVjdF89ZG9jdW1lbnQuYm9keS5zdHlsZVsnLXdlYmtpdC11c2VyLXNlbGVjdCddO2RvY3VtZW50LmJvZHkuc3R5bGVbJy13ZWJraXQtdXNlci1zZWxlY3QnXT0nbm9uZSc7ZS5wcmV2ZW50RGVmYXVsdCgpO3JldHVybiB0cnVlO30sb25Nb3VzZU1vdmVfKGUpe2U9dGhpcy5yZW1ha2VFdmVudF8oZSwnbW91c2UtdHJhY2tlci1tb3ZlJyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO30sb25Nb3VzZVVwXyhlKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJyx0aGlzLm9uTW91c2VVcF8pO3RoaXMudGFyZ2V0RWxlbWVudF8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignYmx1cicsdGhpcy5vbk1vdXNlVXBfKTtkb2N1bWVudC5ib2R5LnN0eWxlWyctd2Via2l0LXVzZXItc2VsZWN0J109dGhpcy5zYXZlUHJldmlvdXNVc2VyU2VsZWN0XztlPXRoaXMucmVtYWtlRXZlbnRfKGUsJ21vdXNlLXRyYWNrZXItZW5kJyk7dGhpcy50YXJnZXRFbGVtZW50Xy5kaXNwYXRjaEV2ZW50KGUpO30scmVtYWtlRXZlbnRfKGUsbmV3VHlwZSl7Y29uc3QgcmVtYWRlPW5ldyB0ci5iLkV2ZW50KG5ld1R5cGUsdHJ1ZSx0cnVlKTtyZW1hZGUueD1lLng7cmVtYWRlLnk9ZS55O3JlbWFkZS5vZmZzZXRYPWUub2Zmc2V0WDtyZW1hZGUub2Zmc2V0WT1lLm9mZnNldFk7cmVtYWRlLmNsaWVudFg9ZS5jbGllbnRYO3JlbWFkZS5jbGllbnRZPWUuY2xpZW50WTtyZXR1cm4gcmVtYWRlO319O2Z1bmN0aW9uIHRyYWNrTW91c2VNb3Zlc1VudGlsTW91c2VVcChtb3VzZU1vdmVIYW5kbGVyLG9wdF9tb3VzZVVwSGFuZGxlcixvcHRfa2V5VXBIYW5kbGVyKXtmdW5jdGlvbiBjbGVhbnVwQW5kRGlzcGF0Y2hUb01vdXNlVXAoZSl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyxtb3VzZU1vdmVIYW5kbGVyKTtpZihvcHRfa2V5VXBIYW5kbGVyKXtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsb3B0X2tleVVwSGFuZGxlcik7fQpkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZXVwJyxjbGVhbnVwQW5kRGlzcGF0Y2hUb01vdXNlVXApO2lmKG9wdF9tb3VzZVVwSGFuZGxlcil7b3B0X21vdXNlVXBIYW5kbGVyKGUpO319CmRvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbW92ZScsbW91c2VNb3ZlSGFuZGxlcik7aWYob3B0X2tleVVwSGFuZGxlcil7ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5dXAnLG9wdF9rZXlVcEhhbmRsZXIpO30KZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsY2xlYW51cEFuZERpc3BhdGNoVG9Nb3VzZVVwKTt9CnJldHVybntNb3VzZVRyYWNrZXIsdHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IE1PVVNFX1NFTEVDVE9SX01PREU9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFO2NvbnN0IE1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1M9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TO2NvbnN0IE1JTl9NT1VTRV9TRUxFQ1RJT05fRElTVEFOQ0U9NDtjb25zdCBNT0RJRklFUj17U0hJRlQ6MHgxLFNQQUNFOjB4MixDTURfT1JfQ1RSTDoweDR9O2Z1bmN0aW9uIGlzQ21kT3JDdHJsUHJlc3NlZChldmVudCl7aWYodHIuaXNNYWMpcmV0dXJuIGV2ZW50Lm1ldGFLZXk7cmV0dXJuIGV2ZW50LmN0cmxLZXk7fQpQb2x5bWVyKHtpczondHItdWktYi1tb3VzZS1tb2RlLXNlbGVjdG9yJyxjcmVhdGVkKCl7dGhpcy5zdXBwb3J0ZWRNb2RlTWFza189TU9VU0VfU0VMRUNUT1JfTU9ERS5BTExfTU9ERVM7dGhpcy5pbml0aWFsUmVsYXRpdmVNb3VzZURvd25Qb3NfPXt4OjAseTowfTt0aGlzLmRlZmF1bHRNb2RlXz1NT1VTRV9TRUxFQ1RPUl9NT0RFLlBBTlNDQU47dGhpcy5zZXR0aW5nc0tleV89dW5kZWZpbmVkO3RoaXMubW91c2VQb3NfPXt4OjAseTowfTt0aGlzLm1vdXNlRG93blBvc189e3g6MCx5OjB9O3RoaXMub25Nb3VzZURvd25fPXRoaXMub25Nb3VzZURvd25fLmJpbmQodGhpcyk7dGhpcy5vbk1vdXNlTW92ZV89dGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKTt0aGlzLm9uTW91c2VVcF89dGhpcy5vbk1vdXNlVXBfLmJpbmQodGhpcyk7dGhpcy5vbktleURvd25fPXRoaXMub25LZXlEb3duXy5iaW5kKHRoaXMpO3RoaXMub25LZXlVcF89dGhpcy5vbktleVVwXy5iaW5kKHRoaXMpO3RoaXMubW9kZV89dW5kZWZpbmVkO3RoaXMubW9kZVRvS2V5Q29kZU1hcF89e307dGhpcy5tb2RpZmllclRvTW9kZU1hcF89e307dGhpcy50YXJnZXRFbGVtZW50Xz11bmRlZmluZWQ7dGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXz1udWxsO3RoaXMuaXNJbnRlcmFjdGluZ189ZmFsc2U7dGhpcy5pc0NsaWNrXz1mYWxzZTt9LHJlYWR5KCl7dGhpcy5idXR0b25zRWxfPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvcignLmJ1dHRvbnMnKTt0aGlzLmRyYWdIYW5kbGVFbF89UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCcuZHJhZy1oYW5kbGUnKTt0aGlzLnN1cHBvcnRlZE1vZGVNYXNrPU1PVVNFX1NFTEVDVE9SX01PREUuQUxMX01PREVTO3RoaXMuZHJhZ0hhbmRsZUVsXy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25EcmFnSGFuZGxlTW91c2VEb3duXy5iaW5kKHRoaXMpKTt0aGlzLmJ1dHRvbnNFbF8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2V1cCcsdGhpcy5vbkJ1dHRvbk1vdXNlVXBfKTt0aGlzLmJ1dHRvbnNFbF8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vkb3duJyx0aGlzLm9uQnV0dG9uTW91c2VEb3duXyk7dGhpcy5idXR0b25zRWxfLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uQnV0dG9uUHJlc3NfLmJpbmQodGhpcykpO30sYXR0YWNoZWQoKXtkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8pO2RvY3VtZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2tleXVwJyx0aGlzLm9uS2V5VXBfKTt9LGRldGFjaGVkKCl7ZG9jdW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5vbktleURvd25fKTtkb2N1bWVudC5yZW1vdmVFdmVudExpc3RlbmVyKCdrZXl1cCcsdGhpcy5vbktleVVwXyk7fSxnZXQgdGFyZ2V0RWxlbWVudCgpe3JldHVybiB0aGlzLnRhcmdldEVsZW1lbnRfO30sc2V0IHRhcmdldEVsZW1lbnQodGFyZ2V0KXtpZih0aGlzLnRhcmdldEVsZW1lbnRfKXt0aGlzLnRhcmdldEVsZW1lbnRfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO30KdGhpcy50YXJnZXRFbGVtZW50Xz10YXJnZXQ7aWYodGhpcy50YXJnZXRFbGVtZW50Xyl7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fKTt9fSxnZXQgZGVmYXVsdE1vZGUoKXtyZXR1cm4gdGhpcy5kZWZhdWx0TW9kZV87fSxzZXQgZGVmYXVsdE1vZGUoZGVmYXVsdE1vZGUpe3RoaXMuZGVmYXVsdE1vZGVfPWRlZmF1bHRNb2RlO30sZ2V0IHNldHRpbmdzS2V5KCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NLZXlfO30sc2V0IHNldHRpbmdzS2V5KHNldHRpbmdzS2V5KXt0aGlzLnNldHRpbmdzS2V5Xz1zZXR0aW5nc0tleTtpZighdGhpcy5zZXR0aW5nc0tleV8pcmV0dXJuO2xldCBtb2RlPXRyLmIuU2V0dGluZ3MuZ2V0KHRoaXMuc2V0dGluZ3NLZXlfKycubW9kZScsdW5kZWZpbmVkKTtpZihNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW21vZGVdPT09dW5kZWZpbmVkKXttb2RlPXVuZGVmaW5lZDt9CmlmKChtb2RlJnRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfKT09PTApe21vZGU9dW5kZWZpbmVkO30KaWYoIW1vZGUpbW9kZT10aGlzLmRlZmF1bHRNb2RlXzt0aGlzLm1vZGU9bW9kZTtjb25zdCBwb3M9dHIuYi5TZXR0aW5ncy5nZXQodGhpcy5zZXR0aW5nc0tleV8rJy5wb3MnLHVuZGVmaW5lZCk7aWYocG9zKXRoaXMucG9zPXBvczt9LGdldCBzdXBwb3J0ZWRNb2RlTWFzaygpe3JldHVybiB0aGlzLnN1cHBvcnRlZE1vZGVNYXNrXzt9LHNldCBzdXBwb3J0ZWRNb2RlTWFzayhzdXBwb3J0ZWRNb2RlTWFzayl7aWYodGhpcy5tb2RlJiYoc3VwcG9ydGVkTW9kZU1hc2smdGhpcy5tb2RlKT09PTApe3Rocm93IG5ldyBFcnJvcignc3VwcG9ydGVkTW9kZU1hc2sgbXVzdCBpbmNsdWRlIGN1cnJlbnQgbW9kZS4nKTt9CmZ1bmN0aW9uIGNyZWF0ZUJ1dHRvbkZvck1vZGUobW9kZSl7cmV0dXJuIGJ1dHRvbjt9CnRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfPXN1cHBvcnRlZE1vZGVNYXNrO1BvbHltZXIuZG9tKHRoaXMuYnV0dG9uc0VsXykudGV4dENvbnRlbnQ9Jyc7Zm9yKGNvbnN0IG1vZGVOYW1lIGluIE1PVVNFX1NFTEVDVE9SX01PREUpe2lmKG1vZGVOYW1lPT09J0FMTF9NT0RFUycpY29udGludWU7Y29uc3QgbW9kZT1NT1VTRV9TRUxFQ1RPUl9NT0RFW21vZGVOYW1lXTtpZigodGhpcy5zdXBwb3J0ZWRNb2RlTWFza18mbW9kZSk9PT0wKWNvbnRpbnVlO2NvbnN0IGJ1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLW1vdXNlLW1vZGUtaWNvbicpO2J1dHRvbi5tb2RlPW1vZGU7UG9seW1lci5kb20oYnV0dG9uKS5jbGFzc0xpc3QuYWRkKCd0b29sLWJ1dHRvbicpO1BvbHltZXIuZG9tKHRoaXMuYnV0dG9uc0VsXykuYXBwZW5kQ2hpbGQoYnV0dG9uKTt9fSxnZXRCdXR0b25Gb3JNb2RlXyhtb2RlKXtmb3IobGV0IGk9MDtpPHRoaXMuYnV0dG9uc0VsXy5jaGlsZHJlbi5sZW5ndGg7aSsrKXtjb25zdCBidXR0b25FbD10aGlzLmJ1dHRvbnNFbF8uY2hpbGRyZW5baV07aWYoYnV0dG9uRWwubW9kZT09PW1vZGUpe3JldHVybiBidXR0b25FbDt9fQpyZXR1cm4gdW5kZWZpbmVkO30sZ2V0IG1vZGUoKXtyZXR1cm4gdGhpcy5jdXJyZW50TW9kZV87fSxzZXQgbW9kZShuZXdNb2RlKXtpZihuZXdNb2RlIT09dW5kZWZpbmVkKXtpZih0eXBlb2YgbmV3TW9kZSE9PSdudW1iZXInKXt0aHJvdyBuZXcgRXJyb3IoJ01vZGUgbXVzdCBiZSBhIG51bWJlcicpO30KaWYoKG5ld01vZGUmdGhpcy5zdXBwb3J0ZWRNb2RlTWFza18pPT09MCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3Qgc3dpdGNoIHRvIHRoaXMgbW9kZSwgaXQgaXMgbm90IHN1cHBvcnRlZCcpO30KaWYoTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1tuZXdNb2RlXT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdVbnJlY29nbml6ZWQgbW9kZScpO319CmxldCBtb2RlSW5mbztpZih0aGlzLmN1cnJlbnRNb2RlXz09PW5ld01vZGUpcmV0dXJuO2lmKHRoaXMuY3VycmVudE1vZGVfKXtjb25zdCBidXR0b25FbD10aGlzLmdldEJ1dHRvbkZvck1vZGVfKHRoaXMuY3VycmVudE1vZGVfKTtpZihidXR0b25FbClidXR0b25FbC5hY3RpdmU9ZmFsc2U7aWYodGhpcy5pc0ludGVyYWN0aW5nXyl7Y29uc3QgbW91c2VFdmVudD10aGlzLmNyZWF0ZUV2ZW50XyhNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMubW9kZV0uZXZlbnROYW1lcy5lbmQpO3RoaXMuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTt9Cm1vZGVJbmZvPU1PVVNFX1NFTEVDVE9SX01PREVfSU5GT1NbdGhpcy5jdXJyZW50TW9kZV9dO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLG1vZGVJbmZvLmV2ZW50TmFtZXMuZXhpdCx0cnVlKTt9CnRoaXMuY3VycmVudE1vZGVfPW5ld01vZGU7aWYodGhpcy5jdXJyZW50TW9kZV8pe2NvbnN0IGJ1dHRvbkVsPXRoaXMuZ2V0QnV0dG9uRm9yTW9kZV8odGhpcy5jdXJyZW50TW9kZV8pO2lmKGJ1dHRvbkVsKWJ1dHRvbkVsLmFjdGl2ZT10cnVlO3RoaXMubW91c2VEb3duUG9zXy54PXRoaXMubW91c2VQb3NfLng7dGhpcy5tb3VzZURvd25Qb3NfLnk9dGhpcy5tb3VzZVBvc18ueTttb2RlSW5mbz1NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMuY3VycmVudE1vZGVfXTtpZighdGhpcy5pc0luQWx0ZXJuYXRpdmVNb2RlXyl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsbW9kZUluZm8uZXZlbnROYW1lcy5lbnRlcix0cnVlKTt9CmlmKHRoaXMuaXNJbnRlcmFjdGluZ18pe2NvbnN0IG1vdXNlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudF8oTU9VU0VfU0VMRUNUT1JfTU9ERV9JTkZPU1t0aGlzLm1vZGVdLmV2ZW50TmFtZXMuYmVnaW4pO3RoaXMuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTt9fQppZih0aGlzLnNldHRpbmdzS2V5XyYmIXRoaXMuaXNJbkFsdGVybmF0aXZlTW9kZV8pe3RyLmIuU2V0dGluZ3Muc2V0KHRoaXMuc2V0dGluZ3NLZXlfKycubW9kZScsdGhpcy5tb2RlKTt9fSxzZXRLZXlDb2RlRm9yTW9kZShtb2RlLGtleUNvZGUpe2lmKChtb2RlJnRoaXMuc3VwcG9ydGVkTW9kZU1hc2tfKT09PTApe3Rocm93IG5ldyBFcnJvcignTW9kZSBub3Qgc3VwcG9ydGVkJyk7fQp0aGlzLm1vZGVUb0tleUNvZGVNYXBfW21vZGVdPWtleUNvZGU7aWYoIXRoaXMuYnV0dG9uc0VsXylyZXR1cm47Y29uc3QgYnV0dG9uRWw9dGhpcy5nZXRCdXR0b25Gb3JNb2RlXyhtb2RlKTtpZihidXR0b25FbCl7YnV0dG9uRWwuYWNjZWxlcmF0b3JLZXk9U3RyaW5nLmZyb21DaGFyQ29kZShrZXlDb2RlKTt9fSxzZXRDdXJyZW50TW91c2VQb3NGcm9tRXZlbnRfKGUpe3RoaXMubW91c2VQb3NfLng9ZS5jbGllbnRYO3RoaXMubW91c2VQb3NfLnk9ZS5jbGllbnRZO30sY3JlYXRlRXZlbnRfKGV2ZW50TmFtZSxzb3VyY2VFdmVudCl7Y29uc3QgZXZlbnQ9bmV3IHRyLmIuRXZlbnQoZXZlbnROYW1lLHRydWUpO2V2ZW50LmNsaWVudFg9dGhpcy5tb3VzZVBvc18ueDtldmVudC5jbGllbnRZPXRoaXMubW91c2VQb3NfLnk7ZXZlbnQuZGVsdGFYPXRoaXMubW91c2VQb3NfLngtdGhpcy5tb3VzZURvd25Qb3NfLng7ZXZlbnQuZGVsdGFZPXRoaXMubW91c2VQb3NfLnktdGhpcy5tb3VzZURvd25Qb3NfLnk7ZXZlbnQubW91c2VEb3duWD10aGlzLm1vdXNlRG93blBvc18ueDtldmVudC5tb3VzZURvd25ZPXRoaXMubW91c2VEb3duUG9zXy55O2V2ZW50LmRpZFByZXZlbnREZWZhdWx0PWZhbHNlO2V2ZW50LnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7ZXZlbnQuZGlkUHJldmVudERlZmF1bHQ9dHJ1ZTtpZihzb3VyY2VFdmVudCl7c291cmNlRXZlbnQucHJldmVudERlZmF1bHQoKTt9fTtldmVudC5zdG9wUHJvcGFnYXRpb249ZnVuY3Rpb24oKXtzb3VyY2VFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt9O2V2ZW50LnN0b3BJbW1lZGlhdGVQcm9wYWdhdGlvbj1mdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fTtyZXR1cm4gZXZlbnQ7fSxvbk1vdXNlRG93bl8oZSl7aWYoZS5idXR0b24hPT0wKXJldHVybjt0aGlzLnNldEN1cnJlbnRNb3VzZVBvc0Zyb21FdmVudF8oZSk7Y29uc3QgbW91c2VFdmVudD10aGlzLmNyZWF0ZUV2ZW50XyhNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMubW9kZV0uZXZlbnROYW1lcy5iZWdpbixlKTtpZih0aGlzLm1vZGU9PT1NT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTil7bW91c2VFdmVudC5hcHBlbmRTZWxlY3Rpb249aXNDbWRPckN0cmxQcmVzc2VkKGUpO30KdGhpcy5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpO3RoaXMuaXNJbnRlcmFjdGluZ189dHJ1ZTt0aGlzLmlzQ2xpY2tfPXRydWU7dHIudWkuYi50cmFja01vdXNlTW92ZXNVbnRpbE1vdXNlVXAodGhpcy5vbk1vdXNlTW92ZV8sdGhpcy5vbk1vdXNlVXBfKTt9LG9uTW91c2VNb3ZlXyhlKXt0aGlzLnNldEN1cnJlbnRNb3VzZVBvc0Zyb21FdmVudF8oZSk7Y29uc3QgbW91c2VFdmVudD10aGlzLmNyZWF0ZUV2ZW50XyhNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMubW9kZV0uZXZlbnROYW1lcy51cGRhdGUsZSk7dGhpcy5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpO2lmKHRoaXMuaXNJbnRlcmFjdGluZ18pe3RoaXMuY2hlY2tJc0NsaWNrXyhlKTt9fSxvbk1vdXNlVXBfKGUpe2lmKGUuYnV0dG9uIT09MClyZXR1cm47Y29uc3QgbW91c2VFdmVudD10aGlzLmNyZWF0ZUV2ZW50XyhNT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW3RoaXMubW9kZV0uZXZlbnROYW1lcy5lbmQsZSk7bW91c2VFdmVudC5pc0NsaWNrPXRoaXMuaXNDbGlja187dGhpcy5kaXNwYXRjaEV2ZW50KG1vdXNlRXZlbnQpO2lmKHRoaXMuaXNDbGlja18mJiFtb3VzZUV2ZW50LmRpZFByZXZlbnREZWZhdWx0KXt0aGlzLmRpc3BhdGNoQ2xpY2tFdmVudHNfKGUpO30KdGhpcy5pc0ludGVyYWN0aW5nXz1mYWxzZTt0aGlzLnVwZGF0ZUFsdGVybmF0aXZlTW9kZVN0YXRlXyhlKTt9LG9uQnV0dG9uTW91c2VEb3duXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wSW1tZWRpYXRlUHJvcGFnYXRpb24oKTt9LG9uQnV0dG9uTW91c2VVcF8oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7fSxvbkJ1dHRvblByZXNzXyhlKXt0aGlzLm1vZGVCZWZvcmVBbHRlcm5hdGl2ZU1vZGVBY3RpdmF0ZWRfPXVuZGVmaW5lZDt0aGlzLm1vZGU9ZS50YXJnZXQubW9kZTtlLnByZXZlbnREZWZhdWx0KCk7fSxvbktleURvd25fKGUpe2lmKGUucGF0aFswXS50YWdOYW1lPT09J0lOUFVUJylyZXR1cm47aWYoZS5rZXlDb2RlPT09JyAnLmNoYXJDb2RlQXQoMCkpe3RoaXMuc3BhY2VQcmVzc2VkXz10cnVlO30KdGhpcy51cGRhdGVBbHRlcm5hdGl2ZU1vZGVTdGF0ZV8oZSk7fSxvbktleVVwXyhlKXtpZihlLnBhdGhbMF0udGFnTmFtZT09PSdJTlBVVCcpcmV0dXJuO2lmKGUua2V5Q29kZT09PScgJy5jaGFyQ29kZUF0KDApKXt0aGlzLnNwYWNlUHJlc3NlZF89ZmFsc2U7fQpsZXQgZGlkSGFuZGxlS2V5PWZhbHNlO2Zvcihjb25zdFttb2RlU3RyLGtleUNvZGVdb2YgT2JqZWN0LmVudHJpZXModGhpcy5tb2RlVG9LZXlDb2RlTWFwXykpe2lmKGUua2V5Q29kZT09PWtleUNvZGUpe3RoaXMubW9kZUJlZm9yZUFsdGVybmF0aXZlTW9kZUFjdGl2YXRlZF89dW5kZWZpbmVkO2NvbnN0IG1vZGU9cGFyc2VJbnQobW9kZVN0cik7dGhpcy5tb2RlPW1vZGU7ZGlkSGFuZGxlS2V5PXRydWU7fX0KaWYoZGlkSGFuZGxlS2V5KXtlLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm47fQp0aGlzLnVwZGF0ZUFsdGVybmF0aXZlTW9kZVN0YXRlXyhlKTt9LHVwZGF0ZUFsdGVybmF0aXZlTW9kZVN0YXRlXyhlKXtjb25zdCBzaGlmdFByZXNzZWQ9ZS5zaGlmdEtleTtjb25zdCBzcGFjZVByZXNzZWQ9dGhpcy5zcGFjZVByZXNzZWRfO2NvbnN0IGNtZE9yQ3RybFByZXNzZWQ9aXNDbWRPckN0cmxQcmVzc2VkKGUpO2NvbnN0IHNtbT10aGlzLnN1cHBvcnRlZE1vZGVNYXNrXztsZXQgbmV3TW9kZTtsZXQgaXNOZXdNb2RlQW5BbHRlcm5hdGl2ZU1vZGU9ZmFsc2U7aWYoc2hpZnRQcmVzc2VkJiYodGhpcy5tb2RpZmllclRvTW9kZU1hcF9bTU9ESUZJRVIuU0hJRlRdJnNtbSkhPT0wKXtuZXdNb2RlPXRoaXMubW9kaWZpZXJUb01vZGVNYXBfW01PRElGSUVSLlNISUZUXTtpc05ld01vZGVBbkFsdGVybmF0aXZlTW9kZT10cnVlO31lbHNlIGlmKHNwYWNlUHJlc3NlZCYmKHRoaXMubW9kaWZpZXJUb01vZGVNYXBfW01PRElGSUVSLlNQQUNFXSZzbW0pIT09MCl7bmV3TW9kZT10aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1tNT0RJRklFUi5TUEFDRV07aXNOZXdNb2RlQW5BbHRlcm5hdGl2ZU1vZGU9dHJ1ZTt9ZWxzZSBpZihjbWRPckN0cmxQcmVzc2VkJiYodGhpcy5tb2RpZmllclRvTW9kZU1hcF9bTU9ESUZJRVIuQ01EX09SX0NUUkxdJnNtbSkhPT0wKXtuZXdNb2RlPXRoaXMubW9kaWZpZXJUb01vZGVNYXBfW01PRElGSUVSLkNNRF9PUl9DVFJMXTtpc05ld01vZGVBbkFsdGVybmF0aXZlTW9kZT10cnVlO31lbHNle2lmKHRoaXMuaXNJbkFsdGVybmF0aXZlTW9kZV8pe25ld01vZGU9dGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXztpc05ld01vZGVBbkFsdGVybmF0aXZlTW9kZT1mYWxzZTt9ZWxzZXtuZXdNb2RlPXVuZGVmaW5lZDt9fQppZih0aGlzLm1vZGU9PT1uZXdNb2RlfHxuZXdNb2RlPT09dW5kZWZpbmVkKXJldHVybjtpZihpc05ld01vZGVBbkFsdGVybmF0aXZlTW9kZSl7dGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXz10aGlzLm1vZGU7fQp0aGlzLm1vZGU9bmV3TW9kZTt9LGdldCBpc0luQWx0ZXJuYXRpdmVNb2RlXygpe3JldHVybiEhdGhpcy5tb2RlQmVmb3JlQWx0ZXJuYXRpdmVNb2RlQWN0aXZhdGVkXzt9LHNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZShtb2RlLG1vZGlmaWVyKXt0aGlzLm1vZGlmaWVyVG9Nb2RlTWFwX1ttb2RpZmllcl09bW9kZTt9LGdldCBwb3MoKXtyZXR1cm57eDpwYXJzZUludCh0aGlzLnN0eWxlLmxlZnQpLHk6cGFyc2VJbnQodGhpcy5zdHlsZS50b3ApfTt9LHNldCBwb3MocG9zKXtwb3M9dGhpcy5jb25zdHJhaW5Qb3NpdGlvblRvQm91bmRzXyhwb3MpO3RoaXMuc3R5bGUubGVmdD1wb3MueCsncHgnO3RoaXMuc3R5bGUudG9wPXBvcy55KydweCc7aWYodGhpcy5zZXR0aW5nc0tleV8pe3RyLmIuU2V0dGluZ3Muc2V0KHRoaXMuc2V0dGluZ3NLZXlfKycucG9zJyx0aGlzLnBvcyk7fX0sY29uc3RyYWluUG9zaXRpb25Ub0JvdW5kc18ocG9zKXtjb25zdCBwYXJlbnQ9dGhpcy5vZmZzZXRQYXJlbnR8fGRvY3VtZW50LmJvZHk7Y29uc3QgcGFyZW50UmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHBhcmVudCk7Y29uc3QgdG9wPTA7Y29uc3QgYm90dG9tPXBhcmVudFJlY3QuaGVpZ2h0LXRoaXMub2Zmc2V0SGVpZ2h0O2NvbnN0IGxlZnQ9MDtjb25zdCByaWdodD1wYXJlbnRSZWN0LndpZHRoLXRoaXMub2Zmc2V0V2lkdGg7Y29uc3QgcmVzPXt9O3Jlcy54PU1hdGgubWF4KHBvcy54LGxlZnQpO3Jlcy54PU1hdGgubWluKHJlcy54LHJpZ2h0KTtyZXMueT1NYXRoLm1heChwb3MueSx0b3ApO3Jlcy55PU1hdGgubWluKHJlcy55LGJvdHRvbSk7cmV0dXJuIHJlczt9LG9uRHJhZ0hhbmRsZU1vdXNlRG93bl8oZSl7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCk7Y29uc3QgbW91c2VEb3duUG9zPXt4OmUuY2xpZW50WC10aGlzLm9mZnNldExlZnQseTplLmNsaWVudFktdGhpcy5vZmZzZXRUb3B9O3RyLnVpLmIudHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwKGZ1bmN0aW9uKGUpe2NvbnN0IHBvcz17fTtwb3MueD1lLmNsaWVudFgtbW91c2VEb3duUG9zLng7cG9zLnk9ZS5jbGllbnRZLW1vdXNlRG93blBvcy55O3RoaXMucG9zPXBvczt9LmJpbmQodGhpcykpO30sY2hlY2tJc0NsaWNrXyhlKXtpZighdGhpcy5pc0ludGVyYWN0aW5nX3x8IXRoaXMuaXNDbGlja18pcmV0dXJuO2NvbnN0IGRlbHRhWD10aGlzLm1vdXNlUG9zXy54LXRoaXMubW91c2VEb3duUG9zXy54O2NvbnN0IGRlbHRhWT10aGlzLm1vdXNlUG9zXy55LXRoaXMubW91c2VEb3duUG9zXy55O2NvbnN0IG1pbkRpc3Q9TUlOX01PVVNFX1NFTEVDVElPTl9ESVNUQU5DRTtpZihkZWx0YVgqZGVsdGFYK2RlbHRhWSpkZWx0YVk+bWluRGlzdCptaW5EaXN0KXt0aGlzLmlzQ2xpY2tfPWZhbHNlO319LGRpc3BhdGNoQ2xpY2tFdmVudHNfKGUpe2lmKCF0aGlzLmlzQ2xpY2tfKXJldHVybjtjb25zdCBtb2RlSW5mbz1NT1VTRV9TRUxFQ1RPUl9NT0RFX0lORk9TW01PVVNFX1NFTEVDVE9SX01PREUuU0VMRUNUSU9OXTtjb25zdCBldmVudE5hbWVzPW1vZGVJbmZvLmV2ZW50TmFtZXM7bGV0IG1vdXNlRXZlbnQ9dGhpcy5jcmVhdGVFdmVudF8oZXZlbnROYW1lcy5iZWdpbik7bW91c2VFdmVudC5hcHBlbmRTZWxlY3Rpb249aXNDbWRPckN0cmxQcmVzc2VkKGUpO3RoaXMuZGlzcGF0Y2hFdmVudChtb3VzZUV2ZW50KTttb3VzZUV2ZW50PXRoaXMuY3JlYXRlRXZlbnRfKGV2ZW50TmFtZXMuZW5kKTt0aGlzLmRpc3BhdGNoRXZlbnQobW91c2VFdmVudCk7fX0pO3JldHVybntNSU5fTU9VU0VfU0VMRUNUSU9OX0RJU1RBTkNFLE1PRElGSUVSLH07fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2NvbnN0IERFVEFJTFNfU1BMSVRfUkVHRVg9L14oXFMqKVxzKihbXFNcc10qKSQvO1BvbHltZXIoe2lzOid0ci11aS1lLWNocm9tZS1jYy1kaXNwbGF5LWl0ZW0tbGlzdC1pdGVtJyxjcmVhdGVkKCl7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCduYW1lJywnJyk7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdyYXdEZXRhaWxzJywnJyk7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdyaWNoRGV0YWlscycsdW5kZWZpbmVkKTtQb2x5bWVyLmRvbSh0aGlzKS5zZXRBdHRyaWJ1dGUoJ2RhdGFfJyx1bmRlZmluZWQpO30sZ2V0IGRhdGEoKXtyZXR1cm4gdGhpcy5kYXRhXzt9LHNldCBkYXRhKGRhdGEpe3RoaXMuZGF0YV89ZGF0YTtpZighZGF0YSl7dGhpcy5uYW1lPSdEQVRBIE1JU1NJTkcnO3RoaXMucmF3RGV0YWlscz0nJzt0aGlzLnJpY2hEZXRhaWxzPXVuZGVmaW5lZDt9ZWxzZSBpZih0eXBlb2YgZGF0YT09PSdzdHJpbmcnKXtjb25zdCBtYXRjaD1kYXRhLm1hdGNoKERFVEFJTFNfU1BMSVRfUkVHRVgpO3RoaXMubmFtZT1tYXRjaFsxXTt0aGlzLnJhd0RldGFpbHM9bWF0Y2hbMl07dGhpcy5yaWNoRGV0YWlscz11bmRlZmluZWQ7fWVsc2V7dGhpcy5uYW1lPWRhdGEubmFtZTt0aGlzLnJhd0RldGFpbHM9Jyc7dGhpcy5yaWNoRGV0YWlscz1kYXRhO319LHN0b3BQcm9wYWdhdGlvbihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sX2NvbXB1dGVJZlNLUChyaWNoRGV0YWlscyl7cmV0dXJuIHJpY2hEZXRhaWxzJiZyaWNoRGV0YWlscy5za3A2NDt9LF9jb21wdXRlSHJlZihyaWNoRGV0YWlscyl7cmV0dXJuJ2RhdGE6YXBwbGljYXRpb24vb2N0ZXQtc3RyZWFtO2Jhc2U2NCwnK3JpY2hEZXRhaWxzLnNrcDY0O319KTt9KSgpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2VsZWN0aW9uKCl7dGhpcy5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD11bmRlZmluZWQ7fQpTZWxlY3Rpb24ucHJvdG90eXBlPXtnZXQgc3BlY2ljaWZpdHkoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sZ2V0IGFzc29jaWF0ZWRMYXllcklkKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBhc3NvY2lhdGVkUmVuZGVyUGFzc0lkKCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBoaWdobGlnaHRzQnlMYXllcklkKCl7cmV0dXJue307fSxjcmVhdGVBbmFseXNpcygpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxmaW5kRXF1aXZhbGVudChsdGhpKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O2Z1bmN0aW9uIFJlbmRlclBhc3NTZWxlY3Rpb24ocmVuZGVyUGFzcyxyZW5kZXJQYXNzSWQpe2lmKCFyZW5kZXJQYXNzfHwocmVuZGVyUGFzc0lkPT09dW5kZWZpbmVkKSl7dGhyb3cgbmV3IEVycm9yKCdSZW5kZXIgcGFzcyAod2l0aCBpZCkgaXMgcmVxdWlyZWQnKTt9CnRoaXMucmVuZGVyUGFzc189cmVuZGVyUGFzczt0aGlzLnJlbmRlclBhc3NJZF89cmVuZGVyUGFzc0lkO30KUmVuZGVyUGFzc1NlbGVjdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzpTZWxlY3Rpb24ucHJvdG90eXBlLGdldCBzcGVjaWNpZml0eSgpe3JldHVybiAxO30sZ2V0IGFzc29jaWF0ZWRMYXllcklkKCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCBhc3NvY2lhdGVkUmVuZGVyUGFzc0lkKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc0lkXzt9LGdldCByZW5kZXJQYXNzKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc187fSxjcmVhdGVBbmFseXNpcygpe2NvbnN0IGRhdGFWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsJyk7ZGF0YVZpZXcubGFiZWw9J1JlbmRlclBhc3MgJyt0aGlzLnJlbmRlclBhc3NJZF87ZGF0YVZpZXcub2JqZWN0PXRoaXMucmVuZGVyUGFzc18uYXJncztyZXR1cm4gZGF0YVZpZXc7fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5yZW5kZXJQYXNzXy5vYmplY3RJbnN0YW5jZS50eXBlTmFtZTt9fTtmdW5jdGlvbiBMYXllclNlbGVjdGlvbihsYXllcil7aWYoIWxheWVyKXt0aHJvdyBuZXcgRXJyb3IoJ0xheWVyIGlzIHJlcXVpcmVkJyk7fQp0aGlzLmxheWVyXz1sYXllcjt9CkxheWVyU2VsZWN0aW9uLnByb3RvdHlwZT17X19wcm90b19fOlNlbGVjdGlvbi5wcm90b3R5cGUsZ2V0IHNwZWNpY2lmaXR5KCl7cmV0dXJuIDE7fSxnZXQgYXNzb2NpYXRlZExheWVySWQoKXtyZXR1cm4gdGhpcy5sYXllcl8ubGF5ZXJJZDt9LGdldCBhc3NvY2lhdGVkUmVuZGVyUGFzc0lkKCl7cmV0dXJuIHVuZGVmaW5lZDt9LGdldCBsYXllcigpe3JldHVybiB0aGlzLmxheWVyXzt9LGNyZWF0ZUFuYWx5c2lzKCl7Y29uc3QgZGF0YVZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3LXdpdGgtbGFiZWwnKTtkYXRhVmlldy5sYWJlbD0nTGF5ZXIgJyt0aGlzLmxheWVyXy5sYXllcklkO2lmKHRoaXMubGF5ZXJfLnVzaW5nR3B1UmFzdGVyaXphdGlvbil7ZGF0YVZpZXcubGFiZWwrPScgKEdQVS1yYXN0ZXJpemVkKSc7fQpkYXRhVmlldy5vYmplY3Q9dGhpcy5sYXllcl8uYXJncztyZXR1cm4gZGF0YVZpZXc7fSxnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5sYXllcl8ub2JqZWN0SW5zdGFuY2UudHlwZU5hbWU7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtjb25zdCBsYXllcj1sdGhpLmFjdGl2ZVRyZWUuZmluZExheWVyV2l0aElkKHRoaXMubGF5ZXJfLmxheWVySWQpfHxsdGhpLnBlbmRpbmdUcmVlLmZpbmRMYXllcldpdGhJZCh0aGlzLmxheWVyXy5sYXllcklkKTtpZighbGF5ZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmV3IExheWVyU2VsZWN0aW9uKGxheWVyKTt9fTtmdW5jdGlvbiBUaWxlU2VsZWN0aW9uKHRpbGUsb3B0X2RhdGEpe3RoaXMudGlsZV89dGlsZTt0aGlzLmRhdGFfPW9wdF9kYXRhfHx7fTt9ClRpbGVTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMjt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3JldHVybiB0aGlzLnRpbGVfLmxheWVySWQ7fSxnZXQgaGlnaGxpZ2h0c0J5TGF5ZXJJZCgpe2NvbnN0IGhpZ2hsaWdodHM9e307aGlnaGxpZ2h0c1t0aGlzLnRpbGVfLmxheWVySWRdPVt7Y29sb3JLZXk6dGhpcy50aWxlXy5vYmplY3RJbnN0YW5jZS50eXBlTmFtZSxyZWN0OnRoaXMudGlsZV8ubGF5ZXJSZWN0fV07cmV0dXJuIGhpZ2hsaWdodHM7fSxjcmVhdGVBbmFseXNpcygpe2NvbnN0IGFuYWx5c2lzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsJyk7YW5hbHlzaXMubGFiZWw9J1RpbGUgJyt0aGlzLnRpbGVfLm9iamVjdEluc3RhbmNlLmlkKycgb24gbGF5ZXIgJysKdGhpcy50aWxlXy5sYXllcklkO2lmKHRoaXMuZGF0YV8pe2FuYWx5c2lzLm9iamVjdD17bW9yZUluZm86dGhpcy5kYXRhXyx0aWxlQXJnczp0aGlzLnRpbGVfLmFyZ3N9O31lbHNle2FuYWx5c2lzLm9iamVjdD10aGlzLnRpbGVfLmFyZ3M7fQpyZXR1cm4gYW5hbHlzaXM7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtjb25zdCB0aWxlSW5zdGFuY2U9dGhpcy50aWxlXy50aWxlSW5zdGFuY2U7aWYobHRoaS50czx0aWxlSW5zdGFuY2UuY3JlYXRpb25Uc3x8bHRoaS50cz49dGlsZUluc3RhbmNlLmRlbGV0aW9uVHMpe3JldHVybiB1bmRlZmluZWQ7fQpjb25zdCB0aWxlU25hcHNob3Q9dGlsZUluc3RhbmNlLmdldFNuYXBzaG90QXQobHRoaS50cyk7aWYoIXRpbGVTbmFwc2hvdClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBuZXcgVGlsZVNlbGVjdGlvbih0aWxlU25hcHNob3QpO319O2Z1bmN0aW9uIExheWVyUmVjdFNlbGVjdGlvbihsYXllcixyZWN0VHlwZSxyZWN0LG9wdF9kYXRhKXt0aGlzLmxheWVyXz1sYXllcjt0aGlzLnJlY3RUeXBlXz1yZWN0VHlwZTt0aGlzLnJlY3RfPXJlY3Q7dGhpcy5kYXRhXz1vcHRfZGF0YSE9PXVuZGVmaW5lZD9vcHRfZGF0YTpyZWN0O30KTGF5ZXJSZWN0U2VsZWN0aW9uLnByb3RvdHlwZT17X19wcm90b19fOlNlbGVjdGlvbi5wcm90b3R5cGUsZ2V0IHNwZWNpY2lmaXR5KCl7cmV0dXJuIDI7fSxnZXQgYXNzb2NpYXRlZExheWVySWQoKXtyZXR1cm4gdGhpcy5sYXllcl8ubGF5ZXJJZDt9LGdldCBoaWdobGlnaHRzQnlMYXllcklkKCl7Y29uc3QgaGlnaGxpZ2h0cz17fTtoaWdobGlnaHRzW3RoaXMubGF5ZXJfLmxheWVySWRdPVt7Y29sb3JLZXk6dGhpcy5yZWN0VHlwZV8scmVjdDp0aGlzLnJlY3RffV07cmV0dXJuIGhpZ2hsaWdodHM7fSxjcmVhdGVBbmFseXNpcygpe2NvbnN0IGFuYWx5c2lzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3Qtdmlldy13aXRoLWxhYmVsJyk7YW5hbHlzaXMubGFiZWw9dGhpcy5yZWN0VHlwZV8rJyBvbiBsYXllciAnK3RoaXMubGF5ZXJfLmxheWVySWQ7YW5hbHlzaXMub2JqZWN0PXRoaXMuZGF0YV87cmV0dXJuIGFuYWx5c2lzO30sZmluZEVxdWl2YWxlbnQobHRoaSl7cmV0dXJuIHVuZGVmaW5lZDt9fTtmdW5jdGlvbiBBbmltYXRpb25SZWN0U2VsZWN0aW9uKGxheWVyLHJlY3Qpe3RoaXMubGF5ZXJfPWxheWVyO3RoaXMucmVjdF89cmVjdDt9CkFuaW1hdGlvblJlY3RTZWxlY3Rpb24ucHJvdG90eXBlPXtfX3Byb3RvX186U2VsZWN0aW9uLnByb3RvdHlwZSxnZXQgc3BlY2ljaWZpdHkoKXtyZXR1cm4gMDt9LGdldCBhc3NvY2lhdGVkTGF5ZXJJZCgpe3JldHVybiB0aGlzLmxheWVyXy5sYXllcklkO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBhbmFseXNpcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXctd2l0aC1sYWJlbCcpO2FuYWx5c2lzLmxhYmVsPSdBbmltYXRpb24gQm91bmRzIG9mIGxheWVyICcrdGhpcy5sYXllcl8ubGF5ZXJJZDthbmFseXNpcy5vYmplY3Q9dGhpcy5yZWN0XztyZXR1cm4gYW5hbHlzaXM7fX07cmV0dXJue1NlbGVjdGlvbixSZW5kZXJQYXNzU2VsZWN0aW9uLExheWVyU2VsZWN0aW9uLFRpbGVTZWxlY3Rpb24sTGF5ZXJSZWN0U2VsZWN0aW9uLEFuaW1hdGlvblJlY3RTZWxlY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IE9QU19USU1JTkdfSVRFUkFUSU9OUz0zO2NvbnN0IEFOTk9UQVRJT049J0NvbW1lbnQnO2NvbnN0IEJFR0lOX0FOTk9UQVRJT049J0JlZ2luQ29tbWVudEdyb3VwJztjb25zdCBFTkRfQU5OT1RBVElPTj0nRW5kQ29tbWVudEdyb3VwJztjb25zdCBBTk5PVEFUSU9OX0lEPSdJRDogJztjb25zdCBBTk5PVEFUSU9OX0NMQVNTPSdDTEFTUzogJztjb25zdCBBTk5PVEFUSU9OX1RBRz0nVEFHOiAnO2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBQaWN0dXJlT3BzTGlzdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtb3BzLWxpc3QtdmlldycpO1BpY3R1cmVPcHNMaXN0Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmJvcmRlclRvcD0nMXB4IHNvbGlkIGdyZXknO3RoaXMuc3R5bGUub3ZlcmZsb3c9J2F1dG8nO3RoaXMub3BzTGlzdF89bmV3IHRyLnVpLmIuTGlzdFZpZXcoKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLm9wc0xpc3RfKTt0aGlzLnNlbGVjdGVkT3BfPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGVkT3BJbmRleF89dW5kZWZpbmVkO3RoaXMub3BzTGlzdF8uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLHRoaXMub25TZWxlY3Rpb25DaGFuZ2VkXy5iaW5kKHRoaXMpKTt0aGlzLnBpY3R1cmVfPXVuZGVmaW5lZDt9LGdldCBwaWN0dXJlKCl7cmV0dXJuIHRoaXMucGljdHVyZV87fSxzZXQgcGljdHVyZShwaWN0dXJlKXt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMub3BzTGlzdF8uY2xlYXIoKTtpZighdGhpcy5waWN0dXJlXylyZXR1cm47bGV0IG9wcz10aGlzLnBpY3R1cmVfLmdldE9wcygpO2lmKCFvcHMpcmV0dXJuO29wcz10aGlzLnBpY3R1cmVfLnRhZ09wc1dpdGhUaW1pbmdzKG9wcyk7b3BzPXRoaXMub3BzVGFnZ2VkV2l0aEFubm90YXRpb25zXyhvcHMpO2ZvcihsZXQgaT0wO2k8b3BzLmxlbmd0aDtpKyspe2NvbnN0IG9wPW9wc1tpXTtjb25zdCBpdGVtPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2l0ZW0ub3BJbmRleD1vcC5vcEluZGV4O1BvbHltZXIuZG9tKGl0ZW0pLnRleHRDb250ZW50PWkrJykgJytvcC5jbWRfc3RyaW5nO2lmKG9wLmVsZW1lbnRJbmZvLnRhZ3x8b3AuZWxlbWVudEluZm8uaWR8fG9wLmVsZW1lbnRJbmZvLmNsYXNzKXtjb25zdCBlbGVtZW50SW5mbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20oZWxlbWVudEluZm8pLmNsYXNzTGlzdC5hZGQoJ2VsZW1lbnRJbmZvJyk7ZWxlbWVudEluZm8uc3R5bGUuY29sb3I9J3B1cnBsZSc7ZWxlbWVudEluZm8uc3R5bGUuZm9udFNpemU9J3NtYWxsJztlbGVtZW50SW5mby5zdHlsZS5mb250V2VpZ2h0PSdib2xkJztlbGVtZW50SW5mby5zdHlsZS5jb2xvcj0nIzc3Nyc7Y29uc3QgdGFnPW9wLmVsZW1lbnRJbmZvLnRhZz9vcC5lbGVtZW50SW5mby50YWc6J3Vua25vd24nO2NvbnN0IGlkPW9wLmVsZW1lbnRJbmZvLmlkPydpZD0nK29wLmVsZW1lbnRJbmZvLmlkOnVuZGVmaW5lZDtjb25zdCBjbGFzc05hbWU9b3AuZWxlbWVudEluZm8uY2xhc3M/J2NsYXNzPScrCm9wLmVsZW1lbnRJbmZvLmNsYXNzOnVuZGVmaW5lZDtQb2x5bWVyLmRvbShlbGVtZW50SW5mbykudGV4dENvbnRlbnQ9JzwnK3RhZysoaWQ/JyAnOicnKSsKKGlkP2lkOicnKSsoY2xhc3NOYW1lPycgJzonJykrCihjbGFzc05hbWU/Y2xhc3NOYW1lOicnKSsnPic7UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQoZWxlbWVudEluZm8pO30KaWYob3AuaW5mby5sZW5ndGg+MCl7Y29uc3QgaW5mb0l0ZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20oaW5mb0l0ZW0pLnRleHRDb250ZW50PUpTT04uc3RyaW5naWZ5KG9wLmluZm8pO2luZm9JdGVtLnN0eWxlLmZvbnRTaXplPSd4LXNtYWxsJztpbmZvSXRlbS5zdHlsZS5jb2xvcj0nIzc3Nyc7UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQoaW5mb0l0ZW0pO30KaWYob3AuY21kX3RpbWUmJm9wLmNtZF90aW1lPj0wLjAwMDEpe2NvbnN0IHRpbWU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKHRpbWUpLmNsYXNzTGlzdC5hZGQoJ3RpbWUnKTtjb25zdCByb3VuZGVkPW9wLmNtZF90aW1lLnRvRml4ZWQoNCk7UG9seW1lci5kb20odGltZSkudGV4dENvbnRlbnQ9JygnK3JvdW5kZWQrJ21zKSc7dGltZS5zdHlsZS5mb250U2l6ZT0neC1zbWFsbCc7dGltZS5zdHlsZS5jb2xvcj0ncmdiKDEzNiwgMCwgMCknO1BvbHltZXIuZG9tKGl0ZW0pLmFwcGVuZENoaWxkKHRpbWUpO30KaXRlbS5zdHlsZS5ib3JkZXJCb3R0b209JzFweCBzb2xpZCAjNTU1JztpdGVtLnN0eWxlLmZvbnRTaXplPSdzbWFsbCc7aXRlbS5zdHlsZS5mb250V2VpZ2h0PSdib2xkJztpdGVtLnN0eWxlLnBhZGRpbmdCb3R0b209JzVweCc7aXRlbS5zdHlsZS5wYWRkaW5nTGVmdD0nNXB4JztpdGVtLnN0eWxlLmN1cnNvcj0ncG9pbnRlcic7Zm9yKGNvbnN0IGNoaWxkIG9mIGl0ZW0uY2hpbGRyZW4pe2NoaWxkLnN0eWxlLmZvbnRXZWlnaHQ9J25vcm1hbCc7Y2hpbGQuc3R5bGUubWFyZ2luTGVmdD0nMWVtJztjaGlsZC5zdHlsZS5tYXhXaWR0aD0nMzAwcHgnO30KUG9seW1lci5kb20odGhpcy5vcHNMaXN0XykuYXBwZW5kQ2hpbGQoaXRlbSk7fX0sb25TZWxlY3Rpb25DaGFuZ2VkXyhlKXtsZXQgYmVmb3JlU2VsZWN0ZWRPcD10cnVlO2lmKHRoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50PT09dGhpcy5zZWxlY3RlZE9wXyl7dGhpcy5vcHNMaXN0Xy5zZWxlY3RlZEVsZW1lbnQ9dW5kZWZpbmVkO2JlZm9yZVNlbGVjdGVkT3A9ZmFsc2U7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPXVuZGVmaW5lZDt9CnRoaXMuc2VsZWN0ZWRPcF89dGhpcy5vcHNMaXN0Xy5zZWxlY3RlZEVsZW1lbnQ7Y29uc3Qgb3BzPXRoaXMub3BzTGlzdF8uY2hpbGRyZW47Zm9yKGxldCBpPTA7aTxvcHMubGVuZ3RoO2krKyl7Y29uc3Qgb3A9b3BzW2ldO2lmKG9wPT09dGhpcy5zZWxlY3RlZE9wXyl7YmVmb3JlU2VsZWN0ZWRPcD1mYWxzZTt0aGlzLnNlbGVjdGVkT3BJbmRleF89b3Aub3BJbmRleDt9ZWxzZSBpZihiZWZvcmVTZWxlY3RlZE9wKXtQb2x5bWVyLmRvbShvcCkuc2V0QXR0cmlidXRlKCdiZWZvcmVTZWxlY3Rpb24nLCdiZWZvcmVTZWxlY3Rpb24nKTtvcC5zdHlsZS5iYWNrZ3JvdW5kQ29sb3I9J3JnYigxMDMsIDE5OSwgMTY1KSc7fWVsc2V7UG9seW1lci5kb20ob3ApLnJlbW92ZUF0dHJpYnV0ZSgnYmVmb3JlU2VsZWN0aW9uJyk7b3Auc3R5bGUuYmFja2dyb3VuZENvbG9yPScnO319CnRyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlZCcsZmFsc2UpO30sZ2V0IG51bU9wcygpe3JldHVybiB0aGlzLm9wc0xpc3RfLmNoaWxkcmVuLmxlbmd0aDt9LGdldCBzZWxlY3RlZE9wSW5kZXgoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZE9wSW5kZXhfO30sc2V0IHNlbGVjdGVkT3BJbmRleChzKXt0aGlzLnNlbGVjdGVkT3BJbmRleF89cztpZihzPT09dW5kZWZpbmVkKXt0aGlzLm9wc0xpc3RfLnNlbGVjdGVkRWxlbWVudD10aGlzLnNlbGVjdGVkT3BfO3RoaXMub25TZWxlY3Rpb25DaGFuZ2VkXygpO31lbHNle2lmKHM8MCl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTtpZihzPj10aGlzLm51bU9wcyl0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgaW5kZXgnKTt0aGlzLm9wc0xpc3RfLnNlbGVjdGVkRWxlbWVudD10aGlzLm9wc0xpc3RfLmdldEVsZW1lbnRCeUluZGV4KHMrMSk7dHIudWkuYi5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKHRoaXMub3BzTGlzdF8uc2VsZWN0ZWRFbGVtZW50KTt9fSxvcHNUYWdnZWRXaXRoQW5ub3RhdGlvbnNfKG9wcyl7Y29uc3QgYW5ub3RhdGlvbkdyb3Vwcz1bXTtjb25zdCBvcHNXaXRob3V0QW5ub3RhdGlvbnM9W107Zm9yKGxldCBvcEluZGV4PTA7b3BJbmRleDxvcHMubGVuZ3RoO29wSW5kZXgrKyl7Y29uc3Qgb3A9b3BzW29wSW5kZXhdO29wLm9wSW5kZXg9b3BJbmRleDtzd2l0Y2gob3AuY21kX3N0cmluZyl7Y2FzZSBCRUdJTl9BTk5PVEFUSU9OOmFubm90YXRpb25Hcm91cHMucHVzaChbXSk7YnJlYWs7Y2FzZSBFTkRfQU5OT1RBVElPTjphbm5vdGF0aW9uR3JvdXBzLnBvcCgpO2JyZWFrO2Nhc2UgQU5OT1RBVElPTjphbm5vdGF0aW9uR3JvdXBzW2Fubm90YXRpb25Hcm91cHMubGVuZ3RoLTFdLnB1c2gob3ApO2JyZWFrO2RlZmF1bHQ6e2NvbnN0IGFubm90YXRpb25zPVtdO2xldCBlbGVtZW50SW5mbz17fTthbm5vdGF0aW9uR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oYW5ub3RhdGlvbkdyb3VwKXtlbGVtZW50SW5mbz17fTthbm5vdGF0aW9uR3JvdXAuZm9yRWFjaChmdW5jdGlvbihhbm5vdGF0aW9uKXthbm5vdGF0aW9uLmluZm8uZm9yRWFjaChmdW5jdGlvbihpbmZvKXtpZihpbmZvLmluY2x1ZGVzKEFOTk9UQVRJT05fVEFHKSl7ZWxlbWVudEluZm8udGFnPWluZm8uc3Vic3RyaW5nKGluZm8uaW5kZXhPZihBTk5PVEFUSU9OX1RBRykrCkFOTk9UQVRJT05fVEFHLmxlbmd0aCkudG9Mb3dlckNhc2UoKTt9ZWxzZSBpZihpbmZvLmluY2x1ZGVzKEFOTk9UQVRJT05fSUQpKXtlbGVtZW50SW5mby5pZD1pbmZvLnN1YnN0cmluZyhpbmZvLmluZGV4T2YoQU5OT1RBVElPTl9JRCkrCkFOTk9UQVRJT05fSUQubGVuZ3RoKTt9ZWxzZSBpZihpbmZvLmluY2x1ZGVzKEFOTk9UQVRJT05fQ0xBU1MpKXtlbGVtZW50SW5mby5jbGFzcz1pbmZvLnN1YnN0cmluZyhpbmZvLmluZGV4T2YoQU5OT1RBVElPTl9DTEFTUykrCkFOTk9UQVRJT05fQ0xBU1MubGVuZ3RoKTt9CmFubm90YXRpb25zLnB1c2goaW5mbyk7fSk7fSk7fSk7b3AuYW5ub3RhdGlvbnM9YW5ub3RhdGlvbnM7b3AuZWxlbWVudEluZm89ZWxlbWVudEluZm87b3BzV2l0aG91dEFubm90YXRpb25zLnB1c2gob3ApO319fQpyZXR1cm4gb3BzV2l0aG91dEFubm90YXRpb25zO319O3JldHVybntQaWN0dXJlT3BzTGlzdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IFRISVNfRE9DPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudDtjb25zdCBEaXNwbGF5SXRlbURlYnVnZ2VyPXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1jYy1kaXNwbGF5LWl0ZW0tZGVidWdnZXInKTtEaXNwbGF5SXRlbURlYnVnZ2VyLnByb3RvdHlwZT17X19wcm90b19fOkhUTUxEaXZFbGVtZW50LnByb3RvdHlwZSxkZWNvcmF0ZSgpe2NvbnN0IG5vZGU9dHIudWkuYi5pbnN0YW50aWF0ZVRlbXBsYXRlKCcjdHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWRlYnVnZ2VyLXRlbXBsYXRlJyxUSElTX0RPQyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobm9kZSk7dGhpcy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMuc3R5bGUuZmxleFNocmluaz0xO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuc3R5bGUubWluV2lkdGg9MDt0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV89dW5kZWZpbmVkO3RoaXMuem9vbVNjYWxlVmFsdWVfPTE7dGhpcy5zaXplSW5mb189UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLnNpemUnKTt0aGlzLnJhc3RlckFyZWFfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3Jhc3Rlci1hcmVhJyk7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuZmxleFNocmluaz0xO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI2RkZCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5taW5IZWlnaHQ9JzIwMHB4Jzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLm1pbldpZHRoPScyMDBweCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5wYWRkaW5nTGVmdD0nNXB4Jzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMucmFzdGVyQXJlYV8uc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJzt0aGlzLnJhc3RlckNhbnZhc189UG9seW1lci5kb20odGhpcy5yYXN0ZXJBcmVhXykucXVlcnlTZWxlY3RvcignY2FudmFzJyk7dGhpcy5yYXN0ZXJDdHhfPXRoaXMucmFzdGVyQ2FudmFzXy5nZXRDb250ZXh0KCcyZCcpO2NvbnN0IGNhbnZhc1Njcm9sbGVyPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ2NhbnZhcy1zY3JvbGxlcicpO2NhbnZhc1Njcm9sbGVyLnN0eWxlLmZsZXhHcm93PTE7Y2FudmFzU2Nyb2xsZXIuc3R5bGUuZmxleFNocmluaz0xO2NhbnZhc1Njcm9sbGVyLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7Y2FudmFzU2Nyb2xsZXIuc3R5bGUubWluV2lkdGg9MDtjYW52YXNTY3JvbGxlci5zdHlsZS5taW5IZWlnaHQ9MDtjYW52YXNTY3JvbGxlci5zdHlsZS5vdmVyZmxvdz0nYXV0byc7dGhpcy50cmFja01vdXNlXygpO3RoaXMuZGlzcGxheUl0ZW1JbmZvXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCdkaXNwbGF5LWl0ZW0taW5mbycpO3RoaXMuZGlzcGxheUl0ZW1JbmZvXy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkRpc3BsYXlJdGVtSW5mb0NsaWNrXy5iaW5kKHRoaXMpLGZhbHNlKTt0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfPW5ldyB0ci51aS5iLkxpc3RWaWV3KCk7dGhpcy5kaXNwbGF5SXRlbUxpc3RWaWV3Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsdGhpcy5vbkRpc3BsYXlJdGVtTGlzdFNlbGVjdGlvbl8uYmluZCh0aGlzKSk7UG9seW1lci5kb20odGhpcy5kaXNwbGF5SXRlbUluZm9fKS5hcHBlbmRDaGlsZCh0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfKTt0aGlzLmRpc3BsYXlMaXN0RmlsZW5hbWVfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5kbGZpbGVuYW1lJyk7dGhpcy5kaXNwbGF5TGlzdEV4cG9ydEJ1dHRvbl89UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLmRsZXhwb3J0Jyk7dGhpcy5kaXNwbGF5TGlzdEV4cG9ydEJ1dHRvbl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25FeHBvcnREaXNwbGF5TGlzdENsaWNrZWRfLmJpbmQodGhpcykpO3RoaXMuc2twRmlsZW5hbWVfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5za3BmaWxlbmFtZScpO3RoaXMuc2twRXhwb3J0QnV0dG9uXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuc2twZXhwb3J0Jyk7dGhpcy5za3BFeHBvcnRCdXR0b25fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uRXhwb3J0U2tQaWN0dXJlQ2xpY2tlZF8uYmluZCh0aGlzKSk7Y29uc3QgbGVmdFBhbmVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ2xlZnQtcGFuZWwnKTtsZWZ0UGFuZWwuc3R5bGUuZmxleEdyb3c9MDtsZWZ0UGFuZWwuc3R5bGUuZmxleFNocmluaz0wO2xlZnRQYW5lbC5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO2xlZnRQYW5lbC5zdHlsZS5taW5XaWR0aD0nMjAwcHgnO2xlZnRQYW5lbC5zdHlsZS5vdmVyZmxvdz0nYXV0byc7bGVmdFBhbmVsLmNoaWxkcmVuWzBdLnBhZGRpbmdUb3A9JzJweCc7bGVmdFBhbmVsLmNoaWxkcmVuWzBdLmNoaWxkcmVuWzBdLnN0eWxlLmJvcmRlckJvdHRvbT0nMXB4IHNvbGlkICM1NTUnO2NvbnN0IGxlZnRQYW5lbFRpdGxlPWxlZnRQYW5lbC5xdWVyeVNlbGVjdG9yKCcudGl0bGUnKTtsZWZ0UGFuZWxUaXRsZS5zdHlsZS5mb250V2VpZ2h0PSdib2xkJztsZWZ0UGFuZWxUaXRsZS5zdHlsZS5tYXJnaW5MZWZ0PSc1cHgnO2xlZnRQYW5lbFRpdGxlLnN0eWxlLm1hcmdpbnJpZ2h0PSc1cHgnO2Zvcihjb25zdCBkaXYgb2YgbGVmdFBhbmVsLnF1ZXJ5U2VsZWN0b3JBbGwoJy5leHBvcnQnKSl7ZGl2LnN0eWxlLm1hcmdpbj0nNXB4Jzt9CmNvbnN0IG1pZGRsZURyYWdIYW5kbGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO21pZGRsZURyYWdIYW5kbGUuc3R5bGUuZmxleEdyb3c9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhTaHJpbms9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7bWlkZGxlRHJhZ0hhbmRsZS5ob3Jpem9udGFsPWZhbHNlO21pZGRsZURyYWdIYW5kbGUudGFyZ2V0PWxlZnRQYW5lbDtjb25zdCByaWdodFBhbmVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3JpZ2h0LXBhbmVsJyk7cmlnaHRQYW5lbC5zdHlsZS5kaXNwbGF5PSdmbGV4JztyaWdodFBhbmVsLnN0eWxlLmZsZXhHcm93PTE7cmlnaHRQYW5lbC5zdHlsZS5mbGV4U2hyaW5rPTE7cmlnaHRQYW5lbC5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3JpZ2h0UGFuZWwuc3R5bGUubWluV2lkdGg9MDt0aGlzLmluZm9CYXJfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaW5mby1iYXInKTtQb2x5bWVyLmRvbSh0aGlzLnJhc3RlckFyZWFfKS5pbnNlcnRCZWZvcmUodGhpcy5pbmZvQmFyXyxjYW52YXNTY3JvbGxlcik7UG9seW1lci5kb20odGhpcykuaW5zZXJ0QmVmb3JlKG1pZGRsZURyYWdIYW5kbGUscmlnaHRQYW5lbCk7dGhpcy5waWN0dXJlXz11bmRlZmluZWQ7dGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5QaWN0dXJlT3BzTGlzdFZpZXcoKTt0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld18uc3R5bGUuZmxleEdyb3c9MDt0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld18uc3R5bGUuZmxleFNocmluaz0wO3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5zdHlsZS5vdmVyZmxvdz0nYXV0byc7dGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfLnN0eWxlLm1pbldpZHRoPScxMDBweCc7UG9seW1lci5kb20ocmlnaHRQYW5lbCkuaW5zZXJ0QmVmb3JlKHRoaXMucGljdHVyZU9wc0xpc3RWaWV3Xyx0aGlzLnJhc3RlckFyZWFfKTt0aGlzLnBpY3R1cmVPcHNMaXN0RHJhZ0hhbmRsZV89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO3RoaXMucGljdHVyZU9wc0xpc3REcmFnSGFuZGxlXy5ob3Jpem9udGFsPWZhbHNlO3RoaXMucGljdHVyZU9wc0xpc3REcmFnSGFuZGxlXy50YXJnZXQ9dGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfO1BvbHltZXIuZG9tKHJpZ2h0UGFuZWwpLmluc2VydEJlZm9yZSh0aGlzLnBpY3R1cmVPcHNMaXN0RHJhZ0hhbmRsZV8sdGhpcy5yYXN0ZXJBcmVhXyk7fSxnZXQgcGljdHVyZSgpe3JldHVybiB0aGlzLnBpY3R1cmVfO30sc2V0IGRpc3BsYXlJdGVtTGlzdChkaXNwbGF5SXRlbUxpc3Qpe3RoaXMuZGlzcGxheUl0ZW1MaXN0Xz1kaXNwbGF5SXRlbUxpc3Q7dGhpcy5waWN0dXJlPXRoaXMuZGlzcGxheUl0ZW1MaXN0Xzt0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfLmNsZWFyKCk7dGhpcy5kaXNwbGF5SXRlbUxpc3RfLml0ZW1zLmZvckVhY2goZnVuY3Rpb24oaXRlbSl7Y29uc3QgbGlzdEl0ZW09ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY2MtZGlzcGxheS1pdGVtLWxpc3QtaXRlbScpO2xpc3RJdGVtLmRhdGE9aXRlbTtQb2x5bWVyLmRvbSh0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfKS5hcHBlbmRDaGlsZChsaXN0SXRlbSk7fS5iaW5kKHRoaXMpKTt9LHNldCBwaWN0dXJlKHBpY3R1cmUpe3RoaXMucGljdHVyZV89cGljdHVyZTtjb25zdCBzaG93T3BzTGlzdD1waWN0dXJlJiZwaWN0dXJlIT09dGhpcy5kaXNwbGF5SXRlbUxpc3RfO3RoaXMudXBkYXRlRHJhd09wc0xpc3RfKHNob3dPcHNMaXN0KTtpZihwaWN0dXJlKXtjb25zdCBzaXplPXRoaXMuZ2V0UmFzdGVyQ2FudmFzU2l6ZV8oKTt0aGlzLnJhc3RlckNhbnZhc18ud2lkdGg9c2l6ZS53aWR0aDt0aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0PXNpemUuaGVpZ2h0O30KY29uc3QgYm91bmRzPXRoaXMucmFzdGVyQXJlYV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3Qgc2VsZWN0b3JCb3VuZHM9dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ucG9zPXt4Oihib3VuZHMucmlnaHQtc2VsZWN0b3JCb3VuZHMud2lkdGgtMTApLHk6Ym91bmRzLnRvcH07dGhpcy5yYXN0ZXJpemVfKCk7dGhpcy5zY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0UmFzdGVyQ2FudmFzU2l6ZV8oKXtjb25zdCBzdHlsZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJhc3RlckFyZWFfKTtsZXQgd2lkdGg9cGFyc2VJbnQoc3R5bGUud2lkdGgpO2xldCBoZWlnaHQ9cGFyc2VJbnQoc3R5bGUuaGVpZ2h0KTtpZih0aGlzLnBpY3R1cmVfKXt3aWR0aD1NYXRoLm1heCh3aWR0aCx0aGlzLnBpY3R1cmVfLmxheWVyUmVjdC53aWR0aCk7aGVpZ2h0PU1hdGgubWF4KGhlaWdodCx0aGlzLnBpY3R1cmVfLmxheWVyUmVjdC5oZWlnaHQpO30KcmV0dXJue3dpZHRoLGhlaWdodH07fSxzY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXylyZXR1cm47dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUodGhpcy51cGRhdGVDb250ZW50c18uYmluZCh0aGlzKSk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189ZmFsc2U7aWYodGhpcy5waWN0dXJlXyl7UG9seW1lci5kb20odGhpcy5zaXplSW5mb18pLnRleHRDb250ZW50PScoJysKdGhpcy5waWN0dXJlXy5sYXllclJlY3Qud2lkdGgrJyB4ICcrCnRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LmhlaWdodCsnKSc7fQppZighdGhpcy5waWN0dXJlQXNJbWFnZURhdGFfKXJldHVybjt0aGlzLmluZm9CYXJfLnZpc2libGU9ZmFsc2U7dGhpcy5pbmZvQmFyXy5yZW1vdmVBbGxCdXR0b25zKCk7aWYodGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmVycm9yKXt0aGlzLmluZm9CYXJfLm1lc3NhZ2U9J0Nhbm5vdCByYXN0ZXJpemUuLi4nO3RoaXMuaW5mb0Jhcl8uYWRkQnV0dG9uKCdNb3JlIGluZm8uLi4nLGZ1bmN0aW9uKGUpe2NvbnN0IG92ZXJsYXk9bmV3IHRyLnVpLmIuT3ZlcmxheSgpO1BvbHltZXIuZG9tKG92ZXJsYXkpLnRleHRDb250ZW50PXRoaXMucGljdHVyZUFzSW1hZ2VEYXRhXy5lcnJvcjtvdmVybGF5LnZpc2libGU9dHJ1ZTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9LmJpbmQodGhpcykpO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT10cnVlO30KdGhpcy5kcmF3UGljdHVyZV8oKTt9LGRyYXdQaWN0dXJlXygpe2NvbnN0IHNpemU9dGhpcy5nZXRSYXN0ZXJDYW52YXNTaXplXygpO2lmKHNpemUud2lkdGghPT10aGlzLnJhc3RlckNhbnZhc18ud2lkdGgpe3RoaXMucmFzdGVyQ2FudmFzXy53aWR0aD1zaXplLndpZHRoO30KaWYoc2l6ZS5oZWlnaHQhPT10aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0KXt0aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0PXNpemUuaGVpZ2h0O30KdGhpcy5yYXN0ZXJDdHhfLmNsZWFyUmVjdCgwLDAsc2l6ZS53aWR0aCxzaXplLmhlaWdodCk7aWYoIXRoaXMucGljdHVyZV98fCF0aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV8uaW1hZ2VEYXRhKXJldHVybjtjb25zdCBpbWdDYW52YXM9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmFzQ2FudmFzKCk7Y29uc3Qgdz1pbWdDYW52YXMud2lkdGg7Y29uc3QgaD1pbWdDYW52YXMuaGVpZ2h0O3RoaXMucmFzdGVyQ3R4Xy5kcmF3SW1hZ2UoaW1nQ2FudmFzLDAsMCx3LGgsMCwwLHcqdGhpcy56b29tU2NhbGVWYWx1ZV8saCp0aGlzLnpvb21TY2FsZVZhbHVlXyk7fSxyYXN0ZXJpemVfKCl7aWYodGhpcy5waWN0dXJlXyl7dGhpcy5waWN0dXJlXy5yYXN0ZXJpemUoe3Nob3dPdmVyZHJhdzpmYWxzZX0sdGhpcy5vblJhc3RlckNvbXBsZXRlXy5iaW5kKHRoaXMpKTt9fSxvblJhc3RlckNvbXBsZXRlXyhwaWN0dXJlQXNJbWFnZURhdGEpe3RoaXMucGljdHVyZUFzSW1hZ2VEYXRhXz1waWN0dXJlQXNJbWFnZURhdGE7dGhpcy5zY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpO30sb25EaXNwbGF5SXRlbUxpc3RTZWxlY3Rpb25fKGUpe2NvbnN0IHNlbGVjdGVkPXRoaXMuZGlzcGxheUl0ZW1MaXN0Vmlld18uc2VsZWN0ZWRFbGVtZW50O2lmKCFzZWxlY3RlZCl7dGhpcy5waWN0dXJlPXRoaXMuZGlzcGxheUl0ZW1MaXN0XztyZXR1cm47fQpjb25zdCBpbmRleD1BcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKHRoaXMuZGlzcGxheUl0ZW1MaXN0Vmlld18uY2hpbGRyZW4sc2VsZWN0ZWQpO2NvbnN0IGRpc3BsYXlJdGVtPXRoaXMuZGlzcGxheUl0ZW1MaXN0Xy5pdGVtc1tpbmRleF07aWYoZGlzcGxheUl0ZW0mJmRpc3BsYXlJdGVtLnNrcDY0KXt0aGlzLnBpY3R1cmU9bmV3IHRyLmUuY2MuUGljdHVyZShkaXNwbGF5SXRlbS5za3A2NCx0aGlzLmRpc3BsYXlJdGVtTGlzdF8ubGF5ZXJSZWN0KTt9ZWxzZXt0aGlzLnBpY3R1cmU9dW5kZWZpbmVkO319LG9uRGlzcGxheUl0ZW1JbmZvQ2xpY2tfKGUpe2lmKGUmJmUudGFyZ2V0PT09dGhpcy5kaXNwbGF5SXRlbUluZm9fKXt0aGlzLmRpc3BsYXlJdGVtTGlzdFZpZXdfLnNlbGVjdGVkRWxlbWVudD11bmRlZmluZWQ7fX0sdXBkYXRlRHJhd09wc0xpc3RfKHNob3dPcHNMaXN0KXtpZihzaG93T3BzTGlzdCl7dGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfLnBpY3R1cmU9dGhpcy5waWN0dXJlXztpZih0aGlzLnBpY3R1cmVPcHNMaXN0Vmlld18ubnVtT3BzPjApe3RoaXMucGljdHVyZU9wc0xpc3RWaWV3Xy5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy5waWN0dXJlT3BzTGlzdERyYWdIYW5kbGVfLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt9fWVsc2V7dGhpcy5waWN0dXJlT3BzTGlzdFZpZXdfLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMucGljdHVyZU9wc0xpc3REcmFnSGFuZGxlXy5zdHlsZS5kaXNwbGF5PSdub25lJzt9fSx0cmFja01vdXNlXygpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcy5yYXN0ZXJBcmVhXztQb2x5bWVyLmRvbSh0aGlzLnJhc3RlckFyZWFfKS5hcHBlbmRDaGlsZCh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc3VwcG9ydGVkTW9kZU1hc2s9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT007dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ubW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5kZWZhdWx0TW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXR0aW5nc0tleT0ncGljdHVyZURlYnVnZ2VyLm1vdXNlTW9kZVNlbGVjdG9yJzt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnpvb20nLHRoaXMub25CZWdpblpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXpvb20nLHRoaXMub25VcGRhdGVab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmR6b29tJyx0aGlzLm9uRW5kWm9vbV8uYmluZCh0aGlzKSk7fSxvbkJlZ2luWm9vbV8oZSl7dGhpcy5pc1pvb21pbmdfPXRydWU7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlWm9vbV8oZSl7aWYoIXRoaXMuaXNab29taW5nXylyZXR1cm47Y29uc3QgY3VycmVudE1vdXNlVmlld1Bvcz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO3RoaXMuem9vbVNjYWxlVmFsdWVfKz0oKHRoaXMubGFzdE1vdXNlVmlld1Bvc18ueS1jdXJyZW50TW91c2VWaWV3UG9zLnkpKjAuMDAxKTt0aGlzLnpvb21TY2FsZVZhbHVlXz1NYXRoLm1heCh0aGlzLnpvb21TY2FsZVZhbHVlXywwLjEpO3RoaXMuZHJhd1BpY3R1cmVfKCk7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz1jdXJyZW50TW91c2VWaWV3UG9zO30sb25FbmRab29tXyhlKXt0aGlzLmxhc3RNb3VzZVZpZXdQb3NfPXVuZGVmaW5lZDt0aGlzLmlzWm9vbWluZ189ZmFsc2U7ZS5wcmV2ZW50RGVmYXVsdCgpO30sZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSl7cmV0dXJue3g6ZS5jbGllbnRYLXRoaXMucmFzdGVyQXJlYV8ub2Zmc2V0TGVmdCx5OmUuY2xpZW50WS10aGlzLnJhc3RlckFyZWFfLm9mZnNldFRvcH07fSxzYXZlRmlsZV8oZmlsZW5hbWUscmF3RGF0YSl7aWYoIXJhd0RhdGEpcmV0dXJuO2NvbnN0IGxlbmd0aD1yYXdEYXRhLmxlbmd0aDtjb25zdCBhcnJheUJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIobGVuZ3RoKTtjb25zdCB1aW50OEFycmF5PW5ldyBVaW50OEFycmF5KGFycmF5QnVmZmVyKTtmb3IobGV0IGM9MDtjPGxlbmd0aDtjKyspe3VpbnQ4QXJyYXlbY109cmF3RGF0YS5jaGFyQ29kZUF0KGMpO30KY29uc3QgYmxvYj1uZXcgQmxvYihbdWludDhBcnJheV0se3R5cGU6J2FwcGxpY2F0aW9uL29jdGV0LWJpbmFyeSd9KTtjb25zdCBibG9iVXJsPXdpbmRvdy5VUkwuY3JlYXRlT2JqZWN0VVJMKGJsb2IpO2NvbnN0IGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKCdodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sJywnYScpO2xpbmsuaHJlZj1ibG9iVXJsO2xpbmsuZG93bmxvYWQ9ZmlsZW5hbWU7Y29uc3QgZXZlbnQ9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoJ01vdXNlRXZlbnRzJyk7ZXZlbnQuaW5pdE1vdXNlRXZlbnQoJ2NsaWNrJyx0cnVlLGZhbHNlLHdpbmRvdywwLDAsMCwwLDAsZmFsc2UsZmFsc2UsZmFsc2UsZmFsc2UsMCxudWxsKTtsaW5rLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30sb25FeHBvcnREaXNwbGF5TGlzdENsaWNrZWRfKCl7Y29uc3QgcmF3RGF0YT1KU09OLnN0cmluZ2lmeSh0aGlzLmRpc3BsYXlJdGVtTGlzdF8uaXRlbXMpO3RoaXMuc2F2ZUZpbGVfKHRoaXMuZGlzcGxheUxpc3RGaWxlbmFtZV8udmFsdWUscmF3RGF0YSk7fSxvbkV4cG9ydFNrUGljdHVyZUNsaWNrZWRfKCl7Y29uc3QgcmF3RGF0YT10ci5iLkJhc2U2NC5hdG9iKHRoaXMucGljdHVyZV8uZ2V0QmFzZTY0U2twRGF0YSgpKTt0aGlzLnNhdmVGaWxlXyh0aGlzLnNrcEZpbGVuYW1lXy52YWx1ZSxyYXdEYXRhKTt9fTtyZXR1cm57RGlzcGxheUl0ZW1EZWJ1Z2dlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgRGlzcGxheUl0ZW1TbmFwc2hvdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWRpc3BsYXktaXRlbS1saXN0LXZpZXcnLHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyk7RGlzcGxheUl0ZW1TbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMuc3R5bGUuZmxleFNocmluaz0xO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnN0eWxlLm1pbldpZHRoPTA7dGhpcy5kaXNwbGF5SXRlbURlYnVnZ2VyXz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuRGlzcGxheUl0ZW1EZWJ1Z2dlcigpO3RoaXMuZGlzcGxheUl0ZW1EZWJ1Z2dlcl8uc3R5bGUuZmxleEdyb3c9MTt0aGlzLmRpc3BsYXlJdGVtRGVidWdnZXJfLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLmRpc3BsYXlJdGVtRGVidWdnZXJfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5kaXNwbGF5SXRlbURlYnVnZ2VyXy5zdHlsZS5taW5XaWR0aD0wO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuZGlzcGxheUl0ZW1EZWJ1Z2dlcl8pO30sdXBkYXRlQ29udGVudHMoKXtpZih0aGlzLm9iamVjdFNuYXBzaG90XyYmdGhpcy5kaXNwbGF5SXRlbURlYnVnZ2VyXyl7dGhpcy5kaXNwbGF5SXRlbURlYnVnZ2VyXy5kaXNwbGF5SXRlbUxpc3Q9dGhpcy5vYmplY3RTbmFwc2hvdF87fX19O3RyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5yZWdpc3RlcihEaXNwbGF5SXRlbVNuYXBzaG90Vmlldyx7dHlwZU5hbWVzOlsnY2M6OkRpc3BsYXlJdGVtTGlzdCddLHNob3dJbnN0YW5jZXM6ZmFsc2V9KTtyZXR1cm57RGlzcGxheUl0ZW1TbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBSRU5ERVJfUEFTU19RVUFEUz1NYXRoLm1heChjb25zdGFudHMuQUNUSVZFX1RSRUUsY29uc3RhbnRzLlBFTkRJTkdfVFJFRSkrMTtjb25zdCBMYXllclBpY2tlcj10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtbGF5ZXItcGlja2VyJyk7TGF5ZXJQaWNrZXIucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTFVua25vd25FbGVtZW50LnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RoaXMubHRoaV89dW5kZWZpbmVkO3RoaXMuY29udHJvbHNfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RvcC1jb250cm9scycpO3RoaXMucmVuZGVyUGFzc1F1YWRzXz1mYWxzZTt0aGlzLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5mbGV4R3Jvdz0wO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhTaHJpbms9MDt0aGlzLmNvbnRyb2xzXy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuY29udHJvbHNfLnN0eWxlLmJhY2tncm91bmRJbWFnZT0nLXdlYmtpdC1ncmFkaWVudChsaW5lYXIsIDAgMCwgMTAwJSAwLCBmcm9tKCNFNUU1RTUpLCB0bygjRDFEMUQxKSknO3RoaXMuY29udHJvbHNfLnN0eWxlLmJvcmRlckJvdHRvbT0nMXB4IHNvbGlkICM4ZThlOGUnO3RoaXMuY29udHJvbHNfLnN0eWxlLmJvcmRlclRvcD0nMXB4IHNvbGlkIHdoaXRlJzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO3RoaXMuY29udHJvbHNfLnN0eWxlLmZvbnRTaXplPScxNHB4Jzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5wYWRkaW5nTGVmdD0nMnB4Jzt0aGlzLml0ZW1MaXN0Xz1uZXcgdHIudWkuYi5MaXN0VmlldygpO3RoaXMuaXRlbUxpc3RfLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5pdGVtTGlzdF8uc3R5bGUuZmxleFNocmluaz0xO3RoaXMuaXRlbUxpc3RfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5pdGVtTGlzdF8uc3R5bGUuZm9udEZhbWlseT0nbW9ub3NwYWNlJzt0aGlzLml0ZW1MaXN0Xy5zdHlsZS5vdmVyZmxvdz0nYXV0byc7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5jb250cm9sc18pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaXRlbUxpc3RfKTt0aGlzLml0ZW1MaXN0Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsdGhpcy5vbkl0ZW1TZWxlY3Rpb25DaGFuZ2VkXy5iaW5kKHRoaXMpKTtQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCd3aGljaFRyZWUnLCdsYXllclBpY2tlci53aGljaFRyZWUnLGNvbnN0YW50cy5BQ1RJVkVfVFJFRSxbe2xhYmVsOidBY3RpdmUgdHJlZScsdmFsdWU6Y29uc3RhbnRzLkFDVElWRV9UUkVFfSx7bGFiZWw6J1BlbmRpbmcgdHJlZScsdmFsdWU6Y29uc3RhbnRzLlBFTkRJTkdfVFJFRX0se2xhYmVsOidSZW5kZXIgcGFzcyBxdWFkcycsdmFsdWU6UkVOREVSX1BBU1NfUVVBRFN9XSkpO3RoaXMuc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnNfPWZhbHNlO2NvbnN0IHNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzPXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMnLCdsYXllclBpY2tlci5zaG93UHVyZVRyYW5zZm9ybUxheWVycycsZmFsc2UsJ1RyYW5zZm9ybSBsYXllcnMnKTtQb2x5bWVyLmRvbShzaG93UHVyZVRyYW5zZm9ybUxheWVycykuY2xhc3NMaXN0LmFkZCgnc2hvdy10cmFuc2Zvcm0tbGF5ZXJzJyk7c2hvd1B1cmVUcmFuc2Zvcm1MYXllcnMudGl0bGU9J1doZW4gY2hlY2tlZCwgcHVyZSB0cmFuc2Zvcm0gbGF5ZXJzIGFyZSBzaG93bic7UG9seW1lci5kb20odGhpcy5jb250cm9sc18pLmFwcGVuZENoaWxkKHNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzKTt9LGdldCBsdGhpU25hcHNob3QoKXtyZXR1cm4gdGhpcy5sdGhpU25hcHNob3RfO30sc2V0IGx0aGlTbmFwc2hvdChsdGhpU25hcHNob3Qpe3RoaXMubHRoaVNuYXBzaG90Xz1sdGhpU25hcHNob3Q7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB3aGljaFRyZWUoKXtyZXR1cm4gdGhpcy5yZW5kZXJQYXNzUXVhZHNfP2NvbnN0YW50cy5BQ1RJVkVfVFJFRTp0aGlzLndoaWNoVHJlZV87fSxzZXQgd2hpY2hUcmVlKHdoaWNoVHJlZSl7dGhpcy53aGljaFRyZWVfPXdoaWNoVHJlZTt0aGlzLnJlbmRlclBhc3NRdWFkc189KHdoaWNoVHJlZT09PVJFTkRFUl9QQVNTX1FVQURTKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlJyxmYWxzZSk7fSxnZXQgbGF5ZXJUcmVlSW1wbCgpe2lmKHRoaXMubHRoaVNuYXBzaG90PT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMubHRoaVNuYXBzaG90LmdldFRyZWUodGhpcy53aGljaFRyZWUpO30sZ2V0IGlzUmVuZGVyUGFzc1F1YWRzKCl7cmV0dXJuIHRoaXMucmVuZGVyUGFzc1F1YWRzXzt9LGdldCBzaG93UHVyZVRyYW5zZm9ybUxheWVycygpe3JldHVybiB0aGlzLnNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzXzt9LHNldCBzaG93UHVyZVRyYW5zZm9ybUxheWVycyhzaG93KXtpZih0aGlzLnNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzXz09PXNob3cpcmV0dXJuO3RoaXMuc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnNfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldFJlbmRlclBhc3NJbmZvc18oKXtpZighdGhpcy5sdGhpU25hcHNob3RfKXJldHVybltdO2NvbnN0IHJlbmRlclBhc3NJbmZvPVtdO2lmKCF0aGlzLmx0aGlTbmFwc2hvdF8uYXJncy5mcmFtZXx8IXRoaXMubHRoaVNuYXBzaG90Xy5hcmdzLmZyYW1lLnJlbmRlclBhc3Nlcyl7cmV0dXJuIHJlbmRlclBhc3NJbmZvO30KY29uc3QgcmVuZGVyUGFzc2VzPXRoaXMubHRoaVNuYXBzaG90Xy5hcmdzLmZyYW1lLnJlbmRlclBhc3Nlcztmb3IobGV0IGk9MDtpPHJlbmRlclBhc3Nlcy5sZW5ndGg7KytpKXtjb25zdCBpbmZvPXtyZW5kZXJQYXNzOnJlbmRlclBhc3Nlc1tpXSxkZXB0aDowLGlkOmksbmFtZTonY2M6OlJlbmRlclBhc3MnfTtyZW5kZXJQYXNzSW5mby5wdXNoKGluZm8pO30KcmV0dXJuIHJlbmRlclBhc3NJbmZvO30sZ2V0TGF5ZXJJbmZvc18oKXtpZighdGhpcy5sdGhpU25hcHNob3RfKXJldHVybltdO2NvbnN0IHRyZWU9dGhpcy5sdGhpU25hcHNob3RfLmdldFRyZWUodGhpcy53aGljaFRyZWVfKTtpZighdHJlZSlyZXR1cm5bXTtjb25zdCBsYXllckluZm9zPVtdO2NvbnN0IHNob3dQdXJlVHJhbnNmb3JtTGF5ZXJzPXRoaXMuc2hvd1B1cmVUcmFuc2Zvcm1MYXllcnNfO2NvbnN0IHZpc2l0ZWRMYXllcnM9e307ZnVuY3Rpb24gdmlzaXRMYXllcihsYXllcixkZXB0aCxpc01hc2ssaXNSZXBsaWNhKXtpZih2aXNpdGVkTGF5ZXJzW2xheWVyLmxheWVySWRdKXJldHVybjt2aXNpdGVkTGF5ZXJzW2xheWVyLmxheWVySWRdPXRydWU7Y29uc3QgaW5mbz17bGF5ZXIsZGVwdGh9O2lmKGxheWVyLmFyZ3MuZHJhd3NDb250ZW50KXtpbmZvLm5hbWU9bGF5ZXIub2JqZWN0SW5zdGFuY2UubmFtZTt9ZWxzZXtpbmZvLm5hbWU9J2NjOjpMYXllckltcGwnO30KaWYobGF5ZXIudXNpbmdHcHVSYXN0ZXJpemF0aW9uKXtpbmZvLm5hbWUrPScgKEcpJzt9CmluZm8uaXNNYXNrTGF5ZXI9aXNNYXNrO2luZm8ucmVwbGljYUxheWVyPWlzUmVwbGljYTtpZihzaG93UHVyZVRyYW5zZm9ybUxheWVyc3x8bGF5ZXIuYXJncy5kcmF3c0NvbnRlbnQpe2xheWVySW5mb3MucHVzaChpbmZvKTt9fQp0cmVlLml0ZXJMYXllcnModmlzaXRMYXllcik7cmV0dXJuIGxheWVySW5mb3M7fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnJlbmRlclBhc3NRdWFkc18pe3RoaXMudXBkYXRlUmVuZGVyUGFzc0NvbnRlbnRzXygpO31lbHNle3RoaXMudXBkYXRlTGF5ZXJDb250ZW50c18oKTt9fSx1cGRhdGVSZW5kZXJQYXNzQ29udGVudHNfKCl7dGhpcy5pdGVtTGlzdF8uY2xlYXIoKTtsZXQgc2VsZWN0ZWRSZW5kZXJQYXNzSWQ7aWYodGhpcy5zZWxlY3Rpb25fJiZ0aGlzLnNlbGVjdGlvbl8uYXNzb2NpYXRlZFJlbmRlclBhc3NJZCl7c2VsZWN0ZWRSZW5kZXJQYXNzSWQ9dGhpcy5zZWxlY3Rpb25fLmFzc29jaWF0ZWRSZW5kZXJQYXNzSWQ7fQpjb25zdCByZW5kZXJQYXNzSW5mb3M9dGhpcy5nZXRSZW5kZXJQYXNzSW5mb3NfKCk7cmVuZGVyUGFzc0luZm9zLmZvckVhY2goZnVuY3Rpb24ocmVuZGVyUGFzc0luZm8pe2NvbnN0IHJlbmRlclBhc3M9cmVuZGVyUGFzc0luZm8ucmVuZGVyUGFzcztjb25zdCBpZD1yZW5kZXJQYXNzSW5mby5pZDtjb25zdCBpdGVtPXRoaXMuY3JlYXRlRWxlbWVudFdpdGhEZXB0aF8ocmVuZGVyUGFzc0luZm8uZGVwdGgpO2NvbnN0IGxhYmVsRWw9UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTcGFuKCkpO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PXJlbmRlclBhc3NJbmZvLm5hbWUrJyAnK2lkO2l0ZW0ucmVuZGVyUGFzcz1yZW5kZXJQYXNzO2l0ZW0ucmVuZGVyUGFzc0lkPWlkO1BvbHltZXIuZG9tKHRoaXMuaXRlbUxpc3RfKS5hcHBlbmRDaGlsZChpdGVtKTtpZihpZD09PXNlbGVjdGVkUmVuZGVyUGFzc0lkKXtyZW5kZXJQYXNzLnNlbGVjdGlvblN0YXRlPXRyLm1vZGVsLlNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO319LHRoaXMpO30sdXBkYXRlTGF5ZXJDb250ZW50c18oKXt0aGlzLmNoYW5naW5nSXRlbVNlbGVjdGlvbl89dHJ1ZTt0cnl7dGhpcy5pdGVtTGlzdF8uY2xlYXIoKTtsZXQgc2VsZWN0ZWRMYXllcklkO2lmKHRoaXMuc2VsZWN0aW9uXyYmdGhpcy5zZWxlY3Rpb25fLmFzc29jaWF0ZWRMYXllcklkKXtzZWxlY3RlZExheWVySWQ9dGhpcy5zZWxlY3Rpb25fLmFzc29jaWF0ZWRMYXllcklkO30KY29uc3QgbGF5ZXJJbmZvcz10aGlzLmdldExheWVySW5mb3NfKCk7bGF5ZXJJbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGxheWVySW5mbyl7Y29uc3QgbGF5ZXI9bGF5ZXJJbmZvLmxheWVyO2NvbnN0IGlkPWxheWVyLmxheWVySWQ7Y29uc3QgaXRlbT10aGlzLmNyZWF0ZUVsZW1lbnRXaXRoRGVwdGhfKGxheWVySW5mby5kZXB0aCk7Y29uc3QgbGFiZWxFbD1Qb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oKSk7UG9seW1lci5kb20obGFiZWxFbCkudGV4dENvbnRlbnQ9bGF5ZXJJbmZvLm5hbWUrJyAnK2lkO2NvbnN0IG5vdGVzRWw9UG9seW1lci5kb20oaXRlbSkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTcGFuKCkpO2lmKGxheWVySW5mby5pc01hc2tMYXllcil7UG9seW1lci5kb20obm90ZXNFbCkudGV4dENvbnRlbnQrPScobWFzayknO30KaWYobGF5ZXJJbmZvLmlzUmVwbGljYUxheWVyKXtQb2x5bWVyLmRvbShub3Rlc0VsKS50ZXh0Q29udGVudCs9JyhyZXBsaWNhKSc7fQppZigobGF5ZXIuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzIT09dW5kZWZpbmVkKSYmKGxheWVyLmdwdU1lbW9yeVVzYWdlSW5CeXRlcz4wKSl7Y29uc3QgZ3B1VXNhZ2VTdHI9dHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcy5mb3JtYXQobGF5ZXIuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzKTtQb2x5bWVyLmRvbShub3Rlc0VsKS50ZXh0Q29udGVudCs9JyAoJytncHVVc2FnZVN0cisnIE1pQiknO30KaXRlbS5sYXllcj1sYXllcjtQb2x5bWVyLmRvbSh0aGlzLml0ZW1MaXN0XykuYXBwZW5kQ2hpbGQoaXRlbSk7aWYobGF5ZXIubGF5ZXJJZD09PXNlbGVjdGVkTGF5ZXJJZCl7bGF5ZXIuc2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGUuU0VMRUNURUQ7aXRlbS5zZWxlY3RlZD10cnVlO319LHRoaXMpO31maW5hbGx5e3RoaXMuY2hhbmdpbmdJdGVtU2VsZWN0aW9uXz1mYWxzZTt9fSxjcmVhdGVFbGVtZW50V2l0aERlcHRoXyhkZXB0aCl7Y29uc3QgaXRlbT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBpbmRlbnRFbD1Qb2x5bWVyLmRvbShpdGVtKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oKSk7aW5kZW50RWwuc3R5bGUud2hpdGVTcGFjZT0ncHJlJztmb3IobGV0IGk9MDtpPGRlcHRoO2krKyl7UG9seW1lci5kb20oaW5kZW50RWwpLnRleHRDb250ZW50PVBvbHltZXIuZG9tKGluZGVudEVsKS50ZXh0Q29udGVudCsnICc7fQpyZXR1cm4gaXRlbTt9LG9uSXRlbVNlbGVjdGlvbkNoYW5nZWRfKGUpe2lmKHRoaXMuY2hhbmdpbmdJdGVtU2VsZWN0aW9uXylyZXR1cm47aWYodGhpcy5yZW5kZXJQYXNzUXVhZHNfKXt0aGlzLm9uUmVuZGVyUGFzc1NlbGVjdGVkXyhlKTt9ZWxzZXt0aGlzLm9uTGF5ZXJTZWxlY3RlZF8oZSk7fQp0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZScsZmFsc2UpO30sb25SZW5kZXJQYXNzU2VsZWN0ZWRfKGUpe2xldCBzZWxlY3RlZFJlbmRlclBhc3M7bGV0IHNlbGVjdGVkUmVuZGVyUGFzc0lkO2lmKHRoaXMuaXRlbUxpc3RfLnNlbGVjdGVkRWxlbWVudCl7c2VsZWN0ZWRSZW5kZXJQYXNzPXRoaXMuaXRlbUxpc3RfLnNlbGVjdGVkRWxlbWVudC5yZW5kZXJQYXNzO3NlbGVjdGVkUmVuZGVyUGFzc0lkPXRoaXMuaXRlbUxpc3RfLnNlbGVjdGVkRWxlbWVudC5yZW5kZXJQYXNzSWQ7fQppZihzZWxlY3RlZFJlbmRlclBhc3Mpe3RoaXMuc2VsZWN0aW9uXz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuUmVuZGVyUGFzc1NlbGVjdGlvbihzZWxlY3RlZFJlbmRlclBhc3Msc2VsZWN0ZWRSZW5kZXJQYXNzSWQpO31lbHNle3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7fX0sb25MYXllclNlbGVjdGVkXyhlKXtsZXQgc2VsZWN0ZWRMYXllcjtpZih0aGlzLml0ZW1MaXN0Xy5zZWxlY3RlZEVsZW1lbnQpe3NlbGVjdGVkTGF5ZXI9dGhpcy5pdGVtTGlzdF8uc2VsZWN0ZWRFbGVtZW50LmxheWVyO30KaWYoc2VsZWN0ZWRMYXllcil7dGhpcy5zZWxlY3Rpb25fPW5ldyB0ci51aS5lLmNocm9tZS5jYy5MYXllclNlbGVjdGlvbihzZWxlY3RlZExheWVyKTt9ZWxzZXt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO319LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHRoaXMuc2VsZWN0aW9uXz09PXNlbGVjdGlvbilyZXR1cm47dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO319O3JldHVybntMYXllclBpY2tlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jYycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBSZW5kZXJQYXNzU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpSZW5kZXJQYXNzU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLHByZUluaXRpYWxpemUoKXt0ci5lLmNjLnByZUluaXRpYWxpemVPYmplY3QodGhpcyk7fSxpbml0aWFsaXplKCl7dHIuZS5jYy5tb3ZlUmVxdWlyZWRGaWVsZHNGcm9tQXJnc1RvVG9wbGV2ZWwodGhpcyxbJ3F1YWRMaXN0J10pO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKFJlbmRlclBhc3NTbmFwc2hvdCx7dHlwZU5hbWU6J2NjOjpSZW5kZXJQYXNzJ30pO3JldHVybntSZW5kZXJQYXNzU25hcHNob3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgZGVnMnJhZD10ci5iLm1hdGguZGVnMnJhZDtjb25zdCBjb25zdGFudHM9e0RFRkFVTFRfU0NBTEU6MC41LERFRkFVTFRfRVlFX0RJU1RBTkNFOjEwMDAwLE1JTklNVU1fRElTVEFOQ0U6MTAwMCxNQVhJTVVNX0RJU1RBTkNFOjEwMDAwMCxGT1Y6MTUsUkVTQ0FMRV9USU1FT1VUX01TOjIwMCxNQVhJTVVNX1RJTFQ6ODAsU0VUVElOR1NfTkFNRVNQQUNFOid0ci51aV9jYW1lcmEnfTtjb25zdCBDYW1lcmE9dHIudWkuYi5kZWZpbmUoJ2NhbWVyYScpO0NhbWVyYS5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MVW5rbm93bkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKGV2ZW50U291cmNlKXt0aGlzLmV2ZW50U291cmNlXz1ldmVudFNvdXJjZTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnBhbicsdGhpcy5vblBhbkJlZ2luXy5iaW5kKHRoaXMpKTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVwYW4nLHRoaXMub25QYW5VcGRhdGVfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHBhbicsdGhpcy5vblBhbkVuZF8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcignYmVnaW56b29tJyx0aGlzLm9uWm9vbUJlZ2luXy5iaW5kKHRoaXMpKTt0aGlzLmV2ZW50U291cmNlXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGV6b29tJyx0aGlzLm9uWm9vbVVwZGF0ZV8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcignZW5kem9vbScsdGhpcy5vblpvb21FbmRfLmJpbmQodGhpcykpO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2lucm90YXRlJyx0aGlzLm9uUm90YXRlQmVnaW5fLmJpbmQodGhpcykpO3RoaXMuZXZlbnRTb3VyY2VfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXJvdGF0ZScsdGhpcy5vblJvdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKSk7dGhpcy5ldmVudFNvdXJjZV8uYWRkRXZlbnRMaXN0ZW5lcignZW5kcm90YXRlJyx0aGlzLm9uUm90YXRlRW5kXy5iaW5kKHRoaXMpKTt0aGlzLmV5ZV89WzAsMCxjb25zdGFudHMuREVGQVVMVF9FWUVfRElTVEFOQ0VdO3RoaXMuZ2F6ZVRhcmdldF89WzAsMCwwXTt0aGlzLnJvdGF0aW9uXz1bMCwwXTt0aGlzLnBpeGVsUmF0aW9fPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO30sZ2V0IG1vZGVsVmlld01hdHJpeCgpe2NvbnN0IG12TWF0cml4PW1hdDQuY3JlYXRlKCk7bWF0NC5sb29rQXQobXZNYXRyaXgsdGhpcy5leWVfLHRoaXMuZ2F6ZVRhcmdldF8sWzAsMSwwXSk7cmV0dXJuIG12TWF0cml4O30sZ2V0IHByb2plY3Rpb25NYXRyaXgoKXtjb25zdCByZWN0PXRyLnVpLmIud2luZG93UmVjdEZvckVsZW1lbnQodGhpcy5jYW52YXNfKS5zY2FsZVNpemUodGhpcy5waXhlbFJhdGlvXyk7Y29uc3QgYXNwZWN0UmF0aW89cmVjdC53aWR0aC9yZWN0LmhlaWdodDtjb25zdCBtYXRyaXg9bWF0NC5jcmVhdGUoKTttYXQ0LnBlcnNwZWN0aXZlKG1hdHJpeCxkZWcycmFkKGNvbnN0YW50cy5GT1YpLGFzcGVjdFJhdGlvLDEsMTAwMDAwKTtyZXR1cm4gbWF0cml4O30sc2V0IGNhbnZhcyhjKXt0aGlzLmNhbnZhc189Yzt9LHNldCBkZXZpY2VSZWN0KHJlY3Qpe3RoaXMuZGV2aWNlUmVjdF89cmVjdDt9LGdldCBzdGFja2luZ0Rpc3RhbmNlRGFtcGVuaW5nKCl7Y29uc3QgZ2F6ZVZlY3Rvcj1bdGhpcy5nYXplVGFyZ2V0X1swXS10aGlzLmV5ZV9bMF0sdGhpcy5nYXplVGFyZ2V0X1sxXS10aGlzLmV5ZV9bMV0sdGhpcy5nYXplVGFyZ2V0X1syXS10aGlzLmV5ZV9bMl1dO3ZlYzMubm9ybWFsaXplKGdhemVWZWN0b3IsZ2F6ZVZlY3Rvcik7cmV0dXJuIDErZ2F6ZVZlY3RvclsyXTt9LGxvYWRDYW1lcmFGcm9tU2V0dGluZ3Moc2V0dGluZ3Mpe3RoaXMuZXllXz1zZXR0aW5ncy5nZXQoJ2V5ZScsdGhpcy5leWVfLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO3RoaXMuZ2F6ZVRhcmdldF89c2V0dGluZ3MuZ2V0KCdnYXplX3RhcmdldCcsdGhpcy5nYXplVGFyZ2V0Xyxjb25zdGFudHMuU0VUVElOR1NfTkFNRVNQQUNFKTt0aGlzLnJvdGF0aW9uXz1zZXR0aW5ncy5nZXQoJ3JvdGF0aW9uJyx0aGlzLnJvdGF0aW9uXyxjb25zdGFudHMuU0VUVElOR1NfTkFNRVNQQUNFKTt0aGlzLmRpc3BhdGNoUmVuZGVyRXZlbnRfKCk7fSxzYXZlQ2FtZXJhVG9TZXR0aW5ncyhzZXR0aW5ncyl7c2V0dGluZ3Muc2V0KCdleWUnLHRoaXMuZXllXyxjb25zdGFudHMuU0VUVElOR1NfTkFNRVNQQUNFKTtzZXR0aW5ncy5zZXQoJ2dhemVfdGFyZ2V0Jyx0aGlzLmdhemVUYXJnZXRfLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO3NldHRpbmdzLnNldCgncm90YXRpb24nLHRoaXMucm90YXRpb25fLGNvbnN0YW50cy5TRVRUSU5HU19OQU1FU1BBQ0UpO30scmVzZXRDYW1lcmEoKXt0aGlzLmV5ZV89WzAsMCxjb25zdGFudHMuREVGQVVMVF9FWUVfRElTVEFOQ0VdO3RoaXMuZ2F6ZVRhcmdldF89WzAsMCwwXTt0aGlzLnJvdGF0aW9uXz1bMCwwXTtjb25zdCBzZXR0aW5ncz10ci5iLlNlc3Npb25TZXR0aW5ncygpO2NvbnN0IGtleXM9c2V0dGluZ3Mua2V5cyhjb25zdGFudHMuU0VUVElOR1NfTkFNRVNQQUNFKTtpZihrZXlzLmxlbmd0aCE9PTApe3RoaXMubG9hZENhbWVyYUZyb21TZXR0aW5ncyhzZXR0aW5ncyk7cmV0dXJuO30KaWYodGhpcy5kZXZpY2VSZWN0Xyl7Y29uc3QgcmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHRoaXMuY2FudmFzXykuc2NhbGVTaXplKHRoaXMucGl4ZWxSYXRpb18pO3RoaXMuZXllX1swXT10aGlzLmRldmljZVJlY3RfLndpZHRoLzI7dGhpcy5leWVfWzFdPXRoaXMuZGV2aWNlUmVjdF8uaGVpZ2h0LzI7dGhpcy5nYXplVGFyZ2V0X1swXT10aGlzLmRldmljZVJlY3RfLndpZHRoLzI7dGhpcy5nYXplVGFyZ2V0X1sxXT10aGlzLmRldmljZVJlY3RfLmhlaWdodC8yO30KdGhpcy5zYXZlQ2FtZXJhVG9TZXR0aW5ncyhzZXR0aW5ncyk7dGhpcy5kaXNwYXRjaFJlbmRlckV2ZW50XygpO30sdXBkYXRlUGFuQnlEZWx0YShkZWx0YSl7Y29uc3QgcmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHRoaXMuY2FudmFzXykuc2NhbGVTaXplKHRoaXMucGl4ZWxSYXRpb18pO2NvbnN0IGV5ZVZlY3Rvcj1bdGhpcy5leWVfWzBdLXRoaXMuZ2F6ZVRhcmdldF9bMF0sdGhpcy5leWVfWzFdLXRoaXMuZ2F6ZVRhcmdldF9bMV0sdGhpcy5leWVfWzJdLXRoaXMuZ2F6ZVRhcmdldF9bMl1dO2NvbnN0IGxlbmd0aD12ZWMzLmxlbmd0aChleWVWZWN0b3IpO3ZlYzMubm9ybWFsaXplKGV5ZVZlY3RvcixleWVWZWN0b3IpO2NvbnN0IGhhbGZGb3Y9Y29uc3RhbnRzLkZPVi8yO2NvbnN0IG11bHRpcGxpZXI9Mi4wKmxlbmd0aCpNYXRoLnRhbihkZWcycmFkKGhhbGZGb3YpKS9yZWN0LmhlaWdodDtjb25zdCB1cD1bMCwxLDBdO2NvbnN0IHJvdE1hdHJpeD1tYXQ0LmNyZWF0ZSgpO21hdDQucm90YXRlKHJvdE1hdHJpeCxyb3RNYXRyaXgsZGVnMnJhZCh0aGlzLnJvdGF0aW9uX1sxXSksWzAsMSwwXSk7bWF0NC5yb3RhdGUocm90TWF0cml4LHJvdE1hdHJpeCxkZWcycmFkKHRoaXMucm90YXRpb25fWzBdKSxbMSwwLDBdKTt2ZWMzLnRyYW5zZm9ybU1hdDQodXAsdXAscm90TWF0cml4KTtjb25zdCByaWdodD1bMCwwLDBdO3ZlYzMuY3Jvc3MocmlnaHQsZXllVmVjdG9yLHVwKTt2ZWMzLm5vcm1hbGl6ZShyaWdodCxyaWdodCk7Zm9yKGxldCBpPTA7aTwzOysraSl7dGhpcy5nYXplVGFyZ2V0X1tpXSs9ZGVsdGFbMF0qbXVsdGlwbGllcipyaWdodFtpXS1kZWx0YVsxXSptdWx0aXBsaWVyKnVwW2ldO3RoaXMuZXllX1tpXT10aGlzLmdhemVUYXJnZXRfW2ldK2xlbmd0aCpleWVWZWN0b3JbaV07fQppZihNYXRoLmFicyh0aGlzLmdhemVUYXJnZXRfWzJdKT4xZS02KXtjb25zdCBnYXplVmVjdG9yPVstZXllVmVjdG9yWzBdLC1leWVWZWN0b3JbMV0sLWV5ZVZlY3RvclsyXV07Y29uc3QgbmV3TGVuZ3RoPXRyLmIubWF0aC5jbGFtcCgtdGhpcy5leWVfWzJdL2dhemVWZWN0b3JbMl0sY29uc3RhbnRzLk1JTklNVU1fRElTVEFOQ0UsY29uc3RhbnRzLk1BWElNVU1fRElTVEFOQ0UpO2ZvcihsZXQgaT0wO2k8MzsrK2kpe3RoaXMuZ2F6ZVRhcmdldF9baV09dGhpcy5leWVfW2ldK25ld0xlbmd0aCpnYXplVmVjdG9yW2ldO319CnRoaXMuc2F2ZUNhbWVyYVRvU2V0dGluZ3ModHIuYi5TZXNzaW9uU2V0dGluZ3MoKSk7dGhpcy5kaXNwYXRjaFJlbmRlckV2ZW50XygpO30sdXBkYXRlWm9vbUJ5RGVsdGEoZGVsdGEpe2xldCBkZWx0YVk9ZGVsdGFbMV07ZGVsdGFZPXRyLmIubWF0aC5jbGFtcChkZWx0YVksLTUwLDUwKTtsZXQgc2NhbGU9MS4wLWRlbHRhWS8xMDAuMDtjb25zdCBleWVWZWN0b3I9WzAsMCwwXTt2ZWMzLnN1YnRyYWN0KGV5ZVZlY3Rvcix0aGlzLmV5ZV8sdGhpcy5nYXplVGFyZ2V0Xyk7Y29uc3QgbGVuZ3RoPXZlYzMubGVuZ3RoKGV5ZVZlY3Rvcik7aWYobGVuZ3RoKnNjYWxlPGNvbnN0YW50cy5NSU5JTVVNX0RJU1RBTkNFKXtzY2FsZT1jb25zdGFudHMuTUlOSU1VTV9ESVNUQU5DRS9sZW5ndGg7fWVsc2UgaWYobGVuZ3RoKnNjYWxlPmNvbnN0YW50cy5NQVhJTVVNX0RJU1RBTkNFKXtzY2FsZT1jb25zdGFudHMuTUFYSU1VTV9ESVNUQU5DRS9sZW5ndGg7fQp2ZWMzLnNjYWxlKGV5ZVZlY3RvcixleWVWZWN0b3Isc2NhbGUpO3ZlYzMuYWRkKHRoaXMuZXllXyx0aGlzLmdhemVUYXJnZXRfLGV5ZVZlY3Rvcik7dGhpcy5zYXZlQ2FtZXJhVG9TZXR0aW5ncyh0ci5iLlNlc3Npb25TZXR0aW5ncygpKTt0aGlzLmRpc3BhdGNoUmVuZGVyRXZlbnRfKCk7fSx1cGRhdGVSb3RhdGVCeURlbHRhKGRlbHRhKXtkZWx0YVswXSo9MC41O2RlbHRhWzFdKj0wLjU7aWYoTWF0aC5hYnModGhpcy5yb3RhdGlvbl9bMF0rZGVsdGFbMV0pPmNvbnN0YW50cy5NQVhJTVVNX1RJTFQpe3JldHVybjt9CmlmKE1hdGguYWJzKHRoaXMucm90YXRpb25fWzFdLWRlbHRhWzBdKT5jb25zdGFudHMuTUFYSU1VTV9USUxUKXtyZXR1cm47fQpjb25zdCBleWVWZWN0b3I9WzAsMCwwLDBdO3ZlYzMuc3VidHJhY3QoZXllVmVjdG9yLHRoaXMuZXllXyx0aGlzLmdhemVUYXJnZXRfKTtjb25zdCByb3RNYXRyaXg9bWF0NC5jcmVhdGUoKTttYXQ0LnJvdGF0ZShyb3RNYXRyaXgscm90TWF0cml4LC1kZWcycmFkKHRoaXMucm90YXRpb25fWzBdKSxbMSwwLDBdKTttYXQ0LnJvdGF0ZShyb3RNYXRyaXgscm90TWF0cml4LC1kZWcycmFkKHRoaXMucm90YXRpb25fWzFdKSxbMCwxLDBdKTt2ZWM0LnRyYW5zZm9ybU1hdDQoZXllVmVjdG9yLGV5ZVZlY3Rvcixyb3RNYXRyaXgpO3RoaXMucm90YXRpb25fWzBdKz1kZWx0YVsxXTt0aGlzLnJvdGF0aW9uX1sxXS09ZGVsdGFbMF07bWF0NC5pZGVudGl0eShyb3RNYXRyaXgpO21hdDQucm90YXRlKHJvdE1hdHJpeCxyb3RNYXRyaXgsZGVnMnJhZCh0aGlzLnJvdGF0aW9uX1sxXSksWzAsMSwwXSk7bWF0NC5yb3RhdGUocm90TWF0cml4LHJvdE1hdHJpeCxkZWcycmFkKHRoaXMucm90YXRpb25fWzBdKSxbMSwwLDBdKTt2ZWM0LnRyYW5zZm9ybU1hdDQoZXllVmVjdG9yLGV5ZVZlY3Rvcixyb3RNYXRyaXgpO3ZlYzMuYWRkKHRoaXMuZXllXyx0aGlzLmdhemVUYXJnZXRfLGV5ZVZlY3Rvcik7dGhpcy5zYXZlQ2FtZXJhVG9TZXR0aW5ncyh0ci5iLlNlc3Npb25TZXR0aW5ncygpKTt0aGlzLmRpc3BhdGNoUmVuZGVyRXZlbnRfKCk7fSxvblBhbkJlZ2luXyhlKXt0aGlzLnBhbm5pbmdfPXRydWU7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt9LG9uUGFuVXBkYXRlXyhlKXtpZighdGhpcy5wYW5uaW5nXylyZXR1cm47Y29uc3QgZGVsdGE9dGhpcy5nZXRNb3VzZURlbHRhXyhlLHRoaXMubGFzdE1vdXNlUG9zaXRpb25fKTt0aGlzLmxhc3RNb3VzZVBvc2l0aW9uXz10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3RoaXMudXBkYXRlUGFuQnlEZWx0YShkZWx0YSk7fSxvblBhbkVuZF8oZSl7dGhpcy5wYW5uaW5nXz1mYWxzZTt9LG9uWm9vbUJlZ2luXyhlKXt0aGlzLnpvb21pbmdfPXRydWU7Y29uc3QgcD10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3RoaXMubGFzdE1vdXNlUG9zaXRpb25fPXA7dGhpcy56b29tUG9pbnRfPXA7fSxvblpvb21VcGRhdGVfKGUpe2lmKCF0aGlzLnpvb21pbmdfKXJldHVybjtjb25zdCBkZWx0YT10aGlzLmdldE1vdXNlRGVsdGFfKGUsdGhpcy5sYXN0TW91c2VQb3NpdGlvbl8pO3RoaXMubGFzdE1vdXNlUG9zaXRpb25fPXRoaXMuZ2V0TW91c2VQb3NpdGlvbl8oZSk7dGhpcy51cGRhdGVab29tQnlEZWx0YShkZWx0YSk7fSxvblpvb21FbmRfKGUpe3RoaXMuem9vbWluZ189ZmFsc2U7dGhpcy56b29tUG9pbnRfPXVuZGVmaW5lZDt9LG9uUm90YXRlQmVnaW5fKGUpe3RoaXMucm90YXRpbmdfPXRydWU7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt9LG9uUm90YXRlVXBkYXRlXyhlKXtpZighdGhpcy5yb3RhdGluZ18pcmV0dXJuO2NvbnN0IGRlbHRhPXRoaXMuZ2V0TW91c2VEZWx0YV8oZSx0aGlzLmxhc3RNb3VzZVBvc2l0aW9uXyk7dGhpcy5sYXN0TW91c2VQb3NpdGlvbl89dGhpcy5nZXRNb3VzZVBvc2l0aW9uXyhlKTt0aGlzLnVwZGF0ZVJvdGF0ZUJ5RGVsdGEoZGVsdGEpO30sb25Sb3RhdGVFbmRfKGUpe3RoaXMucm90YXRpbmdfPWZhbHNlO30sZ2V0TW91c2VQb3NpdGlvbl8oZSl7Y29uc3QgcmVjdD10ci51aS5iLndpbmRvd1JlY3RGb3JFbGVtZW50KHRoaXMuY2FudmFzXyk7cmV0dXJuWyhlLmNsaWVudFgtcmVjdC54KSp0aGlzLnBpeGVsUmF0aW9fLChlLmNsaWVudFktcmVjdC55KSp0aGlzLnBpeGVsUmF0aW9fXTt9LGdldE1vdXNlRGVsdGFfKGUscCl7Y29uc3QgbmV3UD10aGlzLmdldE1vdXNlUG9zaXRpb25fKGUpO3JldHVybltuZXdQWzBdLXBbMF0sbmV3UFsxXS1wWzFdXTt9LGRpc3BhdGNoUmVuZGVyRXZlbnRfKCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ3JlbmRlcnJlcXVpcmVkJyxmYWxzZSxmYWxzZSk7fX07cmV0dXJue0NhbWVyYSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgY29uc3RhbnRzPXt9O2NvbnN0YW50cy5JTUFHRV9MT0FEX1JFVFJZX1RJTUVfTVM9NTAwO2NvbnN0YW50cy5TVUJESVZJU0lPTl9NSU5JTVVNPTE7Y29uc3RhbnRzLlNVQkRJVklTSU9OX1JFQ1VSU0lPTl9ERVBUSD0zO2NvbnN0YW50cy5TVUJESVZJU0lPTl9ERVBUSF9USFJFU0hPTEQ9MTAwO2NvbnN0YW50cy5GQVJfUExBTkVfRElTVEFOQ0U9MTAwMDA7ZnVuY3Rpb24gZHJhd1RleHR1cmVkVHJpYW5nbGUoY3R4LGltZyxwMCxwMSxwMix0MCx0MSx0Mil7Y29uc3QgdG1wUDA9W3AwWzBdLHAwWzFdXTtjb25zdCB0bXBQMT1bcDFbMF0scDFbMV1dO2NvbnN0IHRtcFAyPVtwMlswXSxwMlsxXV07Y29uc3QgdG1wVDA9W3QwWzBdLHQwWzFdXTtjb25zdCB0bXBUMT1bdDFbMF0sdDFbMV1dO2NvbnN0IHRtcFQyPVt0MlswXSx0MlsxXV07Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8odG1wUDBbMF0sdG1wUDBbMV0pO2N0eC5saW5lVG8odG1wUDFbMF0sdG1wUDFbMV0pO2N0eC5saW5lVG8odG1wUDJbMF0sdG1wUDJbMV0pO2N0eC5jbG9zZVBhdGgoKTt0bXBQMVswXS09dG1wUDBbMF07dG1wUDFbMV0tPXRtcFAwWzFdO3RtcFAyWzBdLT10bXBQMFswXTt0bXBQMlsxXS09dG1wUDBbMV07dG1wVDFbMF0tPXRtcFQwWzBdO3RtcFQxWzFdLT10bXBUMFsxXTt0bXBUMlswXS09dG1wVDBbMF07dG1wVDJbMV0tPXRtcFQwWzFdO2NvbnN0IGRldD0xLyh0bXBUMVswXSp0bXBUMlsxXS10bXBUMlswXSp0bXBUMVsxXSk7Y29uc3QgYT0odG1wVDJbMV0qdG1wUDFbMF0tdG1wVDFbMV0qdG1wUDJbMF0pKmRldDtjb25zdCBiPSh0bXBUMlsxXSp0bXBQMVsxXS10bXBUMVsxXSp0bXBQMlsxXSkqZGV0O2NvbnN0IGM9KHRtcFQxWzBdKnRtcFAyWzBdLXRtcFQyWzBdKnRtcFAxWzBdKSpkZXQ7Y29uc3QgZD0odG1wVDFbMF0qdG1wUDJbMV0tdG1wVDJbMF0qdG1wUDFbMV0pKmRldDtjb25zdCBlPXRtcFAwWzBdLWEqdG1wVDBbMF0tYyp0bXBUMFsxXTtjb25zdCBmPXRtcFAwWzFdLWIqdG1wVDBbMF0tZCp0bXBUMFsxXTtjdHguc2F2ZSgpO2N0eC50cmFuc2Zvcm0oYSxiLGMsZCxlLGYpO2N0eC5jbGlwKCk7Y3R4LmRyYXdJbWFnZShpbWcsMCwwKTtjdHgucmVzdG9yZSgpO30KZnVuY3Rpb24gZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDEscDIsdDAsdDEsdDIsb3B0X3JlY3Vyc2lvbkRlcHRoKXtjb25zdCBkZXB0aD1vcHRfcmVjdXJzaW9uRGVwdGh8fDA7bGV0IHN1YmRpdmlzaW9uSW5kZXg9MDtpZihkZXB0aDxjb25zdGFudHMuU1VCRElWSVNJT05fTUlOSU1VTSl7c3ViZGl2aXNpb25JbmRleD03O31lbHNlIGlmKGRlcHRoPGNvbnN0YW50cy5TVUJESVZJU0lPTl9SRUNVUlNJT05fREVQVEgpe2lmKE1hdGguYWJzKHAwWzJdLXAxWzJdKT5jb25zdGFudHMuU1VCRElWSVNJT05fREVQVEhfVEhSRVNIT0xEKXtzdWJkaXZpc2lvbkluZGV4Kz0xO30KaWYoTWF0aC5hYnMocDBbMl0tcDJbMl0pPmNvbnN0YW50cy5TVUJESVZJU0lPTl9ERVBUSF9USFJFU0hPTEQpe3N1YmRpdmlzaW9uSW5kZXgrPTI7fQppZihNYXRoLmFicyhwMVsyXS1wMlsyXSk+Y29uc3RhbnRzLlNVQkRJVklTSU9OX0RFUFRIX1RIUkVTSE9MRCl7c3ViZGl2aXNpb25JbmRleCs9NDt9fQpjb25zdCBwMDE9dmVjNC5jcmVhdGUoKTtjb25zdCBwMDI9dmVjNC5jcmVhdGUoKTtjb25zdCBwMTI9dmVjNC5jcmVhdGUoKTtjb25zdCB0MDE9dmVjMi5jcmVhdGUoKTtjb25zdCB0MDI9dmVjMi5jcmVhdGUoKTtjb25zdCB0MTI9dmVjMi5jcmVhdGUoKTtmb3IobGV0IGk9MDtpPDI7KytpKXtwMFtpXSo9cDBbMl07cDFbaV0qPXAxWzJdO3AyW2ldKj1wMlsyXTt9CmZvcihsZXQgaT0wO2k8NDsrK2kpe3AwMVtpXT0ocDBbaV0rcDFbaV0pLzI7cDAyW2ldPShwMFtpXStwMltpXSkvMjtwMTJbaV09KHAxW2ldK3AyW2ldKS8yO30KZm9yKGxldCBpPTA7aTwyOysraSl7cDBbaV0vPXAwWzJdO3AxW2ldLz1wMVsyXTtwMltpXS89cDJbMl07cDAxW2ldLz1wMDFbMl07cDAyW2ldLz1wMDJbMl07cDEyW2ldLz1wMTJbMl07fQpmb3IobGV0IGk9MDtpPDI7KytpKXt0MDFbaV09KHQwW2ldK3QxW2ldKS8yO3QwMltpXT0odDBbaV0rdDJbaV0pLzI7dDEyW2ldPSh0MVtpXSt0MltpXSkvMjt9CnN3aXRjaChzdWJkaXZpc2lvbkluZGV4KXtjYXNlIDE6ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDAxLHAyLHQwLHQwMSx0MixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMDEscDEscDIsdDAxLHQxLHQyLGRlcHRoKzEpO2JyZWFrO2Nhc2UgMjpkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMSxwMDIsdDAsdDEsdDAyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAxLHAwMixwMix0MSx0MDIsdDIsZGVwdGgrMSk7YnJlYWs7Y2FzZSAzOmRyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAwMSxwMDIsdDAsdDAxLHQwMixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMDIscDAxLHAyLHQwMix0MDEsdDIsZGVwdGgrMSk7ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAxLHAxLHAyLHQwMSx0MSx0MixkZXB0aCsxKTticmVhaztjYXNlIDQ6ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDEyLHAyLHQwLHQxMix0MixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMSxwMTIsdDAsdDEsdDEyLGRlcHRoKzEpO2JyZWFrO2Nhc2UgNTpkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMDEscDIsdDAsdDAxLHQyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAyLHAwMSxwMTIsdDIsdDAxLHQxMixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMDEscDEscDEyLHQwMSx0MSx0MTIsZGVwdGgrMSk7YnJlYWs7Y2FzZSA2OmRyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwLHAxMixwMDIsdDAsdDEyLHQwMixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMCxwMSxwMTIsdDAsdDEsdDEyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMixwMTIscDIsdDAyLHQxMix0MixkZXB0aCsxKTticmVhaztjYXNlIDc6ZHJhd1RyaWFuZ2xlU3ViKGN0eCxpbWcscDAscDAxLHAwMix0MCx0MDEsdDAyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMSxwMTIscDAyLHQwMSx0MTIsdDAyLGRlcHRoKzEpO2RyYXdUcmlhbmdsZVN1YihjdHgsaW1nLHAwMSxwMSxwMTIsdDAxLHQxLHQxMixkZXB0aCsxKTtkcmF3VHJpYW5nbGVTdWIoY3R4LGltZyxwMDIscDEyLHAyLHQwMix0MTIsdDIsZGVwdGgrMSk7YnJlYWs7ZGVmYXVsdDpkcmF3VGV4dHVyZWRUcmlhbmdsZShjdHgsaW1nLHAwLHAxLHAyLHQwLHQxLHQyKTticmVhazt9fQpjb25zdCB0bXBWZWM0PXZlYzQuY3JlYXRlKCk7ZnVuY3Rpb24gdHJhbnNmb3JtKHRyYW5zZm9ybWVkLHBvaW50LG1hdHJpeCx2aWV3cG9ydCl7dmVjNC5zZXQodG1wVmVjNCxwb2ludFswXSxwb2ludFsxXSwwLDEpO3ZlYzQudHJhbnNmb3JtTWF0NCh0bXBWZWM0LHRtcFZlYzQsbWF0cml4KTtsZXQgdz10bXBWZWM0WzNdO2lmKHc8MWUtNil3PTFlLTY7dHJhbnNmb3JtZWRbMF09KCh0bXBWZWM0WzBdL3cpKzEpKnZpZXdwb3J0LndpZHRoLzI7dHJhbnNmb3JtZWRbMV09KCh0bXBWZWM0WzFdL3cpKzEpKnZpZXdwb3J0LmhlaWdodC8yO3RyYW5zZm9ybWVkWzJdPXc7fQpmdW5jdGlvbiBkcmF3UHJvamVjdGVkUXVhZEJhY2tncm91bmRUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyl7aWYocXVhZC5pbWFnZURhdGEpe3F1YWRDYW52YXMud2lkdGg9cXVhZC5pbWFnZURhdGEud2lkdGg7cXVhZENhbnZhcy5oZWlnaHQ9cXVhZC5pbWFnZURhdGEuaGVpZ2h0O3F1YWRDYW52YXMuZ2V0Q29udGV4dCgnMmQnKS5wdXRJbWFnZURhdGEocXVhZC5pbWFnZURhdGEsMCwwKTtjb25zdCBxdWFkQkJveD1uZXcgdHIuYi5tYXRoLkJCb3gyKCk7cXVhZEJCb3guYWRkUXVhZChxdWFkKTtjb25zdCBpdz1xdWFkQ2FudmFzLndpZHRoO2NvbnN0IGloPXF1YWRDYW52YXMuaGVpZ2h0O2RyYXdUcmlhbmdsZVN1YihjdHgscXVhZENhbnZhcyxwMSxwMixwNCxbMCwwXSxbaXcsMF0sWzAsaWhdKTtkcmF3VHJpYW5nbGVTdWIoY3R4LHF1YWRDYW52YXMscDIscDMscDQsW2l3LDBdLFtpdyxpaF0sWzAsaWhdKTt9CmlmKHF1YWQuYmFja2dyb3VuZENvbG9yKXtjdHguZmlsbFN0eWxlPXF1YWQuYmFja2dyb3VuZENvbG9yO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHAxWzBdLHAxWzFdKTtjdHgubGluZVRvKHAyWzBdLHAyWzFdKTtjdHgubGluZVRvKHAzWzBdLHAzWzFdKTtjdHgubGluZVRvKHA0WzBdLHA0WzFdKTtjdHguY2xvc2VQYXRoKCk7Y3R4LmZpbGwoKTt9fQpmdW5jdGlvbiBkcmF3UHJvamVjdGVkUXVhZE91dGxpbmVUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyl7Y3R4LmJlZ2luUGF0aCgpO2N0eC5tb3ZlVG8ocDFbMF0scDFbMV0pO2N0eC5saW5lVG8ocDJbMF0scDJbMV0pO2N0eC5saW5lVG8ocDNbMF0scDNbMV0pO2N0eC5saW5lVG8ocDRbMF0scDRbMV0pO2N0eC5jbG9zZVBhdGgoKTtjdHguc2F2ZSgpO2lmKHF1YWQuYm9yZGVyQ29sb3Ipe2N0eC5zdHJva2VTdHlsZT1xdWFkLmJvcmRlckNvbG9yO31lbHNle2N0eC5zdHJva2VTdHlsZT0ncmdiKDEyOCwxMjgsMTI4KSc7fQppZihxdWFkLnNoYWRvd09mZnNldCl7Y3R4LnNoYWRvd0NvbG9yPSdyZ2IoMCwgMCwgMCknO2N0eC5zaGFkb3dPZmZzZXRYPXF1YWQuc2hhZG93T2Zmc2V0WzBdO2N0eC5zaGFkb3dPZmZzZXRZPXF1YWQuc2hhZG93T2Zmc2V0WzFdO2lmKHF1YWQuc2hhZG93Qmx1cil7Y3R4LnNoYWRvd0JsdXI9cXVhZC5zaGFkb3dCbHVyO319CmlmKHF1YWQuYm9yZGVyV2lkdGgpe2N0eC5saW5lV2lkdGg9cXVhZC5ib3JkZXJXaWR0aDt9ZWxzZXtjdHgubGluZVdpZHRoPTE7fQpjdHguc3Ryb2tlKCk7Y3R4LnJlc3RvcmUoKTt9CmZ1bmN0aW9uIGRyYXdQcm9qZWN0ZWRRdWFkU2VsZWN0aW9uT3V0bGluZVRvQ29udGV4dChxdWFkLHAxLHAyLHAzLHA0LGN0eCxxdWFkQ2FudmFzKXtpZighcXVhZC51cHBlckJvcmRlckNvbG9yKXJldHVybjtjdHgubGluZVdpZHRoPTg7Y3R4LnN0cm9rZVN0eWxlPXF1YWQudXBwZXJCb3JkZXJDb2xvcjtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyhwMVswXSxwMVsxXSk7Y3R4LmxpbmVUbyhwMlswXSxwMlsxXSk7Y3R4LmxpbmVUbyhwM1swXSxwM1sxXSk7Y3R4LmxpbmVUbyhwNFswXSxwNFsxXSk7Y3R4LmNsb3NlUGF0aCgpO2N0eC5zdHJva2UoKTt9CmZ1bmN0aW9uIGRyYXdQcm9qZWN0ZWRRdWFkVG9Db250ZXh0KHBhc3NOdW1iZXIscXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyl7aWYocGFzc051bWJlcj09PTApe2RyYXdQcm9qZWN0ZWRRdWFkQmFja2dyb3VuZFRvQ29udGV4dChxdWFkLHAxLHAyLHAzLHA0LGN0eCxxdWFkQ2FudmFzKTt9ZWxzZSBpZihwYXNzTnVtYmVyPT09MSl7ZHJhd1Byb2plY3RlZFF1YWRPdXRsaW5lVG9Db250ZXh0KHF1YWQscDEscDIscDMscDQsY3R4LHF1YWRDYW52YXMpO31lbHNlIGlmKHBhc3NOdW1iZXI9PT0yKXtkcmF3UHJvamVjdGVkUXVhZFNlbGVjdGlvbk91dGxpbmVUb0NvbnRleHQocXVhZCxwMSxwMixwMyxwNCxjdHgscXVhZENhbnZhcyk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIHBhc3MgbnVtYmVyJyk7fX0KY29uc3QgdG1wUDE9dmVjMy5jcmVhdGUoKTtjb25zdCB0bXBQMj12ZWMzLmNyZWF0ZSgpO2NvbnN0IHRtcFAzPXZlYzMuY3JlYXRlKCk7Y29uc3QgdG1wUDQ9dmVjMy5jcmVhdGUoKTtmdW5jdGlvbiB0cmFuc2Zvcm1BbmRQcm9jZXNzUXVhZHMobWF0cml4LHZpZXdwb3J0LHF1YWRzLG51bVBhc3NlcyxoYW5kbGVRdWFkRnVuYyxvcHRfYXJnMSxvcHRfYXJnMil7Zm9yKGxldCBwYXNzTnVtYmVyPTA7cGFzc051bWJlcjxudW1QYXNzZXM7cGFzc051bWJlcisrKXtmb3IobGV0IGk9MDtpPHF1YWRzLmxlbmd0aDtpKyspe2NvbnN0IHF1YWQ9cXVhZHNbaV07dHJhbnNmb3JtKHRtcFAxLHF1YWQucDEsbWF0cml4LHZpZXdwb3J0KTt0cmFuc2Zvcm0odG1wUDIscXVhZC5wMixtYXRyaXgsdmlld3BvcnQpO3RyYW5zZm9ybSh0bXBQMyxxdWFkLnAzLG1hdHJpeCx2aWV3cG9ydCk7dHJhbnNmb3JtKHRtcFA0LHF1YWQucDQsbWF0cml4LHZpZXdwb3J0KTtoYW5kbGVRdWFkRnVuYyhwYXNzTnVtYmVyLHF1YWQsdG1wUDEsdG1wUDIsdG1wUDMsdG1wUDQsb3B0X2FyZzEsb3B0X2FyZzIpO319fQpjb25zdCBRdWFkU3RhY2tWaWV3PXRyLnVpLmIuZGVmaW5lKCdxdWFkLXN0YWNrLXZpZXcnKTtRdWFkU3RhY2tWaWV3LnByb3RvdHlwZT17X19wcm90b19fOkhUTUxEaXZFbGVtZW50LnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RoaXMuY2xhc3NOYW1lPSdxdWFkLXN0YWNrLXZpZXcnO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5wb3NpdGlvbj0ncmVsYXRpdmUnO2NvbnN0IG5vZGU9dHIudWkuYi5pbnN0YW50aWF0ZVRlbXBsYXRlKCcjcXVhZC1zdGFjay12aWV3LXRlbXBsYXRlJyxUSElTX0RPQyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobm9kZSk7dGhpcy51cGRhdGVIZWFkZXJWaXNpYmlsaXR5XygpO2NvbnN0IGhlYWRlcj1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjaGVhZGVyJyk7aGVhZGVyLnN0eWxlLnBvc2l0aW9uPSdhYnNvbHV0ZSc7aGVhZGVyLnN0eWxlLmZvbnRTaXplPSc3MCUnO2hlYWRlci5zdHlsZS50b3A9JzEwcHgnO2hlYWRlci5zdHlsZS5sZWZ0PScxMHB4JztoZWFkZXIuc3R5bGUucmlnaHQ9JzE1MHB4Jztjb25zdCBzY3JvbGxlcj1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2FudmFzLXNjcm9sbGVyJyk7c2Nyb2xsZXIuc3R5bGUuZmxleEdyb3c9MTtzY3JvbGxlci5zdHlsZS5mbGV4U2hyaW5rPTE7c2Nyb2xsZXIuc3R5bGUuZmxleEJhc2lzPSdhdXRvJztzY3JvbGxlci5zdHlsZS5taW5XaWR0aD0wO3Njcm9sbGVyLnN0eWxlLm1pbkhlaWdodD0wO3Njcm9sbGVyLnN0eWxlLm92ZXJmbG93PSdhdXRvJzt0aGlzLmNhbnZhc189UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignI2NhbnZhcycpO3RoaXMuY2hyb21lSW1hZ2VzXz17bGVmdDpQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2hyb21lLWxlZnQnKSxtaWQ6UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignI2Nocm9tZS1taWQnKSxyaWdodDpQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2hyb21lLXJpZ2h0Jyl9O2NvbnN0IHN0YWNraW5nRGlzdGFuY2VTbGlkZXI9UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignI3N0YWNraW5nLWRpc3RhbmNlLXNsaWRlcicpO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuc3R5bGUucG9zaXRpb249J2Fic29sdXRlJztzdGFja2luZ0Rpc3RhbmNlU2xpZGVyLnN0eWxlLmZvbnRTaXplPSc3MCUnO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuc3R5bGUudG9wPScxMHB4JztzdGFja2luZ0Rpc3RhbmNlU2xpZGVyLnN0eWxlLnJpZ2h0PScxMHB4JztzdGFja2luZ0Rpc3RhbmNlU2xpZGVyLnZhbHVlPXRyLmIuU2V0dGluZ3MuZ2V0KCdxdWFkU3RhY2tWaWV3LnN0YWNraW5nRGlzdGFuY2UnLDQ1KTtzdGFja2luZ0Rpc3RhbmNlU2xpZGVyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblN0YWNraW5nRGlzdGFuY2VDaGFuZ2VfLmJpbmQodGhpcykpO3N0YWNraW5nRGlzdGFuY2VTbGlkZXIuYWRkRXZlbnRMaXN0ZW5lcignaW5wdXQnLHRoaXMub25TdGFja2luZ0Rpc3RhbmNlQ2hhbmdlXy5iaW5kKHRoaXMpKTt0aGlzLnRyYWNrTW91c2VfKCk7dGhpcy5jYW1lcmFfPW5ldyB0ci51aS5iLkNhbWVyYSh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5jYW1lcmFfLmFkZEV2ZW50TGlzdGVuZXIoJ3JlbmRlcnJlcXVpcmVkJyx0aGlzLm9uUmVuZGVyUmVxdWlyZWRfLmJpbmQodGhpcykpO3RoaXMuY2FtZXJhV2FzUmVzZXRfPWZhbHNlO3RoaXMuY2FtZXJhXy5jYW52YXM9dGhpcy5jYW52YXNfO3RoaXMudmlld3BvcnRSZWN0Xz10ci5iLm1hdGguUmVjdC5mcm9tWFlXSCgwLDAsMCwwKTt0aGlzLnBpeGVsUmF0aW9fPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO30sdXBkYXRlSGVhZGVyVmlzaWJpbGl0eV8oKXtpZih0aGlzLmhlYWRlclRleHQpe1BvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNoZWFkZXInKS5zdHlsZS5kaXNwbGF5PScnO31lbHNle1BvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNoZWFkZXInKS5zdHlsZS5kaXNwbGF5PSdub25lJzt9fSxnZXQgaGVhZGVyVGV4dCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjaGVhZGVyJykudGV4dENvbnRlbnQ7fSxzZXQgaGVhZGVyVGV4dChoZWFkZXJUZXh0KXtQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjaGVhZGVyJykudGV4dENvbnRlbnQ9aGVhZGVyVGV4dDt0aGlzLnVwZGF0ZUhlYWRlclZpc2liaWxpdHlfKCk7fSxvblN0YWNraW5nRGlzdGFuY2VDaGFuZ2VfKGUpe3RyLmIuU2V0dGluZ3Muc2V0KCdxdWFkU3RhY2tWaWV3LnN0YWNraW5nRGlzdGFuY2UnLHRoaXMuc3RhY2tpbmdEaXN0YW5jZSk7dGhpcy5zY2hlZHVsZVJlbmRlcigpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fSxnZXQgc3RhY2tpbmdEaXN0YW5jZSgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjc3RhY2tpbmctZGlzdGFuY2Utc2xpZGVyJykudmFsdWU7fSxnZXQgbW91c2VNb2RlU2VsZWN0b3IoKXtyZXR1cm4gdGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl87fSxnZXQgY2FtZXJhKCl7cmV0dXJuIHRoaXMuY2FtZXJhXzt9LHNldCBxdWFkcyhxKXt0aGlzLnF1YWRzXz1xO3RoaXMuc2NoZWR1bGVSZW5kZXIoKTt9LHNldCBkZXZpY2VSZWN0KHJlY3Qpe2lmKCFyZWN0fHxyZWN0LmVxdWFsVG8odGhpcy5kZXZpY2VSZWN0XykpcmV0dXJuO3RoaXMuZGV2aWNlUmVjdF89cmVjdDt0aGlzLmNhbWVyYV8uZGV2aWNlUmVjdD1yZWN0O3RoaXMuY2hyb21lUXVhZF89dW5kZWZpbmVkO30scmVzaXplKCl7aWYoIXRoaXMub2Zmc2V0UGFyZW50KXJldHVybiB0cnVlO2NvbnN0IHdpZHRoPXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMub2Zmc2V0UGFyZW50KS53aWR0aCk7Y29uc3QgaGVpZ2h0PXBhcnNlSW50KHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMub2Zmc2V0UGFyZW50KS5oZWlnaHQpO2NvbnN0IHJlY3Q9dHIuYi5tYXRoLlJlY3QuZnJvbVhZV0goMCwwLHdpZHRoLGhlaWdodCk7aWYocmVjdC5lcXVhbFRvKHRoaXMudmlld3BvcnRSZWN0XykpcmV0dXJuIGZhbHNlO3RoaXMudmlld3BvcnRSZWN0Xz1yZWN0O3RoaXMuY2FudmFzXy5zdHlsZS53aWR0aD13aWR0aCsncHgnO3RoaXMuY2FudmFzXy5zdHlsZS5oZWlnaHQ9aGVpZ2h0KydweCc7dGhpcy5jYW52YXNfLndpZHRoPXRoaXMucGl4ZWxSYXRpb18qd2lkdGg7dGhpcy5jYW52YXNfLmhlaWdodD10aGlzLnBpeGVsUmF0aW9fKmhlaWdodDtpZighdGhpcy5jYW1lcmFXYXNSZXNldF8pe3RoaXMuY2FtZXJhXy5yZXNldENhbWVyYSgpO3RoaXMuY2FtZXJhV2FzUmVzZXRfPXRydWU7fQpyZXR1cm4gdHJ1ZTt9LHJlYWR5VG9EcmF3KCl7aWYoIXRoaXMuY2hyb21lSW1hZ2VzXy5sZWZ0LnNyYyl7bGV0IGxlZnRDb250ZW50PXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMuY2hyb21lSW1hZ2VzXy5sZWZ0KS5iYWNrZ3JvdW5kSW1hZ2U7bGVmdENvbnRlbnQ9dHIudWkuYi5leHRyYWN0VXJsU3RyaW5nKGxlZnRDb250ZW50KTtsZXQgbWlkQ29udGVudD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNocm9tZUltYWdlc18ubWlkKS5iYWNrZ3JvdW5kSW1hZ2U7bWlkQ29udGVudD10ci51aS5iLmV4dHJhY3RVcmxTdHJpbmcobWlkQ29udGVudCk7bGV0IHJpZ2h0Q29udGVudD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLmNocm9tZUltYWdlc18ucmlnaHQpLmJhY2tncm91bmRJbWFnZTtyaWdodENvbnRlbnQ9dHIudWkuYi5leHRyYWN0VXJsU3RyaW5nKHJpZ2h0Q29udGVudCk7dGhpcy5jaHJvbWVJbWFnZXNfLmxlZnQuc3JjPWxlZnRDb250ZW50O3RoaXMuY2hyb21lSW1hZ2VzXy5taWQuc3JjPW1pZENvbnRlbnQ7dGhpcy5jaHJvbWVJbWFnZXNfLnJpZ2h0LnNyYz1yaWdodENvbnRlbnQ7fQpyZXR1cm4odGhpcy5jaHJvbWVJbWFnZXNfLmxlZnQuaGVpZ2h0PjApJiYodGhpcy5jaHJvbWVJbWFnZXNfLm1pZC5oZWlnaHQ+MCkmJih0aGlzLmNocm9tZUltYWdlc18ucmlnaHQuaGVpZ2h0PjApO30sZ2V0IGNocm9tZVF1YWQoKXtpZih0aGlzLmNocm9tZVF1YWRfKXJldHVybiB0aGlzLmNocm9tZVF1YWRfO2NvbnN0IGNocm9tZUNhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTtjb25zdCBvZmZzZXRZPXRoaXMuY2hyb21lSW1hZ2VzXy5sZWZ0LmhlaWdodDtjaHJvbWVDYW52YXMud2lkdGg9dGhpcy5kZXZpY2VSZWN0Xy53aWR0aDtjaHJvbWVDYW52YXMuaGVpZ2h0PXRoaXMuZGV2aWNlUmVjdF8uaGVpZ2h0K29mZnNldFk7Y29uc3QgbGVmdFdpZHRoPXRoaXMuY2hyb21lSW1hZ2VzXy5sZWZ0LndpZHRoO2NvbnN0IG1pZFdpZHRoPXRoaXMuY2hyb21lSW1hZ2VzXy5taWQud2lkdGg7Y29uc3QgcmlnaHRXaWR0aD10aGlzLmNocm9tZUltYWdlc18ucmlnaHQud2lkdGg7Y29uc3QgY2hyb21lQ3R4PWNocm9tZUNhbnZhcy5nZXRDb250ZXh0KCcyZCcpO2Nocm9tZUN0eC5kcmF3SW1hZ2UodGhpcy5jaHJvbWVJbWFnZXNfLmxlZnQsMCwwKTtjaHJvbWVDdHguc2F2ZSgpO2Nocm9tZUN0eC50cmFuc2xhdGUobGVmdFdpZHRoLDApO2NvbnN0IHM9KHRoaXMuZGV2aWNlUmVjdF8ud2lkdGgtbGVmdFdpZHRoLXJpZ2h0V2lkdGgpL21pZFdpZHRoO2Nocm9tZUN0eC5zY2FsZShzLDEpO2Nocm9tZUN0eC5kcmF3SW1hZ2UodGhpcy5jaHJvbWVJbWFnZXNfLm1pZCwwLDApO2Nocm9tZUN0eC5yZXN0b3JlKCk7Y2hyb21lQ3R4LmRyYXdJbWFnZSh0aGlzLmNocm9tZUltYWdlc18ucmlnaHQsbGVmdFdpZHRoK3MqbWlkV2lkdGgsMCk7Y29uc3QgY2hyb21lUmVjdD10ci5iLm1hdGguUmVjdC5mcm9tWFlXSCh0aGlzLmRldmljZVJlY3RfLngsdGhpcy5kZXZpY2VSZWN0Xy55LW9mZnNldFksdGhpcy5kZXZpY2VSZWN0Xy53aWR0aCx0aGlzLmRldmljZVJlY3RfLmhlaWdodCtvZmZzZXRZKTtjb25zdCBjaHJvbWVRdWFkPXRyLmIubWF0aC5RdWFkLmZyb21SZWN0KGNocm9tZVJlY3QpO2Nocm9tZVF1YWQuc3RhY2tpbmdHcm91cElkPXRoaXMubWF4U3RhY2tpbmdHcm91cElkXysxO2Nocm9tZVF1YWQuaW1hZ2VEYXRhPWNocm9tZUN0eC5nZXRJbWFnZURhdGEoMCwwLGNocm9tZUNhbnZhcy53aWR0aCxjaHJvbWVDYW52YXMuaGVpZ2h0KTtjaHJvbWVRdWFkLnNoYWRvd09mZnNldD1bMCwwXTtjaHJvbWVRdWFkLnNoYWRvd0JsdXI9NTtjaHJvbWVRdWFkLmJvcmRlcldpZHRoPTM7dGhpcy5jaHJvbWVRdWFkXz1jaHJvbWVRdWFkO3JldHVybiB0aGlzLmNocm9tZVF1YWRfO30sc2NoZWR1bGVSZW5kZXIoKXtpZih0aGlzLnJlZHJhd1NjaGVkdWxlZF8pcmV0dXJuIGZhbHNlO3RoaXMucmVkcmF3U2NoZWR1bGVkXz10cnVlO3RyLmIucmVxdWVzdEFuaW1hdGlvbkZyYW1lKHRoaXMucmVuZGVyLHRoaXMpO30sb25SZW5kZXJSZXF1aXJlZF8oZSl7dGhpcy5zY2hlZHVsZVJlbmRlcigpO30sc3RhY2tUcmFuc2Zvcm1BbmRQcm9jZXNzUXVhZHNfKG51bVBhc3NlcyxoYW5kbGVRdWFkRnVuYyxpbmNsdWRlQ2hyb21lUXVhZCxvcHRfYXJnMSxvcHRfYXJnMil7Y29uc3QgbXY9dGhpcy5jYW1lcmFfLm1vZGVsVmlld01hdHJpeDtjb25zdCBwPXRoaXMuY2FtZXJhXy5wcm9qZWN0aW9uTWF0cml4O2NvbnN0IHZpZXdwb3J0PXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKDAsMCx0aGlzLmNhbnZhc18ud2lkdGgsdGhpcy5jYW52YXNfLmhlaWdodCk7Y29uc3QgcXVhZFN0YWNrcz1bXTtmb3IobGV0IGk9MDtpPHRoaXMucXVhZHNfLmxlbmd0aDsrK2kpe2NvbnN0IHF1YWQ9dGhpcy5xdWFkc19baV07Y29uc3Qgc3RhY2tpbmdJZD1xdWFkLnN0YWNraW5nR3JvdXBJZHx8MDt3aGlsZShzdGFja2luZ0lkPj1xdWFkU3RhY2tzLmxlbmd0aCl7cXVhZFN0YWNrcy5wdXNoKFtdKTt9CnF1YWRTdGFja3Nbc3RhY2tpbmdJZF0ucHVzaChxdWFkKTt9CmNvbnN0IG12cD1tYXQ0LmNyZWF0ZSgpO3RoaXMubWF4U3RhY2tpbmdHcm91cElkXz1xdWFkU3RhY2tzLmxlbmd0aDtjb25zdCBlZmZlY3RpdmVTdGFja2luZ0Rpc3RhbmNlPXRoaXMuc3RhY2tpbmdEaXN0YW5jZSp0aGlzLmNhbWVyYV8uc3RhY2tpbmdEaXN0YW5jZURhbXBlbmluZzttYXQ0Lm11bHRpcGx5KG12cCxwLG12KTtmb3IobGV0IGk9MDtpPHF1YWRTdGFja3MubGVuZ3RoOysraSl7dHJhbnNmb3JtQW5kUHJvY2Vzc1F1YWRzKG12cCx2aWV3cG9ydCxxdWFkU3RhY2tzW2ldLG51bVBhc3NlcyxoYW5kbGVRdWFkRnVuYyxvcHRfYXJnMSxvcHRfYXJnMik7bWF0NC50cmFuc2xhdGUobXYsbXYsWzAsMCxlZmZlY3RpdmVTdGFja2luZ0Rpc3RhbmNlXSk7bWF0NC5tdWx0aXBseShtdnAscCxtdik7fQppZihpbmNsdWRlQ2hyb21lUXVhZCYmdGhpcy5kZXZpY2VSZWN0Xyl7dHJhbnNmb3JtQW5kUHJvY2Vzc1F1YWRzKG12cCx2aWV3cG9ydCxbdGhpcy5jaHJvbWVRdWFkXSxudW1QYXNzZXMsZHJhd1Byb2plY3RlZFF1YWRUb0NvbnRleHQsb3B0X2FyZzEsb3B0X2FyZzIpO319LHJlbmRlcigpe3RoaXMucmVkcmF3U2NoZWR1bGVkXz1mYWxzZTtpZighdGhpcy5yZWFkeVRvRHJhdygpKXtzZXRUaW1lb3V0KHRoaXMuc2NoZWR1bGVSZW5kZXIuYmluZCh0aGlzKSxjb25zdGFudHMuSU1BR0VfTE9BRF9SRVRSWV9USU1FX01TKTtyZXR1cm47fQppZighdGhpcy5xdWFkc18pcmV0dXJuO2NvbnN0IGNhbnZhc0N0eD10aGlzLmNhbnZhc18uZ2V0Q29udGV4dCgnMmQnKTtpZighdGhpcy5yZXNpemUoKSl7Y2FudmFzQ3R4LmNsZWFyUmVjdCgwLDAsdGhpcy5jYW52YXNfLndpZHRoLHRoaXMuY2FudmFzXy5oZWlnaHQpO30KY29uc3QgcXVhZENhbnZhcz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTt0aGlzLnN0YWNrVHJhbnNmb3JtQW5kUHJvY2Vzc1F1YWRzXygzLGRyYXdQcm9qZWN0ZWRRdWFkVG9Db250ZXh0LHRydWUsY2FudmFzQ3R4LHF1YWRDYW52YXMpO3F1YWRDYW52YXMud2lkdGg9MDt9LHRyYWNrTW91c2VfKCl7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1tb3VzZS1tb2RlLXNlbGVjdG9yJyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8udGFyZ2V0RWxlbWVudD10aGlzLmNhbnZhc187dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc3VwcG9ydGVkTW9kZU1hc2s9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTnx0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuUEFOU0NBTnx0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTXx0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuUk9UQVRFO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLm1vZGU9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlBBTlNDQU47dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ucG9zPXt4OjAseToxMDB9O1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXR0aW5nc0tleT0ncXVhZFN0YWNrVmlldy5tb3VzZU1vZGVTZWxlY3Rvcic7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0TW9kaWZpZXJGb3JBbHRlcm5hdGVNb2RlKHRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5ST1RBVEUsdHIudWkuYi5NT0RJRklFUi5TSElGVCk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0TW9kaWZpZXJGb3JBbHRlcm5hdGVNb2RlKHRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5QQU5TQ0FOLHRyLnVpLmIuTU9ESUZJRVIuU1BBQ0UpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZSh0ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTSx0ci51aS5iLk1PRElGSUVSLkNNRF9PUl9DVFJMKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCd1cGRhdGVzZWxlY3Rpb24nLHRoaXMub25TZWxlY3Rpb25VcGRhdGVfLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHNlbGVjdGlvbicsdGhpcy5vblNlbGVjdGlvblVwZGF0ZV8uYmluZCh0aGlzKSk7fSxleHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKXtjb25zdCBicj10aGlzLmNhbnZhc18uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7cmV0dXJuW3RoaXMucGl4ZWxSYXRpb18qKGUuY2xpZW50WC10aGlzLmNhbnZhc18ub2Zmc2V0TGVmdC1ici5sZWZ0KSx0aGlzLnBpeGVsUmF0aW9fKihlLmNsaWVudFktdGhpcy5jYW52YXNfLm9mZnNldFRvcC1ici50b3ApXTt9LG9uU2VsZWN0aW9uVXBkYXRlXyhlKXtjb25zdCBtb3VzZVBvcz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2NvbnN0IHJlcz1bXTtmdW5jdGlvbiBoYW5kbGVRdWFkKHBhc3NOdW1iZXIscXVhZCxwMSxwMixwMyxwNCl7aWYodHIuYi5tYXRoLnBvaW50SW5JbXBsaWNpdFF1YWQobW91c2VQb3MscDEscDIscDMscDQpKXtyZXMucHVzaChxdWFkKTt9fQp0aGlzLnN0YWNrVHJhbnNmb3JtQW5kUHJvY2Vzc1F1YWRzXygxLGhhbmRsZVF1YWQsZmFsc2UpO2U9bmV3IHRyLmIuRXZlbnQoJ3NlbGVjdGlvbmNoYW5nZScpO2UucXVhZHM9cmVzO3RoaXMuZGlzcGF0Y2hFdmVudChlKTt9fTtyZXR1cm57UXVhZFN0YWNrVmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgVElMRV9IRUFUTUFQX1RZUEU9e307VElMRV9IRUFUTUFQX1RZUEUuTk9ORT0nbm9uZSc7VElMRV9IRUFUTUFQX1RZUEUuU0NIRURVTEVEX1BSSU9SSVRZPSdzY2hlZHVsZWRQcmlvcml0eSc7VElMRV9IRUFUTUFQX1RZUEUuVVNJTkdfR1BVX01FTU9SWT0ndXNpbmdHcHVNZW1vcnknO2NvbnN0IGNjPXRyLnVpLmUuY2hyb21lLmNjO2Z1bmN0aW9uIGNyZWF0ZVRpbGVSZWN0c1NlbGVjdG9yQmFzZU9wdGlvbnMoKXtyZXR1cm5be2xhYmVsOidOb25lJyx2YWx1ZTonbm9uZSd9LHtsYWJlbDonQ292ZXJhZ2UgUmVjdHMnLHZhbHVlOidjb3ZlcmFnZSd9XTt9CmNvbnN0IExheWVyVHJlZVF1YWRTdGFja1ZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtcXVhZC1zdGFjay12aWV3Jyk7TGF5ZXJUcmVlUXVhZFN0YWNrVmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmZsZXhHcm93PTE7dGhpcy5zdHlsZS5mbGV4U2hyaW5rPTE7dGhpcy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJzt0aGlzLnN0eWxlLm1pbkhlaWdodD0wO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5pc1JlbmRlclBhc3NRdWFkc189ZmFsc2U7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfPXt9O3RoaXMubWVzc2FnZXNfPVtdO3RoaXMuY29udHJvbHNfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RvcC1jb250cm9scycpO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhHcm93PTA7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleFNocmluaz0wO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5jb250cm9sc18uc3R5bGUuYmFja2dyb3VuZEltYWdlPSctd2Via2l0LWdyYWRpZW50KGxpbmVhciwgMCAwLCAxMDAlIDAsIGZyb20oI0U1RTVFNSksIHRvKCNEMUQxRDEpKSc7dGhpcy5jb250cm9sc18uc3R5bGUuYm9yZGVyQm90dG9tPScxcHggc29saWQgIzhlOGU4ZSc7dGhpcy5jb250cm9sc18uc3R5bGUuYm9yZGVyVG9wPScxcHggc29saWQgd2hpdGUnO3RoaXMuY29udHJvbHNfLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuY29udHJvbHNfLnN0eWxlLmZsZXhEaXJlY3Rpb249J3Jvdyc7dGhpcy5jb250cm9sc18uc3R5bGUuZmxleFdyYXA9J3dyYXAnO3RoaXMuY29udHJvbHNfLnN0eWxlLmZvbnRTaXplPScxNHB4Jzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5wYWRkaW5nTGVmdD0nMnB4Jzt0aGlzLmNvbnRyb2xzXy5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzt0aGlzLmluZm9CYXJfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaW5mby1iYXInKTt0aGlzLnF1YWRTdGFja1ZpZXdfPW5ldyB0ci51aS5iLlF1YWRTdGFja1ZpZXcoKTt0aGlzLnF1YWRTdGFja1ZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbmNoYW5nZScsdGhpcy5vblF1YWRTdGFja1ZpZXdTZWxlY3Rpb25DaGFuZ2VfLmJpbmQodGhpcykpO3RoaXMucXVhZFN0YWNrVmlld18uc3R5bGUuZmxleEdyb3c9MTt0aGlzLnF1YWRTdGFja1ZpZXdfLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLnF1YWRTdGFja1ZpZXdfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5xdWFkU3RhY2tWaWV3Xy5zdHlsZS5taW5XaWR0aD0nMjAwcHgnO3RoaXMuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkXz11bmRlZmluZWQ7dGhpcy5pbnB1dEV2ZW50SW1hZ2VEYXRhXz11bmRlZmluZWQ7Y29uc3QgbT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREU7Y29uc3QgbW1zPXRoaXMucXVhZFN0YWNrVmlld18ubW91c2VNb2RlU2VsZWN0b3I7bW1zLnNldHRpbmdzS2V5PSd0ci5lLmNjLmxheWVyVHJlZVF1YWRTdGFja1ZpZXcubW91c2VNb2RlU2VsZWN0b3InO21tcy5zZXRLZXlDb2RlRm9yTW9kZShtLlNFTEVDVElPTiwnWicuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uUEFOU0NBTiwnWCcuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uWk9PTSwnQycuY2hhckNvZGVBdCgwKSk7bW1zLnNldEtleUNvZGVGb3JNb2RlKG0uUk9UQVRFLCdWJy5jaGFyQ29kZUF0KDApKTtjb25zdCBub2RlPXRyLnVpLmIuaW5zdGFudGlhdGVUZW1wbGF0ZSgnI3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXRyZWUtcXVhZC1zdGFjay12aWV3LXRlbXBsYXRlJyxUSElTX0RPQyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobm9kZSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5jb250cm9sc18pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaW5mb0Jhcl8pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMucXVhZFN0YWNrVmlld18pO3RoaXMudGlsZVJlY3RzU2VsZWN0b3JfPXRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywnaG93VG9TaG93VGlsZXMnLCdsYXllclZpZXcuaG93VG9TaG93VGlsZXMnLCdub25lJyxjcmVhdGVUaWxlUmVjdHNTZWxlY3RvckJhc2VPcHRpb25zKCkpO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZCh0aGlzLnRpbGVSZWN0c1NlbGVjdG9yXyk7Y29uc3QgdGlsZUhlYXRtYXBUZXh0PXRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6J1RpbGUgaGVhdG1hcDonfSk7UG9seW1lci5kb20odGhpcy5jb250cm9sc18pLmFwcGVuZENoaWxkKHRpbGVIZWF0bWFwVGV4dCk7Y29uc3QgdGlsZUhlYXRtYXBTZWxlY3Rvcj10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ3RpbGVIZWF0bWFwVHlwZScsJ2xheWVyVmlldy50aWxlSGVhdG1hcFR5cGUnLFRJTEVfSEVBVE1BUF9UWVBFLk5PTkUsW3tsYWJlbDonTm9uZScsdmFsdWU6VElMRV9IRUFUTUFQX1RZUEUuTk9ORX0se2xhYmVsOidTY2hlZHVsZWQgUHJpb3JpdHknLHZhbHVlOlRJTEVfSEVBVE1BUF9UWVBFLlNDSEVEVUxFRF9QUklPUklUWX0se2xhYmVsOidJcyB1c2luZyBHUFUgbWVtb3J5Jyx2YWx1ZTpUSUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZfV0pO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZCh0aWxlSGVhdG1hcFNlbGVjdG9yKTtjb25zdCBzaG93T3RoZXJMYXllcnNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dPdGhlckxheWVycycsJ2xheWVyVmlldy5zaG93T3RoZXJMYXllcnMnLHRydWUsJ090aGVyIGxheWVycy9wYXNzZXMnKTtzaG93T3RoZXJMYXllcnNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBzaG93IGFsbCBsYXllcnMsIHNlbGVjdGVkIG9yIG5vdC4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93T3RoZXJMYXllcnNDaGVja2JveCk7Y29uc3Qgc2hvd0ludmFsaWRhdGlvbnNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dJbnZhbGlkYXRpb25zJywnbGF5ZXJWaWV3LnNob3dJbnZhbGlkYXRpb25zJyx0cnVlLCdJbnZhbGlkYXRpb25zJyk7c2hvd0ludmFsaWRhdGlvbnNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBjb21wb3NpdGluZyBpbnZhbGlkYXRpb25zIGFyZSBoaWdobGlnaHRlZCBpbiByZWQnO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93SW52YWxpZGF0aW9uc0NoZWNrYm94KTtjb25zdCBzaG93VW5yZWNvcmRlZFJlZ2lvbkNoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd1VucmVjb3JkZWRSZWdpb24nLCdsYXllclZpZXcuc2hvd1VucmVjb3JkZWRSZWdpb24nLHRydWUsJ1VucmVjb3JkZWQgYXJlYScpO3Nob3dVbnJlY29yZGVkUmVnaW9uQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgdW5yZWNvcmRlZCBhcmVhcyBhcmUgaGlnaGxpZ2h0ZWQgaW4geWVsbG93JztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd1VucmVjb3JkZWRSZWdpb25DaGVja2JveCk7Y29uc3Qgc2hvd0JvdHRsZW5lY2tzQ2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93Qm90dGxlbmVja3MnLCdsYXllclZpZXcuc2hvd0JvdHRsZW5lY2tzJyx0cnVlLCdCb3R0bGVuZWNrcycpO3Nob3dCb3R0bGVuZWNrc0NoZWNrYm94LnRpdGxlPSdXaGVuIGNoZWNrZWQsIHNjcm9sbCBib3R0bGVuZWNrcyBhcmUgaGlnaGxpZ2h0ZWQnO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93Qm90dGxlbmVja3NDaGVja2JveCk7Y29uc3Qgc2hvd0xheW91dFJlY3RzQ2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93TGF5b3V0UmVjdHMnLCdsYXllclZpZXcuc2hvd0xheW91dFJlY3RzJyxmYWxzZSwnTGF5b3V0IHJlY3RzJyk7c2hvd0xheW91dFJlY3RzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgc2hvd3MgcmVjdHMgZm9yIHJlZ2lvbnMgd2hlcmUgbGF5b3V0IGhhcHBlbmVkJztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd0xheW91dFJlY3RzQ2hlY2tib3gpO2NvbnN0IHNob3dDb250ZW50c0NoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd0NvbnRlbnRzJywnbGF5ZXJWaWV3LnNob3dDb250ZW50cycsdHJ1ZSwnQ29udGVudHMnKTtzaG93Q29udGVudHNDaGVja2JveC50aXRsZT0nV2hlbiBjaGVja2VkLCBzaG93IHRoZSByZW5kZXJlZCBjb250ZW50cyBpbnNpZGUgdGhlIGxheWVyIG91dGxpbmVzJztQb2x5bWVyLmRvbSh0aGlzLmNvbnRyb2xzXykuYXBwZW5kQ2hpbGQoc2hvd0NvbnRlbnRzQ2hlY2tib3gpO2NvbnN0IHNob3dBbmltYXRpb25Cb3VuZHNDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dBbmltYXRpb25Cb3VuZHMnLCdsYXllclZpZXcuc2hvd0FuaW1hdGlvbkJvdW5kcycsZmFsc2UsJ0FuaW1hdGlvbiBCb3VuZHMnKTtzaG93QW5pbWF0aW9uQm91bmRzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgc2hvdyBhIGJvcmRlciBhcm91bmQnKycgYSBsYXllciBzaG93aW5nIHRoZSBleHRlbnQgb2YgaXRzIGFuaW1hdGlvbi4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93QW5pbWF0aW9uQm91bmRzQ2hlY2tib3gpO2NvbnN0IHNob3dJbnB1dEV2ZW50c0NoZWNrYm94PXRyLnVpLmIuY3JlYXRlQ2hlY2tCb3godGhpcywnc2hvd0lucHV0RXZlbnRzJywnbGF5ZXJWaWV3LnNob3dJbnB1dEV2ZW50cycsdHJ1ZSwnSW5wdXQgZXZlbnRzJyk7c2hvd0lucHV0RXZlbnRzQ2hlY2tib3gudGl0bGU9J1doZW4gY2hlY2tlZCwgaW5wdXQgZXZlbnRzIGFyZSAnKydkaXNwbGF5ZWQgYXMgY2lyY2xlcy4nO1BvbHltZXIuZG9tKHRoaXMuY29udHJvbHNfKS5hcHBlbmRDaGlsZChzaG93SW5wdXRFdmVudHNDaGVja2JveCk7dGhpcy53aGF0UmFzdGVyaXplZExpbmtfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO3RoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXy5zdHlsZS5wb3NpdGlvbj0nYWJzb2x1dGUnO3RoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXy5zdHlsZS5ib3R0b209JzE1cHgnO3RoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXy5zdHlsZS5sZWZ0PScxMHB4Jzt0aGlzLndoYXRSYXN0ZXJpemVkTGlua18uc2VsZWN0aW9uPXRoaXMuZ2V0V2hhdFJhc3Rlcml6ZWRFdmVudFNldF8uYmluZCh0aGlzKTtQb2x5bWVyLmRvbSh0aGlzLnF1YWRTdGFja1ZpZXdfKS5hcHBlbmRDaGlsZCh0aGlzLndoYXRSYXN0ZXJpemVkTGlua18pO30sZ2V0IGxheWVyVHJlZUltcGwoKXtyZXR1cm4gdGhpcy5sYXllclRyZWVJbXBsXzt9LHNldCBpc1JlbmRlclBhc3NRdWFkcyhuZXdWYWx1ZSl7dGhpcy5pc1JlbmRlclBhc3NRdWFkc189bmV3VmFsdWU7fSxzZXQgbGF5ZXJUcmVlSW1wbChsYXllclRyZWVJbXBsKXtpZih0aGlzLmxheWVyVHJlZUltcGxfPT09bGF5ZXJUcmVlSW1wbClyZXR1cm47dGhpcy5sYXllclRyZWVJbXBsXz1sYXllclRyZWVJbXBsO3RoaXMuc2VsZWN0aW9uPXVuZGVmaW5lZDt9LGdldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoKXtyZXR1cm4gdGhpcy5leHRyYUhpZ2hsaWdodHNCeUxheWVySWRfO30sc2V0IGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZChleHRyYUhpZ2hsaWdodHNCeUxheWVySWQpe3RoaXMuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkXz1leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7dGhpcy5zY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dPdGhlckxheWVycygpe3JldHVybiB0aGlzLnNob3dPdGhlckxheWVyc187fSxzZXQgc2hvd090aGVyTGF5ZXJzKHNob3cpe3RoaXMuc2hvd090aGVyTGF5ZXJzXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2hvd0FuaW1hdGlvbkJvdW5kcygpe3JldHVybiB0aGlzLnNob3dBbmltYXRpb25Cb3VuZHNfO30sc2V0IHNob3dBbmltYXRpb25Cb3VuZHMoc2hvdyl7dGhpcy5zaG93QW5pbWF0aW9uQm91bmRzXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2hvd0lucHV0RXZlbnRzKCl7cmV0dXJuIHRoaXMuc2hvd0lucHV0RXZlbnRzXzt9LHNldCBzaG93SW5wdXRFdmVudHMoc2hvdyl7dGhpcy5zaG93SW5wdXRFdmVudHNfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93Q29udGVudHMoKXtyZXR1cm4gdGhpcy5zaG93Q29udGVudHNfO30sc2V0IHNob3dDb250ZW50cyhzaG93KXt0aGlzLnNob3dDb250ZW50c189c2hvdzt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dJbnZhbGlkYXRpb25zKCl7cmV0dXJuIHRoaXMuc2hvd0ludmFsaWRhdGlvbnNfO30sc2V0IHNob3dJbnZhbGlkYXRpb25zKHNob3cpe3RoaXMuc2hvd0ludmFsaWRhdGlvbnNfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93VW5yZWNvcmRlZFJlZ2lvbigpe3JldHVybiB0aGlzLnNob3dVbnJlY29yZGVkUmVnaW9uXzt9LHNldCBzaG93VW5yZWNvcmRlZFJlZ2lvbihzaG93KXt0aGlzLnNob3dVbnJlY29yZGVkUmVnaW9uXz1zaG93O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2hvd0JvdHRsZW5lY2tzKCl7cmV0dXJuIHRoaXMuc2hvd0JvdHRsZW5lY2tzXzt9LHNldCBzaG93Qm90dGxlbmVja3Moc2hvdyl7dGhpcy5zaG93Qm90dGxlbmVja3NfPXNob3c7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzaG93TGF5b3V0UmVjdHMoKXtyZXR1cm4gdGhpcy5zaG93TGF5b3V0UmVjdHNfO30sc2V0IHNob3dMYXlvdXRSZWN0cyhzaG93KXt0aGlzLnNob3dMYXlvdXRSZWN0c189c2hvdzt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhvd1RvU2hvd1RpbGVzKCl7cmV0dXJuIHRoaXMuaG93VG9TaG93VGlsZXNfO30sc2V0IGhvd1RvU2hvd1RpbGVzKHZhbCl7aWYodmFsIT09J25vbmUnJiZ2YWwhPT0nY292ZXJhZ2UnJiZpc05hTihwYXJzZUZsb2F0KHZhbCkpKXt0aHJvdyBuZXcgRXJyb3IoJ2hvd1RvU2hvd1RpbGVzIHJlcXVpcmVzICJub25lIiBvciAiY292ZXJhZ2UiIG9yIGEgbnVtYmVyJyk7fQp0aGlzLmhvd1RvU2hvd1RpbGVzXz12YWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB0aWxlSGVhdG1hcFR5cGUoKXtyZXR1cm4gdGhpcy50aWxlSGVhdG1hcFR5cGVfO30sc2V0IHRpbGVIZWF0bWFwVHlwZSh2YWwpe3RoaXMudGlsZUhlYXRtYXBUeXBlXz12YWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHRoaXMuc2VsZWN0aW9uPT09c2VsZWN0aW9uKXJldHVybjt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlJyk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHJlZ2VuZXJhdGVDb250ZW50KCl7dGhpcy51cGRhdGVUaWxlc1NlbGVjdG9yXygpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxsb2FkRGF0YUZvckltYWdlRWxlbWVudF8oaW1hZ2UsY2FsbGJhY2spe2NvbnN0IGltYWdlQ29udGVudD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZShpbWFnZSkuYmFja2dyb3VuZEltYWdlO2lmKCFpbWFnZUNvbnRlbnQpe3RoaXMuc2NoZWR1bGVVcGRhdGVDb250ZW50c18oKTtyZXR1cm47fQppbWFnZS5zcmM9dHIudWkuYi5leHRyYWN0VXJsU3RyaW5nKGltYWdlQ29udGVudCk7aW1hZ2Uub25sb2FkPWZ1bmN0aW9uKCl7Y29uc3QgY2FudmFzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO2NvbnN0IGN0eD1jYW52YXMuZ2V0Q29udGV4dCgnMmQnKTtjYW52YXMud2lkdGg9aW1hZ2Uud2lkdGg7Y2FudmFzLmhlaWdodD1pbWFnZS5oZWlnaHQ7Y3R4LmRyYXdJbWFnZShpbWFnZSwwLDApO2NvbnN0IGltYWdlRGF0YT1jdHguZ2V0SW1hZ2VEYXRhKDAsMCxjYW52YXMud2lkdGgsY2FudmFzLmhlaWdodCk7Y2FsbGJhY2soaW1hZ2VEYXRhKTt9O30sb25RdWFkU3RhY2tWaWV3U2VsZWN0aW9uQ2hhbmdlXyhlKXtjb25zdCBzZWxlY3RhYmxlUXVhZHM9ZS5xdWFkcy5maWx0ZXIoZnVuY3Rpb24ocSl7cmV0dXJuIHEuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQhPT11bmRlZmluZWQ7fSk7aWYoc2VsZWN0YWJsZVF1YWRzLmxlbmd0aD09PTApe3RoaXMuc2VsZWN0aW9uPXVuZGVmaW5lZDtyZXR1cm47fQpzZWxlY3RhYmxlUXVhZHMuc29ydChmdW5jdGlvbih4LHkpe2NvbnN0IHo9eC5zdGFja2luZ0dyb3VwSWQteS5zdGFja2luZ0dyb3VwSWQ7aWYoeiE9PTApcmV0dXJuIHo7cmV0dXJuIHguc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQuc3BlY2ljaWZpdHktCnkuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQuc3BlY2ljaWZpdHk7fSk7Y29uc3QgcXVhZFRvU2VsZWN0PXNlbGVjdGFibGVRdWFkc1tzZWxlY3RhYmxlUXVhZHMubGVuZ3RoLTFdO3RoaXMuc2VsZWN0aW9uPXF1YWRUb1NlbGVjdC5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZDt9LHNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfKXJldHVybjt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189dHJ1ZTt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZUluVGhpc0ZyYW1lSWZQb3NzaWJsZSh0aGlzLnVwZGF0ZUNvbnRlbnRzXyx0aGlzKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKCF0aGlzLmxheWVyVHJlZUltcGxfKXt0aGlzLnF1YWRTdGFja1ZpZXdfLmhlYWRlclRleHQ9J05vIHRyZWUnO3RoaXMucXVhZFN0YWNrVmlld18ucXVhZHM9W107cmV0dXJuO30KY29uc3Qgc3RhdHVzPXRoaXMuY29tcHV0ZVBpY3R1cmVMb2FkaW5nU3RhdHVzXygpO2lmKCFzdGF0dXMucGljdHVyZXNDb21wbGV0ZSlyZXR1cm47Y29uc3QgbHRoaT10aGlzLmxheWVyVHJlZUltcGxfLmxheWVyVHJlZUhvc3RJbXBsO2NvbnN0IGx0aGlJbnN0YW5jZT1sdGhpLm9iamVjdEluc3RhbmNlO2NvbnN0IHdvcmxkVmlld3BvcnRSZWN0PXRyLmIubWF0aC5SZWN0LmZyb21YWVdIKDAsMCxsdGhpLmRldmljZVZpZXdwb3J0U2l6ZS53aWR0aCxsdGhpLmRldmljZVZpZXdwb3J0U2l6ZS5oZWlnaHQpO3RoaXMucXVhZFN0YWNrVmlld18uZGV2aWNlUmVjdD13b3JsZFZpZXdwb3J0UmVjdDtpZih0aGlzLmlzUmVuZGVyUGFzc1F1YWRzXyl7dGhpcy5xdWFkU3RhY2tWaWV3Xy5xdWFkcz10aGlzLmdlbmVyYXRlUmVuZGVyUGFzc1F1YWRzKCk7fWVsc2V7dGhpcy5xdWFkU3RhY2tWaWV3Xy5xdWFkcz10aGlzLmdlbmVyYXRlTGF5ZXJRdWFkcygpO30KdGhpcy51cGRhdGVXaGF0UmFzdGVyaXplZExpbmtTdGF0ZV8oKTtsZXQgbWVzc2FnZT0nJztpZihsdGhpLnRpbGVzSGF2ZUdwdU1lbW9yeVVzYWdlSW5mbyl7Y29uc3QgdGhpc1RyZWVVc2FnZUluQnl0ZXM9dGhpcy5sYXllclRyZWVJbXBsXy5ncHVNZW1vcnlVc2FnZUluQnl0ZXM7Y29uc3Qgb3RoZXJUcmVlVXNhZ2VJbkJ5dGVzPWx0aGkuZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzLQp0aGlzVHJlZVVzYWdlSW5CeXRlczttZXNzYWdlKz10ci5iLmNvbnZlcnRVbml0KHRoaXNUcmVlVXNhZ2VJbkJ5dGVzLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5OT05FLHRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5NRUJJKS50b0ZpeGVkKDEpKycgTWlCIG9uIHRoaXMgdHJlZSc7aWYob3RoZXJUcmVlVXNhZ2VJbkJ5dGVzKXttZXNzYWdlKz0nLCAnKwp0ci5iLmNvbnZlcnRVbml0KG90aGVyVHJlZVVzYWdlSW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiBvbiB0aGUgb3RoZXIgdHJlZSc7fX1lbHNle2lmKHRoaXMubGF5ZXJUcmVlSW1wbF8pe2NvbnN0IHRoaXNUcmVlVXNhZ2VJbkJ5dGVzPXRoaXMubGF5ZXJUcmVlSW1wbF8uZ3B1TWVtb3J5VXNhZ2VJbkJ5dGVzO21lc3NhZ2UrPXRyLmIuY29udmVydFVuaXQodGhpc1RyZWVVc2FnZUluQnl0ZXMsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk5PTkUsdHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLk1FQkkpLnRvRml4ZWQoMSkrJyBNaUIgb24gdGhpcyB0cmVlJztpZih0aGlzLmxheWVyVHJlZUltcGxfLm90aGVyVHJlZSl7bWVzc2FnZSs9JywgPz8/IE1pQiBvbiBvdGhlciB0cmVlLiAnO319fQppZihsdGhpLmFyZ3MudGlsZU1hbmFnZXJCYXNpY1N0YXRlKXtjb25zdCB0bWdzPWx0aGkuYXJncy50aWxlTWFuYWdlckJhc2ljU3RhdGUuZ2xvYmFsU3RhdGU7bWVzc2FnZSs9JyAoc29mdE1heD0nKwp0ci5iLmNvbnZlcnRVbml0KHRtZ3Muc29mdE1lbW9yeUxpbWl0SW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiwgaGFyZE1heD0nKwp0ci5iLmNvbnZlcnRVbml0KHRtZ3MuaGFyZE1lbW9yeUxpbWl0SW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiwgJysKdG1ncy5tZW1vcnlMaW1pdFBvbGljeSsnKSc7fWVsc2V7Y29uc3QgdGhyZWFkPWx0aGkuc25hcHNob3R0ZWRPblRocmVhZDtjb25zdCBkaWRNYW5hZ2VUaWxlc1NsaWNlcz10aHJlYWQuc2xpY2VHcm91cC5zbGljZXMuZmlsdGVyKHM9PntpZihzLmNhdGVnb3J5IT09J3RyLmUuY2MnKXJldHVybiBmYWxzZTtpZihzLnRpdGxlIT09J0RpZE1hbmFnZScpcmV0dXJuIGZhbHNlO2lmKHMuZW5kPmx0aGkudHMpcmV0dXJuIGZhbHNlO3JldHVybiB0cnVlO30pO2RpZE1hbmFnZVRpbGVzU2xpY2VzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5lbmQteS5lbmQ7fSk7aWYoZGlkTWFuYWdlVGlsZXNTbGljZXMubGVuZ3RoPjApe2NvbnN0IG5ld2VzdD1kaWRNYW5hZ2VUaWxlc1NsaWNlc1tkaWRNYW5hZ2VUaWxlc1NsaWNlcy5sZW5ndGgtMV07Y29uc3QgdG1ncz1uZXdlc3QuYXJncy5zdGF0ZS5nbG9iYWxfc3RhdGU7bWVzc2FnZSs9JyAoc29mdE1heD0nKwp0ci5iLmNvbnZlcnRVbml0KHRtZ3Muc29mdE1lbW9yeUxpbWl0SW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiwgaGFyZE1heD0nKwp0ci5iLmNvbnZlcnRVbml0KHRtZ3MuaGFyZE1lbW9yeUxpbWl0SW5CeXRlcyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSSkudG9GaXhlZCgxKSsnIE1pQiwgJysKdG1ncy5tZW1vcnlMaW1pdFBvbGljeSsnKSc7fX0KaWYodGhpcy5sYXllclRyZWVJbXBsXy5vdGhlclRyZWUpe21lc3NhZ2UrPScgKEFub3RoZXIgdHJlZSBleGlzdHMpJzt9CmlmKG1lc3NhZ2UubGVuZ3RoKXt0aGlzLnF1YWRTdGFja1ZpZXdfLmhlYWRlclRleHQ9bWVzc2FnZTt9ZWxzZXt0aGlzLnF1YWRTdGFja1ZpZXdfLmhlYWRlclRleHQ9dW5kZWZpbmVkO30KdGhpcy51cGRhdGVJbmZvQmFyXyhzdGF0dXMubWVzc2FnZXMpO30sdXBkYXRlVGlsZXNTZWxlY3Rvcl8oKXtjb25zdCBkYXRhPWNyZWF0ZVRpbGVSZWN0c1NlbGVjdG9yQmFzZU9wdGlvbnMoKTtpZih0aGlzLmxheWVyVHJlZUltcGxfKXtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3Qgc2NhbGVOYW1lcz1sdGhpLmdldENvbnRlbnRzU2NhbGVOYW1lcygpO2Zvcihjb25zdCBzY2FsZSBpbiBzY2FsZU5hbWVzKXtkYXRhLnB1c2goe2xhYmVsOidTY2FsZSAnK3NjYWxlKycgKCcrc2NhbGVOYW1lc1tzY2FsZV0rJyknLHZhbHVlOnNjYWxlfSk7fX0KY29uc3QgbmV3U2VsZWN0b3I9dHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCdob3dUb1Nob3dUaWxlcycsJ2xheWVyVmlldy5ob3dUb1Nob3dUaWxlcycsJ25vbmUnLGRhdGEpO3RoaXMuY29udHJvbHNfLnJlcGxhY2VDaGlsZChuZXdTZWxlY3Rvcix0aGlzLnRpbGVSZWN0c1NlbGVjdG9yXyk7dGhpcy50aWxlUmVjdHNTZWxlY3Rvcl89bmV3U2VsZWN0b3I7fSxjb21wdXRlUGljdHVyZUxvYWRpbmdTdGF0dXNfKCl7Y29uc3QgbGF5ZXJzPXRoaXMubGF5ZXJzO2NvbnN0IHN0YXR1cz17bWVzc2FnZXM6W10scGljdHVyZXNDb21wbGV0ZTp0cnVlfTtpZih0aGlzLnNob3dDb250ZW50cyl7bGV0IGhhc1BlbmRpbmdSYXN0ZXJpemVJbWFnZT1mYWxzZTtsZXQgZmlyc3RQaWN0dXJlRXJyb3I9dW5kZWZpbmVkO2xldCBoYXNNaXNzaW5nTGF5ZXJSZWN0PWZhbHNlO2xldCBoYXNVbnJlc29sdmVkUGljdHVyZVJlZj1mYWxzZTtmb3IobGV0IGk9MDtpPGxheWVycy5sZW5ndGg7aSsrKXtjb25zdCBsYXllcj1sYXllcnNbaV07Zm9yKGxldCBpcj0wO2lyPGxheWVyLnBpY3R1cmVzLmxlbmd0aDsrK2lyKXtjb25zdCBwaWN0dXJlPWxheWVyLnBpY3R1cmVzW2lyXTtpZihwaWN0dXJlLmlkUmVmKXtoYXNVbnJlc29sdmVkUGljdHVyZVJlZj10cnVlO2NvbnRpbnVlO30KaWYoIXBpY3R1cmUubGF5ZXJSZWN0KXtoYXNNaXNzaW5nTGF5ZXJSZWN0PXRydWU7Y29udGludWU7fQpjb25zdCBwaWN0dXJlQXNJbWFnZURhdGE9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfW3BpY3R1cmUuZ3VpZF07aWYoIXBpY3R1cmVBc0ltYWdlRGF0YSl7aGFzUGVuZGluZ1Jhc3Rlcml6ZUltYWdlPXRydWU7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfW3BpY3R1cmUuZ3VpZF09dHIuZS5jYy5QaWN0dXJlQXNJbWFnZURhdGEuUGVuZGluZyh0aGlzKTtwaWN0dXJlLnJhc3Rlcml6ZSh7c3RvcEluZGV4OnVuZGVmaW5lZH0sZnVuY3Rpb24ocGljdHVyZUltYWdlRGF0YSl7Y29uc3QgcGljdHVyZV89cGljdHVyZUltYWdlRGF0YS5waWN0dXJlO3RoaXMucGljdHVyZUFzSW1hZ2VEYXRhX1twaWN0dXJlXy5ndWlkXT1waWN0dXJlSW1hZ2VEYXRhO3RoaXMuc2NoZWR1bGVVcGRhdGVDb250ZW50c18oKTt9LmJpbmQodGhpcykpO2NvbnRpbnVlO30KaWYocGljdHVyZUFzSW1hZ2VEYXRhLmlzUGVuZGluZygpKXtoYXNQZW5kaW5nUmFzdGVyaXplSW1hZ2U9dHJ1ZTtjb250aW51ZTt9CmlmKHBpY3R1cmVBc0ltYWdlRGF0YS5lcnJvcil7aWYoIWZpcnN0UGljdHVyZUVycm9yKXtmaXJzdFBpY3R1cmVFcnJvcj1waWN0dXJlQXNJbWFnZURhdGEuZXJyb3I7fQpicmVhazt9fX0KaWYoaGFzUGVuZGluZ1Jhc3Rlcml6ZUltYWdlKXtzdGF0dXMucGljdHVyZXNDb21wbGV0ZT1mYWxzZTt9ZWxzZXtpZihoYXNVbnJlc29sdmVkUGljdHVyZVJlZil7c3RhdHVzLm1lc3NhZ2VzLnB1c2goe2hlYWRlcjonTWlzc2luZyBwaWN0dXJlJyxkZXRhaWxzOidZb3VyIHRyYWNlIGRpZG5cJ3QgaGF2ZSBwaWN0dXJlcyBmb3IgZXZlcnkgbGF5ZXIuICcrJ09sZCBjaHJvbWUgdmVyc2lvbnMgaGFkIHRoaXMgcHJvYmxlbSd9KTt9CmlmKGhhc01pc3NpbmdMYXllclJlY3Qpe3N0YXR1cy5tZXNzYWdlcy5wdXNoKHtoZWFkZXI6J01pc3NpbmcgbGF5ZXIgcmVjdCcsZGV0YWlsczonWW91ciB0cmFjZSBtYXkgYmUgY29ycnVwdCBvciBmcm9tIGEgdmVyeSBvbGQgJysnQ2hyb21lIHJldmlzaW9uLid9KTt9CmlmKGZpcnN0UGljdHVyZUVycm9yKXtzdGF0dXMubWVzc2FnZXMucHVzaCh7aGVhZGVyOidDYW5ub3QgcmFzdGVyaXplJyxkZXRhaWxzOmZpcnN0UGljdHVyZUVycm9yfSk7fX19CmlmKHRoaXMuc2hvd0lucHV0RXZlbnRzJiZ0aGlzLmxheWVyVHJlZUltcGwudHJhY2VkSW5wdXRMYXRlbmNpZXMmJnRoaXMuaW5wdXRFdmVudEltYWdlRGF0YV89PT11bmRlZmluZWQpe2NvbnN0IGltYWdlPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJyNpbnB1dC1ldmVudCcpO2lmKCFpbWFnZS5zcmMpe3RoaXMubG9hZERhdGFGb3JJbWFnZUVsZW1lbnRfKGltYWdlLGZ1bmN0aW9uKGltYWdlRGF0YSl7dGhpcy5pbnB1dEV2ZW50SW1hZ2VEYXRhXz1pbWFnZURhdGE7dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPWZhbHNlO3RoaXMuc2NoZWR1bGVVcGRhdGVDb250ZW50c18oKTt9LmJpbmQodGhpcykpO30Kc3RhdHVzLnBpY3R1cmVzQ29tcGxldGU9ZmFsc2U7fQpyZXR1cm4gc3RhdHVzO30sZ2V0IHNlbGVjdGVkUmVuZGVyUGFzcygpe2lmKHRoaXMuc2VsZWN0aW9uKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb24ucmVuZGVyUGFzc187fX0sZ2V0IHNlbGVjdGVkTGF5ZXIoKXtpZih0aGlzLnNlbGVjdGlvbil7Y29uc3Qgc2VsZWN0ZWRMYXllcklkPXRoaXMuc2VsZWN0aW9uLmFzc29jaWF0ZWRMYXllcklkO3JldHVybiB0aGlzLmxheWVyVHJlZUltcGxfLmZpbmRMYXllcldpdGhJZChzZWxlY3RlZExheWVySWQpO319LGdldCByZW5kZXJQYXNzZXMoKXtsZXQgcmVuZGVyUGFzc2VzPXRoaXMubGF5ZXJUcmVlSW1wbC5sYXllclRyZWVIb3N0SW1wbC5hcmdzLmZyYW1lLnJlbmRlclBhc3NlcztpZighdGhpcy5zaG93T3RoZXJMYXllcnMpe2NvbnN0IHNlbGVjdGVkUmVuZGVyUGFzcz10aGlzLnNlbGVjdGVkUmVuZGVyUGFzcztpZihzZWxlY3RlZFJlbmRlclBhc3Mpe3JlbmRlclBhc3Nlcz1bc2VsZWN0ZWRSZW5kZXJQYXNzXTt9fQpyZXR1cm4gcmVuZGVyUGFzc2VzO30sZ2V0IGxheWVycygpe2xldCBsYXllcnM9dGhpcy5sYXllclRyZWVJbXBsLnJlbmRlclN1cmZhY2VMYXllckxpc3Q7aWYoIXRoaXMuc2hvd090aGVyTGF5ZXJzKXtjb25zdCBzZWxlY3RlZExheWVyPXRoaXMuc2VsZWN0ZWRMYXllcjtpZihzZWxlY3RlZExheWVyKXtsYXllcnM9W3NlbGVjdGVkTGF5ZXJdO319CnJldHVybiBsYXllcnM7fSxhcHBlbmRJbWFnZVF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpe2ZvcihsZXQgaXI9MDtpcjxsYXllci5waWN0dXJlcy5sZW5ndGg7Kytpcil7Y29uc3QgcGljdHVyZT1sYXllci5waWN0dXJlc1tpcl07aWYoIXBpY3R1cmUubGF5ZXJSZWN0KWNvbnRpbnVlO2NvbnN0IHVuaXRSZWN0PXBpY3R1cmUubGF5ZXJSZWN0LmFzVVZSZWN0SW5zaWRlKGxheWVyLmJvdW5kcyk7Y29uc3QgaXE9bGF5ZXJRdWFkLnByb2plY3RVbml0UmVjdCh1bml0UmVjdCk7Y29uc3QgcGljdHVyZURhdGE9dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfW3BpY3R1cmUuZ3VpZF07aWYodGhpcy5zaG93Q29udGVudHMmJnBpY3R1cmVEYXRhJiZwaWN0dXJlRGF0YS5pbWFnZURhdGEpe2lxLmltYWdlRGF0YT1waWN0dXJlRGF0YS5pbWFnZURhdGE7aXEuYm9yZGVyQ29sb3I9J3JnYmEoMCwwLDAsMCknO31lbHNle2lxLmltYWdlRGF0YT11bmRlZmluZWQ7fQppcS5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtxdWFkcy5wdXNoKGlxKTt9fSxhcHBlbmRBbmltYXRpb25RdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKXtpZighbGF5ZXIuYW5pbWF0aW9uQm91bmRzUmVjdClyZXR1cm47Y29uc3QgcmVjdD1sYXllci5hbmltYXRpb25Cb3VuZHNSZWN0O2NvbnN0IGFicT10ci5iLm1hdGguUXVhZC5mcm9tUmVjdChyZWN0KTthYnEuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDE2NCwxOTEsNDgsMC41KSc7YWJxLmJvcmRlckNvbG9yPSdyZ2JhKDIwNSwyNTUsMCwwLjc1KSc7YWJxLmJvcmRlcldpZHRoPTMuMDthYnEuc3RhY2tpbmdHcm91cElkPWxheWVyUXVhZC5zdGFja2luZ0dyb3VwSWQ7YWJxLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5BbmltYXRpb25SZWN0U2VsZWN0aW9uKGxheWVyLHJlY3QpO3F1YWRzLnB1c2goYWJxKTt9LGFwcGVuZEludmFsaWRhdGlvblF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpe2lmKGxheWVyLmxheWVyVHJlZUltcGwuaGFzU291cmNlRnJhbWVCZWVuRHJhd25CZWZvcmUpcmV0dXJuO2Zvcihjb25zdCByZWN0IG9mIGxheWVyLmludmFsaWRhdGlvbi5yZWN0cyl7Y29uc3QgdW5pdFJlY3Q9cmVjdC5hc1VWUmVjdEluc2lkZShsYXllci5ib3VuZHMpO2NvbnN0IGlxPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO2lxLmJhY2tncm91bmRDb2xvcj0ncmdiYSgwLCAyNTUsIDAsIDAuMSknO2lmKHJlY3QucmVhc29uPT09J2FwcGVhcmVkJyl7aXEuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDI1NSwgMTI4LCAwLjEpJzt9CmlxLmJvcmRlckNvbG9yPSdyZ2JhKDAsIDI1NSwgMCwgMSknO2lxLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO2xldCBtZXNzYWdlPSdJbnZhbGlkYXRpb24gcmVjdCc7aWYocmVjdC5yZWFzb24pe21lc3NhZ2UrPScgKCcrcmVjdC5yZWFzb24rJyknO30KaWYocmVjdC5jbGllbnQpe21lc3NhZ2UrPScgZm9yICcrcmVjdC5jbGllbnQ7fQppcS5zZWxlY3Rpb25Ub1NldElmQ2xpY2tlZD1uZXcgY2MuTGF5ZXJSZWN0U2VsZWN0aW9uKGxheWVyLG1lc3NhZ2UscmVjdCxyZWN0KTtxdWFkcy5wdXNoKGlxKTt9fSxhcHBlbmRVbnJlY29yZGVkUmVnaW9uUXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCl7Zm9yKGxldCBpcj0wO2lyPGxheWVyLnVucmVjb3JkZWRSZWdpb24ucmVjdHMubGVuZ3RoO2lyKyspe2NvbnN0IHJlY3Q9bGF5ZXIudW5yZWNvcmRlZFJlZ2lvbi5yZWN0c1tpcl07Y29uc3QgdW5pdFJlY3Q9cmVjdC5hc1VWUmVjdEluc2lkZShsYXllci5ib3VuZHMpO2NvbnN0IGlxPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO2lxLmJhY2tncm91bmRDb2xvcj0ncmdiYSgyNDAsIDIzMCwgMTQwLCAwLjMpJztpcS5ib3JkZXJDb2xvcj0ncmdiYSgyNDAsIDIzMCwgMTQwLCAxKSc7aXEuc3RhY2tpbmdHcm91cElkPWxheWVyUXVhZC5zdGFja2luZ0dyb3VwSWQ7aXEuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQ9bmV3IGNjLkxheWVyUmVjdFNlbGVjdGlvbihsYXllciwnVW5yZWNvcmRlZCBhcmVhJyxyZWN0LHJlY3QpO3F1YWRzLnB1c2goaXEpO319LGFwcGVuZEJvdHRsZW5lY2tRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkLHN0YWNraW5nR3JvdXBJZCl7ZnVuY3Rpb24gcHJvY2Vzc1JlZ2lvbihyZWdpb24sbGFiZWwsYm9yZGVyQ29sb3Ipe2NvbnN0IGJhY2tncm91bmRDb2xvcj1ib3JkZXJDb2xvci5jbG9uZSgpO2JhY2tncm91bmRDb2xvci5hPTAuNCooYm9yZGVyQ29sb3IuYXx8MS4wKTtpZighcmVnaW9ufHwhcmVnaW9uLnJlY3RzKXJldHVybjtmb3IobGV0IGlyPTA7aXI8cmVnaW9uLnJlY3RzLmxlbmd0aDtpcisrKXtjb25zdCByZWN0PXJlZ2lvbi5yZWN0c1tpcl07Y29uc3QgdW5pdFJlY3Q9cmVjdC5hc1VWUmVjdEluc2lkZShsYXllci5ib3VuZHMpO2NvbnN0IGlxPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO2lxLmJhY2tncm91bmRDb2xvcj1iYWNrZ3JvdW5kQ29sb3IudG9TdHJpbmcoKTtpcS5ib3JkZXJDb2xvcj1ib3JkZXJDb2xvci50b1N0cmluZygpO2lxLmJvcmRlcldpZHRoPTQuMDtpcS5zdGFja2luZ0dyb3VwSWQ9c3RhY2tpbmdHcm91cElkO2lxLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5MYXllclJlY3RTZWxlY3Rpb24obGF5ZXIsbGFiZWwscmVjdCxyZWN0KTtxdWFkcy5wdXNoKGlxKTt9fQpwcm9jZXNzUmVnaW9uKGxheWVyLnRvdWNoRXZlbnRIYW5kbGVyUmVnaW9uLCdUb3VjaCBsaXN0ZW5lcicsdHIuYi5Db2xvci5mcm9tU3RyaW5nKCdyZ2IoMjI4LCAyMjYsIDI3KScpKTtwcm9jZXNzUmVnaW9uKGxheWVyLndoZWVsRXZlbnRIYW5kbGVyUmVnaW9uLCdXaGVlbCBsaXN0ZW5lcicsdHIuYi5Db2xvci5mcm9tU3RyaW5nKCdyZ2IoMTc2LCAyMDUsIDI5KScpKTtwcm9jZXNzUmVnaW9uKGxheWVyLm5vbkZhc3RTY3JvbGxhYmxlUmVnaW9uLCdSZXBhaW50cyBvbiBzY3JvbGwnLHRyLmIuQ29sb3IuZnJvbVN0cmluZygncmdiKDIxMywgMTM0LCAzMiknKSk7fSxhcHBlbmRUaWxlQ292ZXJhZ2VSZWN0UXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxoZWF0bWFwVHlwZSl7aWYoIWxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzKXJldHVybjtjb25zdCB0aWxlcz1bXTtmb3IobGV0IGN0PTA7Y3Q8bGF5ZXIudGlsZUNvdmVyYWdlUmVjdHMubGVuZ3RoOysrY3Qpe2NvbnN0IHRpbGU9bGF5ZXIudGlsZUNvdmVyYWdlUmVjdHNbY3RdLnRpbGU7aWYodGlsZSE9PXVuZGVmaW5lZCl0aWxlcy5wdXNoKHRpbGUpO30KY29uc3QgbHRoaT10aGlzLmxheWVyVHJlZUltcGxfLmxheWVyVHJlZUhvc3RJbXBsO2NvbnN0IG1pbk1heD10aGlzLmdldE1pbk1heEZvckhlYXRtYXBfKGx0aGkuYWN0aXZlVGlsZXMsaGVhdG1hcFR5cGUpO2NvbnN0IGhlYXRtYXBSZXN1bHQ9dGhpcy5jb21wdXRlSGVhdG1hcENvbG9yc18odGlsZXMsbWluTWF4LGhlYXRtYXBUeXBlKTtsZXQgaGVhdEluZGV4PTA7Zm9yKGxldCBjdD0wO2N0PGxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzLmxlbmd0aDsrK2N0KXtsZXQgcmVjdD1sYXllci50aWxlQ292ZXJhZ2VSZWN0c1tjdF0uZ2VvbWV0cnlSZWN0O3JlY3Q9cmVjdC5zY2FsZSgxLjAvbGF5ZXIuZ2VvbWV0cnlDb250ZW50c1NjYWxlKTtjb25zdCB0aWxlPWxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzW2N0XS50aWxlO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBxdWFkPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO3F1YWQuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDAsIDAsIDApJztxdWFkLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO2xldCB0eXBlPXRyLmUuY2MudGlsZVR5cGVzLm1pc3Npbmc7aWYodGlsZSl7dHlwZT10aWxlLmdldFR5cGVGb3JMYXllcihsYXllcik7cXVhZC5iYWNrZ3JvdW5kQ29sb3I9aGVhdG1hcFJlc3VsdFtoZWF0SW5kZXhdLmNvbG9yOysraGVhdEluZGV4O30KcXVhZC5ib3JkZXJDb2xvcj10ci5lLmNjLnRpbGVCb3JkZXJbdHlwZV0uY29sb3I7cXVhZC5ib3JkZXJXaWR0aD10ci5lLmNjLnRpbGVCb3JkZXJbdHlwZV0ud2lkdGg7bGV0IGxhYmVsO2lmKHRpbGUpe2xhYmVsPSdjb3ZlcmFnZVJlY3QnO31lbHNle2xhYmVsPSdjaGVja2VyYm9hcmQgY292ZXJhZ2VSZWN0Jzt9CnF1YWQuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQ9bmV3IGNjLkxheWVyUmVjdFNlbGVjdGlvbihsYXllcixsYWJlbCxyZWN0LGxheWVyLnRpbGVDb3ZlcmFnZVJlY3RzW2N0XSk7cXVhZHMucHVzaChxdWFkKTt9fSxhcHBlbmRMYXlvdXRSZWN0UXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCl7aWYoIWxheWVyLmxheW91dFJlY3RzKXtyZXR1cm47fQpmb3IobGV0IGN0PTA7Y3Q8bGF5ZXIubGF5b3V0UmVjdHMubGVuZ3RoOysrY3Qpe2xldCByZWN0PWxheWVyLmxheW91dFJlY3RzW2N0XS5nZW9tZXRyeVJlY3Q7cmVjdD1yZWN0LnNjYWxlKDEuMC9sYXllci5nZW9tZXRyeUNvbnRlbnRzU2NhbGUpO2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBxdWFkPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO3F1YWQuYmFja2dyb3VuZENvbG9yPSdyZ2JhKDAsIDAsIDAsIDApJztxdWFkLnN0YWNraW5nR3JvdXBJZD1sYXllclF1YWQuc3RhY2tpbmdHcm91cElkO3F1YWQuYm9yZGVyQ29sb3I9J3JnYmEoMCwgMCwgMjAwLCAwLjcpJztxdWFkLmJvcmRlcldpZHRoPTI7Y29uc3QgbGFiZWw9J0xheW91dCByZWN0JztxdWFkLnNlbGVjdGlvblRvU2V0SWZDbGlja2VkPW5ldyBjYy5MYXllclJlY3RTZWxlY3Rpb24obGF5ZXIsbGFiZWwscmVjdCk7cXVhZHMucHVzaChxdWFkKTt9fSxnZXRWYWx1ZUZvckhlYXRtYXBfKHRpbGUsaGVhdG1hcFR5cGUpe2lmKGhlYXRtYXBUeXBlPT09VElMRV9IRUFUTUFQX1RZUEUuU0NIRURVTEVEX1BSSU9SSVRZKXtyZXR1cm4gdGlsZS5zY2hlZHVsZWRQcmlvcml0eT09PTA/dW5kZWZpbmVkOnRpbGUuc2NoZWR1bGVkUHJpb3JpdHk7fWVsc2UgaWYoaGVhdG1hcFR5cGU9PT1USUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZKXtpZih0aWxlLmlzU29saWRDb2xvcilyZXR1cm4gMC41O3JldHVybiB0aWxlLmlzVXNpbmdHcHVNZW1vcnk/MDoxO319LGdldE1pbk1heEZvckhlYXRtYXBfKHRpbGVzLGhlYXRtYXBUeXBlKXtjb25zdCByYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7aWYoaGVhdG1hcFR5cGU9PT1USUxFX0hFQVRNQVBfVFlQRS5VU0lOR19HUFVfTUVNT1JZKXtyYW5nZS5hZGRWYWx1ZSgwKTtyYW5nZS5hZGRWYWx1ZSgxKTtyZXR1cm4gcmFuZ2U7fQpmb3IobGV0IGk9MDtpPHRpbGVzLmxlbmd0aDsrK2kpe2NvbnN0IHZhbHVlPXRoaXMuZ2V0VmFsdWVGb3JIZWF0bWFwXyh0aWxlc1tpXSxoZWF0bWFwVHlwZSk7aWYodmFsdWU9PT11bmRlZmluZWQpY29udGludWU7cmFuZ2UuYWRkVmFsdWUodmFsdWUpO30KaWYocmFuZ2UucmFuZ2U9PT0wKXtyYW5nZS5hZGRWYWx1ZSgxKTt9CnJldHVybiByYW5nZTt9LGNvbXB1dGVIZWF0bWFwQ29sb3JzXyh0aWxlcyxtaW5NYXgsaGVhdG1hcFR5cGUpe2NvbnN0IG1pbj1taW5NYXgubWluO2NvbnN0IG1heD1taW5NYXgubWF4O2NvbnN0IGNvbG9yPWZ1bmN0aW9uKHZhbHVlKXtsZXQgaHVlPTEyMCooMS0odmFsdWUtbWluKS8obWF4LW1pbikpO2lmKGh1ZTwwKWh1ZT0wO3JldHVybidoc2xhKCcraHVlKycsIDEwMCUsIDUwJSwgMC41KSc7fTtjb25zdCB2YWx1ZXM9W107Zm9yKGxldCBpPTA7aTx0aWxlcy5sZW5ndGg7KytpKXtjb25zdCB0aWxlPXRpbGVzW2ldO2NvbnN0IHZhbHVlPXRoaXMuZ2V0VmFsdWVGb3JIZWF0bWFwXyh0aWxlLGhlYXRtYXBUeXBlKTtjb25zdCByZXM9e3ZhbHVlLGNvbG9yOnZhbHVlIT09dW5kZWZpbmVkP2NvbG9yKHZhbHVlKTp1bmRlZmluZWR9O3ZhbHVlcy5wdXNoKHJlcyk7fQpyZXR1cm4gdmFsdWVzO30sYXBwZW5kVGlsZXNXaXRoU2NhbGVRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkLHNjYWxlLGhlYXRtYXBUeXBlKXtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3QgdGlsZXM9W107Zm9yKGxldCBpPTA7aTxsdGhpLmFjdGl2ZVRpbGVzLmxlbmd0aDsrK2kpe2NvbnN0IHRpbGU9bHRoaS5hY3RpdmVUaWxlc1tpXTtpZihNYXRoLmFicyh0aWxlLmNvbnRlbnRzU2NhbGUtc2NhbGUpPjFlLTYpe2NvbnRpbnVlO30KaWYobGF5ZXIubGF5ZXJJZCE9PXRpbGUubGF5ZXJJZCljb250aW51ZTt0aWxlcy5wdXNoKHRpbGUpO30KY29uc3QgbWluTWF4PXRoaXMuZ2V0TWluTWF4Rm9ySGVhdG1hcF8obHRoaS5hY3RpdmVUaWxlcyxoZWF0bWFwVHlwZSk7Y29uc3QgaGVhdG1hcFJlc3VsdD10aGlzLmNvbXB1dGVIZWF0bWFwQ29sb3JzXyh0aWxlcyxtaW5NYXgsaGVhdG1hcFR5cGUpO2ZvcihsZXQgaT0wO2k8dGlsZXMubGVuZ3RoOysraSl7Y29uc3QgdGlsZT10aWxlc1tpXTtjb25zdCByZWN0PXRpbGUubGF5ZXJSZWN0O2lmKCF0aWxlLmxheWVyUmVjdCljb250aW51ZTtjb25zdCB1bml0UmVjdD1yZWN0LmFzVVZSZWN0SW5zaWRlKGxheWVyLmJvdW5kcyk7Y29uc3QgcXVhZD1sYXllclF1YWQucHJvamVjdFVuaXRSZWN0KHVuaXRSZWN0KTtxdWFkLmJhY2tncm91bmRDb2xvcj0ncmdiYSgwLCAwLCAwLCAwKSc7cXVhZC5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtjb25zdCB0eXBlPXRpbGUuZ2V0VHlwZUZvckxheWVyKGxheWVyKTtxdWFkLmJvcmRlckNvbG9yPXRyLmUuY2MudGlsZUJvcmRlclt0eXBlXS5jb2xvcjtxdWFkLmJvcmRlcldpZHRoPXRyLmUuY2MudGlsZUJvcmRlclt0eXBlXS53aWR0aDtxdWFkLmJhY2tncm91bmRDb2xvcj1oZWF0bWFwUmVzdWx0W2ldLmNvbG9yO2NvbnN0IGRhdGE9e3RpbGVUeXBlOnR5cGV9O2lmKGhlYXRtYXBUeXBlIT09VElMRV9IRUFUTUFQX1RZUEUuTk9ORSl7ZGF0YVtoZWF0bWFwVHlwZV09aGVhdG1hcFJlc3VsdFtpXS52YWx1ZTt9CnF1YWQuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQ9bmV3IGNjLlRpbGVTZWxlY3Rpb24odGlsZSxkYXRhKTtxdWFkcy5wdXNoKHF1YWQpO319LGFwcGVuZEhpZ2hsaWdodFF1YWRzRm9yTGF5ZXJfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxoaWdobGlnaHRzKXtoaWdobGlnaHRzLmZvckVhY2goZnVuY3Rpb24oaGlnaGxpZ2h0KXtjb25zdCByZWN0PWhpZ2hsaWdodC5yZWN0O2NvbnN0IHVuaXRSZWN0PXJlY3QuYXNVVlJlY3RJbnNpZGUobGF5ZXIuYm91bmRzKTtjb25zdCBxdWFkPWxheWVyUXVhZC5wcm9qZWN0VW5pdFJlY3QodW5pdFJlY3QpO2xldCBjb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhoaWdobGlnaHQuY29sb3JLZXkpO2NvbnN0IG9mZnNldD1Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdO2NvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoY29sb3JJZCxvZmZzZXQpO2NvbnN0IGNvbG9yPUNvbG9yU2NoZW1lLmNvbG9yc1tjb2xvcklkXTtjb25zdCBxdWFkRm9yRHJhd2luZz1xdWFkLmNsb25lKCk7cXVhZEZvckRyYXdpbmcuYmFja2dyb3VuZENvbG9yPWNvbG9yLndpdGhBbHBoYSgwLjUpLnRvU3RyaW5nKCk7cXVhZEZvckRyYXdpbmcuYm9yZGVyQ29sb3I9Y29sb3Iud2l0aEFscGhhKDEuMCkuZGFya2VuKCkudG9TdHJpbmcoKTtxdWFkRm9yRHJhd2luZy5zdGFja2luZ0dyb3VwSWQ9bGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZDtxdWFkcy5wdXNoKHF1YWRGb3JEcmF3aW5nKTt9LHRoaXMpO30sZ2VuZXJhdGVSZW5kZXJQYXNzUXVhZHMoKXtpZighdGhpcy5sYXllclRyZWVJbXBsLmxheWVyVHJlZUhvc3RJbXBsLmFyZ3MuZnJhbWUpcmV0dXJuW107Y29uc3QgcmVuZGVyUGFzc2VzPXRoaXMucmVuZGVyUGFzc2VzO2lmKCFyZW5kZXJQYXNzZXMpcmV0dXJuW107Y29uc3QgcXVhZHM9W107Zm9yKGxldCBpPTA7aTxyZW5kZXJQYXNzZXMubGVuZ3RoOysraSl7Y29uc3QgcXVhZExpc3Q9cmVuZGVyUGFzc2VzW2ldLnF1YWRMaXN0O2ZvcihsZXQgaj0wO2o8cXVhZExpc3QubGVuZ3RoOysrail7Y29uc3QgZHJhd1F1YWQ9cXVhZExpc3Rbal07Y29uc3QgcXVhZD1kcmF3UXVhZC5yZWN0QXNUYXJnZXRTcGFjZVF1YWQuY2xvbmUoKTtxdWFkLmJvcmRlckNvbG9yPSdyZ2IoMTcwLCAyMDQsIDIzOCknO3F1YWQuYm9yZGVyV2lkdGg9MjtxdWFkLnN0YWNraW5nR3JvdXBJZD1pO3F1YWRzLnB1c2gocXVhZCk7fX0KcmV0dXJuIHF1YWRzO30sZ2VuZXJhdGVMYXllclF1YWRzKCl7dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPWZhbHNlO2NvbnN0IGxheWVycz10aGlzLmxheWVycztjb25zdCBxdWFkcz1bXTtsZXQgbmV4dFN0YWNraW5nR3JvdXBJZD0wO2NvbnN0IGFscmVhZHlWaXNpdGVkTGF5ZXJJZHM9e307bGV0IHNlbGVjdGlvbkhpZ2hsaWdodHNCeUxheWVySWQ7aWYodGhpcy5zZWxlY3Rpb24pe3NlbGVjdGlvbkhpZ2hsaWdodHNCeUxheWVySWQ9dGhpcy5zZWxlY3Rpb24uaGlnaGxpZ2h0c0J5TGF5ZXJJZDt9ZWxzZXtzZWxlY3Rpb25IaWdobGlnaHRzQnlMYXllcklkPXt9O30KY29uc3QgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkPXRoaXMuZXh0cmFIaWdobGlnaHRzQnlMYXllcklkfHx7fTtmb3IobGV0IGk9MTtpPD1sYXllcnMubGVuZ3RoO2krKyl7Y29uc3QgbGF5ZXI9bGF5ZXJzW2xheWVycy5sZW5ndGgtaV07YWxyZWFkeVZpc2l0ZWRMYXllcklkc1tsYXllci5sYXllcklkXT10cnVlO2lmKGxheWVyLm9iamVjdEluc3RhbmNlLm5hbWU9PT0nY2M6Ok5pbmVQYXRjaExheWVySW1wbCcpe2NvbnRpbnVlO30KY29uc3QgbGF5ZXJRdWFkPWxheWVyLmxheWVyUXVhZC5jbG9uZSgpO2lmKGxheWVyLnVzaW5nR3B1UmFzdGVyaXphdGlvbil7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtsYXllclF1YWQuYm9yZGVyV2lkdGg9Mi4wKnBpeGVsUmF0aW87bGF5ZXJRdWFkLmJvcmRlckNvbG9yPSdyZ2JhKDE1NCwyMDUsNTAsMC43NSknO31lbHNle2xheWVyUXVhZC5ib3JkZXJDb2xvcj0ncmdiYSgwLDAsMCwwLjc1KSc7fQpsYXllclF1YWQuc3RhY2tpbmdHcm91cElkPW5leHRTdGFja2luZ0dyb3VwSWQrKztsYXllclF1YWQuc2VsZWN0aW9uVG9TZXRJZkNsaWNrZWQ9bmV3IGNjLkxheWVyU2VsZWN0aW9uKGxheWVyKTtsYXllclF1YWQubGF5ZXI9bGF5ZXI7aWYodGhpcy5zaG93T3RoZXJMYXllcnMmJnRoaXMuc2VsZWN0ZWRMYXllcj09PWxheWVyKXtsYXllclF1YWQudXBwZXJCb3JkZXJDb2xvcj0ncmdiKDE1NiwxODksNDUpJzt9CmlmKHRoaXMuc2hvd0FuaW1hdGlvbkJvdW5kcyl7dGhpcy5hcHBlbmRBbmltYXRpb25RdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKTt9CnRoaXMuYXBwZW5kSW1hZ2VRdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKTtxdWFkcy5wdXNoKGxheWVyUXVhZCk7aWYodGhpcy5zaG93SW52YWxpZGF0aW9ucyl7dGhpcy5hcHBlbmRJbnZhbGlkYXRpb25RdWFkc18ocXVhZHMsbGF5ZXIsbGF5ZXJRdWFkKTt9CmlmKHRoaXMuc2hvd1VucmVjb3JkZWRSZWdpb24pe3RoaXMuYXBwZW5kVW5yZWNvcmRlZFJlZ2lvblF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQpO30KaWYodGhpcy5zaG93Qm90dGxlbmVja3Mpe3RoaXMuYXBwZW5kQm90dGxlbmVja1F1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQsbGF5ZXJRdWFkLnN0YWNraW5nR3JvdXBJZCk7fQppZih0aGlzLnNob3dMYXlvdXRSZWN0cyl7dGhpcy5hcHBlbmRMYXlvdXRSZWN0UXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCk7fQppZih0aGlzLmhvd1RvU2hvd1RpbGVzPT09J2NvdmVyYWdlJyl7dGhpcy5hcHBlbmRUaWxlQ292ZXJhZ2VSZWN0UXVhZHNfKHF1YWRzLGxheWVyLGxheWVyUXVhZCx0aGlzLnRpbGVIZWF0bWFwVHlwZSk7fWVsc2UgaWYodGhpcy5ob3dUb1Nob3dUaWxlcyE9PSdub25lJyl7dGhpcy5hcHBlbmRUaWxlc1dpdGhTY2FsZVF1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQsdGhpcy5ob3dUb1Nob3dUaWxlcyx0aGlzLnRpbGVIZWF0bWFwVHlwZSk7fQpsZXQgaGlnaGxpZ2h0cztoaWdobGlnaHRzPWV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZFtsYXllci5sYXllcklkXTtpZihoaWdobGlnaHRzKXt0aGlzLmFwcGVuZEhpZ2hsaWdodFF1YWRzRm9yTGF5ZXJfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxoaWdobGlnaHRzKTt9CmhpZ2hsaWdodHM9c2VsZWN0aW9uSGlnaGxpZ2h0c0J5TGF5ZXJJZFtsYXllci5sYXllcklkXTtpZihoaWdobGlnaHRzKXt0aGlzLmFwcGVuZEhpZ2hsaWdodFF1YWRzRm9yTGF5ZXJfKHF1YWRzLGxheWVyLGxheWVyUXVhZCxoaWdobGlnaHRzKTt9fQp0aGlzLmxheWVyVHJlZUltcGwuaXRlckxheWVycyhmdW5jdGlvbihsYXllcixkZXB0aCxpc01hc2ssaXNSZXBsaWNhKXtpZighdGhpcy5zaG93T3RoZXJMYXllcnMmJnRoaXMuc2VsZWN0ZWRMYXllciE9PWxheWVyKXJldHVybjtpZihhbHJlYWR5VmlzaXRlZExheWVySWRzW2xheWVyLmxheWVySWRdKXJldHVybjtjb25zdCBsYXllclF1YWQ9bGF5ZXIubGF5ZXJRdWFkO2NvbnN0IHN0YWNraW5nR3JvdXBJZD1uZXh0U3RhY2tpbmdHcm91cElkKys7aWYodGhpcy5zaG93Qm90dGxlbmVja3Mpe3RoaXMuYXBwZW5kQm90dGxlbmVja1F1YWRzXyhxdWFkcyxsYXllcixsYXllclF1YWQsc3RhY2tpbmdHcm91cElkKTt9fSx0aGlzKTtjb25zdCB0cmFjZWRJbnB1dExhdGVuY2llcz10aGlzLmxheWVyVHJlZUltcGwudHJhY2VkSW5wdXRMYXRlbmNpZXM7aWYodGhpcy5zaG93SW5wdXRFdmVudHMmJnRyYWNlZElucHV0TGF0ZW5jaWVzKXtmb3IobGV0IGk9MDtpPHRyYWNlZElucHV0TGF0ZW5jaWVzLmxlbmd0aDtpKyspe2NvbnN0IGNvb3JkaW5hdGVzQXJyYXk9dHJhY2VkSW5wdXRMYXRlbmNpZXNbaV0uYXJncy5kYXRhLmNvb3JkaW5hdGVzO2ZvcihsZXQgaj0wO2o8Y29vcmRpbmF0ZXNBcnJheS5sZW5ndGg7aisrKXtjb25zdCBpbnB1dFF1YWQ9dHIuYi5tYXRoLlF1YWQuZnJvbVhZV0goY29vcmRpbmF0ZXNBcnJheVtqXS54LTI1LGNvb3JkaW5hdGVzQXJyYXlbal0ueS0yNSw1MCw1MCk7aW5wdXRRdWFkLmJvcmRlckNvbG9yPSdyZ2JhKDAsIDAsIDAsIDApJztpbnB1dFF1YWQuaW1hZ2VEYXRhPXRoaXMuaW5wdXRFdmVudEltYWdlRGF0YV87cXVhZHMucHVzaChpbnB1dFF1YWQpO319fQpyZXR1cm4gcXVhZHM7fSx1cGRhdGVJbmZvQmFyXyhpbmZvQmFyTWVzc2FnZXMpe2lmKGluZm9CYXJNZXNzYWdlcy5sZW5ndGgpe3RoaXMuaW5mb0Jhcl8ucmVtb3ZlQWxsQnV0dG9ucygpO3RoaXMuaW5mb0Jhcl8ubWVzc2FnZT0nU29tZSBwcm9ibGVtcyB3ZXJlIGVuY291bnRlcmVkLi4uJzt0aGlzLmluZm9CYXJfLmFkZEJ1dHRvbignTW9yZSBpbmZvLi4uJyxmdW5jdGlvbihlKXtjb25zdCBvdmVybGF5PW5ldyB0ci51aS5iLk92ZXJsYXkoKTtQb2x5bWVyLmRvbShvdmVybGF5KS50ZXh0Q29udGVudD0nJztpbmZvQmFyTWVzc2FnZXMuZm9yRWFjaChmdW5jdGlvbihtZXNzYWdlKXtjb25zdCB0aXRsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdoMycpO1BvbHltZXIuZG9tKHRpdGxlKS50ZXh0Q29udGVudD1tZXNzYWdlLmhlYWRlcjtjb25zdCBkZXRhaWxzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKGRldGFpbHMpLnRleHRDb250ZW50PW1lc3NhZ2UuZGV0YWlscztQb2x5bWVyLmRvbShvdmVybGF5KS5hcHBlbmRDaGlsZCh0aXRsZSk7UG9seW1lci5kb20ob3ZlcmxheSkuYXBwZW5kQ2hpbGQoZGV0YWlscyk7fSk7b3ZlcmxheS52aXNpYmxlPXRydWU7ZS5zdG9wUHJvcGFnYXRpb24oKTtyZXR1cm4gZmFsc2U7fSk7dGhpcy5pbmZvQmFyXy52aXNpYmxlPXRydWU7fWVsc2V7dGhpcy5pbmZvQmFyXy5yZW1vdmVBbGxCdXR0b25zKCk7dGhpcy5pbmZvQmFyXy5tZXNzYWdlPScnO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT1mYWxzZTt9fSxnZXRXaGF0UmFzdGVyaXplZF8oKXtjb25zdCBsdGhpPXRoaXMubGF5ZXJUcmVlSW1wbF8ubGF5ZXJUcmVlSG9zdEltcGw7Y29uc3QgcmVuZGVyUHJvY2Vzcz1sdGhpLm9iamVjdEluc3RhbmNlLnBhcmVudDtjb25zdCB0YXNrcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgcmVuZGVyUHJvY2Vzcy5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5TbGljZSkpY29udGludWU7Y29uc3QgdGlsZT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKGV2ZW50KTtpZih0aWxlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2lmKHRpbGUuY29udGFpbmluZ1NuYXBzaG90PT09bHRoaSl7dGFza3MucHVzaChldmVudCk7fX0KcmV0dXJuIHRhc2tzO30sdXBkYXRlV2hhdFJhc3Rlcml6ZWRMaW5rU3RhdGVfKCl7Y29uc3QgdGFza3M9dGhpcy5nZXRXaGF0UmFzdGVyaXplZF8oKTtpZih0YXNrcy5sZW5ndGgpe1BvbHltZXIuZG9tKHRoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXykudGV4dENvbnRlbnQ9dGFza3MubGVuZ3RoKycgcmFzdGVyIHRhc2tzJzt0aGlzLndoYXRSYXN0ZXJpemVkTGlua18uc3R5bGUuZGlzcGxheT0nJzt9ZWxzZXtQb2x5bWVyLmRvbSh0aGlzLndoYXRSYXN0ZXJpemVkTGlua18pLnRleHRDb250ZW50PScnO3RoaXMud2hhdFJhc3Rlcml6ZWRMaW5rXy5zdHlsZS5kaXNwbGF5PSdub25lJzt9fSxnZXRXaGF0UmFzdGVyaXplZEV2ZW50U2V0Xygpe3JldHVybiBuZXcgdHIubW9kZWwuRXZlbnRTZXQodGhpcy5nZXRXaGF0UmFzdGVyaXplZF8oKSk7fX07cmV0dXJue0xheWVyVHJlZVF1YWRTdGFja1ZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IGNvbnN0YW50cz10ci5lLmNjLmNvbnN0YW50cztjb25zdCBMYXllclZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLWxheWVyLXZpZXcnKTtMYXllclZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5zdHlsZS5mbGV4RGlyZWN0aW9uPSdjb2x1bW4nO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJUcmVlUXVhZFN0YWNrVmlldygpO3RoaXMuZHJhZ0Jhcl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO3RoaXMuYW5hbHlzaXNFbF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY2MtbGF5ZXItdmlldy1hbmFseXNpcycpO3RoaXMuYW5hbHlzaXNFbF8uc3R5bGUuZmxleEdyb3c9MDt0aGlzLmFuYWx5c2lzRWxfLnN0eWxlLmZsZXhTaHJpbms9MDt0aGlzLmFuYWx5c2lzRWxfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5hbmFseXNpc0VsXy5zdHlsZS5oZWlnaHQ9JzE1MHB4Jzt0aGlzLmFuYWx5c2lzRWxfLnN0eWxlLm92ZXJmbG93PSdhdXRvJzt0aGlzLmFuYWx5c2lzRWxfLmFkZEV2ZW50TGlzdGVuZXIoJ3JlcXVlc3RTZWxlY3Rpb25DaGFuZ2UnLHRoaXMub25SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRnJvbUFuYWx5c2lzRWxfLmJpbmQodGhpcykpO3RoaXMuZHJhZ0Jhcl8udGFyZ2V0PXRoaXMuYW5hbHlzaXNFbF87UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5kcmFnQmFyXyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5hbmFseXNpc0VsXyk7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlJyxmdW5jdGlvbigpe3RoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld1NlbGVjdGlvbkNoYW5nZWRfKCk7fS5iaW5kKHRoaXMpKTt0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdTZWxlY3Rpb25DaGFuZ2VkXygpO30sZ2V0IGxheWVyVHJlZUltcGwoKXtyZXR1cm4gdGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5sYXllclRyZWVJbXBsO30sc2V0IGxheWVyVHJlZUltcGwobmV3VmFsdWUpe3JldHVybiB0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmxheWVyVHJlZUltcGw9bmV3VmFsdWU7fSxzZXQgaXNSZW5kZXJQYXNzUXVhZHMobmV3VmFsdWUpe3JldHVybiB0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLmlzUmVuZGVyUGFzc1F1YWRzPW5ld1ZhbHVlO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24obmV3VmFsdWUpe3RoaXMubGF5ZXJUcmVlUXVhZFN0YWNrVmlld18uc2VsZWN0aW9uPW5ld1ZhbHVlO30scmVnZW5lcmF0ZUNvbnRlbnQoKXt0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLnJlZ2VuZXJhdGVDb250ZW50KCk7fSxsYXllclRyZWVRdWFkU3RhY2tWaWV3U2VsZWN0aW9uQ2hhbmdlZF8oKXtjb25zdCBzZWxlY3Rpb249dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5zZWxlY3Rpb247aWYoc2VsZWN0aW9uKXt0aGlzLmRyYWdCYXJfLnN0eWxlLmRpc3BsYXk9Jyc7dGhpcy5hbmFseXNpc0VsXy5zdHlsZS5kaXNwbGF5PScnO1BvbHltZXIuZG9tKHRoaXMuYW5hbHlzaXNFbF8pLnRleHRDb250ZW50PScnO2NvbnN0IGxheWVyPXNlbGVjdGlvbi5sYXllcjtpZih0ci5lLmNjLlBpY3R1cmVTbmFwc2hvdC5DYW5EZWJ1Z1BpY3R1cmUoKSYmbGF5ZXImJmxheWVyLmFyZ3MmJmxheWVyLmFyZ3MucGljdHVyZXMmJmxheWVyLmFyZ3MucGljdHVyZXMubGVuZ3RoKXtQb2x5bWVyLmRvbSh0aGlzLmFuYWx5c2lzRWxfKS5hcHBlbmRDaGlsZCh0aGlzLmNyZWF0ZVBpY3R1cmVCdG5fKGxheWVyLmFyZ3MucGljdHVyZXMpKTt9CmNvbnN0IGFuYWx5c2lzPXNlbGVjdGlvbi5jcmVhdGVBbmFseXNpcygpO1BvbHltZXIuZG9tKHRoaXMuYW5hbHlzaXNFbF8pLmFwcGVuZENoaWxkKGFuYWx5c2lzKTtmb3IoY29uc3QgY2hpbGQgb2YgdGhpcy5hbmFseXNpc0VsXy5jaGlsZHJlbil7Y2hpbGQuc3R5bGUudXNlclNlbGVjdD0ndGV4dCc7fX1lbHNle3RoaXMuZHJhZ0Jhcl8uc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy5hbmFseXNpc0VsXy5zdHlsZS5kaXNwbGF5PSdub25lJztjb25zdCBhbmFseXNpcz1Qb2x5bWVyLmRvbSh0aGlzLmFuYWx5c2lzRWxfKS5maXJzdENoaWxkO2lmKGFuYWx5c2lzKXtQb2x5bWVyLmRvbSh0aGlzLmFuYWx5c2lzRWxfKS5yZW1vdmVDaGlsZChhbmFseXNpcyk7fQp0aGlzLmxheWVyVHJlZVF1YWRTdGFja1ZpZXdfLnN0eWxlLmhlaWdodD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzKS5oZWlnaHQ7fQp0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnc2VsZWN0aW9uLWNoYW5nZScpO30sY3JlYXRlUGljdHVyZUJ0bl8ocGljdHVyZXMpe2lmKCEocGljdHVyZXMgaW5zdGFuY2VvZiBBcnJheSkpe3BpY3R1cmVzPVtwaWN0dXJlc107fQpjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmsuc2VsZWN0aW9uPWZ1bmN0aW9uKCl7Y29uc3QgbGF5ZXJlZFBpY3R1cmU9bmV3IHRyLmUuY2MuTGF5ZXJlZFBpY3R1cmUocGljdHVyZXMpO2NvbnN0IHNuYXBzaG90PW5ldyB0ci5lLmNjLlBpY3R1cmVTbmFwc2hvdChsYXllcmVkUGljdHVyZSk7c25hcHNob3QucGljdHVyZT1sYXllcmVkUGljdHVyZTtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7c2VsZWN0aW9uLnB1c2goc25hcHNob3QpO3JldHVybiBzZWxlY3Rpb247fTtQb2x5bWVyLmRvbShsaW5rKS50ZXh0Q29udGVudD0nVmlldyBpbiBQaWN0dXJlIERlYnVnZ2VyJztyZXR1cm4gbGluazt9LG9uUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUZyb21BbmFseXNpc0VsXyhlKXtpZighKGUuc2VsZWN0aW9uIGluc3RhbmNlb2YgdHIudWkuZS5jaHJvbWUuY2MuU2VsZWN0aW9uKSl7cmV0dXJuO30KZS5zdG9wUHJvcGFnYXRpb24oKTt0aGlzLnNlbGVjdGlvbj1lLnNlbGVjdGlvbjt9LGdldCBleHRyYUhpZ2hsaWdodHNCeUxheWVySWQoKXtyZXR1cm4gdGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7fSxzZXQgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZCl7dGhpcy5sYXllclRyZWVRdWFkU3RhY2tWaWV3Xy5leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ9ZXh0cmFIaWdobGlnaHRzQnlMYXllcklkO319O3JldHVybntMYXllclZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IExheWVyVHJlZUhvc3RJbXBsU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1jYy1sYXllci10cmVlLWhvc3QtaW1wbC1zbmFwc2hvdC12aWV3Jyx0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcpO0xheWVyVHJlZUhvc3RJbXBsU25hcHNob3RWaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5wcm90b3R5cGUsZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0ci11aS1lLWNocm9tZS1jYy1sdGhpLXMtdmlldycpO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5mbGV4RGlyZWN0aW9uPSdyb3cnO3RoaXMuc3R5bGUuZmxleEdyb3c9MTt0aGlzLnN0eWxlLmZsZXhTaHJpbms9MTt0aGlzLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5zdHlsZS5taW5XaWR0aD0wO3RoaXMuc2VsZWN0aW9uXz11bmRlZmluZWQ7dGhpcy5sYXllclBpY2tlcl89bmV3IHRyLnVpLmUuY2hyb21lLmNjLkxheWVyUGlja2VyKCk7dGhpcy5sYXllclBpY2tlcl8uc3R5bGUuZmxleEdyb3c9MDt0aGlzLmxheWVyUGlja2VyXy5zdHlsZS5mbGV4U2hyaW5rPTA7dGhpcy5sYXllclBpY2tlcl8uc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLmxheWVyUGlja2VyXy5zdHlsZS5taW5XaWR0aD0nMjAwcHgnO3RoaXMubGF5ZXJQaWNrZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2UnLHRoaXMub25MYXllclBpY2tlclNlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcykpO3RoaXMubGF5ZXJWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJWaWV3KCk7dGhpcy5sYXllclZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2UnLHRoaXMub25MYXllclZpZXdTZWxlY3Rpb25DaGFuZ2VkXy5iaW5kKHRoaXMpKTt0aGlzLmxheWVyVmlld18uc3R5bGUuZmxleEdyb3c9MTt0aGlzLmxheWVyVmlld18uc3R5bGUuZmxleFNocmluaz0xO3RoaXMubGF5ZXJWaWV3Xy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMubGF5ZXJWaWV3Xy5zdHlsZS5taW5XaWR0aD0wO3RoaXMuZHJhZ0hhbmRsZV89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO3RoaXMuZHJhZ0hhbmRsZV8uc3R5bGUuZmxleEdyb3c9MDt0aGlzLmRyYWdIYW5kbGVfLnN0eWxlLmZsZXhTaHJpbms9MDt0aGlzLmRyYWdIYW5kbGVfLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5kcmFnSGFuZGxlXy5ob3Jpem9udGFsPWZhbHNlO3RoaXMuZHJhZ0hhbmRsZV8udGFyZ2V0PXRoaXMubGF5ZXJQaWNrZXJfO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMubGF5ZXJQaWNrZXJfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmRyYWdIYW5kbGVfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmxheWVyVmlld18pO3RoaXMub25MYXllclZpZXdTZWxlY3Rpb25DaGFuZ2VkXygpO3RoaXMub25MYXllclBpY2tlclNlbGVjdGlvbkNoYW5nZWRfKCk7fSxnZXQgb2JqZWN0U25hcHNob3QoKXtyZXR1cm4gdGhpcy5vYmplY3RTbmFwc2hvdF87fSxzZXQgb2JqZWN0U25hcHNob3Qob2JqZWN0U25hcHNob3Qpe3RoaXMub2JqZWN0U25hcHNob3RfPW9iamVjdFNuYXBzaG90O2NvbnN0IGx0aGk9dGhpcy5vYmplY3RTbmFwc2hvdDtsZXQgbGF5ZXJUcmVlSW1wbDtpZihsdGhpKXtsYXllclRyZWVJbXBsPWx0aGkuZ2V0VHJlZSh0aGlzLmxheWVyUGlja2VyXy53aGljaFRyZWUpO30KdGhpcy5sYXllclBpY2tlcl8ubHRoaVNuYXBzaG90PWx0aGk7dGhpcy5sYXllclZpZXdfLmxheWVyVHJlZUltcGw9bGF5ZXJUcmVlSW1wbDt0aGlzLmxheWVyVmlld18ucmVnZW5lcmF0ZUNvbnRlbnQoKTtpZighdGhpcy5zZWxlY3Rpb25fKXJldHVybjt0aGlzLnNlbGVjdGlvbj10aGlzLnNlbGVjdGlvbl8uZmluZEVxdWl2YWxlbnQobHRoaSk7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZih0aGlzLnNlbGVjdGlvbl89PT1zZWxlY3Rpb24pcmV0dXJuO3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy5sYXllclBpY2tlcl8uc2VsZWN0aW9uPXNlbGVjdGlvbjt0aGlzLmxheWVyVmlld18uc2VsZWN0aW9uPXNlbGVjdGlvbjt0ci5iLmRpc3BhdGNoU2ltcGxlRXZlbnQodGhpcywnY2Mtc2VsZWN0aW9uLWNoYW5nZScpO30sb25MYXllclBpY2tlclNlbGVjdGlvbkNoYW5nZWRfKCl7dGhpcy5zZWxlY3Rpb25fPXRoaXMubGF5ZXJQaWNrZXJfLnNlbGVjdGlvbjt0aGlzLmxheWVyVmlld18uc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uO3RoaXMubGF5ZXJWaWV3Xy5sYXllclRyZWVJbXBsPXRoaXMubGF5ZXJQaWNrZXJfLmxheWVyVHJlZUltcGw7dGhpcy5sYXllclZpZXdfLmlzUmVuZGVyUGFzc1F1YWRzPXRoaXMubGF5ZXJQaWNrZXJfLmlzUmVuZGVyUGFzc1F1YWRzO3RoaXMubGF5ZXJWaWV3Xy5yZWdlbmVyYXRlQ29udGVudCgpO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdjYy1zZWxlY3Rpb24tY2hhbmdlJyk7fSxvbkxheWVyVmlld1NlbGVjdGlvbkNoYW5nZWRfKCl7dGhpcy5zZWxlY3Rpb25fPXRoaXMubGF5ZXJWaWV3Xy5zZWxlY3Rpb247dGhpcy5sYXllclBpY2tlcl8uc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdjYy1zZWxlY3Rpb24tY2hhbmdlJyk7fSxnZXQgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKCl7cmV0dXJuIHRoaXMubGF5ZXJWaWV3Xy5leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7fSxzZXQgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKGV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZCl7dGhpcy5sYXllclZpZXdfLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZD1leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ7fX07dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnJlZ2lzdGVyKExheWVyVHJlZUhvc3RJbXBsU25hcHNob3RWaWV3LHt0eXBlTmFtZTonY2M6OkxheWVyVHJlZUhvc3RJbXBsJ30pO3JldHVybntMYXllclRyZWVIb3N0SW1wbFNuYXBzaG90Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgT1BTX1RJTUlOR19JVEVSQVRJT05TPTM7Y29uc3QgQ0hBUlRfUEFERElOR19MRUZUPTY1O2NvbnN0IENIQVJUX1BBRERJTkdfUklHSFQ9NDA7Y29uc3QgQVhJU19QQURESU5HX0xFRlQ9NjA7Y29uc3QgQVhJU19QQURESU5HX1JJR0hUPTM1O2NvbnN0IEFYSVNfUEFERElOR19UT1A9MjU7Y29uc3QgQVhJU19QQURESU5HX0JPVFRPTT00NTtjb25zdCBBWElTX0xBQkVMX1BBRERJTkc9NTtjb25zdCBBWElTX1RJQ0tfU0laRT0xMDtjb25zdCBMQUJFTF9QQURESU5HPTU7Y29uc3QgTEFCRUxfSU5URVJMRUFWRV9PRkZTRVQ9MTU7Y29uc3QgQkFSX1BBRERJTkc9NTtjb25zdCBWRVJUSUNBTF9USUNLUz01O2NvbnN0IEhVRV9DSEFSX0NPREVfQURKVVNUTUVOVD01Ljc7Y29uc3QgUGljdHVyZU9wc0NoYXJ0U3VtbWFyeVZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtb3BzLWNoYXJ0LXN1bW1hcnktdmlldycpO1BpY3R1cmVPcHNDaGFydFN1bW1hcnlWaWV3LnByb3RvdHlwZT17X19wcm90b19fOkhUTUxEaXZFbGVtZW50LnByb3RvdHlwZSxkZWNvcmF0ZSgpe3RoaXMuc3R5bGUuZmxleEdyb3c9MDt0aGlzLnN0eWxlLmZsZXhTaHJpbms9MDt0aGlzLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7dGhpcy5zdHlsZS5mb250U2l6ZT0wO3RoaXMuc3R5bGUubWFyZ2luPTA7dGhpcy5zdHlsZS5taW5IZWlnaHQ9JzIwMHB4Jzt0aGlzLnN0eWxlLm1pbldpZHRoPScyMDBweCc7dGhpcy5zdHlsZS5vdmVyZmxvdz0naGlkZGVuJzt0aGlzLnN0eWxlLnBhZGRpbmc9MDt0aGlzLnBpY3R1cmVfPXVuZGVmaW5lZDt0aGlzLnBpY3R1cmVEYXRhUHJvY2Vzc2VkXz1mYWxzZTt0aGlzLmNoYXJ0U2NhbGVfPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvO3RoaXMuY2hhcnRfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO3RoaXMuY2hhcnRDdHhfPXRoaXMuY2hhcnRfLmdldENvbnRleHQoJzJkJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5jaGFydF8pO3RoaXMub3BzVGltaW5nRGF0YV89W107dGhpcy5jaGFydFdpZHRoXz0wO3RoaXMuY2hhcnRIZWlnaHRfPTA7dGhpcy5yZXF1aXJlc1JlZHJhd189dHJ1ZTt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPW51bGw7dGhpcy5jaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uTW91c2VNb3ZlXy5iaW5kKHRoaXMpKTt0cnl7bmV3IFJlc2l6ZU9ic2VydmVyKHRoaXMub25SZXNpemVfLmJpbmQodGhpcykpLm9ic2VydmUodGhpcyk7fWNhdGNoKGUpe319LGdldCByZXF1aXJlc1JlZHJhdygpe3JldHVybiB0aGlzLnJlcXVpcmVzUmVkcmF3Xzt9LHNldCByZXF1aXJlc1JlZHJhdyhyZXF1aXJlc1JlZHJhdyl7dGhpcy5yZXF1aXJlc1JlZHJhd189cmVxdWlyZXNSZWRyYXc7fSxnZXQgcGljdHVyZSgpe3JldHVybiB0aGlzLnBpY3R1cmVfO30sc2V0IHBpY3R1cmUocGljdHVyZSl7dGhpcy5waWN0dXJlXz1waWN0dXJlO3RoaXMucGljdHVyZURhdGFQcm9jZXNzZWRfPWZhbHNlO2lmKFBvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5jb250YWlucygnaGlkZGVuJykpcmV0dXJuO3RoaXMucHJvY2Vzc1BpY3R1cmVEYXRhXygpO3RoaXMucmVxdWlyZXNSZWRyYXc9dHJ1ZTt0aGlzLnVwZGF0ZUNoYXJ0Q29udGVudHMoKTt9LGhpZGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdoaWRkZW4nKTt0aGlzLnN0eWxlLmRpc3BsYXk9J25vbmUnO30sc2hvdygpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5yZW1vdmUoJ2hpZGRlbicpO3RoaXMuc3R5bGUuZGlzcGxheT0nJztpZighdGhpcy5waWN0dXJlRGF0YVByb2Nlc3NlZF8pe3RoaXMucHJvY2Vzc1BpY3R1cmVEYXRhXygpO30KdGhpcy5yZXF1aXJlc1JlZHJhdz10cnVlO3RoaXMudXBkYXRlQ2hhcnRDb250ZW50cygpO30sb25Nb3VzZU1vdmVfKGUpe2NvbnN0IGxhc3RCYXJNb3VzZU92ZXJUYXJnZXQ9dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xzt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPW51bGw7Y29uc3QgeD1lLm9mZnNldFg7Y29uc3QgeT1lLm9mZnNldFk7Y29uc3QgY2hhcnRMZWZ0PUNIQVJUX1BBRERJTkdfTEVGVDtjb25zdCBjaGFydFJpZ2h0PXRoaXMuY2hhcnRXaWR0aF8tQ0hBUlRfUEFERElOR19SSUdIVDtjb25zdCBjaGFydFRvcD1BWElTX1BBRERJTkdfVE9QO2NvbnN0IGNoYXJ0Qm90dG9tPXRoaXMuY2hhcnRIZWlnaHRfLUFYSVNfUEFERElOR19CT1RUT007Y29uc3QgY2hhcnRJbm5lcldpZHRoPWNoYXJ0UmlnaHQtY2hhcnRMZWZ0O2lmKHg+Y2hhcnRMZWZ0JiZ4PGNoYXJ0UmlnaHQmJnk+Y2hhcnRUb3AmJnk8Y2hhcnRCb3R0b20pe3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89TWF0aC5mbG9vcigoeC1jaGFydExlZnQpL2NoYXJ0SW5uZXJXaWR0aCp0aGlzLm9wc1RpbWluZ0RhdGFfLmxlbmd0aCk7dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz10ci5iLm1hdGguY2xhbXAodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0XywwLHRoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoLTEpO30KaWYodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz09PWxhc3RCYXJNb3VzZU92ZXJUYXJnZXQpcmV0dXJuO3RoaXMuZHJhd0NoYXJ0Q29udGVudHNfKCk7fSxvblJlc2l6ZV8oKXt0aGlzLnJlcXVpcmVzUmVkcmF3PXRydWU7dGhpcy51cGRhdGVDaGFydENvbnRlbnRzKCk7fSx1cGRhdGVDaGFydENvbnRlbnRzKCl7aWYodGhpcy5yZXF1aXJlc1JlZHJhdyl7dGhpcy51cGRhdGVDaGFydERpbWVuc2lvbnNfKCk7fQp0aGlzLmRyYXdDaGFydENvbnRlbnRzXygpO30sdXBkYXRlQ2hhcnREaW1lbnNpb25zXygpe3RoaXMuY2hhcnRXaWR0aF89dGhpcy5vZmZzZXRXaWR0aDt0aGlzLmNoYXJ0SGVpZ2h0Xz10aGlzLm9mZnNldEhlaWdodDt0aGlzLmNoYXJ0Xy53aWR0aD10aGlzLmNoYXJ0V2lkdGhfKnRoaXMuY2hhcnRTY2FsZV87dGhpcy5jaGFydF8uaGVpZ2h0PXRoaXMuY2hhcnRIZWlnaHRfKnRoaXMuY2hhcnRTY2FsZV87dGhpcy5jaGFydF8uc3R5bGUud2lkdGg9dGhpcy5jaGFydFdpZHRoXysncHgnO3RoaXMuY2hhcnRfLnN0eWxlLmhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0XysncHgnO3RoaXMuY2hhcnRDdHhfLnNjYWxlKHRoaXMuY2hhcnRTY2FsZV8sdGhpcy5jaGFydFNjYWxlXyk7fSxwcm9jZXNzUGljdHVyZURhdGFfKCl7dGhpcy5yZXNldE9wc1RpbWluZ0RhdGFfKCk7dGhpcy5waWN0dXJlRGF0YVByb2Nlc3NlZF89dHJ1ZTtpZighdGhpcy5waWN0dXJlXylyZXR1cm47bGV0IG9wcz10aGlzLnBpY3R1cmVfLmdldE9wcygpO2lmKCFvcHMpcmV0dXJuO29wcz10aGlzLnBpY3R1cmVfLnRhZ09wc1dpdGhUaW1pbmdzKG9wcyk7aWYob3BzWzBdLmNtZF90aW1lPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLmNvbGxhcHNlT3BzVG9UaW1pbmdCdWNrZXRzXyhvcHMpO30sZHJhd0NoYXJ0Q29udGVudHNfKCl7dGhpcy5jbGVhckNoYXJ0Q29udGVudHNfKCk7aWYodGhpcy5vcHNUaW1pbmdEYXRhXy5sZW5ndGg9PT0wKXt0aGlzLnNob3dOb1RpbWluZ0RhdGFNZXNzYWdlXygpO3JldHVybjt9CnRoaXMuZHJhd0NoYXJ0QXhlc18oKTt0aGlzLmRyYXdCYXJzXygpO3RoaXMuZHJhd0xpbmVBdEJvdHRvbU9mQ2hhcnRfKCk7aWYodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz09PW51bGwpcmV0dXJuO3RoaXMuZHJhd1Rvb2x0aXBfKCk7fSxkcmF3TGluZUF0Qm90dG9tT2ZDaGFydF8oKXt0aGlzLmNoYXJ0Q3R4Xy5zdHJva2VTdHlsZT0nI0FBQSc7dGhpcy5jaGFydEN0eF8ubW92ZVRvKDAsdGhpcy5jaGFydEhlaWdodF8tMC41KTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8odGhpcy5jaGFydFdpZHRoXyx0aGlzLmNoYXJ0SGVpZ2h0Xy0wLjUpO3RoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO30sZHJhd1Rvb2x0aXBfKCl7Y29uc3QgdG9vbHRpcERhdGE9dGhpcy5vcHNUaW1pbmdEYXRhX1t0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfXTtjb25zdCB0b29sdGlwVGl0bGU9dG9vbHRpcERhdGEuY21kX3N0cmluZztjb25zdCB0b29sdGlwVGltZT10b29sdGlwRGF0YS5jbWRfdGltZS50b0ZpeGVkKDQpO2NvbnN0IHRvb2x0aXBXaWR0aD0xMTA7Y29uc3QgdG9vbHRpcEhlaWdodD00MDtjb25zdCBjaGFydElubmVyV2lkdGg9dGhpcy5jaGFydFdpZHRoXy1DSEFSVF9QQURESU5HX1JJR0hULQpDSEFSVF9QQURESU5HX0xFRlQ7Y29uc3QgYmFyV2lkdGg9Y2hhcnRJbm5lcldpZHRoL3RoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoO2NvbnN0IHRvb2x0aXBPZmZzZXQ9TWF0aC5yb3VuZCgodG9vbHRpcFdpZHRoLWJhcldpZHRoKSowLjUpO2NvbnN0IGxlZnQ9Q0hBUlRfUEFERElOR19MRUZUK3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF8qYmFyV2lkdGgtdG9vbHRpcE9mZnNldDtjb25zdCB0b3A9TWF0aC5yb3VuZCgodGhpcy5jaGFydEhlaWdodF8tdG9vbHRpcEhlaWdodCkqMC41KTt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8uc2hhZG93T2Zmc2V0WD0wO3RoaXMuY2hhcnRDdHhfLnNoYWRvd09mZnNldFk9NTt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dCbHVyPTQ7dGhpcy5jaGFydEN0eF8uc2hhZG93Q29sb3I9J3JnYmEoMCwwLDAsMC40KSc7dGhpcy5jaGFydEN0eF8uc3Ryb2tlU3R5bGU9JyM4ODgnO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nI0VFRSc7dGhpcy5jaGFydEN0eF8uZmlsbFJlY3QobGVmdCx0b3AsdG9vbHRpcFdpZHRoLHRvb2x0aXBIZWlnaHQpO3RoaXMuY2hhcnRDdHhfLnNoYWRvd0NvbG9yPSd0cmFuc3BhcmVudCc7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKDAuNSwwLjUpO3RoaXMuY2hhcnRDdHhfLnN0cm9rZVJlY3QobGVmdCx0b3AsdG9vbHRpcFdpZHRoLHRvb2x0aXBIZWlnaHQpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyMyMjInO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0ndG9wJzt0aGlzLmNoYXJ0Q3R4Xy5mb250PSc4MDAgMTJweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQodG9vbHRpcFRpdGxlLGxlZnQrOCx0b3ArOCk7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjNTU1Jzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J3RvcCc7dGhpcy5jaGFydEN0eF8uZm9udD0nNDAwIGl0YWxpYyAxMHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCgnVG90YWw6ICcrdG9vbHRpcFRpbWUrJ21zJyxsZWZ0KzgsdG9wKzIyKTt9LGRyYXdCYXJzXygpe2NvbnN0IGxlbj10aGlzLm9wc1RpbWluZ0RhdGFfLmxlbmd0aDtjb25zdCBtYXg9dGhpcy5vcHNUaW1pbmdEYXRhX1swXS5jbWRfdGltZTtjb25zdCBtaW49dGhpcy5vcHNUaW1pbmdEYXRhX1tsZW4tMV0uY21kX3RpbWU7Y29uc3Qgd2lkdGg9dGhpcy5jaGFydFdpZHRoXy1DSEFSVF9QQURESU5HX0xFRlQtQ0hBUlRfUEFERElOR19SSUdIVDtjb25zdCBoZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX1RPUC1BWElTX1BBRERJTkdfQk9UVE9NO2NvbnN0IGJhcldpZHRoPU1hdGguZmxvb3Iod2lkdGgvbGVuKTtsZXQgb3BEYXRhO2xldCBvcFRpbWluZztsZXQgb3BIZWlnaHQ7bGV0IG9wTGFiZWw7bGV0IGJhckxlZnQ7Zm9yKGxldCBiPTA7YjxsZW47YisrKXtvcERhdGE9dGhpcy5vcHNUaW1pbmdEYXRhX1tiXTtvcFRpbWluZz1vcERhdGEuY21kX3RpbWUvbWF4O29wSGVpZ2h0PU1hdGgucm91bmQoTWF0aC5tYXgoMSxvcFRpbWluZypoZWlnaHQpKTtvcExhYmVsPW9wRGF0YS5jbWRfc3RyaW5nO2JhckxlZnQ9Q0hBUlRfUEFERElOR19MRUZUK2IqYmFyV2lkdGg7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPXRoaXMuZ2V0T3BDb2xvcl8ob3BMYWJlbCk7dGhpcy5jaGFydEN0eF8uZmlsbFJlY3QoYmFyTGVmdCtCQVJfUEFERElORyxBWElTX1BBRERJTkdfVE9QKwpoZWlnaHQtb3BIZWlnaHQsYmFyV2lkdGgtMipCQVJfUEFERElORyxvcEhlaWdodCk7fX0sZ2V0T3BDb2xvcl8ob3BOYW1lKXtjb25zdCBjaGFyYWN0ZXJzPW9wTmFtZS5zcGxpdCgnJyk7Y29uc3QgaHVlPWNoYXJhY3RlcnMucmVkdWNlKHRoaXMucmVkdWNlTmFtZVRvSHVlLDApJTM2MDtyZXR1cm4naHNsKCcraHVlKycsIDMwJSwgNTAlKSc7fSxyZWR1Y2VOYW1lVG9IdWUocHJldmlvdXNWYWx1ZSxjdXJyZW50VmFsdWUsaW5kZXgsYXJyYXkpe3JldHVybiBNYXRoLnJvdW5kKHByZXZpb3VzVmFsdWUrY3VycmVudFZhbHVlLmNoYXJDb2RlQXQoMCkqSFVFX0NIQVJfQ09ERV9BREpVU1RNRU5UKTt9LGRyYXdDaGFydEF4ZXNfKCl7Y29uc3QgbGVuPXRoaXMub3BzVGltaW5nRGF0YV8ubGVuZ3RoO2NvbnN0IG1heD10aGlzLm9wc1RpbWluZ0RhdGFfWzBdLmNtZF90aW1lO2NvbnN0IG1pbj10aGlzLm9wc1RpbWluZ0RhdGFfW2xlbi0xXS5jbWRfdGltZTtjb25zdCB3aWR0aD10aGlzLmNoYXJ0V2lkdGhfLUFYSVNfUEFERElOR19MRUZULUFYSVNfUEFERElOR19SSUdIVDtjb25zdCBoZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX1RPUC1BWElTX1BBRERJTkdfQk9UVE9NO2NvbnN0IHRvdGFsQmFyV2lkdGg9dGhpcy5jaGFydFdpZHRoXy1DSEFSVF9QQURESU5HX0xFRlQtCkNIQVJUX1BBRERJTkdfUklHSFQ7Y29uc3QgYmFyV2lkdGg9TWF0aC5mbG9vcih0b3RhbEJhcldpZHRoL2xlbik7Y29uc3QgdGlja1lJbnRlcnZhbD1oZWlnaHQvKFZFUlRJQ0FMX1RJQ0tTLTEpO2xldCB0aWNrWVBvc2l0aW9uPTA7Y29uc3QgdGlja1ZhbEludGVydmFsPShtYXgtbWluKS8oVkVSVElDQUxfVElDS1MtMSk7bGV0IHRpY2tWYWw9MDt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyMzMzMnO3RoaXMuY2hhcnRDdHhfLnN0cm9rZVN0eWxlPScjNzc3Jzt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKDAuNSwwLjUpO3RoaXMuY2hhcnRDdHhfLnNhdmUoKTt0aGlzLmNoYXJ0Q3R4Xy50cmFuc2xhdGUoQVhJU19QQURESU5HX0xFRlQsQVhJU19QQURESU5HX1RPUCk7dGhpcy5jaGFydEN0eF8ubW92ZVRvKDAsMCk7dGhpcy5jaGFydEN0eF8ubGluZVRvKDAsaGVpZ2h0KTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8od2lkdGgsaGVpZ2h0KTt0aGlzLmNoYXJ0Q3R4Xy5mb250PScxMHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QWxpZ249J3JpZ2h0Jzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J21pZGRsZSc7Zm9yKGxldCB0PTA7dDxWRVJUSUNBTF9USUNLUzt0Kyspe3RpY2tZUG9zaXRpb249TWF0aC5yb3VuZCh0KnRpY2tZSW50ZXJ2YWwpO3RpY2tWYWw9KG1heC10KnRpY2tWYWxJbnRlcnZhbCkudG9GaXhlZCg0KTt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oMCx0aWNrWVBvc2l0aW9uKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8oLUFYSVNfVElDS19TSVpFLHRpY2tZUG9zaXRpb24pO3RoaXMuY2hhcnRDdHhfLmZpbGxUZXh0KHRpY2tWYWwsLUFYSVNfVElDS19TSVpFLUFYSVNfTEFCRUxfUEFERElORyx0aWNrWVBvc2l0aW9uKTt9CnRoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKENIQVJUX1BBRERJTkdfTEVGVCtNYXRoLnJvdW5kKGJhcldpZHRoKjAuNSksQVhJU19QQURESU5HX1RPUCtoZWlnaHQrTEFCRUxfUEFERElORyk7dGhpcy5jaGFydEN0eF8uZm9udD0nMTBweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8udGV4dEFsaWduPSdjZW50ZXInO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0ndG9wJztsZXQgbGFiZWxUaWNrTGVmdDtsZXQgbGFiZWxUaWNrQm90dG9tO2ZvcihsZXQgbD0wO2w8bGVuO2wrKyl7bGFiZWxUaWNrTGVmdD1NYXRoLnJvdW5kKGwqYmFyV2lkdGgpO2xhYmVsVGlja0JvdHRvbT1sJTIqTEFCRUxfSU5URVJMRUFWRV9PRkZTRVQ7dGhpcy5jaGFydEN0eF8uc2F2ZSgpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbyhsYWJlbFRpY2tMZWZ0LC1MQUJFTF9QQURESU5HKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8obGFiZWxUaWNrTGVmdCxsYWJlbFRpY2tCb3R0b20pO3RoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCh0aGlzLm9wc1RpbWluZ0RhdGFfW2xdLmNtZF9zdHJpbmcsbGFiZWxUaWNrTGVmdCxsYWJlbFRpY2tCb3R0b20pO30KdGhpcy5jaGFydEN0eF8ucmVzdG9yZSgpO3RoaXMuY2hhcnRDdHhfLnJlc3RvcmUoKTt9LGNsZWFyQ2hhcnRDb250ZW50c18oKXt0aGlzLmNoYXJ0Q3R4Xy5jbGVhclJlY3QoMCwwLHRoaXMuY2hhcnRXaWR0aF8sdGhpcy5jaGFydEhlaWdodF8pO30sc2hvd05vVGltaW5nRGF0YU1lc3NhZ2VfKCl7dGhpcy5jaGFydEN0eF8uZm9udD0nODAwIGl0YWxpYyAxNHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyMzMzMnO3RoaXMuY2hhcnRDdHhfLnRleHRBbGlnbj0nY2VudGVyJzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J21pZGRsZSc7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQoJ05vIHRpbWluZyBkYXRhIGF2YWlsYWJsZS4nLHRoaXMuY2hhcnRXaWR0aF8qMC41LHRoaXMuY2hhcnRIZWlnaHRfKjAuNSk7fSxjb2xsYXBzZU9wc1RvVGltaW5nQnVja2V0c18ob3BzKXtjb25zdCBvcHNUaW1pbmdEYXRhSW5kZXhIYXNoXz17fTtjb25zdCB0aW1pbmdEYXRhPXRoaXMub3BzVGltaW5nRGF0YV87bGV0IG9wO2xldCBvcEluZGV4O2ZvcihsZXQgaT0wO2k8b3BzLmxlbmd0aDtpKyspe29wPW9wc1tpXTtpZihvcC5jbWRfdGltZT09PXVuZGVmaW5lZCljb250aW51ZTtvcEluZGV4PW9wc1RpbWluZ0RhdGFJbmRleEhhc2hfW29wLmNtZF9zdHJpbmddfHxudWxsO2lmKG9wSW5kZXg9PT1udWxsKXt0aW1pbmdEYXRhLnB1c2goe2NtZF90aW1lOjAsY21kX3N0cmluZzpvcC5jbWRfc3RyaW5nfSk7b3BJbmRleD10aW1pbmdEYXRhLmxlbmd0aC0xO29wc1RpbWluZ0RhdGFJbmRleEhhc2hfW29wLmNtZF9zdHJpbmddPW9wSW5kZXg7fQp0aW1pbmdEYXRhW29wSW5kZXhdLmNtZF90aW1lKz1vcC5jbWRfdGltZTt9CnRpbWluZ0RhdGEuc29ydCh0aGlzLnNvcnRUaW1pbmdCdWNrZXRzQnlPcFRpbWVEZXNjZW5kaW5nXyk7dGhpcy5jb2xsYXBzZVRpbWluZ0J1Y2tldHNUb090aGVyXyg0KTt9LGNvbGxhcHNlVGltaW5nQnVja2V0c1RvT3RoZXJfKGNvdW50KXtjb25zdCB0aW1pbmdEYXRhPXRoaXMub3BzVGltaW5nRGF0YV87Y29uc3Qgb3RoZXJTb3VyY2U9dGltaW5nRGF0YS5zcGxpY2UoY291bnQsdGltaW5nRGF0YS5sZW5ndGgtY291bnQpO2xldCBvdGhlckRlc3RpbmF0aW9uPW51bGw7aWYoIW90aGVyU291cmNlLmxlbmd0aClyZXR1cm47dGltaW5nRGF0YS5wdXNoKHtjbWRfdGltZTowLGNtZF9zdHJpbmc6J090aGVyJ30pO290aGVyRGVzdGluYXRpb249dGltaW5nRGF0YVt0aW1pbmdEYXRhLmxlbmd0aC0xXTtmb3IobGV0IGk9MDtpPG90aGVyU291cmNlLmxlbmd0aDtpKyspe290aGVyRGVzdGluYXRpb24uY21kX3RpbWUrPW90aGVyU291cmNlW2ldLmNtZF90aW1lO319LHNvcnRUaW1pbmdCdWNrZXRzQnlPcFRpbWVEZXNjZW5kaW5nXyhhLGIpe3JldHVybiBiLmNtZF90aW1lLWEuY21kX3RpbWU7fSxyZXNldE9wc1RpbWluZ0RhdGFfKCl7dGhpcy5vcHNUaW1pbmdEYXRhXy5sZW5ndGg9MDt9fTtyZXR1cm57UGljdHVyZU9wc0NoYXJ0U3VtbWFyeVZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IEJBUl9QQURESU5HPTE7Y29uc3QgQkFSX1dJRFRIPTU7Y29uc3QgQ0hBUlRfUEFERElOR19MRUZUPTY1O2NvbnN0IENIQVJUX1BBRERJTkdfUklHSFQ9MzA7Y29uc3QgQ0hBUlRfUEFERElOR19CT1RUT009MzU7Y29uc3QgQ0hBUlRfUEFERElOR19UT1A9MjA7Y29uc3QgQVhJU19QQURESU5HX0xFRlQ9NTU7Y29uc3QgQVhJU19QQURESU5HX1JJR0hUPTMwO2NvbnN0IEFYSVNfUEFERElOR19CT1RUT009MzU7Y29uc3QgQVhJU19QQURESU5HX1RPUD0yMDtjb25zdCBBWElTX1RJQ0tfU0laRT01O2NvbnN0IEFYSVNfTEFCRUxfUEFERElORz01O2NvbnN0IFZFUlRJQ0FMX1RJQ0tTPTU7Y29uc3QgSFVFX0NIQVJfQ09ERV9BREpVU1RNRU5UPTUuNztjb25zdCBQaWN0dXJlT3BzQ2hhcnRWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1jYy1waWN0dXJlLW9wcy1jaGFydC12aWV3Jyk7UGljdHVyZU9wc0NoYXJ0Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXt0aGlzLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLnN0eWxlLmhlaWdodD0nMTgwcHgnO3RoaXMuc3R5bGUubWFyZ2luPTA7dGhpcy5zdHlsZS5wYWRkaW5nPTA7dGhpcy5zdHlsZS5wb3NpdGlvbj0ncmVsYXRpdmUnO3RoaXMucGljdHVyZV89dW5kZWZpbmVkO3RoaXMucGljdHVyZU9wc189dW5kZWZpbmVkO3RoaXMub3BDb3N0c189dW5kZWZpbmVkO3RoaXMuY2hhcnRTY2FsZV89d2luZG93LmRldmljZVBpeGVsUmF0aW87dGhpcy5jaGFydF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7dGhpcy5jaGFydEN0eF89dGhpcy5jaGFydF8uZ2V0Q29udGV4dCgnMmQnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPXVuZGVmaW5lZDt0aGlzLmNoYXJ0V2lkdGhfPTA7dGhpcy5jaGFydEhlaWdodF89MDt0aGlzLmRpbWVuc2lvbnNIYXZlQ2hhbmdlZF89dHJ1ZTt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPXVuZGVmaW5lZDt0aGlzLm5pbmV0eUZpZnRoUGVyY2VudGlsZUNvc3RfPTA7dGhpcy50b3RhbE9wQ29zdF89MDt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy5vbkNsaWNrXy5iaW5kKHRoaXMpKTt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcykpO3RyeXtuZXcgUmVzaXplT2JzZXJ2ZXIodGhpcy5vblJlc2l6ZV8uYmluZCh0aGlzKSkub2JzZXJ2ZSh0aGlzKTt9Y2F0Y2goZSl7fQp0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZV89ZmFsc2U7dGhpcy51c2VQZXJjZW50aWxlU2NhbGVDaGVja2JveF89dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCd1c2VQZXJjZW50aWxlU2NhbGUnLCdQaWN0dXJlT3BzQ2hhcnRWaWV3LnVzZVBlcmNlbnRpbGVTY2FsZScsZmFsc2UsJ0xpbWl0IHRvIDk1JS1pbGUnKTtQb2x5bWVyLmRvbSh0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZUNoZWNrYm94XykuY2xhc3NMaXN0LmFkZCgndXNlLXBlcmNlbnRpbGUtc2NhbGUnKTt0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZUNoZWNrYm94Xy5zdHlsZS5wb3NpdGlvbj0nYWJzb2x1dGUnO3RoaXMudXNlUGVyY2VudGlsZVNjYWxlQ2hlY2tib3hfLnN0eWxlLmxlZnQ9MDt0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZUNoZWNrYm94Xy5zdHlsZS50b3A9MDtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZUNoZWNrYm94Xyk7fSxnZXQgZGltZW5zaW9uc0hhdmVDaGFuZ2VkKCl7cmV0dXJuIHRoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkXzt9LHNldCBkaW1lbnNpb25zSGF2ZUNoYW5nZWQoZGltZW5zaW9uc0hhdmVDaGFuZ2VkKXt0aGlzLmRpbWVuc2lvbnNIYXZlQ2hhbmdlZF89ZGltZW5zaW9uc0hhdmVDaGFuZ2VkO30sZ2V0IHVzZVBlcmNlbnRpbGVTY2FsZSgpe3JldHVybiB0aGlzLnVzZVBlcmNlbnRpbGVTY2FsZV87fSxzZXQgdXNlUGVyY2VudGlsZVNjYWxlKHVzZVBlcmNlbnRpbGVTY2FsZSl7dGhpcy51c2VQZXJjZW50aWxlU2NhbGVfPXVzZVBlcmNlbnRpbGVTY2FsZTt0aGlzLmRyYXdDaGFydENvbnRlbnRzXygpO30sZ2V0IG51bU9wcygpe3JldHVybiB0aGlzLm9wQ29zdHNfLmxlbmd0aDt9LGdldCBzZWxlY3RlZE9wSW5kZXgoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZE9wSW5kZXhfO30sc2V0IHNlbGVjdGVkT3BJbmRleChzZWxlY3RlZE9wSW5kZXgpe2lmKHNlbGVjdGVkT3BJbmRleDwwKXRocm93IG5ldyBFcnJvcignSW52YWxpZCBpbmRleCcpO2lmKHNlbGVjdGVkT3BJbmRleD49dGhpcy5udW1PcHMpdGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIGluZGV4Jyk7dGhpcy5zZWxlY3RlZE9wSW5kZXhfPXNlbGVjdGVkT3BJbmRleDt9LGdldCBwaWN0dXJlKCl7cmV0dXJuIHRoaXMucGljdHVyZV87fSxzZXQgcGljdHVyZShwaWN0dXJlKXt0aGlzLnBpY3R1cmVfPXBpY3R1cmU7dGhpcy5waWN0dXJlT3BzXz1waWN0dXJlLnRhZ09wc1dpdGhUaW1pbmdzKHBpY3R1cmUuZ2V0T3BzKCkpO3RoaXMuY3VycmVudEJhck1vdXNlT3ZlclRhcmdldF89dW5kZWZpbmVkO3RoaXMucHJvY2Vzc1BpY3R1cmVEYXRhXygpO3RoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkPXRydWU7fSxwcm9jZXNzUGljdHVyZURhdGFfKCl7aWYodGhpcy5waWN0dXJlT3BzXz09PXVuZGVmaW5lZClyZXR1cm47bGV0IHRvdGFsT3BDb3N0PTA7dGhpcy5vcENvc3RzXz10aGlzLnBpY3R1cmVPcHNfLm1hcChmdW5jdGlvbihvcCl7dG90YWxPcENvc3QrPW9wLmNtZF90aW1lO3JldHVybiBvcC5jbWRfdGltZTt9KTt0aGlzLm9wQ29zdHNfLnNvcnQoKTtjb25zdCBuaW5ldHlGaWZ0aFBlcmNlbnRpbGVDb3N0SW5kZXg9TWF0aC5mbG9vcih0aGlzLm9wQ29zdHNfLmxlbmd0aCowLjk1KTt0aGlzLm5pbmV0eUZpZnRoUGVyY2VudGlsZUNvc3RfPXRoaXMub3BDb3N0c19bbmluZXR5RmlmdGhQZXJjZW50aWxlQ29zdEluZGV4XTt0aGlzLm1heENvc3RfPXRoaXMub3BDb3N0c19bdGhpcy5vcENvc3RzXy5sZW5ndGgtMV07dGhpcy50b3RhbE9wQ29zdF89dG90YWxPcENvc3Q7fSxleHRyYWN0QmFySW5kZXhfKGUpe2xldCBpbmRleD11bmRlZmluZWQ7aWYodGhpcy5waWN0dXJlT3BzXz09PXVuZGVmaW5lZHx8dGhpcy5waWN0dXJlT3BzXy5sZW5ndGg9PT0wKXtyZXR1cm4gaW5kZXg7fQpjb25zdCB4PWUub2Zmc2V0WDtjb25zdCB5PWUub2Zmc2V0WTtjb25zdCB0b3RhbEJhcldpZHRoPShCQVJfV0lEVEgrQkFSX1BBRERJTkcpKnRoaXMucGljdHVyZU9wc18ubGVuZ3RoO2NvbnN0IGNoYXJ0TGVmdD1DSEFSVF9QQURESU5HX0xFRlQ7Y29uc3QgY2hhcnRUb3A9MDtjb25zdCBjaGFydEJvdHRvbT10aGlzLmNoYXJ0SGVpZ2h0Xy1DSEFSVF9QQURESU5HX0JPVFRPTTtjb25zdCBjaGFydFJpZ2h0PWNoYXJ0TGVmdCt0b3RhbEJhcldpZHRoO2lmKHg8Y2hhcnRMZWZ0fHx4PmNoYXJ0UmlnaHR8fHk8Y2hhcnRUb3B8fHk+Y2hhcnRCb3R0b20pe3JldHVybiBpbmRleDt9CmluZGV4PU1hdGguZmxvb3IoKHgtY2hhcnRMZWZ0KS90b3RhbEJhcldpZHRoKnRoaXMucGljdHVyZU9wc18ubGVuZ3RoKTtpbmRleD10ci5iLm1hdGguY2xhbXAoaW5kZXgsMCx0aGlzLnBpY3R1cmVPcHNfLmxlbmd0aC0xKTtyZXR1cm4gaW5kZXg7fSxvbkNsaWNrXyhlKXtjb25zdCBiYXJDbGlja2VkPXRoaXMuZXh0cmFjdEJhckluZGV4XyhlKTtpZihiYXJDbGlja2VkPT09dW5kZWZpbmVkKXJldHVybjtpZihiYXJDbGlja2VkPT09dGhpcy5zZWxlY3RlZE9wSW5kZXgpe3RoaXMuc2VsZWN0ZWRPcEluZGV4PXVuZGVmaW5lZDt9ZWxzZXt0aGlzLnNlbGVjdGVkT3BJbmRleD1iYXJDbGlja2VkO30KZS5wcmV2ZW50RGVmYXVsdCgpO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdzZWxlY3Rpb24tY2hhbmdlZCcsZmFsc2UpO30sb25Nb3VzZU1vdmVfKGUpe2NvbnN0IGxhc3RCYXJNb3VzZU92ZXJUYXJnZXQ9dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xzt0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPXRoaXMuZXh0cmFjdEJhckluZGV4XyhlKTtpZih0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfPT09bGFzdEJhck1vdXNlT3ZlclRhcmdldCl7cmV0dXJuO30KdGhpcy5kcmF3Q2hhcnRDb250ZW50c18oKTt9LG9uUmVzaXplXygpe3RoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkPXRydWU7dGhpcy51cGRhdGVDaGFydENvbnRlbnRzKCk7fSxzY3JvbGxTZWxlY3RlZEl0ZW1JbnRvVmlld0lmTmVjZXNzYXJ5KCl7aWYodGhpcy5zZWxlY3RlZE9wSW5kZXg9PT11bmRlZmluZWQpe3JldHVybjt9CmNvbnN0IHdpZHRoPXRoaXMub2Zmc2V0V2lkdGg7Y29uc3QgbGVmdD10aGlzLnNjcm9sbExlZnQ7Y29uc3QgcmlnaHQ9bGVmdCt3aWR0aDtjb25zdCB0YXJnZXRMZWZ0PUNIQVJUX1BBRERJTkdfTEVGVCsKKEJBUl9XSURUSCtCQVJfUEFERElORykqdGhpcy5zZWxlY3RlZE9wSW5kZXg7aWYodGFyZ2V0TGVmdD5sZWZ0JiZ0YXJnZXRMZWZ0PHJpZ2h0KXtyZXR1cm47fQp0aGlzLnNjcm9sbExlZnQ9KHRhcmdldExlZnQtd2lkdGgqMC41KTt9LHVwZGF0ZUNoYXJ0Q29udGVudHMoKXtpZih0aGlzLmRpbWVuc2lvbnNIYXZlQ2hhbmdlZCl7dGhpcy51cGRhdGVDaGFydERpbWVuc2lvbnNfKCk7fQp0aGlzLmRyYXdDaGFydENvbnRlbnRzXygpO30sdXBkYXRlQ2hhcnREaW1lbnNpb25zXygpe2lmKCF0aGlzLnBpY3R1cmVPcHNfKXJldHVybjtsZXQgd2lkdGg9Q0hBUlRfUEFERElOR19MRUZUK0NIQVJUX1BBRERJTkdfUklHSFQrCigoQkFSX1dJRFRIK0JBUl9QQURESU5HKSp0aGlzLnBpY3R1cmVPcHNfLmxlbmd0aCk7aWYod2lkdGg8dGhpcy5vZmZzZXRXaWR0aCl7d2lkdGg9dGhpcy5vZmZzZXRXaWR0aDt9CnRoaXMuY2hhcnRXaWR0aF89d2lkdGg7dGhpcy5jaGFydEhlaWdodF89dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7dGhpcy5jaGFydF8ud2lkdGg9dGhpcy5jaGFydFdpZHRoXyp0aGlzLmNoYXJ0U2NhbGVfO3RoaXMuY2hhcnRfLmhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0Xyp0aGlzLmNoYXJ0U2NhbGVfO3RoaXMuY2hhcnRfLnN0eWxlLndpZHRoPXRoaXMuY2hhcnRXaWR0aF8rJ3B4Jzt0aGlzLmNoYXJ0Xy5zdHlsZS5oZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8rJ3B4Jzt0aGlzLmNoYXJ0Q3R4Xy5zY2FsZSh0aGlzLmNoYXJ0U2NhbGVfLHRoaXMuY2hhcnRTY2FsZV8pO3RoaXMuZGltZW5zaW9uc0hhdmVDaGFuZ2VkPWZhbHNlO30sZHJhd0NoYXJ0Q29udGVudHNfKCl7dGhpcy5jbGVhckNoYXJ0Q29udGVudHNfKCk7aWYodGhpcy5waWN0dXJlT3BzXz09PXVuZGVmaW5lZHx8dGhpcy5waWN0dXJlT3BzXy5sZW5ndGg9PT0wfHx0aGlzLnBpY3R1cmVPcHNfWzBdLmNtZF90aW1lPT09dW5kZWZpbmVkKXt0aGlzLnNob3dOb1RpbWluZ0RhdGFNZXNzYWdlXygpO3JldHVybjt9CnRoaXMuZHJhd1NlbGVjdGlvbl8oKTt0aGlzLmRyYXdCYXJzXygpO3RoaXMuZHJhd0NoYXJ0QXhlc18oKTt0aGlzLmRyYXdMaW5lc0F0VGlja01hcmtzXygpO3RoaXMuZHJhd0xpbmVBdEJvdHRvbU9mQ2hhcnRfKCk7aWYodGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xz09PXVuZGVmaW5lZCl7cmV0dXJuO30KdGhpcy5kcmF3VG9vbHRpcF8oKTt9LGRyYXdTZWxlY3Rpb25fKCl7aWYodGhpcy5zZWxlY3RlZE9wSW5kZXg9PT11bmRlZmluZWQpe3JldHVybjt9CmNvbnN0IHdpZHRoPShCQVJfV0lEVEgrQkFSX1BBRERJTkcpKnRoaXMuc2VsZWN0ZWRPcEluZGV4O3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0ncmdiKDIyMywgMjM1LCAyMzApJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsUmVjdChDSEFSVF9QQURESU5HX0xFRlQsQ0hBUlRfUEFERElOR19UT1Asd2lkdGgsdGhpcy5jaGFydEhlaWdodF8tQ0hBUlRfUEFERElOR19UT1AtQ0hBUlRfUEFERElOR19CT1RUT00pO30sZHJhd0NoYXJ0QXhlc18oKXtjb25zdCBtaW49dGhpcy5vcENvc3RzX1swXTtjb25zdCBtYXg9dGhpcy5vcENvc3RzX1t0aGlzLm9wQ29zdHNfLmxlbmd0aC0xXTtjb25zdCBoZWlnaHQ9dGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX1RPUC1BWElTX1BBRERJTkdfQk9UVE9NO2NvbnN0IHRpY2tZSW50ZXJ2YWw9aGVpZ2h0LyhWRVJUSUNBTF9USUNLUy0xKTtsZXQgdGlja1lQb3NpdGlvbj0wO2NvbnN0IHRpY2tWYWxJbnRlcnZhbD0obWF4LW1pbikvKFZFUlRJQ0FMX1RJQ0tTLTEpO2xldCB0aWNrVmFsPTA7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjMzMzJzt0aGlzLmNoYXJ0Q3R4Xy5zdHJva2VTdHlsZT0nIzc3Nyc7dGhpcy5jaGFydEN0eF8uc2F2ZSgpO3RoaXMuY2hhcnRDdHhfLnRyYW5zbGF0ZSgwLjUsMC41KTt0aGlzLmNoYXJ0Q3R4Xy5iZWdpblBhdGgoKTt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oQVhJU19QQURESU5HX0xFRlQsQVhJU19QQURESU5HX1RPUCk7dGhpcy5jaGFydEN0eF8ubGluZVRvKEFYSVNfUEFERElOR19MRUZULHRoaXMuY2hhcnRIZWlnaHRfLQpBWElTX1BBRERJTkdfQk9UVE9NKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8odGhpcy5jaGFydFdpZHRoXy1BWElTX1BBRERJTkdfUklHSFQsdGhpcy5jaGFydEhlaWdodF8tQVhJU19QQURESU5HX0JPVFRPTSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7dGhpcy5jaGFydEN0eF8uY2xvc2VQYXRoKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKEFYSVNfUEFERElOR19MRUZULEFYSVNfUEFERElOR19UT1ApO3RoaXMuY2hhcnRDdHhfLmZvbnQ9JzEwcHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLnRleHRBbGlnbj0ncmlnaHQnO3RoaXMuY2hhcnRDdHhfLnRleHRCYXNlbGluZT0nbWlkZGxlJzt0aGlzLmNoYXJ0Q3R4Xy5iZWdpblBhdGgoKTtmb3IobGV0IHQ9MDt0PFZFUlRJQ0FMX1RJQ0tTO3QrKyl7dGlja1lQb3NpdGlvbj1NYXRoLnJvdW5kKHQqdGlja1lJbnRlcnZhbCk7dGlja1ZhbD0obWF4LXQqdGlja1ZhbEludGVydmFsKS50b0ZpeGVkKDQpO3RoaXMuY2hhcnRDdHhfLm1vdmVUbygwLHRpY2tZUG9zaXRpb24pO3RoaXMuY2hhcnRDdHhfLmxpbmVUbygtQVhJU19USUNLX1NJWkUsdGlja1lQb3NpdGlvbik7dGhpcy5jaGFydEN0eF8uZmlsbFRleHQodGlja1ZhbCwtQVhJU19USUNLX1NJWkUtQVhJU19MQUJFTF9QQURESU5HLHRpY2tZUG9zaXRpb24pO30KdGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7dGhpcy5jaGFydEN0eF8uY2xvc2VQYXRoKCk7dGhpcy5jaGFydEN0eF8ucmVzdG9yZSgpO30sZHJhd0xpbmVzQXRUaWNrTWFya3NfKCl7Y29uc3QgaGVpZ2h0PXRoaXMuY2hhcnRIZWlnaHRfLUFYSVNfUEFERElOR19UT1AtQVhJU19QQURESU5HX0JPVFRPTTtjb25zdCB3aWR0aD10aGlzLmNoYXJ0V2lkdGhfLUFYSVNfUEFERElOR19MRUZULUFYSVNfUEFERElOR19SSUdIVDtjb25zdCB0aWNrWUludGVydmFsPWhlaWdodC8oVkVSVElDQUxfVElDS1MtMSk7bGV0IHRpY2tZUG9zaXRpb249MDt0aGlzLmNoYXJ0Q3R4Xy5zYXZlKCk7dGhpcy5jaGFydEN0eF8udHJhbnNsYXRlKEFYSVNfUEFERElOR19MRUZUKzAuNSxBWElTX1BBRERJTkdfVE9QKzAuNSk7dGhpcy5jaGFydEN0eF8uYmVnaW5QYXRoKCk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlU3R5bGU9J3JnYmEoMCwwLDAsMC4wNSknO2ZvcihsZXQgdD0wO3Q8VkVSVElDQUxfVElDS1M7dCsrKXt0aWNrWVBvc2l0aW9uPU1hdGgucm91bmQodCp0aWNrWUludGVydmFsKTt0aGlzLmNoYXJ0Q3R4Xy5tb3ZlVG8oMCx0aWNrWVBvc2l0aW9uKTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8od2lkdGgsdGlja1lQb3NpdGlvbik7dGhpcy5jaGFydEN0eF8uc3Ryb2tlKCk7fQp0aGlzLmNoYXJ0Q3R4Xy5yZXN0b3JlKCk7dGhpcy5jaGFydEN0eF8uY2xvc2VQYXRoKCk7fSxkcmF3TGluZUF0Qm90dG9tT2ZDaGFydF8oKXt0aGlzLmNoYXJ0Q3R4Xy5zdHJva2VTdHlsZT0nI0FBQSc7dGhpcy5jaGFydEN0eF8uYmVnaW5QYXRoKCk7dGhpcy5jaGFydEN0eF8ubW92ZVRvKDAsdGhpcy5jaGFydEhlaWdodF8tMC41KTt0aGlzLmNoYXJ0Q3R4Xy5saW5lVG8odGhpcy5jaGFydFdpZHRoXyx0aGlzLmNoYXJ0SGVpZ2h0Xy0wLjUpO3RoaXMuY2hhcnRDdHhfLnN0cm9rZSgpO3RoaXMuY2hhcnRDdHhfLmNsb3NlUGF0aCgpO30sZHJhd1Rvb2x0aXBfKCl7Y29uc3QgdG9vbHRpcERhdGE9dGhpcy5waWN0dXJlT3BzX1t0aGlzLmN1cnJlbnRCYXJNb3VzZU92ZXJUYXJnZXRfXTtjb25zdCB0b29sdGlwVGl0bGU9dG9vbHRpcERhdGEuY21kX3N0cmluZztjb25zdCB0b29sdGlwVGltZT10b29sdGlwRGF0YS5jbWRfdGltZS50b0ZpeGVkKDQpO2NvbnN0IHRvb2xUaXBUaW1lUGVyY2VudGFnZT0oKHRvb2x0aXBEYXRhLmNtZF90aW1lL3RoaXMudG90YWxPcENvc3RfKSoxMDApLnRvRml4ZWQoMik7Y29uc3QgdG9vbHRpcFdpZHRoPTEyMDtjb25zdCB0b29sdGlwSGVpZ2h0PTQwO2NvbnN0IGNoYXJ0SW5uZXJXaWR0aD10aGlzLmNoYXJ0V2lkdGhfLUNIQVJUX1BBRERJTkdfUklHSFQtCkNIQVJUX1BBRERJTkdfTEVGVDtjb25zdCBiYXJXaWR0aD1CQVJfV0lEVEgrQkFSX1BBRERJTkc7Y29uc3QgdG9vbHRpcE9mZnNldD1NYXRoLnJvdW5kKCh0b29sdGlwV2lkdGgtYmFyV2lkdGgpKjAuNSk7Y29uc3QgbGVmdD1DSEFSVF9QQURESU5HX0xFRlQrdGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0XypiYXJXaWR0aC10b29sdGlwT2Zmc2V0O2NvbnN0IHRvcD1NYXRoLnJvdW5kKCh0aGlzLmNoYXJ0SGVpZ2h0Xy10b29sdGlwSGVpZ2h0KSowLjUpO3RoaXMuY2hhcnRDdHhfLnNhdmUoKTt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dPZmZzZXRYPTA7dGhpcy5jaGFydEN0eF8uc2hhZG93T2Zmc2V0WT01O3RoaXMuY2hhcnRDdHhfLnNoYWRvd0JsdXI9NDt0aGlzLmNoYXJ0Q3R4Xy5zaGFkb3dDb2xvcj0ncmdiYSgwLDAsMCwwLjQpJzt0aGlzLmNoYXJ0Q3R4Xy5zdHJva2VTdHlsZT0nIzg4OCc7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjRUVFJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsUmVjdChsZWZ0LHRvcCx0b29sdGlwV2lkdGgsdG9vbHRpcEhlaWdodCk7dGhpcy5jaGFydEN0eF8uc2hhZG93Q29sb3I9J3RyYW5zcGFyZW50Jzt0aGlzLmNoYXJ0Q3R4Xy50cmFuc2xhdGUoMC41LDAuNSk7dGhpcy5jaGFydEN0eF8uc3Ryb2tlUmVjdChsZWZ0LHRvcCx0b29sdGlwV2lkdGgsdG9vbHRpcEhlaWdodCk7dGhpcy5jaGFydEN0eF8ucmVzdG9yZSgpO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzIyMic7dGhpcy5jaGFydEN0eF8udGV4dEFsaWduPSdsZWZ0Jzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QmFzZWxpbmU9J3RvcCc7dGhpcy5jaGFydEN0eF8uZm9udD0nODAwIDEycHggQXJpYWwnO3RoaXMuY2hhcnRDdHhfLmZpbGxUZXh0KHRvb2x0aXBUaXRsZSxsZWZ0KzgsdG9wKzgpO3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT0nIzU1NSc7dGhpcy5jaGFydEN0eF8uZm9udD0nNDAwIGl0YWxpYyAxMHB4IEFyaWFsJzt0aGlzLmNoYXJ0Q3R4Xy5maWxsVGV4dCh0b29sdGlwVGltZSsnbXMgKCcrCnRvb2xUaXBUaW1lUGVyY2VudGFnZSsnJSknLGxlZnQrOCx0b3ArMjIpO30sZHJhd0JhcnNfKCl7bGV0IG9wO2xldCBvcENvbG9yPTA7bGV0IG9wSGVpZ2h0PTA7Y29uc3Qgb3BXaWR0aD1CQVJfV0lEVEgrQkFSX1BBRERJTkc7bGV0IG9wSG92ZXI9ZmFsc2U7Y29uc3QgYm90dG9tPXRoaXMuY2hhcnRIZWlnaHRfLUNIQVJUX1BBRERJTkdfQk9UVE9NO2NvbnN0IG1heEhlaWdodD10aGlzLmNoYXJ0SGVpZ2h0Xy1DSEFSVF9QQURESU5HX0JPVFRPTS0KQ0hBUlRfUEFERElOR19UT1A7bGV0IG1heFZhbHVlO2lmKHRoaXMudXNlUGVyY2VudGlsZVNjYWxlKXttYXhWYWx1ZT10aGlzLm5pbmV0eUZpZnRoUGVyY2VudGlsZUNvc3RfO31lbHNle21heFZhbHVlPXRoaXMubWF4Q29zdF87fQpmb3IobGV0IGI9MDtiPHRoaXMucGljdHVyZU9wc18ubGVuZ3RoO2IrKyl7b3A9dGhpcy5waWN0dXJlT3BzX1tiXTtvcEhlaWdodD1NYXRoLnJvdW5kKChvcC5jbWRfdGltZS9tYXhWYWx1ZSkqbWF4SGVpZ2h0KTtvcEhlaWdodD1NYXRoLm1heChvcEhlaWdodCwxKTtvcEhvdmVyPShiPT09dGhpcy5jdXJyZW50QmFyTW91c2VPdmVyVGFyZ2V0Xyk7b3BDb2xvcj10aGlzLmdldE9wQ29sb3JfKG9wLmNtZF9zdHJpbmcsb3BIb3Zlcik7aWYoYj09PXRoaXMuc2VsZWN0ZWRPcEluZGV4KXt0aGlzLmNoYXJ0Q3R4Xy5maWxsU3R5bGU9JyNGRkZGMDAnO31lbHNle3RoaXMuY2hhcnRDdHhfLmZpbGxTdHlsZT1vcENvbG9yO30KdGhpcy5jaGFydEN0eF8uZmlsbFJlY3QoQ0hBUlRfUEFERElOR19MRUZUK2Iqb3BXaWR0aCxib3R0b20tb3BIZWlnaHQsQkFSX1dJRFRILG9wSGVpZ2h0KTt9fSxnZXRPcENvbG9yXyhvcE5hbWUsaG92ZXIpe2NvbnN0IGNoYXJhY3RlcnM9b3BOYW1lLnNwbGl0KCcnKTtjb25zdCBodWU9Y2hhcmFjdGVycy5yZWR1Y2UodGhpcy5yZWR1Y2VOYW1lVG9IdWUsMCklMzYwO2NvbnN0IHNhdHVyYXRpb249MzA7Y29uc3QgbGlnaHRuZXNzPWhvdmVyPyc3NSUnOic1MCUnO3JldHVybidoc2woJytodWUrJywgJytzYXR1cmF0aW9uKyclLCAnK2xpZ2h0bmVzcysnJSknO30scmVkdWNlTmFtZVRvSHVlKHByZXZpb3VzVmFsdWUsY3VycmVudFZhbHVlLGluZGV4LGFycmF5KXtyZXR1cm4gTWF0aC5yb3VuZChwcmV2aW91c1ZhbHVlK2N1cnJlbnRWYWx1ZS5jaGFyQ29kZUF0KDApKkhVRV9DSEFSX0NPREVfQURKVVNUTUVOVCk7fSxjbGVhckNoYXJ0Q29udGVudHNfKCl7dGhpcy5jaGFydEN0eF8uY2xlYXJSZWN0KDAsMCx0aGlzLmNoYXJ0V2lkdGhfLHRoaXMuY2hhcnRIZWlnaHRfKTt9LHNob3dOb1RpbWluZ0RhdGFNZXNzYWdlXygpe3RoaXMuY2hhcnRDdHhfLmZvbnQ9JzgwMCBpdGFsaWMgMTRweCBBcmlhbCc7dGhpcy5jaGFydEN0eF8uZmlsbFN0eWxlPScjMzMzJzt0aGlzLmNoYXJ0Q3R4Xy50ZXh0QWxpZ249J2NlbnRlcic7dGhpcy5jaGFydEN0eF8udGV4dEJhc2VsaW5lPSdtaWRkbGUnO3RoaXMuY2hhcnRDdHhfLmZpbGxUZXh0KCdObyB0aW1pbmcgZGF0YSBhdmFpbGFibGUuJyx0aGlzLmNoYXJ0V2lkdGhfKjAuNSx0aGlzLmNoYXJ0SGVpZ2h0XyowLjUpO319O3JldHVybntQaWN0dXJlT3BzQ2hhcnRWaWV3LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmNocm9tZS5jYycsZnVuY3Rpb24oKXtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5fY3VycmVudFNjcmlwdC5vd25lckRvY3VtZW50O2NvbnN0IFBpY3R1cmVEZWJ1Z2dlcj10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1kZWJ1Z2dlcicpO1BpY3R1cmVEZWJ1Z2dlci5wcm90b3R5cGU9e19fcHJvdG9fXzpIVE1MRGl2RWxlbWVudC5wcm90b3R5cGUsZGVjb3JhdGUoKXtjb25zdCBub2RlPXRyLnVpLmIuaW5zdGFudGlhdGVUZW1wbGF0ZSgnI3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtZGVidWdnZXItdGVtcGxhdGUnLFRISVNfRE9DKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChub2RlKTt0aGlzLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuc3R5bGUuZmxleERpcmVjdGlvbj0ncm93Jztjb25zdCB0aXRsZT10aGlzLnF1ZXJ5U2VsZWN0b3IoJy50aXRsZScpO3RpdGxlLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO3RpdGxlLnN0eWxlLm1hcmdpbkxlZnQ9JzVweCc7dGl0bGUuc3R5bGUubWFyZ2luUmlnaHQ9JzVweCc7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfPXVuZGVmaW5lZDt0aGlzLnNob3dPdmVyZHJhd189ZmFsc2U7dGhpcy56b29tU2NhbGVWYWx1ZV89MTt0aGlzLnNpemVJbmZvXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuc2l6ZScpO3RoaXMucmFzdGVyQXJlYV89UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcigncmFzdGVyLWFyZWEnKTt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLmJhY2tncm91bmRDb2xvcj0nI2RkZCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5taW5IZWlnaHQ9JzEwMHB4Jzt0aGlzLnJhc3RlckFyZWFfLnN0eWxlLm1pbldpZHRoPScyMDBweCc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5vdmVyZmxvdz0nYXV0byc7dGhpcy5yYXN0ZXJBcmVhXy5zdHlsZS5wYWRkaW5nTGVmdD0nNXB4Jzt0aGlzLnJhc3RlckNhbnZhc189UG9seW1lci5kb20odGhpcy5yYXN0ZXJBcmVhXykucXVlcnlTZWxlY3RvcignY2FudmFzJyk7dGhpcy5yYXN0ZXJDdHhfPXRoaXMucmFzdGVyQ2FudmFzXy5nZXRDb250ZXh0KCcyZCcpO3RoaXMuZmlsZW5hbWVfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5maWxlbmFtZScpO3RoaXMuZmlsZW5hbWVfLnN0eWxlLnVzZXJTZWxlY3Q9J3RleHQnO3RoaXMuZmlsZW5hbWVfLnN0eWxlLm1hcmdpbkxlZnQ9JzVweCc7dGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld189bmV3IHRyLnVpLmUuY2hyb21lLmNjLlBpY3R1cmVPcHNDaGFydFN1bW1hcnlWaWV3KCk7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xz1uZXcgdHIudWkuZS5jaHJvbWUuY2MuUGljdHVyZU9wc0NoYXJ0VmlldygpO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLHRoaXMub25DaGFydEJhckNsaWNrZWRfLmJpbmQodGhpcykpO3RoaXMuZXhwb3J0QnV0dG9uXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcuZXhwb3J0Jyk7dGhpcy5leHBvcnRCdXR0b25fLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uU2F2ZUFzU2tQaWN0dXJlQ2xpY2tlZF8uYmluZCh0aGlzKSk7dGhpcy50cmFja01vdXNlXygpO2NvbnN0IG92ZXJkcmF3Q2hlY2tib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdzaG93T3ZlcmRyYXcnLCdwaWN0dXJlVmlldy5zaG93T3ZlcmRyYXcnLGZhbHNlLCdTaG93IG92ZXJkcmF3Jyk7Y29uc3QgY2hhcnRDaGVja2JveD10ci51aS5iLmNyZWF0ZUNoZWNrQm94KHRoaXMsJ3Nob3dTdW1tYXJ5Q2hhcnQnLCdwaWN0dXJlVmlldy5zaG93U3VtbWFyeUNoYXJ0JyxmYWxzZSwnU2hvdyB0aW1pbmcgc3VtbWFyeScpO2NvbnN0IHBpY3R1cmVJbmZvPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3BpY3R1cmUtaW5mbycpO3BpY3R1cmVJbmZvLnN0eWxlLmZsZXhHcm93PTA7cGljdHVyZUluZm8uc3R5bGUuZmxleFNocmluaz0wO3BpY3R1cmVJbmZvLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7cGljdHVyZUluZm8uc3R5bGUucGFkZGluZ1RvcD0nMnB4JztQb2x5bWVyLmRvbShwaWN0dXJlSW5mbykuYXBwZW5kQ2hpbGQob3ZlcmRyYXdDaGVja2JveCk7UG9seW1lci5kb20ocGljdHVyZUluZm8pLmFwcGVuZENoaWxkKGNoYXJ0Q2hlY2tib3gpO3RoaXMuZHJhd09wc1ZpZXdfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5QaWN0dXJlT3BzTGlzdFZpZXcoKTt0aGlzLmRyYXdPcHNWaWV3Xy5mbGV4R3Jvdz0xO3RoaXMuZHJhd09wc1ZpZXdfLmZsZXhTaHJpbms9MTt0aGlzLmRyYXdPcHNWaWV3Xy5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuZHJhd09wc1ZpZXdfLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2VkJyx0aGlzLm9uQ2hhbmdlRHJhd09wc18uYmluZCh0aGlzKSk7Y29uc3QgbGVmdFBhbmVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ2xlZnQtcGFuZWwnKTtsZWZ0UGFuZWwuc3R5bGUuZmxleERpcmVjdGlvbj0nY29sdW1uJztsZWZ0UGFuZWwuc3R5bGUuZGlzcGxheT0nZmxleCc7bGVmdFBhbmVsLnN0eWxlLmZsZXhHcm93PTA7bGVmdFBhbmVsLnN0eWxlLmZsZXhTaHJpbms9MDtsZWZ0UGFuZWwuc3R5bGUuZmxleEJhc2lzPSdhdXRvJztsZWZ0UGFuZWwuc3R5bGUubWluV2lkdGg9JzIwMHB4JztsZWZ0UGFuZWwuc3R5bGUub3ZlcmZsb3c9J2F1dG8nO1BvbHltZXIuZG9tKGxlZnRQYW5lbCkuYXBwZW5kQ2hpbGQodGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld18pO1BvbHltZXIuZG9tKGxlZnRQYW5lbCkuYXBwZW5kQ2hpbGQodGhpcy5kcmF3T3BzVmlld18pO2NvbnN0IG1pZGRsZURyYWdIYW5kbGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1kcmFnLWhhbmRsZScpO21pZGRsZURyYWdIYW5kbGUuc3R5bGUuZmxleEdyb3c9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhTaHJpbms9MDttaWRkbGVEcmFnSGFuZGxlLnN0eWxlLmZsZXhCYXNpcz0nYXV0byc7bWlkZGxlRHJhZ0hhbmRsZS5ob3Jpem9udGFsPWZhbHNlO21pZGRsZURyYWdIYW5kbGUudGFyZ2V0PWxlZnRQYW5lbDtjb25zdCByaWdodFBhbmVsPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3JpZ2h0LXBhbmVsJyk7cmlnaHRQYW5lbC5zdHlsZS5mbGV4R3Jvdz0xO3JpZ2h0UGFuZWwuc3R5bGUuZmxleFNocmluaz0xO3JpZ2h0UGFuZWwuc3R5bGUuZmxleEJhc2lzPSdhdXRvJztyaWdodFBhbmVsLnN0eWxlLm1pbldpZHRoPTA7cmlnaHRQYW5lbC5zdHlsZS5mbGV4RGlyZWN0aW9uPSdjb2x1bW4nO3JpZ2h0UGFuZWwuc3R5bGUuZGlzcGxheT0nZmxleCc7Y29uc3QgY2hhcnRWaWV3PVBvbHltZXIuZG9tKHJpZ2h0UGFuZWwpLnF1ZXJ5U2VsZWN0b3IoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtb3BzLWNoYXJ0LXZpZXcnKTt0aGlzLmRyYXdPcHNDaGFydFZpZXdfLnN0eWxlLmZsZXhHcm93PTA7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zdHlsZS5mbGV4U2hyaW5rPTA7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMuZHJhd09wc0NoYXJ0Vmlld18uc3R5bGUubWluV2lkdGg9MDt0aGlzLmRyYXdPcHNDaGFydFZpZXdfLnN0eWxlLm92ZXJmbG93WD0nYXV0byc7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zdHlsZS5vdmVyZmxvd1k9J2hpZGRlbic7cmlnaHRQYW5lbC5yZXBsYWNlQ2hpbGQodGhpcy5kcmF3T3BzQ2hhcnRWaWV3XyxjaGFydFZpZXcpO3RoaXMuaW5mb0Jhcl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1pbmZvLWJhcicpO1BvbHltZXIuZG9tKHRoaXMucmFzdGVyQXJlYV8pLmFwcGVuZENoaWxkKHRoaXMuaW5mb0Jhcl8pO1BvbHltZXIuZG9tKHRoaXMpLmluc2VydEJlZm9yZShtaWRkbGVEcmFnSGFuZGxlLHJpZ2h0UGFuZWwpO3RoaXMucGljdHVyZV89dW5kZWZpbmVkO2NvbnN0IGhrYz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0di11aS1iLWhvdGtleS1jb250cm9sbGVyJyk7aGtjLmFkZEhvdEtleShuZXcgdHIudWkuYi5Ib3RLZXkoe2V2ZW50VHlwZTona2V5cHJlc3MnLHRoaXNBcmc6dGhpcyxrZXlDb2RlOidoJy5jaGFyQ29kZUF0KDApLGNhbGxiYWNrKGUpe3RoaXMubW92ZVNlbGVjdGVkT3BCeSgtMSk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyx0aGlzQXJnOnRoaXMsa2V5Q29kZTonbCcuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLm1vdmVTZWxlY3RlZE9wQnkoMSk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGhrYyk7fSxvblNhdmVBc1NrUGljdHVyZUNsaWNrZWRfKCl7Y29uc3QgcmF3RGF0YT10ci5iLkJhc2U2NC5hdG9iKHRoaXMucGljdHVyZV8uZ2V0QmFzZTY0U2twRGF0YSgpKTtjb25zdCBsZW5ndGg9cmF3RGF0YS5sZW5ndGg7Y29uc3QgYXJyYXlCdWZmZXI9bmV3IEFycmF5QnVmZmVyKGxlbmd0aCk7Y29uc3QgdWludDhBcnJheT1uZXcgVWludDhBcnJheShhcnJheUJ1ZmZlcik7Zm9yKGxldCBjPTA7YzxsZW5ndGg7YysrKXt1aW50OEFycmF5W2NdPXJhd0RhdGEuY2hhckNvZGVBdChjKTt9CmNvbnN0IGJsb2I9bmV3IEJsb2IoW3VpbnQ4QXJyYXldLHt0eXBlOidhcHBsaWNhdGlvbi9vY3RldC1iaW5hcnknfSk7Y29uc3QgYmxvYlVybD13aW5kb3cud2Via2l0VVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTtjb25zdCBsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCcsJ2EnKTtsaW5rLmhyZWY9YmxvYlVybDtsaW5rLmRvd25sb2FkPXRoaXMuZmlsZW5hbWVfLnZhbHVlO2NvbnN0IGV2ZW50PWRvY3VtZW50LmNyZWF0ZUV2ZW50KCdNb3VzZUV2ZW50cycpO2V2ZW50LmluaXRNb3VzZUV2ZW50KCdjbGljaycsdHJ1ZSxmYWxzZSx3aW5kb3csMCwwLDAsMCwwLGZhbHNlLGZhbHNlLGZhbHNlLGZhbHNlLDAsbnVsbCk7bGluay5kaXNwYXRjaEV2ZW50KGV2ZW50KTt9LGdldCBwaWN0dXJlKCl7cmV0dXJuIHRoaXMucGljdHVyZV87fSxzZXQgcGljdHVyZShwaWN0dXJlKXt0aGlzLmRyYXdPcHNWaWV3Xy5waWN0dXJlPXBpY3R1cmU7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5waWN0dXJlPXBpY3R1cmU7dGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld18ucGljdHVyZT1waWN0dXJlO3RoaXMucGljdHVyZV89cGljdHVyZTt0aGlzLmV4cG9ydEJ1dHRvbl8uZGlzYWJsZWQ9IXRoaXMucGljdHVyZV8uY2FuU2F2ZTtpZihwaWN0dXJlKXtjb25zdCBzaXplPXRoaXMuZ2V0UmFzdGVyQ2FudmFzU2l6ZV8oKTt0aGlzLnJhc3RlckNhbnZhc18ud2lkdGg9c2l6ZS53aWR0aDt0aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0PXNpemUuaGVpZ2h0O30KY29uc3QgYm91bmRzPXRoaXMucmFzdGVyQXJlYV8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3Qgc2VsZWN0b3JCb3VuZHM9dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ucG9zPXt4Oihib3VuZHMucmlnaHQtc2VsZWN0b3JCb3VuZHMud2lkdGgtMTApLHk6Ym91bmRzLnRvcH07dGhpcy5yYXN0ZXJpemVfKCk7dGhpcy5zY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0UmFzdGVyQ2FudmFzU2l6ZV8oKXtjb25zdCBzdHlsZT13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLnJhc3RlckFyZWFfKTtjb25zdCB3aWR0aD1NYXRoLm1heChwYXJzZUludChzdHlsZS53aWR0aCksdGhpcy5waWN0dXJlXy5sYXllclJlY3Qud2lkdGgpO2NvbnN0IGhlaWdodD1NYXRoLm1heChwYXJzZUludChzdHlsZS5oZWlnaHQpLHRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LmhlaWdodCk7cmV0dXJue3dpZHRoLGhlaWdodH07fSxzY2hlZHVsZVVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMudXBkYXRlQ29udGVudHNQZW5kaW5nXylyZXR1cm47dGhpcy51cGRhdGVDb250ZW50c1BlbmRpbmdfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWVJblRoaXNGcmFtZUlmUG9zc2libGUodGhpcy51cGRhdGVDb250ZW50c18uYmluZCh0aGlzKSk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLnVwZGF0ZUNvbnRlbnRzUGVuZGluZ189ZmFsc2U7aWYodGhpcy5waWN0dXJlXyl7UG9seW1lci5kb20odGhpcy5zaXplSW5mb18pLnRleHRDb250ZW50PScoJysKdGhpcy5waWN0dXJlXy5sYXllclJlY3Qud2lkdGgrJyB4ICcrCnRoaXMucGljdHVyZV8ubGF5ZXJSZWN0LmhlaWdodCsnKSc7fQp0aGlzLmRyYXdPcHNDaGFydFZpZXdfLnVwZGF0ZUNoYXJ0Q29udGVudHMoKTt0aGlzLmRyYXdPcHNDaGFydFZpZXdfLnNjcm9sbFNlbGVjdGVkSXRlbUludG9WaWV3SWZOZWNlc3NhcnkoKTtpZighdGhpcy5waWN0dXJlQXNJbWFnZURhdGFfKXJldHVybjt0aGlzLmluZm9CYXJfLnZpc2libGU9ZmFsc2U7dGhpcy5pbmZvQmFyXy5yZW1vdmVBbGxCdXR0b25zKCk7aWYodGhpcy5waWN0dXJlQXNJbWFnZURhdGFfLmVycm9yKXt0aGlzLmluZm9CYXJfLm1lc3NhZ2U9J0Nhbm5vdCByYXN0ZXJpemUuLi4nO3RoaXMuaW5mb0Jhcl8uYWRkQnV0dG9uKCdNb3JlIGluZm8uLi4nLGZ1bmN0aW9uKGUpe2NvbnN0IG92ZXJsYXk9bmV3IHRyLnVpLmIuT3ZlcmxheSgpO1BvbHltZXIuZG9tKG92ZXJsYXkpLnRleHRDb250ZW50PXRoaXMucGljdHVyZUFzSW1hZ2VEYXRhXy5lcnJvcjtvdmVybGF5LnZpc2libGU9dHJ1ZTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9LmJpbmQodGhpcykpO3RoaXMuaW5mb0Jhcl8udmlzaWJsZT10cnVlO30KdGhpcy5kcmF3UGljdHVyZV8oKTt9LGRyYXdQaWN0dXJlXygpe2NvbnN0IHNpemU9dGhpcy5nZXRSYXN0ZXJDYW52YXNTaXplXygpO2lmKHNpemUud2lkdGghPT10aGlzLnJhc3RlckNhbnZhc18ud2lkdGgpe3RoaXMucmFzdGVyQ2FudmFzXy53aWR0aD1zaXplLndpZHRoO30KaWYoc2l6ZS5oZWlnaHQhPT10aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0KXt0aGlzLnJhc3RlckNhbnZhc18uaGVpZ2h0PXNpemUuaGVpZ2h0O30KdGhpcy5yYXN0ZXJDdHhfLmNsZWFyUmVjdCgwLDAsc2l6ZS53aWR0aCxzaXplLmhlaWdodCk7aWYoIXRoaXMucGljdHVyZUFzSW1hZ2VEYXRhXy5pbWFnZURhdGEpcmV0dXJuO2NvbnN0IGltZ0NhbnZhcz10aGlzLnBpY3R1cmVBc0ltYWdlRGF0YV8uYXNDYW52YXMoKTtjb25zdCB3PWltZ0NhbnZhcy53aWR0aDtjb25zdCBoPWltZ0NhbnZhcy5oZWlnaHQ7dGhpcy5yYXN0ZXJDdHhfLmRyYXdJbWFnZShpbWdDYW52YXMsMCwwLHcsaCwwLDAsdyp0aGlzLnpvb21TY2FsZVZhbHVlXyxoKnRoaXMuem9vbVNjYWxlVmFsdWVfKTt9LHJhc3Rlcml6ZV8oKXtpZih0aGlzLnBpY3R1cmVfKXt0aGlzLnBpY3R1cmVfLnJhc3Rlcml6ZSh7c3RvcEluZGV4OnRoaXMuZHJhd09wc1ZpZXdfLnNlbGVjdGVkT3BJbmRleCxzaG93T3ZlcmRyYXc6dGhpcy5zaG93T3ZlcmRyYXdffSx0aGlzLm9uUmFzdGVyQ29tcGxldGVfLmJpbmQodGhpcykpO319LG9uUmFzdGVyQ29tcGxldGVfKHBpY3R1cmVBc0ltYWdlRGF0YSl7dGhpcy5waWN0dXJlQXNJbWFnZURhdGFfPXBpY3R1cmVBc0ltYWdlRGF0YTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7fSxtb3ZlU2VsZWN0ZWRPcEJ5KGluY3JlbWVudCl7aWYodGhpcy5zZWxlY3RlZE9wSW5kZXg9PT11bmRlZmluZWQpe3RoaXMuc2VsZWN0ZWRPcEluZGV4PTA7cmV0dXJuO30KdGhpcy5zZWxlY3RlZE9wSW5kZXg9dHIuYi5tYXRoLmNsYW1wKHRoaXMuc2VsZWN0ZWRPcEluZGV4K2luY3JlbWVudCwwLHRoaXMubnVtT3BzKTt9LGdldCBudW1PcHMoKXtyZXR1cm4gdGhpcy5kcmF3T3BzVmlld18ubnVtT3BzO30sZ2V0IHNlbGVjdGVkT3BJbmRleCgpe3JldHVybiB0aGlzLmRyYXdPcHNWaWV3Xy5zZWxlY3RlZE9wSW5kZXg7fSxzZXQgc2VsZWN0ZWRPcEluZGV4KGluZGV4KXt0aGlzLmRyYXdPcHNWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9aW5kZXg7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9aW5kZXg7fSxvbkNoYXJ0QmFyQ2xpY2tlZF8oZSl7dGhpcy5kcmF3T3BzVmlld18uc2VsZWN0ZWRPcEluZGV4PXRoaXMuZHJhd09wc0NoYXJ0Vmlld18uc2VsZWN0ZWRPcEluZGV4O30sb25DaGFuZ2VEcmF3T3BzXyhlKXt0aGlzLnJhc3Rlcml6ZV8oKTt0aGlzLnNjaGVkdWxlVXBkYXRlQ29udGVudHNfKCk7dGhpcy5kcmF3T3BzQ2hhcnRWaWV3Xy5zZWxlY3RlZE9wSW5kZXg9dGhpcy5kcmF3T3BzVmlld18uc2VsZWN0ZWRPcEluZGV4O30sc2V0IHNob3dPdmVyZHJhdyh2KXt0aGlzLnNob3dPdmVyZHJhd189djt0aGlzLnJhc3Rlcml6ZV8oKTt9LHNldCBzaG93U3VtbWFyeUNoYXJ0KGNoYXJ0U2hvdWxkQmVWaXNpYmxlKXtpZihjaGFydFNob3VsZEJlVmlzaWJsZSl7dGhpcy5kcmF3T3BzQ2hhcnRTdW1tYXJ5Vmlld18uc2hvdygpO31lbHNle3RoaXMuZHJhd09wc0NoYXJ0U3VtbWFyeVZpZXdfLmhpZGUoKTt9fSx0cmFja01vdXNlXygpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcy5yYXN0ZXJBcmVhXztQb2x5bWVyLmRvbSh0aGlzLnJhc3RlckFyZWFfKS5hcHBlbmRDaGlsZCh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc3VwcG9ydGVkTW9kZU1hc2s9dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlpPT007dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ubW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5kZWZhdWx0TW9kZT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXR0aW5nc0tleT0ncGljdHVyZURlYnVnZ2VyLm1vdXNlTW9kZVNlbGVjdG9yJzt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnpvb20nLHRoaXMub25CZWdpblpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXpvb20nLHRoaXMub25VcGRhdGVab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmR6b29tJyx0aGlzLm9uRW5kWm9vbV8uYmluZCh0aGlzKSk7fSxvbkJlZ2luWm9vbV8oZSl7dGhpcy5pc1pvb21pbmdfPXRydWU7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlWm9vbV8oZSl7aWYoIXRoaXMuaXNab29taW5nXylyZXR1cm47Y29uc3QgY3VycmVudE1vdXNlVmlld1Bvcz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO3RoaXMuem9vbVNjYWxlVmFsdWVfKz0oKHRoaXMubGFzdE1vdXNlVmlld1Bvc18ueS1jdXJyZW50TW91c2VWaWV3UG9zLnkpKjAuMDAxKTt0aGlzLnpvb21TY2FsZVZhbHVlXz1NYXRoLm1heCh0aGlzLnpvb21TY2FsZVZhbHVlXywwLjEpO3RoaXMuZHJhd1BpY3R1cmVfKCk7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz1jdXJyZW50TW91c2VWaWV3UG9zO30sb25FbmRab29tXyhlKXt0aGlzLmxhc3RNb3VzZVZpZXdQb3NfPXVuZGVmaW5lZDt0aGlzLmlzWm9vbWluZ189ZmFsc2U7ZS5wcmV2ZW50RGVmYXVsdCgpO30sZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSl7cmV0dXJue3g6ZS5jbGllbnRYLXRoaXMucmFzdGVyQXJlYV8ub2Zmc2V0TGVmdCx5OmUuY2xpZW50WS10aGlzLnJhc3RlckFyZWFfLm9mZnNldFRvcH07fX07cmV0dXJue1BpY3R1cmVEZWJ1Z2dlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7Y29uc3QgUGljdHVyZVNuYXBzaG90Vmlldz10ci51aS5iLmRlZmluZSgndHItdWktZS1jaHJvbWUtY2MtcGljdHVyZS1zbmFwc2hvdC12aWV3Jyx0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcpO1BpY3R1cmVTbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnByb3RvdHlwZSxkZWNvcmF0ZSgpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3RyLXVpLWUtY2hyb21lLWNjLXBpY3R1cmUtc25hcHNob3QtdmlldycpO3RoaXMuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy5zdHlsZS5mbGV4R3Jvdz0xO3RoaXMuc3R5bGUuZmxleFNocmluaz0xO3RoaXMuc3R5bGUuZmxleEJhc2lzPSdhdXRvJzt0aGlzLnN0eWxlLm1pbldpZHRoPTA7dGhpcy5waWN0dXJlRGVidWdnZXJfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5QaWN0dXJlRGVidWdnZXIoKTt0aGlzLnBpY3R1cmVEZWJ1Z2dlcl8uc3R5bGUuZmxleEdyb3c9MTt0aGlzLnBpY3R1cmVEZWJ1Z2dlcl8uc3R5bGUuZmxleFNocmluaz0xO3RoaXMucGljdHVyZURlYnVnZ2VyXy5zdHlsZS5mbGV4QmFzaXM9J2F1dG8nO3RoaXMucGljdHVyZURlYnVnZ2VyXy5zdHlsZS5taW5XaWR0aD0wO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMucGljdHVyZURlYnVnZ2VyXyk7fSx1cGRhdGVDb250ZW50cygpe2lmKHRoaXMub2JqZWN0U25hcHNob3RfJiZ0aGlzLnBpY3R1cmVEZWJ1Z2dlcl8pe3RoaXMucGljdHVyZURlYnVnZ2VyXy5waWN0dXJlPXRoaXMub2JqZWN0U25hcHNob3RfO319fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoUGljdHVyZVNuYXBzaG90Vmlldyx7dHlwZU5hbWVzOlsnY2M6OlBpY3R1cmUnLCdjYzo6TGF5ZXJlZFBpY3R1cmUnXSxzaG93SW5zdGFuY2VzOmZhbHNlfSk7cmV0dXJue1BpY3R1cmVTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2MnLGZ1bmN0aW9uKCl7Y29uc3Qga25vd25SYXN0ZXJUYXNrTmFtZXM9WydUaWxlTWFuYWdlcjo6UnVuUmFzdGVyVGFzaycsJ1Jhc3RlcldvcmtlclBvb2xUYXNrSW1wbDo6UnVuUmFzdGVyT25UaHJlYWQnLCdSYXN0ZXJXb3JrZXJQb29sVGFza0ltcGw6OlJhc3RlcicsJ1Jhc3RlclRhc2tJbXBsOjpSYXN0ZXInLCdjYzo6UmFzdGVyVGFzaycsJ1Jhc3RlclRhc2snXTtjb25zdCBrbm93bkFuYWx5c2lzVGFza05hbWVzPVsnVGlsZU1hbmFnZXI6OlJ1bkFuYWx5emVUYXNrJywnUmFzdGVyV29ya2VyUG9vbFRhc2tJbXBsOjpSdW5BbmFseXNpc09uVGhyZWFkJywnUmFzdGVyV29ya2VyUG9vbFRhc2tJbXBsOjpBbmFseXplJywnUmFzdGVyVGFza0ltcGw6OkFuYWx5emUnLCdjYzo6QW5hbHl6ZVRhc2snLCdBbmFseXplVGFzayddO2Z1bmN0aW9uIGdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKHNsaWNlKXtpZighKGlzU2xpY2VEb2luZ1Jhc3Rlcml6YXRpb24oc2xpY2UpfHxpc1NsaWNlRG9pbmdBbmFseXNpcyhzbGljZSkpKXtyZXR1cm4gdW5kZWZpbmVkO30KbGV0IHRpbGVEYXRhO2lmKHNsaWNlLmFyZ3MuZGF0YSl7dGlsZURhdGE9c2xpY2UuYXJncy5kYXRhO31lbHNle3RpbGVEYXRhPXNsaWNlLmFyZ3MudGlsZURhdGE7fQppZih0aWxlRGF0YT09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2lmKHRpbGVEYXRhLnRpbGVfaWQpcmV0dXJuIHRpbGVEYXRhLnRpbGVfaWQ7Y29uc3QgdGlsZT10aWxlRGF0YS50aWxlSWQ7aWYoISh0aWxlIGluc3RhbmNlb2YgdHIuZS5jYy5UaWxlU25hcHNob3QpKXtyZXR1cm4gdW5kZWZpbmVkO30KcmV0dXJuIHRpbGVEYXRhLnRpbGVJZDt9CmZ1bmN0aW9uIGlzU2xpY2VEb2luZ1Jhc3Rlcml6YXRpb24oc2xpY2Upe3JldHVybiBrbm93blJhc3RlclRhc2tOYW1lcy5pbmNsdWRlcyhzbGljZS50aXRsZSk7fQpmdW5jdGlvbiBpc1NsaWNlRG9pbmdBbmFseXNpcyhzbGljZSl7cmV0dXJuIGtub3duQW5hbHlzaXNUYXNrTmFtZXMuaW5jbHVkZXMoc2xpY2UudGl0bGUpO30KcmV0dXJue2dldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlLGlzU2xpY2VEb2luZ1Jhc3Rlcml6YXRpb24saXNTbGljZURvaW5nQW5hbHlzaXN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgQW5hbHlzaXNTdWJWaWV3PXtzZXQgdGFiTGFiZWwobGFiZWwpe1BvbHltZXIuZG9tKHRoaXMpLnNldEF0dHJpYnV0ZSgndGFiLWxhYmVsJyxsYWJlbCk7fSxnZXQgdGFiTGFiZWwoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3RhYi1sYWJlbCcpO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gZmFsc2U7fSxnZXQgcmVsYXRlZEV2ZW50c1RvSGlnaGxpZ2h0KCl7cmV0dXJuIHVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTt9LGdldCBzZWxlY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCEnKTt9fTtjb25zdCBhbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG89bmV3IE1hcCgpO2xldCBvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90bz11bmRlZmluZWQ7bGV0IGV2ZW50UHJvdG9Ub1Jvb3RUeXBlSW5mb01hcD11bmRlZmluZWQ7ZnVuY3Rpb24gQW5hbHlzaXNTdWJWaWV3VHlwZUluZm8oZXZlbnRDb25zdHJ1Y3RvcixvcHRpb25zKXtpZihvcHRpb25zLm11bHRpPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZmllbGQ6IG11bHRpJyk7fQppZihvcHRpb25zLnRpdGxlPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgZmllbGQ6IHRpdGxlJyk7fQp0aGlzLmV2ZW50Q29uc3RydWN0b3I9ZXZlbnRDb25zdHJ1Y3Rvcjt0aGlzLnNpbmdsZVRhZ05hbWU9dW5kZWZpbmVkO3RoaXMuc2luZ2xlVGl0bGU9dW5kZWZpbmVkO3RoaXMubXVsdGlUYWdOYW1lPXVuZGVmaW5lZDt0aGlzLm11bHRpVGl0bGU9dW5kZWZpbmVkO3RoaXMuY2hpbGRyZW5UeXBlSW5mb3NfPXVuZGVmaW5lZDt9CkFuYWx5c2lzU3ViVmlld1R5cGVJbmZvLnByb3RvdHlwZT17Z2V0IGNoaWxkcmVuVHlwZUluZm9zKCl7cmV0dXJuIHRoaXMuY2hpbGRyZW5UeXBlSW5mb3NfO30scmVzZXRjaGlsZHJlblR5cGVJbmZvcygpe3RoaXMuY2hpbGRyZW5UeXBlSW5mb3NfPVtdO319O0FuYWx5c2lzU3ViVmlldy5yZWdpc3Rlcj1mdW5jdGlvbih0YWdOYW1lLGV2ZW50Q29uc3RydWN0b3Isb3B0aW9ucyl7bGV0IHR5cGVJbmZvPWFsbFR5cGVJbmZvc0J5RXZlbnRQcm90by5nZXQoZXZlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGUpO2lmKHR5cGVJbmZvPT09dW5kZWZpbmVkKXt0eXBlSW5mbz1uZXcgQW5hbHlzaXNTdWJWaWV3VHlwZUluZm8oZXZlbnRDb25zdHJ1Y3RvcixvcHRpb25zKTthbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uc2V0KHR5cGVJbmZvLmV2ZW50Q29uc3RydWN0b3IucHJvdG90eXBlLHR5cGVJbmZvKTtvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90bz11bmRlZmluZWQ7fQppZighb3B0aW9ucy5tdWx0aSl7aWYodHlwZUluZm8uc2luZ2xlVGFnTmFtZSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdTaW5nbGVUYWdOYW1lIGFscmVhZHkgc2V0Jyk7fQp0eXBlSW5mby5zaW5nbGVUYWdOYW1lPXRhZ05hbWU7dHlwZUluZm8uc2luZ2xlVGl0bGU9b3B0aW9ucy50aXRsZTt9ZWxzZXtpZih0eXBlSW5mby5tdWx0aVRhZ05hbWUhPT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTXVsdGlUYWdOYW1lIGFscmVhZHkgc2V0Jyk7fQp0eXBlSW5mby5tdWx0aVRhZ05hbWU9dGFnTmFtZTt0eXBlSW5mby5tdWx0aVRpdGxlPW9wdGlvbnMudGl0bGU7fQpyZXR1cm4gdHlwZUluZm87fTtmdW5jdGlvbiByZWJ1aWxkUm9vdFN1YlZpZXdUeXBlSW5mb3MoKXtvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90bz1uZXcgTWFwKCk7YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8pe3R5cGVJbmZvLnJlc2V0Y2hpbGRyZW5UeXBlSW5mb3MoKTt9KTthbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZm9yRWFjaChmdW5jdGlvbih0eXBlSW5mbyxldmVudFByb3RvKXtjb25zdCBldmVudFByb3RvdHlwZT10eXBlSW5mby5ldmVudENvbnN0cnVjdG9yLnByb3RvdHlwZTtsZXQgbGFzdEV2ZW50UHJvdG89ZXZlbnRQcm90b3R5cGU7bGV0IGN1ckV2ZW50UHJvdG89ZXZlbnRQcm90b3R5cGUuX19wcm90b19fO3doaWxlKHRydWUpe2lmKCFhbGxUeXBlSW5mb3NCeUV2ZW50UHJvdG8uaGFzKGN1ckV2ZW50UHJvdG8pKXtjb25zdCByb290VHlwZUluZm89YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmdldChsYXN0RXZlbnRQcm90byk7Y29uc3Qgcm9vdEV2ZW50UHJvdG89bGFzdEV2ZW50UHJvdG87Y29uc3QgaXNOZXc9b25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG8uaGFzKHJvb3RFdmVudFByb3RvKTtvbmx5Um9vdFR5cGVJbmZvc0J5RXZlbnRQcm90by5zZXQocm9vdEV2ZW50UHJvdG8scm9vdFR5cGVJbmZvKTticmVhazt9Cmxhc3RFdmVudFByb3RvPWN1ckV2ZW50UHJvdG87Y3VyRXZlbnRQcm90bz1jdXJFdmVudFByb3RvLl9fcHJvdG9fXzt9fSk7YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8sZXZlbnRQcm90byl7Y29uc3QgZXZlbnRQcm90b3R5cGU9dHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGU7Y29uc3QgcGFyZW50RXZlbnRQcm90bz1ldmVudFByb3RvdHlwZS5fX3Byb3RvX187Y29uc3QgcGFyZW50VHlwZUluZm89YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmdldChwYXJlbnRFdmVudFByb3RvKTtpZighcGFyZW50VHlwZUluZm8pcmV0dXJuO3BhcmVudFR5cGVJbmZvLmNoaWxkcmVuVHlwZUluZm9zLnB1c2godHlwZUluZm8pO30pO2V2ZW50UHJvdG9Ub1Jvb3RUeXBlSW5mb01hcD1uZXcgTWFwKCk7YWxsVHlwZUluZm9zQnlFdmVudFByb3RvLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8sZXZlbnRQcm90byl7Y29uc3QgZXZlbnRQcm90b3R5cGU9dHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvci5wcm90b3R5cGU7bGV0IGN1ckV2ZW50UHJvdG89ZXZlbnRQcm90b3R5cGU7d2hpbGUodHJ1ZSl7aWYob25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG8uaGFzKGN1ckV2ZW50UHJvdG8pKXtjb25zdCByb290VHlwZUluZm89b25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZ2V0KGN1ckV2ZW50UHJvdG8pO2V2ZW50UHJvdG9Ub1Jvb3RUeXBlSW5mb01hcC5zZXQoZXZlbnRQcm90b3R5cGUscm9vdFR5cGVJbmZvKTticmVhazt9CmN1ckV2ZW50UHJvdG89Y3VyRXZlbnRQcm90by5fX3Byb3RvX187fX0pO30KZnVuY3Rpb24gZmluZExvd2VzdFR5cGVJbmZvRm9yRXZlbnRzKHRoaXNUeXBlSW5mbyxldmVudHMpe2lmKGV2ZW50cy5sZW5ndGg9PT0wKXJldHVybiB0aGlzVHlwZUluZm87Y29uc3QgZXZlbnQwPXRyLmIuZ2V0Rmlyc3RFbGVtZW50KGV2ZW50cyk7bGV0IGNhbmRpZGF0ZVN1YlR5cGVJbmZvO2ZvcihsZXQgaT0wO2k8dGhpc1R5cGVJbmZvLmNoaWxkcmVuVHlwZUluZm9zLmxlbmd0aDtpKyspe2NvbnN0IGNoaWxkVHlwZUluZm89dGhpc1R5cGVJbmZvLmNoaWxkcmVuVHlwZUluZm9zW2ldO2lmKGV2ZW50MCBpbnN0YW5jZW9mIGNoaWxkVHlwZUluZm8uZXZlbnRDb25zdHJ1Y3Rvcil7Y2FuZGlkYXRlU3ViVHlwZUluZm89Y2hpbGRUeXBlSW5mbzticmVhazt9fQppZighY2FuZGlkYXRlU3ViVHlwZUluZm8pcmV0dXJuIHRoaXNUeXBlSW5mbztsZXQgYWxsTWF0Y2g9dHJ1ZTtmb3IoY29uc3QgZXZlbnQgb2YgZXZlbnRzKXtpZihldmVudCBpbnN0YW5jZW9mIGNhbmRpZGF0ZVN1YlR5cGVJbmZvLmV2ZW50Q29uc3RydWN0b3IpY29udGludWU7YWxsTWF0Y2g9ZmFsc2U7YnJlYWs7fQppZighYWxsTWF0Y2gpe3JldHVybiB0aGlzVHlwZUluZm87fQpyZXR1cm4gZmluZExvd2VzdFR5cGVJbmZvRm9yRXZlbnRzKGNhbmRpZGF0ZVN1YlR5cGVJbmZvLGV2ZW50cyk7fQpjb25zdCBwcmltYXJ5RXZlbnRQcm90b1RvVHlwZUluZm9NYXA9bmV3IE1hcCgpO2Z1bmN0aW9uIGdldFJvb3RUeXBlSW5mb0ZvckV2ZW50KGV2ZW50KXtjb25zdCBjdXJQcm90bz1ldmVudC5fX3Byb3RvX187Y29uc3QgdHlwZUluZm89cHJpbWFyeUV2ZW50UHJvdG9Ub1R5cGVJbmZvTWFwLmdldChjdXJQcm90byk7aWYodHlwZUluZm8pcmV0dXJuIHR5cGVJbmZvO3JldHVybiBnZXRSb290VHlwZUluZm9Gb3JFdmVudFNsb3coZXZlbnQpO30KZnVuY3Rpb24gZ2V0Um9vdFR5cGVJbmZvRm9yRXZlbnRTbG93KGV2ZW50KXtsZXQgdHlwZUluZm87bGV0IGN1clByb3RvPWV2ZW50Ll9fcHJvdG9fXzt3aGlsZSh0cnVlKXtpZihjdXJQcm90bz09PU9iamVjdC5wcm90b3R5cGUpe3Rocm93IG5ldyBFcnJvcignTm8gdmlldyByZWdpc3RlcmVkIGZvciAnK2V2ZW50LnRvU3RyaW5nKCkpO30KdHlwZUluZm89b25seVJvb3RUeXBlSW5mb3NCeUV2ZW50UHJvdG8uZ2V0KGN1clByb3RvKTtpZih0eXBlSW5mbyl7cHJpbWFyeUV2ZW50UHJvdG9Ub1R5cGVJbmZvTWFwLnNldChldmVudC5fX3Byb3RvX18sdHlwZUluZm8pO3JldHVybiB0eXBlSW5mbzt9CmN1clByb3RvPWN1clByb3RvLl9fcHJvdG9fXzt9fQpBbmFseXNpc1N1YlZpZXcuZ2V0RXZlbnRzT3JnYW5pemVkQnlUeXBlSW5mbz1mdW5jdGlvbihzZWxlY3Rpb24pe2lmKG9ubHlSb290VHlwZUluZm9zQnlFdmVudFByb3RvPT09dW5kZWZpbmVkKXtyZWJ1aWxkUm9vdFN1YlZpZXdUeXBlSW5mb3MoKTt9CmNvbnN0IGV2ZW50c0J5Um9vdFR5cGVJbmZvPXRyLmIuZ3JvdXBJbnRvTWFwKHNlbGVjdGlvbixmdW5jdGlvbihldmVudCl7cmV0dXJuIGdldFJvb3RUeXBlSW5mb0ZvckV2ZW50KGV2ZW50KTt9LHRoaXMsdHIubW9kZWwuRXZlbnRTZXQpO2NvbnN0IGV2ZW50c0J5TG93ZXN0VHlwZUluZm89bmV3IE1hcCgpO2V2ZW50c0J5Um9vdFR5cGVJbmZvLmZvckVhY2goZnVuY3Rpb24oZXZlbnRzLHR5cGVJbmZvKXtjb25zdCBsb3dlc3RUeXBlSW5mbz1maW5kTG93ZXN0VHlwZUluZm9Gb3JFdmVudHModHlwZUluZm8sZXZlbnRzKTtldmVudHNCeUxvd2VzdFR5cGVJbmZvLnNldChsb3dlc3RUeXBlSW5mbyxldmVudHMpO30pO3JldHVybiBldmVudHNCeUxvd2VzdFR5cGVJbmZvO307cmV0dXJue0FuYWx5c2lzU3ViVmlldyxBbmFseXNpc1N1YlZpZXdUeXBlSW5mbyx9O30pO1BvbHltZXIoe2lzOid0ci11aS1hLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld119KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc3RhY2stZnJhbWUnLHJlYWR5KCl7dGhpcy5zdGFja0ZyYW1lXz11bmRlZmluZWQ7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1bXTt0aGlzLiQudGFibGUuc2hvd0hlYWRlcj10cnVlO30sZ2V0IHN0YWNrRnJhbWUoKXtyZXR1cm4gdGhpcy5zdGFja0ZyYW1lXzt9LHNldCBzdGFja0ZyYW1lKHN0YWNrRnJhbWUpe2NvbnN0IHRhYmxlPXRoaXMuJC50YWJsZTt0aGlzLnN0YWNrRnJhbWVfPXN0YWNrRnJhbWU7aWYoc3RhY2tGcmFtZT09PXVuZGVmaW5lZCl7dGFibGUudGFibGVDb2x1bW5zPVtdO3RhYmxlLnRhYmxlUm93cz1bXTt0YWJsZS5yZWJ1aWxkKCk7cmV0dXJuO30KbGV0IGhhc05hbWU9ZmFsc2U7bGV0IGhhc1RpdGxlPWZhbHNlO3RhYmxlLnRhYmxlUm93cz1zdGFja0ZyYW1lLnN0YWNrVHJhY2U7dGFibGUudGFibGVSb3dzLmZvckVhY2goZnVuY3Rpb24ocm93KXtoYXNOYW1lfD1yb3cubmFtZSE9PXVuZGVmaW5lZDtoYXNUaXRsZXw9cm93LnRpdGxlIT09dW5kZWZpbmVkO30pO2NvbnN0IGNvbHM9W107aWYoaGFzTmFtZSl7Y29scy5wdXNoKHt0aXRsZTonTmFtZScsdmFsdWUocm93KXtyZXR1cm4gcm93Lm5hbWU7fX0pO30KaWYoaGFzVGl0bGUpe2NvbHMucHVzaCh7dGl0bGU6J1RpdGxlJyx2YWx1ZShyb3cpe3JldHVybiByb3cudGl0bGU7fX0pO30KdGFibGUudGFibGVDb2x1bW5zPWNvbHM7dGFibGUucmVidWlsZCgpO30sdGFibGVGb3JUZXN0aW5nKCl7cmV0dXJuIHRoaXMuJC50YWJsZTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLHByb3BlcnRpZXM6e2lzRmxvdzp7dHlwZTpCb29sZWFuLHZhbHVlOmZhbHNlfX0scmVhZHkoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J0xhYmVsJyx2YWx1ZShyb3cpe3JldHVybiByb3cubmFtZTt9LHdpZHRoOicxNTBweCd9LHt0aXRsZTonVmFsdWUnLHdpZHRoOicxMDAlJyx2YWx1ZShyb3cpe3JldHVybiByb3cudmFsdWU7fX1dO3RoaXMuJC50YWJsZS5zaG93SGVhZGVyPWZhbHNlO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHNlbGVjdGlvbi5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3VwcG9ydHMgc2luZ2xlIHNsaWNlcycpO30KdGhpcy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt9LHNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXRGbG93RXZlbnRSb3dzXyhldmVudCl7Y29uc3Qgcm93cz10aGlzLmdldEV2ZW50Um93c0hlbHBlcl8oZXZlbnQpO3Jvd3Muc3BsaWNlKDAsMCx7bmFtZTonSUQnLHZhbHVlOmV2ZW50LmlkfSk7ZnVuY3Rpb24gY3JlYXRlTGlua1RvKHNsaWNlKXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyLm1vZGVsLkV2ZW50U2V0KHNsaWNlKTt9KTtQb2x5bWVyLmRvbShsaW5rRWwpLnRleHRDb250ZW50PXNsaWNlLnVzZXJGcmllbmRseU5hbWU7cmV0dXJuIGxpbmtFbDt9CnJvd3MucHVzaCh7bmFtZTonRnJvbScsdmFsdWU6Y3JlYXRlTGlua1RvKGV2ZW50LnN0YXJ0U2xpY2UpfSk7cm93cy5wdXNoKHtuYW1lOidUbycsdmFsdWU6Y3JlYXRlTGlua1RvKGV2ZW50LmVuZFNsaWNlKX0pO3JldHVybiByb3dzO30sZ2V0RXZlbnRSb3dzSGVscGVyXyhldmVudCl7Y29uc3Qgcm93cz1bXTtpZihldmVudC5lcnJvcil7cm93cy5wdXNoKHtuYW1lOidFcnJvcicsdmFsdWU6ZXZlbnQuZXJyb3J9KTt9CmlmKGV2ZW50LnRpdGxlKXtsZXQgdGl0bGU9ZXZlbnQudGl0bGU7aWYodHIuaXNFeHBvcnRlZCgndHItdWktZS1jaHJvbWUtY29kZXNlYXJjaCcpKXtjb25zdCBjb250YWluZXI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Y29udGFpbmVyLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKHRpdGxlKSk7Y29uc3QgbGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLWNocm9tZS1jb2Rlc2VhcmNoJyk7bGluay5zZWFyY2hQaHJhc2U9dGl0bGU7Y29udGFpbmVyLmFwcGVuZENoaWxkKGxpbmspO3RpdGxlPWNvbnRhaW5lcjt9CnJvd3MucHVzaCh7bmFtZTonVGl0bGUnLHZhbHVlOnRpdGxlfSk7fQppZihldmVudC5jYXRlZ29yeSl7cm93cy5wdXNoKHtuYW1lOidDYXRlZ29yeScsdmFsdWU6ZXZlbnQuY2F0ZWdvcnl9KTt9CmlmKGV2ZW50Lm1vZGVsIT09dW5kZWZpbmVkKXtjb25zdCB1ZmM9ZXZlbnQubW9kZWwuZ2V0VXNlckZyaWVuZGx5Q2F0ZWdvcnlGcm9tRXZlbnQoZXZlbnQpO2lmKHVmYyE9PXVuZGVmaW5lZCl7cm93cy5wdXNoKHtuYW1lOidVc2VyIEZyaWVuZGx5IENhdGVnb3J5Jyx2YWx1ZTp1ZmN9KTt9fQppZihldmVudC5uYW1lKXtyb3dzLnB1c2goe25hbWU6J05hbWUnLHZhbHVlOmV2ZW50Lm5hbWV9KTt9CnJvd3MucHVzaCh7bmFtZTonU3RhcnQnLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5zdGFydCx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXN9KX0pO2lmKGV2ZW50LmR1cmF0aW9uKXtyb3dzLnB1c2goe25hbWU6J1dhbGwgRHVyYXRpb24nLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5kdXJhdGlvbix7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXN9KX0pO30KaWYoZXZlbnQuY3B1RHVyYXRpb24pe3Jvd3MucHVzaCh7bmFtZTonQ1BVIER1cmF0aW9uJyx2YWx1ZTp0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oZXZlbnQuY3B1RHVyYXRpb24se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSl9KTt9CmlmKGV2ZW50LnN1YlNsaWNlcyE9PXVuZGVmaW5lZCYmZXZlbnQuc3ViU2xpY2VzLmxlbmd0aCE9PTApe2lmKGV2ZW50LnNlbGZUaW1lKXtyb3dzLnB1c2goe25hbWU6J1NlbGYgVGltZScsdmFsdWU6dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKGV2ZW50LnNlbGZUaW1lLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc30pfSk7fQppZihldmVudC5jcHVTZWxmVGltZSl7Y29uc3QgY3B1U2VsZlRpbWVFbD10ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oZXZlbnQuY3B1U2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSk7aWYoZXZlbnQuY3B1U2VsZlRpbWU+ZXZlbnQuc2VsZlRpbWUpe2NwdVNlbGZUaW1lRWwud2FybmluZz0nIE5vdGUgdGhhdCBDUFUgU2VsZiBUaW1lIGlzIGxhcmdlciB0aGFuIFNlbGYgVGltZS4gJysnVGhpcyBpcyBhIGtub3duIGxpbWl0YXRpb24gb2YgdGhpcyBzeXN0ZW0sIHdoaWNoIG9jY3VycyAnKydkdWUgdG8gc2V2ZXJhbCBzdWJzbGljZXMsIHJvdW5kaW5nIGlzc3VlcywgYW5kIGltcHJlY2lzZSAnKyd0aW1lIGF0IHdoaWNoIHdlIGdldCBjcHUtIGFuZCByZWFsLXRpbWUuJzt9CnJvd3MucHVzaCh7bmFtZTonQ1BVIFNlbGYgVGltZScsdmFsdWU6Y3B1U2VsZlRpbWVFbH0pO319CmlmKGV2ZW50LmR1cmF0aW9uSW5Vc2VyVGltZSl7cm93cy5wdXNoKHtuYW1lOidEdXJhdGlvbiAoVSknLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC5kdXJhdGlvbkluVXNlclRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSl9KTt9CmZ1bmN0aW9uIGNyZWF0ZVN0YWNrRnJhbWVFbChzZil7Y29uc3Qgc2ZFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLXN0YWNrLWZyYW1lJyk7c2ZFbC5zdGFja0ZyYW1lPXNmO3JldHVybiBzZkVsO30KaWYoZXZlbnQuc3RhcnRTdGFja0ZyYW1lJiZldmVudC5lbmRTdGFja0ZyYW1lKXtpZihldmVudC5zdGFydFN0YWNrRnJhbWU9PT1ldmVudC5lbmRTdGFja0ZyYW1lKXtyb3dzLnB1c2goe25hbWU6J1N0YXJ0K0VuZCBTdGFjayBUcmFjZScsdmFsdWU6Y3JlYXRlU3RhY2tGcmFtZUVsKGV2ZW50LnN0YXJ0U3RhY2tGcmFtZSl9KTt9ZWxzZXtyb3dzLnB1c2goe25hbWU6J1N0YXJ0IFN0YWNrIFRyYWNlJyx2YWx1ZTpjcmVhdGVTdGFja0ZyYW1lRWwoZXZlbnQuc3RhcnRTdGFja0ZyYW1lKX0pO3Jvd3MucHVzaCh7bmFtZTonRW5kIFN0YWNrIFRyYWNlJyx2YWx1ZTpjcmVhdGVTdGFja0ZyYW1lRWwoZXZlbnQuZW5kU3RhY2tGcmFtZSl9KTt9fWVsc2UgaWYoZXZlbnQuc3RhcnRTdGFja0ZyYW1lKXtyb3dzLnB1c2goe25hbWU6J1N0YXJ0IFN0YWNrIFRyYWNlJyx2YWx1ZTpjcmVhdGVTdGFja0ZyYW1lRWwoZXZlbnQuc3RhcnRTdGFja0ZyYW1lKX0pO31lbHNlIGlmKGV2ZW50LmVuZFN0YWNrRnJhbWUpe3Jvd3MucHVzaCh7bmFtZTonRW5kIFN0YWNrIFRyYWNlJyx2YWx1ZTpjcmVhdGVTdGFja0ZyYW1lRWwoZXZlbnQuZW5kU3RhY2tGcmFtZSl9KTt9CmlmKGV2ZW50LmluZm8pe2NvbnN0IGRlc2NyaXB0aW9uRWw9dHIudWkuYi5jcmVhdGVEaXYoe3RleHRDb250ZW50OmV2ZW50LmluZm8uZGVzY3JpcHRpb24sbWF4V2lkdGg6JzMwMHB4J30pO3Jvd3MucHVzaCh7bmFtZTonRGVzY3JpcHRpb24nLHZhbHVlOmRlc2NyaXB0aW9uRWx9KTtpZihldmVudC5pbmZvLmRvY0xpbmtzKXtldmVudC5pbmZvLmRvY0xpbmtzLmZvckVhY2goZnVuY3Rpb24obGlua09iamVjdCl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2EnKTtsaW5rRWwudGFyZ2V0PSdfYmxhbmsnO2xpbmtFbC5ocmVmPWxpbmtPYmplY3QuaHJlZjtQb2x5bWVyLmRvbShsaW5rRWwpLnRleHRDb250ZW50PVBvbHltZXIuZG9tKGxpbmtPYmplY3QpLnRleHRDb250ZW50O3Jvd3MucHVzaCh7bmFtZTpsaW5rT2JqZWN0LmxhYmVsLHZhbHVlOmxpbmtFbH0pO30pO319CmlmKGV2ZW50LmFzc29jaWF0ZWRBbGVydHMubGVuZ3RoKXtjb25zdCBhbGVydFN1YlJvd3M9W107ZXZlbnQuYXNzb2NpYXRlZEFsZXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGFsZXJ0KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyLm1vZGVsLkV2ZW50U2V0KGFsZXJ0KTt9LGFsZXJ0LmluZm8uZGVzY3JpcHRpb24pO2FsZXJ0U3ViUm93cy5wdXNoKHtuYW1lOmFsZXJ0LnRpdGxlLHZhbHVlOmxpbmtFbH0pO30pO3Jvd3MucHVzaCh7bmFtZTonQWxlcnRzJyx2YWx1ZTonJyxpc0V4cGFuZGVkOnRydWUsc3ViUm93czphbGVydFN1YlJvd3N9KTt9CnJldHVybiByb3dzO30sZ2V0RXZlbnRSb3dzXyhldmVudCl7aWYodGhpcy5pc0Zsb3cpe3JldHVybiB0aGlzLmdldEZsb3dFdmVudFJvd3NfKGV2ZW50KTt9CnJldHVybiB0aGlzLmdldEV2ZW50Um93c0hlbHBlcl8oZXZlbnQpO30sYWRkQXJnc1RvUm93c18ocm93cyxhcmdzKXtsZXQgbj0wO2Zvcihjb25zdCBhcmdOYW1lIGluIGFyZ3Mpe24rPTE7fQppZihuPjApe2NvbnN0IHN1YlJvd3M9W107Zm9yKGNvbnN0IGFyZ05hbWUgaW4gYXJncyl7bis9MTt9CmlmKG4+MCl7Y29uc3Qgc3ViUm93cz1bXTtmb3IoY29uc3QgYXJnTmFtZSBpbiBhcmdzKXtjb25zdCBhcmdWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldycpO2FyZ1ZpZXcub2JqZWN0PWFyZ3NbYXJnTmFtZV07c3ViUm93cy5wdXNoKHtuYW1lOmFyZ05hbWUsdmFsdWU6YXJnVmlld30pO30Kcm93cy5wdXNoKHtuYW1lOidBcmdzJyx2YWx1ZTonJyxpc0V4cGFuZGVkOnRydWUsc3ViUm93c30pO319fSxhZGRDb250ZXh0c1RvUm93c18ocm93cyxjb250ZXh0cyl7aWYoY29udGV4dHMubGVuZ3RoKXtjb25zdCBzdWJSb3dzPWNvbnRleHRzLm1hcChmdW5jdGlvbihjb250ZXh0KXtjb25zdCBjb250ZXh0Vmlldz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTtjb250ZXh0Vmlldy5vYmplY3Q9Y29udGV4dDtyZXR1cm57bmFtZTonQ29udGV4dCcsdmFsdWU6Y29udGV4dFZpZXd9O30pO3Jvd3MucHVzaCh7bmFtZTonQ29udGV4dHMnLHZhbHVlOicnLGlzRXhwYW5kZWQ6dHJ1ZSxzdWJSb3dzfSk7fX0sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5jdXJyZW50U2VsZWN0aW9uXz09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnJvd3M9W107dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQpjb25zdCBldmVudD10ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pO2NvbnN0IHJvd3M9dGhpcy5nZXRFdmVudFJvd3NfKGV2ZW50KTtpZihldmVudC5hcmdzU3RyaXBwZWQpe3Jvd3MucHVzaCh7bmFtZTonQXJncycsdmFsdWU6J1N0cmlwcGVkJ30pO31lbHNle3RoaXMuYWRkQXJnc1RvUm93c18ocm93cyxldmVudC5hcmdzKTt9CnRoaXMuYWRkQ29udGV4dHNUb1Jvd3NfKHJvd3MsZXZlbnQuY29udGV4dHMpO2NvbnN0IGN1c3RvbWl6ZVJvd3NFdmVudD1uZXcgdHIuYi5FdmVudCgnY3VzdG9taXplLXJvd3MnKTtjdXN0b21pemVSb3dzRXZlbnQucm93cz1yb3dzO3RoaXMuZGlzcGF0Y2hFdmVudChjdXN0b21pemVSb3dzRXZlbnQpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUucmVidWlsZCgpO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtY2hyb21lLWNjLXJhc3Rlci10YXNrLXZpZXcnLGNyZWF0ZWQoKXt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbHVtbnNfKGhhZENwdUR1cmF0aW9ucyl7Y29uc3QgdGltZVNwYW5Db25maWc9e3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fTtjb25zdCBjb2x1bW5zPVt7dGl0bGU6J0xheWVyJyx2YWx1ZShyb3cpe2lmKHJvdy5pc1RvdGFscylyZXR1cm4nVG90YWxzJztpZihyb3cubGF5ZXIpe2NvbnN0IGxpbmtFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChmdW5jdGlvbigpe3JldHVybiBuZXcgdHIudWkuZS5jaHJvbWUuY2MuTGF5ZXJTZWxlY3Rpb24ocm93LmxheWVyKTt9LCdMYXllciAnK3Jvdy5sYXllcklkKTtyZXR1cm4gbGlua0VsO30KcmV0dXJuJ0xheWVyICcrcm93LmxheWVySWQ7fSx3aWR0aDonMjUwcHgnfSx7dGl0bGU6J051bSBUaWxlcycsdmFsdWUocm93KXtyZXR1cm4gcm93Lm51bVRpbGVzO30sY21wKGEsYil7cmV0dXJuIGEubnVtVGlsZXMtYi5udW1UaWxlczt9fSx7dGl0bGU6J051bSBBbmFseXNpcyBUYXNrcycsdmFsdWUocm93KXtyZXR1cm4gcm93Lm51bUFuYWx5c2lzVGFza3M7fSxjbXAoYSxiKXtyZXR1cm4gYS5udW1BbmFseXNpc1Rhc2tzLWIubnVtQW5hbHlzaXNUYXNrczt9fSx7dGl0bGU6J051bSBSYXN0ZXIgVGFza3MnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1SYXN0ZXJUYXNrczt9LGNtcChhLGIpe3JldHVybiBhLm51bVJhc3RlclRhc2tzLWIubnVtUmFzdGVyVGFza3M7fX0se3RpdGxlOidXYWxsIER1cmF0aW9uIChtcyknLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuZHVyYXRpb24sdGltZVNwYW5Db25maWcpO30sY21wKGEsYil7cmV0dXJuIGEuZHVyYXRpb24tYi5kdXJhdGlvbjt9fV07aWYoaGFkQ3B1RHVyYXRpb25zKXtjb2x1bW5zLnB1c2goe3RpdGxlOidDUFUgRHVyYXRpb24gKG1zKScsdmFsdWUocm93KXtyZXR1cm4gdHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy5jcHVEdXJhdGlvbix0aW1lU3BhbkNvbmZpZyk7fSxjbXAoYSxiKXtyZXR1cm4gYS5jcHVEdXJhdGlvbi1iLmNwdUR1cmF0aW9uO319KTt9CmxldCBjb2xXaWR0aFBlcmNlbnRhZ2U7aWYoY29sdW1ucy5sZW5ndGg9PT0xKXtjb2xXaWR0aFBlcmNlbnRhZ2U9JzEwMCUnO31lbHNle2NvbFdpZHRoUGVyY2VudGFnZT0oMTAwLyhjb2x1bW5zLmxlbmd0aC0xKSkudG9GaXhlZCgzKSsnJSc7fQpmb3IobGV0IGk9MTtpPGNvbHVtbnMubGVuZ3RoO2krKyl7Y29sdW1uc1tpXS53aWR0aD1jb2xXaWR0aFBlcmNlbnRhZ2U7fQp0aGlzLiQuY29udGVudC50YWJsZUNvbHVtbnM9Y29sdW1uczt0aGlzLiQuY29udGVudC5zb3J0Q29sdW1uSW5kZXg9Y29sdW1ucy5sZW5ndGgtMTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHRhYmxlPXRoaXMuJC5jb250ZW50O2lmKHRoaXMuc2VsZWN0aW9uXy5sZW5ndGg9PT0wKXt0aGlzLiQubGluay5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHVuZGVmaW5lZCwnJyk7dGFibGUudGFibGVSb3dzPVtdO3RhYmxlLmZvb3RlclJvd3M9W107dGFibGUucmVidWlsZCgpO3JldHVybjt9CmNvbnN0IGx0aGk9dHIuZS5jYy5nZXRUaWxlRnJvbVJhc3RlclRhc2tTbGljZSh0ci5iLmdldEZpcnN0RWxlbWVudCh0aGlzLnNlbGVjdGlvbl8pKS5jb250YWluaW5nU25hcHNob3Q7dGhpcy4kLmxpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudChmdW5jdGlvbigpe3JldHVybiBuZXcgdHIubW9kZWwuRXZlbnRTZXQobHRoaSk7fSxsdGhpLnVzZXJGcmllbmRseU5hbWUpO2NvbnN0IGNvc3RzQnlMYXllcklkPXt9O2Z1bmN0aW9uIGdldEN1cnJlbnRDb3N0c0ZvckxheWVySWQodGlsZSl7Y29uc3QgbGF5ZXJJZD10aWxlLmxheWVySWQ7Y29uc3QgbHRoaT10aWxlLmNvbnRhaW5pbmdTbmFwc2hvdDtsZXQgbGF5ZXI7aWYobHRoaS5hY3RpdmVUcmVlKXtsYXllcj1sdGhpLmFjdGl2ZVRyZWUuZmluZExheWVyV2l0aElkKGxheWVySWQpO30KaWYobGF5ZXI9PT11bmRlZmluZWQmJmx0aGkucGVuZGluZ1RyZWUpe2xheWVyPWx0aGkucGVuZGluZ1RyZWUuZmluZExheWVyV2l0aElkKGxheWVySWQpO30KaWYoY29zdHNCeUxheWVySWRbbGF5ZXJJZF09PT11bmRlZmluZWQpe2Nvc3RzQnlMYXllcklkW2xheWVySWRdPXtsYXllcklkLGxheWVyLG51bVRpbGVzOjAsbnVtQW5hbHlzaXNUYXNrczowLG51bVJhc3RlclRhc2tzOjAsZHVyYXRpb246MCxjcHVEdXJhdGlvbjowfTt9CnJldHVybiBjb3N0c0J5TGF5ZXJJZFtsYXllcklkXTt9CmxldCB0b3RhbER1cmF0aW9uPTA7bGV0IHRvdGFsQ3B1RHVyYXRpb249MDtsZXQgdG90YWxOdW1BbmFseXplVGFza3M9MDtsZXQgdG90YWxOdW1SYXN0ZXJpemVUYXNrcz0wO2xldCBoYWRDcHVEdXJhdGlvbnM9ZmFsc2U7Y29uc3QgdGlsZXNUaGF0V2VIYXZlU2Vlbj17fTt0aGlzLnNlbGVjdGlvbl8uZm9yRWFjaChmdW5jdGlvbihzbGljZSl7Y29uc3QgdGlsZT10ci5lLmNjLmdldFRpbGVGcm9tUmFzdGVyVGFza1NsaWNlKHNsaWNlKTtjb25zdCBjdXJDb3N0cz1nZXRDdXJyZW50Q29zdHNGb3JMYXllcklkKHRpbGUpO2lmKCF0aWxlc1RoYXRXZUhhdmVTZWVuW3RpbGUub2JqZWN0SW5zdGFuY2UuaWRdKXt0aWxlc1RoYXRXZUhhdmVTZWVuW3RpbGUub2JqZWN0SW5zdGFuY2UuaWRdPXRydWU7Y3VyQ29zdHMubnVtVGlsZXMrPTE7fQppZih0ci5lLmNjLmlzU2xpY2VEb2luZ0FuYWx5c2lzKHNsaWNlKSl7Y3VyQ29zdHMubnVtQW5hbHlzaXNUYXNrcys9MTt0b3RhbE51bUFuYWx5emVUYXNrcys9MTt9ZWxzZXtjdXJDb3N0cy5udW1SYXN0ZXJUYXNrcys9MTt0b3RhbE51bVJhc3Rlcml6ZVRhc2tzKz0xO30KY3VyQ29zdHMuZHVyYXRpb24rPXNsaWNlLmR1cmF0aW9uO3RvdGFsRHVyYXRpb24rPXNsaWNlLmR1cmF0aW9uO2lmKHNsaWNlLmNwdUR1cmF0aW9uIT09dW5kZWZpbmVkKXtjdXJDb3N0cy5jcHVEdXJhdGlvbis9c2xpY2UuY3B1RHVyYXRpb247dG90YWxDcHVEdXJhdGlvbis9c2xpY2UuY3B1RHVyYXRpb247aGFkQ3B1RHVyYXRpb25zPXRydWU7fX0pO3RoaXMudXBkYXRlQ29sdW1uc18oaGFkQ3B1RHVyYXRpb25zKTt0YWJsZS50YWJsZVJvd3M9T2JqZWN0LnZhbHVlcyhjb3N0c0J5TGF5ZXJJZCk7dGFibGUucmVidWlsZCgpO3RhYmxlLmZvb3RlclJvd3M9W3tpc1RvdGFsczp0cnVlLG51bVRpbGVzOk9iamVjdC5rZXlzKHRpbGVzVGhhdFdlSGF2ZVNlZW4pLmxlbmd0aCxudW1BbmFseXNpc1Rhc2tzOnRvdGFsTnVtQW5hbHl6ZVRhc2tzLG51bVJhc3RlclRhc2tzOnRvdGFsTnVtUmFzdGVyaXplVGFza3MsZHVyYXRpb246dG90YWxEdXJhdGlvbixjcHVEdXJhdGlvbjp0b3RhbENwdUR1cmF0aW9ufV07fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuY2MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gUmFzdGVyVGFza1NlbGVjdGlvbihzZWxlY3Rpb24pe3RyLnVpLmUuY2hyb21lLmNjLlNlbGVjdGlvbi5jYWxsKHRoaXMpO2NvbnN0IHdoeVN1cHBvcnRlZD1SYXN0ZXJUYXNrU2VsZWN0aW9uLndoeVN1cG9ydGVkKHNlbGVjdGlvbik7aWYoIXdoeVN1cHBvcnRlZC5vayl7dGhyb3cgbmV3IEVycm9yKCdGYWlsOiAnK3doeVN1cHBvcnRlZC53aHkpO30KdGhpcy5zbGljZXNfPUFycmF5LmZyb20oc2VsZWN0aW9uKTt0aGlzLnRpbGVzXz10aGlzLnNsaWNlc18ubWFwKGZ1bmN0aW9uKHNsaWNlKXtjb25zdCB0aWxlPXRyLmUuY2MuZ2V0VGlsZUZyb21SYXN0ZXJUYXNrU2xpY2Uoc2xpY2UpO2lmKHRpbGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignVGhpcyBzaG91bGQgbmV2ZXIgaGFwcGVuIGR1ZSB0byAuc3VwcG9ydHMgY2hlY2suJyk7fQpyZXR1cm4gdGlsZTt9KTt9ClJhc3RlclRhc2tTZWxlY3Rpb24ud2h5U3Vwb3J0ZWQ9ZnVuY3Rpb24oc2VsZWN0aW9uKXtpZighKHNlbGVjdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLkV2ZW50U2V0KSl7cmV0dXJue29rOmZhbHNlLHdoeTonTXVzdCBiZSBzZWxlY3Rpb24nfTt9CmlmKHNlbGVjdGlvbi5sZW5ndGg9PT0wKXtyZXR1cm57b2s6ZmFsc2Usd2h5OidTZWxlY3Rpb24gbXVzdCBiZSBub24gZW1wdHknfTt9CmxldCByZWZlcmVuY2VTbmFwc2hvdD11bmRlZmluZWQ7Zm9yKGNvbnN0IGV2ZW50IG9mIHNlbGVjdGlvbil7aWYoIShldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLlNsaWNlKSl7cmV0dXJue29rOmZhbHNlLHdoeTonTm90IGEgc2xpY2UnfTt9CmNvbnN0IHRpbGU9dHIuZS5jYy5nZXRUaWxlRnJvbVJhc3RlclRhc2tTbGljZShldmVudCk7aWYodGlsZT09PXVuZGVmaW5lZCl7cmV0dXJue29rOmZhbHNlLHdoeTonTm8gdGlsZSBmb3VuZCd9O30KaWYoIXJlZmVyZW5jZVNuYXBzaG90KXtyZWZlcmVuY2VTbmFwc2hvdD10aWxlLmNvbnRhaW5pbmdTbmFwc2hvdDt9ZWxzZXtpZih0aWxlLmNvbnRhaW5pbmdTbmFwc2hvdCE9PXJlZmVyZW5jZVNuYXBzaG90KXtyZXR1cm57b2s6ZmFsc2Usd2h5OidSYXN0ZXIgdGFza3MgYXJlIGZyb20gZGlmZmVyZW50IGNvbXBvc2l0b3IgaW5zdGFuY2VzJ307fX19CnJldHVybntvazp0cnVlfTt9O1Jhc3RlclRhc2tTZWxlY3Rpb24uc3VwcG9ydHM9ZnVuY3Rpb24oc2VsZWN0aW9uKXtyZXR1cm4gUmFzdGVyVGFza1NlbGVjdGlvbi53aHlTdXBvcnRlZChzZWxlY3Rpb24pLm9rO307UmFzdGVyVGFza1NlbGVjdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5lLmNocm9tZS5jYy5TZWxlY3Rpb24ucHJvdG90eXBlLGdldCBzcGVjaWNpZml0eSgpe3JldHVybiAzO30sZ2V0IGFzc29jaWF0ZWRMYXllcklkKCl7Y29uc3QgdGlsZTA9dGhpcy50aWxlc19bMF07Y29uc3QgYWxsU2FtZUxheWVyPXRoaXMudGlsZXNfLmV2ZXJ5KGZ1bmN0aW9uKHRpbGUpe3RpbGUubGF5ZXJJZD09PXRpbGUwLmxheWVySWQ7fSk7aWYoYWxsU2FtZUxheWVyKXtyZXR1cm4gdGlsZTAubGF5ZXJJZDt9CnJldHVybiB1bmRlZmluZWQ7fSxnZXQgZXh0cmFIaWdobGlnaHRzQnlMYXllcklkKCl7Y29uc3QgaGlnaGxpZ2h0cz17fTt0aGlzLnRpbGVzXy5mb3JFYWNoKGZ1bmN0aW9uKHRpbGUsaSl7aWYoaGlnaGxpZ2h0c1t0aWxlLmxheWVySWRdPT09dW5kZWZpbmVkKXtoaWdobGlnaHRzW3RpbGUubGF5ZXJJZF09W107fQpjb25zdCBzbGljZT10aGlzLnNsaWNlc19baV07aGlnaGxpZ2h0c1t0aWxlLmxheWVySWRdLnB1c2goe2NvbG9yS2V5OnNsaWNlLnRpdGxlLHJlY3Q6dGlsZS5sYXllclJlY3R9KTt9LHRoaXMpO3JldHVybiBoaWdobGlnaHRzO30sY3JlYXRlQW5hbHlzaXMoKXtjb25zdCBzZWw9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5zbGljZXNfLmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe3NlbC5wdXNoKHNsaWNlKTt9KTtsZXQgYW5hbHlzaXM7aWYoc2VsLmxlbmd0aD09PTEpe2FuYWx5c2lzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtc2luZ2xlLWV2ZW50LXN1Yi12aWV3Jyk7fWVsc2V7YW5hbHlzaXM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY2MtcmFzdGVyLXRhc2stdmlldycpO30KYW5hbHlzaXMuc2VsZWN0aW9uPXNlbDtyZXR1cm4gYW5hbHlzaXM7fSxmaW5kRXF1aXZhbGVudChsdGhpKXtyZXR1cm4gdW5kZWZpbmVkO30sZ2V0IGNvbnRhaW5pbmdTbmFwc2hvdCgpe3JldHVybiB0aGlzLnRpbGVzX1swXS5jb250YWluaW5nU25hcHNob3Q7fX07cmV0dXJue1Jhc3RlclRhc2tTZWxlY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuY2hyb21lLmNjJyxmdW5jdGlvbigpe2NvbnN0IFRpbGVTbmFwc2hvdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtY2hyb21lLWNjLXRpbGUtc25hcHNob3QtdmlldycsdHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3KTtUaWxlU25hcHNob3RWaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5wcm90b3R5cGUsZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0ci11aS1lLWNocm9tZS1jYy10aWxlLXNuYXBzaG90LXZpZXcnKTt0aGlzLmxheWVyVHJlZVZpZXdfPW5ldyB0ci51aS5lLmNocm9tZS5jYy5MYXllclRyZWVIb3N0SW1wbFNuYXBzaG90VmlldygpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMubGF5ZXJUcmVlVmlld18pO30sdXBkYXRlQ29udGVudHMoKXtjb25zdCB0aWxlPXRoaXMub2JqZWN0U25hcHNob3RfO2NvbnN0IGxheWVyVHJlZUhvc3RJbXBsPXRpbGUuY29udGFpbmluZ1NuYXBzaG90O2lmKCFsYXllclRyZWVIb3N0SW1wbClyZXR1cm47dGhpcy5sYXllclRyZWVWaWV3Xy5vYmplY3RTbmFwc2hvdD1sYXllclRyZWVIb3N0SW1wbDt0aGlzLmxheWVyVHJlZVZpZXdfLnNlbGVjdGlvbj1uZXcgdHIudWkuZS5jaHJvbWUuY2MuVGlsZVNlbGVjdGlvbih0aWxlKTt9fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoVGlsZVNuYXBzaG90Vmlldyx7dHlwZU5hbWU6J2NjOjpUaWxlJyxzaG93SW5UcmFja1ZpZXc6ZmFsc2V9KTtyZXR1cm57VGlsZVNuYXBzaG90Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWUtY2hyb21lLWNvZGVzZWFyY2gnLHNldCBzZWFyY2hQaHJhc2UocGhyYXNlKXtjb25zdCBsaW5rPVBvbHltZXIuZG9tKHRoaXMuJC5jb2Rlc2VhcmNoTGluayk7Y29uc3QgY29kZVNlYXJjaFVSTD0naHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvc2VhcmNoLz9zcT1wYWNrYWdlOmNocm9taXVtJnR5cGU9Y3MmcT0nO2xpbmsuc2V0QXR0cmlidXRlKCdocmVmJyxjb2RlU2VhcmNoVVJMK2VuY29kZVVSSUNvbXBvbmVudChwaHJhc2UpKTt9LG9uQ2xpY2soY2xpY2tFdmVudCl7Y2xpY2tFdmVudC5zdG9wUHJvcGFnYXRpb24oKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLmdwdScsZnVuY3Rpb24oKXtjb25zdCBBc3luY1NsaWNlPXRyLm1vZGVsLkFzeW5jU2xpY2U7ZnVuY3Rpb24gR3B1QXN5bmNTbGljZSgpe0FzeW5jU2xpY2UuYXBwbHkodGhpcyxhcmd1bWVudHMpO30KR3B1QXN5bmNTbGljZS5wcm90b3R5cGU9e19fcHJvdG9fXzpBc3luY1NsaWNlLnByb3RvdHlwZSxnZXQgdmlld1N1Ykdyb3VwVGl0bGUoKXtpZih0aGlzLmFyZ3MuY2hhbm5lbCl7aWYodGhpcy5jYXRlZ29yeT09PSdkaXNhYmxlZC1ieS1kZWZhdWx0LWdwdS5kZXZpY2UnKXtyZXR1cm4nRGV2aWNlLicrdGhpcy5hcmdzLmNoYW5uZWw7fQpyZXR1cm4nU2VydmljZS4nK3RoaXMuYXJncy5jaGFubmVsO30KcmV0dXJuIHRoaXMudGl0bGU7fX07QXN5bmNTbGljZS5zdWJUeXBlcy5yZWdpc3RlcihHcHVBc3luY1NsaWNlLHtjYXRlZ29yeVBhcnRzOlsnZGlzYWJsZWQtYnktZGVmYXVsdC1ncHUuZGV2aWNlJywnZGlzYWJsZWQtYnktZGVmYXVsdC1ncHUuc2VydmljZSddfSk7cmV0dXJue0dwdUFzeW5jU2xpY2UsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuZ3B1JyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90PXRyLm1vZGVsLk9iamVjdFNuYXBzaG90O2Z1bmN0aW9uIFN0YXRlU25hcHNob3QoKXtPYmplY3RTbmFwc2hvdC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fQpTdGF0ZVNuYXBzaG90LnByb3RvdHlwZT17X19wcm90b19fOk9iamVjdFNuYXBzaG90LnByb3RvdHlwZSxwcmVJbml0aWFsaXplKCl7dGhpcy5zY3JlZW5zaG90Xz11bmRlZmluZWQ7fSxpbml0aWFsaXplKCl7aWYodGhpcy5hcmdzLnNjcmVlbnNob3Qpe3RoaXMuc2NyZWVuc2hvdF89dGhpcy5hcmdzLnNjcmVlbnNob3Q7fX0sZ2V0IHNjcmVlbnNob3QoKXtyZXR1cm4gdGhpcy5zY3JlZW5zaG90Xzt9fTtPYmplY3RTbmFwc2hvdC5zdWJUeXBlcy5yZWdpc3RlcihTdGF0ZVNuYXBzaG90LHt0eXBlTmFtZTonZ3B1OjpTdGF0ZSd9KTtyZXR1cm57U3RhdGVTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5jaHJvbWUuZ3B1JyxmdW5jdGlvbigpe2NvbnN0IFN0YXRlU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLWNocm9tZS1ncHUtc3RhdGUtc25hcHNob3QtdmlldycsdHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3KTtTdGF0ZVNuYXBzaG90Vmlldy5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucHJvdG90eXBlLGRlY29yYXRlKCl7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndHItdWktZS1jaHJvbWUtZ3B1LXN0YXRlLXNuYXBzaG90LXZpZXcnKTt0aGlzLnNjcmVlbnNob3RJbWFnZV89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5zY3JlZW5zaG90SW1hZ2VfKTt9LHVwZGF0ZUNvbnRlbnRzKCl7aWYodGhpcy5vYmplY3RTbmFwc2hvdF8mJnRoaXMub2JqZWN0U25hcHNob3RfLnNjcmVlbnNob3Qpe3RoaXMuc2NyZWVuc2hvdEltYWdlXy5zcmM9J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCwnKwp0aGlzLm9iamVjdFNuYXBzaG90Xy5zY3JlZW5zaG90O319fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoU3RhdGVTbmFwc2hvdFZpZXcse3R5cGVOYW1lOidncHU6OlN0YXRlJ30pO3JldHVybntTdGF0ZVNuYXBzaG90Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWEtbGF5b3V0LXRyZWUtc3ViLXZpZXcnLGJlaGF2aW9yczpbJ3RyLXVpLWEtc3ViLXZpZXcnXSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuc2V0KCckLmNvbnRlbnQudGV4dENvbnRlbnQnLCcnKTtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm47Y29uc3QgY29sdW1ucz1be3RpdGxlOidUYWcvTmFtZScsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LnRhZ3x8JzonK2xheW91dE9iamVjdC5uYW1lO319LHt0aXRsZTonaHRtbElkJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaHRtbElkfHwnJzt9fSx7dGl0bGU6J2NsYXNzTmFtZXMnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5jbGFzc05hbWVzfHwnJzt9fSx7dGl0bGU6J3JlYXNvbnMnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5uZWVkc0xheW91dFJlYXNvbnMuam9pbignLCAnKTt9fSx7dGl0bGU6J3dpZHRoJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuYWJzb2x1dGVSZWN0LndpZHRoO319LHt0aXRsZTonaGVpZ2h0Jyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuYWJzb2x1dGVSZWN0LmhlaWdodDt9fSx7dGl0bGU6J2Fic1gnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5hYnNvbHV0ZVJlY3QubGVmdDt9fSx7dGl0bGU6J2Fic1knLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5hYnNvbHV0ZVJlY3QudG9wO319LHt0aXRsZToncmVsWCcsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LnJlbGF0aXZlUmVjdC5sZWZ0O319LHt0aXRsZToncmVsWScsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LnJlbGF0aXZlUmVjdC50b3A7fX0se3RpdGxlOidmbG9hdCcsdmFsdWUobGF5b3V0T2JqZWN0KXtyZXR1cm4gbGF5b3V0T2JqZWN0LmlzRmxvYXQ/J2Zsb2F0JzonJzt9fSx7dGl0bGU6J3Bvc2l0aW9uZWQnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5pc1Bvc2l0aW9uZWQ/J3Bvc2l0aW9uZWQnOicnO319LHt0aXRsZToncmVsYXRpdmUnLHZhbHVlKGxheW91dE9iamVjdCl7cmV0dXJuIGxheW91dE9iamVjdC5pc1JlbGF0aXZlUG9zaXRpb25lZD8ncmVsYXRpdmUnOicnO319LHt0aXRsZTonc3RpY2t5Jyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaXNTdGlja3lQb3NpdGlvbmVkPydzdGlja3knOicnO319LHt0aXRsZTonYW5vbnltb3VzJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaXNBbm9ueW1vdXM/J2Fub255bW91cyc6Jyc7fX0se3RpdGxlOidyb3cnLHZhbHVlKGxheW91dE9iamVjdCl7aWYobGF5b3V0T2JqZWN0LnRhYmxlUm93PT09dW5kZWZpbmVkKXtyZXR1cm4nJzt9CnJldHVybiBsYXlvdXRPYmplY3QudGFibGVSb3c7fX0se3RpdGxlOidjb2wnLHZhbHVlKGxheW91dE9iamVjdCl7aWYobGF5b3V0T2JqZWN0LnRhYmxlQ29sPT09dW5kZWZpbmVkKXtyZXR1cm4nJzt9CnJldHVybiBsYXlvdXRPYmplY3QudGFibGVDb2w7fX0se3RpdGxlOidyb3dTcGFuJyx2YWx1ZShsYXlvdXRPYmplY3Qpe2lmKGxheW91dE9iamVjdC50YWJsZVJvd1NwYW49PT11bmRlZmluZWQpe3JldHVybicnO30KcmV0dXJuIGxheW91dE9iamVjdC50YWJsZVJvd1NwYW47fX0se3RpdGxlOidjb2xTcGFuJyx2YWx1ZShsYXlvdXRPYmplY3Qpe2lmKGxheW91dE9iamVjdC50YWJsZUNvbFNwYW49PT11bmRlZmluZWQpe3JldHVybicnO30KcmV0dXJuIGxheW91dE9iamVjdC50YWJsZUNvbFNwYW47fX0se3RpdGxlOidhZGRyZXNzJyx2YWx1ZShsYXlvdXRPYmplY3Qpe3JldHVybiBsYXlvdXRPYmplY3QuaWQudG9TdHJpbmcoMTYpO319XTtjb25zdCB0YWJsZT10aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi10YWJsZScpO3RhYmxlLmRlZmF1bHRFeHBhbnNpb25TdGF0ZUNhbGxiYWNrPWZ1bmN0aW9uKGxheW91dE9iamVjdCxwYXJlbnRMYXlvdXRPYmplY3Qpe3JldHVybiB0cnVlO307dGFibGUuc3ViUm93c1Byb3BlcnR5TmFtZT0nY2hpbGRMYXlvdXRPYmplY3RzJzt0YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0YWJsZS50YWJsZVJvd3M9dGhpcy5jdXJyZW50U2VsZWN0aW9uXy5tYXAoZnVuY3Rpb24oc25hcHNob3Qpe3JldHVybiBzbmFwc2hvdC5yb290TGF5b3V0T2JqZWN0O30pO3RhYmxlLnJlYnVpbGQoKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQodGFibGUpO30sfSk7cmV0dXJue307fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWxheW91dC10cmVlLXN1Yi12aWV3Jyx0ci5lLmNocm9tZS5MYXlvdXRUcmVlU25hcHNob3Qse211bHRpOmZhbHNlLHRpdGxlOidMYXlvdXQgVHJlZScsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWxheW91dC10cmVlLXN1Yi12aWV3Jyx0ci5lLmNocm9tZS5MYXlvdXRUcmVlU25hcHNob3Qse211bHRpOnRydWUsdGl0bGU6J0xheW91dCBUcmVlcycsfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5lLmltZycsZnVuY3Rpb24oKXtjb25zdCBUSElTX0RPQz1kb2N1bWVudC5jdXJyZW50U2NyaXB0Lm93bmVyRG9jdW1lbnQ7Y29uc3QgSW1hZ2VTbmFwc2hvdFZpZXc9dHIudWkuYi5kZWZpbmUoJ3RyLXVpLWUtaW1nLWltYWdlLXNuYXBzaG90LXZpZXcnLHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyk7SW1hZ2VTbmFwc2hvdFZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuT2JqZWN0U25hcHNob3RWaWV3LnByb3RvdHlwZSxkZWNvcmF0ZSgpe2NvbnN0IG5vZGU9dHIudWkuYi5pbnN0YW50aWF0ZVRlbXBsYXRlKCcjdHItdWktZS1pbWctaW1hZ2Utc25hcHNob3Qtdmlldy10ZW1wbGF0ZScsVEhJU19ET0MpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG5vZGUpO2NvbnN0IGluZm89UG9seW1lci5kb20odGhpcykucXVlcnlTZWxlY3RvcignLmltYWdlLWluZm8nKTt0aGlzLnNpemVJbmZvXz1Qb2x5bWVyLmRvbShpbmZvKS5xdWVyeVNlbGVjdG9yKCcuc2l6ZScpO3RoaXMuaW1hZ2VDb250YWluZXJfPVBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJy5pbWFnZS1jb250YWluZXInKTt0aGlzLmltYWdlXz1Qb2x5bWVyLmRvbSh0aGlzLmltYWdlQ29udGFpbmVyXykucXVlcnlTZWxlY3RvcignaW1nJyk7dGhpcy56b29tU2NhbGVWYWx1ZV89MTt0aGlzLnRyYWNrTW91c2VfKCk7fSx1cGRhdGVDb250ZW50cygpe2lmKHRoaXMub2JqZWN0U25hcHNob3RfJiZ0aGlzLm9iamVjdFNuYXBzaG90Xy5kYXRhJiZ0aGlzLm9iamVjdFNuYXBzaG90Xy50eXBlKXt0aGlzLmltYWdlXy5vbmxvYWQ9dGhpcy5kcmF3UGljdHVyZV8uYmluZCh0aGlzKTt0aGlzLmltYWdlXy5zcmM9YGRhdGE6aW1hZ2UvJHt0aGlzLm9iamVjdFNuYXBzaG90Xy50eXBlfTtgK2BiYXNlNjQsJHt0aGlzLm9iamVjdFNuYXBzaG90Xy5kYXRhfWA7fQp0aGlzLmRyYXdQaWN0dXJlXygpO30sZHJhd1BpY3R1cmVfKCl7aWYoIXRoaXMuaW1hZ2VfLmNvbXBsZXRlKXJldHVybjtjb25zdCBuYXR1cmFsV2lkdGg9dGhpcy5pbWFnZV8ubmF0dXJhbFdpZHRoO2NvbnN0IG5hdHVyYWxIZWlnaHQ9dGhpcy5pbWFnZV8ubmF0dXJhbEhlaWdodDt0aGlzLnNpemVJbmZvXy50ZXh0Q29udGVudD1gKCR7bmF0dXJhbFdpZHRofSB4ICR7bmF0dXJhbEhlaWdodH0pYDt0aGlzLmltYWdlXy53aWR0aD1uYXR1cmFsV2lkdGgqdGhpcy56b29tU2NhbGVWYWx1ZV87dGhpcy5pbWFnZV8uaGVpZ2h0PW5hdHVyYWxIZWlnaHQqdGhpcy56b29tU2NhbGVWYWx1ZV87fSx0cmFja01vdXNlXygpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcy5pbWFnZUNvbnRhaW5lcl87UG9seW1lci5kb20odGhpcy5pbWFnZUNvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHRoaXMubW91c2VNb2RlU2VsZWN0b3JfKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zdXBwb3J0ZWRNb2RlTWFzaz10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREUuWk9PTTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5tb2RlPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmRlZmF1bHRNb2RlPXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5aT09NO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldHRpbmdzS2V5PSdwaWN0dXJlRGVidWdnZXIubW91c2VNb2RlU2VsZWN0b3InO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2luem9vbScsdGhpcy5vbkJlZ2luWm9vbV8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcigndXBkYXRlem9vbScsdGhpcy5vblVwZGF0ZVpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHpvb20nLHRoaXMub25FbmRab29tXy5iaW5kKHRoaXMpKTt9LG9uQmVnaW5ab29tXyhlKXt0aGlzLmlzWm9vbWluZ189dHJ1ZTt0aGlzLmxhc3RNb3VzZVZpZXdQb3NfPXRoaXMuZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSk7ZS5wcmV2ZW50RGVmYXVsdCgpO30sb25VcGRhdGVab29tXyhlKXtpZighdGhpcy5pc1pvb21pbmdfKXJldHVybjtjb25zdCBjdXJyZW50TW91c2VWaWV3UG9zPXRoaXMuZXh0cmFjdFJlbGF0aXZlTW91c2VQb3NpdGlvbl8oZSk7dGhpcy56b29tU2NhbGVWYWx1ZV8rPSgodGhpcy5sYXN0TW91c2VWaWV3UG9zXy55LWN1cnJlbnRNb3VzZVZpZXdQb3MueSkqMC4wMDEpO3RoaXMuem9vbVNjYWxlVmFsdWVfPU1hdGgubWF4KHRoaXMuem9vbVNjYWxlVmFsdWVfLDAuMSk7dGhpcy5kcmF3UGljdHVyZV8oKTt0aGlzLmxhc3RNb3VzZVZpZXdQb3NfPWN1cnJlbnRNb3VzZVZpZXdQb3M7fSxvbkVuZFpvb21fKGUpe3RoaXMubGFzdE1vdXNlVmlld1Bvc189dW5kZWZpbmVkO3RoaXMuaXNab29taW5nXz1mYWxzZTtlLnByZXZlbnREZWZhdWx0KCk7fSxleHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKXtyZXR1cm57eDplLmNsaWVudFgtdGhpcy5pbWFnZUNvbnRhaW5lcl8ub2Zmc2V0TGVmdCx5OmUuY2xpZW50WS10aGlzLmltYWdlQ29udGFpbmVyXy5vZmZzZXRUb3B9O30sfTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoSW1hZ2VTbmFwc2hvdFZpZXcse3R5cGVOYW1lOidnZng6OkltYWdlJ30pO3JldHVybntJbWFnZVNuYXBzaG90Vmlldyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYmVoYXZpb3JzJyxmdW5jdGlvbigpe2NvbnN0IFNpZGVQYW5lbD17Z2V0IHJhbmdlT2ZJbnRlcmVzdCgpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxzZXQgcmFuZ2VPZkludGVyZXN0KHJhbmdlT2ZJbnRlcmVzdCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldCBzZWxlY3Rpb24oKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxnZXQgbW9kZWwoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc2V0IG1vZGVsKG1vZGVsKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO30sc3VwcG9ydHNNb2RlbChtKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O3JldHVybntTaWRlUGFuZWwsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnNpZGVfcGFuZWwnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gU2lkZVBhbmVsUmVnaXN0cnkoKXt9CmNvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFNpZGVQYW5lbFJlZ2lzdHJ5LG9wdGlvbnMpO3JldHVybntTaWRlUGFuZWxSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS5zJyxmdW5jdGlvbigpe2NvbnN0IEJsYW1lQ29udGV4dFNuYXBzaG90PXRyLmUuY2hyb21lLkJsYW1lQ29udGV4dFNuYXBzaG90O2NvbnN0IEZyYW1lVHJlZU5vZGVTbmFwc2hvdD10ci5lLmNocm9tZS5GcmFtZVRyZWVOb2RlU25hcHNob3Q7Y29uc3QgUmVuZGVyRnJhbWVTbmFwc2hvdD10ci5lLmNocm9tZS5SZW5kZXJGcmFtZVNuYXBzaG90O2NvbnN0IFRvcExldmVsU25hcHNob3Q9dHIuZS5jaHJvbWUuVG9wTGV2ZWxTbmFwc2hvdDtjb25zdCBCbGFtZUNvbnRleHRJbnN0YW5jZT10ci5lLmNocm9tZS5CbGFtZUNvbnRleHRJbnN0YW5jZTtjb25zdCBGcmFtZVRyZWVOb2RlSW5zdGFuY2U9dHIuZS5jaHJvbWUuRnJhbWVUcmVlTm9kZUluc3RhbmNlO2NvbnN0IFJlbmRlckZyYW1lSW5zdGFuY2U9dHIuZS5jaHJvbWUuUmVuZGVyRnJhbWVJbnN0YW5jZTtjb25zdCBUb3BMZXZlbEluc3RhbmNlPXRyLmUuY2hyb21lLlRvcExldmVsSW5zdGFuY2U7ZnVuY3Rpb24gUm93KGNvbnRleHQpe3RoaXMuc3ViUm93cz11bmRlZmluZWQ7dGhpcy5jb250ZXh0cz1bXTt0aGlzLnR5cGU9dW5kZWZpbmVkO3RoaXMucmVuZGVyZXI9J04vQSc7dGhpcy51cmw9dW5kZWZpbmVkO3RoaXMudGltZT0wO3RoaXMuZXZlbnRzT2ZJbnRlcmVzdD1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtpZihjb250ZXh0PT09dW5kZWZpbmVkKXJldHVybjt0aGlzLnR5cGU9Y29udGV4dC5vYmplY3RJbnN0YW5jZS5ibGFtZUNvbnRleHRUeXBlO3RoaXMuY29udGV4dHMucHVzaChjb250ZXh0KTtpZihjb250ZXh0IGluc3RhbmNlb2YgRnJhbWVUcmVlTm9kZVNuYXBzaG90KXtpZihjb250ZXh0LnJlbmRlckZyYW1lKXt0aGlzLmNvbnRleHRzLnB1c2goY29udGV4dC5yZW5kZXJGcmFtZSk7dGhpcy5yZW5kZXJlcj1jb250ZXh0LnJlbmRlckZyYW1lLm9iamVjdEluc3RhbmNlLnBhcmVudC5waWQ7fX1lbHNlIGlmKGNvbnRleHQgaW5zdGFuY2VvZiBSZW5kZXJGcmFtZVNuYXBzaG90KXtpZihjb250ZXh0LmZyYW1lVHJlZU5vZGUpe3RoaXMuY29udGV4dHMucHVzaChjb250ZXh0LmZyYW1lVHJlZU5vZGUpO30KdGhpcy5yZW5kZXJlcj1jb250ZXh0Lm9iamVjdEluc3RhbmNlLnBhcmVudC5waWQ7fWVsc2UgaWYoY29udGV4dCBpbnN0YW5jZW9mIFRvcExldmVsU25hcHNob3Qpe3RoaXMucmVuZGVyZXI9Y29udGV4dC5vYmplY3RJbnN0YW5jZS5wYXJlbnQucGlkO31lbHNle3Rocm93IG5ldyBFcnJvcignVW5rbm93biBjb250ZXh0IHR5cGUnKTt9CnRoaXMuZXZlbnRzT2ZJbnRlcmVzdC5hZGRFdmVudFNldCh0aGlzLmNvbnRleHRzKTt0aGlzLnVybD1jb250ZXh0LnVybDt9CmNvbnN0IGdyb3VwRnVuY3Rpb25zPXtub25lOnJvd3M9PnJvd3MsdHJlZShyb3dzLHJvd01hcCl7Y29uc3QgZ2V0UGFyZW50Um93PWZ1bmN0aW9uKHJvdyl7bGV0IHBpdm90O3Jvdy5jb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRleHQpe2lmKGNvbnRleHQgaW5zdGFuY2VvZiB0ci5lLmNocm9tZS5GcmFtZVRyZWVOb2RlU25hcHNob3Qpe3Bpdm90PWNvbnRleHQ7fX0pO2lmKHBpdm90JiZwaXZvdC5wYXJlbnRDb250ZXh0KXtyZXR1cm4gcm93TWFwW3Bpdm90LnBhcmVudENvbnRleHQuZ3VpZF07fQpyZXR1cm4gdW5kZWZpbmVkO307Y29uc3Qgcm9vdFJvd3M9W107cm93cy5mb3JFYWNoKGZ1bmN0aW9uKHJvdyl7Y29uc3QgcGFyZW50Um93PWdldFBhcmVudFJvdyhyb3cpO2lmKHBhcmVudFJvdz09PXVuZGVmaW5lZCl7cm9vdFJvd3MucHVzaChyb3cpO3JldHVybjt9CmlmKHBhcmVudFJvdy5zdWJSb3dzPT09dW5kZWZpbmVkKXtwYXJlbnRSb3cuc3ViUm93cz1bXTt9CnBhcmVudFJvdy5zdWJSb3dzLnB1c2gocm93KTt9KTtjb25zdCBhZ2dyZWdhdGVBbGxEZXNjZW5kYW50cz1mdW5jdGlvbihyb3cpe2lmKCFyb3cuc3ViUm93cyl7aWYoZ2V0UGFyZW50Um93KHJvdykpe3Jvdy50eXBlPSdTdWJmcmFtZSc7fQpyZXR1cm4gcm93O30KY29uc3QgcmVzdWx0PW5ldyBSb3coKTtyZXN1bHQudHlwZT0nRnJhbWUgVHJlZSc7cmVzdWx0LnJlbmRlcmVyPXJvdy5yZW5kZXJlcjtyZXN1bHQudXJsPXJvdy51cmw7cmVzdWx0LnN1YlJvd3M9W3Jvd107cm93LnN1YlJvd3MuZm9yRWFjaChzdWJSb3c9PnJlc3VsdC5zdWJSb3dzLnB1c2goYWdncmVnYXRlQWxsRGVzY2VuZGFudHMoc3ViUm93KSkpO3Jlc3VsdC5zdWJSb3dzLmZvckVhY2goZnVuY3Rpb24oc3ViUm93KXtyZXN1bHQudGltZSs9c3ViUm93LnRpbWU7cmVzdWx0LmV2ZW50c09mSW50ZXJlc3QuYWRkRXZlbnRTZXQoc3ViUm93LmV2ZW50c09mSW50ZXJlc3QpO30pO3Jvdy5zdWJSb3dzPXVuZGVmaW5lZDtyZXR1cm4gcmVzdWx0O307cmV0dXJuIHJvb3RSb3dzLm1hcChyb290Um93PT5hZ2dyZWdhdGVBbGxEZXNjZW5kYW50cyhyb290Um93KSk7fX07UG9seW1lcih7aXM6J3RyLXVpLWUtcy1mcmFtZS1kYXRhLXNpZGUtcGFuZWwnLGJlaGF2aW9yczpbdHIudWkuYmVoYXZpb3JzLlNpZGVQYW5lbF0scmVhZHkoKXt0aGlzLm1vZGVsXz11bmRlZmluZWQ7dGhpcy5yYW5nZU9mSW50ZXJlc3RfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLiQudGFibGUuc2hvd0hlYWRlcj10cnVlO3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz10aGlzLmNyZWF0ZUZyYW1lRGF0YVRhYmxlQ29sdW1uc18oKTt0aGlzLiQudGFibGUuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLGZ1bmN0aW9uKGUpe3RoaXMuc2VsZWN0RXZlbnRTZXRfKHRoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlUm93LmV2ZW50c09mSW50ZXJlc3QpO30uYmluZCh0aGlzKSk7dGhpcy4kLnNlbGVjdC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGZ1bmN0aW9uKGUpe3RoaXMudXBkYXRlQ29udGVudHNfKCk7fS5iaW5kKHRoaXMpKTt9LHNlbGVjdEV2ZW50U2V0XyhldmVudFNldCl7Y29uc3QgZXZlbnQ9bmV3IHRyLm1vZGVsLlJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO2V2ZW50LnNlbGVjdGlvbj1ldmVudFNldDt0aGlzLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30sY3JlYXRlRnJhbWVEYXRhVGFibGVDb2x1bW5zXygpe3JldHVyblt7dGl0bGU6J1JlbmRlcmVyJyx2YWx1ZTpyb3c9PnJvdy5yZW5kZXJlcixjbXA6KGEsYik9PmEucmVuZGVyZXItYi5yZW5kZXJlcn0se3RpdGxlOidUeXBlJyx2YWx1ZTpyb3c9PnJvdy50eXBlfSx7dGl0bGU6J1RpbWUnLHZhbHVlOnJvdz0+dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy50aW1lLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyxvd25lckRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudH0pLGNtcDooYSxiKT0+YS50aW1lLWIudGltZX0se3RpdGxlOidVUkwnLHZhbHVlOnJvdz0+cm93LnVybCxjbXA6KGEsYik9PihhLnVybHx8JycpLmxvY2FsZUNvbXBhcmUoYi51cmx8fCcnKX1dO30sY3JlYXRlRnJhbWVEYXRhVGFibGVSb3dzXygpe2lmKCF0aGlzLm1vZGVsXylyZXR1cm5bXTtjb25zdCByb3dzPVtdO2NvbnN0IHJvd01hcD17fTtmb3IoY29uc3QgcHJvYyBvZiBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxfLnByb2Nlc3Nlcykpe3Byb2Mub2JqZWN0cy5pdGVyT2JqZWN0SW5zdGFuY2VzKGZ1bmN0aW9uKG9iamVjdEluc3RhbmNlKXtpZighKG9iamVjdEluc3RhbmNlIGluc3RhbmNlb2YgQmxhbWVDb250ZXh0SW5zdGFuY2UpKXtyZXR1cm47fQpvYmplY3RJbnN0YW5jZS5zbmFwc2hvdHMuZm9yRWFjaChmdW5jdGlvbihzbmFwc2hvdCl7aWYocm93TWFwW3NuYXBzaG90Lmd1aWRdKXJldHVybjtjb25zdCByb3c9bmV3IFJvdyhzbmFwc2hvdCk7cm93LmNvbnRleHRzLmZvckVhY2goY29udGV4dD0+cm93TWFwW2NvbnRleHQuZ3VpZF09cm93KTtyb3dzLnB1c2gocm93KTt9LHRoaXMpO30sdGhpcyk7fQpmb3IoY29uc3QgcHJvYyBvZiBPYmplY3QudmFsdWVzKHRoaXMubW9kZWxfLnByb2Nlc3Nlcykpe2Zvcihjb25zdCB0aHJlYWQgb2YgT2JqZWN0LnZhbHVlcyhwcm9jLnRocmVhZHMpKXt0aHJlYWQuc2xpY2VHcm91cC5pdGVyU2xpY2VzSW5UaW1lUmFuZ2UoZnVuY3Rpb24odG9wTGV2ZWxTbGljZSl7dG9wTGV2ZWxTbGljZS5jb250ZXh0cy5mb3JFYWNoKGZ1bmN0aW9uKGNvbnRleHQpe2lmKCFjb250ZXh0LnNuYXBzaG90Lmd1aWR8fCFyb3dNYXBbY29udGV4dC5zbmFwc2hvdC5ndWlkXSl7cmV0dXJuO30KY29uc3Qgcm93PXJvd01hcFtjb250ZXh0LnNuYXBzaG90Lmd1aWRdO3Jvdy5ldmVudHNPZkludGVyZXN0LnB1c2godG9wTGV2ZWxTbGljZSk7cm93LnRpbWUrPXRvcExldmVsU2xpY2Uuc2VsZlRpbWV8fDA7fSk7fSx0aGlzLmN1cnJlbnRSYW5nZU9mSW50ZXJlc3QubWluLHRoaXMuY3VycmVudFJhbmdlT2ZJbnRlcmVzdC5tYXgpO319CmNvbnN0IHNlbGVjdD10aGlzLiQuc2VsZWN0O2NvbnN0IGdyb3VwT3B0aW9uPXNlbGVjdC5vcHRpb25zW3NlbGVjdC5zZWxlY3RlZEluZGV4XS52YWx1ZTtjb25zdCBncm91cEZ1bmN0aW9uPWdyb3VwRnVuY3Rpb25zW2dyb3VwT3B0aW9uXTtyZXR1cm4gZ3JvdXBGdW5jdGlvbihyb3dzLHJvd01hcCk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMuY3JlYXRlRnJhbWVEYXRhVGFibGVSb3dzXygpO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSxzdXBwb3J0c01vZGVsKG0pe2lmKCFtKXtyZXR1cm57c3VwcG9ydGVkOmZhbHNlLHJlYXNvbjonTm8gbW9kZWwgYXZhaWxhYmxlLid9O30KY29uc3QgYW5zPXtzdXBwb3J0ZWQ6ZmFsc2V9O2Zvcihjb25zdCBwcm9jIG9mIE9iamVjdC52YWx1ZXMobS5wcm9jZXNzZXMpKXtwcm9jLm9iamVjdHMuaXRlck9iamVjdEluc3RhbmNlcyhmdW5jdGlvbihpbnN0YW5jZSl7aWYoaW5zdGFuY2UgaW5zdGFuY2VvZiBCbGFtZUNvbnRleHRJbnN0YW5jZSl7YW5zLnN1cHBvcnRlZD10cnVlO319KTt9CmlmKCFhbnMuc3VwcG9ydGVkKXthbnMucmVhc29uPSdObyBmcmFtZSBkYXRhIGF2YWlsYWJsZSc7fQpyZXR1cm4gYW5zO30sZ2V0IGN1cnJlbnRSYW5nZU9mSW50ZXJlc3QoKXtpZih0aGlzLnJhbmdlT2ZJbnRlcmVzdF8uaXNFbXB0eSl7cmV0dXJuIHRoaXMubW9kZWxfLmJvdW5kczt9CnJldHVybiB0aGlzLnJhbmdlT2ZJbnRlcmVzdF87fSxnZXQgcmFuZ2VPZkludGVyZXN0KCl7cmV0dXJuIHRoaXMucmFuZ2VPZkludGVyZXN0Xzt9LHNldCByYW5nZU9mSW50ZXJlc3QocmFuZ2VPZkludGVyZXN0KXt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89cmFuZ2VPZkludGVyZXN0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2VsZWN0aW9uKCl7fSxzZXQgc2VsZWN0aW9uKF8pe30sZ2V0IHRleHRMYWJlbCgpe3JldHVybidGcmFtZSBEYXRhJzt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLXMtZnJhbWUtZGF0YS1zaWRlLXBhbmVsJyk7fSk7fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWNoYXJ0LWxlZ2VuZC1rZXknLHJlYWR5KCl7dGhpcy4kLmNoZWNrYm94LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vbkNoZWNrYm94Q2hhbmdlXy5iaW5kKHRoaXMpKTt9LG9uQ2hlY2tib3hDaGFuZ2VfKCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsdHIudWkuYi5EYXRhU2VyaWVzRW5hYmxlQ2hhbmdlRXZlbnRUeXBlLHRydWUsZmFsc2Use2tleTpQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudCxlbmFibGVkOnRoaXMuZW5hYmxlZH0pO30sc2V0IHRleHRDb250ZW50KHQpe1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ9dDtQb2x5bWVyLmRvbSh0aGlzLiQubGluaykudGV4dENvbnRlbnQ9dDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHdpZHRoKHcpe3ctPTIwO3RoaXMuJC5saW5rLnN0eWxlLndpZHRoPXcrJ3B4Jzt0aGlzLiQubGFiZWwuc3R5bGUud2lkdGg9dysncHgnO30sZ2V0IHRleHRDb250ZW50KCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ7fSxzZXQgb3B0aW9uYWwob3B0aW9uYWwpe3RoaXMuJC5jaGVja2JveC5zdHlsZS52aXNpYmlsaXR5PW9wdGlvbmFsPyd2aXNpYmxlJzonaGlkZGVuJzt9LGdldCBvcHRpb25hbCgpe3JldHVybiB0aGlzLiQuY2hlY2tib3guc3R5bGUudmlzaWJpbGl0eT09PSd2aXNpYmxlJzt9LHNldCBlbmFibGVkKGVuYWJsZWQpe3RoaXMuJC5jaGVja2JveC5jaGVja2VkPWVuYWJsZWQ/J2NoZWNrZWQnOicnO30sZ2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy4kLmNoZWNrYm94LmNoZWNrZWQ7fSxzZXQgY29sb3IoYyl7dGhpcy4kLmxhYmVsLnN0eWxlLmNvbG9yPWM7dGhpcy4kLmxpbmsuY29sb3I9Yzt9LHNldCB0YXJnZXQodGFyZ2V0KXt0aGlzLiQubGluay5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHRhcmdldCxQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLnRleHRDb250ZW50KTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHRhcmdldCgpe3JldHVybiB0aGlzLiQubGluay5zZWxlY3Rpb247fSxzZXQgdGl0bGUodGl0bGUpe3RoaXMuJC5saW5rLnRpdGxlPXRpdGxlO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLmxpbmsuc3R5bGUuZGlzcGxheT10aGlzLnRhcmdldD8nJzonbm9uZSc7dGhpcy4kLmxhYmVsLnN0eWxlLmRpc3BsYXk9dGhpcy50YXJnZXQ/J25vbmUnOicnO3RoaXMuJC5sYWJlbC5odG1sRm9yPXRoaXMub3B0aW9uYWw/J2NoZWNrYm94JzonJzt9fSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbih3aW5kb3cpe3dpbmRvdy5kZWZpbmU9ZnVuY3Rpb24oeCl7d2luZG93LmQzPXg7fTt3aW5kb3cuZGVmaW5lLmFtZD10cnVlO30pKHRoaXMpOyFmdW5jdGlvbigpe2Z1bmN0aW9uIG4obil7cmV0dXJuIG51bGwhPW4mJiFpc05hTihuKX1mdW5jdGlvbiB0KG4pe3JldHVybiBuLmxlbmd0aH1mdW5jdGlvbiBlKG4pe2Zvcih2YXIgdD0xO24qdCUxOyl0Kj0xMDtyZXR1cm4gdH1mdW5jdGlvbiByKG4sdCl7dHJ5e2Zvcih2YXIgZSBpbiB0KU9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLnByb3RvdHlwZSxlLHt2YWx1ZTp0W2VdLGVudW1lcmFibGU6ITF9KX1jYXRjaChyKXtuLnByb3RvdHlwZT10fX1mdW5jdGlvbiB1KCl7fWZ1bmN0aW9uIGkobil7cmV0dXJuIGFhK24gaW4gdGhpc31mdW5jdGlvbiBvKG4pe3JldHVybiBuPWFhK24sbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiBhKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0KXtuLnB1c2godCl9KSxufWZ1bmN0aW9uIGMoKXt2YXIgbj0wO2Zvcih2YXIgdCBpbiB0aGlzKXQuY2hhckNvZGVBdCgwKT09PWNhJiYrK247cmV0dXJuIG59ZnVuY3Rpb24gcygpe2Zvcih2YXIgbiBpbiB0aGlzKWlmKG4uY2hhckNvZGVBdCgwKT09PWNhKXJldHVybiExO3JldHVybiEwfWZ1bmN0aW9uIGwoKXt9ZnVuY3Rpb24gZihuLHQsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHI9ZS5hcHBseSh0LGFyZ3VtZW50cyk7cmV0dXJuIHI9PT10P246cn19ZnVuY3Rpb24gaChuLHQpe2lmKHQgaW4gbilyZXR1cm4gdDt0PXQuY2hhckF0KDApLnRvVXBwZXJDYXNlKCkrdC5zdWJzdHJpbmcoMSk7Zm9yKHZhciBlPTAscj1zYS5sZW5ndGg7cj5lOysrZSl7dmFyIHU9c2FbZV0rdDtpZih1IGluIG4pcmV0dXJuIHV9fWZ1bmN0aW9uIGcoKXt9ZnVuY3Rpb24gcCgpe31mdW5jdGlvbiB2KG4pe2Z1bmN0aW9uIHQoKXtmb3IodmFyIHQscj1lLHU9LTEsaT1yLmxlbmd0aDsrK3U8aTspKHQ9clt1XS5vbikmJnQuYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiBufXZhciBlPVtdLHI9bmV3IHU7cmV0dXJuIHQub249ZnVuY3Rpb24odCx1KXt2YXIgaSxvPXIuZ2V0KHQpO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/byYmby5vbjoobyYmKG8ub249bnVsbCxlPWUuc2xpY2UoMCxpPWUuaW5kZXhPZihvKSkuY29uY2F0KGUuc2xpY2UoaSsxKSksci5yZW1vdmUodCkpLHUmJmUucHVzaChyLnNldCh0LHtvbjp1fSkpLG4pfSx0fWZ1bmN0aW9uIGQoKXtYby5ldmVudC5wcmV2ZW50RGVmYXVsdCgpfWZ1bmN0aW9uIG0oKXtmb3IodmFyIG4sdD1Yby5ldmVudDtuPXQuc291cmNlRXZlbnQ7KXQ9bjtyZXR1cm4gdH1mdW5jdGlvbiB5KG4pe2Zvcih2YXIgdD1uZXcgcCxlPTAscj1hcmd1bWVudHMubGVuZ3RoOysrZTxyOyl0W2FyZ3VtZW50c1tlXV09dih0KTtyZXR1cm4gdC5vZj1mdW5jdGlvbihlLHIpe3JldHVybiBmdW5jdGlvbih1KXt0cnl7dmFyIGk9dS5zb3VyY2VFdmVudD1Yby5ldmVudDt1LnRhcmdldD1uLFhvLmV2ZW50PXUsdFt1LnR5cGVdLmFwcGx5KGUscil9ZmluYWxseXtYby5ldmVudD1pfX19LHR9ZnVuY3Rpb24geChuKXtyZXR1cm4gZmEobixkYSksbn1mdW5jdGlvbiBNKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gaGEobix0aGlzKX19ZnVuY3Rpb24gXyhuKXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOmZ1bmN0aW9uKCl7cmV0dXJuIGdhKG4sdGhpcyl9fWZ1bmN0aW9uIGIobix0KXtmdW5jdGlvbiBlKCl7dGhpcy5yZW1vdmVBdHRyaWJ1dGUobil9ZnVuY3Rpb24gcigpe3RoaXMucmVtb3ZlQXR0cmlidXRlTlMobi5zcGFjZSxuLmxvY2FsKX1mdW5jdGlvbiB1KCl7dGhpcy5zZXRBdHRyaWJ1dGUobix0KX1mdW5jdGlvbiBpKCl7dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsdCl9ZnVuY3Rpb24gbygpe3ZhciBlPXQuYXBwbHkodGhpcyxhcmd1bWVudHMpO251bGw9PWU/dGhpcy5yZW1vdmVBdHRyaWJ1dGUobik6dGhpcy5zZXRBdHRyaWJ1dGUobixlKX1mdW5jdGlvbiBhKCl7dmFyIGU9dC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7bnVsbD09ZT90aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6dGhpcy5zZXRBdHRyaWJ1dGVOUyhuLnNwYWNlLG4ubG9jYWwsZSl9cmV0dXJuIG49WG8ubnMucXVhbGlmeShuKSxudWxsPT10P24ubG9jYWw/cjplOiJmdW5jdGlvbiI9PXR5cGVvZiB0P24ubG9jYWw/YTpvOm4ubG9jYWw/aTp1fWZ1bmN0aW9uIHcobil7cmV0dXJuIG4udHJpbSgpLnJlcGxhY2UoL1xzKy9nLCIgIil9ZnVuY3Rpb24gUyhuKXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86XnxcXHMrKSIrWG8ucmVxdW90ZShuKSsiKD86XFxzK3wkKSIsImciKX1mdW5jdGlvbiBrKG4pe3JldHVybiBuLnRyaW0oKS5zcGxpdCgvXnxccysvKX1mdW5jdGlvbiBFKG4sdCl7ZnVuY3Rpb24gZSgpe2Zvcih2YXIgZT0tMTsrK2U8dTspbltlXSh0aGlzLHQpfWZ1bmN0aW9uIHIoKXtmb3IodmFyIGU9LTEscj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTsrK2U8dTspbltlXSh0aGlzLHIpfW49ayhuKS5tYXAoQSk7dmFyIHU9bi5sZW5ndGg7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHQ/cjplfWZ1bmN0aW9uIEEobil7dmFyIHQ9UyhuKTtyZXR1cm4gZnVuY3Rpb24oZSxyKXtpZih1PWUuY2xhc3NMaXN0KXJldHVybiByP3UuYWRkKG4pOnUucmVtb3ZlKG4pO3ZhciB1PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfHwiIjtyPyh0Lmxhc3RJbmRleD0wLHQudGVzdCh1KXx8ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix3KHUrIiAiK24pKSk6ZS5zZXRBdHRyaWJ1dGUoImNsYXNzIix3KHUucmVwbGFjZSh0LCIgIikpKX19ZnVuY3Rpb24gQyhuLHQsZSl7ZnVuY3Rpb24gcigpe3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobil9ZnVuY3Rpb24gdSgpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobix0LGUpfWZ1bmN0aW9uIGkoKXt2YXIgcj10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1yP3RoaXMuc3R5bGUucmVtb3ZlUHJvcGVydHkobik6dGhpcy5zdHlsZS5zZXRQcm9wZXJ0eShuLHIsZSl9cmV0dXJuIG51bGw9PXQ/cjoiZnVuY3Rpb24iPT10eXBlb2YgdD9pOnV9ZnVuY3Rpb24gTihuLHQpe2Z1bmN0aW9uIGUoKXtkZWxldGUgdGhpc1tuXX1mdW5jdGlvbiByKCl7dGhpc1tuXT10fWZ1bmN0aW9uIHUoKXt2YXIgZT10LmFwcGx5KHRoaXMsYXJndW1lbnRzKTtudWxsPT1lP2RlbGV0ZSB0aGlzW25dOnRoaXNbbl09ZX1yZXR1cm4gbnVsbD09dD9lOiJmdW5jdGlvbiI9PXR5cGVvZiB0P3U6cn1mdW5jdGlvbiBMKG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246KG49WG8ubnMucXVhbGlmeShuKSkubG9jYWw/ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhuLnNwYWNlLG4ubG9jYWwpfTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHRoaXMubmFtZXNwYWNlVVJJLG4pfX1mdW5jdGlvbiBUKG4pe3JldHVybntfX2RhdGFfXzpufX1mdW5jdGlvbiBxKG4pe3JldHVybiBmdW5jdGlvbigpe3JldHVybiB2YSh0aGlzLG4pfX1mdW5jdGlvbiB6KG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RofHwobj1Yby5hc2NlbmRpbmcpLGZ1bmN0aW9uKHQsZSl7cmV0dXJuIHQmJmU/bih0Ll9fZGF0YV9fLGUuX19kYXRhX18pOiF0LSFlfX1mdW5jdGlvbiBSKG4sdCl7Zm9yKHZhciBlPTAscj1uLmxlbmd0aDtyPmU7ZSsrKWZvcih2YXIgdSxpPW5bZV0sbz0wLGE9aS5sZW5ndGg7YT5vO28rKykodT1pW29dKSYmdCh1LG8sZSk7cmV0dXJuIG59ZnVuY3Rpb24gRChuKXtyZXR1cm4gZmEobix5YSksbn1mdW5jdGlvbiBQKG4pe3ZhciB0LGU7cmV0dXJuIGZ1bmN0aW9uKHIsdSxpKXt2YXIgbyxhPW5baV0udXBkYXRlLGM9YS5sZW5ndGg7Zm9yKGkhPWUmJihlPWksdD0wKSx1Pj10JiYodD11KzEpOyEobz1hW3RdKSYmKyt0PGM7KTtyZXR1cm4gb319ZnVuY3Rpb24gVSgpe3ZhciBuPXRoaXMuX190cmFuc2l0aW9uX187biYmKytuLmFjdGl2ZX1mdW5jdGlvbiBqKG4sdCxlKXtmdW5jdGlvbiByKCl7dmFyIHQ9dGhpc1tvXTt0JiYodGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKG4sdCx0LiQpLGRlbGV0ZSB0aGlzW29dKX1mdW5jdGlvbiB1KCl7dmFyIHU9Yyh0LEJvKGFyZ3VtZW50cykpO3IuY2FsbCh0aGlzKSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIobix0aGlzW29dPXUsdS4kPWUpLHUuXz10fWZ1bmN0aW9uIGkoKXt2YXIgdCxlPW5ldyBSZWdFeHAoIl5fX29uKFteLl0rKSIrWG8ucmVxdW90ZShuKSsiJCIpO2Zvcih2YXIgciBpbiB0aGlzKWlmKHQ9ci5tYXRjaChlKSl7dmFyIHU9dGhpc1tyXTt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodFsxXSx1LHUuJCksZGVsZXRlIHRoaXNbcl19fXZhciBvPSJfX29uIituLGE9bi5pbmRleE9mKCIuIiksYz1IO2E+MCYmKG49bi5zdWJzdHJpbmcoMCxhKSk7dmFyIHM9TWEuZ2V0KG4pO3JldHVybiBzJiYobj1zLGM9RiksYT90P3U6cjp0P2c6aX1mdW5jdGlvbiBIKG4sdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciByPVhvLmV2ZW50O1hvLmV2ZW50PWUsdFswXT10aGlzLl9fZGF0YV9fO3RyeXtuLmFwcGx5KHRoaXMsdCl9ZmluYWxseXtYby5ldmVudD1yfX19ZnVuY3Rpb24gRihuLHQpe3ZhciBlPUgobix0KTtyZXR1cm4gZnVuY3Rpb24obil7dmFyIHQ9dGhpcyxyPW4ucmVsYXRlZFRhcmdldDtyJiYocj09PXR8fDgmci5jb21wYXJlRG9jdW1lbnRQb3NpdGlvbih0KSl8fGUuY2FsbCh0LG4pfX1mdW5jdGlvbiBPKCl7dmFyIG49Ii5kcmFnc3VwcHJlc3MtIisgKytiYSx0PSJjbGljayIrbixlPVhvLnNlbGVjdChHbykub24oInRvdWNobW92ZSIrbixkKS5vbigiZHJhZ3N0YXJ0IituLGQpLm9uKCJzZWxlY3RzdGFydCIrbixkKTtpZihfYSl7dmFyIHI9Sm8uc3R5bGUsdT1yW19hXTtyW19hXT0ibm9uZSJ9cmV0dXJuIGZ1bmN0aW9uKGkpe2Z1bmN0aW9uIG8oKXtlLm9uKHQsbnVsbCl9ZS5vbihuLG51bGwpLF9hJiYocltfYV09dSksaSYmKGUub24odCxmdW5jdGlvbigpe2QoKSxvKCl9LCEwKSxzZXRUaW1lb3V0KG8sMCkpfX1mdW5jdGlvbiBZKG4sdCl7dC5jaGFuZ2VkVG91Y2hlcyYmKHQ9dC5jaGFuZ2VkVG91Y2hlc1swXSk7dmFyIGU9bi5vd25lclNWR0VsZW1lbnR8fG47aWYoZS5jcmVhdGVTVkdQb2ludCl7dmFyIHI9ZS5jcmVhdGVTVkdQb2ludCgpO2lmKDA+d2EmJihHby5zY3JvbGxYfHxHby5zY3JvbGxZKSl7ZT1Yby5zZWxlY3QoImJvZHkiKS5hcHBlbmQoInN2ZyIpLnN0eWxlKHtwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDowLGxlZnQ6MCxtYXJnaW46MCxwYWRkaW5nOjAsYm9yZGVyOiJub25lIn0sImltcG9ydGFudCIpO3ZhciB1PWVbMF1bMF0uZ2V0U2NyZWVuQ1RNKCk7d2E9ISh1LmZ8fHUuZSksZS5yZW1vdmUoKX1yZXR1cm4gd2E/KHIueD10LnBhZ2VYLHIueT10LnBhZ2VZKTooci54PXQuY2xpZW50WCxyLnk9dC5jbGllbnRZKSxyPXIubWF0cml4VHJhbnNmb3JtKG4uZ2V0U2NyZWVuQ1RNKCkuaW52ZXJzZSgpKSxbci54LHIueV19dmFyIGk9bi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtyZXR1cm5bdC5jbGllbnRYLWkubGVmdC1uLmNsaWVudExlZnQsdC5jbGllbnRZLWkudG9wLW4uY2xpZW50VG9wXX1mdW5jdGlvbiBJKG4pe3JldHVybiBuPjA/MTowPm4/LTE6MH1mdW5jdGlvbiBaKG4sdCxlKXtyZXR1cm4odFswXS1uWzBdKSooZVsxXS1uWzFdKS0odFsxXS1uWzFdKSooZVswXS1uWzBdKX1mdW5jdGlvbiBWKG4pe3JldHVybiBuPjE/MDotMT5uP1NhOk1hdGguYWNvcyhuKX1mdW5jdGlvbiBYKG4pe3JldHVybiBuPjE/RWE6LTE+bj8tRWE6TWF0aC5hc2luKG4pfWZ1bmN0aW9uICQobil7cmV0dXJuKChuPU1hdGguZXhwKG4pKS0xL24pLzJ9ZnVuY3Rpb24gQihuKXtyZXR1cm4oKG49TWF0aC5leHAobikpKzEvbikvMn1mdW5jdGlvbiBXKG4pe3JldHVybigobj1NYXRoLmV4cCgyKm4pKS0xKS8obisxKX1mdW5jdGlvbiBKKG4pe3JldHVybihuPU1hdGguc2luKG4vMikpKm59ZnVuY3Rpb24gRygpe31mdW5jdGlvbiBLKG4sdCxlKXtyZXR1cm4gbmV3IFEobix0LGUpfWZ1bmN0aW9uIFEobix0LGUpe3RoaXMuaD1uLHRoaXMucz10LHRoaXMubD1lfWZ1bmN0aW9uIG50KG4sdCxlKXtmdW5jdGlvbiByKG4pe3JldHVybiBuPjM2MD9uLT0zNjA6MD5uJiYobis9MzYwKSw2MD5uP2krKG8taSkqbi82MDoxODA+bj9vOjI0MD5uP2krKG8taSkqKDI0MC1uKS82MDppfWZ1bmN0aW9uIHUobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KnIobikpfXZhciBpLG87cmV0dXJuIG49aXNOYU4obik/MDoobiU9MzYwKTwwP24rMzYwOm4sdD1pc05hTih0KT8wOjA+dD8wOnQ+MT8xOnQsZT0wPmU/MDplPjE/MTplLG89LjU+PWU/ZSooMSt0KTplK3QtZSp0LGk9MiplLW8sZ3QodShuKzEyMCksdShuKSx1KG4tMTIwKSl9ZnVuY3Rpb24gdHQobix0LGUpe3JldHVybiBuZXcgZXQobix0LGUpfWZ1bmN0aW9uIGV0KG4sdCxlKXt0aGlzLmg9bix0aGlzLmM9dCx0aGlzLmw9ZX1mdW5jdGlvbiBydChuLHQsZSl7cmV0dXJuIGlzTmFOKG4pJiYobj0wKSxpc05hTih0KSYmKHQ9MCksdXQoZSxNYXRoLmNvcyhuKj1OYSkqdCxNYXRoLnNpbihuKSp0KX1mdW5jdGlvbiB1dChuLHQsZSl7cmV0dXJuIG5ldyBpdChuLHQsZSl9ZnVuY3Rpb24gaXQobix0LGUpe3RoaXMubD1uLHRoaXMuYT10LHRoaXMuYj1lfWZ1bmN0aW9uIG90KG4sdCxlKXt2YXIgcj0obisxNikvMTE2LHU9cit0LzUwMCxpPXItZS8yMDA7cmV0dXJuIHU9Y3QodSkqRmEscj1jdChyKSpPYSxpPWN0KGkpKllhLGd0KGx0KDMuMjQwNDU0Mip1LTEuNTM3MTM4NSpyLS40OTg1MzE0KmkpLGx0KC0uOTY5MjY2KnUrMS44NzYwMTA4KnIrLjA0MTU1NippKSxsdCguMDU1NjQzNCp1LS4yMDQwMjU5KnIrMS4wNTcyMjUyKmkpKX1mdW5jdGlvbiBhdChuLHQsZSl7cmV0dXJuIG4+MD90dChNYXRoLmF0YW4yKGUsdCkqTGEsTWF0aC5zcXJ0KHQqdCtlKmUpLG4pOnR0KDAvMCwwLzAsbil9ZnVuY3Rpb24gY3Qobil7cmV0dXJuIG4+LjIwNjg5MzAzND9uKm4qbjoobi00LzI5KS83Ljc4NzAzN31mdW5jdGlvbiBzdChuKXtyZXR1cm4gbj4uMDA4ODU2P01hdGgucG93KG4sMS8zKTo3Ljc4NzAzNypuKzQvMjl9ZnVuY3Rpb24gbHQobil7cmV0dXJuIE1hdGgucm91bmQoMjU1KiguMDAzMDQ+PW4/MTIuOTIqbjoxLjA1NSpNYXRoLnBvdyhuLDEvMi40KS0uMDU1KSl9ZnVuY3Rpb24gZnQobil7cmV0dXJuIGd0KG4+PjE2LDI1NSZuPj44LDI1NSZuKX1mdW5jdGlvbiBodChuKXtyZXR1cm4gZnQobikrIiJ9ZnVuY3Rpb24gZ3Qobix0LGUpe3JldHVybiBuZXcgcHQobix0LGUpfWZ1bmN0aW9uIHB0KG4sdCxlKXt0aGlzLnI9bix0aGlzLmc9dCx0aGlzLmI9ZX1mdW5jdGlvbiB2dChuKXtyZXR1cm4gMTY+bj8iMCIrTWF0aC5tYXgoMCxuKS50b1N0cmluZygxNik6TWF0aC5taW4oMjU1LG4pLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBkdChuLHQsZSl7dmFyIHIsdSxpLG8sYT0wLGM9MCxzPTA7aWYodT0vKFthLXpdKylcKCguKilcKS9pLmV4ZWMobikpc3dpdGNoKGk9dVsyXS5zcGxpdCgiLCIpLHVbMV0pe2Nhc2UiaHNsIjpyZXR1cm4gZShwYXJzZUZsb2F0KGlbMF0pLHBhcnNlRmxvYXQoaVsxXSkvMTAwLHBhcnNlRmxvYXQoaVsyXSkvMTAwKTtjYXNlInJnYiI6cmV0dXJuIHQoTXQoaVswXSksTXQoaVsxXSksTXQoaVsyXSkpfXJldHVybihvPVZhLmdldChuKSk/dChvLnIsby5nLG8uYik6KG51bGwhPW4mJiIjIj09PW4uY2hhckF0KDApJiYocj1wYXJzZUludChuLnN1YnN0cmluZygxKSwxNiksaXNOYU4ocil8fCg0PT09bi5sZW5ndGg/KGE9KDM4NDAmcik+PjQsYT1hPj40fGEsYz0yNDAmcixjPWM+PjR8YyxzPTE1JnIscz1zPDw0fHMpOjc9PT1uLmxlbmd0aCYmKGE9KDE2NzExNjgwJnIpPj4xNixjPSg2NTI4MCZyKT4+OCxzPTI1NSZyKSkpLHQoYSxjLHMpKX1mdW5jdGlvbiBtdChuLHQsZSl7dmFyIHIsdSxpPU1hdGgubWluKG4vPTI1NSx0Lz0yNTUsZS89MjU1KSxvPU1hdGgubWF4KG4sdCxlKSxhPW8taSxjPShvK2kpLzI7cmV0dXJuIGE/KHU9LjU+Yz9hLyhvK2kpOmEvKDItby1pKSxyPW49PW8/KHQtZSkvYSsoZT50PzY6MCk6dD09bz8oZS1uKS9hKzI6KG4tdCkvYSs0LHIqPTYwKToocj0wLzAsdT1jPjAmJjE+Yz8wOnIpLEsocix1LGMpfWZ1bmN0aW9uIHl0KG4sdCxlKXtuPXh0KG4pLHQ9eHQodCksZT14dChlKTt2YXIgcj1zdCgoLjQxMjQ1NjQqbisuMzU3NTc2MSp0Ky4xODA0Mzc1KmUpL0ZhKSx1PXN0KCguMjEyNjcyOSpuKy43MTUxNTIyKnQrLjA3MjE3NSplKS9PYSksaT1zdCgoLjAxOTMzMzkqbisuMTE5MTkyKnQrLjk1MDMwNDEqZSkvWWEpO3JldHVybiB1dCgxMTYqdS0xNiw1MDAqKHItdSksMjAwKih1LWkpKX1mdW5jdGlvbiB4dChuKXtyZXR1cm4obi89MjU1KTw9LjA0MDQ1P24vMTIuOTI6TWF0aC5wb3coKG4rLjA1NSkvMS4wNTUsMi40KX1mdW5jdGlvbiBNdChuKXt2YXIgdD1wYXJzZUZsb2F0KG4pO3JldHVybiIlIj09PW4uY2hhckF0KG4ubGVuZ3RoLTEpP01hdGgucm91bmQoMi41NSp0KTp0fWZ1bmN0aW9uIF90KG4pe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBuP246ZnVuY3Rpb24oKXtyZXR1cm4gbn19ZnVuY3Rpb24gYnQobil7cmV0dXJuIG59ZnVuY3Rpb24gd3Qobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSxyKXtyZXR1cm4gMj09PWFyZ3VtZW50cy5sZW5ndGgmJiJmdW5jdGlvbiI9PXR5cGVvZiBlJiYocj1lLGU9bnVsbCksU3QodCxlLG4scil9fWZ1bmN0aW9uIFN0KG4sdCxlLHIpe2Z1bmN0aW9uIHUoKXt2YXIgbix0PWMuc3RhdHVzO2lmKCF0JiZjLnJlc3BvbnNlVGV4dHx8dD49MjAwJiYzMDA+dHx8MzA0PT09dCl7dHJ5e249ZS5jYWxsKGksYyl9Y2F0Y2gocil7cmV0dXJuIG8uZXJyb3IuY2FsbChpLHIpLHZvaWQgMH1vLmxvYWQuY2FsbChpLG4pfWVsc2Ugby5lcnJvci5jYWxsKGksYyl9dmFyIGk9e30sbz1Yby5kaXNwYXRjaCgiYmVmb3Jlc2VuZCIsInByb2dyZXNzIiwibG9hZCIsImVycm9yIiksYT17fSxjPW5ldyBYTUxIdHRwUmVxdWVzdCxzPW51bGw7cmV0dXJuIUdvLlhEb21haW5SZXF1ZXN0fHwid2l0aENyZWRlbnRpYWxzImluIGN8fCEvXihodHRwKHMpPzopP1wvXC8vLnRlc3Qobil8fChjPW5ldyBYRG9tYWluUmVxdWVzdCksIm9ubG9hZCJpbiBjP2Mub25sb2FkPWMub25lcnJvcj11OmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7Yy5yZWFkeVN0YXRlPjMmJnUoKX0sYy5vbnByb2dyZXNzPWZ1bmN0aW9uKG4pe3ZhciB0PVhvLmV2ZW50O1hvLmV2ZW50PW47dHJ5e28ucHJvZ3Jlc3MuY2FsbChpLGMpfWZpbmFsbHl7WG8uZXZlbnQ9dH19LGkuaGVhZGVyPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIG49KG4rIiIpLnRvTG93ZXJDYXNlKCksYXJndW1lbnRzLmxlbmd0aDwyP2Fbbl06KG51bGw9PXQ/ZGVsZXRlIGFbbl06YVtuXT10KyIiLGkpfSxpLm1pbWVUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW51bGw9PW4/bnVsbDpuKyIiLGkpOnR9LGkucmVzcG9uc2VUeXBlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4saSk6c30saS5yZXNwb25zZT1mdW5jdGlvbihuKXtyZXR1cm4gZT1uLGl9LFsiZ2V0IiwicG9zdCJdLmZvckVhY2goZnVuY3Rpb24obil7aVtuXT1mdW5jdGlvbigpe3JldHVybiBpLnNlbmQuYXBwbHkoaSxbbl0uY29uY2F0KEJvKGFyZ3VtZW50cykpKX19KSxpLnNlbmQ9ZnVuY3Rpb24oZSxyLHUpe2lmKDI9PT1hcmd1bWVudHMubGVuZ3RoJiYiZnVuY3Rpb24iPT10eXBlb2YgciYmKHU9cixyPW51bGwpLGMub3BlbihlLG4sITApLG51bGw9PXR8fCJhY2NlcHQiaW4gYXx8KGEuYWNjZXB0PXQrIiwqLyoiKSxjLnNldFJlcXVlc3RIZWFkZXIpZm9yKHZhciBsIGluIGEpYy5zZXRSZXF1ZXN0SGVhZGVyKGwsYVtsXSk7cmV0dXJuIG51bGwhPXQmJmMub3ZlcnJpZGVNaW1lVHlwZSYmYy5vdmVycmlkZU1pbWVUeXBlKHQpLG51bGwhPXMmJihjLnJlc3BvbnNlVHlwZT1zKSxudWxsIT11JiZpLm9uKCJlcnJvciIsdSkub24oImxvYWQiLGZ1bmN0aW9uKG4pe3UobnVsbCxuKX0pLG8uYmVmb3Jlc2VuZC5jYWxsKGksYyksYy5zZW5kKG51bGw9PXI/bnVsbDpyKSxpfSxpLmFib3J0PWZ1bmN0aW9uKCl7cmV0dXJuIGMuYWJvcnQoKSxpfSxYby5yZWJpbmQoaSxvLCJvbiIpLG51bGw9PXI/aTppLmdldChrdChyKSl9ZnVuY3Rpb24ga3Qobil7cmV0dXJuIDE9PT1uLmxlbmd0aD9mdW5jdGlvbih0LGUpe24obnVsbD09dD9lOm51bGwpfTpufWZ1bmN0aW9uIEV0KCl7dmFyIG49QXQoKSx0PUN0KCktbjt0PjI0Pyhpc0Zpbml0ZSh0KSYmKGNsZWFyVGltZW91dChXYSksV2E9c2V0VGltZW91dChFdCx0KSksQmE9MCk6KEJhPTEsR2EoRXQpKX1mdW5jdGlvbiBBdCgpe3ZhciBuPURhdGUubm93KCk7Zm9yKEphPVhhO0phOyluPj1KYS50JiYoSmEuZj1KYS5jKG4tSmEudCkpLEphPUphLm47cmV0dXJuIG59ZnVuY3Rpb24gQ3QoKXtmb3IodmFyIG4sdD1YYSxlPTEvMDt0Oyl0LmY/dD1uP24ubj10Lm46WGE9dC5uOih0LnQ8ZSYmKGU9dC50KSx0PShuPXQpLm4pO3JldHVybiAkYT1uLGV9ZnVuY3Rpb24gTnQobix0KXtyZXR1cm4gdC0obj9NYXRoLmNlaWwoTWF0aC5sb2cobikvTWF0aC5MTjEwKToxKX1mdW5jdGlvbiBMdChuLHQpe3ZhciBlPU1hdGgucG93KDEwLDMqb2EoOC10KSk7cmV0dXJue3NjYWxlOnQ+OD9mdW5jdGlvbihuKXtyZXR1cm4gbi9lfTpmdW5jdGlvbihuKXtyZXR1cm4gbiplfSxzeW1ib2w6bn19ZnVuY3Rpb24gVHQobil7dmFyIHQ9bi5kZWNpbWFsLGU9bi50aG91c2FuZHMscj1uLmdyb3VwaW5nLHU9bi5jdXJyZW5jeSxpPXI/ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLHU9W10saT0wLG89clswXTt0PjAmJm8+MDspdS5wdXNoKG4uc3Vic3RyaW5nKHQtPW8sdCtvKSksbz1yW2k9KGkrMSklci5sZW5ndGhdO3JldHVybiB1LnJldmVyc2UoKS5qb2luKGUpfTpidDtyZXR1cm4gZnVuY3Rpb24obil7dmFyIGU9UWEuZXhlYyhuKSxyPWVbMV18fCIgIixvPWVbMl18fCI+IixhPWVbM118fCIiLGM9ZVs0XXx8IiIscz1lWzVdLGw9K2VbNl0sZj1lWzddLGg9ZVs4XSxnPWVbOV0scD0xLHY9IiIsZD0iIixtPSExO3N3aXRjaChoJiYoaD0raC5zdWJzdHJpbmcoMSkpLChzfHwiMCI9PT1yJiYiPSI9PT1vKSYmKHM9cj0iMCIsbz0iPSIsZiYmKGwtPU1hdGguZmxvb3IoKGwtMSkvNCkpKSxnKXtjYXNlIm4iOmY9ITAsZz0iZyI7YnJlYWs7Y2FzZSIlIjpwPTEwMCxkPSIlIixnPSJmIjticmVhaztjYXNlInAiOnA9MTAwLGQ9IiUiLGc9InIiO2JyZWFrO2Nhc2UiYiI6Y2FzZSJvIjpjYXNlIngiOmNhc2UiWCI6IiMiPT09YyYmKHY9IjAiK2cudG9Mb3dlckNhc2UoKSk7Y2FzZSJjIjpjYXNlImQiOm09ITAsaD0wO2JyZWFrO2Nhc2UicyI6cD0tMSxnPSJyIn0iJCI9PT1jJiYodj11WzBdLGQ9dVsxXSksInIiIT1nfHxofHwoZz0iZyIpLG51bGwhPWgmJigiZyI9PWc/aD1NYXRoLm1heCgxLE1hdGgubWluKDIxLGgpKTooImUiPT1nfHwiZiI9PWcpJiYoaD1NYXRoLm1heCgwLE1hdGgubWluKDIwLGgpKSkpLGc9bmMuZ2V0KGcpfHxxdDt2YXIgeT1zJiZmO3JldHVybiBmdW5jdGlvbihuKXt2YXIgZT1kO2lmKG0mJm4lMSlyZXR1cm4iIjt2YXIgdT0wPm58fDA9PT1uJiYwPjEvbj8obj0tbiwiLSIpOmE7aWYoMD5wKXt2YXIgYz1Yby5mb3JtYXRQcmVmaXgobixoKTtuPWMuc2NhbGUobiksZT1jLnN5bWJvbCtkfWVsc2Ugbio9cDtuPWcobixoKTt2YXIgeD1uLmxhc3RJbmRleE9mKCIuIiksTT0wPng/bjpuLnN1YnN0cmluZygwLHgpLF89MD54PyIiOnQrbi5zdWJzdHJpbmcoeCsxKTshcyYmZiYmKE09aShNKSk7dmFyIGI9di5sZW5ndGgrTS5sZW5ndGgrXy5sZW5ndGgrKHk/MDp1Lmxlbmd0aCksdz1sPmI/bmV3IEFycmF5KGI9bC1iKzEpLmpvaW4ocik6IiI7cmV0dXJuIHkmJihNPWkodytNKSksdSs9dixuPU0rXywoIjwiPT09bz91K24rdzoiPiI9PT1vP3crdStuOiJeIj09PW8/dy5zdWJzdHJpbmcoMCxiPj49MSkrdStuK3cuc3Vic3RyaW5nKGIpOnUrKHk/bjp3K24pKStlfX19ZnVuY3Rpb24gcXQobil7cmV0dXJuIG4rIiJ9ZnVuY3Rpb24genQoKXt0aGlzLl89bmV3IERhdGUoYXJndW1lbnRzLmxlbmd0aD4xP0RhdGUuVVRDLmFwcGx5KHRoaXMsYXJndW1lbnRzKTphcmd1bWVudHNbMF0pfWZ1bmN0aW9uIFJ0KG4sdCxlKXtmdW5jdGlvbiByKHQpe3ZhciBlPW4odCkscj1pKGUsMSk7cmV0dXJuIHItdD50LWU/ZTpyfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIHQoZT1uKG5ldyBlYyhlLTEpKSwxKSxlfWZ1bmN0aW9uIGkobixlKXtyZXR1cm4gdChuPW5ldyBlYygrbiksZSksbn1mdW5jdGlvbiBvKG4scixpKXt2YXIgbz11KG4pLGE9W107aWYoaT4xKWZvcig7cj5vOyllKG8pJWl8fGEucHVzaChuZXcgRGF0ZSgrbykpLHQobywxKTtlbHNlIGZvcig7cj5vOylhLnB1c2gobmV3IERhdGUoK28pKSx0KG8sMSk7cmV0dXJuIGF9ZnVuY3Rpb24gYShuLHQsZSl7dHJ5e2VjPXp0O3ZhciByPW5ldyB6dDtyZXR1cm4gci5fPW4sbyhyLHQsZSl9ZmluYWxseXtlYz1EYXRlfX1uLmZsb29yPW4sbi5yb3VuZD1yLG4uY2VpbD11LG4ub2Zmc2V0PWksbi5yYW5nZT1vO3ZhciBjPW4udXRjPUR0KG4pO3JldHVybiBjLmZsb29yPWMsYy5yb3VuZD1EdChyKSxjLmNlaWw9RHQodSksYy5vZmZzZXQ9RHQoaSksYy5yYW5nZT1hLG59ZnVuY3Rpb24gRHQobil7cmV0dXJuIGZ1bmN0aW9uKHQsZSl7dHJ5e2VjPXp0O3ZhciByPW5ldyB6dDtyZXR1cm4gci5fPXQsbihyLGUpLl99ZmluYWxseXtlYz1EYXRlfX19ZnVuY3Rpb24gUHQobil7ZnVuY3Rpb24gdChuKXtmdW5jdGlvbiB0KHQpe2Zvcih2YXIgZSx1LGksbz1bXSxhPS0xLGM9MDsrK2E8cjspMzc9PT1uLmNoYXJDb2RlQXQoYSkmJihvLnB1c2gobi5zdWJzdHJpbmcoYyxhKSksbnVsbCE9KHU9dWNbZT1uLmNoYXJBdCgrK2EpXSkmJihlPW4uY2hhckF0KCsrYSkpLChpPUNbZV0pJiYoZT1pKHQsbnVsbD09dT8iZSI9PT1lPyIgIjoiMCI6dSkpLG8ucHVzaChlKSxjPWErMSk7cmV0dXJuIG8ucHVzaChuLnN1YnN0cmluZyhjLGEpKSxvLmpvaW4oIiIpfXZhciByPW4ubGVuZ3RoO3JldHVybiB0LnBhcnNlPWZ1bmN0aW9uKHQpe3ZhciByPXt5OjE5MDAsbTowLGQ6MSxIOjAsTTowLFM6MCxMOjAsWjpudWxsfSx1PWUocixuLHQsMCk7aWYodSE9dC5sZW5ndGgpcmV0dXJuIG51bGw7InAiaW4gciYmKHIuSD1yLkglMTIrMTIqci5wKTt2YXIgaT1udWxsIT1yLlomJmVjIT09enQsbz1uZXcoaT96dDplYyk7cmV0dXJuImoiaW4gcj9vLnNldEZ1bGxZZWFyKHIueSwwLHIuaik6InciaW4gciYmKCJXImluIHJ8fCJVImluIHIpPyhvLnNldEZ1bGxZZWFyKHIueSwwLDEpLG8uc2V0RnVsbFllYXIoci55LDAsIlciaW4gcj8oci53KzYpJTcrNypyLlctKG8uZ2V0RGF5KCkrNSklNzpyLncrNypyLlUtKG8uZ2V0RGF5KCkrNiklNykpOm8uc2V0RnVsbFllYXIoci55LHIubSxyLmQpLG8uc2V0SG91cnMoci5IK01hdGguZmxvb3Ioci5aLzEwMCksci5NK3IuWiUxMDAsci5TLHIuTCksaT9vLl86b30sdC50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiBufSx0fWZ1bmN0aW9uIGUobix0LGUscil7Zm9yKHZhciB1LGksbyxhPTAsYz10Lmxlbmd0aCxzPWUubGVuZ3RoO2M+YTspe2lmKHI+PXMpcmV0dXJuLTE7aWYodT10LmNoYXJDb2RlQXQoYSsrKSwzNz09PXUpe2lmKG89dC5jaGFyQXQoYSsrKSxpPU5bbyBpbiB1Yz90LmNoYXJBdChhKyspOm9dLCFpfHwocj1pKG4sZSxyKSk8MClyZXR1cm4tMX1lbHNlIGlmKHUhPWUuY2hhckNvZGVBdChyKyspKXJldHVybi0xfXJldHVybiByfWZ1bmN0aW9uIHIobix0LGUpe2IubGFzdEluZGV4PTA7dmFyIHI9Yi5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi53PXcuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gdShuLHQsZSl7TS5sYXN0SW5kZXg9MDt2YXIgcj1NLmV4ZWModC5zdWJzdHJpbmcoZSkpO3JldHVybiByPyhuLnc9Xy5nZXQoclswXS50b0xvd2VyQ2FzZSgpKSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBpKG4sdCxlKXtFLmxhc3RJbmRleD0wO3ZhciByPUUuZXhlYyh0LnN1YnN0cmluZyhlKSk7cmV0dXJuIHI/KG4ubT1BLmdldChyWzBdLnRvTG93ZXJDYXNlKCkpLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIG8obix0LGUpe1MubGFzdEluZGV4PTA7dmFyIHI9Uy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5tPWsuZ2V0KHJbMF0udG9Mb3dlckNhc2UoKSksZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gYShuLHQscil7cmV0dXJuIGUobixDLmMudG9TdHJpbmcoKSx0LHIpfWZ1bmN0aW9uIGMobix0LHIpe3JldHVybiBlKG4sQy54LnRvU3RyaW5nKCksdCxyKX1mdW5jdGlvbiBzKG4sdCxyKXtyZXR1cm4gZShuLEMuWC50b1N0cmluZygpLHQscil9ZnVuY3Rpb24gbChuLHQsZSl7dmFyIHI9eC5nZXQodC5zdWJzdHJpbmcoZSxlKz0yKS50b0xvd2VyQ2FzZSgpKTtyZXR1cm4gbnVsbD09cj8tMToobi5wPXIsZSl9dmFyIGY9bi5kYXRlVGltZSxoPW4uZGF0ZSxnPW4udGltZSxwPW4ucGVyaW9kcyx2PW4uZGF5cyxkPW4uc2hvcnREYXlzLG09bi5tb250aHMseT1uLnNob3J0TW9udGhzO3QudXRjPWZ1bmN0aW9uKG4pe2Z1bmN0aW9uIGUobil7dHJ5e2VjPXp0O3ZhciB0PW5ldyBlYztyZXR1cm4gdC5fPW4scih0KX1maW5hbGx5e2VjPURhdGV9fXZhciByPXQobik7cmV0dXJuIGUucGFyc2U9ZnVuY3Rpb24obil7dHJ5e2VjPXp0O3ZhciB0PXIucGFyc2Uobik7cmV0dXJuIHQmJnQuX31maW5hbGx5e2VjPURhdGV9fSxlLnRvU3RyaW5nPXIudG9TdHJpbmcsZX0sdC5tdWx0aT10LnV0Yy5tdWx0aT1lZTt2YXIgeD1Yby5tYXAoKSxNPWp0KHYpLF89SHQodiksYj1qdChkKSx3PUh0KGQpLFM9anQobSksaz1IdChtKSxFPWp0KHkpLEE9SHQoeSk7cC5mb3JFYWNoKGZ1bmN0aW9uKG4sdCl7eC5zZXQobi50b0xvd2VyQ2FzZSgpLHQpfSk7dmFyIEM9e2E6ZnVuY3Rpb24obil7cmV0dXJuIGRbbi5nZXREYXkoKV19LEE6ZnVuY3Rpb24obil7cmV0dXJuIHZbbi5nZXREYXkoKV19LGI6ZnVuY3Rpb24obil7cmV0dXJuIHlbbi5nZXRNb250aCgpXX0sQjpmdW5jdGlvbihuKXtyZXR1cm4gbVtuLmdldE1vbnRoKCldfSxjOnQoZiksZDpmdW5jdGlvbihuLHQpe3JldHVybiBVdChuLmdldERhdGUoKSx0LDIpfSxlOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0RGF0ZSgpLHQsMil9LEg6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRIb3VycygpLHQsMil9LEk6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRIb3VycygpJTEyfHwxMix0LDIpfSxqOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KDErdGMuZGF5T2ZZZWFyKG4pLHQsMyl9LEw6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRNaWxsaXNlY29uZHMoKSx0LDMpfSxtOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0TW9udGgoKSsxLHQsMil9LE06ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRNaW51dGVzKCksdCwyKX0scDpmdW5jdGlvbihuKXtyZXR1cm4gcFsrKG4uZ2V0SG91cnMoKT49MTIpXX0sUzpmdW5jdGlvbihuLHQpe3JldHVybiBVdChuLmdldFNlY29uZHMoKSx0LDIpfSxVOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KHRjLnN1bmRheU9mWWVhcihuKSx0LDIpfSx3OmZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpfSxXOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KHRjLm1vbmRheU9mWWVhcihuKSx0LDIpfSx4OnQoaCksWDp0KGcpLHk6ZnVuY3Rpb24obix0KXtyZXR1cm4gVXQobi5nZXRGdWxsWWVhcigpJTEwMCx0LDIpfSxZOmZ1bmN0aW9uKG4sdCl7cmV0dXJuIFV0KG4uZ2V0RnVsbFllYXIoKSUxZTQsdCw0KX0sWjpuZSwiJSI6ZnVuY3Rpb24oKXtyZXR1cm4iJSJ9fSxOPXthOnIsQTp1LGI6aSxCOm8sYzphLGQ6QnQsZTpCdCxIOkp0LEk6SnQsajpXdCxMOlF0LG06JHQsTTpHdCxwOmwsUzpLdCxVOk90LHc6RnQsVzpZdCx4OmMsWDpzLHk6WnQsWTpJdCxaOlZ0LCIlIjp0ZX07cmV0dXJuIHR9ZnVuY3Rpb24gVXQobix0LGUpe3ZhciByPTA+bj8iLSI6IiIsdT0ocj8tbjpuKSsiIixpPXUubGVuZ3RoO3JldHVybiByKyhlPmk/bmV3IEFycmF5KGUtaSsxKS5qb2luKHQpK3U6dSl9ZnVuY3Rpb24ganQobil7cmV0dXJuIG5ldyBSZWdFeHAoIl4oPzoiK24ubWFwKFhvLnJlcXVvdGUpLmpvaW4oInwiKSsiKSIsImkiKX1mdW5jdGlvbiBIdChuKXtmb3IodmFyIHQ9bmV3IHUsZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnNldChuW2VdLnRvTG93ZXJDYXNlKCksZSk7cmV0dXJuIHR9ZnVuY3Rpb24gRnQobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzEpKTtyZXR1cm4gcj8obi53PStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIE90KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5VPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFl0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUpKTtyZXR1cm4gcj8obi5XPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEl0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSs0KSk7cmV0dXJuIHI/KG4ueT0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBadChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLnk9WHQoK3JbMF0pLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFZ0KG4sdCxlKXtyZXR1cm4vXlsrLV1cZHs0fSQvLnRlc3QodD10LnN1YnN0cmluZyhlLGUrNSkpPyhuLlo9K3QsZSs1KTotMX1mdW5jdGlvbiBYdChuKXtyZXR1cm4gbisobj42OD8xOTAwOjJlMyl9ZnVuY3Rpb24gJHQobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5tPXJbMF0tMSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBCdChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLmQ9K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gV3Qobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzMpKTtyZXR1cm4gcj8obi5qPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIEp0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsyKSk7cmV0dXJuIHI/KG4uSD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBHdChuLHQsZSl7aWMubGFzdEluZGV4PTA7dmFyIHI9aWMuZXhlYyh0LnN1YnN0cmluZyhlLGUrMikpO3JldHVybiByPyhuLk09K3JbMF0sZStyWzBdLmxlbmd0aCk6LTF9ZnVuY3Rpb24gS3Qobix0LGUpe2ljLmxhc3RJbmRleD0wO3ZhciByPWljLmV4ZWModC5zdWJzdHJpbmcoZSxlKzIpKTtyZXR1cm4gcj8obi5TPStyWzBdLGUrclswXS5sZW5ndGgpOi0xfWZ1bmN0aW9uIFF0KG4sdCxlKXtpYy5sYXN0SW5kZXg9MDt2YXIgcj1pYy5leGVjKHQuc3Vic3RyaW5nKGUsZSszKSk7cmV0dXJuIHI/KG4uTD0rclswXSxlK3JbMF0ubGVuZ3RoKTotMX1mdW5jdGlvbiBuZShuKXt2YXIgdD1uLmdldFRpbWV6b25lT2Zmc2V0KCksZT10PjA/Ii0iOiIrIixyPX5+KG9hKHQpLzYwKSx1PW9hKHQpJTYwO3JldHVybiBlK1V0KHIsIjAiLDIpK1V0KHUsIjAiLDIpfWZ1bmN0aW9uIHRlKG4sdCxlKXtvYy5sYXN0SW5kZXg9MDt2YXIgcj1vYy5leGVjKHQuc3Vic3RyaW5nKGUsZSsxKSk7cmV0dXJuIHI/ZStyWzBdLmxlbmd0aDotMX1mdW5jdGlvbiBlZShuKXtmb3IodmFyIHQ9bi5sZW5ndGgsZT0tMTsrK2U8dDspbltlXVswXT10aGlzKG5bZV1bMF0pO3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIGU9MCxyPW5bZV07IXJbMV0odCk7KXI9blsrK2VdO3JldHVybiByWzBdKHQpfX1mdW5jdGlvbiByZSgpe31mdW5jdGlvbiB1ZShuLHQsZSl7dmFyIHI9ZS5zPW4rdCx1PXItbixpPXItdTtlLnQ9bi1pKyh0LXUpfWZ1bmN0aW9uIGllKG4sdCl7biYmbGMuaGFzT3duUHJvcGVydHkobi50eXBlKSYmbGNbbi50eXBlXShuLHQpfWZ1bmN0aW9uIG9lKG4sdCxlKXt2YXIgcix1PS0xLGk9bi5sZW5ndGgtZTtmb3IodC5saW5lU3RhcnQoKTsrK3U8aTspcj1uW3VdLHQucG9pbnQoclswXSxyWzFdLHJbMl0pO3QubGluZUVuZCgpfWZ1bmN0aW9uIGFlKG4sdCl7dmFyIGU9LTEscj1uLmxlbmd0aDtmb3IodC5wb2x5Z29uU3RhcnQoKTsrK2U8cjspb2UobltlXSx0LDEpO3QucG9seWdvbkVuZCgpfWZ1bmN0aW9uIGNlKCl7ZnVuY3Rpb24gbihuLHQpe24qPU5hLHQ9dCpOYS8yK1NhLzQ7dmFyIGU9bi1yLG89ZT49MD8xOi0xLGE9byplLGM9TWF0aC5jb3ModCkscz1NYXRoLnNpbih0KSxsPWkqcyxmPXUqYytsKk1hdGguY29zKGEpLGg9bCpvKk1hdGguc2luKGEpO2hjLmFkZChNYXRoLmF0YW4yKGgsZikpLHI9bix1PWMsaT1zfXZhciB0LGUscix1LGk7Z2MucG9pbnQ9ZnVuY3Rpb24obyxhKXtnYy5wb2ludD1uLHI9KHQ9bykqTmEsdT1NYXRoLmNvcyhhPShlPWEpKk5hLzIrU2EvNCksaT1NYXRoLnNpbihhKX0sZ2MubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gc2Uobil7dmFyIHQ9blswXSxlPW5bMV0scj1NYXRoLmNvcyhlKTtyZXR1cm5bcipNYXRoLmNvcyh0KSxyKk1hdGguc2luKHQpLE1hdGguc2luKGUpXX1mdW5jdGlvbiBsZShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXX1mdW5jdGlvbiBmZShuLHQpe3JldHVybltuWzFdKnRbMl0tblsyXSp0WzFdLG5bMl0qdFswXS1uWzBdKnRbMl0sblswXSp0WzFdLW5bMV0qdFswXV19ZnVuY3Rpb24gaGUobix0KXtuWzBdKz10WzBdLG5bMV0rPXRbMV0sblsyXSs9dFsyXX1mdW5jdGlvbiBnZShuLHQpe3JldHVybltuWzBdKnQsblsxXSp0LG5bMl0qdF19ZnVuY3Rpb24gcGUobil7dmFyIHQ9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0rblsyXSpuWzJdKTtuWzBdLz10LG5bMV0vPXQsblsyXS89dH1mdW5jdGlvbiB2ZShuKXtyZXR1cm5bTWF0aC5hdGFuMihuWzFdLG5bMF0pLFgoblsyXSldfWZ1bmN0aW9uIGRlKG4sdCl7cmV0dXJuIG9hKG5bMF0tdFswXSk8QWEmJm9hKG5bMV0tdFsxXSk8QWF9ZnVuY3Rpb24gbWUobix0KXtuKj1OYTt2YXIgZT1NYXRoLmNvcyh0Kj1OYSk7eWUoZSpNYXRoLmNvcyhuKSxlKk1hdGguc2luKG4pLE1hdGguc2luKHQpKX1mdW5jdGlvbiB5ZShuLHQsZSl7KytwYyxkYys9KG4tZGMpL3BjLG1jKz0odC1tYykvcGMseWMrPShlLXljKS9wY31mdW5jdGlvbiB4ZSgpe2Z1bmN0aW9uIG4obix1KXtuKj1OYTt2YXIgaT1NYXRoLmNvcyh1Kj1OYSksbz1pKk1hdGguY29zKG4pLGE9aSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHUpLHM9TWF0aC5hdGFuMihNYXRoLnNxcnQoKHM9ZSpjLXIqYSkqcysocz1yKm8tdCpjKSpzKyhzPXQqYS1lKm8pKnMpLHQqbytlKmErcipjKTt2Yys9cyx4Yys9cyoodCsodD1vKSksTWMrPXMqKGUrKGU9YSkpLF9jKz1zKihyKyhyPWMpKSx5ZSh0LGUscil9dmFyIHQsZSxyO2tjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dSo9TmE7dmFyIG89TWF0aC5jb3MoaSo9TmEpO3Q9bypNYXRoLmNvcyh1KSxlPW8qTWF0aC5zaW4odSkscj1NYXRoLnNpbihpKSxrYy5wb2ludD1uLHllKHQsZSxyKX19ZnVuY3Rpb24gTWUoKXtrYy5wb2ludD1tZX1mdW5jdGlvbiBfZSgpe2Z1bmN0aW9uIG4obix0KXtuKj1OYTt2YXIgZT1NYXRoLmNvcyh0Kj1OYSksbz1lKk1hdGguY29zKG4pLGE9ZSpNYXRoLnNpbihuKSxjPU1hdGguc2luKHQpLHM9dSpjLWkqYSxsPWkqby1yKmMsZj1yKmEtdSpvLGg9TWF0aC5zcXJ0KHMqcytsKmwrZipmKSxnPXIqbyt1KmEraSpjLHA9aCYmLVYoZykvaCx2PU1hdGguYXRhbjIoaCxnKTtiYys9cCpzLHdjKz1wKmwsU2MrPXAqZix2Yys9dix4Yys9dioocisocj1vKSksTWMrPXYqKHUrKHU9YSkpLF9jKz12KihpKyhpPWMpKSx5ZShyLHUsaSl9dmFyIHQsZSxyLHUsaTtrYy5wb2ludD1mdW5jdGlvbihvLGEpe3Q9byxlPWEsa2MucG9pbnQ9bixvKj1OYTt2YXIgYz1NYXRoLmNvcyhhKj1OYSk7cj1jKk1hdGguY29zKG8pLHU9YypNYXRoLnNpbihvKSxpPU1hdGguc2luKGEpLHllKHIsdSxpKX0sa2MubGluZUVuZD1mdW5jdGlvbigpe24odCxlKSxrYy5saW5lRW5kPU1lLGtjLnBvaW50PW1lfX1mdW5jdGlvbiBiZSgpe3JldHVybiEwfWZ1bmN0aW9uIHdlKG4sdCxlLHIsdSl7dmFyIGk9W10sbz1bXTtpZihuLmZvckVhY2goZnVuY3Rpb24obil7aWYoISgodD1uLmxlbmd0aC0xKTw9MCkpe3ZhciB0LGU9blswXSxyPW5bdF07aWYoZGUoZSxyKSl7dS5saW5lU3RhcnQoKTtmb3IodmFyIGE9MDt0PmE7KythKXUucG9pbnQoKGU9blthXSlbMF0sZVsxXSk7cmV0dXJuIHUubGluZUVuZCgpLHZvaWQgMH12YXIgYz1uZXcga2UoZSxuLG51bGwsITApLHM9bmV3IGtlKGUsbnVsbCxjLCExKTtjLm89cyxpLnB1c2goYyksby5wdXNoKHMpLGM9bmV3IGtlKHIsbixudWxsLCExKSxzPW5ldyBrZShyLG51bGwsYywhMCksYy5vPXMsaS5wdXNoKGMpLG8ucHVzaChzKX19KSxvLnNvcnQodCksU2UoaSksU2UobyksaS5sZW5ndGgpe2Zvcih2YXIgYT0wLGM9ZSxzPW8ubGVuZ3RoO3M+YTsrK2Epb1thXS5lPWM9IWM7Zm9yKHZhciBsLGYsaD1pWzBdOzspe2Zvcih2YXIgZz1oLHA9ITA7Zy52OylpZigoZz1nLm4pPT09aClyZXR1cm47bD1nLnosdS5saW5lU3RhcnQoKTtkb3tpZihnLnY9Zy5vLnY9ITAsZy5lKXtpZihwKWZvcih2YXIgYT0wLHM9bC5sZW5ndGg7cz5hOysrYSl1LnBvaW50KChmPWxbYV0pWzBdLGZbMV0pO2Vsc2UgcihnLngsZy5uLngsMSx1KTtnPWcubn1lbHNle2lmKHApe2w9Zy5wLno7Zm9yKHZhciBhPWwubGVuZ3RoLTE7YT49MDstLWEpdS5wb2ludCgoZj1sW2FdKVswXSxmWzFdKX1lbHNlIHIoZy54LGcucC54LC0xLHUpO2c9Zy5wfWc9Zy5vLGw9Zy56LHA9IXB9d2hpbGUoIWcudik7dS5saW5lRW5kKCl9fX1mdW5jdGlvbiBTZShuKXtpZih0PW4ubGVuZ3RoKXtmb3IodmFyIHQsZSxyPTAsdT1uWzBdOysrcjx0Oyl1Lm49ZT1uW3JdLGUucD11LHU9ZTt1Lm49ZT1uWzBdLGUucD11fX1mdW5jdGlvbiBrZShuLHQsZSxyKXt0aGlzLng9bix0aGlzLno9dCx0aGlzLm89ZSx0aGlzLmU9cix0aGlzLnY9ITEsdGhpcy5uPXRoaXMucD1udWxsfWZ1bmN0aW9uIEVlKG4sdCxlLHIpe3JldHVybiBmdW5jdGlvbih1LGkpe2Z1bmN0aW9uIG8odCxlKXt2YXIgcj11KHQsZSk7bih0PXJbMF0sZT1yWzFdKSYmaS5wb2ludCh0LGUpfWZ1bmN0aW9uIGEobix0KXt2YXIgZT11KG4sdCk7ZC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIGMoKXt5LnBvaW50PWEsZC5saW5lU3RhcnQoKX1mdW5jdGlvbiBzKCl7eS5wb2ludD1vLGQubGluZUVuZCgpfWZ1bmN0aW9uIGwobix0KXt2LnB1c2goW24sdF0pO3ZhciBlPXUobix0KTtNLnBvaW50KGVbMF0sZVsxXSl9ZnVuY3Rpb24gZigpe00ubGluZVN0YXJ0KCksdj1bXX1mdW5jdGlvbiBoKCl7bCh2WzBdWzBdLHZbMF1bMV0pLE0ubGluZUVuZCgpO3ZhciBuLHQ9TS5jbGVhbigpLGU9eC5idWZmZXIoKSxyPWUubGVuZ3RoO2lmKHYucG9wKCkscC5wdXNoKHYpLHY9bnVsbCxyKXtpZigxJnQpe249ZVswXTt2YXIgdSxyPW4ubGVuZ3RoLTEsbz0tMTtmb3IoaS5saW5lU3RhcnQoKTsrK288cjspaS5wb2ludCgodT1uW29dKVswXSx1WzFdKTtyZXR1cm4gaS5saW5lRW5kKCksdm9pZCAwfXI+MSYmMiZ0JiZlLnB1c2goZS5wb3AoKS5jb25jYXQoZS5zaGlmdCgpKSksZy5wdXNoKGUuZmlsdGVyKEFlKSl9fXZhciBnLHAsdixkPXQoaSksbT11LmludmVydChyWzBdLHJbMV0pLHk9e3BvaW50Om8sbGluZVN0YXJ0OmMsbGluZUVuZDpzLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe3kucG9pbnQ9bCx5LmxpbmVTdGFydD1mLHkubGluZUVuZD1oLGc9W10scD1bXSxpLnBvbHlnb25TdGFydCgpfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7eS5wb2ludD1vLHkubGluZVN0YXJ0PWMseS5saW5lRW5kPXMsZz1Yby5tZXJnZShnKTt2YXIgbj1MZShtLHApO2cubGVuZ3RoP3dlKGcsTmUsbixlLGkpOm4mJihpLmxpbmVTdGFydCgpLGUobnVsbCxudWxsLDEsaSksaS5saW5lRW5kKCkpLGkucG9seWdvbkVuZCgpLGc9cD1udWxsfSxzcGhlcmU6ZnVuY3Rpb24oKXtpLnBvbHlnb25TdGFydCgpLGkubGluZVN0YXJ0KCksZShudWxsLG51bGwsMSxpKSxpLmxpbmVFbmQoKSxpLnBvbHlnb25FbmQoKX19LHg9Q2UoKSxNPXQoeCk7cmV0dXJuIHl9fWZ1bmN0aW9uIEFlKG4pe3JldHVybiBuLmxlbmd0aD4xfWZ1bmN0aW9uIENlKCl7dmFyIG4sdD1bXTtyZXR1cm57bGluZVN0YXJ0OmZ1bmN0aW9uKCl7dC5wdXNoKG49W10pfSxwb2ludDpmdW5jdGlvbih0LGUpe24ucHVzaChbdCxlXSl9LGxpbmVFbmQ6ZyxidWZmZXI6ZnVuY3Rpb24oKXt2YXIgZT10O3JldHVybiB0PVtdLG49bnVsbCxlfSxyZWpvaW46ZnVuY3Rpb24oKXt0Lmxlbmd0aD4xJiZ0LnB1c2godC5wb3AoKS5jb25jYXQodC5zaGlmdCgpKSl9fX1mdW5jdGlvbiBOZShuLHQpe3JldHVybigobj1uLngpWzBdPDA/blsxXS1FYS1BYTpFYS1uWzFdKS0oKHQ9dC54KVswXTwwP3RbMV0tRWEtQWE6RWEtdFsxXSl9ZnVuY3Rpb24gTGUobix0KXt2YXIgZT1uWzBdLHI9blsxXSx1PVtNYXRoLnNpbihlKSwtTWF0aC5jb3MoZSksMF0saT0wLG89MDtoYy5yZXNldCgpO2Zvcih2YXIgYT0wLGM9dC5sZW5ndGg7Yz5hOysrYSl7dmFyIHM9dFthXSxsPXMubGVuZ3RoO2lmKGwpZm9yKHZhciBmPXNbMF0saD1mWzBdLGc9ZlsxXS8yK1NhLzQscD1NYXRoLnNpbihnKSx2PU1hdGguY29zKGcpLGQ9MTs7KXtkPT09bCYmKGQ9MCksbj1zW2RdO3ZhciBtPW5bMF0seT1uWzFdLzIrU2EvNCx4PU1hdGguc2luKHkpLE09TWF0aC5jb3MoeSksXz1tLWgsYj1fPj0wPzE6LTEsdz1iKl8sUz13PlNhLGs9cCp4O2lmKGhjLmFkZChNYXRoLmF0YW4yKGsqYipNYXRoLnNpbih3KSx2Kk0raypNYXRoLmNvcyh3KSkpLGkrPVM/XytiKmthOl8sU15oPj1lXm0+PWUpe3ZhciBFPWZlKHNlKGYpLHNlKG4pKTtwZShFKTt2YXIgQT1mZSh1LEUpO3BlKEEpO3ZhciBDPShTXl8+PTA/LTE6MSkqWChBWzJdKTsocj5DfHxyPT09QyYmKEVbMF18fEVbMV0pKSYmKG8rPVNeXz49MD8xOi0xKX1pZighZCsrKWJyZWFrO2g9bSxwPXgsdj1NLGY9bn19cmV0dXJuKC1BYT5pfHxBYT5pJiYwPmhjKV4xJm99ZnVuY3Rpb24gVGUobil7dmFyIHQsZT0wLzAscj0wLzAsdT0wLzA7cmV0dXJue2xpbmVTdGFydDpmdW5jdGlvbigpe24ubGluZVN0YXJ0KCksdD0xfSxwb2ludDpmdW5jdGlvbihpLG8pe3ZhciBhPWk+MD9TYTotU2EsYz1vYShpLWUpO29hKGMtU2EpPEFhPyhuLnBvaW50KGUscj0ocitvKS8yPjA/RWE6LUVhKSxuLnBvaW50KHUsciksbi5saW5lRW5kKCksbi5saW5lU3RhcnQoKSxuLnBvaW50KGEsciksbi5wb2ludChpLHIpLHQ9MCk6dSE9PWEmJmM+PVNhJiYob2EoZS11KTxBYSYmKGUtPXUqQWEpLG9hKGktYSk8QWEmJihpLT1hKkFhKSxyPXFlKGUscixpLG8pLG4ucG9pbnQodSxyKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQoYSxyKSx0PTApLG4ucG9pbnQoZT1pLHI9byksdT1hfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCksZT1yPTAvMH0sY2xlYW46ZnVuY3Rpb24oKXtyZXR1cm4gMi10fX19ZnVuY3Rpb24gcWUobix0LGUscil7dmFyIHUsaSxvPU1hdGguc2luKG4tZSk7cmV0dXJuIG9hKG8pPkFhP01hdGguYXRhbigoTWF0aC5zaW4odCkqKGk9TWF0aC5jb3MocikpKk1hdGguc2luKGUpLU1hdGguc2luKHIpKih1PU1hdGguY29zKHQpKSpNYXRoLnNpbihuKSkvKHUqaSpvKSk6KHQrcikvMn1mdW5jdGlvbiB6ZShuLHQsZSxyKXt2YXIgdTtpZihudWxsPT1uKXU9ZSpFYSxyLnBvaW50KC1TYSx1KSxyLnBvaW50KDAsdSksci5wb2ludChTYSx1KSxyLnBvaW50KFNhLDApLHIucG9pbnQoU2EsLXUpLHIucG9pbnQoMCwtdSksci5wb2ludCgtU2EsLXUpLHIucG9pbnQoLVNhLDApLHIucG9pbnQoLVNhLHUpO2Vsc2UgaWYob2EoblswXS10WzBdKT5BYSl7dmFyIGk9blswXTx0WzBdP1NhOi1TYTt1PWUqaS8yLHIucG9pbnQoLWksdSksci5wb2ludCgwLHUpLHIucG9pbnQoaSx1KX1lbHNlIHIucG9pbnQodFswXSx0WzFdKX1mdW5jdGlvbiBSZShuKXtmdW5jdGlvbiB0KG4sdCl7cmV0dXJuIE1hdGguY29zKG4pKk1hdGguY29zKHQpPml9ZnVuY3Rpb24gZShuKXt2YXIgZSxpLGMscyxsO3JldHVybntsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtzPWM9ITEsbD0xfSxwb2ludDpmdW5jdGlvbihmLGgpe3ZhciBnLHA9W2YsaF0sdj10KGYsaCksZD1vP3Y/MDp1KGYsaCk6dj91KGYrKDA+Zj9TYTotU2EpLGgpOjA7aWYoIWUmJihzPWM9dikmJm4ubGluZVN0YXJ0KCksdiE9PWMmJihnPXIoZSxwKSwoZGUoZSxnKXx8ZGUocCxnKSkmJihwWzBdKz1BYSxwWzFdKz1BYSx2PXQocFswXSxwWzFdKSkpLHYhPT1jKWw9MCx2PyhuLmxpbmVTdGFydCgpLGc9cihwLGUpLG4ucG9pbnQoZ1swXSxnWzFdKSk6KGc9cihlLHApLG4ucG9pbnQoZ1swXSxnWzFdKSxuLmxpbmVFbmQoKSksZT1nO2Vsc2UgaWYoYSYmZSYmb152KXt2YXIgbTtkJml8fCEobT1yKHAsZSwhMCkpfHwobD0wLG8/KG4ubGluZVN0YXJ0KCksbi5wb2ludChtWzBdWzBdLG1bMF1bMV0pLG4ucG9pbnQobVsxXVswXSxtWzFdWzFdKSxuLmxpbmVFbmQoKSk6KG4ucG9pbnQobVsxXVswXSxtWzFdWzFdKSxuLmxpbmVFbmQoKSxuLmxpbmVTdGFydCgpLG4ucG9pbnQobVswXVswXSxtWzBdWzFdKSkpfSF2fHxlJiZkZShlLHApfHxuLnBvaW50KHBbMF0scFsxXSksZT1wLGM9dixpPWR9LGxpbmVFbmQ6ZnVuY3Rpb24oKXtjJiZuLmxpbmVFbmQoKSxlPW51bGx9LGNsZWFuOmZ1bmN0aW9uKCl7cmV0dXJuIGx8KHMmJmMpPDwxfX19ZnVuY3Rpb24gcihuLHQsZSl7dmFyIHI9c2UobiksdT1zZSh0KSxvPVsxLDAsMF0sYT1mZShyLHUpLGM9bGUoYSxhKSxzPWFbMF0sbD1jLXMqcztpZighbClyZXR1cm4hZSYmbjt2YXIgZj1pKmMvbCxoPS1pKnMvbCxnPWZlKG8sYSkscD1nZShvLGYpLHY9Z2UoYSxoKTtoZShwLHYpO3ZhciBkPWcsbT1sZShwLGQpLHk9bGUoZCxkKSx4PW0qbS15KihsZShwLHApLTEpO2lmKCEoMD54KSl7dmFyIE09TWF0aC5zcXJ0KHgpLF89Z2UoZCwoLW0tTSkveSk7aWYoaGUoXyxwKSxfPXZlKF8pLCFlKXJldHVybiBfO3ZhciBiLHc9blswXSxTPXRbMF0saz1uWzFdLEU9dFsxXTt3PlMmJihiPXcsdz1TLFM9Yik7dmFyIEE9Uy13LEM9b2EoQS1TYSk8QWEsTj1DfHxBYT5BO2lmKCFDJiZrPkUmJihiPWssaz1FLEU9YiksTj9DP2srRT4wXl9bMV08KG9hKF9bMF0tdyk8QWE/azpFKTprPD1fWzFdJiZfWzFdPD1FOkE+U2FeKHc8PV9bMF0mJl9bMF08PVMpKXt2YXIgTD1nZShkLCgtbStNKS95KTtyZXR1cm4gaGUoTCxwKSxbXyx2ZShMKV19fX1mdW5jdGlvbiB1KHQsZSl7dmFyIHI9bz9uOlNhLW4sdT0wO3JldHVybi1yPnQ/dXw9MTp0PnImJih1fD0yKSwtcj5lP3V8PTQ6ZT5yJiYodXw9OCksdX12YXIgaT1NYXRoLmNvcyhuKSxvPWk+MCxhPW9hKGkpPkFhLGM9Y3Iobiw2Kk5hKTtyZXR1cm4gRWUodCxlLGMsbz9bMCwtbl06Wy1TYSxuLVNhXSl9ZnVuY3Rpb24gRGUobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKHUpe3ZhciBpLG89dS5hLGE9dS5iLGM9by54LHM9by55LGw9YS54LGY9YS55LGg9MCxnPTEscD1sLWMsdj1mLXM7aWYoaT1uLWMscHx8IShpPjApKXtpZihpLz1wLDA+cCl7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfWVsc2UgaWYocD4wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9aWYoaT1lLWMscHx8ISgwPmkpKXtpZihpLz1wLDA+cCl7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWVsc2UgaWYocD4wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9aWYoaT10LXMsdnx8IShpPjApKXtpZihpLz12LDA+dil7aWYoaD5pKXJldHVybjtnPmkmJihnPWkpfWVsc2UgaWYodj4wKXtpZihpPmcpcmV0dXJuO2k+aCYmKGg9aSl9aWYoaT1yLXMsdnx8ISgwPmkpKXtpZihpLz12LDA+dil7aWYoaT5nKXJldHVybjtpPmgmJihoPWkpfWVsc2UgaWYodj4wKXtpZihoPmkpcmV0dXJuO2c+aSYmKGc9aSl9cmV0dXJuIGg+MCYmKHUuYT17eDpjK2gqcCx5OnMraCp2fSksMT5nJiYodS5iPXt4OmMrZypwLHk6cytnKnZ9KSx1fX19fX19ZnVuY3Rpb24gUGUobix0LGUscil7ZnVuY3Rpb24gdShyLHUpe3JldHVybiBvYShyWzBdLW4pPEFhP3U+MD8wOjM6b2EoclswXS1lKTxBYT91PjA/MjoxOm9hKHJbMV0tdCk8QWE/dT4wPzE6MDp1PjA/MzoyfWZ1bmN0aW9uIGkobix0KXtyZXR1cm4gbyhuLngsdC54KX1mdW5jdGlvbiBvKG4sdCl7dmFyIGU9dShuLDEpLHI9dSh0LDEpO3JldHVybiBlIT09cj9lLXI6MD09PWU/dFsxXS1uWzFdOjE9PT1lP25bMF0tdFswXToyPT09ZT9uWzFdLXRbMV06dFswXS1uWzBdfXJldHVybiBmdW5jdGlvbihhKXtmdW5jdGlvbiBjKG4pe2Zvcih2YXIgdD0wLGU9ZC5sZW5ndGgscj1uWzFdLHU9MDtlPnU7Kyt1KWZvcih2YXIgaSxvPTEsYT1kW3VdLGM9YS5sZW5ndGgscz1hWzBdO2M+bzsrK28paT1hW29dLHNbMV08PXI/aVsxXT5yJiZaKHMsaSxuKT4wJiYrK3Q6aVsxXTw9ciYmWihzLGksbik8MCYmLS10LHM9aTtyZXR1cm4gMCE9PXR9ZnVuY3Rpb24gcyhpLGEsYyxzKXt2YXIgbD0wLGY9MDtpZihudWxsPT1pfHwobD11KGksYykpIT09KGY9dShhLGMpKXx8byhpLGEpPDBeYz4wKXtkbyBzLnBvaW50KDA9PT1sfHwzPT09bD9uOmUsbD4xP3I6dCk7d2hpbGUoKGw9KGwrYys0KSU0KSE9PWYpfWVsc2Ugcy5wb2ludChhWzBdLGFbMV0pfWZ1bmN0aW9uIGwodSxpKXtyZXR1cm4gdT49biYmZT49dSYmaT49dCYmcj49aX1mdW5jdGlvbiBmKG4sdCl7bChuLHQpJiZhLnBvaW50KG4sdCl9ZnVuY3Rpb24gaCgpe04ucG9pbnQ9cCxkJiZkLnB1c2gobT1bXSksUz0hMCx3PSExLF89Yj0wLzB9ZnVuY3Rpb24gZygpe3YmJihwKHkseCksTSYmdyYmQS5yZWpvaW4oKSx2LnB1c2goQS5idWZmZXIoKSkpLE4ucG9pbnQ9Zix3JiZhLmxpbmVFbmQoKX1mdW5jdGlvbiBwKG4sdCl7bj1NYXRoLm1heCgtQWMsTWF0aC5taW4oQWMsbikpLHQ9TWF0aC5tYXgoLUFjLE1hdGgubWluKEFjLHQpKTt2YXIgZT1sKG4sdCk7aWYoZCYmbS5wdXNoKFtuLHRdKSxTKXk9bix4PXQsTT1lLFM9ITEsZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpKTtlbHNlIGlmKGUmJncpYS5wb2ludChuLHQpO2Vsc2V7dmFyIHI9e2E6e3g6Xyx5OmJ9LGI6e3g6bix5OnR9fTtDKHIpPyh3fHwoYS5saW5lU3RhcnQoKSxhLnBvaW50KHIuYS54LHIuYS55KSksYS5wb2ludChyLmIueCxyLmIueSksZXx8YS5saW5lRW5kKCksaz0hMSk6ZSYmKGEubGluZVN0YXJ0KCksYS5wb2ludChuLHQpLGs9ITEpfV89bixiPXQsdz1lfXZhciB2LGQsbSx5LHgsTSxfLGIsdyxTLGssRT1hLEE9Q2UoKSxDPURlKG4sdCxlLHIpLE49e3BvaW50OmYsbGluZVN0YXJ0OmgsbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2E9QSx2PVtdLGQ9W10saz0hMH0scG9seWdvbkVuZDpmdW5jdGlvbigpe2E9RSx2PVhvLm1lcmdlKHYpO3ZhciB0PWMoW24scl0pLGU9ayYmdCx1PXYubGVuZ3RoOyhlfHx1KSYmKGEucG9seWdvblN0YXJ0KCksZSYmKGEubGluZVN0YXJ0KCkscyhudWxsLG51bGwsMSxhKSxhLmxpbmVFbmQoKSksdSYmd2UodixpLHQscyxhKSxhLnBvbHlnb25FbmQoKSksdj1kPW09bnVsbH19O3JldHVybiBOfX1mdW5jdGlvbiBVZShuLHQpe2Z1bmN0aW9uIGUoZSxyKXtyZXR1cm4gZT1uKGUsciksdChlWzBdLGVbMV0pfXJldHVybiBuLmludmVydCYmdC5pbnZlcnQmJihlLmludmVydD1mdW5jdGlvbihlLHIpe3JldHVybiBlPXQuaW52ZXJ0KGUsciksZSYmbi5pbnZlcnQoZVswXSxlWzFdKX0pLGV9ZnVuY3Rpb24gamUobil7dmFyIHQ9MCxlPVNhLzMscj1ucihuKSx1PXIodCxlKTtyZXR1cm4gdS5wYXJhbGxlbHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/cih0PW5bMF0qU2EvMTgwLGU9blsxXSpTYS8xODApOlsxODAqKHQvU2EpLDE4MCooZS9TYSldfSx1fWZ1bmN0aW9uIEhlKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguc3FydChpLTIqdSpNYXRoLnNpbih0KSkvdTtyZXR1cm5bZSpNYXRoLnNpbihuKj11KSxvLWUqTWF0aC5jb3MobildfXZhciByPU1hdGguc2luKG4pLHU9KHIrTWF0aC5zaW4odCkpLzIsaT0xK3IqKDIqdS1yKSxvPU1hdGguc3FydChpKS91O3JldHVybiBlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdDtyZXR1cm5bTWF0aC5hdGFuMihuLGUpL3UsWCgoaS0obipuK2UqZSkqdSp1KS8oMip1KSldfSxlfWZ1bmN0aW9uIEZlKCl7ZnVuY3Rpb24gbihuLHQpe05jKz11Km4tcip0LHI9bix1PXR9dmFyIHQsZSxyLHU7UmMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtSYy5wb2ludD1uLHQ9cj1pLGU9dT1vfSxSYy5saW5lRW5kPWZ1bmN0aW9uKCl7bih0LGUpfX1mdW5jdGlvbiBPZShuLHQpe0xjPm4mJihMYz1uKSxuPnFjJiYocWM9biksVGM+dCYmKFRjPXQpLHQ+emMmJih6Yz10KX1mdW5jdGlvbiBZZSgpe2Z1bmN0aW9uIG4obix0KXtvLnB1c2goIk0iLG4sIiwiLHQsaSl9ZnVuY3Rpb24gdChuLHQpe28ucHVzaCgiTSIsbiwiLCIsdCksYS5wb2ludD1lfWZ1bmN0aW9uIGUobix0KXtvLnB1c2goIkwiLG4sIiwiLHQpfWZ1bmN0aW9uIHIoKXthLnBvaW50PW59ZnVuY3Rpb24gdSgpe28ucHVzaCgiWiIpfXZhciBpPUllKDQuNSksbz1bXSxhPXtwb2ludDpuLGxpbmVTdGFydDpmdW5jdGlvbigpe2EucG9pbnQ9dH0sbGluZUVuZDpyLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2EubGluZUVuZD11fSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7YS5saW5lRW5kPXIsYS5wb2ludD1ufSxwb2ludFJhZGl1czpmdW5jdGlvbihuKXtyZXR1cm4gaT1JZShuKSxhfSxyZXN1bHQ6ZnVuY3Rpb24oKXtpZihvLmxlbmd0aCl7dmFyIG49by5qb2luKCIiKTtyZXR1cm4gbz1bXSxufX19O3JldHVybiBhfWZ1bmN0aW9uIEllKG4pe3JldHVybiJtMCwiK24rImEiK24rIiwiK24rIiAwIDEsMSAwLCIrLTIqbisiYSIrbisiLCIrbisiIDAgMSwxIDAsIisyKm4rInoifWZ1bmN0aW9uIFplKG4sdCl7ZGMrPW4sbWMrPXQsKyt5Y31mdW5jdGlvbiBWZSgpe2Z1bmN0aW9uIG4obixyKXt2YXIgdT1uLXQsaT1yLWUsbz1NYXRoLnNxcnQodSp1K2kqaSk7eGMrPW8qKHQrbikvMixNYys9byooZStyKS8yLF9jKz1vLFplKHQ9bixlPXIpfXZhciB0LGU7UGMucG9pbnQ9ZnVuY3Rpb24ocix1KXtQYy5wb2ludD1uLFplKHQ9cixlPXUpfX1mdW5jdGlvbiBYZSgpe1BjLnBvaW50PVplfWZ1bmN0aW9uICRlKCl7ZnVuY3Rpb24gbihuLHQpe3ZhciBlPW4tcixpPXQtdSxvPU1hdGguc3FydChlKmUraSppKTt4Yys9byoocituKS8yLE1jKz1vKih1K3QpLzIsX2MrPW8sbz11Km4tcip0LGJjKz1vKihyK24pLHdjKz1vKih1K3QpLFNjKz0zKm8sWmUocj1uLHU9dCl9dmFyIHQsZSxyLHU7UGMucG9pbnQ9ZnVuY3Rpb24oaSxvKXtQYy5wb2ludD1uLFplKHQ9cj1pLGU9dT1vKX0sUGMubGluZUVuZD1mdW5jdGlvbigpe24odCxlKX19ZnVuY3Rpb24gQmUobil7ZnVuY3Rpb24gdCh0LGUpe24ubW92ZVRvKHQsZSksbi5hcmModCxlLG8sMCxrYSl9ZnVuY3Rpb24gZSh0LGUpe24ubW92ZVRvKHQsZSksYS5wb2ludD1yfWZ1bmN0aW9uIHIodCxlKXtuLmxpbmVUbyh0LGUpfWZ1bmN0aW9uIHUoKXthLnBvaW50PXR9ZnVuY3Rpb24gaSgpe24uY2xvc2VQYXRoKCl9dmFyIG89NC41LGE9e3BvaW50OnQsbGluZVN0YXJ0OmZ1bmN0aW9uKCl7YS5wb2ludD1lfSxsaW5lRW5kOnUscG9seWdvblN0YXJ0OmZ1bmN0aW9uKCl7YS5saW5lRW5kPWl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXthLmxpbmVFbmQ9dSxhLnBvaW50PXR9LHBvaW50UmFkaXVzOmZ1bmN0aW9uKG4pe3JldHVybiBvPW4sYX0scmVzdWx0Omd9O3JldHVybiBhfWZ1bmN0aW9uIFdlKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuKGE/cjplKShuKX1mdW5jdGlvbiBlKHQpe3JldHVybiBLZSh0LGZ1bmN0aW9uKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfSl9ZnVuY3Rpb24gcih0KXtmdW5jdGlvbiBlKGUscil7ZT1uKGUsciksdC5wb2ludChlWzBdLGVbMV0pfWZ1bmN0aW9uIHIoKXt4PTAvMCxTLnBvaW50PWksdC5saW5lU3RhcnQoKX1mdW5jdGlvbiBpKGUscil7dmFyIGk9c2UoW2Uscl0pLG89bihlLHIpO3UoeCxNLHksXyxiLHcseD1vWzBdLE09b1sxXSx5PWUsXz1pWzBdLGI9aVsxXSx3PWlbMl0sYSx0KSx0LnBvaW50KHgsTSl9ZnVuY3Rpb24gbygpe1MucG9pbnQ9ZSx0LmxpbmVFbmQoKX1mdW5jdGlvbiBjKCl7cigpLFMucG9pbnQ9cyxTLmxpbmVFbmQ9bH1mdW5jdGlvbiBzKG4sdCl7aShmPW4saD10KSxnPXgscD1NLHY9XyxkPWIsbT13LFMucG9pbnQ9aX1mdW5jdGlvbiBsKCl7dSh4LE0seSxfLGIsdyxnLHAsZix2LGQsbSxhLHQpLFMubGluZUVuZD1vLG8oKX12YXIgZixoLGcscCx2LGQsbSx5LHgsTSxfLGIsdyxTPXtwb2ludDplLGxpbmVTdGFydDpyLGxpbmVFbmQ6byxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLFMubGluZVN0YXJ0PWN9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25FbmQoKSxTLmxpbmVTdGFydD1yfX07cmV0dXJuIFN9ZnVuY3Rpb24gdSh0LGUscixhLGMscyxsLGYsaCxnLHAsdixkLG0pe3ZhciB5PWwtdCx4PWYtZSxNPXkqeSt4Kng7aWYoTT40KmkmJmQtLSl7dmFyIF89YStnLGI9YytwLHc9cyt2LFM9TWF0aC5zcXJ0KF8qXytiKmIrdyp3KSxrPU1hdGguYXNpbih3Lz1TKSxFPW9hKG9hKHcpLTEpPEFhfHxvYShyLWgpPEFhPyhyK2gpLzI6TWF0aC5hdGFuMihiLF8pLEE9bihFLGspLEM9QVswXSxOPUFbMV0sTD1DLXQsVD1OLWUscT14KkwteSpUOyhxKnEvTT5pfHxvYSgoeSpMK3gqVCkvTS0uNSk+LjN8fG8+YSpnK2MqcCtzKnYpJiYodSh0LGUscixhLGMscyxDLE4sRSxfLz1TLGIvPVMsdyxkLG0pLG0ucG9pbnQoQyxOKSx1KEMsTixFLF8sYix3LGwsZixoLGcscCx2LGQsbSkpfX12YXIgaT0uNSxvPU1hdGguY29zKDMwKk5hKSxhPTE2O3JldHVybiB0LnByZWNpc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT0oaT1uKm4pPjAmJjE2LHQpOk1hdGguc3FydChpKX0sdH1mdW5jdGlvbiBKZShuKXt2YXIgdD1XZShmdW5jdGlvbih0LGUpe3JldHVybiBuKFt0KkxhLGUqTGFdKX0pO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gdHIodChuKSl9fWZ1bmN0aW9uIEdlKG4pe3RoaXMuc3RyZWFtPW59ZnVuY3Rpb24gS2Uobix0KXtyZXR1cm57cG9pbnQ6dCxzcGhlcmU6ZnVuY3Rpb24oKXtuLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXtuLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7bi5saW5lRW5kKCl9LHBvbHlnb25TdGFydDpmdW5jdGlvbigpe24ucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtuLnBvbHlnb25FbmQoKX19fWZ1bmN0aW9uIFFlKG4pe3JldHVybiBucihmdW5jdGlvbigpe3JldHVybiBufSkoKX1mdW5jdGlvbiBucihuKXtmdW5jdGlvbiB0KG4pe3JldHVybiBuPWEoblswXSpOYSxuWzFdKk5hKSxbblswXSpoK2Mscy1uWzFdKmhdfWZ1bmN0aW9uIGUobil7cmV0dXJuIG49YS5pbnZlcnQoKG5bMF0tYykvaCwocy1uWzFdKS9oKSxuJiZbblswXSpMYSxuWzFdKkxhXX1mdW5jdGlvbiByKCl7YT1VZShvPXVyKG0seSx4KSxpKTt2YXIgbj1pKHYsZCk7cmV0dXJuIGM9Zy1uWzBdKmgscz1wK25bMV0qaCx1KCl9ZnVuY3Rpb24gdSgpe3JldHVybiBsJiYobC52YWxpZD0hMSxsPW51bGwpLHR9dmFyIGksbyxhLGMscyxsLGY9V2UoZnVuY3Rpb24obix0KXtyZXR1cm4gbj1pKG4sdCksW25bMF0qaCtjLHMtblsxXSpoXX0pLGg9MTUwLGc9NDgwLHA9MjUwLHY9MCxkPTAsbT0wLHk9MCx4PTAsTT1FYyxfPWJ0LGI9bnVsbCx3PW51bGw7cmV0dXJuIHQuc3RyZWFtPWZ1bmN0aW9uKG4pe3JldHVybiBsJiYobC52YWxpZD0hMSksbD10cihNKG8sZihfKG4pKSkpLGwudmFsaWQ9ITAsbH0sdC5jbGlwQW5nbGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KE09bnVsbD09bj8oYj1uLEVjKTpSZSgoYj0rbikqTmEpLHUoKSk6Yn0sdC5jbGlwRXh0ZW50PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PW4sXz1uP1BlKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pOmJ0LHUoKSk6d30sdC5zY2FsZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD0rbixyKCkpOmh9LHQudHJhbnNsYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPStuWzBdLHA9K25bMV0scigpKTpbZyxwXX0sdC5jZW50ZXI9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHY9blswXSUzNjAqTmEsZD1uWzFdJTM2MCpOYSxyKCkpOlt2KkxhLGQqTGFdfSx0LnJvdGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obT1uWzBdJTM2MCpOYSx5PW5bMV0lMzYwKk5hLHg9bi5sZW5ndGg+Mj9uWzJdJTM2MCpOYTowLHIoKSk6W20qTGEseSpMYSx4KkxhXX0sWG8ucmViaW5kKHQsZiwicHJlY2lzaW9uIiksZnVuY3Rpb24oKXtyZXR1cm4gaT1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmludmVydD1pLmludmVydCYmZSxyKCl9fWZ1bmN0aW9uIHRyKG4pe3JldHVybiBLZShuLGZ1bmN0aW9uKHQsZSl7bi5wb2ludCh0Kk5hLGUqTmEpfSl9ZnVuY3Rpb24gZXIobix0KXtyZXR1cm5bbix0XX1mdW5jdGlvbiBycihuLHQpe3JldHVybltuPlNhP24ta2E6LVNhPm4/bitrYTpuLHRdfWZ1bmN0aW9uIHVyKG4sdCxlKXtyZXR1cm4gbj90fHxlP1VlKG9yKG4pLGFyKHQsZSkpOm9yKG4pOnR8fGU/YXIodCxlKTpycn1mdW5jdGlvbiBpcihuKXtyZXR1cm4gZnVuY3Rpb24odCxlKXtyZXR1cm4gdCs9bixbdD5TYT90LWthOi1TYT50P3Qra2E6dCxlXX19ZnVuY3Rpb24gb3Iobil7dmFyIHQ9aXIobik7cmV0dXJuIHQuaW52ZXJ0PWlyKC1uKSx0fWZ1bmN0aW9uIGFyKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPU1hdGguY29zKHQpLGE9TWF0aC5jb3MobikqZSxjPU1hdGguc2luKG4pKmUscz1NYXRoLnNpbih0KSxsPXMqcithKnU7cmV0dXJuW01hdGguYXRhbjIoYyppLWwqbyxhKnItcyp1KSxYKGwqaStjKm8pXX12YXIgcj1NYXRoLmNvcyhuKSx1PU1hdGguc2luKG4pLGk9TWF0aC5jb3ModCksbz1NYXRoLnNpbih0KTtyZXR1cm4gZS5pbnZlcnQ9ZnVuY3Rpb24obix0KXt2YXIgZT1NYXRoLmNvcyh0KSxhPU1hdGguY29zKG4pKmUsYz1NYXRoLnNpbihuKSplLHM9TWF0aC5zaW4odCksbD1zKmktYypvO3JldHVybltNYXRoLmF0YW4yKGMqaStzKm8sYSpyK2wqdSksWChsKnItYSp1KV19LGV9ZnVuY3Rpb24gY3Iobix0KXt2YXIgZT1NYXRoLmNvcyhuKSxyPU1hdGguc2luKG4pO3JldHVybiBmdW5jdGlvbih1LGksbyxhKXt2YXIgYz1vKnQ7bnVsbCE9dT8odT1zcihlLHUpLGk9c3IoZSxpKSwobz4wP2k+dTp1PmkpJiYodSs9byprYSkpOih1PW4rbyprYSxpPW4tLjUqYyk7Zm9yKHZhciBzLGw9dTtvPjA/bD5pOmk+bDtsLT1jKWEucG9pbnQoKHM9dmUoW2UsLXIqTWF0aC5jb3MobCksLXIqTWF0aC5zaW4obCldKSlbMF0sc1sxXSl9fWZ1bmN0aW9uIHNyKG4sdCl7dmFyIGU9c2UodCk7ZVswXS09bixwZShlKTt2YXIgcj1WKC1lWzFdKTtyZXR1cm4oKC1lWzJdPDA/LXI6cikrMipNYXRoLlBJLUFhKSUoMipNYXRoLlBJKX1mdW5jdGlvbiBscihuLHQsZSl7dmFyIHI9WG8ucmFuZ2Uobix0LUFhLGUpLmNvbmNhdCh0KTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIHIubWFwKGZ1bmN0aW9uKHQpe3JldHVybltuLHRdfSl9fWZ1bmN0aW9uIGZyKG4sdCxlKXt2YXIgcj1Yby5yYW5nZShuLHQtQWEsZSkuY29uY2F0KHQpO3JldHVybiBmdW5jdGlvbihuKXtyZXR1cm4gci5tYXAoZnVuY3Rpb24odCl7cmV0dXJuW3Qsbl19KX19ZnVuY3Rpb24gaHIobil7cmV0dXJuIG4uc291cmNlfWZ1bmN0aW9uIGdyKG4pe3JldHVybiBuLnRhcmdldH1mdW5jdGlvbiBwcihuLHQsZSxyKXt2YXIgdT1NYXRoLmNvcyh0KSxpPU1hdGguc2luKHQpLG89TWF0aC5jb3MociksYT1NYXRoLnNpbihyKSxjPXUqTWF0aC5jb3Mobikscz11Kk1hdGguc2luKG4pLGw9bypNYXRoLmNvcyhlKSxmPW8qTWF0aC5zaW4oZSksaD0yKk1hdGguYXNpbihNYXRoLnNxcnQoSihyLXQpK3UqbypKKGUtbikpKSxnPTEvTWF0aC5zaW4oaCkscD1oP2Z1bmN0aW9uKG4pe3ZhciB0PU1hdGguc2luKG4qPWgpKmcsZT1NYXRoLnNpbihoLW4pKmcscj1lKmMrdCpsLHU9ZSpzK3QqZixvPWUqaSt0KmE7cmV0dXJuW01hdGguYXRhbjIodSxyKSpMYSxNYXRoLmF0YW4yKG8sTWF0aC5zcXJ0KHIqcit1KnUpKSpMYV19OmZ1bmN0aW9uKCl7cmV0dXJuW24qTGEsdCpMYV19O3JldHVybiBwLmRpc3RhbmNlPWgscH1mdW5jdGlvbiB2cigpe2Z1bmN0aW9uIG4obix1KXt2YXIgaT1NYXRoLnNpbih1Kj1OYSksbz1NYXRoLmNvcyh1KSxhPW9hKChuKj1OYSktdCksYz1NYXRoLmNvcyhhKTtVYys9TWF0aC5hdGFuMihNYXRoLnNxcnQoKGE9bypNYXRoLnNpbihhKSkqYSsoYT1yKmktZSpvKmMpKmEpLGUqaStyKm8qYyksdD1uLGU9aSxyPW99dmFyIHQsZSxyO2pjLnBvaW50PWZ1bmN0aW9uKHUsaSl7dD11Kk5hLGU9TWF0aC5zaW4oaSo9TmEpLHI9TWF0aC5jb3MoaSksamMucG9pbnQ9bn0samMubGluZUVuZD1mdW5jdGlvbigpe2pjLnBvaW50PWpjLmxpbmVFbmQ9Z319ZnVuY3Rpb24gZHIobix0KXtmdW5jdGlvbiBlKHQsZSl7dmFyIHI9TWF0aC5jb3ModCksdT1NYXRoLmNvcyhlKSxpPW4ocip1KTtyZXR1cm5baSp1Kk1hdGguc2luKHQpLGkqTWF0aC5zaW4oZSldfXJldHVybiBlLmludmVydD1mdW5jdGlvbihuLGUpe3ZhciByPU1hdGguc3FydChuKm4rZSplKSx1PXQociksaT1NYXRoLnNpbih1KSxvPU1hdGguY29zKHUpO3JldHVybltNYXRoLmF0YW4yKG4qaSxyKm8pLE1hdGguYXNpbihyJiZlKmkvcildfSxlfWZ1bmN0aW9uIG1yKG4sdCl7ZnVuY3Rpb24gZShuLHQpe3ZhciBlPW9hKG9hKHQpLUVhKTxBYT8wOm8vTWF0aC5wb3codSh0KSxpKTtyZXR1cm5bZSpNYXRoLnNpbihpKm4pLG8tZSpNYXRoLmNvcyhpKm4pXX12YXIgcj1NYXRoLmNvcyhuKSx1PWZ1bmN0aW9uKG4pe3JldHVybiBNYXRoLnRhbihTYS80K24vMil9LGk9bj09PXQ/TWF0aC5zaW4obik6TWF0aC5sb2coci9NYXRoLmNvcyh0KSkvTWF0aC5sb2codSh0KS91KG4pKSxvPXIqTWF0aC5wb3codShuKSxpKS9pO3JldHVybiBpPyhlLmludmVydD1mdW5jdGlvbihuLHQpe3ZhciBlPW8tdCxyPUkoaSkqTWF0aC5zcXJ0KG4qbitlKmUpO3JldHVybltNYXRoLmF0YW4yKG4sZSkvaSwyKk1hdGguYXRhbihNYXRoLnBvdyhvL3IsMS9pKSktRWFdfSxlKTp4cn1mdW5jdGlvbiB5cihuLHQpe2Z1bmN0aW9uIGUobix0KXt2YXIgZT1pLXQ7cmV0dXJuW2UqTWF0aC5zaW4odSpuKSxpLWUqTWF0aC5jb3ModSpuKV19dmFyIHI9TWF0aC5jb3MobiksdT1uPT09dD9NYXRoLnNpbihuKTooci1NYXRoLmNvcyh0KSkvKHQtbiksaT1yL3UrbjtyZXR1cm4gb2EodSk8QWE/ZXI6KGUuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7dmFyIGU9aS10O3JldHVybltNYXRoLmF0YW4yKG4sZSkvdSxpLUkodSkqTWF0aC5zcXJ0KG4qbitlKmUpXX0sZSl9ZnVuY3Rpb24geHIobix0KXtyZXR1cm5bbixNYXRoLmxvZyhNYXRoLnRhbihTYS80K3QvMikpXX1mdW5jdGlvbiBNcihuKXt2YXIgdCxlPVFlKG4pLHI9ZS5zY2FsZSx1PWUudHJhbnNsYXRlLGk9ZS5jbGlwRXh0ZW50O3JldHVybiBlLnNjYWxlPWZ1bmN0aW9uKCl7dmFyIG49ci5hcHBseShlLGFyZ3VtZW50cyk7cmV0dXJuIG49PT1lP3Q/ZS5jbGlwRXh0ZW50KG51bGwpOmU6bn0sZS50cmFuc2xhdGU9ZnVuY3Rpb24oKXt2YXIgbj11LmFwcGx5KGUsYXJndW1lbnRzKTtyZXR1cm4gbj09PWU/dD9lLmNsaXBFeHRlbnQobnVsbCk6ZTpufSxlLmNsaXBFeHRlbnQ9ZnVuY3Rpb24obil7dmFyIG89aS5hcHBseShlLGFyZ3VtZW50cyk7aWYobz09PWUpe2lmKHQ9bnVsbD09bil7dmFyIGE9U2EqcigpLGM9dSgpO2koW1tjWzBdLWEsY1sxXS1hXSxbY1swXSthLGNbMV0rYV1dKX19ZWxzZSB0JiYobz1udWxsKTtyZXR1cm4gb30sZS5jbGlwRXh0ZW50KG51bGwpfWZ1bmN0aW9uIF9yKG4sdCl7cmV0dXJuW01hdGgubG9nKE1hdGgudGFuKFNhLzQrdC8yKSksLW5dfWZ1bmN0aW9uIGJyKG4pe3JldHVybiBuWzBdfWZ1bmN0aW9uIHdyKG4pe3JldHVybiBuWzFdfWZ1bmN0aW9uIFNyKG4pe2Zvcih2YXIgdD1uLmxlbmd0aCxlPVswLDFdLHI9Mix1PTI7dD51O3UrKyl7Zm9yKDtyPjEmJloobltlW3ItMl1dLG5bZVtyLTFdXSxuW3VdKTw9MDspLS1yO2VbcisrXT11fXJldHVybiBlLnNsaWNlKDAscil9ZnVuY3Rpb24ga3Iobix0KXtyZXR1cm4gblswXS10WzBdfHxuWzFdLXRbMV19ZnVuY3Rpb24gRXIobix0LGUpe3JldHVybihlWzBdLXRbMF0pKihuWzFdLXRbMV0pPChlWzFdLXRbMV0pKihuWzBdLXRbMF0pfWZ1bmN0aW9uIEFyKG4sdCxlLHIpe3ZhciB1PW5bMF0saT1lWzBdLG89dFswXS11LGE9clswXS1pLGM9blsxXSxzPWVbMV0sbD10WzFdLWMsZj1yWzFdLXMsaD0oYSooYy1zKS1mKih1LWkpKS8oZipvLWEqbCk7cmV0dXJuW3UraCpvLGMraCpsXX1mdW5jdGlvbiBDcihuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4hKHRbMF0tZVswXXx8dFsxXS1lWzFdKX1mdW5jdGlvbiBOcigpe0pyKHRoaXMpLHRoaXMuZWRnZT10aGlzLnNpdGU9dGhpcy5jaXJjbGU9bnVsbH1mdW5jdGlvbiBMcihuKXt2YXIgdD1KYy5wb3AoKXx8bmV3IE5yO3JldHVybiB0LnNpdGU9bix0fWZ1bmN0aW9uIFRyKG4pe09yKG4pLCRjLnJlbW92ZShuKSxKYy5wdXNoKG4pLEpyKG4pfWZ1bmN0aW9uIHFyKG4pe3ZhciB0PW4uY2lyY2xlLGU9dC54LHI9dC5jeSx1PXt4OmUseTpyfSxpPW4uUCxvPW4uTixhPVtuXTtUcihuKTtmb3IodmFyIGM9aTtjLmNpcmNsZSYmb2EoZS1jLmNpcmNsZS54KTxBYSYmb2Eoci1jLmNpcmNsZS5jeSk8QWE7KWk9Yy5QLGEudW5zaGlmdChjKSxUcihjKSxjPWk7YS51bnNoaWZ0KGMpLE9yKGMpO2Zvcih2YXIgcz1vO3MuY2lyY2xlJiZvYShlLXMuY2lyY2xlLngpPEFhJiZvYShyLXMuY2lyY2xlLmN5KTxBYTspbz1zLk4sYS5wdXNoKHMpLFRyKHMpLHM9bzthLnB1c2gocyksT3Iocyk7dmFyIGwsZj1hLmxlbmd0aDtmb3IobD0xO2Y+bDsrK2wpcz1hW2xdLGM9YVtsLTFdLCRyKHMuZWRnZSxjLnNpdGUscy5zaXRlLHUpO2M9YVswXSxzPWFbZi0xXSxzLmVkZ2U9VnIoYy5zaXRlLHMuc2l0ZSxudWxsLHUpLEZyKGMpLEZyKHMpfWZ1bmN0aW9uIHpyKG4pe2Zvcih2YXIgdCxlLHIsdSxpPW4ueCxvPW4ueSxhPSRjLl87YTspaWYocj1ScihhLG8pLWkscj5BYSlhPWEuTDtlbHNle2lmKHU9aS1EcihhLG8pLCEodT5BYSkpe3I+LUFhPyh0PWEuUCxlPWEpOnU+LUFhPyh0PWEsZT1hLk4pOnQ9ZT1hO2JyZWFrfWlmKCFhLlIpe3Q9YTticmVha31hPWEuUn12YXIgYz1McihuKTtpZigkYy5pbnNlcnQodCxjKSx0fHxlKXtpZih0PT09ZSlyZXR1cm4gT3IodCksZT1Mcih0LnNpdGUpLCRjLmluc2VydChjLGUpLGMuZWRnZT1lLmVkZ2U9VnIodC5zaXRlLGMuc2l0ZSksRnIodCksRnIoZSksdm9pZCAwO2lmKCFlKXJldHVybiBjLmVkZ2U9VnIodC5zaXRlLGMuc2l0ZSksdm9pZCAwO09yKHQpLE9yKGUpO3ZhciBzPXQuc2l0ZSxsPXMueCxmPXMueSxoPW4ueC1sLGc9bi55LWYscD1lLnNpdGUsdj1wLngtbCxkPXAueS1mLG09MiooaCpkLWcqdikseT1oKmgrZypnLHg9dip2K2QqZCxNPXt4OihkKnktZyp4KS9tK2wseTooaCp4LXYqeSkvbStmfTskcihlLmVkZ2UscyxwLE0pLGMuZWRnZT1WcihzLG4sbnVsbCxNKSxlLmVkZ2U9VnIobixwLG51bGwsTSksRnIodCksRnIoZSl9fWZ1bmN0aW9uIFJyKG4sdCl7dmFyIGU9bi5zaXRlLHI9ZS54LHU9ZS55LGk9dS10O2lmKCFpKXJldHVybiByO3ZhciBvPW4uUDtpZighbylyZXR1cm4tMS8wO2U9by5zaXRlO3ZhciBhPWUueCxjPWUueSxzPWMtdDtpZighcylyZXR1cm4gYTt2YXIgbD1hLXIsZj0xL2ktMS9zLGg9bC9zO3JldHVybiBmPygtaCtNYXRoLnNxcnQoaCpoLTIqZioobCpsLygtMipzKS1jK3MvMit1LWkvMikpKS9mK3I6KHIrYSkvMn1mdW5jdGlvbiBEcihuLHQpe3ZhciBlPW4uTjtpZihlKXJldHVybiBScihlLHQpO3ZhciByPW4uc2l0ZTtyZXR1cm4gci55PT09dD9yLng6MS8wfWZ1bmN0aW9uIFByKG4pe3RoaXMuc2l0ZT1uLHRoaXMuZWRnZXM9W119ZnVuY3Rpb24gVXIobil7Zm9yKHZhciB0LGUscix1LGksbyxhLGMscyxsLGY9blswXVswXSxoPW5bMV1bMF0sZz1uWzBdWzFdLHA9blsxXVsxXSx2PVhjLGQ9di5sZW5ndGg7ZC0tOylpZihpPXZbZF0saSYmaS5wcmVwYXJlKCkpZm9yKGE9aS5lZGdlcyxjPWEubGVuZ3RoLG89MDtjPm87KWw9YVtvXS5lbmQoKSxyPWwueCx1PWwueSxzPWFbKytvJWNdLnN0YXJ0KCksdD1zLngsZT1zLnksKG9hKHItdCk+QWF8fG9hKHUtZSk+QWEpJiYoYS5zcGxpY2UobywwLG5ldyBCcihYcihpLnNpdGUsbCxvYShyLWYpPEFhJiZwLXU+QWE/e3g6Zix5Om9hKHQtZik8QWE/ZTpwfTpvYSh1LXApPEFhJiZoLXI+QWE/e3g6b2EoZS1wKTxBYT90OmgseTpwfTpvYShyLWgpPEFhJiZ1LWc+QWE/e3g6aCx5Om9hKHQtaCk8QWE/ZTpnfTpvYSh1LWcpPEFhJiZyLWY+QWE/e3g6b2EoZS1nKTxBYT90OmYseTpnfTpudWxsKSxpLnNpdGUsbnVsbCkpLCsrYyl9ZnVuY3Rpb24ganIobix0KXtyZXR1cm4gdC5hbmdsZS1uLmFuZ2xlfWZ1bmN0aW9uIEhyKCl7SnIodGhpcyksdGhpcy54PXRoaXMueT10aGlzLmFyYz10aGlzLnNpdGU9dGhpcy5jeT1udWxsfWZ1bmN0aW9uIEZyKG4pe3ZhciB0PW4uUCxlPW4uTjtpZih0JiZlKXt2YXIgcj10LnNpdGUsdT1uLnNpdGUsaT1lLnNpdGU7aWYociE9PWkpe3ZhciBvPXUueCxhPXUueSxjPXIueC1vLHM9ci55LWEsbD1pLngtbyxmPWkueS1hLGg9MiooYypmLXMqbCk7aWYoIShoPj0tQ2EpKXt2YXIgZz1jKmMrcypzLHA9bCpsK2YqZix2PShmKmctcypwKS9oLGQ9KGMqcC1sKmcpL2gsZj1kK2EsbT1HYy5wb3AoKXx8bmV3IEhyO20uYXJjPW4sbS5zaXRlPXUsbS54PXYrbyxtLnk9ZitNYXRoLnNxcnQodip2K2QqZCksbS5jeT1mLG4uY2lyY2xlPW07Zm9yKHZhciB5PW51bGwseD1XYy5fO3g7KWlmKG0ueTx4Lnl8fG0ueT09PXgueSYmbS54PD14Lngpe2lmKCF4Lkwpe3k9eC5QO2JyZWFrfXg9eC5MfWVsc2V7aWYoIXguUil7eT14O2JyZWFrfXg9eC5SfVdjLmluc2VydCh5LG0pLHl8fChCYz1tKX19fX1mdW5jdGlvbiBPcihuKXt2YXIgdD1uLmNpcmNsZTt0JiYodC5QfHwoQmM9dC5OKSxXYy5yZW1vdmUodCksR2MucHVzaCh0KSxKcih0KSxuLmNpcmNsZT1udWxsKX1mdW5jdGlvbiBZcihuKXtmb3IodmFyIHQsZT1WYyxyPURlKG5bMF1bMF0sblswXVsxXSxuWzFdWzBdLG5bMV1bMV0pLHU9ZS5sZW5ndGg7dS0tOyl0PWVbdV0sKCFJcih0LG4pfHwhcih0KXx8b2EodC5hLngtdC5iLngpPEFhJiZvYSh0LmEueS10LmIueSk8QWEpJiYodC5hPXQuYj1udWxsLGUuc3BsaWNlKHUsMSkpfWZ1bmN0aW9uIElyKG4sdCl7dmFyIGU9bi5iO2lmKGUpcmV0dXJuITA7dmFyIHIsdSxpPW4uYSxvPXRbMF1bMF0sYT10WzFdWzBdLGM9dFswXVsxXSxzPXRbMV1bMV0sbD1uLmwsZj1uLnIsaD1sLngsZz1sLnkscD1mLngsdj1mLnksZD0oaCtwKS8yLG09KGcrdikvMjtpZih2PT09Zyl7aWYobz5kfHxkPj1hKXJldHVybjtpZihoPnApe2lmKGkpe2lmKGkueT49cylyZXR1cm59ZWxzZSBpPXt4OmQseTpjfTtlPXt4OmQseTpzfX1lbHNle2lmKGkpe2lmKGkueTxjKXJldHVybn1lbHNlIGk9e3g6ZCx5OnN9O2U9e3g6ZCx5OmN9fX1lbHNlIGlmKHI9KGgtcCkvKHYtZyksdT1tLXIqZCwtMT5yfHxyPjEpaWYoaD5wKXtpZihpKXtpZihpLnk+PXMpcmV0dXJufWVsc2UgaT17eDooYy11KS9yLHk6Y307ZT17eDoocy11KS9yLHk6c319ZWxzZXtpZihpKXtpZihpLnk8YylyZXR1cm59ZWxzZSBpPXt4OihzLXUpL3IseTpzfTtlPXt4OihjLXUpL3IseTpjfX1lbHNlIGlmKHY+Zyl7aWYoaSl7aWYoaS54Pj1hKXJldHVybn1lbHNlIGk9e3g6byx5OnIqbyt1fTtlPXt4OmEseTpyKmErdX19ZWxzZXtpZihpKXtpZihpLng8bylyZXR1cm59ZWxzZSBpPXt4OmEseTpyKmErdX07ZT17eDpvLHk6cipvK3V9fXJldHVybiBuLmE9aSxuLmI9ZSwhMH1mdW5jdGlvbiBacihuLHQpe3RoaXMubD1uLHRoaXMucj10LHRoaXMuYT10aGlzLmI9bnVsbH1mdW5jdGlvbiBWcihuLHQsZSxyKXt2YXIgdT1uZXcgWnIobix0KTtyZXR1cm4gVmMucHVzaCh1KSxlJiYkcih1LG4sdCxlKSxyJiYkcih1LHQsbixyKSxYY1tuLmldLmVkZ2VzLnB1c2gobmV3IEJyKHUsbix0KSksWGNbdC5pXS5lZGdlcy5wdXNoKG5ldyBCcih1LHQsbikpLHV9ZnVuY3Rpb24gWHIobix0LGUpe3ZhciByPW5ldyBacihuLG51bGwpO3JldHVybiByLmE9dCxyLmI9ZSxWYy5wdXNoKHIpLHJ9ZnVuY3Rpb24gJHIobix0LGUscil7bi5hfHxuLmI/bi5sPT09ZT9uLmI9cjpuLmE9cjoobi5hPXIsbi5sPXQsbi5yPWUpfWZ1bmN0aW9uIEJyKG4sdCxlKXt2YXIgcj1uLmEsdT1uLmI7dGhpcy5lZGdlPW4sdGhpcy5zaXRlPXQsdGhpcy5hbmdsZT1lP01hdGguYXRhbjIoZS55LXQueSxlLngtdC54KTpuLmw9PT10P01hdGguYXRhbjIodS54LXIueCxyLnktdS55KTpNYXRoLmF0YW4yKHIueC11LngsdS55LXIueSl9ZnVuY3Rpb24gV3IoKXt0aGlzLl89bnVsbH1mdW5jdGlvbiBKcihuKXtuLlU9bi5DPW4uTD1uLlI9bi5QPW4uTj1udWxsfWZ1bmN0aW9uIEdyKG4sdCl7dmFyIGU9dCxyPXQuUix1PWUuVTt1P3UuTD09PWU/dS5MPXI6dS5SPXI6bi5fPXIsci5VPXUsZS5VPXIsZS5SPXIuTCxlLlImJihlLlIuVT1lKSxyLkw9ZX1mdW5jdGlvbiBLcihuLHQpe3ZhciBlPXQscj10LkwsdT1lLlU7dT91Lkw9PT1lP3UuTD1yOnUuUj1yOm4uXz1yLHIuVT11LGUuVT1yLGUuTD1yLlIsZS5MJiYoZS5MLlU9ZSksci5SPWV9ZnVuY3Rpb24gUXIobil7Zm9yKDtuLkw7KW49bi5MO3JldHVybiBufWZ1bmN0aW9uIG51KG4sdCl7dmFyIGUscix1LGk9bi5zb3J0KHR1KS5wb3AoKTtmb3IoVmM9W10sWGM9bmV3IEFycmF5KG4ubGVuZ3RoKSwkYz1uZXcgV3IsV2M9bmV3IFdyOzspaWYodT1CYyxpJiYoIXV8fGkueTx1Lnl8fGkueT09PXUueSYmaS54PHUueCkpKGkueCE9PWV8fGkueSE9PXIpJiYoWGNbaS5pXT1uZXcgUHIoaSksenIoaSksZT1pLngscj1pLnkpLGk9bi5wb3AoKTtlbHNle2lmKCF1KWJyZWFrO3FyKHUuYXJjKX10JiYoWXIodCksVXIodCkpO3ZhciBvPXtjZWxsczpYYyxlZGdlczpWY307cmV0dXJuICRjPVdjPVZjPVhjPW51bGwsb31mdW5jdGlvbiB0dShuLHQpe3JldHVybiB0Lnktbi55fHx0Lngtbi54fWZ1bmN0aW9uIGV1KG4sdCxlKXtyZXR1cm4obi54LWUueCkqKHQueS1uLnkpLShuLngtdC54KSooZS55LW4ueSl9ZnVuY3Rpb24gcnUobil7cmV0dXJuIG4ueH1mdW5jdGlvbiB1dShuKXtyZXR1cm4gbi55fWZ1bmN0aW9uIGl1KCl7cmV0dXJue2xlYWY6ITAsbm9kZXM6W10scG9pbnQ6bnVsbCx4Om51bGwseTpudWxsfX1mdW5jdGlvbiBvdShuLHQsZSxyLHUsaSl7aWYoIW4odCxlLHIsdSxpKSl7dmFyIG89LjUqKGUrdSksYT0uNSoocitpKSxjPXQubm9kZXM7Y1swXSYmb3UobixjWzBdLGUscixvLGEpLGNbMV0mJm91KG4sY1sxXSxvLHIsdSxhKSxjWzJdJiZvdShuLGNbMl0sZSxhLG8saSksY1szXSYmb3UobixjWzNdLG8sYSx1LGkpfX1mdW5jdGlvbiBhdShuLHQpe249WG8ucmdiKG4pLHQ9WG8ucmdiKHQpO3ZhciBlPW4ucixyPW4uZyx1PW4uYixpPXQuci1lLG89dC5nLXIsYT10LmItdTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIiMiK3Z0KE1hdGgucm91bmQoZStpKm4pKSt2dChNYXRoLnJvdW5kKHIrbypuKSkrdnQoTWF0aC5yb3VuZCh1K2EqbikpfX1mdW5jdGlvbiBjdShuLHQpe3ZhciBlLHI9e30sdT17fTtmb3IoZSBpbiBuKWUgaW4gdD9yW2VdPWZ1KG5bZV0sdFtlXSk6dVtlXT1uW2VdO2ZvcihlIGluIHQpZSBpbiBufHwodVtlXT10W2VdKTtyZXR1cm4gZnVuY3Rpb24obil7Zm9yKGUgaW4gcil1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIHN1KG4sdCl7cmV0dXJuIHQtPW49K24sZnVuY3Rpb24oZSl7cmV0dXJuIG4rdCplfX1mdW5jdGlvbiBsdShuLHQpe3ZhciBlLHIsdSxpLG8sYT0wLGM9MCxzPVtdLGw9W107Zm9yKG4rPSIiLHQrPSIiLFFjLmxhc3RJbmRleD0wLHI9MDtlPVFjLmV4ZWModCk7KytyKWUuaW5kZXgmJnMucHVzaCh0LnN1YnN0cmluZyhhLGM9ZS5pbmRleCkpLGwucHVzaCh7aTpzLmxlbmd0aCx4OmVbMF19KSxzLnB1c2gobnVsbCksYT1RYy5sYXN0SW5kZXg7Zm9yKGE8dC5sZW5ndGgmJnMucHVzaCh0LnN1YnN0cmluZyhhKSkscj0wLGk9bC5sZW5ndGg7KGU9UWMuZXhlYyhuKSkmJmk+cjsrK3IpaWYobz1sW3JdLG8ueD09ZVswXSl7aWYoby5pKWlmKG51bGw9PXNbby5pKzFdKWZvcihzW28uaS0xXSs9by54LHMuc3BsaWNlKG8uaSwxKSx1PXIrMTtpPnU7Kyt1KWxbdV0uaS0tO2Vsc2UgZm9yKHNbby5pLTFdKz1vLngrc1tvLmkrMV0scy5zcGxpY2Uoby5pLDIpLHU9cisxO2k+dTsrK3UpbFt1XS5pLT0yO2Vsc2UgaWYobnVsbD09c1tvLmkrMV0pc1tvLmldPW8ueDtlbHNlIGZvcihzW28uaV09by54K3Nbby5pKzFdLHMuc3BsaWNlKG8uaSsxLDEpLHU9cisxO2k+dTsrK3UpbFt1XS5pLS07bC5zcGxpY2UociwxKSxpLS0sci0tfWVsc2Ugby54PXN1KHBhcnNlRmxvYXQoZVswXSkscGFyc2VGbG9hdChvLngpKTtmb3IoO2k+cjspbz1sLnBvcCgpLG51bGw9PXNbby5pKzFdP3Nbby5pXT1vLng6KHNbby5pXT1vLngrc1tvLmkrMV0scy5zcGxpY2Uoby5pKzEsMSkpLGktLTtyZXR1cm4gMT09PXMubGVuZ3RoP251bGw9PXNbMF0/KG89bFswXS54LGZ1bmN0aW9uKG4pe3JldHVybiBvKG4pKyIifSk6ZnVuY3Rpb24oKXtyZXR1cm4gdH06ZnVuY3Rpb24obil7Zm9yKHI9MDtpPnI7KytyKXNbKG89bFtyXSkuaV09by54KG4pO3JldHVybiBzLmpvaW4oIiIpfX1mdW5jdGlvbiBmdShuLHQpe2Zvcih2YXIgZSxyPVhvLmludGVycG9sYXRvcnMubGVuZ3RoOy0tcj49MCYmIShlPVhvLmludGVycG9sYXRvcnNbcl0obix0KSk7KTtyZXR1cm4gZX1mdW5jdGlvbiBodShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPW4ubGVuZ3RoLG89dC5sZW5ndGgsYT1NYXRoLm1pbihuLmxlbmd0aCx0Lmxlbmd0aCk7Zm9yKGU9MDthPmU7KytlKXIucHVzaChmdShuW2VdLHRbZV0pKTtmb3IoO2k+ZTsrK2UpdVtlXT1uW2VdO2Zvcig7bz5lOysrZSl1W2VdPXRbZV07cmV0dXJuIGZ1bmN0aW9uKG4pe2ZvcihlPTA7YT5lOysrZSl1W2VdPXJbZV0obik7cmV0dXJuIHV9fWZ1bmN0aW9uIGd1KG4pe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gMD49dD8wOnQ+PTE/MTpuKHQpfX1mdW5jdGlvbiBwdShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDEtbigxLXQpfX1mdW5jdGlvbiB2dShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuLjUqKC41PnQ/bigyKnQpOjItbigyLTIqdCkpfX1mdW5jdGlvbiBkdShuKXtyZXR1cm4gbipufWZ1bmN0aW9uIG11KG4pe3JldHVybiBuKm4qbn1mdW5jdGlvbiB5dShuKXtpZigwPj1uKXJldHVybiAwO2lmKG4+PTEpcmV0dXJuIDE7dmFyIHQ9bipuLGU9dCpuO3JldHVybiA0KiguNT5uP2U6Myoobi10KStlLS43NSl9ZnVuY3Rpb24geHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLnBvdyh0LG4pfX1mdW5jdGlvbiBNdShuKXtyZXR1cm4gMS1NYXRoLmNvcyhuKkVhKX1mdW5jdGlvbiBfdShuKXtyZXR1cm4gTWF0aC5wb3coMiwxMCoobi0xKSl9ZnVuY3Rpb24gYnUobil7cmV0dXJuIDEtTWF0aC5zcXJ0KDEtbipuKX1mdW5jdGlvbiB3dShuLHQpe3ZhciBlO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PS40NSksYXJndW1lbnRzLmxlbmd0aD9lPXQva2EqTWF0aC5hc2luKDEvbik6KG49MSxlPXQvNCksZnVuY3Rpb24ocil7cmV0dXJuIDErbipNYXRoLnBvdygyLC0xMCpyKSpNYXRoLnNpbigoci1lKSprYS90KX19ZnVuY3Rpb24gU3Uobil7cmV0dXJuIG58fChuPTEuNzAxNTgpLGZ1bmN0aW9uKHQpe3JldHVybiB0KnQqKChuKzEpKnQtbil9fWZ1bmN0aW9uIGt1KG4pe3JldHVybiAxLzIuNzU+bj83LjU2MjUqbipuOjIvMi43NT5uPzcuNTYyNSoobi09MS41LzIuNzUpKm4rLjc1OjIuNS8yLjc1Pm4/Ny41NjI1KihuLT0yLjI1LzIuNzUpKm4rLjkzNzU6Ny41NjI1KihuLT0yLjYyNS8yLjc1KSpuKy45ODQzNzV9ZnVuY3Rpb24gRXUobix0KXtuPVhvLmhjbChuKSx0PVhvLmhjbCh0KTt2YXIgZT1uLmgscj1uLmMsdT1uLmwsaT10LmgtZSxvPXQuYy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5jOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIHJ0KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gQXUobix0KXtuPVhvLmhzbChuKSx0PVhvLmhzbCh0KTt2YXIgZT1uLmgscj1uLnMsdT1uLmwsaT10LmgtZSxvPXQucy1yLGE9dC5sLXU7cmV0dXJuIGlzTmFOKG8pJiYobz0wLHI9aXNOYU4ocik/dC5zOnIpLGlzTmFOKGkpPyhpPTAsZT1pc05hTihlKT90Lmg6ZSk6aT4xODA/aS09MzYwOi0xODA+aSYmKGkrPTM2MCksZnVuY3Rpb24obil7cmV0dXJuIG50KGUraSpuLHIrbypuLHUrYSpuKSsiIn19ZnVuY3Rpb24gQ3Uobix0KXtuPVhvLmxhYihuKSx0PVhvLmxhYih0KTt2YXIgZT1uLmwscj1uLmEsdT1uLmIsaT10LmwtZSxvPXQuYS1yLGE9dC5iLXU7cmV0dXJuIGZ1bmN0aW9uKG4pe3JldHVybiBvdChlK2kqbixyK28qbix1K2EqbikrIiJ9fWZ1bmN0aW9uIE51KG4sdCl7cmV0dXJuIHQtPW4sZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGgucm91bmQobit0KmUpfX1mdW5jdGlvbiBMdShuKXt2YXIgdD1bbi5hLG4uYl0sZT1bbi5jLG4uZF0scj1xdSh0KSx1PVR1KHQsZSksaT1xdSh6dShlLHQsLXUpKXx8MDt0WzBdKmVbMV08ZVswXSp0WzFdJiYodFswXSo9LTEsdFsxXSo9LTEscio9LTEsdSo9LTEpLHRoaXMucm90YXRlPShyP01hdGguYXRhbjIodFsxXSx0WzBdKTpNYXRoLmF0YW4yKC1lWzBdLGVbMV0pKSpMYSx0aGlzLnRyYW5zbGF0ZT1bbi5lLG4uZl0sdGhpcy5zY2FsZT1bcixpXSx0aGlzLnNrZXc9aT9NYXRoLmF0YW4yKHUsaSkqTGE6MH1mdW5jdGlvbiBUdShuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdfWZ1bmN0aW9uIHF1KG4pe3ZhciB0PU1hdGguc3FydChUdShuLG4pKTtyZXR1cm4gdCYmKG5bMF0vPXQsblsxXS89dCksdH1mdW5jdGlvbiB6dShuLHQsZSl7cmV0dXJuIG5bMF0rPWUqdFswXSxuWzFdKz1lKnRbMV0sbn1mdW5jdGlvbiBSdShuLHQpe3ZhciBlLHI9W10sdT1bXSxpPVhvLnRyYW5zZm9ybShuKSxvPVhvLnRyYW5zZm9ybSh0KSxhPWkudHJhbnNsYXRlLGM9by50cmFuc2xhdGUscz1pLnJvdGF0ZSxsPW8ucm90YXRlLGY9aS5za2V3LGg9by5za2V3LGc9aS5zY2FsZSxwPW8uc2NhbGU7cmV0dXJuIGFbMF0hPWNbMF18fGFbMV0hPWNbMV0/KHIucHVzaCgidHJhbnNsYXRlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aToxLHg6c3UoYVswXSxjWzBdKX0se2k6Myx4OnN1KGFbMV0sY1sxXSl9KSk6Y1swXXx8Y1sxXT9yLnB1c2goInRyYW5zbGF0ZSgiK2MrIikiKTpyLnB1c2goIiIpLHMhPWw/KHMtbD4xODA/bCs9MzYwOmwtcz4xODAmJihzKz0zNjApLHUucHVzaCh7aTpyLnB1c2goci5wb3AoKSsicm90YXRlKCIsbnVsbCwiKSIpLTIseDpzdShzLGwpfSkpOmwmJnIucHVzaChyLnBvcCgpKyJyb3RhdGUoIitsKyIpIiksZiE9aD91LnB1c2goe2k6ci5wdXNoKHIucG9wKCkrInNrZXdYKCIsbnVsbCwiKSIpLTIseDpzdShmLGgpfSk6aCYmci5wdXNoKHIucG9wKCkrInNrZXdYKCIraCsiKSIpLGdbMF0hPXBbMF18fGdbMV0hPXBbMV0/KGU9ci5wdXNoKHIucG9wKCkrInNjYWxlKCIsbnVsbCwiLCIsbnVsbCwiKSIpLHUucHVzaCh7aTplLTQseDpzdShnWzBdLHBbMF0pfSx7aTplLTIseDpzdShnWzFdLHBbMV0pfSkpOigxIT1wWzBdfHwxIT1wWzFdKSYmci5wdXNoKHIucG9wKCkrInNjYWxlKCIrcCsiKSIpLGU9dS5sZW5ndGgsZnVuY3Rpb24obil7Zm9yKHZhciB0LGk9LTE7KytpPGU7KXJbKHQ9dVtpXSkuaV09dC54KG4pO3JldHVybiByLmpvaW4oIiIpfX1mdW5jdGlvbiBEdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4oZS1uKSp0fX1mdW5jdGlvbiBQdShuLHQpe3JldHVybiB0PXQtKG49K24pPzEvKHQtbik6MCxmdW5jdGlvbihlKXtyZXR1cm4gTWF0aC5tYXgoMCxNYXRoLm1pbigxLChlLW4pKnQpKX19ZnVuY3Rpb24gVXUobil7Zm9yKHZhciB0PW4uc291cmNlLGU9bi50YXJnZXQscj1IdSh0LGUpLHU9W3RdO3QhPT1yOyl0PXQucGFyZW50LHUucHVzaCh0KTtmb3IodmFyIGk9dS5sZW5ndGg7ZSE9PXI7KXUuc3BsaWNlKGksMCxlKSxlPWUucGFyZW50O3JldHVybiB1fWZ1bmN0aW9uIGp1KG4pe2Zvcih2YXIgdD1bXSxlPW4ucGFyZW50O251bGwhPWU7KXQucHVzaChuKSxuPWUsZT1lLnBhcmVudDtyZXR1cm4gdC5wdXNoKG4pLHR9ZnVuY3Rpb24gSHUobix0KXtpZihuPT09dClyZXR1cm4gbjtmb3IodmFyIGU9anUobikscj1qdSh0KSx1PWUucG9wKCksaT1yLnBvcCgpLG89bnVsbDt1PT09aTspbz11LHU9ZS5wb3AoKSxpPXIucG9wKCk7cmV0dXJuIG99ZnVuY3Rpb24gRnUobil7bi5maXhlZHw9Mn1mdW5jdGlvbiBPdShuKXtuLmZpeGVkJj0tN31mdW5jdGlvbiBZdShuKXtuLmZpeGVkfD00LG4ucHg9bi54LG4ucHk9bi55fWZ1bmN0aW9uIEl1KG4pe24uZml4ZWQmPS01fWZ1bmN0aW9uIFp1KG4sdCxlKXt2YXIgcj0wLHU9MDtpZihuLmNoYXJnZT0wLCFuLmxlYWYpZm9yKHZhciBpLG89bi5ub2RlcyxhPW8ubGVuZ3RoLGM9LTE7KytjPGE7KWk9b1tjXSxudWxsIT1pJiYoWnUoaSx0LGUpLG4uY2hhcmdlKz1pLmNoYXJnZSxyKz1pLmNoYXJnZSppLmN4LHUrPWkuY2hhcmdlKmkuY3kpO2lmKG4ucG9pbnQpe24ubGVhZnx8KG4ucG9pbnQueCs9TWF0aC5yYW5kb20oKS0uNSxuLnBvaW50LnkrPU1hdGgucmFuZG9tKCktLjUpO3ZhciBzPXQqZVtuLnBvaW50LmluZGV4XTtuLmNoYXJnZSs9bi5wb2ludENoYXJnZT1zLHIrPXMqbi5wb2ludC54LHUrPXMqbi5wb2ludC55fW4uY3g9ci9uLmNoYXJnZSxuLmN5PXUvbi5jaGFyZ2V9ZnVuY3Rpb24gVnUobix0KXtyZXR1cm4gWG8ucmViaW5kKG4sdCwic29ydCIsImNoaWxkcmVuIiwidmFsdWUiKSxuLm5vZGVzPW4sbi5saW5rcz1XdSxufWZ1bmN0aW9uIFh1KG4pe3JldHVybiBuLmNoaWxkcmVufWZ1bmN0aW9uICR1KG4pe3JldHVybiBuLnZhbHVlfWZ1bmN0aW9uIEJ1KG4sdCl7cmV0dXJuIHQudmFsdWUtbi52YWx1ZX1mdW5jdGlvbiBXdShuKXtyZXR1cm4gWG8ubWVyZ2Uobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4uY2hpbGRyZW58fFtdKS5tYXAoZnVuY3Rpb24odCl7cmV0dXJue3NvdXJjZTpuLHRhcmdldDp0fX0pfSkpfWZ1bmN0aW9uIEp1KG4pe3JldHVybiBuLnh9ZnVuY3Rpb24gR3Uobil7cmV0dXJuIG4ueX1mdW5jdGlvbiBLdShuLHQsZSl7bi55MD10LG4ueT1lfWZ1bmN0aW9uIFF1KG4pe3JldHVybiBYby5yYW5nZShuLmxlbmd0aCl9ZnVuY3Rpb24gbmkobil7Zm9yKHZhciB0PS0xLGU9blswXS5sZW5ndGgscj1bXTsrK3Q8ZTspclt0XT0wO3JldHVybiByfWZ1bmN0aW9uIHRpKG4pe2Zvcih2YXIgdCxlPTEscj0wLHU9blswXVsxXSxpPW4ubGVuZ3RoO2k+ZTsrK2UpKHQ9bltlXVsxXSk+dSYmKHI9ZSx1PXQpO3JldHVybiByfWZ1bmN0aW9uIGVpKG4pe3JldHVybiBuLnJlZHVjZShyaSwwKX1mdW5jdGlvbiByaShuLHQpe3JldHVybiBuK3RbMV19ZnVuY3Rpb24gdWkobix0KXtyZXR1cm4gaWkobixNYXRoLmNlaWwoTWF0aC5sb2codC5sZW5ndGgpL01hdGguTE4yKzEpKX1mdW5jdGlvbiBpaShuLHQpe2Zvcih2YXIgZT0tMSxyPStuWzBdLHU9KG5bMV0tcikvdCxpPVtdOysrZTw9dDspaVtlXT11KmUrcjtyZXR1cm4gaX1mdW5jdGlvbiBvaShuKXtyZXR1cm5bWG8ubWluKG4pLFhvLm1heChuKV19ZnVuY3Rpb24gYWkobix0KXtyZXR1cm4gbi5wYXJlbnQ9PXQucGFyZW50PzE6Mn1mdW5jdGlvbiBjaShuKXt2YXIgdD1uLmNoaWxkcmVuO3JldHVybiB0JiZ0Lmxlbmd0aD90WzBdOm4uX3RyZWUudGhyZWFkfWZ1bmN0aW9uIHNpKG4pe3ZhciB0LGU9bi5jaGlsZHJlbjtyZXR1cm4gZSYmKHQ9ZS5sZW5ndGgpP2VbdC0xXTpuLl90cmVlLnRocmVhZH1mdW5jdGlvbiBsaShuLHQpe3ZhciBlPW4uY2hpbGRyZW47aWYoZSYmKHU9ZS5sZW5ndGgpKWZvcih2YXIgcix1LGk9LTE7KytpPHU7KXQocj1saShlW2ldLHQpLG4pPjAmJihuPXIpO3JldHVybiBufWZ1bmN0aW9uIGZpKG4sdCl7cmV0dXJuIG4ueC10Lnh9ZnVuY3Rpb24gaGkobix0KXtyZXR1cm4gdC54LW4ueH1mdW5jdGlvbiBnaShuLHQpe3JldHVybiBuLmRlcHRoLXQuZGVwdGh9ZnVuY3Rpb24gcGkobix0KXtmdW5jdGlvbiBlKG4scil7dmFyIHU9bi5jaGlsZHJlbjtpZih1JiYobz11Lmxlbmd0aCkpZm9yKHZhciBpLG8sYT1udWxsLGM9LTE7KytjPG87KWk9dVtjXSxlKGksYSksYT1pO3QobixyKX1lKG4sbnVsbCl9ZnVuY3Rpb24gdmkobil7Zm9yKHZhciB0LGU9MCxyPTAsdT1uLmNoaWxkcmVuLGk9dS5sZW5ndGg7LS1pPj0wOyl0PXVbaV0uX3RyZWUsdC5wcmVsaW0rPWUsdC5tb2QrPWUsZSs9dC5zaGlmdCsocis9dC5jaGFuZ2UpfWZ1bmN0aW9uIGRpKG4sdCxlKXtuPW4uX3RyZWUsdD10Ll90cmVlO3ZhciByPWUvKHQubnVtYmVyLW4ubnVtYmVyKTtuLmNoYW5nZSs9cix0LmNoYW5nZS09cix0LnNoaWZ0Kz1lLHQucHJlbGltKz1lLHQubW9kKz1lfWZ1bmN0aW9uIG1pKG4sdCxlKXtyZXR1cm4gbi5fdHJlZS5hbmNlc3Rvci5wYXJlbnQ9PXQucGFyZW50P24uX3RyZWUuYW5jZXN0b3I6ZX1mdW5jdGlvbiB5aShuLHQpe3JldHVybiBuLnZhbHVlLXQudmFsdWV9ZnVuY3Rpb24geGkobix0KXt2YXIgZT1uLl9wYWNrX25leHQ7bi5fcGFja19uZXh0PXQsdC5fcGFja19wcmV2PW4sdC5fcGFja19uZXh0PWUsZS5fcGFja19wcmV2PXR9ZnVuY3Rpb24gTWkobix0KXtuLl9wYWNrX25leHQ9dCx0Ll9wYWNrX3ByZXY9bn1mdW5jdGlvbiBfaShuLHQpe3ZhciBlPXQueC1uLngscj10Lnktbi55LHU9bi5yK3QucjtyZXR1cm4uOTk5KnUqdT5lKmUrcipyfWZ1bmN0aW9uIGJpKG4pe2Z1bmN0aW9uIHQobil7bD1NYXRoLm1pbihuLngtbi5yLGwpLGY9TWF0aC5tYXgobi54K24ucixmKSxoPU1hdGgubWluKG4ueS1uLnIsaCksZz1NYXRoLm1heChuLnkrbi5yLGcpfWlmKChlPW4uY2hpbGRyZW4pJiYocz1lLmxlbmd0aCkpe3ZhciBlLHIsdSxpLG8sYSxjLHMsbD0xLzAsZj0tMS8wLGg9MS8wLGc9LTEvMDtpZihlLmZvckVhY2god2kpLHI9ZVswXSxyLng9LXIucixyLnk9MCx0KHIpLHM+MSYmKHU9ZVsxXSx1Lng9dS5yLHUueT0wLHQodSkscz4yKSlmb3IoaT1lWzJdLEVpKHIsdSxpKSx0KGkpLHhpKHIsaSksci5fcGFja19wcmV2PWkseGkoaSx1KSx1PXIuX3BhY2tfbmV4dCxvPTM7cz5vO28rKyl7RWkocix1LGk9ZVtvXSk7dmFyIHA9MCx2PTEsZD0xO2ZvcihhPXUuX3BhY2tfbmV4dDthIT09dTthPWEuX3BhY2tfbmV4dCx2KyspaWYoX2koYSxpKSl7cD0xO2JyZWFrfWlmKDE9PXApZm9yKGM9ci5fcGFja19wcmV2O2MhPT1hLl9wYWNrX3ByZXYmJiFfaShjLGkpO2M9Yy5fcGFja19wcmV2LGQrKyk7cD8oZD52fHx2PT1kJiZ1LnI8ci5yP01pKHIsdT1hKTpNaShyPWMsdSksby0tKTooeGkocixpKSx1PWksdChpKSl9dmFyIG09KGwrZikvMix5PShoK2cpLzIseD0wO2ZvcihvPTA7cz5vO28rKylpPWVbb10saS54LT1tLGkueS09eSx4PU1hdGgubWF4KHgsaS5yK01hdGguc3FydChpLngqaS54K2kueSppLnkpKTtuLnI9eCxlLmZvckVhY2goU2kpfX1mdW5jdGlvbiB3aShuKXtuLl9wYWNrX25leHQ9bi5fcGFja19wcmV2PW59ZnVuY3Rpb24gU2kobil7ZGVsZXRlIG4uX3BhY2tfbmV4dCxkZWxldGUgbi5fcGFja19wcmV2fWZ1bmN0aW9uIGtpKG4sdCxlLHIpe3ZhciB1PW4uY2hpbGRyZW47aWYobi54PXQrPXIqbi54LG4ueT1lKz1yKm4ueSxuLnIqPXIsdSlmb3IodmFyIGk9LTEsbz11Lmxlbmd0aDsrK2k8bzspa2kodVtpXSx0LGUscil9ZnVuY3Rpb24gRWkobix0LGUpe3ZhciByPW4ucitlLnIsdT10Lngtbi54LGk9dC55LW4ueTtpZihyJiYodXx8aSkpe3ZhciBvPXQucitlLnIsYT11KnUraSppO28qPW8scio9cjt2YXIgYz0uNSsoci1vKS8oMiphKSxzPU1hdGguc3FydChNYXRoLm1heCgwLDIqbyoocithKS0oci09YSkqci1vKm8pKS8oMiphKTtlLng9bi54K2MqdStzKmksZS55PW4ueStjKmktcyp1fWVsc2UgZS54PW4ueCtyLGUueT1uLnl9ZnVuY3Rpb24gQWkobil7cmV0dXJuIDErWG8ubWF4KG4sZnVuY3Rpb24obil7cmV0dXJuIG4ueX0pfWZ1bmN0aW9uIENpKG4pe3JldHVybiBuLnJlZHVjZShmdW5jdGlvbihuLHQpe3JldHVybiBuK3QueH0sMCkvbi5sZW5ndGh9ZnVuY3Rpb24gTmkobil7dmFyIHQ9bi5jaGlsZHJlbjtyZXR1cm4gdCYmdC5sZW5ndGg/TmkodFswXSk6bn1mdW5jdGlvbiBMaShuKXt2YXIgdCxlPW4uY2hpbGRyZW47cmV0dXJuIGUmJih0PWUubGVuZ3RoKT9MaShlW3QtMV0pOm59ZnVuY3Rpb24gVGkobil7cmV0dXJue3g6bi54LHk6bi55LGR4Om4uZHgsZHk6bi5keX19ZnVuY3Rpb24gcWkobix0KXt2YXIgZT1uLngrdFszXSxyPW4ueSt0WzBdLHU9bi5keC10WzFdLXRbM10saT1uLmR5LXRbMF0tdFsyXTtyZXR1cm4gMD51JiYoZSs9dS8yLHU9MCksMD5pJiYocis9aS8yLGk9MCkse3g6ZSx5OnIsZHg6dSxkeTppfX1mdW5jdGlvbiB6aShuKXt2YXIgdD1uWzBdLGU9bltuLmxlbmd0aC0xXTtyZXR1cm4gZT50P1t0LGVdOltlLHRdfWZ1bmN0aW9uIFJpKG4pe3JldHVybiBuLnJhbmdlRXh0ZW50P24ucmFuZ2VFeHRlbnQoKTp6aShuLnJhbmdlKCkpfWZ1bmN0aW9uIERpKG4sdCxlLHIpe3ZhciB1PWUoblswXSxuWzFdKSxpPXIodFswXSx0WzFdKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIGkodShuKSl9fWZ1bmN0aW9uIFBpKG4sdCl7dmFyIGUscj0wLHU9bi5sZW5ndGgtMSxpPW5bcl0sbz1uW3VdO3JldHVybiBpPm8mJihlPXIscj11LHU9ZSxlPWksaT1vLG89ZSksbltyXT10LmZsb29yKGkpLG5bdV09dC5jZWlsKG8pLG59ZnVuY3Rpb24gVWkobil7cmV0dXJuIG4/e2Zsb29yOmZ1bmN0aW9uKHQpe3JldHVybiBNYXRoLmZsb29yKHQvbikqbn0sY2VpbDpmdW5jdGlvbih0KXtyZXR1cm4gTWF0aC5jZWlsKHQvbikqbn19OmxzfWZ1bmN0aW9uIGppKG4sdCxlLHIpe3ZhciB1PVtdLGk9W10sbz0wLGE9TWF0aC5taW4obi5sZW5ndGgsdC5sZW5ndGgpLTE7Zm9yKG5bYV08blswXSYmKG49bi5zbGljZSgpLnJldmVyc2UoKSx0PXQuc2xpY2UoKS5yZXZlcnNlKCkpOysrbzw9YTspdS5wdXNoKGUobltvLTFdLG5bb10pKSxpLnB1c2gocih0W28tMV0sdFtvXSkpO3JldHVybiBmdW5jdGlvbih0KXt2YXIgZT1Yby5iaXNlY3Qobix0LDEsYSktMTtyZXR1cm4gaVtlXSh1W2VdKHQpKX19ZnVuY3Rpb24gSGkobix0LGUscil7ZnVuY3Rpb24gdSgpe3ZhciB1PU1hdGgubWluKG4ubGVuZ3RoLHQubGVuZ3RoKT4yP2ppOkRpLGM9cj9QdTpEdTtyZXR1cm4gbz11KG4sdCxjLGUpLGE9dSh0LG4sYyxmdSksaX1mdW5jdGlvbiBpKG4pe3JldHVybiBvKG4pfXZhciBvLGE7cmV0dXJuIGkuaW52ZXJ0PWZ1bmN0aW9uKG4pe3JldHVybiBhKG4pfSxpLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj10Lm1hcChOdW1iZXIpLHUoKSk6bn0saS5yYW5nZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1uLHUoKSk6dH0saS5yYW5nZVJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBpLnJhbmdlKG4pLmludGVycG9sYXRlKE51KX0saS5jbGFtcD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHUoKSk6cn0saS5pbnRlcnBvbGF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHUoKSk6ZX0saS50aWNrcz1mdW5jdGlvbih0KXtyZXR1cm4gSWkobix0KX0saS50aWNrRm9ybWF0PWZ1bmN0aW9uKHQsZSl7cmV0dXJuIFppKG4sdCxlKX0saS5uaWNlPWZ1bmN0aW9uKHQpe3JldHVybiBPaShuLHQpLHUoKX0saS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEhpKG4sdCxlLHIpfSx1KCl9ZnVuY3Rpb24gRmkobix0KXtyZXR1cm4gWG8ucmViaW5kKG4sdCwicmFuZ2UiLCJyYW5nZVJvdW5kIiwiaW50ZXJwb2xhdGUiLCJjbGFtcCIpfWZ1bmN0aW9uIE9pKG4sdCl7cmV0dXJuIFBpKG4sVWkoWWkobix0KVsyXSkpfWZ1bmN0aW9uIFlpKG4sdCl7bnVsbD09dCYmKHQ9MTApO3ZhciBlPXppKG4pLHI9ZVsxXS1lWzBdLHU9TWF0aC5wb3coMTAsTWF0aC5mbG9vcihNYXRoLmxvZyhyL3QpL01hdGguTE4xMCkpLGk9dC9yKnU7cmV0dXJuLjE1Pj1pP3UqPTEwOi4zNT49aT91Kj01Oi43NT49aSYmKHUqPTIpLGVbMF09TWF0aC5jZWlsKGVbMF0vdSkqdSxlWzFdPU1hdGguZmxvb3IoZVsxXS91KSp1Ky41KnUsZVsyXT11LGV9ZnVuY3Rpb24gSWkobix0KXtyZXR1cm4gWG8ucmFuZ2UuYXBwbHkoWG8sWWkobix0KSl9ZnVuY3Rpb24gWmkobix0LGUpe3ZhciByPVlpKG4sdCk7cmV0dXJuIFhvLmZvcm1hdChlP2UucmVwbGFjZShRYSxmdW5jdGlvbihuLHQsZSx1LGksbyxhLGMscyxsKXtyZXR1cm5bdCxlLHUsaSxvLGEsYyxzfHwiLiIrWGkobCxyKSxsXS5qb2luKCIiKX0pOiIsLiIrVmkoclsyXSkrImYiKX1mdW5jdGlvbiBWaShuKXtyZXR1cm4tTWF0aC5mbG9vcihNYXRoLmxvZyhuKS9NYXRoLkxOMTArLjAxKX1mdW5jdGlvbiBYaShuLHQpe3ZhciBlPVZpKHRbMl0pO3JldHVybiBuIGluIGZzP01hdGguYWJzKGUtVmkoTWF0aC5tYXgoTWF0aC5hYnModFswXSksTWF0aC5hYnModFsxXSkpKSkrICsoImUiIT09bik6ZS0yKigiJSI9PT1uKX1mdW5jdGlvbiAkaShuLHQsZSxyKXtmdW5jdGlvbiB1KG4pe3JldHVybihlP01hdGgubG9nKDA+bj8wOm4pOi1NYXRoLmxvZyhuPjA/MDotbikpL01hdGgubG9nKHQpfWZ1bmN0aW9uIGkobil7cmV0dXJuIGU/TWF0aC5wb3codCxuKTotTWF0aC5wb3codCwtbil9ZnVuY3Rpb24gbyh0KXtyZXR1cm4gbih1KHQpKX1yZXR1cm4gby5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxvLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10WzBdPj0wLG4uZG9tYWluKChyPXQubWFwKE51bWJlcikpLm1hcCh1KSksbyk6cn0sby5iYXNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PStlLG4uZG9tYWluKHIubWFwKHUpKSxvKTp0fSxvLm5pY2U9ZnVuY3Rpb24oKXt2YXIgdD1QaShyLm1hcCh1KSxlP01hdGg6Z3MpO3JldHVybiBuLmRvbWFpbih0KSxyPXQubWFwKGkpLG99LG8udGlja3M9ZnVuY3Rpb24oKXt2YXIgbj16aShyKSxvPVtdLGE9blswXSxjPW5bMV0scz1NYXRoLmZsb29yKHUoYSkpLGw9TWF0aC5jZWlsKHUoYykpLGY9dCUxPzI6dDtpZihpc0Zpbml0ZShsLXMpKXtpZihlKXtmb3IoO2w+cztzKyspZm9yKHZhciBoPTE7Zj5oO2grKylvLnB1c2goaShzKSpoKTtvLnB1c2goaShzKSl9ZWxzZSBmb3Ioby5wdXNoKGkocykpO3MrKzxsOylmb3IodmFyIGg9Zi0xO2g+MDtoLS0pby5wdXNoKGkocykqaCk7Zm9yKHM9MDtvW3NdPGE7cysrKTtmb3IobD1vLmxlbmd0aDtvW2wtMV0+YztsLS0pO289by5zbGljZShzLGwpfXJldHVybiBvfSxvLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtpZighYXJndW1lbnRzLmxlbmd0aClyZXR1cm4gaHM7YXJndW1lbnRzLmxlbmd0aDwyP3Q9aHM6ImZ1bmN0aW9uIiE9dHlwZW9mIHQmJih0PVhvLmZvcm1hdCh0KSk7dmFyIHIsYT1NYXRoLm1heCguMSxuL28udGlja3MoKS5sZW5ndGgpLGM9ZT8ocj0xZS0xMixNYXRoLmNlaWwpOihyPS0xZS0xMixNYXRoLmZsb29yKTtyZXR1cm4gZnVuY3Rpb24obil7cmV0dXJuIG4vaShjKHUobikrcikpPD1hP3Qobik6IiJ9fSxvLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gJGkobi5jb3B5KCksdCxlLHIpfSxGaShvLG4pfWZ1bmN0aW9uIEJpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBuKHUodCkpfXZhciB1PVdpKHQpLGk9V2koMS90KTtyZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGkobi5pbnZlcnQodCkpfSxyLmRvbWFpbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obi5kb21haW4oKGU9dC5tYXAoTnVtYmVyKSkubWFwKHUpKSxyKTplfSxyLnRpY2tzPWZ1bmN0aW9uKG4pe3JldHVybiBJaShlLG4pfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gWmkoZSxuLHQpfSxyLm5pY2U9ZnVuY3Rpb24obil7cmV0dXJuIHIuZG9tYWluKE9pKGUsbikpfSxyLmV4cG9uZW50PWZ1bmN0aW9uKG8pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PVdpKHQ9byksaT1XaSgxL3QpLG4uZG9tYWluKGUubWFwKHUpKSxyKTp0fSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gQmkobi5jb3B5KCksdCxlKX0sRmkocixuKX1mdW5jdGlvbiBXaShuKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIDA+dD8tTWF0aC5wb3coLXQsbik6TWF0aC5wb3codCxuKX19ZnVuY3Rpb24gSmkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBvWygoaS5nZXQoZSl8fCJyYW5nZSI9PT10LnQmJmkuc2V0KGUsbi5wdXNoKGUpKSktMSklby5sZW5ndGhdfWZ1bmN0aW9uIHIodCxlKXtyZXR1cm4gWG8ucmFuZ2Uobi5sZW5ndGgpLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdCtlKm59KX12YXIgaSxvLGE7cmV0dXJuIGUuZG9tYWluPWZ1bmN0aW9uKHIpe2lmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBuO249W10saT1uZXcgdTtmb3IodmFyIG8sYT0tMSxjPXIubGVuZ3RoOysrYTxjOylpLmhhcyhvPXJbYV0pfHxpLnNldChvLG4ucHVzaChvKSk7cmV0dXJuIGVbdC50XS5hcHBseShlLHQuYSl9LGUucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bixhPTAsdD17dDoicmFuZ2UiLGE6YXJndW1lbnRzfSxlKTpvfSxlLnJhbmdlUG9pbnRzPWZ1bmN0aW9uKHUsaSl7YXJndW1lbnRzLmxlbmd0aDwyJiYoaT0wKTt2YXIgYz11WzBdLHM9dVsxXSxsPShzLWMpLyhNYXRoLm1heCgxLG4ubGVuZ3RoLTEpK2kpO3JldHVybiBvPXIobi5sZW5ndGg8Mj8oYytzKS8yOmMrbCppLzIsbCksYT0wLHQ9e3Q6InJhbmdlUG9pbnRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZUJhbmRzPWZ1bmN0aW9uKHUsaSxjKXthcmd1bWVudHMubGVuZ3RoPDImJihpPTApLGFyZ3VtZW50cy5sZW5ndGg8MyYmKGM9aSk7dmFyIHM9dVsxXTx1WzBdLGw9dVtzLTBdLGY9dVsxLXNdLGg9KGYtbCkvKG4ubGVuZ3RoLWkrMipjKTtyZXR1cm4gbz1yKGwraCpjLGgpLHMmJm8ucmV2ZXJzZSgpLGE9aCooMS1pKSx0PXt0OiJyYW5nZUJhbmRzIixhOmFyZ3VtZW50c30sZX0sZS5yYW5nZVJvdW5kQmFuZHM9ZnVuY3Rpb24odSxpLGMpe2FyZ3VtZW50cy5sZW5ndGg8MiYmKGk9MCksYXJndW1lbnRzLmxlbmd0aDwzJiYoYz1pKTt2YXIgcz11WzFdPHVbMF0sbD11W3MtMF0sZj11WzEtc10saD1NYXRoLmZsb29yKChmLWwpLyhuLmxlbmd0aC1pKzIqYykpLGc9Zi1sLShuLmxlbmd0aC1pKSpoO3JldHVybiBvPXIobCtNYXRoLnJvdW5kKGcvMiksaCkscyYmby5yZXZlcnNlKCksYT1NYXRoLnJvdW5kKGgqKDEtaSkpLHQ9e3Q6InJhbmdlUm91bmRCYW5kcyIsYTphcmd1bWVudHN9LGV9LGUucmFuZ2VCYW5kPWZ1bmN0aW9uKCl7cmV0dXJuIGF9LGUucmFuZ2VFeHRlbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gemkodC5hWzBdKX0sZS5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIEppKG4sdCl9LGUuZG9tYWluKG4pfWZ1bmN0aW9uIEdpKG4sdCl7ZnVuY3Rpb24gZSgpe3ZhciBlPTAsaT10Lmxlbmd0aDtmb3IodT1bXTsrK2U8aTspdVtlLTFdPVhvLnF1YW50aWxlKG4sZS9pKTtyZXR1cm4gcn1mdW5jdGlvbiByKG4pe3JldHVybiBpc05hTihuPStuKT92b2lkIDA6dFtYby5iaXNlY3QodSxuKV19dmFyIHU7cmV0dXJuIHIuZG9tYWluPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhuPXQuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiFpc05hTihuKX0pLnNvcnQoWG8uYXNjZW5kaW5nKSxlKCkpOm59LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9bixlKCkpOnR9LHIucXVhbnRpbGVzPWZ1bmN0aW9uKCl7cmV0dXJuIHV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKGUpe3JldHVybiBlPXQuaW5kZXhPZihlKSwwPmU/WzAvMCwwLzBdOltlPjA/dVtlLTFdOm5bMF0sZTx1Lmxlbmd0aD91W2VdOm5bbi5sZW5ndGgtMV1dfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gR2kobix0KX0sZSgpfWZ1bmN0aW9uIEtpKG4sdCxlKXtmdW5jdGlvbiByKHQpe3JldHVybiBlW01hdGgubWF4KDAsTWF0aC5taW4obyxNYXRoLmZsb29yKGkqKHQtbikpKSldfWZ1bmN0aW9uIHUoKXtyZXR1cm4gaT1lLmxlbmd0aC8odC1uKSxvPWUubGVuZ3RoLTEscn12YXIgaSxvO3JldHVybiByLmRvbWFpbj1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rZVswXSx0PStlW2UubGVuZ3RoLTFdLHUoKSk6W24sdF19LHIucmFuZ2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9bix1KCkpOmV9LHIuaW52ZXJ0RXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiB0PWUuaW5kZXhPZih0KSx0PTA+dD8wLzA6dC9pK24sW3QsdCsxL2ldfSxyLmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gS2kobix0LGUpfSx1KCl9ZnVuY3Rpb24gUWkobix0KXtmdW5jdGlvbiBlKGUpe3JldHVybiBlPj1lP3RbWG8uYmlzZWN0KG4sZSldOnZvaWQgMH1yZXR1cm4gZS5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG49dCxlKTpufSxlLnJhbmdlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PW4sZSk6dH0sZS5pbnZlcnRFeHRlbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dC5pbmRleE9mKGUpLFtuW2UtMV0sbltlXV19LGUuY29weT1mdW5jdGlvbigpe3JldHVybiBRaShuLHQpfSxlfWZ1bmN0aW9uIG5vKG4pe2Z1bmN0aW9uIHQobil7cmV0dXJuK259cmV0dXJuIHQuaW52ZXJ0PXQsdC5kb21haW49dC5yYW5nZT1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj1lLm1hcCh0KSx0KTpufSx0LnRpY2tzPWZ1bmN0aW9uKHQpe3JldHVybiBJaShuLHQpfSx0LnRpY2tGb3JtYXQ9ZnVuY3Rpb24odCxlKXtyZXR1cm4gWmkobix0LGUpfSx0LmNvcHk9ZnVuY3Rpb24oKXtyZXR1cm4gbm8obil9LHR9ZnVuY3Rpb24gdG8obil7cmV0dXJuIG4uaW5uZXJSYWRpdXN9ZnVuY3Rpb24gZW8obil7cmV0dXJuIG4ub3V0ZXJSYWRpdXN9ZnVuY3Rpb24gcm8obil7cmV0dXJuIG4uc3RhcnRBbmdsZX1mdW5jdGlvbiB1byhuKXtyZXR1cm4gbi5lbmRBbmdsZX1mdW5jdGlvbiBpbyhuKXtmdW5jdGlvbiB0KHQpe2Z1bmN0aW9uIG8oKXtzLnB1c2goIk0iLGkobihsKSxhKSl9Zm9yKHZhciBjLHM9W10sbD1bXSxmPS0xLGg9dC5sZW5ndGgsZz1fdChlKSxwPV90KHIpOysrZjxoOyl1LmNhbGwodGhpcyxjPXRbZl0sZik/bC5wdXNoKFsrZy5jYWxsKHRoaXMsYyxmKSwrcC5jYWxsKHRoaXMsYyxmKV0pOmwubGVuZ3RoJiYobygpLGw9W10pO3JldHVybiBsLmxlbmd0aCYmbygpLHMubGVuZ3RoP3Muam9pbigiIik6bnVsbH12YXIgZT1icixyPXdyLHU9YmUsaT1vbyxvPWkua2V5LGE9Ljc7cmV0dXJuIHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1uLHQpOmV9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQuZGVmaW5lZD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQuaW50ZXJwb2xhdGU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89ImZ1bmN0aW9uIj09dHlwZW9mIG4/aT1uOihpPU1zLmdldChuKXx8b28pLmtleSx0KTpvfSx0LnRlbnNpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9bix0KTphfSx0fWZ1bmN0aW9uIG9vKG4pe3JldHVybiBuLmpvaW4oIkwiKX1mdW5jdGlvbiBhbyhuKXtyZXR1cm4gb28obikrIloifWZ1bmN0aW9uIGNvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyWzBdKyhyPW5bdF0pWzBdKS8yLCJWIixyWzFdKTtyZXR1cm4gZT4xJiZ1LnB1c2goIkgiLHJbMF0pLHUuam9pbigiIil9ZnVuY3Rpb24gc28obil7Zm9yKHZhciB0PTAsZT1uLmxlbmd0aCxyPW5bMF0sdT1bclswXSwiLCIsclsxXV07Kyt0PGU7KXUucHVzaCgiViIsKHI9blt0XSlbMV0sIkgiLHJbMF0pO3JldHVybiB1LmpvaW4oIiIpfWZ1bmN0aW9uIGxvKG4pe2Zvcih2YXIgdD0wLGU9bi5sZW5ndGgscj1uWzBdLHU9W3JbMF0sIiwiLHJbMV1dOysrdDxlOyl1LnB1c2goIkgiLChyPW5bdF0pWzBdLCJWIixyWzFdKTtyZXR1cm4gdS5qb2luKCIiKX1mdW5jdGlvbiBmbyhuLHQpe3JldHVybiBuLmxlbmd0aDw0P29vKG4pOm5bMV0rcG8obi5zbGljZSgxLG4ubGVuZ3RoLTEpLHZvKG4sdCkpfWZ1bmN0aW9uIGhvKG4sdCl7cmV0dXJuIG4ubGVuZ3RoPDM/b28obik6blswXStwbygobi5wdXNoKG5bMF0pLG4pLHZvKFtuW24ubGVuZ3RoLTJdXS5jb25jYXQobixbblsxXV0pLHQpKX1mdW5jdGlvbiBnbyhuLHQpe3JldHVybiBuLmxlbmd0aDwzP29vKG4pOm5bMF0rcG8obix2byhuLHQpKX1mdW5jdGlvbiBwbyhuLHQpe2lmKHQubGVuZ3RoPDF8fG4ubGVuZ3RoIT10Lmxlbmd0aCYmbi5sZW5ndGghPXQubGVuZ3RoKzIpcmV0dXJuIG9vKG4pO3ZhciBlPW4ubGVuZ3RoIT10Lmxlbmd0aCxyPSIiLHU9blswXSxpPW5bMV0sbz10WzBdLGE9byxjPTE7aWYoZSYmKHIrPSJRIisoaVswXS0yKm9bMF0vMykrIiwiKyhpWzFdLTIqb1sxXS8zKSsiLCIraVswXSsiLCIraVsxXSx1PW5bMV0sYz0yKSx0Lmxlbmd0aD4xKXthPXRbMV0saT1uW2NdLGMrKyxyKz0iQyIrKHVbMF0rb1swXSkrIiwiKyh1WzFdK29bMV0pKyIsIisoaVswXS1hWzBdKSsiLCIrKGlbMV0tYVsxXSkrIiwiK2lbMF0rIiwiK2lbMV07Zm9yKHZhciBzPTI7czx0Lmxlbmd0aDtzKyssYysrKWk9bltjXSxhPXRbc10scis9IlMiKyhpWzBdLWFbMF0pKyIsIisoaVsxXS1hWzFdKSsiLCIraVswXSsiLCIraVsxXX1pZihlKXt2YXIgbD1uW2NdO3IrPSJRIisoaVswXSsyKmFbMF0vMykrIiwiKyhpWzFdKzIqYVsxXS8zKSsiLCIrbFswXSsiLCIrbFsxXX1yZXR1cm4gcn1mdW5jdGlvbiB2byhuLHQpe2Zvcih2YXIgZSxyPVtdLHU9KDEtdCkvMixpPW5bMF0sbz1uWzFdLGE9MSxjPW4ubGVuZ3RoOysrYTxjOyllPWksaT1vLG89blthXSxyLnB1c2goW3UqKG9bMF0tZVswXSksdSoob1sxXS1lWzFdKV0pO3JldHVybiByfWZ1bmN0aW9uIG1vKG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuIG9vKG4pO3ZhciB0PTEsZT1uLmxlbmd0aCxyPW5bMF0sdT1yWzBdLGk9clsxXSxvPVt1LHUsdSwocj1uWzFdKVswXV0sYT1baSxpLGksclsxXV0sYz1bdSwiLCIsaSwiTCIsX28od3MsbyksIiwiLF9vKHdzLGEpXTtmb3Iobi5wdXNoKG5bZS0xXSk7Kyt0PD1lOylyPW5bdF0sby5zaGlmdCgpLG8ucHVzaChyWzBdKSxhLnNoaWZ0KCksYS5wdXNoKHJbMV0pLGJvKGMsbyxhKTtyZXR1cm4gbi5wb3AoKSxjLnB1c2goIkwiLHIpLGMuam9pbigiIil9ZnVuY3Rpb24geW8obil7aWYobi5sZW5ndGg8NClyZXR1cm4gb28obik7Zm9yKHZhciB0LGU9W10scj0tMSx1PW4ubGVuZ3RoLGk9WzBdLG89WzBdOysrcjwzOyl0PW5bcl0saS5wdXNoKHRbMF0pLG8ucHVzaCh0WzFdKTtmb3IoZS5wdXNoKF9vKHdzLGkpKyIsIitfbyh3cyxvKSksLS1yOysrcjx1Oyl0PW5bcl0saS5zaGlmdCgpLGkucHVzaCh0WzBdKSxvLnNoaWZ0KCksby5wdXNoKHRbMV0pLGJvKGUsaSxvKTtyZXR1cm4gZS5qb2luKCIiKX1mdW5jdGlvbiB4byhuKXtmb3IodmFyIHQsZSxyPS0xLHU9bi5sZW5ndGgsaT11KzQsbz1bXSxhPVtdOysrcjw0OyllPW5bciV1XSxvLnB1c2goZVswXSksYS5wdXNoKGVbMV0pO2Zvcih0PVtfbyh3cyxvKSwiLCIsX28od3MsYSldLC0tcjsrK3I8aTspZT1uW3IldV0sby5zaGlmdCgpLG8ucHVzaChlWzBdKSxhLnNoaWZ0KCksYS5wdXNoKGVbMV0pLGJvKHQsbyxhKTtyZXR1cm4gdC5qb2luKCIiKX1mdW5jdGlvbiBNbyhuLHQpe3ZhciBlPW4ubGVuZ3RoLTE7aWYoZSlmb3IodmFyIHIsdSxpPW5bMF1bMF0sbz1uWzBdWzFdLGE9bltlXVswXS1pLGM9bltlXVsxXS1vLHM9LTE7KytzPD1lOylyPW5bc10sdT1zL2UsclswXT10KnJbMF0rKDEtdCkqKGkrdSphKSxyWzFdPXQqclsxXSsoMS10KSoobyt1KmMpO3JldHVybiBtbyhuKX1mdW5jdGlvbiBfbyhuLHQpe3JldHVybiBuWzBdKnRbMF0rblsxXSp0WzFdK25bMl0qdFsyXStuWzNdKnRbM119ZnVuY3Rpb24gYm8obix0LGUpe24ucHVzaCgiQyIsX28oX3MsdCksIiwiLF9vKF9zLGUpLCIsIixfbyhicyx0KSwiLCIsX28oYnMsZSksIiwiLF9vKHdzLHQpLCIsIixfbyh3cyxlKSl9ZnVuY3Rpb24gd28obix0KXtyZXR1cm4odFsxXS1uWzFdKS8odFswXS1uWzBdKX1mdW5jdGlvbiBTbyhuKXtmb3IodmFyIHQ9MCxlPW4ubGVuZ3RoLTEscj1bXSx1PW5bMF0saT1uWzFdLG89clswXT13byh1LGkpOysrdDxlOylyW3RdPShvKyhvPXdvKHU9aSxpPW5bdCsxXSkpKS8yO3JldHVybiByW3RdPW8scn1mdW5jdGlvbiBrbyhuKXtmb3IodmFyIHQsZSxyLHUsaT1bXSxvPVNvKG4pLGE9LTEsYz1uLmxlbmd0aC0xOysrYTxjOyl0PXdvKG5bYV0sblthKzFdKSxvYSh0KTxBYT9vW2FdPW9bYSsxXT0wOihlPW9bYV0vdCxyPW9bYSsxXS90LHU9ZSplK3Iqcix1PjkmJih1PTMqdC9NYXRoLnNxcnQodSksb1thXT11KmUsb1thKzFdPXUqcikpO2ZvcihhPS0xOysrYTw9YzspdT0obltNYXRoLm1pbihjLGErMSldWzBdLW5bTWF0aC5tYXgoMCxhLTEpXVswXSkvKDYqKDErb1thXSpvW2FdKSksaS5wdXNoKFt1fHwwLG9bYV0qdXx8MF0pO3JldHVybiBpfWZ1bmN0aW9uIEVvKG4pe3JldHVybiBuLmxlbmd0aDwzP29vKG4pOm5bMF0rcG8obixrbyhuKSl9ZnVuY3Rpb24gQW8obil7Zm9yKHZhciB0LGUscix1PS0xLGk9bi5sZW5ndGg7Kyt1PGk7KXQ9blt1XSxlPXRbMF0scj10WzFdK3lzLHRbMF09ZSpNYXRoLmNvcyhyKSx0WzFdPWUqTWF0aC5zaW4ocik7cmV0dXJuIG59ZnVuY3Rpb24gQ28obil7ZnVuY3Rpb24gdCh0KXtmdW5jdGlvbiBjKCl7di5wdXNoKCJNIixhKG4obSksZiksbCxzKG4oZC5yZXZlcnNlKCkpLGYpLCJaIil9Zm9yKHZhciBoLGcscCx2PVtdLGQ9W10sbT1bXSx5PS0xLHg9dC5sZW5ndGgsTT1fdChlKSxfPV90KHUpLGI9ZT09PXI/ZnVuY3Rpb24oKXtyZXR1cm4gZ306X3Qociksdz11PT09aT9mdW5jdGlvbigpe3JldHVybiBwfTpfdChpKTsrK3k8eDspby5jYWxsKHRoaXMsaD10W3ldLHkpPyhkLnB1c2goW2c9K00uY2FsbCh0aGlzLGgseSkscD0rXy5jYWxsKHRoaXMsaCx5KV0pLG0ucHVzaChbK2IuY2FsbCh0aGlzLGgseSksK3cuY2FsbCh0aGlzLGgseSldKSk6ZC5sZW5ndGgmJihjKCksZD1bXSxtPVtdKTtyZXR1cm4gZC5sZW5ndGgmJmMoKSx2Lmxlbmd0aD92LmpvaW4oIiIpOm51bGx9dmFyIGU9YnIscj1icix1PTAsaT13cixvPWJlLGE9b28sYz1hLmtleSxzPWEsbD0iTCIsZj0uNztyZXR1cm4gdC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXI9bix0KTpyfSx0LngwPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC54MT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj1uLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1pPW4sdCk6aX0sdC55MD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLHQpOnV9LHQueTE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bix0KTppfSx0LmRlZmluZWQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89bix0KTpvfSx0LmludGVycG9sYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPSJmdW5jdGlvbiI9PXR5cGVvZiBuP2E9bjooYT1Ncy5nZXQobil8fG9vKS5rZXkscz1hLnJldmVyc2V8fGEsbD1hLmNsb3NlZD8iTSI6IkwiLHQpOmN9LHQudGVuc2lvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZj1uLHQpOmZ9LHR9ZnVuY3Rpb24gTm8obil7cmV0dXJuIG4ucmFkaXVzfWZ1bmN0aW9uIExvKG4pe3JldHVybltuLngsbi55XX1mdW5jdGlvbiBUbyhuKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlPXRbMF0scj10WzFdK3lzO3JldHVybltlKk1hdGguY29zKHIpLGUqTWF0aC5zaW4ocildfX1mdW5jdGlvbiBxbygpe3JldHVybiA2NH1mdW5jdGlvbiB6bygpe3JldHVybiJjaXJjbGUifWZ1bmN0aW9uIFJvKG4pe3ZhciB0PU1hdGguc3FydChuL1NhKTtyZXR1cm4iTTAsIit0KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiKy10KyJBIit0KyIsIit0KyIgMCAxLDEgMCwiK3QrIloifWZ1bmN0aW9uIERvKG4sdCl7cmV0dXJuIGZhKG4sTnMpLG4uaWQ9dCxufWZ1bmN0aW9uIFBvKG4sdCxlLHIpe3ZhciB1PW4uaWQ7cmV0dXJuIFIobiwiZnVuY3Rpb24iPT10eXBlb2YgZT9mdW5jdGlvbihuLGksbyl7bi5fX3RyYW5zaXRpb25fX1t1XS50d2Vlbi5zZXQodCxyKGUuY2FsbChuLG4uX19kYXRhX18saSxvKSkpfTooZT1yKGUpLGZ1bmN0aW9uKG4pe24uX190cmFuc2l0aW9uX19bdV0udHdlZW4uc2V0KHQsZSl9KSl9ZnVuY3Rpb24gVW8obil7cmV0dXJuIG51bGw9PW4mJihuPSIiKSxmdW5jdGlvbigpe3RoaXMudGV4dENvbnRlbnQ9bn19ZnVuY3Rpb24gam8obix0LGUscil7dmFyIGk9bi5fX3RyYW5zaXRpb25fX3x8KG4uX190cmFuc2l0aW9uX189e2FjdGl2ZTowLGNvdW50OjB9KSxvPWlbZV07aWYoIW8pe3ZhciBhPXIudGltZTtvPWlbZV09e3R3ZWVuOm5ldyB1LHRpbWU6YSxlYXNlOnIuZWFzZSxkZWxheTpyLmRlbGF5LGR1cmF0aW9uOnIuZHVyYXRpb259LCsraS5jb3VudCxYby50aW1lcihmdW5jdGlvbihyKXtmdW5jdGlvbiB1KHIpe3JldHVybiBpLmFjdGl2ZT5lP3MoKTooaS5hY3RpdmU9ZSxvLmV2ZW50JiZvLmV2ZW50LnN0YXJ0LmNhbGwobixsLHQpLG8udHdlZW4uZm9yRWFjaChmdW5jdGlvbihlLHIpeyhyPXIuY2FsbChuLGwsdCkpJiZ2LnB1c2gocil9KSxYby50aW1lcihmdW5jdGlvbigpe3JldHVybiBwLmM9YyhyfHwxKT9iZTpjLDF9LDAsYSksdm9pZCAwKX1mdW5jdGlvbiBjKHIpe2lmKGkuYWN0aXZlIT09ZSlyZXR1cm4gcygpO2Zvcih2YXIgdT1yL2csYT1mKHUpLGM9di5sZW5ndGg7Yz4wOyl2Wy0tY10uY2FsbChuLGEpO3JldHVybiB1Pj0xPyhvLmV2ZW50JiZvLmV2ZW50LmVuZC5jYWxsKG4sbCx0KSxzKCkpOnZvaWQgMH1mdW5jdGlvbiBzKCl7cmV0dXJuLS1pLmNvdW50P2RlbGV0ZSBpW2VdOmRlbGV0ZSBuLl9fdHJhbnNpdGlvbl9fLDF9dmFyIGw9bi5fX2RhdGFfXyxmPW8uZWFzZSxoPW8uZGVsYXksZz1vLmR1cmF0aW9uLHA9SmEsdj1bXTtyZXR1cm4gcC50PWgrYSxyPj1oP3Uoci1oKToocC5jPXUsdm9pZCAwKX0sMCxhKX19ZnVuY3Rpb24gSG8obix0KXtuLmF0dHIoInRyYW5zZm9ybSIsZnVuY3Rpb24obil7cmV0dXJuInRyYW5zbGF0ZSgiK3QobikrIiwwKSJ9KX1mdW5jdGlvbiBGbyhuLHQpe24uYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKDAsIit0KG4pKyIpIn0pfWZ1bmN0aW9uIE9vKG4pe3JldHVybiBuLnRvSVNPU3RyaW5nKCl9ZnVuY3Rpb24gWW8obix0LGUpe2Z1bmN0aW9uIHIodCl7cmV0dXJuIG4odCl9ZnVuY3Rpb24gdShuLGUpe3ZhciByPW5bMV0tblswXSx1PXIvZSxpPVhvLmJpc2VjdChqcyx1KTtyZXR1cm4gaT09anMubGVuZ3RoP1t0LnllYXIsWWkobi5tYXAoZnVuY3Rpb24obil7cmV0dXJuIG4vMzE1MzZlNn0pLGUpWzJdXTppP3RbdS9qc1tpLTFdPGpzW2ldL3U/aS0xOmldOltPcyxZaShuLGUpWzJdXX1yZXR1cm4gci5pbnZlcnQ9ZnVuY3Rpb24odCl7cmV0dXJuIElvKG4uaW52ZXJ0KHQpKX0sci5kb21haW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG4uZG9tYWluKHQpLHIpOm4uZG9tYWluKCkubWFwKElvKX0sci5uaWNlPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShlKXtyZXR1cm4haXNOYU4oZSkmJiFuLnJhbmdlKGUsSW8oK2UrMSksdCkubGVuZ3RofXZhciBpPXIuZG9tYWluKCksbz16aShpKSxhPW51bGw9PW4/dShvLDEwKToibnVtYmVyIj09dHlwZW9mIG4mJnUobyxuKTtyZXR1cm4gYSYmKG49YVswXSx0PWFbMV0pLHIuZG9tYWluKFBpKGksdD4xP3tmbG9vcjpmdW5jdGlvbih0KXtmb3IoO2UodD1uLmZsb29yKHQpKTspdD1Jbyh0LTEpO3JldHVybiB0fSxjZWlsOmZ1bmN0aW9uKHQpe2Zvcig7ZSh0PW4uY2VpbCh0KSk7KXQ9SW8oK3QrMSk7cmV0dXJuIHR9fTpuKSl9LHIudGlja3M9ZnVuY3Rpb24obix0KXt2YXIgZT16aShyLmRvbWFpbigpKSxpPW51bGw9PW4/dShlLDEwKToibnVtYmVyIj09dHlwZW9mIG4/dShlLG4pOiFuLnJhbmdlJiZbe3JhbmdlOm59LHRdO3JldHVybiBpJiYobj1pWzBdLHQ9aVsxXSksbi5yYW5nZShlWzBdLElvKCtlWzFdKzEpLDE+dD8xOnQpfSxyLnRpY2tGb3JtYXQ9ZnVuY3Rpb24oKXtyZXR1cm4gZX0sci5jb3B5PWZ1bmN0aW9uKCl7cmV0dXJuIFlvKG4uY29weSgpLHQsZSl9LEZpKHIsbil9ZnVuY3Rpb24gSW8obil7cmV0dXJuIG5ldyBEYXRlKG4pfWZ1bmN0aW9uIFpvKG4pe3JldHVybiBKU09OLnBhcnNlKG4ucmVzcG9uc2VUZXh0KX1mdW5jdGlvbiBWbyhuKXt2YXIgdD1Xby5jcmVhdGVSYW5nZSgpO3JldHVybiB0LnNlbGVjdE5vZGUoV28uYm9keSksdC5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQobi5yZXNwb25zZVRleHQpfXZhciBYbz17dmVyc2lvbjoiMy40LjMifTtEYXRlLm5vd3x8KERhdGUubm93PWZ1bmN0aW9uKCl7cmV0dXJuK25ldyBEYXRlfSk7dmFyICRvPVtdLnNsaWNlLEJvPWZ1bmN0aW9uKG4pe3JldHVybiAkby5jYWxsKG4pfSxXbz1kb2N1bWVudCxKbz1Xby5kb2N1bWVudEVsZW1lbnQsR289d2luZG93O3RyeXtCbyhKby5jaGlsZE5vZGVzKVswXS5ub2RlVHlwZX1jYXRjaChLbyl7Qm89ZnVuY3Rpb24obil7Zm9yKHZhciB0PW4ubGVuZ3RoLGU9bmV3IEFycmF5KHQpO3QtLTspZVt0XT1uW3RdO3JldHVybiBlfX10cnl7V28uY3JlYXRlRWxlbWVudCgiZGl2Iikuc3R5bGUuc2V0UHJvcGVydHkoIm9wYWNpdHkiLDAsIiIpfWNhdGNoKFFvKXt2YXIgbmE9R28uRWxlbWVudC5wcm90b3R5cGUsdGE9bmEuc2V0QXR0cmlidXRlLGVhPW5hLnNldEF0dHJpYnV0ZU5TLHJhPUdvLkNTU1N0eWxlRGVjbGFyYXRpb24ucHJvdG90eXBlLHVhPXJhLnNldFByb3BlcnR5O25hLnNldEF0dHJpYnV0ZT1mdW5jdGlvbihuLHQpe3RhLmNhbGwodGhpcyxuLHQrIiIpfSxuYS5zZXRBdHRyaWJ1dGVOUz1mdW5jdGlvbihuLHQsZSl7ZWEuY2FsbCh0aGlzLG4sdCxlKyIiKX0scmEuc2V0UHJvcGVydHk9ZnVuY3Rpb24obix0LGUpe3VhLmNhbGwodGhpcyxuLHQrIiIsZSl9fVhvLmFzY2VuZGluZz1mdW5jdGlvbihuLHQpe3JldHVybiB0Pm4/LTE6bj50PzE6bj49dD8wOjAvMH0sWG8uZGVzY2VuZGluZz1mdW5jdGlvbihuLHQpe3JldHVybiBuPnQ/LTE6dD5uPzE6dD49bj8wOjAvMH0sWG8ubWluPWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmZT5yJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmZT5yJiYoZT1yKX1yZXR1cm4gZX0sWG8ubWF4PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1PS0xLGk9bi5sZW5ndGg7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpe2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9blt1XSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj1uW3VdKSYmcj5lJiYoZT1yKX1lbHNle2Zvcig7Kyt1PGkmJiEobnVsbCE9KGU9dC5jYWxsKG4sblt1XSx1KSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysrdTxpOyludWxsIT0ocj10LmNhbGwobixuW3VdLHUpKSYmcj5lJiYoZT1yKX1yZXR1cm4gZX0sWG8uZXh0ZW50PWZ1bmN0aW9uKG4sdCl7dmFyIGUscix1LGk9LTEsbz1uLmxlbmd0aDtpZigxPT09YXJndW1lbnRzLmxlbmd0aCl7Zm9yKDsrK2k8byYmIShudWxsIT0oZT11PW5baV0pJiZlPj1lKTspZT11PXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj1uW2ldKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9ZWxzZXtmb3IoOysraTxvJiYhKG51bGwhPShlPXU9dC5jYWxsKG4sbltpXSxpKSkmJmU+PWUpOyllPXZvaWQgMDtmb3IoOysraTxvOyludWxsIT0ocj10LmNhbGwobixuW2ldLGkpKSYmKGU+ciYmKGU9cikscj51JiYodT1yKSl9cmV0dXJuW2UsdV19LFhvLnN1bT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9MCx1PW4ubGVuZ3RoLGk9LTE7aWYoMT09PWFyZ3VtZW50cy5sZW5ndGgpZm9yKDsrK2k8dTspaXNOYU4oZT0rbltpXSl8fChyKz1lKTtlbHNlIGZvcig7KytpPHU7KWlzTmFOKGU9K3QuY2FsbChuLG5baV0saSkpfHwocis9ZSk7cmV0dXJuIHJ9LFhvLm1lYW49ZnVuY3Rpb24odCxlKXt2YXIgcix1PXQubGVuZ3RoLGk9MCxvPS0xLGE9MDtpZigxPT09YXJndW1lbnRzLmxlbmd0aClmb3IoOysrbzx1OyluKHI9dFtvXSkmJihpKz0oci1pKS8rK2EpO2Vsc2UgZm9yKDsrK288dTspbihyPWUuY2FsbCh0LHRbb10sbykpJiYoaSs9KHItaSkvKythKTtyZXR1cm4gYT9pOnZvaWQgMH0sWG8ucXVhbnRpbGU9ZnVuY3Rpb24obix0KXt2YXIgZT0obi5sZW5ndGgtMSkqdCsxLHI9TWF0aC5mbG9vcihlKSx1PStuW3ItMV0saT1lLXI7cmV0dXJuIGk/dStpKihuW3JdLXUpOnV9LFhvLm1lZGlhbj1mdW5jdGlvbih0LGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPjEmJih0PXQubWFwKGUpKSx0PXQuZmlsdGVyKG4pLHQubGVuZ3RoP1hvLnF1YW50aWxlKHQuc29ydChYby5hc2NlbmRpbmcpLC41KTp2b2lkIDB9LFhvLmJpc2VjdG9yPWZ1bmN0aW9uKG4pe3JldHVybntsZWZ0OmZ1bmN0aW9uKHQsZSxyLHUpe2Zvcihhcmd1bWVudHMubGVuZ3RoPDMmJihyPTApLGFyZ3VtZW50cy5sZW5ndGg8NCYmKHU9dC5sZW5ndGgpO3U+cjspe3ZhciBpPXIrdT4+PjE7bi5jYWxsKHQsdFtpXSxpKTxlP3I9aSsxOnU9aX1yZXR1cm4gcn0scmlnaHQ6ZnVuY3Rpb24odCxlLHIsdSl7Zm9yKGFyZ3VtZW50cy5sZW5ndGg8MyYmKHI9MCksYXJndW1lbnRzLmxlbmd0aDw0JiYodT10Lmxlbmd0aCk7dT5yOyl7dmFyIGk9cit1Pj4+MTtlPG4uY2FsbCh0LHRbaV0saSk/dT1pOnI9aSsxfXJldHVybiByfX19O3ZhciBpYT1Yby5iaXNlY3RvcihmdW5jdGlvbihuKXtyZXR1cm4gbn0pO1hvLmJpc2VjdExlZnQ9aWEubGVmdCxYby5iaXNlY3Q9WG8uYmlzZWN0UmlnaHQ9aWEucmlnaHQsWG8uc2h1ZmZsZT1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyPW4ubGVuZ3RoO3I7KWU9MHxNYXRoLnJhbmRvbSgpKnItLSx0PW5bcl0sbltyXT1uW2VdLG5bZV09dDtyZXR1cm4gbn0sWG8ucGVybXV0ZT1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZT10Lmxlbmd0aCxyPW5ldyBBcnJheShlKTtlLS07KXJbZV09blt0W2VdXTtyZXR1cm4gcn0sWG8ucGFpcnM9ZnVuY3Rpb24obil7Zm9yKHZhciB0LGU9MCxyPW4ubGVuZ3RoLTEsdT1uWzBdLGk9bmV3IEFycmF5KDA+cj8wOnIpO3I+ZTspaVtlXT1bdD11LHU9blsrK2VdXTtyZXR1cm4gaX0sWG8uemlwPWZ1bmN0aW9uKCl7aWYoISh1PWFyZ3VtZW50cy5sZW5ndGgpKXJldHVybltdO2Zvcih2YXIgbj0tMSxlPVhvLm1pbihhcmd1bWVudHMsdCkscj1uZXcgQXJyYXkoZSk7KytuPGU7KWZvcih2YXIgdSxpPS0xLG89cltuXT1uZXcgQXJyYXkodSk7KytpPHU7KW9baV09YXJndW1lbnRzW2ldW25dO3JldHVybiByfSxYby50cmFuc3Bvc2U9ZnVuY3Rpb24obil7cmV0dXJuIFhvLnppcC5hcHBseShYbyxuKX0sWG8ua2V5cz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2goZSk7cmV0dXJuIHR9LFhvLnZhbHVlcz1mdW5jdGlvbihuKXt2YXIgdD1bXTtmb3IodmFyIGUgaW4gbil0LnB1c2gobltlXSk7cmV0dXJuIHR9LFhvLmVudHJpZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107Zm9yKHZhciBlIGluIG4pdC5wdXNoKHtrZXk6ZSx2YWx1ZTpuW2VdfSk7cmV0dXJuIHR9LFhvLm1lcmdlPWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPS0xLG89MDsrK2k8dTspbys9bltpXS5sZW5ndGg7Zm9yKGU9bmV3IEFycmF5KG8pOy0tdT49MDspZm9yKHI9blt1XSx0PXIubGVuZ3RoOy0tdD49MDspZVstLW9dPXJbdF07cmV0dXJuIGV9O3ZhciBvYT1NYXRoLmFicztYby5yYW5nZT1mdW5jdGlvbihuLHQscil7aWYoYXJndW1lbnRzLmxlbmd0aDwzJiYocj0xLGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9bixuPTApKSwxLzA9PT0odC1uKS9yKXRocm93IG5ldyBFcnJvcigiaW5maW5pdGUgcmFuZ2UiKTt2YXIgdSxpPVtdLG89ZShvYShyKSksYT0tMTtpZihuKj1vLHQqPW8scio9bywwPnIpZm9yKDsodT1uK3IqKythKT50OylpLnB1c2godS9vKTtlbHNlIGZvcig7KHU9bityKisrYSk8dDspaS5wdXNoKHUvbyk7cmV0dXJuIGl9LFhvLm1hcD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgdTtpZihuIGluc3RhbmNlb2YgdSluLmZvckVhY2goZnVuY3Rpb24obixlKXt0LnNldChuLGUpfSk7ZWxzZSBmb3IodmFyIGUgaW4gbil0LnNldChlLG5bZV0pO3JldHVybiB0fSxyKHUse2hhczppLGdldDpmdW5jdGlvbihuKXtyZXR1cm4gdGhpc1thYStuXX0sc2V0OmZ1bmN0aW9uKG4sdCl7cmV0dXJuIHRoaXNbYWErbl09dH0scmVtb3ZlOm8sa2V5czphLHZhbHVlczpmdW5jdGlvbigpe3ZhciBuPVtdO3JldHVybiB0aGlzLmZvckVhY2goZnVuY3Rpb24odCxlKXtuLnB1c2goZSl9KSxufSxlbnRyaWVzOmZ1bmN0aW9uKCl7dmFyIG49W107cmV0dXJuIHRoaXMuZm9yRWFjaChmdW5jdGlvbih0LGUpe24ucHVzaCh7a2V5OnQsdmFsdWU6ZX0pfSksbn0sc2l6ZTpjLGVtcHR5OnMsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1jYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSksdGhpc1t0XSl9fSk7dmFyIGFhPSJceDAwIixjYT1hYS5jaGFyQ29kZUF0KDApO1hvLm5lc3Q9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKHQsYSxjKXtpZihjPj1vLmxlbmd0aClyZXR1cm4gcj9yLmNhbGwoaSxhKTplP2Euc29ydChlKTphO2Zvcih2YXIgcyxsLGYsaCxnPS0xLHA9YS5sZW5ndGgsdj1vW2MrK10sZD1uZXcgdTsrK2c8cDspKGg9ZC5nZXQocz12KGw9YVtnXSkpKT9oLnB1c2gobCk6ZC5zZXQocyxbbF0pO3JldHVybiB0PyhsPXQoKSxmPWZ1bmN0aW9uKGUscil7bC5zZXQoZSxuKHQscixjKSl9KToobD17fSxmPWZ1bmN0aW9uKGUscil7bFtlXT1uKHQscixjKX0pLGQuZm9yRWFjaChmKSxsfWZ1bmN0aW9uIHQobixlKXtpZihlPj1vLmxlbmd0aClyZXR1cm4gbjt2YXIgcj1bXSx1PWFbZSsrXTtyZXR1cm4gbi5mb3JFYWNoKGZ1bmN0aW9uKG4sdSl7ci5wdXNoKHtrZXk6bix2YWx1ZXM6dCh1LGUpfSl9KSx1P3Iuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1KG4ua2V5LHQua2V5KX0pOnJ9dmFyIGUscixpPXt9LG89W10sYT1bXTtyZXR1cm4gaS5tYXA9ZnVuY3Rpb24odCxlKXtyZXR1cm4gbihlLHQsMCl9LGkuZW50cmllcz1mdW5jdGlvbihlKXtyZXR1cm4gdChuKFhvLm1hcCxlLDApLDApfSxpLmtleT1mdW5jdGlvbihuKXtyZXR1cm4gby5wdXNoKG4pLGl9LGkuc29ydEtleXM9ZnVuY3Rpb24obil7cmV0dXJuIGFbby5sZW5ndGgtMV09bixpfSxpLnNvcnRWYWx1ZXM9ZnVuY3Rpb24obil7cmV0dXJuIGU9bixpfSxpLnJvbGx1cD1mdW5jdGlvbihuKXtyZXR1cm4gcj1uLGl9LGl9LFhvLnNldD1mdW5jdGlvbihuKXt2YXIgdD1uZXcgbDtpZihuKWZvcih2YXIgZT0wLHI9bi5sZW5ndGg7cj5lOysrZSl0LmFkZChuW2VdKTtyZXR1cm4gdH0scihsLHtoYXM6aSxhZGQ6ZnVuY3Rpb24obil7cmV0dXJuIHRoaXNbYWErbl09ITAsbn0scmVtb3ZlOmZ1bmN0aW9uKG4pe3JldHVybiBuPWFhK24sbiBpbiB0aGlzJiZkZWxldGUgdGhpc1tuXX0sdmFsdWVzOmEsc2l6ZTpjLGVtcHR5OnMsZm9yRWFjaDpmdW5jdGlvbihuKXtmb3IodmFyIHQgaW4gdGhpcyl0LmNoYXJDb2RlQXQoMCk9PT1jYSYmbi5jYWxsKHRoaXMsdC5zdWJzdHJpbmcoMSkpfX0pLFhvLmJlaGF2aW9yPXt9LFhvLnJlYmluZD1mdW5jdGlvbihuLHQpe2Zvcih2YXIgZSxyPTEsdT1hcmd1bWVudHMubGVuZ3RoOysrcjx1OyluW2U9YXJndW1lbnRzW3JdXT1mKG4sdCx0W2VdKTtyZXR1cm4gbn07dmFyIHNhPVsid2Via2l0IiwibXMiLCJtb3oiLCJNb3oiLCJvIiwiTyJdO1hvLmRpc3BhdGNoPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPW5ldyBwLHQ9LTEsZT1hcmd1bWVudHMubGVuZ3RoOysrdDxlOyluW2FyZ3VtZW50c1t0XV09dihuKTtyZXR1cm4gbn0scC5wcm90b3R5cGUub249ZnVuY3Rpb24obix0KXt2YXIgZT1uLmluZGV4T2YoIi4iKSxyPSIiO2lmKGU+PTAmJihyPW4uc3Vic3RyaW5nKGUrMSksbj1uLnN1YnN0cmluZygwLGUpKSxuKXJldHVybiBhcmd1bWVudHMubGVuZ3RoPDI/dGhpc1tuXS5vbihyKTp0aGlzW25dLm9uKHIsdCk7aWYoMj09PWFyZ3VtZW50cy5sZW5ndGgpe2lmKG51bGw9PXQpZm9yKG4gaW4gdGhpcyl0aGlzLmhhc093blByb3BlcnR5KG4pJiZ0aGlzW25dLm9uKHIsbnVsbCk7cmV0dXJuIHRoaXN9fSxYby5ldmVudD1udWxsLFhvLnJlcXVvdGU9ZnVuY3Rpb24obil7cmV0dXJuIG4ucmVwbGFjZShsYSwiXFwkJiIpfTt2YXIgbGE9L1tcXFxeXCRcKlwrXD9cfFxbXF1cKFwpXC5ce1x9XS9nLGZhPXt9Ll9fcHJvdG9fXz9mdW5jdGlvbihuLHQpe24uX19wcm90b19fPXR9OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlIGluIHQpbltlXT10W2VdfSxoYT1mdW5jdGlvbihuLHQpe3JldHVybiB0LnF1ZXJ5U2VsZWN0b3Iobil9LGdhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHQucXVlcnlTZWxlY3RvckFsbChuKX0scGE9Sm9baChKbywibWF0Y2hlc1NlbGVjdG9yIildLHZhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHBhLmNhbGwobix0KX07ImZ1bmN0aW9uIj09dHlwZW9mIFNpenpsZSYmKGhhPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFNpenpsZShuLHQpWzBdfHxudWxsfSxnYT1TaXp6bGUsdmE9U2l6emxlLm1hdGNoZXNTZWxlY3RvciksWG8uc2VsZWN0aW9uPWZ1bmN0aW9uKCl7cmV0dXJuIHhhfTt2YXIgZGE9WG8uc2VsZWN0aW9uLnByb3RvdHlwZT1bXTtkYS5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaT1bXTtuPU0obik7Zm9yKHZhciBvPS0xLGE9dGhpcy5sZW5ndGg7KytvPGE7KXtpLnB1c2godD1bXSksdC5wYXJlbnROb2RlPShyPXRoaXNbb10pLnBhcmVudE5vZGU7Zm9yKHZhciBjPS0xLHM9ci5sZW5ndGg7KytjPHM7KSh1PXJbY10pPyh0LnB1c2goZT1uLmNhbGwodSx1Ll9fZGF0YV9fLGMsbykpLGUmJiJfX2RhdGFfXyJpbiB1JiYoZS5fX2RhdGFfXz11Ll9fZGF0YV9fKSk6dC5wdXNoKG51bGwpfXJldHVybiB4KGkpfSxkYS5zZWxlY3RBbGw9ZnVuY3Rpb24obil7dmFyIHQsZSxyPVtdO249XyhuKTtmb3IodmFyIHU9LTEsaT10aGlzLmxlbmd0aDsrK3U8aTspZm9yKHZhciBvPXRoaXNbdV0sYT0tMSxjPW8ubGVuZ3RoOysrYTxjOykoZT1vW2FdKSYmKHIucHVzaCh0PUJvKG4uY2FsbChlLGUuX19kYXRhX18sYSx1KSkpLHQucGFyZW50Tm9kZT1lKTtyZXR1cm4geChyKX07dmFyIG1hPXtzdmc6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix4aHRtbDoiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCIseGxpbms6Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLHhtbDoiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIix4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC94bWxucy8ifTtYby5ucz17cHJlZml4Om1hLHF1YWxpZnk6ZnVuY3Rpb24obil7dmFyIHQ9bi5pbmRleE9mKCI6IiksZT1uO3JldHVybiB0Pj0wJiYoZT1uLnN1YnN0cmluZygwLHQpLG49bi5zdWJzdHJpbmcodCsxKSksbWEuaGFzT3duUHJvcGVydHkoZSk/e3NwYWNlOm1hW2VdLGxvY2FsOm59Om59fSxkYS5hdHRyPWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pe3ZhciBlPXRoaXMubm9kZSgpO3JldHVybiBuPVhvLm5zLnF1YWxpZnkobiksbi5sb2NhbD9lLmdldEF0dHJpYnV0ZU5TKG4uc3BhY2Usbi5sb2NhbCk6ZS5nZXRBdHRyaWJ1dGUobil9Zm9yKHQgaW4gbil0aGlzLmVhY2goYih0LG5bdF0pKTtyZXR1cm4gdGhpc31yZXR1cm4gdGhpcy5lYWNoKGIobix0KSl9LGRhLmNsYXNzZWQ9ZnVuY3Rpb24obix0KXtpZihhcmd1bWVudHMubGVuZ3RoPDIpe2lmKCJzdHJpbmciPT10eXBlb2Ygbil7dmFyIGU9dGhpcy5ub2RlKCkscj0obj1rKG4pKS5sZW5ndGgsdT0tMTtpZih0PWUuY2xhc3NMaXN0KXtmb3IoOysrdTxyOylpZighdC5jb250YWlucyhuW3VdKSlyZXR1cm4hMX1lbHNlIGZvcih0PWUuZ2V0QXR0cmlidXRlKCJjbGFzcyIpOysrdTxyOylpZighUyhuW3VdKS50ZXN0KHQpKXJldHVybiExO3JldHVybiEwfWZvcih0IGluIG4pdGhpcy5lYWNoKEUodCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChFKG4sdCkpfSxkYS5zdHlsZT1mdW5jdGlvbihuLHQsZSl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aDtpZigzPnIpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5yJiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLmVhY2goQyhlLG5bZV0sdCkpO3JldHVybiB0aGlzfWlmKDI+cilyZXR1cm4gR28uZ2V0Q29tcHV0ZWRTdHlsZSh0aGlzLm5vZGUoKSxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO2U9IiJ9cmV0dXJuIHRoaXMuZWFjaChDKG4sdCxlKSl9LGRhLnByb3BlcnR5PWZ1bmN0aW9uKG4sdCl7aWYoYXJndW1lbnRzLmxlbmd0aDwyKXtpZigic3RyaW5nIj09dHlwZW9mIG4pcmV0dXJuIHRoaXMubm9kZSgpW25dO2Zvcih0IGluIG4pdGhpcy5lYWNoKE4odCxuW3RdKSk7cmV0dXJuIHRoaXN9cmV0dXJuIHRoaXMuZWFjaChOKG4sdCkpfSxkYS50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMuZWFjaCgiZnVuY3Rpb24iPT10eXBlb2Ygbj9mdW5jdGlvbigpe3ZhciB0PW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3RoaXMudGV4dENvbnRlbnQ9bnVsbD09dD8iIjp0fTpudWxsPT1uP2Z1bmN0aW9uKCl7dGhpcy50ZXh0Q29udGVudD0iIn06ZnVuY3Rpb24oKXt0aGlzLnRleHRDb250ZW50PW59KTp0aGlzLm5vZGUoKS50ZXh0Q29udGVudH0sZGEuaHRtbD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD90aGlzLmVhY2goImZ1bmN0aW9uIj09dHlwZW9mIG4/ZnVuY3Rpb24oKXt2YXIgdD1uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLmlubmVySFRNTD1udWxsPT10PyIiOnR9Om51bGw9PW4/ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD0iIn06ZnVuY3Rpb24oKXt0aGlzLmlubmVySFRNTD1ufSk6dGhpcy5ub2RlKCkuaW5uZXJIVE1MfSxkYS5hcHBlbmQ9ZnVuY3Rpb24obil7cmV0dXJuIG49TChuKSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmFwcGVuZENoaWxkKG4uYXBwbHkodGhpcyxhcmd1bWVudHMpKX0pfSxkYS5pbnNlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gbj1MKG4pLHQ9TSh0KSx0aGlzLnNlbGVjdChmdW5jdGlvbigpe3JldHVybiB0aGlzLmluc2VydEJlZm9yZShuLmFwcGx5KHRoaXMsYXJndW1lbnRzKSx0LmFwcGx5KHRoaXMsYXJndW1lbnRzKXx8bnVsbCl9KX0sZGEucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpe3ZhciBuPXRoaXMucGFyZW50Tm9kZTtuJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSl9LGRhLmRhdGE9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSl7dmFyIHIsaSxvLGE9bi5sZW5ndGgsZj1lLmxlbmd0aCxoPU1hdGgubWluKGEsZiksZz1uZXcgQXJyYXkoZikscD1uZXcgQXJyYXkoZiksdj1uZXcgQXJyYXkoYSk7aWYodCl7dmFyIGQsbT1uZXcgdSx5PW5ldyB1LHg9W107Zm9yKHI9LTE7KytyPGE7KWQ9dC5jYWxsKGk9bltyXSxpLl9fZGF0YV9fLHIpLG0uaGFzKGQpP3Zbcl09aTptLnNldChkLGkpLHgucHVzaChkKTtmb3Iocj0tMTsrK3I8ZjspZD10LmNhbGwoZSxvPWVbcl0sciksKGk9bS5nZXQoZCkpPyhnW3JdPWksaS5fX2RhdGFfXz1vKTp5LmhhcyhkKXx8KHBbcl09VChvKSkseS5zZXQoZCxvKSxtLnJlbW92ZShkKTtmb3Iocj0tMTsrK3I8YTspbS5oYXMoeFtyXSkmJih2W3JdPW5bcl0pfWVsc2V7Zm9yKHI9LTE7KytyPGg7KWk9bltyXSxvPWVbcl0saT8oaS5fX2RhdGFfXz1vLGdbcl09aSk6cFtyXT1UKG8pO2Zvcig7Zj5yOysrcilwW3JdPVQoZVtyXSk7Zm9yKDthPnI7KytyKXZbcl09bltyXX1wLnVwZGF0ZT1nLHAucGFyZW50Tm9kZT1nLnBhcmVudE5vZGU9di5wYXJlbnROb2RlPW4ucGFyZW50Tm9kZSxjLnB1c2gocCkscy5wdXNoKGcpLGwucHVzaCh2KX12YXIgcixpLG89LTEsYT10aGlzLmxlbmd0aDtpZighYXJndW1lbnRzLmxlbmd0aCl7Zm9yKG49bmV3IEFycmF5KGE9KHI9dGhpc1swXSkubGVuZ3RoKTsrK288YTspKGk9cltvXSkmJihuW29dPWkuX19kYXRhX18pO3JldHVybiBufXZhciBjPUQoW10pLHM9eChbXSksbD14KFtdKTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygbilmb3IoOysrbzxhOyllKHI9dGhpc1tvXSxuLmNhbGwocixyLnBhcmVudE5vZGUuX19kYXRhX18sbykpO2Vsc2UgZm9yKDsrK288YTspZShyPXRoaXNbb10sbik7cmV0dXJuIHMuZW50ZXI9ZnVuY3Rpb24oKXtyZXR1cm4gY30scy5leGl0PWZ1bmN0aW9uKCl7cmV0dXJuIGx9LHN9LGRhLmRhdHVtPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3RoaXMucHJvcGVydHkoIl9fZGF0YV9fIixuKTp0aGlzLnByb3BlcnR5KCJfX2RhdGFfXyIpfSxkYS5maWx0ZXI9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9W107ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihuPXEobikpO2Zvcih2YXIgaT0wLG89dGhpcy5sZW5ndGg7bz5pO2krKyl7dS5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT0oZT10aGlzW2ldKS5wYXJlbnROb2RlO2Zvcih2YXIgYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0LnB1c2gocil9cmV0dXJuIHgodSl9LGRhLm9yZGVyPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPS0xLHQ9dGhpcy5sZW5ndGg7KytuPHQ7KWZvcih2YXIgZSxyPXRoaXNbbl0sdT1yLmxlbmd0aC0xLGk9clt1XTstLXU+PTA7KShlPXJbdV0pJiYoaSYmaSE9PWUubmV4dFNpYmxpbmcmJmkucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoZSxpKSxpPWUpO3JldHVybiB0aGlzfSxkYS5zb3J0PWZ1bmN0aW9uKG4pe249ei5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Zm9yKHZhciB0PS0xLGU9dGhpcy5sZW5ndGg7Kyt0PGU7KXRoaXNbdF0uc29ydChuKTtyZXR1cm4gdGhpcy5vcmRlcigpfSxkYS5lYWNoPWZ1bmN0aW9uKG4pe3JldHVybiBSKHRoaXMsZnVuY3Rpb24odCxlLHIpe24uY2FsbCh0LHQuX19kYXRhX18sZSxyKX0pfSxkYS5jYWxsPWZ1bmN0aW9uKG4pe3ZhciB0PUJvKGFyZ3VtZW50cyk7cmV0dXJuIG4uYXBwbHkodFswXT10aGlzLHQpLHRoaXN9LGRhLmVtcHR5PWZ1bmN0aW9uKCl7cmV0dXJuIXRoaXMubm9kZSgpfSxkYS5ub2RlPWZ1bmN0aW9uKCl7Zm9yKHZhciBuPTAsdD10aGlzLmxlbmd0aDt0Pm47bisrKWZvcih2YXIgZT10aGlzW25dLHI9MCx1PWUubGVuZ3RoO3U+cjtyKyspe3ZhciBpPWVbcl07aWYoaSlyZXR1cm4gaX1yZXR1cm4gbnVsbH0sZGEuc2l6ZT1mdW5jdGlvbigpe3ZhciBuPTA7cmV0dXJuIHRoaXMuZWFjaChmdW5jdGlvbigpeysrbn0pLG59O3ZhciB5YT1bXTtYby5zZWxlY3Rpb24uZW50ZXI9RCxYby5zZWxlY3Rpb24uZW50ZXIucHJvdG90eXBlPXlhLHlhLmFwcGVuZD1kYS5hcHBlbmQseWEuZW1wdHk9ZGEuZW1wdHkseWEubm9kZT1kYS5ub2RlLHlhLmNhbGw9ZGEuY2FsbCx5YS5zaXplPWRhLnNpemUseWEuc2VsZWN0PWZ1bmN0aW9uKG4pe2Zvcih2YXIgdCxlLHIsdSxpLG89W10sYT0tMSxjPXRoaXMubGVuZ3RoOysrYTxjOyl7cj0odT10aGlzW2FdKS51cGRhdGUsby5wdXNoKHQ9W10pLHQucGFyZW50Tm9kZT11LnBhcmVudE5vZGU7Zm9yKHZhciBzPS0xLGw9dS5sZW5ndGg7KytzPGw7KShpPXVbc10pPyh0LnB1c2gocltzXT1lPW4uY2FsbCh1LnBhcmVudE5vZGUsaS5fX2RhdGFfXyxzLGEpKSxlLl9fZGF0YV9fPWkuX19kYXRhX18pOnQucHVzaChudWxsKX1yZXR1cm4geChvKX0seWEuaW5zZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg8MiYmKHQ9UCh0aGlzKSksZGEuaW5zZXJ0LmNhbGwodGhpcyxuLHQpfSxkYS50cmFuc2l0aW9uPWZ1bmN0aW9uKCl7Zm9yKHZhciBuLHQsZT1rc3x8KytMcyxyPVtdLHU9RXN8fHt0aW1lOkRhdGUubm93KCksZWFzZTp5dSxkZWxheTowLGR1cmF0aW9uOjI1MH0saT0tMSxvPXRoaXMubGVuZ3RoOysraTxvOyl7ci5wdXNoKG49W10pO2Zvcih2YXIgYT10aGlzW2ldLGM9LTEscz1hLmxlbmd0aDsrK2M8czspKHQ9YVtjXSkmJmpvKHQsYyxlLHUpLG4ucHVzaCh0KX1yZXR1cm4gRG8ocixlKX0sZGEuaW50ZXJydXB0PWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaChVKX0sWG8uc2VsZWN0PWZ1bmN0aW9uKG4pe3ZhciB0PVsic3RyaW5nIj09dHlwZW9mIG4/aGEobixXbyk6bl07cmV0dXJuIHQucGFyZW50Tm9kZT1Kbyx4KFt0XSl9LFhvLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdD1Cbygic3RyaW5nIj09dHlwZW9mIG4/Z2EobixXbyk6bik7cmV0dXJuIHQucGFyZW50Tm9kZT1Kbyx4KFt0XSl9O3ZhciB4YT1Yby5zZWxlY3QoSm8pO2RhLm9uPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoO2lmKDM+cil7aWYoInN0cmluZyIhPXR5cGVvZiBuKXsyPnImJih0PSExKTtmb3IoZSBpbiBuKXRoaXMuZWFjaChqKGUsbltlXSx0KSk7cmV0dXJuIHRoaXN9aWYoMj5yKXJldHVybihyPXRoaXMubm9kZSgpWyJfX29uIituXSkmJnIuXztlPSExfXJldHVybiB0aGlzLmVhY2goaihuLHQsZSkpfTt2YXIgTWE9WG8ubWFwKHttb3VzZWVudGVyOiJtb3VzZW92ZXIiLG1vdXNlbGVhdmU6Im1vdXNlb3V0In0pO01hLmZvckVhY2goZnVuY3Rpb24obil7Im9uIituIGluIFdvJiZNYS5yZW1vdmUobil9KTt2YXIgX2E9Im9uc2VsZWN0c3RhcnQiaW4gV28/bnVsbDpoKEpvLnN0eWxlLCJ1c2VyU2VsZWN0IiksYmE9MDtYby5tb3VzZT1mdW5jdGlvbihuKXtyZXR1cm4gWShuLG0oKSl9O3ZhciB3YT0vV2ViS2l0Ly50ZXN0KEdvLm5hdmlnYXRvci51c2VyQWdlbnQpPy0xOjA7WG8udG91Y2hlcz1mdW5jdGlvbihuLHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPDImJih0PW0oKS50b3VjaGVzKSx0P0JvKHQpLm1hcChmdW5jdGlvbih0KXt2YXIgZT1ZKG4sdCk7cmV0dXJuIGUuaWRlbnRpZmllcj10LmlkZW50aWZpZXIsZX0pOltdfSxYby5iZWhhdmlvci5kcmFnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3RoaXMub24oIm1vdXNlZG93bi5kcmFnIixvKS5vbigidG91Y2hzdGFydC5kcmFnIixhKX1mdW5jdGlvbiB0KCl7cmV0dXJuIFhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXJ9ZnVuY3Rpb24gZShuLHQpe3JldHVybiBYby50b3VjaGVzKG4pLmZpbHRlcihmdW5jdGlvbihuKXtyZXR1cm4gbi5pZGVudGlmaWVyPT09dH0pWzBdfWZ1bmN0aW9uIHIobix0LGUscil7cmV0dXJuIGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbygpe3ZhciBuPXQobCxnKSxlPW5bMF0tdlswXSxyPW5bMV0tdlsxXTtkfD1lfHIsdj1uLGYoe3R5cGU6ImRyYWciLHg6blswXStjWzBdLHk6blsxXStjWzFdLGR4OmUsZHk6cn0pfWZ1bmN0aW9uIGEoKXttLm9uKGUrIi4iK3AsbnVsbCkub24ocisiLiIrcCxudWxsKSx5KGQmJlhvLmV2ZW50LnRhcmdldD09PWgpLGYoe3R5cGU6ImRyYWdlbmQifSl9dmFyIGMscz10aGlzLGw9cy5wYXJlbnROb2RlLGY9dS5vZihzLGFyZ3VtZW50cyksaD1Yby5ldmVudC50YXJnZXQsZz1uKCkscD1udWxsPT1nPyJkcmFnIjoiZHJhZy0iK2csdj10KGwsZyksZD0wLG09WG8uc2VsZWN0KEdvKS5vbihlKyIuIitwLG8pLm9uKHIrIi4iK3AsYSkseT1PKCk7aT8oYz1pLmFwcGx5KHMsYXJndW1lbnRzKSxjPVtjLngtdlswXSxjLnktdlsxXV0pOmM9WzAsMF0sZih7dHlwZToiZHJhZ3N0YXJ0In0pfX12YXIgdT15KG4sImRyYWciLCJkcmFnc3RhcnQiLCJkcmFnZW5kIiksaT1udWxsLG89cihnLFhvLm1vdXNlLCJtb3VzZW1vdmUiLCJtb3VzZXVwIiksYT1yKHQsZSwidG91Y2htb3ZlIiwidG91Y2hlbmQiKTtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9dCxuKTppfSxYby5yZWJpbmQobix1LCJvbiIpfTt2YXIgU2E9TWF0aC5QSSxrYT0yKlNhLEVhPVNhLzIsQWE9MWUtNixDYT1BYSpBYSxOYT1TYS8xODAsTGE9MTgwL1NhLFRhPU1hdGguU1FSVDIscWE9Mix6YT00O1hvLmludGVycG9sYXRlWm9vbT1mdW5jdGlvbihuLHQpe2Z1bmN0aW9uIGUobil7dmFyIHQ9bip5O2lmKG0pe3ZhciBlPUIodiksbz1pLyhxYSpoKSooZSpXKFRhKnQrdiktJCh2KSk7cmV0dXJuW3IrbypzLHUrbypsLGkqZS9CKFRhKnQrdildfXJldHVybltyK24qcyx1K24qbCxpKk1hdGguZXhwKFRhKnQpXX12YXIgcj1uWzBdLHU9blsxXSxpPW5bMl0sbz10WzBdLGE9dFsxXSxjPXRbMl0scz1vLXIsbD1hLXUsZj1zKnMrbCpsLGg9TWF0aC5zcXJ0KGYpLGc9KGMqYy1pKmkremEqZikvKDIqaSpxYSpoKSxwPShjKmMtaSppLXphKmYpLygyKmMqcWEqaCksdj1NYXRoLmxvZyhNYXRoLnNxcnQoZypnKzEpLWcpLGQ9TWF0aC5sb2coTWF0aC5zcXJ0KHAqcCsxKS1wKSxtPWQtdix5PShtfHxNYXRoLmxvZyhjL2kpKS9UYTtyZXR1cm4gZS5kdXJhdGlvbj0xZTMqeSxlfSxYby5iZWhhdmlvci56b29tPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuKXtuLm9uKEEscykub24oUGErIi56b29tIixmKS5vbihDLGgpLm9uKCJkYmxjbGljay56b29tIixnKS5vbihMLGwpfWZ1bmN0aW9uIHQobil7cmV0dXJuWyhuWzBdLVMueCkvUy5rLChuWzFdLVMueSkvUy5rXX1mdW5jdGlvbiBlKG4pe3JldHVybltuWzBdKlMuaytTLngsblsxXSpTLmsrUy55XX1mdW5jdGlvbiByKG4pe1Muaz1NYXRoLm1heChFWzBdLE1hdGgubWluKEVbMV0sbikpfWZ1bmN0aW9uIHUobix0KXt0PWUodCksUy54Kz1uWzBdLXRbMF0sUy55Kz1uWzFdLXRbMV19ZnVuY3Rpb24gaSgpe18mJl8uZG9tYWluKE0ucmFuZ2UoKS5tYXAoZnVuY3Rpb24obil7cmV0dXJuKG4tUy54KS9TLmt9KS5tYXAoTS5pbnZlcnQpKSx3JiZ3LmRvbWFpbihiLnJhbmdlKCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybihuLVMueSkvUy5rfSkubWFwKGIuaW52ZXJ0KSl9ZnVuY3Rpb24gbyhuKXtuKHt0eXBlOiJ6b29tc3RhcnQifSl9ZnVuY3Rpb24gYShuKXtpKCksbih7dHlwZToiem9vbSIsc2NhbGU6Uy5rLHRyYW5zbGF0ZTpbUy54LFMueV19KX1mdW5jdGlvbiBjKG4pe24oe3R5cGU6Inpvb21lbmQifSl9ZnVuY3Rpb24gcygpe2Z1bmN0aW9uIG4oKXtsPTEsdShYby5tb3VzZShyKSxnKSxhKGkpfWZ1bmN0aW9uIGUoKXtmLm9uKEMsR289PT1yP2g6bnVsbCkub24oTixudWxsKSxwKGwmJlhvLmV2ZW50LnRhcmdldD09PXMpLGMoaSl9dmFyIHI9dGhpcyxpPVQub2Yocixhcmd1bWVudHMpLHM9WG8uZXZlbnQudGFyZ2V0LGw9MCxmPVhvLnNlbGVjdChHbykub24oQyxuKS5vbihOLGUpLGc9dChYby5tb3VzZShyKSkscD1PKCk7VS5jYWxsKHIpLG8oaSl9ZnVuY3Rpb24gbCgpe2Z1bmN0aW9uIG4oKXt2YXIgbj1Yby50b3VjaGVzKGcpO3JldHVybiBoPVMuayxuLmZvckVhY2goZnVuY3Rpb24obil7bi5pZGVudGlmaWVyIGluIHYmJih2W24uaWRlbnRpZmllcl09dChuKSl9KSxufWZ1bmN0aW9uIGUoKXtmb3IodmFyIHQ9WG8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLGk9dC5sZW5ndGg7aT5lOysrZSl2W3RbZV0uaWRlbnRpZmllcl09bnVsbDt2YXIgbz1uKCksYz1EYXRlLm5vdygpO2lmKDE9PT1vLmxlbmd0aCl7aWYoNTAwPmMteCl7dmFyIHM9b1swXSxsPXZbcy5pZGVudGlmaWVyXTtyKDIqUy5rKSx1KHMsbCksZCgpLGEocCl9eD1jfWVsc2UgaWYoby5sZW5ndGg+MSl7dmFyIHM9b1swXSxmPW9bMV0saD1zWzBdLWZbMF0sZz1zWzFdLWZbMV07bT1oKmgrZypnfX1mdW5jdGlvbiBpKCl7Zm9yKHZhciBuLHQsZSxpLG89WG8udG91Y2hlcyhnKSxjPTAscz1vLmxlbmd0aDtzPmM7KytjLGk9bnVsbClpZihlPW9bY10saT12W2UuaWRlbnRpZmllcl0pe2lmKHQpYnJlYWs7bj1lLHQ9aX1pZihpKXt2YXIgbD0obD1lWzBdLW5bMF0pKmwrKGw9ZVsxXS1uWzFdKSpsLGY9bSYmTWF0aC5zcXJ0KGwvbSk7bj1bKG5bMF0rZVswXSkvMiwoblsxXStlWzFdKS8yXSx0PVsodFswXStpWzBdKS8yLCh0WzFdK2lbMV0pLzJdLHIoZipoKX14PW51bGwsdShuLHQpLGEocCl9ZnVuY3Rpb24gZigpe2lmKFhvLmV2ZW50LnRvdWNoZXMubGVuZ3RoKXtmb3IodmFyIHQ9WG8uZXZlbnQuY2hhbmdlZFRvdWNoZXMsZT0wLHI9dC5sZW5ndGg7cj5lOysrZSlkZWxldGUgdlt0W2VdLmlkZW50aWZpZXJdO2Zvcih2YXIgdSBpbiB2KXJldHVybiB2b2lkIG4oKX1iLm9uKE0sbnVsbCkub24oXyxudWxsKSx3Lm9uKEEscykub24oTCxsKSxrKCksYyhwKX12YXIgaCxnPXRoaXMscD1ULm9mKGcsYXJndW1lbnRzKSx2PXt9LG09MCx5PVhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzWzBdLmlkZW50aWZpZXIsTT0idG91Y2htb3ZlLnpvb20tIit5LF89InRvdWNoZW5kLnpvb20tIit5LGI9WG8uc2VsZWN0KEdvKS5vbihNLGkpLm9uKF8sZiksdz1Yby5zZWxlY3QoZykub24oQSxudWxsKS5vbihMLGUpLGs9TygpO1UuY2FsbChnKSxlKCksbyhwKX1mdW5jdGlvbiBmKCl7dmFyIG49VC5vZih0aGlzLGFyZ3VtZW50cyk7bT9jbGVhclRpbWVvdXQobSk6KFUuY2FsbCh0aGlzKSxvKG4pKSxtPXNldFRpbWVvdXQoZnVuY3Rpb24oKXttPW51bGwsYyhuKX0sNTApLGQoKTt2YXIgZT12fHxYby5tb3VzZSh0aGlzKTtwfHwocD10KGUpKSxyKE1hdGgucG93KDIsLjAwMipSYSgpKSpTLmspLHUoZSxwKSxhKG4pfWZ1bmN0aW9uIGgoKXtwPW51bGx9ZnVuY3Rpb24gZygpe3ZhciBuPVQub2YodGhpcyxhcmd1bWVudHMpLGU9WG8ubW91c2UodGhpcyksaT10KGUpLHM9TWF0aC5sb2coUy5rKS9NYXRoLkxOMjtvKG4pLHIoTWF0aC5wb3coMixYby5ldmVudC5zaGlmdEtleT9NYXRoLmNlaWwocyktMTpNYXRoLmZsb29yKHMpKzEpKSx1KGUsaSksYShuKSxjKG4pfXZhciBwLHYsbSx4LE0sXyxiLHcsUz17eDowLHk6MCxrOjF9LGs9Wzk2MCw1MDBdLEU9RGEsQT0ibW91c2Vkb3duLnpvb20iLEM9Im1vdXNlbW92ZS56b29tIixOPSJtb3VzZXVwLnpvb20iLEw9InRvdWNoc3RhcnQuem9vbSIsVD15KG4sInpvb21zdGFydCIsInpvb20iLCJ6b29tZW5kIik7cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49VC5vZih0aGlzLGFyZ3VtZW50cyksdD1TO2tzP1hvLnNlbGVjdCh0aGlzKS50cmFuc2l0aW9uKCkuZWFjaCgic3RhcnQuem9vbSIsZnVuY3Rpb24oKXtTPXRoaXMuX19jaGFydF9ffHx7eDowLHk6MCxrOjF9LG8obil9KS50d2Vlbigiem9vbTp6b29tIixmdW5jdGlvbigpe3ZhciBlPWtbMF0scj1rWzFdLHU9ZS8yLGk9ci8yLG89WG8uaW50ZXJwb2xhdGVab29tKFsodS1TLngpL1MuaywoaS1TLnkpL1MuayxlL1Mua10sWyh1LXQueCkvdC5rLChpLXQueSkvdC5rLGUvdC5rXSk7cmV0dXJuIGZ1bmN0aW9uKHQpe3ZhciByPW8odCksYz1lL3JbMl07dGhpcy5fX2NoYXJ0X189Uz17eDp1LXJbMF0qYyx5OmktclsxXSpjLGs6Y30sYShuKX19KS5lYWNoKCJlbmQuem9vbSIsZnVuY3Rpb24oKXtjKG4pfSk6KHRoaXMuX19jaGFydF9fPVMsbyhuKSxhKG4pLGMobikpfSl9LG4udHJhbnNsYXRlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhTPXt4Oit0WzBdLHk6K3RbMV0sazpTLmt9LGkoKSxuKTpbUy54LFMueV19LG4uc2NhbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KFM9e3g6Uy54LHk6Uy55LGs6K3R9LGkoKSxuKTpTLmt9LG4uc2NhbGVFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KEU9bnVsbD09dD9EYTpbK3RbMF0sK3RbMV1dLG4pOkV9LG4uY2VudGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PXQmJlsrdFswXSwrdFsxXV0sbik6dn0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhrPXQmJlsrdFswXSwrdFsxXV0sbik6a30sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhfPXQsTT10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6X30sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh3PXQsYj10LmNvcHkoKSxTPXt4OjAseTowLGs6MX0sbik6d30sWG8ucmViaW5kKG4sVCwib24iKX07dmFyIFJhLERhPVswLDEvMF0sUGE9Im9ud2hlZWwiaW4gV28/KFJhPWZ1bmN0aW9uKCl7cmV0dXJuLVhvLmV2ZW50LmRlbHRhWSooWG8uZXZlbnQuZGVsdGFNb2RlPzEyMDoxKX0sIndoZWVsIik6Im9ubW91c2V3aGVlbCJpbiBXbz8oUmE9ZnVuY3Rpb24oKXtyZXR1cm4gWG8uZXZlbnQud2hlZWxEZWx0YX0sIm1vdXNld2hlZWwiKTooUmE9ZnVuY3Rpb24oKXtyZXR1cm4tWG8uZXZlbnQuZGV0YWlsfSwiTW96TW91c2VQaXhlbFNjcm9sbCIpO0cucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucmdiKCkrIiJ9LFhvLmhzbD1mdW5jdGlvbihuLHQsZSl7cmV0dXJuIDE9PT1hcmd1bWVudHMubGVuZ3RoP24gaW5zdGFuY2VvZiBRP0sobi5oLG4ucyxuLmwpOmR0KCIiK24sbXQsSyk6SygrbiwrdCwrZSl9O3ZhciBVYT1RLnByb3RvdHlwZT1uZXcgRztVYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSksSyh0aGlzLmgsdGhpcy5zLHRoaXMubC9uKX0sVWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiBuPU1hdGgucG93KC43LGFyZ3VtZW50cy5sZW5ndGg/bjoxKSxLKHRoaXMuaCx0aGlzLnMsbip0aGlzLmwpfSxVYS5yZ2I9ZnVuY3Rpb24oKXtyZXR1cm4gbnQodGhpcy5oLHRoaXMucyx0aGlzLmwpfSxYby5oY2w9ZnVuY3Rpb24obix0LGUpe3JldHVybiAxPT09YXJndW1lbnRzLmxlbmd0aD9uIGluc3RhbmNlb2YgZXQ/dHQobi5oLG4uYyxuLmwpOm4gaW5zdGFuY2VvZiBpdD9hdChuLmwsbi5hLG4uYik6YXQoKG49eXQoKG49WG8ucmdiKG4pKS5yLG4uZyxuLmIpKS5sLG4uYSxuLmIpOnR0KCtuLCt0LCtlKX07dmFyIGphPWV0LnByb3RvdHlwZT1uZXcgRztqYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdHQodGhpcy5oLHRoaXMuYyxNYXRoLm1pbigxMDAsdGhpcy5sK0hhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0samEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiB0dCh0aGlzLmgsdGhpcy5jLE1hdGgubWF4KDAsdGhpcy5sLUhhKihhcmd1bWVudHMubGVuZ3RoP246MSkpKX0samEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIHJ0KHRoaXMuaCx0aGlzLmMsdGhpcy5sKS5yZ2IoKX0sWG8ubGFiPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/biBpbnN0YW5jZW9mIGl0P3V0KG4ubCxuLmEsbi5iKTpuIGluc3RhbmNlb2YgZXQ/cnQobi5sLG4uYyxuLmgpOnl0KChuPVhvLnJnYihuKSkucixuLmcsbi5iKTp1dCgrbiwrdCwrZSl9O3ZhciBIYT0xOCxGYT0uOTUwNDcsT2E9MSxZYT0xLjA4ODgzLElhPWl0LnByb3RvdHlwZT1uZXcgRztJYS5icmlnaHRlcj1mdW5jdGlvbihuKXtyZXR1cm4gdXQoTWF0aC5taW4oMTAwLHRoaXMubCtIYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sSWEuZGFya2VyPWZ1bmN0aW9uKG4pe3JldHVybiB1dChNYXRoLm1heCgwLHRoaXMubC1IYSooYXJndW1lbnRzLmxlbmd0aD9uOjEpKSx0aGlzLmEsdGhpcy5iKX0sSWEucmdiPWZ1bmN0aW9uKCl7cmV0dXJuIG90KHRoaXMubCx0aGlzLmEsdGhpcy5iKX0sWG8ucmdiPWZ1bmN0aW9uKG4sdCxlKXtyZXR1cm4gMT09PWFyZ3VtZW50cy5sZW5ndGg/biBpbnN0YW5jZW9mIHB0P2d0KG4ucixuLmcsbi5iKTpkdCgiIituLGd0LG50KTpndCh+fm4sfn50LH5+ZSl9O3ZhciBaYT1wdC5wcm90b3R5cGU9bmV3IEc7WmEuYnJpZ2h0ZXI9ZnVuY3Rpb24obil7bj1NYXRoLnBvdyguNyxhcmd1bWVudHMubGVuZ3RoP246MSk7dmFyIHQ9dGhpcy5yLGU9dGhpcy5nLHI9dGhpcy5iLHU9MzA7cmV0dXJuIHR8fGV8fHI/KHQmJnU+dCYmKHQ9dSksZSYmdT5lJiYoZT11KSxyJiZ1PnImJihyPXUpLGd0KE1hdGgubWluKDI1NSx+fih0L24pKSxNYXRoLm1pbigyNTUsfn4oZS9uKSksTWF0aC5taW4oMjU1LH5+KHIvbikpKSk6Z3QodSx1LHUpfSxaYS5kYXJrZXI9ZnVuY3Rpb24obil7cmV0dXJuIG49TWF0aC5wb3coLjcsYXJndW1lbnRzLmxlbmd0aD9uOjEpLGd0KH5+KG4qdGhpcy5yKSx+fihuKnRoaXMuZyksfn4obip0aGlzLmIpKX0sWmEuaHNsPWZ1bmN0aW9uKCl7cmV0dXJuIG10KHRoaXMucix0aGlzLmcsdGhpcy5iKX0sWmEudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iIyIrdnQodGhpcy5yKSt2dCh0aGlzLmcpK3Z0KHRoaXMuYil9O3ZhciBWYT1Yby5tYXAoe2FsaWNlYmx1ZToxNTc5MjM4MyxhbnRpcXVld2hpdGU6MTY0NDQzNzUsYXF1YTo2NTUzNSxhcXVhbWFyaW5lOjgzODg1NjQsYXp1cmU6MTU3OTQxNzUsYmVpZ2U6MTYxMTkyNjAsYmlzcXVlOjE2NzcwMjQ0LGJsYWNrOjAsYmxhbmNoZWRhbG1vbmQ6MTY3NzIwNDUsYmx1ZToyNTUsYmx1ZXZpb2xldDo5MDU1MjAyLGJyb3duOjEwODI0MjM0LGJ1cmx5d29vZDoxNDU5NjIzMSxjYWRldGJsdWU6NjI2NjUyOCxjaGFydHJldXNlOjgzODgzNTIsY2hvY29sYXRlOjEzNzg5NDcwLGNvcmFsOjE2NzQ0MjcyLGNvcm5mbG93ZXJibHVlOjY1OTE5ODEsY29ybnNpbGs6MTY3NzUzODgsY3JpbXNvbjoxNDQyMzEwMCxjeWFuOjY1NTM1LGRhcmtibHVlOjEzOSxkYXJrY3lhbjozNTcyMyxkYXJrZ29sZGVucm9kOjEyMDkyOTM5LGRhcmtncmF5OjExMTE5MDE3LGRhcmtncmVlbjoyNTYwMCxkYXJrZ3JleToxMTExOTAxNyxkYXJra2hha2k6MTI0MzMyNTksZGFya21hZ2VudGE6OTEwOTY0MyxkYXJrb2xpdmVncmVlbjo1NTk3OTk5LGRhcmtvcmFuZ2U6MTY3NDc1MjAsZGFya29yY2hpZDoxMDA0MDAxMixkYXJrcmVkOjkxMDk1MDQsZGFya3NhbG1vbjoxNTMwODQxMCxkYXJrc2VhZ3JlZW46OTQxOTkxOSxkYXJrc2xhdGVibHVlOjQ3MzQzNDcsZGFya3NsYXRlZ3JheTozMTAwNDk1LGRhcmtzbGF0ZWdyZXk6MzEwMDQ5NSxkYXJrdHVycXVvaXNlOjUyOTQ1LGRhcmt2aW9sZXQ6OTY5OTUzOSxkZWVwcGluazoxNjcxNjk0NyxkZWVwc2t5Ymx1ZTo0OTE1MSxkaW1ncmF5OjY5MDgyNjUsZGltZ3JleTo2OTA4MjY1LGRvZGdlcmJsdWU6MjAwMzE5OSxmaXJlYnJpY2s6MTE2NzQxNDYsZmxvcmFsd2hpdGU6MTY3NzU5MjAsZm9yZXN0Z3JlZW46MjI2Mzg0MixmdWNoc2lhOjE2NzExOTM1LGdhaW5zYm9ybzoxNDQ3NDQ2MCxnaG9zdHdoaXRlOjE2MzE2NjcxLGdvbGQ6MTY3NjY3MjAsZ29sZGVucm9kOjE0MzI5MTIwLGdyYXk6ODQyMTUwNCxncmVlbjozMjc2OCxncmVlbnllbGxvdzoxMTQwMzA1NSxncmV5Ojg0MjE1MDQsaG9uZXlkZXc6MTU3OTQxNjAsaG90cGluazoxNjczODc0MCxpbmRpYW5yZWQ6MTM0NTg1MjQsaW5kaWdvOjQ5MTUzMzAsaXZvcnk6MTY3NzcyMDAsa2hha2k6MTU3ODc2NjAsbGF2ZW5kZXI6MTUxMzI0MTAsbGF2ZW5kZXJibHVzaDoxNjc3MzM2NSxsYXduZ3JlZW46ODE5MDk3NixsZW1vbmNoaWZmb246MTY3NzU4ODUsbGlnaHRibHVlOjExMzkzMjU0LGxpZ2h0Y29yYWw6MTU3NjE1MzYsbGlnaHRjeWFuOjE0NzQ1NTk5LGxpZ2h0Z29sZGVucm9keWVsbG93OjE2NDQ4MjEwLGxpZ2h0Z3JheToxMzg4MjMyMyxsaWdodGdyZWVuOjk0OTgyNTYsbGlnaHRncmV5OjEzODgyMzIzLGxpZ2h0cGluazoxNjc1ODQ2NSxsaWdodHNhbG1vbjoxNjc1Mjc2MixsaWdodHNlYWdyZWVuOjIxNDI4OTAsbGlnaHRza3libHVlOjg5MDAzNDYsbGlnaHRzbGF0ZWdyYXk6NzgzMzc1MyxsaWdodHNsYXRlZ3JleTo3ODMzNzUzLGxpZ2h0c3RlZWxibHVlOjExNTg0NzM0LGxpZ2h0eWVsbG93OjE2Nzc3MTg0LGxpbWU6NjUyODAsbGltZWdyZWVuOjMzMjkzMzAsbGluZW46MTY0NDU2NzAsbWFnZW50YToxNjcxMTkzNSxtYXJvb246ODM4ODYwOCxtZWRpdW1hcXVhbWFyaW5lOjY3MzczMjIsbWVkaXVtYmx1ZToyMDUsbWVkaXVtb3JjaGlkOjEyMjExNjY3LG1lZGl1bXB1cnBsZTo5NjYyNjgzLG1lZGl1bXNlYWdyZWVuOjM5NzgwOTcsbWVkaXVtc2xhdGVibHVlOjgwODc3OTAsbWVkaXVtc3ByaW5nZ3JlZW46NjQxNTQsbWVkaXVtdHVycXVvaXNlOjQ3NzIzMDAsbWVkaXVtdmlvbGV0cmVkOjEzMDQ3MTczLG1pZG5pZ2h0Ymx1ZToxNjQ0OTEyLG1pbnRjcmVhbToxNjEyMTg1MCxtaXN0eXJvc2U6MTY3NzAyNzMsbW9jY2FzaW46MTY3NzAyMjksbmF2YWpvd2hpdGU6MTY3Njg2ODUsbmF2eToxMjgsb2xkbGFjZToxNjY0MzU1OCxvbGl2ZTo4NDIxMzc2LG9saXZlZHJhYjo3MDQ4NzM5LG9yYW5nZToxNjc1MzkyMCxvcmFuZ2VyZWQ6MTY3MjkzNDQsb3JjaGlkOjE0MzE1NzM0LHBhbGVnb2xkZW5yb2Q6MTU2NTcxMzAscGFsZWdyZWVuOjEwMDI1ODgwLHBhbGV0dXJxdW9pc2U6MTE1Mjk5NjYscGFsZXZpb2xldHJlZDoxNDM4MTIwMyxwYXBheWF3aGlwOjE2NzczMDc3LHBlYWNocHVmZjoxNjc2NzY3MyxwZXJ1OjEzNDY4OTkxLHBpbms6MTY3NjEwMzUscGx1bToxNDUyNDYzNyxwb3dkZXJibHVlOjExNTkxOTEwLHB1cnBsZTo4Mzg4NzM2LHJlZDoxNjcxMTY4MCxyb3N5YnJvd246MTIzNTc1MTkscm95YWxibHVlOjQyODY5NDUsc2FkZGxlYnJvd246OTEyNzE4NyxzYWxtb246MTY0MTY4ODIsc2FuZHlicm93bjoxNjAzMjg2NCxzZWFncmVlbjozMDUwMzI3LHNlYXNoZWxsOjE2Nzc0NjM4LHNpZW5uYToxMDUwNjc5NyxzaWx2ZXI6MTI2MzIyNTYsc2t5Ymx1ZTo4OTAwMzMxLHNsYXRlYmx1ZTo2OTcwMDYxLHNsYXRlZ3JheTo3MzcyOTQ0LHNsYXRlZ3JleTo3MzcyOTQ0LHNub3c6MTY3NzU5MzAsc3ByaW5nZ3JlZW46NjU0MDcsc3RlZWxibHVlOjQ2MjA5ODAsdGFuOjEzODA4NzgwLHRlYWw6MzI4OTYsdGhpc3RsZToxNDIwNDg4OCx0b21hdG86MTY3MzcwOTUsdHVycXVvaXNlOjQyNTE4NTYsdmlvbGV0OjE1NjMxMDg2LHdoZWF0OjE2MTEzMzMxLHdoaXRlOjE2Nzc3MjE1LHdoaXRlc21va2U6MTYxMTkyODUseWVsbG93OjE2Nzc2OTYwLHllbGxvd2dyZWVuOjEwMTQ1MDc0fSk7VmEuZm9yRWFjaChmdW5jdGlvbihuLHQpe1ZhLnNldChuLGZ0KHQpKX0pLFhvLmZ1bmN0b3I9X3QsWG8ueGhyPXd0KGJ0KSxYby5kc3Y9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKG4sZSxpKXthcmd1bWVudHMubGVuZ3RoPDMmJihpPWUsZT1udWxsKTt2YXIgbz1TdChuLHQsbnVsbD09ZT9yOnUoZSksaSk7cmV0dXJuIG8ucm93PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP28ucmVzcG9uc2UobnVsbD09KGU9bik/cjp1KG4pKTplfSxvfWZ1bmN0aW9uIHIobil7cmV0dXJuIGUucGFyc2Uobi5yZXNwb25zZVRleHQpfWZ1bmN0aW9uIHUobil7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBlLnBhcnNlKHQucmVzcG9uc2VUZXh0LG4pfX1mdW5jdGlvbiBpKHQpe3JldHVybiB0Lm1hcChvKS5qb2luKG4pfWZ1bmN0aW9uIG8obil7cmV0dXJuIGEudGVzdChuKT8nIicrbi5yZXBsYWNlKC9cIi9nLCciIicpKyciJzpufXZhciBhPW5ldyBSZWdFeHAoJ1siJytuKyJcbl0iKSxjPW4uY2hhckNvZGVBdCgwKTtyZXR1cm4gZS5wYXJzZT1mdW5jdGlvbihuLHQpe3ZhciByO3JldHVybiBlLnBhcnNlUm93cyhuLGZ1bmN0aW9uKG4sZSl7aWYocilyZXR1cm4gcihuLGUtMSk7dmFyIHU9bmV3IEZ1bmN0aW9uKCJkIiwicmV0dXJuIHsiK24ubWFwKGZ1bmN0aW9uKG4sdCl7cmV0dXJuIEpTT04uc3RyaW5naWZ5KG4pKyI6IGRbIit0KyJdIn0pLmpvaW4oIiwiKSsifSIpO3I9dD9mdW5jdGlvbihuLGUpe3JldHVybiB0KHUobiksZSl9OnV9KX0sZS5wYXJzZVJvd3M9ZnVuY3Rpb24obix0KXtmdW5jdGlvbiBlKCl7aWYobD49cylyZXR1cm4gbztpZih1KXJldHVybiB1PSExLGk7dmFyIHQ9bDtpZigzND09PW4uY2hhckNvZGVBdCh0KSl7Zm9yKHZhciBlPXQ7ZSsrPHM7KWlmKDM0PT09bi5jaGFyQ29kZUF0KGUpKXtpZigzNCE9PW4uY2hhckNvZGVBdChlKzEpKWJyZWFrOysrZX1sPWUrMjt2YXIgcj1uLmNoYXJDb2RlQXQoZSsxKTtyZXR1cm4gMTM9PT1yPyh1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGUrMikmJisrbCk6MTA9PT1yJiYodT0hMCksbi5zdWJzdHJpbmcodCsxLGUpLnJlcGxhY2UoLyIiL2csJyInKX1mb3IoO3M+bDspe3ZhciByPW4uY2hhckNvZGVBdChsKyspLGE9MTtpZigxMD09PXIpdT0hMDtlbHNlIGlmKDEzPT09cil1PSEwLDEwPT09bi5jaGFyQ29kZUF0KGwpJiYoKytsLCsrYSk7ZWxzZSBpZihyIT09Yyljb250aW51ZTtyZXR1cm4gbi5zdWJzdHJpbmcodCxsLWEpfXJldHVybiBuLnN1YnN0cmluZyh0KX1mb3IodmFyIHIsdSxpPXt9LG89e30sYT1bXSxzPW4ubGVuZ3RoLGw9MCxmPTA7KHI9ZSgpKSE9PW87KXtmb3IodmFyIGg9W107ciE9PWkmJnIhPT1vOyloLnB1c2gocikscj1lKCk7KCF0fHwoaD10KGgsZisrKSkpJiZhLnB1c2goaCl9cmV0dXJuIGF9LGUuZm9ybWF0PWZ1bmN0aW9uKHQpe2lmKEFycmF5LmlzQXJyYXkodFswXSkpcmV0dXJuIGUuZm9ybWF0Um93cyh0KTt2YXIgcj1uZXcgbCx1PVtdO3JldHVybiB0LmZvckVhY2goZnVuY3Rpb24obil7Zm9yKHZhciB0IGluIG4pci5oYXModCl8fHUucHVzaChyLmFkZCh0KSl9KSxbdS5tYXAobykuam9pbihuKV0uY29uY2F0KHQubWFwKGZ1bmN0aW9uKHQpe3JldHVybiB1Lm1hcChmdW5jdGlvbihuKXtyZXR1cm4gbyh0W25dKX0pLmpvaW4obil9KSkuam9pbigiXG4iKX0sZS5mb3JtYXRSb3dzPWZ1bmN0aW9uKG4pe3JldHVybiBuLm1hcChpKS5qb2luKCJcbiIpfSxlfSxYby5jc3Y9WG8uZHN2KCIsIiwidGV4dC9jc3YiKSxYby50c3Y9WG8uZHN2KCIJIiwidGV4dC90YWItc2VwYXJhdGVkLXZhbHVlcyIpO3ZhciBYYSwkYSxCYSxXYSxKYSxHYT1Hb1toKEdvLCJyZXF1ZXN0QW5pbWF0aW9uRnJhbWUiKV18fGZ1bmN0aW9uKG4pe3NldFRpbWVvdXQobiwxNyl9O1hvLnRpbWVyPWZ1bmN0aW9uKG4sdCxlKXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoOzI+ciYmKHQ9MCksMz5yJiYoZT1EYXRlLm5vdygpKTt2YXIgdT1lK3QsaT17YzpuLHQ6dSxmOiExLG46bnVsbH07JGE/JGEubj1pOlhhPWksJGE9aSxCYXx8KFdhPWNsZWFyVGltZW91dChXYSksQmE9MSxHYShFdCkpfSxYby50aW1lci5mbHVzaD1mdW5jdGlvbigpe0F0KCksQ3QoKX0sWG8ucm91bmQ9ZnVuY3Rpb24obix0KXtyZXR1cm4gdD9NYXRoLnJvdW5kKG4qKHQ9TWF0aC5wb3coMTAsdCkpKS90Ok1hdGgucm91bmQobil9O3ZhciBLYT1bInkiLCJ6IiwiYSIsImYiLCJwIiwibiIsIlx4YjUiLCJtIiwiIiwiayIsIk0iLCJHIiwiVCIsIlAiLCJFIiwiWiIsIlkiXS5tYXAoTHQpO1hvLmZvcm1hdFByZWZpeD1mdW5jdGlvbihuLHQpe3ZhciBlPTA7cmV0dXJuIG4mJigwPm4mJihuKj0tMSksdCYmKG49WG8ucm91bmQobixOdChuLHQpKSksZT0xK01hdGguZmxvb3IoMWUtMTIrTWF0aC5sb2cobikvTWF0aC5MTjEwKSxlPU1hdGgubWF4KC0yNCxNYXRoLm1pbigyNCwzKk1hdGguZmxvb3IoKDA+PWU/ZSsxOmUtMSkvMykpKSksS2FbOCtlLzNdfTt2YXIgUWE9Lyg/OihbXntdKT8oWzw+PV5dKSk/KFsrXC0gXSk/KFskI10pPygwKT8oXGQrKT8oLCk/KFwuLT9cZCspPyhbYS16JV0pPy9pLG5jPVhvLm1hcCh7YjpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygyKX0sYzpmdW5jdGlvbihuKXtyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShuKX0sbzpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZyg4KX0seDpmdW5jdGlvbihuKXtyZXR1cm4gbi50b1N0cmluZygxNil9LFg6ZnVuY3Rpb24obil7cmV0dXJuIG4udG9TdHJpbmcoMTYpLnRvVXBwZXJDYXNlKCl9LGc6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b1ByZWNpc2lvbih0KX0sZTpmdW5jdGlvbihuLHQpe3JldHVybiBuLnRvRXhwb25lbnRpYWwodCl9LGY6ZnVuY3Rpb24obix0KXtyZXR1cm4gbi50b0ZpeGVkKHQpfSxyOmZ1bmN0aW9uKG4sdCl7cmV0dXJuKG49WG8ucm91bmQobixOdChuLHQpKSkudG9GaXhlZChNYXRoLm1heCgwLE1hdGgubWluKDIwLE50KG4qKDErMWUtMTUpLHQpKSkpfX0pLHRjPVhvLnRpbWU9e30sZWM9RGF0ZTt6dC5wcm90b3R5cGU9e2dldERhdGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0RhdGUoKX0sZ2V0RGF5OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENEYXkoKX0sZ2V0RnVsbFllYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ0Z1bGxZZWFyKCl9LGdldEhvdXJzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENIb3VycygpfSxnZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFVUQ01pbGxpc2Vjb25kcygpfSxnZXRNaW51dGVzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNaW51dGVzKCl9LGdldE1vbnRoOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENNb250aCgpfSxnZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuXy5nZXRVVENTZWNvbmRzKCl9LGdldFRpbWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fLmdldFRpbWUoKX0sZ2V0VGltZXpvbmVPZmZzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sdmFsdWVPZjpmdW5jdGlvbigpe3JldHVybiB0aGlzLl8udmFsdWVPZigpfSxzZXREYXRlOmZ1bmN0aW9uKCl7cmMuc2V0VVRDRGF0ZS5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0RGF5OmZ1bmN0aW9uKCl7cmMuc2V0VVRDRGF5LmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRGdWxsWWVhcjpmdW5jdGlvbigpe3JjLnNldFVUQ0Z1bGxZZWFyLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRIb3VyczpmdW5jdGlvbigpe3JjLnNldFVUQ0hvdXJzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNaWxsaXNlY29uZHM6ZnVuY3Rpb24oKXtyYy5zZXRVVENNaWxsaXNlY29uZHMuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9LHNldE1pbnV0ZXM6ZnVuY3Rpb24oKXtyYy5zZXRVVENNaW51dGVzLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRNb250aDpmdW5jdGlvbigpe3JjLnNldFVUQ01vbnRoLmFwcGx5KHRoaXMuXyxhcmd1bWVudHMpfSxzZXRTZWNvbmRzOmZ1bmN0aW9uKCl7cmMuc2V0VVRDU2Vjb25kcy5hcHBseSh0aGlzLl8sYXJndW1lbnRzKX0sc2V0VGltZTpmdW5jdGlvbigpe3JjLnNldFRpbWUuYXBwbHkodGhpcy5fLGFyZ3VtZW50cyl9fTt2YXIgcmM9RGF0ZS5wcm90b3R5cGU7dGMueWVhcj1SdChmdW5jdGlvbihuKXtyZXR1cm4gbj10Yy5kYXkobiksbi5zZXRNb250aCgwLDEpLG59LGZ1bmN0aW9uKG4sdCl7bi5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCkrdCl9LGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldEZ1bGxZZWFyKCl9KSx0Yy55ZWFycz10Yy55ZWFyLnJhbmdlLHRjLnllYXJzLnV0Yz10Yy55ZWFyLnV0Yy5yYW5nZSx0Yy5kYXk9UnQoZnVuY3Rpb24obil7dmFyIHQ9bmV3IGVjKDJlMywwKTtyZXR1cm4gdC5zZXRGdWxsWWVhcihuLmdldEZ1bGxZZWFyKCksbi5nZXRNb250aCgpLG4uZ2V0RGF0ZSgpKSx0fSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0RGF0ZSgpLTF9KSx0Yy5kYXlzPXRjLmRheS5yYW5nZSx0Yy5kYXlzLnV0Yz10Yy5kYXkudXRjLnJhbmdlLHRjLmRheU9mWWVhcj1mdW5jdGlvbihuKXt2YXIgdD10Yy55ZWFyKG4pO3JldHVybiBNYXRoLmZsb29yKChuLXQtNmU0KihuLmdldFRpbWV6b25lT2Zmc2V0KCktdC5nZXRUaW1lem9uZU9mZnNldCgpKSkvODY0ZTUpfSxbInN1bmRheSIsIm1vbmRheSIsInR1ZXNkYXkiLCJ3ZWRuZXNkYXkiLCJ0aHVyc2RheSIsImZyaWRheSIsInNhdHVyZGF5Il0uZm9yRWFjaChmdW5jdGlvbihuLHQpe3Q9Ny10O3ZhciBlPXRjW25dPVJ0KGZ1bmN0aW9uKG4pe3JldHVybihuPXRjLmRheShuKSkuc2V0RGF0ZShuLmdldERhdGUoKS0obi5nZXREYXkoKSt0KSU3KSxufSxmdW5jdGlvbihuLHQpe24uc2V0RGF0ZShuLmdldERhdGUoKSs3Kk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXt2YXIgZT10Yy55ZWFyKG4pLmdldERheSgpO3JldHVybiBNYXRoLmZsb29yKCh0Yy5kYXlPZlllYXIobikrKGUrdCklNykvNyktKGUhPT10KX0pO3RjW24rInMiXT1lLnJhbmdlLHRjW24rInMiXS51dGM9ZS51dGMucmFuZ2UsdGNbbisiT2ZZZWFyIl09ZnVuY3Rpb24obil7dmFyIGU9dGMueWVhcihuKS5nZXREYXkoKTtyZXR1cm4gTWF0aC5mbG9vcigodGMuZGF5T2ZZZWFyKG4pKyhlK3QpJTcpLzcpfX0pLHRjLndlZWs9dGMuc3VuZGF5LHRjLndlZWtzPXRjLnN1bmRheS5yYW5nZSx0Yy53ZWVrcy51dGM9dGMuc3VuZGF5LnV0Yy5yYW5nZSx0Yy53ZWVrT2ZZZWFyPXRjLnN1bmRheU9mWWVhcjt2YXIgdWM9eyItIjoiIixfOiIgIiwwOiIwIn0saWM9L15ccypcZCsvLG9jPS9eJS87WG8ubG9jYWxlPWZ1bmN0aW9uKG4pe3JldHVybntudW1iZXJGb3JtYXQ6VHQobiksdGltZUZvcm1hdDpQdChuKX19O3ZhciBhYz1Yby5sb2NhbGUoe2RlY2ltYWw6Ii4iLHRob3VzYW5kczoiLCIsZ3JvdXBpbmc6WzNdLGN1cnJlbmN5OlsiJCIsIiJdLGRhdGVUaW1lOiIlYSAlYiAlZSAlWCAlWSIsZGF0ZToiJW0vJWQvJVkiLHRpbWU6IiVIOiVNOiVTIixwZXJpb2RzOlsiQU0iLCJQTSJdLGRheXM6WyJTdW5kYXkiLCJNb25kYXkiLCJUdWVzZGF5IiwiV2VkbmVzZGF5IiwiVGh1cnNkYXkiLCJGcmlkYXkiLCJTYXR1cmRheSJdLHNob3J0RGF5czpbIlN1biIsIk1vbiIsIlR1ZSIsIldlZCIsIlRodSIsIkZyaSIsIlNhdCJdLG1vbnRoczpbIkphbnVhcnkiLCJGZWJydWFyeSIsIk1hcmNoIiwiQXByaWwiLCJNYXkiLCJKdW5lIiwiSnVseSIsIkF1Z3VzdCIsIlNlcHRlbWJlciIsIk9jdG9iZXIiLCJOb3ZlbWJlciIsIkRlY2VtYmVyIl0sc2hvcnRNb250aHM6WyJKYW4iLCJGZWIiLCJNYXIiLCJBcHIiLCJNYXkiLCJKdW4iLCJKdWwiLCJBdWciLCJTZXAiLCJPY3QiLCJOb3YiLCJEZWMiXX0pO1hvLmZvcm1hdD1hYy5udW1iZXJGb3JtYXQsWG8uZ2VvPXt9LHJlLnByb3RvdHlwZT17czowLHQ6MCxhZGQ6ZnVuY3Rpb24obil7dWUobix0aGlzLnQsY2MpLHVlKGNjLnMsdGhpcy5zLHRoaXMpLHRoaXMucz90aGlzLnQrPWNjLnQ6dGhpcy5zPWNjLnR9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zPXRoaXMudD0wfSx2YWx1ZU9mOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuc319O3ZhciBjYz1uZXcgcmU7WG8uZ2VvLnN0cmVhbT1mdW5jdGlvbihuLHQpe24mJnNjLmhhc093blByb3BlcnR5KG4udHlwZSk/c2Nbbi50eXBlXShuLHQpOmllKG4sdCl9O3ZhciBzYz17RmVhdHVyZTpmdW5jdGlvbihuLHQpe2llKG4uZ2VvbWV0cnksdCl9LEZlYXR1cmVDb2xsZWN0aW9uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uZmVhdHVyZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylpZShlW3JdLmdlb21ldHJ5LHQpfX0sbGM9e1NwaGVyZTpmdW5jdGlvbihuLHQpe3Quc3BoZXJlKCl9LFBvaW50OmZ1bmN0aW9uKG4sdCl7bj1uLmNvb3JkaW5hdGVzLHQucG9pbnQoblswXSxuWzFdLG5bMl0pfSxNdWx0aVBvaW50OmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OyluPWVbcl0sdC5wb2ludChuWzBdLG5bMV0sblsyXSl9LExpbmVTdHJpbmc6ZnVuY3Rpb24obix0KXtvZShuLmNvb3JkaW5hdGVzLHQsMCl9LE11bHRpTGluZVN0cmluZzpmdW5jdGlvbihuLHQpe2Zvcih2YXIgZT1uLmNvb3JkaW5hdGVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspb2UoZVtyXSx0LDApfSxQb2x5Z29uOmZ1bmN0aW9uKG4sdCl7YWUobi5jb29yZGluYXRlcyx0KX0sTXVsdGlQb2x5Z29uOmZ1bmN0aW9uKG4sdCl7Zm9yKHZhciBlPW4uY29vcmRpbmF0ZXMscj0tMSx1PWUubGVuZ3RoOysrcjx1OylhZShlW3JdLHQpfSxHZW9tZXRyeUNvbGxlY3Rpb246ZnVuY3Rpb24obix0KXtmb3IodmFyIGU9bi5nZW9tZXRyaWVzLHI9LTEsdT1lLmxlbmd0aDsrK3I8dTspaWUoZVtyXSx0KX19O1hvLmdlby5hcmVhPWZ1bmN0aW9uKG4pe3JldHVybiBmYz0wLFhvLmdlby5zdHJlYW0obixnYyksZmN9O3ZhciBmYyxoYz1uZXcgcmUsZ2M9e3NwaGVyZTpmdW5jdGlvbigpe2ZjKz00KlNhfSxwb2ludDpnLGxpbmVTdGFydDpnLGxpbmVFbmQ6Zyxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtoYy5yZXNldCgpLGdjLmxpbmVTdGFydD1jZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3ZhciBuPTIqaGM7ZmMrPTA+bj80KlNhK246bixnYy5saW5lU3RhcnQ9Z2MubGluZUVuZD1nYy5wb2ludD1nfX07WG8uZ2VvLmJvdW5kcz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obix0KXt4LnB1c2goTT1bbD1uLGg9bl0pLGY+dCYmKGY9dCksdD5nJiYoZz10KX1mdW5jdGlvbiB0KHQsZSl7dmFyIHI9c2UoW3QqTmEsZSpOYV0pO2lmKG0pe3ZhciB1PWZlKG0sciksaT1bdVsxXSwtdVswXSwwXSxvPWZlKGksdSk7cGUobyksbz12ZShvKTt2YXIgYz10LXAscz1jPjA/MTotMSx2PW9bMF0qTGEqcyxkPW9hKGMpPjE4MDtpZihkXih2PnMqcCYmcyp0PnYpKXt2YXIgeT1vWzFdKkxhO3k+ZyYmKGc9eSl9ZWxzZSBpZih2PSh2KzM2MCklMzYwLTE4MCxkXih2PnMqcCYmcyp0PnYpKXt2YXIgeT0tb1sxXSpMYTtmPnkmJihmPXkpfWVsc2UgZj5lJiYoZj1lKSxlPmcmJihnPWUpO2Q/cD50P2EobCx0KT5hKGwsaCkmJihoPXQpOmEodCxoKT5hKGwsaCkmJihsPXQpOmg+PWw/KGw+dCYmKGw9dCksdD5oJiYoaD10KSk6dD5wP2EobCx0KT5hKGwsaCkmJihoPXQpOmEodCxoKT5hKGwsaCkmJihsPXQpfWVsc2Ugbih0LGUpO209cixwPXR9ZnVuY3Rpb24gZSgpe18ucG9pbnQ9dH1mdW5jdGlvbiByKCl7TVswXT1sLE1bMV09aCxfLnBvaW50PW4sbT1udWxsfWZ1bmN0aW9uIHUobixlKXtpZihtKXt2YXIgcj1uLXA7eSs9b2Eocik+MTgwP3IrKHI+MD8zNjA6LTM2MCk6cn1lbHNlIHY9bixkPWU7Z2MucG9pbnQobixlKSx0KG4sZSl9ZnVuY3Rpb24gaSgpe2djLmxpbmVTdGFydCgpfWZ1bmN0aW9uIG8oKXt1KHYsZCksZ2MubGluZUVuZCgpLG9hKHkpPkFhJiYobD0tKGg9MTgwKSksTVswXT1sLE1bMV09aCxtPW51bGx9ZnVuY3Rpb24gYShuLHQpe3JldHVybih0LT1uKTwwP3QrMzYwOnR9ZnVuY3Rpb24gYyhuLHQpe3JldHVybiBuWzBdLXRbMF19ZnVuY3Rpb24gcyhuLHQpe3JldHVybiB0WzBdPD10WzFdP3RbMF08PW4mJm48PXRbMV06bjx0WzBdfHx0WzFdPG59dmFyIGwsZixoLGcscCx2LGQsbSx5LHgsTSxfPXtwb2ludDpuLGxpbmVTdGFydDplLGxpbmVFbmQ6cixwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXtfLnBvaW50PXUsXy5saW5lU3RhcnQ9aSxfLmxpbmVFbmQ9byx5PTAsZ2MucG9seWdvblN0YXJ0KCl9LHBvbHlnb25FbmQ6ZnVuY3Rpb24oKXtnYy5wb2x5Z29uRW5kKCksXy5wb2ludD1uLF8ubGluZVN0YXJ0PWUsXy5saW5lRW5kPXIsMD5oYz8obD0tKGg9MTgwKSxmPS0oZz05MCkpOnk+QWE/Zz05MDotQWE+eSYmKGY9LTkwKSxNWzBdPWwsTVsxXT1ofX07cmV0dXJuIGZ1bmN0aW9uKG4pe2c9aD0tKGw9Zj0xLzApLHg9W10sWG8uZ2VvLnN0cmVhbShuLF8pO3ZhciB0PXgubGVuZ3RoO2lmKHQpe3guc29ydChjKTtmb3IodmFyIGUscj0xLHU9eFswXSxpPVt1XTt0PnI7KytyKWU9eFtyXSxzKGVbMF0sdSl8fHMoZVsxXSx1KT8oYSh1WzBdLGVbMV0pPmEodVswXSx1WzFdKSYmKHVbMV09ZVsxXSksYShlWzBdLHVbMV0pPmEodVswXSx1WzFdKSYmKHVbMF09ZVswXSkpOmkucHVzaCh1PWUpO2Zvcih2YXIgbyxlLHA9LTEvMCx0PWkubGVuZ3RoLTEscj0wLHU9aVt0XTt0Pj1yO3U9ZSwrK3IpZT1pW3JdLChvPWEodVsxXSxlWzBdKSk+cCYmKHA9byxsPWVbMF0saD11WzFdKX1yZXR1cm4geD1NPW51bGwsMS8wPT09bHx8MS8wPT09Zj9bWzAvMCwwLzBdLFswLzAsMC8wXV06W1tsLGZdLFtoLGddXX19KCksWG8uZ2VvLmNlbnRyb2lkPWZ1bmN0aW9uKG4pe3BjPXZjPWRjPW1jPXljPXhjPU1jPV9jPWJjPXdjPVNjPTAsWG8uZ2VvLnN0cmVhbShuLGtjKTt2YXIgdD1iYyxlPXdjLHI9U2MsdT10KnQrZSplK3IqcjtyZXR1cm4gQ2E+dSYmKHQ9eGMsZT1NYyxyPV9jLEFhPnZjJiYodD1kYyxlPW1jLHI9eWMpLHU9dCp0K2UqZStyKnIsQ2E+dSk/WzAvMCwwLzBdOltNYXRoLmF0YW4yKGUsdCkqTGEsWChyL01hdGguc3FydCh1KSkqTGFdfTt2YXIgcGMsdmMsZGMsbWMseWMseGMsTWMsX2MsYmMsd2MsU2Msa2M9e3NwaGVyZTpnLHBvaW50Om1lLGxpbmVTdGFydDp4ZSxsaW5lRW5kOk1lLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe2tjLmxpbmVTdGFydD1fZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe2tjLmxpbmVTdGFydD14ZX19LEVjPUVlKGJlLFRlLHplLFstU2EsLVNhLzJdKSxBYz0xZTk7WG8uZ2VvLmNsaXBFeHRlbnQ9ZnVuY3Rpb24oKXt2YXIgbix0LGUscix1LGksbz17c3RyZWFtOmZ1bmN0aW9uKG4pe3JldHVybiB1JiYodS52YWxpZD0hMSksdT1pKG4pLHUudmFsaWQ9ITAsdX0sZXh0ZW50OmZ1bmN0aW9uKGEpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPVBlKG49K2FbMF1bMF0sdD0rYVswXVsxXSxlPSthWzFdWzBdLHI9K2FbMV1bMV0pLHUmJih1LnZhbGlkPSExLHU9bnVsbCksbyk6W1tuLHRdLFtlLHJdXX19O3JldHVybiBvLmV4dGVudChbWzAsMF0sWzk2MCw1MDBdXSl9LChYby5nZW8uY29uaWNFcXVhbEFyZWE9ZnVuY3Rpb24oKXtyZXR1cm4gamUoSGUpfSkucmF3PUhlLFhvLmdlby5hbGJlcnM9ZnVuY3Rpb24oKXtyZXR1cm4gWG8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFs5NiwwXSkuY2VudGVyKFstLjYsMzguN10pLnBhcmFsbGVscyhbMjkuNSw0NS41XSkuc2NhbGUoMTA3MCl9LFhvLmdlby5hbGJlcnNVc2E9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3ZhciBpPW5bMF0sbz1uWzFdO3JldHVybiB0PW51bGwsZShpLG8pLHR8fChyKGksbyksdCl8fHUoaSxvKSx0fXZhciB0LGUscix1LGk9WG8uZ2VvLmFsYmVycygpLG89WG8uZ2VvLmNvbmljRXF1YWxBcmVhKCkucm90YXRlKFsxNTQsMF0pLmNlbnRlcihbLTIsNTguNV0pLnBhcmFsbGVscyhbNTUsNjVdKSxhPVhvLmdlby5jb25pY0VxdWFsQXJlYSgpLnJvdGF0ZShbMTU3LDBdKS5jZW50ZXIoWy0zLDE5LjldKS5wYXJhbGxlbHMoWzgsMThdKSxjPXtwb2ludDpmdW5jdGlvbihuLGUpe3Q9W24sZV19fTtyZXR1cm4gbi5pbnZlcnQ9ZnVuY3Rpb24obil7dmFyIHQ9aS5zY2FsZSgpLGU9aS50cmFuc2xhdGUoKSxyPShuWzBdLWVbMF0pL3QsdT0oblsxXS1lWzFdKS90O3JldHVybih1Pj0uMTImJi4yMzQ+dSYmcj49LS40MjUmJi0uMjE0PnI/bzp1Pj0uMTY2JiYuMjM0PnUmJnI+PS0uMjE0JiYtLjExNT5yP2E6aSkuaW52ZXJ0KG4pfSxuLnN0cmVhbT1mdW5jdGlvbihuKXt2YXIgdD1pLnN0cmVhbShuKSxlPW8uc3RyZWFtKG4pLHI9YS5zdHJlYW0obik7cmV0dXJue3BvaW50OmZ1bmN0aW9uKG4sdSl7dC5wb2ludChuLHUpLGUucG9pbnQobix1KSxyLnBvaW50KG4sdSl9LHNwaGVyZTpmdW5jdGlvbigpe3Quc3BoZXJlKCksZS5zcGhlcmUoKSxyLnNwaGVyZSgpfSxsaW5lU3RhcnQ6ZnVuY3Rpb24oKXt0LmxpbmVTdGFydCgpLGUubGluZVN0YXJ0KCksci5saW5lU3RhcnQoKX0sbGluZUVuZDpmdW5jdGlvbigpe3QubGluZUVuZCgpLGUubGluZUVuZCgpLHIubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0LnBvbHlnb25TdGFydCgpLGUucG9seWdvblN0YXJ0KCksci5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3QucG9seWdvbkVuZCgpLGUucG9seWdvbkVuZCgpLHIucG9seWdvbkVuZCgpfX19LG4ucHJlY2lzaW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnByZWNpc2lvbih0KSxvLnByZWNpc2lvbih0KSxhLnByZWNpc2lvbih0KSxuKTppLnByZWNpc2lvbigpfSxuLnNjYWxlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpLnNjYWxlKHQpLG8uc2NhbGUoLjM1KnQpLGEuc2NhbGUodCksbi50cmFuc2xhdGUoaS50cmFuc2xhdGUoKSkpOmkuc2NhbGUoKX0sbi50cmFuc2xhdGU9ZnVuY3Rpb24odCl7aWYoIWFyZ3VtZW50cy5sZW5ndGgpcmV0dXJuIGkudHJhbnNsYXRlKCk7dmFyIHM9aS5zY2FsZSgpLGw9K3RbMF0sZj0rdFsxXTtyZXR1cm4gZT1pLnRyYW5zbGF0ZSh0KS5jbGlwRXh0ZW50KFtbbC0uNDU1KnMsZi0uMjM4KnNdLFtsKy40NTUqcyxmKy4yMzgqc11dKS5zdHJlYW0oYykucG9pbnQscj1vLnRyYW5zbGF0ZShbbC0uMzA3KnMsZisuMjAxKnNdKS5jbGlwRXh0ZW50KFtbbC0uNDI1KnMrQWEsZisuMTIqcytBYV0sW2wtLjIxNCpzLUFhLGYrLjIzNCpzLUFhXV0pLnN0cmVhbShjKS5wb2ludCx1PWEudHJhbnNsYXRlKFtsLS4yMDUqcyxmKy4yMTIqc10pLmNsaXBFeHRlbnQoW1tsLS4yMTQqcytBYSxmKy4xNjYqcytBYV0sW2wtLjExNSpzLUFhLGYrLjIzNCpzLUFhXV0pLnN0cmVhbShjKS5wb2ludCxufSxuLnNjYWxlKDEwNzApfTt2YXIgQ2MsTmMsTGMsVGMscWMsemMsUmM9e3BvaW50OmcsbGluZVN0YXJ0OmcsbGluZUVuZDpnLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe05jPTAsUmMubGluZVN0YXJ0PUZlfSxwb2x5Z29uRW5kOmZ1bmN0aW9uKCl7UmMubGluZVN0YXJ0PVJjLmxpbmVFbmQ9UmMucG9pbnQ9ZyxDYys9b2EoTmMvMil9fSxEYz17cG9pbnQ6T2UsbGluZVN0YXJ0OmcsbGluZUVuZDpnLHBvbHlnb25TdGFydDpnLHBvbHlnb25FbmQ6Z30sUGM9e3BvaW50OlplLGxpbmVTdGFydDpWZSxsaW5lRW5kOlhlLHBvbHlnb25TdGFydDpmdW5jdGlvbigpe1BjLmxpbmVTdGFydD0kZX0scG9seWdvbkVuZDpmdW5jdGlvbigpe1BjLnBvaW50PVplLFBjLmxpbmVTdGFydD1WZSxQYy5saW5lRW5kPVhlfX07WG8uZ2VvLnBhdGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBuJiYoImZ1bmN0aW9uIj09dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoK2EuYXBwbHkodGhpcyxhcmd1bWVudHMpKSxvJiZvLnZhbGlkfHwobz11KGkpKSxYby5nZW8uc3RyZWFtKG4sbykpLGkucmVzdWx0KCl9ZnVuY3Rpb24gdCgpe3JldHVybiBvPW51bGwsbn12YXIgZSxyLHUsaSxvLGE9NC41O3JldHVybiBuLmFyZWE9ZnVuY3Rpb24obil7cmV0dXJuIENjPTAsWG8uZ2VvLnN0cmVhbShuLHUoUmMpKSxDY30sbi5jZW50cm9pZD1mdW5jdGlvbihuKXtyZXR1cm4gZGM9bWM9eWM9eGM9TWM9X2M9YmM9d2M9U2M9MCxYby5nZW8uc3RyZWFtKG4sdShQYykpLFNjP1tiYy9TYyx3Yy9TY106X2M/W3hjL19jLE1jL19jXTp5Yz9bZGMveWMsbWMveWNdOlswLzAsMC8wXX0sbi5ib3VuZHM9ZnVuY3Rpb24obil7cmV0dXJuIHFjPXpjPS0oTGM9VGM9MS8wKSxYby5nZW8uc3RyZWFtKG4sdShEYykpLFtbTGMsVGNdLFtxYyx6Y11dfSxuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9KGU9bik/bi5zdHJlYW18fEplKG4pOmJ0LHQoKSk6ZX0sbi5jb250ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPW51bGw9PShyPW4pP25ldyBZZTpuZXcgQmUobiksImZ1bmN0aW9uIiE9dHlwZW9mIGEmJmkucG9pbnRSYWRpdXMoYSksdCgpKTpyfSxuLnBvaW50UmFkaXVzPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6KGkucG9pbnRSYWRpdXMoK3QpLCt0KSxuKTphfSxuLnByb2plY3Rpb24oWG8uZ2VvLmFsYmVyc1VzYSgpKS5jb250ZXh0KG51bGwpfSxYby5nZW8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe3JldHVybntzdHJlYW06ZnVuY3Rpb24odCl7dmFyIGU9bmV3IEdlKHQpO2Zvcih2YXIgciBpbiBuKWVbcl09bltyXTtyZXR1cm4gZX19fSxHZS5wcm90b3R5cGU9e3BvaW50OmZ1bmN0aW9uKG4sdCl7dGhpcy5zdHJlYW0ucG9pbnQobix0KX0sc3BoZXJlOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0uc3BoZXJlKCl9LGxpbmVTdGFydDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLmxpbmVTdGFydCgpfSxsaW5lRW5kOmZ1bmN0aW9uKCl7dGhpcy5zdHJlYW0ubGluZUVuZCgpfSxwb2x5Z29uU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbS5wb2x5Z29uU3RhcnQoKX0scG9seWdvbkVuZDpmdW5jdGlvbigpe3RoaXMuc3RyZWFtLnBvbHlnb25FbmQoKX19LFhvLmdlby5wcm9qZWN0aW9uPVFlLFhvLmdlby5wcm9qZWN0aW9uTXV0YXRvcj1uciwoWG8uZ2VvLmVxdWlyZWN0YW5ndWxhcj1mdW5jdGlvbigpe3JldHVybiBRZShlcil9KS5yYXc9ZXIuaW52ZXJ0PWVyLFhvLmdlby5yb3RhdGlvbj1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KHQpe3JldHVybiB0PW4odFswXSpOYSx0WzFdKk5hKSx0WzBdKj1MYSx0WzFdKj1MYSx0fXJldHVybiBuPXVyKG5bMF0lMzYwKk5hLG5bMV0qTmEsbi5sZW5ndGg+Mj9uWzJdKk5hOjApLHQuaW52ZXJ0PWZ1bmN0aW9uKHQpe3JldHVybiB0PW4uaW52ZXJ0KHRbMF0qTmEsdFsxXSpOYSksdFswXSo9TGEsdFsxXSo9TGEsdH0sdH0scnIuaW52ZXJ0PWVyLFhvLmdlby5jaXJjbGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49ImZ1bmN0aW9uIj09dHlwZW9mIHI/ci5hcHBseSh0aGlzLGFyZ3VtZW50cyk6cix0PXVyKC1uWzBdKk5hLC1uWzFdKk5hLDApLmludmVydCx1PVtdO3JldHVybiBlKG51bGwsbnVsbCwxLHtwb2ludDpmdW5jdGlvbihuLGUpe3UucHVzaChuPXQobixlKSksblswXSo9TGEsblsxXSo9TGF9fSkse3R5cGU6IlBvbHlnb24iLGNvb3JkaW5hdGVzOlt1XX19dmFyIHQsZSxyPVswLDBdLHU9NjtyZXR1cm4gbi5vcmlnaW49ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9dCxuKTpyfSxuLmFuZ2xlPWZ1bmN0aW9uKHIpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPWNyKCh0PStyKSpOYSx1Kk5hKSxuKTp0fSxuLnByZWNpc2lvbj1mdW5jdGlvbihyKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1jcih0Kk5hLCh1PStyKSpOYSksbik6dX0sbi5hbmdsZSg5MCl9LFhvLmdlby5kaXN0YW5jZT1mdW5jdGlvbihuLHQpe3ZhciBlLHI9KHRbMF0tblswXSkqTmEsdT1uWzFdKk5hLGk9dFsxXSpOYSxvPU1hdGguc2luKHIpLGE9TWF0aC5jb3MociksYz1NYXRoLnNpbih1KSxzPU1hdGguY29zKHUpLGw9TWF0aC5zaW4oaSksZj1NYXRoLmNvcyhpKTtyZXR1cm4gTWF0aC5hdGFuMihNYXRoLnNxcnQoKGU9ZipvKSplKyhlPXMqbC1jKmYqYSkqZSksYypsK3MqZiphKX0sWG8uZ2VvLmdyYXRpY3VsZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oKXtyZXR1cm57dHlwZToiTXVsdGlMaW5lU3RyaW5nIixjb29yZGluYXRlczp0KCl9fWZ1bmN0aW9uIHQoKXtyZXR1cm4gWG8ucmFuZ2UoTWF0aC5jZWlsKGkvZCkqZCx1LGQpLm1hcChoKS5jb25jYXQoWG8ucmFuZ2UoTWF0aC5jZWlsKHMvbSkqbSxjLG0pLm1hcChnKSkuY29uY2F0KFhvLnJhbmdlKE1hdGguY2VpbChyL3ApKnAsZSxwKS5maWx0ZXIoZnVuY3Rpb24obil7cmV0dXJuIG9hKG4lZCk+QWF9KS5tYXAobCkpLmNvbmNhdChYby5yYW5nZShNYXRoLmNlaWwoYS92KSp2LG8sdikuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBvYShuJW0pPkFhfSkubWFwKGYpKX12YXIgZSxyLHUsaSxvLGEsYyxzLGwsZixoLGcscD0xMCx2PXAsZD05MCxtPTM2MCx5PTIuNTtyZXR1cm4gbi5saW5lcz1mdW5jdGlvbigpe3JldHVybiB0KCkubWFwKGZ1bmN0aW9uKG4pe3JldHVybnt0eXBlOiJMaW5lU3RyaW5nIixjb29yZGluYXRlczpufX0pfSxuLm91dGxpbmU9ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiUG9seWdvbiIsY29vcmRpbmF0ZXM6W2goaSkuY29uY2F0KGcoYykuc2xpY2UoMSksaCh1KS5yZXZlcnNlKCkuc2xpY2UoMSksZyhzKS5yZXZlcnNlKCkuc2xpY2UoMSkpXX19LG4uZXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JFeHRlbnQodCkubWlub3JFeHRlbnQodCk6bi5taW5vckV4dGVudCgpfSxuLm1ham9yRXh0ZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0WzBdWzBdLHU9K3RbMV1bMF0scz0rdFswXVsxXSxjPSt0WzFdWzFdLGk+dSYmKHQ9aSxpPXUsdT10KSxzPmMmJih0PXMscz1jLGM9dCksbi5wcmVjaXNpb24oeSkpOltbaSxzXSxbdSxjXV19LG4ubWlub3JFeHRlbnQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9K3RbMF1bMF0sZT0rdFsxXVswXSxhPSt0WzBdWzFdLG89K3RbMV1bMV0scj5lJiYodD1yLHI9ZSxlPXQpLGE+byYmKHQ9YSxhPW8sbz10KSxuLnByZWNpc2lvbih5KSk6W1tyLGFdLFtlLG9dXX0sbi5zdGVwPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP24ubWFqb3JTdGVwKHQpLm1pbm9yU3RlcCh0KTpuLm1pbm9yU3RlcCgpfSxuLm1ham9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZD0rdFswXSxtPSt0WzFdLG4pOltkLG1dfSxuLm1pbm9yU3RlcD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocD0rdFswXSx2PSt0WzFdLG4pOltwLHZdfSxuLnByZWNpc2lvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oeT0rdCxsPWxyKGEsbyw5MCksZj1mcihyLGUseSksaD1scihzLGMsOTApLGc9ZnIoaSx1LHkpLG4pOnl9LG4ubWFqb3JFeHRlbnQoW1stMTgwLC05MCtBYV0sWzE4MCw5MC1BYV1dKS5taW5vckV4dGVudChbWy0xODAsLTgwLUFhXSxbMTgwLDgwK0FhXV0pfSxYby5nZW8uZ3JlYXRBcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7cmV0dXJue3R5cGU6IkxpbmVTdHJpbmciLGNvb3JkaW5hdGVzOlt0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKV19fXZhciB0LGUscj1ocix1PWdyO3JldHVybiBuLmRpc3RhbmNlPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLmdlby5kaXN0YW5jZSh0fHxyLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxlfHx1LmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9LG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPWUsdD0iZnVuY3Rpb24iPT10eXBlb2YgZT9udWxsOmUsbik6cn0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P251bGw6dCxuKTp1fSxuLnByZWNpc2lvbj1mdW5jdGlvbigpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP246MH0sbn0sWG8uZ2VvLmludGVycG9sYXRlPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIHByKG5bMF0qTmEsblsxXSpOYSx0WzBdKk5hLHRbMV0qTmEpfSxYby5nZW8ubGVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBVYz0wLFhvLmdlby5zdHJlYW0obixqYyksVWN9O3ZhciBVYyxqYz17c3BoZXJlOmcscG9pbnQ6ZyxsaW5lU3RhcnQ6dnIsbGluZUVuZDpnLHBvbHlnb25TdGFydDpnLHBvbHlnb25FbmQ6Z30sSGM9ZHIoZnVuY3Rpb24obil7cmV0dXJuIE1hdGguc3FydCgyLygxK24pKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hc2luKG4vMil9KTsoWG8uZ2VvLmF6aW11dGhhbEVxdWFsQXJlYT1mdW5jdGlvbigpe3JldHVybiBRZShIYyl9KS5yYXc9SGM7dmFyIEZjPWRyKGZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguYWNvcyhuKTtyZXR1cm4gdCYmdC9NYXRoLnNpbih0KX0sYnQpOyhYby5nZW8uYXppbXV0aGFsRXF1aWRpc3RhbnQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWUoRmMpfSkucmF3PUZjLChYby5nZW8uY29uaWNDb25mb3JtYWw9ZnVuY3Rpb24oKXtyZXR1cm4gamUobXIpfSkucmF3PW1yLChYby5nZW8uY29uaWNFcXVpZGlzdGFudD1mdW5jdGlvbigpe3JldHVybiBqZSh5cil9KS5yYXc9eXI7dmFyIE9jPWRyKGZ1bmN0aW9uKG4pe3JldHVybiAxL259LE1hdGguYXRhbik7KFhvLmdlby5nbm9tb25pYz1mdW5jdGlvbigpe3JldHVybiBRZShPYyl9KS5yYXc9T2MseHIuaW52ZXJ0PWZ1bmN0aW9uKG4sdCl7cmV0dXJuW24sMipNYXRoLmF0YW4oTWF0aC5leHAodCkpLUVhXX0sKFhvLmdlby5tZXJjYXRvcj1mdW5jdGlvbigpe3JldHVybiBNcih4cil9KS5yYXc9eHI7dmFyIFljPWRyKGZ1bmN0aW9uKCl7cmV0dXJuIDF9LE1hdGguYXNpbik7KFhvLmdlby5vcnRob2dyYXBoaWM9ZnVuY3Rpb24oKXtyZXR1cm4gUWUoWWMpfSkucmF3PVljO3ZhciBJYz1kcihmdW5jdGlvbihuKXtyZXR1cm4gMS8oMStuKX0sZnVuY3Rpb24obil7cmV0dXJuIDIqTWF0aC5hdGFuKG4pfSk7KFhvLmdlby5zdGVyZW9ncmFwaGljPWZ1bmN0aW9uKCl7cmV0dXJuIFFlKEljKX0pLnJhdz1JYyxfci5pbnZlcnQ9ZnVuY3Rpb24obix0KXtyZXR1cm5bLXQsMipNYXRoLmF0YW4oTWF0aC5leHAobikpLUVhXX0sKFhvLmdlby50cmFuc3ZlcnNlTWVyY2F0b3I9ZnVuY3Rpb24oKXt2YXIgbj1NcihfciksdD1uLmNlbnRlcixlPW4ucm90YXRlO3JldHVybiBuLmNlbnRlcj1mdW5jdGlvbihuKXtyZXR1cm4gbj90KFstblsxXSxuWzBdXSk6KG49dCgpLFstblsxXSxuWzBdXSl9LG4ucm90YXRlPWZ1bmN0aW9uKG4pe3JldHVybiBuP2UoW25bMF0sblsxXSxuLmxlbmd0aD4yP25bMl0rOTA6OTBdKToobj1lKCksW25bMF0sblsxXSxuWzJdLTkwXSl9LG4ucm90YXRlKFswLDBdKX0pLnJhdz1fcixYby5nZW9tPXt9LFhvLmdlb20uaHVsbD1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe2lmKG4ubGVuZ3RoPDMpcmV0dXJuW107dmFyIHQsdT1fdChlKSxpPV90KHIpLG89bi5sZW5ndGgsYT1bXSxjPVtdO2Zvcih0PTA7bz50O3QrKylhLnB1c2goWyt1LmNhbGwodGhpcyxuW3RdLHQpLCtpLmNhbGwodGhpcyxuW3RdLHQpLHRdKTtmb3IoYS5zb3J0KGtyKSx0PTA7bz50O3QrKyljLnB1c2goW2FbdF1bMF0sLWFbdF1bMV1dKTt2YXIgcz1TcihhKSxsPVNyKGMpLGY9bFswXT09PXNbMF0saD1sW2wubGVuZ3RoLTFdPT09c1tzLmxlbmd0aC0xXSxnPVtdO2Zvcih0PXMubGVuZ3RoLTE7dD49MDstLXQpZy5wdXNoKG5bYVtzW3RdXVsyXV0pO2Zvcih0PStmO3Q8bC5sZW5ndGgtaDsrK3QpZy5wdXNoKG5bYVtsW3RdXVsyXV0pO3JldHVybiBnfXZhciBlPWJyLHI9d3I7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/dChuKToodC54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPW4sdCk6ZX0sdC55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sdCk6cn0sdCl9LFhvLmdlb20ucG9seWdvbj1mdW5jdGlvbihuKXtyZXR1cm4gZmEobixaYyksbn07dmFyIFpjPVhvLmdlb20ucG9seWdvbi5wcm90b3R5cGU9W107WmMuYXJlYT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PS0xLGU9dGhpcy5sZW5ndGgscj10aGlzW2UtMV0sdT0wOysrdDxlOyluPXIscj10aGlzW3RdLHUrPW5bMV0qclswXS1uWzBdKnJbMV07cmV0dXJuLjUqdX0sWmMuY2VudHJvaWQ9ZnVuY3Rpb24obil7dmFyIHQsZSxyPS0xLHU9dGhpcy5sZW5ndGgsaT0wLG89MCxhPXRoaXNbdS0xXTtmb3IoYXJndW1lbnRzLmxlbmd0aHx8KG49LTEvKDYqdGhpcy5hcmVhKCkpKTsrK3I8dTspdD1hLGE9dGhpc1tyXSxlPXRbMF0qYVsxXS1hWzBdKnRbMV0saSs9KHRbMF0rYVswXSkqZSxvKz0odFsxXSthWzFdKSplO3JldHVybltpKm4sbypuXX0sWmMuY2xpcD1mdW5jdGlvbihuKXtmb3IodmFyIHQsZSxyLHUsaSxvLGE9Q3IobiksYz0tMSxzPXRoaXMubGVuZ3RoLUNyKHRoaXMpLGw9dGhpc1tzLTFdOysrYzxzOyl7Zm9yKHQ9bi5zbGljZSgpLG4ubGVuZ3RoPTAsdT10aGlzW2NdLGk9dFsocj10Lmxlbmd0aC1hKS0xXSxlPS0xOysrZTxyOylvPXRbZV0sRXIobyxsLHUpPyhFcihpLGwsdSl8fG4ucHVzaChBcihpLG8sbCx1KSksbi5wdXNoKG8pKTpFcihpLGwsdSkmJm4ucHVzaChBcihpLG8sbCx1KSksaT1vO2EmJm4ucHVzaChuWzBdKSxsPXV9cmV0dXJuIG59O3ZhciBWYyxYYywkYyxCYyxXYyxKYz1bXSxHYz1bXTtQci5wcm90b3R5cGUucHJlcGFyZT1mdW5jdGlvbigpe2Zvcih2YXIgbix0PXRoaXMuZWRnZXMsZT10Lmxlbmd0aDtlLS07KW49dFtlXS5lZGdlLG4uYiYmbi5hfHx0LnNwbGljZShlLDEpO3JldHVybiB0LnNvcnQoanIpLHQubGVuZ3RofSxCci5wcm90b3R5cGU9e3N0YXJ0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWRnZS5sPT09dGhpcy5zaXRlP3RoaXMuZWRnZS5hOnRoaXMuZWRnZS5ifSxlbmQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5lZGdlLmw9PT10aGlzLnNpdGU/dGhpcy5lZGdlLmI6dGhpcy5lZGdlLmF9fSxXci5wcm90b3R5cGU9e2luc2VydDpmdW5jdGlvbihuLHQpe3ZhciBlLHIsdTtpZihuKXtpZih0LlA9bix0Lk49bi5OLG4uTiYmKG4uTi5QPXQpLG4uTj10LG4uUil7Zm9yKG49bi5SO24uTDspbj1uLkw7bi5MPXR9ZWxzZSBuLlI9dDtlPW59ZWxzZSB0aGlzLl8/KG49UXIodGhpcy5fKSx0LlA9bnVsbCx0Lk49bixuLlA9bi5MPXQsZT1uKToodC5QPXQuTj1udWxsLHRoaXMuXz10LGU9bnVsbCk7Zm9yKHQuTD10LlI9bnVsbCx0LlU9ZSx0LkM9ITAsbj10O2UmJmUuQzspcj1lLlUsZT09PXIuTD8odT1yLlIsdSYmdS5DPyhlLkM9dS5DPSExLHIuQz0hMCxuPXIpOihuPT09ZS5SJiYoR3IodGhpcyxlKSxuPWUsZT1uLlUpLGUuQz0hMSxyLkM9ITAsS3IodGhpcyxyKSkpOih1PXIuTCx1JiZ1LkM/KGUuQz11LkM9ITEsci5DPSEwLG49cik6KG49PT1lLkwmJihLcih0aGlzLGUpLG49ZSxlPW4uVSksZS5DPSExLHIuQz0hMCxHcih0aGlzLHIpKSksZT1uLlU7dGhpcy5fLkM9ITF9LHJlbW92ZTpmdW5jdGlvbihuKXtuLk4mJihuLk4uUD1uLlApLG4uUCYmKG4uUC5OPW4uTiksbi5OPW4uUD1udWxsO3ZhciB0LGUscix1PW4uVSxpPW4uTCxvPW4uUjtpZihlPWk/bz9RcihvKTppOm8sdT91Lkw9PT1uP3UuTD1lOnUuUj1lOnRoaXMuXz1lLGkmJm8/KHI9ZS5DLGUuQz1uLkMsZS5MPWksaS5VPWUsZSE9PW8/KHU9ZS5VLGUuVT1uLlUsbj1lLlIsdS5MPW4sZS5SPW8sby5VPWUpOihlLlU9dSx1PWUsbj1lLlIpKToocj1uLkMsbj1lKSxuJiYobi5VPXUpLCFyKXtpZihuJiZuLkMpcmV0dXJuIG4uQz0hMSx2b2lkIDA7ZG97aWYobj09PXRoaXMuXylicmVhaztpZihuPT09dS5MKXtpZih0PXUuUix0LkMmJih0LkM9ITEsdS5DPSEwLEdyKHRoaXMsdSksdD11LlIpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuUiYmdC5SLkN8fCh0LkwuQz0hMSx0LkM9ITAsS3IodGhpcyx0KSx0PXUuUiksdC5DPXUuQyx1LkM9dC5SLkM9ITEsR3IodGhpcyx1KSxuPXRoaXMuXzticmVha319ZWxzZSBpZih0PXUuTCx0LkMmJih0LkM9ITEsdS5DPSEwLEtyKHRoaXMsdSksdD11LkwpLHQuTCYmdC5MLkN8fHQuUiYmdC5SLkMpe3QuTCYmdC5MLkN8fCh0LlIuQz0hMSx0LkM9ITAsR3IodGhpcyx0KSx0PXUuTCksdC5DPXUuQyx1LkM9dC5MLkM9ITEsS3IodGhpcyx1KSxuPXRoaXMuXzticmVha310LkM9ITAsbj11LHU9dS5VfXdoaWxlKCFuLkMpO24mJihuLkM9ITEpfX19LFhvLmdlb20udm9yb25vaT1mdW5jdGlvbihuKXtmdW5jdGlvbiB0KG4pe3ZhciB0PW5ldyBBcnJheShuLmxlbmd0aCkscj1hWzBdWzBdLHU9YVswXVsxXSxpPWFbMV1bMF0sbz1hWzFdWzFdO3JldHVybiBudShlKG4pLGEpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxhKXt2YXIgYz1lLmVkZ2VzLHM9ZS5zaXRlLGw9dFthXT1jLmxlbmd0aD9jLm1hcChmdW5jdGlvbihuKXt2YXIgdD1uLnN0YXJ0KCk7cmV0dXJuW3QueCx0LnldfSk6cy54Pj1yJiZzLng8PWkmJnMueT49dSYmcy55PD1vP1tbcixvXSxbaSxvXSxbaSx1XSxbcix1XV06W107bC5wb2ludD1uW2FdfSksdH1mdW5jdGlvbiBlKG4pe3JldHVybiBuLm1hcChmdW5jdGlvbihuLHQpe3JldHVybnt4Ok1hdGgucm91bmQoaShuLHQpL0FhKSpBYSx5Ok1hdGgucm91bmQobyhuLHQpL0FhKSpBYSxpOnR9fSl9dmFyIHI9YnIsdT13cixpPXIsbz11LGE9S2M7cmV0dXJuIG4/dChuKToodC5saW5rcz1mdW5jdGlvbihuKXtyZXR1cm4gbnUoZShuKSkuZWRnZXMuZmlsdGVyKGZ1bmN0aW9uKG4pe3JldHVybiBuLmwmJm4ucn0pLm1hcChmdW5jdGlvbih0KXtyZXR1cm57c291cmNlOm5bdC5sLmldLHRhcmdldDpuW3Quci5pXX19KX0sdC50cmlhbmdsZXM9ZnVuY3Rpb24obil7dmFyIHQ9W107cmV0dXJuIG51KGUobikpLmNlbGxzLmZvckVhY2goZnVuY3Rpb24oZSxyKXtmb3IodmFyIHUsaSxvPWUuc2l0ZSxhPWUuZWRnZXMuc29ydChqciksYz0tMSxzPWEubGVuZ3RoLGw9YVtzLTFdLmVkZ2UsZj1sLmw9PT1vP2wucjpsLmw7KytjPHM7KXU9bCxpPWYsbD1hW2NdLmVkZ2UsZj1sLmw9PT1vP2wucjpsLmwscjxpLmkmJnI8Zi5pJiZldShvLGksZik8MCYmdC5wdXNoKFtuW3JdLG5baS5pXSxuW2YuaV1dKX0pLHR9LHQueD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaT1fdChyPW4pLHQpOnJ9LHQueT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1fdCh1PW4pLHQpOnV9LHQuY2xpcEV4dGVudD1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1udWxsPT1uP0tjOm4sdCk6YT09PUtjP251bGw6YX0sdC5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP3QuY2xpcEV4dGVudChuJiZbWzAsMF0sbl0pOmE9PT1LYz9udWxsOmEmJmFbMV19LHQpfTt2YXIgS2M9W1stMWU2LC0xZTZdLFsxZTYsMWU2XV07WG8uZ2VvbS5kZWxhdW5heT1mdW5jdGlvbihuKXtyZXR1cm4gWG8uZ2VvbS52b3Jvbm9pKCkudHJpYW5nbGVzKG4pfSxYby5nZW9tLnF1YWR0cmVlPWZ1bmN0aW9uKG4sdCxlLHIsdSl7ZnVuY3Rpb24gaShuKXtmdW5jdGlvbiBpKG4sdCxlLHIsdSxpLG8sYSl7aWYoIWlzTmFOKGUpJiYhaXNOYU4ocikpaWYobi5sZWFmKXt2YXIgYz1uLngsbD1uLnk7aWYobnVsbCE9YylpZihvYShjLWUpK29hKGwtcik8LjAxKXMobix0LGUscix1LGksbyxhKTtlbHNle3ZhciBmPW4ucG9pbnQ7bi54PW4ueT1uLnBvaW50PW51bGwscyhuLGYsYyxsLHUsaSxvLGEpLHMobix0LGUscix1LGksbyxhKX1lbHNlIG4ueD1lLG4ueT1yLG4ucG9pbnQ9dH1lbHNlIHMobix0LGUscix1LGksbyxhKX1mdW5jdGlvbiBzKG4sdCxlLHIsdSxvLGEsYyl7dmFyIHM9LjUqKHUrYSksbD0uNSoobytjKSxmPWU+PXMsaD1yPj1sLGc9KGg8PDEpK2Y7bi5sZWFmPSExLG49bi5ub2Rlc1tnXXx8KG4ubm9kZXNbZ109aXUoKSksZj91PXM6YT1zLGg/bz1sOmM9bCxpKG4sdCxlLHIsdSxvLGEsYyl9dmFyIGwsZixoLGcscCx2LGQsbSx5LHg9X3QoYSksTT1fdChjKTtpZihudWxsIT10KXY9dCxkPWUsbT1yLHk9dTtlbHNlIGlmKG09eT0tKHY9ZD0xLzApLGY9W10saD1bXSxwPW4ubGVuZ3RoLG8pZm9yKGc9MDtwPmc7KytnKWw9bltnXSxsLng8diYmKHY9bC54KSxsLnk8ZCYmKGQ9bC55KSxsLng+bSYmKG09bC54KSxsLnk+eSYmKHk9bC55KSxmLnB1c2gobC54KSxoLnB1c2gobC55KTtlbHNlIGZvcihnPTA7cD5nOysrZyl7dmFyIF89K3gobD1uW2ddLGcpLGI9K00obCxnKTt2Pl8mJih2PV8pLGQ+YiYmKGQ9YiksXz5tJiYobT1fKSxiPnkmJih5PWIpLGYucHVzaChfKSxoLnB1c2goYil9dmFyIHc9bS12LFM9eS1kO3c+Uz95PWQrdzptPXYrUzt2YXIgaz1pdSgpO2lmKGsuYWRkPWZ1bmN0aW9uKG4pe2koayxuLCt4KG4sKytnKSwrTShuLGcpLHYsZCxtLHkpfSxrLnZpc2l0PWZ1bmN0aW9uKG4pe291KG4sayx2LGQsbSx5KX0sZz0tMSxudWxsPT10KXtmb3IoOysrZzxwOylpKGssbltnXSxmW2ddLGhbZ10sdixkLG0seSk7LS1nfWVsc2Ugbi5mb3JFYWNoKGsuYWRkKTtyZXR1cm4gZj1oPW49bD1udWxsLGt9dmFyIG8sYT1icixjPXdyO3JldHVybihvPWFyZ3VtZW50cy5sZW5ndGgpPyhhPXJ1LGM9dXUsMz09PW8mJih1PWUscj10LGU9dD0wKSxpKG4pKTooaS54PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhhPW4saSk6YX0saS55PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4saSk6Y30saS5leHRlbnQ9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG51bGw9PW4/dD1lPXI9dT1udWxsOih0PStuWzBdWzBdLGU9K25bMF1bMV0scj0rblsxXVswXSx1PStuWzFdWzFdKSxpKTpudWxsPT10P251bGw6W1t0LGVdLFtyLHVdXX0saS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhudWxsPT1uP3Q9ZT1yPXU9bnVsbDoodD1lPTAscj0rblswXSx1PStuWzFdKSxpKTpudWxsPT10P251bGw6W3ItdCx1LWVdfSxpKX0sWG8uaW50ZXJwb2xhdGVSZ2I9YXUsWG8uaW50ZXJwb2xhdGVPYmplY3Q9Y3UsWG8uaW50ZXJwb2xhdGVOdW1iZXI9c3UsWG8uaW50ZXJwb2xhdGVTdHJpbmc9bHU7dmFyIFFjPS9bLStdPyg/OlxkK1wuP1xkKnxcLj9cZCspKD86W2VFXVstK10/XGQrKT8vZztYby5pbnRlcnBvbGF0ZT1mdSxYby5pbnRlcnBvbGF0b3JzPVtmdW5jdGlvbihuLHQpe3ZhciBlPXR5cGVvZiB0O3JldHVybigic3RyaW5nIj09PWU/VmEuaGFzKHQpfHwvXigjfHJnYlwofGhzbFwoKS8udGVzdCh0KT9hdTpsdTp0IGluc3RhbmNlb2YgRz9hdToib2JqZWN0Ij09PWU/QXJyYXkuaXNBcnJheSh0KT9odTpjdTpzdSkobix0KX1dLFhvLmludGVycG9sYXRlQXJyYXk9aHU7dmFyIG5zPWZ1bmN0aW9uKCl7cmV0dXJuIGJ0fSx0cz1Yby5tYXAoe2xpbmVhcjpucyxwb2x5Onh1LHF1YWQ6ZnVuY3Rpb24oKXtyZXR1cm4gZHV9LGN1YmljOmZ1bmN0aW9uKCl7cmV0dXJuIG11fSxzaW46ZnVuY3Rpb24oKXtyZXR1cm4gTXV9LGV4cDpmdW5jdGlvbigpe3JldHVybiBfdX0sY2lyY2xlOmZ1bmN0aW9uKCl7cmV0dXJuIGJ1fSxlbGFzdGljOnd1LGJhY2s6U3UsYm91bmNlOmZ1bmN0aW9uKCl7cmV0dXJuIGt1fX0pLGVzPVhvLm1hcCh7ImluIjpidCxvdXQ6cHUsImluLW91dCI6dnUsIm91dC1pbiI6ZnVuY3Rpb24obil7cmV0dXJuIHZ1KHB1KG4pKX19KTtYby5lYXNlPWZ1bmN0aW9uKG4pe3ZhciB0PW4uaW5kZXhPZigiLSIpLGU9dD49MD9uLnN1YnN0cmluZygwLHQpOm4scj10Pj0wP24uc3Vic3RyaW5nKHQrMSk6ImluIjtyZXR1cm4gZT10cy5nZXQoZSl8fG5zLHI9ZXMuZ2V0KHIpfHxidCxndShyKGUuYXBwbHkobnVsbCwkby5jYWxsKGFyZ3VtZW50cywxKSkpKX0sWG8uaW50ZXJwb2xhdGVIY2w9RXUsWG8uaW50ZXJwb2xhdGVIc2w9QXUsWG8uaW50ZXJwb2xhdGVMYWI9Q3UsWG8uaW50ZXJwb2xhdGVSb3VuZD1OdSxYby50cmFuc2Zvcm09ZnVuY3Rpb24obil7dmFyIHQ9V28uY3JlYXRlRWxlbWVudE5TKFhvLm5zLnByZWZpeC5zdmcsImciKTtyZXR1cm4oWG8udHJhbnNmb3JtPWZ1bmN0aW9uKG4pe2lmKG51bGwhPW4pe3Quc2V0QXR0cmlidXRlKCJ0cmFuc2Zvcm0iLG4pO3ZhciBlPXQudHJhbnNmb3JtLmJhc2VWYWwuY29uc29saWRhdGUoKX1yZXR1cm4gbmV3IEx1KGU/ZS5tYXRyaXg6cnMpfSkobil9LEx1LnByb3RvdHlwZS50b1N0cmluZz1mdW5jdGlvbigpe3JldHVybiJ0cmFuc2xhdGUoIit0aGlzLnRyYW5zbGF0ZSsiKXJvdGF0ZSgiK3RoaXMucm90YXRlKyIpc2tld1goIit0aGlzLnNrZXcrIilzY2FsZSgiK3RoaXMuc2NhbGUrIikifTt2YXIgcnM9e2E6MSxiOjAsYzowLGQ6MSxlOjAsZjowfTtYby5pbnRlcnBvbGF0ZVRyYW5zZm9ybT1SdSxYby5sYXlvdXQ9e30sWG8ubGF5b3V0LmJ1bmRsZT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihuKXtmb3IodmFyIHQ9W10sZT0tMSxyPW4ubGVuZ3RoOysrZTxyOyl0LnB1c2goVXUobltlXSkpO3JldHVybiB0fX0sWG8ubGF5b3V0LmNob3JkPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbigpe3ZhciBuLHMsZixoLGcscD17fSx2PVtdLGQ9WG8ucmFuZ2UoaSksbT1bXTtmb3IoZT1bXSxyPVtdLG49MCxoPS0xOysraDxpOyl7Zm9yKHM9MCxnPS0xOysrZzxpOylzKz11W2hdW2ddO3YucHVzaChzKSxtLnB1c2goWG8ucmFuZ2UoaSkpLG4rPXN9Zm9yKG8mJmQuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiBvKHZbbl0sdlt0XSl9KSxhJiZtLmZvckVhY2goZnVuY3Rpb24obix0KXtuLnNvcnQoZnVuY3Rpb24obixlKXtyZXR1cm4gYSh1W3RdW25dLHVbdF1bZV0pfSl9KSxuPShrYS1sKmkpL24scz0wLGg9LTE7KytoPGk7KXtmb3IoZj1zLGc9LTE7KytnPGk7KXt2YXIgeT1kW2hdLHg9bVt5XVtnXSxNPXVbeV1beF0sXz1zLGI9cys9TSpuO3BbeSsiLSIreF09e2luZGV4Onksc3ViaW5kZXg6eCxzdGFydEFuZ2xlOl8sZW5kQW5nbGU6Yix2YWx1ZTpNfX1yW3ldPXtpbmRleDp5LHN0YXJ0QW5nbGU6ZixlbmRBbmdsZTpzLHZhbHVlOihzLWYpL259LHMrPWx9Zm9yKGg9LTE7KytoPGk7KWZvcihnPWgtMTsrK2c8aTspe3ZhciB3PXBbaCsiLSIrZ10sUz1wW2crIi0iK2hdOyh3LnZhbHVlfHxTLnZhbHVlKSYmZS5wdXNoKHcudmFsdWU8Uy52YWx1ZT97c291cmNlOlMsdGFyZ2V0Ond9Ontzb3VyY2U6dyx0YXJnZXQ6U30pfWMmJnQoKX1mdW5jdGlvbiB0KCl7ZS5zb3J0KGZ1bmN0aW9uKG4sdCl7cmV0dXJuIGMoKG4uc291cmNlLnZhbHVlK24udGFyZ2V0LnZhbHVlKS8yLCh0LnNvdXJjZS52YWx1ZSt0LnRhcmdldC52YWx1ZSkvMil9KX12YXIgZSxyLHUsaSxvLGEsYyxzPXt9LGw9MDtyZXR1cm4gcy5tYXRyaXg9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9KHU9bikmJnUubGVuZ3RoLGU9cj1udWxsLHMpOnV9LHMucGFkZGluZz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD1uLGU9cj1udWxsLHMpOmx9LHMuc29ydEdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obz1uLGU9cj1udWxsLHMpOm99LHMuc29ydFN1Ymdyb3Vwcz1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYT1uLGU9bnVsbCxzKTphfSxzLnNvcnRDaG9yZHM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9bixlJiZ0KCkscyk6Y30scy5jaG9yZHM9ZnVuY3Rpb24oKXtyZXR1cm4gZXx8bigpLGV9LHMuZ3JvdXBzPWZ1bmN0aW9uKCl7cmV0dXJuIHJ8fG4oKSxyfSxzfSxYby5sYXlvdXQuZm9yY2U9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe3JldHVybiBmdW5jdGlvbih0LGUscix1KXtpZih0LnBvaW50IT09bil7dmFyIGk9dC5jeC1uLngsbz10LmN5LW4ueSxhPXUtZSxjPWkqaStvKm87aWYoYz5hKmEvZCl7aWYocD5jKXt2YXIgcz10LmNoYXJnZS9jO24ucHgtPWkqcyxuLnB5LT1vKnN9cmV0dXJuITB9aWYodC5wb2ludCYmYyYmcD5jKXt2YXIgcz10LnBvaW50Q2hhcmdlL2M7bi5weC09aSpzLG4ucHktPW8qc319cmV0dXJuIXQuY2hhcmdlfX1mdW5jdGlvbiB0KG4pe24ucHg9WG8uZXZlbnQueCxuLnB5PVhvLmV2ZW50LnksYS5yZXN1bWUoKX12YXIgZSxyLHUsaSxvLGE9e30sYz1Yby5kaXNwYXRjaCgic3RhcnQiLCJ0aWNrIiwiZW5kIikscz1bMSwxXSxsPS45LGY9dXMsaD1pcyxnPS0zMCxwPW9zLHY9LjEsZD0uNjQsbT1bXSx5PVtdO3JldHVybiBhLnRpY2s9ZnVuY3Rpb24oKXtpZigocio9Ljk5KTwuMDA1KXJldHVybiBjLmVuZCh7dHlwZToiZW5kIixhbHBoYTpyPTB9KSwhMDt2YXIgdCxlLGEsZixoLHAsZCx4LE0sXz1tLmxlbmd0aCxiPXkubGVuZ3RoO2ZvcihlPTA7Yj5lOysrZSlhPXlbZV0sZj1hLnNvdXJjZSxoPWEudGFyZ2V0LHg9aC54LWYueCxNPWgueS1mLnksKHA9eCp4K00qTSkmJihwPXIqaVtlXSooKHA9TWF0aC5zcXJ0KHApKS11W2VdKS9wLHgqPXAsTSo9cCxoLngtPXgqKGQ9Zi53ZWlnaHQvKGgud2VpZ2h0K2Yud2VpZ2h0KSksaC55LT1NKmQsZi54Kz14KihkPTEtZCksZi55Kz1NKmQpO2lmKChkPXIqdikmJih4PXNbMF0vMixNPXNbMV0vMixlPS0xLGQpKWZvcig7KytlPF87KWE9bVtlXSxhLngrPSh4LWEueCkqZCxhLnkrPShNLWEueSkqZDtpZihnKWZvcihadSh0PVhvLmdlb20ucXVhZHRyZWUobSkscixvKSxlPS0xOysrZTxfOykoYT1tW2VdKS5maXhlZHx8dC52aXNpdChuKGEpKTtmb3IoZT0tMTsrK2U8XzspYT1tW2VdLGEuZml4ZWQ/KGEueD1hLnB4LGEueT1hLnB5KTooYS54LT0oYS5weC0oYS5weD1hLngpKSpsLGEueS09KGEucHktKGEucHk9YS55KSkqbCk7Yy50aWNrKHt0eXBlOiJ0aWNrIixhbHBoYTpyfSl9LGEubm9kZXM9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG09bixhKTptfSxhLmxpbmtzPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh5PW4sYSk6eX0sYS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhzPW4sYSk6c30sYS5saW5rRGlzdGFuY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGY9ImZ1bmN0aW9uIj09dHlwZW9mIG4/bjorbixhKTpmfSxhLmRpc3RhbmNlPWEubGlua0Rpc3RhbmNlLGEubGlua1N0cmVuZ3RoPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhoPSJmdW5jdGlvbiI9PXR5cGVvZiBuP246K24sYSk6aH0sYS5mcmljdGlvbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obD0rbixhKTpsfSxhLmNoYXJnZT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZz0iZnVuY3Rpb24iPT10eXBlb2Ygbj9uOituLGEpOmd9LGEuY2hhcmdlRGlzdGFuY2U9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHA9bipuLGEpOk1hdGguc3FydChwKX0sYS5ncmF2aXR5PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh2PStuLGEpOnZ9LGEudGhldGE9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGQ9bipuLGEpOk1hdGguc3FydChkKX0sYS5hbHBoYT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8obj0rbixyP3I9bj4wP246MDpuPjAmJihjLnN0YXJ0KHt0eXBlOiJzdGFydCIsYWxwaGE6cj1ufSksWG8udGltZXIoYS50aWNrKSksYSk6cn0sYS5zdGFydD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixyKXtpZighZSl7Zm9yKGU9bmV3IEFycmF5KGMpLGE9MDtjPmE7KythKWVbYV09W107Zm9yKGE9MDtzPmE7KythKXt2YXIgdT15W2FdO2VbdS5zb3VyY2UuaW5kZXhdLnB1c2godS50YXJnZXQpLGVbdS50YXJnZXQuaW5kZXhdLnB1c2godS5zb3VyY2UpfX1mb3IodmFyIGksbz1lW3RdLGE9LTEscz1vLmxlbmd0aDsrK2E8czspaWYoIWlzTmFOKGk9b1thXVtuXSkpcmV0dXJuIGk7cmV0dXJuIE1hdGgucmFuZG9tKCkqcn12YXIgdCxlLHIsYz1tLmxlbmd0aCxsPXkubGVuZ3RoLHA9c1swXSx2PXNbMV07Zm9yKHQ9MDtjPnQ7Kyt0KShyPW1bdF0pLmluZGV4PXQsci53ZWlnaHQ9MDtmb3IodD0wO2w+dDsrK3Qpcj15W3RdLCJudW1iZXIiPT10eXBlb2Ygci5zb3VyY2UmJihyLnNvdXJjZT1tW3Iuc291cmNlXSksIm51bWJlciI9PXR5cGVvZiByLnRhcmdldCYmKHIudGFyZ2V0PW1bci50YXJnZXRdKSwrK3Iuc291cmNlLndlaWdodCwrK3IudGFyZ2V0LndlaWdodDtmb3IodD0wO2M+dDsrK3Qpcj1tW3RdLGlzTmFOKHIueCkmJihyLng9bigieCIscCkpLGlzTmFOKHIueSkmJihyLnk9bigieSIsdikpLGlzTmFOKHIucHgpJiYoci5weD1yLngpLGlzTmFOKHIucHkpJiYoci5weT1yLnkpO2lmKHU9W10sImZ1bmN0aW9uIj09dHlwZW9mIGYpZm9yKHQ9MDtsPnQ7Kyt0KXVbdF09K2YuY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO2w+dDsrK3QpdVt0XT1mO2lmKGk9W10sImZ1bmN0aW9uIj09dHlwZW9mIGgpZm9yKHQ9MDtsPnQ7Kyt0KWlbdF09K2guY2FsbCh0aGlzLHlbdF0sdCk7ZWxzZSBmb3IodD0wO2w+dDsrK3QpaVt0XT1oO2lmKG89W10sImZ1bmN0aW9uIj09dHlwZW9mIGcpZm9yKHQ9MDtjPnQ7Kyt0KW9bdF09K2cuY2FsbCh0aGlzLG1bdF0sdCk7ZWxzZSBmb3IodD0wO2M+dDsrK3Qpb1t0XT1nO3JldHVybiBhLnJlc3VtZSgpfSxhLnJlc3VtZT1mdW5jdGlvbigpe3JldHVybiBhLmFscGhhKC4xKX0sYS5zdG9wPWZ1bmN0aW9uKCl7cmV0dXJuIGEuYWxwaGEoMCl9LGEuZHJhZz1mdW5jdGlvbigpe3JldHVybiBlfHwoZT1Yby5iZWhhdmlvci5kcmFnKCkub3JpZ2luKGJ0KS5vbigiZHJhZ3N0YXJ0LmZvcmNlIixGdSkub24oImRyYWcuZm9yY2UiLHQpLm9uKCJkcmFnZW5kLmZvcmNlIixPdSkpLGFyZ3VtZW50cy5sZW5ndGg/KHRoaXMub24oIm1vdXNlb3Zlci5mb3JjZSIsWXUpLm9uKCJtb3VzZW91dC5mb3JjZSIsSXUpLmNhbGwoZSksdm9pZCAwKTplfSxYby5yZWJpbmQoYSxjLCJvbiIpfTt2YXIgdXM9MjAsaXM9MSxvcz0xLzA7WG8ubGF5b3V0LmhpZXJhcmNoeT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4odCxvLGEpe3ZhciBjPXUuY2FsbChlLHQsbyk7aWYodC5kZXB0aD1vLGEucHVzaCh0KSxjJiYocz1jLmxlbmd0aCkpe2Zvcih2YXIgcyxsLGY9LTEsaD10LmNoaWxkcmVuPW5ldyBBcnJheShzKSxnPTAscD1vKzE7KytmPHM7KWw9aFtmXT1uKGNbZl0scCxhKSxsLnBhcmVudD10LGcrPWwudmFsdWU7ciYmaC5zb3J0KHIpLGkmJih0LnZhbHVlPWcpfWVsc2UgZGVsZXRlIHQuY2hpbGRyZW4saSYmKHQudmFsdWU9K2kuY2FsbChlLHQsbyl8fDApO3JldHVybiB0fWZ1bmN0aW9uIHQobixyKXt2YXIgdT1uLmNoaWxkcmVuLG89MDtpZih1JiYoYT11Lmxlbmd0aCkpZm9yKHZhciBhLGM9LTEscz1yKzE7KytjPGE7KW8rPXQodVtjXSxzKTtlbHNlIGkmJihvPStpLmNhbGwoZSxuLHIpfHwwKTtyZXR1cm4gaSYmKG4udmFsdWU9byksb31mdW5jdGlvbiBlKHQpe3ZhciBlPVtdO3JldHVybiBuKHQsMCxlKSxlfXZhciByPUJ1LHU9WHUsaT0kdTtyZXR1cm4gZS5zb3J0PWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPW4sZSk6cn0sZS5jaGlsZHJlbj1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1uLGUpOnV9LGUudmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9bixlKTppfSxlLnJldmFsdWU9ZnVuY3Rpb24obil7cmV0dXJuIHQobiwwKSxufSxlfSxYby5sYXlvdXQucGFydGl0aW9uPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbih0LGUscix1KXt2YXIgaT10LmNoaWxkcmVuO2lmKHQueD1lLHQueT10LmRlcHRoKnUsdC5keD1yLHQuZHk9dSxpJiYobz1pLmxlbmd0aCkpe3ZhciBvLGEsYyxzPS0xO2ZvcihyPXQudmFsdWU/ci90LnZhbHVlOjA7KytzPG87KW4oYT1pW3NdLGUsYz1hLnZhbHVlKnIsdSksZSs9Y319ZnVuY3Rpb24gdChuKXt2YXIgZT1uLmNoaWxkcmVuLHI9MDtpZihlJiYodT1lLmxlbmd0aCkpZm9yKHZhciB1LGk9LTE7KytpPHU7KXI9TWF0aC5tYXgocix0KGVbaV0pKTtyZXR1cm4gMStyfWZ1bmN0aW9uIGUoZSxpKXt2YXIgbz1yLmNhbGwodGhpcyxlLGkpO3JldHVybiBuKG9bMF0sMCx1WzBdLHVbMV0vdChvWzBdKSksb312YXIgcj1Yby5sYXlvdXQuaGllcmFyY2h5KCksdT1bMSwxXTtyZXR1cm4gZS5zaXplPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW4sZSk6dX0sVnUoZSxyKX0sWG8ubGF5b3V0LnBpZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7dmFyIG89aS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4rdC5jYWxsKG4sZSxyKX0pLGE9KygiZnVuY3Rpb24iPT10eXBlb2Ygcj9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKTpyKSxjPSgoImZ1bmN0aW9uIj09dHlwZW9mIHU/dS5hcHBseSh0aGlzLGFyZ3VtZW50cyk6dSktYSkvWG8uc3VtKG8pLHM9WG8ucmFuZ2UoaS5sZW5ndGgpO251bGwhPWUmJnMuc29ydChlPT09YXM/ZnVuY3Rpb24obix0KXtyZXR1cm4gb1t0XS1vW25dfTpmdW5jdGlvbihuLHQpe3JldHVybiBlKGlbbl0saVt0XSl9KTt2YXIgbD1bXTtyZXR1cm4gcy5mb3JFYWNoKGZ1bmN0aW9uKG4pe3ZhciB0O2xbbl09e2RhdGE6aVtuXSx2YWx1ZTp0PW9bbl0sc3RhcnRBbmdsZTphLGVuZEFuZ2xlOmErPXQqY319KSxsfXZhciB0PU51bWJlcixlPWFzLHI9MCx1PWthO3JldHVybiBuLnZhbHVlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PWUsbik6dH0sbi5zb3J0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQsbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT10LG4pOnV9LG59O3ZhciBhcz17fTtYby5sYXlvdXQuc3RhY2s9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKGEsYyl7dmFyIHM9YS5tYXAoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKG4sZSxyKX0pLGw9cy5tYXAoZnVuY3Rpb24odCl7cmV0dXJuIHQubWFwKGZ1bmN0aW9uKHQsZSl7cmV0dXJuW2kuY2FsbChuLHQsZSksby5jYWxsKG4sdCxlKV19KX0pLGY9ZS5jYWxsKG4sbCxjKTtzPVhvLnBlcm11dGUocyxmKSxsPVhvLnBlcm11dGUobCxmKTt2YXIgaCxnLHAsdj1yLmNhbGwobixsLGMpLGQ9cy5sZW5ndGgsbT1zWzBdLmxlbmd0aDtmb3IoZz0wO20+ZzsrK2cpZm9yKHUuY2FsbChuLHNbMF1bZ10scD12W2ddLGxbMF1bZ11bMV0pLGg9MTtkPmg7KytoKXUuY2FsbChuLHNbaF1bZ10scCs9bFtoLTFdW2ddWzFdLGxbaF1bZ11bMV0pO3JldHVybiBhfXZhciB0PWJ0LGU9UXUscj1uaSx1PUt1LGk9SnUsbz1HdTtyZXR1cm4gbi52YWx1ZXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9ZSxuKTp0fSxuLm9yZGVyPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPSJmdW5jdGlvbiI9PXR5cGVvZiB0P3Q6Y3MuZ2V0KHQpfHxRdSxuKTplfSxuLm9mZnNldD1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0iZnVuY3Rpb24iPT10eXBlb2YgdD90OnNzLmdldCh0KXx8bmksbik6cn0sbi54PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPXQsbik6aX0sbi55PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhvPXQsbik6b30sbi5vdXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxufTt2YXIgY3M9WG8ubWFwKHsiaW5zaWRlLW91dCI6ZnVuY3Rpb24obil7dmFyIHQsZSxyPW4ubGVuZ3RoLHU9bi5tYXAodGkpLGk9bi5tYXAoZWkpLG89WG8ucmFuZ2Uocikuc29ydChmdW5jdGlvbihuLHQpe3JldHVybiB1W25dLXVbdF19KSxhPTAsYz0wLHM9W10sbD1bXTtmb3IodD0wO3I+dDsrK3QpZT1vW3RdLGM+YT8oYSs9aVtlXSxzLnB1c2goZSkpOihjKz1pW2VdLGwucHVzaChlKSk7cmV0dXJuIGwucmV2ZXJzZSgpLmNvbmNhdChzKX0scmV2ZXJzZTpmdW5jdGlvbihuKXtyZXR1cm4gWG8ucmFuZ2Uobi5sZW5ndGgpLnJldmVyc2UoKX0sImRlZmF1bHQiOlF1fSksc3M9WG8ubWFwKHtzaWxob3VldHRlOmZ1bmN0aW9uKG4pe3ZhciB0LGUscix1PW4ubGVuZ3RoLGk9blswXS5sZW5ndGgsbz1bXSxhPTAsYz1bXTtmb3IoZT0wO2k+ZTsrK2Upe2Zvcih0PTAscj0wO3U+dDt0Kyspcis9blt0XVtlXVsxXTtyPmEmJihhPXIpLG8ucHVzaChyKX1mb3IoZT0wO2k+ZTsrK2UpY1tlXT0oYS1vW2VdKS8yO3JldHVybiBjfSx3aWdnbGU6ZnVuY3Rpb24obil7dmFyIHQsZSxyLHUsaSxvLGEsYyxzLGw9bi5sZW5ndGgsZj1uWzBdLGg9Zi5sZW5ndGgsZz1bXTtmb3IoZ1swXT1jPXM9MCxlPTE7aD5lOysrZSl7Zm9yKHQ9MCx1PTA7bD50OysrdCl1Kz1uW3RdW2VdWzFdO2Zvcih0PTAsaT0wLGE9ZltlXVswXS1mW2UtMV1bMF07bD50OysrdCl7Zm9yKHI9MCxvPShuW3RdW2VdWzFdLW5bdF1bZS0xXVsxXSkvKDIqYSk7dD5yOysrcilvKz0obltyXVtlXVsxXS1uW3JdW2UtMV1bMV0pL2E7aSs9bypuW3RdW2VdWzFdfWdbZV09Yy09dT9pL3UqYTowLHM+YyYmKHM9Yyl9Zm9yKGU9MDtoPmU7KytlKWdbZV0tPXM7cmV0dXJuIGd9LGV4cGFuZDpmdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1uLmxlbmd0aCxpPW5bMF0ubGVuZ3RoLG89MS91LGE9W107Zm9yKGU9MDtpPmU7KytlKXtmb3IodD0wLHI9MDt1PnQ7dCsrKXIrPW5bdF1bZV1bMV07aWYocilmb3IodD0wO3U+dDt0Kyspblt0XVtlXVsxXS89cjtlbHNlIGZvcih0PTA7dT50O3QrKyluW3RdW2VdWzFdPW99Zm9yKGU9MDtpPmU7KytlKWFbZV09MDtyZXR1cm4gYX0semVybzpuaX0pO1hvLmxheW91dC5oaXN0b2dyYW09ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4saSl7Zm9yKHZhciBvLGEsYz1bXSxzPW4ubWFwKGUsdGhpcyksbD1yLmNhbGwodGhpcyxzLGkpLGY9dS5jYWxsKHRoaXMsbCxzLGkpLGk9LTEsaD1zLmxlbmd0aCxnPWYubGVuZ3RoLTEscD10PzE6MS9oOysraTxnOylvPWNbaV09W10sby5keD1mW2krMV0tKG8ueD1mW2ldKSxvLnk9MDtpZihnPjApZm9yKGk9LTE7KytpPGg7KWE9c1tpXSxhPj1sWzBdJiZhPD1sWzFdJiYobz1jW1hvLmJpc2VjdChmLGEsMSxnKS0xXSxvLnkrPXAsby5wdXNoKG5baV0pKTtyZXR1cm4gY312YXIgdD0hMCxlPU51bWJlcixyPW9pLHU9dWk7cmV0dXJuIG4udmFsdWU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGU9dCxuKTplfSxuLnJhbmdlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPV90KHQpLG4pOnJ9LG4uYmlucz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT0ibnVtYmVyIj09dHlwZW9mIHQ/ZnVuY3Rpb24obil7cmV0dXJuIGlpKG4sdCl9Ol90KHQpLG4pOnV9LG4uZnJlcXVlbmN5PWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PSEhZSxuKTp0fSxufSxYby5sYXlvdXQudHJlZT1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXtmdW5jdGlvbiBvKG4sdCl7dmFyIHI9bi5jaGlsZHJlbix1PW4uX3RyZWU7aWYociYmKGk9ci5sZW5ndGgpKXtmb3IodmFyIGksYSxzLGw9clswXSxmPWwsaD0tMTsrK2g8aTspcz1yW2hdLG8ocyxhKSxmPWMocyxhLGYpLGE9czt2aShuKTt2YXIgZz0uNSoobC5fdHJlZS5wcmVsaW0rcy5fdHJlZS5wcmVsaW0pO3Q/KHUucHJlbGltPXQuX3RyZWUucHJlbGltK2Uobix0KSx1Lm1vZD11LnByZWxpbS1nKTp1LnByZWxpbT1nfWVsc2UgdCYmKHUucHJlbGltPXQuX3RyZWUucHJlbGltK2Uobix0KSl9ZnVuY3Rpb24gYShuLHQpe24ueD1uLl90cmVlLnByZWxpbSt0O3ZhciBlPW4uY2hpbGRyZW47aWYoZSYmKHI9ZS5sZW5ndGgpKXt2YXIgcix1PS0xO2Zvcih0Kz1uLl90cmVlLm1vZDsrK3U8cjspYShlW3VdLHQpfX1mdW5jdGlvbiBjKG4sdCxyKXtpZih0KXtmb3IodmFyIHUsaT1uLG89bixhPXQsYz1uLnBhcmVudC5jaGlsZHJlblswXSxzPWkuX3RyZWUubW9kLGw9by5fdHJlZS5tb2QsZj1hLl90cmVlLm1vZCxoPWMuX3RyZWUubW9kO2E9c2koYSksaT1jaShpKSxhJiZpOyljPWNpKGMpLG89c2kobyksby5fdHJlZS5hbmNlc3Rvcj1uLHU9YS5fdHJlZS5wcmVsaW0rZi1pLl90cmVlLnByZWxpbS1zK2UoYSxpKSx1PjAmJihkaShtaShhLG4sciksbix1KSxzKz11LGwrPXUpLGYrPWEuX3RyZWUubW9kLHMrPWkuX3RyZWUubW9kLGgrPWMuX3RyZWUubW9kLGwrPW8uX3RyZWUubW9kO2EmJiFzaShvKSYmKG8uX3RyZWUudGhyZWFkPWEsby5fdHJlZS5tb2QrPWYtbCksaSYmIWNpKGMpJiYoYy5fdHJlZS50aHJlYWQ9aSxjLl90cmVlLm1vZCs9cy1oLHI9bil9cmV0dXJuIHJ9dmFyIHM9dC5jYWxsKHRoaXMsbixpKSxsPXNbMF07cGkobCxmdW5jdGlvbihuLHQpe24uX3RyZWU9e2FuY2VzdG9yOm4scHJlbGltOjAsbW9kOjAsY2hhbmdlOjAsc2hpZnQ6MCxudW1iZXI6dD90Ll90cmVlLm51bWJlcisxOjB9fSksbyhsKSxhKGwsLWwuX3RyZWUucHJlbGltKTt2YXIgZj1saShsLGhpKSxoPWxpKGwsZmkpLGc9bGkobCxnaSkscD1mLngtZShmLGgpLzIsdj1oLngrZShoLGYpLzIsZD1nLmRlcHRofHwxO3JldHVybiBwaShsLHU/ZnVuY3Rpb24obil7bi54Kj1yWzBdLG4ueT1uLmRlcHRoKnJbMV0sZGVsZXRlIG4uX3RyZWV9OmZ1bmN0aW9uKG4pe24ueD0obi54LXApLyh2LXApKnJbMF0sbi55PW4uZGVwdGgvZCpyWzFdLGRlbGV0ZSBuLl90cmVlfSksc312YXIgdD1Yby5sYXlvdXQuaGllcmFyY2h5KCkuc29ydChudWxsKS52YWx1ZShudWxsKSxlPWFpLHI9WzEsMV0sdT0hMTtyZXR1cm4gbi5zZXBhcmF0aW9uPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPXQsbik6ZX0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGw9PShyPXQpLG4pOnU/bnVsbDpyfSxuLm5vZGVTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh1PW51bGwhPShyPXQpLG4pOnU/cjpudWxsfSxWdShuLHQpfSxYby5sYXlvdXQucGFjaz1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbz1lLmNhbGwodGhpcyxuLGkpLGE9b1swXSxjPXVbMF0scz11WzFdLGw9bnVsbD09dD9NYXRoLnNxcnQ6ImZ1bmN0aW9uIj09dHlwZW9mIHQ/dDpmdW5jdGlvbigpe3JldHVybiB0fTtpZihhLng9YS55PTAscGkoYSxmdW5jdGlvbihuKXtuLnI9K2wobi52YWx1ZSl9KSxwaShhLGJpKSxyKXt2YXIgZj1yKih0PzE6TWF0aC5tYXgoMiphLnIvYywyKmEuci9zKSkvMjtwaShhLGZ1bmN0aW9uKG4pe24ucis9Zn0pLHBpKGEsYmkpLHBpKGEsZnVuY3Rpb24obil7bi5yLT1mfSl9cmV0dXJuIGtpKGEsYy8yLHMvMix0PzE6MS9NYXRoLm1heCgyKmEuci9jLDIqYS5yL3MpKSxvfXZhciB0LGU9WG8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQoeWkpLHI9MCx1PVsxLDFdO3JldHVybiBuLnNpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9dCxuKTp1fSxuLnJhZGl1cz1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1udWxsPT1lfHwiZnVuY3Rpb24iPT10eXBlb2YgZT9lOitlLG4pOnR9LG4ucGFkZGluZz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj0rdCxuKTpyfSxWdShuLGUpfSxYby5sYXlvdXQuY2x1c3Rlcj1mdW5jdGlvbigpe2Z1bmN0aW9uIG4obixpKXt2YXIgbyxhPXQuY2FsbCh0aGlzLG4saSksYz1hWzBdLHM9MDtwaShjLGZ1bmN0aW9uKG4pe3ZhciB0PW4uY2hpbGRyZW47dCYmdC5sZW5ndGg/KG4ueD1DaSh0KSxuLnk9QWkodCkpOihuLng9bz9zKz1lKG4sbyk6MCxuLnk9MCxvPW4pfSk7dmFyIGw9TmkoYyksZj1MaShjKSxoPWwueC1lKGwsZikvMixnPWYueCtlKGYsbCkvMjtyZXR1cm4gcGkoYyx1P2Z1bmN0aW9uKG4pe24ueD0obi54LWMueCkqclswXSxuLnk9KGMueS1uLnkpKnJbMV19OmZ1bmN0aW9uKG4pe24ueD0obi54LWgpLyhnLWgpKnJbMF0sbi55PSgxLShjLnk/bi55L2MueToxKSkqclsxXX0pLGF9dmFyIHQ9WG8ubGF5b3V0LmhpZXJhcmNoeSgpLnNvcnQobnVsbCkudmFsdWUobnVsbCksZT1haSxyPVsxLDFdLHU9ITE7cmV0dXJuIG4uc2VwYXJhdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4uc2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsPT0ocj10KSxuKTp1P251bGw6cn0sbi5ub2RlU2l6ZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1udWxsIT0ocj10KSxuKTp1P3I6bnVsbH0sVnUobix0KX0sWG8ubGF5b3V0LnRyZWVtYXA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sdCl7Zm9yKHZhciBlLHIsdT0tMSxpPW4ubGVuZ3RoOysrdTxpOylyPShlPW5bdV0pLnZhbHVlKigwPnQ/MDp0KSxlLmFyZWE9aXNOYU4ocil8fDA+PXI/MDpyfWZ1bmN0aW9uIHQoZSl7dmFyIGk9ZS5jaGlsZHJlbjtpZihpJiZpLmxlbmd0aCl7dmFyIG8sYSxjLHM9ZihlKSxsPVtdLGg9aS5zbGljZSgpLHA9MS8wLHY9InNsaWNlIj09PWc/cy5keDoiZGljZSI9PT1nP3MuZHk6InNsaWNlLWRpY2UiPT09Zz8xJmUuZGVwdGg/cy5keTpzLmR4Ok1hdGgubWluKHMuZHgscy5keSk7Zm9yKG4oaCxzLmR4KnMuZHkvZS52YWx1ZSksbC5hcmVhPTA7KGM9aC5sZW5ndGgpPjA7KWwucHVzaChvPWhbYy0xXSksbC5hcmVhKz1vLmFyZWEsInNxdWFyaWZ5IiE9PWd8fChhPXIobCx2KSk8PXA/KGgucG9wKCkscD1hKToobC5hcmVhLT1sLnBvcCgpLmFyZWEsdShsLHYscywhMSksdj1NYXRoLm1pbihzLmR4LHMuZHkpLGwubGVuZ3RoPWwuYXJlYT0wLHA9MS8wKTtsLmxlbmd0aCYmKHUobCx2LHMsITApLGwubGVuZ3RoPWwuYXJlYT0wKSxpLmZvckVhY2godCl9fWZ1bmN0aW9uIGUodCl7dmFyIHI9dC5jaGlsZHJlbjtpZihyJiZyLmxlbmd0aCl7dmFyIGksbz1mKHQpLGE9ci5zbGljZSgpLGM9W107Zm9yKG4oYSxvLmR4Km8uZHkvdC52YWx1ZSksYy5hcmVhPTA7aT1hLnBvcCgpOyljLnB1c2goaSksYy5hcmVhKz1pLmFyZWEsbnVsbCE9aS56JiYodShjLGkuej9vLmR4Om8uZHksbywhYS5sZW5ndGgpLGMubGVuZ3RoPWMuYXJlYT0wKTtyLmZvckVhY2goZSl9fWZ1bmN0aW9uIHIobix0KXtmb3IodmFyIGUscj1uLmFyZWEsdT0wLGk9MS8wLG89LTEsYT1uLmxlbmd0aDsrK288YTspKGU9bltvXS5hcmVhKSYmKGk+ZSYmKGk9ZSksZT51JiYodT1lKSk7cmV0dXJuIHIqPXIsdCo9dCxyP01hdGgubWF4KHQqdSpwL3Isci8odCppKnApKToxLzB9ZnVuY3Rpb24gdShuLHQsZSxyKXt2YXIgdSxpPS0xLG89bi5sZW5ndGgsYT1lLngscz1lLnksbD10P2Mobi5hcmVhL3QpOjA7aWYodD09ZS5keCl7Zm9yKChyfHxsPmUuZHkpJiYobD1lLmR5KTsrK2k8bzspdT1uW2ldLHUueD1hLHUueT1zLHUuZHk9bCxhKz11LmR4PU1hdGgubWluKGUueCtlLmR4LWEsbD9jKHUuYXJlYS9sKTowKTt1Lno9ITAsdS5keCs9ZS54K2UuZHgtYSxlLnkrPWwsZS5keS09bH1lbHNle2Zvcigocnx8bD5lLmR4KSYmKGw9ZS5keCk7KytpPG87KXU9bltpXSx1Lng9YSx1Lnk9cyx1LmR4PWwscys9dS5keT1NYXRoLm1pbihlLnkrZS5keS1zLGw/Yyh1LmFyZWEvbCk6MCk7dS56PSExLHUuZHkrPWUueStlLmR5LXMsZS54Kz1sLGUuZHgtPWx9fWZ1bmN0aW9uIGkocil7dmFyIHU9b3x8YShyKSxpPXVbMF07cmV0dXJuIGkueD0wLGkueT0wLGkuZHg9c1swXSxpLmR5PXNbMV0sbyYmYS5yZXZhbHVlKGkpLG4oW2ldLGkuZHgqaS5keS9pLnZhbHVlKSwobz9lOnQpKGkpLGgmJihvPXUpLHV9dmFyIG8sYT1Yby5sYXlvdXQuaGllcmFyY2h5KCksYz1NYXRoLnJvdW5kLHM9WzEsMV0sbD1udWxsLGY9VGksaD0hMSxnPSJzcXVhcmlmeSIscD0uNSooMStNYXRoLnNxcnQoNSkpO3JldHVybiBpLnNpemU9ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9bixpKTpzfSxpLnBhZGRpbmc9ZnVuY3Rpb24obil7ZnVuY3Rpb24gdCh0KXt2YXIgZT1uLmNhbGwoaSx0LHQuZGVwdGgpO3JldHVybiBudWxsPT1lP1RpKHQpOnFpKHQsIm51bWJlciI9PXR5cGVvZiBlP1tlLGUsZSxlXTplKX1mdW5jdGlvbiBlKHQpe3JldHVybiBxaSh0LG4pfWlmKCFhcmd1bWVudHMubGVuZ3RoKXJldHVybiBsO3ZhciByO3JldHVybiBmPW51bGw9PShsPW4pP1RpOiJmdW5jdGlvbiI9PShyPXR5cGVvZiBuKT90OiJudW1iZXIiPT09cj8obj1bbixuLG4sbl0sZSk6ZSxpfSxpLnJvdW5kPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPW4/TWF0aC5yb3VuZDpOdW1iZXIsaSk6YyE9TnVtYmVyfSxpLnN0aWNreT1mdW5jdGlvbihuKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oaD1uLG89bnVsbCxpKTpofSxpLnJhdGlvPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhwPW4saSk6cH0saS5tb2RlPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhnPW4rIiIsaSk6Z30sVnUoaSxhKX0sWG8ucmFuZG9tPXtub3JtYWw6ZnVuY3Rpb24obix0KXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoO3JldHVybiAyPmUmJih0PTEpLDE+ZSYmKG49MCksZnVuY3Rpb24oKXt2YXIgZSxyLHU7ZG8gZT0yKk1hdGgucmFuZG9tKCktMSxyPTIqTWF0aC5yYW5kb20oKS0xLHU9ZSplK3Iqcjt3aGlsZSghdXx8dT4xKTtyZXR1cm4gbit0KmUqTWF0aC5zcXJ0KC0yKk1hdGgubG9nKHUpL3UpfX0sbG9nTm9ybWFsOmZ1bmN0aW9uKCl7dmFyIG49WG8ucmFuZG9tLm5vcm1hbC5hcHBseShYbyxhcmd1bWVudHMpO3JldHVybiBmdW5jdGlvbigpe3JldHVybiBNYXRoLmV4cChuKCkpfX0sYmF0ZXM6ZnVuY3Rpb24obil7dmFyIHQ9WG8ucmFuZG9tLmlyd2luSGFsbChuKTtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gdCgpL259fSxpcndpbkhhbGw6ZnVuY3Rpb24obil7cmV0dXJuIGZ1bmN0aW9uKCl7Zm9yKHZhciB0PTAsZT0wO24+ZTtlKyspdCs9TWF0aC5yYW5kb20oKTtyZXR1cm4gdH19fSxYby5zY2FsZT17fTt2YXIgbHM9e2Zsb29yOmJ0LGNlaWw6YnR9O1hvLnNjYWxlLmxpbmVhcj1mdW5jdGlvbigpe3JldHVybiBIaShbMCwxXSxbMCwxXSxmdSwhMSl9O3ZhciBmcz17czoxLGc6MSxwOjEscjoxLGU6MX07WG8uc2NhbGUubG9nPWZ1bmN0aW9uKCl7cmV0dXJuICRpKFhvLnNjYWxlLmxpbmVhcigpLmRvbWFpbihbMCwxXSksMTAsITAsWzEsMTBdKX07dmFyIGhzPVhvLmZvcm1hdCgiLjBlIiksZ3M9e2Zsb29yOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmNlaWwoLW4pfSxjZWlsOmZ1bmN0aW9uKG4pe3JldHVybi1NYXRoLmZsb29yKC1uKX19O1hvLnNjYWxlLnBvdz1mdW5jdGlvbigpe3JldHVybiBCaShYby5zY2FsZS5saW5lYXIoKSwxLFswLDFdKX0sWG8uc2NhbGUuc3FydD1mdW5jdGlvbigpe3JldHVybiBYby5zY2FsZS5wb3coKS5leHBvbmVudCguNSl9LFhvLnNjYWxlLm9yZGluYWw9ZnVuY3Rpb24oKXtyZXR1cm4gSmkoW10se3Q6InJhbmdlIixhOltbXV19KX0sWG8uc2NhbGUuY2F0ZWdvcnkxMD1mdW5jdGlvbigpe3JldHVybiBYby5zY2FsZS5vcmRpbmFsKCkucmFuZ2UocHMpfSxYby5zY2FsZS5jYXRlZ29yeTIwPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZSh2cyl9LFhvLnNjYWxlLmNhdGVnb3J5MjBiPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShkcyl9LFhvLnNjYWxlLmNhdGVnb3J5MjBjPWZ1bmN0aW9uKCl7cmV0dXJuIFhvLnNjYWxlLm9yZGluYWwoKS5yYW5nZShtcyl9O3ZhciBwcz1bMjA2MjI2MCwxNjc0NDIwNiwyOTI0NTg4LDE0MDM0NzI4LDk3MjU4ODUsOTE5NzEzMSwxNDkwNzMzMCw4MzU1NzExLDEyMzY5MTg2LDE1NTYxNzVdLm1hcChodCksdnM9WzIwNjIyNjAsMTE0NTQ0NDAsMTY3NDQyMDYsMTY3NTk2NzIsMjkyNDU4OCwxMDAxODY5OCwxNDAzNDcyOCwxNjc1MDc0Miw5NzI1ODg1LDEyOTU1ODYxLDkxOTcxMzEsMTI4ODUxNDAsMTQ5MDczMzAsMTYyMzQxOTQsODM1NTcxMSwxMzA5MjgwNywxMjM2OTE4NiwxNDQwODU4OSwxNTU2MTc1LDEwNDEwNzI1XS5tYXAoaHQpLGRzPVszNzUwNzc3LDUzOTU2MTksNzA0MDcxOSwxMDI2NDI4Niw2NTE5MDk3LDkyMTY1OTQsMTE5MTUxMTUsMTM1NTY2MzYsOTIwMjk5MywxMjQyNjgwOSwxNTE4NjUxNCwxNTE5MDkzMiw4NjY2MTY5LDExMzU2NDkwLDE0MDQ5NjQzLDE1MTc3MzcyLDgwNzc2ODMsMTA4MzQzMjQsMTM1Mjg1MDksMTQ1ODk2NTRdLm1hcChodCksbXM9WzMyNDQ3MzMsNzA1NzExMCwxMDQwNjYyNSwxMzAzMjQzMSwxNTA5NTA1MywxNjYxNjc2NCwxNjYyNTI1OSwxNjYzNDAxOCwzMjUzMDc2LDc2NTI0NzAsMTA2MDcwMDMsMTMxMDE1MDQsNzY5NTI4MSwxMDM5NDMxMiwxMjM2OTM3MiwxNDM0Mjg5MSw2NTEzNTA3LDk4Njg5NTAsMTI0MzQ4NzcsMTQyNzcwODFdLm1hcChodCk7WG8uc2NhbGUucXVhbnRpbGU9ZnVuY3Rpb24oKXtyZXR1cm4gR2koW10sW10pfSxYby5zY2FsZS5xdWFudGl6ZT1mdW5jdGlvbigpe3JldHVybiBLaSgwLDEsWzAsMV0pfSxYby5zY2FsZS50aHJlc2hvbGQ9ZnVuY3Rpb24oKXtyZXR1cm4gUWkoWy41XSxbMCwxXSl9LFhvLnNjYWxlLmlkZW50aXR5PWZ1bmN0aW9uKCl7cmV0dXJuIG5vKFswLDFdKX0sWG8uc3ZnPXt9LFhvLnN2Zy5hcmM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKCl7dmFyIG49dC5hcHBseSh0aGlzLGFyZ3VtZW50cyksaT1lLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxvPXIuYXBwbHkodGhpcyxhcmd1bWVudHMpK3lzLGE9dS5hcHBseSh0aGlzLGFyZ3VtZW50cykreXMsYz0obz5hJiYoYz1vLG89YSxhPWMpLGEtbykscz1TYT5jPyIwIjoiMSIsbD1NYXRoLmNvcyhvKSxmPU1hdGguc2luKG8pLGg9TWF0aC5jb3MoYSksZz1NYXRoLnNpbihhKTtyZXR1cm4gYz49eHM/bj8iTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1pKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiK2krIk0wLCIrbisiQSIrbisiLCIrbisiIDAgMSwwIDAsIistbisiQSIrbisiLCIrbisiIDAgMSwwIDAsIituKyJaIjoiTTAsIitpKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiKy1pKyJBIitpKyIsIitpKyIgMCAxLDEgMCwiK2krIloiOm4/Ik0iK2kqbCsiLCIraSpmKyJBIitpKyIsIitpKyIgMCAiK3MrIiwxICIraSpoKyIsIitpKmcrIkwiK24qaCsiLCIrbipnKyJBIituKyIsIituKyIgMCAiK3MrIiwwICIrbipsKyIsIituKmYrIloiOiJNIitpKmwrIiwiK2kqZisiQSIraSsiLCIraSsiIDAgIitzKyIsMSAiK2kqaCsiLCIraSpnKyJMMCwwIisiWiJ9dmFyIHQ9dG8sZT1lbyxyPXJvLHU9dW87cmV0dXJuIG4uaW5uZXJSYWRpdXM9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9X3QoZSksbik6dH0sbi5vdXRlclJhZGl1cz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT1fdCh0KSxuKTplfSxuLnN0YXJ0QW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHI9X3QodCksbik6cn0sbi5lbmRBbmdsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odT1fdCh0KSxuKTp1fSxuLmNlbnRyb2lkPWZ1bmN0aW9uKCl7dmFyIG49KHQuYXBwbHkodGhpcyxhcmd1bWVudHMpK2UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yLGk9KHIuYXBwbHkodGhpcyxhcmd1bWVudHMpK3UuYXBwbHkodGhpcyxhcmd1bWVudHMpKS8yK3lzO3JldHVybltNYXRoLmNvcyhpKSpuLE1hdGguc2luKGkpKm5dfSxufTt2YXIgeXM9LUVhLHhzPWthLUFhO1hvLnN2Zy5saW5lPWZ1bmN0aW9uKCl7cmV0dXJuIGlvKGJ0KX07dmFyIE1zPVhvLm1hcCh7bGluZWFyOm9vLCJsaW5lYXItY2xvc2VkIjphbyxzdGVwOmNvLCJzdGVwLWJlZm9yZSI6c28sInN0ZXAtYWZ0ZXIiOmxvLGJhc2lzOm1vLCJiYXNpcy1vcGVuIjp5bywiYmFzaXMtY2xvc2VkIjp4byxidW5kbGU6TW8sY2FyZGluYWw6Z28sImNhcmRpbmFsLW9wZW4iOmZvLCJjYXJkaW5hbC1jbG9zZWQiOmhvLG1vbm90b25lOkVvfSk7TXMuZm9yRWFjaChmdW5jdGlvbihuLHQpe3Qua2V5PW4sdC5jbG9zZWQ9Ly1jbG9zZWQkLy50ZXN0KG4pfSk7dmFyIF9zPVswLDIvMywxLzMsMF0sYnM9WzAsMS8zLDIvMywwXSx3cz1bMCwxLzYsMi8zLDEvNl07WG8uc3ZnLmxpbmUucmFkaWFsPWZ1bmN0aW9uKCl7dmFyIG49aW8oQW8pO3JldHVybiBuLnJhZGl1cz1uLngsZGVsZXRlIG4ueCxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG59LHNvLnJldmVyc2U9bG8sbG8ucmV2ZXJzZT1zbyxYby5zdmcuYXJlYT1mdW5jdGlvbigpe3JldHVybiBDbyhidCl9LFhvLnN2Zy5hcmVhLnJhZGlhbD1mdW5jdGlvbigpe3ZhciBuPUNvKEFvKTtyZXR1cm4gbi5yYWRpdXM9bi54LGRlbGV0ZSBuLngsbi5pbm5lclJhZGl1cz1uLngwLGRlbGV0ZSBuLngwLG4ub3V0ZXJSYWRpdXM9bi54MSxkZWxldGUgbi54MSxuLmFuZ2xlPW4ueSxkZWxldGUgbi55LG4uc3RhcnRBbmdsZT1uLnkwLGRlbGV0ZSBuLnkwLG4uZW5kQW5nbGU9bi55MSxkZWxldGUgbi55MSxufSxYby5zdmcuY2hvcmQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4sYSl7dmFyIGM9dCh0aGlzLGksbixhKSxzPXQodGhpcyxvLG4sYSk7cmV0dXJuIk0iK2MucDArcihjLnIsYy5wMSxjLmExLWMuYTApKyhlKGMscyk/dShjLnIsYy5wMSxjLnIsYy5wMCk6dShjLnIsYy5wMSxzLnIscy5wMCkrcihzLnIscy5wMSxzLmExLXMuYTApK3Uocy5yLHMucDEsYy5yLGMucDApKSsiWiJ9ZnVuY3Rpb24gdChuLHQsZSxyKXt2YXIgdT10LmNhbGwobixlLHIpLGk9YS5jYWxsKG4sdSxyKSxvPWMuY2FsbChuLHUscikreXMsbD1zLmNhbGwobix1LHIpK3lzO3JldHVybntyOmksYTA6byxhMTpsLHAwOltpKk1hdGguY29zKG8pLGkqTWF0aC5zaW4obyldLHAxOltpKk1hdGguY29zKGwpLGkqTWF0aC5zaW4obCldfX1mdW5jdGlvbiBlKG4sdCl7cmV0dXJuIG4uYTA9PXQuYTAmJm4uYTE9PXQuYTF9ZnVuY3Rpb24gcihuLHQsZSl7cmV0dXJuIkEiK24rIiwiK24rIiAwICIrICsoZT5TYSkrIiwxICIrdH1mdW5jdGlvbiB1KG4sdCxlLHIpe3JldHVybiJRIDAsMCAiK3J9dmFyIGk9aHIsbz1ncixhPU5vLGM9cm8scz11bztyZXR1cm4gbi5yYWRpdXM9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9X3QodCksbik6YX0sbi5zb3VyY2U9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGk9X3QodCksbik6aX0sbi50YXJnZXQ9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89X3QodCksbik6b30sbi5zdGFydEFuZ2xlPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjPV90KHQpLG4pOmN9LG4uZW5kQW5nbGU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9X3QodCksbik6c30sbn0sWG8uc3ZnLmRpYWdvbmFsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHUpe3ZhciBpPXQuY2FsbCh0aGlzLG4sdSksbz1lLmNhbGwodGhpcyxuLHUpLGE9KGkueStvLnkpLzIsYz1baSx7eDppLngseTphfSx7eDpvLngseTphfSxvXTtyZXR1cm4gYz1jLm1hcChyKSwiTSIrY1swXSsiQyIrY1sxXSsiICIrY1syXSsiICIrY1szXX12YXIgdD1ocixlPWdyLHI9TG87cmV0dXJuIG4uc291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyh0PV90KGUpLG4pOnR9LG4udGFyZ2V0PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPV90KHQpLG4pOmV9LG4ucHJvamVjdGlvbj1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8ocj10LG4pOnJ9LG59LFhvLnN2Zy5kaWFnb25hbC5yYWRpYWw9ZnVuY3Rpb24oKXt2YXIgbj1Yby5zdmcuZGlhZ29uYWwoKSx0PUxvLGU9bi5wcm9qZWN0aW9uO3JldHVybiBuLnByb2plY3Rpb249ZnVuY3Rpb24obil7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/ZShUbyh0PW4pKTp0fSxufSxYby5zdmcuc3ltYm9sPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gbihuLHIpe3JldHVybihTcy5nZXQodC5jYWxsKHRoaXMsbixyKSl8fFJvKShlLmNhbGwodGhpcyxuLHIpKX12YXIgdD16byxlPXFvO3JldHVybiBuLnR5cGU9ZnVuY3Rpb24oZSl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHQ9X3QoZSksbik6dH0sbi5zaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhlPV90KHQpLG4pOmV9LG59O3ZhciBTcz1Yby5tYXAoe2NpcmNsZTpSbyxjcm9zczpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobi81KS8yO3JldHVybiJNIistMyp0KyIsIistdCsiSCIrLXQrIlYiKy0zKnQrIkgiK3QrIlYiKy10KyJIIiszKnQrIlYiK3QrIkgiK3QrIlYiKzMqdCsiSCIrLXQrIlYiK3QrIkgiKy0zKnQrIloifSxkaWFtb25kOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuLygyKkNzKSksZT10KkNzO3JldHVybiJNMCwiKy10KyJMIitlKyIsMCIrIiAwLCIrdCsiICIrLWUrIiwwIisiWiJ9LHNxdWFyZTpmdW5jdGlvbihuKXt2YXIgdD1NYXRoLnNxcnQobikvMjtyZXR1cm4iTSIrLXQrIiwiKy10KyJMIit0KyIsIistdCsiICIrdCsiLCIrdCsiICIrLXQrIiwiK3QrIloifSwidHJpYW5nbGUtZG93biI6ZnVuY3Rpb24obil7dmFyIHQ9TWF0aC5zcXJ0KG4vQXMpLGU9dCpBcy8yO3JldHVybiJNMCwiK2UrIkwiK3QrIiwiKy1lKyIgIistdCsiLCIrLWUrIloifSwidHJpYW5nbGUtdXAiOmZ1bmN0aW9uKG4pe3ZhciB0PU1hdGguc3FydChuL0FzKSxlPXQqQXMvMjtyZXR1cm4iTTAsIistZSsiTCIrdCsiLCIrZSsiICIrLXQrIiwiK2UrIloifX0pO1hvLnN2Zy5zeW1ib2xUeXBlcz1Tcy5rZXlzKCk7dmFyIGtzLEVzLEFzPU1hdGguc3FydCgzKSxDcz1NYXRoLnRhbigzMCpOYSksTnM9W10sTHM9MDtOcy5jYWxsPWRhLmNhbGwsTnMuZW1wdHk9ZGEuZW1wdHksTnMubm9kZT1kYS5ub2RlLE5zLnNpemU9ZGEuc2l6ZSxYby50cmFuc2l0aW9uPWZ1bmN0aW9uKG4pe3JldHVybiBhcmd1bWVudHMubGVuZ3RoP2tzP24udHJhbnNpdGlvbigpOm46eGEudHJhbnNpdGlvbigpfSxYby50cmFuc2l0aW9uLnByb3RvdHlwZT1OcyxOcy5zZWxlY3Q9ZnVuY3Rpb24obil7dmFyIHQsZSxyLHU9dGhpcy5pZCxpPVtdO249TShuKTtmb3IodmFyIG89LTEsYT10aGlzLmxlbmd0aDsrK288YTspe2kucHVzaCh0PVtdKTtmb3IodmFyIGM9dGhpc1tvXSxzPS0xLGw9Yy5sZW5ndGg7KytzPGw7KShyPWNbc10pJiYoZT1uLmNhbGwocixyLl9fZGF0YV9fLHMsbykpPygiX19kYXRhX18iaW4gciYmKGUuX19kYXRhX189ci5fX2RhdGFfXyksam8oZSxzLHUsci5fX3RyYW5zaXRpb25fX1t1XSksdC5wdXNoKGUpKTp0LnB1c2gobnVsbCl9cmV0dXJuIERvKGksdSl9LE5zLnNlbGVjdEFsbD1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdSxpLG89dGhpcy5pZCxhPVtdO249XyhuKTtmb3IodmFyIGM9LTEscz10aGlzLmxlbmd0aDsrK2M8czspZm9yKHZhciBsPXRoaXNbY10sZj0tMSxoPWwubGVuZ3RoOysrZjxoOylpZihyPWxbZl0pe2k9ci5fX3RyYW5zaXRpb25fX1tvXSxlPW4uY2FsbChyLHIuX19kYXRhX18sZixjKSxhLnB1c2godD1bXSk7Zm9yKHZhciBnPS0xLHA9ZS5sZW5ndGg7KytnPHA7KSh1PWVbZ10pJiZqbyh1LGcsbyxpKSx0LnB1c2godSl9cmV0dXJuIERvKGEsbyl9LE5zLmZpbHRlcj1mdW5jdGlvbihuKXt2YXIgdCxlLHIsdT1bXTsiZnVuY3Rpb24iIT10eXBlb2YgbiYmKG49cShuKSk7Zm9yKHZhciBpPTAsbz10aGlzLmxlbmd0aDtvPmk7aSsrKXt1LnB1c2godD1bXSk7Zm9yKHZhciBlPXRoaXNbaV0sYT0wLGM9ZS5sZW5ndGg7Yz5hO2ErKykocj1lW2FdKSYmbi5jYWxsKHIsci5fX2RhdGFfXyxhLGkpJiZ0LnB1c2gocil9cmV0dXJuIERvKHUsdGhpcy5pZCl9LE5zLnR3ZWVuPWZ1bmN0aW9uKG4sdCl7dmFyIGU9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwyP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLmdldChuKTpSKHRoaXMsbnVsbD09dD9mdW5jdGlvbih0KXt0Ll9fdHJhbnNpdGlvbl9fW2VdLnR3ZWVuLnJlbW92ZShuKX06ZnVuY3Rpb24ocil7ci5fX3RyYW5zaXRpb25fX1tlXS50d2Vlbi5zZXQobix0KX0pfSxOcy5hdHRyPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZSgpe3RoaXMucmVtb3ZlQXR0cmlidXRlKGEpfWZ1bmN0aW9uIHIoKXt0aGlzLnJlbW92ZUF0dHJpYnV0ZU5TKGEuc3BhY2UsYS5sb2NhbCl9ZnVuY3Rpb24gdShuKXtyZXR1cm4gbnVsbD09bj9lOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGUoYSk7cmV0dXJuIGUhPT1uJiYodD1vKGUsbiksZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGUoYSx0KG4pKX0pfSl9ZnVuY3Rpb24gaShuKXtyZXR1cm4gbnVsbD09bj9yOihuKz0iIixmdW5jdGlvbigpe3ZhciB0LGU9dGhpcy5nZXRBdHRyaWJ1dGVOUyhhLnNwYWNlLGEubG9jYWwpO3JldHVybiBlIT09biYmKHQ9byhlLG4pLGZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlTlMoYS5zcGFjZSxhLmxvY2FsLHQobikpfSl9KX1pZihhcmd1bWVudHMubGVuZ3RoPDIpe2Zvcih0IGluIG4pdGhpcy5hdHRyKHQsblt0XSk7cmV0dXJuIHRoaXN9dmFyIG89InRyYW5zZm9ybSI9PW4/UnU6ZnUsYT1Yby5ucy5xdWFsaWZ5KG4pO3JldHVybiBQbyh0aGlzLCJhdHRyLiIrbix0LGEubG9jYWw/aTp1KX0sTnMuYXR0clR3ZWVuPWZ1bmN0aW9uKG4sdCl7ZnVuY3Rpb24gZShuLGUpe3ZhciByPXQuY2FsbCh0aGlzLG4sZSx0aGlzLmdldEF0dHJpYnV0ZSh1KSk7cmV0dXJuIHImJmZ1bmN0aW9uKG4pe3RoaXMuc2V0QXR0cmlidXRlKHUscihuKSl9fWZ1bmN0aW9uIHIobixlKXt2YXIgcj10LmNhbGwodGhpcyxuLGUsdGhpcy5nZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwpKTtyZXR1cm4gciYmZnVuY3Rpb24obil7dGhpcy5zZXRBdHRyaWJ1dGVOUyh1LnNwYWNlLHUubG9jYWwscihuKSl9fXZhciB1PVhvLm5zLnF1YWxpZnkobik7cmV0dXJuIHRoaXMudHdlZW4oImF0dHIuIituLHUubG9jYWw/cjplKX0sTnMuc3R5bGU9ZnVuY3Rpb24obix0LGUpe2Z1bmN0aW9uIHIoKXt0aGlzLnN0eWxlLnJlbW92ZVByb3BlcnR5KG4pfWZ1bmN0aW9uIHUodCl7cmV0dXJuIG51bGw9PXQ/cjoodCs9IiIsZnVuY3Rpb24oKXt2YXIgcix1PUdvLmdldENvbXB1dGVkU3R5bGUodGhpcyxudWxsKS5nZXRQcm9wZXJ0eVZhbHVlKG4pO3JldHVybiB1IT09dCYmKHI9ZnUodSx0KSxmdW5jdGlvbih0KXt0aGlzLnN0eWxlLnNldFByb3BlcnR5KG4scih0KSxlKX0pfSl9dmFyIGk9YXJndW1lbnRzLmxlbmd0aDtpZigzPmkpe2lmKCJzdHJpbmciIT10eXBlb2Ygbil7Mj5pJiYodD0iIik7Zm9yKGUgaW4gbil0aGlzLnN0eWxlKGUsbltlXSx0KTtyZXR1cm4gdGhpc31lPSIifXJldHVybiBQbyh0aGlzLCJzdHlsZS4iK24sdCx1KX0sTnMuc3R5bGVUd2Vlbj1mdW5jdGlvbihuLHQsZSl7ZnVuY3Rpb24gcihyLHUpe3ZhciBpPXQuY2FsbCh0aGlzLHIsdSxHby5nZXRDb21wdXRlZFN0eWxlKHRoaXMsbnVsbCkuZ2V0UHJvcGVydHlWYWx1ZShuKSk7cmV0dXJuIGkmJmZ1bmN0aW9uKHQpe3RoaXMuc3R5bGUuc2V0UHJvcGVydHkobixpKHQpLGUpfX1yZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwzJiYoZT0iIiksdGhpcy50d2Vlbigic3R5bGUuIituLHIpfSxOcy50ZXh0PWZ1bmN0aW9uKG4pe3JldHVybiBQbyh0aGlzLCJ0ZXh0IixuLFVvKX0sTnMucmVtb3ZlPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZWFjaCgiZW5kLnRyYW5zaXRpb24iLGZ1bmN0aW9uKCl7dmFyIG47dGhpcy5fX3RyYW5zaXRpb25fXy5jb3VudDwyJiYobj10aGlzLnBhcmVudE5vZGUpJiZuLnJlbW92ZUNoaWxkKHRoaXMpfSl9LE5zLmVhc2U9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aDwxP3RoaXMubm9kZSgpLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U6KCJmdW5jdGlvbiIhPXR5cGVvZiBuJiYobj1Yby5lYXNlLmFwcGx5KFhvLGFyZ3VtZW50cykpLFIodGhpcyxmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmVhc2U9bn0pKX0sTnMuZGVsYXk9ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gUih0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmRlbGF5PStuLmNhbGwoZSxlLl9fZGF0YV9fLHIsdSl9OihuPStuLGZ1bmN0aW9uKGUpe2UuX190cmFuc2l0aW9uX19bdF0uZGVsYXk9bn0pKX0sTnMuZHVyYXRpb249ZnVuY3Rpb24obil7dmFyIHQ9dGhpcy5pZDtyZXR1cm4gUih0aGlzLCJmdW5jdGlvbiI9PXR5cGVvZiBuP2Z1bmN0aW9uKGUscix1KXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPU1hdGgubWF4KDEsbi5jYWxsKGUsZS5fX2RhdGFfXyxyLHUpKX06KG49TWF0aC5tYXgoMSxuKSxmdW5jdGlvbihlKXtlLl9fdHJhbnNpdGlvbl9fW3RdLmR1cmF0aW9uPW59KSl9LE5zLmVhY2g9ZnVuY3Rpb24obix0KXt2YXIgZT10aGlzLmlkO2lmKGFyZ3VtZW50cy5sZW5ndGg8Mil7dmFyIHI9RXMsdT1rcztrcz1lLFIodGhpcyxmdW5jdGlvbih0LHIsdSl7RXM9dC5fX3RyYW5zaXRpb25fX1tlXSxuLmNhbGwodCx0Ll9fZGF0YV9fLHIsdSl9KSxFcz1yLGtzPXV9ZWxzZSBSKHRoaXMsZnVuY3Rpb24ocil7dmFyIHU9ci5fX3RyYW5zaXRpb25fX1tlXTsodS5ldmVudHx8KHUuZXZlbnQ9WG8uZGlzcGF0Y2goInN0YXJ0IiwiZW5kIikpKS5vbihuLHQpfSk7cmV0dXJuIHRoaXN9LE5zLnRyYW5zaXRpb249ZnVuY3Rpb24oKXtmb3IodmFyIG4sdCxlLHIsdT10aGlzLmlkLGk9KytMcyxvPVtdLGE9MCxjPXRoaXMubGVuZ3RoO2M+YTthKyspe28ucHVzaChuPVtdKTtmb3IodmFyIHQ9dGhpc1thXSxzPTAsbD10Lmxlbmd0aDtsPnM7cysrKShlPXRbc10pJiYocj1PYmplY3QuY3JlYXRlKGUuX190cmFuc2l0aW9uX19bdV0pLHIuZGVsYXkrPXIuZHVyYXRpb24sam8oZSxzLGkscikpLG4ucHVzaChlKX1yZXR1cm4gRG8obyxpKX0sWG8uc3ZnLmF4aXM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBuKG4pe24uZWFjaChmdW5jdGlvbigpe3ZhciBuLHM9WG8uc2VsZWN0KHRoaXMpLGw9dGhpcy5fX2NoYXJ0X198fGUsZj10aGlzLl9fY2hhcnRfXz1lLmNvcHkoKSxoPW51bGw9PWM/Zi50aWNrcz9mLnRpY2tzLmFwcGx5KGYsYSk6Zi5kb21haW4oKTpjLGc9bnVsbD09dD9mLnRpY2tGb3JtYXQ/Zi50aWNrRm9ybWF0LmFwcGx5KGYsYSk6YnQ6dCxwPXMuc2VsZWN0QWxsKCIudGljayIpLmRhdGEoaCxmKSx2PXAuZW50ZXIoKS5pbnNlcnQoImciLCIuZG9tYWluIikuYXR0cigiY2xhc3MiLCJ0aWNrIikuc3R5bGUoIm9wYWNpdHkiLEFhKSxkPVhvLnRyYW5zaXRpb24ocC5leGl0KCkpLnN0eWxlKCJvcGFjaXR5IixBYSkucmVtb3ZlKCksbT1Yby50cmFuc2l0aW9uKHApLnN0eWxlKCJvcGFjaXR5IiwxKSx5PVJpKGYpLHg9cy5zZWxlY3RBbGwoIi5kb21haW4iKS5kYXRhKFswXSksTT0oeC5lbnRlcigpLmFwcGVuZCgicGF0aCIpLmF0dHIoImNsYXNzIiwiZG9tYWluIiksWG8udHJhbnNpdGlvbih4KSk7di5hcHBlbmQoImxpbmUiKSx2LmFwcGVuZCgidGV4dCIpO3ZhciBfPXYuc2VsZWN0KCJsaW5lIiksYj1tLnNlbGVjdCgibGluZSIpLHc9cC5zZWxlY3QoInRleHQiKS50ZXh0KGcpLFM9di5zZWxlY3QoInRleHQiKSxrPW0uc2VsZWN0KCJ0ZXh0Iik7c3dpdGNoKHIpe2Nhc2UiYm90dG9tIjpuPUhvLF8uYXR0cigieTIiLHUpLFMuYXR0cigieSIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsdSksay5hdHRyKCJ4IiwwKS5hdHRyKCJ5IixNYXRoLm1heCh1LDApK28pLHcuYXR0cigiZHkiLCIuNzFlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsIm1pZGRsZSIpLE0uYXR0cigiZCIsIk0iK3lbMF0rIiwiK2krIlYwSCIreVsxXSsiViIraSk7YnJlYWs7Y2FzZSJ0b3AiOm49SG8sXy5hdHRyKCJ5MiIsLXUpLFMuYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSxiLmF0dHIoIngyIiwwKS5hdHRyKCJ5MiIsLXUpLGsuYXR0cigieCIsMCkuYXR0cigieSIsLShNYXRoLm1heCh1LDApK28pKSx3LmF0dHIoImR5IiwiMGVtIikuc3R5bGUoInRleHQtYW5jaG9yIiwibWlkZGxlIiksTS5hdHRyKCJkIiwiTSIreVswXSsiLCIrLWkrIlYwSCIreVsxXSsiViIrLWkpO2JyZWFrO2Nhc2UibGVmdCI6bj1GbyxfLmF0dHIoIngyIiwtdSksUy5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLGIuYXR0cigieDIiLC11KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4IiwtKE1hdGgubWF4KHUsMCkrbykpLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsImVuZCIpLE0uYXR0cigiZCIsIk0iKy1pKyIsIit5WzBdKyJIMFYiK3lbMV0rIkgiKy1pKTticmVhaztjYXNlInJpZ2h0IjpuPUZvLF8uYXR0cigieDIiLHUpLFMuYXR0cigieCIsTWF0aC5tYXgodSwwKStvKSxiLmF0dHIoIngyIix1KS5hdHRyKCJ5MiIsMCksay5hdHRyKCJ4IixNYXRoLm1heCh1LDApK28pLmF0dHIoInkiLDApLHcuYXR0cigiZHkiLCIuMzJlbSIpLnN0eWxlKCJ0ZXh0LWFuY2hvciIsInN0YXJ0IiksTS5hdHRyKCJkIiwiTSIraSsiLCIreVswXSsiSDBWIit5WzFdKyJIIitpKX1pZihmLnJhbmdlQmFuZCl7dmFyIEU9ZixBPUUucmFuZ2VCYW5kKCkvMjtsPWY9ZnVuY3Rpb24obil7cmV0dXJuIEUobikrQX19ZWxzZSBsLnJhbmdlQmFuZD9sPWY6ZC5jYWxsKG4sZik7di5jYWxsKG4sbCksbS5jYWxsKG4sZil9KX12YXIgdCxlPVhvLnNjYWxlLmxpbmVhcigpLHI9VHMsdT02LGk9NixvPTMsYT1bMTBdLGM9bnVsbDtyZXR1cm4gbi5zY2FsZT1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oZT10LG4pOmV9LG4ub3JpZW50PWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhyPXQgaW4gcXM/dCsiIjpUcyxuKTpyfSxuLnRpY2tzPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGE9YXJndW1lbnRzLG4pOmF9LG4udGlja1ZhbHVlcz1mdW5jdGlvbih0KXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8oYz10LG4pOmN9LG4udGlja0Zvcm1hdD1mdW5jdGlvbihlKXtyZXR1cm4gYXJndW1lbnRzLmxlbmd0aD8odD1lLG4pOnR9LG4udGlja1NpemU9ZnVuY3Rpb24odCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aDtyZXR1cm4gZT8odT0rdCxpPSthcmd1bWVudHNbZS0xXSxuKTp1fSxuLmlubmVyVGlja1NpemU9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHU9K3Qsbik6dX0sbi5vdXRlclRpY2tTaXplPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhpPSt0LG4pOml9LG4udGlja1BhZGRpbmc9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KG89K3Qsbik6b30sbi50aWNrU3ViZGl2aWRlPWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGgmJm59LG59O3ZhciBUcz0iYm90dG9tIixxcz17dG9wOjEscmlnaHQ6MSxib3R0b206MSxsZWZ0OjF9O1hvLnN2Zy5icnVzaD1mdW5jdGlvbigpe2Z1bmN0aW9uIG4oaSl7aS5lYWNoKGZ1bmN0aW9uKCl7dmFyIGk9WG8uc2VsZWN0KHRoaXMpLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsImFsbCIpLnN0eWxlKCItd2Via2l0LXRhcC1oaWdobGlnaHQtY29sb3IiLCJyZ2JhKDAsMCwwLDApIikub24oIm1vdXNlZG93bi5icnVzaCIsdSkub24oInRvdWNoc3RhcnQuYnJ1c2giLHUpLG89aS5zZWxlY3RBbGwoIi5iYWNrZ3JvdW5kIikuZGF0YShbMF0pO28uZW50ZXIoKS5hcHBlbmQoInJlY3QiKS5hdHRyKCJjbGFzcyIsImJhY2tncm91bmQiKS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLnN0eWxlKCJjdXJzb3IiLCJjcm9zc2hhaXIiKSxpLnNlbGVjdEFsbCgiLmV4dGVudCIpLmRhdGEoWzBdKS5lbnRlcigpLmFwcGVuZCgicmVjdCIpLmF0dHIoImNsYXNzIiwiZXh0ZW50Iikuc3R5bGUoImN1cnNvciIsIm1vdmUiKTt2YXIgYT1pLnNlbGVjdEFsbCgiLnJlc2l6ZSIpLmRhdGEocCxidCk7YS5leGl0KCkucmVtb3ZlKCksYS5lbnRlcigpLmFwcGVuZCgiZyIpLmF0dHIoImNsYXNzIixmdW5jdGlvbihuKXtyZXR1cm4icmVzaXplICIrbn0pLnN0eWxlKCJjdXJzb3IiLGZ1bmN0aW9uKG4pe3JldHVybiB6c1tuXX0pLmFwcGVuZCgicmVjdCIpLmF0dHIoIngiLGZ1bmN0aW9uKG4pe3JldHVybi9bZXddJC8udGVzdChuKT8tMzpudWxsfSkuYXR0cigieSIsZnVuY3Rpb24obil7cmV0dXJuL15bbnNdLy50ZXN0KG4pPy0zOm51bGx9KS5hdHRyKCJ3aWR0aCIsNikuYXR0cigiaGVpZ2h0Iiw2KS5zdHlsZSgidmlzaWJpbGl0eSIsImhpZGRlbiIpLGEuc3R5bGUoImRpc3BsYXkiLG4uZW1wdHkoKT8ibm9uZSI6bnVsbCk7dmFyIGwsZj1Yby50cmFuc2l0aW9uKGkpLGg9WG8udHJhbnNpdGlvbihvKTtjJiYobD1SaShjKSxoLmF0dHIoIngiLGxbMF0pLmF0dHIoIndpZHRoIixsWzFdLWxbMF0pLGUoZikpLHMmJihsPVJpKHMpLGguYXR0cigieSIsbFswXSkuYXR0cigiaGVpZ2h0IixsWzFdLWxbMF0pLHIoZikpLHQoZil9KX1mdW5jdGlvbiB0KG4pe24uc2VsZWN0QWxsKCIucmVzaXplIikuYXR0cigidHJhbnNmb3JtIixmdW5jdGlvbihuKXtyZXR1cm4idHJhbnNsYXRlKCIrbFsrL2UkLy50ZXN0KG4pXSsiLCIrZlsrL15zLy50ZXN0KG4pXSsiKSJ9KX1mdW5jdGlvbiBlKG4pe24uc2VsZWN0KCIuZXh0ZW50IikuYXR0cigieCIsbFswXSksbi5zZWxlY3RBbGwoIi5leHRlbnQsLm4+cmVjdCwucz5yZWN0IikuYXR0cigid2lkdGgiLGxbMV0tbFswXSl9ZnVuY3Rpb24gcihuKXtuLnNlbGVjdCgiLmV4dGVudCIpLmF0dHIoInkiLGZbMF0pLG4uc2VsZWN0QWxsKCIuZXh0ZW50LC5lPnJlY3QsLnc+cmVjdCIpLmF0dHIoImhlaWdodCIsZlsxXS1mWzBdKX1mdW5jdGlvbiB1KCl7ZnVuY3Rpb24gdSgpezMyPT1Yby5ldmVudC5rZXlDb2RlJiYoQ3x8KHg9bnVsbCxMWzBdLT1sWzFdLExbMV0tPWZbMV0sQz0yKSxkKCkpfWZ1bmN0aW9uIHAoKXszMj09WG8uZXZlbnQua2V5Q29kZSYmMj09QyYmKExbMF0rPWxbMV0sTFsxXSs9ZlsxXSxDPTAsZCgpKX1mdW5jdGlvbiB2KCl7dmFyIG49WG8ubW91c2UoXyksdT0hMTtNJiYoblswXSs9TVswXSxuWzFdKz1NWzFdKSxDfHwoWG8uZXZlbnQuYWx0S2V5Pyh4fHwoeD1bKGxbMF0rbFsxXSkvMiwoZlswXStmWzFdKS8yXSksTFswXT1sWysoblswXTx4WzBdKV0sTFsxXT1mWysoblsxXTx4WzFdKV0pOng9bnVsbCksRSYmbShuLGMsMCkmJihlKFMpLHU9ITApLEEmJm0obixzLDEpJiYocihTKSx1PSEwKSx1JiYodChTKSx3KHt0eXBlOiJicnVzaCIsbW9kZTpDPyJtb3ZlIjoicmVzaXplIn0pKX1mdW5jdGlvbiBtKG4sdCxlKXt2YXIgcix1LGE9UmkodCksYz1hWzBdLHM9YVsxXSxwPUxbZV0sdj1lP2Y6bCxkPXZbMV0tdlswXTtyZXR1cm4gQyYmKGMtPXAscy09ZCtwKSxyPShlP2c6aCk/TWF0aC5tYXgoYyxNYXRoLm1pbihzLG5bZV0pKTpuW2VdLEM/dT0ocis9cCkrZDooeCYmKHA9TWF0aC5tYXgoYyxNYXRoLm1pbihzLDIqeFtlXS1yKSkpLHI+cD8odT1yLHI9cCk6dT1wKSx2WzBdIT1yfHx2WzFdIT11PyhlP289bnVsbDppPW51bGwsdlswXT1yLHZbMV09dSwhMCk6dm9pZCAwfWZ1bmN0aW9uIHkoKXt2KCksUy5zdHlsZSgicG9pbnRlci1ldmVudHMiLCJhbGwiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbi5lbXB0eSgpPyJub25lIjpudWxsKSxYby5zZWxlY3QoImJvZHkiKS5zdHlsZSgiY3Vyc29yIixudWxsKSxULm9uKCJtb3VzZW1vdmUuYnJ1c2giLG51bGwpLm9uKCJtb3VzZXVwLmJydXNoIixudWxsKS5vbigidG91Y2htb3ZlLmJydXNoIixudWxsKS5vbigidG91Y2hlbmQuYnJ1c2giLG51bGwpLm9uKCJrZXlkb3duLmJydXNoIixudWxsKS5vbigia2V5dXAuYnJ1c2giLG51bGwpLE4oKSx3KHt0eXBlOiJicnVzaGVuZCJ9KX12YXIgeCxNLF89dGhpcyxiPVhvLnNlbGVjdChYby5ldmVudC50YXJnZXQpLHc9YS5vZihfLGFyZ3VtZW50cyksUz1Yby5zZWxlY3QoXyksaz1iLmRhdHVtKCksRT0hL14obnxzKSQvLnRlc3QoaykmJmMsQT0hL14oZXx3KSQvLnRlc3QoaykmJnMsQz1iLmNsYXNzZWQoImV4dGVudCIpLE49TygpLEw9WG8ubW91c2UoXyksVD1Yby5zZWxlY3QoR28pLm9uKCJrZXlkb3duLmJydXNoIix1KS5vbigia2V5dXAuYnJ1c2giLHApO2lmKFhvLmV2ZW50LmNoYW5nZWRUb3VjaGVzP1Qub24oInRvdWNobW92ZS5icnVzaCIsdikub24oInRvdWNoZW5kLmJydXNoIix5KTpULm9uKCJtb3VzZW1vdmUuYnJ1c2giLHYpLm9uKCJtb3VzZXVwLmJydXNoIix5KSxTLmludGVycnVwdCgpLnNlbGVjdEFsbCgiKiIpLmludGVycnVwdCgpLEMpTFswXT1sWzBdLUxbMF0sTFsxXT1mWzBdLUxbMV07ZWxzZSBpZihrKXt2YXIgcT0rL3ckLy50ZXN0KGspLHo9Ky9ebi8udGVzdChrKTtNPVtsWzEtcV0tTFswXSxmWzEtel0tTFsxXV0sTFswXT1sW3FdLExbMV09Zlt6XX1lbHNlIFhvLmV2ZW50LmFsdEtleSYmKHg9TC5zbGljZSgpKTtTLnN0eWxlKCJwb2ludGVyLWV2ZW50cyIsIm5vbmUiKS5zZWxlY3RBbGwoIi5yZXNpemUiKS5zdHlsZSgiZGlzcGxheSIsbnVsbCksWG8uc2VsZWN0KCJib2R5Iikuc3R5bGUoImN1cnNvciIsYi5zdHlsZSgiY3Vyc29yIikpLHcoe3R5cGU6ImJydXNoc3RhcnQifSksdigpfXZhciBpLG8sYT15KG4sImJydXNoc3RhcnQiLCJicnVzaCIsImJydXNoZW5kIiksYz1udWxsLHM9bnVsbCxsPVswLDBdLGY9WzAsMF0saD0hMCxnPSEwLHA9UnNbMF07cmV0dXJuIG4uZXZlbnQ9ZnVuY3Rpb24obil7bi5lYWNoKGZ1bmN0aW9uKCl7dmFyIG49YS5vZih0aGlzLGFyZ3VtZW50cyksdD17eDpsLHk6ZixpOmksajpvfSxlPXRoaXMuX19jaGFydF9ffHx0O3RoaXMuX19jaGFydF9fPXQsa3M/WG8uc2VsZWN0KHRoaXMpLnRyYW5zaXRpb24oKS5lYWNoKCJzdGFydC5icnVzaCIsZnVuY3Rpb24oKXtpPWUuaSxvPWUuaixsPWUueCxmPWUueSxuKHt0eXBlOiJicnVzaHN0YXJ0In0pfSkudHdlZW4oImJydXNoOmJydXNoIixmdW5jdGlvbigpe3ZhciBlPWh1KGwsdC54KSxyPWh1KGYsdC55KTtyZXR1cm4gaT1vPW51bGwsZnVuY3Rpb24odSl7bD10Lng9ZSh1KSxmPXQueT1yKHUpLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSl9fSkuZWFjaCgiZW5kLmJydXNoIixmdW5jdGlvbigpe2k9dC5pLG89dC5qLG4oe3R5cGU6ImJydXNoIixtb2RlOiJyZXNpemUifSksbih7dHlwZToiYnJ1c2hlbmQifSl9KToobih7dHlwZToiYnJ1c2hzdGFydCJ9KSxuKHt0eXBlOiJicnVzaCIsbW9kZToicmVzaXplIn0pLG4oe3R5cGU6ImJydXNoZW5kIn0pKX0pfSxuLng9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KGM9dCxwPVJzWyFjPDwxfCFzXSxuKTpjfSxuLnk9ZnVuY3Rpb24odCl7cmV0dXJuIGFyZ3VtZW50cy5sZW5ndGg/KHM9dCxwPVJzWyFjPDwxfCFzXSxuKTpzfSxuLmNsYW1wPWZ1bmN0aW9uKHQpe3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiZzPyhoPSEhdFswXSxnPSEhdFsxXSk6Yz9oPSEhdDpzJiYoZz0hIXQpLG4pOmMmJnM/W2gsZ106Yz9oOnM/ZzpudWxsfSxuLmV4dGVudD1mdW5jdGlvbih0KXt2YXIgZSxyLHUsYSxoO3JldHVybiBhcmd1bWVudHMubGVuZ3RoPyhjJiYoZT10WzBdLHI9dFsxXSxzJiYoZT1lWzBdLHI9clswXSksaT1bZSxyXSxjLmludmVydCYmKGU9YyhlKSxyPWMocikpLGU+ciYmKGg9ZSxlPXIscj1oKSwoZSE9bFswXXx8ciE9bFsxXSkmJihsPVtlLHJdKSkscyYmKHU9dFswXSxhPXRbMV0sYyYmKHU9dVsxXSxhPWFbMV0pLG89W3UsYV0scy5pbnZlcnQmJih1PXModSksYT1zKGEpKSx1PmEmJihoPXUsdT1hLGE9aCksKHUhPWZbMF18fGEhPWZbMV0pJiYoZj1bdSxhXSkpLG4pOihjJiYoaT8oZT1pWzBdLHI9aVsxXSk6KGU9bFswXSxyPWxbMV0sYy5pbnZlcnQmJihlPWMuaW52ZXJ0KGUpLHI9Yy5pbnZlcnQocikpLGU+ciYmKGg9ZSxlPXIscj1oKSkpLHMmJihvPyh1PW9bMF0sYT1vWzFdKToodT1mWzBdLGE9ZlsxXSxzLmludmVydCYmKHU9cy5pbnZlcnQodSksYT1zLmludmVydChhKSksdT5hJiYoaD11LHU9YSxhPWgpKSksYyYmcz9bW2UsdV0sW3IsYV1dOmM/W2Uscl06cyYmW3UsYV0pfSxuLmNsZWFyPWZ1bmN0aW9uKCl7cmV0dXJuIG4uZW1wdHkoKXx8KGw9WzAsMF0sZj1bMCwwXSxpPW89bnVsbCksbn0sbi5lbXB0eT1mdW5jdGlvbigpe3JldHVybiEhYyYmbFswXT09bFsxXXx8ISFzJiZmWzBdPT1mWzFdfSxYby5yZWJpbmQobixhLCJvbiIpfTt2YXIgenM9e246Im5zLXJlc2l6ZSIsZToiZXctcmVzaXplIixzOiJucy1yZXNpemUiLHc6ImV3LXJlc2l6ZSIsbnc6Im53c2UtcmVzaXplIixuZToibmVzdy1yZXNpemUiLHNlOiJud3NlLXJlc2l6ZSIsc3c6Im5lc3ctcmVzaXplIn0sUnM9W1sibiIsImUiLCJzIiwidyIsIm53IiwibmUiLCJzZSIsInN3Il0sWyJlIiwidyJdLFsibiIsInMiXSxbXV0sRHM9dGMuZm9ybWF0PWFjLnRpbWVGb3JtYXQsUHM9RHMudXRjLFVzPVBzKCIlWS0lbS0lZFQlSDolTTolUy4lTFoiKTtEcy5pc289RGF0ZS5wcm90b3R5cGUudG9JU09TdHJpbmcmJituZXcgRGF0ZSgiMjAwMC0wMS0wMVQwMDowMDowMC4wMDBaIik/T286VXMsT28ucGFyc2U9ZnVuY3Rpb24obil7dmFyIHQ9bmV3IERhdGUobik7cmV0dXJuIGlzTmFOKHQpP251bGw6dH0sT28udG9TdHJpbmc9VXMudG9TdHJpbmcsdGMuc2Vjb25kPVJ0KGZ1bmN0aW9uKG4pe3JldHVybiBuZXcgZWMoMWUzKk1hdGguZmxvb3Iobi8xZTMpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMWUzKk1hdGguZmxvb3IodCkpfSxmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRTZWNvbmRzKCl9KSx0Yy5zZWNvbmRzPXRjLnNlY29uZC5yYW5nZSx0Yy5zZWNvbmRzLnV0Yz10Yy5zZWNvbmQudXRjLnJhbmdlLHRjLm1pbnV0ZT1SdChmdW5jdGlvbihuKXtyZXR1cm4gbmV3IGVjKDZlNCpNYXRoLmZsb29yKG4vNmU0KSl9LGZ1bmN0aW9uKG4sdCl7bi5zZXRUaW1lKG4uZ2V0VGltZSgpKzZlNCpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfSksdGMubWludXRlcz10Yy5taW51dGUucmFuZ2UsdGMubWludXRlcy51dGM9dGMubWludXRlLnV0Yy5yYW5nZSx0Yy5ob3VyPVJ0KGZ1bmN0aW9uKG4pe3ZhciB0PW4uZ2V0VGltZXpvbmVPZmZzZXQoKS82MDtyZXR1cm4gbmV3IGVjKDM2ZTUqKE1hdGguZmxvb3Iobi8zNmU1LXQpK3QpKX0sZnVuY3Rpb24obix0KXtuLnNldFRpbWUobi5nZXRUaW1lKCkrMzZlNSpNYXRoLmZsb29yKHQpKX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX0pLHRjLmhvdXJzPXRjLmhvdXIucmFuZ2UsdGMuaG91cnMudXRjPXRjLmhvdXIudXRjLnJhbmdlLHRjLm1vbnRoPVJ0KGZ1bmN0aW9uKG4pe3JldHVybiBuPXRjLmRheShuKSxuLnNldERhdGUoMSksbn0sZnVuY3Rpb24obix0KXtuLnNldE1vbnRoKG4uZ2V0TW9udGgoKSt0KX0sZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TW9udGgoKX0pLHRjLm1vbnRocz10Yy5tb250aC5yYW5nZSx0Yy5tb250aHMudXRjPXRjLm1vbnRoLnV0Yy5yYW5nZTt2YXIganM9WzFlMyw1ZTMsMTVlMywzZTQsNmU0LDNlNSw5ZTUsMThlNSwzNmU1LDEwOGU1LDIxNmU1LDQzMmU1LDg2NGU1LDE3MjhlNSw2MDQ4ZTUsMjU5MmU2LDc3NzZlNiwzMTUzNmU2XSxIcz1bW3RjLnNlY29uZCwxXSxbdGMuc2Vjb25kLDVdLFt0Yy5zZWNvbmQsMTVdLFt0Yy5zZWNvbmQsMzBdLFt0Yy5taW51dGUsMV0sW3RjLm1pbnV0ZSw1XSxbdGMubWludXRlLDE1XSxbdGMubWludXRlLDMwXSxbdGMuaG91ciwxXSxbdGMuaG91ciwzXSxbdGMuaG91ciw2XSxbdGMuaG91ciwxMl0sW3RjLmRheSwxXSxbdGMuZGF5LDJdLFt0Yy53ZWVrLDFdLFt0Yy5tb250aCwxXSxbdGMubW9udGgsM10sW3RjLnllYXIsMV1dLEZzPURzLm11bHRpKFtbIi4lTCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWlsbGlzZWNvbmRzKCl9XSxbIjolUyIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0U2Vjb25kcygpfV0sWyIlSTolTSIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0TWludXRlcygpfV0sWyIlSSAlcCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0SG91cnMoKX1dLFsiJWEgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldERheSgpJiYxIT1uLmdldERhdGUoKX1dLFsiJWIgJWQiLGZ1bmN0aW9uKG4pe3JldHVybiAxIT1uLmdldERhdGUoKX1dLFsiJUIiLGZ1bmN0aW9uKG4pe3JldHVybiBuLmdldE1vbnRoKCl9XSxbIiVZIixiZV1dKSxPcz17cmFuZ2U6ZnVuY3Rpb24obix0LGUpe3JldHVybiBYby5yYW5nZShNYXRoLmNlaWwobi9lKSplLCt0LGUpLm1hcChJbyl9LGZsb29yOmJ0LGNlaWw6YnR9O0hzLnllYXI9dGMueWVhcix0Yy5zY2FsZT1mdW5jdGlvbigpe3JldHVybiBZbyhYby5zY2FsZS5saW5lYXIoKSxIcyxGcyl9O3ZhciBZcz1Icy5tYXAoZnVuY3Rpb24obil7cmV0dXJuW25bMF0udXRjLG5bMV1dfSksSXM9UHMubXVsdGkoW1siLiVMIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaWxsaXNlY29uZHMoKX1dLFsiOiVTIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENTZWNvbmRzKCl9XSxbIiVJOiVNIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENNaW51dGVzKCl9XSxbIiVJICVwIixmdW5jdGlvbihuKXtyZXR1cm4gbi5nZXRVVENIb3VycygpfV0sWyIlYSAlZCIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDRGF5KCkmJjEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlYiAlZCIsZnVuY3Rpb24obil7cmV0dXJuIDEhPW4uZ2V0VVRDRGF0ZSgpfV0sWyIlQiIsZnVuY3Rpb24obil7cmV0dXJuIG4uZ2V0VVRDTW9udGgoKX1dLFsiJVkiLGJlXV0pO1lzLnllYXI9dGMueWVhci51dGMsdGMuc2NhbGUudXRjPWZ1bmN0aW9uKCl7cmV0dXJuIFlvKFhvLnNjYWxlLmxpbmVhcigpLFlzLElzKX0sWG8udGV4dD13dChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVRleHR9KSxYby5qc29uPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFN0KG4sImFwcGxpY2F0aW9uL2pzb24iLFpvLHQpfSxYby5odG1sPWZ1bmN0aW9uKG4sdCl7cmV0dXJuIFN0KG4sInRleHQvaHRtbCIsVm8sdCl9LFhvLnhtbD13dChmdW5jdGlvbihuKXtyZXR1cm4gbi5yZXNwb25zZVhNTH0pLCJmdW5jdGlvbiI9PXR5cGVvZiBkZWZpbmUmJmRlZmluZS5hbWQ/ZGVmaW5lKFhvKToib2JqZWN0Ij09dHlwZW9mIG1vZHVsZSYmbW9kdWxlLmV4cG9ydHM/bW9kdWxlLmV4cG9ydHM9WG86dGhpcy5kMz1Yb30oKTsndXNlIHN0cmljdCc7KGZ1bmN0aW9uKHdpbmRvdyl7d2luZG93LmRlZmluZT11bmRlZmluZWQ7fSkuY2FsbCh0aGlzLHRoaXMpOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBEYXRhU2VyaWVzRW5hYmxlQ2hhbmdlRXZlbnRUeXBlPSdkYXRhLXNlcmllcy1lbmFibGVkLWNoYW5nZSc7Y29uc3QgVEhJU19ET0M9ZG9jdW1lbnQuX2N1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudDtjb25zdCBzdmdOUz0naHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnO2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7ZnVuY3Rpb24gZ2V0Q29sb3JPZktleShrZXksc2VsZWN0ZWQpe2xldCBpZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yR2VuZXJhbFB1cnBvc2VTdHJpbmcoa2V5KTtpZihzZWxlY3RlZCl7aWQrPUNvbG9yU2NoZW1lLnByb3BlcnRpZXMuYnJpZ2h0ZW5lZE9mZnNldHNbMF07fQpyZXR1cm4gQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW2lkXTt9CmZ1bmN0aW9uIGdldFNWR1RleHRTaXplKHBhcmVudE5vZGUsdGV4dCxvcHRfY2FsbGJhY2ssb3B0X3RoaXMpe2NvbnN0IHRleHROb2RlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUygnaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmcnLCd0ZXh0Jyk7dGV4dE5vZGUuc2V0QXR0cmlidXRlTlMobnVsbCwneCcsMCk7dGV4dE5vZGUuc2V0QXR0cmlidXRlTlMobnVsbCwneScsMCk7dGV4dE5vZGUuc2V0QXR0cmlidXRlTlMobnVsbCwnZmlsbCcsJ2JsYWNrJyk7dGV4dE5vZGUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodGV4dCkpO3BhcmVudE5vZGUuYXBwZW5kQ2hpbGQodGV4dE5vZGUpO2lmKG9wdF9jYWxsYmFjayl7b3B0X2NhbGxiYWNrLmNhbGwob3B0X3RoaXN8fHBhcmVudE5vZGUsdGV4dE5vZGUpO30KY29uc3Qgd2lkdGg9dGV4dE5vZGUuZ2V0Q29tcHV0ZWRUZXh0TGVuZ3RoKCk7Y29uc3QgaGVpZ2h0PXRleHROb2RlLmdldEJCb3goKS5oZWlnaHQ7cGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0ZXh0Tm9kZSk7cmV0dXJue3dpZHRoLGhlaWdodH07fQpmdW5jdGlvbiBEYXRhU2VyaWVzKGtleSl7dGhpcy5rZXlfPWtleTt0aGlzLnRhcmdldF89dW5kZWZpbmVkO3RoaXMudGl0bGVfPScnO3RoaXMub3B0aW9uYWxfPWZhbHNlO3RoaXMuZW5hYmxlZF89dHJ1ZTt0aGlzLmNvbG9yXz1nZXRDb2xvck9mS2V5KGtleSxmYWxzZSk7dGhpcy5oaWdobGlnaHRlZENvbG9yXz1nZXRDb2xvck9mS2V5KGtleSx0cnVlKTt9CkRhdGFTZXJpZXMucHJvdG90eXBlPXtnZXQga2V5KCl7cmV0dXJuIHRoaXMua2V5Xzt9LGdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9LHNldCB0aXRsZSh0KXt0aGlzLnRpdGxlXz10O30sZ2V0IGNvbG9yKCl7cmV0dXJuIHRoaXMuY29sb3JfO30sc2V0IGNvbG9yKGMpe3RoaXMuY29sb3JfPWM7fSxnZXQgaGlnaGxpZ2h0ZWRDb2xvcigpe3JldHVybiB0aGlzLmhpZ2hsaWdodGVkQ29sb3JfO30sc2V0IGhpZ2hsaWdodGVkQ29sb3IoYyl7dGhpcy5oaWdobGlnaHRlZENvbG9yXz1jO30sZ2V0IG9wdGlvbmFsKCl7cmV0dXJuIHRoaXMub3B0aW9uYWxfO30sc2V0IG9wdGlvbmFsKG9wdGlvbmFsKXt0aGlzLm9wdGlvbmFsXz1vcHRpb25hbDt9LGdldCBlbmFibGVkKCl7cmV0dXJuIHRoaXMuZW5hYmxlZF87fSxzZXQgZW5hYmxlZChlbmFibGVkKXtpZighdGhpcy5vcHRpb25hbCYmIWVuYWJsZWQpe3RoaXMub3B0aW9uYWw9dHJ1ZTt9CnRoaXMuZW5hYmxlZF89ZW5hYmxlZDt9LGdldCB0YXJnZXQoKXtyZXR1cm4gdGhpcy50YXJnZXRfO30sc2V0IHRhcmdldCh0KXt0aGlzLnRhcmdldF89dDt9fTtjb25zdCBDaGFydEJhc2U9dHIudWkuYi5kZWZpbmUoJ3N2ZycsdW5kZWZpbmVkLHN2Z05TKTtDaGFydEJhc2UucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTFVua25vd25FbGVtZW50LnByb3RvdHlwZSxnZXREYXRhU2VyaWVzKGtleSl7aWYoIXRoaXMuc2VyaWVzQnlLZXlfLmhhcyhrZXkpKXt0aGlzLnNlcmllc0J5S2V5Xy5zZXQoa2V5LG5ldyBEYXRhU2VyaWVzKGtleSkpO30KcmV0dXJuIHRoaXMuc2VyaWVzQnlLZXlfLmdldChrZXkpO30sZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjaGFydC1iYXNlJyk7dGhpcy5zZXRBdHRyaWJ1dGUoJ3N0eWxlJywnY3Vyc29yOiBkZWZhdWx0OyB1c2VyLXNlbGVjdDogbm9uZTsnKTt0aGlzLmNoYXJ0VGl0bGVfPXVuZGVmaW5lZDt0aGlzLnNlcmllc0J5S2V5Xz1uZXcgTWFwKCk7dGhpcy5ncmFwaFdpZHRoXz11bmRlZmluZWQ7dGhpcy5ncmFwaEhlaWdodF89dW5kZWZpbmVkO3RoaXMubWFyZ2luPXt0b3A6MCxyaWdodDowLGJvdHRvbTowLGxlZnQ6MCx9O3RoaXMuaGlkZUxlZ2VuZF89ZmFsc2U7dGhpcy5zaG93VGl0bGVJbkxlZ2VuZF89ZmFsc2U7dGhpcy50aXRsZUhlaWdodF89JzE2cHQnO2NvbnN0IHRlbXBsYXRlPVBvbHltZXIuZG9tKFRISVNfRE9DKS5xdWVyeVNlbGVjdG9yKCcjY2hhcnQtYmFzZS10ZW1wbGF0ZScpO2NvbnN0IHN2Z0VsPVBvbHltZXIuZG9tKHRlbXBsYXRlLmNvbnRlbnQpLnF1ZXJ5U2VsZWN0b3IoJ3N2ZycpO2ZvcihsZXQgaT0wO2k8UG9seW1lci5kb20oc3ZnRWwpLmNoaWxkcmVuLmxlbmd0aDtpKyspe1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKFBvbHltZXIuZG9tKHN2Z0VsLmNoaWxkcmVuW2ldKS5jbG9uZU5vZGUodHJ1ZSkpO30KdGhpcy5hZGRFdmVudExpc3RlbmVyKERhdGFTZXJpZXNFbmFibGVDaGFuZ2VFdmVudFR5cGUsdGhpcy5vbkRhdGFTZXJpZXNFbmFibGVDaGFuZ2VfLmJpbmQodGhpcykpO30sZ2V0IGhpZGVMZWdlbmQoKXtyZXR1cm4gdGhpcy5oaWRlTGVnZW5kXzt9LHNldCBoaWRlTGVnZW5kKGgpe3RoaXMuaGlkZUxlZ2VuZF89aDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dUaXRsZUluTGVnZW5kKCl7cmV0dXJuIHRoaXMuc2hvd1RpdGxlSW5MZWdlbmRfO30sc2V0IHNob3dUaXRsZUluTGVnZW5kKHMpe3RoaXMuc2hvd1RpdGxlSW5MZWdlbmRfPXM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGlzU2VyaWVzRW5hYmxlZChrZXkpe3JldHVybiB0aGlzLmdldERhdGFTZXJpZXMoa2V5KS5lbmFibGVkO30sb25EYXRhU2VyaWVzRW5hYmxlQ2hhbmdlXyhldmVudCl7dGhpcy5nZXREYXRhU2VyaWVzKGV2ZW50LmtleSkuZW5hYmxlZD1ldmVudC5lbmFibGVkO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgY2hhcnRUaXRsZSgpe3JldHVybiB0aGlzLmNoYXJ0VGl0bGVfO30sc2V0IGNoYXJ0VGl0bGUoY2hhcnRUaXRsZSl7dGhpcy5jaGFydFRpdGxlXz1jaGFydFRpdGxlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgY2hhcnRBcmVhRWxlbWVudCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjY2hhcnQtYXJlYScpO30sZ2V0IGdyYXBoV2lkdGgoKXtpZih0aGlzLmdyYXBoV2lkdGhfPT09dW5kZWZpbmVkKXJldHVybiB0aGlzLmRlZmF1bHRHcmFwaFdpZHRoO3JldHVybiB0aGlzLmdyYXBoV2lkdGhfO30sc2V0IGdyYXBoV2lkdGgod2lkdGgpe3RoaXMuZ3JhcGhXaWR0aF89d2lkdGg7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBkZWZhdWx0R3JhcGhXaWR0aCgpe3JldHVybiAwO30sZ2V0IGdyYXBoSGVpZ2h0KCl7aWYodGhpcy5ncmFwaEhlaWdodF89PT11bmRlZmluZWQpcmV0dXJuIHRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0O3JldHVybiB0aGlzLmdyYXBoSGVpZ2h0Xzt9LHNldCBncmFwaEhlaWdodChoZWlnaHQpe3RoaXMuZ3JhcGhIZWlnaHRfPWhlaWdodDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHRpdGxlSGVpZ2h0KCl7cmV0dXJuIHRoaXMudGl0bGVIZWlnaHRfO30sc2V0IHRpdGxlSGVpZ2h0KGhlaWdodCl7dGhpcy50aXRsZUhlaWdodF89aGVpZ2h0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGVmYXVsdEdyYXBoSGVpZ2h0KCl7cmV0dXJuIDA7fSxnZXQgdG90YWxXaWR0aCgpe3JldHVybiB0aGlzLm1hcmdpbi5sZWZ0K3RoaXMuZ3JhcGhXaWR0aCt0aGlzLm1hcmdpbi5yaWdodDt9LGdldCB0b3RhbEhlaWdodCgpe3JldHVybiB0aGlzLm1hcmdpbi50b3ArdGhpcy5ncmFwaEhlaWdodCt0aGlzLm1hcmdpbi5ib3R0b207fSx1cGRhdGVNYXJnaW5zXygpe2NvbnN0IGxlZ2VuZFNpemU9dGhpcy5jb21wdXRlTGVnZW5kU2l6ZV8oKTt0aGlzLm1hcmdpbi5yaWdodD1NYXRoLm1heCh0aGlzLm1hcmdpbi5yaWdodCxsZWdlbmRTaXplLndpZHRoKTt0aGlzLm1hcmdpbi5ib3R0b209TWF0aC5tYXgodGhpcy5tYXJnaW4uYm90dG9tLGxlZ2VuZFNpemUuaGVpZ2h0LXRoaXMuZ3JhcGhIZWlnaHQpO2lmKHRoaXMuY2hhcnRUaXRsZV8pe2NvbnN0IHRpdGxlU2l6ZT1nZXRTVkdUZXh0U2l6ZSh0aGlzLHRoaXMuY2hhcnRUaXRsZV8sdGV4dE5vZGU9Pnt0ZXh0Tm9kZS5zdHlsZS5mb250U2l6ZT0nMTZwdCc7fSk7dGhpcy5tYXJnaW4udG9wPU1hdGgubWF4KHRoaXMubWFyZ2luLnRvcCx0aXRsZVNpemUuaGVpZ2h0KzE1KTtjb25zdCBob3Jpem9udGFsT3ZlcmhhbmdQeD0odGl0bGVTaXplLndpZHRoLXRoaXMuZ3JhcGhXaWR0aCkvMjt0aGlzLm1hcmdpbi5sZWZ0PU1hdGgubWF4KHRoaXMubWFyZ2luLmxlZnQsaG9yaXpvbnRhbE92ZXJoYW5nUHgpO3RoaXMubWFyZ2luLnJpZ2h0PU1hdGgubWF4KHRoaXMubWFyZ2luLnJpZ2h0LGhvcml6b250YWxPdmVyaGFuZ1B4KTt9fSxjb21wdXRlTGVnZW5kU2l6ZV8oKXtsZXQgd2lkdGg9MDtsZXQgaGVpZ2h0PTA7aWYodGhpcy5oaWRlTGVnZW5kKXJldHVybnt3aWR0aCxoZWlnaHR9O2xldCBzZXJpZXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLnZhbHVlcygpXTtpZih0aGlzLnNob3dUaXRsZUluTGVnZW5kKXtzZXJpZXM9c2VyaWVzLmZpbHRlcihzZXJpZXM9PnNlcmllcy50aXRsZSE9PScnKTt9CmZvcihjb25zdCBzZXJpZXNFbnRyeSBvZiBzZXJpZXMpe2NvbnN0IGxlZ2VuZFRleHQ9dGhpcy5zaG93VGl0bGVJbkxlZ2VuZD9zZXJpZXNFbnRyeS50aXRsZTpzZXJpZXNFbnRyeS5rZXk7Y29uc3QgdGV4dFNpemU9Z2V0U1ZHVGV4dFNpemUodGhpcyxsZWdlbmRUZXh0KTt3aWR0aD1NYXRoLm1heCh3aWR0aCx0ZXh0U2l6ZS53aWR0aCszMCk7aGVpZ2h0Kz10ZXh0U2l6ZS5oZWlnaHQ7fQpyZXR1cm57d2lkdGgsaGVpZ2h0fTt9LHVwZGF0ZURpbWVuc2lvbnNfKCl7Y29uc3QgdGhpc1NlbD1kMy5zZWxlY3QodGhpcyk7dGhpc1NlbC5hdHRyKCd3aWR0aCcsdGhpcy50b3RhbFdpZHRoKTt0aGlzU2VsLmF0dHIoJ2hlaWdodCcsdGhpcy50b3RhbEhlaWdodCk7ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCkuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKCcrdGhpcy5tYXJnaW4ubGVmdCsnLCAnK3RoaXMubWFyZ2luLnRvcCsnKScpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy51cGRhdGVNYXJnaW5zXygpO3RoaXMudXBkYXRlRGltZW5zaW9uc18oKTt0aGlzLnVwZGF0ZVRpdGxlXygpO3RoaXMudXBkYXRlTGVnZW5kXygpO30sdXBkYXRlVGl0bGVfKCl7Y29uc3QgdGl0bGVTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCkuc2VsZWN0KCcjdGl0bGUnKTtpZighdGhpcy5jaGFydFRpdGxlXyl7dGl0bGVTZWwuc3R5bGUoJ2Rpc3BsYXknLCdub25lJyk7cmV0dXJuO30KdGl0bGVTZWwuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKCcrdGhpcy5ncmFwaFdpZHRoKjAuNSsnLC0xNSknKS5zdHlsZSgnZGlzcGxheScsdW5kZWZpbmVkKS5zdHlsZSgndGV4dC1hbmNob3InLCdtaWRkbGUnKS5zdHlsZSgnZm9udC1zaXplJyx0aGlzLnRpdGxlSGVpZ2h0KS5hdHRyKCdjbGFzcycsJ3RpdGxlJykuYXR0cignd2lkdGgnLHRoaXMuZ3JhcGhXaWR0aCkudGV4dCh0aGlzLmNoYXJ0VGl0bGVfKTt9LHVwZGF0ZUxlZ2VuZF8oKXtjb25zdCBjaGFydEFyZWFTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCk7Y2hhcnRBcmVhU2VsLnNlbGVjdEFsbCgnLmxlZ2VuZCcpLnJlbW92ZSgpO2lmKHRoaXMuaGlkZUxlZ2VuZClyZXR1cm47bGV0IHNlcmllcztsZXQgc2VyaWVzVGV4dDtpZih0aGlzLnNob3dUaXRsZUluTGVnZW5kKXtzZXJpZXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLnZhbHVlcygpXS5maWx0ZXIoc2VyaWVzPT5zZXJpZXMudGl0bGUhPT0nJykuZmlsdGVyKHNlcmllcz0+c2VyaWVzLmNvbG9yIT09J3RyYW5zcGFyZW50JykucmV2ZXJzZSgpO3Nlcmllc1RleHQ9c2VyaWVzPT5zZXJpZXMudGl0bGU7fWVsc2V7c2VyaWVzPVsuLi50aGlzLnNlcmllc0J5S2V5Xy52YWx1ZXMoKV0uZmlsdGVyKHNlcmllcz0+c2VyaWVzLmNvbG9yIT09J3RyYW5zcGFyZW50JykucmV2ZXJzZSgpO3Nlcmllc1RleHQ9c2VyaWVzPT5zZXJpZXMua2V5O30KY29uc3QgbGVnZW5kRW50cmllc1NlbD1jaGFydEFyZWFTZWwuc2VsZWN0QWxsKCcubGVnZW5kJykuZGF0YShzZXJpZXMpO2xlZ2VuZEVudHJpZXNTZWwuZW50ZXIoKS5hcHBlbmQoJ2ZvcmVpZ25PYmplY3QnKS5hdHRyKCdjbGFzcycsJ2xlZ2VuZCcpLmF0dHIoJ3gnLHRoaXMuZ3JhcGhXaWR0aCsyKS5hdHRyKCd3aWR0aCcsdGhpcy5tYXJnaW4ucmlnaHQpLmF0dHIoJ2hlaWdodCcsMTgpLmF0dHIoJ3RyYW5zZm9ybScsKHNlcmllcyxpKT0+J3RyYW5zbGF0ZSgwLCcraSoxOCsnKScpLmFwcGVuZCgneGh0bWw6Ym9keScpLnN0eWxlKCdtYXJnaW4nLDApLmFwcGVuZCgndHItdWktYi1jaGFydC1sZWdlbmQta2V5JykucHJvcGVydHkoJ2NvbG9yJyxzZXJpZXM9PigodGhpcy5jdXJyZW50SGlnaGxpZ2h0ZWRMZWdlbmRLZXk9PT1zZXJpZXMua2V5KT9zZXJpZXMuaGlnaGxpZ2h0ZWRDb2xvcjpzZXJpZXMuY29sb3IpKS5wcm9wZXJ0eSgnd2lkdGgnLHRoaXMubWFyZ2luLnJpZ2h0KS5wcm9wZXJ0eSgndGFyZ2V0JyxzZXJpZXM9PnNlcmllcy50YXJnZXQpLnByb3BlcnR5KCd0aXRsZScsc2VyaWVzPT5zZXJpZXMudGl0bGUpLnByb3BlcnR5KCdvcHRpb25hbCcsc2VyaWVzPT5zZXJpZXMub3B0aW9uYWwpLnByb3BlcnR5KCdlbmFibGVkJyxzZXJpZXM9PnNlcmllcy5lbmFibGVkKS50ZXh0KHNlcmllc1RleHQpO2xlZ2VuZEVudHJpZXNTZWwuZXhpdCgpLnJlbW92ZSgpO30sZ2V0IGhpZ2hsaWdodGVkTGVnZW5kS2V5KCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0ZWRMZWdlbmRLZXlfO30sc2V0IGhpZ2hsaWdodGVkTGVnZW5kS2V5KGhpZ2hsaWdodGVkTGVnZW5kS2V5KXt0aGlzLmhpZ2hsaWdodGVkTGVnZW5kS2V5Xz1oaWdobGlnaHRlZExlZ2VuZEtleTt0aGlzLnVwZGF0ZUhpZ2hsaWdodF8oKTt9LGdldCBjdXJyZW50SGlnaGxpZ2h0ZWRMZWdlbmRLZXkoKXtpZih0aGlzLnRlbXBIaWdobGlnaHRlZExlZ2VuZEtleV8pe3JldHVybiB0aGlzLnRlbXBIaWdobGlnaHRlZExlZ2VuZEtleV87fQpyZXR1cm4gdGhpcy5oaWdobGlnaHRlZExlZ2VuZEtleV87fSxwdXNoVGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5KGtleSl7aWYodGhpcy50ZW1wSGlnaGxpZ2h0ZWRMZWdlbmRLZXlfKXt0aHJvdyBuZXcgRXJyb3IoJ3B1c2ggY2Fubm90IG5lc3QnKTt9CnRoaXMudGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5Xz1rZXk7dGhpcy51cGRhdGVIaWdobGlnaHRfKCk7fSxwb3BUZW1wSGlnaGxpZ2h0ZWRMZWdlbmRLZXkoa2V5KXtpZih0aGlzLnRlbXBIaWdobGlnaHRlZExlZ2VuZEtleV8hPT1rZXkpe3Rocm93IG5ldyBFcnJvcigncG9wIGNhbm5vdCBoYXBwZW4nKTt9CnRoaXMudGVtcEhpZ2hsaWdodGVkTGVnZW5kS2V5Xz11bmRlZmluZWQ7dGhpcy51cGRhdGVIaWdobGlnaHRfKCk7fSx1cGRhdGVIaWdobGlnaHRfKCl7Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO2NvbnN0IGxlZ2VuZEVudHJpZXNTZWw9Y2hhcnRBcmVhU2VsLnNlbGVjdEFsbCgnLmxlZ2VuZCcpO2NvbnN0IGdldERhdGFTZXJpZXM9Y2hhcnQuZ2V0RGF0YVNlcmllcy5iaW5kKGNoYXJ0KTtjb25zdCBjdXJyZW50SGlnaGxpZ2h0ZWRMZWdlbmRLZXk9Y2hhcnQuY3VycmVudEhpZ2hsaWdodGVkTGVnZW5kS2V5O2xlZ2VuZEVudHJpZXNTZWwuZWFjaChmdW5jdGlvbihrZXkpe2NvbnN0IGRhdGFTZXJpZXM9Z2V0RGF0YVNlcmllcyhrZXkpO2lmKGtleT09PWN1cnJlbnRIaWdobGlnaHRlZExlZ2VuZEtleSl7dGhpcy5zdHlsZS5maWxsPWRhdGFTZXJpZXMuaGlnaGxpZ2h0ZWRDb2xvcjt0aGlzLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO31lbHNle3RoaXMuc3R5bGUuZmlsbD1kYXRhU2VyaWVzLmNvbG9yO3RoaXMuc3R5bGUuZm9udFdlaWdodD0nJzt9fSk7fX07cmV0dXJue0NoYXJ0QmFzZSxEYXRhU2VyaWVzRW5hYmxlQ2hhbmdlRXZlbnRUeXBlLGdldENvbG9yT2ZLZXksZ2V0U1ZHVGV4dFNpemUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgRDNfWV9BWElTX1dJRFRIX1BYPTk7Y29uc3QgRDNfWF9BWElTX0hFSUdIVF9QWD0yMztmdW5jdGlvbiBzYW5pdGl6ZVBvd2VyKHgsZGVmYXVsdFZhbHVlKXtpZighaXNOYU4oeCkmJmlzRmluaXRlKHgpJiYoeCE9PTApKXJldHVybiB4O3JldHVybiBkZWZhdWx0VmFsdWU7fQpjb25zdCBDaGFydEJhc2UyRD10ci51aS5iLmRlZmluZSgnY2hhcnQtYmFzZS0yZCcsdHIudWkuYi5DaGFydEJhc2UpO0NoYXJ0QmFzZTJELnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQ2hhcnRCYXNlLnByb3RvdHlwZSxkZWNvcmF0ZSgpe3N1cGVyLmRlY29yYXRlKCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnY2hhcnQtYmFzZS0yZCcpO3RoaXMueFNjYWxlXz1kMy5zY2FsZS5saW5lYXIoKTt0aGlzLnlTY2FsZV89ZDMuc2NhbGUubGluZWFyKCk7dGhpcy5pc1lMb2dTY2FsZV89ZmFsc2U7dGhpcy55TG9nU2NhbGVCYXNlXz0xMDt0aGlzLnlMb2dTY2FsZU1pbl89dW5kZWZpbmVkO3RoaXMuYXV0b0RhdGFSYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfPXVuZGVmaW5lZDt0aGlzLmhpZGVYQXhpc189ZmFsc2U7dGhpcy5oaWRlWUF4aXNfPWZhbHNlO3RoaXMuZGF0YV89W107dGhpcy54QXhpc0xhYmVsXz0nJzt0aGlzLnlBeGlzTGFiZWxfPScnO3RoaXMudGV4dEhlaWdodFB4Xz0wO3RoaXMudW5pdF89dW5kZWZpbmVkO2QzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpLmFwcGVuZCgnZycpLmF0dHIoJ2lkJywnYnJ1c2hlcycpO2QzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpLmFwcGVuZCgnZycpLmF0dHIoJ2lkJywnc2VyaWVzJyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWRvd24nLHRoaXMub25Nb3VzZURvd25fLmJpbmQodGhpcykpO30sZ2V0IHlMb2dTY2FsZUJhc2UoKXtyZXR1cm4gdGhpcy55TG9nU2NhbGVCYXNlXzt9LHNldCB5TG9nU2NhbGVCYXNlKGIpe3RoaXMueUxvZ1NjYWxlQmFzZV89Yjt9LGdldCB1bml0KCl7cmV0dXJuIHRoaXMudW5pdF87fSxzZXQgdW5pdCh1bml0KXt0aGlzLnVuaXRfPXVuaXQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB4QXhpc0xhYmVsKCl7cmV0dXJuIHRoaXMueEF4aXNMYWJlbF87fSxzZXQgeEF4aXNMYWJlbChsYWJlbCl7dGhpcy54QXhpc0xhYmVsXz1sYWJlbDt9LGdldCB5QXhpc0xhYmVsKCl7cmV0dXJuIHRoaXMueUF4aXNMYWJlbF87fSxzZXQgeUF4aXNMYWJlbChsYWJlbCl7dGhpcy55QXhpc0xhYmVsXz1sYWJlbDt9LGdldCBoaWRlWEF4aXMoKXtyZXR1cm4gdGhpcy5oaWRlWEF4aXNfO30sc2V0IGhpZGVYQXhpcyhoKXt0aGlzLmhpZGVYQXhpc189aDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhpZGVZQXhpcygpe3JldHVybiB0aGlzLmhpZGVZQXhpc187fSxzZXQgaGlkZVlBeGlzKGgpe3RoaXMuaGlkZVlBeGlzXz1oO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGF0YSgpe3JldHVybiB0aGlzLmRhdGFfO30sc2V0IGRhdGEoZGF0YSl7aWYoZGF0YT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdkYXRhIG11c3QgYmUgYW4gQXJyYXknKTt9CnRoaXMuZGF0YV89ZGF0YTt0aGlzLnVwZGF0ZVNlcmllc0tleXNfKCk7dGhpcy51cGRhdGVEYXRhUmFuZ2VfKCk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBpc1lMb2dTY2FsZShsb2dTY2FsZSl7aWYobG9nU2NhbGUpe3RoaXMueVNjYWxlXz1kMy5zY2FsZS5sb2coKS5iYXNlKHRoaXMueUxvZ1NjYWxlQmFzZSk7fWVsc2V7dGhpcy55U2NhbGVfPWQzLnNjYWxlLmxpbmVhcigpO30KdGhpcy5pc1lMb2dTY2FsZV89bG9nU2NhbGU7fSxnZXRZU2NhbGVNaW5fKCl7cmV0dXJuIHRoaXMuaXNZTG9nU2NhbGVfP3RoaXMueUxvZ1NjYWxlTWluXzowO30sZ2V0WVNjYWxlRG9tYWluXyhtaW5WYWx1ZSxtYXhWYWx1ZSl7aWYodGhpcy5vdmVycmlkZURhdGFSYW5nZV8hPT11bmRlZmluZWQpe3JldHVyblt0aGlzLmRhdGFSYW5nZS5taW4sdGhpcy5kYXRhUmFuZ2UubWF4XTt9CmlmKHRoaXMuaXNZTG9nU2NhbGVfKXtyZXR1cm5bdGhpcy5nZXRZU2NhbGVNaW5fKCksbWF4VmFsdWVdO30KcmV0dXJuW01hdGgubWluKG1pblZhbHVlLHRoaXMuZ2V0WVNjYWxlTWluXygpKSxtYXhWYWx1ZV07fSxnZXRTYW1wbGVXaWR0aF8oZGF0YSxpbmRleCxsZWZ0U2lkZSl7bGV0IGxlZnRJbmRleDtsZXQgcmlnaHRJbmRleDtpZihsZWZ0U2lkZSl7bGVmdEluZGV4PU1hdGgubWF4KGluZGV4LTEsMCk7cmlnaHRJbmRleD1pbmRleDt9ZWxzZXtsZWZ0SW5kZXg9aW5kZXg7cmlnaHRJbmRleD1NYXRoLm1pbihpbmRleCsxLGRhdGEubGVuZ3RoLTEpO30KY29uc3QgbGVmdFdpZHRoPXRoaXMuZ2V0WEZvckRhdHVtXyhkYXRhW2luZGV4XSxpbmRleCktCnRoaXMuZ2V0WEZvckRhdHVtXyhkYXRhW2xlZnRJbmRleF0sbGVmdEluZGV4KTtjb25zdCByaWdodFdpZHRoPXRoaXMuZ2V0WEZvckRhdHVtXyhkYXRhW3JpZ2h0SW5kZXhdLHJpZ2h0SW5kZXgpLQp0aGlzLmdldFhGb3JEYXR1bV8oZGF0YVtpbmRleF0saW5kZXgpO3JldHVybiB0ci5iLm1hdGguU3RhdGlzdGljcy5tZWFuKFtsZWZ0V2lkdGgscmlnaHRXaWR0aF0pO30sdXBkYXRlU2VyaWVzS2V5c18oKXt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0pe09iamVjdC5rZXlzKGRhdHVtKS5mb3JFYWNoKGZ1bmN0aW9uKGtleSl7aWYodGhpcy5pc0RhdHVtRmllbGRTZXJpZXNfKGtleSkpe3RoaXMuZ2V0RGF0YVNlcmllcyhrZXkpO319LHRoaXMpO30sdGhpcyk7fSxpc0RhdHVtRmllbGRTZXJpZXNfKGZpZWxkTmFtZSl7cmV0dXJuIGZpZWxkTmFtZSE9PSd4Jzt9LGdldFhGb3JEYXR1bV8oZGF0dW0saW5kZXgpe3JldHVybiBkYXR1bS54O30sdXBkYXRlTWFyZ2luc18oKXt0aGlzLm1hcmdpbi5sZWZ0PXRoaXMuaGlkZVlBeGlzPzA6dGhpcy55QXhpc1dpZHRoO3RoaXMubWFyZ2luLmJvdHRvbT10aGlzLmhpZGVYQXhpcz8wOnRoaXMueEF4aXNIZWlnaHQ7aWYodGhpcy5oaWRlWEF4aXMmJiF0aGlzLmhpZGVZQXhpcyl7dGhpcy5tYXJnaW4uYm90dG9tPTEwO30KaWYodGhpcy5oaWRlWUF4aXMmJiF0aGlzLmhpZGVYQXhpcyl7dGhpcy5tYXJnaW4ubGVmdD0xMDt9CnRoaXMubWFyZ2luLnRvcD10aGlzLmhpZGVZQXhpcz8wOjEwO2lmKHRoaXMueUF4aXNMYWJlbCl7dGhpcy5tYXJnaW4udG9wKz10aGlzLnRleHRIZWlnaHRQeF87fQppZih0aGlzLnhBeGlzTGFiZWwpe3RoaXMubWFyZ2luLnJpZ2h0PU1hdGgubWF4KHRoaXMubWFyZ2luLnJpZ2h0LDE2K3RyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcyx0aGlzLnhBeGlzTGFiZWwpLndpZHRoKTt9CnN1cGVyLnVwZGF0ZU1hcmdpbnNfKCk7fSxnZXQgeEF4aXNIZWlnaHQoKXtyZXR1cm4gRDNfWF9BWElTX0hFSUdIVF9QWDt9LGNvbXB1dGVTY2FsZVRpY2tXaWR0aF8oc2NhbGUpe2lmKHRoaXMuZGF0YS5sZW5ndGg9PT0wKXJldHVybiAwO2xldCB0aWNrVmFsdWVzPXNjYWxlLnRpY2tzKCk7bGV0IHRpY2tGb3JtYXQ9c2NhbGUudGlja0Zvcm1hdCgpO2lmKHRoaXMuaXNZTG9nU2NhbGVfKXtjb25zdCBlbmNsb3NpbmdQb3dlcnM9dGhpcy5kYXRhUmFuZ2UuZW5jbG9zaW5nUG93ZXJzKCk7dGlja1ZhbHVlcz1bXTtjb25zdCBtYXhQb3dlcj1zYW5pdGl6ZVBvd2VyKGVuY2xvc2luZ1Bvd2Vycy5tYXgsdGhpcy55TG9nU2NhbGVCYXNlKTtmb3IobGV0IHBvd2VyPXNhbml0aXplUG93ZXIoZW5jbG9zaW5nUG93ZXJzLm1pbiwxKTtwb3dlcjw9bWF4UG93ZXI7cG93ZXIqPXRoaXMueUxvZ1NjYWxlQmFzZSl7dGlja1ZhbHVlcy5wdXNoKHBvd2VyKTt9CnRpY2tGb3JtYXQ9dj0+di50b1N0cmluZygpO30KaWYodGhpcy51bml0KXt0aWNrRm9ybWF0PXY9PnRoaXMudW5pdC5mb3JtYXQodik7fQpsZXQgbWF4VGlja1dpZHRoPTA7Zm9yKGNvbnN0IHRpY2tWYWx1ZSBvZiB0aWNrVmFsdWVzKXttYXhUaWNrV2lkdGg9TWF0aC5tYXgobWF4VGlja1dpZHRoLHRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcyx0aWNrRm9ybWF0KHRpY2tWYWx1ZSkpLndpZHRoKTt9CnJldHVybiBEM19ZX0FYSVNfV0lEVEhfUFgrbWF4VGlja1dpZHRoO30sZ2V0IHlBeGlzV2lkdGgoKXtyZXR1cm4gdGhpcy5jb21wdXRlU2NhbGVUaWNrV2lkdGhfKHRoaXMueVNjYWxlXyk7fSx1cGRhdGVTY2FsZXNfKCl7aWYodGhpcy5kYXRhXy5sZW5ndGg9PT0wKXJldHVybjt0aGlzLnhTY2FsZV8ucmFuZ2UoWzAsdGhpcy5ncmFwaFdpZHRoXSk7dGhpcy54U2NhbGVfLmRvbWFpbihkMy5leHRlbnQodGhpcy5kYXRhXyx0aGlzLmdldFhGb3JEYXR1bV8uYmluZCh0aGlzKSkpO3RoaXMueVNjYWxlXy5yYW5nZShbdGhpcy5ncmFwaEhlaWdodCwwXSk7dGhpcy55U2NhbGVfLmRvbWFpbihbdGhpcy5kYXRhUmFuZ2UubWluLHRoaXMuZGF0YVJhbmdlLm1heF0pO30sdXBkYXRlQnJ1c2hDb250ZW50c18oYnJ1c2hTZWwpe2JydXNoU2VsLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO30sdXBkYXRlWEF4aXNfKHhBeGlzKXt4QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTt4QXhpc1swXVswXS5zdHlsZS5vcGFjaXR5PTA7aWYodGhpcy5oaWRlWEF4aXMpcmV0dXJuO3RoaXMuZHJhd1hBeGlzXyh4QXhpcyk7Y29uc3QgbGFiZWw9eEF4aXMuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdsYWJlbCcpO3RoaXMuZHJhd1hBeGlzVGlja3NfKHhBeGlzKTt0aGlzLmRyYXdYQXhpc0xhYmVsXyhsYWJlbCk7eEF4aXNbMF1bMF0uc3R5bGUub3BhY2l0eT0xO30sZHJhd1hBeGlzXyh4QXhpcyl7eEF4aXMuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKDAsJyt0aGlzLmdyYXBoSGVpZ2h0KycpJykuY2FsbChkMy5zdmcuYXhpcygpLnNjYWxlKHRoaXMueFNjYWxlXykub3JpZW50KCdib3R0b20nKSk7fSxkcmF3WEF4aXNMYWJlbF8obGFiZWwpe2xhYmVsLmF0dHIoJ3gnLHRoaXMuZ3JhcGhXaWR0aCsxNikuYXR0cigneScsOCkudGV4dCh0aGlzLnhBeGlzTGFiZWwpO30sZHJhd1hBeGlzVGlja3NfKHhBeGlzKXtsZXQgcHJldmlvdXNSaWdodD11bmRlZmluZWQ7eEF4aXMuc2VsZWN0QWxsKCcudGljaycpWzBdLmZvckVhY2goZnVuY3Rpb24odGljayl7Y29uc3QgY3VycmVudExlZnQ9dGljay50cmFuc2Zvcm0uYmFzZVZhbFswXS5tYXRyaXguZTtpZigocHJldmlvdXNSaWdodD09PXVuZGVmaW5lZCl8fChjdXJyZW50TGVmdD4ocHJldmlvdXNSaWdodCszKSkpe2NvbnN0IGN1cnJlbnRXaWR0aD10aWNrLmdldEJCb3goKS53aWR0aDtwcmV2aW91c1JpZ2h0PWN1cnJlbnRMZWZ0K2N1cnJlbnRXaWR0aDt9ZWxzZXt0aWNrLnN0eWxlLm9wYWNpdHk9MDt9fSk7fSxzZXQgb3ZlcnJpZGVEYXRhUmFuZ2UocmFuZ2Upe3RoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfPXJhbmdlO30sZ2V0IGRhdGFSYW5nZSgpe2lmKHRoaXMub3ZlcnJpZGVEYXRhUmFuZ2VfIT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5vdmVycmlkZURhdGFSYW5nZV87fQpyZXR1cm4gdGhpcy5hdXRvRGF0YVJhbmdlXzt9LHVwZGF0ZURhdGFSYW5nZV8oKXtpZih0aGlzLm92ZXJyaWRlRGF0YVJhbmdlXyE9PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgZGF0YUJ5U2VyaWVzS2V5PXRoaXMuZ2V0RGF0YUJ5U2VyaWVzS2V5XygpO3RoaXMuYXV0b0RhdGFSYW5nZV8ucmVzZXQoKTtmb3IoY29uc3Rbc2VyaWVzLHZhbHVlc11vZiBPYmplY3QuZW50cmllcyhkYXRhQnlTZXJpZXNLZXkpKXtmb3IobGV0IGk9MDtpPHZhbHVlcy5sZW5ndGg7aSsrKXt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKHZhbHVlc1tpXVtzZXJpZXNdKTt9fQp0aGlzLnlMb2dTY2FsZU1pbl89dW5kZWZpbmVkO2lmKHRoaXMuYXV0b0RhdGFSYW5nZV8ubWluIT09dW5kZWZpbmVkKXtsZXQgbWluVmFsdWU9dGhpcy5hdXRvRGF0YVJhbmdlXy5taW47aWYobWluVmFsdWU9PT0wKXttaW5WYWx1ZT0xO30KY29uc3Qgb25lUG93ZXJMZXNzPXRyLmIubWF0aC5sZXNzZXJQb3dlcihtaW5WYWx1ZS90aGlzLnlMb2dTY2FsZUJhc2UpO3RoaXMueUxvZ1NjYWxlTWluXz1vbmVQb3dlckxlc3M7fX0sdXBkYXRlWUF4aXNfKHlBeGlzKXt5QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTt5QXhpc1swXVswXS5zdHlsZS5vcGFjaXR5PTA7aWYodGhpcy5oaWRlWUF4aXMpcmV0dXJuO3RoaXMuZHJhd1lBeGlzXyh5QXhpcyk7dGhpcy5kcmF3WUF4aXNUaWNrc18oeUF4aXMpO2NvbnN0IGxhYmVsPXlBeGlzLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywnbGFiZWwnKTt0aGlzLmRyYXdZQXhpc0xhYmVsXyhsYWJlbCk7fSxkcmF3WUF4aXNfKHlBeGlzKXtsZXQgYXhpc01vZGlmaWVyPWQzLnN2Zy5heGlzKCkuc2NhbGUodGhpcy55U2NhbGVfKS5vcmllbnQoJ2xlZnQnKTtsZXQgdGlja0Zvcm1hdDtpZih0aGlzLmlzWUxvZ1NjYWxlXyl7aWYodGhpcy55TG9nU2NhbGVNaW5fPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCB0aWNrVmFsdWVzPVtdO2NvbnN0IGVuY2xvc2luZ1Bvd2Vycz10aGlzLmRhdGFSYW5nZS5lbmNsb3NpbmdQb3dlcnMoKTtjb25zdCBtYXhQb3dlcj1zYW5pdGl6ZVBvd2VyKGVuY2xvc2luZ1Bvd2Vycy5tYXgsdGhpcy55TG9nU2NhbGVCYXNlKTtmb3IobGV0IHBvd2VyPXNhbml0aXplUG93ZXIoZW5jbG9zaW5nUG93ZXJzLm1pbiwxKTtwb3dlcjw9bWF4UG93ZXI7cG93ZXIqPXRoaXMueUxvZ1NjYWxlQmFzZSl7dGlja1ZhbHVlcy5wdXNoKHBvd2VyKTt9CmF4aXNNb2RpZmllcj1heGlzTW9kaWZpZXIudGlja1ZhbHVlcyh0aWNrVmFsdWVzKTt0aWNrRm9ybWF0PXY9PnYudG9TdHJpbmcoKTt9CmlmKHRoaXMudW5pdCl7dGlja0Zvcm1hdD12PT50aGlzLnVuaXQuZm9ybWF0KHYpO30KaWYodGlja0Zvcm1hdCl7YXhpc01vZGlmaWVyPWF4aXNNb2RpZmllci50aWNrRm9ybWF0KHRpY2tGb3JtYXQpO30KeUF4aXMuY2FsbChheGlzTW9kaWZpZXIpO30sZHJhd1lBeGlzTGFiZWxfKGxhYmVsKXtjb25zdCBsYWJlbFdpZHRoUHg9TWF0aC5jZWlsKHRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcy5jaGFydEFyZWFFbGVtZW50LHRoaXMueUF4aXNMYWJlbCkud2lkdGgpO2xhYmVsLmF0dHIoJ3gnLC1sYWJlbFdpZHRoUHgpLmF0dHIoJ3knLC04KS50ZXh0KHRoaXMueUF4aXNMYWJlbCk7fSxkcmF3WUF4aXNUaWNrc18oeUF4aXMpe2xldCBwcmV2aW91c1RvcD11bmRlZmluZWQ7eUF4aXMuc2VsZWN0QWxsKCcudGljaycpWzBdLmZvckVhY2goZnVuY3Rpb24odGljayl7Y29uc3QgYmJveD10aWNrLmdldEJCb3goKTtjb25zdCBjdXJyZW50VG9wPXRpY2sudHJhbnNmb3JtLmJhc2VWYWxbMF0ubWF0cml4LmY7Y29uc3QgY3VycmVudEJvdHRvbT1jdXJyZW50VG9wK2Jib3guaGVpZ2h0O2lmKChwcmV2aW91c1RvcD09PXVuZGVmaW5lZCl8fChwcmV2aW91c1RvcD4oY3VycmVudEJvdHRvbSszKSkpe3ByZXZpb3VzVG9wPWN1cnJlbnRUb3A7fWVsc2V7dGljay5zdHlsZS5vcGFjaXR5PTA7fX0pO3lBeGlzWzBdWzBdLnN0eWxlLm9wYWNpdHk9MTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMudGV4dEhlaWdodFB4Xz09PTApe3RoaXMudGV4dEhlaWdodFB4Xz10ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMsJ0F5JykuaGVpZ2h0O30KdGhpcy51cGRhdGVTY2FsZXNfKCk7c3VwZXIudXBkYXRlQ29udGVudHNfKCk7Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO3RoaXMudXBkYXRlWEF4aXNfKGNoYXJ0QXJlYVNlbC5zZWxlY3QoJy54LmF4aXMnKSk7dGhpcy51cGRhdGVZQXhpc18oY2hhcnRBcmVhU2VsLnNlbGVjdCgnLnkuYXhpcycpKTtmb3IoY29uc3QgY2hpbGQgb2YgQXJyYXkuZnJvbSh0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoJy5heGlzIHBhdGgsIC5heGlzIGxpbmUnKSkpe2NoaWxkLnN0eWxlLmZpbGw9J25vbmUnO2NoaWxkLnN0eWxlLnNoYXBlUmVuZGVyaW5nPSdjcmlzcEVkZ2VzJztjaGlsZC5zdHlsZS5zdHJva2U9J2JsYWNrJzt9CnRoaXMudXBkYXRlQnJ1c2hDb250ZW50c18oY2hhcnRBcmVhU2VsLnNlbGVjdCgnI2JydXNoZXMnKSk7dGhpcy51cGRhdGVEYXRhQ29udGVudHNfKGNoYXJ0QXJlYVNlbC5zZWxlY3QoJyNzZXJpZXMnKSk7fSx1cGRhdGVEYXRhQ29udGVudHNfKHNlcmllc1NlbCl7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGdldERhdGFCeVNlcmllc0tleV8oKXtjb25zdCBkYXRhQnlTZXJpZXNLZXk9e307Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2RhdGFCeVNlcmllc0tleVtrZXldPVtdO30KdGhpcy5kYXRhXy5mb3JFYWNoKGZ1bmN0aW9uKG11bHRpU2VyaWVzRGF0dW0saW5kZXgpe2NvbnN0IHg9dGhpcy5nZXRYRm9yRGF0dW1fKG11bHRpU2VyaWVzRGF0dW0saW5kZXgpO2QzLmtleXMobXVsdGlTZXJpZXNEYXR1bSkuZm9yRWFjaChmdW5jdGlvbihzZXJpZXNLZXkpe2lmKHNlcmllc0tleT09PSd4JylyZXR1cm47aWYobXVsdGlTZXJpZXNEYXR1bVtzZXJpZXNLZXldPT09dW5kZWZpbmVkKXJldHVybjtpZighdGhpcy5pc0RhdHVtRmllbGRTZXJpZXNfKHNlcmllc0tleSkpcmV0dXJuO2NvbnN0IHNpbmdsZVNlcmllc0RhdHVtPXt4fTtzaW5nbGVTZXJpZXNEYXR1bVtzZXJpZXNLZXldPW11bHRpU2VyaWVzRGF0dW1bc2VyaWVzS2V5XTtkYXRhQnlTZXJpZXNLZXlbc2VyaWVzS2V5XS5wdXNoKHNpbmdsZVNlcmllc0RhdHVtKTt9LHRoaXMpO30sdGhpcyk7cmV0dXJuIGRhdGFCeVNlcmllc0tleTt9LGdldENoYXJ0UG9pbnRBdENsaWVudFBvaW50XyhjbGllbnRQb2ludCl7Y29uc3QgcmVjdD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3JldHVybnt4OmNsaWVudFBvaW50LngtcmVjdC5sZWZ0LXRoaXMubWFyZ2luLmxlZnQseTpjbGllbnRQb2ludC55LXJlY3QudG9wLXRoaXMubWFyZ2luLnRvcH07fSxnZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfKGNoYXJ0UG9pbnQpe3JldHVybnt4OnRyLmIubWF0aC5jbGFtcCh0aGlzLnhTY2FsZV8uaW52ZXJ0KGNoYXJ0UG9pbnQueCksdGhpcy54U2NhbGVfLmRvbWFpbigpWzBdLHRoaXMueFNjYWxlXy5kb21haW4oKVsxXSkseTp0ci5iLm1hdGguY2xhbXAodGhpcy55U2NhbGVfLmludmVydChjaGFydFBvaW50LnkpLHRoaXMueVNjYWxlXy5kb21haW4oKVswXSx0aGlzLnlTY2FsZV8uZG9tYWluKClbMV0pfTt9LGdldERhdGFQb2ludEF0Q2xpZW50UG9pbnRfKGNsaWVudFgsY2xpZW50WSl7Y29uc3QgY2hhcnRQb2ludD10aGlzLmdldENoYXJ0UG9pbnRBdENsaWVudFBvaW50Xyh7eDpjbGllbnRYLHk6Y2xpZW50WX0pO3JldHVybiB0aGlzLmdldERhdGFQb2ludEF0Q2hhcnRQb2ludF8oY2hhcnRQb2ludCk7fSxwcmVwYXJlRGF0YUV2ZW50Xyhtb3VzZUV2ZW50LGRhdGFFdmVudCl7Y29uc3QgZGF0YVBvaW50PXRoaXMuZ2V0RGF0YVBvaW50QXRDbGllbnRQb2ludF8obW91c2VFdmVudC5jbGllbnRYLG1vdXNlRXZlbnQuY2xpZW50WSk7ZGF0YUV2ZW50Lng9ZGF0YVBvaW50Lng7ZGF0YUV2ZW50Lnk9ZGF0YVBvaW50Lnk7fSxvbk1vdXNlRG93bl8obW91c2VFdmVudCl7dHIudWkuYi50cmFja01vdXNlTW92ZXNVbnRpbE1vdXNlVXAodGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzLG1vdXNlRXZlbnQuYnV0dG9uKSx0aGlzLm9uTW91c2VVcF8uYmluZCh0aGlzLG1vdXNlRXZlbnQuYnV0dG9uKSk7bW91c2VFdmVudC5wcmV2ZW50RGVmYXVsdCgpO21vdXNlRXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7Y29uc3QgZGF0YUV2ZW50PW5ldyB0ci5iLkV2ZW50KCdpdGVtLW1vdXNlZG93bicpO2RhdGFFdmVudC5idXR0b249bW91c2VFdmVudC5idXR0b247dGhpcy5wcmVwYXJlRGF0YUV2ZW50Xyhtb3VzZUV2ZW50LGRhdGFFdmVudCk7dGhpcy5kaXNwYXRjaEV2ZW50KGRhdGFFdmVudCk7Zm9yKGNvbnN0IGNoaWxkIG9mIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yKCcjYnJ1c2hlcycpLmNoaWxkcmVuKSl7Y2hpbGQuc2V0QXR0cmlidXRlKCdmaWxsJywncmdiKDEwMywgMTk5LCAxNjUpJyk7fX0sb25Nb3VzZU1vdmVfKGJ1dHRvbixtb3VzZUV2ZW50KXtpZihtb3VzZUV2ZW50LmJ1dHRvbnMhPT11bmRlZmluZWQpe21vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTttb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO30KY29uc3QgZGF0YUV2ZW50PW5ldyB0ci5iLkV2ZW50KCdpdGVtLW1vdXNlbW92ZScpO2RhdGFFdmVudC5idXR0b249YnV0dG9uO3RoaXMucHJlcGFyZURhdGFFdmVudF8obW91c2VFdmVudCxkYXRhRXZlbnQpO3RoaXMuZGlzcGF0Y2hFdmVudChkYXRhRXZlbnQpO2Zvcihjb25zdCBjaGlsZCBvZiBBcnJheS5mcm9tKHRoaXMucXVlcnlTZWxlY3RvcignI2JydXNoZXMnKS5jaGlsZHJlbikpe2NoaWxkLnNldEF0dHJpYnV0ZSgnZmlsbCcsJ3JnYigxMDMsIDE5OSwgMTY1KScpO319LG9uTW91c2VVcF8oYnV0dG9uLG1vdXNlRXZlbnQpe21vdXNlRXZlbnQucHJldmVudERlZmF1bHQoKTttb3VzZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2NvbnN0IGRhdGFFdmVudD1uZXcgdHIuYi5FdmVudCgnaXRlbS1tb3VzZXVwJyk7ZGF0YUV2ZW50LmJ1dHRvbj1idXR0b247dGhpcy5wcmVwYXJlRGF0YUV2ZW50Xyhtb3VzZUV2ZW50LGRhdGFFdmVudCk7dGhpcy5kaXNwYXRjaEV2ZW50KGRhdGFFdmVudCk7Zm9yKGNvbnN0IGNoaWxkIG9mIEFycmF5LmZyb20odGhpcy5xdWVyeVNlbGVjdG9yKCcjYnJ1c2hlcycpLmNoaWxkcmVuKSl7Y2hpbGQuc2V0QXR0cmlidXRlKCdmaWxsJywncmdiKDIxMywgMjM2LCAyMjkpJyk7fX19O3JldHVybntDaGFydEJhc2UyRCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBDaGFydEJhc2UyRD10ci51aS5iLkNoYXJ0QmFzZTJEO2NvbnN0IENoYXJ0QmFzZTJEQnJ1c2hYPXRyLnVpLmIuZGVmaW5lKCdjaGFydC1iYXNlLTJkLWJydXNoLTFkJyxDaGFydEJhc2UyRCk7Q2hhcnRCYXNlMkRCcnVzaFgucHJvdG90eXBlPXtfX3Byb3RvX186Q2hhcnRCYXNlMkQucHJvdG90eXBlLGRlY29yYXRlKCl7c3VwZXIuZGVjb3JhdGUoKTt0aGlzLmJydXNoZWRSYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO30sc2V0IGJydXNoZWRSYW5nZShyYW5nZSl7dGhpcy5icnVzaGVkUmFuZ2VfLnJlc2V0KCk7dGhpcy5icnVzaGVkUmFuZ2VfLmFkZFJhbmdlKHJhbmdlKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGJydXNoZWRSYW5nZSgpe3JldHVybiB0ci5iLm1hdGguUmFuZ2UuZnJvbURpY3QodGhpcy5icnVzaGVkUmFuZ2VfLnRvSlNPTigpKTt9LGNvbXB1dGVCcnVzaFJhbmdlRnJvbUluZGljZXMoaW5kZXhBLGluZGV4Qil7aW5kZXhBPXRyLmIubWF0aC5jbGFtcChpbmRleEEsMCx0aGlzLmRhdGFfLmxlbmd0aC0xKTtpbmRleEI9dHIuYi5tYXRoLmNsYW1wKGluZGV4QiwwLHRoaXMuZGF0YV8ubGVuZ3RoLTEpO2NvbnN0IGxlZnRJbmRleD1NYXRoLm1pbihpbmRleEEsaW5kZXhCKTtjb25zdCByaWdodEluZGV4PU1hdGgubWF4KGluZGV4QSxpbmRleEIpO2NvbnN0IGJydXNoUmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2JydXNoUmFuZ2UuYWRkVmFsdWUodGhpcy5nZXRYRm9yRGF0dW1fKHRoaXMuZGF0YV9bbGVmdEluZGV4XSxsZWZ0SW5kZXgpLQp0aGlzLmdldFNhbXBsZVdpZHRoXyh0aGlzLmRhdGFfLGxlZnRJbmRleCx0cnVlKSk7YnJ1c2hSYW5nZS5hZGRWYWx1ZSh0aGlzLmdldFhGb3JEYXR1bV8odGhpcy5kYXRhX1tyaWdodEluZGV4XSxyaWdodEluZGV4KSsKdGhpcy5nZXRTYW1wbGVXaWR0aF8odGhpcy5kYXRhXyxyaWdodEluZGV4LGZhbHNlKSk7cmV0dXJuIGJydXNoUmFuZ2U7fSxnZXREYXRhSW5kZXhfKGRhdGFYKXtpZih0aGlzLmRhdGEubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGJpc2VjdD1kMy5iaXNlY3Rvcih0aGlzLmdldFhGb3JEYXR1bV8uYmluZCh0aGlzKSkucmlnaHQ7cmV0dXJuIGJpc2VjdCh0aGlzLmRhdGFfLGRhdGFYKS0xO30scHJlcGFyZURhdGFFdmVudF8obW91c2VFdmVudCxkYXRhRXZlbnQpe0NoYXJ0QmFzZTJELnByb3RvdHlwZS5wcmVwYXJlRGF0YUV2ZW50Xy5jYWxsKHRoaXMsbW91c2VFdmVudCxkYXRhRXZlbnQpO2RhdGFFdmVudC5pbmRleD10aGlzLmdldERhdGFJbmRleF8oZGF0YUV2ZW50LngpO2lmKGRhdGFFdmVudC5pbmRleCE9PXVuZGVmaW5lZCl7ZGF0YUV2ZW50LmRhdGE9dGhpcy5kYXRhX1tkYXRhRXZlbnQuaW5kZXhdO319LHVwZGF0ZUJydXNoQ29udGVudHNfKGJydXNoU2VsKXticnVzaFNlbC5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtjb25zdCBicnVzaGVzPXRoaXMuYnJ1c2hlZFJhbmdlXy5pc0VtcHR5P1tdOlt0aGlzLmJydXNoZWRSYW5nZV9dO2NvbnN0IGJydXNoUmVjdHNTZWw9YnJ1c2hTZWwuc2VsZWN0QWxsKCdyZWN0JykuZGF0YShicnVzaGVzKTticnVzaFJlY3RzU2VsLmVudGVyKCkuYXBwZW5kKCdyZWN0Jyk7YnJ1c2hSZWN0c1NlbC5leGl0KCkucmVtb3ZlKCk7dGhpcy5kcmF3QnJ1c2hfKGJydXNoUmVjdHNTZWwpO30sZHJhd0JydXNoXyhicnVzaFJlY3RzU2VsKXticnVzaFJlY3RzU2VsLmF0dHIoJ3gnLGQ9PnRoaXMueFNjYWxlXyhkLm1pbikpLmF0dHIoJ3knLDApLmF0dHIoJ3dpZHRoJyxkPT50aGlzLnhTY2FsZV8oZC5tYXgpLXRoaXMueFNjYWxlXyhkLm1pbikpLmF0dHIoJ2hlaWdodCcsdGhpcy5ncmFwaEhlaWdodCkuYXR0cignZmlsbCcsJ3JnYigyMTMsIDIzNiwgMjI5KScpO319O3JldHVybntDaGFydEJhc2UyREJydXNoWCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBDb2x1bW5DaGFydD10ci51aS5iLmRlZmluZSgnY29sdW1uLWNoYXJ0Jyx0ci51aS5iLkNoYXJ0QmFzZTJEQnJ1c2hYKTtDb2x1bW5DaGFydC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkNoYXJ0QmFzZTJEQnJ1c2hYLnByb3RvdHlwZSxkZWNvcmF0ZSgpe3N1cGVyLmRlY29yYXRlKCk7dGhpcy54Q3VzaGlvbl89MTt0aGlzLmlzU3RhY2tlZF89ZmFsc2U7dGhpcy5pc0dyb3VwZWRfPWZhbHNlO3RoaXMuZW5hYmxlSG92ZXJCb3g9dHJ1ZTt0aGlzLmRpc3BsYXlYSW5Ib3Zlcj1mYWxzZTt0aGlzLmVuYWJsZVRvb2xUaXA9ZmFsc2U7dGhpcy50b29sVGlwQ2FsbEJhY2tfPSgpPT57fTt9LHNldCB0b29sVGlwQ2FsbEJhY2soY2FsbGJhY2spe3RoaXMudG9vbFRpcENhbGxCYWNrXz1jYWxsYmFjazt9LGdldCB0b29sVGlwQ2FsbEJhY2soKXtyZXR1cm4gdGhpcy50b29sVGlwQ2FsbEJhY2tfO30sc2V0IGlzR3JvdXBlZChncm91cGVkKXt0aGlzLmlzR3JvdXBlZF89Z3JvdXBlZDtpZihncm91cGVkKXt0aGlzLmdldERhdGFTZXJpZXMoJ2dyb3VwJykuY29sb3I9J3RyYW5zcGFyZW50Jzt9CnRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgaXNHcm91cGVkKCl7cmV0dXJuIHRoaXMuaXNHcm91cGVkXzt9LHNldCBpc1N0YWNrZWQoc3RhY2tlZCl7dGhpcy5pc1N0YWNrZWRfPXRydWU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBpc1N0YWNrZWQoKXtyZXR1cm4gdGhpcy5pc1N0YWNrZWRfO30sZ2V0IGRlZmF1bHRHcmFwaEhlaWdodCgpe3JldHVybiAxMDA7fSxnZXQgZGVmYXVsdEdyYXBoV2lkdGgoKXtyZXR1cm4gMTAqdGhpcy5kYXRhXy5sZW5ndGg7fSx1cGRhdGVTY2FsZXNfKCl7aWYodGhpcy5kYXRhXy5sZW5ndGg9PT0wKXJldHVybjtsZXQgeERpZmZlcmVuY2VzPTA7bGV0IGN1cnJlbnRYPXVuZGVmaW5lZDtsZXQgcHJldmlvdXNYPXVuZGVmaW5lZDt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0saW5kZXgpe3ByZXZpb3VzWD1jdXJyZW50WDtjdXJyZW50WD10aGlzLmdldFhGb3JEYXR1bV8oZGF0dW0saW5kZXgpO2lmKHByZXZpb3VzWCE9PXVuZGVmaW5lZCl7eERpZmZlcmVuY2VzKz1jdXJyZW50WC1wcmV2aW91c1g7fX0sdGhpcyk7dGhpcy54U2NhbGVfLnJhbmdlKFswLHRoaXMuZ3JhcGhXaWR0aF0pO2NvbnN0IGRvbWFpbj1kMy5leHRlbnQodGhpcy5kYXRhXyx0aGlzLmdldFhGb3JEYXR1bV8uYmluZCh0aGlzKSk7aWYodGhpcy5kYXRhXy5sZW5ndGg+MSl7dGhpcy54Q3VzaGlvbl89eERpZmZlcmVuY2VzLyh0aGlzLmRhdGFfLmxlbmd0aC0xKTt9CnRoaXMueFNjYWxlXy5kb21haW4oW2RvbWFpblswXSxkb21haW5bMV0rdGhpcy54Q3VzaGlvbl9dKTt0aGlzLnlTY2FsZV8ucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsMF0pO3RoaXMueVNjYWxlXy5kb21haW4odGhpcy5nZXRZU2NhbGVEb21haW5fKHRoaXMuZGF0YVJhbmdlLm1pbix0aGlzLmRhdGFSYW5nZS5tYXgpKTt9LHVwZGF0ZURhdGFSYW5nZV8oKXtpZighdGhpcy5pc1N0YWNrZWQpe3N1cGVyLnVwZGF0ZURhdGFSYW5nZV8oKTtyZXR1cm47fQp0aGlzLmF1dG9EYXRhUmFuZ2VfLnJlc2V0KCk7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZSgwKTtmb3IoY29uc3QgZGF0dW0gb2YgdGhpcy5kYXRhXyl7bGV0IHN1bT0wO2Zvcihjb25zdFtrZXksc2VyaWVzXW9mIHRoaXMuc2VyaWVzQnlLZXlfKXtpZihkYXR1bVtrZXldPT09dW5kZWZpbmVkKXtjb250aW51ZTt9ZWxzZSBpZih0aGlzLmlzR3JvdXBlZCYma2V5PT09J2dyb3VwJyl7Y29udGludWU7fQpzdW0rPWRhdHVtW2tleV07fQp0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKHN1bSk7fX0sZ2V0U3RhY2tlZFJlY3RzRm9yRGF0dW1fKGRhdHVtLGluZGV4KXtjb25zdCBzdGFja3M9W107bGV0IGJvdHRvbT10aGlzLnlTY2FsZV8ucmFuZ2UoKVswXTtsZXQgc3VtPTA7Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2lmKGRhdHVtW2tleV09PT11bmRlZmluZWR8fCF0aGlzLmlzU2VyaWVzRW5hYmxlZChrZXkpKXtjb250aW51ZTt9ZWxzZSBpZih0aGlzLmlzR3JvdXBlZCYma2V5PT09J2dyb3VwJyl7Y29udGludWU7fQpzdW0rPXRoaXMuZGF0YVJhbmdlLmNsYW1wKGRhdHVtW2tleV0pO2NvbnN0IGhlaWdodFB4PWJvdHRvbS10aGlzLnlTY2FsZV8oc3VtKTtib3R0b20tPWhlaWdodFB4O3N0YWNrcy5wdXNoKHtrZXksdmFsdWU6ZGF0dW1ba2V5XSxjb2xvcjp0aGlzLmdldERhdGFTZXJpZXMoa2V5KS5jb2xvcixoZWlnaHRQeCx0b3BQeDpib3R0b20sdW5kZXJmbG93OnN1bTx0aGlzLmRhdGFSYW5nZS5taW4sb3ZlcmZsb3c6c3VtPnRoaXMuZGF0YVJhbmdlLm1heCx9KTt9CnJldHVybiBzdGFja3M7fSxnZXRSZWN0c0ZvckRhdHVtXyhkYXR1bSxpbmRleCl7aWYodGhpcy5pc1N0YWNrZWQpe3JldHVybiB0aGlzLmdldFN0YWNrZWRSZWN0c0ZvckRhdHVtXyhkYXR1bSxpbmRleCk7fQpjb25zdCBzdGFja3M9W107Zm9yKGNvbnN0W2tleSxzZXJpZXNdb2YgdGhpcy5zZXJpZXNCeUtleV8pe2lmKGRhdHVtW2tleV09PT11bmRlZmluZWR8fCF0aGlzLmlzU2VyaWVzRW5hYmxlZChrZXkpKXtjb250aW51ZTt9CmNvbnN0IGNsYW1wZWRWYWx1ZT10aGlzLmRhdGFSYW5nZS5jbGFtcChkYXR1bVtrZXldKTtjb25zdCB0b3BQeD10aGlzLnlTY2FsZV8oTWF0aC5tYXgoY2xhbXBlZFZhbHVlLHRoaXMuZ2V0WVNjYWxlTWluXygpKSk7c3RhY2tzLnB1c2goe2tleSx2YWx1ZTpkYXR1bVtrZXldLHRvcFB4LGhlaWdodFB4OnRoaXMueVNjYWxlXy5yYW5nZSgpWzBdLXRvcFB4LGNvbG9yOnRoaXMuZ2V0RGF0YVNlcmllcyhrZXkpLmNvbG9yLHVuZGVyZmxvdzpkYXR1bVtrZXldPHRoaXMuZGF0YVJhbmdlLm1pbixvdmVyZmxvdzpkYXR1bVtrZXldPnRoaXMuZGF0YVJhbmdlLm1heCx9KTt9CnN0YWNrcy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGIudG9wUHgtYS50b3BQeDt9KTtyZXR1cm4gc3RhY2tzO30sZHJhd1Rvb2xUaXBfKHJlY3Qpe2lmKCF0aGlzLmVuYWJsZVRvb2xUaXApcmV0dXJuO2NvbnN0IGNoYXJ0QXJlYVNlbD1kMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KTtjaGFydEFyZWFTZWwuc2VsZWN0QWxsKCcudG9vbHRpcCcpLnJlbW92ZSgpO2NvbnN0IGxhYmVsVGV4dD0nVmlldyBCcmVha2Rvd24nO2NvbnN0IGxhYmVsV2lkdGg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQsbGFiZWxUZXh0KS53aWR0aCs1O2NvbnN0IGxhYmVsSGVpZ2h0PXRoaXMudGV4dEhlaWdodFB4Xztjb25zdCB0b29sVGlwTGVmdFB4PXJlY3QubGVmdFB4KyhyZWN0LndpZHRoUHgvMik7Y29uc3QgdG9vbFRpcFRvcFB4PXJlY3QudG9wUHg7Y2hhcnRBcmVhU2VsLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2NsYXNzJywndG9vbHRpcCcpLmF0dHIoJ2ZpbGwnLCd3aGl0ZScpLmF0dHIoJ29wYWNpdHknLDAuOCkuYXR0cignc3Ryb2tlJywnYmxhY2snKS5hdHRyKCd4Jyx0b29sVGlwTGVmdFB4KS5hdHRyKCd5Jyx0b29sVGlwVG9wUHgpLmF0dHIoJ3dpZHRoJyxsYWJlbFdpZHRoKzUpLmF0dHIoJ2hlaWdodCcsbGFiZWxIZWlnaHQrMTApO2NoYXJ0QXJlYVNlbC5hcHBlbmQoJ3RleHQnKS5zdHlsZSgnY3Vyc29yJywncG9pbnRlcicpLmF0dHIoJ2NsYXNzJywndG9vbHRpcCcpLm9uKCdtb3VzZWRvd24nLCgpPT50aGlzLnRvb2xUaXBDYWxsQmFja18ocmVjdCkpLmF0dHIoJ2ZpbGwnLCdibHVlJykuYXR0cigneCcsdG9vbFRpcExlZnRQeCs0KS5hdHRyKCd5Jyx0b29sVGlwVG9wUHgrbGFiZWxIZWlnaHQpLmF0dHIoJ3RleHQtZGVjb3JhdGlvbicsJ3VuZGVybGluZScpLnRleHQobGFiZWxUZXh0KTt9LGRyYXdIb3ZlclZhbHVlQm94XyhyZWN0KXtjb25zdCByZWN0SG92ZXJFdmVudD1uZXcgdHIuYi5FdmVudCgncmVjdC1tb3VzZWVudGVyJyk7cmVjdEhvdmVyRXZlbnQucmVjdD1yZWN0O3RoaXMuZGlzcGF0Y2hFdmVudChyZWN0SG92ZXJFdmVudCk7aWYoIXRoaXMuZW5hYmxlSG92ZXJCb3gpcmV0dXJuO2NvbnN0IHNlcmllc0tleXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLmtleXMoKV07Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO2NoYXJ0QXJlYVNlbC5zZWxlY3RBbGwoJy5ob3ZlcicpLnJlbW92ZSgpO2xldCBrZXlXaWR0aFB4PTA7bGV0IGtleUhlaWdodFB4PTA7aWYoc2VyaWVzS2V5cy5sZW5ndGg+MSYmIXRoaXMuaXNHcm91cGVkKXtrZXlXaWR0aFB4PXRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcy5jaGFydEFyZWFFbGVtZW50LHJlY3Qua2V5KS53aWR0aCs1O2tleUhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9CmxldCB4TGFiZWxXaWR0aFB4PTA7bGV0IHhMYWJlbEhlaWdodFB4PTA7aWYodGhpcy5kaXNwbGF5WEluSG92ZXIpe3hMYWJlbFdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQscmVjdC5kYXR1bS54KS53aWR0aCs1O3hMYWJlbEhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9CmxldCBncm91cFdpZHRoUHg9MDtsZXQgZ3JvdXBIZWlnaHRQeD0wO2lmKHRoaXMuaXNHcm91cGVkJiZyZWN0LmRhdHVtLmdyb3VwIT09dW5kZWZpbmVkKXtncm91cFdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQscmVjdC5kYXR1bS5ncm91cCkud2lkdGgrNTtncm91cEhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9CmxldCB2YWx1ZT1yZWN0LnZhbHVlO2lmKHRoaXMudW5pdCl2YWx1ZT10aGlzLnVuaXQuZm9ybWF0KHZhbHVlKTtjb25zdCB2YWx1ZVdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQsdmFsdWUpLndpZHRoKzU7Y29uc3QgdmFsdWVIZWlnaHRQeD10aGlzLnRleHRIZWlnaHRQeF87Y29uc3QgaG92ZXJXaWR0aFB4PU1hdGgubWF4KGtleVdpZHRoUHgsdmFsdWVXaWR0aFB4LHhMYWJlbFdpZHRoUHgsZ3JvdXBXaWR0aFB4KTtsZXQgaG92ZXJMZWZ0UHg9cmVjdC5sZWZ0UHgrKHJlY3Qud2lkdGhQeC8yKTtob3ZlckxlZnRQeD1NYXRoLm1heChob3ZlckxlZnRQeC1ob3ZlcldpZHRoUHgsLXRoaXMubWFyZ2luLmxlZnQpO2NvbnN0IGhvdmVySGVpZ2h0UHg9a2V5SGVpZ2h0UHgrdmFsdWVIZWlnaHRQeCsKeExhYmVsSGVpZ2h0UHgrZ3JvdXBIZWlnaHRQeCsyO2NvbnN0IHRvcE9mZlNldFB4PXRoaXMuaXNHcm91cGVkPzM2OjEyO2xldCBob3ZlclRvcFB4PXJlY3QudG9wUHg7aG92ZXJUb3BQeD1NYXRoLm1pbihob3ZlclRvcFB4LHRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0LQpob3ZlckhlaWdodFB4LXRvcE9mZlNldFB4KTtjaGFydEFyZWFTZWwuYXBwZW5kKCdyZWN0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5vbignbW91c2Vkb3duJyx0aGlzLmRyYXdUb29sVGlwXy5iaW5kKHRoaXMscmVjdCkpLmF0dHIoJ2ZpbGwnLCd3aGl0ZScpLmF0dHIoJ3N0cm9rZScsJ2JsYWNrJykuYXR0cigneCcsaG92ZXJMZWZ0UHgpLmF0dHIoJ3knLGhvdmVyVG9wUHgpLmF0dHIoJ3dpZHRoJyxob3ZlcldpZHRoUHgpLmF0dHIoJ2hlaWdodCcsaG92ZXJIZWlnaHRQeCk7aWYoc2VyaWVzS2V5cy5sZW5ndGg+MSYmIXRoaXMuaXNHcm91cGVkKXtjaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5vbignbW91c2Vkb3duJyx0aGlzLmRyYXdUb29sVGlwXy5iaW5kKHRoaXMscmVjdCkpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLGhvdmVyTGVmdFB4KzIpLmF0dHIoJ3knLGhvdmVyVG9wUHgra2V5SGVpZ2h0UHgtMikudGV4dChyZWN0LmtleSk7fQppZih0aGlzLmRpc3BsYXlYSW5Ib3Zlcil7Y2hhcnRBcmVhU2VsLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5vbignbW91c2VsZWF2ZScsKCk9PnRoaXMuY2xlYXJIb3ZlclZhbHVlQm94XyhyZWN0KSkub24oJ21vdXNlZG93bicsdGhpcy5kcmF3VG9vbFRpcF8uYmluZCh0aGlzLHJlY3QpKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCsyKS5hdHRyKCd5Jyxob3ZlclRvcFB4K2tleUhlaWdodFB4K3hMYWJlbEhlaWdodFB4LTIpLnRleHQocmVjdC5kYXR1bS54KTt9CmlmKHRoaXMuaXNHcm91cGVkJiZyZWN0LmRhdHVtLmdyb3VwIT09dW5kZWZpbmVkKXtjaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0JykuYXR0cignY2xhc3MnLCdob3ZlcicpLm9uKCdtb3VzZWxlYXZlJywoKT0+dGhpcy5jbGVhckhvdmVyVmFsdWVCb3hfKHJlY3QpKS5vbignbW91c2Vkb3duJyx0aGlzLmRyYXdUb29sVGlwXy5iaW5kKHRoaXMscmVjdCkpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLGhvdmVyTGVmdFB4KzIpLmF0dHIoJ3knLGhvdmVyVG9wUHgra2V5SGVpZ2h0UHgrCnhMYWJlbEhlaWdodFB4K2dyb3VwSGVpZ2h0UHgtMikudGV4dChyZWN0LmRhdHVtLmdyb3VwKTt9CmNoYXJ0QXJlYVNlbC5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsJ2hvdmVyJykub24oJ21vdXNlbGVhdmUnLCgpPT50aGlzLmNsZWFySG92ZXJWYWx1ZUJveF8ocmVjdCkpLm9uKCdtb3VzZWRvd24nLHRoaXMuZHJhd1Rvb2xUaXBfLmJpbmQodGhpcyxyZWN0KSkuYXR0cignZmlsbCcscmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCtob3ZlckhlaWdodFB4LTIpLnRleHQodmFsdWUpO30sY2xlYXJIb3ZlclZhbHVlQm94XyhyZWN0KXtjb25zdCBldmVudD13aW5kb3cuZXZlbnQ7aWYoZXZlbnQucmVsYXRlZFRhcmdldCYmQXJyYXkuZnJvbShldmVudC5yZWxhdGVkVGFyZ2V0LmNsYXNzTGlzdCkuaW5jbHVkZXMoJ2hvdmVyJykpe3JldHVybjt9CmNvbnN0IHJlY3RIb3ZlckV2ZW50PW5ldyB0ci5iLkV2ZW50KCdyZWN0LW1vdXNlbGVhdmUnKTtyZWN0SG92ZXJFdmVudC5yZWN0PXJlY3Q7dGhpcy5kaXNwYXRjaEV2ZW50KHJlY3RIb3ZlckV2ZW50KTtkMy5zZWxlY3QodGhpcy5jaGFydEFyZWFFbGVtZW50KS5zZWxlY3RBbGwoJy5ob3ZlcicpLnJlbW92ZSgpO30sZHJhd1JlY3RfKHJlY3Qsc2VsKXtzZWw9c2VsLmRhdGEoW3JlY3RdKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4JyxyZWN0LmxlZnRQeCkuYXR0cigneScscmVjdC50b3BQeCkuYXR0cignd2lkdGgnLHJlY3Qud2lkdGhQeCkuYXR0cignaGVpZ2h0JyxyZWN0LmhlaWdodFB4KS5vbignbW91c2Vkb3duJyx0aGlzLmRyYXdUb29sVGlwXy5iaW5kKHRoaXMscmVjdCkpLm9uKCdtb3VzZWVudGVyJyx0aGlzLmRyYXdIb3ZlclZhbHVlQm94Xy5iaW5kKHRoaXMscmVjdCkpLm9uKCdtb3VzZWxlYXZlJyx0aGlzLmNsZWFySG92ZXJWYWx1ZUJveF8uYmluZCh0aGlzLHJlY3QpKTtzZWwuZXhpdCgpLnJlbW92ZSgpO30sZHJhd1VuZGVyZmxvd18ocmVjdCxzZWwpe3NlbD1zZWwuZGF0YShbcmVjdF0pO3NlbC5lbnRlcigpLmFwcGVuZCgndGV4dCcpLnRleHQoJyonKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4JyxyZWN0LmxlZnRQeCsocmVjdC53aWR0aFB4LzIpKS5hdHRyKCd5Jyx0aGlzLmdyYXBoSGVpZ2h0KS5vbignbW91c2Vkb3duJyx0aGlzLmRyYXdUb29sVGlwXy5iaW5kKHRoaXMscmVjdCkpLm9uKCdtb3VzZWVudGVyJyx0aGlzLmRyYXdIb3ZlclZhbHVlQm94Xy5iaW5kKHRoaXMscmVjdCkpLm9uKCdtb3VzZWxlYXZlJyx0aGlzLmNsZWFySG92ZXJWYWx1ZUJveF8uYmluZCh0aGlzLHJlY3QpKTtzZWwuZXhpdCgpLnJlbW92ZSgpO30sZHJhd092ZXJmbG93XyhyZWN0LHNlbCl7c2VsPXNlbC5kYXRhKFtyZWN0XSk7c2VsLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykudGV4dCgnKicpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLHJlY3QubGVmdFB4KyhyZWN0LndpZHRoUHgvMikpLmF0dHIoJ3knLDApO3NlbC5leGl0KCkucmVtb3ZlKCk7fSx1cGRhdGVEYXRhQ29udGVudHNfKGRhdGFTZWwpe2RhdGFTZWwuc2VsZWN0QWxsKCcqJykucmVtb3ZlKCk7Y29uc3QgY2hhcnRBcmVhU2VsPWQzLnNlbGVjdCh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQpO2NvbnN0IHNlcmllc0tleXM9Wy4uLnRoaXMuc2VyaWVzQnlLZXlfLmtleXMoKV07Y29uc3QgcmVjdHNTZWw9ZGF0YVNlbC5zZWxlY3RBbGwoJ3BhdGgnKTt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0saW5kZXgpe2NvbnN0IGN1cnJlbnRYPXRoaXMuZ2V0WEZvckRhdHVtXyhkYXR1bSxpbmRleCk7bGV0IHdpZHRoPXVuZGVmaW5lZDtpZihpbmRleDwodGhpcy5kYXRhXy5sZW5ndGgtMSkpe2NvbnN0IG5leHRYPXRoaXMuZ2V0WEZvckRhdHVtXyh0aGlzLmRhdGFfW2luZGV4KzFdLGluZGV4KzEpO3dpZHRoPW5leHRYLWN1cnJlbnRYO31lbHNle3dpZHRoPXRoaXMueEN1c2hpb25fO30KZm9yKGNvbnN0IHJlY3Qgb2YgdGhpcy5nZXRSZWN0c0ZvckRhdHVtXyhkYXR1bSxpbmRleCkpe3JlY3QuZGF0dW09ZGF0dW07cmVjdC5pbmRleD1pbmRleDtyZWN0LmxlZnRQeD10aGlzLnhTY2FsZV8oY3VycmVudFgpO3JlY3QucmlnaHRQeD10aGlzLnhTY2FsZV8oY3VycmVudFgrd2lkdGgpO3JlY3Qud2lkdGhQeD1yZWN0LnJpZ2h0UHgtcmVjdC5sZWZ0UHg7dGhpcy5kcmF3UmVjdF8ocmVjdCxyZWN0c1NlbCk7aWYocmVjdC51bmRlcmZsb3cpe3RoaXMuZHJhd1VuZGVyZmxvd18ocmVjdCxyZWN0c1NlbCk7fQppZihyZWN0Lm92ZXJmbG93KXt0aGlzLmRyYXdPdmVyZmxvd18ocmVjdCxyZWN0c1NlbCk7fX19LHRoaXMpO319O3JldHVybntDb2x1bW5DaGFydCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBMaW5lQ2hhcnQ9dHIudWkuYi5kZWZpbmUoJ2xpbmUtY2hhcnQnLHRyLnVpLmIuQ2hhcnRCYXNlMkRCcnVzaFgpO0xpbmVDaGFydC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkNoYXJ0QmFzZTJEQnJ1c2hYLnByb3RvdHlwZSxkZWNvcmF0ZSgpe3N1cGVyLmRlY29yYXRlKCk7dGhpcy5lbmFibGVIb3ZlckJveD10cnVlO3RoaXMuZGlzcGxheVhJbkhvdmVyPWZhbHNlO30sZ2V0IGRlZmF1bHRHcmFwaFdpZHRoKCl7cmV0dXJuIDIwKnRoaXMuZGF0YV8ubGVuZ3RoO30sZ2V0IGRlZmF1bHRHcmFwaEhlaWdodCgpe3JldHVybiAxMDA7fSxkcmF3SG92ZXJWYWx1ZUJveF8oY2lyY2xlKXt0ci51aS5iLkNvbHVtbkNoYXJ0LnByb3RvdHlwZS5kcmF3SG92ZXJWYWx1ZUJveF8uY2FsbCh0aGlzLGNpcmNsZSk7fSxjbGVhckhvdmVyVmFsdWVCb3hfKGNpcmNsZSl7dHIudWkuYi5Db2x1bW5DaGFydC5wcm90b3R5cGUuY2xlYXJIb3ZlclZhbHVlQm94Xy5jYWxsKHRoaXMsY2lyY2xlKTt9LHVwZGF0ZURhdGFDb250ZW50c18oZGF0YVNlbCl7ZGF0YVNlbC5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtjb25zdCBkYXRhQnlTZXJpZXNLZXk9dGhpcy5nZXREYXRhQnlTZXJpZXNLZXlfKCk7Y29uc3Qgc2VyaWVzS2V5cz1bLi4udGhpcy5zZXJpZXNCeUtleV8ua2V5cygpXTtjb25zdCBwYXRoc1NlbD1kYXRhU2VsLnNlbGVjdEFsbCgncGF0aCcpLmRhdGEoc2VyaWVzS2V5cyk7cGF0aHNTZWwuZW50ZXIoKS5hcHBlbmQoJ3BhdGgnKS5zdHlsZSgnZmlsbCcsJ25vbmUnKS5zdHlsZSgnc3Ryb2tlLXdpZHRoJywnMS41cHgnKS5zdHlsZSgnc3Ryb2tlJyxrZXk9PnRoaXMuZ2V0RGF0YVNlcmllcyhrZXkpLmNvbG9yKS5hdHRyKCdkJyxrZXk9Pntjb25zdCBsaW5lPWQzLnN2Zy5saW5lKCkueChkPT50aGlzLnhTY2FsZV8oZC54KSkueShkPT50aGlzLnlTY2FsZV8odGhpcy5kYXRhUmFuZ2UuY2xhbXAoZFtrZXldKSkpO3JldHVybiBsaW5lKGRhdGFCeVNlcmllc0tleVtrZXldKTt9KTtwYXRoc1NlbC5leGl0KCkucmVtb3ZlKCk7aWYodGhpcy5lbmFibGVIb3ZlckJveCl7Zm9yKGxldCBpbmRleD0wO2luZGV4PHRoaXMuZGF0YV8ubGVuZ3RoOysraW5kZXgpe2NvbnN0IGRhdHVtPXRoaXMuZGF0YV9baW5kZXhdO2NvbnN0IHg9dGhpcy5nZXRYRm9yRGF0dW1fKGRhdHVtLGluZGV4KTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGRhdHVtKSl7aWYoa2V5PT09J3gnKWNvbnRpbnVlO2lmKHZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGNvbG9yPXRoaXMuZ2V0RGF0YVNlcmllcyhrZXkpLmNvbG9yO2NvbnN0IGNpcmNsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMoJ2h0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnJywnY2lyY2xlJyk7Y2lyY2xlLnNldEF0dHJpYnV0ZSgnY3gnLHRoaXMueFNjYWxlXyh4KSk7Y2lyY2xlLnNldEF0dHJpYnV0ZSgnY3knLHRoaXMueVNjYWxlXyh0aGlzLmRhdGFSYW5nZS5jbGFtcCh2YWx1ZSkpKTtjaXJjbGUuc2V0QXR0cmlidXRlKCdyJyw1KTtjaXJjbGUuc3R5bGUuZmlsbD1jb2xvcjtjaXJjbGUuZGF0dW09ZGF0dW07Y2lyY2xlLmtleT1rZXk7Y2lyY2xlLnZhbHVlPWRhdHVtW2tleV07Y2lyY2xlLmxlZnRQeD10aGlzLnhTY2FsZV8oeCk7Y2lyY2xlLndpZHRoUHg9MDtjaXJjbGUuY29sb3I9Y29sb3I7Y2lyY2xlLnRvcFB4PXRoaXMueVNjYWxlXyh0aGlzLmRhdGFSYW5nZS5jbGFtcCh2YWx1ZSkpO2NpcmNsZS5oZWlnaHRQeD0wO2NpcmNsZS5hZGRFdmVudExpc3RlbmVyKCdtb3VzZWVudGVyJywoKT0+dGhpcy5kcmF3SG92ZXJWYWx1ZUJveF8oY2lyY2xlKSk7Y2lyY2xlLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlbGVhdmUnLCgpPT50aGlzLmNsZWFySG92ZXJWYWx1ZUJveF8oY2lyY2xlKSk7ZGF0YVNlbFswXVswXS5hcHBlbmRDaGlsZChjaXJjbGUpO319fX19O3JldHVybntMaW5lQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtcy1pbnB1dC1sYXRlbmN5LXNpZGUtcGFuZWwnLGJlaGF2aW9yczpbdHIudWkuYmVoYXZpb3JzLlNpZGVQYW5lbF0scmVhZHkoKXt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuZnJhbWV0aW1lVHlwZV89dHIubW9kZWwuaGVscGVycy5JTVBMX0ZSQU1FVElNRV9UWVBFO3RoaXMubGF0ZW5jeUNoYXJ0Xz11bmRlZmluZWQ7dGhpcy5mcmFtZXRpbWVDaGFydF89dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRQcm9jZXNzSWRfPXVuZGVmaW5lZDt0aGlzLm1vdXNlRG93bkluZGV4Xz11bmRlZmluZWQ7dGhpcy5jdXJNb3VzZUluZGV4Xz11bmRlZmluZWQ7fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxzZXQgbW9kZWwobW9kZWwpe3RoaXMubW9kZWxfPW1vZGVsO2lmKHRoaXMubW9kZWxfKXt0aGlzLm1vZGVsSGVscGVyXz10aGlzLm1vZGVsXy5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTt9ZWxzZXt0aGlzLm1vZGVsSGVscGVyXz11bmRlZmluZWQ7fQp0aGlzLnVwZGF0ZVRvb2xiYXJfKCk7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBmcmFtZXRpbWVUeXBlKCl7cmV0dXJuIHRoaXMuZnJhbWV0aW1lVHlwZV87fSxzZXQgZnJhbWV0aW1lVHlwZSh0eXBlKXtpZih0aGlzLmZyYW1ldGltZVR5cGVfPT09dHlwZSlyZXR1cm47dGhpcy5mcmFtZXRpbWVUeXBlXz10eXBlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgc2VsZWN0ZWRQcm9jZXNzSWQoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZFByb2Nlc3NJZF87fSxzZXQgc2VsZWN0ZWRQcm9jZXNzSWQocHJvY2Vzcyl7aWYodGhpcy5zZWxlY3RlZFByb2Nlc3NJZF89PT1wcm9jZXNzKXJldHVybjt0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkXz1wcm9jZXNzO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7aWYodGhpcy5sYXRlbmN5Q2hhcnRfPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLmxhdGVuY3lDaGFydF8uYnJ1c2hlZFJhbmdlPXNlbGVjdGlvbi5ib3VuZHM7fSxzZXRCcnVzaGVkSW5kaWNlcyhtb3VzZURvd25JbmRleCxjdXJJbmRleCl7dGhpcy5tb3VzZURvd25JbmRleF89bW91c2VEb3duSW5kZXg7dGhpcy5jdXJNb3VzZUluZGV4Xz1jdXJJbmRleDt0aGlzLnVwZGF0ZUJydXNoZWRSYW5nZV8oKTt9LHVwZGF0ZUJydXNoZWRSYW5nZV8oKXtpZih0aGlzLmxhdGVuY3lDaGFydF89PT11bmRlZmluZWQpcmV0dXJuO2xldCByPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtpZih0aGlzLm1vdXNlRG93bkluZGV4Xz09PXVuZGVmaW5lZCl7dGhpcy5sYXRlbmN5Q2hhcnRfLmJydXNoZWRSYW5nZT1yO3JldHVybjt9CnI9dGhpcy5sYXRlbmN5Q2hhcnRfLmNvbXB1dGVCcnVzaFJhbmdlRnJvbUluZGljZXModGhpcy5tb3VzZURvd25JbmRleF8sdGhpcy5jdXJNb3VzZUluZGV4Xyk7dGhpcy5sYXRlbmN5Q2hhcnRfLmJydXNoZWRSYW5nZT1yO2xldCBsYXRlbmN5U2xpY2VzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgdGhpcy5tb2RlbF8uZ2V0QWxsVGhyZWFkcygpKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhyZWFkLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGUuaW5kZXhPZignSW5wdXRMYXRlbmN5OicpPT09MCl7bGF0ZW5jeVNsaWNlcy5wdXNoKGV2ZW50KTt9fX0KbGF0ZW5jeVNsaWNlcz10ci5tb2RlbC5oZWxwZXJzLmdldFNsaWNlc0ludGVyc2VjdGluZ1JhbmdlKHIsbGF0ZW5jeVNsaWNlcyk7Y29uc3QgZXZlbnQ9bmV3IHRyLm1vZGVsLlJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VFdmVudCgpO2V2ZW50LnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQobGF0ZW5jeVNsaWNlcyk7dGhpcy5sYXRlbmN5Q2hhcnRfLmRpc3BhdGNoRXZlbnQoZXZlbnQpO30scmVnaXN0ZXJNb3VzZUV2ZW50Rm9yTGF0ZW5jeUNoYXJ0Xygpe3RoaXMubGF0ZW5jeUNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdpdGVtLW1vdXNlZG93bicsZnVuY3Rpb24oZSl7dGhpcy5tb3VzZURvd25JbmRleF89ZS5pbmRleDt0aGlzLmN1ck1vdXNlSW5kZXhfPWUuaW5kZXg7dGhpcy51cGRhdGVCcnVzaGVkUmFuZ2VfKCk7fS5iaW5kKHRoaXMpKTt0aGlzLmxhdGVuY3lDaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignaXRlbS1tb3VzZW1vdmUnLGZ1bmN0aW9uKGUpe2lmKGUuYnV0dG9uPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLmN1ck1vdXNlSW5kZXhfPWUuaW5kZXg7dGhpcy51cGRhdGVCcnVzaGVkUmFuZ2VfKCk7fS5iaW5kKHRoaXMpKTt0aGlzLmxhdGVuY3lDaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignaXRlbS1tb3VzZXVwJyxmdW5jdGlvbihlKXt0aGlzLmN1ck1vdXNlSW5kZXg9ZS5pbmRleDt0aGlzLnVwZGF0ZUJydXNoZWRSYW5nZV8oKTt9LmJpbmQodGhpcykpO30sdXBkYXRlVG9vbGJhcl8oKXtjb25zdCBicm93c2VyUHJvY2Vzcz10aGlzLm1vZGVsSGVscGVyXy5icm93c2VyUHJvY2Vzcztjb25zdCBsYWJlbHM9W107aWYoYnJvd3NlclByb2Nlc3MhPT11bmRlZmluZWQpe2NvbnN0IGxhYmVsU3RyPSdCcm93c2VyOiAnK2Jyb3dzZXJQcm9jZXNzLnBpZDtsYWJlbHMucHVzaCh7bGFiZWw6bGFiZWxTdHIsdmFsdWU6YnJvd3NlclByb2Nlc3MucGlkfSk7fQpmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YKT2JqZWN0LnZhbHVlcyh0aGlzLm1vZGVsSGVscGVyXy5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCByZW5kZXJlclByb2Nlc3M9cmVuZGVyZXJIZWxwZXIucHJvY2Vzcztjb25zdCBsYWJlbFN0cj0nUmVuZGVyZXI6ICcrcmVuZGVyZXJQcm9jZXNzLnVzZXJGcmllbmRseU5hbWU7bGFiZWxzLnB1c2goe2xhYmVsOmxhYmVsU3RyLHZhbHVlOnJlbmRlcmVyUHJvY2Vzcy51c2VyRnJpZW5kbHlOYW1lfSk7fQppZihsYWJlbHMubGVuZ3RoPT09MClyZXR1cm47dGhpcy5zZWxlY3RlZFByb2Nlc3NJZF89bGFiZWxzWzBdLnZhbHVlO2NvbnN0IHRvb2xiYXJFbD10aGlzLiQudG9vbGJhcjtQb2x5bWVyLmRvbSh0b29sYmFyRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU2VsZWN0b3IodGhpcywnZnJhbWV0aW1lVHlwZScsJ2lucHV0TGF0ZW5jeVNpZGVQYW5lbC5mcmFtZXRpbWVUeXBlJyx0aGlzLmZyYW1ldGltZVR5cGVfLFt7bGFiZWw6J01haW4gVGhyZWFkIEZyYW1lIFRpbWVzJyx2YWx1ZTp0ci5tb2RlbC5oZWxwZXJzLk1BSU5fRlJBTUVUSU1FX1RZUEV9LHtsYWJlbDonSW1wbCBUaHJlYWQgRnJhbWUgVGltZXMnLHZhbHVlOnRyLm1vZGVsLmhlbHBlcnMuSU1QTF9GUkFNRVRJTUVfVFlQRX1dKSk7UG9seW1lci5kb20odG9vbGJhckVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ3NlbGVjdGVkUHJvY2Vzc0lkJywnaW5wdXRMYXRlbmN5U2lkZVBhbmVsLnNlbGVjdGVkUHJvY2Vzc0lkJyx0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkXyxsYWJlbHMpKTt9LGdldCBjdXJyZW50UmFuZ2VPZkludGVyZXN0KCl7aWYodGhpcy5yYW5nZU9mSW50ZXJlc3RfLmlzRW1wdHkpe3JldHVybiB0aGlzLm1vZGVsXy5ib3VuZHM7fQpyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sY3JlYXRlTGF0ZW5jeUxpbmVDaGFydChkYXRhLHRpdGxlLHBhcmVudE5vZGUpe2NvbnN0IGNoYXJ0PW5ldyB0ci51aS5iLkxpbmVDaGFydCgpO1BvbHltZXIuZG9tKHBhcmVudE5vZGUpLmFwcGVuZENoaWxkKGNoYXJ0KTtsZXQgd2lkdGg9NjAwO2lmKGRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGghPT11bmRlZmluZWQpe3dpZHRoPWRvY3VtZW50LmJvZHkuY2xpZW50V2lkdGgqMC41O30KY2hhcnQuZ3JhcGhXaWR0aD13aWR0aDtjaGFydC5jaGFydFRpdGxlPXRpdGxlO2NoYXJ0LmRhdGE9ZGF0YTtyZXR1cm4gY2hhcnQ7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCByZXN1bHRBcmVhPXRoaXMuJC5yZXN1bHRfYXJlYTt0aGlzLmxhdGVuY3lDaGFydF89dW5kZWZpbmVkO3RoaXMuZnJhbWV0aW1lQ2hhcnRfPXVuZGVmaW5lZDtQb2x5bWVyLmRvbShyZXN1bHRBcmVhKS50ZXh0Q29udGVudD0nJztpZih0aGlzLm1vZGVsSGVscGVyXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcmFuZ2VPZkludGVyZXN0PXRoaXMuY3VycmVudFJhbmdlT2ZJbnRlcmVzdDtsZXQgY2hyb21lUHJvY2VzcztpZih0aGlzLm1vZGVsSGVscGVyXy5yZW5kZXJlckhlbHBlcnNbdGhpcy5zZWxlY3RlZFByb2Nlc3NJZF9dKXtjaHJvbWVQcm9jZXNzPXRoaXMubW9kZWxIZWxwZXJfLnJlbmRlcmVySGVscGVyc1t0aGlzLnNlbGVjdGVkUHJvY2Vzc0lkX107fWVsc2V7Y2hyb21lUHJvY2Vzcz10aGlzLm1vZGVsSGVscGVyXy5icm93c2VySGVscGVyO30KY29uc3QgZnJhbWVFdmVudHM9Y2hyb21lUHJvY2Vzcy5nZXRGcmFtZUV2ZW50c0luUmFuZ2UodGhpcy5mcmFtZXRpbWVUeXBlLHJhbmdlT2ZJbnRlcmVzdCk7Y29uc3QgZnJhbWV0aW1lRGF0YT10ci5tb2RlbC5oZWxwZXJzLmdldEZyYW1ldGltZURhdGFGcm9tRXZlbnRzKGZyYW1lRXZlbnRzKTtjb25zdCBhdmVyYWdlRnJhbWV0aW1lPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1lYW4oZnJhbWV0aW1lRGF0YSxkPT5kLmZyYW1ldGltZSk7Y29uc3QgbGF0ZW5jeUV2ZW50cz10aGlzLm1vZGVsSGVscGVyXy5icm93c2VySGVscGVyLmdldExhdGVuY3lFdmVudHNJblJhbmdlKHJhbmdlT2ZJbnRlcmVzdCk7Y29uc3QgbGF0ZW5jeURhdGE9W107bGF0ZW5jeUV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtpZihldmVudC5pbnB1dExhdGVuY3k9PT11bmRlZmluZWQpcmV0dXJuO2xhdGVuY3lEYXRhLnB1c2goe3g6ZXZlbnQuc3RhcnQsbGF0ZW5jeTpldmVudC5pbnB1dExhdGVuY3kvMTAwMH0pO30pO2NvbnN0IGF2ZXJhZ2VMYXRlbmN5PXRyLmIubWF0aC5TdGF0aXN0aWNzLm1lYW4obGF0ZW5jeURhdGEsZnVuY3Rpb24oZCl7cmV0dXJuIGQubGF0ZW5jeTt9KTtjb25zdCBsYXRlbmN5U3VtbWFyeVRleHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20obGF0ZW5jeVN1bW1hcnlUZXh0KS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OidBdmVyYWdlIExhdGVuY3kgJythdmVyYWdlTGF0ZW5jeSsnIG1zJyxib2xkOnRydWV9KSk7UG9seW1lci5kb20ocmVzdWx0QXJlYSkuYXBwZW5kQ2hpbGQobGF0ZW5jeVN1bW1hcnlUZXh0KTtjb25zdCBmcmFtZXRpbWVTdW1tYXJ5VGV4dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtQb2x5bWVyLmRvbShmcmFtZXRpbWVTdW1tYXJ5VGV4dCkuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDonQXZlcmFnZSBGcmFtZSBUaW1lICcrYXZlcmFnZUZyYW1ldGltZSsnIG1zJyxib2xkOnRydWV9KSk7UG9seW1lci5kb20ocmVzdWx0QXJlYSkuYXBwZW5kQ2hpbGQoZnJhbWV0aW1lU3VtbWFyeVRleHQpO2lmKGxhdGVuY3lEYXRhLmxlbmd0aCE9PTApe3RoaXMubGF0ZW5jeUNoYXJ0Xz10aGlzLmNyZWF0ZUxhdGVuY3lMaW5lQ2hhcnQobGF0ZW5jeURhdGEsJ0xhdGVuY3kgT3ZlciBUaW1lJyxyZXN1bHRBcmVhKTt0aGlzLnJlZ2lzdGVyTW91c2VFdmVudEZvckxhdGVuY3lDaGFydF8oKTt9CmlmKGZyYW1ldGltZURhdGEubGVuZ3RoIT09MCl7dGhpcy5mcmFtZXRpbWVDaGFydF89dGhpcy5jcmVhdGVMYXRlbmN5TGluZUNoYXJ0KGZyYW1ldGltZURhdGEsJ0ZyYW1lIFRpbWVzJyxyZXN1bHRBcmVhKTt9fSxnZXQgcmFuZ2VPZkludGVyZXN0KCl7cmV0dXJuIHRoaXMucmFuZ2VPZkludGVyZXN0Xzt9LHNldCByYW5nZU9mSW50ZXJlc3QocmFuZ2VPZkludGVyZXN0KXt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89cmFuZ2VPZkludGVyZXN0O3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxzdXBwb3J0c01vZGVsKG0pe2lmKG09PT11bmRlZmluZWQpe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidVbmtub3duIHRyYWNpbmcgbW9kZWwnfTt9CmlmKCF0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyLnN1cHBvcnRzTW9kZWwobSkpe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBDaHJvbWUgYnJvd3NlciBvciByZW5kZXJlciBwcm9jZXNzIGZvdW5kJ307fQpjb25zdCBtb2RlbEhlbHBlcj1tLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKG1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXImJm1vZGVsSGVscGVyLmJyb3dzZXJIZWxwZXIuaGFzTGF0ZW5jeUV2ZW50cyl7cmV0dXJue3N1cHBvcnRlZDp0cnVlfTt9CnJldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBJbnB1dExhdGVuY3kgZXZlbnRzIHRyYWNlLiBDb25zaWRlciBlbmFibGluZyAnKydiZW5jaG1hcmsiIGFuZCAiaW5wdXQiIGNhdGVnb3J5IHdoZW4gcmVjb3JkaW5nIHRoZSB0cmFjZSd9O30sZ2V0IHRleHRMYWJlbCgpe3JldHVybidJbnB1dCBMYXRlbmN5Jzt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLXMtaW5wdXQtbGF0ZW5jeS1zaWRlLXBhbmVsJyk7fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnN5c3RlbV9zdGF0cycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RTbmFwc2hvdD10ci5tb2RlbC5PYmplY3RTbmFwc2hvdDtmdW5jdGlvbiBTeXN0ZW1TdGF0c1NuYXBzaG90KG9iamVjdEluc3RhbmNlLHRzLGFyZ3Mpe09iamVjdFNuYXBzaG90LmFwcGx5KHRoaXMsYXJndW1lbnRzKTt0aGlzLm9iamVjdEluc3RhbmNlPW9iamVjdEluc3RhbmNlO3RoaXMudHM9dHM7dGhpcy5hcmdzPWFyZ3M7dGhpcy5zdGF0c189YXJnczt9ClN5c3RlbVN0YXRzU25hcHNob3QucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0U25hcHNob3QucHJvdG90eXBlLGluaXRpYWxpemUoKXtpZih0aGlzLmFyZ3MubGVuZ3RoPT09MCl7dGhyb3cgbmV3IEVycm9yKCdObyBzeXN0ZW0gc3RhdHMgc25hcHNob3QgZGF0YS4nKTt9CnRoaXMuc3RhdHNfPXRoaXMuYXJnczt9LGdldFN0YXRzKCl7cmV0dXJuIHRoaXMuc3RhdHNfO30sc2V0U3RhdHMoc3RhdHMpe3RoaXMuc3RhdHNfPXN0YXRzO319O09iamVjdFNuYXBzaG90LnN1YlR5cGVzLnJlZ2lzdGVyKFN5c3RlbVN0YXRzU25hcHNob3Qse3R5cGVOYW1lOidiYXNlOjpUcmFjZUV2ZW50U3lzdGVtU3RhdHNNb25pdG9yOjpTeXN0ZW1TdGF0cyd9KTtyZXR1cm57U3lzdGVtU3RhdHNTbmFwc2hvdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBjb25zdGFudHM9e0hFQURJTkdfV0lEVEg6MjUwfTtyZXR1cm57Y29uc3RhbnRzLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWhlYWRpbmcnLERPV05fQVJST1c6U3RyaW5nLmZyb21DaGFyQ29kZSgweDI1QkUpLFJJR0hUX0FSUk9XOlN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNUI4KSxyZWFkeSh2aWV3cG9ydCl7dGhpcy5zdHlsZS53aWR0aD0odHIudWkuYi5jb25zdGFudHMuSEVBRElOR19XSURUSC02KSsncHgnO3RoaXMuaGVhZGluZ189Jyc7dGhpcy5leHBhbmRlZF89dHJ1ZTt0aGlzLmFycm93VmlzaWJsZV89ZmFsc2U7dGhpcy5zZWxlY3Rpb25HZW5lcmF0b3JfPXVuZGVmaW5lZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy5oZWFkaW5nXzt9LHNldCBoZWFkaW5nKHRleHQpe2lmKHRoaXMuaGVhZGluZ189PT10ZXh0KXJldHVybjt0aGlzLmhlYWRpbmdfPXRleHQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBhcnJvd1Zpc2libGUodmFsKXtpZih0aGlzLmFycm93VmlzaWJsZV89PT12YWwpcmV0dXJuO3RoaXMuYXJyb3dWaXNpYmxlXz0hIXZhbDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHRvb2x0aXAodGV4dCl7dGhpcy4kLmhlYWRpbmcudGl0bGU9dGV4dDt9LHNldCBzZWxlY3Rpb25HZW5lcmF0b3IoZ2VuZXJhdG9yKXtpZih0aGlzLnNlbGVjdGlvbkdlbmVyYXRvcl89PT1nZW5lcmF0b3IpcmV0dXJuO3RoaXMuc2VsZWN0aW9uR2VuZXJhdG9yXz1nZW5lcmF0b3I7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkXzt9LHNldCBleHBhbmRlZChleHBhbmRlZCl7aWYodGhpcy5leHBhbmRlZF89PT1leHBhbmRlZClyZXR1cm47dGhpcy5leHBhbmRlZF89ISFleHBhbmRlZDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sb25IZWFkaW5nRGl2Q2xpY2tlZF8oKXt0aGlzLmRpc3BhdGNoRXZlbnQobmV3IHRyLmIuRXZlbnQoJ2hlYWRpbmctY2xpY2tlZCcsdHJ1ZSkpO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5hcnJvd1Zpc2libGVfKXt0aGlzLiQuYXJyb3cuc3R5bGUuZGlzcGxheT0nJzt9ZWxzZXt0aGlzLiQuYXJyb3cuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhlYWRpbmcuc3R5bGUuZGlzcGxheT10aGlzLmV4cGFuZGVkXz8nJzonbm9uZSc7fQppZih0aGlzLmFycm93VmlzaWJsZV8pe1BvbHltZXIuZG9tKHRoaXMuJC5hcnJvdykudGV4dENvbnRlbnQ9dGhpcy5leHBhbmRlZF8/dGhpcy5ET1dOX0FSUk9XOnRoaXMuUklHSFRfQVJST1c7fQp0aGlzLiQubGluay5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuaGVhZGluZ19jb250ZW50LnN0eWxlLmRpc3BsYXk9J25vbmUnO2lmKHRoaXMuc2VsZWN0aW9uR2VuZXJhdG9yXyl7dGhpcy4kLmxpbmsuc3R5bGUuZGlzcGxheT0naW5saW5lLWJsb2NrJzt0aGlzLiQubGluay5zZWxlY3Rpb249dGhpcy5zZWxlY3Rpb25HZW5lcmF0b3JfO1BvbHltZXIuZG9tKHRoaXMuJC5saW5rKS50ZXh0Q29udGVudD10aGlzLmhlYWRpbmdfO31lbHNle3RoaXMuJC5oZWFkaW5nX2NvbnRlbnQuc3R5bGUuZGlzcGxheT0naW5saW5lLWJsb2NrJztQb2x5bWVyLmRvbSh0aGlzLiQuaGVhZGluZ19jb250ZW50KS50ZXh0Q29udGVudD10aGlzLmhlYWRpbmdfO319fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3RyYWNrJyx0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbik7VHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5Db250YWluZXJUaGF0RGVjb3JhdGVzSXRzQ2hpbGRyZW4ucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS5iLkNvbnRhaW5lclRoYXREZWNvcmF0ZXNJdHNDaGlsZHJlbi5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzKTtpZih2aWV3cG9ydD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCd2aWV3cG9ydCBpcyByZXF1aXJlZCB3aGVuIGNyZWF0aW5nIGEgVHJhY2suJyk7fQp0aGlzLnZpZXdwb3J0Xz12aWV3cG9ydDtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0cmFjaycpO30sZ2V0IHZpZXdwb3J0KCl7cmV0dXJuIHRoaXMudmlld3BvcnRfO30sZ2V0IGRyYXdpbmdDb250YWluZXIoKXtpZih0aGlzIGluc3RhbmNlb2YgdHIudWkudHJhY2tzLkRyYXdpbmdDb250YWluZXIpcmV0dXJuIHRoaXM7bGV0IGN1cj10aGlzLnBhcmVudEVsZW1lbnQ7d2hpbGUoY3VyKXtpZihjdXIgaW5zdGFuY2VvZiB0ci51aS50cmFja3MuRHJhd2luZ0NvbnRhaW5lcilyZXR1cm4gY3VyO2N1cj1jdXIucGFyZW50RWxlbWVudDt9CnJldHVybiB1bmRlZmluZWQ7fSxnZXQgZXZlbnRDb250YWluZXIoKXt9LGludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCl7Y29uc3QgZGM9dGhpcy5kcmF3aW5nQ29udGFpbmVyO2lmKGRjKWRjLmludmFsaWRhdGUoKTt9LGNvbnRleHQoKXtpZighUG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZSlyZXR1cm4gdW5kZWZpbmVkO2lmKCFQb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLmNvbnRleHQpe3Rocm93IG5ldyBFcnJvcignUGFyZW50IGNvbnRhaW5lciBkb2VzIG5vdCBzdXBwb3J0IGNvbnRleHQoKSBtZXRob2QuJyk7fQpyZXR1cm4gUG9seW1lci5kb20odGhpcykucGFyZW50Tm9kZS5jb250ZXh0KCk7fSxkZWNvcmF0ZUNoaWxkXyhjaGlsZFRyYWNrKXt9LHVuZGVjb3JhdGVDaGlsZF8oY2hpbGRUcmFjayl7aWYoY2hpbGRUcmFjay5kZXRhY2gpe2NoaWxkVHJhY2suZGV0YWNoKCk7fX0sdXBkYXRlQ29udGVudHNfKCl7fSxkcmF3VHJhY2sodHlwZSl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgY2FudmFzQm91bmRzPWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y3R4LnNhdmUoKTtjdHgudHJhbnNsYXRlKDAscGl4ZWxSYXRpbyooYm91bmRzLnRvcC1jYW52YXNCb3VuZHMudG9wKSk7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB2aWV3TFdvcmxkPWR0LnhWaWV3VG9Xb3JsZCgwKTtjb25zdCB2aWV3UldvcmxkPWR0LnhWaWV3VG9Xb3JsZChjYW52YXNCb3VuZHMud2lkdGgqcGl4ZWxSYXRpbyk7Y29uc3Qgdmlld0hlaWdodD1ib3VuZHMuaGVpZ2h0KnBpeGVsUmF0aW87dGhpcy5kcmF3KHR5cGUsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpO2N0eC5yZXN0b3JlKCk7fSxkcmF3KHR5cGUsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe30sYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApe30sYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAoY29udGFpbmVyVG9UcmFja01hcCl7fSxhZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb24obG9WWCxoaVZYLGxvVlksaGlWWSxzZWxlY3Rpb24pe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB2aWV3UGl4V2lkdGhXb3JsZD1kdC54Vmlld1ZlY3RvclRvV29ybGQoMSk7Y29uc3QgbG9XWD1kdC54Vmlld1RvV29ybGQobG9WWCpwaXhlbFJhdGlvKTtjb25zdCBoaVdYPWR0LnhWaWV3VG9Xb3JsZChoaVZYKnBpeGVsUmF0aW8pO2NvbnN0IGNsaWVudFJlY3Q9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBhPU1hdGgubWF4KGxvVlksY2xpZW50UmVjdC50b3ApO2NvbnN0IGI9TWF0aC5taW4oaGlWWSxjbGllbnRSZWN0LmJvdHRvbSk7aWYoYT5iKXJldHVybjt0aGlzLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe30sYWRkQ2xvc2VzdEluc3RhbnRFdmVudFRvU2VsZWN0aW9uKGluc3RhbnRFdmVudHMsd29ybGRYLHdvcmxkTWF4RGlzdCxzZWxlY3Rpb24pe2NvbnN0IGluc3RhbnRFdmVudD10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkoaW5zdGFudEV2ZW50cyxmdW5jdGlvbih4KXtyZXR1cm4geC5zdGFydDt9LHdvcmxkWCx3b3JsZE1heERpc3QpO2lmKCFpbnN0YW50RXZlbnQpcmV0dXJuO3NlbGVjdGlvbi5wdXNoKGluc3RhbnRFdmVudCk7fX07cmV0dXJue1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgRXZlbnRQcmVzZW50ZXI9dHIudWkuYi5FdmVudFByZXNlbnRlcjtjb25zdCBPYmplY3RJbnN0YW5jZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdvYmplY3QtaW5zdGFuY2UtdHJhY2snLHRyLnVpLnRyYWNrcy5UcmFjayk7T2JqZWN0SW5zdGFuY2VUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnb2JqZWN0LWluc3RhbmNlLXRyYWNrJyk7dGhpcy5vYmplY3RJbnN0YW5jZXNfPVtdO3RoaXMub2JqZWN0U25hcHNob3RzXz1bXTt0aGlzLmhlYWRpbmdfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaGVhZGluZycpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaGVhZGluZ18pO30sc2V0IGhlYWRpbmcoaGVhZGluZyl7dGhpcy5oZWFkaW5nXy5oZWFkaW5nPWhlYWRpbmc7fSxnZXQgaGVhZGluZygpe3JldHVybiB0aGlzLmhlYWRpbmdfLmhlYWRpbmc7fSxzZXQgdG9vbHRpcCh0b29sdGlwKXt0aGlzLmhlYWRpbmdfLnRvb2x0aXA9dG9vbHRpcDt9LGdldCBvYmplY3RJbnN0YW5jZXMoKXtyZXR1cm4gdGhpcy5vYmplY3RJbnN0YW5jZXNfO30sc2V0IG9iamVjdEluc3RhbmNlcyhvYmplY3RJbnN0YW5jZXMpe2lmKCFvYmplY3RJbnN0YW5jZXN8fG9iamVjdEluc3RhbmNlcy5sZW5ndGg9PT0wKXt0aGlzLmhlYWRpbmc9Jyc7dGhpcy5vYmplY3RJbnN0YW5jZXNfPVtdO3RoaXMub2JqZWN0U25hcHNob3RzXz1bXTtyZXR1cm47fQp0aGlzLmhlYWRpbmc9b2JqZWN0SW5zdGFuY2VzWzBdLmJhc2VUeXBlTmFtZTt0aGlzLm9iamVjdEluc3RhbmNlc189b2JqZWN0SW5zdGFuY2VzO3RoaXMub2JqZWN0U25hcHNob3RzXz1bXTt0aGlzLm9iamVjdEluc3RhbmNlc18uZm9yRWFjaChmdW5jdGlvbihpbnN0YW5jZSl7dGhpcy5vYmplY3RTbmFwc2hvdHNfLnB1c2guYXBwbHkodGhpcy5vYmplY3RTbmFwc2hvdHNfLGluc3RhbmNlLnNuYXBzaG90cyk7fSx0aGlzKTt0aGlzLm9iamVjdFNuYXBzaG90c18uc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnRzLWIudHM7fSk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7fSxnZXQgc25hcHNob3RSYWRpdXNWaWV3KCl7cmV0dXJuIDcqKHdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxKTt9LGRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkdFTkVSQUxfRVZFTlQ6dGhpcy5kcmF3T2JqZWN0SW5zdGFuY2VzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO319LGRyYXdPYmplY3RJbnN0YW5jZXNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgaGVpZ2h0PWJvdW5kcy5oZWlnaHQqcGl4ZWxSYXRpbztjb25zdCBoYWxmSGVpZ2h0PWhlaWdodCowLjU7Y29uc3QgdHdvUGk9TWF0aC5QSSoyO2NvbnN0IGR0PXRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgc25hcHNob3RSYWRpdXNWaWV3PXRoaXMuc25hcHNob3RSYWRpdXNWaWV3O2NvbnN0IHNuYXBzaG90UmFkaXVzV29ybGQ9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKGhlaWdodCk7Y29uc3Qgb2JqZWN0SW5zdGFuY2VzPXRoaXMub2JqZWN0SW5zdGFuY2VzXztsZXQgbG9JPXRyLmIuZmluZExvd0luZGV4SW5Tb3J0ZWRBcnJheShvYmplY3RJbnN0YW5jZXMsZnVuY3Rpb24oaW5zdGFuY2Upe3JldHVybiBpbnN0YW5jZS5kZWxldGlvblRzO30sdmlld0xXb3JsZCk7Y3R4LnNhdmUoKTtjdHguc3Ryb2tlU3R5bGU9J3JnYigwLDAsMCknO2ZvcihsZXQgaT1sb0k7aTxvYmplY3RJbnN0YW5jZXMubGVuZ3RoOysraSl7Y29uc3QgaW5zdGFuY2U9b2JqZWN0SW5zdGFuY2VzW2ldO2NvbnN0IHg9aW5zdGFuY2UuY3JlYXRpb25UcztpZih4PnZpZXdSV29ybGQpYnJlYWs7Y29uc3QgcmlnaHQ9aW5zdGFuY2UuZGVsZXRpb25Ucz09PU51bWJlci5NQVhfVkFMVUU/dmlld1JXb3JsZDppbnN0YW5jZS5kZWxldGlvblRzO2NvbnN0IHhWaWV3PWR0LnhXb3JsZFRvVmlldyh4KTtjb25zdCB3aWR0aFZpZXc9ZHQueFdvcmxkVmVjdG9yVG9WaWV3KHJpZ2h0LXgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0T2JqZWN0SW5zdGFuY2VDb2xvcihpbnN0YW5jZSk7Y3R4LmZpbGxSZWN0KHhWaWV3LHBpeGVsUmF0aW8sd2lkdGhWaWV3LGhlaWdodC0yKnBpeGVsUmF0aW8pO30KY3R4LnJlc3RvcmUoKTtjb25zdCBvYmplY3RTbmFwc2hvdHM9dGhpcy5vYmplY3RTbmFwc2hvdHNfO2xvST10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkob2JqZWN0U25hcHNob3RzLGZ1bmN0aW9uKHNuYXBzaG90KXtyZXR1cm4gc25hcHNob3QudHMrc25hcHNob3RSYWRpdXNXb3JsZDt9LHZpZXdMV29ybGQpO2ZvcihsZXQgaT1sb0k7aTxvYmplY3RTbmFwc2hvdHMubGVuZ3RoOysraSl7Y29uc3Qgc25hcHNob3Q9b2JqZWN0U25hcHNob3RzW2ldO2NvbnN0IHg9c25hcHNob3QudHM7aWYoeC1zbmFwc2hvdFJhZGl1c1dvcmxkPnZpZXdSV29ybGQpYnJlYWs7Y29uc3QgeFZpZXc9ZHQueFdvcmxkVG9WaWV3KHgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0T2JqZWN0U25hcHNob3RDb2xvcihzbmFwc2hvdCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeFZpZXcsaGFsZkhlaWdodCxzbmFwc2hvdFJhZGl1c1ZpZXcsMCx0d29QaSk7Y3R4LmZpbGwoKTtpZihzbmFwc2hvdC5zZWxlY3RlZCl7Y3R4LmxpbmVXaWR0aD01O2N0eC5zdHJva2VTdHlsZT0ncmdiKDEwMCwxMDAsMCknO2N0eC5zdHJva2UoKTtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyh4VmlldyxoYWxmSGVpZ2h0LHNuYXBzaG90UmFkaXVzVmlldy0xLDAsdHdvUGkpO2N0eC5saW5lV2lkdGg9MjtjdHguc3Ryb2tlU3R5bGU9J3JnYigyNTUsMjU1LDApJztjdHguc3Ryb2tlKCk7fWVsc2V7Y3R4LmxpbmVXaWR0aD0xO2N0eC5zdHJva2VTdHlsZT0ncmdiKDAsMCwwKSc7Y3R4LnN0cm9rZSgpO319CmN0eC5saW5lV2lkdGg9MTtsZXQgc2VsZWN0aW9uU3RhdGU9U2VsZWN0aW9uU3RhdGUuTk9ORTtpZihvYmplY3RJbnN0YW5jZXMubGVuZ3RoJiZvYmplY3RJbnN0YW5jZXNbMF0uc2VsZWN0aW9uU3RhdGU9PT1TZWxlY3Rpb25TdGF0ZS5ESU1NRUQpe3NlbGVjdGlvblN0YXRlPVNlbGVjdGlvblN0YXRlLkRJTU1FRDt9CmlmKHNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuRElNTUVEKXtjb25zdCB3aWR0aD1ib3VuZHMud2lkdGgqcGl4ZWxSYXRpbztjdHguZmlsbFN0eWxlPSdyZ2JhKDI1NSwyNTUsMjU1LDAuNSknO2N0eC5maWxsUmVjdCgwLDAsd2lkdGgsaGVpZ2h0KTtjdHgucmVzdG9yZSgpO319LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtpZih0aGlzLm9iamVjdEluc3RhbmNlXyE9PXVuZGVmaW5lZCl7dGhpcy5vYmplY3RJbnN0YW5jZV8uZm9yRWFjaChmdW5jdGlvbihvYmope2V2ZW50VG9UcmFja01hcC5hZGRFdmVudChvYmosdGhpcyk7fSx0aGlzKTt9CmlmKHRoaXMub2JqZWN0U25hcHNob3RzXyE9PXVuZGVmaW5lZCl7dGhpcy5vYmplY3RTbmFwc2hvdHNfLmZvckVhY2goZnVuY3Rpb24ob2JqKXtldmVudFRvVHJhY2tNYXAuYWRkRXZlbnQob2JqLHRoaXMpO30sdGhpcyk7fX0sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe2xldCBmb3VuZFNuYXBzaG90PWZhbHNlO2Z1bmN0aW9uIG9uU25hcHNob3Qoc25hcHNob3Qpe3NlbGVjdGlvbi5wdXNoKHNuYXBzaG90KTtmb3VuZFNuYXBzaG90PXRydWU7fQpjb25zdCBzbmFwc2hvdFJhZGl1c1ZpZXc9dGhpcy5zbmFwc2hvdFJhZGl1c1ZpZXc7Y29uc3Qgc25hcHNob3RSYWRpdXNXb3JsZD12aWV3UGl4V2lkdGhXb3JsZCpzbmFwc2hvdFJhZGl1c1ZpZXc7dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLm9iamVjdFNuYXBzaG90c18sZnVuY3Rpb24oeCl7cmV0dXJuIHgudHMtc25hcHNob3RSYWRpdXNXb3JsZDt9LGZ1bmN0aW9uKHgpe3JldHVybiAyKnNuYXBzaG90UmFkaXVzV29ybGQ7fSxsb1dYLGhpV1gsb25TbmFwc2hvdCk7aWYoZm91bmRTbmFwc2hvdClyZXR1cm47dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLm9iamVjdEluc3RhbmNlc18sZnVuY3Rpb24oeCl7cmV0dXJuIHguY3JlYXRpb25Uczt9LGZ1bmN0aW9uKHgpe3JldHVybiB4LmRlbGV0aW9uVHMteC5jcmVhdGlvblRzO30sbG9XWCxoaVdYLCh2YWx1ZSk9PntzZWxlY3Rpb24ucHVzaCh2YWx1ZSk7fSk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtsZXQgZXZlbnRzO2lmKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0U25hcHNob3Qpe2V2ZW50cz10aGlzLm9iamVjdFNuYXBzaG90c187fWVsc2UgaWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RJbnN0YW5jZSl7ZXZlbnRzPXRoaXMub2JqZWN0SW5zdGFuY2VzXzt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBldmVudCcpO30KY29uc3QgaW5kZXg9ZXZlbnRzLmluZGV4T2YoZXZlbnQpO2NvbnN0IG5ld0luZGV4PWluZGV4K29mZnNldDtpZihuZXdJbmRleD49MCYmbmV3SW5kZXg8ZXZlbnRzLmxlbmd0aCl7c2VsZWN0aW9uLnB1c2goZXZlbnRzW25ld0luZGV4XSk7cmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fSxhZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uKGZpbHRlcixzZWxlY3Rpb24pe30sYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24od29ybGRYLHdvcmxkTWF4RGlzdCxsb1ksaGlZLHNlbGVjdGlvbil7Y29uc3Qgc25hcHNob3Q9dHIuYi5maW5kQ2xvc2VzdEVsZW1lbnRJblNvcnRlZEFycmF5KHRoaXMub2JqZWN0U25hcHNob3RzXyxmdW5jdGlvbih4KXtyZXR1cm4geC50czt9LHdvcmxkWCx3b3JsZE1heERpc3QpO2lmKCFzbmFwc2hvdClyZXR1cm47c2VsZWN0aW9uLnB1c2goc25hcHNob3QpO319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFKTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoT2JqZWN0SW5zdGFuY2VUcmFjayxvcHRpb25zKTtyZXR1cm57T2JqZWN0SW5zdGFuY2VUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFN0YWNrZWRCYXJzVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3N0YWNrZWQtYmFycy10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtTdGFja2VkQmFyc1RyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdzdGFja2VkLWJhcnMtdHJhY2snKTt0aGlzLm9iamVjdEluc3RhbmNlXz1udWxsO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApe2NvbnN0IG9iamVjdFNuYXBzaG90cz10aGlzLm9iamVjdEluc3RhbmNlXy5zbmFwc2hvdHM7b2JqZWN0U25hcHNob3RzLmZvckVhY2goZnVuY3Rpb24ob2JqKXtldmVudFRvVHJhY2tNYXAuYWRkRXZlbnQob2JqLHRoaXMpO30sdGhpcyk7fSxhZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UobG9XWCxoaVdYLHZpZXdQaXhXaWR0aFdvcmxkLHNlbGVjdGlvbil7ZnVuY3Rpb24gb25TbmFwc2hvdChzbmFwc2hvdCl7c2VsZWN0aW9uLnB1c2goc25hcHNob3QpO30KY29uc3Qgc25hcHNob3RzPXRoaXMub2JqZWN0SW5zdGFuY2VfLnNuYXBzaG90cztjb25zdCBtYXhCb3VuZHM9dGhpcy5vYmplY3RJbnN0YW5jZV8ucGFyZW50Lm1vZGVsLmJvdW5kcy5tYXg7dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyhzbmFwc2hvdHMsZnVuY3Rpb24oeCl7cmV0dXJuIHgudHM7fSxmdW5jdGlvbih4LGkpe2lmKGk9PT1zbmFwc2hvdHMubGVuZ3RoLTEpe2lmKHNuYXBzaG90cy5sZW5ndGg9PT0xKXtyZXR1cm4gbWF4Qm91bmRzO30KcmV0dXJuIHNuYXBzaG90c1tpXS50cy1zbmFwc2hvdHNbaS0xXS50czt9CnJldHVybiBzbmFwc2hvdHNbaSsxXS50cy1zbmFwc2hvdHNbaV0udHM7fSxsb1dYLGhpV1gsb25TbmFwc2hvdCk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtpZighKGV2ZW50IGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0U25hcHNob3QpKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBldmVudCcpO30KY29uc3Qgb2JqZWN0U25hcHNob3RzPXRoaXMub2JqZWN0SW5zdGFuY2VfLnNuYXBzaG90cztjb25zdCBpbmRleD1vYmplY3RTbmFwc2hvdHMuaW5kZXhPZihldmVudCk7Y29uc3QgbmV3SW5kZXg9aW5kZXgrb2Zmc2V0O2lmKG5ld0luZGV4Pj0wJiZuZXdJbmRleDxvYmplY3RTbmFwc2hvdHMubGVuZ3RoKXtzZWxlY3Rpb24ucHVzaChvYmplY3RTbmFwc2hvdHNbbmV3SW5kZXhdKTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtjb25zdCBzbmFwc2hvdD10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkodGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzLGZ1bmN0aW9uKHgpe3JldHVybiB4LnRzO30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIXNuYXBzaG90KXJldHVybjtzZWxlY3Rpb24ucHVzaChzbmFwc2hvdCk7fX07cmV0dXJue1N0YWNrZWRCYXJzVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuc3lzdGVtX3N0YXRzJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7bGV0IHN0YXRDb3VudDtjb25zdCBleGNsdWRlZFN0YXRzPXsnbWVtaW5mbyc6eydwc3dwaW4nOjAsJ3Bzd3BvdXQnOjAsJ3BnbWFqZmF1bHQnOjB9LCdkaXNraW5mbyc6eydpbyc6MCwnaW9fdGltZSc6MCwncmVhZF90aW1lJzowLCdyZWFkcyc6MCwncmVhZHNfbWVyZ2VkJzowLCdzZWN0b3JzX3JlYWQnOjAsJ3NlY3RvcnNfd3JpdHRlbic6MCwnd2VpZ2h0ZWRfaW9fdGltZSc6MCwnd3JpdGVfdGltZSc6MCwnd3JpdGVzJzowLCd3cml0ZXNfbWVyZ2VkJzowfSwnc3dhcGluZm8nOnt9LCdwZXJmaW5mbyc6eydpZGxlX3RpbWUnOjAsJ3JlYWRfdHJhbnNmZXJfY291bnQnOjAsJ3dyaXRlX3RyYW5zZmVyX2NvdW50JzowLCdvdGhlcl90cmFuc2Zlcl9jb3VudCc6MCwncmVhZF9vcGVyYXRpb25fY291bnQnOjAsJ3dyaXRlX29wZXJhdGlvbl9jb3VudCc6MCwnb3RoZXJfb3BlcmF0aW9uX2NvdW50JzowLCdwYWdlZmlsZV9wYWdlc193cml0dGVuJzowLCdwYWdlZmlsZV9wYWdlc193cml0ZV9pb3MnOjAsJ2F2YWlsYWJsZV9wYWdlcyc6MCwncGFnZXNfcmVhZCc6MCwncGFnZV9yZWFkX2lvcyc6MH19O2NvbnN0IFN5c3RlbVN0YXRzSW5zdGFuY2VUcmFjaz10ci51aS5iLmRlZmluZSgndHItdWktZS1zeXN0ZW0tc3RhdHMtaW5zdGFuY2UtdHJhY2snLHRyLnVpLnRyYWNrcy5TdGFja2VkQmFyc1RyYWNrKTtjb25zdCBrUGFnZVNpemVXaW5kb3dzPTQwOTY7U3lzdGVtU3RhdHNJbnN0YW5jZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5TdGFja2VkQmFyc1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlN0YWNrZWRCYXJzVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndHItdWktZS1zeXN0ZW0tc3RhdHMtaW5zdGFuY2UtdHJhY2snKTt0aGlzLm9iamVjdEluc3RhbmNlXz1udWxsO30sc2V0IG9iamVjdEluc3RhbmNlcyhvYmplY3RJbnN0YW5jZXMpe2lmKCFvYmplY3RJbnN0YW5jZXMpe3RoaXMub2JqZWN0SW5zdGFuY2VfPVtdO3JldHVybjt9CmlmKG9iamVjdEluc3RhbmNlcy5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ0JhZCBvYmplY3QgaW5zdGFuY2UgY291bnQuJyk7fQp0aGlzLm9iamVjdEluc3RhbmNlXz1vYmplY3RJbnN0YW5jZXNbMF07aWYodGhpcy5vYmplY3RJbnN0YW5jZV8hPT1udWxsKXt0aGlzLmNvbXB1dGVSYXRlc18odGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzKTt0aGlzLm1heFN0YXRzXz10aGlzLmNvbXB1dGVNYXhTdGF0c18odGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzKTt9fSxjb21wdXRlUmF0ZXNfKHNuYXBzaG90cyl7Zm9yKGxldCBpPTA7aTxzbmFwc2hvdHMubGVuZ3RoO2krKyl7Y29uc3Qgc25hcHNob3Q9c25hcHNob3RzW2ldO2NvbnN0IHN0YXRzPXNuYXBzaG90LmdldFN0YXRzKCk7bGV0IHByZXZTbmFwc2hvdDtpZihpPT09MCl7cHJldlNuYXBzaG90PXNuYXBzaG90c1swXTt9ZWxzZXtwcmV2U25hcHNob3Q9c25hcHNob3RzW2ktMV07fQpjb25zdCBwcmV2U3RhdHM9cHJldlNuYXBzaG90LmdldFN0YXRzKCk7bGV0IHRpbWVJbnRlcnZhbFNlY29uZHM9KHNuYXBzaG90LnRzLXByZXZTbmFwc2hvdC50cykvMTAwMDtpZih0aW1lSW50ZXJ2YWxTZWNvbmRzPT09MCl7dGltZUludGVydmFsU2Vjb25kcz0xO30KdGhpcy5jb21wdXRlUmF0ZXNSZWN1cnNpdmVfKHByZXZTdGF0cyxzdGF0cyx0aW1lSW50ZXJ2YWxTZWNvbmRzKTt9fSxjb21wdXRlUmF0ZXNSZWN1cnNpdmVfKHByZXZTdGF0cyxzdGF0cyx0aW1lSW50ZXJ2YWxTZWNvbmRzKXtmb3IoY29uc3Qgc3RhdE5hbWUgaW4gc3RhdHMpe2lmKHN0YXRzW3N0YXROYW1lXWluc3RhbmNlb2YgT2JqZWN0KXt0aGlzLmNvbXB1dGVSYXRlc1JlY3Vyc2l2ZV8ocHJldlN0YXRzW3N0YXROYW1lXSxzdGF0c1tzdGF0TmFtZV0sdGltZUludGVydmFsU2Vjb25kcyk7fWVsc2V7aWYoc3RhdE5hbWU9PT0nc2VjdG9yc19yZWFkJyl7c3RhdHMuYnl0ZXNfcmVhZF9wZXJfc2VjPShzdGF0cy5zZWN0b3JzX3JlYWQtCnByZXZTdGF0cy5zZWN0b3JzX3JlYWQpKjUxMi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0nc2VjdG9yc193cml0dGVuJyl7c3RhdHMuYnl0ZXNfd3JpdHRlbl9wZXJfc2VjPShzdGF0cy5zZWN0b3JzX3dyaXR0ZW4tCnByZXZTdGF0cy5zZWN0b3JzX3dyaXR0ZW4pKjUxMi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0ncGdtYWpmYXVsdCcpe3N0YXRzLnBnbWFqZmF1bHRfcGVyX3NlYz0oc3RhdHMucGdtYWpmYXVsdC0KcHJldlN0YXRzLnBnbWFqZmF1bHQpL3RpbWVJbnRlcnZhbFNlY29uZHM7fQppZihzdGF0TmFtZT09PSdwc3dwaW4nKXtzdGF0cy5ieXRlc19zd3Bpbl9wZXJfc2VjPShzdGF0cy5wc3dwaW4tCnByZXZTdGF0cy5wc3dwaW4pKjEwMDAvdGltZUludGVydmFsU2Vjb25kczt9CmlmKHN0YXROYW1lPT09J3Bzd3BvdXQnKXtzdGF0cy5ieXRlc19zd3BvdXRfcGVyX3NlYz0oc3RhdHMucHN3cG91dC0KcHJldlN0YXRzLnBzd3BvdXQpKjEwMDAvdGltZUludGVydmFsU2Vjb25kczt9CmlmKHN0YXROYW1lPT09J2lkbGVfdGltZScpe2NvbnN0IHVuaXRzPXRyLmIuY29udmVydFVuaXQoMTAwLix0ci5iLlVuaXRTY2FsZS5USU1FLk5BTk9fU0VDLHRyLmIuVW5pdFNjYWxlLlRJTUUuU0VDKTtjb25zdCBpZGxlVGlsZT0oc3RhdHMuaWRsZV90aW1lLXByZXZTdGF0cy5pZGxlX3RpbWUpKnVuaXRzO3N0YXRzLmlkbGVfdGltZV9wZXJfc2VjPWlkbGVUaWxlL3RpbWVJbnRlcnZhbFNlY29uZHM7fQppZihzdGF0TmFtZT09PSdyZWFkX3RyYW5zZmVyX2NvdW50Jyl7Y29uc3QgYnl0ZXNSZWFkPXN0YXRzLnJlYWRfdHJhbnNmZXJfY291bnQtCnByZXZTdGF0cy5yZWFkX3RyYW5zZmVyX2NvdW50O3N0YXRzLmJ5dGVzX3JlYWRfcGVyX3NlYz1ieXRlc1JlYWQvdGltZUludGVydmFsU2Vjb25kczt9CmlmKHN0YXROYW1lPT09J3dyaXRlX3RyYW5zZmVyX2NvdW50Jyl7Y29uc3QgYnl0ZXNXcml0dGVuPXN0YXRzLndyaXRlX3RyYW5zZmVyX2NvdW50LQpwcmV2U3RhdHMud3JpdGVfdHJhbnNmZXJfY291bnQ7c3RhdHMuYnl0ZXNfd3JpdHRlbl9wZXJfc2VjPWJ5dGVzV3JpdHRlbi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0nb3RoZXJfdHJhbnNmZXJfY291bnQnKXtjb25zdCBieXRlc1RyYW5zZmVyPXN0YXRzLm90aGVyX3RyYW5zZmVyX2NvdW50LQpwcmV2U3RhdHMub3RoZXJfdHJhbnNmZXJfY291bnQ7c3RhdHMuYnl0ZXNfb3RoZXJfcGVyX3NlYz1ieXRlc1RyYW5zZmVyL3RpbWVJbnRlcnZhbFNlY29uZHM7fQppZihzdGF0TmFtZT09PSdyZWFkX29wZXJhdGlvbl9jb3VudCcpe2NvbnN0IHJlYWRPcGVyYXRpb249c3RhdHMucmVhZF9vcGVyYXRpb25fY291bnQtCnByZXZTdGF0cy5yZWFkX29wZXJhdGlvbl9jb3VudDtzdGF0cy5yZWFkX29wZXJhdGlvbl9wZXJfc2VjPXJlYWRPcGVyYXRpb24vdGltZUludGVydmFsU2Vjb25kczt9CmlmKHN0YXROYW1lPT09J3dyaXRlX29wZXJhdGlvbl9jb3VudCcpe2NvbnN0IHdyaXRlT3BlcmF0aW9uPXN0YXRzLndyaXRlX29wZXJhdGlvbl9jb3VudC0KcHJldlN0YXRzLndyaXRlX29wZXJhdGlvbl9jb3VudDtzdGF0cy53cml0ZV9vcGVyYXRpb25fcGVyX3NlYz13cml0ZU9wZXJhdGlvbi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0nb3RoZXJfb3BlcmF0aW9uX2NvdW50Jyl7Y29uc3Qgb3RoZXJPcGVyYXRpb249c3RhdHMub3RoZXJfb3BlcmF0aW9uX2NvdW50LQpwcmV2U3RhdHMub3RoZXJfb3BlcmF0aW9uX2NvdW50O3N0YXRzLm90aGVyX29wZXJhdGlvbl9wZXJfc2VjPW90aGVyT3BlcmF0aW9uL3RpbWVJbnRlcnZhbFNlY29uZHM7fQppZihzdGF0TmFtZT09PSdwYWdlZmlsZV9wYWdlc193cml0dGVuJyl7Y29uc3QgcGFnZUZpbGVCeXRlc1dyaXR0ZW49KHN0YXRzLnBhZ2VmaWxlX3BhZ2VzX3dyaXR0ZW4tCnByZXZTdGF0cy5wYWdlZmlsZV9wYWdlc193cml0dGVuKSprUGFnZVNpemVXaW5kb3dzO3N0YXRzLnBhZ2VmaWxlX2J5dGVzX3dyaXR0ZW5fcGVyX3NlYz1wYWdlRmlsZUJ5dGVzV3JpdHRlbi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0ncGFnZWZpbGVfcGFnZXNfd3JpdGVfaW9zJyl7Y29uc3QgcGFnZWZpbGVXcml0ZU9wZXJhdGlvbj1zdGF0cy5wYWdlZmlsZV9wYWdlc193cml0ZV9pb3MtCnByZXZTdGF0cy5wYWdlZmlsZV9wYWdlc193cml0ZV9pb3M7c3RhdHMucGFnZWZpbGVfd3JpdGVfb3BlcmF0aW9uX3Blcl9zZWM9cGFnZWZpbGVXcml0ZU9wZXJhdGlvbi90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0nYXZhaWxhYmxlX3BhZ2VzJyl7c3RhdHMuYXZhaWxhYmxlX3BhZ2VzX2luX2J5dGVzPXN0YXRzLmF2YWlsYWJsZV9wYWdlcyprUGFnZVNpemVXaW5kb3dzO30KaWYoc3RhdE5hbWU9PT0ncGFnZXNfcmVhZCcpe2NvbnN0IHBhZ2VzQnl0ZXNSZWFkPShzdGF0cy5wYWdlc19yZWFkLXByZXZTdGF0cy5wYWdlc19yZWFkKSprUGFnZVNpemVXaW5kb3dzO3N0YXRzLmJ5dGVzX3JlYWRfcGVyX3NlYz1wYWdlc0J5dGVzUmVhZC90aW1lSW50ZXJ2YWxTZWNvbmRzO30KaWYoc3RhdE5hbWU9PT0ncGFnZV9yZWFkX2lvcycpe2NvbnN0IHBhZ2VzQnl0ZXNSZWFkT3BlcmF0aW9ucz1zdGF0cy5wYWdlX3JlYWRfaW9zLXByZXZTdGF0cy5wYWdlX3JlYWRfaW9zO3N0YXRzLnBhZ2VmaWxlX3dyaXRlX29wZXJhdGlvbl9wZXJfc2VjPXBhZ2VzQnl0ZXNSZWFkT3BlcmF0aW9ucy90aW1lSW50ZXJ2YWxTZWNvbmRzO319fX0sY29tcHV0ZU1heFN0YXRzXyhzbmFwc2hvdHMpe2NvbnN0IG1heFN0YXRzPXt9O3N0YXRDb3VudD0wO2ZvcihsZXQgaT0wO2k8c25hcHNob3RzLmxlbmd0aDtpKyspe2NvbnN0IHNuYXBzaG90PXNuYXBzaG90c1tpXTtjb25zdCBzdGF0cz1zbmFwc2hvdC5nZXRTdGF0cygpO3RoaXMuY29tcHV0ZU1heFN0YXRzUmVjdXJzaXZlXyhzdGF0cyxtYXhTdGF0cyxleGNsdWRlZFN0YXRzKTt9CnJldHVybiBtYXhTdGF0czt9LGNvbXB1dGVNYXhTdGF0c1JlY3Vyc2l2ZV8oc3RhdHMsbWF4U3RhdHMsZXhjbHVkZWRTdGF0cyl7Zm9yKGNvbnN0IHN0YXROYW1lIGluIHN0YXRzKXtpZihzdGF0c1tzdGF0TmFtZV1pbnN0YW5jZW9mIE9iamVjdCl7aWYoIShzdGF0TmFtZSBpbiBtYXhTdGF0cykpe21heFN0YXRzW3N0YXROYW1lXT17fTt9CmxldCBleGNsdWRlZE5lc3RlZDtpZihleGNsdWRlZFN0YXRzJiZzdGF0TmFtZSBpbiBleGNsdWRlZFN0YXRzKXtleGNsdWRlZE5lc3RlZD1leGNsdWRlZFN0YXRzW3N0YXROYW1lXTt9ZWxzZXtleGNsdWRlZE5lc3RlZD1udWxsO30KdGhpcy5jb21wdXRlTWF4U3RhdHNSZWN1cnNpdmVfKHN0YXRzW3N0YXROYW1lXSxtYXhTdGF0c1tzdGF0TmFtZV0sZXhjbHVkZWROZXN0ZWQpO31lbHNle2lmKGV4Y2x1ZGVkU3RhdHMmJnN0YXROYW1lIGluIGV4Y2x1ZGVkU3RhdHMpe2NvbnRpbnVlO30KaWYoIShzdGF0TmFtZSBpbiBtYXhTdGF0cykpe21heFN0YXRzW3N0YXROYW1lXT0wO3N0YXRDb3VudCsrO30KaWYoc3RhdHNbc3RhdE5hbWVdPm1heFN0YXRzW3N0YXROYW1lXSl7bWF4U3RhdHNbc3RhdE5hbWVdPXN0YXRzW3N0YXROYW1lXTt9fX19LGdldCBoZWlnaHQoKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuaGVpZ2h0O30sc2V0IGhlaWdodChoZWlnaHQpe3RoaXMuc3R5bGUuaGVpZ2h0PWhlaWdodDt9LGRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkdFTkVSQUxfRVZFTlQ6dGhpcy5kcmF3U3RhdEJhcnNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7YnJlYWs7fX0sZHJhd1N0YXRCYXJzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpe2NvbnN0IGN0eD10aGlzLmNvbnRleHQoKTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGJvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IHdpZHRoPWJvdW5kcy53aWR0aCpwaXhlbFJhdGlvO2NvbnN0IGhlaWdodD0oYm91bmRzLmhlaWdodCpwaXhlbFJhdGlvKS9zdGF0Q291bnQ7Y29uc3QgdnA9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBtYXhTdGF0cz10aGlzLm1heFN0YXRzXztjb25zdCBvYmplY3RTbmFwc2hvdHM9dGhpcy5vYmplY3RJbnN0YW5jZV8uc25hcHNob3RzO2xldCBsb3dJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkob2JqZWN0U25hcHNob3RzLGZ1bmN0aW9uKHNuYXBzaG90KXtyZXR1cm4gc25hcHNob3QudHM7fSx2aWV3TFdvcmxkKTtpZihsb3dJbmRleD4wKWxvd0luZGV4LT0xO2ZvcihsZXQgaT1sb3dJbmRleDtpPG9iamVjdFNuYXBzaG90cy5sZW5ndGg7KytpKXtjb25zdCBzbmFwc2hvdD1vYmplY3RTbmFwc2hvdHNbaV07Y29uc3QgdHJhY2U9c25hcHNob3QuZ2V0U3RhdHMoKTtjb25zdCBjdXJyZW50WT1oZWlnaHQ7Y29uc3QgbGVmdD1zbmFwc2hvdC50cztpZihsZWZ0PnZpZXdSV29ybGQpYnJlYWs7bGV0IGxlZnRWaWV3PXZwLnhXb3JsZFRvVmlldyhsZWZ0KTtpZihsZWZ0VmlldzwwKWxlZnRWaWV3PTA7bGV0IHJpZ2h0O2lmKGkhPT1vYmplY3RTbmFwc2hvdHMubGVuZ3RoLTEpe3JpZ2h0PW9iamVjdFNuYXBzaG90c1tpKzFdLnRzO31lbHNle2lmKG9iamVjdFNuYXBzaG90cy5sZW5ndGg+MSl7cmlnaHQ9b2JqZWN0U25hcHNob3RzW2ldLnRzKyhvYmplY3RTbmFwc2hvdHNbaV0udHMtCm9iamVjdFNuYXBzaG90c1tpLTFdLnRzKTt9ZWxzZXtyaWdodD10aGlzLm9iamVjdEluc3RhbmNlXy5wYXJlbnQubW9kZWwuYm91bmRzLm1heDt9fQpsZXQgcmlnaHRWaWV3PXZwLnhXb3JsZFRvVmlldyhyaWdodCk7aWYocmlnaHRWaWV3PndpZHRoKXtyaWdodFZpZXc9d2lkdGg7fQpsZWZ0Vmlldz1NYXRoLmZsb29yKGxlZnRWaWV3KTtyaWdodFZpZXc9TWF0aC5mbG9vcihyaWdodFZpZXcpO3RoaXMuZHJhd1N0YXRCYXJzUmVjdXJzaXZlXyhzbmFwc2hvdCxsZWZ0VmlldyxyaWdodFZpZXcsaGVpZ2h0LHRyYWNlLG1heFN0YXRzLGN1cnJlbnRZKTtpZihpPT09bG93SW5kZXgpe3RoaXMuZHJhd1N0YXROYW1lc18obGVmdFZpZXcsaGVpZ2h0LGN1cnJlbnRZLCcnLG1heFN0YXRzKTt9fQpjdHgubGluZVdpZHRoPTE7fSxkcmF3U3RhdEJhcnNSZWN1cnNpdmVfKHNuYXBzaG90LGxlZnRWaWV3LHJpZ2h0VmlldyxoZWlnaHQsc3RhdHMsbWF4U3RhdHMsY3VycmVudFkpe2NvbnN0IGN0eD10aGlzLmNvbnRleHQoKTtmb3IoY29uc3Qgc3RhdE5hbWUgaW4gbWF4U3RhdHMpe2lmKHN0YXRzW3N0YXROYW1lXWluc3RhbmNlb2YgT2JqZWN0KXtjdXJyZW50WT10aGlzLmRyYXdTdGF0QmFyc1JlY3Vyc2l2ZV8oc25hcHNob3QsbGVmdFZpZXcscmlnaHRWaWV3LGhlaWdodCxzdGF0c1tzdGF0TmFtZV0sbWF4U3RhdHNbc3RhdE5hbWVdLGN1cnJlbnRZKTt9ZWxzZXtjb25zdCBtYXhTdGF0PW1heFN0YXRzW3N0YXROYW1lXTtjdHguZmlsbFN0eWxlPUV2ZW50UHJlc2VudGVyLmdldEJhclNuYXBzaG90Q29sb3Ioc25hcHNob3QsTWF0aC5yb3VuZChjdXJyZW50WS9oZWlnaHQpKTtsZXQgYmFySGVpZ2h0O2lmKG1heFN0YXQ+MCl7YmFySGVpZ2h0PWhlaWdodCpNYXRoLm1heChzdGF0c1tzdGF0TmFtZV0sMCkvbWF4U3RhdDt9ZWxzZXtiYXJIZWlnaHQ9MDt9CmN0eC5maWxsUmVjdChsZWZ0VmlldyxjdXJyZW50WS1iYXJIZWlnaHQsTWF0aC5tYXgocmlnaHRWaWV3LWxlZnRWaWV3LDEpLGJhckhlaWdodCk7Y3VycmVudFkrPWhlaWdodDt9fQpyZXR1cm4gY3VycmVudFk7fSxkcmF3U3RhdE5hbWVzXyhsZWZ0VmlldyxoZWlnaHQsY3VycmVudFkscHJlZml4LG1heFN0YXRzKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y3R4LnRleHRBbGlnbj0nZW5kJztjdHguZm9udD0nMTJweCBBcmlhbCc7Y3R4LmZpbGxTdHlsZT0nIzAwMDAwMCc7Zm9yKGNvbnN0IHN0YXROYW1lIGluIG1heFN0YXRzKXtpZihtYXhTdGF0c1tzdGF0TmFtZV1pbnN0YW5jZW9mIE9iamVjdCl7Y3VycmVudFk9dGhpcy5kcmF3U3RhdE5hbWVzXyhsZWZ0VmlldyxoZWlnaHQsY3VycmVudFksc3RhdE5hbWUsbWF4U3RhdHNbc3RhdE5hbWVdKTt9ZWxzZXtsZXQgZnVsbG5hbWU9c3RhdE5hbWU7aWYocHJlZml4IT09Jycpe2Z1bGxuYW1lPXByZWZpeCsnIDo6ICcrc3RhdE5hbWU7fQpjdHguZmlsbFRleHQoZnVsbG5hbWUsbGVmdFZpZXctMTAsY3VycmVudFktaGVpZ2h0LzQpO2N1cnJlbnRZKz1oZWlnaHQ7fX0KcmV0dXJuIGN1cnJlbnRZO319O3RyLnVpLnRyYWNrcy5PYmplY3RJbnN0YW5jZVRyYWNrLnJlZ2lzdGVyKFN5c3RlbVN0YXRzSW5zdGFuY2VUcmFjayx7dHlwZU5hbWU6J2Jhc2U6OlRyYWNlRXZlbnRTeXN0ZW1TdGF0c01vbml0b3I6OlN5c3RlbVN0YXRzJ30pO3JldHVybntTeXN0ZW1TdGF0c0luc3RhbmNlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUuc3lzdGVtX3N0YXRzJyxmdW5jdGlvbigpe2NvbnN0IFN5c3RlbVN0YXRzU25hcHNob3RWaWV3PXRyLnVpLmIuZGVmaW5lKCd0ci11aS1lLXN5c3RlbS1zdGF0cy1zbmFwc2hvdC12aWV3Jyx0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcpO1N5c3RlbVN0YXRzU25hcHNob3RWaWV3LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldy5wcm90b3R5cGUsZGVjb3JhdGUoKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd0ci11aS1lLXN5c3RlbS1zdGF0cy1zbmFwc2hvdC12aWV3Jyk7fSx1cGRhdGVDb250ZW50cygpe2NvbnN0IHNuYXBzaG90PXRoaXMub2JqZWN0U25hcHNob3RfO2lmKCFzbmFwc2hvdHx8IXNuYXBzaG90LmdldFN0YXRzKCkpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PSdObyBzeXN0ZW0gc3RhdHMgc25hcHNob3QgZm91bmQuJztyZXR1cm47fQpQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztjb25zdCBzdGF0cz1zbmFwc2hvdC5nZXRTdGF0cygpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuYnVpbGRMaXN0XyhzdGF0cykpO30saXNGbG9hdChuKXtyZXR1cm4gdHlwZW9mIG49PT0nbnVtYmVyJyYmbiUxIT09MDt9LGJ1aWxkTGlzdF8oc3RhdHMpe2NvbnN0IHN0YXRMaXN0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3VsJyk7Zm9yKGNvbnN0IHN0YXROYW1lIGluIHN0YXRzKXtjb25zdCBzdGF0VGV4dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdsaScpO1BvbHltZXIuZG9tKHN0YXRUZXh0KS50ZXh0Q29udGVudD0nJytzdGF0TmFtZSsnOiAnO1BvbHltZXIuZG9tKHN0YXRMaXN0KS5hcHBlbmRDaGlsZChzdGF0VGV4dCk7aWYoc3RhdHNbc3RhdE5hbWVdaW5zdGFuY2VvZiBPYmplY3Qpe1BvbHltZXIuZG9tKHN0YXRMaXN0KS5hcHBlbmRDaGlsZCh0aGlzLmJ1aWxkTGlzdF8oc3RhdHNbc3RhdE5hbWVdKSk7fWVsc2V7aWYodGhpcy5pc0Zsb2F0KHN0YXRzW3N0YXROYW1lXSkpe1BvbHltZXIuZG9tKHN0YXRUZXh0KS50ZXh0Q29udGVudCs9c3RhdHNbc3RhdE5hbWVdLnRvRml4ZWQoMik7fWVsc2V7UG9seW1lci5kb20oc3RhdFRleHQpLnRleHRDb250ZW50Kz1zdGF0c1tzdGF0TmFtZV07fX19CnJldHVybiBzdGF0TGlzdDt9fTt0ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcucmVnaXN0ZXIoU3lzdGVtU3RhdHNTbmFwc2hvdFZpZXcse3R5cGVOYW1lOidiYXNlOjpUcmFjZUV2ZW50U3lzdGVtU3RhdHNNb25pdG9yOjpTeXN0ZW1TdGF0cyd9KTtyZXR1cm57U3lzdGVtU3RhdHNTbmFwc2hvdFZpZXcsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmUudjgnLGZ1bmN0aW9uKCl7Y29uc3QgSUdOT1JFRF9FTlRSSUVTPXttYXRjaDpmdWxsPT5mdWxsLnN0YXJ0c1dpdGgoJypDT0RFX0FHRV8nKX07Y29uc3QgSU5TVEFOQ0VfVFlQRV9HUk9VUFM9e0ZJWEVEX0FSUkFZX1RZUEU6e21hdGNoOmZ1bGw9PmZ1bGwuc3RhcnRzV2l0aCgnKkZJWEVEX0FSUkFZXycpLHJlYWxFbnRyeTonRklYRURfQVJSQVlfVFlQRScsa2V5VG9OYW1lOmtleT0+a2V5LnNsaWNlKCcqRklYRURfQVJSQVlfJy5sZW5ndGgpLnNsaWNlKDAsLSgnX1NVQl9UWVBFJy5sZW5ndGgpKSxuYW1lVG9LZXk6bmFtZT0+JypGSVhFRF9BUlJBWV8nK25hbWUrJ19TVUJfVFlQRSd9LENPREVfVFlQRTp7bWF0Y2g6ZnVsbD0+ZnVsbC5zdGFydHNXaXRoKCcqQ09ERV8nKSxyZWFsRW50cnk6J0NPREVfVFlQRScsa2V5VG9OYW1lOmtleT0+a2V5LnNsaWNlKCcqQ09ERV8nLmxlbmd0aCksbmFtZVRvS2V5Om5hbWU9PicqQ09ERV8nK25hbWV9LEpTX09CSkVDVFM6e21hdGNoOmZ1bGw9PmZ1bGwuc3RhcnRzV2l0aCgnSlNfJyksa2V5VG9OYW1lOmtleT0+a2V5LG5hbWVUb0tleTpuYW1lPT5uYW1lfSxTdHJpbmdzOnttYXRjaDpmdWxsPT5mdWxsLmVuZHNXaXRoKCdTVFJJTkdfVFlQRScpLGtleVRvTmFtZTprZXk9PmtleSxuYW1lVG9LZXk6bmFtZT0+bmFtZX0sTWFwczp7bWF0Y2g6ZnVsbD0+ZnVsbC5zdGFydHNXaXRoKCdNQVBfJykmJmZ1bGwuZW5kc1dpdGgoJ19UWVBFJyksa2V5VG9OYW1lOmtleT0+a2V5LG5hbWVUb0tleTpuYW1lPT5uYW1lfSxEZXNjcmlwdG9yQXJyYXlzOnttYXRjaDpmdWxsPT5mdWxsLmVuZHNXaXRoKCdERVNDUklQVE9SX0FSUkFZX1RZUEUnKSxrZXlUb05hbWU6a2V5PT5rZXksbmFtZVRvS2V5Om5hbWU9Pm5hbWV9fTtjb25zdCBESUZGX0NPTE9SPXtHUkVFTjonIzY0REQxNycsUkVEOicjRDUwMDAwJ307ZnVuY3Rpb24gY29tcHV0ZVBlcmNlbnRhZ2UodmFsdWVBLHZhbHVlQil7aWYodmFsdWVBPT09MClyZXR1cm4gMDtyZXR1cm4gdmFsdWVBL3ZhbHVlQioxMDA7fQpjbGFzcyBEaWZmRW50cnl7Y29uc3RydWN0b3Iob3JpZ2luYWxFbnRyeSxkaWZmRW50cnkpe3RoaXMub3JpZ2luYWxFbnRyeV89b3JpZ2luYWxFbnRyeTt0aGlzLmRpZmZFbnRyeV89ZGlmZkVudHJ5O30KZ2V0IHRpdGxlKCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy50aXRsZTt9CmdldCBvdmVyYWxsKCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy5vdmVyYWxsO30KZ2V0IG92ZXJBbGxvY2F0ZWQoKXtyZXR1cm4gdGhpcy5kaWZmRW50cnlfLm92ZXJBbGxvY2F0ZWQ7fQpnZXQgY291bnQoKXtyZXR1cm4gdGhpcy5kaWZmRW50cnlfLmNvdW50O30KZ2V0IG92ZXJhbGxQZXJjZW50KCl7cmV0dXJuIHRoaXMuZGlmZkVudHJ5Xy5vdmVyYWxsUGVyY2VudDt9CmdldCBvdmVyQWxsb2NhdGVkUGVyY2VudCgpe3JldHVybiB0aGlzLmRpZmZFbnRyeV8ub3ZlckFsbG9jYXRlZFBlcmNlbnQ7fQpnZXQgb3JpZ2luKCl7cmV0dXJuIHRoaXMub3JpZ2luYWxFbnRyeV87fQpnZXQgZGlmZigpe3JldHVybiB0aGlzLmRpZmZFbnRyeV87fQpnZXQgc3ViUm93cygpe3JldHVybiB0aGlzLmRpZmZFbnRyeV8uc3ViUm93czt9fQpjbGFzcyBFbnRyeXtjb25zdHJ1Y3Rvcih0aXRsZSxjb3VudCxvdmVyYWxsLG92ZXJBbGxvY2F0ZWQsaGlzdG9ncmFtLG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0pe3RoaXMudGl0bGVfPXRpdGxlO3RoaXMub3ZlcmFsbF89b3ZlcmFsbDt0aGlzLmNvdW50Xz1jb3VudDt0aGlzLm92ZXJBbGxvY2F0ZWRfPW92ZXJBbGxvY2F0ZWQ7dGhpcy5oaXN0b2dyYW1fPWhpc3RvZ3JhbTt0aGlzLm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1fPW92ZXJBbGxvY2F0ZWRIaXN0b2dyYW07dGhpcy5idWNrZXRTaXplXz10aGlzLmhpc3RvZ3JhbV8ubGVuZ3RoO3RoaXMub3ZlcmFsbFBlcmNlbnRfPTEwMDt0aGlzLm92ZXJBbGxvY2F0ZWRQZXJjZW50Xz0xMDA7fQpnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy50aXRsZV87fQpnZXQgb3ZlcmFsbCgpe3JldHVybiB0aGlzLm92ZXJhbGxfO30KZ2V0IGNvdW50KCl7cmV0dXJuIHRoaXMuY291bnRfO30KZ2V0IG92ZXJBbGxvY2F0ZWQoKXtyZXR1cm4gdGhpcy5vdmVyQWxsb2NhdGVkXzt9CmdldCBoaXN0b2dyYW0oKXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1fO30KZ2V0IG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0oKXtyZXR1cm4gdGhpcy5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtXzt9CmdldCBidWNrZXRTaXplKCl7cmV0dXJuIHRoaXMuYnVja2V0U2l6ZV87fQpnZXQgb3ZlcmFsbFBlcmNlbnQoKXtyZXR1cm4gdGhpcy5vdmVyYWxsUGVyY2VudF87fQpzZXQgb3ZlcmFsbFBlcmNlbnQodmFsdWUpe3RoaXMub3ZlcmFsbFBlcmNlbnRfPXZhbHVlO30KZ2V0IG92ZXJBbGxvY2F0ZWRQZXJjZW50KCl7cmV0dXJuIHRoaXMub3ZlckFsbG9jYXRlZFBlcmNlbnRfO30Kc2V0IG92ZXJBbGxvY2F0ZWRQZXJjZW50KHZhbHVlKXt0aGlzLm92ZXJBbGxvY2F0ZWRQZXJjZW50Xz12YWx1ZTt9CnNldEZyb21PYmplY3Qob2JqKXt0aGlzLmNvdW50Xz1vYmouY291bnQ7dGhpcy5vdmVyYWxsXz1vYmoub3ZlcmFsbC8xMDI0O3RoaXMub3ZlckFsbG9jYXRlZF89b2JqLm92ZXJfYWxsb2NhdGVkLzEwMjQ7dGhpcy5oaXN0b2dyYW1fPW9iai5oaXN0b2dyYW07dGhpcy5vdmVyQWxsb2NhdGVkSGlzdG9ncmFtXz1vYmoub3Zlcl9hbGxvY2F0ZWRfaGlzdG9ncmFtO30KZGlmZihvdGhlcil7Y29uc3QgZW50cnk9bmV3IEVudHJ5KHRoaXMudGl0bGVfLG90aGVyLmNvdW50Xy10aGlzLmNvdW50LG90aGVyLm92ZXJhbGxfLXRoaXMub3ZlcmFsbCxvdGhlci5vdmVyQWxsb2NhdGVkXy10aGlzLm92ZXJBbGxvY2F0ZWQsW10sW10pO2VudHJ5Lm92ZXJhbGxQZXJjZW50PWNvbXB1dGVQZXJjZW50YWdlKGVudHJ5Lm92ZXJhbGwsdGhpcy5vdmVyYWxsKTtlbnRyeS5vdmVyQWxsb2NhdGVkUGVyY2VudD1jb21wdXRlUGVyY2VudGFnZShlbnRyeS5vdmVyQWxsb2NhdGVkLHRoaXMub3ZlckFsbG9jYXRlZCk7cmV0dXJuIG5ldyBEaWZmRW50cnkodGhpcyxlbnRyeSk7fX0KY2xhc3MgR3JvdXBlZEVudHJ5IGV4dGVuZHMgRW50cnl7Y29uc3RydWN0b3IodGl0bGUsY291bnQsb3ZlcmFsbCxvdmVyQWxsb2NhdGVkLGhpc3RvZ3JhbSxvdmVyQWxsb2NhdGVkSGlzdG9ncmFtKXtzdXBlcih0aXRsZSxjb3VudCxvdmVyYWxsLG92ZXJBbGxvY2F0ZWQsaGlzdG9ncmFtLG92ZXJBbGxvY2F0ZWRIaXN0b2dyYW0pO3RoaXMuaGlzdG9ncmFtXy5maWxsKDApO3RoaXMub3ZlckFsbG9jYXRlZEhpc3RvZ3JhbV8uZmlsbCgwKTt0aGlzLmVudHJpZXNfPW5ldyBNYXAoKTt9CmdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9CnNldCB0aXRsZSh2YWx1ZSl7dGhpcy50aXRsZV89dmFsdWU7fQpnZXQgc3ViUm93cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuZW50cmllc18udmFsdWVzKCkpO30KZ2V0RW50cnlGcm9tVGl0bGUodGl0bGUpe3JldHVybiB0aGlzLmVudHJpZXNfLmdldCh0aXRsZSk7fQphZGQoZW50cnkpe3RoaXMuY291bnRfKz1lbnRyeS5jb3VudDt0aGlzLm92ZXJhbGxfKz1lbnRyeS5vdmVyYWxsO3RoaXMub3ZlckFsbG9jYXRlZF8rPWVudHJ5Lm92ZXJBbGxvY2F0ZWQ7aWYodGhpcy5idWNrZXRTaXplXz09PWVudHJ5LmJ1Y2tldFNpemUpe2ZvcihsZXQgaT0wO2k8dGhpcy5idWNrZXRTaXplXzsrK2kpe3RoaXMuaGlzdG9ncmFtX1tpXSs9ZW50cnkuaGlzdG9ncmFtW2ldO3RoaXMub3ZlckFsbG9jYXRlZEhpc3RvZ3JhbV9baV0rPWVudHJ5Lm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1baV07fX0KdGhpcy5lbnRyaWVzXy5zZXQoZW50cnkudGl0bGUsZW50cnkpO30KYWNjdW11bGF0ZVVua25vd24odGl0bGUpe2xldCB1bmtub3duQ291bnQ9dGhpcy5jb3VudF87bGV0IHVua25vd25PdmVyYWxsPXRoaXMub3ZlcmFsbF87bGV0IHVua25vd25PdmVyQWxsb2NhdGVkPXRoaXMub3ZlckFsbG9jYXRlZF87Y29uc3QgdW5rbm93bkhpc3RvZ3JhbT10ci5iLmRlZXBDb3B5KHRoaXMuaGlzdG9ncmFtXyk7Y29uc3QgdW5rbm93bk92ZXJBbGxvY2F0ZWRIaXN0b2dyYW09dHIuYi5kZWVwQ29weSh0aGlzLm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1fKTtmb3IoY29uc3QgZW50cnkgb2YgdGhpcy5lbnRyaWVzXy52YWx1ZXMoKSl7dW5rbm93bkNvdW50LT1lbnRyeS5jb3VudDt1bmtub3duT3ZlcmFsbC09ZW50cnkub3ZlcmFsbDt1bmtub3duT3ZlckFsbG9jYXRlZC09ZW50cnkub3ZlckFsbG9jYXRlZDtmb3IobGV0IGk9MDtpPHRoaXMuYnVja2V0U2l6ZV87KytpKXt1bmtub3duSGlzdG9ncmFtW2ldLT1lbnRyeS5oaXN0b2dyYW1baV07dW5rbm93bk92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1baV0tPWVudHJ5Lm92ZXJBbGxvY2F0ZWRIaXN0b2dyYW1baV07fX0KdW5rbm93bk92ZXJBbGxvY2F0ZWQ9dW5rbm93bk92ZXJBbGxvY2F0ZWQ8MD8wOnVua25vd25PdmVyQWxsb2NhdGVkO3RoaXMuZW50cmllc18uc2V0KHRpdGxlLG5ldyBFbnRyeSh0aXRsZSx1bmtub3duQ291bnQsdW5rbm93bk92ZXJhbGwsdW5rbm93bk92ZXJBbGxvY2F0ZWQsdW5rbm93bkhpc3RvZ3JhbSx1bmtub3duT3ZlckFsbG9jYXRlZEhpc3RvZ3JhbSkpO30KY2FsY3VsYXRlUGVyY2VudGFnZSgpe2Zvcihjb25zdCBlbnRyeSBvZiB0aGlzLmVudHJpZXNfLnZhbHVlcygpKXtlbnRyeS5vdmVyYWxsUGVyY2VudD1jb21wdXRlUGVyY2VudGFnZShlbnRyeS5vdmVyYWxsLHRoaXMub3ZlcmFsbF8pO2VudHJ5Lm92ZXJBbGxvY2F0ZWRQZXJjZW50PWNvbXB1dGVQZXJjZW50YWdlKGVudHJ5Lm92ZXJBbGxvY2F0ZWQsdGhpcy5vdmVyQWxsb2NhdGVkXyk7aWYoZW50cnkgaW5zdGFuY2VvZiBHcm91cGVkRW50cnkpZW50cnkuY2FsY3VsYXRlUGVyY2VudGFnZSgpO319CmRpZmYob3RoZXIpe2xldCBuZXdUaXRsZT0nJztpZih0aGlzLnRpdGxlXy5zdGFydHNXaXRoKCdJc29sYXRlJykpe25ld1RpdGxlPSdUb3RhbCc7fWVsc2V7bmV3VGl0bGU9dGhpcy50aXRsZV87fQpjb25zdCByZXN1bHQ9bmV3IEdyb3VwZWRFbnRyeShuZXdUaXRsZSwwLDAsMCxbXSxbXSk7Zm9yKGNvbnN0IGVudHJ5IG9mIHRoaXMuZW50cmllc18pe2NvbnN0IG90aGVyRW50cnk9b3RoZXIuZ2V0RW50cnlGcm9tVGl0bGUoZW50cnlbMF0pO2lmKG90aGVyRW50cnk9PT11bmRlZmluZWQpY29udGludWU7cmVzdWx0LmFkZChlbnRyeVsxXS5kaWZmKG90aGVyRW50cnkpKTt9CnJlc3VsdC5vdmVyYWxsUGVyY2VudD1jb21wdXRlUGVyY2VudGFnZShyZXN1bHQub3ZlcmFsbCx0aGlzLm92ZXJhbGwpO3Jlc3VsdC5vdmVyQWxsb2NhdGVkUGVyY2VudD1jb21wdXRlUGVyY2VudGFnZShyZXN1bHQub3ZlckFsbG9jYXRlZCx0aGlzLm92ZXJBbGxvY2F0ZWQpO3JldHVybiBuZXcgRGlmZkVudHJ5KHRoaXMscmVzdWx0KTt9fQpmdW5jdGlvbiBjcmVhdGVTZWxlY3Rvcih0YXJnZXRFbCxkZWZhdWx0VmFsdWUsaXRlbXMsY2FsbGJhY2spe2NvbnN0IHNlbGVjdG9yRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc2VsZWN0Jyk7c2VsZWN0b3JFbC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLGNhbGxiYWNrLmJpbmQodGFyZ2V0RWwpKTtjb25zdCBkZWZhdWx0T3B0aW9uRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnb3B0aW9uJyk7Zm9yKGxldCBpPTA7aTxpdGVtcy5sZW5ndGg7aSsrKXtjb25zdCBpdGVtPWl0ZW1zW2ldO2NvbnN0IG9wdGlvbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO1BvbHltZXIuZG9tKG9wdGlvbkVsKS50ZXh0Q29udGVudD1pdGVtLmxhYmVsO29wdGlvbkVsLnRhcmdldFByb3BlcnR5VmFsdWU9aXRlbS52YWx1ZTtvcHRpb25FbC5pdGVtPWl0ZW07UG9seW1lci5kb20oc2VsZWN0b3JFbCkuYXBwZW5kQ2hpbGQob3B0aW9uRWwpO30Kc2VsZWN0b3JFbC5fX2RlZmluZUdldHRlcl9fKCdzZWxlY3RlZFZhbHVlJyxmdW5jdGlvbih2KXtpZihzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF09PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gc2VsZWN0b3JFbC5jaGlsZHJlbltzZWxlY3RvckVsLnNlbGVjdGVkSW5kZXhdLnRhcmdldFByb3BlcnR5VmFsdWU7fSk7c2VsZWN0b3JFbC5fX2RlZmluZUdldHRlcl9fKCdzZWxlY3RlZEl0ZW0nLGZ1bmN0aW9uKHYpe2lmKHNlbGVjdG9yRWwuY2hpbGRyZW5bc2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4XT09PXVuZGVmaW5lZCl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybiBzZWxlY3RvckVsLmNoaWxkcmVuW3NlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleF0uaXRlbTt9KTtzZWxlY3RvckVsLl9fZGVmaW5lU2V0dGVyX18oJ3NlbGVjdGVkVmFsdWUnLGZ1bmN0aW9uKHYpe2ZvcihsZXQgaT0wO2k8c2VsZWN0b3JFbC5jaGlsZHJlbi5sZW5ndGg7aSsrKXtjb25zdCB2YWx1ZT1zZWxlY3RvckVsLmNoaWxkcmVuW2ldLnRhcmdldFByb3BlcnR5VmFsdWU7aWYodmFsdWU9PT12KXtjb25zdCBjaGFuZ2VkPXNlbGVjdG9yRWwuc2VsZWN0ZWRJbmRleCE9PWk7aWYoY2hhbmdlZCl7c2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4PWk7Y2FsbGJhY2soKTt9CnJldHVybjt9fQp0aHJvdyBuZXcgRXJyb3IoJ05vdCBhIHZhbGlkIHZhbHVlJyk7fSk7c2VsZWN0b3JFbC5zZWxlY3RlZEluZGV4PS0xO3JldHVybiBzZWxlY3RvckVsO30KZnVuY3Rpb24gcGx1c01pbnVzKHZhbHVlLHRvRml4ZWQ9Myl7cmV0dXJuKHZhbHVlPjA/JysnOicnKSt2YWx1ZS50b0ZpeGVkKHRvRml4ZWQpO30KZnVuY3Rpb24gYWRkQXJyb3codmFsdWUpe2lmKHZhbHVlPT09MClyZXR1cm4gdmFsdWU7aWYodmFsdWU9PT1OdW1iZXIuTkVHQVRJVkVfSU5GSU5JVFkpcmV0dXJuJ1x1MjE5M1x1MjIxRSc7aWYodmFsdWU9PT1OdW1iZXIuUE9TSVRJVkVfSU5GSU5JVFkpcmV0dXJuJ1x1MjE5MVx1MjIxRSc7cmV0dXJuKHZhbHVlPjA/J1x1MjE5MSc6J1x1MjE5MycpK01hdGguYWJzKHZhbHVlLnRvRml4ZWQoMykpO30KUG9seW1lcih7aXM6J3RyLXVpLWUtdjgtZ2Mtb2JqZWN0cy1zdGF0cy10YWJsZScscmVhZHkoKXt0aGlzLiQuZGlmZk9wdGlvbi5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLmlzb2xhdGVFbnRyaWVzXz1bXTt0aGlzLnNlbGVjdG9yMV89dW5kZWZpbmVkO3RoaXMuc2VsZWN0b3IyXz11bmRlZmluZWQ7fSxjb25zdHJ1Y3REaWZmVGFibGVfKHRhYmxlKXt0aGlzLiQuZGlmZlRhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt0aGlzLiQuZGlmZlRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOidDb21wb25lbnQnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50aXRsZTtyZXR1cm4gdHlwZUVsO30sc2hvd0V4cGFuZEJ1dHRvbnM6dHJ1ZX0se3RpdGxlOidPdmVyYWxsIE1lbW9yeShLQiknLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9cm93Lm9yaWdpbi5vdmVyYWxsLnRvRml4ZWQoMyk7cmV0dXJuIHNwYW5FbDt9LGNtcChhLGIpe3JldHVybiBhLm9yaWdpbi5vdmVyYWxsLWIub3JpZ2luLm92ZXJhbGw7fX0se3RpdGxlOidkaWZmKEtCKScsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD1wbHVzTWludXMocm93Lm92ZXJhbGwpO2lmKHJvdy5vdmVyYWxsPjApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLlJFRDt9ZWxzZSBpZihyb3cub3ZlcmFsbDwwKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5HUkVFTjt9CnJldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyYWxsLWIub3ZlcmFsbDt9fSx7dGl0bGU6J2RpZmYoJSknLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9YWRkQXJyb3cocm93Lm92ZXJhbGxQZXJjZW50KTtpZihyb3cub3ZlcmFsbD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93Lm92ZXJhbGw8MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuR1JFRU47fQpyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlcmFsbC1iLm92ZXJhbGw7fX0se3RpdGxlOidPdmVyIEFsbG9jYXRlZCBNZW1vcnkoS0IpJyx2YWx1ZShyb3cpe2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oKTtzcGFuRWwuaW5uZXJUZXh0PXJvdy5vcmlnaW4ub3ZlckFsbG9jYXRlZC50b0ZpeGVkKDMpO3JldHVybiBzcGFuRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vcmlnaW4ub3ZlckFsbG9jYXRlZC1iLm9yaWdpbi5vdmVyQWxsb2NhdGVkO319LHt0aXRsZTonZGlmZihLQiknLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9cGx1c01pbnVzKHJvdy5vdmVyQWxsb2NhdGVkKTtpZihyb3cub3ZlckFsbG9jYXRlZD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93Lm92ZXJBbGxvY2F0ZWQ8MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuR1JFRU47fQpyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlckFsbG9jYXRlZC1iLm92ZXJBbGxvY2F0ZWQ7fX0se3RpdGxlOidkaWZmKCUpJyx2YWx1ZShyb3cpe2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oKTtzcGFuRWwuaW5uZXJUZXh0PWFkZEFycm93KHJvdy5vdmVyQWxsb2NhdGVkUGVyY2VudCk7aWYocm93Lm92ZXJBbGxvY2F0ZWQ+MCl7c3BhbkVsLnN0eWxlLmNvbG9yPURJRkZfQ09MT1IuUkVEO31lbHNlIGlmKHJvdy5vdmVyQWxsb2NhdGVkPDApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLkdSRUVOO30KcmV0dXJuIHNwYW5FbDt9LGNtcChhLGIpe3JldHVybiBhLm92ZXJBbGxvY2F0ZWQtYi5vdmVyQWxsb2NhdGVkO319LHt0aXRsZTonQ291bnQnLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3BhbigpO3NwYW5FbC5pbm5lclRleHQ9cm93Lm9yaWdpbi5jb3VudDtyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEub3JpZ2luLmNvdW50LWIub3JpZ2luLmNvdW50O319LHt0aXRsZTonZGlmZicsdmFsdWUocm93KXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD1wbHVzTWludXMocm93LmNvdW50LDApO2lmKHJvdy5jb3VudD4wKXtzcGFuRWwuc3R5bGUuY29sb3I9RElGRl9DT0xPUi5SRUQ7fWVsc2UgaWYocm93LmNvdW50PDApe3NwYW5FbC5zdHlsZS5jb2xvcj1ESUZGX0NPTE9SLkdSRUVOO30KcmV0dXJuIHNwYW5FbDt9LGNtcChhLGIpe3JldHVybiBhLmNvdW50LWIuY291bnQ7fX0sXTt9LGJ1aWxkT3B0aW9uc18oKXtjb25zdCBpdGVtcz1bXTtmb3IoY29uc3QgaXNvbGF0ZUVudHJ5IG9mIHRoaXMuaXNvbGF0ZUVudHJpZXNfKXtpdGVtcy5wdXNoKHtsYWJlbDppc29sYXRlRW50cnkudGl0bGUsdmFsdWU6aXNvbGF0ZUVudHJ5fSk7fQp0aGlzLiQuZGlmZk9wdGlvbi5zdHlsZS5kaXNwbGF5PSdpbmxpbmUtYmxvY2snO3RoaXMuc2VsZWN0b3IxXz1jcmVhdGVTZWxlY3Rvcih0aGlzLCcnLGl0ZW1zLHRoaXMuZGlmZk9wdGlvbkNoYW5nZWRfKTtQb2x5bWVyLmRvbSh0aGlzLiQuZGlmZk9wdGlvbikuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3RvcjFfKTtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKCk7c3BhbkVsLmlubmVyVGV4dD0nIFZTICc7UG9seW1lci5kb20odGhpcy4kLmRpZmZPcHRpb24pLmFwcGVuZENoaWxkKHNwYW5FbCk7dGhpcy5zZWxlY3RvcjJfPWNyZWF0ZVNlbGVjdG9yKHRoaXMsJycsaXRlbXMsdGhpcy5kaWZmT3B0aW9uQ2hhbmdlZF8pO1BvbHltZXIuZG9tKHRoaXMuJC5kaWZmT3B0aW9uKS5hcHBlbmRDaGlsZCh0aGlzLnNlbGVjdG9yMl8pO30sZGlmZk9wdGlvbkNoYW5nZWRfKCl7Y29uc3QgaXNvbGF0ZUVudHJ5MT10aGlzLnNlbGVjdG9yMV8uc2VsZWN0ZWRWYWx1ZTtjb25zdCBpc29sYXRlRW50cnkyPXRoaXMuc2VsZWN0b3IyXy5zZWxlY3RlZFZhbHVlO2lmKGlzb2xhdGVFbnRyeTE9PT11bmRlZmluZWR8fGlzb2xhdGVFbnRyeTI9PT11bmRlZmluZWQpe3JldHVybjt9CmlmKGlzb2xhdGVFbnRyeTE9PT1pc29sYXRlRW50cnkyKXt0aGlzLiQuZGlmZlRhYmxlLnRhYmxlUm93cz1bXTt0aGlzLiQuZGlmZlRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQp0aGlzLiQuZGlmZlRhYmxlLnRhYmxlUm93cz1baXNvbGF0ZUVudHJ5MS5kaWZmKGlzb2xhdGVFbnRyeTIpXTt0aGlzLiQuZGlmZlRhYmxlLnJlYnVpbGQoKTt9LGNvbnN0cnVjdFRhYmxlXygpe3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOidDb21wb25lbnQnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50aXRsZTtyZXR1cm4gdHlwZUVsO30sc2hvd0V4cGFuZEJ1dHRvbnM6dHJ1ZX0se3RpdGxlOidPdmVyYWxsIE1lbW9yeSAoS0IpJyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cub3ZlcmFsbC50b0ZpeGVkKDMpO3JldHVybiB0eXBlRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyYWxsLWIub3ZlcmFsbDt9fSx7dGl0bGU6J092ZXIgQWxsb2NhdGVkIE1lbW9yeSAoS0IpJyx2YWx1ZShyb3cpe2NvbnN0IHR5cGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7dHlwZUVsLmlubmVyVGV4dD1yb3cub3ZlckFsbG9jYXRlZC50b0ZpeGVkKDMpO3JldHVybiB0eXBlRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyQWxsb2NhdGVkLWIub3ZlckFsbG9jYXRlZDt9fSx7dGl0bGU6J092ZXJhbGwgQ291bnQnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy5jb3VudDtyZXR1cm4gdHlwZUVsO30sY21wKGEsYil7cmV0dXJuIGEuY291bnQtYi5jb3VudDt9fSx7dGl0bGU6J092ZXJhbGwgTWVtb3J5IFBlcmNlbnQnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy5vdmVyYWxsUGVyY2VudC50b0ZpeGVkKDMpKyclJztyZXR1cm4gdHlwZUVsO30sY21wKGEsYil7cmV0dXJuIGEub3ZlcmFsbC1iLm92ZXJhbGw7fX0se3RpdGxlOidPdmVyYWxsIEFsbG9jYXRlZCBNZW1vcnkgUGVyY2VudCcsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9cm93Lm92ZXJBbGxvY2F0ZWRQZXJjZW50LnRvRml4ZWQoMykrJyUnO3JldHVybiB0eXBlRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS5vdmVyQWxsb2NhdGVkLWIub3ZlckFsbG9jYXRlZDt9fV07dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD0xO3RoaXMuJC50YWJsZS5zb3J0RGVzY2VuZGluZz10cnVlO30sYnVpbGRTdWJFbnRyeV8ob2JqZWN0cyxncm91cEVudHJ5LGtleVRvTmFtZSl7Y29uc3QgdHlwZUdyb3VwPUlOU1RBTkNFX1RZUEVfR1JPVVBTW2dyb3VwRW50cnkudGl0bGVdO2Zvcihjb25zdCBpbnN0YW5jZVR5cGUgb2YgdHlwZUdyb3VwKXtjb25zdCBlPW9iamVjdHNbaW5zdGFuY2VUeXBlXTtpZihlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2RlbGV0ZSBvYmplY3RzW2luc3RhbmNlVHlwZV07bGV0IHRpdGxlPWluc3RhbmNlVHlwZTtpZihrZXlUb05hbWUhPT11bmRlZmluZWQpdGl0bGU9a2V5VG9OYW1lKHRpdGxlKTtncm91cEVudHJ5LmFkZChuZXcgRW50cnkodGl0bGUsZS5jb3VudCxlLm92ZXJhbGwvMTAyNCxlLm92ZXJfYWxsb2NhdGVkLzEwMjQsZS5oaXN0b2dyYW0sZS5vdmVyX2FsbG9jYXRlZF9oaXN0b2dyYW0pKTt9fSxidWlsZFVuR3JvdXBlZEVudHJpZXNfKG9iamVjdHMsb2JqZWN0RW50cnksYnVja2V0U2l6ZSl7Zm9yKGNvbnN0IHRpdGxlIG9mIE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKG9iamVjdHMpKXtjb25zdCBvYmo9b2JqZWN0c1t0aXRsZV07Y29uc3QgZ3JvdXBlZEVudHJ5PW5ldyBHcm91cGVkRW50cnkodGl0bGUsMCwwLDAsbmV3IEFycmF5KGJ1Y2tldFNpemUpLG5ldyBBcnJheShidWNrZXRTaXplKSk7Z3JvdXBlZEVudHJ5LnNldEZyb21PYmplY3Qob2JqKTtvYmplY3RFbnRyeS5hZGQoZ3JvdXBlZEVudHJ5KTt9fSxjcmVhdGVHcm91cEVudHJpZXNfKGdyb3VwRW50cmllcyxvYmplY3RzLGJ1Y2tldFNpemUpe2Zvcihjb25zdCBncm91cE5hbWUgb2YgT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoSU5TVEFOQ0VfVFlQRV9HUk9VUFMpKXtjb25zdCBncm91cEVudHJ5PW5ldyBHcm91cGVkRW50cnkoZ3JvdXBOYW1lLDAsMCwwLG5ldyBBcnJheShidWNrZXRTaXplKSxuZXcgQXJyYXkoYnVja2V0U2l6ZSkpO2lmKElOU1RBTkNFX1RZUEVfR1JPVVBTW2dyb3VwTmFtZV0ucmVhbEVudHJ5IT09dW5kZWZpbmVkKXtncm91cEVudHJ5LnNhdmVkUmVhbEVudHJ5PW9iamVjdHNbSU5TVEFOQ0VfVFlQRV9HUk9VUFNbZ3JvdXBOYW1lXS5yZWFsRW50cnldO2RlbGV0ZSBvYmplY3RzW0lOU1RBTkNFX1RZUEVfR1JPVVBTW2dyb3VwTmFtZV0ucmVhbEVudHJ5XTt9Cmdyb3VwRW50cmllc1tncm91cE5hbWVdPWdyb3VwRW50cnk7fX0sYnVpbGRHcm91cEVudHJpZXNfKGdyb3VwRW50cmllcyxvYmplY3RFbnRyeSl7Zm9yKGNvbnN0IGdyb3VwTmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhncm91cEVudHJpZXMpKXtjb25zdCBncm91cEVudHJ5PWdyb3VwRW50cmllc1tncm91cE5hbWVdO2lmKGdyb3VwRW50cnkuc2F2ZWRSZWFsRW50cnkhPT11bmRlZmluZWQpe2dyb3VwRW50cnkuc2V0RnJvbU9iamVjdChncm91cEVudHJ5LnNhdmVkUmVhbEVudHJ5KTtncm91cEVudHJ5LmFjY3VtdWxhdGVVbmtub3duKCdVTktOT1dOJyk7ZGVsZXRlIGdyb3VwRW50cnkuc2F2ZWRSZWFsRW50cnk7fQpvYmplY3RFbnRyeS5hZGQoZ3JvdXBFbnRyeSk7fX0sYnVpbGRTdWJFbnRyaWVzRm9yR3JvdXBzXyhncm91cEVudHJpZXMsb2JqZWN0cyl7Zm9yKGNvbnN0IGluc3RhbmNlVHlwZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvYmplY3RzKSl7aWYoSUdOT1JFRF9FTlRSSUVTLm1hdGNoKGluc3RhbmNlVHlwZSkpe2RlbGV0ZSBvYmplY3RzW2luc3RhbmNlVHlwZV07Y29udGludWU7fQpjb25zdCBlPW9iamVjdHNbaW5zdGFuY2VUeXBlXTtmb3IoY29uc3QgbmFtZSBvZiBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhJTlNUQU5DRV9UWVBFX0dST1VQUykpe2NvbnN0IGdyb3VwPUlOU1RBTkNFX1RZUEVfR1JPVVBTW25hbWVdO2lmKGdyb3VwLm1hdGNoKGluc3RhbmNlVHlwZSkpe2dyb3VwRW50cmllc1tuYW1lXS5hZGQobmV3IEVudHJ5KGdyb3VwLmtleVRvTmFtZShpbnN0YW5jZVR5cGUpLGUuY291bnQsZS5vdmVyYWxsLzEwMjQsZS5vdmVyX2FsbG9jYXRlZC8xMDI0LGUuaGlzdG9ncmFtLGUub3Zlcl9hbGxvY2F0ZWRfaGlzdG9ncmFtKSk7ZGVsZXRlIG9iamVjdHNbaW5zdGFuY2VUeXBlXTt9fX19LGJ1aWxkXyhvYmplY3RzLG9iamVjdEVudHJ5LGJ1Y2tldFNpemUpe2RlbGV0ZSBvYmplY3RzLkVORDtjb25zdCBncm91cEVudHJpZXM9e307dGhpcy5jcmVhdGVHcm91cEVudHJpZXNfKGdyb3VwRW50cmllcyxvYmplY3RzLGJ1Y2tldFNpemUpO3RoaXMuYnVpbGRTdWJFbnRyaWVzRm9yR3JvdXBzXyhncm91cEVudHJpZXMsb2JqZWN0cyk7dGhpcy5idWlsZEdyb3VwRW50cmllc18oZ3JvdXBFbnRyaWVzLG9iamVjdEVudHJ5KTt0aGlzLmJ1aWxkVW5Hcm91cGVkRW50cmllc18ob2JqZWN0cyxvYmplY3RFbnRyeSxidWNrZXRTaXplKTt9LHNldCBzZWxlY3Rpb24oc2xpY2VzKXtzbGljZXMuc29ydEV2ZW50cyhmdW5jdGlvbihhLGIpe3JldHVybiBiLnN0YXJ0LWEuc3RhcnQ7fSk7Y29uc3QgcHJldmlvdXM9dW5kZWZpbmVkO2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXMpe2lmKCFzbGljZSBpbnN0YW5jZW9mIHRyLmUudjguVjhHQ1N0YXRzVGhyZWFkU2xpY2UpY29udGludWU7Y29uc3QgbGl2ZU9iamVjdHM9c2xpY2UubGl2ZU9iamVjdHM7Y29uc3QgZGVhZE9iamVjdHM9c2xpY2UuZGVhZE9iamVjdHM7Y29uc3QgaXNvbGF0ZT1saXZlT2JqZWN0cy5pc29sYXRlO2NvbnN0IGlzb2xhdGVFbnRyeT1uZXcgR3JvdXBlZEVudHJ5KCdJc29sYXRlXycraXNvbGF0ZSsnIGF0ICcrc2xpY2Uuc3RhcnQudG9GaXhlZCgzKSsnIG1zJywwLDAsMCxbXSxbXSk7Y29uc3QgbGl2ZUVudHJ5PW5ldyBHcm91cGVkRW50cnkoJ2xpdmUgb2JqZWN0cycsMCwwLDAsW10sW10pO2NvbnN0IGRlYWRFbnRyeT1uZXcgR3JvdXBlZEVudHJ5KCdkZWFkIG9iamVjdHMnLDAsMCwwLFtdLFtdKTtjb25zdCBsaXZlQnVja2V0U2l6ZT1saXZlT2JqZWN0cy5idWNrZXRfc2l6ZXMubGVuZ3RoO2NvbnN0IGRlYWRCdWNrZXRTaXplPWRlYWRPYmplY3RzLmJ1Y2tldF9zaXplcy5sZW5ndGg7dGhpcy5idWlsZF8odHIuYi5kZWVwQ29weShsaXZlT2JqZWN0cy50eXBlX2RhdGEpLGxpdmVFbnRyeSxsaXZlQnVja2V0U2l6ZSk7aXNvbGF0ZUVudHJ5LmFkZChsaXZlRW50cnkpO3RoaXMuYnVpbGRfKHRyLmIuZGVlcENvcHkoZGVhZE9iamVjdHMudHlwZV9kYXRhKSxkZWFkRW50cnksZGVhZEJ1Y2tldFNpemUpO2lzb2xhdGVFbnRyeS5hZGQoZGVhZEVudHJ5KTtpc29sYXRlRW50cnkuY2FsY3VsYXRlUGVyY2VudGFnZSgpO3RoaXMuaXNvbGF0ZUVudHJpZXNfLnB1c2goaXNvbGF0ZUVudHJ5KTt9CnRoaXMudXBkYXRlVGFibGVfKCk7aWYoc2xpY2VzLmxlbmd0aD4xKXt0aGlzLmJ1aWxkT3B0aW9uc18oKTt0aGlzLmNvbnN0cnVjdERpZmZUYWJsZV8oKTt9fSx1cGRhdGVUYWJsZV8oKXt0aGlzLmNvbnN0cnVjdFRhYmxlXygpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5pc29sYXRlRW50cmllc187dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LH0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktZS1tdWx0aS12OC1nYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuJC5jb250ZW50LnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQuZ2NPYmplY3RzU3RhdHMuc2VsZWN0aW9uPXNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1lLW11bHRpLXY4LWdjLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsdHIuZS52OC5WOEdDU3RhdHNUaHJlYWRTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonVjggR0MgU3RhdHMgc2xpY2VzJ30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBJQ19TVEFUU19QUk9QRVJUSUVTPVsndHlwZScsJ2NhdGVnb3J5Jywnc2NyaXB0TmFtZScsJ2ZpbGVQb3NpdGlvbicsJ3N0YXRlJywnaXNOYXRpdmUnLCdtYXAnLCdwcm9wZXJ0aWVzTW9kZScsJ251bWJlck9mT3duUHJvcGVydGllcycsJ2luc3RhbmNlVHlwZSddO2NsYXNzIElDU3RhdHNFbnRyeXtjb25zdHJ1Y3RvcihvYmope3RoaXMudHlwZV89b2JqLnR5cGU7aWYodGhpcy50eXBlXy5pbmNsdWRlcygnU3RvcmUnKSl7dGhpcy5jYXRlZ29yeV89J1N0b3JlJzt9ZWxzZSBpZih0aGlzLnR5cGVfLmluY2x1ZGVzKCdMb2FkJykpe3RoaXMuY2F0ZWdvcnlfPSdMb2FkJzt9CnRoaXMuc3RhdGVfPW9iai5zdGF0ZTtpZihvYmouZnVuY3Rpb25OYW1lKXt0aGlzLmZ1bmN0aW9uTmFtZV89b2JqLm9wdGltaXplZD8nKic6J34nO3RoaXMuZnVuY3Rpb25OYW1lXys9b2JqLmZ1bmN0aW9uTmFtZS5sZW5ndGg9PT0wPycoYW5vbnltb3VzIGZ1bmN0aW9uKSc6b2JqLmZ1bmN0aW9uTmFtZTt9CnRoaXMub2Zmc2V0Xz1vYmoub2Zmc2V0O3RoaXMuc2NyaXB0TmFtZV89b2JqLnNjcmlwdE5hbWU/b2JqLnNjcmlwdE5hbWU6J3Vua25vd24nO3RoaXMuaXNOYXRpdmVfPW9iai5zY3JpcHROYW1lJiZvYmouc2NyaXB0TmFtZS5pbmNsdWRlcygnbmF0aXZlJyk7dGhpcy5saW5lTnVtXz1vYmoubGluZU51bT9vYmoubGluZU51bTondW5rbm93bic7dGhpcy5maWxlUG9zaXRpb25fPXRoaXMuc2NyaXB0TmFtZV8rJzonK3RoaXMubGluZU51bV87aWYodGhpcy5mdW5jdGlvbk5hbWVfKXt0aGlzLmZpbGVQb3NpdGlvbl8rPScgJyt0aGlzLmZ1bmN0aW9uTmFtZV8rJysnK3RoaXMub2Zmc2V0Xzt9CnRoaXMuY29uc3RydWN0b3JfPW9iai5jb25zdHJ1Y3Rvcj9mYWxzZTp0cnVlO3RoaXMubWFwXz1vYmoubWFwO2lmKHRoaXMubWFwXyl7dGhpcy5wcm9wZXJ0aWVzTW9kZV89b2JqLmRpY3Q9PT0xPydzbG93JzonZmFzdCc7fWVsc2V7dGhpcy5wcm9wZXJ0aWVzTW9kZV89J3Vua25vd24nO30KdGhpcy5udW1iZXJPZk93blByb3BlcnRpZXNfPW9iai5vd247dGhpcy5pbnN0YW5jZVR5cGVfPW9iai5pbnN0YW5jZVR5cGU7dGhpcy5rZXlfPW9iai5rZXk7fQpnZXQgdHlwZSgpe3JldHVybiB0aGlzLnR5cGVfO30KZ2V0IGNhdGVnb3J5KCl7cmV0dXJuIHRoaXMuY2F0ZWdvcnlfO30KZ2V0IHN0YXRlKCl7cmV0dXJuIHRoaXMuc3RhdGVfO30KZ2V0IGZ1bmN0aW9uTmFtZSgpe3JldHVybiB0aGlzLmZ1bmN0aW9uTmFtZV87fQpnZXQgb2Zmc2V0KCl7cmV0dXJuIHRoaXMub2Zmc2V0Xzt9CmdldCBzY3JpcHROYW1lKCl7cmV0dXJuIHRoaXMuc2NyaXB0TmFtZV87fQpnZXQgaXNOYXRpdmUoKXtyZXR1cm4gdGhpcy5pc05hdGl2ZV87fQpnZXQgbGluZU51bWJlcigpe3JldHVybiB0aGlzLmxpbmVOdW1fO30KZ2V0IGlzQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvcl87fQpnZXQgbWFwKCl7cmV0dXJuIHRoaXMubWFwXzt9CmdldCBwcm9wZXJ0aWVzTW9kZSgpe3JldHVybiB0aGlzLnByb3BlcnRpZXNNb2RlXzt9CmdldCBudW1iZXJPZk93blByb3BlcnRpZXMoKXtyZXR1cm4gdGhpcy5udW1iZXJPZk93blByb3BlcnRpZXNfO30KZ2V0IGluc3RhbmNlVHlwZSgpe3JldHVybiB0aGlzLmluc3RhbmNlVHlwZV87fQpnZXQgZmlsZVBvc2l0aW9uKCl7cmV0dXJuIHRoaXMuZmlsZVBvc2l0aW9uXzt9fQpjbGFzcyBJQ1N0YXRzRW50cnlHcm91cHtjb25zdHJ1Y3Rvcihwcm9wZXJ0eSxrZXkpe3RoaXMucHJvcGVydHlfPXByb3BlcnR5O3RoaXMua2V5Xz1rZXk7dGhpcy5wZXJjZW50YWdlXz0wO3RoaXMuZW50cmllc189W107dGhpcy5zdWJHcm91cF89dW5kZWZpbmVkO30Kc3RhdGljIGdyb3VwQnkoZ3JvdXBzLGVudHJpZXMscHJvcGVydHkpe2Zvcihjb25zdCBlbnRyeSBvZiBlbnRyaWVzKXtjb25zdCBrZXk9ZW50cnlbcHJvcGVydHldO2xldCBncm91cD1ncm91cHMuZ2V0KGtleSk7aWYoIWdyb3VwKXtncm91cD1uZXcgSUNTdGF0c0VudHJ5R3JvdXAocHJvcGVydHksa2V5KTtncm91cHMuc2V0KGtleSxncm91cCk7fQpncm91cC5hZGQoZW50cnkpO30KZm9yKGNvbnN0IGdyb3VwIG9mIGdyb3Vwcy52YWx1ZXMoKSl7Z3JvdXAucGVyY2VudGFnZT1ncm91cC5sZW5ndGgvZW50cmllcy5sZW5ndGg7fX0KYWRkKGVudHJ5KXt0aGlzLmVudHJpZXNfLnB1c2goZW50cnkpO30KY3JlYXRlU3ViR3JvdXAoKXtpZih0aGlzLnN1Ykdyb3VwXylyZXR1cm4gdGhpcy5zdWJHcm91cF87dGhpcy5zdWJHcm91cF89bmV3IE1hcCgpO2Zvcihjb25zdCBwcm9wZXJ0eSBvZiBJQ19TVEFUU19QUk9QRVJUSUVTKXtpZihwcm9wZXJ0eT09PXRoaXMucHJvcGVydHlfKWNvbnRpbnVlO2NvbnN0IGdyb3Vwcz1uZXcgTWFwKCk7dGhpcy5zdWJHcm91cF8uc2V0KHByb3BlcnR5LGdyb3Vwcyk7SUNTdGF0c0VudHJ5R3JvdXAuZ3JvdXBCeShncm91cHMsdGhpcy5lbnRyaWVzXyxwcm9wZXJ0eSk7fQpyZXR1cm4gdGhpcy5zdWJHcm91cF87fQpnZXQgZW50cmllcygpe3JldHVybiB0aGlzLmVudHJpZXNfO30KZ2V0IGtleSgpe3JldHVybiB0aGlzLmtleV87fQpnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW50cmllc18ubGVuZ3RoO30KZ2V0IHBlcmNlbnRhZ2UoKXtyZXR1cm4gdGhpcy5wZXJjZW50YWdlXzt9CnNldCBwZXJjZW50YWdlKHZhbHVlKXt0aGlzLnBlcmNlbnRhZ2VfPXZhbHVlO319CmNsYXNzIElDU3RhdHNDb2xsZWN0aW9ue2NvbnN0cnVjdG9yKCl7dGhpcy5lbnRyaWVzXz1bXTt0aGlzLmdyb3VwZWRFbnRyaWVzXz1uZXcgTWFwKCk7fQphZGQoZW50cnkpe3RoaXMuZW50cmllc18ucHVzaChlbnRyeSk7fQpncm91cEJ5KHByb3BlcnR5KXtpZih0aGlzLmdyb3VwZWRFbnRyaWVzXy5oYXMocHJvcGVydHkpKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmdyb3VwZWRFbnRyaWVzXy5nZXQocHJvcGVydHkpLnZhbHVlcygpKTt9CmNvbnN0IGdyb3Vwcz1uZXcgTWFwKCk7dGhpcy5ncm91cGVkRW50cmllc18uc2V0KHByb3BlcnR5LGdyb3Vwcyk7SUNTdGF0c0VudHJ5R3JvdXAuZ3JvdXBCeShncm91cHMsdGhpcy5lbnRyaWVzXyxwcm9wZXJ0eSk7cmV0dXJuIEFycmF5LmZyb20oZ3JvdXBzLnZhbHVlcygpKTt9CmdldCBlbnRyaWVzKCl7cmV0dXJuIHRoaXMuZW50cmllc187fQpnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMuZW50cmllc18ubGVuZ3RoO319CnJldHVybntJQ19TVEFUU19QUk9QRVJUSUVTLElDU3RhdHNFbnRyeSxJQ1N0YXRzRW50cnlHcm91cCxJQ1N0YXRzQ29sbGVjdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBQUk9QRVJUSUVTPXRyLmUudjguSUNfU1RBVFNfUFJPUEVSVElFUy5tYXAoeD0+e3JldHVybntsYWJlbDp4LHZhbHVlOnh9O30pO2NvbnN0IElDU3RhdHNFbnRyeT10ci5lLnY4LklDU3RhdHNFbnRyeTtjb25zdCBJQ1N0YXRzRW50cnlHcm91cD10ci5lLnY4LklDU3RhdHNFbnRyeUdyb3VwO2NvbnN0IElDU3RhdHNDb2xsZWN0aW9uPXRyLmUudjguSUNTdGF0c0NvbGxlY3Rpb247UG9seW1lcih7aXM6J3RyLXVpLWUtdjgtaWMtc3RhdHMtdGFibGUnLHJlYWR5KCl7dGhpcy5pY1N0YXRzQ29sbGVjdGlvbl89bmV3IElDU3RhdHNDb2xsZWN0aW9uKCk7dGhpcy5ncm91cEtleV89UFJPUEVSVElFU1swXS52YWx1ZTt0aGlzLnNlbGVjdG9yXz10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2dyb3VwS2V5JywndjhJQ1N0YXRzR3JvdXBLZXknLHRoaXMuZ3JvdXBLZXlfLFBST1BFUlRJRVMpO1BvbHltZXIuZG9tKHRoaXMuJC5ncm91cE9wdGlvbikuYXBwZW5kQ2hpbGQodGhpcy5zZWxlY3Rvcl8pO30sZ2V0IGdyb3VwS2V5KCl7cmV0dXJuIHRoaXMuZ3JvdXBLZXlfO30sc2V0IGdyb3VwS2V5KGtleSl7dGhpcy5ncm91cEtleV89a2V5O2lmKHRoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmxlbmd0aD09PTApcmV0dXJuO3RoaXMudXBkYXRlVGFibGVfKHRoaXMuZ3JvdXBLZXlfKTt9LGNvbnN0cnVjdFRhYmxlXyh0YWJsZSxncm91cEtleSl7dGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6JycsdmFsdWU6cm93PT57bGV0IGV4cGFuZGVkPWZhbHNlO2NvbnN0IGJ1dHRvbkVsPXRyLnVpLmIuY3JlYXRlQnV0dG9uKCdkZXRhaWxzJyxmdW5jdGlvbigpe2NvbnN0IHByZXZpb3VzU2libGluZz1Qb2x5bWVyLmRvbSh0aGlzKS5wYXJlbnROb2RlLnBhcmVudE5vZGU7Y29uc3QgcGFyZW50Tm9kZT1wcmV2aW91c1NpYmxpbmcucGFyZW50Tm9kZTtpZihleHBhbmRlZCl7Y29uc3QgdHJFbHM9cGFyZW50Tm9kZS5nZXRFbGVtZW50c0J5Q2xhc3NOYW1lKCdzdWJUYWJsZScpO0FycmF5LmZyb20odHJFbHMpLm1hcCh4PT54LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoeCkpO2V4cGFuZGVkPWZhbHNlO3JldHVybjt9CmV4cGFuZGVkPXRydWU7Y29uc3Qgc3ViR3JvdXBzPXJvdy5jcmVhdGVTdWJHcm91cCgpO2NvbnN0IHRyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7dHIuY2xhc3NMaXN0LmFkZCgnc3ViVGFibGUnKTt0ci5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpKTtjb25zdCB0ZD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ZCcpO3RkLmNvbFNwYW49Mztmb3IoY29uc3Qgc3ViR3JvdXAgb2Ygc3ViR3JvdXBzKXtjb25zdCBwcm9wZXJ0eT1zdWJHcm91cFswXTtjb25zdCBhbGw9QXJyYXkuZnJvbShzdWJHcm91cFsxXS52YWx1ZXMoKSk7Y29uc3QgZ3JvdXA9YWxsLnNsaWNlKDAsMjApO2NvbnN0IGRpdkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO2NvbnN0IHNwYW5FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7Y29uc3Qgc3ViVGFibGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlJyk7c3BhbkVsLmlubmVyVGV4dD1gVG9wIDIwIG91dCBvZiAke2FsbC5sZW5ndGh9YDtzcGFuRWwuc3R5bGUuZm9udFdlaWdodD0nYm9sZCc7c3BhbkVsLnN0eWxlLmZvbnRTaXplPScxNHB4JztkaXZFbC5hcHBlbmRDaGlsZChzcGFuRWwpO3RoaXMuY29uc3RydWN0VGFibGVfKHN1YlRhYmxlRWwscHJvcGVydHkpO3N1YlRhYmxlRWwudGFibGVSb3dzPWdyb3VwO3N1YlRhYmxlRWwucmVidWlsZCgpO2RpdkVsLmFwcGVuZENoaWxkKHN1YlRhYmxlRWwpO3RkLmFwcGVuZENoaWxkKGRpdkVsKTt9CnRyLmFwcGVuZENoaWxkKHRkKTtwYXJlbnROb2RlLmluc2VydEJlZm9yZSh0cixwcmV2aW91c1NpYmxpbmcubmV4dFNpYmxpbmcpO30pO3JldHVybiBidXR0b25FbDt9fSx7dGl0bGU6J1BlcmNlbnRhZ2UnLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtzcGFuRWwuaW5uZXJUZXh0PShyb3cucGVyY2VudGFnZSoxMDApLnRvRml4ZWQoMykrJyUnO3JldHVybiBzcGFuRWw7fSxjbXA6KGEsYik9PmEucGVyY2VudGFnZS1iLnBlcmNlbnRhZ2V9LHt0aXRsZTonQ291bnQnLHZhbHVlKHJvdyl7Y29uc3Qgc3BhbkVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtzcGFuRWwuaW5uZXJUZXh0PXJvdy5sZW5ndGg7cmV0dXJuIHNwYW5FbDt9LGNtcDooYSxiKT0+YS5sZW5ndGgtYi5sZW5ndGh9LHt0aXRsZTpncm91cEtleSx2YWx1ZShyb3cpe2NvbnN0IHNwYW5FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7c3BhbkVsLmlubmVyVGV4dD1yb3cua2V5P3Jvdy5rZXk6Jyc7cmV0dXJuIHNwYW5FbDt9fV07dGFibGUuc29ydENvbHVtbkluZGV4PTE7dGFibGUuc29ydERlc2NlbmRpbmc9dHJ1ZTt9LHVwZGF0ZVRhYmxlXyhncm91cEtleSl7dGhpcy5jb25zdHJ1Y3RUYWJsZV8odGhpcy4kLnRhYmxlLGdyb3VwS2V5KTt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmdyb3VwQnkoZ3JvdXBLZXkpO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSxzZXQgc2VsZWN0aW9uKHNsaWNlcyl7Zm9yKGNvbnN0IHNsaWNlIG9mIHNsaWNlcyl7Zm9yKGNvbnN0IGljU3RhdHNPYmogb2Ygc2xpY2UuaWNTdGF0cyl7Y29uc3QgZW50cnk9bmV3IElDU3RhdHNFbnRyeShpY1N0YXRzT2JqKTt0aGlzLmljU3RhdHNDb2xsZWN0aW9uXy5hZGQoZW50cnkpO319CnRoaXMuJC50b3RhbC5pbm5lclRleHQ9J1RvdGFsIGl0ZW1zOiAnK3RoaXMuaWNTdGF0c0NvbGxlY3Rpb25fLmxlbmd0aDt0aGlzLnVwZGF0ZVRhYmxlXyh0aGlzLnNlbGVjdG9yXy5zZWxlY3RlZFZhbHVlKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLW11bHRpLXY4LWljLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC50YWJsZS5zZWxlY3Rpb249c2VsZWN0aW9uO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWUtbXVsdGktdjgtaWMtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4SUNTdGF0c1RocmVhZFNsaWNlLHttdWx0aTp0cnVlLHRpdGxlOidWOCBJQyBzdGF0cyBzbGljZXMnfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnY4JyxmdW5jdGlvbigpe2NsYXNzIFJ1bnRpbWVTdGF0c0VudHJ5e2NvbnN0cnVjdG9yKG5hbWUsY291bnQsdGltZSl7dGhpcy5uYW1lXz1uYW1lO3RoaXMuY291bnRfPWNvdW50O3RoaXMudGltZV89dGltZTt9CmdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fQpnZXQgY291bnQoKXtyZXR1cm4gdGhpcy5jb3VudF87fQpnZXQgdGltZSgpe3JldHVybiB0aGlzLnRpbWVfO30KYWRkU2FtcGxlKGNvdW50LHRpbWUpe3RoaXMuY291bnRfKz1jb3VudDt0aGlzLnRpbWVfKz10aW1lO319CmNsYXNzIFJ1bnRpbWVTdGF0c0dyb3VwIGV4dGVuZHMgUnVudGltZVN0YXRzRW50cnl7Y29uc3RydWN0b3IobmFtZSxtYXRjaFJlZ2V4KXtzdXBlcihuYW1lLDAsMCk7dGhpcy5yZWdleF89bWF0Y2hSZWdleDt0aGlzLmVudHJpZXNfPW5ldyBNYXAoKTt9Cm1hdGNoKG5hbWUpe3JldHVybiB0aGlzLnJlZ2V4XyYmbmFtZS5tYXRjaCh0aGlzLnJlZ2V4Xyk7fQphZGQoZW50cnkpe2NvbnN0IHZhbHVlPXRoaXMuZW50cmllc18uZ2V0KGVudHJ5Lm5hbWUpO2lmKHZhbHVlIT09dW5kZWZpbmVkKXt2YWx1ZS5hZGRTYW1wbGUoZW50cnkuY291bnQsZW50cnkudGltZSk7fWVsc2V7dGhpcy5lbnRyaWVzXy5zZXQoZW50cnkubmFtZSxlbnRyeSk7fQp0aGlzLmNvdW50Xys9ZW50cnkuY291bnQ7dGhpcy50aW1lXys9ZW50cnkudGltZTt9CmdldCB2YWx1ZXMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmVudHJpZXNfLnZhbHVlcygpKTt9fQpjbGFzcyBSdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb257Y29uc3RydWN0b3IoKXt0aGlzLmJsaW5rX2NwcF9ncm91cF89bmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGluayBDKysnLC8uKkNhbGxiYWNrLiovKTt0aGlzLmFwaV9ncm91cF89bmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdBUEknLC8uKkFQSS4qLyk7dGhpcy5ncm91cHNfPVtuZXcgUnVudGltZVN0YXRzR3JvdXAoJ1RvdGFsJyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdJQycsLy4qSUNfLiovKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ09wdGltaXplLUJhY2tncm91bmQnLC8oLipPcHRpbWl6ZUJhY2tncm91bmQuKil8UmVjb21waWxlQ29uY3VycmVudC4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdPcHRpbWl6ZScsL1N0YWNrR3VhcmR8LipPcHRpbWl6ZS4qfC4qRGVvcHRpbWl6ZS4qfFJlY29tcGlsZS4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdDb21waWxlLUJhY2tncm91bmQnLC8oLipDb21waWxlQmFja2dyb3VuZC4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnQ29tcGlsZScsLyheQ29tcGlsZS4qKXwoLipfQ29tcGlsZS4qKS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnUGFyc2UtQmFja2dyb3VuZCcsLy4qUGFyc2VCYWNrZ3JvdW5kLiovKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ1BhcnNlJywvLipQYXJzZS4qLyksdGhpcy5ibGlua19jcHBfZ3JvdXBfLHRoaXMuYXBpX2dyb3VwXyxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ0dDLUJhY2tncm91bmQtTWFya2luZycsLy4qR0MuTUMuQkFDS0dST1VORC4qTUFSS0lORy4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLVN3ZWVwaW5nJywvLipHQy5NQy5CQUNLR1JPVU5ELipTV0VFUElORy4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLVNjYXZlbmdlcicsLy4qR0MuU0NBVkVOR0VSLkJBQ0tHUk9VTkQuKi8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnR0MtQmFja2dyb3VuZC1NaW5vck1DJywvLipHQy5NSU5PUl9NQy5CQUNLR1JPVU5ELiovKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ0dDLUJhY2tncm91bmQtTWFqb3JNQycsLy4qR0MuTUMuQkFDS0dST1VORC4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQy1CYWNrZ3JvdW5kLU90aGVyJywvLipHQy4qQkFDS0dST1VORC4qLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdHQycsL0dDfEFsbG9jYXRlSW5UYXJnZXRTcGFjZS8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnSmF2YVNjcmlwdCcsL0pTX0V4ZWN1dGlvbi8pLG5ldyBSdW50aW1lU3RhdHNHcm91cCgnVjggQysrJywvLiovKV07dGhpcy5ibGlua19ncm91cF9jb2xsZWN0aW9uXz1udWxsO30KYWRkU2xpY2VzKHNsaWNlcyl7Y29uc3QgYmxpbmtFbnRyaWVzPVtdO2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXMpe2lmKCEoc2xpY2UgaW5zdGFuY2VvZiB0ci5lLnY4LlY4VGhyZWFkU2xpY2UpKXJldHVybjtsZXQgcnVudGltZUNhbGxTdGF0czt0cnl7cnVudGltZUNhbGxTdGF0cz1KU09OLnBhcnNlKHNsaWNlLnJ1bnRpbWVDYWxsU3RhdHMpO31jYXRjaChlKXtydW50aW1lQ2FsbFN0YXRzPXNsaWNlLnJ1bnRpbWVDYWxsU3RhdHM7fQppZihydW50aW1lQ2FsbFN0YXRzPT09dW5kZWZpbmVkKWNvbnRpbnVlO2Zvcihjb25zdFtuYW1lLHN0YXRdb2YgT2JqZWN0LmVudHJpZXMocnVudGltZUNhbGxTdGF0cykpe2lmKG5hbWUubWF0Y2goL0JsaW5rXy4qLykpe2lmKG5hbWU9PT0nQmxpbmtfVjgnKWNvbnRpbnVlO2NvbnN0IGVudHJ5PW5ldyBSdW50aW1lU3RhdHNFbnRyeShuYW1lLHN0YXRbMF0sc3RhdFsxXSk7YmxpbmtFbnRyaWVzLnB1c2goZW50cnkpO2NvbnRpbnVlO30KZm9yKGxldCBpPTE7aTx0aGlzLmdyb3Vwc18ubGVuZ3RoOysraSl7aWYodGhpcy5ncm91cHNfW2ldLm1hdGNoKG5hbWUpKXtpZihzdGF0Lmxlbmd0aCE9PTIpYnJlYWs7Y29uc3QgZW50cnk9bmV3IFJ1bnRpbWVTdGF0c0VudHJ5KG5hbWUsc3RhdFswXSxzdGF0WzFdKTt0aGlzLmdyb3Vwc19bMF0uYWRkU2FtcGxlKHN0YXRbMF0sc3RhdFsxXSk7dGhpcy5ncm91cHNfW2ldLmFkZChlbnRyeSk7YnJlYWs7fX19fQp0aGlzLmJsaW5rX2dyb3VwX2NvbGxlY3Rpb25fPW5ldyBCbGlua1J1bnRpbWVTdGF0c0dyb3VwQ29sbGVjdGlvbihibGlua0VudHJpZXMpO30KZ2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLmdyb3Vwc19bMF0udGltZTt9CmdldCB0b3RhbENvdW50KCl7cmV0dXJuIHRoaXMuZ3JvdXBzX1swXS5jb3VudDt9CmdldCBydW50aW1lR3JvdXBzKCl7cmV0dXJuIHRoaXMuZ3JvdXBzXzt9CmdldCBibGlua1JDU0dyb3VwQ29sbGVjdGlvbigpe3JldHVybiB0aGlzLmJsaW5rX2dyb3VwX2NvbGxlY3Rpb25fO30KZ2V0IGJsaW5rQ3BwVG90YWxUaW1lKCl7cmV0dXJuIHRoaXMuYmxpbmtfY3BwX2dyb3VwXy50aW1lK3RoaXMuYXBpX2dyb3VwXy50aW1lO319CmNsYXNzIEJsaW5rUnVudGltZVN0YXRzR3JvdXBDb2xsZWN0aW9ue2NvbnN0cnVjdG9yKGVudHJpZXMpe3RoaXMuZ3JvdXBzXz1bbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19CaW5kaW5ncycsL15CbGlua19CaW5kaW5nc18oLiopLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19HQycsL15CbGlua19HQ18oLiopLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19MYXlvdXQnLC9eQmxpbmtfTGF5b3V0XyguKikvKSxuZXcgUnVudGltZVN0YXRzR3JvdXAoJ0JsaW5rX1BhcnNpbmcnLC9eQmxpbmtfUGFyc2luZ18oLiopLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19TdHlsZScsL15CbGlua19TdHlsZV8oLiopLyksbmV3IFJ1bnRpbWVTdGF0c0dyb3VwKCdCbGlua19DYWxsYmFja3MnLC9eQmxpbmtfKC4qKS8pXTt0aGlzLnRvdGFsX2dyb3VwXz1uZXcgUnVudGltZVN0YXRzR3JvdXAoJ0JsaW5rX1RvdGFsJywvLiovKTtmb3IoY29uc3QgZW50cnkgb2YgZW50cmllcyl7Zm9yKGNvbnN0IGdyb3VwIG9mIHRoaXMuZ3JvdXBzXyl7aWYoZ3JvdXAubWF0Y2goZW50cnkubmFtZSkpe2NvbnN0IG5ld0VudHJ5PW5ldyBSdW50aW1lU3RhdHNFbnRyeSgnQmxpbmtfJytncm91cC5tYXRjaChlbnRyeS5uYW1lKVsxXSxlbnRyeS5jb3VudCxlbnRyeS50aW1lKTtncm91cC5hZGQobmV3RW50cnkpO3RoaXMudG90YWxfZ3JvdXBfLmFkZFNhbXBsZShlbnRyeS5jb3VudCxlbnRyeS50aW1lKTticmVhazt9fX19CmdldCBydW50aW1lR3JvdXBzKCl7cmV0dXJuIHRoaXMuZ3JvdXBzXy5jb25jYXQodGhpcy50b3RhbF9ncm91cF8pO30KZ2V0IHZhbHVlcygpe3JldHVybiB0aGlzLmdyb3Vwc18ucmVkdWNlKCh2YWx1ZXMsZ3JvdXApPT52YWx1ZXMuY29uY2F0KGdyb3VwLnZhbHVlcyksW10pO30KZ2V0IHRvdGFsVGltZSgpe3JldHVybiB0aGlzLnRvdGFsX2dyb3VwXy50aW1lO30KZ2V0IHRvdGFsQ291bnQoKXtyZXR1cm4gdGhpcy50b3RhbF9ncm91cF8uY291bnQ7fX0KcmV0dXJue0JsaW5rUnVudGltZVN0YXRzR3JvdXBDb2xsZWN0aW9uLFJ1bnRpbWVTdGF0c0VudHJ5LFJ1bnRpbWVTdGF0c0dyb3VwLFJ1bnRpbWVTdGF0c0dyb3VwQ29sbGVjdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuZS52OCcsZnVuY3Rpb24oKXtjb25zdCBjb2RlU2VhcmNoVVJMXz0naHR0cHM6Ly9jcy5jaHJvbWl1bS5vcmcvc2VhcmNoLz9zcT1wYWNrYWdlOmNocm9taXVtJnR5cGU9Y3MmcT0nO2Z1bmN0aW9uIHJlbW92ZUJsaW5rUHJlZml4XyhuYW1lKXtpZihuYW1lLnN0YXJ0c1dpdGgoJ0JsaW5rXycpKW5hbWU9bmFtZS5zdWJzdHJpbmcoNik7cmV0dXJuIG5hbWU7fQpmdW5jdGlvbiBoYW5kbGVDb2RlU2VhcmNoRm9yVjhfKGV2ZW50KXtpZihldmVudC50YXJnZXQucGFyZW50Tm9kZT09PXVuZGVmaW5lZClyZXR1cm47bGV0IG5hbWU9ZXZlbnQudGFyZ2V0LnBhcmVudE5vZGUuZW50cnlOYW1lO2lmKG5hbWUuc3RhcnRzV2l0aCgnQVBJXycpKW5hbWU9bmFtZS5zdWJzdHJpbmcoNCk7Y29uc3QgdXJsPWNvZGVTZWFyY2hVUkxfK2VuY29kZVVSSUNvbXBvbmVudChuYW1lKSsnK2ZpbGU6c3JjL3Y4L3NyYyc7d2luZG93Lm9wZW4odXJsLCdfYmxhbmsnKTt9CmZ1bmN0aW9uIGhhbmRsZUNvZGVTZWFyY2hGb3JCbGlua18oZXZlbnQpe2lmKGV2ZW50LnRhcmdldC5wYXJlbnROb2RlPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBuYW1lPWV2ZW50LnRhcmdldC5wYXJlbnROb2RlLmVudHJ5TmFtZTtjb25zdCB1cmw9Y29kZVNlYXJjaFVSTF8rCmVuY29kZVVSSUNvbXBvbmVudCgnUnVudGltZUNhbGxTdGF0czo6Q291bnRlcklkOjprJytuYW1lKSsnK2ZpbGU6c3JjL3RoaXJkX3BhcnR5L1dlYktpdC98c3JjL291dC9EZWJ1Zy8nO3dpbmRvdy5vcGVuKHVybCwnX2JsYW5rJyk7fQpmdW5jdGlvbiBjcmVhdGVDb2RlU2VhcmNoRWxfKGhhbmRsZUNvZGVTZWFyY2gpe2NvbnN0IGNvZGVTZWFyY2hFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7Y29kZVNlYXJjaEVsLmlubmVyVGV4dD0nPyc7Y29kZVNlYXJjaEVsLnN0eWxlLmZsb2F0PSdyaWdodCc7Y29kZVNlYXJjaEVsLnN0eWxlLmJvcmRlclJhZGl1cz0nNXB4Jztjb2RlU2VhcmNoRWwuc3R5bGUuYmFja2dyb3VuZENvbG9yPScjRUVFJztjb2RlU2VhcmNoRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGhhbmRsZUNvZGVTZWFyY2guYmluZCh0aGlzKSk7cmV0dXJuIGNvZGVTZWFyY2hFbDt9CmNvbnN0IHRpbWVDb2x1bW5fPXt0aXRsZTonVGltZScsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9KHJvdy50aW1lLzEwMDAuMCkudG9GaXhlZCgzKSsnIG1zJztyZXR1cm4gdHlwZUVsO30sd2lkdGg6JzEwMHB4JyxjbXAoYSxiKXtyZXR1cm4gYS50aW1lLWIudGltZTt9fTtjb25zdCBjb3VudENvbHVtbl89e3RpdGxlOidDb3VudCcsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9cm93LmNvdW50O3JldHVybiB0eXBlRWw7fSx3aWR0aDonMTAwcHgnLGNtcChhLGIpe3JldHVybiBhLmNvdW50LWIuY291bnQ7fX07ZnVuY3Rpb24gcGVyY2VudENvbHVtbl8odGl0bGUsdG90YWxUaW1lKXtyZXR1cm57dGl0bGUsdmFsdWUocm93KXtjb25zdCB0eXBlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3R5cGVFbC5pbm5lclRleHQ9KHJvdy50aW1lL3RvdGFsVGltZSoxMDApLnRvRml4ZWQoMykrJyUnO3JldHVybiB0eXBlRWw7fSx3aWR0aDonMTAwcHgnLGNtcChhLGIpe3JldHVybiBhLnRpbWUtYi50aW1lO319O30KZnVuY3Rpb24gbmFtZUNvbHVtbl8oaGFuZGxlQ29kZVNlYXJjaCxtb2RpZnlOYW1lKXtyZXR1cm57dGl0bGU6J05hbWUnLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtsZXQgbmFtZT1yb3cubmFtZTtpZihtb2RpZnlOYW1lKW5hbWU9bW9kaWZ5TmFtZShuYW1lKTt0eXBlRWwuaW5uZXJUZXh0PW5hbWU7aWYoIShyb3cgaW5zdGFuY2VvZiB0ci5lLnY4LlJ1bnRpbWVTdGF0c0dyb3VwKSl7dHlwZUVsLnRpdGxlPSdjbGljayA/IGZvciBjb2RlIHNlYXJjaCc7dHlwZUVsLmVudHJ5TmFtZT1uYW1lO2NvbnN0IGNvZGVTZWFyY2hFbD1jcmVhdGVDb2RlU2VhcmNoRWxfKGhhbmRsZUNvZGVTZWFyY2gpO3R5cGVFbC5hcHBlbmRDaGlsZChjb2RlU2VhcmNoRWwpO30KcmV0dXJuIHR5cGVFbDt9LHdpZHRoOicyMDBweCcsc2hvd0V4cGFuZEJ1dHRvbnM6dHJ1ZX07fQpmdW5jdGlvbiBpbml0aWFsaXplQ29tbW9uT3B0aW9uc18odGFibGUpe3RhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt0YWJsZS5zb3J0Q29sdW1uSW5kZXg9MTt0YWJsZS5zb3J0RGVzY2VuZGluZz10cnVlO3RhYmxlLnN1YlJvd3NQcm9wZXJ0eU5hbWU9J3ZhbHVlcyc7fQpQb2x5bWVyKHtpczondHItdWktZS12OC1ydW50aW1lLWNhbGwtc3RhdHMtdGFibGUnLHJlYWR5KCl7dGhpcy50YWJsZV89dGhpcy4kLnRhYmxlO3RoaXMuYmxpbmtfcmNzX3RhYmxlXz10aGlzLiQuYmxpbmtfcmNzX3RhYmxlO3RoaXMudG90YWxUaW1lXz0wO30sY29uc3RydWN0VjhSQ1NUYWJsZV8odG90YWxUaW1lKXt0aGlzLnRhYmxlXy50YWJsZUNvbHVtbnM9W25hbWVDb2x1bW5fKGhhbmRsZUNvZGVTZWFyY2hGb3JWOF8pLHRpbWVDb2x1bW5fLGNvdW50Q29sdW1uXyxwZXJjZW50Q29sdW1uXygnUGVyY2VudCcsdG90YWxUaW1lKV07aW5pdGlhbGl6ZUNvbW1vbk9wdGlvbnNfKHRoaXMudGFibGVfKTt9LGNvbnN0cnVjdEJsaW5rUkNTVGFibGVfKGJsaW5rQ3BwVG90YWxUaW1lKXt0aGlzLmJsaW5rX3Jjc190YWJsZV8udGFibGVDb2x1bW5zPVtuYW1lQ29sdW1uXyhoYW5kbGVDb2RlU2VhcmNoRm9yQmxpbmtfLHJlbW92ZUJsaW5rUHJlZml4XyksdGltZUNvbHVtbl8sY291bnRDb2x1bW5fLHBlcmNlbnRDb2x1bW5fKCdQZXJjZW50IChvZiBcJ0JsaW5rIEMrK1wnICsgXCdBUElcJyknLGJsaW5rQ3BwVG90YWxUaW1lKV07aW5pdGlhbGl6ZUNvbW1vbk9wdGlvbnNfKHRoaXMuYmxpbmtfcmNzX3RhYmxlXyk7fSxzZXQgc2xpY2VzKHNsaWNlcyl7Y29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyhzbGljZXMpO2lmKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe3RoaXMuJC52OF9yY3NfaGVhZGluZy50ZXh0Q29udGVudD0nVjggUnVudGltZSBDYWxsIFN0YXRzJzt0aGlzLmNvbnN0cnVjdFY4UkNTVGFibGVfKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxUaW1lKTt0aGlzLnRhYmxlXy50YWJsZVJvd3M9cnVudGltZUdyb3VwQ29sbGVjdGlvbi5ydW50aW1lR3JvdXBzO3RoaXMudGFibGVfLnJlYnVpbGQoKTt9CmNvbnN0IGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uPXJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb247aWYocnVudGltZUdyb3VwQ29sbGVjdGlvbi5ibGlua0NwcFRvdGFsVGltZT4wJiZibGlua1JDU0dyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU+MCl7dGhpcy4kLmJsaW5rX3Jjc19oZWFkaW5nLnRleHRDb250ZW50PSdCbGluayBSdW50aW1lIENhbGwgU3RhdHMnO3RoaXMuY29uc3RydWN0QmxpbmtSQ1NUYWJsZV8ocnVudGltZUdyb3VwQ29sbGVjdGlvbi5ibGlua0NwcFRvdGFsVGltZSk7dGhpcy5ibGlua19yY3NfdGFibGVfLnRhYmxlUm93cz1ibGlua1JDU0dyb3VwQ29sbGVjdGlvbi5ydW50aW1lR3JvdXBzO3RoaXMuYmxpbmtfcmNzX3RhYmxlXy5yZWJ1aWxkKCk7fX19KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtbXVsdGktdjgtdGhyZWFkLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy4kLnJ1bnRpbWVDYWxsU3RhdHMuc2xpY2VzPXNlbGVjdGlvbjt0aGlzLiQuY29udGVudC5zZWxlY3Rpb249c2VsZWN0aW9uO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWUtbXVsdGktdjgtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4VGhyZWFkU2xpY2Use211bHRpOnRydWUsdGl0bGU6J1Y4IHNsaWNlcyd9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtc2luZ2xlLXY4LWdjLXN0YXRzLXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5jb250ZW50LnNlbGVjdGlvbj1zZWxlY3Rpb247dGhpcy4kLmdjT2JqZWN0c1N0YXRzLnNlbGVjdGlvbj1zZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktZS1zaW5nbGUtdjgtZ2Mtc3RhdHMtdGhyZWFkLXNsaWNlLXN1Yi12aWV3Jyx0ci5lLnY4LlY4R0NTdGF0c1RocmVhZFNsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonVjggR0Mgc3RhdHMgc2xpY2UnfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1lLXNpbmdsZS12OC1pYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuJC5jb250ZW50LnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQudGFibGUuc2VsZWN0aW9uPXNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1lLXNpbmdsZS12OC1pYy1zdGF0cy10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLHRyLmUudjguVjhJQ1N0YXRzVGhyZWFkU2xpY2Use211bHRpOmZhbHNlLHRpdGxlOidWOCBJQyBzdGF0cyBzbGljZSd9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWUtc2luZ2xlLXY4LXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5ydW50aW1lQ2FsbFN0YXRzLnNsaWNlcz1zZWxlY3Rpb247dGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uPXNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1lLXNpbmdsZS12OC10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLHRyLmUudjguVjhUaHJlYWRTbGljZSx7bXVsdGk6ZmFsc2UsdGl0bGU6J1Y4IHNsaWNlJ30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYycsZnVuY3Rpb24oKXtmdW5jdGlvbiBTY3JpcHRpbmdPYmplY3QoKXt9ClNjcmlwdGluZ09iamVjdC5wcm90b3R5cGU9e29uTW9kZWxDaGFuZ2VkKG1vZGVsKXt9fTtyZXR1cm57U2NyaXB0aW5nT2JqZWN0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5jJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFNjcmlwdGluZ0NvbnRyb2xsZXIoYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPWJydXNoaW5nU3RhdGVDb250cm9sbGVyO3RoaXMuc2NyaXB0T2JqZWN0TmFtZXNfPVtdO3RoaXMuc2NyaXB0T2JqZWN0VmFsdWVzXz1bXTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLmFkZEV2ZW50TGlzdGVuZXIoJ21vZGVsLWNoYW5nZWQnLHRoaXMub25Nb2RlbENoYW5nZWRfLmJpbmQodGhpcykpO2NvbnN0IHR5cGVJbmZvcz1TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCk7dHlwZUluZm9zLmZvckVhY2goZnVuY3Rpb24odHlwZUluZm8pe3RoaXMuYWRkU2NyaXB0T2JqZWN0KHR5cGVJbmZvLm1ldGFkYXRhLm5hbWUsdHlwZUluZm8uY29uc3RydWN0b3IpO2dsb2JhbFt0eXBlSW5mby5tZXRhZGF0YS5uYW1lXT10eXBlSW5mby5jb25zdHJ1Y3Rvcjt9LHRoaXMpO30KZnVuY3Rpb24gU2NyaXB0aW5nT2JqZWN0UmVnaXN0cnkoKXt9CmNvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuQkFTSUNfUkVHSVNUUllfTU9ERSk7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LG9wdGlvbnMpO1NjcmlwdGluZ0NvbnRyb2xsZXIucHJvdG90eXBlPXtnZXQgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87fSxvbk1vZGVsQ2hhbmdlZF8oKXt0aGlzLnNjcmlwdE9iamVjdFZhbHVlc18uZm9yRWFjaChmdW5jdGlvbih2KXtpZih2Lm9uTW9kZWxDaGFuZ2VkKXt2Lm9uTW9kZWxDaGFuZ2VkKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIubW9kZWwpO319LHRoaXMpO30sYWRkU2NyaXB0T2JqZWN0KG5hbWUsdmFsdWUpe3RoaXMuc2NyaXB0T2JqZWN0TmFtZXNfLnB1c2gobmFtZSk7dGhpcy5zY3JpcHRPYmplY3RWYWx1ZXNfLnB1c2godmFsdWUpO30sZXhlY3V0ZUNvbW1hbmQoY29tbWFuZCl7Y29uc3QgZj1uZXcgRnVuY3Rpb24odGhpcy5zY3JpcHRPYmplY3ROYW1lc18sJ3JldHVybiBldmFsKCcrY29tbWFuZCsnKScpO3JldHVybiBmLmFwcGx5KG51bGwsdGhpcy5zY3JpcHRPYmplY3RWYWx1ZXNfKTt9fTtyZXR1cm57U2NyaXB0aW5nQ29udHJvbGxlcixTY3JpcHRpbmdPYmplY3RSZWdpc3RyeSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBNZXRyaWNSZWdpc3RyeSgpe30KY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLmRlZmF1bHRNZXRhZGF0YT17fTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoTWV0cmljUmVnaXN0cnksb3B0aW9ucyk7ZnVuY3Rpb24gY2FtZWxDYXNlVG9IYWNrZXJTdHJpbmcoY2FtZWxDYXNlKXtsZXQgaGFja2VyU3RyaW5nPScnO2Zvcihjb25zdCBjIG9mIGNhbWVsQ2FzZSl7Y29uc3QgbG93ZXJlZD1jLnRvTG9jYWxlTG93ZXJDYXNlKCk7aWYobG93ZXJlZD09PWMpe2hhY2tlclN0cmluZys9Yzt9ZWxzZXtoYWNrZXJTdHJpbmcrPSdfJytsb3dlcmVkO319CnJldHVybiBoYWNrZXJTdHJpbmc7fQpmdW5jdGlvbiBnZXRDYWxsU3RhY2soKXt0cnl7dGhyb3cgbmV3IEVycm9yKCk7fWNhdGNoKGVycm9yKXtyZXR1cm4gZXJyb3Iuc3RhY2s7fX0KZnVuY3Rpb24gZ2V0UGF0aHNGcm9tU3RhY2soc3RhY2spe3JldHVybiBzdGFjay5zcGxpdCgnXG4nKS5tYXAobGluZT0+e2xpbmU9bGluZS5yZXBsYWNlKC9eICovLCcnKS5zcGxpdCgnOicpO2lmKGxpbmUubGVuZ3RoPDQpcmV0dXJuJyc7cmV0dXJuIGxpbmVbbGluZS5sZW5ndGgtM10uc3BsaXQoJy8nKTt9KS5maWx0ZXIoeD0+eCk7fQpNZXRyaWNSZWdpc3RyeS5jaGVja0ZpbGVuYW1lPWZ1bmN0aW9uKG1ldHJpY05hbWUsb3B0X21ldHJpY1BhdGhGb3JUZXN0KXtpZihtZXRyaWNOYW1lPT09J3J1bnRpbWVTdGF0c1RvdGFsTWV0cmljJ3x8bWV0cmljTmFtZT09PSd2OEFuZE1lbW9yeU1ldHJpY3MnKXtyZXR1cm47fQpjb25zdCBleHBlY3RlZEZpbGVuYW1lPWNhbWVsQ2FzZVRvSGFja2VyU3RyaW5nKG1ldHJpY05hbWUpKycuaHRtbCc7Y29uc3Qgc3RhY2s9Z2V0Q2FsbFN0YWNrKCk7bGV0IG1ldHJpY1BhdGg9b3B0X21ldHJpY1BhdGhGb3JUZXN0O2lmKG1ldHJpY1BhdGg9PT11bmRlZmluZWQpe2NvbnN0IHBhdGhzPWdldFBhdGhzRnJvbVN0YWNrKHN0YWNrKTtjb25zdCBNRVRSSUNfU1RBQ0tfSU5ERVg9NTtpZihwYXRocy5sZW5ndGg8PU1FVFJJQ19TVEFDS19JTkRFWHx8cGF0aHNbTUVUUklDX1NUQUNLX0lOREVYXS5qb2luKCcvJyk9PT1wYXRoc1swXS5qb2luKCcvJykpe3JldHVybjt9Cm1ldHJpY1BhdGg9cGF0aHNbTUVUUklDX1NUQUNLX0lOREVYXS5zbGljZShwYXRoc1tNRVRSSUNfU1RBQ0tfSU5ERVhdLmxlbmd0aC0yKTt9CmlmKCFtZXRyaWNQYXRoWzFdLmVuZHNXaXRoKCdfdGVzdC5odG1sJykmJiFtZXRyaWNQYXRoWzFdLmVuZHNXaXRoKCdfdGVzdC5odG1sLmpzJykmJm1ldHJpY1BhdGhbMV0hPT1leHBlY3RlZEZpbGVuYW1lJiZtZXRyaWNQYXRoWzFdIT09ZXhwZWN0ZWRGaWxlbmFtZSsnLmpzJyYmbWV0cmljUGF0aC5qb2luKCdfJykhPT1leHBlY3RlZEZpbGVuYW1lJiZtZXRyaWNQYXRoLmpvaW4oJ18nKSE9PWV4cGVjdGVkRmlsZW5hbWUrJy5qcycpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgJyttZXRyaWNOYW1lKycgdG8gYmUgaW4gYSBmaWxlIG5hbWVkICcrCmV4cGVjdGVkRmlsZW5hbWUrJzsgYWN0dWFsOiAnK21ldHJpY1BhdGguam9pbignLycpKyc7IHN0YWNrOiAnK3N0YWNrLnJlcGxhY2UoL1xuL2csJ1xuICAnKSk7fX07TWV0cmljUmVnaXN0cnkuYWRkRXZlbnRMaXN0ZW5lcignd2lsbC1yZWdpc3RlcicsZnVuY3Rpb24oZSl7Y29uc3QgbWV0cmljPWUudHlwZUluZm8uY29uc3RydWN0b3I7aWYoIShtZXRyaWMgaW5zdGFuY2VvZiBGdW5jdGlvbikpe3Rocm93IG5ldyBFcnJvcignTWV0cmljcyBtdXN0IGJlIGZ1bmN0aW9ucy4nKTt9CmlmKCFtZXRyaWMubmFtZS5lbmRzV2l0aCgnTWV0cmljJykmJiFtZXRyaWMubmFtZS5lbmRzV2l0aCgnTWV0cmljcycpKXt0aHJvdyBuZXcgRXJyb3IoJ01ldHJpYyBuYW1lcyBtdXN0IGVuZCB3aXRoICJNZXRyaWMiIG9yICJNZXRyaWNzIi4nKTt9CmlmKG1ldHJpYy5sZW5ndGg8Mil7dGhyb3cgbmV3IEVycm9yKCdNZXRyaWNzIHRha2UgYSBIaXN0b2dyYW1TZXQgYW5kIGEgTW9kZWwgYW5kICcrJ29wdGlvbmFsbHkgYW4gb3B0aW9ucyBkaWN0aW9uYXJ5LicpO30KTWV0cmljUmVnaXN0cnkuY2hlY2tGaWxlbmFtZShtZXRyaWMubmFtZSk7fSk7cmV0dXJue01ldHJpY1JlZ2lzdHJ5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGFjY2Vzc2liaWxpdHlNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgYnJvd3NlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnYnJvd3Nlcl9hY2Nlc3NpYmlsaXR5X2V2ZW50cycsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcik7YnJvd3NlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0LmRlc2NyaXB0aW9uPSdCcm93c2VyIGFjY2Vzc2liaWxpdHkgZXZlbnRzIHRpbWUnO2NvbnN0IHJlbmRlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgncmVuZGVyX2FjY2Vzc2liaWxpdHlfZXZlbnRzJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtyZW5kZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdC5kZXNjcmlwdGlvbj0nUmVuZGVyIGFjY2Vzc2liaWxpdHkgZXZlbnRzIHRpbWUnO2NvbnN0IHJlbmRlckFjY2Vzc2liaWxpdHlMb2NhdGlvbnNIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgncmVuZGVyX2FjY2Vzc2liaWxpdHlfbG9jYXRpb25zJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtyZW5kZXJBY2Nlc3NpYmlsaXR5TG9jYXRpb25zSGlzdC5kZXNjcmlwdGlvbj0nUmVuZGVyIGFjY2Vzc2liaWxpdHkgbG9jYXRpb25zIHRpbWUnO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtpZihjaHJvbWVIZWxwZXI9PT11bmRlZmluZWQpcmV0dXJuO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtjb25zdCBtYWluVGhyZWFkPXJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQ7aWYobWFpblRocmVhZD09PXVuZGVmaW5lZCljb250aW51ZTtmb3IoY29uc3Qgc2xpY2Ugb2YgbWFpblRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCEoc2xpY2UgaW5zdGFuY2VvZiB0ci5tb2RlbC5UaHJlYWRTbGljZSkpY29udGludWU7aWYoc2xpY2UudGl0bGU9PT0nUmVuZGVyQWNjZXNzaWJpbGl0eUltcGw6OlNlbmRQZW5kaW5nQWNjZXNzaWJpbGl0eUV2ZW50cycpe3JlbmRlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbix7ZXZlbnQ6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoc2xpY2UpfSk7fQppZihzbGljZS50aXRsZT09PSdSZW5kZXJBY2Nlc3NpYmlsaXR5SW1wbDo6U2VuZExvY2F0aW9uQ2hhbmdlcycpe3JlbmRlckFjY2Vzc2liaWxpdHlMb2NhdGlvbnNIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbix7ZXZlbnQ6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoc2xpY2UpfSk7fX19CmZvcihjb25zdCBicm93c2VySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLmJyb3dzZXJIZWxwZXJzKSl7Y29uc3QgbWFpblRocmVhZD1icm93c2VySGVscGVyLm1haW5UaHJlYWQ7aWYobWFpblRocmVhZD09PXVuZGVmaW5lZCljb250aW51ZTtmb3IoY29uc3Qgc2xpY2Ugb2YgbWFpblRocmVhZC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKHNsaWNlLnRpdGxlPT09J0Jyb3dzZXJBY2Nlc3NpYmlsaXR5TWFuYWdlcjo6T25BY2Nlc3NpYmlsaXR5RXZlbnRzJyl7YnJvd3NlckFjY2Vzc2liaWxpdHlFdmVudHNIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbix7ZXZlbnQ6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoc2xpY2UpfSk7fX19Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGJyb3dzZXJBY2Nlc3NpYmlsaXR5RXZlbnRzSGlzdCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0ocmVuZGVyQWNjZXNzaWJpbGl0eUV2ZW50c0hpc3QpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHJlbmRlckFjY2Vzc2liaWxpdHlMb2NhdGlvbnNIaXN0KTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoYWNjZXNzaWJpbGl0eU1ldHJpYyk7cmV0dXJue2FjY2Vzc2liaWxpdHlNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgTUVTU0FHRV9MT09QX0VWRU5UX05BTUU9J1N0YXJ0dXAuQnJvd3Nlck1lc3NhZ2VMb29wU3RhcnRUaW1lRnJvbU1haW5FbnRyeTMnO2NvbnN0IENPTlRFTlRfU1RBUlRfRVZFTlRfTkFNRT0nY29udGVudDo6U3RhcnQnO2NvbnN0IE5BVklHQVRJT05fRVZFTlRfTkFNRT0nTmF2aWdhdGlvbiBTdGFydFRvQ29tbWl0Jztjb25zdCBGSVJTVF9DT05URU5URlVMX1BBSU5UX0VWRU5UX05BTUU9J2ZpcnN0Q29udGVudGZ1bFBhaW50JztmdW5jdGlvbiBhbmRyb2lkU3RhcnR1cE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtsZXQgbWVzc2FnZUxvb3BTdGFydEV2ZW50cz1bXTtsZXQgbmF2aWdhdGlvbkV2ZW50cz1bXTtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIWNocm9tZUhlbHBlcilyZXR1cm47Zm9yKGNvbnN0IGhlbHBlciBvZiBjaHJvbWVIZWxwZXIuYnJvd3NlckhlbHBlcnMpe2Zvcihjb25zdCBldiBvZiBoZWxwZXIubWFpblRocmVhZC5hc3luY1NsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoZXYudGl0bGU9PT1NRVNTQUdFX0xPT1BfRVZFTlRfTkFNRSl7bWVzc2FnZUxvb3BTdGFydEV2ZW50cy5wdXNoKGV2KTt9ZWxzZSBpZihldi50aXRsZT09PU5BVklHQVRJT05fRVZFTlRfTkFNRSl7bmF2aWdhdGlvbkV2ZW50cy5wdXNoKGV2KTt9fX0KbGV0IGNvbnRlbnRTdGFydEV2ZW50cz1bXTtsZXQgZmlyc3RDb250ZW50ZnVsUGFpbnRFdmVudHM9W107Y29uc3QgcmVuZGVyZXJIZWxwZXJzPWNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnM7Y29uc3QgcGlkcz1PYmplY3Qua2V5cyhyZW5kZXJlckhlbHBlcnMpO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtpZighcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCljb250aW51ZTtmb3IoY29uc3QgZXYgb2YgcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLmNoaWxkRXZlbnRzKCkpe2lmKGV2LnRpdGxlPT09RklSU1RfQ09OVEVOVEZVTF9QQUlOVF9FVkVOVF9OQU1FKXtmaXJzdENvbnRlbnRmdWxQYWludEV2ZW50cy5wdXNoKGV2KTticmVhazt9ZWxzZSBpZihldi50aXRsZT09PUNPTlRFTlRfU1RBUlRfRVZFTlRfTkFNRSl7Y29udGVudFN0YXJ0RXZlbnRzLnB1c2goZXYpO319fQpsZXQgdG90YWxCcm93c2VyU3RhcnRzPW1lc3NhZ2VMb29wU3RhcnRFdmVudHMubGVuZ3RoO2xldCB0b3RhbENvbnRlbnRTdGFydEV2ZW50cz1jb250ZW50U3RhcnRFdmVudHMubGVuZ3RoO2xldCB0b3RhbEZjcEV2ZW50cz1maXJzdENvbnRlbnRmdWxQYWludEV2ZW50cy5sZW5ndGg7bGV0IHRvdGFsTmF2aWdhdGlvbnM9bmF2aWdhdGlvbkV2ZW50cy5sZW5ndGg7aWYodG90YWxGY3BFdmVudHMhPT10b3RhbEJyb3dzZXJTdGFydHN8fHRvdGFsTmF2aWdhdGlvbnMhPT10b3RhbEJyb3dzZXJTdGFydHN8fHRvdGFsQ29udGVudFN0YXJ0RXZlbnRzIT09dG90YWxCcm93c2VyU3RhcnRzfHx0b3RhbEJyb3dzZXJTdGFydHM9PT0wKXttZXNzYWdlTG9vcFN0YXJ0RXZlbnRzPVtdO2NvbnRlbnRTdGFydEV2ZW50cz1bXTtuYXZpZ2F0aW9uRXZlbnRzPVtdO2ZpcnN0Q29udGVudGZ1bFBhaW50RXZlbnRzPVtdO2Zvcihjb25zdCBwcm9jIG9mIE9iamVjdC52YWx1ZXMobW9kZWwucHJvY2Vzc2VzKSl7Zm9yKGNvbnN0IGV2IG9mIHByb2MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldi50aXRsZT09PU1FU1NBR0VfTE9PUF9FVkVOVF9OQU1FKXttZXNzYWdlTG9vcFN0YXJ0RXZlbnRzLnB1c2goZXYpO31lbHNlIGlmKGV2LnRpdGxlPT09TkFWSUdBVElPTl9FVkVOVF9OQU1FKXtuYXZpZ2F0aW9uRXZlbnRzLnB1c2goZXYpO31lbHNlIGlmKGV2LnRpdGxlPT09Q09OVEVOVF9TVEFSVF9FVkVOVF9OQU1FKXtjb250ZW50U3RhcnRFdmVudHMucHVzaChldik7fX0KZm9yKGNvbnN0IGV2IG9mIHByb2MuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldi50aXRsZT09PUZJUlNUX0NPTlRFTlRGVUxfUEFJTlRfRVZFTlRfTkFNRSl7Zmlyc3RDb250ZW50ZnVsUGFpbnRFdmVudHMucHVzaChldik7YnJlYWs7fX19CnRvdGFsQnJvd3NlclN0YXJ0cz1tZXNzYWdlTG9vcFN0YXJ0RXZlbnRzLmxlbmd0aDt0b3RhbENvbnRlbnRTdGFydEV2ZW50cz1jb250ZW50U3RhcnRFdmVudHMubGVuZ3RoO3RvdGFsTmF2aWdhdGlvbnM9bmF2aWdhdGlvbkV2ZW50cy5sZW5ndGg7dG90YWxGY3BFdmVudHM9Zmlyc3RDb250ZW50ZnVsUGFpbnRFdmVudHMubGVuZ3RoO30KZnVuY3Rpb24gb3JkZXJFdmVudHMoZXZlbnQxLGV2ZW50Mil7cmV0dXJuIGV2ZW50MS5zdGFydC1ldmVudDIuc3RhcnQ7fQptZXNzYWdlTG9vcFN0YXJ0RXZlbnRzLnNvcnQob3JkZXJFdmVudHMpO2NvbnRlbnRTdGFydEV2ZW50cy5zb3J0KG9yZGVyRXZlbnRzKTtuYXZpZ2F0aW9uRXZlbnRzLnNvcnQob3JkZXJFdmVudHMpO2ZpcnN0Q29udGVudGZ1bFBhaW50RXZlbnRzLnNvcnQob3JkZXJFdmVudHMpO2lmKHRvdGFsRmNwRXZlbnRzPHRvdGFsQnJvd3NlclN0YXJ0cyl7dGhyb3cgbmV3IEVycm9yKCdGb3VuZCBmZXdlciBGQ1AgZXZlbnRzICgnK3RvdGFsRmNwRXZlbnRzKycpIHRoYW4gYnJvd3NlciBzdGFydHMgKCcrdG90YWxCcm93c2VyU3RhcnRzKycpJyk7fQpjb25zdCBtZXNzYWdlTG9vcFN0YXJ0SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdtZXNzYWdlbG9vcF9zdGFydF90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdKTtjb25zdCBjb250ZW50U3RhcnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2V4cGVyaW1lbnRhbF9jb250ZW50X3N0YXJ0X3RpbWUnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10pO2NvbnN0IG5hdmlnYXRpb25TdGFydEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnZXhwZXJpbWVudGFsX25hdmlnYXRpb25fc3RhcnRfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSk7Y29uc3QgbmF2aWdhdGlvbkNvbW1pdEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnbmF2aWdhdGlvbl9jb21taXRfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSk7Y29uc3QgZmlyc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2ZpcnN0X2NvbnRlbnRmdWxfcGFpbnRfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSk7bGV0IGNvbnRlbnRJbmRleD0wO2xldCBuYXZJbmRleD0wO2xldCBmY3BJbmRleD0wO2ZvcihsZXQgbG9vcFN0YXJ0SW5kZXg9MDtsb29wU3RhcnRJbmRleDx0b3RhbEJyb3dzZXJTdGFydHM7KXtjb25zdCBzdGFydEV2ZW50PW1lc3NhZ2VMb29wU3RhcnRFdmVudHNbbG9vcFN0YXJ0SW5kZXhdO2lmKGZjcEluZGV4PT09dG90YWxGY3BFdmVudHMpe2JyZWFrO30KY29uc3QgY29udGVudFN0YXJ0RXZlbnQ9Y29udGVudEluZGV4PGNvbnRlbnRTdGFydEV2ZW50cy5sZW5ndGg/Y29udGVudFN0YXJ0RXZlbnRzW2NvbnRlbnRJbmRleF06bnVsbDtpZihjb250ZW50U3RhcnRFdmVudCYmY29udGVudFN0YXJ0RXZlbnQuc3RhcnQ8c3RhcnRFdmVudC5zdGFydCl7Y29udGVudEluZGV4Kys7Y29udGludWU7fQpjb25zdCBuYXZFdmVudD1uYXZJbmRleDxuYXZpZ2F0aW9uRXZlbnRzLmxlbmd0aD9uYXZpZ2F0aW9uRXZlbnRzW25hdkluZGV4XTpudWxsO2lmKG5hdkV2ZW50JiZuYXZFdmVudC5zdGFydDxzdGFydEV2ZW50LnN0YXJ0KXtuYXZJbmRleCsrO2NvbnRpbnVlO30KY29uc3QgZmNwRXZlbnQ9Zmlyc3RDb250ZW50ZnVsUGFpbnRFdmVudHNbZmNwSW5kZXhdO2lmKGZjcEV2ZW50LnN0YXJ0PHN0YXJ0RXZlbnQuc3RhcnQpe2ZjcEluZGV4Kys7Y29udGludWU7fQpsb29wU3RhcnRJbmRleCsrO2lmKGZjcEluZGV4PDIpe2NvbnRpbnVlO30KbWVzc2FnZUxvb3BTdGFydEhpc3RvZ3JhbS5hZGRTYW1wbGUoc3RhcnRFdmVudC5kdXJhdGlvbix7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzdGFydEV2ZW50XSl9KTtpZihjb250ZW50U3RhcnRFdmVudCl7Y29udGVudFN0YXJ0SGlzdG9ncmFtLmFkZFNhbXBsZShjb250ZW50U3RhcnRFdmVudC5zdGFydC1zdGFydEV2ZW50LnN0YXJ0LHtldmVudHM6bmV3IHRyLnYuZC5SZWxhdGVkRXZlbnRTZXQoW3N0YXJ0RXZlbnQsY29udGVudFN0YXJ0RXZlbnRdKX0pO30KaWYobmF2RXZlbnQpe25hdmlnYXRpb25TdGFydEhpc3RvZ3JhbS5hZGRTYW1wbGUobmF2RXZlbnQuc3RhcnQtc3RhcnRFdmVudC5zdGFydCx7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzdGFydEV2ZW50LG5hdkV2ZW50XSl9KTtuYXZpZ2F0aW9uQ29tbWl0SGlzdG9ncmFtLmFkZFNhbXBsZShuYXZFdmVudC5lbmQtc3RhcnRFdmVudC5zdGFydCx7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzdGFydEV2ZW50LG5hdkV2ZW50XSl9KTt9CmZpcnN0Q29udGVudGZ1bFBhaW50SGlzdG9ncmFtLmFkZFNhbXBsZShmY3BFdmVudC5lbmQtc3RhcnRFdmVudC5zdGFydCx7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzdGFydEV2ZW50LGZjcEV2ZW50XSl9KTt9fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGFuZHJvaWRTdGFydHVwTWV0cmljKTtyZXR1cm57YW5kcm9pZFN0YXJ0dXBNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgTUFYX0lOUFVUX0VWRU5UX1RPX1NUQVJUVVBfREVMQVlfSU5fTVM9MjAwMDtjb25zdCBNSU5fRFJBV19ERUxBWV9JTl9NUz04MDtjb25zdCBNQVhfRFJBV19ERUxBWV9JTl9NUz0yMDAwO2Z1bmN0aW9uIGZpbmRQcm9jZXNzKHByb2Nlc3NOYW1lLG1vZGVsKXtmb3IoY29uc3QgcGlkIGluIG1vZGVsLnByb2Nlc3Nlcyl7Y29uc3QgcHJvY2Vzcz1tb2RlbC5wcm9jZXNzZXNbcGlkXTtpZihwcm9jZXNzLm5hbWU9PT1wcm9jZXNzTmFtZSl7cmV0dXJuIHByb2Nlc3M7fX0KcmV0dXJuIHVuZGVmaW5lZDt9CmZ1bmN0aW9uIGZpbmRUaHJlYWRzKHByb2Nlc3MsdGhyZWFkUHJlZml4KXtpZihwcm9jZXNzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgdGhyZWFkcz1bXTtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO2lmKHRocmVhZC5uYW1lLnN0YXJ0c1dpdGgodGhyZWFkUHJlZml4KSl7dGhyZWFkcy5wdXNoKHRocmVhZCk7fX0KcmV0dXJuIHRocmVhZHM7fQpmdW5jdGlvbiBmaW5kVUlUaHJlYWQocHJvY2Vzcyl7aWYocHJvY2Vzcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHRocmVhZHM9ZmluZFRocmVhZHMocHJvY2VzcywnVUkgVGhyZWFkJyk7aWYodGhyZWFkcyE9PXVuZGVmaW5lZCYmdGhyZWFkcy5sZW5ndGg9PT0xKXtyZXR1cm4gdGhyZWFkc1swXTt9CnJldHVybiBwcm9jZXNzLnRocmVhZHNbcHJvY2Vzcy5waWRdO30KZnVuY3Rpb24gZmluZExhdW5jaFNsaWNlcyhtb2RlbCl7Y29uc3QgbGF1bmNoZXM9W107Y29uc3QgYmluZGVycz1maW5kVGhyZWFkcyhmaW5kUHJvY2Vzcygnc3lzdGVtX3NlcnZlcicsbW9kZWwpLCdCaW5kZXInKTtmb3IoY29uc3QgYmluZGVySWQgaW4gYmluZGVycyl7Y29uc3QgYmluZGVyPWJpbmRlcnNbYmluZGVySWRdO2Zvcihjb25zdCBzbGljZUlkIGluIGJpbmRlci5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtjb25zdCBzbGljZT1iaW5kZXIuYXN5bmNTbGljZUdyb3VwLnNsaWNlc1tzbGljZUlkXTtpZihzbGljZS50aXRsZS5zdGFydHNXaXRoKCdsYXVuY2hpbmc6Jykpe2xhdW5jaGVzLnB1c2goc2xpY2UpO319fQpyZXR1cm4gbGF1bmNoZXM7fQpmdW5jdGlvbiBmaW5kRHJhd1NsaWNlKGFwcE5hbWUsc3RhcnROb3RCZWZvcmUsbW9kZWwpe2xldCBkcmF3U2xpY2U9dW5kZWZpbmVkO2NvbnN0IHRocmVhZD1maW5kVUlUaHJlYWQoZmluZFByb2Nlc3MoYXBwTmFtZSxtb2RlbCkpO2lmKHRocmVhZD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2Zvcihjb25zdCBzbGljZUlkIGluIHRocmVhZC5zbGljZUdyb3VwLnNsaWNlcyl7Y29uc3Qgc2xpY2U9dGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzW3NsaWNlSWRdO2lmKHNsaWNlLnN0YXJ0PHN0YXJ0Tm90QmVmb3JlK01JTl9EUkFXX0RFTEFZX0lOX01TfHxzbGljZS5zdGFydD5zdGFydE5vdEJlZm9yZStNQVhfRFJBV19ERUxBWV9JTl9NUyljb250aW51ZTtpZihzbGljZS50aXRsZSE9PSdkcmF3Jyljb250aW51ZTtpZihkcmF3U2xpY2U9PT11bmRlZmluZWR8fHNsaWNlLnN0YXJ0PGRyYXdTbGljZS5zdGFydCl7ZHJhd1NsaWNlPXNsaWNlO319CnJldHVybiBkcmF3U2xpY2U7fQpmdW5jdGlvbiBmaW5kSW5wdXRFdmVudFNsaWNlKGVuZE5vdEFmdGVyLG1vZGVsKXtjb25zdCBlbmROb3RCZWZvcmU9ZW5kTm90QWZ0ZXItTUFYX0lOUFVUX0VWRU5UX1RPX1NUQVJUVVBfREVMQVlfSU5fTVM7bGV0IGlucHV0U2xpY2U9dW5kZWZpbmVkO2NvbnN0IHN5c3RlbVVpPWZpbmRVSVRocmVhZChmaW5kUHJvY2VzcygnY29tLmFuZHJvaWQuc3lzdGVtdWknLG1vZGVsKSk7aWYoc3lzdGVtVWk9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtmb3IoY29uc3Qgc2xpY2VJZCBpbiBzeXN0ZW1VaS5hc3luY1NsaWNlR3JvdXAuc2xpY2VzKXtjb25zdCBzbGljZT1zeXN0ZW1VaS5hc3luY1NsaWNlR3JvdXAuc2xpY2VzW3NsaWNlSWRdO2lmKHNsaWNlLmVuZD5lbmROb3RBZnRlcnx8c2xpY2UuZW5kPGVuZE5vdEJlZm9yZSljb250aW51ZTtpZihzbGljZS50aXRsZSE9PSdkZWxpdmVySW5wdXRFdmVudCcpY29udGludWU7aWYoaW5wdXRTbGljZT09PXVuZGVmaW5lZHx8c2xpY2UuZW5kPmlucHV0U2xpY2UuZW5kKXtpbnB1dFNsaWNlPXNsaWNlO319CnJldHVybiBpbnB1dFNsaWNlO30KZnVuY3Rpb24gY29tcHV0ZVN0YXJ0dXBUaW1lSW5NcyhhcHBOYW1lLGxhdW5jaFNsaWNlLG1vZGVsKXtsZXQgc3RhcnR1cFN0YXJ0PWxhdW5jaFNsaWNlLnN0YXJ0O2xldCBzdGFydHVwRW5kPWxhdW5jaFNsaWNlLmVuZDtjb25zdCBkcmF3U2xpY2U9ZmluZERyYXdTbGljZShhcHBOYW1lLGxhdW5jaFNsaWNlLmVuZCxtb2RlbCk7aWYoZHJhd1NsaWNlIT09dW5kZWZpbmVkKXtzdGFydHVwRW5kPWRyYXdTbGljZS5lbmQ7fQpjb25zdCBpbnB1dFNsaWNlPWZpbmRJbnB1dEV2ZW50U2xpY2UobGF1bmNoU2xpY2Uuc3RhcnQsbW9kZWwpO2lmKGlucHV0U2xpY2UhPT11bmRlZmluZWQpe3N0YXJ0dXBTdGFydD1pbnB1dFNsaWNlLnN0YXJ0O30KcmV0dXJuIHN0YXJ0dXBFbmQtc3RhcnR1cFN0YXJ0O30KZnVuY3Rpb24gbWVhc3VyZVN0YXJ0dXAoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgbGF1bmNoZXM9ZmluZExhdW5jaFNsaWNlcyhtb2RlbCk7Zm9yKGNvbnN0IHNsaWNlSWQgaW4gbGF1bmNoZXMpe2NvbnN0IGxhdW5jaFNsaWNlPWxhdW5jaGVzW3NsaWNlSWRdO2NvbnN0IGFwcE5hbWU9bGF1bmNoU2xpY2UudGl0bGUuc3BsaXQoJzogJylbMV07Y29uc3Qgc3RhcnR1cE1zPWNvbXB1dGVTdGFydHVwVGltZUluTXMoYXBwTmFtZSxsYXVuY2hTbGljZSxtb2RlbCk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYGFuZHJvaWQ6c3lzdHJhY2U6c3RhcnR1cDoke2FwcE5hbWV9YCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHN0YXJ0dXBNcyk7fX0KZnVuY3Rpb24gbWVhc3VyZVRocmVhZFN0YXRlcyhoaXN0b2dyYW1zLG1vZGVsLHJhbmdlT2ZJbnRlcmVzdCl7Zm9yKGNvbnN0IHBpZCBpbiBtb2RlbC5wcm9jZXNzZXMpe2NvbnN0IHByb2Nlc3M9bW9kZWwucHJvY2Vzc2VzW3BpZF07aWYocHJvY2Vzcy5uYW1lPT09dW5kZWZpbmVkKWNvbnRpbnVlO2xldCBoYXNTbGljZXM9ZmFsc2U7bGV0IHRpbWVSdW5uaW5nPTA7bGV0IHRpbWVSdW5uYWJsZT0wO2xldCB0aW1lU2xlZXBpbmc9MDtsZXQgdGltZVVuaW50ZXJydXB0aWJsZT0wO2xldCB0aW1lQmxvY2tJTz0wO2xldCB0aW1lVW5rbm93bj0wO2Zvcihjb25zdCB0aWQgaW4gcHJvY2Vzcy50aHJlYWRzKXtjb25zdCB0aHJlYWQ9cHJvY2Vzcy50aHJlYWRzW3RpZF07aWYodGhyZWFkLnRpbWVTbGljZXM9PT11bmRlZmluZWQpY29udGludWU7Zm9yKGNvbnN0IHNsaWNlSWQgaW4gdGhyZWFkLnRpbWVTbGljZXMpe2NvbnN0IHNsaWNlPXRocmVhZC50aW1lU2xpY2VzW3NsaWNlSWRdO2NvbnN0IHNsaWNlUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCk7Y29uc3QgaW50ZXJzZWN0aW9uPXJhbmdlT2ZJbnRlcmVzdC5maW5kSW50ZXJzZWN0aW9uKHNsaWNlUmFuZ2UpO2NvbnN0IGR1cmF0aW9uPWludGVyc2VjdGlvbi5kdXJhdGlvbjtpZihkdXJhdGlvbj09PTApY29udGludWU7aGFzU2xpY2VzPXRydWU7aWYoc2xpY2UudGl0bGU9PT0nUnVubmluZycpe3RpbWVSdW5uaW5nKz1kdXJhdGlvbjt9ZWxzZSBpZihzbGljZS50aXRsZT09PSdSdW5uYWJsZScpe3RpbWVSdW5uYWJsZSs9ZHVyYXRpb247fWVsc2UgaWYoc2xpY2UudGl0bGU9PT0nU2xlZXBpbmcnKXt0aW1lU2xlZXBpbmcrPWR1cmF0aW9uO31lbHNlIGlmKHNsaWNlLnRpdGxlLnN0YXJ0c1dpdGgoJ1VuaW50ZXJydXB0aWJsZScpKXt0aW1lVW5pbnRlcnJ1cHRpYmxlKz1kdXJhdGlvbjtpZihzbGljZS50aXRsZS5pbmNsdWRlcygnQmxvY2sgSS9PJykpdGltZUJsb2NrSU8rPWR1cmF0aW9uO31lbHNle3RpbWVVbmtub3duKz1kdXJhdGlvbjt9fX0KaWYoaGFzU2xpY2VzKXtjb25zdCB3YWxsPXJhbmdlT2ZJbnRlcmVzdC5tYXgtcmFuZ2VPZkludGVyZXN0Lm1pbjtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgYW5kcm9pZDpzeXN0cmFjZTp0aHJlYWR0aW1lOiR7cHJvY2Vzcy5uYW1lfTpydW5uaW5nYCx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlLHRpbWVSdW5uaW5nL3dhbGwpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBhbmRyb2lkOnN5c3RyYWNlOnRocmVhZHRpbWU6JHtwcm9jZXNzLm5hbWV9OnJ1bm5hYmxlYCx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlLHRpbWVSdW5uYWJsZS93YWxsKTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgYW5kcm9pZDpzeXN0cmFjZTp0aHJlYWR0aW1lOiR7cHJvY2Vzcy5uYW1lfTpzbGVlcGluZ2AsdHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZSx0aW1lU2xlZXBpbmcvd2FsbCk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYGFuZHJvaWQ6c3lzdHJhY2U6dGhyZWFkdGltZToke3Byb2Nlc3MubmFtZX06YmxvY2tpb2AsdHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZSx0aW1lQmxvY2tJTy93YWxsKTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgYW5kcm9pZDpzeXN0cmFjZTp0aHJlYWR0aW1lOiR7cHJvY2Vzcy5uYW1lfTp1bmludGVycnVwdGlibGVgLHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2UsdGltZVVuaW50ZXJydXB0aWJsZS93YWxsKTtpZih0aW1lVW5rbm93bj4wKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgYW5kcm9pZDpzeXN0cmFjZTp0aHJlYWR0aW1lOiR7cHJvY2Vzcy5uYW1lfTp1bmtub3duYCx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlLHRpbWVVbmtub3duL3dhbGwpO319fX0KZnVuY3Rpb24gYW5kcm9pZFN5c3RyYWNlTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0aW9ucyl7bGV0IHJhbmdlT2ZJbnRlcmVzdD1tb2RlbC5ib3VuZHM7aWYob3B0aW9ucyE9PXVuZGVmaW5lZCYmb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3QhPT11bmRlZmluZWQpe3JhbmdlT2ZJbnRlcmVzdD1vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDt9Cm1lYXN1cmVTdGFydHVwKGhpc3RvZ3JhbXMsbW9kZWwpO21lYXN1cmVUaHJlYWRTdGF0ZXMoaGlzdG9ncmFtcyxtb2RlbCxyYW5nZU9mSW50ZXJlc3QpO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihhbmRyb2lkU3lzdHJhY2VNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWV9KTtyZXR1cm57YW5kcm9pZFN5c3RyYWNlTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iLm1hdGgnLGZ1bmN0aW9uKCl7Y29uc3QgUEVSQ0VOVElMRV9QUkVDSVNJT049MWUtNztmdW5jdGlvbiBQaWVjZXdpc2VMaW5lYXJGdW5jdGlvbigpe3RoaXMucGllY2VzPVtdO30KUGllY2V3aXNlTGluZWFyRnVuY3Rpb24ucHJvdG90eXBlPXtwdXNoKHgxLHkxLHgyLHkyKXtpZih4MT49eDIpe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBzZWdtZW50Jyk7fQppZih0aGlzLnBpZWNlcy5sZW5ndGg+MCYmdGhpcy5waWVjZXNbdGhpcy5waWVjZXMubGVuZ3RoLTFdLngyPngxKXt0aHJvdyBuZXcgRXJyb3IoJ1BvdGVudGlhbGx5IG92ZXJsYXBwaW5nIHNlZ21lbnRzJyk7fQppZih4MTx4Mil7dGhpcy5waWVjZXMucHVzaChuZXcgUGllY2UoeDEseTEseDIseTIpKTt9fSxwYXJ0QmVsb3coeSl7cmV0dXJuIHRoaXMucGllY2VzLnJlZHVjZSgoYWNjLHApPT4oYWNjK3AucGFydEJlbG93KHkpKSwwKTt9LGdldCBtaW4oKXtyZXR1cm4gdGhpcy5waWVjZXMucmVkdWNlKChhY2MscCk9Pk1hdGgubWluKGFjYyxwLm1pbiksSW5maW5pdHkpO30sZ2V0IG1heCgpe3JldHVybiB0aGlzLnBpZWNlcy5yZWR1Y2UoKGFjYyxwKT0+TWF0aC5tYXgoYWNjLHAubWF4KSwtSW5maW5pdHkpO30sZ2V0IGF2ZXJhZ2UoKXtsZXQgd2VpZ2h0ZWRTdW09MDtsZXQgdG90YWxXZWlnaHQ9MDt0aGlzLnBpZWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHBpZWNlKXt3ZWlnaHRlZFN1bSs9cGllY2Uud2lkdGgqcGllY2UuYXZlcmFnZTt0b3RhbFdlaWdodCs9cGllY2Uud2lkdGg7fSk7aWYodG90YWxXZWlnaHQ9PT0wKXJldHVybiAwO3JldHVybiB3ZWlnaHRlZFN1bS90b3RhbFdlaWdodDt9LHBlcmNlbnRpbGUocGVyY2VudCl7aWYoIShwZXJjZW50Pj0wJiZwZXJjZW50PD0xKSl7dGhyb3cgbmV3IEVycm9yKCdwZXJjZW50IG11c3QgYmUgWzAsMV0nKTt9CmxldCBsb3dlcj10aGlzLm1pbjtsZXQgdXBwZXI9dGhpcy5tYXg7Y29uc3QgdG90YWw9dGhpcy5wYXJ0QmVsb3codXBwZXIpO2lmKHRvdGFsPT09MClyZXR1cm4gMDt3aGlsZSh1cHBlci1sb3dlcj5QRVJDRU5USUxFX1BSRUNJU0lPTil7Y29uc3QgbWlkZGxlPShsb3dlcit1cHBlcikvMjtjb25zdCBiZWxvdz10aGlzLnBhcnRCZWxvdyhtaWRkbGUpO2lmKGJlbG93L3RvdGFsPHBlcmNlbnQpe2xvd2VyPW1pZGRsZTt9ZWxzZXt1cHBlcj1taWRkbGU7fX0KcmV0dXJuKGxvd2VyK3VwcGVyKS8yO319O2Z1bmN0aW9uIFBpZWNlKHgxLHkxLHgyLHkyKXt0aGlzLngxPXgxO3RoaXMueTE9eTE7dGhpcy54Mj14Mjt0aGlzLnkyPXkyO30KUGllY2UucHJvdG90eXBlPXtwYXJ0QmVsb3coeSl7Y29uc3Qgd2lkdGg9dGhpcy53aWR0aDtpZih3aWR0aD09PTApcmV0dXJuIDA7Y29uc3QgbWluWT10aGlzLm1pbjtjb25zdCBtYXhZPXRoaXMubWF4O2lmKHk+PW1heFkpcmV0dXJuIHdpZHRoO2lmKHk8bWluWSlyZXR1cm4gMDtyZXR1cm4oeS1taW5ZKS8obWF4WS1taW5ZKSp3aWR0aDt9LGdldCBtaW4oKXtyZXR1cm4gTWF0aC5taW4odGhpcy55MSx0aGlzLnkyKTt9LGdldCBtYXgoKXtyZXR1cm4gTWF0aC5tYXgodGhpcy55MSx0aGlzLnkyKTt9LGdldCBhdmVyYWdlKCl7cmV0dXJuKHRoaXMueTErdGhpcy55MikvMjt9LGdldCB3aWR0aCgpe3JldHVybiB0aGlzLngyLXRoaXMueDE7fX07cmV0dXJue1BpZWNld2lzZUxpbmVhckZ1bmN0aW9uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnY4LnV0aWxzJyxmdW5jdGlvbigpe2NvbnN0IElETEVfVEFTS19FVkVOVD0nU2luZ2xlVGhyZWFkSWRsZVRhc2tSdW5uZXI6OlJ1blRhc2snO2NvbnN0IFY4X0VYRUNVVEU9J1Y4LkV4ZWN1dGUnO2NvbnN0IEdDX0VWRU5UX1BSRUZJWD0nVjguR0MnO2NvbnN0IEZVTExfR0NfRVZFTlQ9J1Y4LkdDQ29tcGFjdG9yJztjb25zdCBMT1dfTUVNT1JZX0VWRU5UPSdWOC5HQ0xvd01lbW9yeU5vdGlmaWNhdGlvbic7Y29uc3QgTUFKT1JfR0NfRVZFTlQ9J01ham9yR0MnO2NvbnN0IE1JTk9SX0dDX0VWRU5UPSdNaW5vckdDJztjb25zdCBUT1BfR0NfRVZFTlRTPXsnVjguR0NDb21wYWN0b3InOid2OC1nYy1mdWxsLW1hcmstY29tcGFjdG9yJywnVjguR0NGaW5hbGl6ZU1DJzondjgtZ2MtbGF0ZW5jeS1tYXJrLWNvbXBhY3RvcicsJ1Y4LkdDRmluYWxpemVNQ1JlZHVjZU1lbW9yeSc6J3Y4LWdjLW1lbW9yeS1tYXJrLWNvbXBhY3RvcicsJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nJzondjgtZ2MtaW5jcmVtZW50YWwtc3RlcCcsJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nRmluYWxpemUnOid2OC1nYy1pbmNyZW1lbnRhbC1maW5hbGl6ZScsJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nU3RhcnQnOid2OC1nYy1pbmNyZW1lbnRhbC1zdGFydCcsJ1Y4LkdDUGhhbnRvbUhhbmRsZVByb2Nlc3NpbmdDYWxsYmFjayc6J3Y4LWdjLXBoYW50b20taGFuZGxlLWNhbGxiYWNrJywnVjguR0NTY2F2ZW5nZXInOid2OC1nYy1zY2F2ZW5nZXInfTtjb25zdCBNQVJLX0NPTVBBQ1RPUl9FVkVOVFM9bmV3IFNldChbJ1Y4LkdDQ29tcGFjdG9yJywnVjguR0NGaW5hbGl6ZU1DJywnVjguR0NGaW5hbGl6ZU1DUmVkdWNlTWVtb3J5JywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmcnLCdWOC5HQ0luY3JlbWVudGFsTWFya2luZ0ZpbmFsaXplJywnVjguR0NJbmNyZW1lbnRhbE1hcmtpbmdTdGFydCcsJ1Y4LkdDUGhhbnRvbUhhbmRsZVByb2Nlc3NpbmdDYWxsYmFjayddKTtjb25zdCBMT1dfTUVNT1JZX01BUktfQ09NUEFDVE9SPSd2OC1nYy1sb3ctbWVtb3J5LW1hcmstY29tcGFjdG9yJztmdW5jdGlvbiBmaW5kUGFyZW50KGV2ZW50LHByZWRpY2F0ZSl7bGV0IHBhcmVudD1ldmVudC5wYXJlbnRTbGljZTt3aGlsZShwYXJlbnQpe2lmKHByZWRpY2F0ZShwYXJlbnQpKXtyZXR1cm4gcGFyZW50O30KcGFyZW50PXBhcmVudC5wYXJlbnRTbGljZTt9CnJldHVybiBudWxsO30KZnVuY3Rpb24gaXNJZGxlVGFzayhldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09SURMRV9UQVNLX0VWRU5UO30KZnVuY3Rpb24gaXNMb3dNZW1vcnlFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09TE9XX01FTU9SWV9FVkVOVDt9CmZ1bmN0aW9uIGlzVjhFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlLnN0YXJ0c1dpdGgoJ1Y4LicpO30KZnVuY3Rpb24gaXNWOEV4ZWN1dGVFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09VjhfRVhFQ1VURTt9CmZ1bmN0aW9uIGlzVG9wVjhFeGVjdXRlRXZlbnQoZXZlbnQpe3JldHVybiBpc1Y4RXhlY3V0ZUV2ZW50KGV2ZW50KSYmZmluZFBhcmVudChpc1Y4RXhlY3V0ZUV2ZW50KT09PW51bGw7fQpmdW5jdGlvbiBpc0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZSYmZXZlbnQudGl0bGUuc3RhcnRzV2l0aChHQ19FVkVOVF9QUkVGSVgpJiZldmVudC50aXRsZSE9PUxPV19NRU1PUllfRVZFTlQ7fQpmdW5jdGlvbiBpc1RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZSBpbiBUT1BfR0NfRVZFTlRTO30KZnVuY3Rpb24gaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gZmluZFBhcmVudChldmVudCxpc0xvd01lbW9yeUV2ZW50KSE9PW51bGw7fQpmdW5jdGlvbiBpc1N1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpe3JldHVybiBpc0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpJiZldmVudC5wYXJlbnRTbGljZSYmKGlzVG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudC5wYXJlbnRTbGljZSl8fGV2ZW50LnBhcmVudFNsaWNlLnRpdGxlPT09TUFKT1JfR0NfRVZFTlR8fGV2ZW50LnBhcmVudFNsaWNlLnRpdGxlPT09TUlOT1JfR0NfRVZFTlQpO30KZnVuY3Rpb24gaXNOb3RGb3JjZWRUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gdHIubWV0cmljcy52OC51dGlscy5pc1RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpJiYhdHIubWV0cmljcy52OC51dGlscy5pc0ZvcmNlZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNOb3RGb3JjZWRTdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gdHIubWV0cmljcy52OC51dGlscy5pc1N1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpJiYhdHIubWV0cmljcy52OC51dGlscy5pc0ZvcmNlZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNGdWxsTWFya0NvbXBhY3RvckV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nVjguR0NDb21wYWN0b3InO30KZnVuY3Rpb24gaXNNYXJrQ29tcGFjdG9yU3VtbWFyeUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nVjguR0NNYXJrQ29tcGFjdG9yU3VtbWFyeSc7fQpmdW5jdGlvbiBpc01hcmtDb21wYWN0b3JNYXJraW5nU3VtbWFyeUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT0nVjguR0NNYXJrQ29tcGFjdG9yTWFya2luZ1N1bW1hcnknO30KZnVuY3Rpb24gaXNJbmNyZW1lbnRhbE1hcmtpbmdFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlLnN0YXJ0c1dpdGgoJ1Y4LkdDSW5jcmVtZW50YWxNYXJraW5nJyk7fQpmdW5jdGlvbiBpc0xhdGVuY3lNYXJrQ29tcGFjdG9yRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PSdWOC5HQ0ZpbmFsaXplTUMnO30KZnVuY3Rpb24gaXNNZW1vcnlNYXJrQ29tcGFjdG9yRXZlbnQoZXZlbnQpe3JldHVybiBldmVudC50aXRsZT09PSdWOC5HQ0ZpbmFsaXplTUNSZWR1Y2VNZW1vcnknO30KZnVuY3Rpb24gaXNTY2F2ZW5nZXJFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09J1Y4LkdDU2NhdmVuZ2VyJzt9CmZ1bmN0aW9uIGlzQ29tcGlsZU9wdGltaXplUkNTQ2F0ZWdvcnkobmFtZSl7cmV0dXJuIG5hbWU9PT0nT3B0aW1pemUnO30KZnVuY3Rpb24gaXNDb21waWxlVW5vcHRpbWl6ZVJDU0NhdGVnb3J5KG5hbWUpe3JldHVybiBuYW1lPT09J0NvbXBpbGUnO30KZnVuY3Rpb24gaXNDb21waWxlUGFyc2VSQ1NDYXRlZ29yeShuYW1lKXtyZXR1cm4gbmFtZT09PSdQYXJzZSc7fQpmdW5jdGlvbiBpc0NvbXBpbGVSQ1NDYXRlZ29yeShuYW1lKXtyZXR1cm4gbmFtZT09PSdDb21waWxlJ3x8bmFtZT09PSdPcHRpbWl6ZSd8fG5hbWU9PT0nUGFyc2UnO30KZnVuY3Rpb24gaXNWOFJDU0V2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQgaW5zdGFuY2VvZiB0ci5lLnY4LlY4VGhyZWFkU2xpY2U7fQpmdW5jdGlvbiBpc01hcmtDb21wYWN0b3JFdmVudChldmVudCl7cmV0dXJuIE1BUktfQ09NUEFDVE9SX0VWRU5UUy5oYXMoZXZlbnQudGl0bGUpO30KZnVuY3Rpb24gaXNOb3RGb3JjZWRNYXJrQ29tcGFjdG9yRXZlbnQoZXZlbnQpe3JldHVybiFpc0ZvcmNlZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpJiZpc01hcmtDb21wYWN0b3JFdmVudChldmVudCk7fQpmdW5jdGlvbiBmb3JjZWRHQ0V2ZW50TmFtZSgpe3JldHVybiBMT1dfTUVNT1JZX0VWRU5UO30KZnVuY3Rpb24gdG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWUoZXZlbnQpe2lmKGV2ZW50LnRpdGxlPT09RlVMTF9HQ19FVkVOVCl7aWYoZmluZFBhcmVudChldmVudCxpc0xvd01lbW9yeUV2ZW50KSl7cmV0dXJuIExPV19NRU1PUllfTUFSS19DT01QQUNUT1I7fX0KcmV0dXJuIFRPUF9HQ19FVkVOVFNbZXZlbnQudGl0bGVdO30KZnVuY3Rpb24gdG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWVzKCl7cmV0dXJuIE9iamVjdC52YWx1ZXMoVE9QX0dDX0VWRU5UUyk7fQpmdW5jdGlvbiBzdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZShldmVudCl7Y29uc3QgdG9wRXZlbnQ9ZmluZFBhcmVudChldmVudCxpc1RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQpO2NvbnN0IHByZWZpeD10b3BFdmVudD90b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSh0b3BFdmVudCk6J3Vua25vd24nO2NvbnN0IG5hbWU9ZXZlbnQudGl0bGUucmVwbGFjZSgnVjguR0NfTUNfJywnJykucmVwbGFjZSgnVjguR0NfU0NBVkVOR0VSXycsJycpLnJlcGxhY2UoJ1Y4LkdDXycsJycpLnJlcGxhY2UoL18vZywnLScpLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHByZWZpeCsnLScrbmFtZTt9CmZ1bmN0aW9uIGpzRXhlY3V0aW9uVGhyZWFkcyhtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2xldCB0aHJlYWRzPVtdO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiBPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKXtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSljb250aW51ZTt0aHJlYWRzLnB1c2gocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCk7dGhyZWFkcz10aHJlYWRzLmNvbmNhdChyZW5kZXJlckhlbHBlci5kZWRpY2F0ZWRXb3JrZXJUaHJlYWRzKTt0aHJlYWRzPXRocmVhZHMuY29uY2F0KHJlbmRlcmVySGVscGVyLmZvcmVncm91bmRXb3JrZXJUaHJlYWRzKTt9CnJldHVybiB0aHJlYWRzO30KZnVuY3Rpb24gZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGZpbHRlckNhbGxiYWNrLGdyb3VwQ2FsbGJhY2sscHJvY2Vzc0NhbGxiYWNrLGdyb3Vwcyl7Y29uc3QgZ3JvdXBUb0V2ZW50cz17fTtpZihncm91cHMpe2Zvcihjb25zdCBncm91cCBvZiBncm91cHMpe2dyb3VwVG9FdmVudHNbZ3JvdXBdPVtdO319CmNvbnN0IHRocmVhZHM9anNFeGVjdXRpb25UaHJlYWRzKG1vZGVsKTtmb3IoY29uc3QgdGhyZWFkIG9mIHRocmVhZHMpe2Zvcihjb25zdCBldmVudCBvZiB0aHJlYWQuc2xpY2VHcm91cC5jaGlsZEV2ZW50cygpKXtpZighZmlsdGVyQ2FsbGJhY2soZXZlbnQpKWNvbnRpbnVlO2NvbnN0IGdyb3VwPWdyb3VwQ2FsbGJhY2soZXZlbnQpO2lmKGdyb3VwcyYmIShncm91cCBpbiBncm91cFRvRXZlbnRzKSl7Y29udGludWU7fQpncm91cFRvRXZlbnRzW2dyb3VwXT1ncm91cFRvRXZlbnRzW2dyb3VwXXx8W107Z3JvdXBUb0V2ZW50c1tncm91cF0ucHVzaChldmVudCk7fX0KZm9yKGNvbnN0W2dyb3VwLGV2ZW50c11vZiBPYmplY3QuZW50cmllcyhncm91cFRvRXZlbnRzKSl7cHJvY2Vzc0NhbGxiYWNrKGdyb3VwLGV2ZW50cyk7fX0KZnVuY3Rpb24gZmlsdGVyRXZlbnRzKG1vZGVsLGZpbHRlckNhbGxiYWNrKXtjb25zdCB0aHJlYWRzPWpzRXhlY3V0aW9uVGhyZWFkcyhtb2RlbCk7Y29uc3QgZXZlbnRzPVtdO2Zvcihjb25zdCB0aHJlYWQgb2YgdGhyZWFkcyl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRocmVhZC5zbGljZUdyb3VwLmNoaWxkRXZlbnRzKCkpe2lmKCFmaWx0ZXJDYWxsYmFjayhldmVudCkpY29udGludWU7ZXZlbnRzLnB1c2goZXZlbnQpO319CnJldHVybiBldmVudHM7fQpmdW5jdGlvbiB1bmlvbk9mSW50ZXJ2YWxzKGludGVydmFscyl7aWYoaW50ZXJ2YWxzLmxlbmd0aD09PTApcmV0dXJuW107cmV0dXJuIHRyLmIubWF0aC5tZXJnZVJhbmdlcyhpbnRlcnZhbHMubWFwKHg9PntyZXR1cm57bWluOnguc3RhcnQsbWF4OnguZW5kfTt9KSwxZS02LGZ1bmN0aW9uKHJhbmdlcyl7cmV0dXJue3N0YXJ0OnJhbmdlcy5yZWR1Y2UoKGFjYyx4KT0+TWF0aC5taW4oYWNjLHgubWluKSxyYW5nZXNbMF0ubWluKSxlbmQ6cmFuZ2VzLnJlZHVjZSgoYWNjLHgpPT5NYXRoLm1heChhY2MseC5tYXgpLHJhbmdlc1swXS5tYXgpfTt9KTt9CmZ1bmN0aW9uIGhhc1Y4U3RhdHMoZ2xvYmFsTWVtb3J5RHVtcCl7bGV0IHY4c3RhdHM9dW5kZWZpbmVkO2dsb2JhbE1lbW9yeUR1bXAuaXRlcmF0ZUNvbnRhaW5lckR1bXBzKGZ1bmN0aW9uKGR1bXApe3Y4c3RhdHM9djhzdGF0c3x8ZHVtcC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSgndjgnKTt9KTtyZXR1cm4hIXY4c3RhdHM7fQpmdW5jdGlvbiByYW5nZUZvck1lbW9yeUR1bXBzKG1vZGVsKXtjb25zdCBzdGFydE9mRmlyc3REdW1wV2l0aFY4PW1vZGVsLmdsb2JhbE1lbW9yeUR1bXBzLmZpbHRlcihoYXNWOFN0YXRzKS5yZWR1Y2UoKHN0YXJ0LGR1bXApPT5NYXRoLm1pbihzdGFydCxkdW1wLnN0YXJ0KSxJbmZpbml0eSk7aWYoc3RhcnRPZkZpcnN0RHVtcFdpdGhWOD09PUluZmluaXR5KXJldHVybiBuZXcgdHIuYi5tYXRoLlJhbmdlKCk7cmV0dXJuIHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzdGFydE9mRmlyc3REdW1wV2l0aFY4LEluZmluaXR5KTt9CmNsYXNzIFdpbmRvd0VuZHBvaW50e2NvbnN0cnVjdG9yKHN0YXJ0LHBvaW50cyl7dGhpcy5wb2ludHM9cG9pbnRzO3RoaXMubGFzdEluZGV4PS0xO3RoaXMucG9zaXRpb249c3RhcnQ7dGhpcy5kaXN0YW5jZVVudGlsTmV4dFBvaW50PXBvaW50c1swXS5wb3NpdGlvbi1zdGFydDt0aGlzLmN1bW11bGF0aXZlUGF1c2U9MDt0aGlzLnN0YWNrRGVwdGg9MDt9CmFkdmFuY2UoZGVsdGEpe2lmKGRlbHRhPHRoaXMuZGlzdGFuY2VVbnRpbE5leHRQb2ludCl7dGhpcy5wb3NpdGlvbis9ZGVsdGE7dGhpcy5jdW1tdWxhdGl2ZVBhdXNlKz10aGlzLnN0YWNrRGVwdGg+MD9kZWx0YTowO3RoaXMuZGlzdGFuY2VVbnRpbE5leHRQb2ludD10aGlzLnBvaW50c1t0aGlzLmxhc3RJbmRleCsxXS5wb3NpdGlvbi10aGlzLnBvc2l0aW9uO31lbHNle3RoaXMucG9zaXRpb24rPXRoaXMuZGlzdGFuY2VVbnRpbE5leHRQb2ludDt0aGlzLmN1bW11bGF0aXZlUGF1c2UrPXRoaXMuc3RhY2tEZXB0aD4wP3RoaXMuZGlzdGFuY2VVbnRpbE5leHRQb2ludDowO3RoaXMuZGlzdGFuY2VVbnRpbE5leHRQb2ludD0wO3RoaXMubGFzdEluZGV4Kys7aWYodGhpcy5sYXN0SW5kZXg8dGhpcy5wb2ludHMubGVuZ3RoKXt0aGlzLnN0YWNrRGVwdGgrPXRoaXMucG9pbnRzW3RoaXMubGFzdEluZGV4XS5kZWx0YTtpZih0aGlzLmxhc3RJbmRleCsxPHRoaXMucG9pbnRzLmxlbmd0aCl7dGhpcy5kaXN0YW5jZVVudGlsTmV4dFBvaW50PXRoaXMucG9pbnRzW3RoaXMubGFzdEluZGV4KzFdLnBvc2l0aW9uLXRoaXMucG9zaXRpb247fX19fX0KZnVuY3Rpb24gbXV0YXRvclV0aWxpemF0aW9uKHN0YXJ0LGVuZCx0aW1lV2luZG93LGludGVydmFscyl7Y29uc3QgbXU9bmV3IHRyLmIubWF0aC5QaWVjZXdpc2VMaW5lYXJGdW5jdGlvbigpO2lmKGVuZC1zdGFydDw9dGltZVdpbmRvdyl7cmV0dXJuIG11O30KaWYoaW50ZXJ2YWxzLmxlbmd0aD09PTApe211LnB1c2goc3RhcnQsMS4wLGVuZC10aW1lV2luZG93LDEuMCk7cmV0dXJuIG11O30KaW50ZXJ2YWxzPXVuaW9uT2ZJbnRlcnZhbHMoaW50ZXJ2YWxzKTtjb25zdCBwb2ludHM9W107Zm9yKGNvbnN0IGludGVydmFsIG9mIGludGVydmFscyl7cG9pbnRzLnB1c2goe3Bvc2l0aW9uOmludGVydmFsLnN0YXJ0LGRlbHRhOjF9KTtwb2ludHMucHVzaCh7cG9zaXRpb246aW50ZXJ2YWwuZW5kLGRlbHRhOi0xfSk7fQpwb2ludHMuc29ydCgoYSxiKT0+YS5wb3NpdGlvbi1iLnBvc2l0aW9uKTtwb2ludHMucHVzaCh7cG9zaXRpb246ZW5kLGRlbHRhOjB9KTtjb25zdCBsZWZ0PW5ldyBXaW5kb3dFbmRwb2ludChzdGFydCxwb2ludHMpO2NvbnN0IHJpZ2h0PW5ldyBXaW5kb3dFbmRwb2ludChzdGFydCxwb2ludHMpO2NvbnN0IEVQU0lMT049MWUtNjt3aGlsZShyaWdodC5wb3NpdGlvbi1sZWZ0LnBvc2l0aW9uPHRpbWVXaW5kb3ctRVBTSUxPTil7cmlnaHQuYWR2YW5jZSh0aW1lV2luZG93LShyaWdodC5wb3NpdGlvbi1sZWZ0LnBvc2l0aW9uKSk7fQp3aGlsZShyaWdodC5sYXN0SW5kZXg8cG9pbnRzLmxlbmd0aCl7Y29uc3QgZGlzdGFuY2VVbnRpbE5leHRQb2ludD1NYXRoLm1pbihsZWZ0LmRpc3RhbmNlVW50aWxOZXh0UG9pbnQscmlnaHQuZGlzdGFuY2VVbnRpbE5leHRQb2ludCk7Y29uc3QgcG9zaXRpb24xPWxlZnQucG9zaXRpb247Y29uc3QgdmFsdWUxPXJpZ2h0LmN1bW11bGF0aXZlUGF1c2UtbGVmdC5jdW1tdWxhdGl2ZVBhdXNlO2xlZnQuYWR2YW5jZShkaXN0YW5jZVVudGlsTmV4dFBvaW50KTtyaWdodC5hZHZhbmNlKGRpc3RhbmNlVW50aWxOZXh0UG9pbnQpO2lmKGRpc3RhbmNlVW50aWxOZXh0UG9pbnQ+MCl7Y29uc3QgcG9zaXRpb24yPWxlZnQucG9zaXRpb247Y29uc3QgdmFsdWUyPXJpZ2h0LmN1bW11bGF0aXZlUGF1c2UtbGVmdC5jdW1tdWxhdGl2ZVBhdXNlO211LnB1c2gocG9zaXRpb24xLDEuMC12YWx1ZTEvdGltZVdpbmRvdyxwb3NpdGlvbjIsMS4wLXZhbHVlMi90aW1lV2luZG93KTt9fQpyZXR1cm4gbXU7fQpmdW5jdGlvbiBhZGRNdXRhdG9yVXRpbGl6YXRpb24obWV0cmljTmFtZSxldmVudEZpbHRlcix0aW1lV2luZG93cyxyZW5kZXJlckhlbHBlcnMsaGlzdG9ncmFtcyl7Y29uc3QgaGlzdG9ncmFtTWFwPW5ldyBNYXAoKTtmb3IoY29uc3QgdGltZVdpbmRvdyBvZiB0aW1lV2luZG93cyl7Y29uc3Qgc3VtbWFyeU9wdGlvbnM9e2F2ZzpmYWxzZSxjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOnRydWUsc3RkOmZhbHNlLHN1bTpmYWxzZX07Y29uc3QgZGVzY3JpcHRpb249YFRoZSBtaW5pbXVtIG11dGF0b3IgdXRpbGl6YXRpb24gaW4gJHt0aW1lV2luZG93fW1zIHRpbWUgd2luZG93YDtjb25zdCBoaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYCR7bWV0cmljTmFtZX0tJHt0aW1lV2luZG93fW1zX3dpbmRvd2AsdHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcixbXSx7c3VtbWFyeU9wdGlvbnMsZGVzY3JpcHRpb259KTtoaXN0b2dyYW1NYXAuc2V0KHRpbWVXaW5kb3csaGlzdG9ncmFtKTt9CmZvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiByZW5kZXJlckhlbHBlcnMpe2lmKHJlbmRlcmVySGVscGVyLmlzQ2hyb21lVHJhY2luZ1VJKWNvbnRpbnVlO2NvbnN0IHBhdXNlcz1bXTtmb3IoY29uc3QgZXZlbnQgb2YgcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLmNoaWxkRXZlbnRzKCkpe2lmKGV2ZW50RmlsdGVyKGV2ZW50KSYmZXZlbnQuZW5kPmV2ZW50LnN0YXJ0KXtwYXVzZXMucHVzaCh7c3RhcnQ6ZXZlbnQuc3RhcnQsZW5kOmV2ZW50LmVuZH0pO319CnBhdXNlcy5zb3J0KChhLGIpPT5hLnN0YXJ0LWIuc3RhcnQpO2NvbnN0IHN0YXJ0PXJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuYm91bmRzLm1pbjtjb25zdCBlbmQ9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5ib3VuZHMubWF4O2Zvcihjb25zdCB0aW1lV2luZG93IG9mIHRpbWVXaW5kb3dzKXtjb25zdCBtdT1tdXRhdG9yVXRpbGl6YXRpb24oc3RhcnQsZW5kLHRpbWVXaW5kb3cscGF1c2VzKTtoaXN0b2dyYW1NYXAuZ2V0KHRpbWVXaW5kb3cpLmFkZFNhbXBsZShtdS5taW4pO319fQpyZXR1cm57YWRkTXV0YXRvclV0aWxpemF0aW9uLGZpbmRQYXJlbnQsZm9yY2VkR0NFdmVudE5hbWUsZmlsdGVyRXZlbnRzLGdyb3VwQW5kUHJvY2Vzc0V2ZW50cyxpc0ZvcmNlZEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsaXNGdWxsTWFya0NvbXBhY3RvckV2ZW50LGlzR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxpc0lkbGVUYXNrLGlzSW5jcmVtZW50YWxNYXJraW5nRXZlbnQsaXNMYXRlbmN5TWFya0NvbXBhY3RvckV2ZW50LGlzTG93TWVtb3J5RXZlbnQsaXNNYXJrQ29tcGFjdG9yU3VtbWFyeUV2ZW50LGlzTWFya0NvbXBhY3Rvck1hcmtpbmdTdW1tYXJ5RXZlbnQsaXNNZW1vcnlNYXJrQ29tcGFjdG9yRXZlbnQsaXNOb3RGb3JjZWRNYXJrQ29tcGFjdG9yRXZlbnQsaXNOb3RGb3JjZWRUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LGlzTm90Rm9yY2VkU3ViR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxpc1NjYXZlbmdlckV2ZW50LGlzU3ViR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxpc1RvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsaXNUb3BWOEV4ZWN1dGVFdmVudCxpc1Y4RXZlbnQsaXNWOEV4ZWN1dGVFdmVudCxpc1Y4UkNTRXZlbnQsaXNDb21waWxlUkNTQ2F0ZWdvcnksaXNDb21waWxlT3B0aW1pemVSQ1NDYXRlZ29yeSxpc0NvbXBpbGVVbm9wdGltaXplUkNTQ2F0ZWdvcnksaXNDb21waWxlUGFyc2VSQ1NDYXRlZ29yeSxtdXRhdG9yVXRpbGl6YXRpb24scmFuZ2VGb3JNZW1vcnlEdW1wcyxzdWJHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSx0b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZSx0b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZXMsdW5pb25PZkludGVydmFscyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5ibGluaycsZnVuY3Rpb24oKXtjb25zdCBCTElOS19OT05fQUdHUkVHQVRFRF9HQ19FVkVOVFNfTkFNRVNfTUFQPXsnQmxpbmtHQy5BdG9taWNQYXVzZU1hcmtFcGlsb2d1ZSc6J2JsaW5rLWdjLWF0b21pYy1wYXVzZS1tYXJrLWVwaWxvZ3VlJywnQmxpbmtHQy5BdG9taWNQYXVzZU1hcmtQcm9sb2d1ZSc6J2JsaW5rLWdjLWF0b21pYy1wYXVzZS1tYXJrLXByb2xvZ3VlJywnQmxpbmtHQy5BdG9taWNQYXVzZU1hcmtSb290cyc6J2JsaW5rLWdjLWF0b21pYy1wYXVzZS1tYXJrLXJvb3RzJywnQmxpbmtHQy5JbmNyZW1lbnRhbE1hcmtpbmdTdGFydE1hcmtpbmcnOidibGluay1nYy1pbmNyZW1lbnRhbC1zdGFydCcsJ0JsaW5rR0MuSW5jcmVtZW50YWxNYXJraW5nU3RlcCc6J2JsaW5rLWdjLWluY3JlbWVudGFsLXN0ZXAnLCdCbGlua0dDLlVuaWZpZWRNYXJraW5nU3RlcCc6J2JsaW5rLWdjLXVuaWZpZWQtbWFya2luZy1ieS12OCcsJ0JsaW5rR0MuQ29tcGxldGVTd2VlcCc6J2JsaW5rLWdjLWNvbXBsZXRlLXN3ZWVwJywnQmxpbmtHQy5MYXp5U3dlZXBJbklkbGUnOidibGluay1nYy1zd2VlcC10YXNrLWZvcmVncm91bmQnLCdCbGlua0dDLkxhenlTd2VlcE9uQWxsb2NhdGlvbic6J2JsaW5rLWdjLXN3ZWVwLWFsbG9jYXRpb24nLCdCbGlua0dDLkF0b21pY1BhdXNlU3dlZXBBbmRDb21wYWN0JzonYmxpbmstZ2MtYXRvbWljLXBhdXNlLXN3ZWVwLWFuZC1jb21wYWN0J307Y29uc3QgQkxJTktfVE9QX0dDX1JPT1RTX01BUktJTkdfRVZFTlRTPVsnQmxpbmtHQy5WaXNpdFJvb3RzJ107Y29uc3QgQkxJTktfR0NfQVRPTUlDX1BBVVNFX1RSQU5TSVRJVkVfQ0xPU1VSRV9FVkVOVFM9WydCbGlua0dDLkF0b21pY1BhdXNlTWFya1RyYW5zaXRpdmVDbG9zdXJlJ107Y29uc3QgQkxJTktfR0NfRk9SRUdST1VORF9NQVJLSU5HX1RSQU5TSVRJVkVfQ0xPU1VSRV9FVkVOVFM9WydCbGlua0dDLkF0b21pY1BhdXNlTWFya1RyYW5zaXRpdmVDbG9zdXJlJywnQmxpbmtHQy5JbmNyZW1lbnRhbE1hcmtpbmdTdGVwJywnQmxpbmtHQy5VbmlmaWVkTWFya2luZ1N0ZXAnXTtjb25zdCBCTElOS19UT1BfR0NfRk9SRUdST1VORF9NQVJLSU5HX0VWRU5UUz1bJ0JsaW5rR0MuQXRvbWljUGF1c2VNYXJrRXBpbG9ndWUnLCdCbGlua0dDLkF0b21pY1BhdXNlTWFya1Byb2xvZ3VlJywnQmxpbmtHQy5BdG9taWNQYXVzZU1hcmtSb290cycsJ0JsaW5rR0MuSW5jcmVtZW50YWxNYXJraW5nU3RhcnRNYXJraW5nJyxdLmNvbmNhdChCTElOS19HQ19GT1JFR1JPVU5EX01BUktJTkdfVFJBTlNJVElWRV9DTE9TVVJFX0VWRU5UUyk7Y29uc3QgQkxJTktfVE9QX0dDX0JBQ0tHUk9VTkRfTUFSS0lOR19FVkVOVFM9WydCbGlua0dDLkNvbmN1cnJlbnRNYXJraW5nU3RlcCddO2NvbnN0IEJMSU5LX1RPUF9HQ19GT1JFR1JPVU5EX1NXRUVQSU5HX0VWRU5UUz1bJ0JsaW5rR0MuQ29tcGxldGVTd2VlcCcsJ0JsaW5rR0MuTGF6eVN3ZWVwSW5JZGxlJywnQmxpbmtHQy5MYXp5U3dlZXBPbkFsbG9jYXRpb24nXTtjb25zdCBCTElOS19UT1BfR0NfQkFDS0dST1VORF9TV0VFUElOR19FVkVOVFM9WydCbGlua0dDLkNvbmN1cnJlbnRTd2VlcGluZ1N0ZXAnXTtjb25zdCBCTElOS19UT1BfR0NfRVZFTlRTPU9iamVjdC5rZXlzKEJMSU5LX05PTl9BR0dSRUdBVEVEX0dDX0VWRU5UU19OQU1FU19NQVApLmNvbmNhdChCTElOS19HQ19BVE9NSUNfUEFVU0VfVFJBTlNJVElWRV9DTE9TVVJFX0VWRU5UUyk7Y29uc3QgQVRPTUlDX1BBVVNFX0VWRU5UUz1bJ0JsaW5rR0MuQXRvbWljUGF1c2VNYXJrRXBpbG9ndWUnLCdCbGlua0dDLkF0b21pY1BhdXNlTWFya1Byb2xvZ3VlJywnQmxpbmtHQy5BdG9taWNQYXVzZU1hcmtSb290cycsJ0JsaW5rR0MuQXRvbWljUGF1c2VNYXJrVHJhbnNpdGl2ZUNsb3N1cmUnLCdCbGlua0dDLkF0b21pY1BhdXNlU3dlZXBBbmRDb21wYWN0J107ZnVuY3Rpb24gYmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZShldmVudCl7cmV0dXJuIEJMSU5LX05PTl9BR0dSRUdBVEVEX0dDX0VWRU5UU19OQU1FU19NQVBbZXZlbnQudGl0bGVdO30KZnVuY3Rpb24gYmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZXMoKXtyZXR1cm4gT2JqZWN0LnZhbHVlcyhCTElOS19OT05fQUdHUkVHQVRFRF9HQ19FVkVOVFNfTkFNRVNfTUFQKTt9CmZ1bmN0aW9uIGlzTm9uRm9yY2VkRXZlbnQoZXZlbnQpe3JldHVybighZXZlbnQuYXJnc3x8IWV2ZW50LmFyZ3MuZm9yY2VkKSYmIXRyLm1ldHJpY3MudjgudXRpbHMuaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uIGlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gQkxJTktfVE9QX0dDX0VWRU5UUy5pbmNsdWRlcyhldmVudC50aXRsZSkmJmlzTm9uRm9yY2VkRXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNOb25Gb3JjZWROb25BZ2dyZWdhdGVkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGUgaW4gQkxJTktfTk9OX0FHR1JFR0FURURfR0NfRVZFTlRTX05BTUVTX01BUCYmaXNOb25Gb3JjZWRFdmVudChldmVudCk7fQpmdW5jdGlvbiBpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25BdG9taWNQYXVzZUV2ZW50KGV2ZW50KXtyZXR1cm4gQVRPTUlDX1BBVVNFX0VWRU5UUy5pbmNsdWRlcyhldmVudC50aXRsZSkmJmlzTm9uRm9yY2VkRXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNOb25Gb3JjZWRCbGlua0dhcmJhZ2VDb2xsZWN0aW9uUm9vdHNNYXJraW5nRXZlbnQoZXZlbnQpe3JldHVybiBCTElOS19UT1BfR0NfUk9PVFNfTUFSS0lOR19FVkVOVFMuaW5jbHVkZXMoZXZlbnQudGl0bGUpJiZpc05vbkZvcmNlZEV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uCmlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbk1hcmtpbmdUcmFuc2l0aXZlQ29sc3VyZUV2ZW50KGV2ZW50KXtyZXR1cm4gQkxJTktfR0NfRk9SRUdST1VORF9NQVJLSU5HX1RSQU5TSVRJVkVfQ0xPU1VSRV9FVkVOVFMuaW5jbHVkZXMoZXZlbnQudGl0bGUpJiZpc05vbkZvcmNlZEV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uCmlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkF0b21pY1BhdXNlVHJhbnNpdGl2ZUNvbHN1cmVFdmVudChldmVudCl7cmV0dXJuIEJMSU5LX0dDX0FUT01JQ19QQVVTRV9UUkFOU0lUSVZFX0NMT1NVUkVfRVZFTlRTLmluY2x1ZGVzKGV2ZW50LnRpdGxlKSYmaXNOb25Gb3JjZWRFdmVudChldmVudCk7fQpmdW5jdGlvbiBpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25Gb3JlZ3JvdW5kTWFya2luZ0V2ZW50KGV2ZW50KXtyZXR1cm4gQkxJTktfVE9QX0dDX0ZPUkVHUk9VTkRfTUFSS0lOR19FVkVOVFMuaW5jbHVkZXMoZXZlbnQudGl0bGUpJiZpc05vbkZvcmNlZEV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uIGlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkJhY2tncm91bmRNYXJraW5nRXZlbnQoZXZlbnQpe3JldHVybiBCTElOS19UT1BfR0NfQkFDS0dST1VORF9NQVJLSU5HX0VWRU5UUy5pbmNsdWRlcyhldmVudC50aXRsZSkmJmlzTm9uRm9yY2VkRXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNOb25Gb3JjZWRCbGlua0dhcmJhZ2VDb2xsZWN0aW9uRm9yZWdyb3VuZFN3ZWVwaW5nRXZlbnQoZXZlbnQpe3JldHVybiBCTElOS19UT1BfR0NfRk9SRUdST1VORF9TV0VFUElOR19FVkVOVFMuaW5jbHVkZXMoZXZlbnQudGl0bGUpJiZpc05vbkZvcmNlZEV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uIGlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkJhY2tncm91bmRTd2VlcGluZ0V2ZW50KGV2ZW50KXtyZXR1cm4gQkxJTktfVE9QX0dDX0JBQ0tHUk9VTkRfU1dFRVBJTkdfRVZFTlRTLmluY2x1ZGVzKGV2ZW50LnRpdGxlKSYmaXNOb25Gb3JjZWRFdmVudChldmVudCk7fQpmdW5jdGlvbiBpc05vbk5lc3RlZE5vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCl7cmV0dXJuIGlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KSYmIXRyLm1ldHJpY3MudjgudXRpbHMuZmluZFBhcmVudChldmVudCx0ci5tZXRyaWNzLnY4LnV0aWxzLmlzR2FyYmFnZUNvbGxlY3Rpb25FdmVudCk7fQpmdW5jdGlvbiBibGlua0djTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2FkZER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7YWRkRHVyYXRpb25PZkF0b21pY1BhdXNlKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZER1cmF0aW9uT2ZBdG9taWNQYXVzZVRyYW5zaXRpdmVDbG9zdXJlKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZFRvdGFsRHVyYXRpb25PZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbER1cmF0aW9uT2ZCbGlua0FuZFY4VG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZFRvdGFsRHVyYXRpb25PZlJvb3RzTWFya2luZyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbER1cmF0aW9uT2ZNYXJraW5nVHJhbnNpdGl2ZUNsb3N1cmUoaGlzdG9ncmFtcyxtb2RlbCk7YWRkVG90YWxEdXJhdGlvbk9mRm9yZWdyb3VuZE1hcmtpbmcoaGlzdG9ncmFtcyxtb2RlbCk7YWRkVG90YWxEdXJhdGlvbk9mQmFja2dyb3VuZE1hcmtpbmcoaGlzdG9ncmFtcyxtb2RlbCk7YWRkVG90YWxEdXJhdGlvbk9mRm9yZWdyb3VuZFN3ZWVwaW5nKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZFRvdGFsRHVyYXRpb25PZkJhY2tncm91bmRTd2VlcGluZyhoaXN0b2dyYW1zLG1vZGVsKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoYmxpbmtHY01ldHJpYyk7Y29uc3QgdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcjtjb25zdCBDVVNUT01fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMjAwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjAwLDEwMCk7ZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDp0cnVlLG1heDp0cnVlLG1pbjpmYWxzZSxzdGQ6dHJ1ZSxzdW06dHJ1ZSxwZXJjZW50aWxlOlswLjkwXX0pO3JldHVybiBuO30KZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclRvdGFsRXZlbnRUaW1lKG5hbWUpe2NvbnN0IG49bmV3IHRyLnYuSGlzdG9ncmFtKG5hbWUsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO24uY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoe2F2ZzpmYWxzZSxjb3VudDp0cnVlLG1heDpmYWxzZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTp0cnVlLHBlcmNlbnRpbGU6WzAuOTBdfSk7cmV0dXJuIG47fQpmdW5jdGlvbiBjcmVhdGVOdW1lcmljRm9yVW5pZmllZEV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6ZmFsc2UsY291bnQ6dHJ1ZSxtYXg6dHJ1ZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTp0cnVlLHBlcmNlbnRpbGU6WzAuOTBdfSk7cmV0dXJuIG47fQpmdW5jdGlvbiBhZGREdXJhdGlvbk9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGlzTm9uRm9yY2VkTm9uQWdncmVnYXRlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudCxibGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG9wRXZlbnRUaW1lKG5hbWUpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSxibGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lcygpKTt9CmZ1bmN0aW9uIGFkZER1cmF0aW9uT2ZBdG9taWNQYXVzZShoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25BdG9taWNQYXVzZUV2ZW50LGV2ZW50PT5ldmVudC5hcmdzLmVwb2NoLGZ1bmN0aW9uKGdyb3VwLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZSgnYmxpbmstZ2MtYXRvbWljLXBhdXNlJyk7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50cy5yZWR1Y2UoKGFjYyxjdXJyZW50KT0+YWNjK2N1cnJlbnQuY3B1RHVyYXRpb24sMCkpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9KTt9CmZ1bmN0aW9uIGFkZER1cmF0aW9uT2ZBdG9taWNQYXVzZVRyYW5zaXRpdmVDbG9zdXJlKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGlzTm9uRm9yY2VkQmxpbmtHYXJiYWdlQ29sbGVjdGlvbkF0b21pY1BhdXNlVHJhbnNpdGl2ZUNvbHN1cmVFdmVudCxldmVudD0+ZXZlbnQuYXJncy5lcG9jaCxmdW5jdGlvbihncm91cCxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3BFdmVudFRpbWUoJ2JsaW5rLWdjLWF0b21pYy1wYXVzZS1tYXJrLXRyYW5zaXRpdmUtY2xvc3VyZScpO2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudHMucmVkdWNlKChhY2MsY3VycmVudCk9PmFjYytjdXJyZW50LmNwdUR1cmF0aW9uLDApKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSk7fQpmdW5jdGlvbiBhZGRUb3RhbER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsaXNOb25Gb3JjZWRCbGlua0dhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsZXZlbnQ9PidibGluay1nYy10b3RhbCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3RhbEV2ZW50VGltZShuYW1lKTtmb3IoY29uc3QgZXZlbnQgb2YgZXZlbnRzKXtjcHVEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1RHVyYXRpb24pO30sWydibGluay1nYy10b3RhbCddKTt9CmZ1bmN0aW9uIGFkZFRvdGFsRHVyYXRpb25PZlJvb3RzTWFya2luZyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25Sb290c01hcmtpbmdFdmVudCxldmVudD0+J2JsaW5rLWdjLW1hcmstcm9vdHMnLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG90YWxFdmVudFRpbWUobmFtZSk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9LFsnYmxpbmstZ2MtbWFyay1yb290cyddKTt9CmZ1bmN0aW9uIGFkZFRvdGFsRHVyYXRpb25PZk1hcmtpbmdUcmFuc2l0aXZlQ2xvc3VyZShoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25NYXJraW5nVHJhbnNpdGl2ZUNvbHN1cmVFdmVudCxldmVudD0+J2JsaW5rLWdjLW1hcmstdHJhbnNpdGl2ZS1jbG9zdXJlJyxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvdGFsRXZlbnRUaW1lKG5hbWUpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSxbJ2JsaW5rLWdjLW1hcmstdHJhbnNpdGl2ZS1jbG9zdXJlJ10pO30KZnVuY3Rpb24gYWRkVG90YWxEdXJhdGlvbk9mRm9yZWdyb3VuZE1hcmtpbmcoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsaXNOb25Gb3JjZWRCbGlua0dhcmJhZ2VDb2xsZWN0aW9uRm9yZWdyb3VuZE1hcmtpbmdFdmVudCxldmVudD0+J2JsaW5rLWdjLW1hcmstZm9yZWdyb3VuZCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3RhbEV2ZW50VGltZShuYW1lKTtmb3IoY29uc3QgZXZlbnQgb2YgZXZlbnRzKXtjcHVEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1RHVyYXRpb24pO30sWydibGluay1nYy1tYXJrLWZvcmVncm91bmQnXSk7fQpmdW5jdGlvbiBhZGRUb3RhbER1cmF0aW9uT2ZCYWNrZ3JvdW5kTWFya2luZyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25CYWNrZ3JvdW5kTWFya2luZ0V2ZW50LGV2ZW50PT4nYmxpbmstZ2MtbWFyay1iYWNrZ3JvdW5kJyxmdW5jdGlvbihuYW1lLGV2ZW50cyl7Y29uc3QgY3B1RHVyYXRpb249Y3JlYXRlTnVtZXJpY0ZvclRvdGFsRXZlbnRUaW1lKG5hbWUpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSxbJ2JsaW5rLWdjLW1hcmstYmFja2dyb3VuZCddKTt9CmZ1bmN0aW9uIGFkZFRvdGFsRHVyYXRpb25PZkZvcmVncm91bmRTd2VlcGluZyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25Gb3JlZ3JvdW5kU3dlZXBpbmdFdmVudCxldmVudD0+J2JsaW5rLWdjLXN3ZWVwLWZvcmVncm91bmQnLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG90YWxFdmVudFRpbWUobmFtZSk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9LFsnYmxpbmstZ2Mtc3dlZXAtZm9yZWdyb3VuZCddKTt9CmZ1bmN0aW9uIGFkZFRvdGFsRHVyYXRpb25PZkJhY2tncm91bmRTd2VlcGluZyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc05vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25CYWNrZ3JvdW5kU3dlZXBpbmdFdmVudCxldmVudD0+J2JsaW5rLWdjLXN3ZWVwLWJhY2tncm91bmQnLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG90YWxFdmVudFRpbWUobmFtZSk7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y3B1RHVyYXRpb24uYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9LFsnYmxpbmstZ2Mtc3dlZXAtYmFja2dyb3VuZCddKTt9CmZ1bmN0aW9uIGlzVjhPckJsaW5rVG9wTGV2ZWxHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KXtyZXR1cm4gdHIubWV0cmljcy52OC51dGlscy5pc05vdEZvcmNlZFRvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQoZXZlbnQpfHxpc05vbk5lc3RlZE5vbkZvcmNlZEJsaW5rR2FyYmFnZUNvbGxlY3Rpb25FdmVudChldmVudCk7fQpmdW5jdGlvbiBhZGRUb3RhbER1cmF0aW9uT2ZCbGlua0FuZFY4VG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLGlzVjhPckJsaW5rVG9wTGV2ZWxHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LGV2ZW50PT4ndW5pZmllZC1nYy10b3RhbCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JVbmlmaWVkRXZlbnRUaW1lKG5hbWUpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVEdXJhdGlvbik7fSxbJ3VuaWZpZWQtZ2MtdG90YWwnXSk7fQpyZXR1cm57YmxpbmtHY01ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5ibGluaycsZnVuY3Rpb24oKXtmdW5jdGlvbiBsZWFrRGV0ZWN0aW9uTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IG1vZGVsSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKG1vZGVsSGVscGVyPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0Nocm9tZSBpcyBub3QgcHJlc2VudC4nKTt9CmNvbnN0IHJlbmRlcmVySGVscGVycz1tb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnM7aWYoT2JqZWN0LmtleXMocmVuZGVyZXJIZWxwZXJzKS5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ1JlbmRlcmVyIHByb2Nlc3MgaXMgbm90IHByZXNlbnQuJyk7fQpjb25zdCBwaWRzPU9iamVjdC5rZXlzKHJlbmRlcmVySGVscGVycyk7Y29uc3QgY2hyb21lRHVtcHM9dHIubWV0cmljcy5zaC5zcGxpdEdsb2JhbER1bXBzQnlCcm93c2VyTmFtZShtb2RlbCx1bmRlZmluZWQpLmdldCgnY2hyb21lJyk7Y29uc3Qgc3VtQ291bnRlcj1uZXcgTWFwKCk7Zm9yKGNvbnN0IHBpZCBvZiBwaWRzKXtmb3IoY29uc3Rba2V5LGNvdW50XW9mIGNvdW50TGVha2VkQmxpbmtPYmplY3RzKGNocm9tZUR1bXBzLHBpZCkpe3N1bUNvdW50ZXIuc2V0KGtleSwoc3VtQ291bnRlci5nZXQoa2V5KXx8MCkrY291bnQpO319CmZvcihjb25zdFtrZXksY291bnRdb2Ygc3VtQ291bnRlcil7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ0xlYWtlZCAnK2tleSx0ci5iLlVuaXQuYnlOYW1lLmNvdW50X3NtYWxsZXJJc0JldHRlcixjb3VudCk7fQpmb3IoY29uc3Rba2V5LGNvdW50XW9mIHN1bUNvdW50ZXIpe2lmKGNvdW50PjApe3Rocm93IG5ldyBFcnJvcignTWVtb3J5IGxlYWsgaXMgZm91bmQuJyk7fX19CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobGVha0RldGVjdGlvbk1ldHJpYyk7ZnVuY3Rpb24gY291bnRMZWFrZWRCbGlua09iamVjdHMoZHVtcHMscGlkKXtpZihkdW1wcz09PXVuZGVmaW5lZHx8ZHVtcHMubGVuZ3RoPDIpe3Rocm93IG5ldyBFcnJvcignRXhwZWN0ZWQgYXQgbGVhc3QgdHdvIG1lbW9yeSBkdW1wcy4nKTt9CmNvbnN0IGZpcnN0Q291bnRlcj1jb3VudEJsaW5rT2JqZWN0cyhkdW1wc1swXSxwaWQpO2NvbnN0IGxhc3RDb3VudGVyPWNvdW50QmxpbmtPYmplY3RzKGR1bXBzW2R1bXBzLmxlbmd0aC0xXSxwaWQpO2NvbnN0IGRpZmZDb3VudGVyPW5ldyBNYXAoKTtmb3IoY29uc3Rba2V5LGxhc3RDb3VudF1vZiBsYXN0Q291bnRlcil7ZGlmZkNvdW50ZXIuc2V0KGtleSxsYXN0Q291bnQtZmlyc3RDb3VudGVyLmdldChrZXkpKTt9CnJldHVybiBkaWZmQ291bnRlcjt9CmZ1bmN0aW9uIGNvdW50QmxpbmtPYmplY3RzKGR1bXAscGlkKXtjb25zdCBjb3VudGVyPW5ldyBNYXAoKTtjb25zdCBwcm9jZXNzZXNNZW1vcnlEdW1wcz1kdW1wLnByb2Nlc3NNZW1vcnlEdW1wcztpZihwcm9jZXNzZXNNZW1vcnlEdW1wc1twaWRdPT09dW5kZWZpbmVkKXJldHVybiBjb3VudGVyO2NvbnN0IGJsaW5rT2JqZWN0c0R1bXA9cHJvY2Vzc2VzTWVtb3J5RHVtcHNbcGlkXS5tZW1vcnlBbGxvY2F0b3JEdW1wcy5maW5kKGR1bXA9PmR1bXAuZnVsbE5hbWU9PT0nYmxpbmtfb2JqZWN0cycpO2Zvcihjb25zdCB2IG9mIGJsaW5rT2JqZWN0c0R1bXAuY2hpbGRyZW4pe2NvdW50ZXIuc2V0KHYubmFtZSx2Lm51bWVyaWNzLm9iamVjdF9jb3VudC52YWx1ZSk7fQpyZXR1cm4gY291bnRlcjt9CnJldHVybntsZWFrRGV0ZWN0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLmNvbnNvbGUnLGZ1bmN0aW9uKCl7Y29uc3QgQ09VTlRfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMSwxZTQsMzApO2NvbnN0IFNVTU1BUllfT1BUSU9OUz10ci52Lkhpc3RvZ3JhbS5BVkVSQUdFX09OTFlfU1VNTUFSWV9PUFRJT05TO2NvbnN0IFNPVVJDRVM9WydhbGwnLCdqcycsJ25ldHdvcmsnXTtmdW5jdGlvbiBjb25zb2xlRXJyb3JNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY291bnRzPXt9O2Zvcihjb25zdCBzb3VyY2Ugb2YgU09VUkNFUyl7Y291bnRzW3NvdXJjZV09MDt9CmZvcihjb25zdCBzbGljZSBvZiBtb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKHNsaWNlLmNhdGVnb3J5PT09J2JsaW5rLmNvbnNvbGUnJiZzbGljZS50aXRsZT09PSdDb25zb2xlTWVzc2FnZTo6RXJyb3InKXtjb25zdCBzb3VyY2U9c2xpY2UuYXJncy5zb3VyY2UudG9Mb3dlckNhc2UoKTtjb3VudHMuYWxsKys7aWYoc291cmNlIGluIGNvdW50cyl7Y291bnRzW3NvdXJjZV0rKzt9fQppZihzbGljZS5jYXRlZ29yeT09PSd2OC5jb25zb2xlJyYmKHNsaWNlLnRpdGxlPT09J1Y4Q29uc29sZU1lc3NhZ2U6OkV4Y2VwdGlvbid8fHNsaWNlLnRpdGxlPT09J1Y4Q29uc29sZU1lc3NhZ2U6OkVycm9yJ3x8c2xpY2UudGl0bGU9PT0nVjhDb25zb2xlTWVzc2FnZTo6QXNzZXJ0Jykpe2NvdW50cy5hbGwrKztjb3VudHMuanMrKzt9fQpmb3IoY29uc3Qgc291cmNlIG9mIFNPVVJDRVMpe2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGBjb25zb2xlOmVycm9yOiR7c291cmNlfWAsdHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIsY291bnRzW3NvdXJjZV0se2Rlc2NyaXB0aW9uOmBOdW1iZXIgb2YgJHtzb3VyY2V9IGNvbnNvbGUgZXJyb3IgbWVzc2FnZXNgLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OU30pO319CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoY29uc29sZUVycm9yTWV0cmljKTtyZXR1cm57Y29uc29sZUVycm9yTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldENwdVNuYXBzaG90c0Zyb21Nb2RlbChtb2RlbCl7Y29uc3Qgc25hcHNob3RzPVtdO2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtjb25zdCBzbmFwc2hvdEluc3RhbmNlcz1tb2RlbC5wcm9jZXNzZXNbcGlkXS5vYmplY3RzLmdldEFsbEluc3RhbmNlc05hbWVkKCdDUFVTbmFwc2hvdHMnKTtpZighc25hcHNob3RJbnN0YW5jZXMpY29udGludWU7Zm9yKGNvbnN0IG9iamVjdCBvZiBzbmFwc2hvdEluc3RhbmNlc1swXS5zbmFwc2hvdHMpe3NuYXBzaG90cy5wdXNoKG9iamVjdC5hcmdzLnByb2Nlc3Nlcyk7fX0KcmV0dXJuIHNuYXBzaG90czt9CmZ1bmN0aW9uIGdldFByb2Nlc3NTdW1zRnJvbVNuYXBzaG90KHNuYXBzaG90KXtjb25zdCBwcm9jZXNzU3Vtcz1uZXcgTWFwKCk7Zm9yKGNvbnN0IHByb2Nlc3NEYXRhIG9mIHNuYXBzaG90KXtjb25zdCBwcm9jZXNzTmFtZT1wcm9jZXNzRGF0YS5uYW1lO2lmKCEocHJvY2Vzc1N1bXMuaGFzKHByb2Nlc3NOYW1lKSkpe3Byb2Nlc3NTdW1zLnNldChwcm9jZXNzTmFtZSx7c3VtOjAuMCxwYXRoczpuZXcgU2V0KCl9KTt9CnByb2Nlc3NTdW1zLmdldChwcm9jZXNzTmFtZSkuc3VtKz1wYXJzZUZsb2F0KHByb2Nlc3NEYXRhLnBDcHUpO2lmKHByb2Nlc3NEYXRhLnBhdGgpe3Byb2Nlc3NTdW1zLmdldChwcm9jZXNzTmFtZSkucGF0aHMuYWRkKHByb2Nlc3NEYXRhLnBhdGgpO319CnJldHVybiBwcm9jZXNzU3Vtczt9CmZ1bmN0aW9uIGJ1aWxkTnVtZXJpY3NGcm9tU25hcHNob3RzKHNuYXBzaG90cyl7Y29uc3QgcHJvY2Vzc051bWVyaWNzPW5ldyBNYXAoKTtmb3IoY29uc3Qgc25hcHNob3Qgb2Ygc25hcHNob3RzKXtjb25zdCBwcm9jZXNzU3Vtcz1nZXRQcm9jZXNzU3Vtc0Zyb21TbmFwc2hvdChzbmFwc2hvdCk7Zm9yKGNvbnN0W3Byb2Nlc3NOYW1lLHByb2Nlc3NEYXRhXW9mIHByb2Nlc3NTdW1zLmVudHJpZXMoKSl7aWYoIShwcm9jZXNzTnVtZXJpY3MuaGFzKHByb2Nlc3NOYW1lKSkpe3Byb2Nlc3NOdW1lcmljcy5zZXQocHJvY2Vzc05hbWUse251bWVyaWM6bmV3IHRyLnYuSGlzdG9ncmFtKCdjcHU6cGVyY2VudDonK3Byb2Nlc3NOYW1lLHRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyKSxwYXRoczpuZXcgU2V0KCl9KTt9CnByb2Nlc3NOdW1lcmljcy5nZXQocHJvY2Vzc05hbWUpLm51bWVyaWMuYWRkU2FtcGxlKHByb2Nlc3NEYXRhLnN1bS8xMDAuMCk7Zm9yKGNvbnN0IHBhdGggb2YgcHJvY2Vzc0RhdGEucGF0aHMpe3Byb2Nlc3NOdW1lcmljcy5nZXQocHJvY2Vzc05hbWUpLnBhdGhzLmFkZChwYXRoKTt9fX0KcmV0dXJuIHByb2Nlc3NOdW1lcmljczt9CmZ1bmN0aW9uIGNwdVByb2Nlc3NNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3Qgc25hcHNob3RzPWdldENwdVNuYXBzaG90c0Zyb21Nb2RlbChtb2RlbCk7Y29uc3QgcHJvY2Vzc051bWVyaWNzPWJ1aWxkTnVtZXJpY3NGcm9tU25hcHNob3RzKHNuYXBzaG90cyk7Zm9yKGNvbnN0W3Byb2Nlc3NOYW1lLHByb2Nlc3NEYXRhXW9mIHByb2Nlc3NOdW1lcmljcyl7Y29uc3QgbnVtZXJpYz1wcm9jZXNzRGF0YS5udW1lcmljO2NvbnN0IG1pc3NpbmdTbmFwc2hvdENvdW50PXNuYXBzaG90cy5sZW5ndGgtbnVtZXJpYy5udW1WYWx1ZXM7Zm9yKGxldCBpPTA7aTxtaXNzaW5nU25hcHNob3RDb3VudDtpKyspe251bWVyaWMuYWRkU2FtcGxlKDApO30KbnVtZXJpYy5kaWFnbm9zdGljcy5zZXQoJ3BhdGhzJyxuZXcKdHIudi5kLkdlbmVyaWNTZXQoWy4uLnByb2Nlc3NEYXRhLnBhdGhzXSkpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKG51bWVyaWMpO319CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoY3B1UHJvY2Vzc01ldHJpYyk7cmV0dXJue2NwdVByb2Nlc3NNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbWVkaWFNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKGNocm9tZUhlbHBlcj09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycykpe2NvbnN0IG1haW5UaHJlYWQ9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZDtpZihtYWluVGhyZWFkPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IHZpZGVvVGhyZWFkcz1yZW5kZXJlckhlbHBlci5wcm9jZXNzLmZpbmRBbGxUaHJlYWRzTWF0Y2hpbmcodGhyZWFkPT4odGhyZWFkLm5hbWU/dGhyZWFkLm5hbWUuc3RhcnRzV2l0aCgnVGhyZWFkUG9vbFNpbmdsZVRocmVhZFNoYXJlZEZvcmVncm91bmRCbG9ja2luZycpOmZhbHNlKSk7Y29uc3QgY29tcG9zaXRvclRocmVhZD1yZW5kZXJlckhlbHBlci5jb21wb3NpdG9yVGhyZWFkO2lmKGNvbXBvc2l0b3JUaHJlYWQhPT11bmRlZmluZWQpe3ZpZGVvVGhyZWFkcy5wdXNoKGNvbXBvc2l0b3JUaHJlYWQpO30KY29uc3QgYXVkaW9UaHJlYWRzPXJlbmRlcmVySGVscGVyLnByb2Nlc3MuZmluZEFsbFRocmVhZHNOYW1lZCgnQXVkaW9PdXRwdXREZXZpY2UnKTtpZihhdWRpb1RocmVhZHMubGVuZ3RoPT09MCYmdmlkZW9UaHJlYWRzLmxlbmd0aD09PTApY29udGludWU7Y29uc3QgcHJvY2Vzc0RhdGE9bmV3IFBlclByb2Nlc3NEYXRhKCk7cHJvY2Vzc0RhdGEucmVjb3JkUGxheVN0YXJ0cyhtYWluVGhyZWFkKTtpZighcHJvY2Vzc0RhdGEuaGFzUGxheWJhY2tzKWNvbnRpbnVlO2lmKHZpZGVvVGhyZWFkcy5sZW5ndGghPT0wKXtwcm9jZXNzRGF0YS5jYWxjdWxhdGVUaW1lVG9WaWRlb1BsYXlzKHZpZGVvVGhyZWFkcyk7cHJvY2Vzc0RhdGEuY2FsY3VsYXRlRHJvcHBlZEZyYW1lQ291bnRzKHZpZGVvVGhyZWFkcyk7fQppZihhdWRpb1RocmVhZHMubGVuZ3RoIT09MCl7cHJvY2Vzc0RhdGEuY2FsY3VsYXRlVGltZVRvQXVkaW9QbGF5cyhhdWRpb1RocmVhZHMpO30KcHJvY2Vzc0RhdGEuY2FsY3VsYXRlU2Vla1RpbWVzKG1haW5UaHJlYWQpO3Byb2Nlc3NEYXRhLmNhbGN1bGF0ZUJ1ZmZlcmluZ1RpbWVzKG1haW5UaHJlYWQpO3Byb2Nlc3NEYXRhLmFkZE1ldHJpY1RvSGlzdG9ncmFtcyhoaXN0b2dyYW1zKTt9fQpjbGFzcyBQZXJQcm9jZXNzRGF0YXtjb25zdHJ1Y3Rvcigpe3RoaXMucGxheWJhY2tJZFRvRGF0YU1hcF89bmV3IE1hcCgpO30KcmVjb3JkUGxheVN0YXJ0cyhtYWluVGhyZWFkKXtmb3IoY29uc3QgZXZlbnQgb2YgbWFpblRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nV2ViTWVkaWFQbGF5ZXJJbXBsOjpEb0xvYWQnKXtjb25zdCBpZD1ldmVudC5hcmdzLmlkO2lmKHRoaXMucGxheWJhY2tJZFRvRGF0YU1hcF8uaGFzKGlkKSl7dGhyb3cgbmV3IEVycm9yKCdVbmV4cGVjdGVkIG11bHRpcGxlIGluaXRpYWxpemF0aW9uIG9mIGEgbWVkaWEgcGxheWJhY2snKTt9CnRoaXMucGxheWJhY2tJZFRvRGF0YU1hcF8uc2V0KGlkLG5ldyBQZXJQbGF5YmFja0RhdGEoZXZlbnQuc3RhcnQpKTt9fX0KZ2V0IGhhc1BsYXliYWNrcygpe3JldHVybiB0aGlzLnBsYXliYWNrSWRUb0RhdGFNYXBfLnNpemU+MDt9CmNhbGN1bGF0ZVRpbWVUb1ZpZGVvUGxheXModmlkZW9UaHJlYWRzKXtmb3IoY29uc3QgdGhyZWFkIG9mIHZpZGVvVGhyZWFkcyl7Zm9yKGNvbnN0IGV2ZW50IG9mIHRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nVmlkZW9SZW5kZXJlckltcGw6OlJlbmRlcicpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NWaWRlb1JlbmRlclRpbWUoZXZlbnQuc3RhcnQpO319fX0KY2FsY3VsYXRlVGltZVRvQXVkaW9QbGF5cyhhdWRpb1RocmVhZHMpe2Zvcihjb25zdCBhdWRpb1RocmVhZCBvZiBhdWRpb1RocmVhZHMpe2Zvcihjb25zdCBldmVudCBvZiBhdWRpb1RocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoZXZlbnQudGl0bGU9PT0nQXVkaW9SZW5kZXJlckltcGw6OlJlbmRlcicpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NBdWRpb1JlbmRlclRpbWUoZXZlbnQuc3RhcnQpO319fX0KY2FsY3VsYXRlU2Vla1RpbWVzKG1haW5UaHJlYWQpe2Zvcihjb25zdCBldmVudCBvZiBtYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldmVudC50aXRsZT09PSdXZWJNZWRpYVBsYXllckltcGw6OkRvU2Vlaycpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NEb1NlZWsoZXZlbnQuYXJncy50YXJnZXQsZXZlbnQuc3RhcnQpO31lbHNlIGlmKGV2ZW50LnRpdGxlPT09J1dlYk1lZGlhUGxheWVySW1wbDo6T25QaXBlbGluZVNlZWtlZCcpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NPblBpcGVsaW5lU2Vla2VkKGV2ZW50LmFyZ3MudGFyZ2V0LGV2ZW50LnN0YXJ0KTt9ZWxzZSBpZihldmVudC50aXRsZT09PSdXZWJNZWRpYVBsYXllckltcGw6OkJ1ZmZlcmluZ0hhdmVFbm91Z2gnKXt0aGlzLmdldFBlclBsYXliYWNrT2JqZWN0XyhldmVudC5hcmdzLmlkKS5wcm9jZXNzQnVmZmVyaW5nSGF2ZUVub3VnaChldmVudC5zdGFydCk7fX19CmNhbGN1bGF0ZUJ1ZmZlcmluZ1RpbWVzKG1haW5UaHJlYWQpe2Zvcihjb25zdCBldmVudCBvZiBtYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpKXtpZihldmVudC50aXRsZT09PSdXZWJNZWRpYVBsYXllckltcGw6Ok9uRW5kZWQnKXt0aGlzLmdldFBlclBsYXliYWNrT2JqZWN0XyhldmVudC5hcmdzLmlkKS5wcm9jZXNzT25FbmRlZChldmVudC5zdGFydCxldmVudC5hcmdzLmR1cmF0aW9uKTt9fX0KY2FsY3VsYXRlRHJvcHBlZEZyYW1lQ291bnRzKHZpZGVvVGhyZWFkcyl7Zm9yKGNvbnN0IHRocmVhZCBvZiB2aWRlb1RocmVhZHMpe2Zvcihjb25zdCBldmVudCBvZiB0aHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKGV2ZW50LnRpdGxlPT09J1ZpZGVvRnJhbWVzRHJvcHBlZCcpe3RoaXMuZ2V0UGVyUGxheWJhY2tPYmplY3RfKGV2ZW50LmFyZ3MuaWQpLnByb2Nlc3NWaWRlb0ZyYW1lc0Ryb3BwZWQoZXZlbnQuYXJncy5jb3VudCk7fX19fQphZGRNZXRyaWNUb0hpc3RvZ3JhbXMoaGlzdG9ncmFtcyl7Zm9yKGNvbnN0W2lkLHBsYXliYWNrRGF0YV1vZiB0aGlzLnBsYXliYWNrSWRUb0RhdGFNYXBfKXtwbGF5YmFja0RhdGEuYWRkTWV0cmljVG9IaXN0b2dyYW1zKGhpc3RvZ3JhbXMpO319CmdldFBlclBsYXliYWNrT2JqZWN0XyhwbGF5YmFja0lkKXtsZXQgcGVyUGxheWJhY2tPYmplY3Q9dGhpcy5wbGF5YmFja0lkVG9EYXRhTWFwXy5nZXQocGxheWJhY2tJZCk7aWYocGVyUGxheWJhY2tPYmplY3Q9PT11bmRlZmluZWQpe3BlclBsYXliYWNrT2JqZWN0PW5ldyBQZXJQbGF5YmFja0RhdGEodW5kZWZpbmVkKTt0aGlzLnBsYXliYWNrSWRUb0RhdGFNYXBfLnNldChwbGF5YmFja0lkLHBlclBsYXliYWNrT2JqZWN0KTt9CnJldHVybiBwZXJQbGF5YmFja09iamVjdDt9fQpjbGFzcyBQZXJQbGF5YmFja0RhdGF7Y29uc3RydWN0b3IocGxheVN0YXJ0VGltZSl7dGhpcy5wbGF5U3RhcnRfPXBsYXlTdGFydFRpbWU7dGhpcy50aW1lVG9WaWRlb1BsYXlfPXVuZGVmaW5lZDt0aGlzLnRpbWVUb0F1ZGlvUGxheV89dW5kZWZpbmVkO3RoaXMuYnVmZmVyaW5nVGltZV89dW5kZWZpbmVkO3RoaXMuZHJvcHBlZEZyYW1lQ291bnRfPTA7dGhpcy5zZWVrRXJyb3JfPWZhbHNlO3RoaXMuc2Vla1RpbWVzXz1uZXcgTWFwKCk7dGhpcy5jdXJyZW50U2Vla189dW5kZWZpbmVkO30KZ2V0IHRpbWVUb1ZpZGVvUGxheSgpe3JldHVybiB0aGlzLnRpbWVUb1ZpZGVvUGxheV87fQpnZXQgdGltZVRvQXVkaW9QbGF5KCl7cmV0dXJuIHRoaXMudGltZVRvQXVkaW9QbGF5Xzt9CmdldCBidWZmZXJpbmdUaW1lKCl7cmV0dXJuIHRoaXMuYnVmZmVyaW5nVGltZV87fQpnZXQgZHJvcHBlZEZyYW1lQ291bnQoKXtyZXR1cm4odGhpcy50aW1lVG9WaWRlb1BsYXlfIT09dW5kZWZpbmVkKT90aGlzLmRyb3BwZWRGcmFtZUNvdW50Xzp1bmRlZmluZWQ7fQpnZXQgc2Vla1RpbWVzKCl7aWYodGhpcy5zZWVrRXJyb3JffHx0aGlzLmN1cnJlbnRTZWVrXyE9PXVuZGVmaW5lZClyZXR1cm4gbmV3IE1hcCgpO3JldHVybiB0aGlzLnNlZWtUaW1lc187fQpwcm9jZXNzVmlkZW9SZW5kZXJUaW1lKHZpZGVvUmVuZGVyVGltZSl7aWYodGhpcy5wbGF5U3RhcnRfIT09dW5kZWZpbmVkJiZ0aGlzLnRpbWVUb1ZpZGVvUGxheV89PT11bmRlZmluZWQpe3RoaXMudGltZVRvVmlkZW9QbGF5Xz12aWRlb1JlbmRlclRpbWUtdGhpcy5wbGF5U3RhcnRfO319CnByb2Nlc3NBdWRpb1JlbmRlclRpbWUoYXVkaW9SZW5kZXJUaW1lKXtpZih0aGlzLnBsYXlTdGFydF8hPT11bmRlZmluZWQmJnRoaXMudGltZVRvQXVkaW9QbGF5Xz09PXVuZGVmaW5lZCl7dGhpcy50aW1lVG9BdWRpb1BsYXlfPWF1ZGlvUmVuZGVyVGltZS10aGlzLnBsYXlTdGFydF87fX0KcHJvY2Vzc1ZpZGVvRnJhbWVzRHJvcHBlZChjb3VudCl7dGhpcy5kcm9wcGVkRnJhbWVDb3VudF8rPWNvdW50O30KcHJvY2Vzc0RvU2Vlayh0YXJnZXQsc3RhcnRUaW1lKXtpZih0aGlzLmN1cnJlbnRTZWVrXyE9PXVuZGVmaW5lZCl7dGhpcy5zZWVrRXJyb3JfPXRydWU7cmV0dXJuO30KdGhpcy5jdXJyZW50U2Vla189e3RhcmdldCxzdGFydFRpbWV9O3RoaXMuc2Vla1RpbWVzXy5zZXQodGFyZ2V0LHRoaXMuY3VycmVudFNlZWtfKTt9CnByb2Nlc3NPblBpcGVsaW5lU2Vla2VkKHRhcmdldCx0aW1lKXtpZih0aGlzLnNlZWtFcnJvcl8pcmV0dXJuO2NvbnN0IGN1cnJlbnRTZWVrPXRoaXMuY3VycmVudFNlZWtfO2lmKGN1cnJlbnRTZWVrPT09dW5kZWZpbmVkKXtyZXR1cm47fQppZihjdXJyZW50U2Vlay50YXJnZXQhPT10YXJnZXQpe3RoaXMuc2Vla0Vycm9yXz10cnVlO3JldHVybjt9CmlmKGN1cnJlbnRTZWVrLnBpcGVsaW5lU2Vla1RpbWUhPT11bmRlZmluZWQpe3RoaXMuc2Vla0Vycm9yXz10cnVlO3JldHVybjt9CmN1cnJlbnRTZWVrLnBpcGVsaW5lU2Vla1RpbWU9dGltZS1jdXJyZW50U2Vlay5zdGFydFRpbWU7fQpwcm9jZXNzQnVmZmVyaW5nSGF2ZUVub3VnaCh0aW1lKXtpZih0aGlzLnNlZWtFcnJvcl8pcmV0dXJuO2NvbnN0IGN1cnJlbnRTZWVrPXRoaXMuY3VycmVudFNlZWtfO2lmKGN1cnJlbnRTZWVrPT09dW5kZWZpbmVkKXtyZXR1cm47fQppZihjdXJyZW50U2Vlay5waXBlbGluZVNlZWtUaW1lPT09dW5kZWZpbmVkKXtyZXR1cm47fQpjdXJyZW50U2Vlay5zZWVrVGltZT10aW1lLWN1cnJlbnRTZWVrLnN0YXJ0VGltZTt0aGlzLmN1cnJlbnRTZWVrXz11bmRlZmluZWQ7fQpwcm9jZXNzT25FbmRlZChwbGF5RW5kVGltZSxkdXJhdGlvbil7aWYodGhpcy5wbGF5U3RhcnRfPT09dW5kZWZpbmVkKXJldHVybjtpZih0aGlzLnNlZWtUaW1lc18uc2l6ZSE9PTB8fHRoaXMuc2Vla0Vycm9yXylyZXR1cm47aWYodGhpcy5idWZmZXJpbmdUaW1lXyE9PXVuZGVmaW5lZClyZXR1cm47ZHVyYXRpb249dHIuYi5jb252ZXJ0VW5pdChkdXJhdGlvbix0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTk9ORSx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO2NvbnN0IHBsYXlUaW1lPXBsYXlFbmRUaW1lLXRoaXMucGxheVN0YXJ0XztpZih0aGlzLnRpbWVUb1ZpZGVvUGxheV8hPT11bmRlZmluZWQpe3RoaXMuYnVmZmVyaW5nVGltZV89cGxheVRpbWUtZHVyYXRpb24tdGhpcy50aW1lVG9WaWRlb1BsYXlfO31lbHNlIGlmKHRoaXMudGltZVRvQXVkaW9QbGF5IT09dW5kZWZpbmVkKXt0aGlzLmJ1ZmZlcmluZ1RpbWVfPXBsYXlUaW1lLWR1cmF0aW9uLXRoaXMudGltZVRvQXVkaW9QbGF5Xzt9fQphZGRNZXRyaWNUb0hpc3RvZ3JhbXMoaGlzdG9ncmFtcyl7dGhpcy5hZGRTYW1wbGVfKGhpc3RvZ3JhbXMsJ3RpbWVfdG9fdmlkZW9fcGxheScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0aGlzLnRpbWVUb1ZpZGVvUGxheSk7dGhpcy5hZGRTYW1wbGVfKGhpc3RvZ3JhbXMsJ3RpbWVfdG9fYXVkaW9fcGxheScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0aGlzLnRpbWVUb0F1ZGlvUGxheSk7dGhpcy5hZGRTYW1wbGVfKGhpc3RvZ3JhbXMsJ2Ryb3BwZWRfZnJhbWVfY291bnQnLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHRoaXMuZHJvcHBlZEZyYW1lQ291bnQpO2Zvcihjb25zdFtrZXksdmFsdWVdb2YgdGhpcy5zZWVrVGltZXMuZW50cmllcygpKXtjb25zdCBrZXlTdHJpbmc9a2V5LnRvU3RyaW5nKCkucmVwbGFjZSgnLicsJ18nKTt0aGlzLmFkZFNhbXBsZV8oaGlzdG9ncmFtcywncGlwZWxpbmVfc2Vla190aW1lXycra2V5U3RyaW5nLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsdmFsdWUucGlwZWxpbmVTZWVrVGltZSk7dGhpcy5hZGRTYW1wbGVfKGhpc3RvZ3JhbXMsJ3NlZWtfdGltZV8nK2tleVN0cmluZyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHZhbHVlLnNlZWtUaW1lKTt9CnRoaXMuYWRkU2FtcGxlXyhoaXN0b2dyYW1zLCdidWZmZXJpbmdfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0aGlzLmJ1ZmZlcmluZ1RpbWUpO30KYWRkU2FtcGxlXyhoaXN0b2dyYW1zLG5hbWUsdW5pdCxzYW1wbGUpe2lmKHNhbXBsZT09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaGlzdG9ncmFtPWhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtTmFtZWQobmFtZSk7aWYoaGlzdG9ncmFtPT09dW5kZWZpbmVkKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShuYW1lLHVuaXQsc2FtcGxlKTt9ZWxzZXtoaXN0b2dyYW0uYWRkU2FtcGxlKHNhbXBsZSk7fX19CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobWVkaWFNZXRyaWMpO3JldHVybnttZWRpYU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5yZW5kZXJpbmcnLGZ1bmN0aW9uKCl7Y29uc3QgVU5LTk9XTl9USFJFQURfTkFNRT0nVW5rbm93bic7Y29uc3QgQ0FURUdPUllfVEhSRUFEX01BUD1uZXcgTWFwKCk7Q0FURUdPUllfVEhSRUFEX01BUC5zZXQoJ3RvdGFsX2FsbCcsWy8uKi9dKTtDQVRFR09SWV9USFJFQURfTUFQLnNldCgnYnJvd3NlcicsWy9eQnJvd3NlciBDb21wb3NpdG9yJC8sL15DckJyb3dzZXJNYWluJC9dKTtDQVRFR09SWV9USFJFQURfTUFQLnNldCgnZGlzcGxheV9jb21wb3NpdG9yJyxbL15WaXpDb21wb3NpdG9yVGhyZWFkJC9dKTtDQVRFR09SWV9USFJFQURfTUFQLnNldCgnR1BVJyxbL15DaHJvbWVfSW5Qcm9jR3B1VGhyZWFkJC8sL15DckdwdU1haW4kL10pO0NBVEVHT1JZX1RIUkVBRF9NQVAuc2V0KCdJTycsWy9JT1RocmVhZC9dKTtDQVRFR09SWV9USFJFQURfTUFQLnNldCgncmFzdGVyJyxbL0NvbXBvc2l0b3JUaWxlV29ya2VyL10pO0NBVEVHT1JZX1RIUkVBRF9NQVAuc2V0KCdyZW5kZXJlcl9jb21wb3NpdG9yJyxbL15Db21wb3NpdG9yJC9dKTtDQVRFR09SWV9USFJFQURfTUFQLnNldCgncmVuZGVyZXJfbWFpbicsWy9eQ3JSZW5kZXJlck1haW4kL10pO0NBVEVHT1JZX1RIUkVBRF9NQVAuc2V0KCd0b3RhbF9yZW5kZXJpbmcnLFsvXkJyb3dzZXIgQ29tcG9zaXRvciQvLC9eQ2hyb21lX0luUHJvY0dwdVRocmVhZCQvLC9eQ29tcG9zaXRvciQvLC9Db21wb3NpdG9yVGlsZVdvcmtlci8sL15DckJyb3dzZXJNYWluJC8sL15DckdwdU1haW4kLywvXkNyUmVuZGVyZXJNYWluJC8sL0lPVGhyZWFkLywvXlZpekNvbXBvc2l0b3JUaHJlYWQkL10pO2NvbnN0IEFMTF9DQVRFR09SSUVTPVsuLi5DQVRFR09SWV9USFJFQURfTUFQLmtleXMoKSwnb3RoZXInXTtmdW5jdGlvbiBhZGRWYWx1ZVRvTWFwXyhtYXAsa2V5LHZhbHVlKXtjb25zdCBvbGRWYWx1ZT1tYXAuZ2V0KGtleSl8fDA7bWFwLnNldChrZXksb2xkVmFsdWUrdmFsdWUpO30KZnVuY3Rpb24gY2F0ZWdvcnlTaG91bGRIYXZlQnJlYWtkb3duKGNhdGVnb3J5KXtyZXR1cm4gY2F0ZWdvcnk9PT0ndG90YWxfYWxsJ3x8Y2F0ZWdvcnk9PT0ndG90YWxfcmVuZGVyaW5nJzt9CmZ1bmN0aW9uKmdldENhdGVnb3JpZXNfKHRocmVhZE5hbWUpe2xldCBpc090aGVyPXRydWU7Zm9yKGNvbnN0W2NhdGVnb3J5LHJlZ2V4cHNdb2YgQ0FURUdPUllfVEhSRUFEX01BUCl7Zm9yKGNvbnN0IHJlZ2V4cCBvZiByZWdleHBzKXtpZihyZWdleHAudGVzdCh0aHJlYWROYW1lKSl7aWYoY2F0ZWdvcnkhPT0ndG90YWxfYWxsJylpc090aGVyPWZhbHNlO3lpZWxkIGNhdGVnb3J5O2JyZWFrO319fQppZihpc090aGVyKXlpZWxkJ290aGVyJzt9CmZ1bmN0aW9uIGlzU3Vic2V0XyhyZWdleHBzMSxyZWdleHBzMil7Zm9yKGNvbnN0IHIxIG9mIHJlZ2V4cHMxKXtpZihyZWdleHBzMi5maW5kKHIyPT5yMi50b1N0cmluZygpPT09cjEudG9TdHJpbmcoKSk9PT11bmRlZmluZWQpe3JldHVybiBmYWxzZTt9fQpyZXR1cm4gdHJ1ZTt9CmZ1bmN0aW9uIGFkZENwdVV0aWxpemF0aW9uSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzLHNob3VsZE5vcm1hbGl6ZSxzZWdtZW50Q29zdEZ1bmMsaGlzdG9ncmFtTmFtZUZ1bmMsZGVzY3JpcHRpb24sdW5pdCl7aWYoIXVuaXQpdW5pdD10ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyO2NvbnN0IGhpc3RvZ3JhbU1hcD1uZXcgTWFwKCk7Zm9yKGNvbnN0IGNhdGVnb3J5IG9mIEFMTF9DQVRFR09SSUVTKXtjb25zdCBoaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oaGlzdG9ncmFtTmFtZUZ1bmMoY2F0ZWdvcnkpLHVuaXQsW10se2JpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsNTAsMjApLGRlc2NyaXB0aW9uLHN1bW1hcnlPcHRpb25zOnRyLm1ldHJpY3MucmVuZGVyaW5nLlNVTU1BUllfT1BUSU9OUyx9KTtoaXN0b2dyYW1NYXAuc2V0KGNhdGVnb3J5LGhpc3RvZ3JhbSk7fQpmb3IoY29uc3RbY2F0ZWdvcnkscmVnZXhwc11vZiBDQVRFR09SWV9USFJFQURfTUFQKXtjb25zdCByZWxhdGVkQ2F0ZWdvcmllcz1uZXcgdHIudi5kLlJlbGF0ZWROYW1lTWFwKCk7Y29uc3QgaGlzdG9ncmFtPWhpc3RvZ3JhbU1hcC5nZXQoY2F0ZWdvcnkpO2Zvcihjb25zdFtvdGhlckNhdGVnb3J5LG90aGVyUmVnZXhwc11vZiBDQVRFR09SWV9USFJFQURfTUFQKXtpZihvdGhlckNhdGVnb3J5PT09Y2F0ZWdvcnkpY29udGludWU7aWYoY2F0ZWdvcnkhPT0nYWxsJyYmIWlzU3Vic2V0XyhvdGhlclJlZ2V4cHMscmVnZXhwcykpY29udGludWU7Y29uc3Qgb3RoZXJIaXN0b2dyYW09aGlzdG9ncmFtTWFwLmdldChvdGhlckNhdGVnb3J5KTtyZWxhdGVkQ2F0ZWdvcmllcy5zZXQob3RoZXJDYXRlZ29yeSxvdGhlckhpc3RvZ3JhbS5uYW1lKTt9CmlmKFsuLi5yZWxhdGVkQ2F0ZWdvcmllcy52YWx1ZXMoKV0ubGVuZ3RoPjApe2hpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ2JyZWFrZG93bicscmVsYXRlZENhdGVnb3JpZXMpO319CmZvcihjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtjb25zdCB0aHJlYWRWYWx1ZXM9bmV3IE1hcCgpO2Zvcihjb25zdCB0aHJlYWQgb2YgbW9kZWwuZ2V0QWxsVGhyZWFkcygpKXthZGRWYWx1ZVRvTWFwXyh0aHJlYWRWYWx1ZXMsdGhyZWFkLm5hbWV8fFVOS05PV05fVEhSRUFEX05BTUUsc2VnbWVudENvc3RGdW5jKHRocmVhZCxzZWdtZW50KSk7fQpjb25zdCBjYXRlZ29yeVZhbHVlcz1uZXcgTWFwKCk7Y29uc3QgYnJlYWtkb3ducz1uZXcgTWFwKCk7Zm9yKGNvbnN0W3RocmVhZE5hbWUsY29yZXNQZXJTZWNdb2YgdGhyZWFkVmFsdWVzKXtmb3IoY29uc3QgY2F0ZWdvcnkgb2YgZ2V0Q2F0ZWdvcmllc18odGhyZWFkTmFtZSkpe2FkZFZhbHVlVG9NYXBfKGNhdGVnb3J5VmFsdWVzLGNhdGVnb3J5LGNvcmVzUGVyU2VjKTtpZighY2F0ZWdvcnlTaG91bGRIYXZlQnJlYWtkb3duKGNhdGVnb3J5KSljb250aW51ZTtpZighYnJlYWtkb3ducy5oYXMoY2F0ZWdvcnkpKXticmVha2Rvd25zLnNldChjYXRlZ29yeSxuZXcgdHIudi5kLkJyZWFrZG93bigpKTt9CmJyZWFrZG93bnMuZ2V0KGNhdGVnb3J5KS5zZXQodGhyZWFkTmFtZSxjb3Jlc1BlclNlYyk7fX0KZm9yKGNvbnN0IGNhdGVnb3J5IG9mIEFMTF9DQVRFR09SSUVTKXtsZXQgdmFsdWU9Y2F0ZWdvcnlWYWx1ZXMuZ2V0KGNhdGVnb3J5KXx8MDtpZihzaG91bGROb3JtYWxpemUpdmFsdWUvPXNlZ21lbnQuZHVyYXRpb247Y29uc3QgZGlhZ25vc3RpY3M9bmV3IHRyLnYuZC5EaWFnbm9zdGljTWFwKCk7Y29uc3QgYnJlYWtkb3duPWJyZWFrZG93bnMuZ2V0KGNhdGVnb3J5KTtpZihicmVha2Rvd24pZGlhZ25vc3RpY3Muc2V0KCdicmVha2Rvd24nLGJyZWFrZG93bik7Y29uc3QgaGlzdG9ncmFtPWhpc3RvZ3JhbU1hcC5nZXQoY2F0ZWdvcnkpO2hpc3RvZ3JhbS5hZGRTYW1wbGUodmFsdWUsZGlhZ25vc3RpY3MpO319fQpjb25zdCBTVU1NQVJZX09QVElPTlM9e3BlcmNlbnRpbGU6WzAuOTAsMC45NV0sY2k6WzAuOTVdLH07cmV0dXJue2FkZENwdVV0aWxpemF0aW9uSGlzdG9ncmFtcyxTVU1NQVJZX09QVElPTlMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MucmVuZGVyaW5nJyxmdW5jdGlvbigpe2NvbnN0IFBSRVNFTlRfRVZFTlQ9J0Rpc3BsYXk6OkZyYW1lRGlzcGxheWVkJztjb25zdCBESVNQTEFZX0VWRU5UPSdCZW5jaG1hcmtJbnN0cnVtZW50YXRpb246OkRpc3BsYXlSZW5kZXJpbmdTdGF0cyc7Y29uc3QgRFJNX0VWRU5UPSdEcm1FdmVudEZsaXBDb21wbGV0ZSc7Y29uc3QgU1VSRkFDRV9GTElOR0VSX0VWRU5UPSd2c3luY19iZWZvcmUnO2NvbnN0IENPTVBPU0lUT1JfRlJBTUVfUFJFU0VOVEVEX0VWRU5UPSdGcmFtZVByZXNlbnRlZCc7Y29uc3QgTUlOX0ZSQU1FX0xFTkdUSD0wLjU7Y29uc3QgTUlOX0ZSQU1FX0NPVU5UPTEwO2NvbnN0IFBBVVNFX1RIUkVTSE9MRD0yMDtjb25zdCBBU0hfRU5WSVJPTk1FTlQ9J2FzaCc7Y29uc3QgQlJPV1NFUl9FTlZJUk9OTUVOVD0nYnJvd3Nlcic7Y2xhc3MgRnJhbWVFdmVudHtjb25zdHJ1Y3RvcihldmVudCl7dGhpcy5ldmVudF89ZXZlbnQ7fQpnZXQgZXZlbnRTdGFydCgpe3JldHVybiB0aGlzLmV2ZW50Xy5zdGFydDt9CmdldCBmcmFtZVN0YXJ0KCl7aWYodGhpcy5ldmVudF8udGl0bGUhPT1EUk1fRVZFTlQpcmV0dXJuIHRoaXMuZXZlbnRfLnN0YXJ0O2NvbnN0IGRhdGE9dGhpcy5ldmVudF8uYXJncy5kYXRhO2NvbnN0IFRJTUU9dHIuYi5Vbml0U2NhbGUuVElNRTtyZXR1cm4gdHIuYi5jb252ZXJ0VW5pdChkYXRhWyd2YmxhbmsudHZfc2VjJ10sVElNRS5TRUMsVElNRS5NSUxMSV9TRUMpKwp0ci5iLmNvbnZlcnRVbml0KGRhdGFbJ3ZibGFuay50dl91c2VjJ10sVElNRS5NSUNST19TRUMsVElNRS5NSUxMSV9TRUMpO30KZ2V0IGV2ZW50KCl7cmV0dXJuIHRoaXMuZXZlbnRfO319CmNsYXNzIEZyYW1lU2VnbWVudHtjb25zdHJ1Y3RvcihmcmFtZUV2ZW50LGR1cmF0aW9uKXt0aGlzLmZyYW1lRXZlbnRfPWZyYW1lRXZlbnQ7dGhpcy5kdXJhdGlvbl89ZHVyYXRpb247dGhpcy5zZWdtZW50Xz1uZXcgdHIubW9kZWwudW0uU2VnbWVudChmcmFtZUV2ZW50LmV2ZW50U3RhcnQsZHVyYXRpb24pO3RoaXMubGVuZ3RoXz11bmRlZmluZWQ7fQp1cGRhdGVMZW5ndGgocmVmcmVzaFBlcmlvZCl7dGhpcy5sZW5ndGhfPXRoaXMuZHVyYXRpb25fL3JlZnJlc2hQZXJpb2Q7fQpnZXQgc2VnbWVudCgpe3JldHVybiB0aGlzLnNlZ21lbnRfO30KZ2V0IGJvdW5kc1JhbmdlKCl7cmV0dXJuIHRoaXMuc2VnbWVudF8uYm91bmRzUmFuZ2U7fQpnZXQgbGVuZ3RoKCl7cmV0dXJuIHRoaXMubGVuZ3RoXzt9CmdldCBkdXJhdGlvbigpe3JldHVybiB0aGlzLmR1cmF0aW9uXzt9CmdldCBldmVudCgpe3JldHVybiB0aGlzLmZyYW1lRXZlbnRfLmV2ZW50O319CmZ1bmN0aW9uIGdldERpc3BsYXlDb21wb3NpdG9yUHJlc2VudGF0aW9uRXZlbnRzRXhwXyhtb2RlbEhlbHBlcil7aWYoIW1vZGVsSGVscGVyKXJldHVybltdO2Z1bmN0aW9uIGZpbmRFdmVudHNGcm9tUHJvY2Vzcyhwcm9jZXNzKXtjb25zdCBldmVudHM9W107Zm9yKGNvbnN0IGV2ZW50IG9mIHByb2Nlc3MuZmluZFRvcG1vc3RTbGljZXNOYW1lZChQUkVTRU5UX0VWRU5UKSl7ZXZlbnRzLnB1c2goZXZlbnQpO30KcmV0dXJuIGV2ZW50czt9CmlmKG1vZGVsSGVscGVyLmdwdUhlbHBlcil7Y29uc3QgZXZlbnRzPWZpbmRFdmVudHNGcm9tUHJvY2Vzcyhtb2RlbEhlbHBlci5ncHVIZWxwZXIucHJvY2Vzcyk7aWYoZXZlbnRzLmxlbmd0aD4wKXJldHVybiBldmVudHM7fQppZighbW9kZWxIZWxwZXIuYnJvd3NlclByb2Nlc3MpcmV0dXJuW107cmV0dXJuIGZpbmRFdmVudHNGcm9tUHJvY2Vzcyhtb2RlbEhlbHBlci5icm93c2VyUHJvY2Vzcyk7fQpmdW5jdGlvbiBnZXREaXNwbGF5Q29tcG9zaXRvclByZXNlbnRhdGlvbkV2ZW50c18obW9kZWxIZWxwZXIpe2lmKCFtb2RlbEhlbHBlcnx8IW1vZGVsSGVscGVyLmJyb3dzZXJQcm9jZXNzKXJldHVybltdO2xldCBldmVudHM9W107aWYobW9kZWxIZWxwZXIuc3VyZmFjZUZsaW5nZXJQcm9jZXNzKXtldmVudHM9Wy4uLm1vZGVsSGVscGVyLnN1cmZhY2VGbGluZ2VyUHJvY2Vzcy5maW5kVG9wbW9zdFNsaWNlc05hbWVkKFNVUkZBQ0VfRkxJTkdFUl9FVkVOVCldO2lmKGV2ZW50cy5sZW5ndGg+MClyZXR1cm4gZXZlbnRzO30KaWYobW9kZWxIZWxwZXIuZ3B1SGVscGVyKXtjb25zdCBncHVQcm9jZXNzPW1vZGVsSGVscGVyLmdwdUhlbHBlci5wcm9jZXNzO2V2ZW50cz1bLi4uZ3B1UHJvY2Vzcy5maW5kVG9wbW9zdFNsaWNlc05hbWVkKERSTV9FVkVOVCldO2lmKGV2ZW50cy5sZW5ndGg+MClyZXR1cm4gZXZlbnRzO2V2ZW50cz1bLi4uZ3B1UHJvY2Vzcy5maW5kVG9wbW9zdFNsaWNlc05hbWVkKERJU1BMQVlfRVZFTlQpXTtpZihldmVudHMubGVuZ3RoPjApcmV0dXJuIGV2ZW50czt9CnJldHVyblsuLi5tb2RlbEhlbHBlci5icm93c2VyUHJvY2Vzcy5maW5kVG9wbW9zdFNsaWNlc05hbWVkKERJU1BMQVlfRVZFTlQpXTt9CmZ1bmN0aW9uIGdldFVJUHJlc2VudGF0aW9uRXZlbnRzXyhtb2RlbEhlbHBlcil7aWYoIW1vZGVsSGVscGVyfHwhbW9kZWxIZWxwZXIuYnJvd3NlclByb2Nlc3MpcmV0dXJuW107Y29uc3QgbGVnYWN5RXZlbnRzPVtdO2NvbnN0IGV2ZW50c0J5RW52aXJvbm1lbnQ9e307ZXZlbnRzQnlFbnZpcm9ubWVudFtBU0hfRU5WSVJPTk1FTlRdPVtdO2V2ZW50c0J5RW52aXJvbm1lbnRbQlJPV1NFUl9FTlZJUk9OTUVOVF09W107Zm9yKGNvbnN0IGV2ZW50IG9mIG1vZGVsSGVscGVyLmJyb3dzZXJQcm9jZXNzLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoQ09NUE9TSVRPUl9GUkFNRV9QUkVTRU5URURfRVZFTlQpKXtpZighKCdlbnZpcm9ubWVudCdpbiBldmVudC5hcmdzKSl7bGVnYWN5RXZlbnRzLnB1c2goZXZlbnQpO31lbHNle2V2ZW50c0J5RW52aXJvbm1lbnRbZXZlbnQuYXJncy5lbnZpcm9ubWVudF0ucHVzaChldmVudCk7fX0KaWYoZXZlbnRzQnlFbnZpcm9ubWVudFtBU0hfRU5WSVJPTk1FTlRdLmxlbmd0aD4wKXtyZXR1cm4gZXZlbnRzQnlFbnZpcm9ubWVudFtBU0hfRU5WSVJPTk1FTlRdO30KaWYoZXZlbnRzQnlFbnZpcm9ubWVudFtCUk9XU0VSX0VOVklST05NRU5UXS5sZW5ndGg+MCl7cmV0dXJuIGV2ZW50c0J5RW52aXJvbm1lbnRbQlJPV1NFUl9FTlZJUk9OTUVOVF07fQpyZXR1cm4gbGVnYWN5RXZlbnRzO30KZnVuY3Rpb24gY29tcHV0ZUZyYW1lU2VnbWVudHNfKGV2ZW50cyxzZWdtZW50cyxvcHRfbWluRnJhbWVDb3VudCl7Y29uc3QgbWluRnJhbWVDb3VudD1vcHRfbWluRnJhbWVDb3VudHx8TUlOX0ZSQU1FX0NPVU5UO2NvbnN0IGZyYW1lRXZlbnRzPWV2ZW50cy5tYXAoZT0+bmV3IEZyYW1lRXZlbnQoZSkpO2NvbnN0IGZyYW1lU2VnbWVudHM9W107Zm9yKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe2NvbnN0IGZpbHRlcmVkPXNlZ21lbnQuYm91bmRzUmFuZ2UuZmlsdGVyQXJyYXkoZnJhbWVFdmVudHMseD0+eC5ldmVudFN0YXJ0KTtpZihmaWx0ZXJlZC5sZW5ndGg8bWluRnJhbWVDb3VudCljb250aW51ZTtmb3IobGV0IGk9MTtpPGZpbHRlcmVkLmxlbmd0aDtpKyspe2NvbnN0IGR1cmF0aW9uPWZpbHRlcmVkW2ldLmZyYW1lU3RhcnQtZmlsdGVyZWRbaS0xXS5mcmFtZVN0YXJ0O2ZyYW1lU2VnbWVudHMucHVzaChuZXcgRnJhbWVTZWdtZW50KGZpbHRlcmVkW2ktMV0sZHVyYXRpb24pKTt9fQpyZXR1cm4gZnJhbWVTZWdtZW50czt9CmZ1bmN0aW9uIGFkZEJhc2ljRnJhbWVUaW1lSGlzdG9ncmFtc18oaGlzdG9ncmFtcyxmcmFtZVNlZ21lbnRzLHByZWZpeCl7Y29uc3QgZnJhbWVUaW1lcz0oZnJhbWVTZWdtZW50cy5sZW5ndGg9PT0wKT9bMF06ZnJhbWVTZWdtZW50cy5tYXAoeD0+eC5kdXJhdGlvbik7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYCR7cHJlZml4fWZyYW1lX3RpbWVzYCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLGZyYW1lVGltZXMse2JpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDUwLDIwKSxkZXNjcmlwdGlvbjonUmF3IGZyYW1lIHRpbWVzLicsc3VtbWFyeU9wdGlvbnM6dHIubWV0cmljcy5yZW5kZXJpbmcuU1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke3ByZWZpeH1wZXJjZW50YWdlX3Ntb290aGAsdHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9iaWdnZXJJc0JldHRlciwxMDAqdHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKGZyYW1lVGltZXMsKHg9Pih4PDE3PzE6MCkpKS9mcmFtZVRpbWVzLmxlbmd0aCx7ZGVzY3JpcHRpb246J1BlcmNlbnRhZ2Ugb2YgZnJhbWVzIHRoYXQgd2VyZSBoaXR0aW5nIDYwIEZQUy4nLHN1bW1hcnlPcHRpb25zOnt9LH0pO30KZnVuY3Rpb24gYWRkRnJhbWVUaW1lSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzLG9wdF9taW5GcmFtZUNvdW50KXtjb25zdCBtaW5GcmFtZUNvdW50PW9wdF9taW5GcmFtZUNvdW50fHxNSU5fRlJBTUVfQ09VTlQ7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Y29uc3QgZXZlbnRzPWdldERpc3BsYXlDb21wb3NpdG9yUHJlc2VudGF0aW9uRXZlbnRzXyhtb2RlbEhlbHBlcik7aWYoIWV2ZW50cylyZXR1cm47YWRkRnJhbWVUaW1lSGlzdG9ncmFtc0hlbHBlcihoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzLGV2ZW50cywnJyx0cnVlLG1pbkZyYW1lQ291bnQpO2NvbnN0IGV2ZW50c0V4cD1nZXREaXNwbGF5Q29tcG9zaXRvclByZXNlbnRhdGlvbkV2ZW50c0V4cF8obW9kZWxIZWxwZXIpO2lmKGV2ZW50c0V4cCYmZXZlbnRzRXhwLmxlbmd0aD4wKXthZGRGcmFtZVRpbWVIaXN0b2dyYW1zSGVscGVyKGhpc3RvZ3JhbXMsbW9kZWwsc2VnbWVudHMsZXZlbnRzRXhwLCdleHBfJyxtaW5GcmFtZUNvdW50KTt9fQpmdW5jdGlvbiBhZGRGcmFtZVRpbWVIaXN0b2dyYW1zSGVscGVyKGhpc3RvZ3JhbXMsbW9kZWwsc2VnbWVudHMsZXZlbnRzLHByZWZpeCxhZGRDcHVNZXRyaWNzLG1pbkZyYW1lQ291bnQpe2NvbnN0IGZyYW1lU2VnbWVudHM9Y29tcHV0ZUZyYW1lU2VnbWVudHNfKGV2ZW50cyxzZWdtZW50cyxtaW5GcmFtZUNvdW50KTthZGRCYXNpY0ZyYW1lVGltZUhpc3RvZ3JhbXNfKGhpc3RvZ3JhbXMsZnJhbWVTZWdtZW50cyxwcmVmaXgrJycpO2lmKGFkZENwdU1ldHJpY3Mpe3RyLm1ldHJpY3MucmVuZGVyaW5nLmFkZENwdVV0aWxpemF0aW9uSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLGZyYW1lU2VnbWVudHMsZmFsc2UsKHRocmVhZCxzZWdtZW50KT0+dGhyZWFkLmdldENwdVRpbWVGb3JSYW5nZShzZWdtZW50LmJvdW5kc1JhbmdlKSxjYXRlZ29yeT0+YHRocmVhZF8ke2NhdGVnb3J5fV9jcHVfdGltZV9wZXJfZnJhbWVgLCdDUFUgY29yZXMgb2YgYSB0aHJlYWQgZ3JvdXAgcGVyIGZyYW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTt0ci5tZXRyaWNzLnJlbmRlcmluZy5hZGRDcHVVdGlsaXphdGlvbkhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxmcmFtZVNlZ21lbnRzLGZhbHNlLCh0aHJlYWQsc2VnbWVudCk9PnRocmVhZC5nZXROdW1Ub3BsZXZlbFNsaWNlc0ZvclJhbmdlKHNlZ21lbnQuYm91bmRzUmFuZ2UpLGNhdGVnb3J5PT5gdGFza3NfcGVyX2ZyYW1lXyR7Y2F0ZWdvcnl9YCwnTnVtYmVyIG9mIHRhc2tzIG9mIGEgdGhyZWFkIGdyb3VwIHBlciBmcmFtZScsdHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9zbWFsbGVySXNCZXR0ZXIpO30KY29uc3QgcmVmcmVzaFBlcmlvZD1nZXRSZWZyZXNoUGVyaW9kKG1vZGVsLGZyYW1lU2VnbWVudHMubWFwKGZzPT5mcy5ib3VuZHNSYW5nZSkpO2ZyYW1lU2VnbWVudHMuZm9yRWFjaChmcz0+ZnMudXBkYXRlTGVuZ3RoKHJlZnJlc2hQZXJpb2QpKTtjb25zdCB2YWxpZEZyYW1lcz1mcmFtZVNlZ21lbnRzLmZpbHRlcihmcz0+ZnMubGVuZ3RoPj1NSU5fRlJBTUVfTEVOR1RIKTtjb25zdCB0b3RhbEZyYW1lRHVyYXRpb249dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKGZyYW1lU2VnbWVudHMsZnM9PmZzLmR1cmF0aW9uKTthZGRKYW5rQ291bnRIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsdmFsaWRGcmFtZXMscHJlZml4KTtjb25zdCBmcmFtZUxlbmd0aHM9dmFsaWRGcmFtZXMubWFwKGZyYW1lPT5mcmFtZS5sZW5ndGgpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKHByZWZpeCsnZnJhbWVfbGVuZ3RocycsdHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9zbWFsbGVySXNCZXR0ZXIsZnJhbWVMZW5ndGhzLHtiaW5Cb3VuZGFyaWVzOnRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCw1LDIwKSxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsZGVzY3JpcHRpb246J0ZyYW1lIHRpbWVzIGluIHZzeW5jcy4nfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0ocHJlZml4Kydhdmdfc3VyZmFjZV9mcHMnLHRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXJfYmlnZ2VySXNCZXR0ZXIsZnJhbWVMZW5ndGhzLmxlbmd0aC90ci5iLmNvbnZlcnRVbml0KHRvdGFsRnJhbWVEdXJhdGlvbix0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQyx0ci5iLlVuaXRTY2FsZS5USU1FLlNFQykse2Rlc2NyaXB0aW9uOidBdmVyYWdlIGZyYW1lcyBwZXIgc2Vjb25kLicsc3VtbWFyeU9wdGlvbnM6e30sfSk7fQpmdW5jdGlvbiBhZGRVSUZyYW1lVGltZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxzZWdtZW50cyxvcHRfbWluRnJhbWVDb3VudCl7Y29uc3QgbWluRnJhbWVDb3VudD1vcHRfbWluRnJhbWVDb3VudHx8TUlOX0ZSQU1FX0NPVU5UO2NvbnN0IGV2ZW50cz1nZXRVSVByZXNlbnRhdGlvbkV2ZW50c18obW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcikpO2lmKGV2ZW50cy5sZW5ndGg9PT0wKXJldHVybjtjb25zdCBmcmFtZVNlZ21lbnRzPWNvbXB1dGVGcmFtZVNlZ21lbnRzXyhldmVudHMsc2VnbWVudHMsbWluRnJhbWVDb3VudCk7YWRkQmFzaWNGcmFtZVRpbWVIaXN0b2dyYW1zXyhoaXN0b2dyYW1zLGZyYW1lU2VnbWVudHMsJ3VpXycpO30KZnVuY3Rpb24gYWRkSmFua0NvdW50SGlzdG9ncmFtcyhoaXN0b2dyYW1zLHZhbGlkRnJhbWVzLHByZWZpeCl7Y29uc3QgamFua0V2ZW50cz1bXTtmb3IobGV0IGk9MTtpPHZhbGlkRnJhbWVzLmxlbmd0aDtpKyspe2NvbnN0IGNoYW5nZT1NYXRoLnJvdW5kKCh2YWxpZEZyYW1lc1tpXS5sZW5ndGgtdmFsaWRGcmFtZXNbaS0xXS5sZW5ndGgpKTtpZihjaGFuZ2U+MCYmY2hhbmdlPFBBVVNFX1RIUkVTSE9MRCl7amFua0V2ZW50cy5wdXNoKHZhbGlkRnJhbWVzW2ldLmV2ZW50KTt9fQpjb25zdCBqYW5rQ291bnQ9amFua0V2ZW50cy5sZW5ndGg7Y29uc3QgZGlhZ25vc3RpY3M9bmV3IHRyLnYuZC5EaWFnbm9zdGljTWFwKCk7ZGlhZ25vc3RpY3Muc2V0KCdldmVudHMnLG5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KGphbmtFdmVudHMpKTtkaWFnbm9zdGljcy5zZXQoJ3RpbWVzdGFtcHMnLG5ldyB0ci52LmQuR2VuZXJpY1NldChqYW5rRXZlbnRzLm1hcChlPT5lLnN0YXJ0KSkpO2NvbnN0IGhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShwcmVmaXgrJ2phbmtfY291bnQnLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLHt2YWx1ZTpqYW5rQ291bnQsZGlhZ25vc3RpY3N9LHtkZXNjcmlwdGlvbjonTnVtYmVyIG9mIGNoYW5nZXMgaW4gZnJhbWUgcmF0ZS4nLHN1bW1hcnlPcHRpb25zOnt9LH0pO30KZnVuY3Rpb24gZ2V0UmVmcmVzaFBlcmlvZChtb2RlbCxyYW5nZXMpe2Zvcihjb25zdCBtZXRhZGF0YSBvZiBtb2RlbC5tZXRhZGF0YSl7aWYobWV0YWRhdGEudmFsdWUmJm1ldGFkYXRhLnZhbHVlLnN1cmZhY2VfZmxpbmdlcil7cmV0dXJuIG1ldGFkYXRhLnZhbHVlLnN1cmZhY2VfZmxpbmdlci5yZWZyZXNoX3BlcmlvZDt9fQpjb25zdCBGUkFNRV9MRU5HVEg9MTAwMC4wLzYwO2NvbnN0IEJFR0lOX0ZSQU1FX0FSR1M9J1NjaGVkdWxlcjo6QmVnaW5GcmFtZSc7Y29uc3QgRlJBTUVfSU5URVJWQUw9J2ludGVydmFsX3VzJztjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycykpe2lmKHJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ9PT11bmRlZmluZWQpY29udGludWU7Y29uc3Qgc2xpY2VzPXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQuc2xpY2VHcm91cDtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzLmdldERlc2NlbmRhbnRFdmVudHNJblNvcnRlZFJhbmdlcyhyYW5nZXMpKXtpZihzbGljZS50aXRsZSE9PUJFR0lOX0ZSQU1FX0FSR1MpY29udGludWU7Y29uc3QgZGF0YT1zbGljZS5hcmdzLmFyZ3M7aWYoIShGUkFNRV9JTlRFUlZBTCBpbiBkYXRhKSl7dGhyb3cgbmV3IEVycm9yKGAke0ZSQU1FX0lOVEVSVkFMfSBpcyBtaXNzaW5nYCk7fQpyZXR1cm4gdHIuYi5jb252ZXJ0VW5pdChkYXRhW0ZSQU1FX0lOVEVSVkFMXSx0ci5iLlVuaXRTY2FsZS5USU1FLk1JQ1JPX1NFQyx0ci5iLlVuaXRTY2FsZS5USU1FLk1JTExJX1NFQyk7fX0KcmV0dXJuIEZSQU1FX0xFTkdUSDt9CnJldHVybnthZGRGcmFtZVRpbWVIaXN0b2dyYW1zLGFkZFVJRnJhbWVUaW1lSGlzdG9ncmFtcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5yZW5kZXJpbmcnLGZ1bmN0aW9uKCl7Y29uc3QgUkdCX0RFQ09ERV9FVkVOVD0nSW1hZ2VGcmFtZUdlbmVyYXRvcjo6ZGVjb2RlJztjb25zdCBZVVZfREVDT0RFX0VWRU5UPSdJbWFnZUZyYW1lR2VuZXJhdG9yOjpkZWNvZGVUb1lVVic7Y29uc3QgQkxJTktfR1BVX1JBU1RFUl9ERUNPREVfRVZFTlQ9J0dwdUltYWdlRGVjb2RlQ2FjaGU6OkRlY29kZUltYWdlJztjb25zdCBCTElOS19TT0ZUV0FSRV9SQVNURVJfREVDT0RFX0VWRU5UPSdTb2Z0d2FyZUltYWdlRGVjb2RlQ2FjaGU6OicrJ0RlY29kZUltYWdlSW5UYXNrJztmdW5jdGlvbiBnZXRJbWFnZURlY29kaW5nRXZlbnRzXyhtb2RlbEhlbHBlcixyYW5nZXMpe2lmKCFtb2RlbEhlbHBlcnx8IW1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVycylyZXR1cm5bXTtjb25zdCBldmVudHM9W107Zm9yKGNvbnN0IHJlbmRlcmVyIG9mIE9iamVjdC52YWx1ZXMobW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Zm9yKGNvbnN0IHRocmVhZCBvZiByZW5kZXJlci5yYXN0ZXJXb3JrZXJUaHJlYWRzKXtjb25zdCBzbGljZXM9dGhyZWFkLnNsaWNlR3JvdXA7Zm9yKGNvbnN0IHNsaWNlIG9mIHNsaWNlcy5nZXREZXNjZW5kYW50RXZlbnRzSW5Tb3J0ZWRSYW5nZXMocmFuZ2VzKSl7aWYoc2xpY2UudGl0bGU9PT1SR0JfREVDT0RFX0VWRU5UfHxzbGljZS50aXRsZT09PVlVVl9ERUNPREVfRVZFTlR8fHNsaWNlLnRpdGxlPT09QkxJTktfR1BVX1JBU1RFUl9ERUNPREVfRVZFTlR8fHNsaWNlLnRpdGxlPT09QkxJTktfU09GVFdBUkVfUkFTVEVSX0RFQ09ERV9FVkVOVCl7ZXZlbnRzLnB1c2goc2xpY2UpO319fX0KcmV0dXJuIGV2ZW50czt9CmZ1bmN0aW9uIGFkZEltYWdlRGVjb2RlVGltZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxzZWdtZW50cyl7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Y29uc3QgZGVjb2RlRXZlbnRzPWdldEltYWdlRGVjb2RpbmdFdmVudHNfKG1vZGVsSGVscGVyLHNlZ21lbnRzLm1hcChzPT5zLmJvdW5kc1JhbmdlKSk7aWYoIWRlY29kZUV2ZW50cylyZXR1cm47aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3JnYl9kZWNvZGVfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixkZWNvZGVFdmVudHMuZmlsdGVyKHNsaWNlPT5zbGljZS50aXRsZT09PVJHQl9ERUNPREVfRVZFTlQpLm1hcChzbGljZT0+c2xpY2UuY3B1RHVyYXRpb24pLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gb2YgdGhlIEJsaW5rIFJHQiBkZWNvZGluZyBwYXRoIGZvciBhIGNodW5rICcrJ29mIGltYWdlIGRhdGEgKHBvc3NpYmx5IHRoZSB3aG9sZSBpbWFnZSkuJyxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3l1dl9kZWNvZGVfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixkZWNvZGVFdmVudHMuZmlsdGVyKHNsaWNlPT5zbGljZS50aXRsZT09PVlVVl9ERUNPREVfRVZFTlQpLm1hcChzbGljZT0+c2xpY2UuY3B1RHVyYXRpb24pLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gb2YgdGhlIEJsaW5rIFlVViBkZWNvZGluZyBwYXRoIGZvciBhICcrJ2NodW5rIG9mIGltYWdlIGRhdGEgKHBvc3NpYmx5IHRoZSB3aG9sZSBpbWFnZSkuJyxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2JsaW5rX2RlY29kZV90aW1lX2dwdV9yYXN0ZXJpemF0aW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLGRlY29kZUV2ZW50cy5maWx0ZXIoc2xpY2U9PnNsaWNlLnRpdGxlPT09QkxJTktfR1BVX1JBU1RFUl9ERUNPREVfRVZFTlQpLm1hcChzbGljZT0+c2xpY2UuY3B1RHVyYXRpb24pLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gb2YgZGVjb2RpbmcgYW5kIHNjYWxpbmcgd2l0aGluIHRoZSAnKydHcHVJbWFnZURlY29kZUNhY2hlIGZvciBhIGNodW5rIG9mIGltYWdlIGRhdGEgJysnKHBvc3NpYmx5IHRoZSB3aG9sZSBpbWFnZSknLHN1bW1hcnlPcHRpb25zOnRyLm1ldHJpY3MucmVuZGVyaW5nLlNVTU1BUllfT1BUSU9OUyx9KTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnYmxpbmtfZGVjb2RlX3RpbWVfc29mdHdhcmVfcmFzdGVyaXphdGlvbicsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixkZWNvZGVFdmVudHMuZmlsdGVyKHNsaWNlPT5zbGljZS50aXRsZT09PUJMSU5LX1NPRlRXQVJFX1JBU1RFUl9ERUNPREVfRVZFTlQpLm1hcChzbGljZT0+c2xpY2UuY3B1RHVyYXRpb24pLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gb2YgZGVjb2RpbmcgYW5kIHNjYWxpbmcgd2l0aGluIHRoZSAnKydTb2Z0d2FyZUltYWdlRGVjb2RlQ2FjaGUgZm9yIGEgY2h1bmsgb2YgaW1hZ2UgZGF0YSAnKycocG9zc2libHkgdGhlIHdob2xlIGltYWdlKScsc3VtbWFyeU9wdGlvbnM6dHIubWV0cmljcy5yZW5kZXJpbmcuU1VNTUFSWV9PUFRJT05TLH0pO30KcmV0dXJue2FkZEltYWdlRGVjb2RlVGltZUhpc3RvZ3JhbXN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5yZW5kZXJpbmcnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZXZlbnRJc1ZhbGlkR3JhcGhpY3NFdmVudF8oZXZlbnQsZXZlbnRNYXApe2lmKGV2ZW50LnRpdGxlIT09J0dyYXBoaWNzLlBpcGVsaW5lJ3x8IWV2ZW50LmJpbmRJZHx8IWV2ZW50LmFyZ3N8fCFldmVudC5hcmdzLnN0ZXApe3JldHVybiBmYWxzZTt9CmNvbnN0IGJpbmRJZD1ldmVudC5iaW5kSWQ7aWYoZXZlbnRNYXAuaGFzKGJpbmRJZCkmJmV2ZW50LmFyZ3Muc3RlcCBpbiBldmVudE1hcC5nZXQoYmluZElkKSl7aWYoZXZlbnQuYXJncy5zdGVwPT09J0lzc3VlQmVnaW5GcmFtZSd8fGV2ZW50LmFyZ3Muc3RlcD09PSdSZWNlaXZlQmVnaW5GcmFtZScpe3Rocm93IG5ldyBFcnJvcignVW5leHBlY3RlZCBkdXBsaWNhdGUgc3RlcDogJytldmVudC5hcmdzLnN0ZXApO30KcmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fQpmdW5jdGlvbiBnZW5lcmF0ZUJyZWFrZG93bkZvckNvbXBvc2l0b3JQaXBlbGluZUluQ2xpZW50XyhmbG93KXtjb25zdCBicmVha2Rvd249bmV3IHRyLnYuZC5CcmVha2Rvd24oKTticmVha2Rvd24uc2V0KCd0aW1lIGJlZm9yZSBHZW5lcmF0ZVJlbmRlclBhc3MnLGZsb3cuR2VuZXJhdGVSZW5kZXJQYXNzLnN0YXJ0LWZsb3cuUmVjZWl2ZUJlZ2luRnJhbWUuc3RhcnQpO2JyZWFrZG93bi5zZXQoJ0dlbmVyYXRlUmVuZGVyUGFzcyBkdXJhdGlvbicsZmxvdy5HZW5lcmF0ZVJlbmRlclBhc3MuZHVyYXRpb24pO2JyZWFrZG93bi5zZXQoJ0dlbmVyYXRlQ29tcG9zaXRvckZyYW1lIGR1cmF0aW9uJyxmbG93LkdlbmVyYXRlQ29tcG9zaXRvckZyYW1lLmR1cmF0aW9uKTticmVha2Rvd24uc2V0KCdTdWJtaXRDb21wb3NpdG9yRnJhbWUgZHVyYXRpb24nLGZsb3cuU3VibWl0Q29tcG9zaXRvckZyYW1lLmR1cmF0aW9uKTtyZXR1cm4gYnJlYWtkb3duO30KZnVuY3Rpb24gZ2VuZXJhdGVCcmVha2Rvd25Gb3JDb21wb3NpdG9yUGlwZWxpbmVJblNlcnZpY2VfKGZsb3cpe2NvbnN0IGJyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO2JyZWFrZG93bi5zZXQoJ1Byb2Nlc3NpbmcgQ29tcG9zaXRvckZyYW1lIG9uIHJlY2VwdGlvbicsZmxvdy5SZWNlaXZlQ29tcG9zaXRvckZyYW1lLmR1cmF0aW9uKTticmVha2Rvd24uc2V0KCdEZWxheSBiZWZvcmUgU3VyZmFjZUFnZ3JlZ2F0aW9uJyxmbG93LlN1cmZhY2VBZ2dyZWdhdGlvbi5zdGFydC1mbG93LlJlY2VpdmVDb21wb3NpdG9yRnJhbWUuZW5kKTticmVha2Rvd24uc2V0KCdTdXJmYWNlQWdncmVnYXRpb24gZHVyYXRpb24nLGZsb3cuU3VyZmFjZUFnZ3JlZ2F0aW9uLmR1cmF0aW9uKTtyZXR1cm4gYnJlYWtkb3duO30KZnVuY3Rpb24gZ2VuZXJhdGVCcmVha2Rvd25Gb3JEcmF3XyhkcmF3RXZlbnQpe2NvbnN0IGJyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO2Zvcihjb25zdCBzbGljZSBvZiBkcmF3RXZlbnQuc3ViU2xpY2VzKXticmVha2Rvd24uc2V0KHNsaWNlLnRpdGxlLHNsaWNlLmR1cmF0aW9uKTt9CnJldHVybiBicmVha2Rvd247fQpmdW5jdGlvbiBnZXREaXNwbGF5Q29tcG9zaXRvclRocmVhZF8obW9kZWwpe2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBncHVIZWxwZXI9Y2hyb21lSGVscGVyLmdwdUhlbHBlcjtpZihncHVIZWxwZXIpe2NvbnN0IHRocmVhZD1ncHVIZWxwZXIucHJvY2Vzcy5maW5kQXRNb3N0T25lVGhyZWFkTmFtZWQoJ1ZpekNvbXBvc2l0b3JUaHJlYWQnKTtpZih0aHJlYWQpe3JldHVybiB0aHJlYWQ7fX0KaWYoIWNocm9tZUhlbHBlci5icm93c2VyUHJvY2VzcylyZXR1cm4gbnVsbDtyZXR1cm4gY2hyb21lSGVscGVyLmJyb3dzZXJQcm9jZXNzLmZpbmRBdE1vc3RPbmVUaHJlYWROYW1lZCgnQ3JCcm93c2VyTWFpbicpO30KZnVuY3Rpb24gZ2V0UmFzdGVyVGFza1RpbWVzKHNvdXJjZUZyYW1lTnVtYmVyLG1vZGVsKXtjb25zdCBtb2RlbEhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCByZW5kZXJlcnM9bW9kZWxIZWxwZXIudGVsZW1ldHJ5SGVscGVyLnJlbmRlcmVyc1dpdGhJUjtpZihyZW5kZXJlcnMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgcmFzdGVyVGhyZWFkcz1yZW5kZXJlcnNbMF0ucmFzdGVyV29ya2VyVGhyZWFkcztsZXQgZWFybGllc3RTdGFydD11bmRlZmluZWQ7bGV0IGxhc3RFbmQ9dW5kZWZpbmVkO2Zvcihjb25zdCByYXN0ZXJUaHJlYWQgb2YgcmFzdGVyVGhyZWFkcyl7Zm9yKGNvbnN0IHNsaWNlIG9mWy4uLnJhc3RlclRocmVhZC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdUYXNrR3JhcGhSdW5uZXI6OlJ1blRhc2snKV0pe2lmKHNsaWNlLmFyZ3MmJnNsaWNlLmFyZ3Muc291cmNlX2ZyYW1lX251bWJlcl8mJnNsaWNlLmFyZ3Muc291cmNlX2ZyYW1lX251bWJlcl89PT1zb3VyY2VGcmFtZU51bWJlcil7aWYoZWFybGllc3RTdGFydD09PXVuZGVmaW5lZHx8c2xpY2Uuc3RhcnQ8ZWFybGllc3RTdGFydCl7ZWFybGllc3RTdGFydD1zbGljZS5zdGFydDt9CmlmKGxhc3RFbmQ9PT11bmRlZmluZWR8fHNsaWNlLmVuZD5sYXN0RW5kKXtsYXN0RW5kPXNsaWNlLmVuZDt9fX19CnJldHVybntzdGFydDplYXJsaWVzdFN0YXJ0LGVuZDpsYXN0RW5kfTt9CmZ1bmN0aW9uIGFkZFBpcGVsaW5lSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzKXtjb25zdCByYW5nZXM9c2VnbWVudHMubWFwKHM9PnMuYm91bmRzUmFuZ2UpO2NvbnN0IGJpbmRFdmVudHM9bmV3IE1hcCgpO2Zvcihjb25zdCB0aHJlYWQgb2YgbW9kZWwuZ2V0QWxsVGhyZWFkcygpKXtmb3IoY29uc3QgZXZlbnQgb2YgdGhyZWFkLnNsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoIWV2ZW50SXNWYWxpZEdyYXBoaWNzRXZlbnRfKGV2ZW50LGJpbmRFdmVudHMpKWNvbnRpbnVlO2Zvcihjb25zdCByYW5nZSBvZiByYW5nZXMpe2lmKHJhbmdlLmNvbnRhaW5zRXhwbGljaXRSYW5nZUluY2x1c2l2ZShldmVudC5zdGFydCxldmVudC5lbmQpKXtpZighYmluZEV2ZW50cy5oYXMoZXZlbnQuYmluZElkKSliaW5kRXZlbnRzLnNldChldmVudC5iaW5kSWQse30pO2JyZWFrO319CmlmKGJpbmRFdmVudHMuaGFzKGV2ZW50LmJpbmRJZCkpe2JpbmRFdmVudHMuZ2V0KGV2ZW50LmJpbmRJZClbZXZlbnQuYXJncy5zdGVwXT1ldmVudDt9fX0KY29uc3QgZGNUaHJlYWQ9Z2V0RGlzcGxheUNvbXBvc2l0b3JUaHJlYWRfKG1vZGVsKTtjb25zdCBkcmF3RXZlbnRzPXt9O2lmKGRjVGhyZWFkKXtjb25zdCBldmVudHM9Wy4uLmRjVGhyZWFkLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ0dyYXBoaWNzLlBpcGVsaW5lLkRyYXdBbmRTd2FwJyldO2Zvcihjb25zdCBzZWdtZW50IG9mIHNlZ21lbnRzKXtjb25zdCBmaWx0ZXJlZEV2ZW50cz1zZWdtZW50LmJvdW5kc1JhbmdlLmZpbHRlckFycmF5KGV2ZW50cyxldnQ9PmV2dC5zdGFydCk7Zm9yKGNvbnN0IGV2ZW50IG9mIGZpbHRlcmVkRXZlbnRzKXtpZigoZXZlbnQuYXJncyYmZXZlbnQuYXJncy5zdGF0dXM9PT0nY2FuY2VsZWQnKXx8IWV2ZW50LmlkLnN0YXJ0c1dpdGgoJzpwdHI6Jykpe2NvbnRpbnVlO30KY29uc3QgaWQ9cGFyc2VJbnQoZXZlbnQuaWQuc3Vic3RyaW5nKDUpLDE2KTtpZihpZCBpbiBkcmF3RXZlbnRzKXt0aHJvdyBuZXcgRXJyb3IoJ0R1cGxpY2F0ZSBkcmF3IGV2ZW50czogJytpZCk7fQpkcmF3RXZlbnRzW2lkXT1ldmVudDt9fX0KY29uc3QgaXNzdWVUb1JlY2VpcHQ9aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3BpcGVsaW5lOmJlZ2luX2ZyYW1lX3RyYW5zcG9ydCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7ZGVzY3JpcHRpb246J0xhdGVuY3kgb2YgYmVnaW4tZnJhbWUgbWVzc2FnZSBmcm9tIHRoZSBkaXNwbGF5ICcrJ2NvbXBvc2l0b3IgdG8gdGhlIGNsaWVudCwgaW5jbHVkaW5nIHRoZSBJUEMgbGF0ZW5jeSBhbmQgdGFzay0nKydxdWV1ZSB0aW1lIGluIHRoZSBjbGllbnQuJyxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgaXNzdWVUb1Jhc3RlclN0YXJ0PWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdwaXBlbGluZTpiZWdpbl9mcmFtZV90b19yYXN0ZXJfc3RhcnQnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOidMYXRlbmN5IGJldHdlZW4gYmVnaW4tZnJhbWUgbWVzc2FnZSBhbmQgJysndGhlIGJlZ2lubmluZyBvZiB0aGUgZmlyc3QgQ29tcG9zaXRvclRhc2sgcnVuIGluIHRoZSBjb21wb3NpdG9yLicsc3VtbWFyeU9wdGlvbnM6dHIubWV0cmljcy5yZW5kZXJpbmcuU1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGlzc3VlVG9SYXN0ZXJFbmQ9aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3BpcGVsaW5lOmJlZ2luX2ZyYW1lX3RvX3Jhc3Rlcl9lbmQnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOidMYXRlbmN5IGJldHdlZW4gYmVnaW4tZnJhbWUgbWVzc2FnZSBhbmQgJysndGhlIGVuZCBvZiB0aGUgbGFzdCBDb21wb3NpdG9yVGFzayBydW4gaW4gdGhlIGNvbXBvc2l0b3IuJyxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgcmVjZWlwdFRvU3VibWl0PWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdwaXBlbGluZTpiZWdpbl9mcmFtZV90b19mcmFtZV9zdWJtaXNzaW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtkZXNjcmlwdGlvbjonTGF0ZW5jeSBiZXR3ZWVuIGJlZ2luLWZyYW1lIHJlY2VwdGlvbiBhbmQgJysnQ29tcG9zaXRvckZyYW1lIHN1Ym1pc3Npb24gaW4gdGhlIHJlbmRlcmVyLicsc3VtbWFyeU9wdGlvbnM6dHIubWV0cmljcy5yZW5kZXJpbmcuU1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IHN1Ym1pdFRvQWdncmVnYXRlPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdwaXBlbGluZTpmcmFtZV9zdWJtaXNzaW9uX3RvX2Rpc3BsYXknLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOidMYXRlbmN5IGJldHdlZW4gQ29tcG9zaXRvckZyYW1lIHN1Ym1pc3Npb24gaW4gdGhlICcrJ3JlbmRlcmVyIHRvIGRpc3BsYXkgaW4gdGhlIGRpc3BsYXktY29tcG9zaXRvciwgaW5jbHVkaW5nIElQQyAnKydsYXRlbmN5LCB0YXNrLXF1ZXVlIHRpbWUgaW4gdGhlIGRpc3BsYXktY29tcG9zaXRvciwgYW5kICcrJ2FkZGl0aW9uYWwgcHJvY2Vzc2luZyAoZS5nLiBzdXJmYWNlLXN5bmMgZXRjLiknLHN1bW1hcnlPcHRpb25zOnRyLm1ldHJpY3MucmVuZGVyaW5nLlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBhZ2dyZWdhdGVUb0RyYXc9aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3BpcGVsaW5lOmRyYXcnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOidIb3cgbG9uZyBpdCB0YWtlcyBmb3IgdGhlIGdwdS1zd2FwIHN0ZXAuJyxzdW1tYXJ5T3B0aW9uczp0ci5tZXRyaWNzLnJlbmRlcmluZy5TVU1NQVJZX09QVElPTlMsfSk7Zm9yKGNvbnN0IGZsb3cgb2YgYmluZEV2ZW50cy52YWx1ZXMoKSl7aWYoIWZsb3cuSXNzdWVCZWdpbkZyYW1lfHwhZmxvdy5SZWNlaXZlQmVnaW5GcmFtZXx8IWZsb3cuU3VibWl0Q29tcG9zaXRvckZyYW1lfHwhZmxvdy5TdXJmYWNlQWdncmVnYXRpb24pe2NvbnRpbnVlO30KaXNzdWVUb1JlY2VpcHQuYWRkU2FtcGxlKGZsb3cuUmVjZWl2ZUJlZ2luRnJhbWUuc3RhcnQtCmZsb3cuSXNzdWVCZWdpbkZyYW1lLnN0YXJ0KTtyZWNlaXB0VG9TdWJtaXQuYWRkU2FtcGxlKGZsb3cuU3VibWl0Q29tcG9zaXRvckZyYW1lLmVuZC1mbG93LlJlY2VpdmVCZWdpbkZyYW1lLnN0YXJ0LHticmVha2Rvd246Z2VuZXJhdGVCcmVha2Rvd25Gb3JDb21wb3NpdG9yUGlwZWxpbmVJbkNsaWVudF8oZmxvdyl9KTtzdWJtaXRUb0FnZ3JlZ2F0ZS5hZGRTYW1wbGUoZmxvdy5TdXJmYWNlQWdncmVnYXRpb24uZW5kLWZsb3cuU3VibWl0Q29tcG9zaXRvckZyYW1lLmVuZCx7YnJlYWtkb3duOmdlbmVyYXRlQnJlYWtkb3duRm9yQ29tcG9zaXRvclBpcGVsaW5lSW5TZXJ2aWNlXyhmbG93KX0pO2lmKGZsb3cuU3VibWl0Q29tcG9zaXRvckZyYW1lLnBhcmVudFNsaWNlKXtjb25zdCBzb3VyY2VGcmFtZU51bWJlcj1mbG93LlN1Ym1pdENvbXBvc2l0b3JGcmFtZS5wYXJlbnRTbGljZS5hcmdzLnNvdXJjZV9mcmFtZV9udW1iZXJfO2NvbnN0IHJhc3RlckR1cmF0aW9uPWdldFJhc3RlclRhc2tUaW1lcyhzb3VyY2VGcmFtZU51bWJlcixtb2RlbCk7aWYocmFzdGVyRHVyYXRpb24mJnJhc3RlckR1cmF0aW9uLnN0YXJ0JiZyYXN0ZXJEdXJhdGlvbi5lbmQpe2NvbnN0IHJlY2VpdmVUb1N0YXJ0PXJhc3RlckR1cmF0aW9uLnN0YXJ0LQpmbG93LlJlY2VpdmVCZWdpbkZyYW1lLnN0YXJ0O2NvbnN0IHJlY2VpdmVUb0VuZD1yYXN0ZXJEdXJhdGlvbi5lbmQtZmxvdy5SZWNlaXZlQmVnaW5GcmFtZS5lbmQ7aWYocmVjZWl2ZVRvRW5kPjApe2lzc3VlVG9SYXN0ZXJTdGFydC5hZGRTYW1wbGUocmVjZWl2ZVRvU3RhcnQ+MD9yZWNlaXZlVG9TdGFydDowKTtpc3N1ZVRvUmFzdGVyRW5kLmFkZFNhbXBsZShyZWNlaXZlVG9FbmQpO319fQppZihmbG93LlN1cmZhY2VBZ2dyZWdhdGlvbi5hcmdzJiZmbG93LlN1cmZhY2VBZ2dyZWdhdGlvbi5hcmdzLmRpc3BsYXlfdHJhY2Upe2NvbnN0IGRpc3BsYXlUcmFjZT1mbG93LlN1cmZhY2VBZ2dyZWdhdGlvbi5hcmdzLmRpc3BsYXlfdHJhY2U7aWYoIShkaXNwbGF5VHJhY2UgaW4gZHJhd0V2ZW50cykpY29udGludWU7Y29uc3QgZHJhd0V2ZW50PWRyYXdFdmVudHNbZGlzcGxheVRyYWNlXTthZ2dyZWdhdGVUb0RyYXcuYWRkU2FtcGxlKGRyYXdFdmVudC5kdXJhdGlvbix7YnJlYWtkb3duOmdlbmVyYXRlQnJlYWtkb3duRm9yRHJhd18oZHJhd0V2ZW50KX0pO319fQpyZXR1cm57YWRkUGlwZWxpbmVIaXN0b2dyYW1zLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnJlbmRlcmluZycsZnVuY3Rpb24oKXtjb25zdCBJTVBMX1RIUkVBRF9SRU5ERVJJTkdfU1RBVFNfRVZFTlQ9J0JlbmNobWFya0luc3RydW1lbnRhdGlvbjo6SW1wbFRocmVhZFJlbmRlcmluZ1N0YXRzJztjb25zdCBWSVNJQkxFX0NPTlRFTlRfREFUQT0ndmlzaWJsZV9jb250ZW50X2FyZWEnO2NvbnN0IEFQUFJPWElNQVRFRF9WSVNJQkxFX0NPTlRFTlRfREFUQT0nYXBwcm94aW1hdGVkX3Zpc2libGVfY29udGVudF9hcmVhJztjb25zdCBDSEVDS0VSQk9BUkRFRF9WSVNJQkxFX0NPTlRFTlRfREFUQT0nY2hlY2tlcmJvYXJkZWRfdmlzaWJsZV9jb250ZW50X2FyZWEnO2Z1bmN0aW9uIGFkZFBpeGVsc0hpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxzZWdtZW50cyl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2lmKCFjaHJvbWVIZWxwZXIpcmV0dXJuO2NvbnN0IGFwcHJveGltYXRlZFBpeGVsUGVyY2VudGFnZXM9W107Y29uc3QgY2hlY2tlcmJvYXJkZWRQaXhlbFBlcmNlbnRhZ2VzPVtdO2NvbnN0IHJhbmdlcz1zZWdtZW50cy5tYXAocz0+cy5ib3VuZHNSYW5nZSk7Zm9yKGNvbnN0IHJlbmRlcmVySGVscGVyIG9mIE9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycykpe2lmKHJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ9PT11bmRlZmluZWQpY29udGludWU7Y29uc3Qgc2xpY2VzPXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQuc2xpY2VHcm91cDtmb3IoY29uc3Qgc2xpY2Ugb2Ygc2xpY2VzLmdldERlc2NlbmRhbnRFdmVudHNJblNvcnRlZFJhbmdlcyhyYW5nZXMpKXtpZihzbGljZS50aXRsZSE9PUlNUExfVEhSRUFEX1JFTkRFUklOR19TVEFUU19FVkVOVCljb250aW51ZTtjb25zdCBkYXRhPXNsaWNlLmFyZ3MuZGF0YTtpZighKFZJU0lCTEVfQ09OVEVOVF9EQVRBIGluIGRhdGEpKXt0aHJvdyBuZXcgRXJyb3IoYCR7VklTSUJMRV9DT05URU5UX0RBVEF9IGlzIG1pc3NpbmdgKTt9CmNvbnN0IHZpc2libGVDb250ZW50QXJlYT1kYXRhW1ZJU0lCTEVfQ09OVEVOVF9EQVRBXTtpZih2aXNpYmxlQ29udGVudEFyZWE9PT0wKXtjb250aW51ZTt9CmlmKEFQUFJPWElNQVRFRF9WSVNJQkxFX0NPTlRFTlRfREFUQSBpbiBkYXRhKXthcHByb3hpbWF0ZWRQaXhlbFBlcmNlbnRhZ2VzLnB1c2goZGF0YVtBUFBST1hJTUFURURfVklTSUJMRV9DT05URU5UX0RBVEFdL3Zpc2libGVDb250ZW50QXJlYSk7fQppZihDSEVDS0VSQk9BUkRFRF9WSVNJQkxFX0NPTlRFTlRfREFUQSBpbiBkYXRhKXtjaGVja2VyYm9hcmRlZFBpeGVsUGVyY2VudGFnZXMucHVzaChkYXRhW0NIRUNLRVJCT0FSREVEX1ZJU0lCTEVfQ09OVEVOVF9EQVRBXS92aXNpYmxlQ29udGVudEFyZWEpO319fQpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnbWVhbl9waXhlbHNfYXBwcm94aW1hdGVkJyx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlciwxMDAqdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVhbihhcHByb3hpbWF0ZWRQaXhlbFBlcmNlbnRhZ2VzKSx7ZGVzY3JpcHRpb246J1BlcmNlbnRhZ2Ugb2YgcGl4ZWxzIHRoYXQgd2VyZSBhcHByb3hpbWF0ZWQgJysnKGNoZWNrZXJib2FyZGluZywgbG93LXJlc29sdXRpb24gdGlsZXMsIGV0Yy4pLicsc3VtbWFyeU9wdGlvbnM6e30sfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ21lYW5fcGl4ZWxzX2NoZWNrZXJib2FyZGVkJyx0ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlciwxMDAqdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVhbihjaGVja2VyYm9hcmRlZFBpeGVsUGVyY2VudGFnZXMpLHtkZXNjcmlwdGlvbjonUGVyY2VudGFnZSBvZiBwaXhlbHMgdGhhdCB3ZXJlIGNoZWNrZXJib2FyZGVkLicsc3VtbWFyeU9wdGlvbnM6e30sfSk7fQpyZXR1cm57YWRkUGl4ZWxzSGlzdG9ncmFtcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5yZW5kZXJpbmcnLGZ1bmN0aW9uKCl7Y29uc3QgQkVHSU5fTUFJTl9GUkFNRV9FVkVOVD0nVGhyZWFkUHJveHk6OkJlZ2luTWFpbkZyYW1lJztjb25zdCBTRU5EX0JFR0lOX0ZSQU1FX0VWRU5UPSdUaHJlYWRQcm94eTo6U2NoZWR1bGVkQWN0aW9uU2VuZEJlZ2luTWFpbkZyYW1lJztmdW5jdGlvbiBnZXRFdmVudFRpbWVzQnlCZWdpbkZyYW1lSWRfKHRocmVhZCx0aXRsZSxyYW5nZXMpe2NvbnN0IG91dD1uZXcgTWFwKCk7Y29uc3Qgc2xpY2VzPXRocmVhZC5zbGljZUdyb3VwO2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXMuZ2V0RGVzY2VuZGFudEV2ZW50c0luU29ydGVkUmFuZ2VzKHJhbmdlcykpe2lmKHNsaWNlLnRpdGxlIT09dGl0bGUpY29udGludWU7Y29uc3QgaWQ9c2xpY2UuYXJncy5iZWdpbl9mcmFtZV9pZDtpZihpZD09PXVuZGVmaW5lZCl0aHJvdyBuZXcgRXJyb3IoJ0V2ZW50IGlzIG1pc3NpbmcgYmVnaW5fZnJhbWVfaWQnKTtpZihvdXQuaGFzKGlkKSl0aHJvdyBuZXcgRXJyb3IoYFRoZXJlIG11c3QgYmUgZXhhY3RseSBvbmUgJHt0aXRsZX1gKTtvdXQuc2V0KGlkLHNsaWNlLnN0YXJ0KTt9CnJldHVybiBvdXQ7fQpmdW5jdGlvbiBhZGRRdWV1ZWluZ0R1cmF0aW9uSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIWNocm9tZUhlbHBlcilyZXR1cm47bGV0IHRhcmdldFJlbmRlcmVycz1jaHJvbWVIZWxwZXIudGVsZW1ldHJ5SGVscGVyLnJlbmRlcmVyc1dpdGhJUjtpZih0YXJnZXRSZW5kZXJlcnMubGVuZ3RoPT09MCl7dGFyZ2V0UmVuZGVyZXJzPU9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyk7fQpjb25zdCBxdWV1ZWluZ0R1cmF0aW9ucz1bXTtjb25zdCByYW5nZXM9c2VnbWVudHMubWFwKHM9PnMuYm91bmRzUmFuZ2UpO2Zvcihjb25zdCByZW5kZXJlckhlbHBlciBvZiB0YXJnZXRSZW5kZXJlcnMpe2NvbnN0IG1haW5UaHJlYWQ9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZDtjb25zdCBjb21wb3NpdG9yVGhyZWFkPXJlbmRlcmVySGVscGVyLmNvbXBvc2l0b3JUaHJlYWQ7aWYobWFpblRocmVhZD09PXVuZGVmaW5lZHx8Y29tcG9zaXRvclRocmVhZD09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBiZWdpbk1haW5GcmFtZVRpbWVzPWdldEV2ZW50VGltZXNCeUJlZ2luRnJhbWVJZF8obWFpblRocmVhZCxCRUdJTl9NQUlOX0ZSQU1FX0VWRU5ULHJhbmdlcyk7Y29uc3Qgc2VuZEJlZ2luRnJhbWVUaW1lcz1nZXRFdmVudFRpbWVzQnlCZWdpbkZyYW1lSWRfKGNvbXBvc2l0b3JUaHJlYWQsU0VORF9CRUdJTl9GUkFNRV9FVkVOVCxyYW5nZXMpO2Zvcihjb25zdFtpZCx0aW1lXW9mIHNlbmRCZWdpbkZyYW1lVGltZXMpe3F1ZXVlaW5nRHVyYXRpb25zLnB1c2goYmVnaW5NYWluRnJhbWVUaW1lcy5nZXQoaWQpLXRpbWUpO319Cmhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdxdWV1ZWluZ19kdXJhdGlvbnMnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIscXVldWVpbmdEdXJhdGlvbnMse2JpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDAuMDEsMiwyMCksc3VtbWFyeU9wdGlvbnM6dHIubWV0cmljcy5yZW5kZXJpbmcuU1VNTUFSWV9PUFRJT05TLGRlc2NyaXB0aW9uOidUaW1lIGJldHdlZW4gU2NoZWR1bGVkQWN0aW9uU2VuZEJlZ2luTWFpbkZyYW1lIGluICcrJ3RoZSBjb21wb3NpdG9yIHRocmVhZCBhbmQgdGhlIGNvcnJlc3BvbmRpbmcgJysnQmVnaW5NYWluRnJhbWUgaW4gdGhlIG1haW4gdGhyZWFkLid9KTt9CnJldHVybnthZGRRdWV1ZWluZ0R1cmF0aW9uSGlzdG9ncmFtcyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5yZW5kZXJpbmcnLGZ1bmN0aW9uKCl7Y29uc3QgR0VTVFVSRV9FVkVOVD0nU3ludGhldGljR2VzdHVyZUNvbnRyb2xsZXI6OnJ1bm5pbmcnO2Z1bmN0aW9uIHJlbmRlcmluZ01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIWNocm9tZUhlbHBlcilyZXR1cm47bGV0IHNlZ21lbnRzPWNocm9tZUhlbHBlci50ZWxlbWV0cnlIZWxwZXIuaXJTZWdtZW50cztpZihzZWdtZW50cy5sZW5ndGg9PT0wKXtzZWdtZW50cz1jaHJvbWVIZWxwZXIudGVsZW1ldHJ5SGVscGVyLmFuaW1hdGlvblNlZ21lbnRzO30KaWYoc2VnbWVudHMubGVuZ3RoPjApe3RyLm1ldHJpY3MucmVuZGVyaW5nLmFkZEZyYW1lVGltZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxzZWdtZW50cyk7dHIubWV0cmljcy5yZW5kZXJpbmcuYWRkSW1hZ2VEZWNvZGVUaW1lSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzKTt0ci5tZXRyaWNzLnJlbmRlcmluZy5hZGRQaXBlbGluZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxzZWdtZW50cyk7dHIubWV0cmljcy5yZW5kZXJpbmcuYWRkUGl4ZWxzSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzKTt0ci5tZXRyaWNzLnJlbmRlcmluZy5hZGRRdWV1ZWluZ0R1cmF0aW9uSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLHNlZ21lbnRzKTt9CmNvbnN0IHVpU2VnbWVudHM9Y2hyb21lSGVscGVyLnRlbGVtZXRyeUhlbHBlci51aVNlZ21lbnRzO2lmKHVpU2VnbWVudHMubGVuZ3RoPjApe3RyLm1ldHJpY3MucmVuZGVyaW5nLmFkZFVJRnJhbWVUaW1lSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG1vZGVsLGNocm9tZUhlbHBlci50ZWxlbWV0cnlIZWxwZXIudWlTZWdtZW50cyk7fX0KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihyZW5kZXJpbmdNZXRyaWMse3JlcXVpcmVkQ2F0ZWdvcmllczpbJ2JlbmNobWFyaycsJ3RvcGxldmVsJ10sfSk7cmV0dXJue3JlbmRlcmluZ01ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcjtjb25zdCBFdmVudEZpbmRlclV0aWxzPXRyLmUuY2hyb21lLkV2ZW50RmluZGVyVXRpbHM7Y29uc3QgTUVUUklDX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDFlMywyMCkuYWRkTGluZWFyQmlucygzZTMsMjApLmFkZEV4cG9uZW50aWFsQmlucyg4MGUzLDMwKTtjb25zdCBTVU1NQVJZX09QVElPTlM9e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDp0cnVlLHN1bTpmYWxzZSx9O2Z1bmN0aW9uIHJlcG9ydGVkQnlQYWdlTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IHRpbWVUb1ZpZXdhYmxlPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdyZXBvcnRlZF9ieV9wYWdlOnRpbWVfdG9fdmlld2FibGUnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOk1FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIGZyb20gbmF2aWdhdGlvbiBzdGFydCcrJ3RvIHRlbGVtZXRyeTpyZXBvcnRlZF9ieV9wYWdlOnZpZXdhYmxlJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgdGltZVRvSW50ZXJhY3RpdmU9aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3JlcG9ydGVkX2J5X3BhZ2U6dGltZV90b19pbnRlcmFjdGl2ZScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6TUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RpbWUgZnJvbSBuYXZpZ2F0aW9uIHN0YXJ0ICcrJ3RvIHRlbGVtZXRyeTpyZXBvcnRlZF9ieV9wYWdlOmludGVyYWN0aXZlJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgYmVuY2htYXJrVGltZT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgncmVwb3J0ZWRfYnlfcGFnZTpiZW5jaG1hcmtfdGltZScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6TUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RpbWUgZnJvbSB0ZWxlbWV0cnk6cmVwb3J0ZWRfYnlfcGFnZTpiZW5jaG1hcmtfYmVnaW4gJysndG8gdGVsZW1ldHJ5OnJlcG9ydGVkX2J5X3BhZ2U6YmVuY2htYXJrX2VuZCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtmb3IoY29uc3QgcGlkIGluIGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2NvbnN0IHJlbmRlcmVySGVscGVyPWNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnNbcGlkXTtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSljb250aW51ZTttZWFzdXJlVXNlclRpbWUocmVuZGVyZXJIZWxwZXIsJ25hdmlnYXRpb25TdGFydCcsJ3RlbGVtZXRyeTpyZXBvcnRlZF9ieV9wYWdlOnZpZXdhYmxlJyx0aW1lVG9WaWV3YWJsZSk7bWVhc3VyZVVzZXJUaW1lKHJlbmRlcmVySGVscGVyLCduYXZpZ2F0aW9uU3RhcnQnLCd0ZWxlbWV0cnk6cmVwb3J0ZWRfYnlfcGFnZTppbnRlcmFjdGl2ZScsdGltZVRvSW50ZXJhY3RpdmUpO21lYXN1cmVVc2VyVGltZShyZW5kZXJlckhlbHBlciwndGVsZW1ldHJ5OnJlcG9ydGVkX2J5X3BhZ2U6YmVuY2htYXJrX2JlZ2luJywndGVsZW1ldHJ5OnJlcG9ydGVkX2J5X3BhZ2U6YmVuY2htYXJrX2VuZCcsYmVuY2htYXJrVGltZSk7fX0KZnVuY3Rpb24gbWVhc3VyZVVzZXJUaW1lKHJlbmRlcmVySGVscGVyLHN0YXJ0TmFtZSxlbmROYW1lLGhpc3RvZ3JhbSl7Y29uc3Qgc3RhcnRFdmVudEJ5TmF2SWQ9bmV3IE1hcCgpO2Zvcihjb25zdCBldmVudCBvZiByZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7Y29uc3QgbmF2SWQ9Z2V0TmF2aWdhdGlvbklkKGV2ZW50KTtpZighbmF2SWQpY29udGludWU7aWYoRXZlbnRGaW5kZXJVdGlscy5oYXNDYXRlZ29yeUFuZE5hbWUoZXZlbnQsJ2JsaW5rLnVzZXJfdGltaW5nJyxzdGFydE5hbWUpKXtzdGFydEV2ZW50QnlOYXZJZC5zZXQobmF2SWQsZXZlbnQpO30KaWYoRXZlbnRGaW5kZXJVdGlscy5oYXNDYXRlZ29yeUFuZE5hbWUoZXZlbnQsJ2JsaW5rLnVzZXJfdGltaW5nJyxlbmROYW1lKSl7aWYoIXN0YXJ0RXZlbnRCeU5hdklkLmhhcyhuYXZJZCkpe3Rocm93IEVycm9yKGBNaXNzaW5nICR7c3RhcnROYW1lfSBmb3IgJHtlbmROYW1lfSBhdCB7ZXZlbnQuc3RhcnR9YCk7fQpjb25zdCByYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc3RhcnRFdmVudEJ5TmF2SWQuZ2V0KG5hdklkKS5zdGFydCxldmVudC5zdGFydCk7aGlzdG9ncmFtLmFkZFNhbXBsZShyYW5nZS5kdXJhdGlvbik7c3RhcnRFdmVudEJ5TmF2SWQuZGVsZXRlKG5hdklkKTt9fX0KZnVuY3Rpb24gZ2V0TmF2aWdhdGlvbklkKGV2ZW50KXtyZXR1cm4gZXZlbnQuYXJncy5kYXRhJiZldmVudC5hcmdzLmRhdGEubmF2aWdhdGlvbklkO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihyZXBvcnRlZEJ5UGFnZU1ldHJpYyk7cmV0dXJue3JlcG9ydGVkQnlQYWdlTWV0cmljfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gc2FtcGxlRXhjZXB0aW9uTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCdmb28nLHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyKTtoaXN0LmFkZFNhbXBsZSg5KTtoaXN0LmFkZFNhbXBsZSg5MSx7YmFyOm5ldyB0ci52LmQuR2VuZXJpY1NldChbe2hlbGxvOjQyfV0pfSk7Zm9yKGNvbnN0IGV4cGVjdGF0aW9uIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2lmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uUmVzcG9uc2VFeHBlY3RhdGlvbil7fWVsc2UgaWYoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5BbmltYXRpb25FeHBlY3RhdGlvbil7fWVsc2UgaWYoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5JZGxlRXhwZWN0YXRpb24pe31lbHNlIGlmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKXt9fQpjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Zm9yKGNvbnN0W3BpZCxwcm9jZXNzXW9mIE9iamVjdC5lbnRyaWVzKG1vZGVsLnByb2Nlc3Nlcykpe30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdCk7dGhyb3cgbmV3IEVycm9yKCdUaGVyZSB3YXMgYW4gZXJyb3InKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoc2FtcGxlRXhjZXB0aW9uTWV0cmljKTtyZXR1cm57c2FtcGxlRXhjZXB0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHNhbXBsZU1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBoaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnZm9vJyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcik7aGlzdC5hZGRTYW1wbGUoOSk7aGlzdC5hZGRTYW1wbGUoOTEse2JhcjpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3toZWxsbzo0Mn1dKX0pO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLlJlc3BvbnNlRXhwZWN0YXRpb24pe31lbHNlIGlmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb24pe31lbHNlIGlmKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uSWRsZUV4cGVjdGF0aW9uKXt9ZWxzZSBpZihleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkxvYWRFeHBlY3RhdGlvbil7fX0KY29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2Zvcihjb25zdFtwaWQscHJvY2Vzc11vZiBPYmplY3QuZW50cmllcyhtb2RlbC5wcm9jZXNzZXMpKXt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGhpc3QpO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihzYW1wbGVNZXRyaWMpO3JldHVybntzYW1wbGVNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7Y29uc3QgSEFORExFX0lOUFVUX0VWRU5UX1RJVExFPSdXZWJWaWV3SW1wbDo6aGFuZGxlSW5wdXRFdmVudCc7ZnVuY3Rpb24gZmluZFByZWNlZGluZ0V2ZW50c18oZXZlbnRzQSxldmVudHNCKXtjb25zdCBldmVudHM9bmV3IE1hcCgpO2xldCBldmVudHNCSW5kZXg9MDtmb3IoY29uc3QgZXZlbnRBIG9mIGV2ZW50c0Epe2Zvcig7ZXZlbnRzQkluZGV4PGV2ZW50c0IubGVuZ3RoO2V2ZW50c0JJbmRleCsrKXtpZihldmVudHNCW2V2ZW50c0JJbmRleF0uc3RhcnQ+ZXZlbnRBLnN0YXJ0KWJyZWFrO30KaWYoZXZlbnRzQkluZGV4PjApe2V2ZW50cy5zZXQoZXZlbnRBLGV2ZW50c0JbZXZlbnRzQkluZGV4LTFdKTt9fQpyZXR1cm4gZXZlbnRzO30KZnVuY3Rpb24gZmluZEZvbGxvd2luZ0V2ZW50c18oZXZlbnRzQSxldmVudHNCKXtjb25zdCBldmVudHM9bmV3IE1hcCgpO2xldCBldmVudHNCSW5kZXg9MDtmb3IoY29uc3QgZXZlbnRBIG9mIGV2ZW50c0Epe2Zvcig7ZXZlbnRzQkluZGV4PGV2ZW50c0IubGVuZ3RoO2V2ZW50c0JJbmRleCsrKXtpZihldmVudHNCW2V2ZW50c0JJbmRleF0uc3RhcnQ+PWV2ZW50QS5zdGFydClicmVhazt9CmlmKGV2ZW50c0JJbmRleD49MCYmZXZlbnRzQkluZGV4PGV2ZW50c0IubGVuZ3RoKXtldmVudHMuc2V0KGV2ZW50QSxldmVudHNCW2V2ZW50c0JJbmRleF0pO319CnJldHVybiBldmVudHM7fQpmdW5jdGlvbiBnZXRTcGFOYXZpZ2F0aW9uU3RhcnRDYW5kaWRhdGVzXyhyZW5kZXJlckhlbHBlcixicm93c2VySGVscGVyKXtjb25zdCBpc05hdlN0YXJ0RXZlbnQ9ZT0+e2lmKGUudGl0bGU9PT1IQU5ETEVfSU5QVVRfRVZFTlRfVElUTEUmJmUuYXJncy50eXBlPT09J01vdXNlVXAnKXtyZXR1cm4gdHJ1ZTt9CnJldHVybiBlLnRpdGxlPT09J05hdmlnYXRpb25Db250cm9sbGVySW1wbDo6R29Ub0luZGV4Jzt9O3JldHVyblsuLi5yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuZ2V0RGVzY2VuZGFudEV2ZW50cygpLC4uLmJyb3dzZXJIZWxwZXIubWFpblRocmVhZC5zbGljZUdyb3VwLmdldERlc2NlbmRhbnRFdmVudHMoKV0uZmlsdGVyKGlzTmF2U3RhcnRFdmVudCk7fQpmdW5jdGlvbiBnZXRTcGFOYXZpZ2F0aW9uRXZlbnRzXyhyZW5kZXJlckhlbHBlcil7Y29uc3QgaXNOYXZFdmVudD1lPT5lLmNhdGVnb3J5PT09J2JsaW5rJyYmZS50aXRsZT09PSdGcmFtZUxvYWRlcjo6dXBkYXRlRm9yU2FtZURvY3VtZW50TmF2aWdhdGlvbic7cmV0dXJuWy4uLnJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCldLmZpbHRlcihpc05hdkV2ZW50KTt9CmZ1bmN0aW9uIGdldElucHV0TGF0ZW5jeUV2ZW50c18oYnJvd3NlckhlbHBlcil7Y29uc3QgaXNJbnB1dExhdGVuY3lFdmVudD1lPT5lLnRpdGxlPT09J0lucHV0TGF0ZW5jeTo6TW91c2VVcCc7cmV0dXJuIGJyb3dzZXJIZWxwZXIuZ2V0QWxsQXN5bmNTbGljZXNNYXRjaGluZyhpc0lucHV0TGF0ZW5jeUV2ZW50KTt9CmZ1bmN0aW9uIGdldElucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXBfKGJyb3dzZXJIZWxwZXIpe2NvbnN0IGlucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXA9bmV3IE1hcCgpO2Zvcihjb25zdCBldmVudCBvZiBnZXRJbnB1dExhdGVuY3lFdmVudHNfKGJyb3dzZXJIZWxwZXIpKXtpbnB1dExhdGVuY3lFdmVudEJ5QmluZElkTWFwLnNldChldmVudC5hcmdzLmRhdGEudHJhY2VfaWQsZXZlbnQpO30KcmV0dXJuIGlucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXA7fQpmdW5jdGlvbiBnZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb05hdmlnYXRpb25TdGFydE1hcF8ocmVuZGVyZXJIZWxwZXIsYnJvd3NlckhlbHBlcil7Y29uc3QgbWFpblRocmVhZD1yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkO2NvbnN0IHNwYU5hdkV2ZW50cz1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRzXyhyZW5kZXJlckhlbHBlcik7Y29uc3QgbmF2U3RhcnRDYW5kaWRhdGVzPWdldFNwYU5hdmlnYXRpb25TdGFydENhbmRpZGF0ZXNfKHJlbmRlcmVySGVscGVyLGJyb3dzZXJIZWxwZXIpLnNvcnQodHIuaW1wb3J0ZXIuY29tcGFyZUV2ZW50cyk7Y29uc3Qgc3BhTmF2RXZlbnRUb05hdlN0YXJ0Q2FuZGlkYXRlTWFwPWZpbmRQcmVjZWRpbmdFdmVudHNfKHNwYU5hdkV2ZW50cyxuYXZTdGFydENhbmRpZGF0ZXMpO2NvbnN0IGlucHV0TGF0ZW5jeUV2ZW50QnlCaW5kSWRNYXA9Z2V0SW5wdXRMYXRlbmN5RXZlbnRCeUJpbmRJZE1hcF8oYnJvd3NlckhlbHBlcik7Y29uc3Qgc3BhTmF2RXZlbnRUb05hdlN0YXJ0RXZlbnRNYXA9bmV3IE1hcCgpO2Zvcihjb25zdFtzcGFOYXZFdmVudCxuYXZTdGFydENhbmRpZGF0ZV1vZgpzcGFOYXZFdmVudFRvTmF2U3RhcnRDYW5kaWRhdGVNYXApe2lmKG5hdlN0YXJ0Q2FuZGlkYXRlLnRpdGxlPT09SEFORExFX0lOUFVUX0VWRU5UX1RJVExFKXtjb25zdCBpbnB1dExhdGVuY3lTbGljZT1pbnB1dExhdGVuY3lFdmVudEJ5QmluZElkTWFwLmdldChOdW1iZXIobmF2U3RhcnRDYW5kaWRhdGUucGFyZW50U2xpY2UuYmluZElkKSk7aWYoaW5wdXRMYXRlbmN5U2xpY2Upe3NwYU5hdkV2ZW50VG9OYXZTdGFydEV2ZW50TWFwLnNldChzcGFOYXZFdmVudCxpbnB1dExhdGVuY3lTbGljZSk7fX1lbHNle3NwYU5hdkV2ZW50VG9OYXZTdGFydEV2ZW50TWFwLnNldChzcGFOYXZFdmVudCxuYXZTdGFydENhbmRpZGF0ZSk7fX0KcmV0dXJuIHNwYU5hdkV2ZW50VG9OYXZTdGFydEV2ZW50TWFwO30KZnVuY3Rpb24gZ2V0Rmlyc3RQYWludEV2ZW50c18ocmVuZGVyZXJIZWxwZXIpe2NvbnN0IGlzRmlyc3RQYWludEV2ZW50PWU9PmUuY2F0ZWdvcnk9PT0nYmxpbmsnJiZlLnRpdGxlPT09J1BhaW50TGF5ZXJDb21wb3NpdG9yOjp1cGRhdGVJZk5lZWRlZFJlY3Vyc2l2ZSc7cmV0dXJuWy4uLnJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5nZXREZXNjZW5kYW50RXZlbnRzKCldLmZpbHRlcihpc0ZpcnN0UGFpbnRFdmVudCk7fQpmdW5jdGlvbiBnZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcF8ocmVuZGVyZXJIZWxwZXIpe2NvbnN0IHNwYU5hdkV2ZW50cz1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRzXyhyZW5kZXJlckhlbHBlcikuc29ydCh0ci5pbXBvcnRlci5jb21wYXJlRXZlbnRzKTtjb25zdCBmaXJzdFBhaW50RXZlbnRzPWdldEZpcnN0UGFpbnRFdmVudHNfKHJlbmRlcmVySGVscGVyKS5zb3J0KHRyLmltcG9ydGVyLmNvbXBhcmVFdmVudHMpO3JldHVybiBmaW5kRm9sbG93aW5nRXZlbnRzXyhzcGFOYXZFdmVudHMsZmlyc3RQYWludEV2ZW50cyk7fQpmdW5jdGlvbiBmaW5kU3BhTmF2aWdhdGlvbnNPblJlbmRlcmVyKHJlbmRlcmVySGVscGVyLGJyb3dzZXJIZWxwZXIpe2NvbnN0IHNwYU5hdkV2ZW50VG9OYXZTdGFydE1hcD1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb05hdmlnYXRpb25TdGFydE1hcF8ocmVuZGVyZXJIZWxwZXIsYnJvd3NlckhlbHBlcik7Y29uc3Qgc3BhTmF2RXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcD1nZXRTcGFOYXZpZ2F0aW9uRXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcF8ocmVuZGVyZXJIZWxwZXIpO2NvbnN0IHNwYU5hdmlnYXRpb25zPVtdO2Zvcihjb25zdFtzcGFOYXZFdmVudCxuYXZTdGFydEV2ZW50XW9mCnNwYU5hdkV2ZW50VG9OYXZTdGFydE1hcCl7aWYoc3BhTmF2RXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcC5oYXMoc3BhTmF2RXZlbnQpKXtjb25zdCBmaXJzdFBhaW50RXZlbnQ9c3BhTmF2RXZlbnRUb0ZpcnN0UGFpbnRFdmVudE1hcC5nZXQoc3BhTmF2RXZlbnQpO2NvbnN0IGlzTmF2U3RhcnRBc3luY1NsaWNlPW5hdlN0YXJ0RXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5Bc3luY1NsaWNlO3NwYU5hdmlnYXRpb25zLnB1c2goe25hdlN0YXJ0Q2FuZGlkYXRlczp7aW5wdXRMYXRlbmN5QXN5bmNTbGljZTppc05hdlN0YXJ0QXN5bmNTbGljZT9uYXZTdGFydEV2ZW50OnVuZGVmaW5lZCxnb1RvSW5kZXhTbGljZTppc05hdlN0YXJ0QXN5bmNTbGljZT91bmRlZmluZWQ6bmF2U3RhcnRFdmVudH0sZmlyc3RQYWludEV2ZW50LHVybDpzcGFOYXZFdmVudC5hcmdzLnVybH0pO319CnJldHVybiBzcGFOYXZpZ2F0aW9uczt9CnJldHVybntmaW5kU3BhTmF2aWdhdGlvbnNPblJlbmRlcmVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGdldFdhbGxDbG9ja1NlbGZUaW1lXyhldmVudCxyYW5nZU9mSW50ZXJlc3Qpe2lmKGV2ZW50LmR1cmF0aW9uPT09MClyZXR1cm4gMDtjb25zdCBzZWxmVGltZVJhbmdlcz1bcmFuZ2VPZkludGVyZXN0LmZpbmRJbnRlcnNlY3Rpb24oZXZlbnQucmFuZ2UpXTtmb3IoY29uc3Qgc3ViU2xpY2Ugb2YgZXZlbnQuc3ViU2xpY2VzKXtpZihzZWxmVGltZVJhbmdlcy5sZW5ndGg9PT0wKXJldHVybiAwO2NvbnN0IGxhc3RSYW5nZT1zZWxmVGltZVJhbmdlcy5wb3AoKTtzZWxmVGltZVJhbmdlcy5wdXNoKC4uLnRyLmIubWF0aC5SYW5nZS5maW5kRGlmZmVyZW5jZShsYXN0UmFuZ2Usc3ViU2xpY2UucmFuZ2UpKTt9CnJldHVybiB0ci5iLm1hdGguU3RhdGlzdGljcy5zdW0oc2VsZlRpbWVSYW5nZXMscj0+ci5kdXJhdGlvbik7fQpmdW5jdGlvbiBnZXRDUFVTZWxmVGltZV8oZXZlbnQscmFuZ2VPZkludGVyZXN0KXtpZihldmVudC5kdXJhdGlvbj09PTB8fGV2ZW50LnNlbGZUaW1lPT09MClyZXR1cm4gMDtpZihldmVudC5jcHVTZWxmVGltZT09PXVuZGVmaW5lZClyZXR1cm4gMDtjb25zdCBjcHVUaW1lRGVuc2l0eT1ldmVudC5jcHVTZWxmVGltZS9ldmVudC5zZWxmVGltZTtyZXR1cm4gZ2V0V2FsbENsb2NrU2VsZlRpbWVfKGV2ZW50LHJhbmdlT2ZJbnRlcmVzdCkqY3B1VGltZURlbnNpdHk7fQpmdW5jdGlvbiBnZW5lcmF0ZVRpbWVCcmVha2Rvd25UcmVlKG1haW5UaHJlYWQscmFuZ2VPZkludGVyZXN0LGdldEV2ZW50U2VsZlRpbWUpe2lmKG1haW5UaHJlYWQ9PT1udWxsKXJldHVybjtjb25zdCBicmVha2Rvd25UcmVlPXt9O2Zvcihjb25zdCB0aXRsZSBvZgp0ci5lLmNocm9tZS5DaHJvbWVVc2VyRnJpZW5kbHlDYXRlZ29yeURyaXZlci5BTExfVElUTEVTKXticmVha2Rvd25UcmVlW3RpdGxlXT17dG90YWw6MCxldmVudHM6e319O30KZm9yKGNvbnN0IGV2ZW50IG9mIG1haW5UaHJlYWQuc2xpY2VHcm91cC5jaGlsZEV2ZW50cygpKXtpZighcmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNSYW5nZUV4Y2x1c2l2ZShldmVudC5yYW5nZSkpY29udGludWU7Y29uc3QgZXZlbnRTZWxmVGltZT1nZXRFdmVudFNlbGZUaW1lKGV2ZW50LHJhbmdlT2ZJbnRlcmVzdCk7Y29uc3QgdGl0bGU9dHIuZS5jaHJvbWUuQ2hyb21lVXNlckZyaWVuZGx5Q2F0ZWdvcnlEcml2ZXIuZnJvbUV2ZW50KGV2ZW50KTticmVha2Rvd25UcmVlW3RpdGxlXS50b3RhbCs9ZXZlbnRTZWxmVGltZTtpZihicmVha2Rvd25UcmVlW3RpdGxlXS5ldmVudHNbZXZlbnQudGl0bGVdPT09dW5kZWZpbmVkKXticmVha2Rvd25UcmVlW3RpdGxlXS5ldmVudHNbZXZlbnQudGl0bGVdPTA7fQpicmVha2Rvd25UcmVlW3RpdGxlXS5ldmVudHNbZXZlbnQudGl0bGVdKz1ldmVudFNlbGZUaW1lO2xldCB0aW1lSW50ZXJzZWN0aW9uUmF0aW89MDtpZihldmVudC5kdXJhdGlvbj4wKXt0aW1lSW50ZXJzZWN0aW9uUmF0aW89cmFuZ2VPZkludGVyZXN0LmZpbmRFeHBsaWNpdEludGVyc2VjdGlvbkR1cmF0aW9uKGV2ZW50LnN0YXJ0LGV2ZW50LmVuZCkvZXZlbnQuZHVyYXRpb247fQpjb25zdCB2OFJ1bnRpbWU9ZXZlbnQuYXJnc1sncnVudGltZS1jYWxsLXN0YXQnXTtpZih2OFJ1bnRpbWUhPT11bmRlZmluZWQpe2NvbnN0IHY4UnVudGltZU9iamVjdD1KU09OLnBhcnNlKHY4UnVudGltZSk7Zm9yKGNvbnN0IHJ1bnRpbWVDYWxsIGluIHY4UnVudGltZU9iamVjdCl7aWYodjhSdW50aW1lT2JqZWN0W3J1bnRpbWVDYWxsXS5sZW5ndGg9PT0yKXtpZihicmVha2Rvd25UcmVlLnY4X3J1bnRpbWUuZXZlbnRzW3J1bnRpbWVDYWxsXT09PXVuZGVmaW5lZCl7YnJlYWtkb3duVHJlZS52OF9ydW50aW1lLmV2ZW50c1tydW50aW1lQ2FsbF09MDt9CmNvbnN0IHJ1bnRpbWVUaW1lPXRyLmIuVW5pdC50aW1lc3RhbXBGcm9tVXModjhSdW50aW1lT2JqZWN0W3J1bnRpbWVDYWxsXVsxXSp0aW1lSW50ZXJzZWN0aW9uUmF0aW8pO2JyZWFrZG93blRyZWUudjhfcnVudGltZS50b3RhbCs9cnVudGltZVRpbWU7YnJlYWtkb3duVHJlZS52OF9ydW50aW1lLmV2ZW50c1tydW50aW1lQ2FsbF0rPXJ1bnRpbWVUaW1lO319fX0KcmV0dXJuIGJyZWFrZG93blRyZWU7fQpmdW5jdGlvbiBhZGRJZGxlQW5kQmxvY2tCeU5ldHdvcmtCcmVha2Rvd25fKGJyZWFrZG93blRyZWUsbWFpblRocmVhZEV2ZW50cyxuZXR3b3JrRXZlbnRzLHJhbmdlT2ZJbnRlcmVzdCl7Y29uc3QgbWFpblRocmVhZEV2ZW50UmFuZ2VzPXRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMobWFpblRocmVhZEV2ZW50cyk7Y29uc3QgbmV0d29ya0V2ZW50UmFuZ2VzPXRyLmIubWF0aC5jb252ZXJ0RXZlbnRzVG9SYW5nZXMobmV0d29ya0V2ZW50cyk7Y29uc3QgZXZlbnRSYW5nZXM9bWFpblRocmVhZEV2ZW50UmFuZ2VzLmNvbmNhdChuZXR3b3JrRXZlbnRSYW5nZXMpO2NvbnN0IGlkbGVSYW5nZXM9dHIuYi5tYXRoLmZpbmRFbXB0eVJhbmdlc0JldHdlZW5SYW5nZXMoZXZlbnRSYW5nZXMscmFuZ2VPZkludGVyZXN0KTtjb25zdCB0b3RhbEZyZWVEdXJhdGlvbj10ci5iLm1hdGguU3RhdGlzdGljcy5zdW0oaWRsZVJhbmdlcyxyYW5nZT0+cmFuZ2UuZHVyYXRpb24pO2JyZWFrZG93blRyZWUuaWRsZT17dG90YWw6dG90YWxGcmVlRHVyYXRpb24sZXZlbnRzOnt9fTtsZXQgdG90YWxCbG9ja2VkRHVyYXRpb249cmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uO2Zvcihjb25zdFt0aXRsZSxjb21wb25lbnRdb2YgT2JqZWN0LmVudHJpZXMoYnJlYWtkb3duVHJlZSkpe2lmKHRpdGxlPT09J3Y4X3J1bnRpbWUnKWNvbnRpbnVlO3RvdGFsQmxvY2tlZER1cmF0aW9uLT1jb21wb25lbnQudG90YWw7fQpicmVha2Rvd25UcmVlLmJsb2NrZWRfb25fbmV0d29yaz17dG90YWw6TWF0aC5tYXgodG90YWxCbG9ja2VkRHVyYXRpb24sMCksZXZlbnRzOnt9fTt9CmZ1bmN0aW9uIGdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUobWFpblRocmVhZCxuZXR3b3JrRXZlbnRzLHJhbmdlT2ZJbnRlcmVzdCl7Y29uc3QgYnJlYWtkb3duVHJlZT1nZW5lcmF0ZVRpbWVCcmVha2Rvd25UcmVlKG1haW5UaHJlYWQscmFuZ2VPZkludGVyZXN0LGdldFdhbGxDbG9ja1NlbGZUaW1lXyk7Y29uc3QgbWFpblRocmVhZEV2ZW50c0luUmFuZ2U9dHIubW9kZWwuaGVscGVycy5nZXRTbGljZXNJbnRlcnNlY3RpbmdSYW5nZShyYW5nZU9mSW50ZXJlc3QsbWFpblRocmVhZC5zbGljZUdyb3VwLnRvcExldmVsU2xpY2VzKTthZGRJZGxlQW5kQmxvY2tCeU5ldHdvcmtCcmVha2Rvd25fKGJyZWFrZG93blRyZWUsbWFpblRocmVhZEV2ZW50c0luUmFuZ2UsbmV0d29ya0V2ZW50cyxyYW5nZU9mSW50ZXJlc3QpO3JldHVybiBicmVha2Rvd25UcmVlO30KZnVuY3Rpb24gZ2VuZXJhdGVDcHVUaW1lQnJlYWtkb3duVHJlZShtYWluVGhyZWFkLHJhbmdlT2ZJbnRlcmVzdCl7cmV0dXJuIGdlbmVyYXRlVGltZUJyZWFrZG93blRyZWUobWFpblRocmVhZCxyYW5nZU9mSW50ZXJlc3QsZ2V0Q1BVU2VsZlRpbWVfKTt9CnJldHVybntnZW5lcmF0ZVRpbWVCcmVha2Rvd25UcmVlLGdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUsZ2VuZXJhdGVDcHVUaW1lQnJlYWtkb3duVHJlZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgTENQX0NBTkRJREFURV9FVkVOVF9USVRMRT0nTmF2U3RhcnRUb0xhcmdlc3RDb250ZW50ZnVsUGFpbnQ6OkNhbmRpZGF0ZTo6QWxsRnJhbWVzOjpVS00nO2NvbnN0IExDUF9JTlZBTElEQVRFX0VWRU5UX1RJVExFPSdOYXZTdGFydFRvTGFyZ2VzdENvbnRlbnRmdWxQYWludDo6SW52YWxpZGF0ZTo6QWxsRnJhbWVzOjpVS00nO2NsYXNzIExjcEV2ZW50e2NvbnN0cnVjdG9yKGV2ZW50KXtpZighTGNwSW52YWxpZGF0ZUV2ZW50LmlzTGNwSW52YWxpZGF0ZUV2ZW50KGV2ZW50KSYmIUxjcENhbmRpZGF0ZUV2ZW50LmlzTGNwQ2FuZGlkYXRlRXZlbnQoZXZlbnQpKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBMQ1AgZXZlbnQgc2hvdWxkIGJlIGVpdGhlciBhIGNhbmRpZGF0ZSBldmVudCBvcicrJ2FuIGludmFsaWRhdGUgZXZlbnQuJyk7fQppZihldmVudC5zdGFydD09PXVuZGVmaW5lZHx8ZXZlbnQuYXJncy5tYWluX2ZyYW1lX3RyZWVfbm9kZV9pZD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdUaGUgTENQIGV2ZW50IGlzIGluIHVuZXhwZWN0ZWQgZm9ybWF0LicpO30KdGhpcy5zdGFydD1ldmVudC5zdGFydDt0aGlzLm1haW5GcmFtZVRyZWVOb2RlSWQ9ZXZlbnQuYXJncy5tYWluX2ZyYW1lX3RyZWVfbm9kZV9pZDt9fQpjbGFzcyBMY3BDYW5kaWRhdGVFdmVudCBleHRlbmRzIExjcEV2ZW50e2NvbnN0cnVjdG9yKGV2ZW50KXtzdXBlcihldmVudCk7Y29uc3R7ZHVyYXRpb25Jbk1pbGxpc2Vjb25kcyxzaXplLHR5cGUsaW5NYWluRnJhbWV9PWV2ZW50LmFyZ3MuZGF0YTtpZihkdXJhdGlvbkluTWlsbGlzZWNvbmRzPT09dW5kZWZpbmVkfHxzaXplPT09dW5kZWZpbmVkfHx0eXBlPT09dW5kZWZpbmVkfHxpbk1haW5GcmFtZT09PXVuZGVmaW5lZHx8ZXZlbnQuYXJncy5tYWluX2ZyYW1lX3RyZWVfbm9kZV9pZD09PXVuZGVmaW5lZHx8IUxjcENhbmRpZGF0ZUV2ZW50LmlzTGNwQ2FuZGlkYXRlRXZlbnQoZXZlbnQpKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBMQ1AgY2FuZGlkYXRlIGV2ZW50IGlzIGluIHVuZXhwZWN0ZWQgZm9ybWF0LicpO30KdGhpcy5kdXJhdGlvbkluTWlsbGlzZWNvbmRzPWR1cmF0aW9uSW5NaWxsaXNlY29uZHM7dGhpcy5zaXplPXNpemU7dGhpcy50eXBlPXR5cGU7dGhpcy5pbk1haW5GcmFtZT1pbk1haW5GcmFtZTt9CnN0YXRpYyBpc0xjcENhbmRpZGF0ZUV2ZW50KGV2ZW50KXtyZXR1cm4gZXZlbnQudGl0bGU9PT1MQ1BfQ0FORElEQVRFX0VWRU5UX1RJVExFO319CmNsYXNzIExjcEludmFsaWRhdGVFdmVudCBleHRlbmRzIExjcEV2ZW50e2NvbnN0cnVjdG9yKGV2ZW50KXtzdXBlcihldmVudCk7aWYoIUxjcEludmFsaWRhdGVFdmVudC5pc0xjcEludmFsaWRhdGVFdmVudChldmVudCkpe3Rocm93IG5ldyBFcnJvcignVGhlIExDUCBpbnZhbGlkYXRlIGV2ZW50IGlzIGluIHVuZXhwZWN0ZWQgZm9ybWF0LicpO319CnN0YXRpYyBpc0xjcEludmFsaWRhdGVFdmVudChldmVudCl7cmV0dXJuIGV2ZW50LnRpdGxlPT09TENQX0lOVkFMSURBVEVfRVZFTlRfVElUTEU7fX0KY2xhc3MgTGFyZ2VzdENvbnRlbnRmdWxQYWludHtjb25zdHJ1Y3RvcihhbGxCcm93c2VyRXZlbnRzKXt0aGlzLmFsbEJyb3dzZXJFdmVudHM9YWxsQnJvd3NlckV2ZW50czt9CmZpbmRDYW5kaWRhdGVzKCl7Y29uc3QgZmluYWxMY3BFdmVudHM9dGhpcy5maW5kRmluYWxMY3BFdmVudE9mRWFjaE5hdmlnYXRpb24odGhpcy5hbGxCcm93c2VyRXZlbnRzKTtjb25zdCBmaW5hbENhbmRpZGF0ZXM9ZmluYWxMY3BFdmVudHMuZmlsdGVyKGZpbmFsTGNwRXZlbnQ9PiFMY3BJbnZhbGlkYXRlRXZlbnQuaXNMY3BJbnZhbGlkYXRlRXZlbnQoZmluYWxMY3BFdmVudCkpO3JldHVybiBmaW5hbENhbmRpZGF0ZXM7fQpmaW5kRmluYWxMY3BFdmVudE9mRWFjaE5hdmlnYXRpb24oYWxsQnJvd3NlckV2ZW50cyl7Y29uc3QgbGNwRXZlbnRzPVtdO2Zvcihjb25zdCBsY3BFdmVudCBvZiBhbGxCcm93c2VyRXZlbnRzKXtpZihMY3BDYW5kaWRhdGVFdmVudC5pc0xjcENhbmRpZGF0ZUV2ZW50KGxjcEV2ZW50KSl7bGNwRXZlbnRzLnB1c2gobmV3IExjcENhbmRpZGF0ZUV2ZW50KGxjcEV2ZW50KSk7fWVsc2UgaWYoTGNwSW52YWxpZGF0ZUV2ZW50LmlzTGNwSW52YWxpZGF0ZUV2ZW50KGxjcEV2ZW50KSl7bGNwRXZlbnRzLnB1c2gobmV3IExjcEludmFsaWRhdGVFdmVudChsY3BFdmVudCkpO319CmNvbnN0IGxjcEV2ZW50c0dyb3VwZWRCeU5hdmlnYXRpb249bmV3IE1hcCgpO2Zvcihjb25zdCBlIG9mIGxjcEV2ZW50cyl7Y29uc3Qga2V5PWUubWFpbkZyYW1lVHJlZU5vZGVJZDtpZighbGNwRXZlbnRzR3JvdXBlZEJ5TmF2aWdhdGlvbi5oYXMoa2V5KSl7bGNwRXZlbnRzR3JvdXBlZEJ5TmF2aWdhdGlvbi5zZXQoa2V5LFtdKTt9CmxjcEV2ZW50c0dyb3VwZWRCeU5hdmlnYXRpb24uZ2V0KGtleSkucHVzaChlKTt9CmNvbnN0IGZpbmFsTGNwRXZlbnRPZkVhY2hOYXZpZ2F0aW9uPVtdO2Zvcihjb25zdCBsY3BFdmVudExpc3Qgb2YgbGNwRXZlbnRzR3JvdXBlZEJ5TmF2aWdhdGlvbi52YWx1ZXMoKSl7bGNwRXZlbnRMaXN0LnNvcnQoKGEsYik9PmEuc3RhcnQtYi5zdGFydCk7ZmluYWxMY3BFdmVudE9mRWFjaE5hdmlnYXRpb24ucHVzaChsY3BFdmVudExpc3RbbGNwRXZlbnRMaXN0Lmxlbmd0aC0xXSk7fQpyZXR1cm4gZmluYWxMY3BFdmVudE9mRWFjaE5hdmlnYXRpb247fX0KcmV0dXJue0xDUF9DQU5ESURBVEVfRVZFTlRfVElUTEUsTENQX0lOVkFMSURBVEVfRVZFTlRfVElUTEUsTGFyZ2VzdENvbnRlbnRmdWxQYWludCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuYi5tYXRoJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGVhcnRoTW92ZXJzRGlzdGFuY2UoZmlyc3RIaXN0b2dyYW0sc2Vjb25kSGlzdG9ncmFtKXtjb25zdCBidWNrZXRzPWZpcnN0SGlzdG9ncmFtLmxlbmd0aDtpZihzZWNvbmRIaXN0b2dyYW0ubGVuZ3RoIT09YnVja2V0cyl7dGhyb3cgbmV3IEVycm9yKCdIaXN0b2dyYW1zIGhhdmUgYSBkaWZmZXJlbnQgbnVtYmVyIG9mIGJpbnMuJyk7fQpjb25zdCBhcnJTdW09YXJyPT5hcnIucmVkdWNlKChhLGIpPT5hK2IsMCk7aWYoYXJyU3VtKGZpcnN0SGlzdG9ncmFtKSE9PWFyclN1bShzZWNvbmRIaXN0b2dyYW0pKXt0aHJvdyBuZXcgRXJyb3IoJ1RoZSBoaXN0b2dyYW1zXCcgc2l6ZXMgZG9uXCd0IG1hdGNoLicpO30KbGV0IHRvdGFsPTA7bGV0IHJlbWFpbmRlcj0wO2ZvcihsZXQgYnVja2V0PTA7YnVja2V0PGJ1Y2tldHM7YnVja2V0Kyspe3JlbWFpbmRlcis9c2Vjb25kSGlzdG9ncmFtW2J1Y2tldF0tCmZpcnN0SGlzdG9ncmFtW2J1Y2tldF07dG90YWwrPU1hdGguYWJzKHJlbWFpbmRlcik7fQpyZXR1cm4gdG90YWw7fQpyZXR1cm57ZWFydGhNb3ZlcnNEaXN0YW5jZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS5jaHJvbWUnLGZ1bmN0aW9uKCl7Y29uc3QgZWFydGhNb3ZlcnNEaXN0YW5jZT10ci5iLm1hdGguZWFydGhNb3ZlcnNEaXN0YW5jZTtjbGFzcyBTcGVlZEluZGV4e3N0YXRpYyBnZXRTbmFwc2hvdHNQcm9ncmVzc18odGltZXN0YW1wZWRDb2xvckhpc3RvZ3JhbXMpe2NvbnN0IG51bWJlck9mU2NyZWVuc2hvdHM9dGltZXN0YW1wZWRDb2xvckhpc3RvZ3JhbXMubGVuZ3RoO2NvbnN0IGZpcnN0SGlzdG9ncmFtPXRpbWVzdGFtcGVkQ29sb3JIaXN0b2dyYW1zWzBdLmNvbG9ySGlzdG9ncmFtO2NvbnN0IGxhc3RIaXN0b2dyYW09dGltZXN0YW1wZWRDb2xvckhpc3RvZ3JhbXNbbnVtYmVyT2ZTY3JlZW5zaG90cy0xXS5jb2xvckhpc3RvZ3JhbTtjb25zdCB0b3RhbERpc3RhbmNlPWVhcnRoTW92ZXJzRGlzdGFuY2UoZmlyc3RIaXN0b2dyYW1bMF0sbGFzdEhpc3RvZ3JhbVswXSkrCmVhcnRoTW92ZXJzRGlzdGFuY2UoZmlyc3RIaXN0b2dyYW1bMV0sbGFzdEhpc3RvZ3JhbVsxXSkrCmVhcnRoTW92ZXJzRGlzdGFuY2UoZmlyc3RIaXN0b2dyYW1bMl0sbGFzdEhpc3RvZ3JhbVsyXSk7aWYodG90YWxEaXN0YW5jZT09PTApe3JldHVyblt7dmFsdWU6MSx0czp0aW1lc3RhbXBlZENvbG9ySGlzdG9ncmFtc1swXS50c31dO30KY29uc3Qgc25hcHNob3RzUHJvZ3Jlc3M9bmV3IEFycmF5KG51bWJlck9mU2NyZWVuc2hvdHMpO2ZvcihsZXQgaT0wO2k8bnVtYmVyT2ZTY3JlZW5zaG90cztpKyspe2NvbnN0IGhpc3RvZ3JhbT10aW1lc3RhbXBlZENvbG9ySGlzdG9ncmFtc1tpXS5jb2xvckhpc3RvZ3JhbTtjb25zdCBkaXN0YW5jZT1lYXJ0aE1vdmVyc0Rpc3RhbmNlKGhpc3RvZ3JhbVswXSxsYXN0SGlzdG9ncmFtWzBdKSsKZWFydGhNb3ZlcnNEaXN0YW5jZShoaXN0b2dyYW1bMV0sbGFzdEhpc3RvZ3JhbVsxXSkrCmVhcnRoTW92ZXJzRGlzdGFuY2UoaGlzdG9ncmFtWzJdLGxhc3RIaXN0b2dyYW1bMl0pO2NvbnN0IG1vdmVkPU1hdGgubWF4KHRvdGFsRGlzdGFuY2UtZGlzdGFuY2UsMCk7c25hcHNob3RzUHJvZ3Jlc3NbaV09e3ZhbHVlOihtb3ZlZC90b3RhbERpc3RhbmNlKSx0czp0aW1lc3RhbXBlZENvbG9ySGlzdG9ncmFtc1tpXS50c307fQpyZXR1cm4gc25hcHNob3RzUHJvZ3Jlc3M7fQpzdGF0aWMgc3BlZWRJbmRleEZyb21TbmFwc2hvdHNQcm9ncmVzc18oc25hcHNob3RzUHJvZ3Jlc3Mpe2lmKHNuYXBzaG90c1Byb2dyZXNzLmxlbmd0aD09PTApe3Rocm93IG5ldyBFcnJvcignTm8gc25hcHNob3RzIHdlcmUgcHJvdmlkZWQuJyk7fQpsZXQgcHJldlNuYXBzaG90VGltZVRha2VuPTA7bGV0IHByZXZTbmFwc2hvdFByb2dyZXNzPTA7bGV0IHNwZWVkSW5kZXg9MDtjb25zdCBudW1iZXJPZlNjcmVlbnNob3RzPXNuYXBzaG90c1Byb2dyZXNzLmxlbmd0aDtmb3IobGV0IGk9MDtpPG51bWJlck9mU2NyZWVuc2hvdHM7aSsrKXtjb25zdCBlbGFwc2VkPXNuYXBzaG90c1Byb2dyZXNzW2ldLnRzLXByZXZTbmFwc2hvdFRpbWVUYWtlbjtzcGVlZEluZGV4Kz1lbGFwc2VkKigxLjAtcHJldlNuYXBzaG90UHJvZ3Jlc3MpO3ByZXZTbmFwc2hvdFRpbWVUYWtlbj1zbmFwc2hvdHNQcm9ncmVzc1tpXS50cztwcmV2U25hcHNob3RQcm9ncmVzcz1zbmFwc2hvdHNQcm9ncmVzc1tpXS52YWx1ZTt9CnJldHVybiBNYXRoLnJvdW5kKHNwZWVkSW5kZXgpO30Kc3RhdGljIGNyZWF0ZUNvbG9ySGlzdG9ncmFtKGltYWdlUGl4ZWxWYWx1ZXMpe2NvbnN0IG49aW1hZ2VQaXhlbFZhbHVlcy5sZW5ndGg7Y29uc3QgaGlzdG9ncmFtPW5ldyBBcnJheSgzKTtmb3IobGV0IGo9MDtqPDM7aisrKXtoaXN0b2dyYW1bal09bmV3IEFycmF5KDI1NikuZmlsbCgwKTt9CmZvcihsZXQgaT0wO2k8bjtpKz00KXtjb25zdCByPWltYWdlUGl4ZWxWYWx1ZXNbaV07Y29uc3QgZz1pbWFnZVBpeGVsVmFsdWVzW2krMV07Y29uc3QgYj1pbWFnZVBpeGVsVmFsdWVzW2krMl07aGlzdG9ncmFtWzBdW3JdKys7aGlzdG9ncmFtWzFdW2ddKys7aGlzdG9ncmFtWzJdW2JdKys7fQpyZXR1cm4gaGlzdG9ncmFtO30Kc3RhdGljIGNhbGN1bGF0ZVNwZWVkSW5kZXgodGltZXN0YW1wZWRDb2xvckhpc3RvZ3JhbXMpe2NvbnN0IHNuYXBzaG90c1Byb2dyZXNzPVNwZWVkSW5kZXguZ2V0U25hcHNob3RzUHJvZ3Jlc3NfKHRpbWVzdGFtcGVkQ29sb3JIaXN0b2dyYW1zKTtyZXR1cm4gU3BlZWRJbmRleC5zcGVlZEluZGV4RnJvbVNuYXBzaG90c1Byb2dyZXNzXyhzbmFwc2hvdHNQcm9ncmVzcyk7fQpzdGF0aWMgbGluZVN3ZWVwKGxpbmVTd2VlcFJlY3RzLHZpZXdwb3J0KXtjb25zdCB2ZXJ0aWNhbFN3ZWVwRWRnZXM9W107Y29uc3QgaG9yaXpvbnRhbFN3ZWVwRWRnZXM9W107Zm9yKGxldCBpPTA7aTxsaW5lU3dlZXBSZWN0cy5sZW5ndGg7aSsrKXtjb25zdCByZWN0PWxpbmVTd2VlcFJlY3RzW2ldO2xldCBsZWZ0PXJlY3QubGVmdDtsZXQgcmlnaHQ9cmVjdC5yaWdodDtsZXQgdG9wPXJlY3QudG9wO2xldCBib3R0b209cmVjdC5ib3R0b207aWYobGVmdD52aWV3cG9ydC54K3ZpZXdwb3J0LndpZHRoKWNvbnRpbnVlO2lmKHJpZ2h0PHZpZXdwb3J0LngpY29udGludWU7aWYodG9wPnZpZXdwb3J0Lnkrdmlld3BvcnQuaGVpZ2h0KWNvbnRpbnVlO2lmKGJvdHRvbTx2aWV3cG9ydC55KWNvbnRpbnVlO2xlZnQ9TWF0aC5tYXgobGVmdCx2aWV3cG9ydC55KTtyaWdodD1NYXRoLm1pbihyaWdodCx2aWV3cG9ydC55K3ZpZXdwb3J0LndpZHRoKTt0b3A9TWF0aC5tYXgodG9wLHZpZXdwb3J0LnkpO2JvdHRvbT1NYXRoLm1pbihib3R0b20sdmlld3BvcnQueSt2aWV3cG9ydC5oZWlnaHQpO3ZlcnRpY2FsU3dlZXBFZGdlcy5wdXNoKHtpZDppLHZhbHVlOmxlZnQsdHlwZTonbGVmdCd9LHtpZDppLHZhbHVlOnJpZ2h0LHR5cGU6J3JpZ2h0J30pO2hvcml6b250YWxTd2VlcEVkZ2VzLnB1c2goe2lkOmksdmFsdWU6dG9wLHR5cGU6J3RvcCd9LHtpZDppLHZhbHVlOmJvdHRvbSx0eXBlOidib3R0b20nfSk7fQppZih2ZXJ0aWNhbFN3ZWVwRWRnZXMubGVuZ3RoPT09MHx8aG9yaXpvbnRhbFN3ZWVwRWRnZXMubGVuZ3RoPT09MCl7cmV0dXJuIDA7fQp2ZXJ0aWNhbFN3ZWVwRWRnZXMuc29ydCgoYSxiKT0+YS52YWx1ZS1iLnZhbHVlKTtob3Jpem9udGFsU3dlZXBFZGdlcy5zb3J0KChhLGIpPT5hLnZhbHVlLWIudmFsdWUpO2NvbnN0IGFjdGl2ZT1uZXcgQXJyYXkobGluZVN3ZWVwUmVjdHMubGVuZ3RoKS5maWxsKGZhbHNlKTtsZXQgYXJlYT0wO2FjdGl2ZVt2ZXJ0aWNhbFN3ZWVwRWRnZXNbMF0uaWRdPXRydWU7Zm9yKGxldCBpPTE7aTx2ZXJ0aWNhbFN3ZWVwRWRnZXMubGVuZ3RoO2krKyl7Y29uc3QgY3VycmVudExpbmU9dmVydGljYWxTd2VlcEVkZ2VzW2ldO2NvbnN0IHByZXZpb3VzTGluZT12ZXJ0aWNhbFN3ZWVwRWRnZXNbaS0xXTtjb25zdCBkZWx0YVg9Y3VycmVudExpbmUudmFsdWUtcHJldmlvdXNMaW5lLnZhbHVlO2lmKGRlbHRhWD09PTApY29udGludWU7bGV0IGNvdW50PTA7bGV0IGZpcnN0UmVjdDtmb3IobGV0IGo9MDtqPGhvcml6b250YWxTd2VlcEVkZ2VzLmxlbmd0aDtqKyspe2lmKGFjdGl2ZVtob3Jpem9udGFsU3dlZXBFZGdlc1tqXS5pZF09PT10cnVlKXtpZihob3Jpem9udGFsU3dlZXBFZGdlc1tqXS50eXBlPT09J3RvcCcpe2lmKGNvdW50PT09MCl7Zmlyc3RSZWN0PWo7fQpjb3VudCsrO31lbHNle2lmKGNvdW50PT09MSl7Y29uc3QgZGVsdGFZPWhvcml6b250YWxTd2VlcEVkZ2VzW2pdLnZhbHVlLQpob3Jpem9udGFsU3dlZXBFZGdlc1tmaXJzdFJlY3RdLnZhbHVlO2FyZWErPWRlbHRhWCpkZWx0YVk7fQpjb3VudC0tO319fQphY3RpdmVbY3VycmVudExpbmUuaWRdPShjdXJyZW50TGluZS50eXBlPT09J2xlZnQnKTt9CnJldHVybiBhcmVhO30Kc3RhdGljIHF1YWRUb1JlY3QocXVhZCl7Y29uc3QgbGVmdD1NYXRoLm1pbihxdWFkWzBdLHF1YWRbMl0scXVhZFs0XSk7Y29uc3QgcmlnaHQ9TWF0aC5tYXgocXVhZFswXSxxdWFkWzJdLHF1YWRbNF0pO2NvbnN0IHRvcD1NYXRoLm1pbihxdWFkWzFdLHF1YWRbM10scXVhZFs1XSk7Y29uc3QgYm90dG9tPU1hdGgubWF4KHF1YWRbMV0scXVhZFszXSxxdWFkWzVdKTtyZXR1cm57bGVmdCxyaWdodCx0b3AsYm90dG9tfTt9CnN0YXRpYyBjYWxjdWxhdGVSZWN0c0Jhc2VkU3BlZWRJbmRleCh0aW1lc3RhbXBlZFBhaW50UmVjdHMsdmlld3BvcnQpe2NvbnN0IG51bWJlck9mUmVjdHM9dGltZXN0YW1wZWRQYWludFJlY3RzLmxlbmd0aDtpZihudW1iZXJPZlJlY3RzPT09MCl7dGhyb3cgbmV3IEVycm9yKCdDYW5cJ3QgY2FsY3VsYXRlIHNwZWVkIGluZGV4IHdpdGhvdXQgYW55IHBhaW50ICcrJ3JlY3RhbmdsZXMuJyk7fQpjb25zdCBhcmVhQWRkZWRBdFRpbWVzdGFtcD1uZXcgQXJyYXkobnVtYmVyT2ZSZWN0cyk7Y29uc3QgcmVjdHM9W107bGV0IHByZXZpb3VzQXJlYU9mVW5pb249MDtsZXQgdG90YWxBcmVhT2ZVbmlvbj0wO2ZvcihsZXQgaT1udW1iZXJPZlJlY3RzLTE7aT49MDtpLS0pe3JlY3RzLnB1c2godGltZXN0YW1wZWRQYWludFJlY3RzW2ldLnJlY3QpO2NvbnN0IGN1cnJlbnRBcmVhT2ZVbmlvbj1TcGVlZEluZGV4LmxpbmVTd2VlcChyZWN0cyx2aWV3cG9ydCk7YXJlYUFkZGVkQXRUaW1lc3RhbXBbaV09e3ZhbHVlOmN1cnJlbnRBcmVhT2ZVbmlvbi1wcmV2aW91c0FyZWFPZlVuaW9uLHRzOnRpbWVzdGFtcGVkUGFpbnRSZWN0c1tpXS50c307dG90YWxBcmVhT2ZVbmlvbis9YXJlYUFkZGVkQXRUaW1lc3RhbXBbaV0udmFsdWU7cHJldmlvdXNBcmVhT2ZVbmlvbj1jdXJyZW50QXJlYU9mVW5pb247fQpjb25zdCBwYWludFByb2dyZXNzQXRUaW1lc3RhbXA9bmV3IEFycmF5KG51bWJlck9mUmVjdHMpO2xldCBsYXN0UHJvZ3Jlc3NSZWNvcmRlZD0wO2ZvcihsZXQgaT0wO2k8bnVtYmVyT2ZSZWN0cztpKyspe3BhaW50UHJvZ3Jlc3NBdFRpbWVzdGFtcFtpXT17dmFsdWU6YXJlYUFkZGVkQXRUaW1lc3RhbXBbaV0udmFsdWUvdG90YWxBcmVhT2ZVbmlvbisKbGFzdFByb2dyZXNzUmVjb3JkZWQsdHM6YXJlYUFkZGVkQXRUaW1lc3RhbXBbaV0udHN9O2xhc3RQcm9ncmVzc1JlY29yZGVkPXBhaW50UHJvZ3Jlc3NBdFRpbWVzdGFtcFtpXS52YWx1ZTt9CnJldHVybiBTcGVlZEluZGV4LnNwZWVkSW5kZXhGcm9tU25hcHNob3RzUHJvZ3Jlc3NfKHBhaW50UHJvZ3Jlc3NBdFRpbWVzdGFtcCk7fX0KcmV0dXJue1NwZWVkSW5kZXgsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcjtjb25zdCBTcGVlZEluZGV4PXRyLmUuY2hyb21lLlNwZWVkSW5kZXg7Y29uc3QgRXZlbnRGaW5kZXJVdGlscz10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzO2NvbnN0IEJJTl9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwxZTMsMjApLmFkZExpbmVhckJpbnMoM2UzLDIwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjBlMywyMCk7Y29uc3QgU1VNTUFSWV9PUFRJT05TPXthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6dHJ1ZSxtaW46dHJ1ZSxzdGQ6dHJ1ZSxzdW06ZmFsc2UsfTtmdW5jdGlvbiBhZGRSZWN0c0Jhc2VkU3BlZWRJbmRleFNhbXBsZShzYW1wbGVzLHJlbmRlcmVySGVscGVyLG5hdmlnYXRpb25TdGFydCxsb2FkRHVyYXRpb24sZnJhbWVJRCl7bGV0IHZpZXdwb3J0O2Zvcihjb25zdCBldmVudCBvZiBFdmVudEZpbmRlclV0aWxzLmdldE1haW5UaHJlYWRFdmVudHMocmVuZGVyZXJIZWxwZXIsJ3ZpZXdwb3J0JywnbG9hZGluZycpKXtpZihldmVudC5hcmdzLmRhdGEuZnJhbWVJRD09PWZyYW1lSUQmJmV2ZW50LnN0YXJ0PChuYXZpZ2F0aW9uU3RhcnQrbG9hZER1cmF0aW9uKSl7dmlld3BvcnQ9ZXZlbnQuYXJncy5kYXRhO319CmlmKCF2aWV3cG9ydClyZXR1cm47Y29uc3QgdGltZXN0YW1wZWRQYWludFJlY3RzPVtdO2Zvcihjb25zdCBldmVudCBvZiBFdmVudEZpbmRlclV0aWxzLmdldE1haW5UaHJlYWRFdmVudHMocmVuZGVyZXJIZWxwZXIsJ1BhaW50VGltaW5nVmlzdWFsaXplcjo6TGF5b3V0T2JqZWN0UGFpbnRlZCcsJ2xvYWRpbmcnKSl7aWYoZXZlbnQuc3RhcnQ+PW5hdmlnYXRpb25TdGFydCYmZXZlbnQuc3RhcnQ8bmF2aWdhdGlvblN0YXJ0K2xvYWREdXJhdGlvbil7Y29uc3QgcGFpbnRSZWN0PWV2ZW50LmFyZ3MuZGF0YS5yZWN0O2lmKCFwYWludFJlY3QpY29udGludWU7dGltZXN0YW1wZWRQYWludFJlY3RzLnB1c2goe3JlY3Q6U3BlZWRJbmRleC5xdWFkVG9SZWN0KHBhaW50UmVjdCksdHM6ZXZlbnQuc3RhcnR9KTt9fQpjb25zdCBudW1iZXJPZlJlY3RzPXRpbWVzdGFtcGVkUGFpbnRSZWN0cy5sZW5ndGg7aWYobnVtYmVyT2ZSZWN0cz09PTApcmV0dXJuO3NhbXBsZXMucHVzaCh7dmFsdWU6U3BlZWRJbmRleC5jYWxjdWxhdGVSZWN0c0Jhc2VkU3BlZWRJbmRleCh0aW1lc3RhbXBlZFBhaW50UmVjdHMsdmlld3BvcnQpLW5hdmlnYXRpb25TdGFydH0pO30KZnVuY3Rpb24gY29sbGVjdFJlY3RzQmFzZWRTcGVlZEluZGV4U2FtcGxlc0Zyb21Mb2FkRXhwZWN0YXRpb25zKG1vZGVsLGNocm9tZUhlbHBlcil7Y29uc3QgcmVjdHNCYXNlZFNwZWVkSW5kZXhTYW1wbGVzPVtdO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZighKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKSljb250aW51ZTtpZih0ci5lLmNocm9tZS5DSFJPTUVfSU5URVJOQUxfVVJMUy5pbmNsdWRlcyhleHBlY3RhdGlvbi51cmwpKXtjb250aW51ZTt9CmNvbnN0IHJlbmRlcmVySGVscGVyPWNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnNbZXhwZWN0YXRpb24ucmVuZGVyUHJvY2Vzcy5waWRdO2FkZFJlY3RzQmFzZWRTcGVlZEluZGV4U2FtcGxlKHJlY3RzQmFzZWRTcGVlZEluZGV4U2FtcGxlcyxyZW5kZXJlckhlbHBlcixleHBlY3RhdGlvbi5uYXZpZ2F0aW9uU3RhcnQuc3RhcnQsZXhwZWN0YXRpb24uZHVyYXRpb24sZXhwZWN0YXRpb24ubmF2aWdhdGlvblN0YXJ0LmFyZ3MuZnJhbWUpO30KcmV0dXJuIHJlY3RzQmFzZWRTcGVlZEluZGV4U2FtcGxlczt9CmZ1bmN0aW9uIHJlY3RzQmFzZWRTcGVlZEluZGV4TWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IHJlY3RzQmFzZWRTcGVlZEluZGV4SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdyZWN0c0Jhc2VkU3BlZWRJbmRleCcsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6QklOX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246JyB0aGUgYXZlcmFnZSB0aW1lIGF0IHdoaWNoIHZpc2libGUgcGFydHMgb2YgdGhlJysnIHBhZ2UgYXJlIGRpc3BsYXllZCAoaW4gbXMpLicsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBzYW1wbGVzPWNvbGxlY3RSZWN0c0Jhc2VkU3BlZWRJbmRleFNhbXBsZXNGcm9tTG9hZEV4cGVjdGF0aW9ucyhtb2RlbCxjaHJvbWVIZWxwZXIpO2Zvcihjb25zdCBzYW1wbGUgb2Ygc2FtcGxlcyl7cmVjdHNCYXNlZFNwZWVkSW5kZXhIaXN0b2dyYW0uYWRkU2FtcGxlKHNhbXBsZS52YWx1ZSk7fX0KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihyZWN0c0Jhc2VkU3BlZWRJbmRleE1ldHJpYyk7cmV0dXJue3JlY3RzQmFzZWRTcGVlZEluZGV4TWV0cmljfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgTE9OR19UQVNLX1RIUkVTSE9MRF9NUz01MDtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyX3NtYWxsZXJJc0JldHRlcjtjb25zdCBSZWxhdGVkRXZlbnRTZXQ9dHIudi5kLlJlbGF0ZWRFdmVudFNldDtjb25zdCBoYXNDYXRlZ29yeUFuZE5hbWU9dHIubWV0cmljcy5zaC5oYXNDYXRlZ29yeUFuZE5hbWU7Y29uc3QgRXZlbnRGaW5kZXJVdGlscz10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzO2Z1bmN0aW9uIGNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSl7Y29uc3QgYnJlYWtkb3duRGlhZ25vc3RpYz1uZXcgdHIudi5kLkJyZWFrZG93bigpO2JyZWFrZG93bkRpYWdub3N0aWMuY29sb3JTY2hlbWU9dHIudi5kLkNPTE9SX1NDSEVNRV9DSFJPTUVfVVNFUl9GUklFTkRMWV9DQVRFR09SWV9EUklWRVI7Zm9yKGNvbnN0IGxhYmVsIGluIGJyZWFrZG93blRyZWUpe2JyZWFrZG93bkRpYWdub3N0aWMuc2V0KGxhYmVsLGJyZWFrZG93blRyZWVbbGFiZWxdLnRvdGFsKTt9CnJldHVybiBicmVha2Rvd25EaWFnbm9zdGljO30KY29uc3QgTE9BRElOR19NRVRSSUNfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMWUzLDIwKS5hZGRMaW5lYXJCaW5zKDNlMywyMCkuYWRkRXhwb25lbnRpYWxCaW5zKDIwZTMsMjApO2NvbnN0IFRJTUVfVE9fSU5URVJBQ1RJVkVfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMSw0MGUzLDM1KS5hZGRFeHBvbmVudGlhbEJpbnMoODBlMywxNSk7Y29uc3QgTEFZT1VUX1NISUZUX1NDT1JFX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDUwLDI1KTtjb25zdCBTVU1NQVJZX09QVElPTlM9e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDp0cnVlLHN1bTpmYWxzZSx9O2Z1bmN0aW9uIGZpbmRGcmFtZUxvYWRlclNuYXBzaG90QXQocmVuZGVyZXJIZWxwZXIsZnJhbWVJZFJlZix0cyl7Y29uc3Qgb2JqZWN0cz1yZW5kZXJlckhlbHBlci5wcm9jZXNzLm9iamVjdHM7Y29uc3QgZnJhbWVMb2FkZXJJbnN0YW5jZXM9b2JqZWN0cy5pbnN0YW5jZXNCeVR5cGVOYW1lXy5GcmFtZUxvYWRlcjtpZihmcmFtZUxvYWRlckluc3RhbmNlcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2xldCBzbmFwc2hvdDtmb3IoY29uc3QgaW5zdGFuY2Ugb2YgZnJhbWVMb2FkZXJJbnN0YW5jZXMpe2lmKCFpbnN0YW5jZS5pc0FsaXZlQXQodHMpKWNvbnRpbnVlO2NvbnN0IG1heWJlU25hcHNob3Q9aW5zdGFuY2UuZ2V0U25hcHNob3RBdCh0cyk7aWYoZnJhbWVJZFJlZiE9PW1heWJlU25hcHNob3QuYXJncy5mcmFtZS5pZF9yZWYpY29udGludWU7c25hcHNob3Q9bWF5YmVTbmFwc2hvdDt9CnJldHVybiBzbmFwc2hvdDt9CmZ1bmN0aW9uIGZpbmRBbGxFdmVudHMocmVuZGVyZXJIZWxwZXIsY2F0ZWdvcnksdGl0bGUpe2NvbnN0IHRhcmdldEV2ZW50cz1bXTtmb3IoY29uc3QgZXYgb2YgcmVuZGVyZXJIZWxwZXIucHJvY2Vzcy5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKCFoYXNDYXRlZ29yeUFuZE5hbWUoZXYsY2F0ZWdvcnksdGl0bGUpKWNvbnRpbnVlO3RhcmdldEV2ZW50cy5wdXNoKGV2KTt9CnJldHVybiB0YXJnZXRFdmVudHM7fQpmdW5jdGlvbiBnZXRNb3N0UmVjZW50VmFsaWRFdmVudChyZW5kZXJlckhlbHBlcixjYXRlZ29yeSx0aXRsZSl7Y29uc3QgdGFyZ2V0RXZlbnRzPWZpbmRBbGxFdmVudHMocmVuZGVyZXJIZWxwZXIsY2F0ZWdvcnksdGl0bGUpO2xldCB2YWxpZEV2ZW50O2Zvcihjb25zdCB0YXJnZXRFdmVudCBvZiB0YXJnZXRFdmVudHMpe2lmKHJlbmRlcmVySGVscGVyLmlzVGVsZW1ldHJ5SW50ZXJuYWxFdmVudCh0YXJnZXRFdmVudCkpY29udGludWU7aWYodmFsaWRFdmVudD09PXVuZGVmaW5lZCl7dmFsaWRFdmVudD10YXJnZXRFdmVudDt9ZWxzZXtpZih2YWxpZEV2ZW50LnN0YXJ0PHRhcmdldEV2ZW50LnN0YXJ0KXt2YWxpZEV2ZW50PXRhcmdldEV2ZW50O319fQpyZXR1cm4gdmFsaWRFdmVudDt9CmZ1bmN0aW9uIGdldEZpcnN0Vmlld3BvcnRSZWFkeVNhbXBsZXMocmVuZGVyZXJIZWxwZXIsbmF2SWRUb05hdlN0YXJ0RXZlbnRzKXtjb25zdCBzYW1wbGVzPVtdO2NvbnN0IHBjRXZlbnQ9Z2V0TW9zdFJlY2VudFZhbGlkRXZlbnQocmVuZGVyZXJIZWxwZXIsJ2JsaW5rLnVzZXJfdGltaW5nJywncGMnKTtpZihwY0V2ZW50PT09dW5kZWZpbmVkKXJldHVybiBzYW1wbGVzO2lmKHJlbmRlcmVySGVscGVyLmlzVGVsZW1ldHJ5SW50ZXJuYWxFdmVudChwY0V2ZW50KSlyZXR1cm4gc2FtcGxlcztjb25zdCBuYXZpZ2F0aW9uU3RhcnRFdmVudD1uYXZJZFRvTmF2U3RhcnRFdmVudHMuZ2V0KHBjRXZlbnQuYXJncy5kYXRhLm5hdmlnYXRpb25JZCk7aWYobmF2aWdhdGlvblN0YXJ0RXZlbnQ9PT11bmRlZmluZWQpcmV0dXJuIHNhbXBsZXM7Y29uc3QgbmF2U3RhcnRUb0V2ZW50UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydEV2ZW50LnN0YXJ0LHBjRXZlbnQuc3RhcnQpO2NvbnN0IG5ldHdvcmtFdmVudHM9RXZlbnRGaW5kZXJVdGlscy5nZXROZXR3b3JrRXZlbnRzSW5SYW5nZShyZW5kZXJlckhlbHBlci5wcm9jZXNzLG5hdlN0YXJ0VG9FdmVudFJhbmdlKTtjb25zdCBicmVha2Rvd25UcmVlPXRyLm1ldHJpY3Muc2guZ2VuZXJhdGVXYWxsQ2xvY2tUaW1lQnJlYWtkb3duVHJlZShyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLG5ldHdvcmtFdmVudHMsbmF2U3RhcnRUb0V2ZW50UmFuZ2UpO3NhbXBsZXMucHVzaCh7dmFsdWU6bmF2U3RhcnRUb0V2ZW50UmFuZ2UuZHVyYXRpb24sYnJlYWtkb3duVHJlZSxkaWFnbm9zdGljczp7YnJlYWtkb3duOmNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSksU3RhcnQ6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnRFdmVudCksRW5kOm5ldyBSZWxhdGVkRXZlbnRTZXQocGNFdmVudCl9fSk7cmV0dXJuIHNhbXBsZXM7fQpmdW5jdGlvbiBnZXRBYm92ZVRoZUZvbGRMb2FkZWRUb1Zpc2libGVTYW1wbGVzKHJlbmRlcmVySGVscGVyKXtjb25zdCBzYW1wbGVzPVtdO2NvbnN0IHBjRXZlbnQ9Z2V0TW9zdFJlY2VudFZhbGlkRXZlbnQocmVuZGVyZXJIZWxwZXIsJ2JsaW5rLnVzZXJfdGltaW5nJywncGMnKTtjb25zdCB2aXNpYmxlRXZlbnQ9Z2V0TW9zdFJlY2VudFZhbGlkRXZlbnQocmVuZGVyZXJIZWxwZXIsJ2JsaW5rLnVzZXJfdGltaW5nJywndmlzaWJsZScpO2lmKHBjRXZlbnQhPT11bmRlZmluZWQmJnZpc2libGVFdmVudCE9PXVuZGVmaW5lZCl7c2FtcGxlcy5wdXNoKHt2YWx1ZTpNYXRoLm1heCgwLjAscGNFdmVudC5zdGFydC12aXNpYmxlRXZlbnQuc3RhcnQpLGRpYWdub3N0aWNzOntTdGFydDpuZXcgUmVsYXRlZEV2ZW50U2V0KHZpc2libGVFdmVudCksRW5kOm5ldyBSZWxhdGVkRXZlbnRTZXQocGNFdmVudCl9fSk7fQpyZXR1cm4gc2FtcGxlczt9CmZ1bmN0aW9uIGZpbmRUaW1lVG9YRW50cmllcyhjYXRlZ29yeSxldmVudE5hbWUscmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzLG5hdklkVG9OYXZTdGFydEV2ZW50cyl7Y29uc3QgdGFyZ2V0RXZlbnRzPWZpbmRBbGxFdmVudHMocmVuZGVyZXJIZWxwZXIsY2F0ZWdvcnksZXZlbnROYW1lKTtjb25zdCBlbnRyaWVzPVtdO2Zvcihjb25zdCB0YXJnZXRFdmVudCBvZiB0YXJnZXRFdmVudHMpe2lmKHJlbmRlcmVySGVscGVyLmlzVGVsZW1ldHJ5SW50ZXJuYWxFdmVudCh0YXJnZXRFdmVudCkpY29udGludWU7Y29uc3QgZnJhbWVJZFJlZj10YXJnZXRFdmVudC5hcmdzLmZyYW1lO2NvbnN0IHNuYXBzaG90PWZpbmRGcmFtZUxvYWRlclNuYXBzaG90QXQocmVuZGVyZXJIZWxwZXIsZnJhbWVJZFJlZix0YXJnZXRFdmVudC5zdGFydCk7aWYoc25hcHNob3Q9PT11bmRlZmluZWR8fCFzbmFwc2hvdC5hcmdzLmlzTG9hZGluZ01haW5GcmFtZSljb250aW51ZTtjb25zdCB1cmw9c25hcHNob3QuYXJncy5kb2N1bWVudExvYWRlclVSTDtpZih0ci5lLmNocm9tZS5DSFJPTUVfSU5URVJOQUxfVVJMUy5pbmNsdWRlcyh1cmwpKWNvbnRpbnVlO2xldCBuYXZpZ2F0aW9uU3RhcnRFdmVudDtpZih0YXJnZXRFdmVudC5hcmdzLmRhdGE9PT11bmRlZmluZWR8fHRhcmdldEV2ZW50LmFyZ3MuZGF0YS5uYXZpZ2F0aW9uSWQ9PT11bmRlZmluZWQpe25hdmlnYXRpb25TdGFydEV2ZW50PUV2ZW50RmluZGVyVXRpbHMuZmluZExhc3RFdmVudFN0YXJ0aW5nT25PckJlZm9yZVRpbWVzdGFtcChmcmFtZVRvTmF2U3RhcnRFdmVudHMuZ2V0KGZyYW1lSWRSZWYpfHxbXSx0YXJnZXRFdmVudC5zdGFydCk7fWVsc2V7bmF2aWdhdGlvblN0YXJ0RXZlbnQ9bmF2SWRUb05hdlN0YXJ0RXZlbnRzLmdldCh0YXJnZXRFdmVudC5hcmdzLmRhdGEubmF2aWdhdGlvbklkKTt9CmlmKG5hdmlnYXRpb25TdGFydEV2ZW50PT09dW5kZWZpbmVkKWNvbnRpbnVlO2VudHJpZXMucHVzaCh7bmF2aWdhdGlvblN0YXJ0RXZlbnQsdGFyZ2V0RXZlbnQsdXJsLH0pO30KcmV0dXJuIGVudHJpZXM7fQpmdW5jdGlvbiBjb2xsZWN0VGltZVRvRXZlbnQocmVuZGVyZXJIZWxwZXIsdGltZVRvWEVudHJpZXMpe2NvbnN0IHNhbXBsZXM9W107Zm9yKGNvbnN0e3RhcmdldEV2ZW50LG5hdmlnYXRpb25TdGFydEV2ZW50LHVybH1vZiB0aW1lVG9YRW50cmllcyl7Y29uc3QgbmF2U3RhcnRUb0V2ZW50UmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydEV2ZW50LnN0YXJ0LHRhcmdldEV2ZW50LnN0YXJ0KTtjb25zdCBuZXR3b3JrRXZlbnRzPUV2ZW50RmluZGVyVXRpbHMuZ2V0TmV0d29ya0V2ZW50c0luUmFuZ2UocmVuZGVyZXJIZWxwZXIucHJvY2VzcyxuYXZTdGFydFRvRXZlbnRSYW5nZSk7Y29uc3QgYnJlYWtkb3duVHJlZT10ci5tZXRyaWNzLnNoLmdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCxuZXR3b3JrRXZlbnRzLG5hdlN0YXJ0VG9FdmVudFJhbmdlKTtzYW1wbGVzLnB1c2goe3ZhbHVlOm5hdlN0YXJ0VG9FdmVudFJhbmdlLmR1cmF0aW9uLGJyZWFrZG93blRyZWUsZGlhZ25vc3RpY3M6e2JyZWFrZG93bjpjcmVhdGVCcmVha2Rvd25EaWFnbm9zdGljKGJyZWFrZG93blRyZWUpLHVybDpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3VybF0pLFN0YXJ0Om5ldyBSZWxhdGVkRXZlbnRTZXQobmF2aWdhdGlvblN0YXJ0RXZlbnQpLEVuZDpuZXcgUmVsYXRlZEV2ZW50U2V0KHRhcmdldEV2ZW50KX19KTt9CnJldHVybiBzYW1wbGVzO30KZnVuY3Rpb24gY29sbGVjdFRpbWVUb0V2ZW50SW5DcHVUaW1lKHJlbmRlcmVySGVscGVyLHRpbWVUb1hFbnRyaWVzKXtjb25zdCBzYW1wbGVzPVtdO2Zvcihjb25zdHt0YXJnZXRFdmVudCxuYXZpZ2F0aW9uU3RhcnRFdmVudCx1cmx9b2YgdGltZVRvWEVudHJpZXMpe2NvbnN0IG5hdlN0YXJ0VG9FdmVudFJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShuYXZpZ2F0aW9uU3RhcnRFdmVudC5zdGFydCx0YXJnZXRFdmVudC5zdGFydCk7Y29uc3QgbWFpblRocmVhZENwdVRpbWU9cmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5nZXRDcHVUaW1lRm9yUmFuZ2UobmF2U3RhcnRUb0V2ZW50UmFuZ2UpO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZUNwdVRpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmF2U3RhcnRUb0V2ZW50UmFuZ2UpO3NhbXBsZXMucHVzaCh7dmFsdWU6bWFpblRocmVhZENwdVRpbWUsYnJlYWtkb3duVHJlZSxkaWFnbm9zdGljczp7YnJlYWtkb3duOmNyZWF0ZUJyZWFrZG93bkRpYWdub3N0aWMoYnJlYWtkb3duVHJlZSksc3RhcnQ6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnRFdmVudCksZW5kOm5ldyBSZWxhdGVkRXZlbnRTZXQodGFyZ2V0RXZlbnQpLGluZm9zOm5ldyB0ci52LmQuR2VuZXJpY1NldChbe3BpZDpyZW5kZXJlckhlbHBlci5waWQsc3RhcnQ6bmF2aWdhdGlvblN0YXJ0RXZlbnQuc3RhcnQsZXZlbnQ6dGFyZ2V0RXZlbnQuc3RhcnQsfV0pLH19KTt9CnJldHVybiBzYW1wbGVzO30KZnVuY3Rpb24gZmluZExheW91dFNoaWZ0U2FtcGxlcyhyZW5kZXJlckhlbHBlcil7bGV0IHNhbXBsZTtFdmVudEZpbmRlclV0aWxzLmdldFNvcnRlZE1haW5UaHJlYWRFdmVudHNCeUZyYW1lKHJlbmRlcmVySGVscGVyLCdMYXlvdXRTaGlmdCcsJ2xvYWRpbmcnKS5mb3JFYWNoKChldmVudHMpPT57Y29uc3QgZXZEYXRhPWV2ZW50cy5wb3AoKS5hcmdzLmRhdGE7aWYoZXZEYXRhLmlzX21haW5fZnJhbWUpe3NhbXBsZT17dmFsdWU6ZXZEYXRhLmN1bXVsYXRpdmVfc2NvcmV9O319KTtyZXR1cm4gc2FtcGxlP1tzYW1wbGVdOltdO30KZnVuY3Rpb24gYWRkRmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGUoc2FtcGxlcyxyZW5kZXJlckhlbHBlcixuYXZpZ2F0aW9uU3RhcnQsZm1wTWFya2VyRXZlbnQsdXJsKXtjb25zdCBuYXZTdGFydFRvRk1QUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKG5hdmlnYXRpb25TdGFydC5zdGFydCxmbXBNYXJrZXJFdmVudC5zdGFydCk7Y29uc3QgbmV0d29ya0V2ZW50cz1FdmVudEZpbmRlclV0aWxzLmdldE5ldHdvcmtFdmVudHNJblJhbmdlKHJlbmRlcmVySGVscGVyLnByb2Nlc3MsbmF2U3RhcnRUb0ZNUFJhbmdlKTtjb25zdCB0aW1lVG9GaXJzdE1lYW5pbmdmdWxQYWludD1uYXZTdGFydFRvRk1QUmFuZ2UuZHVyYXRpb247Y29uc3QgYnJlYWtkb3duVHJlZT10ci5tZXRyaWNzLnNoLmdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCxuZXR3b3JrRXZlbnRzLG5hdlN0YXJ0VG9GTVBSYW5nZSk7c2FtcGxlcy5wdXNoKHt2YWx1ZTp0aW1lVG9GaXJzdE1lYW5pbmdmdWxQYWludCxicmVha2Rvd25UcmVlLGRpYWdub3N0aWNzOnticmVha2Rvd246Y3JlYXRlQnJlYWtkb3duRGlhZ25vc3RpYyhicmVha2Rvd25UcmVlKSxzdGFydDpuZXcgUmVsYXRlZEV2ZW50U2V0KG5hdmlnYXRpb25TdGFydCksZW5kOm5ldyBSZWxhdGVkRXZlbnRTZXQoZm1wTWFya2VyRXZlbnQpLGluZm9zOm5ldyB0ci52LmQuR2VuZXJpY1NldChbe3VybCxwaWQ6cmVuZGVyZXJIZWxwZXIucGlkLHN0YXJ0Om5hdmlnYXRpb25TdGFydC5zdGFydCxmbXA6Zm1wTWFya2VyRXZlbnQuc3RhcnQsfV0pLH19KTt9CmZ1bmN0aW9uIGFkZEZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZVNhbXBsZShzYW1wbGVzLHJlbmRlcmVySGVscGVyLG5hdmlnYXRpb25TdGFydCxmbXBNYXJrZXJFdmVudCx1cmwpe2NvbnN0IG5hdlN0YXJ0VG9GTVBSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UobmF2aWdhdGlvblN0YXJ0LnN0YXJ0LGZtcE1hcmtlckV2ZW50LnN0YXJ0KTtjb25zdCBtYWluVGhyZWFkQ3B1VGltZT1yZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmdldENwdVRpbWVGb3JSYW5nZShuYXZTdGFydFRvRk1QUmFuZ2UpO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZUNwdVRpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmF2U3RhcnRUb0ZNUFJhbmdlKTtzYW1wbGVzLnB1c2goe3ZhbHVlOm1haW5UaHJlYWRDcHVUaW1lLGJyZWFrZG93blRyZWUsZGlhZ25vc3RpY3M6e2JyZWFrZG93bjpjcmVhdGVCcmVha2Rvd25EaWFnbm9zdGljKGJyZWFrZG93blRyZWUpLHN0YXJ0Om5ldyBSZWxhdGVkRXZlbnRTZXQobmF2aWdhdGlvblN0YXJ0KSxlbmQ6bmV3IFJlbGF0ZWRFdmVudFNldChmbXBNYXJrZXJFdmVudCksaW5mb3M6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFt7dXJsLHBpZDpyZW5kZXJlckhlbHBlci5waWQsc3RhcnQ6bmF2aWdhdGlvblN0YXJ0LnN0YXJ0LGZtcDpmbXBNYXJrZXJFdmVudC5zdGFydCx9XSksfX0pO30KZnVuY3Rpb24gZGVjb3JhdGVJbnRlcmFjdGl2aXR5U2FtcGxlV2l0aERpYWdub3N0aWNzXyhyZW5kZXJlckhlbHBlcixldmVudFRpbWVzdGFtcCxuYXZpZ2F0aW9uU3RhcnRFdmVudCxmaXJzdE1lYW5pbmdmdWxQYWludFRpbWUsZG9tQ29udGVudExvYWRlZEVuZFRpbWUsdXJsKXtpZihldmVudFRpbWVzdGFtcD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IG5hdmlnYXRpb25TdGFydFRpbWU9bmF2aWdhdGlvblN0YXJ0RXZlbnQuc3RhcnQ7Y29uc3QgbmF2U3RhcnRUb0V2ZW50VGltZVJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShuYXZpZ2F0aW9uU3RhcnRUaW1lLGV2ZW50VGltZXN0YW1wKTtjb25zdCBuZXR3b3JrRXZlbnRzPUV2ZW50RmluZGVyVXRpbHMuZ2V0TmV0d29ya0V2ZW50c0luUmFuZ2UocmVuZGVyZXJIZWxwZXIucHJvY2VzcyxuYXZTdGFydFRvRXZlbnRUaW1lUmFuZ2UpO2NvbnN0IGJyZWFrZG93blRyZWU9dHIubWV0cmljcy5zaC5nZW5lcmF0ZVdhbGxDbG9ja1RpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQsbmV0d29ya0V2ZW50cyxuYXZTdGFydFRvRXZlbnRUaW1lUmFuZ2UpO2NvbnN0IGJyZWFrZG93bkRpYWdub3N0aWM9Y3JlYXRlQnJlYWtkb3duRGlhZ25vc3RpYyhicmVha2Rvd25UcmVlKTtyZXR1cm57dmFsdWU6bmF2U3RhcnRUb0V2ZW50VGltZVJhbmdlLmR1cmF0aW9uLGRpYWdub3N0aWNzOnRyLnYuZC5EaWFnbm9zdGljTWFwLmZyb21PYmplY3QoeydTdGFydCc6bmV3IFJlbGF0ZWRFdmVudFNldChuYXZpZ2F0aW9uU3RhcnRFdmVudCksJ05hdmlnYXRpb24gaW5mb3MnOm5ldyB0ci52LmQuR2VuZXJpY1NldChbe3VybCxwaWQ6cmVuZGVyZXJIZWxwZXIucGlkLG5hdmlnYXRpb25TdGFydFRpbWUsZmlyc3RNZWFuaW5nZnVsUGFpbnRUaW1lLGRvbUNvbnRlbnRMb2FkZWRFbmRUaW1lLGV2ZW50VGltZXN0YW1wLH1dKSwnQnJlYWtkb3duIG9mIFtuYXZTdGFydCwgZXZlbnRUaW1lc3RhbXBdJzpicmVha2Rvd25EaWFnbm9zdGljLH0pLH07fQpmdW5jdGlvbiBnZXRDYW5kaWRhdGVJbmRleChlbnRyeSl7cmV0dXJuIGVudHJ5LnRhcmdldEV2ZW50LmFyZ3MuZGF0YS5jYW5kaWRhdGVJbmRleDt9CmZ1bmN0aW9uIGZpbmRMYXN0Q2FuZGlkYXRlRm9yRWFjaE5hdmlnYXRpb24odGltZVRvWEVudHJpZXMpe2NvbnN0IGVudHJ5TWFwPW5ldyBNYXAoKTtmb3IoY29uc3QgZSBvZiB0aW1lVG9YRW50cmllcyl7Y29uc3QgbmF2U3RhcnRFdmVudD1lLm5hdmlnYXRpb25TdGFydEV2ZW50O2lmKCFlbnRyeU1hcC5oYXMobmF2U3RhcnRFdmVudCkpe2VudHJ5TWFwLnNldChuYXZTdGFydEV2ZW50LFtdKTt9CmVudHJ5TWFwLmdldChuYXZTdGFydEV2ZW50KS5wdXNoKGUpO30KY29uc3QgbGFzdENhbmRpZGF0ZXM9W107Zm9yKGNvbnN0IHRpbWVUb1hFbnRyaWVzQnlOYXZpZ2F0aW9uIG9mIGVudHJ5TWFwLnZhbHVlcygpKXtsZXQgbGFzdENhbmRpZGF0ZT10aW1lVG9YRW50cmllc0J5TmF2aWdhdGlvbi5zaGlmdCgpO2Zvcihjb25zdCBlbnRyeSBvZiB0aW1lVG9YRW50cmllc0J5TmF2aWdhdGlvbil7aWYoZ2V0Q2FuZGlkYXRlSW5kZXgoZW50cnkpPmdldENhbmRpZGF0ZUluZGV4KGxhc3RDYW5kaWRhdGUpKXtsYXN0Q2FuZGlkYXRlPWVudHJ5O319Cmxhc3RDYW5kaWRhdGVzLnB1c2gobGFzdENhbmRpZGF0ZSk7fQpyZXR1cm4gbGFzdENhbmRpZGF0ZXM7fQpmdW5jdGlvbiBmaW5kTGFyZ2VzdFRleHRQYWludFNhbXBsZXMocmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzLG5hdklkVG9OYXZTdGFydEV2ZW50cyl7Y29uc3QgdGltZVRvUGFpbnRFbnRyaWVzPWZpbmRUaW1lVG9YRW50cmllcygnbG9hZGluZycsJ0xhcmdlc3RUZXh0UGFpbnQ6OkNhbmRpZGF0ZScscmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzLG5hdklkVG9OYXZTdGFydEV2ZW50cyk7Y29uc3QgdGltZVRvUGFpbnRCbG9ja2luZ0VudHJpZXM9ZmluZFRpbWVUb1hFbnRyaWVzKCdsb2FkaW5nJywnTGFyZ2VzdFRleHRQYWludDo6Tm9DYW5kaWRhdGUnLHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyxuYXZJZFRvTmF2U3RhcnRFdmVudHMpO2NvbnN0IGxhc3RDYW5kaWRhdGVFdmVudHM9ZmluZExhc3RDYW5kaWRhdGVGb3JFYWNoTmF2aWdhdGlvbih0aW1lVG9QYWludEVudHJpZXMuY29uY2F0KHRpbWVUb1BhaW50QmxvY2tpbmdFbnRyaWVzKSkuZmlsdGVyKGV2ZW50PT5ldmVudC50YXJnZXRFdmVudC50aXRsZSE9PSdMYXJnZXN0VGV4dFBhaW50OjpOb0NhbmRpZGF0ZScpO3JldHVybiBjb2xsZWN0VGltZVRvRXZlbnQocmVuZGVyZXJIZWxwZXIsbGFzdENhbmRpZGF0ZUV2ZW50cyk7fQpmdW5jdGlvbiBmaW5kTGFyZ2VzdEltYWdlUGFpbnRTYW1wbGVzKHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyxuYXZJZFRvTmF2U3RhcnRFdmVudHMpe2NvbnN0IHRpbWVUb1BhaW50RW50cmllcz1maW5kVGltZVRvWEVudHJpZXMoJ2xvYWRpbmcnLCdMYXJnZXN0SW1hZ2VQYWludDo6Q2FuZGlkYXRlJyxyZW5kZXJlckhlbHBlcixmcmFtZVRvTmF2U3RhcnRFdmVudHMsbmF2SWRUb05hdlN0YXJ0RXZlbnRzKTtjb25zdCB0aW1lVG9QYWludEJsb2NraW5nRW50cmllcz1maW5kVGltZVRvWEVudHJpZXMoJ2xvYWRpbmcnLCdMYXJnZXN0SW1hZ2VQYWludDo6Tm9DYW5kaWRhdGUnLHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyxuYXZJZFRvTmF2U3RhcnRFdmVudHMpO2NvbnN0IGxhc3RDYW5kaWRhdGVFdmVudHM9ZmluZExhc3RDYW5kaWRhdGVGb3JFYWNoTmF2aWdhdGlvbih0aW1lVG9QYWludEVudHJpZXMuY29uY2F0KHRpbWVUb1BhaW50QmxvY2tpbmdFbnRyaWVzKSkuZmlsdGVyKGV2ZW50PT5ldmVudC50YXJnZXRFdmVudC50aXRsZSE9PSdMYXJnZXN0SW1hZ2VQYWludDo6Tm9DYW5kaWRhdGUnKTtyZXR1cm4gY29sbGVjdFRpbWVUb0V2ZW50KHJlbmRlcmVySGVscGVyLGxhc3RDYW5kaWRhdGVFdmVudHMpO30KZnVuY3Rpb24gZmluZExhcmdlc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW1TYW1wbGVzKGFsbEJyb3dzZXJFdmVudHMpe2NvbnN0IGxjcD1uZXcgdHIuZS5jaHJvbWUuTGFyZ2VzdENvbnRlbnRmdWxQYWludChhbGxCcm93c2VyRXZlbnRzKTtjb25zdCBsY3BTYW1wbGVzPWxjcC5maW5kQ2FuZGlkYXRlcygpLm1hcChjYW5kaWRhdGU9Pntjb25zdHtkdXJhdGlvbkluTWlsbGlzZWNvbmRzLHNpemUsdHlwZSxpbk1haW5GcmFtZSxtYWluRnJhbWVUcmVlTm9kZUlkfT1jYW5kaWRhdGU7cmV0dXJue3ZhbHVlOmR1cmF0aW9uSW5NaWxsaXNlY29uZHMsZGlhZ25vc3RpY3M6e3NpemU6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFtzaXplXSksdHlwZTpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3R5cGVdKSxpbk1haW5GcmFtZTpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW2luTWFpbkZyYW1lXSksbWFpbkZyYW1lVHJlZU5vZGVJZDpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW21haW5GcmFtZVRyZWVOb2RlSWRdKSx9LH07fSk7cmV0dXJuIGxjcFNhbXBsZXM7fQpmdW5jdGlvbiBjb2xsZWN0TG9hZGluZ01ldHJpY3NGb3JSZW5kZXJlcihyZW5kZXJlckhlbHBlcil7Y29uc3QgZnJhbWVUb05hdlN0YXJ0RXZlbnRzPUV2ZW50RmluZGVyVXRpbHMuZ2V0U29ydGVkTWFpblRocmVhZEV2ZW50c0J5RnJhbWUocmVuZGVyZXJIZWxwZXIsJ25hdmlnYXRpb25TdGFydCcsJ2JsaW5rLnVzZXJfdGltaW5nJyk7Y29uc3QgbmF2SWRUb05hdlN0YXJ0RXZlbnRzPUV2ZW50RmluZGVyVXRpbHMuZ2V0U29ydGVkTWFpblRocmVhZEV2ZW50c0J5TmF2SWQocmVuZGVyZXJIZWxwZXIsJ25hdmlnYXRpb25TdGFydCcsJ2JsaW5rLnVzZXJfdGltaW5nJyk7Y29uc3QgZmlyc3RQYWludFNhbXBsZXM9Y29sbGVjdFRpbWVUb0V2ZW50KHJlbmRlcmVySGVscGVyLGZpbmRUaW1lVG9YRW50cmllcygnbG9hZGluZycsJ2ZpcnN0UGFpbnQnLHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyxuYXZJZFRvTmF2U3RhcnRFdmVudHMpKTtjb25zdCB0aW1lVG9GQ1BFbnRyaWVzPWZpbmRUaW1lVG9YRW50cmllcygnbG9hZGluZycsJ2ZpcnN0Q29udGVudGZ1bFBhaW50JyxyZW5kZXJlckhlbHBlcixmcmFtZVRvTmF2U3RhcnRFdmVudHMsbmF2SWRUb05hdlN0YXJ0RXZlbnRzKTtjb25zdCBmaXJzdENvbnRlbnRmdWxQYWludFNhbXBsZXM9Y29sbGVjdFRpbWVUb0V2ZW50KHJlbmRlcmVySGVscGVyLHRpbWVUb0ZDUEVudHJpZXMpO2NvbnN0IGZpcnN0Q29udGVudGZ1bFBhaW50Q3B1VGltZVNhbXBsZXM9Y29sbGVjdFRpbWVUb0V2ZW50SW5DcHVUaW1lKHJlbmRlcmVySGVscGVyLHRpbWVUb0ZDUEVudHJpZXMpO2NvbnN0IG9uTG9hZFNhbXBsZXM9Y29sbGVjdFRpbWVUb0V2ZW50KHJlbmRlcmVySGVscGVyLGZpbmRUaW1lVG9YRW50cmllcygnYmxpbmsudXNlcl90aW1pbmcnLCdsb2FkRXZlbnRTdGFydCcscmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzLG5hdklkVG9OYXZTdGFydEV2ZW50cykpO2NvbnN0IGFib3ZlVGhlRm9sZExvYWRlZFRvVmlzaWJsZVNhbXBsZXM9Z2V0QWJvdmVUaGVGb2xkTG9hZGVkVG9WaXNpYmxlU2FtcGxlcyhyZW5kZXJlckhlbHBlcik7Y29uc3QgZmlyc3RWaWV3cG9ydFJlYWR5U2FtcGxlcz1nZXRGaXJzdFZpZXdwb3J0UmVhZHlTYW1wbGVzKHJlbmRlcmVySGVscGVyLG5hdklkVG9OYXZTdGFydEV2ZW50cyk7Y29uc3QgbGFyZ2VzdEltYWdlUGFpbnRTYW1wbGVzPWZpbmRMYXJnZXN0SW1hZ2VQYWludFNhbXBsZXMocmVuZGVyZXJIZWxwZXIsZnJhbWVUb05hdlN0YXJ0RXZlbnRzLG5hdklkVG9OYXZTdGFydEV2ZW50cyk7Y29uc3QgbGFyZ2VzdFRleHRQYWludFNhbXBsZXM9ZmluZExhcmdlc3RUZXh0UGFpbnRTYW1wbGVzKHJlbmRlcmVySGVscGVyLGZyYW1lVG9OYXZTdGFydEV2ZW50cyxuYXZJZFRvTmF2U3RhcnRFdmVudHMpO2NvbnN0IGxheW91dFNoaWZ0U2FtcGxlcz1maW5kTGF5b3V0U2hpZnRTYW1wbGVzKHJlbmRlcmVySGVscGVyKTtjb25zdCBuYXZpZ2F0aW9uU3RhcnRTYW1wbGVzPXRpbWVUb0ZDUEVudHJpZXMubWFwKGVudHJ5PT57cmV0dXJue3ZhbHVlOmVudHJ5Lm5hdmlnYXRpb25TdGFydEV2ZW50LnN0YXJ0fTt9KTtyZXR1cm57ZnJhbWVUb05hdlN0YXJ0RXZlbnRzLGZpcnN0UGFpbnRTYW1wbGVzLGZpcnN0Q29udGVudGZ1bFBhaW50U2FtcGxlcyxmaXJzdENvbnRlbnRmdWxQYWludENwdVRpbWVTYW1wbGVzLG9uTG9hZFNhbXBsZXMsYWJvdmVUaGVGb2xkTG9hZGVkVG9WaXNpYmxlU2FtcGxlcyxmaXJzdFZpZXdwb3J0UmVhZHlTYW1wbGVzLGxhcmdlc3RJbWFnZVBhaW50U2FtcGxlcyxsYXJnZXN0VGV4dFBhaW50U2FtcGxlcyxsYXlvdXRTaGlmdFNhbXBsZXMsbmF2aWdhdGlvblN0YXJ0U2FtcGxlcyx9O30KZnVuY3Rpb24gY29sbGVjdE1ldHJpY3NGcm9tTG9hZEV4cGVjdGF0aW9ucyhtb2RlbCxjaHJvbWVIZWxwZXIpe2NvbnN0IGludGVyYWN0aXZlU2FtcGxlcz1bXTtjb25zdCBmaXJzdENwdUlkbGVTYW1wbGVzPVtdO2NvbnN0IGZpcnN0TWVhbmluZ2Z1bFBhaW50U2FtcGxlcz1bXTtjb25zdCBmaXJzdE1lYW5pbmdmdWxQYWludENwdVRpbWVTYW1wbGVzPVtdO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZighKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKSljb250aW51ZTtpZih0ci5lLmNocm9tZS5DSFJPTUVfSU5URVJOQUxfVVJMUy5pbmNsdWRlcyhleHBlY3RhdGlvbi51cmwpKXtjb250aW51ZTt9CmNvbnN0IHJlbmRlcmVySGVscGVyPWNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnNbZXhwZWN0YXRpb24ucmVuZGVyUHJvY2Vzcy5waWRdO2lmKGV4cGVjdGF0aW9uLmZtcEV2ZW50IT09dW5kZWZpbmVkKXthZGRGaXJzdE1lYW5pbmdmdWxQYWludFNhbXBsZShmaXJzdE1lYW5pbmdmdWxQYWludFNhbXBsZXMscmVuZGVyZXJIZWxwZXIsZXhwZWN0YXRpb24ubmF2aWdhdGlvblN0YXJ0LGV4cGVjdGF0aW9uLmZtcEV2ZW50LGV4cGVjdGF0aW9uLnVybCk7YWRkRmlyc3RNZWFuaW5nZnVsUGFpbnRDcHVUaW1lU2FtcGxlKGZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZVNhbXBsZXMscmVuZGVyZXJIZWxwZXIsZXhwZWN0YXRpb24ubmF2aWdhdGlvblN0YXJ0LGV4cGVjdGF0aW9uLmZtcEV2ZW50LGV4cGVjdGF0aW9uLnVybCk7fQppZihleHBlY3RhdGlvbi5maXJzdENwdUlkbGVUaW1lIT09dW5kZWZpbmVkKXtmaXJzdENwdUlkbGVTYW1wbGVzLnB1c2goZGVjb3JhdGVJbnRlcmFjdGl2aXR5U2FtcGxlV2l0aERpYWdub3N0aWNzXyhyZW5kZXJlckhlbHBlcixleHBlY3RhdGlvbi5maXJzdENwdUlkbGVUaW1lLGV4cGVjdGF0aW9uLm5hdmlnYXRpb25TdGFydCxleHBlY3RhdGlvbi5mbXBFdmVudC5zdGFydCxleHBlY3RhdGlvbi5kb21Db250ZW50TG9hZGVkRW5kRXZlbnQuc3RhcnQsZXhwZWN0YXRpb24udXJsKSk7fQppZihleHBlY3RhdGlvbi50aW1lVG9JbnRlcmFjdGl2ZSE9PXVuZGVmaW5lZCl7aW50ZXJhY3RpdmVTYW1wbGVzLnB1c2goZGVjb3JhdGVJbnRlcmFjdGl2aXR5U2FtcGxlV2l0aERpYWdub3N0aWNzXyhyZW5kZXJlckhlbHBlcixleHBlY3RhdGlvbi50aW1lVG9JbnRlcmFjdGl2ZSxleHBlY3RhdGlvbi5uYXZpZ2F0aW9uU3RhcnQsZXhwZWN0YXRpb24uZm1wRXZlbnQuc3RhcnQsZXhwZWN0YXRpb24uZG9tQ29udGVudExvYWRlZEVuZEV2ZW50LnN0YXJ0LGV4cGVjdGF0aW9uLnVybCkpO319CnJldHVybntmaXJzdE1lYW5pbmdmdWxQYWludFNhbXBsZXMsZmlyc3RNZWFuaW5nZnVsUGFpbnRDcHVUaW1lU2FtcGxlcyxmaXJzdENwdUlkbGVTYW1wbGVzLGludGVyYWN0aXZlU2FtcGxlcyx9O30KZnVuY3Rpb24gYWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXMsaGlzdG9ncmFtLGhpc3RvZ3JhbXMpe2Zvcihjb25zdCBzYW1wbGUgb2Ygc2FtcGxlcyl7aGlzdG9ncmFtLmFkZFNhbXBsZShzYW1wbGUudmFsdWUsc2FtcGxlLmRpYWdub3N0aWNzKTtpZihoaXN0b2dyYW0ubmFtZSE9PSd0aW1lVG9GaXJzdENvbnRlbnRmdWxQYWludCcpY29udGludWU7aWYoIXNhbXBsZS5icmVha2Rvd25UcmVlKWNvbnRpbnVlO2Zvcihjb25zdFtjYXRlZ29yeSxicmVha2Rvd25db2YgT2JqZWN0LmVudHJpZXMoc2FtcGxlLmJyZWFrZG93blRyZWUpKXtjb25zdCByZWxhdGVkTmFtZT1gJHtoaXN0b2dyYW0ubmFtZX06JHtjYXRlZ29yeX1gO2xldCByZWxhdGVkSGlzdD1oaXN0b2dyYW1zLmdldEhpc3RvZ3JhbXNOYW1lZChyZWxhdGVkTmFtZSlbMF07aWYoIXJlbGF0ZWRIaXN0KXtyZWxhdGVkSGlzdD1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShyZWxhdGVkTmFtZSxoaXN0b2dyYW0udW5pdCxbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOntjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN1bTpmYWxzZSx9LH0pO2xldCByZWxhdGVkTmFtZXM9aGlzdG9ncmFtLmRpYWdub3N0aWNzLmdldCgnYnJlYWtkb3duJyk7aWYoIXJlbGF0ZWROYW1lcyl7cmVsYXRlZE5hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtoaXN0b2dyYW0uZGlhZ25vc3RpY3Muc2V0KCdicmVha2Rvd24nLHJlbGF0ZWROYW1lcyk7fQpyZWxhdGVkTmFtZXMuc2V0KGNhdGVnb3J5LHJlbGF0ZWROYW1lKTt9CnJlbGF0ZWRIaXN0LmFkZFNhbXBsZShicmVha2Rvd24udG90YWwse2JyZWFrZG93bjp0ci52LmQuQnJlYWtkb3duLmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGJyZWFrZG93bi5ldmVudHMpKSx9KTt9fX0KZnVuY3Rpb24gbG9hZGluZ01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBmaXJzdFBhaW50SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCd0aW1lVG9GaXJzdFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOid0aW1lIHRvIGZpcnN0IHBhaW50JyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgZmlyc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ZpcnN0Q29udGVudGZ1bFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOid0aW1lIHRvIGZpcnN0IGNvbnRlbnRmdWwgcGFpbnQnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBmaXJzdENvbnRlbnRmdWxQYWludENwdVRpbWVIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2NwdVRpbWVUb0ZpcnN0Q29udGVudGZ1bFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidDUFUgdGltZSB0byBmaXJzdCBjb250ZW50ZnVsIHBhaW50JyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3Qgb25Mb2FkSGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCd0aW1lVG9PbmxvYWQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J3RpbWUgdG8gb25sb2FkLiAnKydUaGlzIGlzIHRlbXBvcmFyeSBtZXRyaWMgdXNlZCBmb3IgUEN2MS92MiBzYW5pdHkgY2hlY2tpbmcnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBmaXJzdE1lYW5pbmdmdWxQYWludEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGltZVRvRmlyc3RNZWFuaW5nZnVsUGFpbnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J3RpbWUgdG8gZmlyc3QgbWVhbmluZ2Z1bCBwYWludCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZUhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnY3B1VGltZVRvRmlyc3RNZWFuaW5nZnVsUGFpbnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J0NQVSB0aW1lIHRvIGZpcnN0IG1lYW5pbmdmdWwgcGFpbnQnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCB0aW1lVG9JbnRlcmFjdGl2ZUhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGltZVRvSW50ZXJhY3RpdmUnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOlRJTUVfVE9fSU5URVJBQ1RJVkVfQk9VTkRBUklFUyxkZXNjcmlwdGlvbjonVGltZSB0byBJbnRlcmFjdGl2ZScsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IHRpbWVUb0ZpcnN0Q3B1SWRsZUhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGltZVRvRmlyc3RDcHVJZGxlJyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpUSU1FX1RPX0lOVEVSQUNUSVZFX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RpbWUgdG8gRmlyc3QgQ1BVIElkbGUnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBhYm92ZVRoZUZvbGRMb2FkZWRUb1Zpc2libGVIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2Fib3ZlVGhlRm9sZExvYWRlZFRvVmlzaWJsZScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6VElNRV9UT19JTlRFUkFDVElWRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIGZyb20gZmlyc3QgdmlzaWJsZSB0byBsb2FkIGZvciBBTVAgcGFnZXMgb25seS4nLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBmaXJzdFZpZXdwb3J0UmVhZHlIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ3RpbWVUb0ZpcnN0Vmlld3BvcnRSZWFkeScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6VElNRV9UT19JTlRFUkFDVElWRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIGZyb20gbmF2aWdhdGlvbiB0byBsb2FkIGZvciBBTVAgcGFnZXMgb25seS4gJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgbGFyZ2VzdEltYWdlUGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2xhcmdlc3RJbWFnZVBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIHRvIExhcmdlc3QgSW1hZ2UgUGFpbnQnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBsYXJnZXN0VGV4dFBhaW50SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdsYXJnZXN0VGV4dFBhaW50Jyx0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidUaW1lIHRvIExhcmdlc3QgVGV4dCBQYWludCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGxhcmdlc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2xhcmdlc3RDb250ZW50ZnVsUGFpbnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RpbWUgdG8gTGFyZ2VzdCBDb250ZW50ZnVsIFBhaW50JyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgbGF5b3V0U2hpZnRIaXN0b2dyYW09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ21haW5GcmFtZUN1bXVsYXRpdmVMYXlvdXRTaGlmdCcsdW5pdGxlc3NOdW1iZXJfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxBWU9VVF9TSElGVF9TQ09SRV9CT1VOREFSSUVTLGRlc2NyaXB0aW9uOidNYWluIEZyYW1lIERvY3VtZW50IEN1bXVsYXRpdmUgTGF5b3V0IFNoaWZ0IFNjb3JlJyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7Y29uc3QgbmF2aWdhdGlvblN0YXJ0SGlzdG9ncmFtPWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCduYXZpZ2F0aW9uU3RhcnQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J25hdmlnYXRpb25TdGFydCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO3RyLm1ldHJpY3Muc2gucmVjdHNCYXNlZFNwZWVkSW5kZXhNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCk7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2Zvcihjb25zdCBwaWQgaW4gY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyl7Y29uc3QgcmVuZGVyZXJIZWxwZXI9Y2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVyc1twaWRdO2lmKHJlbmRlcmVySGVscGVyLmlzQ2hyb21lVHJhY2luZ1VJKWNvbnRpbnVlO2NvbnN0IHNhbXBsZXNTZXQ9Y29sbGVjdExvYWRpbmdNZXRyaWNzRm9yUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIpO2NvbnN0IGxjcFNhbXBsZXM9ZmluZExhcmdlc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW1TYW1wbGVzKGNocm9tZUhlbHBlci5icm93c2VySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC5zbGljZXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShsY3BTYW1wbGVzLGxhcmdlc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RQYWludFNhbXBsZXMsZmlyc3RQYWludEhpc3RvZ3JhbSxoaXN0b2dyYW1zKTthZGRTYW1wbGVzVG9IaXN0b2dyYW0oc2FtcGxlc1NldC5maXJzdENvbnRlbnRmdWxQYWludFNhbXBsZXMsZmlyc3RDb250ZW50ZnVsUGFpbnRIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RDb250ZW50ZnVsUGFpbnRDcHVUaW1lU2FtcGxlcyxmaXJzdENvbnRlbnRmdWxQYWludENwdVRpbWVIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQub25Mb2FkU2FtcGxlcyxvbkxvYWRIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuYWJvdmVUaGVGb2xkTG9hZGVkVG9WaXNpYmxlU2FtcGxlcyxhYm92ZVRoZUZvbGRMb2FkZWRUb1Zpc2libGVIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RWaWV3cG9ydFJlYWR5U2FtcGxlcyxmaXJzdFZpZXdwb3J0UmVhZHlIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQubGFyZ2VzdEltYWdlUGFpbnRTYW1wbGVzLGxhcmdlc3RJbWFnZVBhaW50SGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0Lmxhcmdlc3RUZXh0UGFpbnRTYW1wbGVzLGxhcmdlc3RUZXh0UGFpbnRIaXN0b2dyYW0saGlzdG9ncmFtcyk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQubGF5b3V0U2hpZnRTYW1wbGVzLGxheW91dFNoaWZ0SGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0Lm5hdmlnYXRpb25TdGFydFNhbXBsZXMsbmF2aWdhdGlvblN0YXJ0SGlzdG9ncmFtLGhpc3RvZ3JhbXMpO30KY29uc3Qgc2FtcGxlc1NldD1jb2xsZWN0TWV0cmljc0Zyb21Mb2FkRXhwZWN0YXRpb25zKG1vZGVsLGNocm9tZUhlbHBlcik7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHNhbXBsZXNTZXQuZmlyc3RNZWFuaW5nZnVsUGFpbnRTYW1wbGVzLGZpcnN0TWVhbmluZ2Z1bFBhaW50SGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0LmZpcnN0TWVhbmluZ2Z1bFBhaW50Q3B1VGltZVNhbXBsZXMsZmlyc3RNZWFuaW5nZnVsUGFpbnRDcHVUaW1lSGlzdG9ncmFtLGhpc3RvZ3JhbXMpO2FkZFNhbXBsZXNUb0hpc3RvZ3JhbShzYW1wbGVzU2V0LmludGVyYWN0aXZlU2FtcGxlcyx0aW1lVG9JbnRlcmFjdGl2ZUhpc3RvZ3JhbSxoaXN0b2dyYW1zKTthZGRTYW1wbGVzVG9IaXN0b2dyYW0oc2FtcGxlc1NldC5maXJzdENwdUlkbGVTYW1wbGVzLHRpbWVUb0ZpcnN0Q3B1SWRsZUhpc3RvZ3JhbSxoaXN0b2dyYW1zKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobG9hZGluZ01ldHJpYyk7cmV0dXJue2xvYWRpbmdNZXRyaWMsY3JlYXRlQnJlYWtkb3duRGlhZ25vc3RpY307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2NvbnN0IFNQQV9OQVZJR0FUSU9OX1NUQVJUX1RPX0ZJUlNUX1BBSU5UX0RVUkFUSU9OX0JJTl9CT1VOREFSWT10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMSwxMDAwLDUwKTtmdW5jdGlvbiBzcGFOYXZpZ2F0aW9uTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGhpc3RvZ3JhbT1uZXcgdHIudi5IaXN0b2dyYW0oJ3NwYU5hdmlnYXRpb25TdGFydFRvRnBEdXJhdGlvbicsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixTUEFfTkFWSUdBVElPTl9TVEFSVF9UT19GSVJTVF9QQUlOVF9EVVJBVElPTl9CSU5fQk9VTkRBUlkpO2hpc3RvZ3JhbS5kZXNjcmlwdGlvbj0nTGF0ZW5jeSBiZXR3ZWVuIHRoZSBpbnB1dCBldmVudCBjYXVzaW5nJysnIGEgU1BBIG5hdmlnYXRpb24gYW5kIHRoZSBmaXJzdCBwYWludCBldmVudCBhZnRlciBpdCc7aGlzdG9ncmFtLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHtjb3VudDpmYWxzZSxzdW06ZmFsc2UsfSk7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoIW1vZGVsSGVscGVyKXtyZXR1cm47fQpjb25zdCByZW5kZXJlckhlbHBlcnM9bW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzO2lmKCFyZW5kZXJlckhlbHBlcnMpe3JldHVybjt9CmNvbnN0IGJyb3dzZXJIZWxwZXI9bW9kZWxIZWxwZXIuYnJvd3NlckhlbHBlcjtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhyZW5kZXJlckhlbHBlcnMpKXtjb25zdCBzcGFOYXZpZ2F0aW9ucz10ci5tZXRyaWNzLmZpbmRTcGFOYXZpZ2F0aW9uc09uUmVuZGVyZXIocmVuZGVyZXJIZWxwZXIsYnJvd3NlckhlbHBlcik7Zm9yKGNvbnN0IHNwYU5hdiBvZiBzcGFOYXZpZ2F0aW9ucyl7bGV0IGJlZ2luVHM9MDtpZihzcGFOYXYubmF2U3RhcnRDYW5kaWRhdGVzLmlucHV0TGF0ZW5jeUFzeW5jU2xpY2Upe2NvbnN0IGJlZ2luRGF0YT1zcGFOYXYubmF2U3RhcnRDYW5kaWRhdGVzLmlucHV0TGF0ZW5jeUFzeW5jU2xpY2UuYXJncy5kYXRhO2JlZ2luVHM9bW9kZWwuY29udmVydFRpbWVzdGFtcFRvTW9kZWxUaW1lKCd0cmFjZUV2ZW50Q2xvY2snLGJlZ2luRGF0YS5JTlBVVF9FVkVOVF9MQVRFTkNZX0JFR0lOX1JXSF9DT01QT05FTlQudGltZSk7fWVsc2V7YmVnaW5Ucz1zcGFOYXYubmF2U3RhcnRDYW5kaWRhdGVzLmdvVG9JbmRleFNsaWNlLnN0YXJ0O30KY29uc3QgcmFuZ2VPZkludGVyZXN0PXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShiZWdpblRzLHNwYU5hdi5maXJzdFBhaW50RXZlbnQuc3RhcnQpO2NvbnN0IG5ldHdvcmtFdmVudHM9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5nZXROZXR3b3JrRXZlbnRzSW5SYW5nZShyZW5kZXJlckhlbHBlci5wcm9jZXNzLHJhbmdlT2ZJbnRlcmVzdCk7Y29uc3QgYnJlYWtkb3duRGljdD10ci5tZXRyaWNzLnNoLmdlbmVyYXRlV2FsbENsb2NrVGltZUJyZWFrZG93blRyZWUocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCxuZXR3b3JrRXZlbnRzLHJhbmdlT2ZJbnRlcmVzdCk7Y29uc3QgYnJlYWtkb3duRGlhZ25vc3RpYz1uZXcgdHIudi5kLkJyZWFrZG93bigpO2JyZWFrZG93bkRpYWdub3N0aWMuY29sb3JTY2hlbWU9dHIudi5kLkNPTE9SX1NDSEVNRV9DSFJPTUVfVVNFUl9GUklFTkRMWV9DQVRFR09SWV9EUklWRVI7Zm9yKGNvbnN0IGxhYmVsIGluIGJyZWFrZG93bkRpY3Qpe2JyZWFrZG93bkRpYWdub3N0aWMuc2V0KGxhYmVsLHBhcnNlSW50KGJyZWFrZG93bkRpY3RbbGFiZWxdLnRvdGFsKjFlMykvMWUzKTt9Cmhpc3RvZ3JhbS5hZGRTYW1wbGUocmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uLHsnQnJlYWtkb3duIG9mIFtuYXZTdGFydCwgZmlyc3RQYWludF0nOmJyZWFrZG93bkRpYWdub3N0aWMsJ1N0YXJ0JzpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzcGFOYXYubmF2aWdhdGlvblN0YXJ0KSwnRW5kJzpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChzcGFOYXYuZmlyc3RQYWludEV2ZW50KSwnTmF2aWdhdGlvbiBpbmZvcyc6bmV3IHRyLnYuZC5HZW5lcmljU2V0KFt7dXJsOnNwYU5hdi51cmwscGlkOnJlbmRlcmVySGVscGVyLnBpZCxuYXZTdGFydDpiZWdpblRzLGZpcnN0UGFpbnQ6c3BhTmF2LmZpcnN0UGFpbnRFdmVudC5zdGFydH1dKSx9KTt9fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihzcGFOYXZpZ2F0aW9uTWV0cmljKTtyZXR1cm57c3BhTmF2aWdhdGlvbk1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBMQVRFTkNZX0JPVU5EUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMTAwKTtmdW5jdGlvbiBjbG9ja1N5bmNMYXRlbmN5TWV0cmljKHZhbHVlcyxtb2RlbCl7Y29uc3QgZG9tYWlucz1BcnJheS5mcm9tKG1vZGVsLmNsb2NrU3luY01hbmFnZXIuZG9tYWluc1NlZW4pLnNvcnQoKTtmb3IobGV0IGk9MDtpPGRvbWFpbnMubGVuZ3RoO2krKyl7Zm9yKGxldCBqPWkrMTtqPGRvbWFpbnMubGVuZ3RoO2orKyl7Y29uc3QgbGF0ZW5jeT1tb2RlbC5jbG9ja1N5bmNNYW5hZ2VyLmdldFRpbWVUcmFuc2Zvcm1lckVycm9yKGRvbWFpbnNbaV0sZG9tYWluc1tqXSk7Y29uc3QgaGlzdD1uZXcgdHIudi5IaXN0b2dyYW0oJ2Nsb2NrX3N5bmNfbGF0ZW5jeV8nKwpkb21haW5zW2ldLnRvTG93ZXJDYXNlKCkrJ190b18nK2RvbWFpbnNbal0udG9Mb3dlckNhc2UoKSx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLExBVEVOQ1lfQk9VTkRTKTtoaXN0LmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2UsfSk7aGlzdC5kZXNjcmlwdGlvbj0nQ2xvY2sgc3luYyBsYXRlbmN5IGZvciBkb21haW4gJytkb21haW5zW2ldKycgdG8gZG9tYWluICcrZG9tYWluc1tqXTtoaXN0LmFkZFNhbXBsZShsYXRlbmN5KTt2YWx1ZXMuYWRkSGlzdG9ncmFtKGhpc3QpO319fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGNsb2NrU3luY0xhdGVuY3lNZXRyaWMpO3JldHVybntjbG9ja1N5bmNMYXRlbmN5TWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IENQVV9USU1FX1BFUkNFTlRBR0VfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMC4wMSw1MCwyMDApO2Z1bmN0aW9uIGNwdVRpbWVNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCxvcHRfb3B0aW9ucyl7bGV0IHJhbmdlT2ZJbnRlcmVzdD1tb2RlbC5ib3VuZHM7aWYob3B0X29wdGlvbnMmJm9wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdCl7cmFuZ2VPZkludGVyZXN0PW9wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDt9ZWxzZXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYoY2hyb21lSGVscGVyKXtjb25zdCBjaHJvbWVCb3VuZHM9Y2hyb21lSGVscGVyLmNocm9tZUJvdW5kcztpZihjaHJvbWVCb3VuZHMpe3JhbmdlT2ZJbnRlcmVzdD1jaHJvbWVCb3VuZHM7fX19CmxldCBhbGxQcm9jZXNzQ3B1VGltZT0wO2Zvcihjb25zdCBwaWQgaW4gbW9kZWwucHJvY2Vzc2VzKXtjb25zdCBwcm9jZXNzPW1vZGVsLnByb2Nlc3Nlc1twaWRdO2lmKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lUmVuZGVyZXJIZWxwZXIuaXNUcmFjaW5nUHJvY2Vzcyhwcm9jZXNzKSl7Y29udGludWU7fQpsZXQgcHJvY2Vzc0NwdVRpbWU9MDtmb3IoY29uc3QgdGlkIGluIHByb2Nlc3MudGhyZWFkcyl7Y29uc3QgdGhyZWFkPXByb2Nlc3MudGhyZWFkc1t0aWRdO3Byb2Nlc3NDcHVUaW1lKz10aHJlYWQuZ2V0Q3B1VGltZUZvclJhbmdlKHJhbmdlT2ZJbnRlcmVzdCk7fQphbGxQcm9jZXNzQ3B1VGltZSs9cHJvY2Vzc0NwdVRpbWU7fQpsZXQgbm9ybWFsaXplZEFsbFByb2Nlc3NDcHVUaW1lPTA7aWYocmFuZ2VPZkludGVyZXN0LmR1cmF0aW9uPjApe25vcm1hbGl6ZWRBbGxQcm9jZXNzQ3B1VGltZT1hbGxQcm9jZXNzQ3B1VGltZS9yYW5nZU9mSW50ZXJlc3QuZHVyYXRpb247fQpjb25zdCB1bml0PXRyLmIuVW5pdC5ieU5hbWUubm9ybWFsaXplZFBlcmNlbnRhZ2Vfc21hbGxlcklzQmV0dGVyO2NvbnN0IGNwdVRpbWVIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnY3B1X3RpbWVfcGVyY2VudGFnZScsdW5pdCxDUFVfVElNRV9QRVJDRU5UQUdFX0JPVU5EQVJJRVMpO2NwdVRpbWVIaXN0LmRlc2NyaXB0aW9uPSdQZXJjZW50IENQVSB1dGlsaXphdGlvbiwgbm9ybWFsaXplZCBhZ2FpbnN0IGEgc2luZ2xlIGNvcmUuIENhbiBiZSAnKydncmVhdGVyIHRoYW4gMTAwJSBpZiBtYWNoaW5lIGhhcyBtdWx0aXBsZSBjb3Jlcy4nO2NwdVRpbWVIaXN0LmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN0ZDpmYWxzZSxzdW06ZmFsc2V9KTtjcHVUaW1lSGlzdC5hZGRTYW1wbGUobm9ybWFsaXplZEFsbFByb2Nlc3NDcHVUaW1lKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVUaW1lSGlzdCk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGNwdVRpbWVNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWV9KTtyZXR1cm57Y3B1VGltZU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjbGFzcyBIaXN0b2dyYW1EZXNlcmlhbGl6ZXJ7c3RhdGljIGRlc2VyaWFsaXplKGRhdGEpe2NvbnN0IGRlc2VyaWFsaXplcj1uZXcgSGlzdG9ncmFtRGVzZXJpYWxpemVyKGRhdGFbMF0sZGF0YVsxXSk7cmV0dXJuIGRhdGEuc2xpY2UoMikubWFwKGRhdHVtPT50ci52Lkhpc3RvZ3JhbS5kZXNlcmlhbGl6ZShkYXR1bSxkZXNlcmlhbGl6ZXIpKTt9CmNvbnN0cnVjdG9yKG9iamVjdHMsZGlhZ25vc3RpY3Mpe3RoaXMub2JqZWN0c189b2JqZWN0czt0aGlzLmRpYWdub3N0aWNzXz1bXTtmb3IoY29uc3RbdHlwZSxkaWFnbm9zdGljc0J5TmFtZV1vZiBPYmplY3QuZW50cmllcyhkaWFnbm9zdGljc3x8e30pKXtmb3IoY29uc3RbbmFtZSxkaWFnbm9zdGljc0J5SWRdb2YgT2JqZWN0LmVudHJpZXMoZGlhZ25vc3RpY3NCeU5hbWUpKXtmb3IoY29uc3RbaWQsZGF0YV1vZiBPYmplY3QuZW50cmllcyhkaWFnbm9zdGljc0J5SWQpKXtjb25zdCBkaWFnbm9zdGljPXRyLnYuZC5EaWFnbm9zdGljLmRlc2VyaWFsaXplKHR5cGUsZGF0YSx0aGlzKTt0aGlzLmRpYWdub3N0aWNzX1twYXJzZUludChpZCldPXtuYW1lLGRpYWdub3N0aWN9O319fX0KZ2V0T2JqZWN0KGlkKXtyZXR1cm4gdGhpcy5vYmplY3RzX1tpZF07fQpnZXREaWFnbm9zdGljKGlkKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljc19bcGFyc2VJbnQoaWQpXTt9fQpyZXR1cm57SGlzdG9ncmFtRGVzZXJpYWxpemVyfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYnLGZ1bmN0aW9uKCl7Y2xhc3MgSGlzdG9ncmFtR3JvdXBpbmd7Y29uc3RydWN0b3Ioa2V5LGNhbGxiYWNrKXt0aGlzLmtleV89a2V5O3RoaXMuY2FsbGJhY2tfPWNhbGxiYWNrO0hpc3RvZ3JhbUdyb3VwaW5nLkJZX0tFWS5zZXQoa2V5LHRoaXMpO30KZ2V0IGtleSgpe3JldHVybiB0aGlzLmtleV87fQpnZXQgY2FsbGJhY2soKXtyZXR1cm4gdGhpcy5jYWxsYmFja187fQpnZXQgbGFiZWwoKXtyZXR1cm4gdGhpcy5rZXk7fQpzdGF0aWMgYnVpbGRGcm9tVGFncyh0YWdzLGRpYWdub3N0aWNOYW1lKXtjb25zdCBib29sZWFuVGFncz1uZXcgU2V0KCk7Y29uc3Qga2V5VmFsdWVUYWdzPW5ldyBTZXQoKTtmb3IoY29uc3QgdGFnIG9mIHRhZ3Mpe2lmKHRhZy5pbmNsdWRlcygnOicpKXtjb25zdCBrZXk9dGFnLnNwbGl0KCc6JylbMF07aWYoYm9vbGVhblRhZ3MuaGFzKGtleSkpe3Rocm93IG5ldyBFcnJvcihgVGFnICIke2tleX0iIGNhbm5vdCBiZSBib3RoIGJvb2xlYW4gYW5kIGtleS12YWx1ZWApO30Ka2V5VmFsdWVUYWdzLmFkZChrZXkpO31lbHNle2lmKGtleVZhbHVlVGFncy5oYXModGFnKSl7dGhyb3cgbmV3IEVycm9yKGBUYWcgIiR7dGFnfSIgY2Fubm90IGJlIGJvdGggYm9vbGVhbiBhbmQga2V5LXZhbHVlYCk7fQpib29sZWFuVGFncy5hZGQodGFnKTt9fQpjb25zdCBncm91cGluZ3M9W107Zm9yKGNvbnN0IHRhZyBvZiBib29sZWFuVGFncyl7Z3JvdXBpbmdzLnB1c2goSGlzdG9ncmFtR3JvdXBpbmcuYnVpbGRCb29sZWFuVGFnR3JvdXBpbmdfKHRhZyxkaWFnbm9zdGljTmFtZSkpO30KZm9yKGNvbnN0IHRhZyBvZiBrZXlWYWx1ZVRhZ3Mpe2dyb3VwaW5ncy5wdXNoKEhpc3RvZ3JhbUdyb3VwaW5nLmJ1aWxkS2V5VmFsdWVUYWdHcm91cGluZ18odGFnLGRpYWdub3N0aWNOYW1lKSk7fQpyZXR1cm4gZ3JvdXBpbmdzO30Kc3RhdGljIGJ1aWxkQm9vbGVhblRhZ0dyb3VwaW5nXyh0YWcsZGlhZ25vc3RpY05hbWUpe3JldHVybiBuZXcgSGlzdG9ncmFtR3JvdXBpbmcoYCR7dGFnfVRhZ2AsaD0+e2NvbnN0IHRhZ3M9aC5kaWFnbm9zdGljcy5nZXQoZGlhZ25vc3RpY05hbWUpO2lmKHRhZ3M9PT11bmRlZmluZWR8fCF0YWdzLmhhcyh0YWcpKXJldHVybmB+JHt0YWd9YDtyZXR1cm4gdGFnO30pO30Kc3RhdGljIGJ1aWxkS2V5VmFsdWVUYWdHcm91cGluZ18odGFnLGRpYWdub3N0aWNOYW1lKXtyZXR1cm4gbmV3IEhpc3RvZ3JhbUdyb3VwaW5nKGAke3RhZ31UYWdgLGg9Pntjb25zdCB0YWdzPWguZGlhZ25vc3RpY3MuZ2V0KGRpYWdub3N0aWNOYW1lKTtpZih0YWdzPT09dW5kZWZpbmVkKXJldHVybmB+JHt0YWd9YDtjb25zdCB2YWx1ZXM9bmV3IFNldCgpO2Zvcihjb25zdCB2YWx1ZSBvZiB0YWdzKXtjb25zdCBrdnA9dmFsdWUuc3BsaXQoJzonKTtpZihrdnAubGVuZ3RoPDJ8fGt2cFswXSE9PXRhZyljb250aW51ZTt2YWx1ZXMuYWRkKGt2cFsxXSk7fQppZih2YWx1ZXMuc2l6ZT09PTApcmV0dXJuYH4ke3RhZ31gO2NvbnN0IHNvcnRlZFZhbHVlcz1BcnJheS5mcm9tKHZhbHVlcyk7c29ydGVkVmFsdWVzLnNvcnQoKTtyZXR1cm4gc29ydGVkVmFsdWVzLmpvaW4oJywnKTt9LGAke3RhZ30gdGFnYCk7fX0KSGlzdG9ncmFtR3JvdXBpbmcuQllfS0VZPW5ldyBNYXAoKTtIaXN0b2dyYW1Hcm91cGluZy5ISVNUT0dSQU1fTkFNRT1uZXcgSGlzdG9ncmFtR3JvdXBpbmcoJ25hbWUnLGg9PmgubmFtZSk7SGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTD1uZXcgSGlzdG9ncmFtR3JvdXBpbmcoJ2Rpc3BsYXlMYWJlbCcsaGlzdD0+e2NvbnN0IGxhYmVscz1oaXN0LmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuTEFCRUxTKTtpZihsYWJlbHMhPT11bmRlZmluZWQmJmxhYmVscy5zaXplPjApe3JldHVybiBBcnJheS5mcm9tKGxhYmVscykuam9pbignLCcpO30KY29uc3QgYmVuY2htYXJrcz1oaXN0LmRpYWdub3N0aWNzLmdldCh0ci52LmQuUkVTRVJWRURfTkFNRVMuQkVOQ0hNQVJLUyk7Y29uc3Qgc3RhcnQ9aGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS19TVEFSVCk7aWYoYmVuY2htYXJrcz09PXVuZGVmaW5lZCl7aWYoc3RhcnQ9PT11bmRlZmluZWQpcmV0dXJuJ1ZhbHVlJztyZXR1cm4gc3RhcnQudG9TdHJpbmcoKTt9CmNvbnN0IGJlbmNobWFya3NTdHI9QXJyYXkuZnJvbShiZW5jaG1hcmtzKS5qb2luKCdcbicpO2lmKHN0YXJ0PT09dW5kZWZpbmVkKXJldHVybiBiZW5jaG1hcmtzU3RyO3JldHVybiBiZW5jaG1hcmtzU3RyKydcbicrc3RhcnQudG9TdHJpbmcoKTt9KTtjbGFzcyBHZW5lcmljU2V0R3JvdXBpbmcgZXh0ZW5kcyBIaXN0b2dyYW1Hcm91cGluZ3tjb25zdHJ1Y3RvcihuYW1lKXtzdXBlcihuYW1lLHVuZGVmaW5lZCk7dGhpcy5jYWxsYmFja189dGhpcy5jb21wdXRlXy5iaW5kKHRoaXMpO30KY29tcHV0ZV8oaGlzdCl7Y29uc3QgZGlhZz1oaXN0LmRpYWdub3N0aWNzLmdldCh0aGlzLmtleSk7aWYoZGlhZz09PXVuZGVmaW5lZClyZXR1cm4nJztjb25zdCBwYXJ0cz1BcnJheS5mcm9tKGRpYWcpO3BhcnRzLnNvcnQoKTtyZXR1cm4gcGFydHMuam9pbignLCcpO319CkdlbmVyaWNTZXRHcm91cGluZy5OQU1FUz1bdHIudi5kLlJFU0VSVkVEX05BTUVTLkFSQ0hJVEVDVFVSRVMsdHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS1MsdHIudi5kLlJFU0VSVkVEX05BTUVTLkJPVFMsdHIudi5kLlJFU0VSVkVEX05BTUVTLkJVSUxEUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuREVWSUNFX0lEUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuTUFTVEVSUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuTUVNT1JZX0FNT1VOVFMsdHIudi5kLlJFU0VSVkVEX05BTUVTLk9TX05BTUVTLHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5PU19WRVJTSU9OUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuUFJPRFVDVF9WRVJTSU9OUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RPUklFUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RPUllTRVRfUkVQRUFUUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RPUllfVEFHUyx0ci52LmQuUkVTRVJWRURfTkFNRVMuVEVTVF9QQVRILF07Zm9yKGNvbnN0IG5hbWUgb2YgR2VuZXJpY1NldEdyb3VwaW5nLk5BTUVTKXtuZXcgR2VuZXJpY1NldEdyb3VwaW5nKG5hbWUpO30KY2xhc3MgRGF0ZVJhbmdlR3JvdXBpbmcgZXh0ZW5kcyBIaXN0b2dyYW1Hcm91cGluZ3tjb25zdHJ1Y3RvcihuYW1lKXtzdXBlcihuYW1lLHVuZGVmaW5lZCk7dGhpcy5jYWxsYmFja189dGhpcy5jb21wdXRlXy5iaW5kKHRoaXMpO30KY29tcHV0ZV8oaGlzdCl7Y29uc3QgZGlhZz1oaXN0LmRpYWdub3N0aWNzLmdldCh0aGlzLmtleSk7aWYoZGlhZz09PXVuZGVmaW5lZClyZXR1cm4nJztyZXR1cm4gZGlhZy50b1N0cmluZygpO319CkRhdGVSYW5nZUdyb3VwaW5nLk5BTUVTPVt0ci52LmQuUkVTRVJWRURfTkFNRVMuQkVOQ0hNQVJLX1NUQVJULHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5UUkFDRV9TVEFSVCxdO2Zvcihjb25zdCBuYW1lIG9mIERhdGVSYW5nZUdyb3VwaW5nLk5BTUVTKXtuZXcgRGF0ZVJhbmdlR3JvdXBpbmcobmFtZSk7fQpyZXR1cm57SGlzdG9ncmFtR3JvdXBpbmcsR2VuZXJpY1NldEdyb3VwaW5nLERhdGVSYW5nZUdyb3VwaW5nLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52JyxmdW5jdGlvbigpe2NsYXNzIEhpc3RvZ3JhbVNldHtjb25zdHJ1Y3RvcihvcHRfaGlzdG9ncmFtcyl7dGhpcy5oaXN0b2dyYW1zXz1uZXcgU2V0KCk7dGhpcy5zaGFyZWREaWFnbm9zdGljc0J5R3VpZF89bmV3IE1hcCgpO2lmKG9wdF9oaXN0b2dyYW1zIT09dW5kZWZpbmVkKXtmb3IoY29uc3QgaGlzdCBvZiBvcHRfaGlzdG9ncmFtcyl7dGhpcy5hZGRIaXN0b2dyYW0oaGlzdCk7fX19CmhhcyhoaXN0KXtyZXR1cm4gdGhpcy5oaXN0b2dyYW1zXy5oYXMoaGlzdCk7fQpjcmVhdGVIaXN0b2dyYW0obmFtZSx1bml0LHNhbXBsZXMsb3B0X29wdGlvbnMpe2NvbnN0IGhpc3Q9dHIudi5IaXN0b2dyYW0uY3JlYXRlKG5hbWUsdW5pdCxzYW1wbGVzLG9wdF9vcHRpb25zKTt0aGlzLmFkZEhpc3RvZ3JhbShoaXN0KTtyZXR1cm4gaGlzdDt9CmFkZEhpc3RvZ3JhbShoaXN0LG9wdF9kaWFnbm9zdGljcyl7aWYodGhpcy5oYXMoaGlzdCkpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IGFkZCBzYW1lIEhpc3RvZ3JhbSB0d2ljZScpO30KaWYob3B0X2RpYWdub3N0aWNzIT09dW5kZWZpbmVkKXtpZighKG9wdF9kaWFnbm9zdGljcyBpbnN0YW5jZW9mIE1hcCkpe29wdF9kaWFnbm9zdGljcz1PYmplY3QuZW50cmllcyhvcHRfZGlhZ25vc3RpY3MpO30KZm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiBvcHRfZGlhZ25vc3RpY3Mpe2hpc3QuZGlhZ25vc3RpY3Muc2V0KG5hbWUsZGlhZ25vc3RpYyk7fX0KdGhpcy5oaXN0b2dyYW1zXy5hZGQoaGlzdCk7fQphZGRTaGFyZWREaWFnbm9zdGljVG9BbGxIaXN0b2dyYW1zKG5hbWUsZGlhZ25vc3RpYyl7dGhpcy5hZGRTaGFyZWREaWFnbm9zdGljKGRpYWdub3N0aWMpO2Zvcihjb25zdCBoaXN0IG9mIHRoaXMpe2hpc3QuZGlhZ25vc3RpY3Muc2V0KG5hbWUsZGlhZ25vc3RpYyk7fX0KYWRkU2hhcmVkRGlhZ25vc3RpYyhkaWFnbm9zdGljKXt0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy5zZXQoZGlhZ25vc3RpYy5ndWlkLGRpYWdub3N0aWMpO30KZ2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLmhpc3RvZ3JhbXNfLnNpemU7fSpbU3ltYm9sLml0ZXJhdG9yXSgpe2Zvcihjb25zdCBoaXN0IG9mIHRoaXMuaGlzdG9ncmFtc18pe3lpZWxkIGhpc3Q7fX0KZ2V0SGlzdG9ncmFtc05hbWVkKG5hbWUpe3JldHVyblsuLi50aGlzXS5maWx0ZXIoaD0+aC5uYW1lPT09bmFtZSk7fQpnZXRIaXN0b2dyYW1OYW1lZChuYW1lKXtjb25zdCBoaXN0b2dyYW1zPXRoaXMuZ2V0SGlzdG9ncmFtc05hbWVkKG5hbWUpO2lmKGhpc3RvZ3JhbXMubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO2lmKGhpc3RvZ3JhbXMubGVuZ3RoPjEpe3Rocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZGx5IGZvdW5kIG11bHRpcGxlIGhpc3RvZ3JhbXMgbmFtZWQgIiR7bmFtZX0iYCk7fQpyZXR1cm4gaGlzdG9ncmFtc1swXTt9Cmxvb2t1cERpYWdub3N0aWMoZ3VpZCl7cmV0dXJuIHRoaXMuc2hhcmVkRGlhZ25vc3RpY3NCeUd1aWRfLmdldChndWlkKTt9CmRlc2VyaWFsaXplKGRhdGEpe2Zvcihjb25zdCBoaXN0IG9mIHRyLnYuSGlzdG9ncmFtRGVzZXJpYWxpemVyLmRlc2VyaWFsaXplKGRhdGEpKXt0aGlzLmFkZEhpc3RvZ3JhbShoaXN0KTt9fQppbXBvcnREaWN0cyhkaWN0cyl7aWYoKGRpY3RzIGluc3RhbmNlb2YgQXJyYXkpJiYoZGljdHMubGVuZ3RoPjIpJiYoZGljdHNbMF1pbnN0YW5jZW9mIEFycmF5KSl7dGhpcy5kZXNlcmlhbGl6ZShkaWN0cyk7cmV0dXJuO30KZm9yKGNvbnN0IGRpY3Qgb2YgZGljdHMpe3RoaXMuaW1wb3J0TGVnYWN5RGljdChkaWN0KTt9fQppbXBvcnRMZWdhY3lEaWN0KGRpY3Qpe2lmKGRpY3QudHlwZSE9PXVuZGVmaW5lZCl7aWYoZGljdC50eXBlPT09J1RhZ01hcCcpcmV0dXJuO2lmKCF0ci52LmQuRGlhZ25vc3RpYy5maW5kVHlwZUluZm9XaXRoTmFtZShkaWN0LnR5cGUpKXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBzaGFyZWQgZGlhZ25vc3RpYyB0eXBlICcrZGljdC50eXBlKTt9CnRoaXMuc2hhcmVkRGlhZ25vc3RpY3NCeUd1aWRfLnNldChkaWN0Lmd1aWQsdHIudi5kLkRpYWdub3N0aWMuZnJvbURpY3QoZGljdCkpO31lbHNle2NvbnN0IGhpc3Q9dHIudi5IaXN0b2dyYW0uZnJvbURpY3QoZGljdCk7dGhpcy5hZGRIaXN0b2dyYW0oaGlzdCk7aGlzdC5kaWFnbm9zdGljcy5yZXNvbHZlU2hhcmVkRGlhZ25vc3RpY3ModGhpcyx0cnVlKTt9fQphc0RpY3RzKCl7Y29uc3QgZGljdHM9W107Zm9yKGNvbnN0IGRpYWdub3N0aWMgb2YgdGhpcy5zaGFyZWREaWFnbm9zdGljc0J5R3VpZF8udmFsdWVzKCkpe2RpY3RzLnB1c2goZGlhZ25vc3RpYy5hc0RpY3QoKSk7fQpmb3IoY29uc3QgaGlzdCBvZiB0aGlzKXtkaWN0cy5wdXNoKGhpc3QuYXNEaWN0KCkpO30KcmV0dXJuIGRpY3RzO30KZ2V0IHNvdXJjZUhpc3RvZ3JhbXMoKXtjb25zdCBkaWFnbm9zdGljTmFtZXM9bmV3IFNldCgpO2Zvcihjb25zdCBoaXN0IG9mIHRoaXMpe2Zvcihjb25zdCBkaWFnbm9zdGljIG9mIGhpc3QuZGlhZ25vc3RpY3MudmFsdWVzKCkpe2lmKCEoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5SZWxhdGVkTmFtZU1hcCkpY29udGludWU7Zm9yKGNvbnN0IG5hbWUgb2YgZGlhZ25vc3RpYy52YWx1ZXMoKSl7ZGlhZ25vc3RpY05hbWVzLmFkZChuYW1lKTt9fX0KY29uc3Qgc291cmNlSGlzdG9ncmFtcz1uZXcgSGlzdG9ncmFtU2V0O2Zvcihjb25zdCBoaXN0IG9mIHRoaXMpe2lmKCFkaWFnbm9zdGljTmFtZXMuaGFzKGhpc3QubmFtZSkpe3NvdXJjZUhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGhpc3QpO319CnJldHVybiBzb3VyY2VIaXN0b2dyYW1zO30KZ3JvdXBIaXN0b2dyYW1zUmVjdXJzaXZlbHkoZ3JvdXBpbmdzLG9wdF9za2lwR3JvdXBpbmdDYWxsYmFjayl7ZnVuY3Rpb24gcmVjdXJzZShoaXN0b2dyYW1zLGxldmVsKXtpZihsZXZlbD09PWdyb3VwaW5ncy5sZW5ndGgpe3JldHVybiBoaXN0b2dyYW1zO30KY29uc3QgZ3JvdXBpbmc9Z3JvdXBpbmdzW2xldmVsXTtjb25zdCBncm91cGVkSGlzdG9ncmFtcz10ci5iLmdyb3VwSW50b01hcChoaXN0b2dyYW1zLGdyb3VwaW5nLmNhbGxiYWNrKTtpZihvcHRfc2tpcEdyb3VwaW5nQ2FsbGJhY2smJm9wdF9za2lwR3JvdXBpbmdDYWxsYmFjayhncm91cGluZyxncm91cGVkSGlzdG9ncmFtcykpe3JldHVybiByZWN1cnNlKGhpc3RvZ3JhbXMsbGV2ZWwrMSk7fQpmb3IoY29uc3Rba2V5LGdyb3VwXW9mIGdyb3VwZWRIaXN0b2dyYW1zKXtncm91cGVkSGlzdG9ncmFtcy5zZXQoa2V5LHJlY3Vyc2UoZ3JvdXAsbGV2ZWwrMSkpO30KcmV0dXJuIGdyb3VwZWRIaXN0b2dyYW1zO30KcmV0dXJuIHJlY3Vyc2UoWy4uLnRoaXNdLDApO30KZGVkdXBsaWNhdGVEaWFnbm9zdGljcygpe2NvbnN0IG5hbWVzVG9DYW5kaWRhdGVzPW5ldyBNYXAoKTtjb25zdCBkaWFnbm9zdGljc1RvSGlzdG9ncmFtcz1uZXcgTWFwKCk7Y29uc3Qga2V5c1RvRGlhZ25vc3RpY3M9bmV3IE1hcCgpO2Zvcihjb25zdCBoaXN0IG9mIHRoaXMpe2Zvcihjb25zdFtuYW1lLGNhbmRpZGF0ZV1vZiBoaXN0LmRpYWdub3N0aWNzKXtpZihjYW5kaWRhdGUuZXF1YWxzPT09dW5kZWZpbmVkKXt0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy5zZXQoY2FuZGlkYXRlLmd1aWQsY2FuZGlkYXRlKTtjb250aW51ZTt9CmNvbnN0IGhhc2hLZXk9Y2FuZGlkYXRlLmhhc2hLZXk7aWYoY2FuZGlkYXRlLmhhc2hLZXkhPT11bmRlZmluZWQpe2lmKGtleXNUb0RpYWdub3N0aWNzLmhhcyhoYXNoS2V5KSl7aGlzdC5kaWFnbm9zdGljcy5zZXQobmFtZSxrZXlzVG9EaWFnbm9zdGljcy5nZXQoaGFzaEtleSkpO31lbHNle2tleXNUb0RpYWdub3N0aWNzLnNldChoYXNoS2V5LGNhbmRpZGF0ZSk7dGhpcy5zaGFyZWREaWFnbm9zdGljc0J5R3VpZF8uc2V0KGNhbmRpZGF0ZS5ndWlkLGNhbmRpZGF0ZSk7fQpjb250aW51ZTt9CmlmKGRpYWdub3N0aWNzVG9IaXN0b2dyYW1zLmdldChjYW5kaWRhdGUpPT09dW5kZWZpbmVkKXtkaWFnbm9zdGljc1RvSGlzdG9ncmFtcy5zZXQoY2FuZGlkYXRlLFtoaXN0XSk7fWVsc2V7ZGlhZ25vc3RpY3NUb0hpc3RvZ3JhbXMuZ2V0KGNhbmRpZGF0ZSkucHVzaChoaXN0KTt9CmlmKCFuYW1lc1RvQ2FuZGlkYXRlcy5oYXMobmFtZSkpe25hbWVzVG9DYW5kaWRhdGVzLnNldChuYW1lLG5ldyBTZXQoKSk7fQpuYW1lc1RvQ2FuZGlkYXRlcy5nZXQobmFtZSkuYWRkKGNhbmRpZGF0ZSk7fX0KZm9yKGNvbnN0W25hbWUsY2FuZGlkYXRlc11vZiBuYW1lc1RvQ2FuZGlkYXRlcyl7Y29uc3QgZGVkdXBsaWNhdGVkRGlhZ25vc3RpY3M9bmV3IFNldCgpO2Zvcihjb25zdCBjYW5kaWRhdGUgb2YgY2FuZGlkYXRlcyl7bGV0IGZvdW5kPWZhbHNlO2Zvcihjb25zdCB0ZXN0IG9mIGRlZHVwbGljYXRlZERpYWdub3N0aWNzKXtpZihjYW5kaWRhdGUuZXF1YWxzKHRlc3QpKXtjb25zdCBoaXN0cz1kaWFnbm9zdGljc1RvSGlzdG9ncmFtcy5nZXQoY2FuZGlkYXRlKTtmb3IoY29uc3QgaGlzdCBvZiBoaXN0cyl7aGlzdC5kaWFnbm9zdGljcy5zZXQobmFtZSx0ZXN0KTt9CmZvdW5kPXRydWU7YnJlYWs7fX0KaWYoIWZvdW5kKXtkZWR1cGxpY2F0ZWREaWFnbm9zdGljcy5hZGQoY2FuZGlkYXRlKTt9CmZvcihjb25zdCBkaWFnbm9zdGljIG9mIGRlZHVwbGljYXRlZERpYWdub3N0aWNzKXt0aGlzLnNoYXJlZERpYWdub3N0aWNzQnlHdWlkXy5zZXQoZGlhZ25vc3RpYy5ndWlkLGRpYWdub3N0aWMpO319fX0KYnVpbGRHcm91cGluZ3NGcm9tVGFncyhuYW1lcyl7Y29uc3QgdGFncz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcyl7Zm9yKGNvbnN0IG5hbWUgb2YgbmFtZXMpe2lmKCFoaXN0LmRpYWdub3N0aWNzLmhhcyhuYW1lKSljb250aW51ZTtpZighdGFncy5oYXMobmFtZSkpdGFncy5zZXQobmFtZSxuZXcgU2V0KCkpO2Zvcihjb25zdCB0YWcgb2YgaGlzdC5kaWFnbm9zdGljcy5nZXQobmFtZSkpe3RhZ3MuZ2V0KG5hbWUpLmFkZCh0YWcpO319fQpjb25zdCBncm91cGluZ3M9W107Zm9yKGNvbnN0W25hbWUsdmFsdWVzXW9mIHRhZ3Mpe2NvbnN0IGJ1aWx0PXRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuYnVpbGRGcm9tVGFncyh2YWx1ZXMsbmFtZSk7Zm9yKGNvbnN0IGdyb3VwaW5nIG9mIGJ1aWx0KXtncm91cGluZ3MucHVzaChncm91cGluZyk7fX0KcmV0dXJuIGdyb3VwaW5nczt9fQpyZXR1cm57SGlzdG9ncmFtU2V0fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2hyb21lJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGhhc1RpdGxlQW5kQ2F0ZWdvcnkoZXZlbnQsdGl0bGUsY2F0ZWdvcnkpe3JldHVybiBldmVudC50aXRsZT09PXRpdGxlJiZldmVudC5jYXRlZ29yeSYmdHIuYi5nZXRDYXRlZ29yeVBhcnRzKGV2ZW50LmNhdGVnb3J5KS5pbmNsdWRlcyhjYXRlZ29yeSk7fQpmdW5jdGlvbiBnZXROYXZTdGFydFRpbWVzdGFtcHMocmVuZGVyZXJIZWxwZXIpe2NvbnN0IG5hdlN0YXJ0VGltZXN0YW1wcz1bXTtmb3IoY29uc3QgZSBvZiByZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLnNsaWNlR3JvdXAuY2hpbGRFdmVudHMoKSl7aWYoaGFzVGl0bGVBbmRDYXRlZ29yeShlLCduYXZpZ2F0aW9uU3RhcnQnLCdibGluay51c2VyX3RpbWluZycpKXtuYXZTdGFydFRpbWVzdGFtcHMucHVzaChlLnN0YXJ0KTt9fQpyZXR1cm4gbmF2U3RhcnRUaW1lc3RhbXBzO30KZnVuY3Rpb24gZ2V0SW50ZXJhY3RpdmVUaW1lc3RhbXBzKG1vZGVsKXtjb25zdCBpbnRlcmFjdGl2ZVRpbWVzdGFtcHNNYXA9bmV3IE1hcCgpO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgT2JqZWN0LnZhbHVlcyhjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzKSl7Y29uc3QgdGltZXN0YW1wcz1bXTtpbnRlcmFjdGl2ZVRpbWVzdGFtcHNNYXAuc2V0KHJlbmRlcmVySGVscGVyLnBpZCx0aW1lc3RhbXBzKTt9CmZvcihjb25zdCBleHBlY3RhdGlvbiBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZighKGV4cGVjdGF0aW9uIGluc3RhbmNlb2YgdHIubW9kZWwudW0uTG9hZEV4cGVjdGF0aW9uKSljb250aW51ZTtpZih0ci5lLmNocm9tZS5DSFJPTUVfSU5URVJOQUxfVVJMUy5pbmNsdWRlcyhleHBlY3RhdGlvbi51cmwpKXtjb250aW51ZTt9CmlmKGV4cGVjdGF0aW9uLnRpbWVUb0ludGVyYWN0aXZlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2lmKGludGVyYWN0aXZlVGltZXN0YW1wc01hcC5nZXQoZXhwZWN0YXRpb24ucmVuZGVyUHJvY2Vzcy5waWQpPT09dW5kZWZpbmVkKXtpbnRlcmFjdGl2ZVRpbWVzdGFtcHNNYXAuc2V0KGV4cGVjdGF0aW9uLnJlbmRlclByb2Nlc3MucGlkLFtdKTt9CmludGVyYWN0aXZlVGltZXN0YW1wc01hcC5nZXQoZXhwZWN0YXRpb24ucmVuZGVyUHJvY2Vzcy5waWQpLnB1c2goZXhwZWN0YXRpb24udGltZVRvSW50ZXJhY3RpdmUpO30KcmV0dXJuIGludGVyYWN0aXZlVGltZXN0YW1wc01hcDt9CmZ1bmN0aW9uIGdldFBvc3RJbnRlcmFjdGl2ZVRhc2tXaW5kb3dzKGludGVyYWN0aXZlVGltZXN0YW1wcyxuYXZTdGFydFRpbWVzdGFtcHMsdHJhY2VFbmRUaW1lc3RhbXApe2xldCBuYXZTdGFydFRzSW5kZXg9MDtsZXQgbGFzdFRhc2tXaW5kb3dFbmRUcz11bmRlZmluZWQ7Y29uc3QgdGFza1dpbmRvd3M9W107Zm9yKGNvbnN0IGN1cnJUVEkgb2YgaW50ZXJhY3RpdmVUaW1lc3RhbXBzKXt3aGlsZShuYXZTdGFydFRzSW5kZXg8bmF2U3RhcnRUaW1lc3RhbXBzLmxlbmd0aCYmbmF2U3RhcnRUaW1lc3RhbXBzW25hdlN0YXJ0VHNJbmRleF08Y3VyclRUSSl7bmF2U3RhcnRUc0luZGV4Kys7fQpjb25zdCB0YXNrV2luZG93RW5kVHM9bmF2U3RhcnRUc0luZGV4PG5hdlN0YXJ0VGltZXN0YW1wcy5sZW5ndGg/bmF2U3RhcnRUaW1lc3RhbXBzW25hdlN0YXJ0VHNJbmRleF06dHJhY2VFbmRUaW1lc3RhbXA7aWYodGFza1dpbmRvd0VuZFRzPT09bGFzdFRhc2tXaW5kb3dFbmRUcyl7dGhyb3cgRXJyb3IoJ0VuY291bnRlcmVkIHR3byBjb25zZWN1dGl2ZSBpbnRlcmFjdGl2ZSB0aW1lc3RhbXBzICcrJ3dpdGggbm8gbmF2aWdhdGlvblN0YXJ0IGJldHdlZW4gdGhlbS4gJysnUG9zdEludGVyYWN0aXZlVGFza1dpbmRvdyBpcyBub3Qgd2VsbCBkZWZpbmVkIGluIHRoaXMgY2FzZS4nKTt9CnRhc2tXaW5kb3dzLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGN1cnJUVEksdGFza1dpbmRvd0VuZFRzKSk7bGFzdFRhc2tXaW5kb3dFbmRUcz10YXNrV2luZG93RW5kVHM7fQpyZXR1cm4gdGFza1dpbmRvd3M7fQpmdW5jdGlvbiBjb250cmlidXRpb25Ub0VRVCh3aW5kb3csdGFzayl7Y29uc3Qgc3RhcnRJbldpbmRvdz1NYXRoLm1heCh3aW5kb3cubWluLHRhc2suc3RhcnQpO2NvbnN0IGVuZEluV2luZG93PU1hdGgubWluKHdpbmRvdy5tYXgsdGFzay5lbmQpO2NvbnN0IGR1cmF0aW9uSW5XaW5kb3c9ZW5kSW5XaW5kb3ctc3RhcnRJbldpbmRvdztpZihkdXJhdGlvbkluV2luZG93PD0wKXJldHVybiAwO2NvbnN0IHByb2JhYmlsaXR5T2ZUYXNrPWR1cmF0aW9uSW5XaW5kb3cvKHdpbmRvdy5tYXgtd2luZG93Lm1pbik7Y29uc3QgbWluUXVldWVpbmdUaW1lPXRhc2suZW5kLWVuZEluV2luZG93O2NvbnN0IG1heFF1ZXVlaW5nVGltZT10YXNrLmVuZC1zdGFydEluV2luZG93O2NvbnN0IGV4cGVjdGVkUXVldWVpbmdUaW1lRHVlVG9UYXNrPShtYXhRdWV1ZWluZ1RpbWUrbWluUXVldWVpbmdUaW1lKS8yO3JldHVybiBwcm9iYWJpbGl0eU9mVGFzaypleHBlY3RlZFF1ZXVlaW5nVGltZUR1ZVRvVGFzazt9CmZ1bmN0aW9uIHdlaWdodGVkRXhwZWN0ZWRRdWV1ZWluZ1RpbWUod2luZG93LHdlaWdodGVkVGFza3Mpe2xldCByZXN1bHQ9MDtmb3IoY29uc3QgdGFzayBvZiB3ZWlnaHRlZFRhc2tzKXtyZXN1bHQrPWNvbnRyaWJ1dGlvblRvRVFUKHdpbmRvdyx0YXNrKSp0YXNrLndlaWdodDt9CnJldHVybiByZXN1bHQ7fQpmdW5jdGlvbiBleHBlY3RlZFF1ZXVlaW5nVGltZSh3aW5kb3csdGFza3Mpe3JldHVybiB3ZWlnaHRlZEV4cGVjdGVkUXVldWVpbmdUaW1lKHdpbmRvdyx0YXNrcy5tYXAoZnVuY3Rpb24odGFzayl7cmV0dXJue3N0YXJ0OnRhc2suc3RhcnQsZW5kOnRhc2suZW5kLHdlaWdodDoxfTt9KSk7fQpjbGFzcyBTbGlkaW5nV2luZG93e2NvbnN0cnVjdG9yKHN0YXJ0VGltZSx3aW5kb3dTaXplLHNvcnRlZFRhc2tzKXt0aGlzLndpbmRvd1NpemVfPXdpbmRvd1NpemU7dGhpcy5zb3J0ZWRUYXNrc189c29ydGVkVGFza3M7dGhpcy5yYW5nZV89dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0VGltZSxzdGFydFRpbWUrd2luZG93U2l6ZSk7dGhpcy5maXJzdFRhc2tJbmRleF89c29ydGVkVGFza3MuZmluZEluZGV4KHRhc2s9PnN0YXJ0VGltZTx0YXNrLmVuZCk7aWYodGhpcy5maXJzdFRhc2tJbmRleF89PT0tMSl7dGhpcy5maXJzdFRhc2tJbmRleF89c29ydGVkVGFza3MubGVuZ3RoO30KdGhpcy5sYXN0VGFza0luZGV4Xz0tMTt3aGlsZSh0aGlzLmxhc3RUYXNrSW5kZXhfKzE8c29ydGVkVGFza3MubGVuZ3RoJiZzb3J0ZWRUYXNrc1t0aGlzLmxhc3RUYXNrSW5kZXhfKzFdLnN0YXJ0PHN0YXJ0VGltZSt3aW5kb3dTaXplKXt0aGlzLmxhc3RUYXNrSW5kZXhfKys7fQp0aGlzLmlubmVyRVFUXz0wO2ZvcihsZXQgaT10aGlzLmZpcnN0VGFza0luZGV4XysxO2k8dGhpcy5sYXN0VGFza0luZGV4XztpKyspe3RoaXMuaW5uZXJFUVRfKz1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyxzb3J0ZWRUYXNrc1tpXSk7fX0KZ2V0IGdldEVRVCgpe2xldCBmaXJzdFRhc2tFUVQ9MDtpZih0aGlzLmZpcnN0VGFza0luZGV4Xzx0aGlzLnNvcnRlZFRhc2tzXy5sZW5ndGgpe2ZpcnN0VGFza0VRVD1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyx0aGlzLnNvcnRlZFRhc2tzX1t0aGlzLmZpcnN0VGFza0luZGV4X10pO30KbGV0IGxhc3RUYXNrRVFUPTA7aWYodGhpcy5maXJzdFRhc2tJbmRleF88dGhpcy5sYXN0VGFza0luZGV4Xyl7bGFzdFRhc2tFUVQ9Y29udHJpYnV0aW9uVG9FUVQodGhpcy5yYW5nZV8sdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5sYXN0VGFza0luZGV4X10pO30KcmV0dXJuIGZpcnN0VGFza0VRVCt0aGlzLmlubmVyRVFUXytsYXN0VGFza0VRVDt9CnNsaWRlKHQpe3RoaXMucmFuZ2VfPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSh0LHQrdGhpcy53aW5kb3dTaXplXyk7aWYodGhpcy5maXJzdFRhc2tJbmRleF88dGhpcy5zb3J0ZWRUYXNrc18ubGVuZ3RoJiZ0aGlzLnNvcnRlZFRhc2tzX1t0aGlzLmZpcnN0VGFza0luZGV4X10uZW5kPD10KXt0aGlzLmZpcnN0VGFza0luZGV4XysrO2lmKHRoaXMuZmlyc3RUYXNrSW5kZXhfPHRoaXMubGFzdFRhc2tJbmRleF8pe3RoaXMuaW5uZXJFUVRfLT1jb250cmlidXRpb25Ub0VRVCh0aGlzLnJhbmdlXyx0aGlzLnNvcnRlZFRhc2tzX1t0aGlzLmZpcnN0VGFza0luZGV4X10pO319CmlmKHRoaXMubGFzdFRhc2tJbmRleF8rMTx0aGlzLnNvcnRlZFRhc2tzXy5sZW5ndGgmJnRoaXMuc29ydGVkVGFza3NfW3RoaXMubGFzdFRhc2tJbmRleF8rMV0uc3RhcnQ8dCt0aGlzLndpbmRvd1NpemVfKXtpZih0aGlzLmZpcnN0VGFza0luZGV4Xzx0aGlzLmxhc3RUYXNrSW5kZXhfKXt0aGlzLmlubmVyRVFUXys9Y29udHJpYnV0aW9uVG9FUVQodGhpcy5yYW5nZV8sdGhpcy5zb3J0ZWRUYXNrc19bdGhpcy5sYXN0VGFza0luZGV4X10pO30KdGhpcy5sYXN0VGFza0luZGV4XysrO319fQpmdW5jdGlvbiBtYXhFeHBlY3RlZFF1ZXVlaW5nVGltZUluU2xpZGluZ1dpbmRvdyhzdGFydFRpbWUsZW5kVGltZSx3aW5kb3dTaXplLHRhc2tzKXtpZih3aW5kb3dTaXplPD0wKXt0aHJvdyBFcnJvcignVGhlIHdpbmRvdyBzaXplIG11c3QgYmUgcG9zaXRpdmUgbnVtYmVyJyk7fQppZihzdGFydFRpbWUrd2luZG93U2l6ZT5lbmRUaW1lKXt0aHJvdyBFcnJvcignVGhlIHNsaWRpbmcgd2luZG93IG11c3QgZml0IGluIHRoZSBzcGVjaWZpZWQgdGltZSByYW5nZScpO30KY29uc3Qgc29ydGVkVGFza3M9dGFza3Muc2xpY2UoKS5zb3J0KChhLGIpPT5hLnN0YXJ0LWIuc3RhcnQpO2ZvcihsZXQgaT0xO2k8c29ydGVkVGFza3MubGVuZ3RoO2krKyl7aWYoc29ydGVkVGFza3NbaS0xXS5lbmQ+c29ydGVkVGFza3NbaV0uc3RhcnQpe2NvbnN0IG1pZHBvaW50PShzb3J0ZWRUYXNrc1tpLTFdLmVuZCtzb3J0ZWRUYXNrc1tpXS5zdGFydCkvMjtzb3J0ZWRUYXNrc1tpLTFdLmVuZD1taWRwb2ludDtzb3J0ZWRUYXNrc1tpXS5zdGFydD1taWRwb2ludDt9fQpsZXQgZW5kcG9pbnRzPVtdO2VuZHBvaW50cy5wdXNoKHN0YXJ0VGltZSk7ZW5kcG9pbnRzLnB1c2goZW5kVGltZS13aW5kb3dTaXplKTtmb3IoY29uc3QgdGFzayBvZiB0YXNrcyl7ZW5kcG9pbnRzLnB1c2godGFzay5zdGFydC13aW5kb3dTaXplKTtlbmRwb2ludHMucHVzaCh0YXNrLnN0YXJ0KTtlbmRwb2ludHMucHVzaCh0YXNrLmVuZC13aW5kb3dTaXplKTtlbmRwb2ludHMucHVzaCh0YXNrLmVuZCk7fQplbmRwb2ludHM9ZW5kcG9pbnRzLmZpbHRlcih4PT4oc3RhcnRUaW1lPD14JiZ4K3dpbmRvd1NpemU8PWVuZFRpbWUpKTtlbmRwb2ludHMuc29ydCgoYSxiKT0+YS1iKTtjb25zdCBzbGlkaW5nV2luZG93PW5ldyBTbGlkaW5nV2luZG93KGVuZHBvaW50c1swXSx3aW5kb3dTaXplLHNvcnRlZFRhc2tzKTtsZXQgbWF4RVFUPTA7Zm9yKGNvbnN0IHQgb2YgZW5kcG9pbnRzKXtzbGlkaW5nV2luZG93LnNsaWRlKHQpO21heEVRVD1NYXRoLm1heChtYXhFUVQsc2xpZGluZ1dpbmRvdy5nZXRFUVQpO30KcmV0dXJuIG1heEVRVDt9CnJldHVybntnZXRQb3N0SW50ZXJhY3RpdmVUYXNrV2luZG93cyxnZXROYXZTdGFydFRpbWVzdGFtcHMsZ2V0SW50ZXJhY3RpdmVUaW1lc3RhbXBzLGV4cGVjdGVkUXVldWVpbmdUaW1lLG1heEV4cGVjdGVkUXVldWVpbmdUaW1lSW5TbGlkaW5nV2luZG93LHdlaWdodGVkRXhwZWN0ZWRRdWV1ZWluZ1RpbWV9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBXSU5ET1dfU0laRV9NUz01MDA7Y29uc3QgRVFUX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDAuMDEsV0lORE9XX1NJWkVfTVMsNTApO2Z1bmN0aW9uIGNvbnRhaW5zRm9yY2VkR0NfKHNsaWNlKXtyZXR1cm4gc2xpY2UuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKHRyLm1ldHJpY3MudjgudXRpbHMuaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KS5sZW5ndGg+MDt9CmZ1bmN0aW9uIGdldE9yQ3JlYXRlSGlzdG9ncmFtXyhoaXN0b2dyYW1zLG5hbWUsZGVzY3JpcHRpb24pe3JldHVybiBoaXN0b2dyYW1zLmdldEhpc3RvZ3JhbU5hbWVkKG5hbWUpfHxoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShuYW1lLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6RVFUX0JPVU5EQVJJRVMsZGVzY3JpcHRpb24sc3VtbWFyeU9wdGlvbnM6e2F2ZzpmYWxzZSxjb3VudDpmYWxzZSxtYXg6dHJ1ZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTpmYWxzZSx9LH0pO30KZnVuY3Rpb24gZXhwZWN0ZWRRdWV1ZWluZ1RpbWVNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2NvbnN0IHJlbmRlcmVySGVscGVycz1PYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpO2FkZEV4cGVjdGVkUXVldWVpbmdUaW1lTWV0cmljXygncmVuZGVyZXJfZXF0JyxldmVudD0+e3JldHVybntzdGFydDpldmVudC5zdGFydCxkdXJhdGlvbjpldmVudC5kdXJhdGlvbn07fSxmYWxzZSxyZW5kZXJlckhlbHBlcnMsaGlzdG9ncmFtcyxtb2RlbCk7fQpmdW5jdGlvbiBhZGRFeHBlY3RlZFF1ZXVlaW5nVGltZU1ldHJpY18oZXF0TmFtZSxnZXRFdmVudFRpbWVzLGlzQ3B1VGltZSxyZW5kZXJlckhlbHBlcnMsaGlzdG9ncmFtcyxtb2RlbCl7ZnVuY3Rpb24gZ2V0VGFza3MocmVuZGVyZXJIZWxwZXIpe2NvbnN0IHRhc2tzPVtdO2Zvcihjb25zdCBzbGljZSBvZgp0ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzLmZpbmRUb3BsZXZlbFNjaGVkdWxlclRhc2tzKHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQpKXtjb25zdCB0aW1lcz1nZXRFdmVudFRpbWVzKHNsaWNlKTtpZih0aW1lcy5kdXJhdGlvbj4wJiYhY29udGFpbnNGb3JjZWRHQ18oc2xpY2UpKXt0YXNrcy5wdXNoKHtzdGFydDp0aW1lcy5zdGFydCxlbmQ6dGltZXMuc3RhcnQrdGltZXMuZHVyYXRpb259KTt9fQpyZXR1cm4gdGFza3M7fQpjb25zdCB0b3RhbEhpc3RvZ3JhbT1nZXRPckNyZWF0ZUhpc3RvZ3JhbV8oaGlzdG9ncmFtcyxgdG90YWw6JHtXSU5ET1dfU0laRV9NU31tc193aW5kb3c6JHtlcXROYW1lfWAsYFRoZSBtYXhpbXVtIEVRVCBpbiBhICR7V0lORE9XX1NJWkVfTVN9bXMgc2xpZGluZyB3aW5kb3dgKycgZm9yIGEgZ2l2ZW4gcmVuZGVyZXInKTtmb3IoY29uc3QgcmVuZGVyZXJIZWxwZXIgb2YgcmVuZGVyZXJIZWxwZXJzKXtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSljb250aW51ZTtpZihyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmJvdW5kcy5kdXJhdGlvbjxXSU5ET1dfU0laRV9NUyljb250aW51ZTtjb25zdCB0YXNrcz1nZXRUYXNrcyhyZW5kZXJlckhlbHBlcik7Y29uc3QgdG90YWxCcmVha2Rvd249Z2V0VjhDb250cmlidXRpb25fKGVxdE5hbWUsZ2V0RXZlbnRUaW1lcyxpc0NwdVRpbWUsdG90YWxIaXN0b2dyYW0saGlzdG9ncmFtcyxyZW5kZXJlckhlbHBlcixtb2RlbCk7dG90YWxIaXN0b2dyYW0uYWRkU2FtcGxlKHRyLmUuY2hyb21lLm1heEV4cGVjdGVkUXVldWVpbmdUaW1lSW5TbGlkaW5nV2luZG93KHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuYm91bmRzLm1pbixyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLmJvdW5kcy5tYXgsV0lORE9XX1NJWkVfTVMsdGFza3MpLHt2ODp0b3RhbEJyZWFrZG93bn0pO319CmZ1bmN0aW9uIGdldFY4Q29udHJpYnV0aW9uXyhlcXROYW1lLGdldEV2ZW50VGltZXMsaXNDcHVUaW1lLHRvdGFsRXF0SGlzdG9ncmFtLGhpc3RvZ3JhbXMscmVuZGVyZXJIZWxwZXIsbW9kZWwpe2lmKCFtb2RlbC5jYXRlZ29yaWVzLmluY2x1ZGVzKCd2OCcpKXJldHVybiBudWxsO2NvbnN0IHRvdGFsQnJlYWtkb3duPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7Y29uc3QgZXZlbnROYW1lc1dpdGhUYXNrRXh0cmFjdG9ycz1nZXRWOEV2ZW50TmFtZXNXaXRoVGFza0V4dHJhY3RvcnNfKGdldEV2ZW50VGltZXMpO2lmKCFpc0NwdVRpbWUpe2NvbnN0IHRhc2tFeHRyYWN0b3JzVXNpbmdSQ1M9Z2V0VjhFdmVudE5hbWVzV2l0aFRhc2tFeHRyYWN0b3JzVXNpbmdSQ1NfKGdldEV2ZW50VGltZXMpO2Zvcihjb25zdFtldmVudE5hbWUsZ2V0VGFza3Ndb2YgdGFza0V4dHJhY3RvcnNVc2luZ1JDUyl7ZXZlbnROYW1lc1dpdGhUYXNrRXh0cmFjdG9ycy5zZXQoZXZlbnROYW1lLGdldFRhc2tzKTt9fQpsZXQgdG90YWxOYW1lcz10b3RhbEVxdEhpc3RvZ3JhbS5kaWFnbm9zdGljcy5nZXQoJ3Y4Jyk7aWYoIXRvdGFsTmFtZXMpe3RvdGFsTmFtZXM9bmV3IHRyLnYuZC5SZWxhdGVkTmFtZU1hcCgpO3RvdGFsRXF0SGlzdG9ncmFtLmRpYWdub3N0aWNzLnNldCgndjgnLHRvdGFsTmFtZXMpO30KZm9yKGNvbnN0W2V2ZW50TmFtZSxnZXRUYXNrc11vZiBldmVudE5hbWVzV2l0aFRhc2tFeHRyYWN0b3JzKXtjb25zdCB0b3RhbEhpc3RvZ3JhbT1nZXRPckNyZWF0ZUhpc3RvZ3JhbV8oaGlzdG9ncmFtcyxgdG90YWw6JHtXSU5ET1dfU0laRV9NU31tc193aW5kb3c6JHtlcXROYW1lfToke2V2ZW50TmFtZX1gLGBDb250cmlidXRpb24gdG8gdGhlIGV4cGVjdGVkIHF1ZXVlaW5nIHRpbWUgYnkgJHtldmVudE5hbWV9YCsnIGZvciBhIGdpdmVuIHJlbmRlcmVyLiBJdCBpcyBjb21wdXRlZCBhcyB0aGUgbWF4aW11bSBFUVQgaW4nK2AgYSAke1dJTkRPV19TSVpFX01TfW1zIHNsaWRpbmcgd2luZG93IGFmdGVyIHNocmlua2luZyB0b3AtbGV2ZWxgK2AgdGFza3MgdG8gY29udGFpbiBvbmx5ICR7ZXZlbnROYW1lfSBzdWJldmVudHNgKTtjb25zdCB0YXNrcz1nZXRUYXNrcyhyZW5kZXJlckhlbHBlcik7Y29uc3QgdG90YWxTYW1wbGU9dHIuZS5jaHJvbWUubWF4RXhwZWN0ZWRRdWV1ZWluZ1RpbWVJblNsaWRpbmdXaW5kb3cocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZC5ib3VuZHMubWluLHJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuYm91bmRzLm1heCxXSU5ET1dfU0laRV9NUyx0YXNrcyk7dG90YWxIaXN0b2dyYW0uYWRkU2FtcGxlKHRvdGFsU2FtcGxlKTt0b3RhbEJyZWFrZG93bi5zZXQoZXZlbnROYW1lLHRvdGFsU2FtcGxlKTt0b3RhbE5hbWVzLnNldChldmVudE5hbWUsdG90YWxIaXN0b2dyYW0ubmFtZSk7fQpyZXR1cm4gdG90YWxCcmVha2Rvd247fQpmdW5jdGlvbiBnZXRWOEV2ZW50TmFtZXNXaXRoVGFza0V4dHJhY3RvcnNfKGdldEV2ZW50VGltZXMsY3B1TWV0cmljcyl7ZnVuY3Rpb24gZHVyYXRpb25PZlRvcG1vc3RTdWJTbGljZXMoc2xpY2UscHJlZGljYXRlLGV4Y2x1ZGVQcmVkaWNhdGUpe2xldCBkdXJhdGlvbj0wO2Zvcihjb25zdCBzdWIgb2Ygc2xpY2UuZmluZFRvcG1vc3RTbGljZXNSZWxhdGl2ZVRvVGhpc1NsaWNlKHByZWRpY2F0ZSkpe2R1cmF0aW9uKz1nZXRFdmVudFRpbWVzKHN1YikuZHVyYXRpb247aWYoZXhjbHVkZVByZWRpY2F0ZSE9PW51bGwmJmV4Y2x1ZGVQcmVkaWNhdGUhPT11bmRlZmluZWQpe2R1cmF0aW9uLT1kdXJhdGlvbk9mVG9wbW9zdFN1YlNsaWNlcyhzdWIsZXhjbHVkZVByZWRpY2F0ZSk7fX0KcmV0dXJuIGR1cmF0aW9uO30KZnVuY3Rpb24gdGFza0V4dHJhY3RvcihwcmVkaWNhdGUsZXhjbHVkZVByZWRpY2F0ZSl7cmV0dXJuIGZ1bmN0aW9uKHJlbmRlcmVySGVscGVyKXtjb25zdCBzbGljZXM9dHIuZS5jaHJvbWUuRXZlbnRGaW5kZXJVdGlscy5maW5kVG9wbGV2ZWxTY2hlZHVsZXJUYXNrcyhyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkKTtjb25zdCByZXN1bHQ9W107Zm9yKGNvbnN0IHNsaWNlIG9mIHNsaWNlcyl7Y29uc3QgdGltZXM9Z2V0RXZlbnRUaW1lcyhzbGljZSk7aWYodGltZXMuZHVyYXRpb24+MCYmIWNvbnRhaW5zRm9yY2VkR0NfKHNsaWNlKSl7Y29uc3QgZHVyYXRpb249ZHVyYXRpb25PZlRvcG1vc3RTdWJTbGljZXMoc2xpY2UscHJlZGljYXRlLGV4Y2x1ZGVQcmVkaWNhdGUpO3Jlc3VsdC5wdXNoKHtzdGFydDp0aW1lcy5zdGFydCxlbmQ6dGltZXMuc3RhcnQrZHVyYXRpb259KTt9fQpyZXR1cm4gcmVzdWx0O307fQpyZXR1cm4gbmV3IE1hcChbWyd2OCcsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzVjhFdmVudCldLFsndjg6ZXhlY3V0ZScsdGFza0V4dHJhY3Rvcih0ci5tZXRyaWNzLnY4LnV0aWxzLmlzVjhFeGVjdXRlRXZlbnQpXSxbJ3Y4OmdjJyx0YXNrRXh0cmFjdG9yKHRyLm1ldHJpY3MudjgudXRpbHMuaXNHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KV1dKTt9CmZ1bmN0aW9uIGV4dHJhY3RUYXNrUkNTKGdldEV2ZW50VGltZXMscHJlZGljYXRlLHJlbmRlcmVySGVscGVyKXtjb25zdCByZXN1bHQ9W107Zm9yKGNvbnN0IHRvcFNsaWNlIG9mCnJlbmRlcmVySGVscGVyLm1haW5UaHJlYWQuc2xpY2VHcm91cC50b3BMZXZlbFNsaWNlcyl7Y29uc3QgdGltZXM9Z2V0RXZlbnRUaW1lcyh0b3BTbGljZSk7aWYodGltZXMuZHVyYXRpb248PTB8fGNvbnRhaW5zRm9yY2VkR0NfKHRvcFNsaWNlKSl7Y29udGludWU7fQpjb25zdCB2OFRocmVhZFNsaWNlcz1bXTtmb3IoY29uc3Qgc2xpY2Ugb2YgdG9wU2xpY2UuZGVzY2VuZGVudFNsaWNlcyl7aWYodHIubWV0cmljcy52OC51dGlscy5pc1Y4UkNTRXZlbnQoc2xpY2UpKXt2OFRocmVhZFNsaWNlcy5wdXNoKHNsaWNlKTt9fQpjb25zdCBydW50aW1lR3JvdXBDb2xsZWN0aW9uPW5ldyB0ci5lLnY4LlJ1bnRpbWVTdGF0c0dyb3VwQ29sbGVjdGlvbigpO3J1bnRpbWVHcm91cENvbGxlY3Rpb24uYWRkU2xpY2VzKHY4VGhyZWFkU2xpY2VzKTtsZXQgZHVyYXRpb249MDtmb3IoY29uc3QgcnVudGltZUdyb3VwIG9mIHJ1bnRpbWVHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwcyl7aWYocHJlZGljYXRlKHJ1bnRpbWVHcm91cC5uYW1lKSl7ZHVyYXRpb24rPXJ1bnRpbWVHcm91cC50aW1lO319CmR1cmF0aW9uPXRyLmIuY29udmVydFVuaXQoZHVyYXRpb24sdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk1JQ1JPLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUxMSSk7cmVzdWx0LnB1c2goe3N0YXJ0OnRpbWVzLnN0YXJ0LGVuZDp0aW1lcy5zdGFydCtkdXJhdGlvbn0pO30KcmV0dXJuIHJlc3VsdDt9CmZ1bmN0aW9uIGdldFY4RXZlbnROYW1lc1dpdGhUYXNrRXh0cmFjdG9yc1VzaW5nUkNTXyhnZXRFdmVudFRpbWVzKXtjb25zdCBleHRyYWN0b3JzPW5ldyBNYXAoKTtleHRyYWN0b3JzLnNldCgndjg6Y29tcGlsZV9yY3MnLHJlbmRlcmVySGVscGVyPT5leHRyYWN0VGFza1JDUyhnZXRFdmVudFRpbWVzLHRyLm1ldHJpY3MudjgudXRpbHMuaXNDb21waWxlUkNTQ2F0ZWdvcnkscmVuZGVyZXJIZWxwZXIpKTtleHRyYWN0b3JzLnNldCgndjg6Y29tcGlsZTpvcHRpbWl6ZV9yY3MnLHJlbmRlcmVySGVscGVyPT5leHRyYWN0VGFza1JDUyhnZXRFdmVudFRpbWVzLHRyLm1ldHJpY3MudjgudXRpbHMuaXNDb21waWxlT3B0aW1pemVSQ1NDYXRlZ29yeSxyZW5kZXJlckhlbHBlcikpO3JldHVybiBleHRyYWN0b3JzO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihleHBlY3RlZFF1ZXVlaW5nVGltZU1ldHJpYyk7cmV0dXJue2V4cGVjdGVkUXVldWVpbmdUaW1lTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIE11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZSh0aXRsZSx2YWx1ZUNvdW50KXt0aGlzLnRpdGxlPXRpdGxlO2NvbnN0IGRpbWVuc2lvbnM9dGl0bGUubGVuZ3RoO3RoaXMuY2hpbGRyZW49bmV3IEFycmF5KGRpbWVuc2lvbnMpO2ZvcihsZXQgaT0wO2k8ZGltZW5zaW9ucztpKyspe3RoaXMuY2hpbGRyZW5baV09bmV3IE1hcCgpO30KdGhpcy52YWx1ZXM9bmV3IEFycmF5KHZhbHVlQ291bnQpO2ZvcihsZXQgdj0wO3Y8dmFsdWVDb3VudDt2Kyspe3RoaXMudmFsdWVzW3ZdPXtzZWxmOjAsdG90YWw6MCx0b3RhbFN0YXRlOk5PVF9QUk9WSURFRH07fX0KTXVsdGlEaW1lbnNpb25hbFZpZXdOb2RlLlRvdGFsU3RhdGU9e05PVF9QUk9WSURFRDowLExPV0VSX0JPVU5EOjEsRVhBQ1Q6Mn07Y29uc3QgTk9UX1BST1ZJREVEPU11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZS5Ub3RhbFN0YXRlLk5PVF9QUk9WSURFRDtjb25zdCBMT1dFUl9CT1VORD1NdWx0aURpbWVuc2lvbmFsVmlld05vZGUuVG90YWxTdGF0ZS5MT1dFUl9CT1VORDtjb25zdCBFWEFDVD1NdWx0aURpbWVuc2lvbmFsVmlld05vZGUuVG90YWxTdGF0ZS5FWEFDVDtNdWx0aURpbWVuc2lvbmFsVmlld05vZGUucHJvdG90eXBlPXtnZXQgc3ViUm93cygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuY2hpbGRyZW5bMF0udmFsdWVzKCkpO319O2Z1bmN0aW9uIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcihkaW1lbnNpb25zLHZhbHVlQ291bnQpe2lmKHR5cGVvZihkaW1lbnNpb25zKSE9PSdudW1iZXInfHxkaW1lbnNpb25zPDApe3Rocm93IG5ldyBFcnJvcignRGltZW5zaW9ucyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpO30KdGhpcy5kaW1lbnNpb25zXz1kaW1lbnNpb25zO2lmKHR5cGVvZih2YWx1ZUNvdW50KSE9PSdudW1iZXInfHx2YWx1ZUNvdW50PDApe3Rocm93IG5ldyBFcnJvcignTnVtYmVyIG9mIHZhbHVlcyBtdXN0IGJlIGEgbm9uLW5lZ2F0aXZlIG51bWJlcicpO30KdGhpcy52YWx1ZUNvdW50Xz12YWx1ZUNvdW50O3RoaXMuYnVpbGRSb290Xz10aGlzLmNyZWF0ZVJvb3ROb2RlXygpO3RoaXMudG9wRG93blRyZWVWaWV3Um9vdF89dW5kZWZpbmVkO3RoaXMudG9wRG93bkhlYXZ5Vmlld1Jvb3RfPXVuZGVmaW5lZDt0aGlzLmJvdHRvbVVwSGVhdnlWaWV3Tm9kZV89dW5kZWZpbmVkO3RoaXMuY29tcGxldGVfPWZhbHNlO3RoaXMubWF4RGltZW5zaW9uRGVwdGhzXz1uZXcgQXJyYXkoZGltZW5zaW9ucyk7Zm9yKGxldCBkPTA7ZDxkaW1lbnNpb25zO2QrKyl7dGhpcy5tYXhEaW1lbnNpb25EZXB0aHNfW2RdPTA7fX0KTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZD17U0VMRjowLFRPVEFMOjF9O011bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZT17VE9QX0RPV05fVFJFRV9WSUVXOjAsVE9QX0RPV05fSEVBVllfVklFVzoxLEJPVFRPTV9VUF9IRUFWWV9WSUVXOjJ9O011bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5wcm90b3R5cGU9e2FkZFBhdGgocGF0aCx2YWx1ZXMsdmFsdWVLaW5kKXtpZih0aGlzLmJ1aWxkUm9vdF89PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignUGF0aHMgY2Fubm90IGJlIGFkZGVkIGFmdGVyIGVpdGhlciB2aWV3IGhhcyBiZWVuIGJ1aWx0Jyk7fQppZihwYXRoLmxlbmd0aCE9PXRoaXMuZGltZW5zaW9uc18pe3Rocm93IG5ldyBFcnJvcignUGF0aCBtdXN0IGJlICcrdGhpcy5kaW1lbnNpb25zXysnLWRpbWVuc2lvbmFsJyk7fQppZih2YWx1ZXMubGVuZ3RoIT09dGhpcy52YWx1ZUNvdW50Xyl7dGhyb3cgbmV3IEVycm9yKCdNdXN0IHByb3ZpZGUgJyt0aGlzLnZhbHVlQ291bnRfKycgdmFsdWVzJyk7fQpsZXQgaXNUb3RhbDtzd2l0Y2godmFsdWVLaW5kKXtjYXNlIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WYWx1ZUtpbmQuU0VMRjppc1RvdGFsPWZhbHNlO2JyZWFrO2Nhc2UgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5UT1RBTDppc1RvdGFsPXRydWU7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ0ludmFsaWQgdmFsdWUga2luZDogJyt2YWx1ZUtpbmQpO30KbGV0IG5vZGU9dGhpcy5idWlsZFJvb3RfO2ZvcihsZXQgZD0wO2Q8cGF0aC5sZW5ndGg7ZCsrKXtjb25zdCBzaW5nbGVEaW1lbnNpb25QYXRoPXBhdGhbZF07Y29uc3Qgc2luZ2xlRGltZW5zaW9uUGF0aExlbmd0aD1zaW5nbGVEaW1lbnNpb25QYXRoLmxlbmd0aDt0aGlzLm1heERpbWVuc2lvbkRlcHRoc19bZF09TWF0aC5tYXgodGhpcy5tYXhEaW1lbnNpb25EZXB0aHNfW2RdLHNpbmdsZURpbWVuc2lvblBhdGhMZW5ndGgpO2ZvcihsZXQgaT0wO2k8c2luZ2xlRGltZW5zaW9uUGF0aExlbmd0aDtpKyspe25vZGU9dGhpcy5nZXRPckNyZWF0ZUNoaWxkTm9kZV8obm9kZSxkLHNpbmdsZURpbWVuc2lvblBhdGhbaV0pO319CmZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe2NvbnN0IGFkZGVkVmFsdWU9dmFsdWVzW3ZdO2lmKGFkZGVkVmFsdWU9PT11bmRlZmluZWQpY29udGludWU7Y29uc3Qgbm9kZVZhbHVlPW5vZGUudmFsdWVzW3ZdO2lmKGlzVG90YWwpe25vZGVWYWx1ZS50b3RhbCs9YWRkZWRWYWx1ZTtub2RlVmFsdWUudG90YWxTdGF0ZT1FWEFDVDt9ZWxzZXtub2RlVmFsdWUuc2VsZis9YWRkZWRWYWx1ZTtub2RlVmFsdWUudG90YWxTdGF0ZT1NYXRoLm1heChub2RlVmFsdWUudG90YWxTdGF0ZSxMT1dFUl9CT1VORCk7fX19LGdldCBjb21wbGV0ZSgpe3JldHVybiB0aGlzLmNvbXBsZXRlXzt9LHNldCBjb21wbGV0ZShpc0NvbXBsZXRlKXtpZih0aGlzLmJ1aWxkUm9vdF89PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignQ2FuXCd0IHNldCBjb21wbGV0ZSBhZnRlciBhbnkgdmlldyBoYXMgYmVlbiBidWlsdC4nKTt9CnRoaXMuY29tcGxldGVfPWlzQ29tcGxldGU7fSxidWlsZFZpZXcodmlld1R5cGUpe3N3aXRjaCh2aWV3VHlwZSl7Y2FzZSBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fVFJFRV9WSUVXOnJldHVybiB0aGlzLmJ1aWxkVG9wRG93blRyZWVWaWV3KCk7Y2FzZSBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fSEVBVllfVklFVzpyZXR1cm4gdGhpcy5idWlsZFRvcERvd25IZWF2eVZpZXcoKTtjYXNlIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5CT1RUT01fVVBfSEVBVllfVklFVzpyZXR1cm4gdGhpcy5idWlsZEJvdHRvbVVwSGVhdnlWaWV3KCk7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vua25vd24gbXVsdGktZGltZW5zaW9uYWwgdmlldyB0eXBlOiAnK3ZpZXdUeXBlKTt9fSxidWlsZFRvcERvd25UcmVlVmlldygpe2lmKHRoaXMudG9wRG93blRyZWVWaWV3Um9vdF89PT11bmRlZmluZWQpe2NvbnN0IHRyZWVWaWV3Um9vdD10aGlzLmJ1aWxkUm9vdF87dGhpcy5idWlsZFJvb3RfPXVuZGVmaW5lZDt0aGlzLnNldFVwTWlzc2luZ0NoaWxkUmVsYXRpb25zaGlwc18odHJlZVZpZXdSb290LDApO3RoaXMuZmluYWxpemVUb3RhbFZhbHVlc18odHJlZVZpZXdSb290LDAsbmV3IFdlYWtNYXAoKSk7dGhpcy50b3BEb3duVHJlZVZpZXdSb290Xz10cmVlVmlld1Jvb3Q7fQpyZXR1cm4gdGhpcy50b3BEb3duVHJlZVZpZXdSb290Xzt9LGJ1aWxkVG9wRG93bkhlYXZ5Vmlldygpe2lmKHRoaXMudG9wRG93bkhlYXZ5Vmlld1Jvb3RfPT09dW5kZWZpbmVkKXt0aGlzLnRvcERvd25IZWF2eVZpZXdSb290Xz10aGlzLmJ1aWxkR2VuZXJpY0hlYXZ5Vmlld18odGhpcy5hZGREaW1lbnNpb25Ub1RvcERvd25IZWF2eVZpZXdOb2RlXy5iaW5kKHRoaXMpKTt9CnJldHVybiB0aGlzLnRvcERvd25IZWF2eVZpZXdSb290Xzt9LGJ1aWxkQm90dG9tVXBIZWF2eVZpZXcoKXtpZih0aGlzLmJvdHRvbVVwSGVhdnlWaWV3Tm9kZV89PT11bmRlZmluZWQpe3RoaXMuYm90dG9tVXBIZWF2eVZpZXdOb2RlXz10aGlzLmJ1aWxkR2VuZXJpY0hlYXZ5Vmlld18odGhpcy5hZGREaW1lbnNpb25Ub0JvdHRvbVVwSGVhdnlWaWV3Tm9kZV8uYmluZCh0aGlzKSk7fQpyZXR1cm4gdGhpcy5ib3R0b21VcEhlYXZ5Vmlld05vZGVfO30sY3JlYXRlUm9vdE5vZGVfKCl7cmV0dXJuIG5ldyBNdWx0aURpbWVuc2lvbmFsVmlld05vZGUobmV3IEFycmF5KHRoaXMuZGltZW5zaW9uc18pLHRoaXMudmFsdWVDb3VudF8pO30sZ2V0T3JDcmVhdGVDaGlsZE5vZGVfKHBhcmVudE5vZGUsZGltZW5zaW9uLGNoaWxkRGltZW5zaW9uVGl0bGUpe2lmKGRpbWVuc2lvbjwwfHxkaW1lbnNpb24+PXRoaXMuZGltZW5zaW9uc18pe3Rocm93IG5ldyBFcnJvcignSW52YWxpZCBkaW1lbnNpb24nKTt9CmNvbnN0IGRpbWVuc2lvbkNoaWxkcmVuPXBhcmVudE5vZGUuY2hpbGRyZW5bZGltZW5zaW9uXTtsZXQgY2hpbGROb2RlPWRpbWVuc2lvbkNoaWxkcmVuLmdldChjaGlsZERpbWVuc2lvblRpdGxlKTtpZihjaGlsZE5vZGUhPT11bmRlZmluZWQpe3JldHVybiBjaGlsZE5vZGU7fQpjb25zdCBjaGlsZFRpdGxlPXBhcmVudE5vZGUudGl0bGUuc2xpY2UoKTtjaGlsZFRpdGxlW2RpbWVuc2lvbl09Y2hpbGREaW1lbnNpb25UaXRsZTtjaGlsZE5vZGU9bmV3IE11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZShjaGlsZFRpdGxlLHRoaXMudmFsdWVDb3VudF8pO2RpbWVuc2lvbkNoaWxkcmVuLnNldChjaGlsZERpbWVuc2lvblRpdGxlLGNoaWxkTm9kZSk7cmV0dXJuIGNoaWxkTm9kZTt9LHNldFVwTWlzc2luZ0NoaWxkUmVsYXRpb25zaGlwc18obm9kZSxmaXJzdERpbWVuc2lvblRvU2V0VXApe2ZvcihsZXQgZD1maXJzdERpbWVuc2lvblRvU2V0VXA7ZDx0aGlzLmRpbWVuc2lvbnNfO2QrKyl7Y29uc3QgY3VycmVudERpbWVuc2lvbkNoaWxkVGl0bGVzPW5ldyBTZXQobm9kZS5jaGlsZHJlbltkXS5rZXlzKCkpO2ZvcihsZXQgaT0wO2k8ZDtpKyspe2Zvcihjb25zdCBwcmV2aW91c0RpbWVuc2lvbkNoaWxkTm9kZSBvZiBub2RlLmNoaWxkcmVuW2ldLnZhbHVlcygpKXtmb3IoY29uc3QgcHJldmlvdXNEaW1lbnNpb25HcmFuZENoaWxkVGl0bGUgb2YKcHJldmlvdXNEaW1lbnNpb25DaGlsZE5vZGUuY2hpbGRyZW5bZF0ua2V5cygpKXtjdXJyZW50RGltZW5zaW9uQ2hpbGRUaXRsZXMuYWRkKHByZXZpb3VzRGltZW5zaW9uR3JhbmRDaGlsZFRpdGxlKTt9fX0KZm9yKGNvbnN0IGN1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlIG9mIGN1cnJlbnREaW1lbnNpb25DaGlsZFRpdGxlcyl7Y29uc3QgY3VycmVudERpbWVuc2lvbkNoaWxkTm9kZT10aGlzLmdldE9yQ3JlYXRlQ2hpbGROb2RlXyhub2RlLGQsY3VycmVudERpbWVuc2lvbkNoaWxkVGl0bGUpO2ZvcihsZXQgaT0wO2k8ZDtpKyspe2Zvcihjb25zdCBwcmV2aW91c0RpbWVuc2lvbkNoaWxkTm9kZSBvZgpub2RlLmNoaWxkcmVuW2ldLnZhbHVlcygpKXtjb25zdCBwcmV2aW91c0RpbWVuc2lvbkdyYW5kQ2hpbGROb2RlPXByZXZpb3VzRGltZW5zaW9uQ2hpbGROb2RlLmNoaWxkcmVuW2RdLmdldChjdXJyZW50RGltZW5zaW9uQ2hpbGRUaXRsZSk7aWYocHJldmlvdXNEaW1lbnNpb25HcmFuZENoaWxkTm9kZSE9PXVuZGVmaW5lZCl7Y3VycmVudERpbWVuc2lvbkNoaWxkTm9kZS5jaGlsZHJlbltpXS5zZXQocHJldmlvdXNEaW1lbnNpb25DaGlsZE5vZGUudGl0bGVbaV0scHJldmlvdXNEaW1lbnNpb25HcmFuZENoaWxkTm9kZSk7fX19CnRoaXMuc2V0VXBNaXNzaW5nQ2hpbGRSZWxhdGlvbnNoaXBzXyhjdXJyZW50RGltZW5zaW9uQ2hpbGROb2RlLGQpO319fSxmaW5hbGl6ZVRvdGFsVmFsdWVzXyhub2RlLGZpcnN0RGltZW5zaW9uVG9GaW5hbGl6ZSxkaW1lbnNpb25hbFNlbGZTdW1zTWFwKXtjb25zdCBkaW1lbnNpb25hbFNlbGZTdW1zPW5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbnNfKTtjb25zdCBtaW5SZXNpZHVhbD1uZXcgQXJyYXkodGhpcy52YWx1ZUNvdW50Xyk7Zm9yKGxldCB2PTA7djx0aGlzLnZhbHVlQ291bnRfO3YrKyltaW5SZXNpZHVhbFt2XT0wO2NvbnN0IG5vZGVWYWx1ZXM9bm9kZS52YWx1ZXM7Y29uc3Qgbm9kZVNlbGZTdW1zPW5ldyBBcnJheSh0aGlzLnZhbHVlQ291bnRfKTtmb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKXtub2RlU2VsZlN1bXNbdl09bm9kZVZhbHVlc1t2XS5zZWxmO30KZm9yKGxldCBkPTA7ZDx0aGlzLmRpbWVuc2lvbnNfO2QrKyl7Y29uc3QgY2hpbGRSZXNpZHVhbFN1bXM9bmV3IEFycmF5KHRoaXMudmFsdWVDb3VudF8pO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe2NoaWxkUmVzaWR1YWxTdW1zW3ZdPTA7fQpmb3IoY29uc3QgY2hpbGROb2RlIG9mIG5vZGUuY2hpbGRyZW5bZF0udmFsdWVzKCkpe2lmKGQ+PWZpcnN0RGltZW5zaW9uVG9GaW5hbGl6ZSl7dGhpcy5maW5hbGl6ZVRvdGFsVmFsdWVzXyhjaGlsZE5vZGUsZCxkaW1lbnNpb25hbFNlbGZTdW1zTWFwKTt9CmNvbnN0IGNoaWxkTm9kZVNlbGZTdW1zPWRpbWVuc2lvbmFsU2VsZlN1bXNNYXAuZ2V0KGNoaWxkTm9kZSk7Y29uc3QgY2hpbGROb2RlVmFsdWVzPWNoaWxkTm9kZS52YWx1ZXM7Zm9yKGxldCB2PTA7djx0aGlzLnZhbHVlQ291bnRfO3YrKyl7bm9kZVNlbGZTdW1zW3ZdKz1jaGlsZE5vZGVTZWxmU3Vtc1tkXVt2XTtjb25zdCByZXNpZHVhbD1jaGlsZE5vZGVWYWx1ZXNbdl0udG90YWwtCmNoaWxkTm9kZVNlbGZTdW1zW3RoaXMuZGltZW5zaW9uc18tMV1bdl07Y2hpbGRSZXNpZHVhbFN1bXNbdl0rPXJlc2lkdWFsO2lmKHRoaXMuY29tcGxldGUpe25vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT1FWEFDVDt9ZWxzZSBpZihjaGlsZE5vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT5OT1RfUFJPVklERUQpe25vZGVWYWx1ZXNbdl0udG90YWxTdGF0ZT1NYXRoLm1heChub2RlVmFsdWVzW3ZdLnRvdGFsU3RhdGUsTE9XRVJfQk9VTkQpO319fQpkaW1lbnNpb25hbFNlbGZTdW1zW2RdPW5vZGVTZWxmU3Vtcy5zbGljZSgpO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe21pblJlc2lkdWFsW3ZdPU1hdGgubWF4KG1pblJlc2lkdWFsW3ZdLGNoaWxkUmVzaWR1YWxTdW1zW3ZdKTt9fQpmb3IobGV0IHY9MDt2PHRoaXMudmFsdWVDb3VudF87disrKXtub2RlVmFsdWVzW3ZdLnRvdGFsPU1hdGgubWF4KG5vZGVWYWx1ZXNbdl0udG90YWwsbm9kZVNlbGZTdW1zW3ZdK21pblJlc2lkdWFsW3ZdKTt9CmlmKGRpbWVuc2lvbmFsU2VsZlN1bXNNYXAuaGFzKG5vZGUpKXt0aHJvdyBuZXcgRXJyb3IoJ0ludGVybmFsIGVycm9yOiBOb2RlIGZpbmFsaXplZCBtb3JlIHRoYW4gb25jZScpO30KZGltZW5zaW9uYWxTZWxmU3Vtc01hcC5zZXQobm9kZSxkaW1lbnNpb25hbFNlbGZTdW1zKTt9LGJ1aWxkR2VuZXJpY0hlYXZ5Vmlld18odHJlZVZpZXdOb2RlSGFuZGxlcil7Y29uc3QgdHJlZVZpZXdSb290PXRoaXMuYnVpbGRUb3BEb3duVHJlZVZpZXcoKTtjb25zdCBoZWF2eVZpZXdSb290PXRoaXMuY3JlYXRlUm9vdE5vZGVfKCk7aGVhdnlWaWV3Um9vdC52YWx1ZXM9dHJlZVZpZXdSb290LnZhbHVlcztjb25zdCByZWN1cnNpb25EZXB0aFRyYWNrZXJzPW5ldyBBcnJheSh0aGlzLmRpbWVuc2lvbnNfKTtmb3IobGV0IGQ9MDtkPHRoaXMuZGltZW5zaW9uc187ZCsrKXtyZWN1cnNpb25EZXB0aFRyYWNrZXJzW2RdPW5ldyBSZWN1cnNpb25EZXB0aFRyYWNrZXIodGhpcy5tYXhEaW1lbnNpb25EZXB0aHNfW2RdLGQpO30KdGhpcy5hZGREaW1lbnNpb25zVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdSb290LGhlYXZ5Vmlld1Jvb3QsMCxyZWN1cnNpb25EZXB0aFRyYWNrZXJzLGZhbHNlLHRyZWVWaWV3Tm9kZUhhbmRsZXIpO3RoaXMuc2V0VXBNaXNzaW5nQ2hpbGRSZWxhdGlvbnNoaXBzXyhoZWF2eVZpZXdSb290LDApO3JldHVybiBoZWF2eVZpZXdSb290O30sYWRkRGltZW5zaW9uc1RvR2VuZXJpY0hlYXZ5Vmlld05vZGVfKHRyZWVWaWV3UGFyZW50Tm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLHN0YXJ0RGltZW5zaW9uLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRyZWVWaWV3Tm9kZUhhbmRsZXIpe2ZvcihsZXQgZD1zdGFydERpbWVuc2lvbjtkPHRoaXMuZGltZW5zaW9uc187ZCsrKXt0aGlzLmFkZERpbWVuc2lvbkRlc2NlbmRhbnRzVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdQYXJlbnROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsZCxyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSx0cmVlVmlld05vZGVIYW5kbGVyKTt9fSxhZGREaW1lbnNpb25EZXNjZW5kYW50c1RvR2VuZXJpY0hlYXZ5Vmlld05vZGVfKHRyZWVWaWV3UGFyZW50Tm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUsdHJlZVZpZXdOb2RlSGFuZGxlcil7Y29uc3QgdHJlZVZpZXdDaGlsZHJlbj10cmVlVmlld1BhcmVudE5vZGUuY2hpbGRyZW5bY3VycmVudERpbWVuc2lvbl07Y29uc3QgcmVjdXJzaW9uRGVwdGhUcmFja2VyPXJlY3Vyc2lvbkRlcHRoVHJhY2tlcnNbY3VycmVudERpbWVuc2lvbl07Zm9yKGNvbnN0IHRyZWVWaWV3Q2hpbGROb2RlIG9mIHRyZWVWaWV3Q2hpbGRyZW4udmFsdWVzKCkpe3JlY3Vyc2lvbkRlcHRoVHJhY2tlci5wdXNoKHRyZWVWaWV3Q2hpbGROb2RlKTt0cmVlVmlld05vZGVIYW5kbGVyKHRyZWVWaWV3Q2hpbGROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSk7dGhpcy5hZGREaW1lbnNpb25EZXNjZW5kYW50c1RvR2VuZXJpY0hlYXZ5Vmlld05vZGVfKHRyZWVWaWV3Q2hpbGROb2RlLGhlYXZ5Vmlld1BhcmVudE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSx0cmVlVmlld05vZGVIYW5kbGVyKTtyZWN1cnNpb25EZXB0aFRyYWNrZXIucG9wKCk7fX0sYWRkRGltZW5zaW9uVG9Ub3BEb3duSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3UGFyZW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlKXt0aGlzLmFkZERpbWVuc2lvblRvVG9wRG93bkhlYXZ5Vmlld05vZGVSZWN1cnNpdmVseV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3UGFyZW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMscHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLDEpO30sYWRkRGltZW5zaW9uVG9Ub3BEb3duSGVhdnlWaWV3Tm9kZVJlY3Vyc2l2ZWx5Xyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUsc3ViVHJlZURlcHRoKXtjb25zdCByZWN1cnNpb25EZXB0aFRyYWNrZXI9cmVjdXJzaW9uRGVwdGhUcmFja2Vyc1tjdXJyZW50RGltZW5zaW9uXTtjb25zdCBjdXJyZW50RGltZW5zaW9uUmVjdXJzaXZlPXN1YlRyZWVEZXB0aDw9cmVjdXJzaW9uRGVwdGhUcmFja2VyLnJlY3Vyc2lvbkRlcHRoO2NvbnN0IGN1cnJlbnRPclByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZT1jdXJyZW50RGltZW5zaW9uUmVjdXJzaXZlfHxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmU7Y29uc3QgZGltZW5zaW9uVGl0bGU9dHJlZVZpZXdDaGlsZE5vZGUudGl0bGVbY3VycmVudERpbWVuc2lvbl07Y29uc3QgaGVhdnlWaWV3Q2hpbGROb2RlPXRoaXMuZ2V0T3JDcmVhdGVDaGlsZE5vZGVfKGhlYXZ5Vmlld1BhcmVudE5vZGUsY3VycmVudERpbWVuc2lvbixkaW1lbnNpb25UaXRsZSk7dGhpcy5hZGROb2RlVmFsdWVzXyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdDaGlsZE5vZGUsIWN1cnJlbnRPclByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSk7dGhpcy5hZGREaW1lbnNpb25zVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3Q2hpbGROb2RlLGN1cnJlbnREaW1lbnNpb24rMSxyZWN1cnNpb25EZXB0aFRyYWNrZXJzLGN1cnJlbnRPclByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSx0aGlzLmFkZERpbWVuc2lvblRvVG9wRG93bkhlYXZ5Vmlld05vZGVfLmJpbmQodGhpcykpO2Zvcihjb25zdCB0cmVlVmlld0dyYW5kQ2hpbGROb2RlIG9mCnRyZWVWaWV3Q2hpbGROb2RlLmNoaWxkcmVuW2N1cnJlbnREaW1lbnNpb25dLnZhbHVlcygpKXtyZWN1cnNpb25EZXB0aFRyYWNrZXIucHVzaCh0cmVlVmlld0dyYW5kQ2hpbGROb2RlKTt0aGlzLmFkZERpbWVuc2lvblRvVG9wRG93bkhlYXZ5Vmlld05vZGVSZWN1cnNpdmVseV8odHJlZVZpZXdHcmFuZENoaWxkTm9kZSxoZWF2eVZpZXdDaGlsZE5vZGUsY3VycmVudERpbWVuc2lvbixyZWN1cnNpb25EZXB0aFRyYWNrZXJzLHByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSxzdWJUcmVlRGVwdGgrMSk7cmVjdXJzaW9uRGVwdGhUcmFja2VyLnBvcCgpO319LGFkZERpbWVuc2lvblRvQm90dG9tVXBIZWF2eVZpZXdOb2RlXyh0cmVlVmlld0NoaWxkTm9kZSxoZWF2eVZpZXdQYXJlbnROb2RlLGN1cnJlbnREaW1lbnNpb24scmVjdXJzaW9uRGVwdGhUcmFja2VycyxwcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmUpe2NvbnN0IHJlY3Vyc2lvbkRlcHRoVHJhY2tlcj1yZWN1cnNpb25EZXB0aFRyYWNrZXJzW2N1cnJlbnREaW1lbnNpb25dO2NvbnN0IGJvdHRvbUluZGV4PXJlY3Vyc2lvbkRlcHRoVHJhY2tlci5ib3R0b21JbmRleDtjb25zdCB0b3BJbmRleD1yZWN1cnNpb25EZXB0aFRyYWNrZXIudG9wSW5kZXg7Y29uc3QgZmlyc3ROb25SZWN1cnNpdmVJbmRleD1ib3R0b21JbmRleCtyZWN1cnNpb25EZXB0aFRyYWNrZXIucmVjdXJzaW9uRGVwdGg7Y29uc3Qgdmlld05vZGVQYXRoPXJlY3Vyc2lvbkRlcHRoVHJhY2tlci52aWV3Tm9kZVBhdGg7Y29uc3QgdHJhY2tlckFuY2VzdG9yTm9kZT1yZWN1cnNpb25EZXB0aFRyYWNrZXIudHJhY2tlckFuY2VzdG9yTm9kZTtsZXQgaGVhdnlWaWV3RGVzY2VuZGFudE5vZGU9aGVhdnlWaWV3UGFyZW50Tm9kZTtmb3IobGV0IGk9Ym90dG9tSW5kZXg7aTx0b3BJbmRleDtpKyspe2NvbnN0IHRyZWVWaWV3QW5jZXN0b3JOb2RlPXZpZXdOb2RlUGF0aFtpXTtjb25zdCBkaW1lbnNpb25UaXRsZT10cmVlVmlld0FuY2VzdG9yTm9kZS50aXRsZVtjdXJyZW50RGltZW5zaW9uXTtoZWF2eVZpZXdEZXNjZW5kYW50Tm9kZT10aGlzLmdldE9yQ3JlYXRlQ2hpbGROb2RlXyhoZWF2eVZpZXdEZXNjZW5kYW50Tm9kZSxjdXJyZW50RGltZW5zaW9uLGRpbWVuc2lvblRpdGxlKTtjb25zdCBjdXJyZW50RGltZW5zaW9uUmVjdXJzaXZlPWk8Zmlyc3ROb25SZWN1cnNpdmVJbmRleDtjb25zdCBjdXJyZW50T3JQcmV2aW91c0RpbWVuc2lvbnNSZWN1cnNpdmU9Y3VycmVudERpbWVuc2lvblJlY3Vyc2l2ZXx8cHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlO3RoaXMuYWRkTm9kZVZhbHVlc18odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3RGVzY2VuZGFudE5vZGUsIWN1cnJlbnRPclByZXZpb3VzRGltZW5zaW9uc1JlY3Vyc2l2ZSk7dGhpcy5hZGREaW1lbnNpb25zVG9HZW5lcmljSGVhdnlWaWV3Tm9kZV8odHJlZVZpZXdDaGlsZE5vZGUsaGVhdnlWaWV3RGVzY2VuZGFudE5vZGUsY3VycmVudERpbWVuc2lvbisxLHJlY3Vyc2lvbkRlcHRoVHJhY2tlcnMsY3VycmVudE9yUHJldmlvdXNEaW1lbnNpb25zUmVjdXJzaXZlLHRoaXMuYWRkRGltZW5zaW9uVG9Cb3R0b21VcEhlYXZ5Vmlld05vZGVfLmJpbmQodGhpcykpO319LGFkZE5vZGVWYWx1ZXNfKHNvdXJjZU5vZGUsdGFyZ2V0Tm9kZSxhZGRUb3RhbCl7Y29uc3QgdGFyZ2V0Tm9kZVZhbHVlcz10YXJnZXROb2RlLnZhbHVlcztjb25zdCBzb3VyY2VOb2RlVmFsdWVzPXNvdXJjZU5vZGUudmFsdWVzO2ZvcihsZXQgdj0wO3Y8dGhpcy52YWx1ZUNvdW50Xzt2Kyspe2NvbnN0IHRhcmdldE5vZGVWYWx1ZT10YXJnZXROb2RlVmFsdWVzW3ZdO2NvbnN0IHNvdXJjZU5vZGVWYWx1ZT1zb3VyY2VOb2RlVmFsdWVzW3ZdO3RhcmdldE5vZGVWYWx1ZS5zZWxmKz1zb3VyY2VOb2RlVmFsdWUuc2VsZjtpZihhZGRUb3RhbCl7dGFyZ2V0Tm9kZVZhbHVlLnRvdGFsKz1zb3VyY2VOb2RlVmFsdWUudG90YWw7aWYodGhpcy5jb21wbGV0ZSl7dGFyZ2V0Tm9kZVZhbHVlLnRvdGFsU3RhdGU9RVhBQ1Q7fWVsc2UgaWYoc291cmNlTm9kZVZhbHVlLnRvdGFsU3RhdGU+Tk9UX1BST1ZJREVEKXt0YXJnZXROb2RlVmFsdWUudG90YWxTdGF0ZT1NYXRoLm1heCh0YXJnZXROb2RlVmFsdWUudG90YWxTdGF0ZSxMT1dFUl9CT1VORCk7fX19fX07ZnVuY3Rpb24gUmVjdXJzaW9uRGVwdGhUcmFja2VyKG1heERlcHRoLGRpbWVuc2lvbil7dGhpcy50aXRsZVBhdGg9bmV3IEFycmF5KG1heERlcHRoKTt0aGlzLnZpZXdOb2RlUGF0aD1uZXcgQXJyYXkobWF4RGVwdGgpO3RoaXMuYm90dG9tSW5kZXg9dGhpcy50b3BJbmRleD1tYXhEZXB0aDt0aGlzLmRpbWVuc2lvbl89ZGltZW5zaW9uO3RoaXMuY3VycmVudFRyYWNrZXJOb2RlXz10aGlzLmNyZWF0ZU5vZGVfKDAsdW5kZWZpbmVkKTt9ClJlY3Vyc2lvbkRlcHRoVHJhY2tlci5wcm90b3R5cGU9e3B1c2godmlld05vZGUpe2lmKHRoaXMuYm90dG9tSW5kZXg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBwdXNoIHRvIGEgZnVsbCB0cmFja2VyJyk7fQpjb25zdCB0aXRsZT12aWV3Tm9kZS50aXRsZVt0aGlzLmRpbWVuc2lvbl9dO3RoaXMuYm90dG9tSW5kZXgtLTt0aGlzLnRpdGxlUGF0aFt0aGlzLmJvdHRvbUluZGV4XT10aXRsZTt0aGlzLnZpZXdOb2RlUGF0aFt0aGlzLmJvdHRvbUluZGV4XT12aWV3Tm9kZTtsZXQgY2hpbGRUcmFja2VyTm9kZT10aGlzLmN1cnJlbnRUcmFja2VyTm9kZV8uY2hpbGRyZW4uZ2V0KHRpdGxlKTtpZihjaGlsZFRyYWNrZXJOb2RlIT09dW5kZWZpbmVkKXt0aGlzLmN1cnJlbnRUcmFja2VyTm9kZV89Y2hpbGRUcmFja2VyTm9kZTtyZXR1cm47fQpjb25zdCBtYXhMZW5ndGhzPXpGdW5jdGlvbih0aGlzLnRpdGxlUGF0aCx0aGlzLmJvdHRvbUluZGV4KTtsZXQgcmVjdXJzaW9uRGVwdGg9MDtmb3IobGV0IGk9MDtpPG1heExlbmd0aHMubGVuZ3RoO2krKyl7cmVjdXJzaW9uRGVwdGg9TWF0aC5tYXgocmVjdXJzaW9uRGVwdGgsbWF4TGVuZ3Roc1tpXSk7fQpjaGlsZFRyYWNrZXJOb2RlPXRoaXMuY3JlYXRlTm9kZV8ocmVjdXJzaW9uRGVwdGgsdGhpcy5jdXJyZW50VHJhY2tlck5vZGVfKTt0aGlzLmN1cnJlbnRUcmFja2VyTm9kZV8uY2hpbGRyZW4uc2V0KHRpdGxlLGNoaWxkVHJhY2tlck5vZGUpO3RoaXMuY3VycmVudFRyYWNrZXJOb2RlXz1jaGlsZFRyYWNrZXJOb2RlO30scG9wKCl7aWYodGhpcy5ib3R0b21JbmRleD09PXRoaXMudG9wSW5kZXgpe3Rocm93IG5ldyBFcnJvcignQ2Fubm90IHBvcCBmcm9tIGFuIGVtcHR5IHRyYWNrZXInKTt9CnRoaXMudGl0bGVQYXRoW3RoaXMuYm90dG9tSW5kZXhdPXVuZGVmaW5lZDt0aGlzLnZpZXdOb2RlUGF0aFt0aGlzLmJvdHRvbUluZGV4XT11bmRlZmluZWQ7dGhpcy5ib3R0b21JbmRleCsrO3RoaXMuY3VycmVudFRyYWNrZXJOb2RlXz10aGlzLmN1cnJlbnRUcmFja2VyTm9kZV8ucGFyZW50O30sZ2V0IHJlY3Vyc2lvbkRlcHRoKCl7cmV0dXJuIHRoaXMuY3VycmVudFRyYWNrZXJOb2RlXy5yZWN1cnNpb25EZXB0aDt9LGNyZWF0ZU5vZGVfKHJlY3Vyc2lvbkRlcHRoLHBhcmVudCl7cmV0dXJue3JlY3Vyc2lvbkRlcHRoLHBhcmVudCxjaGlsZHJlbjpuZXcgTWFwKCl9O319O2Z1bmN0aW9uIHpGdW5jdGlvbihsaXN0LHN0YXJ0SW5kZXgpe2NvbnN0IG49bGlzdC5sZW5ndGgtc3RhcnRJbmRleDtpZihuPT09MClyZXR1cm5bXTtjb25zdCB6PW5ldyBBcnJheShuKTt6WzBdPTA7Zm9yKGxldCBpPTEsbGVmdD0wLHJpZ2h0PTA7aTxuOysraSl7bGV0IG1heExlbmd0aDtpZihpPD1yaWdodCl7bWF4TGVuZ3RoPU1hdGgubWluKHJpZ2h0LWkrMSx6W2ktbGVmdF0pO31lbHNle21heExlbmd0aD0wO30Kd2hpbGUoaSttYXhMZW5ndGg8biYmbGlzdFtzdGFydEluZGV4K21heExlbmd0aF09PT1saXN0W3N0YXJ0SW5kZXgraSttYXhMZW5ndGhdKXsrK21heExlbmd0aDt9CmlmKGkrbWF4TGVuZ3RoLTE+cmlnaHQpe2xlZnQ9aTtyaWdodD1pK21heExlbmd0aC0xO30KeltpXT1tYXhMZW5ndGg7fQpyZXR1cm4gejt9CnJldHVybntNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIsTXVsdGlEaW1lbnNpb25hbFZpZXdOb2RlLFJlY3Vyc2lvbkRlcHRoVHJhY2tlcix6RnVuY3Rpb24sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUuY2hyb21lJyxmdW5jdGlvbigpe2NsYXNzIENwdVRpbWV7c3RhdGljIGdldFN0YWdlVG9Jbml0aWF0b3JUb1NlZ21lbnRCb3VuZHMoc2VnbWVudHMscmFuZ2VPZkludGVyZXN0KXtjb25zdCBzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXM9bmV3IE1hcCgpO3N0YWdlVG9Jbml0aWF0b3JUb1Jhbmdlcy5zZXQoJ2FsbF9zdGFnZXMnLG5ldyBNYXAoW1snYWxsX2luaXRpYXRvcnMnLG5ldyBTZXQoKV1dKSk7Y29uc3QgYWxsUmFuZ2VzPXN0YWdlVG9Jbml0aWF0b3JUb1Jhbmdlcy5nZXQoJ2FsbF9zdGFnZXMnKS5nZXQoJ2FsbF9pbml0aWF0b3JzJyk7Zm9yKGNvbnN0IHNlZ21lbnQgb2Ygc2VnbWVudHMpe2lmKCFyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c1JhbmdlSW5jbHVzaXZlKHNlZ21lbnQucmFuZ2UpKWNvbnRpbnVlO2NvbnN0IGludGVyc2VjdGluZ1JhbmdlPXJhbmdlT2ZJbnRlcmVzdC5maW5kSW50ZXJzZWN0aW9uKHNlZ21lbnQucmFuZ2UpO2FsbFJhbmdlcy5hZGQoaW50ZXJzZWN0aW5nUmFuZ2UpO2Zvcihjb25zdCBleHBlY3RhdGlvbiBvZiBzZWdtZW50LmV4cGVjdGF0aW9ucyl7Y29uc3Qgc3RhZ2VUaXRsZT1leHBlY3RhdGlvbi5zdGFnZVRpdGxlO2lmKCFzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuaGFzKHN0YWdlVGl0bGUpKXtzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuc2V0KHN0YWdlVGl0bGUsbmV3IE1hcChbWydhbGxfaW5pdGlhdG9ycycsbmV3IFNldCgpXV0pKTt9CmNvbnN0IGluaXRpYXRvclRvUmFuZ2VzPXN0YWdlVG9Jbml0aWF0b3JUb1Jhbmdlcy5nZXQoc3RhZ2VUaXRsZSk7aW5pdGlhdG9yVG9SYW5nZXMuZ2V0KCdhbGxfaW5pdGlhdG9ycycpLmFkZChpbnRlcnNlY3RpbmdSYW5nZSk7Y29uc3QgaW5pdGlhdG9yVHlwZT1leHBlY3RhdGlvbi5pbml0aWF0b3JUeXBlO2lmKGluaXRpYXRvclR5cGUpe2lmKCFpbml0aWF0b3JUb1Jhbmdlcy5oYXMoaW5pdGlhdG9yVHlwZSkpe2luaXRpYXRvclRvUmFuZ2VzLnNldChpbml0aWF0b3JUeXBlLG5ldyBTZXQoKSk7fQppbml0aWF0b3JUb1Jhbmdlcy5nZXQoaW5pdGlhdG9yVHlwZSkuYWRkKGludGVyc2VjdGluZ1JhbmdlKTt9fX0KcmV0dXJuIHN0YWdlVG9Jbml0aWF0b3JUb1Jhbmdlczt9CnN0YXRpYyBjb25zdHJ1Y3RNdWx0aURpbWVuc2lvbmFsVmlldyhtb2RlbCxyYW5nZU9mSW50ZXJlc3Qpe2NvbnN0IG1kdkJ1aWxkZXI9bmV3IHRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyKDMsMik7Y29uc3Qgc3RhZ2VUb0luaXRpYXRvclRvUmFuZ2VzPUNwdVRpbWUuZ2V0U3RhZ2VUb0luaXRpYXRvclRvU2VnbWVudEJvdW5kcyhtb2RlbC51c2VyTW9kZWwuc2VnbWVudHMscmFuZ2VPZkludGVyZXN0KTtjb25zdCBhbGxTZWdtZW50Qm91bmRzSW5SYW5nZT1zdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMuZ2V0KCdhbGxfc3RhZ2VzJykuZ2V0KCdhbGxfaW5pdGlhdG9ycycpO2Zvcihjb25zdFtwaWQscHJvY2Vzc11vZiBPYmplY3QuZW50cmllcyhtb2RlbC5wcm9jZXNzZXMpKXtjb25zdCBwcm9jZXNzVHlwZT10ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHByb2Nlc3MubmFtZSk7Zm9yKGNvbnN0W3RpZCx0aHJlYWRdb2YgT2JqZWN0LmVudHJpZXMocHJvY2Vzcy50aHJlYWRzKSl7Y29uc3QgcmFuZ2VUb0NwdVRpbWU9bmV3IE1hcCgpO2Zvcihjb25zdCByYW5nZSBvZiBhbGxTZWdtZW50Qm91bmRzSW5SYW5nZSl7cmFuZ2VUb0NwdVRpbWUuc2V0KHJhbmdlLHRocmVhZC5nZXRDcHVUaW1lRm9yUmFuZ2UocmFuZ2UpKTt9CmZvcihjb25zdFtzdGFnZSxpbml0aWF0b3JUb1Jhbmdlc11vZiBzdGFnZVRvSW5pdGlhdG9yVG9SYW5nZXMpe2Zvcihjb25zdFtpbml0aWF0b3IscmFuZ2VzXW9mIGluaXRpYXRvclRvUmFuZ2VzKXtjb25zdCBjcHVUaW1lPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShyYW5nZXMscmFuZ2U9PnJhbmdlVG9DcHVUaW1lLmdldChyYW5nZSkpO2NvbnN0IGR1cmF0aW9uPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShyYW5nZXMscmFuZ2U9PnJhbmdlLmR1cmF0aW9uKTtjb25zdCBjcHVUaW1lUGVyU2Vjb25kPWNwdVRpbWUvZHVyYXRpb247bWR2QnVpbGRlci5hZGRQYXRoKFtbcHJvY2Vzc1R5cGVdLFt0aHJlYWQudHlwZV0sW3N0YWdlLGluaXRpYXRvcl1dLFtjcHVUaW1lUGVyU2Vjb25kLGNwdVRpbWVdLHRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5UT1RBTCk7fX19fQpyZXR1cm4gbWR2QnVpbGRlci5idWlsZFRvcERvd25UcmVlVmlldygpO319CnJldHVybntDcHVUaW1lLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IENQVV9QRVJDRU5UQUdFX1VOSVQ9dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXI7Y29uc3QgQ1BVX1RJTUVfVU5JVD10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2Z1bmN0aW9uIGNsb25lUGF0aF8ocHJldmlvdXNQYXRoKXtyZXR1cm4gcHJldmlvdXNQYXRoLm1hcChzdWJQYXRoPT5zdWJQYXRoLm1hcCh4PT54KSk7fQpmdW5jdGlvbiBkZWNvZGVQYXRoXyhwYXRoKXtyZXR1cm57cHJvY2Vzc1R5cGU6cGF0aFswXVswXSx0aHJlYWRUeXBlOnBhdGhbMV1bMF0scmFpbFN0YWdlOnBhdGhbMl1bMF0saW5pdGlhdG9yVHlwZTpwYXRoWzJdWzFdfTt9CmZ1bmN0aW9uIHN0cmluZ2lmeVBhdGhOYW1lXyhwYXRoKXtjb25zdCBkZWNvZGVkUGF0aD1kZWNvZGVQYXRoXyhwYXRoKTtyZXR1cm5bZGVjb2RlZFBhdGgucHJvY2Vzc1R5cGUsZGVjb2RlZFBhdGgudGhyZWFkVHlwZSxkZWNvZGVkUGF0aC5yYWlsU3RhZ2UsZGVjb2RlZFBhdGguaW5pdGlhdG9yVHlwZV0uam9pbignOicpO30KY2xhc3MgQ3B1VGltZVRyZWVEYXRhUmVwb3J0ZXJ7Y29uc3RydWN0b3IoKXt0aGlzLnZpc2l0ZWRTZXRfPW5ldyBTZXQoKTt9CnJlcG9ydFZhbHVlc0Zyb21Ob2RlXyhub2RlLHBhdGgpe2NvbnN0IGRlY29kZWRQYXRoPWRlY29kZVBhdGhfKHBhdGgpO2NvbnN0IHByb2Nlc3NUeXBlPWRlY29kZWRQYXRoLnByb2Nlc3NUeXBlfHwnYWxsX3Byb2Nlc3Nlcyc7Y29uc3QgdGhyZWFkVHlwZT1kZWNvZGVkUGF0aC50aHJlYWRUeXBlfHwnYWxsX3RocmVhZHMnO2lmKCFkZWNvZGVkUGF0aC5yYWlsU3RhZ2V8fCFkZWNvZGVkUGF0aC5pbml0aWF0b3JUeXBlKXJldHVybjtjb25zdHtyYWlsU3RhZ2UsaW5pdGlhdG9yVHlwZX09ZGVjb2RlZFBhdGg7Y29uc3Qgc2VyaWFsaXplZFBhdGhOYW1lPVtwcm9jZXNzVHlwZSx0aHJlYWRUeXBlLHJhaWxTdGFnZSxpbml0aWF0b3JUeXBlXS5qb2luKCc6Jyk7Y29uc3QgY3B1UGVyY2VudGFnZVZhbHVlPW5vZGUudmFsdWVzWzBdLnRvdGFsO2NvbnN0IGNwdVRpbWVWYWx1ZT1ub2RlLnZhbHVlc1sxXS50b3RhbDt0aGlzLmhpc3RvZ3JhbVNldF8uY3JlYXRlSGlzdG9ncmFtKGBjcHVQZXJjZW50YWdlOiR7c2VyaWFsaXplZFBhdGhOYW1lfWAsQ1BVX1BFUkNFTlRBR0VfVU5JVCxjcHVQZXJjZW50YWdlVmFsdWUpO3RoaXMuaGlzdG9ncmFtU2V0Xy5jcmVhdGVIaXN0b2dyYW0oYGNwdVRpbWU6JHtzZXJpYWxpemVkUGF0aE5hbWV9YCxDUFVfVElNRV9VTklULGNwdVRpbWVWYWx1ZSk7fQpyZXBvcnREYXRhRnJvbVRyZWVfKHJvb3Qscm9vdFBhdGgpe2NvbnN0IHJvb3RQYXRoU3RyaW5nPXN0cmluZ2lmeVBhdGhOYW1lXyhyb290UGF0aCk7aWYodGhpcy52aXNpdGVkU2V0Xy5oYXMocm9vdFBhdGhTdHJpbmcpKXJldHVybjt0aGlzLnZpc2l0ZWRTZXRfLmFkZChyb290UGF0aFN0cmluZyk7dGhpcy5yZXBvcnRWYWx1ZXNGcm9tTm9kZV8ocm9vdCxyb290UGF0aCk7Zm9yKGxldCBkaW1lbnNpb249MDtkaW1lbnNpb248cm9vdC5jaGlsZHJlbi5sZW5ndGg7ZGltZW5zaW9uKyspe2NvbnN0IGNoaWxkcmVuPXJvb3QuY2hpbGRyZW5bZGltZW5zaW9uXTtmb3IoY29uc3RbbmFtZSxub2RlXW9mIGNoaWxkcmVuKXtjb25zdCBjaGlsZFBhdGg9Y2xvbmVQYXRoXyhyb290UGF0aCk7Y2hpbGRQYXRoW2RpbWVuc2lvbl0ucHVzaChuYW1lKTt0aGlzLnJlcG9ydERhdGFGcm9tVHJlZV8obm9kZSxjaGlsZFBhdGgpO319fQphZGRUcmVlVmFsdWVzVG9IaXN0b2dyYW1TZXQocm9vdE5vZGUsaGlzdG9ncmFtU2V0KXtjb25zdCByb290UGF0aD1bW10sW10sW11dO3RoaXMucm9vdE5vZGVfPXJvb3ROb2RlO3RoaXMuaGlzdG9ncmFtU2V0Xz1oaXN0b2dyYW1TZXQ7dGhpcy5yZXBvcnREYXRhRnJvbVRyZWVfKHRoaXMucm9vdE5vZGVfLHJvb3RQYXRoKTt9CnN0YXRpYyByZXBvcnRUb0hpc3RvZ3JhbVNldChyb290Tm9kZSxoaXN0b2dyYW1TZXQpe2NvbnN0IHJlcG9ydGVyPW5ldyBDcHVUaW1lVHJlZURhdGFSZXBvcnRlcigpO3JlcG9ydGVyLmFkZFRyZWVWYWx1ZXNUb0hpc3RvZ3JhbVNldChyb290Tm9kZSxoaXN0b2dyYW1TZXQpO319CnJldHVybntDcHVUaW1lVHJlZURhdGFSZXBvcnRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBuZXdDcHVUaW1lTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucyYmb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0P29wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDptb2RlbC5ib3VuZHM7Y29uc3Qgcm9vdE5vZGU9dHIuZS5jaHJvbWUuQ3B1VGltZS5jb25zdHJ1Y3RNdWx0aURpbWVuc2lvbmFsVmlldyhtb2RlbCxyYW5nZU9mSW50ZXJlc3QpO3RyLm1ldHJpY3Muc2guQ3B1VGltZVRyZWVEYXRhUmVwb3J0ZXIucmVwb3J0VG9IaXN0b2dyYW1TZXQocm9vdE5vZGUsaGlzdG9ncmFtcyk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKG5ld0NwdVRpbWVNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWV9KTtyZXR1cm57bmV3Q3B1VGltZU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBpbmNsdWRlSGlzdG9ncmFtTmFtZXM9WydjcHVUaW1lOmFsbF9wcm9jZXNzZXM6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVBlcmNlbnRhZ2U6YWxsX3Byb2Nlc3NlczphbGxfdGhyZWFkczphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1VGltZTpicm93c2VyX3Byb2Nlc3M6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVBlcmNlbnRhZ2U6YnJvd3Nlcl9wcm9jZXNzOmFsbF90aHJlYWRzOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVUaW1lOnJlbmRlcmVyX3Byb2Nlc3NlczphbGxfdGhyZWFkczphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1UGVyY2VudGFnZTpyZW5kZXJlcl9wcm9jZXNzZXM6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVRpbWU6Z3B1X3Byb2Nlc3M6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVBlcmNlbnRhZ2U6Z3B1X3Byb2Nlc3M6YWxsX3RocmVhZHM6YWxsX3N0YWdlczphbGxfaW5pdGlhdG9ycycsJ2NwdVRpbWU6cmVuZGVyZXJfcHJvY2Vzc2VzOkNyUmVuZGVyZXJNYWluOmFsbF9zdGFnZXM6YWxsX2luaXRpYXRvcnMnLCdjcHVQZXJjZW50YWdlOnJlbmRlcmVyX3Byb2Nlc3NlczpDclJlbmRlcmVyTWFpbjphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1VGltZTpicm93c2VyX3Byb2Nlc3M6Q3JCcm93c2VyTWFpbjphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1UGVyY2VudGFnZTpicm93c2VyX3Byb2Nlc3M6Q3JCcm93c2VyTWFpbjphbGxfc3RhZ2VzOmFsbF9pbml0aWF0b3JzJywnY3B1VGltZTphbGxfcHJvY2Vzc2VzOmFsbF90aHJlYWRzOkxvYWQ6U3VjY2Vzc2Z1bCcsJ2NwdVBlcmNlbnRhZ2U6YWxsX3Byb2Nlc3NlczphbGxfdGhyZWFkczpMb2FkOlN1Y2Nlc3NmdWwnLF07ZnVuY3Rpb24gbGltaXRlZENwdVRpbWVNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCxvcHRfb3B0aW9ucyl7Y29uc3QgYWxsQ3B1SGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoKTt0ci5tZXRyaWNzLnNoLm5ld0NwdVRpbWVNZXRyaWMoYWxsQ3B1SGlzdG9ncmFtcyxtb2RlbCxvcHRfb3B0aW9ucyk7Zm9yKGNvbnN0IGhpc3RvZ3JhbU5hbWUgb2YgaW5jbHVkZUhpc3RvZ3JhbU5hbWVzKXtjb25zdCBoaXN0b2dyYW09YWxsQ3B1SGlzdG9ncmFtcy5nZXRIaXN0b2dyYW1OYW1lZChoaXN0b2dyYW1OYW1lKTtpZihoaXN0b2dyYW0paGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTt9fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGxpbWl0ZWRDcHVUaW1lTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlfSk7cmV0dXJue2xpbWl0ZWRDcHVUaW1lTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IExPTkdfVEFTS19NUz01MDtjb25zdCBMT05HRVNUX1RBU0tfTVM9MTAwMDtmdW5jdGlvbiBpdGVyYXRlTG9uZ1RvcExldmVsVGFza3NPblRocmVhZEluUmFuZ2UodGhyZWFkLG9wdF9yYW5nZSxjYixvcHRfdGhpcyl7dGhyZWFkLnNsaWNlR3JvdXAudG9wTGV2ZWxTbGljZXMuZm9yRWFjaChmdW5jdGlvbihzbGljZSl7aWYob3B0X3JhbmdlJiYhb3B0X3JhbmdlLmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHNsaWNlLnN0YXJ0LHNsaWNlLmVuZCkpe3JldHVybjt9CmlmKHNsaWNlLmR1cmF0aW9uPExPTkdfVEFTS19NUylyZXR1cm47Y2IuY2FsbChvcHRfdGhpcyxzbGljZSk7fSk7fQpmdW5jdGlvbiBpdGVyYXRlUmVuZGVyZXJNYWluVGhyZWFkcyhtb2RlbCxjYixvcHRfdGhpcyl7Y29uc3QgbW9kZWxIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7aWYobW9kZWxIZWxwZXIhPT11bmRlZmluZWQpe09iamVjdC52YWx1ZXMobW9kZWxIZWxwZXIucmVuZGVyZXJIZWxwZXJzKS5mb3JFYWNoKGZ1bmN0aW9uKHJlbmRlcmVySGVscGVyKXtpZighcmVuZGVyZXJIZWxwZXIubWFpblRocmVhZClyZXR1cm47Y2IuY2FsbChvcHRfdGhpcyxyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkKTt9KTt9fQpjb25zdCBCSU5fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKExPTkdfVEFTS19NUyxMT05HRVNUX1RBU0tfTVMsNDApO2Z1bmN0aW9uIGxvbmdUYXNrc01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLG9wdF9vcHRpb25zKXtjb25zdCByYW5nZU9mSW50ZXJlc3Q9b3B0X29wdGlvbnM/b3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0OnVuZGVmaW5lZDtjb25zdCBsb25nVGFza0hpc3Q9aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ2xvbmdUYXNrcycsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSx7YmluQm91bmRhcmllczpCSU5fQk9VTkRBUklFUyxkZXNjcmlwdGlvbjonZHVyYXRpb25zIG9mIGxvbmcgdGFza3MnLH0pO2NvbnN0IHJlbGF0ZWROYW1lcz1uZXcgdHIudi5kLlJlbGF0ZWROYW1lTWFwKCk7bG9uZ1Rhc2tIaXN0LmRpYWdub3N0aWNzLnNldCgnY2F0ZWdvcmllcycscmVsYXRlZE5hbWVzKTtpdGVyYXRlUmVuZGVyZXJNYWluVGhyZWFkcyhtb2RlbCxmdW5jdGlvbih0aHJlYWQpe2l0ZXJhdGVMb25nVG9wTGV2ZWxUYXNrc09uVGhyZWFkSW5SYW5nZSh0aHJlYWQscmFuZ2VPZkludGVyZXN0LGZ1bmN0aW9uKHRhc2spe2NvbnN0IGJyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO2JyZWFrZG93bi5jb2xvclNjaGVtZT10ci52LmQuQ09MT1JfU0NIRU1FX0NIUk9NRV9VU0VSX0ZSSUVORExZX0NBVEVHT1JZX0RSSVZFUjtmb3IoY29uc3Qgc2xpY2Ugb2YgdGFzay5kZXNjZW5kZW50U2xpY2VzKXtjb25zdCBzYW1wbGU9c2xpY2UuY3B1U2VsZlRpbWU7aWYoc2FtcGxlPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGNhdGVnb3J5PW1vZGVsLmdldFVzZXJGcmllbmRseUNhdGVnb3J5RnJvbUV2ZW50KHNsaWNlKTtjb25zdCBoaXN0TmFtZT0nbG9uZ1Rhc2tzOicrY2F0ZWdvcnk7bGV0IGhpc3Q9aGlzdG9ncmFtcy5nZXRIaXN0b2dyYW1OYW1lZChoaXN0TmFtZSk7aWYoaGlzdD09PXVuZGVmaW5lZCl7aGlzdD1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShoaXN0TmFtZSx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkJJTl9CT1VOREFSSUVTLH0pO3JlbGF0ZWROYW1lcy5zZXQoY2F0ZWdvcnksaGlzdC5uYW1lKTt9Cmhpc3QuYWRkU2FtcGxlKHNhbXBsZSx7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFtzbGljZV0pLH0pO2JyZWFrZG93bi5zZXQoY2F0ZWdvcnksc2FtcGxlK2JyZWFrZG93bi5nZXQoY2F0ZWdvcnkpKTt9CmxvbmdUYXNrSGlzdC5hZGRTYW1wbGUodGFzay5kdXJhdGlvbix7ZXZlbnRzOm5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KFt0YXNrXSksY2F0ZWdvcmllczpicmVha2Rvd24sfSk7fSk7fSk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGxvbmdUYXNrc01ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZSxyZXF1aXJlZENhdGVnb3JpZXM6Wyd0b3BsZXZlbCddLH0pO3JldHVybntsb25nVGFza3NNZXRyaWMsaXRlcmF0ZUxvbmdUb3BMZXZlbFRhc2tzT25UaHJlYWRJblJhbmdlLGl0ZXJhdGVSZW5kZXJlck1haW5UaHJlYWRzLExPTkdfVEFTS19NUyxMT05HRVNUX1RBU0tfTVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Muc2gnLGZ1bmN0aW9uKCl7Y29uc3QgQkFDS0dST1VORD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuQkFDS0dST1VORDtjb25zdCBMSUdIVD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuTElHSFQ7Y29uc3QgREVUQUlMRUQ9dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5MZXZlbE9mRGV0YWlsLkRFVEFJTEVEO2NvbnN0IHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcjtjb25zdCBjb3VudF9zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXI7Y29uc3QgRElTUExBWUVEX1NJWkVfTlVNRVJJQ19OQU1FPXRyLm1vZGVsLk1lbW9yeUFsbG9jYXRvckR1bXAuRElTUExBWUVEX1NJWkVfTlVNRVJJQ19OQU1FO2NvbnN0IExFVkVMX09GX0RFVEFJTF9OQU1FUz1uZXcgTWFwKCk7TEVWRUxfT0ZfREVUQUlMX05BTUVTLnNldChCQUNLR1JPVU5ELCdiYWNrZ3JvdW5kJyk7TEVWRUxfT0ZfREVUQUlMX05BTUVTLnNldChMSUdIVCwnbGlnaHQnKTtMRVZFTF9PRl9ERVRBSUxfTkFNRVMuc2V0KERFVEFJTEVELCdkZXRhaWxlZCcpO2NvbnN0IEhFQVBfUFJPRklMRVJfREVUQUlMX05BTUU9J2hlYXBfcHJvZmlsZXInO2NvbnN0IEJPVU5EQVJJRVNfRk9SX1VOSVRfTUFQPW5ldyBXZWFrTWFwKCk7Qk9VTkRBUklFU19GT1JfVU5JVF9NQVAuc2V0KGNvdW50X3NtYWxsZXJJc0JldHRlcix0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMjApKTtCT1VOREFSSUVTX0ZPUl9VTklUX01BUC5zZXQoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLG5ldyB0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMoMCkuYWRkQmluQm91bmRhcnkoMTAyNCkuYWRkRXhwb25lbnRpYWxCaW5zKDE2KjEwMjQqMTAyNCoxMDI0LDQqMjQpKTtjb25zdCBDSFJPTUVfUFJPQ0VTU19OQU1FUz10ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLkNIUk9NRV9QUk9DRVNTX05BTUVTO2Z1bmN0aW9uIG1lbW9yeU1ldHJpYyh2YWx1ZXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucz9vcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Q6dW5kZWZpbmVkO2NvbnN0IGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcz10ci5tZXRyaWNzLnNoLnNwbGl0R2xvYmFsRHVtcHNCeUJyb3dzZXJOYW1lKG1vZGVsLHJhbmdlT2ZJbnRlcmVzdCk7YWRkR2VuZXJhbE1lbW9yeUR1bXBWYWx1ZXMoYnJvd3Nlck5hbWVUb0dsb2JhbER1bXBzLHZhbHVlcyk7YWRkRGV0YWlsZWRNZW1vcnlEdW1wVmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx2YWx1ZXMpO2FkZE1lbW9yeUR1bXBDb3VudFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdmFsdWVzKTt9CmNvbnN0IFVTRVJfRlJJRU5ETFlfQlJPV1NFUl9OQU1FUz17J2Nocm9tZSc6J0Nocm9tZScsJ3dlYnZpZXcnOidXZWJWaWV3JywndW5rbm93bl9icm93c2VyJzonYW4gdW5rbm93biBicm93c2VyJ307ZnVuY3Rpb24gY29udmVydEJyb3dzZXJOYW1lVG9Vc2VyRnJpZW5kbHlOYW1lKGJyb3dzZXJOYW1lKXtmb3IoY29uc3QgYmFzZU5hbWUgaW4gVVNFUl9GUklFTkRMWV9CUk9XU0VSX05BTUVTKXtpZighYnJvd3Nlck5hbWUuc3RhcnRzV2l0aChiYXNlTmFtZSkpY29udGludWU7Y29uc3QgdXNlckZyaWVuZGx5QmFzZU5hbWU9VVNFUl9GUklFTkRMWV9CUk9XU0VSX05BTUVTW2Jhc2VOYW1lXTtjb25zdCBzdWZmaXg9YnJvd3Nlck5hbWUuc3Vic3RyaW5nKGJhc2VOYW1lLmxlbmd0aCk7aWYoc3VmZml4Lmxlbmd0aD09PTApe3JldHVybiB1c2VyRnJpZW5kbHlCYXNlTmFtZTt9ZWxzZSBpZigvXlxkKyQvLnRlc3Qoc3VmZml4KSl7cmV0dXJuIHVzZXJGcmllbmRseUJhc2VOYW1lKycoJytzdWZmaXgrJyknO319CnJldHVybidcJycrYnJvd3Nlck5hbWUrJ1wnIGJyb3dzZXInO30KZnVuY3Rpb24gY29udmVydFByb2Nlc3NOYW1lVG9Vc2VyRnJpZW5kbHlOYW1lKHByb2Nlc3NOYW1lLG9wdF9yZXF1aXJlUGx1cmFsKXtzd2l0Y2gocHJvY2Vzc05hbWUpe2Nhc2UgQ0hST01FX1BST0NFU1NfTkFNRVMuQlJPV1NFUjpyZXR1cm4gb3B0X3JlcXVpcmVQbHVyYWw/J2Jyb3dzZXIgcHJvY2Vzc2VzJzondGhlIGJyb3dzZXIgcHJvY2Vzcyc7Y2FzZSBDSFJPTUVfUFJPQ0VTU19OQU1FUy5SRU5ERVJFUjpyZXR1cm4ncmVuZGVyZXIgcHJvY2Vzc2VzJztjYXNlIENIUk9NRV9QUk9DRVNTX05BTUVTLkdQVTpyZXR1cm4gb3B0X3JlcXVpcmVQbHVyYWw/J0dQVSBwcm9jZXNzZXMnOid0aGUgR1BVIHByb2Nlc3MnO2Nhc2UgQ0hST01FX1BST0NFU1NfTkFNRVMuUFBBUEk6cmV0dXJuIG9wdF9yZXF1aXJlUGx1cmFsPydQUEFQSSBwcm9jZXNzZXMnOid0aGUgUFBBUEkgcHJvY2Vzcyc7Y2FzZSBDSFJPTUVfUFJPQ0VTU19OQU1FUy5BTEw6cmV0dXJuJ2FsbCBwcm9jZXNzZXMnO2Nhc2UgQ0hST01FX1BST0NFU1NfTkFNRVMuVU5LTk9XTjpyZXR1cm4ndW5rbm93biBwcm9jZXNzZXMnO2RlZmF1bHQ6cmV0dXJuJ1wnJytwcm9jZXNzTmFtZSsnXCcgcHJvY2Vzc2VzJzt9fQpmdW5jdGlvbiBhZGRHZW5lcmFsTWVtb3J5RHVtcFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsdmFsdWVzKXthZGRNZW1vcnlEdW1wVmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyxnbWQ9PnRydWUsZnVuY3Rpb24ocHJvY2Vzc0R1bXAsYWRkUHJvY2Vzc1NjYWxhcil7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidwcm9jZXNzX2NvdW50Jyxwcm9wZXJ0eTpQUk9DRVNTX0NPVU5ULHZhbHVlOjF9KTtpZihwcm9jZXNzRHVtcC50b3RhbHMhPT11bmRlZmluZWQpe2FkZFByb2Nlc3NTY2FsYXIoe3NvdXJjZToncmVwb3J0ZWRfYnlfb3MnLHByb3BlcnR5OlJFU0lERU5UX1NJWkUsY29tcG9uZW50Olsnc3lzdGVtX21lbW9yeSddLHZhbHVlOnByb2Nlc3NEdW1wLnRvdGFscy5yZXNpZGVudEJ5dGVzfSk7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9vcycscHJvcGVydHk6UEVBS19SRVNJREVOVF9TSVpFLGNvbXBvbmVudDpbJ3N5c3RlbV9tZW1vcnknXSx2YWx1ZTpwcm9jZXNzRHVtcC50b3RhbHMucGVha1Jlc2lkZW50Qnl0ZXN9KTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxwcm9wZXJ0eTpQUklWQVRFX0ZPT1RQUklOVF9TSVpFLGNvbXBvbmVudDpbJ3N5c3RlbV9tZW1vcnknXSx2YWx1ZTpwcm9jZXNzRHVtcC50b3RhbHMucHJpdmF0ZUZvb3RwcmludEJ5dGVzLH0pO30KaWYocHJvY2Vzc0R1bXAubWVtb3J5QWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO3Byb2Nlc3NEdW1wLm1lbW9yeUFsbG9jYXRvckR1bXBzLmZvckVhY2goZnVuY3Rpb24ocm9vdEFsbG9jYXRvckR1bXApe0NIUk9NRV9WQUxVRV9QUk9QRVJUSUVTLmZvckVhY2goZnVuY3Rpb24ocHJvcGVydHkpe2FkZFByb2Nlc3NTY2FsYXIoe3NvdXJjZToncmVwb3J0ZWRfYnlfY2hyb21lJyxjb21wb25lbnQ6W3Jvb3RBbGxvY2F0b3JEdW1wLm5hbWVdLHByb3BlcnR5LHZhbHVlOnJvb3RBbGxvY2F0b3JEdW1wLm51bWVyaWNzW3Byb3BlcnR5Lm5hbWVdfSk7fSk7aWYocm9vdEFsbG9jYXRvckR1bXAubnVtZXJpY3MuYWxsb2NhdGVkX29iamVjdHNfc2l6ZT09PXVuZGVmaW5lZCl7Y29uc3QgYWxsb2NhdGVkT2JqZWN0c0R1bXA9cm9vdEFsbG9jYXRvckR1bXAuZ2V0RGVzY2VuZGFudER1bXBCeUZ1bGxOYW1lKCdhbGxvY2F0ZWRfb2JqZWN0cycpO2lmKGFsbG9jYXRlZE9iamVjdHNEdW1wIT09dW5kZWZpbmVkKXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50Oltyb290QWxsb2NhdG9yRHVtcC5uYW1lXSxwcm9wZXJ0eTpBTExPQ0FURURfT0JKRUNUU19TSVpFLHZhbHVlOmFsbG9jYXRlZE9iamVjdHNEdW1wLm51bWVyaWNzLnNpemV9KTt9fX0pO2FkZFRvcEhlYXBEdW1wQ2F0ZWdvcnlWYWx1ZShwcm9jZXNzRHVtcCxhZGRQcm9jZXNzU2NhbGFyKTthZGRWOE1lbW9yeUR1bXBWYWx1ZXMocHJvY2Vzc0R1bXAsYWRkUHJvY2Vzc1NjYWxhcik7fSxmdW5jdGlvbihjb21wb25lbnRUcmVlKXtjb25zdCB0cmFjaW5nTm9kZT1jb21wb25lbnRUcmVlLmNoaWxkcmVuWzFdLmdldCgndHJhY2luZycpO2lmKHRyYWNpbmdOb2RlPT09dW5kZWZpbmVkKXJldHVybjtmb3IobGV0IGk9MDtpPGNvbXBvbmVudFRyZWUudmFsdWVzLmxlbmd0aDtpKyspe2NvbXBvbmVudFRyZWUudmFsdWVzW2ldLnRvdGFsLT10cmFjaW5nTm9kZS52YWx1ZXNbaV0udG90YWw7fX0sdmFsdWVzKTt9CmZ1bmN0aW9uIGFkZFRvcEhlYXBEdW1wQ2F0ZWdvcnlWYWx1ZShwcm9jZXNzRHVtcCxhZGRQcm9jZXNzU2NhbGFyKXtpZighcHJvY2Vzc0R1bXAuaGVhcER1bXBzKXtyZXR1cm47fQpmb3IoY29uc3QgYWxsb2NhdG9yTmFtZSBpbiBwcm9jZXNzRHVtcC5oZWFwRHVtcHMpe2NvbnN0IGhlYXBEdW1wPXByb2Nlc3NEdW1wLmhlYXBEdW1wc1thbGxvY2F0b3JOYW1lXTtpZihoZWFwRHVtcC5lbnRyaWVzPT09dW5kZWZpbmVkfHxoZWFwRHVtcC5lbnRyaWVzLmxlbmd0aD09PTApe3JldHVybjt9CmNvbnN0IHR5cGVUb1NpemU9e307Zm9yKGxldCBpPTA7aTxoZWFwRHVtcC5lbnRyaWVzLmxlbmd0aDtpKz0xKXtjb25zdCBlbnRyeT1oZWFwRHVtcC5lbnRyaWVzW2ldO2lmKCFlbnRyeS5vYmplY3RUeXBlTmFtZXx8ZW50cnkubGVhZlN0YWNrRnJhbWUpe2NvbnRpbnVlO30KaWYoIXR5cGVUb1NpemVbZW50cnkub2JqZWN0VHlwZU5hbWVdKXt0eXBlVG9TaXplW2VudHJ5Lm9iamVjdFR5cGVOYW1lXT0wO30KdHlwZVRvU2l6ZVtlbnRyeS5vYmplY3RUeXBlTmFtZV0rPWVudHJ5LnNpemU7fQpsZXQgbGFyZ2VzdFZhbHVlPTA7bGV0IGxhcmdlc3RUeXBlPScnO2Zvcihjb25zdCBrZXkgaW4gdHlwZVRvU2l6ZSl7aWYobGFyZ2VzdFZhbHVlPHR5cGVUb1NpemVba2V5XSl7bGFyZ2VzdFZhbHVlPXR5cGVUb1NpemVba2V5XTtsYXJnZXN0VHlwZT1rZXk7fX0KYWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9jaHJvbWUnLGNvbXBvbmVudDpbYWxsb2NhdG9yTmFtZSxsYXJnZXN0VHlwZV0scHJvcGVydHk6SEVBUF9DQVRFR09SWV9TSVpFLHZhbHVlOmxhcmdlc3RWYWx1ZX0pO319CmZ1bmN0aW9uIGFkZFY4TWVtb3J5RHVtcFZhbHVlcyhwcm9jZXNzRHVtcCxhZGRQcm9jZXNzU2NhbGFyKXtjb25zdCB2OER1bXA9cHJvY2Vzc0R1bXAuZ2V0TWVtb3J5QWxsb2NhdG9yRHVtcEJ5RnVsbE5hbWUoJ3Y4Jyk7aWYodjhEdW1wPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBzaGFyZWREdW1wPXY4RHVtcC5nZXREZXNjZW5kYW50RHVtcEJ5RnVsbE5hbWUoJ3NoYXJlZCcpO2lmKHNoYXJlZER1bXAhPT11bmRlZmluZWQpe2FkZFY4Q29tcG9uZW50VmFsdWVzKHNoYXJlZER1bXAsWyd2OCcsJ3NoYXJlZCddLGFkZFByb2Nlc3NTY2FsYXIpO3NoYXJlZER1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihzdWJEdW1wKXthZGRWOENvbXBvbmVudFZhbHVlcyhzdWJEdW1wLFsndjgnLCdzaGFyZWQnLHN1YkR1bXAubmFtZV0sYWRkUHJvY2Vzc1NjYWxhcik7fSk7fQp2OER1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihpc29sYXRlRHVtcCl7Y29uc3QgbWFsbG9jRHVtcD1pc29sYXRlRHVtcC5nZXREZXNjZW5kYW50RHVtcEJ5RnVsbE5hbWUoJ21hbGxvYycpO2lmKG1hbGxvY0R1bXAhPT11bmRlZmluZWQpe2FkZFY4Q29tcG9uZW50VmFsdWVzKG1hbGxvY0R1bXAsWyd2OCcsJ2FsbG9jYXRlZF9ieV9tYWxsb2MnXSxhZGRQcm9jZXNzU2NhbGFyKTt9CmxldCBoZWFwRHVtcD1pc29sYXRlRHVtcC5nZXREZXNjZW5kYW50RHVtcEJ5RnVsbE5hbWUoJ2hlYXAnKTtpZihoZWFwRHVtcD09PXVuZGVmaW5lZCl7aGVhcER1bXA9aXNvbGF0ZUR1bXAuZ2V0RGVzY2VuZGFudER1bXBCeUZ1bGxOYW1lKCdoZWFwX3NwYWNlcycpO30KaWYoaGVhcER1bXAhPT11bmRlZmluZWQpe2FkZFY4Q29tcG9uZW50VmFsdWVzKGhlYXBEdW1wLFsndjgnLCdoZWFwJ10sYWRkUHJvY2Vzc1NjYWxhcik7aGVhcER1bXAuY2hpbGRyZW4uZm9yRWFjaChmdW5jdGlvbihzcGFjZUR1bXApe2lmKHNwYWNlRHVtcC5uYW1lPT09J290aGVyX3NwYWNlcycpcmV0dXJuO2FkZFY4Q29tcG9uZW50VmFsdWVzKHNwYWNlRHVtcCxbJ3Y4JywnaGVhcCcsc3BhY2VEdW1wLm5hbWVdLGFkZFByb2Nlc3NTY2FsYXIpO30pO319KTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50OlsndjgnXSxwcm9wZXJ0eTpDT0RFX0FORF9NRVRBREFUQV9TSVpFLHZhbHVlOnY4RHVtcC5udW1lcmljcy5jb2RlX2FuZF9tZXRhZGF0YV9zaXplfSk7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9jaHJvbWUnLGNvbXBvbmVudDpbJ3Y4J10scHJvcGVydHk6Q09ERV9BTkRfTUVUQURBVEFfU0laRSx2YWx1ZTp2OER1bXAubnVtZXJpY3MuYnl0ZWNvZGVfYW5kX21ldGFkYXRhX3NpemV9KTt9CmZ1bmN0aW9uIGFkZFY4Q29tcG9uZW50VmFsdWVzKGNvbXBvbmVudER1bXAsY29tcG9uZW50UGF0aCxhZGRQcm9jZXNzU2NhbGFyKXtDSFJPTUVfVkFMVUVfUFJPUEVSVElFUy5mb3JFYWNoKGZ1bmN0aW9uKHByb3BlcnR5KXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X2Nocm9tZScsY29tcG9uZW50OmNvbXBvbmVudFBhdGgscHJvcGVydHksdmFsdWU6Y29tcG9uZW50RHVtcC5udW1lcmljc1twcm9wZXJ0eS5uYW1lXX0pO30pO30KY29uc3QgUFJPQ0VTU19DT1VOVD17dW5pdDpjb3VudF9zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtpZihjb21wb25lbnRQYXRoLmxlbmd0aD4wKXt0aHJvdyBuZXcgRXJyb3IoJ1VuZXhwZWN0ZWQgcHJvY2VzcyBjb3VudCBub24tZW1wdHkgY29tcG9uZW50IHBhdGg6ICcrCmNvbXBvbmVudFBhdGguam9pbignOicpKTt9CnJldHVybid0b3RhbCBudW1iZXIgb2YgJytjb252ZXJ0UHJvY2Vzc05hbWVUb1VzZXJGcmllbmRseU5hbWUocHJvY2Vzc05hbWUsdHJ1ZSk7fX07Y29uc3QgRUZGRUNUSVZFX1NJWkU9e25hbWU6J2VmZmVjdGl2ZV9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZENocm9tZVZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx7dXNlckZyaWVuZGx5UHJvcGVydHlOYW1lOidlZmZlY3RpdmUgc2l6ZScsY29tcG9uZW50UHJlcG9zaXRpb246J29mJ30pO319O2NvbnN0IEFMTE9DQVRFRF9PQkpFQ1RTX1NJWkU9e25hbWU6J2FsbG9jYXRlZF9vYmplY3RzX3NpemUnLHVuaXQ6c2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGJ1aWxkRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSl7cmV0dXJuIGJ1aWxkQ2hyb21lVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLHt1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWU6J3NpemUgb2YgYWxsIG9iamVjdHMgYWxsb2NhdGVkJyx0b3RhbFVzZXJGcmllbmRseVByb3BlcnR5TmFtZTonc2l6ZSBvZiBhbGwgYWxsb2NhdGVkIG9iamVjdHMnLGNvbXBvbmVudFByZXBvc2l0aW9uOidieSd9KTt9fTtjb25zdCBTSElNX0FMTE9DQVRFRF9PQkpFQ1RTX1NJWkU9e25hbWU6J3NoaW1fYWxsb2NhdGVkX29iamVjdHNfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUse3VzZXJGcmllbmRseVByb3BlcnR5TmFtZTonc2l6ZSBvZiBhbGwgb2JqZWN0cyBhbGxvY2F0ZWQgdGhyb3VnaCBzaGltJyx0b3RhbFVzZXJGcmllbmRseVByb3BlcnR5TmFtZTonc2l6ZSBvZiBhbGwgYWxsb2NhdGVkIG9iamVjdHMgdGhyb3VnaCBzaGltJyxjb21wb25lbnRQcmVwb3NpdGlvbjonYnknfSk7fX07Y29uc3QgTE9DS0VEX1NJWkU9e25hbWU6J2xvY2tlZF9zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZENocm9tZVZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx7dXNlckZyaWVuZGx5UHJvcGVydHlOYW1lOidsb2NrZWQgKHBpbm5lZCkgc2l6ZScsY29tcG9uZW50UHJlcG9zaXRpb246J29mJ30pO319O2NvbnN0IFBFQUtfU0laRT17bmFtZToncGVha19zaXplJyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZENocm9tZVZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSx7dXNlckZyaWVuZGx5UHJvcGVydHlOYW1lOidwZWFrIHNpemUnLGNvbXBvbmVudFByZXBvc2l0aW9uOidvZid9KTt9fTtjb25zdCBIRUFQX0NBVEVHT1JZX1NJWkU9e25hbWU6J2hlYXBfY2F0ZWdvcnlfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUse3VzZXJGcmllbmRseVByb3BlcnR5TmFtZTonaGVhcCBwcm9maWxlciBjYXRlZ29yeSBzaXplJyxjb21wb25lbnRQcmVwb3NpdGlvbjonZm9yJ30pO319O2NvbnN0IENPREVfQU5EX01FVEFEQVRBX1NJWkU9e25hbWU6J2NvZGVfYW5kX21ldGFkYXRhX3NpemUnLHVuaXQ6c2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLGJ1aWxkRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSl7cmV0dXJuIGJ1aWxkQ2hyb21lVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLHt1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWVQcmVmaXg6J3NpemUgb2YnLHVzZXJGcmllbmRseVByb3BlcnR5TmFtZTonY29kZSBhbmQgbWV0YWRhdGEnfSk7fX07Y29uc3QgQ0hST01FX1ZBTFVFX1BST1BFUlRJRVM9W0VGRkVDVElWRV9TSVpFLEFMTE9DQVRFRF9PQkpFQ1RTX1NJWkUsU0hJTV9BTExPQ0FURURfT0JKRUNUU19TSVpFLExPQ0tFRF9TSVpFLFBFQUtfU0laRV07ZnVuY3Rpb24gYnVpbGRDaHJvbWVWYWx1ZURlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUsZm9ybWF0U3BlYyl7Y29uc3QgbmFtZVBhcnRzPVtdO2lmKGNvbXBvbmVudFBhdGgubGVuZ3RoPT09MCl7bmFtZVBhcnRzLnB1c2goJ3RvdGFsJyk7aWYoZm9ybWF0U3BlYy50b3RhbFVzZXJGcmllbmRseVByb3BlcnR5TmFtZSl7bmFtZVBhcnRzLnB1c2goZm9ybWF0U3BlYy50b3RhbFVzZXJGcmllbmRseVByb3BlcnR5TmFtZSk7fWVsc2V7aWYoZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWVQcmVmaXgpe25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KTt9Cm5hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lKTt9Cm5hbWVQYXJ0cy5wdXNoKCdyZXBvcnRlZCBieSBDaHJvbWUgZm9yJyk7fWVsc2V7aWYoZm9ybWF0U3BlYy5jb21wb25lbnRQcmVwb3NpdGlvbj09PXVuZGVmaW5lZCl7aWYoZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWVQcmVmaXgpe25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KTt9Cm5hbWVQYXJ0cy5wdXNoKGNvbXBvbmVudFBhdGguam9pbignOicpKTtuYW1lUGFydHMucHVzaChmb3JtYXRTcGVjLnVzZXJGcmllbmRseVByb3BlcnR5TmFtZSk7fWVsc2V7aWYoZm9ybWF0U3BlYy51c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWVQcmVmaXgpe25hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lUHJlZml4KTt9Cm5hbWVQYXJ0cy5wdXNoKGZvcm1hdFNwZWMudXNlckZyaWVuZGx5UHJvcGVydHlOYW1lKTtuYW1lUGFydHMucHVzaChmb3JtYXRTcGVjLmNvbXBvbmVudFByZXBvc2l0aW9uKTtpZihjb21wb25lbnRQYXRoW2NvbXBvbmVudFBhdGgubGVuZ3RoLTFdPT09J2FsbG9jYXRlZF9ieV9tYWxsb2MnKXtuYW1lUGFydHMucHVzaCgnb2JqZWN0cyBhbGxvY2F0ZWQgYnkgbWFsbG9jIGZvcicpO25hbWVQYXJ0cy5wdXNoKGNvbXBvbmVudFBhdGguc2xpY2UoMCxjb21wb25lbnRQYXRoLmxlbmd0aC0xKS5qb2luKCc6JykpO31lbHNle25hbWVQYXJ0cy5wdXNoKGNvbXBvbmVudFBhdGguam9pbignOicpKTt9fQpuYW1lUGFydHMucHVzaCgnaW4nKTt9Cm5hbWVQYXJ0cy5wdXNoKGNvbnZlcnRQcm9jZXNzTmFtZVRvVXNlckZyaWVuZGx5TmFtZShwcm9jZXNzTmFtZSkpO3JldHVybiBuYW1lUGFydHMuam9pbignICcpO30KY29uc3QgUkVTSURFTlRfU0laRT17bmFtZToncmVzaWRlbnRfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwncmVzaWRlbnQgc2V0IHNpemUgKFJTUyknKTt9fTtjb25zdCBQRUFLX1JFU0lERU5UX1NJWkU9e25hbWU6J3BlYWtfcmVzaWRlbnRfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwncGVhayByZXNpZGVudCBzZXQgc2l6ZScpO319O2NvbnN0IFBST1BPUlRJT05BTF9SRVNJREVOVF9TSVpFPXtuYW1lOidwcm9wb3J0aW9uYWxfcmVzaWRlbnRfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwncHJvcG9ydGlvbmFsIHJlc2lkZW50IHNpemUgKFBTUyknKTt9fTtjb25zdCBQUklWQVRFX0RJUlRZX1NJWkU9e25hbWU6J3ByaXZhdGVfZGlydHlfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwncHJpdmF0ZSBkaXJ0eSBzaXplJyk7fX07Y29uc3QgUFJJVkFURV9GT09UUFJJTlRfU0laRT17bmFtZToncHJpdmF0ZV9mb290cHJpbnRfc2l6ZScsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwncHJpdmF0ZSBmb290cHJpbnQgc2l6ZScpO319O2NvbnN0IEpBVkFfQkFTRV9DTEVBTl9SRVNJREVOVD17bmFtZTonamF2YV9iYXNlX2NsZWFuX3Jlc2lkZW50Jyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCdqYXZhIGJhc2Ugb2RleCBhbmQgdmRleCB0b3RhbCBjbGVhbiByZXNpZGVudCBzaXplJyk7fX07Y29uc3QgSkFWQV9CQVNFX1BTUz17bmFtZTonamF2YV9iYXNlX3BzcycsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwnamF2YSBiYXNlIG9kZXggYW5kIHZkZXggcHJvcG9ydGlvbmFsIHJlc2lkZW50IHNpemUnKTt9fTtjb25zdCBOQVRJVkVfTElCUkFSWV9QUklWQVRFX0NMRUFOX1JFU0lERU5UPXtuYW1lOiduYXRpdmVfbGlicmFyeV9wcml2YXRlX2NsZWFuX3Jlc2lkZW50Jyx1bml0OnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixidWlsZERlc2NyaXB0aW9uUHJlZml4KGNvbXBvbmVudFBhdGgscHJvY2Vzc05hbWUpe3JldHVybiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLCduYXRpdmUgbGlicmFyeSBwcml2YXRlIGNsZWFuIHJlc2lkZW50IHNpemUnKTt9fTtjb25zdCBOQVRJVkVfTElCUkFSWV9TSEFSRURfQ0xFQU5fUkVTSURFTlQ9e25hbWU6J25hdGl2ZV9saWJyYXJ5X3NoYXJlZF9jbGVhbl9yZXNpZGVudCcsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwnbmF0aXZlIGxpYnJhcnkgc2hhcmVkIGNsZWFuIHJlc2lkZW50IHNpemUnKTt9fTtjb25zdCBOQVRJVkVfTElCUkFSWV9QUk9QT1JUSU9OQUxfUkVTSURFTlQ9e25hbWU6J25hdGl2ZV9saWJyYXJ5X3Byb3BvcnRpb25hbF9yZXNpZGVudCcsdW5pdDpzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKXtyZXR1cm4gYnVpbGRPc1ZhbHVlRGVzY3JpcHRpb25QcmVmaXgoY29tcG9uZW50UGF0aCxwcm9jZXNzTmFtZSwnbmF0aXZlIGxpYnJhcnkgcHJvcG9ydGlvbmFsIHJlc2lkZW50IHNpemUnKTt9fTtmdW5jdGlvbiBidWlsZE9zVmFsdWVEZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lLHVzZXJGcmllbmRseVByb3BlcnR5TmFtZSl7aWYoY29tcG9uZW50UGF0aC5sZW5ndGg+Mil7dGhyb3cgbmV3IEVycm9yKCdPUyB2YWx1ZSBjb21wb25lbnQgcGF0aCBmb3IgXCcnKwp1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUrJ1wnIHRvbyBsb25nOiAnK2NvbXBvbmVudFBhdGguam9pbignOicpKTt9CmNvbnN0IG5hbWVQYXJ0cz1bXTtpZihjb21wb25lbnRQYXRoLmxlbmd0aDwyKXtuYW1lUGFydHMucHVzaCgndG90YWwnKTt9Cm5hbWVQYXJ0cy5wdXNoKHVzZXJGcmllbmRseVByb3BlcnR5TmFtZSk7aWYoY29tcG9uZW50UGF0aC5sZW5ndGg+MCl7c3dpdGNoKGNvbXBvbmVudFBhdGhbMF0pe2Nhc2Unc3lzdGVtX21lbW9yeSc6aWYoY29tcG9uZW50UGF0aC5sZW5ndGg+MSl7Y29uc3QgdXNlckZyaWVuZGx5Q29tcG9uZW50TmFtZT1TWVNURU1fVkFMVUVfQ09NUE9ORU5UU1tjb21wb25lbnRQYXRoWzFdXS51c2VyRnJpZW5kbHlOYW1lO2lmKHVzZXJGcmllbmRseUNvbXBvbmVudE5hbWU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignU3lzdGVtIHZhbHVlIHN1Yi1jb21wb25lbnQgZm9yIFwnJysKdXNlckZyaWVuZGx5UHJvcGVydHlOYW1lKydcJyB1bmtub3duOiAnKwpjb21wb25lbnRQYXRoLmpvaW4oJzonKSk7fQpuYW1lUGFydHMucHVzaCgnb2YnLHVzZXJGcmllbmRseUNvbXBvbmVudE5hbWUsJ2luJyk7fWVsc2V7bmFtZVBhcnRzLnB1c2goJ29mIHN5c3RlbSBtZW1vcnkgKFJBTSkgdXNlZCBieScpO30KYnJlYWs7Y2FzZSdncHVfbWVtb3J5JzppZihjb21wb25lbnRQYXRoLmxlbmd0aD4xKXtuYW1lUGFydHMucHVzaCgnb2YgdGhlJyxjb21wb25lbnRQYXRoWzFdKTtuYW1lUGFydHMucHVzaCgnQW5kcm9pZCBtZW10cmFjayBjb21wb25lbnQgaW4nKTt9ZWxzZXtuYW1lUGFydHMucHVzaCgnb2YgR1BVIG1lbW9yeSAoQW5kcm9pZCBtZW10cmFjaykgdXNlZCBieScpO30KYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ09TIHZhbHVlIGNvbXBvbmVudCBmb3IgXCcnKwp1c2VyRnJpZW5kbHlQcm9wZXJ0eU5hbWUrJ1wnIHVua25vd246ICcrCmNvbXBvbmVudFBhdGguam9pbignOicpKTt9fWVsc2V7bmFtZVBhcnRzLnB1c2goJ3JlcG9ydGVkIGJ5IHRoZSBPUyBmb3InKTt9Cm5hbWVQYXJ0cy5wdXNoKGNvbnZlcnRQcm9jZXNzTmFtZVRvVXNlckZyaWVuZGx5TmFtZShwcm9jZXNzTmFtZSkpO3JldHVybiBuYW1lUGFydHMuam9pbignICcpO30KZnVuY3Rpb24gYWRkRGV0YWlsZWRNZW1vcnlEdW1wVmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx2YWx1ZXMpe2FkZE1lbW9yeUR1bXBWYWx1ZXMoYnJvd3Nlck5hbWVUb0dsb2JhbER1bXBzLGc9PmcubGV2ZWxPZkRldGFpbD09PURFVEFJTEVELGZ1bmN0aW9uKHByb2Nlc3NEdW1wLGFkZFByb2Nlc3NTY2FsYXIpe2Zvcihjb25zdFtjb21wb25lbnROYW1lLGNvbXBvbmVudFNwZWNdb2YKT2JqZWN0LmVudHJpZXMoU1lTVEVNX1ZBTFVFX0NPTVBPTkVOVFMpKXtjb25zdCBub2RlPWdldERlc2NlbmRhbnRWbVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShwcm9jZXNzRHVtcC52bVJlZ2lvbnMsY29tcG9uZW50U3BlYy5jbGFzc2lmaWNhdGlvblBhdGgpO2NvbnN0IGNvbXBvbmVudFBhdGg9WydzeXN0ZW1fbWVtb3J5J107aWYoY29tcG9uZW50TmFtZSljb21wb25lbnRQYXRoLnB1c2goY29tcG9uZW50TmFtZSk7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9vcycsY29tcG9uZW50OmNvbXBvbmVudFBhdGgscHJvcGVydHk6UFJPUE9SVElPTkFMX1JFU0lERU5UX1NJWkUsdmFsdWU6bm9kZT09PXVuZGVmaW5lZD8wOihub2RlLmJ5dGVTdGF0cy5wcm9wb3J0aW9uYWxSZXNpZGVudHx8MCl9KTthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6Y29tcG9uZW50UGF0aCxwcm9wZXJ0eTpQUklWQVRFX0RJUlRZX1NJWkUsdmFsdWU6bm9kZT09PXVuZGVmaW5lZD8wOihub2RlLmJ5dGVTdGF0cy5wcml2YXRlRGlydHlSZXNpZGVudHx8MCl9KTtpZihub2RlKXtpZihub2RlLmJ5dGVTdGF0cy5qYXZhQmFzZVBzcyl7YWRkUHJvY2Vzc1NjYWxhcih7c291cmNlOidyZXBvcnRlZF9ieV9vcycsY29tcG9uZW50OmNvbXBvbmVudFBhdGgscHJvcGVydHk6SkFWQV9CQVNFX1BTUyx2YWx1ZTpub2RlLmJ5dGVTdGF0cy5qYXZhQmFzZVBzc30pO30KaWYobm9kZS5ieXRlU3RhdHMuamF2YUJhc2VDbGVhblJlc2lkZW50KXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6Y29tcG9uZW50UGF0aCxwcm9wZXJ0eTpKQVZBX0JBU0VfQ0xFQU5fUkVTSURFTlQsdmFsdWU6bm9kZS5ieXRlU3RhdHMuamF2YUJhc2VDbGVhblJlc2lkZW50fSk7fX0KaWYobm9kZSl7aWYobm9kZS5ieXRlU3RhdHMubmF0aXZlTGlicmFyeVByaXZhdGVDbGVhblJlc2lkZW50KXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6Y29tcG9uZW50UGF0aCxwcm9wZXJ0eTpOQVRJVkVfTElCUkFSWV9QUklWQVRFX0NMRUFOX1JFU0lERU5ULHZhbHVlOm5vZGUuYnl0ZVN0YXRzLm5hdGl2ZUxpYnJhcnlQcml2YXRlQ2xlYW5SZXNpZGVudH0pO30KaWYobm9kZS5ieXRlU3RhdHMubmF0aXZlTGlicmFyeVNoYXJlZENsZWFuUmVzaWRlbnQpe2FkZFByb2Nlc3NTY2FsYXIoe3NvdXJjZToncmVwb3J0ZWRfYnlfb3MnLGNvbXBvbmVudDpjb21wb25lbnRQYXRoLHByb3BlcnR5Ok5BVElWRV9MSUJSQVJZX1NIQVJFRF9DTEVBTl9SRVNJREVOVCx2YWx1ZTpub2RlLmJ5dGVTdGF0cy5uYXRpdmVMaWJyYXJ5U2hhcmVkQ2xlYW5SZXNpZGVudH0pO30KaWYobm9kZS5ieXRlU3RhdHMubmF0aXZlTGlicmFyeVByb3BvcnRpb25hbFJlc2lkZW50KXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6Y29tcG9uZW50UGF0aCxwcm9wZXJ0eTpOQVRJVkVfTElCUkFSWV9QUk9QT1JUSU9OQUxfUkVTSURFTlQsdmFsdWU6bm9kZS5ieXRlU3RhdHMubmF0aXZlTGlicmFyeVByb3BvcnRpb25hbFJlc2lkZW50fSk7fX19CmNvbnN0IG1lbXRyYWNrRHVtcD1wcm9jZXNzRHVtcC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSgnZ3B1L2FuZHJvaWRfbWVtdHJhY2snKTtpZihtZW10cmFja0R1bXAhPT11bmRlZmluZWQpe21lbXRyYWNrRHVtcC5jaGlsZHJlbi5mb3JFYWNoKGZ1bmN0aW9uKG1lbXRyYWNrQ2hpbGREdW1wKXthZGRQcm9jZXNzU2NhbGFyKHtzb3VyY2U6J3JlcG9ydGVkX2J5X29zJyxjb21wb25lbnQ6WydncHVfbWVtb3J5JyxtZW10cmFja0NoaWxkRHVtcC5uYW1lXSxwcm9wZXJ0eTpQUk9QT1JUSU9OQUxfUkVTSURFTlRfU0laRSx2YWx1ZTptZW10cmFja0NoaWxkRHVtcC5udW1lcmljcy5tZW10cmFja19wc3N9KTt9KTt9fSxmdW5jdGlvbihjb21wb25lbnRUcmVlKXt9LHZhbHVlcyk7fQpjb25zdCBTWVNURU1fVkFMVUVfQ09NUE9ORU5UUz17Jyc6e2NsYXNzaWZpY2F0aW9uUGF0aDpbXSx9LCdqYXZhX2hlYXAnOntjbGFzc2lmaWNhdGlvblBhdGg6WydBbmRyb2lkJywnSmF2YSBydW50aW1lJywnU3BhY2VzJ10sdXNlckZyaWVuZGx5TmFtZTondGhlIEphdmEgaGVhcCd9LCdhc2htZW0nOntjbGFzc2lmaWNhdGlvblBhdGg6WydBbmRyb2lkJywnQXNobWVtJ10sdXNlckZyaWVuZGx5TmFtZTonYXNobWVtJ30sJ25hdGl2ZV9oZWFwJzp7Y2xhc3NpZmljYXRpb25QYXRoOlsnTmF0aXZlIGhlYXAnXSx1c2VyRnJpZW5kbHlOYW1lOid0aGUgbmF0aXZlIGhlYXAnfSwnc3RhY2snOntjbGFzc2lmaWNhdGlvblBhdGg6WydTdGFjayddLHVzZXJGcmllbmRseU5hbWU6J3RoZSB0aHJlYWQgc3RhY2tzJ319O2Z1bmN0aW9uIGdldERlc2NlbmRhbnRWbVJlZ2lvbkNsYXNzaWZpY2F0aW9uTm9kZShub2RlLHBhdGgpe2ZvcihsZXQgaT0wO2k8cGF0aC5sZW5ndGg7aSsrKXtpZihub2RlPT09dW5kZWZpbmVkKWJyZWFrO25vZGU9bm9kZS5jaGlsZHJlbi5maW5kKGM9PmMudGl0bGU9PT1wYXRoW2ldKTt9CnJldHVybiBub2RlO30KZnVuY3Rpb24gYWRkTWVtb3J5RHVtcENvdW50VmFsdWVzKGJyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcyx2YWx1ZXMpe2Jyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGdsb2JhbER1bXBzLGJyb3dzZXJOYW1lKXtsZXQgdG90YWxEdW1wQ291bnQ9MDtjb25zdCBsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50PXt9O0xFVkVMX09GX0RFVEFJTF9OQU1FUy5mb3JFYWNoKGZ1bmN0aW9uKGxldmVsT2ZEZXRhaWxOYW1lKXtsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50W2xldmVsT2ZEZXRhaWxOYW1lXT0wO30pO2xldmVsT2ZEZXRhaWxOYW1lVG9EdW1wQ291bnRbSEVBUF9QUk9GSUxFUl9ERVRBSUxfTkFNRV09MDtnbG9iYWxEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGdsb2JhbER1bXApe3RvdGFsRHVtcENvdW50Kys7Y29uc3QgbGV2ZWxPZkRldGFpbE5hbWU9TEVWRUxfT0ZfREVUQUlMX05BTUVTLmdldChnbG9iYWxEdW1wLmxldmVsT2ZEZXRhaWwpO2lmKGxldmVsT2ZEZXRhaWxOYW1lPT09dW5kZWZpbmVkKXtyZXR1cm47fQpsZXZlbE9mRGV0YWlsTmFtZVRvRHVtcENvdW50W2xldmVsT2ZEZXRhaWxOYW1lXSsrO2lmKGdsb2JhbER1bXAubGV2ZWxPZkRldGFpbD09PURFVEFJTEVEKXtpZihkZXRlY3RIZWFwUHJvZmlsZXJJbk1lbW9yeUR1bXAoZ2xvYmFsRHVtcCkpe2xldmVsT2ZEZXRhaWxOYW1lVG9EdW1wQ291bnRbSEVBUF9QUk9GSUxFUl9ERVRBSUxfTkFNRV0rKzt9fX0pO3JlcG9ydE1lbW9yeUR1bXBDb3VudEFzVmFsdWUoYnJvd3Nlck5hbWUsdW5kZWZpbmVkLHRvdGFsRHVtcENvdW50LHZhbHVlcyk7Zm9yKGNvbnN0W2xldmVsT2ZEZXRhaWxOYW1lLGxldmVsT2ZEZXRhaWxEdW1wQ291bnRdb2YKT2JqZWN0LmVudHJpZXMobGV2ZWxPZkRldGFpbE5hbWVUb0R1bXBDb3VudCkpe3JlcG9ydE1lbW9yeUR1bXBDb3VudEFzVmFsdWUoYnJvd3Nlck5hbWUsbGV2ZWxPZkRldGFpbE5hbWUsbGV2ZWxPZkRldGFpbER1bXBDb3VudCx2YWx1ZXMpO319KTt9CmZ1bmN0aW9uIGRldGVjdEhlYXBQcm9maWxlckluTWVtb3J5RHVtcChnbG9iYWxEdW1wKXtmb3IoY29uc3QgcHJvY2Vzc0R1bXAgb2YgT2JqZWN0LnZhbHVlcyhnbG9iYWxEdW1wLnByb2Nlc3NNZW1vcnlEdW1wcykpe2lmKHByb2Nlc3NEdW1wLmhlYXBEdW1wcyYmcHJvY2Vzc0R1bXAuaGVhcER1bXBzLm1hbGxvYyl7Y29uc3QgbWFsbG9jRHVtcD1wcm9jZXNzRHVtcC5oZWFwRHVtcHMubWFsbG9jO2lmKG1hbGxvY0R1bXAuZW50cmllcyYmbWFsbG9jRHVtcC5lbnRyaWVzLmxlbmd0aD4wKXtyZXR1cm4gdHJ1ZTt9fX0KcmV0dXJuIGZhbHNlO30KZnVuY3Rpb24gcmVwb3J0TWVtb3J5RHVtcENvdW50QXNWYWx1ZShicm93c2VyTmFtZSxsZXZlbE9mRGV0YWlsTmFtZSxsZXZlbE9mRGV0YWlsRHVtcENvdW50LHZhbHVlcyl7Y29uc3QgbmFtZVBhcnRzPVsnbWVtb3J5Jyxicm93c2VyTmFtZSwnYWxsX3Byb2Nlc3NlcycsJ2R1bXBfY291bnQnXTtpZihsZXZlbE9mRGV0YWlsTmFtZSE9PXVuZGVmaW5lZCl7bmFtZVBhcnRzLnB1c2gobGV2ZWxPZkRldGFpbE5hbWUpO30KY29uc3QgbmFtZT1uYW1lUGFydHMuam9pbignOicpO2NvbnN0IGhpc3RvZ3JhbT1uZXcgdHIudi5IaXN0b2dyYW0obmFtZSxjb3VudF9zbWFsbGVySXNCZXR0ZXIsQk9VTkRBUklFU19GT1JfVU5JVF9NQVAuZ2V0KGNvdW50X3NtYWxsZXJJc0JldHRlcikpO2hpc3RvZ3JhbS5hZGRTYW1wbGUobGV2ZWxPZkRldGFpbER1bXBDb3VudCk7Y29uc3QgdXNlckZyaWVuZGx5TGV2ZWxPZkRldGFpbD0obGV2ZWxPZkRldGFpbE5hbWV8fCdhbGwnKS5yZXBsYWNlKCdfJywnICcpO2hpc3RvZ3JhbS5kZXNjcmlwdGlvbj1bJ3RvdGFsIG51bWJlciBvZicsdXNlckZyaWVuZGx5TGV2ZWxPZkRldGFpbCwnbWVtb3J5IGR1bXBzIGFkZGVkIGJ5Jyxjb252ZXJ0QnJvd3Nlck5hbWVUb1VzZXJGcmllbmRseU5hbWUoYnJvd3Nlck5hbWUpLCd0byB0aGUgdHJhY2UnXS5qb2luKCcgJyk7dmFsdWVzLmFkZEhpc3RvZ3JhbShoaXN0b2dyYW0pO30KZnVuY3Rpb24gYWRkTWVtb3J5RHVtcFZhbHVlcyhicm93c2VyTmFtZVRvR2xvYmFsRHVtcHMsY3VzdG9tR2xvYmFsRHVtcEZpbHRlcixjdXN0b21Qcm9jZXNzRHVtcFZhbHVlRXh0cmFjdG9yLGN1c3RvbUNvbXBvbmVudFRyZWVNb2RpZmllcix2YWx1ZXMpe2Jyb3dzZXJOYW1lVG9HbG9iYWxEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGdsb2JhbER1bXBzLGJyb3dzZXJOYW1lKXtjb25zdCBmaWx0ZXJlZEdsb2JhbER1bXBzPWdsb2JhbER1bXBzLmZpbHRlcihjdXN0b21HbG9iYWxEdW1wRmlsdGVyKTtjb25zdCBzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyPWV4dHJhY3REYXRhRnJvbUdsb2JhbER1bXBzKGZpbHRlcmVkR2xvYmFsRHVtcHMsY3VzdG9tUHJvY2Vzc0R1bXBWYWx1ZUV4dHJhY3Rvcik7cmVwb3J0RGF0YUFzVmFsdWVzKHNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIsYnJvd3Nlck5hbWUsY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyLHZhbHVlcyk7fSk7fQpmdW5jdGlvbiBleHRyYWN0RGF0YUZyb21HbG9iYWxEdW1wcyhnbG9iYWxEdW1wcyxjdXN0b21Qcm9jZXNzRHVtcFZhbHVlRXh0cmFjdG9yKXtjb25zdCBzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyPW5ldyBNYXAoKTtjb25zdCBkdW1wQ291bnQ9Z2xvYmFsRHVtcHMubGVuZ3RoO2dsb2JhbER1bXBzLmZvckVhY2goZnVuY3Rpb24oZ2xvYmFsRHVtcCxkdW1wSW5kZXgpe2Zvcihjb25zdCBwcm9jZXNzRHVtcCBvZiBPYmplY3QudmFsdWVzKGdsb2JhbER1bXAucHJvY2Vzc01lbW9yeUR1bXBzKSl7ZXh0cmFjdERhdGFGcm9tUHJvY2Vzc0R1bXAocHJvY2Vzc0R1bXAsc291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlcixkdW1wSW5kZXgsZHVtcENvdW50LGN1c3RvbVByb2Nlc3NEdW1wVmFsdWVFeHRyYWN0b3IpO319KTtyZXR1cm4gc291cmNlVG9Qcm9wZXJ0eVRvQnVpbGRlcjt9CmZ1bmN0aW9uIGV4dHJhY3REYXRhRnJvbVByb2Nlc3NEdW1wKHByb2Nlc3NEdW1wLHNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIsZHVtcEluZGV4LGR1bXBDb3VudCxjdXN0b21Qcm9jZXNzRHVtcFZhbHVlRXh0cmFjdG9yKXtjb25zdCByYXdQcm9jZXNzTmFtZT1wcm9jZXNzRHVtcC5wcm9jZXNzLm5hbWU7Y29uc3QgcHJvY2Vzc05hbWVQYXRoPVt0ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHJhd1Byb2Nlc3NOYW1lKV07Y3VzdG9tUHJvY2Vzc0R1bXBWYWx1ZUV4dHJhY3Rvcihwcm9jZXNzRHVtcCxmdW5jdGlvbiBhZGRQcm9jZXNzU2NhbGFyKHNwZWMpe2lmKHNwZWMudmFsdWU9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IGNvbXBvbmVudD1zcGVjLmNvbXBvbmVudHx8W107ZnVuY3Rpb24gY3JlYXRlRGV0YWlsc0ZvckVycm9yTWVzc2FnZSgpe3JldHVyblsnc291cmNlPScsc3BlYy5zb3VyY2UsJywgcHJvcGVydHk9JyxzcGVjLnByb3BlcnR5Lm5hbWV8fCcodW5kZWZpbmVkKScsJywgY29tcG9uZW50PScsY29tcG9uZW50Lmxlbmd0aD09PTA/JyhlbXB0eSknOmNvbXBvbmVudC5qb2luKCc6JyksJyBpbiAnLHByb2Nlc3NEdW1wLnByb2Nlc3MudXNlckZyaWVuZGx5TmFtZV0uam9pbignJyk7fQpsZXQgdmFsdWU7aWYoc3BlYy52YWx1ZSBpbnN0YW5jZW9mIHRyLmIuU2NhbGFyKXt2YWx1ZT1zcGVjLnZhbHVlLnZhbHVlO2lmKHNwZWMudmFsdWUudW5pdCE9PXNwZWMucHJvcGVydHkudW5pdCl7dGhyb3cgbmV3IEVycm9yKCdTY2FsYXIgdW5pdCBmb3IgJysKY3JlYXRlRGV0YWlsc0ZvckVycm9yTWVzc2FnZSgpKycgKCcrCnNwZWMudmFsdWUudW5pdC51bml0TmFtZSsnKSBkb2VzblwndCBtYXRjaCB0aGUgdW5pdCBvZiB0aGUgcHJvcGVydHkgKCcrCnNwZWMucHJvcGVydHkudW5pdC51bml0TmFtZSsnKScpO319ZWxzZXt2YWx1ZT1zcGVjLnZhbHVlO30KbGV0IHByb3BlcnR5VG9CdWlsZGVyPXNvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIuZ2V0KHNwZWMuc291cmNlKTtpZihwcm9wZXJ0eVRvQnVpbGRlcj09PXVuZGVmaW5lZCl7cHJvcGVydHlUb0J1aWxkZXI9bmV3IE1hcCgpO3NvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIuc2V0KHNwZWMuc291cmNlLHByb3BlcnR5VG9CdWlsZGVyKTt9CmxldCBidWlsZGVyPXByb3BlcnR5VG9CdWlsZGVyLmdldChzcGVjLnByb3BlcnR5KTtpZihidWlsZGVyPT09dW5kZWZpbmVkKXtidWlsZGVyPW5ldyB0ci5iLk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcigyLGR1bXBDb3VudCkscHJvcGVydHlUb0J1aWxkZXIuc2V0KHNwZWMucHJvcGVydHksYnVpbGRlcik7fQpjb25zdCB2YWx1ZXM9bmV3IEFycmF5KGR1bXBDb3VudCk7dmFsdWVzW2R1bXBJbmRleF09dmFsdWU7YnVpbGRlci5hZGRQYXRoKFtwcm9jZXNzTmFtZVBhdGgsY29tcG9uZW50XSx2YWx1ZXMsdHIuYi5NdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmFsdWVLaW5kLlRPVEFMKTt9KTt9CmZ1bmN0aW9uIHJlcG9ydERhdGFBc1ZhbHVlcyhzb3VyY2VUb1Byb3BlcnR5VG9CdWlsZGVyLGJyb3dzZXJOYW1lLGN1c3RvbUNvbXBvbmVudFRyZWVNb2RpZmllcix2YWx1ZXMpe3NvdXJjZVRvUHJvcGVydHlUb0J1aWxkZXIuZm9yRWFjaChmdW5jdGlvbihwcm9wZXJ0eVRvQnVpbGRlcixzb3VyY2VOYW1lKXtwcm9wZXJ0eVRvQnVpbGRlci5mb3JFYWNoKGZ1bmN0aW9uKGJ1aWxkZXJzLHByb3BlcnR5KXtjb25zdCB0cmVlPWJ1aWxkZXJzLmJ1aWxkVG9wRG93blRyZWVWaWV3KCk7cmVwb3J0Q29tcG9uZW50RGF0YUFzVmFsdWVzKGJyb3dzZXJOYW1lLHNvdXJjZU5hbWUscHJvcGVydHksW10sW10sdHJlZSx2YWx1ZXMsY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyKTt9KTt9KTt9CmZ1bmN0aW9uIHJlcG9ydENvbXBvbmVudERhdGFBc1ZhbHVlcyhicm93c2VyTmFtZSxzb3VyY2VOYW1lLHByb3BlcnR5LHByb2Nlc3NQYXRoLGNvbXBvbmVudFBhdGgsdHJlZSx2YWx1ZXMsY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyLG9wdF9jYWNoZWRIaXN0b2dyYW1zKXtjb25zdCBjYWNoZWRIaXN0b2dyYW1zPW9wdF9jYWNoZWRIaXN0b2dyYW1zfHxuZXcgTWFwKCk7ZnVuY3Rpb24gcmVjdXJzZShwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLG5vZGUpe3JldHVybiByZXBvcnRDb21wb25lbnREYXRhQXNWYWx1ZXMoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eSxwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLG5vZGUsdmFsdWVzLGN1c3RvbUNvbXBvbmVudFRyZWVNb2RpZmllcixjYWNoZWRIaXN0b2dyYW1zKTt9CmZ1bmN0aW9uIGJ1aWxkSGlzdG9ncmFtKHByb2Nlc3NQYXRoLGNvbXBvbmVudFBhdGgsbm9kZSl7cmV0dXJuIGJ1aWxkTmFtZWRNZW1vcnlOdW1lcmljRnJvbU5vZGUoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eSxwcm9jZXNzUGF0aC5sZW5ndGg9PT0wPydhbGxfcHJvY2Vzc2VzJzpwcm9jZXNzUGF0aFswXSxjb21wb25lbnRQYXRoLG5vZGUpO30KY3VzdG9tQ29tcG9uZW50VHJlZU1vZGlmaWVyKHRyZWUpO2NvbnN0IGhpc3RvZ3JhbT1idWlsZEhpc3RvZ3JhbShwcm9jZXNzUGF0aCxjb21wb25lbnRQYXRoLHRyZWUpO2lmKGNhY2hlZEhpc3RvZ3JhbXMuaGFzKGhpc3RvZ3JhbS5uYW1lKSl7cmV0dXJuIGNhY2hlZEhpc3RvZ3JhbXMuZ2V0KGhpc3RvZ3JhbS5uYW1lKTt9CmNhY2hlZEhpc3RvZ3JhbXMuc2V0KGhpc3RvZ3JhbS5uYW1lLGhpc3RvZ3JhbSk7Y29uc3QgcHJvY2Vzc05hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtmb3IoY29uc3RbY2hpbGRQcm9jZXNzTmFtZSxjaGlsZFByb2Nlc3NOb2RlXW9mIHRyZWUuY2hpbGRyZW5bMF0pe3Byb2Nlc3NQYXRoLnB1c2goY2hpbGRQcm9jZXNzTmFtZSk7Y29uc3QgY2hpbGRQcm9jZXNzSGlzdG9ncmFtPXJlY3Vyc2UocHJvY2Vzc1BhdGgsY29tcG9uZW50UGF0aCxjaGlsZFByb2Nlc3NOb2RlKTtwcm9jZXNzTmFtZXMuc2V0KGNoaWxkUHJvY2Vzc05hbWUsY2hpbGRQcm9jZXNzSGlzdG9ncmFtLm5hbWUpO3Byb2Nlc3NQYXRoLnBvcCgpO30KY29uc3QgY29tcG9uZW50TmFtZXM9bmV3IHRyLnYuZC5SZWxhdGVkTmFtZU1hcCgpO2Zvcihjb25zdFtjaGlsZENvbXBvbmVudE5hbWUsY2hpbGRDb21wb25lbnROb2RlXW9mIHRyZWUuY2hpbGRyZW5bMV0pe2NvbXBvbmVudFBhdGgucHVzaChjaGlsZENvbXBvbmVudE5hbWUpO2NvbnN0IGNoaWxkQ29tcG9uZW50SGlzdG9ncmFtPXJlY3Vyc2UocHJvY2Vzc1BhdGgsY29tcG9uZW50UGF0aCxjaGlsZENvbXBvbmVudE5vZGUpO2NvbXBvbmVudE5hbWVzLnNldChjaGlsZENvbXBvbmVudE5hbWUsY2hpbGRDb21wb25lbnRIaXN0b2dyYW0ubmFtZSk7Y29tcG9uZW50UGF0aC5wb3AoKTt9CnZhbHVlcy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTtpZih0cmVlLmNoaWxkcmVuWzBdLnNpemU+MCl7aGlzdG9ncmFtLmRpYWdub3N0aWNzLnNldCgncHJvY2Vzc2VzJyxwcm9jZXNzTmFtZXMpO30KaWYodHJlZS5jaGlsZHJlblsxXS5zaXplPjApe2hpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ2NvbXBvbmVudHMnLGNvbXBvbmVudE5hbWVzKTt9CnJldHVybiBoaXN0b2dyYW07fQpmdW5jdGlvbiBnZXROdW1lcmljTmFtZShicm93c2VyTmFtZSxzb3VyY2VOYW1lLHByb3BlcnR5TmFtZSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoKXtjb25zdCBuYW1lUGFydHM9WydtZW1vcnknLGJyb3dzZXJOYW1lLHByb2Nlc3NOYW1lLHNvdXJjZU5hbWVdLmNvbmNhdChjb21wb25lbnRQYXRoKTtpZihwcm9wZXJ0eU5hbWUhPT11bmRlZmluZWQpbmFtZVBhcnRzLnB1c2gocHJvcGVydHlOYW1lKTtyZXR1cm4gbmFtZVBhcnRzLmpvaW4oJzonKTt9CmZ1bmN0aW9uIGdldE51bWVyaWNEZXNjcmlwdGlvbihwcm9wZXJ0eSxicm93c2VyTmFtZSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoKXtyZXR1cm5bcHJvcGVydHkuYnVpbGREZXNjcmlwdGlvblByZWZpeChjb21wb25lbnRQYXRoLHByb2Nlc3NOYW1lKSwnaW4nLGNvbnZlcnRCcm93c2VyTmFtZVRvVXNlckZyaWVuZGx5TmFtZShicm93c2VyTmFtZSldLmpvaW4oJyAnKTt9CmZ1bmN0aW9uIGJ1aWxkTmFtZWRNZW1vcnlOdW1lcmljRnJvbU5vZGUoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoLG5vZGUpe2NvbnN0IG5hbWU9Z2V0TnVtZXJpY05hbWUoYnJvd3Nlck5hbWUsc291cmNlTmFtZSxwcm9wZXJ0eS5uYW1lLHByb2Nlc3NOYW1lLGNvbXBvbmVudFBhdGgpO2NvbnN0IGRlc2NyaXB0aW9uPWdldE51bWVyaWNEZXNjcmlwdGlvbihwcm9wZXJ0eSxicm93c2VyTmFtZSxwcm9jZXNzTmFtZSxjb21wb25lbnRQYXRoKTtjb25zdCBudW1lcmljPWJ1aWxkTWVtb3J5TnVtZXJpY0Zyb21Ob2RlKG5hbWUsbm9kZSxwcm9wZXJ0eS51bml0KTtudW1lcmljLmRlc2NyaXB0aW9uPWRlc2NyaXB0aW9uO3JldHVybiBudW1lcmljO30KZnVuY3Rpb24gYnVpbGRTYW1wbGVEaWFnbm9zdGljcyh2YWx1ZSxub2RlKXtpZihub2RlLmNoaWxkcmVuLmxlbmd0aDwyKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgZGlhZ25vc3RpY3M9bmV3IE1hcCgpO2NvbnN0IGk9bm9kZS52YWx1ZXMuaW5kZXhPZih2YWx1ZSk7Y29uc3QgcHJvY2Vzc0JyZWFrZG93bj1uZXcgdHIudi5kLkJyZWFrZG93bigpO3Byb2Nlc3NCcmVha2Rvd24uY29sb3JTY2hlbWU9dHIuZS5jaHJvbWUuY2hyb21lX3Byb2Nlc3Nlcy5QUk9DRVNTX0NPTE9SX1NDSEVNRV9OQU1FO2Zvcihjb25zdFtuYW1lLHN1Yk5vZGVdb2Ygbm9kZS5jaGlsZHJlblswXSl7cHJvY2Vzc0JyZWFrZG93bi5zZXQobmFtZSxzdWJOb2RlLnZhbHVlc1tpXS50b3RhbCk7fQppZihwcm9jZXNzQnJlYWtkb3duLnNpemU+MCl7ZGlhZ25vc3RpY3Muc2V0KCdwcm9jZXNzZXMnLHByb2Nlc3NCcmVha2Rvd24pO30KY29uc3QgY29tcG9uZW50QnJlYWtkb3duPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7Zm9yKGNvbnN0W25hbWUsc3ViTm9kZV1vZiBub2RlLmNoaWxkcmVuWzFdKXtjb21wb25lbnRCcmVha2Rvd24uc2V0KG5hbWUsc3ViTm9kZS52YWx1ZXNbaV0udG90YWwpO30KaWYoY29tcG9uZW50QnJlYWtkb3duLnNpemU+MCl7ZGlhZ25vc3RpY3Muc2V0KCdjb21wb25lbnRzJyxjb21wb25lbnRCcmVha2Rvd24pO30KaWYoZGlhZ25vc3RpY3Muc2l6ZT09PTApcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gZGlhZ25vc3RpY3M7fQpmdW5jdGlvbiBidWlsZE1lbW9yeU51bWVyaWNGcm9tTm9kZShuYW1lLG5vZGUsdW5pdCl7Y29uc3QgaGlzdG9ncmFtPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHVuaXQsQk9VTkRBUklFU19GT1JfVU5JVF9NQVAuZ2V0KHVuaXQpKTtub2RlLnZhbHVlcy5mb3JFYWNoKHY9Pmhpc3RvZ3JhbS5hZGRTYW1wbGUodi50b3RhbCxidWlsZFNhbXBsZURpYWdub3N0aWNzKHYsbm9kZSkpKTtyZXR1cm4gaGlzdG9ncmFtO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihtZW1vcnlNZXRyaWMse3N1cHBvcnRzUmFuZ2VPZkludGVyZXN0OnRydWV9KTtyZXR1cm57bWVtb3J5TWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IEJZVEVfQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMSwxZTksMWUyKTtmdW5jdGlvbiBuYXRpdmVDb2RlUmVzaWRlbnRNZW1vcnlNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgaGlzdG9ncmFtPW5ldyB0ci52Lkhpc3RvZ3JhbSgnTmF0aXZlQ29kZVJlc2lkZW50TWVtb3J5Jyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixCWVRFX0JPVU5EQVJJRVMpO2Zvcihjb25zdCBzbGljZSBvZiBtb2RlbC5nZXREZXNjZW5kYW50RXZlbnRzKCkpe2lmKHNsaWNlLmNhdGVnb3J5PT09J2Rpc2FibGVkLWJ5LWRlZmF1bHQtbWVtb3J5LWluZnJhJyYmc2xpY2UudGl0bGU9PT0nUmVwb3J0R2xvYmFsTmF0aXZlQ29kZVJlc2lkZW50TWVtb3J5S2InJiZzbGljZS5hcmdzLk5hdGl2ZUNvZGVSZXNpZGVudE1lbW9yeSl7aGlzdG9ncmFtLmFkZFNhbXBsZShzbGljZS5hcmdzLk5hdGl2ZUNvZGVSZXNpZGVudE1lbW9yeSk7fX0KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIobmF0aXZlQ29kZVJlc2lkZW50TWVtb3J5TWV0cmljKTtyZXR1cm57bmF0aXZlQ29kZVJlc2lkZW50TWVtb3J5TWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgRXZlbnRGaW5kZXJVdGlscz10ci5lLmNocm9tZS5FdmVudEZpbmRlclV0aWxzO2NvbnN0IExPQURJTkdfTUVUUklDX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDFlMywyMCkuYWRkTGluZWFyQmlucygzZTMsMjApLmFkZEV4cG9uZW50aWFsQmlucygyMGUzLDIwKTtjb25zdCBTVU1NQVJZX09QVElPTlM9e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDpmYWxzZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTpmYWxzZSx9O2Z1bmN0aW9uIGFkZFNhbXBsZXNUb0hpc3RvZ3JhbShwYWlySW5mbyxicmVha2Rvd25UcmVlLGhpc3RvZ3JhbSxoaXN0b2dyYW1zLGRpYWdub3N0aWNzKXtoaXN0b2dyYW0uYWRkU2FtcGxlKHBhaXJJbmZvLmVuZC1wYWlySW5mby5zdGFydCxkaWFnbm9zdGljcyk7aWYoIWJyZWFrZG93blRyZWUpe3JldHVybjt9CmZvcihjb25zdFtjYXRlZ29yeSxicmVha2Rvd25db2YgT2JqZWN0LmVudHJpZXMoYnJlYWtkb3duVHJlZSkpe2NvbnN0IHJlbGF0ZWROYW1lPWAke2hpc3RvZ3JhbS5uYW1lfToke2NhdGVnb3J5fWA7aWYoIWhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtTmFtZWQocmVsYXRlZE5hbWUpKXtjb25zdCByZWxhdGVkSGlzdD1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShyZWxhdGVkTmFtZSxoaXN0b2dyYW0udW5pdCxbXSx7YmluQm91bmRhcmllczpMT0FESU5HX01FVFJJQ19CT1VOREFSSUVTLHN1bW1hcnlPcHRpb25zOntjb3VudDpmYWxzZSxtYXg6ZmFsc2UsbWluOmZhbHNlLHN1bTpmYWxzZSx9LH0pO30KY29uc3QgcmVsYXRlZEhpc3Q9aGlzdG9ncmFtcy5nZXRIaXN0b2dyYW1OYW1lZChyZWxhdGVkTmFtZSk7bGV0IHJlbGF0ZWROYW1lcz1oaXN0b2dyYW0uZGlhZ25vc3RpY3MuZ2V0KCdicmVha2Rvd24nKTtpZighcmVsYXRlZE5hbWVzKXtyZWxhdGVkTmFtZXM9bmV3IHRyLnYuZC5SZWxhdGVkTmFtZU1hcCgpO2hpc3RvZ3JhbS5kaWFnbm9zdGljcy5zZXQoJ2JyZWFrZG93bicscmVsYXRlZE5hbWVzKTt9CnJlbGF0ZWROYW1lcy5zZXQoY2F0ZWdvcnkscmVsYXRlZE5hbWUpO3JlbGF0ZWRIaXN0LmFkZFNhbXBsZShicmVha2Rvd24udG90YWwse2JyZWFrZG93bjp0ci52LmQuQnJlYWtkb3duLmZyb21FbnRyaWVzKE9iamVjdC5lbnRyaWVzKGJyZWFrZG93bi5ldmVudHMpKSx9KTt9fQpmdW5jdGlvbiBzcGxpdE9uZVJhbmdlSW50b1BlclNlY29uZFJhbmdlcyhzdGFydFRpbWUsZW5kVGltZSl7Y29uc3QgcmVzdWx0cz1bXTtmb3IobGV0IGk9MDtzdGFydFRpbWUrKGkrMSkqMTAwMDw9ZW5kVGltZTtpKz0xKXtjb25zdCBzdGFydD1pKjEwMDA7Y29uc3QgZW5kPShpKzEpKjEwMDA7cmVzdWx0cy5wdXNoKHtzdGFydCxlbmQsfSk7fQpyZXR1cm4gcmVzdWx0czt9CmZ1bmN0aW9uIGdldE5hdmlnYXRpb25JbmZvcyhtb2RlbCl7Y29uc3QgbmF2aWdhdGlvbkluZm9zPVtdO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgbW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7aWYoIShleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkxvYWRFeHBlY3RhdGlvbikpY29udGludWU7aWYodHIuZS5jaHJvbWUuQ0hST01FX0lOVEVSTkFMX1VSTFMuaW5jbHVkZXMoZXhwZWN0YXRpb24udXJsKSl7Y29udGludWU7fQpjb25zdCByZW5kZXJlckhlbHBlcj1jaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzW2V4cGVjdGF0aW9uLnJlbmRlclByb2Nlc3MucGlkXTtuYXZpZ2F0aW9uSW5mb3MucHVzaCh7bmF2aWdhdGlvblN0YXJ0OmV4cGVjdGF0aW9uLm5hdmlnYXRpb25TdGFydCxyZW5kZXJlckhlbHBlcix1cmw6ZXhwZWN0YXRpb24udXJsfSk7fQpuYXZpZ2F0aW9uSW5mb3MuZm9yRWFjaCgobmF2SW5mbyxpKT0+e2lmKGk9PT1uYXZpZ2F0aW9uSW5mb3MubGVuZ3RoLTEpe25hdkluZm8ubmF2aWdhdGlvbkVuZFRpbWU9bW9kZWwuYm91bmRzLm1heDt9ZWxzZXtuYXZJbmZvLm5hdmlnYXRpb25FbmRUaW1lPW5hdmlnYXRpb25JbmZvc1tpKzFdLm5hdmlnYXRpb25TdGFydC5zdGFydDt9fSk7cmV0dXJuIG5hdmlnYXRpb25JbmZvczt9CmZ1bmN0aW9uIGdldFJlbmRlcmVySGVscGVycyhtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2NvbnN0IHJlbmRlcmVySGVscGVycz1bXTtmb3IoY29uc3QgcGlkIGluIGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2NvbnN0IHJlbmRlcmVySGVscGVyPWNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnNbcGlkXTtpZihyZW5kZXJlckhlbHBlci5pc0Nocm9tZVRyYWNpbmdVSSljb250aW51ZTtyZW5kZXJlckhlbHBlcnMucHVzaChyZW5kZXJlckhlbHBlcik7fQpyZXR1cm4gcmVuZGVyZXJIZWxwZXJzO30KZnVuY3Rpb24gZ2V0V2FsbFRpbWVCcmVha2Rvd25UcmVlKHJlbmRlcmVySGVscGVyLHN0YXJ0LGVuZCl7Y29uc3Qgc3RhcnRFbmRSYW5nZT10ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2Uoc3RhcnQsZW5kKTtjb25zdCBuZXR3b3JrRXZlbnRzPUV2ZW50RmluZGVyVXRpbHMuZ2V0TmV0d29ya0V2ZW50c0luUmFuZ2UocmVuZGVyZXJIZWxwZXIucHJvY2VzcyxzdGFydEVuZFJhbmdlKTtjb25zdCBicmVha2Rvd25UcmVlPXRyLm1ldHJpY3Muc2guZ2VuZXJhdGVXYWxsQ2xvY2tUaW1lQnJlYWtkb3duVHJlZShyZW5kZXJlckhlbHBlci5tYWluVGhyZWFkLG5ldHdvcmtFdmVudHMsc3RhcnRFbmRSYW5nZSk7cmV0dXJuIGJyZWFrZG93blRyZWU7fQpmdW5jdGlvbiBnZXRDcHVUaW1lQnJlYWtkb3duVHJlZShyZW5kZXJlckhlbHBlcixzdGFydCxlbmQpe2NvbnN0IHN0YXJ0RW5kUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHN0YXJ0LGVuZCk7Y29uc3QgYnJlYWtkb3duVHJlZT10ci5tZXRyaWNzLnNoLmdlbmVyYXRlQ3B1VGltZUJyZWFrZG93blRyZWUocmVuZGVyZXJIZWxwZXIubWFpblRocmVhZCxzdGFydEVuZFJhbmdlKTtyZXR1cm4gYnJlYWtkb3duVHJlZTt9CmZ1bmN0aW9uIHBlcnNlY29uZE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCByZW5kZXJlckhlbHBlcnM9Z2V0UmVuZGVyZXJIZWxwZXJzKG1vZGVsKTtjb25zdCBuYXZpZ2F0aW9uSW5mb3M9Z2V0TmF2aWdhdGlvbkluZm9zKG1vZGVsKTtpZihuYXZpZ2F0aW9uSW5mb3MubGVuZ3RoPT09MCl7cmV0dXJuO30KbmF2aWdhdGlvbkluZm9zLmZvckVhY2gobmF2SW5mbz0+e2NvbnN0IG5hdmlnYXRpb25TdGFydD1uYXZJbmZvLm5hdmlnYXRpb25TdGFydC5zdGFydDtjb25zdCBuYXZpZ2F0aW9uRW5kPW5hdkluZm8ubmF2aWdhdGlvbkVuZFRpbWU7Y29uc3Qgc3RhcnRFbmRQYWlycz1zcGxpdE9uZVJhbmdlSW50b1BlclNlY29uZFJhbmdlcyhuYXZpZ2F0aW9uU3RhcnQsbmF2aWdhdGlvbkVuZCk7Y29uc3QgYnJlYWtkb3duTGlzdD1zdGFydEVuZFBhaXJzLm1hcChwPT57Y29uc3Qgd2FsbEhpc3RvZ3JhbU5hbWU9YHdhbGxfJHtwLnN0YXJ0fV90b18ke3AuZW5kfWA7Y29uc3Qgd2FsbEhpc3RvZ3JhbURlc2NyaXB0aW9uPWBXYWxsLWNsb2NrIHRpbWUgJHtwLnN0YXJ0fSB0byAke3AuZW5kfSBicmVha2Rvd25gO2NvbnN0IGNwdUhpc3RvZ3JhbU5hbWU9YGNwdV8ke3Auc3RhcnR9X3RvXyR7cC5lbmR9YDtjb25zdCBjcHVIaXN0b2dyYW1EZXNjcmlwdGlvbj1gQ1BVIHRpbWUgJHtwLnN0YXJ0fSB0byAke3AuZW5kfSBicmVha2Rvd25gO2NvbnN0IHBpZD1uYXZJbmZvLnJlbmRlcmVySGVscGVyLnBpZDtjb25zdCBicmVha2Rvd25UcmVlPWdldFdhbGxUaW1lQnJlYWtkb3duVHJlZShuYXZJbmZvLnJlbmRlcmVySGVscGVyLG5hdmlnYXRpb25TdGFydCtwLnN0YXJ0LG5hdmlnYXRpb25TdGFydCtwLmVuZCk7Y29uc3QgY3B1QnJlYWtkb3duVHJlZT1nZXRDcHVUaW1lQnJlYWtkb3duVHJlZShuYXZJbmZvLnJlbmRlcmVySGVscGVyLG5hdmlnYXRpb25TdGFydCtwLnN0YXJ0LG5hdmlnYXRpb25TdGFydCtwLmVuZCk7Y29uc3QgZGlhZ25vc3RpY3M9eydOYXZpZ2F0aW9uIGluZm9zJzpuZXcgdHIudi5kLkdlbmVyaWNTZXQoW3t1cmw6bmF2SW5mby51cmwscGlkOm5hdkluZm8ucmVuZGVyZXJIZWxwZXIucGlkLG5hdlN0YXJ0Om5hdmlnYXRpb25TdGFydCxmcmFtZUlkUmVmOm5hdkluZm8ubmF2aWdhdGlvblN0YXJ0LmFyZ3MuZnJhbWV9XSksJ2JyZWFrZG93bic6dHIubWV0cmljcy5zaC5jcmVhdGVCcmVha2Rvd25EaWFnbm9zdGljKGJyZWFrZG93blRyZWUpLH07cmV0dXJuIE9iamVjdC5hc3NpZ24ocCx7YnJlYWtkb3duVHJlZSxjcHVCcmVha2Rvd25UcmVlLHdhbGxIaXN0b2dyYW1OYW1lLHdhbGxIaXN0b2dyYW1EZXNjcmlwdGlvbixjcHVIaXN0b2dyYW1OYW1lLGNwdUhpc3RvZ3JhbURlc2NyaXB0aW9uLGRpYWdub3N0aWNzLH0pO30pO2JyZWFrZG93bkxpc3QuZm9yRWFjaChwPT57aWYoIWhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtTmFtZWQocC53YWxsSGlzdG9ncmFtTmFtZSkpe2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKHAud2FsbEhpc3RvZ3JhbU5hbWUsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6TE9BRElOR19NRVRSSUNfQk9VTkRBUklFUyxkZXNjcmlwdGlvbjpwLndhbGxIaXN0b2dyYW1EZXNjcmlwdGlvbixzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7fQpjb25zdCB3YWxsSGlzdG9ncmFtPWhpc3RvZ3JhbXMuZ2V0SGlzdG9ncmFtTmFtZWQocC53YWxsSGlzdG9ncmFtTmFtZSk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHAscC5icmVha2Rvd25UcmVlLHdhbGxIaXN0b2dyYW0saGlzdG9ncmFtcyxwLmRpYWdub3N0aWNzKTtpZighaGlzdG9ncmFtcy5nZXRIaXN0b2dyYW1OYW1lZChwLmNwdUhpc3RvZ3JhbU5hbWUpKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShwLmNwdUhpc3RvZ3JhbU5hbWUsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2JpbkJvdW5kYXJpZXM6TE9BRElOR19NRVRSSUNfQk9VTkRBUklFUyxkZXNjcmlwdGlvbjpwLmNwdUhpc3RvZ3JhbURlc2NyaXB0aW9uLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTt9CmNvbnN0IGNwdUhpc3RvZ3JhbT1oaXN0b2dyYW1zLmdldEhpc3RvZ3JhbU5hbWVkKHAuY3B1SGlzdG9ncmFtTmFtZSk7YWRkU2FtcGxlc1RvSGlzdG9ncmFtKHAscC5jcHVCcmVha2Rvd25UcmVlLGNwdUhpc3RvZ3JhbSxoaXN0b2dyYW1zLHAuZGlhZ25vc3RpY3MpO30pO30pO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3RlcihwZXJzZWNvbmRNZXRyaWMpO3JldHVybntwZXJzZWNvbmRNZXRyaWMsc3BsaXRPbmVSYW5nZUludG9QZXJTZWNvbmRSYW5nZXN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtjb25zdCBDSFJPTUVfUE9XRVJfR1JBQ0VfUEVSSU9EX01TPTE7ZnVuY3Rpb24gY3JlYXRlRW1wdHlIaXN0b2dyYW1fKGludGVydmFsLGhpc3RvZ3JhbXMpe2lmKGludGVydmFsLnBlclNlY29uZCl7cmV0dXJue3BlclNlY29uZDp0cnVlLGVuZXJneTpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtpbnRlcnZhbC5uYW1lfTpwb3dlcmAsdHIuYi5Vbml0LmJ5TmFtZS5wb3dlckluV2F0dHNfc21hbGxlcklzQmV0dGVyLFtdLHtkZXNjcmlwdGlvbjpgRW5lcmd5IGNvbnN1bXB0aW9uIHJhdGUgZm9yICR7aW50ZXJ2YWwuZGVzY3JpcHRpb259YCxzdW1tYXJ5T3B0aW9uczp7YXZnOnRydWUsY291bnQ6ZmFsc2UsbWF4OnRydWUsbWluOnRydWUsc3RkOmZhbHNlLHN1bTpmYWxzZSx9LH0pLH07fQpyZXR1cm57cGVyU2Vjb25kOmZhbHNlLGVuZXJneTpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtpbnRlcnZhbC5uYW1lfTplbmVyZ3lgLHRyLmIuVW5pdC5ieU5hbWUuZW5lcmd5SW5Kb3VsZXNfc21hbGxlcklzQmV0dGVyLFtdLHtkZXNjcmlwdGlvbjpgRW5lcmd5IGNvbnN1bWVkIGluICR7aW50ZXJ2YWwuZGVzY3JpcHRpb259YCxzdW1tYXJ5T3B0aW9uczp7YXZnOmZhbHNlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDpmYWxzZSxzdW06dHJ1ZSx9LH0pLH07fQpmdW5jdGlvbiBjcmVhdGVIaXN0b2dyYW1zXyhkYXRhLGludGVydmFsLGhpc3RvZ3JhbXMpe2lmKGRhdGEuaGlzdG9ncmFtc1tpbnRlcnZhbC5uYW1lXT09PXVuZGVmaW5lZCl7ZGF0YS5oaXN0b2dyYW1zW2ludGVydmFsLm5hbWVdPWNyZWF0ZUVtcHR5SGlzdG9ncmFtXyhpbnRlcnZhbCxoaXN0b2dyYW1zKTt9CmlmKGRhdGEuaGlzdG9ncmFtc1tpbnRlcnZhbC5uYW1lXS5wZXJTZWNvbmQpe2Zvcihjb25zdCBzYW1wbGUgb2YgZGF0YS5tb2RlbC5kZXZpY2UucG93ZXJTZXJpZXMuZ2V0U2FtcGxlc1dpdGhpblJhbmdlKGludGVydmFsLmJvdW5kcy5taW4saW50ZXJ2YWwuYm91bmRzLm1heCkpe2RhdGEuaGlzdG9ncmFtc1tpbnRlcnZhbC5uYW1lXS5lbmVyZ3kuYWRkU2FtcGxlKHNhbXBsZS5wb3dlckluVyk7fX1lbHNle2NvbnN0IGVuZXJneUluSj1kYXRhLm1vZGVsLmRldmljZS5wb3dlclNlcmllcy5nZXRFbmVyZ3lDb25zdW1lZEluSihpbnRlcnZhbC5ib3VuZHMubWluLGludGVydmFsLmJvdW5kcy5tYXgpO2RhdGEuaGlzdG9ncmFtc1tpbnRlcnZhbC5uYW1lXS5lbmVyZ3kuYWRkU2FtcGxlKGVuZXJneUluSik7fX0KZnVuY3Rpb24gZ2V0TmF2aWdhdGlvblRUSUludGVydmFsc18obW9kZWwpe2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBpbnRlcnZhbHM9W107Zm9yKGNvbnN0IGV4cGVjdGF0aW9uIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2lmKCEoZXhwZWN0YXRpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5Mb2FkRXhwZWN0YXRpb24pKWNvbnRpbnVlO2lmKHRyLmUuY2hyb21lLkNIUk9NRV9JTlRFUk5BTF9VUkxTLmluY2x1ZGVzKGV4cGVjdGF0aW9uLnVybCkpe2NvbnRpbnVlO30KaWYoZXhwZWN0YXRpb24udGltZVRvSW50ZXJhY3RpdmUhPT11bmRlZmluZWQpe2ludGVydmFscy5wdXNoKHRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShleHBlY3RhdGlvbi5uYXZpZ2F0aW9uU3RhcnQuc3RhcnQsZXhwZWN0YXRpb24udGltZVRvSW50ZXJhY3RpdmUpKTt9fQpyZXR1cm4gaW50ZXJ2YWxzLnNvcnQoKHgseSk9PngubWluLXkubWluKTt9CmZ1bmN0aW9uKmNvbXB1dGVUaW1lSW50ZXJ2YWxzXyhtb2RlbCl7Y29uc3QgY2hyb21lSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2NvbnN0IHBvd2VyU2VyaWVzPW1vZGVsLmRldmljZS5wb3dlclNlcmllcztpZihwb3dlclNlcmllcz09PXVuZGVmaW5lZHx8cG93ZXJTZXJpZXMuc2FtcGxlcy5sZW5ndGg9PT0wKXtyZXR1cm47fQp5aWVsZHtib3VuZHM6bW9kZWwuYm91bmRzLG5hbWU6J3N0b3J5JyxkZXNjcmlwdGlvbjondXNlciBzdG9yeScscGVyU2Vjb25kOnRydWV9O2NvbnN0IGNocm9tZUJvdW5kcz1jb21wdXRlQ2hyb21lQm91bmRzXyhtb2RlbCk7aWYoY2hyb21lQm91bmRzLmlzRW1wdHkpcmV0dXJuO2NvbnN0IHBvd2VyU2VyaWVzQm91bmRzV2l0aEdyYWNlUGVyaW9kPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShwb3dlclNlcmllcy5ib3VuZHMubWluLUNIUk9NRV9QT1dFUl9HUkFDRV9QRVJJT0RfTVMscG93ZXJTZXJpZXMuYm91bmRzLm1heCtDSFJPTUVfUE9XRVJfR1JBQ0VfUEVSSU9EX01TKTtpZighcG93ZXJTZXJpZXNCb3VuZHNXaXRoR3JhY2VQZXJpb2QuY29udGFpbnNSYW5nZUV4Y2x1c2l2ZShjaHJvbWVCb3VuZHMpKXtyZXR1cm47fQpmb3IoY29uc3QgaW50ZXJ2YWwgb2YgZ2V0UmFpbFN0YWdlSW50ZXJ2YWxzXyhtb2RlbCkpe3lpZWxke2JvdW5kczppbnRlcnZhbC5ib3VuZHMuZmluZEludGVyc2VjdGlvbihjaHJvbWVCb3VuZHMpLG5hbWU6aW50ZXJ2YWwubmFtZSxkZXNjcmlwdGlvbjppbnRlcnZhbC5kZXNjcmlwdGlvbixwZXJTZWNvbmQ6aW50ZXJ2YWwucGVyU2Vjb25kfTt9CmZvcihjb25zdCBpbnRlcnZhbCBvZiBnZXRMb2FkaW5nSW50ZXJ2YWxzXyhtb2RlbCxjaHJvbWVCb3VuZHMpKXt5aWVsZHtib3VuZHM6aW50ZXJ2YWwuYm91bmRzLmZpbmRJbnRlcnNlY3Rpb24oY2hyb21lQm91bmRzKSxuYW1lOmludGVydmFsLm5hbWUsZGVzY3JpcHRpb246aW50ZXJ2YWwuZGVzY3JpcHRpb24scGVyU2Vjb25kOmludGVydmFsLnBlclNlY29uZH07fX0KZnVuY3Rpb24qZ2V0UmFpbFN0YWdlSW50ZXJ2YWxzXyhtb2RlbCl7Zm9yKGNvbnN0IGV4cCBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtjb25zdCBoaXN0b2dyYW1OYW1lPWV4cC50aXRsZS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoJyAnLCdfJyk7Y29uc3QgZW5lcmd5SGlzdD11bmRlZmluZWQ7aWYoaGlzdG9ncmFtTmFtZS5pbmNsdWRlcygncmVzcG9uc2UnKSl7eWllbGR7Ym91bmRzOnRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShleHAuc3RhcnQsZXhwLmVuZCksbmFtZTpoaXN0b2dyYW1OYW1lLGRlc2NyaXB0aW9uOidSQUlMIHN0YWdlICcraGlzdG9ncmFtTmFtZSxwZXJTZWNvbmQ6ZmFsc2V9O31lbHNlIGlmKGhpc3RvZ3JhbU5hbWUuaW5jbHVkZXMoJ2FuaW1hdGlvbicpfHxoaXN0b2dyYW1OYW1lLmluY2x1ZGVzKCdpZGxlJykpe3lpZWxke2JvdW5kczp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoZXhwLnN0YXJ0LGV4cC5lbmQpLG5hbWU6aGlzdG9ncmFtTmFtZSxkZXNjcmlwdGlvbjonUkFJTCBzdGFnZSAnK2hpc3RvZ3JhbU5hbWUscGVyU2Vjb25kOnRydWV9O319fQpmdW5jdGlvbipnZXRMb2FkaW5nSW50ZXJ2YWxzXyhtb2RlbCxjaHJvbWVCb3VuZHMpe2NvbnN0IHR0aUludGVydmFscz1nZXROYXZpZ2F0aW9uVFRJSW50ZXJ2YWxzXyhtb2RlbCk7Zm9yKGNvbnN0IHR0aUludGVydmFsIG9mIHR0aUludGVydmFscyl7eWllbGR7Ym91bmRzOnR0aUludGVydmFsLG5hbWU6J2xvYWQnLGRlc2NyaXB0aW9uOidwYWdlIGxvYWRzJyxwZXJTZWNvbmQ6ZmFsc2V9O319CmZ1bmN0aW9uIGNvbXB1dGVDaHJvbWVCb3VuZHNfKG1vZGVsKXtjb25zdCBjaHJvbWVCb3VuZHM9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtpZihjaHJvbWVIZWxwZXI9PT11bmRlZmluZWQpcmV0dXJuIGNocm9tZUJvdW5kcztmb3IoY29uc3QgaGVscGVyIG9mIGNocm9tZUhlbHBlci5icm93c2VySGVscGVycyl7aWYoaGVscGVyLm1haW5UaHJlYWQpe2Nocm9tZUJvdW5kcy5hZGRSYW5nZShoZWxwZXIubWFpblRocmVhZC5ib3VuZHMpO319CmZvcihjb25zdCBwaWQgaW4gY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyl7aWYoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVyc1twaWRdLm1haW5UaHJlYWQpe2Nocm9tZUJvdW5kcy5hZGRSYW5nZShjaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzW3BpZF0ubWFpblRocmVhZC5ib3VuZHMpO319CnJldHVybiBjaHJvbWVCb3VuZHM7fQpmdW5jdGlvbiBwb3dlck1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBkYXRhPXttb2RlbCxoaXN0b2dyYW1zOnt9fTtmb3IoY29uc3QgaW50ZXJ2YWwgb2YgY29tcHV0ZVRpbWVJbnRlcnZhbHNfKG1vZGVsKSl7Y3JlYXRlSGlzdG9ncmFtc18oZGF0YSxpbnRlcnZhbCxoaXN0b2dyYW1zKTt9fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHBvd2VyTWV0cmljKTtyZXR1cm57cG93ZXJNZXRyaWN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiBjb21wdXRlQW5pbWF0aW9uVGhyb3VnaHB1dChhbmltYXRpb25FeHBlY3RhdGlvbil7aWYoYW5pbWF0aW9uRXhwZWN0YXRpb24uZnJhbWVFdmVudHM9PT11bmRlZmluZWR8fGFuaW1hdGlvbkV4cGVjdGF0aW9uLmZyYW1lRXZlbnRzLmxlbmd0aD09PTApe3Rocm93IG5ldyBFcnJvcignQW5pbWF0aW9uIG1pc3NpbmcgZnJhbWVFdmVudHMgJysKYW5pbWF0aW9uRXhwZWN0YXRpb24uc3RhYmxlSWQpO30KY29uc3QgZHVyYXRpb25JblM9dHIuYi5jb252ZXJ0VW5pdChhbmltYXRpb25FeHBlY3RhdGlvbi5kdXJhdGlvbix0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUpO3JldHVybiBhbmltYXRpb25FeHBlY3RhdGlvbi5mcmFtZUV2ZW50cy5sZW5ndGgvZHVyYXRpb25JblM7fQpmdW5jdGlvbiBjb21wdXRlQW5pbWF0aW9uZnJhbWVUaW1lRGlzY3JlcGFuY3koYW5pbWF0aW9uRXhwZWN0YXRpb24pe2lmKGFuaW1hdGlvbkV4cGVjdGF0aW9uLmZyYW1lRXZlbnRzPT09dW5kZWZpbmVkfHxhbmltYXRpb25FeHBlY3RhdGlvbi5mcmFtZUV2ZW50cy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ0FuaW1hdGlvbiBtaXNzaW5nIGZyYW1lRXZlbnRzICcrCmFuaW1hdGlvbkV4cGVjdGF0aW9uLnN0YWJsZUlkKTt9CmxldCBmcmFtZVRpbWVzdGFtcHM9YW5pbWF0aW9uRXhwZWN0YXRpb24uZnJhbWVFdmVudHM7ZnJhbWVUaW1lc3RhbXBzPWZyYW1lVGltZXN0YW1wcy50b0FycmF5KCkubWFwKGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQuc3RhcnQ7fSk7Y29uc3QgYWJzb2x1dGU9dHJ1ZTtyZXR1cm4gdHIuYi5tYXRoLlN0YXRpc3RpY3MudGltZXN0YW1wc0Rpc2NyZXBhbmN5KGZyYW1lVGltZXN0YW1wcyxhYnNvbHV0ZSk7fQpmdW5jdGlvbiByZXNwb25zaXZlbmVzc01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLG9wdF9vcHRpb25zKXtjb25zdCByZXNwb25zZU51bWVyaWM9bmV3IHRyLnYuSGlzdG9ncmFtKCdyZXNwb25zZSBsYXRlbmN5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMTAwLDFlMyw1MCkpO2NvbnN0IHRocm91Z2hwdXROdW1lcmljPW5ldyB0ci52Lkhpc3RvZ3JhbSgnYW5pbWF0aW9uIHRocm91Z2hwdXQnLHRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXJfYmlnZ2VySXNCZXR0ZXIsdHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigxMCw2MCwxMCkpO2NvbnN0IGZyYW1lVGltZURpc2NyZXBhbmN5TnVtZXJpYz1uZXcgdHIudi5IaXN0b2dyYW0oJ2FuaW1hdGlvbiBmcmFtZVRpbWVEaXNjcmVwYW5jeScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMWUzLDUwKS5hZGRFeHBvbmVudGlhbEJpbnMoMWU0LDEwKSk7Y29uc3QgbGF0ZW5jeU51bWVyaWM9bmV3IHRyLnYuSGlzdG9ncmFtKCdhbmltYXRpb24gbGF0ZW5jeScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMzAwLDYwKSk7bW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucy5mb3JFYWNoKGZ1bmN0aW9uKHVlKXtpZihvcHRfb3B0aW9ucyYmb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0JiYhb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHVlLnN0YXJ0LHVlLmVuZCkpe3JldHVybjt9CmNvbnN0IHNhbXBsZURpYWdub3N0aWNNYXA9dHIudi5kLkRpYWdub3N0aWNNYXAuZnJvbU9iamVjdCh7cmVsYXRlZEV2ZW50czpuZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChbdWVdKX0pO2lmKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uSWRsZUV4cGVjdGF0aW9uKXtyZXR1cm47fWVsc2UgaWYodWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5TdGFydHVwRXhwZWN0YXRpb24pe3JldHVybjt9ZWxzZSBpZih1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkxvYWRFeHBlY3RhdGlvbil7fWVsc2UgaWYodWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKXtyZXNwb25zZU51bWVyaWMuYWRkU2FtcGxlKHVlLmR1cmF0aW9uLHNhbXBsZURpYWdub3N0aWNNYXApO31lbHNlIGlmKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb24pe2lmKHVlLmZyYW1lRXZlbnRzPT09dW5kZWZpbmVkfHx1ZS5mcmFtZUV2ZW50cy5sZW5ndGg9PT0wKXtyZXR1cm47fQpjb25zdCB0aHJvdWdocHV0PWNvbXB1dGVBbmltYXRpb25UaHJvdWdocHV0KHVlKTtpZih0aHJvdWdocHV0PT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ01pc3NpbmcgdGhyb3VnaHB1dCBmb3IgJysKdWUuc3RhYmxlSWQpO30KdGhyb3VnaHB1dE51bWVyaWMuYWRkU2FtcGxlKHRocm91Z2hwdXQsc2FtcGxlRGlhZ25vc3RpY01hcCk7Y29uc3QgZnJhbWVUaW1lRGlzY3JlcGFuY3k9Y29tcHV0ZUFuaW1hdGlvbmZyYW1lVGltZURpc2NyZXBhbmN5KHVlKTtpZihmcmFtZVRpbWVEaXNjcmVwYW5jeT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdNaXNzaW5nIGZyYW1lVGltZURpc2NyZXBhbmN5IGZvciAnKwp1ZS5zdGFibGVJZCk7fQpmcmFtZVRpbWVEaXNjcmVwYW5jeU51bWVyaWMuYWRkU2FtcGxlKGZyYW1lVGltZURpc2NyZXBhbmN5LHNhbXBsZURpYWdub3N0aWNNYXApO3VlLmFzc29jaWF0ZWRFdmVudHMuZm9yRWFjaChmdW5jdGlvbihldmVudCl7aWYoIShldmVudCBpbnN0YW5jZW9mIHRyLmUuY2MuSW5wdXRMYXRlbmN5QXN5bmNTbGljZSkpe3JldHVybjt9CmxhdGVuY3lOdW1lcmljLmFkZFNhbXBsZShldmVudC5kdXJhdGlvbixzYW1wbGVEaWFnbm9zdGljTWFwKTt9KTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1VucmVjb2duaXplZCBzdGFnZSBmb3IgJyt1ZS5zdGFibGVJZCk7fX0pO1tyZXNwb25zZU51bWVyaWMsdGhyb3VnaHB1dE51bWVyaWMsZnJhbWVUaW1lRGlzY3JlcGFuY3lOdW1lcmljLGxhdGVuY3lOdW1lcmljXS5mb3JFYWNoKGZ1bmN0aW9uKG51bWVyaWMpe251bWVyaWMuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoe2F2Zzp0cnVlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDp0cnVlfSk7fSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0ocmVzcG9uc2VOdW1lcmljKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh0aHJvdWdocHV0TnVtZXJpYyk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oZnJhbWVUaW1lRGlzY3JlcGFuY3lOdW1lcmljKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShsYXRlbmN5TnVtZXJpYyk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHJlc3BvbnNpdmVuZXNzTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlLHJlcXVpcmVkQ2F0ZWdvcmllczpbJ3JhaWwnXSx9KTtyZXR1cm57cmVzcG9uc2l2ZW5lc3NNZXRyaWMsfTt9KTt2YXIgSnBlZ0ltYWdlPShmdW5jdGlvbiBqcGVnSW1hZ2UoKXsidXNlIHN0cmljdCI7dmFyIGRjdFppZ1phZz1uZXcgSW50MzJBcnJheShbMCwxLDgsMTYsOSwyLDMsMTAsMTcsMjQsMzIsMjUsMTgsMTEsNCw1LDEyLDE5LDI2LDMzLDQwLDQ4LDQxLDM0LDI3LDIwLDEzLDYsNywxNCwyMSwyOCwzNSw0Miw0OSw1Niw1Nyw1MCw0MywzNiwyOSwyMiwxNSwyMywzMCwzNyw0NCw1MSw1OCw1OSw1Miw0NSwzOCwzMSwzOSw0Niw1Myw2MCw2MSw1NCw0Nyw1NSw2Miw2M10pO3ZhciBkY3RDb3MxPTQwMTcKdmFyIGRjdFNpbjE9Nzk5CnZhciBkY3RDb3MzPTM0MDYKdmFyIGRjdFNpbjM9MjI3Ngp2YXIgZGN0Q29zNj0xNTY3CnZhciBkY3RTaW42PTM3ODQKdmFyIGRjdFNxcnQyPTU3OTMKdmFyIGRjdFNxcnQxZDI9Mjg5NgpmdW5jdGlvbiBjb25zdHJ1Y3Rvcigpe30KZnVuY3Rpb24gYnVpbGRIdWZmbWFuVGFibGUoY29kZUxlbmd0aHMsdmFsdWVzKXt2YXIgaz0wLGNvZGU9W10saSxqLGxlbmd0aD0xNjt3aGlsZShsZW5ndGg+MCYmIWNvZGVMZW5ndGhzW2xlbmd0aC0xXSkKbGVuZ3RoLS07Y29kZS5wdXNoKHtjaGlsZHJlbjpbXSxpbmRleDowfSk7dmFyIHA9Y29kZVswXSxxO2ZvcihpPTA7aTxsZW5ndGg7aSsrKXtmb3Ioaj0wO2o8Y29kZUxlbmd0aHNbaV07aisrKXtwPWNvZGUucG9wKCk7cC5jaGlsZHJlbltwLmluZGV4XT12YWx1ZXNba107d2hpbGUocC5pbmRleD4wKXtwPWNvZGUucG9wKCk7fQpwLmluZGV4Kys7Y29kZS5wdXNoKHApO3doaWxlKGNvZGUubGVuZ3RoPD1pKXtjb2RlLnB1c2gocT17Y2hpbGRyZW46W10saW5kZXg6MH0pO3AuY2hpbGRyZW5bcC5pbmRleF09cS5jaGlsZHJlbjtwPXE7fQprKys7fQppZihpKzE8bGVuZ3RoKXtjb2RlLnB1c2gocT17Y2hpbGRyZW46W10saW5kZXg6MH0pO3AuY2hpbGRyZW5bcC5pbmRleF09cS5jaGlsZHJlbjtwPXE7fX0KcmV0dXJuIGNvZGVbMF0uY2hpbGRyZW47fQpmdW5jdGlvbiBkZWNvZGVTY2FuKGRhdGEsb2Zmc2V0LGZyYW1lLGNvbXBvbmVudHMscmVzZXRJbnRlcnZhbCxzcGVjdHJhbFN0YXJ0LHNwZWN0cmFsRW5kLHN1Y2Nlc3NpdmVQcmV2LHN1Y2Nlc3NpdmUpe3ZhciBwcmVjaXNpb249ZnJhbWUucHJlY2lzaW9uO3ZhciBzYW1wbGVzUGVyTGluZT1mcmFtZS5zYW1wbGVzUGVyTGluZTt2YXIgc2NhbkxpbmVzPWZyYW1lLnNjYW5MaW5lczt2YXIgbWN1c1BlckxpbmU9ZnJhbWUubWN1c1BlckxpbmU7dmFyIHByb2dyZXNzaXZlPWZyYW1lLnByb2dyZXNzaXZlO3ZhciBtYXhIPWZyYW1lLm1heEgsbWF4Vj1mcmFtZS5tYXhWO3ZhciBzdGFydE9mZnNldD1vZmZzZXQsYml0c0RhdGE9MCxiaXRzQ291bnQ9MDtmdW5jdGlvbiByZWFkQml0KCl7aWYoYml0c0NvdW50PjApe2JpdHNDb3VudC0tO3JldHVybihiaXRzRGF0YT4+Yml0c0NvdW50KSYxO30KYml0c0RhdGE9ZGF0YVtvZmZzZXQrK107aWYoYml0c0RhdGE9PTB4RkYpe3ZhciBuZXh0Qnl0ZT1kYXRhW29mZnNldCsrXTtpZihuZXh0Qnl0ZSl7dGhyb3cgbmV3IEVycm9yKCJ1bmV4cGVjdGVkIG1hcmtlcjogIisoKGJpdHNEYXRhPDw4KXxuZXh0Qnl0ZSkudG9TdHJpbmcoMTYpKTt9fQpiaXRzQ291bnQ9NztyZXR1cm4gYml0c0RhdGE+Pj43O30KZnVuY3Rpb24gZGVjb2RlSHVmZm1hbih0cmVlKXt2YXIgbm9kZT10cmVlLGJpdDt3aGlsZSgoYml0PXJlYWRCaXQoKSkhPT1udWxsKXtub2RlPW5vZGVbYml0XTtpZih0eXBlb2Ygbm9kZT09PSdudW1iZXInKQpyZXR1cm4gbm9kZTtpZih0eXBlb2Ygbm9kZSE9PSdvYmplY3QnKQp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZSIpO30KcmV0dXJuIG51bGw7fQpmdW5jdGlvbiByZWNlaXZlKGxlbmd0aCl7dmFyIG49MDt3aGlsZShsZW5ndGg+MCl7dmFyIGJpdD1yZWFkQml0KCk7aWYoYml0PT09bnVsbClyZXR1cm47bj0objw8MSl8Yml0O2xlbmd0aC0tO30KcmV0dXJuIG47fQpmdW5jdGlvbiByZWNlaXZlQW5kRXh0ZW5kKGxlbmd0aCl7dmFyIG49cmVjZWl2ZShsZW5ndGgpO2lmKG4+PTE8PChsZW5ndGgtMSkpCnJldHVybiBuO3JldHVybiBuKygtMTw8bGVuZ3RoKSsxO30KZnVuY3Rpb24gZGVjb2RlQmFzZWxpbmUoY29tcG9uZW50LHp6KXt2YXIgdD1kZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVEQyk7dmFyIGRpZmY9dD09PTA/MDpyZWNlaXZlQW5kRXh0ZW5kKHQpO3p6WzBdPShjb21wb25lbnQucHJlZCs9ZGlmZik7dmFyIGs9MTt3aGlsZShrPDY0KXt2YXIgcnM9ZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO3ZhciBzPXJzJjE1LHI9cnM+PjQ7aWYocz09PTApe2lmKHI8MTUpCmJyZWFrO2srPTE2O2NvbnRpbnVlO30Kays9cjt2YXIgej1kY3RaaWdaYWdba107enpbel09cmVjZWl2ZUFuZEV4dGVuZChzKTtrKys7fX0KZnVuY3Rpb24gZGVjb2RlRENGaXJzdChjb21wb25lbnQsenope3ZhciB0PWRlY29kZUh1ZmZtYW4oY29tcG9uZW50Lmh1ZmZtYW5UYWJsZURDKTt2YXIgZGlmZj10PT09MD8wOihyZWNlaXZlQW5kRXh0ZW5kKHQpPDxzdWNjZXNzaXZlKTt6elswXT0oY29tcG9uZW50LnByZWQrPWRpZmYpO30KZnVuY3Rpb24gZGVjb2RlRENTdWNjZXNzaXZlKGNvbXBvbmVudCx6eil7enpbMF18PXJlYWRCaXQoKTw8c3VjY2Vzc2l2ZTt9CnZhciBlb2JydW49MDtmdW5jdGlvbiBkZWNvZGVBQ0ZpcnN0KGNvbXBvbmVudCx6eil7aWYoZW9icnVuPjApe2VvYnJ1bi0tO3JldHVybjt9CnZhciBrPXNwZWN0cmFsU3RhcnQsZT1zcGVjdHJhbEVuZDt3aGlsZShrPD1lKXt2YXIgcnM9ZGVjb2RlSHVmZm1hbihjb21wb25lbnQuaHVmZm1hblRhYmxlQUMpO3ZhciBzPXJzJjE1LHI9cnM+PjQ7aWYocz09PTApe2lmKHI8MTUpe2VvYnJ1bj1yZWNlaXZlKHIpKygxPDxyKS0xO2JyZWFrO30Kays9MTY7Y29udGludWU7fQprKz1yO3ZhciB6PWRjdFppZ1phZ1trXTt6elt6XT1yZWNlaXZlQW5kRXh0ZW5kKHMpKigxPDxzdWNjZXNzaXZlKTtrKys7fX0KdmFyIHN1Y2Nlc3NpdmVBQ1N0YXRlPTAsc3VjY2Vzc2l2ZUFDTmV4dFZhbHVlO2Z1bmN0aW9uIGRlY29kZUFDU3VjY2Vzc2l2ZShjb21wb25lbnQsenope3ZhciBrPXNwZWN0cmFsU3RhcnQsZT1zcGVjdHJhbEVuZCxyPTA7d2hpbGUoazw9ZSl7dmFyIHo9ZGN0WmlnWmFnW2tdO3ZhciBkaXJlY3Rpb249enpbel08MD8tMToxO3N3aXRjaChzdWNjZXNzaXZlQUNTdGF0ZSl7Y2FzZSAwOnZhciBycz1kZWNvZGVIdWZmbWFuKGNvbXBvbmVudC5odWZmbWFuVGFibGVBQyk7dmFyIHM9cnMmMTUscj1ycz4+NDtpZihzPT09MCl7aWYocjwxNSl7ZW9icnVuPXJlY2VpdmUocikrKDE8PHIpO3N1Y2Nlc3NpdmVBQ1N0YXRlPTQ7fWVsc2V7cj0xNjtzdWNjZXNzaXZlQUNTdGF0ZT0xO319ZWxzZXtpZihzIT09MSkKdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIEFDbiBlbmNvZGluZyIpO3N1Y2Nlc3NpdmVBQ05leHRWYWx1ZT1yZWNlaXZlQW5kRXh0ZW5kKHMpO3N1Y2Nlc3NpdmVBQ1N0YXRlPXI/MjozO30KY29udGludWU7Y2FzZSAxOmNhc2UgMjppZih6elt6XSkKenpbel0rPShyZWFkQml0KCk8PHN1Y2Nlc3NpdmUpKmRpcmVjdGlvbjtlbHNle3ItLTtpZihyPT09MCkKc3VjY2Vzc2l2ZUFDU3RhdGU9c3VjY2Vzc2l2ZUFDU3RhdGU9PTI/MzowO30KYnJlYWs7Y2FzZSAzOmlmKHp6W3pdKQp6elt6XSs9KHJlYWRCaXQoKTw8c3VjY2Vzc2l2ZSkqZGlyZWN0aW9uO2Vsc2V7enpbel09c3VjY2Vzc2l2ZUFDTmV4dFZhbHVlPDxzdWNjZXNzaXZlO3N1Y2Nlc3NpdmVBQ1N0YXRlPTA7fQpicmVhaztjYXNlIDQ6aWYoenpbel0pCnp6W3pdKz0ocmVhZEJpdCgpPDxzdWNjZXNzaXZlKSpkaXJlY3Rpb247YnJlYWs7fQprKys7fQppZihzdWNjZXNzaXZlQUNTdGF0ZT09PTQpe2VvYnJ1bi0tO2lmKGVvYnJ1bj09PTApCnN1Y2Nlc3NpdmVBQ1N0YXRlPTA7fX0KZnVuY3Rpb24gZGVjb2RlTWN1KGNvbXBvbmVudCxkZWNvZGUsbWN1LHJvdyxjb2wpe3ZhciBtY3VSb3c9KG1jdS9tY3VzUGVyTGluZSl8MDt2YXIgbWN1Q29sPW1jdSVtY3VzUGVyTGluZTt2YXIgYmxvY2tSb3c9bWN1Um93KmNvbXBvbmVudC52K3Jvdzt2YXIgYmxvY2tDb2w9bWN1Q29sKmNvbXBvbmVudC5oK2NvbDtkZWNvZGUoY29tcG9uZW50LGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddW2Jsb2NrQ29sXSk7fQpmdW5jdGlvbiBkZWNvZGVCbG9jayhjb21wb25lbnQsZGVjb2RlLG1jdSl7dmFyIGJsb2NrUm93PShtY3UvY29tcG9uZW50LmJsb2Nrc1BlckxpbmUpfDA7dmFyIGJsb2NrQ29sPW1jdSVjb21wb25lbnQuYmxvY2tzUGVyTGluZTtkZWNvZGUoY29tcG9uZW50LGNvbXBvbmVudC5ibG9ja3NbYmxvY2tSb3ddW2Jsb2NrQ29sXSk7fQp2YXIgY29tcG9uZW50c0xlbmd0aD1jb21wb25lbnRzLmxlbmd0aDt2YXIgY29tcG9uZW50LGksaixrLG47dmFyIGRlY29kZUZuO2lmKHByb2dyZXNzaXZlKXtpZihzcGVjdHJhbFN0YXJ0PT09MCkKZGVjb2RlRm49c3VjY2Vzc2l2ZVByZXY9PT0wP2RlY29kZURDRmlyc3Q6ZGVjb2RlRENTdWNjZXNzaXZlO2Vsc2UKZGVjb2RlRm49c3VjY2Vzc2l2ZVByZXY9PT0wP2RlY29kZUFDRmlyc3Q6ZGVjb2RlQUNTdWNjZXNzaXZlO31lbHNle2RlY29kZUZuPWRlY29kZUJhc2VsaW5lO30KdmFyIG1jdT0wLG1hcmtlcjt2YXIgbWN1RXhwZWN0ZWQ7aWYoY29tcG9uZW50c0xlbmd0aD09MSl7bWN1RXhwZWN0ZWQ9Y29tcG9uZW50c1swXS5ibG9ja3NQZXJMaW5lKmNvbXBvbmVudHNbMF0uYmxvY2tzUGVyQ29sdW1uO31lbHNle21jdUV4cGVjdGVkPW1jdXNQZXJMaW5lKmZyYW1lLm1jdXNQZXJDb2x1bW47fQppZighcmVzZXRJbnRlcnZhbClyZXNldEludGVydmFsPW1jdUV4cGVjdGVkO3ZhciBoLHY7d2hpbGUobWN1PG1jdUV4cGVjdGVkKXtmb3IoaT0wO2k8Y29tcG9uZW50c0xlbmd0aDtpKyspCmNvbXBvbmVudHNbaV0ucHJlZD0wO2VvYnJ1bj0wO2lmKGNvbXBvbmVudHNMZW5ndGg9PTEpe2NvbXBvbmVudD1jb21wb25lbnRzWzBdO2ZvcihuPTA7bjxyZXNldEludGVydmFsO24rKyl7ZGVjb2RlQmxvY2soY29tcG9uZW50LGRlY29kZUZuLG1jdSk7bWN1Kys7fX1lbHNle2ZvcihuPTA7bjxyZXNldEludGVydmFsO24rKyl7Zm9yKGk9MDtpPGNvbXBvbmVudHNMZW5ndGg7aSsrKXtjb21wb25lbnQ9Y29tcG9uZW50c1tpXTtoPWNvbXBvbmVudC5oO3Y9Y29tcG9uZW50LnY7Zm9yKGo9MDtqPHY7aisrKXtmb3Ioaz0wO2s8aDtrKyspe2RlY29kZU1jdShjb21wb25lbnQsZGVjb2RlRm4sbWN1LGosayk7fX19Cm1jdSsrO2lmKG1jdT09PW1jdUV4cGVjdGVkKWJyZWFrO319CmJpdHNDb3VudD0wO21hcmtlcj0oZGF0YVtvZmZzZXRdPDw4KXxkYXRhW29mZnNldCsxXTtpZihtYXJrZXI8MHhGRjAwKXt0aHJvdyBuZXcgRXJyb3IoIm1hcmtlciB3YXMgbm90IGZvdW5kIik7fQppZihtYXJrZXI+PTB4RkZEMCYmbWFya2VyPD0weEZGRDcpe29mZnNldCs9Mjt9CmVsc2UKYnJlYWs7fQpyZXR1cm4gb2Zmc2V0LXN0YXJ0T2Zmc2V0O30KZnVuY3Rpb24gYnVpbGRDb21wb25lbnREYXRhKGZyYW1lLGNvbXBvbmVudCl7dmFyIGxpbmVzPVtdO3ZhciBibG9ja3NQZXJMaW5lPWNvbXBvbmVudC5ibG9ja3NQZXJMaW5lO3ZhciBibG9ja3NQZXJDb2x1bW49Y29tcG9uZW50LmJsb2Nrc1BlckNvbHVtbjt2YXIgc2FtcGxlc1BlckxpbmU9YmxvY2tzUGVyTGluZTw8Mzt2YXIgUj1uZXcgSW50MzJBcnJheSg2NCkscj1uZXcgVWludDhBcnJheSg2NCk7ZnVuY3Rpb24gcXVhbnRpemVBbmRJbnZlcnNlKHp6LGRhdGFPdXQsZGF0YUluKXt2YXIgcXQ9Y29tcG9uZW50LnF1YW50aXphdGlvblRhYmxlO3ZhciB2MCx2MSx2Mix2Myx2NCx2NSx2Nix2Nyx0O3ZhciBwPWRhdGFJbjt2YXIgaTtmb3IoaT0wO2k8NjQ7aSsrKQpwW2ldPXp6W2ldKnF0W2ldO2ZvcihpPTA7aTw4OysraSl7dmFyIHJvdz04Kmk7aWYocFsxK3Jvd109PTAmJnBbMityb3ddPT0wJiZwWzMrcm93XT09MCYmcFs0K3Jvd109PTAmJnBbNStyb3ddPT0wJiZwWzYrcm93XT09MCYmcFs3K3Jvd109PTApe3Q9KGRjdFNxcnQyKnBbMCtyb3ddKzUxMik+PjEwO3BbMCtyb3ddPXQ7cFsxK3Jvd109dDtwWzIrcm93XT10O3BbMytyb3ddPXQ7cFs0K3Jvd109dDtwWzUrcm93XT10O3BbNityb3ddPXQ7cFs3K3Jvd109dDtjb250aW51ZTt9CnYwPShkY3RTcXJ0MipwWzArcm93XSsxMjgpPj44O3YxPShkY3RTcXJ0MipwWzQrcm93XSsxMjgpPj44O3YyPXBbMityb3ddO3YzPXBbNityb3ddO3Y0PShkY3RTcXJ0MWQyKihwWzErcm93XS1wWzcrcm93XSkrMTI4KT4+ODt2Nz0oZGN0U3FydDFkMioocFsxK3Jvd10rcFs3K3Jvd10pKzEyOCk+Pjg7djU9cFszK3Jvd108PDQ7djY9cFs1K3Jvd108PDQ7dD0odjAtdjErMSk+PjE7djA9KHYwK3YxKzEpPj4xO3YxPXQ7dD0odjIqZGN0U2luNit2MypkY3RDb3M2KzEyOCk+Pjg7djI9KHYyKmRjdENvczYtdjMqZGN0U2luNisxMjgpPj44O3YzPXQ7dD0odjQtdjYrMSk+PjE7djQ9KHY0K3Y2KzEpPj4xO3Y2PXQ7dD0odjcrdjUrMSk+PjE7djU9KHY3LXY1KzEpPj4xO3Y3PXQ7dD0odjAtdjMrMSk+PjE7djA9KHYwK3YzKzEpPj4xO3YzPXQ7dD0odjEtdjIrMSk+PjE7djE9KHYxK3YyKzEpPj4xO3YyPXQ7dD0odjQqZGN0U2luMyt2NypkY3RDb3MzKzIwNDgpPj4xMjt2ND0odjQqZGN0Q29zMy12NypkY3RTaW4zKzIwNDgpPj4xMjt2Nz10O3Q9KHY1KmRjdFNpbjErdjYqZGN0Q29zMSsyMDQ4KT4+MTI7djU9KHY1KmRjdENvczEtdjYqZGN0U2luMSsyMDQ4KT4+MTI7djY9dDtwWzArcm93XT12MCt2NztwWzcrcm93XT12MC12NztwWzErcm93XT12MSt2NjtwWzYrcm93XT12MS12NjtwWzIrcm93XT12Mit2NTtwWzUrcm93XT12Mi12NTtwWzMrcm93XT12Myt2NDtwWzQrcm93XT12My12NDt9CmZvcihpPTA7aTw4OysraSl7dmFyIGNvbD1pO2lmKHBbMSo4K2NvbF09PTAmJnBbMio4K2NvbF09PTAmJnBbMyo4K2NvbF09PTAmJnBbNCo4K2NvbF09PTAmJnBbNSo4K2NvbF09PTAmJnBbNio4K2NvbF09PTAmJnBbNyo4K2NvbF09PTApe3Q9KGRjdFNxcnQyKmRhdGFJbltpKzBdKzgxOTIpPj4xNDtwWzAqOCtjb2xdPXQ7cFsxKjgrY29sXT10O3BbMio4K2NvbF09dDtwWzMqOCtjb2xdPXQ7cFs0KjgrY29sXT10O3BbNSo4K2NvbF09dDtwWzYqOCtjb2xdPXQ7cFs3KjgrY29sXT10O2NvbnRpbnVlO30KdjA9KGRjdFNxcnQyKnBbMCo4K2NvbF0rMjA0OCk+PjEyO3YxPShkY3RTcXJ0MipwWzQqOCtjb2xdKzIwNDgpPj4xMjt2Mj1wWzIqOCtjb2xdO3YzPXBbNio4K2NvbF07djQ9KGRjdFNxcnQxZDIqKHBbMSo4K2NvbF0tcFs3KjgrY29sXSkrMjA0OCk+PjEyO3Y3PShkY3RTcXJ0MWQyKihwWzEqOCtjb2xdK3BbNyo4K2NvbF0pKzIwNDgpPj4xMjt2NT1wWzMqOCtjb2xdO3Y2PXBbNSo4K2NvbF07dD0odjAtdjErMSk+PjE7djA9KHYwK3YxKzEpPj4xO3YxPXQ7dD0odjIqZGN0U2luNit2MypkY3RDb3M2KzIwNDgpPj4xMjt2Mj0odjIqZGN0Q29zNi12MypkY3RTaW42KzIwNDgpPj4xMjt2Mz10O3Q9KHY0LXY2KzEpPj4xO3Y0PSh2NCt2NisxKT4+MTt2Nj10O3Q9KHY3K3Y1KzEpPj4xO3Y1PSh2Ny12NSsxKT4+MTt2Nz10O3Q9KHYwLXYzKzEpPj4xO3YwPSh2MCt2MysxKT4+MTt2Mz10O3Q9KHYxLXYyKzEpPj4xO3YxPSh2MSt2MisxKT4+MTt2Mj10O3Q9KHY0KmRjdFNpbjMrdjcqZGN0Q29zMysyMDQ4KT4+MTI7djQ9KHY0KmRjdENvczMtdjcqZGN0U2luMysyMDQ4KT4+MTI7djc9dDt0PSh2NSpkY3RTaW4xK3Y2KmRjdENvczErMjA0OCk+PjEyO3Y1PSh2NSpkY3RDb3MxLXY2KmRjdFNpbjErMjA0OCk+PjEyO3Y2PXQ7cFswKjgrY29sXT12MCt2NztwWzcqOCtjb2xdPXYwLXY3O3BbMSo4K2NvbF09djErdjY7cFs2KjgrY29sXT12MS12NjtwWzIqOCtjb2xdPXYyK3Y1O3BbNSo4K2NvbF09djItdjU7cFszKjgrY29sXT12Myt2NDtwWzQqOCtjb2xdPXYzLXY0O30KZm9yKGk9MDtpPDY0OysraSl7dmFyIHNhbXBsZT0xMjgrKChwW2ldKzgpPj40KTtkYXRhT3V0W2ldPXNhbXBsZTwwPzA6c2FtcGxlPjB4RkY/MHhGRjpzYW1wbGU7fX0KdmFyIGksajtmb3IodmFyIGJsb2NrUm93PTA7YmxvY2tSb3c8YmxvY2tzUGVyQ29sdW1uO2Jsb2NrUm93Kyspe3ZhciBzY2FuTGluZT1ibG9ja1Jvdzw8Mztmb3IoaT0wO2k8ODtpKyspCmxpbmVzLnB1c2gobmV3IFVpbnQ4QXJyYXkoc2FtcGxlc1BlckxpbmUpKTtmb3IodmFyIGJsb2NrQ29sPTA7YmxvY2tDb2w8YmxvY2tzUGVyTGluZTtibG9ja0NvbCsrKXtxdWFudGl6ZUFuZEludmVyc2UoY29tcG9uZW50LmJsb2Nrc1tibG9ja1Jvd11bYmxvY2tDb2xdLHIsUik7dmFyIG9mZnNldD0wLHNhbXBsZT1ibG9ja0NvbDw8Mztmb3Ioaj0wO2o8ODtqKyspe3ZhciBsaW5lPWxpbmVzW3NjYW5MaW5lK2pdO2ZvcihpPTA7aTw4O2krKykKbGluZVtzYW1wbGUraV09cltvZmZzZXQrK107fX19CnJldHVybiBsaW5lczt9CmZ1bmN0aW9uIGNsYW1wVG84Yml0KGEpe3JldHVybiBhPDA/MDphPjI1NT8yNTU6YTt9CmNvbnN0cnVjdG9yLnByb3RvdHlwZT17bG9hZDpmdW5jdGlvbiBsb2FkKHBhdGgpe3ZhciB4aHI9bmV3IFhNTEh0dHBSZXF1ZXN0KCk7eGhyLm9wZW4oIkdFVCIscGF0aCx0cnVlKTt4aHIucmVzcG9uc2VUeXBlPSJhcnJheWJ1ZmZlciI7eGhyLm9ubG9hZD0oZnVuY3Rpb24oKXt2YXIgZGF0YT1uZXcgVWludDhBcnJheSh4aHIucmVzcG9uc2V8fHhoci5tb3pSZXNwb25zZUFycmF5QnVmZmVyKTt0aGlzLnBhcnNlKGRhdGEpO2lmKHRoaXMub25sb2FkKQp0aGlzLm9ubG9hZCgpO30pLmJpbmQodGhpcyk7eGhyLnNlbmQobnVsbCk7fSxwYXJzZTpmdW5jdGlvbiBwYXJzZShkYXRhKXt2YXIgb2Zmc2V0PTAsbGVuZ3RoPWRhdGEubGVuZ3RoO2Z1bmN0aW9uIHJlYWRVaW50MTYoKXt2YXIgdmFsdWU9KGRhdGFbb2Zmc2V0XTw8OCl8ZGF0YVtvZmZzZXQrMV07b2Zmc2V0Kz0yO3JldHVybiB2YWx1ZTt9CmZ1bmN0aW9uIHJlYWREYXRhQmxvY2soKXt2YXIgbGVuZ3RoPXJlYWRVaW50MTYoKTt2YXIgYXJyYXk9ZGF0YS5zdWJhcnJheShvZmZzZXQsb2Zmc2V0K2xlbmd0aC0yKTtvZmZzZXQrPWFycmF5Lmxlbmd0aDtyZXR1cm4gYXJyYXk7fQpmdW5jdGlvbiBwcmVwYXJlQ29tcG9uZW50cyhmcmFtZSl7dmFyIG1heEg9MCxtYXhWPTA7dmFyIGNvbXBvbmVudCxjb21wb25lbnRJZDtmb3IoY29tcG9uZW50SWQgaW4gZnJhbWUuY29tcG9uZW50cyl7aWYoZnJhbWUuY29tcG9uZW50cy5oYXNPd25Qcm9wZXJ0eShjb21wb25lbnRJZCkpe2NvbXBvbmVudD1mcmFtZS5jb21wb25lbnRzW2NvbXBvbmVudElkXTtpZihtYXhIPGNvbXBvbmVudC5oKW1heEg9Y29tcG9uZW50Lmg7aWYobWF4Vjxjb21wb25lbnQudiltYXhWPWNvbXBvbmVudC52O319CnZhciBtY3VzUGVyTGluZT1NYXRoLmNlaWwoZnJhbWUuc2FtcGxlc1BlckxpbmUvOC9tYXhIKTt2YXIgbWN1c1BlckNvbHVtbj1NYXRoLmNlaWwoZnJhbWUuc2NhbkxpbmVzLzgvbWF4Vik7Zm9yKGNvbXBvbmVudElkIGluIGZyYW1lLmNvbXBvbmVudHMpe2lmKGZyYW1lLmNvbXBvbmVudHMuaGFzT3duUHJvcGVydHkoY29tcG9uZW50SWQpKXtjb21wb25lbnQ9ZnJhbWUuY29tcG9uZW50c1tjb21wb25lbnRJZF07dmFyIGJsb2Nrc1BlckxpbmU9TWF0aC5jZWlsKE1hdGguY2VpbChmcmFtZS5zYW1wbGVzUGVyTGluZS84KSpjb21wb25lbnQuaC9tYXhIKTt2YXIgYmxvY2tzUGVyQ29sdW1uPU1hdGguY2VpbChNYXRoLmNlaWwoZnJhbWUuc2NhbkxpbmVzLzgpKmNvbXBvbmVudC52L21heFYpO3ZhciBibG9ja3NQZXJMaW5lRm9yTWN1PW1jdXNQZXJMaW5lKmNvbXBvbmVudC5oO3ZhciBibG9ja3NQZXJDb2x1bW5Gb3JNY3U9bWN1c1BlckNvbHVtbipjb21wb25lbnQudjt2YXIgYmxvY2tzPVtdO2Zvcih2YXIgaT0wO2k8YmxvY2tzUGVyQ29sdW1uRm9yTWN1O2krKyl7dmFyIHJvdz1bXTtmb3IodmFyIGo9MDtqPGJsb2Nrc1BlckxpbmVGb3JNY3U7aisrKQpyb3cucHVzaChuZXcgSW50MzJBcnJheSg2NCkpO2Jsb2Nrcy5wdXNoKHJvdyk7fQpjb21wb25lbnQuYmxvY2tzUGVyTGluZT1ibG9ja3NQZXJMaW5lO2NvbXBvbmVudC5ibG9ja3NQZXJDb2x1bW49YmxvY2tzUGVyQ29sdW1uO2NvbXBvbmVudC5ibG9ja3M9YmxvY2tzO319CmZyYW1lLm1heEg9bWF4SDtmcmFtZS5tYXhWPW1heFY7ZnJhbWUubWN1c1BlckxpbmU9bWN1c1BlckxpbmU7ZnJhbWUubWN1c1BlckNvbHVtbj1tY3VzUGVyQ29sdW1uO30KdmFyIGpmaWY9bnVsbDt2YXIgYWRvYmU9bnVsbDt2YXIgcGl4ZWxzPW51bGw7dmFyIGZyYW1lLHJlc2V0SW50ZXJ2YWw7dmFyIHF1YW50aXphdGlvblRhYmxlcz1bXSxmcmFtZXM9W107dmFyIGh1ZmZtYW5UYWJsZXNBQz1bXSxodWZmbWFuVGFibGVzREM9W107dmFyIGZpbGVNYXJrZXI9cmVhZFVpbnQxNigpO2lmKGZpbGVNYXJrZXIhPTB4RkZEOCl7dGhyb3cgbmV3IEVycm9yKCJTT0kgbm90IGZvdW5kIik7fQpmaWxlTWFya2VyPXJlYWRVaW50MTYoKTt3aGlsZShmaWxlTWFya2VyIT0weEZGRDkpe3ZhciBpLGosbDtzd2l0Y2goZmlsZU1hcmtlcil7Y2FzZSAweEZGMDA6YnJlYWs7Y2FzZSAweEZGRTA6Y2FzZSAweEZGRTE6Y2FzZSAweEZGRTI6Y2FzZSAweEZGRTM6Y2FzZSAweEZGRTQ6Y2FzZSAweEZGRTU6Y2FzZSAweEZGRTY6Y2FzZSAweEZGRTc6Y2FzZSAweEZGRTg6Y2FzZSAweEZGRTk6Y2FzZSAweEZGRUE6Y2FzZSAweEZGRUI6Y2FzZSAweEZGRUM6Y2FzZSAweEZGRUQ6Y2FzZSAweEZGRUU6Y2FzZSAweEZGRUY6Y2FzZSAweEZGRkU6dmFyIGFwcERhdGE9cmVhZERhdGFCbG9jaygpO2lmKGZpbGVNYXJrZXI9PT0weEZGRTApe2lmKGFwcERhdGFbMF09PT0weDRBJiZhcHBEYXRhWzFdPT09MHg0NiYmYXBwRGF0YVsyXT09PTB4NDkmJmFwcERhdGFbM109PT0weDQ2JiZhcHBEYXRhWzRdPT09MCl7amZpZj17dmVyc2lvbjp7bWFqb3I6YXBwRGF0YVs1XSxtaW5vcjphcHBEYXRhWzZdfSxkZW5zaXR5VW5pdHM6YXBwRGF0YVs3XSx4RGVuc2l0eTooYXBwRGF0YVs4XTw8OCl8YXBwRGF0YVs5XSx5RGVuc2l0eTooYXBwRGF0YVsxMF08PDgpfGFwcERhdGFbMTFdLHRodW1iV2lkdGg6YXBwRGF0YVsxMl0sdGh1bWJIZWlnaHQ6YXBwRGF0YVsxM10sdGh1bWJEYXRhOmFwcERhdGEuc3ViYXJyYXkoMTQsMTQrMyphcHBEYXRhWzEyXSphcHBEYXRhWzEzXSl9O319CmlmKGZpbGVNYXJrZXI9PT0weEZGRUUpe2lmKGFwcERhdGFbMF09PT0weDQxJiZhcHBEYXRhWzFdPT09MHg2NCYmYXBwRGF0YVsyXT09PTB4NkYmJmFwcERhdGFbM109PT0weDYyJiZhcHBEYXRhWzRdPT09MHg2NSYmYXBwRGF0YVs1XT09PTApe2Fkb2JlPXt2ZXJzaW9uOmFwcERhdGFbNl0sZmxhZ3MwOihhcHBEYXRhWzddPDw4KXxhcHBEYXRhWzhdLGZsYWdzMTooYXBwRGF0YVs5XTw8OCl8YXBwRGF0YVsxMF0sdHJhbnNmb3JtQ29kZTphcHBEYXRhWzExXX07fX0KYnJlYWs7Y2FzZSAweEZGREI6dmFyIHF1YW50aXphdGlvblRhYmxlc0xlbmd0aD1yZWFkVWludDE2KCk7dmFyIHF1YW50aXphdGlvblRhYmxlc0VuZD1xdWFudGl6YXRpb25UYWJsZXNMZW5ndGgrb2Zmc2V0LTI7d2hpbGUob2Zmc2V0PHF1YW50aXphdGlvblRhYmxlc0VuZCl7dmFyIHF1YW50aXphdGlvblRhYmxlU3BlYz1kYXRhW29mZnNldCsrXTt2YXIgdGFibGVEYXRhPW5ldyBJbnQzMkFycmF5KDY0KTtpZigocXVhbnRpemF0aW9uVGFibGVTcGVjPj40KT09PTApe2ZvcihqPTA7ajw2NDtqKyspe3ZhciB6PWRjdFppZ1phZ1tqXTt0YWJsZURhdGFbel09ZGF0YVtvZmZzZXQrK107fX1lbHNlIGlmKChxdWFudGl6YXRpb25UYWJsZVNwZWM+PjQpPT09MSl7Zm9yKGo9MDtqPDY0O2orKyl7dmFyIHo9ZGN0WmlnWmFnW2pdO3RhYmxlRGF0YVt6XT1yZWFkVWludDE2KCk7fX1lbHNlCnRocm93IG5ldyBFcnJvcigiRFFUOiBpbnZhbGlkIHRhYmxlIHNwZWMiKTtxdWFudGl6YXRpb25UYWJsZXNbcXVhbnRpemF0aW9uVGFibGVTcGVjJjE1XT10YWJsZURhdGE7fQpicmVhaztjYXNlIDB4RkZDMDpjYXNlIDB4RkZDMTpjYXNlIDB4RkZDMjpyZWFkVWludDE2KCk7ZnJhbWU9e307ZnJhbWUuZXh0ZW5kZWQ9KGZpbGVNYXJrZXI9PT0weEZGQzEpO2ZyYW1lLnByb2dyZXNzaXZlPShmaWxlTWFya2VyPT09MHhGRkMyKTtmcmFtZS5wcmVjaXNpb249ZGF0YVtvZmZzZXQrK107ZnJhbWUuc2NhbkxpbmVzPXJlYWRVaW50MTYoKTtmcmFtZS5zYW1wbGVzUGVyTGluZT1yZWFkVWludDE2KCk7ZnJhbWUuY29tcG9uZW50cz17fTtmcmFtZS5jb21wb25lbnRzT3JkZXI9W107dmFyIGNvbXBvbmVudHNDb3VudD1kYXRhW29mZnNldCsrXSxjb21wb25lbnRJZDt2YXIgbWF4SD0wLG1heFY9MDtmb3IoaT0wO2k8Y29tcG9uZW50c0NvdW50O2krKyl7Y29tcG9uZW50SWQ9ZGF0YVtvZmZzZXRdO3ZhciBoPWRhdGFbb2Zmc2V0KzFdPj40O3ZhciB2PWRhdGFbb2Zmc2V0KzFdJjE1O3ZhciBxSWQ9ZGF0YVtvZmZzZXQrMl07ZnJhbWUuY29tcG9uZW50c09yZGVyLnB1c2goY29tcG9uZW50SWQpO2ZyYW1lLmNvbXBvbmVudHNbY29tcG9uZW50SWRdPXtoOmgsdjp2LHF1YW50aXphdGlvbklkeDpxSWR9O29mZnNldCs9Mzt9CnByZXBhcmVDb21wb25lbnRzKGZyYW1lKTtmcmFtZXMucHVzaChmcmFtZSk7YnJlYWs7Y2FzZSAweEZGQzQ6dmFyIGh1ZmZtYW5MZW5ndGg9cmVhZFVpbnQxNigpO2ZvcihpPTI7aTxodWZmbWFuTGVuZ3RoOyl7dmFyIGh1ZmZtYW5UYWJsZVNwZWM9ZGF0YVtvZmZzZXQrK107dmFyIGNvZGVMZW5ndGhzPW5ldyBVaW50OEFycmF5KDE2KTt2YXIgY29kZUxlbmd0aFN1bT0wO2ZvcihqPTA7ajwxNjtqKyssb2Zmc2V0KyspCmNvZGVMZW5ndGhTdW0rPShjb2RlTGVuZ3Roc1tqXT1kYXRhW29mZnNldF0pO3ZhciBodWZmbWFuVmFsdWVzPW5ldyBVaW50OEFycmF5KGNvZGVMZW5ndGhTdW0pO2ZvcihqPTA7ajxjb2RlTGVuZ3RoU3VtO2orKyxvZmZzZXQrKykKaHVmZm1hblZhbHVlc1tqXT1kYXRhW29mZnNldF07aSs9MTcrY29kZUxlbmd0aFN1bTsoKGh1ZmZtYW5UYWJsZVNwZWM+PjQpPT09MD9odWZmbWFuVGFibGVzREM6aHVmZm1hblRhYmxlc0FDKVtodWZmbWFuVGFibGVTcGVjJjE1XT1idWlsZEh1ZmZtYW5UYWJsZShjb2RlTGVuZ3RocyxodWZmbWFuVmFsdWVzKTt9CmJyZWFrO2Nhc2UgMHhGRkREOnJlYWRVaW50MTYoKTtyZXNldEludGVydmFsPXJlYWRVaW50MTYoKTticmVhaztjYXNlIDB4RkZEQTp2YXIgc2Nhbkxlbmd0aD1yZWFkVWludDE2KCk7dmFyIHNlbGVjdG9yc0NvdW50PWRhdGFbb2Zmc2V0KytdO3ZhciBjb21wb25lbnRzPVtdLGNvbXBvbmVudDtmb3IoaT0wO2k8c2VsZWN0b3JzQ291bnQ7aSsrKXtjb21wb25lbnQ9ZnJhbWUuY29tcG9uZW50c1tkYXRhW29mZnNldCsrXV07dmFyIHRhYmxlU3BlYz1kYXRhW29mZnNldCsrXTtjb21wb25lbnQuaHVmZm1hblRhYmxlREM9aHVmZm1hblRhYmxlc0RDW3RhYmxlU3BlYz4+NF07Y29tcG9uZW50Lmh1ZmZtYW5UYWJsZUFDPWh1ZmZtYW5UYWJsZXNBQ1t0YWJsZVNwZWMmMTVdO2NvbXBvbmVudHMucHVzaChjb21wb25lbnQpO30KdmFyIHNwZWN0cmFsU3RhcnQ9ZGF0YVtvZmZzZXQrK107dmFyIHNwZWN0cmFsRW5kPWRhdGFbb2Zmc2V0KytdO3ZhciBzdWNjZXNzaXZlQXBwcm94aW1hdGlvbj1kYXRhW29mZnNldCsrXTt2YXIgcHJvY2Vzc2VkPWRlY29kZVNjYW4oZGF0YSxvZmZzZXQsZnJhbWUsY29tcG9uZW50cyxyZXNldEludGVydmFsLHNwZWN0cmFsU3RhcnQsc3BlY3RyYWxFbmQsc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24+PjQsc3VjY2Vzc2l2ZUFwcHJveGltYXRpb24mMTUpO29mZnNldCs9cHJvY2Vzc2VkO2JyZWFrO2Nhc2UgMHhGRkZGOmlmKGRhdGFbb2Zmc2V0XSE9PTB4RkYpe29mZnNldC0tO30KYnJlYWs7ZGVmYXVsdDppZihkYXRhW29mZnNldC0zXT09MHhGRiYmZGF0YVtvZmZzZXQtMl0+PTB4QzAmJmRhdGFbb2Zmc2V0LTJdPD0weEZFKXtvZmZzZXQtPTM7YnJlYWs7fQp0aHJvdyBuZXcgRXJyb3IoInVua25vd24gSlBFRyBtYXJrZXIgIitmaWxlTWFya2VyLnRvU3RyaW5nKDE2KSk7fQpmaWxlTWFya2VyPXJlYWRVaW50MTYoKTt9CmlmKGZyYW1lcy5sZW5ndGghPTEpCnRocm93IG5ldyBFcnJvcigib25seSBzaW5nbGUgZnJhbWUgSlBFR3Mgc3VwcG9ydGVkIik7Zm9yKHZhciBpPTA7aTxmcmFtZXMubGVuZ3RoO2krKyl7dmFyIGNwPWZyYW1lc1tpXS5jb21wb25lbnRzO2Zvcih2YXIgaiBpbiBjcCl7Y3Bbal0ucXVhbnRpemF0aW9uVGFibGU9cXVhbnRpemF0aW9uVGFibGVzW2NwW2pdLnF1YW50aXphdGlvbklkeF07ZGVsZXRlIGNwW2pdLnF1YW50aXphdGlvbklkeDt9fQp0aGlzLndpZHRoPWZyYW1lLnNhbXBsZXNQZXJMaW5lO3RoaXMuaGVpZ2h0PWZyYW1lLnNjYW5MaW5lczt0aGlzLmpmaWY9amZpZjt0aGlzLmFkb2JlPWFkb2JlO3RoaXMuY29tcG9uZW50cz1bXTtmb3IodmFyIGk9MDtpPGZyYW1lLmNvbXBvbmVudHNPcmRlci5sZW5ndGg7aSsrKXt2YXIgY29tcG9uZW50PWZyYW1lLmNvbXBvbmVudHNbZnJhbWUuY29tcG9uZW50c09yZGVyW2ldXTt0aGlzLmNvbXBvbmVudHMucHVzaCh7bGluZXM6YnVpbGRDb21wb25lbnREYXRhKGZyYW1lLGNvbXBvbmVudCksc2NhbGVYOmNvbXBvbmVudC5oL2ZyYW1lLm1heEgsc2NhbGVZOmNvbXBvbmVudC52L2ZyYW1lLm1heFZ9KTt9fSxnZXREYXRhOmZ1bmN0aW9uIGdldERhdGEod2lkdGgsaGVpZ2h0KXt2YXIgc2NhbGVYPXRoaXMud2lkdGgvd2lkdGgsc2NhbGVZPXRoaXMuaGVpZ2h0L2hlaWdodDt2YXIgY29tcG9uZW50MSxjb21wb25lbnQyLGNvbXBvbmVudDMsY29tcG9uZW50NDt2YXIgY29tcG9uZW50MUxpbmUsY29tcG9uZW50MkxpbmUsY29tcG9uZW50M0xpbmUsY29tcG9uZW50NExpbmU7dmFyIHgseTt2YXIgb2Zmc2V0PTA7dmFyIFksQ2IsQ3IsSyxDLE0sWWUsUixHLEI7dmFyIGNvbG9yVHJhbnNmb3JtO3ZhciBkYXRhTGVuZ3RoPXdpZHRoKmhlaWdodCp0aGlzLmNvbXBvbmVudHMubGVuZ3RoO3ZhciBkYXRhPW5ldyBVaW50OEFycmF5KGRhdGFMZW5ndGgpO3N3aXRjaCh0aGlzLmNvbXBvbmVudHMubGVuZ3RoKXtjYXNlIDE6Y29tcG9uZW50MT10aGlzLmNvbXBvbmVudHNbMF07Zm9yKHk9MDt5PGhlaWdodDt5Kyspe2NvbXBvbmVudDFMaW5lPWNvbXBvbmVudDEubGluZXNbMHwoeSpjb21wb25lbnQxLnNjYWxlWSpzY2FsZVkpXTtmb3IoeD0wO3g8d2lkdGg7eCsrKXtZPWNvbXBvbmVudDFMaW5lWzB8KHgqY29tcG9uZW50MS5zY2FsZVgqc2NhbGVYKV07ZGF0YVtvZmZzZXQrK109WTt9fQpicmVhaztjYXNlIDI6Y29tcG9uZW50MT10aGlzLmNvbXBvbmVudHNbMF07Y29tcG9uZW50Mj10aGlzLmNvbXBvbmVudHNbMV07Zm9yKHk9MDt5PGhlaWdodDt5Kyspe2NvbXBvbmVudDFMaW5lPWNvbXBvbmVudDEubGluZXNbMHwoeSpjb21wb25lbnQxLnNjYWxlWSpzY2FsZVkpXTtjb21wb25lbnQyTGluZT1jb21wb25lbnQyLmxpbmVzWzB8KHkqY29tcG9uZW50Mi5zY2FsZVkqc2NhbGVZKV07Zm9yKHg9MDt4PHdpZHRoO3grKyl7WT1jb21wb25lbnQxTGluZVswfCh4KmNvbXBvbmVudDEuc2NhbGVYKnNjYWxlWCldO2RhdGFbb2Zmc2V0KytdPVk7WT1jb21wb25lbnQyTGluZVswfCh4KmNvbXBvbmVudDIuc2NhbGVYKnNjYWxlWCldO2RhdGFbb2Zmc2V0KytdPVk7fX0KYnJlYWs7Y2FzZSAzOmNvbG9yVHJhbnNmb3JtPXRydWU7aWYodGhpcy5hZG9iZSYmdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlKQpjb2xvclRyYW5zZm9ybT10cnVlO2Vsc2UgaWYodHlwZW9mIHRoaXMuY29sb3JUcmFuc2Zvcm0hPT0ndW5kZWZpbmVkJykKY29sb3JUcmFuc2Zvcm09ISF0aGlzLmNvbG9yVHJhbnNmb3JtO2NvbXBvbmVudDE9dGhpcy5jb21wb25lbnRzWzBdO2NvbXBvbmVudDI9dGhpcy5jb21wb25lbnRzWzFdO2NvbXBvbmVudDM9dGhpcy5jb21wb25lbnRzWzJdO2Zvcih5PTA7eTxoZWlnaHQ7eSsrKXtjb21wb25lbnQxTGluZT1jb21wb25lbnQxLmxpbmVzWzB8KHkqY29tcG9uZW50MS5zY2FsZVkqc2NhbGVZKV07Y29tcG9uZW50MkxpbmU9Y29tcG9uZW50Mi5saW5lc1swfCh5KmNvbXBvbmVudDIuc2NhbGVZKnNjYWxlWSldO2NvbXBvbmVudDNMaW5lPWNvbXBvbmVudDMubGluZXNbMHwoeSpjb21wb25lbnQzLnNjYWxlWSpzY2FsZVkpXTtmb3IoeD0wO3g8d2lkdGg7eCsrKXtpZighY29sb3JUcmFuc2Zvcm0pe1I9Y29tcG9uZW50MUxpbmVbMHwoeCpjb21wb25lbnQxLnNjYWxlWCpzY2FsZVgpXTtHPWNvbXBvbmVudDJMaW5lWzB8KHgqY29tcG9uZW50Mi5zY2FsZVgqc2NhbGVYKV07Qj1jb21wb25lbnQzTGluZVswfCh4KmNvbXBvbmVudDMuc2NhbGVYKnNjYWxlWCldO31lbHNle1k9Y29tcG9uZW50MUxpbmVbMHwoeCpjb21wb25lbnQxLnNjYWxlWCpzY2FsZVgpXTtDYj1jb21wb25lbnQyTGluZVswfCh4KmNvbXBvbmVudDIuc2NhbGVYKnNjYWxlWCldO0NyPWNvbXBvbmVudDNMaW5lWzB8KHgqY29tcG9uZW50My5zY2FsZVgqc2NhbGVYKV07Uj1jbGFtcFRvOGJpdChZKzEuNDAyKihDci0xMjgpKTtHPWNsYW1wVG84Yml0KFktMC4zNDQxMzYzKihDYi0xMjgpLTAuNzE0MTM2MzYqKENyLTEyOCkpO0I9Y2xhbXBUbzhiaXQoWSsxLjc3MiooQ2ItMTI4KSk7fQpkYXRhW29mZnNldCsrXT1SO2RhdGFbb2Zmc2V0KytdPUc7ZGF0YVtvZmZzZXQrK109Qjt9fQpicmVhaztjYXNlIDQ6aWYoIXRoaXMuYWRvYmUpCnRocm93IG5ldyBFcnJvcignVW5zdXBwb3J0ZWQgY29sb3IgbW9kZSAoNCBjb21wb25lbnRzKScpO2NvbG9yVHJhbnNmb3JtPWZhbHNlO2lmKHRoaXMuYWRvYmUmJnRoaXMuYWRvYmUudHJhbnNmb3JtQ29kZSkKY29sb3JUcmFuc2Zvcm09dHJ1ZTtlbHNlIGlmKHR5cGVvZiB0aGlzLmNvbG9yVHJhbnNmb3JtIT09J3VuZGVmaW5lZCcpCmNvbG9yVHJhbnNmb3JtPSEhdGhpcy5jb2xvclRyYW5zZm9ybTtjb21wb25lbnQxPXRoaXMuY29tcG9uZW50c1swXTtjb21wb25lbnQyPXRoaXMuY29tcG9uZW50c1sxXTtjb21wb25lbnQzPXRoaXMuY29tcG9uZW50c1syXTtjb21wb25lbnQ0PXRoaXMuY29tcG9uZW50c1szXTtmb3IoeT0wO3k8aGVpZ2h0O3krKyl7Y29tcG9uZW50MUxpbmU9Y29tcG9uZW50MS5saW5lc1swfCh5KmNvbXBvbmVudDEuc2NhbGVZKnNjYWxlWSldO2NvbXBvbmVudDJMaW5lPWNvbXBvbmVudDIubGluZXNbMHwoeSpjb21wb25lbnQyLnNjYWxlWSpzY2FsZVkpXTtjb21wb25lbnQzTGluZT1jb21wb25lbnQzLmxpbmVzWzB8KHkqY29tcG9uZW50My5zY2FsZVkqc2NhbGVZKV07Y29tcG9uZW50NExpbmU9Y29tcG9uZW50NC5saW5lc1swfCh5KmNvbXBvbmVudDQuc2NhbGVZKnNjYWxlWSldO2Zvcih4PTA7eDx3aWR0aDt4Kyspe2lmKCFjb2xvclRyYW5zZm9ybSl7Qz1jb21wb25lbnQxTGluZVswfCh4KmNvbXBvbmVudDEuc2NhbGVYKnNjYWxlWCldO009Y29tcG9uZW50MkxpbmVbMHwoeCpjb21wb25lbnQyLnNjYWxlWCpzY2FsZVgpXTtZZT1jb21wb25lbnQzTGluZVswfCh4KmNvbXBvbmVudDMuc2NhbGVYKnNjYWxlWCldO0s9Y29tcG9uZW50NExpbmVbMHwoeCpjb21wb25lbnQ0LnNjYWxlWCpzY2FsZVgpXTt9ZWxzZXtZPWNvbXBvbmVudDFMaW5lWzB8KHgqY29tcG9uZW50MS5zY2FsZVgqc2NhbGVYKV07Q2I9Y29tcG9uZW50MkxpbmVbMHwoeCpjb21wb25lbnQyLnNjYWxlWCpzY2FsZVgpXTtDcj1jb21wb25lbnQzTGluZVswfCh4KmNvbXBvbmVudDMuc2NhbGVYKnNjYWxlWCldO0s9Y29tcG9uZW50NExpbmVbMHwoeCpjb21wb25lbnQ0LnNjYWxlWCpzY2FsZVgpXTtDPTI1NS1jbGFtcFRvOGJpdChZKzEuNDAyKihDci0xMjgpKTtNPTI1NS1jbGFtcFRvOGJpdChZLTAuMzQ0MTM2MyooQ2ItMTI4KS0wLjcxNDEzNjM2KihDci0xMjgpKTtZZT0yNTUtY2xhbXBUbzhiaXQoWSsxLjc3MiooQ2ItMTI4KSk7fQpkYXRhW29mZnNldCsrXT0yNTUtQztkYXRhW29mZnNldCsrXT0yNTUtTTtkYXRhW29mZnNldCsrXT0yNTUtWWU7ZGF0YVtvZmZzZXQrK109MjU1LUs7fX0KYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIG1vZGUnKTt9CnJldHVybiBkYXRhO30sY29weVRvSW1hZ2VEYXRhOmZ1bmN0aW9uIGNvcHlUb0ltYWdlRGF0YShpbWFnZURhdGEpe3ZhciB3aWR0aD1pbWFnZURhdGEud2lkdGgsaGVpZ2h0PWltYWdlRGF0YS5oZWlnaHQ7dmFyIGltYWdlRGF0YUFycmF5PWltYWdlRGF0YS5kYXRhO3ZhciBkYXRhPXRoaXMuZ2V0RGF0YSh3aWR0aCxoZWlnaHQpO3ZhciBpPTAsaj0wLHgseTt2YXIgWSxLLEMsTSxSLEcsQjtzd2l0Y2godGhpcy5jb21wb25lbnRzLmxlbmd0aCl7Y2FzZSAxOmZvcih5PTA7eTxoZWlnaHQ7eSsrKXtmb3IoeD0wO3g8d2lkdGg7eCsrKXtZPWRhdGFbaSsrXTtpbWFnZURhdGFBcnJheVtqKytdPVk7aW1hZ2VEYXRhQXJyYXlbaisrXT1ZO2ltYWdlRGF0YUFycmF5W2orK109WTtpbWFnZURhdGFBcnJheVtqKytdPTI1NTt9fQpicmVhaztjYXNlIDM6Zm9yKHk9MDt5PGhlaWdodDt5Kyspe2Zvcih4PTA7eDx3aWR0aDt4Kyspe1I9ZGF0YVtpKytdO0c9ZGF0YVtpKytdO0I9ZGF0YVtpKytdO2ltYWdlRGF0YUFycmF5W2orK109UjtpbWFnZURhdGFBcnJheVtqKytdPUc7aW1hZ2VEYXRhQXJyYXlbaisrXT1CO2ltYWdlRGF0YUFycmF5W2orK109MjU1O319CmJyZWFrO2Nhc2UgNDpmb3IoeT0wO3k8aGVpZ2h0O3krKyl7Zm9yKHg9MDt4PHdpZHRoO3grKyl7Qz1kYXRhW2krK107TT1kYXRhW2krK107WT1kYXRhW2krK107Sz1kYXRhW2krK107Uj0yNTUtY2xhbXBUbzhiaXQoQyooMS1LLzI1NSkrSyk7Rz0yNTUtY2xhbXBUbzhiaXQoTSooMS1LLzI1NSkrSyk7Qj0yNTUtY2xhbXBUbzhiaXQoWSooMS1LLzI1NSkrSyk7aW1hZ2VEYXRhQXJyYXlbaisrXT1SO2ltYWdlRGF0YUFycmF5W2orK109RztpbWFnZURhdGFBcnJheVtqKytdPUI7aW1hZ2VEYXRhQXJyYXlbaisrXT0yNTU7fX0KYnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoJ1Vuc3VwcG9ydGVkIGNvbG9yIG1vZGUnKTt9fX07cmV0dXJuIGNvbnN0cnVjdG9yO30pKCk7Z2xvYmFsLmpwZWdEZWNvZGU9ZGVjb2RlO2Z1bmN0aW9uIGRlY29kZShqcGVnRGF0YSxvcHRzKXt2YXIgZGVmYXVsdE9wdHM9e3VzZVRBcnJheTpmYWxzZSxjb2xvclRyYW5zZm9ybTp0cnVlfTtpZihvcHRzKXtpZih0eXBlb2Ygb3B0cz09PSdvYmplY3QnKXtvcHRzPXt1c2VUQXJyYXk6KHR5cGVvZiBvcHRzLnVzZVRBcnJheT09PSd1bmRlZmluZWQnP2RlZmF1bHRPcHRzLnVzZVRBcnJheTpvcHRzLnVzZVRBcnJheSksY29sb3JUcmFuc2Zvcm06KHR5cGVvZiBvcHRzLmNvbG9yVHJhbnNmb3JtPT09J3VuZGVmaW5lZCc/ZGVmYXVsdE9wdHMuY29sb3JUcmFuc2Zvcm06b3B0cy5jb2xvclRyYW5zZm9ybSl9O31lbHNle29wdHM9ZGVmYXVsdE9wdHM7b3B0cy51c2VUQXJyYXk9dHJ1ZTt9fWVsc2V7b3B0cz1kZWZhdWx0T3B0czt9CnZhciBhcnI9bmV3IFVpbnQ4QXJyYXkoanBlZ0RhdGEpO3ZhciBkZWNvZGVyPW5ldyBKcGVnSW1hZ2UoKTtkZWNvZGVyLnBhcnNlKGFycik7ZGVjb2Rlci5jb2xvclRyYW5zZm9ybT1vcHRzLmNvbG9yVHJhbnNmb3JtO3ZhciBpbWFnZT17d2lkdGg6ZGVjb2Rlci53aWR0aCxoZWlnaHQ6ZGVjb2Rlci5oZWlnaHQsZGF0YTpvcHRzLnVzZVRBcnJheT9uZXcgVWludDhBcnJheShkZWNvZGVyLndpZHRoKmRlY29kZXIuaGVpZ2h0KjQpOm5ldyBCdWZmZXIoZGVjb2Rlci53aWR0aCpkZWNvZGVyLmhlaWdodCo0KX07ZGVjb2Rlci5jb3B5VG9JbWFnZURhdGEoaW1hZ2UpO3JldHVybiBpbWFnZTt9J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnNoJyxmdW5jdGlvbigpe2NvbnN0IHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgU3BlZWRJbmRleD10ci5lLmNocm9tZS5TcGVlZEluZGV4O2NvbnN0IExPQURJTkdfTUVUUklDX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDFlMywyMCkuYWRkTGluZWFyQmlucygzZTMsMjApLmFkZEV4cG9uZW50aWFsQmlucygyMGUzLDIwKTtjb25zdCBTVU1NQVJZX09QVElPTlM9e2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjp0cnVlLHN0ZDp0cnVlLHN1bTpmYWxzZSx9O2Z1bmN0aW9uIGFkZFNwZWVkSW5kZXhTY3JlZW5zaG90c0Jhc2VkU2FtcGxlKHNhbXBsZXMsbmF2aWdhdGlvblN0YXJ0LGxvYWREdXJhdGlvbixicm93c2VySGVscGVyKXtjb25zdCBzY3JlZW5zaG90T2JqZWN0cz1icm93c2VySGVscGVyLnByb2Nlc3Mub2JqZWN0cy5nZXRBbGxJbnN0YW5jZXNOYW1lZCgnU2NyZWVuc2hvdCcpO2lmKCFzY3JlZW5zaG90T2JqZWN0cylyZXR1cm47Zm9yKGxldCBpPTA7aTxzY3JlZW5zaG90T2JqZWN0cy5sZW5ndGg7aSsrKXtjb25zdCBzbmFwc2hvdHM9c2NyZWVuc2hvdE9iamVjdHNbaV0uc25hcHNob3RzO2NvbnN0IHRpbWVzdGFtcGVkQ29sb3JIaXN0b2dyYW1zPVtdO3NuYXBzaG90cy5tYXAoc25hcHNob3Q9PntpZihzbmFwc2hvdC50cz49bmF2aWdhdGlvblN0YXJ0LnN0YXJ0JiZzbmFwc2hvdC50czxuYXZpZ2F0aW9uU3RhcnQuc3RhcnQrbG9hZER1cmF0aW9uKXt0aW1lc3RhbXBlZENvbG9ySGlzdG9ncmFtcy5wdXNoKHtjb2xvckhpc3RvZ3JhbTpTcGVlZEluZGV4LmNyZWF0ZUNvbG9ySGlzdG9ncmFtKGdldFBpeGVsRGF0YShzbmFwc2hvdC5hcmdzKSksdHM6c25hcHNob3QudHN9KTt9fSk7c2FtcGxlcy5wdXNoKHt2YWx1ZTpTcGVlZEluZGV4LmNhbGN1bGF0ZVNwZWVkSW5kZXgodGltZXN0YW1wZWRDb2xvckhpc3RvZ3JhbXMpLQpuYXZpZ2F0aW9uU3RhcnQuc3RhcnR9KTt9fQpmdW5jdGlvbiBnZXRQaXhlbERhdGEoYmFzZTY0SnBlZ0ltYWdlKXtjb25zdCBiaW5hcnlTdHJpbmc9YXRvYihiYXNlNjRKcGVnSW1hZ2UpO2NvbnN0IGJ5dGVzPW5ldyBEYXRhVmlldyhuZXcgQXJyYXlCdWZmZXIoYmFzZTY0SnBlZ0ltYWdlLmxlbmd0aCkpO3RyLmIuQmFzZTY0LkRlY29kZVRvVHlwZWRBcnJheShiYXNlNjRKcGVnSW1hZ2UsYnl0ZXMpO2NvbnN0IHJhd0ltYWdlRGF0YT1qcGVnRGVjb2RlKGJ5dGVzLmJ1ZmZlcix7dXNlVEFycmF5OnRydWV9KTtyZXR1cm4gcmF3SW1hZ2VEYXRhLmRhdGE7fQpmdW5jdGlvbiBjb2xsZWN0U3BlZWRJbmRleFNhbXBsZXNGcm9tTG9hZEV4cGVjdGF0aW9ucyhtb2RlbCxjaHJvbWVIZWxwZXIpe2NvbnN0IHNwZWVkSW5kZXhTY3JlZW5zaG90c0Jhc2VkU2FtcGxlcz1bXTtmb3IoY29uc3QgZXhwZWN0YXRpb24gb2YgbW9kZWwudXNlck1vZGVsLmV4cGVjdGF0aW9ucyl7aWYoIShleHBlY3RhdGlvbiBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkxvYWRFeHBlY3RhdGlvbikpY29udGludWU7aWYodHIuZS5jaHJvbWUuQ0hST01FX0lOVEVSTkFMX1VSTFMuaW5jbHVkZXMoZXhwZWN0YXRpb24udXJsKSl7Y29udGludWU7fQpjb25zdCByZW5kZXJlckhlbHBlcj1jaHJvbWVIZWxwZXIucmVuZGVyZXJIZWxwZXJzW2V4cGVjdGF0aW9uLnJlbmRlclByb2Nlc3MucGlkXTthZGRTcGVlZEluZGV4U2NyZWVuc2hvdHNCYXNlZFNhbXBsZShzcGVlZEluZGV4U2NyZWVuc2hvdHNCYXNlZFNhbXBsZXMsZXhwZWN0YXRpb24ubmF2aWdhdGlvblN0YXJ0LGV4cGVjdGF0aW9uLmR1cmF0aW9uLGNocm9tZUhlbHBlci5icm93c2VySGVscGVyKTt9CnJldHVybiBzcGVlZEluZGV4U2NyZWVuc2hvdHNCYXNlZFNhbXBsZXM7fQpmdW5jdGlvbiBzY3JlZW5zaG90c0Jhc2VkU3BlZWRJbmRleE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBzcGVlZEluZGV4U2NyZWVuc2hvdHNCYXNlZEhpc3RvZ3JhbT1oaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgnc3BlZWRJbmRleFNjcmVlbnNob3RzQmFzZWQnLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFtdLHtiaW5Cb3VuZGFyaWVzOkxPQURJTkdfTUVUUklDX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J1RoZSBhdmVyYWdlIHRpbWUgYXQgd2hpY2ggdmlzaWJsZSBwYXJ0cyBvZiB0aGUnKycgcGFnZSBhcmUgZGlzcGxheWVkLicsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtjb25zdCBzYW1wbGVzPWNvbGxlY3RTcGVlZEluZGV4U2FtcGxlc0Zyb21Mb2FkRXhwZWN0YXRpb25zKG1vZGVsLGNocm9tZUhlbHBlcik7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzYW1wbGVzKXtzcGVlZEluZGV4U2NyZWVuc2hvdHNCYXNlZEhpc3RvZ3JhbS5hZGRTYW1wbGUoc2FtcGxlLnZhbHVlKTt9fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHNjcmVlbnNob3RzQmFzZWRTcGVlZEluZGV4TWV0cmljKTtyZXR1cm57c2NyZWVuc2hvdHNCYXNlZFNwZWVkSW5kZXhNZXRyaWN9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy5zaCcsZnVuY3Rpb24oKXtmdW5jdGlvbiB3ZWJ2aWV3U3RhcnR1cE1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBzdGFydHVwV2FsbEhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3N0YXJ0dXBfd2FsbF90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtzdGFydHVwV2FsbEhpc3QuZGVzY3JpcHRpb249J1dlYlZpZXcgc3RhcnR1cCB3YWxsIHRpbWUnO2NvbnN0IHN0YXJ0dXBDUFVIaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbSgnd2Vidmlld19zdGFydHVwX2NwdV90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtzdGFydHVwQ1BVSGlzdC5kZXNjcmlwdGlvbj0nV2ViVmlldyBzdGFydHVwIENQVSB0aW1lJztjb25zdCBsb2FkV2FsbEhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3VybF9sb2FkX3dhbGxfdGltZScsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcik7bG9hZFdhbGxIaXN0LmRlc2NyaXB0aW9uPSdXZWJWaWV3IGJsYW5rIFVSTCBsb2FkIHdhbGwgdGltZSc7Y29uc3QgbG9hZENQVUhpc3Q9bmV3IHRyLnYuSGlzdG9ncmFtKCd3ZWJ2aWV3X3VybF9sb2FkX2NwdV90aW1lJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyKTtsb2FkQ1BVSGlzdC5kZXNjcmlwdGlvbj0nV2ViVmlldyBibGFuayBVUkwgbG9hZCBDUFUgdGltZSc7Zm9yKGNvbnN0IHNsaWNlIG9mIG1vZGVsLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIShzbGljZSBpbnN0YW5jZW9mIHRyLm1vZGVsLlRocmVhZFNsaWNlKSljb250aW51ZTtpZihzbGljZS50aXRsZT09PSdXZWJWaWV3U3RhcnR1cEludGVydmFsJyl7c3RhcnR1cFdhbGxIaXN0LmFkZFNhbXBsZShzbGljZS5kdXJhdGlvbik7c3RhcnR1cENQVUhpc3QuYWRkU2FtcGxlKHNsaWNlLmNwdUR1cmF0aW9uKTt9CmlmKHNsaWNlLnRpdGxlPT09J1dlYlZpZXdCbGFua1VybExvYWRJbnRlcnZhbCcpe2xvYWRXYWxsSGlzdC5hZGRTYW1wbGUoc2xpY2UuZHVyYXRpb24pO2xvYWRDUFVIaXN0LmFkZFNhbXBsZShzbGljZS5jcHVEdXJhdGlvbik7fX0KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oc3RhcnR1cFdhbGxIaXN0KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShzdGFydHVwQ1BVSGlzdCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0obG9hZFdhbGxIaXN0KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShsb2FkQ1BVSGlzdCk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHdlYnZpZXdTdGFydHVwTWV0cmljKTtyZXR1cm57d2Vidmlld1N0YXJ0dXBNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudGFicycsZnVuY3Rpb24oKXtmdW5jdGlvbiB0YWJzTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtpZighY2hyb21lSGVscGVyKXtyZXR1cm47fQpjb25zdCB0YWJTd2l0Y2hSZXF1ZXN0RGVsYXlzPVtdO2NvbnN0IFRBQl9TV0lUQ0hJTkdfUkVRVUVTVF9USVRMRT0nVGFiU3dpdGNoVmlzaWJpbGl0eVJlcXVlc3QnO2xldCBzdGFydFRhYlN3aXRjaFZpc2liaWxpdHlSZXF1ZXN0PU51bWJlci5NQVhfU0FGRV9JTlRFR0VSO2Zvcihjb25zdCBoZWxwZXIgb2YgY2hyb21lSGVscGVyLmJyb3dzZXJIZWxwZXJzKXtpZighaGVscGVyLm1haW5UaHJlYWQpY29udGludWU7Zm9yKGNvbnN0IHNsaWNlIG9mIGhlbHBlci5tYWluVGhyZWFkLmFzeW5jU2xpY2VHcm91cC5zbGljZXMpe2lmKHNsaWNlLnRpdGxlPT09VEFCX1NXSVRDSElOR19SRVFVRVNUX1RJVExFJiYhc2xpY2UuZXJyb3Ipe3RhYlN3aXRjaFJlcXVlc3REZWxheXMucHVzaChzbGljZS5kdXJhdGlvbik7aWYoc2xpY2Uuc3RhcnQ8c3RhcnRUYWJTd2l0Y2hWaXNpYmlsaXR5UmVxdWVzdCl7c3RhcnRUYWJTd2l0Y2hWaXNpYmlsaXR5UmVxdWVzdD1zbGljZS5zdGFydDt9fX19Cmhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCd0YWJfc3dpdGNoaW5nX3JlcXVlc3RfZGVsYXknLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsdGFiU3dpdGNoUmVxdWVzdERlbGF5cyx7ZGVzY3JpcHRpb246J0RlbGF5IGJlZm9yZSB0YWItcmVxdWVzdCBpcyBtYWRlJyxzdW1tYXJ5T3B0aW9uczp7c3VtOmZhbHNlfX0pO2NvbnN0IHRhYlN3aXRjaExhdGVuY2llcz1bXTtjb25zdCBUQUJfU1dJVENISU5HX1NMSUNFX1RJVExFPSdUYWJTd2l0Y2hpbmc6OkxhdGVuY3knO2Z1bmN0aW9uIGV4dHJhY3RMYXRlbmN5RnJvbUhlbHBlcnMoaGVscGVycyxsZWdhY3kpe2Zvcihjb25zdCBoZWxwZXIgb2YgaGVscGVycyl7aWYoIWhlbHBlci5tYWluVGhyZWFkKXtjb250aW51ZTt9CmNvbnN0IHRocmVhZD1oZWxwZXIubWFpblRocmVhZDtmb3IoY29uc3Qgc2xpY2Ugb2YgdGhyZWFkLmFzeW5jU2xpY2VHcm91cC5zbGljZXMpe2lmKHNsaWNlLnRpdGxlPT09VEFCX1NXSVRDSElOR19TTElDRV9USVRMRSYmKGxlZ2FjeXx8c2xpY2UuYXJncy5sYXRlbmN5KSYmc2xpY2Uuc3RhcnQ+c3RhcnRUYWJTd2l0Y2hWaXNpYmlsaXR5UmVxdWVzdCl7dGFiU3dpdGNoTGF0ZW5jaWVzLnB1c2gobGVnYWN5P3NsaWNlLmR1cmF0aW9uOnNsaWNlLmFyZ3MubGF0ZW5jeSk7fX19fQpleHRyYWN0TGF0ZW5jeUZyb21IZWxwZXJzKGNocm9tZUhlbHBlci5icm93c2VySGVscGVycyk7ZXh0cmFjdExhdGVuY3lGcm9tSGVscGVycyhPYmplY3QudmFsdWVzKGNocm9tZUhlbHBlci5yZW5kZXJlckhlbHBlcnMpKTtpZih0YWJTd2l0Y2hMYXRlbmNpZXMubGVuZ3RoPT09MCl7ZXh0cmFjdExhdGVuY3lGcm9tSGVscGVycyhjaHJvbWVIZWxwZXIuYnJvd3NlckhlbHBlcnMsdHJ1ZSk7fQpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndGFiX3N3aXRjaGluZ19sYXRlbmN5Jyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHRhYlN3aXRjaExhdGVuY2llcyx7ZGVzY3JpcHRpb246J1RhYiBzd2l0Y2hpbmcgdGltZSBpbiBtcycsc3VtbWFyeU9wdGlvbnM6e3N1bTpmYWxzZX19KTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIodGFic01ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6ZmFsc2UsfSk7cmV0dXJue3RhYnNNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MnLGZ1bmN0aW9uKCl7Y29uc3QgTUVNT1JZX0lORlJBX1RSQUNJTkdfQ0FURUdPUlk9J2Rpc2FibGVkLWJ5LWRlZmF1bHQtbWVtb3J5LWluZnJhJztjb25zdCBUSU1FX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDFlLTMsMWU1LDMwKTtjb25zdCBCWVRFX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsMWU5LDMwKTtjb25zdCBDT1VOVF9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVFeHBvbmVudGlhbCgxLDFlNSwzMCk7Y29uc3QgU1VNTUFSWV9PUFRJT05TPXRyLnYuSGlzdG9ncmFtLkFWRVJBR0VfT05MWV9TVU1NQVJZX09QVElPTlM7ZnVuY3Rpb24gYWRkTWVtb3J5SW5mcmFIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsbW9kZWwsY2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzKXtjb25zdCBtZW1vcnlEdW1wQ291bnQ9bW9kZWwuZ2xvYmFsTWVtb3J5RHVtcHMubGVuZ3RoO2lmKG1lbW9yeUR1bXBDb3VudD09PTApcmV0dXJuO2xldCB0b3RhbE92ZXJoZWFkPTA7bGV0IG5vbk1lbW9yeUluZnJhVGhyZWFkT3ZlcmhlYWQ9MDtjb25zdCBvdmVyaGVhZEJ5UHJvdmlkZXI9e307Zm9yKGNvbnN0IHByb2Nlc3Mgb2YgT2JqZWN0LnZhbHVlcyhtb2RlbC5wcm9jZXNzZXMpKXtmb3IoY29uc3QgdGhyZWFkIG9mIE9iamVjdC52YWx1ZXMocHJvY2Vzcy50aHJlYWRzKSl7Zm9yKGNvbnN0IHNsaWNlIG9mIE9iamVjdC52YWx1ZXModGhyZWFkLnNsaWNlR3JvdXAuc2xpY2VzKSl7aWYoc2xpY2UuY2F0ZWdvcnkhPT1NRU1PUllfSU5GUkFfVFJBQ0lOR19DQVRFR09SWSljb250aW51ZTt0b3RhbE92ZXJoZWFkKz1zbGljZS5kdXJhdGlvbjtpZih0aHJlYWQubmFtZSE9PSdNZW1vcnlJbmZyYScpe25vbk1lbW9yeUluZnJhVGhyZWFkT3ZlcmhlYWQrPXNsaWNlLmR1cmF0aW9uO30KaWYoc2xpY2UuYXJncyYmc2xpY2UuYXJnc1snZHVtcF9wcm92aWRlci5uYW1lJ10pe2NvbnN0IHByb3ZpZGVyTmFtZT1zbGljZS5hcmdzWydkdW1wX3Byb3ZpZGVyLm5hbWUnXTtsZXQgZHVyYXRpb25BbmRDb3VudD1vdmVyaGVhZEJ5UHJvdmlkZXJbcHJvdmlkZXJOYW1lXTtpZihkdXJhdGlvbkFuZENvdW50PT09dW5kZWZpbmVkKXtvdmVyaGVhZEJ5UHJvdmlkZXJbcHJvdmlkZXJOYW1lXT1kdXJhdGlvbkFuZENvdW50PXtkdXJhdGlvbjowLGNvdW50OjB9O30KZHVyYXRpb25BbmRDb3VudC5kdXJhdGlvbis9c2xpY2UuZHVyYXRpb247ZHVyYXRpb25BbmRDb3VudC5jb3VudCsrO319fX0KaGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ21lbW9yeV9kdW1wX2NwdV9vdmVyaGVhZCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcix0b3RhbE92ZXJoZWFkL21lbW9yeUR1bXBDb3VudCx7YmluQm91bmRhcmllczpUSU1FX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J0F2ZXJhZ2UgQ1BVIG92ZXJoZWFkIG9uIGFsbCB0aHJlYWRzIHBlciBtZW1vcnktaW5mcmEgZHVtcCcsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdub25tZW1vcnlfdGhyZWFkX21lbW9yeV9kdW1wX2NwdV9vdmVyaGVhZCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixub25NZW1vcnlJbmZyYVRocmVhZE92ZXJoZWFkL21lbW9yeUR1bXBDb3VudCx7YmluQm91bmRhcmllczpUSU1FX0JPVU5EQVJJRVMsZGVzY3JpcHRpb246J0F2ZXJhZ2UgQ1BVIG92ZXJoZWFkIG9uIG5vbi1tZW1vcnktaW5mcmEgdGhyZWFkcyAnKydwZXIgbWVtb3J5LWluZnJhIGR1bXAnLHN1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtmb3IoY29uc3RbcHJvdmlkZXJOYW1lLG92ZXJoZWFkXW9mIE9iamVjdC5lbnRyaWVzKG92ZXJoZWFkQnlQcm92aWRlcikpe2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke3Byb3ZpZGVyTmFtZX1fbWVtb3J5X2R1bXBfY3B1X292ZXJoZWFkYCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLG92ZXJoZWFkLmR1cmF0aW9uL292ZXJoZWFkLmNvdW50LHtiaW5Cb3VuZGFyaWVzOlRJTUVfQk9VTkRBUklFUyxkZXNjcmlwdGlvbjpgQXZlcmFnZSBDUFUgb3ZlcmhlYWQgb2YgJHtwcm92aWRlck5hbWV9IHBlciBPbk1lbW9yeUR1bXAgY2FsbGAsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO30KY29uc3QgbWVtb3J5SW5mcmFFdmVudHNTaXplPWNhdGVnb3J5TmFtZXNUb1RvdGFsRXZlbnRTaXplcy5nZXQoTUVNT1JZX0lORlJBX1RSQUNJTkdfQ0FURUdPUlkpO2NvbnN0IG1lbW9yeUluZnJhVHJhY2VCeXRlc1ZhbHVlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndG90YWxfbWVtb3J5X2R1bXBfc2l6ZScsdHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsQllURV9CT1VOREFSSUVTKTttZW1vcnlJbmZyYVRyYWNlQnl0ZXNWYWx1ZS5kZXNjcmlwdGlvbj0nVG90YWwgdHJhY2Ugc2l6ZSBvZiBtZW1vcnktaW5mcmEgZHVtcHMgaW4gYnl0ZXMnO21lbW9yeUluZnJhVHJhY2VCeXRlc1ZhbHVlLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKFNVTU1BUllfT1BUSU9OUyk7bWVtb3J5SW5mcmFUcmFjZUJ5dGVzVmFsdWUuYWRkU2FtcGxlKG1lbW9yeUluZnJhRXZlbnRzU2l6ZSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0obWVtb3J5SW5mcmFUcmFjZUJ5dGVzVmFsdWUpO2NvbnN0IHRyYWNlQnl0ZXNQZXJEdW1wVmFsdWU9bmV3IHRyLnYuSGlzdG9ncmFtKCdtZW1vcnlfZHVtcF9zaXplJyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixCWVRFX0JPVU5EQVJJRVMpO3RyYWNlQnl0ZXNQZXJEdW1wVmFsdWUuZGVzY3JpcHRpb249J0F2ZXJhZ2UgdHJhY2Ugc2l6ZSBvZiBtZW1vcnktaW5mcmEgZHVtcHMgaW4gYnl0ZXMnO3RyYWNlQnl0ZXNQZXJEdW1wVmFsdWUuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoU1VNTUFSWV9PUFRJT05TKTt0cmFjZUJ5dGVzUGVyRHVtcFZhbHVlLmFkZFNhbXBsZShtZW1vcnlJbmZyYUV2ZW50c1NpemUvbWVtb3J5RHVtcENvdW50KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh0cmFjZUJ5dGVzUGVyRHVtcFZhbHVlKTt9CmZ1bmN0aW9uIHRyYWNpbmdNZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCl7aWYoIW1vZGVsLnN0YXRzLmhhc0V2ZW50U2l6ZXNpbkJ5dGVzKXJldHVybjtjb25zdCBldmVudFN0YXRzPW1vZGVsLnN0YXRzLmFsbFRyYWNlRXZlbnRTdGF0c0luVGltZUludGVydmFscztldmVudFN0YXRzLnNvcnQoKGEsYik9PmEudGltZUludGVydmFsLWIudGltZUludGVydmFsKTtjb25zdCB0b3RhbFRyYWNlQnl0ZXM9ZXZlbnRTdGF0cy5yZWR1Y2UoKGEsYik9PmErYi50b3RhbEV2ZW50U2l6ZWluQnl0ZXMsMCk7bGV0IG1heEV2ZW50Q291bnRQZXJTZWM9MDtsZXQgbWF4RXZlbnRCeXRlc1BlclNlYz0wO2NvbnN0IElOVEVSVkFMU19QRVJfU0VDPU1hdGguZmxvb3IoMTAwMC9tb2RlbC5zdGF0cy5USU1FX0lOVEVSVkFMX1NJWkVfSU5fTVMpO2xldCBydW5uaW5nRXZlbnROdW1QZXJTZWM9MDtsZXQgcnVubmluZ0V2ZW50Qnl0ZXNQZXJTZWM9MDtsZXQgc3RhcnQ9MDtsZXQgZW5kPTA7d2hpbGUoZW5kPGV2ZW50U3RhdHMubGVuZ3RoKXtydW5uaW5nRXZlbnROdW1QZXJTZWMrPWV2ZW50U3RhdHNbZW5kXS5udW1FdmVudHM7cnVubmluZ0V2ZW50Qnl0ZXNQZXJTZWMrPWV2ZW50U3RhdHNbZW5kXS50b3RhbEV2ZW50U2l6ZWluQnl0ZXM7ZW5kKys7d2hpbGUoKGV2ZW50U3RhdHNbZW5kLTFdLnRpbWVJbnRlcnZhbC0KZXZlbnRTdGF0c1tzdGFydF0udGltZUludGVydmFsKT49SU5URVJWQUxTX1BFUl9TRUMpe3J1bm5pbmdFdmVudE51bVBlclNlYy09ZXZlbnRTdGF0c1tzdGFydF0ubnVtRXZlbnRzO3J1bm5pbmdFdmVudEJ5dGVzUGVyU2VjLT1ldmVudFN0YXRzW3N0YXJ0XS50b3RhbEV2ZW50U2l6ZWluQnl0ZXM7c3RhcnQrKzt9Cm1heEV2ZW50Q291bnRQZXJTZWM9TWF0aC5tYXgobWF4RXZlbnRDb3VudFBlclNlYyxydW5uaW5nRXZlbnROdW1QZXJTZWMpO21heEV2ZW50Qnl0ZXNQZXJTZWM9TWF0aC5tYXgobWF4RXZlbnRCeXRlc1BlclNlYyxydW5uaW5nRXZlbnRCeXRlc1BlclNlYyk7fQpjb25zdCBzdGF0cz1tb2RlbC5zdGF0cy5hbGxUcmFjZUV2ZW50U3RhdHM7Y29uc3QgY2F0ZWdvcnlOYW1lc1RvVG90YWxFdmVudFNpemVzPShzdGF0cy5yZWR1Y2UoKG1hcCxzdGF0KT0+KG1hcC5zZXQoc3RhdC5jYXRlZ29yeSwoKG1hcC5nZXQoc3RhdC5jYXRlZ29yeSl8fDApKwpzdGF0LnRvdGFsRXZlbnRTaXplaW5CeXRlcykpKSxuZXcgTWFwKCkpKTtjb25zdCBtYXhDYXROYW1lQW5kQnl0ZXM9QXJyYXkuZnJvbShjYXRlZ29yeU5hbWVzVG9Ub3RhbEV2ZW50U2l6ZXMuZW50cmllcygpKS5yZWR1Y2UoKGEsYik9PigoYlsxXT49YVsxXSk/YjphKSk7Y29uc3QgbWF4RXZlbnRCeXRlc1BlckNhdGVnb3J5PW1heENhdE5hbWVBbmRCeXRlc1sxXTtjb25zdCBjYXRlZ29yeVdpdGhNYXhFdmVudEJ5dGVzPW1heENhdE5hbWVBbmRCeXRlc1swXTtjb25zdCBtYXhFdmVudENvdW50UGVyU2VjVmFsdWU9bmV3IHRyLnYuSGlzdG9ncmFtKCdwZWFrX2V2ZW50X3JhdGUnLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyLENPVU5UX0JPVU5EQVJJRVMpO21heEV2ZW50Q291bnRQZXJTZWNWYWx1ZS5kZXNjcmlwdGlvbj0nTWF4IG51bWJlciBvZiBldmVudHMgcGVyIHNlY29uZCc7bWF4RXZlbnRDb3VudFBlclNlY1ZhbHVlLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKFNVTU1BUllfT1BUSU9OUyk7bWF4RXZlbnRDb3VudFBlclNlY1ZhbHVlLmFkZFNhbXBsZShtYXhFdmVudENvdW50UGVyU2VjKTtjb25zdCBtYXhFdmVudEJ5dGVzUGVyU2VjVmFsdWU9bmV3IHRyLnYuSGlzdG9ncmFtKCdwZWFrX2V2ZW50X3NpemVfcmF0ZScsdHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsQllURV9CT1VOREFSSUVTKTttYXhFdmVudEJ5dGVzUGVyU2VjVmFsdWUuZGVzY3JpcHRpb249J01heCBldmVudCBzaXplIGluIGJ5dGVzIHBlciBzZWNvbmQnO21heEV2ZW50Qnl0ZXNQZXJTZWNWYWx1ZS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyhTVU1NQVJZX09QVElPTlMpO21heEV2ZW50Qnl0ZXNQZXJTZWNWYWx1ZS5hZGRTYW1wbGUobWF4RXZlbnRCeXRlc1BlclNlYyk7Y29uc3QgdG90YWxUcmFjZUJ5dGVzVmFsdWU9bmV3IHRyLnYuSGlzdG9ncmFtKCd0cmFjZV9zaXplJyx0ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixCWVRFX0JPVU5EQVJJRVMpO3RvdGFsVHJhY2VCeXRlc1ZhbHVlLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKFNVTU1BUllfT1BUSU9OUyk7dG90YWxUcmFjZUJ5dGVzVmFsdWUuYWRkU2FtcGxlKHRvdGFsVHJhY2VCeXRlcyk7Y29uc3QgYmlnZ2VzdENhdGVnb3J5PXtuYW1lOmNhdGVnb3J5V2l0aE1heEV2ZW50Qnl0ZXMsc2l6ZV9pbl9ieXRlczptYXhFdmVudEJ5dGVzUGVyQ2F0ZWdvcnl9O3RvdGFsVHJhY2VCeXRlc1ZhbHVlLmRpYWdub3N0aWNzLnNldCgnY2F0ZWdvcnlfd2l0aF9tYXhfZXZlbnRfc2l6ZScsbmV3IHRyLnYuZC5HZW5lcmljU2V0KFtiaWdnZXN0Q2F0ZWdvcnldKSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0odG90YWxUcmFjZUJ5dGVzVmFsdWUpO21heEV2ZW50Q291bnRQZXJTZWNWYWx1ZS5kaWFnbm9zdGljcy5zZXQoJ2NhdGVnb3J5X3dpdGhfbWF4X2V2ZW50X3NpemUnLG5ldyB0ci52LmQuR2VuZXJpY1NldChbYmlnZ2VzdENhdGVnb3J5XSkpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKG1heEV2ZW50Q291bnRQZXJTZWNWYWx1ZSk7bWF4RXZlbnRCeXRlc1BlclNlY1ZhbHVlLmRpYWdub3N0aWNzLnNldCgnY2F0ZWdvcnlfd2l0aF9tYXhfZXZlbnRfc2l6ZScsbmV3IHRyLnYuZC5HZW5lcmljU2V0KFtiaWdnZXN0Q2F0ZWdvcnldKSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0obWF4RXZlbnRCeXRlc1BlclNlY1ZhbHVlKTthZGRNZW1vcnlJbmZyYUhpc3RvZ3JhbXMoaGlzdG9ncmFtcyxtb2RlbCxjYXRlZ29yeU5hbWVzVG9Ub3RhbEV2ZW50U2l6ZXMpO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3Rlcih0cmFjaW5nTWV0cmljKTtyZXR1cm57dHJhY2luZ01ldHJpYyxNRU1PUllfSU5GUkFfVFJBQ0lOR19DQVRFR09SWSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBwYXJzZUJ1Y2tldHNfKGV2ZW50LHByb2Nlc3NOYW1lKXtjb25zdCBsZW49dHIuYi5CYXNlNjQuZ2V0RGVjb2RlZEJ1ZmZlckxlbmd0aChldmVudC5hcmdzLmJ1Y2tldHMpO2NvbnN0IGJ1ZmZlcj1uZXcgQXJyYXlCdWZmZXIobGVuKTtjb25zdCBkYXRhVmlldz1uZXcgRGF0YVZpZXcoYnVmZmVyKTt0ci5iLkJhc2U2NC5EZWNvZGVUb1R5cGVkQXJyYXkoZXZlbnQuYXJncy5idWNrZXRzLGRhdGFWaWV3KTtjb25zdCBkZWNvZGVkPW5ldyBVaW50MzJBcnJheShidWZmZXIpO2NvbnN0IHN1bT1kZWNvZGVkWzFdK2RlY29kZWRbMl0qMHgxMDAwMDAwMDA7Y29uc3QgYmlucz1bXTtsZXQgcG9zaXRpb249NDt3aGlsZShwb3NpdGlvbjw9ZGVjb2RlZC5sZW5ndGgtNCl7Y29uc3QgbWluPWRlY29kZWRbcG9zaXRpb24rK107Y29uc3QgbWF4PWRlY29kZWRbcG9zaXRpb24rK10rZGVjb2RlZFtwb3NpdGlvbisrXSoweDEwMDAwMDAwMDtjb25zdCBjb3VudD1kZWNvZGVkW3Bvc2l0aW9uKytdO2NvbnN0IHByb2Nlc3Nlcz1uZXcgdHIudi5kLkJyZWFrZG93bigpO3Byb2Nlc3Nlcy5zZXQocHJvY2Vzc05hbWUsY291bnQpO2NvbnN0IGV2ZW50cz1uZXcgdHIudi5kLlJlbGF0ZWRFdmVudFNldChbZXZlbnRdKTtiaW5zLnB1c2goe21pbixtYXgsY291bnQscHJvY2Vzc2VzLGV2ZW50c30pO30KcmV0dXJue3N1bSxiaW5zfTt9CmZ1bmN0aW9uIG1lcmdlQmluc18oeCx5KXt4LnN1bSs9eS5zdW07Y29uc3QgYWxsQmlucz1bLi4ueC5iaW5zLC4uLnkuYmluc107YWxsQmlucy5zb3J0KChhLGIpPT5hLm1pbi1iLm1pbik7eC5iaW5zPVtdO2xldCBsYXN0PXVuZGVmaW5lZDtmb3IoY29uc3QgYmluIG9mIGFsbEJpbnMpe2lmKGxhc3QhPT11bmRlZmluZWQmJmJpbi5taW49PT1sYXN0Lm1pbil7aWYobGFzdC5tYXghPT1iaW4ubWF4KXRocm93IG5ldyBFcnJvcignSW5jb21wYXRpYmxlIGJpbnMnKTtpZihiaW4uY291bnQ9PT0wKWNvbnRpbnVlO2xhc3QuY291bnQrPWJpbi5jb3VudDtmb3IoY29uc3QgZXZlbnQgb2YgYmluLmV2ZW50cyl7bGFzdC5ldmVudHMuYWRkKGV2ZW50KTt9Cmxhc3QucHJvY2Vzc2VzLmFkZERpYWdub3N0aWMoYmluLnByb2Nlc3Nlcyk7fWVsc2V7aWYobGFzdCE9PXVuZGVmaW5lZCYmYmluLm1pbjxsYXN0Lm1heCl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbXBhdGlibGUgYmlucycpO30KeC5iaW5zLnB1c2goYmluKTtsYXN0PWJpbjt9fX0KZnVuY3Rpb24gc3VidHJhY3RCaW5zXyh4LHkpe3guc3VtLT15LnN1bTtsZXQgcDE9MDtsZXQgcDI9MDt3aGlsZShwMjx5LmJpbnMubGVuZ3RoKXt3aGlsZShwMTx4LmJpbnMubGVuZ3RoJiZ4LmJpbnNbcDFdLm1pbiE9PXkuYmluc1twMl0ubWluKXtwMSsrO30KaWYocDE9PT14LmJpbnMubGVuZ3RoKXRocm93IG5ldyBFcnJvcignQ2Fubm90IHN1YnRyYWN0Jyk7aWYoeC5iaW5zW3AxXS5tYXghPT15LmJpbnNbcDJdLm1heCl7dGhyb3cgbmV3IEVycm9yKCdJbmNvbXBhdGlibGUgYmlucycpO30KaWYoeC5iaW5zW3AxXS5jb3VudDx5LmJpbnNbcDJdLmNvdW50KXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBzdWJ0cmFjdCcpO30KeC5iaW5zW3AxXS5jb3VudC09eS5iaW5zW3AyXS5jb3VudDtmb3IoY29uc3QgZXZlbnQgb2YgeS5iaW5zW3AyXS5ldmVudHMpe3guYmluc1twMV0uZXZlbnRzLmFkZChldmVudCk7fQpjb25zdCBwcm9jZXNzTmFtZT10ci5iLmdldE9ubHlFbGVtZW50KHguYmluc1twMV0ucHJvY2Vzc2VzKVswXTt4LmJpbnNbcDFdLnByb2Nlc3Nlcy5zZXQocHJvY2Vzc05hbWUseC5iaW5zW3AxXS5jb3VudCk7cDIrKzt9fQpmdW5jdGlvbiBnZXRIaXN0b2dyYW1Vbml0XyhuYW1lKXtyZXR1cm4gdHIuYi5Vbml0LmJ5TmFtZS51bml0bGVzc051bWJlcl9zbWFsbGVySXNCZXR0ZXI7fQpmdW5jdGlvbiBnZXRIaXN0b2dyYW1Cb3VuZGFyaWVzXyhuYW1lKXtpZihuYW1lLnN0YXJ0c1dpdGgoJ0V2ZW50LkxhdGVuY3kuU2Nyb2xsJykpe3JldHVybiB0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUzLDFlNSw1MCk7fQppZihuYW1lLnN0YXJ0c1dpdGgoJ0dyYXBoaWNzLlNtb290aG5lc3MuVGhyb3VnaHB1dCcpKXtyZXR1cm4gdHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigwLDEwMCwxMDEpO30KaWYobmFtZS5zdGFydHNXaXRoKCdNZW1vcnkuTWVtb3J5LkdQVS5QZWFrTWVtb3J5VXNhZ2UnKSl7cmV0dXJuIHRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMCwxZTYsMTAwKTt9CnJldHVybiB0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxZTMsNTApO30KZnVuY3Rpb24gdW1hTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGhpc3RvZ3JhbVZhbHVlcz1uZXcgTWFwKCk7Y29uc3QgbmFtZUNvdW50cz1uZXcgTWFwKCk7Zm9yKGNvbnN0IHByb2Nlc3Mgb2YgbW9kZWwuZ2V0QWxsUHJvY2Vzc2VzKCkpe2NvbnN0IGhpc3RvZ3JhbUV2ZW50cz1uZXcgTWFwKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHByb2Nlc3MuaW5zdGFudEV2ZW50cyl7aWYoZXZlbnQudGl0bGUhPT0nVU1BSGlzdG9ncmFtU2FtcGxlcycpY29udGludWU7Y29uc3QgbmFtZT1ldmVudC5hcmdzLm5hbWU7Y29uc3QgZXZlbnRzPWhpc3RvZ3JhbUV2ZW50cy5nZXQobmFtZSl8fFtdO2lmKCFoaXN0b2dyYW1FdmVudHMuaGFzKG5hbWUpKWhpc3RvZ3JhbUV2ZW50cy5zZXQobmFtZSxldmVudHMpO2V2ZW50cy5wdXNoKGV2ZW50KTt9CmxldCBwcm9jZXNzTmFtZT10ci5lLmNocm9tZS5jaHJvbWVfcHJvY2Vzc2VzLmNhbm9uaWNhbGl6ZVByb2Nlc3NOYW1lKHByb2Nlc3MubmFtZSk7bmFtZUNvdW50cy5zZXQocHJvY2Vzc05hbWUsKG5hbWVDb3VudHMuZ2V0KHByb2Nlc3NOYW1lKXx8MCkrMSk7cHJvY2Vzc05hbWU9YCR7cHJvY2Vzc05hbWV9XyR7bmFtZUNvdW50cy5nZXQocHJvY2Vzc05hbWUpfWA7Zm9yKGNvbnN0W25hbWUsZXZlbnRzXW9mIGhpc3RvZ3JhbUV2ZW50cyl7Y29uc3QgdmFsdWVzPWhpc3RvZ3JhbVZhbHVlcy5nZXQobmFtZSl8fHtzdW06MCxiaW5zOltdfTtpZighaGlzdG9ncmFtVmFsdWVzLmhhcyhuYW1lKSloaXN0b2dyYW1WYWx1ZXMuc2V0KG5hbWUsdmFsdWVzKTtjb25zdCBlbmRWYWx1ZXM9cGFyc2VCdWNrZXRzXyhldmVudHNbZXZlbnRzLmxlbmd0aC0xXSxwcm9jZXNzTmFtZSk7aWYoZXZlbnRzLmxlbmd0aD09PTEpe21lcmdlQmluc18odmFsdWVzLGVuZFZhbHVlcyk7fWVsc2UgaWYoZXZlbnRzLmxlbmd0aD09PTIpe3N1YnRyYWN0Qmluc18oZW5kVmFsdWVzLHBhcnNlQnVja2V0c18oZXZlbnRzWzBdLHByb2Nlc3NOYW1lKSk7bWVyZ2VCaW5zXyh2YWx1ZXMsZW5kVmFsdWVzKTt9ZWxzZXt0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIHNob3VsZCBiZSBhdCBtb3N0IHR3byBzbmFwc2hvdHMgb2YgYW4gVU1BICcrJ2hpc3RvZ3JhbSBpbiBlYWNoIHByb2Nlc3MnKTt9fX0KZm9yKGNvbnN0W25hbWUsdmFsdWVzXW9mIGhpc3RvZ3JhbVZhbHVlcyl7Y29uc3QgaGlzdG9ncmFtPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLGdldEhpc3RvZ3JhbVVuaXRfKG5hbWUpLGdldEhpc3RvZ3JhbUJvdW5kYXJpZXNfKG5hbWUpKTtsZXQgc3VtT2ZNaWRkbGVzPTA7bGV0IHN1bU9mQmluTGVuZ3Rocz0wO2Zvcihjb25zdCBiaW4gb2YgdmFsdWVzLmJpbnMpe3N1bU9mTWlkZGxlcys9YmluLmNvdW50KihiaW4ubWluK2Jpbi5tYXgpLzI7c3VtT2ZCaW5MZW5ndGhzKz1iaW4uY291bnQqKGJpbi5tYXgtYmluLm1pbik7fQpjb25zdCBzaGlmdD0odmFsdWVzLnN1bS1zdW1PZk1pZGRsZXMpL3N1bU9mQmluTGVuZ3RocztpZihNYXRoLmFicyhzaGlmdCk+MC41KXRocm93IG5ldyBFcnJvcignU2FtcGxlcyBzdW0gaXMgd3JvbmcnKTtmb3IoY29uc3QgYmluIG9mIHZhbHVlcy5iaW5zKXtpZihiaW4uY291bnQ9PT0wKWNvbnRpbnVlO2NvbnN0IHNoaWZ0ZWRWYWx1ZT0oYmluLm1pbitiaW4ubWF4KS8yK3NoaWZ0KihiaW4ubWF4LWJpbi5taW4pO2Zvcihjb25zdFtwcm9jZXNzTmFtZSxjb3VudF1vZiBiaW4ucHJvY2Vzc2VzKXtiaW4ucHJvY2Vzc2VzLnNldChwcm9jZXNzTmFtZSxzaGlmdGVkVmFsdWUqY291bnQvYmluLmNvdW50KTt9CmZvcihsZXQgaT0wO2k8YmluLmNvdW50O2krKyl7aGlzdG9ncmFtLmFkZFNhbXBsZShzaGlmdGVkVmFsdWUse3Byb2Nlc3NlczpiaW4ucHJvY2Vzc2VzLGV2ZW50czpiaW4uZXZlbnRzfSk7fX0KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTt9fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHVtYU1ldHJpYyx7cmVxdWlyZWRDYXRlZ29yaWVzOlsnYmVuY2htYXJrJ10sfSk7cmV0dXJue3VtYU1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy52OCcsZnVuY3Rpb24oKXtjb25zdCBDVVNUT01fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDQsMjAwLDEwMCk7ZnVuY3Rpb24gY29tcHV0ZUV4ZWN1dGVNZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVRvdGFsRXhlY3V0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfZXhlY3V0aW9uX2NwdV90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7Y3B1VG90YWxFeGVjdXRpb24uZGVzY3JpcHRpb249J2NwdSB0b3RhbCB0aW1lIHNwZW50IGluIHNjcmlwdCBleGVjdXRpb24nO2NvbnN0IHdhbGxUb3RhbEV4ZWN1dGlvbj1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X2V4ZWN1dGlvbl93YWxsX3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsVG90YWxFeGVjdXRpb24uZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBzY3JpcHQgZXhlY3V0aW9uJztjb25zdCBjcHVTZWxmRXhlY3V0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfZXhlY3V0aW9uX2NwdV9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVTZWxmRXhlY3V0aW9uLmRlc2NyaXB0aW9uPSdjcHUgc2VsZiB0aW1lIHNwZW50IGluIHNjcmlwdCBleGVjdXRpb24nO2NvbnN0IHdhbGxTZWxmRXhlY3V0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfZXhlY3V0aW9uX3dhbGxfc2VsZicsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7d2FsbFNlbGZFeGVjdXRpb24uZGVzY3JpcHRpb249J3dhbGwgc2VsZiB0aW1lIHNwZW50IGluIHNjcmlwdCBleGVjdXRpb24nO2Zvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LkV4ZWN1dGUnKSl7Y3B1VG90YWxFeGVjdXRpb24uYWRkU2FtcGxlKGUuY3B1RHVyYXRpb24pO3dhbGxUb3RhbEV4ZWN1dGlvbi5hZGRTYW1wbGUoZS5kdXJhdGlvbik7Y3B1U2VsZkV4ZWN1dGlvbi5hZGRTYW1wbGUoZS5jcHVTZWxmVGltZSk7d2FsbFNlbGZFeGVjdXRpb24uYWRkU2FtcGxlKGUuc2VsZlRpbWUpO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxFeGVjdXRpb24pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbEV4ZWN1dGlvbik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1U2VsZkV4ZWN1dGlvbik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFNlbGZFeGVjdXRpb24pO30KZnVuY3Rpb24gY29tcHV0ZVBhcnNlTGF6eU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY3B1U2VsZlBhcnNlTGF6eT1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3BhcnNlX2xhenlfY3B1X3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVNlbGZQYXJzZUxhenkuZGVzY3JpcHRpb249J2NwdSBzZWxmIHRpbWUgc3BlbnQgcGVyZm9ybWluZyBsYXp5IHBhcnNpbmcnO2NvbnN0IHdhbGxTZWxmUGFyc2VMYXp5PW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcGFyc2VfbGF6eV93YWxsX3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxTZWxmUGFyc2VMYXp5LmRlc2NyaXB0aW9uPSd3YWxsIHNlbGYgdGltZSBzcGVudCBwZXJmb3JtaW5nIGxhenkgcGFyc2luZyc7Zm9yKGNvbnN0IGUgb2YgbW9kZWwuZmluZFRvcG1vc3RTbGljZXNOYW1lZCgnVjguUGFyc2VMYXp5TWljcm9TZWNvbmRzJykpe2NwdVNlbGZQYXJzZUxhenkuYWRkU2FtcGxlKGUuY3B1U2VsZlRpbWUpO3dhbGxTZWxmUGFyc2VMYXp5LmFkZFNhbXBsZShlLnNlbGZUaW1lKTt9CmZvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LlBhcnNlTGF6eScpKXtjcHVTZWxmUGFyc2VMYXp5LmFkZFNhbXBsZShlLmNwdVNlbGZUaW1lKTt3YWxsU2VsZlBhcnNlTGF6eS5hZGRTYW1wbGUoZS5zZWxmVGltZSk7fQpoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShjcHVTZWxmUGFyc2VMYXp5KTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh3YWxsU2VsZlBhcnNlTGF6eSk7fQpmdW5jdGlvbiBjb21wdXRlQ29tcGlsZUZ1bGxDb2RlTWV0cmljcyhoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjcHVTZWxmQ29tcGlsZUZ1bGxDb2RlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfY29tcGlsZV9mdWxsX2NvZGVfY3B1X3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVNlbGZDb21waWxlRnVsbENvZGUuZGVzY3JpcHRpb249J2NwdSBzZWxmIHRpbWUgc3BlbnQgcGVyZm9ybWluZyBjb21waWxpbmcgZnVsbCBjb2RlJztjb25zdCB3YWxsU2VsZkNvbXBpbGVGdWxsQ29kZT1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X2NvbXBpbGVfZnVsbF9jb2RlX3dhbGxfc2VsZicsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7d2FsbFNlbGZDb21waWxlRnVsbENvZGUuZGVzY3JpcHRpb249J3dhbGwgc2VsZiB0aW1lIHNwZW50IHBlcmZvcm1pbmcgY29tcGlsaW5nIGZ1bGwgY29kZSc7Zm9yKGNvbnN0IGUgb2YgbW9kZWwuZmluZFRvcG1vc3RTbGljZXNOYW1lZCgnVjguQ29tcGlsZUZ1bGxDb2RlJykpe2NwdVNlbGZDb21waWxlRnVsbENvZGUuYWRkU2FtcGxlKGUuY3B1U2VsZlRpbWUpO3dhbGxTZWxmQ29tcGlsZUZ1bGxDb2RlLmFkZFNhbXBsZShlLnNlbGZUaW1lKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVNlbGZDb21waWxlRnVsbENvZGUpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxTZWxmQ29tcGlsZUZ1bGxDb2RlKTt9CmZ1bmN0aW9uIGNvbXB1dGVDb21waWxlSWduaXRpb25NZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVNlbGZDb21waWxlSWduaXRpb249bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9jb21waWxlX2lnbml0aW9uX2NwdV9zZWxmJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVTZWxmQ29tcGlsZUlnbml0aW9uLmRlc2NyaXB0aW9uPSdjcHUgc2VsZiB0aW1lIHNwZW50IGluIGNvbXBpbGUgaWduaXRpb24nO2NvbnN0IHdhbGxTZWxmQ29tcGlsZUlnbml0aW9uPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfY29tcGlsZV9pZ25pdGlvbl93YWxsX3NlbGYnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxTZWxmQ29tcGlsZUlnbml0aW9uLmRlc2NyaXB0aW9uPSd3YWxsIHNlbGYgdGltZSBzcGVudCBpbiBjb21waWxlIGlnbml0aW9uJztmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5Db21waWxlSWduaXRpb24nKSl7Y3B1U2VsZkNvbXBpbGVJZ25pdGlvbi5hZGRTYW1wbGUoZS5jcHVTZWxmVGltZSk7d2FsbFNlbGZDb21waWxlSWduaXRpb24uYWRkU2FtcGxlKGUuc2VsZlRpbWUpO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1U2VsZkNvbXBpbGVJZ25pdGlvbik7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFNlbGZDb21waWxlSWduaXRpb24pO30KZnVuY3Rpb24gY29tcHV0ZVJlY29tcGlsZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7Y29uc3QgY3B1VG90YWxSZWNvbXBpbGVTeW5jaHJvbm91cz1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3JlY29tcGlsZV9zeW5jaHJvbm91c19jcHVfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVRvdGFsUmVjb21waWxlU3luY2hyb25vdXMuZGVzY3JpcHRpb249J2NwdSB0b3RhbCB0aW1lIHNwZW50IGluIHN5bmNocm9ub3VzIHJlY29tcGlsYXRpb24nO2NvbnN0IHdhbGxUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcmVjb21waWxlX3N5bmNocm9ub3VzX3dhbGxfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzLmRlc2NyaXB0aW9uPSd3YWxsIHRvdGFsIHRpbWUgc3BlbnQgaW4gc3luY2hyb25vdXMgcmVjb21waWxhdGlvbic7Y29uc3QgY3B1VG90YWxSZWNvbXBpbGVDb25jdXJyZW50PW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfcmVjb21waWxlX2NvbmN1cnJlbnRfY3B1X3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVUb3RhbFJlY29tcGlsZUNvbmN1cnJlbnQuZGVzY3JpcHRpb249J2NwdSB0b3RhbCB0aW1lIHNwZW50IGluIGNvbmN1cnJlbnQgcmVjb21waWxhdGlvbic7Y29uc3Qgd2FsbFRvdGFsUmVjb21waWxlQ29uY3VycmVudD1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3JlY29tcGlsZV9jb25jdXJyZW50X3dhbGxfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO3dhbGxUb3RhbFJlY29tcGlsZUNvbmN1cnJlbnQuZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBjb25jdXJyZW50IHJlY29tcGlsYXRpb24nO2NvbnN0IGNwdVRvdGFsUmVjb21waWxlT3ZlcmFsbD1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X3JlY29tcGlsZV9vdmVyYWxsX2NwdV90b3RhbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixDVVNUT01fQk9VTkRBUklFUyk7Y3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsLmRlc2NyaXB0aW9uPSdjcHUgdG90YWwgdGltZSBzcGVudCBpbiBzeW5jaHJvbm91cyBvciBjb25jdXJyZW50IHJlY29tcGlsYXRpb24nO2NvbnN0IHdhbGxUb3RhbFJlY29tcGlsZU92ZXJhbGw9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9yZWNvbXBpbGVfb3ZlcmFsbF93YWxsX3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsVG90YWxSZWNvbXBpbGVPdmVyYWxsLmRlc2NyaXB0aW9uPSd3YWxsIHRvdGFsIHRpbWUgc3BlbnQgaW4gc3luY2hyb25vdXMgb3IgY29uY3VycmVudCByZWNvbXBpbGF0aW9uJztmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5SZWNvbXBpbGVTeW5jaHJvbm91cycpKXtjcHVUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxSZWNvbXBpbGVTeW5jaHJvbm91cy5hZGRTYW1wbGUoZS5kdXJhdGlvbik7Y3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVRvdGFsUmVjb21waWxlU3luY2hyb25vdXMpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbFJlY29tcGlsZVN5bmNocm9ub3VzKTtmb3IoY29uc3QgZSBvZiBtb2RlbC5maW5kVG9wbW9zdFNsaWNlc05hbWVkKCdWOC5SZWNvbXBpbGVDb25jdXJyZW50Jykpe2NwdVRvdGFsUmVjb21waWxlQ29uY3VycmVudC5hZGRTYW1wbGUoZS5jcHVEdXJhdGlvbik7d2FsbFRvdGFsUmVjb21waWxlQ29uY3VycmVudC5hZGRTYW1wbGUoZS5kdXJhdGlvbik7Y3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxSZWNvbXBpbGVPdmVyYWxsLmFkZFNhbXBsZShlLmR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVRvdGFsUmVjb21waWxlQ29uY3VycmVudCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0od2FsbFRvdGFsUmVjb21waWxlQ29uY3VycmVudCk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxSZWNvbXBpbGVPdmVyYWxsKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbSh3YWxsVG90YWxSZWNvbXBpbGVPdmVyYWxsKTt9CmZ1bmN0aW9uIGNvbXB1dGVPcHRpbWl6ZUNvZGVNZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVRvdGFsT3B0aW1pemVDb2RlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfb3B0aW1pemVfY29kZV9jcHVfdG90YWwnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO2NwdVRvdGFsT3B0aW1pemVDb2RlLmRlc2NyaXB0aW9uPSdjcHUgdG90YWwgdGltZSBzcGVudCBpbiBjb2RlIG9wdGltaXphdGlvbic7Y29uc3Qgd2FsbFRvdGFsT3B0aW1pemVDb2RlPW5ldyB0ci52Lkhpc3RvZ3JhbSgndjhfb3B0aW1pemVfY29kZV93YWxsX3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsVG90YWxPcHRpbWl6ZUNvZGUuZGVzY3JpcHRpb249J3dhbGwgdG90YWwgdGltZSBzcGVudCBpbiBjb2RlIG9wdGltaXphdGlvbic7Zm9yKGNvbnN0IGUgb2YgbW9kZWwuZmluZFRvcG1vc3RTbGljZXNOYW1lZCgnVjguT3B0aW1pemVDb2RlJykpe2NwdVRvdGFsT3B0aW1pemVDb2RlLmFkZFNhbXBsZShlLmNwdUR1cmF0aW9uKTt3YWxsVG90YWxPcHRpbWl6ZUNvZGUuYWRkU2FtcGxlKGUuZHVyYXRpb24pO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1VG90YWxPcHRpbWl6ZUNvZGUpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbE9wdGltaXplQ29kZSk7fQpmdW5jdGlvbiBjb21wdXRlRGVvcHRpbWl6ZUNvZGVNZXRyaWNzKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IGNwdVRvdGFsRGVvcHRpbWl6ZUNvZGU9bmV3IHRyLnYuSGlzdG9ncmFtKCd2OF9kZW9wdGltaXplX2NvZGVfY3B1X3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtjcHVUb3RhbERlb3B0aW1pemVDb2RlLmRlc2NyaXB0aW9uPSdjcHUgdG90YWwgdGltZSBzcGVudCBpbiBjb2RlIGRlb3B0aW1pemF0aW9uJztjb25zdCB3YWxsVG90YWxEZW9wdGltaXplQ29kZT1uZXcgdHIudi5IaXN0b2dyYW0oJ3Y4X2Rlb3B0aW1pemVfY29kZV93YWxsX3RvdGFsJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTt3YWxsVG90YWxEZW9wdGltaXplQ29kZS5kZXNjcmlwdGlvbj0nd2FsbCB0b3RhbCB0aW1lIHNwZW50IGluIGNvZGUgZGVvcHRpbWl6YXRpb24nO2Zvcihjb25zdCBlIG9mIG1vZGVsLmZpbmRUb3Btb3N0U2xpY2VzTmFtZWQoJ1Y4LkRlb3B0aW1pemVDb2RlJykpe2NwdVRvdGFsRGVvcHRpbWl6ZUNvZGUuYWRkU2FtcGxlKGUuY3B1RHVyYXRpb24pO3dhbGxUb3RhbERlb3B0aW1pemVDb2RlLmFkZFNhbXBsZShlLmR1cmF0aW9uKTt9Cmhpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdVRvdGFsRGVvcHRpbWl6ZUNvZGUpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHdhbGxUb3RhbERlb3B0aW1pemVDb2RlKTt9CmZ1bmN0aW9uIGV4ZWN1dGlvbk1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKXtjb21wdXRlRXhlY3V0ZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZVBhcnNlTGF6eU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZUNvbXBpbGVJZ25pdGlvbk1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZUNvbXBpbGVGdWxsQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZVJlY29tcGlsZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZU9wdGltaXplQ29kZU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCk7Y29tcHV0ZURlb3B0aW1pemVDb2RlTWV0cmljcyhoaXN0b2dyYW1zLG1vZGVsKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIoZXhlY3V0aW9uTWV0cmljKTtyZXR1cm57ZXhlY3V0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnY4JyxmdW5jdGlvbigpe2NvbnN0IFRBUkdFVF9GUFM9NjA7Y29uc3QgTVNfUEVSX1NFQ09ORD0xMDAwO2NvbnN0IFdJTkRPV19TSVpFX01TPU1TX1BFUl9TRUNPTkQvVEFSR0VUX0ZQUztmdW5jdGlvbiBnY01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLG9wdGlvbnMpe29wdGlvbnM9b3B0aW9uc3x8e307YWRkRHVyYXRpb25PZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7aWYob3B0aW9ucy5pbmNsdWRlX3N1Yl9ldmVudHMpe2FkZER1cmF0aW9uT2ZTdWJFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCk7fQphZGRQZXJjZW50YWdlSW5WOEV4ZWN1dGVPZlRvcEV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKTthZGRUb3RhbFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsKTthZGRNYXJrQ29tcGFjdG9yTXV0YXRvclV0aWxpemF0aW9uKGhpc3RvZ3JhbXMsbW9kZWwpO2FkZFRvdGFsTWFya0NvbXBhY3RvclRpbWUoaGlzdG9ncmFtcyxtb2RlbCk7YWRkVG90YWxNYXJrQ29tcGFjdG9yTWFya2luZ1RpbWUoaGlzdG9ncmFtcyxtb2RlbCk7fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGdjTWV0cmljKTtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHBlcmNlbnRhZ2VfYmlnZ2VySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcjtjb25zdCBwZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcjtjb25zdCBDVVNUT01fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDAsMjAsMjAwKS5hZGRFeHBvbmVudGlhbEJpbnMoMjAwLDEwMCk7ZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclRvcEV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDp0cnVlLG1heDp0cnVlLG1pbjpmYWxzZSxzdGQ6dHJ1ZSxzdW06dHJ1ZSxwZXJjZW50aWxlOlswLjkwXX0pO3JldHVybiBuO30KZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvclN1YkV2ZW50VGltZShuYW1lKXtjb25zdCBuPW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLENVU1RPTV9CT1VOREFSSUVTKTtuLmN1c3RvbWl6ZVN1bW1hcnlPcHRpb25zKHthdmc6dHJ1ZSxjb3VudDpmYWxzZSxtYXg6dHJ1ZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTpmYWxzZSxwZXJjZW50aWxlOlswLjkwXX0pO3JldHVybiBuO30KZnVuY3Rpb24gY3JlYXRlTnVtZXJpY0ZvcklkbGVUaW1lKG5hbWUpe2NvbnN0IG49bmV3IHRyLnYuSGlzdG9ncmFtKG5hbWUsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsQ1VTVE9NX0JPVU5EQVJJRVMpO24uY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoe2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDp0cnVlLG1pbjpmYWxzZSxzdGQ6ZmFsc2Usc3VtOnRydWUscGVyY2VudGlsZTpbXX0pO3JldHVybiBuO30KZnVuY3Rpb24gY3JlYXRlUGVyY2VudGFnZShuYW1lLG51bWVyYXRvcixkZW5vbWluYXRvcix1bml0KXtjb25zdCBoaXN0PW5ldyB0ci52Lkhpc3RvZ3JhbShuYW1lLHVuaXQpO2lmKGRlbm9taW5hdG9yPT09MCl7aGlzdC5hZGRTYW1wbGUoMCk7fWVsc2V7aGlzdC5hZGRTYW1wbGUobnVtZXJhdG9yL2Rlbm9taW5hdG9yKTt9Cmhpc3QuY3VzdG9taXplU3VtbWFyeU9wdGlvbnMoe2F2Zzp0cnVlLGNvdW50OmZhbHNlLG1heDpmYWxzZSxtaW46ZmFsc2Usc3RkOmZhbHNlLHN1bTpmYWxzZSxwZXJjZW50aWxlOltdfSk7cmV0dXJuIGhpc3Q7fQpmdW5jdGlvbiBhZGREdXJhdGlvbk9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLHRyLm1ldHJpY3MudjgudXRpbHMuaXNOb3RGb3JjZWRUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LHRyLm1ldHJpY3MudjgudXRpbHMudG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWUsZnVuY3Rpb24obmFtZSxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3BFdmVudFRpbWUobmFtZSk7ZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1RHVyYXRpb24pO30sdHIubWV0cmljcy52OC51dGlscy50b3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50TmFtZXMoKSk7fQpmdW5jdGlvbiBhZGRUb3RhbER1cmF0aW9uT2ZUb3BFdmVudHMoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsdHIubWV0cmljcy52OC51dGlscy5pc05vdEZvcmNlZFRvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsZXZlbnQ9Pid2OC1nYy10b3RhbCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2NvbnN0IGNwdUR1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3BFdmVudFRpbWUobmFtZSk7ZXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2NwdUR1cmF0aW9uLmFkZFNhbXBsZShldmVudC5jcHVEdXJhdGlvbik7fSk7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oY3B1RHVyYXRpb24pO30sWyd2OC1nYy10b3RhbCddKTt9CmZ1bmN0aW9uIGlzVjhNYXJrQ29tcGFjdG9yU3VtbWFyeShldmVudCl7cmV0dXJuIXRyLm1ldHJpY3MudjgudXRpbHMuaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KSYmdHIubWV0cmljcy52OC51dGlscy5pc01hcmtDb21wYWN0b3JTdW1tYXJ5RXZlbnQoZXZlbnQpO30KZnVuY3Rpb24gaXNWOE1hcmtDb21wYWN0b3JNYXJraW5nU3VtbWFyeShldmVudCl7cmV0dXJuIXRyLm1ldHJpY3MudjgudXRpbHMuaXNGb3JjZWRHYXJiYWdlQ29sbGVjdGlvbkV2ZW50KGV2ZW50KSYmdHIubWV0cmljcy52OC51dGlscy5pc01hcmtDb21wYWN0b3JNYXJraW5nU3VtbWFyeUV2ZW50KGV2ZW50KTt9CmZ1bmN0aW9uIGNyZWF0ZUhpc3RvZ3JhbUZyb21TdW1tYXJ5KGhpc3RvZ3JhbXMsbmFtZSxldmVudHMpe2NvbnN0IGZvcmVncm91bmREdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yVG9wRXZlbnRUaW1lKG5hbWUrJy1mb3JlZ3JvdW5kJyk7Y29uc3QgYmFja2dyb3VuZER1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3BFdmVudFRpbWUobmFtZSsnLWJhY2tncm91bmQnKTtjb25zdCB0b3RhbER1cmF0aW9uPWNyZWF0ZU51bWVyaWNGb3JUb3BFdmVudFRpbWUobmFtZSsnLXRvdGFsJyk7Y29uc3QgcmVsYXRlZE5hbWVzPW5ldyB0ci52LmQuUmVsYXRlZE5hbWVNYXAoKTtyZWxhdGVkTmFtZXMuc2V0KCdmb3JlZ3JvdW5kJyxmb3JlZ3JvdW5kRHVyYXRpb24ubmFtZSk7cmVsYXRlZE5hbWVzLnNldCgnYmFja2dyb3VuZCcsYmFja2dyb3VuZER1cmF0aW9uLm5hbWUpO2Zvcihjb25zdCBldmVudCBvZiBldmVudHMpe2ZvcmVncm91bmREdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuYXJncy5kdXJhdGlvbik7YmFja2dyb3VuZER1cmF0aW9uLmFkZFNhbXBsZShldmVudC5hcmdzLmJhY2tncm91bmRfZHVyYXRpb24pO2NvbnN0IGJyZWFrZG93bkZvclRvdGFsPW5ldyB0ci52LmQuQnJlYWtkb3duKCk7YnJlYWtkb3duRm9yVG90YWwuc2V0KCdmb3JlZ3JvdW5kJyxldmVudC5hcmdzLmR1cmF0aW9uKTticmVha2Rvd25Gb3JUb3RhbC5zZXQoJ2JhY2tncm91bmQnLGV2ZW50LmFyZ3MuYmFja2dyb3VuZF9kdXJhdGlvbik7dG90YWxEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuYXJncy5kdXJhdGlvbitldmVudC5hcmdzLmJhY2tncm91bmRfZHVyYXRpb24se2JyZWFrZG93bjpicmVha2Rvd25Gb3JUb3RhbH0pO30KaGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oZm9yZWdyb3VuZER1cmF0aW9uKTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShiYWNrZ3JvdW5kRHVyYXRpb24pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHRvdGFsRHVyYXRpb24se2JyZWFrZG93bjpyZWxhdGVkTmFtZXN9KTt9CmZ1bmN0aW9uIGFkZFRvdGFsTWFya0NvbXBhY3RvclRpbWUoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsaXNWOE1hcmtDb21wYWN0b3JTdW1tYXJ5LGV2ZW50PT4ndjgtZ2MtbWFyay1jb21wYWN0b3InLChuYW1lLGV2ZW50cyk9PmNyZWF0ZUhpc3RvZ3JhbUZyb21TdW1tYXJ5KGhpc3RvZ3JhbXMsbmFtZSxldmVudHMpLFsndjgtZ2MtbWFyay1jb21wYWN0b3InXSk7fQpmdW5jdGlvbiBhZGRUb3RhbE1hcmtDb21wYWN0b3JNYXJraW5nVGltZShoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCxpc1Y4TWFya0NvbXBhY3Rvck1hcmtpbmdTdW1tYXJ5LGV2ZW50PT4ndjgtZ2MtbWFyay1jb21wYWN0b3ItbWFya2luZycsKG5hbWUsZXZlbnRzKT0+Y3JlYXRlSGlzdG9ncmFtRnJvbVN1bW1hcnkoaGlzdG9ncmFtcyxuYW1lLGV2ZW50cyksWyd2OC1nYy1tYXJrLWNvbXBhY3Rvci1tYXJraW5nJ10pO30KZnVuY3Rpb24gYWRkRHVyYXRpb25PZlN1YkV2ZW50cyhoaXN0b2dyYW1zLG1vZGVsKXt0ci5tZXRyaWNzLnY4LnV0aWxzLmdyb3VwQW5kUHJvY2Vzc0V2ZW50cyhtb2RlbCx0ci5tZXRyaWNzLnY4LnV0aWxzLmlzTm90Rm9yY2VkU3ViR2FyYmFnZUNvbGxlY3Rpb25FdmVudCx0ci5tZXRyaWNzLnY4LnV0aWxzLnN1YkdhcmJhZ2VDb2xsZWN0aW9uRXZlbnROYW1lLGZ1bmN0aW9uKG5hbWUsZXZlbnRzKXtjb25zdCBjcHVEdXJhdGlvbj1jcmVhdGVOdW1lcmljRm9yU3ViRXZlbnRUaW1lKG5hbWUpO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjcHVEdXJhdGlvbi5hZGRTYW1wbGUoZXZlbnQuY3B1RHVyYXRpb24pO30pO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKGNwdUR1cmF0aW9uKTt9KTt9CmZ1bmN0aW9uIGFkZFBlcmNlbnRhZ2VJblY4RXhlY3V0ZU9mVG9wRXZlbnRzKGhpc3RvZ3JhbXMsbW9kZWwpe3RyLm1ldHJpY3MudjgudXRpbHMuZ3JvdXBBbmRQcm9jZXNzRXZlbnRzKG1vZGVsLHRyLm1ldHJpY3MudjgudXRpbHMuaXNOb3RGb3JjZWRUb3BHYXJiYWdlQ29sbGVjdGlvbkV2ZW50LHRyLm1ldHJpY3MudjgudXRpbHMudG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWUsZnVuY3Rpb24obmFtZSxldmVudHMpe2FkZFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsLG5hbWUsZXZlbnRzKTt9LHRyLm1ldHJpY3MudjgudXRpbHMudG9wR2FyYmFnZUNvbGxlY3Rpb25FdmVudE5hbWVzKCkpO30KZnVuY3Rpb24gYWRkVG90YWxQZXJjZW50YWdlSW5WOEV4ZWN1dGUoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC51dGlscy5ncm91cEFuZFByb2Nlc3NFdmVudHMobW9kZWwsdHIubWV0cmljcy52OC51dGlscy5pc05vdEZvcmNlZFRvcEdhcmJhZ2VDb2xsZWN0aW9uRXZlbnQsZXZlbnQ9Pid2OC1nYy10b3RhbCcsZnVuY3Rpb24obmFtZSxldmVudHMpe2FkZFBlcmNlbnRhZ2VJblY4RXhlY3V0ZShoaXN0b2dyYW1zLG1vZGVsLG5hbWUsZXZlbnRzKTt9LFsndjgtZ2MtdG90YWwnXSk7fQpmdW5jdGlvbiBhZGRQZXJjZW50YWdlSW5WOEV4ZWN1dGUoaGlzdG9ncmFtcyxtb2RlbCxuYW1lLGV2ZW50cyl7bGV0IGNwdUR1cmF0aW9uSW5WOEV4ZWN1dGU9MDtsZXQgY3B1RHVyYXRpb25Ub3RhbD0wO2V2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtjb25zdCB2OEV4ZWN1dGU9dHIubWV0cmljcy52OC51dGlscy5maW5kUGFyZW50KGV2ZW50LHRyLm1ldHJpY3MudjgudXRpbHMuaXNWOEV4ZWN1dGVFdmVudCk7aWYodjhFeGVjdXRlKXtjcHVEdXJhdGlvbkluVjhFeGVjdXRlKz1ldmVudC5jcHVEdXJhdGlvbjt9CmNwdUR1cmF0aW9uVG90YWwrPWV2ZW50LmNwdUR1cmF0aW9uO30pO2NvbnN0IHBlcmNlbnRhZ2U9Y3JlYXRlUGVyY2VudGFnZShuYW1lKydfcGVyY2VudGFnZV9pbl92OF9leGVjdXRlJyxjcHVEdXJhdGlvbkluVjhFeGVjdXRlLGNwdUR1cmF0aW9uVG90YWwscGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXIpO2hpc3RvZ3JhbXMuYWRkSGlzdG9ncmFtKHBlcmNlbnRhZ2UpO30KZnVuY3Rpb24gYWRkTWFya0NvbXBhY3Rvck11dGF0b3JVdGlsaXphdGlvbihoaXN0b2dyYW1zLG1vZGVsKXtjb25zdCBjaHJvbWVIZWxwZXI9bW9kZWwuZ2V0T3JDcmVhdGVIZWxwZXIodHIubW9kZWwuaGVscGVycy5DaHJvbWVNb2RlbEhlbHBlcik7Y29uc3QgcmVuZGVyZXJIZWxwZXJzPU9iamVjdC52YWx1ZXMoY2hyb21lSGVscGVyLnJlbmRlcmVySGVscGVycyk7dHIubWV0cmljcy52OC51dGlscy5hZGRNdXRhdG9yVXRpbGl6YXRpb24oJ3Y4LWdjLW1hcmstY29tcGFjdG9yLW1tdScsdHIubWV0cmljcy52OC51dGlscy5pc05vdEZvcmNlZE1hcmtDb21wYWN0b3JFdmVudCxbMTAwXSxyZW5kZXJlckhlbHBlcnMsaGlzdG9ncmFtcyk7fQpyZXR1cm57Z2NNZXRyaWMsV0lORE9XX1NJWkVfTVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudjgnLGZ1bmN0aW9uKCl7Y29uc3QgQ09VTlRfQ1VTVE9NX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDEsMTAwMDAwMCw1MCk7Y29uc3QgRFVSQVRJT05fQ1VTVE9NX0JPVU5EQVJJRVM9dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUV4cG9uZW50aWFsKDAuMSwxMDAwMCw1MCk7Y29uc3QgU1VNTUFSWV9PUFRJT05TPXtzdGQ6ZmFsc2UsY291bnQ6ZmFsc2Usc3VtOmZhbHNlLG1pbjpmYWxzZSxtYXg6ZmFsc2UsfTtmdW5jdGlvbiBjb252ZXJ0TWljcm9Ub01pbGxpXyh0aW1lKXtyZXR1cm4gdHIuYi5jb252ZXJ0VW5pdCh0aW1lLHRyLmIuVW5pdFByZWZpeFNjYWxlLk1FVFJJQy5NSUNSTyx0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEkpO30KZnVuY3Rpb24gYWRkRHVyYXRpb25IaXN0b2dyYW0oaGlzdG9ncmFtTmFtZSx0aW1lLGhpc3RvZ3JhbXMpe2NvbnN0IHZhbHVlPWNvbnZlcnRNaWNyb1RvTWlsbGlfKHRpbWUpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGAke2hpc3RvZ3JhbU5hbWV9OmR1cmF0aW9uYCx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHt2YWx1ZX0se2JpbkJvdW5kYXJpZXM6RFVSQVRJT05fQ1VTVE9NX0JPVU5EQVJJRVMsc3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO30KZnVuY3Rpb24gYWRkQ291bnRIaXN0b2dyYW0oaGlzdG9ncmFtTmFtZSx2YWx1ZSxoaXN0b2dyYW1zKXtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShgJHtoaXN0b2dyYW1OYW1lfTpjb3VudGAsdHIuYi5Vbml0LmJ5TmFtZS5jb3VudF9zbWFsbGVySXNCZXR0ZXIse3ZhbHVlfSx7YmluQm91bmRhcmllczpDT1VOVF9DVVNUT01fQk9VTkRBUklFUyxzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlN9KTt9CmZ1bmN0aW9uIHJ1bnRpbWVTdGF0c1RvdGFsTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IHY4U2xpY2VzPXRyLm1ldHJpY3MudjgudXRpbHMuZmlsdGVyRXZlbnRzKG1vZGVsLGV2PT5ldiBpbnN0YW5jZW9mIHRyLmUudjguVjhUaHJlYWRTbGljZSk7Y29uc3QgcnVudGltZUdyb3VwQ29sbGVjdGlvbj1uZXcgdHIuZS52OC5SdW50aW1lU3RhdHNHcm91cENvbGxlY3Rpb24oKTtydW50aW1lR3JvdXBDb2xsZWN0aW9uLmFkZFNsaWNlcyh2OFNsaWNlcyk7bGV0IG92ZXJhbGxWOFRpbWU9cnVudGltZUdyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU7bGV0IG92ZXJhbGxWOENvdW50PXJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxDb3VudDtsZXQgbWFpblRocmVhZFRpbWU9cnVudGltZUdyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU7bGV0IG1haW5UaHJlYWRDb3VudD1ydW50aW1lR3JvdXBDb2xsZWN0aW9uLnRvdGFsQ291bnQ7bGV0IG1haW5UaHJlYWRWOFRpbWU9cnVudGltZUdyb3VwQ29sbGVjdGlvbi50b3RhbFRpbWU7bGV0IG1haW5UaHJlYWRWOENvdW50PXJ1bnRpbWVHcm91cENvbGxlY3Rpb24udG90YWxDb3VudDtmb3IoY29uc3QgcnVudGltZUdyb3VwIG9mIHJ1bnRpbWVHcm91cENvbGxlY3Rpb24ucnVudGltZUdyb3Vwcyl7YWRkRHVyYXRpb25IaXN0b2dyYW0ocnVudGltZUdyb3VwLm5hbWUscnVudGltZUdyb3VwLnRpbWUsaGlzdG9ncmFtcyk7aWYocnVudGltZUdyb3VwLm5hbWU9PT0nQmxpbmsgQysrJyl7b3ZlcmFsbFY4VGltZS09cnVudGltZUdyb3VwLnRpbWU7bWFpblRocmVhZFY4VGltZS09cnVudGltZUdyb3VwLnRpbWU7fWVsc2UgaWYocnVudGltZUdyb3VwLm5hbWUuaW5jbHVkZXMoJ0JhY2tncm91bmQnKSl7bWFpblRocmVhZFRpbWUtPXJ1bnRpbWVHcm91cC50aW1lO21haW5UaHJlYWRWOFRpbWUtPXJ1bnRpbWVHcm91cC50aW1lO30KYWRkQ291bnRIaXN0b2dyYW0ocnVudGltZUdyb3VwLm5hbWUscnVudGltZUdyb3VwLmNvdW50LGhpc3RvZ3JhbXMpO2lmKHJ1bnRpbWVHcm91cC5uYW1lPT09J0JsaW5rIEMrKycpe292ZXJhbGxWOENvdW50LT1ydW50aW1lR3JvdXAuY291bnQ7bWFpblRocmVhZFY4Q291bnQtPXJ1bnRpbWVHcm91cC5jb3VudDt9ZWxzZSBpZihydW50aW1lR3JvdXAubmFtZS5pbmNsdWRlcygnQmFja2dyb3VuZCcpKXttYWluVGhyZWFkQ291bnQtPXJ1bnRpbWVHcm91cC5jb3VudDttYWluVGhyZWFkVjhDb3VudC09cnVudGltZUdyb3VwLmNvdW50O319CmlmKHJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb24udG90YWxUaW1lPjApe2NvbnN0IGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uPXJ1bnRpbWVHcm91cENvbGxlY3Rpb24uYmxpbmtSQ1NHcm91cENvbGxlY3Rpb247Zm9yKGNvbnN0IGdyb3VwIG9mIGJsaW5rUkNTR3JvdXBDb2xsZWN0aW9uLnJ1bnRpbWVHcm91cHMpe2FkZER1cmF0aW9uSGlzdG9ncmFtKGdyb3VwLm5hbWUsZ3JvdXAudGltZSxoaXN0b2dyYW1zKTthZGRDb3VudEhpc3RvZ3JhbShncm91cC5uYW1lLGdyb3VwLmNvdW50LGhpc3RvZ3JhbXMpO319CmFkZER1cmF0aW9uSGlzdG9ncmFtKCdWOC1Pbmx5JyxvdmVyYWxsVjhUaW1lLGhpc3RvZ3JhbXMpO2FkZENvdW50SGlzdG9ncmFtKCdWOC1Pbmx5JyxvdmVyYWxsVjhDb3VudCxoaXN0b2dyYW1zKTthZGREdXJhdGlvbkhpc3RvZ3JhbSgnVG90YWwtTWFpbi1UaHJlYWQnLG1haW5UaHJlYWRUaW1lLGhpc3RvZ3JhbXMpO2FkZENvdW50SGlzdG9ncmFtKCdUb3RhbC1NYWluLVRocmVhZCcsbWFpblRocmVhZENvdW50LGhpc3RvZ3JhbXMpO2FkZER1cmF0aW9uSGlzdG9ncmFtKCdWOC1Pbmx5LU1haW4tVGhyZWFkJyxtYWluVGhyZWFkVjhUaW1lLGhpc3RvZ3JhbXMpO2FkZENvdW50SGlzdG9ncmFtKCdWOC1Pbmx5LU1haW4tVGhyZWFkJyxtYWluVGhyZWFkVjhDb3VudCxoaXN0b2dyYW1zKTt9CnRyLm1ldHJpY3MuTWV0cmljUmVnaXN0cnkucmVnaXN0ZXIocnVudGltZVN0YXRzVG90YWxNZXRyaWMpO3JldHVybntydW50aW1lU3RhdHNUb3RhbE1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy52OCcsZnVuY3Rpb24oKXtmdW5jdGlvbiB2OEFuZE1lbW9yeU1ldHJpY3MoaGlzdG9ncmFtcyxtb2RlbCl7dHIubWV0cmljcy52OC5leGVjdXRpb25NZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCk7dHIubWV0cmljcy52OC5nY01ldHJpYyhoaXN0b2dyYW1zLG1vZGVsKTt0ci5tZXRyaWNzLnNoLm1lbW9yeU1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLHtyYW5nZU9mSW50ZXJlc3Q6dHIubWV0cmljcy52OC51dGlscy5yYW5nZUZvck1lbW9yeUR1bXBzKG1vZGVsKX0pO30KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3Rlcih2OEFuZE1lbW9yeU1ldHJpY3MpO3JldHVybnt2OEFuZE1lbW9yeU1ldHJpY3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3MudnInLGZ1bmN0aW9uKCl7Y29uc3QgVlJfR0xfVEhSRUFEX05BTUU9J1ZyU2hlbGxHTCc7ZnVuY3Rpb24gY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLG5hbWUsb3B0aW9ucyxoYXNDcHVUaW1lKXtjb25zdCBjcmVhdGVkSGlzdG9ncmFtcz17d2FsbDpoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbShuYW1lKydfd2FsbCcsdHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixbXSxvcHRpb25zKX07aWYoaGFzQ3B1VGltZSl7Y3JlYXRlZEhpc3RvZ3JhbXMuY3B1PWhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKG5hbWUrJ19jcHUnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10sb3B0aW9ucyk7fQpyZXR1cm4gY3JlYXRlZEhpc3RvZ3JhbXM7fQpmdW5jdGlvbiBmcmFtZUN5Y2xlRHVyYXRpb25NZXRyaWMoaGlzdG9ncmFtcyxtb2RlbCxvcHRfb3B0aW9ucyl7Y29uc3QgaGlzdG9ncmFtc0J5RXZlbnRUaXRsZT1uZXcgTWFwKCk7Y29uc3QgZXhwZWN0YXRpb25FdmVudHM9dHIuaW1wb3J0ZXIuVlJfRVhQRUNUQVRJT05fRVZFTlRTO2Zvcihjb25zdCBldmVudE5hbWUgaW4gZXhwZWN0YXRpb25FdmVudHMpe2NvbnN0IGV4dHJhSW5mbz1leHBlY3RhdGlvbkV2ZW50c1tldmVudE5hbWVdO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KGV2ZW50TmFtZSxjcmVhdGVIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsZXh0cmFJbmZvLmhpc3RvZ3JhbU5hbWUse2Rlc2NyaXB0aW9uOmV4dHJhSW5mby5kZXNjcmlwdGlvbn0sZXh0cmFJbmZvLmhhc0NwdVRpbWUpKTt9Cmhpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdVaVNjZW5lOjpPbkJlZ2luRnJhbWUuVXBkYXRlQW5pbWF0aW9uc0FuZE9wYWNpdHknLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywndXBkYXRlX2FuaW1hdGlvbnNfYW5kX29wYWNpdHknLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gYXBwbHkgYW5pbWF0aW9uIGFuZCBvcGFjaXR5IGNoYW5nZXMnfSx0cnVlKSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpU2NlbmU6Ok9uQmVnaW5GcmFtZS5VcGRhdGVCaW5kaW5ncycsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfYmluZGluZ3MnLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gcHVzaCBiaW5kaW5nIHZhbHVlcyd9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlTY2VuZTo6T25CZWdpbkZyYW1lLlVwZGF0ZUxheW91dCcsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCd1cGRhdGVfbGF5b3V0Jyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGNvbXB1dGUgZWxlbWVudCBzaXplcywgbGF5b3V0IGFuZCB0ZXh0dXJlcyd9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlTY2VuZTo6T25CZWdpbkZyYW1lLlVwZGF0ZVdvcmxkU3BhY2VUcmFuc2Zvcm0nLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywndXBkYXRlX3dvcmxkX3NwYWNlX3RyYW5zZm9ybXMnLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gY2FsY3VsYXRlIGVsZW1lbnQgdHJhbnNmb3JtcyBpbiB3b3JsZCBzcGFjZSd9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlSZW5kZXJlcjo6RHJhd1VpVmlldycsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X3VpJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgdGhlIFVJJ30sdHJ1ZSkpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdVaUVsZW1lbnRSZW5kZXJlcjo6RHJhd1RleHR1cmVkUXVhZCcsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X3RleHR1cmVkX3F1YWQnLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gZHJhdyBhIHRleHR1cmVkIGVsZW1lbnQnfSx0cnVlKSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpRWxlbWVudFJlbmRlcmVyOjpEcmF3R3JhZGllbnRRdWFkJyxjcmVhdGVIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsJ2RyYXdfZ3JhZGllbnRfcXVhZCcse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byBkcmF3IGEgZ3JhZGllbnQgZWxlbWVudCd9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlFbGVtZW50UmVuZGVyZXI6OkRyYXdHcmFkaWVudEdyaWRRdWFkJyxjcmVhdGVIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsJ2RyYXdfZ3JhZGllbnRfZ3JpZF9xdWFkJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgYSBncmFkaWVudCBncmlkIGVsZW1lbnQnfSx0cnVlKSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpRWxlbWVudFJlbmRlcmVyOjpEcmF3Q29udHJvbGxlcicsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X2NvbnRyb2xsZXInLHtkZXNjcmlwdGlvbjonRHVyYXRpb24gdG8gZHJhdyB0aGUgY29udHJvbGxlcid9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlFbGVtZW50UmVuZGVyZXI6OkRyYXdMYXNlcicsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X2xhc2VyJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgdGhlIGxhc2VyJ30sdHJ1ZSkpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdVaUVsZW1lbnRSZW5kZXJlcjo6RHJhd1JldGljbGUnLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywnZHJhd19yZXRpY2xlJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgdGhlIHJldGljbGUnfSx0cnVlKSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpRWxlbWVudFJlbmRlcmVyOjpEcmF3U2hhZG93JyxjcmVhdGVIaXN0b2dyYW1zKGhpc3RvZ3JhbXMsJ2RyYXdfc2hhZG93Jyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgYSBzaGFkb3cgZWxlbWVudCd9LHRydWUpKTtoaXN0b2dyYW1zQnlFdmVudFRpdGxlLnNldCgnVWlFbGVtZW50UmVuZGVyZXI6OkRyYXdTdGFycycsY3JlYXRlSGlzdG9ncmFtcyhoaXN0b2dyYW1zLCdkcmF3X3N0YXJzJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgdGhlIHN0YXJzJ30sdHJ1ZSkpO2hpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuc2V0KCdVaUVsZW1lbnRSZW5kZXJlcjo6RHJhd0JhY2tncm91bmQnLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywnZHJhd19iYWNrZ3JvdW5kJyx7ZGVzY3JpcHRpb246J0R1cmF0aW9uIHRvIGRyYXcgdGhlIHRleHR1cmVkIGJhY2tncm91bmQnfSx0cnVlKSk7aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5zZXQoJ1VpRWxlbWVudFJlbmRlcmVyOjpEcmF3S2V5Ym9hcmQnLGNyZWF0ZUhpc3RvZ3JhbXMoaGlzdG9ncmFtcywnZHJhd19rZXlib2FyZCcse2Rlc2NyaXB0aW9uOidEdXJhdGlvbiB0byBkcmF3IHRoZSBrZXlib2FyZCd9LHRydWUpKTtjb25zdCBkcmF3VWlTdWJTbGljZXNNYXA9bmV3IE1hcCgpO2NvbnN0IGNocm9tZUhlbHBlcj1tb2RlbC5nZXRPckNyZWF0ZUhlbHBlcih0ci5tb2RlbC5oZWxwZXJzLkNocm9tZU1vZGVsSGVscGVyKTtsZXQgcmFuZ2VPZkludGVyZXN0PW1vZGVsLmJvdW5kcztjb25zdCB1c2VyRXhwZWN0YXRpb25zT2ZJbnRlcmVzdD1bdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb25dO2lmKG9wdF9vcHRpb25zJiZvcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Qpe3JhbmdlT2ZJbnRlcmVzdD1vcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Q7dXNlckV4cGVjdGF0aW9uc09mSW50ZXJlc3QucHVzaCh0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKTt9CmZvcihjb25zdCB1ZSBvZiBtb2RlbC51c2VyTW9kZWwuZXhwZWN0YXRpb25zKXtpZih1ZS5pbml0aWF0b3JUeXBlIT09dHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuVlIpe2NvbnRpbnVlO30KaWYoIXVzZXJFeHBlY3RhdGlvbnNPZkludGVyZXN0LnNvbWUoZnVuY3Rpb24odWVPZkludGVyZXN0KXtyZXR1cm4gdWUgaW5zdGFuY2VvZiB1ZU9mSW50ZXJlc3Q7fSkpe2NvbnRpbnVlO30KaWYoIXJhbmdlT2ZJbnRlcmVzdC5pbnRlcnNlY3RzRXhwbGljaXRSYW5nZUluY2x1c2l2ZSh1ZS5zdGFydCx1ZS5lbmQpKXtjb250aW51ZTt9CmZvcihjb25zdCBoZWxwZXIgb2YgY2hyb21lSGVscGVyLmJyb3dzZXJIZWxwZXJzKXtjb25zdCBnbFRocmVhZHM9aGVscGVyLnByb2Nlc3MuZmluZEFsbFRocmVhZHNOYW1lZChWUl9HTF9USFJFQURfTkFNRSk7Zm9yKGNvbnN0IGdsVGhyZWFkIG9mIGdsVGhyZWFkcyl7Zm9yKGNvbnN0IGV2ZW50IG9mIGdsVGhyZWFkLmdldERlc2NlbmRhbnRFdmVudHMoKSl7aWYoIShoaXN0b2dyYW1zQnlFdmVudFRpdGxlLmhhcyhldmVudC50aXRsZSkpKXtjb250aW51ZTt9CmlmKGV2ZW50LnN0YXJ0PHVlLnN0YXJ0fHxldmVudC5lbmQ+dWUuZW5kKXtjb250aW51ZTt9CmlmKGV2ZW50LnN0YXJ0PHJhbmdlT2ZJbnRlcmVzdC5taW58fGV2ZW50LmVuZD5yYW5nZU9mSW50ZXJlc3QubWF4KXtjb250aW51ZTt9CmlmKGV2ZW50LnBhcmVudFNsaWNlJiZldmVudC5wYXJlbnRTbGljZS50aXRsZT09PSdVaVJlbmRlcmVyOjpEcmF3VWlWaWV3Jyl7Y29uc3QgZ3VpZD1ldmVudC5wYXJlbnRTbGljZS5ndWlkO2lmKCFkcmF3VWlTdWJTbGljZXNNYXAuaGFzKGd1aWQpKXtkcmF3VWlTdWJTbGljZXNNYXAuc2V0KGd1aWQsW10pO30KZHJhd1VpU3ViU2xpY2VzTWFwLmdldChndWlkKS5wdXNoKGV2ZW50KTtjb250aW51ZTt9CmNvbnN0e3dhbGw6d2FsbEhpc3QsY3B1OmNwdUhpc3R9PWhpc3RvZ3JhbXNCeUV2ZW50VGl0bGUuZ2V0KGV2ZW50LnRpdGxlKTt3YWxsSGlzdC5hZGRTYW1wbGUoZXZlbnQuZHVyYXRpb24pO2lmKGNwdUhpc3QhPT11bmRlZmluZWQpe2NwdUhpc3QuYWRkU2FtcGxlKGV2ZW50LmNwdUR1cmF0aW9uKTt9fX19fQpmb3IoY29uc3Qgc3ViU2xpY2VzIG9mIGRyYXdVaVN1YlNsaWNlc01hcC52YWx1ZXMoKSl7Y29uc3QgZXZlbnRNYXA9bmV3IE1hcCgpO2Zvcihjb25zdCBldmVudCBvZiBzdWJTbGljZXMpe2lmKCFldmVudE1hcC5oYXMoZXZlbnQudGl0bGUpKXtldmVudE1hcC5zZXQoZXZlbnQudGl0bGUse3dhbGw6MCxjcHU6MH0pO30KZXZlbnRNYXAuZ2V0KGV2ZW50LnRpdGxlKS53YWxsKz1ldmVudC5kdXJhdGlvbjtldmVudE1hcC5nZXQoZXZlbnQudGl0bGUpLmNwdSs9ZXZlbnQuY3B1RHVyYXRpb247fQpmb3IoY29uc3RbdGl0bGUsdmFsdWVzXW9mIGV2ZW50TWFwLmVudHJpZXMoKSl7Y29uc3R7d2FsbDp3YWxsSGlzdCxjcHU6Y3B1SGlzdH09aGlzdG9ncmFtc0J5RXZlbnRUaXRsZS5nZXQodGl0bGUpO3dhbGxIaXN0LmFkZFNhbXBsZSh2YWx1ZXMud2FsbCk7aWYoY3B1SGlzdCE9PXVuZGVmaW5lZCl7Y3B1SGlzdC5hZGRTYW1wbGUodmFsdWVzLmNwdSk7fX19fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKGZyYW1lQ3ljbGVEdXJhdGlvbk1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZSx9KTtyZXR1cm57ZnJhbWVDeWNsZUR1cmF0aW9uTWV0cmljLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzLnZyJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHdlYnZyTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwsb3B0X29wdGlvbnMpe2NvbnN0IFdFQlZSX0NPVU5URVJTPW5ldyBNYXAoW1snZ3B1LldlYlZSIEZQUycse25hbWU6J3dlYnZyX2ZwcycsdW5pdDp0ci5iLlVuaXQuYnlOYW1lLmNvdW50X2JpZ2dlcklzQmV0dGVyLHNhbXBsZXM6e30sb3B0aW9uczp7ZGVzY3JpcHRpb246J1dlYlZSIGZyYW1lIHBlciBzZWNvbmQnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sWydncHUuV2ViVlIgZnJhbWUgdGltZSAobXMpJyx7bmFtZTond2VidnJfZnJhbWVfdGltZScsdW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLHNhbXBsZXM6e30sb3B0aW9uczp7ZGVzY3JpcHRpb246J1dlYlZSIGZyYW1lIHRpbWUgaW4gbXMnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sWydncHUuV2ViVlIgcG9zZSBwcmVkaWN0aW9uIChtcyknLHtuYW1lOid3ZWJ2cl9wb3NlX3ByZWRpY3Rpb24nLHVuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcixzYW1wbGVzOnt9LG9wdGlvbnM6e2Rlc2NyaXB0aW9uOidXZWJWUiBwb3NlIHByZWRpY3Rpb24gaW4gbXMnLGJpbkJvdW5kYXJpZXM6dHIudi5IaXN0b2dyYW1CaW5Cb3VuZGFyaWVzLmNyZWF0ZUxpbmVhcigyMCwxMjAsMjUpLH0sfV0sXSk7Zm9yKGNvbnN0IHVlIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2NvbnN0IHJhbmdlT2ZJbnRlcmVzdEVuYWJsZWQ9b3B0X29wdGlvbnMmJm9wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDtpZihyYW5nZU9mSW50ZXJlc3RFbmFibGVkJiYhb3B0X29wdGlvbnMucmFuZ2VPZkludGVyZXN0LmludGVyc2VjdHNFeHBsaWNpdFJhbmdlSW5jbHVzaXZlKHVlLnN0YXJ0LHVlLmVuZCkpe2NvbnRpbnVlO30KaWYodWUuaW5pdGlhdG9yVHlwZSE9PXRyLm1vZGVsLnVtLklOSVRJQVRPUl9UWVBFLlZSKWNvbnRpbnVlO2lmKCFyYW5nZU9mSW50ZXJlc3RFbmFibGVkKXtpZighKHVlIGluc3RhbmNlb2YgdHIubW9kZWwudW0uQW5pbWF0aW9uRXhwZWN0YXRpb24pKWNvbnRpbnVlO31lbHNle2lmKCEodWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5BbmltYXRpb25FeHBlY3RhdGlvbnx8dWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5SZXNwb25zZUV4cGVjdGF0aW9uKSljb250aW51ZTt9CmZvcihjb25zdCBjb3VudGVyIG9mIG1vZGVsLmdldEFsbENvdW50ZXJzKCkpe2lmKCEoV0VCVlJfQ09VTlRFUlMuaGFzKGNvdW50ZXIuaWQpKSljb250aW51ZTtmb3IoY29uc3Qgc2VyaWVzIG9mIGNvdW50ZXIuc2VyaWVzKXtpZighKHNlcmllcy5uYW1lIGluIFdFQlZSX0NPVU5URVJTLmdldChjb3VudGVyLmlkKS5zYW1wbGVzKSl7V0VCVlJfQ09VTlRFUlMuZ2V0KGNvdW50ZXIuaWQpLnNhbXBsZXNbc2VyaWVzLm5hbWVdPVtdO30KZm9yKGNvbnN0IHNhbXBsZSBvZiBzZXJpZXMuc2FtcGxlcyl7aWYoc2FtcGxlLnRpbWVzdGFtcDx1ZS5zdGFydHx8c2FtcGxlLnRpbWVzdGFtcD49dWUuZW5kKXtjb250aW51ZTt9CmlmKHJhbmdlT2ZJbnRlcmVzdEVuYWJsZWQmJiFvcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoc2FtcGxlLnRpbWVzdGFtcCxzYW1wbGUudGltZXN0YW1wKSl7Y29udGludWU7fQpXRUJWUl9DT1VOVEVSUy5nZXQoY291bnRlci5pZCkuc2FtcGxlc1tzZXJpZXMubmFtZV0ucHVzaChzYW1wbGUudmFsdWUpO319fX0KaWYoISgndmFsdWUnaW4gV0VCVlJfQ09VTlRFUlMuZ2V0KCdncHUuV2ViVlIgRlBTJykuc2FtcGxlcykpe1dFQlZSX0NPVU5URVJTLmdldCgnZ3B1LldlYlZSIEZQUycpLnNhbXBsZXMudmFsdWU9WzBdO30KZm9yKGNvbnN0W2tleSx2YWx1ZV1vZiBXRUJWUl9DT1VOVEVSUyl7Zm9yKGNvbnN0W3Nlcmllc05hbWUsc2FtcGxlc11vZiBPYmplY3QuZW50cmllcyh2YWx1ZS5zYW1wbGVzKSl7bGV0IGhpc3RvZ3JhbU5hbWU9dmFsdWUubmFtZTtpZihzZXJpZXNOYW1lIT09J3ZhbHVlJyl7aGlzdG9ncmFtTmFtZT1gJHtoaXN0b2dyYW1OYW1lfV8ke3Nlcmllc05hbWV9YDt9Cmhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKGhpc3RvZ3JhbU5hbWUsdmFsdWUudW5pdCxzYW1wbGVzLHZhbHVlLm9wdGlvbnMpO319fQp0ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LnJlZ2lzdGVyKHdlYnZyTWV0cmljLHtzdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdDp0cnVlLH0pO3JldHVybnt3ZWJ2ck1ldHJpYyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubWV0cmljcy52cicsZnVuY3Rpb24oKXtmdW5jdGlvbiB3ZWJ4ck1ldHJpYyhoaXN0b2dyYW1zLG1vZGVsLG9wdF9vcHRpb25zKXtjb25zdCBERUZBVUxUX0JJTl9CT1VOREFSSUVTPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoMjAsMTIwLDI1KTtjb25zdCBjb3VudGVySGlzdG9ncmFtc0J5VGl0bGU9bmV3IE1hcCgpO2NvdW50ZXJIaXN0b2dyYW1zQnlUaXRsZS5zZXQoJ2dwdS5XZWJYUiBGUFMnLGhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCd3ZWJ4cl9mcHMnLHRyLmIuVW5pdC5ieU5hbWUuY291bnRfYmlnZ2VySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOidXZWJYUiBmcmFtZXMgcGVyIHNlY29uZCcsYmluQm91bmRhcmllczpERUZBVUxUX0JJTl9CT1VOREFSSUVTLH0pKTtjb25zdCBpbnN0YW50SGlzdG9ncmFtc0J5VGl0bGU9bmV3IE1hcCgpO2NvbnN0IGV4cGVjdGF0aW9uRXZlbnRzPXRyLmltcG9ydGVyLldFQlhSX0lOU1RBTlRfRVZFTlRTO2Zvcihjb25zdFtldmVudE5hbWUsZXZlbnREYXRhXW9mIE9iamVjdC5lbnRyaWVzKGV4cGVjdGF0aW9uRXZlbnRzKSl7Y29uc3QgYXJnc1RvSGlzdG9ncmFtcz17fTtmb3IoY29uc3RbYXJnTmFtZSxhcmdEYXRhXW9mIE9iamVjdC5lbnRyaWVzKGV2ZW50RGF0YSkpe2FyZ3NUb0hpc3RvZ3JhbXNbYXJnTmFtZV09aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oYXJnRGF0YS5oaXN0b2dyYW1OYW1lLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsW10se2Rlc2NyaXB0aW9uOmFyZ0RhdGEuZGVzY3JpcHRpb24sYmluQm91bmRhcmllczpERUZBVUxUX0JJTl9CT1VOREFSSUVTLH0pO30KaW5zdGFudEhpc3RvZ3JhbXNCeVRpdGxlLnNldChldmVudE5hbWUsYXJnc1RvSGlzdG9ncmFtcyk7fQpjb25zdCByYW5nZU9mSW50ZXJlc3RFbmFibGVkPW9wdF9vcHRpb25zJiZvcHRfb3B0aW9ucy5yYW5nZU9mSW50ZXJlc3Q7Y29uc3QgcmFuZ2VPZkludGVyZXN0PShyYW5nZU9mSW50ZXJlc3RFbmFibGVkP29wdF9vcHRpb25zLnJhbmdlT2ZJbnRlcmVzdDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoLUluZmluaXR5LEluZmluaXR5KSk7Zm9yKGNvbnN0IHVlIG9mIG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMpe2lmKCFyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUodWUuc3RhcnQsdWUuZW5kKSl7Y29udGludWU7fQppZih1ZS5pbml0aWF0b3JUeXBlIT09dHIubW9kZWwudW0uSU5JVElBVE9SX1RZUEUuVlIpY29udGludWU7aWYoIXJhbmdlT2ZJbnRlcmVzdEVuYWJsZWQpe2lmKCEodWUgaW5zdGFuY2VvZiB0ci5tb2RlbC51bS5BbmltYXRpb25FeHBlY3RhdGlvbikpY29udGludWU7fWVsc2V7aWYoISh1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLkFuaW1hdGlvbkV4cGVjdGF0aW9ufHx1ZSBpbnN0YW5jZW9mIHRyLm1vZGVsLnVtLlJlc3BvbnNlRXhwZWN0YXRpb24pKWNvbnRpbnVlO30KZm9yKGNvbnN0IGNvdW50ZXIgb2YgbW9kZWwuZ2V0QWxsQ291bnRlcnMoKSl7aWYoIShjb3VudGVySGlzdG9ncmFtc0J5VGl0bGUuaGFzKGNvdW50ZXIuaWQpKSljb250aW51ZTtmb3IoY29uc3Qgc2VyaWVzIG9mIGNvdW50ZXIuc2VyaWVzKXtmb3IoY29uc3Qgc2FtcGxlIG9mIHNlcmllcy5zYW1wbGVzKXtpZihzYW1wbGUudGltZXN0YW1wPHVlLnN0YXJ0fHxzYW1wbGUudGltZXN0YW1wPj11ZS5lbmQpe2NvbnRpbnVlO30KaWYoIXJhbmdlT2ZJbnRlcmVzdC5pbnRlcnNlY3RzRXhwbGljaXRSYW5nZUluY2x1c2l2ZShzYW1wbGUudGltZXN0YW1wLHNhbXBsZS50aW1lc3RhbXApKXtjb250aW51ZTt9CmNvdW50ZXJIaXN0b2dyYW1zQnlUaXRsZS5nZXQoY291bnRlci5pZCkuYWRkU2FtcGxlKHNhbXBsZS52YWx1ZSk7fX19CmZvcihjb25zdCBldmVudCBvZiB1ZS5hc3NvY2lhdGVkRXZlbnRzLmFzU2V0KCkpe2lmKCEoaW5zdGFudEhpc3RvZ3JhbXNCeVRpdGxlLmhhcyhldmVudC50aXRsZSkpKXtjb250aW51ZTt9CmlmKCFyYW5nZU9mSW50ZXJlc3QuaW50ZXJzZWN0c0V4cGxpY2l0UmFuZ2VJbmNsdXNpdmUoZXZlbnQuc3RhcnQsZXZlbnQuc3RhcnQpKXtjb250aW51ZTt9CmNvbnN0IGV2ZW50SGlzdG9ncmFtcz1pbnN0YW50SGlzdG9ncmFtc0J5VGl0bGUuZ2V0KGV2ZW50LnRpdGxlKTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIE9iamVjdC5lbnRyaWVzKGV2ZW50LmFyZ3MpKXtpZihrZXkgaW4gZXZlbnRIaXN0b2dyYW1zKXtldmVudEhpc3RvZ3JhbXNba2V5XS5hZGRTYW1wbGUodmFsdWUse2V2ZW50Om5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KGV2ZW50KX0pO319fX0KaWYoY291bnRlckhpc3RvZ3JhbXNCeVRpdGxlLmdldCgnZ3B1LldlYlhSIEZQUycpLm51bVZhbHVlcz09PTApe2NvdW50ZXJIaXN0b2dyYW1zQnlUaXRsZS5nZXQoJ2dwdS5XZWJYUiBGUFMnKS5hZGRTYW1wbGUoMCk7fX0KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3Rlcih3ZWJ4ck1ldHJpYyx7c3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Q6dHJ1ZSx9KTtyZXR1cm57d2VieHJNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1ldHJpY3Mud2VicnRjJyxmdW5jdGlvbigpe2NvbnN0IERJU1BMQVlfSEVSVFo9NjAuMDtjb25zdCBWU1lOQ19EVVJBVElPTl9VUz0xZTYvRElTUExBWV9IRVJUWjtjb25zdCBTRVZFUklUWT0zO2NvbnN0IEZST1pFTl9GUkFNRV9WU1lOQ19DT1VOVF9USFJFU0hPTEQ9Njtjb25zdCBXRUJfTUVESUFfUExBWUVSX1VQREFURV9USVRMRT0nVXBkYXRlQ3VycmVudEZyYW1lJztjb25zdCBJREVBTF9SRU5ERVJfSU5TVEFOVF9OQU1FPSdJZGVhbCBSZW5kZXIgSW5zdGFudCc7Y29uc3QgQUNUVUFMX1JFTkRFUl9CRUdJTl9OQU1FPSdBY3R1YWwgUmVuZGVyIEJlZ2luJztjb25zdCBBQ1RVQUxfUkVOREVSX0VORF9OQU1FPSdBY3R1YWwgUmVuZGVyIEVuZCc7Y29uc3QgU1RSRUFNX0lEX05BTUU9J1NlcmlhbCc7Y29uc3QgUkVRVUlSRURfRVZFTlRfQVJHU19OQU1FUz1bSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRSxBQ1RVQUxfUkVOREVSX0JFR0lOX05BTUUsQUNUVUFMX1JFTkRFUl9FTkRfTkFNRSxTVFJFQU1fSURfTkFNRV07Y29uc3QgU1VNTUFSWV9PUFRJT05TPXRyLnYuSGlzdG9ncmFtLkFWRVJBR0VfT05MWV9TVU1NQVJZX09QVElPTlM7Y29uc3QgY291bnRfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUuY291bnRfc21hbGxlcklzQmV0dGVyO2NvbnN0IHBlcmNlbnRhZ2VfYmlnZ2VySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcjtjb25zdCBwZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLm5vcm1hbGl6ZWRQZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcjtjb25zdCB0aW1lRHVyYXRpb25Jbk1zX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IHVuaXRsZXNzTnVtYmVyX2JpZ2dlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUudW5pdGxlc3NOdW1iZXJfYmlnZ2VySXNCZXR0ZXI7ZnVuY3Rpb24gaXNWYWxpZEV2ZW50KGV2ZW50KXtpZihldmVudC50aXRsZSE9PVdFQl9NRURJQV9QTEFZRVJfVVBEQVRFX1RJVExFfHwhZXZlbnQuYXJncyl7cmV0dXJuIGZhbHNlO30KZm9yKGNvbnN0IHBhcmFtZXRlciBvZiBSRVFVSVJFRF9FVkVOVF9BUkdTX05BTUVTKXtpZighKHBhcmFtZXRlciBpbiBldmVudC5hcmdzKSl7cmV0dXJuIGZhbHNlO319CnJldHVybiB0cnVlO30KZnVuY3Rpb24gd2VicnRjUmVuZGVyaW5nTWV0cmljKGhpc3RvZ3JhbXMsbW9kZWwpe2NvbnN0IG1vZGVsSGVscGVyPW1vZGVsLmdldE9yQ3JlYXRlSGVscGVyKHRyLm1vZGVsLmhlbHBlcnMuQ2hyb21lTW9kZWxIZWxwZXIpO2xldCB3ZWJNZWRpYVBsYXllck1TRXZlbnRzPVtdO2Zvcihjb25zdCByZW5kZXJlclBpZCBpbiBtb2RlbEhlbHBlci5yZW5kZXJlckhlbHBlcnMpe2NvbnN0IHJlbmRlcmVySGVscGVyPW1vZGVsSGVscGVyLnJlbmRlcmVySGVscGVyc1tyZW5kZXJlclBpZF07Y29uc3QgY29tcG9zaXRvclRocmVhZD1yZW5kZXJlckhlbHBlci5jb21wb3NpdG9yVGhyZWFkO2lmKGNvbXBvc2l0b3JUaHJlYWQhPT11bmRlZmluZWQpe3dlYk1lZGlhUGxheWVyTVNFdmVudHM9d2ViTWVkaWFQbGF5ZXJNU0V2ZW50cy5jb25jYXQoY29tcG9zaXRvclRocmVhZC5zbGljZUdyb3VwLnNsaWNlcy5maWx0ZXIoaXNWYWxpZEV2ZW50KSk7fX0KY29uc3QgZXZlbnRzQnlTdHJlYW1OYW1lPXRyLmIuZ3JvdXBJbnRvTWFwKHdlYk1lZGlhUGxheWVyTVNFdmVudHMsZXZlbnQ9PmV2ZW50LmFyZ3NbU1RSRUFNX0lEX05BTUVdKTtmb3IoY29uc3Rbc3RyZWFtTmFtZSxldmVudHNdb2YgZXZlbnRzQnlTdHJlYW1OYW1lKXtnZXRUaW1lU3RhdHMoaGlzdG9ncmFtcyxzdHJlYW1OYW1lLGV2ZW50cyk7fX0KdHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5yZWdpc3Rlcih3ZWJydGNSZW5kZXJpbmdNZXRyaWMpO2Z1bmN0aW9uIGdldFRpbWVTdGF0cyhoaXN0b2dyYW1zLHN0cmVhbU5hbWUsZXZlbnRzKXtjb25zdCBmcmFtZUhpc3Q9Z2V0RnJhbWVEaXN0cmlidXRpb24oaGlzdG9ncmFtcyxldmVudHMpO2FkZEZwc0Zyb21GcmFtZURpc3RyaWJ1dGlvbihoaXN0b2dyYW1zLGZyYW1lSGlzdCk7YWRkRnJlZXppbmdTY29yZShoaXN0b2dyYW1zLGZyYW1lSGlzdCk7Y29uc3QgZHJpZnRUaW1lU3RhdHM9Z2V0RHJpZnRTdGF0cyhldmVudHMpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfZHJpZnRfdGltZScsdGltZUR1cmF0aW9uSW5Nc19zbWFsbGVySXNCZXR0ZXIsZHJpZnRUaW1lU3RhdHMuZHJpZnRUaW1lLHtzdW1tYXJ5T3B0aW9uczp7Y291bnQ6ZmFsc2UsbWluOmZhbHNlLHBlcmNlbnRpbGU6WzAuNzUsMC45XSx9LH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfcmVuZGVyaW5nX2xlbmd0aF9lcnJvcicscGVyY2VudGFnZV9zbWFsbGVySXNCZXR0ZXIsZHJpZnRUaW1lU3RhdHMucmVuZGVyaW5nTGVuZ3RoRXJyb3Ise3N1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTtjb25zdCBzbW9vdGhuZXNzU3RhdHM9Z2V0U21vb3RobmVzc1N0YXRzKGRyaWZ0VGltZVN0YXRzLmRyaWZ0VGltZSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19wZXJjZW50X2JhZGx5X291dF9vZl9zeW5jJyxwZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcixzbW9vdGhuZXNzU3RhdHMucGVyY2VudEJhZGx5T3V0T2ZTeW5jLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19wZXJjZW50X291dF9vZl9zeW5jJyxwZXJjZW50YWdlX3NtYWxsZXJJc0JldHRlcixzbW9vdGhuZXNzU3RhdHMucGVyY2VudE91dE9mU3luYyx7c3VtbWFyeU9wdGlvbnM6U1VNTUFSWV9PUFRJT05TLH0pO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfc21vb3RobmVzc19zY29yZScscGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcixzbW9vdGhuZXNzU3RhdHMuc21vb3RobmVzc1Njb3JlLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcmFtZXNfb3V0X29mX3N5bmMnLGNvdW50X3NtYWxsZXJJc0JldHRlcixzbW9vdGhuZXNzU3RhdHMuZnJhbWVzT3V0T2ZTeW5jLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcmFtZXNfYmFkbHlfb3V0X29mX3N5bmMnLGNvdW50X3NtYWxsZXJJc0JldHRlcixzbW9vdGhuZXNzU3RhdHMuZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmMse3N1bW1hcnlPcHRpb25zOlNVTU1BUllfT1BUSU9OUyx9KTt9CmNvbnN0IEZSQU1FX0RJU1RSSUJVVElPTl9CSU5fQk9VTkRBUklFUz10ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKDEsNTAsNDkpO2Z1bmN0aW9uIGdldEZyYW1lRGlzdHJpYnV0aW9uKGhpc3RvZ3JhbXMsZXZlbnRzKXtjb25zdCBjYWRlbmNlPXRyLmIucnVuTGVuZ3RoRW5jb2RpbmcoZXZlbnRzLm1hcChlPT5lLmFyZ3NbSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRV0pKTtyZXR1cm4gaGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcmFtZV9kaXN0cmlidXRpb24nLGNvdW50X3NtYWxsZXJJc0JldHRlcixjYWRlbmNlLm1hcCh0aWNrcz0+dGlja3MuY291bnQpLHtiaW5Cb3VuZGFyaWVzOkZSQU1FX0RJU1RSSUJVVElPTl9CSU5fQk9VTkRBUklFUyxzdW1tYXJ5T3B0aW9uczp7cGVyY2VudGlsZTpbMC43NSwwLjldLH0sfSk7fQpmdW5jdGlvbiBhZGRGcHNGcm9tRnJhbWVEaXN0cmlidXRpb24oaGlzdG9ncmFtcyxmcmFtZUhpc3Qpe2xldCBudW1iZXJGcmFtZXM9MDtsZXQgbnVtYmVyVnN5bmNzPTA7Zm9yKGxldCB0aWNrcz0xO3RpY2tzPGZyYW1lSGlzdC5hbGxCaW5zLmxlbmd0aDsrK3RpY2tzKXtjb25zdCBjb3VudD1mcmFtZUhpc3QuYWxsQmluc1t0aWNrc10uY291bnQ7bnVtYmVyRnJhbWVzKz1jb3VudDtudW1iZXJWc3luY3MrPXRpY2tzKmNvdW50O30KY29uc3QgbWVhblJhdGlvPW51bWJlclZzeW5jcy9udW1iZXJGcmFtZXM7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcHMnLHVuaXRsZXNzTnVtYmVyX2JpZ2dlcklzQmV0dGVyLERJU1BMQVlfSEVSVFovbWVhblJhdGlvLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7fQpmdW5jdGlvbiBmcm96ZW5QZW5hbHR5V2VpZ2h0KG51bWJlckZyb3plbkZyYW1lcyl7Y29uc3QgcGVuYWx0eT17NToxLDY6NSw3OjE1LDg6MjV9O3JldHVybiBwZW5hbHR5W251bWJlckZyb3plbkZyYW1lc118fCg4KihudW1iZXJGcm96ZW5GcmFtZXMtNCkpO30KZnVuY3Rpb24gYWRkRnJlZXppbmdTY29yZShoaXN0b2dyYW1zLGZyYW1lSGlzdCl7bGV0IG51bWJlclZzeW5jcz0wO2xldCBmcmVlemluZ1Njb3JlPTA7bGV0IGZyb3plbkZyYW1lc0NvdW50PTA7Zm9yKGxldCB0aWNrcz0xO3RpY2tzPGZyYW1lSGlzdC5hbGxCaW5zLmxlbmd0aDsrK3RpY2tzKXtjb25zdCBjb3VudD1mcmFtZUhpc3QuYWxsQmluc1t0aWNrc10uY291bnQ7bnVtYmVyVnN5bmNzKz10aWNrcypjb3VudDtpZih0aWNrcz49RlJPWkVOX0ZSQU1FX1ZTWU5DX0NPVU5UX1RIUkVTSE9MRCl7ZnJvemVuRnJhbWVzQ291bnQrPWNvdW50Kih0aWNrcy0xKTtmcmVlemluZ1Njb3JlKz1jb3VudCpmcm96ZW5QZW5hbHR5V2VpZ2h0KHRpY2tzLTEpO319CmZyZWV6aW5nU2NvcmU9MS1mcmVlemluZ1Njb3JlL251bWJlclZzeW5jcztpZihmcmVlemluZ1Njb3JlPDApe2ZyZWV6aW5nU2NvcmU9MDt9Cmhpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdXZWJSVENSZW5kZXJpbmdfZnJvemVuX2ZyYW1lc19jb3VudCcsY291bnRfc21hbGxlcklzQmV0dGVyLGZyb3plbkZyYW1lc0NvdW50LHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0oJ1dlYlJUQ1JlbmRlcmluZ19mcmVlemluZ19zY29yZScscGVyY2VudGFnZV9iaWdnZXJJc0JldHRlcixmcmVlemluZ1Njb3JlLHtzdW1tYXJ5T3B0aW9uczpTVU1NQVJZX09QVElPTlMsfSk7fQpmdW5jdGlvbiBnZXREcmlmdFN0YXRzKGV2ZW50cyl7Y29uc3QgZHJpZnRUaW1lPVtdO2NvbnN0IGRpc2NyZXBhbmN5PVtdO2xldCBvbGRJZGVhbFJlbmRlcj0wO2xldCBleHBlY3RlZElkZWFsUmVuZGVyPTA7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50cyl7Y29uc3QgY3VycmVudElkZWFsUmVuZGVyPWV2ZW50LmFyZ3NbSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRV07ZXhwZWN0ZWRJZGVhbFJlbmRlcis9VlNZTkNfRFVSQVRJT05fVVM7aWYoY3VycmVudElkZWFsUmVuZGVyPT09b2xkSWRlYWxSZW5kZXIpe2NvbnRpbnVlO30KY29uc3QgYWN0dWFsUmVuZGVyQmVnaW49ZXZlbnQuYXJnc1tBQ1RVQUxfUkVOREVSX0JFR0lOX05BTUVdO2RyaWZ0VGltZS5wdXNoKGFjdHVhbFJlbmRlckJlZ2luLWN1cnJlbnRJZGVhbFJlbmRlcik7ZGlzY3JlcGFuY3kucHVzaChNYXRoLmFicyhjdXJyZW50SWRlYWxSZW5kZXItZXhwZWN0ZWRJZGVhbFJlbmRlcikpO2V4cGVjdGVkSWRlYWxSZW5kZXI9Y3VycmVudElkZWFsUmVuZGVyO29sZElkZWFsUmVuZGVyPWN1cnJlbnRJZGVhbFJlbmRlcjt9CmNvbnN0IGRpc2NyZXBhbmN5U3VtPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShkaXNjcmVwYW5jeSktCmRpc2NyZXBhbmN5WzBdO2NvbnN0IGxhc3RJZGVhbFJlbmRlcj1ldmVudHNbZXZlbnRzLmxlbmd0aC0xXS5hcmdzW0lERUFMX1JFTkRFUl9JTlNUQU5UX05BTUVdO2NvbnN0IGZpcnN0SWRlYWxSZW5kZXI9ZXZlbnRzWzBdLmFyZ3NbSURFQUxfUkVOREVSX0lOU1RBTlRfTkFNRV07Y29uc3QgaWRlYWxSZW5kZXJTcGFuPWxhc3RJZGVhbFJlbmRlci1maXJzdElkZWFsUmVuZGVyO2NvbnN0IHJlbmRlcmluZ0xlbmd0aEVycm9yPWRpc2NyZXBhbmN5U3VtL2lkZWFsUmVuZGVyU3BhbjtyZXR1cm57ZHJpZnRUaW1lLHJlbmRlcmluZ0xlbmd0aEVycm9yfTt9CmZ1bmN0aW9uIGdldFNtb290aG5lc3NTdGF0cyhkcmlmdFRpbWVzKXtjb25zdCBtZWFuRHJpZnRUaW1lPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1lYW4oZHJpZnRUaW1lcyk7Y29uc3Qgbm9ybURyaWZ0VGltZXM9ZHJpZnRUaW1lcy5tYXAoZHJpZnRUaW1lPT5NYXRoLmFicyhkcmlmdFRpbWUtbWVhbkRyaWZ0VGltZSkpO2NvbnN0IGZyYW1lc1NldmVyZWx5T3V0T2ZTeW5jPW5vcm1EcmlmdFRpbWVzLmZpbHRlcihkcmlmdFRpbWU9PmRyaWZ0VGltZT4yKlZTWU5DX0RVUkFUSU9OX1VTKS5sZW5ndGg7Y29uc3QgZnJhbWVzT3V0T2ZTeW5jPW5vcm1EcmlmdFRpbWVzLmZpbHRlcihkcmlmdFRpbWU9PmRyaWZ0VGltZT5WU1lOQ19EVVJBVElPTl9VUykubGVuZ3RoO2NvbnN0IHBlcmNlbnRCYWRseU91dE9mU3luYz1mcmFtZXNTZXZlcmVseU91dE9mU3luYy9kcmlmdFRpbWVzLmxlbmd0aDtjb25zdCBwZXJjZW50T3V0T2ZTeW5jPWZyYW1lc091dE9mU3luYy9kcmlmdFRpbWVzLmxlbmd0aDtjb25zdCBmcmFtZXNPdXRPZlN5bmNPbmx5T25jZT1mcmFtZXNPdXRPZlN5bmMtZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmM7bGV0IHNtb290aG5lc3NTY29yZT0xLShmcmFtZXNPdXRPZlN5bmNPbmx5T25jZSsKU0VWRVJJVFkqZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmMpL2RyaWZ0VGltZXMubGVuZ3RoO2lmKHNtb290aG5lc3NTY29yZTwwKXtzbW9vdGhuZXNzU2NvcmU9MDt9CnJldHVybntmcmFtZXNPdXRPZlN5bmMsZnJhbWVzU2V2ZXJlbHlPdXRPZlN5bmMscGVyY2VudEJhZGx5T3V0T2ZTeW5jLHBlcmNlbnRPdXRPZlN5bmMsc21vb3RobmVzc1Njb3JlfTt9CnJldHVybnt3ZWJydGNSZW5kZXJpbmdNZXRyaWMsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtYWxlcnQtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonTGFiZWwnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5uYW1lO30sd2lkdGg6JzE1MHB4J30se3RpdGxlOidWYWx1ZScsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy52YWx1ZTt9fV07dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9ZmFsc2U7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldFJvd3NGb3JTaW5nbGVBbGVydF8oYWxlcnQpe2NvbnN0IHJvd3M9W107Zm9yKGNvbnN0IGFyZ05hbWUgaW4gYWxlcnQuYXJncyl7Y29uc3QgYXJnVmlldz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTthcmdWaWV3Lm9iamVjdD1hbGVydC5hcmdzW2FyZ05hbWVdO3Jvd3MucHVzaCh7bmFtZTphcmdOYW1lLHZhbHVlOmFyZ1ZpZXd9KTt9CmlmKGFsZXJ0LmFzc29jaWF0ZWRFdmVudHMubGVuZ3RoKXthbGVydC5hc3NvY2lhdGVkRXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZXZlbnQsaSl7Y29uc3QgbGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KG5ldyB0ci5tb2RlbC5FdmVudFNldChldmVudCksZXZlbnQudGl0bGUpO2xldCB2YWx1ZVN0cmluZz0nJztpZihldmVudCBpbnN0YW5jZW9mIHRyLm1vZGVsLlRpbWVkRXZlbnQpe3ZhbHVlU3RyaW5nPSd0b29rICcrZXZlbnQuZHVyYXRpb24udG9GaXhlZCgyKSsnbXMnO30Kcm93cy5wdXNoKHtuYW1lOmxpbmtFbCx2YWx1ZTp2YWx1ZVN0cmluZ30pO30pO30KY29uc3QgZGVzY3JpcHRpb25FbD10ci51aS5iLmNyZWF0ZURpdih7dGV4dENvbnRlbnQ6YWxlcnQuaW5mby5kZXNjcmlwdGlvbixtYXhXaWR0aDonMzAwcHgnfSk7cm93cy5wdXNoKHtuYW1lOidEZXNjcmlwdGlvbicsdmFsdWU6ZGVzY3JpcHRpb25FbH0pO2lmKGFsZXJ0LmluZm8uZG9jTGlua3Mpe2FsZXJ0LmluZm8uZG9jTGlua3MuZm9yRWFjaChmdW5jdGlvbihsaW5rT2JqZWN0KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2xpbmtFbC50YXJnZXQ9J19ibGFuayc7bGlua0VsLmhyZWY9bGlua09iamVjdC5ocmVmO1BvbHltZXIuZG9tKGxpbmtFbCkudGV4dENvbnRlbnQ9UG9seW1lci5kb20obGlua09iamVjdCkudGV4dENvbnRlbnQ7cm93cy5wdXNoKHtuYW1lOmxpbmtPYmplY3QubGFiZWwsdmFsdWU6bGlua0VsfSk7fSk7fQpyZXR1cm4gcm93czt9LGdldFJvd3NGb3JBbGVydHNfKGFsZXJ0cyl7aWYoYWxlcnRzLmxlbmd0aD09PTEpe2NvbnN0IHJvd3M9W3tuYW1lOidBbGVydCcsdmFsdWU6dHIuYi5nZXRPbmx5RWxlbWVudChhbGVydHMpLnRpdGxlfV07Y29uc3QgZGV0YWlsUm93cz10aGlzLmdldFJvd3NGb3JTaW5nbGVBbGVydF8odHIuYi5nZXRPbmx5RWxlbWVudChhbGVydHMpKTtyb3dzLnB1c2guYXBwbHkocm93cyxkZXRhaWxSb3dzKTtyZXR1cm4gcm93czt9CnJldHVybiBhbGVydHMubWFwKGZ1bmN0aW9uKGFsZXJ0KXtyZXR1cm57bmFtZTonQWxlcnQnLHZhbHVlOmFsZXJ0LnRpdGxlLGlzRXhwYW5kZWQ6YWxlcnRzLnNpemU8MTAsc3ViUm93czp0aGlzLmdldFJvd3NGb3JTaW5nbGVBbGVydF8oYWxlcnQpfTt9LHRoaXMpO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5jdXJyZW50U2VsZWN0aW9uXz09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnJvd3M9W107dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQpjb25zdCBhbGVydHM9dGhpcy5jdXJyZW50U2VsZWN0aW9uXzt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMuZ2V0Um93c0ZvckFsZXJ0c18oYWxlcnRzKTt0aGlzLiQudGFibGUucmVidWlsZCgpO30sZ2V0IHJlbGF0ZWRFdmVudHNUb0hpZ2hsaWdodCgpe2lmKCF0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgcmVzdWx0PW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKXtyZXN1bHQuYWRkRXZlbnRTZXQoZXZlbnQuYXNzb2NpYXRlZEV2ZW50cyk7fQpyZXR1cm4gcmVzdWx0O319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtYWxlcnQtc3ViLXZpZXcnLHRyLm1vZGVsLkFsZXJ0LHttdWx0aTpmYWxzZSx0aXRsZTonQWxlcnQnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1hbGVydC1zdWItdmlldycsdHIubW9kZWwuQWxlcnQse211bHRpOnRydWUsdGl0bGU6J0FsZXJ0cycsfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBOT19CUkVBS19TUEFDRT1TdHJpbmcuZnJvbUNoYXJDb2RlKDE2MCk7Y29uc3QgUklHSFRXQVJEU19BUlJPVz1TdHJpbmcuZnJvbUNoYXJDb2RlKDg1OTQpO2NvbnN0IENPTExBVE9SPW5ldyBJbnRsLkNvbGxhdG9yKHVuZGVmaW5lZCx7bnVtZXJpYzp0cnVlfSk7ZnVuY3Rpb24gVGl0bGVDb2x1bW4odGl0bGUpe3RoaXMudGl0bGU9dGl0bGU7fQpUaXRsZUNvbHVtbi5wcm90b3R5cGU9e3N1cHBvcnRzQ2VsbFNlbGVjdGlvbjpmYWxzZSx2YWx1ZShyb3cpe2NvbnN0IGZvcm1hdHRlZFRpdGxlPXRoaXMuZm9ybWF0VGl0bGUocm93KTtjb25zdCBjb250ZXh0cz1yb3cuY29udGV4dHM7aWYoY29udGV4dHM9PT11bmRlZmluZWR8fGNvbnRleHRzLmxlbmd0aD09PTApe3JldHVybiBmb3JtYXR0ZWRUaXRsZTt9CmNvbnN0IGZpcnN0Q29udGV4dD1jb250ZXh0c1swXTtjb25zdCBsYXN0Q29udGV4dD1jb250ZXh0c1tjb250ZXh0cy5sZW5ndGgtMV07bGV0IGNoYW5nZURlZmluZWRDb250ZXh0Q291bnQ9MDtmb3IobGV0IGk9MTtpPGNvbnRleHRzLmxlbmd0aDtpKyspe2lmKChjb250ZXh0c1tpXT09PXVuZGVmaW5lZCkhPT0oY29udGV4dHNbaS0xXT09PXVuZGVmaW5lZCkpe2NoYW5nZURlZmluZWRDb250ZXh0Q291bnQrKzt9fQpsZXQgY29sb3I9dW5kZWZpbmVkO2xldCBwcmVmaXg9dW5kZWZpbmVkO2lmKCFmaXJzdENvbnRleHQmJmxhc3RDb250ZXh0KXtjb2xvcj0ncmVkJztwcmVmaXg9JysrKyc7fWVsc2UgaWYoZmlyc3RDb250ZXh0JiYhbGFzdENvbnRleHQpe2NvbG9yPSdncmVlbic7cHJlZml4PSctLS0nO30KaWYoY2hhbmdlRGVmaW5lZENvbnRleHRDb3VudD4xKXtjb2xvcj0ncHVycGxlJzt9CmlmKGNvbG9yPT09dW5kZWZpbmVkJiZwcmVmaXg9PT11bmRlZmluZWQpe3JldHVybiBmb3JtYXR0ZWRUaXRsZTt9CmNvbnN0IHRpdGxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO2lmKHByZWZpeCE9PXVuZGVmaW5lZCl7Y29uc3QgcHJlZml4RWw9dHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDpwcmVmaXh9KTtwcmVmaXhFbC5zdHlsZS5mb250RmFtaWx5PSdtb25vc3BhY2UnO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHByZWZpeEVsKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmFzSFRNTE9yVGV4dE5vZGUoTk9fQlJFQUtfU1BBQ0UpKTt9CmlmKGNvbG9yIT09dW5kZWZpbmVkKXt0aXRsZUVsLnN0eWxlLmNvbG9yPWNvbG9yO30KUG9seW1lci5kb20odGl0bGVFbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKGZvcm1hdHRlZFRpdGxlKSk7cmV0dXJuIHRpdGxlRWw7fSxmb3JtYXRUaXRsZShyb3cpe3JldHVybiByb3cudGl0bGU7fSxjbXAocm93QSxyb3dCKXtyZXR1cm4gQ09MTEFUT1IuY29tcGFyZShyb3dBLnRpdGxlLHJvd0IudGl0bGUpO319O2Z1bmN0aW9uIE1lbW9yeUNvbHVtbihuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5uYW1lPW5hbWU7dGhpcy5jZWxsUGF0aD1jZWxsUGF0aDt0aGlzLnNob3VsZFNldENvbnRleHRHcm91cD1mYWxzZTt0aGlzLmFnZ3JlZ2F0aW9uTW9kZT1hZ2dyZWdhdGlvbk1vZGU7fQpNZW1vcnlDb2x1bW4uZnJvbVJvd3M9ZnVuY3Rpb24ocm93cyxjb25maWcpe2NvbnN0IGNlbGxOYW1lcz1uZXcgU2V0KCk7ZnVuY3Rpb24gZ2F0aGVyQ2VsbE5hbWVzKHJvd3Mpe3Jvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpe2lmKHJvdz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgZmllbGRDZWxscz1yb3dbY29uZmlnLmNlbGxLZXldO2lmKGZpZWxkQ2VsbHMhPT11bmRlZmluZWQpe2Zvcihjb25zdFtmaWVsZE5hbWUsZmllbGRDZWxsXW9mIE9iamVjdC5lbnRyaWVzKGZpZWxkQ2VsbHMpKXtpZihmaWVsZENlbGw9PT11bmRlZmluZWR8fGZpZWxkQ2VsbC5maWVsZHM9PT11bmRlZmluZWQpe2NvbnRpbnVlO30KY2VsbE5hbWVzLmFkZChmaWVsZE5hbWUpO319CmNvbnN0IHN1YlJvd3M9cm93LnN1YlJvd3M7aWYoc3ViUm93cyE9PXVuZGVmaW5lZCl7Z2F0aGVyQ2VsbE5hbWVzKHN1YlJvd3MpO319KTt9CmdhdGhlckNlbGxOYW1lcyhyb3dzKTtjb25zdCBwb3NpdGlvbnM9W107Y2VsbE5hbWVzLmZvckVhY2goZnVuY3Rpb24oY2VsbE5hbWUpe2NvbnN0IGNlbGxQYXRoPVtjb25maWcuY2VsbEtleSxjZWxsTmFtZV07Y29uc3QgbWF0Y2hpbmdSdWxlPU1lbW9yeUNvbHVtbi5maW5kTWF0Y2hpbmdSdWxlKGNlbGxOYW1lLGNvbmZpZy5ydWxlcyk7Y29uc3QgY29uc3RydWN0b3I9bWF0Y2hpbmdSdWxlLmNvbHVtbkNvbnN0cnVjdG9yO2NvbnN0IGNvbHVtbj1uZXcgY29uc3RydWN0b3IoY2VsbE5hbWUsY2VsbFBhdGgsY29uZmlnLmFnZ3JlZ2F0aW9uTW9kZSk7Y29sdW1uLnNob3VsZFNldENvbnRleHRHcm91cD0hIWNvbmZpZy5zaG91bGRTZXRDb250ZXh0R3JvdXA7cG9zaXRpb25zLnB1c2goe2ltcG9ydGFuY2U6bWF0Y2hpbmdSdWxlLmltcG9ydGFuY2UsY29sdW1ufSk7fSk7cG9zaXRpb25zLnNvcnQoZnVuY3Rpb24oYSxiKXtpZihhLmltcG9ydGFuY2U9PT1iLmltcG9ydGFuY2Upe3JldHVybiBDT0xMQVRPUi5jb21wYXJlKGEuY29sdW1uLm5hbWUsYi5jb2x1bW4ubmFtZSk7fQpyZXR1cm4gYi5pbXBvcnRhbmNlLWEuaW1wb3J0YW5jZTt9KTtyZXR1cm4gcG9zaXRpb25zLm1hcChmdW5jdGlvbihwb3NpdGlvbil7cmV0dXJuIHBvc2l0aW9uLmNvbHVtbjt9KTt9O01lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHk9ZnVuY3Rpb24oY29sdW1ucyl7Y29uc3QgY29sdW1uV2lkdGg9KDEwMC9jb2x1bW5zLmxlbmd0aCkudG9GaXhlZCgzKSsnJSc7Y29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7Y29sdW1uLndpZHRoPWNvbHVtbldpZHRoO30pO307TWVtb3J5Q29sdW1uLmZpbmRNYXRjaGluZ1J1bGU9ZnVuY3Rpb24obmFtZSxydWxlcyl7Zm9yKGxldCBpPTA7aTxydWxlcy5sZW5ndGg7aSsrKXtjb25zdCBydWxlPXJ1bGVzW2ldO2lmKE1lbW9yeUNvbHVtbi5uYW1lTWF0Y2hlc0NvbmRpdGlvbihuYW1lLHJ1bGUuY29uZGl0aW9uKSl7cmV0dXJuIHJ1bGU7fX0KcmV0dXJuIHVuZGVmaW5lZDt9O01lbW9yeUNvbHVtbi5uYW1lTWF0Y2hlc0NvbmRpdGlvbj1mdW5jdGlvbihuYW1lLGNvbmRpdGlvbil7aWYoY29uZGl0aW9uPT09dW5kZWZpbmVkKXJldHVybiB0cnVlO2lmKHR5cGVvZihjb25kaXRpb24pPT09J3N0cmluZycpcmV0dXJuIG5hbWU9PT1jb25kaXRpb247cmV0dXJuIGNvbmRpdGlvbi50ZXN0KG5hbWUpO307TWVtb3J5Q29sdW1uLkFnZ3JlZ2F0aW9uTW9kZT17RElGRjowLE1BWDoxfTtNZW1vcnlDb2x1bW4uU09NRV9USU1FU1RBTVBTX0lORk9fUVVBTlRJRklFUj0nYXQgc29tZSBzZWxlY3RlZCB0aW1lc3RhbXBzJztNZW1vcnlDb2x1bW4ucHJvdG90eXBlPXtnZXQgdGl0bGUoKXtyZXR1cm4gdGhpcy5uYW1lO30sY2VsbChyb3cpe2xldCBjZWxsPXJvdztjb25zdCBjZWxsUGF0aD10aGlzLmNlbGxQYXRoO2ZvcihsZXQgaT0wO2k8Y2VsbFBhdGgubGVuZ3RoO2krKyl7aWYoY2VsbD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NlbGw9Y2VsbFtjZWxsUGF0aFtpXV07fQpyZXR1cm4gY2VsbDt9LGFnZ3JlZ2F0ZUNlbGxzKHJvdyxzdWJSb3dzKXt9LGZpZWxkcyhyb3cpe2NvbnN0IGNlbGw9dGhpcy5jZWxsKHJvdyk7aWYoY2VsbD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBjZWxsLmZpZWxkczt9LHZhbHVlKHJvdyl7Y29uc3QgZmllbGRzPXRoaXMuZmllbGRzKHJvdyk7aWYodGhpcy5oYXNBbGxSZWxldmFudEZpZWxkc1VuZGVmaW5lZChmaWVsZHMpKXJldHVybicnO2NvbnN0IGNvbnRleHRzPXJvdy5jb250ZXh0cztjb25zdCBjb2xvcj10aGlzLmNvbG9yKGZpZWxkcyxjb250ZXh0cyk7Y29uc3QgaW5mb3M9W107dGhpcy5hZGRJbmZvcyhmaWVsZHMsY29udGV4dHMsaW5mb3MpO2NvbnN0IGZvcm1hdHRlZEZpZWxkcz10aGlzLmZvcm1hdEZpZWxkcyhmaWVsZHMpO2lmKChjb2xvcj09PXVuZGVmaW5lZHx8Zm9ybWF0dGVkRmllbGRzPT09JycpJiZpbmZvcy5sZW5ndGg9PT0wKXtyZXR1cm4gZm9ybWF0dGVkRmllbGRzO30KY29uc3QgZmllbGRFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7ZmllbGRFbC5zdHlsZS5kaXNwbGF5PSdmbGV4JztmaWVsZEVsLnN0eWxlLmFsaWduSXRlbXM9J2NlbnRlcic7ZmllbGRFbC5zdHlsZS5qdXN0aWZ5Q29udGVudD0nZmxleC1lbmQnO1BvbHltZXIuZG9tKGZpZWxkRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShmb3JtYXR0ZWRGaWVsZHMpKTtpbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGluZm8pe2NvbnN0IGluZm9FbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7aW5mb0VsLnN0eWxlLnBhZGRpbmdMZWZ0PSc0cHgnO2luZm9FbC5zdHlsZS5jdXJzb3I9J2hlbHAnO2luZm9FbC5zdHlsZS5mb250V2VpZ2h0PSdib2xkJztQb2x5bWVyLmRvbShpbmZvRWwpLnRleHRDb250ZW50PWluZm8uaWNvbjtpZihpbmZvLmNvbG9yIT09dW5kZWZpbmVkKXtpbmZvRWwuc3R5bGUuY29sb3I9aW5mby5jb2xvcjt9CmluZm9FbC50aXRsZT1pbmZvLm1lc3NhZ2U7UG9seW1lci5kb20oZmllbGRFbCkuYXBwZW5kQ2hpbGQoaW5mb0VsKTt9LHRoaXMpO2lmKGNvbG9yIT09dW5kZWZpbmVkKXtmaWVsZEVsLnN0eWxlLmNvbG9yPWNvbG9yO30KcmV0dXJuIGZpZWxkRWw7fSxoYXNBbGxSZWxldmFudEZpZWxkc1VuZGVmaW5lZChmaWVsZHMpe2lmKGZpZWxkcz09PXVuZGVmaW5lZClyZXR1cm4gdHJ1ZTtzd2l0Y2godGhpcy5hZ2dyZWdhdGlvbk1vZGUpe2Nhc2UgTWVtb3J5Q29sdW1uLkFnZ3JlZ2F0aW9uTW9kZS5ESUZGOnJldHVybiBmaWVsZHNbMF09PT11bmRlZmluZWQmJmZpZWxkc1tmaWVsZHMubGVuZ3RoLTFdPT09dW5kZWZpbmVkO2Nhc2UgTWVtb3J5Q29sdW1uLkFnZ3JlZ2F0aW9uTW9kZS5NQVg6ZGVmYXVsdDpyZXR1cm4gZmllbGRzLmV2ZXJ5KGZ1bmN0aW9uKGZpZWxkKXtyZXR1cm4gZmllbGQ9PT11bmRlZmluZWQ7fSk7fX0sY29sb3IoZmllbGRzLGNvbnRleHRzKXtyZXR1cm4gdW5kZWZpbmVkO30sZm9ybWF0RmllbGRzKGZpZWxkcyl7aWYoZmllbGRzLmxlbmd0aD09PTEpe3JldHVybiB0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKGZpZWxkc1swXSk7fQpyZXR1cm4gdGhpcy5mb3JtYXRNdWx0aXBsZUZpZWxkcyhmaWVsZHMpO30sZm9ybWF0U2luZ2xlRmllbGQoZmllbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxmb3JtYXRNdWx0aXBsZUZpZWxkcyhmaWVsZHMpe3N3aXRjaCh0aGlzLmFnZ3JlZ2F0aW9uTW9kZSl7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLkRJRkY6cmV0dXJuIHRoaXMuZm9ybWF0TXVsdGlwbGVGaWVsZHNEaWZmKGZpZWxkc1swXSxmaWVsZHNbZmllbGRzLmxlbmd0aC0xXSk7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLk1BWDpyZXR1cm4gdGhpcy5mb3JtYXRNdWx0aXBsZUZpZWxkc01heChmaWVsZHMpO2RlZmF1bHQ6cmV0dXJuIHRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6Jyh1bnN1cHBvcnRlZCBhZ2dyZWdhdGlvbiBtb2RlKScsaXRhbGljOnRydWV9KTt9fSxmb3JtYXRNdWx0aXBsZUZpZWxkc0RpZmYoZmlyc3RGaWVsZCxsYXN0RmllbGQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxmb3JtYXRNdWx0aXBsZUZpZWxkc01heChmaWVsZHMpe3JldHVybiB0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKHRoaXMuZ2V0TWF4RmllbGQoZmllbGRzKSk7fSxjbXAocm93QSxyb3dCKXtjb25zdCBmaWVsZHNBPXRoaXMuZmllbGRzKHJvd0EpO2NvbnN0IGZpZWxkc0I9dGhpcy5maWVsZHMocm93Qik7aWYoZmllbGRzQSE9PXVuZGVmaW5lZCYmZmllbGRzQiE9PXVuZGVmaW5lZCYmZmllbGRzQS5sZW5ndGghPT1maWVsZHNCLmxlbmd0aCl7dGhyb3cgbmV3IEVycm9yKCdEaWZmZXJlbnQgbnVtYmVyIG9mIGZpZWxkcycpO30KY29uc3QgdW5kZWZpbmVkQT10aGlzLmhhc0FsbFJlbGV2YW50RmllbGRzVW5kZWZpbmVkKGZpZWxkc0EpO2NvbnN0IHVuZGVmaW5lZEI9dGhpcy5oYXNBbGxSZWxldmFudEZpZWxkc1VuZGVmaW5lZChmaWVsZHNCKTtpZih1bmRlZmluZWRBJiZ1bmRlZmluZWRCKXJldHVybiAwO2lmKHVuZGVmaW5lZEEpcmV0dXJuLTE7aWYodW5kZWZpbmVkQilyZXR1cm4gMTtyZXR1cm4gdGhpcy5jb21wYXJlRmllbGRzKGZpZWxkc0EsZmllbGRzQik7fSxjb21wYXJlRmllbGRzKGZpZWxkc0EsZmllbGRzQil7aWYoZmllbGRzQS5sZW5ndGg9PT0xKXtyZXR1cm4gdGhpcy5jb21wYXJlU2luZ2xlRmllbGRzKGZpZWxkc0FbMF0sZmllbGRzQlswXSk7fQpyZXR1cm4gdGhpcy5jb21wYXJlTXVsdGlwbGVGaWVsZHMoZmllbGRzQSxmaWVsZHNCKTt9LGNvbXBhcmVTaW5nbGVGaWVsZHMoZmllbGRBLGZpZWxkQil7dGhyb3cgbmV3IEVycm9yKCdOb3QgaW1wbGVtZW50ZWQnKTt9LGNvbXBhcmVNdWx0aXBsZUZpZWxkcyhmaWVsZHNBLGZpZWxkc0Ipe3N3aXRjaCh0aGlzLmFnZ3JlZ2F0aW9uTW9kZSl7Y2FzZSBNZW1vcnlDb2x1bW4uQWdncmVnYXRpb25Nb2RlLkRJRkY6cmV0dXJuIHRoaXMuY29tcGFyZU11bHRpcGxlRmllbGRzRGlmZihmaWVsZHNBWzBdLGZpZWxkc0FbZmllbGRzQS5sZW5ndGgtMV0sZmllbGRzQlswXSxmaWVsZHNCW2ZpZWxkc0IubGVuZ3RoLTFdKTtjYXNlIE1lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGUuTUFYOnJldHVybiB0aGlzLmNvbXBhcmVNdWx0aXBsZUZpZWxkc01heChmaWVsZHNBLGZpZWxkc0IpO2RlZmF1bHQ6cmV0dXJuIDA7fX0sY29tcGFyZU11bHRpcGxlRmllbGRzRGlmZihmaXJzdEZpZWxkQSxsYXN0RmllbGRBLGZpcnN0RmllbGRCLGxhc3RGaWVsZEIpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxjb21wYXJlTXVsdGlwbGVGaWVsZHNNYXgoZmllbGRzQSxmaWVsZHNCKXtyZXR1cm4gdGhpcy5jb21wYXJlU2luZ2xlRmllbGRzKHRoaXMuZ2V0TWF4RmllbGQoZmllbGRzQSksdGhpcy5nZXRNYXhGaWVsZChmaWVsZHNCKSk7fSxnZXRNYXhGaWVsZChmaWVsZHMpe3JldHVybiBmaWVsZHMucmVkdWNlKGZ1bmN0aW9uKGFjY3VtdWxhdG9yLGZpZWxkKXtpZihmaWVsZD09PXVuZGVmaW5lZCl7cmV0dXJuIGFjY3VtdWxhdG9yO30KaWYoYWNjdW11bGF0b3I9PT11bmRlZmluZWR8fHRoaXMuY29tcGFyZVNpbmdsZUZpZWxkcyhmaWVsZCxhY2N1bXVsYXRvcik+MCl7cmV0dXJuIGZpZWxkO30KcmV0dXJuIGFjY3VtdWxhdG9yO30uYmluZCh0aGlzKSx1bmRlZmluZWQpO30sYWRkSW5mb3MoZmllbGRzLGNvbnRleHRzLGluZm9zKXt9LGdldEltcG9ydGFuY2UoaW1wb3J0YW5jZVJ1bGVzKXtpZihpbXBvcnRhbmNlUnVsZXMubGVuZ3RoPT09MClyZXR1cm4gMDtjb25zdCBtYXRjaGluZ1J1bGU9TWVtb3J5Q29sdW1uLmZpbmRNYXRjaGluZ1J1bGUodGhpcy5uYW1lLGltcG9ydGFuY2VSdWxlcyk7aWYobWF0Y2hpbmdSdWxlIT09dW5kZWZpbmVkKXtyZXR1cm4gbWF0Y2hpbmdSdWxlLmltcG9ydGFuY2U7fQpsZXQgbWluSW1wb3J0YW5jZT1pbXBvcnRhbmNlUnVsZXNbMF0uaW1wb3J0YW5jZTtmb3IobGV0IGk9MTtpPGltcG9ydGFuY2VSdWxlcy5sZW5ndGg7aSsrKXttaW5JbXBvcnRhbmNlPU1hdGgubWluKG1pbkltcG9ydGFuY2UsaW1wb3J0YW5jZVJ1bGVzW2ldLmltcG9ydGFuY2UpO30KcmV0dXJuIG1pbkltcG9ydGFuY2UtMTt9fTtmdW5jdGlvbiBTdHJpbmdNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KU3RyaW5nTWVtb3J5Q29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOk1lbW9yeUNvbHVtbi5wcm90b3R5cGUsZm9ybWF0U2luZ2xlRmllbGQoc3RyaW5nKXtyZXR1cm4gc3RyaW5nO30sZm9ybWF0TXVsdGlwbGVGaWVsZHNEaWZmKGZpcnN0U3RyaW5nLGxhc3RTdHJpbmcpe2lmKGZpcnN0U3RyaW5nPT09dW5kZWZpbmVkKXtjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKHtjb2xvcjoncmVkJ30pO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKCcrJykpO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKHRoaXMuZm9ybWF0U2luZ2xlRmllbGQobGFzdFN0cmluZykpKTtyZXR1cm4gc3BhbkVsO31lbHNlIGlmKGxhc3RTdHJpbmc9PT11bmRlZmluZWQpe2NvbnN0IHNwYW5FbD10ci51aS5iLmNyZWF0ZVNwYW4oe2NvbG9yOidncmVlbid9KTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSgnLScpKTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSh0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKGZpcnN0U3RyaW5nKSkpO3JldHVybiBzcGFuRWw7fWVsc2UgaWYoZmlyc3RTdHJpbmc9PT1sYXN0U3RyaW5nKXtyZXR1cm4gdGhpcy5mb3JtYXRTaW5nbGVGaWVsZChmaXJzdFN0cmluZyk7fQpjb25zdCBzcGFuRWw9dHIudWkuYi5jcmVhdGVTcGFuKHtjb2xvcjonRGFya09yYW5nZSd9KTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSh0aGlzLmZvcm1hdFNpbmdsZUZpZWxkKGZpcnN0U3RyaW5nKSkpO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKCcgJytSSUdIVFdBUkRTX0FSUk9XKycgJykpO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudWkuYi5hc0hUTUxPclRleHROb2RlKHRoaXMuZm9ybWF0U2luZ2xlRmllbGQobGFzdFN0cmluZykpKTtyZXR1cm4gc3BhbkVsO30sY29tcGFyZVNpbmdsZUZpZWxkcyhzdHJpbmdBLHN0cmluZ0Ipe3JldHVybiBDT0xMQVRPUi5jb21wYXJlKHN0cmluZ0Esc3RyaW5nQik7fSxjb21wYXJlTXVsdGlwbGVGaWVsZHNEaWZmKGZpcnN0U3RyaW5nQSxsYXN0U3RyaW5nQSxmaXJzdFN0cmluZ0IsbGFzdFN0cmluZ0Ipe2lmKGZpcnN0U3RyaW5nQT09PXVuZGVmaW5lZCYmZmlyc3RTdHJpbmdCIT09dW5kZWZpbmVkKXtyZXR1cm4gMTt9CmlmKGZpcnN0U3RyaW5nQSE9PXVuZGVmaW5lZCYmZmlyc3RTdHJpbmdCPT09dW5kZWZpbmVkKXtyZXR1cm4tMTt9CmlmKGZpcnN0U3RyaW5nQT09PXVuZGVmaW5lZCYmZmlyc3RTdHJpbmdCPT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5jb21wYXJlU2luZ2xlRmllbGRzKGxhc3RTdHJpbmdBLGxhc3RTdHJpbmdCKTt9CmlmKGxhc3RTdHJpbmdBPT09dW5kZWZpbmVkJiZsYXN0U3RyaW5nQiE9PXVuZGVmaW5lZCl7cmV0dXJuLTE7fQppZihsYXN0U3RyaW5nQSE9PXVuZGVmaW5lZCYmbGFzdFN0cmluZ0I9PT11bmRlZmluZWQpe3JldHVybiAxO30KaWYobGFzdFN0cmluZ0E9PT11bmRlZmluZWQmJmxhc3RTdHJpbmdCPT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5jb21wYXJlU2luZ2xlRmllbGRzKGZpcnN0U3RyaW5nQixmaXJzdFN0cmluZ0EpO30KY29uc3QgYXJlU3RyaW5nc0FFcXVhbD1maXJzdFN0cmluZ0E9PT1sYXN0U3RyaW5nQTtjb25zdCBhcmVTdHJpbmdzQkVxdWFsPWZpcnN0U3RyaW5nQj09PWxhc3RTdHJpbmdCO2lmKGFyZVN0cmluZ3NBRXF1YWwmJmFyZVN0cmluZ3NCRXF1YWwpcmV0dXJuIDA7aWYoYXJlU3RyaW5nc0FFcXVhbClyZXR1cm4tMTtpZihhcmVTdHJpbmdzQkVxdWFsKXJldHVybiAxO3JldHVybiAwO319O2Z1bmN0aW9uIE51bWVyaWNNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KTnVtZXJpY01lbW9yeUNvbHVtbi5ESUZGX0VQU0lMT049MC4wMDAxO051bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186TWVtb3J5Q29sdW1uLnByb3RvdHlwZSxhbGlnbjp0ci51aS5iLlRhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudC5SSUdIVCxhZ2dyZWdhdGVDZWxscyhyb3csc3ViUm93cyl7Y29uc3Qgc3ViUm93Q2VsbHM9c3ViUm93cy5tYXAodGhpcy5jZWxsLHRoaXMpO2xldCBoYXNEZWZpbmVkU3ViUm93TnVtZXJpYz1mYWxzZTtsZXQgdGltZXN0YW1wQ291bnQ9dW5kZWZpbmVkO3N1YlJvd0NlbGxzLmZvckVhY2goZnVuY3Rpb24oc3ViUm93Q2VsbCl7aWYoc3ViUm93Q2VsbD09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3ViUm93TnVtZXJpY3M9c3ViUm93Q2VsbC5maWVsZHM7aWYoc3ViUm93TnVtZXJpY3M9PT11bmRlZmluZWQpcmV0dXJuO2lmKHRpbWVzdGFtcENvdW50PT09dW5kZWZpbmVkKXt0aW1lc3RhbXBDb3VudD1zdWJSb3dOdW1lcmljcy5sZW5ndGg7fWVsc2UgaWYodGltZXN0YW1wQ291bnQhPT1zdWJSb3dOdW1lcmljcy5sZW5ndGgpe3Rocm93IG5ldyBFcnJvcignU3ViLXJvd3MgaGF2ZSBkaWZmZXJlbnQgbnVtYmVycyBvZiB0aW1lc3RhbXBzJyk7fQppZihoYXNEZWZpbmVkU3ViUm93TnVtZXJpYyl7cmV0dXJuO30KaGFzRGVmaW5lZFN1YlJvd051bWVyaWM9c3ViUm93TnVtZXJpY3Muc29tZShmdW5jdGlvbihudW1lcmljKXtyZXR1cm4gbnVtZXJpYyE9PXVuZGVmaW5lZDt9KTt9KTtpZighaGFzRGVmaW5lZFN1YlJvd051bWVyaWMpe3JldHVybjt9CmNvbnN0IGNlbGxQYXRoPXRoaXMuY2VsbFBhdGg7bGV0IHJvd0NlbGw9cm93O2ZvcihsZXQgaT0wO2k8Y2VsbFBhdGgubGVuZ3RoO2krKyl7Y29uc3QgbmV4dFN0ZXBOYW1lPWNlbGxQYXRoW2ldO2xldCBuZXh0U3RlcD1yb3dDZWxsW25leHRTdGVwTmFtZV07aWYobmV4dFN0ZXA9PT11bmRlZmluZWQpe2lmKGk8Y2VsbFBhdGgubGVuZ3RoLTEpe25leHRTdGVwPXt9O31lbHNle25leHRTdGVwPW5ldyBNZW1vcnlDZWxsKHVuZGVmaW5lZCk7fQpyb3dDZWxsW25leHRTdGVwTmFtZV09bmV4dFN0ZXA7fQpyb3dDZWxsPW5leHRTdGVwO30KaWYocm93Q2VsbC5maWVsZHM9PT11bmRlZmluZWQpe3Jvd0NlbGwuZmllbGRzPW5ldyBBcnJheSh0aW1lc3RhbXBDb3VudCk7fWVsc2UgaWYocm93Q2VsbC5maWVsZHMubGVuZ3RoIT09dGltZXN0YW1wQ291bnQpe3Rocm93IG5ldyBFcnJvcignUm93IGhhcyBhIGRpZmZlcmVudCBudW1iZXIgb2YgdGltZXN0YW1wcyB0aGFuIHN1Yi1yb3dzJyk7fQpmb3IobGV0IGk9MDtpPHRpbWVzdGFtcENvdW50O2krKyl7aWYocm93Q2VsbC5maWVsZHNbaV0hPT11bmRlZmluZWQpY29udGludWU7cm93Q2VsbC5maWVsZHNbaV09dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5hZ2dyZWdhdGVOdW1lcmljcyhzdWJSb3dDZWxscy5tYXAoZnVuY3Rpb24oc3ViUm93Q2VsbCl7aWYoc3ViUm93Q2VsbD09PXVuZGVmaW5lZHx8c3ViUm93Q2VsbC5maWVsZHM9PT11bmRlZmluZWQpe3JldHVybiB1bmRlZmluZWQ7fQpyZXR1cm4gc3ViUm93Q2VsbC5maWVsZHNbaV07fSkpO319LGZvcm1hdFNpbmdsZUZpZWxkKG51bWVyaWMpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4obnVtZXJpYyx7Y29udGV4dDp0aGlzLmdldEZvcm1hdHRpbmdDb250ZXh0KG51bWVyaWMudW5pdCksY29udGV4dEdyb3VwOnRoaXMuc2hvdWxkU2V0Q29udGV4dEdyb3VwP3RoaXMubmFtZTp1bmRlZmluZWQsaW5saW5lOnRydWUsfSk7fSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtyZXR1cm4gdW5kZWZpbmVkO30sZm9ybWF0TXVsdGlwbGVGaWVsZHNEaWZmKGZpcnN0TnVtZXJpYyxsYXN0TnVtZXJpYyl7cmV0dXJuIHRoaXMuZm9ybWF0U2luZ2xlRmllbGQodGhpcy5nZXREaWZmRmllbGRfKGZpcnN0TnVtZXJpYyxsYXN0TnVtZXJpYykpO30sY29tcGFyZVNpbmdsZUZpZWxkcyhudW1lcmljQSxudW1lcmljQil7cmV0dXJuIG51bWVyaWNBLnZhbHVlLW51bWVyaWNCLnZhbHVlO30sY29tcGFyZU11bHRpcGxlRmllbGRzRGlmZihmaXJzdE51bWVyaWNBLGxhc3ROdW1lcmljQSxmaXJzdE51bWVyaWNCLGxhc3ROdW1lcmljQil7cmV0dXJuIHRoaXMuZ2V0RGlmZkZpZWxkVmFsdWVfKGZpcnN0TnVtZXJpY0EsbGFzdE51bWVyaWNBKS0KdGhpcy5nZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljQixsYXN0TnVtZXJpY0IpO30sZ2V0RGlmZkZpZWxkXyhmaXJzdE51bWVyaWMsbGFzdE51bWVyaWMpe2NvbnN0IGRlZmluZWROdW1lcmljPWZpcnN0TnVtZXJpY3x8bGFzdE51bWVyaWM7cmV0dXJuIG5ldyB0ci5iLlNjYWxhcihkZWZpbmVkTnVtZXJpYy51bml0LmNvcnJlc3BvbmRpbmdEZWx0YVVuaXQsdGhpcy5nZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKSk7fSxnZXREaWZmRmllbGRWYWx1ZV8oZmlyc3ROdW1lcmljLGxhc3ROdW1lcmljKXtjb25zdCBmaXJzdFZhbHVlPWZpcnN0TnVtZXJpYz09PXVuZGVmaW5lZD8wOmZpcnN0TnVtZXJpYy52YWx1ZTtjb25zdCBsYXN0VmFsdWU9bGFzdE51bWVyaWM9PT11bmRlZmluZWQ/MDpsYXN0TnVtZXJpYy52YWx1ZTtjb25zdCBkaWZmPWxhc3RWYWx1ZS1maXJzdFZhbHVlO3JldHVybiBNYXRoLmFicyhkaWZmKTxOdW1lcmljTWVtb3J5Q29sdW1uLkRJRkZfRVBTSUxPTj8wOmRpZmY7fX07ZnVuY3Rpb24gTWVtb3J5Q2VsbChmaWVsZHMpe3RoaXMuZmllbGRzPWZpZWxkczt9Ck1lbW9yeUNlbGwuZXh0cmFjdEZpZWxkcz1mdW5jdGlvbihjZWxsKXtpZihjZWxsPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGNlbGwuZmllbGRzO307Y29uc3QgUkVDVVJTSVZFX0VYUEFOU0lPTl9NQVhfVklTSUJMRV9ST1dfQ09VTlQ9MTA7ZnVuY3Rpb24gZXhwYW5kVGFibGVSb3dzUmVjdXJzaXZlbHkodGFibGUpe2xldCBjdXJyZW50TGV2ZWxSb3dzPXRhYmxlLnRhYmxlUm93cztsZXQgdG90YWxWaXNpYmxlUm93Q291bnQ9Y3VycmVudExldmVsUm93cy5sZW5ndGg7d2hpbGUoY3VycmVudExldmVsUm93cy5sZW5ndGg+MCl7bGV0IG5leHRMZXZlbFJvd0NvdW50PTA7Y3VycmVudExldmVsUm93cy5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRMZXZlbFJvdyl7Y29uc3Qgc3ViUm93cz1jdXJyZW50TGV2ZWxSb3cuc3ViUm93cztpZihzdWJSb3dzPT09dW5kZWZpbmVkfHxzdWJSb3dzLmxlbmd0aD09PTApcmV0dXJuO25leHRMZXZlbFJvd0NvdW50Kz1zdWJSb3dzLmxlbmd0aDt9KTtpZih0b3RhbFZpc2libGVSb3dDb3VudCtuZXh0TGV2ZWxSb3dDb3VudD5SRUNVUlNJVkVfRVhQQU5TSU9OX01BWF9WSVNJQkxFX1JPV19DT1VOVCl7YnJlYWs7fQpjb25zdCBuZXh0TGV2ZWxSb3dzPW5ldyBBcnJheShuZXh0TGV2ZWxSb3dDb3VudCk7bGV0IG5leHRMZXZlbFJvd0luZGV4PTA7Y3VycmVudExldmVsUm93cy5mb3JFYWNoKGZ1bmN0aW9uKGN1cnJlbnRMZXZlbFJvdyl7Y29uc3Qgc3ViUm93cz1jdXJyZW50TGV2ZWxSb3cuc3ViUm93cztpZihzdWJSb3dzPT09dW5kZWZpbmVkfHxzdWJSb3dzLmxlbmd0aD09PTApcmV0dXJuO3RhYmxlLnNldEV4cGFuZGVkRm9yVGFibGVSb3coY3VycmVudExldmVsUm93LHRydWUpO3N1YlJvd3MuZm9yRWFjaChmdW5jdGlvbihzdWJSb3cpe25leHRMZXZlbFJvd3NbbmV4dExldmVsUm93SW5kZXgrK109c3ViUm93O30pO30pO3RvdGFsVmlzaWJsZVJvd0NvdW50Kz1uZXh0TGV2ZWxSb3dDb3VudDtjdXJyZW50TGV2ZWxSb3dzPW5leHRMZXZlbFJvd3M7fX0KZnVuY3Rpb24gYWdncmVnYXRlVGFibGVSb3dDZWxsc1JlY3Vyc2l2ZWx5KHJvdyxjb2x1bW5zLG9wdF9wcmVkaWNhdGUpe2NvbnN0IHN1YlJvd3M9cm93LnN1YlJvd3M7aWYoc3ViUm93cz09PXVuZGVmaW5lZHx8c3ViUm93cy5sZW5ndGg9PT0wKXJldHVybjtzdWJSb3dzLmZvckVhY2goZnVuY3Rpb24oc3ViUm93KXthZ2dyZWdhdGVUYWJsZVJvd0NlbGxzUmVjdXJzaXZlbHkoc3ViUm93LGNvbHVtbnMsb3B0X3ByZWRpY2F0ZSk7fSk7aWYob3B0X3ByZWRpY2F0ZT09PXVuZGVmaW5lZHx8b3B0X3ByZWRpY2F0ZShyb3cuY29udGV4dHMpKXthZ2dyZWdhdGVUYWJsZVJvd0NlbGxzKHJvdyxzdWJSb3dzLGNvbHVtbnMpO319CmZ1bmN0aW9uIGFnZ3JlZ2F0ZVRhYmxlUm93Q2VsbHMocm93LHN1YlJvd3MsY29sdW1ucyl7Y29sdW1ucy5mb3JFYWNoKGZ1bmN0aW9uKGNvbHVtbil7aWYoIShjb2x1bW4gaW5zdGFuY2VvZiBNZW1vcnlDb2x1bW4pKXJldHVybjtjb2x1bW4uYWdncmVnYXRlQ2VsbHMocm93LHN1YlJvd3MpO30pO30KZnVuY3Rpb24gY3JlYXRlQ2VsbHModGltZVRvVmFsdWVzLHZhbHVlRmllbGRzR2V0dGVyLG9wdF90aGlzKXtvcHRfdGhpcz1vcHRfdGhpc3x8dGhpcztjb25zdCBmaWVsZE5hbWVUb0ZpZWxkcz10ci5iLmludmVydEFycmF5T2ZEaWN0cyh0aW1lVG9WYWx1ZXMsdmFsdWVGaWVsZHNHZXR0ZXIsb3B0X3RoaXMpO2NvbnN0IHJlc3VsdD17fTtmb3IoY29uc3RbZmllbGROYW1lLGZpZWxkc11vZiBPYmplY3QuZW50cmllcyhmaWVsZE5hbWVUb0ZpZWxkcykpe3Jlc3VsdFtmaWVsZE5hbWVdPW5ldyB0ci51aS5hbmFseXNpcy5NZW1vcnlDZWxsKGZpZWxkcyk7fQpyZXR1cm4gcmVzdWx0O30KZnVuY3Rpb24gY3JlYXRlV2FybmluZ0luZm8obWVzc2FnZSl7cmV0dXJue21lc3NhZ2UsaWNvbjpTdHJpbmcuZnJvbUNoYXJDb2RlKDk4ODgpLGNvbG9yOidyZWQnfTt9CmZ1bmN0aW9uIERldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uKG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKXtOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQpEZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzpOdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtpZih1bml0LmJhc2VVbml0PT09dHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcyl7cmV0dXJue3VuaXRQcmVmaXg6dHIuYi5Vbml0UHJlZml4U2NhbGUuQklOQVJZLktJQkl9O30KcmV0dXJuIHVuZGVmaW5lZDt9fTtyZXR1cm57VGl0bGVDb2x1bW4sTWVtb3J5Q29sdW1uLFN0cmluZ01lbW9yeUNvbHVtbixOdW1lcmljTWVtb3J5Q29sdW1uLE1lbW9yeUNlbGwsZXhwYW5kVGFibGVSb3dzUmVjdXJzaXZlbHksYWdncmVnYXRlVGFibGVSb3dDZWxsc1JlY3Vyc2l2ZWx5LGFnZ3JlZ2F0ZVRhYmxlUm93Q2VsbHMsY3JlYXRlQ2VsbHMsY3JlYXRlV2FybmluZ0luZm8sRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW4sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IExBVElOX1NNQUxMX0xFVFRFUl9GX1dJVEhfSE9PSz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MDE5Mik7Y29uc3QgQ0lSQ0xFRF9MQVRJTl9DQVBJVEFMX0xFVFRFUl9UPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNEM5KTtjb25zdCBIZWFwRGV0YWlsc1Jvd0RpbWVuc2lvbj17Uk9PVDp7fSxTVEFDS19GUkFNRTp7bGFiZWw6J1N0YWNrIGZyYW1lJyxzeW1ib2w6TEFUSU5fU01BTExfTEVUVEVSX0ZfV0lUSF9IT09LLGNvbG9yOidoZWFwX2R1bXBfc3RhY2tfZnJhbWUnfSxPQkpFQ1RfVFlQRTp7bGFiZWw6J09iamVjdCB0eXBlJyxzeW1ib2w6Q0lSQ0xFRF9MQVRJTl9DQVBJVEFMX0xFVFRFUl9ULGNvbG9yOidoZWFwX2R1bXBfb2JqZWN0X3R5cGUnfX07ZnVuY3Rpb24gSGVhcERldGFpbHNUaXRsZUNvbHVtbih0aXRsZSl7dHIudWkuYW5hbHlzaXMuVGl0bGVDb2x1bW4uY2FsbCh0aGlzLHRpdGxlKTt9CkhlYXBEZXRhaWxzVGl0bGVDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuVGl0bGVDb2x1bW4ucHJvdG90eXBlLGZvcm1hdFRpdGxlKHJvdyl7aWYocm93LmRpbWVuc2lvbj09PUhlYXBEZXRhaWxzUm93RGltZW5zaW9uLlJPT1Qpe3JldHVybiByb3cudGl0bGU7fQpjb25zdCBzeW1ib2xFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20oc3ltYm9sRWwpLnRleHRDb250ZW50PXJvdy5kaW1lbnNpb24uc3ltYm9sO3N5bWJvbEVsLnRpdGxlPXJvdy5kaW1lbnNpb24ubGFiZWw7c3ltYm9sRWwuc3R5bGUuY29sb3I9dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKHJvdy5kaW1lbnNpb24uY29sb3IpO3N5bWJvbEVsLnN0eWxlLnBhZGRpbmdSaWdodD0nNHB4JztzeW1ib2xFbC5zdHlsZS5jdXJzb3I9J2hlbHAnO3N5bWJvbEVsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2NvbnN0IHRpdGxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHN5bWJvbEVsKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShyb3cudGl0bGUpKTtyZXR1cm4gdGl0bGVFbDt9fTtmdW5jdGlvbiBBbGxvY2F0aW9uQ291bnRDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQpBbGxvY2F0aW9uQ291bnRDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGdldEZvcm1hdHRpbmdDb250ZXh0KHVuaXQpe3JldHVybnttaW5pbXVtRnJhY3Rpb25EaWdpdHM6MH07fX07Y29uc3QgSEVBUF9ERVRBSUxTX0NPTFVNTl9SVUxFUz1be2NvbmRpdGlvbjonU2l6ZScsaW1wb3J0YW5jZToyLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidDb3VudCcsaW1wb3J0YW5jZToxLGNvbHVtbkNvbnN0cnVjdG9yOkFsbG9jYXRpb25Db3VudENvbHVtbn0se2ltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn1dO3JldHVybntIZWFwRGV0YWlsc1Jvd0RpbWVuc2lvbixIZWFwRGV0YWlsc1RpdGxlQ29sdW1uLEFsbG9jYXRpb25Db3VudENvbHVtbixIRUFQX0RFVEFJTFNfQ09MVU1OX1JVTEVTLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBSZWJ1aWxkYWJsZUJlaGF2aW9yPXtyZWJ1aWxkKCl7aWYoIXRoaXMucGFuZURpcnR5Xyl7cmV0dXJuO30KdGhpcy5wYW5lRGlydHlfPWZhbHNlO3RoaXMub25SZWJ1aWxkXygpO30sc2NoZWR1bGVSZWJ1aWxkXygpe2lmKHRoaXMucGFuZURpcnR5XylyZXR1cm47dGhpcy5wYW5lRGlydHlfPXRydWU7dHIuYi5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUodGhpcy5yZWJ1aWxkLmJpbmQodGhpcykpO30sb25SZWJ1aWxkXygpe319O3JldHVybntSZWJ1aWxkYWJsZUJlaGF2aW9yLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLXRhYi12aWV3Jyxwcm9wZXJ0aWVzOntsYWJlbF86e3R5cGU6U3RyaW5nLHZhbHVlOigpPT4nJ30sc2VsZWN0ZWRTdWJWaWV3XzpPYmplY3Qsc3ViVmlld3NfOnt0eXBlOkFycmF5LHZhbHVlOigpPT5bXX0sdGFic0hpZGRlbjp7dHlwZTpCb29sZWFuLHZhbHVlOmZhbHNlLG9ic2VydmVyOid0YWJzSGlkZGVuQ2hhbmdlZF8nfX0scmVhZHkoKXt0aGlzLiQudGFicy5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJyx0aGlzLm9uS2V5RG93bl8uYmluZCh0aGlzKSx0cnVlKTt0aGlzLnVwZGF0ZUZvY3VzYWJpbGl0eV8oKTt9LHNldCBsYWJlbChuZXdMYWJlbCl7dGhpcy5zZXQoJ2xhYmVsXycsbmV3TGFiZWwpO30sZ2V0IHRhYnMoKXtyZXR1cm4gdGhpcy5nZXQoJ3N1YlZpZXdzXycpO30sZ2V0IHNlbGVjdGVkU3ViVmlldygpe3JldHVybiB0aGlzLnNlbGVjdGVkU3ViVmlld187fSxzZXQgc2VsZWN0ZWRTdWJWaWV3KHN1YlZpZXcpe2lmKHN1YlZpZXc9PT10aGlzLnNlbGVjdGVkU3ViVmlld18pcmV0dXJuO2lmKHRoaXMuc2VsZWN0ZWRTdWJWaWV3Xyl7UG9seW1lci5kb20odGhpcy4kLnN1YlZpZXcpLnJlbW92ZUNoaWxkKHRoaXMuc2VsZWN0ZWRTdWJWaWV3Xyk7Y29uc3Qgb2xkSW5wdXQ9dGhpcy5yb290LmdldEVsZW1lbnRCeUlkKHRoaXMuY29tcHV0ZVJhZGlvSWRfKHRoaXMuc2VsZWN0ZWRTdWJWaWV3XykpO2lmKG9sZElucHV0KXtvbGRJbnB1dC5jaGVja2VkPWZhbHNlO319CnRoaXMuc2V0KCdzZWxlY3RlZFN1YlZpZXdfJyxzdWJWaWV3KTtpZihzdWJWaWV3KXtQb2x5bWVyLmRvbSh0aGlzLiQuc3ViVmlldykuYXBwZW5kQ2hpbGQoc3ViVmlldyk7Y29uc3QgbmV3SW5wdXQ9dGhpcy5yb290LmdldEVsZW1lbnRCeUlkKHRoaXMuY29tcHV0ZVJhZGlvSWRfKHN1YlZpZXcpKTtpZihuZXdJbnB1dCl7bmV3SW5wdXQuY2hlY2tlZD10cnVlO319CnRoaXMuZmlyZSgnc2VsZWN0ZWQtdGFiLWNoYW5nZScpO30sY2xlYXJTdWJWaWV3cygpe3RoaXMuc3BsaWNlKCdzdWJWaWV3c18nLDAsdGhpcy5zdWJWaWV3c18ubGVuZ3RoKTt0aGlzLnNlbGVjdGVkU3ViVmlldz11bmRlZmluZWQ7dGhpcy51cGRhdGVGb2N1c2FiaWxpdHlfKCk7fSxhZGRTdWJWaWV3KHN1YlZpZXcpe3RoaXMucHVzaCgnc3ViVmlld3NfJyxzdWJWaWV3KTtpZighdGhpcy5zZWxlY3RlZFN1YlZpZXdfKXRoaXMuc2VsZWN0ZWRTdWJWaWV3PXN1YlZpZXc7dGhpcy51cGRhdGVGb2N1c2FiaWxpdHlfKCk7fSxnZXQgc3ViVmlld3MoKXtyZXR1cm4gdGhpcy5zdWJWaWV3c187fSxyZXNldFN1YlZpZXdzKHN1YlZpZXdzKXt0aGlzLnNwbGljZSgnc3ViVmlld3NfJywwLHRoaXMuc3ViVmlld3NfLmxlbmd0aCk7aWYoc3ViVmlld3MubGVuZ3RoKXtmb3IoY29uc3Qgc3ViVmlldyBvZiBzdWJWaWV3cyl7dGhpcy5wdXNoKCdzdWJWaWV3c18nLHN1YlZpZXcpO30KdGhpcy5zZWxlY3RlZFN1YlZpZXc9c3ViVmlld3NbMF07fWVsc2V7dGhpcy5zZWxlY3RlZFN1YlZpZXc9dW5kZWZpbmVkO30KdGhpcy51cGRhdGVGb2N1c2FiaWxpdHlfKCk7fSxvblRhYkNoYW5nZWRfKGV2ZW50KXt0aGlzLnNlbGVjdGVkU3ViVmlldz1ldmVudC5tb2RlbC5pdGVtO30saXNDaGVja2VkXyhzdWJWaWV3KXtyZXR1cm4gdGhpcy5zZWxlY3RlZFN1YlZpZXdfPT09c3ViVmlldzt9LHRhYnNIaWRkZW5DaGFuZ2VkXygpe3RoaXMudXBkYXRlRm9jdXNhYmlsaXR5XygpO30sb25LZXlEb3duXyhlKXtpZih0aGlzLnRhYnNIaWRkZW4pcmV0dXJuO2xldCBrZXlIYW5kbGVkPWZhbHNlO3N3aXRjaChlLmtleUNvZGUpe2Nhc2UgMzc6a2V5SGFuZGxlZD10aGlzLnNlbGVjdFByZXZpb3VzVGFiSWZQb3NzaWJsZSgpO2JyZWFrO2Nhc2UgMzk6a2V5SGFuZGxlZD10aGlzLnNlbGVjdE5leHRUYWJJZlBvc3NpYmxlKCk7YnJlYWs7fQppZigha2V5SGFuZGxlZClyZXR1cm47ZS5zdG9wUHJvcGFnYXRpb24oKTtlLnByZXZlbnREZWZhdWx0KCk7fSxzZWxlY3ROZXh0VGFiSWZQb3NzaWJsZSgpe3JldHVybiB0aGlzLnNlbGVjdFRhYkJ5T2Zmc2V0SWZQb3NzaWJsZV8oMSk7fSxzZWxlY3RQcmV2aW91c1RhYklmUG9zc2libGUoKXtyZXR1cm4gdGhpcy5zZWxlY3RUYWJCeU9mZnNldElmUG9zc2libGVfKC0xKTt9LHNlbGVjdFRhYkJ5T2Zmc2V0SWZQb3NzaWJsZV8ob2Zmc2V0KXtpZighdGhpcy5zZWxlY3RlZFN1YlZpZXdfKXJldHVybiBmYWxzZTtjb25zdCBjdXJyZW50SW5kZXg9dGhpcy5zdWJWaWV3c18uaW5kZXhPZih0aGlzLnNlbGVjdGVkU3ViVmlld18pO2NvbnN0IG5ld1N1YlZpZXc9dGhpcy50YWJzW2N1cnJlbnRJbmRleCtvZmZzZXRdO2lmKCFuZXdTdWJWaWV3KXJldHVybiBmYWxzZTt0aGlzLnNlbGVjdGVkU3ViVmlldz1uZXdTdWJWaWV3O3JldHVybiB0cnVlO30sc2hvdWxkQmVGb2N1c2FibGVfKCl7cmV0dXJuIXRoaXMudGFic0hpZGRlbiYmdGhpcy5zdWJWaWV3c18ubGVuZ3RoPjA7fSx1cGRhdGVGb2N1c2FiaWxpdHlfKCl7aWYodGhpcy5zaG91bGRCZUZvY3VzYWJsZV8oKSl7UG9seW1lci5kb20odGhpcy4kLnRhYnMpLnNldEF0dHJpYnV0ZSgndGFiaW5kZXgnLDApO31lbHNle1BvbHltZXIuZG9tKHRoaXMuJC50YWJzKS5yZW1vdmVBdHRyaWJ1dGUoJ3RhYmluZGV4Jyk7fX0sY29tcHV0ZVJhZGlvSWRfKHN1YlZpZXcpe3JldHVybiBzdWJWaWV3LnRhZ05hbWUrJy0nK3N1YlZpZXcudGFiTGFiZWwucmVwbGFjZSgvIC9nLCctJyk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgUkVTT05BQkxFX05VTUJFUl9PRl9ST1dTPTIwMDtjb25zdCBUYWJVaVN0YXRlPXtOT19MT05HX1RBSUw6MCxISURJTkdfTE9OR19UQUlMOjEsU0hPV0lOR19MT05HX1RBSUw6Mix9O2Z1bmN0aW9uIEVtcHR5RmlsbGVyQ29sdW1uKCl7fQpFbXB0eUZpbGxlckNvbHVtbi5wcm90b3R5cGU9e3RpdGxlOicnLHZhbHVlKCl7cmV0dXJuJyc7fSx9O1BvbHltZXIoe2lzOid0ci11aS1hLW1lbW9yeS1kdW1wLWhlYXAtZGV0YWlscy1icmVha2Rvd24tdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5SZWJ1aWxkYWJsZUJlaGF2aW9yXSxjcmVhdGVkKCl7dGhpcy5kaXNwbGF5ZWROb2RlXz11bmRlZmluZWQ7dGhpcy5kaW1lbnNpb25Ub1RhYl89bmV3IE1hcCgpO30scmVhZHkoKXt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt0aGlzLnJvb3QuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsdGhpcy5vbktleURvd25fLmJpbmQodGhpcyksdHJ1ZSk7fSxnZXQgZGlzcGxheWVkTm9kZSgpe3JldHVybiB0aGlzLmRpc3BsYXllZE5vZGVfO30sc2V0IGRpc3BsYXllZE5vZGUobm9kZSl7dGhpcy5kaXNwbGF5ZWROb2RlXz1ub2RlO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IGFnZ3JlZ2F0aW9uTW9kZSgpe3JldHVybiB0aGlzLmFnZ3JlZ2F0aW9uTW9kZV87fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTtmb3IoY29uc3QgdGFiIG9mIHRoaXMuJC50YWJzLnRhYnMpe3RhYi5hZ2dyZWdhdGlvbk1vZGU9YWdncmVnYXRpb25Nb2RlO319LG9uUmVidWlsZF8oKXtjb25zdCBwcmV2aW91c2x5U2VsZWN0ZWRUYWI9dGhpcy4kLnRhYnMuc2VsZWN0ZWRTdWJWaWV3O2xldCBwcmV2aW91c2x5U2VsZWN0ZWRUYWJGb2N1c2VkPWZhbHNlO2xldCBwcmV2aW91c2x5U2VsZWN0ZWREaW1lbnNpb249dW5kZWZpbmVkO2lmKHByZXZpb3VzbHlTZWxlY3RlZFRhYil7cHJldmlvdXNseVNlbGVjdGVkVGFiRm9jdXNlZD1wcmV2aW91c2x5U2VsZWN0ZWRUYWIuaXNGb2N1c2VkO3ByZXZpb3VzbHlTZWxlY3RlZERpbWVuc2lvbj1wcmV2aW91c2x5U2VsZWN0ZWRUYWIuZGltZW5zaW9uO30KZm9yKGNvbnN0IHRhYiBvZiB0aGlzLiQudGFicy50YWJzKXt0YWIubm9kZXM9dW5kZWZpbmVkO30KdGhpcy4kLnRhYnMuY2xlYXJTdWJWaWV3cygpO2lmKHRoaXMuZGlzcGxheWVkTm9kZV89PT11bmRlZmluZWQpe3RoaXMuJC50YWJzLmxhYmVsPSdObyBoZWFwIG5vZGUgcHJvdmlkZWQuJztyZXR1cm47fQpmb3IoY29uc3RbZGltZW5zaW9uLGNoaWxkcmVuXW9mIHRoaXMuZGlzcGxheWVkTm9kZV8uY2hpbGROb2Rlcyl7aWYoIXRoaXMuZGltZW5zaW9uVG9UYWJfLmhhcyhkaW1lbnNpb24pKXt0aGlzLmRpbWVuc2lvblRvVGFiXy5zZXQoZGltZW5zaW9uLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtbWVtb3J5LWR1bXAtaGVhcC1kZXRhaWxzLWJyZWFrZG93bi12aWV3LXRhYicpKTt9CmNvbnN0IHRhYj10aGlzLmRpbWVuc2lvblRvVGFiXy5nZXQoZGltZW5zaW9uKTt0YWIuYWdncmVnYXRpb25Nb2RlPXRoaXMuYWdncmVnYXRpb25Nb2RlXzt0YWIuZGltZW5zaW9uPWRpbWVuc2lvbjt0YWIubm9kZXM9Y2hpbGRyZW47dGhpcy4kLnRhYnMuYWRkU3ViVmlldyh0YWIpO3RhYi5yZWJ1aWxkKCk7aWYoZGltZW5zaW9uPT09cHJldmlvdXNseVNlbGVjdGVkRGltZW5zaW9uKXt0aGlzLiQudGFicy5zZWxlY3RlZFN1YlZpZXc9dGFiO2lmKHByZXZpb3VzbHlTZWxlY3RlZFRhYkZvY3VzZWQpe3RhYi5mb2N1cygpO319fQppZih0aGlzLiQudGFicy50YWJzLmxlbmd0aD4wKXt0aGlzLiQudGFicy5sYWJlbD0nQnJlYWsgc2VsZWN0ZWQgbm9kZSBmdXJ0aGVyIGJ5Oic7fWVsc2V7dGhpcy4kLnRhYnMubGFiZWw9J1NlbGVjdGVkIG5vZGUgY2Fubm90IGJlIGJyb2tlbiBkb3duIGFueSBmdXJ0aGVyLic7fX0sb25LZXlEb3duXyhrZXlFdmVudCl7aWYoIXRoaXMuZGlzcGxheWVkTm9kZV8pcmV0dXJuO2xldCBrZXlIYW5kbGVkPWZhbHNlO3N3aXRjaChrZXlFdmVudC5rZXlDb2RlKXtjYXNlIDg6e2lmKCF0aGlzLmRpc3BsYXllZE5vZGVfLnBhcmVudE5vZGUpYnJlYWs7Y29uc3Qgdmlld0V2ZW50PW5ldyB0ci5iLkV2ZW50KCdlbnRlci1ub2RlJyk7dmlld0V2ZW50Lm5vZGU9dGhpcy5kaXNwbGF5ZWROb2RlXy5wYXJlbnROb2RlO3RoaXMuZGlzcGF0Y2hFdmVudCh2aWV3RXZlbnQpO2tleUhhbmRsZWQ9dHJ1ZTticmVhazt9CmNhc2UgMzc6Y2FzZSAzOTp7Y29uc3Qgd2FzRm9jdXNlZD10aGlzLiQudGFicy5zZWxlY3RlZFN1YlZpZXcuaXNGb2N1c2VkO2tleUhhbmRsZWQ9a2V5RXZlbnQua2V5Q29kZT09PTM3P3RoaXMuJC50YWJzLnNlbGVjdFByZXZpb3VzVGFiSWZQb3NzaWJsZSgpOnRoaXMuJC50YWJzLnNlbGVjdE5leHRUYWJJZlBvc3NpYmxlKCk7aWYod2FzRm9jdXNlZCYma2V5SGFuZGxlZCl7dGhpcy4kLnRhYnMuc2VsZWN0ZWRTdWJWaWV3LmZvY3VzKCk7fX19CmlmKCFrZXlIYW5kbGVkKXJldHVybjtrZXlFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtrZXlFdmVudC5wcmV2ZW50RGVmYXVsdCgpO319KTtQb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtYnJlYWtkb3duLXZpZXctdGFiJyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlJlYnVpbGRhYmxlQmVoYXZpb3JdLGNyZWF0ZWQoKXt0aGlzLmRpbWVuc2lvbl89dW5kZWZpbmVkO3RoaXMubm9kZXNfPXVuZGVmaW5lZDt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89dW5kZWZpbmVkO3RoaXMuZGlzcGxheUxvbmdUYWlsXz1mYWxzZTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3N0ZXAtaW50bycsZnVuY3Rpb24odGFibGVFdmVudCl7Y29uc3Qgdmlld0V2ZW50PW5ldyB0ci5iLkV2ZW50KCdlbnRlci1ub2RlJyk7dmlld0V2ZW50Lm5vZGU9dGFibGVFdmVudC50YWJsZVJvdzt0aGlzLmRpc3BhdGNoRXZlbnQodmlld0V2ZW50KTt9LmJpbmQodGhpcykpO30sZ2V0IGRpc3BsYXlMb25nVGFpbCgpe3JldHVybiB0aGlzLmRpc3BsYXlMb25nVGFpbF87fSxzZXQgZGlzcGxheUxvbmdUYWlsKG5ld1ZhbHVlKXtpZih0aGlzLmRpc3BsYXlMb25nVGFpbD09PW5ld1ZhbHVlKXJldHVybjt0aGlzLmRpc3BsYXlMb25nVGFpbF89bmV3VmFsdWU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgZGltZW5zaW9uKCl7cmV0dXJuIHRoaXMuZGltZW5zaW9uXzt9LHNldCBkaW1lbnNpb24oZGltZW5zaW9uKXt0aGlzLmRpbWVuc2lvbl89ZGltZW5zaW9uO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IG5vZGVzKCl7cmV0dXJuIHRoaXMubm9kZXNfO30sc2V0IG5vZGVzKG5vZGVzKXt0aGlzLm5vZGVzXz1ub2Rlczt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBub2Rlcygpe3JldHVybiB0aGlzLm5vZGVzX3x8W107fSxnZXQgZGltZW5zaW9uTGFiZWxfKCl7aWYodGhpcy5kaW1lbnNpb25fPT09dW5kZWZpbmVkKXJldHVybicodW5kZWZpbmVkKSc7cmV0dXJuIHRoaXMuZGltZW5zaW9uXy5sYWJlbDt9LGdldCB0YWJMYWJlbCgpe2xldCBub2RlQ291bnQ9MDtpZih0aGlzLm5vZGVzXyl7bm9kZUNvdW50PXRoaXMubm9kZXNfLmxlbmd0aDt9CnJldHVybiB0aGlzLmRpbWVuc2lvbkxhYmVsXysnICgnK25vZGVDb3VudCsnKSc7fSxnZXQgdGFiSWNvbigpe2lmKHRoaXMuZGltZW5zaW9uXz09PXVuZGVmaW5lZHx8dGhpcy5kaW1lbnNpb25fPT09dHIudWkuYW5hbHlzaXMuSGVhcERldGFpbHNSb3dEaW1lbnNpb24uUk9PVCl7cmV0dXJuIHVuZGVmaW5lZDt9CnJldHVybnt0ZXh0OnRoaXMuZGltZW5zaW9uXy5zeW1ib2wsc3R5bGU6J2NvbG9yOiAnK3RyLmIuQ29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZyh0aGlzLmRpbWVuc2lvbl8uY29sb3IpKyc7J307fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LHNldCBhZ2dyZWdhdGlvbk1vZGUoYWdncmVnYXRpb25Nb2RlKXt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89YWdncmVnYXRpb25Nb2RlO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZm9jdXMoKXt0aGlzLiQudGFibGUuZm9jdXMoKTt9LGJsdXIoKXt0aGlzLiQudGFibGUuYmx1cigpO30sZ2V0IGlzRm9jdXNlZCgpe3JldHVybiB0aGlzLiQudGFibGUuaXNGb2N1c2VkO30sb25SZWJ1aWxkXygpe3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7dGhpcy4kLnRhYmxlLmVtcHR5VmFsdWU9J0Nhbm5vdCBicmVhayBkb3duIGJ5ICcrCnRoaXMuZGltZW5zaW9uTGFiZWxfLnRvTG93ZXJDYXNlKCkrJyBhbnkgZnVydGhlci4nO2NvbnN0W3N0YXRlLHJvd3NdPXRoaXMuZ2V0Um93c18oKTtjb25zdCB0b3RhbD10aGlzLm5vZGVzLmxlbmd0aDtjb25zdCBkaXNwbGF5ZWQ9cm93cy5sZW5ndGg7Y29uc3QgaGlkZGVuPXRvdGFsLWRpc3BsYXllZDt0aGlzLnVwZGF0ZUluZm9CYXJfKHN0YXRlLFt0b3RhbCxkaXNwbGF5ZWQsaGlkZGVuXSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9dGhpcy5jcmVhdGVDb2x1bW5zXyhyb3dzKTtpZih0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PTA7dGhpcy4kLnRhYmxlLnNvcnREZXNjZW5kaW5nPWZhbHNlO30KdGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LGNyZWF0ZUNvbHVtbnNfKHJvd3Mpe2NvbnN0IHRpdGxlQ29sdW1uPW5ldyB0ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1RpdGxlQ29sdW1uKHRoaXMuZGltZW5zaW9uTGFiZWxfKTt0aXRsZUNvbHVtbi53aWR0aD0nNDAwcHgnO2NvbnN0IG51bWVyaWNDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5OidjZWxscycsYWdncmVnYXRpb25Nb2RlOnRoaXMuYWdncmVnYXRpb25Nb2RlXyxydWxlczp0ci51aS5hbmFseXNpcy5IRUFQX0RFVEFJTFNfQ09MVU1OX1JVTEVTLHNob3VsZFNldENvbnRleHRHcm91cDp0cnVlfSk7aWYobnVtZXJpY0NvbHVtbnMubGVuZ3RoPT09MCl7bnVtZXJpY0NvbHVtbnMucHVzaChuZXcgRW1wdHlGaWxsZXJDb2x1bW4oKSk7fQp0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uc3BhY2VFcXVhbGx5KG51bWVyaWNDb2x1bW5zKTtjb25zdCBjb2x1bW5zPVt0aXRsZUNvbHVtbl0uY29uY2F0KG51bWVyaWNDb2x1bW5zKTtyZXR1cm4gY29sdW1uczt9LGdldFJvd3NfKCl7bGV0IHJvd3M9dGhpcy5ub2RlcztpZihyb3dzLmxlbmd0aDw9UkVTT05BQkxFX05VTUJFUl9PRl9ST1dTKXtyZXR1cm5bVGFiVWlTdGF0ZS5OT19MT05HX1RBSUwscm93c107fWVsc2UgaWYodGhpcy5kaXNwbGF5TG9uZ1RhaWwpe3JldHVybltUYWJVaVN0YXRlLlNIT1dJTkdfTE9OR19UQUlMLHJvd3NdO30KY29uc3QgYWJzU2l6ZT1yb3c9Pk1hdGgubWF4KHJvdy5jZWxscy5TaXplLmZpZWxkc1swXS52YWx1ZSk7cm93cy5zb3J0KChhLGIpPT5hYnNTaXplKGIpLWFic1NpemUoYSkpO3Jvd3M9cm93cy5zbGljZSgwLFJFU09OQUJMRV9OVU1CRVJfT0ZfUk9XUyk7cmV0dXJuW1RhYlVpU3RhdGUuSElESU5HX0xPTkdfVEFJTCxyb3dzXTt9LHVwZGF0ZUluZm9CYXJfKHN0YXRlLHJvd1N0YXRzKXtpZihzdGF0ZT09PVRhYlVpU3RhdGUuU0hPV0lOR19MT05HX1RBSUwpe3RoaXMubG9uZ1RhaWxWaXNpYmxlSW5mb0Jhcl8ocm93U3RhdHMpO31lbHNlIGlmKHN0YXRlPT09VGFiVWlTdGF0ZS5ISURJTkdfTE9OR19UQUlMKXt0aGlzLmxvbmdUYWlsSGlkZGVuSW5mb0Jhcl8ocm93U3RhdHMpO31lbHNle3RoaXMuaGlkZUluZm9CYXJfKCk7fX0sbG9uZ1RhaWxWaXNpYmxlSW5mb0Jhcl8ocm93U3RhdHMpe2NvbnN0W3RvdGFsLHZpc2libGUsaGlkZGVuXT1yb3dTdGF0cztjb25zdCBjb3VsZEhpZGU9dG90YWwtUkVTT05BQkxFX05VTUJFUl9PRl9ST1dTO3RoaXMuJC5pbmZvLm1lc3NhZ2U9J1Nob3dpbmcgJyt0b3RhbCsnIHJvd3MuIFRoaXMgbWF5IGJlIHNsb3cuJzt0aGlzLiQuaW5mby5yZW1vdmVBbGxCdXR0b25zKCk7Y29uc3QgYnV0dG9uVGV4dD0nSGlkZSAnK2NvdWxkSGlkZSsnIHJvd3MuJzt0aGlzLiQuaW5mby5hZGRCdXR0b24oYnV0dG9uVGV4dCwoKT0+dGhpcy5kaXNwbGF5TG9uZ1RhaWw9ZmFsc2UpO3RoaXMuJC5pbmZvLnZpc2libGU9dHJ1ZTt9LGxvbmdUYWlsSGlkZGVuSW5mb0Jhcl8ocm93U3RhdHMpe2NvbnN0W3RvdGFsLHZpc2libGUsaGlkZGVuXT1yb3dTdGF0czt0aGlzLiQuaW5mby5tZXNzYWdlPSdIaWRpbmcgdGhlIHNtYWxsZXN0ICcraGlkZGVuKycgcm93cy4nO3RoaXMuJC5pbmZvLnJlbW92ZUFsbEJ1dHRvbnMoKTt0aGlzLiQuaW5mby5hZGRCdXR0b24oJ1Nob3cgYWxsLicsKCk9PnRoaXMuZGlzcGxheUxvbmdUYWlsPXRydWUpO3RoaXMuJC5pbmZvLnZpc2libGU9dHJ1ZTt9LGhpZGVJbmZvQmFyXygpe3RoaXMuJC5pbmZvLnZpc2libGU9ZmFsc2U7fSx9KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IERPV05XQVJEU19BUlJPV19XSVRIX1RJUF9SSUdIVFdBUkRTPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMUIzKTtmdW5jdGlvbiBIZWFwRGV0YWlsc1BhdGhDb2x1bW4odGl0bGUpe3RyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzVGl0bGVDb2x1bW4uY2FsbCh0aGlzLHRpdGxlKTt9CkhlYXBEZXRhaWxzUGF0aENvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1RpdGxlQ29sdW1uLnByb3RvdHlwZSxmb3JtYXRUaXRsZShyb3cpe2NvbnN0IHRpdGxlPXRyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzVGl0bGVDb2x1bW4ucHJvdG90eXBlLmZvcm1hdFRpdGxlLmNhbGwodGhpcyxyb3cpO2lmKHJvdy5kaW1lbnNpb249PT10ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1Jvd0RpbWVuc2lvbi5ST09UKXtyZXR1cm4gdGl0bGU7fQpjb25zdCBhcnJvd0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShhcnJvd0VsKS50ZXh0Q29udGVudD1ET1dOV0FSRFNfQVJST1dfV0lUSF9USVBfUklHSFRXQVJEUzthcnJvd0VsLnN0eWxlLnBhZGRpbmdSaWdodD0nMnB4JzthcnJvd0VsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO2Fycm93RWwuc3R5bGUuY29sb3I9dHIuYi5Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCdoZWFwX2R1bXBfY2hpbGRfbm9kZV9hcnJvdycpO2NvbnN0IHJvd0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTtQb2x5bWVyLmRvbShyb3dFbCkuYXBwZW5kQ2hpbGQoYXJyb3dFbCk7UG9seW1lci5kb20ocm93RWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZSh0aXRsZSkpO3JldHVybiByb3dFbDt9fTtQb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGF0aC12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLlJlYnVpbGRhYmxlQmVoYXZpb3JdLGNyZWF0ZWQoKXt0aGlzLnNlbGVjdGVkTm9kZV89dW5kZWZpbmVkO3RoaXMuYWdncmVnYXRpb25Nb2RlXz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS5hZGRFdmVudExpc3RlbmVyKCdzZWxlY3Rpb24tY2hhbmdlZCcsZnVuY3Rpb24oZXZlbnQpe3RoaXMuc2VsZWN0ZWROb2RlXz10aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdzt0aGlzLmRpZFNlbGVjdGVkTm9kZUNoYW5nZV8oKTt9LmJpbmQodGhpcykpO30sZGlkU2VsZWN0ZWROb2RlQ2hhbmdlXygpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgdHIuYi5FdmVudCgnc2VsZWN0ZWQtbm9kZS1jaGFuZ2VkJykpO30sZ2V0IHNlbGVjdGVkTm9kZSgpe3JldHVybiB0aGlzLnNlbGVjdGVkTm9kZV87fSxzZXQgc2VsZWN0ZWROb2RlKG5vZGUpe3RoaXMuc2VsZWN0ZWROb2RlXz1ub2RlO3RoaXMuZGlkU2VsZWN0ZWROb2RlQ2hhbmdlXygpO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sZ2V0IGFnZ3JlZ2F0aW9uTW9kZSgpe3JldHVybiB0aGlzLmFnZ3JlZ2F0aW9uTW9kZV87fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LG9uUmVidWlsZF8oKXtpZih0aGlzLnNlbGVjdGVkTm9kZV89PT11bmRlZmluZWQpe3RoaXMuJC50YWJsZS5jbGVhcigpO3JldHVybjt9CmlmKHRoaXMuJC50YWJsZS50YWJsZVJvd3MuaW5jbHVkZXModGhpcy5zZWxlY3RlZE5vZGVfKSl7dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c9dGhpcy5zZWxlY3RlZE5vZGVfO3JldHVybjt9CnRoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7dGhpcy4kLnRhYmxlLnVzZXJDYW5Nb2RpZnlTb3J0T3JkZXI9ZmFsc2U7Y29uc3Qgcm93cz10aGlzLmNyZWF0ZVJvd3NfKHRoaXMuc2VsZWN0ZWROb2RlXyk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9dGhpcy5jcmVhdGVDb2x1bW5zXyhyb3dzKTt0aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdz1yb3dzW3Jvd3MubGVuZ3RoLTFdO30sY3JlYXRlUm93c18obm9kZSl7Y29uc3Qgcm93cz1bXTt3aGlsZShub2RlKXtyb3dzLnB1c2gobm9kZSk7bm9kZT1ub2RlLnBhcmVudE5vZGU7fQpyb3dzLnJldmVyc2UoKTtyZXR1cm4gcm93czt9LGNyZWF0ZUNvbHVtbnNfKHJvd3Mpe2NvbnN0IHRpdGxlQ29sdW1uPW5ldyBIZWFwRGV0YWlsc1BhdGhDb2x1bW4oJ0N1cnJlbnQgcGF0aCcpO3RpdGxlQ29sdW1uLndpZHRoPScyMDBweCc7Y29uc3QgbnVtZXJpY0NvbHVtbnM9dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLmZyb21Sb3dzKHJvd3Mse2NlbGxLZXk6J2NlbGxzJyxhZ2dyZWdhdGlvbk1vZGU6dGhpcy5hZ2dyZWdhdGlvbk1vZGVfLHJ1bGVzOnRyLnVpLmFuYWx5c2lzLkhFQVBfREVUQUlMU19DT0xVTU5fUlVMRVMsc2hvdWxkU2V0Q29udGV4dEdyb3VwOnRydWV9KTt0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uc3BhY2VFcXVhbGx5KG51bWVyaWNDb2x1bW5zKTtyZXR1cm5bdGl0bGVDb2x1bW5dLmNvbmNhdChudW1lcmljQ29sdW1ucyk7fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgU3RhY2tlZFBhbmVJbXBsPXtzZXQgY2hpbGRQYW5lQnVpbGRlcihjaGlsZFBhbmVCdWlsZGVyKXt0aGlzLmNoaWxkUGFuZUJ1aWxkZXJfPWNoaWxkUGFuZUJ1aWxkZXI7dGhpcy5kaXNwYXRjaEV2ZW50KG5ldyB0ci5iLkV2ZW50KCdyZXF1ZXN0LWNoaWxkLXBhbmUtY2hhbmdlJykpO30sZ2V0IGNoaWxkUGFuZUJ1aWxkZXIoKXtyZXR1cm4gdGhpcy5jaGlsZFBhbmVCdWlsZGVyXzt9LGFwcGVuZGVkKCl7dGhpcy5yZWJ1aWxkKCk7fX07Y29uc3QgU3RhY2tlZFBhbmU9W3RyLnVpLmFuYWx5c2lzLlJlYnVpbGRhYmxlQmVoYXZpb3IsU3RhY2tlZFBhbmVJbXBsXTtyZXR1cm57U3RhY2tlZFBhbmUsfTt9KTtQb2x5bWVyKHtpczondHItdWktYS1zdGFja2VkLXBhbmUnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuU3RhY2tlZFBhbmVdfSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBTY2FsYXI9dHIuYi5TY2FsYXI7Y29uc3Qgc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyPXRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyO2NvbnN0IGNvdW50X3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLmNvdW50X3NtYWxsZXJJc0JldHRlcjtjb25zdCBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXI9dHIuYi5NdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXI7Y29uc3QgVG90YWxTdGF0ZT10ci5iLk11bHRpRGltZW5zaW9uYWxWaWV3Tm9kZS5Ub3RhbFN0YXRlO2Z1bmN0aW9uIEhlYXBEdW1wVHJlZU5vZGUoc3RhY2tGcmFtZU5vZGVzLGRpbWVuc2lvbix0aXRsZSxoZWF2eVZpZXcscGFyZW50Tm9kZSl7dGhpcy5kaW1lbnNpb249ZGltZW5zaW9uO3RoaXMudGl0bGU9dGl0bGU7dGhpcy5wYXJlbnROb2RlPXBhcmVudE5vZGU7dGhpcy5oZWF2eVZpZXdfPWhlYXZ5Vmlldzt0aGlzLnN0YWNrRnJhbWVOb2Rlc189c3RhY2tGcmFtZU5vZGVzO3RoaXMubGF6eUNlbGxzXz11bmRlZmluZWQ7dGhpcy5sYXp5Q2hpbGROb2Rlc189dW5kZWZpbmVkO30KSGVhcER1bXBUcmVlTm9kZS5wcm90b3R5cGU9e2dldCBtaW5EaXNwbGF5ZWRUb3RhbFN0YXRlXygpe2lmKHRoaXMuaGVhdnlWaWV3Xyl7cmV0dXJuIFRvdGFsU3RhdGUuTE9XRVJfQk9VTkQ7fQpyZXR1cm4gVG90YWxTdGF0ZS5FWEFDVDt9LGdldCBjaGlsZE5vZGVzKCl7aWYoIXRoaXMubGF6eUNoaWxkTm9kZXNfKXt0aGlzLmxhenlDaGlsZE5vZGVzXz1uZXcgTWFwKCk7dGhpcy5hZGREaW1lbnNpb25DaGlsZE5vZGVzXyh0ci51aS5hbmFseXNpcy5IZWFwRGV0YWlsc1Jvd0RpbWVuc2lvbi5TVEFDS19GUkFNRSwwKTt0aGlzLmFkZERpbWVuc2lvbkNoaWxkTm9kZXNfKHRyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzUm93RGltZW5zaW9uLk9CSkVDVF9UWVBFLDEpO3RoaXMucmVsZWFzZVN0YWNrRnJhbWVOb2Rlc0lmUG9zc2libGVfKCk7fQpyZXR1cm4gdGhpcy5sYXp5Q2hpbGROb2Rlc187fSxnZXQgY2VsbHMoKXtpZighdGhpcy5sYXp5Q2VsbHNfKXt0aGlzLmFkZENlbGxzXygpO3RoaXMucmVsZWFzZVN0YWNrRnJhbWVOb2Rlc0lmUG9zc2libGVfKCk7fQpyZXR1cm4gdGhpcy5sYXp5Q2VsbHNfO30scmVsZWFzZVN0YWNrRnJhbWVOb2Rlc0lmUG9zc2libGVfKCl7aWYodGhpcy5sYXp5Q2VsbHNfJiZ0aGlzLmxhenlDaGlsZE5vZGVzXyl7dGhpcy5zdGFja0ZyYW1lTm9kZXNfPXVuZGVmaW5lZDt9fSxhZGREaW1lbnNpb25DaGlsZE5vZGVzXyhkaW1lbnNpb24sZGltZW5zaW9uSW5kZXgpe2NvbnN0IGRpbWVuc2lvbkNoaWxkVGl0bGVUb1N0YWNrRnJhbWVOb2Rlcz10ci5iLmludmVydEFycmF5T2ZEaWN0cyh0aGlzLnN0YWNrRnJhbWVOb2Rlc18sbm9kZT0+dGhpcy5jb252ZXJ0U3RhY2tGcmFtZU5vZGVEaW1lbnNpb25Ub0NoaWxkRGljdF8obm9kZSxkaW1lbnNpb25JbmRleCkpO2NvbnN0IGRpbWVuc2lvbkNoaWxkTm9kZXM9W107Zm9yKGNvbnN0W2NoaWxkVGl0bGUsY2hpbGRTdGFja0ZyYW1lTm9kZXNdb2YKT2JqZWN0LmVudHJpZXMoZGltZW5zaW9uQ2hpbGRUaXRsZVRvU3RhY2tGcmFtZU5vZGVzKSl7ZGltZW5zaW9uQ2hpbGROb2Rlcy5wdXNoKG5ldyBIZWFwRHVtcFRyZWVOb2RlKGNoaWxkU3RhY2tGcmFtZU5vZGVzLGRpbWVuc2lvbixjaGlsZFRpdGxlLHRoaXMuaGVhdnlWaWV3Xyx0aGlzKSk7fQp0aGlzLmxhenlDaGlsZE5vZGVzXy5zZXQoZGltZW5zaW9uLGRpbWVuc2lvbkNoaWxkTm9kZXMpO30sY29udmVydFN0YWNrRnJhbWVOb2RlRGltZW5zaW9uVG9DaGlsZERpY3RfKHN0YWNrRnJhbWVOb2RlLGRpbWVuc2lvbkluZGV4KXtjb25zdCBjaGlsZERpY3Q9e307bGV0IGRpc3BsYXllZENoaWxkcmVuVG90YWxTaXplPTA7bGV0IGRpc3BsYXllZENoaWxkcmVuVG90YWxDb3VudD0wO2xldCBoYXNEaXNwbGF5ZWRDaGlsZHJlbj1mYWxzZTtsZXQgYWxsRGlzcGxheWVkQ2hpbGRyZW5IYXZlRGlzcGxheWVkQ291bnRzPXRydWU7Zm9yKGNvbnN0IGNoaWxkIG9mIHN0YWNrRnJhbWVOb2RlLmNoaWxkcmVuW2RpbWVuc2lvbkluZGV4XS52YWx1ZXMoKSl7aWYoY2hpbGQudmFsdWVzWzBdLnRvdGFsU3RhdGU8dGhpcy5taW5EaXNwbGF5ZWRUb3RhbFN0YXRlXyl7Y29udGludWU7fQppZihjaGlsZC52YWx1ZXNbMV0udG90YWxTdGF0ZTx0aGlzLm1pbkRpc3BsYXllZFRvdGFsU3RhdGVfKXthbGxEaXNwbGF5ZWRDaGlsZHJlbkhhdmVEaXNwbGF5ZWRDb3VudHM9ZmFsc2U7fQpjaGlsZERpY3RbY2hpbGQudGl0bGVbZGltZW5zaW9uSW5kZXhdXT1jaGlsZDtkaXNwbGF5ZWRDaGlsZHJlblRvdGFsU2l6ZSs9Y2hpbGQudmFsdWVzWzBdLnRvdGFsO2Rpc3BsYXllZENoaWxkcmVuVG90YWxDb3VudCs9Y2hpbGQudmFsdWVzWzFdLnRvdGFsO2hhc0Rpc3BsYXllZENoaWxkcmVuPXRydWU7fQpjb25zdCBub2RlVG90YWxTaXplPXN0YWNrRnJhbWVOb2RlLnZhbHVlc1swXS50b3RhbDtjb25zdCBub2RlVG90YWxDb3VudD1zdGFja0ZyYW1lTm9kZS52YWx1ZXNbMV0udG90YWw7Y29uc3QgaGFzVW5jbGFzc2lmaWVkU2l6ZU9yQ291bnQ9ZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbFNpemU8bm9kZVRvdGFsU2l6ZXx8ZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbENvdW50PG5vZGVUb3RhbENvdW50O2lmKCF0aGlzLmhlYXZ5Vmlld18mJmhhc1VuY2xhc3NpZmllZFNpemVPckNvdW50JiZoYXNEaXNwbGF5ZWRDaGlsZHJlbil7Y29uc3Qgb3RoZXJUaXRsZT1zdGFja0ZyYW1lTm9kZS50aXRsZS5zbGljZSgpO290aGVyVGl0bGVbZGltZW5zaW9uSW5kZXhdPSc8b3RoZXI+Jztjb25zdCBvdGhlck5vZGU9bmV3IHRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdOb2RlKG90aGVyVGl0bGUsMik7Y2hpbGREaWN0W290aGVyVGl0bGVbZGltZW5zaW9uSW5kZXhdXT1vdGhlck5vZGU7b3RoZXJOb2RlLnZhbHVlc1swXS50b3RhbD1ub2RlVG90YWxTaXplLWRpc3BsYXllZENoaWxkcmVuVG90YWxTaXplO290aGVyTm9kZS52YWx1ZXNbMF0udG90YWxTdGF0ZT10aGlzLm1pbkRpc3BsYXllZFRvdGFsU3RhdGVfO290aGVyTm9kZS52YWx1ZXNbMV0udG90YWw9bm9kZVRvdGFsQ291bnQtZGlzcGxheWVkQ2hpbGRyZW5Ub3RhbENvdW50O290aGVyTm9kZS52YWx1ZXNbMV0udG90YWxTdGF0ZT1hbGxEaXNwbGF5ZWRDaGlsZHJlbkhhdmVEaXNwbGF5ZWRDb3VudHM/dGhpcy5taW5EaXNwbGF5ZWRUb3RhbFN0YXRlXzpUb3RhbFN0YXRlLk5PVF9QUk9WSURFRDt9CnJldHVybiBjaGlsZERpY3Q7fSxhZGRDZWxsc18oKXt0aGlzLmxhenlDZWxsc189dHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHModGhpcy5zdGFja0ZyYW1lTm9kZXNfLGZ1bmN0aW9uKHN0YWNrRnJhbWVOb2RlKXtjb25zdCBzaXplPXN0YWNrRnJhbWVOb2RlLnZhbHVlc1swXS50b3RhbDtjb25zdCBudW1lcmljcz17J1NpemUnOm5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLHNpemUpfTtjb25zdCBjb3VudFZhbHVlPXN0YWNrRnJhbWVOb2RlLnZhbHVlc1sxXTtpZihjb3VudFZhbHVlLnRvdGFsU3RhdGU+PXRoaXMubWluRGlzcGxheWVkVG90YWxTdGF0ZV8pe2NvbnN0IGNvdW50PWNvdW50VmFsdWUudG90YWw7bnVtZXJpY3MuQ291bnQ9bmV3IFNjYWxhcihjb3VudF9zbWFsbGVySXNCZXR0ZXIsY291bnQpO30KcmV0dXJuIG51bWVyaWNzO30sdGhpcyk7fX07UG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtaGVhcC1kZXRhaWxzLXBhbmUnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuU3RhY2tlZFBhbmVdLGNyZWF0ZWQoKXt0aGlzLmhlYXBEdW1wc189dW5kZWZpbmVkO3RoaXMudmlld01vZGVfPXVuZGVmaW5lZDt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89dW5kZWZpbmVkO3RoaXMuY2FjaGVkQnVpbGRlcnNfPW5ldyBNYXAoKTt9LHJlYWR5KCl7dGhpcy4kLmluZm9fYmFyLm1lc3NhZ2U9J05vdGU6IFZhbHVlcyBkaXNwbGF5ZWQgaW4gdGhlIGhlYXZ5IHZpZXcgJysnYXJlIGxvd2VyIGJvdW5kcyAoZXhjZXB0IGZvciB0aGUgcm9vdCkuJztQb2x5bWVyLmRvbSh0aGlzLiQudmlld19tb2RlX2NvbnRhaW5lcikuYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCd2aWV3TW9kZScsJ21lbW9yeUR1bXBIZWFwRGV0YWlsc1BhbmUudmlld01vZGUnLE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9UUkVFX1ZJRVcsW3tsYWJlbDonVG9wLWRvd24gKFRyZWUpJyx2YWx1ZTpNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fVFJFRV9WSUVXfSx7bGFiZWw6J1RvcC1kb3duIChIZWF2eSknLHZhbHVlOk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9IRUFWWV9WSUVXfSx7bGFiZWw6J0JvdHRvbS11cCAoSGVhdnkpJyx2YWx1ZTpNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuQk9UVE9NX1VQX0hFQVZZX1ZJRVd9XSkpO3RoaXMuJC5kcmFnX2hhbmRsZS50YXJnZXQ9dGhpcy4kLnBhdGhfdmlldzt0aGlzLiQuZHJhZ19oYW5kbGUuaG9yaXpvbnRhbD1mYWxzZTt0aGlzLiQucGF0aF92aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGVkLW5vZGUtY2hhbmdlZCcsKGZ1bmN0aW9uKGUpe3RoaXMuJC5icmVha2Rvd25fdmlldy5kaXNwbGF5ZWROb2RlPXRoaXMuJC5wYXRoX3ZpZXcuc2VsZWN0ZWROb2RlO30pLmJpbmQodGhpcykpO3RoaXMuJC5icmVha2Rvd25fdmlldy5hZGRFdmVudExpc3RlbmVyKCdlbnRlci1ub2RlJywoZnVuY3Rpb24oZSl7dGhpcy4kLnBhdGhfdmlldy5zZWxlY3RlZE5vZGU9ZS5ub2RlO30pLmJpbmQodGhpcykpO30sc2V0IGhlYXBEdW1wcyhoZWFwRHVtcHMpe3RoaXMuaGVhcER1bXBzXz1oZWFwRHVtcHM7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgaGVhcER1bXBzKCl7cmV0dXJuIHRoaXMuaGVhcER1bXBzXzt9LHNldCBhZ2dyZWdhdGlvbk1vZGUoYWdncmVnYXRpb25Nb2RlKXt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89YWdncmVnYXRpb25Nb2RlO3RoaXMuJC5wYXRoX3ZpZXcuYWdncmVnYXRpb25Nb2RlPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLiQuYnJlYWtkb3duX3ZpZXcuYWdncmVnYXRpb25Nb2RlPWFnZ3JlZ2F0aW9uTW9kZTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sc2V0IHZpZXdNb2RlKHZpZXdNb2RlKXt0aGlzLnZpZXdNb2RlXz12aWV3TW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCB2aWV3TW9kZSgpe3JldHVybiB0aGlzLnZpZXdNb2RlXzt9LGdldCBoZWF2eVZpZXcoKXtzd2l0Y2godGhpcy52aWV3TW9kZSl7Y2FzZSBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fSEVBVllfVklFVzpjYXNlIE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5CT1RUT01fVVBfSEVBVllfVklFVzpyZXR1cm4gdHJ1ZTtkZWZhdWx0OnJldHVybiBmYWxzZTt9fSxvblJlYnVpbGRfKCl7aWYodGhpcy5oZWFwRHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLmhlYXBEdW1wc18ubGVuZ3RoPT09MCl7dGhpcy4kLmluZm9fdGV4dC5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLnNwbGl0X3ZpZXcuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnZpZXdfbW9kZV9jb250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmluZm9fYmFyLmhpZGRlbj10cnVlO3RoaXMuJC5wYXRoX3ZpZXcuc2VsZWN0ZWROb2RlPXVuZGVmaW5lZDtyZXR1cm47fQp0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5zcGxpdF92aWV3LnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuJC52aWV3X21vZGVfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQuaW5mb19iYXIuaGlkZGVuPSF0aGlzLmhlYXZ5Vmlldzt0aGlzLiQucGF0aF92aWV3LnNlbGVjdGVkTm9kZT10aGlzLmNyZWF0ZUhlYXBUcmVlXygpO3RoaXMuJC5wYXRoX3ZpZXcucmVidWlsZCgpO3RoaXMuJC5icmVha2Rvd25fdmlldy5yZWJ1aWxkKCk7fSxjcmVhdGVIZWFwVHJlZV8oKXtjb25zdCBkZWZpbmVkSGVhcER1bXA9dGhpcy5oZWFwRHVtcHNfLmZpbmQoeD0+eCk7aWYoZGVmaW5lZEhlYXBEdW1wPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgcm9vdFJvd1RpdGxlPWRlZmluZWRIZWFwRHVtcC5hbGxvY2F0b3JOYW1lO2NvbnN0IHN0YWNrRnJhbWVUcmVlcz10aGlzLmNyZWF0ZVN0YWNrRnJhbWVUcmVlc18odGhpcy5oZWFwRHVtcHNfKTtyZXR1cm4gbmV3IEhlYXBEdW1wVHJlZU5vZGUoc3RhY2tGcmFtZVRyZWVzLHRyLnVpLmFuYWx5c2lzLkhlYXBEZXRhaWxzUm93RGltZW5zaW9uLlJPT1Qscm9vdFJvd1RpdGxlLHRoaXMuaGVhdnlWaWV3KTt9LGNyZWF0ZVN0YWNrRnJhbWVUcmVlc18oaGVhcER1bXBzKXtjb25zdCBidWlsZGVycz1oZWFwRHVtcHMubWFwKGhlYXBEdW1wPT50aGlzLmNyZWF0ZUJ1aWxkZXJfKGhlYXBEdW1wKSk7Y29uc3Qgdmlld3M9YnVpbGRlcnMubWFwKGJ1aWxkZXI9PntpZihidWlsZGVyPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIGJ1aWxkZXIuYnVpbGRWaWV3KHRoaXMudmlld01vZGUpO30pO3JldHVybiB2aWV3czt9LGNyZWF0ZUJ1aWxkZXJfKGhlYXBEdW1wKXtpZihoZWFwRHVtcD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2lmKHRoaXMuY2FjaGVkQnVpbGRlcnNfLmhhcyhoZWFwRHVtcCkpe3JldHVybiB0aGlzLmNhY2hlZEJ1aWxkZXJzXy5nZXQoaGVhcER1bXApO30KY29uc3QgZGltZW5zaW9ucz0yO2NvbnN0IHZhbHVlQ291bnQ9Mjtjb25zdCBidWlsZGVyPW5ldyBNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIoZGltZW5zaW9ucyx2YWx1ZUNvdW50KTtmb3IoY29uc3QgZW50cnkgb2YgaGVhcER1bXAuZW50cmllcyl7Y29uc3QgbGVhZlN0YWNrRnJhbWU9ZW50cnkubGVhZlN0YWNrRnJhbWU7Y29uc3Qgc3RhY2tUcmFjZVBhdGg9bGVhZlN0YWNrRnJhbWU9PT11bmRlZmluZWQ/W106bGVhZlN0YWNrRnJhbWUuZ2V0VXNlckZyaWVuZGx5U3RhY2tUcmFjZSgpLnJldmVyc2UoKTtjb25zdCBvYmplY3RUeXBlTmFtZT1lbnRyeS5vYmplY3RUeXBlTmFtZTtjb25zdCBvYmplY3RUeXBlTmFtZVBhdGg9b2JqZWN0VHlwZU5hbWU9PT11bmRlZmluZWQ/W106W29iamVjdFR5cGVOYW1lXTtjb25zdCB2YWx1ZUtpbmQ9ZW50cnkudmFsdWVzQXJlVG90YWxzP011bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WYWx1ZUtpbmQuVE9UQUw6TXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyLlZhbHVlS2luZC5TRUxGO2J1aWxkZXIuYWRkUGF0aChbc3RhY2tUcmFjZVBhdGgsb2JqZWN0VHlwZU5hbWVQYXRoXSxbZW50cnkuc2l6ZSxlbnRyeS5jb3VudF0sdmFsdWVLaW5kKTt9CmJ1aWxkZXIuY29tcGxldGU9aGVhcER1bXAuaXNDb21wbGV0ZTt0aGlzLmNhY2hlZEJ1aWxkZXJzXy5zZXQoaGVhcER1bXAsYnVpbGRlcik7cmV0dXJuIGJ1aWxkZXI7fSx9KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IFVSTF9UT19TSVpFX1ZTX0VGRkVDVElWRV9TSVpFPSdodHRwczovL2Nocm9taXVtLmdvb2dsZXNvdXJjZS5jb20vY2hyb21pdW0vc3JjLysvbWFzdGVyL2RvY3MvbWVtb3J5LWluZnJhL1JFQURNRS5tZCNlZmZlY3RpdmVfc2l6ZS12c19zaXplJztjb25zdCBTVUJBTExPQ0FUSU9OX0NPTlRFWFQ9dHJ1ZTtjb25zdCBNZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlO2NvbnN0IFBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU49TWVtb3J5QWxsb2NhdG9yRHVtcEluZm9UeXBlLlBST1ZJREVEX1NJWkVfTEVTU19USEFOX0FHR1JFR0FURURfQ0hJTERSRU47Y29uc3QgUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUj1NZW1vcnlBbGxvY2F0b3JEdW1wSW5mb1R5cGUuUFJPVklERURfU0laRV9MRVNTX1RIQU5fTEFSR0VTVF9PV05FUjtjb25zdCBMRUZUV0FSRFNfT1BFTl9IRUFERURfQVJST1c9U3RyaW5nLmZyb21DaGFyQ29kZSgweDIxRkQpO2NvbnN0IFJJR0hUV0FSRFNfT1BFTl9IRUFERURfQVJST1c9U3RyaW5nLmZyb21DaGFyQ29kZSgweDIxRkUpO2NvbnN0IEVOX0RBU0g9U3RyaW5nLmZyb21DaGFyQ29kZSgweDIwMTMpO2NvbnN0IENJUkNMRURfTEFUSU5fU01BTExfTEVUVEVSX0k9U3RyaW5nLmZyb21DaGFyQ29kZSgweDI0RDgpO2Z1bmN0aW9uIEFsbG9jYXRvckR1bXBOYW1lQ29sdW1uKCl7dHIudWkuYW5hbHlzaXMuVGl0bGVDb2x1bW4uY2FsbCh0aGlzLCdDb21wb25lbnQnKTt9CkFsbG9jYXRvckR1bXBOYW1lQ29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLlRpdGxlQ29sdW1uLnByb3RvdHlwZSxmb3JtYXRUaXRsZShyb3cpe2lmKCFyb3cuc3ViYWxsb2NhdGlvbil7cmV0dXJuIHJvdy50aXRsZTt9CnJldHVybiB0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnJvdy50aXRsZSxpdGFsaWM6dHJ1ZSx0b29sdGlwOnJvdy5mdWxsTmFtZXM9PT11bmRlZmluZWQ/dW5kZWZpbmVkOnJvdy5mdWxsTmFtZXMuam9pbignLCAnKX0pO319O2Z1bmN0aW9uIGdldEFuZFVwZGF0ZUVudHJ5KG1hcCxuYW1lLGNyZWF0ZWRDYWxsYmFjayl7bGV0IGVudHJ5PW1hcC5nZXQobmFtZSk7aWYoZW50cnk9PT11bmRlZmluZWQpe2VudHJ5PXtjb3VudDowfTtjcmVhdGVkQ2FsbGJhY2soZW50cnkpO21hcC5zZXQobmFtZSxlbnRyeSk7fQplbnRyeS5jb3VudCsrO3JldHVybiBlbnRyeTt9CmZ1bmN0aW9uIFNpemVJbmZvTWVzc2FnZUJ1aWxkZXIoKXt0aGlzLnBhcnRzXz1bXTt0aGlzLmluZGVudF89MDt9ClNpemVJbmZvTWVzc2FnZUJ1aWxkZXIucHJvdG90eXBlPXthcHBlbmQoKXt0aGlzLnBhcnRzXy5wdXNoLmFwcGx5KHRoaXMucGFydHNfLEFycmF5LnByb3RvdHlwZS5zbGljZS5hcHBseShhcmd1bWVudHMpKTt9LGFwcGVuZE1hcChtYXAsaGFzUGx1cmFsU3VmZml4LGVtcHR5VGV4dCxpdGVtQ2FsbGJhY2ssb3B0X3RoaXMpe29wdF90aGlzPW9wdF90aGlzfHx0aGlzO2lmKG1hcC5zaXplPT09MCl7aWYoZW1wdHlUZXh0KXt0aGlzLmFwcGVuZChlbXB0eVRleHQpO319ZWxzZSBpZihtYXAuc2l6ZT09PTEpe3RoaXMucGFydHNfLnB1c2goJyAnKTtjb25zdCBrZXk9bWFwLmtleXMoKS5uZXh0KCkudmFsdWU7aXRlbUNhbGxiYWNrLmNhbGwob3B0X3RoaXMsa2V5LG1hcC5nZXQoa2V5KSk7fWVsc2V7aWYoaGFzUGx1cmFsU3VmZml4KXt0aGlzLnBhcnRzXy5wdXNoKCdzJyk7fQp0aGlzLnBhcnRzXy5wdXNoKCc6Jyk7dGhpcy5pbmRlbnRfKys7Zm9yKGNvbnN0IGtleSBvZiBtYXAua2V5cygpKXt0aGlzLnBhcnRzXy5wdXNoKCdcbicsJyAnLnJlcGVhdCgzKih0aGlzLmluZGVudF8tMSkpLCcgLSAnKTtpdGVtQ2FsbGJhY2suY2FsbChvcHRfdGhpcyxrZXksbWFwLmdldChrZXkpKTt9CnRoaXMuaW5kZW50Xy0tO319LGFwcGVuZEltcG9ydGFuY2VSYW5nZShyYW5nZSl7dGhpcy5hcHBlbmQoJyAoaW1wb3J0YW5jZTogJyk7aWYocmFuZ2UubWluPT09cmFuZ2UubWF4KXt0aGlzLmFwcGVuZChyYW5nZS5taW4pO31lbHNle3RoaXMuYXBwZW5kKHJhbmdlLm1pbixFTl9EQVNILHJhbmdlLm1heCk7fQp0aGlzLmFwcGVuZCgnKScpO30sYXBwZW5kU2l6ZUlmRGVmaW5lZChzaXplKXtpZihzaXplIT09dW5kZWZpbmVkKXt0aGlzLmFwcGVuZCgnICgnLHRyLmIuVW5pdC5ieU5hbWUuc2l6ZUluQnl0ZXMuZm9ybWF0KHNpemUpLCcpJyk7fX0sYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCl7dGhpcy5hcHBlbmQoJyAnLHRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5TT01FX1RJTUVTVEFNUFNfSU5GT19RVUFOVElGSUVSKTt9LGJ1aWxkKCl7cmV0dXJuIHRoaXMucGFydHNfLmpvaW4oJycpO319O2Z1bmN0aW9uIEVmZmVjdGl2ZVNpemVDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQpFZmZlY3RpdmVTaXplQ29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXQgdGl0bGUoKXtyZXR1cm4gdHIudWkuYi5jcmVhdGVMaW5rKHt0ZXh0Q29udGVudDp0aGlzLm5hbWUsdG9vbHRpcDonTWVtb3J5IHVzZWQgYnkgdGhpcyBjb21wb25lbnQnLGhyZWY6VVJMX1RPX1NJWkVfVlNfRUZGRUNUSVZFX1NJWkV9KTt9LGFkZEluZm9zKG51bWVyaWNzLG1lbW9yeUFsbG9jYXRvckR1bXBzLGluZm9zKXtpZihtZW1vcnlBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgb3duZXJOYW1lVG9FbnRyeT1uZXcgTWFwKCk7Y29uc3Qgb3duZWROYW1lVG9FbnRyeT1uZXcgTWFwKCk7Zm9yKGxldCBpPTA7aTxudW1lcmljcy5sZW5ndGg7aSsrKXtpZihudW1lcmljc1tpXT09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBkdW1wPW1lbW9yeUFsbG9jYXRvckR1bXBzW2ldO2lmKGR1bXA9PT1TVUJBTExPQ0FUSU9OX0NPTlRFWFQpe3JldHVybjt9CmR1bXAub3duZWRCeS5mb3JFYWNoKGZ1bmN0aW9uKG93bmVyTGluayl7Y29uc3Qgb3duZXJEdW1wPW93bmVyTGluay5zb3VyY2U7dGhpcy5nZXRBbmRVcGRhdGVPd25lcnNoaXBFbnRyeV8ob3duZXJOYW1lVG9FbnRyeSxvd25lckR1bXAsb3duZXJMaW5rKTt9LHRoaXMpO2NvbnN0IG93bmVkTGluaz1kdW1wLm93bnM7aWYob3duZWRMaW5rIT09dW5kZWZpbmVkKXtjb25zdCBvd25lZER1bXA9b3duZWRMaW5rLnRhcmdldDtjb25zdCBvd25lZEVudHJ5PXRoaXMuZ2V0QW5kVXBkYXRlT3duZXJzaGlwRW50cnlfKG93bmVkTmFtZVRvRW50cnksb3duZWREdW1wLG93bmVkTGluayx0cnVlKTtjb25zdCBzaGFyZXJOYW1lVG9FbnRyeT1vd25lZEVudHJ5LnNoYXJlck5hbWVUb0VudHJ5O293bmVkRHVtcC5vd25lZEJ5LmZvckVhY2goZnVuY3Rpb24oc2hhcmVyTGluayl7Y29uc3Qgc2hhcmVyRHVtcD1zaGFyZXJMaW5rLnNvdXJjZTtpZihzaGFyZXJEdW1wPT09ZHVtcClyZXR1cm47dGhpcy5nZXRBbmRVcGRhdGVPd25lcnNoaXBFbnRyeV8oc2hhcmVyTmFtZVRvRW50cnksc2hhcmVyRHVtcCxzaGFyZXJMaW5rKTt9LHRoaXMpO319CmlmKG93bmVyTmFtZVRvRW50cnkuc2l6ZT4wKXtjb25zdCBtZXNzYWdlQnVpbGRlcj1uZXcgU2l6ZUluZm9NZXNzYWdlQnVpbGRlcigpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnc2hhcmVkIGJ5Jyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKG93bmVyTmFtZVRvRW50cnksZmFsc2UsdW5kZWZpbmVkLGZ1bmN0aW9uKG93bmVyTmFtZSxvd25lckVudHJ5KXttZXNzYWdlQnVpbGRlci5hcHBlbmQob3duZXJOYW1lKTtpZihvd25lckVudHJ5LmNvdW50PG51bWVyaWNzLmxlbmd0aCl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kU29tZVRpbWVzdGFtcHNRdWFudGlmaWVyKCk7fQptZXNzYWdlQnVpbGRlci5hcHBlbmRJbXBvcnRhbmNlUmFuZ2Uob3duZXJFbnRyeS5pbXBvcnRhbmNlUmFuZ2UpO30sdGhpcyk7aW5mb3MucHVzaCh7bWVzc2FnZTptZXNzYWdlQnVpbGRlci5idWlsZCgpLGljb246TEVGVFdBUkRTX09QRU5fSEVBREVEX0FSUk9XLGNvbG9yOidncmVlbid9KTt9CmlmKG93bmVkTmFtZVRvRW50cnkuc2l6ZT4wKXtjb25zdCBtZXNzYWdlQnVpbGRlcj1uZXcgU2l6ZUluZm9NZXNzYWdlQnVpbGRlcigpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnc2hhcmVzJyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKG93bmVkTmFtZVRvRW50cnksZmFsc2UsdW5kZWZpbmVkLGZ1bmN0aW9uKG93bmVkTmFtZSxvd25lZEVudHJ5KXttZXNzYWdlQnVpbGRlci5hcHBlbmQob3duZWROYW1lKTtjb25zdCBvd25lZENvdW50PW93bmVkRW50cnkuY291bnQ7aWYob3duZWRDb3VudDxudW1lcmljcy5sZW5ndGgpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNvbWVUaW1lc3RhbXBzUXVhbnRpZmllcigpO30KbWVzc2FnZUJ1aWxkZXIuYXBwZW5kSW1wb3J0YW5jZVJhbmdlKG93bmVkRW50cnkuaW1wb3J0YW5jZVJhbmdlKTttZXNzYWdlQnVpbGRlci5hcHBlbmQoJyB3aXRoJyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKG93bmVkRW50cnkuc2hhcmVyTmFtZVRvRW50cnksZmFsc2UsJyBubyBvdGhlciBkdW1wcycsZnVuY3Rpb24oc2hhcmVyTmFtZSxzaGFyZXJFbnRyeSl7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kKHNoYXJlck5hbWUpO2lmKHNoYXJlckVudHJ5LmNvdW50PG93bmVkQ291bnQpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNvbWVUaW1lc3RhbXBzUXVhbnRpZmllcigpO30KbWVzc2FnZUJ1aWxkZXIuYXBwZW5kSW1wb3J0YW5jZVJhbmdlKHNoYXJlckVudHJ5LmltcG9ydGFuY2VSYW5nZSk7fSx0aGlzKTt9LHRoaXMpO2luZm9zLnB1c2goe21lc3NhZ2U6bWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSxpY29uOlJJR0hUV0FSRFNfT1BFTl9IRUFERURfQVJST1csY29sb3I6J2dyZWVuJ30pO319LGdldEFuZFVwZGF0ZU93bmVyc2hpcEVudHJ5XyhtYXAsZHVtcCxsaW5rLG9wdF93aXRoU2hhcmVyTmFtZVRvRW50cnkpe2NvbnN0IGVudHJ5PWdldEFuZFVwZGF0ZUVudHJ5KG1hcCxkdW1wLnF1YW50aWZpZWROYW1lLGZ1bmN0aW9uKG5ld0VudHJ5KXtuZXdFbnRyeS5pbXBvcnRhbmNlUmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2lmKG9wdF93aXRoU2hhcmVyTmFtZVRvRW50cnkpe25ld0VudHJ5LnNoYXJlck5hbWVUb0VudHJ5PW5ldyBNYXAoKTt9fSk7ZW50cnkuaW1wb3J0YW5jZVJhbmdlLmFkZFZhbHVlKGxpbmsuaW1wb3J0YW5jZXx8MCk7cmV0dXJuIGVudHJ5O319O2Z1bmN0aW9uIFNpemVDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLmNhbGwodGhpcyxuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSk7fQpTaXplQ29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1uLnByb3RvdHlwZSxnZXQgdGl0bGUoKXtyZXR1cm4gdHIudWkuYi5jcmVhdGVMaW5rKHt0ZXh0Q29udGVudDp0aGlzLm5hbWUsdG9vbHRpcDonTWVtb3J5IHJlcXVlc3RlZCBieSB0aGlzIGNvbXBvbmVudCcsaHJlZjpVUkxfVE9fU0laRV9WU19FRkZFQ1RJVkVfU0laRX0pO30sYWRkSW5mb3MobnVtZXJpY3MsbWVtb3J5QWxsb2NhdG9yRHVtcHMsaW5mb3Mpe2lmKG1lbW9yeUFsbG9jYXRvckR1bXBzPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLmFkZE92ZXJsYXBJbmZvXyhudW1lcmljcyxtZW1vcnlBbGxvY2F0b3JEdW1wcyxpbmZvcyk7dGhpcy5hZGRQcm92aWRlZFNpemVXYXJuaW5nSW5mb3NfKG51bWVyaWNzLG1lbW9yeUFsbG9jYXRvckR1bXBzLGluZm9zKTt9LGFkZE92ZXJsYXBJbmZvXyhudW1lcmljcyxtZW1vcnlBbGxvY2F0b3JEdW1wcyxpbmZvcyl7Y29uc3Qgc2libGluZ05hbWVUb0VudHJ5PW5ldyBNYXAoKTtmb3IobGV0IGk9MDtpPG51bWVyaWNzLmxlbmd0aDtpKyspe2lmKG51bWVyaWNzW2ldPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGR1bXA9bWVtb3J5QWxsb2NhdG9yRHVtcHNbaV07aWYoZHVtcD09PVNVQkFMTE9DQVRJT05fQ09OVEVYVCl7cmV0dXJuO30KY29uc3Qgb3duZWRCeVNpYmxpbmdTaXplcz1kdW1wLm93bmVkQnlTaWJsaW5nU2l6ZXM7Zm9yKGNvbnN0IHNpYmxpbmdEdW1wIG9mIG93bmVkQnlTaWJsaW5nU2l6ZXMua2V5cygpKXtjb25zdCBzaWJsaW5nTmFtZT1zaWJsaW5nRHVtcC5uYW1lO2dldEFuZFVwZGF0ZUVudHJ5KHNpYmxpbmdOYW1lVG9FbnRyeSxzaWJsaW5nTmFtZSxmdW5jdGlvbihuZXdFbnRyeSl7aWYobnVtZXJpY3MubGVuZ3RoPT09MSl7bmV3RW50cnkuc2l6ZT1vd25lZEJ5U2libGluZ1NpemVzLmdldChzaWJsaW5nRHVtcCk7fX0pO319CmlmKHNpYmxpbmdOYW1lVG9FbnRyeS5zaXplPjApe2NvbnN0IG1lc3NhZ2VCdWlsZGVyPW5ldyBTaXplSW5mb01lc3NhZ2VCdWlsZGVyKCk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kKCdvdmVybGFwcyB3aXRoIGl0cyBzaWJsaW5nJyk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kTWFwKHNpYmxpbmdOYW1lVG9FbnRyeSx0cnVlLHVuZGVmaW5lZCxmdW5jdGlvbihzaWJsaW5nTmFtZSxzaWJsaW5nRW50cnkpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnXCcnLHNpYmxpbmdOYW1lLCdcJycpO21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNpemVJZkRlZmluZWQoc2libGluZ0VudHJ5LnNpemUpO2lmKHNpYmxpbmdFbnRyeS5jb3VudDxudW1lcmljcy5sZW5ndGgpe21lc3NhZ2VCdWlsZGVyLmFwcGVuZFNvbWVUaW1lc3RhbXBzUXVhbnRpZmllcigpO319LHRoaXMpO2luZm9zLnB1c2goe21lc3NhZ2U6bWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSxpY29uOkNJUkNMRURfTEFUSU5fU01BTExfTEVUVEVSX0ksY29sb3I6J2JsdWUnfSk7fX0sYWRkUHJvdmlkZWRTaXplV2FybmluZ0luZm9zXyhudW1lcmljcyxtZW1vcnlBbGxvY2F0b3JEdW1wcyxpbmZvcyl7Y29uc3QgaW5mb1R5cGVUb0VudHJ5PW5ldyBNYXAoKTtmb3IobGV0IGk9MDtpPG51bWVyaWNzLmxlbmd0aDtpKyspe2lmKG51bWVyaWNzW2ldPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGR1bXA9bWVtb3J5QWxsb2NhdG9yRHVtcHNbaV07aWYoZHVtcD09PVNVQkFMTE9DQVRJT05fQ09OVEVYVCl7cmV0dXJuO30KZHVtcC5pbmZvcy5mb3JFYWNoKGZ1bmN0aW9uKGR1bXBJbmZvKXtnZXRBbmRVcGRhdGVFbnRyeShpbmZvVHlwZVRvRW50cnksZHVtcEluZm8udHlwZSxmdW5jdGlvbihuZXdFbnRyeSl7aWYobnVtZXJpY3MubGVuZ3RoPT09MSl7bmV3RW50cnkucHJvdmlkZWRTaXplPWR1bXBJbmZvLnByb3ZpZGVkU2l6ZTtuZXdFbnRyeS5kZXBlbmRlbmN5U2l6ZT1kdW1wSW5mby5kZXBlbmRlbmN5U2l6ZTt9fSk7fSk7fQpmb3IoY29uc3QgaW5mb1R5cGUgb2YgaW5mb1R5cGVUb0VudHJ5LmtleXMoKSl7Y29uc3QgZW50cnk9aW5mb1R5cGVUb0VudHJ5LmdldChpbmZvVHlwZSk7Y29uc3QgbWVzc2FnZUJ1aWxkZXI9bmV3IFNpemVJbmZvTWVzc2FnZUJ1aWxkZXIoKTttZXNzYWdlQnVpbGRlci5hcHBlbmQoJ3Byb3ZpZGVkIHNpemUnKTttZXNzYWdlQnVpbGRlci5hcHBlbmRTaXplSWZEZWZpbmVkKGVudHJ5LnByb3ZpZGVkU2l6ZSk7bGV0IGRlcGVuZGVuY3lOYW1lO3N3aXRjaChpbmZvVHlwZSl7Y2FzZSBQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9BR0dSRUdBVEVEX0NISUxEUkVOOmRlcGVuZGVuY3lOYW1lPSd0aGUgYWdncmVnYXRlZCBzaXplIG9mIHRoZSBjaGlsZHJlbic7YnJlYWs7Y2FzZSBQUk9WSURFRF9TSVpFX0xFU1NfVEhBTl9MQVJHRVNUX09XTkVSOmRlcGVuZGVuY3lOYW1lPSd0aGUgc2l6ZSBvZiB0aGUgbGFyZ2VzdCBvd25lcic7YnJlYWs7ZGVmYXVsdDpkZXBlbmRlbmN5TmFtZT0nYW4gdW5rbm93biBkZXBlbmRlbmN5JzticmVhazt9Cm1lc3NhZ2VCdWlsZGVyLmFwcGVuZCgnIHdhcyBsZXNzIHRoYW4gJyxkZXBlbmRlbmN5TmFtZSk7bWVzc2FnZUJ1aWxkZXIuYXBwZW5kU2l6ZUlmRGVmaW5lZChlbnRyeS5kZXBlbmRlbmN5U2l6ZSk7aWYoZW50cnkuY291bnQ8bnVtZXJpY3MubGVuZ3RoKXttZXNzYWdlQnVpbGRlci5hcHBlbmRTb21lVGltZXN0YW1wc1F1YW50aWZpZXIoKTt9CmluZm9zLnB1c2godHIudWkuYW5hbHlzaXMuY3JlYXRlV2FybmluZ0luZm8obWVzc2FnZUJ1aWxkZXIuYnVpbGQoKSkpO319fTtjb25zdCBOVU1FUklDX0NPTFVNTl9SVUxFUz1be2NvbmRpdGlvbjp0ci5tb2RlbC5NZW1vcnlBbGxvY2F0b3JEdW1wLkVGRkVDVElWRV9TSVpFX05VTUVSSUNfTkFNRSxpbXBvcnRhbmNlOjEwLGNvbHVtbkNvbnN0cnVjdG9yOkVmZmVjdGl2ZVNpemVDb2x1bW59LHtjb25kaXRpb246dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5TSVpFX05VTUVSSUNfTkFNRSxpbXBvcnRhbmNlOjksY29sdW1uQ29uc3RydWN0b3I6U2l6ZUNvbHVtbn0se2NvbmRpdGlvbjoncGFnZV9zaXplJyxpbXBvcnRhbmNlOjAsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW59LHtjb25kaXRpb246L3NpemUvLGltcG9ydGFuY2U6NSxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2ltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn1dO2NvbnN0IERJQUdOT1NUSUNfQ09MVU1OX1JVTEVTPVt7aW1wb3J0YW5jZTowLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLlN0cmluZ01lbW9yeUNvbHVtbn1dO1BvbHltZXIoe2lzOid0ci11aS1hLW1lbW9yeS1kdW1wLWFsbG9jYXRvci1kZXRhaWxzLXBhbmUnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuU3RhY2tlZFBhbmVdLGNyZWF0ZWQoKXt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz11bmRlZmluZWQ7dGhpcy5oZWFwRHVtcHNfPXVuZGVmaW5lZDt0aGlzLmFnZ3JlZ2F0aW9uTW9kZV89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO30sc2V0IG1lbW9yeUFsbG9jYXRvckR1bXBzKG1lbW9yeUFsbG9jYXRvckR1bXBzKXt0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz1tZW1vcnlBbGxvY2F0b3JEdW1wczt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBtZW1vcnlBbGxvY2F0b3JEdW1wcygpe3JldHVybiB0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXzt9LHNldCBoZWFwRHVtcHMoaGVhcER1bXBzKXt0aGlzLmhlYXBEdW1wc189aGVhcER1bXBzO3RoaXMuc2NoZWR1bGVSZWJ1aWxkXygpO30sc2V0IGFnZ3JlZ2F0aW9uTW9kZShhZ2dyZWdhdGlvbk1vZGUpe3RoaXMuYWdncmVnYXRpb25Nb2RlXz1hZ2dyZWdhdGlvbk1vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LG9uUmVidWlsZF8oKXtpZih0aGlzLm1lbW9yeUFsbG9jYXRvckR1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5tZW1vcnlBbGxvY2F0b3JEdW1wc18ubGVuZ3RoPT09MCl7dGhpcy4kLmluZm9fdGV4dC5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLnRhYmxlLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5jbGVhcigpO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7dGhpcy5jaGlsZFBhbmVCdWlsZGVyPXVuZGVmaW5lZDtyZXR1cm47fQp0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7Y29uc3Qgcm93cz10aGlzLmNyZWF0ZVJvd3NfKCk7Y29uc3QgY29sdW1ucz10aGlzLmNyZWF0ZUNvbHVtbnNfKHJvd3MpO3Jvd3MuZm9yRWFjaChmdW5jdGlvbihyb290Um93KXt0ci51aS5hbmFseXNpcy5hZ2dyZWdhdGVUYWJsZVJvd0NlbGxzUmVjdXJzaXZlbHkocm9vdFJvdyxjb2x1bW5zLGZ1bmN0aW9uKGNvbnRleHRzKXtyZXR1cm4gY29udGV4dHMhPT11bmRlZmluZWQmJmNvbnRleHRzLnNvbWUoZnVuY3Rpb24oY29udGV4dCl7cmV0dXJuIGNvbnRleHQ9PT1TVUJBTExPQ0FUSU9OX0NPTlRFWFQ7fSk7fSk7fSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9Y29sdW1uczt0aGlzLiQudGFibGUucmVidWlsZCgpO3RyLnVpLmFuYWx5c2lzLmV4cGFuZFRhYmxlUm93c1JlY3Vyc2l2ZWx5KHRoaXMuJC50YWJsZSk7aWYodGhpcy5oZWFwRHVtcHNfPT09dW5kZWZpbmVkKXt0aGlzLmNoaWxkUGFuZUJ1aWxkZXI9dW5kZWZpbmVkO31lbHNle3RoaXMuY2hpbGRQYW5lQnVpbGRlcj1mdW5jdGlvbigpe2NvbnN0IHBhbmU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tZW1vcnktZHVtcC1oZWFwLWRldGFpbHMtcGFuZScpO3BhbmUuaGVhcER1bXBzPXRoaXMuaGVhcER1bXBzXztwYW5lLmFnZ3JlZ2F0aW9uTW9kZT10aGlzLmFnZ3JlZ2F0aW9uTW9kZV87cmV0dXJuIHBhbmU7fS5iaW5kKHRoaXMpO319LGNyZWF0ZVJvd3NfKCl7cmV0dXJuW3RoaXMuY3JlYXRlQWxsb2NhdG9yUm93UmVjdXJzaXZlbHlfKHRoaXMubWVtb3J5QWxsb2NhdG9yRHVtcHNfKV07fSxjcmVhdGVBbGxvY2F0b3JSb3dSZWN1cnNpdmVseV8oZHVtcHMpe2NvbnN0IGRlZmluZWREdW1wPWR1bXBzLmZpbmQoeD0+eCk7Y29uc3QgdGl0bGU9ZGVmaW5lZER1bXAubmFtZTtjb25zdCBmdWxsTmFtZT1kZWZpbmVkRHVtcC5mdWxsTmFtZTtjb25zdCBudW1lcmljQ2VsbHM9dHIudWkuYW5hbHlzaXMuY3JlYXRlQ2VsbHMoZHVtcHMsZnVuY3Rpb24oZHVtcCl7cmV0dXJuIGR1bXAubnVtZXJpY3M7fSk7Y29uc3QgZGlhZ25vc3RpY0NlbGxzPXRyLnVpLmFuYWx5c2lzLmNyZWF0ZUNlbGxzKGR1bXBzLGZ1bmN0aW9uKGR1bXApe3JldHVybiBkdW1wLmRpYWdub3N0aWNzO30pO2xldCBzdWJhbGxvY2F0ZWRCeT11bmRlZmluZWQ7aWYodGl0bGUuc3RhcnRzV2l0aCgnX18nKSl7Zm9yKGxldCBpPTA7aTxkdW1wcy5sZW5ndGg7aSsrKXtjb25zdCBkdW1wPWR1bXBzW2ldO2lmKGR1bXA9PT11bmRlZmluZWR8fGR1bXAub3duZWRCeS5sZW5ndGg9PT0wKXtjb250aW51ZTt9CmNvbnN0IG93bmVyRHVtcD1kdW1wLm93bmVkQnlbMF0uc291cmNlO2lmKGR1bXAub3duZWRCeS5sZW5ndGg+MXx8ZHVtcC5jaGlsZHJlbi5sZW5ndGg+MHx8b3duZXJEdW1wLmNvbnRhaW5lck1lbW9yeUR1bXAhPT1kdW1wLmNvbnRhaW5lck1lbW9yeUR1bXApe3N1YmFsbG9jYXRlZEJ5PXVuZGVmaW5lZDticmVhazt9CmlmKHN1YmFsbG9jYXRlZEJ5PT09dW5kZWZpbmVkKXtzdWJhbGxvY2F0ZWRCeT1vd25lckR1bXAuZnVsbE5hbWU7fWVsc2UgaWYoc3ViYWxsb2NhdGVkQnkhPT1vd25lckR1bXAuZnVsbE5hbWUpe3N1YmFsbG9jYXRlZEJ5PXVuZGVmaW5lZDticmVhazt9fX0KY29uc3Qgcm93PXt0aXRsZSxmdWxsTmFtZXM6W2Z1bGxOYW1lXSxjb250ZXh0czpkdW1wcyxudW1lcmljQ2VsbHMsZGlhZ25vc3RpY0NlbGxzLHN1YmFsbG9jYXRlZEJ5fTtjb25zdCBjaGlsZER1bXBOYW1lVG9EdW1wcz10ci5iLmludmVydEFycmF5T2ZEaWN0cyhkdW1wcyxmdW5jdGlvbihkdW1wKXtjb25zdCByZXN1bHRzPXt9O2Zvcihjb25zdCBjaGlsZCBvZiBkdW1wLmNoaWxkcmVuKXtyZXN1bHRzW2NoaWxkLm5hbWVdPWNoaWxkO30KcmV0dXJuIHJlc3VsdHM7fSk7Y29uc3Qgc3ViUm93cz1bXTtsZXQgc3ViYWxsb2NhdGlvbkNsYXNzaWZpY2F0aW9uUm9vdE5vZGU9dW5kZWZpbmVkO2Zvcihjb25zdCBjaGlsZER1bXBzIG9mIE9iamVjdC52YWx1ZXMoY2hpbGREdW1wTmFtZVRvRHVtcHMpKXtjb25zdCBjaGlsZFJvdz10aGlzLmNyZWF0ZUFsbG9jYXRvclJvd1JlY3Vyc2l2ZWx5XyhjaGlsZER1bXBzKTtpZihjaGlsZFJvdy5zdWJhbGxvY2F0ZWRCeT09PXVuZGVmaW5lZCl7c3ViUm93cy5wdXNoKGNoaWxkUm93KTt9ZWxzZXtzdWJhbGxvY2F0aW9uQ2xhc3NpZmljYXRpb25Sb290Tm9kZT10aGlzLmNsYXNzaWZ5U3ViYWxsb2NhdGlvblJvd18oY2hpbGRSb3csc3ViYWxsb2NhdGlvbkNsYXNzaWZpY2F0aW9uUm9vdE5vZGUpO319CmlmKHN1YmFsbG9jYXRpb25DbGFzc2lmaWNhdGlvblJvb3ROb2RlIT09dW5kZWZpbmVkKXtjb25zdCBzdWJhbGxvY2F0aW9uUm93PXRoaXMuY3JlYXRlU3ViYWxsb2NhdGlvblJvd1JlY3Vyc2l2ZWx5Xygnc3ViYWxsb2NhdGlvbnMnLHN1YmFsbG9jYXRpb25DbGFzc2lmaWNhdGlvblJvb3ROb2RlKTtzdWJSb3dzLnB1c2goc3ViYWxsb2NhdGlvblJvdyk7fQppZihzdWJSb3dzLmxlbmd0aD4wKXtyb3cuc3ViUm93cz1zdWJSb3dzO30KcmV0dXJuIHJvdzt9LGNsYXNzaWZ5U3ViYWxsb2NhdGlvblJvd18oc3ViYWxsb2NhdGlvblJvdyxyb290Tm9kZSl7aWYocm9vdE5vZGU9PT11bmRlZmluZWQpe3Jvb3ROb2RlPXtjaGlsZHJlbjp7fSxyb3c6dW5kZWZpbmVkfTt9CmNvbnN0IHN1YmFsbG9jYXRpb25MZXZlbHM9c3ViYWxsb2NhdGlvblJvdy5zdWJhbGxvY2F0ZWRCeS5zcGxpdCgnLycpO2xldCBjdXJyZW50Tm9kZT1yb290Tm9kZTtmb3IobGV0IGk9MDtpPHN1YmFsbG9jYXRpb25MZXZlbHMubGVuZ3RoO2krKyl7Y29uc3Qgc3ViYWxsb2NhdGlvbkxldmVsPXN1YmFsbG9jYXRpb25MZXZlbHNbaV07bGV0IG5leHROb2RlPWN1cnJlbnROb2RlLmNoaWxkcmVuW3N1YmFsbG9jYXRpb25MZXZlbF07aWYobmV4dE5vZGU9PT11bmRlZmluZWQpe2N1cnJlbnROb2RlLmNoaWxkcmVuW3N1YmFsbG9jYXRpb25MZXZlbF09bmV4dE5vZGU9e2NoaWxkcmVuOnt9LHJvdzp1bmRlZmluZWR9O30KY3VycmVudE5vZGU9bmV4dE5vZGU7fQpjb25zdCBleGlzdGluZ1Jvdz1jdXJyZW50Tm9kZS5yb3c7aWYoZXhpc3RpbmdSb3chPT11bmRlZmluZWQpe2ZvcihsZXQgaT0wO2k8c3ViYWxsb2NhdGlvblJvdy5jb250ZXh0cy5sZW5ndGg7aSsrKXtjb25zdCBuZXdDb250ZXh0PXN1YmFsbG9jYXRpb25Sb3cuY29udGV4dHNbaV07aWYobmV3Q29udGV4dD09PXVuZGVmaW5lZCljb250aW51ZTtpZihleGlzdGluZ1Jvdy5jb250ZXh0c1tpXSE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdNdWx0aXBsZSBzdWJhbGxvY2F0aW9ucyB3aXRoIHRoZSBzYW1lIG93bmVyIG5hbWUnKTt9CmV4aXN0aW5nUm93LmNvbnRleHRzW2ldPW5ld0NvbnRleHQ7WydudW1lcmljQ2VsbHMnLCdkaWFnbm9zdGljQ2VsbHMnXS5mb3JFYWNoKGZ1bmN0aW9uKGNlbGxLZXkpe2NvbnN0IHN1YmFsbG9jYXRpb25DZWxscz1zdWJhbGxvY2F0aW9uUm93W2NlbGxLZXldO2lmKHN1YmFsbG9jYXRpb25DZWxscz09PXVuZGVmaW5lZClyZXR1cm47Zm9yKGNvbnN0W2NlbGxOYW1lLGNlbGxdb2YgT2JqZWN0LmVudHJpZXMoc3ViYWxsb2NhdGlvbkNlbGxzKSl7aWYoY2VsbD09PXVuZGVmaW5lZCljb250aW51ZTtjb25zdCBmaWVsZHM9Y2VsbC5maWVsZHM7aWYoZmllbGRzPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGZpZWxkPWZpZWxkc1tpXTtpZihmaWVsZD09PXVuZGVmaW5lZCljb250aW51ZTtsZXQgZXhpc3RpbmdDZWxscz1leGlzdGluZ1Jvd1tjZWxsS2V5XTtpZihleGlzdGluZ0NlbGxzPT09dW5kZWZpbmVkKXtleGlzdGluZ0NlbGxzPXt9O2V4aXN0aW5nUm93W2NlbGxLZXldPWV4aXN0aW5nQ2VsbHM7fQpsZXQgZXhpc3RpbmdDZWxsPWV4aXN0aW5nQ2VsbHNbY2VsbE5hbWVdO2lmKGV4aXN0aW5nQ2VsbD09PXVuZGVmaW5lZCl7ZXhpc3RpbmdDZWxsPW5ldyB0ci51aS5hbmFseXNpcy5NZW1vcnlDZWxsKG5ldyBBcnJheShmaWVsZHMubGVuZ3RoKSk7ZXhpc3RpbmdDZWxsc1tjZWxsTmFtZV09ZXhpc3RpbmdDZWxsO30KZXhpc3RpbmdDZWxsLmZpZWxkc1tpXT1maWVsZDt9fSk7fQpleGlzdGluZ1Jvdy5mdWxsTmFtZXMucHVzaC5hcHBseShleGlzdGluZ1Jvdy5mdWxsTmFtZXMsc3ViYWxsb2NhdGlvblJvdy5mdWxsTmFtZXMpO31lbHNle2N1cnJlbnROb2RlLnJvdz1zdWJhbGxvY2F0aW9uUm93O30KcmV0dXJuIHJvb3ROb2RlO30sY3JlYXRlU3ViYWxsb2NhdGlvblJvd1JlY3Vyc2l2ZWx5XyhuYW1lLG5vZGUpe2NvbnN0IGNoaWxkQ291bnQ9T2JqZWN0LmtleXMobm9kZS5jaGlsZHJlbikubGVuZ3RoO2lmKGNoaWxkQ291bnQ9PT0wKXtpZihub2RlLnJvdz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdTdWJhbGxvY2F0aW9uIG5vZGUgbXVzdCBoYXZlIGEgcm93IG9yIGNoaWxkcmVuJyk7fQpjb25zdCByb3c9bm9kZS5yb3c7cm93LnRpdGxlPW5hbWU7cm93LnN1YmFsbG9jYXRpb249dHJ1ZTtyZXR1cm4gcm93O30KY29uc3Qgc3ViUm93cz1bXTtmb3IoY29uc3Rbc3ViTmFtZSxzdWJOb2RlXW9mIE9iamVjdC5lbnRyaWVzKG5vZGUuY2hpbGRyZW4pKXtzdWJSb3dzLnB1c2godGhpcy5jcmVhdGVTdWJhbGxvY2F0aW9uUm93UmVjdXJzaXZlbHlfKHN1Yk5hbWUsc3ViTm9kZSkpO30KaWYobm9kZS5yb3chPT11bmRlZmluZWQpe2NvbnN0IHJvdz1ub2RlLnJvdztyb3cudGl0bGU9Jzx1bnNwZWNpZmllZD4nO3Jvdy5zdWJhbGxvY2F0aW9uPXRydWU7c3ViUm93cy51bnNoaWZ0KHJvdyk7fQpjb25zdCBjb250ZXh0cz1uZXcgQXJyYXkoc3ViUm93c1swXS5jb250ZXh0cy5sZW5ndGgpO2ZvcihsZXQgaT0wO2k8c3ViUm93cy5sZW5ndGg7aSsrKXtzdWJSb3dzW2ldLmNvbnRleHRzLmZvckVhY2goZnVuY3Rpb24oc3ViQ29udGV4dCxpbmRleCl7aWYoc3ViQ29udGV4dCE9PXVuZGVmaW5lZCl7Y29udGV4dHNbaW5kZXhdPVNVQkFMTE9DQVRJT05fQ09OVEVYVDt9fSk7fQpyZXR1cm57dGl0bGU6bmFtZSxzdWJhbGxvY2F0aW9uOnRydWUsY29udGV4dHMsc3ViUm93c307fSxjcmVhdGVDb2x1bW5zXyhyb3dzKXtjb25zdCB0aXRsZUNvbHVtbj1uZXcgQWxsb2NhdG9yRHVtcE5hbWVDb2x1bW4oKTt0aXRsZUNvbHVtbi53aWR0aD0nMjAwcHgnO2NvbnN0IG51bWVyaWNDb2x1bW5zPXRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5mcm9tUm93cyhyb3dzLHtjZWxsS2V5OidudW1lcmljQ2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6TlVNRVJJQ19DT0xVTU5fUlVMRVN9KTtjb25zdCBkaWFnbm9zdGljQ29sdW1ucz10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uZnJvbVJvd3Mocm93cyx7Y2VsbEtleTonZGlhZ25vc3RpY0NlbGxzJyxhZ2dyZWdhdGlvbk1vZGU6dGhpcy5hZ2dyZWdhdGlvbk1vZGVfLHJ1bGVzOkRJQUdOT1NUSUNfQ09MVU1OX1JVTEVTfSk7Y29uc3QgZmllbGRDb2x1bW5zPW51bWVyaWNDb2x1bW5zLmNvbmNhdChkaWFnbm9zdGljQ29sdW1ucyk7dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLnNwYWNlRXF1YWxseShmaWVsZENvbHVtbnMpO2NvbnN0IGNvbHVtbnM9W3RpdGxlQ29sdW1uXS5jb25jYXQoZmllbGRDb2x1bW5zKTtyZXR1cm4gY29sdW1uczt9fSk7cmV0dXJue1NVQkFMTE9DQVRJT05fQ09OVEVYVCxBbGxvY2F0b3JEdW1wTmFtZUNvbHVtbixFZmZlY3RpdmVTaXplQ29sdW1uLFNpemVDb2x1bW4sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IFNjYWxhcj10ci5iLlNjYWxhcjtjb25zdCBzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXI9dHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXI7Y29uc3QgQ09OU1RBTlRfQ09MVU1OX1JVTEVTPVt7Y29uZGl0aW9uOidTdGFydCBhZGRyZXNzJyxpbXBvcnRhbmNlOjAsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuU3RyaW5nTWVtb3J5Q29sdW1ufV07Y29uc3QgVkFSSUFCTEVfQ09MVU1OX1JVTEVTPVt7Y29uZGl0aW9uOidWaXJ0dWFsIHNpemUnLGltcG9ydGFuY2U6Nyxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUHJvdGVjdGlvbiBmbGFncycsaW1wb3J0YW5jZTo2LGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLlN0cmluZ01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUFNTJyxpbXBvcnRhbmNlOjUsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW59LHtjb25kaXRpb246J1ByaXZhdGUgZGlydHknLGltcG9ydGFuY2U6NCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUHJpdmF0ZSBjbGVhbicsaW1wb3J0YW5jZTozLGNvbHVtbkNvbnN0cnVjdG9yOnRyLnVpLmFuYWx5c2lzLkRldGFpbHNOdW1lcmljTWVtb3J5Q29sdW1ufSx7Y29uZGl0aW9uOidTaGFyZWQgZGlydHknLGltcG9ydGFuY2U6Mixjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonU2hhcmVkIGNsZWFuJyxpbXBvcnRhbmNlOjEsY29sdW1uQ29uc3RydWN0b3I6dHIudWkuYW5hbHlzaXMuRGV0YWlsc051bWVyaWNNZW1vcnlDb2x1bW59LHtjb25kaXRpb246J1N3YXBwZWQnLGltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3Rvcjp0ci51aS5hbmFseXNpcy5EZXRhaWxzTnVtZXJpY01lbW9yeUNvbHVtbn1dO2NvbnN0IEJZVEVfU1RBVF9DT0xVTU5fTUFQPXsncHJvcG9ydGlvbmFsUmVzaWRlbnQnOidQU1MnLCdwcml2YXRlRGlydHlSZXNpZGVudCc6J1ByaXZhdGUgZGlydHknLCdwcml2YXRlQ2xlYW5SZXNpZGVudCc6J1ByaXZhdGUgY2xlYW4nLCdzaGFyZWREaXJ0eVJlc2lkZW50JzonU2hhcmVkIGRpcnR5Jywnc2hhcmVkQ2xlYW5SZXNpZGVudCc6J1NoYXJlZCBjbGVhbicsJ3N3YXBwZWQnOidTd2FwcGVkJ307ZnVuY3Rpb24gaGV4U3RyaW5nKGFkZHJlc3MsaXM2NEJpdEFkZHJlc3Mpe2lmKGFkZHJlc3M9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBoZXhQYWRkaW5nPWlzNjRCaXRBZGRyZXNzPycwMDAwMDAwMDAwMDAwMDAwJzonMDAwMDAwMDAnO3JldHVybihoZXhQYWRkaW5nK2FkZHJlc3MudG9TdHJpbmcoMTYpKS5zdWJzdHIoLWhleFBhZGRpbmcubGVuZ3RoKTt9CmZ1bmN0aW9uIHBydW5lRW1wdHlSdWxlUm93cyhyb3cpe2lmKHJvdy5zdWJSb3dzPT09dW5kZWZpbmVkfHxyb3cuc3ViUm93cy5sZW5ndGg9PT0wKXJldHVybjtpZihyb3cuc3ViUm93c1swXS5ydWxlPT09dW5kZWZpbmVkKXtyZXR1cm47fQpyb3cuc3ViUm93cy5mb3JFYWNoKHBydW5lRW1wdHlSdWxlUm93cyk7cm93LnN1YlJvd3M9cm93LnN1YlJvd3MuZmlsdGVyKGZ1bmN0aW9uKHN1YlJvdyl7cmV0dXJuIHN1YlJvdy5zdWJSb3dzLmxlbmd0aD4wO30pO30KUG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtdm0tcmVnaW9ucy1kZXRhaWxzLXBhbmUnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuU3RhY2tlZFBhbmVdLGNyZWF0ZWQoKXt0aGlzLnZtUmVnaW9uc189dW5kZWZpbmVkO3RoaXMuYWdncmVnYXRpb25Nb2RlXz11bmRlZmluZWQ7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7fSxzZXQgdm1SZWdpb25zKHZtUmVnaW9ucyl7dGhpcy52bVJlZ2lvbnNfPXZtUmVnaW9uczt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCB2bVJlZ2lvbnMoKXtyZXR1cm4gdGhpcy52bVJlZ2lvbnNfO30sc2V0IGFnZ3JlZ2F0aW9uTW9kZShhZ2dyZWdhdGlvbk1vZGUpe3RoaXMuYWdncmVnYXRpb25Nb2RlXz1hZ2dyZWdhdGlvbk1vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LG9uUmVidWlsZF8oKXtpZih0aGlzLnZtUmVnaW9uc189PT11bmRlZmluZWR8fHRoaXMudm1SZWdpb25zXy5sZW5ndGg9PT0wKXt0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQudGFibGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnRhYmxlLmNsZWFyKCk7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTtyZXR1cm47fQp0aGlzLiQuaW5mb190ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7Y29uc3Qgcm93cz10aGlzLmNyZWF0ZVJvd3NfKHRoaXMudm1SZWdpb25zXyk7Y29uc3QgY29sdW1ucz10aGlzLmNyZWF0ZUNvbHVtbnNfKHJvd3MpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPWNvbHVtbnM7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt0ci51aS5hbmFseXNpcy5leHBhbmRUYWJsZVJvd3NSZWN1cnNpdmVseSh0aGlzLiQudGFibGUpO30sY3JlYXRlUm93c18odGltZVRvVm1SZWdpb25UcmVlKXtjb25zdCBpczY0Qml0QWRkcmVzcz10aW1lVG9WbVJlZ2lvblRyZWUuc29tZShmdW5jdGlvbih2bVJlZ2lvblRyZWUpe2lmKHZtUmVnaW9uVHJlZT09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7cmV0dXJuIHZtUmVnaW9uVHJlZS5zb21lUmVnaW9uKGZ1bmN0aW9uKHJlZ2lvbil7aWYocmVnaW9uLnN0YXJ0QWRkcmVzcz09PXVuZGVmaW5lZClyZXR1cm4gZmFsc2U7cmV0dXJuIHJlZ2lvbi5zdGFydEFkZHJlc3M+PTQyOTQ5NjcyOTY7fSk7fSk7cmV0dXJuW3RoaXMuY3JlYXRlQ2xhc3NpZmljYXRpb25Ob2RlUm93KHRpbWVUb1ZtUmVnaW9uVHJlZSxpczY0Qml0QWRkcmVzcyldO30sY3JlYXRlQ2xhc3NpZmljYXRpb25Ob2RlUm93KHRpbWVUb05vZGUsaXM2NEJpdEFkZHJlc3Mpe2NvbnN0IGRlZmluZWROb2RlPXRpbWVUb05vZGUuZmluZCh4PT54KTtjb25zdCBjaGlsZE5vZGVJZFRvVGltZVRvTm9kZT1PYmplY3QudmFsdWVzKHRyLmIuaW52ZXJ0QXJyYXlPZkRpY3RzKHRpbWVUb05vZGUsZnVuY3Rpb24obm9kZSl7Y29uc3QgY2hpbGRyZW49bm9kZS5jaGlsZHJlbjtpZihjaGlsZHJlbj09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGNoaWxkTWFwPXt9O2NoaWxkcmVuLmZvckVhY2goZnVuY3Rpb24oY2hpbGROb2RlKXtpZighY2hpbGROb2RlLmhhc1JlZ2lvbnMpcmV0dXJuO2NoaWxkTWFwW2NoaWxkTm9kZS50aXRsZV09Y2hpbGROb2RlO30pO3JldHVybiBjaGlsZE1hcDt9KSk7Y29uc3QgY2hpbGROb2RlU3ViUm93cz1jaGlsZE5vZGVJZFRvVGltZVRvTm9kZS5tYXAoZnVuY3Rpb24odGltZVRvQ2hpbGROb2RlKXtyZXR1cm4gdGhpcy5jcmVhdGVDbGFzc2lmaWNhdGlvbk5vZGVSb3codGltZVRvQ2hpbGROb2RlLGlzNjRCaXRBZGRyZXNzKTt9LHRoaXMpO2NvbnN0IHJlZ2lvbklkVG9UaW1lVG9SZWdpb249T2JqZWN0LnZhbHVlcyh0ci5iLmludmVydEFycmF5T2ZEaWN0cyh0aW1lVG9Ob2RlLGZ1bmN0aW9uKG5vZGUpe2NvbnN0IHJlZ2lvbnM9bm9kZS5yZWdpb25zO2lmKHJlZ2lvbnM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCByZXN1bHRzPXt9O2Zvcihjb25zdCByZWdpb24gb2YgcmVnaW9ucyl7cmVzdWx0c1tyZWdpb24udW5pcXVlSWRXaXRoaW5Qcm9jZXNzXT1yZWdpb247fQpyZXR1cm4gcmVzdWx0czt9KSk7Y29uc3QgcmVnaW9uU3ViUm93cz1yZWdpb25JZFRvVGltZVRvUmVnaW9uLm1hcChmdW5jdGlvbih0aW1lVG9SZWdpb24pe3JldHVybiB0aGlzLmNyZWF0ZVJlZ2lvblJvd18odGltZVRvUmVnaW9uLGlzNjRCaXRBZGRyZXNzKTt9LHRoaXMpO2NvbnN0IHN1YlJvd3M9Y2hpbGROb2RlU3ViUm93cy5jb25jYXQocmVnaW9uU3ViUm93cyk7cmV0dXJue3RpdGxlOmRlZmluZWROb2RlLnRpdGxlLGNvbnRleHRzOnRpbWVUb05vZGUsdmFyaWFibGVDZWxsczp0aGlzLmNyZWF0ZVZhcmlhYmxlQ2VsbHNfKHRpbWVUb05vZGUpLHN1YlJvd3N9O30sY3JlYXRlUmVnaW9uUm93Xyh0aW1lVG9SZWdpb24saXM2NEJpdEFkZHJlc3Mpe2NvbnN0IGRlZmluZWRSZWdpb249dGltZVRvUmVnaW9uLmZpbmQoeD0+eCk7cmV0dXJue3RpdGxlOmRlZmluZWRSZWdpb24ubWFwcGVkRmlsZSxjb250ZXh0czp0aW1lVG9SZWdpb24sY29uc3RhbnRDZWxsczp0aGlzLmNyZWF0ZUNvbnN0YW50Q2VsbHNfKGRlZmluZWRSZWdpb24saXM2NEJpdEFkZHJlc3MpLHZhcmlhYmxlQ2VsbHM6dGhpcy5jcmVhdGVWYXJpYWJsZUNlbGxzXyh0aW1lVG9SZWdpb24pfTt9LGNyZWF0ZUNvbnN0YW50Q2VsbHNfKGRlZmluZWRSZWdpb24saXM2NEJpdEFkZHJlc3Mpe3JldHVybiB0ci51aS5hbmFseXNpcy5jcmVhdGVDZWxscyhbZGVmaW5lZFJlZ2lvbl0sZnVuY3Rpb24ocmVnaW9uKXtjb25zdCBzdGFydEFkZHJlc3M9cmVnaW9uLnN0YXJ0QWRkcmVzcztpZihzdGFydEFkZHJlc3M9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm57J1N0YXJ0IGFkZHJlc3MnOmhleFN0cmluZyhzdGFydEFkZHJlc3MsaXM2NEJpdEFkZHJlc3MpfTt9KTt9LGNyZWF0ZVZhcmlhYmxlQ2VsbHNfKHRpbWVUb1JlZ2lvbil7cmV0dXJuIHRyLnVpLmFuYWx5c2lzLmNyZWF0ZUNlbGxzKHRpbWVUb1JlZ2lvbixmdW5jdGlvbihyZWdpb24pe2NvbnN0IGZpZWxkcz17fTtjb25zdCBzaXplSW5CeXRlcz1yZWdpb24uc2l6ZUluQnl0ZXM7aWYoc2l6ZUluQnl0ZXMhPT11bmRlZmluZWQpe2ZpZWxkc1snVmlydHVhbCBzaXplJ109bmV3IFNjYWxhcihzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsc2l6ZUluQnl0ZXMpO30KY29uc3QgcHJvdGVjdGlvbkZsYWdzPXJlZ2lvbi5wcm90ZWN0aW9uRmxhZ3NUb1N0cmluZztpZihwcm90ZWN0aW9uRmxhZ3MhPT11bmRlZmluZWQpe2ZpZWxkc1snUHJvdGVjdGlvbiBmbGFncyddPXByb3RlY3Rpb25GbGFnczt9CmZvcihjb25zdFtieXRlU3RhdE5hbWUsY29sdW1uTmFtZV1vZgpPYmplY3QuZW50cmllcyhCWVRFX1NUQVRfQ09MVU1OX01BUCkpe2NvbnN0IGJ5dGVTdGF0PXJlZ2lvbi5ieXRlU3RhdHNbYnl0ZVN0YXROYW1lXTtpZihieXRlU3RhdD09PXVuZGVmaW5lZCljb250aW51ZTtmaWVsZHNbY29sdW1uTmFtZV09bmV3IFNjYWxhcihzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsYnl0ZVN0YXQpO30KcmV0dXJuIGZpZWxkczt9KTt9LGNyZWF0ZUNvbHVtbnNfKHJvd3Mpe2NvbnN0IHRpdGxlQ29sdW1uPW5ldyB0ci51aS5hbmFseXNpcy5UaXRsZUNvbHVtbignTWFwcGVkIGZpbGUnKTt0aXRsZUNvbHVtbi53aWR0aD0nMjAwcHgnO2NvbnN0IGNvbnN0YW50Q29sdW1ucz10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uZnJvbVJvd3Mocm93cyx7Y2VsbEtleTonY29uc3RhbnRDZWxscycsYWdncmVnYXRpb25Nb2RlOnVuZGVmaW5lZCxydWxlczpDT05TVEFOVF9DT0xVTU5fUlVMRVN9KTtjb25zdCB2YXJpYWJsZUNvbHVtbnM9dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLmZyb21Sb3dzKHJvd3Mse2NlbGxLZXk6J3ZhcmlhYmxlQ2VsbHMnLGFnZ3JlZ2F0aW9uTW9kZTp0aGlzLmFnZ3JlZ2F0aW9uTW9kZV8scnVsZXM6VkFSSUFCTEVfQ09MVU1OX1JVTEVTfSk7Y29uc3QgZmllbGRDb2x1bW5zPWNvbnN0YW50Q29sdW1ucy5jb25jYXQodmFyaWFibGVDb2x1bW5zKTt0ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uc3BhY2VFcXVhbGx5KGZpZWxkQ29sdW1ucyk7Y29uc3QgY29sdW1ucz1bdGl0bGVDb2x1bW5dLmNvbmNhdChmaWVsZENvbHVtbnMpO3JldHVybiBjb2x1bW5zO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItY29sb3ItbGVnZW5kJyxyZWFkeSgpe2NvbnN0IGJsYWNrU3F1YXJlQ2hhckNvZGU9OTYzMjt0aGlzLiQuc3F1YXJlLmlubmVyVGV4dD1TdHJpbmcuZnJvbUNoYXJDb2RlKGJsYWNrU3F1YXJlQ2hhckNvZGUpO3RoaXMubGFiZWxfPXVuZGVmaW5lZDt0aGlzLmNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZV89dHIubW9kZWwuQ29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlLk5PVF9TRUxFQ1RFRDt9LHNldCBjb21wb3VuZEV2ZW50U2VsZWN0aW9uU3RhdGUoY29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlKXt0aGlzLmNvbXBvdW5kRXZlbnRTZWxlY3Rpb25TdGF0ZV89Y29tcG91bmRFdmVudFNlbGVjdGlvblN0YXRlO30sZ2V0IGxhYmVsKCl7cmV0dXJuIHRoaXMubGFiZWxfO30sc2V0IGxhYmVsKGxhYmVsKXtpZihsYWJlbD09PXVuZGVmaW5lZCl7dGhpcy5zZXRMYWJlbEFuZENvbG9ySWQodW5kZWZpbmVkLHVuZGVmaW5lZCk7cmV0dXJuO30KY29uc3QgY29sb3JJZD10ci5iLkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZyhsYWJlbCk7dGhpcy5zZXRMYWJlbEFuZENvbG9ySWQobGFiZWwsY29sb3JJZCk7fSxzZXRMYWJlbEFuZENvbG9ySWQobGFiZWwsY29sb3JJZCl7dGhpcy5sYWJlbF89bGFiZWw7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS50ZXh0Q29udGVudD0nJztQb2x5bWVyLmRvbSh0aGlzLiQubGFiZWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuYXNIVE1MT3JUZXh0Tm9kZShsYWJlbCkpO2lmKGNvbG9ySWQ9PT11bmRlZmluZWQpe3RoaXMuJC5zcXVhcmUuc3R5bGUuY29sb3I9J2luaXRpYWwnO31lbHNle3RoaXMuJC5zcXVhcmUuc3R5bGUuY29sb3I9dHIuYi5Db2xvclNjaGVtZS5jb2xvcnNBc1N0cmluZ3NbY29sb3JJZF07fX19KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWItdmlldy1zcGVjaWZpYy1icnVzaGluZy1zdGF0ZScsZ2V0IHZpZXdJZCgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgndmlldy1pZCcpO30sc2V0IHZpZXdJZCh2aWV3SWQpe1BvbHltZXIuZG9tKHRoaXMpLnNldEF0dHJpYnV0ZSgndmlldy1pZCcsdmlld0lkKTt9LGdldCgpe2NvbnN0IHZpZXdJZD10aGlzLnZpZXdJZDtpZighdmlld0lkKXt0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgbXVzdCBoYXZlIGEgdmlldy1pZCBhdHRyaWJ1dGUhJyk7fQpjb25zdCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcj10ci5jLkJydXNoaW5nU3RhdGVDb250cm9sbGVyLmdldENvbnRyb2xsZXJGb3JFbGVtZW50KHRoaXMpO2lmKCFicnVzaGluZ1N0YXRlQ29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBicnVzaGluZ1N0YXRlQ29udHJvbGxlci5nZXRWaWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlKHZpZXdJZCk7fSxzZXQoc3RhdGUpe2NvbnN0IHZpZXdJZD10aGlzLnZpZXdJZDtpZighdmlld0lkKXt0aHJvdyBuZXcgRXJyb3IoJ0VsZW1lbnQgbXVzdCBoYXZlIGEgdmlldy1pZCBhdHRyaWJ1dGUhJyk7fQpjb25zdCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcj10ci5jLkJydXNoaW5nU3RhdGVDb250cm9sbGVyLmdldENvbnRyb2xsZXJGb3JFbGVtZW50KHRoaXMpO2lmKCFicnVzaGluZ1N0YXRlQ29udHJvbGxlcilyZXR1cm47YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlVmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZSh2aWV3SWQsc3RhdGUpO319KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IE1lbW9yeUNvbHVtbkNvbG9yU2NoZW1lPXRyLmIuTWVtb3J5Q29sdW1uQ29sb3JTY2hlbWU7Y29uc3QgU2NhbGFyPXRyLmIuU2NhbGFyO2NvbnN0IHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcj10ci5iLlVuaXQuYnlOYW1lLnNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcjtjb25zdCBQTEFURk9STV9TUEVDSUZJQ19UT1RBTF9OQU1FX1NVRkZJWD0nX2J5dGVzJztjb25zdCBESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5ESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU7Y29uc3QgU09NRV9USU1FU1RBTVBTX0lORk9fUVVBTlRJRklFUj10ci51aS5hbmFseXNpcy5NZW1vcnlDb2x1bW4uU09NRV9USU1FU1RBTVBTX0lORk9fUVVBTlRJRklFUjtjb25zdCBSSUdIVFdBUkRTX0FSUk9XX1dJVEhfSE9PSz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjFBQSk7Y29uc3QgUklHSFRXQVJEU19BUlJPV19GUk9NX0JBUj1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjFBNik7Y29uc3QgR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyMjY1KTtjb25zdCBVTk1BUlJJRURfUEFSVE5FUlNISVBfU1lNQk9MPVN0cmluZy5mcm9tQ2hhckNvZGUoMHgyNkFGKTtjb25zdCBUUklHUkFNX0ZPUl9IRUFWRU49U3RyaW5nLmZyb21DaGFyQ29kZSgweDI2MzApO2Z1bmN0aW9uIGxhenlNYXAobGlzdCxmbixvcHRfdGhpcyl7b3B0X3RoaXM9b3B0X3RoaXN8fHRoaXM7bGV0IHJlc3VsdD11bmRlZmluZWQ7bGlzdC5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0saW5kZXgpe2NvbnN0IHZhbHVlPWZuLmNhbGwob3B0X3RoaXMsaXRlbSxpbmRleCk7aWYodmFsdWU9PT11bmRlZmluZWQpcmV0dXJuO2lmKHJlc3VsdD09PXVuZGVmaW5lZCl7cmVzdWx0PW5ldyBBcnJheShsaXN0Lmxlbmd0aCk7fQpyZXN1bHRbaW5kZXhdPXZhbHVlO30pO3JldHVybiByZXN1bHQ7fQpmdW5jdGlvbiBQcm9jZXNzTmFtZUNvbHVtbigpe3RyLnVpLmFuYWx5c2lzLlRpdGxlQ29sdW1uLmNhbGwodGhpcywnUHJvY2VzcycpO30KUHJvY2Vzc05hbWVDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYW5hbHlzaXMuVGl0bGVDb2x1bW4ucHJvdG90eXBlLGZvcm1hdFRpdGxlKHJvdyl7aWYocm93LmNvbnRleHRzPT09dW5kZWZpbmVkKXtyZXR1cm4gcm93LnRpdGxlO30KY29uc3QgdGl0bGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWNvbG9yLWxlZ2VuZCcpO3RpdGxlRWwubGFiZWw9cm93LnRpdGxlO3JldHVybiB0aXRsZUVsO319O2Z1bmN0aW9uIFVzZWRNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe3RyLnVpLmFuYWx5c2lzLk51bWVyaWNNZW1vcnlDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9ClVzZWRNZW1vcnlDb2x1bW4uQ09MT1I9TWVtb3J5Q29sdW1uQ29sb3JTY2hlbWUuZ2V0Q29sb3IoJ3VzZWRfbWVtb3J5X2NvbHVtbicpLnRvU3RyaW5nKCk7VXNlZE1lbW9yeUNvbHVtbi5PTERFUl9DT0xPUj1NZW1vcnlDb2x1bW5Db2xvclNjaGVtZS5nZXRDb2xvcignb2xkZXJfdXNlZF9tZW1vcnlfY29sdW1uJykudG9TdHJpbmcoKTtVc2VkTWVtb3J5Q29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk51bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnRoaXMubmFtZSxjb2xvcjpVc2VkTWVtb3J5Q29sdW1uLkNPTE9SfSk7fSxnZXRGb3JtYXR0aW5nQ29udGV4dCh1bml0KXtyZXR1cm57dW5pdFByZWZpeDp0ci5iLlVuaXRQcmVmaXhTY2FsZS5CSU5BUlkuTUVCSX07fSxjb2xvcihudW1lcmljcyxwcm9jZXNzTWVtb3J5RHVtcHMpe3JldHVybiBVc2VkTWVtb3J5Q29sdW1uLkNPTE9SO30sZ2V0Q2hpbGRQYW5lQnVpbGRlcihwcm9jZXNzTWVtb3J5RHVtcHMpe2lmKHByb2Nlc3NNZW1vcnlEdW1wcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHZtUmVnaW9ucz1sYXp5TWFwKHByb2Nlc3NNZW1vcnlEdW1wcyxmdW5jdGlvbihwbWQpe2lmKHBtZD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBwbWQubW9zdFJlY2VudFZtUmVnaW9uczt9KTtpZih2bVJlZ2lvbnM9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBwYW5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtbWVtb3J5LWR1bXAtdm0tcmVnaW9ucy1kZXRhaWxzLXBhbmUnKTtwYW5lLnZtUmVnaW9ucz12bVJlZ2lvbnM7cGFuZS5hZ2dyZWdhdGlvbk1vZGU9dGhpcy5hZ2dyZWdhdGlvbk1vZGU7cmV0dXJuIHBhbmU7fS5iaW5kKHRoaXMpO319O2Z1bmN0aW9uIFBlYWtNZW1vcnlDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe1VzZWRNZW1vcnlDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9ClBlYWtNZW1vcnlDb2x1bW4ucHJvdG90eXBlPXtfX3Byb3RvX186VXNlZE1lbW9yeUNvbHVtbi5wcm90b3R5cGUsYWRkSW5mb3MobnVtZXJpY3MscHJvY2Vzc01lbW9yeUR1bXBzLGluZm9zKXtpZihwcm9jZXNzTWVtb3J5RHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO2xldCByZXNldHRhYmxlVmFsdWVDb3VudD0wO2xldCBub25SZXNldHRhYmxlVmFsdWVDb3VudD0wO2ZvcihsZXQgaT0wO2k8bnVtZXJpY3MubGVuZ3RoO2krKyl7aWYobnVtZXJpY3NbaV09PT11bmRlZmluZWQpY29udGludWU7aWYocHJvY2Vzc01lbW9yeUR1bXBzW2ldLmFyZVBlYWtSZXNpZGVudEJ5dGVzUmVzZXR0YWJsZSl7cmVzZXR0YWJsZVZhbHVlQ291bnQrKzt9ZWxzZXtub25SZXNldHRhYmxlVmFsdWVDb3VudCsrO319CmlmKHJlc2V0dGFibGVWYWx1ZUNvdW50PjAmJm5vblJlc2V0dGFibGVWYWx1ZUNvdW50PjApe2luZm9zLnB1c2godHIudWkuYW5hbHlzaXMuY3JlYXRlV2FybmluZ0luZm8oJ0JvdGggcmVzZXR0YWJsZSBhbmQgJysnbm9uLXJlc2V0dGFibGUgcGVhayBSU1MgdmFsdWVzIHdlcmUgcHJvdmlkZWQgYnkgdGhlIHByb2Nlc3MnKSk7fWVsc2UgaWYocmVzZXR0YWJsZVZhbHVlQ291bnQ+MCl7aW5mb3MucHVzaCh7aWNvbjpSSUdIVFdBUkRTX0FSUk9XX1dJVEhfSE9PSyxtZXNzYWdlOidQZWFrIFJTUyBzaW5jZSBwcmV2aW91cyBtZW1vcnkgZHVtcC4nfSk7fWVsc2V7aW5mb3MucHVzaCh7aWNvbjpSSUdIVFdBUkRTX0FSUk9XX0ZST01fQkFSLG1lc3NhZ2U6J1BlYWsgUlNTIHNpbmNlIHByb2Nlc3Mgc3RhcnR1cC4gRmluZXIgZ3JhaW5lZCAnKydwZWFrcyByZXF1aXJlIGEgTGludXgga2VybmVsIHZlcnNpb24gJysKR1JFQVRFUl9USEFOX09SX0VRVUFMX1RPKycgNC4wLid9KTt9fX07ZnVuY3Rpb24gQnl0ZVN0YXRDb2x1bW4obmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpe1VzZWRNZW1vcnlDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9CkJ5dGVTdGF0Q29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOlVzZWRNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGNvbG9yKG51bWVyaWNzLHByb2Nlc3NNZW1vcnlEdW1wcyl7aWYocHJvY2Vzc01lbW9yeUR1bXBzPT09dW5kZWZpbmVkKXtyZXR1cm4gVXNlZE1lbW9yeUNvbHVtbi5DT0xPUjt9CmNvbnN0IGFsbE9sZGVyVmFsdWVzPXByb2Nlc3NNZW1vcnlEdW1wcy5ldmVyeShmdW5jdGlvbihwcm9jZXNzTWVtb3J5RHVtcCl7aWYocHJvY2Vzc01lbW9yeUR1bXA9PT11bmRlZmluZWQpcmV0dXJuIHRydWU7cmV0dXJuIXByb2Nlc3NNZW1vcnlEdW1wLmhhc093blZtUmVnaW9uczt9KTtpZihhbGxPbGRlclZhbHVlcyl7cmV0dXJuIFVzZWRNZW1vcnlDb2x1bW4uT0xERVJfQ09MT1I7fQpyZXR1cm4gVXNlZE1lbW9yeUNvbHVtbi5DT0xPUjt9LGFkZEluZm9zKG51bWVyaWNzLHByb2Nlc3NNZW1vcnlEdW1wcyxpbmZvcyl7aWYocHJvY2Vzc01lbW9yeUR1bXBzPT09dW5kZWZpbmVkKXJldHVybjtsZXQgb2xkZXJWYWx1ZUNvdW50PTA7Zm9yKGxldCBpPTA7aTxudW1lcmljcy5sZW5ndGg7aSsrKXtjb25zdCBwcm9jZXNzTWVtb3J5RHVtcD1wcm9jZXNzTWVtb3J5RHVtcHNbaV07aWYocHJvY2Vzc01lbW9yeUR1bXAhPT11bmRlZmluZWQmJiFwcm9jZXNzTWVtb3J5RHVtcC5oYXNPd25WbVJlZ2lvbnMpe29sZGVyVmFsdWVDb3VudCsrO319CmlmKG9sZGVyVmFsdWVDb3VudD09PTApe3JldHVybjt9CmNvbnN0IGluZm9RdWFudGlmaWVyPW9sZGVyVmFsdWVDb3VudDxudW1lcmljcy5sZW5ndGg/JyAnK1NPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI6Jyc7aW5mb3MucHVzaCh7bWVzc2FnZTonT2xkZXIgdmFsdWUnK2luZm9RdWFudGlmaWVyKycgKG9ubHkgaGVhdnkgKHB1cnBsZSkgbWVtb3J5IGR1bXBzIGNvbnRhaW4gbWVtb3J5IG1hcHMpLicsaWNvbjpVTk1BUlJJRURfUEFSVE5FUlNISVBfU1lNQk9MfSk7fX07VXNlZE1lbW9yeUNvbHVtbi5SVUxFUz1be2NvbmRpdGlvbjonVG90YWwgcmVzaWRlbnQnLGltcG9ydGFuY2U6MTAsY29sdW1uQ29uc3RydWN0b3I6VXNlZE1lbW9yeUNvbHVtbn0se2NvbmRpdGlvbjonUGVhayB0b3RhbCByZXNpZGVudCcsaW1wb3J0YW5jZTo5LGNvbHVtbkNvbnN0cnVjdG9yOlBlYWtNZW1vcnlDb2x1bW59LHtjb25kaXRpb246J1BTUycsaW1wb3J0YW5jZTo4LGNvbHVtbkNvbnN0cnVjdG9yOkJ5dGVTdGF0Q29sdW1ufSx7Y29uZGl0aW9uOidQcml2YXRlIGRpcnR5JyxpbXBvcnRhbmNlOjcsY29sdW1uQ29uc3RydWN0b3I6Qnl0ZVN0YXRDb2x1bW59LHtjb25kaXRpb246J1N3YXBwZWQnLGltcG9ydGFuY2U6Nixjb2x1bW5Db25zdHJ1Y3RvcjpCeXRlU3RhdENvbHVtbn0se2ltcG9ydGFuY2U6MCxjb2x1bW5Db25zdHJ1Y3RvcjpVc2VkTWVtb3J5Q29sdW1ufV07VXNlZE1lbW9yeUNvbHVtbi5UT1RBTFNfTUFQPXsncmVzaWRlbnRCeXRlcyc6J1RvdGFsIHJlc2lkZW50JywncGVha1Jlc2lkZW50Qnl0ZXMnOidQZWFrIHRvdGFsIHJlc2lkZW50JywncHJpdmF0ZUZvb3RwcmludEJ5dGVzJzonUHJpdmF0ZSBmb290cHJpbnQnLH07VXNlZE1lbW9yeUNvbHVtbi5QTEFURk9STV9TUEVDSUZJQ19UT1RBTFNfTUFQPXsndm0nOidUb3RhbCB2aXJ0dWFsJywnc3dwJzonU3dhcHBlZCcsJ3BjJzonUHJpdmF0ZSBjbGVhbicsJ3BkJzonUHJpdmF0ZSBkaXJ0eScsJ3NjJzonU2hhcmVkIGNsZWFuJywnc2QnOidTaGFyZWQgZGlydHknLCdncHVfZWdsJzonR1BVIEVHTCcsJ2dwdV9lZ2xfcHNzJzonR1BVIEVHTCBQU1MnLCdncHVfZ2wnOidHUFUgR0wnLCdncHVfZ2xfcHNzJzonR1BVIEdMIFBTUycsJ2dwdV9ldGMnOidHUFUgT3RoZXInLCdncHVfZXRjX3Bzcyc6J0dQVSBPdGhlciBQU1MnLH07VXNlZE1lbW9yeUNvbHVtbi5CWVRFX1NUQVRfTUFQPXsncHJvcG9ydGlvbmFsUmVzaWRlbnQnOidQU1MnLCdwcml2YXRlRGlydHlSZXNpZGVudCc6J1ByaXZhdGUgZGlydHknLCdzd2FwcGVkJzonU3dhcHBlZCd9O2Z1bmN0aW9uIEFsbG9jYXRvckNvbHVtbihuYW1lLGNlbGxQYXRoLGFnZ3JlZ2F0aW9uTW9kZSl7dHIudWkuYW5hbHlzaXMuTnVtZXJpY01lbW9yeUNvbHVtbi5jYWxsKHRoaXMsbmFtZSxjZWxsUGF0aCxhZ2dyZWdhdGlvbk1vZGUpO30KQWxsb2NhdG9yQ29sdW1uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmFuYWx5c2lzLk51bWVyaWNNZW1vcnlDb2x1bW4ucHJvdG90eXBlLGdldCB0aXRsZSgpe2NvbnN0IHRpdGxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1jb2xvci1sZWdlbmQnKTt0aXRsZUVsLmxhYmVsPXRoaXMubmFtZTtyZXR1cm4gdGl0bGVFbDt9LGdldEZvcm1hdHRpbmdDb250ZXh0KHVuaXQpe3JldHVybnt1bml0UHJlZml4OnRyLmIuVW5pdFByZWZpeFNjYWxlLkJJTkFSWS5NRUJJfTt9LGFkZEluZm9zKG51bWVyaWNzLHByb2Nlc3NNZW1vcnlEdW1wcyxpbmZvcyl7aWYocHJvY2Vzc01lbW9yeUR1bXBzPT09dW5kZWZpbmVkKXJldHVybjtsZXQgaGVhcER1bXBDb3VudD0wO2xldCBtaXNzaW5nU2l6ZUNvdW50PTA7Zm9yKGxldCBpPTA7aTxwcm9jZXNzTWVtb3J5RHVtcHMubGVuZ3RoO2krKyl7Y29uc3QgcHJvY2Vzc01lbW9yeUR1bXA9cHJvY2Vzc01lbW9yeUR1bXBzW2ldO2lmKHByb2Nlc3NNZW1vcnlEdW1wPT09dW5kZWZpbmVkKWNvbnRpbnVlO2NvbnN0IGhlYXBEdW1wcz1wcm9jZXNzTWVtb3J5RHVtcC5oZWFwRHVtcHM7aWYoaGVhcER1bXBzIT09dW5kZWZpbmVkJiZoZWFwRHVtcHNbdGhpcy5uYW1lXSE9PXVuZGVmaW5lZCl7aGVhcER1bXBDb3VudCsrO30KY29uc3QgYWxsb2NhdG9yRHVtcD1wcm9jZXNzTWVtb3J5RHVtcC5nZXRNZW1vcnlBbGxvY2F0b3JEdW1wQnlGdWxsTmFtZSh0aGlzLm5hbWUpO2lmKGFsbG9jYXRvckR1bXAhPT11bmRlZmluZWQmJmFsbG9jYXRvckR1bXAubnVtZXJpY3NbRElTUExBWUVEX1NJWkVfTlVNRVJJQ19OQU1FXT09PXVuZGVmaW5lZCl7bWlzc2luZ1NpemVDb3VudCsrO319CmlmKGhlYXBEdW1wQ291bnQ+MCl7Y29uc3QgaW5mb1F1YW50aWZpZXI9aGVhcER1bXBDb3VudDxudW1lcmljcy5sZW5ndGg/JyAnK1NPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI6Jyc7aW5mb3MucHVzaCh7bWVzc2FnZTonSGVhcCBkdW1wIHByb3ZpZGVkJytpbmZvUXVhbnRpZmllcisnLicsaWNvbjpUUklHUkFNX0ZPUl9IRUFWRU59KTt9CmlmKG1pc3NpbmdTaXplQ291bnQ+MCl7Y29uc3QgaW5mb1F1YW50aWZpZXI9bWlzc2luZ1NpemVDb3VudDxudW1lcmljcy5sZW5ndGg/JyAnK1NPTUVfVElNRVNUQU1QU19JTkZPX1FVQU5USUZJRVI6Jyc7aW5mb3MucHVzaCh0ci51aS5hbmFseXNpcy5jcmVhdGVXYXJuaW5nSW5mbygnU2l6ZSB3YXMgbm90IHByb3ZpZGVkJytpbmZvUXVhbnRpZmllcisnLicpKTt9fSxnZXRDaGlsZFBhbmVCdWlsZGVyKHByb2Nlc3NNZW1vcnlEdW1wcyl7aWYocHJvY2Vzc01lbW9yeUR1bXBzPT09dW5kZWZpbmVkKXJldHVybiB1bmRlZmluZWQ7Y29uc3QgbWVtb3J5QWxsb2NhdG9yRHVtcHM9bGF6eU1hcChwcm9jZXNzTWVtb3J5RHVtcHMsZnVuY3Rpb24ocG1kKXtpZihwbWQ9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gcG1kLmdldE1lbW9yeUFsbG9jYXRvckR1bXBCeUZ1bGxOYW1lKHRoaXMubmFtZSk7fSx0aGlzKTtpZihtZW1vcnlBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IGhlYXBEdW1wcz1sYXp5TWFwKHByb2Nlc3NNZW1vcnlEdW1wcyxmdW5jdGlvbihwbWQpe2lmKHBtZD09PXVuZGVmaW5lZHx8cG1kLmhlYXBEdW1wcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiBwbWQuaGVhcER1bXBzW3RoaXMubmFtZV07fSx0aGlzKTtyZXR1cm4gZnVuY3Rpb24oKXtjb25zdCBwYW5lPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtbWVtb3J5LWR1bXAtYWxsb2NhdG9yLWRldGFpbHMtcGFuZScpO3BhbmUubWVtb3J5QWxsb2NhdG9yRHVtcHM9bWVtb3J5QWxsb2NhdG9yRHVtcHM7cGFuZS5oZWFwRHVtcHM9aGVhcER1bXBzO3BhbmUuYWdncmVnYXRpb25Nb2RlPXRoaXMuYWdncmVnYXRpb25Nb2RlO3JldHVybiBwYW5lO30uYmluZCh0aGlzKTt9fTtmdW5jdGlvbiBUcmFjaW5nQ29sdW1uKG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKXtBbGxvY2F0b3JDb2x1bW4uY2FsbCh0aGlzLG5hbWUsY2VsbFBhdGgsYWdncmVnYXRpb25Nb2RlKTt9ClRyYWNpbmdDb2x1bW4uQ09MT1I9TWVtb3J5Q29sdW1uQ29sb3JTY2hlbWUuZ2V0Q29sb3IoJ3RyYWNpbmdfbWVtb3J5X2NvbHVtbicpLnRvU3RyaW5nKCk7VHJhY2luZ0NvbHVtbi5wcm90b3R5cGU9e19fcHJvdG9fXzpBbGxvY2F0b3JDb2x1bW4ucHJvdG90eXBlLGdldCB0aXRsZSgpe3JldHVybiB0ci51aS5iLmNyZWF0ZVNwYW4oe3RleHRDb250ZW50OnRoaXMubmFtZSxjb2xvcjpUcmFjaW5nQ29sdW1uLkNPTE9SfSk7fSxjb2xvcihudW1lcmljcyxwcm9jZXNzTWVtb3J5RHVtcHMpe3JldHVybiBUcmFjaW5nQ29sdW1uLkNPTE9SO319O0FsbG9jYXRvckNvbHVtbi5SVUxFUz1be2NvbmRpdGlvbjondHJhY2luZycsaW1wb3J0YW5jZTowLGNvbHVtbkNvbnN0cnVjdG9yOlRyYWNpbmdDb2x1bW59LHtpbXBvcnRhbmNlOjEsY29sdW1uQ29uc3RydWN0b3I6QWxsb2NhdG9yQ29sdW1ufV07UG9seW1lcih7aXM6J3RyLXVpLWEtbWVtb3J5LWR1bXAtb3ZlcnZpZXctcGFuZScsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5TdGFja2VkUGFuZV0sY3JlYXRlZCgpe3RoaXMucHJvY2Vzc01lbW9yeUR1bXBzXz11bmRlZmluZWQ7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLkNFTEw7dGhpcy4kLnRhYmxlLmFkZEV2ZW50TGlzdGVuZXIoJ3NlbGVjdGlvbi1jaGFuZ2VkJyxmdW5jdGlvbih0YWJsZUV2ZW50KXt0YWJsZUV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuY2hhbmdlQ2hpbGRQYW5lXygpO30uYmluZCh0aGlzKSk7fSxzZXQgcHJvY2Vzc01lbW9yeUR1bXBzKHByb2Nlc3NNZW1vcnlEdW1wcyl7dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfPXByb2Nlc3NNZW1vcnlEdW1wczt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBwcm9jZXNzTWVtb3J5RHVtcHMoKXtyZXR1cm4gdGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfO30sc2V0IGFnZ3JlZ2F0aW9uTW9kZShhZ2dyZWdhdGlvbk1vZGUpe3RoaXMuYWdncmVnYXRpb25Nb2RlXz1hZ2dyZWdhdGlvbk1vZGU7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgYWdncmVnYXRpb25Nb2RlKCl7cmV0dXJuIHRoaXMuYWdncmVnYXRpb25Nb2RlXzt9LGdldCBzZWxlY3RlZE1lbW9yeUNlbGwoKXtpZih0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc189PT11bmRlZmluZWR8fHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzXy5sZW5ndGg9PT0wKXtyZXR1cm4gdW5kZWZpbmVkO30KY29uc3Qgc2VsZWN0ZWRUYWJsZVJvdz10aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdztpZighc2VsZWN0ZWRUYWJsZVJvdylyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNlbGVjdGVkQ29sdW1uSW5kZXg9dGhpcy4kLnRhYmxlLnNlbGVjdGVkQ29sdW1uSW5kZXg7aWYoc2VsZWN0ZWRDb2x1bW5JbmRleD09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNlbGVjdGVkQ29sdW1uPXRoaXMuJC50YWJsZS50YWJsZUNvbHVtbnNbc2VsZWN0ZWRDb2x1bW5JbmRleF07Y29uc3Qgc2VsZWN0ZWRNZW1vcnlDZWxsPXNlbGVjdGVkQ29sdW1uLmNlbGwoc2VsZWN0ZWRUYWJsZVJvdyk7cmV0dXJuIHNlbGVjdGVkTWVtb3J5Q2VsbDt9LGNoYW5nZUNoaWxkUGFuZV8oKXt0aGlzLnN0b3JlU2VsZWN0aW9uXygpO3RoaXMuY2hpbGRQYW5lQnVpbGRlcj10aGlzLmRldGVybWluZUNoaWxkUGFuZUJ1aWxkZXJGcm9tU2VsZWN0aW9uXygpO30sZGV0ZXJtaW5lQ2hpbGRQYW5lQnVpbGRlckZyb21TZWxlY3Rpb25fKCl7aWYodGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfPT09dW5kZWZpbmVkfHx0aGlzLnByb2Nlc3NNZW1vcnlEdW1wc18ubGVuZ3RoPT09MCl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IHNlbGVjdGVkVGFibGVSb3c9dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c7aWYoIXNlbGVjdGVkVGFibGVSb3cpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBzZWxlY3RlZENvbHVtbkluZGV4PXRoaXMuJC50YWJsZS5zZWxlY3RlZENvbHVtbkluZGV4O2lmKHNlbGVjdGVkQ29sdW1uSW5kZXg9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBzZWxlY3RlZENvbHVtbj10aGlzLiQudGFibGUudGFibGVDb2x1bW5zW3NlbGVjdGVkQ29sdW1uSW5kZXhdO3JldHVybiBzZWxlY3RlZENvbHVtbi5nZXRDaGlsZFBhbmVCdWlsZGVyKHNlbGVjdGVkVGFibGVSb3cuY29udGV4dHMpO30sb25SZWJ1aWxkXygpe2lmKHRoaXMucHJvY2Vzc01lbW9yeUR1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5wcm9jZXNzTWVtb3J5RHVtcHNfLmxlbmd0aD09PTApe3RoaXMuJC5pbmZvX3RleHQuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC50YWJsZS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQudGFibGUuY2xlYXIoKTt0aGlzLiQudGFibGUucmVidWlsZCgpO3JldHVybjt9CnRoaXMuJC5pbmZvX3RleHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnRhYmxlLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztjb25zdCByb3dzPXRoaXMuY3JlYXRlUm93c18oKTtjb25zdCBjb2x1bW5zPXRoaXMuY3JlYXRlQ29sdW1uc18ocm93cyk7Y29uc3QgZm9vdGVyUm93cz10aGlzLmNyZWF0ZUZvb3RlclJvd3NfKHJvd3MsY29sdW1ucyk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5mb290ZXJSb3dzPWZvb3RlclJvd3M7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7dGhpcy5yZXN0b3JlU2VsZWN0aW9uXygpO30sY3JlYXRlUm93c18oKXtjb25zdCB0aW1lVG9QaWRUb1Byb2Nlc3NNZW1vcnlEdW1wPXRoaXMucHJvY2Vzc01lbW9yeUR1bXBzXztjb25zdCBwaWRUb1RpbWVUb1Byb2Nlc3NNZW1vcnlEdW1wPXRyLmIuaW52ZXJ0QXJyYXlPZkRpY3RzKHRpbWVUb1BpZFRvUHJvY2Vzc01lbW9yeUR1bXApO2NvbnN0IHJvd3M9W107Zm9yKGNvbnN0W3BpZCx0aW1lVG9EdW1wXW9mCk9iamVjdC5lbnRyaWVzKHBpZFRvVGltZVRvUHJvY2Vzc01lbW9yeUR1bXApKXtjb25zdCBwcm9jZXNzPXRpbWVUb0R1bXAuZmluZCh4PT54KS5wcm9jZXNzO2NvbnN0IHVzZWRNZW1vcnlDZWxscz10ci51aS5hbmFseXNpcy5jcmVhdGVDZWxscyh0aW1lVG9EdW1wLGZ1bmN0aW9uKGR1bXApe2NvbnN0IHNpemVzPXt9O2NvbnN0IHRvdGFscz1kdW1wLnRvdGFscztpZih0b3RhbHMhPT11bmRlZmluZWQpe2Zvcihjb25zdFt0b3RhbE5hbWUsY2VsbE5hbWVdb2YKT2JqZWN0LmVudHJpZXMoVXNlZE1lbW9yeUNvbHVtbi5UT1RBTFNfTUFQKSl7Y29uc3QgdG90YWw9dG90YWxzW3RvdGFsTmFtZV07aWYodG90YWw9PT11bmRlZmluZWQpY29udGludWU7c2l6ZXNbY2VsbE5hbWVdPW5ldyBTY2FsYXIoc2l6ZUluQnl0ZXNfc21hbGxlcklzQmV0dGVyLHRvdGFsKTt9CmNvbnN0IHBsYXRmb3JtU3BlY2lmaWM9dG90YWxzLnBsYXRmb3JtU3BlY2lmaWM7aWYocGxhdGZvcm1TcGVjaWZpYyE9PXVuZGVmaW5lZCl7Zm9yKGNvbnN0W25hbWUsc2l6ZV1vZiBPYmplY3QuZW50cmllcyhwbGF0Zm9ybVNwZWNpZmljKSl7bGV0IG5ld05hbWU9bmFtZTtpZihVc2VkTWVtb3J5Q29sdW1uLlBMQVRGT1JNX1NQRUNJRklDX1RPVEFMU19NQVBbbmFtZV09PT11bmRlZmluZWQpe2lmKG5hbWUuZW5kc1dpdGgoUExBVEZPUk1fU1BFQ0lGSUNfVE9UQUxfTkFNRV9TVUZGSVgpKXtuZXdOYW1lPW5hbWUuc3Vic3RyaW5nKDAsbmFtZS5sZW5ndGgtClBMQVRGT1JNX1NQRUNJRklDX1RPVEFMX05BTUVfU1VGRklYLmxlbmd0aCk7fQpuZXdOYW1lPW5ld05hbWUucmVwbGFjZSgnXycsJyAnKS50cmltKCk7bmV3TmFtZT1uZXdOYW1lLmNoYXJBdCgwKS50b1VwcGVyQ2FzZSgpK25ld05hbWUuc2xpY2UoMSk7fWVsc2V7bmV3TmFtZT1Vc2VkTWVtb3J5Q29sdW1uLlBMQVRGT1JNX1NQRUNJRklDX1RPVEFMU19NQVBbbmFtZV07fQpzaXplc1tuZXdOYW1lXT1uZXcgU2NhbGFyKHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixzaXplKTt9fX0KY29uc3Qgdm1SZWdpb25zPWR1bXAubW9zdFJlY2VudFZtUmVnaW9ucztpZih2bVJlZ2lvbnMhPT11bmRlZmluZWQpe2Zvcihjb25zdFtieXRlU3RhdE5hbWUsY2VsbE5hbWVdb2YKT2JqZWN0LmVudHJpZXMoVXNlZE1lbW9yeUNvbHVtbi5CWVRFX1NUQVRfTUFQKSl7Y29uc3QgYnl0ZVN0YXQ9dm1SZWdpb25zLmJ5dGVTdGF0c1tieXRlU3RhdE5hbWVdO2lmKGJ5dGVTdGF0PT09dW5kZWZpbmVkKWNvbnRpbnVlO3NpemVzW2NlbGxOYW1lXT1uZXcgU2NhbGFyKHNpemVJbkJ5dGVzX3NtYWxsZXJJc0JldHRlcixieXRlU3RhdCk7fX0KcmV0dXJuIHNpemVzO30pO2NvbnN0IGFsbG9jYXRvckNlbGxzPXRyLnVpLmFuYWx5c2lzLmNyZWF0ZUNlbGxzKHRpbWVUb0R1bXAsZnVuY3Rpb24oZHVtcCl7Y29uc3QgbWVtb3J5QWxsb2NhdG9yRHVtcHM9ZHVtcC5tZW1vcnlBbGxvY2F0b3JEdW1wcztpZihtZW1vcnlBbGxvY2F0b3JEdW1wcz09PXVuZGVmaW5lZClyZXR1cm4gdW5kZWZpbmVkO2NvbnN0IHNpemVzPXt9O21lbW9yeUFsbG9jYXRvckR1bXBzLmZvckVhY2goZnVuY3Rpb24oYWxsb2NhdG9yRHVtcCl7bGV0IHJvb3REaXNwbGF5ZWRTaXplTnVtZXJpYz1hbGxvY2F0b3JEdW1wLm51bWVyaWNzW0RJU1BMQVlFRF9TSVpFX05VTUVSSUNfTkFNRV07aWYocm9vdERpc3BsYXllZFNpemVOdW1lcmljPT09dW5kZWZpbmVkKXtyb290RGlzcGxheWVkU2l6ZU51bWVyaWM9bmV3IFNjYWxhcihzaXplSW5CeXRlc19zbWFsbGVySXNCZXR0ZXIsMCk7fQpzaXplc1thbGxvY2F0b3JEdW1wLmZ1bGxOYW1lXT1yb290RGlzcGxheWVkU2l6ZU51bWVyaWM7fSk7cmV0dXJuIHNpemVzO30pO3Jvd3MucHVzaCh7dGl0bGU6cHJvY2Vzcy51c2VyRnJpZW5kbHlOYW1lLGNvbnRleHRzOnRpbWVUb0R1bXAsdXNlZE1lbW9yeUNlbGxzLGFsbG9jYXRvckNlbGxzfSk7fQpyZXR1cm4gcm93czt9LGNyZWF0ZUZvb3RlclJvd3NfKHJvd3MsY29sdW1ucyl7aWYocm93cy5sZW5ndGg8PTEpcmV0dXJuW107Y29uc3QgdG90YWxSb3c9e3RpdGxlOidUb3RhbCd9O3RyLnVpLmFuYWx5c2lzLmFnZ3JlZ2F0ZVRhYmxlUm93Q2VsbHModG90YWxSb3cscm93cyxjb2x1bW5zKTtyZXR1cm5bdG90YWxSb3ddO30sY3JlYXRlQ29sdW1uc18ocm93cyl7Y29uc3QgdGl0bGVDb2x1bW49bmV3IFByb2Nlc3NOYW1lQ29sdW1uKCk7dGl0bGVDb2x1bW4ud2lkdGg9JzIwMHB4Jztjb25zdCB1c2VkTWVtb3J5U2l6ZUNvbHVtbnM9dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLmZyb21Sb3dzKHJvd3Mse2NlbGxLZXk6J3VzZWRNZW1vcnlDZWxscycsYWdncmVnYXRpb25Nb2RlOnRoaXMuYWdncmVnYXRpb25Nb2RlXyxydWxlczpVc2VkTWVtb3J5Q29sdW1uLlJVTEVTfSk7Y29uc3QgYWxsb2NhdG9yU2l6ZUNvbHVtbnM9dHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLmZyb21Sb3dzKHJvd3Mse2NlbGxLZXk6J2FsbG9jYXRvckNlbGxzJyxhZ2dyZWdhdGlvbk1vZGU6dGhpcy5hZ2dyZWdhdGlvbk1vZGVfLHJ1bGVzOkFsbG9jYXRvckNvbHVtbi5SVUxFU30pO2NvbnN0IHNpemVDb2x1bW5zPXVzZWRNZW1vcnlTaXplQ29sdW1ucy5jb25jYXQoYWxsb2NhdG9yU2l6ZUNvbHVtbnMpO3RyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5zcGFjZUVxdWFsbHkoc2l6ZUNvbHVtbnMpO2NvbnN0IGNvbHVtbnM9W3RpdGxlQ29sdW1uXS5jb25jYXQoc2l6ZUNvbHVtbnMpO3JldHVybiBjb2x1bW5zO30sc3RvcmVTZWxlY3Rpb25fKCl7bGV0IHNlbGVjdGVkUm93VGl0bGU7Y29uc3Qgc2VsZWN0ZWRSb3c9dGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c7aWYoc2VsZWN0ZWRSb3chPT11bmRlZmluZWQpe3NlbGVjdGVkUm93VGl0bGU9c2VsZWN0ZWRSb3cudGl0bGU7fQpsZXQgc2VsZWN0ZWRDb2x1bW5OYW1lO2NvbnN0IHNlbGVjdGVkQ29sdW1uSW5kZXg9dGhpcy4kLnRhYmxlLnNlbGVjdGVkQ29sdW1uSW5kZXg7aWYoc2VsZWN0ZWRDb2x1bW5JbmRleCE9PXVuZGVmaW5lZCl7Y29uc3Qgc2VsZWN0ZWRDb2x1bW49dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1uc1tzZWxlY3RlZENvbHVtbkluZGV4XTtzZWxlY3RlZENvbHVtbk5hbWU9c2VsZWN0ZWRDb2x1bW4ubmFtZTt9CnRoaXMuJC5zdGF0ZS5zZXQoe3Jvd1RpdGxlOnNlbGVjdGVkUm93VGl0bGUsY29sdW1uTmFtZTpzZWxlY3RlZENvbHVtbk5hbWV9KTt9LHJlc3RvcmVTZWxlY3Rpb25fKCl7Y29uc3Qgc2V0dGluZ3M9dGhpcy4kLnN0YXRlLmdldCgpO2lmKHNldHRpbmdzPT09dW5kZWZpbmVkfHxzZXR0aW5ncy5yb3dUaXRsZT09PXVuZGVmaW5lZHx8c2V0dGluZ3MuY29sdW1uTmFtZT09PXVuZGVmaW5lZCl7cmV0dXJuO30KY29uc3Qgc2VsZWN0ZWRDb2x1bW5JbmRleD10aGlzLiQudGFibGUudGFibGVDb2x1bW5zLmZpbmRJbmRleChjb2w9PmNvbC5uYW1lPT09c2V0dGluZ3MuY29sdW1uTmFtZSk7aWYoc2VsZWN0ZWRDb2x1bW5JbmRleD09PS0xKXJldHVybjtjb25zdCBzZWxlY3RlZFJvd1RpdGxlPXNldHRpbmdzLnJvd1RpdGxlO2NvbnN0IHNlbGVjdGVkUm93PXRoaXMuJC50YWJsZS50YWJsZVJvd3MuZmluZChyb3c9PnJvdy50aXRsZT09PXNlbGVjdGVkUm93VGl0bGUpO2lmKHNlbGVjdGVkUm93PT09dW5kZWZpbmVkKXJldHVybjt0aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdz1zZWxlY3RlZFJvdzt0aGlzLiQudGFibGUuc2VsZWN0ZWRDb2x1bW5JbmRleD1zZWxlY3RlZENvbHVtbkluZGV4O319KTtyZXR1cm57UHJvY2Vzc05hbWVDb2x1bW4sVXNlZE1lbW9yeUNvbHVtbixQZWFrTWVtb3J5Q29sdW1uLEJ5dGVTdGF0Q29sdW1uLEFsbG9jYXRvckNvbHVtbixUcmFjaW5nQ29sdW1uLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtQb2x5bWVyKHtpczondHItdWktYS1tZW1vcnktZHVtcC1oZWFkZXItcGFuZScsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5TdGFja2VkUGFuZV0sY3JlYXRlZCgpe3RoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfPXVuZGVmaW5lZDt9LHJlYWR5KCl7UG9seW1lci5kb20odGhpcy4kLmFnZ3JlZ2F0aW9uX21vZGVfY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2FnZ3JlZ2F0aW9uTW9kZScsJ21lbW9yeUR1bXBIZWFkZXJQYW5lLmFnZ3JlZ2F0aW9uTW9kZScsdHIudWkuYW5hbHlzaXMuTWVtb3J5Q29sdW1uLkFnZ3JlZ2F0aW9uTW9kZS5ESUZGLFt7bGFiZWw6J0RpZmYnLHZhbHVlOnRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGUuRElGRn0se2xhYmVsOidNYXgnLHZhbHVlOnRyLnVpLmFuYWx5c2lzLk1lbW9yeUNvbHVtbi5BZ2dyZWdhdGlvbk1vZGUuTUFYfV0pKTt9LHNldCBjb250YWluZXJNZW1vcnlEdW1wcyhjb250YWluZXJNZW1vcnlEdW1wcyl7dGhpcy5jb250YWluZXJNZW1vcnlEdW1wc189Y29udGFpbmVyTWVtb3J5RHVtcHM7dGhpcy5zY2hlZHVsZVJlYnVpbGRfKCk7fSxnZXQgY29udGFpbmVyTWVtb3J5RHVtcHMoKXtyZXR1cm4gdGhpcy5jb250YWluZXJNZW1vcnlEdW1wc187fSxzZXQgYWdncmVnYXRpb25Nb2RlKGFnZ3JlZ2F0aW9uTW9kZSl7dGhpcy5hZ2dyZWdhdGlvbk1vZGVfPWFnZ3JlZ2F0aW9uTW9kZTt0aGlzLnNjaGVkdWxlUmVidWlsZF8oKTt9LGdldCBhZ2dyZWdhdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy5hZ2dyZWdhdGlvbk1vZGVfO30sb25SZWJ1aWxkXygpe3RoaXMudXBkYXRlTGFiZWxfKCk7dGhpcy51cGRhdGVBZ2dyZWdhdGlvbk1vZGVTZWxlY3Rvcl8oKTt0aGlzLmNoYW5nZUNoaWxkUGFuZV8oKTt9LHVwZGF0ZUxhYmVsXygpe1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkudGV4dENvbnRlbnQ9Jyc7aWYodGhpcy5jb250YWluZXJNZW1vcnlEdW1wc189PT11bmRlZmluZWR8fHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfLmxlbmd0aDw9MCl7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS50ZXh0Q29udGVudD0nTm8gbWVtb3J5IGR1bXBzIHNlbGVjdGVkJztyZXR1cm47fQpjb25zdCBjb250YWluZXJEdW1wQ291bnQ9dGhpcy5jb250YWluZXJNZW1vcnlEdW1wc18ubGVuZ3RoO2NvbnN0IGlzTXVsdGlTZWxlY3Rpb249Y29udGFpbmVyRHVtcENvdW50PjE7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnU2VsZWN0ZWQgJytjb250YWluZXJEdW1wQ291bnQrJyBtZW1vcnkgZHVtcCcrCihpc011bHRpU2VsZWN0aW9uPydzJzonJykrJyBpbiAnK3RoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfWzBdLmNvbnRhaW5lck5hbWUrJyBhdCAnKSk7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSh0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMuZm9ybWF0KHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfWzBdLnN0YXJ0KSkpO2lmKGlzTXVsdGlTZWxlY3Rpb24pe2NvbnN0IEVMTElQU0lTPVN0cmluZy5mcm9tQ2hhckNvZGUoODIzMCk7UG9seW1lci5kb20odGhpcy4kLmxhYmVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShFTExJUFNJUykpO1BvbHltZXIuZG9tKHRoaXMuJC5sYWJlbCkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUodHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLmZvcm1hdCh0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzX1tjb250YWluZXJEdW1wQ291bnQtMV0uc3RhcnQpKSk7fX0sdXBkYXRlQWdncmVnYXRpb25Nb2RlU2VsZWN0b3JfKCl7bGV0IGRpc3BsYXlTdHlsZTtpZih0aGlzLmNvbnRhaW5lck1lbW9yeUR1bXBzXz09PXVuZGVmaW5lZHx8dGhpcy5jb250YWluZXJNZW1vcnlEdW1wc18ubGVuZ3RoPD0xKXtkaXNwbGF5U3R5bGU9J25vbmUnO31lbHNle2Rpc3BsYXlTdHlsZT0naW5pdGlhbCc7fQp0aGlzLiQuYWdncmVnYXRpb25fbW9kZV9jb250YWluZXIuc3R5bGUuZGlzcGxheT1kaXNwbGF5U3R5bGU7fSxjaGFuZ2VDaGlsZFBhbmVfKCl7dGhpcy5jaGlsZFBhbmVCdWlsZGVyPWZ1bmN0aW9uKCl7aWYodGhpcy5jb250YWluZXJNZW1vcnlEdW1wc189PT11bmRlZmluZWR8fHRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfLmxlbmd0aDw9MCl7cmV0dXJuIHVuZGVmaW5lZDt9CmNvbnN0IG92ZXJ2aWV3UGFuZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLW1lbW9yeS1kdW1wLW92ZXJ2aWV3LXBhbmUnKTtvdmVydmlld1BhbmUucHJvY2Vzc01lbW9yeUR1bXBzPXRoaXMuY29udGFpbmVyTWVtb3J5RHVtcHNfLm1hcChmdW5jdGlvbihjb250YWluZXJEdW1wKXtyZXR1cm4gY29udGFpbmVyRHVtcC5wcm9jZXNzTWVtb3J5RHVtcHM7fSk7b3ZlcnZpZXdQYW5lLmFnZ3JlZ2F0aW9uTW9kZT10aGlzLmFnZ3JlZ2F0aW9uTW9kZTtyZXR1cm4gb3ZlcnZpZXdQYW5lO30uYmluZCh0aGlzKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXN0YWNrZWQtcGFuZS12aWV3JyxzZXRQYW5lQnVpbGRlcihwYW5lQnVpbGRlcixvcHRfcGFyZW50UGFuZSl7Y29uc3QgcGFuZUNvbnRhaW5lcj10aGlzLiQucGFuZV9jb250YWluZXI7aWYob3B0X3BhcmVudFBhbmUpe2lmKCEob3B0X3BhcmVudFBhbmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpe3Rocm93IG5ldyBFcnJvcignUGFyZW50IHBhbmUgbXVzdCBiZSBhbiBIVE1MIGVsZW1lbnQnKTt9CmlmKG9wdF9wYXJlbnRQYW5lLnBhcmVudEVsZW1lbnQhPT1wYW5lQ29udGFpbmVyKXt0aHJvdyBuZXcgRXJyb3IoJ1BhcmVudCBwYW5lIG11c3QgYmUgYSBjaGlsZCBvZiB0aGUgcGFuZSBjb250YWluZXInKTt9fQp3aGlsZShQb2x5bWVyLmRvbShwYW5lQ29udGFpbmVyKS5sYXN0RWxlbWVudENoaWxkIT09bnVsbCYmUG9seW1lci5kb20ocGFuZUNvbnRhaW5lcikubGFzdEVsZW1lbnRDaGlsZCE9PW9wdF9wYXJlbnRQYW5lKXtjb25zdCByZW1vdmVkUGFuZT1Qb2x5bWVyLmRvbSh0aGlzLiQucGFuZV9jb250YWluZXIpLmxhc3RFbGVtZW50Q2hpbGQ7Y29uc3QgbGlzdGVuZXI9dGhpcy5saXN0ZW5lcnNfLmdldChyZW1vdmVkUGFuZSk7aWYobGlzdGVuZXI9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTm8gbGlzdGVuZXIgYXNzb2NpYXRlZCB3aXRoIHBhbmUnKTt9CnRoaXMubGlzdGVuZXJzXy5kZWxldGUocmVtb3ZlZFBhbmUpO3JlbW92ZWRQYW5lLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ3JlcXVlc3QtY2hpbGQtcGFuZS1jaGFuZ2UnLGxpc3RlbmVyKTtQb2x5bWVyLmRvbShwYW5lQ29udGFpbmVyKS5yZW1vdmVDaGlsZChyZW1vdmVkUGFuZSk7fQppZihvcHRfcGFyZW50UGFuZSYmb3B0X3BhcmVudFBhbmUucGFyZW50RWxlbWVudCE9PXBhbmVDb250YWluZXIpe3Rocm93IG5ldyBFcnJvcignUGFyZW50IHBhbmUgd2FzIHJlbW92ZWQgZnJvbSB0aGUgcGFuZSBjb250YWluZXInKTt9CmlmKCFwYW5lQnVpbGRlcilyZXR1cm47Y29uc3QgcGFuZT1wYW5lQnVpbGRlcigpO2lmKCFwYW5lKXJldHVybjtpZighKHBhbmUgaW5zdGFuY2VvZiBIVE1MRWxlbWVudCkpe3Rocm93IG5ldyBFcnJvcignUGFuZSBtdXN0IGJlIGFuIEhUTUwgZWxlbWVudCcpO30KY29uc3QgbGlzdGVuZXI9ZnVuY3Rpb24oZXZlbnQpe3RoaXMuc2V0UGFuZUJ1aWxkZXIocGFuZS5jaGlsZFBhbmVCdWlsZGVyLHBhbmUpO30uYmluZCh0aGlzKTtpZighdGhpcy5saXN0ZW5lcnNfKXt0aGlzLmxpc3RlbmVyc189bmV3IFdlYWtNYXAoKTt9CnRoaXMubGlzdGVuZXJzXy5zZXQocGFuZSxsaXN0ZW5lcik7cGFuZS5hZGRFdmVudExpc3RlbmVyKCdyZXF1ZXN0LWNoaWxkLXBhbmUtY2hhbmdlJyxsaXN0ZW5lcik7UG9seW1lci5kb20ocGFuZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQocGFuZSk7cGFuZS5hcHBlbmRlZCgpO30scmVidWlsZCgpe2xldCBjdXJyZW50UGFuZT1Qb2x5bWVyLmRvbSh0aGlzLiQucGFuZV9jb250YWluZXIpLmZpcnN0RWxlbWVudENoaWxkO3doaWxlKGN1cnJlbnRQYW5lKXtjdXJyZW50UGFuZS5yZWJ1aWxkKCk7Y3VycmVudFBhbmU9Y3VycmVudFBhbmUubmV4dEVsZW1lbnRTaWJsaW5nO319LGdldCBwYW5lc0ZvclRlc3RpbmcoKXtjb25zdCBwYW5lcz1bXTtsZXQgY3VycmVudENoaWxkPVBvbHltZXIuZG9tKHRoaXMuJC5wYW5lX2NvbnRhaW5lcikuZmlyc3RFbGVtZW50Q2hpbGQ7d2hpbGUoY3VycmVudENoaWxkKXtwYW5lcy5wdXNoKGN1cnJlbnRDaGlsZCk7Y3VycmVudENoaWxkPWN1cnJlbnRDaGlsZC5uZXh0RWxlbWVudFNpYmxpbmc7fQpyZXR1cm4gcGFuZXM7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWEtY29udGFpbmVyLW1lbW9yeS1kdW1wLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2lmKHNlbGVjdGlvbj09PXVuZGVmaW5lZCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7dGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV89dW5kZWZpbmVkO3RoaXMudXBkYXRlQ29udGVudHNfKCk7cmV0dXJuO30Kc2VsZWN0aW9uLmZvckVhY2goZnVuY3Rpb24oZXZlbnQpe2lmKCEoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wKSl7dGhyb3cgbmV3IEVycm9yKCdNZW1vcnkgZHVtcCBzdWItdmlldyBvbmx5IHN1cHBvcnRzIGNvbnRhaW5lciBtZW1vcnkgZHVtcHMnKTt9fSk7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV89dHIuYi5ncm91cEludG9NYXAodGhpcy5jdXJyZW50U2VsZWN0aW9uXy50b0FycmF5KCksZHVtcD0+ZHVtcC5jb250YWluZXJOYW1lKTtmb3IoY29uc3QgZHVtcHMgb2YgdGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV8udmFsdWVzKCkpe2R1bXBzLnNvcnQoKGEsYik9PmEuc3RhcnQtYi5zdGFydCk7fQp0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gdHJ1ZTt9LHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS50ZXh0Q29udGVudD0nJztpZih0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgY29udGFpbmVyTmFtZXM9QXJyYXkuZnJvbSh0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXy5rZXlzKCkpO2lmKGNvbnRhaW5lck5hbWVzLmxlbmd0aD09PTApcmV0dXJuO2lmKGNvbnRhaW5lck5hbWVzLmxlbmd0aD4xKXt0aGlzLmJ1aWxkVmlld0Zvck11bHRpcGxlQ29udGFpbmVyTmFtZXNfKCk7fWVsc2V7dGhpcy5idWlsZFZpZXdGb3JTaW5nbGVDb250YWluZXJOYW1lXygpO319LGJ1aWxkVmlld0ZvclNpbmdsZUNvbnRhaW5lck5hbWVfKCl7Y29uc3QgY29udGFpbmVyTWVtb3J5RHVtcHM9dHIuYi5nZXRGaXJzdEVsZW1lbnQodGhpcy5kdW1wc0J5Q29udGFpbmVyTmFtZV8udmFsdWVzKCkpO2NvbnN0IGR1bXBWaWV3PXVud3JhcCh0aGlzLm93bmVyRG9jdW1lbnQpLmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtc3RhY2tlZC1wYW5lLXZpZXcnKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQoZHVtcFZpZXcpO2R1bXBWaWV3LnNldFBhbmVCdWlsZGVyKGZ1bmN0aW9uKCl7Y29uc3QgaGVhZGVyUGFuZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLW1lbW9yeS1kdW1wLWhlYWRlci1wYW5lJyk7aGVhZGVyUGFuZS5jb250YWluZXJNZW1vcnlEdW1wcz1jb250YWluZXJNZW1vcnlEdW1wcztyZXR1cm4gaGVhZGVyUGFuZTt9KTt9LGJ1aWxkVmlld0Zvck11bHRpcGxlQ29udGFpbmVyTmFtZXNfKCl7Y29uc3Qgb3duZXJEb2N1bWVudD10aGlzLm93bmVyRG9jdW1lbnQ7Y29uc3Qgcm93cz1bXTtmb3IoY29uc3RbY29udGFpbmVyTmFtZSxkdW1wc11vZiB0aGlzLmR1bXBzQnlDb250YWluZXJOYW1lXyl7cm93cy5wdXNoKHtjb250YWluZXJOYW1lLHN1YlJvd3M6ZHVtcHMsaXNFeHBhbmRlZDp0cnVlLH0pO30Kcm93cy5zb3J0KGZ1bmN0aW9uKGEsYil7cmV0dXJuIGEuY29udGFpbmVyTmFtZS5sb2NhbGVDb21wYXJlKGIuY29udGFpbmVyTmFtZSk7fSk7Y29uc3QgY29sdW1ucz1be3RpdGxlOidEdW1wJyx2YWx1ZShyb3cpe2lmKHJvdy5zdWJSb3dzPT09dW5kZWZpbmVkKXtyZXR1cm4gdGhpcy5zaW5nbGVEdW1wVmFsdWVfKHJvdyk7fQpyZXR1cm4gdGhpcy5ncm91cGVkRHVtcFZhbHVlXyhyb3cpO30sc2luZ2xlRHVtcFZhbHVlXyhyb3cpe2NvbnN0IGxpbmtFbD11bndyYXAob3duZXJEb2N1bWVudCkuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQobmV3IHRyLm1vZGVsLkV2ZW50U2V0KFtyb3ddKSk7UG9seW1lci5kb20obGlua0VsKS5hcHBlbmRDaGlsZCh0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LnN0YXJ0LHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyxvd25lckRvY3VtZW50fSkpO3JldHVybiBsaW5rRWw7fSxncm91cGVkRHVtcFZhbHVlXyhyb3cpe2NvbnN0IGxpbmtFbD11bndyYXAob3duZXJEb2N1bWVudCkuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQobmV3IHRyLm1vZGVsLkV2ZW50U2V0KHJvdy5zdWJSb3dzKSk7UG9seW1lci5kb20obGlua0VsKS5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZVNwYW4oe293bmVyRG9jdW1lbnQsdGV4dENvbnRlbnQ6cm93LnN1YlJvd3MubGVuZ3RoKycgbWVtb3J5IGR1bXAnKwoocm93LnN1YlJvd3MubGVuZ3RoPT09MT8nJzoncycpKycgaW4gJ30pKTtQb2x5bWVyLmRvbShsaW5rRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU3Bhbih7b3duZXJEb2N1bWVudCx0ZXh0Q29udGVudDpyb3cuY29udGFpbmVyTmFtZSxib2xkOnRydWV9KSk7cmV0dXJuIGxpbmtFbDt9fV07Y29uc3QgdGFibGU9dW53cmFwKHRoaXMub3duZXJEb2N1bWVudCkuY3JlYXRlRWxlbWVudCgndHItdWktYi10YWJsZScpO3RhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RhYmxlLnRhYmxlUm93cz1yb3dzO3RhYmxlLnNob3dIZWFkZXI9ZmFsc2U7dGFibGUucmVidWlsZCgpO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5hcHBlbmRDaGlsZCh0YWJsZSk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1jb250YWluZXItbWVtb3J5LWR1bXAtc3ViLXZpZXcnLHRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXAse211bHRpOmZhbHNlLHRpdGxlOidHbG9iYWwgTWVtb3J5IER1bXAnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1jb250YWluZXItbWVtb3J5LWR1bXAtc3ViLXZpZXcnLHRyLm1vZGVsLkdsb2JhbE1lbW9yeUR1bXAse211bHRpOnRydWUsdGl0bGU6J0dsb2JhbCBNZW1vcnkgRHVtcHMnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1jb250YWluZXItbWVtb3J5LWR1bXAtc3ViLXZpZXcnLHRyLm1vZGVsLlByb2Nlc3NNZW1vcnlEdW1wLHttdWx0aTpmYWxzZSx0aXRsZTonUHJvY2VzcyBNZW1vcnkgRHVtcCcsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWNvbnRhaW5lci1tZW1vcnktZHVtcC1zdWItdmlldycsdHIubW9kZWwuUHJvY2Vzc01lbW9yeUR1bXAse211bHRpOnRydWUsdGl0bGU6J1Byb2Nlc3MgTWVtb3J5IER1bXBzJyx9KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7KGZ1bmN0aW9uKCl7Y29uc3QgQ09VTlRFUl9TQU1QTEVfVEFCTEVfQ09MVU1OUz1be3RpdGxlOidDb3VudGVyJyx3aWR0aDonMTUwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5jb3VudGVyO319LHt0aXRsZTonU2VyaWVzJyx3aWR0aDonMTUwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5zZXJpZXM7fX0se3RpdGxlOidUaW1lJyx3aWR0aDonMTUwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5zdGFydDt9fSx7dGl0bGU6J1ZhbHVlJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtyZXR1cm4gcm93LnZhbHVlO319XTtQb2x5bWVyKHtpczondHItdWktYS1jb3VudGVyLXNhbXBsZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLHJlYWR5KCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1DT1VOVEVSX1NBTVBMRV9UQUJMRV9DT0xVTU5TO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMuc2VsZWN0aW9uP3RoaXMuZ2V0Um93c18odGhpcy5zZWxlY3Rpb24udG9BcnJheSgpKTpbXTt0aGlzLiQudGFibGUucmVidWlsZCgpO30sZ2V0Um93c18oc2FtcGxlcyl7Y29uc3Qgc2FtcGxlc0J5Q291bnRlcj10ci5iLmdyb3VwSW50b01hcChzYW1wbGVzLHNhbXBsZT0+c2FtcGxlLnNlcmllcy5jb3VudGVyLmd1aWQpO2NvbnN0IHJvd3M9W107Zm9yKGNvbnN0IGNvdW50ZXJTYW1wbGVzIG9mIHNhbXBsZXNCeUNvdW50ZXIudmFsdWVzKCkpe2NvbnN0IHNhbXBsZXNCeVNlcmllcz10ci5iLmdyb3VwSW50b01hcChjb3VudGVyU2FtcGxlcyxzYW1wbGU9PnNhbXBsZS5zZXJpZXMuZ3VpZCk7Zm9yKGNvbnN0IHNlcmllc1NhbXBsZXMgb2Ygc2FtcGxlc0J5U2VyaWVzLnZhbHVlcygpKXtjb25zdCBzZXJpZXNSb3dzPXRoaXMuZ2V0Um93c0ZvclNhbXBsZXNfKHNlcmllc1NhbXBsZXMpO3Nlcmllc1Jvd3NbMF0uY291bnRlcj1zZXJpZXNTYW1wbGVzWzBdLnNlcmllcy5jb3VudGVyLm5hbWU7c2VyaWVzUm93c1swXS5zZXJpZXM9c2VyaWVzU2FtcGxlc1swXS5zZXJpZXMubmFtZTtpZihzZXJpZXNSb3dzLmxlbmd0aD4xKXtzZXJpZXNSb3dzWzBdLnN1YlJvd3M9c2VyaWVzUm93cy5zbGljZSgxKTtzZXJpZXNSb3dzWzBdLmlzRXhwYW5kZWQ9dHJ1ZTt9CnJvd3MucHVzaChzZXJpZXNSb3dzWzBdKTt9fQpyZXR1cm4gcm93czt9LGdldFJvd3NGb3JTYW1wbGVzXyhzYW1wbGVzKXtyZXR1cm4gc2FtcGxlcy5tYXAoZnVuY3Rpb24oc2FtcGxlKXtyZXR1cm57c3RhcnQ6c2FtcGxlLnRpbWVzdGFtcCx2YWx1ZTpzYW1wbGUudmFsdWV9O30pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtY291bnRlci1zYW1wbGUtc3ViLXZpZXcnLHRyLm1vZGVsLkNvdW50ZXJTYW1wbGUse211bHRpOmZhbHNlLHRpdGxlOidDb3VudGVyIFNhbXBsZScsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLWNvdW50ZXItc2FtcGxlLXN1Yi12aWV3Jyx0ci5tb2RlbC5Db3VudGVyU2FtcGxlLHttdWx0aTp0cnVlLHRpdGxlOidDb3VudGVyIFNhbXBsZXMnLH0pO30pKCk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBNdWx0aUV2ZW50U3VtbWFyeSh0aXRsZSxldmVudHMpe3RoaXMudGl0bGU9dGl0bGU7dGhpcy5kdXJhdGlvbl89dW5kZWZpbmVkO3RoaXMuc2VsZlRpbWVfPXVuZGVmaW5lZDt0aGlzLmV2ZW50c189ZXZlbnRzO3RoaXMuY3B1VGltZXNDb21wdXRlZF89ZmFsc2U7dGhpcy5jcHVTZWxmVGltZV89dW5kZWZpbmVkO3RoaXMuY3B1RHVyYXRpb25fPXVuZGVmaW5lZDt0aGlzLm1heER1cmF0aW9uXz11bmRlZmluZWQ7dGhpcy5tYXhDcHVEdXJhdGlvbl89dW5kZWZpbmVkO3RoaXMubWF4U2VsZlRpbWVfPXVuZGVmaW5lZDt0aGlzLm1heENwdVNlbGZUaW1lXz11bmRlZmluZWQ7dGhpcy51bnRvdGFsbGFibGVBcmdzXz1bXTt0aGlzLnRvdGFsbGVkQXJnc189dW5kZWZpbmVkO30KTXVsdGlFdmVudFN1bW1hcnkucHJvdG90eXBlPXtzZXQgdGl0bGUodGl0bGUpe2lmKHRpdGxlPT09J1RvdGFscycpe3RoaXMudG90YWxzUm93PXRydWU7fQp0aGlzLnRpdGxlXz10aXRsZTt9LGdldCB0aXRsZSgpe3JldHVybiB0aGlzLnRpdGxlXzt9LGdldCBkdXJhdGlvbigpe2lmKHRoaXMuZHVyYXRpb25fPT09dW5kZWZpbmVkKXt0aGlzLmR1cmF0aW9uXz10ci5iLm1hdGguU3RhdGlzdGljcy5zdW0odGhpcy5ldmVudHNfLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQuZHVyYXRpb247fSk7fQpyZXR1cm4gdGhpcy5kdXJhdGlvbl87fSxnZXQgY3B1U2VsZlRpbWUoKXt0aGlzLmNvbXB1dGVDcHVUaW1lc0lmTmVlZGVkXygpO3JldHVybiB0aGlzLmNwdVNlbGZUaW1lXzt9LGdldCBjcHVEdXJhdGlvbigpe3RoaXMuY29tcHV0ZUNwdVRpbWVzSWZOZWVkZWRfKCk7cmV0dXJuIHRoaXMuY3B1RHVyYXRpb25fO30sY29tcHV0ZUNwdVRpbWVzSWZOZWVkZWRfKCl7aWYodGhpcy5jcHVUaW1lc0NvbXB1dGVkXylyZXR1cm47dGhpcy5jcHVUaW1lc0NvbXB1dGVkXz10cnVlO2xldCBjcHVTZWxmVGltZT0wO2xldCBjcHVEdXJhdGlvbj0wO2xldCBoYXNDcHVEYXRhPWZhbHNlO2Zvcihjb25zdCBldmVudCBvZiB0aGlzLmV2ZW50c18pe2lmKGV2ZW50LmNwdUR1cmF0aW9uIT09dW5kZWZpbmVkKXtjcHVEdXJhdGlvbis9ZXZlbnQuY3B1RHVyYXRpb247aGFzQ3B1RGF0YT10cnVlO30KaWYoZXZlbnQuY3B1U2VsZlRpbWUhPT11bmRlZmluZWQpe2NwdVNlbGZUaW1lKz1ldmVudC5jcHVTZWxmVGltZTtoYXNDcHVEYXRhPXRydWU7fX0KaWYoaGFzQ3B1RGF0YSl7dGhpcy5jcHVEdXJhdGlvbl89Y3B1RHVyYXRpb247dGhpcy5jcHVTZWxmVGltZV89Y3B1U2VsZlRpbWU7fX0sZ2V0IHNlbGZUaW1lKCl7aWYodGhpcy5zZWxmVGltZV89PT11bmRlZmluZWQpe3RoaXMuc2VsZlRpbWVfPTA7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMuZXZlbnRzXyl7aWYoZXZlbnQuc2VsZlRpbWUhPT11bmRlZmluZWQpe3RoaXMuc2VsZlRpbWVfKz1ldmVudC5zZWxmVGltZTt9fX0KcmV0dXJuIHRoaXMuc2VsZlRpbWVfO30sZ2V0IGV2ZW50cygpe3JldHVybiB0aGlzLmV2ZW50c187fSxnZXQgbnVtRXZlbnRzKCl7cmV0dXJuIHRoaXMuZXZlbnRzXy5sZW5ndGg7fSxnZXQgbnVtQWxlcnRzKCl7aWYodGhpcy5udW1BbGVydHNfPT09dW5kZWZpbmVkKXt0aGlzLm51bUFsZXJ0c189dHIuYi5tYXRoLlN0YXRpc3RpY3Muc3VtKHRoaXMuZXZlbnRzXyxldmVudD0+ZXZlbnQuYXNzb2NpYXRlZEFsZXJ0cy5sZW5ndGgpO30KcmV0dXJuIHRoaXMubnVtQWxlcnRzXzt9LGdldCB1bnRvdGFsbGFibGVBcmdzKCl7dGhpcy51cGRhdGVBcmdzSWZOZWVkZWRfKCk7cmV0dXJuIHRoaXMudW50b3RhbGxhYmxlQXJnc187fSxnZXQgdG90YWxsZWRBcmdzKCl7dGhpcy51cGRhdGVBcmdzSWZOZWVkZWRfKCk7cmV0dXJuIHRoaXMudG90YWxsZWRBcmdzXzt9LGdldCBtYXhEdXJhdGlvbigpe2lmKHRoaXMubWF4RHVyYXRpb25fPT09dW5kZWZpbmVkKXt0aGlzLm1heER1cmF0aW9uXz10ci5iLm1hdGguU3RhdGlzdGljcy5tYXgodGhpcy5ldmVudHNfLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQuZHVyYXRpb247fSk7fQpyZXR1cm4gdGhpcy5tYXhEdXJhdGlvbl87fSxnZXQgbWF4Q3B1RHVyYXRpb24oKXtpZih0aGlzLm1heENwdUR1cmF0aW9uXz09PXVuZGVmaW5lZCl7dGhpcy5tYXhDcHVEdXJhdGlvbl89dHIuYi5tYXRoLlN0YXRpc3RpY3MubWF4KHRoaXMuZXZlbnRzXyxmdW5jdGlvbihldmVudCl7cmV0dXJuIGV2ZW50LmNwdUR1cmF0aW9uO30pO30KcmV0dXJuIHRoaXMubWF4Q3B1RHVyYXRpb25fO30sZ2V0IG1heFNlbGZUaW1lKCl7aWYodGhpcy5tYXhTZWxmVGltZV89PT11bmRlZmluZWQpe3RoaXMubWF4U2VsZlRpbWVfPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1heCh0aGlzLmV2ZW50c18sZnVuY3Rpb24oZXZlbnQpe3JldHVybiBldmVudC5zZWxmVGltZTt9KTt9CnJldHVybiB0aGlzLm1heFNlbGZUaW1lXzt9LGdldCBtYXhDcHVTZWxmVGltZSgpe2lmKHRoaXMubWF4Q3B1U2VsZlRpbWVfPT09dW5kZWZpbmVkKXt0aGlzLm1heENwdVNlbGZUaW1lXz10ci5iLm1hdGguU3RhdGlzdGljcy5tYXgodGhpcy5ldmVudHNfLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnQuY3B1U2VsZlRpbWU7fSk7fQpyZXR1cm4gdGhpcy5tYXhDcHVTZWxmVGltZV87fSx1cGRhdGVBcmdzSWZOZWVkZWRfKCl7aWYodGhpcy50b3RhbGxlZEFyZ3NfIT09dW5kZWZpbmVkKXJldHVybjtjb25zdCB1bnRvdGFsbGFibGVBcmdzPXt9O2NvbnN0IHRvdGFsbGVkQXJncz17fTtmb3IoY29uc3QgZXZlbnQgb2YgdGhpcy5ldmVudHNfKXtmb3IoY29uc3QgYXJnTmFtZSBpbiBldmVudC5hcmdzKXtjb25zdCBhcmdWYWw9ZXZlbnQuYXJnc1thcmdOYW1lXTtjb25zdCB0eXBlPXR5cGVvZiBhcmdWYWw7aWYodHlwZSE9PSdudW1iZXInKXt1bnRvdGFsbGFibGVBcmdzW2FyZ05hbWVdPXRydWU7ZGVsZXRlIHRvdGFsbGVkQXJnc1thcmdOYW1lXTtjb250aW51ZTt9CmlmKHVudG90YWxsYWJsZUFyZ3NbYXJnTmFtZV0pe2NvbnRpbnVlO30KaWYodG90YWxsZWRBcmdzW2FyZ05hbWVdPT09dW5kZWZpbmVkKXt0b3RhbGxlZEFyZ3NbYXJnTmFtZV09MDt9CnRvdGFsbGVkQXJnc1thcmdOYW1lXSs9YXJnVmFsO319CnRoaXMudW50b3RhbGxhYmxlQXJnc189T2JqZWN0LmtleXModW50b3RhbGxhYmxlQXJncyk7dGhpcy50b3RhbGxlZEFyZ3NfPXRvdGFsbGVkQXJnczt9fTtyZXR1cm57TXVsdGlFdmVudFN1bW1hcnksfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktZXZlbnQtc3VtbWFyeS10YWJsZScscmVhZHkoKXt0aGlzLnNob3dUb3RhbHNfPWZhbHNlO3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz10cnVlO3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPXRydWU7dGhpcy5ldmVudHNCeVRpdGxlXz11bmRlZmluZWQ7fSx1cGRhdGVUYWJsZUNvbHVtbnNfKHJvd3MsbWF4VmFsdWVzKXtsZXQgaGFzQ3B1RGF0YT1mYWxzZTtsZXQgaGFzQWxlcnRzPWZhbHNlO3Jvd3MuZm9yRWFjaChmdW5jdGlvbihyb3cpe2lmKHJvdy5jcHVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7aGFzQ3B1RGF0YT10cnVlO30KaWYocm93LmNwdVNlbGZUaW1lIT09dW5kZWZpbmVkKXtoYXNDcHVEYXRhPXRydWU7fQppZihyb3cubnVtQWxlcnRzKXtoYXNBbGVydHM9dHJ1ZTt9fSk7Y29uc3Qgb3duZXJEb2N1bWVudD10aGlzLm93bmVyRG9jdW1lbnQ7Y29uc3QgY29sdW1ucz1bXTtjb2x1bW5zLnB1c2goe3RpdGxlOidOYW1lJyx2YWx1ZShyb3cpe2lmKHJvdy50aXRsZT09PSdUb3RhbHMnKXJldHVybidUb3RhbHMnO2NvbnN0IGNvbnRhaW5lcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGlua0VsLnNldFNlbGVjdGlvbkFuZENvbnRlbnQoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHRyLm1vZGVsLkV2ZW50U2V0KHJvdy5ldmVudHMpO30scm93LnRpdGxlKTtjb250YWluZXIuYXBwZW5kQ2hpbGQobGlua0VsKTtpZih0ci5pc0V4cG9ydGVkKCd0ci11aS1lLWNocm9tZS1jb2Rlc2VhcmNoJykpe2NvbnN0IGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktZS1jaHJvbWUtY29kZXNlYXJjaCcpO2xpbmsuc2VhcmNoUGhyYXNlPXJvdy50aXRsZTtjb250YWluZXIuYXBwZW5kQ2hpbGQobGluayk7fQpyZXR1cm4gY29udGFpbmVyO30sd2lkdGg6JzM1MHB4JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS50aXRsZS5sb2NhbGVDb21wYXJlKHJvd0IudGl0bGUpO319KTtpZih0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl8pe2NvbHVtbnMucHVzaCh7dGl0bGU6J1dhbGwgRHVyYXRpb24nLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuZHVyYXRpb24se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLGN1c3RvbUNvbnRleHRSYW5nZTpyb3cudG90YWxzUm93P3VuZGVmaW5lZDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxtYXhWYWx1ZXMuZHVyYXRpb24pLG93bmVyRG9jdW1lbnQsfSk7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5kdXJhdGlvbi1yb3dCLmR1cmF0aW9uO319KTt9CmlmKHRoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXyYmaGFzQ3B1RGF0YSl7Y29sdW1ucy5wdXNoKHt0aXRsZTonQ1BVIER1cmF0aW9uJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LmNwdUR1cmF0aW9uLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxjdXN0b21Db250ZXh0UmFuZ2U6cm93LnRvdGFsc1Jvdz91bmRlZmluZWQ6dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKDAsbWF4VmFsdWVzLmNwdUR1cmF0aW9uKSxvd25lckRvY3VtZW50LH0pO30sd2lkdGg6Jzx1cGF0ZWQgZnVydGhlciBkb3duPicsY21wKHJvd0Escm93Qil7cmV0dXJuIHJvd0EuY3B1RHVyYXRpb24tcm93Qi5jcHVEdXJhdGlvbjt9fSk7fQppZih0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXyYmdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fKXtjb2x1bW5zLnB1c2goe3RpdGxlOidTZWxmIHRpbWUnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuc2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLGN1c3RvbUNvbnRleHRSYW5nZTpyb3cudG90YWxzUm93P3VuZGVmaW5lZDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxtYXhWYWx1ZXMuc2VsZlRpbWUpLG93bmVyRG9jdW1lbnQsfSk7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5zZWxmVGltZS1yb3dCLnNlbGZUaW1lO319KTt9CmlmKHRoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfJiZ0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl8mJmhhc0NwdURhdGEpe2NvbHVtbnMucHVzaCh7dGl0bGU6J0NQVSBTZWxmIFRpbWUnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cuY3B1U2VsZlRpbWUse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLGN1c3RvbUNvbnRleHRSYW5nZTpyb3cudG90YWxzUm93P3VuZGVmaW5lZDp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCxtYXhWYWx1ZXMuY3B1U2VsZlRpbWUpLG93bmVyRG9jdW1lbnQsfSk7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5jcHVTZWxmVGltZS1yb3dCLmNwdVNlbGZUaW1lO319KTt9CmlmKHRoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXyl7Y29sdW1ucy5wdXNoKHt0aXRsZTonQXZlcmFnZSAnKyhoYXNDcHVEYXRhPydDUFUnOidXYWxsJykrJyBEdXJhdGlvbicsdmFsdWUocm93KXtjb25zdCB0b3RhbER1cmF0aW9uPWhhc0NwdURhdGE/cm93LmNwdUR1cmF0aW9uOnJvdy5kdXJhdGlvbjtyZXR1cm4gdHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHRvdGFsRHVyYXRpb24vcm93Lm51bUV2ZW50cyx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXMsY3VzdG9tQ29udGV4dFJhbmdlOnJvdy50b3RhbHNSb3c/dW5kZWZpbmVkOnRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLG1heFZhbHVlcy5kdXJhdGlvbiksb3duZXJEb2N1bWVudCx9KTt9LHdpZHRoOic8dXBhdGVkIGZ1cnRoZXIgZG93bj4nLGNtcChyb3dBLHJvd0Ipe2lmKGhhc0NwdURhdGEpe3JldHVybiByb3dBLmNwdUR1cmF0aW9uL3Jvd0EubnVtRXZlbnRzLQpyb3dCLmNwdUR1cmF0aW9uL3Jvd0IubnVtRXZlbnRzO30KcmV0dXJuIHJvd0EuZHVyYXRpb24vcm93QS5udW1FdmVudHMtCnJvd0IuZHVyYXRpb24vcm93Qi5udW1FdmVudHM7fX0pO30KY29sdW1ucy5wdXNoKHt0aXRsZTonT2NjdXJyZW5jZXMnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1FdmVudHM7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5udW1FdmVudHMtcm93Qi5udW1FdmVudHM7fX0pO2xldCBhbGVydHNDb2x1bW5JbmRleDtpZihoYXNBbGVydHMpe2NvbHVtbnMucHVzaCh7dGl0bGU6J051bSBBbGVydHMnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5udW1BbGVydHM7fSx3aWR0aDonPHVwYXRlZCBmdXJ0aGVyIGRvd24+JyxjbXAocm93QSxyb3dCKXtyZXR1cm4gcm93QS5udW1BbGVydHMtcm93Qi5udW1BbGVydHM7fX0pO2FsZXJ0c0NvbHVtbkluZGV4PWNvbHVtbnMubGVuZ3RoLTE7fQpsZXQgY29sV2lkdGhQZXJjZW50YWdlO2lmKGNvbHVtbnMubGVuZ3RoPT09MSl7Y29sV2lkdGhQZXJjZW50YWdlPScxMDAlJzt9ZWxzZXtjb2xXaWR0aFBlcmNlbnRhZ2U9KDEwMC8oY29sdW1ucy5sZW5ndGgtMSkpLnRvRml4ZWQoMykrJyUnO30KZm9yKGxldCBpPTE7aTxjb2x1bW5zLmxlbmd0aDtpKyspe2NvbHVtbnNbaV0ud2lkdGg9Y29sV2lkdGhQZXJjZW50YWdlO30KdGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO2lmKGhhc0FsZXJ0cyl7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD1hbGVydHNDb2x1bW5JbmRleDt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dHJ1ZTt9fSxjb25maWd1cmUoY29uZmlnKXtpZihjb25maWcuZXZlbnRzQnlUaXRsZT09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdSZXF1aXJlZDogZXZlbnRzQnlUaXRsZScpO30KaWYoY29uZmlnLnNob3dUb3RhbHMhPT11bmRlZmluZWQpe3RoaXMuc2hvd1RvdGFsc189Y29uZmlnLnNob3dUb3RhbHM7fWVsc2V7dGhpcy5zaG93VG90YWxzXz10cnVlO30KaWYoY29uZmlnLmV2ZW50c0hhdmVEdXJhdGlvbiE9PXVuZGVmaW5lZCl7dGhpcy5ldmVudHNIYXZlRHVyYXRpb25fPWNvbmZpZy5ldmVudHNIYXZlRHVyYXRpb247fWVsc2V7dGhpcy5ldmVudHNIYXZlRHVyYXRpb25fPXRydWU7fQppZihjb25maWcuZXZlbnRzSGF2ZVN1YlJvd3MhPT11bmRlZmluZWQpe3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPWNvbmZpZy5ldmVudHNIYXZlU3ViUm93czt9ZWxzZXt0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXz10cnVlO30KdGhpcy5ldmVudHNCeVRpdGxlXz1jb25maWcuZXZlbnRzQnlUaXRsZTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNob3dUb3RhbHMoKXtyZXR1cm4gdGhpcy5zaG93VG90YWxzXzt9LHNldCBzaG93VG90YWxzKHNob3dUb3RhbHMpe3RoaXMuc2hvd1RvdGFsc189c2hvd1RvdGFsczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGV2ZW50c0hhdmVEdXJhdGlvbigpe3JldHVybiB0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl87fSxzZXQgZXZlbnRzSGF2ZUR1cmF0aW9uKGV2ZW50c0hhdmVEdXJhdGlvbil7dGhpcy5ldmVudHNIYXZlRHVyYXRpb25fPWV2ZW50c0hhdmVEdXJhdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGV2ZW50c0hhdmVTdWJSb3dzKCl7cmV0dXJuIHRoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfO30sc2V0IGV2ZW50c0hhdmVTdWJSb3dzKGV2ZW50c0hhdmVTdWJSb3dzKXt0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXz1ldmVudHNIYXZlU3ViUm93czt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGV2ZW50c0J5VGl0bGUoKXtyZXR1cm4gdGhpcy5ldmVudHNCeVRpdGxlXzt9LHNldCBldmVudHNCeVRpdGxlKGV2ZW50c0J5VGl0bGUpe3RoaXMuZXZlbnRzQnlUaXRsZV89ZXZlbnRzQnlUaXRsZTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHNlbGVjdGlvbkJvdW5kcygpe3JldHVybiB0aGlzLnNlbGVjdGlvbkJvdW5kc187fSxzZXQgc2VsZWN0aW9uQm91bmRzKHNlbGVjdGlvbkJvdW5kcyl7dGhpcy5zZWxlY3Rpb25Cb3VuZHNfPXNlbGVjdGlvbkJvdW5kczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7bGV0IGV2ZW50c0J5VGl0bGU7aWYodGhpcy5ldmVudHNCeVRpdGxlXyE9PXVuZGVmaW5lZCl7ZXZlbnRzQnlUaXRsZT10aGlzLmV2ZW50c0J5VGl0bGVfO31lbHNle2V2ZW50c0J5VGl0bGU9W107fQpjb25zdCBhbGxFdmVudHM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Y29uc3Qgcm93cz1bXTtmb3IoY29uc3RbdGl0bGUsZXZlbnRzT2ZTaW5nbGVUaXRsZV1vZiBPYmplY3QuZW50cmllcyhldmVudHNCeVRpdGxlKSl7Zm9yKGNvbnN0IGV2ZW50IG9mIGV2ZW50c09mU2luZ2xlVGl0bGUpYWxsRXZlbnRzLnB1c2goZXZlbnQpO2NvbnN0IHJvdz1uZXcgdHIudWkuYW5hbHlzaXMuTXVsdGlFdmVudFN1bW1hcnkodGl0bGUsZXZlbnRzT2ZTaW5nbGVUaXRsZSk7cm93cy5wdXNoKHJvdyk7fQp0aGlzLnVwZGF0ZVRhYmxlQ29sdW1uc18ocm93cyk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO2NvbnN0IG1heFZhbHVlcz17ZHVyYXRpb246dW5kZWZpbmVkLHNlbGZUaW1lOnVuZGVmaW5lZCxjcHVTZWxmVGltZTp1bmRlZmluZWQsY3B1RHVyYXRpb246dW5kZWZpbmVkfTtpZih0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbil7Zm9yKGNvbnN0IGNvbHVtbiBpbiBtYXhWYWx1ZXMpe21heFZhbHVlc1tjb2x1bW5dPXRyLmIubWF0aC5TdGF0aXN0aWNzLm1heChyb3dzLGZ1bmN0aW9uKGV2ZW50KXtyZXR1cm4gZXZlbnRbY29sdW1uXTt9KTt9fQpjb25zdCBmb290ZXJSb3dzPVtdO2lmKHRoaXMuc2hvd1RvdGFsc18pe2NvbnN0IG11bHRpRXZlbnRTdW1tYXJ5PW5ldyB0ci51aS5hbmFseXNpcy5NdWx0aUV2ZW50U3VtbWFyeSgnVG90YWxzJyxhbGxFdmVudHMpO2Zvb3RlclJvd3MucHVzaChtdWx0aUV2ZW50U3VtbWFyeSk7fQp0aGlzLnVwZGF0ZVRhYmxlQ29sdW1uc18ocm93cyxtYXhWYWx1ZXMpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9cm93czt0aGlzLiQudGFibGUuZm9vdGVyUm93cz1mb290ZXJSb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zZWxlY3Rpb24tc3VtbWFyeS10YWJsZScsY3JlYXRlZCgpe3RoaXMuc2VsZWN0aW9uXz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7fSxyZWFkeSgpe3RoaXMuJC50YWJsZS5zaG93SGVhZGVyPWZhbHNlO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonTmFtZScsdmFsdWUocm93KXtyZXR1cm4gcm93LnRpdGxlO30sd2lkdGg6JzM1MHB4J30se3RpdGxlOidWYWx1ZScsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy52YWx1ZTt9fV07fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCBzZWxlY3Rpb249dGhpcy5zZWxlY3Rpb25fO2NvbnN0IHJvd3M9W107bGV0IGhhc1JhbmdlO2lmKHRoaXMuc2VsZWN0aW9uXyYmKCFzZWxlY3Rpb24uYm91bmRzLmlzRW1wdHkpKXtoYXNSYW5nZT10cnVlO31lbHNle2hhc1JhbmdlPWZhbHNlO30Kcm93cy5wdXNoKHt0aXRsZTonU2VsZWN0aW9uIHN0YXJ0Jyx2YWx1ZTpoYXNSYW5nZT90ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4oc2VsZWN0aW9uLmJvdW5kcy5taW4se3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fSk6JzxlbXB0eT4nfSk7cm93cy5wdXNoKHt0aXRsZTonU2VsZWN0aW9uIGV4dGVudCcsdmFsdWU6aGFzUmFuZ2U/dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHNlbGVjdGlvbi5ib3VuZHMucmFuZ2Use3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fSk6JzxlbXB0eT4nfSk7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi1yYWRpby1waWNrZXInLGNyZWF0ZWQoKXt0aGlzLm5lZWRzSW5pdF89dHJ1ZTt0aGlzLnNldHRpbmdzS2V5Xz11bmRlZmluZWQ7dGhpcy5pc1JlYWR5Xz1mYWxzZTt0aGlzLnJhZGlvQnV0dG9uc189dW5kZWZpbmVkO3RoaXMuc2VsZWN0ZWRLZXlfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy5pc1JlYWR5Xz10cnVlO3RoaXMubWF5YmVJbml0XygpO3RoaXMubWF5YmVSZW5kZXJSYWRpb0J1dHRvbnNfKCk7fSxnZXQgdmVydGljYWwoKXtyZXR1cm4gdGhpcy5nZXRBdHRyaWJ1dGUoJ3ZlcnRpY2FsJyk7fSxzZXQgdmVydGljYWwodmVydGljYWwpe2lmKHZlcnRpY2FsKXt0aGlzLnNldEF0dHJpYnV0ZSgndmVydGljYWwnLHRydWUpO31lbHNle3RoaXMucmVtb3ZlQXR0cmlidXRlKCd2ZXJ0aWNhbCcpO319LGdldCBzZXR0aW5nc0tleSgpe3JldHVybiB0aGlzLnNldHRpbmdzS2V5Xzt9LHNldCBzZXR0aW5nc0tleShzZXR0aW5nc0tleSl7aWYoIXRoaXMubmVlZHNJbml0Xyl7dGhyb3cgbmV3IEVycm9yKCdBbHJlYWR5IGluaXRpYWxpemVkLicpO30KdGhpcy5zZXR0aW5nc0tleV89c2V0dGluZ3NLZXk7dGhpcy5tYXliZUluaXRfKCk7fSxtYXliZUluaXRfKCl7aWYoIXRoaXMubmVlZHNJbml0XylyZXR1cm47aWYodGhpcy5zZXR0aW5nc0tleV89PT11bmRlZmluZWQpcmV0dXJuO3RoaXMubmVlZHNJbml0Xz1mYWxzZTt0aGlzLnNlbGVjdCh0ci5iLlNldHRpbmdzLmdldCh0aGlzLnNldHRpbmdzS2V5XykpO30sc2V0IGl0ZW1zKGl0ZW1zKXt0aGlzLnJhZGlvQnV0dG9uc189e307aXRlbXMuZm9yRWFjaChmdW5jdGlvbihlKXtpZihlLmtleSBpbiB0aGlzLnJhZGlvQnV0dG9uc18pe3Rocm93IG5ldyBFcnJvcihlLmtleSsnIGFscmVhZHkgZXhpc3RzJyk7fQpjb25zdCByYWRpb0J1dHRvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtjb25zdCBpbnB1dD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdpbnB1dCcpO2NvbnN0IGxhYmVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xhYmVsJyk7aW5wdXQudHlwZT0ncmFkaW8nO2lucHV0LmlkPWUubGFiZWw7aW5wdXQuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLGZ1bmN0aW9uKCl7dGhpcy5zZWxlY3QoZS5rZXkpO30uYmluZCh0aGlzKSk7UG9seW1lci5kb20obGFiZWwpLmlubmVySFRNTD1lLmxhYmVsO2xhYmVsLmh0bWxGb3I9ZS5sYWJlbDtsYWJlbC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO1BvbHltZXIuZG9tKHJhZGlvQnV0dG9uKS5hcHBlbmRDaGlsZChpbnB1dCk7UG9seW1lci5kb20ocmFkaW9CdXR0b24pLmFwcGVuZENoaWxkKGxhYmVsKTt0aGlzLnJhZGlvQnV0dG9uc19bZS5rZXldPWlucHV0O30uYmluZCh0aGlzKSk7dGhpcy5tYXliZUluaXRfKCk7dGhpcy5tYXliZVJlbmRlclJhZGlvQnV0dG9uc18oKTt9LG1heWJlUmVuZGVyUmFkaW9CdXR0b25zXygpe2lmKCF0aGlzLmlzUmVhZHlfKXJldHVybjtpZih0aGlzLnJhZGlvQnV0dG9uc189PT11bmRlZmluZWQpcmV0dXJuO2Zvcihjb25zdCBrZXkgaW4gdGhpcy5yYWRpb0J1dHRvbnNfKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5hcHBlbmRDaGlsZCh0aGlzLnJhZGlvQnV0dG9uc19ba2V5XS5wYXJlbnRFbGVtZW50KTt9CmlmKHRoaXMuc2VsZWN0ZWRLZXlfIT09dW5kZWZpbmVkKXt0aGlzLnNlbGVjdCh0aGlzLnNlbGVjdGVkS2V5Xyk7fX0sc2VsZWN0KGtleSl7aWYoa2V5PT09dW5kZWZpbmVkfHxrZXk9PT10aGlzLnNlbGVjdGVkS2V5Xyl7cmV0dXJuO30KaWYodGhpcy5yYWRpb0J1dHRvbnNfPT09dW5kZWZpbmVkKXt0aGlzLnNlbGVjdGVkS2V5Xz1rZXk7cmV0dXJuO30KaWYoIShrZXkgaW4gdGhpcy5yYWRpb0J1dHRvbnNfKSl7dGhyb3cgbmV3IEVycm9yKGtleSsnIGRvZXMgbm90IGV4aXN0cycpO30KaWYodGhpcy5zZWxlY3RlZEtleV8hPT11bmRlZmluZWQpe3RoaXMucmFkaW9CdXR0b25zX1t0aGlzLnNlbGVjdGVkS2V5X10uY2hlY2tlZD1mYWxzZTt9CnRoaXMuc2VsZWN0ZWRLZXlfPWtleTt0ci5iLlNldHRpbmdzLnNldCh0aGlzLnNldHRpbmdzS2V5Xyx0aGlzLnNlbGVjdGVkS2V5Xyk7aWYodGhpcy5zZWxlY3RlZEtleV8hPT11bmRlZmluZWQpe3RoaXMucmFkaW9CdXR0b25zX1t0aGlzLnNlbGVjdGVkS2V5X10uY2hlY2tlZD10cnVlO30KdGhpcy5kaXNwYXRjaEV2ZW50KG5ldyB0ci5iLkV2ZW50KCdjaGFuZ2UnLGZhbHNlKSk7fSxnZXQgc2VsZWN0ZWRLZXkoKXtyZXR1cm4gdGhpcy5zZWxlY3RlZEtleV87fSx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTUlOX0dVSURFTElORV9IRUlHSFRfUFg9Mztjb25zdCBDSEVDS0JPWF9XSURUSF9QWD0xODtjb25zdCBOYW1lQ29sdW1uQ2hhcnQ9dHIudWkuYi5kZWZpbmUoJ25hbWUtY29sdW1uLWNoYXJ0Jyx0ci51aS5iLkNvbHVtbkNoYXJ0KTtOYW1lQ29sdW1uQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5Db2x1bW5DaGFydC5wcm90b3R5cGUsZ2V0IHhBeGlzSGVpZ2h0KCl7cmV0dXJuIDUrKHRoaXMudGV4dEhlaWdodFB4Xyp0aGlzLmRhdGFfLmxlbmd0aCk7fSx1cGRhdGVNYXJnaW5zXygpe3N1cGVyLnVwZGF0ZU1hcmdpbnNfKCk7bGV0IHhBeGlzVGlja092ZXJoYW5nUHg9MDtmb3IobGV0IGk9MDtpPHRoaXMuZGF0YV8ubGVuZ3RoOysraSl7Y29uc3QgZGF0dW09dGhpcy5kYXRhX1tpXTt4QXhpc1RpY2tPdmVyaGFuZ1B4PU1hdGgubWF4KHhBeGlzVGlja092ZXJoYW5nUHgsdGhpcy54U2NhbGVfKGkpK3RyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcyxkYXR1bS54KS53aWR0aC0KdGhpcy5ncmFwaFdpZHRoKTt9CnRoaXMubWFyZ2luLnJpZ2h0PU1hdGgubWF4KHRoaXMubWFyZ2luLnJpZ2h0LHhBeGlzVGlja092ZXJoYW5nUHgpO30sZ2V0WEZvckRhdHVtXyhkYXR1bSxpbmRleCl7cmV0dXJuIGluZGV4O30sZ2V0IHhBeGlzVGlja09mZnNldCgpe3JldHVybiAwLjU7fSx1cGRhdGVYQXhpc18oeEF4aXMpe3hBeGlzLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO2lmKHRoaXMuaGlkZVhBeGlzKXJldHVybjtjb25zdCBuYW1lVGV4dHM9eEF4aXMuc2VsZWN0QWxsKCd0ZXh0JykuZGF0YSh0aGlzLmRhdGFfKTtuYW1lVGV4dHMuZW50ZXIoKS5hcHBlbmQoJ3RleHQnKS5hdHRyKCd0cmFuc2Zvcm0nLChkLGluZGV4KT0+J3RyYW5zbGF0ZSgwLCAnKwp0aGlzLnRleHRIZWlnaHRQeF8qKHRoaXMuZGF0YV8ubGVuZ3RoLWluZGV4KSsnKScpLmF0dHIoJ3gnLChkLGluZGV4KT0+dGhpcy54U2NhbGVfKGluZGV4KSkuYXR0cigneScsZD0+dGhpcy5ncmFwaEhlaWdodCkudGV4dChkPT5kLngpO25hbWVUZXh0cy5leGl0KCkucmVtb3ZlKCk7Y29uc3QgZ3VpZGVMaW5lcz14QXhpcy5zZWxlY3RBbGwoJ2xpbmUuZ3VpZGUnKS5kYXRhKHRoaXMuZGF0YV8pO2d1aWRlTGluZXMuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCd4MScsKGQsaW5kZXgpPT50aGlzLnhTY2FsZV8oaW5kZXgrdGhpcy54QXhpc1RpY2tPZmZzZXQpKS5hdHRyKCd4MicsKGQsaW5kZXgpPT50aGlzLnhTY2FsZV8oaW5kZXgrdGhpcy54QXhpc1RpY2tPZmZzZXQpKS5hdHRyKCd5MScsKCk9PnRoaXMuZ3JhcGhIZWlnaHQpLmF0dHIoJ3kyJywoZCxpbmRleCk9PnRoaXMuZ3JhcGhIZWlnaHQrTWF0aC5tYXgoTUlOX0dVSURFTElORV9IRUlHSFRfUFgsKHRoaXMudGV4dEhlaWdodFB4XyoodGhpcy5kYXRhXy5sZW5ndGgtaW5kZXgtMSkpKSk7fX07cmV0dXJue05hbWVDb2x1bW5DaGFydCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBMaW5lQ2hhcnQ9dHIudWkuYi5MaW5lQ2hhcnQ7Y29uc3QgTmFtZUxpbmVDaGFydD10ci51aS5iLmRlZmluZSgnbmFtZS1saW5lLWNoYXJ0JyxMaW5lQ2hhcnQpO05hbWVMaW5lQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186TGluZUNoYXJ0LnByb3RvdHlwZSxnZXRYRm9yRGF0dW1fKGRhdHVtLGluZGV4KXtyZXR1cm4gaW5kZXg7fSxnZXQgeEF4aXNIZWlnaHQoKXtyZXR1cm4gNSsodGhpcy50ZXh0SGVpZ2h0UHhfKnRoaXMuZGF0YV8ubGVuZ3RoKTt9LGdldCB4QXhpc1RpY2tPZmZzZXQoKXtyZXR1cm4gMDt9LHVwZGF0ZU1hcmdpbnNfKCl7dHIudWkuYi5OYW1lQ29sdW1uQ2hhcnQucHJvdG90eXBlLnVwZGF0ZU1hcmdpbnNfLmNhbGwodGhpcyk7fSx1cGRhdGVYQXhpc18oeEF4aXMpe3hBeGlzLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO2lmKHRoaXMuaGlkZVhBeGlzKXJldHVybjt0ci51aS5iLk5hbWVDb2x1bW5DaGFydC5wcm90b3R5cGUudXBkYXRlWEF4aXNfLmNhbGwodGhpcyx4QXhpcyk7Y29uc3QgYmFzZWxpbmU9eEF4aXMuc2VsZWN0QWxsKCdwYXRoJykuZGF0YShbdGhpc10pO2Jhc2VsaW5lLmVudGVyKCkuYXBwZW5kKCdsaW5lJykuYXR0cignc3Ryb2tlJywnYmxhY2snKS5hdHRyKCd4MScsdGhpcy54U2NhbGVfKDApKS5hdHRyKCd4MicsdGhpcy54U2NhbGVfKHRoaXMuZGF0YV8ubGVuZ3RoLTEpKS5hdHRyKCd5MScsdGhpcy5ncmFwaEhlaWdodCkuYXR0cigneTInLHRoaXMuZ3JhcGhIZWlnaHQpO2Jhc2VsaW5lLmV4aXQoKS5yZW1vdmUoKTt9fTtyZXR1cm57TmFtZUxpbmVDaGFydCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYicsZnVuY3Rpb24oKXtjb25zdCBCb3hDaGFydD10ci51aS5iLmRlZmluZSgnYm94LWNoYXJ0Jyx0ci51aS5iLk5hbWVMaW5lQ2hhcnQpO0JveENoYXJ0LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuTmFtZUxpbmVDaGFydC5wcm90b3R5cGUsZ2V0IGhpZGVMZWdlbmQoKXtyZXR1cm4gdHJ1ZTt9LHVwZGF0ZURhdGFSYW5nZV8oKXtpZih0aGlzLm92ZXJyaWRlRGF0YVJhbmdlXyE9PXVuZGVmaW5lZCl7cmV0dXJuO30KdGhpcy5hdXRvRGF0YVJhbmdlXy5yZXNldCgpO2Zvcihjb25zdCBkYXR1bSBvZiB0aGlzLmRhdGFfKXt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKGRhdHVtLnBlcmNlbnRpbGVfMCk7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZShkYXR1bS5wZXJjZW50aWxlXzEwMCk7fX0sdXBkYXRlU2NhbGVzXygpe3N1cGVyLnVwZGF0ZVNjYWxlc18oKTt0aGlzLnhTY2FsZV8uZG9tYWluKFswLHRoaXMuZGF0YV8ubGVuZ3RoXSk7fSxnZXQgeEF4aXNUaWNrT2Zmc2V0KCl7cmV0dXJuIDAuNTt9LHVwZGF0ZURhdGFSYW5nZV8oKXtpZih0aGlzLm92ZXJyaWRlRGF0YVJhbmdlXyE9PXVuZGVmaW5lZClyZXR1cm47dGhpcy5hdXRvRGF0YVJhbmdlXy5yZXNldCgpO2Zvcihjb25zdCBkYXR1bSBvZiB0aGlzLmRhdGFfKXt0aGlzLmF1dG9EYXRhUmFuZ2VfLmFkZFZhbHVlKGRhdHVtLnBlcmNlbnRpbGVfMCk7dGhpcy5hdXRvRGF0YVJhbmdlXy5hZGRWYWx1ZShkYXR1bS5wZXJjZW50aWxlXzEwMCk7fX0sdXBkYXRlWEF4aXNfKHhBeGlzKXt4QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtpZih0aGlzLmhpZGVYQXhpcylyZXR1cm47dHIudWkuYi5OYW1lQ29sdW1uQ2hhcnQucHJvdG90eXBlLnVwZGF0ZVhBeGlzXy5jYWxsKHRoaXMseEF4aXMpO2NvbnN0IGJhc2VsaW5lPXhBeGlzLnNlbGVjdEFsbCgncGF0aCcpLmRhdGEoW3RoaXNdKTtiYXNlbGluZS5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3N0cm9rZScsJ2JsYWNrJykuYXR0cigneDEnLHRoaXMueFNjYWxlXygwKSkuYXR0cigneDInLHRoaXMueFNjYWxlXyh0aGlzLmRhdGFfLmxlbmd0aCkpLmF0dHIoJ3kxJyx0aGlzLmdyYXBoSGVpZ2h0KS5hdHRyKCd5MicsdGhpcy5ncmFwaEhlaWdodCk7YmFzZWxpbmUuZXhpdCgpLnJlbW92ZSgpO30sdXBkYXRlRGF0YUNvbnRlbnRzXyhkYXRhU2VsKXtkYXRhU2VsLnNlbGVjdEFsbCgnKicpLnJlbW92ZSgpO2NvbnN0IGJveGVzU2VsPWRhdGFTZWwuc2VsZWN0QWxsKCdwYXRoJyk7Zm9yKGxldCBpbmRleD0wO2luZGV4PHRoaXMuZGF0YV8ubGVuZ3RoOysraW5kZXgpe2NvbnN0IGRhdHVtPXRoaXMuZGF0YV9baW5kZXhdO2NvbnN0IGNvbG9yPWRhdHVtLmNvbG9yfHwnYmxhY2snO2xldCBzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ3JlY3QnKS5hdHRyKCdmaWxsJyxjb2xvcikuYXR0cigneCcsdGhpcy54U2NhbGVfKGluZGV4KzAuMikpLmF0dHIoJ3dpZHRoJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC44KS10aGlzLnhTY2FsZV8oaW5kZXgrMC4yKSkuYXR0cigneScsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfNzUpKS5hdHRyKCdoZWlnaHQnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzI1KS0KdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfNzUpKTtzZWwuZXhpdCgpLnJlbW92ZSgpO3NlbD1ib3hlc1NlbC5kYXRhKFtkYXR1bV0pO3NlbC5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3N0cm9rZScsY29sb3IpLmF0dHIoJ3gxJyx0aGlzLnhTY2FsZV8oaW5kZXgpKS5hdHRyKCd4MicsdGhpcy54U2NhbGVfKGluZGV4KzEpKS5hdHRyKCd5MScsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfNTApKS5hdHRyKCd5MicsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfNTApKTtzZWwuZXhpdCgpLnJlbW92ZSgpO3NlbD1ib3hlc1NlbC5kYXRhKFtkYXR1bV0pO3NlbC5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3N0cm9rZScsY29sb3IpLmF0dHIoJ3gxJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC40KSkuYXR0cigneDInLHRoaXMueFNjYWxlXyhpbmRleCswLjYpKS5hdHRyKCd5MScsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfMCkpLmF0dHIoJ3kyJyx0aGlzLnlTY2FsZV8oZGF0dW0ucGVyY2VudGlsZV8wKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTtzZWw9Ym94ZXNTZWwuZGF0YShbZGF0dW1dKTtzZWwuZW50ZXIoKS5hcHBlbmQoJ2xpbmUnKS5hdHRyKCdzdHJva2UnLGNvbG9yKS5hdHRyKCd4MScsdGhpcy54U2NhbGVfKGluZGV4KzAuNCkpLmF0dHIoJ3gyJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC42KSkuYXR0cigneTEnLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzEwMCkpLmF0dHIoJ3kyJyx0aGlzLnlTY2FsZV8oZGF0dW0ucGVyY2VudGlsZV8xMDApKTtzZWwuZXhpdCgpLnJlbW92ZSgpO3NlbD1ib3hlc1NlbC5kYXRhKFtkYXR1bV0pO3NlbC5lbnRlcigpLmFwcGVuZCgnbGluZScpLmF0dHIoJ3N0cm9rZScsY29sb3IpLmF0dHIoJ3gxJyx0aGlzLnhTY2FsZV8oaW5kZXgrMC41KSkuYXR0cigneDInLHRoaXMueFNjYWxlXyhpbmRleCswLjUpKS5hdHRyKCd5MScsdGhpcy55U2NhbGVfKGRhdHVtLnBlcmNlbnRpbGVfMTAwKSkuYXR0cigneTInLHRoaXMueVNjYWxlXyhkYXR1bS5wZXJjZW50aWxlXzApKTtzZWwuZXhpdCgpLnJlbW92ZSgpO319fTtyZXR1cm57Qm94Q2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgQmFyQ2hhcnQ9dHIudWkuYi5kZWZpbmUoJ2Jhci1jaGFydCcsdHIudWkuYi5Db2x1bW5DaGFydCk7QmFyQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5Db2x1bW5DaGFydC5wcm90b3R5cGUsZGVjb3JhdGUoKXtzdXBlci5kZWNvcmF0ZSgpO3RoaXMudmVydGljYWxTY2FsZV89dW5kZWZpbmVkO3RoaXMuaG9yaXpvbnRhbFNjYWxlXz11bmRlZmluZWQ7dGhpcy5pc1dhdGVyZmFsbF89ZmFsc2U7fSx1cGRhdGVTY2FsZXNfKCl7c3VwZXIudXBkYXRlU2NhbGVzXygpO3RoaXMueVNjYWxlXy5yYW5nZShbdGhpcy5ncmFwaFdpZHRoLDBdKTt0aGlzLnhTY2FsZV8ucmFuZ2UoWzAsdGhpcy5ncmFwaEhlaWdodF0pO3RoaXMudmVydGljYWxTY2FsZV89dGhpcy5pc1lMb2dTY2FsZV8/ZDMuc2NhbGUubG9nKDEwKTpkMy5zY2FsZS5saW5lYXIoKTt0aGlzLnZlcnRpY2FsU2NhbGVfLmRvbWFpbih0aGlzLnhTY2FsZV8uZG9tYWluKCkpO3RoaXMudmVydGljYWxTY2FsZV8ucmFuZ2UoW3RoaXMuZ3JhcGhIZWlnaHQsMF0pO3RoaXMuaG9yaXpvbnRhbFNjYWxlXz1kMy5zY2FsZS5saW5lYXIoKTt0aGlzLmhvcml6b250YWxTY2FsZV8uZG9tYWluKHRoaXMueVNjYWxlXy5kb21haW4oKSk7dGhpcy5ob3Jpem9udGFsU2NhbGVfLnJhbmdlKFswLHRoaXMuZ3JhcGhXaWR0aF0pO30sc2V0IGlzV2F0ZXJmYWxsKHdhdGVyZmFsbCl7dGhpcy5pc1dhdGVyZmFsbF89d2F0ZXJmYWxsO2lmKHdhdGVyZmFsbCl7dGhpcy5nZXREYXRhU2VyaWVzKCdoaWRlJykuY29sb3I9J3RyYW5zcGFyZW50Jzt9CnRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgaXNXYXRlcmZhbGwoKXtyZXR1cm4gdGhpcy5pc1dhdGVyZmFsbF87fSxnZXQgZGVmYXVsdEdyYXBoSGVpZ2h0KCl7cmV0dXJuIE1hdGgubWF4KDIwLDEwKnRoaXMuZGF0YV8ubGVuZ3RoKTt9LGdldCBkZWZhdWx0R3JhcGhXaWR0aCgpe3JldHVybiAxMDA7fSxnZXQgYmFySGVpZ2h0KCl7cmV0dXJuIHRoaXMuZ3JhcGhIZWlnaHQvdGhpcy5kYXRhLmxlbmd0aDt9LGRyYXdCcnVzaF8oYnJ1c2hSZWN0c1NlbCl7YnJ1c2hSZWN0c1NlbC5hdHRyKCd4JywwKS5hdHRyKCd3aWR0aCcsdGhpcy5ncmFwaFdpZHRoKS5hdHRyKCd5JyxkPT50aGlzLnZlcnRpY2FsU2NhbGVfKGQubWF4KSkuYXR0cignaGVpZ2h0JyxkPT50aGlzLnZlcnRpY2FsU2NhbGVfKGQubWluKS10aGlzLnZlcnRpY2FsU2NhbGVfKGQubWF4KSkuYXR0cignZmlsbCcsJ3JnYigyMTMsIDIzNiwgMjI5KScpO30sZ2V0RGF0YVBvaW50QXRDaGFydFBvaW50XyhjaGFydFBvaW50KXtjb25zdCBmbGlwcGVkUG9pbnQ9e3g6dGhpcy5ncmFwaEhlaWdodC1jaGFydFBvaW50LnkseTp0aGlzLmdyYXBoV2lkdGgtY2hhcnRQb2ludC54fTtyZXR1cm4gc3VwZXIuZ2V0RGF0YVBvaW50QXRDaGFydFBvaW50XyhmbGlwcGVkUG9pbnQpO30sZHJhd1hBeGlzXyh4QXhpcyl7eEF4aXMuYXR0cigndHJhbnNmb3JtJywndHJhbnNsYXRlKDAsJyt0aGlzLmdyYXBoSGVpZ2h0KycpJykuY2FsbChkMy5zdmcuYXhpcygpLnNjYWxlKHRoaXMuaG9yaXpvbnRhbFNjYWxlXykub3JpZW50KCdib3R0b20nKSk7fSxnZXQgeUF4aXNXaWR0aCgpe3JldHVybiB0aGlzLmNvbXB1dGVTY2FsZVRpY2tXaWR0aF8odGhpcy52ZXJ0aWNhbFNjYWxlXyk7fSxkcmF3WUF4aXNfKHlBeGlzKXtjb25zdCBheGlzTW9kaWZpZXI9ZDMuc3ZnLmF4aXMoKS5zY2FsZSh0aGlzLnZlcnRpY2FsU2NhbGVfKS5vcmllbnQoJ2xlZnQnKTt5QXhpcy5jYWxsKGF4aXNNb2RpZmllcik7fSxkcmF3SG92ZXJWYWx1ZUJveF8ocmVjdCl7Y29uc3QgcmVjdEhvdmVyRXZlbnQ9bmV3IHRyLmIuRXZlbnQoJ3JlY3QtbW91c2VlbnRlcicpO3JlY3RIb3ZlckV2ZW50LnJlY3Q9cmVjdDt0aGlzLmRpc3BhdGNoRXZlbnQocmVjdEhvdmVyRXZlbnQpO2lmKCF0aGlzLmVuYWJsZUhvdmVyQm94fHwodGhpcy5pc1dhdGVyZmFsbF8mJnJlY3Qua2V5PT09J2hpZGUnKSl7cmV0dXJuO30KY29uc3Qgc2VyaWVzS2V5cz1bLi4udGhpcy5zZXJpZXNCeUtleV8ua2V5cygpXTtjb25zdCBjaGFydEFyZWFTZWw9ZDMuc2VsZWN0KHRoaXMuY2hhcnRBcmVhRWxlbWVudCk7Y2hhcnRBcmVhU2VsLnNlbGVjdEFsbCgnLmhvdmVyJykucmVtb3ZlKCk7bGV0IGtleVdpZHRoUHg9MDtsZXQga2V5SGVpZ2h0UHg9MDtsZXQgeFdpZHRoUHg9MDtsZXQgeEhlaWdodFB4PTA7bGV0IGdyb3VwV2lkdGhQeD0wO2xldCBncm91cEhlaWdodFB4PTA7aWYoc2VyaWVzS2V5cy5sZW5ndGg+MSYmIXRoaXMuaXNHcm91cGVkJiYhdGhpcy5pc1dhdGVyZmFsbF8pe2tleVdpZHRoUHg9dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLmNoYXJ0QXJlYUVsZW1lbnQscmVjdC5rZXkpLndpZHRoO2tleUhlaWdodFB4PXRoaXMudGV4dEhlaWdodFB4Xzt9CmlmKHRoaXMuZGF0YS5sZW5ndGg+MSYmIXRoaXMuaXNXYXRlcmZhbGxfKXt4V2lkdGhQeD10ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMuY2hhcnRBcmVhRWxlbWVudCwnJytyZWN0LmRhdHVtLngpLndpZHRoO3hIZWlnaHRQeD10aGlzLnRleHRIZWlnaHRQeF87fQppZih0aGlzLmlzR3JvdXBlZCYmcmVjdC5kYXR1bS5ncm91cCE9PXVuZGVmaW5lZCl7Z3JvdXBXaWR0aFB4PXRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcy5jaGFydEFyZWFFbGVtZW50LHJlY3QuZGF0dW0uZ3JvdXApLndpZHRoO2dyb3VwSGVpZ2h0UHg9dGhpcy50ZXh0SGVpZ2h0UHhfO30KY29uc3QgdmFsdWVXaWR0aFB4PXRyLnVpLmIuZ2V0U1ZHVGV4dFNpemUodGhpcy5jaGFydEFyZWFFbGVtZW50LHJlY3QudmFsdWUpLndpZHRoO2NvbnN0IHZhbHVlSGVpZ2h0UHg9dGhpcy50ZXh0SGVpZ2h0UHhfO2NvbnN0IG1heFdpZHRoUHg9TWF0aC5tYXgoa2V5V2lkdGhQeCx4V2lkdGhQeCxncm91cFdpZHRoUHgsdmFsdWVXaWR0aFB4KSs1O2NvbnN0IGhvdmVyV2lkdGhQeD10aGlzLmlzR3JvdXBlZD9tYXhXaWR0aFB4Ok1hdGgubWluKG1heFdpZHRoUHgsTWF0aC5tYXgoNTAscmVjdC53aWR0aFB4KSk7bGV0IGhvdmVyVG9wUHg9cmVjdC50b3BQeDtob3ZlclRvcFB4PU1hdGgubWluKGhvdmVyVG9wUHgsdGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQtCnZhbHVlSGVpZ2h0UHgpO2xldCBob3ZlckxlZnRQeD1yZWN0LmxlZnRQeCsocmVjdC53aWR0aFB4LzIpO2hvdmVyTGVmdFB4PU1hdGgubWF4KGhvdmVyTGVmdFB4LWhvdmVyV2lkdGhQeCwtdGhpcy5tYXJnaW4ubGVmdCk7Y2hhcnRBcmVhU2VsLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5hdHRyKCdmaWxsJywnd2hpdGUnKS5hdHRyKCd4Jyxob3ZlckxlZnRQeCkuYXR0cigneScsaG92ZXJUb3BQeCkuYXR0cignd2lkdGgnLGhvdmVyV2lkdGhQeCkuYXR0cignaGVpZ2h0JyxrZXlIZWlnaHRQeCt4SGVpZ2h0UHgrCnZhbHVlSGVpZ2h0UHgrZ3JvdXBIZWlnaHRQeCk7aWYoc2VyaWVzS2V5cy5sZW5ndGg+MSYmIXRoaXMuaXNHcm91cGVkJiYhdGhpcy5pc1dhdGVyZmFsbF8pe2NoYXJ0QXJlYVNlbC5hcHBlbmQoJ3RleHQnKS5hdHRyKCdjbGFzcycsJ2hvdmVyJykuYXR0cignZmlsbCcscmVjdC5jb2xvcj09PSd0cmFuc3BhcmVudCc/JyMwMDAwMDAnOnJlY3QuY29sb3IpLmF0dHIoJ3gnLGhvdmVyTGVmdFB4KzIpLmF0dHIoJ3knLGhvdmVyVG9wUHgra2V5SGVpZ2h0UHgtMykudGV4dChyZWN0LmtleSk7fQppZih0aGlzLmRhdGEubGVuZ3RoPjEmJiF0aGlzLmlzV2F0ZXJmYWxsXyl7Y2hhcnRBcmVhU2VsLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yPT09J3RyYW5zcGFyZW50Jz8nIzAwMDAwMCc6cmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCtrZXlIZWlnaHRQeCt2YWx1ZUhlaWdodFB4LTMpLnRleHQoJycrcmVjdC5kYXR1bS54KTt9CmlmKHRoaXMuaXNHcm91cGVkJiZyZWN0LmRhdHVtLmdyb3VwIT09dW5kZWZpbmVkKXtjaGFydEFyZWFTZWwuYXBwZW5kKCd0ZXh0Jykub24oJ21vdXNlbGVhdmUnLCgpPT50aGlzLmNsZWFySG92ZXJWYWx1ZUJveF8ocmVjdCkpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yPT09J3RyYW5zcGFyZW50Jz8nIzAwMDAwMCc6cmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCtrZXlIZWlnaHRQeCt4SGVpZ2h0UHgrZ3JvdXBIZWlnaHRQeC0zKS50ZXh0KHJlY3QuZGF0dW0uZ3JvdXApO30KY2hhcnRBcmVhU2VsLmFwcGVuZCgndGV4dCcpLmF0dHIoJ2NsYXNzJywnaG92ZXInKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yPT09J3RyYW5zcGFyZW50Jz8nIzAwMDAwMCc6cmVjdC5jb2xvcikuYXR0cigneCcsaG92ZXJMZWZ0UHgrMikuYXR0cigneScsaG92ZXJUb3BQeCt4SGVpZ2h0UHgra2V5SGVpZ2h0UHgrCmdyb3VwSGVpZ2h0UHgrdmFsdWVIZWlnaHRQeC0zKS50ZXh0KHJlY3QudmFsdWUpO30sZmxpcFJlY3RfKHJlY3Qpe3JldHVybntkYXR1bTpyZWN0LmRhdHVtLGluZGV4OnJlY3QuaW5kZXgsa2V5OnJlY3Qua2V5LHZhbHVlOnJlY3QudmFsdWUsY29sb3I6cmVjdC5jb2xvcix0b3BQeDp0aGlzLmdyYXBoSGVpZ2h0LXJlY3QubGVmdFB4LXJlY3Qud2lkdGhQeCxsZWZ0UHg6dGhpcy5ncmFwaFdpZHRoLXJlY3QudG9wUHgtcmVjdC5oZWlnaHRQeCx3aWR0aFB4OnJlY3QuaGVpZ2h0UHgsaGVpZ2h0UHg6cmVjdC53aWR0aFB4LHVuZGVyZmxvdzpyZWN0LnVuZGVyZmxvdyxvdmVyZmxvdzpyZWN0Lm92ZXJmbG93LH07fSxkcmF3UmVjdF8ocmVjdCxzZWwpe3N1cGVyLmRyYXdSZWN0Xyh0aGlzLmZsaXBSZWN0XyhyZWN0KSxzZWwpO30sZHJhd1VuZGVyZmxvd18ocmVjdCxyZWN0c1NlbCl7bGV0IHNlbD1yZWN0c1NlbC5kYXRhKFtyZWN0XSk7c2VsLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykudGV4dCgnKicpLmF0dHIoJ2ZpbGwnLHJlY3QuY29sb3IpLmF0dHIoJ3gnLDApLmF0dHIoJ3knLHRoaXMuZ3JhcGhIZWlnaHQtcmVjdC5sZWZ0UHgrCjMrKHJlY3Qud2lkdGhQeC8yKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTtzZWw9cmVjdHNTZWwuZGF0YShbcmVjdF0pO3NlbC5lbnRlcigpLmFwcGVuZCgncmVjdCcpLmF0dHIoJ2ZpbGwnLCdyZ2JhKDAsIDAsIDAsIDApJykuYXR0cigneCcsMCkuYXR0cigneScsdGhpcy5ncmFwaEhlaWdodC1yZWN0LmxlZnRQeC1yZWN0LndpZHRoUHgpLmF0dHIoJ3dpZHRoJywxMCkuYXR0cignaGVpZ2h0JyxyZWN0LndpZHRoUHgpLm9uKCdtb3VzZWVudGVyJywoKT0+dGhpcy5kcmF3SG92ZXJWYWx1ZUJveF8odGhpcy5mbGlwUmVjdF8ocmVjdCkpKS5vbignbW91c2VsZWF2ZScsKCk9PnRoaXMuY2xlYXJIb3ZlclZhbHVlQm94XyhyZWN0KSk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9LGRyYXdPdmVyZmxvd18ocmVjdCxzZWwpe3NlbD1zZWwuZGF0YShbcmVjdF0pO3NlbC5lbnRlcigpLmFwcGVuZCgndGV4dCcpLnRleHQoJyonKS5hdHRyKCdmaWxsJyxyZWN0LmNvbG9yKS5hdHRyKCd4Jyx0aGlzLmdyYXBoV2lkdGgpLmF0dHIoJ3knLHRoaXMuZ3JhcGhIZWlnaHQtcmVjdC5sZWZ0UHgrCjMrKHJlY3Qud2lkdGhQeC8yKSk7c2VsLmV4aXQoKS5yZW1vdmUoKTt9fTtyZXR1cm57QmFyQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgTmFtZUJhckNoYXJ0PXRyLnVpLmIuZGVmaW5lKCduYW1lLWJhci1jaGFydCcsdHIudWkuYi5CYXJDaGFydCk7Y29uc3QgWV9BWElTX1BBRERJTkc9MjtOYW1lQmFyQ2hhcnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkuYi5CYXJDaGFydC5wcm90b3R5cGUsZ2V0RGF0YVBvaW50QXRDaGFydFBvaW50XyhjaGFydFBvaW50KXtyZXR1cm57eDp0ci51aS5iLkJhckNoYXJ0LnByb3RvdHlwZS5nZXREYXRhUG9pbnRBdENoYXJ0UG9pbnRfLmNhbGwodGhpcyxjaGFydFBvaW50KS54LHk6cGFyc2VJbnQoTWF0aC5mbG9vcigodGhpcy5ncmFwaEhlaWdodC1jaGFydFBvaW50LnkpL3RoaXMuYmFySGVpZ2h0KSl9O30sZ2V0WEZvckRhdHVtXyhkYXR1bSxpbmRleCl7cmV0dXJuIGluZGV4O30sZ2V0IHlBeGlzV2lkdGgoKXtpZih0aGlzLmRhdGEubGVuZ3RoPT09MClyZXR1cm4gMDtyZXR1cm4gWV9BWElTX1BBRERJTkcrdHIuYi5tYXRoLlN0YXRpc3RpY3MubWF4KHRoaXMuZGF0YV8sZD0+dHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLGQueCkud2lkdGgpO30sZ2V0IGRlZmF1bHRHcmFwaEhlaWdodCgpe3JldHVybigzK3RoaXMudGV4dEhlaWdodFB4XykqdGhpcy5kYXRhLmxlbmd0aDt9LHVwZGF0ZVlBeGlzXyh5QXhpcyl7aWYodHIudWkuYi5nZXRTVkdUZXh0U2l6ZSh0aGlzLCd0ZXN0Jykud2lkdGg9PT0wKXt0ci5iLnJlcXVlc3RBbmltYXRpb25GcmFtZSgoKT0+dGhpcy51cGRhdGVZQXhpc18oeUF4aXMpKTtyZXR1cm47fQp5QXhpcy5zZWxlY3RBbGwoJyonKS5yZW1vdmUoKTtpZih0aGlzLmhpZGVZQXhpcylyZXR1cm47Y29uc3QgbmFtZVRleHRzPXlBeGlzLnNlbGVjdEFsbCgndGV4dCcpLmRhdGEodGhpcy5kYXRhXyk7bmFtZVRleHRzLmVudGVyKCkuYXBwZW5kKCd0ZXh0JykuYXR0cigneCcsZD0+LSh0ci51aS5iLmdldFNWR1RleHRTaXplKHRoaXMsZC54KS53aWR0aCtZX0FYSVNfUEFERElORykpLmF0dHIoJ3knLChkLGluZGV4KT0+dGhpcy52ZXJ0aWNhbFNjYWxlXyhpbmRleCkpLnRleHQoZD0+ZC54KTtuYW1lVGV4dHMuZXhpdCgpLnJlbW92ZSgpO2xldCBwcmV2aW91c1RvcD11bmRlZmluZWQ7Zm9yKGNvbnN0IHRleHQgb2YgbmFtZVRleHRzWzBdKXtjb25zdCBiYm94PXRleHQuZ2V0QkJveCgpO2lmKChwcmV2aW91c1RvcD09PXVuZGVmaW5lZCl8fChwcmV2aW91c1RvcD4oYmJveC55K2Jib3guaGVpZ2h0KSkpe3ByZXZpb3VzVG9wPWJib3gueTt9ZWxzZXt0ZXh0LnN0eWxlLm9wYWNpdHk9MDt9fX19O3JldHVybntOYW1lQmFyQ2hhcnQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgRElBR05PU1RJQ19TUEFOX0JFSEFWSU9SPXtjcmVhdGVkKCl7dGhpcy5kaWFnbm9zdGljXz11bmRlZmluZWQ7dGhpcy5uYW1lXz11bmRlZmluZWQ7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt9LGF0dGFjaGVkKCl7aWYodGhpcy5kaWFnbm9zdGljXyl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGRpYWdub3N0aWMoKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljXzt9LGJ1aWxkKGRpYWdub3N0aWMsbmFtZSxoaXN0b2dyYW0pe3RoaXMuZGlhZ25vc3RpY189ZGlhZ25vc3RpYzt0aGlzLm5hbWVfPW5hbWU7dGhpcy5oaXN0b2dyYW1fPWhpc3RvZ3JhbTtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3Rocm93IG5ldyBFcnJvcignZG9tLW1vZHVsZXMgbXVzdCBvdmVycmlkZSB1cGRhdGVDb250ZW50c18oKScpO319O3JldHVybntESUFHTk9TVElDX1NQQU5fQkVIQVZJT1IsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgREVGQVVMVF9DT0xPUl9TQ0hFTUU9bmV3IHRyLmIuU2luZWJvd0NvbG9yR2VuZXJhdG9yKCk7ZnVuY3Rpb24gZ2V0SGlzdG9ncmFtTmFtZShoaXN0b2dyYW0sZGlhZ25vc3RpY05hbWUsa2V5KXtpZihoaXN0b2dyYW09PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBuYW1lTWFwPWhpc3RvZ3JhbS5kaWFnbm9zdGljcy5nZXQoZGlhZ25vc3RpY05hbWUpO2lmKG5hbWVNYXA9PT11bmRlZmluZWQpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gbmFtZU1hcC5nZXQoa2V5KTt9CmNsYXNzIEJyZWFrZG93blRhYmxlU3VtbWFyeVJvd3tjb25zdHJ1Y3RvcihkaXNwbGF5RWxlbWVudCxoaXN0b2dyYW1OYW1lcyl7dGhpcy5kaXNwbGF5RWxlbWVudF89ZGlzcGxheUVsZW1lbnQ7dGhpcy5oaXN0b2dyYW1OYW1lc189aGlzdG9ncmFtTmFtZXM7dGhpcy5rZXlTcGFuXz11bmRlZmluZWQ7fQpnZXQgbnVtYmVyVmFsdWUoKXtyZXR1cm4gdW5kZWZpbmVkO30KZ2V0IGtleVNwYW4oKXtpZih0aGlzLmtleVNwYW5fPT09dW5kZWZpbmVkKXtpZih0aGlzLmhpc3RvZ3JhbU5hbWVzXy5sZW5ndGgpe3RoaXMua2V5U3Bhbl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7dGhpcy5rZXlTcGFuXy5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHRoaXMuaGlzdG9ncmFtTmFtZXNfLCdTZWxlY3QgQWxsJyk7fWVsc2V7dGhpcy5rZXlTcGFuXz0nU3VtJzt9fQpyZXR1cm4gdGhpcy5rZXlTcGFuXzt9CmdldCBuYW1lKCl7cmV0dXJuJ1N1bSc7fQpnZXQgZGlzcGxheUVsZW1lbnQoKXtyZXR1cm4gdGhpcy5kaXNwbGF5RWxlbWVudF87fQpnZXQgc3RyaW5nUGVyY2VudCgpe3JldHVybicxMDAlJzt9fQpjbGFzcyBCcmVha2Rvd25UYWJsZVJvd3tjb25zdHJ1Y3RvcihuYW1lLHZhbHVlLGhpc3RvZ3JhbU5hbWUsdW5pdCxjb2xvcil7dGhpcy5uYW1lXz1uYW1lO3RoaXMudmFsdWVfPXZhbHVlO3RoaXMuaGlzdG9ncmFtTmFtZV89aGlzdG9ncmFtTmFtZTt0aGlzLnVuaXRfPXVuaXQ7aWYodHlwZW9mIHZhbHVlIT09J251bWJlcicpe3Rocm93IG5ldyBFcnJvcigndW5zdXBwb3J0ZWQgdmFsdWUgJyt2YWx1ZSk7fQp0aGlzLnRhYmxlU3VtXz11bmRlZmluZWQ7dGhpcy5rZXlTcGFuXz11bmRlZmluZWQ7dGhpcy5jb2xvcl89Y29sb3I7Y29uc3QgaHNsPXRoaXMuY29sb3IudG9IU0woKTtoc2wubCo9MC44NTt0aGlzLmhpZ2hsaWdodGVkQ29sb3JfPXRyLmIuQ29sb3IuZnJvbUhTTChoc2wpO2lmKHRoaXMudW5pdF8pe3RoaXMuZGlzcGxheUVsZW1lbnRfPXRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbih0aGlzLm51bWJlclZhbHVlLHt1bml0OnRoaXMudW5pdF8sfSk7fWVsc2V7dGhpcy5kaXNwbGF5RWxlbWVudF89dHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDp0aGlzLnN0cmluZ1ZhbHVlLH0pO319CmdldCBuYW1lKCl7cmV0dXJuIHRoaXMubmFtZV87fQpnZXQgY29sb3IoKXtyZXR1cm4gdGhpcy5jb2xvcl87fQpnZXQgaGlnaGxpZ2h0ZWRDb2xvcigpe3JldHVybiB0aGlzLmhpZ2hsaWdodGVkQ29sb3JfO30KZ2V0IGtleVNwYW4oKXtpZih0aGlzLmtleVNwYW5fPT09dW5kZWZpbmVkKXtpZih0aGlzLmhpc3RvZ3JhbU5hbWVfKXt0aGlzLmtleVNwYW5fPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO3RoaXMua2V5U3Bhbl8uc2V0U2VsZWN0aW9uQW5kQ29udGVudChbdGhpcy5oaXN0b2dyYW1OYW1lX10sdGhpcy5uYW1lKTt0aGlzLmtleVNwYW5fLmNvbG9yPXRoaXMuY29sb3I7dGhpcy5rZXlTcGFuXy50aXRsZT10aGlzLmhpc3RvZ3JhbU5hbWVfO31lbHNle3RoaXMua2V5U3Bhbl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3RoaXMua2V5U3Bhbl8uaW5uZXJUZXh0PXRoaXMubmFtZTt0aGlzLmtleVNwYW5fLnN0eWxlLmNvbG9yPXRoaXMuY29sb3I7fX0KcmV0dXJuIHRoaXMua2V5U3Bhbl87fQpnZXQgbnVtYmVyVmFsdWUoKXtpZighaXNOYU4odGhpcy52YWx1ZV8pJiYodGhpcy52YWx1ZV8hPT1JbmZpbml0eSkmJih0aGlzLnZhbHVlXyE9PS1JbmZpbml0eSkmJih0aGlzLnZhbHVlXz4wKSlyZXR1cm4gdGhpcy52YWx1ZV87cmV0dXJuIHVuZGVmaW5lZDt9CmdldCBzdHJpbmdWYWx1ZSgpe2lmKCh0aGlzLnVuaXRfIT09dW5kZWZpbmVkKSYmIWlzTmFOKHRoaXMudmFsdWVfKSYmKHRoaXMudmFsdWVfIT09SW5maW5pdHkpJiYodGhpcy52YWx1ZV8hPT0tSW5maW5pdHkpKXtyZXR1cm4gdGhpcy51bml0Xy5mb3JtYXQodGhpcy52YWx1ZV8pO30KcmV0dXJuIHRoaXMudmFsdWVfLnRvU3RyaW5nKCk7fQpzZXQgdGFibGVTdW0ocyl7dGhpcy50YWJsZVN1bV89czt9CmdldCBzdHJpbmdQZXJjZW50KCl7aWYodGhpcy50YWJsZVN1bV89PT11bmRlZmluZWQpcmV0dXJuJyc7Y29uc3QgbnVtPXRoaXMubnVtYmVyVmFsdWU7aWYobnVtPT09dW5kZWZpbmVkKXJldHVybicnO3JldHVybiBNYXRoLmZsb29yKG51bSoxMDAuMC90aGlzLnRhYmxlU3VtXykrJyUnO30KZ2V0IGRpc3BsYXlFbGVtZW50KCl7cmV0dXJuIHRoaXMuZGlzcGxheUVsZW1lbnRfO30KY29tcGFyZShvdGhlcil7aWYodGhpcy5udW1iZXJWYWx1ZT09PXVuZGVmaW5lZCl7aWYob3RoZXIubnVtYmVyVmFsdWU9PT11bmRlZmluZWQpe3JldHVybiB0aGlzLm5hbWUubG9jYWxlQ29tcGFyZShvdGhlci5uYW1lKTt9CnJldHVybiAxO30KaWYob3RoZXIubnVtYmVyVmFsdWU9PT11bmRlZmluZWQpe3JldHVybi0xO30KaWYodGhpcy5udW1iZXJWYWx1ZT09PW90aGVyLm51bWJlclZhbHVlKXtyZXR1cm4gdGhpcy5uYW1lLmxvY2FsZUNvbXBhcmUob3RoZXIubmFtZSk7fQpyZXR1cm4gb3RoZXIubnVtYmVyVmFsdWUtdGhpcy5udW1iZXJWYWx1ZTt9fQpQb2x5bWVyKHtpczondHItdi11aS1icmVha2Rvd24tc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sY3JlYXRlZCgpe3RoaXMuY2hhcnRfPW5ldyB0ci51aS5iLkNvbHVtbkNoYXJ0KCk7dGhpcy5jaGFydF8uZ3JhcGhIZWlnaHQ9MTMwO3RoaXMuY2hhcnRfLmlzU3RhY2tlZD10cnVlO3RoaXMuY2hhcnRfLmhpZGVYQXhpcz10cnVlO3RoaXMuY2hhcnRfLmhpZGVMZWdlbmQ9dHJ1ZTt0aGlzLmNoYXJ0Xy5lbmFibGVIb3ZlckJveD1mYWxzZTt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdyZWN0LW1vdXNlZW50ZXInLGV2ZW50PT50aGlzLm9uUmVjdE1vdXNlRW50ZXJfKGV2ZW50KSk7dGhpcy5jaGFydF8uYWRkRXZlbnRMaXN0ZW5lcigncmVjdC1tb3VzZWxlYXZlJyxldmVudD0+dGhpcy5vblJlY3RNb3VzZUxlYXZlXyhldmVudCkpO30sb25SZWN0TW91c2VFbnRlcl8oZXZlbnQpe2Zvcihjb25zdCByb3cgb2YgdGhpcy4kLnRhYmxlLnRhYmxlUm93cyl7aWYocm93Lm5hbWU9PT1ldmVudC5yZWN0LmtleSl7cm93LmRpc3BsYXlFbGVtZW50LnN0eWxlLmJhY2tncm91bmQ9ZXZlbnQucmVjdC5jb2xvcjtyb3cua2V5U3Bhbi5zY3JvbGxJbnRvVmlld0lmTmVlZGVkKCk7fWVsc2V7cm93LmRpc3BsYXlFbGVtZW50LnN0eWxlLmJhY2tncm91bmQ9Jyc7fX19LG9uUmVjdE1vdXNlTGVhdmVfKGV2ZW50KXtmb3IoY29uc3Qgcm93IG9mIHRoaXMuJC50YWJsZS50YWJsZVJvd3Mpe3Jvdy5kaXNwbGF5RWxlbWVudC5zdHlsZS5iYWNrZ3JvdW5kPScnO319LHJlYWR5KCl7UG9seW1lci5kb20odGhpcy4kLmNvbnRhaW5lcikuYXBwZW5kQ2hpbGQodGhpcy5jaGFydF8pO3RoaXMuJC50YWJsZS56ZWJyYT10cnVlO3RoaXMuJC50YWJsZS5zaG93SGVhZGVyPWZhbHNlO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t2YWx1ZTpyb3c9PnJvdy5rZXlTcGFuLH0se3ZhbHVlOnJvdz0+cm93LmRpc3BsYXlFbGVtZW50LGFsaWduOnRyLnVpLmIuVGFibGVGb3JtYXQuQ29sdW1uQWxpZ25tZW50LlJJR0hULH0se3ZhbHVlOnJvdz0+cm93LnN0cmluZ1BlcmNlbnQsYWxpZ246dHIudWkuYi5UYWJsZUZvcm1hdC5Db2x1bW5BbGlnbm1lbnQuUklHSFQsfSxdO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQudGFibGUuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmVtcHR5LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztpZighdGhpcy5kaWFnbm9zdGljXyl7dGhpcy5jaGFydF8uZGF0YT1bXTtyZXR1cm47fQppZih0aGlzLmhpc3RvZ3JhbV8pdGhpcy5jaGFydF8udW5pdD10aGlzLmhpc3RvZ3JhbV8udW5pdDtsZXQgY29sb3JTY2hlbWU9dW5kZWZpbmVkO2lmKHRoaXMuZGlhZ25vc3RpYy5jb2xvclNjaGVtZT09PXRyLnYuZC5DT0xPUl9TQ0hFTUVfQ0hST01FX1VTRVJfRlJJRU5ETFlfQ0FURUdPUllfRFJJVkVSKXtjb2xvclNjaGVtZT0obmFtZSk9PntsZXQgY2F0PW5hbWUuc3BsaXQoJyAnKTtjYXQ9Y2F0W2NhdC5sZW5ndGgtMV07cmV0dXJuIHRyLmUuY2hyb21lLkNocm9tZVVzZXJGcmllbmRseUNhdGVnb3J5RHJpdmVyLmdldENvbG9yKGNhdCk7fTt9ZWxzZSBpZih0aGlzLmRpYWdub3N0aWMuY29sb3JTY2hlbWUpe2NvbG9yU2NoZW1lPShuYW1lKT0+dHIuYi5GaXhlZENvbG9yU2NoZW1lUmVnaXN0cnkubG9va1VwKHRoaXMuZGlhZ25vc3RpYy5jb2xvclNjaGVtZSkuZ2V0Q29sb3IobmFtZSk7fWVsc2V7Y29sb3JTY2hlbWU9KG5hbWUpPT5ERUZBVUxUX0NPTE9SX1NDSEVNRS5jb2xvckZvcktleShuYW1lKTt9CmNvbnN0IHRhYmxlUm93cz1bXTtsZXQgdGFibGVTdW09MDtjb25zdCBoaXN0b2dyYW1OYW1lcz1bXTtmb3IoY29uc3Rba2V5LHZhbHVlXW9mIHRoaXMuZGlhZ25vc3RpYyl7Y29uc3QgaGlzdG9ncmFtTmFtZT1nZXRIaXN0b2dyYW1OYW1lKHRoaXMuaGlzdG9ncmFtXyx0aGlzLm5hbWVfLGtleSk7Y29uc3Qgcm93PW5ldyBCcmVha2Rvd25UYWJsZVJvdyhrZXksdmFsdWUsaGlzdG9ncmFtTmFtZSx0aGlzLmNoYXJ0Xy51bml0LGNvbG9yU2NoZW1lKGtleSkpO3RhYmxlUm93cy5wdXNoKHJvdyk7aWYocm93Lm51bWJlclZhbHVlIT09dW5kZWZpbmVkKXRhYmxlU3VtKz1yb3cubnVtYmVyVmFsdWU7aWYoaGlzdG9ncmFtTmFtZSl7aGlzdG9ncmFtTmFtZXMucHVzaChoaXN0b2dyYW1OYW1lKTt9fQp0YWJsZVJvd3Muc29ydCgoeCx5KT0+eC5jb21wYXJlKHkpKTtpZih0YWJsZVN1bT4wKXtsZXQgc3VtbWFyeURpc3BsYXlFbGVtZW50PXRhYmxlU3VtO2lmKHRoaXMuY2hhcnRfLnVuaXQhPT11bmRlZmluZWQpe3N1bW1hcnlEaXNwbGF5RWxlbWVudD10aGlzLmNoYXJ0Xy51bml0LmZvcm1hdCh0YWJsZVN1bSk7fQpzdW1tYXJ5RGlzcGxheUVsZW1lbnQ9dHIudWkuYi5jcmVhdGVTcGFuKHt0ZXh0Q29udGVudDpzdW1tYXJ5RGlzcGxheUVsZW1lbnQsfSk7dGFibGVSb3dzLnVuc2hpZnQobmV3IEJyZWFrZG93blRhYmxlU3VtbWFyeVJvdyhzdW1tYXJ5RGlzcGxheUVsZW1lbnQsaGlzdG9ncmFtTmFtZXMpKTt9CmNvbnN0IGNoYXJ0RGF0YT17eDowfTtmb3IoY29uc3Qgcm93IG9mIHRhYmxlUm93cyl7aWYocm93Lm51bWJlclZhbHVlPT09dW5kZWZpbmVkKWNvbnRpbnVlO3Jvdy50YWJsZVN1bT10YWJsZVN1bTtjaGFydERhdGFbcm93Lm5hbWVdPXJvdy5udW1iZXJWYWx1ZTtjb25zdCBkYXRhU2VyaWVzPXRoaXMuY2hhcnRfLmdldERhdGFTZXJpZXMocm93Lm5hbWUpO2RhdGFTZXJpZXMuY29sb3I9cm93LmNvbG9yO2RhdGFTZXJpZXMuaGlnaGxpZ2h0ZWRDb2xvcj1yb3cuaGlnaGxpZ2h0ZWRDb2xvcjt9CmlmKHRhYmxlUm93cy5sZW5ndGg+MCl7dGhpcy4kLnRhYmxlLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz10YWJsZVJvd3M7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9CmlmKE9iamVjdC5rZXlzKGNoYXJ0RGF0YSkubGVuZ3RoPjEpe3RoaXMuJC5jb250YWluZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5lbXB0eS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLmNoYXJ0Xy5kYXRhPVtjaGFydERhdGFdO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWNvbGxlY3RlZC1yZWxhdGVkLWV2ZW50LXNldC1zcGFuJyxiZWhhdmlvcnM6W3RyLnYudWkuRElBR05PU1RJQ19TUEFOX0JFSEFWSU9SXSx1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztmb3IoY29uc3RbY2Fub25pY2FsVXJsLGV2ZW50c11vZiB0aGlzLmRpYWdub3N0aWMpe2NvbnN0IGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2lmKGV2ZW50cy5sZW5ndGg9PT0xKXtjb25zdCBldmVudD10ci5iLmdldE9ubHlFbGVtZW50KGV2ZW50cyk7bGluay50ZXh0Q29udGVudD1ldmVudC50aXRsZSsnICcrCnRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncy5mb3JtYXQoZXZlbnQuZHVyYXRpb24pO31lbHNle2xpbmsudGV4dENvbnRlbnQ9ZXZlbnRzLmxlbmd0aCsnIGV2ZW50cyc7fQpsaW5rLmhyZWY9Y2Fub25pY2FsVXJsO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGxpbmspO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykpO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWRhdGUtcmFuZ2Utc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5kaWFnbm9zdGljPT09dW5kZWZpbmVkKXtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJztyZXR1cm47fQpQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD10aGlzLmRpYWdub3N0aWMudG9TdHJpbmcoKTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2Z1bmN0aW9uIGlzTGlua1R1cGxlKHZhbHVlKXtyZXR1cm4oKHZhbHVlIGluc3RhbmNlb2YgQXJyYXkpJiYodmFsdWUubGVuZ3RoPT09MikmJih0eXBlb2YgdmFsdWVbMF09PT0nc3RyaW5nJykmJnRyLmIuaXNVcmwodmFsdWVbMV0pKTt9ClBvbHltZXIoe2lzOid0ci12LXVpLWdlbmVyaWMtc2V0LXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuJC5nZW5lcmljLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5saW5rcy50ZXh0Q29udGVudD0nJztpZih0aGlzLmRpYWdub3N0aWM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHZhbHVlcz1BcnJheS5mcm9tKHRoaXMuZGlhZ25vc3RpYyk7bGV0IGFyZUFsbFN0cmluZ3M9dHJ1ZTtsZXQgYXJlQWxsTnVtYmVycz10cnVlO2Zvcihjb25zdCB2YWx1ZSBvZiB2YWx1ZXMpe2lmKHR5cGVvZiB2YWx1ZSE9PSdudW1iZXInKXthcmVBbGxOdW1iZXJzPWZhbHNlO2lmKHR5cGVvZiB2YWx1ZSE9PSdzdHJpbmcnJiYhaXNMaW5rVHVwbGUodmFsdWUpKXthcmVBbGxTdHJpbmdzPWZhbHNlO2JyZWFrO319fQppZighYXJlQWxsU3RyaW5ncyl7dGhpcy4kLmdlbmVyaWMuc3R5bGUuZGlzcGxheT0nJzt0aGlzLiQuZ2VuZXJpYy5vYmplY3Q9dmFsdWVzO3JldHVybjt9CmlmKGFyZUFsbE51bWJlcnMpe3ZhbHVlcy5zb3J0KCh4LHkpPT54LXkpO31lbHNle3ZhbHVlcy5zb3J0KCk7fQpmb3IoY29uc3QgdmFsdWUgb2YgdmFsdWVzKXtjb25zdCBsaW5rPXt0ZXh0Q29udGVudDonJyt2YWx1ZX07aWYoaXNMaW5rVHVwbGUodmFsdWUpKXtsaW5rLnRleHRDb250ZW50PXZhbHVlWzBdO2xpbmsuaHJlZj12YWx1ZVsxXTt9ZWxzZSBpZih0ci5iLmlzVXJsKHZhbHVlKSl7bGluay5ocmVmPXZhbHVlO30KaWYodGhpcy5uYW1lXz09PXRyLnYuZC5SRVNFUlZFRF9OQU1FUy5UUkFDRV9VUkxTKXtsaW5rLnRleHRDb250ZW50PXZhbHVlLnN1YnN0cigxK3ZhbHVlLmxhc3RJbmRleE9mKCcvJykpO30KY29uc3QgbGlua0VsPXRyLnVpLmIuY3JlYXRlTGluayhsaW5rKTtpZihsaW5rLmhyZWYpe2xpbmtFbC50YXJnZXQ9J19ibGFuayc7bGlua0VsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxlPT5lLnN0b3BQcm9wYWdhdGlvbigpKTt9CnRoaXMuJC5saW5rcy5hcHBlbmRDaGlsZChsaW5rRWwpO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLXJlbGF0ZWQtZXZlbnQtc2V0LXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO2NvbnN0IGV2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoWy4uLnRoaXMuZGlhZ25vc3RpY10pO2NvbnN0IGxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7bGV0IGxhYmVsPWV2ZW50cy5sZW5ndGgrJyBldmVudHMnO2lmKGV2ZW50cy5sZW5ndGg9PT0xKXtjb25zdCBldmVudD10ci5iLmdldE9ubHlFbGVtZW50KGV2ZW50cyk7bGFiZWw9ZXZlbnQudGl0bGUrJyAnO2xhYmVsKz10ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXMuZm9ybWF0KGV2ZW50LmR1cmF0aW9uKTt9Cmxpbmsuc2V0U2VsZWN0aW9uQW5kQ29udGVudChldmVudHMsbGFiZWwpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGxpbmspO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktc2NhbGFyLWRpYWdub3N0aWMtc3BhbicsYmVoYXZpb3JzOlt0ci52LnVpLkRJQUdOT1NUSUNfU1BBTl9CRUhBVklPUl0sdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLnNjYWxhci5zZXRWYWx1ZUFuZFVuaXQodGhpcy5kaWFnbm9zdGljLnZhbHVlLnZhbHVlLHRoaXMuZGlhZ25vc3RpYy52YWx1ZS51bml0KTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLXVubWVyZ2VhYmxlLWRpYWdub3N0aWMtc2V0LXNwYW4nLGJlaGF2aW9yczpbdHIudi51aS5ESUFHTk9TVElDX1NQQU5fQkVIQVZJT1JdLHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO2Zvcihjb25zdCBkaWFnbm9zdGljIG9mIHRoaXMuZGlhZ25vc3RpYyl7aWYoZGlhZ25vc3RpYyBpbnN0YW5jZW9mIHRyLnYuZC5SZWxhdGVkTmFtZU1hcCljb250aW51ZTtjb25zdCBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7ZGl2LmFwcGVuZENoaWxkKHRyLnYudWkuY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyx0aGlzLm5hbWVfLHRoaXMuaGlzdG9ncmFtXykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGRpdik7fX19KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gZmluZEVsZW1lbnROYW1lRm9yRGlhZ25vc3RpYyhkaWFnbm9zdGljKXtsZXQgdHlwZUluZm89dW5kZWZpbmVkO2xldCBjdXJQcm90bz1kaWFnbm9zdGljLmNvbnN0cnVjdG9yLnByb3RvdHlwZTt3aGlsZShjdXJQcm90byl7dHlwZUluZm89dHIudi5kLkRpYWdub3N0aWMuZmluZFR5cGVJbmZvKGN1clByb3RvLmNvbnN0cnVjdG9yKTtpZih0eXBlSW5mbyYmdHlwZUluZm8ubWV0YWRhdGEuZWxlbWVudE5hbWUpYnJlYWs7dHlwZUluZm89dW5kZWZpbmVkO2N1clByb3RvPWN1clByb3RvLl9fcHJvdG9fXzt9CmlmKHR5cGVJbmZvPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoZGlhZ25vc3RpYy5jb25zdHJ1Y3Rvci5uYW1lKycgb3IgYSBiYXNlIGNsYXNzIG11c3QgaGF2ZSBhIHJlZ2lzdGVyZWQgZWxlbWVudE5hbWUnKTt9CmNvbnN0IHRhZ05hbWU9dHlwZUluZm8ubWV0YWRhdGEuZWxlbWVudE5hbWU7aWYodHIudWkuYi5pc1Vua25vd25FbGVtZW50TmFtZSh0YWdOYW1lKSl7dGhyb3cgbmV3IEVycm9yKCdFbGVtZW50IG5vdCByZWdpc3RlcmVkOiAnK3RhZ05hbWUpO30KcmV0dXJuIHRhZ05hbWU7fQpmdW5jdGlvbiBjcmVhdGVEaWFnbm9zdGljU3BhbihkaWFnbm9zdGljLG5hbWUsaGlzdG9ncmFtKXtjb25zdCB0YWdOYW1lPWZpbmRFbGVtZW50TmFtZUZvckRpYWdub3N0aWMoZGlhZ25vc3RpYyk7Y29uc3Qgc3Bhbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KHRhZ05hbWUpO2lmKHNwYW4uYnVpbGQ9PT11bmRlZmluZWQpdGhyb3cgbmV3IEVycm9yKHRhZ05hbWUpO3NwYW4uYnVpbGQoZGlhZ25vc3RpYyxuYW1lLGhpc3RvZ3JhbSk7cmV0dXJuIHNwYW47fQpyZXR1cm57Y3JlYXRlRGlhZ25vc3RpY1NwYW4sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gbWFrZUNvbHVtbih0aXRsZSxoaXN0b2dyYW0pe3JldHVybnt0aXRsZSx2YWx1ZShtYXApe2NvbnN0IGRpYWdub3N0aWM9bWFwLmdldCh0aXRsZSk7aWYoIWRpYWdub3N0aWMpcmV0dXJuJyc7cmV0dXJuIHRyLnYudWkuY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyx0aXRsZSxoaXN0b2dyYW0pO319O30KUG9seW1lcih7aXM6J3RyLXYtdWktZGlhZ25vc3RpYy1tYXAtdGFibGUnLGNyZWF0ZWQoKXt0aGlzLmRpYWdub3N0aWNNYXBzXz11bmRlZmluZWQ7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt0aGlzLmlzTWV0YWRhdGFfPWZhbHNlO30sc2V0IGhpc3RvZ3JhbShoKXt0aGlzLmhpc3RvZ3JhbV89aDt9LHNldCBpc01ldGFkYXRhKG0pe3RoaXMuaXNNZXRhZGF0YV89bTt0aGlzLiQudGFibGUuc2hvd0hlYWRlcj0hdGhpcy5pc01ldGFkYXRhXzt9LHNldCBkaWFnbm9zdGljTWFwcyhtYXBzKXt0aGlzLmRpYWdub3N0aWNNYXBzXz1tYXBzO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZGlhZ25vc3RpY01hcHMoKXtyZXR1cm4gdGhpcy5kaWFnbm9zdGljTWFwc187fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLmlzTWV0YWRhdGFfJiZ0aGlzLmRpYWdub3N0aWNNYXBzXy5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ01ldGFkYXRhIGRpYWdub3N0aWMtbWFwLXRhYmxlcyByZXF1aXJlIGV4YWN0bHkgMSBEaWFnbm9zdGljTWFwJyk7fQppZih0aGlzLmRpYWdub3N0aWNNYXBzXz09PXVuZGVmaW5lZHx8dGhpcy5kaWFnbm9zdGljTWFwc18ubGVuZ3RoPT09MCl7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1bXTt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVtdO3JldHVybjt9CmxldCBuYW1lcz1uZXcgU2V0KCk7Zm9yKGNvbnN0IG1hcCBvZiB0aGlzLmRpYWdub3N0aWNNYXBzXyl7Zm9yKGNvbnN0W25hbWUsZGlhZ25vc3RpY11vZiBtYXApe2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuVW5tZXJnZWFibGVEaWFnbm9zdGljU2V0KWNvbnRpbnVlO2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuQ29sbGVjdGVkUmVsYXRlZEV2ZW50U2V0KWNvbnRpbnVlO25hbWVzLmFkZChuYW1lKTt9fQpuYW1lcz1BcnJheS5mcm9tKG5hbWVzKS5zb3J0KCk7Y29uc3QgaGlzdG9ncmFtPXRoaXMuaGlzdG9ncmFtXztpZih0aGlzLmlzTWV0YWRhdGFfKXtjb25zdCBkaWFnbm9zdGljTWFwPXRoaXMuZGlhZ25vc3RpY01hcHNfWzBdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t2YWx1ZShuYW1lKXtyZXR1cm4gbmFtZS5uYW1lO319LHt2YWx1ZShuYW1lKXtjb25zdCBkaWFnbm9zdGljPWRpYWdub3N0aWNNYXAuZ2V0KG5hbWUubmFtZSk7aWYoIWRpYWdub3N0aWMpcmV0dXJuJyc7cmV0dXJuIHRyLnYudWkuY3JlYXRlRGlhZ25vc3RpY1NwYW4oZGlhZ25vc3RpYyxuYW1lLm5hbWUsaGlzdG9ncmFtKTt9fSxdO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9bmFtZXMubWFwKG5hbWU9PntyZXR1cm57bmFtZX07fSk7fWVsc2V7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1uYW1lcy5tYXAobmFtZT0+bWFrZUNvbHVtbihuYW1lLGhpc3RvZ3JhbSkpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5kaWFnbm9zdGljTWFwc187fQp0aGlzLiQudGFibGUucmVidWlsZCgpO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmInLGZ1bmN0aW9uKCl7Y2xhc3MgU2VyaWFsaXphYmxle2NvbnN0cnVjdG9yKCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsJ3Byb3BlcnRpZXNfJyx7Y29uZmlndXJhYmxlOmZhbHNlLGVudW1lcmFibGU6ZmFsc2UsdmFsdWU6bmV3IE1hcCgpLH0pO30KZGVmaW5lKG5hbWUsaW5pdGlhbFZhbHVlKXtpZih0aGlzW25hbWVdIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoYCIke25hbWV9IiBpcyBhbHJlYWR5IGRlZmluZWQuYCk7fQppZihuYW1lW25hbWUubGVuZ3RoLTFdPT09J18nKXt0aHJvdyBuZXcgRXJyb3IoYCIke25hbWV9IiBjYW5ub3QgZW5kIHdpdGggYW4gdW5kZXJzY29yZS5gKTt9CnRoaXMucHJvcGVydGllc18uc2V0KG5hbWUsaW5pdGlhbFZhbHVlKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcyxuYW1lLHtjb25maWd1cmFibGU6ZmFsc2UsZW51bWVyYWJsZTp0cnVlLGdldDooKT0+dGhpcy5wcm9wZXJ0aWVzXy5nZXQobmFtZSksc2V0OnZhbHVlPT50aGlzLnNldFByb3BlcnR5XyhuYW1lLHZhbHVlKSx9KTt9CnNldFByb3BlcnR5XyhuYW1lLHZhbHVlKXt0aGlzLnByb3BlcnRpZXNfLnNldChuYW1lLHZhbHVlKTt9CmNsb25lKCl7cmV0dXJuIFNlcmlhbGl6YWJsZS5mcm9tRGljdCh0aGlzLmFzRGljdCgpKTt9CmFzRGljdCgpe2Z1bmN0aW9uIHZpc2l0KG9iail7aWYob2JqIGluc3RhbmNlb2YgU2VyaWFsaXphYmxlKXJldHVybiBvYmouYXNEaWN0KCk7aWYob2JqIGluc3RhbmNlb2YgU2V0KXJldHVybiBBcnJheS5mcm9tKG9iaik7aWYob2JqIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIG9iai5tYXAodmlzaXQpO2lmKCEob2JqIGluc3RhbmNlb2YgTWFwKSlyZXR1cm4gb2JqO2NvbnN0IHJlc3VsdD17fTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBvYmope3Jlc3VsdFtuYW1lXT12aXNpdCh2YWx1ZSk7fQpyZXR1cm4gcmVzdWx0O30KY29uc3QgZGljdD17dHlwZTp0aGlzLmNvbnN0cnVjdG9yLm5hbWV9O2Zvcihjb25zdFtuYW1lLHZhbHVlXW9mIHRoaXMucHJvcGVydGllc18pe2RpY3RbbmFtZS5yZXBsYWNlKC9fJC8sJycpXT12aXNpdCh2YWx1ZSk7fQpyZXR1cm4gZGljdDt9CnN0YXRpYyBmcm9tRGljdChkaWN0KXtmdW5jdGlvbiB2aXNpdChkKXtpZihkIGluc3RhbmNlb2YgQXJyYXkpcmV0dXJuIGQubWFwKHZpc2l0KTtpZighKGQgaW5zdGFuY2VvZiBPYmplY3QpKXJldHVybiBkO2lmKHR5cGVvZiBkLnR5cGU9PT0nc3RyaW5nJylyZXR1cm4gU2VyaWFsaXphYmxlLmZyb21EaWN0KGQpO2NvbnN0IHJlc3VsdD1uZXcgTWFwKCk7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMoZCkpe3Jlc3VsdC5zZXQobmFtZSx2aXNpdCh2YWx1ZSkpO30KcmV0dXJuIHJlc3VsdDt9CmNvbnN0IHR5cGVJbmZvPVNlcmlhbGl6YWJsZS5maW5kVHlwZUluZm9XaXRoTmFtZShkaWN0LnR5cGUpO2NvbnN0IHJlc3VsdD1uZXcgdHlwZUluZm8uY29uc3RydWN0b3IoKTtmb3IoY29uc3RbbmFtZSx2YWx1ZV1vZiBPYmplY3QuZW50cmllcyhkaWN0KSl7cmVzdWx0W25hbWVdPXZpc2l0KHZhbHVlKTt9CnJldHVybiByZXN1bHQ7fX0KY29uc3Qgb3B0aW9ucz1uZXcgdHIuYi5FeHRlbnNpb25SZWdpc3RyeU9wdGlvbnModHIuYi5CQVNJQ19SRUdJU1RSWV9NT0RFKTtvcHRpb25zLmRlZmF1bHRNZXRhZGF0YT17fTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1TZXJpYWxpemFibGU7dHIuYi5kZWNvcmF0ZUV4dGVuc2lvblJlZ2lzdHJ5KFNlcmlhbGl6YWJsZSxvcHRpb25zKTtyZXR1cm57U2VyaWFsaXphYmxlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5iJyxmdW5jdGlvbigpe2NsYXNzIFZpZXdTdGF0ZSBleHRlbmRzIHRyLmIuU2VyaWFsaXphYmxle2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0ci5iLkV2ZW50VGFyZ2V0LmRlY29yYXRlKHRoaXMpO30Kc2V0UHJvcGVydHlfKG5hbWUsdmFsdWUpe3RoaXMudXBkYXRlKG5ldyBNYXAoW1tuYW1lLHZhbHVlXV0pKTt9CmFzeW5jIHVwZGF0ZUZyb21WaWV3U3RhdGUob3RoZXIpe2F3YWl0IHRoaXMudXBkYXRlKG90aGVyLnByb3BlcnRpZXNfKTt9CmFzeW5jIHVwZGF0ZShkZWx0YSl7aWYoIShkZWx0YSBpbnN0YW5jZW9mIE1hcCkpZGVsdGE9bmV3IE1hcChPYmplY3QuZW50cmllcyhkZWx0YSkpO2NvbnN0IGFjdHVhbERlbHRhPXt9O2Zvcihjb25zdFtuYW1lLGN1cnJlbnRdb2YgZGVsdGEpe2NvbnN0IHByZXZpb3VzPXRoaXNbbmFtZV07aWYocHJldmlvdXM9PT1jdXJyZW50KWNvbnRpbnVlO2FjdHVhbERlbHRhW25hbWVdPXtwcmV2aW91cyxjdXJyZW50fTt0ci5iLlNlcmlhbGl6YWJsZS5wcm90b3R5cGUuc2V0UHJvcGVydHlfLmNhbGwodGhpcyxuYW1lLGN1cnJlbnQpO30KaWYoT2JqZWN0LmtleXMoYWN0dWFsRGVsdGEpLmxlbmd0aD09PTApcmV0dXJuO2F3YWl0IHRyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudEFzeW5jKHRoaXMsdGhpcy51cGRhdGVFdmVudE5hbWVfLHtkZWx0YTphY3R1YWxEZWx0YX0pO30KZ2V0IHVwZGF0ZUV2ZW50TmFtZV8oKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5uYW1lKycudXBkYXRlJzt9CmFkZFVwZGF0ZUxpc3RlbmVyKGxpc3RlbmVyKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIodGhpcy51cGRhdGVFdmVudE5hbWVfLGxpc3RlbmVyKTt9CnJlbW92ZVVwZGF0ZUxpc3RlbmVyKGxpc3RlbmVyKXt0aGlzLnJlbW92ZUV2ZW50TGlzdGVuZXIodGhpcy51cGRhdGVFdmVudE5hbWVfLGxpc3RlbmVyKTt9fQpyZXR1cm57Vmlld1N0YXRlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2NsYXNzIEhpc3RvZ3JhbVNldFZpZXdTdGF0ZSBleHRlbmRzIHRyLmIuVmlld1N0YXRle2NvbnN0cnVjdG9yKCl7c3VwZXIoKTt0aGlzLmRlZmluZSgnc2VhcmNoUXVlcnknLCcnKTt0aGlzLmRlZmluZSgncmVmZXJlbmNlRGlzcGxheUxhYmVsJywnJyk7dGhpcy5kZWZpbmUoJ2Rpc3BsYXlTdGF0aXN0aWNOYW1lJywnJyk7dGhpcy5kZWZpbmUoJ3Nob3dBbGwnLHRydWUpO3RoaXMuZGVmaW5lKCdncm91cGluZ3MnLFtdKTt0aGlzLmRlZmluZSgnc29ydENvbHVtbkluZGV4JywwKTt0aGlzLmRlZmluZSgnc29ydERlc2NlbmRpbmcnLGZhbHNlKTt0aGlzLmRlZmluZSgnY29uc3RyYWluTmFtZUNvbHVtbicsdHJ1ZSk7dGhpcy5kZWZpbmUoJ3RhYmxlUm93U3RhdGVzJyxuZXcgTWFwKCkpO3RoaXMuZGVmaW5lKCdhbHBoYScsMC4wMSk7fX0KdHIuYi5WaWV3U3RhdGUucmVnaXN0ZXIoSGlzdG9ncmFtU2V0Vmlld1N0YXRlKTtjbGFzcyBIaXN0b2dyYW1TZXRUYWJsZVJvd1N0YXRlIGV4dGVuZHMgdHIuYi5WaWV3U3RhdGV7Y29uc3RydWN0b3IoKXtzdXBlcigpO3RoaXMuZGVmaW5lKCdpc0V4cGFuZGVkJyxmYWxzZSk7dGhpcy5kZWZpbmUoJ2lzT3ZlcnZpZXdlZCcsZmFsc2UpO3RoaXMuZGVmaW5lKCdjZWxscycsbmV3IE1hcCgpKTt0aGlzLmRlZmluZSgnc3ViUm93cycsbmV3IE1hcCgpKTt0aGlzLmRlZmluZSgnZGlhZ25vc3RpY3NUYWInLCcnKTt9CmFzQ29tcGFjdERpY3QoKXtjb25zdCByZXN1bHQ9e307aWYodGhpcy5pc0V4cGFuZGVkKXJlc3VsdC5lPScxJztpZih0aGlzLmlzT3ZlcnZpZXdlZClyZXN1bHQubz0nMSc7aWYodGhpcy5kaWFnbm9zdGljc1RhYilyZXN1bHQuZD10aGlzLmRpYWdub3N0aWNzVGFiO2NvbnN0IGNlbGxzPXt9O2Zvcihjb25zdFtuYW1lLGNlbGxdb2YgdGhpcy5jZWxscyl7Y29uc3QgY2VsbERpY3Q9Y2VsbC5hc0NvbXBhY3REaWN0KCk7aWYoY2VsbERpY3Q9PT11bmRlZmluZWQpY29udGludWU7Y2VsbHNbbmFtZV09Y2VsbERpY3Q7fQppZihPYmplY3Qua2V5cyhjZWxscykubGVuZ3RoPjApcmVzdWx0LmM9Y2VsbHM7Y29uc3Qgc3ViUm93cz17fTtmb3IoY29uc3RbbmFtZSxyb3ddb2YgdGhpcy5zdWJSb3dzKXtjb25zdCByb3dEaWN0PXJvdy5hc0NvbXBhY3REaWN0KCk7aWYocm93RGljdD09PXVuZGVmaW5lZCljb250aW51ZTtzdWJSb3dzW25hbWVdPXJvd0RpY3Q7fQppZihPYmplY3Qua2V5cyhzdWJSb3dzKS5sZW5ndGg+MClyZXN1bHQucj1zdWJSb3dzO2lmKE9iamVjdC5rZXlzKHJlc3VsdCkubGVuZ3RoPT09MClyZXR1cm4gdW5kZWZpbmVkO3JldHVybiByZXN1bHQ7fQphc3luYyB1cGRhdGVGcm9tQ29tcGFjdERpY3QoZGljdCl7YXdhaXQgdGhpcy51cGRhdGUoe2lzRXhwYW5kZWQ6ZGljdC5lPT09JzEnLGlzT3ZlcnZpZXdlZDpkaWN0Lm89PT0nMScsZGlhZ25vc3RpY3NUYWI6ZGljdC5kfHwnJyx9KTtmb3IoY29uc3RbbmFtZSxjZWxsRGljdF1vZiBPYmplY3QuZW50cmllcyhkaWN0LmN8fHt9KSl7Y29uc3QgY2VsbD10aGlzLmNlbGxzLmdldChuYW1lKTtpZihjZWxsPT09dW5kZWZpbmVkKWNvbnRpbnVlO2F3YWl0IGNlbGwudXBkYXRlRnJvbUNvbXBhY3REaWN0KGNlbGxEaWN0KTt9CmZvcihjb25zdFtuYW1lLHN1YlJvd0RpY3Rdb2YgT2JqZWN0LmVudHJpZXMoZGljdC5yfHx7fSkpe2NvbnN0IHN1YlJvdz10aGlzLnN1YlJvd3MuZ2V0KG5hbWUpO2lmKHN1YlJvdz09PXVuZGVmaW5lZCljb250aW51ZTthd2FpdCBzdWJSb3cudXBkYXRlRnJvbUNvbXBhY3REaWN0KHN1YlJvd0RpY3QpO319KndhbGsoKXt5aWVsZCB0aGlzO2Zvcihjb25zdCByb3cgb2YgdGhpcy5zdWJSb3dzLnZhbHVlcygpKXlpZWxkKnJvdy53YWxrKCk7fQpzdGF0aWMqd2Fsa0FsbChyb290Um93cyl7Zm9yKGNvbnN0IHJvb3RSb3cgb2Ygcm9vdFJvd3MpeWllbGQqcm9vdFJvdy53YWxrKCk7fX0KdHIuYi5WaWV3U3RhdGUucmVnaXN0ZXIoSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSk7Y2xhc3MgSGlzdG9ncmFtU2V0VGFibGVDZWxsU3RhdGUgZXh0ZW5kcyB0ci5iLlZpZXdTdGF0ZXtjb25zdHJ1Y3Rvcigpe3N1cGVyKCk7dGhpcy5kZWZpbmUoJ2lzT3BlbicsZmFsc2UpO3RoaXMuZGVmaW5lKCdicnVzaGVkQmluUmFuZ2UnLG5ldyB0ci5iLm1hdGguUmFuZ2UoKSk7dGhpcy5kZWZpbmUoJ21lcmdlU2FtcGxlRGlhZ25vc3RpY3MnLHRydWUpO30KYXNDb21wYWN0RGljdCgpe2NvbnN0IHJlc3VsdD17fTtpZih0aGlzLmlzT3BlbilyZXN1bHQubz0nMSc7aWYoIXRoaXMubWVyZ2VTYW1wbGVEaWFnbm9zdGljcylyZXN1bHQubT0nMCc7aWYoIXRoaXMuYnJ1c2hlZEJpblJhbmdlLmlzRW1wdHkpe3Jlc3VsdC5iPXRoaXMuYnJ1c2hlZEJpblJhbmdlLm1pbisnXycrdGhpcy5icnVzaGVkQmluUmFuZ2UubWF4O30KaWYoT2JqZWN0LmtleXMocmVzdWx0KS5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHJlc3VsdDt9CmFzeW5jIHVwZGF0ZUZyb21Db21wYWN0RGljdChkaWN0KXtsZXQgYmluUmFuZ2U9dGhpcy5icnVzaGVkQmluUmFuZ2U7aWYoZGljdC5iKXtsZXRbYk1pbixiTWF4XT1kaWN0LmIuc3BsaXQoJ18nKTtiTWluPXBhcnNlSW50KGJNaW4pO2JNYXg9cGFyc2VJbnQoYk1heCk7aWYoYk1pbiE9PWJpblJhbmdlLm1pbnx8Yk1heCE9PWJpblJhbmdlLm1heCl7YmluUmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGJNaW4sYk1heCk7fX0KYXdhaXQgdGhpcy51cGRhdGUoe2lzT3BlbjpkaWN0Lm89PT0nMScsYnJ1c2hlZEJpblJhbmdlOmJpblJhbmdlLG1lcmdlU2FtcGxlRGlhZ25vc3RpY3M6ZGljdC5tIT09JzAnLH0pO319CnRyLmIuVmlld1N0YXRlLnJlZ2lzdGVyKEhpc3RvZ3JhbVNldFRhYmxlQ2VsbFN0YXRlKTtyZXR1cm57SGlzdG9ncmFtU2V0VGFibGVDZWxsU3RhdGUsSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSxIaXN0b2dyYW1TZXRWaWV3U3RhdGUsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXYtdWktc2NhbGFyLW1hcC10YWJsZScsY3JlYXRlZCgpe3RoaXMuc2NhbGFyTWFwXz1uZXcgTWFwKCk7dGhpcy5zaWduaWZpY2FuY2VfPW5ldyBNYXAoKTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnNob3dIZWFkZXI9ZmFsc2U7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3ZhbHVlKHJvdyl7cmV0dXJuIHJvdy5uYW1lO319LHt2YWx1ZShyb3cpe2NvbnN0IHNwYW49dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHJvdy52YWx1ZSk7aWYocm93LnNpZ25pZmljYW5jZSE9PXVuZGVmaW5lZCl7c3Bhbi5zaWduaWZpY2FuY2U9cm93LnNpZ25pZmljYW5jZTt9ZWxzZSBpZihyb3cuYW55Um93c0hhdmVTaWduaWZpY2FuY2Upe3NwYW4uc3R5bGUubWFyZ2luUmlnaHQ9JzE4cHgnO30Kc3Bhbi5zdHlsZS53aGl0ZVNwYWNlPSdub3dyYXAnO3JldHVybiBzcGFuO319XTt9LGdldCBzY2FsYXJNYXAoKXtyZXR1cm4gdGhpcy5zY2FsYXJNYXBfO30sc2V0IHNjYWxhck1hcChtYXApe3RoaXMuc2NhbGFyTWFwXz1tYXA7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldFNpZ25pZmljYW5jZUZvcktleShrZXksc2lnbmlmaWNhbmNlKXt0aGlzLnNpZ25pZmljYW5jZV8uc2V0KGtleSxzaWduaWZpY2FuY2UpO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCByb3dzPVtdO2Zvcihjb25zdFtrZXksc2NhbGFyXW9mIHRoaXMuc2NhbGFyTWFwKXtyb3dzLnB1c2goe25hbWU6a2V5LHZhbHVlOnNjYWxhcixzaWduaWZpY2FuY2U6dGhpcy5zaWduaWZpY2FuY2VfLmdldChrZXkpLGFueVJvd3NIYXZlU2lnbmlmaWNhbmNlOih0aGlzLnNpZ25pZmljYW5jZV8uc2l6ZT4wKX0pO30KdGhpcy4kLnRhYmxlLnRhYmxlUm93cz1yb3dzO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtjb25zdCBERUZBVUxUX0JBUl9IRUlHSFRfUFg9NTtjb25zdCBUUlVOQ0FURV9CSU5fTUFSR0lOPTAuMTU7Y29uc3QgSUdOT1JFX0RFTFRBX1NUQVRJU1RJQ1NfTkFNRVM9W2Ake3RyLnYuREVMVEF9bWluYCxgJSR7dHIudi5ERUxUQX1taW5gLGAke3RyLnYuREVMVEF9bWF4YCxgJSR7dHIudi5ERUxUQX1tYXhgLGAke3RyLnYuREVMVEF9c3VtYCxgJSR7dHIudi5ERUxUQX1zdW1gLGAke3RyLnYuREVMVEF9Y291bnRgLGAlJHt0ci52LkRFTFRBfWNvdW50YCxdO1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zcGFuJyxjcmVhdGVkKCl7dGhpcy52aWV3U3RhdGVMaXN0ZW5lcl89dGhpcy5vblZpZXdTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt0aGlzLnZpZXdTdGF0ZT1uZXcgdHIudi51aS5IaXN0b2dyYW1TZXRUYWJsZUNlbGxTdGF0ZSgpO3RoaXMucm93U3RhdGVMaXN0ZW5lcl89dGhpcy5vblJvd1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpO3RoaXMucm93U3RhdGU9bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSgpO3RoaXMucm9vdFN0YXRlTGlzdGVuZXJfPXRoaXMub25Sb290U3RhdGVVcGRhdGVfLmJpbmQodGhpcyk7dGhpcy5yb290U3RhdGU9bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0Vmlld1N0YXRlKCk7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbV89dW5kZWZpbmVkO3RoaXMuZ3JhcGhXaWR0aF89dW5kZWZpbmVkO3RoaXMuZ3JhcGhIZWlnaHRfPXVuZGVmaW5lZDt0aGlzLm1vdXNlRG93bkJpbl89dW5kZWZpbmVkO3RoaXMucHJldkJydXNoZWRCaW5SYW5nZV89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuYW55U2FtcGxlRGlhZ25vc3RpY3NfPWZhbHNlO3RoaXMuY2FuTWVyZ2VTYW1wbGVEaWFnbm9zdGljc189dHJ1ZTt0aGlzLm13dVJlc3VsdF89dW5kZWZpbmVkO30sZ2V0IHJvd1N0YXRlKCl7cmV0dXJuIHRoaXMucm93U3RhdGVfO30sc2V0IHJvd1N0YXRlKHJzKXtpZih0aGlzLnJvd1N0YXRlKXt0aGlzLnJvd1N0YXRlLnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMucm93U3RhdGVMaXN0ZW5lcl8pO30KdGhpcy5yb3dTdGF0ZV89cnM7dGhpcy5yb3dTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnJvd1N0YXRlTGlzdGVuZXJfKTtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB2aWV3U3RhdGUoKXtyZXR1cm4gdGhpcy52aWV3U3RhdGVfO30sc2V0IHZpZXdTdGF0ZSh2cyl7aWYodGhpcy52aWV3U3RhdGUpe3RoaXMudmlld1N0YXRlLnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMudmlld1N0YXRlTGlzdGVuZXJfKTt9CnRoaXMudmlld1N0YXRlXz12czt0aGlzLnZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnZpZXdTdGF0ZUxpc3RlbmVyXyk7aWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgcm9vdFN0YXRlKCl7cmV0dXJuIHRoaXMucm9vdFN0YXRlXzt9LHNldCByb290U3RhdGUodnMpe2lmKHRoaXMucm9vdFN0YXRlKXt0aGlzLnJvb3RTdGF0ZS5yZW1vdmVVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RTdGF0ZUxpc3RlbmVyXyk7fQp0aGlzLnJvb3RTdGF0ZV89dnM7dGhpcy5yb290U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb290U3RhdGVMaXN0ZW5lcl8pO2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sYnVpbGQoaGlzdG9ncmFtLG9wdF9yZWZlcmVuY2VIaXN0b2dyYW0pe3RoaXMuaGlzdG9ncmFtXz1oaXN0b2dyYW07dGhpcy4kLm1ldHJpY19kaWFnbm9zdGljcy5oaXN0b2dyYW09aGlzdG9ncmFtO3RoaXMuJC5zYW1wbGVfZGlhZ25vc3RpY3MuaGlzdG9ncmFtPWhpc3RvZ3JhbTt0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbV89b3B0X3JlZmVyZW5jZUhpc3RvZ3JhbTtpZih0aGlzLmhpc3RvZ3JhbS5jYW5Db21wYXJlKHRoaXMucmVmZXJlbmNlSGlzdG9ncmFtKSl7dGhpcy5td3VSZXN1bHRfPXRyLmIubWF0aC5TdGF0aXN0aWNzLm13dSh0aGlzLmhpc3RvZ3JhbS5zYW1wbGVWYWx1ZXMsdGhpcy5yZWZlcmVuY2VIaXN0b2dyYW0uc2FtcGxlVmFsdWVzLHRoaXMucm9vdFN0YXRlLmFscGhhKTt9CnRoaXMuYW55U2FtcGxlRGlhZ25vc3RpY3NfPWZhbHNlO2Zvcihjb25zdCBiaW4gb2YgdGhpcy5oaXN0b2dyYW0uYWxsQmlucyl7aWYoYmluLmRpYWdub3N0aWNNYXBzLmxlbmd0aD4wKXt0aGlzLmFueVNhbXBsZURpYWdub3N0aWNzXz10cnVlO2JyZWFrO319CmlmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sb25WaWV3U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5icnVzaGVkQmluUmFuZ2Upe2lmKHRoaXMuY2hhcnRfIT09dW5kZWZpbmVkKXt0aGlzLmNoYXJ0Xy5icnVzaGVkUmFuZ2U9dGhpcy52aWV3U3RhdGUuYnJ1c2hlZEJpblJhbmdlO30KdGhpcy51cGRhdGVEaWFnbm9zdGljc18oKTt9CmlmKGV2ZW50LmRlbHRhLm1lcmdlU2FtcGxlRGlhZ25vc3RpY3MmJih0aGlzLnZpZXdTdGF0ZS5tZXJnZVNhbXBsZURpYWdub3N0aWNzIT09dGhpcy4kLm1lcmdlX3NhbXBsZV9kaWFnbm9zdGljcy5jaGVja2VkKSl7dGhpcy4kLm1lcmdlX3NhbXBsZV9kaWFnbm9zdGljcy5jaGVja2VkPXRoaXMuY2FuTWVyZ2VTYW1wbGVEaWFnbm9zdGljcyYmdGhpcy52aWV3U3RhdGUubWVyZ2VTYW1wbGVEaWFnbm9zdGljczt0aGlzLnVwZGF0ZURpYWdub3N0aWNzXygpO319LHVwZGF0ZVNpZ25pZmljYW5jZV8oKXtpZighdGhpcy5td3VSZXN1bHRfKXJldHVybjt0aGlzLiQuc3RhdHMuc2V0U2lnbmlmaWNhbmNlRm9yS2V5KGAke3RyLnYuREVMVEF9YXZnYCx0aGlzLm13dVJlc3VsdF8uc2lnbmlmaWNhbmNlKTt9LG9uUm9vdFN0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuYWxwaGEmJnRoaXMubXd1UmVzdWx0Xyl7dGhpcy5td3VSZXN1bHRfLmNvbXBhcmUodGhpcy5yb290U3RhdGUuYWxwaGEpO3RoaXMudXBkYXRlU2lnbmlmaWNhbmNlXygpO319LG9uUm93U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5kaWFnbm9zdGljc1RhYil7aWYodGhpcy5yb3dTdGF0ZS5kaWFnbm9zdGljc1RhYj09PXRoaXMuJC5zYW1wbGVfZGlhZ25vc3RpY3NfY29udGFpbmVyLnRhYkxhYmVsKXt0aGlzLnVwZGF0ZURpYWdub3N0aWNzXygpO31lbHNle2Zvcihjb25zdCB0YWIgb2YgdGhpcy4kLmRpYWdub3N0aWNzLnN1YlZpZXdzKXtpZih0aGlzLnJvd1N0YXRlLmRpYWdub3N0aWNzVGFiPT09dGFiLnRhYkxhYmVsKXt0aGlzLiQuZGlhZ25vc3RpY3Muc2VsZWN0ZWRTdWJWaWV3PXRhYjticmVhazt9fX19fSxyZWFkeSgpe3RoaXMuJC5tZXRyaWNfZGlhZ25vc3RpY3MudGFiTGFiZWw9J2hpc3RvZ3JhbSBkaWFnbm9zdGljcyc7dGhpcy4kLnNhbXBsZV9kaWFnbm9zdGljc19jb250YWluZXIudGFiTGFiZWw9J3NhbXBsZSBkaWFnbm9zdGljcyc7dGhpcy4kLm1ldGFkYXRhX2RpYWdub3N0aWNzLnRhYkxhYmVsPSdtZXRhZGF0YSc7dGhpcy4kLm1ldGFkYXRhX2RpYWdub3N0aWNzLmlzTWV0YWRhdGE9dHJ1ZTt0aGlzLiQuZGlhZ25vc3RpY3MuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0ZWQtdGFiLWNoYW5nZScsdGhpcy5vblNlbGVjdGVkRGlhZ25vc3RpY3NDaGFuZ2VkXy5iaW5kKHRoaXMpKTt0aGlzLiQuZHJhZ19oYW5kbGUudGFyZ2V0PXRoaXMuJC5jb250YWluZXI7dGhpcy4kLmRyYWdfaGFuZGxlLmFkZEV2ZW50TGlzdGVuZXIoJ2RyYWctaGFuZGxlLXJlc2l6ZScsdGhpcy5vblJlc2l6ZV8uYmluZCh0aGlzKSk7fSxhdHRhY2hlZCgpe2lmKHRoaXMuaGlzdG9ncmFtXyE9PXVuZGVmaW5lZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGNhbk1lcmdlU2FtcGxlRGlhZ25vc3RpY3MoKXtyZXR1cm4gdGhpcy5jYW5NZXJnZVNhbXBsZURpYWdub3N0aWNzXzt9LHNldCBjYW5NZXJnZVNhbXBsZURpYWdub3N0aWNzKG1lcmdlKXt0aGlzLmNhbk1lcmdlU2FtcGxlRGlhZ25vc3RpY3NfPW1lcmdlO2lmKCFtZXJnZSl0aGlzLnZpZXdTdGF0ZS5tZXJnZVNhbXBsZURpYWdub3N0aWNzPWZhbHNlO3RoaXMuJC5tZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3NfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9KG1lcmdlPycnOidub25lJyk7fSxvblJlc2l6ZV8oZXZlbnQpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2xldCBoZWlnaHRQeD1wYXJzZUludCh0aGlzLiQuY29udGFpbmVyLnN0eWxlLmhlaWdodCk7aWYoaGVpZ2h0UHg8dGhpcy5kZWZhdWx0R3JhcGhIZWlnaHQpe2hlaWdodFB4PXRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0O3RoaXMuJC5jb250YWluZXIuc3R5bGUuaGVpZ2h0PXRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0KydweCc7fQp0aGlzLmNoYXJ0Xy5ncmFwaEhlaWdodD1oZWlnaHRQeC0odGhpcy5jaGFydF8ubWFyZ2luLnRvcCsKdGhpcy5jaGFydF8ubWFyZ2luLmJvdHRvbSk7dGhpcy4kLnN0YXRzX2NvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5jaGFydF8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KydweCc7fSxnZXQgZ3JhcGhXaWR0aCgpe3JldHVybiB0aGlzLmdyYXBoV2lkdGhffHx0aGlzLmRlZmF1bHRHcmFwaFdpZHRoO30sc2V0IGdyYXBoV2lkdGgod2lkdGgpe3RoaXMuZ3JhcGhXaWR0aF89d2lkdGg7fSxnZXQgZ3JhcGhIZWlnaHQoKXtyZXR1cm4gdGhpcy5ncmFwaEhlaWdodF98fHRoaXMuZGVmYXVsdEdyYXBoSGVpZ2h0O30sc2V0IGdyYXBoSGVpZ2h0KGhlaWdodCl7dGhpcy5ncmFwaEhlaWdodF89aGVpZ2h0O30sZ2V0IGJhckhlaWdodCgpe3JldHVybiB0aGlzLmNoYXJ0Xy5iYXJIZWlnaHQ7fSxzZXQgYmFySGVpZ2h0KHB4KXt0aGlzLmdyYXBoSGVpZ2h0PXRoaXMuY29tcHV0ZUNoYXJ0SGVpZ2h0XyhweCk7fSxjb21wdXRlQ2hhcnRIZWlnaHRfKGJhckhlaWdodFB4KXtyZXR1cm4odGhpcy5jaGFydF8ubWFyZ2luLnRvcCsKdGhpcy5jaGFydF8ubWFyZ2luLmJvdHRvbSsKKGJhckhlaWdodFB4KnRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoKSk7fSxnZXQgZGVmYXVsdEdyYXBoSGVpZ2h0KCl7aWYodGhpcy5oaXN0b2dyYW0mJnRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoPT09MSl7cmV0dXJuIDE1MDt9CnJldHVybiB0aGlzLmNvbXB1dGVDaGFydEhlaWdodF8oREVGQVVMVF9CQVJfSEVJR0hUX1BYKTt9LGdldCBkZWZhdWx0R3JhcGhXaWR0aCgpe2lmKHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoPT09MSl7cmV0dXJuIDEwMDt9CnJldHVybiAzMDA7fSxnZXQgYnJ1c2hlZEJpbnMoKXtjb25zdCBiaW5zPVtdO2lmKHRoaXMuaGlzdG9ncmFtJiYhdGhpcy52aWV3U3RhdGUuYnJ1c2hlZEJpblJhbmdlLmlzRW1wdHkpe2ZvcihsZXQgaT10aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2UubWluO2k8dGhpcy52aWV3U3RhdGUuYnJ1c2hlZEJpblJhbmdlLm1heDsrK2kpe2JpbnMucHVzaCh0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zW2ldKTt9fQpyZXR1cm4gYmluczt9LGFzeW5jIHVwZGF0ZUJydXNoZWRSYW5nZV8oYmluSW5kZXgpe2NvbnN0IGJydXNoZWRCaW5SYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7YnJ1c2hlZEJpblJhbmdlLmFkZFZhbHVlKHRyLmIubWF0aC5jbGFtcCh0aGlzLm1vdXNlRG93bkJpbkluZGV4XywwLHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoLTEpKTticnVzaGVkQmluUmFuZ2UuYWRkVmFsdWUodHIuYi5tYXRoLmNsYW1wKGJpbkluZGV4LDAsdGhpcy5oaXN0b2dyYW0uYWxsQmlucy5sZW5ndGgtMSkpO2JydXNoZWRCaW5SYW5nZS5tYXgrPTE7YXdhaXQgdGhpcy52aWV3U3RhdGUudXBkYXRlKHticnVzaGVkQmluUmFuZ2V9KTt9LG9uTW91c2VEb3duXyhjaGFydEV2ZW50KXtjaGFydEV2ZW50LnN0b3BQcm9wYWdhdGlvbigpO2lmKCF0aGlzLmhpc3RvZ3JhbSlyZXR1cm47dGhpcy5wcmV2QnJ1c2hlZEJpblJhbmdlXz10aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2U7dGhpcy5tb3VzZURvd25CaW5JbmRleF89Y2hhcnRFdmVudC55O3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXyhjaGFydEV2ZW50LnkpO30sb25Nb3VzZU1vdmVfKGNoYXJ0RXZlbnQpe2NoYXJ0RXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7aWYoIXRoaXMuaGlzdG9ncmFtKXJldHVybjt0aGlzLnVwZGF0ZUJydXNoZWRSYW5nZV8oY2hhcnRFdmVudC55KTt9LG9uTW91c2VVcF8oY2hhcnRFdmVudCl7Y2hhcnRFdmVudC5zdG9wUHJvcGFnYXRpb24oKTtpZighdGhpcy5oaXN0b2dyYW0pcmV0dXJuO3RoaXMudXBkYXRlQnJ1c2hlZFJhbmdlXyhjaGFydEV2ZW50LnkpO2lmKHRoaXMucHJldkJydXNoZWRCaW5SYW5nZV8ucmFuZ2U9PT0xJiZ0aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2UucmFuZ2U9PT0xJiYodGhpcy5wcmV2QnJ1c2hlZEJpblJhbmdlXy5taW49PT10aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2UubWluKSl7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNwYW4nLCdjbGVhckJydXNoZWRCaW5zJyk7dGhpcy52aWV3U3RhdGUudXBkYXRlKHticnVzaGVkQmluUmFuZ2U6bmV3IHRyLmIubWF0aC5SYW5nZSgpfSk7fWVsc2V7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNwYW4nLCdicnVzaEJpbnMnKTt9CnRoaXMubW91c2VEb3duQmluSW5kZXhfPXVuZGVmaW5lZDt9LGFzeW5jIG9uU2VsZWN0ZWREaWFnbm9zdGljc0NoYW5nZWRfKCl7YXdhaXQgdGhpcy5yb3dTdGF0ZS51cGRhdGUoe2RpYWdub3N0aWNzVGFiOnRoaXMuJC5kaWFnbm9zdGljcy5zZWxlY3RlZFN1YlZpZXcudGFiTGFiZWwsfSk7aWYoKHRoaXMuJC5kaWFnbm9zdGljcy5zZWxlY3RlZFN1YlZpZXc9PT10aGlzLiQuc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lcikmJnRoaXMuaGlzdG9ncmFtJiZ0aGlzLnZpZXdTdGF0ZS5icnVzaGVkQmluUmFuZ2UuaXNFbXB0eSl7Y29uc3QgYnJ1c2hlZEJpblJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoKTthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZX0pO3RoaXMudXBkYXRlRGlhZ25vc3RpY3NfKCk7fX0sdXBkYXRlRGlhZ25vc3RpY3NfKCl7bGV0IG1hcHM9W107Zm9yKGNvbnN0IGJpbiBvZiB0aGlzLmJydXNoZWRCaW5zKXtmb3IoY29uc3QgbWFwIG9mIGJpbi5kaWFnbm9zdGljTWFwcyl7bWFwcy5wdXNoKG1hcCk7fX0KaWYodGhpcy4kLm1lcmdlX3NhbXBsZV9kaWFnbm9zdGljcy5jaGVja2VkIT09dGhpcy52aWV3U3RhdGUubWVyZ2VTYW1wbGVEaWFnbm9zdGljcyl7dGhpcy52aWV3U3RhdGUudXBkYXRlKHttZXJnZVNhbXBsZURpYWdub3N0aWNzOnRoaXMuJC5tZXJnZV9zYW1wbGVfZGlhZ25vc3RpY3MuY2hlY2tlZH0pO30KaWYodGhpcy52aWV3U3RhdGUubWVyZ2VTYW1wbGVEaWFnbm9zdGljcyl7Y29uc3QgbWVyZ2VkPW5ldyB0ci52LmQuRGlhZ25vc3RpY01hcCgpO2Zvcihjb25zdCBtYXAgb2YgbWFwcyl7bWVyZ2VkLmFkZERpYWdub3N0aWNzKG1hcCk7fQptYXBzPVttZXJnZWRdO30KY29uc3QgbWFyaz10ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc3BhbicsKHRoaXMudmlld1N0YXRlLm1lcmdlU2FtcGxlRGlhZ25vc3RpY3M/J21lcmdlJzonc3BsaXQnKSsnU2FtcGxlRGlhZ25vc3RpY3MnKTt0aGlzLiQuc2FtcGxlX2RpYWdub3N0aWNzLmRpYWdub3N0aWNNYXBzPW1hcHM7bWFyay5lbmQoKTtpZih0aGlzLmFueVNhbXBsZURpYWdub3N0aWNzXyl7dGhpcy4kLmRpYWdub3N0aWNzLnNlbGVjdGVkU3ViVmlldz10aGlzLiQuc2FtcGxlX2RpYWdub3N0aWNzX2NvbnRhaW5lcjt9fSxnZXQgaGlzdG9ncmFtKCl7cmV0dXJuIHRoaXMuaGlzdG9ncmFtXzt9LGdldCByZWZlcmVuY2VIaXN0b2dyYW0oKXtyZXR1cm4gdGhpcy5yZWZlcmVuY2VIaXN0b2dyYW1fO30sZ2V0RGVsdGFTY2FsYXJzXyhzdGF0TmFtZXMsc2NhbGFyTWFwKXtpZighdGhpcy5oaXN0b2dyYW0uY2FuQ29tcGFyZSh0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbSkpcmV0dXJuO2Zvcihjb25zdCBkZWx0YVN0YXROYW1lIG9mIHRyLnYuSGlzdG9ncmFtLmdldERlbHRhU3RhdGlzdGljc05hbWVzKHN0YXROYW1lcykpe2lmKElHTk9SRV9ERUxUQV9TVEFUSVNUSUNTX05BTUVTLmluY2x1ZGVzKGRlbHRhU3RhdE5hbWUpKWNvbnRpbnVlO2NvbnN0IHNjYWxhcj10aGlzLmhpc3RvZ3JhbS5nZXRTdGF0aXN0aWNTY2FsYXIoZGVsdGFTdGF0TmFtZSx0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbSx0aGlzLm13dVJlc3VsdF8pO2lmKHNjYWxhcj09PXVuZGVmaW5lZCljb250aW51ZTtzY2FsYXJNYXAuc2V0KGRlbHRhU3RhdE5hbWUsc2NhbGFyKTt9fSxzZXQgaXNZTG9nU2NhbGUobG9nU2NhbGUpe3RoaXMuY2hhcnRfLmlzWUxvZ1NjYWxlPWxvZ1NjYWxlO30sYXN5bmMgdXBkYXRlQ29udGVudHNfKCl7dGhpcy4kLmNoYXJ0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5kcmFnX2hhbmRsZS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuY29udGFpbmVyLnN0eWxlLmp1c3RpZnlDb250ZW50PScnO3doaWxlKFBvbHltZXIuZG9tKHRoaXMuJC5jaGFydCkubGFzdENoaWxkKXtQb2x5bWVyLmRvbSh0aGlzLiQuY2hhcnQpLnJlbW92ZUNoaWxkKFBvbHltZXIuZG9tKHRoaXMuJC5jaGFydCkubGFzdENoaWxkKTt9CmlmKCF0aGlzLmhpc3RvZ3JhbSlyZXR1cm47dGhpcy4kLmNvbnRhaW5lci5zdHlsZS5kaXNwbGF5PScnO2NvbnN0IHNjYWxhck1hcD1uZXcgTWFwKCk7dGhpcy5nZXREZWx0YVNjYWxhcnNfKHRoaXMuaGlzdG9ncmFtLnN0YXRpc3RpY3NOYW1lcyxzY2FsYXJNYXApO2Zvcihjb25zdFtuYW1lLHNjYWxhcl1vZiB0aGlzLmhpc3RvZ3JhbS5zdGF0aXN0aWNzU2NhbGFycyl7c2NhbGFyTWFwLnNldChuYW1lLHNjYWxhcik7fQp0aGlzLiQuc3RhdHMuc2NhbGFyTWFwPXNjYWxhck1hcDt0aGlzLnVwZGF0ZVNpZ25pZmljYW5jZV8oKTtjb25zdCBtZXRyaWNEaWFnbm9zdGljTWFwPW5ldyB0ci52LmQuRGlhZ25vc3RpY01hcCgpO2NvbnN0IG1ldGFkYXRhRGlhZ25vc3RpY01hcD1uZXcgdHIudi5kLkRpYWdub3N0aWNNYXAoKTtmb3IoY29uc3Rba2V5LGRpYWdub3N0aWNdb2YgdGhpcy5oaXN0b2dyYW0uZGlhZ25vc3RpY3Mpe2lmKGRpYWdub3N0aWMgaW5zdGFuY2VvZiB0ci52LmQuUmVsYXRlZE5hbWVNYXApY29udGludWU7aWYodHIudi5kLlJFU0VSVkVEX05BTUVTX1NFVC5oYXMoa2V5KSl7bWV0YWRhdGFEaWFnbm9zdGljTWFwLnNldChrZXksZGlhZ25vc3RpYyk7fWVsc2V7bWV0cmljRGlhZ25vc3RpY01hcC5zZXQoa2V5LGRpYWdub3N0aWMpO319CmNvbnN0IGRpYWdub3N0aWNUYWJzPVtdO2lmKG1ldHJpY0RpYWdub3N0aWNNYXAuc2l6ZSl7dGhpcy4kLm1ldHJpY19kaWFnbm9zdGljcy5kaWFnbm9zdGljTWFwcz1bbWV0cmljRGlhZ25vc3RpY01hcF07ZGlhZ25vc3RpY1RhYnMucHVzaCh0aGlzLiQubWV0cmljX2RpYWdub3N0aWNzKTt9CmlmKHRoaXMuYW55U2FtcGxlRGlhZ25vc3RpY3NfKXtkaWFnbm9zdGljVGFicy5wdXNoKHRoaXMuJC5zYW1wbGVfZGlhZ25vc3RpY3NfY29udGFpbmVyKTt9CmlmKG1ldGFkYXRhRGlhZ25vc3RpY01hcC5zaXplKXt0aGlzLiQubWV0YWRhdGFfZGlhZ25vc3RpY3MuZGlhZ25vc3RpY01hcHM9W21ldGFkYXRhRGlhZ25vc3RpY01hcF07ZGlhZ25vc3RpY1RhYnMucHVzaCh0aGlzLiQubWV0YWRhdGFfZGlhZ25vc3RpY3MpO30KdGhpcy4kLmRpYWdub3N0aWNzLnJlc2V0U3ViVmlld3MoZGlhZ25vc3RpY1RhYnMpO3RoaXMuJC5kaWFnbm9zdGljcy5zZXQoJ3RhYnNIaWRkZW4nLGRpYWdub3N0aWNUYWJzLmxlbmd0aDwyKTtpZih0aGlzLmhpc3RvZ3JhbS5udW1WYWx1ZXM8PTEpe2F3YWl0IHRoaXMudmlld1N0YXRlLnVwZGF0ZSh7YnJ1c2hlZEJpblJhbmdlOnRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLHRoaXMuaGlzdG9ncmFtLmFsbEJpbnMubGVuZ3RoKX0pO3RoaXMuJC5jb250YWluZXIuc3R5bGUuanVzdGlmeUNvbnRlbnQ9J2ZsZXgtZW5kJztyZXR1cm47fQp0aGlzLiQuY2hhcnQuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5kcmFnX2hhbmRsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7aWYodGhpcy5oaXN0b2dyYW0uYWxsQmlucy5sZW5ndGg9PT0xKXtpZih0aGlzLmhpc3RvZ3JhbS5taW4hPT10aGlzLmhpc3RvZ3JhbS5tYXgpe3RoaXMuY2hhcnRfPW5ldyB0ci51aS5iLkJveENoYXJ0KCk7UG9seW1lci5kb20odGhpcy4kLmNoYXJ0KS5hcHBlbmRDaGlsZCh0aGlzLmNoYXJ0Xyk7dGhpcy5jaGFydF8uZ3JhcGhXaWR0aD10aGlzLmdyYXBoV2lkdGg7dGhpcy5jaGFydF8uZ3JhcGhIZWlnaHQ9dGhpcy5ncmFwaEhlaWdodDt0aGlzLmNoYXJ0Xy5oaWRlWEF4aXM9dHJ1ZTt0aGlzLmNoYXJ0Xy5kYXRhPVt7eDonJyxjb2xvcjonYmx1ZScscGVyY2VudGlsZV8wOnRoaXMuaGlzdG9ncmFtLnJ1bm5pbmcubWluLHBlcmNlbnRpbGVfMjU6dGhpcy5oaXN0b2dyYW0uZ2V0QXBwcm94aW1hdGVQZXJjZW50aWxlKDAuMjUpLHBlcmNlbnRpbGVfNTA6dGhpcy5oaXN0b2dyYW0uZ2V0QXBwcm94aW1hdGVQZXJjZW50aWxlKDAuNSkscGVyY2VudGlsZV83NTp0aGlzLmhpc3RvZ3JhbS5nZXRBcHByb3hpbWF0ZVBlcmNlbnRpbGUoMC43NSkscGVyY2VudGlsZV8xMDA6dGhpcy5oaXN0b2dyYW0ucnVubmluZy5tYXgsfV07fQp0aGlzLiQuc3RhdHNfY29udGFpbmVyLnN0eWxlLm1heEhlaWdodD10aGlzLmNoYXJ0Xy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQrJ3B4Jzthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2JydXNoZWRCaW5SYW5nZTp0ci5iLm1hdGguUmFuZ2UuZnJvbUV4cGxpY2l0UmFuZ2UoMCx0aGlzLmhpc3RvZ3JhbS5hbGxCaW5zLmxlbmd0aCl9KTtyZXR1cm47fQp0aGlzLmNoYXJ0Xz1uZXcgdHIudWkuYi5OYW1lQmFyQ2hhcnQoKTtQb2x5bWVyLmRvbSh0aGlzLiQuY2hhcnQpLmFwcGVuZENoaWxkKHRoaXMuY2hhcnRfKTt0aGlzLmNoYXJ0Xy5ncmFwaFdpZHRoPXRoaXMuZ3JhcGhXaWR0aDt0aGlzLmNoYXJ0Xy5ncmFwaEhlaWdodD10aGlzLmdyYXBoSGVpZ2h0O3RoaXMuY2hhcnRfLmFkZEV2ZW50TGlzdGVuZXIoJ2l0ZW0tbW91c2Vkb3duJyx0aGlzLm9uTW91c2VEb3duXy5iaW5kKHRoaXMpKTt0aGlzLmNoYXJ0Xy5hZGRFdmVudExpc3RlbmVyKCdpdGVtLW1vdXNlbW92ZScsdGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKSk7dGhpcy5jaGFydF8uYWRkRXZlbnRMaXN0ZW5lcignaXRlbS1tb3VzZXVwJyx0aGlzLm9uTW91c2VVcF8uYmluZCh0aGlzKSk7dGhpcy5jaGFydF8uaGlkZUxlZ2VuZD10cnVlO3RoaXMuY2hhcnRfLmdldERhdGFTZXJpZXMoJ3knKS5jb2xvcj0nYmx1ZSc7dGhpcy5jaGFydF8ueEF4aXNMYWJlbD0nIyc7dGhpcy5jaGFydF8uYnJ1c2hlZFJhbmdlPXRoaXMudmlld1N0YXRlLmJydXNoZWRCaW5SYW5nZTtpZighdGhpcy52aWV3U3RhdGUuYnJ1c2hlZEJpblJhbmdlLmlzRW1wdHkpe3RoaXMudXBkYXRlRGlhZ25vc3RpY3NfKCk7fQpjb25zdCBjaGFydERhdGE9W107Y29uc3QgYmluQ291bnRzPVtdO2Zvcihjb25zdCBiaW4gb2YgdGhpcy5oaXN0b2dyYW0uYWxsQmlucyl7bGV0IHg9YmluLnJhbmdlLm1pbjtpZih4PT09LU51bWJlci5NQVhfVkFMVUUpe3g9JzwnK25ldyB0ci5iLlNjYWxhcih0aGlzLmhpc3RvZ3JhbS51bml0LGJpbi5yYW5nZS5tYXgpLnRvU3RyaW5nKCk7fWVsc2V7eD1uZXcgdHIuYi5TY2FsYXIodGhpcy5oaXN0b2dyYW0udW5pdCx4KS50b1N0cmluZygpO30KY2hhcnREYXRhLnB1c2goe3gseTpiaW4uY291bnR9KTtiaW5Db3VudHMucHVzaChiaW4uY291bnQpO30KYmluQ291bnRzLnNvcnQoKHgseSk9PnkteCk7Y29uc3QgZGF0YVJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZSgwLGJpbkNvdW50c1swXSk7aWYoYmluQ291bnRzWzFdPjAmJmJpbkNvdW50c1swXT4oYmluQ291bnRzWzFdKjIpKXtkYXRhUmFuZ2UubWF4PWJpbkNvdW50c1sxXSooMStUUlVOQ0FURV9CSU5fTUFSR0lOKTt9CmlmKGJpbkNvdW50c1syXT4wJiZiaW5Db3VudHNbMV0+KGJpbkNvdW50c1syXSoyKSl7ZGF0YVJhbmdlLm1heD1iaW5Db3VudHNbMl0qKDErVFJVTkNBVEVfQklOX01BUkdJTik7fQp0aGlzLmNoYXJ0Xy5vdmVycmlkZURhdGFSYW5nZT1kYXRhUmFuZ2U7dGhpcy5jaGFydF8uZGF0YT1jaGFydERhdGE7dGhpcy4kLnN0YXRzX2NvbnRhaW5lci5zdHlsZS5tYXhIZWlnaHQ9dGhpcy5jaGFydF8uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCkuaGVpZ2h0KydweCc7fX0pO30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkuYW5hbHlzaXMnLGZ1bmN0aW9uKCl7Y29uc3QgRVZFTlRfRklFTEQ9W3trZXk6J3N0YXJ0JyxsYWJlbDonU3RhcnQnfSx7a2V5OidjcHVEdXJhdGlvbicsbGFiZWw6J0NQVSBEdXJhdGlvbid9LHtrZXk6J2R1cmF0aW9uJyxsYWJlbDonRHVyYXRpb24nfSx7a2V5OidjcHVTZWxmVGltZScsbGFiZWw6J0NQVSBTZWxmIFRpbWUnfSx7a2V5OidzZWxmVGltZScsbGFiZWw6J1NlbGYgVGltZSd9XTtmdW5jdGlvbiBidWlsZERpYWdub3N0aWNzXyhzbGljZSl7Y29uc3QgZGlhZ25vc3RpY3M9e307Zm9yKGNvbnN0IGl0ZW0gb2YgRVZFTlRfRklFTEQpe2NvbnN0IGZpZWxkTmFtZT1pdGVtLmtleTtpZihzbGljZVtmaWVsZE5hbWVdPT09dW5kZWZpbmVkKWNvbnRpbnVlO2RpYWdub3N0aWNzW2ZpZWxkTmFtZV09bmV3IHRyLnYuZC5TY2FsYXIobmV3IHRyLmIuU2NhbGFyKHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5NcyxzbGljZVtmaWVsZE5hbWVdKSk7fQpkaWFnbm9zdGljcy5hcmdzPW5ldyB0ci52LmQuR2VuZXJpY1NldChbc2xpY2UuYXJnc10pO2RpYWdub3N0aWNzLmV2ZW50PW5ldyB0ci52LmQuUmVsYXRlZEV2ZW50U2V0KHNsaWNlKTtyZXR1cm4gZGlhZ25vc3RpY3M7fQpQb2x5bWVyKHtpczondHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt0aGlzLmV2ZW50c0hhdmVEdXJhdGlvbl89dHJ1ZTt0aGlzLmV2ZW50c0hhdmVTdWJSb3dzXz10cnVlO30scmVhZHkoKXt0aGlzLiQucmFkaW9QaWNrZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnJhZGlvUGlja2VyLml0ZW1zPUVWRU5UX0ZJRUxEO3RoaXMuJC5yYWRpb1BpY2tlci5zZWxlY3QoJ2NwdVNlbGZUaW1lJyk7dGhpcy4kLnJhZGlvUGlja2VyLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsKCk9PntpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9KTt0aGlzLiQuaGlzdG9ncmFtU3Bhbi5ncmFwaFdpZHRoPTQwMDt0aGlzLiQuaGlzdG9ncmFtU3Bhbi5jYW5NZXJnZVNhbXBsZURpYWdub3N0aWNzPWZhbHNlO3RoaXMuJC5oaXN0b2dyYW1Db250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7fSxhdHRhY2hlZCgpe2lmKHRoaXMuY3VycmVudFNlbGVjdGlvbl8hPT11bmRlZmluZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtpZihzZWxlY3Rpb24ubGVuZ3RoPD0xKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3VwcG9ydHMgbXVsdGlwbGUgaXRlbXMnKTt9CnRoaXMuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtpZih0aGlzLmlzQXR0YWNoZWQpdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBldmVudHNIYXZlRHVyYXRpb24oKXtyZXR1cm4gdGhpcy5ldmVudHNIYXZlRHVyYXRpb25fO30sc2V0IGV2ZW50c0hhdmVEdXJhdGlvbihldmVudHNIYXZlRHVyYXRpb24pe3RoaXMuZXZlbnRzSGF2ZUR1cmF0aW9uXz1ldmVudHNIYXZlRHVyYXRpb247aWYodGhpcy5pc0F0dGFjaGVkKXRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgZXZlbnRzSGF2ZVN1YlJvd3MoKXtyZXR1cm4gdGhpcy5ldmVudHNIYXZlU3ViUm93c187fSxzZXQgZXZlbnRzSGF2ZVN1YlJvd3MoZXZlbnRzSGF2ZVN1YlJvd3Mpe3RoaXMuZXZlbnRzSGF2ZVN1YlJvd3NfPWV2ZW50c0hhdmVTdWJSb3dzO2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sYnVpbGRIaXN0b2dyYW1fKHNlbGVjdGVkS2V5KXtsZXQgbGVmdEJvdW5kYXJ5PU51bWJlci5NQVhfVkFMVUU7bGV0IHJpZ2h0Qm91bmRhcnk9dHIuYi5tYXRoLlN0YXRpc3RpY3MucGVyY2VudGlsZSh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fLDAuOTUsZnVuY3Rpb24odmFsdWUpe2xlZnRCb3VuZGFyeT1NYXRoLm1pbihsZWZ0Qm91bmRhcnksdmFsdWVbc2VsZWN0ZWRLZXldKTtyZXR1cm4gdmFsdWVbc2VsZWN0ZWRLZXldO30pO2lmKGxlZnRCb3VuZGFyeT09PXJpZ2h0Qm91bmRhcnkpcmlnaHRCb3VuZGFyeSs9MTtjb25zdCBoaXN0b2dyYW09bmV3IHRyLnYuSGlzdG9ncmFtKCcnLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncyx0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlTGluZWFyKGxlZnRCb3VuZGFyeSxyaWdodEJvdW5kYXJ5LE1hdGguY2VpbChNYXRoLnNxcnQodGhpcy5jdXJyZW50U2VsZWN0aW9uXy5sZW5ndGgpKSkpO2hpc3RvZ3JhbS5jdXN0b21pemVTdW1tYXJ5T3B0aW9ucyh7c3VtOmZhbHNlLHBlcmNlbnRpbGU6WzAuNSwwLjldLH0pO2Zvcihjb25zdCBzbGljZSBvZiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKXtoaXN0b2dyYW0uYWRkU2FtcGxlKHNsaWNlW3NlbGVjdGVkS2V5XSxidWlsZERpYWdub3N0aWNzXyhzbGljZSkpO30KcmV0dXJuIGhpc3RvZ3JhbTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IHNlbGVjdGlvbj10aGlzLmN1cnJlbnRTZWxlY3Rpb25fO2lmKCFzZWxlY3Rpb24pcmV0dXJuO2NvbnN0IGV2ZW50c0J5VGl0bGU9c2VsZWN0aW9uLmdldEV2ZW50c09yZ2FuaXplZEJ5VGl0bGUoKTtjb25zdCBudW1UaXRsZXM9T2JqZWN0LmtleXMoZXZlbnRzQnlUaXRsZSkubGVuZ3RoO3RoaXMuJC5ldmVudFN1bW1hcnlUYWJsZS5jb25maWd1cmUoe3Nob3dUb3RhbHM6bnVtVGl0bGVzPjEsZXZlbnRzQnlUaXRsZSxldmVudHNIYXZlRHVyYXRpb246dGhpcy5ldmVudHNIYXZlRHVyYXRpb25fLGV2ZW50c0hhdmVTdWJSb3dzOnRoaXMuZXZlbnRzSGF2ZVN1YlJvd3NffSk7dGhpcy4kLnNlbGVjdGlvblN1bW1hcnlUYWJsZS5zZWxlY3Rpb249dGhpcy5jdXJyZW50U2VsZWN0aW9uXztpZihudW1UaXRsZXM9PT0xKXt0aGlzLiQucmFkaW9QaWNrZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5oaXN0b2dyYW1Db250YWluZXIuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy4kLmhpc3RvZ3JhbVNwYW4uYnVpbGQodGhpcy5idWlsZEhpc3RvZ3JhbV8odGhpcy4kLnJhZGlvUGlja2VyLnNlbGVjdGVkS2V5KSk7aWYodGhpcy4kLmhpc3RvZ3JhbVNwYW4uaGlzdG9ncmFtLm51bVZhbHVlcz09PTApe3RoaXMuJC5oaXN0b2dyYW1Db250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX1lbHNle3RoaXMuJC5yYWRpb1BpY2tlci5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuaGlzdG9ncmFtQ29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J25vbmUnO319fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5hbmFseXNpcycsZnVuY3Rpb24oKXtjb25zdCBGTE9XX0lOPTB4MTtjb25zdCBGTE9XX09VVD0weDI7Y29uc3QgRkxPV19JTl9PVVQ9RkxPV19JTnxGTE9XX09VVDtmdW5jdGlvbiBGbG93Q2xhc3NpZmllcigpe3RoaXMubnVtRXZlbnRzXz0wO3RoaXMuZXZlbnRzQnlHVUlEXz17fTt9CkZsb3dDbGFzc2lmaWVyLnByb3RvdHlwZT17Z2V0RlNfKGV2ZW50KXtsZXQgZnM9dGhpcy5ldmVudHNCeUdVSURfW2V2ZW50Lmd1aWRdO2lmKGZzPT09dW5kZWZpbmVkKXt0aGlzLm51bUV2ZW50c18rKztmcz17c3RhdGU6MCxldmVudH07dGhpcy5ldmVudHNCeUdVSURfW2V2ZW50Lmd1aWRdPWZzO30KcmV0dXJuIGZzO30sYWRkSW5GbG93KGV2ZW50KXtjb25zdCBmcz10aGlzLmdldEZTXyhldmVudCk7ZnMuc3RhdGV8PUZMT1dfSU47cmV0dXJuIGV2ZW50O30sYWRkT3V0RmxvdyhldmVudCl7Y29uc3QgZnM9dGhpcy5nZXRGU18oZXZlbnQpO2ZzLnN0YXRlfD1GTE9XX09VVDtyZXR1cm4gZXZlbnQ7fSxoYXNFdmVudHMoKXtyZXR1cm4gdGhpcy5udW1FdmVudHNfPjA7fSxnZXQgaW5GbG93RXZlbnRzKCl7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBndWlkIGluIHRoaXMuZXZlbnRzQnlHVUlEXyl7Y29uc3QgZnM9dGhpcy5ldmVudHNCeUdVSURfW2d1aWRdO2lmKGZzLnN0YXRlPT09RkxPV19JTil7c2VsZWN0aW9uLnB1c2goZnMuZXZlbnQpO319CnJldHVybiBzZWxlY3Rpb247fSxnZXQgb3V0Rmxvd0V2ZW50cygpe2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtmb3IoY29uc3QgZ3VpZCBpbiB0aGlzLmV2ZW50c0J5R1VJRF8pe2NvbnN0IGZzPXRoaXMuZXZlbnRzQnlHVUlEX1tndWlkXTtpZihmcy5zdGF0ZT09PUZMT1dfT1VUKXtzZWxlY3Rpb24ucHVzaChmcy5ldmVudCk7fX0KcmV0dXJuIHNlbGVjdGlvbjt9LGdldCBpbnRlcm5hbEZsb3dFdmVudHMoKXtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IGd1aWQgaW4gdGhpcy5ldmVudHNCeUdVSURfKXtjb25zdCBmcz10aGlzLmV2ZW50c0J5R1VJRF9bZ3VpZF07aWYoZnMuc3RhdGU9PT1GTE9XX0lOX09VVCl7c2VsZWN0aW9uLnB1c2goZnMuZXZlbnQpO319CnJldHVybiBzZWxlY3Rpb247fX07cmV0dXJue0Zsb3dDbGFzc2lmaWVyLH07fSk7J3VzZSBzdHJpY3QnO2Z1bmN0aW9uKmdldEV2ZW50SW5GbG93RXZlbnRzKGV2ZW50KXtpZighZXZlbnQuaW5GbG93RXZlbnRzKXJldHVybjt5aWVsZCpldmVudC5pbkZsb3dFdmVudHM7fQpmdW5jdGlvbipnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpe2lmKCFldmVudC5vdXRGbG93RXZlbnRzKXJldHVybjt5aWVsZCpldmVudC5vdXRGbG93RXZlbnRzO30KZnVuY3Rpb24qZ2V0RXZlbnRBbmNlc3RvcnMoZXZlbnQpe2lmKCFldmVudC5lbnVtZXJhdGVBbGxBbmNlc3RvcnMpcmV0dXJuO3lpZWxkKmV2ZW50LmVudW1lcmF0ZUFsbEFuY2VzdG9ycygpO30KZnVuY3Rpb24qZ2V0RXZlbnREZXNjZW5kZW50cyhldmVudCl7aWYoIWV2ZW50LmVudW1lcmF0ZUFsbERlc2NlbmRlbnRzKXJldHVybjt5aWVsZCpldmVudC5lbnVtZXJhdGVBbGxEZXNjZW5kZW50cygpO30KUG9seW1lcih7aXM6J3RyLXVpLWEtcmVsYXRlZC1ldmVudHMnLHJlYWR5KCl7dGhpcy5ldmVudEdyb3Vwc189W107dGhpcy5jYW5jZWxGdW5jdGlvbnNfPVtdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonRXZlbnQocyknLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50eXBlO2lmKHJvdy50b29sdGlwKXt0eXBlRWwudGl0bGU9cm93LnRvb2x0aXA7fQpyZXR1cm4gdHlwZUVsO30sd2lkdGg6JzE1MHB4J30se3RpdGxlOidMaW5rJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7aWYocm93Lm5hbWUpe2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHJvdy5zZWxlY3Rpb24scm93Lm5hbWUpO31lbHNle2xpbmtFbC5zZWxlY3Rpb249cm93LnNlbGVjdGlvbjt9CnJldHVybiBsaW5rRWw7fX1dO30saGFzUmVsYXRlZEV2ZW50cygpe3JldHVybih0aGlzLmV2ZW50R3JvdXBzXyYmdGhpcy5ldmVudEdyb3Vwc18ubGVuZ3RoPjApO30sc2V0UmVsYXRlZEV2ZW50cyhldmVudFNldCl7dGhpcy5jYW5jZWxBbGxUYXNrc18oKTt0aGlzLmV2ZW50R3JvdXBzXz1bXTt0aGlzLmFkZFJ1bnRpbWVDYWxsU3RhdHNfKGV2ZW50U2V0KTt0aGlzLmFkZE92ZXJsYXBwaW5nVjhJQ1N0YXRzXyhldmVudFNldCk7dGhpcy5hZGRWOEdDT2JqZWN0U3RhdHNfKGV2ZW50U2V0KTt0aGlzLmFkZFY4U2xpY2VzXyhldmVudFNldCk7dGhpcy5hZGRDb25uZWN0ZWRGbG93c18oZXZlbnRTZXQpO3RoaXMuYWRkQ29ubmVjdGVkRXZlbnRzXyhldmVudFNldCk7dGhpcy5hZGRPdmVybGFwcGluZ1NhbXBsZXNfKGV2ZW50U2V0KTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sYWRkQ29ubmVjdGVkRmxvd3NfKGV2ZW50U2V0KXtjb25zdCBjbGFzc2lmaWVyPW5ldyB0ci51aS5hbmFseXNpcy5GbG93Q2xhc3NpZmllcigpO2V2ZW50U2V0LmZvckVhY2goZnVuY3Rpb24oc2xpY2Upe2lmKHNsaWNlLmluRmxvd0V2ZW50cyl7c2xpY2UuaW5GbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvdyl7Y2xhc3NpZmllci5hZGRJbkZsb3coZmxvdyk7fSk7fQppZihzbGljZS5vdXRGbG93RXZlbnRzKXtzbGljZS5vdXRGbG93RXZlbnRzLmZvckVhY2goZnVuY3Rpb24oZmxvdyl7Y2xhc3NpZmllci5hZGRPdXRGbG93KGZsb3cpO30pO319KTtpZighY2xhc3NpZmllci5oYXNFdmVudHMoKSlyZXR1cm47Y29uc3QgYWRkVG9FdmVudEdyb3Vwcz1mdW5jdGlvbih0eXBlLGZsb3dFdmVudCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZSxzZWxlY3Rpb246bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGZsb3dFdmVudCksbmFtZTpmbG93RXZlbnQudGl0bGV9KTt9O2NsYXNzaWZpZXIuaW5GbG93RXZlbnRzLmZvckVhY2goYWRkVG9FdmVudEdyb3Vwcy5iaW5kKHRoaXMsJ0luY29taW5nIGZsb3cnKSk7Y2xhc3NpZmllci5vdXRGbG93RXZlbnRzLmZvckVhY2goYWRkVG9FdmVudEdyb3Vwcy5iaW5kKHRoaXMsJ091dGdvaW5nIGZsb3cnKSk7Y2xhc3NpZmllci5pbnRlcm5hbEZsb3dFdmVudHMuZm9yRWFjaChhZGRUb0V2ZW50R3JvdXBzLmJpbmQodGhpcywnSW50ZXJuYWwgZmxvdycpKTt9LGNhbmNlbEFsbFRhc2tzXygpe3RoaXMuY2FuY2VsRnVuY3Rpb25zXy5mb3JFYWNoKGZ1bmN0aW9uKGNhbmNlbEZ1bmN0aW9uKXtjYW5jZWxGdW5jdGlvbigpO30pO3RoaXMuY2FuY2VsRnVuY3Rpb25zXz1bXTt9LGFkZENvbm5lY3RlZEV2ZW50c18oZXZlbnRTZXQpe3RoaXMuY2FuY2VsRnVuY3Rpb25zXy5wdXNoKHRoaXMuY3JlYXRlRXZlbnRzTGlua0lmTmVlZGVkXygnUHJlY2VkaW5nIGV2ZW50cycsJ0FkZCBhbGwgZXZlbnRzIHRoYXQgaGF2ZSBsZWQgdG8gdGhlIHNlbGVjdGVkIG9uZShzKSwgY29ubmVjdGVkIGJ5ICcrJ2Zsb3cgYXJyb3dzIG9yIGJ5IGNhbGwgc3RhY2suJyxldmVudFNldCxmdW5jdGlvbiooZXZlbnQpe3lpZWxkKmdldEV2ZW50SW5GbG93RXZlbnRzKGV2ZW50KTt5aWVsZCpnZXRFdmVudEFuY2VzdG9ycyhldmVudCk7aWYoZXZlbnQuc3RhcnRTbGljZSl7eWllbGQgZXZlbnQuc3RhcnRTbGljZTt9fS5iaW5kKHRoaXMpKSk7dGhpcy5jYW5jZWxGdW5jdGlvbnNfLnB1c2godGhpcy5jcmVhdGVFdmVudHNMaW5rSWZOZWVkZWRfKCdGb2xsb3dpbmcgZXZlbnRzJywnQWRkIGFsbCBldmVudHMgdGhhdCBoYXZlIGJlZW4gY2F1c2VkIGJ5IHRoZSBzZWxlY3RlZCBvbmUocyksICcrJ2Nvbm5lY3RlZCBieSBmbG93IGFycm93cyBvciBieSBjYWxsIHN0YWNrLicsZXZlbnRTZXQsZnVuY3Rpb24qKGV2ZW50KXt5aWVsZCpnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpO3lpZWxkKmdldEV2ZW50RGVzY2VuZGVudHMoZXZlbnQpO2lmKGV2ZW50LmVuZFNsaWNlKXt5aWVsZCBldmVudC5lbmRTbGljZTt9fS5iaW5kKHRoaXMpKSk7dGhpcy5jYW5jZWxGdW5jdGlvbnNfLnB1c2godGhpcy5jcmVhdGVFdmVudHNMaW5rSWZOZWVkZWRfKCdBbGwgY29ubmVjdGVkIGV2ZW50cycsJ0FkZCBhbGwgZXZlbnRzIGNvbm5lY3RlZCB0byB0aGUgc2VsZWN0ZWQgb25lKHMpIGJ5IGZsb3cgYXJyb3dzIG9yICcrJ2J5IGNhbGwgc3RhY2suJyxldmVudFNldCxmdW5jdGlvbiooZXZlbnQpe3lpZWxkKmdldEV2ZW50SW5GbG93RXZlbnRzKGV2ZW50KTt5aWVsZCpnZXRFdmVudE91dEZsb3dFdmVudHMoZXZlbnQpO3lpZWxkKmdldEV2ZW50QW5jZXN0b3JzKGV2ZW50KTt5aWVsZCpnZXRFdmVudERlc2NlbmRlbnRzKGV2ZW50KTtpZihldmVudC5zdGFydFNsaWNlKXt5aWVsZCBldmVudC5zdGFydFNsaWNlO30KaWYoZXZlbnQuZW5kU2xpY2Upe3lpZWxkIGV2ZW50LmVuZFNsaWNlO319LmJpbmQodGhpcykpKTt9LGNyZWF0ZUV2ZW50c0xpbmtJZk5lZWRlZF8odGl0bGUsdG9vbHRpcCxldmVudHMsY29ubmVjdGVkRm4pe2V2ZW50cz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoZXZlbnRzKTtjb25zdCBldmVudHNUb1Byb2Nlc3M9bmV3IFNldChldmVudHMpO2xldCB3YXNDaGFuZ2VkPWZhbHNlO2xldCB0YXNrO2xldCBpc0NhbmNlbGVkPWZhbHNlO2Z1bmN0aW9uIGFkZEV2ZW50c1VudGlsVGltZW91dCgpe2lmKGlzQ2FuY2VsZWQpcmV0dXJuO2NvbnN0IHRpbWVvdXQ9d2luZG93LnBlcmZvcm1hbmNlLm5vdygpKzg7d2hpbGUoZXZlbnRzVG9Qcm9jZXNzLnNpemU+MCYmd2luZG93LnBlcmZvcm1hbmNlLm5vdygpPD10aW1lb3V0KXtjb25zdCBuZXh0RXZlbnQ9dHIuYi5nZXRGaXJzdEVsZW1lbnQoZXZlbnRzVG9Qcm9jZXNzKTtldmVudHNUb1Byb2Nlc3MuZGVsZXRlKG5leHRFdmVudCk7Zm9yKGNvbnN0IGV2ZW50VG9BZGQgb2YgY29ubmVjdGVkRm4obmV4dEV2ZW50KSl7aWYoIWV2ZW50cy5jb250YWlucyhldmVudFRvQWRkKSl7ZXZlbnRzLnB1c2goZXZlbnRUb0FkZCk7ZXZlbnRzVG9Qcm9jZXNzLmFkZChldmVudFRvQWRkKTt3YXNDaGFuZ2VkPXRydWU7fX19CmlmKGV2ZW50c1RvUHJvY2Vzcy5zaXplPjApe2NvbnN0IG5ld1Rhc2s9bmV3IHRyLmIuVGFzayhhZGRFdmVudHNVbnRpbFRpbWVvdXQuYmluZCh0aGlzKSx0aGlzKTt0YXNrLmFmdGVyKG5ld1Rhc2spO3Rhc2s9bmV3VGFzaztyZXR1cm47fQppZighd2FzQ2hhbmdlZClyZXR1cm47dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTp0aXRsZSx0b29sdGlwLHNlbGVjdGlvbjpldmVudHN9KTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30KZnVuY3Rpb24gY2FuY2VsVGFzaygpe2lzQ2FuY2VsZWQ9dHJ1ZTt9CnRhc2s9bmV3IHRyLmIuVGFzayhhZGRFdmVudHNVbnRpbFRpbWVvdXQuYmluZCh0aGlzKSx0aGlzKTt0ci5iLlRhc2suUnVuV2hlbklkbGUodGFzayk7cmV0dXJuIGNhbmNlbFRhc2s7fSxhZGRPdmVybGFwcGluZ1NhbXBsZXNfKGV2ZW50U2V0KXtjb25zdCBzYW1wbGVzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBzbGljZSBvZiBldmVudFNldCl7aWYoIXNsaWNlLnBhcmVudENvbnRhaW5lcnx8IXNsaWNlLnBhcmVudENvbnRhaW5lci5zYW1wbGVzKXtjb250aW51ZTt9CmNvbnN0IGNhbmRpZGF0ZXM9c2xpY2UucGFyZW50Q29udGFpbmVyLnNhbXBsZXM7Y29uc3QgcmFuZ2U9dHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKHNsaWNlLnN0YXJ0LHNsaWNlLnN0YXJ0K3NsaWNlLmR1cmF0aW9uKTtjb25zdCBmaWx0ZXJlZFNhbXBsZXM9cmFuZ2UuZmlsdGVyQXJyYXkoY2FuZGlkYXRlcyxmdW5jdGlvbih2YWx1ZSl7cmV0dXJuIHZhbHVlLnN0YXJ0O30pO2Zvcihjb25zdCBzYW1wbGUgb2YgZmlsdGVyZWRTYW1wbGVzKXtzYW1wbGVzLnB1c2goc2FtcGxlKTt9fQppZihzYW1wbGVzLmxlbmd0aD4wKXt0aGlzLmV2ZW50R3JvdXBzXy5wdXNoKHt0eXBlOidPdmVybGFwcGluZyBzYW1wbGVzJyx0b29sdGlwOidBbGwgc2FtcGxlcyBvdmVybGFwcGluZyB0aGUgc2VsZWN0ZWQgc2xpY2UocykuJyxzZWxlY3Rpb246c2FtcGxlc30pO319LGFkZFY4U2xpY2VzXyhldmVudFNldCl7Y29uc3QgdjhTbGljZXM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IHNsaWNlIG9mIGV2ZW50U2V0KXtpZihzbGljZS5jYXRlZ29yeT09PSd2OCcpe3Y4U2xpY2VzLnB1c2goc2xpY2UpO319CmlmKHY4U2xpY2VzLmxlbmd0aD4wKXt0aGlzLmV2ZW50R3JvdXBzXy5wdXNoKHt0eXBlOidWOCBTbGljZXMnLHRvb2x0aXA6J0FsbCBWOCBzbGljZXMgaW4gdGhlIHNlbGVjdGVkIHNsaWNlKHMpLicsc2VsZWN0aW9uOnY4U2xpY2VzfSk7fX0sYWRkUnVudGltZUNhbGxTdGF0c18oZXZlbnRTZXQpe2NvbnN0IHNsaWNlcz1ldmVudFNldC5maWx0ZXIoZnVuY3Rpb24oc2xpY2Upe3JldHVybihzbGljZS5jYXRlZ29yeT09PSd2OCd8fHNsaWNlLmNhdGVnb3J5PT09J2Rpc2FibGVkLWJ5LWRlZmF1bHQtdjgucnVudGltZV9zdGF0cycpJiZzbGljZS5ydW50aW1lQ2FsbFN0YXRzO30pO2lmKHNsaWNlcy5sZW5ndGg+MCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTonUnVudGltZSBjYWxsIHN0YXRzIHRhYmxlJyx0b29sdGlwOidBbGwgVjggc2xpY2VzIGNvbnRhaW5pbmcgcnVudGltZSBjYWxsIHN0YXRzIHRhYmxlIGluIHRoZSBzZWxlY3RlZCBzbGljZShzKS4nLHNlbGVjdGlvbjpzbGljZXN9KTt9fSxhZGRWOEdDT2JqZWN0U3RhdHNfKGV2ZW50U2V0KXtjb25zdCBzbGljZXM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGNvbnN0IHNsaWNlIG9mIGV2ZW50U2V0KXtpZihzbGljZS50aXRsZT09PSdWOC5HQ19PYmplY3RzX1N0YXRzJyl7c2xpY2VzLnB1c2goc2xpY2UpO319CmlmKHNsaWNlcy5sZW5ndGg+MCl7dGhpcy5ldmVudEdyb3Vwc18ucHVzaCh7dHlwZTonVjggR0Mgc3RhdHMgdGFibGUnLHRvb2x0aXA6J0FsbCBWOCBHQyBzdGF0aXN0aWNzIHNsaWNlcyBpbiB0aGUgc2VsZWN0ZWQgc2V0Licsc2VsZWN0aW9uOnNsaWNlc30pO319LGFkZE92ZXJsYXBwaW5nVjhJQ1N0YXRzXyhldmVudFNldCl7Y29uc3Qgc2xpY2VzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2Zvcihjb25zdCBzbGljZSBvZiBldmVudFNldCl7aWYoIXNsaWNlLnBhcmVudENvbnRhaW5lcnx8IXNsaWNlLnBhcmVudENvbnRhaW5lci5zbGljZUdyb3VwKXtjb250aW51ZTt9CmNvbnN0IHNsaWNlR3JvdXA9c2xpY2UucGFyZW50Q29udGFpbmVyLnNsaWNlR3JvdXAuc2xpY2VzO2NvbnN0IHJhbmdlPXRyLmIubWF0aC5SYW5nZS5mcm9tRXhwbGljaXRSYW5nZShzbGljZS5zdGFydCxzbGljZS5zdGFydCtzbGljZS5kdXJhdGlvbik7Y29uc3QgZmlsdGVyZWRTbGljZXM9cmFuZ2UuZmlsdGVyQXJyYXkoc2xpY2VHcm91cCx2YWx1ZT0+dmFsdWUuc3RhcnQpO2NvbnN0IGljU2xpY2VzPWZpbHRlcmVkU2xpY2VzLmZpbHRlcih4PT54LnRpdGxlPT09J1Y4LklDU3RhdHMnKTtmb3IoY29uc3QgaWNTbGljZSBvZiBpY1NsaWNlcyl7c2xpY2VzLnB1c2goaWNTbGljZSk7fX0KaWYoc2xpY2VzLmxlbmd0aD4wKXt0aGlzLmV2ZW50R3JvdXBzXy5wdXNoKHt0eXBlOidPdmVybGFwcGluZyBWOCBJQyBzdGF0cycsdG9vbHRpcDonQWxsIFY4IElDIHN0YXRpc3RpY3Mgb3ZlcmxhcHBpbmcgdGhlIHNlbGVjdGVkIHNldC4nLHNlbGVjdGlvbjpzbGljZXN9KTt9fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCB0YWJsZT10aGlzLiQudGFibGU7aWYodGhpcy5ldmVudEdyb3Vwc189PT11bmRlZmluZWQpe3RhYmxlLnRhYmxlUm93cz1bXTt9ZWxzZXt0YWJsZS50YWJsZVJvd3M9dGhpcy5ldmVudEdyb3Vwc18uc2xpY2UoKTt9CnRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWFzeW5jLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uPXNlbGVjdGlvbjt0aGlzLiQucmVsYXRlZEV2ZW50cy5zZXRSZWxhdGVkRXZlbnRzKHNlbGVjdGlvbik7aWYodGhpcy4kLnJlbGF0ZWRFdmVudHMuaGFzUmVsYXRlZEV2ZW50cygpKXt0aGlzLiQucmVsYXRlZEV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3RoaXMuJC5jb250ZW50LnNlbGVjdGlvbi5mb3JFYWNoKGZ1bmN0aW9uKGFzeW5jRXZlbnQpe2lmKCFhc3luY0V2ZW50LmFzc29jaWF0ZWRFdmVudHMpcmV0dXJuO2FzeW5jRXZlbnQuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7fSk7fSk7aWYoc2VsZWN0aW9uLmxlbmd0aClyZXR1cm4gc2VsZWN0aW9uO3JldHVybiB1bmRlZmluZWQ7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1hc3luYy1zbGljZS1zdWItdmlldycsdHIubW9kZWwuQXN5bmNTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonQXN5bmMgU2xpY2VzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktY3B1LXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5jb250ZW50LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktY3B1LXNsaWNlLXN1Yi12aWV3Jyx0ci5tb2RlbC5DcHVTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonQ1BVIFNsaWNlcycsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLWZsb3ctZXZlbnQtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuJC5jb250ZW50LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQuY29udGVudC5zZWxlY3Rpb249c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1mbG93LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5GbG93RXZlbnQse211bHRpOnRydWUsdGl0bGU6J0Zsb3cgRXZlbnRzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktZnJhbWUtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxjcmVhdGVkKCl7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz11bmRlZmluZWQ7fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7UG9seW1lci5kb20odGhpcykudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldycpO3JlYWxWaWV3LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTtyZWFsVmlldy5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChyZWFsVmlldyk7cmVhbFZpZXcuc2V0U2VsZWN0aW9uV2l0aG91dEVycm9yQ2hlY2tzKHNlbGVjdGlvbik7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxnZXQgcmVsYXRlZEV2ZW50c1RvSGlnaGxpZ2h0KCl7aWYoIXRoaXMuY3VycmVudFNlbGVjdGlvbl8pcmV0dXJuIHVuZGVmaW5lZDtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5jdXJyZW50U2VsZWN0aW9uXy5mb3JFYWNoKGZ1bmN0aW9uKGZyYW1lRXZlbnQpe2ZyYW1lRXZlbnQuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7fSk7fSk7cmV0dXJuIHNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLWZyYW1lLXN1Yi12aWV3Jyx0ci5tb2RlbC5GcmFtZSx7bXVsdGk6dHJ1ZSx0aXRsZTonRnJhbWVzJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktaW5zdGFudC1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1tdWx0aS1ldmVudC1zdWItdmlldycpO3JlYWxWaWV3LmV2ZW50c0hhdmVEdXJhdGlvbj1mYWxzZTtyZWFsVmlldy5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQocmVhbFZpZXcpO3JlYWxWaWV3LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktb2JqZWN0LXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQuY29udGVudC5zaG93SGVhZGVyPWZhbHNlO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO2NvbnN0IG9iamVjdEV2ZW50cz1BcnJheS5mcm9tKHNlbGVjdGlvbikuc29ydCh0ci5iLm1hdGguUmFuZ2UuY29tcGFyZUJ5TWluVGltZXMpO2NvbnN0IHRpbWVTcGFuQ29uZmlnPXt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyxvd25lckRvY3VtZW50OnRoaXMub3duZXJEb2N1bWVudH07Y29uc3QgdGFibGU9dGhpcy4kLmNvbnRlbnQ7dGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J0ZpcnN0Jyx2YWx1ZShldmVudCl7aWYoZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihldmVudC50cyx0aW1lU3BhbkNvbmZpZyk7fQpjb25zdCBzcGFuRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKGV2ZW50LmNyZWF0aW9uVHMsdGltZVNwYW5Db25maWcpKTtQb2x5bWVyLmRvbShzcGFuRWwpLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlU3Bhbih7dGV4dENvbnRlbnQ6Jy0nLG1hcmdpbkxlZnQ6JzRweCcsbWFyZ2luUmlnaHQ6JzRweCd9KSk7aWYoZXZlbnQuZGVsZXRpb25UcyE9PU51bWJlci5NQVhfVkFMVUUpe1BvbHltZXIuZG9tKHNwYW5FbCkuYXBwZW5kQ2hpbGQodHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKGV2ZW50LmRlbGV0aW9uVHMsdGltZVNwYW5Db25maWcpKTt9CnJldHVybiBzcGFuRWw7fSx3aWR0aDonMjAwcHgnfSx7dGl0bGU6J1NlY29uZCcsdmFsdWUoZXZlbnQpe2NvbnN0IGxpbmtFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChmdW5jdGlvbigpe3JldHVybiBuZXcgdHIubW9kZWwuRXZlbnRTZXQoZXZlbnQpO30sZXZlbnQudXNlckZyaWVuZGx5TmFtZSk7cmV0dXJuIGxpbmtFbDt9LHdpZHRoOicxMDAlJ31dO3RhYmxlLnRhYmxlUm93cz1vYmplY3RFdmVudHM7dGFibGUucmVidWlsZCgpO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktb2JqZWN0LXN1Yi12aWV3Jyx0ci5tb2RlbC5PYmplY3RJbnN0YW5jZSx7bXVsdGk6dHJ1ZSx0aXRsZTonT2JqZWN0IEluc3RhbmNlcycsfSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLW9iamVjdC1zdWItdmlldycsdHIubW9kZWwuT2JqZWN0U25hcHNob3Qse211bHRpOnRydWUsdGl0bGU6J09iamVjdCBTbmFwc2hvdHMnLH0pOyd1c2Ugc3RyaWN0Jztjb25zdCBFdmVudFNldD10ci5tb2RlbC5FdmVudFNldDtjb25zdCBDSEFSVF9USVRMRT0nUG93ZXIgKFcpIGJ5IG1zIHNpbmNlIHZlcnRpY2FsIHN5bmMnO1BvbHltZXIoe2lzOid0ci11aS1hLWZyYW1lLXBvd2VyLXVzYWdlLWNoYXJ0JyxyZWFkeSgpe3RoaXMuY2hhcnRfPXVuZGVmaW5lZDt0aGlzLnNhbXBsZXNfPW5ldyBFdmVudFNldCgpO3RoaXMudlN5bmNUaW1lc3RhbXBzXz1bXTt9LGF0dGFjaGVkKCl7aWYodGhpcy5zYW1wbGVzXyl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGNoYXJ0KCl7cmV0dXJuIHRoaXMuY2hhcnRfO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LGdldCB2U3luY1RpbWVzdGFtcHMoKXtyZXR1cm4gdGhpcy52U3luY1RpbWVzdGFtcHNfO30sc2V0RGF0YShzYW1wbGVzLHZTeW5jVGltZXN0YW1wcyl7dGhpcy5zYW1wbGVzXz0oc2FtcGxlcz09PXVuZGVmaW5lZCk/bmV3IEV2ZW50U2V0KCk6c2FtcGxlczt0aGlzLnZTeW5jVGltZXN0YW1wc189KHZTeW5jVGltZXN0YW1wcz09PXVuZGVmaW5lZCk/W106dlN5bmNUaW1lc3RhbXBzO2lmKHRoaXMuaXNBdHRhY2hlZCl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhckNoYXJ0XygpO2NvbnN0IGRhdGE9dGhpcy5nZXREYXRhRm9yTGluZUNoYXJ0XygpO2lmKGRhdGEubGVuZ3RoPT09MClyZXR1cm47dGhpcy5jaGFydF89bmV3IHRyLnVpLmIuTGluZUNoYXJ0KCk7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKHRoaXMuY2hhcnRfKTt0aGlzLmNoYXJ0Xy5jaGFydFRpdGxlPUNIQVJUX1RJVExFO3RoaXMuY2hhcnRfLmRhdGE9ZGF0YTt9LGNsZWFyQ2hhcnRfKCl7Y29uc3QgY29udGVudD10aGlzLiQuY29udGVudDt3aGlsZShQb2x5bWVyLmRvbShjb250ZW50KS5maXJzdENoaWxkKXtQb2x5bWVyLmRvbShjb250ZW50KS5yZW1vdmVDaGlsZChQb2x5bWVyLmRvbShjb250ZW50KS5maXJzdENoaWxkKTt9CnRoaXMuY2hhcnRfPXVuZGVmaW5lZDt9LGdldERhdGFGb3JMaW5lQ2hhcnRfKCl7Y29uc3Qgc29ydGVkU2FtcGxlcz10aGlzLnNvcnRTYW1wbGVzQnlUaW1lc3RhbXBBc2NlbmRpbmdfKHRoaXMuc2FtcGxlcyk7Y29uc3QgdlN5bmNUaW1lc3RhbXBzPXRoaXMudlN5bmNUaW1lc3RhbXBzLnNsaWNlKCk7bGV0IGxhc3RWU3luY1RpbWVzdGFtcD11bmRlZmluZWQ7Y29uc3QgcG9pbnRzPVtdO2xldCBmcmFtZU51bWJlcj0wO3NvcnRlZFNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe3doaWxlKHZTeW5jVGltZXN0YW1wcy5sZW5ndGg+MCYmdlN5bmNUaW1lc3RhbXBzWzBdPD1zYW1wbGUuc3RhcnQpe2xhc3RWU3luY1RpbWVzdGFtcD12U3luY1RpbWVzdGFtcHMuc2hpZnQoKTtmcmFtZU51bWJlcisrO30KaWYobGFzdFZTeW5jVGltZXN0YW1wPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBwb2ludD17eDpzYW1wbGUuc3RhcnQtbGFzdFZTeW5jVGltZXN0YW1wfTtwb2ludFsnZicrZnJhbWVOdW1iZXJdPXNhbXBsZS5wb3dlckluVztwb2ludHMucHVzaChwb2ludCk7fSk7cmV0dXJuIHBvaW50czt9LHNvcnRTYW1wbGVzQnlUaW1lc3RhbXBBc2NlbmRpbmdfKHNhbXBsZXMpe3JldHVybiBzYW1wbGVzLnRvQXJyYXkoKS5zb3J0KGZ1bmN0aW9uKHNtcGwxLHNtcGwyKXtyZXR1cm4gc21wbDEuc3RhcnQtc21wbDIuc3RhcnQ7fSk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1wb3dlci1zYW1wbGUtc3VtbWFyeS10YWJsZScscmVhZHkoKXt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPVt7dGl0bGU6J01pbiBwb3dlcicsd2lkdGg6JzEwMHB4Jyx2YWx1ZShyb3cpe3JldHVybiB0ci5iLlVuaXQuYnlOYW1lLnBvd2VySW5XYXR0cy5mb3JtYXQocm93Lm1pbik7fX0se3RpdGxlOidNYXggcG93ZXInLHdpZHRoOicxMDBweCcsdmFsdWUocm93KXtyZXR1cm4gdHIuYi5Vbml0LmJ5TmFtZS5wb3dlckluV2F0dHMuZm9ybWF0KHJvdy5tYXgpO319LHt0aXRsZTonVGltZS13ZWlnaHRlZCBhdmVyYWdlJyx3aWR0aDonMTAwcHgnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLmIuVW5pdC5ieU5hbWUucG93ZXJJbldhdHRzLmZvcm1hdChyb3cudGltZVdlaWdodGVkQXZlcmFnZUluVyk7fX0se3RpdGxlOidFbmVyZ3kgY29uc3VtZWQnLHdpZHRoOicxMDBweCcsdmFsdWUocm93KXtyZXR1cm4gdHIuYi5Vbml0LmJ5TmFtZS5lbmVyZ3lJbkpvdWxlcy5mb3JtYXQocm93LmVuZXJneUNvbnN1bWVkSW5KKTt9fSx7dGl0bGU6J1NhbXBsZSBjb3VudCcsd2lkdGg6JzEwMCUnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5zYW1wbGVDb3VudDt9fV07dGhpcy5zYW1wbGVzPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5zYW1wbGVzXzt9LHNldCBzYW1wbGVzKHNhbXBsZXMpe2lmKHNhbXBsZXM9PT10aGlzLnNhbXBsZXMpcmV0dXJuO3RoaXMuc2FtcGxlc189KHNhbXBsZXM9PT11bmRlZmluZWQpP25ldyB0ci5tb2RlbC5FdmVudFNldCgpOnNhbXBsZXM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMuc2FtcGxlcy5sZW5ndGg9PT0wKXt0aGlzLiQudGFibGUudGFibGVSb3dzPVtdO31lbHNle3RoaXMuJC50YWJsZS50YWJsZVJvd3M9W3ttaW46dGhpcy5nZXRNaW4oKSxtYXg6dGhpcy5nZXRNYXgoKSx0aW1lV2VpZ2h0ZWRBdmVyYWdlSW5XOnRoaXMuZ2V0VGltZVdlaWdodGVkQXZlcmFnZUluVygpLGVuZXJneUNvbnN1bWVkSW5KOnRoaXMuZ2V0RW5lcmd5Q29uc3VtZWRJbkooKSxzYW1wbGVDb3VudDp0aGlzLnNhbXBsZXMubGVuZ3RofV07fQp0aGlzLiQudGFibGUucmVidWlsZCgpO30sZ2V0TWluKCl7cmV0dXJuIE1hdGgubWluLmFwcGx5KG51bGwsdGhpcy5zYW1wbGVzLm1hcChmdW5jdGlvbihzYW1wbGUpe3JldHVybiBzYW1wbGUucG93ZXJJblc7fSkpO30sZ2V0TWF4KCl7cmV0dXJuIE1hdGgubWF4LmFwcGx5KG51bGwsdGhpcy5zYW1wbGVzLm1hcChmdW5jdGlvbihzYW1wbGUpe3JldHVybiBzYW1wbGUucG93ZXJJblc7fSkpO30sZ2V0VGltZVdlaWdodGVkQXZlcmFnZUluVygpe2NvbnN0IGVuZXJneUNvbnN1bWVkSW5KPXRoaXMuZ2V0RW5lcmd5Q29uc3VtZWRJbkooKTtpZihlbmVyZ3lDb25zdW1lZEluSj09PSdOL0EnKXJldHVybidOL0EnO2NvbnN0IGR1cmF0aW9uSW5TPXRyLmIuY29udmVydFVuaXQodGhpcy5zYW1wbGVzLmJvdW5kcy5kdXJhdGlvbix0ci5iLlVuaXRQcmVmaXhTY2FsZS5NRVRSSUMuTUlMTEksdHIuYi5Vbml0UHJlZml4U2NhbGUuTUVUUklDLk5PTkUpO3JldHVybiBlbmVyZ3lDb25zdW1lZEluSi9kdXJhdGlvbkluUzt9LGdldEVuZXJneUNvbnN1bWVkSW5KKCl7aWYodGhpcy5zYW1wbGVzLmxlbmd0aDwyKXJldHVybidOL0EnO2NvbnN0IGJvdW5kcz10aGlzLnNhbXBsZXMuYm91bmRzO2NvbnN0IHNlcmllcz10ci5iLmdldEZpcnN0RWxlbWVudCh0aGlzLnNhbXBsZXMpLnNlcmllcztyZXR1cm4gc2VyaWVzLmdldEVuZXJneUNvbnN1bWVkSW5KKGJvdW5kcy5taW4sYm91bmRzLm1heCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1tdWx0aS1wb3dlci1zYW1wbGUtc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxyZWFkeSgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCBzYW1wbGVzPXRoaXMuc2VsZWN0aW9uO2NvbnN0IHZTeW5jVGltZXN0YW1wcz0oIXNhbXBsZXM/W106dHIuYi5nZXRGaXJzdEVsZW1lbnQoc2FtcGxlcykuc2VyaWVzLmRldmljZS52U3luY1RpbWVzdGFtcHMpO3RoaXMuJC5zdW1tYXJ5VGFibGUuc2FtcGxlcz1zYW1wbGVzO3RoaXMuJC5jaGFydC5zZXREYXRhKHRoaXMuc2VsZWN0aW9uLHZTeW5jVGltZXN0YW1wcyk7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1wb3dlci1zYW1wbGUtc3ViLXZpZXcnLHRyLm1vZGVsLlBvd2VyU2FtcGxlLHttdWx0aTp0cnVlLHRpdGxlOidQb3dlciBTYW1wbGVzJyx9KTsndXNlIHN0cmljdCc7KGZ1bmN0aW9uKCl7Y29uc3QgTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyPXRyLmIuTXVsdGlEaW1lbnNpb25hbFZpZXdCdWlsZGVyO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLXNhbXBsZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLnZpZXdPcHRpb25fPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30scmVhZHkoKXtjb25zdCB2aWV3U2VsZWN0b3I9dHIudWkuYi5jcmVhdGVTZWxlY3Rvcih0aGlzLCd2aWV3T3B0aW9uJywndHJhY2luZy51aS5hbmFseXNpcy5tdWx0aV9zYW1wbGVfc3ViX3ZpZXcnLE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9UUkVFX1ZJRVcsW3tsYWJlbDonVG9wLWRvd24gKFRyZWUpJyx2YWx1ZTpNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuVE9QX0RPV05fVFJFRV9WSUVXfSx7bGFiZWw6J1RvcC1kb3duIChIZWF2eSknLHZhbHVlOk11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WaWV3VHlwZS5UT1BfRE9XTl9IRUFWWV9WSUVXfSx7bGFiZWw6J0JvdHRvbS11cCAoSGVhdnkpJyx2YWx1ZTpNdWx0aURpbWVuc2lvbmFsVmlld0J1aWxkZXIuVmlld1R5cGUuQk9UVE9NX1VQX0hFQVZZX1ZJRVd9XSk7UG9seW1lci5kb20odGhpcy4kLmNvbnRyb2wpLmFwcGVuZENoaWxkKHZpZXdTZWxlY3Rvcik7dGhpcy4kLnRhYmxlLnNlbGVjdGlvbk1vZGU9dHIudWkuYi5UYWJsZUZvcm1hdC5TZWxlY3Rpb25Nb2RlLlJPVzt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5zZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuc2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB2aWV3T3B0aW9uKCl7cmV0dXJuIHRoaXMudmlld09wdGlvbl87fSxzZXQgdmlld09wdGlvbih2aWV3T3B0aW9uKXt0aGlzLnZpZXdPcHRpb25fPXZpZXdPcHRpb247dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGNyZWF0ZVNhbXBsaW5nU3VtbWFyeV8oc2VsZWN0aW9uLHZpZXdPcHRpb24pe2NvbnN0IGJ1aWxkZXI9bmV3IE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlcigxLDEpO2NvbnN0IHNhbXBsZXM9c2VsZWN0aW9uLmZpbHRlcihldmVudD0+ZXZlbnQgaW5zdGFuY2VvZiB0ci5tb2RlbC5TYW1wbGUpO3NhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe2J1aWxkZXIuYWRkUGF0aChbc2FtcGxlLnVzZXJGcmllbmRseVN0YWNrLnJldmVyc2UoKV0sWzFdLE11bHRpRGltZW5zaW9uYWxWaWV3QnVpbGRlci5WYWx1ZUtpbmQuU0VMRik7fSk7cmV0dXJuIGJ1aWxkZXIuYnVpbGRWaWV3KHZpZXdPcHRpb24pO30scHJvY2Vzc1NhbXBsZVJvd3NfKHJvd3Mpe2Zvcihjb25zdCByb3cgb2Ygcm93cyl7bGV0IHRpdGxlPXJvdy50aXRsZVswXTtsZXQgcmVzdWx0cz0vKC4qKSAoRGVvcHRpbWl6ZWQgcmVhc29uOiAuKikvLmV4ZWModGl0bGUpO2lmKHJlc3VsdHMhPT1udWxsKXtyb3cuZGVvcHRSZWFzb249cmVzdWx0c1syXTt0aXRsZT1yZXN1bHRzWzFdO30KcmVzdWx0cz0vKC4qKSB1cmw6ICguKikvLmV4ZWModGl0bGUpO2lmKHJlc3VsdHMhPT1udWxsKXtyb3cuZnVuY3Rpb25OYW1lPXJlc3VsdHNbMV07cm93LnVybD1yZXN1bHRzWzJdO2lmKHJvdy5mdW5jdGlvbk5hbWU9PT0nJyl7cm93LmZ1bmN0aW9uTmFtZT0nKGFub255bW91cyBmdW5jdGlvbiknO30KaWYocm93LnVybD09PScnKXtyb3cudXJsPSd1bmtub3duJzt9fWVsc2V7cm93LmZ1bmN0aW9uTmFtZT10aXRsZTtyb3cudXJsPSd1bmtub3duJzt9CnRoaXMucHJvY2Vzc1NhbXBsZVJvd3NfKHJvdy5zdWJSb3dzKTt9fSx1cGRhdGVDb250ZW50c18oKXtpZih0aGlzLnNlbGVjdGlvbj09PXVuZGVmaW5lZCl7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1bXTt0aGlzLiQudGFibGUudGFibGVSb3dzPVtdO3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7cmV0dXJuO30KY29uc3Qgc2FtcGxpbmdEYXRhPXRoaXMuY3JlYXRlU2FtcGxpbmdTdW1tYXJ5Xyh0aGlzLnNlbGVjdGlvbix0aGlzLnZpZXdPcHRpb24pO2NvbnN0IHRvdGFsPXNhbXBsaW5nRGF0YS52YWx1ZXNbMF0udG90YWw7Y29uc3QgY29sdW1ucz1bdGhpcy5jcmVhdGVQZXJjZW50Q29sdW1uXygnVG90YWwnLHRvdGFsKSx0aGlzLmNyZWF0ZVNhbXBsZXNDb2x1bW5fKCdUb3RhbCcpLHRoaXMuY3JlYXRlUGVyY2VudENvbHVtbl8oJ1NlbGYnLHRvdGFsKSx0aGlzLmNyZWF0ZVNhbXBsZXNDb2x1bW5fKCdTZWxmJykse3RpdGxlOidGdW5jdGlvbiBOYW1lJyx2YWx1ZShyb3cpe2lmKHJvdy5kZW9wdFJlYXNvbiE9PXVuZGVmaW5lZCl7Y29uc3Qgc3BhbkVsPXRyLnVpLmIuY3JlYXRlU3Bhbih7aXRhbGljOnRydWUsY29sb3I6JyNGNDQzMzYnLHRvb2x0aXA6cm93LmRlb3B0UmVhc29ufSk7c3BhbkVsLmlubmVyVGV4dD1yb3cuZnVuY3Rpb25OYW1lO3JldHVybiBzcGFuRWw7fQpyZXR1cm4gcm93LmZ1bmN0aW9uTmFtZTt9LHdpZHRoOicxNTBweCcsY21wOihhLGIpPT5hLmZ1bmN0aW9uTmFtZS5sb2NhbGVDb21wYXJlKGIuZnVuY3Rpb25OYW1lKSxzaG93RXhwYW5kQnV0dG9uczp0cnVlfSx7dGl0bGU6J0xvY2F0aW9uJyx2YWx1ZShyb3cpe3JldHVybiByb3cudXJsO30sd2lkdGg6JzI1MHB4JyxjbXA6KGEsYik9PmEudXJsLmxvY2FsZUNvbXBhcmUoYi51cmwpLH1dO3RoaXMucHJvY2Vzc1NhbXBsZVJvd3NfKHNhbXBsaW5nRGF0YS5zdWJSb3dzKTt0aGlzLiQudGFibGUudGFibGVDb2x1bW5zPWNvbHVtbnM7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD0xO3RoaXMuJC50YWJsZS5zb3J0RGVzY2VuZGluZz10cnVlO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9c2FtcGxpbmdEYXRhLnN1YlJvd3M7dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9LGNyZWF0ZVBlcmNlbnRDb2x1bW5fKHRpdGxlLHNhbXBsaW5nRGF0YVRvdGFsKXtjb25zdCBmaWVsZD10aXRsZS50b0xvd2VyQ2FzZSgpO3JldHVybnt0aXRsZTp0aXRsZSsnIHBlcmNlbnQnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cudmFsdWVzWzBdW2ZpZWxkXS9zYW1wbGluZ0RhdGFUb3RhbCx7Y3VzdG9tQ29udGV4dFJhbmdlOnRyLmIubWF0aC5SYW5nZS5QRVJDRU5UX1JBTkdFLHVuaXQ6dHIuYi5Vbml0LmJ5TmFtZS5ub3JtYWxpemVkUGVyY2VudGFnZSxjb250ZXh0OnttaW5pbXVtRnJhY3Rpb25EaWdpdHM6MixtYXhpbXVtRnJhY3Rpb25EaWdpdHM6Mn0sfSk7fSx3aWR0aDonNjBweCcsY21wOihhLGIpPT5hLnZhbHVlc1swXVtmaWVsZF0tYi52YWx1ZXNbMF1bZmllbGRdfTt9LGNyZWF0ZVNhbXBsZXNDb2x1bW5fKHRpdGxlKXtjb25zdCBmaWVsZD10aXRsZS50b0xvd2VyQ2FzZSgpO3JldHVybnt0aXRsZTp0aXRsZSsnIHNhbXBsZXMnLHZhbHVlKHJvdyl7cmV0dXJuIHRyLnYudWkuY3JlYXRlU2NhbGFyU3Bhbihyb3cudmFsdWVzWzBdW2ZpZWxkXSx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnVuaXRsZXNzTnVtYmVyLGNvbnRleHQ6e21heGltdW1GcmFjdGlvbkRpZ2l0czowfSx9KTt9LHdpZHRoOic2MHB4JyxjbXA6KGEsYik9PmEudmFsdWVzWzBdW2ZpZWxkXS1iLnZhbHVlc1swXVtmaWVsZF19O319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktc2FtcGxlLXN1Yi12aWV3Jyx0ci5tb2RlbC5TYW1wbGUse211bHRpOnRydWUsdGl0bGU6J1NhbXBsZXMnLH0pO30pKCk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLXRocmVhZC1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLnNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5zZWxlY3Rpb25fPXNlbGVjdGlvbjtpZih0ci5pc0V4cG9ydGVkKCd0ci51aS5lLmNocm9tZS5jYy5SYXN0ZXJUYXNrU2VsZWN0aW9uJykpe2lmKHRyLnVpLmUuY2hyb21lLmNjLlJhc3RlclRhc2tTZWxlY3Rpb24uc3VwcG9ydHMoc2VsZWN0aW9uKSl7Y29uc3QgbHR2U2VsZWN0aW9uPW5ldyB0ci51aS5lLmNocm9tZS5jYy5SYXN0ZXJUYXNrU2VsZWN0aW9uKHNlbGVjdGlvbik7Y29uc3QgbHR2PW5ldyB0ci51aS5lLmNocm9tZS5jYy5MYXllclRyZWVIb3N0SW1wbFNuYXBzaG90VmlldygpO2x0di5vYmplY3RTbmFwc2hvdD1sdHZTZWxlY3Rpb24uY29udGFpbmluZ1NuYXBzaG90O2x0di5zZWxlY3Rpb249bHR2U2VsZWN0aW9uO2x0di5leHRyYUhpZ2hsaWdodHNCeUxheWVySWQ9bHR2U2VsZWN0aW9uLmV4dHJhSGlnaGxpZ2h0c0J5TGF5ZXJJZDtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKGx0dik7dGhpcy5yZXF1aXJlc1RhbGxWaWV3Xz10cnVlO3JldHVybjt9fQpQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7Y29uc3QgbWVzdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLW11bHRpLWV2ZW50LXN1Yi12aWV3Jyk7bWVzdi5zZWxlY3Rpb249c2VsZWN0aW9uO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5hcHBlbmRDaGlsZChtZXN2KTtjb25zdCByZWxhdGVkRXZlbnRzPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtcmVsYXRlZC1ldmVudHMnKTtyZWxhdGVkRXZlbnRzLnNldFJlbGF0ZWRFdmVudHMoc2VsZWN0aW9uKTtpZihyZWxhdGVkRXZlbnRzLmhhc1JlbGF0ZWRFdmVudHMoKSl7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKHJlbGF0ZWRFdmVudHMpO319LGdldCByZXF1aXJlc1RhbGxWaWV3KCl7aWYodGhpcy4kLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoPT09MClyZXR1cm4gZmFsc2U7Y29uc3QgY2hpbGRUYWdOYW1lPXRoaXMuJC5jb250ZW50LmNoaWxkcmVuWzBdLnRhZ05hbWU7aWYoY2hpbGRUYWdOYW1lPT09J1RSLVVJLUEtTVVMVEktRVZFTlQtU1VCLVZJRVcnKXtyZXR1cm4gZmFsc2U7fQpyZXR1cm4gdHJ1ZTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLW11bHRpLXRocmVhZC1zbGljZS1zdWItdmlldycsdHIubW9kZWwuVGhyZWFkU2xpY2Use211bHRpOnRydWUsdGl0bGU6J1NsaWNlcycsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLW11bHRpLXRocmVhZC10aW1lLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLiQuY29udGVudC5ldmVudHNIYXZlU3ViUm93cz1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy4kLmNvbnRlbnQuc2VsZWN0aW9uO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5jb250ZW50LnNldFNlbGVjdGlvbldpdGhvdXRFcnJvckNoZWNrcyhzZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtbXVsdGktdGhyZWFkLXRpbWUtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLlRocmVhZFRpbWVTbGljZSx7bXVsdGk6dHJ1ZSx0aXRsZTonVGhyZWFkIFRpbWVzbGljZXMnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS11c2VyLWV4cGVjdGF0aW9uLXJlbGF0ZWQtc2FtcGxlcy10YWJsZScscmVhZHkoKXt0aGlzLnNhbXBsZXNfPVtdO3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonRXZlbnQocyknLHZhbHVlKHJvdyl7Y29uc3QgdHlwZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0eXBlRWwuaW5uZXJUZXh0PXJvdy50eXBlO2lmKHJvdy50b29sdGlwKXt0eXBlRWwudGl0bGU9cm93LnRvb2x0aXA7fQpyZXR1cm4gdHlwZUVsO30sd2lkdGg6JzE1MHB4J30se3RpdGxlOidMaW5rJyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtjb25zdCBsaW5rRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7aWYocm93Lm5hbWUpe2xpbmtFbC5zZXRTZWxlY3Rpb25BbmRDb250ZW50KHJvdy5zZWxlY3Rpb24scm93Lm5hbWUpO31lbHNle2xpbmtFbC5zZWxlY3Rpb249cm93LnNlbGVjdGlvbjt9CnJldHVybiBsaW5rRWw7fX1dO30saGFzUmVsYXRlZFNhbXBsZXMoKXtyZXR1cm4odGhpcy5zYW1wbGVzXyYmdGhpcy5zYW1wbGVzXy5sZW5ndGg+MCk7fSxzZXQgc2VsZWN0aW9uKGV2ZW50U2V0KXt0aGlzLnNhbXBsZXNfPVtdO2NvbnN0IHNhbXBsZXM9bmV3IHRyLm1vZGVsLkV2ZW50U2V0O2V2ZW50U2V0LmZvckVhY2goZnVuY3Rpb24odWUpe3NhbXBsZXMuYWRkRXZlbnRTZXQodWUuYXNzb2NpYXRlZFNhbXBsZXMpO30uYmluZCh0aGlzKSk7aWYoc2FtcGxlcy5sZW5ndGg+MCl7dGhpcy5zYW1wbGVzXy5wdXNoKHt0eXBlOidPdmVybGFwcGluZyBzYW1wbGVzJyx0b29sdGlwOidBbGwgc2FtcGxlcyBvdmVybGFwcGluZyB0aGUgc2VsZWN0ZWQgdXNlciBleHBlY3RhdGlvbihzKS4nLHNlbGVjdGlvbjpzYW1wbGVzfSk7fQp0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7Y29uc3QgdGFibGU9dGhpcy4kLnRhYmxlO2lmKHRoaXMuc2FtcGxlc18mJnRoaXMuc2FtcGxlc18ubGVuZ3RoPjApe3RhYmxlLnRhYmxlUm93cz10aGlzLnNhbXBsZXNfLnNsaWNlKCk7fWVsc2V7dGFibGUudGFibGVSb3dzPVtdO30KdGFibGUucmVidWlsZCgpO319KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtbXVsdGktaW50ZXJhY3Rpb24tcmVjb3JkLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMuJC5yZWFsVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLiQucmVsYXRlZFNhbXBsZXMuc2VsZWN0aW9uPXNlbGVjdGlvbjtpZih0aGlzLiQucmVsYXRlZFNhbXBsZXMuaGFzUmVsYXRlZFNhbXBsZXMoKSl7dGhpcy4kLmV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5ldmVudHMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sZ2V0IHJlbGF0ZWRFdmVudHNUb0hpZ2hsaWdodCgpe2lmKCF0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKXJldHVybiB1bmRlZmluZWQ7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3RoaXMuY3VycmVudFNlbGVjdGlvbl8uZm9yRWFjaChmdW5jdGlvbihpcil7aXIuYXNzb2NpYXRlZEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7fSk7fSk7cmV0dXJuIHNlbGVjdGlvbjt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS11c2VyLWV4cGVjdGF0aW9uLXN1Yi12aWV3Jyx0ci5tb2RlbC51bS5Vc2VyRXhwZWN0YXRpb24se211bHRpOnRydWUsdGl0bGU6J1VzZXIgRXhwZWN0YXRpb25zJyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc2luZ2xlLWFzeW5jLXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLiQuY29udGVudC5zZWxlY3Rpb247fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7aWYoc2VsZWN0aW9uLmxlbmd0aCE9PTEpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyBzaW5nbGUgc2xpY2VzJyk7fQp0aGlzLiQuY29udGVudC5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt0aGlzLiQucmVsYXRlZEV2ZW50cy5zZXRSZWxhdGVkRXZlbnRzKHNlbGVjdGlvbik7aWYodGhpcy4kLnJlbGF0ZWRFdmVudHMuaGFzUmVsYXRlZEV2ZW50cygpKXt0aGlzLiQucmVsYXRlZEV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LGdldEV2ZW50Um93c18oZXZlbnQpe2NvbnN0IHJvd3M9dGhpcy5fX3Byb3RvX18uX19wcm90b19fLmdldEV2ZW50Um93c18oZXZlbnQpO3Jvd3Muc3BsaWNlKDAsMCx7bmFtZTonSUQnLHZhbHVlOmV2ZW50LmlkfSk7cmV0dXJuIHJvd3M7fSxnZXQgcmVsYXRlZEV2ZW50c1RvSGlnaGxpZ2h0KCl7aWYoIXRoaXMuY3VycmVudFNlbGVjdGlvbl8pcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdHIuYi5nZXRPbmx5RWxlbWVudCh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKS5hc3NvY2lhdGVkRXZlbnRzO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLWFzeW5jLXNsaWNlLXN1Yi12aWV3Jyx0ci5tb2RlbC5Bc3luY1NsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonQXN5bmMgU2xpY2UnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtY3B1LXNsaWNlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2NvbnN0IGNwdVNsaWNlPXRyLmIuZ2V0T25seUVsZW1lbnQoc2VsZWN0aW9uKTtpZighKGNwdVNsaWNlIGluc3RhbmNlb2YgdHIubW9kZWwuQ3B1U2xpY2UpKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3VwcG9ydHMgdGhyZWFkIHRpbWUgc2xpY2VzJyk7fQp0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtjb25zdCB0aHJlYWQ9Y3B1U2xpY2UudGhyZWFkVGhhdFdhc1J1bm5pbmc7Y29uc3Qgcm9vdD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpO2lmKHRocmVhZCl7UG9seW1lci5kb20ocm9vdC5xdWVyeVNlbGVjdG9yKCcjcHJvY2Vzcy1uYW1lJykpLnRleHRDb250ZW50PXRocmVhZC5wYXJlbnQudXNlckZyaWVuZGx5TmFtZTtQb2x5bWVyLmRvbShyb290LnF1ZXJ5U2VsZWN0b3IoJyN0aHJlYWQtbmFtZScpKS50ZXh0Q29udGVudD10aHJlYWQudXNlckZyaWVuZGx5TmFtZTt9ZWxzZXtyb290LnF1ZXJ5U2VsZWN0b3IoJyNwcm9jZXNzLW5hbWUnKS5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXk9J25vbmUnO1BvbHltZXIuZG9tKHJvb3QucXVlcnlTZWxlY3RvcignI3RocmVhZC1uYW1lJykpLnRleHRDb250ZW50PWNwdVNsaWNlLnRpdGxlO30Kcm9vdC5xdWVyeVNlbGVjdG9yKCcjc3RhcnQnKS5zZXRWYWx1ZUFuZFVuaXQoY3B1U2xpY2Uuc3RhcnQsdHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zKTtyb290LnF1ZXJ5U2VsZWN0b3IoJyNkdXJhdGlvbicpLnNldFZhbHVlQW5kVW5pdChjcHVTbGljZS5kdXJhdGlvbix0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXMpO2NvbnN0IHJ1bm5pbmdUaHJlYWRFbD1yb290LnF1ZXJ5U2VsZWN0b3IoJyNydW5uaW5nLXRocmVhZCcpO2NvbnN0IHRpbWVTbGljZT1jcHVTbGljZS5nZXRBc3NvY2lhdGVkVGltZXNsaWNlKCk7aWYoIXRpbWVTbGljZSl7cnVubmluZ1RocmVhZEVsLnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheT0nbm9uZSc7fWVsc2V7Y29uc3QgdGhyZWFkTGluaz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTt0aHJlYWRMaW5rLnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQodGltZVNsaWNlKTtQb2x5bWVyLmRvbSh0aHJlYWRMaW5rKS50ZXh0Q29udGVudD0nQ2xpY2sgdG8gc2VsZWN0JztydW5uaW5nVGhyZWFkRWwucGFyZW50RWxlbWVudC5zdHlsZS5kaXNwbGF5PScnO1BvbHltZXIuZG9tKHJ1bm5pbmdUaHJlYWRFbCkudGV4dENvbnRlbnQ9Jyc7UG9seW1lci5kb20ocnVubmluZ1RocmVhZEVsKS5hcHBlbmRDaGlsZCh0aHJlYWRMaW5rKTt9CnJvb3QucXVlcnlTZWxlY3RvcignI2FyZ3MnKS5vYmplY3Q9Y3B1U2xpY2UuYXJnczt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS1jcHUtc2xpY2Utc3ViLXZpZXcnLHRyLm1vZGVsLkNwdVNsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonQ1BVIFNsaWNlJyx9KTsndXNlIHN0cmljdCc7ZnVuY3Rpb24gY3JlYXRlQW5hbHlzaXNMaW5rVG8oZXZlbnQpe2NvbnN0IGxpbmtFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWFuYWx5c2lzLWxpbmsnKTtsaW5rRWwuc2V0U2VsZWN0aW9uQW5kQ29udGVudChuZXcgdHIubW9kZWwuRXZlbnRTZXQoZXZlbnQpLGV2ZW50LnVzZXJGcmllbmRseU5hbWUpO3JldHVybiBsaW5rRWw7fQpQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtZmxvdy1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGxpc3RlbmVyczp7J3NpbmdsZUV2ZW50U3ViVmlldy5jdXN0b21pemUtcm93cyc6J29uQ3VzdG9taXplUm93c18nfSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247dGhpcy4kLnNpbmdsZUV2ZW50U3ViVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LG9uQ3VzdG9taXplUm93c18oZSl7Y29uc3QgZXZlbnQ9dHIuYi5nZXRPbmx5RWxlbWVudCh0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKTtjb25zdCByb3dzPWUucm93cztyb3dzLnVuc2hpZnQoe25hbWU6J0lEJyx2YWx1ZTpldmVudC5pZH0pO3Jvd3MucHVzaCh7bmFtZTonRnJvbScsdmFsdWU6Y3JlYXRlQW5hbHlzaXNMaW5rVG8oZXZlbnQuc3RhcnRTbGljZSl9KTtyb3dzLnB1c2goe25hbWU6J1RvJyx2YWx1ZTpjcmVhdGVBbmFseXNpc0xpbmtUbyhldmVudC5lbmRTbGljZSl9KTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS1mbG93LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5GbG93RXZlbnQse211bHRpOmZhbHNlLHRpdGxlOidGbG93IEV2ZW50Jyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc2luZ2xlLWZyYW1lLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLiQuYXN2LnNlbGVjdGlvbj10ci5iLmdldE9ubHlFbGVtZW50KHNlbGVjdGlvbikuYXNzb2NpYXRlZEFsZXJ0czt9LGdldCByZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQoKXtpZighdGhpcy5jdXJyZW50U2VsZWN0aW9uXylyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0ci5iLmdldE9ubHlFbGVtZW50KHRoaXMuY3VycmVudFNlbGVjdGlvbl8pLmFzc29jaWF0ZWRFdmVudHM7fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtZnJhbWUtc3ViLXZpZXcnLHRyLm1vZGVsLkZyYW1lLHttdWx0aTpmYWxzZSx0aXRsZTonRnJhbWUnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtaW5zdGFudC1ldmVudC1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkudGV4dENvbnRlbnQ9Jyc7Y29uc3QgcmVhbFZpZXc9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1zaW5nbGUtZXZlbnQtc3ViLXZpZXcnKTtyZWFsVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTtQb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkuYXBwZW5kQ2hpbGQocmVhbFZpZXcpO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLWluc3RhbnQtZXZlbnQtc3ViLXZpZXcnLHRyLm1vZGVsLkluc3RhbnRFdmVudCx7bXVsdGk6ZmFsc2UsdGl0bGU6J0luc3RhbnQgRXZlbnQnLH0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1tdWx0aS1pbnN0YW50LWV2ZW50LXN1Yi12aWV3Jyx0ci5tb2RlbC5JbnN0YW50RXZlbnQse211bHRpOnRydWUsdGl0bGU6J0luc3RhbnQgRXZlbnRzJyx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmFuYWx5c2lzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdEluc3RhbmNlVmlldz10ci51aS5iLmRlZmluZSgnb2JqZWN0LWluc3RhbmNlLXZpZXcnKTtPYmplY3RJbnN0YW5jZVZpZXcucHJvdG90eXBlPXtfX3Byb3RvX186SFRNTERpdkVsZW1lbnQucHJvdG90eXBlLGRlY29yYXRlKCl7dGhpcy5vYmplY3RJbnN0YW5jZV89dW5kZWZpbmVkO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtyZXR1cm4gdHJ1ZTt9LHNldCBtb2RlbEV2ZW50KG9iail7dGhpcy5vYmplY3RJbnN0YW5jZT1vYmo7fSxnZXQgbW9kZWxFdmVudCgpe3JldHVybiB0aGlzLm9iamVjdEluc3RhbmNlO30sZ2V0IG9iamVjdEluc3RhbmNlKCl7cmV0dXJuIHRoaXMub2JqZWN0SW5zdGFuY2VfO30sc2V0IG9iamVjdEluc3RhbmNlKGkpe3RoaXMub2JqZWN0SW5zdGFuY2VfPWk7dGhpcy51cGRhdGVDb250ZW50cygpO30sdXBkYXRlQ29udGVudHMoKXt0aHJvdyBuZXcgRXJyb3IoJ05vdCBpbXBsZW1lbnRlZCcpO319O2NvbnN0IG9wdGlvbnM9bmV3IHRyLmIuRXh0ZW5zaW9uUmVnaXN0cnlPcHRpb25zKHRyLmIuVFlQRV9CQVNFRF9SRUdJU1RSWV9NT0RFKTtvcHRpb25zLm1hbmRhdG9yeUJhc2VDbGFzcz1PYmplY3RJbnN0YW5jZVZpZXc7b3B0aW9ucy5kZWZhdWx0TWV0YWRhdGE9e3Nob3dJblRyYWNrVmlldzp0cnVlfTt0ci5iLmRlY29yYXRlRXh0ZW5zaW9uUmVnaXN0cnkoT2JqZWN0SW5zdGFuY2VWaWV3LG9wdGlvbnMpO3JldHVybntPYmplY3RJbnN0YW5jZVZpZXcsfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtc2luZ2xlLW9iamVjdC1pbnN0YW5jZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCByZXF1aXJlc1RhbGxWaWV3KCl7aWYodGhpcy4kLmNvbnRlbnQuY2hpbGRyZW4ubGVuZ3RoPT09MCl7cmV0dXJuIGZhbHNlO30KaWYodGhpcy4kLmNvbnRlbnQuY2hpbGRyZW5bMF1pbnN0YW5jZW9mCnRyLnVpLmFuYWx5c2lzLk9iamVjdEluc3RhbmNlVmlldyl7cmV0dXJuIHRoaXMuJC5jb250ZW50LmNoaWxkcmVuWzBdLnJlcXVpcmVzVGFsbFZpZXc7fX0sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe2NvbnN0IGluc3RhbmNlPXRyLmIuZ2V0T25seUVsZW1lbnQoc2VsZWN0aW9uKTtpZighKGluc3RhbmNlIGluc3RhbmNlb2YgdHIubW9kZWwuT2JqZWN0SW5zdGFuY2UpKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgc3VwcG9ydHMgb2JqZWN0IGluc3RhbmNlcycpO30KUG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLnRleHRDb250ZW50PScnO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO2NvbnN0IHR5cGVJbmZvPXRyLnVpLmFuYWx5c2lzLk9iamVjdEluc3RhbmNlVmlldy5nZXRUeXBlSW5mbyhpbnN0YW5jZS5jYXRlZ29yeSxpbnN0YW5jZS50eXBlTmFtZSk7aWYodHlwZUluZm8pe2NvbnN0IGN1c3RvbVZpZXc9bmV3IHR5cGVJbmZvLmNvbnN0cnVjdG9yKCk7UG9seW1lci5kb20odGhpcy4kLmNvbnRlbnQpLmFwcGVuZENoaWxkKGN1c3RvbVZpZXcpO2N1c3RvbVZpZXcubW9kZWxFdmVudD1pbnN0YW5jZTt9ZWxzZXt0aGlzLmFwcGVuZEdlbmVyaWNBbmFseXNpc18oaW5zdGFuY2UpO319LGFwcGVuZEdlbmVyaWNBbmFseXNpc18oaW5zdGFuY2Upe2xldCBodG1sPScnO2h0bWwrPSc8ZGl2IGNsYXNzPSJ0aXRsZSI+JysKaW5zdGFuY2UudHlwZU5hbWUrJyAnKwppbnN0YW5jZS5pZCsnPC9kaXY+XG4nO2h0bWwrPSc8dGFibGU+JztodG1sKz0nPHRyPic7aHRtbCs9Jzx0cj48dGQ+Y3JlYXRpb25Uczo8L3RkPjx0ZD4nKwppbnN0YW5jZS5jcmVhdGlvblRzKyc8L3RkPjwvdHI+XG4nO2lmKGluc3RhbmNlLmRlbGV0aW9uVHMhPT1OdW1iZXIuTUFYX1ZBTFVFKXtodG1sKz0nPHRyPjx0ZD5kZWxldGlvblRzOjwvdGQ+PHRkPicrCmluc3RhbmNlLmRlbGV0aW9uVHMrJzwvdGQ+PC90cj5cbic7fWVsc2V7aHRtbCs9Jzx0cj48dGQ+ZGVsZXRpb25Uczo8L3RkPjx0ZD5ub3QgZGVsZXRlZDwvdGQ+PC90cj5cbic7fQpodG1sKz0nPHRyPjx0ZD5zbmFwc2hvdHM6PC90ZD48dGQgaWQ9InNuYXBzaG90cyI+PC90ZD48L3RyPlxuJztodG1sKz0nPC90YWJsZT4nO1BvbHltZXIuZG9tKHRoaXMuJC5jb250ZW50KS5pbm5lckhUTUw9aHRtbDtjb25zdCBzbmFwc2hvdHNFbD1Qb2x5bWVyLmRvbSh0aGlzLiQuY29udGVudCkucXVlcnlTZWxlY3RvcignI3NuYXBzaG90cycpO2luc3RhbmNlLnNuYXBzaG90cy5mb3JFYWNoKGZ1bmN0aW9uKHNuYXBzaG90KXtjb25zdCBzbmFwc2hvdExpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7c25hcHNob3RMaW5rLnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoc25hcHNob3QpO1BvbHltZXIuZG9tKHNuYXBzaG90c0VsKS5hcHBlbmRDaGlsZChzbmFwc2hvdExpbmspO30pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLW9iamVjdC1pbnN0YW5jZS1zdWItdmlldycsdHIubW9kZWwuT2JqZWN0SW5zdGFuY2Use211bHRpOmZhbHNlLHRpdGxlOidPYmplY3QgSW5zdGFuY2UnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtb2JqZWN0LXNuYXBzaG90LXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHJlcXVpcmVzVGFsbFZpZXcoKXtpZih0aGlzLmNoaWxkcmVuLmxlbmd0aD09PTApe3JldHVybiBmYWxzZTt9CmlmKHRoaXMuY2hpbGRyZW5bMF1pbnN0YW5jZW9mIHRyLnVpLmFuYWx5c2lzLk9iamVjdFNuYXBzaG90Vmlldyl7cmV0dXJuIHRoaXMuY2hpbGRyZW5bMF0ucmVxdWlyZXNUYWxsVmlldzt9fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuY3VycmVudFNlbGVjdGlvbl87fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7Y29uc3Qgc25hcHNob3Q9dHIuYi5nZXRPbmx5RWxlbWVudChzZWxlY3Rpb24pO2lmKCEoc25hcHNob3QgaW5zdGFuY2VvZiB0ci5tb2RlbC5PYmplY3RTbmFwc2hvdCkpe3Rocm93IG5ldyBFcnJvcignT25seSBzdXBwb3J0cyBvYmplY3QgaW5zdGFuY2VzJyk7fQpQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJzt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtjb25zdCB0eXBlSW5mbz10ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXcuZ2V0VHlwZUluZm8oc25hcHNob3Qub2JqZWN0SW5zdGFuY2UuY2F0ZWdvcnksc25hcHNob3Qub2JqZWN0SW5zdGFuY2UudHlwZU5hbWUpO2lmKHR5cGVJbmZvKXtjb25zdCBjdXN0b21WaWV3PW5ldyB0eXBlSW5mby5jb25zdHJ1Y3RvcigpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGN1c3RvbVZpZXcpO2N1c3RvbVZpZXcubW9kZWxFdmVudD1zbmFwc2hvdDt9ZWxzZXt0aGlzLmFwcGVuZEdlbmVyaWNBbmFseXNpc18oc25hcHNob3QpO319LGFwcGVuZEdlbmVyaWNBbmFseXNpc18oc25hcHNob3Qpe2NvbnN0IGluc3RhbmNlPXNuYXBzaG90Lm9iamVjdEluc3RhbmNlO1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO2NvbnN0IHRpdGxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7UG9seW1lci5kb20odGl0bGVFbCkuY2xhc3NMaXN0LmFkZCgndGl0bGUnKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnU25hcHNob3Qgb2YgJykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRpdGxlRWwpO2NvbnN0IGluc3RhbmNlTGlua0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2luc3RhbmNlTGlua0VsLnNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoaW5zdGFuY2UpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKGluc3RhbmNlTGlua0VsKTtQb2x5bWVyLmRvbSh0aXRsZUVsKS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgnIEAgJykpO1BvbHltZXIuZG9tKHRpdGxlRWwpLmFwcGVuZENoaWxkKHRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihzbmFwc2hvdC50cyx7dW5pdDp0ci5iLlVuaXQuYnlOYW1lLnRpbWVTdGFtcEluTXMsb3duZXJEb2N1bWVudDp0aGlzLm93bmVyRG9jdW1lbnQsaW5saW5lOnRydWUsfSkpO2NvbnN0IHRhYmxlRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFibGUnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0YWJsZUVsKTtjb25zdCByb3dFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpO1BvbHltZXIuZG9tKHRhYmxlRWwpLmFwcGVuZENoaWxkKHJvd0VsKTtjb25zdCBsYWJlbEVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7UG9seW1lci5kb20obGFiZWxFbCkudGV4dENvbnRlbnQ9J2FyZ3M6JztQb2x5bWVyLmRvbShyb3dFbCkuYXBwZW5kQ2hpbGQobGFiZWxFbCk7Y29uc3QgYXJnc0VsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7YXJnc0VsLmlkPSdhcmdzJztQb2x5bWVyLmRvbShyb3dFbCkuYXBwZW5kQ2hpbGQoYXJnc0VsKTtjb25zdCBvYmplY3RWaWV3RWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1nZW5lcmljLW9iamVjdC12aWV3Jyk7b2JqZWN0Vmlld0VsLm9iamVjdD1zbmFwc2hvdC5hcmdzO1BvbHltZXIuZG9tKGFyZ3NFbCkuYXBwZW5kQ2hpbGQob2JqZWN0Vmlld0VsKTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS1vYmplY3Qtc25hcHNob3Qtc3ViLXZpZXcnLHRyLm1vZGVsLk9iamVjdFNuYXBzaG90LHttdWx0aTpmYWxzZSx0aXRsZTonT2JqZWN0IFNuYXBzaG90Jyx9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLWEtcG93ZXItc2FtcGxlLXRhYmxlJyxyZWFkeSgpe3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9W3t0aXRsZTonVGltZScsd2lkdGg6JzEwMHB4Jyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LnN0YXJ0LHt1bml0OnRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Nc30pO319LHt0aXRsZTonUG93ZXInLHdpZHRoOicxMDAlJyx2YWx1ZShyb3cpe3JldHVybiB0ci52LnVpLmNyZWF0ZVNjYWxhclNwYW4ocm93LnBvd2VySW5XLHt1bml0OnRyLmIuVW5pdC5ieU5hbWUucG93ZXJJbldhdHRzfSk7fX1dO3RoaXMuc2FtcGxlPXVuZGVmaW5lZDt9LGdldCBzYW1wbGUoKXtyZXR1cm4gdGhpcy5zYW1wbGVfO30sc2V0IHNhbXBsZShzYW1wbGUpe3RoaXMuc2FtcGxlXz1zYW1wbGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2lmKHRoaXMuc2FtcGxlPT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUudGFibGVSb3dzPVtdO31lbHNle3RoaXMuJC50YWJsZS50YWJsZVJvd3M9W3RoaXMuc2FtcGxlXTt9CnRoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtcG93ZXItc2FtcGxlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10scmVhZHkoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy5zZWxlY3Rpb24ubGVuZ3RoIT09MSl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgcGFzcyBtdWx0aXBsZSBzYW1wbGVzIHRvIHNhbXBsZSB0YWJsZS4nKTt9CnRoaXMuJC5zYW1wbGVzVGFibGUuc2FtcGxlPXRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5zZWxlY3Rpb24pO319KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLXBvd2VyLXNhbXBsZS1zdWItdmlldycsdHIubW9kZWwuUG93ZXJTYW1wbGUse211bHRpOmZhbHNlLHRpdGxlOidQb3dlciBTYW1wbGUnLH0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYS1zaW5nbGUtc2FtcGxlLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLiQuY29udGVudC50YWJsZUNvbHVtbnM9W3t0aXRsZTonJyx2YWx1ZTpyb3c9PnJvdy50aXRsZSx3aWR0aDonMTAwcHgnfSx7dGl0bGU6JycsdmFsdWU6cm93PT5yb3cudmFsdWUsd2lkdGg6JzEwMCUnfV07dGhpcy4kLmNvbnRlbnQuc2hvd0hlYWRlcj1mYWxzZTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXNlbGVjdGlvbjtpZih0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPT09dW5kZWZpbmVkKXt0aGlzLiQuY29udGVudC50YWJsZVJvd3M9W107cmV0dXJuO30KY29uc3Qgc2FtcGxlPXRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5jdXJyZW50U2VsZWN0aW9uXyk7Y29uc3QgdGFibGU9dGhpcy4kLmNvbnRlbnQ7Y29uc3Qgcm93cz1bXTtyb3dzLnB1c2goe3RpdGxlOidUaXRsZScsdmFsdWU6c2FtcGxlLnRpdGxlfSk7cm93cy5wdXNoKHt0aXRsZTonU2FtcGxlIHRpbWUnLHZhbHVlOnRyLnYudWkuY3JlYXRlU2NhbGFyU3BhbihzYW1wbGUuc3RhcnQse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lU3RhbXBJbk1zLG93bmVyRG9jdW1lbnQ6dGhpcy5vd25lckRvY3VtZW50fSl9KTtjb25zdCBjYWxsU3RhY2tUYWJsZUVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItdGFibGUnKTtjYWxsU3RhY2tUYWJsZUVsLnRhYmxlUm93cz1zYW1wbGUuZ2V0Tm9kZXNBc0FycmF5KCkucmV2ZXJzZSgpO2NhbGxTdGFja1RhYmxlRWwudGFibGVDb2x1bW5zPVt7dGl0bGU6J2Z1bmN0aW9uIG5hbWUnLHZhbHVlOnJvdz0+cm93LmZ1bmN0aW9uTmFtZXx8Jyhhbm9ueW1vdXMgZnVuY3Rpb24pJ30se3RpdGxlOidsb2NhdGlvbicsdmFsdWU6cm93PT5yb3cudXJsfV07Y2FsbFN0YWNrVGFibGVFbC5yZWJ1aWxkKCk7cm93cy5wdXNoKHt0aXRsZTonQ2FsbCBzdGFjaycsdmFsdWU6Y2FsbFN0YWNrVGFibGVFbH0pO3RhYmxlLnRhYmxlUm93cz1yb3dzO3RhYmxlLnJlYnVpbGQoKTt9fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS1zYW1wbGUtc3ViLXZpZXcnLHRyLm1vZGVsLlNhbXBsZSx7bXVsdGk6ZmFsc2UsdGl0bGU6J1NhbXBsZScsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS10aHJlYWQtc2xpY2Utc3ViLXZpZXcnLGJlaGF2aW9yczpbdHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3XSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuJC5jb250ZW50LnNlbGVjdGlvbjt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLiQuY29udGVudC5zZWxlY3Rpb249c2VsZWN0aW9uO3RoaXMuJC5yZWxhdGVkRXZlbnRzLnNldFJlbGF0ZWRFdmVudHMoc2VsZWN0aW9uKTtpZih0aGlzLiQucmVsYXRlZEV2ZW50cy5oYXNSZWxhdGVkRXZlbnRzKCkpe3RoaXMuJC5yZWxhdGVkRXZlbnRzLnN0eWxlLmRpc3BsYXk9Jyc7fWVsc2V7dGhpcy4kLnJlbGF0ZWRFdmVudHMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX19KTt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXcucmVnaXN0ZXIoJ3RyLXVpLWEtc2luZ2xlLXRocmVhZC1zbGljZS1zdWItdmlldycsdHIubW9kZWwuVGhyZWFkU2xpY2Use211bHRpOmZhbHNlLHRpdGxlOidTbGljZScsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS10aHJlYWQtdGltZS1zbGljZS1zdWItdmlldycsYmVoYXZpb3JzOlt0ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXddLGNyZWF0ZWQoKXt0aGlzLmN1cnJlbnRTZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50U2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXtjb25zdCB0aW1lU2xpY2U9dHIuYi5nZXRPbmx5RWxlbWVudChzZWxlY3Rpb24pO2lmKCEodGltZVNsaWNlIGluc3RhbmNlb2YgdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlKSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IHN1cHBvcnRzIHRocmVhZCB0aW1lIHNsaWNlcycpO30KdGhpcy5jdXJyZW50U2VsZWN0aW9uXz1zZWxlY3Rpb247Y29uc3QgdGhyZWFkPXRpbWVTbGljZS50aHJlYWQ7Y29uc3Qgcm9vdD1Qb2x5bWVyLmRvbSh0aGlzLnJvb3QpO1BvbHltZXIuZG9tKHJvb3QucXVlcnlTZWxlY3RvcignI3N0YXRlJykpLnRleHRDb250ZW50PXRpbWVTbGljZS50aXRsZTtjb25zdCBzdGF0ZUNvbG9yPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RpbWVTbGljZS5jb2xvcklkXTtyb290LnF1ZXJ5U2VsZWN0b3IoJyNzdGF0ZScpLnN0eWxlLmJhY2tncm91bmRDb2xvcj1zdGF0ZUNvbG9yO1BvbHltZXIuZG9tKHJvb3QucXVlcnlTZWxlY3RvcignI3Byb2Nlc3MtbmFtZScpKS50ZXh0Q29udGVudD10aHJlYWQucGFyZW50LnVzZXJGcmllbmRseU5hbWU7UG9seW1lci5kb20ocm9vdC5xdWVyeVNlbGVjdG9yKCcjdGhyZWFkLW5hbWUnKSkudGV4dENvbnRlbnQ9dGhyZWFkLnVzZXJGcmllbmRseU5hbWU7cm9vdC5xdWVyeVNlbGVjdG9yKCcjc3RhcnQnKS5zZXRWYWx1ZUFuZFVuaXQodGltZVNsaWNlLnN0YXJ0LHRyLmIuVW5pdC5ieU5hbWUudGltZVN0YW1wSW5Ncyk7cm9vdC5xdWVyeVNlbGVjdG9yKCcjZHVyYXRpb24nKS5zZXRWYWx1ZUFuZFVuaXQodGltZVNsaWNlLmR1cmF0aW9uLHRyLmIuVW5pdC5ieU5hbWUudGltZUR1cmF0aW9uSW5Ncyk7Y29uc3Qgb25DcHVFbD1yb290LnF1ZXJ5U2VsZWN0b3IoJyNvbi1jcHUnKTtQb2x5bWVyLmRvbShvbkNwdUVsKS50ZXh0Q29udGVudD0nJztjb25zdCBydW5uaW5nSW5zdGVhZEVsPXJvb3QucXVlcnlTZWxlY3RvcignI3J1bm5pbmctaW5zdGVhZCcpO2lmKHRpbWVTbGljZS5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZyl7UG9seW1lci5kb20ocnVubmluZ0luc3RlYWRFbC5wYXJlbnRFbGVtZW50KS5yZW1vdmVDaGlsZChydW5uaW5nSW5zdGVhZEVsKTtjb25zdCBjcHVMaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtYW5hbHlzaXMtbGluaycpO2NwdUxpbmsuc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCh0aW1lU2xpY2UuZ2V0QXNzb2NpYXRlZENwdVNsaWNlKCkpO1BvbHltZXIuZG9tKGNwdUxpbmspLnRleHRDb250ZW50PXRpbWVTbGljZS5jcHVPbldoaWNoVGhyZWFkV2FzUnVubmluZy51c2VyRnJpZW5kbHlOYW1lO1BvbHltZXIuZG9tKG9uQ3B1RWwpLmFwcGVuZENoaWxkKGNwdUxpbmspO31lbHNle1BvbHltZXIuZG9tKG9uQ3B1RWwucGFyZW50RWxlbWVudCkucmVtb3ZlQ2hpbGQob25DcHVFbCk7Y29uc3QgY3B1U2xpY2VUaGF0VG9va0NwdT10aW1lU2xpY2UuZ2V0Q3B1U2xpY2VUaGF0VG9va0NwdSgpO2lmKGNwdVNsaWNlVGhhdFRvb2tDcHUpe2NvbnN0IGNwdUxpbms9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYS1hbmFseXNpcy1saW5rJyk7Y3B1TGluay5zZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KGNwdVNsaWNlVGhhdFRvb2tDcHUpO2lmKGNwdVNsaWNlVGhhdFRvb2tDcHUudGhyZWFkKXtQb2x5bWVyLmRvbShjcHVMaW5rKS50ZXh0Q29udGVudD1jcHVTbGljZVRoYXRUb29rQ3B1LnRocmVhZC51c2VyRnJpZW5kbHlOYW1lO31lbHNle1BvbHltZXIuZG9tKGNwdUxpbmspLnRleHRDb250ZW50PWNwdVNsaWNlVGhhdFRvb2tDcHUudGl0bGU7fQpQb2x5bWVyLmRvbShydW5uaW5nSW5zdGVhZEVsKS5hcHBlbmRDaGlsZChjcHVMaW5rKTt9ZWxzZXtQb2x5bWVyLmRvbShydW5uaW5nSW5zdGVhZEVsLnBhcmVudEVsZW1lbnQpLnJlbW92ZUNoaWxkKHJ1bm5pbmdJbnN0ZWFkRWwpO319CmNvbnN0IGFyZ3NFbD1yb290LnF1ZXJ5U2VsZWN0b3IoJyNhcmdzJyk7aWYoT2JqZWN0LmtleXModGltZVNsaWNlLmFyZ3MpLmxlbmd0aD4wKXtjb25zdCBhcmdzVmlldz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1hLWdlbmVyaWMtb2JqZWN0LXZpZXcnKTthcmdzVmlldy5vYmplY3Q9dGltZVNsaWNlLmFyZ3M7YXJnc0VsLnBhcmVudEVsZW1lbnQuc3R5bGUuZGlzcGxheT0nJztQb2x5bWVyLmRvbShhcmdzRWwpLnRleHRDb250ZW50PScnO1BvbHltZXIuZG9tKGFyZ3NFbCkuYXBwZW5kQ2hpbGQoYXJnc1ZpZXcpO31lbHNle2FyZ3NFbC5wYXJlbnRFbGVtZW50LnN0eWxlLmRpc3BsYXk9J25vbmUnO319fSk7dHIudWkuYW5hbHlzaXMuQW5hbHlzaXNTdWJWaWV3LnJlZ2lzdGVyKCd0ci11aS1hLXNpbmdsZS10aHJlYWQtdGltZS1zbGljZS1zdWItdmlldycsdHIubW9kZWwuVGhyZWFkVGltZVNsaWNlLHttdWx0aTpmYWxzZSx0aXRsZTonVGhyZWFkIFRpbWVzbGljZScsfSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1hLXNpbmdsZS11c2VyLWV4cGVjdGF0aW9uLXN1Yi12aWV3JyxiZWhhdmlvcnM6W3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlld10sY3JlYXRlZCgpe3RoaXMuY3VycmVudFNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IHNlbGVjdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRTZWxlY3Rpb25fO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe3RoaXMuJC5yZWFsVmlldy5hZGRFdmVudExpc3RlbmVyKCdjdXN0b21pemUtcm93cycsdGhpcy5vbkN1c3RvbWl6ZVJvd3NfLmJpbmQodGhpcykpO3RoaXMuY3VycmVudFNlbGVjdGlvbl89c2VsZWN0aW9uO3RoaXMuJC5yZWFsVmlldy5zZXRTZWxlY3Rpb25XaXRob3V0RXJyb3JDaGVja3Moc2VsZWN0aW9uKTt0aGlzLiQucmVsYXRlZFNhbXBsZXMuc2VsZWN0aW9uPXNlbGVjdGlvbjtpZih0aGlzLiQucmVsYXRlZFNhbXBsZXMuaGFzUmVsYXRlZFNhbXBsZXMoKSl7dGhpcy4kLmV2ZW50cy5zdHlsZS5kaXNwbGF5PScnO31lbHNle3RoaXMuJC5ldmVudHMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sZ2V0IHJlbGF0ZWRFdmVudHNUb0hpZ2hsaWdodCgpe2lmKCF0aGlzLmN1cnJlbnRTZWxlY3Rpb25fKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5jdXJyZW50U2VsZWN0aW9uXykuYXNzb2NpYXRlZEV2ZW50czt9LG9uQ3VzdG9taXplUm93c18oZXZlbnQpe2NvbnN0IHVlPXRyLmIuZ2V0T25seUVsZW1lbnQodGhpcy5zZWxlY3Rpb24pO2lmKHVlLnJhd0NwdU1zKXtldmVudC5yb3dzLnB1c2goe25hbWU6J1RvdGFsIENQVScsdmFsdWU6dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHVlLnRvdGFsQ3B1TXMse3VuaXQ6dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zfSl9KTt9fX0pO3RyLnVpLmFuYWx5c2lzLkFuYWx5c2lzU3ViVmlldy5yZWdpc3RlcigndHItdWktYS1zaW5nbGUtdXNlci1leHBlY3RhdGlvbi1zdWItdmlldycsdHIubW9kZWwudW0uVXNlckV4cGVjdGF0aW9uLHttdWx0aTpmYWxzZSx0aXRsZTonVXNlciBFeHBlY3RhdGlvbicsfSk7J3VzZSBzdHJpY3QnOyhmdW5jdGlvbigpe2NvbnN0IEV2ZW50UmVnaXN0cnk9dHIubW9kZWwuRXZlbnRSZWdpc3RyeTtmdW5jdGlvbiBnZXRUYWJTdHJpcExhYmVsKG51bUV2ZW50cyl7aWYobnVtRXZlbnRzPT09MCl7cmV0dXJuJ05vdGhpbmcgc2VsZWN0ZWQuIFRhcCBzdHVmZi4nO31lbHNlIGlmKG51bUV2ZW50cz09PTEpe3JldHVybicxIGl0ZW0gc2VsZWN0ZWQuJzt9CnJldHVybiBudW1FdmVudHMrJyBpdGVtcyBzZWxlY3RlZC4nO30KZnVuY3Rpb24gY3JlYXRlU3ViVmlldyhzdWJWaWV3VHlwZUluZm8sc2VsZWN0aW9uKXtsZXQgdGFnTmFtZTtpZihzZWxlY3Rpb24ubGVuZ3RoPT09MSl7dGFnTmFtZT1zdWJWaWV3VHlwZUluZm8uc2luZ2xlVGFnTmFtZTt9ZWxzZXt0YWdOYW1lPXN1YlZpZXdUeXBlSW5mby5tdWx0aVRhZ05hbWU7fQppZih0YWdOYW1lPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ05vIHZpZXcgcmVnaXN0ZXJlZCBmb3IgJysKc3ViVmlld1R5cGVJbmZvLmV2ZW50Q29uc3RydWN0b3IubmFtZSk7fQpjb25zdCBzdWJWaWV3PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodGFnTmFtZSk7bGV0IHRpdGxlO2lmKHNlbGVjdGlvbi5sZW5ndGg9PT0xKXt0aXRsZT1zdWJWaWV3VHlwZUluZm8uc2luZ2xlVGl0bGU7fWVsc2V7dGl0bGU9c3ViVmlld1R5cGVJbmZvLm11bHRpVGl0bGU7fQp0aXRsZSs9JyAoJytzZWxlY3Rpb24ubGVuZ3RoKycpJztzdWJWaWV3LnRhYkxhYmVsPXRpdGxlO3N1YlZpZXcuc2VsZWN0aW9uPXNlbGVjdGlvbjtyZXR1cm4gc3ViVmlldzt9ClBvbHltZXIoe2lzOid0ci11aS1hLWFuYWx5c2lzLXZpZXcnLHJlYWR5KCl7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89dW5kZWZpbmVkO3RoaXMubGFzdFNlbGVjdGlvbl89dW5kZWZpbmVkO3RoaXMudGFiVmlld189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi10YWItdmlldycpO3RoaXMudGFiVmlld18uYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0ZWQtdGFiLWNoYW5nZScsdGhpcy5vblNlbGVjdGVkU3ViVmlld0NoYW5nZWRfLmJpbmQodGhpcykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMudGFiVmlld18pO30sc2V0IHRhbGxNb2RlKHZhbHVlKXtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QudG9nZ2xlKCd0YWxsLW1vZGUnLHZhbHVlKTt9LGdldCB0YWxsTW9kZSgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuY29udGFpbnMoJ3RhbGwtbW9kZScpO30sZ2V0IHRhYlZpZXcoKXtyZXR1cm4gdGhpcy50YWJWaWV3Xzt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LHNldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcihicnVzaGluZ1N0YXRlQ29udHJvbGxlcil7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcykpO30KdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcil7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8uYmluZCh0aGlzKSk7fQp0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8oKTt9LGdldCBzZWxlY3Rpb24oKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uO30sb25TZWxlY3Rpb25DaGFuZ2VkXyhlKXtpZih0aGlzLmxhc3RTZWxlY3Rpb25fJiZ0aGlzLnNlbGVjdGlvbi5lcXVhbHModGhpcy5sYXN0U2VsZWN0aW9uXykpe3JldHVybjt9CnRoaXMubGFzdFNlbGVjdGlvbl89dGhpcy5zZWxlY3Rpb247dGhpcy50YWxsTW9kZT1mYWxzZTt0aGlzLnRhYlZpZXdfLmxhYmVsPWdldFRhYlN0cmlwTGFiZWwodGhpcy5zZWxlY3Rpb24ubGVuZ3RoKTtjb25zdCBldmVudHNCeUJhc2VUeXBlTmFtZT10aGlzLnNlbGVjdGlvbi5nZXRFdmVudHNPcmdhbml6ZWRCeUJhc2VUeXBlKHRydWUpO2NvbnN0IEFTVj10ci51aS5hbmFseXNpcy5BbmFseXNpc1N1YlZpZXc7Y29uc3QgZXZlbnRzQnlUYWdOYW1lPUFTVi5nZXRFdmVudHNPcmdhbml6ZWRCeVR5cGVJbmZvKHRoaXMuc2VsZWN0aW9uKTtjb25zdCBuZXdTdWJWaWV3cz1bXTtldmVudHNCeVRhZ05hbWUuZm9yRWFjaChmdW5jdGlvbihldmVudHMsdHlwZUluZm8pe25ld1N1YlZpZXdzLnB1c2goY3JlYXRlU3ViVmlldyh0eXBlSW5mbyxldmVudHMpKTt9KTt0aGlzLnRhYlZpZXdfLnJlc2V0U3ViVmlld3MobmV3U3ViVmlld3MpO30sb25TZWxlY3RlZFN1YlZpZXdDaGFuZ2VkXygpe2NvbnN0IHNlbGVjdGVkU3ViVmlldz10aGlzLnRhYlZpZXdfLnNlbGVjdGVkU3ViVmlldztpZighc2VsZWN0ZWRTdWJWaWV3KXt0aGlzLnRhbGxNb2RlPWZhbHNlO3RoaXMubWF5YmVDaGFuZ2VSZWxhdGVkRXZlbnRzXyh1bmRlZmluZWQpO3JldHVybjt9CnRoaXMudGFsbE1vZGU9c2VsZWN0ZWRTdWJWaWV3LnJlcXVpcmVzVGFsbFZpZXc7dGhpcy5tYXliZUNoYW5nZVJlbGF0ZWRFdmVudHNfKHNlbGVjdGVkU3ViVmlldy5yZWxhdGVkRXZlbnRzVG9IaWdobGlnaHQpO30sbWF5YmVDaGFuZ2VSZWxhdGVkRXZlbnRzXyhldmVudHMpe2lmKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlQW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyhldmVudHMpO319fSk7fSkoKTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLWItZHJvcGRvd24nLHByb3BlcnRpZXM6e2xhYmVsOnt0eXBlOlN0cmluZyx2YWx1ZTonJyx9LH0sb3Blbigpe2lmKHRoaXMuaXNPcGVuKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzLiQuYnV0dG9uKS5jbGFzc0xpc3QuYWRkKCdvcGVuJyk7Y29uc3QgYnV0dG9uUmVjdD10aGlzLiQuYnV0dG9uLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5kaWFsb2cuc3R5bGUudG9wPWJ1dHRvblJlY3QuYm90dG9tLTErJ3B4Jzt0aGlzLiQuZGlhbG9nLnN0eWxlLmxlZnQ9YnV0dG9uUmVjdC5sZWZ0KydweCc7dGhpcy4kLmRpYWxvZy5zaG93TW9kYWwoKTtjb25zdCBkaWFsb2dSZWN0PXRoaXMuJC5kaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZGlhbG9nUmVjdC5yaWdodD53aW5kb3cuaW5uZXJXaWR0aCl7dGhpcy4kLmRpYWxvZy5zdHlsZS5sZWZ0PU1hdGgubWF4KDAsYnV0dG9uUmVjdC5yaWdodC0KZGlhbG9nUmVjdC53aWR0aCkrJ3B4Jzt9fSxvbkRpYWxvZ1RhcF8oZXZlbnQpe2lmKGV2ZW50LmRldGFpbC5zb3VyY2VFdmVudC5zcmNFbGVtZW50IT09dW53cmFwKHRoaXMuJC5kaWFsb2cpKXJldHVybjtjb25zdCBkaWFsb2dSZWN0PXRoaXMuJC5kaWFsb2cuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7bGV0IGluc2lkZT10cnVlO2luc2lkZSY9ZXZlbnQuZGV0YWlsLng+PWRpYWxvZ1JlY3QubGVmdDtpbnNpZGUmPWV2ZW50LmRldGFpbC54PGRpYWxvZ1JlY3QucmlnaHQ7aW5zaWRlJj1ldmVudC5kZXRhaWwueT49ZGlhbG9nUmVjdC50b3A7aW5zaWRlJj1ldmVudC5kZXRhaWwueTxkaWFsb2dSZWN0LmJvdHRvbTtpZihpbnNpZGUpcmV0dXJuO2V2ZW50LnByZXZlbnREZWZhdWx0KCk7dGhpcy5jbG9zZSgpO30sY2xvc2UoKXtpZighdGhpcy5pc09wZW4pcmV0dXJuO3RoaXMuJC5kaWFsb2cuY2xvc2UoKTtQb2x5bWVyLmRvbSh0aGlzLiQuYnV0dG9uKS5jbGFzc0xpc3QucmVtb3ZlKCdvcGVuJyk7dGhpcy4kLmJ1dHRvbi5mb2N1cygpO30sZ2V0IGlzT3Blbigpe3JldHVybiB0aGlzLiQuYnV0dG9uLmNsYXNzTGlzdC5jb250YWlucygnb3BlbicpO319KTtyZXR1cm57fTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7Y29uc3QgRmF2aWNvbnNCeUh1ZT17Ymx1ZTonZGF0YTppbWFnZS9wbmc7YmFzZTY0LGlWQk9SdzBLR2dvQUFBQU5TVWhFVWdBQUFMZ0FBQUM0Q0FZQUFBQlFNeWJIQUFBbHJrbEVRVlI0QWUyZENYd2RWYjNINTI2NXljM1NwRWszdWtFWENxVlVCTFQ0V20xOW9GS3RhTjBmS2lqeTlDTWd1UEJhcklKc0lpQThxc2pUaDdTbGxBb0ZlVkJhRUFSa0xWMW9vWHRMMHlSZGtxWnA5dTN1eS92LzV1WS9PWm03NXk2NTkrYWNkbkxPblAzODV6di8rNTh6WjJZTWluVHBsSUFoenNvRGNlYVQyUktVUUx3SElNRnFoMFYybGwwa240WEE2Ynl2OS9WdzgzNGtYMTllN2tlUlFDemhSeWs2YkpKWVJ2RDFZVFh1aFJkZXFEajc3TFBQdE5sczQwMG1VN0hSYUN6RkZnZ0VWSi9pU3Foc2ljRmdLSVhVS0w2YnZCNmZ6OWZqOS91N0tiNGJQamFLNjdYYjdRMEhEaHc0OUlVdmZLRWQyWFViN1dweEhJWXZYUmdKOEFFTGt6UnNvMWdtS3J3a0Jmakc3MzczdTVabHk1Wk5LUzh2bjJHMVdzODBtODNZcGhQSTB3blFVZW1RRnAwSXpRUjl0ZGZyeFhiSTVYSWQ2dWpvK1BDdXUrNnFYYk5tallmYTlOTW1uZ0RvQm10K2hJZTk0NE01M0FVaHdxd0N2WFRwMHFKcnI3MzJvcEtTa2s4WEZoWitpbUMrZ0lBcnlBWkIwUW5sSnVCM09KM090M3A2ZWw1LzZLR0h0dHh6enowTzZwc2UrR0VQKzNBR25LRTJFaGdHMHRBRnQ5OSsrNFdrb1Q5dHNWZ1cwRGFINGd1ekFlZzQrdUQwZUR4YmFYdUROUHpydDl4eXkzYlM4RzRxQjhCRjZPT29Lcit5RERmQUIwQjkxVlZYRmY3MnQ3KzlsTFQwNVFVRkJaZlFvWVd0bkErdXgrMTJ2MHJhL1crLyt0V3ZYbHE1Y3FXVEJqVXNZUjhPZ0RQVThLR3RqUjkrK09ISHg0d1o4KzJpb3FLdjBYNGxiZm5zV2gwT3g5K2JtcHJXenBneFl4c05GQnBkMU9wNWJjYmtNK0FNdGdyMTFxMWJUei96ekRQL2d5NFF2MDJ6R3RQem1laElZNk1abW1xNlVGMTc2TkNoSitiTW1YT2tEM1FSOWtoRmN6WStId0VYd1RiVjFOVE1JMjI5RkNZSVhTVG00M2dUaG84dVVnTXdZVWlyM3pOMTZ0UjNxQUlmYlhrSmVqNGRjSXhGMWRia200NGVQZnFacXFxcXBUVDdNWmYycFlzZ0FacU4yZFRTMG5MUDVNbVRYNkVzRERyREhxRlU3a1RuQStBYTJCTW1UREJ2MmJMbGl5TkhqbHhDWnNnRnVYTVlocjZuWkw3c2FHdHJ1L2VpaXk3YVVGOWY3NlVlQWZLY0J6MlhBVWZmVmJnSmJBdUIvWTNLeXNvbGRPTmw1dERqa3JzOW9CdEwrMXRiV3dINlV3UzYvbVpTemcwc1Z3SFhUSkc5ZS9kZU9HWEtsT1drc1MvTU9lbG5jWWRKbzIrdnJhMzk2YXhaczdaVE4wWFRKWXQ3SGRxMVhBTmMxZGcwRE5PcVZhdEdMbDY4K0RaYS8zRTFYVHdDZU9uNkpMQ2x5Nm5jVTkrbU5MbkJaUkxPWVBBSEhJNUgybDUvOFRkSGJsM1NSalV4NkRrenRaZ3JnS09mRExmNXhJa1QzNm1vcUxpTHpKRzByQUZKQW9tc0tEcDFXNTFTNzRJWm5TSVg4RGNyWFYzTGxLL09lNXhxWlBzY2tHYzk2TGtBT1Bwb3dyWjc5KzVaTkszMUJ6a3pRdEtJNHF4dlYwZEpUU0xKNTkya0hLdTdRZm5QeFh1cEZtaHpiRmtOZVRiL3RHc2FlL2JzMlZhNndyL2xyTFBPMml6aFRnTFFaSXVhYU1wMXl2VE55dk5iYjFIb21GQjFadHJBVU5ZcXltenRHTU50MnJoeDQ0VDU4K2V2b2hzMW4wcjIrQXlYOG1uVDRLSUF2WjYzbEE4MmYxLzU1VFgxRkoyMXRuazJBczR6Sk9icTZ1clAwQlRnQ21scmkyVEZEbWNFY0hRRHRubHo0dytVeXorSG0wUnNtMlB1UEd0Y05wa29tdFplc0dCQllYTno4MjEwZCswNUNYZldzQkxhRVFOZDVJK2U4Snl5WWV0dENoMHp5b0JycGF3eVdiSkZnMnR3di9qaWl4UG56WnUzbWhaRnpRMlZxSXlKUndJWjArQmlaenllVGNxZWJWY3FTMzUwbktLenhtVEpCc0RSQjNXV1pOKytmWFBwcHMwNjB0cFZvdXhrT0RFSkRBbmc2R0lnMEtJMEh2K21jc1huTjlGZVZzeXlETFdKd25DYmFkWGZvbW5UcG0yVWNDY0djMWJsTmhpcWxOTW1ibFQrOXNvaTZoZG1XS0M0aGxTSkRpWGdhQnNDc05ES3Z5c25UcHo0SklXTGFKTXVweVZnS0ZMR2pIdFNlZnJOSzJrWUZ0cHdqSWVNczZGcVdJT2I3a3IrWXR5NGNYK20yKzA0NDZYTEJ3a0VTSHVQclBxejh1eW1YOUJ3aGhUeW9RQmNoWnNlUWlpZ2RjajMwZ3JBTytTRENQbEF0VzRNZUxpa2RNUWR5dnF0OXlwMHJDbDFTRFI1cGdGWDRWNjRjR0VSdmRobVJXbHA2WFU2c2NqZGZKTkFjZkYxeXNxTks1UTVDMkYrWmh6eVRGNEFxSENQR2pYS1NqZHdIcVVIZnIrYWI4Y3lXOFl6WkxNbzBRVGdjajJqZk8vUzd5bk56UzdLeHRPSTBVcWtKQzFUR2x5Rm0zcGNjUERnd2ZzazNDazVkcmxWaWRYNlZXWEZ4dnZBQUcwWjArU1pBSnpodGpRMk5pNmxkNUQ4S0xlT2pPeHR5aVJnSy82Ujh1eTdTNm0rakYxNHBodHdtRUJvdzNMOCtQR3I2Rm5KbTFNbUxGbFJia3FndE94bTVhbTNyZ0lUdElHTnRKcko2UVFjSGNkUGtZVXVLTDlNc3liTEtTeWRsSUNpakt4Y3JqeiswcGRKRkt6SjB3WjV1Z0JudU0yN2R1MmFUN2ZmVjlKVUlHQ1hUa3FBSkVBc2pKMndRbG0xZmo3dHBQV09aem9BQjl5bzEvelNTeS9Ob0xkSnJhTXdGc2RMSnlVZ1NxQlFHWC9HT3VYK0ZUTW9FcENEbVpScjhuUUJicUlIZ292bnpwMjdtdGFXbEltamttRXBBVTBDWUdQbVIxY3JGMTljVEhINGhVODU0S211RUNjTU9tbzlkZXJVQXlOR2pMaWF3dEpsV0FKWk9ROGVUUWIyN2tlVXl6N3hNOHFTOGpueVZHcHdOazBzKy9mdi80cUVPOW9SbFdrREpHQXJ2VnBaODlKWEtDN2xNeXVwQXB6aE5tL1lzR0g2R1dlYzhlQ0FBY2dkS1lGWUVoaHoyb1BLM1grWlR0bFNhbytuRW5EenhXUkwwZU5tajBxN085YlJsT2toRW9BOWZ0NmNSNVdQcS9ZNElFK0orWnlLU2pTN201Nmp2SytzckV6ZXFRdzVlcG1OeURrYlhCUlBUOC8vS2wrKzZFYUtTb2s5bnF3RzEweVRIVHQyZkpwV0IwcTR4WU1sdzRsTG9KaHU1ei95M0tlcFlFcE1sV1FCVjdVM21TWEZOTjk5SDcxWVBmRUJ5UkpTQXFJRXdORDR5ZmNwRnl6Z3FjT2tHRTJtTUd0dnkyT1BQWFk5dlpqblRMR2ZNaXdsTUdnSldDeG5La3R2L1FtVlQzcFdaYkNBTTl6bXh4OS8vSXpSbzBmajBTVHBwQVJTSjRIeWtUY3FOLy8zR1ZSaFVxWktNb0NyQzZubzZaeTd5VFN4cFc1a3NpWXBBWktBMFdoVFBqNzNkeFJLYWtIV1lBQm43VzNaczJjUHZqSDVlWGxBcEFUU0lvR2k0aThvSzU2L3RBOXlzQXIyRW5LREFSeGx6SmRkZGxrSjNkQzVONkhXWkdZcGdVUWxNSDdTdmJSV3BZU0tzYW1TVUEySkFzN2EyL3luUC8zcE92cmM5ZVNFV3BPWnBRUVNsWURaUEZuNTRhL3hjRG9EbnBBV1R4Unc1RGZSSjdETDZIVVBQMDYwcnpLL2xNQ2dKRkErOHNmS1pkL0NxbFJjOXlYRWJDS1pXWHRibGkxYjlnTjZFWDNsb0RvckMwa0pKQ29CazZsUytlYlZQNkJpQ1U4YkpnSTQ4cHB4VTJmczJMSFhKTnBIbVY5S0lDa0pWRlpkbzN6c1k3ajV3NlpLWE5YRkN6aHJiL1BERHovOEhiSzl4OFpWdTh3a0paQXFDWmpOWTVXZjN2a2RxbzRCajhzV2p4ZHc1RFBSdDNLS1RqdnROTnhoa2s1S0lQTVNxQnoxRTJYcTdJVGVrQlVQNEt5OUxldldyZnNHYWU5Sm1SK1piRkZLZ0NSZ0xwaWszSEwzTnlnVXR5MGVEK0NxOWg0L2Zud0JiVGRJUVVzSkRLa0VSbys5UVNrcjQ3dWJNZm1ObFFIYUc1djU2YWVmL25kYVVEVnRTQWNuRzVjU01GdW1LWGMvZkRHWXBJMzVqQ2lYZUFESDNLT1o3bHArU3k2SGpTaEhtWkFwQ1dBNTdkZ0ozd0tUdElGTlFCN1J4UUljNmFiTEw3K2NuaUVlc1RCaUxUSkJTaUNURWlndVdhaDgvaXNqcUVrQUhwWGhhSWs0TTVCdVhycDA2WmZvT1V0Y3ZVb25KVEQwRWpDYWlwU3ZmZjlMMUpHWVU0YlJBRWVhQ2poOVArZnIwandaK3VNcWU5QW5BWmdwbzBaL25mWVk4SWdjUjBxQTlzWm1ldUNCQnliWmJMWi82NnRhZWxJQzJTRUJLekY1elRKTVdiTWREbDVEWERUQVZlMjlhTkdpYjVEMmpwUXZwRUlaSVNXUUVRa1lpY201QzBRdG5qRGc2dXdKUFk3MnRZeDBXRFlpSlpDb0JNb3JHWERXNGlFMWhOUE1PQk1RYjFxelpzME1tdnVlSGxKS1JtUzFCQ1pZWVpvT0EyZXhURmQrZFQvZVRzdXpLU0ZhUEp3a05NRFBPKys4K2ZMaU12ZEErWjhKSmNxUE4rOVJHbm9jb1owUEJFTGpGRjJjYmpkWUlFeWt2cTR3V2VoZDRBUGIwNWRCYXJpNGdhV0NlL3A4QVQrdUZPZFQ0ajdhb0pUQjdvQUdvd0Z1cnFxcW1pY0JWNVFQbWdMS1gzYjdsVmJIQU5tUkxMUFZWU2puR1Q2aHpGUmE0NGRISEVxSUhoUVRoWEM4K1lRaXFRNjZLOXJudmFrb0QxTzlEUGlBSnZTQW84dllqTVhGeFdaNlU5VkZBM0lQMDUyZnYrNVZHbnR6Qlc0K1NDWWw0S3RRL0wzdHBDQkowK1dwQy9oS0xnS3J2YjI5RERqNDFRNFdJdlVPY2FaSEgzMTBsc2xrR3FsUEhJNzd1UWQzOENnWlRCYlNWQlZLWGsrQ0dZd2pTNzU4L3l3d1Mxc0l6L29JMXVDbW1UTm5mbEthSjdsL09tdVFHM21pZ1E5eG52ZzBXMmdhTi8yVGZZRHpvTFFERnc1d1ZZT1QvVDFYQXE3SkthY0RLdVMyY3NWZzFCL3VuQjZXMm5rd2FpaXVtRXM3ck1FQnVlWkVHNXpwTjlHdCtRS3l2K2RvdVdRZzV5WEFrUHZ0SFlPNzhNeGlDWmlzSlhOc1ZSTUw3QzNIbmRSTjVsaTF3L1duTlBhTkR6NzQ0TGwwWnBSbThaaGsxd1loQVlhY2pQSkJsTTdlSWdIRlVGcnl4WnZQcFI2cS9JbzlEYXZCSjB5WWNKWTBUMFF4NVU4NENEbk5ydGpiODJkUVpIcVp5c2VmUlFQYVJsdEVEYzRKUmxyN1BTMS9SaTlIb3BlQXdXUldqTFlLUWlGL05MbkJXZ3Btb2NHWlkzWFlvb21DQk95YmFQWGdOS25CVmZuazdSOFY4cUx5dklBY3JCb0xpcWFDWGRvWWN2WFlNZUI4S21QZlNJQlBVVlBsbjd5V1FEL2tqRUVPRDdmQUJzQlZmdnRHb1RJZFlvT1BIRG5TWEZoWU9EbUhoeXE3bm9BRWdwQ1BVUHlPVGlxbDNRQk1vSWJzeUdvMEYwNHVJbllkYlczUlRaUmJiNzExQW5YWm1oM2RscjNJaEFRWWNwb296MFJ6YVdtRFRrMXIwWUxyd1M0R3dSYUp1b01HbVhyak9lZWNJNWZIUWlMRHpLbVFGOUlMWEZYSUdZZmM4cTJqWjRKZEJseUZuRTlaSG9seDFLaFI4Z0p6bU1ITnc5VWd6OFU3bnJpaldUb3laQ1pGdE1FQnU3R29xR2dpRDFqNncwOENLdVRXVXNYdjZzNjVPNTZHQXBWZGxXTStjbm9OYnFCM0QrSnpFZElOWXdrdzVEbG5reHZOWUpldEVkVkVFVFU0SW95MFJMWkV6b0VQWTdyN2hoNkV2SVEwZVEvRlpQL3NDcGlsUGdOd0tHMFZiZ3lGZHpUcUNYQzhaRnc2S1FFQW94Z0xTM05vUGJrUjdHb3NJeXhxY0J4U2d3UWNZcENPSldEQU9uSXJLVWJTNUFIOU01R2NLVXQ4T2lFWmNLMUhiSU1qUWlWZkFxN0pSZ2I2SkFESURRUjV0cHV1QWFNR3VHYWlzQWJYSWlUZ2t1dHdFdWpYNUwyVW5KMDJ1U0VJT0hkZlpWcHFjQmFIOUdOS0lLakpRNnlBbU9VeWxZSHNhKzZjcHJCWmczTWZwQTNPa3BCK1dBa0VOWG14RW5EYnMyK2UzS0FCcnZVOVJJTlRpaDU2TGJNTVNBbEFBcW9tTDdCUlFGT1UyU0dZZ01vdU9xVjFqR0hXSXJ4ZXI1MCs4aW9mVjh1T1E1YTF2VkExT1VFZWNPUHRXZGxoa3hzVUgvMnNhRTVsbXVmQnRWaWZ6NGVyQ09ta0JHSktJS2pKOFYwRVRUL0dMSlBPREFHL1g4K3VPZytPMDA4N0JhSEIwOWtKV1hkK1NTQ295WXVVZ0ljZWFCL3FlWEwvQUEydWNpM2E0SkI4UUdydy9BSXdFNk5STmJtbGNNaHQ4b0JmdFQ0MFpZMnhzdzJPc0pvZ0FZY29wRXRVQXFvbXQ1QW05dzZkSmc4RU5QTmFnenlzQnMvMlc3S0pDbC9tejR3RThPWXNnM2xvTkxuS2JOQUcxK0RHcUZtREkxTGRwQTJlR1JqeXRSWDE5WEFFZWNEcjZrTXFjeU0xQk5UclI0MWx0Q3hxY0FZYzZ5T2xreElZdEFTQ21oeVA5V1oyZG9WbVVYaHRMMWhXSFd0dzNsY2NEa2NiMUgyMkw2elJPaXdEV1NtQm9DYTM5bW55REhTUm1QVjduRzM2bGxpRHMxcjN0N2UzMStrenlYMHBnY0ZJUU5Qa0dicmo2YmUzZ1YyODdaOTVWazBVN01DcGtkWFYxYlh5SWpNb0VQazNlUW1va0pzS2dsT0lBRDF0bTZKNFdvN1VNc2Q5UFErd0JzZStDdmd6enp3akFlK1RqdlJTSXdHR25CNHFTMDJGNFdvaEU4VzU4ems5NENHektQNlhYMzY1MitWeU5kTjZsRkhoNnBGeFVnS0RrUUFnRHlnV3hlRHpES1o0N0RKZVYzUHZ2dGZwVlFDaEpnb0tzODBDKzhYZjA5TnpSSm9wRUl0MHFaUUFJRmZvdTBHcFhvVUlWdjB1eHhIcXE4b3YrY3h6eURTaG1zRnV0OWVsY21DeUxpa0Jsb0FLdVpFbTcxSnNpL3ZkS3JNaTRHcVRiSU16OGNqZ3cweUsxT0I4U0tTZmFna01nRHdWbFpNR0R6ZzZvSlI5dElGaDVsbXp3ZEVNUi9wUG5qeFppd2pwcEFUU0pRSFZKZy9RUmFmZm0zd1Q5R3ZnNjI0R3N3UGdSc1hoTkxoLy9mcjF1Mm5SRllDWFRrb2diUkpRYnliQ1hFbDJkaVhnQ3poMmJ0aE5GUUh3QVpBejRCZ0VnRWFpano0QzI5eloyVmtqelJTSVJicDBTaUFJT1Q3TWdDbkV4RGV5VGhTL3M3dW1hK3ZhWnFwQU5GSFVidXNCWjhpOXJhMnRXeVhncW96a256UkxRSU1jRjU2Sk9pTGMxOU82bFlyQjFobWd2VkdWQ0RqMlZRMU92cSttcG1hTEJCd2lrUzRURWxBaHg3dkpFNTVkSVdoYjZyWlFINkc5V1lOclhSWUJoL1ptRGU1YnVYTGxWajg1TGFjTVNBbWtXUUlhNUltMFE0eDJiWGtVR3B6aFpvN1ZXc0lCcnA0Skd6WnNhQ2M3L0tEVTRvbElXK1pOVmdMOWtNZTJ4NFAyZCtkQis4Nlg4TkZQMXVBUkFVZmZXSVBEbnZIU2RPRTJDVGpFSWwwbUpSQ0VQQTU3bkFqM2R6WGo0NjhxcitTekRhNTFWOVRnaUdUQWNUWjR5UTdmTEFIWFpDVURHWlNBQm5sVW01d2diYTNkREZacEUwMFVyYWY2Qng1WXZlTk04QzVmdm56YkpaZGM0aXd1THFZSDdZYXZxK3l0VVJxNzByUklLSXZFR2xtWkFZc3dEalpDUkJjaExVSjBVTGVHcVl6YVFMOEFmRWovUEE1bno4dS9adzNPMm50QUMrRUFSMGJWbm5uMzNYZTdHeHNiMzVneVpjcWx4aFI5bUdqL29VN2xpV2ZybFBaT2Q1alJaR2ZVYks5Ym1VblBHSVlJZUVCM0I4aTFQeVVLQkhUbyt2UEZFWXJjZnBSNm9yWWZSNk5abWlVUThDczlYVTF2YkRpeUV5c0kyZjVteUxWZTZ3RkhBcVNsYW5EeVBUdDM3bnorOU5OUFR4bmd2LzNESHFXNWxWNHRrR1BPNjdFclBpKzlwZ3cvbVlBR2ZqeU84ekpvK3ZMNmRIMmRtYzZ2YjEvZlAzMS85UG4xKzdISzY5UDE1Zlh0OWVVUCtMeEtSL09CNXlrN2ZsckZPZkFCTmVodGNDU0tnSHV2dSs2NnQybjViR3RrN1RHZ3ZwZzd1UWczQm1XMjJCU1RHYThwSXdlaHgrczRMM3d4ek9YRk9NNGorc2pIZWNTd21FY01pM25Fc0poSERJdDVFTlk3NUlYak1oeFdJK1A0RTZ1OFBwM2JZVi9mSHNXRFJiL2YxVnEzYjlYYmxCenhBaE5Gb3dFT3RlK2hsWVdPK3ZyNmY2UUtjRFNhcTA2RjNGUVlkZVVFb3c5ZkRHZkxtTVUraWVGSS9SUHppT0ZVNVk5VVQvVDRnT0oydFAvRDdlN0Jteitod2NOZVlLS09jSUFqSGlhS1pxYTgrdXFyNitsOUtZZ2Y5ZzZRRy9zZ3h3SFhieEFRZ3lDRzlmbUdhbC9za3hpTzFCOHhqeGhPVmY1STlVU0xWOGorN21qZC9SejFSelJQd0d1SWl3UTR6QlNjRmFEYXMzVHAwcjBkSFIySHBSWVB5bzhoRCs3SnY1bVVBQmowZWV5SGp4NThZaCsxeTRDRFZUQWI0cUlCenBDakVqZk5pVytRZCs3NzVkY1BlVFJkSTlOQ2YrT1NsUWw5OE0zUnZBRk0wc2JtQ1ZoTkNIQWNTYWg4VFl1dlhyMTZQVDJNakFxbDY1T0FhcFBqWFh6Um5QNGlDbms1TGx3NVRvTXZoc1BsellVNGNReGlPRkxmeFR4aXVDKy8zKy94TkI5L2N6M3RpdG83ckhtQ0lwRTBPTkp3UnJBZDdsNjFhbFhqa1NOSFhwQmFIS0xwZDVoWk1mRUxKM0ZBOUJ1eThvRVN3L3A4dkMvbUVjT2NubXUrT0FZeEhHa2NZaDR4VFBseDM4RHRhSG5oWlAzcmpaUUVEUjV4ZWhCRjRlSUZYRFZUMXE1ZCt3aHA4WWhuUzdESzRmZFhoZHlFZC9GSmwwNEorQU5lZjNQRHBrZW9EVFpQa2dJY2ZSMmd4ZSs3Nzc2YVk4ZU8vVk5xOGRERDJBOTVzamFtTEU4L2VTVGdnUnN1TGoyT3RuODIxRDVmUTRseGFXOGNwV2dhSE9uUTFwcVpRbUhYVTA4OTlWZVB4eFBXb0VlQjRld1ljaHdhZGh6bXc0VjRqaFBEbko2b0w5WWhodU90Unl3amh1TXRyODhuMWlHR09aOFlKNFk1UFpLditIMkJ0aE9iLzBwbDhGNW1FZkNvRmtVc3dORUhWSUNMVGRWTXVmUE9PdytRRm45VGFuR0lKdFRCSGplU3VjSUhDamtRWnNmaFNPbWNMMTQvMmZxU0xhL3ZaNno2WXFYcjY4TSsxcDI0bksxdkhxMysrd0hhWmZNRVRFYUZHMlhqQVJ6YVdnT2N3cTRYWDN6eFlkTGlLQzlkR0FrdzVQcWYyY3pzbzBPTWtSaEdYRzV1OU41dnBiM3AvWWRwQUt5OUFSK1lqR2xKeEFzNGEzR2NQYTRsUzVic09uSGl4R2FweFVrYUVWd1FjbnFyYXNZZHc4MHdvd01jbC9IT0pOMGd0TGZiMWJINXlNSEhkMUZsRERocjc1UUFqazZ5RnNkVkt5QjNidHk0OFVFNW93TFJSSFlhNUpnU1k4ZGhuaVpEUE1lSllVNVAxQmZyRU1PUjZoSHpJQnpMY1Y4ajFhZVBSMzFjUmd4elBqRk9EUGVsK3hXdnY2TjV4NE9VaENXb1lBOE14cVc5S1Y5Y0pncnlBWEJvY1FiY2RlT05OKzZrZDRrL0o5ZW9RRHlSblFxNXNlK0ZrM3lnMlVjeER2Y2RVTFVtam90Y2JlUVVMaHR2ZmZyOFhDNlNqNWE1VE9SZTlLZHdYcTVQWHo1S09uMFdVSEgybm55dWR0L3FuVlNNdFhmTXFjSCt4dU1ISEdWWWk2c1htMmp3cHB0dVdrNFBKcmZMTlNxaVNFUERHdVNoU1RJbWdnVFVOU2RlZS91eEEydVhVeGFHTzI3Ym02dU54d2Judkt6RjhmT0FCcDJ2dmZaYTg5YXRXLzhvTHpoWlJKRjl6VnlKbkVXbUNCS2diMTRxUFowMWYyeHYzbzAzVnNFOEFYTngyOTVjVlNLQW80eW94VlhJRnk5ZS9BdzkxclpMWG5DeVNDUDdKcG8rTk5MblBNUXZIWEFZZmp6L1VEdVhFY05jVm93VHc1eWVhbDlzUXd4SGFrZk1JNGJGL0hoaXl1UHEyTFYvMjkzUFVCNkdPMkh0amZvSEE3ZzRvNExHbld2V3JMbkw2WFQ2cEtrQ2tVWjNnTnhBTDRIbkE0cmNDTWZyT0crazhySFM0MjBuM255SnRoY3JQeGdLK0QyKzVvYTM3cUkrcUh5Umo0dkxoTFUzeHBBbzRDakRnT09NVXJYNEhYZmNzZS9BZ1FQcjZJMjBTSmN1aGdRWWN2VmlqUysrcE45MzhScFFIRDBuMWgzNzhDbXM5OVpyYjdDWGtCc000R2lBSVZlbkRHbmZjY01OTnp6VTB0TFNLRTJWK09Tdm1pdVlYWkZPa3dEbXZEMmU3c2FhL1g5OWlDTHhPQm9BRjdXM2xqZmV3R0FCWjF1Y3B3MmQ3NzMzWHVzVFR6eHhFMzMreENOTmxmakVEM3ZjcUVMT04yV0dyMCtXQ1MwM2NYdGFUbXk2cWJ1dHBwVWt5SEFuTk8rdGwveGdBVWM5RExtbXhXbmFjQWVCL2hEZEFOSzNJL2NqU0NBSWViaTNkMFFva0tmUlpIY3J2WjAxRDlYdFc3MkRocWpYM21CdFVDNVp3R0dxYUZxY3dzNUxMNzEwOWRHalI5K1dONERpUHg3REhYTGMwSEU1V3Q3ZXMvbTIxV0NvYjRQaVRPaW1UamlKSndNNDZnUGcyUGlDRTJlZS9XYy8rOWx2eUI1dmt2WTRTU05PMTIrdXhGa2dUN0xCN3ZaNnVwdHE5Njc4RFEzSlRoc1lnZ2tBcHBndkNnN09KUXM0V2tVbk1IMkNNdzZkYzlBTm9KTlBQdm5rTDhrZTkwcDduQ1FTcHpQUzlDRnNjcnlIYnpoc0VFdkE3L2EyTkx6enk0NldYU2RwVitXSC9LUXVMRkV2dTFRQXpyWTRteXBxSitsVkU5dTNiZHYyWjlqakVuSVdkMndma0JzTStXK1Q5ODEzMDkzSzZqL1g3bCs5blNRandwM1VoYVVvNVZRQWp2b1k4Z0dteXNLRkMxZlNncXhYM0c2Y2tOTEZLd0VWY3UzclkvazVzd0s3MjlIYjlNcWVkMjlmU1hMUm15YXdDQVo5WVNuS09WV0FvMDZHSERUalFnR2R0aTlhdE9qWGROSDVub1NjcEpHQVUwMFZJNzQrbG4rT1h2MmdPSjB0N3gzY2R1ZXZhWFFxSitUenRHREs0SWJrVWcyNGFJK3JrTk5YSXJxdXVPS0tHK2tCaVlOeVVSWkVIci9MUjhqOTlPRlh0NnY5NEtIMzc3L1I0V2p0SW1rQWNCRnVNSlFTN1ExSnAwTkZvSE5pQncwRXViZTJ0bmJUL1BuekZ6ejNVdE1JQTc2bUpWMWNFakFZY0loSW5MZ1RrdU1PWm9uSDNYVzhkdmRmZjl6WnVyK0podE5MR3dNTzh6YWwyaHZpU2dmZ3FCZHVBT2hraTd1NnU3dTNOSFdPK3l4Tmlka2s1RUVoeGZNM0NIbWZTSE4welFxOThGanh1bnRhNncrdis5R3BobmVPMFdqMGNLZFVjN05jMHdXNHFHNjA4QWNmZk5Cck1sdmZMeDB4NVhNR283bEFRczZISWJiZkx5dE5uTEVMWlVrT3JPMm1GMmIybkR6NjRyWDFoemNjcEc3cDRZYm1CdUFwZCtrQ0hCM2xJOEcrMnZuT2xyMGRCWVZWKzR0S3hsMU1zd1dXL2dPWDhySGxYWVVzcStDOENoYWVadjgvdk9xWXZvNWhiMmw0OCtkMSs5ZmlOcndJZDhybXV5TWQ3SFFDTHJZSnlEWFEyMC90T0dVeEYrNndsVTFhWURRV0ZQR0JFd3ZJY0hnSjlNdEtFMmY0akZrUXE5cmNudTcyeHJwLy9PVElnY2N4MTgxd1k4NDc3WEJEQkprR1hBTzlvMlZQbStKemJpb1pNWFdld1ZSUTJuL2cwQzNwb2tsZ29LeXljNTdjVHhlVVhuZkhDVnJYZlUxRDdmcjlOSjRlMmdBNHc1MzBPcE5vTXVLMFRBR085bGpsYUpCM3RWZDN1MXlOYjVaVnpQeTQwV3l0N0wrWTR1NUpQNUlFK2lGbnNVYkttZmw0ekhON25HM1ZkWHRXWE52VThHWWQ5UUJnWnh4dWpEeVRnS005T0FaYzllMWREWTZlam9PdmwxZk5ubTB5RlkxVGFBcFIvUWhvTUsvOEcwVUNHdVFHRW1VV0tISzgzamhBODl6MGd2b1BEdTFjZm4xYjg2NFQxSDI5V1pJUnpjMWl5elRnQStDbVRxajdMa2VydTYxNTZ4c1ZveStjUWsrZm40NERKeUhuUXhUZDF5QlhSUms5YnpwVHNTclE3L01vTHZ2Sk4vYS9kOXVTbm81akxkUWV3NDBiT1ZnaG1GRzRNZDVNQTQ0MjRVSkE5N3J0dnViNmY3MVZQdXBjcTlsU050dGdOQkxqOG9aUVVGelIvdzZVVStaVk9lRDJlVjJCM3U3YXgvYTllL1B2WEk3T1R1cXhDRGN1S0RNT042UTJWSUNqYllhY0ovanBIWXRlLzhtanIzNWd0VlVkTEN3YVBZZm15dW5EbEZLYlExaXhYQkJ5aURSelRsMFJHUEJpUFhkN1M4UGJ5dzY4ZCsvVGRBejVZbEs4UXpra2NFTVNRd2s0Mm1mSTRXdWd0NTNjM3VCMG5IeXR0SHo2VEhvNGR5d09ualJaSUs3b2ppSFB4T3c0bGc0RVlKSTRtbmZXN1Y5NWZmM2g5YnVwZDlEYXJMbGhrb2hUZ1prOSsvcEVsUzJBQTI3ZVZPanQzZlc5cDQ2OTlrcjVxRmttYzBIWlI2VEowbmZFWW5nRHpaVVltUWVack42WmhFblNlWGoxbmsyL3ZyMm5zdzV2bjRMR1pyajFpNmNHMlZMeXhZWWFjSXlBejJ6VzRocm85SFBuTzNuc3RaMkZoWlg3Q20xajV0Q0RBRVdreXFVMmozSGN0Vis3Rkp2aldFK0NXUkt2dDZ1dHBlR3RYKzdmL3Z2LzZ6TkpHRzdNY2ZQRlpOcHV2OGNZL29Ea2JBQWNIUkloRjBGWHcyMU4yMDg0SGZXdjJVb25qYUhQaEV3SmFpa0orb0FqcWR2UklOZkZEMlpYZlNJTEY1SStGejJrVVAvYWtUMHJsaHl2MmJDWDZtS05EY0QxTjNDZ3FJYmM0UnpQSm9mK1lPb0VKeDdlaW9OUGwrRkRsSFN4cWRnUW5qNzdoNStvR1BlSlh4UVVsRTNDZzdxWitFbW1kblBXWVlZakdSZWMvbk1yYm5mbnNiYVQyKzZ2MmYzd1pxb1BKZ2hEelZPQXZOd1ZEYkxDU3FicGxKVE5Oc0F4S1A1aEJlUjRPQkdmU1FEa0RIcFJZV0ZGeVl6emYvR2Q0b3FwVjVKR3QrSVp4bFJxTEdvcnIxendtZGpFbU9NWkVwL1g0ZXJwcUZsZC9mNERqenVkN1pnaGdhYkdCckRaMXNZc0NhL2xUcXdoS3BoT2x5MG1pbjZNTENUNDJLQVYyS2J6ZWIxT2I5UHhmKzMydXR0ZUxTcVpPSjQrK2pSSm1pMTZFZmJ2OTUvOHJEc2krK3B6RlgzbUNNMWt2WFBrdzdYL1ZiZDMxZXNrYzNINkQ5cGJoQnZISjdtZml2N3VwalNValJwY0hDRDZ4eVlMYTNQVzZEQmJWTTArNC95ZmZLcTg4aVBYbXEwakp1T2RmL0oydnlqQy9uQlFrL2Z2aXlIUnp2YTZ1NDYyTis5NnFIcm5nMjlSSHRiVXJMVXg5Y2MzYmxqcHNFSVNxOHlLY0xZRHprSUM1QXc2YkhOQXp2YTVDcm5aYkM2Yy9wSHJMeWtiZWZZVlptdjVOQWs2aXk2NlB3QnNWOGZocnJZRGoxWHYrdU9yOUdZeUJwdDludGNXYmUyczFOcmlpSE1GY1BTWnRUbEFoelpuMEFFNHd3N2ZPdVA4Nno0NW92TGNLeXpXa2VjRUwwUk4wa1lud1lndWFHUDc4TUpMZXRsODI3N08xajJQZmZqK245Nm1QQUFaRzhCbUh4b2JZUE1kU1lDZHRWcWIrcWE1WEFLY080MCs0OXFCUVljMlo0MnVBazc3cWo5MTl0VWZxeGgxd1pYV29zcno2Y0VLc2x4UWJQaE9Md1pORkt6NEk3RDlicm9MMmZwK2UvT08xVFc3SDNtUEJNTmdpNzVvamdCcXZwQ2tZRzY0WEFRY2trVy9zWWxtQ3pRNlR5MktvQmVjY2M1M1o1ZVAvdWlYcklXakZwak5SVGFEK25vMEZNMS8yRFdvNmNJUmIzRDFlaDEybDdQNWpZNVRINnl2MjdjR3Q5Y0JzUWcxd3REV3ZJbDJkazVvYmVxNzVuSVZjQjRBUTg2Z3MrbkNvTE5tVjdWOFljblk0aWt6dnIzQU51S016MW1McWk0azBFM3ErN25WdTZPb0luK2NPdjlOVXlKNCtBQ2ZCS0czdDI2M2Q5YTlYUHZoMmplY1BTZHhnNGExTTRCbXlCbHFudmFEMXM0WmN5VGMwY3Qxd0hsTWV0QmhpN0NOemlZTSs2cW1yenJ0d3RIakppLzZySzFrL09mb2libHBBSjFoejBYTnpwb2FpNkFBTlRhZnUvdXd2YWZoNWNhakcvL1pjbUw3S1pJSkE4eHdpejdTb0sxWlkrYzAyRFFPMWVVTDRPSjRnclpIMEU2SFJtZXREc0FaZXRFM1Q1cTZlSHI1bVBQbVdRdXJ6amNYbHM4aTBLMjBWRmN4NGlXWWVBOUpGcG95QTRDbUphdFlJMEpRdTd6T2pyMHVaOHY3SFUwNzN6bFc4MncxZFI3YUdQQUM1bkErMGxsajh6MkhuRE5GYUF4aFhiNEJ6b01NVXRsdm8wT2pzMWJYQTY5cWRFcUhieTRzTExlT203cDRWbG41dEFzc2hSWG5GeFNNT0pzZWlyYmdBaFhQakFadm1yRFlnbjcvalJSdVBqVitFR0xVeGJ6UkJTS1dxZEo3Um5DaEdLQlBmdEF0OUFNZVovdjdYUjJIZHpUV1BMdlg2ZXlBeWNGUUEyamVHSEJPWTIzTkdodU5jRU1VekEvSFJ5by9SaE02Q2hGMGFIYlJWaGUxTzBQT2NleWJpb3ZIMjhaTlcvU1I0cEpKNTVvTGlpZVp6TFpKSm90dFBGWTJCb0hIV25XQVQxV3Iwb3drVW4xOEpKWW9Idjl4VVFpUU5kL3JvSmZuTlBpODltTmVkKyt4M3A1amV4b1BiOXpWMjl1QXU0cUFsRFV4K3d3MmZJNkR6MENMOW5Xa3psRDIzSFo2cWVmMmFLTDNIbU5sODRWQlo4M09RRWZ5T1I5OGxEV09uakIzZEZuRk9aT3R0akdUTElXbGs4MW0yMFJhTWxCcFVFdzJBeTJRb1JQQVJnMVNmZlFYRjdGOXZ0cEZhT0VneGJTcmh1aERBVjU3Z0JaK0JCU2YzZTl6dFhxOTl1TWVaL2RSbDczcFdGZjd2cU9uNmpmQmhtWW9SZTByd2hzdUxPWmx1NXA5dFR2NS9HYzRBYzdIRVdNV040Wlc5QUU2UTgzUTh6NmZIS0t2UXErcjEwRG1qcm1vWkVLeDFUYTZ5R0l0SzdhWXk3QWlVdkY0dSt3ZVYxZXZ5MzdLNGVpcDd5V3pBbUJDaTRvYnd3eWZ0YTdvSTh4QU04VFlGL053V2JIZXZOWFdOUFlRTnh3QkY0VWdnbzR3ZzhxK0NMMEl1QWczNTBFYzE4SDFvaTB4akgzUk1YaUk0ekJyVndaY0R5eER5MUR6UHVkbm4rdGpYMngzMklRaGZPbUNFbUJaTUpEd0dYUXhMTVlCYnFTeHo1QWpEZzQrYjd3UEg5REJNWHo2ZlVDS09FQXMrZ3d2KzBnVHc5akhCc2QrY0crWS91VURNVXlISDNYWUxCc0dOSkl2UXEzUGd3YkVlc1FHR1VEUlIxaS9NZXo2ZUhFZjlXSmZPcDBFV1BpNmFMa2JRUUlzTHdZWjJhTEZpZWtScWh3QUprUEs4S0pNdExoSWRjcjRQZ253d1pFQ1NVNENlam5xOTFHN1BvN0JGVnZXeCtuM3hid3lISWNFL2g5VkxXUllIV1hDL1FBQUFBQkpSVTVFcmtKZ2dnPT0nLGdyZWVuOidkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUxnQUFBQzRDQVlBQUFCUU15YkhBQUFsdGtsRVFWUjRBZTJkQ1hRY3habkhSM05vTkRwOFNEN2tVN2J4RlhDY2hCaE1Zb0xObWhDY09CQnlrR3cyZ1lUa1BWNkFoR1hEMnNUWkpRY0pHM2pzZ3czaHNjdUNzVEVzT0FRVzFzYlkrTUFIeHBZdEh6SSs1RU95NVVNU3RuV1Baa1p6YWI5L2o3NVdUV3Q2TktPNVo2cjgybFZkWFYxZDllL2ZmUHE2dXJvN3p5QkRJaFhJaTdEeW5nakx5V0pSS2hEcENZaXkycHdvenRycHhTd0NiK2QxYmF5Rm05ZjFZdTMrY2oyTUFnT0pIMmJYbk5uRUdpSFdwcFc4ZDk5OWQvaW5QdldwNllXRmhlTk1KbE9SMFdnc3dkTFQwNlBFbEZkTSt4Ym41ZVdWUURYSzc2VEk3dlA1N0g2L3Y1UHlPeEZqb2J3dWg4Tng0ZGl4WXllKzlyV3Z0YUs0WnFGVk5ZL1RpR1VJb1FDZnNCQ2JjamFMTlZIZ0pSVVFHMy80d3g5YWxpMWJObVhZc0dFenJGYnJkTFBaakdVYWdUeU5BQjJaQ0xYb2gzQ0pvRC9wOVhxeG5PanU3ajdSMXRaMi9MSEhIcXRidFdxVmg0N3BwMFg4QWFBWmJQbVJ6dm5BSnpQWGhSQmhWb0JldW5TcDdiNzc3cnV1dUxqNHhvS0NnaHNJNXM4VGNQbnBJQlQ5b053RS9ENlh5N1hkYnJkLzhPeXp6KzUrL1BISG5kUTJMZkE1RDNzdUE4NVFHd21NUExMUStiLy8vZS9ua0lXKzBXS3hMS0JsTHVVWHBBUFFFYlRCNWZGNEttblpTaGIrZzBjZWVhU0tMTHliOWdQZ0l2UVJWSlZkUlhJTjhDQ283Nzc3N29JLy92R1B0NUNWL241K2Z2NU5kR3JoSzJkRHNMdmQ3azFrM2YvbjE3Lys5ZnJseTVlN3FGTTVDWHN1QU01UUk0YTFOaDQvZnZ6YTBhTkgvNFBOWnZzMnJaZlJrczJoMmVsMC91MlRUejU1ZGNhTUdYdW9vN0Rvb2xYUGFqY21td0Zuc0JXb0t5c3JKMDJmUHYzdjZRTHhIMmhVWTFvMkU2M1hOeHFoT1VrWHFxK2VPSEhpdGJsejU1N3BCVjJFWFcvWGpNM1BSc0JGc0UyMXRiWFhrN1ZlQ2hlRUxoS3pzYjlSdzBjWHFUMXdZY2lxUDM3RkZWZDhTQlg0YU1sSzBMUHBoS012aXJXbTJGUmZYLy9sRVNOR0xLWFJqM20wTG9PT0FqUWFzL1B5NWN1UFYxUlViS1FpRERyRHJyTlg1bVJuQStBcTJPUEhqemZ2M3IzNzY2V2xwVXZJRGZsODVweUcxTGVVM0pkOUxTMHRUMXgzM1hWcnpwOC83NlVXQWZLTUJ6MlRBVWZiRmJnSmJBdUJmVWRaV2RrU3V2RnlaZXB4eWR3VzBJMmxvODNOelFEOXJ3UzY5bVpTeG5Vc1V3RlhYWkhEaHcvUG1USmx5dE5rc2Vka25QcHAzR0N5NkZWMWRYWC9PR3ZXckNwcXB1aTZwSEdyK3pjdDB3QlhMRFoxdy9UU1N5K1Yzbjc3N2IraitSOC9wWXRIQUM5RHJ3SU85eEhENWM1WERGNWZTMHlhME1XbzMrbnd2ckJ4NDduZkxMbHZLeXBqMERObWFERlRBRWM3R1c1elEwUERENFlQSC80WXVTTUptUU1TRXhWcHNQUHhoanNNSHQvRnVMV2twOGR3cWIzZHQyemhuRDJ2VUtYc253UHl0QWM5RXdCSEcwMVlEaDA2Tkl1R3RmNURqb3lRR21IQzRYTUx3bXdkL0NhZnQyZm5tWHIzQTNkOFpmOWhxZ1hXSEV0YVE1N09mOXBWaXoxNzltd3JYZUUvTW5QbXpGMFM3c0VER3V1ZUpuUGV2Q3V1c083NnNQcTZSMmJQSG0ybCtzeTBnS0cwTlpUcDJqQ0cyN1IyN2RyeDgrZlBmNGx1MU53UTZ3bktsZjBUWmNGRi9id2UvL1o5dXh3L3Z2ZnVqODlUZnRyNjV1a0lPSStRbUUrZVBQbGxHZ0o4VWZyYUlsb0RwNU1CT0ZvQjM3enhRdmRQdnI1Z1AyNFNzVytPc2ZPMENlbmtvcWhXZThHQ0JRV1hMbDM2SGQxZGUxdkNuVGFzOUd0SVhwNWg1TGdKMXJlM0g3ejJkd3NXak1UVVlsd3JwWlhMa2k0V1hJVjczYnAxRTY2Ly92cVZOQ2xLM21MdmgxUmtHY215NEdKcjNCNy96a09WWFhmZDg2UEQ1eWcvYlZ5V2RBQWNiVkJHU1k0Y09US1BidHFzSnFzOVFoUlBwcU5USUJXQW80VTBsKzF5dzFuWGQyOWR1SDhucmFiRktFdXFYUlNHMjB5ei9oWlBuVHAxcllRN09walRxVFJOVWh3eHRzSzY5dDN0Y3haVHV6RENBc09WVWlPYVNzQnhiQWhnb1psL2QwMllNT0YxU3R0b2tTR0RGU0NhYmVWajgxOS92M0xPWGRRTkN5MDR4eW5qTEZVSFZ1R211NUsvSERObXpITjB1eDIvZUJteVFvRWU4NGdSbHVjMlYxM3pTK3BPU2lGUEJlQUszUFFRUWo3TlEzNkNaZ0ErS2g5RXlBcXFnenBCUTRoNXc0YVpINlVSbGlkd3JtbGpTaXg1c2dGWDRGNjBhSkdOWG16ellrbEp5ZjFCcXNpVnJGT2dxTmgwLzV1YkpyMjRhRkVwM00ra1E1N01Dd0FGN3BFalIxcnBCczRLZXVEM1cxbDNOdE9rUTZrYVJRblhmWmZMLytZM2JxejdFZDNmNktaeVBJd1licGU0YkV1V0JWZmdwaGJuMTlUVVBDbmhqc3U1eTZoS0NncU0zM3ByNCtRbndRQXRTYlBreVFDYzRiWTBOall1cFhlUTNKTlJaMFkyTm00S0ZCYWI3dGxTZGMxU3FqQnBGNTZKQmh3dUVJNWhPWGZ1M04zMHJPUy94azB0V1ZGR0tqQjBtUGxmTjFiT3VSdE0wQUkyRXVvbUp4SndOQngvaWl4MFFma051cEorbXRJeVNBVU1wU1B5bjE2ejVmUGZJQ25Za2ljTThrUUJ6bkNicTZ1cjU5UHQ5K1UwRkFqWVpaQUs0SjYrYWN6RS9CZmZXbi8xZkpJam9YYzhFd0U0NEVhOTV2WHIxOCtndDBtdHBqUW14OHNnRlZBVklFZ0tKa3pKWC8yZnE2NmFRWm1BSE16RTNaSW5DbkFUUFJCY05HL2V2SlUwdDJTSTJpdVprQW9JQ2hpTmVVTStPNmQ0NWNMYnh4VlJOdjdDeHgzd2VGZUlId3dhYXIxNDhlSlRRNGNPL1NtbFpVaXlBdWs0RGg1T2dzNU8zd3NMUHJmblFTb1Q5ekh5ZUZwdy9GaFFuK1hvMGFQZmxIQ0hPNlZ5bTZoQVNZbnBwMjl2K2R3M3dRNHRZQ2h1aGpkZWdEUGM1alZyMWt5YlBIbnlNMklIWkZvcU1KQUM0OFpibi9uemkxZE5vM0p4OWNmakNiaDU0Y0tGUmZTNDJRcnBkdzkwT3VWMnJRTHd4Ni85UXZHS2hRc1ZmeHlReDhXS3g2TVMvRWdVdjV2bUdUdzVaTWdRZWFkU2UvYVN2SjVwUHJnb2o3M0Q5MS96cjk3ekVPWEZ4UitQMVlLcnJzbStmZnR1cE5tQkVtN3hiTWwwMUFvVWxSanZXYjF1OW8yMFkxeGNsVmdCVjZ3M3VTVkZOTjc5SkwzTEx1b095UjJrQXFJQ1lLaGlzdTNKQlF2Rzh0QmhUSXpHc2pOYmI4dkxMNy84QzNveHozU3hvVEl0RlJpc0FoYUxjZnF5UDQzNU9lMGY4NmpLWUFGbnVNMnZ2UExLNUZHalJ1SFJKQm1rQW5GVG9MVE04dENmbnBrNW1TcU15VldKQlhCY1dGcm82WncvMForVndyajFURllrRlNBRndOUVg1dy81TjByR05DRnJNSUN6OWJaOC9QSEgrTWJrVitVWmtRb2tRb0dpUXRQWC9yYitNN2YwUWc1V3dWNVVZVENBWXgvenJiZmVXa3czZEo2STZtaXlzRlFnU2dYR1Y5aWVXSGpycUdMYWpWMlZxR3FJRm5DMjN1YS8vT1V2OTlQbnJpdWlPcG9zTEJXSVVnR0xKYTlpeWE4cThIQTZBeDZWRlk4V2NKUTMwU2V3aDlEckhuNFdaVnRsY2FuQW9CUVlYbXI2MmZlK053R3pVbkhkRnhXejBSUm02MjFadG16WlQraEY5R1dEYXEzY1NTb1FwUUltVTE3Wm5mZU8rZ250RnZXd1lUU0FvNndaTjNYS3k4dnZqYktOc3JoVUlDWUZ5a1phN3IxbXdVamMvR0ZYSmFMNklnV2NyYmY1K2VlZi93SDUzdVVSMVM0TFNRWGlwSURaa2xmK205OU4vQUZWeDRCSDVJdEhDampLbWVoYk9iYXhZOGZpRHBNTVVvR2tLMEJXL09lelp4ZEg5WWFzU0FCbjYyMVp2WHIxSFdTOUp5YTlaL0tBVWdGU0lEOC9iK0tqVDAyL2c1SVIrK0tSQUs1WTczSGp4dVhUOG9CVVdpcVFTZ1ZHbFZzZW9DblpmSGR6UUg0SEtnRHJqY1g4eGh0di9CMU5xSnFheXM3Slkwc0ZMUGw1VTU5YlZiRVFUTkxDZk9vS0V3bmdHSHMwMDEzTDc4bnBzTG82eWcxSlVnQU1qaGxiOEQwd1NRdllCT1M2WVNEQXNkMzAvZTkvbjU0aEhycEl0eGE1UVNxUVJBV0toNWdXZmZXYlk0YlNJUUY0V0liRGJjUXZBOXZOUzVjdXZZMmVzOFRWcXd4U2daUXJZRFFhYkhmZlUzNGJOV1RBSWNOd2dHT2JBamg5UCtjNzBqMUorWG1WRGVoVkFDeU9Mcy8vRHEweTRMb2M2MjFnNTkzMDFGTlBUU3dzTFB5aVZGY3FrRTRLMkFyenZ2alB2NTJHSVd2MncwUDY0dUVBVjZ6MzRzV0w3NkJmakY2NWRPcXpiRXNPS1FBbTUvOWRpV2pGb3daY0dUMmh4OUcrblVPNnlhNW1rQUwwV0JzRHpsYThYK3REV1dhK3VEU3RXclZxQm8xOVQrdTNsOHhJYXdVc3BsRnAzYjU0Tlk3bWlrLzcwMy9NeE50cGVUU2xueFdIazY0Tkt1Q2YvZXhuNTh1TFM2MDg2YjgrM1BxZzRXRE5IdzBPNXlmOUdrdWY5K3NYNk4zdHdYbWFWV3dNa1VXditRN2VMVlNoSGsxbXYzMTBLZzlWcnQvaC9QU3RRb04vUGxWeGhCWVlhN0FiVkN3YzRQUXh6eEhYUzhBTmhrWjdqYUdxOFc4R2g2ZWQ5TXVNNEMyZWJyRDdKaHA2Q0lKc0RyNDgxL1VHdzRubnFZOE1lRkIzdFlEakY2Qlk4S0tpSWpPOXFlcTZvTkk1dXJMKzFMOGJPdDJYTTY3M1ByUGY0T2p3WkRYay9wNmU2OEJxVjFjWEF4NWt4VVA1NE1nenJWaXhZcGJKWkNyTnVMT2FnQVpuSXR5UXdXUTJHZ3BwWGxLZUVlYzhPd09ONzVWKy9ZRXJabEh2MkE4UDZxaWVCVGRkZWVXVlg1THVTWkJXR2JuQ2tEczdQUWEvUHlPN0VMN1JaSTVIVENqK0VoWGFUd3Q3SUtwZnByWGdpbnRDQlUza2Y4K1RnSWZYTmxPMkFuSmJpY1ZBdDdpekxvQlIyeERMUE9vWVcvQ2dQMWVpQldmNlRYUnJQcC84NzdsWnAwWU9kNGdoaHlVUE5VS1J5ZEpZYmFhNUl5WVU1bDgrNTNCUlA1aGp4WXByZjlOWU56N3p6RE9mcGw5R1NTWjNXcmE5dndJTU9SbTlyQXJVbjVLYmZ6enQwOVFwaFYreGN5RXQrUGp4NDJkSzkwU1VLWHZTRERrc2VkWUV3bnJZeUlLWjFKODl0T2hhY041Z3BMbmZVN09tODdJai9SUmd5TFBKaUZsc1pqQUxDODRjSy8xR0JnZHN3THFKWmc5T3phYk9jd2RsM0tjQUlDOG9OdU10cm4yWkdacENIeXhXMHhYVS9INFhtZ3c0OXhMclJnSjhTb2IyVlRZN0NnVlV5TE5nbkx3WGNJWGZYZ2tVcHZ2NTRLV2xwZWFDZ29LS0tIU1NSVE5ZQVFYeUlyUEIxZVhWek9MSXJFNVpyY2FLMGxLYnVhWEZDYkRaWUNzdUNmY0VtY2JmL3ZhMzR5bTJjcWFNczE4QmhqeVRaLzNUbUtCMTduY25nVjFZOFg2QU0vWEdxNjVTUHNhWi9XZFY5akJJQVVCdUxTU2ZuUEZnSWpJb0hqMnBDRk83eFI2b0ZweTdZUnc1Y3FTOHdBdzY5Ym16MGdjNWNNaXdRRTB1S3JIMEcwa1JmWERGUWJmWmJCTXlyR3V5dVhGVVFJR2MzcC9RN2ZTUlQ2NU82WWpqRVJKWFZYNmhDZXdxSFBOUnNJTEFGanlQM2oySXowWElrTU1LQkNBM1pkd1Fvc2xvQkxzcXl6aUZvZ1hIQmlOTmtTM09ockZSZEU2R3dTc0F5UFBKa3J2SmttZUNIVmVZTmVVQmNQYkJsYzd6aWtvOUFZNlhqTXNnRlZEbWt5c1hucUFqQXdJTjU0TmRsV1drUlF1T0x1Ukp3Q0dEREt5QTBaUm5zTnJNNUpPbi96aTV5WnpIZ0hQejFWRVVaQ2prUzhCVmJXU2lWd0dHWENFa2pWVXhHbFhBMWI4NWJNSFZEQWw0R3AvQkZEYU5JWGU3dkdrN3VFTCtpT2hlSzB6ektBcWtreFk4aFFCbHdxRUJlWDRCSm1pbFoydU5SdVg2VWVHWVc4Z1duTmVsRDg1S3lEaWtBZ3k1dXp2OXhzbE5SdlVpVTIxN1B3dE9XN1RRcTRWbFFpb0FCUlRJclRRek5jMU1lVTllRDlnTmFjSFZQenBlcjlkQkgzbVZqNnRKbHNNcXdKQjd5SktueXpnNXZUWEFJVFJhWVpySHdkVjhuOC9YcGE3SWhGUWdqQUtBbk9aaHA4M2dTby9mb0dWWEdRZkhEMUQ5RWNLQ2grbVQzQ1FWQ0ZLQUlmZTZ5WktyRkFVVlNkcUszOWNqc3F0d0xmcmdhRWlQdE9CSk94OVpjeUJBYnM3SDNKVVVkOG1uV1BDZ241bDRRYWxza0lDbitDUmw2T0VWeU1sZDhicnA5VmtwTXVVOWZqKzdLQ3JrSVMxNHY5ZnBacWpvc3RuSlZZRHVKSklsSjZSU1lNckJySzlIQVZ5Rkc3MW5DNDVNWlpFK2VIS2h5TGFqTWVRK2p6L3BodHp2eTRNUHJySU1iVVVMem9EYnMwMTAyWi9rS2dESVRSWmowZzI1Mys4SHV3eTQwbW0yNEtvQ1RxZXpCZVplemdsWEpaR0pRU2dBeUEwRU9TeDVNZ0xjZnArN3AwVjdMTGJnVEwyL3RiWDF0TGFRWEpjS0RFWUJ0dVNEMlhjdyt6ZzZ1OEV1ZmxITXMrS2lZQVZCeVR4NThtU2R2TWdNQ0NML2oxMkJwRUZPOUxhZWQ5WXh4NzB0NzJFTGpuVUY4RGZmZkZNQzNxdU9qT0tqQUVPZXlNRVZmT3lxZXZ0RkxlRDlSbEg4R3paczZPenU3cjVFODFGR3hxZDdzaGFwQUkxbXdDZW41eno5M3NUNDVINVB6NlVUZXk1Mmt0YjlYQlRvcjFqdjNvMSt1OTErUnJvcGtFV0dlQ29BeUkwRWVieUhWOEJxdDh0N2h0b0t1RU1Dam40QWNxV0F3K0U0alF3WnBBTHhWa0NCbkc3dEs1RERaNG5UNG5iNXdhd0l1TkowOXNGRkMrN0RTSXEwNFBFK3RiSStWb0FoajVkUGppSENicnNYZ05OVEdNRVdYQndIVnlGdmFtcXE0OGJJV0NxUUNBVUFlUThaY0pvQkdIUDErS0YwTkh2QUxDdzRjNnpVRzhxQys5OTU1NTFETk9rcTlpUEgzSFJaUVRZcmdKdUptS1FWYTZDdk9mZlVmTmh3aU9vUlhSU0ZYd1ljeDBBR0N2am9JN0NYMnR2YmE2V2JBbGxrU0tRQ3NVS3VYR0IyZVdzcjM3dHdpZG9wdWloS3M3V0FNK1RlNXVibVNnbDRJayt0ckpzVllNZ0hNejBFL25kWG02ZVM2cUkzRSttN0tId3N4WUxUaXErMnRuYTNCSnhsa1hHaUZRRGNlRGU1RWlNZDZVSVB6TFUwT25lRDJkNEZES3RCejRMN2xpOWZYa216czRJS3EzdkpoRlFnQVFvdzVORlVUWVQ2OTZ3NUR3c3V1aWVLLzQxNlFnR3UvQkxXckZuVFNuNTRqYlRpMGNndHk4YXFnQW81cmowSFdIQjd2dHZocVRueVVWTXJsV1lMRHJoREFvNjJZUU9zTnZ3Wkx3MFg3cEdBa3hJeUpGV0JnSHN5OENIaGY5dGIzUGo0cThJcnhXQlhoUnMxaUJZYzZ3dzRmZzFlOHNOM1NjQWhpd3pKVm9BaEoxZGMvMlluTmFxNW9Xc1hSUUJjZEZIVTVvbzNlcEFKd0JseTc5TlBQNzNucHB0dWNoVVZGUldvZStSZ3duWFJabWgzWUJRcXU0T3VNUXV5aVgwYTZHUUhDdWhzMUQxR1g3VkJLVmhwN0FQZ3RmdlNTNGRjbTFiVXNRVm42eDEwNUZDQW82RGl6M3owMFVlZGpZMk5XNmRNbVhLTDBhZzE5a0h0aUhpbDlueWo0YjJkVllhT0x2RVZGaEh2bnBLQ1hzOVhEVWEzbTQ0ZHBGMVFXN1RpQjIzVVdkSGRSK2N3OERsREJsQ2dFL1MzMEE1aDl0T3BMdWJzYUcvcjZKV25KK2dOcnRibXJSZE83c1lNUXZhL0dYSzFuVnJBc1FHYW9DRE12dWZnd1lQL04yblNwTGdCL3NKYjZ3MHRIV2hUWmdWM3Q0dGVpZEJOallia2tFaFBlbTIvdUN5anB0MWZ1MTI3ZjdMTGE0K3ZiWisyUGRyeTJ2V0I5dGR1MSs2dlBWNmd2Ti92TXpUVUh2OC9LdTJoQmF6Mmd4czFoVExMcUlFQjk5NS8vLzA3YVBwc3M2NjFRUzFSaEV5RUc5M0x0eGJRS3hINCs3Z1FQZExBWlJHTGFkNWZ6T015WW94eVhFWk1pMlhFdEZoR1RJdGx4TFJZQm1sdFFGa0Uzb2ZUU21ZRS93MjB2M1k3SDRkajdmRUNyb3JQNDJtdTJyWmhCMjNWdmNERW51RUFoOW4zME14QzUvbno1OStMRitBNGFLYUdBT1Q1d2J4cE82TTlYOWpPZWRxeXFWam50dWp4bzIxVG9zdHJqeGZoZWxkbngzdHV1OTFKeFdIQlExNWdvcXBRZ0NNZkZweXR1R2ZUcGszdjBQdFNrSi96QVpCYkxMMlFNeVJpRElVWUNqRXRsa2xsV215VG1OWnJrMWhHVE1lcnZGNDlZZkw5OUpiTnB2cmF0Nms1b25zQ1h2c0ZQY0RocHVCWG9mamhTNWN1UGR6VzFuWktXdkdBZmhhR3ZKK2NNaVBSQ29CQmo4dDE2dENPVFVmb1dBdzRXQVd6L1VLb2kwd1VRbUdHSEpXNGFVeDhUVmxaMllQMERSOXN6L2tBeUJHOEhzZ2pRN0lVQU9EMmp2WTFkRHdNYTBGOGhqc2s0SG9XSE8yRnlWZXQrTXFWSzkraGg1SGwyWVF5dlFHUW0vUEpYUWtYY0tjQ2dlOVljRnJKRFBGZnRPVkRWSkZXV2RIMlo0RHk5UHBqVDkyUi9lOVFIOEVpUEF3d0d0STlvWHhkSHh6YjhJdGdQOXo5MGtzdk5aNDVjK1pkT2Y4SzB2UUZDNDJzS0pBendOb1lSZm1raVdsdE9WNFh5NGhwM3A1cHNkZ0hNYTNYRDdHTW1LYnlBTEtycy8zZE14OGZhS1FrTERnQUI2TWhyVGZsUnd3NGZpM3VWMTk5OVFXeTRycS9GbFNZaTBHQjNHTEp4YTRudGM5K3I5ZC81dGpITDlCQjJUMkpDWEEwUHNpS1AvbmtrN1ZuejU1OVgxcngvdWVWSVE5ejhhK09KTXN5Z1lHbWFIVEFYVmRuWitmN3gvYnNxTzBGZkVDNGNaYkMrZURZRG11dHVpbVU3djdyWC8vNjN4NlBSL2RQQW5iSzFRRElUY29RWXEvZkRTSHdwNWhqTVIzSTdiOWQ3MCszWGo3WFBkajZZdDFmMjY2QjZodG91N2ErM25XNmM5bFRmL0x3ZjlQdXVKMHN1aWRoUFlxQkFFZHpVQUVjZWNWTitjTWYvbkNNclBnMmFjVWhUZjlnb1l0T2s1bmNGVDVSS0lJMEIwN3JiZWR5a2NheDFoZnIvdHAyRGxUZlFOdTE5ZEU2Ums0YzlvNXRoM2QrY0l4VzJUMEplM0hKMVVRQ09LeTFDamlsdTlldFcvYzhXWEd1UThZYUJWVElOZmx5ZFhBSytIMDA3K1RVeWVkcGI3YmVnQTlNRHVoSlJBbzRXM0g4ZXJxWExGbFMzZERRc0V0YWNWSkRKMGpJZFlTSk1odlcyOW5WdWV2QXR2WFZ0Q3NEenRZN0xvQ2pTV3pGNGRnRGN0ZmF0V3Vma1NNcWtFWS9BSEl6amE1Z0xqTUhUZ2NtOUFmeU9ROWxPTTNibzQzRk9zUzBYajFpR2FRSEN0RzJEL1h4UG1LYTJ5UG1pV25lM3VQMytadnFqajlEMjF5MGdEMHdHSkgxcG5JRFhtU2lEQUlBRDdyWWZPaWhodzdTdThUZmxuTlVGSDEwL3pQVFJhZkpiRlpPTXA5b2pyRVRwL21FaW5tNmxZYlpFRzE5MnZMY0RyMDQydlpwNjlmdUgyNDdwc1IydERTL1hiVmwvVUhhajYxM1JLTW5MRkVrTGdxWFpTdXVYR3ppZ0E4Ly9QRFQ5R0J5Sy82TXlLQ3ZBRU91WDBKdTBTb0FwcnpkM2EzVk85WS9UZHNZN29oOWI2NHZXc0RaRjhjQlhaczNiNzVVV1ZuNVozbkJ5WExxeHdISTVjMGdmWVdDdDhCNk56ZGUrSFBqNmRONFZoRHVDWmlMMlBmbTJxSUJIUHVJVmx5Qi9QYmJiMytUSG11cmxoZWNMS2wrREg5Y0hVTGtZdXlmSTQ1a3dYNjhqNWptZmNVOE1jM2I0eDJMeHhEVGVzY1J5NGhwb1R3ZXpYTjFkVlZ2ZmV1Vk42a0l3eDIxOVViMWd3R2NyYmh5c1lrR3JGcTE2akdYeStXVHJnb2tEUjhVeUUwMGlaTlBLSW9qSFduZ3NucjdEN1E5MHVORVdpN2E0dzFRSGd6NXZGNWYzWkVEajFFVEFEZGZYRVp0dmRHRmFBSEhQZ3c0ZmxHS0ZYLzAwVWVQSER0MmJEVzlrUmJiWlJoQUFZWWNXTXNsV0FNRFBjeGdiNzY4bW03cVlMNjMxbnFEdmFqQ1lBREhBUmh5dHVMT0J4NTQ0Tm5MbHk4M1NsY2xNdjBCdVpGR1YyVG9VNkNINEhZN25JMzdOci8zTE9YaWNUU3Q5ZTRySEdGcXNJQ3pMNjZPaSsvZHU3ZjV0ZGRlZTVnK2YrS1Jya3BrNnB2cGxyNENPYnNiT1J3REtCcHk5cHl1cVg3NFlrTjlNNjB5M0ZHTmUydVZIeXpncUljaFY2MDREUnZ1STlDZnBSdEEydVBJZFIwRkZNamxVMUwwcFFjdmpabzBQSHZnZ3czN1NDcXQ5UVpyZ3dxeEFnNVhSYlhpbEhiZGNzc3RLK3ZyNjNmSUcwQ1JudytHUEZmOWNicGJhZWpxYU51eFpmWHlsV0NvZCtHN2xtQXNKWURqRE9MZ1dQaUNFNzg4eDRNUFB2Z2I4c2Mva2Y0NHFSRmhDRUNlZXo0NS9PNXVwL09UcW8zdi9vYWt3dXZPd0JCY0FEREZmRkZ5Y0NFV0M4NUhSQ013ZklKZkhCcm5wQnRBVGErLy92cXZ5Qi8zU24rY0ZJa3c0SmErVVJ4Q3pIS2ZIR2FaL3RKNzZTbWRYOUZySUpwb1ZlR0hZckRFdzRLVUhIeUlCK0JvSnhyRHJvclNTSHJWUk5XZVBYdWVnejh1SVkvOEJDbVFHN1AvelFWZ0FuNzM1YVlMeiszZnNxNktGQkxoanVuQ1VsUTdIb0NqUG9ZOHlGVlp0R2pSY3BxUXRkR3R2TGhTUEt4TWgxTWdZTWtCZWZaNjVUUkowTkRaMXJweHkydkxsMU5IdGE0SkRDYVlpam5FQzNBMGhDSG5VUlUwMnJGNDhlSi9vWXZPdlJMeTZNNlZpVndWb3ltZXB5ZTY0eWV5dEk4c2QxZEgrOTR0YjZ6NEZ6RFN1L0N3WU56Z1JoL2lxU0FBRi8xeE5OaEJYNG5vdVBQT094K2lCeVJxNUtRc1NCNTVZTWl6eVJYSGlFbTN2Yk5tOTlvM0huSjJkSFNRR2dCY2hCc014Y1Y2UStsRU9IdG9uTmpBUElMY1cxZFh0M1ArL1BrTFB0aC9lR2dlUHFjbFEwUUs0TDNzeW52QnMyQktNbVlJdWh6MmMvczJyZjFaWTMzdEp5UkFGeTBNT056YnVGcHZDSndJd0ZFdlFoRG81SXQzZDNaMjduYVlDbTZtR1hXRlBORTlVRlQrSDA0Qi92aEFnUEhNOU12OWZ2cGdsTlBaZkdqbnBudE9IemwwbHZxcmhUdXVscHYxVEJUZ29nVlgwd2NPSE9paXg3ajJEeDg5OWlzMEhKWXZJZWZUTUhDYzEvdUZqVXdja2NMOUVIcGhwdjM0Z1kvdXE5bnpVVTBJdUdHNUFYamNRNklBUjBNWmJJNlZ4amZWMTdVVmxRdzVPcVIweEVLYWgyR1JrRWQrVGxYSUlXMkdHSEs4NnRqdGNqbnFqeDc0cHdOYjM4ZHRlTkZ5eDIyOFcwL0ZSQUl1SGhPUXE2QmZxRDErMFdJcDJEZHMxS2dGTkNSbWt6NjVLRlg0dEFwNUJ2ams4TG5kRGtmcmlRTjdmbjVnNndhTWRUUGNHUE5PT054UU10bUFxNkRUbmFzV244ZTFzN1I4d3ZWa3lFdjR4S0ZSTW9SWFFEVUlpaUduejE2bjRiOGVHdWQyZDlrYnFuZCtjQys5YnUwbzljaE9Dd0JudUhFekp5RitOOVdyaG1RQmpnT3lCVmNodjl4d29iT3JvM1hicVBHVHJqVlpMR1Y4TWFXMlRpWjBGUWhBVGxLeXFyb2xrNzhCNDl6MEhzR1QremF0dWEvdXlNSFQxQUtBblhTNDBmTmtBbzdqSVREZ1N0eCsrYUt6K2NMWkQ4b25UWjFOcnlFZUE1OWMrdVVCb1FiNlg0VWNCZFBBSjhkd0p0NUNSVE1ERCt4WTg4WXZHcytjYXFDV2FkMlNwRmh1MWk3WmdBZkJUWTFRMXVtZHorN3pwNDV1SFhmRmpDbjBBc3RKZVVZSk9aK2dnV0xWWFVteEtjZXNRSHFXa202L3QyemQrc2FLSlcwWG15NVQyeGx1M01qQkRNR2t3ZzN0a2cwNGpvblFEM1M2MHZiVlZoL2NQbWJ5Rkd1K3JYQTIrZVJreUdHV1pCaElBZFlwWU1TVDc1SDMwQmczZmNxbHA2MnA0ZVdOcnk3L04zclZXanUxV1lRYkY1UkpoeHU2cFFwd0hKc2g1d3NOK25pdDEzK3F1dXBBNFpDaE5TVkRoODgxbWt3MHdpS3RPY1FhS0VBbkNKck1vTXdJcEpFU2o2T3JsYWE4THR2MnY2KytRZWVRTHliRk81UXBnUnRhcEJKd0hKOGhSNnlDZnVGVXpRWDZVN2Q1UlBuNEs4a3ZMNWN1QzZRYU9LaVFKOEVmSjIvYmdJdEpSM3Zid2IxYjF2M2lhT1gyUTlSQ1dHMjIzSEJKeEtIQVpQLytGTUhTQlhEQXpZc0NQVjE4ZHAwNmVHQmplY1ZrazdXdzZEUFNaVkhPMTREL3Nic3lZTUVZQ3VET3BOZmo3bWxwT0w5eXc2b1hmOTk2c1FGdm40TEZacmkxazZkaU9GcHN1NllhY0xTZWY5bHN4VlhRNmMrZDc5U2hxb04wNS9OSTBUQnlXWXh3V1dqQVFQcm1ZYzk2bno3eE5lV0JoeFJvZk52cGJEbDdyUHBYMi83M2Y5N3FkVWtZYm94eDg4Vmt3bTYvaCsyOFptTTZBSTRtaVpDTG9DdnA4NmVPTjlpYld6WVBIVmsrbWx5V0tYQlpNQzdXZHlJMXZaS3J2ZHF3ckxFSkFyQXhTb0p2Z25hMFhOcGN0WG50a3FPVkh4Nm1XdGxpQTNEdERSd1lxcFFIa0pKT0FlM0JYRnI4OFBDbVNpc3QrT0txalpaQ3BLKzU1Yll2VkV5NzhwY0ZSY1VUOGVSTDN6QVpiWldobndJQU01YkF3My9kWGZhejlTZU8vdnZlOTlmc292cmdnakRVUEFUSTAxMXh3UGo4c21KcGVPKys2UVk0bWhVd3p3SEk4Wmc1dnJRS3lCbDBXMEZKU2ZFTnQvMzlEMHBIajczTFlyVmF5WFdSMXB3RTBndUJHWWpSTWFlT2tOQkR0YzFORFNzL1hMUDZGVmRuSjBaSVlLbXhBR3oydFRGS3duTzVvenNRN1pqSWtDNHVpcmFQTEJKaUxMQUs3TlA1dkc2M3QvYlF2a01PUjhlbW9XV2p4OUZyMENaS3QwVXJZZDk2bnl2SHRrTS94aHd1ZGtmc3JhMGZIdHo2L2ovdjIvenVCNlM1T1B3SDZ5M0NqZk1UMjUrS3Z1YkdOWldPRmx6c0lOckhMZ3RiYzdib2NGc1V5ejd2cTkrNm9Yeks5UHNLQ2dzcmFFNkw0cmIwblZTeHV0eE9CeXg1YUEzWXovYVJuKzF5T09vYlQ1OThkdGU2TjdkVGFiYlViTFV4OU1jM2J0am9zRUVLWFhrS2M5TWRjSllHa0RQbzhNMEJPZnZuQ3VSbXM3bGc3dUp2MzFRK3J1Sk9hMUh4Vkx6Y0V2NjVCSjBsREIwejJMaUFKRC83Vk5PRitwY3IxLzV0RTcydWhNSG1tTWUxUlY4N0xhMjIyTk5NQVJ4dFptc08wR0hOR1hRQXpyQWp0bjV4MFRlL1ZENTU2cDBGeFNWWDRZMVJtSW9yUVNkbGhLQ0FqZkZzTDFsc2UrZVJwdE9uWHY3b3ZiZDJVQkdBakFWZ2N3eUxEYkQ1amlUQVRsdXJUVzFUUXlZQnpvMUdtM0h0d0tERG1yTkZWd0NuZFNXKzV1YXZYek51OG95N0NvY011UnBmVmdpOGhpRjNoeGNETGdwbS9HRmlsTWZnNk9qWWYrSDA4WlUwTXJLWE5HT3d4VmgwUndBMVgwaFNNak5DSmdJT1pkRnVMS0xiQW92T1E0c2k2UGxYejc5NTl0aXBNMjhyS2htMndHek5MOFRyR0hMbG9wU2h4b1FvM0ZyM2Ryc2RYWjF0V3h0TzFieXpmOXY3dUwwT2lFV29rWWExNWtYMHN6UENhbFBiMVpDcGdITUhHSElHblYwWEJwMHR1MkxsaTRlTktQcmMvQzh2S0Mwdi8wcGh5YkE1Tkk1dW9nbGRpdnVTYmVQcEdBa0IzSmlmalUrQ09EcmJxbHFhbWpZYzJMWnhxNzN0TW03UXNIVUcwQXc1UTgzRGZyRGFHZU9PTUJSaW5PbUFjMSswb1BPTkluWmZ4Rml4OUJPbVhqVnErcHk1Tnc4ckcva1ZtcDQ3bFYrWEZ2RFZNOCtOVVMxMUg5UjBTOTF4cXEzNTBvWVRWWlh2bnp0MTVDS0p4UUF6M0dLTWJiRFdiTEV6R213UkRFNW5ROHlnSXdia3NPaHMxUUU1NE5iRzVxdStjTU8wY1pPbVhXOGJNdlRxZ3NMaVdRUzdGVzk1aGMrZXJzQUhBKzFYWG1SSmxycWJYcXh6Mk5uUnZ2L0NtWk1mSHRtMS9TVDFGOVlZOEFMbVVERzJzOFdHQzVJVllGTS9sSkF0RnB6N3d6SDZ4YkFEZEY0QXVCWjR4YUpUdnJLdG9MallPdXZhTDgwcUd6UHg4d1ZEU3E2MjJZby9aVFNiTExoYnFqd3pxc3hQcDlKS0NNaVhxQkdhQU1RNFVNRDF4VTBZOGpzTW1NMkhKOVpwTHBySDZiUWZjM1YwN205dVBMdnY4SjRkaDExMk8xd09oaHBBODhLQTh6YTIxbXl4bGRxcGZGYUZiQVdjVDVJSU92eDAwVmNYclR0RHpua2NtNGFXbFJYT3VHYmVaNGFYamZtMHhWWXdNVC9mT3RGc0xSaG53c01ZeXZDalVRRy83NktWRDYyTnRWSUhvTldXVWlBbW9IRlJDSkFWWDVwaStvS2RrK3p6QmJlNys2ekg2VHJiMnR6NDhmRzlPNnZibTV0eFZ4R1FzaVhtbU1GR3pIbUlHV2pSdnc3ZEdDcWM2VUdyZXFiM0oxejcwVmNBempGYmRkR1ZZYkMxc1ZoVythRlV6UHpNcU5FVEoxWVVEeXViYUxVVlZlUmJyUk5NRm5PWnlXZ3V6QXZBajlmVG9aNkFtd1BManhVS0NrMUVNbHRvaXIzME9KT2poeUQyK2IwT244ZmI3Tzd1UHRmdDdLcTN0eldmL2VUczJmcjZtbXI0MEF5bGFIMUZlRU9seGJMc2ZuQ3N0Q2ViLzJQTnM3bVAycjZoeitJQ2VObXljd3d3R1dxR25kZTVqQmdqalVXc040L2NIZlBRMGxGRjlQaWR6VnBVV0ZSZ0s4S01TSVBMMmVYbzdxTFJ1dlpXWjN2THhTNXlLd0FtdXdnY004eUkyZXFLTWRJTU5FT01kYkVNNzh0MWNrekZjaVBrSXVEaW1RMENrall3cUJ5TDhJdUFZN3U0amN1alBxUzVYa29HcGJFdUJoRTRUck4xWmNDMXdESzBERFd2YzNtT3VUNk94ZVBtVERyWEFSZFBOR3ZCY0NMV2dzdnJEREVnUnptT09UOVVYVGdXNXdNNkJJWlB1dzVJa1FlSXhaamg1UmpieERUV3NTQndIRmpMMGY5WjhCenRmdGh1c3phSXd5MGkxTnB5T0lCWWozaEFCbENNa2RZdURMczJYMXhIdlZpWFFhTUFpNi9KbHFzNkNyQmVEREtLaGNzVHQrdFVHUVFtUThyd1lwOXdlWHAxeXZ4ZUJmamtTRUZpVTBDcm8zWWR0V3Z6R0Z6eHlObzg3YnBZVnFZalVPRC9BWnJibTdUczFycEZBQUFBQUVsRlRrU3VRbUNDJyxyZWQ6J2RhdGE6aW1hZ2UvcG5nO2Jhc2U2NCxpVkJPUncwS0dnb0FBQUFOU1VoRVVnQUFBTGdBQUFDNENBWUFBQUJRTXliSEFBQWsvMGxFUVZSNEFlMmRDWnhVeFozSHE4L3BuaGtHbU9FUXVRUzVWQ1R4V0hFREJseU5rY2lha01Na3h1akd1T3ZITzI0SUtDYWUwVVFsS3dteXJvb2NvcXRvekdwQTRvRmlWQVFVNUlhUmNjaHdEc1Bjek5GMzkvNS9iK2JmVkwvcDd1bWU2YnVyK0R5cVh0MzFyMi8vNS8vcTFYdlBJSlJMcGdRTU1WWWVpREdmeWhhbkJHS2RnRGlyell2c0xMdElQZ3VCMC9sYzcrdmg1dk5JdnI2OE9vOGlnZTZFSDZWbzNpU3hqT0RydzFyY20yKysyZitNTTg0WVYxaFlPTlJrTWhVWmpjWStPQUtCZ09aVFhER1ZMVFlZREgwZ05ZcHZJYS9WNS9PMSt2MytGb3B2Z1krRDR0cmEyOXVQN04yN2Q5OFZWMXpSaU95NmcwNkRjUnlHcjF3WUNmQ0VoVW5LMnlpV2lRWXZTUUcrOGFjLy9hbGwzcng1by92MTZ6ZStvS0Jnbk5sc3hqR1dRQjVMZ0E1TWhyVG9oMUJMMEZkNHZWNGMrMXd1MTc2bXBxWXZIbm5ra2YwclZxendVSnQrT3VRZkFMckJtaC9odkhjOG1ma3VDQmxtRGVpNWMrZmFiN25sbGd1TGk0c3Z0dGxzWHllWXp5UGdySmtnS1BwQnVRbjRMVTZuODhQVzF0WjFpeFl0MnZqb280ODZxRzk2NFBNZTlud0duS0UyRWhnRzB0RFdCeDk4OEh6UzBCZGJMSmJwZEV5bWVGc21BQjFESDV3ZWoyY1RIUitRaGw5Mzc3MzNiaVlONzZaeUFGeUdQb2FxY2l0THZnRWVBdlgxMTE5dmUvamhoeThuTFgyMTFXcTlsS1lXdG5JdXVGYTMyNzJXdFB2LzNuUFBQVzh0V2JMRVNZUEtTOWp6QVhDR0dqNjB0ZkdMTDc2NFlQRGd3VCt4MiszZnAvTXlPbkxaMVRzY2pqL1gxTlM4T0g3OCtFOXBvTkRvc2xiUGFUTW1sd0Zuc0RXb04yM2FkTnE0Y2VOK1RCZUlQNkZWamJHNVRIU2tzZEVLVFFWZHFMNjRiOSsrbHlaUG5selZDYm9NZTZTaVdSdWZpNERMWUpzcUt5dW5rcmFlQ3hPRUxoSnpjYnh4dzBjWHFRR1lNS1RWSHozOTlOTS9wZ3A4ZE9RazZMazA0UmlMcHEzSk54MDRjT0FiQXdZTW1FdXJIMVBvWExrSUVxRFZtUFYxZFhXUGpodzU4bDNLd3FBejdCRktaVTkwTGdBZUJIdllzR0htalJzMy9tdHBhZWtjTWtQT3k1NXBTSDlQeVh6WjB0RFE4TmlGRjE2NDZ2RGh3MTdxRVNEUGV0Q3pHWEQwWFlPYndMWVEyRmVWbFpYTm9Sc3ZaNllmbCt6dEFkMVkybE5mWHcvUVh5SFE5VGVUc201ZzJRcDQwQlRadFd2WCthTkhqMTVBR3Z2OHJKTitCbmVZTlBybS9mdjMvMkxpeEltYnFadXk2WkxCdmU3YXRXd0RYTlBZTkF6VDBxVkxTMmZObXZVQTdmKzRnUzRlQWJ4eW5SSXdITjhvekRzZUZRWkhUVzlsNG0vM0JCYS84bm5EZlQ5N3ZLcUJLbVBRczJacE1Wc0FSejhaYnZQUm8wZXY2ZCsvL3lOa2ppUmxEMGh2cVVoM2Vjc3Jwd3REMitHRWRjTWZFTFVOYldMZXdObmlCYXFVN1hOQW52R2dad1BnNktNSng0NGRPeWJTc3RZZjFjb0lTU09Lc3k0dGlKTGE4eVNQWDZ3dnJ4TjNUTHBYN0tKYW9NMXhaRFRrbWZ5blBhaXhKMDJhVkVCWCtQZE9tREJoZzRLNzU0RDJ0cVRGS0thY1BWaHNPUEVuY2Ura1NRSy9Jak1kWUNoakZXV21kb3poTnExZXZYcll0R25UbHRLTm1xLzNkb0x5cFh5eU5MZ3NQNDlYZlBoT3Bmalp6Q2NFYktHTXRjMHpFWEJlSVRGWFZGUjhnNVlBbjFPMnRveFc5K0ZVQUk1ZXdEWS9VQzkrUHZyWEFqZUoyRGJIMm5uR3VFd3lVWUphZS9yMDZiYmEydG9INk83YTZ3cnVqR0dsUzBlTUJqRncxQUR4ZXRNVDRvSHBaMmxiaTNHdGxGRW1TNlpvOENEY2E5YXNHVDUxNnRUbHRDbEszV0x2Z2xSc0VhblM0SEp2WEY2eC92MHZ4SFhmV2lnT1VYekdtQ3laQURqNm9LMlM3TjY5ZXdyZHRGbEpXbnVBTER3VmprOEM2UUFjUFNTVHBhNmlUdnh3d20vRWVqck5pRldXZEpzb0RMZVpkdjNOSERObXpHb0ZkM3d3WjFKdU1sa0dqQnNvVmxmOVRzeWtmbUdGQllvcnJVbzBuWUNqYlFqQVFqdi9yaHMrZlBqTEZMYlRvVndXUzRCb3RvL3NMMTQrK3JpNGpvWmhvUU56bkRiTzB0VndFRzY2Sy9uTElVT0dQRVczMi9HTFZ5NDNKR0FlVWlLZXF2c3Y4VXNhVGxvaFR3ZmdHdHowRUlLVjlpRS9SanNBSDFJUEl1UUcxU0dqQ0FoRFdhRjRxSG1CZUd6d1lJRzNFYVJGazZjYWNBM3VHVE5tMk9uRk5zLzE2ZFBuMWhDaHFKT2NrMENKVGR4YWVZOTRic1premZ4TU9lU3B2QURRNEI0NGNHQUIzY0JaUmcvOGZpL25aak5EQnBTdVZaUm93M2Q0eEdzakh4VC9WbHNyWEpTUGx4R2pGVWxJV3FvMHVBWTM5ZGhhWGw0K1g4R2RrTG5McWtyc0Z2RTkwdVR6d1FBZEtkUGtxUUNjNGJaVVYxZlBwWGVRM0poVk02TTZtekFKOUxHSkcrdi9JT1pTaFNtNzhFdzI0RENCMElibDBLRkQxOU96a3I5Sm1MUlVSVmtwZ2RJaThadnF4OFgxWUlJT3NKRlVNem1aZ0tQaitGTmtvUXZLNzlDcXlRSUtLNmNrSUU0cEVRc3FIeGJmSVZHd0prOGE1TWtDbk9FMmI5KytmUnJkZmw5Q1M0R0FYVGtsQVR3aVlScFZKcDdiZmIrWVJ1Skk2aDNQWkFBT3VGR3YrYTIzM2hwUGI1TmFTZUhrUEdKQ0ZTdVhuUklnU0d3VEJvbVZiLzJuR0U4akFPUmdKdUdhUEZtQW0raUI0S0lwVTZZc3A3MGxKZGs1QmFyWHlaYUEwU2hLTGg0dGxzKzZRQlJSVy9nTG4zREFFMTBoZmpEb2FNSHg0OGVmNk51Mzd3MFVWaTdGRXNqRWRmQm9JbWgyaU1YOTdoUjNVcDZFcjVFblVvUGp4NEw2TEh2MjdQbXVnanZhbEtvMFdRSjk3ZUtHTHg4VTN3VTdkSUNoaENuZVJBSE9jSnRYclZvMWR0U29VUXZsQWFpd2trQjNFcUFuZ3hhdXVrMk1wWHdKdGNjVENiajVra3N1S2FMSHpaWXB1N3U3NlZUcGVnbkFIcjlzdkZoMnlRVE5IZ2ZrQ2RIaWlhZ0VQeExON3FibktPZVhsSlNvTzVYNjJVdnhlYmJaNExKNHlCNS9tdXp4MlJTWEVIdTh0eG84YUpwczJiTGxZdG9kcU9DV1owdUY0NVlBN1Q2OGNmdTk0bUlxbUJCVHBiZUFhOXFiekpJaVd1K2VUeTlXajN0QXFvQ1NnQ3dCSUVUcjQvT25qd3N1SGZhSzBkNFVadTF0ZWY3NTUyK25GL09Na3p1cXdrb0NQWldBMVN6R3ZYUzl1STNLOTNwVnBhZUFNOXptRjE1NFlkU2dRWVB3YUpKeVNnSUprOERndm1MMkMvOGhSbEdGdlRKVmVnTTRMaXd0OUhUTzc4azBLVXpZeUZSRlNnSWtBVEpWQ3E4OFMveU9ncjNha05VVHdGbDdXM2J1M0lsdlRINUx6WWlTUURJazBLZEFYRUVic2k3dmhCeXNncjI0WEU4QVJ4bnpsVmRlV1V3M2RCNkxxeldWV1VrZ1RnbU1IU2dldTNLeTlvRmVObFhpcWlGZXdGbDdtNTk4OHNsYjZYUFhJK05xVFdWV0VvaFRBaGFUR1BuTUxJR0gweG53dUxSNHZJQWp2NGsrZ1YxQ3IzdTRLYzYrcXV4S0FqMlN3SUErNHFicnB3anNTc1YxWDF6TXhwT1p0YmRsM3J4NVA2Y1gwWmYxcUxlcWtKSkFuQkl3bVVUWi9UUEZ6NmxZM011RzhRQ092R2JjMURubGxGTnVqck9QS3J1U1FLOGtRRy9LdXBsZTBZeDk0MnlxeEZSZnJJQ3o5alkvODh3ejE1RHRmVXBNdGF0TVNnSUprb0RaSkU1WjltTnhEVlhIZ01ka2k4Y0tPUEtaNkZzNTlsTlBQUlYzbUpSVEVraTVCSWIwRmJkTk9qMitOMlRGQWpocmI4dktsU3V2SXUwOUl1VWpVdzBxQ1pBRXJCWXg0aS9YaWFzb0dMTXRIZ3ZnbXZZZU9uU29sWTQ3bEtTVkJOSXBnV0g5eFIwbEpjRzdtOTN5MjEwR2FHOGM1bGRmZmZWZmFFUFZtSFFPVHJXdEpFQWJzY2E4ZjdPNEJFelN3WHhHRkV3c2dHUHQwVXgzTFgra3RzTkdsS05LU0pFRXNKMTIxQ0R4SXpCSkI5Z0U1QkZkZDRBajNYVDExVmZUTThSOVowU3NSU1VvQ2FSUUFuMEx4SXlydnliNlVwTUFQQ3JEMFJMeHkwQzZlZTdjdWQrbTV5elY1MFZJR01xbFh3TDAvS2I5bnN2RXQ2a24zUzRaUmdNY2FScmc5UDJjSHlqekpQMFRxM3JRSVFHWUtTUDZpUi9RR1FNZWtlTklDZERlT0V4UFBQSEVpTUxDd3E5MVZLMytWeExJREFrVVdjWFhucmhhWU1tYTdYRHcyc1ZGQTF6VDNqTm56cnlLdEhla2ZGMHFWQkZLQXFtUUFCRnBuRFV4Ukl2SERiaTJla0tQbzMwL0ZSMVdiU2dKeEN1QndjVkJ3Rm1MZDZraW5HYkdMd0h4cGhVclZveW50ZSt4WFVxcGlJeVdRS0JvV0ViM0wxR2Rvelh4c1MvOXUvWjJXbDVONmFMRllhVHJYUkR3cjM3MXE5UFV4YVZlUEpsLzNuemVmNHVhTjI4UzdoTkh1blEyRU9nU1JhL3Ixcmt1RVhpbGQxZW5yNnVuZWNKVkhrdGQ5T2x3YU9KcDFMUGRkRUFwZzkyUW90RUFOdzhZTUdDcUFwd2t0bWVuOEs5Y0lVUlRJOGt2ODEwQmRYR0k3MkpSNzNMUjkrTkQ1anZ6T3g5bkQ4MHUxMVFoVmoxRHhSandrQnIwZ09NWG9HbndvcUlpTTcycDZzS1EzSGw2NG52MGZoR29QWjVWbzhmZjdQNSt2Mmp3K0VpbDVTN2tmUUtCQzhGcVcxc2JBeDZpeFJHcGQ0Z3pMVnUyYktMSlpDclZKK2JqZWJiQnpYTmtvVHNpcGZSUW8wSFRXUnliV3o3Qld2cUhrWU1uMHFqWURnOFpvQjV3MXVDbU04ODg4eUpsbm9USUtpdFBHSElqM1IzaHljMGxId0NQTGJSZFJCNEE1NkVGNXlvYzRJZ3prZjA5UlFFZWxGTldCd0I1ZjNva0poZm5FMk1xTlp1bWdGazZ3QzRnRHpvWmNLYmZSTGZtcldSL1R3N21Vb0dzbDBBbzVEelZ1ZUVYbVV5VGh4Y1c4aGVVZVZEYW5NbUFJd0xueG9VTEY1NU52NHcrV2c3MVg4NUlnQ0UzQW9FY2NqU2NQcjhaZGVyWk5DU05YM2xvOGlvS2syOGFObXpZaEZ6OGN5WVBQRi9ESFpBYlJLUFhtek5ySzZCNnFNMHlnYnhQNldDT3RhVWpXWU56Z3BIMmZvL0pWd0R5WWR4bVV1SDl6V1pOM2VYS2VQdVlqR0FXUERQSDJ0RDBHaHdaVExSN2NJelM0SnA4Y3ZZL1FONlBJRy9LQVUwT1ZvdU14dFBCTGgwTXVUWjNyTUZCUFJ6T2pRVDRhTzFNL1pmVEVtREljOEVtdDVzMHdEVitPeWROWTVvQlI1eW0ya3RMUzgwMm0yMWtUcytzR2x4UUFvQzhyNG5NRlpwOURRQUdJY3Q4bTlFd3N0UnVoMFhDdzlER3FBZmNlUC85OTJNckdyWXpLSmNuRWpnSk9kaklVaGNRQmJjUEhReDJ3WFJ3SUd5RE0vWEdzODQ2UzIyUHpkSTU3azIzQVhrSm1iQW5mTm01ZHdVQW4xbWtiZTMrb2hOd1JBVllnd2NCSHpod29MckE3QTBwV1Z4V2c1eGU1V284cVFDelpqUUF1TlJzN3JLU3dob2NBd0hzUnJ2ZFBod255dVduQkFCNUg5TGtMWm9tenk0WkZKbU5ZRmZqbUh1dTErQUdldmRnTVNjcVB6OGxvRUd1YWZMc0dyL1pZQUM3YkkzQTF4Njc1MUVnd2toYlpJdlZHamlMSkg5OVFGNU1tcncxU3pRNW1LVkZjQUFPcGEzQmpkbmpreUQxQkRoZU1xNmNrb0RRTkRudFFzUVNZalk0Z2h6c0JsbEdXTGJCTVFhREFoeGlVSTRsWUNMTldFem1pcWJKTS96QklLdkJ5SUJ6OXpVTnppY2ErUXB3Rm9meVdRSU1PYkdlMGM0a0FneDRzS2Vzd1lNUkN2Q01uc08wZFk0aGIvUDVNL1laVDdOSjArQXNJNDFwWGtWQkpDS1VpY0xpVVg0WENRRHlJaE5XeVlQNnNFdWVkRVpFMCtEY0x3VTRTMEw1WVNYQWtMZHJtanhzbHJSRkdtT3h3YWwzYkxha3JhT3E0Y3lXQUNBdjFEUjVadldUVmxIQXJtYUpjTS9ZUkFuK3pmRjZ2ZTJjcUh3bGdVZ1NZTWk3ckROVEFTWXMxYjdQSDVEWjFaam0vZ1hINGZQNTJvSW5LcUFrRUVVQ2dKejJZV2VNUlU2WHYzcDJOWldPMWMzZ0NxZlM0RkZtVkNWMWtRQkQ3cVMzYUtYN0xYRSt2MS9XNEJyWGJLSnd4d05LZzdNb2xCK3JCQUM1amQ2OVFsNWFuUzhnb01HRHlocWRrUzhvdFFRRmVGcm5LR3NiMXpRNVFhNXA4alNOd204SW1paEJ5TU5xOEVDNi85YWtTVUNxMmQ1SkFLK0gwelI1NzZycFVXa3dTeXVYRVRXNFpxOVF6UUZsZy9kSXZxcFFwd1FZY2hlOXZEdlZiN1gxQmdSczhDREw2Sktzd2JVRUFyeTFzNi9LVXhMb2tRUUFlUUZ0UVV6MUhVOTZGenJZWmNDMXZzczJ1QmJoY0RnYW9PN1ZudkFlemEwcTFDbUJEc2lGY1BsVEl4SlE3YVRYb2V0Yll3M08xUHNiR3h2L29jK2t6cFVFZWlLQms1cThKNlhqTDlQazlZQmQvS1NZWjgxRXdRbWNGbGxSVWJGZlhXUjJDRVQ5MzNzSkFIS3JacTRrOXc0bmVscmxkT3duTHdnM3dxekJrYTRsdlBiYWF3cHdTRU81aEVrZ0NIa1MxOGtCNzJ2MXpYckFnK3ZnVEwzLzdiZmZibkc1WExWbXMzbGd3a2FvS3NwN0NRQnlDMG5CbytuUnhJdkQ3ZmZYcmp2ZTFFSTFkekZSMEZvUWNHUm9iVzJ0VW1ZS3hLSmNJaVdnUVU2Z0oxcVJnOVUyWDZDSytncTR3d0tPY1FCeUxVTjdlL3MvRUtHY2trQ2lKUURJNmZVT0NkOXgyTzd6Z1ZrWmNLM3JiSVBMR3R5SGxSU2x3Uk05dGFvK2xvQU1PY2YxeGdlOFRUNHZBUGZSRWFMQjVYWHdJT1RIamgzYjM1c0dWVmtsZ2U0a0FNaGhxbmdUc0MwRTlkUjZmR0EyQkc3MElad0c5Ny94eGhzN2FOTVZnRmRPU1NCcEVzRE54QTV6cFhkV3VZL01qVlcxelR1b293QThCSElHSElNQTBFajAwVWRnYTV1Ym15dVZtUUt4S0pkTUNRQnlFL0VOZmQ2VGY2QzJ4UitvZlBGSVRTMzFVelpSdEc3ckFXZkl2ZlgxOVpzVTRNbWNXbFUzU3lBSWVROFVPWUN0OTNnM2tlZWxJMFI3bzM0WmNKeHJHcHg4WDJWbDVVWUZPRVNpWENva0FNZ0JJM2x4SFREa3F4eXVqVlFVMnBzMWVMRExNdUQ0TWJBRzl5MVpzbVNUbjF3d3B3b29DU1JaQWd4NVBNM1FnM0wrSlRYMTBPQU1OM09zVlJNT2NPMlhzR3JWcWtheXc4dVZGbzlIM0NwdmJ5WEFrTU5hNmU3QVE2RE5YbC81VzhmcUd5azdhL0NJZ0tOdnJNRmh6M2hwdWZCVEJUakVvbHdxSlFESUFYZDNEckRXdWozNCtLdkdLL2xzZ3dlTHlob2NrUXc0ZmcxZXNzTTNLTUNEc2xLQkZFcUFJWStteGRHZHluYlBCdklBdUd5aUlFbHo4bzBlUkxCNnh5L0J1MkRCZ2s4dnZmUlNaMUZSa1UzTG5hZi9WUmFWQ00veG1wd2ZmU1JsQmlqQ3VVanh5QnN4TFVKQ3BNZmJrQjM5QXZENi9qbjhmdWZqaDQ2d0JtZnRIZEpDT01DUlViTm5Qdm5razVicTZ1b1BSbzhlZmJtUm5waE9oR3ZiV2lHTy9jOWZoYWV1T1JIVnBhUU90Kzhyd2xtQ2I3dUh5QzZrN1VncFVjdEVLQlN0VEVpam5TZjZpWmZ6UkdoQ3l4SnZPM0s5NlE3VDQybWkybm5pZzIxTjVkaEJ5UFkzUXg3c25oNXdKRUFtbWdZbjM3TnQyN2Evbm5iYWFRa0RmUCtkVHdwM2RUM2F5U3JuOUh0RXU5K3IyWVlRVUN3MklnYkllUmswbE9PNGNPbUlrMTJxODh0dEk4eDlqZFIvZlg3OWVYZmw5ZW42OHBIRzd3MzR4VzVuelY4cHY0Y09lUTA4cElwd2FobHRNdURlVzIrOTlTUGFQbHNmVFV1RTFOak5TVGJDalNFVkdTMmkwTmloRDJLRkcrVTRMM3c1akRRNE9ZN3p5TDZjUnc3TGVlU3duRWNPeTNua3NKd0hZYjFEWGpndXcyRXRNb2IvdWl1dlQrZDIyTmUzaDNpdzZBejQ2aGUzN1B5SVRpTmVZS0pzTk1DaDlqMjBzOUJ4K1BEaHZ5VUtjRFNhclE2UTJ3bnlhTmY0bk1hM25URldqc3VFY1hOZll1MWZzdlAzUkNiUXdMVSs1OThhM1c0SEJhSEJ3MTVnb3U1d2dDTWVHcHkxdUdmdDJyVnYwT3NrRUovM0RwRGJqQ1lOV29aRTlpRWdoa0lPeTNuU0daYjdKSWNqOVVuT0k0Y1RsVDlTUGRIaUFlWjJaOTNyNU1ubUNhSzd1RWlBNDBlQ1h3V285c3lkTzNkWFUxUFRsMHFMZDhpUEllODRVLytuVWdKZ3NDM2crWEpKOCs3ZDFDNEREbGJCYkJjWDdpSVRtWkNaSVVjbGJsb1RYMVZXVm5ZbmZjTUg2WG52QURtY0t3RFpLcGNxQ1VCTjEzamJWcEhucG9QTkUrYTFTemNpYVhCa1JGMUJMYjU4K2ZJMzZHRmtWS2hjcHdRMFRkN2xTNHhLUE1tVWdGdjRQRyszSFhtRDJwQzFkMWp6QlAySUJqaCtGU2dJTThXOWRPblM2cXFxcWpmVi9pdVNodVN3c21KVGtFc1NTVjRRYTkrMVBzZWI3N1pXVlZNcjBPQmdFNHlDMWJBdVZzQTFNK1hGRjE5Y1RGbzg0cThsYkF0NUVLa2dUODBrdXdNQi83cTJJNHVwTlRaUGVnVTRlaDJpeGVmUG4xOTU4T0RCZDVRVzd6cWhESG0wcTMrVjFuTUprUElXOWY3MmQxNDlVVkhaQ1hpM2NHT1dvbWx3cEVOYkI4MFVDcnRlZWVXVlp6MGVUOFEvQ1NpVXI2NERjaXdobm5RY2puYmpBcms1UFY2ZnkzS0wrdmE2cTYrMzVmWDFkMWRmZCtuNit2amNML3lCangzVnoxSjVGeDJ5ZVJMVm91Z09jUFFIRmVCaVV6TlRmdnZiMys0bExmNTNwY1VobXE0T040SUtEQjJRWTNMZzJKZkRQSEZ5SE1MeE9xNjdwL1gxdHJ5K3Y5M1YxMTI2dmo2Y2Q5amV6cit2YUNyZlM2ZHNub0RKcUhDamJDeUFRMXNIQWFld2E4MmFOYytRRmtkNTVjSklRQTg1dzVjS0g5MWhpT1J3S3RwT1Zocys0bmlqODlnek5CN1czb0FQVEhaclNjUUtPR3R4L0hwY2MrYk0yWDcwNk5FTlNvdVROQ0k0UUc0bFRaNXF4M0F6YkdpZjQxTGRsMFMwQisxZDczZHRXTnk0ZXp2Vng0Q3o5azRJNE9nbmEzRVk5b0RjdVhyMTZvVnFSUVdpaWV4T2F2S1RpT0V5QzQ0dnR6aXNSWGJHY3h6bmljZm5zckhXcDgvUDVTTDUrdjUzMXpkOS9mcnkzYVY3YU9Wa2srUDRRc3JucEFQc2djR1l0RGZsaThsRVFUNEFEaTNPZ0x0bXo1NjlqZDRsL3JyYW93THhSSFkyVFpQalk2a2QvNUNUSjFrT1IwcVBYSFA0Rks0NzF2cjArYmxjSkYvdWMvZ2VoTWJxNjllWGo1YnVveTJ4UjMxdHJ6L2R1R01ibFdQdEhkUHFDZmNpRmhPRjg3SVcxeTQyMGVCZGQ5MjFnQjVNYmxSN1ZGaEU0WDJHUEh5cWlnMG5nWTQ5Sjk3R3hVMjdGbEE2d3gyejdjMTF4Z3M0MitKbzBQbmVlKy9WYnRxMDZVL3FncFBGR2RrSDVGaGRVUzQyQ2VENXFiMmV4ajk5N3F6Rkc2dGdub0M1bUcxdmJpVWV3RkZHMXVJYTVMTm16WHFOSG12YnJpNDRXYVNSL1FMYVpzdExpSnlMclhQNHNSd294MlhrTUplVjQrUXdweWZhbDl1UXc1SGFrZlBJWVRrL3RIZWozN1g5dnVNYlg2TThESGZjMmh2MTl3UncxdUxheFNZNnNHTEZpa2VjVGlmZWdZZzZsWXNpQVVDTzFSV2VVR1JGT0ZiSGVTT1Y3eTQ5MW5aaXpSZHZlOTNsQjBOdStxRDhPMjJISDZFK0FHNit1SXhiZTJNTThRS09NZ3c0ZmxHYUZuL29vWWQyNzkyN2R5VzlrUmJweW5VamdTRGtlUCtIT2tKa0VLQmZ3Q0YvNjhvWG12ZGd2N2RlZTRPOXVGeFBBRWNERERscmNjY2RkOXl4cUs2dXJscVpLckhKSDVCYmVxUmZZcXMvRzNOaHpmdEV3RjM5Wk5QT1JkUi9QSTZtMTk1eEQ2dW5nTE10enN1R3pzOCsrNnorcFpkZXVvcytmMEpMbDhwVWlXVW1HSEw4MmM3M0E2OWhjd20vNS8zV1EzZVZPeHJ3MmdXR082NTFiNzNjZXdvNDZtSElnMXFjbGcyM0VPaUw2QWFRdmgxMUhrRUNnTnlzTkRsdGRQS0xmZTZHUlU4MzdkNUNvdEpyN3g1cnpONENEbE1scU1VcDdMejg4c3VYSHpodzRDTjFBeWdDMFdHaTh4MXkzTkNwOFRvKytsWE4rdVZncVBQZ3U1WmdMQzJBWTZyUU9BNis0TVF2ci8zT08rKzhqK3p4R21XUGt6UmlkSnE1WXVpTnZvbXhvUXpMQnJ1NzJlK3BXZFM0Nno3cVdqc2RZQWdtQUpoaXZpallNNWNJaWFJVFdEN0JMdzZkYzlBTm9HTXZ2L3p5M1dTUDB6ZUdldnpqbzZyeXkySDUwRUtRUjdwTm5tdngwTXZ1Z04vN3Z1UHczVnVjeDQ3UmJHdjhrQStXZUZtd1Z4QWtBbkFRak02d3FhSjFrbDQxc2ZuVFR6OTlDdmE0Z2p6Mk9RTGsrREJUcmpzd0FidDdyNmZocWFjYmRtNm04Y3B3OStyQ1VwWmRJZ0JIZlF4NWlLa3lZOGFNSmJRaDYxMjNHejlJNVdLVndFbE5ucnVySzE2Qys0aTM5ZDA1TmV1WGtGejBwZ2tVWmtMKzlDY0tjTXdkUXc2YWNhR0FUcmZQbkRuejEzVFIrWm1DbktRUmg0T3BZczVSbTl5alhWUzJmM1pYM1laZmswZzBUc2puWmNHRXdRMXhKeHB3MlI3WElLZXZSSnk0OXRwclo5TURFdVZxVXhaRUhydGp5SE5walJ3ckp2VStSL25Ealp0bjEzc2NKMGdhQUZ5R0d3d2xSSHREMHNuWTNvYk95UjAwRU9UZS9mdjNyNTgyYmRyMHBtWHY5TVZYYnBXTFRRSW1rbFdIUUdXUnhsWTIwM0lCN2thZjY5Q0M1cDAzN1hEVTRvc0NiWFF3NERCdkU2cTlNZjVrQUk1NjRVSkFKMXZjMWRMU3NuRlVaY3RsdEtPdVVFSGVJYVJZL2dma2NCQm90cTZrK0tuekp3S2UrbVVueW05YzEzcm9JQTFGRDNkQ05UZmtCWmNzd0dWMUV3eHYzYnExcmNCaytYeWNwZDgzNmMrdlZVSGVNUW14L00reUNnb3psa0laa29lMm1ZcldnS2YxOVJPVnQveTU1Y3R5NnBZZWJtaHVBSjV3bHl6QTBWR2VDL2Exem05ejFqYVZtZTE3aGx1S0w2SFZBZ3RQWE1KSGxvTVZzcXhDQkpyaDQreUEyOTIrdHYzSWZ6N2J0QXUzNFdXNEU3YmVIVWtNeVFSY2JoTnpFcHlYVFk1angra0pseTJqclNYVFNaUGJlZUxrQWlvY1hnSXNxNkF3dzJmTGlGalkzQ2Y4bnNiWDIvYmY5bXpqTHF4MU05eFk4MDQ2M0JCQ3FnRVBncjdWV2R2UWJ2Q3VIMjh0blVvMmVSK2VPSFJLdWVnU0NNcUtUSE9ZNTVsNDRGMG1EUUhuMGVYTlg5ejh5b21LUFRTaVZqb0FPTU9ObXpsSnNidXAzcUJMRmVCb2tKVk9FUEp5VjJQTFVXLzczOCsyRGJqQVpqQ1Y4Y1ZVc0hjcUVGRUNnRHdveUlpNTBwT0FkZTQ2bjZOaVllUHVXOWEySGZnSDlRSmdweHh1akQ2VmdLTTlPSjRYelQvZ09lSFk3VzVZZDY1dDBDUzcwVFJFMjRuUnVXclFrVjM5SDBrQ0RIbW1ySzFnWm5INy9aalhzZldSaHMyM2IzSFVIS1crNjgyU2xHaHVsbG1xQVErQm16cWhuZGQ2SGU1UEhEVWZUQzQ4WlhTaHdYeWFncHlucDN1ZnpSVUlNcDBPdXdMcFdVcTYvZDcyd2QyMUcrZnNkemZWVVg4WWJ0ekl3UTdCbE1JTmVhUWFjTFFKMXdYMEZyL2I5emZud1EvUEt4aFVVR0t5VGpJSm80RW5yNk9JK2orU0JHUTVZY1U4MVFmZ2RnYThnUXBQMC9PL3FQLzRkNDFlQjc3eUs4T05DOHFVd3cxNXBRdHd0TTJRODRWR3dFc2J5TjlzcmRvNjBGUllQc1JpbjJ3eG1PellTNEFIYzVXTExvR1Q1a3IwZklsTXhZNUF2TCtrMmU5dWZLLzk4THo3YWplOVNuUElGNVB5SGNxMHdJMnhwaE53dE0rUXd3K0N2c0ZSZmFUYTIvYmV1SUxTTSswRzB5bktaSUdvdW5lcGhKeE5raHBmKzdhRmpUdHZwNVdTSGRSRGFHM1czREJKNUtWQXpISEtYYVlBRHJqNTBLQ3Y4clMwclhGVXZYdE93U0JUWDVQMUs4cGtpWTBOTmxlU1NSTnUzc0FrS2ZjMEw3K2o5c01IOTd1YThmWXBhR3lHVzc5NUtyYk9KeUZYdWdISGtIZ3U0RFBrbWphblAzZStOYTFWMndhYTdidUhtQXNuMC9aUnU3WVhRNWtzVVZFNGFkSWxkdWNLY1UwbUNXN2V1QnZXT283Yy9VRHR4cjkwbWlRTU45YTQrV0l5YWJmZm93NWVsNWdKZ0tOTE11UXk2RnA0ZytQWTBjTmtzb3l5bGd5bXo0U003bmlvUzlubXVya01PVDBKZVVoMGowNWdhL3RvaXVqNzhPS1FyL1c5UlkzYjU3eDY0c3RkVkJscmJBQ3V2NEVESlpWMmwybFhiK2dQcml2eHc4T1hWZ3Zvc05GaHA2TVE0VHZLenZubmkreW4vckxVYUIyQkoxLzRUektsS1JkR0FyQ1ZlK1BZMW03MHV3OSs3S3ord3gvcnQyNmcrbUNDTU5TOEJNamJYYlcvdnIxcE01RmxNdzF3akExOXdnSEk4U1ZtS3gyQW5FRzM5emZiaXU4dnUrQ2FzZForMTlISFdBdk0yRVNxekJZU1VYZ0hEUnd2NXJ4QzB1YjN1Q3JJMW42dy90TVhHcjFPckpCQVUrTUEyR3hyWTVXRTkzTEgyeFFWVFo3TEZCTkZQMElXRW53YzBBcHMwL21jZnEvM3JiWURPK3I5enJVakxNVkRhZVBXQ0dXMjZFVjQ4cHgvL0t3NW92bDR3eFNiSS9UeStZK2ZhOTd6cTBXTk85YVJ6T1hsUDJodkdXN01UMGFZSkNkSDNSSENXRFBab1g5c3NyQTJaNDBPczBYVDdITUduUC8xQzJ5RGJ1bHJ0STdFNjRueDdsYWUxRXdlWEtyN0JxMGN5YkdkN1NJN205YTFEM3ptcWxuMFdOM25IMUorMXRTc3RiSDB4emR1V09sRXJqaFNneW1LejNUQVdReUFuRUdIYlE3STJUN1hJRGViemJhNytwMXo2U1RiZ0d2N0d3dkdLTkJaZE5GOUdXeDZKL2VYTzV4MXovKythZXRhZWpNWmc4MCtyMnZMdG5aR2FtMTV4TmtDT1ByTTJoeWdRNXN6NkFDY1lZZGY4S3V5OHk4Nnp6N2cyaktqN1N3Rk9ra2tqSlBCSmxOdjl4WkgzZk9QMTIvK2lMSUNaQndBbTMxb2JJRE5keVFCZHNacWJlcGIwR1VUNE54cDlCblhEZ3c2dERscmRBMXdPdGY4MjhyTythZkp0a0hYRFRMWno3WGlOUXhVQklYejFYd0IxS0FTYTluMFJpbHgzT2Y0ZkpQeitQS0Y5VnMvbzJnR1cvWmxjd1JRODRVa0JiUERaU1Bna0t6R0tmbXkyUUtOemt1TE11aldHMHJQbW5SaHdaQnZEemJicDlzTjVrTEFuaThYcFF5MW45QUcxSTZBdDUxZWRQbkJSbGYxRzRzYmR1UDJPaUNXb1VZWTJwb1AyYzdPQ3ExTmZRKzZiQVdjQjREK0EzSUduVTBYQnAwMXU2YmxoNXFMaTI3b2Q4YjBNZGIrM3h4b3NwOVBvSnZ3Y2gzQW5tdnI2VmkvQnRSZWdwckE5dFg2SEp1L2REZSt2YmhwN3dmMFJpbmNvR0h0REtBWmNvYWFsLzJndGJQR0hLRytkbkhaRGpnUFNBODZUQmkyMGRtRVlWL1Q5Rk1LVHgwMHEzajBaU09zZmI1WllyQ08wVXlZTE5ic3NxYnVoQnBmUy9qeW9Mdmw3ZjlyM2YvTyt2YWp4MGttRERERExmdElnN1ptalozVllOTTROSmNyZ012amdUYkh1QUE1TkRwcmRRRE8wTXUrK1lmOXhvMmRYREI0S21uMWMvdVpDaWJTaFdrQlBpK0NSK2d5MVpTUmdjYm1KenhKUTB0OHJpYWZheGRwNjg4M3VXbytYdG0wcjRMR0RHME1lQUZ6T0IvcHJMRmhndVFFMkRRT3plVWE0UEs0V0tzRGRENEF0aDU0VGFOVHZKYld6MndyK0ZIZnNSTW5XRXJQRzJpeW5kdmZWSEFHd1c3QkJTcUE3L2pYMFF3TEwxa1hyWUFZamcxZitMaE1CTkM0VUNTb1BmU21xTDIxUHVmbjVaNkdMUzgzVit4cThqcGhjakRVQUpvUEJwelRXRnV6eHU2b25ncmtrdU01eXFVeHlXUEIrQmgwdmEwdWEzZUduT1BZTncyMUZSWCtvSERjVjA2emxweGRRdnRmQ2cybUVZVkd5MUNyTU5wWnc3TXZ3eTkzQW1HOW9CbGFmVDZHR1BZelFHYmZMZnlPZHIvblNIdkFkNUIyOHgyc2NwL1krV3I3dnUxSG5HMjRxd2hJV1JPenoyREQ1emo0RExSc1gwZnFEbVhQYnFlWGUzYVBKbnJ2R1hUMldhdkxwZ3lEcmZmbHZOb1A1ZUxpWVlNbVdjdEdEakVWaitocnRvd3NNbGlHMDFjYXl1Z3BwRUs2azJxbmJXQ0ZsTkdNeGhoODF2UnNYa0FiZ3l3aXpVdXZXV2luVytRT1Q4RFg3dkw3NnRzQ25rUE5YcytCYWwvcndSM3UrZ1ByV2cvRGhtWW9aZTByd3hzdUxPZGw4NFA5NkJMTGdkUjhBcHlucTRPNURxV0tNT0FGdExJUHdCbHFocDNQOVhrMTREdnJDS21iekIzelNHdHgwUkJqb2IyZnVhQ29qOEdLSFpHaUplQnViL0s2MnFyOTdZNEQ3dFkyTWlzQVpvZnlQdWt6elBCWjY4byt3Z3cwUTR4ek9RK1gxZGROMmZMRDVTUGc4c3lHQUVrSk1xeDZrR1hBOVdsY0R2VWh6UFdpTFRtTWM5a3hlSWpqTUd0WEJsd1BMRVBMVVBNNTUyZWY2Mk5mYmpkdndoQytjaDBTWUZrd2tQRDE0UEk1UXd6b2tZOTlqZzlYRjFyaGVFQUh4L0RwendFcDRnQ3g3RE84N0NOTkR1TWNCeHo3SFdkNStqOExQRStISDNYWUxCdjQwUTRaYW4wK05DRFhJemZJQU1vK3d2cURZZGZIeStlb0YrZks2U1RBd3RkRnE5TUlFbUI1TWNqSUZpMU9UbzlRWlFpWURDbkRpekxSNGlMVnFlSTdKY0NUb3dUU093bm81YWcvUiszNk9BWlhibGtmcHorWDg2cHdEQkw0ZndOL0lad01Cd0g1QUFBQUFFbEZUa1N1UW1DQycseWVsbG93OidkYXRhOmltYWdlL3BuZztiYXNlNjQsaVZCT1J3MEtHZ29BQUFBTlNVaEVVZ0FBQUxjQUFBQzRDQVlBQUFDaE9IMUtBQUFsYUVsRVFWUjRBZTJkQ1poVXhiWEhUeSt6TDh5d0REc1NWaEVWSlFvQ2tvU0lJcjRrdm9oTHhPMlpmQzhhbjBtUXJDUW0rdUo3cUhrdjVoRS94U1FhTm9rQm9na3hpZ2FVdUxESXBzaU9NQTRNT3d5ejd6UGQ3L3lMT1pmcW51N3A3dW1lWHV0ODMrMnFXN2R1M2FwVHYzdjYzTHIzMXJXUmtVaG93T1pWaVBjNk51dHBicS84V1BWTzgxNzNzWXRKNmtnRHVzSTd5bWUybllkVGRJWlFqME5IMXZyZ3dZTnRjK2JNeWIzNDRvdHpDZ3NMODdLeXNuTFQwdEt5bTV1YjYrcnI2MnZLeTh1cmQrN2NXZnY0NDQvWGxKU1VBR1NCMlZmb0t3M0hNOUtCQnFRek9zaVNzcHNFWGdtaENNVHRER1QyVFRmZE5Ed3ZMMjhrUXp2QzZYU09jRGdjUTJ3Mld6ZmVubWUzMjNNNW51TjJ1d1BxbC9PNU9GK2R5K1dxNFgyck9WN1oydHBhM05MU3NwOVBndjNWMWRYN1hubmxsVS80UktuajdTNWVkTkFSbDRXalJuUU5CRlMrbmpuSjR3S3hIdHAzN05neHBHL2Z2bFBZNmw3Q0FJL2taVGd2L1lNQk4xTDY0aFBBemNBZjVlVVRYdmF4OWQ5eC9Qanh0WmRjY2treEgwT0FGOGdsak5UaEU3YWNWSWRiUUxaekR5SnVYN2R1M1lDaFE0ZE95Y25KK1FKYjVNK3pGUjRRcjczTDF2NElXL2gzYW10ci8zbnc0TUcxa3laTk9zSjFGZGdsQk93cEtha0l0d2ZRVHozMVZONGRkOXd4bmQyTEw3SjEvaHpEUEN4UlNXRFlEN0JWZjVmZG1iZVhMbDI2YXZiczJkWGNGc0Nka3FDbkN0d0NORUw3Z0FFRG5CczJiUGg4UVVIQm5lbnA2VGR5V2k0dnlTWTFUVTFOS3lzcUtsNmNNR0hDTzBlT0hHbmhCdXFRSjcxRlQzYTRGY3pjcVFnZHUzYnRHdFd2WDc4N016TXp2OFlXdW4reTBleXZQV3pSanpZME5QenAyTEZqTDQ0ZVBYb1A1MnZsUmJmby9uWk42UFJraGR2eW9YLzcyOTkyNDVHTmU5aUh2b012QkM5UDZONktRT1g1Z3ZSRDl0R1g4Z2pNb3Z2dXU2K1NpeFJyampDcEpKbmdSbHV3QUd6Nzh1WEx1MCtkT3ZYYkRQVzNlTDJRRnlPZUdpaG55T2V2V2JQbTZWdHZ2ZlVzYndMY0FucFN1Q3pKQUxjSDFLdFhyKzR6ZHV6WVdibTV1Zi9PblpXTXZyUW5vdUd2MWJEOGZ0dTJiZjkzN2JYWG5tZ0RQQ2tnVDNTNGxaWG1Eckd2WDc5KzBFVVhYVFNiUnozdTVmWE04UHM4NVVwbzRGR1dCYnQzNzM1cTRzU0poN24xWXNrUkpxUWtLdHlvTjhCMnZQenl5ejJ1dWVhYVgyUm5aOS9OTjFiU0U3SVg0cWpTZk1Pb3FhNnVidkZiYjczMTh4a3pacFJ4MVhEeEtaWThqbW9hdUNxSkJqZnFpOFdCNGJ6Tm16Zi9XL2Z1M1IvajlSNkJtNW82T1d5dUVySzFmTWlLd3VoZko4Vk5aV1VWdFQvNzdNVEhGcllOSThvSVM4TDQ0NGtFdDdnZ2p1M2J0MTgyYk5pd2VYd0hjWHdudXk1cGR3UFl6cm9mTWRpUjhTYWFXOXdmZkZMYytOM1JFLzd4RVN0TnJIaGtDdS9pWGtnRXVGRkhCZmI4K2ZNTGI3dnR0a2Y0WXZHYjdJSTR1MWczQ1ZtOHZYRXBPUnRmaUd6ZGJiYVdtcHFXMzcyNG91NC92L1dEajh1NWNNQWQ5NjVLdk1NdDF0cDU2TkNoMjRxS2lwN2dteTk5SXR0enlWV2FvM0VSWWVrS2NibnB4S215NWgvM0hiVnBHWmN2ZHp6ajFvb0RubmdVbkhRT0xJOCsrbWhCWldYbEMzMzY5Rmxvd0k1dFY5bHQxS2RQejdTRmRhVVRYbmowMFJFRjBrY2N4cVdSak1kS1dXQnYyclRwVW43WWZ3bmZXUndaMjI1Tm5LTjNwZVhXdGREaW9uMDc5OVRlZGZrWFB2cVkwK0dMeXdXbm5pMm04WGl6M0tnUExMYno2TkdqM3hnelpzdzdCdXlZOHVIMzRFNDdqUnh6VWM0N0ovZU4vd2I2aXhmMFcxenhGQytWRVd2dG5EdDNiaUUveWJhZ1o4K2V6N0N5c25neEVxY2FzTmtvcTZpNzg1bTZ3MWN0bUR0M0dCNXhFTWpqd2lPSWgwcWdEampKTUc0OWhwOWFlNUd0OWZBNDdjKzRyMWEwM0JKdlJiUzQzSi9zM0ZOM1I1dWJJaGViTVIwVGo3WGxGb3VkdG0vZnZtc3V2ZlRTTlFac2Iyd1NZOTFwdHcwZk16cm5yWU9icjdpR2E1ekdDOXlVbUJyUFdNSXRZR09ZN3haK1cvd3ZySXc4WG93a3FBYTRRL00rTXpqakwwZDJqTCtGbXhCekZ5VldjT080T0xQVCtBSDZiL0VMdUFzNWJwNExZU1VrdWpEZzZmMzdPaGVlM25jVkhqVVdDeDRUem1KeFVBRTcvZVRKazQvMDZOSGpLYjdiR0l0NkpEcEg4VnQvTjlsN2RuYzhkZmFUY1k5d0pXRzBZaktTRW0yb0ZOaDgwWmhSVmxiMk5ML0QrS1A0N1NGVHMzQTFVRmlROXFPYWtnbFBqeDdkS3lNV2dFY1RiZ1gyK1BIanMzajZoQ1g4Zk1qWHcxV2UyVC8rTlpDVFkvLzY1amVHTFJrL3ZqdUdkYU5xd2FOMU5hdkE1c2FsbnoxNzlqbCs5ZXZPK08rV3hLeGhySVlDQTJtcnRxNzF4ZHdMTnQ3UCtacDRrYWNMQSswVzF2Wm9XRzRCTzQxOTdNY00yR0gxVjhMdW5KUHR1TFA4NEZXUGNRT2lkcEhaMVhDamZDeHBwYVdsMzJFZis2R0U3UjFUOGJBMVVKRHZlT2pVbnZIZkFRKzhDQnRobCt1dmdLNkVHeTZQQXJ1NHVQajIzcjE3ei9WWENaT2VPaHJvMWNzNXQzVDd1TnU1eFFKNGw3bkdYUVUzS3F6R3NmbUYwK3Y3OSs4L1A1b1RSNllPS2duWVVqZlordmRMbTcvdmc3SFh0d0VPVHJvRThLNkFXeXkya3g5WkhUZGt5SkFsYlkxSXdKNHdWZTRLRFRBZ2FjTUhaeTNaOXZibDQ3aDgzTWtFaHhFSHZDdmdScG5PZWZQbUZmRjQ5bExNVTgzclJvd0dQRFJnczFQT3BSZGxMWjMzeEpBaTNpQ0FlK1FKZHlYU1o0c0NteXVWd1krdHJ1QTVSS2FGVzBHemYyZ2FpTmVoUUgrdHFLdDN2Wmt6YUFPZVJXbmtSWjRtOUpjOXBQUklXbTZjS01yUFBuejQ4SGNOMkNIMVE4cG16czZ5VHp1eCs4cnZzZ0praURCaUJqZFNjQXZZOExPdjRoZDU4VXlCRWFPQm9EUlExRFB0RWZhL3IrTE1FWDJTTUZKd294ekhFMDg4MFl2OTdBWHNaNk9TUm93R2d0SUFlTGwwVk5hQ0p4NGQwb3Qzd0w5L1JMaU14RjhBS2dLWTRXY3ZZM2RrT3NlTnhFZ0RpZVp6NjJxcXEyOWRsVE5vNDIyY0ZoSC9POXd6QkNlSGdwdGZPSGpBZ0sxM2xZbUhxb0hzTE1mMG96dkhQY0Q3eWVoSldNWTNITGd0c0Jjdlhud0IzNEY4T05UR21QeEdBOTRhNkZ1VTl2RGlaeTYrZ05QREJqeGN1TlhveUEwMzNQQTQrMDFtTG16dm5qTHJJV3VBMzZqUC9kY2I4aDduSGNNZVBla3MzSmJWM3JwMTY3WDhzVkY4Tk1tSTBVQkVOSkNYYTcveG8zZkdYc3VGaFdXOU93czM5bk5lZDkxMXVSZGVlT0V2STlJaVU0alJnS2FCaTBaay92SzY2M3JER3hEQXRhM0JSVHNEdDJXMW4zLysrVms4amZEUTRBNWxjaGtOQksrQk5LZHQ2T0pmRDVyRmV3amNJVjljaGdxM0JUWi9VR2tZMzZ3eHoyY0gzMThtWjRnYTRKczdEeTFmTUhwWVp3SHZETnpxSXBJLzFmRWtYMFNhYjgrRTJHRW1lL0Fhc05sdG1kTy9rUDhrNzlHcGk4dFE0TGFzOXJ2dnZqdUJYeGU3THZocW1weEdBNTNUUUU2TzdicDFyNCtSVy9QZ05XajNKRlM0bGRYbVcremZZNnZkdWRxYXZZd0dRdEFBT09OYjg5L25YVUsyM3NIQ2JWbnQxMTkvL1RLZWxtRnFDUFV6V1kwR3d0SkFicTU5Nmo5ZXVlUXlMaVNraTh0UTRJYlZkbDU1NVpXek9UUm1PNnp1TWp1SHBnR2JiZnhsT2VBT2NJUERvUGdMQm03TGF2TTNIMGZsNStkL0tiU0ttZHhHQStGcklEL1AvcVdYWHh3MWlrc0sybm9IQzdleTJwTW5UOGJRWHpEN2hOOGFVNExSZ0ljR2JQWXBWM1VEZjBGYjcwQ2dpdFYyTEZxMGFBaGI3UmtleHpNclJnTlIxQURQZXpKajBmeUxodkFoWVd6QmJvZnVTYkJ3TzZkT25mb2dYN21pVUNOR0F6SFJBQStjT1A1bFN0NkRmUENnWEpOZzRIYXdPNUxEczBYZEZKTVdtWU1hRFdnYUtDaHczRFI1Y2svTXFCRHd3cklqdU1VbHdUUU4wL2x6SHZqdW9CR2pnWmhxd0c2bmdtZm5Ec1RiWGdHdGQwZHdZNXU2a0J3d1lNQ3Q1cVpOVFB2VUhMeE5BK0J3WVAvMFczbFZMaXo5TXV4dkE2dzJGc2VjT1hONjhmUGFYMndyMndSR0F6SFhRRjZPNDR0elpsc3ZFd3VyN2VyVkVkelk1cno3N3J0djVzOVM0OWFuRWFPQnVOQ0EzVzVMKy9ydDNXL215blRvbW5RRXQzSkorSnZybUEzSWlORkFYR21nWDFGYXdDK20rWUpiekx4anlaSWxJL21OZHR6VE4ySTBFRmNheU1xeVhmYlM3eTRjeVpXU1VSTnc2eUgrNE1ZT2pva1RKOTVpTGlROTlCWDNLMjcxVHgzMzFReTdndUJ5MHZnOFdHL0ZLb2Z0NEliUDRpM0lwUHp0d3NMQ3ozdHZOT3Z4cllFVzIzaXFLUHM5VnhLZm5VbGM0Zm5jUFNydnRVcFliMmx5Z1UrL2ZyYzMzSlpMY3M4OTl4U3dTM0tweHhGU2RNVld2NGRzbGUrUXpkMGM5eHFBR2V2bS9BSlZWQlNUeStWaUNEd2hRUU44SkxWTGMxUDcvYnozOVZYT3VUeWUrL3JLNXp2TmN6K1UxWkc0WE81TGI1dGVXYkJzMVFITVVDWHNXb1Y0dzQyeVlMVWQ5OTEzM3lRMi9kQlZTb3V0YmhjNTk5N01ta3NjUzRoT0syaHhVMW1sYjdoOWRhajNmN3IzdXE5OVlwM0dKNjdqbnFrdGs1YXRvcFZjRjNEcjBVbmVjS05OQ3U1Ky9mcE5OdjQybTRQeU44aldkRFRXL1JqeThURjIyeVBMVFdlcmlGeVdMUXU1bUxqZUFiRDI2ZWFlek1IZmVRRzNTTEphaXdSZHNLN2c1aWNBSitrYlVqVnVjK096aVlrcFBEMENkYy9uRGswRU05eEpGZWRuMnlieXJ2aXpFbmF0a25TNG9RSXNqbG16WnZYTXpzNiswTXBsSWdtckFRSGN3VDB0SFp4TVlYYUdlOVFEWDAzdkNXNTVrYWFwL3ZJRnQzM216SmxYdDJWVW1jeFBZbXNBZ0JmbXNXa0Q0Tno5U2JiWXZucTFHN3lDNVE3aFJnWUgzNVc4MnZqYmlRMjBkKzExd0wyM0pmSTZPTzFUU0lCYlhCTUFyc1RiY2l1NGVVNFNjMWRTTkpSRW9RS2NaOStEQlkrVTRGOEFJdjhHRWxlSlVmckp5aVR3Mmc1dUdTMFIyaFhjUEw3OW1TalZ5eHdteWhwd3drWEpkVk5GVGVSR1VRUndORVhpRWthamVka1pCRjRGYmxVTi9uSHI1ekRpOXAvODVDZDkyTlN6aDJZa1dUVUF3QXRnd2NXa0pYaEQrVVRLbTNWTFdoOXVobUpZbWlOd281bFk3UHc4eVhEWmFNTGsxWUFBcmtaUnVPZGhhUk41bVhTeERkeUNaMkZaclVnUEtyajU1czFRY3pFcEtrbnVFSUIzNDdjUlljR0ZpRVFNVWYrKzNWMUR1YmNFYnRWeDdTdzN2M1V6TExtNzFMUk8xNEFBRHF1ZHlKS2JhUU8zQXJkcWpRNDM0bmFlQjNDSXNkeUozTTJoMTEwQWorUW9TdWkxNlB3ZTREVW5tNFp3Q1lwaERoWGNHQzJSY3hhaGcwZEtrTWxJaW1rQWdPZG51Nm1xenZkVGcvR3VqcXgwRzdqRmlJbkZNMGlISU1FK2F0U285TXpNekFFcXhmeWtuQWJPQWM0Z01CV0pkbkdaa2U0ZU1Pb3ptZW5nbUJjRnVBNjNiZHEwYVlWNGpERGxldFUwMk5JQUFNL0xPZ2UzbFpnWUVjZVVNYTJGWEZXQWJjRXRLemFlbjRSSFA0Mmt1Z1lFOE02TWc4dUZxVmgrNkZMU2ZPbFZ0blUydit5SGNGQ1JHL3hhUE90M0tHMjlldlV5TjI5ODlVQUtwZ0h3WEg0ZXZLWmVlMEE2U0QwSXNNZ3VjUWw5RmFGdms3aUVnZkxyMjd2bnVjR3Z3SzM4RTlsdTQyRkFZN2xGR3lZa1pjR3oyWWtGTGdrZytUa09zZHlxdGpKYW9tam5aN2dOM0FuUWlkR3Nvc09oV1hEckhaZG8xaUM0WXdIZ3pFemZiZ2xLc0JtNGcxTmtxdVVTd0dzYjRuZVlFRzVNVGpwNVdHNlAwUkllQnN3eE4zQlNEZDNnMmd2QWMvaXJveDM1d3NHVjFEVzVVSy8wRERlbU5sWmVDSTVpalFraWtUOTFqWTFHakFaOGFzQVg0QUk3UWozdXM0Qk9KT3BsNm5GZlJhVTc3QUkzTnR2MDBSSytnREJ3KzFLYVNUdXZnWE9BdTZtT1p3cVJ1VWNFT3VTU3VJVG45K3g4VEM5TDRoTHFwVHFkeW5JakNkYmJjKzZ0MXRiV0ZpUWFNUnJvU0FNQW5GL01wWG9BM2xIR0tHOXJkZGs4K0JXZkc5V3dOVFUxMWZxYW9TaktkVFNIU3dBTkFQQ3NqRFlUR1FmMXhiOUlZelBWY2xXVTFVYVZkTGlwb2FFQkc0MFlEUVNsQVIxd3VZcnpEbEdRUlp1UFVtV2I5MzcrMXIzTDAvZm51UU05K05YaGRodTRmV2pmSkhXb0FRdHdvY3dydHlRSEM2dlg3dTFXdmN0REJrbXJiN1lCYnN0VEVyaFZRbDFkSGI4MmFzUm9JRFFOQUhBOGorZnJJaSswa3NMTHpSZTV3cS9pR2FNbFFycTdvcUxDdzZ5SGR5aXpkeXBwNEp3RmQxTUR6ejRub3lqUmJEOU9yTXBhRDh2dGxxRkFBTzR1THk4WDhxTlpMM09zSk5FQWY2dUdMZmc1d0tQZEpNQmRYdU1DdjRwbEhGL2NFbFdYMDZkUFY1dlJFcVVLODlOSkRad0RQUG91Q3Y0dFRwVlR0VjV0Z1Z2UnZudjM3aG9EdDY0ZUUrK01CZ0I0QnMraERHdnF2YUE4cElsSVhQSWhYZElrang3S05za3ZJYTRxOXh5eUEyNFB5NDBWaUh2bHlwWFZQTmJOTXpvYk1Sb0lUd01XNEY3RmVNT0p6WktteHdWYTcxRFBnN2hJY3pOVnZiYStTZHdTSkZzelRnbnRiaDR4S1RIV1cxUm13bkEwQU1EVFljRzVrSzVjY0FYTEl5VWxmQmlMWTlSYjNCTEVzY0ZWVzF0YmdoVWpSZ09SMElBRnVPYUtSS0pjN3pKcUcyd2xuT2JpUlR3UkJiZlFqZzB1SGc3ODFGaHUxb1NSaUdrQWdLZnh1SnkzaXhHcGRWUzBxdGI5S1FlS1lRNFYwMks1QlhBM2o1Z1VJN01SbzRGSWFrQUFqMlNaZWxtbkt1Z2dyMXNjWXh2ZzFoTmFlY1Rrb0xIY1VJMlJTR3RBQUkrVXhaWnlVTTg5aDF3d3l2aWFtY1d6V0c1c1Z5Wjk0Y0tGbi9MM0N4RTNZalFRY1EwQWNDZlBqQU13SXlWTXEydmhhc2VuWEo1aVdNb1Z1SVYyMTY1ZHV4cDR4T1NZWkRDaDBVQ2tOYUFETHRZM25MQyt5WFpzMTRFbWZzUFR1cUFFejlab2lRVTNwN1hXMU5RWTF3VGFNZEpsR3NDN3VyRGc0UXBjNkpvR04veHR1Q1N3M01LeUI5eGkwbDBuVHB6WWJQenVjTlZ1OWcra0FRRThsREZ3bE9uaDBUREtKOHRzbXpuWjRwZmpIcFliK3lBQkdWcTNiTm15d2JqZFVJbVJydFlBQUhlRTRJTUwySEpDNE92SVcvZTNidUI2NnBaYlZidWR6NDFNUC8zcFQzZnppd3ZtTm54WDk2d3BYMmtBZ0hkMlp0bkdGcXI2OFF1TzNlQ1dGNTl1Q1E1aVdlN3E2dXFtczJmUGJqV3VDZFJpSkJvYUVNQkRPUmI0TEt1Z0xZd3J2bUd1dzYyS0VjdU5GUXR1anJjY08zYnNBd08zMHBINWlaSUdCUEJnUjA1UXJXTmx0azBjNEszM2dIQURjR1JxMmJCaHczcmpkN01takVSVkF3QWNjQWNqOExmWDdXeGR6M2tGYnZDTFJZbGVET0lZbk9FWDl0V2NhOTNPbkRtem5tZCs3YUZ5cHVpUDQ4ampoTVZJZERVUWpOZFFWZWN1SzdpaGVTTFhySklYUE83S002a280NndBbDlmTU9FMFJqMFExWXNKaEM4TzltVCtWZmIwOVViOEVoRmFGS2MydGFWUmVZUm1ETUVzenU0ZWlnWTRBZDdIWlBueUtNQVFvVnR2alloTEgwZUhHdXNDTkhWcjI3ZHUzZXVEQWdSR0YyMWF4bTJ6SDFwTE4zWXpqeGIzWUc4OVFlbDAyUHpJTTNiVVhmOWpqdFNkZjRpOGRlZjNzNHZlRlczOWwrU3RISGFPRGphR1c1emQvUjhmdzA4cFF5MnBwZGRPdXZhMnJHVlBGS3JkTjRFWXpsZWh1Q1JLd0R1QjVQay9LR3pseVpNLzE2OWUvejUvdmk4Z1hGd0MyOHg5ZlpyRGgxaWVPVk5XN2NCY3NjU3FjQWpXdGJYUlhmL2wvSzYvZWQ2cnBERGNYcjVmaDlqdEF0enJLbCtYR1J0RFh6SmE3N3NpUkk2dEhqQmh4VXlSY0U5dmhWOGxXZTRTTFRpekpSM1haTHRSaXdNbEl6RFdBeC9xT242SFYrMDRSZjFpUTRBS0FWM0JyZ2MxeDYvWTc0aUl3NzFod0ZqVHhxTWxLbmlCVHRvVVYybHlKUzBjK2YrR0xKemMzRWdjYVlJK0V0aHlpbFZ3VkFBVk9oVm1QMnVuajNMSkJMTGZ5WmU2Ly8vNU5WVlZWUnp0eTdtWEhaQThCZUM2UEpjRjNNMHRzZEFEYnpGOTRPUHE5UDVPTWI0TlRzZHdlQ1BxRFd3Q0h5Vzh1S1NsNXpjQjlUbTk1ZkRXU2c4RlNJekhSQUM0OFN5dm9OVDY0WXBOREFSdk1lb2d2dUpFQlpoNDc0YXhvNWlrZi90ck03ODRiT2FjQkFUellPMmttSDF0NS9xdUx4TkxDQ0svYVNYOEZsN3lJMVFhdjdjUWYzRGdMTEwvN3lTZWZMQzRySzl0dXJQZDUvUUh3Yk9PRG4xZElGR0t3MnVXMXRQMy8zcVppUHB6dWI3ZXoycWhPTUhEajdHamFzV1BIU3kxcVNCRzdHWUVHbEFWbndJMy9IUjBkdExLNTNYV0NYbUxWQzloZ0UwWTRKTGc1djlvQk84TDhOODJjT2ZNMW52YWgxRmh2cU9hODVCb0xmbDRaWFJpRDFhNnNwOUw3bGlsL0czQ0RTNzlnb3lyK0xEZTI0V3l3L0c1KzlheGgrL2J0ZjRqVXNDQU9rQ3dpZ0VmQ3B6UmwrUGJOOFpEVXpoUDBoNW9hZGJORzk3ZDlXbTJ3RlFodUFWeFo3MjkrODV0L3JheXNQR21zZC92VEVvQm44ZFJoUmlLdkFXVzFHK2prN09YcVFsS3N0dDlSRXFsQlIzQWpEOHcrQ2dIY2pVZVBIcTNkdVhQbkltTzlXUnMreEZodzMxWTMzSDhqV08yOUoyalIwUXIxUVNjOCtRY2V3U1g0OUN1QjRJYmxSZ0hxb3BMRHhtOS8rOXNyK0UyZE1tTzlmZXNVWStER2d2dldUV2RTWWJWcm1xanN4eXRwQmZqalJTNG1PL1MzY2F4QWNDT1BXRzhGT0Q5dlVyVm56NTRYamZXR2FueUxBRzVHVWNJZlJjRnpKUHRQMG92N2poUGU2Uld3QTFwdDlFd3djSXYxVm40Mzc5TTRaODZjbDloNlZ4cnJEUlg2RmdXNEdRZjNyWndnVTJHMXF4dXA4dWQvVjhOL1lyWEJZVUNyalVNRUF6ZnlpZlZXdnZmR2pSdkxOMi9lL0xTNWF3blYrQmZjNU1uQ09IaUU3czZsV2prdFROMjJVbnA2YXdtVnM1YUQ5cldsUjRLRjI5dDZOOHlZTVdNRlQ5NnowN3huS2FyMEhRTHdURE9LNGxzNUhhVENIVGxWVFR2dldxUjhiVHlyTGFNa1FWbHRGQjBzM01qclliMzU4eUwxeTVZdG04dnptN2lNZXdMMStCY0IzUGpnd2ZuZ3VNUEM4NUc0WHQ1R2MzblNobnJXYk1oV0c3MFJDdHp0clBmRER6Lzg4Zjc5Ky85c0xpNzlneTFiQkhCWk42Ri9EZUEyKzRFejlPZGZ2RTRmYzY1T1dXMlVIZ3JjeUMvV0czOFJPSnNhdnYvOTcvK0diOHVmTmRZYjZ1bFk0SC9EUlVrMTN6bVU5a0tEbFkxMDlzZC9wZDl3RkdETGhXUlFJeVRZWHlSVXVHRzljUkFNQytLZzllKzk5MTRaWDJEK210MFVYalVTU0FNQVBNUDc1YjVBTzZYUTlpYW1hMHNKL1hyalFTcmpab3RMQXQ3QUhmZ0xXa0tGR3dVTDRHcmtoTmZyK2VKeUpkKzkzR2JjaytEMExvQ0hZdEZTSVMvdVJKNm9vbTIzdjZCZUlST3d3Vm5JWUtNbk9nczMzQlBycmlYSEcrYk5tL2NJdjQ1V1kwWlBvTmJBSW9BSHpuaytCeTVJSVhKaEtuR1YySll1YVhwZTJSNG8xUGZSNC83MjAvUG9jWC81TzBySDZFaGxBOVU4ODA5NmhQUHA3Z2c0QTI4aFdXMGNxek53WXoveHZTM3IvZHh6engxY3ZYcjFMM2owaE9mWkNMa2VLRFBsQlA0M1hCU0FFY3dDQlFsRWVsejIxZFAwdUd3UEZPcjc2SEYvKytsNTlMaS8vUDdTMjBaSGFPMCsrc1h2MzFjZmJ2SzIydUF0Wk9rczNEZ1FEaWpXRzJkYS9WMTMzZlhtM3IxN2w1dWJPMUJQY0FMQTAxUGNCMjltcDRPbmFWaitqY1gwSm1zTllNc0lpVmp0NEpUcGxTc2N1R0dlQWJoWWIxU283cFpiYnZuVjhlUEg5eHIvMjB2VEhheGFGcHhOV3lyNDFub2I0V2VmcktHOWR5NmtYNEVmWHNRbEFWZmdxOU51UUFTK1NzS0hQeTgyOXJ0NWdxdVdEeWRNbVBDVmpJeU1kTXphS1dJLzhTNWhNZEplQStyN01OeU42R3dSMFp5L3YvTklwK080Y2t3OUxzZlIwL1M0YkE4MXhBeDFWUTFVKzhzMTlLMS83cVZqWEdZdEw3RGM4b0NVcGcwY01UUUp4M0xqU0RpNHQzdFNOMy8rZlBqZmp4bi9PN1RPeUdBWEpRMmYwT0Rkc0VBa1BMZld0Yjl5TEgvSEQ3UTlsTnJoc3F5Qm5ZNjM5dEpqdjM5WCtkbGl0UVhzc0t3MjZoSXUzQ2hEQUJmM0JHZGVIZnZmcS9qUjJCVm0vQnNxQ2w0RThPRDNTTXljR00vZWM0SlczTHVZVm5FTEFEYTR3YjJUc04wUkxrTkpKT0JHUVRqTE1CYnBBZmowNmRPZkxDNHVmdDhBRGhVRkx3QWNGNW02YjVwTWNWeEFscHlsOTI5OGpwNWtyWGlERFk3QVU5Z1NLYmhSRVZod2ZmU2tqdCszckxuNTVwdC9XRnBhK3JFWlFRbXRyd0EzWEpSa0U0QjlwSncrL3RyejlNUEtPalZodkxjN0FvNGlJcEdHVy94di9MMm8wWk1EQnc1VThIeUREL0hqc2NVdGVFRFhTTkFhRU1DVHhXcmpnYWlUMVZUODRFdjAwSUZUVk1HS0VMREJpd3o3UlF6dXJyWU5xcUtIRGgxcTR0dnpHeVpmbUhWTmJzVUh1Zno1YnlOQmFzRFJabjdrdnBpdU9va2o5TFhnRUpKSGovdktLL2trN0V4KzdLT0xsSVVRZHlCUDE5Q0pPYS9RL1cvc29TT2NoSkVSd0IxUlA1dkxzNlFyNFBaNTV2SEZaYjJyMWIxbFhOSFJhL211WEtZQjNPcURnQkZmZ092ZytDdEF6NlBIdXlvL2pxRXZPQTdXWWJGNUdyU0tYNzFORHl6YVFBYzRTWWI4OE8rTzY3U0krZGxjbGlWZEFUY0tCK0N5eU1Gc0grdzZXc25UQU8rOHBEOWR4NENuR2NCRk5ZRkRBVndmQncrOFYreHpBR3llS2FyK0QrdnB1Nzk4azdaempXQ3R4UjNSaC8waVh0bXVnbHV2cUVDTzBNYlBENXpwbVVzN1J2YW1LUXg0UmdwL1MwclhVVkJ4QVZ3cGtrMWl2UHZpQVB0c1BWVXYyVWl6ZnZhcStqZ1RvQmFyRGJCaHNkR2NMcEZvd28wR3FJYXMza09udWQwZmpCbEFrL25XYzQ1MFdwZTBNTWtLRlYzQkI5ZGRnSGlMdHpDMjdHT2ZtdmNXUFRqM0RmcUl1d0ZRWTRFcm9sdnNoSWFiMjJLZG5XaUlhc3lHWXFya1p3cmV1L0lDbXNpdllCVklweUd6a1k0MUlQOTJjcEhaY2U3b2IyM2ljWS9qVlhUb1ozK2pCNTVmUjU5d0RmQ05TTjFpUjN4a3hGY3JvMkc1NWJoeWhscUFmM3lFYW5jY3A3V2ZHMDVqK1hzelJRQWNmN1ZHQW1zZ0hnSEh5UWF3ZWRxelhROHVwLzk0OVdOclZFUUhPMkozSUFOcEtacHdTMTBFYmhWK2VvWWFWKytsdDY4ZFJhUHlNMm1BQVZ6VUZEZ1V3SkV6MXY0MzZvQmI2cCtXMGNaYlg2Q0hObjFLcHprSlVNUFAxaCtHWW8vVStpZm5hTmRKdE9IV3daWkd1cy9VVU11ZlBxUzExNCttZnZrWk5OeHBMSGpRUFM2QXg5SkZ3UmgySGR0am5xenk5V25QMGs5S3k5UU5tcGlDRFFWR0cyN3BOQjF5eEYzMWplVDYzWHUwN29vTHFMeDNON295M1VGTzZUalp5WVMrTmFBUHFVYmJncXVodmtacTVGR3dYMTMvTkQzTC9ZZ1Buc0xIOWpYY2g3Nk9tc1FLYmpSUVFkMFdXckF2MzByN2JYYmFPTElQWFpIcHBHN0dUUW1PQlEvQWVaZXVIajFCNy9IRU9YU2lrZzQvdlpabXpWNUJhL213c05iaVg4dW9pTnlnUVI5SFZXSUp0elFVallhTFlya3A2dzVRT2Z2aGIwNGFTbjNZRHg5bTNCUlJWY2VoQU43VkZDazNoQWZ6OXA2a04yOWZRRDlZK1JFZDRwb0oyR0t4OVR1UFhWMGxuNHFKTmR4b3RQZWlRRDlkVGMzc3BydzM5Z0k2MHp1ZnhzRk5rYjljbnkweGlVb0RNdHJVRlRUQnIxZTMwaHVvOGUzOTlEL1Rma1BQY2o5VjhvRjEvMXFlRlJHTEhiT2VpVFhjYUxqMGcxaHZQWFN2MkVxZnVHMjBibmdSWGM0M2ZBb2QvSDhySFJnenJjWDVnUzM5dE9sS2pFSTRJY0RHbXpQSEtxbDQzdHMwaTcvZyt5NnJRZTQ0eW9pSWdDMTlHRk5Od1RXTEYwRmRjTEpoNGNmMUNkL3A1UTlTcXlXN2V4N2xMTDJYN3Zqc0lMcTNXeVovdklCeldaM0ltWXkwMXdEY2gzQUZVT01aYko1VHBIN3JZVnJBczY0dVBWdnRZYW4xTjJoZ3JiR0l3UXIzOEdIdEh3K1dXMjhBbENLTG5QMElXK3VieUxYMEE5cHhxSXpXWE5pYit2TGs3b1BsWXROQXJxdndmRHdjdllnTFVzdTJlUDlwZW1mT1N2ckJ3eXZwSGU0SHVDQXlHZ0t3dlovc2l3dXdvWVY0c3R5b2p3aWVZc2FDR1QxNGRqMWx4Zmw3WVpZbHozajJkcnI2WHk2bTJUM3pxRCtQcXBBWk5tVHQrQkdBaWlWWWdjV0hDOEwzSDQ2K3RvT2VlbkFadmMvN3d1VUF6QUkwMXZWblJDTHdQOEVsUmxEaUZXNDBFWFVUd0FWeUFHNHRBM3RSM29JNzZKNHhBK21PdkhUS2dLdGlJSWZxMmtzd2NBTnF1Q0RWVGRUSWowWXN2WGNwTFNvOXJjYXRZWjMxUmFEbVU4QWE1V3AvMEJpbnhEUGNVQTNxaHdYdUV3Q0hMdzVMYmdHTytNeXJhTkNEaytudUViMXBPcnNyNlR5eVlpQm54WGlMUDhBQk5XNmRzd3ZTdFA4VXJYcm1QVnI4eDQxMG1QZlhnVVljVUdPSUQxQ0xieDNDZndMdkZVV0pkN2hGRmFnbnJMaEFMcTRLTGpvRjlJeXZYa2I5WmsrbG1TT0s2Q3Y4WGZaTWZsN2NRQzRhOUJFQ2F0eUlxVzZnQm9iNmIwK3RvVC8rNVNNMU9RNWNEZ0ViY2QwRkFkUndRZUlXYXE2YmtrU0JHNVZGWFFWeVdIRnhWUUM0UUs3aVU0WlRyNGUvUkxlTjdrZGZ6Y3VnWEFVNTd4bk9CUllmSXlrRTFodHY4eWlvRzZsbTF6SDZ5My85blphdC9VUTk2Q1FnQTJ5SiszSkI0aDVzZEZZaXdTMXdDZURlL2pqQUZvc09hNTcrMmM5UTRYOS9tVzRaM1pkbThKM09Rc3pKSjNjN1V3bDBBSTBGa3c4MHNGUEJVNWlWN3pwT0wvLzBWVnF4OVZQMXBUQUFMRUFqcmx0cThhc1R3bHB6M1MxSlJMaWw4Z0k1WEJVczhNZGxmRndnVjhBWDVsSFc0emZTeENzRzB2VUR1OU5FZm5ZOFhheDVNbCtBd3UwUUsxM2JSRTJsWjJuOWxsSjZnNGYxMXBkWFc0K2g2aFlhY2ZqVWN1czhZVndRcm5NN1NXUzQwUmpVWHlBWG4xd2dCK0FDdWNUVHh3Mm1iaitjUmxOSDlhWnAvUXJvWW9iY3BtWjNRa0ZjVWlKYmRMSFE4Qm53MGdDN0h1NWpGYlJ6RHo4RHdpL25ydGxVb202Vnd6TExJaFlhNnpyVXNOSmlxUlBDQmVINnRwTkVoMXNhNUF0eWZYUUZjQU42Z1Z5ZEFIZE5vQUYzajZQcFEzclFsSUljR294UkZvQ3ViZzV4NW5pSFhZY1p6M3dBYUl4NlZOUlNTWEVaclYyOGlWWXQyVUJIdUNrQ3JrQ05kVDBPMTBPc2RNSkR6VzFSa2l4dzYrMFIwTVZkMFYwV3VRZ1YwTVhLTzc5OENSVjliUnhkTWJRSGplM1RqUzduMFphK2NGMHdkcTdEamdQRndyb0RaSWdDbWtQQWpESHB0dEdPNC96bzZZY0h5MmpibnpiUmxsZDMwQ25PQW1CMXFBVm9QUjFBeTRJanlNTFJ4SmRrZzF2dkViUU5yb3E0S3dJN0FCZW92VU5zUXo3bnpISFU3OFl4ZE1XUW5qU1duMHE4TER1TmVtSU9iVnlRQW5icndwUXpRM1RnOWZpNXJZRi9CVjdrbExnaWpYOXdJUWlZRWVLdGNuN3I1Y3pKS3ZxbytBeHRXN21kdHZ4eGt4cStFK3Vyd3l0d1N5aDVCR2d1MFhJL0FsY3l3WElrTTl6U0ZXTEpCWFNFRnNRY0IrQllGK2dscmlCdlM3ZFBHVTZGVXkraXdjT0thRkJSUGczcWxrVUQ4OU5wSUZ2NGZtemRuUUFlejFPTEs2UE9MSzkxYkJQTHEwSUdGeGQ4QWpIU3NONW1sVnQ0L1BsWVZST1Y4cVEycGFlcTZERFByM2Q0elc0cTRXRTdmQXNkWUFKV0FWYmlBTms3RHBpUkpqQWpWSWZsTUdrRmZaQXFncmJxQytBRjZBaGw4UVUyMG1TN3ZvODZXWEl6eWZtMUs2amZaUU5wUUVFbTVmUDB3MWxaYVpUTnc0N1o3TDluczRYUFpsOCtpNjErTnNPZHdRQTNzdld0WTkrNG5pMXhIZnZKZFR3OFYxZlBTMk16MVZjMFVOVkhwWFRrVDF2b1dFMkRCNUFBRkZDSzFSVmdCV1I5WGM4ait3ak1FbkpSeVMycEJMZmVrenJraUN0UU9kVGhGYUI5d1MwbmhZUlNobmU1c281akl5NEN3Q0FDbW5jb2xoV1FDcHdJSlM3d0FteUorOHJyWFM1blR4M1JGWjQ2cmZac3FRQ29od0s3SGdyNEhhWHBaVWdjUjlQaldCZm85TGlrSVJTUUJXWjkzVjhhMHZVeUpJNWpwS1JBNlVZOE5TQWdlb2VBR21tQlF1LzlVRHJTdkFYd1FRUkNQUlJRQTRYNlBoSS9WNnI1OWFsMG94WlBEUWlzU1BVVmx6UTlsTHg2aUxpM0FFaUlIZ3FrM3FIazg4NnJDakEvN1RXQURqRVN1Z1owdlVuY081UlNKVjNXOVZCQWxUUlo5dzZ4WGRJa3J3a0RhS0FqeFFmWTFXd09vSUZRZEd2QURhRE16bXorZjZTTVlFWDR6N2hNQUFBQUFFbEZUa1N1UW1DQyd9O3JldHVybntGYXZpY29uc0J5SHVlLH07fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci11aS1iLWluZm8tYmFyLWdyb3VwJyxyZWFkeSgpe3RoaXMubWVzc2FnZXNfPVtdO30sZ2V0IG1lc3NhZ2VDb3VudCgpe3JldHVybiB0aGlzLm1lc3NhZ2VzXy5sZW5ndGg7fSxjbGVhck1lc3NhZ2VzKCl7dGhpcy5tZXNzYWdlc189W107dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGFkZE1lc3NhZ2UodGV4dCxvcHRfYnV0dG9ucyl7b3B0X2J1dHRvbnM9b3B0X2J1dHRvbnN8fFtdO2ZvcihsZXQgaT0wO2k8b3B0X2J1dHRvbnMubGVuZ3RoO2krKyl7aWYob3B0X2J1dHRvbnNbaV0uYnV0dG9uVGV4dD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdidXR0b25UZXh0IG11c3QgYmUgcHJvdmlkZWQnKTt9CmlmKG9wdF9idXR0b25zW2ldLm9uQ2xpY2s9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignb25DbGljayBtdXN0IGJlIHByb3ZpZGVkJyk7fX0KdGhpcy5tZXNzYWdlc18ucHVzaCh7dGV4dCxidXR0b25zOm9wdF9idXR0b25zfHxbXX0pO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSx1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzLiQubWVzc2FnZXMpLnRleHRDb250ZW50PScnO3RoaXMubWVzc2FnZXNfLmZvckVhY2goZnVuY3Rpb24obWVzc2FnZSl7Y29uc3QgYmFyPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaW5mby1iYXInKTtiYXIubWVzc2FnZT1tZXNzYWdlLnRleHQ7YmFyLnZpc2libGU9dHJ1ZTttZXNzYWdlLmJ1dHRvbnMuZm9yRWFjaChmdW5jdGlvbihidXR0b24pe2Jhci5hZGRCdXR0b24oYnV0dG9uLmJ1dHRvblRleHQsYnV0dG9uLm9uQ2xpY2spO30sdGhpcyk7UG9seW1lci5kb20odGhpcy4kLm1lc3NhZ2VzKS5hcHBlbmRDaGlsZChiYXIpO30sdGhpcyk7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktYi10b29sYmFyLWJ1dHRvbid9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpJyxmdW5jdGlvbigpe2NvbnN0IFRhc2s9dHIuYi5UYXNrO2Z1bmN0aW9uIEZpbmRDb250cm9sbGVyKGJydXNoaW5nU3RhdGVDb250cm9sbGVyKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXz1icnVzaGluZ1N0YXRlQ29udHJvbGxlcjt0aGlzLmZpbHRlckhpdHNfPVtdO3RoaXMuY3VycmVudEhpdEluZGV4Xz0tMTt0aGlzLmFjdGl2ZVByb21pc2VfPVByb21pc2UucmVzb2x2ZSgpO3RoaXMuYWN0aXZlVGFza189dW5kZWZpbmVkO30KRmluZENvbnRyb2xsZXIucHJvdG90eXBlPXtfX3Byb3RvX186T2JqZWN0LnByb3RvdHlwZSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ubW9kZWw7fSxnZXQgYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoKXtyZXR1cm4gdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87fSxlbnF1ZXVlT3BlcmF0aW9uXyhvcGVyYXRpb24pe2xldCB0YXNrO2lmKG9wZXJhdGlvbiBpbnN0YW5jZW9mIHRyLmIuVGFzayl7dGFzaz1vcGVyYXRpb247fWVsc2V7dGFzaz1uZXcgdHIuYi5UYXNrKG9wZXJhdGlvbix0aGlzKTt9CmlmKHRoaXMuYWN0aXZlVGFza18pe3RoaXMuYWN0aXZlVGFza189dGhpcy5hY3RpdmVUYXNrXy5lbnF1ZXVlKHRhc2spO31lbHNle3RoaXMuYWN0aXZlVGFza189dGFzazt0aGlzLmFjdGl2ZVByb21pc2VfPVRhc2suUnVuV2hlbklkbGUodGhpcy5hY3RpdmVUYXNrXyk7dGhpcy5hY3RpdmVQcm9taXNlXy50aGVuKGZ1bmN0aW9uKCl7dGhpcy5hY3RpdmVQcm9taXNlXz11bmRlZmluZWQ7dGhpcy5hY3RpdmVUYXNrXz11bmRlZmluZWQ7fS5iaW5kKHRoaXMpKTt9fSxzdGFydEZpbHRlcmluZyhmaWx0ZXJUZXh0KXtjb25zdCBzYz10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXztpZighc2MpcmV0dXJuO3RoaXMuZW5xdWV1ZU9wZXJhdGlvbl8oZnVuY3Rpb24oKXt0aGlzLmZpbHRlckhpdHNfPVtdO3RoaXMuY3VycmVudEhpdEluZGV4Xz0tMTt9LmJpbmQodGhpcykpO2xldCBzdGF0ZUZyb21TdHJpbmc7dHJ5e3N0YXRlRnJvbVN0cmluZz1zYy51aVN0YXRlRnJvbVN0cmluZyhmaWx0ZXJUZXh0KTt9Y2F0Y2goZSl7dGhpcy5lbnF1ZXVlT3BlcmF0aW9uXyhmdW5jdGlvbigpe2NvbnN0IG92ZXJsYXk9bmV3IHRyLnVpLmIuT3ZlcmxheSgpO1BvbHltZXIuZG9tKG92ZXJsYXkpLnRleHRDb250ZW50PWUubWVzc2FnZTtvdmVybGF5LnRpdGxlPSdVSSBTdGF0ZSBOYXZpZ2F0aW9uIEVycm9yJztvdmVybGF5LnZpc2libGU9dHJ1ZTt9KTtyZXR1cm4gdGhpcy5hY3RpdmVQcm9taXNlXzt9CmlmKHN0YXRlRnJvbVN0cmluZyE9PXVuZGVmaW5lZCl7dGhpcy5lbnF1ZXVlT3BlcmF0aW9uXyhzYy5uYXZUb1Bvc2l0aW9uLmJpbmQodGhpcyxzdGF0ZUZyb21TdHJpbmcsdHJ1ZSkpO31lbHNle2lmKGZpbHRlclRleHQubGVuZ3RoPT09MCl7dGhpcy5lbnF1ZXVlT3BlcmF0aW9uXyhzYy5maW5kVGV4dENsZWFyZWQuYmluZChzYykpO31lbHNle2NvbnN0IGZpbHRlcj1uZXcgdHIuYy5GdWxsVGV4dEZpbHRlcihmaWx0ZXJUZXh0KTtjb25zdCBmaWx0ZXJIaXRTZXQ9bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7dGhpcy5lbnF1ZXVlT3BlcmF0aW9uXyhzYy5hZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uQXNUYXNrKGZpbHRlcixmaWx0ZXJIaXRTZXQpKTt0aGlzLmVucXVldWVPcGVyYXRpb25fKGZ1bmN0aW9uKCl7dGhpcy5maWx0ZXJIaXRzXz1maWx0ZXJIaXRTZXQudG9BcnJheSgpO3NjLmZpbmRUZXh0Q2hhbmdlZFRvKGZpbHRlckhpdFNldCk7fS5iaW5kKHRoaXMpKTt9fQpyZXR1cm4gdGhpcy5hY3RpdmVQcm9taXNlXzt9LGdldCBmaWx0ZXJIaXRzKCl7cmV0dXJuIHRoaXMuZmlsdGVySGl0c187fSxnZXQgY3VycmVudEhpdEluZGV4KCl7cmV0dXJuIHRoaXMuY3VycmVudEhpdEluZGV4Xzt9LGZpbmRfKGRpcil7Y29uc3QgZmlyc3RIaXQ9dGhpcy5jdXJyZW50SGl0SW5kZXhfPT09LTE7aWYoZmlyc3RIaXQmJmRpcjwwKXt0aGlzLmN1cnJlbnRIaXRJbmRleF89MDt9CmNvbnN0IE49dGhpcy5maWx0ZXJIaXRzLmxlbmd0aDt0aGlzLmN1cnJlbnRIaXRJbmRleF89KHRoaXMuY3VycmVudEhpdEluZGV4XytkaXIrTiklTjtpZighdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pcmV0dXJuO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmZpbmRGb2N1c0NoYW5nZWRUbyhuZXcgdHIubW9kZWwuRXZlbnRTZXQodGhpcy5maWx0ZXJIaXRzW3RoaXMuY3VycmVudEhpdEluZGV4XSkpO30sZmluZE5leHQoKXt0aGlzLmZpbmRfKDEpO30sZmluZFByZXZpb3VzKCl7dGhpcy5maW5kXygtMSk7fX07cmV0dXJue0ZpbmRDb250cm9sbGVyLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFRpbWluZ1Rvb2wodmlld3BvcnQsdGFyZ2V0RWxlbWVudCl7dGhpcy52aWV3cG9ydF89dmlld3BvcnQ7dGhpcy5vbk1vdXNlTW92ZV89dGhpcy5vbk1vdXNlTW92ZV8uYmluZCh0aGlzKTt0aGlzLm9uRGJsQ2xpY2tfPXRoaXMub25EYmxDbGlja18uYmluZCh0aGlzKTt0aGlzLnRhcmdldEVsZW1lbnRfPXRhcmdldEVsZW1lbnQ7dGhpcy5pc01vdmluZ0xlZnRFZGdlXz1mYWxzZTt9ClRpbWluZ1Rvb2wucHJvdG90eXBlPXtvbkVudGVyVGltaW5nKGUpe3RoaXMudGFyZ2V0RWxlbWVudF8uYWRkRXZlbnRMaXN0ZW5lcignbW91c2Vtb3ZlJyx0aGlzLm9uTW91c2VNb3ZlXyk7dGhpcy50YXJnZXRFbGVtZW50Xy5hZGRFdmVudExpc3RlbmVyKCdkYmxjbGljaycsdGhpcy5vbkRibENsaWNrXyk7fSxvbkJlZ2luVGltaW5nKGUpe2lmKCF0aGlzLmlzVG91Y2hQb2ludEluc2lkZVRyYWNrQm91bmRzXyhlLmNsaWVudFgsZS5jbGllbnRZKSl7cmV0dXJuO30KY29uc3QgcHQ9dGhpcy5nZXRTbmFwcGVkVG9FdmVudFBvc2l0aW9uXyhlKTt0aGlzLm1vdXNlRG93bkF0XyhwdC54LHB0LnkpO3RoaXMudXBkYXRlU25hcEluZGljYXRvcnNfKHB0KTt9LHVwZGF0ZVNuYXBJbmRpY2F0b3JzXyhwdCl7aWYoIXB0LnNuYXBwZWQpcmV0dXJuO2NvbnN0IGlyPXRoaXMudmlld3BvcnRfLmludGVyZXN0UmFuZ2U7aWYoaXIubWluPT09cHQueCl7aXIubGVmdFNuYXBJbmRpY2F0b3I9bmV3IHRyLnVpLlNuYXBJbmRpY2F0b3IocHQueSxwdC5oZWlnaHQpO30KaWYoaXIubWF4PT09cHQueCl7aXIucmlnaHRTbmFwSW5kaWNhdG9yPW5ldyB0ci51aS5TbmFwSW5kaWNhdG9yKHB0LnkscHQuaGVpZ2h0KTt9fSxvblVwZGF0ZVRpbWluZyhlKXtjb25zdCBwdD10aGlzLmdldFNuYXBwZWRUb0V2ZW50UG9zaXRpb25fKGUpO3RoaXMubW91c2VNb3ZlQXRfKHB0LngscHQueSx0cnVlKTt0aGlzLnVwZGF0ZVNuYXBJbmRpY2F0b3JzXyhwdCk7fSxvbkVuZFRpbWluZyhlKXt0aGlzLm1vdXNlVXBfKCk7fSxvbkV4aXRUaW1pbmcoZSl7dGhpcy50YXJnZXRFbGVtZW50Xy5yZW1vdmVFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTt0aGlzLnRhcmdldEVsZW1lbnRfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2RibGNsaWNrJyx0aGlzLm9uRGJsQ2xpY2tfKTt9LG9uTW91c2VNb3ZlXyhlKXtpZihlLmJ1dHRvbilyZXR1cm47Y29uc3Qgd29ybGRYPXRoaXMuZ2V0V29ybGRYRnJvbUV2ZW50XyhlKTt0aGlzLm1vdXNlTW92ZUF0Xyh3b3JsZFgsZS5jbGllbnRZLGZhbHNlKTt9LG9uRGJsQ2xpY2tfKGUpe30saXNUb3VjaFBvaW50SW5zaWRlVHJhY2tCb3VuZHNfKGNsaWVudFgsY2xpZW50WSl7aWYoIXRoaXMudmlld3BvcnRffHwhdGhpcy52aWV3cG9ydF8ubW9kZWxUcmFja0NvbnRhaW5lcnx8IXRoaXMudmlld3BvcnRfLm1vZGVsVHJhY2tDb250YWluZXIuY2FudmFzKXtyZXR1cm4gZmFsc2U7fQpjb25zdCBjYW52YXM9dGhpcy52aWV3cG9ydF8ubW9kZWxUcmFja0NvbnRhaW5lci5jYW52YXM7Y29uc3QgY2FudmFzUmVjdD1jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoY2xpZW50WD49Y2FudmFzUmVjdC5sZWZ0JiZjbGllbnRYPD1jYW52YXNSZWN0LnJpZ2h0JiZjbGllbnRZPj1jYW52YXNSZWN0LnRvcCYmY2xpZW50WTw9Y2FudmFzUmVjdC5ib3R0b20pe3JldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30sbW91c2VEb3duQXRfKHdvcmxkWCx5KXtjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgbmVhcm5lc3NUaHJlc2hvbGRXb3JsZD1kdC54Vmlld1ZlY3RvclRvV29ybGQoNipwaXhlbFJhdGlvKTtpZihpci5pc0VtcHR5KXtpci5zZXRNaW5BbmRNYXgod29ybGRYLHdvcmxkWCk7aXIucmlnaHRTZWxlY3RlZD10cnVlO3RoaXMuaXNNb3ZpbmdMZWZ0RWRnZV89ZmFsc2U7cmV0dXJuO30KaWYoTWF0aC5hYnMod29ybGRYLWlyLm1pbik8bmVhcm5lc3NUaHJlc2hvbGRXb3JsZCl7aXIubGVmdFNlbGVjdGVkPXRydWU7aXIubWluPXdvcmxkWDt0aGlzLmlzTW92aW5nTGVmdEVkZ2VfPXRydWU7cmV0dXJuO30KaWYoTWF0aC5hYnMod29ybGRYLWlyLm1heCk8bmVhcm5lc3NUaHJlc2hvbGRXb3JsZCl7aXIucmlnaHRTZWxlY3RlZD10cnVlO2lyLm1heD13b3JsZFg7dGhpcy5pc01vdmluZ0xlZnRFZGdlXz1mYWxzZTtyZXR1cm47fQppci5zZXRNaW5BbmRNYXgod29ybGRYLHdvcmxkWCk7aXIucmlnaHRTZWxlY3RlZD10cnVlO3RoaXMuaXNNb3ZpbmdMZWZ0RWRnZV89ZmFsc2U7fSxtb3VzZU1vdmVBdF8od29ybGRYLHksbW91c2VEb3duKXtpZihtb3VzZURvd24pe3RoaXMudXBkYXRlTW92aW5nRWRnZV8od29ybGRYKTtyZXR1cm47fQpjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgbmVhcm5lc3NUaHJlc2hvbGRXb3JsZD1kdC54Vmlld1ZlY3RvclRvV29ybGQoNipwaXhlbFJhdGlvKTtpZihNYXRoLmFicyh3b3JsZFgtaXIubWluKTxuZWFybmVzc1RocmVzaG9sZFdvcmxkKXtpci5sZWZ0U2VsZWN0ZWQ9dHJ1ZTtpci5yaWdodFNlbGVjdGVkPWZhbHNlO3JldHVybjt9CmlmKE1hdGguYWJzKHdvcmxkWC1pci5tYXgpPG5lYXJuZXNzVGhyZXNob2xkV29ybGQpe2lyLmxlZnRTZWxlY3RlZD1mYWxzZTtpci5yaWdodFNlbGVjdGVkPXRydWU7cmV0dXJuO30KaXIubGVmdFNlbGVjdGVkPWZhbHNlO2lyLnJpZ2h0U2VsZWN0ZWQ9ZmFsc2U7cmV0dXJuO30sdXBkYXRlTW92aW5nRWRnZV8obmV3V29ybGRYKXtjb25zdCBpcj10aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlO2xldCBhPWlyLm1pbjtsZXQgYj1pci5tYXg7aWYodGhpcy5pc01vdmluZ0xlZnRFZGdlXyl7YT1uZXdXb3JsZFg7fWVsc2V7Yj1uZXdXb3JsZFg7fQppZihhPD1iKXtpci5zZXRNaW5BbmRNYXgoYSxiKTt9ZWxzZXtpci5zZXRNaW5BbmRNYXgoYixhKTt9CmlmKGlyLm1pbj09PW5ld1dvcmxkWCl7dGhpcy5pc01vdmluZ0xlZnRFZGdlXz10cnVlO2lyLmxlZnRTZWxlY3RlZD10cnVlO2lyLnJpZ2h0U2VsZWN0ZWQ9ZmFsc2U7fWVsc2V7dGhpcy5pc01vdmluZ0xlZnRFZGdlXz1mYWxzZTtpci5sZWZ0U2VsZWN0ZWQ9ZmFsc2U7aXIucmlnaHRTZWxlY3RlZD10cnVlO319LG1vdXNlVXBfKCl7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3QgaXI9dGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZTtpci5sZWZ0U2VsZWN0ZWQ9ZmFsc2U7aXIucmlnaHRTZWxlY3RlZD1mYWxzZTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IG1pbldpZHRoVmFsdWU9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKDIqcGl4ZWxSYXRpbyk7aWYoaXIucmFuZ2U8bWluV2lkdGhWYWx1ZSl7aXIucmVzZXQoKTt9fSxnZXRXb3JsZFhGcm9tRXZlbnRfKGUpe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgY2FudmFzPXRoaXMudmlld3BvcnRfLm1vZGVsVHJhY2tDb250YWluZXIuY2FudmFzO2NvbnN0IHdvcmxkT2Zmc2V0PWNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O2NvbnN0IHZpZXdYPShlLmNsaWVudFgtd29ybGRPZmZzZXQpKnBpeGVsUmF0aW87cmV0dXJuIHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnhWaWV3VG9Xb3JsZCh2aWV3WCk7fSxnZXRTbmFwcGVkVG9FdmVudFBvc2l0aW9uXyhlKXtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IEVWRU5UX1NOQVBfUkFOR0U9MTYqcGl4ZWxSYXRpbztjb25zdCBtb2RlbFRyYWNrQ29udGFpbmVyPXRoaXMudmlld3BvcnRfLm1vZGVsVHJhY2tDb250YWluZXI7Y29uc3QgbW9kZWxUcmFja0NvbnRhaW5lclJlY3Q9bW9kZWxUcmFja0NvbnRhaW5lci5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB2aWV3cG9ydD10aGlzLnZpZXdwb3J0Xztjb25zdCBkdD12aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCB3b3JsZE1heERpc3Q9ZHQueFZpZXdWZWN0b3JUb1dvcmxkKEVWRU5UX1NOQVBfUkFOR0UpO2NvbnN0IHdvcmxkWD10aGlzLmdldFdvcmxkWEZyb21FdmVudF8oZSk7Y29uc3QgbW91c2VZPWUuY2xpZW50WTtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7bW9kZWxUcmFja0NvbnRhaW5lci5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LG1vdXNlWSxtb3VzZVksc2VsZWN0aW9uKTtpZighc2VsZWN0aW9uLmxlbmd0aCl7bW9kZWxUcmFja0NvbnRhaW5lci5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LG1vZGVsVHJhY2tDb250YWluZXJSZWN0LnRvcCxtb2RlbFRyYWNrQ29udGFpbmVyUmVjdC5ib3R0b20sc2VsZWN0aW9uKTt9CmxldCBtaW5EaXN0WD13b3JsZE1heERpc3Q7bGV0IG1pbkRpc3RZPUluZmluaXR5O2NvbnN0IHBpeFdpZHRoPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZCgxKTtjb25zdCByZXN1bHQ9e3g6d29ybGRYLHk6bW91c2VZLW1vZGVsVHJhY2tDb250YWluZXJSZWN0LnRvcCxoZWlnaHQ6MCxzbmFwcGVkOmZhbHNlfTtjb25zdCBldmVudEJvdW5kcz1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHNlbGVjdGlvbil7Y29uc3QgdHJhY2s9dmlld3BvcnQudHJhY2tGb3JFdmVudChldmVudCk7Y29uc3QgdHJhY2tSZWN0PXRyYWNrLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2V2ZW50Qm91bmRzLnJlc2V0KCk7ZXZlbnQuYWRkQm91bmRzVG9SYW5nZShldmVudEJvdW5kcyk7bGV0IGV2ZW50WDtpZihNYXRoLmFicyhldmVudEJvdW5kcy5taW4td29ybGRYKTxNYXRoLmFicyhldmVudEJvdW5kcy5tYXgtd29ybGRYKSl7ZXZlbnRYPWV2ZW50Qm91bmRzLm1pbjt9ZWxzZXtldmVudFg9ZXZlbnRCb3VuZHMubWF4O30KY29uc3QgZGlzdFg9ZXZlbnRYLXdvcmxkWDtjb25zdCBldmVudFk9dHJhY2tSZWN0LnRvcDtjb25zdCBldmVudEhlaWdodD10cmFja1JlY3QuaGVpZ2h0O2NvbnN0IGRpc3RZPU1hdGguYWJzKGV2ZW50WStldmVudEhlaWdodC8yLW1vdXNlWSk7aWYoKGRpc3RYPD1taW5EaXN0WHx8TWF0aC5hYnMoZGlzdFgtbWluRGlzdFgpPHBpeFdpZHRoKSYmZGlzdFk8bWluRGlzdFkpe21pbkRpc3RYPWRpc3RYO21pbkRpc3RZPWRpc3RZO3Jlc3VsdC54PWV2ZW50WDtyZXN1bHQueT1ldmVudFkrCm1vZGVsVHJhY2tDb250YWluZXIuc2Nyb2xsVG9wLW1vZGVsVHJhY2tDb250YWluZXJSZWN0LnRvcDtyZXN1bHQuaGVpZ2h0PWV2ZW50SGVpZ2h0O3Jlc3VsdC5zbmFwcGVkPXRydWU7fX0KcmV0dXJuIHJlc3VsdDt9fTtyZXR1cm57VGltaW5nVG9vbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7Y29uc3Qga0RlZmF1bHRQYW5BbmltYXRpb25EdXJhdGlvbk1zPTEwMC4wO2NvbnN0IGxlcnA9dHIuYi5tYXRoLmxlcnA7ZnVuY3Rpb24gVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uKGRlbHRhWCxkZWx0YVksb3B0X2R1cmF0aW9uTXMpe3RoaXMuZGVsdGFYPWRlbHRhWDt0aGlzLmRlbHRhWT1kZWx0YVk7aWYob3B0X2R1cmF0aW9uTXM9PT11bmRlZmluZWQpe3RoaXMuZHVyYXRpb25Ncz1rRGVmYXVsdFBhbkFuaW1hdGlvbkR1cmF0aW9uTXM7fWVsc2V7dGhpcy5kdXJhdGlvbk1zPW9wdF9kdXJhdGlvbk1zO30KdGhpcy5zdGFydFBhblg9dW5kZWZpbmVkO3RoaXMuc3RhcnRQYW5ZPXVuZGVmaW5lZDt0aGlzLnN0YXJ0VGltZU1zPXVuZGVmaW5lZDt9ClRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVBhbkFuaW1hdGlvbi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS5iLkFuaW1hdGlvbi5wcm90b3R5cGUsZ2V0IGFmZmVjdHNQYW5ZKCl7cmV0dXJuIHRoaXMuZGVsdGFZIT09MDt9LGNhblRha2VPdmVyRm9yKGV4aXN0aW5nQW5pbWF0aW9uKXtyZXR1cm4gZXhpc3RpbmdBbmltYXRpb24gaW5zdGFuY2VvZiBUaW1lbGluZURpc3BsYXlUcmFuc2Zvcm1QYW5BbmltYXRpb247fSx0YWtlT3ZlckZvcihleGlzdGluZyx0aW1lc3RhbXAsdGFyZ2V0KXtjb25zdCByZW1haW5pbmdEZWx0YVhPbkV4aXN0aW5nPWV4aXN0aW5nLmdvYWxQYW5YLXRhcmdldC5wYW5YO2NvbnN0IHJlbWFpbmluZ0RlbHRhWU9uRXhpc3Rpbmc9ZXhpc3RpbmcuZ29hbFBhblktdGFyZ2V0LnBhblk7bGV0IHJlbWFpbmluZ1RpbWVPbkV4aXN0aW5nPXRpbWVzdGFtcC0oZXhpc3Rpbmcuc3RhcnRUaW1lTXMrZXhpc3RpbmcuZHVyYXRpb25Ncyk7cmVtYWluaW5nVGltZU9uRXhpc3Rpbmc9TWF0aC5tYXgocmVtYWluaW5nVGltZU9uRXhpc3RpbmcsMCk7dGhpcy5kZWx0YVgrPXJlbWFpbmluZ0RlbHRhWE9uRXhpc3Rpbmc7dGhpcy5kZWx0YVkrPXJlbWFpbmluZ0RlbHRhWU9uRXhpc3Rpbmc7dGhpcy5kdXJhdGlvbk1zKz1yZW1haW5pbmdUaW1lT25FeGlzdGluZzt9LHN0YXJ0KHRpbWVzdGFtcCx0YXJnZXQpe3RoaXMuc3RhcnRUaW1lTXM9dGltZXN0YW1wO3RoaXMuc3RhcnRQYW5YPXRhcmdldC5wYW5YO3RoaXMuc3RhcnRQYW5ZPXRhcmdldC5wYW5ZO30sdGljayh0aW1lc3RhbXAsdGFyZ2V0KXtsZXQgcGVyY2VudERvbmU9KHRpbWVzdGFtcC10aGlzLnN0YXJ0VGltZU1zKS90aGlzLmR1cmF0aW9uTXM7cGVyY2VudERvbmU9dHIuYi5tYXRoLmNsYW1wKHBlcmNlbnREb25lLDAsMSk7dGFyZ2V0LnBhblg9bGVycChwZXJjZW50RG9uZSx0aGlzLnN0YXJ0UGFuWCx0aGlzLmdvYWxQYW5YKTtpZih0aGlzLmFmZmVjdHNQYW5ZKXt0YXJnZXQucGFuWT1sZXJwKHBlcmNlbnREb25lLHRoaXMuc3RhcnRQYW5ZLHRoaXMuZ29hbFBhblkpO30KcmV0dXJuIHRpbWVzdGFtcD49dGhpcy5zdGFydFRpbWVNcyt0aGlzLmR1cmF0aW9uTXM7fSxnZXQgZ29hbFBhblgoKXtyZXR1cm4gdGhpcy5zdGFydFBhblgrdGhpcy5kZWx0YVg7fSxnZXQgZ29hbFBhblkoKXtyZXR1cm4gdGhpcy5zdGFydFBhblkrdGhpcy5kZWx0YVk7fX07ZnVuY3Rpb24gVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtWm9vbVRvQW5pbWF0aW9uKGdvYWxGb2NhbFBvaW50WFdvcmxkLGdvYWxGb2NhbFBvaW50WFZpZXcsZ29hbEZvY2FsUG9pbnRZLHpvb21JblJhdGlvWCxvcHRfZHVyYXRpb25Ncyl7dGhpcy5nb2FsRm9jYWxQb2ludFhXb3JsZD1nb2FsRm9jYWxQb2ludFhXb3JsZDt0aGlzLmdvYWxGb2NhbFBvaW50WFZpZXc9Z29hbEZvY2FsUG9pbnRYVmlldzt0aGlzLmdvYWxGb2NhbFBvaW50WT1nb2FsRm9jYWxQb2ludFk7dGhpcy56b29tSW5SYXRpb1g9em9vbUluUmF0aW9YO2lmKG9wdF9kdXJhdGlvbk1zPT09dW5kZWZpbmVkKXt0aGlzLmR1cmF0aW9uTXM9a0RlZmF1bHRQYW5BbmltYXRpb25EdXJhdGlvbk1zO31lbHNle3RoaXMuZHVyYXRpb25Ncz1vcHRfZHVyYXRpb25Nczt9CnRoaXMuc3RhcnRUaW1lTXM9dW5kZWZpbmVkO3RoaXMuc3RhcnRTY2FsZVg9dW5kZWZpbmVkO3RoaXMuZ29hbFNjYWxlWD11bmRlZmluZWQ7dGhpcy5zdGFydFBhblk9dW5kZWZpbmVkO30KVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtWm9vbVRvQW5pbWF0aW9uLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLmIuQW5pbWF0aW9uLnByb3RvdHlwZSxnZXQgYWZmZWN0c1BhblkoKXtyZXR1cm4gdGhpcy5zdGFydFBhblkhPT10aGlzLmdvYWxGb2NhbFBvaW50WTt9LGNhblRha2VPdmVyRm9yKGV4aXN0aW5nQW5pbWF0aW9uKXtyZXR1cm4gZmFsc2U7fSx0YWtlT3ZlckZvcihleGlzdGluZ0FuaW1hdGlvbix0aW1lc3RhbXAsdGFyZ2V0KXt0aGlzLmdvYWxTY2FsZVg9dGFyZ2V0LnNjYWxlWCp0aGlzLnpvb21JblJhdGlvWDt9LHN0YXJ0KHRpbWVzdGFtcCx0YXJnZXQpe3RoaXMuc3RhcnRUaW1lTXM9dGltZXN0YW1wO3RoaXMuc3RhcnRTY2FsZVg9dGFyZ2V0LnNjYWxlWDt0aGlzLmdvYWxTY2FsZVg9dGhpcy56b29tSW5SYXRpb1gqdGFyZ2V0LnNjYWxlWDt0aGlzLnN0YXJ0UGFuWT10YXJnZXQucGFuWTt9LHRpY2sodGltZXN0YW1wLHRhcmdldCl7bGV0IHBlcmNlbnREb25lPSh0aW1lc3RhbXAtdGhpcy5zdGFydFRpbWVNcykvdGhpcy5kdXJhdGlvbk1zO3BlcmNlbnREb25lPXRyLmIubWF0aC5jbGFtcChwZXJjZW50RG9uZSwwLDEpO3RhcmdldC5zY2FsZVg9bGVycChwZXJjZW50RG9uZSx0aGlzLnN0YXJ0U2NhbGVYLHRoaXMuZ29hbFNjYWxlWCk7aWYodGhpcy5hZmZlY3RzUGFuWSl7dGFyZ2V0LnBhblk9bGVycChwZXJjZW50RG9uZSx0aGlzLnN0YXJ0UGFuWSx0aGlzLmdvYWxGb2NhbFBvaW50WSk7fQp0YXJnZXQueFBhbldvcmxkUG9zVG9WaWV3UG9zKHRoaXMuZ29hbEZvY2FsUG9pbnRYV29ybGQsdGhpcy5nb2FsRm9jYWxQb2ludFhWaWV3KTtyZXR1cm4gdGltZXN0YW1wPj10aGlzLnN0YXJ0VGltZU1zK3RoaXMuZHVyYXRpb25Nczt9fTtyZXR1cm57VGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uLFRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVpvb21Ub0FuaW1hdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IERyYXdUeXBlPXtHRU5FUkFMX0VWRU5UOjEsSU5TVEFOVF9FVkVOVDoyLEJBQ0tHUk9VTkQ6MyxHUklEOjQsRkxPV19BUlJPV1M6NSxNQVJLRVJTOjYsSElHSExJR0hUUzo3LEFOTk9UQVRJT05TOjh9O2NvbnN0IE1BWF9PVkVSU0laRV9NVUxUSVBMRT0zLjA7Y29uc3QgUkVEUkFXX1NMT1A9KE1BWF9PVkVSU0laRV9NVUxUSVBMRS0xKS8yO2NvbnN0IERyYXdpbmdDb250YWluZXI9dHIudWkuYi5kZWZpbmUoJ2RyYXdpbmctY29udGFpbmVyJyx0ci51aS50cmFja3MuVHJhY2spO0RyYXdpbmdDb250YWluZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2RyYXdpbmctY29udGFpbmVyJyk7dGhpcy5jYW52YXNfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpO3RoaXMuY2FudmFzXy5jbGFzc05hbWU9J2RyYXdpbmctY29udGFpbmVyLWNhbnZhcyc7dGhpcy5jYW52YXNfLnN0eWxlLmxlZnQ9dHIudWkuYi5jb25zdGFudHMuSEVBRElOR19XSURUSCsncHgnO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuY2FudmFzXyk7dGhpcy5jdHhfPXRoaXMuY2FudmFzXy5nZXRDb250ZXh0KCcyZCcpO3RoaXMub2Zmc2V0WV89MDt0aGlzLnZpZXdwb3J0Q2hhbmdlXz10aGlzLnZpZXdwb3J0Q2hhbmdlXy5iaW5kKHRoaXMpO3RoaXMudmlld3BvcnQuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLnZpZXdwb3J0Q2hhbmdlXyk7d2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy53aW5kb3dSZXNpemVkXy5iaW5kKHRoaXMpKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3Njcm9sbCcsdGhpcy5zY3JvbGxDaGFuZ2VkXy5iaW5kKHRoaXMpKTt9LGdldCBjYW52YXMoKXtyZXR1cm4gdGhpcy5jYW52YXNfO30sY29udGV4dCgpe3JldHVybiB0aGlzLmN0eF87fSx2aWV3cG9ydENoYW5nZV8oKXt0aGlzLmludmFsaWRhdGUoKTt9LHdpbmRvd1Jlc2l6ZWRfKCl7dGhpcy5pbnZhbGlkYXRlKCk7fSxzY3JvbGxDaGFuZ2VkXygpe2lmKHRoaXMudXBkYXRlT2Zmc2V0WV8oKSl7dGhpcy5pbnZhbGlkYXRlKCk7fX0saW52YWxpZGF0ZSgpe2lmKHRoaXMucmFmUGVuZGluZ18pcmV0dXJuO3RoaXMucmFmUGVuZGluZ189dHJ1ZTt0ci5iLnJlcXVlc3RQcmVBbmltYXRpb25GcmFtZSh0aGlzLnByZURyYXdfLHRoaXMpO30scHJlRHJhd18oKXt0aGlzLnJhZlBlbmRpbmdfPWZhbHNlO3RoaXMudXBkYXRlQ2FudmFzU2l6ZUlmTmVlZGVkXygpO3RyLmIucmVxdWVzdEFuaW1hdGlvbkZyYW1lSW5UaGlzRnJhbWVJZlBvc3NpYmxlKHRoaXMuZHJhd18sdGhpcyk7fSxkcmF3Xygpe3RoaXMuY3R4Xy5jbGVhclJlY3QoMCwwLHRoaXMuY2FudmFzXy53aWR0aCx0aGlzLmNhbnZhc18uaGVpZ2h0KTtjb25zdCB0eXBlc1RvRHJhdz1bRHJhd1R5cGUuQkFDS0dST1VORCxEcmF3VHlwZS5ISUdITElHSFRTLERyYXdUeXBlLkdSSUQsRHJhd1R5cGUuSU5TVEFOVF9FVkVOVCxEcmF3VHlwZS5HRU5FUkFMX0VWRU5ULERyYXdUeXBlLk1BUktFUlMsRHJhd1R5cGUuQU5OT1RBVElPTlMsRHJhd1R5cGUuRkxPV19BUlJPV1NdO2Zvcihjb25zdCBpZHggaW4gdHlwZXNUb0RyYXcpe2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXtpZighKHRoaXMuY2hpbGRyZW5baV1pbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjaykpe2NvbnRpbnVlO30KdGhpcy5jaGlsZHJlbltpXS5kcmF3VHJhY2sodHlwZXNUb0RyYXdbaWR4XSk7fX0KY29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5jYW52YXNfLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGR0PXRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgdmlld0xXb3JsZD1kdC54Vmlld1RvV29ybGQoMCk7Y29uc3Qgdmlld1JXb3JsZD1kdC54Vmlld1RvV29ybGQoYm91bmRzLndpZHRoKnBpeGVsUmF0aW8pO2NvbnN0IHZpZXdIZWlnaHQ9Ym91bmRzLmhlaWdodCpwaXhlbFJhdGlvO3RoaXMudmlld3BvcnQuZHJhd0dyaWRMaW5lcyh0aGlzLmN0eF8sdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpO30sdXBkYXRlT2Zmc2V0WV8oKXtjb25zdCBtYXhZRGVsdGE9d2luZG93LmlubmVySGVpZ2h0KlJFRFJBV19TTE9QO2xldCBuZXdPZmZzZXQ9dGhpcy5zY3JvbGxUb3AtbWF4WURlbHRhO2lmKE1hdGguYWJzKG5ld09mZnNldC10aGlzLm9mZnNldFlfKTw9bWF4WURlbHRhKXJldHVybiBmYWxzZTtjb25zdCBtYXhPZmZzZXQ9dGhpcy5zY3JvbGxIZWlnaHQtCnRoaXMuY2FudmFzXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5oZWlnaHQ7bmV3T2Zmc2V0PU1hdGgubWF4KDAsTWF0aC5taW4obmV3T2Zmc2V0LG1heE9mZnNldCkpO2lmKG5ld09mZnNldCE9PXRoaXMub2Zmc2V0WV8pe3RoaXMub2Zmc2V0WV89bmV3T2Zmc2V0O3JldHVybiB0cnVlO30KcmV0dXJuIGZhbHNlO30sdXBkYXRlQ2FudmFzU2l6ZUlmTmVlZGVkXygpe2NvbnN0IHZpc2libGVDaGlsZFRyYWNrcz1BcnJheS5mcm9tKHRoaXMuY2hpbGRyZW4pLmZpbHRlcih0aGlzLnZpc2libGVGaWx0ZXJfKTtpZih2aXNpYmxlQ2hpbGRUcmFja3MubGVuZ3RoPT09MCl7cmV0dXJuO30KY29uc3QgdGhpc0JvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGZpcnN0Q2hpbGRUcmFja0JvdW5kcz12aXNpYmxlQ2hpbGRUcmFja3NbMF0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgbGFzdENoaWxkVHJhY2tCb3VuZHM9dmlzaWJsZUNoaWxkVHJhY2tzW3Zpc2libGVDaGlsZFRyYWNrcy5sZW5ndGgtMV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgaW5uZXJXaWR0aD1maXJzdENoaWxkVHJhY2tCb3VuZHMud2lkdGgtCnRyLnVpLmIuY29uc3RhbnRzLkhFQURJTkdfV0lEVEg7Y29uc3QgaW5uZXJIZWlnaHQ9TWF0aC5taW4obGFzdENoaWxkVHJhY2tCb3VuZHMuYm90dG9tLWZpcnN0Q2hpbGRUcmFja0JvdW5kcy50b3AsTWF0aC5mbG9vcih3aW5kb3cuaW5uZXJIZWlnaHQqTUFYX09WRVJTSVpFX01VTFRJUExFKSk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtpZih0aGlzLmNhbnZhc18ud2lkdGghPT1pbm5lcldpZHRoKnBpeGVsUmF0aW8pe3RoaXMuY2FudmFzXy53aWR0aD1pbm5lcldpZHRoKnBpeGVsUmF0aW87dGhpcy5jYW52YXNfLnN0eWxlLndpZHRoPWlubmVyV2lkdGgrJ3B4Jzt9CmlmKHRoaXMuY2FudmFzXy5oZWlnaHQhPT1pbm5lckhlaWdodCpwaXhlbFJhdGlvKXt0aGlzLmNhbnZhc18uaGVpZ2h0PWlubmVySGVpZ2h0KnBpeGVsUmF0aW87dGhpcy5jYW52YXNfLnN0eWxlLmhlaWdodD1pbm5lckhlaWdodCsncHgnO30KaWYodGhpcy5jYW52YXNfLnRvcCE9PXRoaXMub2Zmc2V0WV8pe3RoaXMuY2FudmFzXy50b3A9dGhpcy5vZmZzZXRZXzt0aGlzLmNhbnZhc18uc3R5bGUudG9wPXRoaXMub2Zmc2V0WV8rJ3B4Jzt9fSx2aXNpYmxlRmlsdGVyXyhlbGVtZW50KXtpZighKGVsZW1lbnQgaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spKXJldHVybiBmYWxzZTtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUoZWxlbWVudCkuZGlzcGxheSE9PSdub25lJzt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7KytpKXtpZighKHRoaXMuY2hpbGRyZW5baV1pbnN0YW5jZW9mIHRyLnVpLnRyYWNrcy5UcmFjaykpe2NvbnRpbnVlO30KY29uc3QgdHJhY2tDbGllbnRSZWN0PXRoaXMuY2hpbGRyZW5baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgYT1NYXRoLm1heChsb1ksdHJhY2tDbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVksdHJhY2tDbGllbnRSZWN0LmJvdHRvbSk7aWYoYTw9Yil7dGhpcy5jaGlsZHJlbltpXS5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKTt9fQp0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtmb3IobGV0IGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysraSl7aWYoISh0aGlzLmNoaWxkcmVuW2ldaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spKXtjb250aW51ZTt9CnRoaXMuY2hpbGRyZW5baV0uYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApO319fTtyZXR1cm57RHJhd2luZ0NvbnRhaW5lcixEcmF3VHlwZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubW9kZWwnLGZ1bmN0aW9uKCl7Y29uc3QgU2VsZWN0YWJsZUl0ZW09dHIubW9kZWwuU2VsZWN0YWJsZUl0ZW07Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7ZnVuY3Rpb24gUHJveHlTZWxlY3RhYmxlSXRlbShtb2RlbEl0ZW0pe1NlbGVjdGFibGVJdGVtLmNhbGwodGhpcyxtb2RlbEl0ZW0pO30KUHJveHlTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGU9e19fcHJvdG9fXzpTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGUsZ2V0IHNlbGVjdGlvblN0YXRlKCl7Y29uc3QgbW9kZWxJdGVtPXRoaXMubW9kZWxJdGVtXztpZihtb2RlbEl0ZW09PT11bmRlZmluZWQpe3JldHVybiBTZWxlY3Rpb25TdGF0ZS5OT05FO30KcmV0dXJuIG1vZGVsSXRlbS5zZWxlY3Rpb25TdGF0ZTt9fTtyZXR1cm57UHJveHlTZWxlY3RhYmxlSXRlbSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7Y29uc3QgU2VsZWN0aW9uU3RhdGU9dHIubW9kZWwuU2VsZWN0aW9uU3RhdGU7Y29uc3QgTGV0dGVyRG90VHJhY2s9dHIudWkuYi5kZWZpbmUoJ2xldHRlci1kb3QtdHJhY2snLHRyLnVpLnRyYWNrcy5UcmFjayk7TGV0dGVyRG90VHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2xldHRlci1kb3QtdHJhY2snKTt0aGlzLml0ZW1zXz11bmRlZmluZWQ7dGhpcy5oZWFkaW5nXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWhlYWRpbmcnKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmhlYWRpbmdfKTt9LHNldCBoZWFkaW5nKGhlYWRpbmcpe3RoaXMuaGVhZGluZ18uaGVhZGluZz1oZWFkaW5nO30sZ2V0IGhlYWRpbmcoKXtyZXR1cm4gdGhpcy5oZWFkaW5nXy5oZWFkaW5nO30sc2V0IHRvb2x0aXAodG9vbHRpcCl7dGhpcy5oZWFkaW5nXy50b29sdGlwPXRvb2x0aXA7fSxnZXQgaXRlbXMoKXtyZXR1cm4gdGhpcy5pdGVtc187fSxzZXQgaXRlbXMoaXRlbXMpe3RoaXMuaXRlbXNfPWl0ZW1zO3RoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGdldCBoZWlnaHQoKXtyZXR1cm4gd2luZG93LmdldENvbXB1dGVkU3R5bGUodGhpcykuaGVpZ2h0O30sc2V0IGhlaWdodChoZWlnaHQpe3RoaXMuc3R5bGUuaGVpZ2h0PWhlaWdodDt9LGdldCBkdW1wUmFkaXVzVmlldygpe3JldHVybiA3Kih3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSk7fSxkcmF3KHR5cGUsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe2lmKHRoaXMuaXRlbXNfPT09dW5kZWZpbmVkKXJldHVybjtzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR0VORVJBTF9FVkVOVDp0aGlzLmRyYXdMZXR0ZXJEb3RzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO319LGRyYXdMZXR0ZXJEb3RzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpe2NvbnN0IGN0eD10aGlzLmNvbnRleHQoKTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGJvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGhlaWdodD1ib3VuZHMuaGVpZ2h0KnBpeGVsUmF0aW87Y29uc3QgaGFsZkhlaWdodD1oZWlnaHQqMC41O2NvbnN0IHR3b1BpPU1hdGguUEkqMjtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IGR1bXBSYWRpdXNWaWV3PXRoaXMuZHVtcFJhZGl1c1ZpZXc7Y29uc3QgaXRlbVJhZGl1c1dvcmxkPWR0LnhWaWV3VmVjdG9yVG9Xb3JsZChoZWlnaHQpO2NvbnN0IGl0ZW1zPXRoaXMuaXRlbXNfO2NvbnN0IGxvST10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkoaXRlbXMsZnVuY3Rpb24oaXRlbSl7cmV0dXJuIGl0ZW0uc3RhcnQ7fSx2aWV3TFdvcmxkKTtjb25zdCBvbGRGb250PWN0eC5mb250O2N0eC5mb250PSc0MDAgJytNYXRoLmZsb29yKDkqcGl4ZWxSYXRpbykrJ3B4IEFyaWFsJztjdHguc3Ryb2tlU3R5bGU9J3JnYigwLDAsMCknO2N0eC50ZXh0QmFzZWxpbmU9J21pZGRsZSc7Y3R4LnRleHRBbGlnbj0nY2VudGVyJztjb25zdCBkcmF3SXRlbXM9ZnVuY3Rpb24oc2VsZWN0ZWQpe2ZvcihsZXQgaT1sb0k7aTxpdGVtcy5sZW5ndGg7KytpKXtjb25zdCBpdGVtPWl0ZW1zW2ldO2NvbnN0IHg9aXRlbS5zdGFydDtpZih4LWl0ZW1SYWRpdXNXb3JsZD52aWV3UldvcmxkKWJyZWFrO2lmKGl0ZW0uc2VsZWN0ZWQhPT1zZWxlY3RlZCljb250aW51ZTtjb25zdCB4Vmlldz1kdC54V29ybGRUb1ZpZXcoeCk7Y3R4LmZpbGxTdHlsZT1FdmVudFByZXNlbnRlci5nZXRTZWxlY3RhYmxlSXRlbUNvbG9yQXNTdHJpbmcoaXRlbSk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoeFZpZXcsaGFsZkhlaWdodCxkdW1wUmFkaXVzVmlldyswLjUsMCx0d29QaSk7Y3R4LmZpbGwoKTtpZihpdGVtLnNlbGVjdGVkKXtjdHgubGluZVdpZHRoPTM7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMTAwLDEwMCwwKSc7Y3R4LnN0cm9rZSgpO2N0eC5iZWdpblBhdGgoKTtjdHguYXJjKHhWaWV3LGhhbGZIZWlnaHQsZHVtcFJhZGl1c1ZpZXcsMCx0d29QaSk7Y3R4LmxpbmVXaWR0aD0xLjU7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMjU1LDI1NSwwKSc7Y3R4LnN0cm9rZSgpO31lbHNle2N0eC5saW5lV2lkdGg9MTtjdHguc3Ryb2tlU3R5bGU9J3JnYigwLDAsMCknO2N0eC5zdHJva2UoKTt9CmN0eC5maWxsU3R5bGU9J3JnYigyNTUsIDI1NSwgMjU1KSc7Y3R4LmZpbGxUZXh0KGl0ZW0uZG90TGV0dGVyLHhWaWV3LGhhbGZIZWlnaHQpO319O2RyYXdJdGVtcyhmYWxzZSk7ZHJhd0l0ZW1zKHRydWUpO2N0eC5saW5lV2lkdGg9MTtjdHguZm9udD1vbGRGb250O30sYWRkRXZlbnRzVG9UcmFja01hcChldmVudFRvVHJhY2tNYXApe2lmKHRoaXMuaXRlbXNfPT09dW5kZWZpbmVkKXJldHVybjt0aGlzLml0ZW1zXy5mb3JFYWNoKGZ1bmN0aW9uKGl0ZW0pe2l0ZW0uYWRkVG9UcmFja01hcChldmVudFRvVHJhY2tNYXAsdGhpcyk7fSx0aGlzKTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtpZih0aGlzLml0ZW1zXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaXRlbVJhZGl1c1dvcmxkPXZpZXdQaXhXaWR0aFdvcmxkKnRoaXMuZHVtcFJhZGl1c1ZpZXc7dHIuYi5pdGVyYXRlT3ZlckludGVyc2VjdGluZ0ludGVydmFscyh0aGlzLml0ZW1zXyxmdW5jdGlvbih4KXtyZXR1cm4geC5zdGFydC1pdGVtUmFkaXVzV29ybGQ7fSxmdW5jdGlvbih4KXtyZXR1cm4gMippdGVtUmFkaXVzV29ybGQ7fSxsb1dYLGhpV1gsZnVuY3Rpb24oaXRlbSl7aXRlbS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO30uYmluZCh0aGlzKSk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtpZih0aGlzLml0ZW1zXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaW5kZXg9dGhpcy5pdGVtc18uZmluZEluZGV4KGl0ZW09Pml0ZW0ubW9kZWxJdGVtPT09ZXZlbnQpO2lmKGluZGV4PT09LTEpcmV0dXJuIGZhbHNlO2NvbnN0IG5ld0luZGV4PWluZGV4K29mZnNldDtpZihuZXdJbmRleD49MCYmbmV3SW5kZXg8dGhpcy5pdGVtc18ubGVuZ3RoKXt0aGlzLml0ZW1zX1tuZXdJbmRleF0uYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTtyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbil7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtpZih0aGlzLml0ZW1zXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgaXRlbT10ci5iLmZpbmRDbG9zZXN0RWxlbWVudEluU29ydGVkQXJyYXkodGhpcy5pdGVtc18sZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSx3b3JsZFgsd29ybGRNYXhEaXN0KTtpZighaXRlbSlyZXR1cm47aXRlbS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO319O2Z1bmN0aW9uIExldHRlckRvdChtb2RlbEl0ZW0sZG90TGV0dGVyLGNvbG9ySWQsc3RhcnQpe3RyLm1vZGVsLlByb3h5U2VsZWN0YWJsZUl0ZW0uY2FsbCh0aGlzLG1vZGVsSXRlbSk7dGhpcy5kb3RMZXR0ZXI9ZG90TGV0dGVyO3RoaXMuY29sb3JJZD1jb2xvcklkO3RoaXMuc3RhcnQ9c3RhcnQ7fQpMZXR0ZXJEb3QucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuUHJveHlTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGV9O3JldHVybntMZXR0ZXJEb3RUcmFjayxMZXR0ZXJEb3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBBbGVydFRyYWNrPXRyLnVpLmIuZGVmaW5lKCdhbGVydC10cmFjaycsdHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrKTtBbGVydFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5MZXR0ZXJEb3RUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5MZXR0ZXJEb3RUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt0aGlzLmhlYWRpbmc9J0FsZXJ0cyc7dGhpcy5hbGVydHNfPXVuZGVmaW5lZDt9LGdldCBhbGVydHMoKXtyZXR1cm4gdGhpcy5hbGVydHNfO30sc2V0IGFsZXJ0cyhhbGVydHMpe3RoaXMuYWxlcnRzXz1hbGVydHM7aWYoYWxlcnRzPT09dW5kZWZpbmVkKXt0aGlzLml0ZW1zPXVuZGVmaW5lZDtyZXR1cm47fQp0aGlzLml0ZW1zPXRoaXMuYWxlcnRzXy5tYXAoZnVuY3Rpb24oYWxlcnQpe3JldHVybiBuZXcgdHIudWkudHJhY2tzLkxldHRlckRvdChhbGVydCxTdHJpbmcuZnJvbUNoYXJDb2RlKDk4ODgpLGFsZXJ0LmNvbG9ySWQsYWxlcnQuc3RhcnQpO30pO319O3JldHVybntBbGVydFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgVGFzaz10ci5iLlRhc2s7Y29uc3QgQ29udGFpbmVyVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2NvbnRhaW5lci10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtDb250YWluZXJUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7fSxkZXRhY2goKXtQb2x5bWVyLmRvbSh0aGlzKS50ZXh0Q29udGVudD0nJzt9LGdldCB0cmFja3NfKCl7Y29uc3QgdHJhY2tzPVtdO2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXtpZih0aGlzLmNoaWxkcmVuW2ldaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spe3RyYWNrcy5wdXNoKHRoaXMuY2hpbGRyZW5baV0pO319CnJldHVybiB0cmFja3M7fSxkcmF3VHJhY2sodHlwZSl7dGhpcy50cmFja3NfLmZvckVhY2goZnVuY3Rpb24odHJhY2spe3RyYWNrLmRyYXdUcmFjayh0eXBlKTt9KTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pe2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3NfLmxlbmd0aDtpKyspe2NvbnN0IHRyYWNrQ2xpZW50UmVjdD10aGlzLnRyYWNrc19baV0uZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgYT1NYXRoLm1heChsb1ksdHJhY2tDbGllbnRSZWN0LnRvcCk7Y29uc3QgYj1NYXRoLm1pbihoaVksdHJhY2tDbGllbnRSZWN0LmJvdHRvbSk7aWYoYTw9Yil7dGhpcy50cmFja3NfW2ldLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pO319CnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtmb3IoY29uc3QgdHJhY2sgb2YgdGhpcy50cmFja3NfKXt0cmFjay5hZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCk7fX0sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXtmb3IobGV0IGk9MDtpPHRoaXMudHJhY2tzXy5sZW5ndGg7aSsrKXt0aGlzLnRyYWNrc19baV0uYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKTt9fSxhZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uQXNUYXNrKGZpbHRlcixzZWxlY3Rpb24pe2NvbnN0IHRhc2s9bmV3IFRhc2soKTtmb3IobGV0IGk9MDtpPHRoaXMudHJhY2tzXy5sZW5ndGg7aSsrKXt0YXNrLnN1YlRhc2soZnVuY3Rpb24oaSl7cmV0dXJuIGZ1bmN0aW9uKCl7dGhpcy50cmFja3NfW2ldLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbik7fTt9KGkpLHRoaXMpO30KcmV0dXJuIHRhc2s7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtmb3IobGV0IGk9MDtpPHRoaXMudHJhY2tzXy5sZW5ndGg7aSsrKXtjb25zdCB0cmFja0NsaWVudFJlY3Q9dGhpcy50cmFja3NfW2ldLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGE9TWF0aC5tYXgobG9ZLHRyYWNrQ2xpZW50UmVjdC50b3ApO2NvbnN0IGI9TWF0aC5taW4oaGlZLHRyYWNrQ2xpZW50UmVjdC5ib3R0b20pO2lmKGE8PWIpe3RoaXMudHJhY2tzX1tpXS5hZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKTt9fQp0ci51aS50cmFja3MuVHJhY2sucHJvdG90eXBlLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe3RoaXMudHJhY2tzXy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKXt0cmFjay5hZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKTt9KTt9LGNsZWFyVHJhY2tzXygpe3RoaXMudHJhY2tzXy5mb3JFYWNoKGZ1bmN0aW9uKHRyYWNrKXtQb2x5bWVyLmRvbSh0aGlzKS5yZW1vdmVDaGlsZCh0cmFjayk7fSx0aGlzKTt9fTtyZXR1cm57Q29udGFpbmVyVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtmdW5jdGlvbiBDaGFydFBvaW50KG1vZGVsSXRlbSx4LHksb3B0X3lCYXNlKXt0ci5tb2RlbC5Qcm94eVNlbGVjdGFibGVJdGVtLmNhbGwodGhpcyxtb2RlbEl0ZW0pO3RoaXMueD14O3RoaXMueT15O3RoaXMuZG90TGV0dGVyPXVuZGVmaW5lZDt0aGlzLnlCYXNlPW9wdF95QmFzZTt9CkNoYXJ0UG9pbnQucHJvdG90eXBlPXtfX3Byb3RvX186dHIubW9kZWwuUHJveHlTZWxlY3RhYmxlSXRlbS5wcm90b3R5cGUsfTtyZXR1cm57Q2hhcnRQb2ludCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgRXZlbnRQcmVzZW50ZXI9dHIudWkuYi5FdmVudFByZXNlbnRlcjtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtjb25zdCBDaGFydFNlcmllc1R5cGU9e0xJTkU6MCxBUkVBOjF9O2NvbnN0IERFRkFVTFRfUkVOREVSSU5HX0NPTkZJRz17Y2hhcnRUeXBlOkNoYXJ0U2VyaWVzVHlwZS5MSU5FLHNlbGVjdGVkUG9pbnRTaXplOjQsdW5zZWxlY3RlZFBvaW50U2l6ZTozLHNvbGlkU2VsZWN0ZWREb3RzOmZhbHNlLGNvbG9ySWQ6MCxsaW5lV2lkdGg6MSxza2lwRGlzdGFuY2U6MSx1bnNlbGVjdGVkUG9pbnREZW5zaXR5VHJhbnNwYXJlbnQ6MC4xMCx1bnNlbGVjdGVkUG9pbnREZW5zaXR5T3BhcXVlOjAuMDUsYmFja2dyb3VuZE9wYWNpdHk6MC41LHN0ZXBHcmFwaDp0cnVlfTtjb25zdCBMQVNUX1BPSU5UX1dJRFRIPTE2O2NvbnN0IERPVF9MRVRURVJfUkFESVVTX1BYPTc7Y29uc3QgRE9UX0xFVFRFUl9SQURJVVNfUEFERElOR19QWD0wLjU7Y29uc3QgRE9UX0xFVFRFUl9TRUxFQ1RFRF9PVVRMSU5FX1dJRFRIX1BYPTM7Y29uc3QgRE9UX0xFVFRFUl9TRUxFQ1RFRF9PVVRMSU5FX0RFVEFJTF9XSURUSF9QWD0xLjU7Y29uc3QgRE9UX0xFVFRFUl9VTlNFTEVDVEVEX09VVExJTkVfV0lEVEhfUFg9MTtjb25zdCBET1RfTEVUVEVSX0ZPTlRfV0VJR0hUPTQwMDtjb25zdCBET1RfTEVUVEVSX0ZPTlRfU0laRV9QWD05O2NvbnN0IERPVF9MRVRURVJfRk9OVD0nQXJpYWwnO2NvbnN0IENoYXJ0U2VyaWVzQ29tcG9uZW50PXtCQUNLR1JPVU5EOjAsTElORToxLERPVFM6Mn07ZnVuY3Rpb24gQ2hhcnRTZXJpZXMocG9pbnRzLHNlcmllc1lBeGlzLG9wdF9yZW5kZXJpbmdDb25maWcpe3RoaXMucG9pbnRzPXBvaW50czt0aGlzLnNlcmllc1lBeGlzPXNlcmllc1lBeGlzO3RoaXMudXNlUmVuZGVyaW5nQ29uZmlnXyhvcHRfcmVuZGVyaW5nQ29uZmlnKTt9CkNoYXJ0U2VyaWVzLnByb3RvdHlwZT17dXNlUmVuZGVyaW5nQ29uZmlnXyhvcHRfcmVuZGVyaW5nQ29uZmlnKXtjb25zdCBjb25maWc9b3B0X3JlbmRlcmluZ0NvbmZpZ3x8e307Zm9yKGNvbnN0W2tleSxkZWZhdWx0VmFsdWVdb2YKT2JqZWN0LmVudHJpZXMoREVGQVVMVF9SRU5ERVJJTkdfQ09ORklHKSl7bGV0IHZhbHVlPWNvbmZpZ1trZXldO2lmKHZhbHVlPT09dW5kZWZpbmVkKXt2YWx1ZT1kZWZhdWx0VmFsdWU7fQp0aGlzW2tleSsnXyddPXZhbHVlO30KdGhpcy50b3BQYWRkaW5nPXRoaXMuYm90dG9tUGFkZGluZz1NYXRoLm1heCh0aGlzLnNlbGVjdGVkUG9pbnRTaXplXyx0aGlzLnVuc2VsZWN0ZWRQb2ludFNpemVfKS8yO30sZ2V0IHJhbmdlKCl7Y29uc3QgcmFuZ2U9bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocG9pbnQpe3JhbmdlLmFkZFZhbHVlKHBvaW50LnkpO30sdGhpcyk7cmV0dXJuIHJhbmdlO30sZHJhdyhjdHgsdHJhbnNmb3JtLGhpZ2hEZXRhaWxzKXtpZih0aGlzLnBvaW50cz09PXVuZGVmaW5lZHx8dGhpcy5wb2ludHMubGVuZ3RoPT09MCl7cmV0dXJuO30KaWYodGhpcy5jaGFydFR5cGVfPT09Q2hhcnRTZXJpZXNUeXBlLkFSRUEpe3RoaXMuZHJhd0NvbXBvbmVudF8oY3R4LHRyYW5zZm9ybSxDaGFydFNlcmllc0NvbXBvbmVudC5CQUNLR1JPVU5ELGhpZ2hEZXRhaWxzKTt9CmlmKHRoaXMuY2hhcnRUeXBlXz09PUNoYXJ0U2VyaWVzVHlwZS5MSU5FfHxoaWdoRGV0YWlscyl7dGhpcy5kcmF3Q29tcG9uZW50XyhjdHgsdHJhbnNmb3JtLENoYXJ0U2VyaWVzQ29tcG9uZW50LkxJTkUsaGlnaERldGFpbHMpO30KdGhpcy5kcmF3Q29tcG9uZW50XyhjdHgsdHJhbnNmb3JtLENoYXJ0U2VyaWVzQ29tcG9uZW50LkRPVFMsaGlnaERldGFpbHMpO30sZHJhd0NvbXBvbmVudF8oY3R4LHRyYW5zZm9ybSxjb21wb25lbnQsaGlnaERldGFpbHMpe2xldCBleHRyYVBpeGVscz0wO2lmKGNvbXBvbmVudD09PUNoYXJ0U2VyaWVzQ29tcG9uZW50LkRPVFMpe2V4dHJhUGl4ZWxzPU1hdGgubWF4KHRoaXMuc2VsZWN0ZWRQb2ludFNpemVfLHRoaXMudW5zZWxlY3RlZFBvaW50U2l6ZV8pO30KY29uc3QgcGl4ZWxSYXRpbz10cmFuc2Zvcm0ucGl4ZWxSYXRpbztjb25zdCBsZWZ0Vmlld1g9dHJhbnNmb3JtLmxlZnRWaWV3WC1leHRyYVBpeGVscypwaXhlbFJhdGlvO2NvbnN0IHJpZ2h0Vmlld1g9dHJhbnNmb3JtLnJpZ2h0Vmlld1grZXh0cmFQaXhlbHMqcGl4ZWxSYXRpbztjb25zdCBsZWZ0VGltZXN0YW1wPXRyYW5zZm9ybS5sZWZ0VGltZXN0YW1wLWV4dHJhUGl4ZWxzO2NvbnN0IHJpZ2h0VGltZXN0YW1wPXRyYW5zZm9ybS5yaWdodFRpbWVzdGFtcCtleHRyYVBpeGVscztjb25zdCBmaXJzdFZpc2libGVJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGhpcy5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe3JldHVybiBwb2ludC54O30sbGVmdFRpbWVzdGFtcCk7bGV0IGxhc3RWaXNpYmxlSW5kZXg9dHIuYi5maW5kTG93SW5kZXhJblNvcnRlZEFycmF5KHRoaXMucG9pbnRzLGZ1bmN0aW9uKHBvaW50KXtyZXR1cm4gcG9pbnQueDt9LHJpZ2h0VGltZXN0YW1wKTtpZihsYXN0VmlzaWJsZUluZGV4Pj10aGlzLnBvaW50cy5sZW5ndGh8fHRoaXMucG9pbnRzW2xhc3RWaXNpYmxlSW5kZXhdLng+cmlnaHRUaW1lc3RhbXApe2xhc3RWaXNpYmxlSW5kZXgtLTt9CmNvbnN0IHZpZXdTa2lwRGlzdGFuY2U9dGhpcy5za2lwRGlzdGFuY2VfKnBpeGVsUmF0aW87bGV0IHNlbGVjdGVkQ2lyY2xlUmFkaXVzO2xldCBsZXR0ZXJEb3RSYWRpdXM7bGV0IHNxdWFyZVNpemU7bGV0IHNxdWFyZUhhbGZTaXplO2xldCBzcXVhcmVPcGFjaXR5O2xldCB1bnNlbGVjdGVkU2VyaWVzQ29sb3I7bGV0IGN1cnJlbnRTdGF0ZVNlcmllc0NvbG9yO2N0eC5zYXZlKCk7Y3R4LmZvbnQ9RE9UX0xFVFRFUl9GT05UX1dFSUdIVCsnICcrCk1hdGguZmxvb3IoRE9UX0xFVFRFUl9GT05UX1NJWkVfUFgqcGl4ZWxSYXRpbykrJ3B4ICcrCkRPVF9MRVRURVJfRk9OVDtjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC50ZXh0QWxpZ249J2NlbnRlcic7c3dpdGNoKGNvbXBvbmVudCl7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5ET1RTOntzZWxlY3RlZENpcmNsZVJhZGl1cz0odGhpcy5zZWxlY3RlZFBvaW50U2l6ZV8vMikqcGl4ZWxSYXRpbztsZXR0ZXJEb3RSYWRpdXM9TWF0aC5tYXgoc2VsZWN0ZWRDaXJjbGVSYWRpdXMsRE9UX0xFVFRFUl9SQURJVVNfUFgqcGl4ZWxSYXRpbyk7c3F1YXJlU2l6ZT10aGlzLnVuc2VsZWN0ZWRQb2ludFNpemVfKnBpeGVsUmF0aW87c3F1YXJlSGFsZlNpemU9c3F1YXJlU2l6ZS8yO3Vuc2VsZWN0ZWRTZXJpZXNDb2xvcj1FdmVudFByZXNlbnRlci5nZXRDb3VudGVyU2VyaWVzQ29sb3IodGhpcy5jb2xvcklkXyxTZWxlY3Rpb25TdGF0ZS5OT05FKTtpZighaGlnaERldGFpbHMpe3NxdWFyZU9wYWNpdHk9MDticmVhazt9CmNvbnN0IHZpc2libGVJbmRleFJhbmdlPWxhc3RWaXNpYmxlSW5kZXgtZmlyc3RWaXNpYmxlSW5kZXg7aWYodmlzaWJsZUluZGV4UmFuZ2U8PTApe3NxdWFyZU9wYWNpdHk9MTticmVhazt9CmNvbnN0IHZpc2libGVWaWV3WFJhbmdlPXRyYW5zZm9ybS53b3JsZFhUb1ZpZXdYKHRoaXMucG9pbnRzW2xhc3RWaXNpYmxlSW5kZXhdLngpLQp0cmFuc2Zvcm0ud29ybGRYVG9WaWV3WCh0aGlzLnBvaW50c1tmaXJzdFZpc2libGVJbmRleF0ueCk7aWYodmlzaWJsZVZpZXdYUmFuZ2U9PT0wKXtzcXVhcmVPcGFjaXR5PTE7YnJlYWs7fQpjb25zdCBkZW5zaXR5PXZpc2libGVJbmRleFJhbmdlL3Zpc2libGVWaWV3WFJhbmdlO2NvbnN0IGNsYW1wZWREZW5zaXR5PXRyLmIubWF0aC5jbGFtcChkZW5zaXR5LHRoaXMudW5zZWxlY3RlZFBvaW50RGVuc2l0eU9wYXF1ZV8sdGhpcy51bnNlbGVjdGVkUG9pbnREZW5zaXR5VHJhbnNwYXJlbnRfKTtjb25zdCBkZW5zaXR5UmFuZ2U9dGhpcy51bnNlbGVjdGVkUG9pbnREZW5zaXR5VHJhbnNwYXJlbnRfLQp0aGlzLnVuc2VsZWN0ZWRQb2ludERlbnNpdHlPcGFxdWVfO3NxdWFyZU9wYWNpdHk9KHRoaXMudW5zZWxlY3RlZFBvaW50RGVuc2l0eVRyYW5zcGFyZW50Xy1jbGFtcGVkRGVuc2l0eSkvZGVuc2l0eVJhbmdlO2JyZWFrO30KY2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5MSU5FOmN0eC5zdHJva2VTdHlsZT1FdmVudFByZXNlbnRlci5nZXRDb3VudGVyU2VyaWVzQ29sb3IodGhpcy5jb2xvcklkXyxTZWxlY3Rpb25TdGF0ZS5OT05FKTtjdHgubGluZVdpZHRoPXRoaXMubGluZVdpZHRoXypwaXhlbFJhdGlvO2JyZWFrO2Nhc2UgQ2hhcnRTZXJpZXNDb21wb25lbnQuQkFDS0dST1VORDpicmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb21wb25lbnQ6ICcrY29tcG9uZW50KTt9CmxldCBwcmV2aW91c1ZpZXdYPXVuZGVmaW5lZDtsZXQgcHJldmlvdXNWaWV3WT11bmRlZmluZWQ7bGV0IHByZXZpb3VzVmlld1lCYXNlPXVuZGVmaW5lZDtsZXQgbGFzdFNlbGVjdGlvblN0YXRlPXVuZGVmaW5lZDtsZXQgYmFzZVN0ZXBzPXVuZGVmaW5lZDtjb25zdCBzdGFydEluZGV4PU1hdGgubWF4KGZpcnN0VmlzaWJsZUluZGV4LTEsMCk7bGV0IGN1cnJlbnRWaWV3WDtmb3IobGV0IGk9c3RhcnRJbmRleDtpPHRoaXMucG9pbnRzLmxlbmd0aDtpKyspe2NvbnN0IGN1cnJlbnRQb2ludD10aGlzLnBvaW50c1tpXTtjdXJyZW50Vmlld1g9dHJhbnNmb3JtLndvcmxkWFRvVmlld1goY3VycmVudFBvaW50LngpO2lmKGN1cnJlbnRWaWV3WD5yaWdodFZpZXdYKXtpZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkKXtwcmV2aW91c1ZpZXdYPWN1cnJlbnRWaWV3WD1yaWdodFZpZXdYO2lmKGNvbXBvbmVudD09PUNoYXJ0U2VyaWVzQ29tcG9uZW50LkJBQ0tHUk9VTkR8fGNvbXBvbmVudD09PUNoYXJ0U2VyaWVzQ29tcG9uZW50LkxJTkUpe2N0eC5saW5lVG8oY3VycmVudFZpZXdYLHByZXZpb3VzVmlld1kpO319CmJyZWFrO30KaWYoaSsxPHRoaXMucG9pbnRzLmxlbmd0aCl7Y29uc3QgbmV4dFBvaW50PXRoaXMucG9pbnRzW2krMV07Y29uc3QgbmV4dFZpZXdYPXRyYW5zZm9ybS53b3JsZFhUb1ZpZXdYKG5leHRQb2ludC54KTtpZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkJiZuZXh0Vmlld1gtcHJldmlvdXNWaWV3WDw9dmlld1NraXBEaXN0YW5jZSYmbmV4dFZpZXdYPHJpZ2h0Vmlld1gpe2NvbnRpbnVlO30KaWYoY3VycmVudFZpZXdYPGxlZnRWaWV3WCl7Y3VycmVudFZpZXdYPWxlZnRWaWV3WDt9fQppZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkJiZjdXJyZW50Vmlld1gtcHJldmlvdXNWaWV3WDx2aWV3U2tpcERpc3RhbmNlKXtjdXJyZW50Vmlld1g9cHJldmlvdXNWaWV3WCt2aWV3U2tpcERpc3RhbmNlO30KY29uc3QgY3VycmVudFZpZXdZPU1hdGgucm91bmQodHJhbnNmb3JtLndvcmxkWVRvVmlld1koY3VycmVudFBvaW50LnkpKTtsZXQgY3VycmVudFZpZXdZQmFzZTtpZihjdXJyZW50UG9pbnQueUJhc2U9PT11bmRlZmluZWQpe2N1cnJlbnRWaWV3WUJhc2U9dHJhbnNmb3JtLm91dGVyQm90dG9tVmlld1k7fWVsc2V7Y3VycmVudFZpZXdZQmFzZT1NYXRoLnJvdW5kKHRyYW5zZm9ybS53b3JsZFlUb1ZpZXdZKGN1cnJlbnRQb2ludC55QmFzZSkpO30KY29uc3QgY3VycmVudFNlbGVjdGlvblN0YXRlPWN1cnJlbnRQb2ludC5zZWxlY3Rpb25TdGF0ZTtpZihjdXJyZW50U2VsZWN0aW9uU3RhdGUhPT1sYXN0U2VsZWN0aW9uU3RhdGUpe2NvbnN0IG9wYWNpdHk9Y3VycmVudFNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuU0VMRUNURUQ/MTpzcXVhcmVPcGFjaXR5O2N1cnJlbnRTdGF0ZVNlcmllc0NvbG9yPUV2ZW50UHJlc2VudGVyLmdldENvdW50ZXJTZXJpZXNDb2xvcih0aGlzLmNvbG9ySWRfLGN1cnJlbnRTZWxlY3Rpb25TdGF0ZSxvcGFjaXR5KTt9CnN3aXRjaChjb21wb25lbnQpe2Nhc2UgQ2hhcnRTZXJpZXNDb21wb25lbnQuRE9UUzppZihjdXJyZW50UG9pbnQuZG90TGV0dGVyKXtjdHguZmlsbFN0eWxlPXVuc2VsZWN0ZWRTZXJpZXNDb2xvcjtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygnYmxhY2snKTtjdHguYmVnaW5QYXRoKCk7Y3R4LmFyYyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZLGxldHRlckRvdFJhZGl1cytET1RfTEVUVEVSX1JBRElVU19QQURESU5HX1BYLDAsMipNYXRoLlBJKTtjdHguZmlsbCgpO2lmKGN1cnJlbnRTZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEKXtjdHgubGluZVdpZHRoPURPVF9MRVRURVJfU0VMRUNURURfT1VUTElORV9XSURUSF9QWDtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygnb2xpdmUnKTtjdHguc3Ryb2tlKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5hcmMoY3VycmVudFZpZXdYLGN1cnJlbnRWaWV3WSxsZXR0ZXJEb3RSYWRpdXMsMCwyKk1hdGguUEkpO2N0eC5saW5lV2lkdGg9RE9UX0xFVFRFUl9TRUxFQ1RFRF9PVVRMSU5FX0RFVEFJTF9XSURUSF9QWDtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygneWVsbG93Jyk7Y3R4LnN0cm9rZSgpO31lbHNle2N0eC5saW5lV2lkdGg9RE9UX0xFVFRFUl9VTlNFTEVDVEVEX09VVExJTkVfV0lEVEhfUFg7Y3R4LnN0cm9rZVN0eWxlPUNvbG9yU2NoZW1lLmdldENvbG9yRm9yUmVzZXJ2ZWROYW1lQXNTdHJpbmcoJ2JsYWNrJyk7Y3R4LnN0cm9rZSgpO30KY3R4LmZpbGxTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCd3aGl0ZScpO2N0eC5maWxsVGV4dChjdXJyZW50UG9pbnQuZG90TGV0dGVyLGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO31lbHNle2N0eC5zdHJva2VTdHlsZT11bnNlbGVjdGVkU2VyaWVzQ29sb3I7Y3R4LmxpbmVXaWR0aD1waXhlbFJhdGlvO2lmKGN1cnJlbnRTZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEKXtpZih0aGlzLnNvbGlkU2VsZWN0ZWREb3RzXyl7Y3R4LmZpbGxTdHlsZT1jdHguc3Ryb2tlU3R5bGU7fWVsc2V7Y3R4LmZpbGxTdHlsZT1jdXJyZW50U3RhdGVTZXJpZXNDb2xvcjt9CmN0eC5iZWdpblBhdGgoKTtjdHguYXJjKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1ksc2VsZWN0ZWRDaXJjbGVSYWRpdXMsMCwyKk1hdGguUEkpO2N0eC5maWxsKCk7Y3R4LnN0cm9rZSgpO31lbHNlIGlmKHNxdWFyZU9wYWNpdHk+MCl7Y3R4LmZpbGxTdHlsZT1jdXJyZW50U3RhdGVTZXJpZXNDb2xvcjtjdHguZmlsbFJlY3QoY3VycmVudFZpZXdYLXNxdWFyZUhhbGZTaXplLGN1cnJlbnRWaWV3WS1zcXVhcmVIYWxmU2l6ZSxzcXVhcmVTaXplLHNxdWFyZVNpemUpO319CmJyZWFrO2Nhc2UgQ2hhcnRTZXJpZXNDb21wb25lbnQuTElORTppZihwcmV2aW91c1ZpZXdYPT09dW5kZWZpbmVkKXtjdHguYmVnaW5QYXRoKCk7Y3R4Lm1vdmVUbyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZKTt9ZWxzZSBpZih0aGlzLnN0ZXBHcmFwaF8pe2N0eC5saW5lVG8oY3VycmVudFZpZXdYLHByZXZpb3VzVmlld1kpO30KY3R4LmxpbmVUbyhjdXJyZW50Vmlld1gsY3VycmVudFZpZXdZKTticmVhaztjYXNlIENoYXJ0U2VyaWVzQ29tcG9uZW50LkJBQ0tHUk9VTkQ6aWYocHJldmlvdXNWaWV3WCE9PXVuZGVmaW5lZCYmdGhpcy5zdGVwR3JhcGhfKXtjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxwcmV2aW91c1ZpZXdZKTt9ZWxzZXtjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO30KaWYoY3VycmVudFNlbGVjdGlvblN0YXRlIT09bGFzdFNlbGVjdGlvblN0YXRlKXtpZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkKXtsZXQgcHJldmlvdXNCYXNlU3RlcFZpZXdYPWN1cnJlbnRWaWV3WDtmb3IobGV0IGo9YmFzZVN0ZXBzLmxlbmd0aC0xO2o+PTA7ai0tKXtjb25zdCBiYXNlU3RlcD1iYXNlU3RlcHNbal07Y29uc3QgYmFzZVN0ZXBWaWV3WD1iYXNlU3RlcC52aWV3WDtjb25zdCBiYXNlU3RlcFZpZXdZPWJhc2VTdGVwLnZpZXdZO2N0eC5saW5lVG8ocHJldmlvdXNCYXNlU3RlcFZpZXdYLGJhc2VTdGVwVmlld1kpO2N0eC5saW5lVG8oYmFzZVN0ZXBWaWV3WCxiYXNlU3RlcFZpZXdZKTtwcmV2aW91c0Jhc2VTdGVwVmlld1g9YmFzZVN0ZXBWaWV3WDt9CmN0eC5jbG9zZVBhdGgoKTtjdHguZmlsbCgpO30KY3R4LmJlZ2luUGF0aCgpO2N0eC5maWxsU3R5bGU9RXZlbnRQcmVzZW50ZXIuZ2V0Q291bnRlclNlcmllc0NvbG9yKHRoaXMuY29sb3JJZF8sY3VycmVudFNlbGVjdGlvblN0YXRlLHRoaXMuYmFja2dyb3VuZE9wYWNpdHlfKTtjdHgubW92ZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1lCYXNlKTtiYXNlU3RlcHM9W107fQppZihjdXJyZW50Vmlld1lCYXNlIT09cHJldmlvdXNWaWV3WUJhc2V8fGN1cnJlbnRTZWxlY3Rpb25TdGF0ZSE9PWxhc3RTZWxlY3Rpb25TdGF0ZSl7YmFzZVN0ZXBzLnB1c2goe3ZpZXdYOmN1cnJlbnRWaWV3WCx2aWV3WTpjdXJyZW50Vmlld1lCYXNlfSk7fQpjdHgubGluZVRvKGN1cnJlbnRWaWV3WCxjdXJyZW50Vmlld1kpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCdOb3QgcmVhY2hhYmxlJyk7fQpwcmV2aW91c1ZpZXdYPWN1cnJlbnRWaWV3WDtwcmV2aW91c1ZpZXdZPWN1cnJlbnRWaWV3WTtwcmV2aW91c1ZpZXdZQmFzZT1jdXJyZW50Vmlld1lCYXNlO2xhc3RTZWxlY3Rpb25TdGF0ZT1jdXJyZW50U2VsZWN0aW9uU3RhdGU7fQppZihwcmV2aW91c1ZpZXdYIT09dW5kZWZpbmVkKXtzd2l0Y2goY29tcG9uZW50KXtjYXNlIENoYXJ0U2VyaWVzQ29tcG9uZW50LkRPVFM6YnJlYWs7Y2FzZSBDaGFydFNlcmllc0NvbXBvbmVudC5MSU5FOmN0eC5zdHJva2UoKTticmVhaztjYXNlIENoYXJ0U2VyaWVzQ29tcG9uZW50LkJBQ0tHUk9VTkQ6e2xldCBwcmV2aW91c0Jhc2VTdGVwVmlld1g9Y3VycmVudFZpZXdYO2ZvcihsZXQgaj1iYXNlU3RlcHMubGVuZ3RoLTE7aj49MDtqLS0pe2NvbnN0IGJhc2VTdGVwPWJhc2VTdGVwc1tqXTtjb25zdCBiYXNlU3RlcFZpZXdYPWJhc2VTdGVwLnZpZXdYO2NvbnN0IGJhc2VTdGVwVmlld1k9YmFzZVN0ZXAudmlld1k7Y3R4LmxpbmVUbyhwcmV2aW91c0Jhc2VTdGVwVmlld1gsYmFzZVN0ZXBWaWV3WSk7Y3R4LmxpbmVUbyhiYXNlU3RlcFZpZXdYLGJhc2VTdGVwVmlld1kpO3ByZXZpb3VzQmFzZVN0ZXBWaWV3WD1iYXNlU3RlcFZpZXdYO30KY3R4LmNsb3NlUGF0aCgpO2N0eC5maWxsKCk7YnJlYWs7fQpkZWZhdWx0OnRocm93IG5ldyBFcnJvcignTm90IHJlYWNoYWJsZScpO319CmN0eC5yZXN0b3JlKCk7fSxhZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UobG9XWCxoaVdYLHZpZXdQaXhXaWR0aFdvcmxkLHNlbGVjdGlvbil7Y29uc3QgcG9pbnRzPXRoaXMucG9pbnRzO2Z1bmN0aW9uIGdldFBvaW50V2lkdGgocG9pbnQsaSl7aWYoaT09PXBvaW50cy5sZW5ndGgtMSl7cmV0dXJuIExBU1RfUE9JTlRfV0lEVEgqdmlld1BpeFdpZHRoV29ybGQ7fQpjb25zdCBuZXh0UG9pbnQ9cG9pbnRzW2krMV07cmV0dXJuIG5leHRQb2ludC54LXBvaW50Lng7fQpmdW5jdGlvbiBzZWxlY3RQb2ludChwb2ludCl7cG9pbnQuYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9CnRyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy5wb2ludHMsZnVuY3Rpb24ocG9pbnQpe3JldHVybiBwb2ludC54O30sZ2V0UG9pbnRXaWR0aCxsb1dYLGhpV1gsc2VsZWN0UG9pbnQpO30sYWRkRXZlbnROZWFyVG9Qcm92aWRlZEV2ZW50VG9TZWxlY3Rpb24oZXZlbnQsb2Zmc2V0LHNlbGVjdGlvbil7aWYodGhpcy5wb2ludHM9PT11bmRlZmluZWQpcmV0dXJuIGZhbHNlO2NvbnN0IGluZGV4PXRoaXMucG9pbnRzLmZpbmRJbmRleChwb2ludD0+cG9pbnQubW9kZWxJdGVtPT09ZXZlbnQpO2lmKGluZGV4PT09LTEpcmV0dXJuIGZhbHNlO2NvbnN0IG5ld0luZGV4PWluZGV4K29mZnNldDtpZihuZXdJbmRleDwwfHxuZXdJbmRleD49dGhpcy5wb2ludHMubGVuZ3RoKXJldHVybiBmYWxzZTt0aGlzLnBvaW50c1tuZXdJbmRleF0uYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTtyZXR1cm4gdHJ1ZTt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe2lmKHRoaXMucG9pbnRzPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBpdGVtPXRyLmIuZmluZENsb3Nlc3RFbGVtZW50SW5Tb3J0ZWRBcnJheSh0aGlzLnBvaW50cyxmdW5jdGlvbihwb2ludCl7cmV0dXJuIHBvaW50Lng7fSx3b3JsZFgsd29ybGRNYXhEaXN0KTtpZighaXRlbSlyZXR1cm47aXRlbS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO319O3JldHVybntDaGFydFNlcmllcyxDaGFydFNlcmllc1R5cGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IElERUFMX01BSk9SX01BUktfSEVJR0hUX1BYPTMwO2NvbnN0IEFYSVNfTEFCTEVfTUFSR0lOX1BYPTEwO2NvbnN0IEFYSVNfTEFCTEVfRk9OVF9TSVpFX1BYPTk7Y29uc3QgQVhJU19MQUJMRV9GT05UPSdBcmlhbCc7ZnVuY3Rpb24gQ2hhcnRTZXJpZXNZQXhpcyhvcHRfbWluLG9wdF9tYXgpe3RoaXMuZ3VpZF89dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCk7dGhpcy5ib3VuZHM9bmV3IHRyLmIubWF0aC5SYW5nZSgpO2lmKG9wdF9taW4hPT11bmRlZmluZWQpdGhpcy5ib3VuZHMuYWRkVmFsdWUob3B0X21pbik7aWYob3B0X21heCE9PXVuZGVmaW5lZCl0aGlzLmJvdW5kcy5hZGRWYWx1ZShvcHRfbWF4KTt9CkNoYXJ0U2VyaWVzWUF4aXMucHJvdG90eXBlPXtnZXQgZ3VpZCgpe3JldHVybiB0aGlzLmd1aWRfO30sdmFsdWVUb1VuaXRSYW5nZSh2YWx1ZSl7aWYodGhpcy5ib3VuZHMuaXNFbXB0eSl7dGhyb3cgbmV3IEVycm9yKCdDaGFydCBzZXJpZXMgeS1heGlzIGJvdW5kcyBhcmUgZW1wdHknKTt9CmNvbnN0IGJvdW5kcz10aGlzLmJvdW5kcztpZihib3VuZHMucmFuZ2U9PT0wKXJldHVybiAwO3JldHVybih2YWx1ZS1ib3VuZHMubWluKS9ib3VuZHMucmFuZ2U7fSx1bml0UmFuZ2VUb1ZhbHVlKHVuaXRSYW5nZSl7aWYodGhpcy5ib3VuZHMuaXNFbXB0eSl7dGhyb3cgbmV3IEVycm9yKCdDaGFydCBzZXJpZXMgeS1heGlzIGJvdW5kcyBhcmUgZW1wdHknKTt9CnJldHVybiB1bml0UmFuZ2UqdGhpcy5ib3VuZHMucmFuZ2UrdGhpcy5ib3VuZHMubWluO30sYXV0b1NldEZyb21TZXJpZXMoc2VyaWVzLG9wdF9jb25maWcpe2NvbnN0IHJhbmdlPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtzZXJpZXMuZm9yRWFjaChmdW5jdGlvbihzKXtyYW5nZS5hZGRSYW5nZShzLnJhbmdlKTt9LHRoaXMpO3RoaXMuYXV0b1NldEZyb21SYW5nZShyYW5nZSxvcHRfY29uZmlnKTt9LGF1dG9TZXRGcm9tUmFuZ2UocmFuZ2Usb3B0X2NvbmZpZyl7aWYocmFuZ2UuaXNFbXB0eSlyZXR1cm47Y29uc3QgYm91bmRzPXRoaXMuYm91bmRzO2lmKGJvdW5kcy5pc0VtcHR5KXtib3VuZHMuYWRkUmFuZ2UocmFuZ2UpO3JldHVybjt9CmlmKCFvcHRfY29uZmlnKXJldHVybjtjb25zdCB1c2VSYW5nZU1pbj0ob3B0X2NvbmZpZy5leHBhbmRNaW4mJnJhbmdlLm1pbjxib3VuZHMubWlufHxvcHRfY29uZmlnLnNocmlua01pbiYmcmFuZ2UubWluPmJvdW5kcy5taW4pO2NvbnN0IHVzZVJhbmdlTWF4PShvcHRfY29uZmlnLmV4cGFuZE1heCYmcmFuZ2UubWF4PmJvdW5kcy5tYXh8fG9wdF9jb25maWcuc2hyaW5rTWF4JiZyYW5nZS5tYXg8Ym91bmRzLm1heCk7aWYoIXVzZVJhbmdlTWluJiYhdXNlUmFuZ2VNYXgpcmV0dXJuO2lmKHVzZVJhbmdlTWluJiZ1c2VSYW5nZU1heCl7Ym91bmRzLm1pbj1yYW5nZS5taW47Ym91bmRzLm1heD1yYW5nZS5tYXg7cmV0dXJuO30KaWYodXNlUmFuZ2VNaW4pe2JvdW5kcy5taW49TWF0aC5taW4ocmFuZ2UubWluLGJvdW5kcy5tYXgpO31lbHNle2JvdW5kcy5tYXg9TWF0aC5tYXgocmFuZ2UubWF4LGJvdW5kcy5taW4pO319LG1ham9yTWFya0hlaWdodFdvcmxkXyh0cmFuc2Zvcm0scGl4ZWxSYXRpbyl7Y29uc3QgaWRlYWxNYWpvck1hcmtIZWlnaHRQeD1JREVBTF9NQUpPUl9NQVJLX0hFSUdIVF9QWCpwaXhlbFJhdGlvO2NvbnN0IGlkZWFsTWFqb3JNYXJrSGVpZ2h0V29ybGQ9dHJhbnNmb3JtLnZlY3RvclRvV29ybGREaXN0YW5jZShpZGVhbE1ham9yTWFya0hlaWdodFB4KTtyZXR1cm4gdHIuYi5tYXRoLnByZWZlcnJlZE51bWJlckxhcmdlclRoYW5NaW4oaWRlYWxNYWpvck1hcmtIZWlnaHRXb3JsZCk7fSxkcmF3KGN0eCx0cmFuc2Zvcm0sc2hvd1lBeGlzTGFiZWxzLHNob3dZR3JpZExpbmVzKXtpZighc2hvd1lBeGlzTGFiZWxzJiYhc2hvd1lHcmlkTGluZXMpcmV0dXJuO2NvbnN0IHBpeGVsUmF0aW89dHJhbnNmb3JtLnBpeGVsUmF0aW87Y29uc3Qgdmlld1RvcD10cmFuc2Zvcm0ub3V0ZXJUb3BWaWV3WTtjb25zdCB3b3JsZFRvcD10cmFuc2Zvcm0udmlld1lUb1dvcmxkWSh2aWV3VG9wKTtjb25zdCB2aWV3Qm90dG9tPXRyYW5zZm9ybS5vdXRlckJvdHRvbVZpZXdZO2NvbnN0IHZpZXdIZWlnaHQ9dmlld0JvdHRvbS12aWV3VG9wO2NvbnN0IHZpZXdMZWZ0PXRyYW5zZm9ybS5sZWZ0Vmlld1g7Y29uc3Qgdmlld1JpZ2h0PXRyYW5zZm9ybS5yaWdodFZpZXdYO2NvbnN0IGxhYmVsTGVmdD10cmFuc2Zvcm0ubGVmdFlMYWJlbDtjdHguc2F2ZSgpO2N0eC5saW5lV2lkdGg9cGl4ZWxSYXRpbztjdHguZmlsbFN0eWxlPUNvbG9yU2NoZW1lLmdldENvbG9yRm9yUmVzZXJ2ZWROYW1lQXNTdHJpbmcoJ2JsYWNrJyk7Y3R4LnRleHRBbGlnbj0nbGVmdCc7Y3R4LnRleHRCYXNlbGluZT0nY2VudGVyJztjdHguZm9udD0oQVhJU19MQUJMRV9GT05UX1NJWkVfUFgqcGl4ZWxSYXRpbykrJ3B4ICcrQVhJU19MQUJMRV9GT05UO2N0eC5iZWdpblBhdGgoKTtjdHguc3Ryb2tlU3R5bGU9Q29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygnYmxhY2snKTt0ci51aS5iLmRyYXdMaW5lKGN0eCx2aWV3TGVmdCx2aWV3VG9wLHZpZXdMZWZ0LHZpZXdCb3R0b20sdmlld0xlZnQpO2N0eC5zdHJva2UoKTtjdHguY2xvc2VQYXRoKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5zdHJva2VTdHlsZT1Db2xvclNjaGVtZS5nZXRDb2xvckZvclJlc2VydmVkTmFtZUFzU3RyaW5nKCdncmV5Jyk7Y29uc3QgbWFqb3JNYXJrSGVpZ2h0PXRoaXMubWFqb3JNYXJrSGVpZ2h0V29ybGRfKHRyYW5zZm9ybSxwaXhlbFJhdGlvKTtjb25zdCBtYXhNYWpvck1hcms9TWF0aC5tYXgodHJhbnNmb3JtLnZpZXdZVG9Xb3JsZFkodmlld1RvcCksTWF0aC5hYnModHJhbnNmb3JtLnZpZXdZVG9Xb3JsZFkodmlld0JvdHRvbSkpKTtmb3IobGV0IGN1cldvcmxkWT0wO2N1cldvcmxkWTw9bWF4TWFqb3JNYXJrO2N1cldvcmxkWSs9bWFqb3JNYXJrSGVpZ2h0KXtjb25zdCByb3VuZGVkVW5pdFZhbHVlPU1hdGguZmxvb3IoY3VyV29ybGRZKjEwMDAwMDApLzEwMDAwMDA7Y29uc3QgY3VyVmlld1lQb3NpdGl2ZT10cmFuc2Zvcm0ud29ybGRZVG9WaWV3WShjdXJXb3JsZFkpO2lmKGN1clZpZXdZUG9zaXRpdmU+PXZpZXdUb3Ape2lmKHNob3dZQXhpc0xhYmVscyl7Y3R4LmZpbGxUZXh0KHJvdW5kZWRVbml0VmFsdWUsdmlld0xlZnQrQVhJU19MQUJMRV9NQVJHSU5fUFgsY3VyVmlld1lQb3NpdGl2ZS1BWElTX0xBQkxFX01BUkdJTl9QWCk7fQppZihzaG93WUdyaWRMaW5lcyl7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld0xlZnQsY3VyVmlld1lQb3NpdGl2ZSx2aWV3UmlnaHQsY3VyVmlld1lQb3NpdGl2ZSk7fX0KY29uc3QgY3VyVmlld1lOZWdhdGl2ZT10cmFuc2Zvcm0ud29ybGRZVG9WaWV3WSgtMSpjdXJXb3JsZFkpO2lmKGN1clZpZXdZTmVnYXRpdmU8PXZpZXdCb3R0b20pe2lmKHNob3dZQXhpc0xhYmVscyl7Y3R4LmZpbGxUZXh0KHJvdW5kZWRVbml0VmFsdWUsdmlld0xlZnQrQVhJU19MQUJMRV9NQVJHSU5fUFgsY3VyVmlld1lOZWdhdGl2ZS1BWElTX0xBQkxFX01BUkdJTl9QWCk7fQppZihzaG93WUdyaWRMaW5lcyl7dHIudWkuYi5kcmF3TGluZShjdHgsdmlld0xlZnQsY3VyVmlld1lOZWdhdGl2ZSx2aWV3UmlnaHQsY3VyVmlld1lOZWdhdGl2ZSk7fX19CmN0eC5zdHJva2UoKTtjdHgucmVzdG9yZSgpO319O3JldHVybntDaGFydFNlcmllc1lBeGlzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gQ2hhcnRUcmFuc2Zvcm0oZGlzcGxheVRyYW5zZm9ybSxheGlzLHRyYWNrV2lkdGgsdHJhY2tIZWlnaHQsdG9wUGFkZGluZyxib3R0b21QYWRkaW5nLHBpeGVsUmF0aW8pe3RoaXMucGl4ZWxSYXRpbz1waXhlbFJhdGlvO3RoaXMubGVmdFZpZXdYPTA7dGhpcy5yaWdodFZpZXdYPXRyYWNrV2lkdGg7dGhpcy5sZWZ0VGltZXN0YW1wPWRpc3BsYXlUcmFuc2Zvcm0ueFZpZXdUb1dvcmxkKHRoaXMubGVmdFZpZXdYKTt0aGlzLnJpZ2h0VGltZXN0YW1wPWRpc3BsYXlUcmFuc2Zvcm0ueFZpZXdUb1dvcmxkKHRoaXMucmlnaHRWaWV3WCk7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXz1kaXNwbGF5VHJhbnNmb3JtO3RoaXMub3V0ZXJUb3BWaWV3WT0wO3RoaXMuaW5uZXJUb3BWaWV3WT10b3BQYWRkaW5nO3RoaXMuaW5uZXJCb3R0b21WaWV3WT10cmFja0hlaWdodC1ib3R0b21QYWRkaW5nO3RoaXMub3V0ZXJCb3R0b21WaWV3WT10cmFja0hlaWdodDt0aGlzLmF4aXNfPWF4aXM7dGhpcy5pbm5lckhlaWdodF89dGhpcy5pbm5lckJvdHRvbVZpZXdZLXRoaXMuaW5uZXJUb3BWaWV3WTt9CkNoYXJ0VHJhbnNmb3JtLnByb3RvdHlwZT17d29ybGRYVG9WaWV3WCh3b3JsZFgpe3JldHVybiB0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhXb3JsZFRvVmlldyh3b3JsZFgpO30sdmlld1hUb1dvcmxkWCh2aWV3WCl7cmV0dXJuIHRoaXMuZGlzcGxheVRyYW5zZm9ybV8ueFZpZXdUb1dvcmxkKHZpZXdYKTt9LHZlY3RvclRvV29ybGREaXN0YW5jZSh2aWV3WSl7cmV0dXJuIHRoaXMuYXhpc18uYm91bmRzLnJhbmdlKk1hdGguYWJzKHZpZXdZL3RoaXMuaW5uZXJIZWlnaHRfKTt9LHZpZXdZVG9Xb3JsZFkodmlld1kpe3JldHVybiB0aGlzLmF4aXNfLnVuaXRSYW5nZVRvVmFsdWUoMS0odmlld1ktdGhpcy5pbm5lclRvcFZpZXdZKS90aGlzLmlubmVySGVpZ2h0Xyk7fSx3b3JsZFlUb1ZpZXdZKHdvcmxkWSl7Y29uc3QgaW5uZXJIZWlnaHRDb2VmZmljaWVudD0xLXRoaXMuYXhpc18udmFsdWVUb1VuaXRSYW5nZSh3b3JsZFkpO3JldHVybiBpbm5lckhlaWdodENvZWZmaWNpZW50KnRoaXMuaW5uZXJIZWlnaHRfK3RoaXMuaW5uZXJUb3BWaWV3WTt9fTtyZXR1cm57Q2hhcnRUcmFuc2Zvcm0sfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDaGFydFRyYWNrPXRyLnVpLmIuZGVmaW5lKCdjaGFydC10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtDaGFydFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjaGFydC10cmFjaycpO3RoaXMuc2VyaWVzXz11bmRlZmluZWQ7dGhpcy5heGVzXz11bmRlZmluZWQ7dGhpcy5heGlzR3VpZFRvQXhpc0RhdGFfPXVuZGVmaW5lZDt0aGlzLnRvcFBhZGRpbmdfPXVuZGVmaW5lZDt0aGlzLmJvdHRvbVBhZGRpbmdfPXVuZGVmaW5lZDt0aGlzLnNob3dZQXhpc0xhYmVsc189dW5kZWZpbmVkO3RoaXMuc2hvd0dyaWRMaW5lc189dW5kZWZpbmVkO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sZ2V0IHNlcmllcygpe3JldHVybiB0aGlzLnNlcmllc187fSxzZXQgc2VyaWVzKHNlcmllcyl7dGhpcy5zZXJpZXNfPXNlcmllczt0aGlzLmNhbGN1bGF0ZUF4aXNEYXRhQW5kUGFkZGluZ18oKTt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7dGhpcy5pbnZhbGlkYXRlRHJhd2luZ0NvbnRhaW5lcigpO30sZ2V0IHNob3dZQXhpc0xhYmVscygpe3JldHVybiB0aGlzLnNob3dZQXhpc0xhYmVsc187fSxzZXQgc2hvd1lBeGlzTGFiZWxzKHNob3dZQXhpc0xhYmVscyl7dGhpcy5zaG93WUF4aXNMYWJlbHNfPXNob3dZQXhpc0xhYmVsczt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgc2hvd0dyaWRMaW5lcygpe3JldHVybiB0aGlzLnNob3dHcmlkTGluZXNfO30sc2V0IHNob3dHcmlkTGluZXMoc2hvd0dyaWRMaW5lcyl7dGhpcy5zaG93R3JpZExpbmVzXz1zaG93R3JpZExpbmVzO3RoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybiEhdGhpcy5zZXJpZXMmJnRoaXMuc2VyaWVzLmxlbmd0aD4wO30sY2FsY3VsYXRlQXhpc0RhdGFBbmRQYWRkaW5nXygpe2lmKCF0aGlzLnNlcmllc18pe3RoaXMuYXhlc189dW5kZWZpbmVkO3RoaXMuYXhpc0d1aWRUb0F4aXNEYXRhXz11bmRlZmluZWQ7dGhpcy50b3BQYWRkaW5nXz11bmRlZmluZWQ7dGhpcy5ib3R0b21QYWRkaW5nXz11bmRlZmluZWQ7cmV0dXJuO30KY29uc3QgYXhpc0d1aWRUb0F4aXNEYXRhPXt9O2xldCB0b3BQYWRkaW5nPTA7bGV0IGJvdHRvbVBhZGRpbmc9MDt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe2NvbnN0IHNlcmllc1lBeGlzPXNlcmllcy5zZXJpZXNZQXhpcztjb25zdCBheGlzR3VpZD1zZXJpZXNZQXhpcy5ndWlkO2lmKCEoYXhpc0d1aWQgaW4gYXhpc0d1aWRUb0F4aXNEYXRhKSl7YXhpc0d1aWRUb0F4aXNEYXRhW2F4aXNHdWlkXT17YXhpczpzZXJpZXNZQXhpcyxzZXJpZXM6W119O2lmKCF0aGlzLmF4ZXNfKXRoaXMuYXhlc189W107dGhpcy5heGVzXy5wdXNoKHNlcmllc1lBeGlzKTt9CmF4aXNHdWlkVG9BeGlzRGF0YVtheGlzR3VpZF0uc2VyaWVzLnB1c2goc2VyaWVzKTt0b3BQYWRkaW5nPU1hdGgubWF4KHRvcFBhZGRpbmcsc2VyaWVzLnRvcFBhZGRpbmcpO2JvdHRvbVBhZGRpbmc9TWF0aC5tYXgoYm90dG9tUGFkZGluZyxzZXJpZXMuYm90dG9tUGFkZGluZyk7fSx0aGlzKTt0aGlzLmF4aXNHdWlkVG9BeGlzRGF0YV89YXhpc0d1aWRUb0F4aXNEYXRhO3RoaXMudG9wUGFkZGluZ189dG9wUGFkZGluZzt0aGlzLmJvdHRvbVBhZGRpbmdfPWJvdHRvbVBhZGRpbmc7fSxkcmF3KHR5cGUsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpe3N3aXRjaCh0eXBlKXtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5HRU5FUkFMX0VWRU5UOnRoaXMuZHJhd0NoYXJ0Xyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpO2JyZWFrO319LGRyYXdDaGFydF8odmlld0xXb3JsZCx2aWV3UldvcmxkKXtpZighdGhpcy5zZXJpZXNfKXJldHVybjtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgZGlzcGxheVRyYW5zZm9ybT10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgaGlnaERldGFpbHM9dGhpcy52aWV3cG9ydC5oaWdoRGV0YWlscztjb25zdCB3aWR0aD1ib3VuZHMud2lkdGgqcGl4ZWxSYXRpbztjb25zdCBoZWlnaHQ9Ym91bmRzLmhlaWdodCpwaXhlbFJhdGlvO2NvbnN0IHRvcFBhZGRpbmc9dGhpcy50b3BQYWRkaW5nXypwaXhlbFJhdGlvO2NvbnN0IGJvdHRvbVBhZGRpbmc9dGhpcy5ib3R0b21QYWRkaW5nXypwaXhlbFJhdGlvO2N0eC5zYXZlKCk7Y3R4LmJlZ2luUGF0aCgpO2N0eC5yZWN0KDAsMCx3aWR0aCxoZWlnaHQpO2N0eC5jbGlwKCk7aWYodGhpcy5heGVzXyl7aWYoKHRoaXMuc2hvd0dyaWRMaW5lc198fHRoaXMuc2hvd1lBeGlzTGFiZWxzXykmJnRoaXMuYXhlc18ubGVuZ3RoPjEpe3Rocm93IG5ldyBFcnJvcignT25seSBvbmUgYXhpcyBhbGxvd2VkIHdoZW4gc2hvd2luZyBncmlkIGxpbmVzLicpO30KZm9yKGNvbnN0IHlBeGlzIG9mIHRoaXMuYXhlc18pe2NvbnN0IGNoYXJ0VHJhbnNmb3JtPW5ldyB0ci51aS50cmFja3MuQ2hhcnRUcmFuc2Zvcm0oZGlzcGxheVRyYW5zZm9ybSx5QXhpcyx3aWR0aCxoZWlnaHQsdG9wUGFkZGluZyxib3R0b21QYWRkaW5nLHBpeGVsUmF0aW8pO3lBeGlzLmRyYXcoY3R4LGNoYXJ0VHJhbnNmb3JtLHRoaXMuc2hvd1lBeGlzTGFiZWxzXyx0aGlzLnNob3dHcmlkTGluZXNfKTt9fQpmb3IoY29uc3Qgc2VyaWVzIG9mIHRoaXMuc2VyaWVzKXtjb25zdCBjaGFydFRyYW5zZm9ybT1uZXcgdHIudWkudHJhY2tzLkNoYXJ0VHJhbnNmb3JtKGRpc3BsYXlUcmFuc2Zvcm0sc2VyaWVzLnNlcmllc1lBeGlzLHdpZHRoLGhlaWdodCx0b3BQYWRkaW5nLGJvdHRvbVBhZGRpbmcscGl4ZWxSYXRpbyk7c2VyaWVzLmRyYXcoY3R4LGNoYXJ0VHJhbnNmb3JtLGhpZ2hEZXRhaWxzKTt9CmN0eC5yZXN0b3JlKCk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7dGhpcy5zZXJpZXNfLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtzZXJpZXMucG9pbnRzLmZvckVhY2goZnVuY3Rpb24ocG9pbnQpe3BvaW50LmFkZFRvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwLHRoaXMpO30sdGhpcyk7fSx0aGlzKTt9LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXt0aGlzLnNlcmllc18uZm9yRWFjaChmdW5jdGlvbihzZXJpZXMpe3Nlcmllcy5hZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UobG9XWCxoaVdYLHZpZXdQaXhXaWR0aFdvcmxkLHNlbGVjdGlvbik7fSx0aGlzKTt9LGFkZEV2ZW50TmVhclRvUHJvdmlkZWRFdmVudFRvU2VsZWN0aW9uKGV2ZW50LG9mZnNldCxzZWxlY3Rpb24pe2xldCBmb3VuZEl0ZW09ZmFsc2U7dGhpcy5zZXJpZXNfLmZvckVhY2goZnVuY3Rpb24oc2VyaWVzKXtmb3VuZEl0ZW09Zm91bmRJdGVtfHxzZXJpZXMuYWRkRXZlbnROZWFyVG9Qcm92aWRlZEV2ZW50VG9TZWxlY3Rpb24oZXZlbnQsb2Zmc2V0LHNlbGVjdGlvbik7fSx0aGlzKTtyZXR1cm4gZm91bmRJdGVtO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXt9LGFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pe3RoaXMuc2VyaWVzXy5mb3JFYWNoKGZ1bmN0aW9uKHNlcmllcyl7c2VyaWVzLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uKHdvcmxkWCx3b3JsZE1heERpc3QsbG9ZLGhpWSxzZWxlY3Rpb24pO30sdGhpcyk7fSxhdXRvU2V0QWxsQXhlcyhvcHRfY29uZmlnKXtmb3IoY29uc3QgYXhpc0RhdGEgb2YgT2JqZWN0LnZhbHVlcyh0aGlzLmF4aXNHdWlkVG9BeGlzRGF0YV8pKXtjb25zdCBzZXJpZXNZQXhpcz1heGlzRGF0YS5heGlzO2NvbnN0IHNlcmllcz1heGlzRGF0YS5zZXJpZXM7c2VyaWVzWUF4aXMuYXV0b1NldEZyb21TZXJpZXMoc2VyaWVzLG9wdF9jb25maWcpO319LGF1dG9TZXRBeGlzKHNlcmllc1lBeGlzLG9wdF9jb25maWcpe2NvbnN0IHNlcmllcz10aGlzLmF4aXNHdWlkVG9BeGlzRGF0YV9bc2VyaWVzWUF4aXMuZ3VpZF0uc2VyaWVzO3Nlcmllc1lBeGlzLmF1dG9TZXRGcm9tU2VyaWVzKHNlcmllcyxvcHRfY29uZmlnKTt9fTtyZXR1cm57Q2hhcnRUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgQ2hhcnRUcmFjaz10ci51aS50cmFja3MuQ2hhcnRUcmFjaztjb25zdCBDcHVVc2FnZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdjcHUtdXNhZ2UtdHJhY2snLENoYXJ0VHJhY2spO0NwdVVzYWdlVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186Q2hhcnRUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0NoYXJ0VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5jbGFzc0xpc3QuYWRkKCdjcHUtdXNhZ2UtdHJhY2snKTt0aGlzLmhlYWRpbmc9J0NQVSB1c2FnZSc7dGhpcy5jcHVVc2FnZVNlcmllc189dW5kZWZpbmVkO30saW5pdGlhbGl6ZShtb2RlbCl7aWYobW9kZWwhPT11bmRlZmluZWQpe3RoaXMuY3B1VXNhZ2VTZXJpZXNfPW1vZGVsLmRldmljZS5jcHVVc2FnZVNlcmllczt9ZWxzZXt0aGlzLmNwdVVzYWdlU2VyaWVzXz11bmRlZmluZWQ7fQp0aGlzLnNlcmllcz10aGlzLmJ1aWxkQ2hhcnRTZXJpZXNfKCk7dGhpcy5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybiEhdGhpcy5jcHVVc2FnZVNlcmllc18mJnRoaXMuY3B1VXNhZ2VTZXJpZXNfLnNhbXBsZXMubGVuZ3RoPjA7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXtjb250YWluZXJUb1RyYWNrTWFwLmFkZENvbnRhaW5lcih0aGlzLnNlcmllc18sdGhpcyk7fSxidWlsZENoYXJ0U2VyaWVzXyh5QXhpcyxjb2xvcil7aWYoIXRoaXMuaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuW107eUF4aXM9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1lBeGlzKDAsdW5kZWZpbmVkKTtjb25zdCB1c2FnZVNhbXBsZXM9dGhpcy5jcHVVc2FnZVNlcmllc18uc2FtcGxlcztjb25zdCBwdHM9bmV3IEFycmF5KHVzYWdlU2FtcGxlcy5sZW5ndGgrMSk7Zm9yKGxldCBpPTA7aTx1c2FnZVNhbXBsZXMubGVuZ3RoO2krKyl7cHRzW2ldPW5ldyB0ci51aS50cmFja3MuQ2hhcnRQb2ludCh1bmRlZmluZWQsdXNhZ2VTYW1wbGVzW2ldLnN0YXJ0LHVzYWdlU2FtcGxlc1tpXS51c2FnZSk7fQpwdHNbdXNhZ2VTYW1wbGVzLmxlbmd0aF09bmV3IHRyLnVpLnRyYWNrcy5DaGFydFBvaW50KHVuZGVmaW5lZCx1c2FnZVNhbXBsZXNbdXNhZ2VTYW1wbGVzLmxlbmd0aC0xXS5zdGFydCwwKTtjb25zdCByZW5kZXJpbmdDb25maWc9e2NoYXJ0VHlwZTp0ci51aS50cmFja3MuQ2hhcnRTZXJpZXNUeXBlLkFSRUEsY29sb3JJZDpjb2xvcn07cmV0dXJuW25ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXMocHRzLHlBeGlzLHJlbmRlcmluZ0NvbmZpZyldO30sfTtyZXR1cm57Q3B1VXNhZ2VUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgQ2hhcnRUcmFjaz10ci51aS50cmFja3MuQ2hhcnRUcmFjaztjb25zdCBQb3dlclNlcmllc1RyYWNrPXRyLnVpLmIuZGVmaW5lKCdwb3dlci1zZXJpZXMtdHJhY2snLENoYXJ0VHJhY2spO1Bvd2VyU2VyaWVzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186Q2hhcnRUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0NoYXJ0VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgncG93ZXItc2VyaWVzLXRyYWNrJyk7dGhpcy5oZWFkaW5nPSdQb3dlcic7dGhpcy5wb3dlclNlcmllc189dW5kZWZpbmVkO30sc2V0IHBvd2VyU2VyaWVzKHBvd2VyU2VyaWVzKXt0aGlzLnBvd2VyU2VyaWVzXz1wb3dlclNlcmllczt0aGlzLnNlcmllcz10aGlzLmJ1aWxkQ2hhcnRTZXJpZXNfKCk7dGhpcy5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybih0aGlzLnBvd2VyU2VyaWVzXyYmdGhpcy5wb3dlclNlcmllc18uc2FtcGxlcy5sZW5ndGg+MCk7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXtjb250YWluZXJUb1RyYWNrTWFwLmFkZENvbnRhaW5lcih0aGlzLnBvd2VyU2VyaWVzXyx0aGlzKTt9LGJ1aWxkQ2hhcnRTZXJpZXNfKCl7aWYoIXRoaXMuaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuW107Y29uc3Qgc2VyaWVzWUF4aXM9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1lBeGlzKDAsdW5kZWZpbmVkKTtjb25zdCBwdHM9dGhpcy5wb3dlclNlcmllc18uc2FtcGxlcy5tYXAoZnVuY3Rpb24oc21wbCl7cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRQb2ludChzbXBsLHNtcGwuc3RhcnQsc21wbC5wb3dlckluVyk7fSk7Y29uc3QgcmVuZGVyaW5nQ29uZmlnPXtjaGFydFR5cGU6dHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzVHlwZS5BUkVBLGNvbG9ySWQ6Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKHRoaXMuaGVhZGluZyl9O3JldHVybltuZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzKHB0cyxzZXJpZXNZQXhpcyxyZW5kZXJpbmdDb25maWcpXTt9fTtyZXR1cm57UG93ZXJTZXJpZXNUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFNwYWNpbmdUcmFjaz10ci51aS5iLmRlZmluZSgnc3BhY2luZy10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtTcGFjaW5nVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3NwYWNpbmctdHJhY2snKTt0aGlzLmhlYWRpbmdfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaGVhZGluZycpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaGVhZGluZ18pO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXt9fTtyZXR1cm57U3BhY2luZ1RyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29udGFpbmVyVHJhY2s9dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrO2NvbnN0IERldmljZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdkZXZpY2UtdHJhY2snLENvbnRhaW5lclRyYWNrKTtEZXZpY2VUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzpDb250YWluZXJUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0NvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2RldmljZS10cmFjaycpO3RoaXMuZGV2aWNlXz11bmRlZmluZWQ7dGhpcy5wb3dlclNlcmllc1RyYWNrXz11bmRlZmluZWQ7fSxnZXQgZGV2aWNlKCl7cmV0dXJuIHRoaXMuZGV2aWNlXzt9LHNldCBkZXZpY2UoZGV2aWNlKXt0aGlzLmRldmljZV89ZGV2aWNlO3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgcG93ZXJTZXJpZXNUcmFjaygpe3JldHVybiB0aGlzLnBvd2VyU2VyaWVzVHJhY2tfO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuKHRoaXMucG93ZXJTZXJpZXNUcmFja18mJnRoaXMucG93ZXJTZXJpZXNUcmFja18uaGFzVmlzaWJsZUNvbnRlbnQpO30sYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAoY29udGFpbmVyVG9UcmFja01hcCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5jYWxsKHRoaXMsY29udGFpbmVyVG9UcmFja01hcCk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy5kZXZpY2UsdGhpcyk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7dGhpcy50cmFja3NfLmZvckVhY2goZnVuY3Rpb24odHJhY2spe3RyYWNrLmFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKTt9KTt9LGFwcGVuZFBvd2VyU2VyaWVzVHJhY2tfKCl7dGhpcy5wb3dlclNlcmllc1RyYWNrXz1uZXcgdHIudWkudHJhY2tzLlBvd2VyU2VyaWVzVHJhY2sodGhpcy52aWV3cG9ydCk7dGhpcy5wb3dlclNlcmllc1RyYWNrXy5wb3dlclNlcmllcz10aGlzLmRldmljZS5wb3dlclNlcmllcztpZih0aGlzLnBvd2VyU2VyaWVzVHJhY2tfLmhhc1Zpc2libGVDb250ZW50KXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLnBvd2VyU2VyaWVzVHJhY2tfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChuZXcgdHIudWkudHJhY2tzLlNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fX0sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhclRyYWNrc18oKTt0aGlzLmFwcGVuZFBvd2VyU2VyaWVzVHJhY2tfKCk7fX07cmV0dXJue0RldmljZVRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ29sb3JTY2hlbWU9dHIuYi5Db2xvclNjaGVtZTtjb25zdCBESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU9dHIubW9kZWwuTWVtb3J5QWxsb2NhdG9yRHVtcC5ESVNQTEFZRURfU0laRV9OVU1FUklDX05BTUU7Y29uc3QgQkFDS0dST1VORD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuQkFDS0dST1VORDtjb25zdCBMSUdIVD10ci5tb2RlbC5Db250YWluZXJNZW1vcnlEdW1wLkxldmVsT2ZEZXRhaWwuTElHSFQ7Y29uc3QgREVUQUlMRUQ9dHIubW9kZWwuQ29udGFpbmVyTWVtb3J5RHVtcC5MZXZlbE9mRGV0YWlsLkRFVEFJTEVEO2NvbnN0IFNZU1RFTV9NRU1PUllfQ0hBUlRfUkVOREVSSU5HX0NPTkZJRz17Y2hhcnRUeXBlOnRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1R5cGUuQVJFQSxjb2xvcklkOkNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JHZW5lcmFsUHVycG9zZVN0cmluZygnc3lzdGVtTWVtb3J5JyksYmFja2dyb3VuZE9wYWNpdHk6MC44fTtjb25zdCBTWVNURU1fTUVNT1JZX1NFUklFU19OQU1FUz1bJ1VzZWQgKEtCKScsJ1N3YXBwZWQgKEtCKSddO2Z1bmN0aW9uIGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wVXNlZFNpemVzKGdsb2JhbE1lbW9yeUR1bXAsYWRkU2l6ZSl7Zm9yKGNvbnN0W3BpZCxwbWRdb2YKT2JqZWN0LmVudHJpZXMoZ2xvYmFsTWVtb3J5RHVtcC5wcm9jZXNzTWVtb3J5RHVtcHMpKXtjb25zdCBtb3N0UmVjZW50Vm1SZWdpb25zPXBtZC5tb3N0UmVjZW50Vm1SZWdpb25zO2lmKG1vc3RSZWNlbnRWbVJlZ2lvbnM9PT11bmRlZmluZWQpY29udGludWU7YWRkU2l6ZShwaWQsbW9zdFJlY2VudFZtUmVnaW9ucy5ieXRlU3RhdHMucHJvcG9ydGlvbmFsUmVzaWRlbnR8fDAscG1kLnByb2Nlc3MudXNlckZyaWVuZGx5TmFtZSk7fX0KZnVuY3Rpb24gZXh0cmFjdFByb2Nlc3NNZW1vcnlEdW1wQWxsb2NhdG9yU2l6ZXMocHJvY2Vzc01lbW9yeUR1bXAsYWRkU2l6ZSl7Y29uc3QgYWxsb2NhdG9yRHVtcHM9cHJvY2Vzc01lbW9yeUR1bXAubWVtb3J5QWxsb2NhdG9yRHVtcHM7aWYoYWxsb2NhdG9yRHVtcHM9PT11bmRlZmluZWQpcmV0dXJuO2FsbG9jYXRvckR1bXBzLmZvckVhY2goZnVuY3Rpb24oYWxsb2NhdG9yRHVtcCl7aWYoYWxsb2NhdG9yRHVtcC5mdWxsTmFtZT09PSd0cmFjaW5nJylyZXR1cm47Y29uc3QgYWxsb2NhdG9yU2l6ZT1hbGxvY2F0b3JEdW1wLm51bWVyaWNzW0RJU1BMQVlFRF9TSVpFX05VTUVSSUNfTkFNRV07aWYoYWxsb2NhdG9yU2l6ZT09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgYWxsb2NhdG9yU2l6ZVZhbHVlPWFsbG9jYXRvclNpemUudmFsdWU7aWYoYWxsb2NhdG9yU2l6ZVZhbHVlPT09dW5kZWZpbmVkKXJldHVybjthZGRTaXplKGFsbG9jYXRvckR1bXAuZnVsbE5hbWUsYWxsb2NhdG9yU2l6ZVZhbHVlKTt9KTt9CmZ1bmN0aW9uIGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wQWxsb2NhdG9yU2l6ZXMoZ2xvYmFsTWVtb3J5RHVtcCxhZGRTaXplKXtmb3IoY29uc3QgcG1kIG9mIE9iamVjdC52YWx1ZXMoZ2xvYmFsTWVtb3J5RHVtcC5wcm9jZXNzTWVtb3J5RHVtcHMpKXtleHRyYWN0UHJvY2Vzc01lbW9yeUR1bXBBbGxvY2F0b3JTaXplcyhwbWQsYWRkU2l6ZSk7fX0KZnVuY3Rpb24gYnVpbGRNZW1vcnlDaGFydFNlcmllcyhtZW1vcnlEdW1wcyxkdW1wU2l6ZUV4dHJhY3Rvcil7Y29uc3QgZHVtcENvdW50PW1lbW9yeUR1bXBzLmxlbmd0aDtjb25zdCBpZFRvVGltZXN0YW1wVG9Qb2ludD17fTtjb25zdCBpZFRvTmFtZT17fTttZW1vcnlEdW1wcy5mb3JFYWNoKGZ1bmN0aW9uKGR1bXAsaW5kZXgpe2R1bXBTaXplRXh0cmFjdG9yKGR1bXAsZnVuY3Rpb24gYWRkU2l6ZShpZCxzaXplLG9wdF9uYW1lKXtsZXQgdGltZXN0YW1wVG9Qb2ludD1pZFRvVGltZXN0YW1wVG9Qb2ludFtpZF07aWYodGltZXN0YW1wVG9Qb2ludD09PXVuZGVmaW5lZCl7aWRUb1RpbWVzdGFtcFRvUG9pbnRbaWRdPXRpbWVzdGFtcFRvUG9pbnQ9bmV3IEFycmF5KGR1bXBDb3VudCk7Zm9yKGxldCBpPTA7aTxkdW1wQ291bnQ7aSsrKXtjb25zdCBtb2RlbEl0ZW09bWVtb3J5RHVtcHNbaV07dGltZXN0YW1wVG9Qb2ludFtpXT1uZXcgdHIudWkudHJhY2tzLkNoYXJ0UG9pbnQobW9kZWxJdGVtLG1vZGVsSXRlbS5zdGFydCwwKTt9fQp0aW1lc3RhbXBUb1BvaW50W2luZGV4XS55Kz1zaXplO2lmKG9wdF9uYW1lIT09dW5kZWZpbmVkKWlkVG9OYW1lW2lkXT1vcHRfbmFtZTt9KTt9KTtjb25zdCBpZHM9T2JqZWN0LmtleXMoaWRUb1RpbWVzdGFtcFRvUG9pbnQpO2lmKGlkcy5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7aWRzLnNvcnQoKTtmb3IobGV0IGk9MDtpPGR1bXBDb3VudDtpKyspe2xldCBiYXNlU2l6ZT0wO2ZvcihsZXQgaj1pZHMubGVuZ3RoLTE7aj49MDtqLS0pe2NvbnN0IHBvaW50PWlkVG9UaW1lc3RhbXBUb1BvaW50W2lkc1tqXV1baV07cG9pbnQueUJhc2U9YmFzZVNpemU7cG9pbnQueSs9YmFzZVNpemU7YmFzZVNpemU9cG9pbnQueTt9fQpjb25zdCBzZXJpZXNZQXhpcz1uZXcgdHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzWUF4aXMoMCk7Y29uc3Qgc2VyaWVzPWlkcy5tYXAoZnVuY3Rpb24oaWQpe2NvbnN0IGNvbG9ySWQ9Q29sb3JTY2hlbWUuZ2V0Q29sb3JJZEZvckdlbmVyYWxQdXJwb3NlU3RyaW5nKGlkVG9OYW1lW2lkXXx8aWQpO2NvbnN0IHJlbmRlcmluZ0NvbmZpZz17Y2hhcnRUeXBlOnRyLnVpLnRyYWNrcy5DaGFydFNlcmllc1R5cGUuQVJFQSxjb2xvcklkLGJhY2tncm91bmRPcGFjaXR5OjAuOH07cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXMoaWRUb1RpbWVzdGFtcFRvUG9pbnRbaWRdLHNlcmllc1lBeGlzLHJlbmRlcmluZ0NvbmZpZyk7fSk7c2VyaWVzLnJldmVyc2UoKTtyZXR1cm4gc2VyaWVzO30KZnVuY3Rpb24gYnVpbGRNZW1vcnlMZXR0ZXJEb3RzKG1lbW9yeUR1bXBzKXtjb25zdCBiYWNrZ3JvdW5kTWVtb3J5Q29sb3JJZD1Db2xvclNjaGVtZS5nZXRDb2xvcklkRm9yUmVzZXJ2ZWROYW1lKCdiYWNrZ3JvdW5kX21lbW9yeV9kdW1wJyk7Y29uc3QgbGlnaHRNZW1vcnlDb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ2xpZ2h0X21lbW9yeV9kdW1wJyk7Y29uc3QgZGV0YWlsZWRNZW1vcnlDb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ2RldGFpbGVkX21lbW9yeV9kdW1wJyk7cmV0dXJuIG1lbW9yeUR1bXBzLm1hcChmdW5jdGlvbihtZW1vcnlEdW1wKXtsZXQgbWVtb3J5Q29sb3JJZDtzd2l0Y2gobWVtb3J5RHVtcC5sZXZlbE9mRGV0YWlsKXtjYXNlIEJBQ0tHUk9VTkQ6bWVtb3J5Q29sb3JJZD1iYWNrZ3JvdW5kTWVtb3J5Q29sb3JJZDticmVhaztjYXNlIERFVEFJTEVEOm1lbW9yeUNvbG9ySWQ9ZGV0YWlsZWRNZW1vcnlDb2xvcklkO2JyZWFrO2Nhc2UgTElHSFQ6ZGVmYXVsdDptZW1vcnlDb2xvcklkPWxpZ2h0TWVtb3J5Q29sb3JJZDt9CnJldHVybiBuZXcgdHIudWkudHJhY2tzLkxldHRlckRvdChtZW1vcnlEdW1wLCdNJyxtZW1vcnlDb2xvcklkLG1lbW9yeUR1bXAuc3RhcnQpO30pO30KZnVuY3Rpb24gYnVpbGRHbG9iYWxVc2VkTWVtb3J5Q2hhcnRTZXJpZXMoZ2xvYmFsTWVtb3J5RHVtcHMpe3JldHVybiBidWlsZE1lbW9yeUNoYXJ0U2VyaWVzKGdsb2JhbE1lbW9yeUR1bXBzLGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wVXNlZFNpemVzKTt9CmZ1bmN0aW9uIGJ1aWxkUHJvY2Vzc0FsbG9jYXRlZE1lbW9yeUNoYXJ0U2VyaWVzKHByb2Nlc3NNZW1vcnlEdW1wcyl7cmV0dXJuIGJ1aWxkTWVtb3J5Q2hhcnRTZXJpZXMocHJvY2Vzc01lbW9yeUR1bXBzLGV4dHJhY3RQcm9jZXNzTWVtb3J5RHVtcEFsbG9jYXRvclNpemVzKTt9CmZ1bmN0aW9uIGJ1aWxkR2xvYmFsQWxsb2NhdGVkTWVtb3J5Q2hhcnRTZXJpZXMoZ2xvYmFsTWVtb3J5RHVtcHMpe3JldHVybiBidWlsZE1lbW9yeUNoYXJ0U2VyaWVzKGdsb2JhbE1lbW9yeUR1bXBzLGV4dHJhY3RHbG9iYWxNZW1vcnlEdW1wQWxsb2NhdG9yU2l6ZXMpO30KZnVuY3Rpb24gYnVpbGRTeXN0ZW1NZW1vcnlDaGFydFNlcmllcyhtb2RlbCl7aWYobW9kZWwua2VybmVsLmNvdW50ZXJzPT09dW5kZWZpbmVkKXJldHVybjtjb25zdCBtZW1vcnlDb3VudGVyPW1vZGVsLmtlcm5lbC5jb3VudGVyc1snZ2xvYmFsLlN5c3RlbU1lbW9yeSddO2lmKG1lbW9yeUNvdW50ZXI9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHRyYWNrcz1bXTtmb3IoY29uc3QgbmFtZSBvZiBTWVNURU1fTUVNT1JZX1NFUklFU19OQU1FUyl7Y29uc3Qgc2VyaWVzPW1lbW9yeUNvdW50ZXIuc2VyaWVzLmZpbmQoc2VyaWVzPT5zZXJpZXMubmFtZT09PW5hbWUpO2lmKHNlcmllcz09PXVuZGVmaW5lZHx8c2VyaWVzLnNhbXBsZXMubGVuZ3RoPT09MClyZXR1cm47Y29uc3QgY2hhcnRQb2ludHM9W107Y29uc3QgdmFsdWVSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IHNhbXBsZSBvZiBzZXJpZXMuc2FtcGxlcyl7Y2hhcnRQb2ludHMucHVzaChuZXcgdHIudWkudHJhY2tzLkNoYXJ0UG9pbnQoc2FtcGxlLHNhbXBsZS50aW1lc3RhbXAsc2FtcGxlLnZhbHVlLDApKTt2YWx1ZVJhbmdlLmFkZFZhbHVlKHNhbXBsZS52YWx1ZSk7fQpjb25zdCBiYXNlTGluZT1NYXRoLm1heCgwLHZhbHVlUmFuZ2UubWluLXZhbHVlUmFuZ2UucmFuZ2UpO2NvbnN0IGF4aXNZPW5ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXNZQXhpcyhiYXNlTGluZSx2YWx1ZVJhbmdlLm1heCk7Y29uc3QgY2hhcnRTZXJpZXM9W25ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXMoY2hhcnRQb2ludHMsYXhpc1ksU1lTVEVNX01FTU9SWV9DSEFSVF9SRU5ERVJJTkdfQ09ORklHKV07dHJhY2tzLnB1c2goe25hbWU6J1N5c3RlbSBNZW1vcnkgJytuYW1lLHNlcmllczpjaGFydFNlcmllc30pO30KcmV0dXJuIHRyYWNrczt9CnJldHVybntidWlsZE1lbW9yeUxldHRlckRvdHMsYnVpbGRHbG9iYWxVc2VkTWVtb3J5Q2hhcnRTZXJpZXMsYnVpbGRQcm9jZXNzQWxsb2NhdGVkTWVtb3J5Q2hhcnRTZXJpZXMsYnVpbGRHbG9iYWxBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyxidWlsZFN5c3RlbU1lbW9yeUNoYXJ0U2VyaWVzLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgVVNFRF9NRU1PUllfVFJBQ0tfSEVJR0hUPTUwO2NvbnN0IEFMTE9DQVRFRF9NRU1PUllfVFJBQ0tfSEVJR0hUPTUwO2NvbnN0IEdsb2JhbE1lbW9yeUR1bXBUcmFjaz10ci51aS5iLmRlZmluZSgnZ2xvYmFsLW1lbW9yeS1kdW1wLXRyYWNrJyx0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2spO0dsb2JhbE1lbW9yeUR1bXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5tZW1vcnlEdW1wc189dW5kZWZpbmVkO30sZ2V0IG1lbW9yeUR1bXBzKCl7cmV0dXJuIHRoaXMubWVtb3J5RHVtcHNfO30sc2V0IG1lbW9yeUR1bXBzKG1lbW9yeUR1bXBzKXt0aGlzLm1lbW9yeUR1bXBzXz1tZW1vcnlEdW1wczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5jbGVhclRyYWNrc18oKTtpZighdGhpcy5tZW1vcnlEdW1wc198fCF0aGlzLm1lbW9yeUR1bXBzXy5sZW5ndGgpcmV0dXJuO3RoaXMuYXBwZW5kRHVtcERvdHNUcmFja18oKTt0aGlzLmFwcGVuZFVzZWRNZW1vcnlUcmFja18oKTt0aGlzLmFwcGVuZEFsbG9jYXRlZE1lbW9yeVRyYWNrXygpO30sYXBwZW5kRHVtcERvdHNUcmFja18oKXtjb25zdCBpdGVtcz10ci51aS50cmFja3MuYnVpbGRNZW1vcnlMZXR0ZXJEb3RzKHRoaXMubWVtb3J5RHVtcHNfKTtpZighaXRlbXMpcmV0dXJuO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suaGVhZGluZz0nTWVtb3J5IER1bXBzJzt0cmFjay5pdGVtcz1pdGVtcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRVc2VkTWVtb3J5VHJhY2tfKCl7Y29uc3QgdHJhY2tzPVtdO2NvbnN0IHBlclByb2Nlc3NTZXJpZXM9dHIudWkudHJhY2tzLmJ1aWxkR2xvYmFsVXNlZE1lbW9yeUNoYXJ0U2VyaWVzKHRoaXMubWVtb3J5RHVtcHNfKTtpZihwZXJQcm9jZXNzU2VyaWVzIT09dW5kZWZpbmVkKXt0cmFja3MucHVzaCh7bmFtZTonTWVtb3J5IHBlciBwcm9jZXNzJyxzZXJpZXM6cGVyUHJvY2Vzc1Nlcmllc30pO31lbHNle3RyYWNrcy5wdXNoLmFwcGx5KHRyYWNrcyx0ci51aS50cmFja3MuYnVpbGRTeXN0ZW1NZW1vcnlDaGFydFNlcmllcyh0aGlzLm1lbW9yeUR1bXBzX1swXS5tb2RlbCkpO30KZm9yKGNvbnN0e25hbWUsc2VyaWVzfW9mIHRyYWNrcyl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmhlYWRpbmc9bmFtZTt0cmFjay5oZWlnaHQ9VVNFRF9NRU1PUllfVFJBQ0tfSEVJR0hUKydweCc7dHJhY2suc2VyaWVzPXNlcmllczt0cmFjay5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fX0sYXBwZW5kQWxsb2NhdGVkTWVtb3J5VHJhY2tfKCl7Y29uc3Qgc2VyaWVzPXRyLnVpLnRyYWNrcy5idWlsZEdsb2JhbEFsbG9jYXRlZE1lbW9yeUNoYXJ0U2VyaWVzKHRoaXMubWVtb3J5RHVtcHNfKTtpZighc2VyaWVzKXJldHVybjtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkNoYXJ0VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suaGVhZGluZz0nTWVtb3J5IHBlciBjb21wb25lbnQnO3RyYWNrLmhlaWdodD1BTExPQ0FURURfTUVNT1JZX1RSQUNLX0hFSUdIVCsncHgnO3RyYWNrLnNlcmllcz1zZXJpZXM7dHJhY2suYXV0b1NldEFsbEF4ZXMoe2V4cGFuZE1heDp0cnVlfSk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO319O3JldHVybntHbG9iYWxNZW1vcnlEdW1wVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLmInLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmFzdFJlY3RSZW5kZXJlcihjdHgseE1pbix4TWF4LG1pblJlY3RTaXplLG1heE1lcmdlRGlzdCxwYWxldHRlKXt0aGlzLmN0eF89Y3R4O3RoaXMueE1pbl89eE1pbjt0aGlzLnhNYXhfPXhNYXg7dGhpcy5taW5SZWN0U2l6ZV89bWluUmVjdFNpemU7dGhpcy5tYXhNZXJnZURpc3RfPW1heE1lcmdlRGlzdDt0aGlzLnBhbGV0dGVfPXBhbGV0dGU7fQpGYXN0UmVjdFJlbmRlcmVyLnByb3RvdHlwZT17eV86MCxoXzowLG1lcmdpbmdfOmZhbHNlLG1lcmdlU3RhcnRYXzowLG1lcmdlQ3VyUmlnaHRfOjAsbWVyZ2VkQ29sb3JJZF86MCxtZXJnZWRBbHBoYV86MCxzZXRZYW5kSCh5LGgpe2lmKHRoaXMueV89PT15JiZ0aGlzLmhfPT09aCl7cmV0dXJuO30KdGhpcy5mbHVzaCgpO3RoaXMueV89eTt0aGlzLmhfPWg7fSxmaWxsUmVjdCh4LHcsY29sb3JJZCxhbHBoYSl7Y29uc3Qgcj14K3c7aWYodzx0aGlzLm1pblJlY3RTaXplXyl7aWYoci10aGlzLm1lcmdlU3RhcnRYXz50aGlzLm1heE1lcmdlRGlzdF8pe3RoaXMuZmx1c2goKTt9CmlmKCF0aGlzLm1lcmdpbmdfKXt0aGlzLm1lcmdpbmdfPXRydWU7dGhpcy5tZXJnZVN0YXJ0WF89eDt0aGlzLm1lcmdlQ3VyUmlnaHRfPXI7dGhpcy5tZXJnZWRDb2xvcklkXz1jb2xvcklkO3RoaXMubWVyZ2VkQWxwaGFfPWFscGhhO31lbHNle3RoaXMubWVyZ2VDdXJSaWdodF89cjtpZih0aGlzLm1lcmdlZEFscGhhXzxhbHBoYXx8KHRoaXMubWVyZ2VkQWxwaGFfPT09YWxwaGEmJnRoaXMubWVyZ2VkQ29sb3JJZF88Y29sb3JJZCkpe3RoaXMubWVyZ2VkQWxwaGFfPWFscGhhO3RoaXMubWVyZ2VkQ29sb3JJZF89Y29sb3JJZDt9fX1lbHNle2lmKHRoaXMubWVyZ2luZ18pe3RoaXMuZmx1c2goKTt9CnRoaXMuY3R4Xy5maWxsU3R5bGU9dGhpcy5wYWxldHRlX1tjb2xvcklkXTt0aGlzLmN0eF8uZ2xvYmFsQWxwaGE9YWxwaGE7Y29uc3QgeExlZnQ9TWF0aC5tYXgoeCx0aGlzLnhNaW5fKTtjb25zdCB4UmlnaHQ9TWF0aC5taW4ocix0aGlzLnhNYXhfKTtpZih4TGVmdDx4UmlnaHQpe3RoaXMuY3R4Xy5maWxsUmVjdCh4TGVmdCx0aGlzLnlfLHhSaWdodC14TGVmdCx0aGlzLmhfKTt9fX0sZmx1c2goKXtpZih0aGlzLm1lcmdpbmdfKXt0aGlzLmN0eF8uZmlsbFN0eWxlPXRoaXMucGFsZXR0ZV9bdGhpcy5tZXJnZWRDb2xvcklkX107dGhpcy5jdHhfLmdsb2JhbEFscGhhPXRoaXMubWVyZ2VkQWxwaGFfO2NvbnN0IHhMZWZ0PU1hdGgubWF4KHRoaXMubWVyZ2VTdGFydFhfLHRoaXMueE1pbl8pO2NvbnN0IHhSaWdodD1NYXRoLm1pbih0aGlzLm1lcmdlQ3VyUmlnaHRfLHRoaXMueE1heF8pO2lmKHhMZWZ0PHhSaWdodCl7dGhpcy5jdHhfLmZpbGxSZWN0KHhMZWZ0LHRoaXMueV8seFJpZ2h0LXhMZWZ0LHRoaXMuaF8pO30KdGhpcy5tZXJnaW5nXz1mYWxzZTt9fX07cmV0dXJue0Zhc3RSZWN0UmVuZGVyZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBSZWN0VHJhY2s9dHIudWkuYi5kZWZpbmUoJ3JlY3QtdHJhY2snLHRyLnVpLnRyYWNrcy5UcmFjayk7UmVjdFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdyZWN0LXRyYWNrJyk7dGhpcy5hc3luY1N0eWxlXz1mYWxzZTt0aGlzLnJlY3RzXz1udWxsO3RoaXMuaGVhZGluZ189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktYi1oZWFkaW5nJyk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkaW5nXyk7fSxzZXQgaGVhZGluZyhoZWFkaW5nKXt0aGlzLmhlYWRpbmdfLmhlYWRpbmc9aGVhZGluZzt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uaGVhZGluZzt9LHNldCB0b29sdGlwKHRvb2x0aXApe3RoaXMuaGVhZGluZ18udG9vbHRpcD10b29sdGlwO30sc2V0IHNlbGVjdGlvbkdlbmVyYXRvcihnZW5lcmF0b3Ipe3RoaXMuaGVhZGluZ18uc2VsZWN0aW9uR2VuZXJhdG9yPWdlbmVyYXRvcjt9LHNldCBleHBhbmRlZChleHBhbmRlZCl7dGhpcy5oZWFkaW5nXy5leHBhbmRlZD0hIWV4cGFuZGVkO30sc2V0IGFycm93VmlzaWJsZShhcnJvd1Zpc2libGUpe3RoaXMuaGVhZGluZ18uYXJyb3dWaXNpYmxlPSEhYXJyb3dWaXNpYmxlO30sZ2V0IGV4cGFuZGVkKCl7cmV0dXJuIHRoaXMuaGVhZGluZ18uZXhwYW5kZWQ7fSxnZXQgYXN5bmNTdHlsZSgpe3JldHVybiB0aGlzLmFzeW5jU3R5bGVfO30sc2V0IGFzeW5jU3R5bGUodil7dGhpcy5hc3luY1N0eWxlXz0hIXY7fSxnZXQgcmVjdHMoKXtyZXR1cm4gdGhpcy5yZWN0c187fSxzZXQgcmVjdHMocmVjdHMpe3RoaXMucmVjdHNfPXJlY3RzfHxbXTt0aGlzLmludmFsaWRhdGVEcmF3aW5nQ29udGFpbmVyKCk7fSxnZXQgaGVpZ2h0KCl7cmV0dXJuIHdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKHRoaXMpLmhlaWdodDt9LHNldCBoZWlnaHQoaGVpZ2h0KXt0aGlzLnN0eWxlLmhlaWdodD1oZWlnaHQ7dGhpcy5pbnZhbGlkYXRlRHJhd2luZ0NvbnRhaW5lcigpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7cmV0dXJuIHRoaXMucmVjdHNfLmxlbmd0aD4wO30sZHJhdyh0eXBlLHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtzd2l0Y2godHlwZSl7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuR0VORVJBTF9FVkVOVDp0aGlzLmRyYXdSZWN0c18odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhazt9fSxkcmF3UmVjdHNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2N0eC5zYXZlKCk7Y29uc3QgYm91bmRzPXRoaXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7dHIudWkuYi5kcmF3U2xpY2VzKGN0eCx0aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLHZpZXdMV29ybGQsdmlld1JXb3JsZCxib3VuZHMuaGVpZ2h0LHRoaXMucmVjdHNfLHRoaXMuYXN5bmNTdHlsZV8pO2N0eC5yZXN0b3JlKCk7aWYoYm91bmRzLmhlaWdodDw9NilyZXR1cm47bGV0IGZvbnRTaXplO2xldCB5T2Zmc2V0O2lmKGJvdW5kcy5oZWlnaHQ8MTUpe2ZvbnRTaXplPTY7eU9mZnNldD0xLjA7fWVsc2V7Zm9udFNpemU9MTA7eU9mZnNldD0yLjU7fQp0ci51aS5iLmRyYXdMYWJlbHMoY3R4LHRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0sdmlld0xXb3JsZCx2aWV3UldvcmxkLHRoaXMucmVjdHNfLHRoaXMuYXN5bmNTdHlsZV8sZm9udFNpemUseU9mZnNldCk7fSxhZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCl7aWYodGhpcy5yZWN0c189PT11bmRlZmluZWR8fHRoaXMucmVjdHNfPT09bnVsbCl7cmV0dXJuO30KdGhpcy5yZWN0c18uZm9yRWFjaChmdW5jdGlvbihyZWN0KXtyZWN0LmFkZFRvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwLHRoaXMpO30sdGhpcyk7fSxhZGRJbnRlcnNlY3RpbmdFdmVudHNJblJhbmdlVG9TZWxlY3Rpb25JbldvcmxkU3BhY2UobG9XWCxoaVdYLHZpZXdQaXhXaWR0aFdvcmxkLHNlbGVjdGlvbil7ZnVuY3Rpb24gb25SZWN0KHJlY3Qpe3JlY3QuYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9Cm9uUmVjdD1vblJlY3QuYmluZCh0aGlzKTtjb25zdCBpbnN0YW50RXZlbnRXaWR0aD0yKnZpZXdQaXhXaWR0aFdvcmxkO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy5yZWN0c18sZnVuY3Rpb24oeCl7cmV0dXJuIHguc3RhcnQ7fSxmdW5jdGlvbih4KXtyZXR1cm4geC5kdXJhdGlvbj09PTA/eC5kdXJhdGlvbitpbnN0YW50RXZlbnRXaWR0aDp4LmR1cmF0aW9uO30sbG9XWCxoaVdYLG9uUmVjdCk7fSxhZGRFdmVudE5lYXJUb1Byb3ZpZGVkRXZlbnRUb1NlbGVjdGlvbihldmVudCxvZmZzZXQsc2VsZWN0aW9uKXtjb25zdCBpbmRleD10aGlzLnJlY3RzXy5maW5kSW5kZXgocmVjdD0+cmVjdC5tb2RlbEl0ZW09PT1ldmVudCk7aWYoaW5kZXg9PT0tMSlyZXR1cm4gZmFsc2U7Y29uc3QgbmV3SW5kZXg9aW5kZXgrb2Zmc2V0O2lmKG5ld0luZGV4PDB8fG5ld0luZGV4Pj10aGlzLnJlY3RzXy5sZW5ndGgpcmV0dXJuIGZhbHNlO3RoaXMucmVjdHNfW25ld0luZGV4XS5hZGRUb1NlbGVjdGlvbihzZWxlY3Rpb24pO3JldHVybiB0cnVlO30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXtmb3IobGV0IGk9MDtpPHRoaXMucmVjdHNfLmxlbmd0aDsrK2kpe2NvbnN0IG1vZGVsSXRlbT10aGlzLnJlY3RzX1tpXS5tb2RlbEl0ZW07aWYoIW1vZGVsSXRlbSljb250aW51ZTtpZihmaWx0ZXIubWF0Y2hTbGljZShtb2RlbEl0ZW0pKXtzZWxlY3Rpb24ucHVzaChtb2RlbEl0ZW0pO319fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXtjb25zdCByZWN0PXRyLmIuZmluZENsb3Nlc3RJbnRlcnZhbEluU29ydGVkSW50ZXJ2YWxzKHRoaXMucmVjdHNfLGZ1bmN0aW9uKHgpe3JldHVybiB4LnN0YXJ0O30sZnVuY3Rpb24oeCl7cmV0dXJuIHguZW5kO30sd29ybGRYLHdvcmxkTWF4RGlzdCk7aWYoIXJlY3QpcmV0dXJuO3JlY3QuYWRkVG9TZWxlY3Rpb24oc2VsZWN0aW9uKTt9fTtmdW5jdGlvbiBSZWN0KG1vZGVsSXRlbSx0aXRsZSxjb2xvcklkLHN0YXJ0LGR1cmF0aW9uKXt0ci5tb2RlbC5Qcm94eVNlbGVjdGFibGVJdGVtLmNhbGwodGhpcyxtb2RlbEl0ZW0pO3RoaXMudGl0bGU9dGl0bGU7dGhpcy5jb2xvcklkPWNvbG9ySWQ7dGhpcy5zdGFydD1zdGFydDt0aGlzLmR1cmF0aW9uPWR1cmF0aW9uO3RoaXMuZW5kPXN0YXJ0K2R1cmF0aW9uO30KUmVjdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5tb2RlbC5Qcm94eVNlbGVjdGFibGVJdGVtLnByb3RvdHlwZX07cmV0dXJue1JlY3RUcmFjayxSZWN0LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgU2xpY2VUcmFjaz10ci51aS5iLmRlZmluZSgnc2xpY2UtdHJhY2snLHRyLnVpLnRyYWNrcy5SZWN0VHJhY2spO1NsaWNlVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLlJlY3RUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5SZWN0VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7fSxnZXQgc2xpY2VzKCl7cmV0dXJuIHRoaXMucmVjdHM7fSxzZXQgc2xpY2VzKHNsaWNlcyl7dGhpcy5yZWN0cz1zbGljZXM7fX07cmV0dXJue1NsaWNlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDcHVUcmFjaz10ci51aS5iLmRlZmluZSgnY3B1LXRyYWNrJyx0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2spO0NwdVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjcHUtdHJhY2snKTt0aGlzLmRldGFpbGVkTW9kZV89dHJ1ZTt9LGdldCBjcHUoKXtyZXR1cm4gdGhpcy5jcHVfO30sc2V0IGNwdShjcHUpe3RoaXMuY3B1Xz1jcHU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBkZXRhaWxlZE1vZGUoKXtyZXR1cm4gdGhpcy5kZXRhaWxlZE1vZGVfO30sc2V0IGRldGFpbGVkTW9kZShkZXRhaWxlZE1vZGUpe3RoaXMuZGV0YWlsZWRNb2RlXz1kZXRhaWxlZE1vZGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCB0b29sdGlwKCl7cmV0dXJuIHRoaXMudG9vbHRpcF87fSxzZXQgdG9vbHRpcCh2YWx1ZSl7dGhpcy50b29sdGlwXz12YWx1ZTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGhhc1Zpc2libGVDb250ZW50KCl7aWYodGhpcy5jcHVfPT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtjb25zdCBjcHU9dGhpcy5jcHVfO2lmKGNwdS5zbGljZXMubGVuZ3RoKXJldHVybiB0cnVlO2lmKGNwdS5zYW1wbGVzJiZjcHUuc2FtcGxlcy5sZW5ndGgpcmV0dXJuIHRydWU7aWYoT2JqZWN0LmtleXMoY3B1LmNvdW50ZXJzKS5sZW5ndGg+MClyZXR1cm4gdHJ1ZTtyZXR1cm4gZmFsc2U7fSx1cGRhdGVDb250ZW50c18oKXt0aGlzLmRldGFjaCgpO2lmKCF0aGlzLmNwdV8pcmV0dXJuO2NvbnN0IHNsaWNlcz10aGlzLmNwdV8uc2xpY2VzO2lmKHNsaWNlcy5sZW5ndGgpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuU2xpY2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5zbGljZXM9c2xpY2VzO3RyYWNrLmhlYWRpbmc9dGhpcy5jcHVfLnVzZXJGcmllbmRseU5hbWUrJzonO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9CmlmKHRoaXMuZGV0YWlsZWRNb2RlXyl7dGhpcy5hcHBlbmRTYW1wbGVzVHJhY2tzXygpO2Zvcihjb25zdCBjb3VudGVyTmFtZSBpbiB0aGlzLmNwdV8uY291bnRlcnMpe2NvbnN0IGNvdW50ZXI9dGhpcy5jcHVfLmNvdW50ZXJzW2NvdW50ZXJOYW1lXTtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkNvdW50ZXJUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5oZWFkaW5nPXRoaXMuY3B1Xy51c2VyRnJpZW5kbHlOYW1lKycgJysKY291bnRlci5uYW1lKyc6Jzt0cmFjay5jb3VudGVyPWNvdW50ZXI7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO319fSxhcHBlbmRTYW1wbGVzVHJhY2tzXygpe2NvbnN0IHNhbXBsZXM9dGhpcy5jcHVfLnNhbXBsZXM7aWYoc2FtcGxlcz09PXVuZGVmaW5lZHx8c2FtcGxlcy5sZW5ndGg9PT0wKXtyZXR1cm47fQpjb25zdCBzYW1wbGVzQnlUaXRsZT17fTtzYW1wbGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlKXtpZihzYW1wbGVzQnlUaXRsZVtzYW1wbGUudGl0bGVdPT09dW5kZWZpbmVkKXtzYW1wbGVzQnlUaXRsZVtzYW1wbGUudGl0bGVdPVtdO30Kc2FtcGxlc0J5VGl0bGVbc2FtcGxlLnRpdGxlXS5wdXNoKHNhbXBsZSk7fSk7Y29uc3Qgc2FtcGxlVGl0bGVzPU9iamVjdC5rZXlzKHNhbXBsZXNCeVRpdGxlKTtzYW1wbGVUaXRsZXMuc29ydCgpO3NhbXBsZVRpdGxlcy5mb3JFYWNoKGZ1bmN0aW9uKHNhbXBsZVRpdGxlKXtjb25zdCBzYW1wbGVzPXNhbXBsZXNCeVRpdGxlW3NhbXBsZVRpdGxlXTtjb25zdCBzYW1wbGVzVHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5TbGljZVRyYWNrKHRoaXMudmlld3BvcnQpO3NhbXBsZXNUcmFjay5ncm91cD10aGlzLmNwdV87c2FtcGxlc1RyYWNrLnNsaWNlcz1zYW1wbGVzO3NhbXBsZXNUcmFjay5oZWFkaW5nPXRoaXMuY3B1Xy51c2VyRnJpZW5kbHlOYW1lKyc6ICcrCnNhbXBsZVRpdGxlO3NhbXBsZXNUcmFjay50b29sdGlwPXRoaXMuY3B1Xy51c2VyRnJpZW5kbHlEZXRhaWxzO3NhbXBsZXNUcmFjay5zZWxlY3Rpb25HZW5lcmF0b3I9ZnVuY3Rpb24oKXtjb25zdCBzZWxlY3Rpb249bmV3IHRyLm1vZGVsLkV2ZW50U2V0KCk7Zm9yKGxldCBpPTA7aTxzYW1wbGVzVHJhY2suc2xpY2VzLmxlbmd0aDtpKyspe3NlbGVjdGlvbi5wdXNoKHNhbXBsZXNUcmFjay5zbGljZXNbaV0pO30KcmV0dXJuIHNlbGVjdGlvbjt9O1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHNhbXBsZXNUcmFjayk7fSx0aGlzKTt9fTtyZXR1cm57Q3B1VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1vZGVsJyxmdW5jdGlvbigpe2NvbnN0IFNldHRpbmdzPXRyLmIuU2V0dGluZ3M7ZnVuY3Rpb24gTW9kZWxTZXR0aW5ncyhtb2RlbCl7dGhpcy5tb2RlbD1tb2RlbDt0aGlzLm9iamVjdHNCeUtleV89W107dGhpcy5ub251bmlxdWVLZXlzXz1bXTt0aGlzLmJ1aWxkT2JqZWN0c0J5S2V5TWFwXygpO3RoaXMucmVtb3ZlTm9udW5pcXVlS2V5c0Zyb21TZXR0aW5nc18oKTt0aGlzLmVwaGVtZXJhbFNldHRpbmdzQnlHVUlEXz17fTt9Ck1vZGVsU2V0dGluZ3MucHJvdG90eXBlPXtidWlsZE9iamVjdHNCeUtleU1hcF8oKXtjb25zdCBvYmplY3RzPVtdO3RoaXMubW9kZWwuaXRlcmF0ZUFsbFBlcnNpc3RhYmxlT2JqZWN0cyhmdW5jdGlvbihvKXtvYmplY3RzLnB1c2gobyk7fSk7Y29uc3Qgb2JqZWN0c0J5S2V5PXt9O2NvbnN0IE5PTlVOSVFVRV9LRVk9J25vbnVuaXF1ZUtleSc7Zm9yKGxldCBpPTA7aTxvYmplY3RzLmxlbmd0aDtpKyspe2NvbnN0IG9iamVjdD1vYmplY3RzW2ldO2NvbnN0IG9iamVjdEtleT1vYmplY3QuZ2V0U2V0dGluZ3NLZXkoKTtpZighb2JqZWN0S2V5KWNvbnRpbnVlO2lmKG9iamVjdHNCeUtleVtvYmplY3RLZXldPT09dW5kZWZpbmVkKXtvYmplY3RzQnlLZXlbb2JqZWN0S2V5XT1vYmplY3Q7Y29udGludWU7fQpvYmplY3RzQnlLZXlbb2JqZWN0S2V5XT1OT05VTklRVUVfS0VZO30KY29uc3Qgbm9udW5pcXVlS2V5cz17fTtPYmplY3Qua2V5cyhvYmplY3RzQnlLZXkpLmZvckVhY2goZnVuY3Rpb24ob2JqZWN0S2V5KXtpZihvYmplY3RzQnlLZXlbb2JqZWN0S2V5XSE9PU5PTlVOSVFVRV9LRVkpe3JldHVybjt9CmRlbGV0ZSBvYmplY3RzQnlLZXlbb2JqZWN0S2V5XTtub251bmlxdWVLZXlzW29iamVjdEtleV09dHJ1ZTt9KTt0aGlzLm5vbnVuaXF1ZUtleXM9bm9udW5pcXVlS2V5czt0aGlzLm9iamVjdHNCeUtleV89b2JqZWN0c0J5S2V5O30scmVtb3ZlTm9udW5pcXVlS2V5c0Zyb21TZXR0aW5nc18oKXtjb25zdCBzZXR0aW5ncz1TZXR0aW5ncy5nZXQoJ3RyYWNlX21vZGVsX3NldHRpbmdzJyx7fSk7bGV0IHNldHRpbmdzQ2hhbmdlZD1mYWxzZTtPYmplY3Qua2V5cyhzZXR0aW5ncykuZm9yRWFjaChmdW5jdGlvbihvYmplY3RLZXkpe2lmKCF0aGlzLm5vbnVuaXF1ZUtleXNbb2JqZWN0S2V5XSl7cmV0dXJuO30Kc2V0dGluZ3NDaGFuZ2VkPXRydWU7ZGVsZXRlIHNldHRpbmdzW29iamVjdEtleV07fSx0aGlzKTtpZihzZXR0aW5nc0NoYW5nZWQpe1NldHRpbmdzLnNldCgndHJhY2VfbW9kZWxfc2V0dGluZ3MnLHNldHRpbmdzKTt9fSxoYXNVbmlxdWVTZXR0aW5nS2V5KG9iamVjdCl7Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXkpcmV0dXJuIGZhbHNlO3JldHVybiB0aGlzLm9iamVjdHNCeUtleV9bb2JqZWN0S2V5XSE9PXVuZGVmaW5lZDt9LGdldFNldHRpbmdGb3Iob2JqZWN0LG9iamVjdExldmVsS2V5LGRlZmF1bHRWYWx1ZSl7Y29uc3Qgb2JqZWN0S2V5PW9iamVjdC5nZXRTZXR0aW5nc0tleSgpO2lmKCFvYmplY3RLZXl8fCF0aGlzLm9iamVjdHNCeUtleV9bb2JqZWN0S2V5XSl7Y29uc3Qgc2V0dGluZ3M9dGhpcy5nZXRFcGhlbWVyYWxTZXR0aW5nc0Zvcl8ob2JqZWN0KTtjb25zdCBlcGhlbWVyYWxWYWx1ZT1zZXR0aW5nc1tvYmplY3RMZXZlbEtleV07aWYoZXBoZW1lcmFsVmFsdWUhPT11bmRlZmluZWQpe3JldHVybiBlcGhlbWVyYWxWYWx1ZTt9CnJldHVybiBkZWZhdWx0VmFsdWU7fQpjb25zdCBzZXR0aW5ncz1TZXR0aW5ncy5nZXQoJ3RyYWNlX21vZGVsX3NldHRpbmdzJyx7fSk7aWYoIXNldHRpbmdzW29iamVjdEtleV0pe3NldHRpbmdzW29iamVjdEtleV09e307fQpjb25zdCB2YWx1ZT1zZXR0aW5nc1tvYmplY3RLZXldW29iamVjdExldmVsS2V5XTtpZih2YWx1ZSE9PXVuZGVmaW5lZCl7cmV0dXJuIHZhbHVlO30KcmV0dXJuIGRlZmF1bHRWYWx1ZTt9LHNldFNldHRpbmdGb3Iob2JqZWN0LG9iamVjdExldmVsS2V5LHZhbHVlKXtjb25zdCBvYmplY3RLZXk9b2JqZWN0LmdldFNldHRpbmdzS2V5KCk7aWYoIW9iamVjdEtleXx8IXRoaXMub2JqZWN0c0J5S2V5X1tvYmplY3RLZXldKXt0aGlzLmdldEVwaGVtZXJhbFNldHRpbmdzRm9yXyhvYmplY3QpW29iamVjdExldmVsS2V5XT12YWx1ZTtyZXR1cm47fQpjb25zdCBzZXR0aW5ncz1TZXR0aW5ncy5nZXQoJ3RyYWNlX21vZGVsX3NldHRpbmdzJyx7fSk7aWYoIXNldHRpbmdzW29iamVjdEtleV0pe3NldHRpbmdzW29iamVjdEtleV09e307fQppZihzZXR0aW5nc1tvYmplY3RLZXldW29iamVjdExldmVsS2V5XT09PXZhbHVlKXtyZXR1cm47fQpzZXR0aW5nc1tvYmplY3RLZXldW29iamVjdExldmVsS2V5XT12YWx1ZTtTZXR0aW5ncy5zZXQoJ3RyYWNlX21vZGVsX3NldHRpbmdzJyxzZXR0aW5ncyk7fSxnZXRFcGhlbWVyYWxTZXR0aW5nc0Zvcl8ob2JqZWN0KXtpZihvYmplY3QuZ3VpZD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IG9iamVjdHMgd2l0aCBHVUlEcyBjYW4gYmUgcGVyc2lzdGVkJyk7fQppZih0aGlzLmVwaGVtZXJhbFNldHRpbmdzQnlHVUlEX1tvYmplY3QuZ3VpZF09PT11bmRlZmluZWQpe3RoaXMuZXBoZW1lcmFsU2V0dGluZ3NCeUdVSURfW29iamVjdC5ndWlkXT17fTt9CnJldHVybiB0aGlzLmVwaGVtZXJhbFNldHRpbmdzQnlHVUlEX1tvYmplY3QuZ3VpZF07fX07cmV0dXJue01vZGVsU2V0dGluZ3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb3VudGVyVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2NvdW50ZXItdHJhY2snLHRyLnVpLnRyYWNrcy5DaGFydFRyYWNrKTtDb3VudGVyVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNoYXJ0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ2hhcnRUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCdjb3VudGVyLXRyYWNrJyk7fSxnZXQgY291bnRlcigpe3JldHVybiB0aGlzLmNoYXJ0O30sc2V0IGNvdW50ZXIoY291bnRlcil7dGhpcy5oZWFkaW5nPWNvdW50ZXIubmFtZSsnOiAnO3RoaXMuc2VyaWVzPUNvdW50ZXJUcmFjay5idWlsZENoYXJ0U2VyaWVzRnJvbUNvdW50ZXIoY291bnRlcik7dGhpcy5hdXRvU2V0QWxsQXhlcyh7ZXhwYW5kTWF4OnRydWV9KTt9LGdldE1vZGVsRXZlbnRGcm9tSXRlbShjaGFydFZhbHVlKXtyZXR1cm4gY2hhcnRWYWx1ZTt9fTtDb3VudGVyVHJhY2suYnVpbGRDaGFydFNlcmllc0Zyb21Db3VudGVyPWZ1bmN0aW9uKGNvdW50ZXIpe2NvbnN0IG51bVNlcmllcz1jb3VudGVyLnNlcmllcy5sZW5ndGg7Y29uc3QgdG90YWxzPWNvdW50ZXIudG90YWxzO2NvbnN0IHNlcmllc1lBeGlzPW5ldyB0ci51aS50cmFja3MuQ2hhcnRTZXJpZXNZQXhpcygwLHVuZGVmaW5lZCk7Y29uc3QgY2hhcnRTZXJpZXM9Y291bnRlci5zZXJpZXMubWFwKGZ1bmN0aW9uKHNlcmllcyxzZXJpZXNJbmRleCl7Y29uc3QgY2hhcnRQb2ludHM9c2VyaWVzLnNhbXBsZXMubWFwKGZ1bmN0aW9uKHNhbXBsZSxzYW1wbGVJbmRleCl7Y29uc3QgdG90YWw9dG90YWxzW3NhbXBsZUluZGV4Km51bVNlcmllcytzZXJpZXNJbmRleF07cmV0dXJuIG5ldyB0ci51aS50cmFja3MuQ2hhcnRQb2ludChzYW1wbGUsc2FtcGxlLnRpbWVzdGFtcCx0b3RhbCk7fSk7Y29uc3QgcmVuZGVyaW5nQ29uZmlnPXtjaGFydFR5cGU6dHIudWkudHJhY2tzLkNoYXJ0U2VyaWVzVHlwZS5BUkVBLGNvbG9ySWQ6c2VyaWVzLmNvbG9yfTtyZXR1cm4gbmV3IHRyLnVpLnRyYWNrcy5DaGFydFNlcmllcyhjaGFydFBvaW50cyxzZXJpZXNZQXhpcyxyZW5kZXJpbmdDb25maWcpO30pO2NoYXJ0U2VyaWVzLnJldmVyc2UoKTtyZXR1cm4gY2hhcnRTZXJpZXM7fTtyZXR1cm57Q291bnRlclRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3Qgc3RhcnRDb21wYXJlPWZ1bmN0aW9uKHgseSl7cmV0dXJuIHguc3RhcnQteS5zdGFydDt9O2NvbnN0IEZyYW1lVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2ZyYW1lLXRyYWNrJyx0ci51aS50cmFja3MuTGV0dGVyRG90VHJhY2spO0ZyYW1lVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuaGVhZGluZz0nRnJhbWVzJzt0aGlzLmZyYW1lc189dW5kZWZpbmVkO3RoaXMuaXRlbXM9dW5kZWZpbmVkO30sZ2V0IGZyYW1lcygpe3JldHVybiB0aGlzLmZyYW1lc187fSxzZXQgZnJhbWVzKGZyYW1lcyl7dGhpcy5mcmFtZXNfPWZyYW1lcztpZihmcmFtZXM9PT11bmRlZmluZWQpcmV0dXJuO3RoaXMuZnJhbWVzXz10aGlzLmZyYW1lc18uc2xpY2UoKTt0aGlzLmZyYW1lc18uc29ydChzdGFydENvbXBhcmUpO3RoaXMuaXRlbXM9dGhpcy5mcmFtZXNfLm1hcChmdW5jdGlvbihmcmFtZSl7cmV0dXJuIG5ldyBGcmFtZURvdChmcmFtZSk7fSk7fX07ZnVuY3Rpb24gRnJhbWVEb3QoZnJhbWUpe3RyLnVpLnRyYWNrcy5MZXR0ZXJEb3QuY2FsbCh0aGlzLGZyYW1lLCdGJyxmcmFtZS5jb2xvcklkLGZyYW1lLnN0YXJ0KTt9CkZyYW1lRG90LnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5MZXR0ZXJEb3QucHJvdG90eXBlfTtyZXR1cm57RnJhbWVUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IE11bHRpUm93VHJhY2s9dHIudWkuYi5kZWZpbmUoJ211bHRpLXJvdy10cmFjaycsdHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrKTtNdWx0aVJvd1RyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt0aGlzLnRvb2x0aXBfPScnO3RoaXMuaGVhZGluZ189Jyc7dGhpcy5ncm91cGluZ1NvdXJjZV89dW5kZWZpbmVkO3RoaXMuaXRlbXNUb0dyb3VwXz11bmRlZmluZWQ7dGhpcy5kZWZhdWx0VG9Db2xsYXBzZWRXaGVuU3ViUm93Q291bnRNb3JlVGhhbj0xO3RoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfPXVuZGVmaW5lZDt0aGlzLmV4cGFuZGVkXz10cnVlO30sZ2V0IGl0ZW1zVG9Hcm91cCgpe3JldHVybiB0aGlzLml0ZW1zVG9Hcm91cF87fSxzZXRJdGVtc1RvR3JvdXAoaXRlbXNUb0dyb3VwLG9wdF9ncm91cGluZ1NvdXJjZSl7dGhpcy5pdGVtc1RvR3JvdXBfPWl0ZW1zVG9Hcm91cDt0aGlzLmdyb3VwaW5nU291cmNlXz1vcHRfZ3JvdXBpbmdTb3VyY2U7dGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189dW5kZWZpbmVkO3RoaXMudXBkYXRlQ29udGVudHNfKCk7dGhpcy51cGRhdGVFeHBhbmRlZFN0YXRlRnJvbUdyb3VwaW5nU291cmNlXygpO30sc2V0UHJlYnVpbHRTdWJSb3dzKGdyb3VwaW5nU291cmNlLHN1YlJvd3NXaXRoSGVhZGluZ3Mpe3RoaXMuaXRlbXNUb0dyb3VwXz11bmRlZmluZWQ7dGhpcy5ncm91cGluZ1NvdXJjZV89Z3JvdXBpbmdTb3VyY2U7dGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189c3ViUm93c1dpdGhIZWFkaW5nczt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMudXBkYXRlRXhwYW5kZWRTdGF0ZUZyb21Hcm91cGluZ1NvdXJjZV8oKTt9LGdldCBoZWFkaW5nKCl7cmV0dXJuIHRoaXMuaGVhZGluZ187fSxzZXQgaGVhZGluZyhoKXt0aGlzLmhlYWRpbmdfPWg7dGhpcy51cGRhdGVIZWFkaW5nQW5kVG9vbHRpcF8oKTt9LGdldCB0b29sdGlwKCl7cmV0dXJuIHRoaXMudG9vbHRpcF87fSxzZXQgdG9vbHRpcCh0KXt0aGlzLnRvb2x0aXBfPXQ7dGhpcy51cGRhdGVIZWFkaW5nQW5kVG9vbHRpcF8oKTt9LGdldCBzdWJSb3dzKCl7cmV0dXJuIHRoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfLm1hcChlbGVtPT5lbGVtLnJvdyk7fSxnZXQgaGFzVmlzaWJsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MDt9LGdldCBleHBhbmRlZCgpe3JldHVybiB0aGlzLmV4cGFuZGVkXzt9LHNldCBleHBhbmRlZChleHBhbmRlZCl7aWYodGhpcy5leHBhbmRlZF89PT1leHBhbmRlZClyZXR1cm47dGhpcy5leHBhbmRlZF89ZXhwYW5kZWQ7dGhpcy5leHBhbmRlZFN0YXRlQ2hhbmdlZF8oKTt9LG9uSGVhZGluZ0NsaWNrZWRfKGUpe2lmKHRoaXMuc3ViUm93cy5sZW5ndGg8PTEpcmV0dXJuO3RoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ7aWYodGhpcy5ncm91cGluZ1NvdXJjZV8pe2NvbnN0IG1vZGVsU2V0dGluZ3M9bmV3IHRyLm1vZGVsLk1vZGVsU2V0dGluZ3ModGhpcy5ncm91cGluZ1NvdXJjZV8ubW9kZWwpO21vZGVsU2V0dGluZ3Muc2V0U2V0dGluZ0Zvcih0aGlzLmdyb3VwaW5nU291cmNlXywnZXhwYW5kZWQnLHRoaXMuZXhwYW5kZWQpO30KZS5zdG9wUHJvcGFnYXRpb24oKTt9LHVwZGF0ZUV4cGFuZGVkU3RhdGVGcm9tR3JvdXBpbmdTb3VyY2VfKCl7aWYodGhpcy5ncm91cGluZ1NvdXJjZV8pe2NvbnN0IG51bVN1YlJvd3M9dGhpcy5zdWJSb3dzLmxlbmd0aDtjb25zdCBtb2RlbFNldHRpbmdzPW5ldyB0ci5tb2RlbC5Nb2RlbFNldHRpbmdzKHRoaXMuZ3JvdXBpbmdTb3VyY2VfLm1vZGVsKTtpZihudW1TdWJSb3dzPjEpe2xldCBkZWZhdWx0RXhwYW5kZWQ7aWYobnVtU3ViUm93cz50aGlzLmRlZmF1bHRUb0NvbGxhcHNlZFdoZW5TdWJSb3dDb3VudE1vcmVUaGFuKXtkZWZhdWx0RXhwYW5kZWQ9ZmFsc2U7fWVsc2V7ZGVmYXVsdEV4cGFuZGVkPXRydWU7fQp0aGlzLmV4cGFuZGVkPW1vZGVsU2V0dGluZ3MuZ2V0U2V0dGluZ0Zvcih0aGlzLmdyb3VwaW5nU291cmNlXywnZXhwYW5kZWQnLGRlZmF1bHRFeHBhbmRlZCk7fWVsc2V7dGhpcy5leHBhbmRlZD11bmRlZmluZWQ7fX19LGV4cGFuZGVkU3RhdGVDaGFuZ2VkXygpe2NvbnN0IG1pbkg9TWF0aC5tYXgoMixNYXRoLmNlaWwoMTgvdGhpcy5jaGlsZHJlbi5sZW5ndGgpKTtjb25zdCBoPSh0aGlzLmV4cGFuZGVkXz8xODptaW5IKSsncHgnO2ZvcihsZXQgaT0wO2k8dGhpcy5jaGlsZHJlbi5sZW5ndGg7aSsrKXt0aGlzLmNoaWxkcmVuW2ldLmhlaWdodD1oO2lmKGk9PT0wKXt0aGlzLmNoaWxkcmVuW2ldLmFycm93VmlzaWJsZT10cnVlO30KdGhpcy5jaGlsZHJlbltpXS5leHBhbmRlZD10aGlzLmV4cGFuZGVkO30KaWYodGhpcy5jaGlsZHJlbi5sZW5ndGg9PT0xKXt0aGlzLmNoaWxkcmVuWzBdLmV4cGFuZGVkPXRydWU7dGhpcy5jaGlsZHJlblswXS5hcnJvd1Zpc2libGU9ZmFsc2U7fX0sdXBkYXRlQ29udGVudHNfKCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS51cGRhdGVDb250ZW50c18uY2FsbCh0aGlzKTt0aGlzLmRldGFjaCgpO2lmKHRoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfPT09dW5kZWZpbmVkKXtpZih0aGlzLml0ZW1zVG9Hcm91cF89PT11bmRlZmluZWQpe3JldHVybjt9CmNvbnN0IHN1YlJvd3M9dGhpcy5idWlsZFN1YlJvd3NfKHRoaXMuaXRlbXNUb0dyb3VwXyk7dGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc189c3ViUm93cy5tYXAocm93PT57cmV0dXJue3JvdyxoZWFkaW5nOnVuZGVmaW5lZH07fSk7fQppZih0aGlzLmN1cnJlbnRTdWJSb3dzV2l0aEhlYWRpbmdzXz09PXVuZGVmaW5lZHx8dGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc18ubGVuZ3RoPT09MCl7cmV0dXJuO30KY29uc3QgYWRkU3ViVHJhY2tFeD0oaXRlbXMsb3B0X2hlYWRpbmcpPT57Y29uc3QgdHJhY2s9dGhpcy5hZGRTdWJUcmFja18oaXRlbXMpO2lmKG9wdF9oZWFkaW5nIT09dW5kZWZpbmVkKXt0cmFjay5oZWFkaW5nPW9wdF9oZWFkaW5nO30KdHJhY2suYWRkRXZlbnRMaXN0ZW5lcignaGVhZGluZy1jbGlja2VkJyx0aGlzLm9uSGVhZGluZ0NsaWNrZWRfLmJpbmQodGhpcykpO307aWYodGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc19bMF0uaGVhZGluZyE9PXVuZGVmaW5lZCYmdGhpcy5jdXJyZW50U3ViUm93c1dpdGhIZWFkaW5nc19bMF0uaGVhZGluZyE9PXRoaXMuaGVhZGluZ18pe2FkZFN1YlRyYWNrRXgoW10pO30KZm9yKGNvbnN0IHN1YlJvd1dpdGhIZWFkaW5nIG9mIHRoaXMuY3VycmVudFN1YlJvd3NXaXRoSGVhZGluZ3NfKXtjb25zdCBzdWJSb3c9c3ViUm93V2l0aEhlYWRpbmcucm93O2lmKHN1YlJvdy5sZW5ndGg9PT0wKXtjb250aW51ZTt9CmFkZFN1YlRyYWNrRXgoc3ViUm93LHN1YlJvd1dpdGhIZWFkaW5nLmhlYWRpbmcpO30KdGhpcy51cGRhdGVIZWFkaW5nQW5kVG9vbHRpcF8oKTt0aGlzLmV4cGFuZGVkU3RhdGVDaGFuZ2VkXygpO30sdXBkYXRlSGVhZGluZ0FuZFRvb2x0aXBfKCl7aWYoIVBvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQpcmV0dXJuO1BvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQuaGVhZGluZz10aGlzLmhlYWRpbmdfO1BvbHltZXIuZG9tKHRoaXMpLmZpcnN0Q2hpbGQudG9vbHRpcD10aGlzLnRvb2x0aXBfO30sYnVpbGRTdWJSb3dzXyhpdGVtc1RvR3JvdXApe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxhZGRTdWJUcmFja18oc3ViUm93SXRlbXMpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxhcmVBcnJheUNvbnRlbnRzU2FtZV8oYSxiKXtpZighYXx8IWIpcmV0dXJuIGZhbHNlO2lmKCFhLmxlbmd0aHx8IWIubGVuZ3RoKXJldHVybiBmYWxzZTtpZihhLmxlbmd0aCE9PWIubGVuZ3RoKXJldHVybiBmYWxzZTtmb3IobGV0IGk9MDtpPGEubGVuZ3RoOysraSl7aWYoYVtpXSE9PWJbaV0pcmV0dXJuIGZhbHNlO30KcmV0dXJuIHRydWU7fX07cmV0dXJue011bHRpUm93VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBPYmplY3RJbnN0YW5jZUdyb3VwVHJhY2s9dHIudWkuYi5kZWZpbmUoJ29iamVjdC1pbnN0YW5jZS1ncm91cC10cmFjaycsdHIudWkudHJhY2tzLk11bHRpUm93VHJhY2spO09iamVjdEluc3RhbmNlR3JvdXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ29iamVjdC1pbnN0YW5jZS1ncm91cC10cmFjaycpO3RoaXMub2JqZWN0SW5zdGFuY2VzXz11bmRlZmluZWQ7fSxnZXQgb2JqZWN0SW5zdGFuY2VzKCl7cmV0dXJuIHRoaXMuaXRlbXNUb0dyb3VwO30sc2V0IG9iamVjdEluc3RhbmNlcyhvYmplY3RJbnN0YW5jZXMpe3RoaXMuc2V0SXRlbXNUb0dyb3VwKG9iamVjdEluc3RhbmNlcyk7fSxhZGRTdWJUcmFja18ob2JqZWN0SW5zdGFuY2VzKXtjb25zdCBoYXNNdWx0aXBsZVJvd3M9dGhpcy5zdWJSb3dzLmxlbmd0aD4xO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuT2JqZWN0SW5zdGFuY2VUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5vYmplY3RJbnN0YW5jZXM9b2JqZWN0SW5zdGFuY2VzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTtyZXR1cm4gdHJhY2s7fSxidWlsZFN1YlJvd3NfKG9iamVjdEluc3RhbmNlcyl7b2JqZWN0SW5zdGFuY2VzLnNvcnQoZnVuY3Rpb24oeCx5KXtyZXR1cm4geC5jcmVhdGlvblRzLXkuY3JlYXRpb25Uczt9KTtjb25zdCBzdWJSb3dzPVtdO2ZvcihsZXQgaT0wO2k8b2JqZWN0SW5zdGFuY2VzLmxlbmd0aDtpKyspe2NvbnN0IG9iamVjdEluc3RhbmNlPW9iamVjdEluc3RhbmNlc1tpXTtsZXQgZm91bmQ9ZmFsc2U7Zm9yKGxldCBqPTA7ajxzdWJSb3dzLmxlbmd0aDtqKyspe2NvbnN0IHN1YlJvdz1zdWJSb3dzW2pdO2NvbnN0IGxhc3RJdGVtSW5TdWJSb3c9c3ViUm93W3N1YlJvdy5sZW5ndGgtMV07aWYob2JqZWN0SW5zdGFuY2UuY3JlYXRpb25Ucz49bGFzdEl0ZW1JblN1YlJvdy5kZWxldGlvblRzKXtmb3VuZD10cnVlO3N1YlJvdy5wdXNoKG9iamVjdEluc3RhbmNlKTticmVhazt9fQppZighZm91bmQpe3N1YlJvd3MucHVzaChbb2JqZWN0SW5zdGFuY2VdKTt9fQpyZXR1cm4gc3ViUm93czt9LHVwZGF0ZUhlYWRpbmdBbmRUb29sdGlwXygpe319O3JldHVybntPYmplY3RJbnN0YW5jZUdyb3VwVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBBc3luY1NsaWNlR3JvdXBUcmFjaz10ci51aS5iLmRlZmluZSgnYXN5bmMtc2xpY2UtZ3JvdXAtdHJhY2snLHRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrKTtBc3luY1NsaWNlR3JvdXBUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2FzeW5jLXNsaWNlLWdyb3VwLXRyYWNrJyk7dGhpcy5ncm91cF89dW5kZWZpbmVkO30sYWRkU3ViVHJhY2tfKHNsaWNlcyl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5TbGljZVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnNsaWNlcz1zbGljZXM7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO3RyYWNrLmFzeW5jU3R5bGU9dHJ1ZTtyZXR1cm4gdHJhY2s7fSxnZXQgZ3JvdXAoKXtyZXR1cm4gdGhpcy5ncm91cF87fSxzZXQgZ3JvdXAoZ3JvdXApe3RoaXMuZ3JvdXBfPWdyb3VwO3RoaXMuYnVpbGRBbmRTZXRTdWJSb3dzXygpO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMuZ3JvdXA7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUuYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnRhaW5lclRvVHJhY2tNYXAuYWRkQ29udGFpbmVyKHRoaXMuZ3JvdXAsdGhpcyk7fSxidWlsZEFuZFNldFN1YlJvd3NfKCl7aWYodGhpcy5ncm91cF8udmlld1N1Ykdyb3Vwcy5sZW5ndGg8PTEpe2NvbnN0IHJvd3M9Z3JvdXBBc3luY1NsaWNlc0ludG9TdWJSb3dzKHRoaXMuZ3JvdXBfLnNsaWNlcyk7Y29uc3Qgcm93c1dpdGhIZWFkaW5ncz1yb3dzLm1hcChyb3c9PntyZXR1cm57cm93LGhlYWRpbmc6dW5kZWZpbmVkfTt9KTt0aGlzLnNldFByZWJ1aWx0U3ViUm93cyh0aGlzLmdyb3VwXyxyb3dzV2l0aEhlYWRpbmdzKTtyZXR1cm47fQpjb25zdCByb3dzV2l0aEhlYWRpbmdzPVtdO2Zvcihjb25zdCBzdWJHcm91cCBvZiB0aGlzLmdyb3VwXy52aWV3U3ViR3JvdXBzKXtjb25zdCBzdWJHcm91cFJvd3M9Z3JvdXBBc3luY1NsaWNlc0ludG9TdWJSb3dzKHN1Ykdyb3VwLnNsaWNlcyk7aWYoc3ViR3JvdXBSb3dzLmxlbmd0aD09PTApe2NvbnRpbnVlO30KZm9yKGxldCBpPTA7aTxzdWJHcm91cFJvd3MubGVuZ3RoO2krKyl7cm93c1dpdGhIZWFkaW5ncy5wdXNoKHtyb3c6c3ViR3JvdXBSb3dzW2ldLGhlYWRpbmc6KGk9PT0wP3N1Ykdyb3VwLnRpdGxlOicnKX0pO319CnRoaXMuc2V0UHJlYnVpbHRTdWJSb3dzKHRoaXMuZ3JvdXBfLHJvd3NXaXRoSGVhZGluZ3MpO319O2Z1bmN0aW9uIHN0cmlwU2xpY2VfKHNsaWNlKXtpZihzbGljZS5zdWJTbGljZXMhPT11bmRlZmluZWQmJnNsaWNlLnN1YlNsaWNlcy5sZW5ndGg9PT0xKXtjb25zdCBzdWJTbGljZT1zbGljZS5zdWJTbGljZXNbMF07aWYodHIuYi5tYXRoLmFwcHJveGltYXRlbHkoc3ViU2xpY2Uuc3RhcnQsc2xpY2Uuc3RhcnQsMSkmJnRyLmIubWF0aC5hcHByb3hpbWF0ZWx5KHN1YlNsaWNlLmR1cmF0aW9uLHNsaWNlLmR1cmF0aW9uLDEpKXtyZXR1cm4gc3ViU2xpY2U7fX0KcmV0dXJuIHNsaWNlO30KZnVuY3Rpb24gbWFrZUxldmVsU3ViUm93c18oc2xpY2VzKXtjb25zdCByb3dzPVtdO2NvbnN0IHB1dFNsaWNlPShzbGljZSxsZXZlbCk9Pnt3aGlsZShyb3dzLmxlbmd0aDw9bGV2ZWwpe3Jvd3MucHVzaChbXSk7fQpyb3dzW2xldmVsXS5wdXNoKHNsaWNlKTt9O2NvbnN0IHB1dFNsaWNlUmVjdXJzaXZlbHk9KHNsaWNlLGxldmVsKT0+e3B1dFNsaWNlKHNsaWNlLGxldmVsKTtpZihzbGljZS5zdWJTbGljZXMhPT11bmRlZmluZWQpe2Zvcihjb25zdCBzdWJTbGljZSBvZiBzbGljZS5zdWJTbGljZXMpe3B1dFNsaWNlUmVjdXJzaXZlbHkoc3ViU2xpY2UsbGV2ZWwrMSk7fX19O2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXMpe3B1dFNsaWNlUmVjdXJzaXZlbHkoc3RyaXBTbGljZV8oc2xpY2UpLDApO30KcmV0dXJuIHJvd3M7fQpmdW5jdGlvbiBncm91cEFzeW5jU2xpY2VzSW50b1N1YlJvd3Moc2xpY2VzLG9wdF9za2lwU29ydCl7aWYoIW9wdF9za2lwU29ydCl7c2xpY2VzLnNvcnQoKHgseSk9Pnguc3RhcnQteS5zdGFydCk7fQpjb25zdCByb3dzPVtdO2xldCBzbGljZXNMZWZ0PXNsaWNlczt3aGlsZShzbGljZXNMZWZ0Lmxlbmd0aCE9PTApe2NvbnN0IGZpdD1bXTtjb25zdCB1bmZpdD1bXTtsZXQgbGV2ZWxFbmRUaW1lPS0xO2Zvcihjb25zdCBzbGljZSBvZiBzbGljZXNMZWZ0KXtpZihzbGljZS5zdGFydD49bGV2ZWxFbmRUaW1lKXtsZXZlbEVuZFRpbWU9c2xpY2UuZW5kO2ZpdC5wdXNoKHNsaWNlKTt9ZWxzZXt1bmZpdC5wdXNoKHNsaWNlKTt9fQpyb3dzLnB1c2goLi4ubWFrZUxldmVsU3ViUm93c18oZml0KSk7c2xpY2VzTGVmdD11bmZpdDt9CnJldHVybiByb3dzO30KcmV0dXJue0FzeW5jU2xpY2VHcm91cFRyYWNrLGdyb3VwQXN5bmNTbGljZXNJbnRvU3ViUm93cyx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFNhbXBsZVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdzYW1wbGUtdHJhY2snLHRyLnVpLnRyYWNrcy5SZWN0VHJhY2spO1NhbXBsZVRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5SZWN0VHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuUmVjdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO30sZ2V0IHNhbXBsZXMoKXtyZXR1cm4gdGhpcy5yZWN0czt9LHNldCBzYW1wbGVzKHNhbXBsZXMpe3RoaXMucmVjdHM9c2FtcGxlczt9fTtyZXR1cm57U2FtcGxlVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBTbGljZUdyb3VwVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3NsaWNlLWdyb3VwLXRyYWNrJyx0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjayk7U2xpY2VHcm91cFRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLk11bHRpUm93VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnc2xpY2UtZ3JvdXAtdHJhY2snKTt0aGlzLmdyb3VwXz11bmRlZmluZWQ7dGhpcy5kZWZhdWx0VG9Db2xsYXBzZWRXaGVuU3ViUm93Q291bnRNb3JlVGhhbj0xMDA7fSxhZGRTdWJUcmFja18oc2xpY2VzKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suc2xpY2VzPXNsaWNlcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7cmV0dXJuIHRyYWNrO30sZ2V0IGdyb3VwKCl7cmV0dXJuIHRoaXMuZ3JvdXBfO30sc2V0IGdyb3VwKGdyb3VwKXt0aGlzLmdyb3VwXz1ncm91cDt0aGlzLnNldEl0ZW1zVG9Hcm91cCh0aGlzLmdyb3VwXy5zbGljZXMsdGhpcy5ncm91cF8pO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMuZ3JvdXA7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt0ci51aS50cmFja3MuTXVsdGlSb3dUcmFjay5wcm90b3R5cGUuYWRkQ29udGFpbmVyc1RvVHJhY2tNYXAuYXBwbHkodGhpcyxhcmd1bWVudHMpO2NvbnRhaW5lclRvVHJhY2tNYXAuYWRkQ29udGFpbmVyKHRoaXMuZ3JvdXAsdGhpcyk7fSxidWlsZFN1YlJvd3NfKHNsaWNlcyl7Y29uc3QgcHJlY2lzaW9uVW5pdD10aGlzLmdyb3VwLm1vZGVsLmludHJpbnNpY1RpbWVVbml0O2lmKCFzbGljZXMubGVuZ3RoKXJldHVybltdO2NvbnN0IG9wcz1bXTtmb3IobGV0IGk9MDtpPHNsaWNlcy5sZW5ndGg7aSsrKXtpZihzbGljZXNbaV0uc3ViU2xpY2VzKXtzbGljZXNbaV0uc3ViU2xpY2VzLnNwbGljZSgwLHNsaWNlc1tpXS5zdWJTbGljZXMubGVuZ3RoKTt9Cm9wcy5wdXNoKGkpO30Kb3BzLnNvcnQoZnVuY3Rpb24oaXgsaXkpe2NvbnN0IHg9c2xpY2VzW2l4XTtjb25zdCB5PXNsaWNlc1tpeV07aWYoeC5zdGFydCE9PXkuc3RhcnQpcmV0dXJuIHguc3RhcnQteS5zdGFydDtyZXR1cm4gaXgtaXk7fSk7Y29uc3Qgc3ViUm93cz1bW11dO3RoaXMuYmFkU2xpY2VzXz1bXTtmb3IobGV0IGk9MDtpPG9wcy5sZW5ndGg7aSsrKXtjb25zdCBvcD1vcHNbaV07Y29uc3Qgc2xpY2U9c2xpY2VzW29wXTtsZXQgaW5zZXJ0ZWQ9ZmFsc2U7Zm9yKGxldCBqPXN1YlJvd3MubGVuZ3RoLTE7aj49MDtqLS0pe2lmKHN1YlJvd3Nbal0ubGVuZ3RoPT09MCljb250aW51ZTtjb25zdCBpbnNlcnRlZFNsaWNlPXN1YlJvd3Nbal1bc3ViUm93c1tqXS5sZW5ndGgtMV07aWYoc2xpY2Uuc3RhcnQ8aW5zZXJ0ZWRTbGljZS5zdGFydCl7dGhpcy5iYWRTbGljZXNfLnB1c2goc2xpY2UpO2luc2VydGVkPXRydWU7fQppZihpbnNlcnRlZFNsaWNlLmJvdW5kcyhzbGljZSxwcmVjaXNpb25Vbml0KSl7d2hpbGUoc3ViUm93cy5sZW5ndGg8PWorMSl7c3ViUm93cy5wdXNoKFtdKTt9CnN1YlJvd3NbaisxXS5wdXNoKHNsaWNlKTtpZihpbnNlcnRlZFNsaWNlLnN1YlNsaWNlcyl7aW5zZXJ0ZWRTbGljZS5zdWJTbGljZXMucHVzaChzbGljZSk7fQppbnNlcnRlZD10cnVlO2JyZWFrO319CmlmKGluc2VydGVkKWNvbnRpbnVlO3N1YlJvd3NbMF0ucHVzaChzbGljZSk7fQpyZXR1cm4gc3ViUm93czt9fTtyZXR1cm57U2xpY2VHcm91cFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgVGhyZWFkVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3RocmVhZC10cmFjaycsdHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrKTtUaHJlYWRUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgndGhyZWFkLXRyYWNrJyk7dGhpcy5oZWFkaW5nXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWhlYWRpbmcnKTt9LGdldCB0aHJlYWQoKXtyZXR1cm4gdGhpcy50aHJlYWRfO30sc2V0IHRocmVhZCh0aHJlYWQpe3RoaXMudGhyZWFkXz10aHJlYWQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybiB0aGlzLnRyYWNrc18ubGVuZ3RoPjA7fSxnZXQgaGFzU2xpY2VzKCl7cmV0dXJuIHRoaXMudGhyZWFkXy5hc3luY1NsaWNlR3JvdXAubGVuZ3RoPjB8fHRoaXMudGhyZWFkXy5zbGljZUdyb3VwLmxlbmd0aD4wO30sZ2V0IGhhc1RpbWVTbGljZXMoKXtyZXR1cm4gdGhpcy50aHJlYWRfLnRpbWVTbGljZXM7fSxnZXQgZXZlbnRDb250YWluZXIoKXtyZXR1cm4gdGhpcy50aHJlYWQ7fSxhZGRDb250YWluZXJzVG9UcmFja01hcChjb250YWluZXJUb1RyYWNrTWFwKXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmFkZENvbnRhaW5lcnNUb1RyYWNrTWFwLmFwcGx5KHRoaXMsYXJndW1lbnRzKTtjb250YWluZXJUb1RyYWNrTWFwLmFkZENvbnRhaW5lcih0aGlzLnRocmVhZCx0aGlzKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuZGV0YWNoKCk7aWYoIXRoaXMudGhyZWFkXylyZXR1cm47dGhpcy5oZWFkaW5nXy5oZWFkaW5nPXRoaXMudGhyZWFkXy51c2VyRnJpZW5kbHlOYW1lO3RoaXMuaGVhZGluZ18udG9vbHRpcD10aGlzLnRocmVhZF8udXNlckZyaWVuZGx5RGV0YWlscztpZih0aGlzLnRocmVhZF8uYXN5bmNTbGljZUdyb3VwLmxlbmd0aCl7dGhpcy5hcHBlbmRBc3luY1NsaWNlVHJhY2tzXygpO30KdGhpcy5hcHBlbmRUaHJlYWRTYW1wbGVzVHJhY2tzXygpO2xldCBuZWVkc0hlYWRpbmc9ZmFsc2U7aWYodGhpcy50aHJlYWRfLnRpbWVTbGljZXMpe2NvbnN0IHRpbWVTbGljZXNUcmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlVHJhY2sodGhpcy52aWV3cG9ydCk7dGltZVNsaWNlc1RyYWNrLmhlYWRpbmc9Jyc7dGltZVNsaWNlc1RyYWNrLmhlaWdodD10ci51aS5iLlRISU5fU0xJQ0VfSEVJR0hUKydweCc7dGltZVNsaWNlc1RyYWNrLnNsaWNlcz10aGlzLnRocmVhZF8udGltZVNsaWNlcztpZih0aW1lU2xpY2VzVHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpe25lZWRzSGVhZGluZz10cnVlO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRpbWVTbGljZXNUcmFjayk7fX0KaWYodGhpcy50aHJlYWRfLnNsaWNlR3JvdXAubGVuZ3RoKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlNsaWNlR3JvdXBUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5oZWFkaW5nPXRoaXMudGhyZWFkXy51c2VyRnJpZW5kbHlOYW1lO3RyYWNrLnRvb2x0aXA9dGhpcy50aHJlYWRfLnVzZXJGcmllbmRseURldGFpbHM7dHJhY2suZ3JvdXA9dGhpcy50aHJlYWRfLnNsaWNlR3JvdXA7aWYodHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpe25lZWRzSGVhZGluZz1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fX0KaWYobmVlZHNIZWFkaW5nKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLmhlYWRpbmdfKTt9fSxhcHBlbmRBc3luY1NsaWNlVHJhY2tzXygpe2NvbnN0IHN1Ykdyb3Vwcz10aGlzLnRocmVhZF8uYXN5bmNTbGljZUdyb3VwLnZpZXdTdWJHcm91cHM7c3ViR3JvdXBzLmZvckVhY2goZnVuY3Rpb24oc3ViR3JvdXApe2NvbnN0IGFzeW5jVHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5Bc3luY1NsaWNlR3JvdXBUcmFjayh0aGlzLnZpZXdwb3J0KTthc3luY1RyYWNrLmdyb3VwPXN1Ykdyb3VwO2FzeW5jVHJhY2suaGVhZGluZz1zdWJHcm91cC50aXRsZTtpZihhc3luY1RyYWNrLmhhc1Zpc2libGVDb250ZW50KXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChhc3luY1RyYWNrKTt9fSx0aGlzKTt9LGFwcGVuZFRocmVhZFNhbXBsZXNUcmFja3NfKCl7Y29uc3QgdGhyZWFkU2FtcGxlcz10aGlzLnRocmVhZF8uc2FtcGxlcztpZih0aHJlYWRTYW1wbGVzPT09dW5kZWZpbmVkfHx0aHJlYWRTYW1wbGVzLmxlbmd0aD09PTApe3JldHVybjt9CmNvbnN0IHNhbXBsZXNCeVRpdGxlPXt9O3RocmVhZFNhbXBsZXMuZm9yRWFjaChmdW5jdGlvbihzYW1wbGUpe2lmKHNhbXBsZXNCeVRpdGxlW3NhbXBsZS50aXRsZV09PT11bmRlZmluZWQpe3NhbXBsZXNCeVRpdGxlW3NhbXBsZS50aXRsZV09W107fQpzYW1wbGVzQnlUaXRsZVtzYW1wbGUudGl0bGVdLnB1c2goc2FtcGxlKTt9KTtjb25zdCBzYW1wbGVUaXRsZXM9T2JqZWN0LmtleXMoc2FtcGxlc0J5VGl0bGUpO3NhbXBsZVRpdGxlcy5zb3J0KCk7c2FtcGxlVGl0bGVzLmZvckVhY2goZnVuY3Rpb24oc2FtcGxlVGl0bGUpe2NvbnN0IHNhbXBsZXM9c2FtcGxlc0J5VGl0bGVbc2FtcGxlVGl0bGVdO2NvbnN0IHNhbXBsZXNUcmFjaz1uZXcgdHIudWkudHJhY2tzLlNhbXBsZVRyYWNrKHRoaXMudmlld3BvcnQpO3NhbXBsZXNUcmFjay5ncm91cD10aGlzLnRocmVhZF87c2FtcGxlc1RyYWNrLnNhbXBsZXM9c2FtcGxlcztzYW1wbGVzVHJhY2suaGVhZGluZz10aGlzLnRocmVhZF8udXNlckZyaWVuZGx5TmFtZSsnOiAnKwpzYW1wbGVUaXRsZTtzYW1wbGVzVHJhY2sudG9vbHRpcD10aGlzLnRocmVhZF8udXNlckZyaWVuZGx5RGV0YWlscztzYW1wbGVzVHJhY2suc2VsZWN0aW9uR2VuZXJhdG9yPWZ1bmN0aW9uKCl7Y29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2ZvcihsZXQgaT0wO2k8c2FtcGxlc1RyYWNrLnNhbXBsZXMubGVuZ3RoO2krKyl7c2VsZWN0aW9uLnB1c2goc2FtcGxlc1RyYWNrLnNhbXBsZXNbaV0pO30KcmV0dXJuIHNlbGVjdGlvbjt9O1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHNhbXBsZXNUcmFjayk7fSx0aGlzKTt9LGNvbGxhcHNlZERpZENoYW5nZShjb2xsYXBzZWQpe2lmKGNvbGxhcHNlZCl7bGV0IGg9cGFyc2VJbnQodGhpcy50cmFja3NbMF0uaGVpZ2h0KTtmb3IobGV0IGk9MDtpPHRoaXMudHJhY2tzLmxlbmd0aDsrK2kpe2lmKGg+Mil7dGhpcy50cmFja3NbaV0uaGVpZ2h0PU1hdGguZmxvb3IoaCkrJ3B4Jzt9ZWxzZXt0aGlzLnRyYWNrc1tpXS5zdHlsZS5kaXNwbGF5PSdub25lJzt9Cmg9aCowLjU7fX1lbHNle2ZvcihsZXQgaT0wO2k8dGhpcy50cmFja3MubGVuZ3RoOysraSl7dGhpcy50cmFja3NbaV0uaGVpZ2h0PXRoaXMudHJhY2tzWzBdLmhlaWdodDt0aGlzLnRyYWNrc1tpXS5zdHlsZS5kaXNwbGF5PScnO319fX07cmV0dXJue1RocmVhZFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgT3RoZXJUaHJlYWRzVHJhY2s9dHIudWkuYi5kZWZpbmUoJ290aGVyLXRocmVhZHMtdHJhY2snLHRyLnVpLnRyYWNrcy5PdGhlclRocmVhZHNUcmFjayk7Y29uc3QgU3BhY2luZ1RyYWNrPXRyLnVpLnRyYWNrcy5TcGFjaW5nVHJhY2s7T3RoZXJUaHJlYWRzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuaGVhZGVyXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWhlYWRpbmcnKTt0aGlzLmhlYWRlcl8uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLHRoaXMub25IZWFkZXJDbGlja18uYmluZCh0aGlzKSk7dGhpcy5oZWFkZXJfLmhlYWRpbmc9J090aGVyIFRocmVhZHMnO3RoaXMuaGVhZGVyXy50b29sdGlwPSdUaHJlYWRzIHdpdGggb25seSBzY2hlZHVsaW5nIGluZm9ybWF0aW9uJzt0aGlzLmhlYWRlcl8uYXJyb3dWaXNpYmxlPXRydWU7dGhpcy50aHJlYWRzXz1bXTt0aGlzLmV4cGFuZGVkPWZhbHNlO3RoaXMuY29sbGFwc2libGVfPXRydWU7fSxzZXQgdGhyZWFkcyh0aHJlYWRzKXt0aGlzLnRocmVhZHNfPXRocmVhZHM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHNldCBjb2xsYXBzaWJsZShjb2xsYXBzaWJsZSl7dGhpcy5jb2xsYXBzaWJsZV89Y29sbGFwc2libGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LG9uSGVhZGVyQ2xpY2tfKGUpe2Uuc3RvcFByb3BhZ2F0aW9uKCk7ZS5wcmV2ZW50RGVmYXVsdCgpO3RoaXMuZXhwYW5kZWQ9IXRoaXMuZXhwYW5kZWQ7fSxnZXQgZXhwYW5kZWQoKXtyZXR1cm4gdGhpcy5oZWFkZXJfLmV4cGFuZGVkO30sc2V0IGV4cGFuZGVkKGV4cGFuZGVkKXtleHBhbmRlZD0hIWV4cGFuZGVkO2lmKHRoaXMuZXhwYW5kZWQ9PT1leHBhbmRlZClyZXR1cm47dGhpcy5oZWFkZXJfLmV4cGFuZGVkPWV4cGFuZGVkO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlQ29udGVudHNfKCl7dGhpcy5kZXRhY2goKTtpZih0aGlzLmNvbGxhcHNpYmxlXyl7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodGhpcy5oZWFkZXJfKTt9CmlmKHRoaXMuZXhwYW5kZWR8fCF0aGlzLmNvbGxhcHNpYmxlXyl7Zm9yKGNvbnN0IHRocmVhZCBvZiB0aGlzLnRocmVhZHNfKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlRocmVhZFRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnRocmVhZD10aHJlYWQ7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobmV3IFNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fX19fTtyZXR1cm57T3RoZXJUaHJlYWRzVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IFByb2Nlc3NTdW1tYXJ5VHJhY2s9dHIudWkuYi5kZWZpbmUoJ3Byb2Nlc3Mtc3VtbWFyeS10cmFjaycsdHIudWkudHJhY2tzLlJlY3RUcmFjayk7UHJvY2Vzc1N1bW1hcnlUcmFjay5idWlsZFJlY3RzRnJvbVByb2Nlc3M9ZnVuY3Rpb24ocHJvY2Vzcyl7aWYoIXByb2Nlc3MpcmV0dXJuW107Y29uc3Qgb3BzPVtdO2NvbnN0IHB1c2hPcD1mdW5jdGlvbihpc1N0YXJ0LHRpbWUsc2xpY2Upe29wcy5wdXNoKHtpc1N0YXJ0LHRpbWUsc2xpY2V9KTt9O2Zvcihjb25zdCB0aWQgaW4gcHJvY2Vzcy50aHJlYWRzKXtjb25zdCBzbGljZUdyb3VwPXByb2Nlc3MudGhyZWFkc1t0aWRdLnNsaWNlR3JvdXA7c2xpY2VHcm91cC50b3BMZXZlbFNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtwdXNoT3AodHJ1ZSxzbGljZS5zdGFydCx1bmRlZmluZWQpO3B1c2hPcChmYWxzZSxzbGljZS5lbmQsdW5kZWZpbmVkKTt9KTtzbGljZUdyb3VwLnNsaWNlcy5mb3JFYWNoKGZ1bmN0aW9uKHNsaWNlKXtpZihzbGljZS5pbXBvcnRhbnQpe3B1c2hPcCh0cnVlLHNsaWNlLnN0YXJ0LHNsaWNlKTtwdXNoT3AoZmFsc2Usc2xpY2UuZW5kLHNsaWNlKTt9fSk7fQpvcHMuc29ydChmdW5jdGlvbihhLGIpe3JldHVybiBhLnRpbWUtYi50aW1lO30pO2NvbnN0IHJlY3RzPVtdO2NvbnN0IGdlbmVyaWNDb2xvcklkPUNvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ2dlbmVyaWNfd29yaycpO2NvbnN0IHB1c2hSZWN0PWZ1bmN0aW9uKHN0YXJ0LGVuZCxzbGljZSl7cmVjdHMucHVzaChuZXcgdHIudWkudHJhY2tzLlJlY3Qoc2xpY2Usc2xpY2U/c2xpY2UudGl0bGU6Jycsc2xpY2U/c2xpY2UuY29sb3JJZDpnZW5lcmljQ29sb3JJZCxzdGFydCxlbmQtc3RhcnQpKTt9O2xldCBkZXB0aD0wO2xldCBjdXJyZW50U2xpY2U9dW5kZWZpbmVkO2xldCBsYXN0U3RhcnQ9dW5kZWZpbmVkO29wcy5mb3JFYWNoKGZ1bmN0aW9uKG9wKXtkZXB0aCs9b3AuaXNTdGFydD8xOi0xO2lmKGN1cnJlbnRTbGljZSl7aWYoIW9wLmlzU3RhcnQmJm9wLnNsaWNlPT09Y3VycmVudFNsaWNlKXtwdXNoUmVjdChsYXN0U3RhcnQsb3AudGltZSxjdXJyZW50U2xpY2UpO2xhc3RTdGFydD1kZXB0aD49MT9vcC50aW1lOnVuZGVmaW5lZDtjdXJyZW50U2xpY2U9dW5kZWZpbmVkO319ZWxzZXtpZihvcC5pc1N0YXJ0KXtpZihkZXB0aD09PTEpe2xhc3RTdGFydD1vcC50aW1lO2N1cnJlbnRTbGljZT1vcC5zbGljZTt9ZWxzZSBpZihvcC5zbGljZSl7aWYob3AudGltZSE9PWxhc3RTdGFydCl7cHVzaFJlY3QobGFzdFN0YXJ0LG9wLnRpbWUsdW5kZWZpbmVkKTtsYXN0U3RhcnQ9b3AudGltZTt9CmN1cnJlbnRTbGljZT1vcC5zbGljZTt9fWVsc2V7aWYoZGVwdGg9PT0wKXtwdXNoUmVjdChsYXN0U3RhcnQsb3AudGltZSx1bmRlZmluZWQpO2xhc3RTdGFydD11bmRlZmluZWQ7fX19fSk7cmV0dXJuIHJlY3RzO307UHJvY2Vzc1N1bW1hcnlUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuUmVjdFRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLlJlY3RUcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTt9LGdldCBwcm9jZXNzKCl7cmV0dXJuIHRoaXMucHJvY2Vzc187fSxzZXQgcHJvY2Vzcyhwcm9jZXNzKXt0aGlzLnByb2Nlc3NfPXByb2Nlc3M7dGhpcy5yZWN0cz1Qcm9jZXNzU3VtbWFyeVRyYWNrLmJ1aWxkUmVjdHNGcm9tUHJvY2Vzcyhwcm9jZXNzKTt9fTtyZXR1cm57UHJvY2Vzc1N1bW1hcnlUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IE9iamVjdFNuYXBzaG90Vmlldz10ci51aS5hbmFseXNpcy5PYmplY3RTbmFwc2hvdFZpZXc7Y29uc3QgT2JqZWN0SW5zdGFuY2VWaWV3PXRyLnVpLmFuYWx5c2lzLk9iamVjdEluc3RhbmNlVmlldztjb25zdCBTcGFjaW5nVHJhY2s9dHIudWkudHJhY2tzLlNwYWNpbmdUcmFjaztjb25zdCBQcm9jZXNzVHJhY2tCYXNlPXRyLnVpLmIuZGVmaW5lKCdwcm9jZXNzLXRyYWNrLWJhc2UnLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7UHJvY2Vzc1RyYWNrQmFzZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5wcm9jZXNzQmFzZV89dW5kZWZpbmVkO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3Byb2Nlc3MtdHJhY2stYmFzZScpO1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ2V4cGFuZGVkJyk7dGhpcy5wcm9jZXNzTmFtZUVsXz10ci51aS5iLmNyZWF0ZVNwYW4oKTtQb2x5bWVyLmRvbSh0aGlzLnByb2Nlc3NOYW1lRWxfKS5jbGFzc0xpc3QuYWRkKCdwcm9jZXNzLXRyYWNrLW5hbWUnKTt0aGlzLmNsb3NlRWxfPXRyLnVpLmIuY3JlYXRlU3BhbigpO1BvbHltZXIuZG9tKHRoaXMuY2xvc2VFbF8pLmNsYXNzTGlzdC5hZGQoJ3Byb2Nlc3MtdHJhY2stY2xvc2UnKTt0aGlzLmNsb3NlRWxfLnRleHRDb250ZW50PSdYJzt0aGlzLmhlYWRlckVsXz10ci51aS5iLmNyZWF0ZURpdih7Y2xhc3NOYW1lOidwcm9jZXNzLXRyYWNrLWhlYWRlcid9KTtQb2x5bWVyLmRvbSh0aGlzLmhlYWRlckVsXykuYXBwZW5kQ2hpbGQodGhpcy5wcm9jZXNzTmFtZUVsXyk7UG9seW1lci5kb20odGhpcy5oZWFkZXJFbF8pLmFwcGVuZENoaWxkKHRoaXMuY2xvc2VFbF8pO3RoaXMuaGVhZGVyRWxfLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uSGVhZGVyQ2xpY2tfLmJpbmQodGhpcykpO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMuaGVhZGVyRWxfKTt9LGdldCBwcm9jZXNzQmFzZSgpe3JldHVybiB0aGlzLnByb2Nlc3NCYXNlXzt9LHNldCBwcm9jZXNzQmFzZShwcm9jZXNzQmFzZSl7dGhpcy5wcm9jZXNzQmFzZV89cHJvY2Vzc0Jhc2U7aWYodGhpcy5wcm9jZXNzQmFzZV8pe2NvbnN0IG1vZGVsU2V0dGluZ3M9bmV3IHRyLm1vZGVsLk1vZGVsU2V0dGluZ3ModGhpcy5wcm9jZXNzQmFzZV8ubW9kZWwpO2NvbnN0IGRlZmF1bHRWYWx1ZT10aGlzLnByb2Nlc3NCYXNlXy5pbXBvcnRhbnQ7dGhpcy5leHBhbmRlZD1tb2RlbFNldHRpbmdzLmdldFNldHRpbmdGb3IodGhpcy5wcm9jZXNzQmFzZV8sJ2V4cGFuZGVkJyxkZWZhdWx0VmFsdWUpO30KdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3JldHVybiBQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuY29udGFpbnMoJ2V4cGFuZGVkJyk7fSxzZXQgZXhwYW5kZWQoZXhwYW5kZWQpe2V4cGFuZGVkPSEhZXhwYW5kZWQ7aWYodGhpcy5leHBhbmRlZD09PWV4cGFuZGVkKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QudG9nZ2xlKCdleHBhbmRlZCcpO3RoaXMudmlld3BvcnRfLmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTtpZighdGhpcy5wcm9jZXNzQmFzZV8pcmV0dXJuO2NvbnN0IG1vZGVsU2V0dGluZ3M9bmV3IHRyLm1vZGVsLk1vZGVsU2V0dGluZ3ModGhpcy5wcm9jZXNzQmFzZV8ubW9kZWwpO21vZGVsU2V0dGluZ3Muc2V0U2V0dGluZ0Zvcih0aGlzLnByb2Nlc3NCYXNlXywnZXhwYW5kZWQnLGV4cGFuZGVkKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMudmlld3BvcnQucmVidWlsZEV2ZW50VG9UcmFja01hcCgpO3RoaXMudmlld3BvcnQucmVidWlsZENvbnRhaW5lclRvVHJhY2tNYXAoKTt9LHNldCB2aXNpYmxlKHZpc2libGUpe2lmKHZpc2libGU9PT10aGlzLnZpc2libGUpcmV0dXJuO3RoaXMuaGlkZGVuPSF2aXNpYmxlO3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCd2aXNpYmlsaXR5Jyk7dGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCgpO2lmKCF0aGlzLnByb2Nlc3NCYXNlXylyZXR1cm47dGhpcy51cGRhdGVDb250ZW50c18oKTt0aGlzLnZpZXdwb3J0LnJlYnVpbGRFdmVudFRvVHJhY2tNYXAoKTt0aGlzLnZpZXdwb3J0LnJlYnVpbGRDb250YWluZXJUb1RyYWNrTWFwKCk7fSxnZXQgdmlzaWJsZSgpe3JldHVybiF0aGlzLmhpZGRlbjt9LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe2lmKHRoaXMuZXhwYW5kZWQpe3JldHVybiB0aGlzLmNoaWxkcmVuLmxlbmd0aD4xO30KcmV0dXJuIHRydWU7fSxvbkhlYWRlckNsaWNrXyhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO2UucHJldmVudERlZmF1bHQoKTtpZihlLnRhcmdldD09PXRoaXMuY2xvc2VFbF8pe3RoaXMudmlzaWJsZT1mYWxzZTt9ZWxzZXt0aGlzLmV4cGFuZGVkPSF0aGlzLmV4cGFuZGVkO319LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuY2xlYXJUcmFja3NfKCk7aWYoIXRoaXMucHJvY2Vzc0Jhc2VfKXJldHVybjtpZighdGhpcy52aXNpYmxlKXJldHVybjtQb2x5bWVyLmRvbSh0aGlzLnByb2Nlc3NOYW1lRWxfKS50ZXh0Q29udGVudD10aGlzLnByb2Nlc3NCYXNlXy51c2VyRnJpZW5kbHlOYW1lO3RoaXMuaGVhZGVyRWxfLnRpdGxlPXRoaXMucHJvY2Vzc0Jhc2VfLnVzZXJGcmllbmRseURldGFpbHM7dGhpcy53aWxsQXBwZW5kVHJhY2tzXygpO2lmKHRoaXMuZXhwYW5kZWQpe3RoaXMuYXBwZW5kTWVtb3J5RHVtcFRyYWNrXygpO3RoaXMuYXBwZW5kT2JqZWN0SW5zdGFuY2VUcmFja3NfKCk7dGhpcy5hcHBlbmRDb3VudGVyVHJhY2tzXygpO3RoaXMuYXBwZW5kRnJhbWVUcmFja18oKTt0aGlzLmFwcGVuZFRocmVhZFRyYWNrc18oKTt9ZWxzZXt0aGlzLmFwcGVuZFN1bW1hcnlUcmFja18oKTt9CnRoaXMuZGlkQXBwZW5kVHJhY2tzXygpO30sd2lsbEFwcGVuZFRyYWNrc18oKXt9LGRpZEFwcGVuZFRyYWNrc18oKXt9LGFwcGVuZE1lbW9yeUR1bXBUcmFja18oKXt9LGFwcGVuZFN1bW1hcnlUcmFja18oKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLlByb2Nlc3NTdW1tYXJ5VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2sucHJvY2Vzcz10aGlzLnByb2Nlc3M7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fSxhcHBlbmRGcmFtZVRyYWNrXygpe2NvbnN0IGZyYW1lcz10aGlzLnByb2Nlc3M/dGhpcy5wcm9jZXNzLmZyYW1lczp1bmRlZmluZWQ7aWYoIWZyYW1lc3x8IWZyYW1lcy5sZW5ndGgpcmV0dXJuO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuRnJhbWVUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5mcmFtZXM9ZnJhbWVzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9LGFwcGVuZE9iamVjdEluc3RhbmNlVHJhY2tzXygpe2NvbnN0IGluc3RhbmNlc0J5VHlwZU5hbWU9dGhpcy5wcm9jZXNzQmFzZV8ub2JqZWN0cy5nZXRBbGxJbnN0YW5jZXNCeVR5cGVOYW1lKCk7Y29uc3QgaW5zdGFuY2VUeXBlTmFtZXM9T2JqZWN0LmtleXMoaW5zdGFuY2VzQnlUeXBlTmFtZSk7aW5zdGFuY2VUeXBlTmFtZXMuc29ydCgpO2xldCBkaWRBcHBlbmRBdExlYXN0T25lVHJhY2s9ZmFsc2U7aW5zdGFuY2VUeXBlTmFtZXMuZm9yRWFjaChmdW5jdGlvbih0eXBlTmFtZSl7Y29uc3QgYWxsSW5zdGFuY2VzPWluc3RhbmNlc0J5VHlwZU5hbWVbdHlwZU5hbWVdO2xldCBpbnN0YW5jZVZpZXdJbmZvPU9iamVjdEluc3RhbmNlVmlldy5nZXRUeXBlSW5mbyh1bmRlZmluZWQsdHlwZU5hbWUpO2xldCBzbmFwc2hvdFZpZXdJbmZvPU9iamVjdFNuYXBzaG90Vmlldy5nZXRUeXBlSW5mbyh1bmRlZmluZWQsdHlwZU5hbWUpO2lmKGluc3RhbmNlVmlld0luZm8mJiFpbnN0YW5jZVZpZXdJbmZvLm1ldGFkYXRhLnNob3dJblRyYWNrVmlldyl7aW5zdGFuY2VWaWV3SW5mbz11bmRlZmluZWQ7fQppZihzbmFwc2hvdFZpZXdJbmZvJiYhc25hcHNob3RWaWV3SW5mby5tZXRhZGF0YS5zaG93SW5UcmFja1ZpZXcpe3NuYXBzaG90Vmlld0luZm89dW5kZWZpbmVkO30KY29uc3QgaGFzVmlld0luZm89aW5zdGFuY2VWaWV3SW5mb3x8c25hcHNob3RWaWV3SW5mbztjb25zdCB2aXNpYmxlSW5zdGFuY2VzPVtdO2ZvcihsZXQgaT0wO2k8YWxsSW5zdGFuY2VzLmxlbmd0aDtpKyspe2NvbnN0IGluc3RhbmNlPWFsbEluc3RhbmNlc1tpXTtpZihpbnN0YW5jZS5zbmFwc2hvdHMubGVuZ3RoPT09MCljb250aW51ZTtpZihpbnN0YW5jZS5oYXNJbXBsaWNpdFNuYXBzaG90cyYmIWhhc1ZpZXdJbmZvKWNvbnRpbnVlO3Zpc2libGVJbnN0YW5jZXMucHVzaChpbnN0YW5jZSk7fQppZih2aXNpYmxlSW5zdGFuY2VzLmxlbmd0aD09PTApcmV0dXJuO2xldCB0cmFja0NvbnN0cnVjdG9yPXRyLnVpLnRyYWNrcy5PYmplY3RJbnN0YW5jZVRyYWNrLmdldENvbnN0cnVjdG9yKHVuZGVmaW5lZCx0eXBlTmFtZSk7aWYoIXRyYWNrQ29uc3RydWN0b3Ipe3NuYXBzaG90Vmlld0luZm89T2JqZWN0U25hcHNob3RWaWV3LmdldFR5cGVJbmZvKHVuZGVmaW5lZCx0eXBlTmFtZSk7aWYoc25hcHNob3RWaWV3SW5mbyYmc25hcHNob3RWaWV3SW5mby5tZXRhZGF0YS5zaG93SW5zdGFuY2VzKXt0cmFja0NvbnN0cnVjdG9yPXRyLnVpLnRyYWNrcy5PYmplY3RJbnN0YW5jZUdyb3VwVHJhY2s7fWVsc2V7dHJhY2tDb25zdHJ1Y3Rvcj10ci51aS50cmFja3MuT2JqZWN0SW5zdGFuY2VUcmFjazt9fQpjb25zdCB0cmFjaz1uZXcgdHJhY2tDb25zdHJ1Y3Rvcih0aGlzLnZpZXdwb3J0KTt0cmFjay5vYmplY3RJbnN0YW5jZXM9dmlzaWJsZUluc3RhbmNlcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7ZGlkQXBwZW5kQXRMZWFzdE9uZVRyYWNrPXRydWU7fSx0aGlzKTtpZihkaWRBcHBlbmRBdExlYXN0T25lVHJhY2spe1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG5ldyBTcGFjaW5nVHJhY2sodGhpcy52aWV3cG9ydCkpO319LGFwcGVuZENvdW50ZXJUcmFja3NfKCl7Y29uc3QgY291bnRlcnM9T2JqZWN0LnZhbHVlcyh0aGlzLnByb2Nlc3NCYXNlLmNvdW50ZXJzKTtjb3VudGVycy5zb3J0KHRyLm1vZGVsLkNvdW50ZXIuY29tcGFyZSk7Y291bnRlcnMuZm9yRWFjaChmdW5jdGlvbihjb3VudGVyKXtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkNvdW50ZXJUcmFjayh0aGlzLnZpZXdwb3J0KTt0cmFjay5jb3VudGVyPWNvdW50ZXI7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKG5ldyBTcGFjaW5nVHJhY2sodGhpcy52aWV3cG9ydCkpO30uYmluZCh0aGlzKSk7fSxhcHBlbmRUaHJlYWRUcmFja3NfKCl7Y29uc3QgdGhyZWFkcz1PYmplY3QudmFsdWVzKHRoaXMucHJvY2Vzc0Jhc2UudGhyZWFkcyk7dGhyZWFkcy5zb3J0KHRyLm1vZGVsLlRocmVhZC5jb21wYXJlKTtjb25zdCBvdGhlclRocmVhZHM9W107bGV0IGhhc1Zpc2libGVUaHJlYWRzPWZhbHNlO3RocmVhZHMuZm9yRWFjaChmdW5jdGlvbih0aHJlYWQpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuVGhyZWFkVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2sudGhyZWFkPXRocmVhZDtpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuO2lmKHRyYWNrLmhhc1NsaWNlcyl7aGFzVmlzaWJsZVRocmVhZHM9dHJ1ZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobmV3IFNwYWNpbmdUcmFjayh0aGlzLnZpZXdwb3J0KSk7fWVsc2UgaWYodHJhY2suaGFzVGltZVNsaWNlcyl7b3RoZXJUaHJlYWRzLnB1c2godGhyZWFkKTt9fS5iaW5kKHRoaXMpKTtpZihvdGhlclRocmVhZHMubGVuZ3RoPjApe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuT3RoZXJUaHJlYWRzVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2sudGhyZWFkcz1vdGhlclRocmVhZHM7dHJhY2suY29sbGFwc2libGU9b3RoZXJUaHJlYWRzLmxlbmd0aD4xJiZoYXNWaXNpYmxlVGhyZWFkcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fX19O3JldHVybntQcm9jZXNzVHJhY2tCYXNlLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgQ3B1PXRyLm1vZGVsLkNwdTtjb25zdCBDcHVUcmFjaz10ci51aS50cmFja3MuY3B1X3RyYWNrO2NvbnN0IFByb2Nlc3NUcmFja0Jhc2U9dHIudWkudHJhY2tzLlByb2Nlc3NUcmFja0Jhc2U7Y29uc3QgU3BhY2luZ1RyYWNrPXRyLnVpLnRyYWNrcy5TcGFjaW5nVHJhY2s7Y29uc3QgS2VybmVsVHJhY2s9dHIudWkuYi5kZWZpbmUoJ2tlcm5lbC10cmFjaycsUHJvY2Vzc1RyYWNrQmFzZSk7S2VybmVsVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186UHJvY2Vzc1RyYWNrQmFzZS5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe1Byb2Nlc3NUcmFja0Jhc2UucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7fSxzZXQga2VybmVsKGtlcm5lbCl7dGhpcy5wcm9jZXNzQmFzZT1rZXJuZWw7fSxnZXQga2VybmVsKCl7cmV0dXJuIHRoaXMucHJvY2Vzc0Jhc2U7fSxnZXQgZXZlbnRDb250YWluZXIoKXtyZXR1cm4gdGhpcy5rZXJuZWw7fSxnZXQgaGFzVmlzaWJsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MTt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe3RyLnVpLnRyYWNrcy5Qcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5jYWxsKHRoaXMsY29udGFpbmVyVG9UcmFja01hcCk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy5rZXJuZWwsdGhpcyk7fSx3aWxsQXBwZW5kVHJhY2tzXygpe2NvbnN0IGNwdXM9T2JqZWN0LnZhbHVlcyh0aGlzLmtlcm5lbC5jcHVzKTtjcHVzLnNvcnQodHIubW9kZWwuQ3B1LmNvbXBhcmUpO2xldCBkaWRBcHBlbmRBdExlYXN0T25lVHJhY2s9ZmFsc2U7Zm9yKGxldCBpPTA7aTxjcHVzLmxlbmd0aDsrK2kpe2NvbnN0IGNwdT1jcHVzW2ldO2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuQ3B1VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suZGV0YWlsZWRNb2RlPXRoaXMuZXhwYW5kZWQ7dHJhY2suY3B1PWNwdTtpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpY29udGludWU7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO2RpZEFwcGVuZEF0TGVhc3RPbmVUcmFjaz10cnVlO30KaWYoZGlkQXBwZW5kQXRMZWFzdE9uZVRyYWNrKXtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChuZXcgU3BhY2luZ1RyYWNrKHRoaXMudmlld3BvcnQpKTt9fX07cmV0dXJue0tlcm5lbFRyYWNrLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS50cmFja3MnLGZ1bmN0aW9uKCl7Y29uc3QgSW50ZXJhY3Rpb25UcmFjaz10ci51aS5iLmRlZmluZSgnaW50ZXJhY3Rpb24tdHJhY2snLHRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrKTtJbnRlcmFjdGlvblRyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5NdWx0aVJvd1RyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLk11bHRpUm93VHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7dGhpcy5oZWFkaW5nPSdJbnRlcmFjdGlvbnMnO3RoaXMuc3ViUm93c189W107fSxzZXQgbW9kZWwobW9kZWwpe3RoaXMuc2V0SXRlbXNUb0dyb3VwKG1vZGVsLnVzZXJNb2RlbC5leHBlY3RhdGlvbnMse2d1aWQ6dHIuYi5HVUlELmFsbG9jYXRlU2ltcGxlKCksbW9kZWwsZ2V0U2V0dGluZ3NLZXkoKXtyZXR1cm4gdW5kZWZpbmVkO319KTt9LGJ1aWxkU3ViUm93c18oc2xpY2VzKXtpZih0aGlzLnN1YlJvd3NfLmxlbmd0aCl7cmV0dXJuIHRoaXMuc3ViUm93c187fQp0aGlzLnN1YlJvd3NfLnB1c2goLi4udHIudWkudHJhY2tzLmdyb3VwQXN5bmNTbGljZXNJbnRvU3ViUm93cyhzbGljZXMsdHJ1ZSkpO3JldHVybiB0aGlzLnN1YlJvd3NfO30sYWRkU3ViVHJhY2tfKHNsaWNlcyl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5TbGljZVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLnNsaWNlcz1zbGljZXM7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQodHJhY2spO3JldHVybiB0cmFjazt9fTtyZXR1cm57SW50ZXJhY3Rpb25UcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IENvbG9yU2NoZW1lPXRyLmIuQ29sb3JTY2hlbWU7Y29uc3QgTGV0dGVyRG90VHJhY2s9dHIudWkudHJhY2tzLkxldHRlckRvdFRyYWNrO2NvbnN0IE1lbW9yeVRyYWNrPXRyLnVpLmIuZGVmaW5lKCdtZW1vcnktdHJhY2snLExldHRlckRvdFRyYWNrKTtNZW1vcnlUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzpMZXR0ZXJEb3RUcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe0xldHRlckRvdFRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMuY2xhc3NMaXN0LmFkZCgnbWVtb3J5LXRyYWNrJyk7dGhpcy5oZWFkaW5nPSdNZW1vcnkgRXZlbnRzJzt0aGlzLmxvd01lbW9yeUV2ZW50c189dW5kZWZpbmVkO30saW5pdGlhbGl6ZShtb2RlbCl7aWYobW9kZWwhPT11bmRlZmluZWQpe3RoaXMubG93TWVtb3J5RXZlbnRzXz1tb2RlbC5kZXZpY2UubG93TWVtb3J5RXZlbnRzO31lbHNle3RoaXMubG93TWVtb3J5RXZlbnRzXz11bmRlZmluZWQ7fQppZih0aGlzLmhhc1Zpc2libGVDb250ZW50KXt0aGlzLml0ZW1zPXRoaXMuYnVpbGRNZW1vcnlMZXR0ZXJEb3RzXyh0aGlzLmxvd01lbW9yeUV2ZW50c18pO319LGdldCBoYXNWaXNpYmxlQ29udGVudCgpe3JldHVybiEhdGhpcy5sb3dNZW1vcnlFdmVudHNfJiZ0aGlzLmxvd01lbW9yeUV2ZW50c18ubGVuZ3RoIT09MDt9LGJ1aWxkTWVtb3J5TGV0dGVyRG90c18obWVtb3J5RXZlbnRzKXtyZXR1cm4gbWVtb3J5RXZlbnRzLm1hcChtZW1vcnlFdmVudD0+bmV3IHRyLnVpLnRyYWNrcy5MZXR0ZXJEb3QobWVtb3J5RXZlbnQsJ0snLENvbG9yU2NoZW1lLmdldENvbG9ySWRGb3JSZXNlcnZlZE5hbWUoJ2JhY2tncm91bmRfbWVtb3J5X2R1bXAnKSxtZW1vcnlFdmVudC5zdGFydCkpO30sfTtyZXR1cm57TWVtb3J5VHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBBTExPQ0FURURfTUVNT1JZX1RSQUNLX0hFSUdIVD01MDtjb25zdCBQcm9jZXNzTWVtb3J5RHVtcFRyYWNrPXRyLnVpLmIuZGVmaW5lKCdwcm9jZXNzLW1lbW9yeS1kdW1wLXRyYWNrJyx0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2spO1Byb2Nlc3NNZW1vcnlEdW1wVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZSxkZWNvcmF0ZSh2aWV3cG9ydCl7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO3RoaXMubWVtb3J5RHVtcHNfPXVuZGVmaW5lZDt9LGdldCBtZW1vcnlEdW1wcygpe3JldHVybiB0aGlzLm1lbW9yeUR1bXBzXzt9LHNldCBtZW1vcnlEdW1wcyhtZW1vcnlEdW1wcyl7dGhpcy5tZW1vcnlEdW1wc189bWVtb3J5RHVtcHM7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LHVwZGF0ZUNvbnRlbnRzXygpe3RoaXMuY2xlYXJUcmFja3NfKCk7aWYoIXRoaXMubWVtb3J5RHVtcHNffHwhdGhpcy5tZW1vcnlEdW1wc18ubGVuZ3RoKXJldHVybjt0aGlzLmFwcGVuZEFsbG9jYXRlZE1lbW9yeVRyYWNrXygpO30sYXBwZW5kQWxsb2NhdGVkTWVtb3J5VHJhY2tfKCl7Y29uc3Qgc2VyaWVzPXRyLnVpLnRyYWNrcy5idWlsZFByb2Nlc3NBbGxvY2F0ZWRNZW1vcnlDaGFydFNlcmllcyh0aGlzLm1lbW9yeUR1bXBzXyk7aWYoIXNlcmllcylyZXR1cm47Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5DaGFydFRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmhlYWRpbmc9J01lbW9yeSBwZXIgY29tcG9uZW50Jzt0cmFjay5oZWlnaHQ9QUxMT0NBVEVEX01FTU9SWV9UUkFDS19IRUlHSFQrJ3B4Jzt0cmFjay5zZXJpZXM9c2VyaWVzO3RyYWNrLmF1dG9TZXRBbGxBeGVzKHtleHBhbmRNYXg6dHJ1ZX0pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9fTtyZXR1cm57UHJvY2Vzc01lbW9yeUR1bXBUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFByb2Nlc3NUcmFja0Jhc2U9dHIudWkudHJhY2tzLlByb2Nlc3NUcmFja0Jhc2U7Y29uc3QgUHJvY2Vzc1RyYWNrPXRyLnVpLmIuZGVmaW5lKCdwcm9jZXNzLXRyYWNrJyxQcm9jZXNzVHJhY2tCYXNlKTtQcm9jZXNzVHJhY2sucHJvdG90eXBlPXtfX3Byb3RvX186UHJvY2Vzc1RyYWNrQmFzZS5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5Qcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZS5kZWNvcmF0ZS5jYWxsKHRoaXMsdmlld3BvcnQpO30sZHJhd1RyYWNrKHR5cGUpe3N3aXRjaCh0eXBlKXtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5JTlNUQU5UX0VWRU5UOntpZighdGhpcy5wcm9jZXNzQmFzZS5pbnN0YW50RXZlbnRzfHx0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHMubGVuZ3RoPT09MCl7YnJlYWs7fQpjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBib3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52YXNCb3VuZHM9Y3R4LmNhbnZhcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguc2F2ZSgpO2N0eC50cmFuc2xhdGUoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApKTtjb25zdCBkdD10aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2NvbnN0IHZpZXdMV29ybGQ9ZHQueFZpZXdUb1dvcmxkKDApO2NvbnN0IHZpZXdSV29ybGQ9ZHQueFZpZXdUb1dvcmxkKGNhbnZhc0JvdW5kcy53aWR0aCpwaXhlbFJhdGlvKTt0ci51aS5iLmRyYXdJbnN0YW50U2xpY2VzQXNMaW5lcyhjdHgsdGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsYm91bmRzLmhlaWdodCx0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHMsMik7Y3R4LnJlc3RvcmUoKTticmVhazt9CmNhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkJBQ0tHUk9VTkQ6dGhpcy5kcmF3QmFja2dyb3VuZF8oKTtyZXR1cm47fQp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRyYXdUcmFjay5jYWxsKHRoaXMsdHlwZSk7fSxkcmF3QmFja2dyb3VuZF8oKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7Y29uc3QgY2FudmFzQm91bmRzPWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtsZXQgZHJhdz1mYWxzZTtjdHguZmlsbFN0eWxlPScjZWVlJztmb3IobGV0IGk9MDtpPHRoaXMuY2hpbGRyZW4ubGVuZ3RoOysraSl7aWYoISh0aGlzLmNoaWxkcmVuW2ldaW5zdGFuY2VvZiB0ci51aS50cmFja3MuVHJhY2spfHwodGhpcy5jaGlsZHJlbltpXWluc3RhbmNlb2YgdHIudWkudHJhY2tzLlNwYWNpbmdUcmFjaykpe2NvbnRpbnVlO30KZHJhdz0hZHJhdztpZighZHJhdyljb250aW51ZTtjb25zdCBib3VuZHM9dGhpcy5jaGlsZHJlbltpXS5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjdHguZmlsbFJlY3QoMCxwaXhlbFJhdGlvKihib3VuZHMudG9wLWNhbnZhc0JvdW5kcy50b3ApLGN0eC5jYW52YXMud2lkdGgscGl4ZWxSYXRpbypib3VuZHMuaGVpZ2h0KTt9fSxzZXQgcHJvY2Vzcyhwcm9jZXNzKXt0aGlzLnByb2Nlc3NCYXNlPXByb2Nlc3M7fSxnZXQgcHJvY2Vzcygpe3JldHVybiB0aGlzLnByb2Nlc3NCYXNlO30sZ2V0IGV2ZW50Q29udGFpbmVyKCl7cmV0dXJuIHRoaXMucHJvY2Vzczt9LGFkZENvbnRhaW5lcnNUb1RyYWNrTWFwKGNvbnRhaW5lclRvVHJhY2tNYXApe3RyLnVpLnRyYWNrcy5Qcm9jZXNzVHJhY2tCYXNlLnByb3RvdHlwZS5hZGRDb250YWluZXJzVG9UcmFja01hcC5hcHBseSh0aGlzLGFyZ3VtZW50cyk7Y29udGFpbmVyVG9UcmFja01hcC5hZGRDb250YWluZXIodGhpcy5wcm9jZXNzLHRoaXMpO30sYXBwZW5kTWVtb3J5RHVtcFRyYWNrXygpe2NvbnN0IHByb2Nlc3NNZW1vcnlEdW1wcz10aGlzLnByb2Nlc3MubWVtb3J5RHVtcHM7aWYocHJvY2Vzc01lbW9yeUR1bXBzLmxlbmd0aCl7Y29uc3QgcG1kdD1uZXcgdHIudWkudHJhY2tzLlByb2Nlc3NNZW1vcnlEdW1wVHJhY2sodGhpcy52aWV3cG9ydF8pO3BtZHQubWVtb3J5RHVtcHM9cHJvY2Vzc01lbW9yeUR1bXBzO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHBtZHQpO319LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZShsb1dYLGhpV1gsdmlld1BpeFdpZHRoV29ybGQsc2VsZWN0aW9uKXtmdW5jdGlvbiBvblBpY2tIaXQoaW5zdGFudEV2ZW50KXtzZWxlY3Rpb24ucHVzaChpbnN0YW50RXZlbnQpO30KY29uc3QgaW5zdGFudEV2ZW50V2lkdGg9Mip2aWV3UGl4V2lkdGhXb3JsZDt0ci5iLml0ZXJhdGVPdmVySW50ZXJzZWN0aW5nSW50ZXJ2YWxzKHRoaXMucHJvY2Vzc0Jhc2UuaW5zdGFudEV2ZW50cyxmdW5jdGlvbih4KXtyZXR1cm4geC5zdGFydDt9LGZ1bmN0aW9uKHgpe3JldHVybiB4LmR1cmF0aW9uK2luc3RhbnRFdmVudFdpZHRoO30sbG9XWCxoaVdYLG9uUGlja0hpdC5iaW5kKHRoaXMpKTt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXt0aGlzLmFkZENsb3Nlc3RJbnN0YW50RXZlbnRUb1NlbGVjdGlvbih0aGlzLnByb2Nlc3NCYXNlLmluc3RhbnRFdmVudHMsd29ybGRYLHdvcmxkTWF4RGlzdCxzZWxlY3Rpb24pO3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuYWRkQ2xvc2VzdEV2ZW50VG9TZWxlY3Rpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpO319O3JldHVybntQcm9jZXNzVHJhY2ssfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnVpLnRyYWNrcycsZnVuY3Rpb24oKXtjb25zdCBTZWxlY3Rpb25TdGF0ZT10ci5tb2RlbC5TZWxlY3Rpb25TdGF0ZTtjb25zdCBDb2xvclNjaGVtZT10ci5iLkNvbG9yU2NoZW1lO2NvbnN0IEV2ZW50UHJlc2VudGVyPXRyLnVpLmIuRXZlbnRQcmVzZW50ZXI7Y29uc3QgTW9kZWxUcmFjaz10ci51aS5iLmRlZmluZSgnbW9kZWwtdHJhY2snLHRyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjayk7TW9kZWxUcmFjay5WU1lOQ19ISUdITElHSFRfQUxQSEE9MC4xO01vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9UUkFOU1BBUkVOVD0wLjIwO01vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9PUEFRVUU9MC4xMDtNb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfUkFOR0U9TW9kZWxUcmFjay5WU1lOQ19ERU5TSVRZX1RSQU5TUEFSRU5ULU1vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9PUEFRVUU7TW9kZWxUcmFjay5nZW5lcmF0ZVN0cmlwZXNfPWZ1bmN0aW9uKHRpbWVzLG1pblRpbWUsbWF4VGltZSl7aWYodGltZXMubGVuZ3RoPT09MClyZXR1cm5bXTtjb25zdCBsb3dJbmRleD10ci5iLmZpbmRMb3dJbmRleEluU29ydGVkQXJyYXkodGltZXMsKHg9PngpLG1pblRpbWUpO2xldCBoaWdoSW5kZXg9bG93SW5kZXgtMTt3aGlsZSh0aW1lc1toaWdoSW5kZXgrMV08PW1heFRpbWUpe2hpZ2hJbmRleCsrO30KY29uc3Qgc3RyaXBlcz1bXTtmb3IobGV0IGk9bG93SW5kZXgtKGxvd0luZGV4JTIpO2k8PWhpZ2hJbmRleDtpKz0yKXtjb25zdCBsZWZ0PWk8bG93SW5kZXg/bWluVGltZTp0aW1lc1tpXTtjb25zdCByaWdodD1pKzE+aGlnaEluZGV4P21heFRpbWU6dGltZXNbaSsxXTtzdHJpcGVzLnB1c2godHIuYi5tYXRoLlJhbmdlLmZyb21FeHBsaWNpdFJhbmdlKGxlZnQscmlnaHQpKTt9CnJldHVybiBzdHJpcGVzO307TW9kZWxUcmFjay5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLGRlY29yYXRlKHZpZXdwb3J0KXt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmRlY29yYXRlLmNhbGwodGhpcyx2aWV3cG9ydCk7UG9seW1lci5kb20odGhpcykuY2xhc3NMaXN0LmFkZCgnbW9kZWwtdHJhY2snKTt0aGlzLnVwcGVyTW9kZV89ZmFsc2U7dGhpcy5hbm5vdGF0aW9uVmlld3NfPVtdO3RoaXMudlN5bmNUaW1lc189W107fSxnZXQgcHJvY2Vzc1ZpZXdzKCl7cmV0dXJuIFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3JBbGwoJy5wcm9jZXNzLXRyYWNrLWJhc2UnKTt9LGdldCB1cHBlck1vZGUoKXtyZXR1cm4gdGhpcy51cHBlck1vZGVfO30sc2V0IHVwcGVyTW9kZSh1cHBlck1vZGUpe3RoaXMudXBwZXJNb2RlXz11cHBlck1vZGU7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGRldGFjaCgpe3RyLnVpLnRyYWNrcy5Db250YWluZXJUcmFjay5wcm90b3R5cGUuZGV0YWNoLmNhbGwodGhpcyk7fSxnZXQgbW9kZWwoKXtyZXR1cm4gdGhpcy5tb2RlbF87fSxzZXQgbW9kZWwobW9kZWwpe3RoaXMubW9kZWxfPW1vZGVsO3RoaXMudXBkYXRlQ29udGVudHNfKCk7dGhpcy5tb2RlbF8uYWRkRXZlbnRMaXN0ZW5lcignYW5ub3RhdGlvbkNoYW5nZScsdGhpcy51cGRhdGVBbm5vdGF0aW9uc18uYmluZCh0aGlzKSk7fSxnZXQgaGFzVmlzaWJsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5jaGlsZHJlbi5sZW5ndGg+MDt9LHVwZGF0ZUNvbnRlbnRzXygpe1BvbHltZXIuZG9tKHRoaXMpLnRleHRDb250ZW50PScnO2lmKCF0aGlzLm1vZGVsXylyZXR1cm47aWYodGhpcy51cHBlck1vZGVfKXt0aGlzLnVwZGF0ZUNvbnRlbnRzRm9yVXBwZXJNb2RlXygpO31lbHNle3RoaXMudXBkYXRlQ29udGVudHNGb3JMb3dlck1vZGVfKCk7fX0sdXBkYXRlQ29udGVudHNGb3JVcHBlck1vZGVfKCl7fSx1cGRhdGVDb250ZW50c0Zvckxvd2VyTW9kZV8oKXtpZih0aGlzLm1vZGVsXy51c2VyTW9kZWwuZXhwZWN0YXRpb25zLmxlbmd0aD4xKXtjb25zdCBtcnQ9bmV3IHRyLnVpLnRyYWNrcy5JbnRlcmFjdGlvblRyYWNrKHRoaXMudmlld3BvcnRfKTttcnQubW9kZWw9dGhpcy5tb2RlbF87UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQobXJ0KTt9CmlmKHRoaXMubW9kZWxfLmFsZXJ0cy5sZW5ndGgpe2NvbnN0IGF0PW5ldyB0ci51aS50cmFja3MuQWxlcnRUcmFjayh0aGlzLnZpZXdwb3J0Xyk7YXQuYWxlcnRzPXRoaXMubW9kZWxfLmFsZXJ0cztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZChhdCk7fQppZih0aGlzLm1vZGVsXy5nbG9iYWxNZW1vcnlEdW1wcy5sZW5ndGgpe2NvbnN0IGdtZHQ9bmV3IHRyLnVpLnRyYWNrcy5HbG9iYWxNZW1vcnlEdW1wVHJhY2sodGhpcy52aWV3cG9ydF8pO2dtZHQubWVtb3J5RHVtcHM9dGhpcy5tb2RlbF8uZ2xvYmFsTWVtb3J5RHVtcHM7UG9seW1lci5kb20odGhpcykuYXBwZW5kQ2hpbGQoZ21kdCk7fQp0aGlzLmFwcGVuZERldmljZVRyYWNrXygpO3RoaXMuYXBwZW5kQ3B1VXNhZ2VUcmFja18oKTt0aGlzLmFwcGVuZE1lbW9yeVRyYWNrXygpO3RoaXMuYXBwZW5kS2VybmVsVHJhY2tfKCk7Y29uc3QgcHJvY2Vzc2VzPXRoaXMubW9kZWxfLmdldEFsbFByb2Nlc3NlcygpO3Byb2Nlc3Nlcy5zb3J0KHRyLm1vZGVsLlByb2Nlc3MuY29tcGFyZSk7Zm9yKGxldCBpPTA7aTxwcm9jZXNzZXMubGVuZ3RoOysraSl7Y29uc3QgcHJvY2Vzcz1wcm9jZXNzZXNbaV07Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5Qcm9jZXNzVHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2sucHJvY2Vzcz1wcm9jZXNzO2lmKCF0cmFjay5oYXNWaXNpYmxlQ29udGVudCljb250aW51ZTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0cmFjayk7fQp0aGlzLnZpZXdwb3J0Xy5yZWJ1aWxkRXZlbnRUb1RyYWNrTWFwKCk7dGhpcy52aWV3cG9ydF8ucmVidWlsZENvbnRhaW5lclRvVHJhY2tNYXAoKTt0aGlzLnZTeW5jVGltZXNfPXRoaXMubW9kZWxfLmRldmljZS52U3luY1RpbWVzdGFtcHM7dGhpcy51cGRhdGVBbm5vdGF0aW9uc18oKTt9LGdldENvbnRlbnRCb3VuZHMoKXtyZXR1cm4gdGhpcy5tb2RlbC5ib3VuZHM7fSxhZGRBbm5vdGF0aW9uKGFubm90YXRpb24pe3RoaXMubW9kZWwuYWRkQW5ub3RhdGlvbihhbm5vdGF0aW9uKTt9LHJlbW92ZUFubm90YXRpb24oYW5ub3RhdGlvbil7dGhpcy5tb2RlbC5yZW1vdmVBbm5vdGF0aW9uKGFubm90YXRpb24pO30sdXBkYXRlQW5ub3RhdGlvbnNfKCl7dGhpcy5hbm5vdGF0aW9uVmlld3NfPVtdO2NvbnN0IGFubm90YXRpb25zPXRoaXMubW9kZWxfLmdldEFsbEFubm90YXRpb25zKCk7Zm9yKGxldCBpPTA7aTxhbm5vdGF0aW9ucy5sZW5ndGg7aSsrKXt0aGlzLmFubm90YXRpb25WaWV3c18ucHVzaChhbm5vdGF0aW9uc1tpXS5nZXRPckNyZWF0ZVZpZXcodGhpcy52aWV3cG9ydF8pKTt9CnRoaXMuaW52YWxpZGF0ZURyYXdpbmdDb250YWluZXIoKTt9LGFkZEV2ZW50c1RvVHJhY2tNYXAoZXZlbnRUb1RyYWNrTWFwKXtpZighdGhpcy5tb2RlbF8pcmV0dXJuO2NvbnN0IHRyYWNrcz10aGlzLmNoaWxkcmVuO2ZvcihsZXQgaT0wO2k8dHJhY2tzLmxlbmd0aDsrK2kpe3RyYWNrc1tpXS5hZGRFdmVudHNUb1RyYWNrTWFwKGV2ZW50VG9UcmFja01hcCk7fQppZih0aGlzLmluc3RhbnRFdmVudHM9PT11bmRlZmluZWQpcmV0dXJuO2NvbnN0IHZwPXRoaXMudmlld3BvcnRfO3RoaXMuaW5zdGFudEV2ZW50cy5mb3JFYWNoKGZ1bmN0aW9uKGV2KXtldmVudFRvVHJhY2tNYXAuYWRkRXZlbnQoZXYsdGhpcyk7fS5iaW5kKHRoaXMpKTt9LGFwcGVuZERldmljZVRyYWNrXygpe2NvbnN0IGRldmljZT10aGlzLm1vZGVsLmRldmljZTtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLkRldmljZVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmRldmljZT10aGlzLm1vZGVsLmRldmljZTtpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9LGFwcGVuZEtlcm5lbFRyYWNrXygpe2NvbnN0IGtlcm5lbD10aGlzLm1vZGVsLmtlcm5lbDtjb25zdCB0cmFjaz1uZXcgdHIudWkudHJhY2tzLktlcm5lbFRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmtlcm5lbD10aGlzLm1vZGVsLmtlcm5lbDtpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9LGFwcGVuZENwdVVzYWdlVHJhY2tfKCl7Y29uc3QgdHJhY2s9bmV3IHRyLnVpLnRyYWNrcy5DcHVVc2FnZVRyYWNrKHRoaXMudmlld3BvcnQpO3RyYWNrLmluaXRpYWxpemUodGhpcy5tb2RlbCk7aWYoIXRyYWNrLmhhc1Zpc2libGVDb250ZW50KXJldHVybjt0aGlzLmFwcGVuZENoaWxkKHRyYWNrKTt9LGFwcGVuZE1lbW9yeVRyYWNrXygpe2NvbnN0IHRyYWNrPW5ldyB0ci51aS50cmFja3MuTWVtb3J5VHJhY2sodGhpcy52aWV3cG9ydCk7dHJhY2suaW5pdGlhbGl6ZSh0aGlzLm1vZGVsKTtpZighdHJhY2suaGFzVmlzaWJsZUNvbnRlbnQpcmV0dXJuO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRyYWNrKTt9LGRyYXdUcmFjayh0eXBlKXtjb25zdCBjdHg9dGhpcy5jb250ZXh0KCk7aWYoIXRoaXMubW9kZWxfKXJldHVybjtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IGJvdW5kcz10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGNhbnZhc0JvdW5kcz1jdHguY2FudmFzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2N0eC5zYXZlKCk7Y3R4LnRyYW5zbGF0ZSgwLHBpeGVsUmF0aW8qKGJvdW5kcy50b3AtY2FudmFzQm91bmRzLnRvcCkpO2NvbnN0IGR0PXRoaXMudmlld3BvcnQuY3VycmVudERpc3BsYXlUcmFuc2Zvcm07Y29uc3Qgdmlld0xXb3JsZD1kdC54Vmlld1RvV29ybGQoMCk7Y29uc3Qgdmlld1JXb3JsZD1kdC54Vmlld1RvV29ybGQoY2FudmFzQm91bmRzLndpZHRoKnBpeGVsUmF0aW8pO2NvbnN0IHZpZXdIZWlnaHQ9Ym91bmRzLmhlaWdodCpwaXhlbFJhdGlvO3N3aXRjaCh0eXBlKXtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5HUklEOnRoaXMudmlld3BvcnQuZHJhd01ham9yTWFya0xpbmVzKGN0eCx2aWV3SGVpZ2h0KTtjdHgucmVzdG9yZSgpO3JldHVybjtjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5GTE9XX0FSUk9XUzppZih0aGlzLm1vZGVsXy5mbG93SW50ZXJ2YWxUcmVlLnNpemU9PT0wKXtjdHgucmVzdG9yZSgpO3JldHVybjt9CnRoaXMuZHJhd0Zsb3dBcnJvd3NfKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7Y3R4LnJlc3RvcmUoKTtyZXR1cm47Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuSU5TVEFOVF9FVkVOVDppZighdGhpcy5tb2RlbF8uaW5zdGFudEV2ZW50c3x8dGhpcy5tb2RlbF8uaW5zdGFudEV2ZW50cy5sZW5ndGg9PT0wKXticmVhazt9CnRyLnVpLmIuZHJhd0luc3RhbnRTbGljZXNBc0xpbmVzKGN0eCx0aGlzLnZpZXdwb3J0LmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLHZpZXdMV29ybGQsdmlld1JXb3JsZCxib3VuZHMuaGVpZ2h0LHRoaXMubW9kZWxfLmluc3RhbnRFdmVudHMsNCk7YnJlYWs7Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuTUFSS0VSUzppZighdGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmlzRW1wdHkpe3RoaXMudmlld3BvcnQuaW50ZXJlc3RSYW5nZS5kcmF3KGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCk7dGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmRyYXdJbmRpY2F0b3JzKGN0eCx2aWV3TFdvcmxkLHZpZXdSV29ybGQpO30KY3R4LnJlc3RvcmUoKTtyZXR1cm47Y2FzZSB0ci51aS50cmFja3MuRHJhd1R5cGUuSElHSExJR0hUUzp0aGlzLmRyYXdWU3luY0hpZ2hsaWdodChjdHgsZHQsdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpO2N0eC5yZXN0b3JlKCk7cmV0dXJuO2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkFOTk9UQVRJT05TOmZvcihsZXQgaT0wO2k8dGhpcy5hbm5vdGF0aW9uVmlld3NfLmxlbmd0aDtpKyspe3RoaXMuYW5ub3RhdGlvblZpZXdzX1tpXS5kcmF3KGN0eCk7fQpjdHgucmVzdG9yZSgpO3JldHVybjt9CmN0eC5yZXN0b3JlKCk7dHIudWkudHJhY2tzLkNvbnRhaW5lclRyYWNrLnByb3RvdHlwZS5kcmF3VHJhY2suY2FsbCh0aGlzLHR5cGUpO30sZHJhd0Zsb3dBcnJvd3NfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2N0eC5zdHJva2VTdHlsZT0ncmdiYSgwLCAwLCAwLCAwLjQpJztjdHguZmlsbFN0eWxlPSdyZ2JhKDAsIDAsIDAsIDAuNCknO2N0eC5saW5lV2lkdGg9MTtjb25zdCBldmVudHM9dGhpcy5tb2RlbF8uZmxvd0ludGVydmFsVHJlZS5maW5kSW50ZXJzZWN0aW9uKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7Y29uc3QgY2FudmFzQm91bmRzPWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Zm9yKGxldCBpPTA7aTxldmVudHMubGVuZ3RoOysraSl7Y29uc3Qgb25seUhpZ2hsaWdodGVkPSF0ci5iLmdldENhdGVnb3J5UGFydHMoZXZlbnRzW2ldLmNhdGVnb3J5KS5zb21lKCh4KT0+dGhpcy52aWV3cG9ydC5zZWxlY3RlZEZsb3dFdmVudHMuaGFzKHgpKTtpZihvbmx5SGlnaGxpZ2h0ZWQmJmV2ZW50c1tpXS5zZWxlY3Rpb25TdGF0ZSE9PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEJiZldmVudHNbaV0uc2VsZWN0aW9uU3RhdGUhPT1TZWxlY3Rpb25TdGF0ZS5ISUdITElHSFRFRCl7Y29udGludWU7fQp0aGlzLmRyYXdGbG93QXJyb3dfKGN0eCxldmVudHNbaV0sY2FudmFzQm91bmRzKTt9fSxkcmF3Rmxvd0Fycm93XyhjdHgsZmxvd0V2ZW50LGNhbnZhc0JvdW5kcyl7Y29uc3QgZHQ9dGhpcy52aWV3cG9ydC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHN0YXJ0VHJhY2s9dGhpcy52aWV3cG9ydC50cmFja0ZvckV2ZW50KGZsb3dFdmVudC5zdGFydFNsaWNlKTtjb25zdCBlbmRUcmFjaz10aGlzLnZpZXdwb3J0LnRyYWNrRm9yRXZlbnQoZmxvd0V2ZW50LmVuZFNsaWNlKTtpZihzdGFydFRyYWNrPT09dW5kZWZpbmVkfHxlbmRUcmFjaz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3Qgc3RhcnRCb3VuZHM9c3RhcnRUcmFjay5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBlbmRCb3VuZHM9ZW5kVHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7aWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuU0VMRUNURUQpe2N0eC5zaGFkb3dCbHVyPTE7Y3R4LnNoYWRvd0NvbG9yPSdyZWQnO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2UgaWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuSElHSExJR0hURUQpe2N0eC5zaGFkb3dCbHVyPTE7Y3R4LnNoYWRvd0NvbG9yPSdyZWQnO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2UgaWYoZmxvd0V2ZW50LnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuRElNTUVEKXtjdHguc2hhZG93Qmx1cj0wO2N0eC5zaGFkb3dPZmZzZXRYPTA7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW2Zsb3dFdmVudC5jb2xvcklkXTt9ZWxzZXtsZXQgaGFzQm9vc3Q9ZmFsc2U7Y29uc3Qgc3RhcnRTbGljZT1mbG93RXZlbnQuc3RhcnRTbGljZTtoYXNCb29zdHw9c3RhcnRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO2hhc0Jvb3N0fD1zdGFydFNsaWNlLnNlbGVjdGlvblN0YXRlPT09U2VsZWN0aW9uU3RhdGUuSElHSExJR0hURUQ7Y29uc3QgZW5kU2xpY2U9Zmxvd0V2ZW50LmVuZFNsaWNlO2hhc0Jvb3N0fD1lbmRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLlNFTEVDVEVEO2hhc0Jvb3N0fD1lbmRTbGljZS5zZWxlY3Rpb25TdGF0ZT09PVNlbGVjdGlvblN0YXRlLkhJR0hMSUdIVEVEO2lmKGhhc0Jvb3N0KXtjdHguc2hhZG93Qmx1cj0xO2N0eC5zaGFkb3dDb2xvcj0ncmdiYSgyNTUsIDAsIDAsIDAuNCknO2N0eC5zaGFkb3dPZmZzZXR5PTI7Y3R4LnN0cm9rZVN0eWxlPXRyLmIuQ29sb3JTY2hlbWUuY29sb3JzQXNTdHJpbmdzW3RyLmIuQ29sb3JTY2hlbWUuZ2V0VmFyaWFudENvbG9ySWQoZmxvd0V2ZW50LmNvbG9ySWQsdHIuYi5Db2xvclNjaGVtZS5wcm9wZXJ0aWVzLmJyaWdodGVuZWRPZmZzZXRzWzBdKV07fWVsc2V7Y3R4LnNoYWRvd0JsdXI9MDtjdHguc2hhZG93T2Zmc2V0WD0wO2N0eC5zdHJva2VTdHlsZT10ci5iLkNvbG9yU2NoZW1lLmNvbG9yc0FzU3RyaW5nc1tmbG93RXZlbnQuY29sb3JJZF07fX0KY29uc3Qgc3RhcnRTaXplPXN0YXJ0Qm91bmRzLmxlZnQrc3RhcnRCb3VuZHMudG9wKwpzdGFydEJvdW5kcy5ib3R0b20rc3RhcnRCb3VuZHMucmlnaHQ7Y29uc3QgZW5kU2l6ZT1lbmRCb3VuZHMubGVmdCtlbmRCb3VuZHMudG9wKwplbmRCb3VuZHMuYm90dG9tK2VuZEJvdW5kcy5yaWdodDtpZihzdGFydFNpemU9PT0wJiZlbmRTaXplPT09MClyZXR1cm47Y29uc3Qgc3RhcnRZPXRoaXMuY2FsY3VsYXRlVHJhY2tZXyhzdGFydFRyYWNrLGNhbnZhc0JvdW5kcyk7Y29uc3QgZW5kWT10aGlzLmNhbGN1bGF0ZVRyYWNrWV8oZW5kVHJhY2ssY2FudmFzQm91bmRzKTtjb25zdCB3b3JsZE9mZnNldD10aGlzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLnRvcC1jYW52YXNCb3VuZHMudG9wO2NvbnN0IHBpeGVsU3RhcnRZPXBpeGVsUmF0aW8qKHN0YXJ0WS13b3JsZE9mZnNldCk7Y29uc3QgcGl4ZWxFbmRZPXBpeGVsUmF0aW8qKGVuZFktd29ybGRPZmZzZXQpO2NvbnN0IHN0YXJ0WFZpZXc9ZHQueFdvcmxkVG9WaWV3KGZsb3dFdmVudC5zdGFydCk7Y29uc3QgZW5kWFZpZXc9ZHQueFdvcmxkVG9WaWV3KGZsb3dFdmVudC5lbmQpO2NvbnN0IG1pZFhWaWV3PShzdGFydFhWaWV3K2VuZFhWaWV3KS8yO2N0eC5iZWdpblBhdGgoKTtjdHgubW92ZVRvKHN0YXJ0WFZpZXcscGl4ZWxTdGFydFkpO2N0eC5iZXppZXJDdXJ2ZVRvKG1pZFhWaWV3LHBpeGVsU3RhcnRZLG1pZFhWaWV3LHBpeGVsRW5kWSxlbmRYVmlldyxwaXhlbEVuZFkpO2N0eC5zdHJva2UoKTtjb25zdCBhcnJvd1dpZHRoPTUqcGl4ZWxSYXRpbztjb25zdCBkaXN0YW5jZT1lbmRYVmlldy1zdGFydFhWaWV3O2lmKGRpc3RhbmNlPD0oMiphcnJvd1dpZHRoKSlyZXR1cm47Y29uc3QgdGlwWD1lbmRYVmlldztjb25zdCB0aXBZPXBpeGVsRW5kWTtjb25zdCBhcnJvd0hlaWdodD0oZW5kQm91bmRzLmhlaWdodC80KSpwaXhlbFJhdGlvO3RyLnVpLmIuZHJhd1RyaWFuZ2xlKGN0eCx0aXBYLHRpcFksdGlwWC1hcnJvd1dpZHRoLHRpcFktYXJyb3dIZWlnaHQsdGlwWC1hcnJvd1dpZHRoLHRpcFkrYXJyb3dIZWlnaHQpO2N0eC5maWxsKCk7fSxkcmF3VlN5bmNIaWdobGlnaHQoY3R4LGR0LHZpZXdMV29ybGQsdmlld1JXb3JsZCx2aWV3SGVpZ2h0KXtpZighdGhpcy52aWV3cG9ydF8uaGlnaGxpZ2h0VlN5bmMpe3JldHVybjt9CmNvbnN0IHN0cmlwZXM9TW9kZWxUcmFjay5nZW5lcmF0ZVN0cmlwZXNfKHRoaXMudlN5bmNUaW1lc18sdmlld0xXb3JsZCx2aWV3UldvcmxkKTtpZihzdHJpcGVzLmxlbmd0aD09PTApe3JldHVybjt9CmNvbnN0IHZTeW5jSGlnaGxpZ2h0Q29sb3I9bmV3IHRyLmIuQ29sb3IoQ29sb3JTY2hlbWUuZ2V0Q29sb3JGb3JSZXNlcnZlZE5hbWVBc1N0cmluZygndnN5bmNfaGlnaGxpZ2h0X2NvbG9yJykpO2NvbnN0IHN0cmlwZVJhbmdlPXN0cmlwZXNbc3RyaXBlcy5sZW5ndGgtMV0ubWF4LXN0cmlwZXNbMF0ubWluO2NvbnN0IHN0cmlwZURlbnNpdHk9c3RyaXBlUmFuZ2U/c3RyaXBlcy5sZW5ndGgvKGR0LnNjYWxlWCpzdHJpcGVSYW5nZSk6MDtjb25zdCBjbGFtcGVkU3RyaXBlRGVuc2l0eT10ci5iLm1hdGguY2xhbXAoc3RyaXBlRGVuc2l0eSxNb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfT1BBUVVFLE1vZGVsVHJhY2suVlNZTkNfREVOU0lUWV9UUkFOU1BBUkVOVCk7Y29uc3Qgb3BhY2l0eT0oTW9kZWxUcmFjay5WU1lOQ19ERU5TSVRZX1RSQU5TUEFSRU5ULWNsYW1wZWRTdHJpcGVEZW5zaXR5KS9Nb2RlbFRyYWNrLlZTWU5DX0RFTlNJVFlfUkFOR0U7aWYob3BhY2l0eT09PTApe3JldHVybjt9CmN0eC5maWxsU3R5bGU9dlN5bmNIaWdobGlnaHRDb2xvci50b1N0cmluZ1dpdGhBbHBoYU92ZXJyaWRlKE1vZGVsVHJhY2suVlNZTkNfSElHSExJR0hUX0FMUEhBKm9wYWNpdHkpO2ZvcihsZXQgaT0wO2k8c3RyaXBlcy5sZW5ndGg7aSsrKXtjb25zdCB4TGVmdFZpZXc9ZHQueFdvcmxkVG9WaWV3KHN0cmlwZXNbaV0ubWluKTtjb25zdCB4UmlnaHRWaWV3PWR0LnhXb3JsZFRvVmlldyhzdHJpcGVzW2ldLm1heCk7Y3R4LmZpbGxSZWN0KHhMZWZ0VmlldywwLHhSaWdodFZpZXcteExlZnRWaWV3LHZpZXdIZWlnaHQpO319LGNhbGN1bGF0ZVRyYWNrWV8odHJhY2ssY2FudmFzQm91bmRzKXtjb25zdCBib3VuZHM9dHJhY2suZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3Qgc2l6ZT1ib3VuZHMubGVmdCtib3VuZHMudG9wK2JvdW5kcy5ib3R0b20rYm91bmRzLnJpZ2h0O2lmKHNpemU9PT0wKXtyZXR1cm4gdGhpcy5jYWxjdWxhdGVUcmFja1lfKFBvbHltZXIuZG9tKHRyYWNrKS5wYXJlbnROb2RlLGNhbnZhc0JvdW5kcyk7fQpyZXR1cm4gYm91bmRzLnRvcC1jYW52YXNCb3VuZHMudG9wKyhib3VuZHMuaGVpZ2h0LzIpO30sYWRkSW50ZXJzZWN0aW5nRXZlbnRzSW5SYW5nZVRvU2VsZWN0aW9uSW5Xb3JsZFNwYWNlKGxvV1gsaGlXWCx2aWV3UGl4V2lkdGhXb3JsZCxzZWxlY3Rpb24pe2Z1bmN0aW9uIG9uUGlja0hpdChpbnN0YW50RXZlbnQpe3NlbGVjdGlvbi5wdXNoKGluc3RhbnRFdmVudCk7fQpjb25zdCBpbnN0YW50RXZlbnRXaWR0aD0zKnZpZXdQaXhXaWR0aFdvcmxkO3RyLmIuaXRlcmF0ZU92ZXJJbnRlcnNlY3RpbmdJbnRlcnZhbHModGhpcy5tb2RlbF8uaW5zdGFudEV2ZW50cyxmdW5jdGlvbih4KXtyZXR1cm4geC5zdGFydDt9LGZ1bmN0aW9uKHgpe3JldHVybiB4LmR1cmF0aW9uK2luc3RhbnRFdmVudFdpZHRoO30sbG9XWCxoaVdYLG9uUGlja0hpdC5iaW5kKHRoaXMpKTt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbkluV29ybGRTcGFjZS5hcHBseSh0aGlzLGFyZ3VtZW50cyk7fSxhZGRDbG9zZXN0RXZlbnRUb1NlbGVjdGlvbih3b3JsZFgsd29ybGRNYXhEaXN0LGxvWSxoaVksc2VsZWN0aW9uKXt0aGlzLmFkZENsb3Nlc3RJbnN0YW50RXZlbnRUb1NlbGVjdGlvbih0aGlzLm1vZGVsXy5pbnN0YW50RXZlbnRzLHdvcmxkWCx3b3JsZE1heERpc3Qsc2VsZWN0aW9uKTt0ci51aS50cmFja3MuQ29udGFpbmVyVHJhY2sucHJvdG90eXBlLmFkZENsb3Nlc3RFdmVudFRvU2VsZWN0aW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt9fTtyZXR1cm57TW9kZWxUcmFjayx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWkudHJhY2tzJyxmdW5jdGlvbigpe2NvbnN0IFhBeGlzVHJhY2s9dHIudWkuYi5kZWZpbmUoJ3gtYXhpcy10cmFjaycsdHIudWkudHJhY2tzLlRyYWNrKTtYQXhpc1RyYWNrLnByb3RvdHlwZT17X19wcm90b19fOnRyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUsZGVjb3JhdGUodmlld3BvcnQpe3RyLnVpLnRyYWNrcy5UcmFjay5wcm90b3R5cGUuZGVjb3JhdGUuY2FsbCh0aGlzLHZpZXdwb3J0KTtQb2x5bWVyLmRvbSh0aGlzKS5jbGFzc0xpc3QuYWRkKCd4LWF4aXMtdHJhY2snKTt0aGlzLnN0cmluZ3Nfc2Vjc189W107dGhpcy5zdHJpbmdzX21zZWNzXz1bXTt0aGlzLnN0cmluZ3NfdXNlY3NfPVtdO3RoaXMuc3RyaW5nc19uc2Vjc189W107dGhpcy52aWV3cG9ydENoYW5nZV89dGhpcy52aWV3cG9ydENoYW5nZV8uYmluZCh0aGlzKTt2aWV3cG9ydC5hZGRFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHRoaXMudmlld3BvcnRDaGFuZ2VfKTtjb25zdCBoZWFkaW5nPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItaGVhZGluZycpO2hlYWRpbmcuYXJyb3dWaXNpYmxlPWZhbHNlO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKGhlYWRpbmcpO30sZGV0YWNoKCl7dHIudWkudHJhY2tzLlRyYWNrLnByb3RvdHlwZS5kZXRhY2guY2FsbCh0aGlzKTt0aGlzLnZpZXdwb3J0LnJlbW92ZUV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy52aWV3cG9ydENoYW5nZV8pO30sdmlld3BvcnRDaGFuZ2VfKCl7aWYodGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmlzRW1wdHkpe1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5yZW1vdmUoJ3RhbGwtbW9kZScpO31lbHNle1BvbHltZXIuZG9tKHRoaXMpLmNsYXNzTGlzdC5hZGQoJ3RhbGwtbW9kZScpO319LGRyYXcodHlwZSx2aWV3TFdvcmxkLHZpZXdSV29ybGQsdmlld0hlaWdodCl7c3dpdGNoKHR5cGUpe2Nhc2UgdHIudWkudHJhY2tzLkRyYXdUeXBlLkdSSUQ6dGhpcy5kcmF3R3JpZF8odmlld0xXb3JsZCx2aWV3UldvcmxkKTticmVhaztjYXNlIHRyLnVpLnRyYWNrcy5EcmF3VHlwZS5NQVJLRVJTOnRoaXMuZHJhd01hcmtlcnNfKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7YnJlYWs7fX0sZHJhd0dyaWRfKHZpZXdMV29ybGQsdmlld1JXb3JsZCl7Y29uc3QgY3R4PXRoaXMuY29udGV4dCgpO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgY2FudmFzQm91bmRzPWN0eC5jYW52YXMuZ2V0Qm91bmRpbmdDbGllbnRSZWN0KCk7Y29uc3QgdHJhY2tCb3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB3aWR0aD1jYW52YXNCb3VuZHMud2lkdGgqcGl4ZWxSYXRpbztjb25zdCBoZWlnaHQ9dHJhY2tCb3VuZHMuaGVpZ2h0KnBpeGVsUmF0aW87Y29uc3QgaGFzSW50ZXJlc3RSYW5nZT0hdGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmlzRW1wdHk7Y29uc3QgeEF4aXNIZWlnaHRQeD1oYXNJbnRlcmVzdFJhbmdlPyhoZWlnaHQqMikvNTpoZWlnaHQ7Y29uc3QgdnA9dGhpcy52aWV3cG9ydDtjb25zdCBkdD12cC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTt2cC51cGRhdGVNYWpvck1hcmtEYXRhKHZpZXdMV29ybGQsdmlld1JXb3JsZCk7Y29uc3QgbWFqb3JNYXJrRGlzdGFuY2VXb3JsZD12cC5tYWpvck1hcmtXb3JsZFBvc2l0aW9ucy5sZW5ndGg+MT92cC5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc1sxXS12cC5tYWpvck1hcmtXb3JsZFBvc2l0aW9uc1swXTowO2NvbnN0IG51bVRpY2tzUGVyTWFqb3I9NTtjb25zdCBtaW5vck1hcmtEaXN0YW5jZVdvcmxkPW1ham9yTWFya0Rpc3RhbmNlV29ybGQvbnVtVGlja3NQZXJNYWpvcjtjb25zdCBtaW5vck1hcmtEaXN0YW5jZVB4PWR0LnhXb3JsZFZlY3RvclRvVmlldyhtaW5vck1hcmtEaXN0YW5jZVdvcmxkKTtjb25zdCBtaW5vclRpY2tIZWlnaHQ9TWF0aC5mbG9vcih4QXhpc0hlaWdodFB4KjAuMjUpO2N0eC5zYXZlKCk7Y3R4LmxpbmVXaWR0aD1NYXRoLnJvdW5kKHBpeGVsUmF0aW8pO2NvbnN0IGNyaXNwTGluZUNvcnJlY3Rpb249KGN0eC5saW5lV2lkdGglMikvMjtjdHgudHJhbnNsYXRlKGNyaXNwTGluZUNvcnJlY3Rpb24sLWNyaXNwTGluZUNvcnJlY3Rpb24pO2N0eC5maWxsU3R5bGU9J3JnYigwLCAwLCAwKSc7Y3R4LnN0cm9rZVN0eWxlPSdyZ2IoMCwgMCwgMCknO2N0eC50ZXh0QWxpZ249J2xlZnQnO2N0eC50ZXh0QmFzZWxpbmU9J3RvcCc7Y3R4LmZvbnQ9KDkqcGl4ZWxSYXRpbykrJ3B4IHNhbnMtc2VyaWYnO2NvbnN0IHRpY2tMYWJlbHM9W107Y3R4LmJlZ2luUGF0aCgpO2ZvcihsZXQgaT0wO2k8dnAubWFqb3JNYXJrV29ybGRQb3NpdGlvbnMubGVuZ3RoO2krKyl7Y29uc3QgY3VyWFdvcmxkPXZwLm1ham9yTWFya1dvcmxkUG9zaXRpb25zW2ldO2NvbnN0IGN1clhWaWV3PWR0LnhXb3JsZFRvVmlldyhjdXJYV29ybGQpO2NvbnN0IGRpc3BsYXlUZXh0PXZwLm1ham9yTWFya1VuaXQuZm9ybWF0KGN1clhXb3JsZCx7ZGVsdGFWYWx1ZTptYWpvck1hcmtEaXN0YW5jZVdvcmxkfSk7Y3R4LmZpbGxUZXh0KGRpc3BsYXlUZXh0LGN1clhWaWV3KygyKnBpeGVsUmF0aW8pLDApO3RyLnVpLmIuZHJhd0xpbmUoY3R4LGN1clhWaWV3LDAsY3VyWFZpZXcseEF4aXNIZWlnaHRQeCk7aWYobWlub3JNYXJrRGlzdGFuY2VQeCl7Zm9yKGxldCBqPTE7ajxudW1UaWNrc1Blck1ham9yOysrail7Y29uc3QgeFZpZXc9TWF0aC5mbG9vcihjdXJYVmlldyttaW5vck1hcmtEaXN0YW5jZVB4KmopO3RyLnVpLmIuZHJhd0xpbmUoY3R4LHhWaWV3LHhBeGlzSGVpZ2h0UHgtbWlub3JUaWNrSGVpZ2h0LHhWaWV3LHhBeGlzSGVpZ2h0UHgpO319fQpjdHguc3Ryb2tlU3R5bGU9J3JnYigwLCAwLCAwKSc7dHIudWkuYi5kcmF3TGluZShjdHgsMCxoZWlnaHQsd2lkdGgsaGVpZ2h0KTtjdHguc3Ryb2tlKCk7aWYoIWhhc0ludGVyZXN0UmFuZ2UpcmV0dXJuO3RyLnVpLmIuZHJhd0xpbmUoY3R4LDAseEF4aXNIZWlnaHRQeCx3aWR0aCx4QXhpc0hlaWdodFB4KTtjdHguc3Ryb2tlKCk7bGV0IGRpc3BsYXlEaXN0YW5jZTtjb25zdCBkaXNwbGF5VGV4dENvbG9yPSdyZ2IoMCwwLDApJztjb25zdCBhcnJvd1NwYWNpbmc9MTAqcGl4ZWxSYXRpbztjb25zdCBhcnJvd0NvbG9yPSdyZ2IoMTI4LDEyMSwxMjEpJztjb25zdCBhcnJvd1Bvc1k9eEF4aXNIZWlnaHRQeCoxLjc1O2NvbnN0IGFycm93V2lkdGhWaWV3PTMqcGl4ZWxSYXRpbztjb25zdCBhcnJvd0xlbmd0aFZpZXc9MTAqcGl4ZWxSYXRpbztjb25zdCBzcGFjZUZvckFycm93c1ZpZXc9MiooYXJyb3dXaWR0aFZpZXcrYXJyb3dTcGFjaW5nKTtjdHgudGV4dEJhc2VsaW5lPSdtaWRkbGUnO2N0eC5mb250PSgxNCpwaXhlbFJhdGlvKSsncHggc2Fucy1zZXJpZic7Y29uc3QgdGV4dFBvc1k9YXJyb3dQb3NZO2NvbnN0IGludGVyZXN0UmFuZ2U9dnAuaW50ZXJlc3RSYW5nZTtpZihpbnRlcmVzdFJhbmdlLnJhbmdlPT09MCl7Y29uc3QgbWFya2VyV29ybGQ9aW50ZXJlc3RSYW5nZS5taW47Y29uc3QgbWFya2VyVmlldz1kdC54V29ybGRUb1ZpZXcobWFya2VyV29ybGQpO2NvbnN0IHRleHRUb0RyYXc9dnAubWFqb3JNYXJrVW5pdC5mb3JtYXQobWFya2VyV29ybGQpO2xldCB0ZXh0TGVmdFZpZXc9bWFya2VyVmlldys0KnBpeGVsUmF0aW87Y29uc3QgdGV4dFdpZHRoVmlldz1jdHgubWVhc3VyZVRleHQodGV4dFRvRHJhdykud2lkdGg7aWYodGV4dExlZnRWaWV3K3RleHRXaWR0aFZpZXc+d2lkdGgpe3RleHRMZWZ0Vmlldz1tYXJrZXJWaWV3LTQqcGl4ZWxSYXRpby10ZXh0V2lkdGhWaWV3O30KY3R4LmZpbGxTdHlsZT1kaXNwbGF5VGV4dENvbG9yO2N0eC5maWxsVGV4dCh0ZXh0VG9EcmF3LHRleHRMZWZ0Vmlldyx0ZXh0UG9zWSk7cmV0dXJuO30KY29uc3QgbGVmdE1hcmtlcj1pbnRlcmVzdFJhbmdlLm1pbjtjb25zdCByaWdodE1hcmtlcj1pbnRlcmVzdFJhbmdlLm1heDtjb25zdCBsZWZ0TWFya2VyVmlldz1kdC54V29ybGRUb1ZpZXcobGVmdE1hcmtlcik7Y29uc3QgcmlnaHRNYXJrZXJWaWV3PWR0LnhXb3JsZFRvVmlldyhyaWdodE1hcmtlcik7Y29uc3QgZGlzdGFuY2VCZXR3ZWVuTWFya2Vycz1pbnRlcmVzdFJhbmdlLnJhbmdlO2NvbnN0IGRpc3RhbmNlQmV0d2Vlbk1hcmtlcnNWaWV3PWR0LnhXb3JsZFZlY3RvclRvVmlldyhkaXN0YW5jZUJldHdlZW5NYXJrZXJzKTtjb25zdCBwb3NpdGlvbkluTWlkZGxlT2ZNYXJrZXJzVmlldz1sZWZ0TWFya2VyVmlldysoZGlzdGFuY2VCZXR3ZWVuTWFya2Vyc1ZpZXcvMik7Y29uc3QgdGV4dFRvRHJhdz12cC5tYWpvck1hcmtVbml0LmZvcm1hdChkaXN0YW5jZUJldHdlZW5NYXJrZXJzKTtjb25zdCB0ZXh0V2lkdGhWaWV3PWN0eC5tZWFzdXJlVGV4dCh0ZXh0VG9EcmF3KS53aWR0aDtjb25zdCBzcGFjZUZvckFycm93c0FuZFRleHRWaWV3PXRleHRXaWR0aFZpZXcrc3BhY2VGb3JBcnJvd3NWaWV3K2Fycm93U3BhY2luZztsZXQgdGV4dExlZnRWaWV3PXBvc2l0aW9uSW5NaWRkbGVPZk1hcmtlcnNWaWV3LXRleHRXaWR0aFZpZXcvMjtjb25zdCB0ZXh0UmlnaHRWaWV3PXRleHRMZWZ0Vmlldyt0ZXh0V2lkdGhWaWV3O2lmKHNwYWNlRm9yQXJyb3dzQW5kVGV4dFZpZXc+ZGlzdGFuY2VCZXR3ZWVuTWFya2Vyc1ZpZXcpe3RleHRMZWZ0Vmlldz1yaWdodE1hcmtlclZpZXcrMiphcnJvd1NwYWNpbmc7aWYodGV4dExlZnRWaWV3K3RleHRXaWR0aFZpZXc+d2lkdGgpe3RleHRMZWZ0Vmlldz1sZWZ0TWFya2VyVmlldy0yKmFycm93U3BhY2luZy10ZXh0V2lkdGhWaWV3O30KY3R4LmZpbGxTdHlsZT1kaXNwbGF5VGV4dENvbG9yO2N0eC5maWxsVGV4dCh0ZXh0VG9EcmF3LHRleHRMZWZ0Vmlldyx0ZXh0UG9zWSk7Y3R4LnN0cm9rZVN0eWxlPWFycm93Q29sb3I7Y3R4LmJlZ2luUGF0aCgpO3RyLnVpLmIuZHJhd0xpbmUoY3R4LGxlZnRNYXJrZXJWaWV3LGFycm93UG9zWSxyaWdodE1hcmtlclZpZXcsYXJyb3dQb3NZKTtjdHguc3Ryb2tlKCk7Y3R4LmZpbGxTdHlsZT1hcnJvd0NvbG9yO3RyLnVpLmIuZHJhd0Fycm93KGN0eCxsZWZ0TWFya2VyVmlldy0xLjUqYXJyb3dTcGFjaW5nLGFycm93UG9zWSxsZWZ0TWFya2VyVmlldyxhcnJvd1Bvc1ksYXJyb3dMZW5ndGhWaWV3LGFycm93V2lkdGhWaWV3KTt0ci51aS5iLmRyYXdBcnJvdyhjdHgscmlnaHRNYXJrZXJWaWV3KzEuNSphcnJvd1NwYWNpbmcsYXJyb3dQb3NZLHJpZ2h0TWFya2VyVmlldyxhcnJvd1Bvc1ksYXJyb3dMZW5ndGhWaWV3LGFycm93V2lkdGhWaWV3KTt9ZWxzZSBpZihzcGFjZUZvckFycm93c1ZpZXc8PWRpc3RhbmNlQmV0d2Vlbk1hcmtlcnNWaWV3KXtsZXQgbGVmdEFycm93U3RhcnQ7bGV0IHJpZ2h0QXJyb3dTdGFydDtpZihzcGFjZUZvckFycm93c0FuZFRleHRWaWV3PD1kaXN0YW5jZUJldHdlZW5NYXJrZXJzVmlldyl7Y3R4LmZpbGxTdHlsZT1kaXNwbGF5VGV4dENvbG9yO2N0eC5maWxsVGV4dCh0ZXh0VG9EcmF3LHRleHRMZWZ0Vmlldyx0ZXh0UG9zWSk7bGVmdEFycm93U3RhcnQ9dGV4dExlZnRWaWV3LWFycm93U3BhY2luZztyaWdodEFycm93U3RhcnQ9dGV4dFJpZ2h0VmlldythcnJvd1NwYWNpbmc7fWVsc2V7bGVmdEFycm93U3RhcnQ9cG9zaXRpb25Jbk1pZGRsZU9mTWFya2Vyc1ZpZXc7cmlnaHRBcnJvd1N0YXJ0PXBvc2l0aW9uSW5NaWRkbGVPZk1hcmtlcnNWaWV3O30KY3R4LnN0cm9rZVN0eWxlPWFycm93Q29sb3I7Y3R4LmZpbGxTdHlsZT1hcnJvd0NvbG9yO3RyLnVpLmIuZHJhd0Fycm93KGN0eCxsZWZ0QXJyb3dTdGFydCxhcnJvd1Bvc1ksbGVmdE1hcmtlclZpZXcsYXJyb3dQb3NZLGFycm93TGVuZ3RoVmlldyxhcnJvd1dpZHRoVmlldyk7dHIudWkuYi5kcmF3QXJyb3coY3R4LHJpZ2h0QXJyb3dTdGFydCxhcnJvd1Bvc1kscmlnaHRNYXJrZXJWaWV3LGFycm93UG9zWSxhcnJvd0xlbmd0aFZpZXcsYXJyb3dXaWR0aFZpZXcpO30KY3R4LnJlc3RvcmUoKTt9LGRyYXdNYXJrZXJzXyh2aWV3TFdvcmxkLHZpZXdSV29ybGQpe2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgdHJhY2tCb3VuZHM9dGhpcy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCB2aWV3SGVpZ2h0PXRyYWNrQm91bmRzLmhlaWdodCpwaXhlbFJhdGlvO2lmKCF0aGlzLnZpZXdwb3J0LmludGVyZXN0UmFuZ2UuaXNFbXB0eSl7dGhpcy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmRyYXcodGhpcy5jb250ZXh0KCksdmlld0xXb3JsZCx2aWV3UldvcmxkLHZpZXdIZWlnaHQpO319LGFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pe30sYWRkQWxsRXZlbnRzTWF0Y2hpbmdGaWx0ZXJUb1NlbGVjdGlvbihmaWx0ZXIsc2VsZWN0aW9uKXt9fTtyZXR1cm57WEF4aXNUcmFjayx9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktdGltZWxpbmUtdHJhY2stdmlldycscmVhZHkoKXt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fPW5ldyB0ci51aS5UaW1lbGluZURpc3BsYXlUcmFuc2Zvcm0oKTt0aGlzLm1vZGVsXz11bmRlZmluZWQ7dGhpcy50aW1lbGluZVZpZXdfPXVuZGVmaW5lZDt0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRJbnRlcnZhbF89dW5kZWZpbmVkO3RoaXMudmlld3BvcnRfPW5ldyB0ci51aS5UaW1lbGluZVZpZXdwb3J0KHRoaXMpO3RoaXMudmlld3BvcnREaXNwbGF5VHJhbnNmb3JtQXRNb3VzZURvd25fPXVuZGVmaW5lZDt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXz11bmRlZmluZWQ7dGhpcy5ydWxlclRyYWNrQ29udGFpbmVyXz1uZXcgdHIudWkudHJhY2tzLkRyYXdpbmdDb250YWluZXIodGhpcy52aWV3cG9ydF8pO1BvbHltZXIuZG9tKHRoaXMpLmFwcGVuZENoaWxkKHRoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8pO3RoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8uaW52YWxpZGF0ZSgpO3RoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8uc3R5bGUub3ZlcmZsb3dZPSdoaWRkZW4nO3RoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8uc3R5bGUuZmxleFNocmluaz0nMCc7dGhpcy5ydWxlclRyYWNrXz1uZXcgdHIudWkudHJhY2tzLlhBeGlzVHJhY2sodGhpcy52aWV3cG9ydF8pO1BvbHltZXIuZG9tKHRoaXMucnVsZXJUcmFja0NvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHRoaXMucnVsZXJUcmFja18pO3RoaXMudXBwZXJNb2RlbFRyYWNrXz1uZXcgdHIudWkudHJhY2tzLk1vZGVsVHJhY2sodGhpcy52aWV3cG9ydF8pO3RoaXMudXBwZXJNb2RlbFRyYWNrXy51cHBlck1vZGU9dHJ1ZTtQb2x5bWVyLmRvbSh0aGlzLnJ1bGVyVHJhY2tDb250YWluZXJfKS5hcHBlbmRDaGlsZCh0aGlzLnVwcGVyTW9kZWxUcmFja18pO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl89bmV3IHRyLnVpLnRyYWNrcy5EcmF3aW5nQ29udGFpbmVyKHRoaXMudmlld3BvcnRfKTtQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfKTt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLnN0eWxlLmZsZXhHcm93PScxJzt0aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmludmFsaWRhdGUoKTt0aGlzLnZpZXdwb3J0Xy5tb2RlbFRyYWNrQ29udGFpbmVyPXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl87dGhpcy5tb2RlbFRyYWNrXz1uZXcgdHIudWkudHJhY2tzLk1vZGVsVHJhY2sodGhpcy52aWV3cG9ydF8pO1BvbHltZXIuZG9tKHRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHRoaXMubW9kZWxUcmFja18pO3RoaXMudGltaW5nVG9vbF89bmV3IHRyLnVpLmIuVGltaW5nVG9vbCh0aGlzLnZpZXdwb3J0Xyx0aGlzKTt0aGlzLmluaXRNb3VzZU1vZGVTZWxlY3RvcigpO3RoaXMuaGlkZURyYWdCb3hfKCk7dGhpcy5pbml0SGludFRleHRfKCk7dGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfPXRoaXMub25TZWxlY3Rpb25DaGFuZ2VkXy5iaW5kKHRoaXMpO3RoaXMub25EYmxDbGlja189dGhpcy5vbkRibENsaWNrXy5iaW5kKHRoaXMpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcignZGJsY2xpY2snLHRoaXMub25EYmxDbGlja18pO3RoaXMub25Nb3VzZVdoZWVsXz10aGlzLm9uTW91c2VXaGVlbF8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNld2hlZWwnLHRoaXMub25Nb3VzZVdoZWVsXyk7dGhpcy5vbk1vdXNlRG93bl89dGhpcy5vbk1vdXNlRG93bl8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ21vdXNlZG93bicsdGhpcy5vbk1vdXNlRG93bl8pO3RoaXMub25Nb3VzZU1vdmVfPXRoaXMub25Nb3VzZU1vdmVfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdtb3VzZW1vdmUnLHRoaXMub25Nb3VzZU1vdmVfKTt0aGlzLm9uVG91Y2hTdGFydF89dGhpcy5vblRvdWNoU3RhcnRfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaHN0YXJ0Jyx0aGlzLm9uVG91Y2hTdGFydF8pO3RoaXMub25Ub3VjaE1vdmVfPXRoaXMub25Ub3VjaE1vdmVfLmJpbmQodGhpcyk7dGhpcy5hZGRFdmVudExpc3RlbmVyKCd0b3VjaG1vdmUnLHRoaXMub25Ub3VjaE1vdmVfKTt0aGlzLm9uVG91Y2hFbmRfPXRoaXMub25Ub3VjaEVuZF8uYmluZCh0aGlzKTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3RvdWNoZW5kJyx0aGlzLm9uVG91Y2hFbmRfKTt0aGlzLmFkZEhvdEtleXNfKCk7dGhpcy5tb3VzZVZpZXdQb3NBdE1vdXNlRG93bl89e3g6MCx5OjB9O3RoaXMubGFzdE1vdXNlVmlld1Bvc189e3g6MCx5OjB9O3RoaXMubGFzdFRvdWNoVmlld1Bvc2l0aW9uc189W107dGhpcy5hbGVydF89dW5kZWZpbmVkO3RoaXMuaXNQYW5uaW5nQW5kU2Nhbm5pbmdfPWZhbHNlO3RoaXMuaXNab29taW5nXz1mYWxzZTt9LGluaXRNb3VzZU1vZGVTZWxlY3Rvcigpe3RoaXMubW91c2VNb2RlU2VsZWN0b3JfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWItbW91c2UtbW9kZS1zZWxlY3RvcicpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnRhcmdldEVsZW1lbnQ9dGhpcztQb2x5bWVyLmRvbSh0aGlzKS5hcHBlbmRDaGlsZCh0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXyk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignYmVnaW5wYW4nLHRoaXMub25CZWdpblBhblNjYW5fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXBhbicsdGhpcy5vblVwZGF0ZVBhblNjYW5fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2VuZHBhbicsdGhpcy5vbkVuZFBhblNjYW5fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ2JlZ2luc2VsZWN0aW9uJyx0aGlzLm9uQmVnaW5TZWxlY3Rpb25fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXNlbGVjdGlvbicsdGhpcy5vblVwZGF0ZVNlbGVjdGlvbl8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignZW5kc2VsZWN0aW9uJyx0aGlzLm9uRW5kU2VsZWN0aW9uXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnpvb20nLHRoaXMub25CZWdpblpvb21fLmJpbmQodGhpcykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXpvb20nLHRoaXMub25VcGRhdGVab29tXy5iaW5kKHRoaXMpKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmR6b29tJyx0aGlzLm9uRW5kWm9vbV8uYmluZCh0aGlzKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignZW50ZXJ0aW1pbmcnLHRoaXMudGltaW5nVG9vbF8ub25FbnRlclRpbWluZy5iaW5kKHRoaXMudGltaW5nVG9vbF8pKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdiZWdpbnRpbWluZycsdGhpcy50aW1pbmdUb29sXy5vbkJlZ2luVGltaW5nLmJpbmQodGhpcy50aW1pbmdUb29sXykpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLmFkZEV2ZW50TGlzdGVuZXIoJ3VwZGF0ZXRpbWluZycsdGhpcy50aW1pbmdUb29sXy5vblVwZGF0ZVRpbWluZy5iaW5kKHRoaXMudGltaW5nVG9vbF8pKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5hZGRFdmVudExpc3RlbmVyKCdlbmR0aW1pbmcnLHRoaXMudGltaW5nVG9vbF8ub25FbmRUaW1pbmcuYmluZCh0aGlzLnRpbWluZ1Rvb2xfKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uYWRkRXZlbnRMaXN0ZW5lcignZXhpdHRpbWluZycsdGhpcy50aW1pbmdUb29sXy5vbkV4aXRUaW1pbmcuYmluZCh0aGlzLnRpbWluZ1Rvb2xfKSk7Y29uc3QgbT10ci51aS5iLk1PVVNFX1NFTEVDVE9SX01PREU7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc3VwcG9ydGVkTW9kZU1hc2s9bS5TRUxFQ1RJT058bS5QQU5TQ0FOfG0uWk9PTXxtLlRJTUlORzt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXR0aW5nc0tleT0ndGltZWxpbmVUcmFja1ZpZXcubW91c2VNb2RlU2VsZWN0b3InO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldEtleUNvZGVGb3JNb2RlKG0uUEFOU0NBTiwnMicuY2hhckNvZGVBdCgwKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0S2V5Q29kZUZvck1vZGUobS5TRUxFQ1RJT04sJzEnLmNoYXJDb2RlQXQoMCkpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldEtleUNvZGVGb3JNb2RlKG0uWk9PTSwnMycuY2hhckNvZGVBdCgwKSk7dGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8uc2V0S2V5Q29kZUZvck1vZGUobS5USU1JTkcsJzQnLmNoYXJDb2RlQXQoMCkpO3RoaXMubW91c2VNb2RlU2VsZWN0b3JfLnNldE1vZGlmaWVyRm9yQWx0ZXJuYXRlTW9kZShtLlNFTEVDVElPTix0ci51aS5iLk1PRElGSUVSLlNISUZUKTt0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5zZXRNb2RpZmllckZvckFsdGVybmF0ZU1vZGUobS5QQU5TQ0FOLHRyLnVpLmIuTU9ESUZJRVIuU1BBQ0UpO30sZ2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sc2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKGJydXNoaW5nU3RhdGVDb250cm9sbGVyKXtpZih0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXyl7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8pO30KdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl89YnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8pe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKTt9fSxzZXQgdGltZWxpbmVWaWV3KHZpZXcpe3RoaXMudGltZWxpbmVWaWV3Xz12aWV3O30sZ2V0IHByb2Nlc3NWaWV3cygpe3JldHVybiB0aGlzLm1vZGVsVHJhY2tfLnByb2Nlc3NWaWV3czt9LG9uU2VsZWN0aW9uQ2hhbmdlZF8oKXt0aGlzLnNob3dIaW50VGV4dF8oJ1ByZXNzIFwnbVwnIHRvIG1hcmsgY3VycmVudCBzZWxlY3Rpb24nKTt0aGlzLnZpZXdwb3J0Xy5kaXNwYXRjaENoYW5nZUV2ZW50KCk7fSxzZXQgc2VsZWN0aW9uKHNlbGVjdGlvbil7dGhyb3cgbmV3IEVycm9yKCdETyBOT1QgQ0FMTCBUSElTJyk7fSxzZXQgaGlnaGxpZ2h0KGhpZ2hsaWdodCl7dGhyb3cgbmV3IEVycm9yKCdETyBOT1QgQ0FMTCBUSElTJyk7fSxkZXRhY2goKXt0aGlzLm1vZGVsVHJhY2tfLmRldGFjaCgpO3RoaXMudXBwZXJNb2RlbFRyYWNrXy5kZXRhY2goKTtpZih0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRJbnRlcnZhbF8pe3dpbmRvdy5jbGVhckludGVydmFsKHRoaXMucG9sbElmVmlld3BvcnRBdHRhY2hlZEludGVydmFsXyk7dGhpcy5wb2xsSWZWaWV3cG9ydEF0dGFjaGVkSW50ZXJ2YWxfPXVuZGVmaW5lZDt9CnRoaXMudmlld3BvcnRfLmRldGFjaCgpO30sZ2V0IHZpZXdwb3J0KCl7cmV0dXJuIHRoaXMudmlld3BvcnRfO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXtpZighbW9kZWwpe3Rocm93IG5ldyBFcnJvcignTW9kZWwgY2Fubm90IGJlIHVuZGVmaW5lZCcpO30KY29uc3QgbW9kZWxJbnN0YW5jZUNoYW5nZWQ9dGhpcy5tb2RlbF8hPT1tb2RlbDt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLm1vZGVsVHJhY2tfLm1vZGVsPW1vZGVsO3RoaXMudXBwZXJNb2RlbFRyYWNrXy5tb2RlbD1tb2RlbDtpZihtb2RlbEluc3RhbmNlQ2hhbmdlZCl7dGhpcy5wb2xsSWZWaWV3cG9ydEF0dGFjaGVkSW50ZXJ2YWxfPXdpbmRvdy5zZXRJbnRlcnZhbCh0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRfLmJpbmQodGhpcyksMjUwKTt9fSxnZXQgaGFzVmlzaWJsZUNvbnRlbnQoKXtyZXR1cm4gdGhpcy5tb2RlbFRyYWNrXy5oYXNWaXNpYmxlQ29udGVudHx8dGhpcy51cHBlck1vZGVsVHJhY2tfLmhhc1Zpc2libGVDb250ZW50O30scG9sbElmVmlld3BvcnRBdHRhY2hlZF8oKXtpZighdGhpcy52aWV3cG9ydF8uaXNBdHRhY2hlZFRvRG9jdW1lbnRPckluVGVzdE1vZGV8fHRoaXMudmlld3BvcnRfLmNsaWVudFdpZHRoPT09MCl7cmV0dXJuO30Kd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoJ3Jlc2l6ZScsdGhpcy52aWV3cG9ydF8uZGlzcGF0Y2hDaGFuZ2VFdmVudCk7d2luZG93LmNsZWFySW50ZXJ2YWwodGhpcy5wb2xsSWZWaWV3cG9ydEF0dGFjaGVkSW50ZXJ2YWxfKTt0aGlzLnBvbGxJZlZpZXdwb3J0QXR0YWNoZWRJbnRlcnZhbF89dW5kZWZpbmVkO3RoaXMuc2V0SW5pdGlhbFZpZXdwb3J0XygpO30sc2V0SW5pdGlhbFZpZXdwb3J0Xygpe3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8udXBkYXRlQ2FudmFzU2l6ZUlmTmVlZGVkXygpO2NvbnN0IHc9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMud2lkdGg7bGV0IG1pbjtsZXQgcmFuZ2U7aWYodGhpcy5tb2RlbF8uYm91bmRzLmlzRW1wdHkpe21pbj0wO3JhbmdlPTEwMDA7fWVsc2UgaWYodGhpcy5tb2RlbF8uYm91bmRzLnJhbmdlPT09MCl7bWluPXRoaXMubW9kZWxfLmJvdW5kcy5taW47cmFuZ2U9MTAwMDt9ZWxzZXttaW49dGhpcy5tb2RlbF8uYm91bmRzLm1pbjtyYW5nZT10aGlzLm1vZGVsXy5ib3VuZHMucmFuZ2U7fQpjb25zdCBib29zdD1yYW5nZSowLjE1O3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhTZXRXb3JsZEJvdW5kcyhtaW4tYm9vc3QsbWluK3JhbmdlK2Jvb3N0LHcpO3RoaXMudmlld3BvcnRfLnNldERpc3BsYXlUcmFuc2Zvcm1JbW1lZGlhdGVseSh0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fKTt9LGFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbil7Y29uc3QgbW9kZWxUcmFjaz10aGlzLm1vZGVsVHJhY2tfO2NvbnN0IGZpcnN0VD1tb2RlbFRyYWNrLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbik7Y29uc3QgbGFzdFQ9Zmlyc3RULmFmdGVyKGZ1bmN0aW9uKCl7dGhpcy51cHBlck1vZGVsVHJhY2tfLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb24oZmlsdGVyLHNlbGVjdGlvbik7fSx0aGlzKTtyZXR1cm4gZmlyc3RUO30sb25Nb3VzZU1vdmVfKGUpe2lmKHRoaXMuaXNab29taW5nXylyZXR1cm47dGhpcy5zdG9yZUxhc3RNb3VzZVBvc18oZSk7fSxvblRvdWNoU3RhcnRfKGUpe3RoaXMuc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpO3RoaXMuZm9jdXNFbGVtZW50c18oKTt9LG9uVG91Y2hNb3ZlXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7dGhpcy5vblVwZGF0ZVRyYW5zZm9ybUZvclRvdWNoXyhlKTt9LG9uVG91Y2hFbmRfKGUpe3RoaXMuc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpO3RoaXMuZm9jdXNFbGVtZW50c18oKTt9LGFkZEhvdEtleXNfKCl7dGhpcy5hZGRLZXlEb3duSG90S2V5c18oKTt0aGlzLmFkZEtleVByZXNzSG90S2V5c18oKTt9LGFkZEtleVByZXNzSG90S2V5KGRpY3Qpe2RpY3QuZXZlbnRUeXBlPSdrZXlwcmVzcyc7ZGljdC51c2VDYXB0dXJlPWZhbHNlO2RpY3QudGhpc0FyZz10aGlzO2NvbnN0IGJpbmRpbmc9bmV3IHRyLnVpLmIuSG90S2V5KGRpY3QpO3RoaXMuJC5ob3RrZXlfY29udHJvbGxlci5hZGRIb3RLZXkoYmluZGluZyk7fSxhZGRLZXlQcmVzc0hvdEtleXNfKCl7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZXM6Wyd3Jy5jaGFyQ29kZUF0KDApLCcsJy5jaGFyQ29kZUF0KDApXSxjYWxsYmFjayhlKXt0aGlzLnpvb21CeV8oMS41LHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGVzOlsncycuY2hhckNvZGVBdCgwKSwnbycuY2hhckNvZGVBdCgwKV0sY2FsbGJhY2soZSl7dGhpcy56b29tQnlfKDEvMS41LHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J2cnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5vbkdyaWRUb2dnbGVfKHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J0cnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5vbkdyaWRUb2dnbGVfKGZhbHNlKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ1cnLmNoYXJDb2RlQXQoMCksJzwnLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMuem9vbUJ5XygxMCx0cnVlKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ1MnLmNoYXJDb2RlQXQoMCksJ08nLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMuem9vbUJ5XygxLzEwLHRydWUpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J2EnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5xdWV1ZVNtb290aFBhbl8odGhpcy52aWV3V2lkdGhfKjAuMywwKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlczpbJ2QnLmNoYXJDb2RlQXQoMCksJ2UnLmNoYXJDb2RlQXQoMCldLGNhbGxiYWNrKGUpe3RoaXMucXVldWVTbW9vdGhQYW5fKHRoaXMudmlld1dpZHRoXyotMC4zLDApO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J0EnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5xdWV1ZVNtb290aFBhbl8odmlld1dpZHRoKjAuNSwwKTtlLnN0b3BQcm9wYWdhdGlvbigpO319KTt0aGlzLmFkZEtleVByZXNzSG90S2V5KHtrZXlDb2RlOidEJy5jaGFyQ29kZUF0KDApLGNhbGxiYWNrKGUpe3RoaXMucXVldWVTbW9vdGhQYW5fKHZpZXdXaWR0aCotMC41LDApO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6JzAnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZXRJbml0aWFsVmlld3BvcnRfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZTonZicuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLnpvb21Ub1NlbGVjdGlvbigpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J20nLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZXRDdXJyZW50U2VsZWN0aW9uQXNJbnRlcmVzdFJhbmdlXygpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO3RoaXMuYWRkS2V5UHJlc3NIb3RLZXkoe2tleUNvZGU6J3AnLmNoYXJDb2RlQXQoMCksY2FsbGJhY2soZSl7dGhpcy5zZWxlY3RQb3dlclNhbXBsZXNJbkN1cnJlbnRUaW1lUmFuZ2VfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7dGhpcy5hZGRLZXlQcmVzc0hvdEtleSh7a2V5Q29kZTonaCcuY2hhckNvZGVBdCgwKSxjYWxsYmFjayhlKXt0aGlzLnRvZ2dsZUhpZ2hEZXRhaWxzXygpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7fX0pO30sZ2V0IHZpZXdXaWR0aF8oKXtyZXR1cm4gdGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMuY2xpZW50V2lkdGg7fSxhZGRLZXlEb3duSG90S2V5c18oKXtjb25zdCBhZGRCaW5kaW5nPWZ1bmN0aW9uKGRpY3Qpe2RpY3QuZXZlbnRUeXBlPSdrZXlkb3duJztkaWN0LnVzZUNhcHR1cmU9ZmFsc2U7ZGljdC50aGlzQXJnPXRoaXM7Y29uc3QgYmluZGluZz1uZXcgdHIudWkuYi5Ib3RLZXkoZGljdCk7dGhpcy4kLmhvdGtleV9jb250cm9sbGVyLmFkZEhvdEtleShiaW5kaW5nKTt9LmJpbmQodGhpcyk7YWRkQmluZGluZyh7a2V5Q29kZTozNyxjYWxsYmFjayhlKXtjb25zdCBjdXJTZWw9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uO2NvbnN0IHNlbD10aGlzLnZpZXdwb3J0LmdldFNoaWZ0ZWRTZWxlY3Rpb24oY3VyU2VsLC0xKTtpZihzZWwpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbCk7dGhpcy5wYW5Ub1NlbGVjdGlvbigpO31lbHNle3RoaXMucXVldWVTbW9vdGhQYW5fKHRoaXMudmlld1dpZHRoXyowLjMsMCk7fQplLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7YWRkQmluZGluZyh7a2V5Q29kZTozOSxjYWxsYmFjayhlKXtjb25zdCBjdXJTZWw9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uO2NvbnN0IHNlbD10aGlzLnZpZXdwb3J0LmdldFNoaWZ0ZWRTZWxlY3Rpb24oY3VyU2VsLDEpO2lmKHNlbCl7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlci5jaGFuZ2VTZWxlY3Rpb25Gcm9tVGltZWxpbmUoc2VsKTt0aGlzLnBhblRvU2VsZWN0aW9uKCk7fWVsc2V7dGhpcy5xdWV1ZVNtb290aFBhbl8oLXRoaXMudmlld1dpZHRoXyowLjMsMCk7fQplLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSk7fSxvbkRibENsaWNrXyhlKXtpZih0aGlzLm1vdXNlTW9kZVNlbGVjdG9yXy5tb2RlIT09dHIudWkuYi5NT1VTRV9TRUxFQ1RPUl9NT0RFLlNFTEVDVElPTil7cmV0dXJuO30KY29uc3QgY3VyU2VsZWN0aW9uPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtpZighY3VyU2VsZWN0aW9uLmxlbmd0aHx8IXRyLmIuZ2V0T25seUVsZW1lbnQoY3VyU2VsZWN0aW9uKS50aXRsZSl7cmV0dXJuO30KY29uc3Qgc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO2NvbnN0IGZpbHRlcj1uZXcgdHIuYy5FeGFjdFRpdGxlRmlsdGVyKHRyLmIuZ2V0T25seUVsZW1lbnQoY3VyU2VsZWN0aW9uKS50aXRsZSk7dGhpcy5tb2RlbFRyYWNrXy5hZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uKGZpbHRlcixzZWxlY3Rpb24pO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbGVjdGlvbik7fSxvbk1vdXNlV2hlZWxfKGUpe2lmKCFlLmFsdEtleSlyZXR1cm47Y29uc3QgZGVsdGE9ZS53aGVlbERlbHRhLzEyMDtjb25zdCB6b29tU2NhbGU9TWF0aC5wb3coMS41LGRlbHRhKTt0aGlzLnpvb21CeV8oem9vbVNjYWxlKTtlLnByZXZlbnREZWZhdWx0KCk7fSxvbk1vdXNlRG93bl8oZSl7aWYodGhpcy5tb3VzZU1vZGVTZWxlY3Rvcl8ubW9kZSE9PXRyLnVpLmIuTU9VU0VfU0VMRUNUT1JfTU9ERS5TRUxFQ1RJT04pe3JldHVybjt9CmlmKGUudGFyZ2V0IT09dGhpcy5ydWxlclRyYWNrXylyZXR1cm47dGhpcy5kcmFnQmVnaW5FdmVudF89dW5kZWZpbmVkO2lmKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pe3RoaXMubW9kZWwucmVtb3ZlQW5ub3RhdGlvbih0aGlzLnhOYXZTdHJpbmdNYXJrZXJfKTt0aGlzLnhOYXZTdHJpbmdNYXJrZXJfPXVuZGVmaW5lZDt9CmNvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO3RyLnVpLmIudHJhY2tNb3VzZU1vdmVzVW50aWxNb3VzZVVwKGZ1bmN0aW9uKGUpe2lmKGUudGFyZ2V0PT09dGhpcy5ydWxlclRyYWNrXylyZXR1cm47Y29uc3QgcmVsYXRpdmVQb3NpdGlvbj10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2NvbnN0IGxvYz10ci5tb2RlbC5Mb2NhdGlvbi5mcm9tVmlld0Nvb3JkaW5hdGVzKHRoaXMudmlld3BvcnRfLHJlbGF0aXZlUG9zaXRpb24ueCxyZWxhdGl2ZVBvc2l0aW9uLnkpO2lmKCFsb2MpcmV0dXJuO2lmKHRoaXMuZ3VpZGVMaW5lQW5ub3RhdGlvbl89PT11bmRlZmluZWQpe3RoaXMuZ3VpZGVMaW5lQW5ub3RhdGlvbl89bmV3IHRyLm1vZGVsLlhNYXJrZXJBbm5vdGF0aW9uKGxvYy54V29ybGQpO3RoaXMubW9kZWwuYWRkQW5ub3RhdGlvbih0aGlzLmd1aWRlTGluZUFubm90YXRpb25fKTt9ZWxzZXt0aGlzLmd1aWRlTGluZUFubm90YXRpb25fLnRpbWVzdGFtcD1sb2MueFdvcmxkO3RoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uaW52YWxpZGF0ZSgpO30KY29uc3Qgc3RhdGU9bmV3IHRyLnVpLmIuVUlTdGF0ZShsb2MsdGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0uc2NhbGVYKTt0aGlzLnRpbWVsaW5lVmlld18uc2V0RmluZEN0bFRleHQoc3RhdGUudG9Vc2VyRnJpZW5kbHlTdHJpbmcodGhpcy52aWV3cG9ydF8pKTt9LmJpbmQodGhpcyksdW5kZWZpbmVkLGZ1bmN0aW9uIG9uS2V5VXBEdXJpbmdEcmFnKCl7aWYodGhpcy5kcmFnQmVnaW5FdmVudF8pe3RoaXMuc2V0RHJhZ0JveFBvc2l0aW9uXyh0aGlzLmRyYWdCb3hYU3RhcnRfLHRoaXMuZHJhZ0JveFlTdGFydF8sdGhpcy5kcmFnQm94WEVuZF8sdGhpcy5kcmFnQm94WUVuZF8pO319LmJpbmQodGhpcykpO30scXVldWVTbW9vdGhQYW5fKHZpZXdEZWx0YVgsZGVsdGFZKXtjb25zdCBkZWx0YVg9dGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ueFZpZXdWZWN0b3JUb1dvcmxkKHZpZXdEZWx0YVgpO2NvbnN0IGFuaW1hdGlvbj1uZXcgdHIudWkuVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uKGRlbHRhWCxkZWx0YVkpO3RoaXMudmlld3BvcnRfLnF1ZXVlRGlzcGxheVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24pO30sem9vbUJ5XyhzY2FsZSxzbW9vdGgpe2lmKHNjYWxlPD0wKXtyZXR1cm47fQpzbW9vdGg9ISFzbW9vdGg7Y29uc3QgdnA9dGhpcy52aWV3cG9ydF87Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCBnb2FsRm9jYWxQb2ludFhWaWV3PXRoaXMubGFzdE1vdXNlVmlld1Bvc18ueCpwaXhlbFJhdGlvO2NvbnN0IGdvYWxGb2NhbFBvaW50WFdvcmxkPXZwLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnhWaWV3VG9Xb3JsZChnb2FsRm9jYWxQb2ludFhWaWV3KTtpZihzbW9vdGgpe2NvbnN0IGFuaW1hdGlvbj1uZXcgdHIudWkuVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtWm9vbVRvQW5pbWF0aW9uKGdvYWxGb2NhbFBvaW50WFdvcmxkLGdvYWxGb2NhbFBvaW50WFZpZXcsdnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0ucGFuWSxzY2FsZSk7dnAucXVldWVEaXNwbGF5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbik7fWVsc2V7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5zZXQodnAuY3VycmVudERpc3BsYXlUcmFuc2Zvcm0pO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2NhbGVYKj1zY2FsZTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhQYW5Xb3JsZFBvc1RvVmlld1Bvcyhnb2FsRm9jYWxQb2ludFhXb3JsZCxnb2FsRm9jYWxQb2ludFhWaWV3LHRoaXMudmlld1dpZHRoXyk7dnAuc2V0RGlzcGxheVRyYW5zZm9ybUltbWVkaWF0ZWx5KHRoaXMuZGlzcGxheVRyYW5zZm9ybV8pO319LHpvb21Ub1NlbGVjdGlvbigpe2lmKCF0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnNlbGVjdGlvbk9mSW50ZXJlc3QubGVuZ3RoKXJldHVybjtjb25zdCBib3VuZHM9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlci5zZWxlY3Rpb25PZkludGVyZXN0LmJvdW5kcztpZighYm91bmRzLnJhbmdlKXJldHVybjtjb25zdCB3b3JsZENlbnRlcj1ib3VuZHMuY2VudGVyO2NvbnN0IHZpZXdDZW50ZXI9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMud2lkdGgvMjtjb25zdCBhZGp1c3RlZFdvcmxkUmFuZ2U9Ym91bmRzLnJhbmdlKjEuMjU7Y29uc3QgbmV3U2NhbGU9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMud2lkdGgvYWRqdXN0ZWRXb3JsZFJhbmdlO2NvbnN0IHpvb21JblJhdGlvPW5ld1NjYWxlL3RoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnNjYWxlWDtjb25zdCBhbmltYXRpb249bmV3IHRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVpvb21Ub0FuaW1hdGlvbih3b3JsZENlbnRlcix2aWV3Q2VudGVyLHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnBhblksem9vbUluUmF0aW8pO3RoaXMudmlld3BvcnRfLnF1ZXVlRGlzcGxheVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24pO30scGFuVG9TZWxlY3Rpb24oKXtpZighdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlci5zZWxlY3Rpb25PZkludGVyZXN0Lmxlbmd0aClyZXR1cm47Y29uc3QgYm91bmRzPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIuc2VsZWN0aW9uT2ZJbnRlcmVzdC5ib3VuZHM7Y29uc3Qgd29ybGRDZW50ZXI9Ym91bmRzLmNlbnRlcjtjb25zdCB2aWV3V2lkdGg9dGhpcy52aWV3V2lkdGhfO2NvbnN0IGR0PXRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtO2lmKGZhbHNlJiYhYm91bmRzLnJhbmdlKXtpZihkdC54V29ybGRUb1ZpZXcoYm91bmRzLmNlbnRlcik8MHx8ZHQueFdvcmxkVG9WaWV3KGJvdW5kcy5jZW50ZXIpPnZpZXdXaWR0aCl7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy5zZXQoZHQpO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8ueFBhbldvcmxkUG9zVG9WaWV3UG9zKHdvcmxkQ2VudGVyLCdjZW50ZXInLHZpZXdXaWR0aCk7Y29uc3QgZGVsdGFYPXRoaXMuZGlzcGxheVRyYW5zZm9ybV8ucGFuWC1kdC5wYW5YO2NvbnN0IGFuaW1hdGlvbj1uZXcgdHIudWkuVGltZWxpbmVEaXNwbGF5VHJhbnNmb3JtUGFuQW5pbWF0aW9uKGRlbHRhWCwwKTt0aGlzLnZpZXdwb3J0Xy5xdWV1ZURpc3BsYXlUcmFuc2Zvcm1BbmltYXRpb24oYW5pbWF0aW9uKTt9CnJldHVybjt9CnRoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KGR0KTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnhQYW5Xb3JsZEJvdW5kc0ludG9WaWV3KGJvdW5kcy5taW4sYm91bmRzLm1heCx2aWV3V2lkdGgpO2NvbnN0IGRlbHRhWD10aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnBhblgtZHQucGFuWDtjb25zdCBhbmltYXRpb249bmV3IHRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVBhbkFuaW1hdGlvbihkZWx0YVgsMCk7dGhpcy52aWV3cG9ydF8ucXVldWVEaXNwbGF5VHJhbnNmb3JtQW5pbWF0aW9uKGFuaW1hdGlvbik7fSxuYXZUb1Bvc2l0aW9uKHVpU3RhdGUsc2hvd05hdkxpbmUpe2NvbnN0IGxvY2F0aW9uPXVpU3RhdGUubG9jYXRpb247Y29uc3Qgc2NhbGVYPXVpU3RhdGUuc2NhbGVYO2NvbnN0IHRyYWNrPWxvY2F0aW9uLmdldENvbnRhaW5pbmdUcmFjayh0aGlzLnZpZXdwb3J0Xyk7Y29uc3Qgd29ybGRDZW50ZXI9bG9jYXRpb24ueFdvcmxkO2NvbnN0IHZpZXdDZW50ZXI9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXMud2lkdGgvNTtjb25zdCB6b29tSW5SYXRpbz1zY2FsZVgvdGhpcy52aWV3cG9ydF8uY3VycmVudERpc3BsYXlUcmFuc2Zvcm0uc2NhbGVYO3RyYWNrLnNjcm9sbEludG9WaWV3SWZOZWVkZWQoKTtjb25zdCBhbmltYXRpb249bmV3IHRyLnVpLlRpbWVsaW5lRGlzcGxheVRyYW5zZm9ybVpvb21Ub0FuaW1hdGlvbih3b3JsZENlbnRlcix2aWV3Q2VudGVyLHRoaXMudmlld3BvcnRfLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnBhblksem9vbUluUmF0aW8pO3RoaXMudmlld3BvcnRfLnF1ZXVlRGlzcGxheVRyYW5zZm9ybUFuaW1hdGlvbihhbmltYXRpb24pO2lmKCFzaG93TmF2TGluZSlyZXR1cm47aWYodGhpcy54TmF2U3RyaW5nTWFya2VyXyl7dGhpcy5tb2RlbC5yZW1vdmVBbm5vdGF0aW9uKHRoaXMueE5hdlN0cmluZ01hcmtlcl8pO30KdGhpcy54TmF2U3RyaW5nTWFya2VyXz1uZXcgdHIubW9kZWwuWE1hcmtlckFubm90YXRpb24od29ybGRDZW50ZXIpO3RoaXMubW9kZWwuYWRkQW5ub3RhdGlvbih0aGlzLnhOYXZTdHJpbmdNYXJrZXJfKTt9LHNlbGVjdFBvd2VyU2FtcGxlc0luQ3VycmVudFRpbWVSYW5nZV8oKXtjb25zdCBzZWxlY3Rpb25Cb3VuZHM9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uLmJvdW5kcztpZih0aGlzLm1vZGVsLmRldmljZS5wb3dlclNlcmllcyYmIXNlbGVjdGlvbkJvdW5kcy5lbXB0eSl7Y29uc3QgZXZlbnRzPXRoaXMubW9kZWwuZGV2aWNlLnBvd2VyU2VyaWVzLmdldFNhbXBsZXNXaXRoaW5SYW5nZShzZWxlY3Rpb25Cb3VuZHMubWluLHNlbGVjdGlvbkJvdW5kcy5tYXgpO2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoZXZlbnRzKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5jaGFuZ2VTZWxlY3Rpb25Gcm9tVGltZWxpbmUoc2VsZWN0aW9uKTt9fSxzZXRDdXJyZW50U2VsZWN0aW9uQXNJbnRlcmVzdFJhbmdlXygpe2NvbnN0IHNlbGVjdGlvbkJvdW5kcz10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5zZWxlY3Rpb24uYm91bmRzO2lmKHNlbGVjdGlvbkJvdW5kcy5lbXB0eSl7dGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZS5yZXNldCgpO3JldHVybjt9CmlmKHRoaXMudmlld3BvcnRfLmludGVyZXN0UmFuZ2UubWluPT09c2VsZWN0aW9uQm91bmRzLm1pbiYmdGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZS5tYXg9PT1zZWxlY3Rpb25Cb3VuZHMubWF4KXt0aGlzLnZpZXdwb3J0Xy5pbnRlcmVzdFJhbmdlLnJlc2V0KCk7fWVsc2V7dGhpcy52aWV3cG9ydF8uaW50ZXJlc3RSYW5nZS5zZXQoc2VsZWN0aW9uQm91bmRzKTt9fSx0b2dnbGVIaWdoRGV0YWlsc18oKXt0aGlzLnZpZXdwb3J0Xy5oaWdoRGV0YWlscz0hdGhpcy52aWV3cG9ydF8uaGlnaERldGFpbHM7fSxoaWRlRHJhZ0JveF8oKXt0aGlzLiQuZHJhZ19ib3guc3R5bGUubGVmdD0nLTEwMDBweCc7dGhpcy4kLmRyYWdfYm94LnN0eWxlLnRvcD0nLTEwMDBweCc7dGhpcy4kLmRyYWdfYm94LnN0eWxlLndpZHRoPTA7dGhpcy4kLmRyYWdfYm94LnN0eWxlLmhlaWdodD0wO30sc2V0RHJhZ0JveFBvc2l0aW9uXyh4U3RhcnQseVN0YXJ0LHhFbmQseUVuZCl7Y29uc3QgbG9ZPU1hdGgubWluKHlTdGFydCx5RW5kKTtjb25zdCBoaVk9TWF0aC5tYXgoeVN0YXJ0LHlFbmQpO2NvbnN0IGxvWD1NYXRoLm1pbih4U3RhcnQseEVuZCk7Y29uc3QgaGlYPU1hdGgubWF4KHhTdGFydCx4RW5kKTtjb25zdCBtb2RlbFRyYWNrUmVjdD10aGlzLm1vZGVsVHJhY2tfLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGRyYWdSZWN0PXtsZWZ0OmxvWCx0b3A6bG9ZLHdpZHRoOmhpWC1sb1gsaGVpZ2h0OmhpWS1sb1l9O2RyYWdSZWN0LnJpZ2h0PWRyYWdSZWN0LmxlZnQrZHJhZ1JlY3Qud2lkdGg7ZHJhZ1JlY3QuYm90dG9tPWRyYWdSZWN0LnRvcCtkcmFnUmVjdC5oZWlnaHQ7Y29uc3QgbW9kZWxUcmFja0NvbnRhaW5lclJlY3Q9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjbGlwUmVjdD17bGVmdDptb2RlbFRyYWNrQ29udGFpbmVyUmVjdC5sZWZ0LHRvcDptb2RlbFRyYWNrQ29udGFpbmVyUmVjdC50b3AscmlnaHQ6bW9kZWxUcmFja0NvbnRhaW5lclJlY3QucmlnaHQsYm90dG9tOm1vZGVsVHJhY2tDb250YWluZXJSZWN0LmJvdHRvbX07Y29uc3QgaGVhZGluZ1dpZHRoPXdpbmRvdy5nZXRDb21wdXRlZFN0eWxlKFBvbHltZXIuZG9tKHRoaXMpLnF1ZXJ5U2VsZWN0b3IoJ3RyLXVpLWItaGVhZGluZycpKS53aWR0aDtjb25zdCB0cmFja1RpdGxlV2lkdGg9cGFyc2VJbnQoaGVhZGluZ1dpZHRoKTtjbGlwUmVjdC5sZWZ0PWNsaXBSZWN0LmxlZnQrdHJhY2tUaXRsZVdpZHRoO2NvbnN0IGludGVyc2VjdFJlY3RfPWZ1bmN0aW9uKHIxLHIyKXtpZihyMi5sZWZ0PnIxLnJpZ2h0fHxyMi5yaWdodDxyMS5sZWZ0fHxyMi50b3A+cjEuYm90dG9tfHxyMi5ib3R0b208cjEudG9wKXtyZXR1cm4gZmFsc2U7fQpjb25zdCByZXN1bHRzPXt9O3Jlc3VsdHMubGVmdD1NYXRoLm1heChyMS5sZWZ0LHIyLmxlZnQpO3Jlc3VsdHMudG9wPU1hdGgubWF4KHIxLnRvcCxyMi50b3ApO3Jlc3VsdHMucmlnaHQ9TWF0aC5taW4ocjEucmlnaHQscjIucmlnaHQpO3Jlc3VsdHMuYm90dG9tPU1hdGgubWluKHIxLmJvdHRvbSxyMi5ib3R0b20pO3Jlc3VsdHMud2lkdGg9cmVzdWx0cy5yaWdodC1yZXN1bHRzLmxlZnQ7cmVzdWx0cy5oZWlnaHQ9cmVzdWx0cy5ib3R0b20tcmVzdWx0cy50b3A7cmV0dXJuIHJlc3VsdHM7fTtjb25zdCBmaW5hbERyYWdCb3g9aW50ZXJzZWN0UmVjdF8oY2xpcFJlY3QsZHJhZ1JlY3QpO3RoaXMuJC5kcmFnX2JveC5zdHlsZS5sZWZ0PWZpbmFsRHJhZ0JveC5sZWZ0KydweCc7dGhpcy4kLmRyYWdfYm94LnN0eWxlLndpZHRoPWZpbmFsRHJhZ0JveC53aWR0aCsncHgnO3RoaXMuJC5kcmFnX2JveC5zdHlsZS50b3A9ZmluYWxEcmFnQm94LnRvcCsncHgnO3RoaXMuJC5kcmFnX2JveC5zdHlsZS5oZWlnaHQ9ZmluYWxEcmFnQm94LmhlaWdodCsncHgnO3RoaXMuJC5kcmFnX2JveC5zdHlsZS53aGl0ZVNwYWNlPSdub3dyYXAnO2NvbnN0IHBpeGVsUmF0aW89d2luZG93LmRldmljZVBpeGVsUmF0aW98fDE7Y29uc3QgY2Fudj10aGlzLm1vZGVsVHJhY2tDb250YWluZXJfLmNhbnZhcztjb25zdCBkdD10aGlzLnZpZXdwb3J0Xy5jdXJyZW50RGlzcGxheVRyYW5zZm9ybTtjb25zdCBsb1dYPWR0LnhWaWV3VG9Xb3JsZCgobG9YLWNhbnYub2Zmc2V0TGVmdCkqcGl4ZWxSYXRpbyk7Y29uc3QgaGlXWD1kdC54Vmlld1RvV29ybGQoKGhpWC1jYW52Lm9mZnNldExlZnQpKnBpeGVsUmF0aW8pO1BvbHltZXIuZG9tKHRoaXMuJC5kcmFnX2JveCkudGV4dENvbnRlbnQ9dHIuYi5Vbml0LmJ5TmFtZS50aW1lRHVyYXRpb25Jbk1zLmZvcm1hdChoaVdYLWxvV1gpO2NvbnN0IGU9bmV3IHRyLmIuRXZlbnQoJ3NlbGVjdGlvbkNoYW5naW5nJyk7ZS5sb1dYPWxvV1g7ZS5oaVdYPWhpV1g7dGhpcy5kaXNwYXRjaEV2ZW50KGUpO30sb25HcmlkVG9nZ2xlXyhsZWZ0KXtjb25zdCBzZWxlY3Rpb249dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8uc2VsZWN0aW9uO2NvbnN0IHRiPWxlZnQ/c2VsZWN0aW9uLmJvdW5kcy5taW46c2VsZWN0aW9uLmJvdW5kcy5tYXg7aWYodGhpcy52aWV3cG9ydF8uZ3JpZEVuYWJsZWQmJnRoaXMudmlld3BvcnRfLmdyaWRTaWRlPT09bGVmdCYmdGhpcy52aWV3cG9ydF8uZ3JpZEluaXRpYWxUaW1lYmFzZT09PXRiKXt0aGlzLnZpZXdwb3J0Xy5ncmlkc2lkZT11bmRlZmluZWQ7dGhpcy52aWV3cG9ydF8uZ3JpZEVuYWJsZWQ9ZmFsc2U7dGhpcy52aWV3cG9ydF8uZ3JpZEluaXRpYWxUaW1lYmFzZT11bmRlZmluZWQ7cmV0dXJuO30KY29uc3QgbnVtSW50ZXJ2YWxzU2luY2VTdGFydD1NYXRoLmNlaWwoKHRiLXRoaXMubW9kZWxfLmJvdW5kcy5taW4pL3RoaXMudmlld3BvcnRfLmdyaWRTdGVwXyk7dGhpcy52aWV3cG9ydF8uZ3JpZEVuYWJsZWQ9dHJ1ZTt0aGlzLnZpZXdwb3J0Xy5ncmlkU2lkZT1sZWZ0O3RoaXMudmlld3BvcnRfLmdyaWRJbml0aWFsVGltZWJhc2U9dGI7dGhpcy52aWV3cG9ydF8uZ3JpZFRpbWViYXNlPXRiLQoobnVtSW50ZXJ2YWxzU2luY2VTdGFydCsxKSp0aGlzLnZpZXdwb3J0Xy5ncmlkU3RlcF87fSxzdG9yZUxhc3RNb3VzZVBvc18oZSl7dGhpcy5sYXN0TW91c2VWaWV3UG9zXz10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO30sc3RvcmVMYXN0VG91Y2hQb3NpdGlvbnNfKGUpe3RoaXMubGFzdFRvdWNoVmlld1Bvc2l0aW9uc189dGhpcy5leHRyYWN0UmVsYXRpdmVUb3VjaFBvc2l0aW9uc18oZSk7fSxleHRyYWN0UmVsYXRpdmVNb3VzZVBvc2l0aW9uXyhlKXtjb25zdCBjYW52PXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uY2FudmFzO3JldHVybnt4OmUuY2xpZW50WC1jYW52Lm9mZnNldExlZnQseTplLmNsaWVudFktY2Fudi5vZmZzZXRUb3B9O30sZXh0cmFjdFJlbGF0aXZlVG91Y2hQb3NpdGlvbnNfKGUpe2NvbnN0IGNhbnY9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXM7Y29uc3QgdG91Y2hlcz1bXTtmb3IobGV0IGk9MDtpPGUudG91Y2hlcy5sZW5ndGg7KytpKXt0b3VjaGVzLnB1c2goe3g6ZS50b3VjaGVzW2ldLmNsaWVudFgtY2Fudi5vZmZzZXRMZWZ0LHk6ZS50b3VjaGVzW2ldLmNsaWVudFktY2Fudi5vZmZzZXRUb3B9KTt9CnJldHVybiB0b3VjaGVzO30sc3RvcmVJbml0aWFsTW91c2VEb3duUG9zXyhlKXtjb25zdCBwb3NpdGlvbj10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO3RoaXMubW91c2VWaWV3UG9zQXRNb3VzZURvd25fLng9cG9zaXRpb24ueDt0aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXy55PXBvc2l0aW9uLnk7fSxmb2N1c0VsZW1lbnRzXygpe3RoaXMuJC5ob3RrZXlfY29udHJvbGxlci5jaGlsZFJlcXVlc3RzR2VuZXJhbEZvY3VzKHRoaXMpO30sc3RvcmVJbml0aWFsSW50ZXJhY3Rpb25Qb3NpdGlvbnNBbmRGb2N1c18oZSl7dGhpcy5zdG9yZUluaXRpYWxNb3VzZURvd25Qb3NfKGUpO3RoaXMuc3RvcmVMYXN0TW91c2VQb3NfKGUpO3RoaXMuZm9jdXNFbGVtZW50c18oKTt9LG9uQmVnaW5QYW5TY2FuXyhlKXtjb25zdCB2cD10aGlzLnZpZXdwb3J0Xzt0aGlzLnZpZXdwb3J0RGlzcGxheVRyYW5zZm9ybUF0TW91c2VEb3duXz12cC5jdXJyZW50RGlzcGxheVRyYW5zZm9ybS5jbG9uZSgpO3RoaXMuaXNQYW5uaW5nQW5kU2Nhbm5pbmdfPXRydWU7dGhpcy5zdG9yZUluaXRpYWxJbnRlcmFjdGlvblBvc2l0aW9uc0FuZEZvY3VzXyhlKTtlLnByZXZlbnREZWZhdWx0KCk7fSxvblVwZGF0ZVBhblNjYW5fKGUpe2lmKCF0aGlzLmlzUGFubmluZ0FuZFNjYW5uaW5nXylyZXR1cm47Y29uc3Qgdmlld1dpZHRoPXRoaXMudmlld1dpZHRoXztjb25zdCBwaXhlbFJhdGlvPXdpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxO2NvbnN0IHhEZWx0YVZpZXc9cGl4ZWxSYXRpbyoodGhpcy5sYXN0TW91c2VWaWV3UG9zXy54LQp0aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXy54KTtjb25zdCB5RGVsdGE9dGhpcy5sYXN0TW91c2VWaWV3UG9zXy55LQp0aGlzLm1vdXNlVmlld1Bvc0F0TW91c2VEb3duXy55O3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KHRoaXMudmlld3BvcnREaXNwbGF5VHJhbnNmb3JtQXRNb3VzZURvd25fKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLmluY3JlbWVudFBhblhJblZpZXdVbml0cyh4RGVsdGFWaWV3KTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnBhblktPXlEZWx0YTt0aGlzLnZpZXdwb3J0Xy5zZXREaXNwbGF5VHJhbnNmb3JtSW1tZWRpYXRlbHkodGhpcy5kaXNwbGF5VHJhbnNmb3JtXyk7ZS5wcmV2ZW50RGVmYXVsdCgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7dGhpcy5zdG9yZUxhc3RNb3VzZVBvc18oZSk7fSxvbkVuZFBhblNjYW5fKGUpe3RoaXMuaXNQYW5uaW5nQW5kU2Nhbm5pbmdfPWZhbHNlO3RoaXMuc3RvcmVMYXN0TW91c2VQb3NfKGUpO2lmKCFlLmlzQ2xpY2spe2UucHJldmVudERlZmF1bHQoKTt9fSxvbkJlZ2luU2VsZWN0aW9uXyhlKXtjb25zdCBjYW52PXRoaXMubW9kZWxUcmFja0NvbnRhaW5lcl8uY2FudmFzO2NvbnN0IHJlY3Q9dGhpcy5tb2RlbFRyYWNrXy5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKTtjb25zdCBjYW52UmVjdD1jYW52LmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO2NvbnN0IGluc2lkZT1yZWN0JiZlLmNsaWVudFg+PXJlY3QubGVmdCYmZS5jbGllbnRYPHJlY3QucmlnaHQmJmUuY2xpZW50WT49cmVjdC50b3AmJmUuY2xpZW50WTxyZWN0LmJvdHRvbSYmZS5jbGllbnRYPj1jYW52UmVjdC5sZWZ0JiZlLmNsaWVudFg8Y2FudlJlY3QucmlnaHQ7aWYoIWluc2lkZSlyZXR1cm47dGhpcy5kcmFnQmVnaW5FdmVudF89ZTt0aGlzLnN0b3JlSW5pdGlhbEludGVyYWN0aW9uUG9zaXRpb25zQW5kRm9jdXNfKGUpO2UucHJldmVudERlZmF1bHQoKTt9LG9uVXBkYXRlU2VsZWN0aW9uXyhlKXtpZighdGhpcy5kcmFnQmVnaW5FdmVudF8pcmV0dXJuO3RoaXMuZHJhZ0JveFhTdGFydF89dGhpcy5kcmFnQmVnaW5FdmVudF8uY2xpZW50WDt0aGlzLmRyYWdCb3hYRW5kXz1lLmNsaWVudFg7dGhpcy5kcmFnQm94WVN0YXJ0Xz10aGlzLmRyYWdCZWdpbkV2ZW50Xy5jbGllbnRZO3RoaXMuZHJhZ0JveFlFbmRfPWUuY2xpZW50WTt0aGlzLnNldERyYWdCb3hQb3NpdGlvbl8odGhpcy5kcmFnQm94WFN0YXJ0Xyx0aGlzLmRyYWdCb3hZU3RhcnRfLHRoaXMuZHJhZ0JveFhFbmRfLHRoaXMuZHJhZ0JveFlFbmRfKTt9LG9uRW5kU2VsZWN0aW9uXyhlKXtlLnByZXZlbnREZWZhdWx0KCk7aWYoIXRoaXMuZHJhZ0JlZ2luRXZlbnRfKXJldHVybjt0aGlzLmhpZGVEcmFnQm94XygpO2NvbnN0IGVEb3duPXRoaXMuZHJhZ0JlZ2luRXZlbnRfO3RoaXMuZHJhZ0JlZ2luRXZlbnRfPXVuZGVmaW5lZDtjb25zdCBsb1k9TWF0aC5taW4oZURvd24uY2xpZW50WSxlLmNsaWVudFkpO2NvbnN0IGhpWT1NYXRoLm1heChlRG93bi5jbGllbnRZLGUuY2xpZW50WSk7Y29uc3QgbG9YPU1hdGgubWluKGVEb3duLmNsaWVudFgsZS5jbGllbnRYKTtjb25zdCBoaVg9TWF0aC5tYXgoZURvd24uY2xpZW50WCxlLmNsaWVudFgpO2NvbnN0IGNhbnY9dGhpcy5tb2RlbFRyYWNrQ29udGFpbmVyXy5jYW52YXM7Y29uc3Qgd29ybGRPZmZzZXQ9Y2Fudi5nZXRCb3VuZGluZ0NsaWVudFJlY3QoKS5sZWZ0O2NvbnN0IGxvVlg9bG9YLXdvcmxkT2Zmc2V0O2NvbnN0IGhpVlg9aGlYLXdvcmxkT2Zmc2V0O2NvbnN0IHNlbGVjdGlvbj1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtpZihlRG93bi5hcHBlbmRTZWxlY3Rpb24pe2NvbnN0IHByZXZpb3VzU2VsZWN0aW9uPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnNlbGVjdGlvbjtpZihwcmV2aW91c1NlbGVjdGlvbiE9PXVuZGVmaW5lZCl7c2VsZWN0aW9uLmFkZEV2ZW50U2V0KHByZXZpb3VzU2VsZWN0aW9uKTt9fQp0aGlzLm1vZGVsVHJhY2tfLmFkZEludGVyc2VjdGluZ0V2ZW50c0luUmFuZ2VUb1NlbGVjdGlvbihsb1ZYLGhpVlgsbG9ZLGhpWSxzZWxlY3Rpb24pO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmNoYW5nZVNlbGVjdGlvbkZyb21UaW1lbGluZShzZWxlY3Rpb24pO30sb25CZWdpblpvb21fKGUpe3RoaXMuaXNab29taW5nXz10cnVlO3RoaXMuc3RvcmVJbml0aWFsSW50ZXJhY3Rpb25Qb3NpdGlvbnNBbmRGb2N1c18oZSk7ZS5wcmV2ZW50RGVmYXVsdCgpO30sb25VcGRhdGVab29tXyhlKXtpZighdGhpcy5pc1pvb21pbmdfKXJldHVybjtjb25zdCBuZXdQb3NpdGlvbj10aGlzLmV4dHJhY3RSZWxhdGl2ZU1vdXNlUG9zaXRpb25fKGUpO2NvbnN0IHpvb21TY2FsZVZhbHVlPTErKHRoaXMubGFzdE1vdXNlVmlld1Bvc18ueS0KbmV3UG9zaXRpb24ueSkqMC4wMTt0aGlzLnpvb21CeV8oem9vbVNjYWxlVmFsdWUsZmFsc2UpO3RoaXMuc3RvcmVMYXN0TW91c2VQb3NfKGUpO30sb25FbmRab29tXyhlKXt0aGlzLmlzWm9vbWluZ189ZmFsc2U7aWYoIWUuaXNDbGljayl7ZS5wcmV2ZW50RGVmYXVsdCgpO319LGNvbXB1dGVUb3VjaENlbnRlcl8ocG9zaXRpb25zKXtsZXQgeFN1bT0wO2xldCB5U3VtPTA7Zm9yKGxldCBpPTA7aTxwb3NpdGlvbnMubGVuZ3RoOysraSl7eFN1bSs9cG9zaXRpb25zW2ldLng7eVN1bSs9cG9zaXRpb25zW2ldLnk7fQpyZXR1cm57eDp4U3VtL3Bvc2l0aW9ucy5sZW5ndGgseTp5U3VtL3Bvc2l0aW9ucy5sZW5ndGh9O30sY29tcHV0ZVRvdWNoU3Bhbl8ocG9zaXRpb25zKXtsZXQgeE1pbj1OdW1iZXIuTUFYX1ZBTFVFO2xldCB5TWluPU51bWJlci5NQVhfVkFMVUU7bGV0IHhNYXg9TnVtYmVyLk1JTl9WQUxVRTtsZXQgeU1heD1OdW1iZXIuTUlOX1ZBTFVFO2ZvcihsZXQgaT0wO2k8cG9zaXRpb25zLmxlbmd0aDsrK2kpe3hNaW49TWF0aC5taW4oeE1pbixwb3NpdGlvbnNbaV0ueCk7eU1pbj1NYXRoLm1pbih5TWluLHBvc2l0aW9uc1tpXS55KTt4TWF4PU1hdGgubWF4KHhNYXgscG9zaXRpb25zW2ldLngpO3lNYXg9TWF0aC5tYXgoeU1heCxwb3NpdGlvbnNbaV0ueSk7fQpyZXR1cm4gTWF0aC5zcXJ0KCh4TWluLXhNYXgpKih4TWluLXhNYXgpKwooeU1pbi15TWF4KSooeU1pbi15TWF4KSk7fSxvblVwZGF0ZVRyYW5zZm9ybUZvclRvdWNoXyhlKXtjb25zdCBuZXdQb3NpdGlvbnM9dGhpcy5leHRyYWN0UmVsYXRpdmVUb3VjaFBvc2l0aW9uc18oZSk7Y29uc3QgY3VycmVudFBvc2l0aW9ucz10aGlzLmxhc3RUb3VjaFZpZXdQb3NpdGlvbnNfO2NvbnN0IG5ld0NlbnRlcj10aGlzLmNvbXB1dGVUb3VjaENlbnRlcl8obmV3UG9zaXRpb25zKTtjb25zdCBjdXJyZW50Q2VudGVyPXRoaXMuY29tcHV0ZVRvdWNoQ2VudGVyXyhjdXJyZW50UG9zaXRpb25zKTtjb25zdCBuZXdTcGFuPXRoaXMuY29tcHV0ZVRvdWNoU3Bhbl8obmV3UG9zaXRpb25zKTtjb25zdCBjdXJyZW50U3Bhbj10aGlzLmNvbXB1dGVUb3VjaFNwYW5fKGN1cnJlbnRQb3NpdGlvbnMpO2NvbnN0IHZwPXRoaXMudmlld3BvcnRfO2NvbnN0IHZpZXdXaWR0aD10aGlzLnZpZXdXaWR0aF87Y29uc3QgcGl4ZWxSYXRpbz13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MTtjb25zdCB4RGVsdGE9cGl4ZWxSYXRpbyoobmV3Q2VudGVyLngtY3VycmVudENlbnRlci54KTtjb25zdCB5RGVsdGE9bmV3Q2VudGVyLnktY3VycmVudENlbnRlci55O2NvbnN0IHpvb21TY2FsZVZhbHVlPWN1cnJlbnRTcGFuPjEwP25ld1NwYW4vY3VycmVudFNwYW46MTtjb25zdCB2aWV3Rm9jdXM9cGl4ZWxSYXRpbypuZXdDZW50ZXIueDtjb25zdCB3b3JsZEZvY3VzPXZwLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtLnhWaWV3VG9Xb3JsZCh2aWV3Rm9jdXMpO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8uc2V0KHZwLmN1cnJlbnREaXNwbGF5VHJhbnNmb3JtKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLnNjYWxlWCo9em9vbVNjYWxlVmFsdWU7dGhpcy5kaXNwbGF5VHJhbnNmb3JtXy54UGFuV29ybGRQb3NUb1ZpZXdQb3Mod29ybGRGb2N1cyx2aWV3Rm9jdXMsdmlld1dpZHRoKTt0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fLmluY3JlbWVudFBhblhJblZpZXdVbml0cyh4RGVsdGEpO3RoaXMuZGlzcGxheVRyYW5zZm9ybV8ucGFuWS09eURlbHRhO3ZwLnNldERpc3BsYXlUcmFuc2Zvcm1JbW1lZGlhdGVseSh0aGlzLmRpc3BsYXlUcmFuc2Zvcm1fKTt0aGlzLnN0b3JlTGFzdFRvdWNoUG9zaXRpb25zXyhlKTt9LGluaXRIaW50VGV4dF8oKXt0aGlzLiQuaGludF90ZXh0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMucGVuZGluZ0hpbnRUZXh0Q2xlYXJUaW1lb3V0Xz11bmRlZmluZWQ7fSxzaG93SGludFRleHRfKHRleHQpe2lmKHRoaXMucGVuZGluZ0hpbnRUZXh0Q2xlYXJUaW1lb3V0Xyl7d2luZG93LmNsZWFyVGltZW91dCh0aGlzLnBlbmRpbmdIaW50VGV4dENsZWFyVGltZW91dF8pO3RoaXMucGVuZGluZ0hpbnRUZXh0Q2xlYXJUaW1lb3V0Xz11bmRlZmluZWQ7fQp0aGlzLnBlbmRpbmdIaW50VGV4dENsZWFyVGltZW91dF89c2V0VGltZW91dCh0aGlzLmhpZGVIaW50VGV4dF8uYmluZCh0aGlzKSwxMDAwKTtQb2x5bWVyLmRvbSh0aGlzLiQuaGludF90ZXh0KS50ZXh0Q29udGVudD10ZXh0O3RoaXMuJC5oaW50X3RleHQuc3R5bGUuZGlzcGxheT0nJzt9LGhpZGVIaW50VGV4dF8oKXt0aGlzLnBlbmRpbmdIaW50VGV4dENsZWFyVGltZW91dF89dW5kZWZpbmVkO3RoaXMuJC5oaW50X3RleHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktZmluZC1jb250cm9sJyxmaWx0ZXJLZXlEb3duKGUpe2lmKGUua2V5Q29kZT09PTI3KXtjb25zdCBoa2M9dHIuYi5nZXRIb3RrZXlDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzKTtpZihoa2Mpe2hrYy5jaGlsZFJlcXVlc3RzQmx1cih0aGlzKTt9ZWxzZXt0aGlzLmJsdXIoKTt9CmUucHJldmVudERlZmF1bHQoKTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybjt9ZWxzZSBpZihlLmtleUNvZGU9PT0xMyl7aWYoZS5zaGlmdEtleSl7dGhpcy5maW5kUHJldmlvdXMoKTt9ZWxzZXt0aGlzLmZpbmROZXh0KCk7fX19LGZpbHRlckJsdXIoZSl7dGhpcy51cGRhdGVIaXRDb3VudEVsKCk7fSxmaWx0ZXJGb2N1cyhlKXt0aGlzLiQuZmlsdGVyLnNlbGVjdCgpO30sZmlsdGVyTW91c2VVcChlKXtlLnByZXZlbnREZWZhdWx0KCk7fSxnZXQgY29udHJvbGxlcigpe3JldHVybiB0aGlzLmNvbnRyb2xsZXJfO30sc2V0IGNvbnRyb2xsZXIoYyl7dGhpcy5jb250cm9sbGVyXz1jO3RoaXMudXBkYXRlSGl0Q291bnRFbCgpO30sZm9jdXMoKXt0aGlzLiQuZmlsdGVyLmZvY3VzKCk7fSxnZXQgaGFzRm9jdXMoKXtyZXR1cm4gdGhpcz09PWRvY3VtZW50LmFjdGl2ZUVsZW1lbnQ7fSxmaWx0ZXJUZXh0Q2hhbmdlZCgpe1BvbHltZXIuZG9tKHRoaXMuJC5oaXRDb3VudCkudGV4dENvbnRlbnQ9Jyc7dGhpcy4kLnNwaW5uZXIuc3R5bGUudmlzaWJpbGl0eT0ndmlzaWJsZSc7dGhpcy4kLnNwaW5uZXIuc3R5bGUuYW5pbWF0aW9uPSdzcGluIDFzIGxpbmVhciBpbmZpbml0ZSc7dGhpcy5jb250cm9sbGVyLnN0YXJ0RmlsdGVyaW5nKHRoaXMuJC5maWx0ZXIudmFsdWUpLnRoZW4oZnVuY3Rpb24oKXt0aGlzLiQuc3Bpbm5lci5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO3RoaXMuJC5zcGlubmVyLnN0eWxlLmFuaW1hdGlvbj0nJzt0aGlzLnVwZGF0ZUhpdENvdW50RWwoKTt9LmJpbmQodGhpcykpO30sZmluZE5leHQoKXtpZih0aGlzLmNvbnRyb2xsZXIpe3RoaXMuY29udHJvbGxlci5maW5kTmV4dCgpO30KdGhpcy51cGRhdGVIaXRDb3VudEVsKCk7fSxmaW5kUHJldmlvdXMoKXtpZih0aGlzLmNvbnRyb2xsZXIpe3RoaXMuY29udHJvbGxlci5maW5kUHJldmlvdXMoKTt9CnRoaXMudXBkYXRlSGl0Q291bnRFbCgpO30sdXBkYXRlSGl0Q291bnRFbCgpe2lmKCF0aGlzLmNvbnRyb2xsZXJ8fHRoaXMuJC5maWx0ZXIudmFsdWUubGVuZ3RoPT09MCl7UG9seW1lci5kb20odGhpcy4kLmhpdENvdW50KS50ZXh0Q29udGVudD0nJztyZXR1cm47fQpjb25zdCBuPXRoaXMuY29udHJvbGxlci5maWx0ZXJIaXRzLmxlbmd0aDtjb25zdCBpPW49PT0wPy0xOnRoaXMuY29udHJvbGxlci5jdXJyZW50SGl0SW5kZXg7UG9seW1lci5kb20odGhpcy4kLmhpdENvdW50KS50ZXh0Q29udGVudD0oaSsxKSsnIG9mICcrbjt9LHNldFRleHQoc3RyaW5nKXt0aGlzLiQuZmlsdGVyLnZhbHVlPXN0cmluZzt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBDb250ZXh0KCl7dGhpcy5ldmVudD11bmRlZmluZWQ7dGhpcy5hbmNlc3RvcnM9W107fQpDb250ZXh0LnByb3RvdHlwZT17cHVzaChldmVudCl7Y29uc3QgY3R4PW5ldyBDb250ZXh0KCk7Y3R4LmFuY2VzdG9ycz10aGlzLmFuY2VzdG9ycy5zbGljZSgpO2N0eC5hbmNlc3RvcnMucHVzaChldmVudCk7cmV0dXJuIGN0eDt9LHBvcChldmVudCl7Y29uc3QgY3R4PW5ldyBDb250ZXh0KCk7Y3R4LmV2ZW50PXRoaXMuYW5jZXN0b3JzW3RoaXMuYW5jZXN0b3JzLmxlbmd0aC0xXTtjdHguYW5jZXN0b3JzPXRoaXMuYW5jZXN0b3JzLnNsaWNlKDAsdGhpcy5hbmNlc3RvcnMubGVuZ3RoLTEpO3JldHVybiBjdHg7fX07cmV0dXJue0NvbnRleHQsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZpbHRlcigpe3RyLmMuU2NyaXB0aW5nT2JqZWN0LmNhbGwodGhpcyk7fQpGaWx0ZXIubm9ybWFsaXplRmlsdGVyRXhwcmVzc2lvbj1mdW5jdGlvbihmaWx0ZXJFeHByZXNzaW9uKXtpZihmaWx0ZXJFeHByZXNzaW9uIGluc3RhbmNlb2YgU3RyaW5nfHx0eXBlb2YoZmlsdGVyRXhwcmVzc2lvbik9PT0nc3RyaW5nJ3x8ZmlsdGVyRXhwcmVzc2lvbiBpbnN0YW5jZW9mIFJlZ0V4cCl7Y29uc3QgZmlsdGVyPW5ldyB0ci5lLnRxdWVyeS5GaWx0ZXJIYXNUaXRsZShmaWx0ZXJFeHByZXNzaW9uKTtyZXR1cm4gZmlsdGVyO30KcmV0dXJuIGZpbHRlckV4cHJlc3Npb247fTtGaWx0ZXIucHJvdG90eXBlPXtfX3Byb3RvX186dHIuYy5TY3JpcHRpbmdPYmplY3QucHJvdG90eXBlLGV2YWx1YXRlKGNvbnRleHQpe3Rocm93IG5ldyBFcnJvcignTm90IGltcGxlbWVudGVkJyk7fSxtYXRjaFZhbHVlXyh2YWx1ZSxleHBlY3RlZCl7aWYoZXhwZWN0ZWQgaW5zdGFuY2VvZiBSZWdFeHApe3JldHVybiBleHBlY3RlZC50ZXN0KHZhbHVlKTt9ZWxzZSBpZihleHBlY3RlZCBpbnN0YW5jZW9mIEZ1bmN0aW9uKXtyZXR1cm4gZXhwZWN0ZWQodmFsdWUpO30KcmV0dXJuIHZhbHVlPT09ZXhwZWN0ZWQ7fX07cmV0dXJue0ZpbHRlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmlsdGVyQWxsT2Yob3B0X3N1YkV4cHJlc3Npb25zKXt0ci5lLnRxdWVyeS5GaWx0ZXIuY2FsbCh0aGlzKTt0aGlzLnN1YkV4cHJlc3Npb25zPW9wdF9zdWJFeHByZXNzaW9uc3x8W107fQpGaWx0ZXJBbGxPZi5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLHNldCBzdWJFeHByZXNzaW9ucyhleHBycyl7dGhpcy5zdWJFeHByZXNzaW9uc189W107Zm9yKGxldCBpPTA7aTxleHBycy5sZW5ndGg7aSsrKXt0aGlzLnN1YkV4cHJlc3Npb25zXy5wdXNoKHRyLmUudHF1ZXJ5LkZpbHRlci5ub3JtYWxpemVGaWx0ZXJFeHByZXNzaW9uKGV4cHJzW2ldKSk7fX0sZ2V0IHN1YkV4cHJlc3Npb25zKCl7cmV0dXJuIHRoaXMuc3ViRXhwcmVzc2lvbnNfO30sZXZhbHVhdGUoY29udGV4dCl7aWYoIXRoaXMuc3ViRXhwcmVzc2lvbnMubGVuZ3RoKXJldHVybiB0cnVlO2ZvcihsZXQgaT0wO2k8dGhpcy5zdWJFeHByZXNzaW9ucy5sZW5ndGg7aSsrKXtpZighdGhpcy5zdWJFeHByZXNzaW9uc1tpXS5ldmFsdWF0ZShjb250ZXh0KSl7cmV0dXJuIGZhbHNlO319CnJldHVybiB0cnVlO319O3RyLmMuU2NyaXB0aW5nT2JqZWN0UmVnaXN0cnkucmVnaXN0ZXIoZnVuY3Rpb24oKXtjb25zdCBleHBycz1bXTtmb3IobGV0IGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtleHBycy5wdXNoKGFyZ3VtZW50c1tpXSk7fQpyZXR1cm4gbmV3IEZpbHRlckFsbE9mKGV4cHJzKTt9LHtuYW1lOidhbGxPZid9KTtyZXR1cm57RmlsdGVyQWxsT2YsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZpbHRlck5vdChzdWJFeHByZXNzaW9uKXt0ci5lLnRxdWVyeS5GaWx0ZXIuY2FsbCh0aGlzKTt0aGlzLnN1YkV4cHJlc3Npb249c3ViRXhwcmVzc2lvbjt9CkZpbHRlck5vdC5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLHNldCBzdWJFeHByZXNzaW9uKGV4cHIpe3RoaXMuc3ViRXhwcmVzc2lvbl89dHIuZS50cXVlcnkuRmlsdGVyLm5vcm1hbGl6ZUZpbHRlckV4cHJlc3Npb24oZXhwcik7fSxnZXQgc3ViRXhwcmVzc2lvbigpe3JldHVybiB0aGlzLnN1YkV4cHJlc3Npb25fO30sZXZhbHVhdGUoY29udGV4dCl7cmV0dXJuIXRoaXMuc3ViRXhwcmVzc2lvbi5ldmFsdWF0ZShjb250ZXh0KTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtpZihleHBycy5sZW5ndGghPT0xKXt0aHJvdyBuZXcgRXJyb3IoJ25vdCgpIG11c3QgaGF2ZSBleGFjdGx5IG9uZSBzdWJleHByZXNzaW9uJyk7fQpyZXR1cm4gbmV3IEZpbHRlck5vdChleHByc1swXSk7fSx7bmFtZTonbm90J30pO3JldHVybntGaWx0ZXJOb3QsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZpbHRlckFueU9mKG9wdF9zdWJFeHByZXNzaW9ucyl7dHIuZS50cXVlcnkuRmlsdGVyLmNhbGwodGhpcyk7dGhpcy5zdWJFeHByZXNzaW9ucz1vcHRfc3ViRXhwcmVzc2lvbnN8fFtdO30KRmlsdGVyQW55T2YucHJvdG90eXBlPXtfX3Byb3RvX186dHIuZS50cXVlcnkuRmlsdGVyLnByb3RvdHlwZSxzZXQgc3ViRXhwcmVzc2lvbnMoZXhwcnMpe3RoaXMuc3ViRXhwcmVzc2lvbnNfPVtdO2ZvcihsZXQgaT0wO2k8ZXhwcnMubGVuZ3RoO2krKyl7dGhpcy5zdWJFeHByZXNzaW9uc18ucHVzaCh0ci5lLnRxdWVyeS5GaWx0ZXIubm9ybWFsaXplRmlsdGVyRXhwcmVzc2lvbihleHByc1tpXSkpO319LGdldCBzdWJFeHByZXNzaW9ucygpe3JldHVybiB0aGlzLnN1YkV4cHJlc3Npb25zXzt9LGV2YWx1YXRlKGNvbnRleHQpe2lmKCF0aGlzLnN1YkV4cHJlc3Npb25zLmxlbmd0aClyZXR1cm4gdHJ1ZTtmb3IobGV0IGk9MDtpPHRoaXMuc3ViRXhwcmVzc2lvbnMubGVuZ3RoO2krKyl7aWYodGhpcy5zdWJFeHByZXNzaW9uc1tpXS5ldmFsdWF0ZShjb250ZXh0KSlyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbmV3IEZpbHRlckFueU9mKGV4cHJzKTt9LHtuYW1lOidhbnlPZid9KTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7Y29uc3QgZXhwcnM9QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzKTtyZXR1cm4gbmV3IHRyLmUudHF1ZXJ5LkZpbHRlck5vdChuZXcgRmlsdGVyQW55T2YoZXhwcnMpKTt9LHtuYW1lOidub25lT2YnfSk7cmV0dXJue0ZpbHRlckFueU9mLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJIYXNBbmNlc3RvcihvcHRfc3ViRXhwcmVzc2lvbil7dGhpcy5zdWJFeHByZXNzaW9uPW9wdF9zdWJFeHByZXNzaW9uO30KRmlsdGVySGFzQW5jZXN0b3IucHJvdG90eXBlPXtfX3Byb3RvX186dHIuZS50cXVlcnkuRmlsdGVyLnByb3RvdHlwZSxzZXQgc3ViRXhwcmVzc2lvbihleHByKXt0aGlzLnN1YkV4cHJlc3Npb25fPXRyLmUudHF1ZXJ5LkZpbHRlci5ub3JtYWxpemVGaWx0ZXJFeHByZXNzaW9uKGV4cHIpO30sZ2V0IHN1YkV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5zdWJFeHByZXNzaW9uXzt9LGV2YWx1YXRlKGNvbnRleHQpe2lmKCF0aGlzLnN1YkV4cHJlc3Npb24pe3JldHVybiBjb250ZXh0LmFuY2VzdG9ycy5sZW5ndGg+MDt9CndoaWxlKGNvbnRleHQuYW5jZXN0b3JzLmxlbmd0aCl7Y29udGV4dD1jb250ZXh0LnBvcCgpO2lmKHRoaXMuc3ViRXhwcmVzc2lvbi5ldmFsdWF0ZShjb250ZXh0KSlyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9fTt0ci5jLlNjcmlwdGluZ09iamVjdFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKHN1YkV4cHJlc3Npb24pe3JldHVybiBuZXcgRmlsdGVySGFzQW5jZXN0b3Ioc3ViRXhwcmVzc2lvbik7fSx7bmFtZTonaGFzQW5jZXN0b3InfSk7cmV0dXJue0ZpbHRlckhhc0FuY2VzdG9yLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5lLnRxdWVyeScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGaWx0ZXJIYXNEdXJhdGlvbihtaW5WYWx1ZU9yRXhwZWN0ZWQsb3B0X21heFZhbHVlKXtpZihtaW5WYWx1ZU9yRXhwZWN0ZWQhPT11bmRlZmluZWQmJm9wdF9tYXhWYWx1ZSE9PXVuZGVmaW5lZCl7dGhpcy5taW5WYWx1ZT1taW5WYWx1ZU9yRXhwZWN0ZWQ7dGhpcy5tYXhWYWx1ZT1vcHRfbWF4VmFsdWU7fWVsc2V7dGhpcy5leHBlY3RlZD1taW5WYWx1ZU9yRXhwZWN0ZWQ7fX0KRmlsdGVySGFzRHVyYXRpb24ucHJvdG90eXBlPXtfX3Byb3RvX186dHIuZS50cXVlcnkuRmlsdGVyLnByb3RvdHlwZSxldmFsdWF0ZShjb250ZXh0KXtpZihjb250ZXh0LmV2ZW50LmR1cmF0aW9uPT09dW5kZWZpbmVkKXJldHVybiBmYWxzZTtpZih0aGlzLm1pblZhbHVlIT09dW5kZWZpbmVkJiZ0aGlzLm1heFZhbHVlIT09dW5kZWZpbmVkKXtyZXR1cm4gY29udGV4dC5ldmVudC5kdXJhdGlvbj49dGhpcy5taW5WYWx1ZSYmY29udGV4dC5ldmVudC5kdXJhdGlvbjw9dGhpcy5tYXhWYWx1ZTt9CnJldHVybiB0aGlzLm1hdGNoVmFsdWVfKGNvbnRleHQuZXZlbnQuZHVyYXRpb24sdGhpcy5leHBlY3RlZCk7fX07dHIuYy5TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbihtaW5WYWx1ZU9yRXhwZWN0ZWQsb3B0X21heFZhbHVlKXtyZXR1cm4gbmV3IEZpbHRlckhhc0R1cmF0aW9uKG1pblZhbHVlT3JFeHBlY3RlZCxvcHRfbWF4VmFsdWUpO30se25hbWU6J2hhc0R1cmF0aW9uJ30pO3JldHVybntGaWx0ZXJIYXNEdXJhdGlvbix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gRmlsdGVySGFzVGl0bGUoZXhwZWN0ZWQpe3RyLmUudHF1ZXJ5LkZpbHRlci5jYWxsKHRoaXMpO3RoaXMuZXhwZWN0ZWQ9ZXhwZWN0ZWQ7fQpGaWx0ZXJIYXNUaXRsZS5wcm90b3R5cGU9e19fcHJvdG9fXzp0ci5lLnRxdWVyeS5GaWx0ZXIucHJvdG90eXBlLGV2YWx1YXRlKGNvbnRleHQpe3JldHVybiB0aGlzLm1hdGNoVmFsdWVfKGNvbnRleHQuZXZlbnQudGl0bGUsdGhpcy5leHBlY3RlZCk7fX07dHIuYy5TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbihleHBlY3RlZCl7Y29uc3QgZmlsdGVyPW5ldyB0ci5lLnRxdWVyeS5GaWx0ZXJIYXNUaXRsZShleHBlY3RlZCk7cmV0dXJuIGZpbHRlcjt9LHtuYW1lOidoYXNUaXRsZSd9KTtyZXR1cm57RmlsdGVySGFzVGl0bGUsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLmUudHF1ZXJ5JyxmdW5jdGlvbigpe2Z1bmN0aW9uIEZpbHRlcklzVG9wTGV2ZWwob3B0X3N1YkV4cHJlc3Npb24pe3RoaXMuc3ViRXhwcmVzc2lvbj1vcHRfc3ViRXhwcmVzc2lvbjt9CkZpbHRlcklzVG9wTGV2ZWwucHJvdG90eXBlPXtfX3Byb3RvX186dHIuZS50cXVlcnkuRmlsdGVyLnByb3RvdHlwZSxzZXQgc3ViRXhwcmVzc2lvbihleHByKXt0aGlzLnN1YkV4cHJlc3Npb25fPXRyLmUudHF1ZXJ5LkZpbHRlci5ub3JtYWxpemVGaWx0ZXJFeHByZXNzaW9uKGV4cHIpO30sZ2V0IHN1YkV4cHJlc3Npb24oKXtyZXR1cm4gdGhpcy5zdWJFeHByZXNzaW9uXzt9LGV2YWx1YXRlKGNvbnRleHQpe2lmKGNvbnRleHQuYW5jZXN0b3JzLmxlbmd0aD4wKXJldHVybiBmYWxzZTtpZighdGhpcy5zdWJFeHByZXNzaW9uKXJldHVybiB0cnVlO3JldHVybiB0aGlzLnN1YkV4cHJlc3Npb24uZXZhbHVhdGUoY29udGV4dCk7fX07dHIuYy5TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbihzdWJFeHByZXNzaW9uKXtyZXR1cm4gbmV3IEZpbHRlcklzVG9wTGV2ZWwoc3ViRXhwcmVzc2lvbik7fSx7bmFtZTonaXNUb3BMZXZlbCd9KTtyZXR1cm57RmlsdGVySXNUb3BMZXZlbCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIuZS50cXVlcnknLGZ1bmN0aW9uKCl7ZnVuY3Rpb24gYWRkRXZlbnRUcmVlVG9TZWxlY3Rpb24oc2VsZWN0aW9uLGV2ZW50KXtzZWxlY3Rpb24ucHVzaChldmVudCk7aWYoIWV2ZW50LnN1YlNsaWNlcylyZXR1cm47ZXZlbnQuc3ViU2xpY2VzLmZvckVhY2goYWRkRXZlbnRUcmVlVG9TZWxlY3Rpb24uYmluZCh1bmRlZmluZWQsc2VsZWN0aW9uKSk7fQpmdW5jdGlvbiBUUXVlcnkobW9kZWwpe3RyLmMuU2NyaXB0aW5nT2JqZWN0LmNhbGwodGhpcyk7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5wYXJlbnRfPXVuZGVmaW5lZDt0aGlzLmZpbHRlckV4cHJlc3Npb25fPXVuZGVmaW5lZDt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30KVFF1ZXJ5LnByb3RvdHlwZT17X19wcm90b19fOnRyLmMuU2NyaXB0aW5nT2JqZWN0LnByb3RvdHlwZSxvbk1vZGVsQ2hhbmdlZChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy5zZWxlY3Rpb25fPXVuZGVmaW5lZDt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LGZpbHRlcihmaWx0ZXJFeHByZXNzaW9uKXtjb25zdCByZXN1bHQ9bmV3IFRRdWVyeSh0aGlzLm1vZGVsXyk7cmVzdWx0LnBhcmVudF89dGhpcztyZXN1bHQuZmlsdGVyRXhwcmVzc2lvbl89dHIuZS50cXVlcnkuRmlsdGVyLm5vcm1hbGl6ZUZpbHRlckV4cHJlc3Npb24oZmlsdGVyRXhwcmVzc2lvbik7cmV0dXJuIHJlc3VsdDt9LGNyZWF0ZUZpbHRlclRhc2tHcmFwaF8oKXtjb25zdCBub2Rlcz1bdGhpc107d2hpbGUobm9kZXNbbm9kZXMubGVuZ3RoLTFdLnBhcmVudF8pe25vZGVzLnB1c2gobm9kZXNbbm9kZXMubGVuZ3RoLTFdLnBhcmVudF8pO30KY29uc3Qgcm9vdFRhc2s9bmV3IHRyLmIuVGFzaygpO2xldCBsYXN0VGFzaz1yb290VGFzaztsZXQgbm9kZTtmb3IobGV0IGk9bm9kZXMubGVuZ3RoLTE7aT49MDtpLS0pe25vZGU9bm9kZXNbaV07aWYobm9kZS5zZWxlY3Rpb25fIT09dW5kZWZpbmVkKWNvbnRpbnVlO25vZGUuc2VsZWN0aW9uXz1uZXcgdHIubW9kZWwuRXZlbnRTZXQoKTtpZihub2RlLnBhcmVudF89PT11bmRlZmluZWQpe2xhc3RUYXNrPWxhc3RUYXNrLmFmdGVyKHRoaXMuc2VsZWN0RXZlcnl0aGluZ0FzVGFza18obm9kZS5zZWxlY3Rpb25fKSk7fWVsc2V7Y29uc3QgcHJldk5vZGU9bm9kZXNbaSsxXTtsYXN0VGFzaz10aGlzLmNyZWF0ZUZpbHRlclRhc2tGb3JOb2RlXyhsYXN0VGFzayxub2RlLHByZXZOb2RlKTt9fQpyZXR1cm57cm9vdFRhc2ssbGFzdFRhc2ssbGFzdE5vZGU6bm9kZX07fSxjcmVhdGVGaWx0ZXJUYXNrRm9yTm9kZV8obGFzdFRhc2ssbm9kZSxwcmV2Tm9kZSl7cmV0dXJuIGxhc3RUYXNrLmFmdGVyKGZ1bmN0aW9uKCl7bm9kZS5ldmFsdWF0ZUZpbHRlckV4cHJlc3Npb25fKHByZXZOb2RlLnNlbGVjdGlvbl8sbm9kZS5zZWxlY3Rpb25fKTt9LHRoaXMpO30sZXZhbHVhdGVGaWx0ZXJFeHByZXNzaW9uXyhpbnB1dFNlbGVjdGlvbixvdXRwdXRTZWxlY3Rpb24pe2NvbnN0IHNlZW5FdmVudHM9e307aW5wdXRTZWxlY3Rpb24uZm9yRWFjaChmdW5jdGlvbihldmVudCl7Y29uc3QgY29udGV4dD1uZXcgdHIuZS50cXVlcnkuQ29udGV4dCgpO2NvbnRleHQuZXZlbnQ9ZXZlbnQ7dGhpcy5ldmFsdWF0ZUZpbHRlckV4cHJlc3Npb25Gb3JFdmVudF8oY29udGV4dCxpbnB1dFNlbGVjdGlvbixvdXRwdXRTZWxlY3Rpb24sc2VlbkV2ZW50cyk7fS5iaW5kKHRoaXMpKTt9LGV2YWx1YXRlRmlsdGVyRXhwcmVzc2lvbkZvckV2ZW50Xyhjb250ZXh0LGlucHV0U2VsZWN0aW9uLG91dHB1dFNlbGVjdGlvbixzZWVuRXZlbnRzKXtjb25zdCBldmVudD1jb250ZXh0LmV2ZW50O2lmKGlucHV0U2VsZWN0aW9uLmNvbnRhaW5zKGV2ZW50KSYmIXNlZW5FdmVudHNbZXZlbnQuZ3VpZF0pe3NlZW5FdmVudHNbZXZlbnQuZ3VpZF09dHJ1ZTtpZighdGhpcy5maWx0ZXJFeHByZXNzaW9uX3x8dGhpcy5maWx0ZXJFeHByZXNzaW9uXy5ldmFsdWF0ZShjb250ZXh0KSl7b3V0cHV0U2VsZWN0aW9uLnB1c2goZXZlbnQpO319CmlmKCFldmVudC5zdWJTbGljZXMpcmV0dXJuO2NvbnRleHQ9Y29udGV4dC5wdXNoKGV2ZW50KTtmb3IobGV0IGk9MDtpPGV2ZW50LnN1YlNsaWNlcy5sZW5ndGg7aSsrKXtjb250ZXh0LmV2ZW50PWV2ZW50LnN1YlNsaWNlc1tpXTt0aGlzLmV2YWx1YXRlRmlsdGVyRXhwcmVzc2lvbkZvckV2ZW50Xyhjb250ZXh0LGlucHV0U2VsZWN0aW9uLG91dHB1dFNlbGVjdGlvbixzZWVuRXZlbnRzKTt9fSxzZWxlY3RFdmVyeXRoaW5nQXNUYXNrXyhzZWxlY3Rpb24pe2NvbnN0IGZpbHRlclRhc2s9bmV3IHRyLmIuVGFzaygpO2Zvcihjb25zdCBjb250YWluZXIgb2YgdGhpcy5tb2RlbF8uZ2V0RGVzY2VuZGFudEV2ZW50Q29udGFpbmVycygpKXtmaWx0ZXJUYXNrLnN1YlRhc2soKCk9Pntmb3IoY29uc3QgZXZlbnQgb2YgY29udGFpbmVyLmNoaWxkRXZlbnRzKCkpe2FkZEV2ZW50VHJlZVRvU2VsZWN0aW9uKHNlbGVjdGlvbixldmVudCk7fX0sdGhpcyk7fQpyZXR1cm4gZmlsdGVyVGFzazt9LHJlYWR5KCl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKHJlc29sdmUscmVqZWN0KXtjb25zdCBncmFwaD10aGlzLmNyZWF0ZUZpbHRlclRhc2tHcmFwaF8oKTtncmFwaC5sYXN0VGFzaz1ncmFwaC5sYXN0VGFzay5hZnRlcihmdW5jdGlvbigpe3Jlc29sdmUodGhpcy5zZWxlY3Rpb25fKTt9LHRoaXMpO3RyLmIuVGFzay5SdW5XaGVuSWRsZShncmFwaC5yb290VGFzayk7fS5iaW5kKHRoaXMpKTt9LGdldCBzZWxlY3Rpb24oKXtpZih0aGlzLnNlbGVjdGlvbl89PT11bmRlZmluZWQpe2NvbnN0IGdyYXBoPXRoaXMuY3JlYXRlRmlsdGVyVGFza0dyYXBoXygpO3RyLmIuVGFzay5SdW5TeW5jaHJvbm91c2x5KGdyYXBoLnJvb3RUYXNrKTt9CnJldHVybiB0aGlzLnNlbGVjdGlvbl87fX07dHIuYy5TY3JpcHRpbmdPYmplY3RSZWdpc3RyeS5yZWdpc3RlcihuZXcgVFF1ZXJ5KCkse25hbWU6JyR0J30pO3JldHVybntUUXVlcnksfTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLXNjcmlwdGluZy1jb250cm9sJyxpc0VudGVyS2V5XyhldmVudCl7cmV0dXJuIGV2ZW50LmtleUNvZGUhPT0yMjkmJihldmVudC5rZXk9PT0nRW50ZXInfHxldmVudC5rZXlJZGVudGlmaWVyPT09J0VudGVyJyk7fSxzZXRGb2N1c18oZm9jdXNlZCl7Y29uc3QgcHJvbXB0RWw9dGhpcy4kLnByb21wdDtpZihmb2N1c2VkKXtwcm9tcHRFbC5mb2N1cygpO1BvbHltZXIuZG9tKHRoaXMuJC5yb290KS5jbGFzc0xpc3QuYWRkKCdmb2N1c2VkJyk7aWYocHJvbXB0RWwudmFsdWUubGVuZ3RoPjApe2NvbnN0IHNlbD13aW5kb3cuZ2V0U2VsZWN0aW9uKCk7c2VsLmNvbGxhcHNlKFBvbHltZXIuZG9tKHByb21wdEVsKS5maXJzdENoaWxkLHByb21wdEVsLnZhbHVlLmxlbmd0aCk7fX1lbHNle3Byb21wdEVsLmJsdXIoKTtQb2x5bWVyLmRvbSh0aGlzLiQucm9vdCkuY2xhc3NMaXN0LnJlbW92ZSgnZm9jdXNlZCcpO2NvbnN0IHBhcmVudD1wcm9tcHRFbC5wYXJlbnRFbGVtZW50O2NvbnN0IG5leHRFbD1Qb2x5bWVyLmRvbShwcm9tcHRFbCkubmV4dFNpYmxpbmc7cHJvbXB0RWwucmVtb3ZlKCk7UG9seW1lci5kb20ocGFyZW50KS5pbnNlcnRCZWZvcmUocHJvbXB0RWwsbmV4dEVsKTt9fSxvbkNvbnNvbGVGb2N1cyhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc2V0Rm9jdXNfKHRydWUpO30sb25Db25zb2xlQmx1cihlKXtlLnN0b3BQcm9wYWdhdGlvbigpO3RoaXMuc2V0Rm9jdXNfKGZhbHNlKTt9LHByb21wdEtleURvd24oZSl7ZS5zdG9wUHJvcGFnYXRpb24oKTtpZighdGhpcy5pc0VudGVyS2V5XyhlKSlyZXR1cm47ZS5wcmV2ZW50RGVmYXVsdCgpO2NvbnN0IHByb21wdEVsPXRoaXMuJC5wcm9tcHQ7Y29uc3QgY29tbWFuZD1wcm9tcHRFbC52YWx1ZTtpZihjb21tYW5kLmxlbmd0aD09PTApcmV0dXJuO3Byb21wdEVsLnZhbHVlPScnO3RoaXMuYWRkTGluZV8oU3RyaW5nLmZyb21DaGFyQ29kZSgxODcpKycgJytjb21tYW5kKTtsZXQgcmVzdWx0O3RyeXtyZXN1bHQ9dGhpcy5jb250cm9sbGVyXy5leGVjdXRlQ29tbWFuZChjb21tYW5kKTt9Y2F0Y2goZSl7cmVzdWx0PWUuc3RhY2t8fGUuc3RhY2tUcmFjZTt9CmlmKHJlc3VsdCBpbnN0YW5jZW9mIHRyLmUudHF1ZXJ5LlRRdWVyeSl7cmVzdWx0LnJlYWR5KCkudGhlbihmdW5jdGlvbihzZWxlY3Rpb24pe3RoaXMuYWRkTGluZV8oc2VsZWN0aW9uLmxlbmd0aCsnIG1hdGNoZXMnKTt0aGlzLmNvbnRyb2xsZXJfLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnNob3dTY3JpcHRDb250cm9sU2VsZWN0aW9uKHNlbGVjdGlvbik7fS5iaW5kKHRoaXMpKTt9ZWxzZXt0aGlzLmFkZExpbmVfKHJlc3VsdCk7fQpwcm9tcHRFbC5zY3JvbGxJbnRvVmlldygpO30sYWRkTGluZV8obGluZSl7Y29uc3QgaGlzdG9yeUVsPXRoaXMuJC5oaXN0b3J5O2lmKGhpc3RvcnlFbC5pbm5lclRleHQubGVuZ3RoIT09MCl7aGlzdG9yeUVsLmlubmVyVGV4dCs9J1xuJzt9Cmhpc3RvcnlFbC5pbm5lclRleHQrPWxpbmU7fSxwcm9tcHRLZXlQcmVzcyhlKXtlLnN0b3BQcm9wYWdhdGlvbigpO30sdG9nZ2xlVmlzaWJpbGl0eSgpe2NvbnN0IHJvb3Q9dGhpcy4kLnJvb3Q7aWYoIXRoaXMudmlzaWJsZSl7UG9seW1lci5kb20ocm9vdCkuY2xhc3NMaXN0LnJlbW92ZSgnaGlkZGVuJyk7dGhpcy5zZXRGb2N1c18odHJ1ZSk7fWVsc2V7UG9seW1lci5kb20ocm9vdCkuY2xhc3NMaXN0LmFkZCgnaGlkZGVuJyk7dGhpcy5zZXRGb2N1c18oZmFsc2UpO319LGdldCBoYXNGb2N1cygpe3JldHVybiB0aGlzPT09ZG9jdW1lbnQuYWN0aXZlRWxlbWVudDt9LGdldCB2aXNpYmxlKCl7Y29uc3Qgcm9vdD10aGlzLiQucm9vdDtyZXR1cm4hUG9seW1lci5kb20ocm9vdCkuY2xhc3NMaXN0LmNvbnRhaW5zKCdoaWRkZW4nKTt9LGdldCBjb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuY29udHJvbGxlcl87fSxzZXQgY29udHJvbGxlcihjKXt0aGlzLmNvbnRyb2xsZXJfPWM7fX0pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktc2lkZS1wYW5lbC1jb250YWluZXInLHJlYWR5KCl7dGhpcy5hY3RpdmVQYW5lbENvbnRhaW5lcl89dGhpcy4kLmFjdGl2ZV9wYW5lbF9jb250YWluZXI7dGhpcy50YWJTdHJpcF89dGhpcy4kLnRhYl9zdHJpcDt0aGlzLmRyYWdIYW5kbGVfPXRoaXMuJC5zaWRlX3BhbmVsX2RyYWdfaGFuZGxlO3RoaXMuZHJhZ0hhbmRsZV8uaG9yaXpvbnRhbD1mYWxzZTt0aGlzLmRyYWdIYW5kbGVfLnRhcmdldD10aGlzLmFjdGl2ZVBhbmVsQ29udGFpbmVyXzt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89bmV3IHRyLmIubWF0aC5SYW5nZSgpO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPXVuZGVmaW5lZDt0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF89dGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfLmJpbmQodGhpcyk7dGhpcy5vbk1vZGVsQ2hhbmdlZF89dGhpcy5vbk1vZGVsQ2hhbmdlZF8uYmluZCh0aGlzKTt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LHNldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcihicnVzaGluZ1N0YXRlQ29udHJvbGxlcil7aWYodGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcil7dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ucmVtb3ZlRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uU2VsZWN0aW9uQ2hhbmdlZF8pO3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLnJlbW92ZUV2ZW50TGlzdGVuZXIoJ21vZGVsLWNoYW5nZWQnLHRoaXMub25Nb2RlbENoYW5nZWRfKTt9CnRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPWJydXNoaW5nU3RhdGVDb250cm9sbGVyO2lmKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfLmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblNlbGVjdGlvbkNoYW5nZWRfKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5hZGRFdmVudExpc3RlbmVyKCdtb2RlbC1jaGFuZ2VkJyx0aGlzLm9uTW9kZWxDaGFuZ2VkXyk7aWYodGhpcy5tb2RlbCl7dGhpcy5vbk1vZGVsQ2hhbmdlZF8oKTt9fX0sb25TZWxlY3Rpb25DaGFuZ2VkXygpe2lmKHRoaXMuYWN0aXZlUGFuZWwpe3RoaXMuYWN0aXZlUGFuZWwuc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uO319LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5tb2RlbDt9LG9uTW9kZWxDaGFuZ2VkXygpe3RoaXMuYWN0aXZlUGFuZWxUeXBlXz11bmRlZmluZWQ7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBleHBhbmRlZCgpe3RoaXMuaGFzQXR0cmlidXRlKCdleHBhbmRlZCcpO30sZ2V0IGFjdGl2ZVBhbmVsKCl7cmV0dXJuIHRoaXMuYWN0aXZlUGFuZWxDb250YWluZXJfLmNoaWxkcmVuWzBdO30sZ2V0IGFjdGl2ZVBhbmVsVHlwZSgpe3JldHVybiB0aGlzLmFjdGl2ZVBhbmVsVHlwZV87fSxzZXQgYWN0aXZlUGFuZWxUeXBlKHBhbmVsVHlwZSl7aWYodGhpcy5tb2RlbD09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdDYW5ub3QgYWN0aXZhdGUgcGFuZWwgd2l0aG91dCBhIG1vZGVsJyk7fQpsZXQgcGFuZWw9dW5kZWZpbmVkO2lmKHBhbmVsVHlwZSl7cGFuZWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChwYW5lbFR5cGUpO30KaWYocGFuZWwhPT11bmRlZmluZWQmJiFwYW5lbC5zdXBwb3J0c01vZGVsKHRoaXMubW9kZWwpKXt0aHJvdyBuZXcgRXJyb3IoJ0Nhbm5vdCBhY3RpdmF0ZSBwYW5lbDogZG9lcyBub3Qgc3VwcG9ydCB0aGlzIG1vZGVsJyk7fQppZih0aGlzLmFjdGl2ZVBhbmVsVHlwZSl7UG9seW1lci5kb20odGhpcy5nZXRMYWJlbEVsZW1lbnRGb3JQYW5lbFR5cGVfKHRoaXMuYWN0aXZlUGFuZWxUeXBlKSkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO30KaWYodGhpcy5hY3RpdmVQYW5lbFR5cGUpe3RoaXMuZ2V0TGFiZWxFbGVtZW50Rm9yUGFuZWxUeXBlXyh0aGlzLmFjdGl2ZVBhbmVsVHlwZSkucmVtb3ZlQXR0cmlidXRlKCdzZWxlY3RlZCcpO30KaWYodGhpcy5hY3RpdmVQYW5lbCl7dGhpcy5hY3RpdmVQYW5lbENvbnRhaW5lcl8ucmVtb3ZlQ2hpbGQodGhpcy5hY3RpdmVQYW5lbCk7fQppZihwYW5lbFR5cGU9PT11bmRlZmluZWQpe1BvbHltZXIuZG9tKHRoaXMpLnJlbW92ZUF0dHJpYnV0ZSgnZXhwYW5kZWQnKTt0aGlzLmFjdGl2ZVBhbmVsVHlwZV89dW5kZWZpbmVkO3JldHVybjt9ClBvbHltZXIuZG9tKHRoaXMuZ2V0TGFiZWxFbGVtZW50Rm9yUGFuZWxUeXBlXyhwYW5lbFR5cGUpKS5zZXRBdHRyaWJ1dGUoJ3NlbGVjdGVkJyx0cnVlKTtQb2x5bWVyLmRvbSh0aGlzKS5zZXRBdHRyaWJ1dGUoJ2V4cGFuZGVkJyx0cnVlKTtQb2x5bWVyLmRvbSh0aGlzLmFjdGl2ZVBhbmVsQ29udGFpbmVyXykuYXBwZW5kQ2hpbGQocGFuZWwpO3BhbmVsLnJhbmdlT2ZJbnRlcmVzdD10aGlzLnJhbmdlT2ZJbnRlcmVzdF87cGFuZWwuc2VsZWN0aW9uPXRoaXMuc2VsZWN0aW9uXztwYW5lbC5tb2RlbD10aGlzLm1vZGVsO3RoaXMuYWN0aXZlUGFuZWxUeXBlXz1wYW5lbFR5cGU7fSxnZXRQYW5lbFR5cGVGb3JDb25zdHJ1Y3Rvcl8oY29uc3RydWN0b3Ipe2ZvcihsZXQgaT0wO2k8dGhpcy50YWJTdHJpcF8uY2hpbGRyZW4ubGVuZ3RoO2krKyl7aWYodGhpcy50YWJTdHJpcF8uY2hpbGRyZW5baV0ucGFuZWxUeXBlLmNvbnN0cnVjdG9yPT09Y29uc3RydWN0b3Ipe3JldHVybiB0aGlzLnRhYlN0cmlwXy5jaGlsZHJlbltpXS5wYW5lbFR5cGU7fX19LGdldExhYmVsRWxlbWVudEZvclBhbmVsVHlwZV8ocGFuZWxUeXBlKXtmb3IobGV0IGk9MDtpPHRoaXMudGFiU3RyaXBfLmNoaWxkcmVuLmxlbmd0aDtpKyspe2lmKHRoaXMudGFiU3RyaXBfLmNoaWxkcmVuW2ldLnBhbmVsVHlwZT09PXBhbmVsVHlwZSl7cmV0dXJuIHRoaXMudGFiU3RyaXBfLmNoaWxkcmVuW2ldO319CnJldHVybiB1bmRlZmluZWQ7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCBwcmV2aW91c2x5QWN0aXZlUGFuZWxUeXBlPXRoaXMuYWN0aXZlUGFuZWxUeXBlO1BvbHltZXIuZG9tKHRoaXMudGFiU3RyaXBfKS50ZXh0Q29udGVudD0nJztjb25zdCBzdXBwb3J0ZWRQYW5lbFR5cGVzPVtdO2NvbnN0IHBhbmVsVHlwZUluZm9zPXRyLnVpLnNpZGVfcGFuZWwuU2lkZVBhbmVsUmVnaXN0cnkuZ2V0QWxsUmVnaXN0ZXJlZFR5cGVJbmZvcygpO2NvbnN0IHVuc3VwcG9ydGVkTGFiZWxFbHM9W107Zm9yKGNvbnN0IHBhbmVsVHlwZUluZm8gb2YgcGFuZWxUeXBlSW5mb3Mpe2NvbnN0IGxhYmVsRWw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGFiLXN0cmlwLWxhYmVsJyk7Y29uc3QgcGFuZWw9cGFuZWxUeXBlSW5mby5jb25zdHJ1Y3RvcigpO2NvbnN0IHBhbmVsVHlwZT1wYW5lbC50YWdOYW1lO1BvbHltZXIuZG9tKGxhYmVsRWwpLnRleHRDb250ZW50PXBhbmVsLnRleHRMYWJlbDtsYWJlbEVsLnBhbmVsVHlwZT1wYW5lbFR5cGU7Y29uc3Qgc3VwcG9ydGVkPXBhbmVsLnN1cHBvcnRzTW9kZWwodGhpcy5tb2RlbCk7aWYodGhpcy5tb2RlbCYmc3VwcG9ydGVkLnN1cHBvcnRlZCl7c3VwcG9ydGVkUGFuZWxUeXBlcy5wdXNoKHBhbmVsVHlwZSk7UG9seW1lci5kb20obGFiZWxFbCkuc2V0QXR0cmlidXRlKCdlbmFibGVkJyx0cnVlKTtsYWJlbEVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxmdW5jdGlvbihwYW5lbFR5cGUpe3RoaXMuYWN0aXZlUGFuZWxUeXBlPXRoaXMuYWN0aXZlUGFuZWxUeXBlPT09cGFuZWxUeXBlP3VuZGVmaW5lZDpwYW5lbFR5cGU7fS5iaW5kKHRoaXMscGFuZWxUeXBlKSk7UG9seW1lci5kb20odGhpcy50YWJTdHJpcF8pLmFwcGVuZENoaWxkKGxhYmVsRWwpO31lbHNle2lmKHRoaXMuYWN0aXZlUGFuZWwpe3RoaXMuYWN0aXZlUGFuZWxDb250YWluZXJfLnJlbW92ZUNoaWxkKHRoaXMuYWN0aXZlUGFuZWwpO30KdGhpcy5yZW1vdmVBdHRyaWJ1dGUoJ2V4cGFuZGVkJyk7dW5zdXBwb3J0ZWRMYWJlbEVscy5wdXNoKGxhYmVsRWwpO319CmZvcihjb25zdCBsYWJlbEVsIG9mIHVuc3VwcG9ydGVkTGFiZWxFbHMpe1BvbHltZXIuZG9tKHRoaXMudGFiU3RyaXBfKS5hcHBlbmRDaGlsZChsYWJlbEVsKTt9CmlmKHByZXZpb3VzbHlBY3RpdmVQYW5lbFR5cGUmJnN1cHBvcnRlZFBhbmVsVHlwZXMuaW5jbHVkZXMocHJldmlvdXNseUFjdGl2ZVBhbmVsVHlwZSkpe3RoaXMuYWN0aXZlUGFuZWxUeXBlPXByZXZpb3VzbHlBY3RpdmVQYW5lbFR5cGU7UG9seW1lci5kb20odGhpcykuc2V0QXR0cmlidXRlKCdleHBhbmRlZCcsdHJ1ZSk7fWVsc2V7aWYodGhpcy5hY3RpdmVQYW5lbCl7UG9seW1lci5kb20odGhpcy5hY3RpdmVQYW5lbENvbnRhaW5lcl8pLnJlbW92ZUNoaWxkKHRoaXMuYWN0aXZlUGFuZWwpO30KUG9seW1lci5kb20odGhpcykucmVtb3ZlQXR0cmlidXRlKCdleHBhbmRlZCcpO319LGdldCByYW5nZU9mSW50ZXJlc3QoKXtyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZSl7aWYocmFuZ2U9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignTXVzdCBub3QgYmUgdW5kZWZpbmVkJyk7fQp0aGlzLnJhbmdlT2ZJbnRlcmVzdF89cmFuZ2U7aWYodGhpcy5hY3RpdmVQYW5lbCl7dGhpcy5hY3RpdmVQYW5lbC5yYW5nZU9mSW50ZXJlc3Q9cmFuZ2U7fX19KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLXRpbWVsaW5lLXZpZXctaGVscC1vdmVybGF5JyxyZWFkeSgpe2NvbnN0IG1vZD10ci5pc01hYz8nY21kICc6J2N0cmwnO2NvbnN0IHNwYW5zPVBvbHltZXIuZG9tKHRoaXMucm9vdCkucXVlcnlTZWxlY3RvckFsbCgnc3Bhbi5tb2QnKTtmb3IobGV0IGk9MDtpPHNwYW5zLmxlbmd0aDtpKyspe1BvbHltZXIuZG9tKHNwYW5zW2ldKS50ZXh0Q29udGVudD1tb2Q7fX19KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXVpLXRpbWVsaW5lLXZpZXctbWV0YWRhdGEtb3ZlcmxheScsY3JlYXRlZCgpe3RoaXMubWV0YWRhdGFfPXVuZGVmaW5lZDt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOiduYW1lJyx2YWx1ZTpkPT5kLm5hbWUsfSx7dGl0bGU6J3ZhbHVlJyx2YWx1ZTpkPT57Y29uc3QgZ292PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLWEtZ2VuZXJpYy1vYmplY3QtdmlldycpO2dvdi5vYmplY3Q9ZC52YWx1ZTtyZXR1cm4gZ292O30sfV07fSxnZXQgbWV0YWRhdGEoKXtyZXR1cm4gdGhpcy5tZXRhZGF0YV87fSxzZXQgbWV0YWRhdGEobWV0YWRhdGEpe3RoaXMubWV0YWRhdGFfPW1ldGFkYXRhO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy5tZXRhZGF0YV87dGhpcy4kLnRhYmxlLnJlYnVpbGQoKTt9fSk7J3VzZSBzdHJpY3QnO1BvbHltZXIoe2lzOid0ci12LXVpLXByZWZlcnJlZC1kaXNwbGF5LXVuaXQnLHJlYWR5KCl7dGhpcy5wcmVmZXJyZWRUaW1lRGlzcGxheU1vZGVfPXVuZGVmaW5lZDt9LGF0dGFjaGVkKCl7dHIuYi5Vbml0LmRpZFByZWZlcnJlZFRpbWVEaXNwbGF5VW5pdENoYW5nZSgpO30sZGV0YWNoZWQoKXt0ci5iLlVuaXQuZGlkUHJlZmVycmVkVGltZURpc3BsYXlVbml0Q2hhbmdlKCk7fSxnZXQgcHJlZmVycmVkVGltZURpc3BsYXlNb2RlKCl7cmV0dXJuIHRoaXMucHJlZmVycmVkVGltZURpc3BsYXlNb2RlXzt9LHNldCBwcmVmZXJyZWRUaW1lRGlzcGxheU1vZGUodil7aWYodGhpcy5wcmVmZXJyZWRUaW1lRGlzcGxheU1vZGVfPT09dilyZXR1cm47dGhpcy5wcmVmZXJyZWRUaW1lRGlzcGxheU1vZGVfPXY7dHIuYi5Vbml0LmRpZFByZWZlcnJlZFRpbWVEaXNwbGF5VW5pdENoYW5nZSgpO319KTsndXNlIHN0cmljdCc7Y29uc3QgUE9MWUZJTExfV0FSTklOR19NRVNTQUdFPSdUcmFjZSBWaWV3ZXIgaXMgcnVubmluZyB3aXRoIFdlYkNvbXBvbmVudHNWMCBwb2x5ZmlsbCwgYW5kIHNvbWUgJysnZmVhdHVyZXMgbWF5IGJlIGJyb2tlbi4gQXMgYSB3b3JrYXJvdW5kLCB5b3UgbWF5IHRyeSBydW5uaW5nIGNocm9tZSAnKyd3aXRoICItLWVuYWJsZS1ibGluay1mZWF0dXJlcz1TaGFkb3dET01WMCxDdXN0b21FbGVtZW50c1YwLEhUTUxJbXBvcnRzIiAnKydmbGFnLiBTZWUgY3JidWcuY29tLzEwMzY0OTIuJztQb2x5bWVyKHtpczondHItdWktdGltZWxpbmUtdmlldycsY3JlYXRlZCgpe3RoaXMudHJhY2tWaWV3Q29udGFpbmVyXz11bmRlZmluZWQ7dGhpcy5xdWV1ZWRNb2RlbF89dW5kZWZpbmVkO3RoaXMuYnVpbHRQcm9taXNlXz11bmRlZmluZWQ7dGhpcy5kb25lQnVpbGRpbmdfPXVuZGVmaW5lZDt9LGF0dGFjaGVkKCl7dGhpcy5hc3luYyhmdW5jdGlvbigpe3RoaXMudHJhY2tWaWV3Q29udGFpbmVyXz1Qb2x5bWVyLmRvbSh0aGlzKS5xdWVyeVNlbGVjdG9yKCcjdHJhY2tfdmlld19jb250YWluZXInKTtpZighdGhpcy50cmFja1ZpZXdDb250YWluZXJfKXt0aHJvdyBuZXcgRXJyb3IoJ21pc3NpbmcgdHJhY2t2aWV3Q29udGFpbmVyJyk7fQppZih0aGlzLnF1ZXVlZE1vZGVsXyl0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30pO30scmVhZHkoKXt0aGlzLnRhYkluZGV4PTA7dGhpcy5wb2x5ZmlsbFdhcm5lZE9uY2VfPWZhbHNlO3RoaXMudGl0bGVFbF89dGhpcy4kLnRpdGxlO3RoaXMubGVmdENvbnRyb2xzRWxfPXRoaXMuJC5sZWZ0X2NvbnRyb2xzO3RoaXMucmlnaHRDb250cm9sc0VsXz10aGlzLiQucmlnaHRfY29udHJvbHM7dGhpcy5jb2xsYXBzaW5nQ29udHJvbHNFbF89dGhpcy4kLmNvbGxhcHNpbmdfY29udHJvbHM7dGhpcy5zaWRlUGFuZWxDb250YWluZXJfPXRoaXMuJC5zaWRlX3BhbmVsX2NvbnRhaW5lcjt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXz1uZXcgdHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlcih0aGlzKTt0aGlzLmZpbmRDdGxfPXRoaXMuJC52aWV3X2ZpbmRfY29udHJvbDt0aGlzLmZpbmRDdGxfLmNvbnRyb2xsZXI9bmV3IHRyLnVpLkZpbmRDb250cm9sbGVyKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfKTt0aGlzLnNjcmlwdGluZ0N0bF89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktc2NyaXB0aW5nLWNvbnRyb2wnKTt0aGlzLnNjcmlwdGluZ0N0bF8uY29udHJvbGxlcj1uZXcgdHIuYy5TY3JpcHRpbmdDb250cm9sbGVyKHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfKTt0aGlzLnNpZGVQYW5lbENvbnRhaW5lcl8uYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI9dGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl87aWYod2luZG93LnRyLm1ldHJpY3MmJndpbmRvdy50ci5tZXRyaWNzLnNoJiZ3aW5kb3cudHIubWV0cmljcy5zaC5TeXN0ZW1IZWFsdGhNZXRyaWMpe3RoaXMucmFpbFNjb3JlU3Bhbl89ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItbWV0cmljcy11aS1zaC1zeXN0ZW0taGVhbHRoLXNwYW4nKTtQb2x5bWVyLmRvbSh0aGlzLnJpZ2h0Q29udHJvbHMpLmFwcGVuZENoaWxkKHRoaXMucmFpbFNjb3JlU3Bhbl8pO31lbHNle3RoaXMucmFpbFNjb3JlU3Bhbl89dW5kZWZpbmVkO30KdGhpcy5mbG93RXZlbnRGaWx0ZXJfPXRoaXMuJC5mbG93X2V2ZW50X2ZpbHRlcl9kcm9wZG93bjt0aGlzLnByb2Nlc3NGaWx0ZXJfPXRoaXMuJC5wcm9jZXNzX2ZpbHRlcl9kcm9wZG93bjt0aGlzLm9wdGlvbnNEcm9wZG93bl89dGhpcy4kLnZpZXdfb3B0aW9uc19kcm9wZG93bjt0aGlzLnNlbGVjdGVkRmxvd0V2ZW50c189bmV3IFNldCgpO3RoaXMuaGlnaGxpZ2h0VlN5bmNfPWZhbHNlO3RoaXMuaGlnaGxpZ2h0VlN5bmNDaGVja2JveF89dHIudWkuYi5jcmVhdGVDaGVja0JveCh0aGlzLCdoaWdobGlnaHRWU3luYycsJ3RyLnVpLlRpbWVsaW5lVmlldy5oaWdobGlnaHRWU3luYycsZmFsc2UsJ0hpZ2hsaWdodCBWU3luYycpO1BvbHltZXIuZG9tKHRoaXMub3B0aW9uc0Ryb3Bkb3duXykuYXBwZW5kQ2hpbGQodGhpcy5oaWdobGlnaHRWU3luY0NoZWNrYm94Xyk7dGhpcy5pbml0TWV0YWRhdGFCdXR0b25fKCk7dGhpcy5pbml0Q29uc29sZUJ1dHRvbl8oKTt0aGlzLmluaXRIZWxwQnV0dG9uXygpO1BvbHltZXIuZG9tKHRoaXMuY29sbGFwc2luZ0NvbnRyb2xzKS5hcHBlbmRDaGlsZCh0aGlzLnNjcmlwdGluZ0N0bF8pO3RoaXMuZHJhZ0VsXz10aGlzLiQuZHJhZ19oYW5kbGU7dGhpcy5hbmFseXNpc0VsXz10aGlzLiQuYW5hbHlzaXM7dGhpcy5hbmFseXNpc0VsXy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcj10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3JlcXVlc3RTZWxlY3Rpb25DaGFuZ2UnLGZ1bmN0aW9uKGUpe2NvbnN0IHNjPXRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO3NjLmNoYW5nZVNlbGVjdGlvbkZyb21SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoZS5zZWxlY3Rpb24pO30uYmluZCh0aGlzKSk7dGhpcy5vblZpZXdwb3J0Q2hhbmdlZF89dGhpcy5vblZpZXdwb3J0Q2hhbmdlZF8uYmluZCh0aGlzKTt0aGlzLmJpbmRLZXlMaXN0ZW5lcnNfKCk7dGhpcy5kcmFnRWxfLnRhcmdldD10aGlzLmFuYWx5c2lzRWxfO30sZ2V0IGdsb2JhbE1vZGUoKXtyZXR1cm4gdGhpcy5ob3RrZXlDb250cm9sbGVyLmdsb2JhbE1vZGU7fSxzZXQgZ2xvYmFsTW9kZShnbG9iYWxNb2RlKXtnbG9iYWxNb2RlPSEhZ2xvYmFsTW9kZTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5oaXN0b3J5RW5hYmxlZD1nbG9iYWxNb2RlO3RoaXMuaG90a2V5Q29udHJvbGxlci5nbG9iYWxNb2RlPWdsb2JhbE1vZGU7fSxnZXQgaG90a2V5Q29udHJvbGxlcigpe3JldHVybiB0aGlzLiQuaGtjO30sd2FyblBvbHlmaWxsKCl7aWYodGhpcy5wb2x5ZmlsbFdhcm5lZE9uY2VfKXJldHVybjt0aGlzLnBvbHlmaWxsV2FybmVkT25jZV89dHJ1ZTtjb25zdCBwb2x5ZmlsbFdhcm5pbmdzRWw9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCcjcG9seWZpbGwtd2FybmluZycpO3BvbHlmaWxsV2FybmluZ3NFbC5hZGRNZXNzYWdlKFBPTFlGSUxMX1dBUk5JTkdfTUVTU0FHRSxbe2J1dHRvblRleHQ6J0hpZGUnLG9uQ2xpY2s6KCk9PnBvbHlmaWxsV2FybmluZ3NFbC5jbGVhck1lc3NhZ2VzKCl9XSk7fSx1cGRhdGVEb2N1bWVudEZhdmljb24oKXtsZXQgaHVlO2lmKCF0aGlzLm1vZGVsKXtodWU9J2JsdWUnO31lbHNle2h1ZT10aGlzLm1vZGVsLmZhdmljb25IdWU7fQpsZXQgZmF2aWNvbkRhdGE9dHIudWkuYi5GYXZpY29uc0J5SHVlW2h1ZV07aWYoZmF2aWNvbkRhdGE9PT11bmRlZmluZWQpe2Zhdmljb25EYXRhPXRyLnVpLmIuRmF2aWNvbnNCeUh1ZS5ibHVlO30KbGV0IGxpbms9UG9seW1lci5kb20oZG9jdW1lbnQuaGVhZCkucXVlcnlTZWxlY3RvcignbGlua1tyZWw9InNob3J0Y3V0IGljb24iXScpO2lmKCFsaW5rKXtsaW5rPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2xpbmsnKTtsaW5rLnJlbD0nc2hvcnRjdXQgaWNvbic7UG9seW1lci5kb20oZG9jdW1lbnQuaGVhZCkuYXBwZW5kQ2hpbGQobGluayk7fQpsaW5rLmhyZWY9ZmF2aWNvbkRhdGE7fSxnZXQgc2VsZWN0ZWRGbG93RXZlbnRzKCl7cmV0dXJuIHRoaXMuc2VsZWN0ZWRGbG93RXZlbnRzXzt9LHNldCBzZWxlY3RlZEZsb3dFdmVudHMoc2VsZWN0ZWRGbG93RXZlbnRzKXt0aGlzLnNlbGVjdGVkRmxvd0V2ZW50c189c2VsZWN0ZWRGbG93RXZlbnRzO30sZ2V0IGhpZ2hsaWdodFZTeW5jKCl7cmV0dXJuIHRoaXMuaGlnaGxpZ2h0VlN5bmNfO30sc2V0IGhpZ2hsaWdodFZTeW5jKGhpZ2hsaWdodFZTeW5jKXt0aGlzLmhpZ2hsaWdodFZTeW5jXz1oaWdobGlnaHRWU3luYztpZighdGhpcy50cmFja1ZpZXdfKXJldHVybjt0aGlzLnRyYWNrVmlld18udmlld3BvcnQuaGlnaGxpZ2h0VlN5bmM9aGlnaGxpZ2h0VlN5bmM7fSxpbml0SGVscEJ1dHRvbl8oKXtjb25zdCBoZWxwQnV0dG9uRWw9dGhpcy4kLnZpZXdfaGVscF9idXR0b247Y29uc3QgZGxnPW5ldyB0ci51aS5iLk92ZXJsYXkoKTtkbGcudGl0bGU9J0Nocm9tZSBUcmFjaW5nIEhlbHAnO2RsZy52aXNpYmxlPWZhbHNlO2RsZy5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS10aW1lbGluZS12aWV3LWhlbHAtb3ZlcmxheScpKTtmdW5jdGlvbiBvbkNsaWNrKGUpe2RsZy52aXNpYmxlPSFkbGcudmlzaWJsZTtlLnN0b3BQcm9wYWdhdGlvbigpO30KaGVscEJ1dHRvbkVsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyxvbkNsaWNrLmJpbmQodGhpcykpO30saW5pdENvbnNvbGVCdXR0b25fKCl7Y29uc3QgdG9nZ2xlRWw9dGhpcy4kLnZpZXdfY29uc29sZV9idXR0b247ZnVuY3Rpb24gb25DbGljayhlKXt0aGlzLnNjcmlwdGluZ0N0bF8udG9nZ2xlVmlzaWJpbGl0eSgpO2Uuc3RvcFByb3BhZ2F0aW9uKCk7cmV0dXJuIGZhbHNlO30KdG9nZ2xlRWwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLG9uQ2xpY2suYmluZCh0aGlzKSk7fSxpbml0TWV0YWRhdGFCdXR0b25fKCl7Y29uc3Qgc2hvd0VsPXRoaXMuJC52aWV3X21ldGFkYXRhX2J1dHRvbjtmdW5jdGlvbiBvbkNsaWNrKGUpe2NvbnN0IGRsZz1uZXcgdHIudWkuYi5PdmVybGF5KCk7ZGxnLnRpdGxlPSdNZXRhZGF0YSBmb3IgdHJhY2UnO2NvbnN0IG1ldGFkYXRhT3ZlcmxheT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS10aW1lbGluZS12aWV3LW1ldGFkYXRhLW92ZXJsYXknKTttZXRhZGF0YU92ZXJsYXkubWV0YWRhdGE9dGhpcy5tb2RlbC5tZXRhZGF0YTtQb2x5bWVyLmRvbShkbGcpLmFwcGVuZENoaWxkKG1ldGFkYXRhT3ZlcmxheSk7ZGxnLnZpc2libGU9dHJ1ZTtlLnN0b3BQcm9wYWdhdGlvbigpO3JldHVybiBmYWxzZTt9CnNob3dFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsb25DbGljay5iaW5kKHRoaXMpKTt0aGlzLnVwZGF0ZU1ldGFkYXRhQnV0dG9uVmlzaWJpbGl0eV8oKTt9LHVwZGF0ZU1ldGFkYXRhQnV0dG9uVmlzaWJpbGl0eV8oKXtjb25zdCBzaG93RWw9dGhpcy4kLnZpZXdfbWV0YWRhdGFfYnV0dG9uO3Nob3dFbC5zdHlsZS5kaXNwbGF5PSh0aGlzLm1vZGVsJiZ0aGlzLm1vZGVsLm1ldGFkYXRhLmxlbmd0aCk/Jyc6J25vbmUnO30sdXBkYXRlRmxvd0V2ZW50TGlzdF8oKXtjb25zdCBkcm9wZG93bj1Qb2x5bWVyLmRvbSh0aGlzLmZsb3dFdmVudEZpbHRlcl8pO3doaWxlKGRyb3Bkb3duLmZpcnN0Q2hpbGQpe2Ryb3Bkb3duLnJlbW92ZUNoaWxkKGRyb3Bkb3duLmZpcnN0Q2hpbGQpO30KaWYoIXRoaXMubW9kZWwpcmV0dXJuO2NvbnN0IGNib3hlcz1bXTtjb25zdCB1cGRhdGVBbGw9KGNoZWNrZWQpPT57Zm9yKGNvbnN0IGNib3ggb2YgY2JveGVzKXtjYm94LmNoZWNrZWQ9Y2hlY2tlZDt9fTtkcm9wZG93bi5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZUJ1dHRvbignQWxsJywoKT0+dXBkYXRlQWxsKHRydWUpKSk7ZHJvcGRvd24uYXBwZW5kQ2hpbGQodHIudWkuYi5jcmVhdGVCdXR0b24oJ05vbmUnLCgpPT51cGRhdGVBbGwoZmFsc2UpKSk7Y29uc3QgY2F0ZWdvcmllcz1uZXcgU2V0KCk7Zm9yKGNvbnN0IGV2ZW50IG9mIHRoaXMubW9kZWwuZmxvd0V2ZW50cyl7Zm9yKGNvbnN0IGNhdGVnb3J5IG9mIHRyLmIuZ2V0Q2F0ZWdvcnlQYXJ0cyhldmVudC5jYXRlZ29yeSkpe2NhdGVnb3JpZXMuYWRkKGNhdGVnb3J5KTt9fQpjb25zdCBzb3J0ZWRDYXRlZ29yaWVzPVsuLi5jYXRlZ29yaWVzXS5zb3J0KChhLGIpPT5hLmxvY2FsZUNvbXBhcmUoYiwnZW4nLHtzZW5zaXRpdml0eTonYmFzZSd9KSk7Zm9yKGNvbnN0IGNhdGVnb3J5IG9mIHNvcnRlZENhdGVnb3JpZXMpe2NvbnN0IGNib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh1bmRlZmluZWQsdW5kZWZpbmVkLCd0ci51aS5UaW1lbGluZVZpZXcuc2VsZWN0ZWRGbG93RXZlbnRzLicrY2F0ZWdvcnksZmFsc2UsY2F0ZWdvcnksKCk9PntpZihjYm94LmNoZWNrZWQpe3RoaXMuc2VsZWN0ZWRGbG93RXZlbnRzLmFkZChjYXRlZ29yeSk7fWVsc2V7dGhpcy5zZWxlY3RlZEZsb3dFdmVudHMuZGVsZXRlKGNhdGVnb3J5KTt9CmlmKHRoaXMudHJhY2tWaWV3Xyl7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LmRpc3BhdGNoQ2hhbmdlRXZlbnQoKTt9fSk7aWYoY2JveC5jaGVja2VkKXt0aGlzLnNlbGVjdGVkRmxvd0V2ZW50cy5hZGQoY2F0ZWdvcnkpO30KY2JveGVzLnB1c2goY2JveCk7ZHJvcGRvd24uYXBwZW5kQ2hpbGQoY2JveCk7fX0sdXBkYXRlUHJvY2Vzc0xpc3RfKCl7Y29uc3QgZHJvcGRvd249UG9seW1lci5kb20odGhpcy5wcm9jZXNzRmlsdGVyXyk7d2hpbGUoZHJvcGRvd24uZmlyc3RDaGlsZCl7ZHJvcGRvd24ucmVtb3ZlQ2hpbGQoZHJvcGRvd24uZmlyc3RDaGlsZCk7fQppZighdGhpcy5tb2RlbClyZXR1cm47Y29uc3QgdHJhY2tWaWV3PXRoaXMudHJhY2tWaWV3Q29udGFpbmVyXy5xdWVyeVNlbGVjdG9yKCd0ci11aS10aW1lbGluZS10cmFjay12aWV3Jyk7Y29uc3QgcHJvY2Vzc1ZpZXdzPXRyYWNrVmlldy5wcm9jZXNzVmlld3M7Y29uc3QgY2JveGVzPVtdO2NvbnN0IHVwZGF0ZUFsbD0oY2hlY2tlZCk9Pntmb3IoY29uc3QgY2JveCBvZiBjYm94ZXMpe2Nib3guY2hlY2tlZD1jaGVja2VkO319O2Ryb3Bkb3duLmFwcGVuZENoaWxkKHRyLnVpLmIuY3JlYXRlQnV0dG9uKCdBbGwnLCgpPT51cGRhdGVBbGwodHJ1ZSkpKTtkcm9wZG93bi5hcHBlbmRDaGlsZCh0ci51aS5iLmNyZWF0ZUJ1dHRvbignTm9uZScsKCk9PnVwZGF0ZUFsbChmYWxzZSkpKTtmb3IoY29uc3QgdmlldyBvZiBwcm9jZXNzVmlld3Mpe2NvbnN0IGNib3g9dHIudWkuYi5jcmVhdGVDaGVja0JveCh1bmRlZmluZWQsdW5kZWZpbmVkLHVuZGVmaW5lZCx0cnVlLHZpZXcucHJvY2Vzc0Jhc2UudXNlckZyaWVuZGx5TmFtZSwoKT0+dmlldy52aXNpYmxlPWNib3guY2hlY2tlZCk7Y2JveC5jaGVja2VkPXZpZXcudmlzaWJsZTtjYm94ZXMucHVzaChjYm94KTt2aWV3LmFkZEV2ZW50TGlzdGVuZXIoJ3Zpc2liaWxpdHknLCgpPT5jYm94LmNoZWNrZWQ9dmlldy52aXNpYmxlKTtkcm9wZG93bi5hcHBlbmRDaGlsZChjYm94KTt9fSxnZXQgbGVmdENvbnRyb2xzKCl7cmV0dXJuIHRoaXMubGVmdENvbnRyb2xzRWxfO30sZ2V0IHJpZ2h0Q29udHJvbHMoKXtyZXR1cm4gdGhpcy5yaWdodENvbnRyb2xzRWxfO30sZ2V0IGNvbGxhcHNpbmdDb250cm9scygpe3JldHVybiB0aGlzLmNvbGxhcHNpbmdDb250cm9sc0VsXzt9LGdldCB2aWV3VGl0bGUoKXtyZXR1cm4gUG9seW1lci5kb20odGhpcy50aXRsZUVsXykudGV4dENvbnRlbnQuc3Vic3RyaW5nKFBvbHltZXIuZG9tKHRoaXMudGl0bGVFbF8pLnRleHRDb250ZW50Lmxlbmd0aC0yKTt9LHNldCB2aWV3VGl0bGUodGV4dCl7aWYodGV4dD09PXVuZGVmaW5lZCl7UG9seW1lci5kb20odGhpcy50aXRsZUVsXykudGV4dENvbnRlbnQ9Jyc7dGhpcy50aXRsZUVsXy5oaWRkZW49dHJ1ZTtyZXR1cm47fQp0aGlzLnRpdGxlRWxfLmhpZGRlbj1mYWxzZTtQb2x5bWVyLmRvbSh0aGlzLnRpdGxlRWxfKS50ZXh0Q29udGVudD10ZXh0O30sZ2V0IG1vZGVsKCl7aWYodGhpcy50cmFja1ZpZXdfKXtyZXR1cm4gdGhpcy50cmFja1ZpZXdfLm1vZGVsO30KcmV0dXJuIHVuZGVmaW5lZDt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5idWlsZChtb2RlbCk7fSxhc3luYyBidWlsZChtb2RlbCl7dGhpcy5xdWV1ZWRNb2RlbF89bW9kZWw7dGhpcy5idWlsdFByb21pc2VfPW5ldyBQcm9taXNlKChyZXNvbHZlLHJlamVjdCk9Pnt0aGlzLmRvbmVCdWlsZGluZ189cmVzb2x2ZTt9KTtpZih0aGlzLnRyYWNrVmlld0NvbnRhaW5lcl8pYXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBidWlsdFByb21pc2UoKXtyZXR1cm4gdGhpcy5idWlsdFByb21pc2VfO30sYXN5bmMgdXBkYXRlQ29udGVudHNfKCl7aWYodGhpcy50cmFja1ZpZXdDb250YWluZXJfPT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ3RpbWVsaW5lLXZpZXcudXBkYXRlQ29udGVudHNfIHJlcXVpcmVzIHRyYWNrVmlld0NvbnRhaW5lcl8nKTt9CmNvbnN0IG1vZGVsPXRoaXMucXVldWVkTW9kZWxfO3RoaXMucXVldWVkTW9kZWxfPXVuZGVmaW5lZDtjb25zdCBtb2RlbEluc3RhbmNlQ2hhbmdlZD1tb2RlbCE9PXRoaXMubW9kZWw7Y29uc3QgbW9kZWxWYWxpZD1tb2RlbCYmIW1vZGVsLmJvdW5kcy5pc0VtcHR5O2NvbnN0IGltcG9ydFdhcm5pbmdzRWw9UG9seW1lci5kb20odGhpcy5yb290KS5xdWVyeVNlbGVjdG9yKCcjaW1wb3J0LXdhcm5pbmdzJyk7UG9seW1lci5kb20oaW1wb3J0V2FybmluZ3NFbCkudGV4dENvbnRlbnQ9Jyc7aWYobW9kZWxJbnN0YW5jZUNoYW5nZWQpe2lmKHRoaXMucmFpbFNjb3JlU3Bhbl8pe3RoaXMucmFpbFNjb3JlU3Bhbl8ubW9kZWw9dW5kZWZpbmVkO30KUG9seW1lci5kb20odGhpcy50cmFja1ZpZXdDb250YWluZXJfKS50ZXh0Q29udGVudD0nJztpZih0aGlzLnRyYWNrVmlld18pe3RoaXMudHJhY2tWaWV3Xy52aWV3cG9ydC5yZW1vdmVFdmVudExpc3RlbmVyKCdjaGFuZ2UnLHRoaXMub25WaWV3cG9ydENoYW5nZWRfKTt0aGlzLnRyYWNrVmlld18uYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXI9dW5kZWZpbmVkO3RoaXMudHJhY2tWaWV3Xy5kZXRhY2goKTt0aGlzLnRyYWNrVmlld189dW5kZWZpbmVkO30KdGhpcy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcl8ubW9kZWxXaWxsQ2hhbmdlKCk7fQppZihtb2RlbFZhbGlkJiYhdGhpcy50cmFja1ZpZXdfKXt0aGlzLnRyYWNrVmlld189ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdWktdGltZWxpbmUtdHJhY2stdmlldycpO3RoaXMudHJhY2tWaWV3Xy50aW1lbGluZVZpZXc9dGhpczt0aGlzLnRyYWNrVmlldy5icnVzaGluZ1N0YXRlQ29udHJvbGxlcj10aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXztQb2x5bWVyLmRvbSh0aGlzLnRyYWNrVmlld0NvbnRhaW5lcl8pLmFwcGVuZENoaWxkKHRoaXMudHJhY2tWaWV3Xyk7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LmFkZEV2ZW50TGlzdGVuZXIoJ2NoYW5nZScsdGhpcy5vblZpZXdwb3J0Q2hhbmdlZF8pO30KaWYobW9kZWxWYWxpZCl7dGhpcy50cmFja1ZpZXdfLm1vZGVsPW1vZGVsO3RoaXMudHJhY2tWaWV3Xy52aWV3cG9ydC5zZWxlY3RlZEZsb3dFdmVudHM9dGhpcy5zZWxlY3RlZEZsb3dFdmVudHM7dGhpcy50cmFja1ZpZXdfLnZpZXdwb3J0LmhpZ2hsaWdodFZTeW5jPXRoaXMuaGlnaGxpZ2h0VlN5bmM7aWYodGhpcy5yYWlsU2NvcmVTcGFuXyl7dGhpcy5yYWlsU2NvcmVTcGFuXy5tb2RlbD1tb2RlbDt9CnRoaXMuJC5kaXNwbGF5X3VuaXQucHJlZmVycmVkVGltZURpc3BsYXlNb2RlPW1vZGVsLmludHJpbnNpY1RpbWVVbml0O30KaWYod2luZG93LkN1c3RvbUVsZW1lbnRzJiYhd2luZG93LkN1c3RvbUVsZW1lbnRzLmhhc05hdGl2ZSl7dGhpcy53YXJuUG9seWZpbGwoKTt9CmlmKG1vZGVsKXtmb3IoY29uc3Qgd2FybmluZyBvZiBtb2RlbC5pbXBvcnRXYXJuaW5nc1RoYXRTaG91bGRCZVNob3duVG9Vc2VyKXtpbXBvcnRXYXJuaW5nc0VsLmFkZE1lc3NhZ2UoYEltcG9ydCBXYXJuaW5nOiAke3dhcm5pbmcudHlwZX06ICR7d2FybmluZy5tZXNzYWdlfWAsW3tidXR0b25UZXh0OidEaXNtaXNzJyxvbkNsaWNrKGV2ZW50LGluZm9iYXIpe2luZm9iYXIudmlzaWJsZT1mYWxzZTt9fV0pO319CmlmKG1vZGVsSW5zdGFuY2VDaGFuZ2VkKXt0aGlzLnVwZGF0ZUZsb3dFdmVudExpc3RfKCk7dGhpcy51cGRhdGVQcm9jZXNzTGlzdF8oKTt0aGlzLnVwZGF0ZU1ldGFkYXRhQnV0dG9uVmlzaWJpbGl0eV8oKTt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXy5tb2RlbERpZENoYW5nZSgpO3RoaXMub25WaWV3cG9ydENoYW5nZWRfKCk7fQp0aGlzLmRvbmVCdWlsZGluZ18oKTt9LGdldCBicnVzaGluZ1N0YXRlQ29udHJvbGxlcigpe3JldHVybiB0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyXzt9LGdldCB0cmFja1ZpZXcoKXtyZXR1cm4gdGhpcy50cmFja1ZpZXdfO30sZ2V0IHNldHRpbmdzKCl7aWYoIXRoaXMuc2V0dGluZ3NfKXt0aGlzLnNldHRpbmdzXz1uZXcgdHIuYi5TZXR0aW5ncygpO30KcmV0dXJuIHRoaXMuc2V0dGluZ3NfO30sc2V0IGZvY3VzRWxlbWVudCh2YWx1ZSl7dGhyb3cgbmV3IEVycm9yKCdUaGlzIGlzIGRlcHJlY2F0ZWQuIFBsZWFzZSBzZXQgZ2xvYmFsTW9kZSB0byB0cnVlLicpO30sYmluZEtleUxpc3RlbmVyc18oKXtjb25zdCBoa2M9dGhpcy5ob3RrZXlDb250cm9sbGVyO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyxrZXlDb2RlOidgJy5jaGFyQ29kZUF0KDApLHVzZUNhcHR1cmU6dHJ1ZSx0aGlzQXJnOnRoaXMsY2FsbGJhY2soZSl7dGhpcy5zY3JpcHRpbmdDdGxfLnRvZ2dsZVZpc2liaWxpdHkoKTtpZighdGhpcy5zY3JpcHRpbmdDdGxfLmhhc0ZvY3VzKXt0aGlzLmZvY3VzKCk7fQplLnN0b3BQcm9wYWdhdGlvbigpO319KSk7aGtjLmFkZEhvdEtleShuZXcgdHIudWkuYi5Ib3RLZXkoe2V2ZW50VHlwZTona2V5cHJlc3MnLGtleUNvZGU6Jy8nLmNoYXJDb2RlQXQoMCksdXNlQ2FwdHVyZTp0cnVlLHRoaXNBcmc6dGhpcyxjYWxsYmFjayhlKXtpZih0aGlzLnNjcmlwdGluZ0N0bF8uaGFzRm9jdXMpcmV0dXJuO2lmKHRoaXMuZmluZEN0bF8uaGFzRm9jdXMpe3RoaXMuZm9jdXMoKTt9ZWxzZXt0aGlzLmZpbmRDdGxfLmZvY3VzKCk7fQplLnByZXZlbnREZWZhdWx0KCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyxrZXlDb2RlOic/Jy5jaGFyQ29kZUF0KDApLHVzZUNhcHR1cmU6ZmFsc2UsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe3RoaXMuJC52aWV3X2hlbHBfYnV0dG9uLmNsaWNrKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO2hrYy5hZGRIb3RLZXkobmV3IHRyLnVpLmIuSG90S2V5KHtldmVudFR5cGU6J2tleXByZXNzJyxrZXlDb2RlOid2Jy5jaGFyQ29kZUF0KDApLHVzZUNhcHR1cmU6ZmFsc2UsdGhpc0FyZzp0aGlzLGNhbGxiYWNrKGUpe3RoaXMudG9nZ2xlSGlnaGxpZ2h0VlN5bmNfKCk7ZS5zdG9wUHJvcGFnYXRpb24oKTt9fSkpO30sb25WaWV3cG9ydENoYW5nZWRfKGUpe2NvbnN0IHNwYz10aGlzLnNpZGVQYW5lbENvbnRhaW5lcl87aWYoIXRoaXMudHJhY2tWaWV3Xyl7c3BjLnJhbmdlT2ZJbnRlcmVzdC5yZXNldCgpO3JldHVybjt9CmNvbnN0IHZyPXRoaXMudHJhY2tWaWV3Xy52aWV3cG9ydC5pbnRlcmVzdFJhbmdlLmFzUmFuZ2VPYmplY3QoKTtpZighc3BjLnJhbmdlT2ZJbnRlcmVzdC5lcXVhbHModnIpKXtzcGMucmFuZ2VPZkludGVyZXN0PXZyO30KaWYodGhpcy5yYWlsU2NvcmVTcGFuXyYmdGhpcy5tb2RlbCl7dGhpcy5yYWlsU2NvcmVTcGFuXy5tb2RlbD10aGlzLm1vZGVsO319LHRvZ2dsZUhpZ2hsaWdodFZTeW5jXygpe3RoaXMuaGlnaGxpZ2h0VlN5bmNDaGVja2JveF8uY2hlY2tlZD0hdGhpcy5oaWdobGlnaHRWU3luY0NoZWNrYm94Xy5jaGVja2VkO30sc2V0RmluZEN0bFRleHQoc3RyaW5nKXt0aGlzLmZpbmRDdGxfLnNldFRleHQoc3RyaW5nKTt9fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2Z1bmN0aW9uIFJvdyh0aXRsZSxkYXRhLGdyb3VwaW5nS2V5RnVuY3Mscm93U3RhdHNDb25zdHJ1Y3Rvcil7dGhpcy50aXRsZT10aXRsZTt0aGlzLmRhdGFfPWRhdGE7aWYoZ3JvdXBpbmdLZXlGdW5jcz09PXVuZGVmaW5lZCl7Z3JvdXBpbmdLZXlGdW5jcz1bXTt9CnRoaXMuZ3JvdXBpbmdLZXlGdW5jc189Z3JvdXBpbmdLZXlGdW5jczt0aGlzLnJvd1N0YXRzQ29uc3RydWN0b3JfPXJvd1N0YXRzQ29uc3RydWN0b3I7dGhpcy5zdWJSb3dzQnVpbHRfPWZhbHNlO3RoaXMuc3ViUm93c189dW5kZWZpbmVkO3RoaXMucm93U3RhdHNfPXVuZGVmaW5lZDt9ClJvdy5wcm90b3R5cGU9e2dldEN1cnJlbnRHcm91cGluZ0tleUZ1bmNfKCl7aWYodGhpcy5ncm91cGluZ0tleUZ1bmNzXy5sZW5ndGg9PT0wKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMuZ3JvdXBpbmdLZXlGdW5jc19bMF07fSxnZXQgZGF0YSgpe3JldHVybiB0aGlzLmRhdGFfO30sZ2V0IHJvd1N0YXRzKCl7aWYodGhpcy5yb3dTdGF0c189PT11bmRlZmluZWQpe3RoaXMucm93U3RhdHNfPW5ldyB0aGlzLnJvd1N0YXRzQ29uc3RydWN0b3JfKHRoaXMpO30KcmV0dXJuIHRoaXMucm93U3RhdHNfO30scmVidWlsZFN1YlJvd3NJZk5lZWRlZF8oKXtpZih0aGlzLnN1YlJvd3NCdWlsdF8pcmV0dXJuO3RoaXMuc3ViUm93c0J1aWx0Xz10cnVlO2NvbnN0IGdyb3VwaW5nS2V5RnVuYz10aGlzLmdldEN1cnJlbnRHcm91cGluZ0tleUZ1bmNfKCk7aWYoZ3JvdXBpbmdLZXlGdW5jPT09dW5kZWZpbmVkKXt0aGlzLnN1YlJvd3NfPXVuZGVmaW5lZDtyZXR1cm47fQpjb25zdCBkYXRhQnlLZXk9e307bGV0IGhhc1ZhbHVlcz1mYWxzZTt0aGlzLmRhdGFfLmZvckVhY2goZnVuY3Rpb24oZGF0dW0pe2NvbnN0IGtleT1ncm91cGluZ0tleUZ1bmMoZGF0dW0pO2hhc1ZhbHVlcz1oYXNWYWx1ZXN8fChrZXkhPT11bmRlZmluZWQpO2lmKGRhdGFCeUtleVtrZXldPT09dW5kZWZpbmVkKXtkYXRhQnlLZXlba2V5XT1bXTt9CmRhdGFCeUtleVtrZXldLnB1c2goZGF0dW0pO30pO2lmKCFoYXNWYWx1ZXMpe3RoaXMuc3ViUm93c189dW5kZWZpbmVkO3JldHVybjt9CnRoaXMuc3ViUm93c189W107Zm9yKGNvbnN0IGtleSBpbiBkYXRhQnlLZXkpe2NvbnN0IHJvdz1uZXcgUm93KGtleSxkYXRhQnlLZXlba2V5XSx0aGlzLmdyb3VwaW5nS2V5RnVuY3NfLnNsaWNlKDEpLHRoaXMucm93U3RhdHNDb25zdHJ1Y3Rvcl8pO3RoaXMuc3ViUm93c18ucHVzaChyb3cpO319LGdldCBpc0V4cGFuZGVkKCl7cmV0dXJuKHRoaXMuc3ViUm93cyYmKHRoaXMuc3ViUm93cy5sZW5ndGg+MCkmJih0aGlzLnN1YlJvd3MubGVuZ3RoPDUpKTt9LGdldCBzdWJSb3dzKCl7dGhpcy5yZWJ1aWxkU3ViUm93c0lmTmVlZGVkXygpO3JldHVybiB0aGlzLnN1YlJvd3NfO319O1BvbHltZXIoe2lzOid0ci11aS1iLWdyb3VwaW5nLXRhYmxlJyxjcmVhdGVkKCl7dGhpcy5kYXRhVG9Hcm91cF89dW5kZWZpbmVkO3RoaXMuZ3JvdXBCeV89dW5kZWZpbmVkO3RoaXMucm93U3RhdHNDb25zdHJ1Y3Rvcl89dW5kZWZpbmVkO30sZ2V0IHRhYmxlQ29sdW1ucygpe3JldHVybiB0aGlzLiQudGFibGUudGFibGVDb2x1bW5zO30sc2V0IHRhYmxlQ29sdW1ucyh0YWJsZUNvbHVtbnMpe3RoaXMuJC50YWJsZS50YWJsZUNvbHVtbnM9dGFibGVDb2x1bW5zO30sZ2V0IHRhYmxlUm93cygpe3JldHVybiB0aGlzLiQudGFibGUudGFibGVSb3dzO30sZ2V0IHNvcnRDb2x1bW5JbmRleCgpe3JldHVybiB0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4O30sc2V0IHNvcnRDb2x1bW5JbmRleChzb3J0Q29sdW1uSW5kZXgpe3RoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg9c29ydENvbHVtbkluZGV4O30sZ2V0IHNvcnREZXNjZW5kaW5nKCl7cmV0dXJuIHRoaXMuJC50YWJsZS5zb3J0RGVzY2VuZGluZzt9LHNldCBzb3J0RGVzY2VuZGluZyhzb3J0RGVzY2VuZGluZyl7dGhpcy4kLnRhYmxlLnNvcnREZXNjZW5kaW5nPXNvcnREZXNjZW5kaW5nO30sZ2V0IHNlbGVjdGlvbk1vZGUoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNlbGVjdGlvbk1vZGU7fSxzZXQgc2VsZWN0aW9uTW9kZShzZWxlY3Rpb25Nb2RlKXt0aGlzLiQudGFibGUuc2VsZWN0aW9uTW9kZT1zZWxlY3Rpb25Nb2RlO30sZ2V0IHJvd0hpZ2hsaWdodFN0eWxlKCl7cmV0dXJuIHRoaXMuJC50YWJsZS5yb3dIaWdobGlnaHRTdHlsZTt9LHNldCByb3dIaWdobGlnaHRTdHlsZShyb3dIaWdobGlnaHRTdHlsZSl7dGhpcy4kLnRhYmxlLnJvd0hpZ2hsaWdodFN0eWxlPXJvd0hpZ2hsaWdodFN0eWxlO30sZ2V0IGNlbGxIaWdobGlnaHRTdHlsZSgpe3JldHVybiB0aGlzLiQudGFibGUuY2VsbEhpZ2hsaWdodFN0eWxlO30sc2V0IGNlbGxIaWdobGlnaHRTdHlsZShjZWxsSGlnaGxpZ2h0U3R5bGUpe3RoaXMuJC50YWJsZS5jZWxsSGlnaGxpZ2h0U3R5bGU9Y2VsbEhpZ2hsaWdodFN0eWxlO30sZ2V0IHNlbGVjdGVkQ29sdW1uSW5kZXgoKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNlbGVjdGVkQ29sdW1uSW5kZXg7fSxzZXQgc2VsZWN0ZWRDb2x1bW5JbmRleChzZWxlY3RlZENvbHVtbkluZGV4KXt0aGlzLiQudGFibGUuc2VsZWN0ZWRDb2x1bW5JbmRleD1zZWxlY3RlZENvbHVtbkluZGV4O30sZ2V0IHNlbGVjdGVkVGFibGVSb3coKXtyZXR1cm4gdGhpcy4kLnRhYmxlLnNlbGVjdGVkVGFibGVSb3c7fSxzZXQgc2VsZWN0ZWRUYWJsZVJvdyhzZWxlY3RlZFRhYmxlUm93KXt0aGlzLiQudGFibGUuc2VsZWN0ZWRUYWJsZVJvdz1zZWxlY3RlZFRhYmxlUm93O30sZ2V0IGdyb3VwQnkoKXtyZXR1cm4gdGhpcy5ncm91cEJ5Xzt9LHNldCBncm91cEJ5KGdyb3VwQnkpe3RoaXMuZ3JvdXBCeV89Z3JvdXBCeTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IGRhdGFUb0dyb3VwKCl7cmV0dXJuIHRoaXMuZGF0YVRvR3JvdXBfO30sc2V0IGRhdGFUb0dyb3VwKGRhdGFUb0dyb3VwKXt0aGlzLmRhdGFUb0dyb3VwXz1kYXRhVG9Hcm91cDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sZ2V0IHJvd1N0YXRzQ29uc3RydWN0b3IoKXtyZXR1cm4gdGhpcy5yb3dTdGF0c0NvbnN0cnVjdG9yXzt9LHNldCByb3dTdGF0c0NvbnN0cnVjdG9yKHJvd1N0YXRzQ29uc3RydWN0b3Ipe3RoaXMucm93U3RhdHNDb25zdHJ1Y3Rvcl89cm93U3RhdHNDb25zdHJ1Y3Rvcjt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30scmVidWlsZCgpe3RoaXMuJC50YWJsZS5yZWJ1aWxkKCk7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCBncm91cEJ5PXRoaXMuZ3JvdXBCeV98fFtdO2NvbnN0IGRhdGFUb0dyb3VwPXRoaXMuZGF0YVRvR3JvdXBffHxbXTtjb25zdCByb3dTdGF0c0NvbnN0cnVjdG9yPXRoaXMucm93U3RhdHNDb25zdHJ1Y3Rvcl98fGZ1bmN0aW9uKCl7fTtjb25zdCBzdXBlclJvdz1uZXcgUm93KCcnLGRhdGFUb0dyb3VwLGdyb3VwQnkscm93U3RhdHNDb25zdHJ1Y3Rvcik7dGhpcy4kLnRhYmxlLnRhYmxlUm93cz1zdXBlclJvdy5zdWJSb3dzfHxbXTt9fSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci51aS5iJyxmdW5jdGlvbigpe2NvbnN0IFRISVNfRE9DPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQub3duZXJEb2N1bWVudDtQb2x5bWVyKHtpczondHItdWktYi1ncm91cGluZy10YWJsZS1ncm91cGJ5LXBpY2tlci1ncm91cCcsY3JlYXRlZCgpe3RoaXMucGlja2VyXz11bmRlZmluZWQ7dGhpcy5ncm91cF89dW5kZWZpbmVkO30sZ2V0IHBpY2tlcigpe3JldHVybiB0aGlzLnBpY2tlcl87fSxzZXQgcGlja2VyKHBpY2tlcil7dGhpcy5waWNrZXJfPXBpY2tlcjt9LGdldCBncm91cCgpe3JldHVybiB0aGlzLmdyb3VwXzt9LHNldCBncm91cChnKXt0aGlzLmdyb3VwXz1nO3RoaXMuJC5sYWJlbC50ZXh0Q29udGVudD1nLmxhYmVsO30sZ2V0IGVuYWJsZWQoKXtyZXR1cm4gdGhpcy4kLmVuYWJsZWQuY2hlY2tlZDt9LHNldCBlbmFibGVkKGVuYWJsZWQpe3RoaXMuJC5lbmFibGVkLmNoZWNrZWQ9ZW5hYmxlZDtpZighdGhpcy5lbmFibGVkKXt0aGlzLiQubGVmdC5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQucmlnaHQuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sc2V0IGlzRmlyc3QoaXNGaXJzdCl7dGhpcy4kLmxlZnQuc3R5bGUuZGlzcGxheT0oIXRoaXMuZW5hYmxlZHx8aXNGaXJzdCk/J25vbmUnOidpbmxpbmUnO30sc2V0IGlzTGFzdChpc0xhc3Qpe3RoaXMuJC5yaWdodC5zdHlsZS5kaXNwbGF5PSghdGhpcy5lbmFibGVkfHxpc0xhc3QpPydub25lJzonaW5saW5lJzt9LG1vdmVMZWZ0Xygpe3RoaXMucGlja2VyLm1vdmVMZWZ0Xyh0aGlzKTt9LG1vdmVSaWdodF8oKXt0aGlzLnBpY2tlci5tb3ZlUmlnaHRfKHRoaXMpO30sb25FbmFibGVDaGFuZ2VkXygpe2lmKCF0aGlzLmVuYWJsZWQpe3RoaXMuJC5sZWZ0LnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5yaWdodC5zdHlsZS5kaXNwbGF5PSdub25lJzt9CnRoaXMucGlja2VyLm9uRW5hYmxlQ2hhbmdlZF8odGhpcyk7fX0pO1BvbHltZXIoe2lzOid0ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyJyxjcmVhdGVkKCl7dGhpcy5zZXR0aW5nc0tleV89dW5kZWZpbmVkO30sZ2V0IHNldHRpbmdzS2V5KCl7cmV0dXJuIHRoaXMuc2V0dGluZ3NLZXlfO30sc2V0IHNldHRpbmdzS2V5KHNldHRpbmdzS2V5KXt0aGlzLnNldHRpbmdzS2V5Xz1zZXR0aW5nc0tleTtpZih0aGlzLiQuY29udGFpbmVyLmNoaWxkcmVuLmxlbmd0aCl7dGhpcy5yZXN0b3JlU2V0dGluZ18oKTt9fSxyZXN0b3JlU2V0dGluZ18oKXtpZih0aGlzLnNldHRpbmdzS2V5Xz09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5jdXJyZW50R3JvdXBLZXlzPXRyLmIuU2V0dGluZ3MuZ2V0KHRoaXMuc2V0dGluZ3NLZXlfLHRoaXMuY3VycmVudEdyb3VwS2V5cyk7fSxnZXQgcG9zc2libGVHcm91cHMoKXtyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLiQuY29udGFpbmVyLmNoaWxkcmVuKS5tYXAoZ3JvdXBFbD0+Z3JvdXBFbC5ncm91cCk7fSxzZXQgcG9zc2libGVHcm91cHMocG9zc2libGVHcm91cHMpe1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLnRleHRDb250ZW50PScnO2ZvcihsZXQgaT0wO2k8cG9zc2libGVHcm91cHMubGVuZ3RoOysraSl7Y29uc3QgZ3JvdXBFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLWdyb3VwaW5nLXRhYmxlLWdyb3VwYnktcGlja2VyLWdyb3VwJyk7Z3JvdXBFbC5waWNrZXI9dGhpcztncm91cEVsLmdyb3VwPXBvc3NpYmxlR3JvdXBzW2ldO1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLmFwcGVuZENoaWxkKGdyb3VwRWwpO30KdGhpcy5yZXN0b3JlU2V0dGluZ18oKTt0aGlzLnVwZGF0ZUZpcnN0TGFzdF8oKTt9LHVwZGF0ZUZpcnN0TGFzdF8oKXtjb25zdCBncm91cEVscz1BcnJheS5mcm9tKHRoaXMuJC5jb250YWluZXIuY2hpbGRyZW4pO2NvbnN0IGVuYWJsZWRHcm91cEVscz1ncm91cEVscy5maWx0ZXIoZWw9PmVsLmVuYWJsZWQpO2ZvcihsZXQgaT0wO2k8ZW5hYmxlZEdyb3VwRWxzLmxlbmd0aDsrK2kpe2VuYWJsZWRHcm91cEVsc1tpXS5pc0ZpcnN0PWk9PT0wO2VuYWJsZWRHcm91cEVsc1tpXS5pc0xhc3Q9aT09PWVuYWJsZWRHcm91cEVscy5sZW5ndGgtMTt9fSxnZXQgY3VycmVudEdyb3VwS2V5cygpe3JldHVybiB0aGlzLmN1cnJlbnRHcm91cHMubWFwKGdyb3VwPT5ncm91cC5rZXkpO30sZ2V0IGN1cnJlbnRHcm91cHMoKXtjb25zdCBncm91cHM9W107Zm9yKGNvbnN0IGdyb3VwRWwgb2YgQXJyYXkuZnJvbSh0aGlzLiQuY29udGFpbmVyLmNoaWxkcmVuKSl7aWYoZ3JvdXBFbC5lbmFibGVkKXtncm91cHMucHVzaChncm91cEVsLmdyb3VwKTt9fQpyZXR1cm4gZ3JvdXBzO30sc2V0IGN1cnJlbnRHcm91cEtleXMobmV3S2V5cyl7aWYoIXRyLmIuY29tcGFyZUFycmF5cyh0aGlzLmN1cnJlbnRHcm91cEtleXMsbmV3S2V5cywoeCx5KT0+eC5sb2NhbGVDb21wYXJlKHkpKSl7cmV0dXJuO30KY29uc3QgcG9zc2libGVHcm91cHM9bmV3IE1hcCgpO2Zvcihjb25zdCBncm91cCBvZiB0aGlzLnBvc3NpYmxlR3JvdXBzKXtwb3NzaWJsZUdyb3Vwcy5zZXQoZ3JvdXAua2V5LGdyb3VwKTt9CmNvbnN0IGdyb3VwRWxzPXRoaXMuJC5jb250YWluZXIuY2hpbGRyZW47bGV0IGk9MDtmb3IoaT0wO2k8bmV3S2V5cy5sZW5ndGg7KytpKXtjb25zdCBncm91cD1wb3NzaWJsZUdyb3Vwcy5nZXQobmV3S2V5c1tpXSk7aWYoZ3JvdXA9PT11bmRlZmluZWQpe25ld0tleXMuc3BsaWNlKGksMSk7LS1pO2NvbnRpbnVlO30KZ3JvdXBFbHNbaV0uZ3JvdXA9Z3JvdXA7Z3JvdXBFbHNbaV0uZW5hYmxlZD10cnVlO3Bvc3NpYmxlR3JvdXBzLmRlbGV0ZShuZXdLZXlzW2ldKTt9CmZvcihjb25zdCBncm91cCBvZiBwb3NzaWJsZUdyb3Vwcy52YWx1ZXMoKSl7Z3JvdXBFbHNbaV0uZ3JvdXA9Z3JvdXA7Z3JvdXBFbHNbaV0uZW5hYmxlZD1mYWxzZTsrK2k7fQp0aGlzLnVwZGF0ZUZpcnN0TGFzdF8oKTt0aGlzLm9uQ3VycmVudEdyb3Vwc0NoYW5nZWRfKCk7fSxtb3ZlTGVmdF8oZ3JvdXBFbCl7Y29uc3QgcmVmZXJlbmNlPWdyb3VwRWwucHJldmlvdXNTaWJsaW5nO1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLnJlbW92ZUNoaWxkKGdyb3VwRWwpO1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLmluc2VydEJlZm9yZShncm91cEVsLHJlZmVyZW5jZSk7dGhpcy51cGRhdGVGaXJzdExhc3RfKCk7aWYoZ3JvdXBFbC5lbmFibGVkKXt0aGlzLm9uQ3VycmVudEdyb3Vwc0NoYW5nZWRfKCk7fX0sbW92ZVJpZ2h0Xyhncm91cEVsKXtjb25zdCByZWZlcmVuY2U9Z3JvdXBFbC5uZXh0U2libGluZy5uZXh0U2libGluZztQb2x5bWVyLmRvbSh0aGlzLiQuY29udGFpbmVyKS5yZW1vdmVDaGlsZChncm91cEVsKTtpZihyZWZlcmVuY2Upe1BvbHltZXIuZG9tKHRoaXMuJC5jb250YWluZXIpLmluc2VydEJlZm9yZShncm91cEVsLHJlZmVyZW5jZSk7fWVsc2V7UG9seW1lci5kb20odGhpcy4kLmNvbnRhaW5lcikuYXBwZW5kQ2hpbGQoZ3JvdXBFbCk7fQp0aGlzLnVwZGF0ZUZpcnN0TGFzdF8oKTtpZihncm91cEVsLmVuYWJsZWQpe3RoaXMub25DdXJyZW50R3JvdXBzQ2hhbmdlZF8oKTt9fSxvbkN1cnJlbnRHcm91cHNDaGFuZ2VkXygpe3RoaXMuZGlzcGF0Y2hFdmVudChuZXcgdHIuYi5FdmVudCgnY3VycmVudC1ncm91cHMtY2hhbmdlZCcpKTt0ci5iLlNldHRpbmdzLnNldCh0aGlzLnNldHRpbmdzS2V5Xyx0aGlzLmN1cnJlbnRHcm91cEtleXMpO30sb25FbmFibGVDaGFuZ2VkXyhncm91cEVsKXt0aGlzLnVwZGF0ZUZpcnN0TGFzdF8oKTt0aGlzLm9uQ3VycmVudEdyb3Vwc0NoYW5nZWRfKCk7fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0JzsoZnVuY3Rpb24oKXtQb2x5bWVyKHtpczondHItdWktc3AtZmlsZS1zaXplLXN0YXRzLXNpZGUtcGFuZWwnLGJlaGF2aW9yczpbdHIudWkuYmVoYXZpb3JzLlNpZGVQYW5lbF0scmVhZHkoKXt0aGlzLm1vZGVsXz11bmRlZmluZWQ7dGhpcy5zZWxlY3Rpb25fPW5ldyB0ci5tb2RlbC5FdmVudFNldCgpO3RoaXMuJC5waWNrZXIuc2V0dGluZ3NLZXk9J3RyLXVpLXNwLWZpbGUtc2l6ZS1zdGF0cy1zaWRlLXBhbmVsLXBpY2tlcic7dGhpcy4kLnBpY2tlci5wb3NzaWJsZUdyb3Vwcz1be2tleToncGhhc2UnLGxhYmVsOidFdmVudCBUeXBlJyxkYXRhRm4oZXZlbnRTdGF0KXtyZXR1cm4gZXZlbnRTdGF0LnBoYXNlO319LHtrZXk6J2NhdGVnb3J5JyxsYWJlbDonQ2F0ZWdvcnknLGRhdGFGbihldmVudFN0YXQpe3JldHVybiBldmVudFN0YXQuY2F0ZWdvcnk7fX0se2tleTondGl0bGUnLGxhYmVsOidUaXRsZScsZGF0YUZuKGV2ZW50U3RhdCl7cmV0dXJuIGV2ZW50U3RhdC50aXRsZTt9fV07aWYodGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBLZXlzLmxlbmd0aD09PTApe3RoaXMuJC5waWNrZXIuY3VycmVudEdyb3VwS2V5cz1bJ3BoYXNlJywndGl0bGUnXTt9CnRoaXMuJC5waWNrZXIuYWRkRXZlbnRMaXN0ZW5lcignY3VycmVudC1ncm91cHMtY2hhbmdlZCcsdGhpcy51cGRhdGVDb250ZW50c18uYmluZCh0aGlzKSk7fSxnZXQgdGV4dExhYmVsKCl7cmV0dXJuJ0ZpbGUgU2l6ZSBTdGF0cyc7fSxzdXBwb3J0c01vZGVsKG0pe2lmKCFtKXtyZXR1cm57c3VwcG9ydGVkOmZhbHNlLHJlYXNvbjonTm8gc3RhdHMgd2VyZSBjb2xsZWN0ZWQgZm9yIHRoaXMgZmlsZS4nfTt9CmlmKG0uc3RhdHMuYWxsVHJhY2VFdmVudFN0YXRzLmxlbmd0aD09PTApe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBzdGF0cyB3ZXJlIGNvbGxlY3RlZCBmb3IgdGhpcyBmaWxlLid9O30KcmV0dXJue3N1cHBvcnRlZDp0cnVlfTt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7dGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCByYW5nZU9mSW50ZXJlc3QoKXtyZXR1cm4gdGhpcy5yYW5nZU9mSW50ZXJlc3RfO30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZU9mSW50ZXJlc3Qpe3RoaXMucmFuZ2VPZkludGVyZXN0Xz1yYW5nZU9mSW50ZXJlc3Q7fSxnZXQgc2VsZWN0aW9uKCl7cmV0dXJuIHRoaXMuc2VsZWN0aW9uXzt9LHNldCBzZWxlY3Rpb24oc2VsZWN0aW9uKXt0aGlzLnNlbGVjdGlvbl89c2VsZWN0aW9uO30sY3JlYXRlQ29sdW1uc18oc3RhdHMpe2NvbnN0IGNvbHVtbnM9W3t0aXRsZTonVGl0bGUnLHZhbHVlKHJvdyl7Y29uc3QgdGl0bGVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7UG9seW1lci5kb20odGl0bGVFbCkudGV4dENvbnRlbnQ9cm93LnRpdGxlO3RpdGxlRWwuc3R5bGUudGV4dE92ZXJmbG93PSdlbGxpcHNpcyc7cmV0dXJuIHRpdGxlRWw7fSxjbXAoYSxiKXtyZXR1cm4gYS50aXRsZS5sb2NhbGVDb21wYXJlKGIudGl0bGUpO30sd2lkdGg6JzQwMHB4J30se3RpdGxlOidOdW0gRXZlbnRzJyxhbGlnbjp0ci51aS5iLlRhYmxlRm9ybWF0LkNvbHVtbkFsaWdubWVudC5SSUdIVCx2YWx1ZShyb3cpe3JldHVybiByb3cucm93U3RhdHMubnVtRXZlbnRzO30sY21wKGEsYil7cmV0dXJuIGEucm93U3RhdHMubnVtRXZlbnRzLWIucm93U3RhdHMubnVtRXZlbnRzO30sd2lkdGg6JzgwcHgnfV07aWYoc3RhdHMmJnN0YXRzLmhhc0V2ZW50U2l6ZXNpbkJ5dGVzKXtjb2x1bW5zLnB1c2goe3RpdGxlOidCeXRlcycsdmFsdWUocm93KXtjb25zdCB2YWx1ZT1uZXcgdHIuYi5TY2FsYXIodHIuYi5Vbml0LmJ5TmFtZS5zaXplSW5CeXRlcyxyb3cucm93U3RhdHMudG90YWxFdmVudFNpemVpbkJ5dGVzKTtjb25zdCBzcGFuRWw9dHIudi51aS5jcmVhdGVTY2FsYXJTcGFuKHZhbHVlKTtyZXR1cm4gc3BhbkVsO30sY21wKGEsYil7cmV0dXJuIGEucm93U3RhdHMudG90YWxFdmVudFNpemVpbkJ5dGVzLQpiLnJvd1N0YXRzLnRvdGFsRXZlbnRTaXplaW5CeXRlczt9LHdpZHRoOic4MHB4J30pO30KcmV0dXJuIGNvbHVtbnM7fSx1cGRhdGVDb250ZW50c18oKXtjb25zdCB0YWJsZT10aGlzLiQudGFibGU7Y29uc3QgY29sdW1ucz10aGlzLmNyZWF0ZUNvbHVtbnNfKHRoaXMubW9kZWwuc3RhdHMpO3RhYmxlLnJvd1N0YXRzQ29uc3RydWN0b3I9ZnVuY3Rpb24gTW9kZWxTdGF0c1Jvd1N0YXRzKHJvdyl7Y29uc3Qgc3VtPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShyb3cuZGF0YSxmdW5jdGlvbih4KXtyZXR1cm4geC5udW1FdmVudHM7fSk7Y29uc3QgdG90YWxFdmVudFNpemVpbkJ5dGVzPXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShyb3cuZGF0YSx4PT54LnRvdGFsRXZlbnRTaXplaW5CeXRlcyk7cmV0dXJue251bUV2ZW50czpzdW0sdG90YWxFdmVudFNpemVpbkJ5dGVzfTt9O3RhYmxlLnRhYmxlQ29sdW1ucz1jb2x1bW5zO3RhYmxlLnNvcnRDb2x1bW5JbmRleD0xO3RhYmxlLnNvcnREZXNjZW5kaW5nPXRydWU7dGFibGUuc2VsZWN0aW9uTW9kZT10ci51aS5iLlRhYmxlRm9ybWF0LlNlbGVjdGlvbk1vZGUuUk9XO3RhYmxlLmdyb3VwQnk9dGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBzLm1hcChmdW5jdGlvbihncm91cCl7cmV0dXJuIGdyb3VwLmRhdGFGbjt9KTtpZighdGhpcy5tb2RlbCl7dGFibGUuZGF0YVRvR3JvdXA9W107fWVsc2V7dGFibGUuZGF0YVRvR3JvdXA9dGhpcy5tb2RlbC5zdGF0cy5hbGxUcmFjZUV2ZW50U3RhdHM7fQp0aGlzLiQudGFibGUucmVidWlsZCgpO319KTt0ci51aS5zaWRlX3BhbmVsLlNpZGVQYW5lbFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLXNwLWZpbGUtc2l6ZS1zdGF0cy1zaWRlLXBhbmVsJyk7fSk7fSkoKTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1yZScsZnVuY3Rpb24oKXtmdW5jdGlvbiBGYWlsdXJlKGpvYixmdW5jdGlvbkhhbmRsZVN0cmluZyx0cmFjZUNhbm9uaWNhbFVybCxmYWlsdXJlVHlwZU5hbWUsZGVzY3JpcHRpb24sc3RhY2spe3RoaXMuam9iPWpvYjt0aGlzLmZ1bmN0aW9uSGFuZGxlU3RyaW5nPWZ1bmN0aW9uSGFuZGxlU3RyaW5nO3RoaXMudHJhY2VDYW5vbmljYWxVcmw9dHJhY2VDYW5vbmljYWxVcmw7dGhpcy5mYWlsdXJlVHlwZU5hbWU9ZmFpbHVyZVR5cGVOYW1lO3RoaXMuZGVzY3JpcHRpb249ZGVzY3JpcHRpb247dGhpcy5zdGFjaz1zdGFjazt9CkZhaWx1cmUucHJvdG90eXBlPXthc0RpY3QoKXtyZXR1cm57ZnVuY3Rpb25faGFuZGxlX3N0cmluZzp0aGlzLmZ1bmN0aW9uSGFuZGxlU3RyaW5nLHRyYWNlX2Nhbm9uaWNhbF91cmw6dGhpcy50cmFjZUNhbm9uaWNhbFVybCx0eXBlOnRoaXMuZmFpbHVyZVR5cGVOYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sc3RhY2s6dGhpcy5zdGFja307fX07RmFpbHVyZS5mcm9tRGljdD1mdW5jdGlvbihmYWlsdXJlRGljdCl7cmV0dXJuIG5ldyBGYWlsdXJlKHVuZGVmaW5lZCxmYWlsdXJlRGljdC5mdW5jdGlvbl9oYW5kbGVfc3RyaW5nLGZhaWx1cmVEaWN0LnRyYWNlX2Nhbm9uaWNhbF91cmwsZmFpbHVyZURpY3QudHlwZSxmYWlsdXJlRGljdC5kZXNjcmlwdGlvbixmYWlsdXJlRGljdC5zdGFjayk7fTtyZXR1cm57RmFpbHVyZSx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIubXJlJyxmdW5jdGlvbigpe2NvbnN0IEZ1bmN0aW9uUmVnaXN0cnk9e2FsbEZ1bmN0aW9uc186W10sYWxsRnVuY3Rpb25zQnlOYW1lXzp7fSxnZXQgYWxsRnVuY3Rpb25zKCl7cmV0dXJuIHRoaXMuYWxsRnVuY3Rpb25zXzt9LGdldCBhbGxGdW5jdGlvbnNCeU5hbWUoKXtyZXR1cm4gdGhpcy5hbGxGdW5jdGlvbnNCeU5hbWVfO319O0Z1bmN0aW9uUmVnaXN0cnkuZ2V0RnVuY3Rpb249ZnVuY3Rpb24obmFtZSl7cmV0dXJuIHRoaXMuYWxsRnVuY3Rpb25zQnlOYW1lX1tuYW1lXTt9O0Z1bmN0aW9uUmVnaXN0cnkucmVnaXN0ZXI9ZnVuY3Rpb24oZnVuYyl7aWYoZnVuYy5uYW1lPT09Jycpe3Rocm93IG5ldyBFcnJvcignUmVnaXN0ZXJlZCBmdW5jdGlvbnMgbXVzdCBub3QgYmUgYW5vbnltb3VzJyk7fQppZih0aGlzLmFsbEZ1bmN0aW9uc0J5TmFtZVtmdW5jLm5hbWVdIT09dW5kZWZpbmVkKXt0aHJvdyBuZXcgRXJyb3IoJ0Z1bmN0aW9uIG5hbWVkICcrZnVuYy5uYW1lKydpcyBhbHJlYWR5IHJlZ2lzdGVyZWQuJyk7fQp0aGlzLmFsbEZ1bmN0aW9uc0J5TmFtZVtmdW5jLm5hbWVdPWZ1bmM7dGhpcy5hbGxGdW5jdGlvbnMucHVzaChmdW5jKTt9O2Z1bmN0aW9uIE1vZHVsZVRvTG9hZChocmVmLGZpbGVuYW1lKXtpZigoaHJlZiE9PXVuZGVmaW5lZCk/KGZpbGVuYW1lIT09dW5kZWZpbmVkKTooZmlsZW5hbWU9PT11bmRlZmluZWQpKXt0aHJvdyBuZXcgRXJyb3IoJ01vZHVsZVRvTG9hZCBtdXN0IHNwZWNpZnkgZXhhY3RseSBvbmUgb2YgaHJlZiBvciAnKydmaWxlbmFtZScpO30KdGhpcy5ocmVmPWhyZWY7dGhpcy5maWxlbmFtZT1maWxlbmFtZTt9Ck1vZHVsZVRvTG9hZC5wcm90b3R5cGU9e2FzRGljdCgpe2lmKHRoaXMuaHJlZiE9PXVuZGVmaW5lZCl7cmV0dXJueydocmVmJzp0aGlzLmhyZWZ9O30KcmV0dXJueydmaWxlbmFtZSc6dGhpcy5maWxlbmFtZX07fSx0b1N0cmluZygpe2lmKHRoaXMuaHJlZiE9PXVuZGVmaW5lZCl7cmV0dXJuJ01vZHVsZVRvTG9hZChocmVmPSInK3RoaXMuaHJlZisnIiknO30KcmV0dXJuJ01vZHVsZVRvTG9hZChmaWxlbmFtZT0iJyt0aGlzLmZpbGVuYW1lKyciKSc7fX07TW9kdWxlVG9Mb2FkLmZyb21EaWN0PWZ1bmN0aW9uKG1vZHVsZURpY3Qpe3JldHVybiBuZXcgTW9kdWxlVG9Mb2FkKG1vZHVsZURpY3QuaHJlZixtb2R1bGVEaWN0LmZpbGVuYW1lKTt9O2Z1bmN0aW9uIEZ1bmN0aW9uSGFuZGxlKG1vZHVsZXNUb0xvYWQsZnVuY3Rpb25OYW1lLG9wdF9vcHRpb25zKXtpZighKG1vZHVsZXNUb0xvYWQgaW5zdGFuY2VvZiBBcnJheSkpe3Rocm93IG5ldyBFcnJvcignbW9kdWxlc1RvTG9hZCBpbiBGdW5jdGlvbkhhbmRsZSBtdXN0IGJlIGFuIGFycmF5Jyk7fQppZih0eXBlb2YoZnVuY3Rpb25OYW1lKSE9PSdzdHJpbmcnKXt0aHJvdyBuZXcgRXJyb3IoJ2Z1bmN0aW9uTmFtZSBpbiBGdW5jdGlvbkhhbmRsZSBtdXN0IGJlIGEgc3RyaW5nJyk7fQp0aGlzLm1vZHVsZXNUb0xvYWQ9bW9kdWxlc1RvTG9hZDt0aGlzLmZ1bmN0aW9uTmFtZT1mdW5jdGlvbk5hbWU7dGhpcy5vcHRpb25zXz1vcHRfb3B0aW9uczt9CkZ1bmN0aW9uSGFuZGxlLnByb3RvdHlwZT17Z2V0IG9wdGlvbnMoKXtyZXR1cm4gdGhpcy5vcHRpb25zXzt9LGFzRGljdCgpe3JldHVybnsnbW9kdWxlc190b19sb2FkJzp0aGlzLm1vZHVsZXNUb0xvYWQubWFwKGZ1bmN0aW9uKG0pe3JldHVybiBtLmFzRGljdCgpO30pLCdmdW5jdGlvbl9uYW1lJzp0aGlzLmZ1bmN0aW9uTmFtZSwnb3B0aW9ucyc6dGhpcy5vcHRpb25zX307fSxhc1VzZXJGcmllbmRseVN0cmluZygpe2NvbnN0IHBhcnRzPXRoaXMubW9kdWxlc1RvTG9hZC5tYXAobXRsPT5tdGwuZmlsZW5hbWUpO3BhcnRzLnB1c2godGhpcy5mdW5jdGlvbk5hbWUpO3BhcnRzLnB1c2goSlNPTi5zdHJpbmdpZnkodGhpcy5vcHRpb25zXykpO3JldHVybiBwYXJ0cy5qb2luKCcsJyk7fSxoYXNIcmVmcygpe2Zvcihjb25zdCBtb2R1bGUgaW4gdGhpcy5tb2R1bGVzVG9Mb2FkKXtpZih0aGlzLm1vZHVsZXNUb0xvYWRbbW9kdWxlXS5ocmVmIT09dW5kZWZpbmVkKXtyZXR1cm4gdHJ1ZTt9fQpyZXR1cm4gZmFsc2U7fSxsb2FkKCl7aWYodGhpcy5oYXNIcmVmcygpKXtjb25zdCBlcnI9bmV3IEVycm9yKCdGdW5jdGlvbkhhbmRsZSBuYW1lZCAnK3RoaXMuZnVuY3Rpb25OYW1lKycgc3BlY2lmaWVzIGhyZWZzLCB3aGljaCBjYW5ub3QgYmUgbG9hZGVkLicpO2Vyci5uYW1lPSdGdW5jdGlvbkxvYWRpbmdFcnJvcic7dGhyb3cgZXJyO30KZm9yKGNvbnN0IG1vZHVsZSBpbiB0aGlzLm1vZHVsZXNUb0xvYWQpe2NvbnN0IGZpbGVuYW1lPXRoaXMubW9kdWxlc1RvTG9hZFttb2R1bGVdLmZpbGVuYW1lO3RyeXtIVE1MSW1wb3J0c0xvYWRlci5sb2FkSFRNTEZpbGUoZmlsZW5hbWUpO31jYXRjaChlcnIpe2Vyci5uYW1lPSdGdW5jdGlvbkxvYWRpbmdFcnJvcic7dGhyb3cgZXJyO319CmNvbnN0IGZ1bmM9RnVuY3Rpb25SZWdpc3RyeS5nZXRGdW5jdGlvbih0aGlzLmZ1bmN0aW9uTmFtZSk7aWYoZnVuYz09PXVuZGVmaW5lZCl7Y29uc3QgZXJyPW5ldyBFcnJvcignTm8gcmVnaXN0ZXJlZCBmdW5jdGlvbiBuYW1lZCAnK3RoaXMuZnVuY3Rpb25OYW1lKTtlcnIubmFtZT0nRnVuY3Rpb25Ob3REZWZpbmVkRXJyb3InO3Rocm93IGVycjt9CnJldHVybiBmdW5jO30sdG9TdHJpbmcoKXtjb25zdCBtb2R1bGVzVG9Mb2FkU3RyPXRoaXMubW9kdWxlc1RvTG9hZC5tYXAoZnVuY3Rpb24obW9kdWxlKXtyZXR1cm4gbW9kdWxlLnRvU3RyaW5nKCk7fSk7cmV0dXJuJ0Z1bmN0aW9uSGFuZGxlKG1vZHVsZXNUb0xvYWQ9WycrbW9kdWxlc1RvTG9hZFN0cisnXSwgJysnZnVuY3Rpb25OYW1lPSInK3RoaXMuZnVuY3Rpb25OYW1lKyciLCBvcHRpb25zPSInKwpKU09OLnN0cmluZ2lmeSh0aGlzLm9wdGlvbnNfKSsnIiknO319O0Z1bmN0aW9uSGFuZGxlLmxvYWRGcm9tRmlsZW5hbWVfPWZ1bmN0aW9uKGZpbGVuYW1lKXt0cnl7Y29uc3QgbnVtRnVuY3Rpb25zQmVmb3JlPUZ1bmN0aW9uUmVnaXN0cnkuYWxsRnVuY3Rpb25zLmxlbmd0aDtIVE1MSW1wb3J0c0xvYWRlci5sb2FkSFRNTEZpbGUoZmlsZW5hbWUpO31jYXRjaChlcnIpe2Vyci5uYW1lPSdGdW5jdGlvbkxvYWRpbmdFcnJvcic7dGhyb3cgZXJyO30KY29uc3QgbnVtRnVuY3Rpb25zTm93PUZ1bmN0aW9uUmVnaXN0cnkuYWxsRnVuY3Rpb25zLmxlbmd0aDtpZihudW1GdW5jdGlvbnNOb3chPT0obnVtRnVuY3Rpb25zQmVmb3JlKzEpKXtjb25zdCBlcnI9bmV3IEVycm9yKGZpbGVuYW1lKycgZGlkblwndCBjYWxsIEZ1bmN0aW9uUmVnaXN0cnkucmVnaXN0ZXInKTtlcnIubmFtZT0nRnVuY3Rpb25Ob3REZWZpbmVkRXJyb3InO3Rocm93IGVycjt9CnJldHVybiBGdW5jdGlvblJlZ2lzdHJ5LmFsbEZ1bmN0aW9uc1tudW1GdW5jdGlvbnNOb3ctMV07fTtGdW5jdGlvbkhhbmRsZS5mcm9tRGljdD1mdW5jdGlvbihoYW5kbGVEaWN0KXtjb25zdCBvcHRpb25zPWhhbmRsZURpY3Qub3B0aW9ucztsZXQgbW9kdWxlc1RvTG9hZDtpZihoYW5kbGVEaWN0Lm1vZHVsZXNfdG9fbG9hZCE9PXVuZGVmaW5lZCl7bW9kdWxlc1RvTG9hZD1oYW5kbGVEaWN0Lm1vZHVsZXNfdG9fbG9hZC5tYXAoZnVuY3Rpb24obW9kdWxlKXtyZXR1cm4gTW9kdWxlVG9Mb2FkLmZyb21EaWN0KG1vZHVsZSk7fSk7fQpyZXR1cm4gbmV3IEZ1bmN0aW9uSGFuZGxlKG1vZHVsZXNUb0xvYWQsaGFuZGxlRGljdC5mdW5jdGlvbl9uYW1lLG9wdGlvbnMpO307cmV0dXJue0Z1bmN0aW9uSGFuZGxlLE1vZHVsZVRvTG9hZCxGdW5jdGlvblJlZ2lzdHJ5LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci5tZXRyaWNzJyxmdW5jdGlvbigpe2Z1bmN0aW9uIHJ1bk1ldHJpY3MobW9kZWwsb3B0aW9ucyxhZGRGYWlsdXJlQ2Ipe2lmKG9wdGlvbnM9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcignT3B0aW9ucyBhcmUgcmVxdWlyZWQuJyk7fQpjb25zdCBtZXRyaWNOYW1lcz1vcHRpb25zLm1ldHJpY3M7aWYoIW1ldHJpY05hbWVzKXt0aHJvdyBuZXcgRXJyb3IoJ01ldHJpYyBuYW1lcyBzaG91bGQgYmUgc3BlY2lmaWVkLicpO30KY29uc3QgYWxsTWV0cmljc1N0YXJ0PW5ldyBEYXRlKCk7Y29uc3QgZHVyYXRpb25CcmVha2Rvd249bmV3IHRyLnYuZC5CcmVha2Rvd24oKTtjb25zdCBjYXRlZ29yaWVzPWdldFRyYWNlQ2F0ZWdvcmllcyhtb2RlbCk7Y29uc3QgaGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoKTtoaXN0b2dyYW1zLmNyZWF0ZUhpc3RvZ3JhbSgndHJhY2VfaW1wb3J0X2R1cmF0aW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLG1vZGVsLnN0YXRzLnRyYWNlSW1wb3J0RHVyYXRpb25Ncyx7YmluQm91bmRhcmllczp0ci52Lkhpc3RvZ3JhbUJpbkJvdW5kYXJpZXMuY3JlYXRlRXhwb25lbnRpYWwoMWUtMywxZTUsMzApLGRlc2NyaXB0aW9uOidEdXJhdGlvbiB0aGF0IHRyYWNlIHZpZXdlciByZXF1aXJlZCB0byBpbXBvcnQgdGhlIHRyYWNlJyxzdW1tYXJ5T3B0aW9uczp0ci52Lkhpc3RvZ3JhbS5BVkVSQUdFX09OTFlfU1VNTUFSWV9PUFRJT05TLH0pO2Zvcihjb25zdCBtZXRyaWNOYW1lIG9mIG1ldHJpY05hbWVzKXtjb25zdCBtZXRyaWNTdGFydD1uZXcgRGF0ZSgpO2NvbnN0IG1ldHJpYz10ci5tZXRyaWNzLk1ldHJpY1JlZ2lzdHJ5LmZpbmRUeXBlSW5mb1dpdGhOYW1lKG1ldHJpY05hbWUpO2lmKG1ldHJpYz09PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKGAiJHttZXRyaWNOYW1lfSIgaXMgbm90IGEgcmVnaXN0ZXJlZCBtZXRyaWMuYCk7fQp2YWxpZGF0ZVRyYWNlQ2F0ZWdvcmllcyhtZXRyaWMubWV0YWRhdGEucmVxdWlyZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXMpO3RyeXttZXRyaWMuY29uc3RydWN0b3IoaGlzdG9ncmFtcyxtb2RlbCxvcHRpb25zKTt9Y2F0Y2goZSl7Y29uc3QgZXJyPXRyLmIubm9ybWFsaXplRXhjZXB0aW9uKGUpO2FkZEZhaWx1cmVDYihuZXcgdHIubXJlLkZhaWx1cmUodW5kZWZpbmVkLCdtZXRyaWNNYXBGdW5jdGlvbicsbW9kZWwuY2Fub25pY2FsVXJsLGVyci50eXBlTmFtZSxlcnIubWVzc2FnZSxlcnIuc3RhY2spKTt9CmNvbnN0IG1ldHJpY01zPW5ldyBEYXRlKCktbWV0cmljU3RhcnQ7aGlzdG9ncmFtcy5jcmVhdGVIaXN0b2dyYW0obWV0cmljTmFtZSsnX2R1cmF0aW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFttZXRyaWNNc10pO2R1cmF0aW9uQnJlYWtkb3duLnNldChtZXRyaWNOYW1lLG1ldHJpY01zKTt9CnZhbGlkYXRlRGlhZ25vc3RpY05hbWVzKGhpc3RvZ3JhbXMpO2NvbnN0IGFsbE1ldHJpY3NNcz1uZXcgRGF0ZSgpLWFsbE1ldHJpY3NTdGFydCsKbW9kZWwuc3RhdHMudHJhY2VJbXBvcnREdXJhdGlvbk1zO2R1cmF0aW9uQnJlYWtkb3duLnNldCgndHJhY2VJbXBvcnQnLG1vZGVsLnN0YXRzLnRyYWNlSW1wb3J0RHVyYXRpb25Ncyk7ZHVyYXRpb25CcmVha2Rvd24uc2V0KCdvdGhlcicsYWxsTWV0cmljc01zLXRyLmIubWF0aC5TdGF0aXN0aWNzLnN1bShkdXJhdGlvbkJyZWFrZG93biwoW21ldHJpY05hbWUsbWV0cmljTXNdKT0+bWV0cmljTXMpKTtjb25zdCBicmVha2Rvd25OYW1lcz10ci52LmQuUmVsYXRlZE5hbWVNYXAuZnJvbUVudHJpZXMobmV3IE1hcChtZXRyaWNOYW1lcy5tYXAobWV0cmljTmFtZT0+W21ldHJpY05hbWUsbWV0cmljTmFtZSsnX2R1cmF0aW9uJ10pKSk7YnJlYWtkb3duTmFtZXMuc2V0KCd0cmFjZUltcG9ydCcsJ3RyYWNlX2ltcG9ydF9kdXJhdGlvbicpO2hpc3RvZ3JhbXMuY3JlYXRlSGlzdG9ncmFtKCdtZXRyaWNzX2R1cmF0aW9uJyx0ci5iLlVuaXQuYnlOYW1lLnRpbWVEdXJhdGlvbkluTXNfc21hbGxlcklzQmV0dGVyLFt7dmFsdWU6YWxsTWV0cmljc01zLGRpYWdub3N0aWNzOnticmVha2Rvd246ZHVyYXRpb25CcmVha2Rvd259LH0sXSx7ZGlhZ25vc3RpY3M6e2JyZWFrZG93bjpicmVha2Rvd25OYW1lc30sfSk7cmV0dXJuIGhpc3RvZ3JhbXM7fQpmdW5jdGlvbiBnZXRUcmFjZUNhdGVnb3JpZXMobW9kZWwpe2Zvcihjb25zdCBtZXRhZGF0YSBvZiBtb2RlbC5tZXRhZGF0YSl7bGV0IGNvbmZpZztpZihtZXRhZGF0YS5uYW1lPT09J1RyYWNlQ29uZmlnJyYmbWV0YWRhdGEudmFsdWUpe2NvbmZpZz1tZXRhZGF0YS52YWx1ZTt9CmlmKG1ldGFkYXRhLm5hbWU9PT0nbWV0YWRhdGEnJiZtZXRhZGF0YS52YWx1ZSYmbWV0YWRhdGEudmFsdWVbJ3RyYWNlLWNvbmZpZyddJiZtZXRhZGF0YS52YWx1ZVsndHJhY2UtY29uZmlnJ10hPT0nX19zdHJpcHBlZF9fJyl7Y29uZmlnPUpTT04ucGFyc2UobWV0YWRhdGEudmFsdWVbJ3RyYWNlLWNvbmZpZyddKTt9CmlmKGNvbmZpZyl7cmV0dXJue2V4Y2x1ZGVkOmNvbmZpZy5leGNsdWRlZF9jYXRlZ29yaWVzfHxbXSxpbmNsdWRlZDpjb25maWcuaW5jbHVkZWRfY2F0ZWdvcmllc3x8W10sfTt9fX0KZnVuY3Rpb24gdmFsaWRhdGVUcmFjZUNhdGVnb3JpZXMocmVxdWlyZWRDYXRlZ29yaWVzLGNhdGVnb3JpZXMpe2lmKCFyZXF1aXJlZENhdGVnb3JpZXMpcmV0dXJuO2lmKCFjYXRlZ29yaWVzKXRocm93IG5ldyBFcnJvcignTWlzc2luZyB0cmFjZSBjb25maWcgbWV0YWRhdGEnKTtmb3IoY29uc3QgY2F0IG9mIHJlcXVpcmVkQ2F0ZWdvcmllcyl7Y29uc3QgaXNEaXNhYmxlZEJ5RGVmYXVsdD0oY2F0LmluZGV4T2YoJ2Rpc2FibGVkLWJ5LWRlZmF1bHQnKT09PTApO2xldCBtaXNzaW5nPWZhbHNlO2lmKGlzRGlzYWJsZWRCeURlZmF1bHQpe2lmKCFjYXRlZ29yaWVzLmluY2x1ZGVkLmluY2x1ZGVzKGNhdCkpe21pc3Npbmc9dHJ1ZTt9fWVsc2UgaWYoY2F0ZWdvcmllcy5leGNsdWRlZC5pbmNsdWRlcyhjYXQpKXttaXNzaW5nPXRydWU7fQppZihtaXNzaW5nKXt0aHJvdyBuZXcgRXJyb3IoYFRyYWNlIGlzIG1pc3NpbmcgcmVxdWlyZWQgY2F0ZWdvcnkgIiR7Y2F0fSJgKTt9fX0KZnVuY3Rpb24gdmFsaWRhdGVEaWFnbm9zdGljTmFtZXMoaGlzdG9ncmFtcyl7Zm9yKGNvbnN0IGhpc3Qgb2YgaGlzdG9ncmFtcyl7Zm9yKGNvbnN0IG5hbWUgb2YgaGlzdC5kaWFnbm9zdGljcy5rZXlzKCkpe2lmKHRyLnYuZC5SRVNFUlZFRF9OQU1FU19TRVQuaGFzKG5hbWUpKXt0aHJvdyBuZXcgRXJyb3IoYElsbGVnYWwgZGlhZ25vc3RpYyBuYW1lICIke25hbWV9IiBvbiBIaXN0b2dyYW0gIiR7aGlzdC5uYW1lfSJgKTt9fX19CmZ1bmN0aW9uIGFkZFRlbGVtZXRyeUluZm8oaGlzdG9ncmFtcyxtb2RlbCl7Zm9yKGNvbnN0IG1ldGFkYXRhIG9mIG1vZGVsLm1ldGFkYXRhKXtpZighbWV0YWRhdGEudmFsdWV8fCFtZXRhZGF0YS52YWx1ZS50ZWxlbWV0cnkpY29udGludWU7Zm9yKGNvbnN0W25hbWUsdmFsdWVdb2YgT2JqZWN0LmVudHJpZXMobWV0YWRhdGEudmFsdWUudGVsZW1ldHJ5KSl7Y29uc3QgdHlwZT10ci52LmQuUkVTRVJWRURfTkFNRVNfVE9fVFlQRVMuZ2V0KG5hbWUpO2lmKHR5cGU9PT11bmRlZmluZWQpe3Rocm93IG5ldyBFcnJvcihgVW5leHBlY3RlZCB0ZWxlbWV0cnkuJHtuYW1lfWApO30KaGlzdG9ncmFtcy5hZGRTaGFyZWREaWFnbm9zdGljVG9BbGxIaXN0b2dyYW1zKG5hbWUsbmV3IHR5cGUodmFsdWUpKTt9fX0KZnVuY3Rpb24gbWV0cmljTWFwRnVuY3Rpb24ocmVzdWx0LG1vZGVsLG9wdGlvbnMpe2NvbnN0IGhpc3RvZ3JhbXM9cnVuTWV0cmljcyhtb2RlbCxvcHRpb25zLHJlc3VsdC5hZGRGYWlsdXJlLmJpbmQocmVzdWx0KSk7YWRkVGVsZW1ldHJ5SW5mbyhoaXN0b2dyYW1zLG1vZGVsKTtpZihtb2RlbC5jYW5vbmljYWxVcmwhPT11bmRlZmluZWQpe2NvbnN0IGluZm89dHIudi5kLlJFU0VSVkVEX0lORk9TLlRSQUNFX1VSTFM7aGlzdG9ncmFtcy5hZGRTaGFyZWREaWFnbm9zdGljVG9BbGxIaXN0b2dyYW1zKGluZm8ubmFtZSxuZXcgaW5mby50eXBlKFttb2RlbC5jYW5vbmljYWxVcmxdKSk7fQpyZXN1bHQuYWRkUGFpcignaGlzdG9ncmFtcycsaGlzdG9ncmFtcy5hc0RpY3RzKCkpO2NvbnN0IHNjYWxhckRpY3RzPVtdO2Zvcihjb25zdCB2YWx1ZSBvZiBoaXN0b2dyYW1zKXtmb3IoY29uc3Rbc3RhdE5hbWUsc2NhbGFyXW9mIHZhbHVlLnN0YXRpc3RpY3NTY2FsYXJzKXtzY2FsYXJEaWN0cy5wdXNoKHtuYW1lOnZhbHVlLm5hbWUrJ18nK3N0YXROYW1lLG51bWVyaWM6c2NhbGFyLmFzRGljdCgpLGRlc2NyaXB0aW9uOnZhbHVlLmRlc2NyaXB0aW9uLH0pO319CnJlc3VsdC5hZGRQYWlyKCdzY2FsYXJzJyxzY2FsYXJEaWN0cyk7fQp0ci5tcmUuRnVuY3Rpb25SZWdpc3RyeS5yZWdpc3RlcihtZXRyaWNNYXBGdW5jdGlvbik7cmV0dXJue21ldHJpY01hcEZ1bmN0aW9uLHJ1bk1ldHJpY3MsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLm1yZScsZnVuY3Rpb24oKXtjbGFzcyBNcmVSZXN1bHR7Y29uc3RydWN0b3IoZmFpbHVyZXMscGFpcnMpe2lmKGZhaWx1cmVzPT09dW5kZWZpbmVkKXtmYWlsdXJlcz1bXTt9CmlmKHBhaXJzPT09dW5kZWZpbmVkKXtwYWlycz17fTt9CnRoaXMuZmFpbHVyZXM9ZmFpbHVyZXM7dGhpcy5wYWlycz1wYWlyczt9CmFkZEZhaWx1cmUoZmFpbHVyZSl7dGhpcy5mYWlsdXJlcy5wdXNoKGZhaWx1cmUpO30KYWRkUGFpcihrZXksdmFsdWUpe2lmKGtleSBpbiB0aGlzLnBhaXJzKXt0aHJvdyBuZXcgRXJyb3IoJ0tleSAnK2tleSsnIGFscmVhZHkgZXhpc3RzIGluIHJlc3VsdC4nKTt9CnRoaXMucGFpcnNba2V5XT12YWx1ZTt9CmFzRGljdCgpe2NvbnN0IGQ9e3BhaXJzOnRoaXMucGFpcnN9O2lmKHRoaXMuZmFpbHVyZXMpe2QuZmFpbHVyZXM9dGhpcy5mYWlsdXJlcy5tYXAoZnVuY3Rpb24oZil7cmV0dXJuIGYuYXNEaWN0KCk7fSk7fQpyZXR1cm4gZDt9CmhhZEZhaWx1cmVzKCl7cmV0dXJuIHRoaXMuZmFpbHVyZXMubGVuZ3RoPjA7fQpzdGF0aWMgZnJvbURpY3QocmVzdWx0RGljdCl7Y29uc3QgZmFpbHVyZXM9KHJlc3VsdERpY3QuZmFpbHVyZXMhPT11bmRlZmluZWQpP3Jlc3VsdERpY3QuZmFpbHVyZXMubWFwKHRyLm1yZS5GYWlsdXJlLmZyb21EaWN0KTp1bmRlZmluZWQ7Y29uc3QgcGFpcnM9cmVzdWx0RGljdC5wYWlycztyZXR1cm4gbmV3IE1yZVJlc3VsdChmYWlsdXJlcyxwYWlycyk7fX0KcmV0dXJue01yZVJlc3VsdCx9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7Y2xhc3MgTnVsbEJydXNoaW5nU3RhdGVDb250cm9sbGVyIGV4dGVuZHMgdHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlcntjb25zdHJ1Y3Rvcigpe3N1cGVyKHVuZGVmaW5lZCk7dGhpcy5wYXJlbnRDb250cm9sbGVyPXVuZGVmaW5lZDt9CmRpc3BhdGNoQ2hhbmdlRXZlbnRfKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXRoaXMucGFyZW50Q29udHJvbGxlci5kaXNwYXRjaENoYW5nZUV2ZW50XygpO30KZ2V0IG1vZGVsKCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIubW9kZWw7fQpnZXQgdHJhY2tWaWV3KCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIudHJhY2tWaWV3O30KZ2V0IHZpZXdwb3J0KCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIudmlld3BvcnQ7fQpnZXQgaGlzdG9yeUVuYWJsZWQoKXtpZighdGhpcy5wYXJlbnRDb250cm9sbGVyKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucGFyZW50Q29udHJvbGxlci5oaXN0b3J5RW5hYmxlZDt9CnNldCBoaXN0b3J5RW5hYmxlZChoaXN0b3J5RW5hYmxlZCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuaGlzdG9yeUVuYWJsZWQ9aGlzdG9yeUVuYWJsZWQ7fX0KbW9kZWxXaWxsQ2hhbmdlKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXRoaXMucGFyZW50Q29udHJvbGxlci5tb2RlbFdpbGxDaGFuZ2UoKTt9Cm1vZGVsRGlkQ2hhbmdlKCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXRoaXMucGFyZW50Q29udHJvbGxlci5tb2RlbERpZENoYW5nZSgpO30Kb25Vc2VySW5pdGlhdGVkU2VsZWN0aW9uQ2hhbmdlXygpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLm9uVXNlckluaXRpYXRlZFNlbGVjdGlvbkNoYW5nZV8oKTt9fQpvblBvcFN0YXRlXyhlKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpdGhpcy5wYXJlbnRDb250cm9sbGVyLm9uUG9wU3RhdGVfKGUpO30KZ2V0IHNlbGVjdGlvbigpe2lmKCF0aGlzLnBhcmVudENvbnRyb2xsZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5wYXJlbnRDb250cm9sbGVyLnNlbGVjdGlvbjt9CmdldCBmaW5kTWF0Y2hlcygpe2lmKCF0aGlzLnBhcmVudENvbnRyb2xsZXIpcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5wYXJlbnRDb250cm9sbGVyLmZpbmRNYXRjaGVzO30KZ2V0IHNlbGVjdGlvbk9mSW50ZXJlc3QoKXtpZighdGhpcy5wYXJlbnRDb250cm9sbGVyKXJldHVybiB1bmRlZmluZWQ7cmV0dXJuIHRoaXMucGFyZW50Q29udHJvbGxlci5zZWxlY3Rpb25PZkludGVyZXN0O30KZ2V0IGN1cnJlbnRCcnVzaGluZ1N0YXRlKCl7aWYoIXRoaXMucGFyZW50Q29udHJvbGxlcilyZXR1cm4gdW5kZWZpbmVkO3JldHVybiB0aGlzLnBhcmVudENvbnRyb2xsZXIuY3VycmVudEJydXNoaW5nU3RhdGU7fQpzZXQgY3VycmVudEJydXNoaW5nU3RhdGUobmV3QnJ1c2hpbmdTdGF0ZSl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuY3VycmVudEJydXNoaW5nU3RhdGU9bmV3QnJ1c2hpbmdTdGF0ZTt9fQphZGRBbGxFdmVudHNNYXRjaGluZ0ZpbHRlclRvU2VsZWN0aW9uQXNUYXNrKGZpbHRlcixzZWxlY3Rpb24pe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmFkZEFsbEV2ZW50c01hdGNoaW5nRmlsdGVyVG9TZWxlY3Rpb25Bc1Rhc2soZmlsdGVyLHNlbGVjdGlvbik7fX0KZmluZFRleHRDaGFuZ2VkVG8oYWxsUG9zc2libGVNYXRjaGVzKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5maW5kVGV4dENoYW5nZWRUbyhhbGxQb3NzaWJsZU1hdGNoZXMpO319CmZpbmRGb2N1c0NoYW5nZWRUbyhjdXJyZW50Rm9jdXMpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmZpbmRGb2N1c0NoYW5nZWRUbyhjdXJyZW50Rm9jdXMpO319CmZpbmRUZXh0Q2xlYXJlZCgpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmZpbmRUZXh0Q2xlYXJlZCgpO319CnVpU3RhdGVGcm9tU3RyaW5nKHN0cmluZyl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIudWlTdGF0ZUZyb21TdHJpbmcoc3RyaW5nKTt9fQpuYXZUb1Bvc2l0aW9uKHVpU3RhdGUsc2hvd05hdkxpbmUpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLm5hdlRvUG9zaXRpb24odWlTdGF0ZSxzaG93TmF2TGluZSk7fX0KY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbGVjdGlvbil7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyKXt0aGlzLnBhcmVudENvbnRyb2xsZXIuY2hhbmdlU2VsZWN0aW9uRnJvbVRpbWVsaW5lKHNlbGVjdGlvbik7fX0Kc2hvd1NjcmlwdENvbnRyb2xTZWxlY3Rpb24oc2VsZWN0aW9uKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5zaG93U2NyaXB0Q29udHJvbFNlbGVjdGlvbihzZWxlY3Rpb24pO319CmNoYW5nZVNlbGVjdGlvbkZyb21SZXF1ZXN0U2VsZWN0aW9uQ2hhbmdlRXZlbnQoc2VsZWN0aW9uKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5jaGFuZ2VTZWxlY3Rpb25Gcm9tUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KHNlbGVjdGlvbik7fX0KY2hhbmdlQW5hbHlzaXNWaWV3UmVsYXRlZEV2ZW50cyhldmVudFNldCl7aWYodGhpcy5wYXJlbnRDb250cm9sbGVyJiYoZXZlbnRTZXQgaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudFNldCkpe3RoaXMucGFyZW50Q29udHJvbGxlci5jaGFuZ2VBbmFseXNpc1ZpZXdSZWxhdGVkRXZlbnRzKGV2ZW50U2V0KTt9fQpjaGFuZ2VBbmFseXNpc0xpbmtIb3ZlcmVkRXZlbnRzKGV2ZW50U2V0KXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXImJihldmVudFNldCBpbnN0YW5jZW9mIHRyLm1vZGVsLkV2ZW50U2V0KSl7dGhpcy5wYXJlbnRDb250cm9sbGVyLmNoYW5nZUFuYWx5c2lzTGlua0hvdmVyZWRFdmVudHMoZXZlbnRTZXQpO319CmdldFZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkKXtpZih0aGlzLnBhcmVudENvbnRyb2xsZXIpe3RoaXMucGFyZW50Q29udHJvbGxlci5nZXRWaWV3U3BlY2lmaWNCcnVzaGluZ1N0YXRlKHZpZXdJZCk7fX0KY2hhbmdlVmlld1NwZWNpZmljQnJ1c2hpbmdTdGF0ZSh2aWV3SWQsbmV3U3RhdGUpe2lmKHRoaXMucGFyZW50Q29udHJvbGxlcil7dGhpcy5wYXJlbnRDb250cm9sbGVyLmNoYW5nZVZpZXdTcGVjaWZpY0JydXNoaW5nU3RhdGUodmlld0lkLG5ld1N0YXRlKTt9fX0KcmV0dXJue051bGxCcnVzaGluZ1N0YXRlQ29udHJvbGxlcix9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudicsZnVuY3Rpb24oKXtjb25zdCBJR05PUkVfR1JPVVBJTkdfS0VZUz1bJ25hbWUnLCdzdG9yeVRhZ3MnLCd0ZXN0UGF0aCcsXTtjbGFzcyBDU1ZCdWlsZGVye2NvbnN0cnVjdG9yKGhpc3RvZ3JhbXMpe3RoaXMuaGlzdG9ncmFtc189aGlzdG9ncmFtczt0aGlzLnRhYmxlXz1bXTt0aGlzLnN0YXRpc3RpY3NOYW1lc189bmV3IFNldCgpO3RoaXMuZ3JvdXBpbmdzXz1bXTt9CmJ1aWxkKCl7dGhpcy5wcmVwYXJlXygpO3RoaXMuYnVpbGRIZWFkZXJfKCk7dGhpcy5idWlsZFRhYmxlXygpO30KcHJlcGFyZV8oKXtmb3IoY29uc3Rba2V5LGdyb3VwaW5nXW9mIHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuQllfS0VZKXtpZihJR05PUkVfR1JPVVBJTkdfS0VZUy5pbmNsdWRlcyhrZXkpKWNvbnRpbnVlO3RoaXMuZ3JvdXBpbmdzXy5wdXNoKGdyb3VwaW5nKTt9CnRoaXMuZ3JvdXBpbmdzXy5wdXNoKG5ldyB0ci52LkdlbmVyaWNTZXRHcm91cGluZyh0ci52LmQuUkVTRVJWRURfTkFNRVMuVFJBQ0VfVVJMUykpO3RoaXMuZ3JvdXBpbmdzXy5zb3J0KChhLGIpPT5hLmtleS5sb2NhbGVDb21wYXJlKGIua2V5KSk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcy5oaXN0b2dyYW1zXyl7Zm9yKGNvbnN0IG5hbWUgb2YgaGlzdC5zdGF0aXN0aWNzTmFtZXMpe3RoaXMuc3RhdGlzdGljc05hbWVzXy5hZGQobmFtZSk7fX0KdGhpcy5zdGF0aXN0aWNzTmFtZXNfPUFycmF5LmZyb20odGhpcy5zdGF0aXN0aWNzTmFtZXNfKTt0aGlzLnN0YXRpc3RpY3NOYW1lc18uc29ydCgpO30KYnVpbGRIZWFkZXJfKCl7Y29uc3QgaGVhZGVyPVsnbmFtZScsJ3VuaXQnXTtmb3IoY29uc3QgbmFtZSBvZiB0aGlzLnN0YXRpc3RpY3NOYW1lc18pe2hlYWRlci5wdXNoKG5hbWUpO30KZm9yKGNvbnN0IGdyb3VwaW5nIG9mIHRoaXMuZ3JvdXBpbmdzXyl7aGVhZGVyLnB1c2goZ3JvdXBpbmcua2V5KTt9CnRoaXMudGFibGVfLnB1c2goaGVhZGVyKTt9CmJ1aWxkVGFibGVfKCl7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcy5oaXN0b2dyYW1zXyl7Y29uc3Qgcm93PVtoaXN0Lm5hbWUsaGlzdC51bml0LnVuaXRTdHJpbmddO3RoaXMudGFibGVfLnB1c2gocm93KTtmb3IoY29uc3QgbmFtZSBvZiB0aGlzLnN0YXRpc3RpY3NOYW1lc18pe2NvbnN0IHN0YXQ9aGlzdC5nZXRTdGF0aXN0aWNTY2FsYXIobmFtZSk7aWYoc3RhdCl7cm93LnB1c2goc3RhdC52YWx1ZSk7fWVsc2V7cm93LnB1c2goJycpO319CmZvcihjb25zdCBncm91cGluZyBvZiB0aGlzLmdyb3VwaW5nc18pe3Jvdy5wdXNoKGdyb3VwaW5nLmNhbGxiYWNrKGhpc3QpKTt9fX0KdG9TdHJpbmcoKXtsZXQgc3RyPScnO2Zvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZV8pe2ZvcihsZXQgaT0wO2k8cm93Lmxlbmd0aDsrK2kpe2lmKGk+MCl7c3RyKz0nLCc7fQpsZXQgY2VsbD0nJytyb3dbaV07Y2VsbD1jZWxsLnJlcGxhY2UoL1xuL2csJyAnKTtpZihjZWxsLmluZGV4T2YoJywnKT49MHx8Y2VsbC5pbmRleE9mKCciJyk+PTApe2NlbGw9JyInK2NlbGwucmVwbGFjZSgvIi9nLCciIicpKyciJzt9CnN0cis9Y2VsbDt9CnN0cis9J1xuJzt9CnJldHVybiBzdHI7fX0KcmV0dXJue0NTVkJ1aWxkZXIsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYnLGZ1bmN0aW9uKCl7Y29uc3QgZ2V0RGlzcGxheUxhYmVsPXRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTC5jYWxsYmFjaztjb25zdCBERUZBVUxUX1BPU1NJQkxFX0dST1VQUz1bXTtjb25zdCBFWENMVURFRF9HUk9VUElOR19LRVlTPVt0ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLkRJU1BMQVlfTEFCRUwua2V5LF07Zm9yKGNvbnN0IGdyb3VwIG9mIHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuQllfS0VZLnZhbHVlcygpKXtpZihFWENMVURFRF9HUk9VUElOR19LRVlTLmluY2x1ZGVzKGdyb3VwLmtleSkpY29udGludWU7REVGQVVMVF9QT1NTSUJMRV9HUk9VUFMucHVzaChncm91cCk7fQpjbGFzcyBIaXN0b2dyYW1QYXJhbWV0ZXJDb2xsZWN0b3J7Y29uc3RydWN0b3IoKXt0aGlzLnN0YXRpc3RpY05hbWVzXz1uZXcgU2V0KFsnYXZnJ10pO3RoaXMubGFiZWxzVG9TdGFydFRpbWVzXz1uZXcgTWFwKCk7dGhpcy5rZXlzVG9Hcm91cGluZ3NfPW5ldyBNYXAoREVGQVVMVF9QT1NTSUJMRV9HUk9VUFMubWFwKGc9PltnLmtleSxnXSkpO3RoaXMua2V5c1RvVmFsdWVzXz1uZXcgTWFwKERFRkFVTFRfUE9TU0lCTEVfR1JPVVBTLm1hcChnPT5bZy5rZXksbmV3IFNldCgpXSkpO3RoaXMua2V5c1RvVmFsdWVzXy5kZWxldGUodHIudi5IaXN0b2dyYW1Hcm91cGluZy5ISVNUT0dSQU1fTkFNRS5rZXkpO30KcHJvY2VzcyhoaXN0b2dyYW1zKXtjb25zdCBhbGxTdG9yeVRhZ3M9bmV3IFNldCgpO2xldCBtYXhTYW1wbGVDb3VudD0wO2Zvcihjb25zdCBoaXN0IG9mIGhpc3RvZ3JhbXMpe21heFNhbXBsZUNvdW50PU1hdGgubWF4KG1heFNhbXBsZUNvdW50LGhpc3QubnVtVmFsdWVzKTtmb3IoY29uc3Qgc3RhdE5hbWUgb2YgaGlzdC5zdGF0aXN0aWNzTmFtZXMpe3RoaXMuc3RhdGlzdGljTmFtZXNfLmFkZChzdGF0TmFtZSk7fQpsZXQgc3RhcnRUaW1lPWhpc3QuZGlhZ25vc3RpY3MuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5CRU5DSE1BUktfU1RBUlQpO2lmKHN0YXJ0VGltZSE9PXVuZGVmaW5lZClzdGFydFRpbWU9c3RhcnRUaW1lLm1pbkRhdGUuZ2V0VGltZSgpO2NvbnN0IGRpc3BsYXlMYWJlbD1nZXREaXNwbGF5TGFiZWwoaGlzdCk7aWYodGhpcy5sYWJlbHNUb1N0YXJ0VGltZXNfLmhhcyhkaXNwbGF5TGFiZWwpKXtzdGFydFRpbWU9TWF0aC5taW4oc3RhcnRUaW1lLHRoaXMubGFiZWxzVG9TdGFydFRpbWVzXy5nZXQoZGlzcGxheUxhYmVsKSk7fQp0aGlzLmxhYmVsc1RvU3RhcnRUaW1lc18uc2V0KGRpc3BsYXlMYWJlbCxzdGFydFRpbWUpO2Zvcihjb25zdFtncm91cGluZ0tleSx2YWx1ZXNdb2YgdGhpcy5rZXlzVG9WYWx1ZXNfKXtjb25zdCBncm91cGluZz10aGlzLmtleXNUb0dyb3VwaW5nc18uZ2V0KGdyb3VwaW5nS2V5KTtjb25zdCB2YWx1ZT1ncm91cGluZy5jYWxsYmFjayhoaXN0KTtpZighdmFsdWUpY29udGludWU7dmFsdWVzLmFkZCh2YWx1ZSk7aWYodmFsdWVzLnNpemU+MSl7dGhpcy5rZXlzVG9WYWx1ZXNfLmRlbGV0ZShncm91cGluZ0tleSk7fX0KY29uc3Qgc3RvcnlUYWdzPWhpc3QuZGlhZ25vc3RpY3MuZ2V0KHRyLnYuZC5SRVNFUlZFRF9OQU1FUy5TVE9SWV9UQUdTKTtmb3IoY29uc3QgdGFnIG9mKHN0b3J5VGFnc3x8W10pKXthbGxTdG9yeVRhZ3MuYWRkKHRhZyk7fX0KdHIuYi5UaW1pbmcuaW5zdGFudCgnSGlzdG9ncmFtUGFyYW1ldGVyQ29sbGVjdG9yJywnbWF4U2FtcGxlQ291bnQnLG1heFNhbXBsZUNvdW50KTtmb3IoY29uc3QgdGFnR3JvdXBpbmcgb2YgdHIudi5IaXN0b2dyYW1Hcm91cGluZy5idWlsZEZyb21UYWdzKGFsbFN0b3J5VGFncyx0ci52LmQuUkVTRVJWRURfTkFNRVMuU1RPUllfVEFHUykpe2NvbnN0IHZhbHVlcz1uZXcgU2V0KCk7Zm9yKGNvbnN0IGhpc3Qgb2YgaGlzdG9ncmFtcyl7dmFsdWVzLmFkZCh0YWdHcm91cGluZy5jYWxsYmFjayhoaXN0KSk7fQppZih2YWx1ZXMuc2l6ZT4xKXt0aGlzLmtleXNUb0dyb3VwaW5nc18uc2V0KHRhZ0dyb3VwaW5nLmtleSx0YWdHcm91cGluZyk7dGhpcy5rZXlzVG9WYWx1ZXNfLnNldCh0YWdHcm91cGluZy5rZXksdmFsdWVzKTt9fQp0aGlzLnN0YXRpc3RpY05hbWVzXy5hZGQoJ3BjdF8wOTAnKTt9CmdldCBzdGF0aXN0aWNOYW1lcygpe3JldHVybiBBcnJheS5mcm9tKHRoaXMuc3RhdGlzdGljTmFtZXNfKTt9CmdldCBsYWJlbHMoKXtjb25zdCBkaXNwbGF5TGFiZWxzPUFycmF5LmZyb20odGhpcy5sYWJlbHNUb1N0YXJ0VGltZXNfLmtleXMoKSk7ZGlzcGxheUxhYmVscy5zb3J0KCh4LHkpPT50aGlzLmxhYmVsc1RvU3RhcnRUaW1lc18uZ2V0KHgpLXRoaXMubGFiZWxzVG9TdGFydFRpbWVzXy5nZXQoeSkpO3JldHVybiBkaXNwbGF5TGFiZWxzO30KZ2V0IHBvc3NpYmxlR3JvdXBpbmdzKCl7Zm9yKGNvbnN0W2tleSx2YWx1ZXNdb2YgdGhpcy5rZXlzVG9WYWx1ZXNfKXtpZih2YWx1ZXMuc2l6ZT49Miljb250aW51ZTt0aGlzLmtleXNUb0dyb3VwaW5nc18uZGVsZXRlKGtleSk7fQpyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLmtleXNUb0dyb3VwaW5nc18udmFsdWVzKCkpO319CnJldHVybntIaXN0b2dyYW1QYXJhbWV0ZXJDb2xsZWN0b3IsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scy1leHBvcnQnLGV4cG9ydFJhd0Nzdl8oKXt0aGlzLmV4cG9ydF8oZmFsc2UsJ2NzdicpO30sZXhwb3J0UmF3SnNvbl8oKXt0aGlzLmV4cG9ydF8oZmFsc2UsJ2pzb24nKTt9LGV4cG9ydE1lcmdlZENzdl8oKXt0aGlzLmV4cG9ydF8odHJ1ZSwnY3N2Jyk7fSxleHBvcnRNZXJnZWRKc29uXygpe3RoaXMuZXhwb3J0Xyh0cnVlLCdqc29uJyk7fSxleHBvcnRfKG1lcmdlZCxmb3JtYXQpe3RyLmIuZGlzcGF0Y2hTaW1wbGVFdmVudCh0aGlzLCdleHBvcnQnLHRydWUsdHJ1ZSx7bWVyZ2VkLGZvcm1hdH0pO30sfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2NvbnN0IEFMUEhBX09QVElPTlM9W107Zm9yKGxldCBpPTE7aTwxMDsrK2kpQUxQSEFfT1BUSU9OUy5wdXNoKGkqMWUtMyk7Zm9yKGxldCBpPTE7aTwxMDsrK2kpQUxQSEFfT1BUSU9OUy5wdXNoKGkqMWUtMik7QUxQSEFfT1BUSU9OUy5wdXNoKDAuMSk7UG9seW1lcih7aXM6J3RyLXYtdWktaGlzdG9ncmFtLXNldC1jb250cm9scycscHJvcGVydGllczp7c2VhcmNoUXVlcnk6e3R5cGU6U3RyaW5nLHZhbHVlOicnLG9ic2VydmVyOidvblNlYXJjaFF1ZXJ5Q2hhbmdlXycsfSxzaG93QWxsOnt0eXBlOkJvb2xlYW4sdmFsdWU6dHJ1ZSxvYnNlcnZlcjonb25Vc2VyQ2hhbmdlXycsfSxyZWZlcmVuY2VEaXNwbGF5TGFiZWw6e3R5cGU6U3RyaW5nLHZhbHVlOicnLG9ic2VydmVyOidvblVzZXJDaGFuZ2VfJyx9LGRpc3BsYXlTdGF0aXN0aWNOYW1lOnt0eXBlOlN0cmluZyx2YWx1ZTonJyxvYnNlcnZlcjonb25Vc2VyQ2hhbmdlXycsfSxhbHBoYVN0cmluZzp7dHlwZTpTdHJpbmcsY29tcHV0ZWQ6J2dldEFscGhhU3RyaW5nXyhhbHBoYUluZGV4KScsfSxhbHBoYUluZGV4Ont0eXBlOk51bWJlcix2YWx1ZTo5LG9ic2VydmVyOidvblVzZXJDaGFuZ2VfJyx9LH0sY3JlYXRlZCgpe3RoaXMudmlld1N0YXRlXz11bmRlZmluZWQ7dGhpcy5yb3dMaXN0ZW5lcl89dGhpcy5vblJvd1ZpZXdTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKTt0aGlzLmJhc2VTdGF0aXN0aWNOYW1lc189W107dGhpcy5pc0luT25WaWV3U3RhdGVVcGRhdGVfPWZhbHNlO3RoaXMuc2VhcmNoUXVlcnlEZWJvdW5jZU1zPTIwMDt9LHJlYWR5KCl7dGhpcy4kLnBpY2tlci5hZGRFdmVudExpc3RlbmVyKCdjdXJyZW50LWdyb3Vwcy1jaGFuZ2VkJyx0aGlzLm9uR3JvdXBzQ2hhbmdlZF8uYmluZCh0aGlzKSk7fSxnZXQgdmlld1N0YXRlKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlXzt9LHNldCB2aWV3U3RhdGUodnMpe2lmKHRoaXMudmlld1N0YXRlXyl7dGhyb3cgbmV3IEVycm9yKCd2aWV3U3RhdGUgbXVzdCBiZSBzZXQgZXhhY3RseSBvbmNlLicpO30KdGhpcy52aWV3U3RhdGVfPXZzO3RoaXMudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25WaWV3U3RhdGVVcGRhdGVfLmJpbmQodGhpcykpO30sYXN5bmMgb25TZWFyY2hRdWVyeUNoYW5nZV8oKXtpZih0aGlzLnNlYXJjaFF1ZXJ5RGVib3VuY2VNcz09PTApcmV0dXJuIHRoaXMub25Vc2VyQ2hhbmdlXygpO3RoaXMuZGVib3VuY2UoJ29uU2VhcmNoUXVlcnlEZWJvdW5jZScsdGhpcy5vblVzZXJDaGFuZ2VfLHRoaXMuc2VhcmNoUXVlcnlEZWJvdW5jZU1zKTt9LGFzeW5jIG9uVXNlckNoYW5nZV8oKXtpZighdGhpcy52aWV3U3RhdGUpcmV0dXJuO2lmKHRoaXMuaXNJbk9uVmlld1N0YXRlVXBkYXRlXylyZXR1cm47Y29uc3QgbWFya3M9W107aWYodGhpcy5zZWFyY2hRdWVyeSE9PXRoaXMudmlld1N0YXRlLnNlYXJjaFF1ZXJ5KXttYXJrcy5wdXNoKHRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtY29udHJvbHMnLCdzZWFyY2gnKSk7fQppZih0aGlzLnNob3dBbGwhPT10aGlzLnZpZXdTdGF0ZS5zaG93QWxsKXttYXJrcy5wdXNoKHRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtY29udHJvbHMnLCdzaG93QWxsJykpO30KaWYodGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWwhPT10aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwpe21hcmtzLnB1c2godHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC1jb250cm9scycsJ3JlZmVyZW5jZUNvbHVtbicpKTt9CmlmKHRoaXMuZGlzcGxheVN0YXRpc3RpY05hbWUhPT10aGlzLnZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSl7bWFya3MucHVzaCh0ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc2V0LWNvbnRyb2xzJywnc3RhdGlzdGljJykpO30KaWYocGFyc2VJbnQodGhpcy5hbHBoYUluZGV4KSE9PXRoaXMuZ2V0QWxwaGFJbmRleEZyb21WaWV3U3RhdGVfKCkpe21hcmtzLnB1c2godHIuYi5UaW1pbmcubWFyaygnaGlzdG9ncmFtLXNldC1jb250cm9scycsJ2FscGhhJykpO30KdGhpcy4kLmNsZWFyX3NlYXJjaC5zdHlsZS52aXNpYmlsaXR5PXRoaXMuc2VhcmNoUXVlcnk/J3Zpc2libGUnOidoaWRkZW4nO2xldCBkaXNwbGF5U3RhdGlzdGljTmFtZT10aGlzLmRpc3BsYXlTdGF0aXN0aWNOYW1lO2lmKHRoaXMudmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbD09PScnJiZ0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbCE9PScnJiZ0aGlzLmJhc2VTdGF0aXN0aWNOYW1lcy5sZW5ndGgpe2Rpc3BsYXlTdGF0aXN0aWNOYW1lPWAlJHt0ci52LkRFTFRBfSR7dGhpcy5kaXNwbGF5U3RhdGlzdGljTmFtZX1gO30KaWYodGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWw9PT0nJyYmdGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsIT09JycmJnRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmxlbmd0aCl7Y29uc3QgZGVsdGFJbmRleD1kaXNwbGF5U3RhdGlzdGljTmFtZS5pbmRleE9mKHRyLnYuREVMVEEpO2lmKGRlbHRhSW5kZXg+PTApe2Rpc3BsYXlTdGF0aXN0aWNOYW1lPWRpc3BsYXlTdGF0aXN0aWNOYW1lLnNsaWNlKGRlbHRhSW5kZXgrMSk7fWVsc2UgaWYoIXRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmluY2x1ZGVzKGRpc3BsYXlTdGF0aXN0aWNOYW1lKSl7ZGlzcGxheVN0YXRpc3RpY05hbWU9J2F2Zyc7fX0KYXdhaXQgdGhpcy52aWV3U3RhdGUudXBkYXRlKHtzZWFyY2hRdWVyeTp0aGlzLnNlYXJjaFF1ZXJ5LHNob3dBbGw6dGhpcy5zaG93QWxsLHJlZmVyZW5jZURpc3BsYXlMYWJlbDp0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbCxkaXNwbGF5U3RhdGlzdGljTmFtZSxhbHBoYTpBTFBIQV9PUFRJT05TW3RoaXMuYWxwaGFJbmRleF0sfSk7aWYodGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWwmJnRoaXMuc3RhdGlzdGljTmFtZXMubGVuZ3RoPT09dGhpcy5iYXNlU3RhdGlzdGljTmFtZXMubGVuZ3RoKXt0aGlzLnN0YXRpc3RpY05hbWVzPXRoaXMuYmFzZVN0YXRpc3RpY05hbWVzLmNvbmNhdCh0ci52Lkhpc3RvZ3JhbS5nZXREZWx0YVN0YXRpc3RpY3NOYW1lcyh0aGlzLmJhc2VTdGF0aXN0aWNOYW1lcykpO31lbHNlIGlmKCF0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbCYmdGhpcy5zdGF0aXN0aWNOYW1lcy5sZW5ndGg+dGhpcy5iYXNlU3RhdGlzdGljTmFtZXMubGVuZ3RoKXt0aGlzLnN0YXRpc3RpY05hbWVzPXRoaXMuYmFzZVN0YXRpc3RpY05hbWVzO30KZm9yKGNvbnN0IG1hcmsgb2YgbWFya3MpbWFyay5lbmQoKTt9LG9uVmlld1N0YXRlVXBkYXRlXyhldmVudCl7dGhpcy5pc0luT25WaWV3U3RhdGVVcGRhdGVfPXRydWU7aWYoZXZlbnQuZGVsdGEuc2VhcmNoUXVlcnkpe3RoaXMuc2VhcmNoUXVlcnk9dGhpcy52aWV3U3RhdGUuc2VhcmNoUXVlcnk7fQppZihldmVudC5kZWx0YS5zaG93QWxsKXRoaXMuc2hvd0FsbD10aGlzLnZpZXdTdGF0ZS5zaG93QWxsO2lmKGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWNOYW1lKXt0aGlzLmRpc3BsYXlTdGF0aXN0aWNOYW1lPXRoaXMudmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lO30KaWYoZXZlbnQuZGVsdGEucmVmZXJlbmNlRGlzcGxheUxhYmVsKXt0aGlzLnJlZmVyZW5jZURpc3BsYXlMYWJlbD10aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWw7dGhpcy4kLmFscGhhLnN0eWxlLmRpc3BsYXk9dGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWw/J2lubGluZSc6Jyc7fQppZihldmVudC5kZWx0YS5ncm91cGluZ3Mpe3RoaXMuJC5waWNrZXIuY3VycmVudEdyb3VwS2V5cz10aGlzLnZpZXdTdGF0ZS5ncm91cGluZ3MubWFwKGc9Pmcua2V5KTt9CmlmKGV2ZW50LmRlbHRhLnRhYmxlUm93U3RhdGVzKXtmb3IoY29uc3Qgcm93IG9mIHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZS53YWxrQWxsKHRoaXMudmlld1N0YXRlLnRhYmxlUm93U3RhdGVzLnZhbHVlcygpKSl7cm93LmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMucm93TGlzdGVuZXJfKTt9CmNvbnN0IGFueVNob3dpbmc9dGhpcy5hbnlPdmVydmlld0NoYXJ0c187dGhpcy4kLmhpZGVfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1hbnlTaG93aW5nPydpbmxpbmUnOidub25lJzt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PWFueVNob3dpbmc/J25vbmUnOidpbmxpbmUnO30KaWYoZXZlbnQuZGVsdGEuYWxwaGEpe3RoaXMuYWxwaGFJbmRleD10aGlzLmdldEFscGhhSW5kZXhGcm9tVmlld1N0YXRlXygpO30KdGhpcy5pc0luT25WaWV3U3RhdGVVcGRhdGVfPWZhbHNlO3RoaXMub25Vc2VyQ2hhbmdlXygpO30sb25Sb3dWaWV3U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5pc092ZXJ2aWV3ZWQpe2NvbnN0IGFueVNob3dpbmc9ZXZlbnQuZGVsdGEuaXNPdmVydmlld2VkLmN1cnJlbnR8fHRoaXMuYW55T3ZlcnZpZXdDaGFydHNfO3RoaXMuJC5oaWRlX292ZXJ2aWV3LnN0eWxlLmRpc3BsYXk9YW55U2hvd2luZz8naW5saW5lJzonbm9uZSc7dGhpcy4kLnNob3dfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1hbnlTaG93aW5nPydub25lJzonaW5saW5lJzt9CmlmKGV2ZW50LmRlbHRhLnN1YlJvd3Mpe2Zvcihjb25zdCBzdWJSb3cgb2YgZXZlbnQuZGVsdGEuc3ViUm93cy5wcmV2aW91cyl7c3ViUm93LnJlbW92ZVVwZGF0ZUxpc3RlbmVyKHRoaXMucm93TGlzdGVuZXJfKTt9CmZvcihjb25zdCBzdWJSb3cgb2YgZXZlbnQuZGVsdGEuc3ViUm93cy5jdXJyZW50KXtzdWJSb3cuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb3dMaXN0ZW5lcl8pO319fSxvbkdyb3Vwc0NoYW5nZWRfKCl7aWYodGhpcy4kLnBpY2tlci5jdXJyZW50R3JvdXBzLmxlbmd0aD09PTAmJnRoaXMuJC5waWNrZXIucG9zc2libGVHcm91cHMubGVuZ3RoPjApe3RoaXMuJC5waWNrZXIuY3VycmVudEdyb3VwS2V5cz1bdGhpcy4kLnBpY2tlci5wb3NzaWJsZUdyb3Vwc1swXS5rZXldO30KdGhpcy52aWV3U3RhdGUuZ3JvdXBpbmdzPXRoaXMuJC5waWNrZXIuY3VycmVudEdyb3Vwczt9LHNldCBzaG93QWxsRW5hYmxlZChlbmFibGUpe2lmKCFlbmFibGUpdGhpcy4kLnNob3dfYWxsLmNoZWNrZWQ9dHJ1ZTt0aGlzLiQuc2hvd19hbGwuZGlzYWJsZWQ9IWVuYWJsZTt9LHNldCBwb3NzaWJsZUdyb3VwaW5ncyhncm91cGluZ3Mpe3RoaXMuJC5waWNrZXIucG9zc2libGVHcm91cHM9Z3JvdXBpbmdzO3RoaXMuJC5waWNrZXIuc3R5bGUuZGlzcGxheT0oZ3JvdXBpbmdzLmxlbmd0aDwyKT8nbm9uZSc6J2Jsb2NrJzt0aGlzLm9uR3JvdXBzQ2hhbmdlZF8oKTt9LHNldCBkaXNwbGF5TGFiZWxzKGxhYmVscyl7dGhpcy4kLnJlZmVyZW5jZV9kaXNwbGF5X2xhYmVsLnN0eWxlLmRpc3BsYXk9KGxhYmVscy5sZW5ndGg8Mik/J25vbmUnOidpbmxpbmUnO3doaWxlKHRoaXMuJC5yZWZlcmVuY2VfZGlzcGxheV9sYWJlbC5jaGlsZHJlbi5sZW5ndGg+MSl7dGhpcy4kLnJlZmVyZW5jZV9kaXNwbGF5X2xhYmVsLnJlbW92ZUNoaWxkKHRoaXMuJC5yZWZlcmVuY2VfZGlzcGxheV9sYWJlbC5sYXN0Q2hpbGQpO30KZm9yKGNvbnN0IGRpc3BsYXlMYWJlbCBvZiBsYWJlbHMpe2NvbnN0IG9wdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtvcHRpb24udGV4dENvbnRlbnQ9ZGlzcGxheUxhYmVsO29wdGlvbi52YWx1ZT1kaXNwbGF5TGFiZWw7dGhpcy4kLnJlZmVyZW5jZV9kaXNwbGF5X2xhYmVsLmFwcGVuZENoaWxkKG9wdGlvbik7fQppZihsYWJlbHMuaW5jbHVkZXModGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsKSl7dGhpcy5yZWZlcmVuY2VEaXNwbGF5TGFiZWw9dGhpcy52aWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsO31lbHNle3RoaXMudmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbD0nJzt9fSxnZXQgYmFzZVN0YXRpc3RpY05hbWVzKCl7cmV0dXJuIHRoaXMuYmFzZVN0YXRpc3RpY05hbWVzXzt9LHNldCBiYXNlU3RhdGlzdGljTmFtZXMobmFtZXMpe3RoaXMuYmFzZVN0YXRpc3RpY05hbWVzXz1uYW1lczt0aGlzLnN0YXRpc3RpY05hbWVzPW5hbWVzO30sZ2V0IHN0YXRpc3RpY05hbWVzKCl7cmV0dXJuIEFycmF5LmZyb20odGhpcy4kLnN0YXRpc3RpYy5vcHRpb25zKS5tYXAobz0+by52YWx1ZSk7fSxzZXQgc3RhdGlzdGljTmFtZXMobmFtZXMpe3RoaXMuJC5zdGF0aXN0aWMuc3R5bGUuZGlzcGxheT0obmFtZXMubGVuZ3RoPDIpPydub25lJzonaW5saW5lJzt3aGlsZSh0aGlzLiQuc3RhdGlzdGljLmNoaWxkcmVuLmxlbmd0aCl7dGhpcy4kLnN0YXRpc3RpYy5yZW1vdmVDaGlsZCh0aGlzLiQuc3RhdGlzdGljLmxhc3RDaGlsZCk7fQpmb3IoY29uc3QgbmFtZSBvZiBuYW1lcyl7Y29uc3Qgb3B0aW9uPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ29wdGlvbicpO29wdGlvbi50ZXh0Q29udGVudD1uYW1lO3RoaXMuJC5zdGF0aXN0aWMuYXBwZW5kQ2hpbGQob3B0aW9uKTt9CmlmKG5hbWVzLmluY2x1ZGVzKHRoaXMudmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lKSl7dGhpcy5kaXNwbGF5U3RhdGlzdGljTmFtZT10aGlzLnZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZTt0aGlzLiQuc3RhdGlzdGljLnZhbHVlPXRoaXMuZGlzcGxheVN0YXRpc3RpY05hbWU7fWVsc2V7dGhpcy52aWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWU9bmFtZXNbMF18fCcnO319LGdldCBhbnlPdmVydmlld0NoYXJ0c18oKXtmb3IoY29uc3Qgcm93IG9mIHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZS53YWxrQWxsKHRoaXMudmlld1N0YXRlLnRhYmxlUm93U3RhdGVzLnZhbHVlcygpKSl7aWYocm93LmlzT3ZlcnZpZXdlZClyZXR1cm4gdHJ1ZTt9CnJldHVybiBmYWxzZTt9LGFzeW5jIHRvZ2dsZU92ZXJ2aWV3TGluZUNoYXJ0c18oKXtjb25zdCBzaG93T3ZlcnZpZXdzPSF0aGlzLmFueU92ZXJ2aWV3Q2hhcnRzXztjb25zdCBtYXJrPXRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtY29udHJvbHMnLChzaG93T3ZlcnZpZXdzPydzaG93JzonaGlkZScpKydPdmVydmlld0NoYXJ0cycpO2Zvcihjb25zdCByb3cgb2YgdHIudi51aS5IaXN0b2dyYW1TZXRUYWJsZVJvd1N0YXRlLndhbGtBbGwodGhpcy52aWV3U3RhdGUudGFibGVSb3dTdGF0ZXMudmFsdWVzKCkpKXthd2FpdCByb3cudXBkYXRlKHtpc092ZXJ2aWV3ZWQ6c2hvd092ZXJ2aWV3c30pO30KdGhpcy4kLmhpZGVfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT1zaG93T3ZlcnZpZXdzPydpbmxpbmUnOidub25lJzt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PXNob3dPdmVydmlld3M/J25vbmUnOidpbmxpbmUnO2F3YWl0IHRyLmIuYW5pbWF0aW9uRnJhbWUoKTttYXJrLmVuZCgpO30sc2V0IGhlbHBIcmVmKGhyZWYpe3RoaXMuJC5oZWxwLmhyZWY9aHJlZjt0aGlzLiQuaGVscC5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO30sc2V0IGZlZWRiYWNrSHJlZihocmVmKXt0aGlzLiQuZmVlZGJhY2suaHJlZj1ocmVmO3RoaXMuJC5mZWVkYmFjay5zdHlsZS5kaXNwbGF5PSdpbmxpbmUnO30sY2xlYXJTZWFyY2hfKCl7dGhpcy5zZXQoJ3NlYXJjaFF1ZXJ5JywnJyk7dGhpcy4kLnNlYXJjaC5mb2N1cygpO30sZ2V0QWxwaGFTdHJpbmdfKGFscGhhSW5kZXgpe3JldHVybignJytBTFBIQV9PUFRJT05TW2FscGhhSW5kZXhdKS5zdWJzdHIoMCw1KTt9LG9wZW5BbHBoYVNsaWRlcl8oKXtjb25zdCBhbHBoYUJ1dHRvblJlY3Q9dGhpcy4kLmFscGhhLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpO3RoaXMuJC5hbHBoYV9zbGlkZXJfY29udGFpbmVyLnN0eWxlLmRpc3BsYXk9J2ZsZXgnO3RoaXMuJC5hbHBoYV9zbGlkZXJfY29udGFpbmVyLnN0eWxlLnRvcD1hbHBoYUJ1dHRvblJlY3QuYm90dG9tKydweCc7dGhpcy4kLmFscGhhX3NsaWRlcl9jb250YWluZXIuc3R5bGUubGVmdD1hbHBoYUJ1dHRvblJlY3QubGVmdCsncHgnO3RoaXMuJC5hbHBoYV9zbGlkZXIuZm9jdXMoKTt9LGNsb3NlQWxwaGFTbGlkZXJfKCl7dGhpcy4kLmFscGhhX3NsaWRlcl9jb250YWluZXIuc3R5bGUuZGlzcGxheT0nJzt9LHVwZGF0ZUFscGhhXygpe3RoaXMuYWxwaGFJbmRleD10aGlzLiQuYWxwaGFfc2xpZGVyLnZhbHVlO30sZ2V0QWxwaGFJbmRleEZyb21WaWV3U3RhdGVfKCl7Zm9yKGxldCBpPTA7aTxBTFBIQV9PUFRJT05TLmxlbmd0aDsrK2kpe2lmKEFMUEhBX09QVElPTlNbaV0+PXRoaXMudmlld1N0YXRlLmFscGhhKXJldHVybiBpO30KcmV0dXJuIEFMUEhBX09QVElPTlMubGVuZ3RoLTE7fSxzZXQgZW5hYmxlVmlzdWFsaXphdGlvbihlbmFibGUpe3RoaXMuJC5zaG93X3Zpc3VhbGl6YXRpb24uc3R5bGUuZGlzcGxheT1lbmFibGU/J2lubGluZSc6J25vbmUnO30sbG9hZFZpc3VhbGl6YXRpb25fKCl7dHIuYi5kaXNwYXRjaFNpbXBsZUV2ZW50KHRoaXMsJ2xvYWRWaXN1YWxpemF0aW9uJyx0cnVlLHRydWUse30pO30sfSk7cmV0dXJue307fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52JyxmdW5jdGlvbigpe2NsYXNzIEhpc3RvZ3JhbVNldEhpZXJhcmNoeXtjb25zdHJ1Y3RvcihuYW1lKXt0aGlzLm5hbWU9bmFtZTt0aGlzLmRlc2NyaXB0aW9uPScnO3RoaXMuZGVwdGg9MDt0aGlzLnN1YlJvd3M9W107dGhpcy5jb2x1bW5zPW5ldyBNYXAoKTt9KndhbGsoKXt5aWVsZCB0aGlzO2Zvcihjb25zdCByb3cgb2YgdGhpcy5zdWJSb3dzKXlpZWxkKnJvdy53YWxrKCk7fQpzdGF0aWMqd2Fsa0FsbChyb290Um93cyl7Zm9yKGNvbnN0IHJvb3RSb3cgb2Ygcm9vdFJvd3MpeWllbGQqcm9vdFJvdy53YWxrKCk7fQpzdGF0aWMgYnVpbGQoaGlzdG9ncmFtQXJyYXlNYXApe2NvbnN0IHJvb3RSb3dzPVtdO0hpc3RvZ3JhbVNldEhpZXJhcmNoeS5idWlsZEludGVybmFsXyhoaXN0b2dyYW1BcnJheU1hcCxbXSxyb290Um93cyk7Y29uc3QgaGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoKTtmb3IoY29uc3Qgcm93IG9mIEhpc3RvZ3JhbVNldEhpZXJhcmNoeS53YWxrQWxsKHJvb3RSb3dzKSl7Zm9yKGNvbnN0IGhpc3Qgb2Ygcm93LmNvbHVtbnMudmFsdWVzKCkpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtoaXN0b2dyYW1zLmFkZEhpc3RvZ3JhbShoaXN0KTt9fQpoaXN0b2dyYW1zLmRlZHVwbGljYXRlRGlhZ25vc3RpY3MoKTtmb3IoY29uc3Qgcm93IG9mIEhpc3RvZ3JhbVNldEhpZXJhcmNoeS53YWxrQWxsKHJvb3RSb3dzKSl7cm93Lm1heWJlUmViaW5fKCk7fQpyZXR1cm4gcm9vdFJvd3M7fQptYXliZVJlYmluXygpe2NvbnN0IGRhdGFSYW5nZT1uZXcgdHIuYi5tYXRoLlJhbmdlKCk7Zm9yKGNvbnN0IGhpc3Qgb2YgdGhpcy5jb2x1bW5zLnZhbHVlcygpKXtpZighKGhpc3QgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpY29udGludWU7aWYoaGlzdC5hbGxCaW5zLmxlbmd0aD4xKXJldHVybjtpZihoaXN0Lm51bVZhbHVlcz09PTApY29udGludWU7ZGF0YVJhbmdlLmFkZFZhbHVlKGhpc3QubWluKTtkYXRhUmFuZ2UuYWRkVmFsdWUoaGlzdC5tYXgpO30KZGF0YVJhbmdlLmFkZFZhbHVlKHRyLmIubWF0aC5sZXNzZXJXaG9sZU51bWJlcihkYXRhUmFuZ2UubWluKSk7ZGF0YVJhbmdlLmFkZFZhbHVlKHRyLmIubWF0aC5ncmVhdGVyV2hvbGVOdW1iZXIoZGF0YVJhbmdlLm1heCkpO2lmKGRhdGFSYW5nZS5taW49PT1kYXRhUmFuZ2UubWF4KXJldHVybjtjb25zdCBib3VuZGFyaWVzPXRyLnYuSGlzdG9ncmFtQmluQm91bmRhcmllcy5jcmVhdGVMaW5lYXIoZGF0YVJhbmdlLm1pbixkYXRhUmFuZ2UubWF4LHRyLnYuREVGQVVMVF9SRUJJTk5FRF9DT1VOVCk7Zm9yKGNvbnN0W25hbWUsaGlzdF1vZiB0aGlzLmNvbHVtbnMpe2lmKCEoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTt0aGlzLmNvbHVtbnMuc2V0KG5hbWUsaGlzdC5yZWJpbihib3VuZGFyaWVzKSk7fX0Kc3RhdGljIG1lcmdlSGlzdG9ncmFtRG93bkhpZXJhcmNoeV8oaGlzdG9ncmFtLGhpZXJhcmNoeSxjb2x1bW5OYW1lKXtmb3IoY29uc3Qgcm93IG9mIGhpZXJhcmNoeSl7aWYoIXJvdy5kZXNjcmlwdGlvbil7cm93LmRlc2NyaXB0aW9uPWhpc3RvZ3JhbS5kZXNjcmlwdGlvbjt9CmNvbnN0IGV4aXN0aW5nPXJvdy5jb2x1bW5zLmdldChjb2x1bW5OYW1lKTtpZihleGlzdGluZz09PXVuZGVmaW5lZCl7cm93LmNvbHVtbnMuc2V0KGNvbHVtbk5hbWUsaGlzdG9ncmFtLmNsb25lKCkpO2NvbnRpbnVlO30KaWYoZXhpc3RpbmcgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbVNldCl7ZXhpc3RpbmcuYWRkSGlzdG9ncmFtKGhpc3RvZ3JhbSk7Y29udGludWU7fQppZighZXhpc3RpbmcuY2FuQWRkSGlzdG9ncmFtKGhpc3RvZ3JhbSkpe2NvbnN0IHVubWVyZ2VhYmxlSGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoW2hpc3RvZ3JhbV0pO3Jvdy5jb2x1bW5zLnNldChjb2x1bW5OYW1lLHVubWVyZ2VhYmxlSGlzdG9ncmFtcyk7Y29udGludWU7fQpleGlzdGluZy5hZGRIaXN0b2dyYW0oaGlzdG9ncmFtKTt9fQpzdGF0aWMgYnVpbGRJbnRlcm5hbF8oaGlzdG9ncmFtQXJyYXlNYXAsaGllcmFyY2h5LHJvb3RSb3dzKXtmb3IoY29uc3RbbmFtZSxoaXN0b2dyYW1zXW9mIGhpc3RvZ3JhbUFycmF5TWFwKXtpZihoaXN0b2dyYW1zIGluc3RhbmNlb2YgQXJyYXkpe2Zvcihjb25zdCBoaXN0b2dyYW0gb2YgaGlzdG9ncmFtcyl7SGlzdG9ncmFtU2V0SGllcmFyY2h5Lm1lcmdlSGlzdG9ncmFtRG93bkhpZXJhcmNoeV8oaGlzdG9ncmFtLGhpZXJhcmNoeSxuYW1lKTt9fWVsc2UgaWYoaGlzdG9ncmFtcyBpbnN0YW5jZW9mIE1hcCl7Y29uc3Qgcm93PW5ldyBIaXN0b2dyYW1TZXRIaWVyYXJjaHkobmFtZSk7cm93LmRlcHRoPWhpZXJhcmNoeS5sZW5ndGg7aGllcmFyY2h5LnB1c2gocm93KTtIaXN0b2dyYW1TZXRIaWVyYXJjaHkuYnVpbGRJbnRlcm5hbF8oaGlzdG9ncmFtcyxoaWVyYXJjaHkscm9vdFJvd3MpO2hpZXJhcmNoeS5wb3AoKTtpZihoaWVyYXJjaHkubGVuZ3RoPT09MCl7cm9vdFJvd3MucHVzaChyb3cpO31lbHNle2NvbnN0IHBhcmVudFJvdz1oaWVyYXJjaHlbaGllcmFyY2h5Lmxlbmd0aC0xXTtwYXJlbnRSb3cuc3ViUm93cy5wdXNoKHJvdyk7fX19fX0KcmV0dXJue0hpc3RvZ3JhbVNldEhpZXJhcmNoeX07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUtY2VsbCcsY3JlYXRlZCgpe3RoaXMudmlld1N0YXRlXz11bmRlZmluZWQ7dGhpcy5yb290TGlzdGVuZXJfPXRoaXMub25Sb290U3RhdGVVcGRhdGVfLmJpbmQodGhpcyk7dGhpcy5yb3dfPXVuZGVmaW5lZDt0aGlzLmRpc3BsYXlMYWJlbF89Jyc7dGhpcy5oaXN0b2dyYW1fPXVuZGVmaW5lZDt0aGlzLmhpc3RvZ3JhbVNwYW5fPXVuZGVmaW5lZDt0aGlzLm92ZXJ2aWV3Q2hhcnRfPXVuZGVmaW5lZDt0aGlzLm13dVJlc3VsdF89dW5kZWZpbmVkO30scmVhZHkoKXt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJyx0aGlzLm9uQ2xpY2tfLmJpbmQodGhpcykpO30sYXR0YWNoZWQoKXtpZih0aGlzLnJvdyl7dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RMaXN0ZW5lcl8pO319LGRldGFjaGVkKCl7dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5yZW1vdmVVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RMaXN0ZW5lcl8pO30sdXBkYXRlTXd1Xygpe2NvbnN0IHJlZmVyZW5jZUhpc3RvZ3JhbT10aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbTt0aGlzLm13dVJlc3VsdF89dW5kZWZpbmVkO2lmKCEodGhpcy5oaXN0b2dyYW0gaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpcmV0dXJuO2lmKCF0aGlzLmhpc3RvZ3JhbS5jYW5Db21wYXJlKHJlZmVyZW5jZUhpc3RvZ3JhbSkpcmV0dXJuO3RoaXMubXd1UmVzdWx0Xz10ci5iLm1hdGguU3RhdGlzdGljcy5td3UodGhpcy5oaXN0b2dyYW0uc2FtcGxlVmFsdWVzLHJlZmVyZW5jZUhpc3RvZ3JhbS5zYW1wbGVWYWx1ZXMsdGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5hbHBoYSk7fSxidWlsZChyb3csZGlzcGxheUxhYmVsLHZpZXdTdGF0ZSl7dGhpcy5yb3dfPXJvdzt0aGlzLmRpc3BsYXlMYWJlbF89ZGlzcGxheUxhYmVsO3RoaXMudmlld1N0YXRlXz12aWV3U3RhdGU7dGhpcy5oaXN0b2dyYW1fPXRoaXMucm93LmNvbHVtbnMuZ2V0KGRpc3BsYXlMYWJlbCk7aWYodGhpcy52aWV3U3RhdGUpe3RoaXMudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25WaWV3U3RhdGVVcGRhdGVfLmJpbmQodGhpcykpO30KdGhpcy5yb3cudmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMub25Sb3dTdGF0ZVVwZGF0ZV8uYmluZCh0aGlzKSk7aWYodGhpcy5pc0F0dGFjaGVkKXt0aGlzLnJvdy5yb290Vmlld1N0YXRlLmFkZFVwZGF0ZUxpc3RlbmVyKHRoaXMucm9vdExpc3RlbmVyXyk7fQp0aGlzLnVwZGF0ZU13dV8oKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sdXBkYXRlU2lnbmlmaWNhbmNlXygpe2lmKCF0aGlzLm13dVJlc3VsdF8pcmV0dXJuO3RoaXMuJC5zY2FsYXIuc2lnbmlmaWNhbmNlPXRoaXMubXd1UmVzdWx0Xy5zaWduaWZpY2FuY2U7fSxnZXQgdmlld1N0YXRlKCl7cmV0dXJuIHRoaXMudmlld1N0YXRlXzt9LGdldCByb3coKXtyZXR1cm4gdGhpcy5yb3dfO30sZ2V0IGhpc3RvZ3JhbSgpe3JldHVybiB0aGlzLmhpc3RvZ3JhbV87fSxnZXQgcmVmZXJlbmNlSGlzdG9ncmFtKCl7Y29uc3QgcmVmZXJlbmNlRGlzcGxheUxhYmVsPXRoaXMucm93LnJvb3RWaWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsO2lmKCFyZWZlcmVuY2VEaXNwbGF5TGFiZWwpcmV0dXJuIHVuZGVmaW5lZDtpZihyZWZlcmVuY2VEaXNwbGF5TGFiZWw9PT10aGlzLmRpc3BsYXlMYWJlbF8pcmV0dXJuIHVuZGVmaW5lZDtyZXR1cm4gdGhpcy5yb3cuY29sdW1ucy5nZXQocmVmZXJlbmNlRGlzcGxheUxhYmVsKTt9LGdldCBpc0hpc3RvZ3JhbU9wZW4oKXtyZXR1cm4odGhpcy5oaXN0b2dyYW1TcGFuXyE9PXVuZGVmaW5lZCkmJih0aGlzLiQuaGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9PT0nYmxvY2snKTt9LHNldCBpc0hpc3RvZ3JhbU9wZW4ob3Blbil7aWYoISh0aGlzLmhpc3RvZ3JhbSBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKXx8KHRoaXMuaGlzdG9ncmFtLm51bVZhbHVlcz09PTApKXtyZXR1cm47fQp0aGlzLiQuc2NhbGFyLnN0eWxlLmRpc3BsYXk9b3Blbj8nbm9uZSc6J2ZsZXgnO3RoaXMuJC5vcGVuX2hpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PW9wZW4/J25vbmUnOidibG9jayc7dGhpcy4kLmNsb3NlX2hpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PW9wZW4/J2Jsb2NrJzonbm9uZSc7dGhpcy4kLmhpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PW9wZW4/J2Jsb2NrJzonbm9uZSc7aWYob3BlbiYmdGhpcy5oaXN0b2dyYW1TcGFuXz09PXVuZGVmaW5lZCl7dGhpcy5oaXN0b2dyYW1TcGFuXz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci12LXVpLWhpc3RvZ3JhbS1zcGFuJyk7dGhpcy5oaXN0b2dyYW1TcGFuXy52aWV3U3RhdGU9dGhpcy52aWV3U3RhdGU7dGhpcy5oaXN0b2dyYW1TcGFuXy5yb3dTdGF0ZT10aGlzLnJvdy52aWV3U3RhdGU7dGhpcy5oaXN0b2dyYW1TcGFuXy5yb290U3RhdGU9dGhpcy5yb3cucm9vdFZpZXdTdGF0ZTt0aGlzLmhpc3RvZ3JhbVNwYW5fLmJ1aWxkKHRoaXMuaGlzdG9ncmFtLHRoaXMucmVmZXJlbmNlSGlzdG9ncmFtKTt0aGlzLiQuaGlzdG9ncmFtLmFwcGVuZENoaWxkKHRoaXMuaGlzdG9ncmFtU3Bhbl8pO30KdGhpcy52aWV3U3RhdGUuaXNPcGVuPW9wZW47fSxvblZpZXdTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLmlzT3Blbil7dGhpcy5pc0hpc3RvZ3JhbU9wZW49dGhpcy52aWV3U3RhdGUuaXNPcGVuO319LG9uUm93U3RhdGVVcGRhdGVfKGV2ZW50KXtpZihldmVudC5kZWx0YS5pc092ZXJ2aWV3ZWQ9PT11bmRlZmluZWQpcmV0dXJuO2lmKHRoaXMucm93LnZpZXdTdGF0ZS5pc092ZXJ2aWV3ZWQpe3RoaXMuc2hvd092ZXJ2aWV3KCk7fWVsc2V7dGhpcy5oaWRlT3ZlcnZpZXcoKTt9fSxvblJvb3RTdGF0ZVVwZGF0ZV8oZXZlbnQpe2lmKGV2ZW50LmRlbHRhLnJlZmVyZW5jZURpc3BsYXlMYWJlbCYmdGhpcy5oaXN0b2dyYW1TcGFuXyl7dGhpcy5oaXN0b2dyYW1TcGFuXy5idWlsZCh0aGlzLmhpc3RvZ3JhbSx0aGlzLnJlZmVyZW5jZUhpc3RvZ3JhbSk7fQppZihldmVudC5kZWx0YS5kaXNwbGF5U3RhdGlzdGljTmFtZXx8ZXZlbnQuZGVsdGEucmVmZXJlbmNlRGlzcGxheUxhYmVsKXt0aGlzLnVwZGF0ZU13dV8oKTt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO31lbHNlIGlmKGV2ZW50LmRlbHRhLmFscGhhJiZ0aGlzLm13dVJlc3VsdF8pe3RoaXMubXd1UmVzdWx0Xy5jb21wYXJlKHRoaXMucm93LnJvb3RWaWV3U3RhdGUuYWxwaGEpO3RoaXMudXBkYXRlU2lnbmlmaWNhbmNlXygpO30KaWYodGhpcy5yb3cudmlld1N0YXRlLmlzT3ZlcnZpZXdlZCYmKGV2ZW50LmRlbHRhLnNvcnRDb2x1bW5JbmRleHx8ZXZlbnQuZGVsdGEuc29ydERlc2NlbmRpbmd8fGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWNOYW1lfHxldmVudC5kZWx0YS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwpKXtpZih0aGlzLm92ZXJ2aWV3Q2hhcnRfIT09dW5kZWZpbmVkKXt0aGlzLiQub3ZlcnZpZXdfY29udGFpbmVyLnJlbW92ZUNoaWxkKHRoaXMub3ZlcnZpZXdDaGFydF8pO3RoaXMub3ZlcnZpZXdDaGFydF89dW5kZWZpbmVkO30KdGhpcy5zaG93T3ZlcnZpZXcoKTt9fSxvbkNsaWNrXyhldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7fSxvcGVuSGlzdG9ncmFtXygpe3RoaXMuaXNIaXN0b2dyYW1PcGVuPXRydWU7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJywnb3BlbicpO30sY2xvc2VIaXN0b2dyYW1fKCl7dGhpcy5pc0hpc3RvZ3JhbU9wZW49ZmFsc2U7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1jZWxsJywnY2xvc2UnKTt9LHVwZGF0ZUNvbnRlbnRzXygpe2NvbnN0IGlzT3Blbj10aGlzLmlzSGlzdG9ncmFtT3Blbjt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnVubWVyZ2VhYmxlLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5zY2FsYXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLmhpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuY2xvc2VfaGlzdG9ncmFtLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5vcGVuX2hpc3RvZ3JhbS5zdHlsZS52aXNpYmlsaXR5PSdoaWRkZW4nO2lmKCF0aGlzLmhpc3RvZ3JhbSl7dGhpcy4kLm1pc3Npbmcuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9CnRoaXMuJC5taXNzaW5nLnN0eWxlLmRpc3BsYXk9J25vbmUnO2lmKHRoaXMuaGlzdG9ncmFtIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW1TZXQpe3RoaXMuJC51bm1lcmdlYWJsZS5zdHlsZS5kaXNwbGF5PSdibG9jayc7cmV0dXJuO30KaWYoISh0aGlzLmhpc3RvZ3JhbSBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSl7dGhyb3cgbmV3IEVycm9yKCdJbnZhbGlkIEhpc3RvZ3JhbTogJyt0aGlzLmhpc3RvZ3JhbSk7fQppZih0aGlzLmhpc3RvZ3JhbS5udW1WYWx1ZXM9PT0wKXt0aGlzLiQuZW1wdHkuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9CnRoaXMuJC5vcGVuX2hpc3RvZ3JhbS5zdHlsZS5kaXNwbGF5PSdibG9jayc7dGhpcy4kLm9wZW5faGlzdG9ncmFtLnN0eWxlLnZpc2liaWxpdHk9J3Zpc2libGUnO3RoaXMuJC5zY2FsYXIuc3R5bGUuZGlzcGxheT0nZmxleCc7dGhpcy51cGRhdGVTaWduaWZpY2FuY2VfKCk7Y29uc3QgcmVmZXJlbmNlSGlzdG9ncmFtPXRoaXMucmVmZXJlbmNlSGlzdG9ncmFtO2NvbnN0IHN0YXROYW1lPXRoaXMuaGlzdG9ncmFtLmdldEF2YWlsYWJsZVN0YXRpc3RpY05hbWUodGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5kaXNwbGF5U3RhdGlzdGljTmFtZSxyZWZlcmVuY2VIaXN0b2dyYW0pO2NvbnN0IHN0YXRpc3RpY1NjYWxhcj10aGlzLmhpc3RvZ3JhbS5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUscmVmZXJlbmNlSGlzdG9ncmFtKTt0aGlzLiQuc2NhbGFyLnNldFZhbHVlQW5kVW5pdChzdGF0aXN0aWNTY2FsYXIudmFsdWUsc3RhdGlzdGljU2NhbGFyLnVuaXQpO3RoaXMuaXNIaXN0b2dyYW1PcGVuPWlzT3Blbjt9LHNob3dPdmVydmlldygpe3RoaXMuJC5vdmVydmlld19jb250YWluZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO2lmKHRoaXMub3ZlcnZpZXdDaGFydF8hPT11bmRlZmluZWQpcmV0dXJuO3RoaXMucm93LnNvcnRTdWJSb3dzKCk7bGV0IHJlZmVyZW5jZURpc3BsYXlMYWJlbD10aGlzLnJvdy5yb290Vmlld1N0YXRlLnJlZmVyZW5jZURpc3BsYXlMYWJlbDtpZihyZWZlcmVuY2VEaXNwbGF5TGFiZWw9PT10aGlzLmRpc3BsYXlMYWJlbF8pe3JlZmVyZW5jZURpc3BsYXlMYWJlbD11bmRlZmluZWQ7fQpjb25zdCBkaXNwbGF5U3RhdGlzdGljTmFtZT10aGlzLnJvdy5yb290Vmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lO2NvbnN0IGRhdGE9W107bGV0IHVuaXQ7Zm9yKGNvbnN0IHN1YlJvdyBvZiB0aGlzLnJvdy5zdWJSb3dzKXtjb25zdCBzdWJIaXN0PXN1YlJvdy5jb2x1bW5zLmdldCh0aGlzLmRpc3BsYXlMYWJlbF8pO2lmKCEoc3ViSGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtpZih1bml0PT09dW5kZWZpbmVkKXt1bml0PXN1Ykhpc3QudW5pdDt9ZWxzZSBpZih1bml0IT09c3ViSGlzdC51bml0KXtkYXRhLnNwbGljZSgwKTticmVhazt9CmNvbnN0IHJlZkhpc3Q9c3ViUm93LmNvbHVtbnMuZ2V0KHJlZmVyZW5jZURpc3BsYXlMYWJlbCk7Y29uc3Qgc3RhdE5hbWU9c3ViSGlzdC5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKGRpc3BsYXlTdGF0aXN0aWNOYW1lLHJlZkhpc3QpO2NvbnN0IHN0YXRTY2FsYXI9c3ViSGlzdC5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUscmVmSGlzdCk7aWYoc3RhdFNjYWxhciE9PXVuZGVmaW5lZCl7ZGF0YS5wdXNoKHt4OnN1YlJvdy5uYW1lLHk6c3RhdFNjYWxhci52YWx1ZSx9KTt9fQppZihkYXRhLmxlbmd0aDwyKXJldHVybjt0aGlzLm92ZXJ2aWV3Q2hhcnRfPW5ldyB0ci51aS5iLk5hbWVMaW5lQ2hhcnQoKTt0aGlzLiQub3ZlcnZpZXdfY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMub3ZlcnZpZXdDaGFydF8pO3RoaXMub3ZlcnZpZXdDaGFydF8uZGlzcGxheVhJbkhvdmVyPXRydWU7dGhpcy5vdmVydmlld0NoYXJ0Xy5oaWRlTGVnZW5kPXRydWU7dGhpcy5vdmVydmlld0NoYXJ0Xy51bml0PXVuaXQ7dGhpcy5vdmVydmlld0NoYXJ0Xy5vdmVycmlkZURhdGFSYW5nZT10aGlzLnJvdy5vdmVydmlld0RhdGFSYW5nZTt0aGlzLm92ZXJ2aWV3Q2hhcnRfLmRhdGE9ZGF0YTt9LGhpZGVPdmVydmlldygpe3RoaXMuJC5vdmVydmlld19jb250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudi51aScsZnVuY3Rpb24oKXtjb25zdCBOQU1FX0NPTFVNTl9XSURUSF9QWD0zMDA7UG9seW1lcih7aXM6J3RyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLGNyZWF0ZWQoKXt0aGlzLnJvd189dW5kZWZpbmVkO3RoaXMub3ZlcnZpZXdDaGFydF89dW5kZWZpbmVkO3RoaXMuY2VsbExpc3RlbmVyXz10aGlzLm9uQ2VsbFN0YXRlVXBkYXRlXy5iaW5kKHRoaXMpO3RoaXMucm9vdExpc3RlbmVyXz10aGlzLm9uUm9vdFN0YXRlVXBkYXRlXy5iaW5kKHRoaXMpO30sYXR0YWNoZWQoKXtpZih0aGlzLnJvdyl7dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RMaXN0ZW5lcl8pO319LGRldGFjaGVkKCl7dGhpcy5yb3cucm9vdFZpZXdTdGF0ZS5yZW1vdmVVcGRhdGVMaXN0ZW5lcih0aGlzLnJvb3RMaXN0ZW5lcl8pO30sZ2V0IHJvdygpe3JldHVybiB0aGlzLnJvd187fSxidWlsZChyb3cpe2lmKHRoaXMucm93XyE9PXVuZGVmaW5lZCl7dGhyb3cgbmV3IEVycm9yKCdyb3cgbXVzdCBiZSBzZXQgZXhhY3RseSBvbmNlLicpO30KdGhpcy5yb3dfPXJvdzt0aGlzLnJvdy52aWV3U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5vblJvd1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpKTt0aGlzLmNvbnN0cmFpbldpZHRoPXRoaXMucm93LnJvb3RWaWV3U3RhdGUuY29uc3RyYWluTmFtZUNvbHVtbjtpZih0aGlzLmlzQXR0YWNoZWQpe3RoaXMucm93LnJvb3RWaWV3U3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5yb290TGlzdGVuZXJfKTt9CmZvcihjb25zdCBjZWxsU3RhdGUgb2YgdGhpcy5yb3cudmlld1N0YXRlLmNlbGxzLnZhbHVlcygpKXtjZWxsU3RhdGUuYWRkVXBkYXRlTGlzdGVuZXIodGhpcy5jZWxsTGlzdGVuZXJfKTt9ClBvbHltZXIuZG9tKHRoaXMuJC5uYW1lKS50ZXh0Q29udGVudD10aGlzLnJvdy5uYW1lO3RoaXMudGl0bGU9dGhpcy5yb3cubmFtZTtpZih0aGlzLnJvdy5kZXNjcmlwdGlvbil7dGhpcy50aXRsZSs9J1xuJyt0aGlzLnJvdy5kZXNjcmlwdGlvbjt9CmlmKHRoaXMucm93Lm92ZXJ2aWV3RGF0YVJhbmdlLmlzRW1wdHl8fHRoaXMucm93Lm92ZXJ2aWV3RGF0YVJhbmdlLm1pbj09PXRoaXMucm93Lm92ZXJ2aWV3RGF0YVJhbmdlLm1heCl7dGhpcy4kLnNob3dfb3ZlcnZpZXcuc3R5bGUuZGlzcGxheT0nbm9uZSc7fQpsZXQgaGlzdG9ncmFtQ291bnQ9MDtmb3IoY29uc3QgY2VsbCBvZiB0aGlzLnJvdy5jb2x1bW5zLnZhbHVlcygpKXtpZihjZWxsIGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0mJmNlbGwubnVtVmFsdWVzPjApeysraGlzdG9ncmFtQ291bnQ7fX0KaWYoaGlzdG9ncmFtQ291bnQ8PTEpe3RoaXMuJC5vcGVuX2hpc3RvZ3JhbXMuc3R5bGUuZGlzcGxheT0nbm9uZSc7fX0sc2V0IGNvbnN0cmFpbldpZHRoKGNvbnN0cmFpbil7dGhpcy4kLm5hbWUuc3R5bGUubWF4V2lkdGg9Y29uc3RyYWluPyh0aGlzLm5hbWVXaWR0aFB4KydweCcpOidub25lJzt9LGdldCBuYW1lV2lkdGhQeCgpe3JldHVybiBOQU1FX0NPTFVNTl9XSURUSF9QWC0oMTYqdGhpcy5yb3cuZGVwdGgpO30sZ2V0IGlzT3ZlcmZsb3dpbmcoKXtyZXR1cm4gdGhpcy4kLm5hbWUuc3R5bGUubWF4V2lkdGghPT0nbm9uZScmJnRoaXMuJC5uYW1lLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoPT09dGhpcy5uYW1lV2lkdGhQeDt9LGdldCBpc092ZXJ2aWV3ZWQoKXtyZXR1cm4gdGhpcy4kLm92ZXJ2aWV3X2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PT09J2Jsb2NrJzt9LHNldCBpc092ZXJ2aWV3ZWQoaXNPdmVydmlld2VkKXtpZihpc092ZXJ2aWV3ZWQ9PT10aGlzLmlzT3ZlcnZpZXdlZClyZXR1cm47aWYoaXNPdmVydmlld2VkKXt0aGlzLnNob3dPdmVydmlld18oKTt9ZWxzZXt0aGlzLmhpZGVPdmVydmlld18oKTt9fSxoaWRlT3ZlcnZpZXdfKG9wdF9ldmVudCl7dGhpcy4kLm92ZXJ2aWV3X2NvbnRhaW5lci5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuaGlkZV9vdmVydmlldy5zdHlsZS5kaXNwbGF5PSdub25lJzt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PSdibG9jayc7aWYob3B0X2V2ZW50IT09dW5kZWZpbmVkKXtvcHRfZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLCdoaWRlT3ZlcnZpZXcnKTt0aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkPXRoaXMuaXNPdmVydmlld2VkO319LHNob3dPdmVydmlld18ob3B0X2V2ZW50KXtpZihvcHRfZXZlbnQhPT11bmRlZmluZWQpe29wdF9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlLW5hbWUtY2VsbCcsJ3Nob3dPdmVydmlldycpO3RoaXMucm93LnZpZXdTdGF0ZS5pc092ZXJ2aWV3ZWQ9dHJ1ZTt9CnRoaXMuJC5vdmVydmlld19jb250YWluZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5oaWRlX292ZXJ2aWV3LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQuc2hvd19vdmVydmlldy5zdHlsZS5kaXNwbGF5PSdub25lJztpZih0aGlzLm92ZXJ2aWV3Q2hhcnRfPT09dW5kZWZpbmVkKXtjb25zdCBkaXNwbGF5U3RhdGlzdGljTmFtZT10aGlzLnJvdy5yb290Vmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lO2NvbnN0IGRhdGE9W107bGV0IHVuaXQ7Zm9yKGNvbnN0W2Rpc3BsYXlMYWJlbCxoaXN0XW9mIHRoaXMucm93LnNvcnRlZENvbHVtbnMoKSl7aWYoIShoaXN0IGluc3RhbmNlb2YgdHIudi5IaXN0b2dyYW0pKWNvbnRpbnVlO2lmKHVuaXQ9PT11bmRlZmluZWQpe3VuaXQ9aGlzdC51bml0O31lbHNlIGlmKHVuaXQhPT1oaXN0LnVuaXQpe2RhdGEuc3BsaWNlKDApO2JyZWFrO30KY29uc3Qgc3RhdE5hbWU9aGlzdC5nZXRBdmFpbGFibGVTdGF0aXN0aWNOYW1lKGRpc3BsYXlTdGF0aXN0aWNOYW1lKTtjb25zdCBzdGF0U2NhbGFyPWhpc3QuZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lKTtpZihzdGF0U2NhbGFyIT09dW5kZWZpbmVkKXtkYXRhLnB1c2goe3g6ZGlzcGxheUxhYmVsLHk6c3RhdFNjYWxhci52YWx1ZSx9KTt9fQppZihkYXRhLmxlbmd0aDwyKXtyZXR1cm47fQp0aGlzLm92ZXJ2aWV3Q2hhcnRfPW5ldyB0ci51aS5iLk5hbWVMaW5lQ2hhcnQoKTt0aGlzLiQub3ZlcnZpZXdfY29udGFpbmVyLmFwcGVuZENoaWxkKHRoaXMub3ZlcnZpZXdDaGFydF8pO3RoaXMub3ZlcnZpZXdDaGFydF8uZGlzcGxheVhJbkhvdmVyPXRydWU7dGhpcy5vdmVydmlld0NoYXJ0Xy5oaWRlTGVnZW5kPXRydWU7dGhpcy5vdmVydmlld0NoYXJ0Xy51bml0PXVuaXQ7dGhpcy5vdmVydmlld0NoYXJ0Xy5vdmVycmlkZURhdGFSYW5nZT10aGlzLnJvdy5vdmVydmlld0RhdGFSYW5nZTt0aGlzLm92ZXJ2aWV3Q2hhcnRfLmRhdGE9ZGF0YTt9fSxvcGVuSGlzdG9ncmFtc18oZXZlbnQpe2V2ZW50LnN0b3BQcm9wYWdhdGlvbigpO3RyLmIuVGltaW5nLmluc3RhbnQoJ2hpc3RvZ3JhbS1zZXQtdGFibGUtbmFtZS1jZWxsJywnb3Blbkhpc3RvZ3JhbXMnKTtmb3IoY29uc3QgY2VsbCBvZiB0aGlzLnJvdy5jZWxscy52YWx1ZXMoKSl7Y2VsbC5pc0hpc3RvZ3JhbU9wZW49dHJ1ZTt9CnRoaXMuJC5jbG9zZV9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQub3Blbl9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J25vbmUnO30sY2xvc2VIaXN0b2dyYW1zXyhldmVudCl7ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnLCdjbG9zZUhpc3RvZ3JhbXMnKTtmb3IoY29uc3QgY2VsbCBvZiB0aGlzLnJvdy5jZWxscy52YWx1ZXMoKSl7Y2VsbC5pc0hpc3RvZ3JhbU9wZW49ZmFsc2U7fQp0aGlzLiQub3Blbl9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9J2Jsb2NrJzt0aGlzLiQuY2xvc2VfaGlzdG9ncmFtcy5zdHlsZS5kaXNwbGF5PSdub25lJzt9LG9uUm9vdFN0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuY29uc3RyYWluTmFtZUNvbHVtbil7dGhpcy5jb25zdHJhaW5XaWR0aD10aGlzLnJvdy5yb290Vmlld1N0YXRlLmNvbnN0cmFpbk5hbWVDb2x1bW47fQppZih0aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkJiZldmVudC5kZWx0YS5kaXNwbGF5U3RhdGlzdGljTmFtZSl7dGhpcy5yb3cucmVzZXRPdmVydmlld0RhdGFSYW5nZSgpO2lmKHRoaXMub3ZlcnZpZXdDaGFydF8hPT11bmRlZmluZWQpe3RoaXMuJC5vdmVydmlld19jb250YWluZXIucmVtb3ZlQ2hpbGQodGhpcy5vdmVydmlld0NoYXJ0Xyk7dGhpcy5vdmVydmlld0NoYXJ0Xz11bmRlZmluZWQ7fQp0aGlzLnNob3dPdmVydmlld18oKTt9fSxvblJvd1N0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuaXNPdmVydmlld2VkKXt0aGlzLmlzT3ZlcnZpZXdlZD10aGlzLnJvdy52aWV3U3RhdGUuaXNPdmVydmlld2VkO319LG9uQ2VsbFN0YXRlVXBkYXRlXyhldmVudCl7aWYoIWV2ZW50LmRlbHRhLmlzT3BlbilyZXR1cm47bGV0IGNlbGxDb3VudD0wO2xldCBvcGVuQ2VsbENvdW50PTA7Zm9yKGNvbnN0IGNlbGwgb2YgdGhpcy5yb3cuY2VsbHMudmFsdWVzKCkpe2lmKCEoY2VsbC5oaXN0b2dyYW0gaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSl8fChjZWxsLmhpc3RvZ3JhbS5udW1WYWx1ZXM9PT0wKSl7Y29udGludWU7fQorK2NlbGxDb3VudDtpZihjZWxsLmlzSGlzdG9ncmFtT3BlbikrK29wZW5DZWxsQ291bnQ7fQppZihjZWxsQ291bnQ8PTEpcmV0dXJuO2NvbnN0IG1vc3RseU9wZW49b3BlbkNlbGxDb3VudD4oY2VsbENvdW50LzIpO3RoaXMuJC5vcGVuX2hpc3RvZ3JhbXMuc3R5bGUuZGlzcGxheT1tb3N0bHlPcGVuPydub25lJzonYmxvY2snO3RoaXMuJC5jbG9zZV9oaXN0b2dyYW1zLnN0eWxlLmRpc3BsYXk9bW9zdGx5T3Blbj8nYmxvY2snOidub25lJzt9fSk7cmV0dXJue05BTUVfQ09MVU1OX1dJRFRIX1BYLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2NsYXNzIEhpc3RvZ3JhbVNldFRhYmxlUm93e2NvbnN0cnVjdG9yKGhpZXJhcmNoeSxiYXNlVGFibGUscm9vdFZpZXdTdGF0ZSl7dGhpcy5oaWVyYXJjaHlfPWhpZXJhcmNoeTt0aGlzLmJhc2VUYWJsZV89YmFzZVRhYmxlO3RoaXMucm9vdFZpZXdTdGF0ZV89cm9vdFZpZXdTdGF0ZTt0aGlzLnZpZXdTdGF0ZV89bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3dTdGF0ZSgpO3RoaXMudmlld1N0YXRlXy5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLm9uVmlld1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpKTt0aGlzLm92ZXJ2aWV3RGF0YVJhbmdlXz11bmRlZmluZWQ7dGhpcy5uYW1lQ2VsbF89dW5kZWZpbmVkO3RoaXMuY2VsbHNfPW5ldyBNYXAoKTt0aGlzLnN1YlJvd3NfPVtdO2Zvcihjb25zdCBzdWJIaWVyYXJjaHkgb2YgaGllcmFyY2h5LnN1YlJvd3Mpe2NvbnN0IHN1YlJvdz1uZXcgSGlzdG9ncmFtU2V0VGFibGVSb3coc3ViSGllcmFyY2h5LGJhc2VUYWJsZSxyb290Vmlld1N0YXRlKTt0aGlzLnN1YlJvd3NfLnB1c2goc3ViUm93KTt0aGlzLnZpZXdTdGF0ZS5zdWJSb3dzLnNldChzdWJSb3cubmFtZSxzdWJSb3cudmlld1N0YXRlKTt9CmZvcihjb25zdCBjb2x1bW5OYW1lIG9mIHRoaXMuY29sdW1ucy5rZXlzKCkpe3RoaXMudmlld1N0YXRlLmNlbGxzLnNldChjb2x1bW5OYW1lLG5ldyB0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlQ2VsbFN0YXRlKCkpO319CmdldCBuYW1lKCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Xy5uYW1lO30KZ2V0IGRlcHRoKCl7cmV0dXJuIHRoaXMuaGllcmFyY2h5Xy5kZXB0aDt9CmdldCBkZXNjcmlwdGlvbigpe3JldHVybiB0aGlzLmhpZXJhcmNoeV8uZGVzY3JpcHRpb247fQpnZXQgY29sdW1ucygpe3JldHVybiB0aGlzLmhpZXJhcmNoeV8uY29sdW1uczt9KnNvcnRlZENvbHVtbnMoKXtmb3IoY29uc3QgY29sIG9mIHRoaXMuYmFzZVRhYmxlXy50YWJsZUNvbHVtbnMpe3lpZWxkW2NvbC5kaXNwbGF5TGFiZWwsdGhpcy5oaWVyYXJjaHlfLmNvbHVtbnMuZ2V0KGNvbC5kaXNwbGF5TGFiZWwpLF07fX0KZ2V0IG92ZXJ2aWV3RGF0YVJhbmdlKCl7aWYodGhpcy5vdmVydmlld0RhdGFSYW5nZV89PT11bmRlZmluZWQpe3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTtjb25zdCBkaXNwbGF5U3RhdGlzdGljTmFtZT10aGlzLnJvb3RWaWV3U3RhdGUuZGlzcGxheVN0YXRpc3RpY05hbWU7Y29uc3QgcmVmZXJlbmNlRGlzcGxheUxhYmVsPXRoaXMucm9vdFZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWw7Zm9yKGNvbnN0W2Rpc3BsYXlMYWJlbCxoaXN0XW9mIHRoaXMuY29sdW1ucyl7aWYoaGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKXtjb25zdCBzdGF0TmFtZT1oaXN0LmdldEF2YWlsYWJsZVN0YXRpc3RpY05hbWUoZGlzcGxheVN0YXRpc3RpY05hbWUpO2NvbnN0IHN0YXRTY2FsYXI9aGlzdC5nZXRTdGF0aXN0aWNTY2FsYXIoc3RhdE5hbWUpO2lmKHN0YXRTY2FsYXIhPT11bmRlZmluZWQpe3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfLmFkZFZhbHVlKHN0YXRTY2FsYXIudmFsdWUpO319CmZvcihjb25zdCBzdWJSb3cgb2YgdGhpcy5zdWJSb3dzKXtjb25zdCBzdWJIaXN0PXN1YlJvdy5jb2x1bW5zLmdldChkaXNwbGF5TGFiZWwpO2lmKCEoc3ViSGlzdCBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKSljb250aW51ZTtjb25zdCByZWZIaXN0PXN1YlJvdy5jb2x1bW5zLmdldChyZWZlcmVuY2VEaXNwbGF5TGFiZWwpO2NvbnN0IHN0YXROYW1lPXN1Ykhpc3QuZ2V0QXZhaWxhYmxlU3RhdGlzdGljTmFtZShkaXNwbGF5U3RhdGlzdGljTmFtZSxyZWZIaXN0KTtjb25zdCBzdGF0U2NhbGFyPXN1Ykhpc3QuZ2V0U3RhdGlzdGljU2NhbGFyKHN0YXROYW1lLHJlZkhpc3QpO2lmKHN0YXRTY2FsYXIhPT11bmRlZmluZWQpe3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfLmFkZFZhbHVlKHN0YXRTY2FsYXIudmFsdWUpO319fX0KcmV0dXJuIHRoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfO30KcmVzZXRPdmVydmlld0RhdGFSYW5nZSgpe3RoaXMub3ZlcnZpZXdEYXRhUmFuZ2VfPXVuZGVmaW5lZDt9CmdldCByb290Vmlld1N0YXRlKCl7cmV0dXJuIHRoaXMucm9vdFZpZXdTdGF0ZV87fQpnZXQgY2VsbHMoKXtyZXR1cm4gdGhpcy5jZWxsc187fQpnZXQgc3ViUm93cygpe3JldHVybiB0aGlzLnN1YlJvd3NfO30KZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSp3YWxrKCl7eWllbGQgdGhpcztmb3IoY29uc3Qgcm93IG9mIHRoaXMuc3ViUm93cyl5aWVsZCpyb3cud2FsaygpO30Kc3RhdGljKndhbGtBbGwocm9vdFJvd3Mpe2Zvcihjb25zdCByb290Um93IG9mIHJvb3RSb3dzKXlpZWxkKnJvb3RSb3cud2FsaygpO30KZ2V0IG5hbWVDZWxsKCl7aWYodGhpcy5uYW1lQ2VsbF89PT11bmRlZmluZWQpe3RoaXMubmFtZUNlbGxfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXYtdWktaGlzdG9ncmFtLXNldC10YWJsZS1uYW1lLWNlbGwnKTt0aGlzLm5hbWVDZWxsXy5idWlsZCh0aGlzKTt9CnJldHVybiB0aGlzLm5hbWVDZWxsXzt9CmdldENlbGwoY29sdW1uTmFtZSl7aWYodGhpcy5jZWxscy5oYXMoY29sdW1uTmFtZSkpcmV0dXJuIHRoaXMuY2VsbHMuZ2V0KGNvbHVtbk5hbWUpO2NvbnN0IGNlbGw9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHItdi11aS1oaXN0b2dyYW0tc2V0LXRhYmxlLWNlbGwnKTtjZWxsLmJ1aWxkKHRoaXMsY29sdW1uTmFtZSx0aGlzLnZpZXdTdGF0ZS5jZWxscy5nZXQoY29sdW1uTmFtZSkpO3RoaXMuY2VsbHMuc2V0KGNvbHVtbk5hbWUsY2VsbCk7cmV0dXJuIGNlbGw7fQpjb21wYXJlTmFtZXMob3RoZXIpe3JldHVybiB0aGlzLm5hbWUubG9jYWxlQ29tcGFyZShvdGhlci5uYW1lKTt9CmNvbXBhcmVDZWxscyhvdGhlcixkaXNwbGF5TGFiZWwpe2NvbnN0IHJlZmVyZW5jZURpc3BsYXlMYWJlbD10aGlzLnJvb3RWaWV3U3RhdGUucmVmZXJlbmNlRGlzcGxheUxhYmVsO2xldCByZWZlcmVuY2VDZWxsQTtsZXQgcmVmZXJlbmNlQ2VsbEI7aWYocmVmZXJlbmNlRGlzcGxheUxhYmVsJiZyZWZlcmVuY2VEaXNwbGF5TGFiZWwhPT1kaXNwbGF5TGFiZWwpe3JlZmVyZW5jZUNlbGxBPXRoaXMuY29sdW1ucy5nZXQocmVmZXJlbmNlRGlzcGxheUxhYmVsKTtyZWZlcmVuY2VDZWxsQj1vdGhlci5jb2x1bW5zLmdldChyZWZlcmVuY2VEaXNwbGF5TGFiZWwpO30KY29uc3QgY2VsbEE9dGhpcy5jb2x1bW5zLmdldChkaXNwbGF5TGFiZWwpO2xldCB2YWx1ZUE9MDtpZihjZWxsQSBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKXtjb25zdCBzdGF0aXN0aWNBPWNlbGxBLmdldEF2YWlsYWJsZVN0YXRpc3RpY05hbWUodGhpcy5yb290Vmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lLHJlZmVyZW5jZUNlbGxBKTtjb25zdCBzY2FsYXJBPWNlbGxBLmdldFN0YXRpc3RpY1NjYWxhcihzdGF0aXN0aWNBLHJlZmVyZW5jZUNlbGxBKTtpZihzY2FsYXJBKXt2YWx1ZUE9c2NhbGFyQS52YWx1ZTt9fQpjb25zdCBjZWxsQj1vdGhlci5jb2x1bW5zLmdldChkaXNwbGF5TGFiZWwpO2xldCB2YWx1ZUI9MDtpZihjZWxsQiBpbnN0YW5jZW9mIHRyLnYuSGlzdG9ncmFtKXtjb25zdCBzdGF0aXN0aWNCPWNlbGxCLmdldEF2YWlsYWJsZVN0YXRpc3RpY05hbWUodGhpcy5yb290Vmlld1N0YXRlLmRpc3BsYXlTdGF0aXN0aWNOYW1lLHJlZmVyZW5jZUNlbGxCKTtjb25zdCBzY2FsYXJCPWNlbGxCLmdldFN0YXRpc3RpY1NjYWxhcihzdGF0aXN0aWNCLHJlZmVyZW5jZUNlbGxCKTtpZihzY2FsYXJCKXt2YWx1ZUI9c2NhbGFyQi52YWx1ZTt9fQpyZXR1cm4gdmFsdWVBLXZhbHVlQjt9Cm9uVmlld1N0YXRlVXBkYXRlXyhldmVudCl7aWYoZXZlbnQuZGVsdGEuaXNFeHBhbmRlZCl7dGhpcy5iYXNlVGFibGVfLnNldEV4cGFuZGVkRm9yVGFibGVSb3codGhpcyx0aGlzLnZpZXdTdGF0ZS5pc0V4cGFuZGVkKTt9CmlmKGV2ZW50LmRlbHRhLnN1YlJvd3Mpe3Rocm93IG5ldyBFcnJvcignSGlzdG9ncmFtU2V0VGFibGVSb3cuc3ViUm93cyBtdXN0IG5vdCBiZSByZWFzc2lnbmVkLicpO30KaWYoZXZlbnQuZGVsdGEuY2VsbHMpe2Zvcihjb25zdFtkaXNwbGF5TGFiZWwsY2VsbF1vZiB0aGlzLmNlbGxzKXtpZihjZWxsLnZpZXdTdGF0ZSE9PXRoaXMudmlld1N0YXRlLmNlbGxzLmdldChkaXNwbGF5TGFiZWwpKXt0aHJvdyBuZXcgRXJyb3IoJ09ubHkgSGlzdG9ncmFtU2V0VGFibGVSb3cgbWF5IHVwZGF0ZSBjZWxscycpO319fX0KYXN5bmMgcmVzdG9yZVN0YXRlKHZzKXthd2FpdCB0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe2lzRXhwYW5kZWQ6dnMuaXNFeHBhbmRlZCxpc092ZXJ2aWV3ZWQ6dnMuaXNPdmVydmlld2VkLH0pO2Zvcihjb25zdFtkaXNwbGF5TGFiZWwsY2VsbF1vZiB0aGlzLmNlbGxzKXtjb25zdCBwcmV2aW91c1N0YXRlPXZzLmNlbGxzLmdldChkaXNwbGF5TGFiZWwpO2lmKCFwcmV2aW91c1N0YXRlKWNvbnRpbnVlO2F3YWl0IGNlbGwudmlld1N0YXRlLnVwZGF0ZUZyb21WaWV3U3RhdGUocHJldmlvdXNTdGF0ZSk7fQpmb3IoY29uc3Qgcm93IG9mIHRoaXMuc3ViUm93cyl7Y29uc3QgcHJldmlvdXNTdGF0ZT12cy5zdWJSb3dzLmdldChyb3cubmFtZSk7aWYoIXByZXZpb3VzU3RhdGUpY29udGludWU7YXdhaXQgcm93LnJlc3RvcmVTdGF0ZShwcmV2aW91c1N0YXRlKTt9fQpzb3J0U3ViUm93cygpe2NvbnN0IHNvcnRDb2x1bW49dGhpcy5iYXNlVGFibGVfLnRhYmxlQ29sdW1uc1t0aGlzLnJvb3RWaWV3U3RhdGVfLnNvcnRDb2x1bW5JbmRleF07aWYoc29ydENvbHVtbj09PXVuZGVmaW5lZClyZXR1cm47dGhpcy5zdWJSb3dzXy5zb3J0KHNvcnRDb2x1bW4uY21wKTtpZih0aGlzLnJvb3RWaWV3U3RhdGVfLnNvcnREZXNjZW5kaW5nKXt0aGlzLnN1YlJvd3NfLnJldmVyc2UoKTt9fX0KcmV0dXJue0hpc3RvZ3JhbVNldFRhYmxlUm93LH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe2NvbnN0IE1JRExJTkVfSE9SSVpPTlRBTF9FTExJUFNJUz1TdHJpbmcuZnJvbUNoYXJDb2RlKDB4MjJlZik7ZnVuY3Rpb24gZXNjYXBlUmVnRXhwKHN0cil7cmV0dXJuIHN0ci5yZXBsYWNlKC9bXC1cW1xdXC9ce1x9XChcKVwqXCtcP1wuXFxcXlwkXHxdL2csJ1xcJCYnKTt9ClBvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdGFibGUnLGNyZWF0ZWQoKXt0aGlzLnZpZXdTdGF0ZV89dW5kZWZpbmVkO3RoaXMucHJvZ3Jlc3NfPSgpPT5Qcm9taXNlLnJlc29sdmUoKTt0aGlzLm5hbWVDb2x1bW5UaXRsZV89dW5kZWZpbmVkO3RoaXMuZGlzcGxheUxhYmVsc189W107dGhpcy5oaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5zb3VyY2VIaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfPXVuZGVmaW5lZDt0aGlzLmdyb3VwZWRIaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5oaWVyYXJjaGllc189dW5kZWZpbmVkO3RoaXMudGFibGVSb3dzXz11bmRlZmluZWQ7dGhpcy5zb3J0Q29sdW1uQ2hhbmdlZExpc3RlbmVyXz1lPT50aGlzLm9uU29ydENvbHVtbkNoYW5nZWRfKGUpO30scmVhZHkoKXt0aGlzLiQudGFibGUuemVicmE9dHJ1ZTt0aGlzLmFkZEV2ZW50TGlzdGVuZXIoJ3NvcnQtY29sdW1uLWNoYW5nZWQnLHRoaXMuc29ydENvbHVtbkNoYW5nZWRMaXN0ZW5lcl8pO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigncmVxdWVzdFNlbGVjdGlvbkNoYW5nZScsdGhpcy5vblJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VfLmJpbmQodGhpcykpO3RoaXMuYWRkRXZlbnRMaXN0ZW5lcigncm93LWV4cGFuZGVkLWNoYW5nZWQnLHRoaXMub25Sb3dFeHBhbmRlZENoYW5nZWRfLmJpbmQodGhpcykpO30sZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSxzZXQgdmlld1N0YXRlKHZzKXtpZih0aGlzLnZpZXdTdGF0ZV8pe3Rocm93IG5ldyBFcnJvcigndmlld1N0YXRlIG11c3QgYmUgc2V0IGV4YWN0bHkgb25jZS4nKTt9CnRoaXMudmlld1N0YXRlXz12czt0aGlzLnZpZXdTdGF0ZS5hZGRVcGRhdGVMaXN0ZW5lcih0aGlzLm9uVmlld1N0YXRlVXBkYXRlXy5iaW5kKHRoaXMpKTt9LGdldCBoaXN0b2dyYW1zKCl7cmV0dXJuIHRoaXMuaGlzdG9ncmFtc187fSxhc3luYyBidWlsZChoaXN0b2dyYW1zLHNvdXJjZUhpc3RvZ3JhbXMsZGlzcGxheUxhYmVscyxvcHRfcHJvZ3Jlc3Mpe3RoaXMuaGlzdG9ncmFtc189aGlzdG9ncmFtczt0aGlzLnNvdXJjZUhpc3RvZ3JhbXNfPXNvdXJjZUhpc3RvZ3JhbXM7dGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfPXVuZGVmaW5lZDt0aGlzLmdyb3VwZWRIaXN0b2dyYW1zXz11bmRlZmluZWQ7dGhpcy5kaXNwbGF5TGFiZWxzXz1kaXNwbGF5TGFiZWxzO2lmKG9wdF9wcm9ncmVzcyE9PXVuZGVmaW5lZCl0aGlzLnByb2dyZXNzXz1vcHRfcHJvZ3Jlc3M7aWYoaGlzdG9ncmFtcy5sZW5ndGg9PT0wKXt0aHJvdyBuZXcgRXJyb3IoJ2hpc3RvZ3JhbS1zZXQtdGFibGUgcmVxdWlyZXMgbm9uLWVtcHR5IEhpc3RvZ3JhbVNldC4nKTt9CmF3YWl0IHRoaXMucHJvZ3Jlc3NfKCdCdWlsZGluZyBjb2x1bW5zLi4uJyk7dGhpcy4kLnRhYmxlLnRhYmxlQ29sdW1ucz1be3RpdGxlOnRoaXMuYnVpbGROYW1lQ29sdW1uVGl0bGVfKCksdmFsdWU6cm93PT5yb3cubmFtZUNlbGwsY21wOihhLGIpPT5hLmNvbXBhcmVOYW1lcyhiKSx9XS5jb25jYXQoZGlzcGxheUxhYmVscy5tYXAobD0+dGhpcy5idWlsZENvbHVtbl8obCkpKTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywnY29sdW1uQ291bnQnLHRoaXMuJC50YWJsZS50YWJsZUNvbHVtbnMubGVuZ3RoKTthd2FpdCB0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO3RoaXMuZmlyZSgnZGlzcGxheS1yZWFkeScpO3RoaXMucHJvZ3Jlc3NfPSgpPT5Qcm9taXNlLnJlc29sdmUoKTt0aGlzLmNoZWNrTmFtZUNvbHVtbk92ZXJmbG93Xyh0ci52LnVpLkhpc3RvZ3JhbVNldFRhYmxlUm93LndhbGtBbGwodGhpcy4kLnRhYmxlLnRhYmxlUm93cykpO30sYnVpbGROYW1lQ29sdW1uVGl0bGVfKCl7dGhpcy5uYW1lQ29sdW1uVGl0bGVfPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0aGlzLm5hbWVDb2x1bW5UaXRsZV8uc3R5bGUuZGlzcGxheT0naW5saW5lLWZsZXgnO2NvbnN0IG5hbWVFbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdzcGFuJyk7bmFtZUVsLnRleHRDb250ZW50PSdOYW1lJzt0aGlzLm5hbWVDb2x1bW5UaXRsZV8uYXBwZW5kQ2hpbGQobmFtZUVsKTtjb25zdCB0b2dnbGVXaWR0aEVsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3NwYW4nKTt0b2dnbGVXaWR0aEVsLnN0eWxlLmZvbnRXZWlnaHQ9J2JvbGQnO3RvZ2dsZVdpZHRoRWwuc3R5bGUuYmFja2dyb3VuZD0nI2JiYic7dG9nZ2xlV2lkdGhFbC5zdHlsZS5jb2xvcj0nIzMzMyc7dG9nZ2xlV2lkdGhFbC5zdHlsZS5wYWRkaW5nPScwcHggM3B4Jzt0b2dnbGVXaWR0aEVsLnN0eWxlLm1hcmdpblJpZ2h0PSc4cHgnO3RvZ2dsZVdpZHRoRWwuc3R5bGUuZGlzcGxheT0nbm9uZSc7dG9nZ2xlV2lkdGhFbC50ZXh0Q29udGVudD1NSURMSU5FX0hPUklaT05UQUxfRUxMSVBTSVM7dG9nZ2xlV2lkdGhFbC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsdGhpcy50b2dnbGVOYW1lQ29sdW1uV2lkdGhfLmJpbmQodGhpcykpO3RoaXMubmFtZUNvbHVtblRpdGxlXy5hcHBlbmRDaGlsZCh0b2dnbGVXaWR0aEVsKTtyZXR1cm4gdGhpcy5uYW1lQ29sdW1uVGl0bGVfO30sdG9nZ2xlTmFtZUNvbHVtbldpZHRoXyhvcHRfZXZlbnQpe3RoaXMudmlld1N0YXRlLnVwZGF0ZSh7Y29uc3RyYWluTmFtZUNvbHVtbjohdGhpcy52aWV3U3RhdGUuY29uc3RyYWluTmFtZUNvbHVtbix9KTtpZihvcHRfZXZlbnQhPT11bmRlZmluZWQpe29wdF9ldmVudC5zdG9wUHJvcGFnYXRpb24oKTtvcHRfZXZlbnQucHJldmVudERlZmF1bHQoKTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywnbmFtZUNvbHVtbicrCih0aGlzLnZpZXdTdGF0ZS5jb25zdHJhaW5OYW1lQ29sdW1uPydDb25zdHJhaW5lZCc6J1VuY29uc3RyYWluZWQnKSk7fX0sYnVpbGRDb2x1bW5fKGRpc3BsYXlMYWJlbCl7Y29uc3QgdGl0bGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnc3BhbicpO3RpdGxlLnRleHRDb250ZW50PWRpc3BsYXlMYWJlbDt0aXRsZS5zdHlsZS53aGl0ZVNwYWNlPSdwcmUnO3JldHVybntkaXNwbGF5TGFiZWwsdGl0bGUsdmFsdWU6cm93PT5yb3cuZ2V0Q2VsbChkaXNwbGF5TGFiZWwpLGNtcDoocm93QSxyb3dCKT0+cm93QS5jb21wYXJlQ2VsbHMocm93QixkaXNwbGF5TGFiZWwpLH07fSxhc3luYyB1cGRhdGVDb250ZW50c18oKXtjb25zdCBwcmV2aW91c1Jvd1N0YXRlcz10aGlzLnZpZXdTdGF0ZS50YWJsZVJvd1N0YXRlcztpZighdGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfKXthd2FpdCB0aGlzLnByb2dyZXNzXygnRmlsdGVyaW5nIHJvd3MuLi4nKTt0aGlzLmZpbHRlcmVkSGlzdG9ncmFtc189dGhpcy52aWV3U3RhdGUuc2hvd0FsbD90aGlzLmhpc3RvZ3JhbXM6dGhpcy5zb3VyY2VIaXN0b2dyYW1zXztpZih0aGlzLnZpZXdTdGF0ZS5zZWFyY2hRdWVyeSl7bGV0IHF1ZXJ5O3RyeXtxdWVyeT1uZXcgUmVnRXhwKHRoaXMudmlld1N0YXRlLnNlYXJjaFF1ZXJ5KTt9Y2F0Y2goZSl7fQppZihxdWVyeSE9PXVuZGVmaW5lZCl7dGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfPW5ldyB0ci52Lkhpc3RvZ3JhbVNldChbLi4udGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfXS5maWx0ZXIoaGlzdD0+aGlzdC5uYW1lLm1hdGNoKHF1ZXJ5KSkpO2lmKHRoaXMuZmlsdGVyZWRIaXN0b2dyYW1zXy5sZW5ndGg9PT0wJiYhdGhpcy52aWV3U3RhdGUuc2hvd0FsbCl7YXdhaXQgdGhpcy52aWV3U3RhdGUudXBkYXRlKHtzaG93QWxsOnRydWV9KTtyZXR1cm47fX19CnRoaXMuZ3JvdXBlZEhpc3RvZ3JhbXNfPXVuZGVmaW5lZDt9CmlmKCF0aGlzLmdyb3VwZWRIaXN0b2dyYW1zXyl7YXdhaXQgdGhpcy5wcm9ncmVzc18oJ0dyb3VwaW5nIEhpc3RvZ3JhbXMuLi4nKTt0aGlzLmdyb3VwSGlzdG9ncmFtc18oKTt9CmlmKCF0aGlzLmhpZXJhcmNoaWVzXyl7YXdhaXQgdGhpcy5wcm9ncmVzc18oJ01lcmdpbmcgSGlzdG9ncmFtcy4uLicpO3RoaXMuaGllcmFyY2hpZXNfPXRyLnYuSGlzdG9ncmFtU2V0SGllcmFyY2h5LmJ1aWxkKHRoaXMuZ3JvdXBlZEhpc3RvZ3JhbXNfKTt0aGlzLnRhYmxlUm93c189dW5kZWZpbmVkO30KY29uc3QgdGFibGVSb3dzRGlydHk9dGhpcy50YWJsZVJvd3NfPT09dW5kZWZpbmVkO2lmKHRhYmxlUm93c0RpcnR5KXt0aGlzLnRhYmxlUm93c189dGhpcy5oaWVyYXJjaGllc18ubWFwKGhpZXJhcmNoeT0+bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3coaGllcmFyY2h5LHRoaXMuJC50YWJsZSx0aGlzLnZpZXdTdGF0ZSkpO3RyLmIuVGltaW5nLmluc3RhbnQoJ2hpc3RvZ3JhbS1zZXQtdGFibGUnLCdyb290Um93Q291bnQnLHRoaXMudGFibGVSb3dzXy5sZW5ndGgpO2NvbnN0IG5hbWVzVG9Sb3dTdGF0ZXM9bmV3IE1hcCgpO2Zvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZVJvd3NfKXtuYW1lc1RvUm93U3RhdGVzLnNldChyb3cubmFtZSxyb3cudmlld1N0YXRlKTt9CmF3YWl0IHRoaXMudmlld1N0YXRlLnVwZGF0ZSh7dGFibGVSb3dTdGF0ZXM6bmFtZXNUb1Jvd1N0YXRlc30pO30KYXdhaXQgdGhpcy5wcm9ncmVzc18oJ0NvbmZpZ3VyaW5nIHRhYmxlLi4uJyk7dGhpcy5uYW1lQ29sdW1uVGl0bGVfLmNoaWxkcmVuWzFdLnN0eWxlLmZpbHRlcj10aGlzLnZpZXdTdGF0ZS5jb25zdHJhaW5OYW1lQ29sdW1uPydpbnZlcnQoMTAwJSknOicnO2NvbnN0IHJlZmVyZW5jZURpc3BsYXlMYWJlbEluZGV4PXRoaXMuZGlzcGxheUxhYmVsc18uaW5kZXhPZih0aGlzLnZpZXdTdGF0ZS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwpO3RoaXMuJC50YWJsZS5zZWxlY3RlZFRhYmxlQ29sdW1uSW5kZXg9KHJlZmVyZW5jZURpc3BsYXlMYWJlbEluZGV4PDApP3VuZGVmaW5lZDooMStyZWZlcmVuY2VEaXNwbGF5TGFiZWxJbmRleCk7dGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJyx0aGlzLnNvcnRDb2x1bW5DaGFuZ2VkTGlzdGVuZXJfKTt0aGlzLiQudGFibGUuc29ydENvbHVtbkluZGV4PXRoaXMudmlld1N0YXRlLnNvcnRDb2x1bW5JbmRleDt0aGlzLiQudGFibGUuc29ydERlc2NlbmRpbmc9dGhpcy52aWV3U3RhdGUuc29ydERlc2NlbmRpbmc7dGhpcy5hZGRFdmVudExpc3RlbmVyKCdzb3J0LWNvbHVtbi1jaGFuZ2VkJyx0aGlzLnNvcnRDb2x1bW5DaGFuZ2VkTGlzdGVuZXJfKTtpZih0YWJsZVJvd3NEaXJ0eSl7YXdhaXQgdGhpcy5wcm9ncmVzc18oJ0J1aWxkaW5nIERPTS4uLicpO3RoaXMuJC50YWJsZS50YWJsZVJvd3M9dGhpcy50YWJsZVJvd3NfO2Zvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZVJvd3NfKXtjb25zdCBwcmV2aW91c1N0YXRlPXByZXZpb3VzUm93U3RhdGVzLmdldChyb3cubmFtZSk7aWYoIXByZXZpb3VzU3RhdGUpY29udGludWU7YXdhaXQgcm93LnJlc3RvcmVTdGF0ZShwcmV2aW91c1N0YXRlKTt9fQp0aGlzLiQudGFibGUucmVidWlsZCgpO30sYXN5bmMgb25Sb3dFeHBhbmRlZENoYW5nZWRfKGV2ZW50KXtldmVudC5yb3cudmlld1N0YXRlLmlzRXhwYW5kZWQ9dGhpcy4kLnRhYmxlLmdldEV4cGFuZGVkRm9yVGFibGVSb3coZXZlbnQucm93KTt0ci5iLlRpbWluZy5pbnN0YW50KCdoaXN0b2dyYW0tc2V0LXRhYmxlJywncm93JysoZXZlbnQucm93LnZpZXdTdGF0ZS5pc0V4cGFuZGVkPydFeHBhbmRlZCc6J0NvbGxhcHNlZCcpKTtpZih0aGlzLm5hbWVDb2x1bW5UaXRsZV8uY2hpbGRyZW5bMV0uc3R5bGUuZGlzcGxheT09PSdibG9jaycpcmV0dXJuO2F3YWl0IHRyLmIuYW5pbWF0aW9uRnJhbWUoKTt0aGlzLmNoZWNrTmFtZUNvbHVtbk92ZXJmbG93XyhldmVudC5yb3cuc3ViUm93cyk7fSxjaGVja05hbWVDb2x1bW5PdmVyZmxvd18ocm93cyl7Zm9yKGNvbnN0IHJvdyBvZiByb3dzKXtpZighcm93Lm5hbWVDZWxsLmlzT3ZlcmZsb3dpbmcpY29udGludWU7Y29uc3RbbmFtZVNwYW4sZG90c109QXJyYXkuZnJvbSh0aGlzLm5hbWVDb2x1bW5UaXRsZV8uY2hpbGRyZW4pO2RvdHMuc3R5bGUuZGlzcGxheT0nYmxvY2snO2NvbnN0IGxhYmVsV2lkdGhQeD10ci52LnVpLk5BTUVfQ09MVU1OX1dJRFRIX1BYLQpkb3RzLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpLndpZHRoO25hbWVTcGFuLnN0eWxlLndpZHRoPWxhYmVsV2lkdGhQeCsncHgnO3JldHVybjt9fSxncm91cEhpc3RvZ3JhbXNfKCl7Y29uc3QgZ3JvdXBpbmdzPXRoaXMudmlld1N0YXRlLmdyb3VwaW5ncy5zbGljZSgpO2dyb3VwaW5ncy5wdXNoKHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTCk7ZnVuY3Rpb24gY2FuU2tpcEdyb3VwaW5nKGdyb3VwaW5nLGdyb3VwZWRIaXN0b2dyYW1zKXtpZihncm91cGVkSGlzdG9ncmFtcy5zaXplPjEpcmV0dXJuIGZhbHNlO2lmKGdyb3VwaW5nLmtleT09PWdyb3VwaW5nc1swXS5rZXkpcmV0dXJuIGZhbHNlO2lmKGdyb3VwaW5nLmtleT09PXRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTC5rZXkpe3JldHVybiBmYWxzZTt9CnJldHVybiB0cnVlO30KdGhpcy5ncm91cGVkSGlzdG9ncmFtc189dGhpcy5maWx0ZXJlZEhpc3RvZ3JhbXNfLmdyb3VwSGlzdG9ncmFtc1JlY3Vyc2l2ZWx5KGdyb3VwaW5ncyxjYW5Ta2lwR3JvdXBpbmcpO3RoaXMuaGllcmFyY2hpZXNfPXVuZGVmaW5lZDt9LGFzeW5jIG9uVmlld1N0YXRlVXBkYXRlXyhldmVudCl7aWYodGhpcy5oaXN0b2dyYW1zXz09PXVuZGVmaW5lZClyZXR1cm47aWYoZXZlbnQuZGVsdGEuc2VhcmNoUXVlcnkhPT11bmRlZmluZWR8fGV2ZW50LmRlbHRhLnNob3dBbGwhPT11bmRlZmluZWQpe3RoaXMuZmlsdGVyZWRIaXN0b2dyYW1zXz11bmRlZmluZWQ7fQppZihldmVudC5kZWx0YS5ncm91cGluZ3MhPT11bmRlZmluZWQpe3RoaXMuZ3JvdXBlZEhpc3RvZ3JhbXNfPXVuZGVmaW5lZDt9CmlmKGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWMhPT11bmRlZmluZWQmJnRoaXMuJC50YWJsZS5zb3J0Q29sdW1uSW5kZXg+MCl7dGhpcy4kLnRhYmxlLnNvcnRDb2x1bW5JbmRleD11bmRlZmluZWQ7fQppZihldmVudC5kZWx0YS5yZWZlcmVuY2VEaXNwbGF5TGFiZWwhPT11bmRlZmluZWR8fGV2ZW50LmRlbHRhLmRpc3BsYXlTdGF0aXN0aWNOYW1lIT09dW5kZWZpbmVkKXt0aGlzLiQudGFibGUudGFibGVSb3dzPXRoaXMuJC50YWJsZS50YWJsZVJvd3M7fQppZihldmVudC5kZWx0YS50YWJsZVJvd1N0YXRlcyl7aWYodGhpcy50YWJsZVJvd3NfLmxlbmd0aCE9PXRoaXMudmlld1N0YXRlLnRhYmxlUm93U3RhdGVzLnNpemUpe3Rocm93IG5ldyBFcnJvcignT25seSBoaXN0b2dyYW0tc2V0LXRhYmxlIG1heSB1cGRhdGUgdGFibGVSb3dTdGF0ZXMnKTt9CmZvcihjb25zdCByb3cgb2YgdGhpcy50YWJsZVJvd3NfKXtpZih0aGlzLnZpZXdTdGF0ZS50YWJsZVJvd1N0YXRlcy5nZXQocm93Lm5hbWUpIT09cm93LnZpZXdTdGF0ZSl7dGhyb3cgbmV3IEVycm9yKCdPbmx5IGhpc3RvZ3JhbS1zZXQtdGFibGUgbWF5IHVwZGF0ZSB0YWJsZVJvd1N0YXRlcycpO319CnJldHVybjt9CmF3YWl0IHRoaXMudXBkYXRlQ29udGVudHNfKCk7fSxvblNvcnRDb2x1bW5DaGFuZ2VkXyhldmVudCl7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZScsJ3NvcnRDb2x1bW4nKTt0aGlzLnZpZXdTdGF0ZS51cGRhdGUoe3NvcnRDb2x1bW5JbmRleDpldmVudC5zb3J0Q29sdW1uSW5kZXgsc29ydERlc2NlbmRpbmc6ZXZlbnQuc29ydERlc2NlbmRpbmcsfSk7fSxvblJlcXVlc3RTZWxlY3Rpb25DaGFuZ2VfKGV2ZW50KXtpZihldmVudC5zZWxlY3Rpb24gaW5zdGFuY2VvZiB0ci5tb2RlbC5FdmVudFNldClyZXR1cm47ZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7dHIuYi5UaW1pbmcuaW5zdGFudCgnaGlzdG9ncmFtLXNldC10YWJsZScsJ3NlbGVjdEhpc3RvZ3JhbU5hbWVzJyk7bGV0IGhpc3RvZ3JhbU5hbWVzPWV2ZW50LnNlbGVjdGlvbjtoaXN0b2dyYW1OYW1lcy5zb3J0KCk7aGlzdG9ncmFtTmFtZXM9aGlzdG9ncmFtTmFtZXMubWFwKGVzY2FwZVJlZ0V4cCkuam9pbignfCcpO3RoaXMudmlld1N0YXRlLnVwZGF0ZSh7c2hvd0FsbDp0cnVlLHNlYXJjaFF1ZXJ5OmBeKCR7aGlzdG9ncmFtTmFtZXN9KSRgLH0pO30sZ2V0IGxlYWZIaXN0b2dyYW1zKCl7Y29uc3QgaGlzdG9ncmFtcz1uZXcgdHIudi5IaXN0b2dyYW1TZXQoKTtmb3IoY29uc3Qgcm93IG9mCnRyLnYudWkuSGlzdG9ncmFtU2V0VGFibGVSb3cud2Fsa0FsbCh0aGlzLiQudGFibGUudGFibGVSb3dzKSl7aWYocm93LnN1YlJvd3MubGVuZ3RoKWNvbnRpbnVlO2Zvcihjb25zdCBoaXN0IG9mIHJvdy5jb2x1bW5zLnZhbHVlcygpKXtpZighKGhpc3QgaW5zdGFuY2VvZiB0ci52Lkhpc3RvZ3JhbSkpY29udGludWU7aGlzdG9ncmFtcy5hZGRIaXN0b2dyYW0oaGlzdCk7fX0KcmV0dXJuIGhpc3RvZ3JhbXM7fX0pO3JldHVybntNSURMSU5FX0hPUklaT05UQUxfRUxMSVBTSVMsfTt9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgUEFHRV9CUkVBS0RPV05fS0VZPSdwYWdlQnJlYWtkb3duJztQb2x5bWVyKHtpczondHItdi11aS1tZXRyaWNzLXZpc3VhbGl6YXRpb24nLGNyZWF0ZWQoKXt0aGlzLmNoYXJ0c189bmV3IE1hcCgpO30scmVhZHkoKXt0aGlzLiQuc3RhcnQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsKGUpPT57aWYoZS5rZXk9PT0nRW50ZXInKXRoaXMuZmlsdGVyQnlQZXJjZW50aWxlXygpO30pO3RoaXMuJC5lbmQuYWRkRXZlbnRMaXN0ZW5lcigna2V5ZG93bicsKGUpPT57aWYoZS5rZXk9PT0nRW50ZXInKXRoaXMuZmlsdGVyQnlQZXJjZW50aWxlXygpO30pO3RoaXMuJC5zZWFyY2hfcGFnZS5hZGRFdmVudExpc3RlbmVyKCdrZXlkb3duJywoZSk9PntpZihlLmtleT09PSdFbnRlcicpdGhpcy5zZWFyY2hCeVBhZ2VfKCk7fSk7fSxidWlsZChjaGFydERhdGEpe3RoaXMudGl0bGVfPWNoYXJ0RGF0YS50aXRsZTt0aGlzLmFnZ3JlZ2F0ZURhdGFfPWNoYXJ0RGF0YS5hZ2dyZWdhdGU7dGhpcy5kYXRhXz1jaGFydERhdGEucGFnZTt0aGlzLnN1Ym1ldHJpY3NEYXRhXz1jaGFydERhdGEuc3VibWV0cmljczt0aGlzLmJlbmNobWFya0NvdW50Xz1jaGFydERhdGEuYWdncmVnYXRlLmxlbmd0aDtjb25zdCBhZ2dyZWdhdGVDaGFydD10aGlzLmluaXRpYWxpemVDb2x1bW5DaGFydCh0aGlzLnRpdGxlXyk7UG9seW1lci5kb20odGhpcy4kLmFnZ3JlZ2F0ZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQoYWdncmVnYXRlQ2hhcnQpO3RoaXMuY2hhcnRzXy5zZXQodHIudi51aS5BR0dSRUdBVEVfS0VZLGFnZ3JlZ2F0ZUNoYXJ0KTt0aGlzLnNldENoYXJ0Q29sb3JzXyh0ci52LnVpLkFHR1JFR0FURV9LRVkpO2FnZ3JlZ2F0ZUNoYXJ0LmRhdGE9Y2hhcnREYXRhLmFnZ3JlZ2F0ZTt0aGlzLnNldENoYXJ0U2l6ZV8odHIudi51aS5BR0dSRUdBVEVfS0VZKTtjb25zdCBuZXdDaGFydD10aGlzLmluaXRpYWxpemVDb2x1bW5DaGFydCh0aGlzLnRpdGxlXysnIEJyZWFrZG93bicpO25ld0NoYXJ0LmVuYWJsZVRvb2xUaXA9dHJ1ZTtuZXdDaGFydC50b29sVGlwQ2FsbEJhY2s9KHJlY3QpPT50aGlzLm9wZW5DaGlsZENoYXJ0XyhyZWN0KTtQb2x5bWVyLmRvbSh0aGlzLiQucGFnZUJ5UGFnZUNvbnRhaW5lcikuYXBwZW5kQ2hpbGQobmV3Q2hhcnQpO3RoaXMuY2hhcnRzXy5zZXQoUEFHRV9CUkVBS0RPV05fS0VZLG5ld0NoYXJ0KTt0aGlzLnNldENoYXJ0Q29sb3JzXyhQQUdFX0JSRUFLRE9XTl9LRVkpO25ld0NoYXJ0LmRhdGE9dGhpcy5kYXRhXzt0aGlzLnNldENoYXJ0U2l6ZV8oUEFHRV9CUkVBS0RPV05fS0VZKTt9LHNldENoYXJ0U2l6ZV8ocGFnZSl7Y29uc3QgY2hhcnQ9dGhpcy5jaGFydHNfLmdldChwYWdlKTtjb25zdCBwYWdlQ291bnQ9Y2hhcnQuZGF0YS5sZW5ndGg7Y2hhcnQuZ3JhcGhIZWlnaHQ9dHIuYi5tYXRoLmNsYW1wKHBhZ2VDb3VudCoyMCw0MDAsNjAwKTtjaGFydC5ncmFwaFdpZHRoPXRyLmIubWF0aC5jbGFtcChwYWdlQ291bnQqMzAsMjAwLDEwMDApO30sc2V0Q2hhcnRDb2xvcnNfKHBhZ2Upe2NvbnN0IGNoYXJ0PXRoaXMuY2hhcnRzXy5nZXQocGFnZSk7Y29uc3QgbWV0cmljcz10ci52LnVpLk1FVFJJQ1MuZ2V0KHRoaXMudGl0bGVfKTtmb3IobGV0IGk9MDtpPHRoaXMuYmVuY2htYXJrQ291bnRfOysraSl7Zm9yKGxldCBqPTA7ajxtZXRyaWNzLmxlbmd0aDsrK2ope2NvbnN0IG1haW5Db2xvckluZGV4PWoldHIudi51aS5DT0xPUlMubGVuZ3RoO2NvbnN0IHN1YkNvbG9ySW5kZXg9aSV0ci52LnVpLkNPTE9SU1ttYWluQ29sb3JJbmRleF0ubGVuZ3RoO2NvbnN0IGNvbG9yPXRyLnYudWkuQ09MT1JTW21haW5Db2xvckluZGV4XVtzdWJDb2xvckluZGV4XTtjb25zdCBzZXJpZXM9bWV0cmljc1tqXSsnLScrdGhpcy5hZ2dyZWdhdGVEYXRhX1tpXS54O2NoYXJ0LmdldERhdGFTZXJpZXMoc2VyaWVzKS5jb2xvcj1jb2xvcjtpZihpPT09MCl7Y2hhcnQuZ2V0RGF0YVNlcmllcyhzZXJpZXMpLnRpdGxlPW1ldHJpY3Nbal07fWVsc2V7Y2hhcnQuZ2V0RGF0YVNlcmllcyhzZXJpZXMpLnRpdGxlPScnO319fX0saW5pdGlhbGl6ZUNvbHVtbkNoYXJ0KHRpdGxlKXtjb25zdCBuZXdDaGFydD1uZXcgdHIudWkuYi5OYW1lQ29sdW1uQ2hhcnQoKTtuZXdDaGFydC5oaWRlTGVnZW5kPWZhbHNlO25ld0NoYXJ0LmlzU3RhY2tlZD10cnVlO25ld0NoYXJ0LnlBeGlzTGFiZWw9J21zJztuZXdDaGFydC5oaWRlWEF4aXM9dHJ1ZTtuZXdDaGFydC5kaXNwbGF5WEluSG92ZXI9dHJ1ZTtuZXdDaGFydC5pc0dyb3VwZWQ9dHJ1ZTtuZXdDaGFydC5zaG93VGl0bGVJbkxlZ2VuZD10cnVlO25ld0NoYXJ0LmNoYXJ0VGl0bGU9dGl0bGU7bmV3Q2hhcnQudGl0bGVIZWlnaHQ9JzE0cHQnO3JldHVybiBuZXdDaGFydDt9LGluaXRpYWxpemVDaGlsZENoYXJ0Xyh0aXRsZSxoZWlnaHQsd2lkdGgpe2NvbnN0IGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtkaXYuY2xhc3NMaXN0LmFkZCgnY29udGFpbmVyJyk7UG9seW1lci5kb20odGhpcy4kLnN1Ym1ldHJpY3NDb250YWluZXIpLmluc2VydEJlZm9yZShkaXYsdGhpcy4kLnN1Ym1ldHJpY3NDb250YWluZXIuZmlyc3RDaGlsZCk7Y29uc3QgY2hpbGRDaGFydD1uZXcgdHIudWkuYi5OYW1lQmFyQ2hhcnQoKTtjaGlsZENoYXJ0LnhBeGlzTGFiZWw9J21zJztjaGlsZENoYXJ0LmNoYXJ0VGl0bGU9dGl0bGU7Y2hpbGRDaGFydC5ncmFwaEhlaWdodD1oZWlnaHQ7Y2hpbGRDaGFydC5ncmFwaFdpZHRoPXdpZHRoO2NoaWxkQ2hhcnQudGl0bGVIZWlnaHQ9JzE0cHQnO2NoaWxkQ2hhcnQuaXNTdGFja2VkPXRydWU7Y2hpbGRDaGFydC5oaWRlTGVnZW5kPXRydWU7Y2hpbGRDaGFydC5pc0dyb3VwZWQ9dHJ1ZTtjaGlsZENoYXJ0LmlzV2F0ZXJmYWxsPXRydWU7ZGl2LmFwcGVuZENoaWxkKGNoaWxkQ2hhcnQpO2NvbnN0IGJ1dHRvbj10aGlzLmluaXRpYWxpemVDbG9zZUJ1dHRvbl8oZGl2LHRoaXMuJC5zdWJtZXRyaWNzQ29udGFpbmVyKTtkaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtyZXR1cm4gY2hpbGRDaGFydDt9LGluaXRpYWxpemVDbG9zZUJ1dHRvbl8oZGl2LHBhcmVudCl7Y29uc3QgYnV0dG9uPXRoaXMuJC5jbG9zZS5jbG9uZU5vZGUodHJ1ZSk7YnV0dG9uLnN0eWxlLmRpc3BsYXk9J2lubGluZS1ibG9jayc7YnV0dG9uLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywoKT0+e1BvbHltZXIuZG9tKHBhcmVudCkucmVtb3ZlQ2hpbGQoZGl2KTt9KTtyZXR1cm4gYnV0dG9uO30sb3BlbkNoaWxkQ2hhcnRfKHJlY3Qpe2NvbnN0IG1ldHJpY3M9dHIudi51aS5NRVRSSUNTLmdldCh0aGlzLnRpdGxlXyk7bGV0IG1ldHJpYztsZXQgbWV0cmljSW5kZXg7Zm9yKGxldCBpPTA7aTxtZXRyaWNzLmxlbmd0aDsrK2kpe2lmKHJlY3Qua2V5LnN0YXJ0c1dpdGgobWV0cmljc1tpXSkpe21ldHJpYz1tZXRyaWNzW2ldO21ldHJpY0luZGV4PWk7YnJlYWs7fX0KY29uc3QgcGFnZT1yZWN0LmRhdHVtLmdyb3VwO2NvbnN0IHRpdGxlPXRoaXMudGl0bGVfKycgJyttZXRyaWMrJzogJytwYWdlO2NvbnN0IHN1Ym1ldHJpY3M9dGhpcy5zdWJtZXRyaWNzRGF0YV8uZ2V0KHBhZ2UpLmdldChtZXRyaWMpO2NvbnN0IHdpZHRoPXRyLmIubWF0aC5jbGFtcChzdWJtZXRyaWNzLnNpemUqMTUwLDMwMCw3MDApO2NvbnN0IGhlaWdodD10ci5iLm1hdGguY2xhbXAoc3VibWV0cmljcy5zaXplKnRoaXMuYmVuY2htYXJrQ291bnRfKjUwLDMwMCw3MDApO2NvbnN0IGNoaWxkQ2hhcnQ9dGhpcy5pbml0aWFsaXplQ2hpbGRDaGFydF8odGl0bGUsaGVpZ2h0LHdpZHRoKTtjaGlsZENoYXJ0LmRhdGE9dGhpcy5wcm9jZXNzU3VibWV0cmljc18oY2hpbGRDaGFydCxzdWJtZXRyaWNzLDAsbWV0cmljSW5kZXgpLmRhdGE7fSxwcm9jZXNzU3VibWV0cmljc18oY2hhcnQsc3VibWV0cmljcyxoaWRlVmFsdWUsbWV0cmljSW5kZXgpe2NvbnN0IGZpbmFsRGF0YT1bXTtsZXQgc3VibWV0cmljSW5kZXg9MDtmb3IoY29uc3Qgc3VibWV0cmljIG9mIHN1Ym1ldHJpY3MudmFsdWVzKCkpe2xldCBiZW5jaG1hcmtJbmRleD0wO2Zvcihjb25zdCBiZW5jaG1hcmsgb2Ygc3VibWV0cmljLnZhbHVlcygpKXtiZW5jaG1hcmsuaGlkZT0haGlkZVZhbHVlPzA6aGlkZVZhbHVlO2NvbnN0IHNlcmllcz1iZW5jaG1hcmsueCsnLScrYmVuY2htYXJrLmdyb3VwO2NvbnN0IG1haW5Db2xvckluZGV4PW1ldHJpY0luZGV4JXRyLnYudWkuQ09MT1JTLmxlbmd0aDtjb25zdCBzdWJDb2xvckluZGV4PWJlbmNobWFya0luZGV4JXRyLnYudWkuQ09MT1JTW21haW5Db2xvckluZGV4XS5sZW5ndGg7Y2hhcnQuZ2V0RGF0YVNlcmllcyhzZXJpZXMpLmNvbG9yPXRyLnYudWkuQ09MT1JTW21haW5Db2xvckluZGV4XVtzdWJDb2xvckluZGV4XTtpZihiZW5jaG1hcmtJbmRleD09PSh0aGlzLmJlbmNobWFya0NvdW50Xy0xKSl7aGlkZVZhbHVlKz1iZW5jaG1hcmtbc2VyaWVzXTt9CmZpbmFsRGF0YS5wdXNoKGJlbmNobWFyayk7YmVuY2htYXJrSW5kZXgrKzt9CnN1Ym1ldHJpY0luZGV4Kys7fQpyZXR1cm57ZGF0YTpmaW5hbERhdGEsaGlkZTpoaWRlVmFsdWV9O30sZmlsdGVyQnlQZXJjZW50aWxlXygpe2NvbnN0IHN0YXJ0UGVyY2VudGlsZT10aGlzLiQuc3RhcnQudmFsdWU7Y29uc3QgZW5kUGVyY2VudGlsZT10aGlzLiQuZW5kLnZhbHVlO2lmKHN0YXJ0UGVyY2VudGlsZT09PScnfHxlbmRQZXJjZW50aWxlPT09JycpcmV0dXJuO2NvbnN0IGxlbmd0aD10aGlzLmRhdGFfLmxlbmd0aC8odGhpcy5iZW5jaG1hcmtDb3VudF8rMSk7Y29uc3Qgc3RhcnRJbmRleD10aGlzLmdldFBlcmNlbnRpbGVJbmRleF8oc3RhcnRQZXJjZW50aWxlLGxlbmd0aCk7Y29uc3QgZW5kSW5kZXg9dGhpcy5nZXRQZXJjZW50aWxlSW5kZXhfKGVuZFBlcmNlbnRpbGUsbGVuZ3RoKTt0aGlzLmNoYXJ0c18uZ2V0KFBBR0VfQlJFQUtET1dOX0tFWSkuZGF0YT10aGlzLmRhdGFfLnNsaWNlKHN0YXJ0SW5kZXgsZW5kSW5kZXgpO30sZ2V0UGVyY2VudGlsZUluZGV4XyhwZXJjZW50aWxlLGFycmF5TGVuZ3RoKXtjb25zdCBpbmRleD1NYXRoLmNlaWwoYXJyYXlMZW5ndGgqKHBlcmNlbnRpbGUvMTAwLjApKTtpZihpbmRleD09PS0xKXJldHVybiAwO2lmKGluZGV4Pj1hcnJheUxlbmd0aClyZXR1cm4gYXJyYXlMZW5ndGg7cmV0dXJuIGluZGV4KnRoaXMuYmVuY2htYXJrQ291bnRfO30sc2VhcmNoQnlQYWdlXygpe2NvbnN0IGNyaXRlcmlhPXRoaXMuJC5zZWFyY2hfcGFnZS52YWx1ZTtpZihjcml0ZXJpYT09PScnKXJldHVybjtjb25zdCBxdWVyeT1uZXcgUmVnRXhwKGNyaXRlcmlhKTtjb25zdCBmaWx0ZXJlZERhdGE9Wy4uLnRoaXMuZGF0YV9dLmZpbHRlcihncm91cD0+e2lmKGdyb3VwLmdyb3VwKXJldHVybiBncm91cC5ncm91cC5tYXRjaChxdWVyeSk7cmV0dXJuIGZhbHNlO30pO2lmKGZpbHRlcmVkRGF0YS5sZW5ndGg8MSl7dGhpcy4kLnNlYXJjaF9lcnJvci5zdHlsZS5kaXNwbGF5PSdibG9jayc7cmV0dXJuO30KY29uc3QgcGFnZT1maWx0ZXJlZERhdGFbMF0uZ3JvdXA7Y29uc3QgdGl0bGU9dGhpcy50aXRsZV8rJyBCcmVha2Rvd246ICcrcGFnZTtjb25zdCBtZXRyaWNUb1N1Ym1ldHJpY01hcD10aGlzLnN1Ym1ldHJpY3NEYXRhXy5nZXQocGFnZSk7bGV0IHRvdGFsU3VibWV0cmljcz0wO2Zvcihjb25zdCBzdWJtZXRyaWNzIG9mIG1ldHJpY1RvU3VibWV0cmljTWFwLnZhbHVlcygpKXtmb3IoY29uc3QgYmVuY2htYXJrIG9mIHN1Ym1ldHJpY3MudmFsdWVzKCkpe3RvdGFsU3VibWV0cmljcys9YmVuY2htYXJrLmxlbmd0aDt9fQpjb25zdCB3aWR0aD10ci5iLm1hdGguY2xhbXAodG90YWxTdWJtZXRyaWNzKjE1MCwzMDAsNzAwKTtjb25zdCBoZWlnaHQ9dHIuYi5tYXRoLmNsYW1wKHRvdGFsU3VibWV0cmljcyp0aGlzLmJlbmNobWFya0NvdW50XyozMCwzMDAsNzAwKTtjb25zdCBjaGlsZENoYXJ0PXRoaXMuaW5pdGlhbGl6ZUNoaWxkQ2hhcnRfKHRpdGxlLGhlaWdodCx3aWR0aCk7Y29uc3QgY2hpbGREYXRhPVtdO2xldCBoaWRlPTA7bGV0IG1ldHJpY0luZGV4PTA7Zm9yKGNvbnN0IHN1Ym1ldHJpY3Mgb2YgbWV0cmljVG9TdWJtZXRyaWNNYXAudmFsdWVzKCkpe2NvbnN0IHN1Ym1ldHJpY3NEYXRhPXRoaXMucHJvY2Vzc1N1Ym1ldHJpY3NfKGNoaWxkQ2hhcnQsc3VibWV0cmljcyxoaWRlLG1ldHJpY0luZGV4KTtjaGlsZERhdGEucHVzaCguLi5zdWJtZXRyaWNzRGF0YS5kYXRhKTtoaWRlPXN1Ym1ldHJpY3NEYXRhLmhpZGU7bWV0cmljSW5kZXgrKzt9CmNoaWxkQ2hhcnQuZGF0YT1jaGlsZERhdGE7fSx9KTt9KTsndXNlIHN0cmljdCc7UG9seW1lcih7aXM6J3RyLXYtdWktcmFzdGVyLXZpc3VhbGl6YXRpb24nLHJlYWR5KCl7dGhpcy4kLnBhZ2VTZWxlY3Rvci5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9Pnt0aGlzLnNlbGVjdFBhZ2VfKCk7fSk7dGhpcy4kLnNlYXJjaF9wYWdlLmFkZEV2ZW50TGlzdGVuZXIoJ2tleWRvd24nLChlKT0+e2lmKGUua2V5PT09J0VudGVyJyl0aGlzLnNlYXJjaEJ5UGFnZV8oKTt9KTt0aGlzLiQuc2VhcmNoX2J1dHRvbi5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsKCk9Pnt0aGlzLnNlYXJjaEJ5UGFnZV8oKTt9KTt9LGJ1aWxkKGNoYXJ0RGF0YSl7dGhpcy5kYXRhXz1jaGFydERhdGE7Y29uc3QgYWdncmVnYXRlQ2hhcnQ9dGhpcy5jcmVhdGVDaGFydF8oJ0FnZ3JlZ2F0ZSBEYXRhIGJ5IFJ1bicpO1BvbHltZXIuZG9tKHRoaXMuJC5hZ2dyZWdhdGVDb250YWluZXIpLmFwcGVuZENoaWxkKGFnZ3JlZ2F0ZUNoYXJ0KTthZ2dyZWdhdGVDaGFydC5lbmFibGVUb29sVGlwPXRydWU7YWdncmVnYXRlQ2hhcnQudG9vbFRpcENhbGxCYWNrPShyZWN0KT0+dGhpcy5vcGVuQmVuY2htYXJrQ2hhcnRfKHJlY3QpO3RoaXMuc2V0Q2hhcnRDb2xvcnNfKGFnZ3JlZ2F0ZUNoYXJ0LHRoaXMuZGF0YV8uZ2V0KHRyLnYudWkuQUdHUkVHQVRFX0tFWSkpO2FnZ3JlZ2F0ZUNoYXJ0LmRhdGE9dGhpcy5kYXRhXy5nZXQodHIudi51aS5BR0dSRUdBVEVfS0VZKTt0aGlzLnNldENoYXJ0U2l6ZV8oYWdncmVnYXRlQ2hhcnQsdGhpcy5kYXRhXy5nZXQodHIudi51aS5BR0dSRUdBVEVfS0VZKS5sZW5ndGgpO2Zvcihjb25zdCBwYWdlIG9mIHRoaXMuZGF0YV8ua2V5cygpKXtpZihwYWdlPT09dHIudi51aS5BR0dSRUdBVEVfS0VZKWNvbnRpbnVlO2NvbnN0IG9wdGlvbj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdvcHRpb24nKTtvcHRpb24udGV4dENvbnRlbnQ9cGFnZTtvcHRpb24udmFsdWU9cGFnZTt0aGlzLiQucGFnZVNlbGVjdG9yLmFwcGVuZENoaWxkKG9wdGlvbik7fX0sc2V0Q2hhcnRTaXplXyhjaGFydCxwYWdlQ291bnQsZGF0YUxlbmd0aCl7Y2hhcnQuZ3JhcGhIZWlnaHQ9dHIuYi5tYXRoLmNsYW1wKHBhZ2VDb3VudCoyNSwxNzUsMTAwMCk7Y2hhcnQuZ3JhcGhXaWR0aD10ci5iLm1hdGguY2xhbXAocGFnZUNvdW50KjI1LDUwMCwxMDAwKTt9LHNldENoYXJ0Q29sb3JzXyhjaGFydCxkYXRhKXtjb25zdCBtZXRyaWNzPW5ldyBNYXAoKTtsZXQgY291bnQ9MDtmb3IoY29uc3QgdGhyZWFkIG9mIHRyLnYudWkuRlJBTUUudmFsdWVzKCkpe2Zvcihjb25zdCBtZXRyaWMgb2YgdGhyZWFkLmtleXMoKSl7bWV0cmljcy5zZXQobWV0cmljLGNvdW50KTtjb3VudCsrO319CmZvcihsZXQgaT0wO2k8TWF0aC5mbG9vcihkYXRhLmxlbmd0aC90ci52LnVpLkZSQU1FLmxlbmd0aCk7KytpKXtsZXQgaj0wO2Zvcihjb25zdFt0aHJlYWROYW1lLHRocmVhZF1vZiB0ci52LnVpLkZSQU1FLmVudHJpZXMoKSl7Zm9yKGNvbnN0IG1ldHJpYyBvZiB0aHJlYWQua2V5cygpKXtsZXQgY29sb3I9J3RyYW5zcGFyZW50JztpZih0aHJlYWQuZ2V0KG1ldHJpYykpe2NvbnN0IG1haW5Db2xvckluZGV4PW1ldHJpY3MuZ2V0KG1ldHJpYykldHIudi51aS5DT0xPUlMubGVuZ3RoO2NvbnN0IHN1YkNvbG9ySW5kZXg9aSV0ci52LnVpLkNPTE9SU1ttYWluQ29sb3JJbmRleF0ubGVuZ3RoO2NvbG9yPXRyLnYudWkuQ09MT1JTW21haW5Db2xvckluZGV4XVtzdWJDb2xvckluZGV4XTt9CmNvbnN0IHNlcmllcz1tZXRyaWMrJy0nK2RhdGFbaSoyK2pdLngrJy0nK3RocmVhZE5hbWU7Y2hhcnQuZ2V0RGF0YVNlcmllcyhzZXJpZXMpLmNvbG9yPWNvbG9yO2NoYXJ0LmdldERhdGFTZXJpZXMoc2VyaWVzKS50aXRsZT0haT9tZXRyaWM6Jyc7fQpqKys7fX19LGNyZWF0ZUNoYXJ0Xyh0aXRsZSl7Y29uc3QgbmV3Q2hhcnQ9bmV3IHRyLnVpLmIuTmFtZUJhckNoYXJ0KCk7bmV3Q2hhcnQuY2hhcnRUaXRsZT10aXRsZTtuZXdDaGFydC54QXhpc0xhYmVsPSdtcyc7bmV3Q2hhcnQuaGlkZUxlZ2VuZD1mYWxzZTtuZXdDaGFydC5zaG93VGl0bGVJbkxlZ2VuZD10cnVlO25ld0NoYXJ0LmhpZGVZQXhpcz10cnVlO25ld0NoYXJ0LmlzU3RhY2tlZD10cnVlO25ld0NoYXJ0LmRpc3BsYXlYSW5Ib3Zlcj10cnVlO25ld0NoYXJ0LmlzR3JvdXBlZD10cnVlO3JldHVybiBuZXdDaGFydDt9LG9wZW5CZW5jaG1hcmtDaGFydF8ocmVjdCl7Y29uc3QgYmVuY2htYXJrSW5kZXg9TWF0aC5mbG9vcihyZWN0LmluZGV4L3RyLnYudWkuRlJBTUUubGVuZ3RoKTtjb25zdCB0aXRsZT1yZWN0LmRhdHVtLng7Y29uc3QgZGl2PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2RpdicpO1BvbHltZXIuZG9tKHRoaXMuJC5wYWdlQ29udGFpbmVyKS5pbnNlcnRCZWZvcmUoZGl2LHRoaXMuJC5wYWdlQ29udGFpbmVyLmZpcnN0Q2hpbGQpO2NvbnN0IGNoYXJ0PXRoaXMuY3JlYXRlQ2hhcnRfKHRpdGxlKTtkaXYuYXBwZW5kQ2hpbGQoY2hhcnQpO2NvbnN0IGJ1dHRvbj10aGlzLmluaXRpYWxpemVDbG9zZUJ1dHRvbl8oZGl2LHRoaXMuJC5wYWdlQ29udGFpbmVyKTtkaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtjb25zdCBuZXdEYXRhU2V0PVtdO2Zvcihjb25zdCBwYWdlIG9mIHRoaXMuZGF0YV8ua2V5cygpKXtpZihwYWdlPT09dHIudi51aS5BR0dSRUdBVEVfS0VZKWNvbnRpbnVlO2ZvcihsZXQgaT0wO2k8dHIudi51aS5GUkFNRS5sZW5ndGg7aSsrKXtuZXdEYXRhU2V0LnB1c2godGhpcy5kYXRhXy5nZXQocGFnZSlbYmVuY2htYXJrSW5kZXgqdHIudi51aS5GUkFNRS5sZW5ndGgraV0pO319CnRoaXMuc2V0Q2hhcnRDb2xvcnNfKGNoYXJ0LG5ld0RhdGFTZXQpO2NoYXJ0LmRhdGE9bmV3RGF0YVNldDt0aGlzLnNldENoYXJ0U2l6ZV8oY2hhcnQsbmV3RGF0YVNldC5sZW5ndGgpO30sc2VsZWN0UGFnZV8oKXtjb25zdCBkaXY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnZGl2Jyk7Y29uc3QgcGFnZT10aGlzLiQucGFnZVNlbGVjdG9yLnZhbHVlO2lmKHBhZ2U9PT0nJylyZXR1cm47UG9seW1lci5kb20odGhpcy4kLnBhZ2VDb250YWluZXIpLmluc2VydEJlZm9yZShkaXYsdGhpcy4kLnBhZ2VDb250YWluZXIuZmlyc3RDaGlsZCk7Y29uc3QgcGFnZUNoYXJ0PXRoaXMuY3JlYXRlQ2hhcnRfKHBhZ2UpO2Rpdi5hcHBlbmRDaGlsZChwYWdlQ2hhcnQpO2NvbnN0IGJ1dHRvbj10aGlzLmluaXRpYWxpemVDbG9zZUJ1dHRvbl8oZGl2LHRoaXMuJC5wYWdlQ29udGFpbmVyKTtkaXYuYXBwZW5kQ2hpbGQoYnV0dG9uKTtjb25zdCBwYWdlRGF0YT10aGlzLmRhdGFfLmdldChwYWdlKTt0aGlzLnNldENoYXJ0Q29sb3JzXyhwYWdlQ2hhcnQscGFnZURhdGEpO3BhZ2VDaGFydC5kYXRhPXBhZ2VEYXRhO3RoaXMuc2V0Q2hhcnRTaXplXyhwYWdlQ2hhcnQscGFnZURhdGEubGVuZ3RoKTt9LHNlYXJjaEJ5UGFnZV8oKXtjb25zdCBjcml0ZXJpYT10aGlzLiQuc2VhcmNoX3BhZ2UudmFsdWU7aWYoY3JpdGVyaWE9PT0nJylyZXR1cm47Y29uc3QgcXVlcnk9bmV3IFJlZ0V4cChjcml0ZXJpYSk7Y29uc3QgZmlsdGVyZWREYXRhPVsuLi50aGlzLmRhdGFfLmtleXMoKV0uZmlsdGVyKHBhZ2U9PnBhZ2UubWF0Y2gocXVlcnkpKTtpZihmaWx0ZXJlZERhdGEubGVuZ3RoPDEpe3RoaXMuJC5zZWFyY2hfZXJyb3Iuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9CmNvbnN0IHBhZ2U9ZmlsdGVyZWREYXRhWzBdO2NvbnN0IGRpdj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCdkaXYnKTtQb2x5bWVyLmRvbSh0aGlzLiQucGFnZUNvbnRhaW5lcikuaW5zZXJ0QmVmb3JlKGRpdix0aGlzLiQucGFnZUNvbnRhaW5lci5maXJzdENoaWxkKTtjb25zdCBwYWdlQ2hhcnQ9dGhpcy5jcmVhdGVDaGFydF8ocGFnZSk7ZGl2LmFwcGVuZENoaWxkKHBhZ2VDaGFydCk7Y29uc3QgYnV0dG9uPXRoaXMuaW5pdGlhbGl6ZUNsb3NlQnV0dG9uXyhkaXYsdGhpcy4kLnBhZ2VDb250YWluZXIpO2Rpdi5hcHBlbmRDaGlsZChidXR0b24pO2NvbnN0IHBhZ2VEYXRhPXRoaXMuZGF0YV8uZ2V0KHBhZ2UpO3RoaXMuc2V0Q2hhcnRDb2xvcnNfKHBhZ2VDaGFydCxwYWdlRGF0YSk7cGFnZUNoYXJ0LmRhdGE9cGFnZURhdGE7dGhpcy5zZXRDaGFydFNpemVfKHBhZ2VDaGFydCxwYWdlRGF0YS5sZW5ndGgpO30saW5pdGlhbGl6ZUNsb3NlQnV0dG9uXyhkaXYscGFyZW50KXtjb25zdCBidXR0b249dGhpcy4kLmNsb3NlLmNsb25lTm9kZSh0cnVlKTtidXR0b24uc3R5bGUuZGlzcGxheT0naW5saW5lLWJsb2NrJztidXR0b24uYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCgpPT57UG9seW1lci5kb20ocGFyZW50KS5yZW1vdmVDaGlsZChkaXYpO30pO3JldHVybiBidXR0b247fSx9KTsndXNlIHN0cmljdCc7dHIuZXhwb3J0VG8oJ3RyLnYudWknLGZ1bmN0aW9uKCl7Y29uc3QgU1RBVElTVElDU19LRVk9J3N0YXRpc3RpY3MnO2NvbnN0IFNVQk1FVFJJQ1NfS0VZPSdzdWJtZXRyaWNzJztjb25zdCBBR0dSRUdBVEVfS0VZPSdhZ2dyZWdhdGUnO2NvbnN0IFJBU1RFUl9TVEFSVF9NRVRSSUNfS0VZPSdwaXBlbGluZTpiZWdpbl9mcmFtZV90b19yYXN0ZXJfc3RhcnQnO2NvbnN0IENPTE9SUz1bWycjRkZENzQwJywnI0ZGQzQwMCcsJyNGRkFCMDAnLCcjRTI5ODAwJ10sWycjRkY2RTQwJywnI0ZGM0QwMCcsJyNERDJDMDAnLCcjQTMyMDAwJ10sWycjNDBDNEZGJywnIzAwQjBGRicsJyMwMDkxRUEnLCcjMDA2REFGJ10sWycjODlDNjQxJywnIzU0QjUwMycsJyM0QUE1MTAnLCcjMzc3QTBEJ10sWycjQjM4OEZGJywnIzdDNERGRicsJyM2NTFGRkYnLCcjNjIwMEVBJ10sWycjRkY4MEFCJywnI0ZGNDA4MScsJyNGNTAwNTcnLCcjQzUxMTYyJ10sWycjRkZBQjQwJywnI0ZGOTEwMCcsJyNGRjZEMDAnLCcjRDY1QzAyJ10sWycjOEM5RUZGJywnIzUzNkRGRScsJyMzRDVBRkUnLCcjMzA0RkZFJ11dO2NvbnN0IEZSQU1FPVtuZXcgTWFwKFtbJ3BpcGVsaW5lOmJlZ2luX2ZyYW1lX3RvX3Jhc3Rlcl9zdGFydCcsZmFsc2VdLFsncGlwZWxpbmU6YmVnaW5fZnJhbWVfdG9fcmFzdGVyX2VuZCcsdHJ1ZV1dKSxuZXcgTWFwKFtbJ3BpcGVsaW5lOmJlZ2luX2ZyYW1lX3RyYW5zcG9ydCcsdHJ1ZV0sWydwaXBlbGluZTpiZWdpbl9mcmFtZV90b19mcmFtZV9zdWJtaXNzaW9uJyx0cnVlXSxbJ3BpcGVsaW5lOmZyYW1lX3N1Ym1pc3Npb25fdG9fZGlzcGxheScsdHJ1ZV0sWydwaXBlbGluZTpkcmF3Jyx0cnVlXV0pXTtjb25zdCBNRVRSSUNTPW5ldyBNYXAoW1snUGlwZWxpbmUnLFsncGlwZWxpbmU6YmVnaW5fZnJhbWVfdHJhbnNwb3J0JywncGlwZWxpbmU6YmVnaW5fZnJhbWVfdG9fZnJhbWVfc3VibWlzc2lvbicsJ3BpcGVsaW5lOmZyYW1lX3N1Ym1pc3Npb25fdG9fZGlzcGxheScsJ3BpcGVsaW5lOmRyYXcnXV0sWydUaHJlYWQnLFsndGhyZWFkX2Jyb3dzZXJfY3B1X3RpbWVfcGVyX2ZyYW1lJywndGhyZWFkX2Rpc3BsYXlfY29tcG9zaXRvcl9jcHVfdGltZV9wZXJfZnJhbWUnLCd0aHJlYWRfR1BVX2NwdV90aW1lX3Blcl9mcmFtZScsJ3RocmVhZF9JT19jcHVfdGltZV9wZXJfZnJhbWUnLCd0aHJlYWRfb3RoZXJfY3B1X3RpbWVfcGVyX2ZyYW1lJywndGhyZWFkX3Jhc3Rlcl9jcHVfdGltZV9wZXJfZnJhbWUnLCd0aHJlYWRfcmVuZGVyZXJfY29tcG9zaXRvcl9jcHVfdGltZV9wZXJfZnJhbWUnLCd0aHJlYWRfcmVuZGVyZXJfbWFpbl9jcHVfdGltZV9wZXJfZnJhbWUnXV1dKTtmdW5jdGlvbiBnZXRWYWx1ZUZyb21NYXAoa2V5LG1hcCl7bGV0IHJldHJpZXZlZFZhbHVlPW1hcC5nZXQoa2V5KTtpZighcmV0cmlldmVkVmFsdWUpe3JldHJpZXZlZFZhbHVlPW5ldyBNYXAoKTttYXAuc2V0KGtleSxyZXRyaWV2ZWRWYWx1ZSk7fQpyZXR1cm4gcmV0cmlldmVkVmFsdWU7fQpQb2x5bWVyKHtpczondHItdi11aS12aXN1YWxpemF0aW9ucy1kYXRhLWNvbnRhaW5lcicsY3JlYXRlZCgpe3RoaXMub3JkZXJlZEJlbmNobWFya3NfPVtdO3RoaXMuZ3JvdXBlZERhdGFfPW5ldyBNYXAoKTt9LGJ1aWxkKGxlYWZIaXN0b2dyYW1zLGhpc3RvZ3JhbXMpe2lmKCFsZWFmSGlzdG9ncmFtc3x8bGVhZkhpc3RvZ3JhbXMubGVuZ3RoPDF8fCFoaXN0b2dyYW1zfHxoaXN0b2dyYW1zLmxlbmd0aDwxKXt0aGlzLiQuZGF0YV9lcnJvci5zdHlsZS5kaXNwbGF5PSdibG9jayc7cmV0dXJuO30KdGhpcy5wcm9jZXNzSGlzdG9ncmFtc18odGhpcy5ncm91cEhpc3RvZ3JhbXNfKGhpc3RvZ3JhbXMpLHRoaXMuZ3JvdXBIaXN0b2dyYW1zXyhsZWFmSGlzdG9ncmFtcykpO3RoaXMuYnVpbGRDaGFydHNfKCk7fSxwcm9jZXNzSGlzdG9ncmFtc18oaGlzdG9ncmFtcyxsZWFmSGlzdG9ncmFtcyl7Y29uc3QgYmVuY2htYXJrU3RhcnRHcm91cGluZz10ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLkJZX0tFWS5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS19TVEFSVCk7Y29uc3QgYmVuY2htYXJrVG9TdGFydFRpbWU9bmV3IE1hcCgpO2Zvcihjb25zdFttZXRyaWMsYmVuY2htYXJrc11vZiBoaXN0b2dyYW1zLmVudHJpZXMoKSl7Zm9yKGNvbnN0W2JlbmNobWFyayxwYWdlc11vZiBsZWFmSGlzdG9ncmFtcy5nZXQobWV0cmljKS5lbnRyaWVzKCkpe2Zvcihjb25zdFtwYWdlLGhpc3RvZ3JhbXNdb2YgcGFnZXMuZW50cmllcygpKXtmb3IoY29uc3QgaGlzdG9ncmFtIG9mIGhpc3RvZ3JhbXMpe2NvbnN0IGFnZ3JlZ2F0ZVRvQmVuY2htYXJrTWFwPWdldFZhbHVlRnJvbU1hcChBR0dSRUdBVEVfS0VZLHRoaXMuZ3JvdXBlZERhdGFfKTtjb25zdCBiZW5jaG1hcmtUb01ldHJpY01hcD1nZXRWYWx1ZUZyb21NYXAoYmVuY2htYXJrLGFnZ3JlZ2F0ZVRvQmVuY2htYXJrTWFwKTtiZW5jaG1hcmtUb01ldHJpY01hcC5zZXQobWV0cmljLG5ldyBNYXAoW1tTVEFUSVNUSUNTX0tFWSxoaXN0b2dyYW0ucnVubmluZ11dKSk7fX19CmZvcihjb25zdFtiZW5jaG1hcmsscGFnZXNdb2YgYmVuY2htYXJrcy5lbnRyaWVzKCkpe2Zvcihjb25zdFtwYWdlLGhpc3RvZ3JhbXNdb2YgcGFnZXMuZW50cmllcygpKXtmb3IoY29uc3QgaGlzdG9ncmFtIG9mIGhpc3RvZ3JhbXMpe2lmKCFiZW5jaG1hcmtUb1N0YXJ0VGltZS5nZXQoYmVuY2htYXJrKSl7YmVuY2htYXJrVG9TdGFydFRpbWUuc2V0KGJlbmNobWFyayxiZW5jaG1hcmtTdGFydEdyb3VwaW5nLmNhbGxiYWNrKGhpc3RvZ3JhbSkpO30KY29uc3QgcGFnZVRvQmVuY2htYXJrTWFwPWdldFZhbHVlRnJvbU1hcChwYWdlLHRoaXMuZ3JvdXBlZERhdGFfKTtjb25zdCBiZW5jaG1hcmtUb01ldHJpY01hcD1nZXRWYWx1ZUZyb21NYXAoYmVuY2htYXJrLHBhZ2VUb0JlbmNobWFya01hcCk7Y29uc3QgbWVyZ2VkU3VibWV0cmljcz1uZXcgdHIudi5kLkRpYWdub3N0aWNNYXAoKTtmb3IoY29uc3QgYmluIG9mIGhpc3RvZ3JhbS5hbGxCaW5zKXtmb3IoY29uc3QgbWFwIG9mIGJpbi5kaWFnbm9zdGljTWFwcyl7bWVyZ2VkU3VibWV0cmljcy5hZGREaWFnbm9zdGljcyhtYXApO319CmlmKGJlbmNobWFya1RvTWV0cmljTWFwLmdldChtZXRyaWMpKWNvbnRpbnVlO2JlbmNobWFya1RvTWV0cmljTWFwLnNldChtZXRyaWMsbmV3IE1hcChbW1NUQVRJU1RJQ1NfS0VZLGhpc3RvZ3JhbS5ydW5uaW5nXSxbU1VCTUVUUklDU19LRVksbWVyZ2VkU3VibWV0cmljcy5nZXQoJ2JyZWFrZG93bicpXV0pKTt9fX19CnRoaXMub3JkZXJlZEJlbmNobWFya3NfPXRoaXMuc29ydEJlbmNobWFya3NfKGJlbmNobWFya1RvU3RhcnRUaW1lKTt9LGdyb3VwSGlzdG9ncmFtc18oaGlzdG9ncmFtcyl7Y29uc3QgZ3JvdXBpbmdzPVt0ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLkhJU1RPR1JBTV9OQU1FLHRyLnYuSGlzdG9ncmFtR3JvdXBpbmcuRElTUExBWV9MQUJFTCx0ci52Lkhpc3RvZ3JhbUdyb3VwaW5nLkJZX0tFWS5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLlNUT1JJRVMpXTtyZXR1cm4gaGlzdG9ncmFtcy5ncm91cEhpc3RvZ3JhbXNSZWN1cnNpdmVseShncm91cGluZ3MpO30sc29ydEJlbmNobWFya3NfKGJlbmNobWFya3Mpe3JldHVybiBBcnJheS5mcm9tKGJlbmNobWFya3Mua2V5cygpKS5zb3J0KChhLGIpPT57RGF0ZS5wYXJzZShiZW5jaG1hcmtzLmdldChhKSktRGF0ZS5wYXJzZShiZW5jaG1hcmtzLmdldChiKSk7fSk7fSxnZXRTZXJpZXNLZXlfKG1ldHJpYyxiZW5jaG1hcmspe3JldHVybiBtZXRyaWMrJy0nK2JlbmNobWFyazt9LGJ1aWxkQ2hhcnRzXygpe2NvbnN0IHJhc3RlckRhdGFUb0JlUGFzc2VkPXRoaXMuYnVpbGRSYXN0ZXJDaGFydF8oKTt0aGlzLiQucmFzdGVyVmlzdWFsaXphdGlvbi5idWlsZChyYXN0ZXJEYXRhVG9CZVBhc3NlZCk7Zm9yKGNvbnN0IGNoYXJ0TmFtZSBvZiBNRVRSSUNTLmtleXMoKSl7Y29uc3QgbWV0cmljc0RhdGFUb0JlUGFzc2VkPXRoaXMuYnVpbGRNZXRyaWNzRGF0YV8oY2hhcnROYW1lKTtjb25zdCBuZXdDaGFydD10aGlzLiQubWV0cmljc1Zpc3VhbGl6YXRpb24uY2xvbmVOb2RlKHRydWUpO25ld0NoYXJ0LnN0eWxlLmRpc3BsYXk9J2Jsb2NrJztQb2x5bWVyLmRvbSh0aGlzLiQubWV0cmljc19jb250YWluZXIpLmFwcGVuZENoaWxkKG5ld0NoYXJ0KTtuZXdDaGFydC5idWlsZChtZXRyaWNzRGF0YVRvQmVQYXNzZWQpO319LGJ1aWxkUmFzdGVyQ2hhcnRfKCl7Y29uc3Qgb3JkZXJlZFBhZ2VzPVsuLi50aGlzLmdyb3VwZWREYXRhXy5rZXlzKCldLmZpbHRlcigocGFnZSk9PnRoaXMuZmlsdGVyUGFnZXNXaXRob3V0UmFzdGVyTWV0cmljXyhwYWdlKSkuc29ydCgoYSxiKT0+dGhpcy5zb3J0QnlSYXN0ZXJTdGFydF8oYSxiKSk7Y29uc3QgYWxsQ2hhcnREYXRhPW5ldyBNYXAoKTtmb3IoY29uc3QgcGFnZSBvZiBvcmRlcmVkUGFnZXMpe2NvbnN0IHBhZ2VNYXA9dGhpcy5ncm91cGVkRGF0YV8uZ2V0KHBhZ2UpO2xldCBjaGFydERhdGE9W107Zm9yKGNvbnN0IGJlbmNobWFyayBvZiB0aGlzLm9yZGVyZWRCZW5jaG1hcmtzXyl7aWYoIXBhZ2VNYXAuaGFzKGJlbmNobWFyaykpY29udGludWU7Y29uc3QgYmVuY2htYXJrTWFwPXBhZ2VNYXAuZ2V0KGJlbmNobWFyayk7Y29uc3QgYmVuY2htYXJrRGF0YT1bXTtpZihiZW5jaG1hcmtNYXAuZ2V0KFJBU1RFUl9TVEFSVF9NRVRSSUNfS0VZKT09PXVuZGVmaW5lZCl7Y29udGludWU7fQpmb3IoY29uc3RbdGhyZWFkTmFtZSx0aHJlYWRdb2YgRlJBTUUuZW50cmllcygpKXtjb25zdCBkYXRhPXt4OmJlbmNobWFyayxoaWRlOjB9O2lmKHBhZ2UhPT1BR0dSRUdBVEVfS0VZKWRhdGEuZ3JvdXA9cGFnZTtsZXQgcmFzdGVyQmVnaW49MDtmb3IoY29uc3QgbWV0cmljIG9mIHRocmVhZC5rZXlzKCkpe2NvbnN0IG1ldHJpY01hcD1iZW5jaG1hcmtNYXAuZ2V0KG1ldHJpYyk7Y29uc3Qga2V5PXRoaXMuZ2V0U2VyaWVzS2V5XyhtZXRyaWMsZGF0YS54KyctJyt0aHJlYWROYW1lKTtjb25zdCBzdGF0cz1tZXRyaWNNYXAuZ2V0KFNUQVRJU1RJQ1NfS0VZKTtjb25zdCBtZWFuPXN0YXRzP3N0YXRzLm1lYW46MDtsZXQgcm91bmRlZE1lYW49TWF0aC5yb3VuZChtZWFuKjEwMCkvMTAwO2lmKG1ldHJpYz09PVJBU1RFUl9TVEFSVF9NRVRSSUNfS0VZKXtyYXN0ZXJCZWdpbj1yb3VuZGVkTWVhbjt9ZWxzZSBpZihtZXRyaWM9PT0ncGlwZWxpbmU6YmVnaW5fZnJhbWVfdG9fcmFzdGVyX2VuZCcpe3JvdW5kZWRNZWFuLT1yYXN0ZXJCZWdpbjt9CmRhdGFba2V5XT1yb3VuZGVkTWVhbjt9CmJlbmNobWFya0RhdGEucHVzaChkYXRhKTt9CmNoYXJ0RGF0YT1jaGFydERhdGEuY29uY2F0KGJlbmNobWFya0RhdGEpO30KYWxsQ2hhcnREYXRhLnNldChwYWdlLGNoYXJ0RGF0YSk7fQpyZXR1cm4gYWxsQ2hhcnREYXRhO30sYnVpbGRNZXRyaWNzRGF0YV8oY2hhcnROYW1lKXtjb25zdCBvcmRlcmVkUGFnZXM9Wy4uLnRoaXMuZ3JvdXBlZERhdGFfLmtleXMoKV0uc29ydCgoYSxiKT0+dGhpcy5zb3J0QnlUb3RhbF8oYSxiLGNoYXJ0TmFtZSkpO2NvbnN0IGNoYXJ0RGF0YT1bXTtjb25zdCBhZ2dyZWdhdGVDaGFydD1bXTtmb3IoY29uc3QgcGFnZSBvZiBvcmRlcmVkUGFnZXMpe2NvbnN0IHBhZ2VNYXA9dGhpcy5ncm91cGVkRGF0YV8uZ2V0KHBhZ2UpO2Zvcihjb25zdCBiZW5jaG1hcmsgb2YgdGhpcy5vcmRlcmVkQmVuY2htYXJrc18pe2lmKCFwYWdlTWFwLmhhcyhiZW5jaG1hcmspKWNvbnRpbnVlO2NvbnN0IGRhdGE9e3g6YmVuY2htYXJrLGdyb3VwOnBhZ2V9O2NvbnN0IGJlbmNobWFya01hcD1wYWdlTWFwLmdldChiZW5jaG1hcmspO2Zvcihjb25zdCBtZXRyaWMgb2YgTUVUUklDUy5nZXQoY2hhcnROYW1lKSl7Y29uc3QgbWV0cmljTWFwPWJlbmNobWFya01hcC5nZXQobWV0cmljKTtjb25zdCBrZXk9dGhpcy5nZXRTZXJpZXNLZXlfKG1ldHJpYyxiZW5jaG1hcmspO2NvbnN0IHN0YXRzPW1ldHJpY01hcC5nZXQoU1RBVElTVElDU19LRVkpO2NvbnN0IG1lYW49c3RhdHM/c3RhdHMubWVhbjowO2RhdGFba2V5XT1NYXRoLnJvdW5kKG1lYW4qMTAwKS8xMDA7fQppZihwYWdlPT09QUdHUkVHQVRFX0tFWSl7YWdncmVnYXRlQ2hhcnQucHVzaChkYXRhKTt9ZWxzZXtjaGFydERhdGEucHVzaChkYXRhKTt9fQpjaGFydERhdGEucHVzaCh7fSk7fQpjaGFydERhdGEuc2hpZnQoKTtyZXR1cm57dGl0bGU6Y2hhcnROYW1lLGFnZ3JlZ2F0ZTphZ2dyZWdhdGVDaGFydCxwYWdlOmNoYXJ0RGF0YSxzdWJtZXRyaWNzOnRoaXMucHJvY2Vzc1N1Ym1ldHJpY3NEYXRhXyhjaGFydE5hbWUpfTt9LHN1Ym1ldHJpY3NIZWxwZXJfKHN1Ym1ldHJpYyx2YWx1ZSxiZW5jaG1hcmssbWV0cmljVG9TdWJtZXRyaWNNYXApe2xldCBzdWJtZXRyaWNUb0JlbmNobWFya01hcD1tZXRyaWNUb1N1Ym1ldHJpY01hcC5nZXQoc3VibWV0cmljKTtpZighc3VibWV0cmljVG9CZW5jaG1hcmtNYXApe3N1Ym1ldHJpY1RvQmVuY2htYXJrTWFwPVtdO21ldHJpY1RvU3VibWV0cmljTWFwLnNldChzdWJtZXRyaWMsc3VibWV0cmljVG9CZW5jaG1hcmtNYXApO30KY29uc3QgZGF0YT17eDpzdWJtZXRyaWMsaGlkZTowLGdyb3VwOmJlbmNobWFya307Y29uc3QgbWVhbj12YWx1ZTtjb25zdCByb3VuZGVkTWVhbj1NYXRoLnJvdW5kKG1lYW4qMTAwKS8xMDA7aWYoIXJvdW5kZWRNZWFuKXJldHVybjtkYXRhW3RoaXMuZ2V0U2VyaWVzS2V5XyhzdWJtZXRyaWMsYmVuY2htYXJrKV09cm91bmRlZE1lYW47c3VibWV0cmljVG9CZW5jaG1hcmtNYXAucHVzaChkYXRhKTt9LHByb2Nlc3NTdWJtZXRyaWNzRGF0YV8oY2hhcnROYW1lKXtjb25zdCBzdWJtZXRyaWNzPW5ldyBNYXAoKTtmb3IoY29uc3RbcGFnZSxwYWdlTWFwXW9mIHRoaXMuZ3JvdXBlZERhdGFfLmVudHJpZXMoKSl7aWYocGFnZT09PUFHR1JFR0FURV9LRVkpY29udGludWU7Y29uc3QgcGFnZVRvTWV0cmljTWFwPWdldFZhbHVlRnJvbU1hcChwYWdlLHN1Ym1ldHJpY3MpO2Zvcihjb25zdCBiZW5jaG1hcmsgb2YgdGhpcy5vcmRlcmVkQmVuY2htYXJrc18pe2NvbnN0IGJlbmNobWFya01hcD1wYWdlTWFwLmdldChiZW5jaG1hcmspO2lmKCFiZW5jaG1hcmtNYXApY29udGludWU7Zm9yKGNvbnN0IG1ldHJpYyBvZiBNRVRSSUNTLmdldChjaGFydE5hbWUpKXtjb25zdCBtZXRyaWNNYXA9YmVuY2htYXJrTWFwLmdldChtZXRyaWMpO2NvbnN0IG1ldHJpY1RvU3VibWV0cmljTWFwPWdldFZhbHVlRnJvbU1hcChtZXRyaWMscGFnZVRvTWV0cmljTWFwKTtjb25zdCBzdWJtZXRyaWNzPW1ldHJpY01hcC5nZXQoU1VCTUVUUklDU19LRVkpO2lmKCFzdWJtZXRyaWNzKXt0aGlzLnN1Ym1ldHJpY3NIZWxwZXJfKG1ldHJpYyxtZXRyaWNNYXAuZ2V0KFNUQVRJU1RJQ1NfS0VZKSxiZW5jaG1hcmssbWV0cmljVG9TdWJtZXRyaWNNYXApO2NvbnRpbnVlO30KZm9yKGNvbnN0W3N1Ym1ldHJpYyx2YWx1ZV1vZlsuLi5zdWJtZXRyaWNzXSl7dGhpcy5zdWJtZXRyaWNzSGVscGVyXyhzdWJtZXRyaWMsdmFsdWUsYmVuY2htYXJrLG1ldHJpY1RvU3VibWV0cmljTWFwKTt9fX19CnJldHVybiBzdWJtZXRyaWNzO30sc29ydEJ5VG90YWxfKGEsYixjaGFydE5hbWUpe2lmKGE9PT1BR0dSRUdBVEVfS0VZKXJldHVybi0xO2lmKGI9PT1BR0dSRUdBVEVfS0VZKXJldHVybiAxO2xldCBhVmFsdWU9MDtjb25zdCBhTWFwPXRoaXMuZ3JvdXBlZERhdGFfLmdldChhKTtpZihhTWFwLmdldCh0aGlzLm9yZGVyZWRCZW5jaG1hcmtzX1swXSkhPT11bmRlZmluZWQpe2Zvcihjb25zdCBtZXRyaWMgb2YgTUVUUklDUy5nZXQoY2hhcnROYW1lKSl7Y29uc3QgYU1ldHJpY01hcD1hTWFwLmdldCh0aGlzLm9yZGVyZWRCZW5jaG1hcmtzX1swXSkuZ2V0KG1ldHJpYyk7Y29uc3QgYVN0YXRzPWFNZXRyaWNNYXAuZ2V0KFNUQVRJU1RJQ1NfS0VZKTthVmFsdWUrPWFTdGF0cz9hU3RhdHMubWVhbjowO319CmxldCBiVmFsdWU9MDtjb25zdCBiTWFwPXRoaXMuZ3JvdXBlZERhdGFfLmdldChiKTtpZihiTWFwLmdldCh0aGlzLm9yZGVyZWRCZW5jaG1hcmtzX1swXSkhPT11bmRlZmluZWQpe2Zvcihjb25zdCBtZXRyaWMgb2YgTUVUUklDUy5nZXQoY2hhcnROYW1lKSl7Y29uc3QgYk1ldHJpY01hcD1iTWFwLmdldCh0aGlzLm9yZGVyZWRCZW5jaG1hcmtzX1swXSkuZ2V0KG1ldHJpYyk7Y29uc3QgYlN0YXRzPWJNZXRyaWNNYXAuZ2V0KFNUQVRJU1RJQ1NfS0VZKTtiVmFsdWUrPWJTdGF0cz9iU3RhdHMubWVhbjowO319CnJldHVybiBhVmFsdWUtYlZhbHVlO30sZmlsdGVyUGFnZXNXaXRob3V0UmFzdGVyTWV0cmljXyhwYWdlKXtjb25zdCBwYWdlTWFwPXRoaXMuZ3JvdXBlZERhdGFfLmdldChwYWdlKTtmb3IoY29uc3QgYmVuY2htYXJrIG9mIHRoaXMub3JkZXJlZEJlbmNobWFya3NfKXtjb25zdCBwYWdlTWV0cmljTWFwPXBhZ2VNYXAuZ2V0KGJlbmNobWFyayk7aWYoIXBhZ2VNZXRyaWNNYXApY29udGludWU7Y29uc3Qgd2FudGVkTWV0cmljPXBhZ2VNZXRyaWNNYXAuZ2V0KFJBU1RFUl9TVEFSVF9NRVRSSUNfS0VZKTtpZih3YW50ZWRNZXRyaWMhPT11bmRlZmluZWQpcmV0dXJuIHRydWU7fQpyZXR1cm4gZmFsc2U7fSxzb3J0QnlSYXN0ZXJTdGFydF8oYSxiKXtpZihhPT09QUdHUkVHQVRFX0tFWSlyZXR1cm4gMTtpZihiPT09QUdHUkVHQVRFX0tFWSlyZXR1cm4tMTtsZXQgYVZhbHVlPTA7Y29uc3QgYU1hcD10aGlzLmdyb3VwZWREYXRhXy5nZXQoYSk7aWYoYU1hcC5nZXQodGhpcy5vcmRlcmVkQmVuY2htYXJrc19bMF0pIT09dW5kZWZpbmVkKXtjb25zdCBhTWV0cmljTWFwPWFNYXAuZ2V0KHRoaXMub3JkZXJlZEJlbmNobWFya3NfWzBdKS5nZXQoUkFTVEVSX1NUQVJUX01FVFJJQ19LRVkpO2NvbnN0IGFTdGF0cz1hTWV0cmljTWFwLmdldChTVEFUSVNUSUNTX0tFWSk7YVZhbHVlPWFTdGF0cz9hU3RhdHMubWVhbjowO30KbGV0IGJWYWx1ZT0wO2NvbnN0IGJNYXA9dGhpcy5ncm91cGVkRGF0YV8uZ2V0KGIpO2lmKGJNYXAuZ2V0KHRoaXMub3JkZXJlZEJlbmNobWFya3NfWzBdKSE9PXVuZGVmaW5lZCl7Y29uc3QgYk1ldHJpY01hcD1iTWFwLmdldCh0aGlzLm9yZGVyZWRCZW5jaG1hcmtzX1swXSkuZ2V0KFJBU1RFUl9TVEFSVF9NRVRSSUNfS0VZKTtjb25zdCBiU3RhdHM9Yk1ldHJpY01hcC5nZXQoU1RBVElTVElDU19LRVkpO2JWYWx1ZT1iU3RhdHM/YlN0YXRzLm1lYW46MDt9CnJldHVybiBiVmFsdWUtYVZhbHVlO30sfSk7cmV0dXJue1NUQVRJU1RJQ1NfS0VZLFNVQk1FVFJJQ1NfS0VZLEFHR1JFR0FURV9LRVksQ09MT1JTLEZSQU1FLE1FVFJJQ1MsZ2V0VmFsdWVGcm9tTWFwLH07fSk7J3VzZSBzdHJpY3QnO3RyLmV4cG9ydFRvKCd0ci52LnVpJyxmdW5jdGlvbigpe1BvbHltZXIoe2lzOid0ci12LXVpLWhpc3RvZ3JhbS1zZXQtdmlldycsbGlzdGVuZXJzOntleHBvcnQ6J29uRXhwb3J0XycsbG9hZFZpc3VhbGl6YXRpb246J29uTG9hZFZpc3VhbGl6YXRpb25fJ30sY3JlYXRlZCgpe3RoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfPW5ldyB0ci51aS5OdWxsQnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXIoKTt0aGlzLnZpZXdTdGF0ZV89bmV3IHRyLnYudWkuSGlzdG9ncmFtU2V0Vmlld1N0YXRlKCk7dGhpcy52aXN1YWxpemF0aW9uTG9hZGVkXz1mYWxzZTt9LHJlYWR5KCl7dGhpcy4kLnRhYmxlLnZpZXdTdGF0ZT10aGlzLnZpZXdTdGF0ZTt0aGlzLiQuY29udHJvbHMudmlld1N0YXRlPXRoaXMudmlld1N0YXRlO30sYXR0YWNoZWQoKXt0aGlzLmJydXNoaW5nU3RhdGVDb250cm9sbGVyLnBhcmVudENvbnRyb2xsZXI9dHIuYy5CcnVzaGluZ1N0YXRlQ29udHJvbGxlci5nZXRDb250cm9sbGVyRm9yRWxlbWVudCh0aGlzLnBhcmVudE5vZGUpO30sZ2V0IGJydXNoaW5nU3RhdGVDb250cm9sbGVyKCl7cmV0dXJuIHRoaXMuYnJ1c2hpbmdTdGF0ZUNvbnRyb2xsZXJfO30sZ2V0IHZpZXdTdGF0ZSgpe3JldHVybiB0aGlzLnZpZXdTdGF0ZV87fSxnZXQgaGlzdG9ncmFtcygpe3JldHVybiB0aGlzLiQudGFibGUuaGlzdG9ncmFtczt9LGFzeW5jIGJ1aWxkKGhpc3RvZ3JhbXMsb3B0X29wdGlvbnMpe2NvbnN0IG9wdGlvbnM9b3B0X29wdGlvbnN8fHt9O2NvbnN0IHByb2dyZXNzPW9wdGlvbnMucHJvZ3Jlc3N8fCgoKT0+UHJvbWlzZS5yZXNvbHZlKCkpO2lmKG9wdGlvbnMuaGVscEhyZWYpdGhpcy4kLmNvbnRyb2xzLmhlbHBIcmVmPW9wdGlvbnMuaGVscEhyZWY7aWYob3B0aW9ucy5mZWVkYmFja0hyZWYpe3RoaXMuJC5jb250cm9scy5mZWVkYmFja0hyZWY9b3B0aW9ucy5mZWVkYmFja0hyZWY7fQppZihoaXN0b2dyYW1zPT09dW5kZWZpbmVkfHxoaXN0b2dyYW1zLmxlbmd0aD09PTApe3RoaXMuJC5jb250YWluZXIuc3R5bGUuZGlzcGxheT0nbm9uZSc7dGhpcy4kLnplcm8uc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuc3R5bGUuZGlzcGxheT0nYmxvY2snO3JldHVybjt9CnRoaXMuJC56ZXJvLnN0eWxlLmRpc3BsYXk9J25vbmUnO3RoaXMuJC5jb250YWluZXIuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC5jb250YWluZXIuc3R5bGUubWF4SGVpZ2h0PSh3aW5kb3cuaW5uZXJIZWlnaHQtMTYpKydweCc7Y29uc3QgYnVpbGRNYXJrPXRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtdmlldycsJ2J1aWxkJyk7YXdhaXQgcHJvZ3Jlc3MoJ0ZpbmRpbmcgaW1wb3J0YW50IEhpc3RvZ3JhbXMuLi4nKTtjb25zdCBzb3VyY2VIaXN0b2dyYW1zTWFyaz10ci5iLlRpbWluZy5tYXJrKCdoaXN0b2dyYW0tc2V0LXZpZXcnLCdzb3VyY2VIaXN0b2dyYW1zJyk7Y29uc3Qgc291cmNlSGlzdG9ncmFtcz1oaXN0b2dyYW1zLnNvdXJjZUhpc3RvZ3JhbXM7c291cmNlSGlzdG9ncmFtc01hcmsuZW5kKCk7dGhpcy4kLmNvbnRyb2xzLnNob3dBbGxFbmFibGVkPShzb3VyY2VIaXN0b2dyYW1zLmxlbmd0aCE9PWhpc3RvZ3JhbXMubGVuZ3RoKTthd2FpdCBwcm9ncmVzcygnQ29sbGVjdGluZyBwYXJhbWV0ZXJzLi4uJyk7Y29uc3QgY29sbGVjdFBhcmFtZXRlcnNNYXJrPXRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtdmlldycsJ2NvbGxlY3RQYXJhbWV0ZXJzJyk7Y29uc3QgcGFyYW1ldGVyQ29sbGVjdG9yPW5ldyB0ci52Lkhpc3RvZ3JhbVBhcmFtZXRlckNvbGxlY3RvcigpO3BhcmFtZXRlckNvbGxlY3Rvci5wcm9jZXNzKGhpc3RvZ3JhbXMpO3RoaXMuJC5jb250cm9scy5iYXNlU3RhdGlzdGljTmFtZXM9cGFyYW1ldGVyQ29sbGVjdG9yLnN0YXRpc3RpY05hbWVzO3RoaXMuJC5jb250cm9scy5wb3NzaWJsZUdyb3VwaW5ncz1wYXJhbWV0ZXJDb2xsZWN0b3IucG9zc2libGVHcm91cGluZ3M7Y29uc3QgZGlzcGxheUxhYmVscz1wYXJhbWV0ZXJDb2xsZWN0b3IubGFiZWxzO3RoaXMuJC5jb250cm9scy5kaXNwbGF5TGFiZWxzPWRpc3BsYXlMYWJlbHM7Y29sbGVjdFBhcmFtZXRlcnNNYXJrLmVuZCgpO2NvbnN0IGhpc3Q9Wy4uLmhpc3RvZ3JhbXNdWzBdO2NvbnN0IGJlbmNobWFya3M9aGlzdC5kaWFnbm9zdGljcy5nZXQodHIudi5kLlJFU0VSVkVEX05BTUVTLkJFTkNITUFSS1MpO2xldCBlbmFibGU9ZmFsc2U7aWYoYmVuY2htYXJrcyE9PXVuZGVmaW5lZCYmYmVuY2htYXJrcy5sZW5ndGg+MCl7Zm9yKGNvbnN0IGJlbmNobWFyayBvZiBiZW5jaG1hcmtzKXtpZihiZW5jaG1hcmsuaW5jbHVkZXMoJ3JlbmRlcmluZycpKXtlbmFibGU9dHJ1ZTticmVhazt9fX0KdGhpcy4kLmNvbnRyb2xzLmVuYWJsZVZpc3VhbGl6YXRpb249ZW5hYmxlO2F3YWl0IHRoaXMuJC50YWJsZS5idWlsZChoaXN0b2dyYW1zLHNvdXJjZUhpc3RvZ3JhbXMsZGlzcGxheUxhYmVscyxwcm9ncmVzcyk7YnVpbGRNYXJrLmVuZCgpO30sb25FeHBvcnRfKGV2ZW50KXtjb25zdCBtYXJrPXRyLmIuVGltaW5nLm1hcmsoJ2hpc3RvZ3JhbS1zZXQtdmlldycsJ2V4cG9ydCcrCihldmVudC5tZXJnZWQ/J01lcmdlZCc6J1JhdycpK2V2ZW50LmZvcm1hdC50b1VwcGVyQ2FzZSgpKTtjb25zdCBoaXN0b2dyYW1zPWV2ZW50Lm1lcmdlZD90aGlzLiQudGFibGUubGVhZkhpc3RvZ3JhbXM6dGhpcy5oaXN0b2dyYW1zO2xldCBibG9iO2lmKGV2ZW50LmZvcm1hdD09PSdjc3YnKXtjb25zdCBjc3Y9bmV3IHRyLnYuQ1NWQnVpbGRlcihoaXN0b2dyYW1zKTtjc3YuYnVpbGQoKTtibG9iPW5ldyB3aW5kb3cuQmxvYihbY3N2LnRvU3RyaW5nKCldLHt0eXBlOid0ZXh0L2Nzdid9KTt9ZWxzZSBpZihldmVudC5mb3JtYXQ9PT0nanNvbicpe2Jsb2I9bmV3IHdpbmRvdy5CbG9iKFtKU09OLnN0cmluZ2lmeShoaXN0b2dyYW1zLmFzRGljdHMoKSldLHt0eXBlOid0ZXh0L2pzb24nfSk7fWVsc2V7dGhyb3cgbmV3IEVycm9yKGBVbmFibGUgdG8gZXhwb3J0IGZvcm1hdCAiJHtldmVudC5mb3JtYXR9ImApO30KY29uc3QgcGF0aD13aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3BsaXQoJy8nKTtjb25zdCBiYXNlbmFtZT1wYXRoW3BhdGgubGVuZ3RoLTFdLnNwbGl0KCcuJylbMF18fCdoaXN0b2dyYW1zJztjb25zdCBhbmNob3I9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYScpO2FuY2hvci5kb3dubG9hZD1gJHtiYXNlbmFtZX0uJHtldmVudC5mb3JtYXR9YDthbmNob3IuaHJlZj13aW5kb3cuVVJMLmNyZWF0ZU9iamVjdFVSTChibG9iKTthbmNob3IuY2xpY2soKTttYXJrLmVuZCgpO30sb25Mb2FkVmlzdWFsaXphdGlvbl8oZXZlbnQpe2lmKCF0aGlzLnZpc3VhbGl6YXRpb25Mb2FkZWRfKXt0aGlzLiQudmlzdWFsaXphdGlvbnMuc3R5bGUuZGlzcGxheT0nYmxvY2snO3RoaXMuJC52aXN1YWxpemF0aW9ucy5idWlsZCh0aGlzLiQudGFibGUubGVhZkhpc3RvZ3JhbXMsdGhpcy5oaXN0b2dyYW1zKTt0aGlzLnZpc3VhbGl6YXRpb25Mb2FkZWRfPXRydWU7fWVsc2UgaWYodGhpcy4kLnZpc3VhbGl6YXRpb25zLnN0eWxlLmRpc3BsYXk9PT0nbm9uZScpe3RoaXMuJC52aXN1YWxpemF0aW9ucy5zdHlsZS5kaXNwbGF5PSdibG9jayc7fWVsc2V7dGhpcy4kLnZpc3VhbGl6YXRpb25zLnN0eWxlLmRpc3BsYXk9J25vbmUnO319LH0pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0Jzt0ci5leHBvcnRUbygndHIudWknLGZ1bmN0aW9uKCl7UG9seW1lcih7aXM6J3RyLXVpLXNwLW1ldHJpY3Mtc2lkZS1wYW5lbCcsYmVoYXZpb3JzOlt0ci51aS5iZWhhdmlvcnMuU2lkZVBhbmVsXSxyZWFkeSgpe3RoaXMubW9kZWxfPXVuZGVmaW5lZDt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89dW5kZWZpbmVkO3RoaXMubWV0cmljTGF0ZW5jaWVzTXNfPVtdO3RoaXMubWV0cmljc189W107dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5nZXRBbGxSZWdpc3RlcmVkVHlwZUluZm9zKCkuZm9yRWFjaChmdW5jdGlvbihtKXtpZihtLmNvbnN0cnVjdG9yLm5hbWU9PT0nc2FtcGxlTWV0cmljJylyZXR1cm47dGhpcy5tZXRyaWNzXy5wdXNoKHtsYWJlbDptLmNvbnN0cnVjdG9yLm5hbWUsdmFsdWU6bS5jb25zdHJ1Y3Rvci5uYW1lfSk7fSx0aGlzKTt0aGlzLm1ldHJpY3NfLnNvcnQoKHgseSk9PngubGFiZWwubG9jYWxlQ29tcGFyZSh5LmxhYmVsKSk7dGhpcy5zZXR0aW5nc0tleV89J21ldHJpY3Mtc2lkZS1wYW5lbC1tZXRyaWMtbmFtZSc7dGhpcy5jdXJyZW50TWV0cmljTmFtZV89J3Jlc3BvbnNpdmVuZXNzTWV0cmljJztjb25zdCBtZXRyaWNTZWxlY3Rvcj10ci51aS5iLmNyZWF0ZVNlbGVjdG9yKHRoaXMsJ2N1cnJlbnRNZXRyaWNOYW1lXycsdGhpcy5zZXR0aW5nc0tleV8sdGhpcy5jdXJyZW50TWV0cmljTmFtZV8sdGhpcy5tZXRyaWNzXyk7UG9seW1lci5kb20odGhpcy4kLnRvcF9sZWZ0X2NvbnRyb2xzKS5hcHBlbmRDaGlsZChtZXRyaWNTZWxlY3Rvcik7bWV0cmljU2VsZWN0b3IuYWRkRXZlbnRMaXN0ZW5lcignY2hhbmdlJyx0aGlzLm9uTWV0cmljQ2hhbmdlXy5iaW5kKHRoaXMpKTt0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb189dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5maW5kVHlwZUluZm9XaXRoTmFtZSh0aGlzLmN1cnJlbnRNZXRyaWNOYW1lXyk7dGhpcy5yZWNvbXB1dGVCdXR0b25fPXRyLnVpLmIuY3JlYXRlQnV0dG9uKCdSZWNvbXB1dGUnLHRoaXMub25SZWNvbXB1dGVfLHRoaXMpO1BvbHltZXIuZG9tKHRoaXMuJC50b3BfbGVmdF9jb250cm9scykuYXBwZW5kQ2hpbGQodGhpcy5yZWNvbXB1dGVCdXR0b25fKTt0aGlzLiQucmVzdWx0cy5hZGRFdmVudExpc3RlbmVyKCdkaXNwbGF5LXJlYWR5JywoKT0+e3RoaXMuJC5yZXN1bHRzLnN0eWxlLmRpc3BsYXk9Jyc7fSk7fSxhc3luYyBidWlsZChtb2RlbCl7dGhpcy5tb2RlbF89bW9kZWw7YXdhaXQgdGhpcy51cGRhdGVDb250ZW50c18oKTt9LGdldCBtZXRyaWNMYXRlbmN5TXMoKXtyZXR1cm4gdHIuYi5tYXRoLlN0YXRpc3RpY3MubWVhbih0aGlzLm1ldHJpY0xhdGVuY2llc01zXyk7fSxvbk1ldHJpY0NoYW5nZV8oKXt0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb189dHIubWV0cmljcy5NZXRyaWNSZWdpc3RyeS5maW5kVHlwZUluZm9XaXRoTmFtZSh0aGlzLmN1cnJlbnRNZXRyaWNOYW1lXyk7dGhpcy5tZXRyaWNMYXRlbmNpZXNNc189W107dGhpcy51cGRhdGVDb250ZW50c18oKTt9LG9uUmVjb21wdXRlXygpe3RoaXMudXBkYXRlQ29udGVudHNfKCk7fSxnZXQgdGV4dExhYmVsKCl7cmV0dXJuJ01ldHJpY3MnO30sc3VwcG9ydHNNb2RlbChtKXtpZighbSl7cmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J05vIG1vZGVsIGF2YWlsYWJsZSd9O30KcmV0dXJue3N1cHBvcnRlZDp0cnVlfTt9LGdldCBtb2RlbCgpe3JldHVybiB0aGlzLm1vZGVsXzt9LHNldCBtb2RlbChtb2RlbCl7dGhpcy5idWlsZChtb2RlbCk7fSxnZXQgc2VsZWN0aW9uKCl7fSxzZXQgc2VsZWN0aW9uKF8pe30sZ2V0IHJhbmdlT2ZJbnRlcmVzdCgpe3JldHVybiB0aGlzLnJhbmdlT2ZJbnRlcmVzdF87fSxzZXQgcmFuZ2VPZkludGVyZXN0KHJhbmdlKXt0aGlzLnJhbmdlT2ZJbnRlcmVzdF89cmFuZ2U7aWYodGhpcy5jdXJyZW50TWV0cmljVHlwZUluZm9fJiZ0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb18ubWV0YWRhdGEuc3VwcG9ydHNSYW5nZU9mSW50ZXJlc3Qpe2lmKCh0aGlzLm1ldHJpY0xhdGVuY3lNcz09PXVuZGVmaW5lZCl8fCh0aGlzLm1ldHJpY0xhdGVuY3lNczwxMDApKXt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO31lbHNle3RoaXMucmVjb21wdXRlQnV0dG9uXy5zdHlsZS5iYWNrZ3JvdW5kPSdyZWQnO319fSxhc3luYyB1cGRhdGVDb250ZW50c18oKXtQb2x5bWVyLmRvbSh0aGlzLiQuZXJyb3IpLnRleHRDb250ZW50PScnO3RoaXMuJC5yZXN1bHRzLnN0eWxlLmRpc3BsYXk9J25vbmUnO2lmKCF0aGlzLm1vZGVsXyl7UG9seW1lci5kb20odGhpcy4kLmVycm9yKS50ZXh0Q29udGVudD0nTWlzc2luZyBtb2RlbCc7cmV0dXJuO30KY29uc3Qgb3B0aW9ucz17bWV0cmljczpbdGhpcy5jdXJyZW50TWV0cmljTmFtZV9dfTtpZih0aGlzLmN1cnJlbnRNZXRyaWNUeXBlSW5mb18mJnRoaXMuY3VycmVudE1ldHJpY1R5cGVJbmZvXy5tZXRhZGF0YS5zdXBwb3J0c1JhbmdlT2ZJbnRlcmVzdCYmdGhpcy5yYW5nZU9mSW50ZXJlc3QmJiF0aGlzLnJhbmdlT2ZJbnRlcmVzdC5pc0VtcHR5KXtvcHRpb25zLnJhbmdlT2ZJbnRlcmVzdD10aGlzLnJhbmdlT2ZJbnRlcmVzdDt9CmNvbnN0IHN0YXJ0RGF0ZT1uZXcgRGF0ZSgpO2NvbnN0IGFkZEZhaWx1cmVDYj1mYWlsdXJlPT57UG9seW1lci5kb20odGhpcy4kLmVycm9yKS50ZXh0Q29udGVudD1mYWlsdXJlLmRlc2NyaXB0aW9uO307Y29uc3QgaGlzdG9ncmFtcz10ci5tZXRyaWNzLnJ1bk1ldHJpY3ModGhpcy5tb2RlbF8sb3B0aW9ucyxhZGRGYWlsdXJlQ2IpO3RoaXMubWV0cmljTGF0ZW5jaWVzTXNfLnB1c2gobmV3IERhdGUoKS1zdGFydERhdGUpO3doaWxlKHRoaXMubWV0cmljTGF0ZW5jaWVzTXNfLmxlbmd0aD4yMCl7dGhpcy5tZXRyaWNMYXRlbmNpZXNNc18uc2hpZnQoKTt9CnRoaXMucmVjb21wdXRlQnV0dG9uXy5zdHlsZS5iYWNrZ3JvdW5kPScnO2F3YWl0IHRoaXMuJC5yZXN1bHRzLmJ1aWxkKGhpc3RvZ3JhbXMpO319KTt0ci51aS5zaWRlX3BhbmVsLlNpZGVQYW5lbFJlZ2lzdHJ5LnJlZ2lzdGVyKGZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyLXVpLXNwLW1ldHJpY3Mtc2lkZS1wYW5lbCcpO30pO3JldHVybnt9O30pOyd1c2Ugc3RyaWN0JztQb2x5bWVyKHtpczondHItdWktZS1zLWFsZXJ0cy1zaWRlLXBhbmVsJyxiZWhhdmlvcnM6W3RyLnVpLmJlaGF2aW9ycy5TaWRlUGFuZWxdLHJlYWR5KCl7dGhpcy5yYW5nZU9mSW50ZXJlc3RfPW5ldyB0ci5iLm1hdGguUmFuZ2UoKTt0aGlzLnNlbGVjdGlvbl89dW5kZWZpbmVkO30sZ2V0IG1vZGVsKCl7cmV0dXJuIHRoaXMubW9kZWxfO30sc2V0IG1vZGVsKG1vZGVsKXt0aGlzLm1vZGVsXz1tb2RlbDt0aGlzLnVwZGF0ZUNvbnRlbnRzXygpO30sc2V0IHNlbGVjdGlvbihzZWxlY3Rpb24pe30sc2V0IHJhbmdlT2ZJbnRlcmVzdChyYW5nZU9mSW50ZXJlc3Qpe30sc2VsZWN0QWxlcnRzT2ZUeXBlKGFsZXJ0VHlwZVN0cmluZyl7Y29uc3QgYWxlcnRzT2ZUeXBlPXRoaXMubW9kZWxfLmFsZXJ0cy5maWx0ZXIoZnVuY3Rpb24oYWxlcnQpe3JldHVybiBhbGVydC50aXRsZT09PWFsZXJ0VHlwZVN0cmluZzt9KTtjb25zdCBldmVudD1uZXcgdHIubW9kZWwuUmVxdWVzdFNlbGVjdGlvbkNoYW5nZUV2ZW50KCk7ZXZlbnQuc2VsZWN0aW9uPW5ldyB0ci5tb2RlbC5FdmVudFNldChhbGVydHNPZlR5cGUpO3RoaXMuZGlzcGF0Y2hFdmVudChldmVudCk7fSxhbGVydHNCeVR5cGVfKGFsZXJ0cyl7Y29uc3QgYWxlcnRzQnlUeXBlPXt9O2FsZXJ0cy5mb3JFYWNoKGZ1bmN0aW9uKGFsZXJ0KXtpZighYWxlcnRzQnlUeXBlW2FsZXJ0LnRpdGxlXSl7YWxlcnRzQnlUeXBlW2FsZXJ0LnRpdGxlXT1bXTt9CmFsZXJ0c0J5VHlwZVthbGVydC50aXRsZV0ucHVzaChhbGVydCk7fSk7cmV0dXJuIGFsZXJ0c0J5VHlwZTt9LGFsZXJ0c1RhYmxlUm93c18oYWxlcnRzQnlUeXBlKXtyZXR1cm4gT2JqZWN0LmtleXMoYWxlcnRzQnlUeXBlKS5tYXAoZnVuY3Rpb24oa2V5KXtyZXR1cm57YWxlcnRUeXBlOmtleSxjb3VudDphbGVydHNCeVR5cGVba2V5XS5sZW5ndGh9O30pO30sYWxlcnRzVGFibGVDb2x1bW5zXygpe3JldHVyblt7dGl0bGU6J0FsZXJ0IHR5cGUnLHZhbHVlKHJvdyl7cmV0dXJuIHJvdy5hbGVydFR5cGU7fSx3aWR0aDonMTgwcHgnfSx7dGl0bGU6J0NvdW50Jyx3aWR0aDonMTAwJScsdmFsdWUocm93KXtyZXR1cm4gcm93LmNvdW50O319XTt9LGNyZWF0ZUFsZXJ0c1RhYmxlXyhhbGVydHMpe2NvbnN0IGFsZXJ0c0J5VHlwZT10aGlzLmFsZXJ0c0J5VHlwZV8oYWxlcnRzKTtjb25zdCB0YWJsZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1iLXRhYmxlJyk7dGFibGUudGFibGVDb2x1bW5zPXRoaXMuYWxlcnRzVGFibGVDb2x1bW5zXygpO3RhYmxlLnRhYmxlUm93cz10aGlzLmFsZXJ0c1RhYmxlUm93c18oYWxlcnRzQnlUeXBlKTt0YWJsZS5zZWxlY3Rpb25Nb2RlPXRyLnVpLmIuVGFibGVGb3JtYXQuU2VsZWN0aW9uTW9kZS5ST1c7dGFibGUuYWRkRXZlbnRMaXN0ZW5lcignc2VsZWN0aW9uLWNoYW5nZWQnLGZ1bmN0aW9uKGUpe2NvbnN0IHJvdz10YWJsZS5zZWxlY3RlZFRhYmxlUm93O2lmKHJvdyl7dGhpcy5zZWxlY3RBbGVydHNPZlR5cGUocm93LmFsZXJ0VHlwZSk7fX0uYmluZCh0aGlzKSk7cmV0dXJuIHRhYmxlO30sdXBkYXRlQ29udGVudHNfKCl7UG9seW1lci5kb20odGhpcy4kLnJlc3VsdF9hcmVhKS50ZXh0Q29udGVudD0nJztpZih0aGlzLm1vZGVsXz09PXVuZGVmaW5lZClyZXR1cm47Y29uc3QgcGFuZWw9dGhpcy5jcmVhdGVBbGVydHNUYWJsZV8odGhpcy5tb2RlbF8uYWxlcnRzKTtQb2x5bWVyLmRvbSh0aGlzLiQucmVzdWx0X2FyZWEpLmFwcGVuZENoaWxkKHBhbmVsKTt9LHN1cHBvcnRzTW9kZWwobSl7aWYobT09PXVuZGVmaW5lZCl7cmV0dXJue3N1cHBvcnRlZDpmYWxzZSxyZWFzb246J1Vua25vd24gdHJhY2luZyBtb2RlbCd9O31lbHNlIGlmKG0uYWxlcnRzLmxlbmd0aD09PTApe3JldHVybntzdXBwb3J0ZWQ6ZmFsc2UscmVhc29uOidObyBhbGVydHMgaW4gdHJhY2luZyBtb2RlbCd9O30KcmV0dXJue3N1cHBvcnRlZDp0cnVlfTt9LGdldCB0ZXh0TGFiZWwoKXtyZXR1cm4nQWxlcnRzJzt9fSk7dHIudWkuc2lkZV9wYW5lbC5TaWRlUGFuZWxSZWdpc3RyeS5yZWdpc3RlcihmdW5jdGlvbigpe3JldHVybiBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0ci11aS1lLXMtYWxlcnRzLXNpZGUtcGFuZWwnKTt9KTsKPC9zY3JpcHQ+CjwvaGVhZD4KICA8Ym9keT4KICA8L2JvZHk+CjwvaHRtbD4KLyoqCiAqIEBsaWNlbnNlCiAqIENvcHlyaWdodCAoYykgMjAxNCBUaGUgUG9seW1lciBQcm9qZWN0IEF1dGhvcnMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAqIFRoaXMgY29kZSBtYXkgb25seSBiZSB1c2VkIHVuZGVyIHRoZSBCU0Qgc3R5bGUgbGljZW5zZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vTElDRU5TRS50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBhdXRob3JzIG1heSBiZSBmb3VuZCBhdCBodHRwOi8vcG9seW1lci5naXRodWIuaW8vQVVUSE9SUy50eHQKICogVGhlIGNvbXBsZXRlIHNldCBvZiBjb250cmlidXRvcnMgbWF5IGJlIGZvdW5kIGF0IGh0dHA6Ly9wb2x5bWVyLmdpdGh1Yi5pby9DT05UUklCVVRPUlMudHh0CiAqIENvZGUgZGlzdHJpYnV0ZWQgYnkgR29vZ2xlIGFzIHBhcnQgb2YgdGhlIHBvbHltZXIgcHJvamVjdCBpcyBhbHNvCiAqIHN1YmplY3QgdG8gYW4gYWRkaXRpb25hbCBJUCByaWdodHMgZ3JhbnQgZm91bmQgYXQgaHR0cDovL3BvbHltZXIuZ2l0aHViLmlvL1BBVEVOVFMudHh0CiAqLwovLyBAdmVyc2lvbiAwLjcuMjQKIWZ1bmN0aW9uKCl7d2luZG93LldlYkNvbXBvbmVudHM9d2luZG93LldlYkNvbXBvbmVudHN8fHtmbGFnczp7fX07dmFyIGU9IndlYmNvbXBvbmVudHMuanMiLHQ9ZG9jdW1lbnQucXVlcnlTZWxlY3Rvcignc2NyaXB0W3NyYyo9IicrZSsnIl0nKSxuPXt9O2lmKCFuLm5vT3B0cyl7aWYobG9jYXRpb24uc2VhcmNoLnNsaWNlKDEpLnNwbGl0KCImIikuZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdCxyPWUuc3BsaXQoIj0iKTtyWzBdJiYodD1yWzBdLm1hdGNoKC93Yy0oLispLykpJiYoblt0WzFdXT1yWzFdfHwhMCl9KSx0KWZvcih2YXIgcixvPTA7cj10LmF0dHJpYnV0ZXNbb107bysrKSJzcmMiIT09ci5uYW1lJiYobltyLm5hbWVdPXIudmFsdWV8fCEwKTtpZihuLmxvZyYmbi5sb2cuc3BsaXQpe3ZhciBpPW4ubG9nLnNwbGl0KCIsIik7bi5sb2c9e30saS5mb3JFYWNoKGZ1bmN0aW9uKGUpe24ubG9nW2VdPSEwfSl9ZWxzZSBuLmxvZz17fX1uLnNoYWRvdz1uLnNoYWRvd3x8bi5zaGFkb3dkb218fG4ucG9seWZpbGwsIm5hdGl2ZSI9PT1uLnNoYWRvdz9uLnNoYWRvdz0hMTpuLnNoYWRvdz1uLnNoYWRvd3x8IUhUTUxFbGVtZW50LnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290LG4ucmVnaXN0ZXImJih3aW5kb3cuQ3VzdG9tRWxlbWVudHM9d2luZG93LkN1c3RvbUVsZW1lbnRzfHx7ZmxhZ3M6e319LHdpbmRvdy5DdXN0b21FbGVtZW50cy5mbGFncy5yZWdpc3Rlcj1uLnJlZ2lzdGVyKSxXZWJDb21wb25lbnRzLmZsYWdzPW59KCksV2ViQ29tcG9uZW50cy5mbGFncy5zaGFkb3cmJigidW5kZWZpbmVkIj09dHlwZW9mIFdlYWtNYXAmJiFmdW5jdGlvbigpe3ZhciBlPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSx0PURhdGUubm93KCklMWU5LG49ZnVuY3Rpb24oKXt0aGlzLm5hbWU9Il9fc3QiKygxZTkqTWF0aC5yYW5kb20oKT4+PjApKyh0KysgKyJfXyIpfTtuLnByb3RvdHlwZT17c2V0OmZ1bmN0aW9uKHQsbil7dmFyIHI9dFt0aGlzLm5hbWVdO3JldHVybiByJiZyWzBdPT09dD9yWzFdPW46ZSh0LHRoaXMubmFtZSx7dmFsdWU6W3Qsbl0sd3JpdGFibGU6ITB9KSx0aGlzfSxnZXQ6ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuKHQ9ZVt0aGlzLm5hbWVdKSYmdFswXT09PWU/dFsxXTp2b2lkIDB9LCJkZWxldGUiOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5uYW1lXTtyZXR1cm4hKCF0fHx0WzBdIT09ZSkmJih0WzBdPXRbMV09dm9pZCAwLCEwKX0saGFzOmZ1bmN0aW9uKGUpe3ZhciB0PWVbdGhpcy5uYW1lXTtyZXR1cm4hIXQmJnRbMF09PT1lfX0sd2luZG93LldlYWtNYXA9bn0oKSx3aW5kb3cuU2hhZG93RE9NUG9seWZpbGw9e30sZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIGNocm9tZSYmY2hyb21lLmFwcCYmY2hyb21lLmFwcC5ydW50aW1lKXJldHVybiExO2lmKG5hdmlnYXRvci5nZXREZXZpY2VTdG9yYWdlKXJldHVybiExO3RyeXt2YXIgZT1uZXcgRnVuY3Rpb24oInJldHVybiB0cnVlOyIpO3JldHVybiBlKCl9Y2F0Y2godCl7cmV0dXJuITF9fWZ1bmN0aW9uIG4oZSl7aWYoIWUpdGhyb3cgbmV3IEVycm9yKCJBc3NlcnRpb24gZmFpbGVkIil9ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgbj1XKHQpLHI9MDtyPG4ubGVuZ3RoO3IrKyl7dmFyIG89bltyXTtBKGUsbyxGKHQsbykpfXJldHVybiBlfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG49Vyh0KSxyPTA7cjxuLmxlbmd0aDtyKyspe3ZhciBvPW5bcl07c3dpdGNoKG8pe2Nhc2UiYXJndW1lbnRzIjpjYXNlImNhbGxlciI6Y2FzZSJsZW5ndGgiOmNhc2UibmFtZSI6Y2FzZSJwcm90b3R5cGUiOmNhc2UidG9TdHJpbmciOmNvbnRpbnVlfUEoZSxvLEYodCxvKSl9cmV0dXJuIGV9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgbj0wO248dC5sZW5ndGg7bisrKWlmKHRbbl1pbiBlKXJldHVybiB0W25dfWZ1bmN0aW9uIGEoZSx0LG4pe1UudmFsdWU9bixBKGUsdCxVKX1mdW5jdGlvbiBzKGUsdCl7dmFyIG49ZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKTtpZihxKXRyeXtXKG4pfWNhdGNoKHIpe249bi5fX3Byb3RvX199dmFyIG89Ui5nZXQobik7aWYobylyZXR1cm4gbzt2YXIgaT1zKG4pLGE9RShpKTtyZXR1cm4gZyhuLGEsdCksYX1mdW5jdGlvbiBjKGUsdCl7dyhlLHQsITApfWZ1bmN0aW9uIGwoZSx0KXt3KHQsZSwhMSl9ZnVuY3Rpb24gdShlKXtyZXR1cm4vXm9uW2Etel0rJC8udGVzdChlKX1mdW5jdGlvbiBkKGUpe3JldHVybi9eW2EtekEtWl8kXVthLXpBLVpfJDAtOV0qJC8udGVzdChlKX1mdW5jdGlvbiBwKGUpe3JldHVybiBrJiZkKGUpP25ldyBGdW5jdGlvbigicmV0dXJuIHRoaXMuX19pbXBsNGNmMWU3ODJoZ19fLiIrZSk6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fX2ltcGw0Y2YxZTc4MmhnX19bZV19fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIGsmJmQoZSk/bmV3IEZ1bmN0aW9uKCJ2IiwidGhpcy5fX2ltcGw0Y2YxZTc4MmhnX18uIitlKyIgPSB2Iik6ZnVuY3Rpb24odCl7dGhpcy5fX2ltcGw0Y2YxZTc4MmhnX19bZV09dH19ZnVuY3Rpb24gZihlKXtyZXR1cm4gayYmZChlKT9uZXcgRnVuY3Rpb24oInJldHVybiB0aGlzLl9faW1wbDRjZjFlNzgyaGdfXy4iK2UrIi5hcHBseSh0aGlzLl9faW1wbDRjZjFlNzgyaGdfXywgYXJndW1lbnRzKSIpOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX19pbXBsNGNmMWU3ODJoZ19fW2VdLmFwcGx5KHRoaXMuX19pbXBsNGNmMWU3ODJoZ19fLGFyZ3VtZW50cyl9fWZ1bmN0aW9uIG0oZSx0KXt0cnl7cmV0dXJuIGU9PT13aW5kb3cmJiJzaG93TW9kYWxEaWFsb2ciPT09dD9COk9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoZSx0KX1jYXRjaChuKXtyZXR1cm4gQn19ZnVuY3Rpb24gdyh0LG4scixvKXtmb3IodmFyIGk9Vyh0KSxhPTA7YTxpLmxlbmd0aDthKyspe3ZhciBzPWlbYV07aWYoInBvbHltZXJCbGFja0xpc3RfIiE9PXMmJiEocyBpbiBufHx0LnBvbHltZXJCbGFja0xpc3RfJiZ0LnBvbHltZXJCbGFja0xpc3RfW3NdKSl7cSYmdC5fX2xvb2t1cEdldHRlcl9fKHMpO3ZhciBjLGwsZD1tKHQscyk7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGQudmFsdWUpe3ZhciB3PXUocyk7Yz13P2UuZ2V0RXZlbnRIYW5kbGVyR2V0dGVyKHMpOnAocyksKGQud3JpdGFibGV8fGQuc2V0fHxWKSYmKGw9dz9lLmdldEV2ZW50SGFuZGxlclNldHRlcihzKTpoKHMpKTt2YXIgdj1WfHxkLmNvbmZpZ3VyYWJsZTtBKG4scyx7Z2V0OmMsc2V0OmwsY29uZmlndXJhYmxlOnYsZW51bWVyYWJsZTpkLmVudW1lcmFibGV9KX1lbHNlIHImJihuW3NdPWYocykpfX19ZnVuY3Rpb24gdihlLHQsbil7aWYobnVsbCE9ZSl7dmFyIHI9ZS5wcm90b3R5cGU7ZyhyLHQsbiksbyh0LGUpfX1mdW5jdGlvbiBnKGUsdCxyKXt2YXIgbz10LnByb3RvdHlwZTtuKHZvaWQgMD09PVIuZ2V0KGUpKSxSLnNldChlLHQpLEkuc2V0KG8sZSksYyhlLG8pLHImJmwobyxyKSxhKG8sImNvbnN0cnVjdG9yIix0KSx0LnByb3RvdHlwZT1vfWZ1bmN0aW9uIGIoZSx0KXtyZXR1cm4gUi5nZXQodC5wcm90b3R5cGUpPT09ZX1mdW5jdGlvbiB5KGUpe3ZhciB0PU9iamVjdC5nZXRQcm90b3R5cGVPZihlKSxuPXModCkscj1FKG4pO3JldHVybiBnKHQscixlKSxyfWZ1bmN0aW9uIEUoZSl7ZnVuY3Rpb24gdCh0KXtlLmNhbGwodGhpcyx0KX12YXIgbj1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlKTtyZXR1cm4gbi5jb25zdHJ1Y3Rvcj10LHQucHJvdG90eXBlPW4sdH1mdW5jdGlvbiBfKGUpe3JldHVybiBlJiZlLl9faW1wbDRjZjFlNzgyaGdfX31mdW5jdGlvbiBTKGUpe3JldHVybiFfKGUpfWZ1bmN0aW9uIFQoZSl7aWYobnVsbD09PWUpcmV0dXJuIG51bGw7bihTKGUpKTt2YXIgdD1lLl9fd3JhcHBlcjhlM2RkOTNhNjBfXztyZXR1cm4gbnVsbCE9dD90OmUuX193cmFwcGVyOGUzZGQ5M2E2MF9fPW5ldyhzKGUsZSkpKGUpfWZ1bmN0aW9uIE0oZSl7cmV0dXJuIG51bGw9PT1lP251bGw6KG4oXyhlKSksZS5fX2ltcGw0Y2YxZTc4MmhnX18pfWZ1bmN0aW9uIE8oZSl7cmV0dXJuIGUuX19pbXBsNGNmMWU3ODJoZ19ffWZ1bmN0aW9uIEwoZSx0KXt0Ll9faW1wbDRjZjFlNzgyaGdfXz1lLGUuX193cmFwcGVyOGUzZGQ5M2E2MF9fPXR9ZnVuY3Rpb24gTihlKXtyZXR1cm4gZSYmXyhlKT9NKGUpOmV9ZnVuY3Rpb24gQyhlKXtyZXR1cm4gZSYmIV8oZSk/VChlKTplfWZ1bmN0aW9uIGooZSx0KXtudWxsIT09dCYmKG4oUyhlKSksbih2b2lkIDA9PT10fHxfKHQpKSxlLl9fd3JhcHBlcjhlM2RkOTNhNjBfXz10KX1mdW5jdGlvbiBEKGUsdCxuKXtHLmdldD1uLEEoZS5wcm90b3R5cGUsdCxHKX1mdW5jdGlvbiBIKGUsdCl7RChlLHQsZnVuY3Rpb24oKXtyZXR1cm4gVCh0aGlzLl9faW1wbDRjZjFlNzgyaGdfX1t0XSl9KX1mdW5jdGlvbiB4KGUsdCl7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3QuZm9yRWFjaChmdW5jdGlvbih0KXtlLnByb3RvdHlwZVt0XT1mdW5jdGlvbigpe3ZhciBlPUModGhpcyk7cmV0dXJuIGVbdF0uYXBwbHkoZSxhcmd1bWVudHMpfX0pfSl9dmFyIFI9bmV3IFdlYWtNYXAsST1uZXcgV2Vha01hcCxQPU9iamVjdC5jcmVhdGUobnVsbCksaz10KCksQT1PYmplY3QuZGVmaW5lUHJvcGVydHksVz1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyxGPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IsVT17dmFsdWU6dm9pZCAwLGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiExLHdyaXRhYmxlOiEwfTtXKHdpbmRvdyk7dmFyIHE9L0ZpcmVmb3gvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQj17Z2V0OmZ1bmN0aW9uKCl7fSxzZXQ6ZnVuY3Rpb24oZSl7fSxjb25maWd1cmFibGU6ITAsZW51bWVyYWJsZTohMH0sVj1mdW5jdGlvbigpe3ZhciBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3IoTm9kZS5wcm90b3R5cGUsIm5vZGVUeXBlIik7cmV0dXJuIGUmJiFlLmdldCYmIWUuc2V0fSgpLEc9e2dldDp2b2lkIDAsY29uZmlndXJhYmxlOiEwLGVudW1lcmFibGU6ITB9O2UuYWRkRm9yd2FyZGluZ1Byb3BlcnRpZXM9YyxlLmFzc2VydD1uLGUuY29uc3RydWN0b3JUYWJsZT1SLGUuZGVmaW5lR2V0dGVyPUQsZS5kZWZpbmVXcmFwR2V0dGVyPUgsZS5mb3J3YXJkTWV0aG9kc1RvV3JhcHBlcj14LGUuaXNJZGVudGlmaWVyTmFtZT1kLGUuaXNXcmFwcGVyPV8sZS5pc1dyYXBwZXJGb3I9YixlLm1peGluPXIsZS5uYXRpdmVQcm90b3R5cGVUYWJsZT1JLGUub25lT2Y9aSxlLnJlZ2lzdGVyT2JqZWN0PXksZS5yZWdpc3RlcldyYXBwZXI9dixlLnJld3JhcD1qLGUuc2V0V3JhcHBlcj1MLGUudW5zYWZlVW53cmFwPU8sZS51bndyYXA9TSxlLnVud3JhcElmTmVlZGVkPU4sZS53cmFwPVQsZS53cmFwSWZOZWVkZWQ9QyxlLndyYXBwZXJzPVB9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0LG4pe3JldHVybntpbmRleDplLHJlbW92ZWQ6dCxhZGRlZENvdW50Om59fWZ1bmN0aW9uIG4oKXt9dmFyIHI9MCxvPTEsaT0yLGE9MztuLnByb3RvdHlwZT17Y2FsY0VkaXREaXN0YW5jZXM6ZnVuY3Rpb24oZSx0LG4scixvLGkpe2Zvcih2YXIgYT1pLW8rMSxzPW4tdCsxLGM9bmV3IEFycmF5KGEpLGw9MDtsPGE7bCsrKWNbbF09bmV3IEFycmF5KHMpLGNbbF1bMF09bDtmb3IodmFyIHU9MDt1PHM7dSsrKWNbMF1bdV09dTtmb3IodmFyIGw9MTtsPGE7bCsrKWZvcih2YXIgdT0xO3U8czt1KyspaWYodGhpcy5lcXVhbHMoZVt0K3UtMV0scltvK2wtMV0pKWNbbF1bdV09Y1tsLTFdW3UtMV07ZWxzZXt2YXIgZD1jW2wtMV1bdV0rMSxwPWNbbF1bdS0xXSsxO2NbbF1bdV09ZDxwP2Q6cH1yZXR1cm4gY30sc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmxlbmd0aC0xLG49ZVswXS5sZW5ndGgtMSxzPWVbdF1bbl0sYz1bXTt0PjB8fG4+MDspaWYoMCE9dClpZigwIT1uKXt2YXIgbCx1PWVbdC0xXVtuLTFdLGQ9ZVt0LTFdW25dLHA9ZVt0XVtuLTFdO2w9ZDxwP2Q8dT9kOnU6cDx1P3A6dSxsPT11Pyh1PT1zP2MucHVzaChyKTooYy5wdXNoKG8pLHM9dSksdC0tLG4tLSk6bD09ZD8oYy5wdXNoKGEpLHQtLSxzPWQpOihjLnB1c2goaSksbi0tLHM9cCl9ZWxzZSBjLnB1c2goYSksdC0tO2Vsc2UgYy5wdXNoKGkpLG4tLTtyZXR1cm4gYy5yZXZlcnNlKCksY30sY2FsY1NwbGljZXM6ZnVuY3Rpb24oZSxuLHMsYyxsLHUpe3ZhciBkPTAscD0wLGg9TWF0aC5taW4ocy1uLHUtbCk7aWYoMD09biYmMD09bCYmKGQ9dGhpcy5zaGFyZWRQcmVmaXgoZSxjLGgpKSxzPT1lLmxlbmd0aCYmdT09Yy5sZW5ndGgmJihwPXRoaXMuc2hhcmVkU3VmZml4KGUsYyxoLWQpKSxuKz1kLGwrPWQscy09cCx1LT1wLHMtbj09MCYmdS1sPT0wKXJldHVybltdO2lmKG49PXMpe2Zvcih2YXIgZj10KG4sW10sMCk7bDx1OylmLnJlbW92ZWQucHVzaChjW2wrK10pO3JldHVybltmXX1pZihsPT11KXJldHVyblt0KG4sW10scy1uKV07Zm9yKHZhciBtPXRoaXMuc3BsaWNlT3BlcmF0aW9uc0Zyb21FZGl0RGlzdGFuY2VzKHRoaXMuY2FsY0VkaXREaXN0YW5jZXMoZSxuLHMsYyxsLHUpKSxmPXZvaWQgMCx3PVtdLHY9bixnPWwsYj0wO2I8bS5sZW5ndGg7YisrKXN3aXRjaChtW2JdKXtjYXNlIHI6ZiYmKHcucHVzaChmKSxmPXZvaWQgMCksdisrLGcrKzticmVhaztjYXNlIG86Znx8KGY9dCh2LFtdLDApKSxmLmFkZGVkQ291bnQrKyx2KyssZi5yZW1vdmVkLnB1c2goY1tnXSksZysrO2JyZWFrO2Nhc2UgaTpmfHwoZj10KHYsW10sMCkpLGYuYWRkZWRDb3VudCsrLHYrKzticmVhaztjYXNlIGE6Znx8KGY9dCh2LFtdLDApKSxmLnJlbW92ZWQucHVzaChjW2ddKSxnKyt9cmV0dXJuIGYmJncucHVzaChmKSx3fSxzaGFyZWRQcmVmaXg6ZnVuY3Rpb24oZSx0LG4pe2Zvcih2YXIgcj0wO3I8bjtyKyspaWYoIXRoaXMuZXF1YWxzKGVbcl0sdFtyXSkpcmV0dXJuIHI7cmV0dXJuIG59LHNoYXJlZFN1ZmZpeDpmdW5jdGlvbihlLHQsbil7Zm9yKHZhciByPWUubGVuZ3RoLG89dC5sZW5ndGgsaT0wO2k8biYmdGhpcy5lcXVhbHMoZVstLXJdLHRbLS1vXSk7KWkrKztyZXR1cm4gaX0sY2FsY3VsYXRlU3BsaWNlczpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNhbGNTcGxpY2VzKGUsMCxlLmxlbmd0aCx0LDAsdC5sZW5ndGgpfSxlcXVhbHM6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZT09PXR9fSxlLkFycmF5U3BsaWNlPW59KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoKXthPSExO3ZhciBlPWkuc2xpY2UoMCk7aT1bXTtmb3IodmFyIHQ9MDt0PGUubGVuZ3RoO3QrKykoMCxlW3RdKSgpfWZ1bmN0aW9uIG4oZSl7aS5wdXNoKGUpLGF8fChhPSEwLHIodCwwKSl9dmFyIHIsbz13aW5kb3cuTXV0YXRpb25PYnNlcnZlcixpPVtdLGE9ITE7aWYobyl7dmFyIHM9MSxjPW5ldyBvKHQpLGw9ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUocyk7Yy5vYnNlcnZlKGwse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7cz0ocysxKSUyLGwuZGF0YT1zfX1lbHNlIHI9d2luZG93LnNldFRpbWVvdXQ7ZS5zZXRFbmRPZk1pY3JvdGFzaz1ufSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe2Uuc2NoZWR1bGVkX3x8KGUuc2NoZWR1bGVkXz0hMCxmLnB1c2goZSksbXx8KHUobiksbT0hMCkpfWZ1bmN0aW9uIG4oKXtmb3IobT0hMTtmLmxlbmd0aDspe3ZhciBlPWY7Zj1bXSxlLnNvcnQoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS51aWRfLXQudWlkX30pO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKXt2YXIgbj1lW3RdO24uc2NoZWR1bGVkXz0hMTt2YXIgcj1uLnRha2VSZWNvcmRzKCk7aShuKSxyLmxlbmd0aCYmbi5jYWxsYmFja18ocixuKX19fWZ1bmN0aW9uIHIoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnRhcmdldD10LHRoaXMuYWRkZWROb2Rlcz1uZXcgcC5Ob2RlTGlzdCx0aGlzLnJlbW92ZWROb2Rlcz1uZXcgcC5Ob2RlTGlzdCx0aGlzLnByZXZpb3VzU2libGluZz1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLmF0dHJpYnV0ZU5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1udWxsLHRoaXMub2xkVmFsdWU9bnVsbH1mdW5jdGlvbiBvKGUsdCl7Zm9yKDtlO2U9ZS5wYXJlbnROb2RlKXt2YXIgbj1oLmdldChlKTtpZihuKWZvcih2YXIgcj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdO28ub3B0aW9ucy5zdWJ0cmVlJiZvLmFkZFRyYW5zaWVudE9ic2VydmVyKHQpfX19ZnVuY3Rpb24gaShlKXtmb3IodmFyIHQ9MDt0PGUubm9kZXNfLmxlbmd0aDt0Kyspe3ZhciBuPWUubm9kZXNfW3RdLHI9aC5nZXQobik7aWYoIXIpcmV0dXJuO2Zvcih2YXIgbz0wO288ci5sZW5ndGg7bysrKXt2YXIgaT1yW29dO2kub2JzZXJ2ZXI9PT1lJiZpLnJlbW92ZVRyYW5zaWVudE9ic2VydmVycygpfX19ZnVuY3Rpb24gYShlLG4sbyl7Zm9yKHZhciBpPU9iamVjdC5jcmVhdGUobnVsbCksYT1PYmplY3QuY3JlYXRlKG51bGwpLHM9ZTtzO3M9cy5wYXJlbnROb2RlKXt2YXIgYz1oLmdldChzKTtpZihjKWZvcih2YXIgbD0wO2w8Yy5sZW5ndGg7bCsrKXt2YXIgdT1jW2xdLGQ9dS5vcHRpb25zO2lmKChzPT09ZXx8ZC5zdWJ0cmVlKSYmKCJhdHRyaWJ1dGVzIiE9PW58fGQuYXR0cmlidXRlcykmJigiYXR0cmlidXRlcyIhPT1ufHwhZC5hdHRyaWJ1dGVGaWx0ZXJ8fG51bGw9PT1vLm5hbWVzcGFjZSYmZC5hdHRyaWJ1dGVGaWx0ZXIuaW5kZXhPZihvLm5hbWUpIT09LTEpJiYoImNoYXJhY3RlckRhdGEiIT09bnx8ZC5jaGFyYWN0ZXJEYXRhKSYmKCJjaGlsZExpc3QiIT09bnx8ZC5jaGlsZExpc3QpKXt2YXIgcD11Lm9ic2VydmVyO2lbcC51aWRfXT1wLCgiYXR0cmlidXRlcyI9PT1uJiZkLmF0dHJpYnV0ZU9sZFZhbHVlfHwiY2hhcmFjdGVyRGF0YSI9PT1uJiZkLmNoYXJhY3RlckRhdGFPbGRWYWx1ZSkmJihhW3AudWlkX109by5vbGRWYWx1ZSl9fX1mb3IodmFyIGYgaW4gaSl7dmFyIHA9aVtmXSxtPW5ldyByKG4sZSk7Im5hbWUiaW4gbyYmIm5hbWVzcGFjZSJpbiBvJiYobS5hdHRyaWJ1dGVOYW1lPW8ubmFtZSxtLmF0dHJpYnV0ZU5hbWVzcGFjZT1vLm5hbWVzcGFjZSksby5hZGRlZE5vZGVzJiYobS5hZGRlZE5vZGVzPW8uYWRkZWROb2Rlcyksby5yZW1vdmVkTm9kZXMmJihtLnJlbW92ZWROb2Rlcz1vLnJlbW92ZWROb2Rlcyksby5wcmV2aW91c1NpYmxpbmcmJihtLnByZXZpb3VzU2libGluZz1vLnByZXZpb3VzU2libGluZyksby5uZXh0U2libGluZyYmKG0ubmV4dFNpYmxpbmc9by5uZXh0U2libGluZyksdm9pZCAwIT09YVtmXSYmKG0ub2xkVmFsdWU9YVtmXSksdChwKSxwLnJlY29yZHNfLnB1c2gobSl9fWZ1bmN0aW9uIHMoZSl7aWYodGhpcy5jaGlsZExpc3Q9ISFlLmNoaWxkTGlzdCx0aGlzLnN1YnRyZWU9ISFlLnN1YnRyZWUsImF0dHJpYnV0ZXMiaW4gZXx8ISgiYXR0cmlidXRlT2xkVmFsdWUiaW4gZXx8ImF0dHJpYnV0ZUZpbHRlciJpbiBlKT90aGlzLmF0dHJpYnV0ZXM9ISFlLmF0dHJpYnV0ZXM6dGhpcy5hdHRyaWJ1dGVzPSEwLCJjaGFyYWN0ZXJEYXRhT2xkVmFsdWUiaW4gZSYmISgiY2hhcmFjdGVyRGF0YSJpbiBlKT90aGlzLmNoYXJhY3RlckRhdGE9ITA6dGhpcy5jaGFyYWN0ZXJEYXRhPSEhZS5jaGFyYWN0ZXJEYXRhLCF0aGlzLmF0dHJpYnV0ZXMmJihlLmF0dHJpYnV0ZU9sZFZhbHVlfHwiYXR0cmlidXRlRmlsdGVyImluIGUpfHwhdGhpcy5jaGFyYWN0ZXJEYXRhJiZlLmNoYXJhY3RlckRhdGFPbGRWYWx1ZSl0aHJvdyBuZXcgVHlwZUVycm9yO2lmKHRoaXMuY2hhcmFjdGVyRGF0YT0hIWUuY2hhcmFjdGVyRGF0YSx0aGlzLmF0dHJpYnV0ZU9sZFZhbHVlPSEhZS5hdHRyaWJ1dGVPbGRWYWx1ZSx0aGlzLmNoYXJhY3RlckRhdGFPbGRWYWx1ZT0hIWUuY2hhcmFjdGVyRGF0YU9sZFZhbHVlLCJhdHRyaWJ1dGVGaWx0ZXIiaW4gZSl7aWYobnVsbD09ZS5hdHRyaWJ1dGVGaWx0ZXJ8fCJvYmplY3QiIT10eXBlb2YgZS5hdHRyaWJ1dGVGaWx0ZXIpdGhyb3cgbmV3IFR5cGVFcnJvcjt0aGlzLmF0dHJpYnV0ZUZpbHRlcj13LmNhbGwoZS5hdHRyaWJ1dGVGaWx0ZXIpfWVsc2UgdGhpcy5hdHRyaWJ1dGVGaWx0ZXI9bnVsbH1mdW5jdGlvbiBjKGUpe3RoaXMuY2FsbGJhY2tfPWUsdGhpcy5ub2Rlc189W10sdGhpcy5yZWNvcmRzXz1bXSx0aGlzLnVpZF89Kyt2LHRoaXMuc2NoZWR1bGVkXz0hMX1mdW5jdGlvbiBsKGUsdCxuKXt0aGlzLm9ic2VydmVyPWUsdGhpcy50YXJnZXQ9dCx0aGlzLm9wdGlvbnM9bix0aGlzLnRyYW5zaWVudE9ic2VydmVkTm9kZXM9W119dmFyIHU9ZS5zZXRFbmRPZk1pY3JvdGFzayxkPWUud3JhcElmTmVlZGVkLHA9ZS53cmFwcGVycyxoPW5ldyBXZWFrTWFwLGY9W10sbT0hMSx3PUFycmF5LnByb3RvdHlwZS5zbGljZSx2PTA7Yy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOmMsb2JzZXJ2ZTpmdW5jdGlvbihlLHQpe2U9ZChlKTt2YXIgbixyPW5ldyBzKHQpLG89aC5nZXQoZSk7b3x8aC5zZXQoZSxvPVtdKTtmb3IodmFyIGk9MDtpPG8ubGVuZ3RoO2krKylvW2ldLm9ic2VydmVyPT09dGhpcyYmKG49b1tpXSxuLnJlbW92ZVRyYW5zaWVudE9ic2VydmVycygpLG4ub3B0aW9ucz1yKTtufHwobj1uZXcgbCh0aGlzLGUsciksby5wdXNoKG4pLHRoaXMubm9kZXNfLnB1c2goZSkpfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7dGhpcy5ub2Rlc18uZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHQ9aC5nZXQoZSksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIub2JzZXJ2ZXI9PT10aGlzKXt0LnNwbGljZShuLDEpO2JyZWFrfX19LHRoaXMpLHRoaXMucmVjb3Jkc189W119LHRha2VSZWNvcmRzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWNvcmRzXztyZXR1cm4gdGhpcy5yZWNvcmRzXz1bXSxlfX0sbC5wcm90b3R5cGU9e2FkZFRyYW5zaWVudE9ic2VydmVyOmZ1bmN0aW9uKGUpe2lmKGUhPT10aGlzLnRhcmdldCl7dCh0aGlzLm9ic2VydmVyKSx0aGlzLnRyYW5zaWVudE9ic2VydmVkTm9kZXMucHVzaChlKTt2YXIgbj1oLmdldChlKTtufHxoLnNldChlLG49W10pLG4ucHVzaCh0aGlzKX19LHJlbW92ZVRyYW5zaWVudE9ic2VydmVyczpmdW5jdGlvbigpe3ZhciBlPXRoaXMudHJhbnNpZW50T2JzZXJ2ZWROb2Rlczt0aGlzLnRyYW5zaWVudE9ic2VydmVkTm9kZXM9W107Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZm9yKHZhciBuPWVbdF0scj1oLmdldChuKSxvPTA7bzxyLmxlbmd0aDtvKyspaWYocltvXT09PXRoaXMpe3Iuc3BsaWNlKG8sMSk7YnJlYWt9fX0sZS5lbnF1ZXVlTXV0YXRpb249YSxlLnJlZ2lzdGVyVHJhbnNpZW50T2JzZXJ2ZXJzPW8sZS53cmFwcGVycy5NdXRhdGlvbk9ic2VydmVyPWMsZS53cmFwcGVycy5NdXRhdGlvblJlY29yZD1yfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCl7dGhpcy5yb290PWUsdGhpcy5wYXJlbnQ9dH1mdW5jdGlvbiBuKGUsdCl7aWYoZS50cmVlU2NvcGVfIT09dCl7ZS50cmVlU2NvcGVfPXQ7Zm9yKHZhciByPWUuc2hhZG93Um9vdDtyO3I9ci5vbGRlclNoYWRvd1Jvb3Qpci50cmVlU2NvcGVfLnBhcmVudD10O2Zvcih2YXIgbz1lLmZpcnN0Q2hpbGQ7bztvPW8ubmV4dFNpYmxpbmcpbihvLHQpfX1mdW5jdGlvbiByKG4pe2lmKG4gaW5zdGFuY2VvZiBlLndyYXBwZXJzLldpbmRvdyxuLnRyZWVTY29wZV8pcmV0dXJuIG4udHJlZVNjb3BlXzt2YXIgbyxpPW4ucGFyZW50Tm9kZTtyZXR1cm4gbz1pP3IoaSk6bmV3IHQobixudWxsKSxuLnRyZWVTY29wZV89b310LnByb3RvdHlwZT17Z2V0IHJlbmRlcmVyKCl7cmV0dXJuIHRoaXMucm9vdCBpbnN0YW5jZW9mIGUud3JhcHBlcnMuU2hhZG93Um9vdD9lLmdldFJlbmRlcmVyRm9ySG9zdCh0aGlzLnJvb3QuaG9zdCk6bnVsbH0sY29udGFpbnM6ZnVuY3Rpb24oZSl7Zm9yKDtlO2U9ZS5wYXJlbnQpaWYoZT09PXRoaXMpcmV0dXJuITA7cmV0dXJuITF9fSxlLlRyZWVTY29wZT10LGUuZ2V0VHJlZVNjb3BlPXIsZS5zZXRUcmVlU2NvcGU9bn0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEcuU2hhZG93Um9vdH1mdW5jdGlvbiBuKGUpe3JldHVybiBBKGUpLnJvb3R9ZnVuY3Rpb24gcihlLHIpe3ZhciBzPVtdLGM9ZTtmb3Iocy5wdXNoKGMpO2M7KXt2YXIgbD1hKGMpO2lmKGwmJmwubGVuZ3RoPjApe2Zvcih2YXIgdT0wO3U8bC5sZW5ndGg7dSsrKXt2YXIgcD1sW3VdO2lmKGkocCkpe3ZhciBoPW4ocCksZj1oLm9sZGVyU2hhZG93Um9vdDtmJiZzLnB1c2goZil9cy5wdXNoKHApfWM9bFtsLmxlbmd0aC0xXX1lbHNlIGlmKHQoYykpe2lmKGQoZSxjKSYmbyhyKSlicmVhaztjPWMuaG9zdCxzLnB1c2goYyl9ZWxzZSBjPWMucGFyZW50Tm9kZSxjJiZzLnB1c2goYyl9cmV0dXJuIHN9ZnVuY3Rpb24gbyhlKXtpZighZSlyZXR1cm4hMTtzd2l0Y2goZS50eXBlKXtjYXNlImFib3J0IjpjYXNlImVycm9yIjpjYXNlInNlbGVjdCI6Y2FzZSJjaGFuZ2UiOmNhc2UibG9hZCI6Y2FzZSJyZXNldCI6Y2FzZSJyZXNpemUiOmNhc2Uic2Nyb2xsIjpjYXNlInNlbGVjdHN0YXJ0IjpyZXR1cm4hMH1yZXR1cm4hMX1mdW5jdGlvbiBpKGUpe3JldHVybiBlIGluc3RhbmNlb2YgSFRNTFNoYWRvd0VsZW1lbnR9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZS5nZXREZXN0aW5hdGlvbkluc2VydGlvblBvaW50cyh0KX1mdW5jdGlvbiBzKGUsdCl7aWYoMD09PWUubGVuZ3RoKXJldHVybiB0O3QgaW5zdGFuY2VvZiBHLldpbmRvdyYmKHQ9dC5kb2N1bWVudCk7Zm9yKHZhciBuPUEodCkscj1lWzBdLG89QShyKSxpPWwobixvKSxhPTA7YTxlLmxlbmd0aDthKyspe3ZhciBzPWVbYV07aWYoQShzKT09PWkpcmV0dXJuIHN9cmV0dXJuIGVbZS5sZW5ndGgtMV19ZnVuY3Rpb24gYyhlKXtmb3IodmFyIHQ9W107ZTtlPWUucGFyZW50KXQucHVzaChlKTtyZXR1cm4gdH1mdW5jdGlvbiBsKGUsdCl7Zm9yKHZhciBuPWMoZSkscj1jKHQpLG89bnVsbDtuLmxlbmd0aD4wJiZyLmxlbmd0aD4wOyl7dmFyIGk9bi5wb3AoKSxhPXIucG9wKCk7aWYoaSE9PWEpYnJlYWs7bz1pfXJldHVybiBvfWZ1bmN0aW9uIHUoZSx0LG4pe3QgaW5zdGFuY2VvZiBHLldpbmRvdyYmKHQ9dC5kb2N1bWVudCk7dmFyIG8saT1BKHQpLGE9QShuKSxzPXIobixlKSxvPWwoaSxhKTtvfHwobz1hLnJvb3QpO2Zvcih2YXIgYz1vO2M7Yz1jLnBhcmVudClmb3IodmFyIHU9MDt1PHMubGVuZ3RoO3UrKyl7dmFyIGQ9c1t1XTtpZihBKGQpPT09YylyZXR1cm4gZH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBkKGUsdCl7cmV0dXJuIEEoZSk9PT1BKHQpfWZ1bmN0aW9uIHAoZSl7aWYoIUsuZ2V0KGUpJiYoSy5zZXQoZSwhMCksZihWKGUpLFYoZS50YXJnZXQpKSxQKSl7dmFyIHQ9UDt0aHJvdyBQPW51bGwsdH19ZnVuY3Rpb24gaChlKXtzd2l0Y2goZS50eXBlKXtjYXNlImxvYWQiOmNhc2UiYmVmb3JldW5sb2FkIjpjYXNlInVubG9hZCI6cmV0dXJuITB9cmV0dXJuITF9ZnVuY3Rpb24gZih0LG4pe2lmKCQuZ2V0KHQpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZFN0YXRlRXJyb3IiKTskLnNldCh0LCEwKSxlLnJlbmRlckFsbFBlbmRpbmcoKTt2YXIgbyxpLGE7aWYoaCh0KSYmIXQuYnViYmxlcyl7dmFyIHM9bjtzIGluc3RhbmNlb2YgRy5Eb2N1bWVudCYmKGE9cy5kZWZhdWx0VmlldykmJihpPXMsbz1bXSl9aWYoIW8paWYobiBpbnN0YW5jZW9mIEcuV2luZG93KWE9bixvPVtdO2Vsc2UgaWYobz1yKG4sdCksIWgodCkpe3ZhciBzPW9bby5sZW5ndGgtMV07cyBpbnN0YW5jZW9mIEcuRG9jdW1lbnQmJihhPXMuZGVmYXVsdFZpZXcpfXJldHVybiBuZS5zZXQodCxvKSxtKHQsbyxhLGkpJiZ3KHQsbyxhLGkpJiZ2KHQsbyxhLGkpLEouc2V0KHQscmUpLFlbImRlbGV0ZSJdKHQsbnVsbCksJFsiZGVsZXRlIl0odCksdC5kZWZhdWx0UHJldmVudGVkfWZ1bmN0aW9uIG0oZSx0LG4scil7dmFyIG89b2U7aWYobiYmIWcobixlLG8sdCxyKSlyZXR1cm4hMTtmb3IodmFyIGk9dC5sZW5ndGgtMTtpPjA7aS0tKWlmKCFnKHRbaV0sZSxvLHQscikpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdyhlLHQsbixyKXt2YXIgbz1pZSxpPXRbMF18fG47cmV0dXJuIGcoaSxlLG8sdCxyKX1mdW5jdGlvbiB2KGUsdCxuLHIpe2Zvcih2YXIgbz1hZSxpPTE7aTx0Lmxlbmd0aDtpKyspaWYoIWcodFtpXSxlLG8sdCxyKSlyZXR1cm47biYmdC5sZW5ndGg+MCYmZyhuLGUsbyx0LHIpfWZ1bmN0aW9uIGcoZSx0LG4scixvKXt2YXIgaT16LmdldChlKTtpZighaSlyZXR1cm4hMDt2YXIgYT1vfHxzKHIsZSk7aWYoYT09PWUpe2lmKG49PT1vZSlyZXR1cm4hMDtuPT09YWUmJihuPWllKX1lbHNlIGlmKG49PT1hZSYmIXQuYnViYmxlcylyZXR1cm4hMDtpZigicmVsYXRlZFRhcmdldCJpbiB0KXt2YXIgYz1CKHQpLGw9Yy5yZWxhdGVkVGFyZ2V0O2lmKGwpe2lmKGwgaW5zdGFuY2VvZiBPYmplY3QmJmwuYWRkRXZlbnRMaXN0ZW5lcil7dmFyIGQ9VihsKSxwPXUodCxlLGQpO2lmKHA9PT1hKXJldHVybiEwfWVsc2UgcD1udWxsO1ouc2V0KHQscCl9fUouc2V0KHQsbik7dmFyIGg9dC50eXBlLGY9ITE7WC5zZXQodCxhKSxZLnNldCh0LGUpLGkuZGVwdGgrKztmb3IodmFyIG09MCx3PWkubGVuZ3RoO208dzttKyspe3ZhciB2PWlbbV07aWYodi5yZW1vdmVkKWY9ITA7ZWxzZSBpZighKHYudHlwZSE9PWh8fCF2LmNhcHR1cmUmJm49PT1vZXx8di5jYXB0dXJlJiZuPT09YWUpKXRyeXtpZigiZnVuY3Rpb24iPT10eXBlb2Ygdi5oYW5kbGVyP3YuaGFuZGxlci5jYWxsKGUsdCk6di5oYW5kbGVyLmhhbmRsZUV2ZW50KHQpLGVlLmdldCh0KSlyZXR1cm4hMX1jYXRjaChnKXtQfHwoUD1nKX19aWYoaS5kZXB0aC0tLGYmJjA9PT1pLmRlcHRoKXt2YXIgYj1pLnNsaWNlKCk7aS5sZW5ndGg9MDtmb3IodmFyIG09MDttPGIubGVuZ3RoO20rKyliW21dLnJlbW92ZWR8fGkucHVzaChiW21dKX1yZXR1cm4hUS5nZXQodCl9ZnVuY3Rpb24gYihlLHQsbil7dGhpcy50eXBlPWUsdGhpcy5oYW5kbGVyPXQsdGhpcy5jYXB0dXJlPUJvb2xlYW4obil9ZnVuY3Rpb24geShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHNlKSlyZXR1cm4gVihUKHNlLCJFdmVudCIsZSx0KSk7dmFyIG49ZTtyZXR1cm4gYmV8fCJiZWZvcmV1bmxvYWQiIT09bi50eXBlfHx0aGlzIGluc3RhbmNlb2YgTT92b2lkIFUobix0aGlzKTpuZXcgTShuKX1mdW5jdGlvbiBFKGUpe3JldHVybiBlJiZlLnJlbGF0ZWRUYXJnZXQ/T2JqZWN0LmNyZWF0ZShlLHtyZWxhdGVkVGFyZ2V0Ont2YWx1ZTpCKGUucmVsYXRlZFRhcmdldCl9fSk6ZX1mdW5jdGlvbiBfKGUsdCxuKXt2YXIgcj13aW5kb3dbZV0sbz1mdW5jdGlvbih0LG4pe3JldHVybiB0IGluc3RhbmNlb2Ygcj92b2lkIFUodCx0aGlzKTpWKFQocixlLHQsbikpfTtpZihvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlKSxuJiZXKG8ucHJvdG90eXBlLG4pLHIpdHJ5e0YocixvLG5ldyByKCJ0ZW1wIikpfWNhdGNoKGkpe0YocixvLGRvY3VtZW50LmNyZWF0ZUV2ZW50KGUpKX1yZXR1cm4gb31mdW5jdGlvbiBTKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7YXJndW1lbnRzW3RdPUIoYXJndW1lbnRzW3RdKTt2YXIgbj1CKHRoaXMpO25bZV0uYXBwbHkobixhcmd1bWVudHMpfX1mdW5jdGlvbiBUKGUsdCxuLHIpe2lmKHZlKXJldHVybiBuZXcgZShuLEUocikpO3ZhciBvPUIoZG9jdW1lbnQuY3JlYXRlRXZlbnQodCkpLGk9d2VbdF0sYT1bbl07cmV0dXJuIE9iamVjdC5rZXlzKGkpLmZvckVhY2goZnVuY3Rpb24oZSl7dmFyIHQ9bnVsbCE9ciYmZSBpbiByP3JbZV06aVtlXTsicmVsYXRlZFRhcmdldCI9PT1lJiYodD1CKHQpKSxhLnB1c2godCl9KSxvWyJpbml0Iit0XS5hcHBseShvLGEpLG99ZnVuY3Rpb24gTShlKXt5LmNhbGwodGhpcyxlKX1mdW5jdGlvbiBPKGUpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiBlfHxlJiZlLmhhbmRsZUV2ZW50fWZ1bmN0aW9uIEwoZSl7c3dpdGNoKGUpe2Nhc2UiRE9NQXR0ck1vZGlmaWVkIjpjYXNlIkRPTUF0dHJpYnV0ZU5hbWVDaGFuZ2VkIjpjYXNlIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCI6Y2FzZSJET01FbGVtZW50TmFtZUNoYW5nZWQiOmNhc2UiRE9NTm9kZUluc2VydGVkIjpjYXNlIkRPTU5vZGVJbnNlcnRlZEludG9Eb2N1bWVudCI6Y2FzZSJET01Ob2RlUmVtb3ZlZCI6Y2FzZSJET01Ob2RlUmVtb3ZlZEZyb21Eb2N1bWVudCI6Y2FzZSJET01TdWJ0cmVlTW9kaWZpZWQiOnJldHVybiEwfXJldHVybiExfWZ1bmN0aW9uIE4oZSl7VShlLHRoaXMpfWZ1bmN0aW9uIEMoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBHLlNoYWRvd1Jvb3QmJihlPWUuaG9zdCksQihlKX1mdW5jdGlvbiBqKGUsdCl7dmFyIG49ei5nZXQoZSk7aWYobilmb3IodmFyIHI9MDtyPG4ubGVuZ3RoO3IrKylpZighbltyXS5yZW1vdmVkJiZuW3JdLnR5cGU9PT10KXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIEQoZSx0KXtmb3IodmFyIG49QihlKTtuO249bi5wYXJlbnROb2RlKWlmKGooVihuKSx0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBIKGUpe2soZSxFZSl9ZnVuY3Rpb24geCh0LG4sbyxpKXtlLnJlbmRlckFsbFBlbmRpbmcoKTt2YXIgYT1WKF9lLmNhbGwocShuKSxvLGkpKTtpZighYSlyZXR1cm4gbnVsbDt2YXIgYz1yKGEsbnVsbCksbD1jLmxhc3RJbmRleE9mKHQpO3JldHVybiBsPT0tMT9udWxsOihjPWMuc2xpY2UoMCxsKSxzKGMsdCkpfWZ1bmN0aW9uIFIoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGUuZ2V0KHRoaXMpO3JldHVybiB0JiZ0W2VdJiZ0W2VdLnZhbHVlfHxudWxsfX1mdW5jdGlvbiBJKGUpe3ZhciB0PWUuc2xpY2UoMik7cmV0dXJuIGZ1bmN0aW9uKG4pe3ZhciByPXRlLmdldCh0aGlzKTtyfHwocj1PYmplY3QuY3JlYXRlKG51bGwpLHRlLnNldCh0aGlzLHIpKTt2YXIgbz1yW2VdO2lmKG8mJnRoaXMucmVtb3ZlRXZlbnRMaXN0ZW5lcih0LG8ud3JhcHBlZCwhMSksImZ1bmN0aW9uIj09dHlwZW9mIG4pe3ZhciBpPWZ1bmN0aW9uKHQpe3ZhciByPW4uY2FsbCh0aGlzLHQpO3I9PT0hMT90LnByZXZlbnREZWZhdWx0KCk6Im9uYmVmb3JldW5sb2FkIj09PWUmJiJzdHJpbmciPT10eXBlb2YgciYmKHQucmV0dXJuVmFsdWU9cil9O3RoaXMuYWRkRXZlbnRMaXN0ZW5lcih0LGksITEpLHJbZV09e3ZhbHVlOm4sd3JhcHBlZDppfX19fXZhciBQLGs9ZS5mb3J3YXJkTWV0aG9kc1RvV3JhcHBlcixBPWUuZ2V0VHJlZVNjb3BlLFc9ZS5taXhpbixGPWUucmVnaXN0ZXJXcmFwcGVyLFU9ZS5zZXRXcmFwcGVyLHE9ZS51bnNhZmVVbndyYXAsQj1lLnVud3JhcCxWPWUud3JhcCxHPWUud3JhcHBlcnMsej0obmV3IFdlYWtNYXAsbmV3IFdlYWtNYXApLEs9bmV3IFdlYWtNYXAsJD1uZXcgV2Vha01hcCxYPW5ldyBXZWFrTWFwLFk9bmV3IFdlYWtNYXAsWj1uZXcgV2Vha01hcCxKPW5ldyBXZWFrTWFwLFE9bmV3IFdlYWtNYXAsZWU9bmV3IFdlYWtNYXAsdGU9bmV3IFdlYWtNYXAsbmU9bmV3IFdlYWtNYXAscmU9MCxvZT0xLGllPTIsYWU9MztiLnByb3RvdHlwZT17ZXF1YWxzOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmhhbmRsZXI9PT1lLmhhbmRsZXImJnRoaXMudHlwZT09PWUudHlwZSYmdGhpcy5jYXB0dXJlPT09ZS5jYXB0dXJlfSxnZXQgcmVtb3ZlZCgpe3JldHVybiBudWxsPT09dGhpcy5oYW5kbGVyfSxyZW1vdmU6ZnVuY3Rpb24oKXt0aGlzLmhhbmRsZXI9bnVsbH19O3ZhciBzZT13aW5kb3cuRXZlbnQ7c2UucHJvdG90eXBlLnBvbHltZXJCbGFja0xpc3RfPXtyZXR1cm5WYWx1ZTohMCxrZXlMb2NhdGlvbjohMH0seS5wcm90b3R5cGU9e2dldCB0YXJnZXQoKXtyZXR1cm4gWC5nZXQodGhpcyl9LGdldCBjdXJyZW50VGFyZ2V0KCl7cmV0dXJuIFkuZ2V0KHRoaXMpfSxnZXQgZXZlbnRQaGFzZSgpe3JldHVybiBKLmdldCh0aGlzKX0sZ2V0IHBhdGgoKXt2YXIgZT1uZS5nZXQodGhpcyk7cmV0dXJuIGU/ZS5zbGljZSgpOltdfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXtRLnNldCh0aGlzLCEwKX0sc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uOmZ1bmN0aW9uKCl7US5zZXQodGhpcywhMCksZWUuc2V0KHRoaXMsITApfX07dmFyIGNlPWZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIGUuaW5pdEV2ZW50KCJ0ZXN0IiwhMCwhMCksZS5wcmV2ZW50RGVmYXVsdCgpLGUuZGVmYXVsdFByZXZlbnRlZH0oKTtjZXx8KHkucHJvdG90eXBlLnByZXZlbnREZWZhdWx0PWZ1bmN0aW9uKCl7dGhpcy5jYW5jZWxhYmxlJiYocSh0aGlzKS5wcmV2ZW50RGVmYXVsdCgpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0aGlzLCJkZWZhdWx0UHJldmVudGVkIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuITB9LGNvbmZpZ3VyYWJsZTohMH0pKX0pLEYoc2UseSxkb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKSk7dmFyIGxlPV8oIlVJRXZlbnQiLHkpLHVlPV8oIkN1c3RvbUV2ZW50Iix5KSxkZT17Z2V0IHJlbGF0ZWRUYXJnZXQoKXt2YXIgZT1aLmdldCh0aGlzKTtyZXR1cm4gdm9pZCAwIT09ZT9lOlYoQih0aGlzKS5yZWxhdGVkVGFyZ2V0KX19LHBlPVcoe2luaXRNb3VzZUV2ZW50OlMoImluaXRNb3VzZUV2ZW50IiwxNCl9LGRlKSxoZT1XKHtpbml0Rm9jdXNFdmVudDpTKCJpbml0Rm9jdXNFdmVudCIsNSl9LGRlKSxmZT1fKCJNb3VzZUV2ZW50IixsZSxwZSksbWU9XygiRm9jdXNFdmVudCIsbGUsaGUpLHdlPU9iamVjdC5jcmVhdGUobnVsbCksdmU9ZnVuY3Rpb24oKXt0cnl7bmV3IHdpbmRvdy5Gb2N1c0V2ZW50KCJmb2N1cyIpfWNhdGNoKGUpe3JldHVybiExfXJldHVybiEwfSgpO2lmKCF2ZSl7dmFyIGdlPWZ1bmN0aW9uKGUsdCxuKXtpZihuKXt2YXIgcj13ZVtuXTt0PVcoVyh7fSxyKSx0KX13ZVtlXT10fTtnZSgiRXZlbnQiLHtidWJibGVzOiExLGNhbmNlbGFibGU6ITF9KSxnZSgiQ3VzdG9tRXZlbnQiLHtkZXRhaWw6bnVsbH0sIkV2ZW50IiksZ2UoIlVJRXZlbnQiLHt2aWV3Om51bGwsZGV0YWlsOjB9LCJFdmVudCIpLGdlKCJNb3VzZUV2ZW50Iix7c2NyZWVuWDowLHNjcmVlblk6MCxjbGllbnRYOjAsY2xpZW50WTowLGN0cmxLZXk6ITEsYWx0S2V5OiExLHNoaWZ0S2V5OiExLG1ldGFLZXk6ITEsYnV0dG9uOjAscmVsYXRlZFRhcmdldDpudWxsfSwiVUlFdmVudCIpLGdlKCJGb2N1c0V2ZW50Iix7cmVsYXRlZFRhcmdldDpudWxsfSwiVUlFdmVudCIpfXZhciBiZT13aW5kb3cuQmVmb3JlVW5sb2FkRXZlbnQ7TS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh5LnByb3RvdHlwZSksVyhNLnByb3RvdHlwZSx7Z2V0IHJldHVyblZhbHVlKCl7cmV0dXJuIHEodGhpcykucmV0dXJuVmFsdWV9LHNldCByZXR1cm5WYWx1ZShlKXtxKHRoaXMpLnJldHVyblZhbHVlPWV9fSksYmUmJkYoYmUsTSk7dmFyIHllPXdpbmRvdy5FdmVudFRhcmdldCxFZT1bImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCJdO1tOb2RlLFdpbmRvd10uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1lLnByb3RvdHlwZTtFZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LGUrIl8iLHt2YWx1ZTp0W2VdfSl9KX0pLE4ucHJvdG90eXBlPXthZGRFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtpZihPKHQpJiYhTChlKSl7dmFyIHI9bmV3IGIoZSx0LG4pLG89ei5nZXQodGhpcyk7aWYobyl7Zm9yKHZhciBpPTA7aTxvLmxlbmd0aDtpKyspaWYoci5lcXVhbHMob1tpXSkpcmV0dXJufWVsc2Ugbz1bXSxvLmRlcHRoPTAsei5zZXQodGhpcyxvKTtvLnB1c2gocik7dmFyIGE9Qyh0aGlzKTthLmFkZEV2ZW50TGlzdGVuZXJfKGUscCwhMCl9fSxyZW1vdmVFdmVudExpc3RlbmVyOmZ1bmN0aW9uKGUsdCxuKXtuPUJvb2xlYW4obik7dmFyIHI9ei5nZXQodGhpcyk7aWYocil7Zm9yKHZhciBvPTAsaT0hMSxhPTA7YTxyLmxlbmd0aDthKyspclthXS50eXBlPT09ZSYmclthXS5jYXB0dXJlPT09biYmKG8rKyxyW2FdLmhhbmRsZXI9PT10JiYoaT0hMCxyW2FdLnJlbW92ZSgpKSk7aWYoaSYmMT09PW8pe3ZhciBzPUModGhpcyk7cy5yZW1vdmVFdmVudExpc3RlbmVyXyhlLHAsITApfX19LGRpc3BhdGNoRXZlbnQ6ZnVuY3Rpb24odCl7dmFyIG49Qih0KSxyPW4udHlwZTtLLnNldChuLCExKSxlLnJlbmRlckFsbFBlbmRpbmcoKTt2YXIgbztEKHRoaXMscil8fChvPWZ1bmN0aW9uKCl7fSx0aGlzLmFkZEV2ZW50TGlzdGVuZXIocixvLCEwKSk7dHJ5e3JldHVybiBCKHRoaXMpLmRpc3BhdGNoRXZlbnRfKG4pfWZpbmFsbHl7byYmdGhpcy5yZW1vdmVFdmVudExpc3RlbmVyKHIsbywhMCl9fX0seWUmJkYoeWUsTik7dmFyIF9lPWRvY3VtZW50LmVsZW1lbnRGcm9tUG9pbnQ7ZS5lbGVtZW50RnJvbVBvaW50PXgsZS5nZXRFdmVudEhhbmRsZXJHZXR0ZXI9UixlLmdldEV2ZW50SGFuZGxlclNldHRlcj1JLGUud3JhcEV2ZW50VGFyZ2V0TWV0aG9kcz1ILGUud3JhcHBlcnMuQmVmb3JlVW5sb2FkRXZlbnQ9TSxlLndyYXBwZXJzLkN1c3RvbUV2ZW50PXVlLGUud3JhcHBlcnMuRXZlbnQ9eSxlLndyYXBwZXJzLkV2ZW50VGFyZ2V0PU4sZS53cmFwcGVycy5Gb2N1c0V2ZW50PW1lLGUud3JhcHBlcnMuTW91c2VFdmVudD1mZSxlLndyYXBwZXJzLlVJRXZlbnQ9bGV9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSx0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LG0pfWZ1bmN0aW9uIG4oZSl7bChlLHRoaXMpfWZ1bmN0aW9uIHIoKXt0aGlzLmxlbmd0aD0wLHQodGhpcywibGVuZ3RoIil9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9bmV3IHIsbz0wO288ZS5sZW5ndGg7bysrKXRbb109bmV3IG4oZVtvXSk7cmV0dXJuIHQubGVuZ3RoPW8sdH1mdW5jdGlvbiBpKGUpe2EuY2FsbCh0aGlzLGUpfXZhciBhPWUud3JhcHBlcnMuVUlFdmVudCxzPWUubWl4aW4sYz1lLnJlZ2lzdGVyV3JhcHBlcixsPWUuc2V0V3JhcHBlcix1PWUudW5zYWZlVW53cmFwLGQ9ZS53cmFwLHA9d2luZG93LlRvdWNoRXZlbnQ7aWYocCl7dmFyIGg7dHJ5e2g9ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIlRvdWNoRXZlbnQiKX1jYXRjaChmKXtyZXR1cm59dmFyIG09e2VudW1lcmFibGU6ITF9O24ucHJvdG90eXBlPXtnZXQgdGFyZ2V0KCl7cmV0dXJuIGQodSh0aGlzKS50YXJnZXQpfX07dmFyIHc9e2NvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwLGdldDpudWxsfTtbImNsaWVudFgiLCJjbGllbnRZIiwic2NyZWVuWCIsInNjcmVlblkiLCJwYWdlWCIsInBhZ2VZIiwiaWRlbnRpZmllciIsIndlYmtpdFJhZGl1c1giLCJ3ZWJraXRSYWRpdXNZIiwid2Via2l0Um90YXRpb25BbmdsZSIsIndlYmtpdEZvcmNlIl0uZm9yRWFjaChmdW5jdGlvbihlKXt3LmdldD1mdW5jdGlvbigpe3JldHVybiB1KHRoaXMpW2VdfSxPYmplY3QuZGVmaW5lUHJvcGVydHkobi5wcm90b3R5cGUsZSx3KX0pLHIucHJvdG90eXBlPXtpdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfX0saS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSkscyhpLnByb3RvdHlwZSx7Z2V0IHRvdWNoZXMoKXtyZXR1cm4gbyh1KHRoaXMpLnRvdWNoZXMpfSxnZXQgdGFyZ2V0VG91Y2hlcygpe3JldHVybiBvKHUodGhpcykudGFyZ2V0VG91Y2hlcyl9LGdldCBjaGFuZ2VkVG91Y2hlcygpe3JldHVybiBvKHUodGhpcykuY2hhbmdlZFRvdWNoZXMpfSxpbml0VG91Y2hFdmVudDpmdW5jdGlvbigpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9fSksYyhwLGksaCksZS53cmFwcGVycy5Ub3VjaD1uLGUud3JhcHBlcnMuVG91Y2hFdmVudD1pLGUud3JhcHBlcnMuVG91Y2hMaXN0PXJ9fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUsdCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCxzKX1mdW5jdGlvbiBuKCl7dGhpcy5sZW5ndGg9MCx0KHRoaXMsImxlbmd0aCIpfWZ1bmN0aW9uIHIoZSl7aWYobnVsbD09ZSlyZXR1cm4gZTtmb3IodmFyIHQ9bmV3IG4scj0wLG89ZS5sZW5ndGg7cjxvO3IrKyl0W3JdPWEoZVtyXSk7cmV0dXJuIHQubGVuZ3RoPW8sdH1mdW5jdGlvbiBvKGUsdCl7ZS5wcm90b3R5cGVbdF09ZnVuY3Rpb24oKXtyZXR1cm4gcihpKHRoaXMpW3RdLmFwcGx5KGkodGhpcyksYXJndW1lbnRzKSl9fXZhciBpPWUudW5zYWZlVW53cmFwLGE9ZS53cmFwLHM9e2VudW1lcmFibGU6ITF9O24ucHJvdG90eXBlPXtpdGVtOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzW2VdfX0sdChuLnByb3RvdHlwZSwiaXRlbSIpLGUud3JhcHBlcnMuTm9kZUxpc3Q9bixlLmFkZFdyYXBOb2RlTGlzdE1ldGhvZD1vLGUud3JhcE5vZGVMaXN0PXJ9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Uud3JhcEhUTUxDb2xsZWN0aW9uPWUud3JhcE5vZGVMaXN0LGUud3JhcHBlcnMuSFRNTENvbGxlY3Rpb249ZS53cmFwcGVycy5Ob2RlTGlzdH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtPKGUgaW5zdGFuY2VvZiBfKX1mdW5jdGlvbiBuKGUpe3ZhciB0PW5ldyBUO3JldHVybiB0WzBdPWUsdC5sZW5ndGg9MSx0fWZ1bmN0aW9uIHIoZSx0LG4pe04odCwiY2hpbGRMaXN0Iix7cmVtb3ZlZE5vZGVzOm4scHJldmlvdXNTaWJsaW5nOmUucHJldmlvdXNTaWJsaW5nLG5leHRTaWJsaW5nOmUubmV4dFNpYmxpbmd9KX1mdW5jdGlvbiBvKGUsdCl7TihlLCJjaGlsZExpc3QiLHtyZW1vdmVkTm9kZXM6dH0pfWZ1bmN0aW9uIGkoZSx0LHIsbyl7aWYoZSBpbnN0YW5jZW9mIERvY3VtZW50RnJhZ21lbnQpe3ZhciBpPXMoZSk7VT0hMDtmb3IodmFyIGE9aS5sZW5ndGgtMTthPj0wO2EtLSllLnJlbW92ZUNoaWxkKGlbYV0pLGlbYV0ucGFyZW50Tm9kZV89dDtVPSExO2Zvcih2YXIgYT0wO2E8aS5sZW5ndGg7YSsrKWlbYV0ucHJldmlvdXNTaWJsaW5nXz1pW2EtMV18fHIsaVthXS5uZXh0U2libGluZ189aVthKzFdfHxvO3JldHVybiByJiYoci5uZXh0U2libGluZ189aVswXSksbyYmKG8ucHJldmlvdXNTaWJsaW5nXz1pW2kubGVuZ3RoLTFdKSxpfXZhciBpPW4oZSksYz1lLnBhcmVudE5vZGU7cmV0dXJuIGMmJmMucmVtb3ZlQ2hpbGQoZSksZS5wYXJlbnROb2RlXz10LGUucHJldmlvdXNTaWJsaW5nXz1yLGUubmV4dFNpYmxpbmdfPW8sciYmKHIubmV4dFNpYmxpbmdfPWUpLG8mJihvLnByZXZpb3VzU2libGluZ189ZSksaX1mdW5jdGlvbiBhKGUpe2lmKGUgaW5zdGFuY2VvZiBEb2N1bWVudEZyYWdtZW50KXJldHVybiBzKGUpO3ZhciB0PW4oZSksbz1lLnBhcmVudE5vZGU7cmV0dXJuIG8mJnIoZSxvLHQpLHR9ZnVuY3Rpb24gcyhlKXtmb3IodmFyIHQ9bmV3IFQsbj0wLHI9ZS5maXJzdENoaWxkO3I7cj1yLm5leHRTaWJsaW5nKXRbbisrXT1yO3JldHVybiB0Lmxlbmd0aD1uLG8oZSx0KSx0fWZ1bmN0aW9uIGMoZSl7cmV0dXJuIGV9ZnVuY3Rpb24gbChlLHQpe1IoZSx0KSxlLm5vZGVJc0luc2VydGVkXygpfWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIG49Qyh0KSxyPTA7cjxlLmxlbmd0aDtyKyspbChlW3JdLG4pfWZ1bmN0aW9uIGQoZSl7UihlLG5ldyBNKGUsbnVsbCkpfWZ1bmN0aW9uIHAoZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDt0KyspZChlW3RdKX1mdW5jdGlvbiBoKGUsdCl7dmFyIG49ZS5ub2RlVHlwZT09PV8uRE9DVU1FTlRfTk9ERT9lOmUub3duZXJEb2N1bWVudDtuIT09dC5vd25lckRvY3VtZW50JiZuLmFkb3B0Tm9kZSh0KX1mdW5jdGlvbiBmKHQsbil7aWYobi5sZW5ndGgpe3ZhciByPXQub3duZXJEb2N1bWVudDtpZihyIT09blswXS5vd25lckRvY3VtZW50KWZvcih2YXIgbz0wO288bi5sZW5ndGg7bysrKWUuYWRvcHROb2RlTm9SZW1vdmUobltvXSxyKX19ZnVuY3Rpb24gbShlLHQpe2YoZSx0KTt2YXIgbj10Lmxlbmd0aDtpZigxPT09bilyZXR1cm4gUCh0WzBdKTtmb3IodmFyIHI9UChlLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSxvPTA7bzxuO28rKylyLmFwcGVuZENoaWxkKFAodFtvXSkpO3JldHVybiByfWZ1bmN0aW9uIHcoZSl7aWYodm9pZCAwIT09ZS5maXJzdENoaWxkXylmb3IodmFyIHQ9ZS5maXJzdENoaWxkXzt0Oyl7dmFyIG49dDt0PXQubmV4dFNpYmxpbmdfLG4ucGFyZW50Tm9kZV89bi5wcmV2aW91c1NpYmxpbmdfPW4ubmV4dFNpYmxpbmdfPXZvaWQgMH1lLmZpcnN0Q2hpbGRfPWUubGFzdENoaWxkXz12b2lkIDB9ZnVuY3Rpb24gdihlKXtpZihlLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcigpKXtmb3IodmFyIHQ9ZS5maXJzdENoaWxkO3Q7KXtPKHQucGFyZW50Tm9kZT09PWUpO3ZhciBuPXQubmV4dFNpYmxpbmcscj1QKHQpLG89ci5wYXJlbnROb2RlO28mJlguY2FsbChvLHIpLHQucHJldmlvdXNTaWJsaW5nXz10Lm5leHRTaWJsaW5nXz10LnBhcmVudE5vZGVfPW51bGwsdD1ufWUuZmlyc3RDaGlsZF89ZS5sYXN0Q2hpbGRfPW51bGx9ZWxzZSBmb3IodmFyIG4saT1QKGUpLGE9aS5maXJzdENoaWxkO2E7KW49YS5uZXh0U2libGluZyxYLmNhbGwoaSxhKSxhPW59ZnVuY3Rpb24gZyhlKXt2YXIgdD1lLnBhcmVudE5vZGU7cmV0dXJuIHQmJnQuaW52YWxpZGF0ZVNoYWRvd1JlbmRlcmVyKCl9ZnVuY3Rpb24gYihlKXtmb3IodmFyIHQsbj0wO248ZS5sZW5ndGg7bisrKXQ9ZVtuXSx0LnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodCl9ZnVuY3Rpb24geShlLHQsbil7dmFyIHI7aWYocj1BKG4/cS5jYWxsKG4sSShlKSwhMSk6Qi5jYWxsKEkoZSksITEpKSx0KXtmb3IodmFyIG89ZS5maXJzdENoaWxkO287bz1vLm5leHRTaWJsaW5nKXIuYXBwZW5kQ2hpbGQoeShvLCEwLG4pKTtpZihlIGluc3RhbmNlb2YgRi5IVE1MVGVtcGxhdGVFbGVtZW50KWZvcih2YXIgaT1yLmNvbnRlbnQsbz1lLmNvbnRlbnQuZmlyc3RDaGlsZDtvO289by5uZXh0U2libGluZylpLmFwcGVuZENoaWxkKHkobywhMCxuKSl9cmV0dXJuIHJ9ZnVuY3Rpb24gRShlLHQpe2lmKCF0fHxDKGUpIT09Qyh0KSlyZXR1cm4hMTtmb3IodmFyIG49dDtuO249bi5wYXJlbnROb2RlKWlmKG49PT1lKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIF8oZSl7TyhlIGluc3RhbmNlb2YgViksUy5jYWxsKHRoaXMsZSksdGhpcy5wYXJlbnROb2RlXz12b2lkIDAsdGhpcy5maXJzdENoaWxkXz12b2lkIDAsdGhpcy5sYXN0Q2hpbGRfPXZvaWQgMCx0aGlzLm5leHRTaWJsaW5nXz12b2lkIDAsdGhpcy5wcmV2aW91c1NpYmxpbmdfPXZvaWQgMCx0aGlzLnRyZWVTY29wZV89dm9pZCAwfXZhciBTPWUud3JhcHBlcnMuRXZlbnRUYXJnZXQsVD1lLndyYXBwZXJzLk5vZGVMaXN0LE09ZS5UcmVlU2NvcGUsTz1lLmFzc2VydCxMPWUuZGVmaW5lV3JhcEdldHRlcixOPWUuZW5xdWV1ZU11dGF0aW9uLEM9ZS5nZXRUcmVlU2NvcGUsaj1lLmlzV3JhcHBlcixEPWUubWl4aW4sSD1lLnJlZ2lzdGVyVHJhbnNpZW50T2JzZXJ2ZXJzLHg9ZS5yZWdpc3RlcldyYXBwZXIsUj1lLnNldFRyZWVTY29wZSxJPWUudW5zYWZlVW53cmFwLFA9ZS51bndyYXAsaz1lLnVud3JhcElmTmVlZGVkLEE9ZS53cmFwLFc9ZS53cmFwSWZOZWVkZWQsRj1lLndyYXBwZXJzLFU9ITEscT1kb2N1bWVudC5pbXBvcnROb2RlLEI9d2luZG93Lk5vZGUucHJvdG90eXBlLmNsb25lTm9kZSxWPXdpbmRvdy5Ob2RlLEc9d2luZG93LkRvY3VtZW50RnJhZ21lbnQsej0oVi5wcm90b3R5cGUuYXBwZW5kQ2hpbGQsVi5wcm90b3R5cGUuY29tcGFyZURvY3VtZW50UG9zaXRpb24pLEs9Vi5wcm90b3R5cGUuaXNFcXVhbE5vZGUsJD1WLnByb3RvdHlwZS5pbnNlcnRCZWZvcmUsWD1WLnByb3RvdHlwZS5yZW1vdmVDaGlsZCxZPVYucHJvdG90eXBlLnJlcGxhY2VDaGlsZCxaPS9UcmlkZW50fEVkZ2UvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksSj1aP2Z1bmN0aW9uKGUsdCl7dHJ5e1guY2FsbChlLHQpfWNhdGNoKG4pe2lmKCEoZSBpbnN0YW5jZW9mIEcpKXRocm93IG59fTpmdW5jdGlvbihlLHQpe1guY2FsbChlLHQpfTtfLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKFMucHJvdG90eXBlKSxEKF8ucHJvdG90eXBlLHthcHBlbmRDaGlsZDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5pbnNlcnRCZWZvcmUoZSxudWxsKX0saW5zZXJ0QmVmb3JlOmZ1bmN0aW9uKGUsbil7dChlKTt2YXIgcjtuP2oobik/cj1QKG4pOihyPW4sbj1BKHIpKToobj1udWxsLHI9bnVsbCksbiYmTyhuLnBhcmVudE5vZGU9PT10aGlzKTt2YXIgbyxzPW4/bi5wcmV2aW91c1NpYmxpbmc6dGhpcy5sYXN0Q2hpbGQsYz0hdGhpcy5pbnZhbGlkYXRlU2hhZG93UmVuZGVyZXIoKSYmIWcoZSk7aWYobz1jP2EoZSk6aShlLHRoaXMscyxuKSxjKWgodGhpcyxlKSx3KHRoaXMpLCQuY2FsbChJKHRoaXMpLFAoZSkscik7ZWxzZXtzfHwodGhpcy5maXJzdENoaWxkXz1vWzBdKSxufHwodGhpcy5sYXN0Q2hpbGRfPW9bby5sZW5ndGgtMV0sdm9pZCAwPT09dGhpcy5maXJzdENoaWxkXyYmKHRoaXMuZmlyc3RDaGlsZF89dGhpcy5maXJzdENoaWxkKSk7dmFyIGw9cj9yLnBhcmVudE5vZGU6SSh0aGlzKTtsPyQuY2FsbChsLG0odGhpcyxvKSxyKTpmKHRoaXMsbyl9cmV0dXJuIE4odGhpcywiY2hpbGRMaXN0Iix7YWRkZWROb2RlczpvLG5leHRTaWJsaW5nOm4scHJldmlvdXNTaWJsaW5nOnN9KSx1KG8sdGhpcyksZX0scmVtb3ZlQ2hpbGQ6ZnVuY3Rpb24oZSl7aWYodChlKSxlLnBhcmVudE5vZGUhPT10aGlzKXtmb3IodmFyIHI9ITEsbz0odGhpcy5jaGlsZE5vZGVzLHRoaXMuZmlyc3RDaGlsZCk7bztvPW8ubmV4dFNpYmxpbmcpaWYobz09PWUpe3I9ITA7YnJlYWt9aWYoIXIpdGhyb3cgbmV3IEVycm9yKCJOb3RGb3VuZEVycm9yIil9dmFyIGk9UChlKSxhPWUubmV4dFNpYmxpbmcscz1lLnByZXZpb3VzU2libGluZztpZih0aGlzLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcigpKXt2YXIgYz10aGlzLmZpcnN0Q2hpbGQsbD10aGlzLmxhc3RDaGlsZCx1PWkucGFyZW50Tm9kZTt1JiZKKHUsaSksYz09PWUmJih0aGlzLmZpcnN0Q2hpbGRfPWEpLGw9PT1lJiYodGhpcy5sYXN0Q2hpbGRfPXMpLHMmJihzLm5leHRTaWJsaW5nXz1hKSxhJiYoYS5wcmV2aW91c1NpYmxpbmdfPXMpLGUucHJldmlvdXNTaWJsaW5nXz1lLm5leHRTaWJsaW5nXz1lLnBhcmVudE5vZGVfPXZvaWQgMH1lbHNlIHcodGhpcyksSihJKHRoaXMpLGkpO3JldHVybiBVfHxOKHRoaXMsImNoaWxkTGlzdCIse3JlbW92ZWROb2RlczpuKGUpLG5leHRTaWJsaW5nOmEscHJldmlvdXNTaWJsaW5nOnN9KSxIKHRoaXMsZSksZX0scmVwbGFjZUNoaWxkOmZ1bmN0aW9uKGUscil7dChlKTt2YXIgbztpZihqKHIpP289UChyKToobz1yLHI9QShvKSksci5wYXJlbnROb2RlIT09dGhpcyl0aHJvdyBuZXcgRXJyb3IoIk5vdEZvdW5kRXJyb3IiKTt2YXIgcyxjPXIubmV4dFNpYmxpbmcsbD1yLnByZXZpb3VzU2libGluZyxwPSF0aGlzLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcigpJiYhZyhlKTtyZXR1cm4gcD9zPWEoZSk6KGM9PT1lJiYoYz1lLm5leHRTaWJsaW5nKSxzPWkoZSx0aGlzLGwsYykpLHA/KGgodGhpcyxlKSx3KHRoaXMpLFkuY2FsbChJKHRoaXMpLFAoZSksbykpOih0aGlzLmZpcnN0Q2hpbGQ9PT1yJiYodGhpcy5maXJzdENoaWxkXz1zWzBdKSx0aGlzLmxhc3RDaGlsZD09PXImJih0aGlzLmxhc3RDaGlsZF89c1tzLmxlbmd0aC0xXSksci5wcmV2aW91c1NpYmxpbmdfPXIubmV4dFNpYmxpbmdfPXIucGFyZW50Tm9kZV89dm9pZCAwLG8ucGFyZW50Tm9kZSYmWS5jYWxsKG8ucGFyZW50Tm9kZSxtKHRoaXMscyksbykpLE4odGhpcywiY2hpbGRMaXN0Iix7YWRkZWROb2RlczpzLHJlbW92ZWROb2RlczpuKHIpLG5leHRTaWJsaW5nOmMscHJldmlvdXNTaWJsaW5nOmx9KSxkKHIpLHUocyx0aGlzKSxyfSxub2RlSXNJbnNlcnRlZF86ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5maXJzdENoaWxkO2U7ZT1lLm5leHRTaWJsaW5nKWUubm9kZUlzSW5zZXJ0ZWRfKCl9LGhhc0NoaWxkTm9kZXM6ZnVuY3Rpb24oKXtyZXR1cm4gbnVsbCE9PXRoaXMuZmlyc3RDaGlsZH0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5wYXJlbnROb2RlXz90aGlzLnBhcmVudE5vZGVfOkEoSSh0aGlzKS5wYXJlbnROb2RlKX0sZ2V0IGZpcnN0Q2hpbGQoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5maXJzdENoaWxkXz90aGlzLmZpcnN0Q2hpbGRfOkEoSSh0aGlzKS5maXJzdENoaWxkKX0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiB2b2lkIDAhPT10aGlzLmxhc3RDaGlsZF8/dGhpcy5sYXN0Q2hpbGRfOkEoSSh0aGlzKS5sYXN0Q2hpbGQpfSxnZXQgbmV4dFNpYmxpbmcoKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5uZXh0U2libGluZ18/dGhpcy5uZXh0U2libGluZ186QShJKHRoaXMpLm5leHRTaWJsaW5nKX0sZ2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiB2b2lkIDAhPT10aGlzLnByZXZpb3VzU2libGluZ18/dGhpcy5wcmV2aW91c1NpYmxpbmdfOkEoSSh0aGlzKS5wcmV2aW91c1NpYmxpbmcpfSxnZXQgcGFyZW50RWxlbWVudCgpe2Zvcih2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5ub2RlVHlwZSE9PV8uRUxFTUVOVF9OT0RFOyllPWUucGFyZW50Tm9kZTtyZXR1cm4gZX0sZ2V0IHRleHRDb250ZW50KCl7Zm9yKHZhciBlPSIiLHQ9dGhpcy5maXJzdENoaWxkO3Q7dD10Lm5leHRTaWJsaW5nKXQubm9kZVR5cGUhPV8uQ09NTUVOVF9OT0RFJiYoZSs9dC50ZXh0Q29udGVudCk7cmV0dXJuIGV9LHNldCB0ZXh0Q29udGVudChlKXtudWxsPT1lJiYoZT0iIik7dmFyIHQ9Yyh0aGlzLmNoaWxkTm9kZXMpO2lmKHRoaXMuaW52YWxpZGF0ZVNoYWRvd1JlbmRlcmVyKCkpe2lmKHYodGhpcyksIiIhPT1lKXt2YXIgbj1JKHRoaXMpLm93bmVyRG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZSk7dGhpcy5hcHBlbmRDaGlsZChuKX19ZWxzZSB3KHRoaXMpLEkodGhpcykudGV4dENvbnRlbnQ9ZTt2YXIgcj1jKHRoaXMuY2hpbGROb2Rlcyk7Tih0aGlzLCJjaGlsZExpc3QiLHthZGRlZE5vZGVzOnIscmVtb3ZlZE5vZGVzOnR9KSxwKHQpLHUocix0aGlzKX0sZ2V0IGNoaWxkTm9kZXMoKXtmb3IodmFyIGU9bmV3IFQsdD0wLG49dGhpcy5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKWVbdCsrXT1uO3JldHVybiBlLmxlbmd0aD10LGV9LGNsb25lTm9kZTpmdW5jdGlvbihlKXtyZXR1cm4geSh0aGlzLGUpfSxjb250YWluczpmdW5jdGlvbihlKXtyZXR1cm4gRSh0aGlzLFcoZSkpfSxjb21wYXJlRG9jdW1lbnRQb3NpdGlvbjpmdW5jdGlvbihlKXtyZXR1cm4gei5jYWxsKEkodGhpcyksayhlKSl9LGlzRXF1YWxOb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBLLmNhbGwoSSh0aGlzKSxrKGUpKX0sbm9ybWFsaXplOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQsbj1jKHRoaXMuY2hpbGROb2Rlcykscj1bXSxvPSIiLGk9MDtpPG4ubGVuZ3RoO2krKyl0PW5baV0sdC5ub2RlVHlwZT09PV8uVEVYVF9OT0RFP2V8fHQuZGF0YS5sZW5ndGg/ZT8obys9dC5kYXRhLHIucHVzaCh0KSk6ZT10OnRoaXMucmVtb3ZlQ2hpbGQodCk6KGUmJnIubGVuZ3RoJiYoZS5kYXRhKz1vLGIocikpLHI9W10sbz0iIixlPW51bGwsdC5jaGlsZE5vZGVzLmxlbmd0aCYmdC5ub3JtYWxpemUoKSk7ZSYmci5sZW5ndGgmJihlLmRhdGErPW8sYihyKSl9fSksTChfLCJvd25lckRvY3VtZW50IikseChWLF8sZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKSxkZWxldGUgXy5wcm90b3R5cGUucXVlcnlTZWxlY3RvcixkZWxldGUgXy5wcm90b3R5cGUucXVlcnlTZWxlY3RvckFsbCxfLnByb3RvdHlwZT1EKE9iamVjdC5jcmVhdGUoUy5wcm90b3R5cGUpLF8ucHJvdG90eXBlKSxlLmNsb25lTm9kZT15LGUubm9kZVdhc0FkZGVkPWwsZS5ub2RlV2FzUmVtb3ZlZD1kLGUubm9kZXNXZXJlQWRkZWQ9dSxlLm5vZGVzV2VyZVJlbW92ZWQ9cCxlLm9yaWdpbmFsSW5zZXJ0QmVmb3JlPSQsZS5vcmlnaW5hbFJlbW92ZUNoaWxkPVgsZS5zbmFwc2hvdE5vZGVMaXN0PWMsZS53cmFwcGVycy5Ob2RlPV99KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQodCxuLHIsbyl7Zm9yKHZhciBpPW51bGwsYT1udWxsLHM9MCxjPXQubGVuZ3RoO3M8YztzKyspaT1iKHRbc10pLCFvJiYoYT12KGkpLnJvb3QpJiZhIGluc3RhbmNlb2YgZS53cmFwcGVycy5TaGFkb3dSb290fHwocltuKytdPWkpO3JldHVybiBufWZ1bmN0aW9uIG4oZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC9cL2RlZXBcL3w6OnNoYWRvd3w+Pj4vZywiICIpfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIFN0cmluZyhlKS5yZXBsYWNlKC86aG9zdFwoKFteXHNdKylcKS9nLCIkMSIpLnJlcGxhY2UoLyhbXlxzXSk6aG9zdC9nLCIkMSIpLnJlcGxhY2UoIjpob3N0IiwiKiIpLnJlcGxhY2UoL1xefFwvc2hhZG93XC98XC9zaGFkb3ctZGVlcFwvfDo6c2hhZG93fFwvZGVlcFwvfDo6Y29udGVudHw+Pj4vZywiICIpfWZ1bmN0aW9uIG8oZSx0KXtmb3IodmFyIG4scj1lLmZpcnN0RWxlbWVudENoaWxkO3I7KXtpZihyLm1hdGNoZXModCkpcmV0dXJuIHI7aWYobj1vKHIsdCkpcmV0dXJuIG47cj1yLm5leHRFbGVtZW50U2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBpKGUsdCl7cmV0dXJuIGUubWF0Y2hlcyh0KX1mdW5jdGlvbiBhKGUsdCxuKXt2YXIgcj1lLmxvY2FsTmFtZTtyZXR1cm4gcj09PXR8fHI9PT1uJiZlLm5hbWVzcGFjZVVSST09PWp9ZnVuY3Rpb24gcygpe3JldHVybiEwfWZ1bmN0aW9uIGMoZSx0LG4pe3JldHVybiBlLmxvY2FsTmFtZT09PW59ZnVuY3Rpb24gbChlLHQpe3JldHVybiBlLm5hbWVzcGFjZVVSST09PXR9ZnVuY3Rpb24gdShlLHQsbil7cmV0dXJuIGUubmFtZXNwYWNlVVJJPT09dCYmZS5sb2NhbE5hbWU9PT1ufWZ1bmN0aW9uIGQoZSx0LG4scixvLGkpe2Zvcih2YXIgYT1lLmZpcnN0RWxlbWVudENoaWxkO2E7KXIoYSxvLGkpJiYoblt0KytdPWEpLHQ9ZChhLHQsbixyLG8saSksYT1hLm5leHRFbGVtZW50U2libGluZztyZXR1cm4gdH1mdW5jdGlvbiBwKG4scixvLGksYSl7dmFyIHMsYz1nKHRoaXMpLGw9dih0aGlzKS5yb290O2lmKGwgaW5zdGFuY2VvZiBlLndyYXBwZXJzLlNoYWRvd1Jvb3QpcmV0dXJuIGQodGhpcyxyLG8sbixpLG51bGwpO2lmKGMgaW5zdGFuY2VvZiBOKXM9Uy5jYWxsKGMsaSk7ZWxzZXtpZighKGMgaW5zdGFuY2VvZiBDKSlyZXR1cm4gZCh0aGlzLHIsbyxuLGksbnVsbCk7cz1fLmNhbGwoYyxpKX1yZXR1cm4gdChzLHIsbyxhKX1mdW5jdGlvbiBoKG4scixvLGksYSl7dmFyIHMsYz1nKHRoaXMpLGw9dih0aGlzKS5yb290O2lmKGwgaW5zdGFuY2VvZiBlLndyYXBwZXJzLlNoYWRvd1Jvb3QpcmV0dXJuIGQodGhpcyxyLG8sbixpLGEpO2lmKGMgaW5zdGFuY2VvZiBOKXM9TS5jYWxsKGMsaSxhKTtlbHNle2lmKCEoYyBpbnN0YW5jZW9mIEMpKXJldHVybiBkKHRoaXMscixvLG4saSxhKTtzPVQuY2FsbChjLGksYSl9cmV0dXJuIHQocyxyLG8sITEpfWZ1bmN0aW9uIGYobixyLG8saSxhKXt2YXIgcyxjPWcodGhpcyksbD12KHRoaXMpLnJvb3Q7aWYobCBpbnN0YW5jZW9mIGUud3JhcHBlcnMuU2hhZG93Um9vdClyZXR1cm4gZCh0aGlzLHIsbyxuLGksYSk7aWYoYyBpbnN0YW5jZW9mIE4pcz1MLmNhbGwoYyxpLGEpO2Vsc2V7aWYoIShjIGluc3RhbmNlb2YgQykpcmV0dXJuIGQodGhpcyxyLG8sbixpLGEpO3M9Ty5jYWxsKGMsaSxhKX1yZXR1cm4gdChzLHIsbywhMSl9dmFyIG09ZS53cmFwcGVycy5IVE1MQ29sbGVjdGlvbix3PWUud3JhcHBlcnMuTm9kZUxpc3Qsdj1lLmdldFRyZWVTY29wZSxnPWUudW5zYWZlVW53cmFwLGI9ZS53cmFwLHk9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcixFPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yLF89ZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCxTPWRvY3VtZW50LmRvY3VtZW50RWxlbWVudC5xdWVyeVNlbGVjdG9yQWxsLFQ9ZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUsTT1kb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUsTz1kb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZU5TLEw9ZG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lTlMsTj13aW5kb3cuRWxlbWVudCxDPXdpbmRvdy5IVE1MRG9jdW1lbnR8fHdpbmRvdy5Eb2N1bWVudCxqPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIixEPXsKcXVlcnlTZWxlY3RvcjpmdW5jdGlvbih0KXt2YXIgcj1uKHQpLGk9ciE9PXQ7dD1yO3ZhciBhLHM9Zyh0aGlzKSxjPXYodGhpcykucm9vdDtpZihjIGluc3RhbmNlb2YgZS53cmFwcGVycy5TaGFkb3dSb290KXJldHVybiBvKHRoaXMsdCk7aWYocyBpbnN0YW5jZW9mIE4pYT1iKEUuY2FsbChzLHQpKTtlbHNle2lmKCEocyBpbnN0YW5jZW9mIEMpKXJldHVybiBvKHRoaXMsdCk7YT1iKHkuY2FsbChzLHQpKX1yZXR1cm4gYSYmIWkmJihjPXYoYSkucm9vdCkmJmMgaW5zdGFuY2VvZiBlLndyYXBwZXJzLlNoYWRvd1Jvb3Q/byh0aGlzLHQpOmF9LHF1ZXJ5U2VsZWN0b3JBbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9bihlKSxyPXQhPT1lO2U9dDt2YXIgbz1uZXcgdztyZXR1cm4gby5sZW5ndGg9cC5jYWxsKHRoaXMsaSwwLG8sZSxyKSxvfX0sSD17bWF0Y2hlczpmdW5jdGlvbih0KXtyZXR1cm4gdD1yKHQpLGUub3JpZ2luYWxNYXRjaGVzLmNhbGwoZyh0aGlzKSx0KX19LHg9e2dldEVsZW1lbnRzQnlUYWdOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBtLG49IioiPT09ZT9zOmE7cmV0dXJuIHQubGVuZ3RoPWguY2FsbCh0aGlzLG4sMCx0LGUsZS50b0xvd2VyQ2FzZSgpKSx0fSxnZXRFbGVtZW50c0J5Q2xhc3NOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnF1ZXJ5U2VsZWN0b3JBbGwoIi4iK2UpfSxnZXRFbGVtZW50c0J5VGFnTmFtZU5TOmZ1bmN0aW9uKGUsdCl7dmFyIG49bmV3IG0scj1udWxsO3JldHVybiByPSIqIj09PWU/IioiPT09dD9zOmM6IioiPT09dD9sOnUsbi5sZW5ndGg9Zi5jYWxsKHRoaXMsciwwLG4sZXx8bnVsbCx0KSxufX07ZS5HZXRFbGVtZW50c0J5SW50ZXJmYWNlPXgsZS5TZWxlY3RvcnNJbnRlcmZhY2U9RCxlLk1hdGNoZXNJbnRlcmZhY2U9SH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtmb3IoO2UmJmUubm9kZVR5cGUhPT1Ob2RlLkVMRU1FTlRfTk9ERTspZT1lLm5leHRTaWJsaW5nO3JldHVybiBlfWZ1bmN0aW9uIG4oZSl7Zm9yKDtlJiZlLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KWU9ZS5wcmV2aW91c1NpYmxpbmc7cmV0dXJuIGV9dmFyIHI9ZS53cmFwcGVycy5Ob2RlTGlzdCxvPXtnZXQgZmlyc3RFbGVtZW50Q2hpbGQoKXtyZXR1cm4gdCh0aGlzLmZpcnN0Q2hpbGQpfSxnZXQgbGFzdEVsZW1lbnRDaGlsZCgpe3JldHVybiBuKHRoaXMubGFzdENoaWxkKX0sZ2V0IGNoaWxkRWxlbWVudENvdW50KCl7Zm9yKHZhciBlPTAsdD10aGlzLmZpcnN0RWxlbWVudENoaWxkO3Q7dD10Lm5leHRFbGVtZW50U2libGluZyllKys7cmV0dXJuIGV9LGdldCBjaGlsZHJlbigpe2Zvcih2YXIgZT1uZXcgcix0PTAsbj10aGlzLmZpcnN0RWxlbWVudENoaWxkO247bj1uLm5leHRFbGVtZW50U2libGluZyllW3QrK109bjtyZXR1cm4gZS5sZW5ndGg9dCxlfSxyZW1vdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGU7ZSYmZS5yZW1vdmVDaGlsZCh0aGlzKX19LGk9e2dldCBuZXh0RWxlbWVudFNpYmxpbmcoKXtyZXR1cm4gdCh0aGlzLm5leHRTaWJsaW5nKX0sZ2V0IHByZXZpb3VzRWxlbWVudFNpYmxpbmcoKXtyZXR1cm4gbih0aGlzLnByZXZpb3VzU2libGluZyl9fSxhPXtnZXRFbGVtZW50QnlJZDpmdW5jdGlvbihlKXtyZXR1cm4vWyBcdFxuXHJcZl0vLnRlc3QoZSk/bnVsbDp0aGlzLnF1ZXJ5U2VsZWN0b3IoJ1tpZD0iJytlKyciXScpfX07ZS5DaGlsZE5vZGVJbnRlcmZhY2U9aSxlLk5vbkVsZW1lbnRQYXJlbnROb2RlSW50ZXJmYWNlPWEsZS5QYXJlbnROb2RlSW50ZXJmYWNlPW99KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ci5jYWxsKHRoaXMsZSl9dmFyIG49ZS5DaGlsZE5vZGVJbnRlcmZhY2Uscj1lLndyYXBwZXJzLk5vZGUsbz1lLmVucXVldWVNdXRhdGlvbixpPWUubWl4aW4sYT1lLnJlZ2lzdGVyV3JhcHBlcixzPWUudW5zYWZlVW53cmFwLGM9d2luZG93LkNoYXJhY3RlckRhdGE7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksaSh0LnByb3RvdHlwZSx7Z2V0IG5vZGVWYWx1ZSgpe3JldHVybiB0aGlzLmRhdGF9LHNldCBub2RlVmFsdWUoZSl7dGhpcy5kYXRhPWV9LGdldCB0ZXh0Q29udGVudCgpe3JldHVybiB0aGlzLmRhdGF9LHNldCB0ZXh0Q29udGVudChlKXt0aGlzLmRhdGE9ZX0sZ2V0IGRhdGEoKXtyZXR1cm4gcyh0aGlzKS5kYXRhfSxzZXQgZGF0YShlKXt2YXIgdD1zKHRoaXMpLmRhdGE7byh0aGlzLCJjaGFyYWN0ZXJEYXRhIix7b2xkVmFsdWU6dH0pLHModGhpcykuZGF0YT1lfX0pLGkodC5wcm90b3R5cGUsbiksYShjLHQsZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIiIpKSxlLndyYXBwZXJzLkNoYXJhY3RlckRhdGE9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZT4+PjB9ZnVuY3Rpb24gbihlKXtyLmNhbGwodGhpcyxlKX12YXIgcj1lLndyYXBwZXJzLkNoYXJhY3RlckRhdGEsbz0oZS5lbnF1ZXVlTXV0YXRpb24sZS5taXhpbiksaT1lLnJlZ2lzdGVyV3JhcHBlcixhPXdpbmRvdy5UZXh0O24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoci5wcm90b3R5cGUpLG8obi5wcm90b3R5cGUse3NwbGl0VGV4dDpmdW5jdGlvbihlKXtlPXQoZSk7dmFyIG49dGhpcy5kYXRhO2lmKGU+bi5sZW5ndGgpdGhyb3cgbmV3IEVycm9yKCJJbmRleFNpemVFcnJvciIpO3ZhciByPW4uc2xpY2UoMCxlKSxvPW4uc2xpY2UoZSk7dGhpcy5kYXRhPXI7dmFyIGk9dGhpcy5vd25lckRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG8pO3JldHVybiB0aGlzLnBhcmVudE5vZGUmJnRoaXMucGFyZW50Tm9kZS5pbnNlcnRCZWZvcmUoaSx0aGlzLm5leHRTaWJsaW5nKSxpfX0pLGkoYSxuLGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKSksZS53cmFwcGVycy5UZXh0PW59KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGkoZSkuZ2V0QXR0cmlidXRlKCJjbGFzcyIpfWZ1bmN0aW9uIG4oZSx0KXthKGUsImF0dHJpYnV0ZXMiLHtuYW1lOiJjbGFzcyIsbmFtZXNwYWNlOm51bGwsb2xkVmFsdWU6dH0pfWZ1bmN0aW9uIHIodCl7ZS5pbnZhbGlkYXRlUmVuZGVyZXJCYXNlZE9uQXR0cmlidXRlKHQsImNsYXNzIil9ZnVuY3Rpb24gbyhlLG8saSl7dmFyIGE9ZS5vd25lckVsZW1lbnRfO2lmKG51bGw9PWEpcmV0dXJuIG8uYXBwbHkoZSxpKTt2YXIgcz10KGEpLGM9by5hcHBseShlLGkpO3JldHVybiB0KGEpIT09cyYmKG4oYSxzKSxyKGEpKSxjfWlmKCF3aW5kb3cuRE9NVG9rZW5MaXN0KXJldHVybiB2b2lkIGNvbnNvbGUud2FybigiTWlzc2luZyBET01Ub2tlbkxpc3QgcHJvdG90eXBlLCBwbGVhc2UgaW5jbHVkZSBhIGNvbXBhdGlibGUgY2xhc3NMaXN0IHBvbHlmaWxsIHN1Y2ggYXMgaHR0cDovL2dvby5nbC91VGNlcEguIik7dmFyIGk9ZS51bnNhZmVVbndyYXAsYT1lLmVucXVldWVNdXRhdGlvbixzPURPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkO0RPTVRva2VuTGlzdC5wcm90b3R5cGUuYWRkPWZ1bmN0aW9uKCl7byh0aGlzLHMsYXJndW1lbnRzKX07dmFyIGM9RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU7RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtvKHRoaXMsYyxhcmd1bWVudHMpfTt2YXIgbD1ET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZTtET01Ub2tlbkxpc3QucHJvdG90eXBlLnRvZ2dsZT1mdW5jdGlvbigpe3JldHVybiBvKHRoaXMsbCxhcmd1bWVudHMpfX0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdCh0LG4pe3ZhciByPXQucGFyZW50Tm9kZTtpZihyJiZyLnNoYWRvd1Jvb3Qpe3ZhciBvPWUuZ2V0UmVuZGVyZXJGb3JIb3N0KHIpO28uZGVwZW5kc09uQXR0cmlidXRlKG4pJiZvLmludmFsaWRhdGUoKX19ZnVuY3Rpb24gbihlLHQsbil7dShlLCJhdHRyaWJ1dGVzIix7bmFtZTp0LG5hbWVzcGFjZTpudWxsLG9sZFZhbHVlOm59KX1mdW5jdGlvbiByKGUpe2EuY2FsbCh0aGlzLGUpfXZhciBvPWUuQ2hpbGROb2RlSW50ZXJmYWNlLGk9ZS5HZXRFbGVtZW50c0J5SW50ZXJmYWNlLGE9ZS53cmFwcGVycy5Ob2RlLHM9ZS5QYXJlbnROb2RlSW50ZXJmYWNlLGM9ZS5TZWxlY3RvcnNJbnRlcmZhY2UsbD1lLk1hdGNoZXNJbnRlcmZhY2UsdT0oZS5hZGRXcmFwTm9kZUxpc3RNZXRob2QsZS5lbnF1ZXVlTXV0YXRpb24pLGQ9ZS5taXhpbixwPShlLm9uZU9mLGUucmVnaXN0ZXJXcmFwcGVyKSxoPWUudW5zYWZlVW53cmFwLGY9ZS53cmFwcGVycyxtPXdpbmRvdy5FbGVtZW50LHc9WyJtYXRjaGVzIiwibW96TWF0Y2hlc1NlbGVjdG9yIiwibXNNYXRjaGVzU2VsZWN0b3IiLCJ3ZWJraXRNYXRjaGVzU2VsZWN0b3IiXS5maWx0ZXIoZnVuY3Rpb24oZSl7cmV0dXJuIG0ucHJvdG90eXBlW2VdfSksdj13WzBdLGc9bS5wcm90b3R5cGVbdl0sYj1uZXcgV2Vha01hcDtyLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGEucHJvdG90eXBlKSxkKHIucHJvdG90eXBlLHtjcmVhdGVTaGFkb3dSb290OmZ1bmN0aW9uKCl7dmFyIHQ9bmV3IGYuU2hhZG93Um9vdCh0aGlzKTtoKHRoaXMpLnBvbHltZXJTaGFkb3dSb290Xz10O3ZhciBuPWUuZ2V0UmVuZGVyZXJGb3JIb3N0KHRoaXMpO3JldHVybiBuLmludmFsaWRhdGUoKSx0fSxnZXQgc2hhZG93Um9vdCgpe3JldHVybiBoKHRoaXMpLnBvbHltZXJTaGFkb3dSb290X3x8bnVsbH0sc2V0QXR0cmlidXRlOmZ1bmN0aW9uKGUscil7dmFyIG89aCh0aGlzKS5nZXRBdHRyaWJ1dGUoZSk7aCh0aGlzKS5zZXRBdHRyaWJ1dGUoZSxyKSxuKHRoaXMsZSxvKSx0KHRoaXMsZSl9LHJlbW92ZUF0dHJpYnV0ZTpmdW5jdGlvbihlKXt2YXIgcj1oKHRoaXMpLmdldEF0dHJpYnV0ZShlKTtoKHRoaXMpLnJlbW92ZUF0dHJpYnV0ZShlKSxuKHRoaXMsZSxyKSx0KHRoaXMsZSl9LGdldCBjbGFzc0xpc3QoKXt2YXIgZT1iLmdldCh0aGlzKTtpZighZSl7aWYoZT1oKHRoaXMpLmNsYXNzTGlzdCwhZSlyZXR1cm47ZS5vd25lckVsZW1lbnRfPXRoaXMsYi5zZXQodGhpcyxlKX1yZXR1cm4gZX0sZ2V0IGNsYXNzTmFtZSgpe3JldHVybiBoKHRoaXMpLmNsYXNzTmFtZX0sc2V0IGNsYXNzTmFtZShlKXt0aGlzLnNldEF0dHJpYnV0ZSgiY2xhc3MiLGUpfSxnZXQgaWQoKXtyZXR1cm4gaCh0aGlzKS5pZH0sc2V0IGlkKGUpe3RoaXMuc2V0QXR0cmlidXRlKCJpZCIsZSl9fSksdy5mb3JFYWNoKGZ1bmN0aW9uKGUpeyJtYXRjaGVzIiE9PWUmJihyLnByb3RvdHlwZVtlXT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5tYXRjaGVzKGUpfSl9KSxtLnByb3RvdHlwZS53ZWJraXRDcmVhdGVTaGFkb3dSb290JiYoci5wcm90b3R5cGUud2Via2l0Q3JlYXRlU2hhZG93Um9vdD1yLnByb3RvdHlwZS5jcmVhdGVTaGFkb3dSb290KSxkKHIucHJvdG90eXBlLG8pLGQoci5wcm90b3R5cGUsaSksZChyLnByb3RvdHlwZSxzKSxkKHIucHJvdG90eXBlLGMpLGQoci5wcm90b3R5cGUsbCkscChtLHIsZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKG51bGwsIngiKSksZS5pbnZhbGlkYXRlUmVuZGVyZXJCYXNlZE9uQXR0cmlidXRlPXQsZS5tYXRjaGVzTmFtZXM9dyxlLm9yaWdpbmFsTWF0Y2hlcz1nLGUud3JhcHBlcnMuRWxlbWVudD1yfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3N3aXRjaChlKXtjYXNlIiYiOnJldHVybiImYW1wOyI7Y2FzZSI8IjpyZXR1cm4iJmx0OyI7Y2FzZSI+IjpyZXR1cm4iJmd0OyI7Y2FzZSciJzpyZXR1cm4iJnF1b3Q7IjtjYXNlIsKgIjpyZXR1cm4iJm5ic3A7In19ZnVuY3Rpb24gbihlKXtyZXR1cm4gZS5yZXBsYWNlKEwsdCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS5yZXBsYWNlKE4sdCl9ZnVuY3Rpb24gbyhlKXtmb3IodmFyIHQ9e30sbj0wO248ZS5sZW5ndGg7bisrKXRbZVtuXV09ITA7cmV0dXJuIHR9ZnVuY3Rpb24gaShlKXtpZihlLm5hbWVzcGFjZVVSSSE9PUQpcmV0dXJuITA7dmFyIHQ9ZS5vd25lckRvY3VtZW50LmRvY3R5cGU7cmV0dXJuIHQmJnQucHVibGljSWQmJnQuc3lzdGVtSWR9ZnVuY3Rpb24gYShlLHQpe3N3aXRjaChlLm5vZGVUeXBlKXtjYXNlIE5vZGUuRUxFTUVOVF9OT0RFOmZvcih2YXIgbyxhPWUudGFnTmFtZS50b0xvd2VyQ2FzZSgpLGM9IjwiK2EsbD1lLmF0dHJpYnV0ZXMsdT0wO289bFt1XTt1KyspYys9IiAiK28ubmFtZSsnPSInK24oby52YWx1ZSkrJyInO3JldHVybiBDW2FdPyhpKGUpJiYoYys9Ii8iKSxjKyI+Iik6YysiPiIrcyhlKSsiPC8iK2ErIj4iO2Nhc2UgTm9kZS5URVhUX05PREU6dmFyIGQ9ZS5kYXRhO3JldHVybiB0JiZqW3QubG9jYWxOYW1lXT9kOnIoZCk7Y2FzZSBOb2RlLkNPTU1FTlRfTk9ERTpyZXR1cm4iPCEtLSIrZS5kYXRhKyItLT4iO2RlZmF1bHQ6dGhyb3cgY29uc29sZS5lcnJvcihlKSxuZXcgRXJyb3IoIm5vdCBpbXBsZW1lbnRlZCIpfX1mdW5jdGlvbiBzKGUpe2UgaW5zdGFuY2VvZiBPLkhUTUxUZW1wbGF0ZUVsZW1lbnQmJihlPWUuY29udGVudCk7Zm9yKHZhciB0PSIiLG49ZS5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKXQrPWEobixlKTtyZXR1cm4gdH1mdW5jdGlvbiBjKGUsdCxuKXt2YXIgcj1ufHwiZGl2IjtlLnRleHRDb250ZW50PSIiO3ZhciBvPVQoZS5vd25lckRvY3VtZW50LmNyZWF0ZUVsZW1lbnQocikpO28uaW5uZXJIVE1MPXQ7Zm9yKHZhciBpO2k9by5maXJzdENoaWxkOyllLmFwcGVuZENoaWxkKE0oaSkpfWZ1bmN0aW9uIGwoZSl7bS5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gdShlLHQpe3ZhciBuPVQoZS5jbG9uZU5vZGUoITEpKTtuLmlubmVySFRNTD10O2Zvcih2YXIgcixvPVQoZG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtyPW4uZmlyc3RDaGlsZDspby5hcHBlbmRDaGlsZChyKTtyZXR1cm4gTShvKX1mdW5jdGlvbiBkKHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLnJlbmRlckFsbFBlbmRpbmcoKSxTKHRoaXMpW3RdfX1mdW5jdGlvbiBwKGUpe3cobCxlLGQoZSkpfWZ1bmN0aW9uIGgodCl7T2JqZWN0LmRlZmluZVByb3BlcnR5KGwucHJvdG90eXBlLHQse2dldDpkKHQpLHNldDpmdW5jdGlvbihuKXtlLnJlbmRlckFsbFBlbmRpbmcoKSxTKHRoaXMpW3RdPW59LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9ZnVuY3Rpb24gZih0KXtPYmplY3QuZGVmaW5lUHJvcGVydHkobC5wcm90b3R5cGUsdCx7dmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gZS5yZW5kZXJBbGxQZW5kaW5nKCksUyh0aGlzKVt0XS5hcHBseShTKHRoaXMpLGFyZ3VtZW50cyl9LGNvbmZpZ3VyYWJsZTohMCxlbnVtZXJhYmxlOiEwfSl9dmFyIG09ZS53cmFwcGVycy5FbGVtZW50LHc9ZS5kZWZpbmVHZXR0ZXIsdj1lLmVucXVldWVNdXRhdGlvbixnPWUubWl4aW4sYj1lLm5vZGVzV2VyZUFkZGVkLHk9ZS5ub2Rlc1dlcmVSZW1vdmVkLEU9ZS5yZWdpc3RlcldyYXBwZXIsXz1lLnNuYXBzaG90Tm9kZUxpc3QsUz1lLnVuc2FmZVVud3JhcCxUPWUudW53cmFwLE09ZS53cmFwLE89ZS53cmFwcGVycyxMPS9bJlx1MDBBMCJdL2csTj0vWyZcdTAwQTA8Pl0vZyxDPW8oWyJhcmVhIiwiYmFzZSIsImJyIiwiY29sIiwiY29tbWFuZCIsImVtYmVkIiwiaHIiLCJpbWciLCJpbnB1dCIsImtleWdlbiIsImxpbmsiLCJtZXRhIiwicGFyYW0iLCJzb3VyY2UiLCJ0cmFjayIsIndiciJdKSxqPW8oWyJzdHlsZSIsInNjcmlwdCIsInhtcCIsImlmcmFtZSIsIm5vZW1iZWQiLCJub2ZyYW1lcyIsInBsYWludGV4dCIsIm5vc2NyaXB0Il0pLEQ9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEg9L01TSUUvLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCkseD13aW5kb3cuSFRNTEVsZW1lbnQsUj13aW5kb3cuSFRNTFRlbXBsYXRlRWxlbWVudDtsLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG0ucHJvdG90eXBlKSxnKGwucHJvdG90eXBlLHtnZXQgaW5uZXJIVE1MKCl7cmV0dXJuIHModGhpcyl9LHNldCBpbm5lckhUTUwoZSl7aWYoSCYmalt0aGlzLmxvY2FsTmFtZV0pcmV0dXJuIHZvaWQodGhpcy50ZXh0Q29udGVudD1lKTt2YXIgdD1fKHRoaXMuY2hpbGROb2Rlcyk7dGhpcy5pbnZhbGlkYXRlU2hhZG93UmVuZGVyZXIoKT90aGlzIGluc3RhbmNlb2YgTy5IVE1MVGVtcGxhdGVFbGVtZW50P2ModGhpcy5jb250ZW50LGUpOmModGhpcyxlLHRoaXMudGFnTmFtZSk6IVImJnRoaXMgaW5zdGFuY2VvZiBPLkhUTUxUZW1wbGF0ZUVsZW1lbnQ/Yyh0aGlzLmNvbnRlbnQsZSk6Uyh0aGlzKS5pbm5lckhUTUw9ZTt2YXIgbj1fKHRoaXMuY2hpbGROb2Rlcyk7dih0aGlzLCJjaGlsZExpc3QiLHthZGRlZE5vZGVzOm4scmVtb3ZlZE5vZGVzOnR9KSx5KHQpLGIobix0aGlzKX0sZ2V0IG91dGVySFRNTCgpe3JldHVybiBhKHRoaXMsdGhpcy5wYXJlbnROb2RlKX0sc2V0IG91dGVySFRNTChlKXt2YXIgdD10aGlzLnBhcmVudE5vZGU7aWYodCl7dC5pbnZhbGlkYXRlU2hhZG93UmVuZGVyZXIoKTt2YXIgbj11KHQsZSk7dC5yZXBsYWNlQ2hpbGQobix0aGlzKX19LGluc2VydEFkamFjZW50SFRNTDpmdW5jdGlvbihlLHQpe3ZhciBuLHI7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImJlZm9yZWJlZ2luIjpuPXRoaXMucGFyZW50Tm9kZSxyPXRoaXM7YnJlYWs7Y2FzZSJhZnRlcmVuZCI6bj10aGlzLnBhcmVudE5vZGUscj10aGlzLm5leHRTaWJsaW5nO2JyZWFrO2Nhc2UiYWZ0ZXJiZWdpbiI6bj10aGlzLHI9dGhpcy5maXJzdENoaWxkO2JyZWFrO2Nhc2UiYmVmb3JlZW5kIjpuPXRoaXMscj1udWxsO2JyZWFrO2RlZmF1bHQ6cmV0dXJufXZhciBvPXUobix0KTtuLmluc2VydEJlZm9yZShvLHIpfSxnZXQgaGlkZGVuKCl7cmV0dXJuIHRoaXMuaGFzQXR0cmlidXRlKCJoaWRkZW4iKX0sc2V0IGhpZGRlbihlKXtlP3RoaXMuc2V0QXR0cmlidXRlKCJoaWRkZW4iLCIiKTp0aGlzLnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIil9fSksWyJjbGllbnRIZWlnaHQiLCJjbGllbnRMZWZ0IiwiY2xpZW50VG9wIiwiY2xpZW50V2lkdGgiLCJvZmZzZXRIZWlnaHQiLCJvZmZzZXRMZWZ0Iiwib2Zmc2V0VG9wIiwib2Zmc2V0V2lkdGgiLCJzY3JvbGxIZWlnaHQiLCJzY3JvbGxXaWR0aCJdLmZvckVhY2gocCksWyJzY3JvbGxMZWZ0Iiwic2Nyb2xsVG9wIl0uZm9yRWFjaChoKSxbImZvY3VzIiwiZ2V0Qm91bmRpbmdDbGllbnRSZWN0IiwiZ2V0Q2xpZW50UmVjdHMiLCJzY3JvbGxJbnRvVmlldyJdLmZvckVhY2goZiksRSh4LGwsZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYiIpKSxlLndyYXBwZXJzLkhUTUxFbGVtZW50PWwsZS5nZXRJbm5lckhUTUw9cyxlLnNldElubmVySFRNTD1jfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQscj1lLm1peGluLG89ZS5yZWdpc3RlcldyYXBwZXIsaT1lLnVuc2FmZVVud3JhcCxhPWUud3JhcCxzPXdpbmRvdy5IVE1MQ2FudmFzRWxlbWVudDt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyKHQucHJvdG90eXBlLHtnZXRDb250ZXh0OmZ1bmN0aW9uKCl7dmFyIGU9aSh0aGlzKS5nZXRDb250ZXh0LmFwcGx5KGkodGhpcyksYXJndW1lbnRzKTtyZXR1cm4gZSYmYShlKX19KSxvKHMsdCxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKSksZS53cmFwcGVycy5IVE1MQ2FudmFzRWxlbWVudD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQscj1lLm1peGluLG89ZS5yZWdpc3RlcldyYXBwZXIsaT13aW5kb3cuSFRNTENvbnRlbnRFbGVtZW50O3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHIodC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnQsZ2V0IHNlbGVjdCgpe3JldHVybiB0aGlzLmdldEF0dHJpYnV0ZSgic2VsZWN0Iil9LHNldCBzZWxlY3QoZSl7dGhpcy5zZXRBdHRyaWJ1dGUoInNlbGVjdCIsZSl9LHNldEF0dHJpYnV0ZTpmdW5jdGlvbihlLHQpe24ucHJvdG90eXBlLnNldEF0dHJpYnV0ZS5jYWxsKHRoaXMsZSx0KSwic2VsZWN0Ij09PVN0cmluZyhlKS50b0xvd2VyQ2FzZSgpJiZ0aGlzLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcighMCl9fSksaSYmbyhpLHQpLGUud3JhcHBlcnMuSFRNTENvbnRlbnRFbGVtZW50PXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7bi5jYWxsKHRoaXMsZSl9dmFyIG49ZS53cmFwcGVycy5IVE1MRWxlbWVudCxyPWUubWl4aW4sbz1lLnJlZ2lzdGVyV3JhcHBlcixpPWUud3JhcEhUTUxDb2xsZWN0aW9uLGE9ZS51bndyYXAscz13aW5kb3cuSFRNTEZvcm1FbGVtZW50O3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHIodC5wcm90b3R5cGUse2dldCBlbGVtZW50cygpe3JldHVybiBpKGEodGhpcykuZWxlbWVudHMpfX0pLG8ocyx0LGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImZvcm0iKSksZS53cmFwcGVycy5IVE1MRm9ybUVsZW1lbnQ9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyLmNhbGwodGhpcyxlKX1mdW5jdGlvbiBuKGUsdCl7aWYoISh0aGlzIGluc3RhbmNlb2YgbikpdGhyb3cgbmV3IFR5cGVFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7dmFyIG89aShkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbWciKSk7ci5jYWxsKHRoaXMsbyksYShvLHRoaXMpLHZvaWQgMCE9PWUmJihvLndpZHRoPWUpLHZvaWQgMCE9PXQmJihvLmhlaWdodD10KX12YXIgcj1lLndyYXBwZXJzLkhUTUxFbGVtZW50LG89ZS5yZWdpc3RlcldyYXBwZXIsaT1lLnVud3JhcCxhPWUucmV3cmFwLHM9d2luZG93LkhUTUxJbWFnZUVsZW1lbnQ7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbyhzLHQsZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIikpLG4ucHJvdG90eXBlPXQucHJvdG90eXBlLGUud3JhcHBlcnMuSFRNTEltYWdlRWxlbWVudD10LGUud3JhcHBlcnMuSW1hZ2U9bn0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtuLmNhbGwodGhpcyxlKX12YXIgbj1lLndyYXBwZXJzLkhUTUxFbGVtZW50LHI9KGUubWl4aW4sZS53cmFwcGVycy5Ob2RlTGlzdCxlLnJlZ2lzdGVyV3JhcHBlciksbz13aW5kb3cuSFRNTFNoYWRvd0VsZW1lbnQ7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksdC5wcm90b3R5cGUuY29uc3RydWN0b3I9dCxvJiZyKG8sdCksZS53cmFwcGVycy5IVE1MU2hhZG93RWxlbWVudD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe2lmKCFlLmRlZmF1bHRWaWV3KXJldHVybiBlO3ZhciB0PWQuZ2V0KGUpO2lmKCF0KXtmb3IodD1lLmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudCgiIik7dC5sYXN0Q2hpbGQ7KXQucmVtb3ZlQ2hpbGQodC5sYXN0Q2hpbGQpO2Quc2V0KGUsdCl9cmV0dXJuIHR9ZnVuY3Rpb24gbihlKXtmb3IodmFyIG4scj10KGUub3duZXJEb2N1bWVudCksbz1jKHIuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtuPWUuZmlyc3RDaGlsZDspby5hcHBlbmRDaGlsZChuKTtyZXR1cm4gb31mdW5jdGlvbiByKGUpe2lmKG8uY2FsbCh0aGlzLGUpLCFwKXt2YXIgdD1uKGUpO3Uuc2V0KHRoaXMsbCh0KSl9fXZhciBvPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQsaT1lLm1peGluLGE9ZS5yZWdpc3RlcldyYXBwZXIscz1lLnVuc2FmZVVud3JhcCxjPWUudW53cmFwLGw9ZS53cmFwLHU9bmV3IFdlYWtNYXAsZD1uZXcgV2Vha01hcCxwPXdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50O3IucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGkoci5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnIsZ2V0IGNvbnRlbnQoKXtyZXR1cm4gcD9sKHModGhpcykuY29udGVudCk6dS5nZXQodGhpcyl9fSkscCYmYShwLHIpLGUud3JhcHBlcnMuSFRNTFRlbXBsYXRlRWxlbWVudD1yfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQscj1lLnJlZ2lzdGVyV3JhcHBlcixvPXdpbmRvdy5IVE1MTWVkaWFFbGVtZW50O28mJih0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyKG8sdCxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhdWRpbyIpKSxlLndyYXBwZXJzLkhUTUxNZWRpYUVsZW1lbnQ9dCl9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ci5jYWxsKHRoaXMsZSl9ZnVuY3Rpb24gbihlKXtpZighKHRoaXMgaW5zdGFuY2VvZiBuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJET00gb2JqZWN0IGNvbnN0cnVjdG9yIGNhbm5vdCBiZSBjYWxsZWQgYXMgYSBmdW5jdGlvbi4iKTt2YXIgdD1pKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImF1ZGlvIikpO3IuY2FsbCh0aGlzLHQpLGEodCx0aGlzKSx0LnNldEF0dHJpYnV0ZSgicHJlbG9hZCIsImF1dG8iKSx2b2lkIDAhPT1lJiZ0LnNldEF0dHJpYnV0ZSgic3JjIixlKX12YXIgcj1lLndyYXBwZXJzLkhUTUxNZWRpYUVsZW1lbnQsbz1lLnJlZ2lzdGVyV3JhcHBlcixpPWUudW53cmFwLGE9ZS5yZXdyYXAscz13aW5kb3cuSFRNTEF1ZGlvRWxlbWVudDtzJiYodC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksbyhzLHQsZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYXVkaW8iKSksbi5wcm90b3R5cGU9dC5wcm90b3R5cGUsZS53cmFwcGVycy5IVE1MQXVkaW9FbGVtZW50PXQsZS53cmFwcGVycy5BdWRpbz1uKX0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gZS5yZXBsYWNlKC9ccysvZywiICIpLnRyaW0oKX1mdW5jdGlvbiBuKGUpe28uY2FsbCh0aGlzLGUpfWZ1bmN0aW9uIHIoZSx0LG4saSl7aWYoISh0aGlzIGluc3RhbmNlb2YgcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiRE9NIG9iamVjdCBjb25zdHJ1Y3RvciBjYW5ub3QgYmUgY2FsbGVkIGFzIGEgZnVuY3Rpb24uIik7dmFyIGE9Yyhkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJvcHRpb24iKSk7by5jYWxsKHRoaXMsYSkscyhhLHRoaXMpLHZvaWQgMCE9PWUmJihhLnRleHQ9ZSksdm9pZCAwIT09dCYmYS5zZXRBdHRyaWJ1dGUoInZhbHVlIix0KSxuPT09ITAmJmEuc2V0QXR0cmlidXRlKCJzZWxlY3RlZCIsIiIpLGEuc2VsZWN0ZWQ9aT09PSEwfXZhciBvPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQsaT1lLm1peGluLGE9ZS5yZWdpc3RlcldyYXBwZXIscz1lLnJld3JhcCxjPWUudW53cmFwLGw9ZS53cmFwLHU9d2luZG93LkhUTUxPcHRpb25FbGVtZW50O24ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoby5wcm90b3R5cGUpLGkobi5wcm90b3R5cGUse2dldCB0ZXh0KCl7cmV0dXJuIHQodGhpcy50ZXh0Q29udGVudCl9LHNldCB0ZXh0KGUpe3RoaXMudGV4dENvbnRlbnQ9dChTdHJpbmcoZSkpfSxnZXQgZm9ybSgpe3JldHVybiBsKGModGhpcykuZm9ybSl9fSksYSh1LG4sZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIikpLHIucHJvdG90eXBlPW4ucHJvdG90eXBlLGUud3JhcHBlcnMuSFRNTE9wdGlvbkVsZW1lbnQ9bixlLndyYXBwZXJzLk9wdGlvbj1yfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuSFRNTEVsZW1lbnQscj1lLm1peGluLG89ZS5yZWdpc3RlcldyYXBwZXIsaT1lLnVud3JhcCxhPWUud3JhcCxzPXdpbmRvdy5IVE1MU2VsZWN0RWxlbWVudDt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyKHQucHJvdG90eXBlLHthZGQ6ZnVuY3Rpb24oZSx0KXsib2JqZWN0Ij09dHlwZW9mIHQmJih0PWkodCkpLGkodGhpcykuYWRkKGkoZSksdCl9LHJlbW92ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwPT09ZT92b2lkIG4ucHJvdG90eXBlLnJlbW92ZS5jYWxsKHRoaXMpOigib2JqZWN0Ij09dHlwZW9mIGUmJihlPWkoZSkpLHZvaWQgaSh0aGlzKS5yZW1vdmUoZSkpfSxnZXQgZm9ybSgpe3JldHVybiBhKGkodGhpcykuZm9ybSl9fSksbyhzLHQsZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VsZWN0IikpLGUud3JhcHBlcnMuSFRNTFNlbGVjdEVsZW1lbnQ9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtuLmNhbGwodGhpcyxlKX12YXIgbj1lLndyYXBwZXJzLkhUTUxFbGVtZW50LHI9ZS5taXhpbixvPWUucmVnaXN0ZXJXcmFwcGVyLGk9ZS51bndyYXAsYT1lLndyYXAscz1lLndyYXBIVE1MQ29sbGVjdGlvbixjPXdpbmRvdy5IVE1MVGFibGVFbGVtZW50O3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHIodC5wcm90b3R5cGUse2dldCBjYXB0aW9uKCl7cmV0dXJuIGEoaSh0aGlzKS5jYXB0aW9uKX0sY3JlYXRlQ2FwdGlvbjpmdW5jdGlvbigpe3JldHVybiBhKGkodGhpcykuY3JlYXRlQ2FwdGlvbigpKX0sZ2V0IHRIZWFkKCl7cmV0dXJuIGEoaSh0aGlzKS50SGVhZCl9LGNyZWF0ZVRIZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIGEoaSh0aGlzKS5jcmVhdGVUSGVhZCgpKX0sY3JlYXRlVEZvb3Q6ZnVuY3Rpb24oKXtyZXR1cm4gYShpKHRoaXMpLmNyZWF0ZVRGb290KCkpfSxnZXQgdEZvb3QoKXtyZXR1cm4gYShpKHRoaXMpLnRGb290KX0sZ2V0IHRCb2RpZXMoKXtyZXR1cm4gcyhpKHRoaXMpLnRCb2RpZXMpfSxjcmVhdGVUQm9keTpmdW5jdGlvbigpe3JldHVybiBhKGkodGhpcykuY3JlYXRlVEJvZHkoKSl9LGdldCByb3dzKCl7cmV0dXJuIHMoaSh0aGlzKS5yb3dzKX0saW5zZXJ0Um93OmZ1bmN0aW9uKGUpe3JldHVybiBhKGkodGhpcykuaW5zZXJ0Um93KGUpKX19KSxvKGMsdCxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0YWJsZSIpKSxlLndyYXBwZXJzLkhUTUxUYWJsZUVsZW1lbnQ9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtuLmNhbGwodGhpcyxlKX12YXIgbj1lLndyYXBwZXJzLkhUTUxFbGVtZW50LHI9ZS5taXhpbixvPWUucmVnaXN0ZXJXcmFwcGVyLGk9ZS53cmFwSFRNTENvbGxlY3Rpb24sYT1lLnVud3JhcCxzPWUud3JhcCxjPXdpbmRvdy5IVE1MVGFibGVTZWN0aW9uRWxlbWVudDt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyKHQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp0LGdldCByb3dzKCl7cmV0dXJuIGkoYSh0aGlzKS5yb3dzKX0saW5zZXJ0Um93OmZ1bmN0aW9uKGUpe3JldHVybiBzKGEodGhpcykuaW5zZXJ0Um93KGUpKX19KSxvKGMsdCxkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJ0aGVhZCIpKSxlLndyYXBwZXJzLkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50PXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7bi5jYWxsKHRoaXMsZSl9dmFyIG49ZS53cmFwcGVycy5IVE1MRWxlbWVudCxyPWUubWl4aW4sbz1lLnJlZ2lzdGVyV3JhcHBlcixpPWUud3JhcEhUTUxDb2xsZWN0aW9uLGE9ZS51bndyYXAscz1lLndyYXAsYz13aW5kb3cuSFRNTFRhYmxlUm93RWxlbWVudDt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxyKHQucHJvdG90eXBlLHtnZXQgY2VsbHMoKXtyZXR1cm4gaShhKHRoaXMpLmNlbGxzKX0saW5zZXJ0Q2VsbDpmdW5jdGlvbihlKXtyZXR1cm4gcyhhKHRoaXMpLmluc2VydENlbGwoZSkpfX0pLG8oYyx0LGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRyIikpLGUud3JhcHBlcnMuSFRNTFRhYmxlUm93RWxlbWVudD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3N3aXRjaChlLmxvY2FsTmFtZSl7Y2FzZSJjb250ZW50IjpyZXR1cm4gbmV3IG4oZSk7Y2FzZSJzaGFkb3ciOnJldHVybiBuZXcgbyhlKTtjYXNlInRlbXBsYXRlIjpyZXR1cm4gbmV3IGkoZSl9ci5jYWxsKHRoaXMsZSl9dmFyIG49ZS53cmFwcGVycy5IVE1MQ29udGVudEVsZW1lbnQscj1lLndyYXBwZXJzLkhUTUxFbGVtZW50LG89ZS53cmFwcGVycy5IVE1MU2hhZG93RWxlbWVudCxpPWUud3JhcHBlcnMuSFRNTFRlbXBsYXRlRWxlbWVudCxhPShlLm1peGluLGUucmVnaXN0ZXJXcmFwcGVyKSxzPXdpbmRvdy5IVE1MVW5rbm93bkVsZW1lbnQ7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShyLnByb3RvdHlwZSksYShzLHQpLGUud3JhcHBlcnMuSFRNTFVua25vd25FbGVtZW50PXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7bi5jYWxsKHRoaXMsZSl9dmFyIG49ZS53cmFwcGVycy5FbGVtZW50LHI9ZS53cmFwcGVycy5IVE1MRWxlbWVudCxvPWUucmVnaXN0ZXJXcmFwcGVyLGk9KGUuZGVmaW5lV3JhcEdldHRlcixlLnVuc2FmZVVud3JhcCksYT1lLndyYXAscz1lLm1peGluLGM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixsPXdpbmRvdy5TVkdFbGVtZW50LHU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKGMsInRpdGxlIik7aWYoISgiY2xhc3NMaXN0ImluIHUpKXt2YXIgZD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4ucHJvdG90eXBlLCJjbGFzc0xpc3QiKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoci5wcm90b3R5cGUsImNsYXNzTGlzdCIsZCksZGVsZXRlIG4ucHJvdG90eXBlLmNsYXNzTGlzdH10LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxzKHQucHJvdG90eXBlLHtnZXQgb3duZXJTVkdFbGVtZW50KCl7cmV0dXJuIGEoaSh0aGlzKS5vd25lclNWR0VsZW1lbnQpfX0pLG8obCx0LGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUyhjLCJ0aXRsZSIpKSxlLndyYXBwZXJzLlNWR0VsZW1lbnQ9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtwLmNhbGwodGhpcyxlKX12YXIgbj1lLm1peGluLHI9ZS5yZWdpc3RlcldyYXBwZXIsbz1lLnVud3JhcCxpPWUud3JhcCxhPXdpbmRvdy5TVkdVc2VFbGVtZW50LHM9Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIixjPWkoZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsImciKSksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocywidXNlIiksdT1jLmNvbnN0cnVjdG9yLGQ9T2JqZWN0LmdldFByb3RvdHlwZU9mKHUucHJvdG90eXBlKSxwPWQuY29uc3RydWN0b3I7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShkKSwiaW5zdGFuY2VSb290ImluIGwmJm4odC5wcm90b3R5cGUse2dldCBpbnN0YW5jZVJvb3QoKXtyZXR1cm4gaShvKHRoaXMpLmluc3RhbmNlUm9vdCl9LGdldCBhbmltYXRlZEluc3RhbmNlUm9vdCgpe3JldHVybiBpKG8odGhpcykuYW5pbWF0ZWRJbnN0YW5jZVJvb3QpfX0pLHIoYSx0LGwpLGUud3JhcHBlcnMuU1ZHVXNlRWxlbWVudD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuRXZlbnRUYXJnZXQscj1lLm1peGluLG89ZS5yZWdpc3RlcldyYXBwZXIsaT1lLnVuc2FmZVVud3JhcCxhPWUud3JhcCxzPXdpbmRvdy5TVkdFbGVtZW50SW5zdGFuY2U7cyYmKHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHIodC5wcm90b3R5cGUse2dldCBjb3JyZXNwb25kaW5nRWxlbWVudCgpe3JldHVybiBhKGkodGhpcykuY29ycmVzcG9uZGluZ0VsZW1lbnQpfSxnZXQgY29ycmVzcG9uZGluZ1VzZUVsZW1lbnQoKXtyZXR1cm4gYShpKHRoaXMpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KX0sZ2V0IHBhcmVudE5vZGUoKXtyZXR1cm4gYShpKHRoaXMpLnBhcmVudE5vZGUpfSxnZXQgY2hpbGROb2Rlcygpe3Rocm93IG5ldyBFcnJvcigiTm90IGltcGxlbWVudGVkIil9LGdldCBmaXJzdENoaWxkKCl7cmV0dXJuIGEoaSh0aGlzKS5maXJzdENoaWxkKX0sZ2V0IGxhc3RDaGlsZCgpe3JldHVybiBhKGkodGhpcykubGFzdENoaWxkKX0sZ2V0IHByZXZpb3VzU2libGluZygpe3JldHVybiBhKGkodGhpcykucHJldmlvdXNTaWJsaW5nKX0sZ2V0IG5leHRTaWJsaW5nKCl7cmV0dXJuIGEoaSh0aGlzKS5uZXh0U2libGluZyl9fSksbyhzLHQpLGUud3JhcHBlcnMuU1ZHRWxlbWVudEluc3RhbmNlPXQpfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe28oZSx0aGlzKX12YXIgbj1lLm1peGluLHI9ZS5yZWdpc3RlcldyYXBwZXIsbz1lLnNldFdyYXBwZXIsaT1lLnVuc2FmZVVud3JhcCxhPWUudW53cmFwLHM9ZS51bndyYXBJZk5lZWRlZCxjPWUud3JhcCxsPXdpbmRvdy5DYW52YXNSZW5kZXJpbmdDb250ZXh0MkQ7bih0LnByb3RvdHlwZSx7Z2V0IGNhbnZhcygpe3JldHVybiBjKGkodGhpcykuY2FudmFzKX0sZHJhd0ltYWdlOmZ1bmN0aW9uKCl7YXJndW1lbnRzWzBdPXMoYXJndW1lbnRzWzBdKSxpKHRoaXMpLmRyYXdJbWFnZS5hcHBseShpKHRoaXMpLGFyZ3VtZW50cyl9LGNyZWF0ZVBhdHRlcm46ZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzWzBdPWEoYXJndW1lbnRzWzBdKSxpKHRoaXMpLmNyZWF0ZVBhdHRlcm4uYXBwbHkoaSh0aGlzKSxhcmd1bWVudHMpfX0pLHIobCx0LGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLmdldENvbnRleHQoIjJkIikpLGUud3JhcHBlcnMuQ2FudmFzUmVuZGVyaW5nQ29udGV4dDJEPXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7aShlLHRoaXMpfXZhciBuPWUuYWRkRm9yd2FyZGluZ1Byb3BlcnRpZXMscj1lLm1peGluLG89ZS5yZWdpc3RlcldyYXBwZXIsaT1lLnNldFdyYXBwZXIsYT1lLnVuc2FmZVVud3JhcCxzPWUudW53cmFwSWZOZWVkZWQsYz1lLndyYXAsbD13aW5kb3cuV2ViR0xSZW5kZXJpbmdDb250ZXh0O2lmKGwpe3IodC5wcm90b3R5cGUse2dldCBjYW52YXMoKXtyZXR1cm4gYyhhKHRoaXMpLmNhbnZhcyl9LHRleEltYWdlMkQ6ZnVuY3Rpb24oKXthcmd1bWVudHNbNV09cyhhcmd1bWVudHNbNV0pLGEodGhpcykudGV4SW1hZ2UyRC5hcHBseShhKHRoaXMpLGFyZ3VtZW50cyl9LHRleFN1YkltYWdlMkQ6ZnVuY3Rpb24oKXthcmd1bWVudHNbNl09cyhhcmd1bWVudHNbNl0pLGEodGhpcykudGV4U3ViSW1hZ2UyRC5hcHBseShhKHRoaXMpLGFyZ3VtZW50cyl9fSk7dmFyIHU9T2JqZWN0LmdldFByb3RvdHlwZU9mKGwucHJvdG90eXBlKTt1IT09T2JqZWN0LnByb3RvdHlwZSYmbih1LHQucHJvdG90eXBlKTt2YXIgZD0vV2ViS2l0Ly50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpP3tkcmF3aW5nQnVmZmVySGVpZ2h0Om51bGwsZHJhd2luZ0J1ZmZlcldpZHRoOm51bGx9Ont9O28obCx0LGQpLGUud3JhcHBlcnMuV2ViR0xSZW5kZXJpbmdDb250ZXh0PXR9fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuTm9kZSxyPWUuR2V0RWxlbWVudHNCeUludGVyZmFjZSxvPWUuTm9uRWxlbWVudFBhcmVudE5vZGVJbnRlcmZhY2UsaT1lLlBhcmVudE5vZGVJbnRlcmZhY2UsYT1lLlNlbGVjdG9yc0ludGVyZmFjZSxzPWUubWl4aW4sYz1lLnJlZ2lzdGVyT2JqZWN0LGw9ZS5yZWdpc3RlcldyYXBwZXIsdT13aW5kb3cuRG9jdW1lbnRGcmFnbWVudDt0LnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKG4ucHJvdG90eXBlKSxzKHQucHJvdG90eXBlLGkpLHModC5wcm90b3R5cGUsYSkscyh0LnByb3RvdHlwZSxyKSxzKHQucHJvdG90eXBlLG8pLGwodSx0LGRvY3VtZW50LmNyZWF0ZURvY3VtZW50RnJhZ21lbnQoKSksZS53cmFwcGVycy5Eb2N1bWVudEZyYWdtZW50PXQ7dmFyIGQ9Yyhkb2N1bWVudC5jcmVhdGVDb21tZW50KCIiKSk7ZS53cmFwcGVycy5Db21tZW50PWR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZCh1KGUpLm93bmVyRG9jdW1lbnQuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpKTtuLmNhbGwodGhpcyx0KSxjKHQsdGhpcyk7dmFyIG89ZS5zaGFkb3dSb290O2Yuc2V0KHRoaXMsbyksdGhpcy50cmVlU2NvcGVfPW5ldyByKHRoaXMsYShvfHxlKSksaC5zZXQodGhpcyxlKX12YXIgbj1lLndyYXBwZXJzLkRvY3VtZW50RnJhZ21lbnQscj1lLlRyZWVTY29wZSxvPWUuZWxlbWVudEZyb21Qb2ludCxpPWUuZ2V0SW5uZXJIVE1MLGE9ZS5nZXRUcmVlU2NvcGUscz1lLm1peGluLGM9ZS5yZXdyYXAsbD1lLnNldElubmVySFRNTCx1PWUudW5zYWZlVW53cmFwLGQ9ZS51bndyYXAscD1lLndyYXAsaD1uZXcgV2Vha01hcCxmPW5ldyBXZWFrTWFwO3QucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLHModC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnQsZ2V0IGlubmVySFRNTCgpe3JldHVybiBpKHRoaXMpfSxzZXQgaW5uZXJIVE1MKGUpe2wodGhpcyxlKSx0aGlzLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcigpfSxnZXQgb2xkZXJTaGFkb3dSb290KCl7cmV0dXJuIGYuZ2V0KHRoaXMpfHxudWxsfSxnZXQgaG9zdCgpe3JldHVybiBoLmdldCh0aGlzKXx8bnVsbH0saW52YWxpZGF0ZVNoYWRvd1JlbmRlcmVyOmZ1bmN0aW9uKCl7cmV0dXJuIGguZ2V0KHRoaXMpLmludmFsaWRhdGVTaGFkb3dSZW5kZXJlcigpfSxlbGVtZW50RnJvbVBvaW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odGhpcyx0aGlzLm93bmVyRG9jdW1lbnQsZSx0KX0sZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGRvY3VtZW50LmdldFNlbGVjdGlvbigpfSxnZXQgYWN0aXZlRWxlbWVudCgpe3ZhciBlPWQodGhpcykub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50O2lmKCFlfHwhZS5ub2RlVHlwZSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9cChlKTshdGhpcy5jb250YWlucyh0KTspe2Zvcig7dC5wYXJlbnROb2RlOyl0PXQucGFyZW50Tm9kZTtpZighdC5ob3N0KXJldHVybiBudWxsO3Q9dC5ob3N0fXJldHVybiB0fX0pLGUud3JhcHBlcnMuU2hhZG93Um9vdD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3ZhciB0PWQoZSkucm9vdDtyZXR1cm4gdCBpbnN0YW5jZW9mIGg/dC5ob3N0Om51bGx9ZnVuY3Rpb24gbih0LG4pe2lmKHQuc2hhZG93Um9vdCl7bj1NYXRoLm1pbih0LmNoaWxkTm9kZXMubGVuZ3RoLTEsbik7dmFyIHI9dC5jaGlsZE5vZGVzW25dO2lmKHIpe3ZhciBvPWUuZ2V0RGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHMocik7aWYoby5sZW5ndGg+MCl7dmFyIGk9b1swXS5wYXJlbnROb2RlO2kubm9kZVR5cGU9PU5vZGUuRUxFTUVOVF9OT0RFJiYodD1pKX19fXJldHVybiB0fWZ1bmN0aW9uIHIoZSl7cmV0dXJuIGU9dShlKSx0KGUpfHxlfWZ1bmN0aW9uIG8oZSl7YShlLHRoaXMpfXZhciBpPWUucmVnaXN0ZXJXcmFwcGVyLGE9ZS5zZXRXcmFwcGVyLHM9ZS51bnNhZmVVbndyYXAsYz1lLnVud3JhcCxsPWUudW53cmFwSWZOZWVkZWQsdT1lLndyYXAsZD1lLmdldFRyZWVTY29wZSxwPXdpbmRvdy5SYW5nZSxoPWUud3JhcHBlcnMuU2hhZG93Um9vdDtvLnByb3RvdHlwZT17Z2V0IHN0YXJ0Q29udGFpbmVyKCl7cmV0dXJuIHIocyh0aGlzKS5zdGFydENvbnRhaW5lcil9LGdldCBlbmRDb250YWluZXIoKXtyZXR1cm4gcihzKHRoaXMpLmVuZENvbnRhaW5lcil9LGdldCBjb21tb25BbmNlc3RvckNvbnRhaW5lcigpe3JldHVybiByKHModGhpcykuY29tbW9uQW5jZXN0b3JDb250YWluZXIpfSxzZXRTdGFydDpmdW5jdGlvbihlLHQpe2U9bihlLHQpLHModGhpcykuc2V0U3RhcnQobChlKSx0KX0sc2V0RW5kOmZ1bmN0aW9uKGUsdCl7ZT1uKGUsdCkscyh0aGlzKS5zZXRFbmQobChlKSx0KX0sc2V0U3RhcnRCZWZvcmU6ZnVuY3Rpb24oZSl7cyh0aGlzKS5zZXRTdGFydEJlZm9yZShsKGUpKX0sc2V0U3RhcnRBZnRlcjpmdW5jdGlvbihlKXtzKHRoaXMpLnNldFN0YXJ0QWZ0ZXIobChlKSl9LHNldEVuZEJlZm9yZTpmdW5jdGlvbihlKXtzKHRoaXMpLnNldEVuZEJlZm9yZShsKGUpKX0sc2V0RW5kQWZ0ZXI6ZnVuY3Rpb24oZSl7cyh0aGlzKS5zZXRFbmRBZnRlcihsKGUpKX0sc2VsZWN0Tm9kZTpmdW5jdGlvbihlKXtzKHRoaXMpLnNlbGVjdE5vZGUobChlKSl9LHNlbGVjdE5vZGVDb250ZW50czpmdW5jdGlvbihlKXtzKHRoaXMpLnNlbGVjdE5vZGVDb250ZW50cyhsKGUpKX0sY29tcGFyZUJvdW5kYXJ5UG9pbnRzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModGhpcykuY29tcGFyZUJvdW5kYXJ5UG9pbnRzKGUsYyh0KSl9LGV4dHJhY3RDb250ZW50czpmdW5jdGlvbigpe3JldHVybiB1KHModGhpcykuZXh0cmFjdENvbnRlbnRzKCkpfSxjbG9uZUNvbnRlbnRzOmZ1bmN0aW9uKCl7cmV0dXJuIHUocyh0aGlzKS5jbG9uZUNvbnRlbnRzKCkpfSxpbnNlcnROb2RlOmZ1bmN0aW9uKGUpe3ModGhpcykuaW5zZXJ0Tm9kZShsKGUpKX0sc3Vycm91bmRDb250ZW50czpmdW5jdGlvbihlKXtzKHRoaXMpLnN1cnJvdW5kQ29udGVudHMobChlKSl9LGNsb25lUmFuZ2U6ZnVuY3Rpb24oKXtyZXR1cm4gdShzKHRoaXMpLmNsb25lUmFuZ2UoKSl9LGlzUG9pbnRJblJhbmdlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModGhpcykuaXNQb2ludEluUmFuZ2UobChlKSx0KX0sY29tcGFyZVBvaW50OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHModGhpcykuY29tcGFyZVBvaW50KGwoZSksdCl9LGludGVyc2VjdHNOb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBzKHRoaXMpLmludGVyc2VjdHNOb2RlKGwoZSkpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiBzKHRoaXMpLnRvU3RyaW5nKCl9fSxwLnByb3RvdHlwZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQmJihvLnByb3RvdHlwZS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIHUocyh0aGlzKS5jcmVhdGVDb250ZXh0dWFsRnJhZ21lbnQoZSkpfSksaSh3aW5kb3cuUmFuZ2Usbyxkb2N1bWVudC5jcmVhdGVSYW5nZSgpKSxlLndyYXBwZXJzLlJhbmdlPW99KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7ZS5wcmV2aW91c1NpYmxpbmdfPWUucHJldmlvdXNTaWJsaW5nLGUubmV4dFNpYmxpbmdfPWUubmV4dFNpYmxpbmcsZS5wYXJlbnROb2RlXz1lLnBhcmVudE5vZGV9ZnVuY3Rpb24gbihuLG8saSl7dmFyIGE9eChuKSxzPXgobyksYz1pP3goaSk6bnVsbDtpZihyKG8pLHQobyksaSluLmZpcnN0Q2hpbGQ9PT1pJiYobi5maXJzdENoaWxkXz1pKSxpLnByZXZpb3VzU2libGluZ189aS5wcmV2aW91c1NpYmxpbmc7ZWxzZXtuLmxhc3RDaGlsZF89bi5sYXN0Q2hpbGQsbi5sYXN0Q2hpbGQ9PT1uLmZpcnN0Q2hpbGQmJihuLmZpcnN0Q2hpbGRfPW4uZmlyc3RDaGlsZCk7dmFyIGw9UihhLmxhc3RDaGlsZCk7bCYmKGwubmV4dFNpYmxpbmdfPWwubmV4dFNpYmxpbmcpfWUub3JpZ2luYWxJbnNlcnRCZWZvcmUuY2FsbChhLHMsYyl9ZnVuY3Rpb24gcihuKXt2YXIgcj14KG4pLG89ci5wYXJlbnROb2RlO2lmKG8pe3ZhciBpPVIobyk7dChuKSxuLnByZXZpb3VzU2libGluZyYmKG4ucHJldmlvdXNTaWJsaW5nLm5leHRTaWJsaW5nXz1uKSxuLm5leHRTaWJsaW5nJiYobi5uZXh0U2libGluZy5wcmV2aW91c1NpYmxpbmdfPW4pLGkubGFzdENoaWxkPT09biYmKGkubGFzdENoaWxkXz1uKSxpLmZpcnN0Q2hpbGQ9PT1uJiYoaS5maXJzdENoaWxkXz1uKSxlLm9yaWdpbmFsUmVtb3ZlQ2hpbGQuY2FsbChvLHIpfX1mdW5jdGlvbiBvKGUpe1Auc2V0KGUsW10pfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9UC5nZXQoZSk7cmV0dXJuIHR8fFAuc2V0KGUsdD1bXSksdH1mdW5jdGlvbiBhKGUpe2Zvcih2YXIgdD1bXSxuPTAscj1lLmZpcnN0Q2hpbGQ7cjtyPXIubmV4dFNpYmxpbmcpdFtuKytdPXI7cmV0dXJuIHR9ZnVuY3Rpb24gcygpe2Zvcih2YXIgZT0wO2U8Ri5sZW5ndGg7ZSsrKXt2YXIgdD1GW2VdLG49dC5wYXJlbnRSZW5kZXJlcjtuJiZuLmRpcnR5fHx0LnJlbmRlcigpfUY9W119ZnVuY3Rpb24gYygpe1Q9bnVsbCxzKCl9ZnVuY3Rpb24gbChlKXt2YXIgdD1BLmdldChlKTtyZXR1cm4gdHx8KHQ9bmV3IGgoZSksQS5zZXQoZSx0KSksdH1mdW5jdGlvbiB1KGUpe3ZhciB0PWooZSkucm9vdDtyZXR1cm4gdCBpbnN0YW5jZW9mIEM/dDpudWxsfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGwoZS5ob3N0KX1mdW5jdGlvbiBwKGUpe3RoaXMuc2tpcD0hMSx0aGlzLm5vZGU9ZSx0aGlzLmNoaWxkTm9kZXM9W119ZnVuY3Rpb24gaChlKXt0aGlzLmhvc3Q9ZSx0aGlzLmRpcnR5PSExLHRoaXMuaW52YWxpZGF0ZUF0dHJpYnV0ZXMoKSx0aGlzLmFzc29jaWF0ZU5vZGUoZSl9ZnVuY3Rpb24gZihlKXtmb3IodmFyIHQ9W10sbj1lLmZpcnN0Q2hpbGQ7bjtuPW4ubmV4dFNpYmxpbmcpRShuKT90LnB1c2guYXBwbHkodCxpKG4pKTp0LnB1c2gobik7cmV0dXJuIHR9ZnVuY3Rpb24gbShlKXtpZihlIGluc3RhbmNlb2YgTClyZXR1cm4gZTtpZihlIGluc3RhbmNlb2YgTylyZXR1cm4gbnVsbDtmb3IodmFyIHQ9ZS5maXJzdENoaWxkO3Q7dD10Lm5leHRTaWJsaW5nKXt2YXIgbj1tKHQpO2lmKG4pcmV0dXJuIG59cmV0dXJuIG51bGx9ZnVuY3Rpb24gdyhlLHQpe2kodCkucHVzaChlKTt2YXIgbj1rLmdldChlKTtuP24ucHVzaCh0KTprLnNldChlLFt0XSl9ZnVuY3Rpb24gdihlKXtyZXR1cm4gay5nZXQoZSl9ZnVuY3Rpb24gZyhlKXtrLnNldChlLHZvaWQgMCl9ZnVuY3Rpb24gYihlLHQpe3ZhciBuPXQuZ2V0QXR0cmlidXRlKCJzZWxlY3QiKTtpZighbilyZXR1cm4hMDtpZihuPW4udHJpbSgpLCFuKXJldHVybiEwO2lmKCEoZSBpbnN0YW5jZW9mIE0pKXJldHVybiExO2lmKCFxLnRlc3QobikpcmV0dXJuITE7dHJ5e3JldHVybiBlLm1hdGNoZXMobil9Y2F0Y2gocil7cmV0dXJuITF9fWZ1bmN0aW9uIHkoZSx0KXt2YXIgbj12KHQpO3JldHVybiBuJiZuW24ubGVuZ3RoLTFdPT09ZX1mdW5jdGlvbiBFKGUpe3JldHVybiBlIGluc3RhbmNlb2YgT3x8ZSBpbnN0YW5jZW9mIEx9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gZS5zaGFkb3dSb290fWZ1bmN0aW9uIFMoZSl7Zm9yKHZhciB0PVtdLG49ZS5zaGFkb3dSb290O247bj1uLm9sZGVyU2hhZG93Um9vdCl0LnB1c2gobik7cmV0dXJuIHR9dmFyIFQsTT1lLndyYXBwZXJzLkVsZW1lbnQsTz1lLndyYXBwZXJzLkhUTUxDb250ZW50RWxlbWVudCxMPWUud3JhcHBlcnMuSFRNTFNoYWRvd0VsZW1lbnQsTj1lLndyYXBwZXJzLk5vZGUsQz1lLndyYXBwZXJzLlNoYWRvd1Jvb3Qsaj0oZS5hc3NlcnQsZS5nZXRUcmVlU2NvcGUpLEQ9KGUubWl4aW4sZS5vbmVPZiksSD1lLnVuc2FmZVVud3JhcCx4PWUudW53cmFwLFI9ZS53cmFwLEk9ZS5BcnJheVNwbGljZSxQPW5ldyBXZWFrTWFwLGs9bmV3IFdlYWtNYXAsQT1uZXcgV2Vha01hcCxXPUQod2luZG93LFsicmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwibW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwid2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwic2V0VGltZW91dCJdKSxGPVtdLFU9bmV3IEk7VS5lcXVhbHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4geChlLm5vZGUpPT09dH0scC5wcm90b3R5cGU9e2FwcGVuZDpmdW5jdGlvbihlKXt2YXIgdD1uZXcgcChlKTtyZXR1cm4gdGhpcy5jaGlsZE5vZGVzLnB1c2godCksdH0sc3luYzpmdW5jdGlvbihlKXtpZighdGhpcy5za2lwKXtmb3IodmFyIHQ9dGhpcy5ub2RlLG89dGhpcy5jaGlsZE5vZGVzLGk9YSh4KHQpKSxzPWV8fG5ldyBXZWFrTWFwLGM9VS5jYWxjdWxhdGVTcGxpY2VzKG8saSksbD0wLHU9MCxkPTAscD0wO3A8Yy5sZW5ndGg7cCsrKXtmb3IodmFyIGg9Y1twXTtkPGguaW5kZXg7ZCsrKXUrKyxvW2wrK10uc3luYyhzKTtmb3IodmFyIGY9aC5yZW1vdmVkLmxlbmd0aCxtPTA7bTxmO20rKyl7dmFyIHc9UihpW3UrK10pO3MuZ2V0KHcpfHxyKHcpfWZvcih2YXIgdj1oLmFkZGVkQ291bnQsZz1pW3VdJiZSKGlbdV0pLG09MDttPHY7bSsrKXt2YXIgYj1vW2wrK10seT1iLm5vZGU7bih0LHksZykscy5zZXQoeSwhMCksYi5zeW5jKHMpfWQrPXZ9Zm9yKHZhciBwPWQ7cDxvLmxlbmd0aDtwKyspb1twXS5zeW5jKHMpfX19LGgucHJvdG90eXBlPXtyZW5kZXI6ZnVuY3Rpb24oZSl7aWYodGhpcy5kaXJ0eSl7dGhpcy5pbnZhbGlkYXRlQXR0cmlidXRlcygpO3ZhciB0PXRoaXMuaG9zdDt0aGlzLmRpc3RyaWJ1dGlvbih0KTt2YXIgbj1lfHxuZXcgcCh0KTt0aGlzLmJ1aWxkUmVuZGVyVHJlZShuLHQpO3ZhciByPSFlO3ImJm4uc3luYygpLHRoaXMuZGlydHk9ITF9fSxnZXQgcGFyZW50UmVuZGVyZXIoKXtyZXR1cm4gaih0aGlzLmhvc3QpLnJlbmRlcmVyfSxpbnZhbGlkYXRlOmZ1bmN0aW9uKCl7aWYoIXRoaXMuZGlydHkpe3RoaXMuZGlydHk9ITA7dmFyIGU9dGhpcy5wYXJlbnRSZW5kZXJlcjtpZihlJiZlLmludmFsaWRhdGUoKSxGLnB1c2godGhpcyksVClyZXR1cm47VD13aW5kb3dbV10oYywwKX19LGRpc3RyaWJ1dGlvbjpmdW5jdGlvbihlKXt0aGlzLnJlc2V0QWxsU3VidHJlZXMoZSksdGhpcy5kaXN0cmlidXRpb25SZXNvbHV0aW9uKGUpfSxyZXNldEFsbDpmdW5jdGlvbihlKXtFKGUpP28oZSk6ZyhlKSx0aGlzLnJlc2V0QWxsU3VidHJlZXMoZSl9LHJlc2V0QWxsU3VidHJlZXM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuZmlyc3RDaGlsZDt0O3Q9dC5uZXh0U2libGluZyl0aGlzLnJlc2V0QWxsKHQpO2Uuc2hhZG93Um9vdCYmdGhpcy5yZXNldEFsbChlLnNoYWRvd1Jvb3QpLGUub2xkZXJTaGFkb3dSb290JiZ0aGlzLnJlc2V0QWxsKGUub2xkZXJTaGFkb3dSb290KX0sZGlzdHJpYnV0aW9uUmVzb2x1dGlvbjpmdW5jdGlvbihlKXtpZihfKGUpKXtmb3IodmFyIHQ9ZSxuPWYodCkscj1TKHQpLG89MDtvPHIubGVuZ3RoO28rKyl0aGlzLnBvb2xEaXN0cmlidXRpb24ocltvXSxuKTtmb3IodmFyIG89ci5sZW5ndGgtMTtvPj0wO28tLSl7dmFyIGk9cltvXSxhPW0oaSk7aWYoYSl7dmFyIHM9aS5vbGRlclNoYWRvd1Jvb3Q7cyYmKG49ZihzKSk7Zm9yKHZhciBjPTA7YzxuLmxlbmd0aDtjKyspdyhuW2NdLGEpfXRoaXMuZGlzdHJpYnV0aW9uUmVzb2x1dGlvbihpKX19Zm9yKHZhciBsPWUuZmlyc3RDaGlsZDtsO2w9bC5uZXh0U2libGluZyl0aGlzLmRpc3RyaWJ1dGlvblJlc29sdXRpb24obCl9LHBvb2xEaXN0cmlidXRpb246ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiBMKSlpZihlIGluc3RhbmNlb2YgTyl7dmFyIG49ZTt0aGlzLnVwZGF0ZURlcGVuZGVudEF0dHJpYnV0ZXMobi5nZXRBdHRyaWJ1dGUoInNlbGVjdCIpKTtmb3IodmFyIHI9ITEsbz0wO288dC5sZW5ndGg7bysrKXt2YXIgZT10W29dO2UmJmIoZSxuKSYmKHcoZSxuKSx0W29dPXZvaWQgMCxyPSEwKX1pZighcilmb3IodmFyIGk9bi5maXJzdENoaWxkO2k7aT1pLm5leHRTaWJsaW5nKXcoaSxuKX1lbHNlIGZvcih2YXIgaT1lLmZpcnN0Q2hpbGQ7aTtpPWkubmV4dFNpYmxpbmcpdGhpcy5wb29sRGlzdHJpYnV0aW9uKGksdCl9LGJ1aWxkUmVuZGVyVHJlZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbj10aGlzLmNvbXBvc2UodCkscj0wO3I8bi5sZW5ndGg7cisrKXt2YXIgbz1uW3JdLGk9ZS5hcHBlbmQobyk7dGhpcy5idWlsZFJlbmRlclRyZWUoaSxvKX1pZihfKHQpKXt2YXIgYT1sKHQpO2EuZGlydHk9ITF9fSxjb21wb3NlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxuPWUuc2hhZG93Um9vdHx8ZSxyPW4uZmlyc3RDaGlsZDtyO3I9ci5uZXh0U2libGluZylpZihFKHIpKXt0aGlzLmFzc29jaWF0ZU5vZGUobik7Zm9yKHZhciBvPWkociksYT0wO2E8by5sZW5ndGg7YSsrKXt2YXIgcz1vW2FdO3kocixzKSYmdC5wdXNoKHMpfX1lbHNlIHQucHVzaChyKTtyZXR1cm4gdH0saW52YWxpZGF0ZUF0dHJpYnV0ZXM6ZnVuY3Rpb24oKXt0aGlzLmF0dHJpYnV0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKX0sdXBkYXRlRGVwZW5kZW50QXR0cmlidXRlczpmdW5jdGlvbihlKXtpZihlKXt2YXIgdD10aGlzLmF0dHJpYnV0ZXM7L1wuXHcrLy50ZXN0KGUpJiYodFsiY2xhc3MiXT0hMCksLyNcdysvLnRlc3QoZSkmJih0LmlkPSEwKSxlLnJlcGxhY2UoL1xbXHMqKFteXHM9XHx+XF1dKykvZyxmdW5jdGlvbihlLG4pe3Rbbl09ITB9KX19LGRlcGVuZHNPbkF0dHJpYnV0ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5hdHRyaWJ1dGVzW2VdfSxhc3NvY2lhdGVOb2RlOmZ1bmN0aW9uKGUpe0goZSkucG9seW1lclNoYWRvd1JlbmRlcmVyXz10aGlzfX07dmFyIHE9L14oOm5vdFwoKT9bKi4jW2EtekEtWl98XS87Ti5wcm90b3R5cGUuaW52YWxpZGF0ZVNoYWRvd1JlbmRlcmVyPWZ1bmN0aW9uKGUpe3ZhciB0PUgodGhpcykucG9seW1lclNoYWRvd1JlbmRlcmVyXztyZXR1cm4hIXQmJih0LmludmFsaWRhdGUoKSwhMCl9LE8ucHJvdG90eXBlLmdldERpc3RyaWJ1dGVkTm9kZXM9TC5wcm90b3R5cGUuZ2V0RGlzdHJpYnV0ZWROb2Rlcz1mdW5jdGlvbigpe3JldHVybiBzKCksaSh0aGlzKX0sTS5wcm90b3R5cGUuZ2V0RGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM9ZnVuY3Rpb24oKXtyZXR1cm4gcygpLHYodGhpcyl8fFtdfSxPLnByb3RvdHlwZS5ub2RlSXNJbnNlcnRlZF89TC5wcm90b3R5cGUubm9kZUlzSW5zZXJ0ZWRfPWZ1bmN0aW9uKCl7dGhpcy5pbnZhbGlkYXRlU2hhZG93UmVuZGVyZXIoKTt2YXIgZSx0PXUodGhpcyk7dCYmKGU9ZCh0KSksSCh0aGlzKS5wb2x5bWVyU2hhZG93UmVuZGVyZXJfPWUsZSYmZS5pbnZhbGlkYXRlKCl9LGUuZ2V0UmVuZGVyZXJGb3JIb3N0PWwsZS5nZXRTaGFkb3dUcmVlcz1TLGUucmVuZGVyQWxsUGVuZGluZz1zLGUuZ2V0RGVzdGluYXRpb25JbnNlcnRpb25Qb2ludHM9dixlLnZpc3VhbD17aW5zZXJ0QmVmb3JlOm4scmVtb3ZlOnJ9fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KHQpe2lmKHdpbmRvd1t0XSl7cighZS53cmFwcGVyc1t0XSk7dmFyIGM9ZnVuY3Rpb24oZSl7bi5jYWxsKHRoaXMsZSl9O2MucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobi5wcm90b3R5cGUpLG8oYy5wcm90b3R5cGUse2dldCBmb3JtKCl7cmV0dXJuIHMoYSh0aGlzKS5mb3JtKX19KSxpKHdpbmRvd1t0XSxjLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodC5zbGljZSg0LC03KSkpLGUud3JhcHBlcnNbdF09Y319dmFyIG49ZS53cmFwcGVycy5IVE1MRWxlbWVudCxyPWUuYXNzZXJ0LG89ZS5taXhpbixpPWUucmVnaXN0ZXJXcmFwcGVyLGE9ZS51bndyYXAscz1lLndyYXAsYz1bIkhUTUxCdXR0b25FbGVtZW50IiwiSFRNTEZpZWxkU2V0RWxlbWVudCIsIkhUTUxJbnB1dEVsZW1lbnQiLCJIVE1MS2V5Z2VuRWxlbWVudCIsIkhUTUxMYWJlbEVsZW1lbnQiLCJIVE1MTGVnZW5kRWxlbWVudCIsIkhUTUxPYmplY3RFbGVtZW50IiwiSFRNTE91dHB1dEVsZW1lbnQiLCJIVE1MVGV4dEFyZWFFbGVtZW50Il07Yy5mb3JFYWNoKHQpfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe3IoZSx0aGlzKX12YXIgbj1lLnJlZ2lzdGVyV3JhcHBlcixyPWUuc2V0V3JhcHBlcixvPWUudW5zYWZlVW53cmFwLGk9ZS51bndyYXAsYT1lLnVud3JhcElmTmVlZGVkLHM9ZS53cmFwLGM9d2luZG93LlNlbGVjdGlvbjt0LnByb3RvdHlwZT17Z2V0IGFuY2hvck5vZGUoKXtyZXR1cm4gcyhvKHRoaXMpLmFuY2hvck5vZGUpfSxnZXQgZm9jdXNOb2RlKCl7cmV0dXJuIHMobyh0aGlzKS5mb2N1c05vZGUpfSxhZGRSYW5nZTpmdW5jdGlvbihlKXtvKHRoaXMpLmFkZFJhbmdlKGEoZSkpfSxjb2xsYXBzZTpmdW5jdGlvbihlLHQpe28odGhpcykuY29sbGFwc2UoYShlKSx0KX0sY29udGFpbnNOb2RlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIG8odGhpcykuY29udGFpbnNOb2RlKGEoZSksdCl9LGdldFJhbmdlQXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHMobyh0aGlzKS5nZXRSYW5nZUF0KGUpKX0scmVtb3ZlUmFuZ2U6ZnVuY3Rpb24oZSl7byh0aGlzKS5yZW1vdmVSYW5nZShpKGUpKX0sc2VsZWN0QWxsQ2hpbGRyZW46ZnVuY3Rpb24oZSl7byh0aGlzKS5zZWxlY3RBbGxDaGlsZHJlbihlIGluc3RhbmNlb2YgU2hhZG93Um9vdD9vKGUuaG9zdCk6YShlKSl9LHRvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIG8odGhpcykudG9TdHJpbmcoKX19LGMucHJvdG90eXBlLmV4dGVuZCYmKHQucHJvdG90eXBlLmV4dGVuZD1mdW5jdGlvbihlLHQpe28odGhpcykuZXh0ZW5kKGEoZSksdCl9KSxuKHdpbmRvdy5TZWxlY3Rpb24sdCx3aW5kb3cuZ2V0U2VsZWN0aW9uKCkpLGUud3JhcHBlcnMuU2VsZWN0aW9uPXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIHQoZSl7cihlLHRoaXMpfXZhciBuPWUucmVnaXN0ZXJXcmFwcGVyLHI9ZS5zZXRXcmFwcGVyLG89ZS51bnNhZmVVbndyYXAsaT1lLnVud3JhcElmTmVlZGVkLGE9ZS53cmFwLHM9d2luZG93LlRyZWVXYWxrZXI7dC5wcm90b3R5cGU9e2dldCByb290KCl7cmV0dXJuIGEobyh0aGlzKS5yb290KX0sZ2V0IGN1cnJlbnROb2RlKCl7cmV0dXJuIGEobyh0aGlzKS5jdXJyZW50Tm9kZSl9LHNldCBjdXJyZW50Tm9kZShlKXtvKHRoaXMpLmN1cnJlbnROb2RlPWkoZSl9LGdldCBmaWx0ZXIoKXtyZXR1cm4gbyh0aGlzKS5maWx0ZXJ9LHBhcmVudE5vZGU6ZnVuY3Rpb24oKXtyZXR1cm4gYShvKHRoaXMpLnBhcmVudE5vZGUoKSl9LGZpcnN0Q2hpbGQ6ZnVuY3Rpb24oKXtyZXR1cm4gYShvKHRoaXMpLmZpcnN0Q2hpbGQoKSl9LGxhc3RDaGlsZDpmdW5jdGlvbigpe3JldHVybiBhKG8odGhpcykubGFzdENoaWxkKCkpfSxwcmV2aW91c1NpYmxpbmc6ZnVuY3Rpb24oKXtyZXR1cm4gYShvKHRoaXMpLnByZXZpb3VzU2libGluZygpKX0scHJldmlvdXNOb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIGEobyh0aGlzKS5wcmV2aW91c05vZGUoKSl9LG5leHROb2RlOmZ1bmN0aW9uKCl7cmV0dXJuIGEobyh0aGlzKS5uZXh0Tm9kZSgpKX19LG4ocyx0KSxlLndyYXBwZXJzLlRyZWVXYWxrZXI9dH0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXt1LmNhbGwodGhpcyxlKSx0aGlzLnRyZWVTY29wZV89bmV3IHcodGhpcyxudWxsKX1mdW5jdGlvbiBuKGUpe3ZhciBuPWRvY3VtZW50W2VdO3QucHJvdG90eXBlW2VdPWZ1bmN0aW9uKCl7cmV0dXJuIGoobi5hcHBseShOKHRoaXMpLGFyZ3VtZW50cykpfX1mdW5jdGlvbiByKGUsdCl7eC5jYWxsKE4odCksQyhlKSksbyhlLHQpfWZ1bmN0aW9uIG8oZSx0KXtlLnNoYWRvd1Jvb3QmJnQuYWRvcHROb2RlKGUuc2hhZG93Um9vdCksZSBpbnN0YW5jZW9mIG0mJmkoZSx0KTtmb3IodmFyIG49ZS5maXJzdENoaWxkO247bj1uLm5leHRTaWJsaW5nKW8obix0KX1mdW5jdGlvbiBpKGUsdCl7dmFyIG49ZS5vbGRlclNoYWRvd1Jvb3Q7biYmdC5hZG9wdE5vZGUobil9ZnVuY3Rpb24gYShlKXtMKGUsdGhpcyl9ZnVuY3Rpb24gcyhlLHQpe3ZhciBuPWRvY3VtZW50LmltcGxlbWVudGF0aW9uW3RdO2UucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7CnJldHVybiBqKG4uYXBwbHkoTih0aGlzKSxhcmd1bWVudHMpKX19ZnVuY3Rpb24gYyhlLHQpe3ZhciBuPWRvY3VtZW50LmltcGxlbWVudGF0aW9uW3RdO2UucHJvdG90eXBlW3RdPWZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkoTih0aGlzKSxhcmd1bWVudHMpfX12YXIgbD1lLkdldEVsZW1lbnRzQnlJbnRlcmZhY2UsdT1lLndyYXBwZXJzLk5vZGUsZD1lLlBhcmVudE5vZGVJbnRlcmZhY2UscD1lLk5vbkVsZW1lbnRQYXJlbnROb2RlSW50ZXJmYWNlLGg9ZS53cmFwcGVycy5TZWxlY3Rpb24sZj1lLlNlbGVjdG9yc0ludGVyZmFjZSxtPWUud3JhcHBlcnMuU2hhZG93Um9vdCx3PWUuVHJlZVNjb3BlLHY9ZS5jbG9uZU5vZGUsZz1lLmRlZmluZUdldHRlcixiPWUuZGVmaW5lV3JhcEdldHRlcix5PWUuZWxlbWVudEZyb21Qb2ludCxFPWUuZm9yd2FyZE1ldGhvZHNUb1dyYXBwZXIsXz1lLm1hdGNoZXNOYW1lcyxTPWUubWl4aW4sVD1lLnJlZ2lzdGVyV3JhcHBlcixNPWUucmVuZGVyQWxsUGVuZGluZyxPPWUucmV3cmFwLEw9ZS5zZXRXcmFwcGVyLE49ZS51bnNhZmVVbndyYXAsQz1lLnVud3JhcCxqPWUud3JhcCxEPWUud3JhcEV2ZW50VGFyZ2V0TWV0aG9kcyxIPShlLndyYXBOb2RlTGlzdCxuZXcgV2Vha01hcCk7dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh1LnByb3RvdHlwZSksYih0LCJkb2N1bWVudEVsZW1lbnQiKSxiKHQsImJvZHkiKSxiKHQsImhlYWQiKSxnKHQsImFjdGl2ZUVsZW1lbnQiLGZ1bmN0aW9uKCl7dmFyIGU9Qyh0aGlzKS5hY3RpdmVFbGVtZW50O2lmKCFlfHwhZS5ub2RlVHlwZSlyZXR1cm4gbnVsbDtmb3IodmFyIHQ9aihlKTshdGhpcy5jb250YWlucyh0KTspe2Zvcig7dC5wYXJlbnROb2RlOyl0PXQucGFyZW50Tm9kZTtpZighdC5ob3N0KXJldHVybiBudWxsO3Q9dC5ob3N0fXJldHVybiB0fSksWyJjcmVhdGVDb21tZW50IiwiY3JlYXRlRG9jdW1lbnRGcmFnbWVudCIsImNyZWF0ZUVsZW1lbnQiLCJjcmVhdGVFbGVtZW50TlMiLCJjcmVhdGVFdmVudCIsImNyZWF0ZUV2ZW50TlMiLCJjcmVhdGVSYW5nZSIsImNyZWF0ZVRleHROb2RlIl0uZm9yRWFjaChuKTt2YXIgeD1kb2N1bWVudC5hZG9wdE5vZGUsUj1kb2N1bWVudC5nZXRTZWxlY3Rpb247Uyh0LnByb3RvdHlwZSx7YWRvcHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnBhcmVudE5vZGUmJmUucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChlKSxyKGUsdGhpcyksZX0sZWxlbWVudEZyb21Qb2ludDpmdW5jdGlvbihlLHQpe3JldHVybiB5KHRoaXMsdGhpcyxlLHQpfSxpbXBvcnROb2RlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHYoZSx0LE4odGhpcykpfSxnZXRTZWxlY3Rpb246ZnVuY3Rpb24oKXtyZXR1cm4gTSgpLG5ldyBoKFIuY2FsbChDKHRoaXMpKSl9LGdldEVsZW1lbnRzQnlOYW1lOmZ1bmN0aW9uKGUpe3JldHVybiBmLnF1ZXJ5U2VsZWN0b3JBbGwuY2FsbCh0aGlzLCJbbmFtZT0iK0pTT04uc3RyaW5naWZ5KFN0cmluZyhlKSkrIl0iKX19KTt2YXIgST1kb2N1bWVudC5jcmVhdGVUcmVlV2Fsa2VyLFA9ZS53cmFwcGVycy5UcmVlV2Fsa2VyO2lmKHQucHJvdG90eXBlLmNyZWF0ZVRyZWVXYWxrZXI9ZnVuY3Rpb24oZSx0LG4scil7dmFyIG89bnVsbDtyZXR1cm4gbiYmKG4uYWNjZXB0Tm9kZSYmImZ1bmN0aW9uIj09dHlwZW9mIG4uYWNjZXB0Tm9kZT9vPXthY2NlcHROb2RlOmZ1bmN0aW9uKGUpe3JldHVybiBuLmFjY2VwdE5vZGUoaihlKSl9fToiZnVuY3Rpb24iPT10eXBlb2YgbiYmKG89ZnVuY3Rpb24oZSl7cmV0dXJuIG4oaihlKSl9KSksbmV3IFAoSS5jYWxsKEModGhpcyksQyhlKSx0LG8scikpfSxkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQpe3ZhciBrPWRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudDt0LnByb3RvdHlwZS5yZWdpc3RlckVsZW1lbnQ9ZnVuY3Rpb24odCxuKXtmdW5jdGlvbiByKGUpe3JldHVybiBlP3ZvaWQgTChlLHRoaXMpOmk/ZG9jdW1lbnQuY3JlYXRlRWxlbWVudChpLHQpOmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQodCl9dmFyIG8saTtpZih2b2lkIDAhPT1uJiYobz1uLnByb3RvdHlwZSxpPW5bImV4dGVuZHMiXSksb3x8KG89T2JqZWN0LmNyZWF0ZShIVE1MRWxlbWVudC5wcm90b3R5cGUpKSxlLm5hdGl2ZVByb3RvdHlwZVRhYmxlLmdldChvKSl0aHJvdyBuZXcgRXJyb3IoIk5vdFN1cHBvcnRlZEVycm9yIik7Zm9yKHZhciBhLHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pLGM9W107cyYmIShhPWUubmF0aXZlUHJvdG90eXBlVGFibGUuZ2V0KHMpKTspYy5wdXNoKHMpLHM9T2JqZWN0LmdldFByb3RvdHlwZU9mKHMpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiTm90U3VwcG9ydGVkRXJyb3IiKTtmb3IodmFyIGw9T2JqZWN0LmNyZWF0ZShhKSx1PWMubGVuZ3RoLTE7dT49MDt1LS0pbD1PYmplY3QuY3JlYXRlKGwpO1siY3JlYXRlZENhbGxiYWNrIiwiYXR0YWNoZWRDYWxsYmFjayIsImRldGFjaGVkQ2FsbGJhY2siLCJhdHRyaWJ1dGVDaGFuZ2VkQ2FsbGJhY2siXS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciB0PW9bZV07dCYmKGxbZV09ZnVuY3Rpb24oKXtqKHRoaXMpaW5zdGFuY2VvZiByfHxPKHRoaXMpLHQuYXBwbHkoaih0aGlzKSxhcmd1bWVudHMpfSl9KTt2YXIgZD17cHJvdG90eXBlOmx9O2kmJihkWyJleHRlbmRzIl09aSksci5wcm90b3R5cGU9byxyLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1yLGUuY29uc3RydWN0b3JUYWJsZS5zZXQobCxyKSxlLm5hdGl2ZVByb3RvdHlwZVRhYmxlLnNldChvLGwpO2suY2FsbChDKHRoaXMpLHQsZCk7cmV0dXJuIHJ9LEUoW3dpbmRvdy5IVE1MRG9jdW1lbnR8fHdpbmRvdy5Eb2N1bWVudF0sWyJyZWdpc3RlckVsZW1lbnQiXSl9RShbd2luZG93LkhUTUxCb2R5RWxlbWVudCx3aW5kb3cuSFRNTERvY3VtZW50fHx3aW5kb3cuRG9jdW1lbnQsd2luZG93LkhUTUxIZWFkRWxlbWVudCx3aW5kb3cuSFRNTEh0bWxFbGVtZW50XSxbImFwcGVuZENoaWxkIiwiY29tcGFyZURvY3VtZW50UG9zaXRpb24iLCJjb250YWlucyIsImdldEVsZW1lbnRzQnlDbGFzc05hbWUiLCJnZXRFbGVtZW50c0J5VGFnTmFtZSIsImdldEVsZW1lbnRzQnlUYWdOYW1lTlMiLCJpbnNlcnRCZWZvcmUiLCJxdWVyeVNlbGVjdG9yIiwicXVlcnlTZWxlY3RvckFsbCIsInJlbW92ZUNoaWxkIiwicmVwbGFjZUNoaWxkIl0pLEUoW3dpbmRvdy5IVE1MQm9keUVsZW1lbnQsd2luZG93LkhUTUxIZWFkRWxlbWVudCx3aW5kb3cuSFRNTEh0bWxFbGVtZW50XSxfKSxFKFt3aW5kb3cuSFRNTERvY3VtZW50fHx3aW5kb3cuRG9jdW1lbnRdLFsiYWRvcHROb2RlIiwiaW1wb3J0Tm9kZSIsImNvbnRhaW5zIiwiY3JlYXRlQ29tbWVudCIsImNyZWF0ZURvY3VtZW50RnJhZ21lbnQiLCJjcmVhdGVFbGVtZW50IiwiY3JlYXRlRWxlbWVudE5TIiwiY3JlYXRlRXZlbnQiLCJjcmVhdGVFdmVudE5TIiwiY3JlYXRlUmFuZ2UiLCJjcmVhdGVUZXh0Tm9kZSIsImNyZWF0ZVRyZWVXYWxrZXIiLCJlbGVtZW50RnJvbVBvaW50IiwiZ2V0RWxlbWVudEJ5SWQiLCJnZXRFbGVtZW50c0J5TmFtZSIsImdldFNlbGVjdGlvbiJdKSxTKHQucHJvdG90eXBlLGwpLFModC5wcm90b3R5cGUsZCksUyh0LnByb3RvdHlwZSxmKSxTKHQucHJvdG90eXBlLHApLFModC5wcm90b3R5cGUse2dldCBpbXBsZW1lbnRhdGlvbigpe3ZhciBlPUguZ2V0KHRoaXMpO3JldHVybiBlP2U6KGU9bmV3IGEoQyh0aGlzKS5pbXBsZW1lbnRhdGlvbiksSC5zZXQodGhpcyxlKSxlKX0sZ2V0IGRlZmF1bHRWaWV3KCl7cmV0dXJuIGooQyh0aGlzKS5kZWZhdWx0Vmlldyl9fSksVCh3aW5kb3cuRG9jdW1lbnQsdCxkb2N1bWVudC5pbXBsZW1lbnRhdGlvbi5jcmVhdGVIVE1MRG9jdW1lbnQoIiIpKSx3aW5kb3cuSFRNTERvY3VtZW50JiZUKHdpbmRvdy5IVE1MRG9jdW1lbnQsdCksRChbd2luZG93LkhUTUxCb2R5RWxlbWVudCx3aW5kb3cuSFRNTERvY3VtZW50fHx3aW5kb3cuRG9jdW1lbnQsd2luZG93LkhUTUxIZWFkRWxlbWVudF0pO3ZhciBBPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZURvY3VtZW50O2EucHJvdG90eXBlLmNyZWF0ZURvY3VtZW50PWZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c1syXT1DKGFyZ3VtZW50c1syXSksaihBLmFwcGx5KE4odGhpcyksYXJndW1lbnRzKSl9LHMoYSwiY3JlYXRlRG9jdW1lbnRUeXBlIikscyhhLCJjcmVhdGVIVE1MRG9jdW1lbnQiKSxjKGEsImhhc0ZlYXR1cmUiKSxUKHdpbmRvdy5ET01JbXBsZW1lbnRhdGlvbixhKSxFKFt3aW5kb3cuRE9NSW1wbGVtZW50YXRpb25dLFsiY3JlYXRlRG9jdW1lbnQiLCJjcmVhdGVEb2N1bWVudFR5cGUiLCJjcmVhdGVIVE1MRG9jdW1lbnQiLCJoYXNGZWF0dXJlIl0pLGUuYWRvcHROb2RlTm9SZW1vdmU9cixlLndyYXBwZXJzLkRPTUltcGxlbWVudGF0aW9uPWEsZS53cmFwcGVycy5Eb2N1bWVudD10fSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiB0KGUpe24uY2FsbCh0aGlzLGUpfXZhciBuPWUud3JhcHBlcnMuRXZlbnRUYXJnZXQscj1lLndyYXBwZXJzLlNlbGVjdGlvbixvPWUubWl4aW4saT1lLnJlZ2lzdGVyV3JhcHBlcixhPWUucmVuZGVyQWxsUGVuZGluZyxzPWUudW53cmFwLGM9ZS51bndyYXBJZk5lZWRlZCxsPWUud3JhcCx1PXdpbmRvdy5XaW5kb3csZD13aW5kb3cuZ2V0Q29tcHV0ZWRTdHlsZSxwPXdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSxoPXdpbmRvdy5nZXRTZWxlY3Rpb247dC5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLnByb3RvdHlwZSksdS5wcm90b3R5cGUuZ2V0Q29tcHV0ZWRTdHlsZT1mdW5jdGlvbihlLHQpe3JldHVybiBsKHRoaXN8fHdpbmRvdykuZ2V0Q29tcHV0ZWRTdHlsZShjKGUpLHQpfSxwJiYodS5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbCh0aGlzfHx3aW5kb3cpLmdldERlZmF1bHRDb21wdXRlZFN0eWxlKGMoZSksdCl9KSx1LnByb3RvdHlwZS5nZXRTZWxlY3Rpb249ZnVuY3Rpb24oKXtyZXR1cm4gbCh0aGlzfHx3aW5kb3cpLmdldFNlbGVjdGlvbigpfSxkZWxldGUgd2luZG93LmdldENvbXB1dGVkU3R5bGUsZGVsZXRlIHdpbmRvdy5nZXREZWZhdWx0Q29tcHV0ZWRTdHlsZSxkZWxldGUgd2luZG93LmdldFNlbGVjdGlvbixbImFkZEV2ZW50TGlzdGVuZXIiLCJyZW1vdmVFdmVudExpc3RlbmVyIiwiZGlzcGF0Y2hFdmVudCJdLmZvckVhY2goZnVuY3Rpb24oZSl7dS5wcm90b3R5cGVbZV09ZnVuY3Rpb24oKXt2YXIgdD1sKHRoaXN8fHdpbmRvdyk7cmV0dXJuIHRbZV0uYXBwbHkodCxhcmd1bWVudHMpfSxkZWxldGUgd2luZG93W2VdfSksbyh0LnByb3RvdHlwZSx7Z2V0Q29tcHV0ZWRTdHlsZTpmdW5jdGlvbihlLHQpe3JldHVybiBhKCksZC5jYWxsKHModGhpcyksYyhlKSx0KX0sZ2V0U2VsZWN0aW9uOmZ1bmN0aW9uKCl7cmV0dXJuIGEoKSxuZXcgcihoLmNhbGwocyh0aGlzKSkpfSxnZXQgZG9jdW1lbnQoKXtyZXR1cm4gbChzKHRoaXMpLmRvY3VtZW50KX19KSxwJiYodC5wcm90b3R5cGUuZ2V0RGVmYXVsdENvbXB1dGVkU3R5bGU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYSgpLHAuY2FsbChzKHRoaXMpLGMoZSksdCl9KSxpKHUsdCx3aW5kb3cpLGUud3JhcHBlcnMuV2luZG93PXR9KHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCksZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PWUudW53cmFwLG49d2luZG93LkRhdGFUcmFuc2Zlcnx8d2luZG93LkNsaXBib2FyZCxyPW4ucHJvdG90eXBlLnNldERyYWdJbWFnZTtyJiYobi5wcm90b3R5cGUuc2V0RHJhZ0ltYWdlPWZ1bmN0aW9uKGUsbixvKXtyLmNhbGwodGhpcyx0KGUpLG4sbyl9KX0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXt2YXIgdDt0PWUgaW5zdGFuY2VvZiBpP2U6bmV3IGkoZSYmbyhlKSkscih0LHRoaXMpfXZhciBuPWUucmVnaXN0ZXJXcmFwcGVyLHI9ZS5zZXRXcmFwcGVyLG89ZS51bndyYXAsaT13aW5kb3cuRm9ybURhdGE7aSYmKG4oaSx0LG5ldyBpKSxlLndyYXBwZXJzLkZvcm1EYXRhPXQpfSh3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwpLGZ1bmN0aW9uKGUpeyJ1c2Ugc3RyaWN0Ijt2YXIgdD1lLnVud3JhcElmTmVlZGVkLG49WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQ7WE1MSHR0cFJlcXVlc3QucHJvdG90eXBlLnNlbmQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbCh0aGlzLHQoZSkpfX0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXt2YXIgdD1uW2VdLHI9d2luZG93W3RdO2lmKHIpe3ZhciBvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZSksaT1vLmNvbnN0cnVjdG9yO3dpbmRvd1t0XT1pfX12YXIgbj0oZS5pc1dyYXBwZXJGb3Ise2E6IkhUTUxBbmNob3JFbGVtZW50IixhcmVhOiJIVE1MQXJlYUVsZW1lbnQiLGF1ZGlvOiJIVE1MQXVkaW9FbGVtZW50IixiYXNlOiJIVE1MQmFzZUVsZW1lbnQiLGJvZHk6IkhUTUxCb2R5RWxlbWVudCIsYnI6IkhUTUxCUkVsZW1lbnQiLGJ1dHRvbjoiSFRNTEJ1dHRvbkVsZW1lbnQiLGNhbnZhczoiSFRNTENhbnZhc0VsZW1lbnQiLGNhcHRpb246IkhUTUxUYWJsZUNhcHRpb25FbGVtZW50Iixjb2w6IkhUTUxUYWJsZUNvbEVsZW1lbnQiLGNvbnRlbnQ6IkhUTUxDb250ZW50RWxlbWVudCIsZGF0YToiSFRNTERhdGFFbGVtZW50IixkYXRhbGlzdDoiSFRNTERhdGFMaXN0RWxlbWVudCIsZGVsOiJIVE1MTW9kRWxlbWVudCIsZGlyOiJIVE1MRGlyZWN0b3J5RWxlbWVudCIsZGl2OiJIVE1MRGl2RWxlbWVudCIsZGw6IkhUTUxETGlzdEVsZW1lbnQiLGVtYmVkOiJIVE1MRW1iZWRFbGVtZW50IixmaWVsZHNldDoiSFRNTEZpZWxkU2V0RWxlbWVudCIsZm9udDoiSFRNTEZvbnRFbGVtZW50Iixmb3JtOiJIVE1MRm9ybUVsZW1lbnQiLGZyYW1lOiJIVE1MRnJhbWVFbGVtZW50IixmcmFtZXNldDoiSFRNTEZyYW1lU2V0RWxlbWVudCIsaDE6IkhUTUxIZWFkaW5nRWxlbWVudCIsaGVhZDoiSFRNTEhlYWRFbGVtZW50IixocjoiSFRNTEhSRWxlbWVudCIsaHRtbDoiSFRNTEh0bWxFbGVtZW50IixpZnJhbWU6IkhUTUxJRnJhbWVFbGVtZW50IixpbWc6IkhUTUxJbWFnZUVsZW1lbnQiLGlucHV0OiJIVE1MSW5wdXRFbGVtZW50IixrZXlnZW46IkhUTUxLZXlnZW5FbGVtZW50IixsYWJlbDoiSFRNTExhYmVsRWxlbWVudCIsbGVnZW5kOiJIVE1MTGVnZW5kRWxlbWVudCIsbGk6IkhUTUxMSUVsZW1lbnQiLGxpbms6IkhUTUxMaW5rRWxlbWVudCIsbWFwOiJIVE1MTWFwRWxlbWVudCIsbWFycXVlZToiSFRNTE1hcnF1ZWVFbGVtZW50IixtZW51OiJIVE1MTWVudUVsZW1lbnQiLG1lbnVpdGVtOiJIVE1MTWVudUl0ZW1FbGVtZW50IixtZXRhOiJIVE1MTWV0YUVsZW1lbnQiLG1ldGVyOiJIVE1MTWV0ZXJFbGVtZW50IixvYmplY3Q6IkhUTUxPYmplY3RFbGVtZW50IixvbDoiSFRNTE9MaXN0RWxlbWVudCIsb3B0Z3JvdXA6IkhUTUxPcHRHcm91cEVsZW1lbnQiLG9wdGlvbjoiSFRNTE9wdGlvbkVsZW1lbnQiLG91dHB1dDoiSFRNTE91dHB1dEVsZW1lbnQiLHA6IkhUTUxQYXJhZ3JhcGhFbGVtZW50IixwYXJhbToiSFRNTFBhcmFtRWxlbWVudCIscHJlOiJIVE1MUHJlRWxlbWVudCIscHJvZ3Jlc3M6IkhUTUxQcm9ncmVzc0VsZW1lbnQiLHE6IkhUTUxRdW90ZUVsZW1lbnQiLHNjcmlwdDoiSFRNTFNjcmlwdEVsZW1lbnQiLHNlbGVjdDoiSFRNTFNlbGVjdEVsZW1lbnQiLHNoYWRvdzoiSFRNTFNoYWRvd0VsZW1lbnQiLHNvdXJjZToiSFRNTFNvdXJjZUVsZW1lbnQiLHNwYW46IkhUTUxTcGFuRWxlbWVudCIsc3R5bGU6IkhUTUxTdHlsZUVsZW1lbnQiLHRhYmxlOiJIVE1MVGFibGVFbGVtZW50Iix0Ym9keToiSFRNTFRhYmxlU2VjdGlvbkVsZW1lbnQiLHRlbXBsYXRlOiJIVE1MVGVtcGxhdGVFbGVtZW50Iix0ZXh0YXJlYToiSFRNTFRleHRBcmVhRWxlbWVudCIsdGhlYWQ6IkhUTUxUYWJsZVNlY3Rpb25FbGVtZW50Iix0aW1lOiJIVE1MVGltZUVsZW1lbnQiLHRpdGxlOiJIVE1MVGl0bGVFbGVtZW50Iix0cjoiSFRNTFRhYmxlUm93RWxlbWVudCIsdHJhY2s6IkhUTUxUcmFja0VsZW1lbnQiLHVsOiJIVE1MVUxpc3RFbGVtZW50Iix2aWRlbzoiSFRNTFZpZGVvRWxlbWVudCJ9KTtPYmplY3Qua2V5cyhuKS5mb3JFYWNoKHQpLE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUud3JhcHBlcnMpLmZvckVhY2goZnVuY3Rpb24odCl7d2luZG93W3RdPWUud3JhcHBlcnNbdF19KX0od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7dmFyIG49IiI7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZSxmdW5jdGlvbihlKXtuKz1lLnRleHRDb250ZW50KyJcblxuIn0pLHR8fChuPW4ucmVwbGFjZShkLCIiKSksbn1mdW5jdGlvbiBuKGUpe3ZhciB0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIik7cmV0dXJuIHQudGV4dENvbnRlbnQ9ZSx0fWZ1bmN0aW9uIHIoZSl7dmFyIHQ9bihlKTtkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHQpO3ZhciByPVtdO2lmKHQuc2hlZXQpdHJ5e3I9dC5zaGVldC5jc3NSdWxlc31jYXRjaChvKXt9ZWxzZSBjb25zb2xlLndhcm4oInNoZWV0IG5vdCBmb3VuZCIsdCk7cmV0dXJuIHQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZCh0KSxyfWZ1bmN0aW9uIG8oKXtDLmluaXRpYWxpemVkPSEwLGRvY3VtZW50LmJvZHkuYXBwZW5kQ2hpbGQoQyk7dmFyIGU9Qy5jb250ZW50RG9jdW1lbnQsdD1lLmNyZWF0ZUVsZW1lbnQoImJhc2UiKTt0LmhyZWY9ZG9jdW1lbnQuYmFzZVVSSSxlLmhlYWQuYXBwZW5kQ2hpbGQodCl9ZnVuY3Rpb24gaShlKXtDLmluaXRpYWxpemVkfHxvKCksZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZChDKSxlKEMuY29udGVudERvY3VtZW50KSxkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKEMpfWZ1bmN0aW9uIGEoZSx0KXtpZih0KXt2YXIgbztpZihlLm1hdGNoKCJAaW1wb3J0IikmJkQpe3ZhciBhPW4oZSk7aShmdW5jdGlvbihlKXtlLmhlYWQuYXBwZW5kQ2hpbGQoYS5pbXBsKSxvPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGEuc2hlZXQuY3NzUnVsZXMsMCksdChvKX0pfWVsc2Ugbz1yKGUpLHQobyl9fWZ1bmN0aW9uIHMoZSl7ZSYmbCgpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGUpKX1mdW5jdGlvbiBjKGUsdCl7dmFyIHI9bihlKTtyLnNldEF0dHJpYnV0ZSh0LCIiKSxyLnNldEF0dHJpYnV0ZSh4LCIiKSxkb2N1bWVudC5oZWFkLmFwcGVuZENoaWxkKHIpfWZ1bmN0aW9uIGwoKXtyZXR1cm4ganx8KGo9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKSxqLnNldEF0dHJpYnV0ZSh4LCIiKSxqW3hdPSEwKSxqfXZhciB1PXtzdHJpY3RTdHlsaW5nOiExLHJlZ2lzdHJ5Ont9LHNoaW1TdHlsaW5nOmZ1bmN0aW9uKGUsbixyKXt2YXIgbz10aGlzLnByZXBhcmVSb290KGUsbixyKSxpPXRoaXMuaXNUeXBlRXh0ZW5zaW9uKHIpLGE9dGhpcy5tYWtlU2NvcGVTZWxlY3RvcihuLGkpLHM9dChvLCEwKTtzPXRoaXMuc2NvcGVDc3NUZXh0KHMsYSksZSYmKGUuc2hpbW1lZFN0eWxlPXMpLHRoaXMuYWRkQ3NzVG9Eb2N1bWVudChzLG4pfSxzaGltU3R5bGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zaGltQ3NzVGV4dChlLnRleHRDb250ZW50LHQpfSxzaGltQ3NzVGV4dDpmdW5jdGlvbihlLHQpe3JldHVybiBlPXRoaXMuaW5zZXJ0RGlyZWN0aXZlcyhlKSx0aGlzLnNjb3BlQ3NzVGV4dChlLHQpfSxtYWtlU2NvcGVTZWxlY3RvcjpmdW5jdGlvbihlLHQpe3JldHVybiBlP3Q/Iltpcz0iK2UrIl0iOmU6IiJ9LGlzVHlwZUV4dGVuc2lvbjpmdW5jdGlvbihlKXtyZXR1cm4gZSYmZS5pbmRleE9mKCItIik8MH0scHJlcGFyZVJvb3Q6ZnVuY3Rpb24oZSx0LG4pe3ZhciByPXRoaXMucmVnaXN0ZXJSb290KGUsdCxuKTtyZXR1cm4gdGhpcy5yZXBsYWNlVGV4dEluU3R5bGVzKHIucm9vdFN0eWxlcyx0aGlzLmluc2VydERpcmVjdGl2ZXMpLHRoaXMucmVtb3ZlU3R5bGVzKGUsci5yb290U3R5bGVzKSx0aGlzLnN0cmljdFN0eWxpbmcmJnRoaXMuYXBwbHlTY29wZVRvQ29udGVudChlLHQpLHIuc2NvcGVTdHlsZXN9LHJlbW92ZVN0eWxlczpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPTAsbz10Lmxlbmd0aDtyPG8mJihuPXRbcl0pO3IrKyluLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQobil9LHJlZ2lzdGVyUm9vdDpmdW5jdGlvbihlLHQsbil7dmFyIHI9dGhpcy5yZWdpc3RyeVt0XT17cm9vdDplLG5hbWU6dCxleHRlbmRzTmFtZTpufSxvPXRoaXMuZmluZFN0eWxlcyhlKTtyLnJvb3RTdHlsZXM9byxyLnNjb3BlU3R5bGVzPXIucm9vdFN0eWxlczt2YXIgaT10aGlzLnJlZ2lzdHJ5W3IuZXh0ZW5kc05hbWVdO3JldHVybiBpJiYoci5zY29wZVN0eWxlcz1pLnNjb3BlU3R5bGVzLmNvbmNhdChyLnNjb3BlU3R5bGVzKSkscn0sZmluZFN0eWxlczpmdW5jdGlvbihlKXtpZighZSlyZXR1cm5bXTt2YXIgdD1lLnF1ZXJ5U2VsZWN0b3JBbGwoInN0eWxlIik7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5maWx0ZXIuY2FsbCh0LGZ1bmN0aW9uKGUpe3JldHVybiFlLmhhc0F0dHJpYnV0ZShSKX0pfSxhcHBseVNjb3BlVG9Db250ZW50OmZ1bmN0aW9uKGUsdCl7ZSYmKEFycmF5LnByb3RvdHlwZS5mb3JFYWNoLmNhbGwoZS5xdWVyeVNlbGVjdG9yQWxsKCIqIiksZnVuY3Rpb24oZSl7ZS5zZXRBdHRyaWJ1dGUodCwiIil9KSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUucXVlcnlTZWxlY3RvckFsbCgidGVtcGxhdGUiKSxmdW5jdGlvbihlKXt0aGlzLmFwcGx5U2NvcGVUb0NvbnRlbnQoZS5jb250ZW50LHQpfSx0aGlzKSl9LGluc2VydERpcmVjdGl2ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9dGhpcy5pbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQoZSksdGhpcy5pbnNlcnRQb2x5ZmlsbFJ1bGVzSW5Dc3NUZXh0KGUpfSxpbnNlcnRQb2x5ZmlsbERpcmVjdGl2ZXNJbkNzc1RleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGU9ZS5yZXBsYWNlKHAsZnVuY3Rpb24oZSx0KXtyZXR1cm4gdC5zbGljZSgwLC0yKSsieyJ9KSxlLnJlcGxhY2UoaCxmdW5jdGlvbihlLHQpe3JldHVybiB0KyIgeyJ9KX0saW5zZXJ0UG9seWZpbGxSdWxlc0luQ3NzVGV4dDpmdW5jdGlvbihlKXtyZXR1cm4gZT1lLnJlcGxhY2UoZixmdW5jdGlvbihlLHQpe3JldHVybiB0LnNsaWNlKDAsLTEpfSksZS5yZXBsYWNlKG0sZnVuY3Rpb24oZSx0LG4scil7dmFyIG89ZS5yZXBsYWNlKHQsIiIpLnJlcGxhY2UobiwiIik7cmV0dXJuIHIrb30pfSxzY29wZUNzc1RleHQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLmV4dHJhY3RVbnNjb3BlZFJ1bGVzRnJvbUNzc1RleHQoZSk7aWYoZT10aGlzLmluc2VydFBvbHlmaWxsSG9zdEluQ3NzVGV4dChlKSxlPXRoaXMuY29udmVydENvbG9uSG9zdChlKSxlPXRoaXMuY29udmVydENvbG9uSG9zdENvbnRleHQoZSksZT10aGlzLmNvbnZlcnRTaGFkb3dET01TZWxlY3RvcnMoZSksdCl7dmFyIGUscj10aGlzO2EoZSxmdW5jdGlvbihuKXtlPXIuc2NvcGVSdWxlcyhuLHQpfSl9cmV0dXJuIGU9ZSsiXG4iK24sZS50cmltKCl9LGV4dHJhY3RVbnNjb3BlZFJ1bGVzRnJvbUNzc1RleHQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LG49IiI7dD13LmV4ZWMoZSk7KW4rPXRbMV0uc2xpY2UoMCwtMSkrIlxuXG4iO2Zvcig7dD12LmV4ZWMoZSk7KW4rPXRbMF0ucmVwbGFjZSh0WzJdLCIiKS5yZXBsYWNlKHRbMV0sdFszXSkrIlxuXG4iO3JldHVybiBufSxjb252ZXJ0Q29sb25Ib3N0OmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNvbnZlcnRDb2xvblJ1bGUoZSxFLHRoaXMuY29sb25Ib3N0UGFydFJlcGxhY2VyKX0sY29udmVydENvbG9uSG9zdENvbnRleHQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuY29udmVydENvbG9uUnVsZShlLF8sdGhpcy5jb2xvbkhvc3RDb250ZXh0UGFydFJlcGxhY2VyKX0sY29udmVydENvbG9uUnVsZTpmdW5jdGlvbihlLHQsbil7cmV0dXJuIGUucmVwbGFjZSh0LGZ1bmN0aW9uKGUsdCxyLG8pe2lmKHQ9TyxyKXtmb3IodmFyIGksYT1yLnNwbGl0KCIsIikscz1bXSxjPTAsbD1hLmxlbmd0aDtjPGwmJihpPWFbY10pO2MrKylpPWkudHJpbSgpLHMucHVzaChuKHQsaSxvKSk7cmV0dXJuIHMuam9pbigiLCIpfXJldHVybiB0K299KX0sY29sb25Ib3N0Q29udGV4dFBhcnRSZXBsYWNlcjpmdW5jdGlvbihlLHQsbil7cmV0dXJuIHQubWF0Y2goZyk/dGhpcy5jb2xvbkhvc3RQYXJ0UmVwbGFjZXIoZSx0LG4pOmUrdCtuKyIsICIrdCsiICIrZStufSxjb2xvbkhvc3RQYXJ0UmVwbGFjZXI6ZnVuY3Rpb24oZSx0LG4pe3JldHVybiBlK3QucmVwbGFjZShnLCIiKStufSxjb252ZXJ0U2hhZG93RE9NU2VsZWN0b3JzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wO3Q8Ti5sZW5ndGg7dCsrKWU9ZS5yZXBsYWNlKE5bdF0sIiAiKTtyZXR1cm4gZX0sc2NvcGVSdWxlczpmdW5jdGlvbihlLHQpe3ZhciBuPSIiO3JldHVybiBlJiZBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsZnVuY3Rpb24oZSl7aWYoZS5zZWxlY3RvclRleHQmJmUuc3R5bGUmJnZvaWQgMCE9PWUuc3R5bGUuY3NzVGV4dCluKz10aGlzLnNjb3BlU2VsZWN0b3IoZS5zZWxlY3RvclRleHQsdCx0aGlzLnN0cmljdFN0eWxpbmcpKyIge1xuXHQiLG4rPXRoaXMucHJvcGVydGllc0Zyb21SdWxlKGUpKyJcbn1cblxuIjtlbHNlIGlmKGUudHlwZT09PUNTU1J1bGUuTUVESUFfUlVMRSluKz0iQG1lZGlhICIrZS5tZWRpYS5tZWRpYVRleHQrIiB7XG4iLG4rPXRoaXMuc2NvcGVSdWxlcyhlLmNzc1J1bGVzLHQpLG4rPSJcbn1cblxuIjtlbHNlIHRyeXtlLmNzc1RleHQmJihuKz1lLmNzc1RleHQrIlxuXG4iKX1jYXRjaChyKXtlLnR5cGU9PT1DU1NSdWxlLktFWUZSQU1FU19SVUxFJiZlLmNzc1J1bGVzJiYobis9dGhpcy5pZVNhZmVDc3NUZXh0RnJvbUtleUZyYW1lUnVsZShlKSl9fSx0aGlzKSxufSxpZVNhZmVDc3NUZXh0RnJvbUtleUZyYW1lUnVsZTpmdW5jdGlvbihlKXt2YXIgdD0iQGtleWZyYW1lcyAiK2UubmFtZSsiIHsiO3JldHVybiBBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUuY3NzUnVsZXMsZnVuY3Rpb24oZSl7dCs9IiAiK2Uua2V5VGV4dCsiIHsiK2Uuc3R5bGUuY3NzVGV4dCsifSJ9KSx0Kz0iIH0ifSxzY29wZVNlbGVjdG9yOmZ1bmN0aW9uKGUsdCxuKXt2YXIgcj1bXSxvPWUuc3BsaXQoIiwiKTtyZXR1cm4gby5mb3JFYWNoKGZ1bmN0aW9uKGUpe2U9ZS50cmltKCksdGhpcy5zZWxlY3Rvck5lZWRzU2NvcGluZyhlLHQpJiYoZT1uJiYhZS5tYXRjaChPKT90aGlzLmFwcGx5U3RyaWN0U2VsZWN0b3JTY29wZShlLHQpOnRoaXMuYXBwbHlTZWxlY3RvclNjb3BlKGUsdCkpLHIucHVzaChlKX0sdGhpcyksci5qb2luKCIsICIpfSxzZWxlY3Rvck5lZWRzU2NvcGluZzpmdW5jdGlvbihlLHQpe2lmKEFycmF5LmlzQXJyYXkodCkpcmV0dXJuITA7dmFyIG49dGhpcy5tYWtlU2NvcGVNYXRjaGVyKHQpO3JldHVybiFlLm1hdGNoKG4pfSxtYWtlU2NvcGVNYXRjaGVyOmZ1bmN0aW9uKGUpe3JldHVybiBlPWUucmVwbGFjZSgvXFsvZywiXFxbIikucmVwbGFjZSgvXF0vZywiXFxdIiksbmV3IFJlZ0V4cCgiXigiK2UrIikiK1MsIm0iKX0sYXBwbHlTZWxlY3RvclNjb3BlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEFycmF5LmlzQXJyYXkodCk/dGhpcy5hcHBseVNlbGVjdG9yU2NvcGVMaXN0KGUsdCk6dGhpcy5hcHBseVNpbXBsZVNlbGVjdG9yU2NvcGUoZSx0KX0sYXBwbHlTZWxlY3RvclNjb3BlTGlzdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgbixyPVtdLG89MDtuPXRbb107bysrKXIucHVzaCh0aGlzLmFwcGx5U2ltcGxlU2VsZWN0b3JTY29wZShlLG4pKTtyZXR1cm4gci5qb2luKCIsICIpfSxhcHBseVNpbXBsZVNlbGVjdG9yU2NvcGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5tYXRjaChMKT8oZT1lLnJlcGxhY2UoTyx0KSxlLnJlcGxhY2UoTCx0KyIgIikpOnQrIiAiK2V9LGFwcGx5U3RyaWN0U2VsZWN0b3JTY29wZTpmdW5jdGlvbihlLHQpe3Q9dC5yZXBsYWNlKC9cW2lzPShbXlxdXSopXF0vZywiJDEiKTt2YXIgbj1bIiAiLCI+IiwiKyIsIn4iXSxyPWUsbz0iWyIrdCsiXSI7cmV0dXJuIG4uZm9yRWFjaChmdW5jdGlvbihlKXt2YXIgdD1yLnNwbGl0KGUpO3I9dC5tYXAoZnVuY3Rpb24oZSl7dmFyIHQ9ZS50cmltKCkucmVwbGFjZShMLCIiKTtyZXR1cm4gdCYmbi5pbmRleE9mKHQpPDAmJnQuaW5kZXhPZihvKTwwJiYoZT10LnJlcGxhY2UoLyhbXjpdKikoOiopKC4qKS8sIiQxIitvKyIkMiQzIikpLGV9KS5qb2luKGUpfSkscn0saW5zZXJ0UG9seWZpbGxIb3N0SW5Dc3NUZXh0OmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoTSxiKS5yZXBsYWNlKFQsZyl9LHByb3BlcnRpZXNGcm9tUnVsZTpmdW5jdGlvbihlKXt2YXIgdD1lLnN0eWxlLmNzc1RleHQ7ZS5zdHlsZS5jb250ZW50JiYhZS5zdHlsZS5jb250ZW50Lm1hdGNoKC9bJyJdK3xhdHRyLykmJih0PXQucmVwbGFjZSgvY29udGVudDpbXjtdKjsvZywiY29udGVudDogJyIrZS5zdHlsZS5jb250ZW50KyInOyIpKTt2YXIgbj1lLnN0eWxlO2Zvcih2YXIgciBpbiBuKSJpbml0aWFsIj09PW5bcl0mJih0Kz1yKyI6IGluaXRpYWw7ICIpO3JldHVybiB0fSxyZXBsYWNlVGV4dEluU3R5bGVzOmZ1bmN0aW9uKGUsdCl7ZSYmdCYmKGUgaW5zdGFuY2VvZiBBcnJheXx8KGU9W2VdKSxBcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsKGUsZnVuY3Rpb24oZSl7ZS50ZXh0Q29udGVudD10LmNhbGwodGhpcyxlLnRleHRDb250ZW50KX0sdGhpcykpfSxhZGRDc3NUb0RvY3VtZW50OmZ1bmN0aW9uKGUsdCl7ZS5tYXRjaCgiQGltcG9ydCIpP2MoZSx0KTpzKGUpfX0sZD0vXC9cKlteKl0qXCorKFteXC8qXVteKl0qXCorKSpcLy9naW0scD0vXC9cKlxzKkBwb2x5ZmlsbCAoW14qXSpcKisoW15cLypdW14qXSpcKispKlwvKShbXntdKj8pey9naW0saD0vcG9seWZpbGwtbmV4dC1zZWxlY3RvcltefV0qY29udGVudFw6W1xzXSo/WyciXSguKj8pWyciXVs7XHNdKn0oW157XSo/KXsvZ2ltLGY9L1wvXCpcc0Bwb2x5ZmlsbC1ydWxlKFteKl0qXCorKFteXC8qXVteKl0qXCorKSopXC8vZ2ltLG09Lyhwb2x5ZmlsbC1ydWxlKVtefV0qKGNvbnRlbnRcOltcc10qWyciXSguKj8pWyciXSlbO1xzXSpbXn1dKn0vZ2ltLHc9L1wvXCpcc0Bwb2x5ZmlsbC11bnNjb3BlZC1ydWxlKFteKl0qXCorKFteXC8qXVteKl0qXCorKSopXC8vZ2ltLHY9Lyhwb2x5ZmlsbC11bnNjb3BlZC1ydWxlKVtefV0qKGNvbnRlbnRcOltcc10qWyciXSguKj8pWyciXSlbO1xzXSpbXn1dKn0vZ2ltLGc9Ii1zaGFkb3djc3Nob3N0IixiPSItc2hhZG93Y3NzY29udGV4dCIseT0iKSg/OlxcKCgoPzpcXChbXikoXSpcXCl8W14pKF0qKSs/KVxcKSk/KFteLHtdKikiLEU9bmV3IFJlZ0V4cCgiKCIrZyt5LCJnaW0iKSxfPW5ldyBSZWdFeHAoIigiK2IreSwiZ2ltIiksUz0iKFs+XFxzfitbLix7Ol1bXFxzXFxTXSopPyQiLFQ9L1w6aG9zdC9naW0sTT0vXDpob3N0LWNvbnRleHQvZ2ltLE89ZysiLW5vLWNvbWJpbmF0b3IiLEw9bmV3IFJlZ0V4cChnLCJnaW0iKSxOPShuZXcgUmVnRXhwKGIsImdpbSIpLFsvPj4+L2csLzo6c2hhZG93L2csLzo6Y29udGVudC9nLC9cL2RlZXBcLy9nLC9cL3NoYWRvd1wvL2csL1wvc2hhZG93LWRlZXBcLy9nLC9cXlxeL2csL1xeKD8hPSkvZ10pLEM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaWZyYW1lIik7Qy5zdHlsZS5kaXNwbGF5PSJub25lIjt2YXIgaixEPW5hdmlnYXRvci51c2VyQWdlbnQubWF0Y2goIkNocm9tZSIpLEg9InNoaW0tc2hhZG93ZG9tIix4PSJzaGltLXNoYWRvd2RvbS1jc3MiLFI9Im5vLXNoaW0iO2lmKHdpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbCl7cygic3R5bGUgeyBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7IH1cbiIpO3ZhciBJPVNoYWRvd0RPTVBvbHlmaWxsLndyYXAoZG9jdW1lbnQpLFA9SS5xdWVyeVNlbGVjdG9yKCJoZWFkIik7UC5pbnNlcnRCZWZvcmUobCgpLFAuY2hpbGROb2Rlc1swXSksZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsZnVuY3Rpb24oKXtlLnVybFJlc29sdmVyO2lmKHdpbmRvdy5IVE1MSW1wb3J0cyYmIUhUTUxJbXBvcnRzLnVzZU5hdGl2ZSl7dmFyIHQ9ImxpbmtbcmVsPXN0eWxlc2hlZXRdWyIrSCsiXSIsbj0ic3R5bGVbIitIKyJdIjtIVE1MSW1wb3J0cy5pbXBvcnRlci5kb2N1bWVudFByZWxvYWRTZWxlY3RvcnMrPSIsIit0LEhUTUxJbXBvcnRzLmltcG9ydGVyLmltcG9ydHNQcmVsb2FkU2VsZWN0b3JzKz0iLCIrdCxIVE1MSW1wb3J0cy5wYXJzZXIuZG9jdW1lbnRTZWxlY3RvcnM9W0hUTUxJbXBvcnRzLnBhcnNlci5kb2N1bWVudFNlbGVjdG9ycyx0LG5dLmpvaW4oIiwiKTt2YXIgcj1IVE1MSW1wb3J0cy5wYXJzZXIucGFyc2VHZW5lcmljO0hUTUxJbXBvcnRzLnBhcnNlci5wYXJzZUdlbmVyaWM9ZnVuY3Rpb24oZSl7aWYoIWVbeF0pe3ZhciB0PWUuX19pbXBvcnRFbGVtZW50fHxlO2lmKCF0Lmhhc0F0dHJpYnV0ZShIKSlyZXR1cm4gdm9pZCByLmNhbGwodGhpcyxlKTtlLl9fcmVzb3VyY2UmJih0PWUub3duZXJEb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLHQudGV4dENvbnRlbnQ9ZS5fX3Jlc291cmNlKSxIVE1MSW1wb3J0cy5wYXRoLnJlc29sdmVVcmxzSW5TdHlsZSh0LGUuaHJlZiksdC50ZXh0Q29udGVudD11LnNoaW1TdHlsZSh0KSx0LnJlbW92ZUF0dHJpYnV0ZShILCIiKSx0LnNldEF0dHJpYnV0ZSh4LCIiKSx0W3hdPSEwLHQucGFyZW50Tm9kZSE9PVAmJihlLnBhcmVudE5vZGU9PT1QP1AucmVwbGFjZUNoaWxkKHQsZSk6dGhpcy5hZGRFbGVtZW50VG9Eb2N1bWVudCh0KSksdC5fX2ltcG9ydFBhcnNlZD0hMCx0aGlzLm1hcmtQYXJzaW5nQ29tcGxldGUoZSksdGhpcy5wYXJzZU5leHQoKX19O3ZhciBvPUhUTUxJbXBvcnRzLnBhcnNlci5oYXNSZXNvdXJjZTtIVE1MSW1wb3J0cy5wYXJzZXIuaGFzUmVzb3VyY2U9ZnVuY3Rpb24oZSl7cmV0dXJuImxpbmsiPT09ZS5sb2NhbE5hbWUmJiJzdHlsZXNoZWV0Ij09PWUucmVsJiZlLmhhc0F0dHJpYnV0ZShIKT9lLl9fcmVzb3VyY2U6by5jYWxsKHRoaXMsZSl9fX0pfWUuU2hhZG93Q1NTPXV9KHdpbmRvdy5XZWJDb21wb25lbnRzKSksZnVuY3Rpb24oZSl7d2luZG93LlNoYWRvd0RPTVBvbHlmaWxsPyh3aW5kb3cud3JhcD1TaGFkb3dET01Qb2x5ZmlsbC53cmFwSWZOZWVkZWQsd2luZG93LnVud3JhcD1TaGFkb3dET01Qb2x5ZmlsbC51bndyYXBJZk5lZWRlZCk6d2luZG93LndyYXA9d2luZG93LnVud3JhcD1mdW5jdGlvbihlKXtyZXR1cm4gZX19KHdpbmRvdy5XZWJDb21wb25lbnRzKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gdChlKXtyZXR1cm4gdm9pZCAwIT09cFtlXX1mdW5jdGlvbiBuKCl7cy5jYWxsKHRoaXMpLHRoaXMuX2lzSW52YWxpZD0hMH1mdW5jdGlvbiByKGUpe3JldHVybiIiPT1lJiZuLmNhbGwodGhpcyksZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO3JldHVybiB0PjMyJiZ0PDEyNyYmWzM0LDM1LDYwLDYyLDYzLDk2XS5pbmRleE9mKHQpPT0tMT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX1mdW5jdGlvbiBpKGUpe3ZhciB0PWUuY2hhckNvZGVBdCgwKTtyZXR1cm4gdD4zMiYmdDwxMjcmJlszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZih0KT09LTE/ZTplbmNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24gYShlLGEscyl7ZnVuY3Rpb24gYyhlKXtiLnB1c2goZSl9dmFyIGw9YXx8InNjaGVtZSBzdGFydCIsdT0wLGQ9IiIsdj0hMSxnPSExLGI9W107ZTpmb3IoOyhlW3UtMV0hPWZ8fDA9PXUpJiYhdGhpcy5faXNJbnZhbGlkOyl7dmFyIHk9ZVt1XTtzd2l0Y2gobCl7Y2FzZSJzY2hlbWUgc3RhcnQiOmlmKCF5fHwhbS50ZXN0KHkpKXtpZihhKXtjKCJJbnZhbGlkIHNjaGVtZS4iKTticmVhayBlfWQ9IiIsbD0ibm8gc2NoZW1lIjtjb250aW51ZX1kKz15LnRvTG93ZXJDYXNlKCksbD0ic2NoZW1lIjticmVhaztjYXNlInNjaGVtZSI6aWYoeSYmdy50ZXN0KHkpKWQrPXkudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9eSl7aWYoYSl7aWYoZj09eSlicmVhayBlO2MoIkNvZGUgcG9pbnQgbm90IGFsbG93ZWQgaW4gc2NoZW1lOiAiK3kpO2JyZWFrIGV9ZD0iIix1PTAsbD0ibm8gc2NoZW1lIjtjb250aW51ZX1pZih0aGlzLl9zY2hlbWU9ZCxkPSIiLGEpYnJlYWsgZTt0KHRoaXMuX3NjaGVtZSkmJih0aGlzLl9pc1JlbGF0aXZlPSEwKSxsPSJmaWxlIj09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSI6dGhpcy5faXNSZWxhdGl2ZSYmcyYmcy5fc2NoZW1lPT10aGlzLl9zY2hlbWU/InJlbGF0aXZlIG9yIGF1dGhvcml0eSI6dGhpcy5faXNSZWxhdGl2ZT8iYXV0aG9yaXR5IGZpcnN0IHNsYXNoIjoic2NoZW1lIGRhdGEifWJyZWFrO2Nhc2Uic2NoZW1lIGRhdGEiOiI/Ij09eT8odGhpcy5fcXVlcnk9Ij8iLGw9InF1ZXJ5Iik6IiMiPT15Pyh0aGlzLl9mcmFnbWVudD0iIyIsbD0iZnJhZ21lbnQiKTpmIT15JiYiXHQiIT15JiYiXG4iIT15JiYiXHIiIT15JiYodGhpcy5fc2NoZW1lRGF0YSs9byh5KSk7YnJlYWs7Y2FzZSJubyBzY2hlbWUiOmlmKHMmJnQocy5fc2NoZW1lKSl7bD0icmVsYXRpdmUiO2NvbnRpbnVlfWMoIk1pc3Npbmcgc2NoZW1lLiIpLG4uY2FsbCh0aGlzKTticmVhaztjYXNlInJlbGF0aXZlIG9yIGF1dGhvcml0eSI6aWYoIi8iIT15fHwiLyIhPWVbdSsxXSl7YygiRXhwZWN0ZWQgLywgZ290OiAiK3kpLGw9InJlbGF0aXZlIjtjb250aW51ZX1sPSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiO2JyZWFrO2Nhc2UicmVsYXRpdmUiOmlmKHRoaXMuX2lzUmVsYXRpdmU9ITAsImZpbGUiIT10aGlzLl9zY2hlbWUmJih0aGlzLl9zY2hlbWU9cy5fc2NoZW1lKSxmPT15KXt0aGlzLl9ob3N0PXMuX2hvc3QsdGhpcy5fcG9ydD1zLl9wb3J0LHRoaXMuX3BhdGg9cy5fcGF0aC5zbGljZSgpLHRoaXMuX3F1ZXJ5PXMuX3F1ZXJ5LHRoaXMuX3VzZXJuYW1lPXMuX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPXMuX3Bhc3N3b3JkO2JyZWFrIGV9aWYoIi8iPT15fHwiXFwiPT15KSJcXCI9PXkmJmMoIlxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4iKSxsPSJyZWxhdGl2ZSBzbGFzaCI7ZWxzZSBpZigiPyI9PXkpdGhpcy5faG9zdD1zLl9ob3N0LHRoaXMuX3BvcnQ9cy5fcG9ydCx0aGlzLl9wYXRoPXMuX3BhdGguc2xpY2UoKSx0aGlzLl9xdWVyeT0iPyIsdGhpcy5fdXNlcm5hbWU9cy5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9cy5fcGFzc3dvcmQsbD0icXVlcnkiO2Vsc2V7aWYoIiMiIT15KXt2YXIgRT1lW3UrMV0sXz1lW3UrMl07KCJmaWxlIiE9dGhpcy5fc2NoZW1lfHwhbS50ZXN0KHkpfHwiOiIhPUUmJiJ8IiE9RXx8ZiE9XyYmIi8iIT1fJiYiXFwiIT1fJiYiPyIhPV8mJiIjIiE9XykmJih0aGlzLl9ob3N0PXMuX2hvc3QsdGhpcy5fcG9ydD1zLl9wb3J0LHRoaXMuX3VzZXJuYW1lPXMuX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPXMuX3Bhc3N3b3JkLHRoaXMuX3BhdGg9cy5fcGF0aC5zbGljZSgpLHRoaXMuX3BhdGgucG9wKCkpLGw9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfXRoaXMuX2hvc3Q9cy5faG9zdCx0aGlzLl9wb3J0PXMuX3BvcnQsdGhpcy5fcGF0aD1zLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9cy5fcXVlcnksdGhpcy5fZnJhZ21lbnQ9IiMiLHRoaXMuX3VzZXJuYW1lPXMuX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPXMuX3Bhc3N3b3JkLGw9ImZyYWdtZW50In1icmVhaztjYXNlInJlbGF0aXZlIHNsYXNoIjppZigiLyIhPXkmJiJcXCIhPXkpeyJmaWxlIiE9dGhpcy5fc2NoZW1lJiYodGhpcy5faG9zdD1zLl9ob3N0LHRoaXMuX3BvcnQ9cy5fcG9ydCx0aGlzLl91c2VybmFtZT1zLl91c2VybmFtZSx0aGlzLl9wYXNzd29yZD1zLl9wYXNzd29yZCksbD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9IlxcIj09eSYmYygiXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LiIpLGw9ImZpbGUiPT10aGlzLl9zY2hlbWU/ImZpbGUgaG9zdCI6ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyI7YnJlYWs7Y2FzZSJhdXRob3JpdHkgZmlyc3Qgc2xhc2giOmlmKCIvIiE9eSl7YygiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIreSksbD0iYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjtjb250aW51ZX1sPSJhdXRob3JpdHkgc2Vjb25kIHNsYXNoIjticmVhaztjYXNlImF1dGhvcml0eSBzZWNvbmQgc2xhc2giOmlmKGw9ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyIsIi8iIT15KXtjKCJFeHBlY3RlZCAnLycsIGdvdDogIit5KTtjb250aW51ZX1icmVhaztjYXNlImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyI6aWYoIi8iIT15JiYiXFwiIT15KXtsPSJhdXRob3JpdHkiO2NvbnRpbnVlfWMoIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiAiK3kpO2JyZWFrO2Nhc2UiYXV0aG9yaXR5IjppZigiQCI9PXkpe3YmJihjKCJAIGFscmVhZHkgc2Vlbi4iKSxkKz0iJTQwIiksdj0hMDtmb3IodmFyIFM9MDtTPGQubGVuZ3RoO1MrKyl7dmFyIFQ9ZFtTXTtpZigiXHQiIT1UJiYiXG4iIT1UJiYiXHIiIT1UKWlmKCI6IiE9VHx8bnVsbCE9PXRoaXMuX3Bhc3N3b3JkKXt2YXIgTT1vKFQpO251bGwhPT10aGlzLl9wYXNzd29yZD90aGlzLl9wYXNzd29yZCs9TTp0aGlzLl91c2VybmFtZSs9TX1lbHNlIHRoaXMuX3Bhc3N3b3JkPSIiO2Vsc2UgYygiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGF1dGhvcml0eS4iKX1kPSIifWVsc2V7aWYoZj09eXx8Ii8iPT15fHwiXFwiPT15fHwiPyI9PXl8fCIjIj09eSl7dS09ZC5sZW5ndGgsZD0iIixsPSJob3N0Ijtjb250aW51ZX1kKz15fWJyZWFrO2Nhc2UiZmlsZSBob3N0IjppZihmPT15fHwiLyI9PXl8fCJcXCI9PXl8fCI/Ij09eXx8IiMiPT15KXsyIT1kLmxlbmd0aHx8IW0udGVzdChkWzBdKXx8IjoiIT1kWzFdJiYifCIhPWRbMV0/MD09ZC5sZW5ndGg/bD0icmVsYXRpdmUgcGF0aCBzdGFydCI6KHRoaXMuX2hvc3Q9ci5jYWxsKHRoaXMsZCksZD0iIixsPSJyZWxhdGl2ZSBwYXRoIHN0YXJ0Iik6bD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9Ilx0Ij09eXx8IlxuIj09eXx8IlxyIj09eT9jKCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gZmlsZSBob3N0LiIpOmQrPXk7YnJlYWs7Y2FzZSJob3N0IjpjYXNlImhvc3RuYW1lIjppZigiOiIhPXl8fGcpe2lmKGY9PXl8fCIvIj09eXx8IlxcIj09eXx8Ij8iPT15fHwiIyI9PXkpe2lmKHRoaXMuX2hvc3Q9ci5jYWxsKHRoaXMsZCksZD0iIixsPSJyZWxhdGl2ZSBwYXRoIHN0YXJ0IixhKWJyZWFrIGU7Y29udGludWV9Ilx0IiE9eSYmIlxuIiE9eSYmIlxyIiE9eT8oIlsiPT15P2c9ITA6Il0iPT15JiYoZz0hMSksZCs9eSk6YygiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6ICIreSl9ZWxzZSBpZih0aGlzLl9ob3N0PXIuY2FsbCh0aGlzLGQpLGQ9IiIsbD0icG9ydCIsImhvc3RuYW1lIj09YSlicmVhayBlO2JyZWFrO2Nhc2UicG9ydCI6aWYoL1swLTldLy50ZXN0KHkpKWQrPXk7ZWxzZXtpZihmPT15fHwiLyI9PXl8fCJcXCI9PXl8fCI/Ij09eXx8IiMiPT15fHxhKXtpZigiIiE9ZCl7dmFyIE89cGFyc2VJbnQoZCwxMCk7TyE9cFt0aGlzLl9zY2hlbWVdJiYodGhpcy5fcG9ydD1PKyIiKSxkPSIifWlmKGEpYnJlYWsgZTtsPSJyZWxhdGl2ZSBwYXRoIHN0YXJ0Ijtjb250aW51ZX0iXHQiPT15fHwiXG4iPT15fHwiXHIiPT15P2MoIkludmFsaWQgY29kZSBwb2ludCBpbiBwb3J0OiAiK3kpOm4uY2FsbCh0aGlzKX1icmVhaztjYXNlInJlbGF0aXZlIHBhdGggc3RhcnQiOmlmKCJcXCI9PXkmJmMoIidcXCcgbm90IGFsbG93ZWQgaW4gcGF0aC4iKSxsPSJyZWxhdGl2ZSBwYXRoIiwiLyIhPXkmJiJcXCIhPXkpY29udGludWU7YnJlYWs7Y2FzZSJyZWxhdGl2ZSBwYXRoIjppZihmIT15JiYiLyIhPXkmJiJcXCIhPXkmJihhfHwiPyIhPXkmJiIjIiE9eSkpIlx0IiE9eSYmIlxuIiE9eSYmIlxyIiE9eSYmKGQrPW8oeSkpO2Vsc2V7IlxcIj09eSYmYygiXFwgbm90IGFsbG93ZWQgaW4gcmVsYXRpdmUgcGF0aC4iKTt2YXIgTDsoTD1oW2QudG9Mb3dlckNhc2UoKV0pJiYoZD1MKSwiLi4iPT1kPyh0aGlzLl9wYXRoLnBvcCgpLCIvIiE9eSYmIlxcIiE9eSYmdGhpcy5fcGF0aC5wdXNoKCIiKSk6Ii4iPT1kJiYiLyIhPXkmJiJcXCIhPXk/dGhpcy5fcGF0aC5wdXNoKCIiKToiLiIhPWQmJigiZmlsZSI9PXRoaXMuX3NjaGVtZSYmMD09dGhpcy5fcGF0aC5sZW5ndGgmJjI9PWQubGVuZ3RoJiZtLnRlc3QoZFswXSkmJiJ8Ij09ZFsxXSYmKGQ9ZFswXSsiOiIpLHRoaXMuX3BhdGgucHVzaChkKSksZD0iIiwiPyI9PXk/KHRoaXMuX3F1ZXJ5PSI/IixsPSJxdWVyeSIpOiIjIj09eSYmKHRoaXMuX2ZyYWdtZW50PSIjIixsPSJmcmFnbWVudCIpfWJyZWFrO2Nhc2UicXVlcnkiOmF8fCIjIiE9eT9mIT15JiYiXHQiIT15JiYiXG4iIT15JiYiXHIiIT15JiYodGhpcy5fcXVlcnkrPWkoeSkpOih0aGlzLl9mcmFnbWVudD0iIyIsbD0iZnJhZ21lbnQiKTticmVhaztjYXNlImZyYWdtZW50IjpmIT15JiYiXHQiIT15JiYiXG4iIT15JiYiXHIiIT15JiYodGhpcy5fZnJhZ21lbnQrPXkpfXUrK319ZnVuY3Rpb24gcygpe3RoaXMuX3NjaGVtZT0iIix0aGlzLl9zY2hlbWVEYXRhPSIiLHRoaXMuX3VzZXJuYW1lPSIiLHRoaXMuX3Bhc3N3b3JkPW51bGwsdGhpcy5faG9zdD0iIix0aGlzLl9wb3J0PSIiLHRoaXMuX3BhdGg9W10sdGhpcy5fcXVlcnk9IiIsdGhpcy5fZnJhZ21lbnQ9IiIsdGhpcy5faXNJbnZhbGlkPSExLHRoaXMuX2lzUmVsYXRpdmU9ITF9ZnVuY3Rpb24gYyhlLHQpe3ZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBjfHwodD1uZXcgYyhTdHJpbmcodCkpKSx0aGlzLl91cmw9ZSxzLmNhbGwodGhpcyk7dmFyIG49ZS5yZXBsYWNlKC9eWyBcdFxyXG5cZl0rfFsgXHRcclxuXGZdKyQvZywiIik7YS5jYWxsKHRoaXMsbixudWxsLHQpfXZhciBsPSExO2lmKCFlLmZvcmNlSlVSTCl0cnl7dmFyIHU9bmV3IFVSTCgiYiIsImh0dHA6Ly9hIik7dS5wYXRobmFtZT0iYyUyMGQiLGw9Imh0dHA6Ly9hL2MlMjBkIj09PXUuaHJlZn1jYXRjaChkKXt9aWYoIWwpe3ZhciBwPU9iamVjdC5jcmVhdGUobnVsbCk7cC5mdHA9MjEscC5maWxlPTAscC5nb3BoZXI9NzAscC5odHRwPTgwLHAuaHR0cHM9NDQzLHAud3M9ODAscC53c3M9NDQzO3ZhciBoPU9iamVjdC5jcmVhdGUobnVsbCk7aFsiJTJlIl09Ii4iLGhbIi4lMmUiXT0iLi4iLGhbIiUyZS4iXT0iLi4iLGhbIiUyZSUyZSJdPSIuLiI7dmFyIGY9dm9pZCAwLG09L1thLXpBLVpdLyx3PS9bYS16QS1aMC05XCtcLVwuXS87Yy5wcm90b3R5cGU9e3RvU3RyaW5nOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuaHJlZn0sZ2V0IGhyZWYoKXtpZih0aGlzLl9pc0ludmFsaWQpcmV0dXJuIHRoaXMuX3VybDt2YXIgZT0iIjtyZXR1cm4iIj09dGhpcy5fdXNlcm5hbWUmJm51bGw9PXRoaXMuX3Bhc3N3b3JkfHwoZT10aGlzLl91c2VybmFtZSsobnVsbCE9dGhpcy5fcGFzc3dvcmQ/IjoiK3RoaXMuX3Bhc3N3b3JkOiIiKSsiQCIpLHRoaXMucHJvdG9jb2wrKHRoaXMuX2lzUmVsYXRpdmU/Ii8vIitlK3RoaXMuaG9zdDoiIikrdGhpcy5wYXRobmFtZSt0aGlzLl9xdWVyeSt0aGlzLl9mcmFnbWVudH0sc2V0IGhyZWYoZSl7cy5jYWxsKHRoaXMpLGEuY2FsbCh0aGlzLGUpfSxnZXQgcHJvdG9jb2woKXtyZXR1cm4gdGhpcy5fc2NoZW1lKyI6In0sc2V0IHByb3RvY29sKGUpe3RoaXMuX2lzSW52YWxpZHx8YS5jYWxsKHRoaXMsZSsiOiIsInNjaGVtZSBzdGFydCIpfSxnZXQgaG9zdCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWQ/IiI6dGhpcy5fcG9ydD90aGlzLl9ob3N0KyI6Iit0aGlzLl9wb3J0OnRoaXMuX2hvc3R9LHNldCBob3N0KGUpeyF0aGlzLl9pc0ludmFsaWQmJnRoaXMuX2lzUmVsYXRpdmUmJmEuY2FsbCh0aGlzLGUsImhvc3QiKX0sZ2V0IGhvc3RuYW1lKCl7cmV0dXJuIHRoaXMuX2hvc3R9LHNldCBob3N0bmFtZShlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZhLmNhbGwodGhpcyxlLCJob3N0bmFtZSIpfSxnZXQgcG9ydCgpe3JldHVybiB0aGlzLl9wb3J0fSxzZXQgcG9ydChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZhLmNhbGwodGhpcyxlLCJwb3J0Iil9LGdldCBwYXRobmFtZSgpe3JldHVybiB0aGlzLl9pc0ludmFsaWQ/IiI6dGhpcy5faXNSZWxhdGl2ZT8iLyIrdGhpcy5fcGF0aC5qb2luKCIvIik6dGhpcy5fc2NoZW1lRGF0YX0sc2V0IHBhdGhuYW1lKGUpeyF0aGlzLl9pc0ludmFsaWQmJnRoaXMuX2lzUmVsYXRpdmUmJih0aGlzLl9wYXRoPVtdLGEuY2FsbCh0aGlzLGUsInJlbGF0aXZlIHBhdGggc3RhcnQiKSl9LGdldCBzZWFyY2goKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkfHwhdGhpcy5fcXVlcnl8fCI/Ij09dGhpcy5fcXVlcnk/IiI6dGhpcy5fcXVlcnl9LHNldCBzZWFyY2goZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmKHRoaXMuX3F1ZXJ5PSI/IiwiPyI9PWVbMF0mJihlPWUuc2xpY2UoMSkpLGEuY2FsbCh0aGlzLGUsInF1ZXJ5IikpfSxnZXQgaGFzaCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9mcmFnbWVudHx8IiMiPT10aGlzLl9mcmFnbWVudD8iIjp0aGlzLl9mcmFnbWVudH0sc2V0IGhhc2goZSl7dGhpcy5faXNJbnZhbGlkfHwodGhpcy5fZnJhZ21lbnQ9IiMiLCIjIj09ZVswXSYmKGU9ZS5zbGljZSgxKSksYS5jYWxsKHRoaXMsZSwiZnJhZ21lbnQiKSl9LGdldCBvcmlnaW4oKXt2YXIgZTtpZih0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9zY2hlbWUpcmV0dXJuIiI7c3dpdGNoKHRoaXMuX3NjaGVtZSl7Y2FzZSJkYXRhIjpjYXNlImZpbGUiOmNhc2UiamF2YXNjcmlwdCI6Y2FzZSJtYWlsdG8iOnJldHVybiJudWxsIn1yZXR1cm4gZT10aGlzLmhvc3QsZT90aGlzLl9zY2hlbWUrIjovLyIrZToiIn19O3ZhciB2PWUuVVJMO3YmJihjLmNyZWF0ZU9iamVjdFVSTD1mdW5jdGlvbihlKXtyZXR1cm4gdi5jcmVhdGVPYmplY3RVUkwuYXBwbHkodixhcmd1bWVudHMpfSxjLnJldm9rZU9iamVjdFVSTD1mdW5jdGlvbihlKXt2LnJldm9rZU9iamVjdFVSTChlKX0pLGUuVVJMPWN9fShzZWxmKSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3kucHVzaChlKSxifHwoYj0hMCxtKHIpKX1mdW5jdGlvbiBuKGUpe3JldHVybiB3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwmJndpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbC53cmFwSWZOZWVkZWQoZSl8fGV9ZnVuY3Rpb24gcigpe2I9ITE7dmFyIGU9eTt5PVtdLGUuc29ydChmdW5jdGlvbihlLHQpe3JldHVybiBlLnVpZF8tdC51aWRffSk7dmFyIHQ9ITE7ZS5mb3JFYWNoKGZ1bmN0aW9uKGUpe3ZhciBuPWUudGFrZVJlY29yZHMoKTtvKGUpLG4ubGVuZ3RoJiYoZS5jYWxsYmFja18obixlKSx0PSEwKX0pLHQmJnIoKX1mdW5jdGlvbiBvKGUpe2Uubm9kZXNfLmZvckVhY2goZnVuY3Rpb24odCl7dmFyIG49dy5nZXQodCk7biYmbi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3Qub2JzZXJ2ZXI9PT1lJiZ0LnJlbW92ZVRyYW5zaWVudE9ic2VydmVycygpfSl9KX1mdW5jdGlvbiBpKGUsdCl7Zm9yKHZhciBuPWU7bjtuPW4ucGFyZW50Tm9kZSl7dmFyIHI9dy5nZXQobik7aWYocilmb3IodmFyIG89MDtvPHIubGVuZ3RoO28rKyl7dmFyIGk9cltvXSxhPWkub3B0aW9ucztpZihuPT09ZXx8YS5zdWJ0cmVlKXt2YXIgcz10KGEpO3MmJmkuZW5xdWV1ZShzKX19fX1mdW5jdGlvbiBhKGUpe3RoaXMuY2FsbGJhY2tfPWUsdGhpcy5ub2Rlc189W10sdGhpcy5yZWNvcmRzXz1bXSx0aGlzLnVpZF89KytFfWZ1bmN0aW9uIHMoZSx0KXt0aGlzLnR5cGU9ZSx0aGlzLnRhcmdldD10LHRoaXMuYWRkZWROb2Rlcz1bXSx0aGlzLnJlbW92ZWROb2Rlcz1bXSx0aGlzLnByZXZpb3VzU2libGluZz1udWxsLHRoaXMubmV4dFNpYmxpbmc9bnVsbCx0aGlzLmF0dHJpYnV0ZU5hbWU9bnVsbCx0aGlzLmF0dHJpYnV0ZU5hbWVzcGFjZT1udWxsLHRoaXMub2xkVmFsdWU9bnVsbH1mdW5jdGlvbiBjKGUpe3ZhciB0PW5ldyBzKGUudHlwZSxlLnRhcmdldCk7cmV0dXJuIHQuYWRkZWROb2Rlcz1lLmFkZGVkTm9kZXMuc2xpY2UoKSx0LnJlbW92ZWROb2Rlcz1lLnJlbW92ZWROb2Rlcy5zbGljZSgpLHQucHJldmlvdXNTaWJsaW5nPWUucHJldmlvdXNTaWJsaW5nLHQubmV4dFNpYmxpbmc9ZS5uZXh0U2libGluZyx0LmF0dHJpYnV0ZU5hbWU9ZS5hdHRyaWJ1dGVOYW1lLHQuYXR0cmlidXRlTmFtZXNwYWNlPWUuYXR0cmlidXRlTmFtZXNwYWNlLHQub2xkVmFsdWU9ZS5vbGRWYWx1ZSx0fWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4gXz1uZXcgcyhlLHQpfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIFM/UzooUz1jKF8pLFMub2xkVmFsdWU9ZSxTKX1mdW5jdGlvbiBkKCl7Xz1TPXZvaWQgMH1mdW5jdGlvbiBwKGUpe3JldHVybiBlPT09U3x8ZT09PV99ZnVuY3Rpb24gaChlLHQpe3JldHVybiBlPT09dD9lOlMmJnAoZSk/UzpudWxsfWZ1bmN0aW9uIGYoZSx0LG4pe3RoaXMub2JzZXJ2ZXI9ZSx0aGlzLnRhcmdldD10LHRoaXMub3B0aW9ucz1uLHRoaXMudHJhbnNpZW50T2JzZXJ2ZWROb2Rlcz1bXX1pZighZS5Kc011dGF0aW9uT2JzZXJ2ZXIpe3ZhciBtLHc9bmV3IFdlYWtNYXA7aWYoL1RyaWRlbnR8RWRnZS8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSltPXNldFRpbWVvdXQ7ZWxzZSBpZih3aW5kb3cuc2V0SW1tZWRpYXRlKW09d2luZG93LnNldEltbWVkaWF0ZTtlbHNle3ZhciB2PVtdLGc9U3RyaW5nKE1hdGgucmFuZG9tKCkpO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbihlKXtpZihlLmRhdGE9PT1nKXt2YXIgdD12O3Y9W10sdC5mb3JFYWNoKGZ1bmN0aW9uKGUpe2UoKX0pfX0pLG09ZnVuY3Rpb24oZSl7di5wdXNoKGUpLHdpbmRvdy5wb3N0TWVzc2FnZShnLCIqIil9fXZhciBiPSExLHk9W10sRT0wO2EucHJvdG90eXBlPXtvYnNlcnZlOmZ1bmN0aW9uKGUsdCl7aWYoZT1uKGUpLCF0LmNoaWxkTGlzdCYmIXQuYXR0cmlidXRlcyYmIXQuY2hhcmFjdGVyRGF0YXx8dC5hdHRyaWJ1dGVPbGRWYWx1ZSYmIXQuYXR0cmlidXRlc3x8dC5hdHRyaWJ1dGVGaWx0ZXImJnQuYXR0cmlidXRlRmlsdGVyLmxlbmd0aCYmIXQuYXR0cmlidXRlc3x8dC5jaGFyYWN0ZXJEYXRhT2xkVmFsdWUmJiF0LmNoYXJhY3RlckRhdGEpdGhyb3cgbmV3IFN5bnRheEVycm9yO3ZhciByPXcuZ2V0KGUpO3J8fHcuc2V0KGUscj1bXSk7Zm9yKHZhciBvLGk9MDtpPHIubGVuZ3RoO2krKylpZihyW2ldLm9ic2VydmVyPT09dGhpcyl7bz1yW2ldLG8ucmVtb3ZlTGlzdGVuZXJzKCksby5vcHRpb25zPXQ7YnJlYWt9b3x8KG89bmV3IGYodGhpcyxlLHQpLHIucHVzaChvKSx0aGlzLm5vZGVzXy5wdXNoKGUpKSxvLmFkZExpc3RlbmVycygpfSxkaXNjb25uZWN0OmZ1bmN0aW9uKCl7dGhpcy5ub2Rlc18uZm9yRWFjaChmdW5jdGlvbihlKXtmb3IodmFyIHQ9dy5nZXQoZSksbj0wO248dC5sZW5ndGg7bisrKXt2YXIgcj10W25dO2lmKHIub2JzZXJ2ZXI9PT10aGlzKXtyLnJlbW92ZUxpc3RlbmVycygpLHQuc3BsaWNlKG4sMSk7YnJlYWt9fX0sdGhpcyksdGhpcy5yZWNvcmRzXz1bXX0sdGFrZVJlY29yZHM6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnJlY29yZHNfO3JldHVybiB0aGlzLnJlY29yZHNfPVtdLGV9fTt2YXIgXyxTO2YucHJvdG90eXBlPXtlbnF1ZXVlOmZ1bmN0aW9uKGUpe3ZhciBuPXRoaXMub2JzZXJ2ZXIucmVjb3Jkc18scj1uLmxlbmd0aDtpZihuLmxlbmd0aD4wKXt2YXIgbz1uW3ItMV0saT1oKG8sZSk7aWYoaSlyZXR1cm4gdm9pZChuW3ItMV09aSl9ZWxzZSB0KHRoaXMub2JzZXJ2ZXIpO25bcl09ZX0sYWRkTGlzdGVuZXJzOmZ1bmN0aW9uKCl7dGhpcy5hZGRMaXN0ZW5lcnNfKHRoaXMudGFyZ2V0KX0sYWRkTGlzdGVuZXJzXzpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wdGlvbnM7dC5hdHRyaWJ1dGVzJiZlLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUF0dHJNb2RpZmllZCIsdGhpcywhMCksdC5jaGFyYWN0ZXJEYXRhJiZlLmFkZEV2ZW50TGlzdGVuZXIoIkRPTUNoYXJhY3RlckRhdGFNb2RpZmllZCIsdGhpcywhMCksdC5jaGlsZExpc3QmJmUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZUluc2VydGVkIix0aGlzLCEwKSwodC5jaGlsZExpc3R8fHQuc3VidHJlZSkmJmUuYWRkRXZlbnRMaXN0ZW5lcigiRE9NTm9kZVJlbW92ZWQiLHRoaXMsITApfSxyZW1vdmVMaXN0ZW5lcnM6ZnVuY3Rpb24oKXt0aGlzLnJlbW92ZUxpc3RlbmVyc18odGhpcy50YXJnZXQpfSxyZW1vdmVMaXN0ZW5lcnNfOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub3B0aW9uczt0LmF0dHJpYnV0ZXMmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQXR0ck1vZGlmaWVkIix0aGlzLCEwKSx0LmNoYXJhY3RlckRhdGEmJmUucmVtb3ZlRXZlbnRMaXN0ZW5lcigiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIix0aGlzLCEwKSx0LmNoaWxkTGlzdCYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Ob2RlSW5zZXJ0ZWQiLHRoaXMsITApLCh0LmNoaWxkTGlzdHx8dC5zdWJ0cmVlKSYmZS5yZW1vdmVFdmVudExpc3RlbmVyKCJET01Ob2RlUmVtb3ZlZCIsdGhpcywhMCl9LGFkZFRyYW5zaWVudE9ic2VydmVyOmZ1bmN0aW9uKGUpe2lmKGUhPT10aGlzLnRhcmdldCl7dGhpcy5hZGRMaXN0ZW5lcnNfKGUpLHRoaXMudHJhbnNpZW50T2JzZXJ2ZWROb2Rlcy5wdXNoKGUpO3ZhciB0PXcuZ2V0KGUpO3R8fHcuc2V0KGUsdD1bXSksdC5wdXNoKHRoaXMpfX0scmVtb3ZlVHJhbnNpZW50T2JzZXJ2ZXJzOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50cmFuc2llbnRPYnNlcnZlZE5vZGVzO3RoaXMudHJhbnNpZW50T2JzZXJ2ZWROb2Rlcz1bXSxlLmZvckVhY2goZnVuY3Rpb24oZSl7dGhpcy5yZW1vdmVMaXN0ZW5lcnNfKGUpO2Zvcih2YXIgdD13LmdldChlKSxuPTA7bjx0Lmxlbmd0aDtuKyspaWYodFtuXT09PXRoaXMpe3Quc3BsaWNlKG4sMSk7YnJlYWt9fSx0aGlzKX0saGFuZGxlRXZlbnQ6ZnVuY3Rpb24oZSl7c3dpdGNoKGUuc3RvcEltbWVkaWF0ZVByb3BhZ2F0aW9uKCksZS50eXBlKXtjYXNlIkRPTUF0dHJNb2RpZmllZCI6dmFyIHQ9ZS5hdHRyTmFtZSxuPWUucmVsYXRlZE5vZGUubmFtZXNwYWNlVVJJLHI9ZS50YXJnZXQsbz1uZXcgbCgiYXR0cmlidXRlcyIscik7by5hdHRyaWJ1dGVOYW1lPXQsby5hdHRyaWJ1dGVOYW1lc3BhY2U9bjt2YXIgYT1lLmF0dHJDaGFuZ2U9PT1NdXRhdGlvbkV2ZW50LkFERElUSU9OP251bGw6ZS5wcmV2VmFsdWU7aShyLGZ1bmN0aW9uKGUpe2lmKGUuYXR0cmlidXRlcyYmKCFlLmF0dHJpYnV0ZUZpbHRlcnx8IWUuYXR0cmlidXRlRmlsdGVyLmxlbmd0aHx8ZS5hdHRyaWJ1dGVGaWx0ZXIuaW5kZXhPZih0KSE9PS0xfHxlLmF0dHJpYnV0ZUZpbHRlci5pbmRleE9mKG4pIT09LTEpKXJldHVybiBlLmF0dHJpYnV0ZU9sZFZhbHVlP3UoYSk6b30pO2JyZWFrO2Nhc2UiRE9NQ2hhcmFjdGVyRGF0YU1vZGlmaWVkIjp2YXIgcj1lLnRhcmdldCxvPWwoImNoYXJhY3RlckRhdGEiLHIpLGE9ZS5wcmV2VmFsdWU7aShyLGZ1bmN0aW9uKGUpe2lmKGUuY2hhcmFjdGVyRGF0YSlyZXR1cm4gZS5jaGFyYWN0ZXJEYXRhT2xkVmFsdWU/dShhKTpvfSk7YnJlYWs7Y2FzZSJET01Ob2RlUmVtb3ZlZCI6dGhpcy5hZGRUcmFuc2llbnRPYnNlcnZlcihlLnRhcmdldCk7Y2FzZSJET01Ob2RlSW5zZXJ0ZWQiOnZhciBzLGMscD1lLnRhcmdldDsiRE9NTm9kZUluc2VydGVkIj09PWUudHlwZT8ocz1bcF0sYz1bXSk6KHM9W10sYz1bcF0pO3ZhciBoPXAucHJldmlvdXNTaWJsaW5nLGY9cC5uZXh0U2libGluZyxvPWwoImNoaWxkTGlzdCIsZS50YXJnZXQucGFyZW50Tm9kZSk7by5hZGRlZE5vZGVzPXMsby5yZW1vdmVkTm9kZXM9YyxvLnByZXZpb3VzU2libGluZz1oLG8ubmV4dFNpYmxpbmc9ZixpKGUucmVsYXRlZE5vZGUsZnVuY3Rpb24oZSl7aWYoZS5jaGlsZExpc3QpcmV0dXJuIG99KX1kKCl9fSxlLkpzTXV0YXRpb25PYnNlcnZlcj1hLGUuTXV0YXRpb25PYnNlcnZlcnx8KGUuTXV0YXRpb25PYnNlcnZlcj1hLGEuX2lzUG9seWZpbGxlZD0hMCl9fShzZWxmKSxmdW5jdGlvbihlKXsidXNlIHN0cmljdCI7aWYoIXdpbmRvdy5wZXJmb3JtYW5jZXx8IXdpbmRvdy5wZXJmb3JtYW5jZS5ub3cpe3ZhciB0PURhdGUubm93KCk7d2luZG93LnBlcmZvcm1hbmNlPXtub3c6ZnVuY3Rpb24oKXtyZXR1cm4gRGF0ZS5ub3coKS10fX19d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZXx8KHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWU9ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cud2Via2l0UmVxdWVzdEFuaW1hdGlvbkZyYW1lfHx3aW5kb3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lO3JldHVybiBlP2Z1bmN0aW9uKHQpe3JldHVybiBlKGZ1bmN0aW9uKCl7dChwZXJmb3JtYW5jZS5ub3coKSl9KX06ZnVuY3Rpb24oZSl7cmV0dXJuIHdpbmRvdy5zZXRUaW1lb3V0KGUsMWUzLzYwKX19KCkpLHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZXx8KHdpbmRvdy5jYW5jZWxBbmltYXRpb25GcmFtZT1mdW5jdGlvbigpe3JldHVybiB3aW5kb3cud2Via2l0Q2FuY2VsQW5pbWF0aW9uRnJhbWV8fHdpbmRvdy5tb3pDYW5jZWxBbmltYXRpb25GcmFtZXx8ZnVuY3Rpb24oZSl7Y2xlYXJUaW1lb3V0KGUpfX0oKSk7dmFyIG49ZnVuY3Rpb24oKXt2YXIgZT1kb2N1bWVudC5jcmVhdGVFdmVudCgiRXZlbnQiKTtyZXR1cm4gZS5pbml0RXZlbnQoImZvbyIsITAsITApLGUucHJldmVudERlZmF1bHQoKSxlLmRlZmF1bHRQcmV2ZW50ZWR9KCk7aWYoIW4pe3ZhciByPUV2ZW50LnByb3RvdHlwZS5wcmV2ZW50RGVmYXVsdDtFdmVudC5wcm90b3R5cGUucHJldmVudERlZmF1bHQ9ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbGFibGUmJihyLmNhbGwodGhpcyksT2JqZWN0LmRlZmluZVByb3BlcnR5KHRoaXMsImRlZmF1bHRQcmV2ZW50ZWQiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMH0sY29uZmlndXJhYmxlOiEwfSkpfX12YXIgbz0vVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtpZigoIXdpbmRvdy5DdXN0b21FdmVudHx8byYmImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5DdXN0b21FdmVudCkmJih3aW5kb3cuQ3VzdG9tRXZlbnQ9ZnVuY3Rpb24oZSx0KXt0PXR8fHt9O3ZhciBuPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO3JldHVybiBuLmluaXRDdXN0b21FdmVudChlLEJvb2xlYW4odC5idWJibGVzKSxCb29sZWFuKHQuY2FuY2VsYWJsZSksdC5kZXRhaWwpLG59LHdpbmRvdy5DdXN0b21FdmVudC5wcm90b3R5cGU9d2luZG93LkV2ZW50LnByb3RvdHlwZSksIXdpbmRvdy5FdmVudHx8byYmImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5FdmVudCl7dmFyIGk9d2luZG93LkV2ZW50O3dpbmRvdy5FdmVudD1mdW5jdGlvbihlLHQpe3Q9dHx8e307dmFyIG49ZG9jdW1lbnQuY3JlYXRlRXZlbnQoIkV2ZW50Iik7cmV0dXJuIG4uaW5pdEV2ZW50KGUsQm9vbGVhbih0LmJ1YmJsZXMpLEJvb2xlYW4odC5jYW5jZWxhYmxlKSksbn0sd2luZG93LkV2ZW50LnByb3RvdHlwZT1pLnByb3RvdHlwZX19KHdpbmRvdy5XZWJDb21wb25lbnRzKSx3aW5kb3cuSFRNTEltcG9ydHM9d2luZG93LkhUTUxJbXBvcnRzfHx7ZmxhZ3M6e319LGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXt0PXR8fGYscihmdW5jdGlvbigpe2koZSx0KX0sdCl9ZnVuY3Rpb24gbihlKXtyZXR1cm4iY29tcGxldGUiPT09ZS5yZWFkeVN0YXRlfHxlLnJlYWR5U3RhdGU9PT12fWZ1bmN0aW9uIHIoZSx0KXtpZihuKHQpKWUmJmUoKTtlbHNle3ZhciBvPWZ1bmN0aW9uKCl7ImNvbXBsZXRlIiE9PXQucmVhZHlTdGF0ZSYmdC5yZWFkeVN0YXRlIT09dnx8KHQucmVtb3ZlRXZlbnRMaXN0ZW5lcihnLG8pLHIoZSx0KSl9O3QuYWRkRXZlbnRMaXN0ZW5lcihnLG8pfX1mdW5jdGlvbiBvKGUpe2UudGFyZ2V0Ll9fbG9hZGVkPSEwfWZ1bmN0aW9uIGkoZSx0KXtmdW5jdGlvbiBuKCl7Yz09bCYmZSYmZSh7YWxsSW1wb3J0czpzLGxvYWRlZEltcG9ydHM6dSxlcnJvckltcG9ydHM6ZH0pfWZ1bmN0aW9uIHIoZSl7byhlKSx1LnB1c2godGhpcyksYysrLG4oKX1mdW5jdGlvbiBpKGUpewpkLnB1c2godGhpcyksYysrLG4oKX12YXIgcz10LnF1ZXJ5U2VsZWN0b3JBbGwoImxpbmtbcmVsPWltcG9ydF0iKSxjPTAsbD1zLmxlbmd0aCx1PVtdLGQ9W107aWYobClmb3IodmFyIHAsaD0wO2g8bCYmKHA9c1toXSk7aCsrKWEocCk/KHUucHVzaCh0aGlzKSxjKyssbigpKToocC5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixyKSxwLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixpKSk7ZWxzZSBuKCl9ZnVuY3Rpb24gYShlKXtyZXR1cm4gZD9lLl9fbG9hZGVkfHxlWyJpbXBvcnQiXSYmImxvYWRpbmciIT09ZVsiaW1wb3J0Il0ucmVhZHlTdGF0ZTplLl9faW1wb3J0UGFyc2VkfWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0LG49MCxyPWUubGVuZ3RoO248ciYmKHQ9ZVtuXSk7bisrKWModCkmJmwodCl9ZnVuY3Rpb24gYyhlKXtyZXR1cm4ibGluayI9PT1lLmxvY2FsTmFtZSYmImltcG9ydCI9PT1lLnJlbH1mdW5jdGlvbiBsKGUpe3ZhciB0PWVbImltcG9ydCJdO3Q/byh7dGFyZ2V0OmV9KTooZS5hZGRFdmVudExpc3RlbmVyKCJsb2FkIixvKSxlLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIixvKSl9dmFyIHU9ImltcG9ydCIsZD1Cb29sZWFuKHUgaW4gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgibGluayIpKSxwPUJvb2xlYW4od2luZG93LlNoYWRvd0RPTVBvbHlmaWxsKSxoPWZ1bmN0aW9uKGUpe3JldHVybiBwP3dpbmRvdy5TaGFkb3dET01Qb2x5ZmlsbC53cmFwSWZOZWVkZWQoZSk6ZX0sZj1oKGRvY3VtZW50KSxtPXtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT13aW5kb3cuSFRNTEltcG9ydHMuY3VycmVudFNjcmlwdHx8ZG9jdW1lbnQuY3VycmVudFNjcmlwdHx8KCJjb21wbGV0ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlP2RvY3VtZW50LnNjcmlwdHNbZG9jdW1lbnQuc2NyaXB0cy5sZW5ndGgtMV06bnVsbCk7cmV0dXJuIGgoZSl9LGNvbmZpZ3VyYWJsZTohMH07T2JqZWN0LmRlZmluZVByb3BlcnR5KGRvY3VtZW50LCJfY3VycmVudFNjcmlwdCIsbSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGYsIl9jdXJyZW50U2NyaXB0IixtKTt2YXIgdz0vVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx2PXc/ImNvbXBsZXRlIjoiaW50ZXJhY3RpdmUiLGc9InJlYWR5c3RhdGVjaGFuZ2UiO2QmJihuZXcgTXV0YXRpb25PYnNlcnZlcihmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyJiYodD1lW25dKTtuKyspdC5hZGRlZE5vZGVzJiZzKHQuYWRkZWROb2Rlcyl9KS5vYnNlcnZlKGRvY3VtZW50LmhlYWQse2NoaWxkTGlzdDohMH0pLGZ1bmN0aW9uKCl7aWYoImxvYWRpbmciPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSlmb3IodmFyIGUsdD1kb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCJsaW5rW3JlbD1pbXBvcnRdIiksbj0wLHI9dC5sZW5ndGg7bjxyJiYoZT10W25dKTtuKyspbChlKX0oKSksdChmdW5jdGlvbihlKXt3aW5kb3cuSFRNTEltcG9ydHMucmVhZHk9ITAsd2luZG93LkhUTUxJbXBvcnRzLnJlYWR5VGltZT0obmV3IERhdGUpLmdldFRpbWUoKTt2YXIgdD1mLmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO3QuaW5pdEN1c3RvbUV2ZW50KCJIVE1MSW1wb3J0c0xvYWRlZCIsITAsITAsZSksZi5kaXNwYXRjaEV2ZW50KHQpfSksZS5JTVBPUlRfTElOS19UWVBFPXUsZS51c2VOYXRpdmU9ZCxlLnJvb3REb2N1bWVudD1mLGUud2hlblJlYWR5PXQsZS5pc0lFPXd9KHdpbmRvdy5IVE1MSW1wb3J0cyksZnVuY3Rpb24oZSl7dmFyIHQ9W10sbj1mdW5jdGlvbihlKXt0LnB1c2goZSl9LHI9ZnVuY3Rpb24oKXt0LmZvckVhY2goZnVuY3Rpb24odCl7dChlKX0pfTtlLmFkZE1vZHVsZT1uLGUuaW5pdGlhbGl6ZU1vZHVsZXM9cn0od2luZG93LkhUTUxJbXBvcnRzKSx3aW5kb3cuSFRNTEltcG9ydHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe3ZhciB0PS8odXJsXCgpKFteKV0qKShcKSkvZyxuPS8oQGltcG9ydFtcc10rKD8hdXJsXCgpKShbXjtdKikoOykvZyxyPXtyZXNvbHZlVXJsc0luU3R5bGU6ZnVuY3Rpb24oZSx0KXt2YXIgbj1lLm93bmVyRG9jdW1lbnQscj1uLmNyZWF0ZUVsZW1lbnQoImEiKTtyZXR1cm4gZS50ZXh0Q29udGVudD10aGlzLnJlc29sdmVVcmxzSW5Dc3NUZXh0KGUudGV4dENvbnRlbnQsdCxyKSxlfSxyZXNvbHZlVXJsc0luQ3NzVGV4dDpmdW5jdGlvbihlLHIsbyl7dmFyIGk9dGhpcy5yZXBsYWNlVXJscyhlLG8scix0KTtyZXR1cm4gaT10aGlzLnJlcGxhY2VVcmxzKGksbyxyLG4pfSxyZXBsYWNlVXJsczpmdW5jdGlvbihlLHQsbixyKXtyZXR1cm4gZS5yZXBsYWNlKHIsZnVuY3Rpb24oZSxyLG8saSl7dmFyIGE9by5yZXBsYWNlKC9bIiddL2csIiIpO3JldHVybiBuJiYoYT1uZXcgVVJMKGEsbikuaHJlZiksdC5ocmVmPWEsYT10LmhyZWYscisiJyIrYSsiJyIraX0pfX07ZS5wYXRoPXJ9KSx3aW5kb3cuSFRNTEltcG9ydHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe3ZhciB0PXthc3luYzohMCxvazpmdW5jdGlvbihlKXtyZXR1cm4gZS5zdGF0dXM+PTIwMCYmZS5zdGF0dXM8MzAwfHwzMDQ9PT1lLnN0YXR1c3x8MD09PWUuc3RhdHVzfSxsb2FkOmZ1bmN0aW9uKG4scixvKXt2YXIgaT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuKGUuZmxhZ3MuZGVidWd8fGUuZmxhZ3MuYnVzdCkmJihuKz0iPyIrTWF0aC5yYW5kb20oKSksaS5vcGVuKCJHRVQiLG4sdC5hc3luYyksaS5hZGRFdmVudExpc3RlbmVyKCJyZWFkeXN0YXRlY2hhbmdlIixmdW5jdGlvbihlKXtpZig0PT09aS5yZWFkeVN0YXRlKXt2YXIgbj1udWxsO3RyeXt2YXIgYT1pLmdldFJlc3BvbnNlSGVhZGVyKCJMb2NhdGlvbiIpO2EmJihuPSIvIj09PWEuc3Vic3RyKDAsMSk/bG9jYXRpb24ub3JpZ2luK2E6YSl9Y2F0Y2goZSl7Y29uc29sZS5lcnJvcihlLm1lc3NhZ2UpfXIuY2FsbChvLCF0Lm9rKGkpJiZpLGkucmVzcG9uc2V8fGkucmVzcG9uc2VUZXh0LG4pfX0pLGkuc2VuZCgpLGl9LGxvYWREb2N1bWVudDpmdW5jdGlvbihlLHQsbil7dGhpcy5sb2FkKGUsdCxuKS5yZXNwb25zZVR5cGU9ImRvY3VtZW50In19O2UueGhyPXR9KSx3aW5kb3cuSFRNTEltcG9ydHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe3ZhciB0PWUueGhyLG49ZS5mbGFncyxyPWZ1bmN0aW9uKGUsdCl7dGhpcy5jYWNoZT17fSx0aGlzLm9ubG9hZD1lLHRoaXMub25jb21wbGV0ZT10LHRoaXMuaW5mbGlnaHQ9MCx0aGlzLnBlbmRpbmc9e319O3IucHJvdG90eXBlPXthZGROb2RlczpmdW5jdGlvbihlKXt0aGlzLmluZmxpZ2h0Kz1lLmxlbmd0aDtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyJiYodD1lW25dKTtuKyspdGhpcy5yZXF1aXJlKHQpO3RoaXMuY2hlY2tEb25lKCl9LGFkZE5vZGU6ZnVuY3Rpb24oZSl7dGhpcy5pbmZsaWdodCsrLHRoaXMucmVxdWlyZShlKSx0aGlzLmNoZWNrRG9uZSgpfSxyZXF1aXJlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuc3JjfHxlLmhyZWY7ZS5fX25vZGVVcmw9dCx0aGlzLmRlZHVwZSh0LGUpfHx0aGlzLmZldGNoKHQsZSl9LGRlZHVwZTpmdW5jdGlvbihlLHQpe2lmKHRoaXMucGVuZGluZ1tlXSlyZXR1cm4gdGhpcy5wZW5kaW5nW2VdLnB1c2godCksITA7cmV0dXJuIHRoaXMuY2FjaGVbZV0/KHRoaXMub25sb2FkKGUsdCx0aGlzLmNhY2hlW2VdKSx0aGlzLnRhaWwoKSwhMCk6KHRoaXMucGVuZGluZ1tlXT1bdF0sITEpfSxmZXRjaDpmdW5jdGlvbihlLHIpe2lmKG4ubG9hZCYmY29uc29sZS5sb2coImZldGNoIixlLHIpLGUpaWYoZS5tYXRjaCgvXmRhdGE6Lykpe3ZhciBvPWUuc3BsaXQoIiwiKSxpPW9bMF0sYT1vWzFdO2E9aS5pbmRleE9mKCI7YmFzZTY0Iik+LTE/YXRvYihhKTpkZWNvZGVVUklDb21wb25lbnQoYSksc2V0VGltZW91dChmdW5jdGlvbigpe3RoaXMucmVjZWl2ZShlLHIsbnVsbCxhKX0uYmluZCh0aGlzKSwwKX1lbHNle3ZhciBzPWZ1bmN0aW9uKHQsbixvKXt0aGlzLnJlY2VpdmUoZSxyLHQsbixvKX0uYmluZCh0aGlzKTt0LmxvYWQoZSxzKX1lbHNlIHNldFRpbWVvdXQoZnVuY3Rpb24oKXt0aGlzLnJlY2VpdmUoZSxyLHtlcnJvcjoiaHJlZiBtdXN0IGJlIHNwZWNpZmllZCJ9LG51bGwpfS5iaW5kKHRoaXMpLDApfSxyZWNlaXZlOmZ1bmN0aW9uKGUsdCxuLHIsbyl7dGhpcy5jYWNoZVtlXT1yO2Zvcih2YXIgaSxhPXRoaXMucGVuZGluZ1tlXSxzPTAsYz1hLmxlbmd0aDtzPGMmJihpPWFbc10pO3MrKyl0aGlzLm9ubG9hZChlLGkscixuLG8pLHRoaXMudGFpbCgpO3RoaXMucGVuZGluZ1tlXT1udWxsfSx0YWlsOmZ1bmN0aW9uKCl7LS10aGlzLmluZmxpZ2h0LHRoaXMuY2hlY2tEb25lKCl9LGNoZWNrRG9uZTpmdW5jdGlvbigpe3RoaXMuaW5mbGlnaHR8fHRoaXMub25jb21wbGV0ZSgpfX0sZS5Mb2FkZXI9cn0pLHdpbmRvdy5IVE1MSW1wb3J0cy5hZGRNb2R1bGUoZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7dGhpcy5hZGRDYWxsYmFjaz1lLHRoaXMubW89bmV3IE11dGF0aW9uT2JzZXJ2ZXIodGhpcy5oYW5kbGVyLmJpbmQodGhpcykpfTt0LnByb3RvdHlwZT17aGFuZGxlcjpmdW5jdGlvbihlKXtmb3IodmFyIHQsbj0wLHI9ZS5sZW5ndGg7bjxyJiYodD1lW25dKTtuKyspImNoaWxkTGlzdCI9PT10LnR5cGUmJnQuYWRkZWROb2Rlcy5sZW5ndGgmJnRoaXMuYWRkZWROb2Rlcyh0LmFkZGVkTm9kZXMpfSxhZGRlZE5vZGVzOmZ1bmN0aW9uKGUpe3RoaXMuYWRkQ2FsbGJhY2smJnRoaXMuYWRkQ2FsbGJhY2soZSk7Zm9yKHZhciB0LG49MCxyPWUubGVuZ3RoO248ciYmKHQ9ZVtuXSk7bisrKXQuY2hpbGRyZW4mJnQuY2hpbGRyZW4ubGVuZ3RoJiZ0aGlzLmFkZGVkTm9kZXModC5jaGlsZHJlbil9LG9ic2VydmU6ZnVuY3Rpb24oZSl7dGhpcy5tby5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSl9fSxlLk9ic2VydmVyPXR9KSx3aW5kb3cuSFRNTEltcG9ydHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuImxpbmsiPT09ZS5sb2NhbE5hbWUmJmUucmVsPT09dX1mdW5jdGlvbiBuKGUpe3ZhciB0PXIoZSk7cmV0dXJuImRhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsIitlbmNvZGVVUklDb21wb25lbnQodCl9ZnVuY3Rpb24gcihlKXtyZXR1cm4gZS50ZXh0Q29udGVudCtvKGUpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5vd25lckRvY3VtZW50O3QuX19pbXBvcnRlZFNjcmlwdHM9dC5fX2ltcG9ydGVkU2NyaXB0c3x8MDt2YXIgbj1lLm93bmVyRG9jdW1lbnQuYmFzZVVSSSxyPXQuX19pbXBvcnRlZFNjcmlwdHM/Ii0iK3QuX19pbXBvcnRlZFNjcmlwdHM6IiI7cmV0dXJuIHQuX19pbXBvcnRlZFNjcmlwdHMrKywiXG4vLyMgc291cmNlVVJMPSIrbityKyIuanNcbiJ9ZnVuY3Rpb24gaShlKXt2YXIgdD1lLm93bmVyRG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3R5bGUiKTtyZXR1cm4gdC50ZXh0Q29udGVudD1lLnRleHRDb250ZW50LGEucmVzb2x2ZVVybHNJblN0eWxlKHQpLHR9dmFyIGE9ZS5wYXRoLHM9ZS5yb290RG9jdW1lbnQsYz1lLmZsYWdzLGw9ZS5pc0lFLHU9ZS5JTVBPUlRfTElOS19UWVBFLGQ9ImxpbmtbcmVsPSIrdSsiXSIscD17ZG9jdW1lbnRTZWxlY3RvcnM6ZCxpbXBvcnRzU2VsZWN0b3JzOltkLCJsaW5rW3JlbD1zdHlsZXNoZWV0XTpub3QoW3R5cGVdKSIsInN0eWxlOm5vdChbdHlwZV0pIiwic2NyaXB0Om5vdChbdHlwZV0pIiwnc2NyaXB0W3R5cGU9ImFwcGxpY2F0aW9uL2phdmFzY3JpcHQiXScsJ3NjcmlwdFt0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiXSddLmpvaW4oIiwiKSxtYXA6e2xpbms6InBhcnNlTGluayIsc2NyaXB0OiJwYXJzZVNjcmlwdCIsc3R5bGU6InBhcnNlU3R5bGUifSxkeW5hbWljRWxlbWVudHM6W10scGFyc2VOZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5uZXh0VG9QYXJzZSgpO2UmJnRoaXMucGFyc2UoZSl9LHBhcnNlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNQYXJzZWQoZSkpcmV0dXJuIHZvaWQoYy5wYXJzZSYmY29uc29sZS5sb2coIlslc10gaXMgYWxyZWFkeSBwYXJzZWQiLGUubG9jYWxOYW1lKSk7dmFyIHQ9dGhpc1t0aGlzLm1hcFtlLmxvY2FsTmFtZV1dO3QmJih0aGlzLm1hcmtQYXJzaW5nKGUpLHQuY2FsbCh0aGlzLGUpKX0scGFyc2VEeW5hbWljOmZ1bmN0aW9uKGUsdCl7dGhpcy5keW5hbWljRWxlbWVudHMucHVzaChlKSx0fHx0aGlzLnBhcnNlTmV4dCgpfSxtYXJrUGFyc2luZzpmdW5jdGlvbihlKXtjLnBhcnNlJiZjb25zb2xlLmxvZygicGFyc2luZyIsZSksdGhpcy5wYXJzaW5nRWxlbWVudD1lfSxtYXJrUGFyc2luZ0NvbXBsZXRlOmZ1bmN0aW9uKGUpe2UuX19pbXBvcnRQYXJzZWQ9ITAsdGhpcy5tYXJrRHluYW1pY1BhcnNpbmdDb21wbGV0ZShlKSxlLl9faW1wb3J0RWxlbWVudCYmKGUuX19pbXBvcnRFbGVtZW50Ll9faW1wb3J0UGFyc2VkPSEwLHRoaXMubWFya0R5bmFtaWNQYXJzaW5nQ29tcGxldGUoZS5fX2ltcG9ydEVsZW1lbnQpKSx0aGlzLnBhcnNpbmdFbGVtZW50PW51bGwsYy5wYXJzZSYmY29uc29sZS5sb2coImNvbXBsZXRlZCIsZSl9LG1hcmtEeW5hbWljUGFyc2luZ0NvbXBsZXRlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZHluYW1pY0VsZW1lbnRzLmluZGV4T2YoZSk7dD49MCYmdGhpcy5keW5hbWljRWxlbWVudHMuc3BsaWNlKHQsMSl9LHBhcnNlSW1wb3J0OmZ1bmN0aW9uKGUpe2lmKGVbImltcG9ydCJdPWUuX19kb2Msd2luZG93LkhUTUxJbXBvcnRzLl9faW1wb3J0c1BhcnNpbmdIb29rJiZ3aW5kb3cuSFRNTEltcG9ydHMuX19pbXBvcnRzUGFyc2luZ0hvb2soZSksZVsiaW1wb3J0Il0mJihlWyJpbXBvcnQiXS5fX2ltcG9ydFBhcnNlZD0hMCksdGhpcy5tYXJrUGFyc2luZ0NvbXBsZXRlKGUpLGUuX19yZXNvdXJjZSYmIWUuX19lcnJvcj9lLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJsb2FkIix7YnViYmxlczohMX0pKTplLmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJlcnJvciIse2J1YmJsZXM6ITF9KSksZS5fX3BlbmRpbmcpZm9yKHZhciB0O2UuX19wZW5kaW5nLmxlbmd0aDspdD1lLl9fcGVuZGluZy5zaGlmdCgpLHQmJnQoe3RhcmdldDplfSk7dGhpcy5wYXJzZU5leHQoKX0scGFyc2VMaW5rOmZ1bmN0aW9uKGUpe3QoZSk/dGhpcy5wYXJzZUltcG9ydChlKTooZS5ocmVmPWUuaHJlZix0aGlzLnBhcnNlR2VuZXJpYyhlKSl9LHBhcnNlU3R5bGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZTtlPWkoZSksdC5fX2FwcGxpZWRFbGVtZW50PWUsZS5fX2ltcG9ydEVsZW1lbnQ9dCx0aGlzLnBhcnNlR2VuZXJpYyhlKX0scGFyc2VHZW5lcmljOmZ1bmN0aW9uKGUpe3RoaXMudHJhY2tFbGVtZW50KGUpLHRoaXMuYWRkRWxlbWVudFRvRG9jdW1lbnQoZSl9LHJvb3RJbXBvcnRGb3JFbGVtZW50OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lO3Qub3duZXJEb2N1bWVudC5fX2ltcG9ydExpbms7KXQ9dC5vd25lckRvY3VtZW50Ll9faW1wb3J0TGluaztyZXR1cm4gdH0sYWRkRWxlbWVudFRvRG9jdW1lbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5yb290SW1wb3J0Rm9yRWxlbWVudChlLl9faW1wb3J0RWxlbWVudHx8ZSk7dC5wYXJlbnROb2RlLmluc2VydEJlZm9yZShlLHQpfSx0cmFja0VsZW1lbnQ6ZnVuY3Rpb24oZSx0KXt2YXIgbj10aGlzLHI9ZnVuY3Rpb24obyl7ZS5yZW1vdmVFdmVudExpc3RlbmVyKCJsb2FkIixyKSxlLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIixyKSx0JiZ0KG8pLG4ubWFya1BhcnNpbmdDb21wbGV0ZShlKSxuLnBhcnNlTmV4dCgpfTtpZihlLmFkZEV2ZW50TGlzdGVuZXIoImxvYWQiLHIpLGUuYWRkRXZlbnRMaXN0ZW5lcigiZXJyb3IiLHIpLGwmJiJzdHlsZSI9PT1lLmxvY2FsTmFtZSl7dmFyIG89ITE7aWYoZS50ZXh0Q29udGVudC5pbmRleE9mKCJAaW1wb3J0Iik9PS0xKW89ITA7ZWxzZSBpZihlLnNoZWV0KXtvPSEwO2Zvcih2YXIgaSxhPWUuc2hlZXQuY3NzUnVsZXMscz1hP2EubGVuZ3RoOjAsYz0wO2M8cyYmKGk9YVtjXSk7YysrKWkudHlwZT09PUNTU1J1bGUuSU1QT1JUX1JVTEUmJihvPW8mJkJvb2xlYW4oaS5zdHlsZVNoZWV0KSl9byYmc2V0VGltZW91dChmdW5jdGlvbigpe2UuZGlzcGF0Y2hFdmVudChuZXcgQ3VzdG9tRXZlbnQoImxvYWQiLHtidWJibGVzOiExfSkpfSl9fSxwYXJzZVNjcmlwdDpmdW5jdGlvbih0KXt2YXIgcj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzY3JpcHQiKTtyLl9faW1wb3J0RWxlbWVudD10LHIuc3JjPXQuc3JjP3Quc3JjOm4odCksZS5jdXJyZW50U2NyaXB0PXQsdGhpcy50cmFja0VsZW1lbnQocixmdW5jdGlvbih0KXtyLnBhcmVudE5vZGUmJnIucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChyKSxlLmN1cnJlbnRTY3JpcHQ9bnVsbH0pLHRoaXMuYWRkRWxlbWVudFRvRG9jdW1lbnQocil9LG5leHRUb1BhcnNlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX21heVBhcnNlPVtdLCF0aGlzLnBhcnNpbmdFbGVtZW50JiYodGhpcy5uZXh0VG9QYXJzZUluRG9jKHMpfHx0aGlzLm5leHRUb1BhcnNlRHluYW1pYygpKX0sbmV4dFRvUGFyc2VJbkRvYzpmdW5jdGlvbihlLG4pe2lmKGUmJnRoaXMuX21heVBhcnNlLmluZGV4T2YoZSk8MCl7dGhpcy5fbWF5UGFyc2UucHVzaChlKTtmb3IodmFyIHIsbz1lLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5wYXJzZVNlbGVjdG9yc0Zvck5vZGUoZSkpLGk9MCxhPW8ubGVuZ3RoO2k8YSYmKHI9b1tpXSk7aSsrKWlmKCF0aGlzLmlzUGFyc2VkKHIpKXJldHVybiB0aGlzLmhhc1Jlc291cmNlKHIpP3Qocik/dGhpcy5uZXh0VG9QYXJzZUluRG9jKHIuX19kb2Mscik6cjp2b2lkIDB9cmV0dXJuIG59LG5leHRUb1BhcnNlRHluYW1pYzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmR5bmFtaWNFbGVtZW50c1swXX0scGFyc2VTZWxlY3RvcnNGb3JOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudHx8ZTtyZXR1cm4gdD09PXM/dGhpcy5kb2N1bWVudFNlbGVjdG9yczp0aGlzLmltcG9ydHNTZWxlY3RvcnN9LGlzUGFyc2VkOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9faW1wb3J0UGFyc2VkfSxuZWVkc0R5bmFtaWNQYXJzaW5nOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmR5bmFtaWNFbGVtZW50cy5pbmRleE9mKGUpPj0wfSxoYXNSZXNvdXJjZTpmdW5jdGlvbihlKXtyZXR1cm4hdChlKXx8dm9pZCAwIT09ZS5fX2RvY319O2UucGFyc2VyPXAsZS5JTVBPUlRfU0VMRUNUT1I9ZH0pLHdpbmRvdy5IVE1MSW1wb3J0cy5hZGRNb2R1bGUoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4gbihlLGEpfWZ1bmN0aW9uIG4oZSx0KXtyZXR1cm4ibGluayI9PT1lLmxvY2FsTmFtZSYmZS5nZXRBdHRyaWJ1dGUoInJlbCIpPT09dH1mdW5jdGlvbiByKGUpe3JldHVybiEhT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLCJiYXNlVVJJIil9ZnVuY3Rpb24gbyhlLHQpe3ZhciBuPWRvY3VtZW50LmltcGxlbWVudGF0aW9uLmNyZWF0ZUhUTUxEb2N1bWVudChhKTtuLl9VUkw9dDt2YXIgbz1uLmNyZWF0ZUVsZW1lbnQoImJhc2UiKTtvLnNldEF0dHJpYnV0ZSgiaHJlZiIsdCksbi5iYXNlVVJJfHxyKG4pfHxPYmplY3QuZGVmaW5lUHJvcGVydHkobiwiYmFzZVVSSSIse3ZhbHVlOnR9KTt2YXIgaT1uLmNyZWF0ZUVsZW1lbnQoIm1ldGEiKTtyZXR1cm4gaS5zZXRBdHRyaWJ1dGUoImNoYXJzZXQiLCJ1dGYtOCIpLG4uaGVhZC5hcHBlbmRDaGlsZChpKSxuLmhlYWQuYXBwZW5kQ2hpbGQobyksbi5ib2R5LmlubmVySFRNTD1lLHdpbmRvdy5IVE1MVGVtcGxhdGVFbGVtZW50JiZIVE1MVGVtcGxhdGVFbGVtZW50LmJvb3RzdHJhcCYmSFRNTFRlbXBsYXRlRWxlbWVudC5ib290c3RyYXAobiksbn12YXIgaT1lLmZsYWdzLGE9ZS5JTVBPUlRfTElOS19UWVBFLHM9ZS5JTVBPUlRfU0VMRUNUT1IsYz1lLnJvb3REb2N1bWVudCxsPWUuTG9hZGVyLHU9ZS5PYnNlcnZlcixkPWUucGFyc2VyLHA9e2RvY3VtZW50czp7fSxkb2N1bWVudFByZWxvYWRTZWxlY3RvcnM6cyxpbXBvcnRzUHJlbG9hZFNlbGVjdG9yczpbc10uam9pbigiLCIpLGxvYWROb2RlOmZ1bmN0aW9uKGUpe2guYWRkTm9kZShlKX0sbG9hZFN1YnRyZWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5tYXJzaGFsTm9kZXMoZSk7aC5hZGROb2Rlcyh0KX0sbWFyc2hhbE5vZGVzOmZ1bmN0aW9uKGUpe3JldHVybiBlLnF1ZXJ5U2VsZWN0b3JBbGwodGhpcy5sb2FkU2VsZWN0b3JzRm9yTm9kZShlKSl9LGxvYWRTZWxlY3RvcnNGb3JOb2RlOmZ1bmN0aW9uKGUpe3ZhciB0PWUub3duZXJEb2N1bWVudHx8ZTtyZXR1cm4gdD09PWM/dGhpcy5kb2N1bWVudFByZWxvYWRTZWxlY3RvcnM6dGhpcy5pbXBvcnRzUHJlbG9hZFNlbGVjdG9yc30sbG9hZGVkOmZ1bmN0aW9uKGUsbixyLGEscyl7aWYoaS5sb2FkJiZjb25zb2xlLmxvZygibG9hZGVkIixlLG4pLG4uX19yZXNvdXJjZT1yLG4uX19lcnJvcj1hLHQobikpe3ZhciBjPXRoaXMuZG9jdW1lbnRzW2VdO3ZvaWQgMD09PWMmJihjPWE/bnVsbDpvKHIsc3x8ZSksYyYmKGMuX19pbXBvcnRMaW5rPW4sdGhpcy5ib290RG9jdW1lbnQoYykpLHRoaXMuZG9jdW1lbnRzW2VdPWMpLG4uX19kb2M9Y31kLnBhcnNlTmV4dCgpfSxib290RG9jdW1lbnQ6ZnVuY3Rpb24oZSl7dGhpcy5sb2FkU3VidHJlZShlKSx0aGlzLm9ic2VydmVyLm9ic2VydmUoZSksZC5wYXJzZU5leHQoKX0sbG9hZGVkQWxsOmZ1bmN0aW9uKCl7ZC5wYXJzZU5leHQoKX19LGg9bmV3IGwocC5sb2FkZWQuYmluZChwKSxwLmxvYWRlZEFsbC5iaW5kKHApKTtpZihwLm9ic2VydmVyPW5ldyB1LCFkb2N1bWVudC5iYXNlVVJJKXt2YXIgZj17Z2V0OmZ1bmN0aW9uKCl7dmFyIGU9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiYmFzZSIpO3JldHVybiBlP2UuaHJlZjp3aW5kb3cubG9jYXRpb24uaHJlZn0sY29uZmlndXJhYmxlOiEwfTtPYmplY3QuZGVmaW5lUHJvcGVydHkoZG9jdW1lbnQsImJhc2VVUkkiLGYpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShjLCJiYXNlVVJJIixmKX1lLmltcG9ydGVyPXAsZS5pbXBvcnRMb2FkZXI9aH0pLHdpbmRvdy5IVE1MSW1wb3J0cy5hZGRNb2R1bGUoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wYXJzZXIsbj1lLmltcG9ydGVyLHI9e2FkZGVkOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcixvLGksYSxzPTAsYz1lLmxlbmd0aDtzPGMmJihhPWVbc10pO3MrKylyfHwocj1hLm93bmVyRG9jdW1lbnQsbz10LmlzUGFyc2VkKHIpKSxpPXRoaXMuc2hvdWxkTG9hZE5vZGUoYSksaSYmbi5sb2FkTm9kZShhKSx0aGlzLnNob3VsZFBhcnNlTm9kZShhKSYmbyYmdC5wYXJzZUR5bmFtaWMoYSxpKX0sc2hvdWxkTG9hZE5vZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIDE9PT1lLm5vZGVUeXBlJiZvLmNhbGwoZSxuLmxvYWRTZWxlY3RvcnNGb3JOb2RlKGUpKX0sc2hvdWxkUGFyc2VOb2RlOmZ1bmN0aW9uKGUpe3JldHVybiAxPT09ZS5ub2RlVHlwZSYmby5jYWxsKGUsdC5wYXJzZVNlbGVjdG9yc0Zvck5vZGUoZSkpfX07bi5vYnNlcnZlci5hZGRDYWxsYmFjaz1yLmFkZGVkLmJpbmQocik7dmFyIG89SFRNTEVsZW1lbnQucHJvdG90eXBlLm1hdGNoZXN8fEhUTUxFbGVtZW50LnByb3RvdHlwZS5tYXRjaGVzU2VsZWN0b3J8fEhUTUxFbGVtZW50LnByb3RvdHlwZS53ZWJraXRNYXRjaGVzU2VsZWN0b3J8fEhUTUxFbGVtZW50LnByb3RvdHlwZS5tb3pNYXRjaGVzU2VsZWN0b3J8fEhUTUxFbGVtZW50LnByb3RvdHlwZS5tc01hdGNoZXNTZWxlY3Rvcn0pLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt3aW5kb3cuSFRNTEltcG9ydHMuaW1wb3J0ZXIuYm9vdERvY3VtZW50KHIpfXZhciBuPWUuaW5pdGlhbGl6ZU1vZHVsZXM7ZS5pc0lFO2lmKCFlLnVzZU5hdGl2ZSl7bigpO3ZhciByPWUucm9vdERvY3VtZW50OyJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlfHwiaW50ZXJhY3RpdmUiPT09ZG9jdW1lbnQucmVhZHlTdGF0ZSYmIXdpbmRvdy5hdHRhY2hFdmVudD90KCk6ZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiRE9NQ29udGVudExvYWRlZCIsdCl9fSh3aW5kb3cuSFRNTEltcG9ydHMpLHdpbmRvdy5DdXN0b21FbGVtZW50cz13aW5kb3cuQ3VzdG9tRWxlbWVudHN8fHtmbGFnczp7fX0sZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mbGFncyxuPVtdLHI9ZnVuY3Rpb24oZSl7bi5wdXNoKGUpfSxvPWZ1bmN0aW9uKCl7bi5mb3JFYWNoKGZ1bmN0aW9uKHQpe3QoZSl9KX07ZS5hZGRNb2R1bGU9cixlLmluaXRpYWxpemVNb2R1bGVzPW8sZS5oYXNOYXRpdmU9Qm9vbGVhbihkb2N1bWVudC5yZWdpc3RlckVsZW1lbnQpLGUuaXNJRT0vVHJpZGVudC8udGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlLnVzZU5hdGl2ZT0hdC5yZWdpc3RlciYmZS5oYXNOYXRpdmUmJiF3aW5kb3cuU2hhZG93RE9NUG9seWZpbGwmJighd2luZG93LkhUTUxJbXBvcnRzfHx3aW5kb3cuSFRNTEltcG9ydHMudXNlTmF0aXZlKX0od2luZG93LkN1c3RvbUVsZW1lbnRzKSx3aW5kb3cuQ3VzdG9tRWxlbWVudHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSx0KXtuKGUsZnVuY3Rpb24oZSl7cmV0dXJuISF0KGUpfHx2b2lkIHIoZSx0KX0pLHIoZSx0KX1mdW5jdGlvbiBuKGUsdCxyKXt2YXIgbz1lLmZpcnN0RWxlbWVudENoaWxkO2lmKCFvKWZvcihvPWUuZmlyc3RDaGlsZDtvJiZvLm5vZGVUeXBlIT09Tm9kZS5FTEVNRU5UX05PREU7KW89by5uZXh0U2libGluZztmb3IoO287KXQobyxyKSE9PSEwJiZuKG8sdCxyKSxvPW8ubmV4dEVsZW1lbnRTaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIHIoZSxuKXtmb3IodmFyIHI9ZS5zaGFkb3dSb290O3I7KXQocixuKSxyPXIub2xkZXJTaGFkb3dSb290fWZ1bmN0aW9uIG8oZSx0KXtpKGUsdCxbXSl9ZnVuY3Rpb24gaShlLHQsbil7aWYoZT13aW5kb3cud3JhcChlKSwhKG4uaW5kZXhPZihlKT49MCkpe24ucHVzaChlKTtmb3IodmFyIHIsbz1lLnF1ZXJ5U2VsZWN0b3JBbGwoImxpbmtbcmVsPSIrYSsiXSIpLHM9MCxjPW8ubGVuZ3RoO3M8YyYmKHI9b1tzXSk7cysrKXJbImltcG9ydCJdJiZpKHJbImltcG9ydCJdLHQsbik7dChlKX19dmFyIGE9d2luZG93LkhUTUxJbXBvcnRzP3dpbmRvdy5IVE1MSW1wb3J0cy5JTVBPUlRfTElOS19UWVBFOiJub25lIjtlLmZvckRvY3VtZW50VHJlZT1vLGUuZm9yU3VidHJlZT10fSksd2luZG93LkN1c3RvbUVsZW1lbnRzLmFkZE1vZHVsZShmdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUsdCl7cmV0dXJuIG4oZSx0KXx8cihlLHQpfWZ1bmN0aW9uIG4odCxuKXtyZXR1cm4hIWUudXBncmFkZSh0LG4pfHx2b2lkKG4mJmEodCkpfWZ1bmN0aW9uIHIoZSx0KXtiKGUsZnVuY3Rpb24oZSl7aWYobihlLHQpKXJldHVybiEwfSl9ZnVuY3Rpb24gbyhlKXtTLnB1c2goZSksX3x8KF89ITAsc2V0VGltZW91dChpKSl9ZnVuY3Rpb24gaSgpe189ITE7Zm9yKHZhciBlLHQ9UyxuPTAscj10Lmxlbmd0aDtuPHImJihlPXRbbl0pO24rKyllKCk7Uz1bXX1mdW5jdGlvbiBhKGUpe0U/byhmdW5jdGlvbigpe3MoZSl9KTpzKGUpfWZ1bmN0aW9uIHMoZSl7ZS5fX3VwZ3JhZGVkX18mJiFlLl9fYXR0YWNoZWQmJihlLl9fYXR0YWNoZWQ9ITAsZS5hdHRhY2hlZENhbGxiYWNrJiZlLmF0dGFjaGVkQ2FsbGJhY2soKSl9ZnVuY3Rpb24gYyhlKXtsKGUpLGIoZSxmdW5jdGlvbihlKXtsKGUpfSl9ZnVuY3Rpb24gbChlKXtFP28oZnVuY3Rpb24oKXt1KGUpfSk6dShlKX1mdW5jdGlvbiB1KGUpe2UuX191cGdyYWRlZF9fJiZlLl9fYXR0YWNoZWQmJihlLl9fYXR0YWNoZWQ9ITEsZS5kZXRhY2hlZENhbGxiYWNrJiZlLmRldGFjaGVkQ2FsbGJhY2soKSl9ZnVuY3Rpb24gZChlKXtmb3IodmFyIHQ9ZSxuPXdpbmRvdy53cmFwKGRvY3VtZW50KTt0Oyl7aWYodD09bilyZXR1cm4hMDt0PXQucGFyZW50Tm9kZXx8dC5ub2RlVHlwZT09PU5vZGUuRE9DVU1FTlRfRlJBR01FTlRfTk9ERSYmdC5ob3N0fX1mdW5jdGlvbiBwKGUpe2lmKGUuc2hhZG93Um9vdCYmIWUuc2hhZG93Um9vdC5fX3dhdGNoZWQpe2cuZG9tJiZjb25zb2xlLmxvZygid2F0Y2hpbmcgc2hhZG93LXJvb3QgZm9yOiAiLGUubG9jYWxOYW1lKTtmb3IodmFyIHQ9ZS5zaGFkb3dSb290O3Q7KW0odCksdD10Lm9sZGVyU2hhZG93Um9vdH19ZnVuY3Rpb24gaChlLG4pe2lmKGcuZG9tKXt2YXIgcj1uWzBdO2lmKHImJiJjaGlsZExpc3QiPT09ci50eXBlJiZyLmFkZGVkTm9kZXMmJnIuYWRkZWROb2Rlcyl7Zm9yKHZhciBvPXIuYWRkZWROb2Rlc1swXTtvJiZvIT09ZG9jdW1lbnQmJiFvLmhvc3Q7KW89by5wYXJlbnROb2RlO3ZhciBpPW8mJihvLlVSTHx8by5fVVJMfHxvLmhvc3QmJm8uaG9zdC5sb2NhbE5hbWUpfHwiIjtpPWkuc3BsaXQoIi8/Iikuc2hpZnQoKS5zcGxpdCgiLyIpLnBvcCgpfWNvbnNvbGUuZ3JvdXAoIm11dGF0aW9ucyAoJWQpIFslc10iLG4ubGVuZ3RoLGl8fCIiKX12YXIgYT1kKGUpO24uZm9yRWFjaChmdW5jdGlvbihlKXsiY2hpbGRMaXN0Ij09PWUudHlwZSYmKFQoZS5hZGRlZE5vZGVzLGZ1bmN0aW9uKGUpe2UubG9jYWxOYW1lJiZ0KGUsYSl9KSxUKGUucmVtb3ZlZE5vZGVzLGZ1bmN0aW9uKGUpe2UubG9jYWxOYW1lJiZjKGUpfSkpfSksZy5kb20mJmNvbnNvbGUuZ3JvdXBFbmQoKX1mdW5jdGlvbiBmKGUpe2ZvcihlPXdpbmRvdy53cmFwKGUpLGV8fChlPXdpbmRvdy53cmFwKGRvY3VtZW50KSk7ZS5wYXJlbnROb2RlOyllPWUucGFyZW50Tm9kZTt2YXIgdD1lLl9fb2JzZXJ2ZXI7dCYmKGgoZSx0LnRha2VSZWNvcmRzKCkpLGkoKSl9ZnVuY3Rpb24gbShlKXtpZighZS5fX29ic2VydmVyKXt2YXIgdD1uZXcgTXV0YXRpb25PYnNlcnZlcihoLmJpbmQodGhpcyxlKSk7dC5vYnNlcnZlKGUse2NoaWxkTGlzdDohMCxzdWJ0cmVlOiEwfSksZS5fX29ic2VydmVyPXR9fWZ1bmN0aW9uIHcoZSl7ZT13aW5kb3cud3JhcChlKSxnLmRvbSYmY29uc29sZS5ncm91cCgidXBncmFkZURvY3VtZW50OiAiLGUuYmFzZVVSSS5zcGxpdCgiLyIpLnBvcCgpKTt2YXIgbj1lPT09d2luZG93LndyYXAoZG9jdW1lbnQpO3QoZSxuKSxtKGUpLGcuZG9tJiZjb25zb2xlLmdyb3VwRW5kKCl9ZnVuY3Rpb24gdihlKXt5KGUsdyl9dmFyIGc9ZS5mbGFncyxiPWUuZm9yU3VidHJlZSx5PWUuZm9yRG9jdW1lbnRUcmVlLEU9d2luZG93Lk11dGF0aW9uT2JzZXJ2ZXIuX2lzUG9seWZpbGxlZCYmZ1sidGhyb3R0bGUtYXR0YWNoZWQiXTtlLmhhc1BvbHlmaWxsTXV0YXRpb25zPUUsZS5oYXNUaHJvdHRsZWRBdHRhY2hlZD1FO3ZhciBfPSExLFM9W10sVD1BcnJheS5wcm90b3R5cGUuZm9yRWFjaC5jYWxsLmJpbmQoQXJyYXkucHJvdG90eXBlLmZvckVhY2gpLE09RWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU2hhZG93Um9vdDtNJiYoRWxlbWVudC5wcm90b3R5cGUuY3JlYXRlU2hhZG93Um9vdD1mdW5jdGlvbigpe3ZhciBlPU0uY2FsbCh0aGlzKTtyZXR1cm4gd2luZG93LkN1c3RvbUVsZW1lbnRzLndhdGNoU2hhZG93KHRoaXMpLGV9KSxlLndhdGNoU2hhZG93PXAsZS51cGdyYWRlRG9jdW1lbnRUcmVlPXYsZS51cGdyYWRlRG9jdW1lbnQ9dyxlLnVwZ3JhZGVTdWJ0cmVlPXIsZS51cGdyYWRlQWxsPXQsZS5hdHRhY2hlZD1hLGUudGFrZVJlY29yZHM9Zn0pLHdpbmRvdy5DdXN0b21FbGVtZW50cy5hZGRNb2R1bGUoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCh0LHIpe2lmKCJ0ZW1wbGF0ZSI9PT10LmxvY2FsTmFtZSYmd2luZG93LkhUTUxUZW1wbGF0ZUVsZW1lbnQmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUmJkhUTUxUZW1wbGF0ZUVsZW1lbnQuZGVjb3JhdGUodCksIXQuX191cGdyYWRlZF9fJiZ0Lm5vZGVUeXBlPT09Tm9kZS5FTEVNRU5UX05PREUpe3ZhciBvPXQuZ2V0QXR0cmlidXRlKCJpcyIpLGk9ZS5nZXRSZWdpc3RlcmVkRGVmaW5pdGlvbih0LmxvY2FsTmFtZSl8fGUuZ2V0UmVnaXN0ZXJlZERlZmluaXRpb24obyk7aWYoaSYmKG8mJmkudGFnPT10LmxvY2FsTmFtZXx8IW8mJiFpWyJleHRlbmRzIl0pKXJldHVybiBuKHQsaSxyKX19ZnVuY3Rpb24gbih0LG4sbyl7cmV0dXJuIGEudXBncmFkZSYmY29uc29sZS5ncm91cCgidXBncmFkZToiLHQubG9jYWxOYW1lKSxuLmlzJiZ0LnNldEF0dHJpYnV0ZSgiaXMiLG4uaXMpLHIodCxuKSx0Ll9fdXBncmFkZWRfXz0hMCxpKHQpLG8mJmUuYXR0YWNoZWQodCksZS51cGdyYWRlU3VidHJlZSh0LG8pLGEudXBncmFkZSYmY29uc29sZS5ncm91cEVuZCgpLHR9ZnVuY3Rpb24gcihlLHQpe09iamVjdC5fX3Byb3RvX18/ZS5fX3Byb3RvX189dC5wcm90b3R5cGU6KG8oZSx0LnByb3RvdHlwZSx0WyJuYXRpdmUiXSksZS5fX3Byb3RvX189dC5wcm90b3R5cGUpfWZ1bmN0aW9uIG8oZSx0LG4pe2Zvcih2YXIgcj17fSxvPXQ7byE9PW4mJm8hPT1IVE1MRWxlbWVudC5wcm90b3R5cGU7KXtmb3IodmFyIGksYT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhvKSxzPTA7aT1hW3NdO3MrKylyW2ldfHwoT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsaSxPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG8saSkpLHJbaV09MSk7bz1PYmplY3QuZ2V0UHJvdG90eXBlT2Yobyl9fWZ1bmN0aW9uIGkoZSl7ZS5jcmVhdGVkQ2FsbGJhY2smJmUuY3JlYXRlZENhbGxiYWNrKCl9dmFyIGE9ZS5mbGFncztlLnVwZ3JhZGU9dCxlLnVwZ3JhZGVXaXRoRGVmaW5pdGlvbj1uLGUuaW1wbGVtZW50UHJvdG90eXBlPXJ9KSx3aW5kb3cuQ3VzdG9tRWxlbWVudHMuYWRkTW9kdWxlKGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCxyKXt2YXIgYz1yfHx7fTtpZighdCl0aHJvdyBuZXcgRXJyb3IoImRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudDogZmlyc3QgYXJndW1lbnQgYG5hbWVgIG11c3Qgbm90IGJlIGVtcHR5Iik7aWYodC5pbmRleE9mKCItIik8MCl0aHJvdyBuZXcgRXJyb3IoImRvY3VtZW50LnJlZ2lzdGVyRWxlbWVudDogZmlyc3QgYXJndW1lbnQgKCduYW1lJykgbXVzdCBjb250YWluIGEgZGFzaCAoJy0nKS4gQXJndW1lbnQgcHJvdmlkZWQgd2FzICciK1N0cmluZyh0KSsiJy4iKTtpZihvKHQpKXRocm93IG5ldyBFcnJvcigiRmFpbGVkIHRvIGV4ZWN1dGUgJ3JlZ2lzdGVyRWxlbWVudCcgb24gJ0RvY3VtZW50JzogUmVnaXN0cmF0aW9uIGZhaWxlZCBmb3IgdHlwZSAnIitTdHJpbmcodCkrIicuIFRoZSB0eXBlIG5hbWUgaXMgaW52YWxpZC4iKTtpZihsKHQpKXRocm93IG5ldyBFcnJvcigiRHVwbGljYXRlRGVmaW5pdGlvbkVycm9yOiBhIHR5cGUgd2l0aCBuYW1lICciK1N0cmluZyh0KSsiJyBpcyBhbHJlYWR5IHJlZ2lzdGVyZWQiKTtyZXR1cm4gYy5wcm90b3R5cGV8fChjLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEhUTUxFbGVtZW50LnByb3RvdHlwZSkpLGMuX19uYW1lPXQudG9Mb3dlckNhc2UoKSxjWyJleHRlbmRzIl0mJihjWyJleHRlbmRzIl09Y1siZXh0ZW5kcyJdLnRvTG93ZXJDYXNlKCkpLGMubGlmZWN5Y2xlPWMubGlmZWN5Y2xlfHx7fSxjLmFuY2VzdHJ5PWkoY1siZXh0ZW5kcyJdKSxhKGMpLHMoYyksbihjLnByb3RvdHlwZSksdShjLl9fbmFtZSxjKSxjLmN0b3I9ZChjKSxjLmN0b3IucHJvdG90eXBlPWMucHJvdG90eXBlLGMucHJvdG90eXBlLmNvbnN0cnVjdG9yPWMuY3RvcixlLnJlYWR5JiZ3KGRvY3VtZW50KSxjLmN0b3J9ZnVuY3Rpb24gbihlKXtpZighZS5zZXRBdHRyaWJ1dGUuX3BvbHlmaWxsZWQpe3ZhciB0PWUuc2V0QXR0cmlidXRlO2Uuc2V0QXR0cmlidXRlPWZ1bmN0aW9uKGUsbil7ci5jYWxsKHRoaXMsZSxuLHQpfTt2YXIgbj1lLnJlbW92ZUF0dHJpYnV0ZTtlLnJlbW92ZUF0dHJpYnV0ZT1mdW5jdGlvbihlKXtyLmNhbGwodGhpcyxlLG51bGwsbil9LGUuc2V0QXR0cmlidXRlLl9wb2x5ZmlsbGVkPSEwfX1mdW5jdGlvbiByKGUsdCxuKXtlPWUudG9Mb3dlckNhc2UoKTt2YXIgcj10aGlzLmdldEF0dHJpYnV0ZShlKTtuLmFwcGx5KHRoaXMsYXJndW1lbnRzKTt2YXIgbz10aGlzLmdldEF0dHJpYnV0ZShlKTt0aGlzLmF0dHJpYnV0ZUNoYW5nZWRDYWxsYmFjayYmbyE9PXImJnRoaXMuYXR0cmlidXRlQ2hhbmdlZENhbGxiYWNrKGUscixvKX1mdW5jdGlvbiBvKGUpe2Zvcih2YXIgdD0wO3Q8RS5sZW5ndGg7dCsrKWlmKGU9PT1FW3RdKXJldHVybiEwfWZ1bmN0aW9uIGkoZSl7dmFyIHQ9bChlKTtyZXR1cm4gdD9pKHRbImV4dGVuZHMiXSkuY29uY2F0KFt0XSk6W119ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQsbj1lWyJleHRlbmRzIl0scj0wO3Q9ZS5hbmNlc3RyeVtyXTtyKyspbj10LmlzJiZ0LnRhZztlLnRhZz1ufHxlLl9fbmFtZSxuJiYoZS5pcz1lLl9fbmFtZSl9ZnVuY3Rpb24gcyhlKXtpZighT2JqZWN0Ll9fcHJvdG9fXyl7dmFyIHQ9SFRNTEVsZW1lbnQucHJvdG90eXBlO2lmKGUuaXMpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoZS50YWcpO3Q9T2JqZWN0LmdldFByb3RvdHlwZU9mKG4pfWZvcih2YXIgcixvPWUucHJvdG90eXBlLGk9ITE7bzspbz09dCYmKGk9ITApLHI9T2JqZWN0LmdldFByb3RvdHlwZU9mKG8pLHImJihvLl9fcHJvdG9fXz1yKSxvPXI7aXx8Y29uc29sZS53YXJuKGUudGFnKyIgcHJvdG90eXBlIG5vdCBmb3VuZCBpbiBwcm90b3R5cGUgY2hhaW4gZm9yICIrZS5pcyksZVsibmF0aXZlIl09dH19ZnVuY3Rpb24gYyhlKXtyZXR1cm4gZyhUKGUudGFnKSxlKX1mdW5jdGlvbiBsKGUpe2lmKGUpcmV0dXJuIF9bZS50b0xvd2VyQ2FzZSgpXX1mdW5jdGlvbiB1KGUsdCl7X1tlXT10fWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGMoZSl9fWZ1bmN0aW9uIHAoZSx0LG4pe3JldHVybiBlPT09Uz9oKHQsbik6TShlLHQpfWZ1bmN0aW9uIGgoZSx0KXtlJiYoZT1lLnRvTG93ZXJDYXNlKCkpLHQmJih0PXQudG9Mb3dlckNhc2UoKSk7dmFyIG49bCh0fHxlKTtpZihuKXtpZihlPT1uLnRhZyYmdD09bi5pcylyZXR1cm4gbmV3IG4uY3RvcjtpZighdCYmIW4uaXMpcmV0dXJuIG5ldyBuLmN0b3J9dmFyIHI7cmV0dXJuIHQ/KHI9aChlKSxyLnNldEF0dHJpYnV0ZSgiaXMiLHQpLHIpOihyPVQoZSksZS5pbmRleE9mKCItIik+PTAmJmIocixIVE1MRWxlbWVudCkscil9ZnVuY3Rpb24gZihlLHQpe3ZhciBuPWVbdF07ZVt0XT1mdW5jdGlvbigpe3ZhciBlPW4uYXBwbHkodGhpcyxhcmd1bWVudHMpO3JldHVybiB2KGUpLGV9fXZhciBtLHc9KGUuaXNJRSxlLnVwZ3JhZGVEb2N1bWVudFRyZWUpLHY9ZS51cGdyYWRlQWxsLGc9ZS51cGdyYWRlV2l0aERlZmluaXRpb24sYj1lLmltcGxlbWVudFByb3RvdHlwZSx5PWUudXNlTmF0aXZlLEU9WyJhbm5vdGF0aW9uLXhtbCIsImNvbG9yLXByb2ZpbGUiLCJmb250LWZhY2UiLCJmb250LWZhY2Utc3JjIiwiZm9udC1mYWNlLXVyaSIsImZvbnQtZmFjZS1mb3JtYXQiLCJmb250LWZhY2UtbmFtZSIsIm1pc3NpbmctZ2x5cGgiXSxfPXt9LFM9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLFQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudC5iaW5kKGRvY3VtZW50KSxNPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUy5iaW5kKGRvY3VtZW50KTttPU9iamVjdC5fX3Byb3RvX198fHk/ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9OmZ1bmN0aW9uKGUsdCl7aWYoZSBpbnN0YW5jZW9mIHQpcmV0dXJuITA7Zm9yKHZhciBuPWU7bjspe2lmKG49PT10LnByb3RvdHlwZSlyZXR1cm4hMDtuPW4uX19wcm90b19ffXJldHVybiExfSxmKE5vZGUucHJvdG90eXBlLCJjbG9uZU5vZGUiKSxmKGRvY3VtZW50LCJpbXBvcnROb2RlIiksZG9jdW1lbnQucmVnaXN0ZXJFbGVtZW50PXQsZG9jdW1lbnQuY3JlYXRlRWxlbWVudD1oLGRvY3VtZW50LmNyZWF0ZUVsZW1lbnROUz1wLGUucmVnaXN0cnk9XyxlWyJpbnN0YW5jZW9mIl09bSxlLnJlc2VydmVkVGFnTGlzdD1FLGUuZ2V0UmVnaXN0ZXJlZERlZmluaXRpb249bCxkb2N1bWVudC5yZWdpc3Rlcj1kb2N1bWVudC5yZWdpc3RlckVsZW1lbnR9KSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7aSh3aW5kb3cud3JhcChkb2N1bWVudCkpLHdpbmRvdy5DdXN0b21FbGVtZW50cy5yZWFkeT0hMDt2YXIgZT13aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lfHxmdW5jdGlvbihlKXtzZXRUaW1lb3V0KGUsMTYpfTtlKGZ1bmN0aW9uKCl7c2V0VGltZW91dChmdW5jdGlvbigpe3dpbmRvdy5DdXN0b21FbGVtZW50cy5yZWFkeVRpbWU9RGF0ZS5ub3coKSx3aW5kb3cuSFRNTEltcG9ydHMmJih3aW5kb3cuQ3VzdG9tRWxlbWVudHMuZWxhcHNlZD13aW5kb3cuQ3VzdG9tRWxlbWVudHMucmVhZHlUaW1lLXdpbmRvdy5IVE1MSW1wb3J0cy5yZWFkeVRpbWUpLGRvY3VtZW50LmRpc3BhdGNoRXZlbnQobmV3IEN1c3RvbUV2ZW50KCJXZWJDb21wb25lbnRzUmVhZHkiLHtidWJibGVzOiEwfSkpfSl9KX12YXIgbj1lLnVzZU5hdGl2ZSxyPWUuaW5pdGlhbGl6ZU1vZHVsZXM7ZS5pc0lFO2lmKG4pe3ZhciBvPWZ1bmN0aW9uKCl7fTtlLndhdGNoU2hhZG93PW8sZS51cGdyYWRlPW8sZS51cGdyYWRlQWxsPW8sZS51cGdyYWRlRG9jdW1lbnRUcmVlPW8sZS51cGdyYWRlU3VidHJlZT1vLGUudGFrZVJlY29yZHM9byxlWyJpbnN0YW5jZW9mIl09ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHR9fWVsc2UgcigpO3ZhciBpPWUudXBncmFkZURvY3VtZW50VHJlZSxhPWUudXBncmFkZURvY3VtZW50O2lmKHdpbmRvdy53cmFwfHwod2luZG93LlNoYWRvd0RPTVBvbHlmaWxsPyh3aW5kb3cud3JhcD13aW5kb3cuU2hhZG93RE9NUG9seWZpbGwud3JhcElmTmVlZGVkLHdpbmRvdy51bndyYXA9d2luZG93LlNoYWRvd0RPTVBvbHlmaWxsLnVud3JhcElmTmVlZGVkKTp3aW5kb3cud3JhcD13aW5kb3cudW53cmFwPWZ1bmN0aW9uKGUpe3JldHVybiBlfSksd2luZG93LkhUTUxJbXBvcnRzJiYod2luZG93LkhUTUxJbXBvcnRzLl9faW1wb3J0c1BhcnNpbmdIb29rPWZ1bmN0aW9uKGUpe2VbImltcG9ydCJdJiZhKHdyYXAoZVsiaW1wb3J0Il0pKX0pLCJjb21wbGV0ZSI9PT1kb2N1bWVudC5yZWFkeVN0YXRlfHxlLmZsYWdzLmVhZ2VyKXQoKTtlbHNlIGlmKCJpbnRlcmFjdGl2ZSIhPT1kb2N1bWVudC5yZWFkeVN0YXRlfHx3aW5kb3cuYXR0YWNoRXZlbnR8fHdpbmRvdy5IVE1MSW1wb3J0cyYmIXdpbmRvdy5IVE1MSW1wb3J0cy5yZWFkeSl7dmFyIHM9d2luZG93LkhUTUxJbXBvcnRzJiYhd2luZG93LkhUTUxJbXBvcnRzLnJlYWR5PyJIVE1MSW1wb3J0c0xvYWRlZCI6IkRPTUNvbnRlbnRMb2FkZWQiO3dpbmRvdy5hZGRFdmVudExpc3RlbmVyKHMsdCl9ZWxzZSB0KCl9KHdpbmRvdy5DdXN0b21FbGVtZW50cyksZnVuY3Rpb24oZSl7RnVuY3Rpb24ucHJvdG90eXBlLmJpbmR8fChGdW5jdGlvbi5wcm90b3R5cGUuYmluZD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3JldHVybiBmdW5jdGlvbigpe3ZhciByPW4uc2xpY2UoKTtyZXR1cm4gci5wdXNoLmFwcGx5KHIsYXJndW1lbnRzKSx0LmFwcGx5KGUscil9fSl9KHdpbmRvdy5XZWJDb21wb25lbnRzKSxmdW5jdGlvbihlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpO3QudGV4dENvbnRlbnQ9ImJvZHkge3RyYW5zaXRpb246IG9wYWNpdHkgZWFzZS1pbiAwLjJzOyB9IFxuYm9keVt1bnJlc29sdmVkXSB7b3Bh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