ZGlmZiAtLWdpdCBhL3Jvb20vZGVhdGgvZGVhdGhfbWFya19ob29rZWQuYyBiL3Jvb20vZGVhdGgvZGVhdGhfbWFya19ob29rZWQuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZTA5ZThmCi0tLSAvZGV2L251bGwKKysrIGIvcm9vbS9kZWF0aC9kZWF0aF9tYXJrX2hvb2tlZC5jCkBAIC0wLDAgKzEsNjYgQEAKKyNwcmFnbWEgc3RyaWN0X3R5cGVzCisKKyNpbmNsdWRlIDxtb3ZpbmcuaD4KKyNpbmNsdWRlIDxwcm9wZXJ0aWVzLmg+CisjaW5jbHVkZSA8bGFuZ3VhZ2UuaD4KKyNpbmNsdWRlIDxuZXdfc2tpbGxzLmg+CisKK2luaGVyaXQgInN0ZC90aGluZyI7CisKK3ZvaWQgY3JlYXRlKCkKK3sKKyAgOjpjcmVhdGUoKTsKKyAgU2V0UHJvcCggUF9OQU1FLCAiU3RlbXBlbCBkZXMgVG9kZXMiICk7CisgIFNldFByb3AoIFBfR0VOREVSLCBNQUxFICk7CisgIFNldFByb3AoIFBfU0hPUlQsIDAgKTsKKyAgU2V0UHJvcCggUF9JTlZJUywgMSApOworICBTZXRQcm9wKCBQX05FVkVSRFJPUCwgMSApOworICBBZGRJZCgoeyJkZWF0aF9tYXJrIiwiXG5kZWF0aF9tYXJrIn0pKTsKK30KKwordm9pZCByZXNldCgpCit7CisgIDo6cmVzZXQoKTsKKyAgaWYgKGVudmlyb25tZW50KCkgJiYgIXF1ZXJ5X29uY2VfaW50ZXJhY3RpdmUoZW52aXJvbm1lbnQoKSkpCisgICAgcmVtb3ZlKCk7Cit9CisKKworLyoKKyAqIEZ1bmN0aW9uIG5hbWU6IHN0YXJ0X2RlYXRoCisgKiBEZXNjcmlwdGlvbjogICBTdGFydCB0aGUgZGVhdGggc2VxdWVuY2UuCisgKi8KK3ZvaWQgc3RhcnRfZGVhdGgoKQoreworICBpZiAoICFlbnZpcm9ubWVudCgpIHx8ICFxdWVyeV9vbmNlX2ludGVyYWN0aXZlKGVudmlyb25tZW50KCkpCisgICAgICAgfHwgIWVudmlyb25tZW50KCktPlF1ZXJ5UHJvcChQX0dIT1NUKSApCisgIHsKKyAgICAgIGRlc3RydWN0KHRoaXNfb2JqZWN0KCkpOworICAgICAgcmV0dXJuOworICB9CisKKyAgc2F5KCJEdSBzaWVoc3QgZWluZSBkdW5rbGUgR2VzdGFsdCwgZGllIGV0d2FzIER1bnN0IGVpbnNhbW1lbHQgLi4uIG9kZXIgdmllbGxlaWNodFxuIisKKyAgICAgICJiaWxkZXN0IGR1IERpciBkYXMgYXVjaCBudXIgZWluIC4uLlxuIik7CisgIGVudmlyb25tZW50KCktPm1vdmUoIi9yb29tL2RlYXRoL3ZpcnR1YWwvZGVhdGhfcm9vbV8iK2dldHVpZChlbnZpcm9ubWVudCgpKSwKKwkJICAgICBNX0dPfE1fU0lMRU5UfE1fTk9fU0hPV3xNX05PQ0hFQ0spOworICAvLyBEZXIgZm9sZ2VuZGUgQ29kZSB2ZXJoaW5kZXJ0LCBkYXNzIGVpbiB1bmJlZGFjaHRlciBNYWdpZXIgaW0gaW5pdAorICAvLyBvZGVyIGV4aXQgZWluZW4gU3BpZWxlciB09nRldCwgdW5kIGlobiBkaXJrZXQgZGFuYWNoIG1vdmV0LgorICBlbnZpcm9ubWVudCgpLT5TZXRQcm9wKFBfVE1QX01PVkVfSE9PSywoe3RpbWUoKSsxMCx0aGlzX29iamVjdCgpLCJjYXRjaF9kaWVfbW92ZSJ9KSk7ICAKK30KKwordmFyYXJncyBpbnQgbW92ZShtaXhlZCBkZXN0LG1peGVkIG1ldGhvZCkKK3sJCisgIGlmICghbWV0aG9kICYgTV9OT0NIRUNLKSByZXR1cm4gTUVfQ0FOVF9CRV9EUk9QUEVEOworICByZXR1cm4gOjptb3ZlKGRlc3QsbWV0aG9kKTsKK30KKworaW50IF9xdWVyeV9hdXRvbG9hZG9iaigpIHsgcmV0dXJuIDE7IH0KKworaW50IGNhdGNoX2RpZV9tb3ZlKCkgeyByZXR1cm4gLTE7IH0KKwordm9pZCBpbml0KCkKK3sKKyAgOjppbml0KCk7CisgIGlmICh0aGlzX3BsYXllcigpID09IGVudmlyb25tZW50KCkpCisgICAgc3RhcnRfZGVhdGgoKTsKK30K