ZGlmZiAtLWdpdCBhL0RvYy9jLWFwaS9pbml0LnJzdCBiL0RvYy9jLWFwaS9pbml0LnJzdAppbmRleCBhNGEyMDJhLi42YWM2OTZlIDEwMDY0NAotLS0gYS9Eb2MvYy1hcGkvaW5pdC5yc3QKKysrIGIvRG9jL2MtYXBpL2luaXQucnN0CkBAIC03ODAsNiArNzgwLDUwIEBACiAgICAuLiB2ZXJzaW9uYWRkZWQ6OiAyLjMKIAogCisKK0FzeW5jaHJvbm91cyBOb3RpZmljYXRpb25zCis9PT09PT09PT09PT09PT09PT09PT09PT09PQorCitBIG1lY2hhbmlzbSBpcyBwcm92aWRlZCB0byBtYWtlIGFzeW5jaHJvbm91cyBub3RpZmljYXRpb25zIHRvIHRoZSB0aGUgbWFpbgoraW50ZXJwcmV0ZXIgdGhyZWFkLiAgVGhlc2Ugbm90aWZpY2F0aW9ucyB0YWtlIHRoZSBmb3JtIG9mIGEgZnVuY3Rpb24KK3BvaW50ZXIgYW5kIGEgdm9pZCBhcmd1bWVudC4KKworLi4gaW5kZXg6OiBzaW5nbGU6IHNldGNoZWNraW50ZXJ2YWwoKSAoaW4gbW9kdWxlIHN5cykKKworRXZlcnkgY2hlY2sgaW50ZXJ2YWwsIHdoZW4gdGhlIGludGVycHJldGVyIGxvY2sgaXMgcmVsZWFzZWQgYW5kIHJlYWNxdWlyZWQsCitweXRob24gd2lsbCBhbHNvIGNhbGwgYW55IHN1Y2ggcHJvdmlkZWQgZnVuY3Rpb25zLiAgVGhpcyBjYW4gYmUgdXNlZCBmb3IKK2V4YW1wbGUgYnkgYXN5bmNocm9ub3VzIElPIGhhbmRsZXJzLiAgVGhlIG5vdGlmaWNhdGlvbiBjYW4gYmUgc2NoZWR1bGVkCitmcm9tIGEgd29ya2VyIHRocmVhZCBhbmQgdGhlIGFjdHVhbCBjYWxsIHRoYW4gbWFkZSBhdCB0aGUgZWFybGllc3QKK2NvbnZlbmllbmNlIGJ5IHRoZSBtYWluIHRocmVhZCB3aGVyZSBpdCBoYXMgcG9zc2Vzc2lvbiBvZiB0aGUgZ2xvYmFsCitpbnRlcnByZXRlciBsb2NrIGFuZCBjYW4gcGVyZm9ybSBhbnkgUHl0aG9uIEFQSSBjYWxscy4KKworLi4gY2Z1bmN0aW9uOjogdm9pZCBQeV9BZGRQZW5kaW5nQ2FsbCggaW50ICgqZnVuYykodm9pZCAqKSwgdm9pZCAqYXJnKSApCisKKyAgIC4uIGluZGV4Ojogc2luZ2xlOiBQeV9BZGRQZW5kaW5nQ2FsbCgpCisKKyAgIFBvc3QgYSBub3RpZmljYXRpb24gdG8gdGhlIFB5dGhvbiBtYWluIHRocmVhZC4gIElmIHN1Y2Nlc3NmdWwsCisgICBcKjphdHRyYGZ1bmNgIHdpbGwgYmUgY2FsbGVkIHdpdGggdGhlIGFyZ3VtZW50IDphdHRyOmBhcmdgIGF0IHRoZSBlYXJsaWVzdAorICAgY29udmVuaWVuY2UuICBcKjphdHRyOmBmdW5jYCB3aWxsIGJlIGNhbGxlZCBoYXZpbmcgdGhlIGdsb2JhbCBpbnRlcnByZXRlcgorICAgbG9jayBoZWxkIGFuZCBjYW4gdGh1cyB1c2UgdGhlIGZ1bGwgUHl0aG9uIEFQSSBhbmQgY2FuIHRha2UgYW55CisgICBhY3Rpb24gc3VjaCBhcyBzZXR0aW5nIG9iamVjdCBhdHRyaWJ1dGVzIHRvIHNpZ25hbCBJTyBjb21wbGV0aW9uLgorICAgSXQgbXVzdCByZXR1cm4gMCBvbiBzdWNjZXNzLCBvciAtMSBzaWduYWxsaW5nIGFuIGV4Y2VwdGlvbi4KKyAgIFRoZSBub3RpZmljYXRpb24gZnVuY3Rpb24gd29uJ3QgYmUgaW50ZXJydXB0ZWQgdG8gcGVyZm9ybSBhbm90aGVyCisgICBhc3luY2hyb25vdXMgbm90aWZpY2F0aW9uIHJlY3Vyc2l2ZWx5LAorICAgYnV0IGl0IGNhbiBzdGlsbCBiZSBpbnRlcnJ1cHRlZCB0byBzd2l0Y2ggdGhyZWFkcyBpZiB0aGUgaW50ZXJwcmV0ZXIKKyAgIGxvY2sgaXMgcmVsZWFzZWQsIGZvciBleGFtcGxlLCBpZiBpdCBjYWxscyBiYWNrIGludG8gcHl0aG9uIGNvZGUuCisKKyAgIFRoaXMgZnVuY3Rpb24gcmV0dXJucyAwIG9uIHN1Y2Nlc3MgaW4gd2hpY2ggY2FzZSB0aGUgbm90aWZpY2F0aW9uIGhhcyBiZWVuCisgICBzY2hlZHVsZWQuICBPdGhlcndpc2UsIGZvciBleGFtcGxlIGlmIHRoZSBub3RpZmljYXRpb24gYnVmZmVyIGlzIGZ1bGwsCisgICBpdCByZXR1cm5zIC0xIHdpdGhvdXQgc2V0dGluZyBhbnkgZXhjZXB0aW9uLgorCisgICBUaGlzIGZ1bmN0aW9uIGNhbiBiZSBjYWxsZWQgb24gYW55IHRocmVhZCwgYmUgaXQgYSBQeXRob24gdGhyZWFkIG9yCisgICBzb21lIG90aGVyIHN5c3RlbSB0aHJlYWQuICBJZiBpdCBpcyBhIFB5dGhvbiB0aHJlYWQsIGl0IGRvZXNlbid0IG1hdHRlciBpZgorICAgaXQgaG9sZHMgdGhlIGdsb2JhbCBpbnRlcnByZXRlciBsb2NrIG9yIG5vdC4KKworICAgLi4gdmVyc2lvbmFkZGVkOjogMi43CisKKworCiAuLiBfcHJvZmlsaW5nOgogCiBQcm9maWxpbmcgYW5kIFRyYWNpbmcKZGlmZiAtLWdpdCBhL0RvYy93aGF0c25ldy8yLjcucnN0IGIvRG9jL3doYXRzbmV3LzIuNy5yc3QKaW5kZXggNWRhZjEyZS4uYmRjMzY0YiAxMDA2NDQKLS0tIGEvRG9jL3doYXRzbmV3LzIuNy5yc3QKKysrIGIvRG9jL3doYXRzbmV3LzIuNy5yc3QKQEAgLTYwLDYgKzYwLDExIEBACiAuLiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KIAogCitLcmlzdGrhbiBWYWx1ciBK825zc29uLCBpc3N1ZSA0MjkzCitQeV9BZGRQZW5kaW5nQ2FsbCBpcyBub3cgdGhyZWFkIHNhZmUuICBUaGlzIGFsbG93cyBhbnkgd29ya2VyIHRocmVhZAordG8gc3VibWl0IG5vdGlmaWNhdGlvbnMgdG8gdGhlIHB5dGhvbiBtYWluIHRocmVhZC4gIFRoaXMgaXMgcGFydGljdWxhcmx5Cit1c2VmdWwgZm9yIGFzeW5jaHJvbm91cyBJTyBvcGVyYXRpb25zLgorCiAKIE90aGVyIExhbmd1YWdlIENoYW5nZXMKID09PT09PT09PT09PT09PT09PT09PT0KZGlmZiAtLWdpdCBhL0xpYi90ZXN0L3Rlc3RfY2FwaS5weSBiL0xpYi90ZXN0L3Rlc3RfY2FwaS5weQppbmRleCBlZWE0MWMxLi4xN2M0YmFmIDEwMDY0NAotLS0gYS9MaWIvdGVzdC90ZXN0X2NhcGkucHkKKysrIGIvTGliL3Rlc3QvdGVzdF9jYXBpLnB5CkBAIC0yLDkgKzIsNzQgQEAKICMgdGhlc2UgYXJlIGFsbCBmdW5jdGlvbnMgX3Rlc3RjYXBpIGV4cG9ydHMgd2hvc2UgbmFtZSBiZWdpbnMgd2l0aCAndGVzdF8nLgogCiBpbXBvcnQgc3lzCitpbXBvcnQgdGltZQoraW1wb3J0IHJhbmRvbQoraW1wb3J0IHVuaXR0ZXN0CitpbXBvcnQgdGhyZWFkaW5nCiBmcm9tIHRlc3QgaW1wb3J0IHRlc3Rfc3VwcG9ydAogaW1wb3J0IF90ZXN0Y2FwaQogCitjbGFzcyBUZXN0UGVuZGluZ0NhbGxzKHVuaXR0ZXN0LlRlc3RDYXNlKToKKworICAgIGRlZiBwZW5kaW5nY2FsbHNfc3VibWl0KHNlbGYsIGwsIG4pOgorICAgICAgICBkZWYgY2FsbGJhY2soKToKKyAgICAgICAgICAgICN0aGlzIGZ1bmN0aW9uIGNhbiBiZSBpbnRlcnJ1cHRlZCBieSB0aHJlYWQgc3dpdGNoaW5nIHNvIGxldCdzCisgICAgICAgICAgICAjdXNlIGFuIGF0b21pYyBvcGVyYXRpb24KKyAgICAgICAgICAgIGwuYXBwZW5kKE5vbmUpCisKKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICB0aW1lLnNsZWVwKHJhbmRvbS5yYW5kb20oKSowLjAyKSAjMC4wMSBzZWNzIG9uIGF2ZXJhZ2UKKyAgICAgICAgICAgICN0cnkgc3VibWl0dGluZyBjYWxsYmFjayB1bnRpbCBzdWNjZXNzZnVsLgorICAgICAgICAgICAgI3JlbHkgb24gcmVndWxhciBpbnRlcnJ1cHQgdG8gZmx1c2ggcXVldWUgaWYgd2UgYXJlCisgICAgICAgICAgICAjdW5zdWNjZXNzZnVsLgorICAgICAgICAgICAgd2hpbGUgVHJ1ZToKKyAgICAgICAgICAgICAgICBpZiBfdGVzdGNhcGkuX3BlbmRpbmdfdGhyZWFkZnVuYyhjYWxsYmFjayk6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgZGVmIHBlbmRpbmdjYWxsc193YWl0KHNlbGYsIGwsIG4pOgorICAgICAgICAjbm93LCBzdGljayBhcm91bmQgdW50aWwgbFswXSBoYXMgZ3Jvd24gdG8gMTAKKyAgICAgICAgY291bnQgPSAwOworICAgICAgICB3aGlsZSBsZW4obCkgIT0gbjoKKyAgICAgICAgICAgICN0aGlzIGJ1c3kgbG9vcCBpcyB3aGVyZSB3ZSBleHBlY3QgdG8gYmUgaW50ZXJydXB0ZWQgdG8KKyAgICAgICAgICAgICNydW4gb3VyIGNhbGxiYWNrcy4gIE5vdGUgdGhhdCBjYWxsYmFja3MgYXJlIG9ubHkgcnVuIG9uIHRoZQorICAgICAgICAgICAgI21haW4gdGhyZWFkCisgICAgICAgICAgICBpZiBGYWxzZSBhbmQgdGVzdF9zdXBwb3J0LnZlcmJvc2U6CisgICAgICAgICAgICAgICAgcHJpbnQgIiglaSkiJShsZW4obCksKSwKKyAgICAgICAgICAgIGZvciBpIGluIHhyYW5nZSgxMDAwKToKKyAgICAgICAgICAgICAgICBhID0gaSppCisgICAgICAgICAgICBjb3VudCArPSAxCisgICAgICAgICAgICBzZWxmLmZhaWxVbmxlc3MoY291bnQgPCAxMDAwMCwKKyAgICAgICAgICAgICAgICAidGltZW91dCB3YWl0aW5nIGZvciAlaSBjYWxsYmFja3MsIGdvdCAlaSIlKG4sIGxlbihsKSkpCisgICAgICAgIGlmIEZhbHNlIGFuZCB0ZXN0X3N1cHBvcnQudmVyYm9zZToKKyAgICAgICAgICAgIHByaW50ICIoJWkpIiUobGVuKGwpLCkKKworICAgIGRlZiB0ZXN0X3BlbmRpbmdjYWxsc190aHJlYWRlZChzZWxmKToKKyAgICAgICAgbCA9IFtdCisKKyAgICAgICAgI2RvIGV2ZXJ5IGNhbGxiYWNrIG9uIGEgc2VwYXJhdGUgdGhyZWFkCisgICAgICAgIG4gPSAzMgorICAgICAgICB0aHJlYWRzID0gW10KKyAgICAgICAgZm9yIGkgaW4gcmFuZ2Uobik6CisgICAgICAgICAgICB0ID0gdGhyZWFkaW5nLlRocmVhZCh0YXJnZXQ9c2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0LCBhcmdzID0gKGwsIDEpKQorICAgICAgICAgICAgdC5zdGFydCgpCisgICAgICAgICAgICB0aHJlYWRzLmFwcGVuZCh0KQorCisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKKworICAgICAgICBmb3IgdCBpbiB0aHJlYWRzOgorICAgICAgICAgICAgdC5qb2luKCkKKworICAgIGRlZiB0ZXN0X3BlbmRpbmdjYWxsc19ub25fdGhyZWFkZWQoc2VsZik6CisgICAgICAgICNhZ2FpbiwganVzdCB1c2luZyB0aGUgbWFpbiB0aHJlYWQsIGxpa2VseSB0aGV5IHdpbGwgYWxsIGJlIGRpc3BhdGhjZWQgYXQKKyAgICAgICAgI29uY2UuICBJdCBpcyBvayB0byBhc2sgZm9yIHRvbyBtYW55LCBiZWNhdXNlIHdlIGxvb3AgdW50aWwgd2UgZmluZCBhIHNsb3QuCisgICAgICAgICN0aGUgbG9vcCBjYW4gYmUgaW50ZXJydXB0ZWQgdG8gZGlzcGF0Y2guCisgICAgICAgICN0aGVyZSBhcmUgb25seSAzMiBkaXNwYXRjaCBzbG90cywgc28gd2UgZ28gZm9yIHR3aWNlIHRoYXQhCisgICAgICAgIGwgPSBbXQorICAgICAgICBuID0gNjQKKyAgICAgICAgc2VsZi5wZW5kaW5nY2FsbHNfc3VibWl0KGwsIG4pCisgICAgICAgIHNlbGYucGVuZGluZ2NhbGxzX3dhaXQobCwgbikKKworCiBkZWYgdGVzdF9tYWluKCk6CiAKICAgICBmb3IgbmFtZSBpbiBkaXIoX3Rlc3RjYXBpKToKQEAgLTUwLDUgKzExNSw3IEBACiAgICAgICAgIHQuc3RhcnQoKQogICAgICAgICB0LmpvaW4oKQogCisgICAgdGVzdF9zdXBwb3J0LnJ1bl91bml0dGVzdChUZXN0UGVuZGluZ0NhbGxzKQorCiBpZiBfX25hbWVfXyA9PSAiX19tYWluX18iOgogICAgIHRlc3RfbWFpbigpCmRpZmYgLS1naXQgYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jIGIvTW9kdWxlcy9fdGVzdGNhcGltb2R1bGUuYwppbmRleCA2NjVkMzc1Li4xNDc1ZjcyIDEwMDY0NAotLS0gYS9Nb2R1bGVzL190ZXN0Y2FwaW1vZHVsZS5jCisrKyBiL01vZHVsZXMvX3Rlc3RjYXBpbW9kdWxlLmMKQEAgLTgzNyw2ICs4MzcsNDMgQEAKIAkJcmV0dXJuIE5VTEw7CiAJUHlfUkVUVVJOX05PTkU7CiB9CisKKy8qIHRlc3QgUHlfQWRkUGVuZGluZ0NhbGxzIHVzaW5nIHRocmVhZHMgKi8KK3N0YXRpYyBpbnQgX3BlbmRpbmdfY2FsbGJhY2sodm9pZCAqYXJnKQoreworCS8qIHdlIGFzc3VtZSB0aGUgYXJndW1lbnQgaXMgY2FsbGFibGUgb2JqZWN0IHRvIHdoaWNoIHdlIG93biBhIHJlZmVyZW5jZSAqLworCVB5T2JqZWN0ICpjYWxsYWJsZSA9IChQeU9iamVjdCAqKWFyZzsKKwlQeU9iamVjdCAqciA9IFB5T2JqZWN0X0NhbGxPYmplY3QoY2FsbGFibGUsIE5VTEwpOworCVB5X0RFQ1JFRihjYWxsYWJsZSk7CisJUHlfWERFQ1JFRihyKTsKKwlyZXR1cm4gciAhPSBOVUxMID8gMCA6IC0xOworfQorCisvKiBUaGUgZm9sbG93aW5nIHJlcXVlc3RzIG4gY2FsbGJhY2tzIHRvIF9wZW5kaW5nX2NhbGxiYWNrLiAgSXQgY2FuIGJlCisgKiBydW4gZnJvbSBhbnkgcHl0aG9uIHRocmVhZC4KKyAqLworUHlPYmplY3QgKnBlbmRpbmdfdGhyZWFkZnVuYyhQeU9iamVjdCAqc2VsZiwgUHlPYmplY3QgKmFyZykKK3sKKwlQeU9iamVjdCAqY2FsbGFibGU7CisJaW50IHI7CisJaWYgKFB5QXJnX1BhcnNlVHVwbGUoYXJnLCAiTyIsICZjYWxsYWJsZSkgPT0gMCkKKwkJcmV0dXJuIE5VTEw7CisKKwkvKiBjcmVhdGUgdGhlIHJlZmVyZW5jZSBmb3IgdGhlIGNhbGxiYWNrd2hpbGUgd2UgaG9sZCB0aGUgbG9jayAqLworCVB5X0lOQ1JFRihjYWxsYWJsZSk7CisKKwlQeV9CRUdJTl9BTExPV19USFJFQURTCisJciA9IFB5X0FkZFBlbmRpbmdDYWxsKCZfcGVuZGluZ19jYWxsYmFjaywgY2FsbGFibGUpOworCVB5X0VORF9BTExPV19USFJFQURTCisKKwlpZiAocjwwKSB7CisJCVB5X0RFQ1JFRihjYWxsYWJsZSk7IC8qIHVuc3VjY2Vzc2Z1bCBhZGQsIGRlc3Ryb3kgdGhlIGV4dHJhIHJlZmVyZW5jZSAqLworCQlQeV9JTkNSRUYoUHlfRmFsc2UpOworCQlyZXR1cm4gUHlfRmFsc2U7CisJfQorCVB5X0lOQ1JFRihQeV9UcnVlKTsKKwlyZXR1cm4gUHlfVHJ1ZTsKK30KICNlbmRpZgogCiAvKiBTb21lIHRlc3RzIG9mIFB5U3RyaW5nX0Zyb21Gb3JtYXQoKS4gIFRoaXMgbmVlZHMgbW9yZSB0ZXN0cy4gKi8KQEAgLTk0MSw2ICs5NzgsNyBAQAogI2VuZGlmCiAjaWZkZWYgV0lUSF9USFJFQUQKIAl7Il90ZXN0X3RocmVhZF9zdGF0ZSIsICB0ZXN0X3RocmVhZF9zdGF0ZSwgCQkgTUVUSF9WQVJBUkdTfSwKKwl7Il9wZW5kaW5nX3RocmVhZGZ1bmMiLAlwZW5kaW5nX3RocmVhZGZ1bmMsCQkgTUVUSF9WQVJBUkdTfSwKICNlbmRpZgogCXsidHJhY2ViYWNrX3ByaW50IiwgdHJhY2ViYWNrX3ByaW50LCAJICAgICAgICAgTUVUSF9WQVJBUkdTfSwKIAl7TlVMTCwgTlVMTH0gLyogc2VudGluZWwgKi8K