dHJlZSBmYmY4OWI4ZjEzNjVjMThjNWMyZWUwZmFkMTVmNjFmNmYzMTI3YWY4CnBhcmVudCAxN2FmNjkxY2QxOTc2NWI3ODJkODkxZmM1MGMxNTY4ZDBmMTI3NmIzCmF1dGhvciBQYXRyaWNrIE1jSGFyZHkgPGthYmVyQHRyYXNoLm5ldD4gMTEyMDU5NzY5MCAtMDcwMApjb21taXR0ZXIgRGF2aWQgUy4gTWlsbGVyIDxkYXZlbUBkYXZlbWxvZnQubmV0PiAxMTIwNTk3NjkwIC0wNzAwCgpbTkVUXTogRml4IHNpZ25lZG5lc3MgaXNzdWVzIGluIG5ldC9jb3JlL2ZpbHRlci5jCgpUaGlzIGlzIHRoZSBjb2RlIHRvIGxvYWQgcGFja2V0IGRhdGEgaW50byBhIHJlZ2lzdGVyOgoKICAgICAgICAgICAgICAgICAgICAgICAgayA9IGZlbnRyeS0+azsKICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGsgPCAwKSB7Ci4uLgogICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2UgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHUzMiBfdG1wLCAqcDsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwID0gc2tiX2hlYWRlcl9wb2ludGVyKHNrYiwgaywgNCwgJl90bXApOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChwICE9IE5VTEwpIHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEEgPSBudG9obCgqcCk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIH0KCnNrYl9oZWFkZXJfcG9pbnRlciBjaGVja3MgaWYgdGhlIHJlcXVlc3RlZCBkYXRhIGlzIHdpdGhpbiB0aGUKbGluZWFyIGFyZWE6CgogICAgICAgIGludCBobGVuID0gc2tiX2hlYWRsZW4oc2tiKTsKCiAgICAgICAgaWYgKG9mZnNldCArIGxlbiA8PSBobGVuKQogICAgICAgICAgICAgICAgcmV0dXJuIHNrYi0+ZGF0YSArIG9mZnNldDsKCldoZW4gb2Zmc2V0IGlzIHdpdGhpbiBbSU5UX01BWC1sZW4rMS4uSU5UX01BWF0gdGhlIGFkZGl0aW9uIHdpbGwKcmVzdWx0IGluIGEgbmVnYXRpdmUgbnVtYmVyIHdoaWNoIGlzIDw9IGhsZW4uCgpJIGNvdWxkbid0IHRyaWdnZXIgYSBjcmFzaCBvbiBteSBBTUQ2NCB3aXRoIDJHQiBvZiBtZW1vcnksIGJ1dCBhCmNvd29ya2VyIHRyaWVkIG9uIGhpcyB4ODYgbWFjaGluZSBhbmQgaXQgY3Jhc2hlZCBpbW1lZGlhdGVseS4KClRoaXMgcGF0Y2ggZml4ZXMgdGhlIGNoZWNrIGluIHNrYl9oZWFkZXJfcG9pbnRlciB0byBoYW5kbGUgbGFyZ2UKcG9zaXRpdmUgb2Zmc2V0cyBzaW1pbGFyIHRvIHNrYl9jb3B5X2JpdHMuIEludmFsaWQgZGF0YSBjYW4gc3RpbGwKYmUgYWNjZXNzZWQgdXNpbmcgbmVnYXRpdmUgb2Zmc2V0cyAoYWxzbyBzaW1pbGFyIHRvIHNrYl9jb3B5X2JpdHMpLAphbnlvbmUgdXNpbmcgbmVnYXRpdmUgb2Zmc2V0cyBuZWVkcyB0byB2ZXJpZnkgdGhlbSBoaW1zZWxmLgoKVGhhbmtzIHRvIFRob21hcyBW9md0bGUgPHRob21hcy52b2VndGxlQGNvcmV3b3Jrcy5kZT4gZm9yIHZlcmlmeWluZyB0aGUKcHJvYmxlbSBieSBjcmFzaGluZyBoaXMgbWFjaGluZSBhbmQgcHJvdmlkaW5nIG1lIHdpdGggYW4gT29wcy4KClNpZ25lZC1vZmYtYnk6IFBhdHJpY2sgTWNIYXJkeSA8a2FiZXJAdHJhc2gubmV0PgpBY2tlZC1ieTogSGVyYmVydCBYdSA8aGVyYmVydEBnb25kb3IuYXBhbmEub3JnLmF1PgpTaWduZWQtb2ZmLWJ5OiBEYXZpZCBTLiBNaWxsZXIgPGRhdmVtQGRhdmVtbG9mdC5uZXQ+Cg==