IyEvdXNyL2Jpbi9lbnYgcGVybAojCiMgPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIyBXcml0dGVuIGJ5IEFuZHkgUG9seWFrb3YgPGFwcHJvQGZ5LmNoYWxtZXJzLnNlPiBmb3IgdGhlIE9wZW5TU0wKIyBwcm9qZWN0LiBUaGUgbW9kdWxlIGlzLCBob3dldmVyLCBkdWFsIGxpY2Vuc2VkIHVuZGVyIE9wZW5TU0wgYW5kCiMgQ1JZUFRPR0FNUyBsaWNlbnNlcyBkZXBlbmRpbmcgb24gd2hlcmUgeW91IG9idGFpbiBpdC4gRm9yIGZ1cnRoZXIKIyBkZXRhaWxzIHNlZSBodHRwOi8vd3d3Lm9wZW5zc2wub3JnL35hcHByby9jcnlwdG9nYW1zLy4KIyA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQojCiMgMi4yMnggUkM0IHR1bmUtdXA6LSkgSXQgc2hvdWxkIGJlIG5vdGVkIHRob3VnaCB0aGF0IG15IGhhbmQgW2FzIGluCiMgImhhbmQtY29kZWQgYXNzZW1ibGVyIl0gZG9lc24ndCBzdGFuZCBmb3IgdGhlIHdob2xlIGltcHJvdmVtZW50CiMgY29lZmZpY2llbnQuIEl0IHR1cm5lZCBvdXQgdGhhdCBlbGltaW5hdGluZyBSQzRfQ0hBUiBmcm9tIGNvbmZpZwojIGxpbmUgcmVzdWx0cyBpbiB+NDAlIGltcHJvdmVtZW50ICh5ZXMsIGV2ZW4gZm9yIEMgaW1wbGVtZW50YXRpb24pLgojIFByZXN1bWFibHkgaXQgaGFzIGV2ZXJ5dGhpbmcgdG8gZG8gd2l0aCBBTUQgY2FjaGUgYXJjaGl0ZWN0dXJlIGFuZAojIFJBVyBvciB3aGF0ZXZlciBwZW5hbHRpZXMuIE9uY2UgYWdhaW4hIFRoZSBtb2R1bGUgKnJlcXVpcmVzKiBjb25maWcKIyBsaW5lICp3aXRob3V0KiBSQzRfQ0hBUiEgQXMgZm9yIGNvZGluZyAic2VjcmV0LCIgSSBiZXQgb24gcGFydGlhbAojIHJlZ2lzdGVyIGFyaXRobWV0aWNzLiBGb3IgZXhhbXBsZSBpbnN0ZWFkIG9mICdpbmMgJXI4OyBhbmQgJDI1NSwlcjgnCiMgSSBzaW1wbHkgJ2luYyAlcjhiJy4gRXZlbiB0aG91Z2ggb3B0aW1pemF0aW9uIG1hbnVhbCBkaXNjb3VyYWdlcwojIHRvIG9wZXJhdGUgb24gcGFydGlhbCByZWdpc3RlcnMsIGl0IHR1cm5lZCBvdXQgdG8gYmUgdGhlIGJlc3QgYmV0LgojIEF0IGxlYXN0IGZvciBBTUQuLi4gSG93IElBMzJFIHdvdWxkIHBlcmZvcm0gcmVtYWlucyB0byBiZSBzZWVuLi4uCgojIEFzIHdhcyBzaG93biBieSBNYXJjIEJldmFuZCByZW9yZGVyaW5nIG9mIGNvdXBsZSBvZiBsb2FkIG9wZXJhdGlvbnMKIyByZXN1bHRzIGluIGV2ZW4gaGlnaGVyIHBlcmZvcm1hbmNlIGdhaW4gb2YgMy4zeDotKSBBdCBsZWFzdCBvbgojIE9wdGVyb24uLi4gRm9yIHJlZmVyZW5jZSwgMXggaW4gdGhpcyBjYXNlIGlzIFJDNF9DSEFSIEMtY29kZQojIGNvbXBpbGVkIHdpdGggZ2NjIDMuMy4yLCB3aGljaCBwZXJmb3JtcyBhdCB+NTRNQnBzIHBlciAxR0h6IGNsb2NrLgojIExhdHRlciBtZWFucyB0aGF0IGlmIHlvdSB3YW50IHRvICplc3RpbWF0ZSogd2hhdCB0byBleHBlY3QgZnJvbQojICp5b3VyKiBPcHRlcm9uLCB0aGVuIG11bHRpcGx5IDU0IGJ5IDMuMyBhbmQgY2xvY2sgZnJlcXVlbmN5IGluIEdIei4KCiMgSW50ZWwgUDQgRU02NFQgY29yZSB3YXMgZm91bmQgdG8gcnVuIHRoZSBBTUQ2NCBjb2RlIHJlYWxseSBzbG93Li4uCiMgVGhlIG9ubHkgd2F5IHRvIGFjaGlldmUgY29tcGFyYWJsZSBwZXJmb3JtYW5jZSBvbiBQNCB3YXMgdG8ga2VlcAojIFJDNF9DSEFSLiBLaW5kIG9mIGlyb25pYywgaHVoPyBBcyBpdCdzIGFwcGFyZW50bHkgaW1wb3NzaWJsZSB0bwojIGNvbXBvc2UgYmxlbmRlZCBjb2RlLCB3aGljaCB3b3VsZCBwZXJmb3JtIGV2ZW4gd2l0aGluIDMwJSBtYXJnaW5hbAojIG9uIGVpdGhlciBBTUQgYW5kIEludGVsIHBsYXRmb3JtcywgSSBpbXBsZW1lbnQgYm90aCBjYXNlcy4gU2VlCiMgcmM0X3NrZXkuYyBmb3IgZnVydGhlciBkZXRhaWxzLi4uCgojIFA0IEVNNjRUIGNvcmUgYXBwZWFycyB0byBiZSAiYWxsZXJnaWMiIHRvIDY0LWJpdCBpbmMvZGVjLiBSZXBsYWNpbmcgCiMgdGhvc2Ugd2l0aCBhZGQvc3ViIHJlc3VsdHMgaW4gNTAlIHBlcmZvcm1hbmNlIGltcHJvdmVtZW50IG9mIGZvbGRlZAojIGxvb3AuLi4KCiMgQXMgd2FzIHNob3duIGJ5IFpvdSBOYW5oYWkgbG9vcCB1bnJvbGxpbmcgY2FuIGltcHJvdmUgSW50ZWwgRU02NFQKIyBwZXJmb3JtYW5jZSBieSA+MzAlIFt1bmxpa2UgUDQgMzItYml0IGNhc2UgdGhhdCBpc10uIEJ1dCB0aGlzIGlzCiMgcHJvdmlkZWQgdGhhdCBsb2FkcyBhcmUgcmVvcmRlcmVkIGV2ZW4gbW9yZSBhZ2dyZXNzaXZlbHkhIEJvdGggY29kZQojIHBhdGhlcywgQU1ENjQgYW5kIEVNNjRULCByZW9yZGVyIGxvYWRzIGluIGVzc2VudGlhbGx5IHNhbWUgbWFubmVyCiMgYXMgbXkgSUEtNjQgaW1wbGVtZW50YXRpb24uIE9uIE9wdGVyb24gdGhpcyByZXN1bHRlZCBpbiBtb2Rlc3QgNSUKIyBpbXByb3ZlbWVudCBbSSBoYWQgdG8gdGVzdCBpdF0sIHdoaWxlIGZpbmFsIEludGVsIFA0IHBlcmZvcm1hbmNlCiMgYWNoaWV2ZXMgcmVzcGVjdGZ1bCA0MzJNQnBzIG9uIDIuOEdIeiBwcm9jZXNzb3Igbm93LiBGb3IgcmVmZXJlbmNlLgojIElmIGV4ZWN1dGVkIG9uIFhlb24sIGN1cnJlbnQgUkM0X0NIQVIgY29kZS1wYXRoIGlzIDIuN3ggZmFzdGVyIHRoYW4KIyBSQzRfSU5UIGNvZGUtcGF0aC4gV2hpbGUgaWYgZXhlY3V0ZWQgb24gT3B0ZXJvbiwgaXQncyBvbmx5IDI1JQojIHNsb3dlciB0aGFuIHRoZSBSQzRfSU5UIG9uZSBbbWVhbmluZyB0aGF0IGlmIENQVSC1LWFyY2ggZGV0ZWN0aW9uCiMgaXMgbm90IGltcGxlbWVudGVkLCB0aGVuIHRoaXMgZmluYWwgUkM0X0NIQVIgY29kZS1wYXRoIHNob3VsZCBiZQojIHByZWZlcnJlZCwgYXMgaXQgcHJvdmlkZXMgYmV0dGVyICphbGwtcm91bmQqIHBlcmZvcm1hbmNlXS4KCiMgSW50ZWwgQ29yZTIgd2FzIG9ic2VydmVkIHRvIHBlcmZvcm0gcG9vcmx5IG9uIGJvdGggY29kZSBwYXRoczotKCBJdAojIGFwcGFyZW50bHkgc3VmZmVycyBmcm9tIHNvbWUga2luZCBvZiBwYXJ0aWFsIHJlZ2lzdGVyIHN0YWxsLCB3aGljaAojIG9jY3VycyBpbiA2NC1iaXQgbW9kZSBvbmx5IFthcyB2aXJ0dWFsbHkgaWRlbnRpY2FsIDMyLWJpdCBsb29wIHdhcwojIG9ic2VydmVkIHRvIG91dHBlcmZvcm0gNjQtYml0IG9uZSBieSBhbG1vc3QgNTAlXS4gQWRkaW5nIHR3byBtb3Z6YiB0bwojIGNsb29wMSBib29zdHMgaXRzIHBlcmZvcm1hbmNlIGJ5IDgwJSEgVGhpcyBsb29wIGFwcGVhcnMgdG8gYmUgb3B0aW1hbAojIGZpdCBmb3IgQ29yZTIgYW5kIHRoZXJlZm9yZSB0aGUgY29kZSB3YXMgbW9kaWZpZWQgdG8gc2tpcCBjbG9vcDggb24KIyB0aGlzIENQVS4KCiRvdXRwdXQ9c2hpZnQ7CgokMCA9fiBtLyguKltcL1xcXSlbXlwvXFxdKyQvOyAkZGlyPSQxOwooICR4bGF0ZT0iJHtkaXJ9eDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlICkgb3IKKCAkeGxhdGU9IiR7ZGlyfS4uLy4uL3Blcmxhc20veDg2XzY0LXhsYXRlLnBsIiBhbmQgLWYgJHhsYXRlKSBvcgpkaWUgImNhbid0IGxvY2F0ZSB4ODZfNjQteGxhdGUucGwiOwoKb3BlbiBTVERPVVQsInwgJF5YICR4bGF0ZSAkb3V0cHV0IjsKCiRkYXQ9IiVyZGkiOwkgICAgIyBhcmcxCiRsZW49IiVyc2kiOwkgICAgIyBhcmcyCiRpbnA9IiVyZHgiOwkgICAgIyBhcmczCiRvdXQ9IiVyY3giOwkgICAgIyBhcmc0CgpAWFg9KCIlcjgiLCIlcjEwIik7CkBUWD0oIiVyOSIsIiVyMTEiKTsKJFlZPSIlcjEyIjsKJFRZPSIlcjEzIjsKCiRjb2RlPTw8X19fOwoudGV4dAoKLmdsb2JsCVJDNAoudHlwZQlSQzQsXEBmdW5jdGlvbiw0Ci5hbGlnbgkxNgpSQzQ6CW9yCSRsZW4sJGxlbgoJam5lCS5MZW50cnkKCXJldAouTGVudHJ5OgoJcHVzaAklcjEyCglwdXNoCSVyMTMKCglhZGQJXCQ4LCRkYXQKCW1vdmwJLTgoJGRhdCksJFhYWzBdI2QKCW1vdmwJLTQoJGRhdCksJFlZI2QKCWNtcGwJXCQtMSwyNTYoJGRhdCkKCWplCS5MUkM0X0NIQVIKCWluYwkkWFhbMF0jYgoJbW92bAkoJGRhdCwkWFhbMF0sNCksJFRYWzBdI2QKCXRlc3QJXCQtOCwkbGVuCglqegkuTGxvb3AxCglqbXAJLkxsb29wOAouYWxpZ24JMTYKLkxsb29wODoKX19fCmZvciAoJGk9MDskaTw4OyRpKyspIHsKJGNvZGUuPTw8X19fOwoJYWRkCSRUWFswXSNiLCRZWSNiCgltb3YJJFhYWzBdLCRYWFsxXQoJbW92bAkoJGRhdCwkWVksNCksJFRZI2QKCXJvcglcJDgsJXJheAkJCSMgcm9yIGlzIHJlZHVuZGFudCB3aGVuICRpPTAKCWluYwkkWFhbMV0jYgoJbW92bAkoJGRhdCwkWFhbMV0sNCksJFRYWzFdI2QKCWNtcAkkWFhbMV0sJFlZCgltb3ZsCSRUWFswXSNkLCgkZGF0LCRZWSw0KQoJY21vdmUJJFRYWzBdLCRUWFsxXQoJbW92bAkkVFkjZCwoJGRhdCwkWFhbMF0sNCkKCWFkZAkkVFhbMF0jYiwkVFkjYgoJbW92YgkoJGRhdCwkVFksNCksJWFsCl9fXwpwdXNoKEBUWCxzaGlmdChAVFgpKTsgcHVzaChAWFgsc2hpZnQoQFhYKSk7CSMgInJvdGF0ZSIgcmVnaXN0ZXJzCn0KJGNvZGUuPTw8X19fOwoJcm9yCVwkOCwlcmF4CglzdWIJXCQ4LCRsZW4KCgl4b3IJKCRpbnApLCVyYXgKCWFkZAlcJDgsJGlucAoJbW92CSVyYXgsKCRvdXQpCglhZGQJXCQ4LCRvdXQKCgl0ZXN0CVwkLTgsJGxlbgoJam56CS5MbG9vcDgKCWNtcAlcJDAsJGxlbgoJam5lCS5MbG9vcDEKX19fCiRjb2RlLj08PF9fXzsKLkxleGl0OgoJc3ViCVwkMSwkWFhbMF0jYgoJbW92bAkkWFhbMF0jZCwtOCgkZGF0KQoJbW92bAkkWVkjZCwtNCgkZGF0KQoKCXBvcAklcjEzCglwb3AJJXIxMgoJcmV0Ci5hbGlnbgkxNgouTGxvb3AxOgoJYWRkCSRUWFswXSNiLCRZWSNiCgltb3ZsCSgkZGF0LCRZWSw0KSwkVFkjZAoJbW92bAkkVFhbMF0jZCwoJGRhdCwkWVksNCkKCW1vdmwJJFRZI2QsKCRkYXQsJFhYWzBdLDQpCglhZGQJJFRZI2IsJFRYWzBdI2IKCWluYwkkWFhbMF0jYgoJbW92bAkoJGRhdCwkVFhbMF0sNCksJFRZI2QKCW1vdmwJKCRkYXQsJFhYWzBdLDQpLCRUWFswXSNkCgl4b3JiCSgkaW5wKSwkVFkjYgoJaW5jCSRpbnAKCW1vdmIJJFRZI2IsKCRvdXQpCglpbmMJJG91dAoJZGVjCSRsZW4KCWpuegkuTGxvb3AxCglqbXAJLkxleGl0CgouYWxpZ24JMTYKLkxSQzRfQ0hBUjoKCWFkZAlcJDEsJFhYWzBdI2IKCW1vdnpiCSgkZGF0LCRYWFswXSksJFRYWzBdI2QKCXRlc3QJXCQtOCwkbGVuCglqegkuTGNsb29wMQoJY21wCVwkMCwyNjAoJGRhdCkKCWpuegkuTGNsb29wMQoJcHVzaAklcmJ4CglqbXAJLkxjbG9vcDgKLmFsaWduCTE2Ci5MY2xvb3A4OgoJbW92CSgkaW5wKSwlZWF4Cgltb3YJNCgkaW5wKSwlZWJ4Cl9fXwojIHVucm9sbCAyeDQtd2lzZSwgYmVjYXVzZSA2NC1iaXQgcm90YXRlcyBraWxsIEludGVsIFA0Li4uCmZvciAoJGk9MDskaTw0OyRpKyspIHsKJGNvZGUuPTw8X19fOwoJYWRkCSRUWFswXSNiLCRZWSNiCglsZWEJMSgkWFhbMF0pLCRYWFsxXQoJbW92emIJKCRkYXQsJFlZKSwkVFkjZAoJbW92emIJJFhYWzFdI2IsJFhYWzFdI2QKCW1vdnpiCSgkZGF0LCRYWFsxXSksJFRYWzFdI2QKCW1vdmIJJFRYWzBdI2IsKCRkYXQsJFlZKQoJY21wCSRYWFsxXSwkWVkKCW1vdmIJJFRZI2IsKCRkYXQsJFhYWzBdKQoJam5lCS5MY21vdiRpCQkJIyBJbnRlbCBjbW92IGlzIHNsb29vb3cuLi4KCW1vdgkkVFhbMF0sJFRYWzFdCi5MY21vdiRpOgoJYWRkCSRUWFswXSNiLCRUWSNiCgl4b3IJKCRkYXQsJFRZKSwlYWwKCXJvcglcJDgsJWVheApfX18KcHVzaChAVFgsc2hpZnQoQFRYKSk7IHB1c2goQFhYLHNoaWZ0KEBYWCkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycwp9CmZvciAoJGk9NDskaTw4OyRpKyspIHsKJGNvZGUuPTw8X19fOwoJYWRkCSRUWFswXSNiLCRZWSNiCglsZWEJMSgkWFhbMF0pLCRYWFsxXQoJbW92emIJKCRkYXQsJFlZKSwkVFkjZAoJbW92emIJJFhYWzFdI2IsJFhYWzFdI2QKCW1vdnpiCSgkZGF0LCRYWFsxXSksJFRYWzFdI2QKCW1vdmIJJFRYWzBdI2IsKCRkYXQsJFlZKQoJY21wCSRYWFsxXSwkWVkKCW1vdmIJJFRZI2IsKCRkYXQsJFhYWzBdKQoJam5lCS5MY21vdiRpCQkJIyBJbnRlbCBjbW92IGlzIHNsb29vb3cuLi4KCW1vdgkkVFhbMF0sJFRYWzFdCi5MY21vdiRpOgoJYWRkCSRUWFswXSNiLCRUWSNiCgl4b3IJKCRkYXQsJFRZKSwlYmwKCXJvcglcJDgsJWVieApfX18KcHVzaChAVFgsc2hpZnQoQFRYKSk7IHB1c2goQFhYLHNoaWZ0KEBYWCkpOwkjICJyb3RhdGUiIHJlZ2lzdGVycwp9CiRjb2RlLj08PF9fXzsKCWxlYQktOCgkbGVuKSwkbGVuCgltb3YJJWVheCwoJG91dCkKCWxlYQk4KCRpbnApLCRpbnAKCW1vdgklZWJ4LDQoJG91dCkKCWxlYQk4KCRvdXQpLCRvdXQKCgl0ZXN0CVwkLTgsJGxlbgoJam56CS5MY2xvb3A4Cglwb3AJJXJieAoJY21wCVwkMCwkbGVuCglqbmUJLkxjbG9vcDEKCWptcAkuTGV4aXQKX19fCiRjb2RlLj08PF9fXzsKLmFsaWduCTE2Ci5MY2xvb3AxOgoJYWRkCSRUWFswXSNiLCRZWSNiCgltb3Z6YgkoJGRhdCwkWVkpLCRUWSNkCgltb3ZiCSRUWFswXSNiLCgkZGF0LCRZWSkKCW1vdmIJJFRZI2IsKCRkYXQsJFhYWzBdKQoJYWRkCSRUWFswXSNiLCRUWSNiCglhZGQJXCQxLCRYWFswXSNiCgltb3Z6YgkkVFkjYiwkVFkjZAoJbW92emIJJFhYWzBdI2IsJFhYWzBdI2QKCW1vdnpiCSgkZGF0LCRUWSksJFRZI2QKCW1vdnpiCSgkZGF0LCRYWFswXSksJFRYWzBdI2QKCXhvcmIJKCRpbnApLCRUWSNiCglsZWEJMSgkaW5wKSwkaW5wCgltb3ZiCSRUWSNiLCgkb3V0KQoJbGVhCTEoJG91dCksJG91dAoJc3ViCVwkMSwkbGVuCglqbnoJLkxjbG9vcDEKCWptcAkuTGV4aXQKLnNpemUJUkM0LC4tUkM0Cl9fXwoKJGlkeD0iJXI4IjsKJGlkbz0iJXI5IjsKCiRjb2RlLj08PF9fXzsKLmV4dGVybglPUEVOU1NMX2lhMzJjYXBfUAouZ2xvYmwJUkM0X3NldF9rZXkKLnR5cGUJUkM0X3NldF9rZXksXEBmdW5jdGlvbiwzCi5hbGlnbgkxNgpSQzRfc2V0X2tleToKCWxlYQk4KCRkYXQpLCRkYXQKCWxlYQkoJGlucCwkbGVuKSwkaW5wCgluZWcJJGxlbgoJbW92CSRsZW4sJXJjeAoJeG9yCSVlYXgsJWVheAoJeG9yCSRpZG8sJGlkbwoJeG9yCSVyMTAsJXIxMAoJeG9yCSVyMTEsJXIxMQoKCW1vdglPUEVOU1NMX2lhMzJjYXBfUCglcmlwKSwkaWR4I2QKCWJ0CVwkMjAsJGlkeCNkCglqbmMJLkx3MXN0bG9vcAoJYnQJXCQzMCwkaWR4I2QKCXNldGMJJGlkbyNiCgltb3YJJGlkbyNkLDI2MCgkZGF0KQoJam1wCS5MYzFzdGxvb3AKCi5hbGlnbgkxNgouTHcxc3Rsb29wOgoJbW92CSVlYXgsKCRkYXQsJXJheCw0KQoJYWRkCVwkMSwlYWwKCWpuYwkuTHcxc3Rsb29wCgoJeG9yCSRpZG8sJGlkbwoJeG9yCSRpZHgsJGlkeAouYWxpZ24JMTYKLkx3Mm5kbG9vcDoKCW1vdgkoJGRhdCwkaWRvLDQpLCVyMTBkCglhZGQJKCRpbnAsJGxlbiwxKSwkaWR4I2IKCWFkZAklcjEwYiwkaWR4I2IKCWFkZAlcJDEsJGxlbgoJbW92CSgkZGF0LCRpZHgsNCksJXIxMWQKCWNtb3Z6CSVyY3gsJGxlbgoJbW92CSVyMTBkLCgkZGF0LCRpZHgsNCkKCW1vdgklcjExZCwoJGRhdCwkaWRvLDQpCglhZGQJXCQxLCRpZG8jYgoJam5jCS5MdzJuZGxvb3AKCWptcAkuTGV4aXRfa2V5CgouYWxpZ24JMTYKLkxjMXN0bG9vcDoKCW1vdgklYWwsKCRkYXQsJXJheCkKCWFkZAlcJDEsJWFsCglqbmMJLkxjMXN0bG9vcAoKCXhvcgkkaWRvLCRpZG8KCXhvcgkkaWR4LCRpZHgKLmFsaWduCTE2Ci5MYzJuZGxvb3A6Cgltb3YJKCRkYXQsJGlkbyksJXIxMGIKCWFkZAkoJGlucCwkbGVuKSwkaWR4I2IKCWFkZAklcjEwYiwkaWR4I2IKCWFkZAlcJDEsJGxlbgoJbW92CSgkZGF0LCRpZHgpLCVyMTFiCglqbnoJLkxjbm93cmFwCgltb3YJJXJjeCwkbGVuCi5MY25vd3JhcDoKCW1vdgklcjEwYiwoJGRhdCwkaWR4KQoJbW92CSVyMTFiLCgkZGF0LCRpZG8pCglhZGQJXCQxLCRpZG8jYgoJam5jCS5MYzJuZGxvb3AKCW1vdmwJXCQtMSwyNTYoJGRhdCkKCi5hbGlnbgkxNgouTGV4aXRfa2V5OgoJeG9yCSVlYXgsJWVheAoJbW92CSVlYXgsLTgoJGRhdCkKCW1vdgklZWF4LC00KCRkYXQpCglyZXQKLnNpemUJUkM0X3NldF9rZXksLi1SQzRfc2V0X2tleQoKLmdsb2JsCVJDNF9vcHRpb25zCi50eXBlCVJDNF9vcHRpb25zLFxAZnVuY3Rpb24sMAouYWxpZ24JMTYKUkM0X29wdGlvbnM6CgkucGljbWV1cCAlcmF4CglsZWEJLkxvcHRzLS4oJXJheCksJXJheAoJbW92CU9QRU5TU0xfaWEzMmNhcF9QKCVyaXApLCVlZHgKCWJ0CVwkMjAsJWVkeAoJam5jCS5MZG9uZQoJYWRkCVwkMTIsJXJheAoJYnQJXCQzMCwlZWR4CglqbmMJLkxkb25lCglhZGQJXCQxMywlcmF4Ci5MZG9uZToKCXJldAouYWxpZ24JNjQKLkxvcHRzOgouYXNjaXoJInJjNCg4eCxpbnQpIgouYXNjaXoJInJjNCg4eCxjaGFyKSIKLmFzY2l6CSJyYzQoMXgsY2hhcikiCi5hc2NpegkiUkM0IGZvciB4ODZfNjQsIENSWVBUT0dBTVMgYnkgPGFwcHJvXEBvcGVuc3NsLm9yZz4iCi5hbGlnbgk2NAouc2l6ZQlSQzRfb3B0aW9ucywuLVJDNF9vcHRpb25zCl9fXwoKJGNvZGUgPX4gcy8jKFtid2RdKS8kMS9nbTsKCiRjb2RlID1+IHMvUkM0X3NldF9rZXkvcHJpdmF0ZV9SQzRfc2V0X2tleS9nIGlmICgkRU5We0ZJUFNDQU5MSUJ9IG5lICIiKTsKCnByaW50ICRjb2RlOwoKY2xvc2UgU1RET1VUOwo=