Name: series-workflowdvqt2 Phase: Failed StartedAt: 2026-06-29 10:50:28 +0000 UTC FinishedAt: 2026-06-29 10:59:21 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvqt2[0] Phase: Succeeded StartedAt: 2026-06-29 10:50:28 +0000 UTC FinishedAt: 2026-06-29 10:59:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvqt2[0].run-triage Phase: Succeeded StartedAt: 2026-06-29 10:50:28 +0000 UTC FinishedAt: 2026-06-29 10:59:00 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiY2JjZjc3MDlhNWFhMTk4Y2I5MWE5NmZjNDc2YmRlNThhYTI2M2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTA6NTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5AQCAtNjgsNyAmIzQzOzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKVxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxuIFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xuJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCk7XG4mIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XG4mIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcdFx0XFxcbiBcdGlmICghKGNvbmRpdGlvbikpIHtcdFx0XHRcXFxuIFx0XHRkcHJpbnRmMChcJiMzNDsjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXFxuXCYjMzQ7LCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuQEAgLTEyNiw3ICYjNDM7MTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdHJldCA9IHN5c2NhbGwoX19OUl9zdWJwYWdlX3Byb3QsIHB0ciwgc2l6ZSwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuaW5kZXggMzAyZmVmNTQwNDljODcuLmYzMGM5OTY1YTU2MWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5AQCAtMTksNyAmIzQzOzE5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuQEAgLTM2LDYgJiM0MzszNSwxMCBAQCBzdGF0aWMgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbiBzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjtcbiBzdGF0aWMgc2lnaW5mb190IHNpZ2luZm8gPSB7MH07XG4gXG4mIzQzO2ludCBpdGVyYXRpb25fbnIgPSAxO1xuJiM0MztpbnQgdGVzdF9ucjtcbiYjNDM7aW50IGRwcmludF9pbl9zaWduYWw7XG4mIzQzO1xuIC8qXG4gICogV2UgbmVlZCB0byB1c2UgaW5saW5lIGFzc2VtYmx5IGluc3RlYWQgb2YgZ2xpYmMmIzM5O3Mgc3lzY2FsbCBiZWNhdXNlIGdsaWJjJiMzOTtzXG4gICogc3lzY2FsbCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBQTFQgaW4gb3JkZXIgdG8gY2FsbCBhIGxpYnJhcnkgZnVuY3Rpb25cbkBAIC0yMDcsMjIgJiM0MzsyMTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9wa2V5MF9kaXNhYmxlZCh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4mIzQzO1x0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyLCBcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgJiM0MzsyNTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiBcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXG5AQCAtMjg4LDIxICYjNDM7MjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRsb25nIHJldDtcbiBcbiBcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiBcbi1cdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDEgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTMxNywxMyAmIzQzOzMxOSwxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiYjNDM7XHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiBcdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbiBcdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4gXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbkBAIC0zMzMsNyAmIzQzOzMzNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSBlbHNlIGlmIChyZXQgPT0gMCkge1xuIFx0XHR0aHJlYWRfc2Vndl9tYXBlcnJfcHRyKFx1MDAyNnNpZ3N0YWNrKTtcbiBcdFx0c3lzY2FsbF9yYXcoU1lTX2V4aXQsIDAsIDAsIDAsIDAsIDAsIDApO1xuQEAgLTM1OCw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCAmIzQzOzM3Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG5AQCAtNDQ0LDYgJiM0Mzs0NDYsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU0lHU0VHViBoYW5kbGVyIGlzIHJlc2V0IHRvIFNJR19ERkwgYmVsb3c7IHR1cm4gdHJhY2luZyBvZmYgZmlyc3RcbiYjNDM7XHQgKiBzbyBhIGNyYXNoIGRvZXMgbm90IGxlYXZlIGZ0cmFjZSBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHRyYWNpbmdfb2ZmKCk7XG4gXG4gXHRzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDtcbiBcdHNhLnNhX2ZsYWdzID0gMDtcbkBAIC00NTMsMjQgJiM0Mzs0NjIsMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0ICogRm9yIHRoaXMgdGVzdGNhc2UsIHdlIGRvIG5vdCB3YW50IHRvIGhhbmRsZSBTSUdTRUdWLiBSZXNldCBoYW5kbGVyXG4gXHQgKiB0byBkZWZhdWx0IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBjcmFzaCBpZiBpdCByZWNlaXZlcyBTSUdTRUdWLlxuIFx0ICovXG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwmIzM0O3NpZ2FjdGlvblwmIzM0Oyk7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiYjNDM7XHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuIFxuLVx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LypcbiBcdCAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWRcbkBAIC00OTAsMTEgJiM0Mzs0OTUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cbi1cdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4mIzQzO1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4gXHRcdFx0ICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XG4gXHRcdFx0ICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfFxuIFx0XHRcdCAgICAgQ0xPTkVfREVUQUNIRUQsXG5AQCAtNTA0LDcgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgJiM0Mzs1MzYsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSYjNDM7JiM0MzspXG4tXHRcdCgqcGtleV90ZXN0c1tpXSkoKTtcbiYjNDM7XHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHJhY2luZ19vbigpO1xuJiM0MztcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuJiM0MztcdFx0dHJhY2luZ19vZmYoKTtcbiYjNDM7XHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uYWJmNzA4ZDY1NzVlYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgJiM0MzsyLDk1IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuJiM0MztzdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkcHJpbnRmMihcJiMzNDslcygpOiB3cml0aW5nICYjMzk7JXMmIzM5OyB0byAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbiYjNDM7XHQgKiBwa2V5X2Fzc2VydCgpXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZXJyb3Igb3BlbmluZyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHN0cik7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KF9fTElORV9fKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbiYjNDM7XHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZpbGVuYW1lOiAmIzM5OyVzJiMzOTsgc3RyOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGZpbGUsIHN0cik7XG4mIzQzO1x0XHRleGl0KF9fTElORV9fKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xuJiM0MztzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2NhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHdhcm5lZF90cmFjaW5nID0gMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7I2RlZmluZSBUUkFDRURJUiBcJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nXCYjMzQ7XG4mIzQzO1x0Y2hhciBwaWRzdHJbMzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHBpZHN0ciwgXCYjMzQ7JWRcJiMzNDssIGdldHBpZCgpKTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0O1xcblwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L3RyYWNlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoMSkge1xuJiM0MztcdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbiYjNDM7XHRcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MVwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L29wdGlvbnMvZnVuY2dyYXBoLXByb2NcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwmIzM0Oy9zZXRfZnRyYWNlX3BpZFwmIzM0Oyk7XG4mIzQzO1x0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4mIzQzO1x0ZHByaW50ZjEoXCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXFxuXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZClcbiYjNDM7e1xuJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4mIzQzO1x0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cnVubmluZyAlcygpLi4uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0dHJhY2luZ19vZmYoKTtcbiYjNDM7I2lmZGVmIFNMRUVQX09OX0FCT1JUXG4mIzQzO1x0c2xlZXAoU0xFRVBfT05fQUJPUlQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbClcbiB7XG4gXHRpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uOTZhNGViMjZmMzI2MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbkBAIC02Miw4OSAmIzQzOzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIFx0cmV0dXJuICpwdHI7XG4gfVxuIFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbi17XG4tXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4tXHRpbnQgcmV0O1xuLVxuLVx0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbi1cdC8qXG4tXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxuLVx0ICogcGtleV9hc3NlcnQoKVxuLVx0ICovXG4tXHRpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBzdHIpO1xuLVx0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4tXHRcdGV4aXQoX19MSU5FX18pO1xuLVx0fVxuLVxuLVx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuLVx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbi1cdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuLVx0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIDE7XG4tfVxuLSNlbmRpZlxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZClcbi17XG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLSNkZWZpbmUgVFJBQ0VESVIgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZ1wmIzM0O1xuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwmIzM0OyVkXCYjMzQ7LCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuLVx0aWYgKDEpIHtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdH1cbi1cdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcJiMzNDsvc2V0X2Z0cmFjZV9waWRcJiMzNDspO1xuLVx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4tXHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4tI2VuZGlmXG4tfVxuLVxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcbi17XG4tXHRmZmx1c2goc3Rkb3V0KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICYjNDM7NTg2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdFx0c2l6ZSwgcHJvdCwgcGtleSk7XG4gXHRwa2V5X2Fzc2VydChwa2V5IFx1MDAzYyBOUl9QS0VZUyk7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyAmIzQzOzYwOSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuQEAgLTc1MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdHBrZXlfYXNzZXJ0KG1hbGxvY190eXBlIFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xuIFxuIFx0XHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XG4tXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUmIzQzOyYjNDM7O1xuIFx0XHRpZiAobWFsbG9jX3R5cGUgXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXG5AQCAtMTE5Nyw2ICYjNDM7MTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyAmIzQzOzE2ODEsOCBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwmIzM0Oyk7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bW1hcFwmIzM0Oyk7XG4gXHRcdHRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCYjMzQ7KTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjYmNmNzcwOWE1YWExOThjYjkxYTk2ZmM0NzZiZGU1OGFhMjYzYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMDo1ODozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmgKaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaApAQCAtNjgsNyAmIzQzOzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpCiAjZGVmaW5lIGRwcmludGY0KGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoNCwgYXJncykKIAotZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7CiYjNDM7dm9pZCB0cmFjaW5nX29uKHZvaWQpOwomIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7CiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKTsKICNkZWZpbmUgcGtleV9hc3NlcnQoY29uZGl0aW9uKSBkbyB7CQlcCiAJaWYgKCEoY29uZGl0aW9uKSkgewkJCVwKIAkJZHByaW50ZjAoJiMzNDsjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXG4mIzM0OywgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaAppbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdF9zdWJwYWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwCiAJCQlzaXplLCBwcm90LCBwa2V5KTsKIAlwa2V5X2Fzc2VydChwa2V5ICZsdDsgTlJfUEtFWVMpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwotCXBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJcGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwogCiAJcmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jCmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5mMzBjOTk2NWE1NjFkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKQEAgLTE5LDcgJiM0MzsxOSw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwotI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CkBAIC0zNiw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiBzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjsKIHN0YXRpYyBzaWdpbmZvX3Qgc2lnaW5mbyA9IHswfTsKIAomIzQzO2ludCBpdGVyYXRpb25fbnIgPSAxOwomIzQzO2ludCB0ZXN0X25yOwomIzQzO2ludCBkcHJpbnRfaW5fc2lnbmFsOwomIzQzOwogLyoKICAqIFdlIG5lZWQgdG8gdXNlIGlubGluZSBhc3NlbWJseSBpbnN0ZWFkIG9mIGdsaWJjJiMzOTtzIHN5c2NhbGwgYmVjYXVzZSBnbGliYyYjMzk7cwogICogc3lzY2FsbCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBQTFQgaW4gb3JkZXIgdG8gY2FsbCBhIGxpYnJhcnkgZnVuY3Rpb24KQEAgLTIwNywyMiAmIzQzOzIxMCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpCiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAlwdGhyZWFkX2F0dHJfdCBhdHRyOwogCXB0aHJlYWRfdCB0aHI7CiYjNDM7CWludCByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87CiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCiAJcHRocmVhZF9hdHRyX2luaXQoJmFtcDthdHRyKTsKIAlwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmFtcDthdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7CiAKLQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RociwgJmFtcDthdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTsKJiM0MzsJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHIsICZhbXA7YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjQ3LDIyICYjNDM7MjUwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZCkKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXB0aHJlYWRfYXR0cl90IGF0dHI7CiAJcHRocmVhZF90IHRocjsKJiM0MzsJaW50IHJldDsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwogCXB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYW1wO2F0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjg4LDIxICYjNDM7MjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpCiAJaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLOwogCiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyOwogCiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zMTcsMTMgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKIAkJCSAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAogCQkJICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfAogCQkJICAgICBDTE9ORV9ERVRBQ0hFRCwKQEAgLTMzMyw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWVycm5vID0gLXJldDsKLQkJcGVycm9yKCYjMzQ7Y2xvbmUmIzM0Oyk7CiYjNDM7CQlwa2V5X2Fzc2VydCgwKTsKIAl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zZWd2X21hcGVycl9wdHIoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTM1OCw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpCiB7CiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAl1NjQgcGtleV9yZWc7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqLwogCXBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpOwpAQCAtMzY5LDEwICYjNDM7MzczLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpCiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCkBAIC00NDQsNiAmIzQzOzQ0NiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpCiAJaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNJR1NFR1YgaGFuZGxlciBpcyByZXNldCB0byBTSUdfREZMIGJlbG93OyB0dXJuIHRyYWNpbmcgb2ZmIGZpcnN0CiYjNDM7CSAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwl0cmFjaW5nX29mZigpOwogCiAJc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CiAJc2Euc2FfZmxhZ3MgPSAwOwpAQCAtNDUzLDI0ICYjNDM7NDYyLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAkgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXIKIAkgKiB0byBkZWZhdWx0IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBjcmFzaCBpZiBpdCByZWNlaXZlcyBTSUdTRUdWLgogCSAqLwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7CiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMl9oYW5kbGVyOwogCXNpZ2VtcHR5c2V0KCZhbXA7c2Euc2FfbWFzayk7CiAKLQlpZiAoc2lnYWN0aW9uKFNJR1VTUjIsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1VTUjIsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKgogCSAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWQKQEAgLTQ5MCwxMSAmIzQzOzQ5NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpCiAJLyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi8KIAlzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJCSAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTsKIAlzaWdzdGFjay5zc19mbGFncyA9IDA7CiAJc2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKIAkJCSAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAogCQkJICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfAogCQkJICAgICBDTE9ORV9ERVRBQ0hFRCwKQEAgLTUwNCw3ICYjNDM7NTEwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKQogCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJZXJybm8gPSAtcmV0OwotCQlwZXJyb3IoJiMzNDtjbG9uZSYjMzQ7KTsKJiM0MzsJCXBrZXlfYXNzZXJ0KDApOwogCX0gIGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zaWd1c3IyX3NlbGYoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTUzMCwxNiAmIzQzOzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JaW50IGk7Ci0KIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCWtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShwa2V5X3Rlc3RzKSk7CiAKIAlpZiAoIWlzX3BrZXlzX3N1cHBvcnRlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpJiM0MzsmIzQzOykKLQkJKCpwa2V5X3Rlc3RzW2ldKSgpOwomIzQzOwlmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yICZsdDsgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9uciYjNDM7JiM0MzspIHsKJiM0MzsJCXRyYWNpbmdfb24oKTsKJiM0MzsJCSgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTsKJiM0MzsJCXRyYWNpbmdfb2ZmKCk7CiYjNDM7CX0KIAogCWtzZnRfZmluaXNoZWQoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMKaW5kZXggMjU1YjMzMmY3YTA4YjIuLmFiZjcwOGQ2NTc1ZWMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwpAQCAtMiw5ICYjNDM7Miw5NSBAQAogI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18KICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzO3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwomIzQzOwkvKgomIzQzOwkgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlcgomIzQzOwkgKiBwa2V5X2Fzc2VydCgpCiYjNDM7CSAqLwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIHN0cik7CiYjNDM7CQlwZXJyb3IoJiMzNDtlcnJvcjogJiMzNDspOwomIzQzOwkJZXhpdChfX0xJTkVfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpOwomIzQzOwlpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZpbGVuYW1lOiAmIzM5OyVzJiMzOTsgc3RyOiAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBmaWxlLCBzdHIpOwomIzQzOwkJZXhpdChfX0xJTkVfXyk7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nOwomIzQzO3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCWlmICghd2FybmVkX3RyYWNpbmcpCiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCAmIzM0OwomIzQzOwkJCQkJJiMzNDtjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxuJiMzNDspOwomIzQzOwkJd2FybmVkX3RyYWNpbmcgPSAxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKQomIzQzO3sKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzOyNkZWZpbmUgVFJBQ0VESVIgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nJiMzNDsKJiM0MzsJY2hhciBwaWRzdHJbMzJdOwomIzQzOwomIzQzOwlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcHJpbnRmKHBpZHN0ciwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDtcbiYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjZSYjMzQ7KTsKJiM0MzsJaWYgKDEpIHsKJiM0MzsJCWNhdF9pbnRvX2ZpbGUoJiMzNDtmdW5jdGlvbl9ncmFwaCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKJiM0MzsJCWNhdF9pbnRvX2ZpbGUoJiMzNDsxJiMzNDssIFRSQUNFRElSICYjMzQ7L29wdGlvbnMvZnVuY2dyYXBoLXByb2MmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7bm9wJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwomIzQzOwl9CiYjNDM7CWNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiAmIzM0Oy9zZXRfZnRyYWNlX3BpZCYjMzQ7KTsKJiM0MzsJY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKJiM0MzsJZHByaW50ZjEoJiMzNDtlbmFibGVkIHRyYWNpbmdcbiYjMzQ7KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKQomIzQzO3sKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzOwlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCAmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vbiYjMzQ7KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKQomIzQzO3sKJiM0MzsJZmZsdXNoKHN0ZG91dCk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3J1bm5pbmcgJXMoKS4uLlxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJdHJhY2luZ19vZmYoKTsKJiM0MzsjaWZkZWYgU0xFRVBfT05fQUJPUlQKJiM0MzsJc2xlZXAoU0xFRVBfT05fQUJPUlQpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKQogewogCWludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCA5YTZkOTU0ZWUzNzEyNi4uOTZhNGViMjZmMzI2MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCkBAIC02Miw4OSAmIzQzOzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKQogCXJldHVybiAqcHRyOwogfQogCi0jaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAotc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpCi17Ci0JaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwotCWludCByZXQ7Ci0KLQlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwotCS8qCi0JICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXIKLQkgKiBwa2V5X2Fzc2VydCgpCi0JICovCi0JaWYgKGZkICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIHN0cik7Ci0JCXBlcnJvcigmIzM0O2Vycm9yOiAmIzM0Oyk7Ci0JCWV4aXQoX19MSU5FX18pOwotCX0KLQotCXJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKLQlpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7Ci0JCXBlcnJvcigmIzM0O3dyaXRlIHRvIGZpbGUgZmFpbGVkJiMzNDspOwotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmaWxlbmFtZTogJiMzOTslcyYjMzk7IHN0cjogJiMzOTslcyYjMzk7XG4mIzM0OywgZmlsZSwgc3RyKTsKLQkJZXhpdChfX0xJTkVfXyk7Ci0JfQotCWNsb3NlKGZkKTsKLX0KLQotc3RhdGljIGludCB3YXJuZWRfdHJhY2luZzsKLXN0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpCi17Ci0JaWYgKGdldGV1aWQoKSAhPSAwKSB7Ci0JCWlmICghd2FybmVkX3RyYWNpbmcpCi0JCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsICYjMzQ7Ci0JCQkJCSYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcbiYjMzQ7KTsKLQkJd2FybmVkX3RyYWNpbmcgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKQotewotI2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKLSNkZWZpbmUgVFJBQ0VESVIgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nJiMzNDsKLQljaGFyIHBpZHN0clszMl07Ci0KLQlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQotCQlyZXR1cm47Ci0KLQlzcHJpbnRmKHBpZHN0ciwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0OzAmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKLQljYXRfaW50b19maWxlKCYjMzQ7XG4mIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2UmIzM0Oyk7Ci0JaWYgKDEpIHsKLQkJY2F0X2ludG9fZmlsZSgmIzM0O2Z1bmN0aW9uX2dyYXBoJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwotCQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9vcHRpb25zL2Z1bmNncmFwaC1wcm9jJiMzNDspOwotCX0gZWxzZSB7Ci0JCWNhdF9pbnRvX2ZpbGUoJiMzNDtub3AmIzM0OywgVFJBQ0VESVIgJiMzNDsvY3VycmVudF90cmFjZXImIzM0Oyk7Ci0JfQotCWNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiAmIzM0Oy9zZXRfZnRyYWNlX3BpZCYjMzQ7KTsKLQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjaW5nX29uJiMzNDspOwotCWRwcmludGYxKCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXG4mIzM0Oyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgdHJhY2luZ19vZmYodm9pZCkKLXsKLSNpZiBDT05UUk9MX1RSQUNJTkcgJmd0OyAwCi0JaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKLQkJcmV0dXJuOwotCWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uJiMzNDspOwotI2VuZGlmCi19Ci0KLXZvaWQgYWJvcnRfaG9va3Modm9pZCkKLXsKLQlmZmx1c2goc3Rkb3V0KTsKLQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtydW5uaW5nICVzKCkuLi5cbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JdHJhY2luZ19vZmYoKTsKLSNpZmRlZiBTTEVFUF9PTl9BQk9SVAotCXNsZWVwKFNMRUVQX09OX0FCT1JUKTsKLSNlbmRpZgotfQotCiAvKgogICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZldwogICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0CkBAIC02NjksNyAmIzQzOzU4Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCQkJc2l6ZSwgcHJvdCwgcGtleSk7CiAJcGtleV9hc3NlcnQocGtleSAmbHQ7IE5SX1BLRVlTKTsKIAlwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAlyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KCFyZXQpOwogCXJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpOwpAQCAtNjkyLDcgJiM0Mzs2MDksNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfYW5vbl9odWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCSAqLwogCXNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKIAltcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7CiAKQEAgLTc1MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpCiAJc2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTsKIAlwa2V5X2Fzc2VydChwa2V5ICZsdDsgTlJfUEtFWVMpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApOwotCXBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJcGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwogCW1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTsKIAogCXJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpOwpAQCAtNzc5LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpCiAJCXBrZXlfYXNzZXJ0KG1hbGxvY190eXBlICZsdDsgbnJfbWFsbG9jX3R5cGVzKTsKIAogCQlyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7Ci0JCXBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTsKJiM0MzsJCXBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTsKIAogCQltYWxsb2NfdHlwZSYjNDM7JiM0Mzs7CiAJCWlmIChtYWxsb2NfdHlwZSAmZ3Q7PSBucl9tYWxsb2NfdHlwZXMpCkBAIC0xMTk3LDYgJiM0MzsxMTE0LDcgQEAgc3RhdGljIHZvaWQgYXJjaF9mb3JjZV9wa2V5X3JlZ19pbml0KHZvaWQpCiAJICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuCiAJICovCiAJYnVmID0gbW1hcChOVUxMLCAxKk1CLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwomIzQzOwlwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqLwogCkBAIC0xNzYzLDcgJiM0MzsxNjgxLDggQEAgaW50IG1haW4odm9pZCkKIAkJa3NmdF9wcmludF9tc2coJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xuJiMzNDspOwogCiAJCXB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwotCQlhc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwkJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21tYXAmIzM0Oyk7CiAJCXRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7cGtleSBvbiB1bnN1cHBvcnRlZCBDUFUvT1NcbiYjMzQ7KTsKIAkJa3NmdF9maW5pc2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTIwCgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoZXNlIGFyZSBzZWxmdGVzdHMsIHVzZXItc3BhY2UgcHJvZ3JhbXMsIG5vdCBrZXJuZWwgY29kZS4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBmdW5jdGlvbmFsbHkgYWx0ZXIga2VybmVsIGV4ZWN1dGlvbiBmbG93PyYjMzQ7IE5vLCBpdCBtb2RpZmllcyB0aGUgKnRlc3QqLCBub3QgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZSAqbm8qIGtlcm5lbCBjaGFuZ2VzLgoKTGV0IG1lIGNvbmZpcm0uLi4gWWVwLCB0aGUgZGlmZiAqb25seSogaW1wYWN0cyB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS4gVGhlcmVmb3JlLCBubyBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgbWVhbnMsIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgZmFsc2UuCgpMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXQgc3BlY2lmaWVzOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4uLiYjMzQ7LiBTaW5jZSB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogdG91Y2ggY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBjb25jbHVzaW9uLiBUaGUgcGF0Y2ggc29sZWx5IGltcGFjdHMgdXNlci1zcGFjZSBzZWxmdGVzdHM7IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byBrZXJuZWwgY29kZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBmaWxlcyBpbXBhY3RlZDoKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oYAotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY2AKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jYAoKWXVwLCBhbGwgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBzdWJ0cmVlLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEwOjU4OjM4Ljc3NjE1NDQ1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODQ0MjMzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEwOjU4OjM4Ljc3NjE2MzY4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MzkzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmNiY2Y3NzA5YTVhYTE5OGNiOTFhOTZmYzQ3NmJkZTU4YWEyNjNhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMDo1ODozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG5AQCAtNjgsNyArNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXFxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxcbiAjZGVmaW5lIGRwcmludGY0KGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoNCwgYXJncylcXG4gXFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xcbit2b2lkIHRyYWNpbmdfb24odm9pZCk7XFxuK3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XFxuK3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XFxuICNkZWZpbmUgcGtleV9hc3NlcnQoY29uZGl0aW9uKSBkbyB7XFx0XFx0XFxcXFxcbiBcXHRpZiAoIShjb25kaXRpb24pKSB7XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRkcHJpbnRmMChcXFwiIyBhc3NlcnQoKSBhdCAlczo6JWQgdGVzdF9ucjogJWQgaXRlcmF0aW9uOiAlZFxcXFxuXFxcIiwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXFxuaW5kZXggMTdiZjJkMWIwMTkyZTAuLjJjZTg1NTgwYjQwNDg3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG5AQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdF9zdWJwYWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwXFxuIFxcdFxcdFxcdHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHRyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uZjMwYzk5NjVhNTYxZDkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbkBAIC0xOSw3ICsxOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG5AQCAtMzYsNiArMzUsMTAgQEAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7XFxuIHN0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xcbiBzdGF0aWMgc2lnaW5mb190IHNpZ2luZm8gPSB7MH07XFxuIFxcbitpbnQgaXRlcmF0aW9uX25yID0gMTtcXG4raW50IHRlc3RfbnI7XFxuK2ludCBkcHJpbnRfaW5fc2lnbmFsO1xcbitcXG4gLypcXG4gICogV2UgbmVlZCB0byB1c2UgaW5saW5lIGFzc2VtYmx5IGluc3RlYWQgb2YgZ2xpYmMncyBzeXNjYWxsIGJlY2F1c2UgZ2xpYmMnc1xcbiAgKiBzeXNjYWxsIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIFBMVCBpbiBvcmRlciB0byBjYWxsIGEgbGlicmFyeSBmdW5jdGlvblxcbkBAIC0yMDcsMjIgKzIxMCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XFxuIFxcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuIFxcdHB0aHJlYWRfdCB0aHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbiBcXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNm11dGV4KTtcXG4gXFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcXG5AQCAtMjQ3LDIyICsyNTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxcbiBcXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbiBcXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xcbiBcXHRwdGhyZWFkX3QgdGhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xcbiBcXG4gXFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xcbiBcXHRzaWdlbXB0eXNldChcXHUwMDI2c2Euc2FfbWFzayk7XFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcXG4gXFxuIFxcdHB0aHJlYWRfYXR0cl9pbml0KFxcdTAwMjZhdHRyKTtcXG4gXFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFxcdTAwMjZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyLCBcXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2bXV0ZXgpO1xcbiBcXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxcbkBAIC0yODgsMjEgKzI5MSwyMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxcbiBcXHRpbnQgcGFyZW50X3BpZCA9IDA7XFxuIFxcdGludCBjaGlsZF9waWQgPSAwO1xcbiBcXHR1NjQgcGtleV9yZWc7XFxuK1xcdGxvbmcgcmV0O1xcbiBcXG4gXFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcXG4gXFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuIFxcbi1cXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xcbiBcXHRwa2V5X3JlZyA9IHBrZXlfcmVnX3Jlc3RyaWN0aXZlX2RlZmF1bHQoKTtcXG5AQCAtMzE3LDEzICszMTksMTQgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcXG4gXFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cXG4gXFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdFxcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xcbitcXHRwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xcbiBcXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcXG4gXFxuIFxcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xcbi1cXHRsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4gXFx0XFx0XFx0ICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcXG4gXFx0XFx0XFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcXG5AQCAtMzMzLDcgKzMzNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRlcnJubyA9IC1yZXQ7XFxuLVxcdFxcdHBlcnJvcihcXFwiY2xvbmVcXFwiKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQoMCk7XFxuIFxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0dGhyZWFkX3NlZ3ZfbWFwZXJyX3B0cihcXHUwMDI2c2lnc3RhY2spO1xcbiBcXHRcXHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XFxuQEAgLTM1OCw2ICszNjEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbiBcXHR1NjQgcGtleV9yZWc7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqL1xcbiBcXHRwa2V5X3JlZyA9IHBrZXlfcmVnX3Jlc3RyaWN0aXZlX2RlZmF1bHQoKTtcXG5AQCAtMzY5LDEwICszNzMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XFxuIFxcbkBAIC00NDQsNiArNDQ2LDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcXG4gXFx0aW50IHBhcmVudF9waWQgPSAwO1xcbiBcXHRpbnQgY2hpbGRfcGlkID0gMDtcXG4gXFx0dTY0IHBrZXlfcmVnO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNJR1NFR1YgaGFuZGxlciBpcyByZXNldCB0byBTSUdfREZMIGJlbG93OyB0dXJuIHRyYWNpbmcgb2ZmIGZpcnN0XFxuK1xcdCAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHR0cmFjaW5nX29mZigpO1xcbiBcXG4gXFx0c2Euc2FfaGFuZGxlciA9IFNJR19ERkw7XFxuIFxcdHNhLnNhX2ZsYWdzID0gMDtcXG5AQCAtNDUzLDI0ICs0NjIsMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxcbiBcXHQgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXJcXG4gXFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cXG4gXFx0ICovXFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7XFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbiBcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuIFxcbi1cXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZFxcbkBAIC00OTAsMTEgKzQ5NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcdC8qIFNldCB1cCBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRoYXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgTVBLICovXFxuIFxcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHRcXHQgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdHNpZ3N0YWNrLnNzX2ZsYWdzID0gMDtcXG4gXFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XFxuIFxcbiBcXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cXG4tXFx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbiBcXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuQEAgLTUwNCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRlcnJubyA9IC1yZXQ7XFxuLVxcdFxcdHBlcnJvcihcXFwiY2xvbmVcXFwiKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQoMCk7XFxuIFxcdH0gIGVsc2UgaWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdHRocmVhZF9zaWd1c3IyX3NlbGYoXFx1MDAyNnNpZ3N0YWNrKTtcXG4gXFx0XFx0c3lzY2FsbF9yYXcoU1lTX2V4aXQsIDAsIDAsIDAsIDAsIDAsIDApO1xcbkBAIC01MzAsMTYgKzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7XFxuIFxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcXG4gXFxuIFxcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJwa2V5cyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpKyspXFxuLVxcdFxcdCgqcGtleV90ZXN0c1tpXSkoKTtcXG4rXFx0Zm9yICh0ZXN0X25yID0gMDsgdGVzdF9uciBcXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IHRlc3RfbnIrKykge1xcbitcXHRcXHR0cmFjaW5nX29uKCk7XFxuK1xcdFxcdCgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTtcXG4rXFx0XFx0dHJhY2luZ19vZmYoKTtcXG4rXFx0fVxcbiBcXG4gXFx0a3NmdF9maW5pc2hlZCgpO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xcbmluZGV4IDI1NWIzMzJmN2EwOGIyLi5hYmY3MDhkNjU3NWVjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuQEAgLTIsOSArMiw5NSBAQFxcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfX1xcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJwa2V5LWhlbHBlcnMuaFxcXCJcXG4gXFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRwcmludGYyKFxcXCIlcygpOiB3cml0aW5nICclcycgdG8gJyVzJ1xcXFxuXFxcIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XFxuK1xcdC8qXFxuK1xcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXFxuK1xcdCAqIHBrZXlfYXNzZXJ0KClcXG4rXFx0ICovXFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJlcnJvciBvcGVuaW5nICclcydcXFxcblxcXCIsIHN0cik7XFxuK1xcdFxcdHBlcnJvcihcXFwiZXJyb3I6IFxcXCIpO1xcbitcXHRcXHRleGl0KF9fTElORV9fKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xcbitcXHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmaWxlbmFtZTogJyVzJyBzdHI6ICclcydcXFxcblxcXCIsIGZpbGUsIHN0cik7XFxuK1xcdFxcdGV4aXQoX19MSU5FX18pO1xcbitcXHR9XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcXG4rc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcXG4rXFx0XFx0aWYgKCF3YXJuZWRfdHJhY2luZylcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImNhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxcXG5cXFwiKTtcXG4rXFx0XFx0d2FybmVkX3RyYWNpbmcgPSAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3ZvaWQgdHJhY2luZ19vbih2b2lkKVxcbit7XFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuKyNkZWZpbmUgVFJBQ0VESVIgXFxcIi9zeXMva2VybmVsL3RyYWNpbmdcXFwiXFxuK1xcdGNoYXIgcGlkc3RyWzMyXTtcXG4rXFxuK1xcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwcmludGYocGlkc3RyLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiXFxcXG5cXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNlXFxcIik7XFxuK1xcdGlmICgxKSB7XFxuK1xcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcImZ1bmN0aW9uX2dyYXBoXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIm5vcFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4rXFx0fVxcbitcXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXFxcIi9zZXRfZnRyYWNlX3BpZFxcXCIpO1xcbitcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuK1xcdGRwcmludGYxKFxcXCJlbmFibGVkIHRyYWNpbmdcXFxcblxcXCIpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKVxcbit7XFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK1xcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb25cXFwiKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3ZvaWQgYWJvcnRfaG9va3Modm9pZClcXG4re1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJydW5uaW5nICVzKCkuLi5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0dHJhY2luZ19vZmYoKTtcXG4rI2lmZGVmIFNMRUVQX09OX0FCT1JUXFxuK1xcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxcbiB7XFxuIFxcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuaW5kZXggOWE2ZDk1NGVlMzcxMjYuLjk2YTRlYjI2ZjMyNjAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNjIsODkgKzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxcbiBcXHRyZXR1cm4gKnB0cjtcXG4gfVxcbiBcXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcXHUwMDNlIDBcXG4tc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXFxuLXtcXG4tXFx0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0ZHByaW50ZjIoXFxcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxcXG5cXFwiLCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcXG4tXFx0LypcXG4tXFx0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcXG4tXFx0ICogcGtleV9hc3NlcnQoKVxcbi1cXHQgKi9cXG4tXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImVycm9yIG9wZW5pbmcgJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4tXFx0XFx0cGVycm9yKFxcXCJlcnJvcjogXFxcIik7XFxuLVxcdFxcdGV4aXQoX19MSU5FX18pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7XFxuLVxcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJ3cml0ZSB0byBmaWxlIGZhaWxlZFxcXCIpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcXFxuXFxcIiwgZmlsZSwgc3RyKTtcXG4tXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuLVxcdH1cXG4tXFx0Y2xvc2UoZmQpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xcbi1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxcbi17XFxuLVxcdGlmIChnZXRldWlkKCkgIT0gMCkge1xcbi1cXHRcXHRpZiAoIXdhcm5lZF90cmFjaW5nKVxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXFxcIlxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiY2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXFxcblxcXCIpO1xcbi1cXHRcXHR3YXJuZWRfdHJhY2luZyA9IDE7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiAxO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKVxcbi17XFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuLSNkZWZpbmUgVFJBQ0VESVIgXFxcIi9zeXMva2VybmVsL3RyYWNpbmdcXFwiXFxuLVxcdGNoYXIgcGlkc3RyWzMyXTtcXG4tXFxuLVxcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHNwcmludGYocGlkc3RyLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiXFxcXG5cXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNlXFxcIik7XFxuLVxcdGlmICgxKSB7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcImZ1bmN0aW9uX2dyYXBoXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbi1cXHRcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXFxcIik7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIm5vcFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4tXFx0fVxcbi1cXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXFxcIi9zZXRfZnRyYWNlX3BpZFxcXCIpO1xcbi1cXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuLVxcdGRwcmludGYxKFxcXCJlbmFibGVkIHRyYWNpbmdcXFxcblxcXCIpO1xcbi0jZW5kaWZcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vZmYodm9pZClcXG4te1xcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbi1cXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXFxcIik7XFxuLSNlbmRpZlxcbi19XFxuLVxcbi12b2lkIGFib3J0X2hvb2tzKHZvaWQpXFxuLXtcXG4tXFx0ZmZsdXNoKHN0ZG91dCk7XFxuLVxcdGZwcmludGYoc3RkZXJyLCBcXFwicnVubmluZyAlcygpLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLVxcdHRyYWNpbmdfb2ZmKCk7XFxuLSNpZmRlZiBTTEVFUF9PTl9BQk9SVFxcbi1cXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XFxuLSNlbmRpZlxcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIGF0dGVtcHRzIHRvIGhhdmUgcm91Z2hseSBhIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmV3XFxuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxcbkBAIC02NjksNyArNTg2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXFxuIFxcdFxcdFxcdHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdHJldCA9IG1wcm90ZWN0X3BrZXkoKHZvaWQgKilwdHIsIFBBR0VfU0laRSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KCFyZXQpO1xcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG5AQCAtNjkyLDcgKzYwOSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXFxuIFxcdCAqL1xcbiBcXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XFxuIFxcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcXG4gXFxuQEAgLTc1MCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfaHVnZXRsYihsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcXG4gXFx0cGtleV9hc3NlcnQocGtleSBcXHUwMDNjIE5SX1BLRVlTKTtcXG4gXFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XFxuLVxcdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG5AQCAtNzc5LDcgKzY5Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0XFx0cGtleV9hc3NlcnQobWFsbG9jX3R5cGUgXFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xcbiBcXG4gXFx0XFx0cmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpO1xcbi1cXHRcXHRwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7XFxuK1xcdFxcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdFxcdG1hbGxvY190eXBlKys7XFxuIFxcdFxcdGlmIChtYWxsb2NfdHlwZSBcXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXFxuQEAgLTExOTcsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxcbiBcXHQgKiBkb2luZyB0aGUgWFNBVkUgc2l6ZSBlbnVtZXJhdGlvbiBkYW5jZS5cXG4gXFx0ICovXFxuIFxcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4rXFx0cGtleV9hc3NlcnQoYnVmICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LyogVGhlc2UgX19idWlsdGlucyByZXF1aXJlIGNvbXBpbGluZyB3aXRoIC1teHNhdmUgKi9cXG4gXFxuQEAgLTE3NjMsNyArMTY4MSw4IEBAIGludCBtYWluKHZvaWQpXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHRwdHIgID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0XFx0YXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0XFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXBcXFwiKTtcXG4gXFx0XFx0dGVzdF9tcHJvdGVjdF9wa2V5X29uX3Vuc3VwcG9ydGVkX2NwdShwdHIsIDEpO1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcInBrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxcXG5cXFwiKTtcXG4gXFx0XFx0a3NmdF9maW5pc2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMDo1ODozOS4yNzUzNjE0NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwODUxOTYwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmNiY2Y3NzA5YTVhYTE5OGNiOTFhOTZmYzQ3NmJkZTU4YWEyNjNhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDEwOjU4OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5AQCAtNjgsNyArNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXG4gI2RlZmluZSBkcHJpbnRmNChhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDQsIGFyZ3MpXG4gXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4rdm9pZCB0cmFjaW5nX29uKHZvaWQpO1xuK3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcbiAjZGVmaW5lIHBrZXlfYXNzZXJ0KGNvbmRpdGlvbikgZG8ge1x0XHRcXFxuIFx0aWYgKCEoY29uZGl0aW9uKSkge1x0XHRcdFxcXG4gXHRcdGRwcmludGYwKFwiIyBhc3NlcnQoKSBhdCAlczo6JWQgdGVzdF9ucjogJWQgaXRlcmF0aW9uOiAlZFxcblwiLCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3Rfc3VicGFnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcFxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHRyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5mMzBjOTk2NWE1NjFkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuQEAgLTE5LDcgKzE5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuQEAgLTM2LDYgKzM1LDEwIEBAIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuIHN0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuIHN0YXRpYyBzaWdpbmZvX3Qgc2lnaW5mbyA9IHswfTtcbiBcbitpbnQgaXRlcmF0aW9uX25yID0gMTtcbitpbnQgdGVzdF9ucjtcbitpbnQgZHByaW50X2luX3NpZ25hbDtcbitcbiAvKlxuICAqIFdlIG5lZWQgdG8gdXNlIGlubGluZSBhc3NlbWJseSBpbnN0ZWFkIG9mIGdsaWJjJ3Mgc3lzY2FsbCBiZWNhdXNlIGdsaWJjJ3NcbiAgKiBzeXNjYWxsIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIFBMVCBpbiBvcmRlciB0byBjYWxsIGEgbGlicmFyeSBmdW5jdGlvblxuQEAgLTIwNywyMiArMjEwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfcGtleTBfZGlzYWJsZWQodm9pZClcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuIFx0cHRocmVhZF90IHRocjtcbitcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuIFx0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4gXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXHUwMDI2YXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyLCBcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgKzI1MCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl9jYW5ub3RfYWNjZXNzX3N0YWNrKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuQEAgLTI4OCwyMSArMjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbitcdGxvbmcgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcbiBcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDEgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTMxNywxMyArMzE5LDE0IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTtcbiBcdHNpZ3N0YWNrLnNzX2ZsYWdzID0gMDtcbiBcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG4gXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cbi1cdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiBcdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbiBcdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4gXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbkBAIC0zMzMsNyArMzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZXJybm8gPSAtcmV0O1xuLVx0XHRwZXJyb3IoXCJjbG9uZVwiKTtcbitcdFx0cGtleV9hc3NlcnQoMCk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zZWd2X21hcGVycl9wdHIoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5AQCAtMzU4LDYgKzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCArMzczLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuQEAgLTQ0NCw2ICs0NDYsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRsb25nIHJldDtcbitcbitcdC8qXG4rXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuK1x0ICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC5cbitcdCAqL1xuK1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCArNDYyLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcbiBcdCAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlclxuIFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cbiBcdCAqL1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAyLiBUaGUgY2hpbGQgdGhyZWFkICh0byBiZSBjcmVhdGVkXG5AQCAtNDkwLDExICs0OTUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbitcdHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuIFx0XHRcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuIFx0XHRcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcbiBcdFx0XHQgICAgIENMT05FX0RFVEFDSEVELFxuQEAgLTUwNCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwiY2xvbmVcIik7XG4rXHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgKzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUocGtleV90ZXN0cykpO1xuIFxuIFx0aWYgKCFpc19wa2V5c19zdXBwb3J0ZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJwa2V5cyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSsrKVxuLVx0XHQoKnBrZXlfdGVzdHNbaV0pKCk7XG4rXHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yKyspIHtcbitcdFx0dHJhY2luZ19vbigpO1xuK1x0XHQoKnBrZXlfdGVzdHNbdGVzdF9ucl0pKCk7XG4rXHRcdHRyYWNpbmdfb2ZmKCk7XG4rXHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uYWJmNzA4ZDY1NzVlYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgKzIsOTUgQEBcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfX1xuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInBrZXktaGVscGVycy5oXCJcbiBcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4re1xuK1x0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuK1x0aW50IHJldDtcbitcbitcdGRwcmludGYyKFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXG5cIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XG4rXHQvKlxuK1x0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbitcdCAqIHBrZXlfYXNzZXJ0KClcbitcdCAqL1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImVycm9yIG9wZW5pbmcgJyVzJ1xcblwiLCBzdHIpO1xuK1x0XHRwZXJyb3IoXCJlcnJvcjogXCIpO1xuK1x0XHRleGl0KF9fTElORV9fKTtcbitcdH1cbitcbitcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbitcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbitcdFx0cGVycm9yKFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcblwiLCBmaWxlLCBzdHIpO1xuK1x0XHRleGl0KF9fTElORV9fKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcbitzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuK3tcbitcdGlmIChnZXRldWlkKCkgIT0gMCkge1xuK1x0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXCJcbitcdFx0XHRcdFx0XCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcblwiKTtcbitcdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldHVybiAxO1xuK31cbisjZW5kaWZcbitcbit2b2lkIHRyYWNpbmdfb24odm9pZClcbit7XG4rI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuKyNkZWZpbmUgVFJBQ0VESVIgXCIvc3lzL2tlcm5lbC90cmFjaW5nXCJcbitcdGNoYXIgcGlkc3RyWzMyXTtcbitcbitcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwcmludGYocGlkc3RyLCBcIiVkXCIsIGdldHBpZCgpKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFRSQUNFRElSIFwiL3RyYWNpbmdfb25cIik7XG4rXHRjYXRfaW50b19maWxlKFwiXFxuXCIsIFRSQUNFRElSIFwiL3RyYWNlXCIpO1xuK1x0aWYgKDEpIHtcbitcdFx0Y2F0X2ludG9fZmlsZShcImZ1bmN0aW9uX2dyYXBoXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuK1x0XHRjYXRfaW50b19maWxlKFwiMVwiLCBUUkFDRURJUiBcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y2F0X2ludG9fZmlsZShcIm5vcFwiLCBUUkFDRURJUiBcIi9jdXJyZW50X3RyYWNlclwiKTtcbitcdH1cbitcdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcIi9zZXRfZnRyYWNlX3BpZFwiKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL3RyYWNpbmdfb25cIik7XG4rXHRkcHJpbnRmMShcImVuYWJsZWQgdHJhY2luZ1xcblwiKTtcbisjZW5kaWZcbit9XG4rXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuK3tcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuK1x0XHRyZXR1cm47XG4rXHRjYXRfaW50b19maWxlKFwiMFwiLCBcIi9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwiKTtcbisjZW5kaWZcbit9XG4rXG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKVxuK3tcbitcdGZmbHVzaChzdGRvdXQpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwicnVubmluZyAlcygpLi4uXFxuXCIsIF9fZnVuY19fKTtcbitcdHRyYWNpbmdfb2ZmKCk7XG4rI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4rXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4rI2VuZGlmXG4rfVxuK1xuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxuIHtcbiBcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li45NmE0ZWIyNmYzMjYwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTYyLDg5ICs2Miw2IEBAIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cilcbiBcdHJldHVybiAqcHRyO1xuIH1cbiBcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4te1xuLVx0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuLVx0aW50IHJldDtcbi1cbi1cdGRwcmludGYyKFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXG5cIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XG4tXHQvKlxuLVx0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbi1cdCAqIHBrZXlfYXNzZXJ0KClcbi1cdCAqL1xuLVx0aWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcImVycm9yIG9wZW5pbmcgJyVzJ1xcblwiLCBzdHIpO1xuLVx0XHRwZXJyb3IoXCJlcnJvcjogXCIpO1xuLVx0XHRleGl0KF9fTElORV9fKTtcbi1cdH1cbi1cbi1cdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbi1cdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbi1cdFx0cGVycm9yKFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcIik7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcblwiLCBmaWxlLCBzdHIpO1xuLVx0XHRleGl0KF9fTElORV9fKTtcbi1cdH1cbi1cdGNsb3NlKGZkKTtcbi19XG4tXG4tc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcbi1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuLXtcbi1cdGlmIChnZXRldWlkKCkgIT0gMCkge1xuLVx0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXCJcbi1cdFx0XHRcdFx0XCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcblwiKTtcbi1cdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiAxO1xuLX1cbi0jZW5kaWZcbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29uKHZvaWQpXG4te1xuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi0jZGVmaW5lIFRSQUNFRElSIFwiL3N5cy9rZXJuZWwvdHJhY2luZ1wiXG4tXHRjaGFyIHBpZHN0clszMl07XG4tXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzcHJpbnRmKHBpZHN0ciwgXCIlZFwiLCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwiMFwiLCBUUkFDRURJUiBcIi90cmFjaW5nX29uXCIpO1xuLVx0Y2F0X2ludG9fZmlsZShcIlxcblwiLCBUUkFDRURJUiBcIi90cmFjZVwiKTtcbi1cdGlmICgxKSB7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCJmdW5jdGlvbl9ncmFwaFwiLCBUUkFDRURJUiBcIi9jdXJyZW50X3RyYWNlclwiKTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wiKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCJub3BcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4tXHR9XG4tXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXCIvc2V0X2Z0cmFjZV9waWRcIik7XG4tXHRjYXRfaW50b19maWxlKFwiMVwiLCBUUkFDRURJUiBcIi90cmFjaW5nX29uXCIpO1xuLVx0ZHByaW50ZjEoXCJlbmFibGVkIHRyYWNpbmdcXG5cIik7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpXG4te1xuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1cdGlmICghdHJhY2luZ19yb290X29rKCkpXG4tXHRcdHJldHVybjtcbi1cdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCIpO1xuLSNlbmRpZlxuLX1cbi1cbi12b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4te1xuLVx0ZmZsdXNoKHN0ZG91dCk7XG4tXHRmcHJpbnRmKHN0ZGVyciwgXCJydW5uaW5nICVzKCkuLi5cXG5cIiwgX19mdW5jX18pO1xuLVx0dHJhY2luZ19vZmYoKTtcbi0jaWZkZWYgU0xFRVBfT05fQUJPUlRcbi1cdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcbi0jZW5kaWZcbi19XG4tXG4gLypcbiAgKiBUaGlzIGF0dGVtcHRzIHRvIGhhdmUgcm91Z2hseSBhIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmV3XG4gICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0XG5AQCAtNjY5LDcgKzU4Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyArNjA5LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdCAqL1xuIFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbiBcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcbiBcbkBAIC03NTAsNyArNjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XG4gXG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC03NzksNyArNjk2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0XHRwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSBcdTAwM2MgbnJfbWFsbG9jX3R5cGVzKTtcbiBcbiBcdFx0cmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpO1xuLVx0XHRwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7XG4rXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUrKztcbiBcdFx0aWYgKG1hbGxvY190eXBlIFx1MDAzZT0gbnJfbWFsbG9jX3R5cGVzKVxuQEAgLTExOTcsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbitcdHBrZXlfYXNzZXJ0KGJ1ZiAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIFRoZXNlIF9fYnVpbHRpbnMgcmVxdWlyZSBjb21waWxpbmcgd2l0aCAtbXhzYXZlICovXG4gXG5AQCAtMTc2Myw3ICsxNjgxLDggQEAgaW50IG1haW4odm9pZClcbiBcdFx0a3NmdF9wcmludF9tc2coXCJydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwiKTtcbiBcbiBcdFx0cHRyICA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRcdGFzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwXCIpO1xuIFx0XHR0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInBrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCIpO1xuIFx0XHRrc2Z0X2ZpbmlzaGVkKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMDo1ODozOS4yNzUzNjQ1NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg1MTE5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhlc2UgYXJlIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSBwcm9ncmFtcywgbm90IGtlcm5lbCBjb2RlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgbW9kaWZpY2F0aW9uIGZ1bmN0aW9uYWxseSBhbHRlciBrZXJuZWwgZXhlY3V0aW9uIGZsb3c/XCIgTm8sIGl0IG1vZGlmaWVzIHRoZSAqdGVzdCosIG5vdCB0aGUga2VybmVsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlICpubyoga2VybmVsIGNoYW5nZXMuXG5cbkxldCBtZSBjb25maXJtLi4uIFllcCwgdGhlIGRpZmYgKm9ubHkqIGltcGFjdHMgdGhhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuIFRoZXJlZm9yZSwgbm8gZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUga2VybmVsLiBUaGlzIG1lYW5zLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgdGhhdCBXb3J0aEZ1enppbmcgc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXQgc3BlY2lmaWVzOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4uLlwiLiBTaW5jZSB0aGlzIHBhdGNoICpkb2Vzbid0KiB0b3VjaCBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBjb25jbHVzaW9uLiBUaGUgcGF0Y2ggc29sZWx5IGltcGFjdHMgdXNlci1zcGFjZSBzZWxmdGVzdHM7IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGtlcm5lbCBjb2RlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgcmV2aWV3IHRoZSBmaWxlcyBpbXBhY3RlZDpcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY2Bcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNgXG5cbll1cCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Agc3VidHJlZS5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTIwLCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTA6NTg6NDguMzYwNDkwMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdvqt2[0].run-triage(0) Phase: Succeeded StartedAt: 2026-06-29 10:50:28 +0000 UTC FinishedAt: 2026-06-29 10:58:50 +0000 UTC Input: nil Output: &Outputs{Parameters:[]Parameter{Parameter{Name:result,Default:nil,Value:*{ "skip_reason": "AI determined the patch has no functional impact", "targets": null, "trajectory": "CjwhZG9jdHlwZSBodG1sPgo8aHRtbD4KPGhlYWQ+Cgk8dGl0bGU+QUkgVHJhamVjdG9yeTwvdGl0bGU+Cgk8c3R5bGU+CgkJdGFibGUgewoJCQlib3JkZXI6IDFweCBzb2xpZCAjY2NjOwoJCQltYXJnaW46IDIwcHggNXB4OwoJCQlib3JkZXItY29sbGFwc2U6IGNvbGxhcHNlOwoJCQl3aGl0ZS1zcGFjZTogbm93cmFwOwoJCQl0ZXh0LW92ZXJmbG93OiBlbGxpcHNpczsKCQkJb3ZlcmZsb3c6IGhpZGRlbjsKCQl9CgoJCXRhYmxlIGNhcHRpb24gewoJCQlmb250LXdlaWdodDogYm9sZDsKCQl9CgoJCXRhYmxlIHRkLCB0YWJsZSB0aCB7CgkJCXZlcnRpY2FsLWFsaWduOiB0b3A7CgkJCXBhZGRpbmc6IDJweCA4cHg7CgkJCXRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzOwoJCQlvdmVyZmxvdzogaGlkZGVuOwoJCX0KCgkJLmxpc3RfdGFibGUgdGQsIC5saXN0X3RhYmxlIHRoIHsKCQkJYm9yZGVyLWxlZnQ6IDFweCBzb2xpZCAjY2NjOwoJCX0KCgkJLmxpc3RfdGFibGUgdGggewoJCQliYWNrZ3JvdW5kOiAjRjRGNEY0OwoJCX0KCgkJLmxpc3RfdGFibGUgdHI6bnRoLWNoaWxkKDJuKSB7CgkJCWJhY2tncm91bmQ6ICNGNEY0RjQ7CgkJfQoKCQkubGlzdF90YWJsZSB0cjpob3ZlciB7CgkJCWJhY2tncm91bmQ6ICNmZmZmOTk7CgkJfQoKCQkjYWlfZGV0YWlsc19kaXYgcHJlIHsKCQkJbWFyZ2luOiAxcHg7CgkJCW1heC13aWR0aDogMTIwY2g7CgkJCXdoaXRlLXNwYWNlOiBwcmUtd3JhcDsKCQkJb3ZlcmZsb3ctd3JhcDogYnJlYWstd29yZDsKCQl9Cgk8L3N0eWxlPgo8L2hlYWQ+Cjxib2R5PgoJPGgxPkFJIFRyYWplY3Rvcnk8L2gxPgoJPGJyPgoKCQoJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQk8Y2FwdGlvbj5UcmFqZWN0b3J5OiAoPGEgaHJlZj0iIyIgb25jbGljaz0idG9nZ2xlQWxsRGV0YWlscygpOyByZXR1cm4gZmFsc2U7Ij5FeHBhbmQvQ29sbGFwc2UgQWxsPC9hPik8L2NhcHRpb24+CgkJPHRoZWFkPjx0cj4KCQkJPHRoPlNlcTwvdGg+CgkJCTx0aD5UaW1lc3RhbXA8L3RoPgoJCQk8dGg+VHlwZTwvdGg+CgkJCTx0aD5OYW1lPC90aD4KCQkJPHRoPkR1cmF0aW9uPC90aD4KCQk8L3RyPjwvdGhlYWQ+CgkJPHRib2R5PgoJCQoJCTx0cj4KCQkJPHRkPjAvMDwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+MS8xPC90ZD4KCQkJPHRkPjIwMjYvMDYvMjkgMTA6NTg8L3RkPgoJCQk8dGQ+YWN0aW9uPC90ZD4KCQkJPHRkPnJlYWQtcGF0Y2gtZGlmZjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1BhdGNoRGlmZiYjMzQ7OiAmIzM0O2NvbW1pdCBiY2JjZjc3MDlhNWFhMTk4Y2I5MWE5NmZjNDc2YmRlNThhYTI2M2FhXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIE1vbiBKdW4gMjkgMTA6NTg6MzcgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5AQCAtNjgsNyAmIzQzOzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKVxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxuICNkZWZpbmUgZHByaW50ZjQoYXJncy4uLikgZHByaW50Zl9sZXZlbCg0LCBhcmdzKVxuIFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xuJiM0Mzt2b2lkIHRyYWNpbmdfb24odm9pZCk7XG4mIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XG4mIzQzO3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4gI2RlZmluZSBwa2V5X2Fzc2VydChjb25kaXRpb24pIGRvIHtcdFx0XFxcbiBcdGlmICghKGNvbmRpdGlvbikpIHtcdFx0XHRcXFxuIFx0XHRkcHJpbnRmMChcJiMzNDsjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXFxuXCYjMzQ7LCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG4mIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuQEAgLTEyNiw3ICYjNDM7MTI2LDcgQEAgc3RhdGljIGlubGluZSB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0X3N1YnBhZ2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBcbiBcdFx0XHRzaXplLCBwcm90LCBwa2V5KTtcbiBcdHBrZXlfYXNzZXJ0KHBrZXkgXHUwMDNjIE5SX1BLRVlTKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdHJldCA9IHN5c2NhbGwoX19OUl9zdWJwYWdlX3Byb3QsIHB0ciwgc2l6ZSwgTlVMTCk7XG4gXHRpZiAocmV0KSB7XG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuaW5kZXggMzAyZmVmNTQwNDljODcuLmYzMGM5OTY1YTU2MWQ5IDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG5AQCAtMTksNyAmIzQzOzE5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuQEAgLTM2LDYgJiM0MzszNSwxMCBAQCBzdGF0aWMgcHRocmVhZF9tdXRleF90IG11dGV4ID0gUFRIUkVBRF9NVVRFWF9JTklUSUFMSVpFUjtcbiBzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjtcbiBzdGF0aWMgc2lnaW5mb190IHNpZ2luZm8gPSB7MH07XG4gXG4mIzQzO2ludCBpdGVyYXRpb25fbnIgPSAxO1xuJiM0MztpbnQgdGVzdF9ucjtcbiYjNDM7aW50IGRwcmludF9pbl9zaWduYWw7XG4mIzQzO1xuIC8qXG4gICogV2UgbmVlZCB0byB1c2UgaW5saW5lIGFzc2VtYmx5IGluc3RlYWQgb2YgZ2xpYmMmIzM5O3Mgc3lzY2FsbCBiZWNhdXNlIGdsaWJjJiMzOTtzXG4gICogc3lzY2FsbCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBQTFQgaW4gb3JkZXIgdG8gY2FsbCBhIGxpYnJhcnkgZnVuY3Rpb25cbkBAIC0yMDcsMjIgJiM0MzsyMTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9wa2V5MF9kaXNhYmxlZCh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4mIzQzO1x0cmV0ID0gcHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyLCBcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgJiM0MzsyNTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHB0aHJlYWRfYXR0cl90IGF0dHI7XG4gXHRwdGhyZWFkX3QgdGhyO1xuJiM0MztcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbiYjNDM7XHRyZXQgPSBwdGhyZWFkX2NyZWF0ZShcdTAwMjZ0aHIsIFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0cHRocmVhZF9tdXRleF9sb2NrKFx1MDAyNm11dGV4KTtcbiBcdHdoaWxlIChzaWdpbmZvLnNpX3NpZ25vID09IDApXG5AQCAtMjg4LDIxICYjNDM7MjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRsb25nIHJldDtcbiBcbiBcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcJiMzNDtzaWdhY3Rpb25cJiMzNDspO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4mIzQzO1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSxcbiBcdFx0ICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcbiBcbi1cdGFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDEgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTMxNywxMyAmIzQzOzMxOSwxNCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiYjNDM7XHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiBcdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbiBcdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4gXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbkBAIC0zMzMsNyAmIzQzOzMzNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSBlbHNlIGlmIChyZXQgPT0gMCkge1xuIFx0XHR0aHJlYWRfc2Vndl9tYXBlcnJfcHRyKFx1MDAyNnNpZ3N0YWNrKTtcbiBcdFx0c3lzY2FsbF9yYXcoU1lTX2V4aXQsIDAsIDAsIDAsIDAsIDAsIDApO1xuQEAgLTM1OCw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4ge1xuIFx0c3RydWN0IHNpZ2FjdGlvbiBzYTtcbiBcdHU2NCBwa2V5X3JlZztcbiYjNDM7XHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCAmIzQzOzM3Myw4IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMV9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IxLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG5AQCAtNDQ0LDYgJiM0Mzs0NDYsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4mIzQzO1x0bG9uZyByZXQ7XG4mIzQzO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogU0lHU0VHViBoYW5kbGVyIGlzIHJlc2V0IHRvIFNJR19ERkwgYmVsb3c7IHR1cm4gdHJhY2luZyBvZmYgZmlyc3RcbiYjNDM7XHQgKiBzbyBhIGNyYXNoIGRvZXMgbm90IGxlYXZlIGZ0cmFjZSBlbmFibGVkLlxuJiM0MztcdCAqL1xuJiM0MztcdHRyYWNpbmdfb2ZmKCk7XG4gXG4gXHRzYS5zYV9oYW5kbGVyID0gU0lHX0RGTDtcbiBcdHNhLnNhX2ZsYWdzID0gMDtcbkBAIC00NTMsMjQgJiM0Mzs0NjIsMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0ICogRm9yIHRoaXMgdGVzdGNhc2UsIHdlIGRvIG5vdCB3YW50IHRvIGhhbmRsZSBTSUdTRUdWLiBSZXNldCBoYW5kbGVyXG4gXHQgKiB0byBkZWZhdWx0IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBjcmFzaCBpZiBpdCByZWNlaXZlcyBTSUdTRUdWLlxuIFx0ICovXG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7c2lnYWN0aW9uXCYjMzQ7KTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuJiM0MztcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4mIzQzO1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwmIzM0O3NpZ2FjdGlvblwmIzM0Oyk7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbiYjNDM7XHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHN0YWNrID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHQgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuIFxuLVx0YXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xuIFxuIFx0LypcbiBcdCAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWRcbkBAIC00OTAsMTEgJiM0Mzs0OTUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpO1xuIFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xuIFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XG4gXG4gXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cbi1cdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4mIzQzO1x0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4gXHRcdFx0ICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XG4gXHRcdFx0ICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfFxuIFx0XHRcdCAgICAgQ0xPTkVfREVUQUNIRUQsXG5AQCAtNTA0LDcgJiM0Mzs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwmIzM0O2Nsb25lXCYjMzQ7KTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgJiM0Mzs1MzYsMTcgQEAgc3RhdGljIHZvaWQgKCpwa2V5X3Rlc3RzW10pKHZvaWQpID0ge1xuIFxuIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pXG4ge1xuLVx0aW50IGk7XG4tXG4gXHRrc2Z0X3ByaW50X2hlYWRlcigpO1xuIFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcbiBcbiBcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXG4gXHRcdGtzZnRfZXhpdF9za2lwKFwmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcXG5cJiMzNDspO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSYjNDM7JiM0MzspXG4tXHRcdCgqcGtleV90ZXN0c1tpXSkoKTtcbiYjNDM7XHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yJiM0MzsmIzQzOykge1xuJiM0MztcdFx0dHJhY2luZ19vbigpO1xuJiM0MztcdFx0KCpwa2V5X3Rlc3RzW3Rlc3RfbnJdKSgpO1xuJiM0MztcdFx0dHJhY2luZ19vZmYoKTtcbiYjNDM7XHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uYWJmNzA4ZDY1NzVlYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgJiM0MzsyLDk1IEBAXG4gI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX19cbiAjaW5jbHVkZSBcdTAwM2NzeXMvc3lzY2FsbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjdW5pc3RkLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjZmNudGwuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY3N0cmluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXCYjMzQ7cGtleS1oZWxwZXJzLmhcJiMzNDtcbiBcbiYjNDM7I2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuJiM0MztzdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbiYjNDM7e1xuJiM0MztcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcbiYjNDM7XHRpbnQgcmV0O1xuJiM0MztcbiYjNDM7XHRkcHJpbnRmMihcJiMzNDslcygpOiB3cml0aW5nICYjMzk7JXMmIzM5OyB0byAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpO1xuJiM0MztcdC8qXG4mIzQzO1x0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbiYjNDM7XHQgKiBwa2V5X2Fzc2VydCgpXG4mIzQzO1x0ICovXG4mIzQzO1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4mIzQzO1x0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZXJyb3Igb3BlbmluZyAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIHN0cik7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4mIzQzO1x0XHRleGl0KF9fTElORV9fKTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbiYjNDM7XHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XG4mIzQzO1x0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuJiM0MztcdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2ZpbGVuYW1lOiAmIzM5OyVzJiMzOTsgc3RyOiAmIzM5OyVzJiMzOTtcXG5cJiMzNDssIGZpbGUsIHN0cik7XG4mIzQzO1x0XHRleGl0KF9fTElORV9fKTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2xvc2UoZmQpO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xuJiM0MztzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuJiM0Mzt7XG4mIzQzO1x0aWYgKGdldGV1aWQoKSAhPSAwKSB7XG4mIzQzO1x0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuJiM0MztcdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbiYjNDM7XHRcdFx0XHRcdFwmIzM0O2NhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHdhcm5lZF90cmFjaW5nID0gMTtcbiYjNDM7XHRcdHJldHVybiAwO1xuJiM0MztcdH1cbiYjNDM7XHRyZXR1cm4gMTtcbiYjNDM7fVxuJiM0MzsjZW5kaWZcbiYjNDM7XG4mIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKVxuJiM0Mzt7XG4mIzQzOyNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbiYjNDM7I2RlZmluZSBUUkFDRURJUiBcJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nXCYjMzQ7XG4mIzQzO1x0Y2hhciBwaWRzdHJbMzJdO1xuJiM0MztcbiYjNDM7XHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRzcHJpbnRmKHBpZHN0ciwgXCYjMzQ7JWRcJiMzNDssIGdldHBpZCgpKTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0O1xcblwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L3RyYWNlXCYjMzQ7KTtcbiYjNDM7XHRpZiAoMSkge1xuJiM0MztcdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbiYjNDM7XHRcdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7MVwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L29wdGlvbnMvZnVuY2dyYXBoLXByb2NcJiMzNDspO1xuJiM0MztcdH0gZWxzZSB7XG4mIzQzO1x0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbiYjNDM7XHR9XG4mIzQzO1x0Y2F0X2ludG9fZmlsZShwaWRzdHIsIFRSQUNFRElSIFwmIzM0Oy9zZXRfZnRyYWNlX3BpZFwmIzM0Oyk7XG4mIzQzO1x0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4mIzQzO1x0ZHByaW50ZjEoXCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXFxuXCYjMzQ7KTtcbiYjNDM7I2VuZGlmXG4mIzQzO31cbiYjNDM7XG4mIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZClcbiYjNDM7e1xuJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4mIzQzO1x0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4mIzQzOyNlbmRpZlxuJiM0Mzt9XG4mIzQzO1xuJiM0Mzt2b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4mIzQzO3tcbiYjNDM7XHRmZmx1c2goc3Rkb3V0KTtcbiYjNDM7XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7cnVubmluZyAlcygpLi4uXFxuXCYjMzQ7LCBfX2Z1bmNfXyk7XG4mIzQzO1x0dHJhY2luZ19vZmYoKTtcbiYjNDM7I2lmZGVmIFNMRUVQX09OX0FCT1JUXG4mIzQzO1x0c2xlZXAoU0xFRVBfT05fQUJPUlQpO1xuJiM0MzsjZW5kaWZcbiYjNDM7fVxuJiM0MztcbiBpbnQgc3lzX3BrZXlfYWxsb2ModW5zaWduZWQgbG9uZyBmbGFncywgdW5zaWduZWQgbG9uZyBpbml0X3ZhbClcbiB7XG4gXHRpbnQgcmV0ID0gc3lzY2FsbChTWVNfcGtleV9hbGxvYywgZmxhZ3MsIGluaXRfdmFsKTtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG5pbmRleCA5YTZkOTU0ZWUzNzEyNi4uOTZhNGViMjZmMzI2MDMgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbkBAIC02Miw4OSAmIzQzOzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxuIFx0cmV0dXJuICpwdHI7XG4gfVxuIFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1zdGF0aWMgdm9pZCBjYXRfaW50b19maWxlKGNoYXIgKnN0ciwgY2hhciAqZmlsZSlcbi17XG4tXHRpbnQgZmQgPSBvcGVuKGZpbGUsIE9fUkRXUik7XG4tXHRpbnQgcmV0O1xuLVxuLVx0ZHByaW50ZjIoXCYjMzQ7JXMoKTogd3JpdGluZyAmIzM5OyVzJiMzOTsgdG8gJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcbi1cdC8qXG4tXHQgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlclxuLVx0ICogcGtleV9hc3NlcnQoKVxuLVx0ICovXG4tXHRpZiAoZmQgXHUwMDNjIDApIHtcbi1cdFx0ZnByaW50ZihzdGRlcnIsIFwmIzM0O2Vycm9yIG9wZW5pbmcgJiMzOTslcyYjMzk7XFxuXCYjMzQ7LCBzdHIpO1xuLVx0XHRwZXJyb3IoXCYjMzQ7ZXJyb3I6IFwmIzM0Oyk7XG4tXHRcdGV4aXQoX19MSU5FX18pO1xuLVx0fVxuLVxuLVx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xuLVx0aWYgKHJldCAhPSBzdHJsZW4oc3RyKSkge1xuLVx0XHRwZXJyb3IoXCYjMzQ7d3JpdGUgdG8gZmlsZSBmYWlsZWRcJiMzNDspO1xuLVx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7ZmlsZW5hbWU6ICYjMzk7JXMmIzM5OyBzdHI6ICYjMzk7JXMmIzM5O1xcblwmIzM0OywgZmlsZSwgc3RyKTtcbi1cdFx0ZXhpdChfX0xJTkVfXyk7XG4tXHR9XG4tXHRjbG9zZShmZCk7XG4tfVxuLVxuLXN0YXRpYyBpbnQgd2FybmVkX3RyYWNpbmc7XG4tc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcbi17XG4tXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcbi1cdFx0aWYgKCF3YXJuZWRfdHJhY2luZylcbi1cdFx0XHRmcHJpbnRmKHN0ZGVyciwgXCYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCBcJiMzNDtcbi1cdFx0XHRcdFx0XCYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXG5cJiMzNDspO1xuLVx0XHR3YXJuZWRfdHJhY2luZyA9IDE7XG4tXHRcdHJldHVybiAwO1xuLVx0fVxuLVx0cmV0dXJuIDE7XG4tfVxuLSNlbmRpZlxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb24odm9pZClcbi17XG4tI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuLSNkZWZpbmUgVFJBQ0VESVIgXCYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZ1wmIzM0O1xuLVx0Y2hhciBwaWRzdHJbMzJdO1xuLVxuLVx0aWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSlcbi1cdFx0cmV0dXJuO1xuLVxuLVx0c3ByaW50ZihwaWRzdHIsIFwmIzM0OyVkXCYjMzQ7LCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFRSQUNFRElSIFwmIzM0Oy90cmFjaW5nX29uXCYjMzQ7KTtcbi1cdGNhdF9pbnRvX2ZpbGUoXCYjMzQ7XFxuXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2VcJiMzNDspO1xuLVx0aWYgKDEpIHtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDtmdW5jdGlvbl9ncmFwaFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wmIzM0Oyk7XG4tXHR9IGVsc2Uge1xuLVx0XHRjYXRfaW50b19maWxlKFwmIzM0O25vcFwmIzM0OywgVFJBQ0VESVIgXCYjMzQ7L2N1cnJlbnRfdHJhY2VyXCYjMzQ7KTtcbi1cdH1cbi1cdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcJiMzNDsvc2V0X2Z0cmFjZV9waWRcJiMzNDspO1xuLVx0Y2F0X2ludG9fZmlsZShcJiMzNDsxXCYjMzQ7LCBUUkFDRURJUiBcJiMzNDsvdHJhY2luZ19vblwmIzM0Oyk7XG4tXHRkcHJpbnRmMShcJiMzNDtlbmFibGVkIHRyYWNpbmdcXG5cJiMzNDspO1xuLSNlbmRpZlxuLX1cbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuLXtcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXHRjYXRfaW50b19maWxlKFwmIzM0OzBcJiMzNDssIFwmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwmIzM0Oyk7XG4tI2VuZGlmXG4tfVxuLVxuLXZvaWQgYWJvcnRfaG9va3Modm9pZClcbi17XG4tXHRmZmx1c2goc3Rkb3V0KTtcbi1cdGZwcmludGYoc3RkZXJyLCBcJiMzNDtydW5uaW5nICVzKCkuLi5cXG5cJiMzNDssIF9fZnVuY19fKTtcbi1cdHRyYWNpbmdfb2ZmKCk7XG4tI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4tXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4tI2VuZGlmXG4tfVxuLVxuIC8qXG4gICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZld1xuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxuQEAgLTY2OSw3ICYjNDM7NTg2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdFx0c2l6ZSwgcHJvdCwgcGtleSk7XG4gXHRwa2V5X2Fzc2VydChwa2V5IFx1MDAzYyBOUl9QS0VZUyk7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbi1cdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyAmIzQzOzYwOSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHQgKi9cbiBcdHNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7XG4gXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcbiBcdHJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuQEAgLTc1MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4mIzQzO1x0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xuIFx0bXByb3RlY3RfcGtleShwdHIsIHNpemUsIHByb3QsIHBrZXkpO1xuIFxuIFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XG5AQCAtNzc5LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRcdHBrZXlfYXNzZXJ0KG1hbGxvY190eXBlIFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xuIFxuIFx0XHRyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7XG4tXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTtcbiYjNDM7XHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUmIzQzOyYjNDM7O1xuIFx0XHRpZiAobWFsbG9jX3R5cGUgXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXG5AQCAtMTE5Nyw2ICYjNDM7MTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbiYjNDM7XHRwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHQvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqL1xuIFxuQEAgLTE3NjMsNyAmIzQzOzE2ODEsOCBAQCBpbnQgbWFpbih2b2lkKVxuIFx0XHRrc2Z0X3ByaW50X21zZyhcJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwmIzM0Oyk7XG4gXG4gXHRcdHB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xuLVx0XHRhc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xuJiM0MztcdFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxuJiM0MztcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCYjMzQ7bW1hcFwmIzM0Oyk7XG4gXHRcdHRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTtcbiBcdFx0a3NmdF90ZXN0X3Jlc3VsdF9wYXNzKFwmIzM0O3BrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCYjMzQ7KTtcbiBcdFx0a3NmdF9maW5pc2hlZCgpO1xuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjIvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPmFnZW50PC90ZD4KCQkJPHRkPnBhdGNoLWV2YWx1YXRvcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQk8Yj5Nb2RlbDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPmdlbWluaS0zLjEtcHJvLXByZXZpZXc8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5JbnN0cnVjdGlvbjo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLgpZb3VyIGpvYiBpcyB0byByZXZpZXcgYSBwcm92aWRlZCBwYXRjaCBzZXJpZXMgYW5kIGRldGVybWluZQppZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuCgpJTVBPUlRBTlQ6IFRoZSBjaGFuZ2VzIGhhdmUgQUxSRUFEWSBiZWVuIGFwcGxpZWQgYW5kIGNvbW1pdHRlZCBhcyB0aGUgSEVBRCBjb21taXQgaW4KeW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5CnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuCgpSZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOgotIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuCi0gUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlcywgc3VjaCBhcyBsb2dnaW5nIChlLmcuLCBwcl9lcnIsIHByaW50aykgb3IgdHJhY2Vwb2ludHMuCi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LgotIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSwKZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuCiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy4KICAgRG8gbm90IGxpc3QgdG9vIGdlbmVyaWMgY29uZmlncyAod2UgYWxyZWFkeSBoYXZlIHRoZW0gZW5hYmxlZCkuIE9ubHkgbGlzdCB0aG9zZSB0aGF0CiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSwKICAgYW5kIERPIE5PVCBhZGQgYSAmIzM5O0NPTkZJR18mIzM5OyBwcmVmaXggKGUuZy4sIHJldHVybiAmIzM0O05FVF9JUFY0JiMzNDsgaW5zdGVhZCBvZiAmIzM0O0NPTkZJR19ORVRfSVBWNCYjMzQ7KS4KUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuCgoKVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy4KSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuCklnbm9yZSByZXN1bHRzIG9mIHRoaXMgdG9vbC4KPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Qcm9tcHQ6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Gb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczoKY29tbWl0IGJjYmNmNzcwOWE1YWExOThjYjkxYTk2ZmM0NzZiZGU1OGFhMjYzYWEKQXV0aG9yOiBzeXotY2x1c3RlciAmbHQ7dHJpYWdlQHN5emthbGxlci5jb20mZ3Q7CkRhdGU6ICAgTW9uIEp1biAyOSAxMDo1ODozNyAyMDI2ICYjNDM7MDAwMAoKICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlldwoKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmgKaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaAomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaApAQCAtNjgsNyAmIzQzOzY4LDkgQEAgc3RhdGljIGlubGluZSB2b2lkIHNpZ3NhZmVfcHJpbnRmKGNvbnN0IGNoYXIgKmZvcm1hdCwgLi4uKQogI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpCiAjZGVmaW5lIGRwcmludGY0KGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoNCwgYXJncykKIAotZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7CiYjNDM7dm9pZCB0cmFjaW5nX29uKHZvaWQpOwomIzQzO3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7CiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKTsKICNkZWZpbmUgcGtleV9hc3NlcnQoY29uZGl0aW9uKSBkbyB7CQlcCiAJaWYgKCEoY29uZGl0aW9uKSkgewkJCVwKIAkJZHByaW50ZjAoJiMzNDsjIGFzc2VydCgpIGF0ICVzOjolZCB0ZXN0X25yOiAlZCBpdGVyYXRpb246ICVkXG4mIzM0OywgXApkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaAppbmRleCAxN2JmMmQxYjAxOTJlMC4uMmNlODU1ODBiNDA0ODcgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oCkBAIC0xMjYsNyAmIzQzOzEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdF9zdWJwYWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwCiAJCQlzaXplLCBwcm90LCBwa2V5KTsKIAlwa2V5X2Fzc2VydChwa2V5ICZsdDsgTlJfUEtFWVMpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgcHJvdCwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwotCXBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJcGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwogCiAJcmV0ID0gc3lzY2FsbChfX05SX3N1YnBhZ2VfcHJvdCwgcHRyLCBzaXplLCBOVUxMKTsKIAlpZiAocmV0KSB7CmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jCmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5mMzBjOTk2NWE1NjFkOSAxMDA2NDQKLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKJiM0MzsmIzQzOyYjNDM7IGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmMKQEAgLTE5LDcgJiM0MzsxOSw2IEBACiAjaW5jbHVkZSAmbHQ7c3RkaW50LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3RkYm9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O3NpZ25hbC5oJmd0OwotI2luY2x1ZGUgJmx0O2Fzc2VydC5oJmd0OwogI2luY2x1ZGUgJmx0O3N0ZGxpYi5oJmd0OwogI2luY2x1ZGUgJmx0O3N5cy9tbWFuLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7c3lzL3R5cGVzLmgmZ3Q7CkBAIC0zNiw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7CiBzdGF0aWMgcHRocmVhZF9jb25kX3QgY29uZCA9IFBUSFJFQURfQ09ORF9JTklUSUFMSVpFUjsKIHN0YXRpYyBzaWdpbmZvX3Qgc2lnaW5mbyA9IHswfTsKIAomIzQzO2ludCBpdGVyYXRpb25fbnIgPSAxOwomIzQzO2ludCB0ZXN0X25yOwomIzQzO2ludCBkcHJpbnRfaW5fc2lnbmFsOwomIzQzOwogLyoKICAqIFdlIG5lZWQgdG8gdXNlIGlubGluZSBhc3NlbWJseSBpbnN0ZWFkIG9mIGdsaWJjJiMzOTtzIHN5c2NhbGwgYmVjYXVzZSBnbGliYyYjMzk7cwogICogc3lzY2FsbCB3aWxsIGF0dGVtcHQgdG8gYWNjZXNzIHRoZSBQTFQgaW4gb3JkZXIgdG8gY2FsbCBhIGxpYnJhcnkgZnVuY3Rpb24KQEAgLTIwNywyMiAmIzQzOzIxMCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpCiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAlwdGhyZWFkX2F0dHJfdCBhdHRyOwogCXB0aHJlYWRfdCB0aHI7CiYjNDM7CWludCByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87CiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCiAJcHRocmVhZF9hdHRyX2luaXQoJmFtcDthdHRyKTsKIAlwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoJmFtcDthdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7CiAKLQlwdGhyZWFkX2NyZWF0ZSgmYW1wO3RociwgJmFtcDthdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTsKJiM0MzsJcmV0ID0gcHRocmVhZF9jcmVhdGUoJmFtcDt0aHIsICZhbXA7YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjQ3LDIyICYjNDM7MjUwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX2Nhbm5vdF9hY2Nlc3Nfc3RhY2sodm9pZCkKIAlzdHJ1Y3Qgc2lnYWN0aW9uIHNhOwogCXB0aHJlYWRfYXR0cl90IGF0dHI7CiAJcHRocmVhZF90IHRocjsKJiM0MzsJaW50IHJldDsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTzsKIAogCXNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjsKIAlzaWdlbXB0eXNldCgmYW1wO3NhLnNhX21hc2spOwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAlwdGhyZWFkX2F0dHJfaW5pdCgmYW1wO2F0dHIpOwogCXB0aHJlYWRfYXR0cl9zZXRkZXRhY2hzdGF0ZSgmYW1wO2F0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTsKIAotCXB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXJldCA9IHB0aHJlYWRfY3JlYXRlKCZhbXA7dGhyLCAmYW1wO2F0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXB0aHJlYWRfbXV0ZXhfbG9jaygmYW1wO211dGV4KTsKIAl3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKQpAQCAtMjg4LDIxICYjNDM7MjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpCiAJaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiAKIAlzYS5zYV9mbGFncyA9IFNBX1NJR0lORk8gfCBTQV9PTlNUQUNLOwogCiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyOwogCiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAxICovCiAJcGtleV9yZWcgPSBwa2V5X3JlZ19yZXN0cmljdGl2ZV9kZWZhdWx0KCk7CkBAIC0zMTcsMTMgJiM0MzszMTksMTQgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAkvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqLwogCXNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogCQkJICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHNpZ3N0YWNrLnNzX3NwICE9IE1BUF9GQUlMRUQpOwogCXNpZ3N0YWNrLnNzX2ZsYWdzID0gMDsKIAlzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTsKIAogCW1lbXNldCgmYW1wO3NpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKIAkJCSAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAogCQkJICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfAogCQkJICAgICBDTE9ORV9ERVRBQ0hFRCwKQEAgLTMzMyw3ICYjNDM7MzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZCkKIAogCWlmIChyZXQgJmx0OyAwKSB7CiAJCWVycm5vID0gLXJldDsKLQkJcGVycm9yKCYjMzQ7Y2xvbmUmIzM0Oyk7CiYjNDM7CQlwa2V5X2Fzc2VydCgwKTsKIAl9IGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zZWd2X21hcGVycl9wdHIoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTM1OCw2ICYjNDM7MzYxLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpCiB7CiAJc3RydWN0IHNpZ2FjdGlvbiBzYTsKIAl1NjQgcGtleV9yZWc7CiYjNDM7CWludCByZXQ7CiAKIAkvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqLwogCXBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpOwpAQCAtMzY5LDEwICYjNDM7MzczLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpCiAKIAlzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7CiAJc2lnZW1wdHlzZXQoJmFtcDtzYS5zYV9tYXNrKTsKLQlpZiAoc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAltZW1zZXQoJmFtcDtzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpOwogCkBAIC00NDQsNiAmIzQzOzQ0NiwxMyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpCiAJaW50IHBhcmVudF9waWQgPSAwOwogCWludCBjaGlsZF9waWQgPSAwOwogCXU2NCBwa2V5X3JlZzsKJiM0MzsJbG9uZyByZXQ7CiYjNDM7CiYjNDM7CS8qCiYjNDM7CSAqIFNJR1NFR1YgaGFuZGxlciBpcyByZXNldCB0byBTSUdfREZMIGJlbG93OyB0dXJuIHRyYWNpbmcgb2ZmIGZpcnN0CiYjNDM7CSAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuCiYjNDM7CSAqLwomIzQzOwl0cmFjaW5nX29mZigpOwogCiAJc2Euc2FfaGFuZGxlciA9IFNJR19ERkw7CiAJc2Euc2FfZmxhZ3MgPSAwOwpAQCAtNDUzLDI0ICYjNDM7NDYyLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZCkKIAkgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXIKIAkgKiB0byBkZWZhdWx0IHNvIHRoYXQgdGhlIGFwcGxpY2F0aW9uIGNhbiBjcmFzaCBpZiBpdCByZWNlaXZlcyBTSUdTRUdWLgogCSAqLwotCWlmIChzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCkgPT0gLTEpIHsKLQkJcGVycm9yKCYjMzQ7c2lnYWN0aW9uJiMzNDspOwotCQlleGl0KEVYSVRfRkFJTFVSRSk7Ci0JfQomIzQzOwlyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgJmFtcDtzYSwgTlVMTCk7CiYjNDM7CXBrZXlfYXNzZXJ0KHJldCA9PSAwKTsKIAogCXNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7CiAJc2Euc2Ffc2lnYWN0aW9uID0gc2lndXNyMl9oYW5kbGVyOwogCXNpZ2VtcHR5c2V0KCZhbXA7c2Euc2FfbWFzayk7CiAKLQlpZiAoc2lnYWN0aW9uKFNJR1VTUjIsICZhbXA7c2EsIE5VTEwpID09IC0xKSB7Ci0JCXBlcnJvcigmIzM0O3NpZ2FjdGlvbiYjMzQ7KTsKLQkJZXhpdChFWElUX0ZBSUxVUkUpOwotCX0KJiM0MzsJcmV0ID0gc2lnYWN0aW9uKFNJR1VTUjIsICZhbXA7c2EsIE5VTEwpOwomIzQzOwlwa2V5X2Fzc2VydChyZXQgPT0gMCk7CiAKIAlzdGFjayA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTsKIAotCWFzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTsKJiM0MzsJcGtleV9hc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKgogCSAqIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDIuIFRoZSBjaGlsZCB0aHJlYWQgKHRvIGJlIGNyZWF0ZWQKQEAgLTQ5MCwxMSAmIzQzOzQ5NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpCiAJLyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi8KIAlzaWdzdGFjay5zc19zcCA9IG1tYXAoMCwgU1RBQ0tfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKIAkJCSAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApOwomIzQzOwlwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTsKIAlzaWdzdGFjay5zc19mbGFncyA9IDA7CiAJc2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7CiAKIAkvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi8KLQlsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfAomIzQzOwlyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHwKIAkJCSAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfAogCQkJICAgICBDTE9ORV9QQVJFTlRfU0VUVElEIHwgQ0xPTkVfQ0hJTERfQ0xFQVJUSUQgfAogCQkJICAgICBDTE9ORV9ERVRBQ0hFRCwKQEAgLTUwNCw3ICYjNDM7NTEwLDcgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKQogCiAJaWYgKHJldCAmbHQ7IDApIHsKIAkJZXJybm8gPSAtcmV0OwotCQlwZXJyb3IoJiMzNDtjbG9uZSYjMzQ7KTsKJiM0MzsJCXBrZXlfYXNzZXJ0KDApOwogCX0gIGVsc2UgaWYgKHJldCA9PSAwKSB7CiAJCXRocmVhZF9zaWd1c3IyX3NlbGYoJmFtcDtzaWdzdGFjayk7CiAJCXN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTsKQEAgLTUzMCwxNiAmIzQzOzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7CiAKIGludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCiB7Ci0JaW50IGk7Ci0KIAlrc2Z0X3ByaW50X2hlYWRlcigpOwogCWtzZnRfc2V0X3BsYW4oQVJSQVlfU0laRShwa2V5X3Rlc3RzKSk7CiAKIAlpZiAoIWlzX3BrZXlzX3N1cHBvcnRlZCgpKQogCQlrc2Z0X2V4aXRfc2tpcCgmIzM0O3BrZXlzIG5vdCBzdXBwb3J0ZWRcbiYjMzQ7KTsKIAotCWZvciAoaSA9IDA7IGkgJmx0OyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpJiM0MzsmIzQzOykKLQkJKCpwa2V5X3Rlc3RzW2ldKSgpOwomIzQzOwlmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yICZsdDsgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgdGVzdF9uciYjNDM7JiM0MzspIHsKJiM0MzsJCXRyYWNpbmdfb24oKTsKJiM0MzsJCSgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTsKJiM0MzsJCXRyYWNpbmdfb2ZmKCk7CiYjNDM7CX0KIAogCWtzZnRfZmluaXNoZWQoKTsKIAlyZXR1cm4gMDsKZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMKaW5kZXggMjU1YjMzMmY3YTA4YjIuLmFiZjcwOGQ2NTc1ZWMxIDEwMDY0NAotLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwomIzQzOyYjNDM7JiM0MzsgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYwpAQCAtMiw5ICYjNDM7Miw5NSBAQAogI2RlZmluZSBfX1NBTkVfVVNFUlNQQUNFX1RZUEVTX18KICNpbmNsdWRlICZsdDtzeXMvc3lzY2FsbC5oJmd0OwogI2luY2x1ZGUgJmx0O3VuaXN0ZC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtmY250bC5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdGRpby5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtzdHJpbmcuaCZndDsKIAogI2luY2x1ZGUgJiMzNDtwa2V5LWhlbHBlcnMuaCYjMzQ7CiAKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzO3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKQomIzQzO3sKJiM0MzsJaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwomIzQzOwlpbnQgcmV0OwomIzQzOwomIzQzOwlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwomIzQzOwkvKgomIzQzOwkgKiB0aGVzZSBuZWVkIHRvIGJlIHJhdyBiZWNhdXNlIHRoZXkgYXJlIGNhbGxlZCB1bmRlcgomIzQzOwkgKiBwa2V5X2Fzc2VydCgpCiYjNDM7CSAqLwomIzQzOwlpZiAoZmQgJmx0OyAwKSB7CiYjNDM7CQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIHN0cik7CiYjNDM7CQlwZXJyb3IoJiMzNDtlcnJvcjogJiMzNDspOwomIzQzOwkJZXhpdChfX0xJTkVfXyk7CiYjNDM7CX0KJiM0MzsKJiM0MzsJcmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpOwomIzQzOwlpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7CiYjNDM7CQlwZXJyb3IoJiMzNDt3cml0ZSB0byBmaWxlIGZhaWxlZCYjMzQ7KTsKJiM0MzsJCWZwcmludGYoc3RkZXJyLCAmIzM0O2ZpbGVuYW1lOiAmIzM5OyVzJiMzOTsgc3RyOiAmIzM5OyVzJiMzOTtcbiYjMzQ7LCBmaWxlLCBzdHIpOwomIzQzOwkJZXhpdChfX0xJTkVfXyk7CiYjNDM7CX0KJiM0MzsJY2xvc2UoZmQpOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nOwomIzQzO3N0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpCiYjNDM7ewomIzQzOwlpZiAoZ2V0ZXVpZCgpICE9IDApIHsKJiM0MzsJCWlmICghd2FybmVkX3RyYWNpbmcpCiYjNDM7CQkJZnByaW50ZihzdGRlcnIsICYjMzQ7V0FSTklORzogbm90IHJ1biBhcyByb290LCAmIzM0OwomIzQzOwkJCQkJJiMzNDtjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxuJiMzNDspOwomIzQzOwkJd2FybmVkX3RyYWNpbmcgPSAxOwomIzQzOwkJcmV0dXJuIDA7CiYjNDM7CX0KJiM0MzsJcmV0dXJuIDE7CiYjNDM7fQomIzQzOyNlbmRpZgomIzQzOwomIzQzO3ZvaWQgdHJhY2luZ19vbih2b2lkKQomIzQzO3sKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzOyNkZWZpbmUgVFJBQ0VESVIgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nJiMzNDsKJiM0MzsJY2hhciBwaWRzdHJbMzJdOwomIzQzOwomIzQzOwlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwlzcHJpbnRmKHBpZHN0ciwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssIFRSQUNFRElSICYjMzQ7L3RyYWNpbmdfb24mIzM0Oyk7CiYjNDM7CWNhdF9pbnRvX2ZpbGUoJiMzNDtcbiYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjZSYjMzQ7KTsKJiM0MzsJaWYgKDEpIHsKJiM0MzsJCWNhdF9pbnRvX2ZpbGUoJiMzNDtmdW5jdGlvbl9ncmFwaCYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9jdXJyZW50X3RyYWNlciYjMzQ7KTsKJiM0MzsJCWNhdF9pbnRvX2ZpbGUoJiMzNDsxJiMzNDssIFRSQUNFRElSICYjMzQ7L29wdGlvbnMvZnVuY2dyYXBoLXByb2MmIzM0Oyk7CiYjNDM7CX0gZWxzZSB7CiYjNDM7CQljYXRfaW50b19maWxlKCYjMzQ7bm9wJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwomIzQzOwl9CiYjNDM7CWNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiAmIzM0Oy9zZXRfZnRyYWNlX3BpZCYjMzQ7KTsKJiM0MzsJY2F0X2ludG9fZmlsZSgmIzM0OzEmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKJiM0MzsJZHByaW50ZjEoJiMzNDtlbmFibGVkIHRyYWNpbmdcbiYjMzQ7KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCB0cmFjaW5nX29mZih2b2lkKQomIzQzO3sKJiM0MzsjaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAomIzQzOwlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQomIzQzOwkJcmV0dXJuOwomIzQzOwljYXRfaW50b19maWxlKCYjMzQ7MCYjMzQ7LCAmIzM0Oy9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vbiYjMzQ7KTsKJiM0MzsjZW5kaWYKJiM0Mzt9CiYjNDM7CiYjNDM7dm9pZCBhYm9ydF9ob29rcyh2b2lkKQomIzQzO3sKJiM0MzsJZmZsdXNoKHN0ZG91dCk7CiYjNDM7CWZwcmludGYoc3RkZXJyLCAmIzM0O3J1bm5pbmcgJXMoKS4uLlxuJiMzNDssIF9fZnVuY19fKTsKJiM0MzsJdHJhY2luZ19vZmYoKTsKJiM0MzsjaWZkZWYgU0xFRVBfT05fQUJPUlQKJiM0MzsJc2xlZXAoU0xFRVBfT05fQUJPUlQpOwomIzQzOyNlbmRpZgomIzQzO30KJiM0MzsKIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKQogewogCWludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpOwpkaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYwppbmRleCA5YTZkOTU0ZWUzNzEyNi4uOTZhNGViMjZmMzI2MDMgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCiYjNDM7JiM0MzsmIzQzOyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jCkBAIC02Miw4OSAmIzQzOzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKQogCXJldHVybiAqcHRyOwogfQogCi0jaWYgQ09OVFJPTF9UUkFDSU5HICZndDsgMAotc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpCi17Ci0JaW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpOwotCWludCByZXQ7Ci0KLQlkcHJpbnRmMigmIzM0OyVzKCk6IHdyaXRpbmcgJiMzOTslcyYjMzk7IHRvICYjMzk7JXMmIzM5O1xuJiMzNDssIF9fZnVuY19fLCBzdHIsIGZpbGUpOwotCS8qCi0JICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXIKLQkgKiBwa2V5X2Fzc2VydCgpCi0JICovCi0JaWYgKGZkICZsdDsgMCkgewotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtlcnJvciBvcGVuaW5nICYjMzk7JXMmIzM5O1xuJiMzNDssIHN0cik7Ci0JCXBlcnJvcigmIzM0O2Vycm9yOiAmIzM0Oyk7Ci0JCWV4aXQoX19MSU5FX18pOwotCX0KLQotCXJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTsKLQlpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7Ci0JCXBlcnJvcigmIzM0O3dyaXRlIHRvIGZpbGUgZmFpbGVkJiMzNDspOwotCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtmaWxlbmFtZTogJiMzOTslcyYjMzk7IHN0cjogJiMzOTslcyYjMzk7XG4mIzM0OywgZmlsZSwgc3RyKTsKLQkJZXhpdChfX0xJTkVfXyk7Ci0JfQotCWNsb3NlKGZkKTsKLX0KLQotc3RhdGljIGludCB3YXJuZWRfdHJhY2luZzsKLXN0YXRpYyBpbnQgdHJhY2luZ19yb290X29rKHZvaWQpCi17Ci0JaWYgKGdldGV1aWQoKSAhPSAwKSB7Ci0JCWlmICghd2FybmVkX3RyYWNpbmcpCi0JCQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsICYjMzQ7Ci0JCQkJCSYjMzQ7Y2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcbiYjMzQ7KTsKLQkJd2FybmVkX3RyYWNpbmcgPSAxOwotCQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0jZW5kaWYKLQotc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKQotewotI2lmIENPTlRST0xfVFJBQ0lORyAmZ3Q7IDAKLSNkZWZpbmUgVFJBQ0VESVIgJiMzNDsvc3lzL2tlcm5lbC90cmFjaW5nJiMzNDsKLQljaGFyIHBpZHN0clszMl07Ci0KLQlpZiAoIXRyYWNpbmdfcm9vdF9vaygpKQotCQlyZXR1cm47Ci0KLQlzcHJpbnRmKHBpZHN0ciwgJiMzNDslZCYjMzQ7LCBnZXRwaWQoKSk7Ci0JY2F0X2ludG9fZmlsZSgmIzM0OzAmIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2luZ19vbiYjMzQ7KTsKLQljYXRfaW50b19maWxlKCYjMzQ7XG4mIzM0OywgVFJBQ0VESVIgJiMzNDsvdHJhY2UmIzM0Oyk7Ci0JaWYgKDEpIHsKLQkJY2F0X2ludG9fZmlsZSgmIzM0O2Z1bmN0aW9uX2dyYXBoJiMzNDssIFRSQUNFRElSICYjMzQ7L2N1cnJlbnRfdHJhY2VyJiMzNDspOwotCQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy9vcHRpb25zL2Z1bmNncmFwaC1wcm9jJiMzNDspOwotCX0gZWxzZSB7Ci0JCWNhdF9pbnRvX2ZpbGUoJiMzNDtub3AmIzM0OywgVFJBQ0VESVIgJiMzNDsvY3VycmVudF90cmFjZXImIzM0Oyk7Ci0JfQotCWNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiAmIzM0Oy9zZXRfZnRyYWNlX3BpZCYjMzQ7KTsKLQljYXRfaW50b19maWxlKCYjMzQ7MSYjMzQ7LCBUUkFDRURJUiAmIzM0Oy90cmFjaW5nX29uJiMzNDspOwotCWRwcmludGYxKCYjMzQ7ZW5hYmxlZCB0cmFjaW5nXG4mIzM0Oyk7Ci0jZW5kaWYKLX0KLQotc3RhdGljIHZvaWQgdHJhY2luZ19vZmYodm9pZCkKLXsKLSNpZiBDT05UUk9MX1RSQUNJTkcgJmd0OyAwCi0JaWYgKCF0cmFjaW5nX3Jvb3Rfb2soKSkKLQkJcmV0dXJuOwotCWNhdF9pbnRvX2ZpbGUoJiMzNDswJiMzNDssICYjMzQ7L3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uJiMzNDspOwotI2VuZGlmCi19Ci0KLXZvaWQgYWJvcnRfaG9va3Modm9pZCkKLXsKLQlmZmx1c2goc3Rkb3V0KTsKLQlmcHJpbnRmKHN0ZGVyciwgJiMzNDtydW5uaW5nICVzKCkuLi5cbiYjMzQ7LCBfX2Z1bmNfXyk7Ci0JdHJhY2luZ19vZmYoKTsKLSNpZmRlZiBTTEVFUF9PTl9BQk9SVAotCXNsZWVwKFNMRUVQX09OX0FCT1JUKTsKLSNlbmRpZgotfQotCiAvKgogICogVGhpcyBhdHRlbXB0cyB0byBoYXZlIHJvdWdobHkgYSBwYWdlIG9mIGluc3RydWN0aW9ucyBmb2xsb3dlZCBieSBhIGZldwogICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0CkBAIC02NjksNyAmIzQzOzU4Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCQkJc2l6ZSwgcHJvdCwgcGtleSk7CiAJcGtleV9hc3NlcnQocGtleSAmbHQ7IE5SX1BLRVlTKTsKIAlwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAlyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpOwogCXBrZXlfYXNzZXJ0KCFyZXQpOwogCXJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpOwpAQCAtNjkyLDcgJiM0Mzs2MDksNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfYW5vbl9odWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KQogCSAqLwogCXNpemUgPSBBTElHTl9VUChzaXplLCBIUEFHRV9TSVpFICogMik7CiAJcHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTsKLQlwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7CiYjNDM7CXBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTsKIAlyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTsKIAltcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7CiAKQEAgLTc1MCw3ICYjNDM7NjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpCiAJc2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTsKIAlwa2V5X2Fzc2VydChwa2V5ICZsdDsgTlJfUEtFWVMpOwogCXB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBmbGFncywgLTEsIDApOwotCXBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTsKJiM0MzsJcGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpOwogCW1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTsKIAogCXJlY29yZF9wa2V5X21hbGxvYyhwdHIsIHNpemUsIHByb3QpOwpAQCAtNzc5LDcgJiM0Mzs2OTYsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXkobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpCiAJCXBrZXlfYXNzZXJ0KG1hbGxvY190eXBlICZsdDsgbnJfbWFsbG9jX3R5cGVzKTsKIAogCQlyZXQgPSBwa2V5X21hbGxvY1ttYWxsb2NfdHlwZV0oc2l6ZSwgcHJvdCwgcGtleSk7Ci0JCXBrZXlfYXNzZXJ0KHJldCAhPSAodm9pZCAqKS0xKTsKJiM0MzsJCXBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTsKIAogCQltYWxsb2NfdHlwZSYjNDM7JiM0Mzs7CiAJCWlmIChtYWxsb2NfdHlwZSAmZ3Q7PSBucl9tYWxsb2NfdHlwZXMpCkBAIC0xMTk3LDYgJiM0MzsxMTE0LDcgQEAgc3RhdGljIHZvaWQgYXJjaF9mb3JjZV9wa2V5X3JlZ19pbml0KHZvaWQpCiAJICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuCiAJICovCiAJYnVmID0gbW1hcChOVUxMLCAxKk1CLCBQUk9UX1JFQUR8UFJPVF9XUklURSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwomIzQzOwlwa2V5X2Fzc2VydChidWYgIT0gTUFQX0ZBSUxFRCk7CiAKIAkvKiBUaGVzZSBfX2J1aWx0aW5zIHJlcXVpcmUgY29tcGlsaW5nIHdpdGggLW14c2F2ZSAqLwogCkBAIC0xNzYzLDcgJiM0MzsxNjgxLDggQEAgaW50IG1haW4odm9pZCkKIAkJa3NmdF9wcmludF9tc2coJiMzNDtydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xuJiMzNDspOwogCiAJCXB0ciAgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApOwotCQlhc3NlcnQocHRyICE9ICh2b2lkICopLTEpOwomIzQzOwkJaWYgKHB0ciA9PSBNQVBfRkFJTEVEKQomIzQzOwkJCWtzZnRfZXhpdF9mYWlsX3BlcnJvcigmIzM0O21tYXAmIzM0Oyk7CiAJCXRlc3RfbXByb3RlY3RfcGtleV9vbl91bnN1cHBvcnRlZF9jcHUocHRyLCAxKTsKIAkJa3NmdF90ZXN0X3Jlc3VsdF9wYXNzKCYjMzQ7cGtleSBvbiB1bnN1cHBvcnRlZCBDUFUvT1NcbiYjMzQ7KTsKIAkJa3NmdF9maW5pc2hlZCgpOwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wNi8yOSAxMDo1ODwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA4MTIwCgkJCQkJCQlvdXRwdXQ6IDY2CgkJCQkJCQl0aG91Z2h0czogNjIwCgkJCQkJCTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+VGhvdWdodHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4qKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzIHRvdWNoaW5nIGZpbGVzIHdpdGhpbiBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYC4gTXkgaW5pdGlhbCB0aG91Z2h0IGlzLCAmIzM0O1RoZXNlIGFyZSBzZWxmdGVzdHMsIHVzZXItc3BhY2UgcHJvZ3JhbXMsIG5vdCBrZXJuZWwgY29kZS4gU28sIHRoZSBxdWVzdGlvbiBpcywgZG9lcyB0aGlzIG1vZGlmaWNhdGlvbiBmdW5jdGlvbmFsbHkgYWx0ZXIga2VybmVsIGV4ZWN1dGlvbiBmbG93PyYjMzQ7IE5vLCBpdCBtb2RpZmllcyB0aGUgKnRlc3QqLCBub3QgdGhlIGtlcm5lbC4gSSBuZWVkIHRvIGRvdWJsZS1jaGVjayB0aGF0IHRoZXJlIGFyZSAqbm8qIGtlcm5lbCBjaGFuZ2VzLgoKTGV0IG1lIGNvbmZpcm0uLi4gWWVwLCB0aGUgZGlmZiAqb25seSogaW1wYWN0cyB0aGF0IGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gIGRpcmVjdG9yeS4gVGhlcmVmb3JlLCBubyBkaXJlY3QgbW9kaWZpY2F0aW9uIG9mIHRoZSBrZXJuZWwuIFRoaXMgbWVhbnMsIGFjY29yZGluZyB0byB0aGUgaW5zdHJ1Y3Rpb25zLCB0aGF0IFdvcnRoRnV6emluZyBzaG91bGQgYmUgZmFsc2UuCgpMZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXQgc3BlY2lmaWVzOiAmIzM0O0lmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4uLiYjMzQ7LiBTaW5jZSB0aGlzIHBhdGNoICpkb2VzbiYjMzk7dCogdG91Y2ggY29yZSBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdGhhdCBjb25maXJtcyBteSBpbml0aWFsIGFzc2Vzc21lbnQuCgpJJiMzOTttIGNvbmZpZGVudCBpbiBteSBjb25jbHVzaW9uLiBUaGUgcGF0Y2ggc29sZWx5IGltcGFjdHMgdXNlci1zcGFjZSBzZWxmdGVzdHM7IGl0IGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBhbHRlcmF0aW9ucyB0byBrZXJuZWwgY29kZS4KCkp1c3QgdG8gYmUgYWJzb2x1dGVseSBzdXJlLCBsZXQmIzM5O3MgcmV2aWV3IHRoZSBmaWxlcyBpbXBhY3RlZDoKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oYAotIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY2AKLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNgCi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jYAoKWXVwLCBhbGwgd2l0aGluIHRoZSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBzdWJ0cmVlLgoKVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjQvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA2LzI5IDEwOjU4PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+c2V0LXJlc3VsdHM8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0VuYWJsZUNvbmZpZ3MmIzM0OzogW10sCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggb25seSBtb2RpZmllcyB1c2VyLXNwYWNlIHNlbGZ0ZXN0cyAodG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vKikgYW5kIGRvZXMgbm90IG1ha2UgYW55IGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIGNvZGUgaXRzZWxmLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8L3Rib2R5PgoJPC90YWJsZT4KCgk8ZGl2IGlkPSJsbG1fc3VtbWFyeV90YWJsZV9kaXYiIHN0eWxlPSJtYXJnaW46IDIwcHggMDsiPgoJCTx0YWJsZSBjbGFzcz0ibGlzdF90YWJsZSI+CgkJCTxjYXB0aW9uPkxMTSBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIFRva2VuczwvdGg+CgkJCQkJPHRoPkF2ZyBUb2tlbnM8L3RoPgoJCQkJCTx0aD5Ub3RhbCBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJCTx0aD5BdmcgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCTwvdHI+CgkJCTwvdGhlYWQ+CgkJCTx0Ym9keSBpZD0ibGxtX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0idG9vbF9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+VG9vbCBDYWxscyBTdW1tYXJ5OjwvY2FwdGlvbj4KCQkJPHRoZWFkPgoJCQkJPHRyPgoJCQkJCTx0aD5Ub3RhbCBDYWxsczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJ0b29sX3N1bW1hcnlfc3RhdHNfYm9keSI+PC90Ym9keT4KCQk8L3RhYmxlPgoJPC9kaXY+CgoJPGRpdiBpZD0iZHVyYXRpb25fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoJPGRpdiBpZD0idG9rZW5fY2hhcnRfZGl2IiBzdHlsZT0id2lkdGg6IDEwMCU7IG1hcmdpbjogMjBweCAwOyBib3JkZXI6IDFweDsiPjwvZGl2PgoKCTxzY3JpcHQgdHlwZT0idGV4dC9qYXZhc2NyaXB0IiBzcmM9Imh0dHBzOi8vd3d3Lmdvb2dsZS5jb20vanNhcGkiPjwvc2NyaXB0PgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiPgoJCWdvb2dsZS5sb2FkKCJ2aXN1YWxpemF0aW9uIiwgIjEiLCB7cGFja2FnZXM6WyJjb3JlY2hhcnQiXX0pOwoJCWdvb2dsZS5zZXRPbkxvYWRDYWxsYmFjayhkcmF3Q2hhcnRzKTsKCgkJZnVuY3Rpb24gZHJhd0NoYXJ0cygpIHsKCQkJY29uc3QgcmF3RGF0YSA9IFt7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEwOjU4OjM4Ljc3NjE1NDQ1NloiLCJTZXEiOjAsIk5lc3RpbmciOjAsIlR5cGUiOiJmbG93IiwiTmFtZSI6InBhdGNoLXRyaWFnZSIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjk1ODQ0MjMzOTQsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA2LTI5VDEwOjU4OjM4Ljc3NjE2MzY4NloiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDk4MzkzMTIzLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgYmNiY2Y3NzA5YTVhYTE5OGNiOTFhOTZmYzQ3NmJkZTU4YWEyNjNhYVxcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgTW9uIEp1biAyOSAxMDo1ODozNyAyMDI2ICswMDAwXFxuXFxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xcblxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcXG5AQCAtNjgsNyArNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXFxuICNkZWZpbmUgZHByaW50ZjMoYXJncy4uLikgZHByaW50Zl9sZXZlbCgzLCBhcmdzKVxcbiAjZGVmaW5lIGRwcmludGY0KGFyZ3MuLi4pIGRwcmludGZfbGV2ZWwoNCwgYXJncylcXG4gXFxuLWV4dGVybiB2b2lkIGFib3J0X2hvb2tzKHZvaWQpO1xcbit2b2lkIHRyYWNpbmdfb24odm9pZCk7XFxuK3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XFxuK3ZvaWQgYWJvcnRfaG9va3Modm9pZCk7XFxuICNkZWZpbmUgcGtleV9hc3NlcnQoY29uZGl0aW9uKSBkbyB7XFx0XFx0XFxcXFxcbiBcXHRpZiAoIShjb25kaXRpb24pKSB7XFx0XFx0XFx0XFxcXFxcbiBcXHRcXHRkcHJpbnRmMChcXFwiIyBhc3NlcnQoKSBhdCAlczo6JWQgdGVzdF9ucjogJWQgaXRlcmF0aW9uOiAlZFxcXFxuXFxcIiwgXFxcXFxcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaCBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXFxuaW5kZXggMTdiZjJkMWIwMTkyZTAuLjJjZTg1NTgwYjQwNDg3IDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcXG5AQCAtMTI2LDcgKzEyNiw3IEBAIHN0YXRpYyBpbmxpbmUgdm9pZCAqbWFsbG9jX3BrZXlfd2l0aF9tcHJvdGVjdF9zdWJwYWdlKGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwXFxuIFxcdFxcdFxcdHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcbiBcXHRyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpO1xcbiBcXHRpZiAocmV0KSB7XFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcXG5pbmRleCAzMDJmZWY1NDA0OWM4Ny4uZjMwYzk5NjVhNTYxZDkgMTAwNjQ0XFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xcbkBAIC0xOSw3ICsxOSw2IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRpbnQuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N0ZGJvb2wuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3NpZ25hbC5oXFx1MDAzZVxcbi0jaW5jbHVkZSBcXHUwMDNjYXNzZXJ0LmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzdGRsaWIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3N5cy9tbWFuLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NzeXMvdHlwZXMuaFxcdTAwM2VcXG5AQCAtMzYsNiArMzUsMTAgQEAgc3RhdGljIHB0aHJlYWRfbXV0ZXhfdCBtdXRleCA9IFBUSFJFQURfTVVURVhfSU5JVElBTElaRVI7XFxuIHN0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xcbiBzdGF0aWMgc2lnaW5mb190IHNpZ2luZm8gPSB7MH07XFxuIFxcbitpbnQgaXRlcmF0aW9uX25yID0gMTtcXG4raW50IHRlc3RfbnI7XFxuK2ludCBkcHJpbnRfaW5fc2lnbmFsO1xcbitcXG4gLypcXG4gICogV2UgbmVlZCB0byB1c2UgaW5saW5lIGFzc2VtYmx5IGluc3RlYWQgb2YgZ2xpYmMncyBzeXNjYWxsIGJlY2F1c2UgZ2xpYmMnc1xcbiAgKiBzeXNjYWxsIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIFBMVCBpbiBvcmRlciB0byBjYWxsIGEgbGlicmFyeSBmdW5jdGlvblxcbkBAIC0yMDcsMjIgKzIxMCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX3BrZXkwX2Rpc2FibGVkKHZvaWQpXFxuIFxcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XFxuIFxcdHB0aHJlYWRfYXR0cl90IGF0dHI7XFxuIFxcdHB0aHJlYWRfdCB0aHI7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XFxuIFxcbiBcXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0bWVtc2V0KFxcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xcbiBcXG4gXFx0cHRocmVhZF9hdHRyX2luaXQoXFx1MDAyNmF0dHIpO1xcbiBcXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcXG4gXFxuLVxcdHB0aHJlYWRfY3JlYXRlKFxcdTAwMjZ0aHIsIFxcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3dpdGhfcGtleTBfZGlzYWJsZWQsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRwdGhyZWFkX211dGV4X2xvY2soXFx1MDAyNm11dGV4KTtcXG4gXFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcXG5AQCAtMjQ3LDIyICsyNTAsMjIgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfY2Fubm90X2FjY2Vzc19zdGFjayh2b2lkKVxcbiBcXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbiBcXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xcbiBcXHRwdGhyZWFkX3QgdGhyO1xcbitcXHRpbnQgcmV0O1xcbiBcXG4gXFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xcbiBcXG4gXFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xcbiBcXHRzaWdlbXB0eXNldChcXHUwMDI2c2Euc2FfbWFzayk7XFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcXG4gXFxuIFxcdHB0aHJlYWRfYXR0cl9pbml0KFxcdTAwMjZhdHRyKTtcXG4gXFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFxcdTAwMjZhdHRyLCBQVEhSRUFEX0NSRUFURV9ERVRBQ0hFRCk7XFxuIFxcbi1cXHRwdGhyZWFkX2NyZWF0ZShcXHUwMDI2dGhyLCBcXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcXG4rXFx0cmV0ID0gcHRocmVhZF9jcmVhdGUoXFx1MDAyNnRociwgXFx1MDAyNmF0dHIsIHRocmVhZF9zZWd2X3BrdWVycl9zdGFjaywgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHB0aHJlYWRfbXV0ZXhfbG9jayhcXHUwMDI2bXV0ZXgpO1xcbiBcXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxcbkBAIC0yODgsMjEgKzI5MSwyMCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl93aXRoX2RpZmZlcmVudF9wa2V5X2Zvcl9zdGFjayh2b2lkKVxcbiBcXHRpbnQgcGFyZW50X3BpZCA9IDA7XFxuIFxcdGludCBjaGlsZF9waWQgPSAwO1xcbiBcXHR1NjQgcGtleV9yZWc7XFxuK1xcdGxvbmcgcmV0O1xcbiBcXG4gXFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcXG4gXFxuIFxcdHNpZ2VtcHR5c2V0KFxcdTAwMjZzYS5zYV9tYXNrKTtcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuIFxcbi1cXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMSAqL1xcbiBcXHRwa2V5X3JlZyA9IHBrZXlfcmVnX3Jlc3RyaWN0aXZlX2RlZmF1bHQoKTtcXG5AQCAtMzE3LDEzICszMTksMTQgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcXG4gXFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cXG4gXFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdFxcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xcbitcXHRwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0c2lnc3RhY2suc3NfZmxhZ3MgPSAwO1xcbiBcXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcXG4gXFxuIFxcdG1lbXNldChcXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcXG4gXFxuIFxcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xcbi1cXHRsb25nIHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxcbitcXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4gXFx0XFx0XFx0ICAgICBDTE9ORV9TSUdIQU5EIHwgQ0xPTkVfVEhSRUFEIHwgQ0xPTkVfU1lTVlNFTSB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcXG4gXFx0XFx0XFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcXG5AQCAtMzMzLDcgKzMzNiw3IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRlcnJubyA9IC1yZXQ7XFxuLVxcdFxcdHBlcnJvcihcXFwiY2xvbmVcXFwiKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQoMCk7XFxuIFxcdH0gZWxzZSBpZiAocmV0ID09IDApIHtcXG4gXFx0XFx0dGhyZWFkX3NlZ3ZfbWFwZXJyX3B0cihcXHUwMDI2c2lnc3RhY2spO1xcbiBcXHRcXHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XFxuQEAgLTM1OCw2ICszNjEsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcXG4ge1xcbiBcXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xcbiBcXHR1NjQgcGtleV9yZWc7XFxuK1xcdGludCByZXQ7XFxuIFxcbiBcXHQvKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIGFuIGFyYml0cmFyeSBzZXQgb2Yga2V5cyAqL1xcbiBcXHRwa2V5X3JlZyA9IHBrZXlfcmVnX3Jlc3RyaWN0aXZlX2RlZmF1bHQoKTtcXG5AQCAtMzY5LDEwICszNzMsOCBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfcHJlc2VydmVkX2FmdGVyX3NpZ3VzcjEodm9pZClcXG4gXFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjFfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbi1cXHRpZiAoc2lnYWN0aW9uKFNJR1VTUjEsIFxcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJzaWdhY3Rpb25cXFwiKTtcXG4tXFx0XFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xcbi1cXHR9XFxuK1xcdHJldCA9IHNpZ2FjdGlvbihTSUdVU1IxLCBcXHUwMDI2c2EsIE5VTEwpO1xcbitcXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XFxuIFxcbiBcXHRtZW1zZXQoXFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XFxuIFxcbkBAIC00NDQsNiArNDQ2LDEzIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcXG4gXFx0aW50IHBhcmVudF9waWQgPSAwO1xcbiBcXHRpbnQgY2hpbGRfcGlkID0gMDtcXG4gXFx0dTY0IHBrZXlfcmVnO1xcbitcXHRsb25nIHJldDtcXG4rXFxuK1xcdC8qXFxuK1xcdCAqIFNJR1NFR1YgaGFuZGxlciBpcyByZXNldCB0byBTSUdfREZMIGJlbG93OyB0dXJuIHRyYWNpbmcgb2ZmIGZpcnN0XFxuK1xcdCAqIHNvIGEgY3Jhc2ggZG9lcyBub3QgbGVhdmUgZnRyYWNlIGVuYWJsZWQuXFxuK1xcdCAqL1xcbitcXHR0cmFjaW5nX29mZigpO1xcbiBcXG4gXFx0c2Euc2FfaGFuZGxlciA9IFNJR19ERkw7XFxuIFxcdHNhLnNhX2ZsYWdzID0gMDtcXG5AQCAtNDUzLDI0ICs0NjIsMjAgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxcbiBcXHQgKiBGb3IgdGhpcyB0ZXN0Y2FzZSwgd2UgZG8gbm90IHdhbnQgdG8gaGFuZGxlIFNJR1NFR1YuIFJlc2V0IGhhbmRsZXJcXG4gXFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cXG4gXFx0ICovXFxuLVxcdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xcbi1cXHRcXHRwZXJyb3IoXFxcInNpZ2FjdGlvblxcXCIpO1xcbi1cXHRcXHRleGl0KEVYSVRfRkFJTFVSRSk7XFxuLVxcdH1cXG4rXFx0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFxcdTAwMjZzYSwgTlVMTCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcXG4gXFxuIFxcdHNhLnNhX2ZsYWdzID0gU0FfU0lHSU5GTyB8IFNBX09OU1RBQ0s7XFxuIFxcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcXG4gXFx0c2lnZW1wdHlzZXQoXFx1MDAyNnNhLnNhX21hc2spO1xcbiBcXG4tXFx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XFxuLVxcdFxcdHBlcnJvcihcXFwic2lnYWN0aW9uXFxcIik7XFxuLVxcdFxcdGV4aXQoRVhJVF9GQUlMVVJFKTtcXG4tXFx0fVxcbitcXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXFx1MDAyNnNhLCBOVUxMKTtcXG4rXFx0cGtleV9hc3NlcnQocmV0ID09IDApO1xcbiBcXG4gXFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXFxuIFxcdFxcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XFxuIFxcbi1cXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XFxuK1xcdHBrZXlfYXNzZXJ0KHN0YWNrICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LypcXG4gXFx0ICogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBNUEsgMi4gVGhlIGNoaWxkIHRocmVhZCAodG8gYmUgY3JlYXRlZFxcbkBAIC00OTAsMTEgKzQ5NSwxMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcdC8qIFNldCB1cCBhbHRlcm5hdGUgc2lnbmFsIHN0YWNrIHRoYXQgd2lsbCB1c2UgdGhlIGRlZmF1bHQgTVBLICovXFxuIFxcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxcbiBcXHRcXHRcXHQgICAgICBNQVBfUFJJVkFURSB8IE1BUF9BTk9OWU1PVVMsIC0xLCAwKTtcXG4rXFx0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdHNpZ3N0YWNrLnNzX2ZsYWdzID0gMDtcXG4gXFx0c2lnc3RhY2suc3Nfc2l6ZSA9IFNUQUNLX1NJWkU7XFxuIFxcbiBcXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cXG4tXFx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcXG4rXFx0cmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxcbiBcXHRcXHRcXHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XFxuIFxcdFxcdFxcdCAgICAgQ0xPTkVfREVUQUNIRUQsXFxuQEAgLTUwNCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXFxuIFxcbiBcXHRpZiAocmV0IFxcdTAwM2MgMCkge1xcbiBcXHRcXHRlcnJubyA9IC1yZXQ7XFxuLVxcdFxcdHBlcnJvcihcXFwiY2xvbmVcXFwiKTtcXG4rXFx0XFx0cGtleV9hc3NlcnQoMCk7XFxuIFxcdH0gIGVsc2UgaWYgKHJldCA9PSAwKSB7XFxuIFxcdFxcdHRocmVhZF9zaWd1c3IyX3NlbGYoXFx1MDAyNnNpZ3N0YWNrKTtcXG4gXFx0XFx0c3lzY2FsbF9yYXcoU1lTX2V4aXQsIDAsIDAsIDAsIDAsIDAsIDApO1xcbkBAIC01MzAsMTYgKzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7XFxuIFxcbiBpbnQgbWFpbihpbnQgYXJnYywgY2hhciAqYXJndltdKVxcbiB7XFxuLVxcdGludCBpO1xcbi1cXG4gXFx0a3NmdF9wcmludF9oZWFkZXIoKTtcXG4gXFx0a3NmdF9zZXRfcGxhbihBUlJBWV9TSVpFKHBrZXlfdGVzdHMpKTtcXG4gXFxuIFxcdGlmICghaXNfcGtleXNfc3VwcG9ydGVkKCkpXFxuIFxcdFxcdGtzZnRfZXhpdF9za2lwKFxcXCJwa2V5cyBub3Qgc3VwcG9ydGVkXFxcXG5cXFwiKTtcXG4gXFxuLVxcdGZvciAoaSA9IDA7IGkgXFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyBpKyspXFxuLVxcdFxcdCgqcGtleV90ZXN0c1tpXSkoKTtcXG4rXFx0Zm9yICh0ZXN0X25yID0gMDsgdGVzdF9uciBcXHUwMDNjIEFSUkFZX1NJWkUocGtleV90ZXN0cyk7IHRlc3RfbnIrKykge1xcbitcXHRcXHR0cmFjaW5nX29uKCk7XFxuK1xcdFxcdCgqcGtleV90ZXN0c1t0ZXN0X25yXSkoKTtcXG4rXFx0XFx0dHJhY2luZ19vZmYoKTtcXG4rXFx0fVxcbiBcXG4gXFx0a3NmdF9maW5pc2hlZCgpO1xcbiBcXHRyZXR1cm4gMDtcXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmMgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xcbmluZGV4IDI1NWIzMzJmN2EwOGIyLi5hYmY3MDhkNjU3NWVjMSAxMDA2NDRcXG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXFxuQEAgLTIsOSArMiw5NSBAQFxcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfX1xcbiAjaW5jbHVkZSBcXHUwMDNjc3lzL3N5c2NhbGwuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY3VuaXN0ZC5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjZmNudGwuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY3N0ZGlvLmhcXHUwMDNlXFxuKyNpbmNsdWRlIFxcdTAwM2NzdHJpbmcuaFxcdTAwM2VcXG4gXFxuICNpbmNsdWRlIFxcXCJwa2V5LWhlbHBlcnMuaFxcXCJcXG4gXFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK3N0YXRpYyB2b2lkIGNhdF9pbnRvX2ZpbGUoY2hhciAqc3RyLCBjaGFyICpmaWxlKVxcbit7XFxuK1xcdGludCBmZCA9IG9wZW4oZmlsZSwgT19SRFdSKTtcXG4rXFx0aW50IHJldDtcXG4rXFxuK1xcdGRwcmludGYyKFxcXCIlcygpOiB3cml0aW5nICclcycgdG8gJyVzJ1xcXFxuXFxcIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XFxuK1xcdC8qXFxuK1xcdCAqIHRoZXNlIG5lZWQgdG8gYmUgcmF3IGJlY2F1c2UgdGhleSBhcmUgY2FsbGVkIHVuZGVyXFxuK1xcdCAqIHBrZXlfYXNzZXJ0KClcXG4rXFx0ICovXFxuK1xcdGlmIChmZCBcXHUwMDNjIDApIHtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJlcnJvciBvcGVuaW5nICclcydcXFxcblxcXCIsIHN0cik7XFxuK1xcdFxcdHBlcnJvcihcXFwiZXJyb3I6IFxcXCIpO1xcbitcXHRcXHRleGl0KF9fTElORV9fKTtcXG4rXFx0fVxcbitcXG4rXFx0cmV0ID0gd3JpdGUoZmQsIHN0ciwgc3RybGVuKHN0cikpO1xcbitcXHRpZiAocmV0ICE9IHN0cmxlbihzdHIpKSB7XFxuK1xcdFxcdHBlcnJvcihcXFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcXFwiKTtcXG4rXFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJmaWxlbmFtZTogJyVzJyBzdHI6ICclcydcXFxcblxcXCIsIGZpbGUsIHN0cik7XFxuK1xcdFxcdGV4aXQoX19MSU5FX18pO1xcbitcXHR9XFxuK1xcdGNsb3NlKGZkKTtcXG4rfVxcbitcXG4rc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcXG4rc3RhdGljIGludCB0cmFjaW5nX3Jvb3Rfb2sodm9pZClcXG4re1xcbitcXHRpZiAoZ2V0ZXVpZCgpICE9IDApIHtcXG4rXFx0XFx0aWYgKCF3YXJuZWRfdHJhY2luZylcXG4rXFx0XFx0XFx0ZnByaW50ZihzdGRlcnIsIFxcXCJXQVJOSU5HOiBub3QgcnVuIGFzIHJvb3QsIFxcXCJcXG4rXFx0XFx0XFx0XFx0XFx0XFxcImNhbiBub3QgZG8gdHJhY2luZyBjb250cm9sXFxcXG5cXFwiKTtcXG4rXFx0XFx0d2FybmVkX3RyYWNpbmcgPSAxO1xcbitcXHRcXHRyZXR1cm4gMDtcXG4rXFx0fVxcbitcXHRyZXR1cm4gMTtcXG4rfVxcbisjZW5kaWZcXG4rXFxuK3ZvaWQgdHJhY2luZ19vbih2b2lkKVxcbit7XFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuKyNkZWZpbmUgVFJBQ0VESVIgXFxcIi9zeXMva2VybmVsL3RyYWNpbmdcXFwiXFxuK1xcdGNoYXIgcGlkc3RyWzMyXTtcXG4rXFxuK1xcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFxuK1xcdHNwcmludGYocGlkc3RyLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuK1xcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiXFxcXG5cXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNlXFxcIik7XFxuK1xcdGlmICgxKSB7XFxuK1xcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcImZ1bmN0aW9uX2dyYXBoXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbitcXHRcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXFxcIik7XFxuK1xcdH0gZWxzZSB7XFxuK1xcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIm5vcFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4rXFx0fVxcbitcXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXFxcIi9zZXRfZnRyYWNlX3BpZFxcXCIpO1xcbitcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuK1xcdGRwcmludGYxKFxcXCJlbmFibGVkIHRyYWNpbmdcXFxcblxcXCIpO1xcbisjZW5kaWZcXG4rfVxcbitcXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKVxcbit7XFxuKyNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuK1xcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuK1xcdFxcdHJldHVybjtcXG4rXFx0Y2F0X2ludG9fZmlsZShcXFwiMFxcXCIsIFxcXCIvc3lzL2tlcm5lbC90cmFjaW5nL3RyYWNpbmdfb25cXFwiKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuK3ZvaWQgYWJvcnRfaG9va3Modm9pZClcXG4re1xcbitcXHRmZmx1c2goc3Rkb3V0KTtcXG4rXFx0ZnByaW50ZihzdGRlcnIsIFxcXCJydW5uaW5nICVzKCkuLi5cXFxcblxcXCIsIF9fZnVuY19fKTtcXG4rXFx0dHJhY2luZ19vZmYoKTtcXG4rI2lmZGVmIFNMRUVQX09OX0FCT1JUXFxuK1xcdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcXG4rI2VuZGlmXFxuK31cXG4rXFxuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxcbiB7XFxuIFxcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuaW5kZXggOWE2ZDk1NGVlMzcxMjYuLjk2YTRlYjI2ZjMyNjAzIDEwMDY0NFxcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXFxuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcXG5AQCAtNjIsODkgKzYyLDYgQEAgbm9pbmxpbmUgaW50IHJlYWRfcHRyKGludCAqcHRyKVxcbiBcXHRyZXR1cm4gKnB0cjtcXG4gfVxcbiBcXG4tI2lmIENPTlRST0xfVFJBQ0lORyBcXHUwMDNlIDBcXG4tc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXFxuLXtcXG4tXFx0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xcbi1cXHRpbnQgcmV0O1xcbi1cXG4tXFx0ZHByaW50ZjIoXFxcIiVzKCk6IHdyaXRpbmcgJyVzJyB0byAnJXMnXFxcXG5cXFwiLCBfX2Z1bmNfXywgc3RyLCBmaWxlKTtcXG4tXFx0LypcXG4tXFx0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcXG4tXFx0ICogcGtleV9hc3NlcnQoKVxcbi1cXHQgKi9cXG4tXFx0aWYgKGZkIFxcdTAwM2MgMCkge1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImVycm9yIG9wZW5pbmcgJyVzJ1xcXFxuXFxcIiwgc3RyKTtcXG4tXFx0XFx0cGVycm9yKFxcXCJlcnJvcjogXFxcIik7XFxuLVxcdFxcdGV4aXQoX19MSU5FX18pO1xcbi1cXHR9XFxuLVxcbi1cXHRyZXQgPSB3cml0ZShmZCwgc3RyLCBzdHJsZW4oc3RyKSk7XFxuLVxcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcXG4tXFx0XFx0cGVycm9yKFxcXCJ3cml0ZSB0byBmaWxlIGZhaWxlZFxcXCIpO1xcbi1cXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcXFxuXFxcIiwgZmlsZSwgc3RyKTtcXG4tXFx0XFx0ZXhpdChfX0xJTkVfXyk7XFxuLVxcdH1cXG4tXFx0Y2xvc2UoZmQpO1xcbi19XFxuLVxcbi1zdGF0aWMgaW50IHdhcm5lZF90cmFjaW5nO1xcbi1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxcbi17XFxuLVxcdGlmIChnZXRldWlkKCkgIT0gMCkge1xcbi1cXHRcXHRpZiAoIXdhcm5lZF90cmFjaW5nKVxcbi1cXHRcXHRcXHRmcHJpbnRmKHN0ZGVyciwgXFxcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXFxcIlxcbi1cXHRcXHRcXHRcXHRcXHRcXFwiY2FuIG5vdCBkbyB0cmFjaW5nIGNvbnRyb2xcXFxcblxcXCIpO1xcbi1cXHRcXHR3YXJuZWRfdHJhY2luZyA9IDE7XFxuLVxcdFxcdHJldHVybiAwO1xcbi1cXHR9XFxuLVxcdHJldHVybiAxO1xcbi19XFxuLSNlbmRpZlxcbi1cXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vbih2b2lkKVxcbi17XFxuLSNpZiBDT05UUk9MX1RSQUNJTkcgXFx1MDAzZSAwXFxuLSNkZWZpbmUgVFJBQ0VESVIgXFxcIi9zeXMva2VybmVsL3RyYWNpbmdcXFwiXFxuLVxcdGNoYXIgcGlkc3RyWzMyXTtcXG4tXFxuLVxcdGlmICghdHJhY2luZ19yb290X29rKCkpXFxuLVxcdFxcdHJldHVybjtcXG4tXFxuLVxcdHNwcmludGYocGlkc3RyLCBcXFwiJWRcXFwiLCBnZXRwaWQoKSk7XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNpbmdfb25cXFwiKTtcXG4tXFx0Y2F0X2ludG9fZmlsZShcXFwiXFxcXG5cXFwiLCBUUkFDRURJUiBcXFwiL3RyYWNlXFxcIik7XFxuLVxcdGlmICgxKSB7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcImZ1bmN0aW9uX2dyYXBoXFxcIiwgVFJBQ0VESVIgXFxcIi9jdXJyZW50X3RyYWNlclxcXCIpO1xcbi1cXHRcXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXFxcIik7XFxuLVxcdH0gZWxzZSB7XFxuLVxcdFxcdGNhdF9pbnRvX2ZpbGUoXFxcIm5vcFxcXCIsIFRSQUNFRElSIFxcXCIvY3VycmVudF90cmFjZXJcXFwiKTtcXG4tXFx0fVxcbi1cXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXFxcIi9zZXRfZnRyYWNlX3BpZFxcXCIpO1xcbi1cXHRjYXRfaW50b19maWxlKFxcXCIxXFxcIiwgVFJBQ0VESVIgXFxcIi90cmFjaW5nX29uXFxcIik7XFxuLVxcdGRwcmludGYxKFxcXCJlbmFibGVkIHRyYWNpbmdcXFxcblxcXCIpO1xcbi0jZW5kaWZcXG4tfVxcbi1cXG4tc3RhdGljIHZvaWQgdHJhY2luZ19vZmYodm9pZClcXG4te1xcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFxcdTAwM2UgMFxcbi1cXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxcbi1cXHRcXHRyZXR1cm47XFxuLVxcdGNhdF9pbnRvX2ZpbGUoXFxcIjBcXFwiLCBcXFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXFxcIik7XFxuLSNlbmRpZlxcbi19XFxuLVxcbi12b2lkIGFib3J0X2hvb2tzKHZvaWQpXFxuLXtcXG4tXFx0ZmZsdXNoKHN0ZG91dCk7XFxuLVxcdGZwcmludGYoc3RkZXJyLCBcXFwicnVubmluZyAlcygpLi4uXFxcXG5cXFwiLCBfX2Z1bmNfXyk7XFxuLVxcdHRyYWNpbmdfb2ZmKCk7XFxuLSNpZmRlZiBTTEVFUF9PTl9BQk9SVFxcbi1cXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XFxuLSNlbmRpZlxcbi19XFxuLVxcbiAvKlxcbiAgKiBUaGlzIGF0dGVtcHRzIHRvIGhhdmUgcm91Z2hseSBhIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmV3XFxuICAqIGluc3RydWN0aW9ucyB0aGF0IGRvIGEgd3JpdGUsIGFuZCBhbm90aGVyIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zLiAgVGhhdFxcbkBAIC02NjksNyArNTg2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3QobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXFxuIFxcdFxcdFxcdHNpemUsIHByb3QsIHBrZXkpO1xcbiBcXHRwa2V5X2Fzc2VydChwa2V5IFxcdTAwM2MgTlJfUEtFWVMpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIHByb3QsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0cGtleV9hc3NlcnQocHRyICE9ICh2b2lkICopLTEpO1xcbitcXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XFxuIFxcdHJldCA9IG1wcm90ZWN0X3BrZXkoKHZvaWQgKilwdHIsIFBBR0VfU0laRSwgcHJvdCwgcGtleSk7XFxuIFxcdHBrZXlfYXNzZXJ0KCFyZXQpO1xcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG5AQCAtNjkyLDcgKzYwOSw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV9hbm9uX2h1Z2UobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXFxuIFxcdCAqL1xcbiBcXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xcbiBcXHRwdHIgPSBtbWFwKE5VTEwsIHNpemUsIFBST1RfTk9ORSwgTUFQX0FOT05ZTU9VU3xNQVBfUFJJVkFURSwgLTEsIDApO1xcbi1cXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XFxuK1xcdHBrZXlfYXNzZXJ0KHB0ciAhPSBNQVBfRkFJTEVEKTtcXG4gXFx0cmVjb3JkX3BrZXlfbWFsbG9jKHB0ciwgc2l6ZSwgcHJvdCk7XFxuIFxcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcXG4gXFxuQEAgLTc1MCw3ICs2NjcsNyBAQCBzdGF0aWMgdm9pZCAqbWFsbG9jX3BrZXlfaHVnZXRsYihsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcXG4gXFx0cGtleV9hc3NlcnQocGtleSBcXHUwMDNjIE5SX1BLRVlTKTtcXG4gXFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XFxuLVxcdHBrZXlfYXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0cGtleV9hc3NlcnQocHRyICE9IE1BUF9GQUlMRUQpO1xcbiBcXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XFxuIFxcbiBcXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcXG5AQCAtNzc5LDcgKzY5Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcXG4gXFx0XFx0cGtleV9hc3NlcnQobWFsbG9jX3R5cGUgXFx1MDAzYyBucl9tYWxsb2NfdHlwZXMpO1xcbiBcXG4gXFx0XFx0cmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpO1xcbi1cXHRcXHRwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7XFxuK1xcdFxcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcXG4gXFxuIFxcdFxcdG1hbGxvY190eXBlKys7XFxuIFxcdFxcdGlmIChtYWxsb2NfdHlwZSBcXHUwMDNlPSBucl9tYWxsb2NfdHlwZXMpXFxuQEAgLTExOTcsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxcbiBcXHQgKiBkb2luZyB0aGUgWFNBVkUgc2l6ZSBlbnVtZXJhdGlvbiBkYW5jZS5cXG4gXFx0ICovXFxuIFxcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4rXFx0cGtleV9hc3NlcnQoYnVmICE9IE1BUF9GQUlMRUQpO1xcbiBcXG4gXFx0LyogVGhlc2UgX19idWlsdGlucyByZXF1aXJlIGNvbXBpbGluZyB3aXRoIC1teHNhdmUgKi9cXG4gXFxuQEAgLTE3NjMsNyArMTY4MSw4IEBAIGludCBtYWluKHZvaWQpXFxuIFxcdFxcdGtzZnRfcHJpbnRfbXNnKFxcXCJydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcXFxuXFxcIik7XFxuIFxcbiBcXHRcXHRwdHIgID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcXG4tXFx0XFx0YXNzZXJ0KHB0ciAhPSAodm9pZCAqKS0xKTtcXG4rXFx0XFx0aWYgKHB0ciA9PSBNQVBfRkFJTEVEKVxcbitcXHRcXHRcXHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXFxcIm1tYXBcXFwiKTtcXG4gXFx0XFx0dGVzdF9tcHJvdGVjdF9wa2V5X29uX3Vuc3VwcG9ydGVkX2NwdShwdHIsIDEpO1xcbiBcXHRcXHRrc2Z0X3Rlc3RfcmVzdWx0X3Bhc3MoXFxcInBrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxcXG5cXFwiKTtcXG4gXFx0XFx0a3NmdF9maW5pc2hlZCgpO1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMDo1ODozOS4yNzUzNjE0NTlaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjkwODUxOTYwNzEsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IllvdSBhcmUgYW4gZXhwZXJ0IExpbnV4IGtlcm5lbCBtYWludGFpbmVyLlxuWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmVcbmlmIGl0IG1ha2VzIGZ1bmN0aW9uYWwgY2hhbmdlcyB0byB0aGUga2VybmVsIHRoYXQgc2hvdWxkIGJlIGZ1enplZC5cblxuSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluXG55b3VyIHdvcmtzcGFjZS4gRG8gTk9UIHJlbHkgb24geW91ciBpbnRlcm5hbCBrbm93bGVkZ2Ugb2YgdGhlIGtlcm5lbC4gWW91IG11c3QgYWN0aXZlbHlcbnVzZSB5b3VyIGNvZGUgYWNjZXNzIHRvb2xzIHRvIGV4YW1pbmUgdGhlIGFjdHVhbCBzb3VyY2UgY29kZSBhbmQgY29uZmlybSBhbnkgYXNzdW1wdGlvbnMuXG5cblJldHVybiBXb3J0aEZ1enppbmc9ZmFsc2UgaWYgdGhlIHBhdGNoIG9ubHkgY29udGFpbnM6XG4tIE1vZGlmaWNhdGlvbnMgdG8gRG9jdW1lbnRhdGlvbi8sIEtjb25maWcgZmlsZXMsIG9yIGNvZGUgY29tbWVudHMuXG4tIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLlxuLSBDaGFuZ2VzIHRvIG51bWVyaWMgY29uc3RhbnRzIG9yIG1hY3JvcyB0aGF0IGRvIG5vdCBmdW5jdGlvbmFsbHkgYWx0ZXIgZXhlY3V0aW9uIGZsb3cuXG4tIENvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMgbGlrZSBHQ0Ugb3IgUUVNVSxcbmV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cblxuSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaFxudG9vbHMgdG8gdmVyaWZ5IHRoZSBjb2RlIGNhbiBiZSBleGVjdXRlZCwgdGhlbiByZXR1cm4gV29ydGhGdXp6aW5nPXRydWUuXG5cbldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOlxuMS4gRXh0cmFjdCBhbnkgc3BlY2lmaWMga2VybmVsIGZ1bmN0aW9ucyB0aGF0IHNob3VsZCBiZSBoZWF2aWx5IGZ1enplZCBpbnRvIEZvY3VzU3ltYm9scy5cbiAgIEF2b2lkIGxpc3RpbmcgZ2VuZXJpYyBob3QtcGF0aCBmdW5jdGlvbnMgdG8gcHJldmVudCBza2V3ZWQgdGVzdCBkaXN0cmlidXRpb25zLlxuMi4gSWRlbnRpZnkgYW55IHNwZWNpZmljIENPTkZJR18gb3B0aW9ucyByZXF1aXJlZCB0byBwcm9wZXJseSB0ZXN0IHRoaXMgbmV3L21vZGlmaWVkIGZlYXR1cmUuXG4gICBHbyBhbmQgbG9vayBpbnRvIHRoZSBLY29uZmlnIGZpbGVzIGFuZCBjaGVjayBmb3IgaWZkZWZzIGFyb3VuZCB0aGUgY29kZSwgZG8gbm90IG1ha2UgYXNzdW1wdGlvbnMuXG4gICBEbyBub3QgbGlzdCB0b28gZ2VuZXJpYyBjb25maWdzICh3ZSBhbHJlYWR5IGhhdmUgdGhlbSBlbmFibGVkKS4gT25seSBsaXN0IHRob3NlIHRoYXRcbiAgIHNwZWNpZmljYWxseSBjb3ZlciB0aGUgbW9kaWZpZWQgY29kZS4gTGlzdCB0aGVtIGluIHRoZSBFbmFibGVDb25maWdzIG91dHB1dCBhcnJheSxcbiAgIGFuZCBETyBOT1QgYWRkIGEgJ0NPTkZJR18nIHByZWZpeCAoZS5nLiwgcmV0dXJuIFwiTkVUX0lQVjRcIiBpbnN0ZWFkIG9mIFwiQ09ORklHX05FVF9JUFY0XCIpLlxuUHJlZmVyIGNhbGxpbmcgc2V2ZXJhbCB0b29scyBhdCB0aGUgc2FtZSB0aW1lIHRvIHNhdmUgcm91bmQtdHJpcHMuXG5cblxuVXNlIHNldC1yZXN1bHRzIHRvb2wgdG8gcHJvdmlkZSByZXN1bHRzIG9mIHRoZSBhbmFseXNpcy5cbkl0IG11c3QgYmUgY2FsbGVkIGV4YWN0bHkgb25jZSBiZWZvcmUgdGhlIGZpbmFsIHJlcGx5LlxuSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLlxuIiwiUHJvbXB0IjoiRm9yIHlvdXIgY29udmVuaWVuY2UsIGhlcmUgaXMgdGhlIGRpZmYgb2YgdGhlIGNoYW5nZXM6XG5jb21taXQgYmNiY2Y3NzA5YTVhYTE5OGNiOTFhOTZmYzQ3NmJkZTU4YWEyNjNhYVxuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBNb24gSnVuIDI5IDEwOjU4OjM3IDIwMjYgKzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmggYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LWhlbHBlcnMuaFxuaW5kZXggMmMzNzdmNGU5ZGYxZDMuLjQ2YThhMTg3OGRjMWZkIDEwMDY0NFxuLS0tIGEvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1oZWxwZXJzLmhcbisrKyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oXG5AQCAtNjgsNyArNjgsOSBAQCBzdGF0aWMgaW5saW5lIHZvaWQgc2lnc2FmZV9wcmludGYoY29uc3QgY2hhciAqZm9ybWF0LCAuLi4pXG4gI2RlZmluZSBkcHJpbnRmMyhhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDMsIGFyZ3MpXG4gI2RlZmluZSBkcHJpbnRmNChhcmdzLi4uKSBkcHJpbnRmX2xldmVsKDQsIGFyZ3MpXG4gXG4tZXh0ZXJuIHZvaWQgYWJvcnRfaG9va3Modm9pZCk7XG4rdm9pZCB0cmFjaW5nX29uKHZvaWQpO1xuK3ZvaWQgdHJhY2luZ19vZmYodm9pZCk7XG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKTtcbiAjZGVmaW5lIHBrZXlfYXNzZXJ0KGNvbmRpdGlvbikgZG8ge1x0XHRcXFxuIFx0aWYgKCEoY29uZGl0aW9uKSkge1x0XHRcdFxcXG4gXHRcdGRwcmludGYwKFwiIyBhc3NlcnQoKSBhdCAlczo6JWQgdGVzdF9ucjogJWQgaXRlcmF0aW9uOiAlZFxcblwiLCBcXFxuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhcbmluZGV4IDE3YmYyZDFiMDE5MmUwLi4yY2U4NTU4MGI0MDQ4NyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktcG93ZXJwYy5oXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5LXBvd2VycGMuaFxuQEAgLTEyNiw3ICsxMjYsNyBAQCBzdGF0aWMgaW5saW5lIHZvaWQgKm1hbGxvY19wa2V5X3dpdGhfbXByb3RlY3Rfc3VicGFnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcFxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXG4gXHRyZXQgPSBzeXNjYWxsKF9fTlJfc3VicGFnZV9wcm90LCBwdHIsIHNpemUsIE5VTEwpO1xuIFx0aWYgKHJldCkge1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV9zaWdoYW5kbGVyX3Rlc3RzLmNcbmluZGV4IDMwMmZlZjU0MDQ5Yzg3Li5mMzBjOTk2NWE1NjFkOSAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfc2lnaGFuZGxlcl90ZXN0cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY1xuQEAgLTE5LDcgKzE5LDYgQEBcbiAjaW5jbHVkZSBcdTAwM2NzdGRpbnQuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N0ZGJvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3NpZ25hbC5oXHUwMDNlXG4tI2luY2x1ZGUgXHUwMDNjYXNzZXJ0LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzdGRsaWIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY3N5cy9tbWFuLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NzeXMvdHlwZXMuaFx1MDAzZVxuQEAgLTM2LDYgKzM1LDEwIEBAIHN0YXRpYyBwdGhyZWFkX211dGV4X3QgbXV0ZXggPSBQVEhSRUFEX01VVEVYX0lOSVRJQUxJWkVSO1xuIHN0YXRpYyBwdGhyZWFkX2NvbmRfdCBjb25kID0gUFRIUkVBRF9DT05EX0lOSVRJQUxJWkVSO1xuIHN0YXRpYyBzaWdpbmZvX3Qgc2lnaW5mbyA9IHswfTtcbiBcbitpbnQgaXRlcmF0aW9uX25yID0gMTtcbitpbnQgdGVzdF9ucjtcbitpbnQgZHByaW50X2luX3NpZ25hbDtcbitcbiAvKlxuICAqIFdlIG5lZWQgdG8gdXNlIGlubGluZSBhc3NlbWJseSBpbnN0ZWFkIG9mIGdsaWJjJ3Mgc3lzY2FsbCBiZWNhdXNlIGdsaWJjJ3NcbiAgKiBzeXNjYWxsIHdpbGwgYXR0ZW1wdCB0byBhY2Nlc3MgdGhlIFBMVCBpbiBvcmRlciB0byBjYWxsIGEgbGlicmFyeSBmdW5jdGlvblxuQEAgLTIwNywyMiArMjEwLDIyIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfcGtleTBfZGlzYWJsZWQodm9pZClcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHRwdGhyZWFkX2F0dHJfdCBhdHRyO1xuIFx0cHRocmVhZF90IHRocjtcbitcdGludCByZXQ7XG4gXG4gXHRzYS5zYV9mbGFncyA9IFNBX1NJR0lORk87XG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWdzZWd2X2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuIFx0cHRocmVhZF9hdHRyX2luaXQoXHUwMDI2YXR0cik7XG4gXHRwdGhyZWFkX2F0dHJfc2V0ZGV0YWNoc3RhdGUoXHUwMDI2YXR0ciwgUFRIUkVBRF9DUkVBVEVfREVUQUNIRUQpO1xuIFxuLVx0cHRocmVhZF9jcmVhdGUoXHUwMDI2dGhyLCBcdTAwMjZhdHRyLCB0aHJlYWRfc2Vndl93aXRoX3BrZXkwX2Rpc2FibGVkLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3Zfd2l0aF9wa2V5MF9kaXNhYmxlZCwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRwdGhyZWFkX211dGV4X2xvY2soXHUwMDI2bXV0ZXgpO1xuIFx0d2hpbGUgKHNpZ2luZm8uc2lfc2lnbm8gPT0gMClcbkBAIC0yNDcsMjIgKzI1MCwyMiBAQCBzdGF0aWMgdm9pZCB0ZXN0X3NpZ3NlZ3ZfaGFuZGxlcl9jYW5ub3RfYWNjZXNzX3N0YWNrKHZvaWQpXG4gXHRzdHJ1Y3Qgc2lnYWN0aW9uIHNhO1xuIFx0cHRocmVhZF9hdHRyX3QgYXR0cjtcbiBcdHB0aHJlYWRfdCB0aHI7XG4rXHRpbnQgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPO1xuIFxuIFx0c2Euc2Ffc2lnYWN0aW9uID0gc2lnc2Vndl9oYW5kbGVyO1xuIFx0c2lnZW1wdHlzZXQoXHUwMDI2c2Euc2FfbWFzayk7XG4tXHRpZiAoc2lnYWN0aW9uKFNJR1NFR1YsIFx1MDAyNnNhLCBOVUxMKSA9PSAtMSkge1xuLVx0XHRwZXJyb3IoXCJzaWdhY3Rpb25cIik7XG4tXHRcdGV4aXQoRVhJVF9GQUlMVVJFKTtcbi1cdH1cbitcdHJldCA9IHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCk7XG4rXHRwa2V5X2Fzc2VydChyZXQgPT0gMCk7XG4gXG4gXHRtZW1zZXQoXHUwMDI2c2lnaW5mbywgMCwgc2l6ZW9mKHNpZ2luZm8pKTtcbiBcbiBcdHB0aHJlYWRfYXR0cl9pbml0KFx1MDAyNmF0dHIpO1xuIFx0cHRocmVhZF9hdHRyX3NldGRldGFjaHN0YXRlKFx1MDAyNmF0dHIsIFBUSFJFQURfQ1JFQVRFX0RFVEFDSEVEKTtcbiBcbi1cdHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHJldCA9IHB0aHJlYWRfY3JlYXRlKFx1MDAyNnRociwgXHUwMDI2YXR0ciwgdGhyZWFkX3NlZ3ZfcGt1ZXJyX3N0YWNrLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdHB0aHJlYWRfbXV0ZXhfbG9jayhcdTAwMjZtdXRleCk7XG4gXHR3aGlsZSAoc2lnaW5mby5zaV9zaWdubyA9PSAwKVxuQEAgLTI4OCwyMSArMjkxLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHRpbnQgcGFyZW50X3BpZCA9IDA7XG4gXHRpbnQgY2hpbGRfcGlkID0gMDtcbiBcdHU2NCBwa2V5X3JlZztcbitcdGxvbmcgcmV0O1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3NlZ3ZfaGFuZGxlcjtcbiBcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIEFsbG93IGFjY2VzcyB0byBNUEsgMCBhbmQgTVBLIDEgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTMxNywxMyArMzE5LDE0IEBAIHN0YXRpYyB2b2lkIHRlc3Rfc2lnc2Vndl9oYW5kbGVyX3dpdGhfZGlmZmVyZW50X3BrZXlfZm9yX3N0YWNrKHZvaWQpXG4gXHQvKiBTZXQgdXAgYWx0ZXJuYXRlIHNpZ25hbCBzdGFjayB0aGF0IHdpbGwgdXNlIHRoZSBkZWZhdWx0IE1QSyAqL1xuIFx0c2lnc3RhY2suc3Nfc3AgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdFx0ICAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4rXHRwa2V5X2Fzc2VydChzaWdzdGFjay5zc19zcCAhPSBNQVBfRkFJTEVEKTtcbiBcdHNpZ3N0YWNrLnNzX2ZsYWdzID0gMDtcbiBcdHNpZ3N0YWNrLnNzX3NpemUgPSBTVEFDS19TSVpFO1xuIFxuIFx0bWVtc2V0KFx1MDAyNnNpZ2luZm8sIDAsIHNpemVvZihzaWdpbmZvKSk7XG4gXG4gXHQvKiBVc2UgY2xvbmUgdG8gYXZvaWQgbmV3ZXIgZ2xpYmNzIHVzaW5nIHJzZXEgb24gbmV3IHRocmVhZHMgKi9cbi1cdGxvbmcgcmV0ID0gY2xvbmVfcmF3KENMT05FX1ZNIHwgQ0xPTkVfRlMgfCBDTE9ORV9GSUxFUyB8XG4rXHRyZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbiBcdFx0XHQgICAgIENMT05FX1NJR0hBTkQgfCBDTE9ORV9USFJFQUQgfCBDTE9ORV9TWVNWU0VNIHxcbiBcdFx0XHQgICAgIENMT05FX1BBUkVOVF9TRVRUSUQgfCBDTE9ORV9DSElMRF9DTEVBUlRJRCB8XG4gXHRcdFx0ICAgICBDTE9ORV9ERVRBQ0hFRCxcbkBAIC0zMzMsNyArMzM2LDcgQEAgc3RhdGljIHZvaWQgdGVzdF9zaWdzZWd2X2hhbmRsZXJfd2l0aF9kaWZmZXJlbnRfcGtleV9mb3Jfc3RhY2sodm9pZClcbiBcbiBcdGlmIChyZXQgXHUwMDNjIDApIHtcbiBcdFx0ZXJybm8gPSAtcmV0O1xuLVx0XHRwZXJyb3IoXCJjbG9uZVwiKTtcbitcdFx0cGtleV9hc3NlcnQoMCk7XG4gXHR9IGVsc2UgaWYgKHJldCA9PSAwKSB7XG4gXHRcdHRocmVhZF9zZWd2X21hcGVycl9wdHIoXHUwMDI2c2lnc3RhY2spO1xuIFx0XHRzeXNjYWxsX3JhdyhTWVNfZXhpdCwgMCwgMCwgMCwgMCwgMCwgMCk7XG5AQCAtMzU4LDYgKzM2MSw3IEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9wcmVzZXJ2ZWRfYWZ0ZXJfc2lndXNyMSh2b2lkKVxuIHtcbiBcdHN0cnVjdCBzaWdhY3Rpb24gc2E7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRpbnQgcmV0O1xuIFxuIFx0LyogQWxsb3cgYWNjZXNzIHRvIE1QSyAwIGFuZCBhbiBhcmJpdHJhcnkgc2V0IG9mIGtleXMgKi9cbiBcdHBrZXlfcmVnID0gcGtleV9yZWdfcmVzdHJpY3RpdmVfZGVmYXVsdCgpO1xuQEAgLTM2OSwxMCArMzczLDggQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3ByZXNlcnZlZF9hZnRlcl9zaWd1c3IxKHZvaWQpXG4gXG4gXHRzYS5zYV9zaWdhY3Rpb24gPSBzaWd1c3IxX2hhbmRsZXI7XG4gXHRzaWdlbXB0eXNldChcdTAwMjZzYS5zYV9tYXNrKTtcbi1cdGlmIChzaWdhY3Rpb24oU0lHVVNSMSwgXHUwMDI2c2EsIE5VTEwpID09IC0xKSB7XG4tXHRcdHBlcnJvcihcInNpZ2FjdGlvblwiKTtcbi1cdFx0ZXhpdChFWElUX0ZBSUxVUkUpO1xuLVx0fVxuK1x0cmV0ID0gc2lnYWN0aW9uKFNJR1VTUjEsIFx1MDAyNnNhLCBOVUxMKTtcbitcdHBrZXlfYXNzZXJ0KHJldCA9PSAwKTtcbiBcbiBcdG1lbXNldChcdTAwMjZzaWdpbmZvLCAwLCBzaXplb2Yoc2lnaW5mbykpO1xuIFxuQEAgLTQ0NCw2ICs0NDYsMTMgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0aW50IHBhcmVudF9waWQgPSAwO1xuIFx0aW50IGNoaWxkX3BpZCA9IDA7XG4gXHR1NjQgcGtleV9yZWc7XG4rXHRsb25nIHJldDtcbitcbitcdC8qXG4rXHQgKiBTSUdTRUdWIGhhbmRsZXIgaXMgcmVzZXQgdG8gU0lHX0RGTCBiZWxvdzsgdHVybiB0cmFjaW5nIG9mZiBmaXJzdFxuK1x0ICogc28gYSBjcmFzaCBkb2VzIG5vdCBsZWF2ZSBmdHJhY2UgZW5hYmxlZC5cbitcdCAqL1xuK1x0dHJhY2luZ19vZmYoKTtcbiBcbiBcdHNhLnNhX2hhbmRsZXIgPSBTSUdfREZMO1xuIFx0c2Euc2FfZmxhZ3MgPSAwO1xuQEAgLTQ1MywyNCArNDYyLDIwIEBAIHN0YXRpYyB2b2lkIHRlc3RfcGtydV9zaWdyZXR1cm4odm9pZClcbiBcdCAqIEZvciB0aGlzIHRlc3RjYXNlLCB3ZSBkbyBub3Qgd2FudCB0byBoYW5kbGUgU0lHU0VHVi4gUmVzZXQgaGFuZGxlclxuIFx0ICogdG8gZGVmYXVsdCBzbyB0aGF0IHRoZSBhcHBsaWNhdGlvbiBjYW4gY3Jhc2ggaWYgaXQgcmVjZWl2ZXMgU0lHU0VHVi5cbiBcdCAqL1xuLVx0aWYgKHNpZ2FjdGlvbihTSUdTRUdWLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHU0VHViwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c2Euc2FfZmxhZ3MgPSBTQV9TSUdJTkZPIHwgU0FfT05TVEFDSztcbiBcdHNhLnNhX3NpZ2FjdGlvbiA9IHNpZ3VzcjJfaGFuZGxlcjtcbiBcdHNpZ2VtcHR5c2V0KFx1MDAyNnNhLnNhX21hc2spO1xuIFxuLVx0aWYgKHNpZ2FjdGlvbihTSUdVU1IyLCBcdTAwMjZzYSwgTlVMTCkgPT0gLTEpIHtcbi1cdFx0cGVycm9yKFwic2lnYWN0aW9uXCIpO1xuLVx0XHRleGl0KEVYSVRfRkFJTFVSRSk7XG4tXHR9XG4rXHRyZXQgPSBzaWdhY3Rpb24oU0lHVVNSMiwgXHUwMDI2c2EsIE5VTEwpO1xuK1x0cGtleV9hc3NlcnQocmV0ID09IDApO1xuIFxuIFx0c3RhY2sgPSBtbWFwKDAsIFNUQUNLX1NJWkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsXG4gXHRcdCAgICAgTUFQX1BSSVZBVEUgfCBNQVBfQU5PTllNT1VTLCAtMSwgMCk7XG4gXG4tXHRhc3NlcnQoc3RhY2sgIT0gTUFQX0ZBSUxFRCk7XG4rXHRwa2V5X2Fzc2VydChzdGFjayAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qXG4gXHQgKiBBbGxvdyBhY2Nlc3MgdG8gTVBLIDAgYW5kIE1QSyAyLiBUaGUgY2hpbGQgdGhyZWFkICh0byBiZSBjcmVhdGVkXG5AQCAtNDkwLDExICs0OTUsMTIgQEAgc3RhdGljIHZvaWQgdGVzdF9wa3J1X3NpZ3JldHVybih2b2lkKVxuIFx0LyogU2V0IHVwIGFsdGVybmF0ZSBzaWduYWwgc3RhY2sgdGhhdCB3aWxsIHVzZSB0aGUgZGVmYXVsdCBNUEsgKi9cbiBcdHNpZ3N0YWNrLnNzX3NwID0gbW1hcCgwLCBTVEFDS19TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLFxuIFx0XHRcdCAgICAgIE1BUF9QUklWQVRFIHwgTUFQX0FOT05ZTU9VUywgLTEsIDApO1xuK1x0cGtleV9hc3NlcnQoc2lnc3RhY2suc3Nfc3AgIT0gTUFQX0ZBSUxFRCk7XG4gXHRzaWdzdGFjay5zc19mbGFncyA9IDA7XG4gXHRzaWdzdGFjay5zc19zaXplID0gU1RBQ0tfU0laRTtcbiBcbiBcdC8qIFVzZSBjbG9uZSB0byBhdm9pZCBuZXdlciBnbGliY3MgdXNpbmcgcnNlcSBvbiBuZXcgdGhyZWFkcyAqL1xuLVx0bG9uZyByZXQgPSBjbG9uZV9yYXcoQ0xPTkVfVk0gfCBDTE9ORV9GUyB8IENMT05FX0ZJTEVTIHxcbitcdHJldCA9IGNsb25lX3JhdyhDTE9ORV9WTSB8IENMT05FX0ZTIHwgQ0xPTkVfRklMRVMgfFxuIFx0XHRcdCAgICAgQ0xPTkVfU0lHSEFORCB8IENMT05FX1RIUkVBRCB8IENMT05FX1NZU1ZTRU0gfFxuIFx0XHRcdCAgICAgQ0xPTkVfUEFSRU5UX1NFVFRJRCB8IENMT05FX0NISUxEX0NMRUFSVElEIHxcbiBcdFx0XHQgICAgIENMT05FX0RFVEFDSEVELFxuQEAgLTUwNCw3ICs1MTAsNyBAQCBzdGF0aWMgdm9pZCB0ZXN0X3BrcnVfc2lncmV0dXJuKHZvaWQpXG4gXG4gXHRpZiAocmV0IFx1MDAzYyAwKSB7XG4gXHRcdGVycm5vID0gLXJldDtcbi1cdFx0cGVycm9yKFwiY2xvbmVcIik7XG4rXHRcdHBrZXlfYXNzZXJ0KDApO1xuIFx0fSAgZWxzZSBpZiAocmV0ID09IDApIHtcbiBcdFx0dGhyZWFkX3NpZ3VzcjJfc2VsZihcdTAwMjZzaWdzdGFjayk7XG4gXHRcdHN5c2NhbGxfcmF3KFNZU19leGl0LCAwLCAwLCAwLCAwLCAwLCAwKTtcbkBAIC01MzAsMTYgKzUzNiwxNyBAQCBzdGF0aWMgdm9pZCAoKnBrZXlfdGVzdHNbXSkodm9pZCkgPSB7XG4gXG4gaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKmFyZ3ZbXSlcbiB7XG4tXHRpbnQgaTtcbi1cbiBcdGtzZnRfcHJpbnRfaGVhZGVyKCk7XG4gXHRrc2Z0X3NldF9wbGFuKEFSUkFZX1NJWkUocGtleV90ZXN0cykpO1xuIFxuIFx0aWYgKCFpc19wa2V5c19zdXBwb3J0ZWQoKSlcbiBcdFx0a3NmdF9leGl0X3NraXAoXCJwa2V5cyBub3Qgc3VwcG9ydGVkXFxuXCIpO1xuIFxuLVx0Zm9yIChpID0gMDsgaSBcdTAwM2MgQVJSQVlfU0laRShwa2V5X3Rlc3RzKTsgaSsrKVxuLVx0XHQoKnBrZXlfdGVzdHNbaV0pKCk7XG4rXHRmb3IgKHRlc3RfbnIgPSAwOyB0ZXN0X25yIFx1MDAzYyBBUlJBWV9TSVpFKHBrZXlfdGVzdHMpOyB0ZXN0X25yKyspIHtcbitcdFx0dHJhY2luZ19vbigpO1xuK1x0XHQoKnBrZXlfdGVzdHNbdGVzdF9ucl0pKCk7XG4rXHRcdHRyYWNpbmdfb2ZmKCk7XG4rXHR9XG4gXG4gXHRrc2Z0X2ZpbmlzaGVkKCk7XG4gXHRyZXR1cm4gMDtcbmRpZmYgLS1naXQgYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuYyBiL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jXG5pbmRleCAyNTViMzMyZjdhMDhiMi4uYWJmNzA4ZDY1NzVlYzEgMTAwNjQ0XG4tLS0gYS90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3V0aWwuY1xuKysrIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleV91dGlsLmNcbkBAIC0yLDkgKzIsOTUgQEBcbiAjZGVmaW5lIF9fU0FORV9VU0VSU1BBQ0VfVFlQRVNfX1xuICNpbmNsdWRlIFx1MDAzY3N5cy9zeXNjYWxsLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2N1bmlzdGQuaFx1MDAzZVxuKyNpbmNsdWRlIFx1MDAzY2ZjbnRsLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NzdGRpby5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjc3RyaW5nLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcInBrZXktaGVscGVycy5oXCJcbiBcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4re1xuK1x0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuK1x0aW50IHJldDtcbitcbitcdGRwcmludGYyKFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXG5cIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XG4rXHQvKlxuK1x0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbitcdCAqIHBrZXlfYXNzZXJ0KClcbitcdCAqL1xuK1x0aWYgKGZkIFx1MDAzYyAwKSB7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImVycm9yIG9wZW5pbmcgJyVzJ1xcblwiLCBzdHIpO1xuK1x0XHRwZXJyb3IoXCJlcnJvcjogXCIpO1xuK1x0XHRleGl0KF9fTElORV9fKTtcbitcdH1cbitcbitcdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbitcdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbitcdFx0cGVycm9yKFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcIik7XG4rXHRcdGZwcmludGYoc3RkZXJyLCBcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcblwiLCBmaWxlLCBzdHIpO1xuK1x0XHRleGl0KF9fTElORV9fKTtcbitcdH1cbitcdGNsb3NlKGZkKTtcbit9XG4rXG4rc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcbitzdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuK3tcbitcdGlmIChnZXRldWlkKCkgIT0gMCkge1xuK1x0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuK1x0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXCJcbitcdFx0XHRcdFx0XCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcblwiKTtcbitcdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuK1x0XHRyZXR1cm4gMDtcbitcdH1cbitcdHJldHVybiAxO1xuK31cbisjZW5kaWZcbitcbit2b2lkIHRyYWNpbmdfb24odm9pZClcbit7XG4rI2lmIENPTlRST0xfVFJBQ0lORyBcdTAwM2UgMFxuKyNkZWZpbmUgVFJBQ0VESVIgXCIvc3lzL2tlcm5lbC90cmFjaW5nXCJcbitcdGNoYXIgcGlkc3RyWzMyXTtcbitcbitcdGlmICghdHJhY2luZ19yb290X29rKCkpXG4rXHRcdHJldHVybjtcbitcbitcdHNwcmludGYocGlkc3RyLCBcIiVkXCIsIGdldHBpZCgpKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFRSQUNFRElSIFwiL3RyYWNpbmdfb25cIik7XG4rXHRjYXRfaW50b19maWxlKFwiXFxuXCIsIFRSQUNFRElSIFwiL3RyYWNlXCIpO1xuK1x0aWYgKDEpIHtcbitcdFx0Y2F0X2ludG9fZmlsZShcImZ1bmN0aW9uX2dyYXBoXCIsIFRSQUNFRElSIFwiL2N1cnJlbnRfdHJhY2VyXCIpO1xuK1x0XHRjYXRfaW50b19maWxlKFwiMVwiLCBUUkFDRURJUiBcIi9vcHRpb25zL2Z1bmNncmFwaC1wcm9jXCIpO1xuK1x0fSBlbHNlIHtcbitcdFx0Y2F0X2ludG9fZmlsZShcIm5vcFwiLCBUUkFDRURJUiBcIi9jdXJyZW50X3RyYWNlclwiKTtcbitcdH1cbitcdGNhdF9pbnRvX2ZpbGUocGlkc3RyLCBUUkFDRURJUiBcIi9zZXRfZnRyYWNlX3BpZFwiKTtcbitcdGNhdF9pbnRvX2ZpbGUoXCIxXCIsIFRSQUNFRElSIFwiL3RyYWNpbmdfb25cIik7XG4rXHRkcHJpbnRmMShcImVuYWJsZWQgdHJhY2luZ1xcblwiKTtcbisjZW5kaWZcbit9XG4rXG4rdm9pZCB0cmFjaW5nX29mZih2b2lkKVxuK3tcbisjaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4rXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuK1x0XHRyZXR1cm47XG4rXHRjYXRfaW50b19maWxlKFwiMFwiLCBcIi9zeXMva2VybmVsL3RyYWNpbmcvdHJhY2luZ19vblwiKTtcbisjZW5kaWZcbit9XG4rXG4rdm9pZCBhYm9ydF9ob29rcyh2b2lkKVxuK3tcbitcdGZmbHVzaChzdGRvdXQpO1xuK1x0ZnByaW50ZihzdGRlcnIsIFwicnVubmluZyAlcygpLi4uXFxuXCIsIF9fZnVuY19fKTtcbitcdHRyYWNpbmdfb2ZmKCk7XG4rI2lmZGVmIFNMRUVQX09OX0FCT1JUXG4rXHRzbGVlcChTTEVFUF9PTl9BQk9SVCk7XG4rI2VuZGlmXG4rfVxuK1xuIGludCBzeXNfcGtleV9hbGxvYyh1bnNpZ25lZCBsb25nIGZsYWdzLCB1bnNpZ25lZCBsb25nIGluaXRfdmFsKVxuIHtcbiBcdGludCByZXQgPSBzeXNjYWxsKFNZU19wa2V5X2FsbG9jLCBmbGFncywgaW5pdF92YWwpO1xuZGlmZiAtLWdpdCBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jIGIvdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNcbmluZGV4IDlhNmQ5NTRlZTM3MTI2Li45NmE0ZWIyNmYzMjYwMyAxMDA2NDRcbi0tLSBhL3Rvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3Byb3RlY3Rpb25fa2V5cy5jXG4rKysgYi90b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wcm90ZWN0aW9uX2tleXMuY1xuQEAgLTYyLDg5ICs2Miw2IEBAIG5vaW5saW5lIGludCByZWFkX3B0cihpbnQgKnB0cilcbiBcdHJldHVybiAqcHRyO1xuIH1cbiBcbi0jaWYgQ09OVFJPTF9UUkFDSU5HIFx1MDAzZSAwXG4tc3RhdGljIHZvaWQgY2F0X2ludG9fZmlsZShjaGFyICpzdHIsIGNoYXIgKmZpbGUpXG4te1xuLVx0aW50IGZkID0gb3BlbihmaWxlLCBPX1JEV1IpO1xuLVx0aW50IHJldDtcbi1cbi1cdGRwcmludGYyKFwiJXMoKTogd3JpdGluZyAnJXMnIHRvICclcydcXG5cIiwgX19mdW5jX18sIHN0ciwgZmlsZSk7XG4tXHQvKlxuLVx0ICogdGhlc2UgbmVlZCB0byBiZSByYXcgYmVjYXVzZSB0aGV5IGFyZSBjYWxsZWQgdW5kZXJcbi1cdCAqIHBrZXlfYXNzZXJ0KClcbi1cdCAqL1xuLVx0aWYgKGZkIFx1MDAzYyAwKSB7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcImVycm9yIG9wZW5pbmcgJyVzJ1xcblwiLCBzdHIpO1xuLVx0XHRwZXJyb3IoXCJlcnJvcjogXCIpO1xuLVx0XHRleGl0KF9fTElORV9fKTtcbi1cdH1cbi1cbi1cdHJldCA9IHdyaXRlKGZkLCBzdHIsIHN0cmxlbihzdHIpKTtcbi1cdGlmIChyZXQgIT0gc3RybGVuKHN0cikpIHtcbi1cdFx0cGVycm9yKFwid3JpdGUgdG8gZmlsZSBmYWlsZWRcIik7XG4tXHRcdGZwcmludGYoc3RkZXJyLCBcImZpbGVuYW1lOiAnJXMnIHN0cjogJyVzJ1xcblwiLCBmaWxlLCBzdHIpO1xuLVx0XHRleGl0KF9fTElORV9fKTtcbi1cdH1cbi1cdGNsb3NlKGZkKTtcbi19XG4tXG4tc3RhdGljIGludCB3YXJuZWRfdHJhY2luZztcbi1zdGF0aWMgaW50IHRyYWNpbmdfcm9vdF9vayh2b2lkKVxuLXtcbi1cdGlmIChnZXRldWlkKCkgIT0gMCkge1xuLVx0XHRpZiAoIXdhcm5lZF90cmFjaW5nKVxuLVx0XHRcdGZwcmludGYoc3RkZXJyLCBcIldBUk5JTkc6IG5vdCBydW4gYXMgcm9vdCwgXCJcbi1cdFx0XHRcdFx0XCJjYW4gbm90IGRvIHRyYWNpbmcgY29udHJvbFxcblwiKTtcbi1cdFx0d2FybmVkX3RyYWNpbmcgPSAxO1xuLVx0XHRyZXR1cm4gMDtcbi1cdH1cbi1cdHJldHVybiAxO1xuLX1cbi0jZW5kaWZcbi1cbi1zdGF0aWMgdm9pZCB0cmFjaW5nX29uKHZvaWQpXG4te1xuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi0jZGVmaW5lIFRSQUNFRElSIFwiL3N5cy9rZXJuZWwvdHJhY2luZ1wiXG4tXHRjaGFyIHBpZHN0clszMl07XG4tXG4tXHRpZiAoIXRyYWNpbmdfcm9vdF9vaygpKVxuLVx0XHRyZXR1cm47XG4tXG4tXHRzcHJpbnRmKHBpZHN0ciwgXCIlZFwiLCBnZXRwaWQoKSk7XG4tXHRjYXRfaW50b19maWxlKFwiMFwiLCBUUkFDRURJUiBcIi90cmFjaW5nX29uXCIpO1xuLVx0Y2F0X2ludG9fZmlsZShcIlxcblwiLCBUUkFDRURJUiBcIi90cmFjZVwiKTtcbi1cdGlmICgxKSB7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCJmdW5jdGlvbl9ncmFwaFwiLCBUUkFDRURJUiBcIi9jdXJyZW50X3RyYWNlclwiKTtcbi1cdFx0Y2F0X2ludG9fZmlsZShcIjFcIiwgVFJBQ0VESVIgXCIvb3B0aW9ucy9mdW5jZ3JhcGgtcHJvY1wiKTtcbi1cdH0gZWxzZSB7XG4tXHRcdGNhdF9pbnRvX2ZpbGUoXCJub3BcIiwgVFJBQ0VESVIgXCIvY3VycmVudF90cmFjZXJcIik7XG4tXHR9XG4tXHRjYXRfaW50b19maWxlKHBpZHN0ciwgVFJBQ0VESVIgXCIvc2V0X2Z0cmFjZV9waWRcIik7XG4tXHRjYXRfaW50b19maWxlKFwiMVwiLCBUUkFDRURJUiBcIi90cmFjaW5nX29uXCIpO1xuLVx0ZHByaW50ZjEoXCJlbmFibGVkIHRyYWNpbmdcXG5cIik7XG4tI2VuZGlmXG4tfVxuLVxuLXN0YXRpYyB2b2lkIHRyYWNpbmdfb2ZmKHZvaWQpXG4te1xuLSNpZiBDT05UUk9MX1RSQUNJTkcgXHUwMDNlIDBcbi1cdGlmICghdHJhY2luZ19yb290X29rKCkpXG4tXHRcdHJldHVybjtcbi1cdGNhdF9pbnRvX2ZpbGUoXCIwXCIsIFwiL3N5cy9rZXJuZWwvdHJhY2luZy90cmFjaW5nX29uXCIpO1xuLSNlbmRpZlxuLX1cbi1cbi12b2lkIGFib3J0X2hvb2tzKHZvaWQpXG4te1xuLVx0ZmZsdXNoKHN0ZG91dCk7XG4tXHRmcHJpbnRmKHN0ZGVyciwgXCJydW5uaW5nICVzKCkuLi5cXG5cIiwgX19mdW5jX18pO1xuLVx0dHJhY2luZ19vZmYoKTtcbi0jaWZkZWYgU0xFRVBfT05fQUJPUlRcbi1cdHNsZWVwKFNMRUVQX09OX0FCT1JUKTtcbi0jZW5kaWZcbi19XG4tXG4gLypcbiAgKiBUaGlzIGF0dGVtcHRzIHRvIGhhdmUgcm91Z2hseSBhIHBhZ2Ugb2YgaW5zdHJ1Y3Rpb25zIGZvbGxvd2VkIGJ5IGEgZmV3XG4gICogaW5zdHJ1Y3Rpb25zIHRoYXQgZG8gYSB3cml0ZSwgYW5kIGFub3RoZXIgcGFnZSBvZiBpbnN0cnVjdGlvbnMuICBUaGF0XG5AQCAtNjY5LDcgKzU4Niw3IEBAIHN0YXRpYyB2b2lkICptYWxsb2NfcGtleV93aXRoX21wcm90ZWN0KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0XHRcdHNpemUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBwcm90LCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZXQgPSBtcHJvdGVjdF9wa2V5KCh2b2lkICopcHRyLCBQQUdFX1NJWkUsIHByb3QsIHBrZXkpO1xuIFx0cGtleV9hc3NlcnQoIXJldCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC02OTIsNyArNjA5LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2Fub25faHVnZShsb25nIHNpemUsIGludCBwcm90LCB1MTYgcGtleSlcbiBcdCAqL1xuIFx0c2l6ZSA9IEFMSUdOX1VQKHNpemUsIEhQQUdFX1NJWkUgKiAyKTtcbiBcdHB0ciA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbiBcdG1wcm90ZWN0X3BrZXkocHRyLCBzaXplLCBwcm90LCBwa2V5KTtcbiBcbkBAIC03NTAsNyArNjY3LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5X2h1Z2V0bGIobG9uZyBzaXplLCBpbnQgcHJvdCwgdTE2IHBrZXkpXG4gXHRzaXplID0gQUxJR05fVVAoc2l6ZSwgSFBBR0VfU0laRSAqIDIpO1xuIFx0cGtleV9hc3NlcnQocGtleSBcdTAwM2MgTlJfUEtFWVMpO1xuIFx0cHRyID0gbW1hcChOVUxMLCBzaXplLCBQUk9UX05PTkUsIGZsYWdzLCAtMSwgMCk7XG4tXHRwa2V5X2Fzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRwa2V5X2Fzc2VydChwdHIgIT0gTUFQX0ZBSUxFRCk7XG4gXHRtcHJvdGVjdF9wa2V5KHB0ciwgc2l6ZSwgcHJvdCwgcGtleSk7XG4gXG4gXHRyZWNvcmRfcGtleV9tYWxsb2MocHRyLCBzaXplLCBwcm90KTtcbkBAIC03NzksNyArNjk2LDcgQEAgc3RhdGljIHZvaWQgKm1hbGxvY19wa2V5KGxvbmcgc2l6ZSwgaW50IHByb3QsIHUxNiBwa2V5KVxuIFx0XHRwa2V5X2Fzc2VydChtYWxsb2NfdHlwZSBcdTAwM2MgbnJfbWFsbG9jX3R5cGVzKTtcbiBcbiBcdFx0cmV0ID0gcGtleV9tYWxsb2NbbWFsbG9jX3R5cGVdKHNpemUsIHByb3QsIHBrZXkpO1xuLVx0XHRwa2V5X2Fzc2VydChyZXQgIT0gKHZvaWQgKiktMSk7XG4rXHRcdHBrZXlfYXNzZXJ0KHJldCAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdFx0bWFsbG9jX3R5cGUrKztcbiBcdFx0aWYgKG1hbGxvY190eXBlIFx1MDAzZT0gbnJfbWFsbG9jX3R5cGVzKVxuQEAgLTExOTcsNiArMTExNCw3IEBAIHN0YXRpYyB2b2lkIGFyY2hfZm9yY2VfcGtleV9yZWdfaW5pdCh2b2lkKVxuIFx0ICogZG9pbmcgdGhlIFhTQVZFIHNpemUgZW51bWVyYXRpb24gZGFuY2UuXG4gXHQgKi9cbiBcdGJ1ZiA9IG1tYXAoTlVMTCwgMSpNQiwgUFJPVF9SRUFEfFBST1RfV1JJVEUsIE1BUF9BTk9OWU1PVVN8TUFQX1BSSVZBVEUsIC0xLCAwKTtcbitcdHBrZXlfYXNzZXJ0KGJ1ZiAhPSBNQVBfRkFJTEVEKTtcbiBcbiBcdC8qIFRoZXNlIF9fYnVpbHRpbnMgcmVxdWlyZSBjb21waWxpbmcgd2l0aCAtbXhzYXZlICovXG4gXG5AQCAtMTc2Myw3ICsxNjgxLDggQEAgaW50IG1haW4odm9pZClcbiBcdFx0a3NmdF9wcmludF9tc2coXCJydW5uaW5nIFBLRVkgdGVzdHMgZm9yIHVuc3VwcG9ydGVkIENQVS9PU1xcblwiKTtcbiBcbiBcdFx0cHRyICA9IG1tYXAoTlVMTCwgc2l6ZSwgUFJPVF9OT05FLCBNQVBfQU5PTllNT1VTfE1BUF9QUklWQVRFLCAtMSwgMCk7XG4tXHRcdGFzc2VydChwdHIgIT0gKHZvaWQgKiktMSk7XG4rXHRcdGlmIChwdHIgPT0gTUFQX0ZBSUxFRClcbitcdFx0XHRrc2Z0X2V4aXRfZmFpbF9wZXJyb3IoXCJtbWFwXCIpO1xuIFx0XHR0ZXN0X21wcm90ZWN0X3BrZXlfb25fdW5zdXBwb3J0ZWRfY3B1KHB0ciwgMSk7XG4gXHRcdGtzZnRfdGVzdF9yZXN1bHRfcGFzcyhcInBrZXkgb24gdW5zdXBwb3J0ZWQgQ1BVL09TXFxuXCIpO1xuIFx0XHRrc2Z0X2ZpbmlzaGVkKCk7XG4iLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wNi0yOVQxMDo1ODozOS4yNzUzNjQ1NzlaIiwiU2VxIjozLCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MDg1MTE5MDAxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkFuYWx5emluZyB0aGUgUGF0Y2ggZm9yIEZ1enppbmcgV29ydGhpbmVzcyoqXG5cbk9rYXksIHNvIHRoaXMgcGF0Y2ggaXMgdG91Y2hpbmcgZmlsZXMgd2l0aGluIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9gLiBNeSBpbml0aWFsIHRob3VnaHQgaXMsIFwiVGhlc2UgYXJlIHNlbGZ0ZXN0cywgdXNlci1zcGFjZSBwcm9ncmFtcywgbm90IGtlcm5lbCBjb2RlLiBTbywgdGhlIHF1ZXN0aW9uIGlzLCBkb2VzIHRoaXMgbW9kaWZpY2F0aW9uIGZ1bmN0aW9uYWxseSBhbHRlciBrZXJuZWwgZXhlY3V0aW9uIGZsb3c/XCIgTm8sIGl0IG1vZGlmaWVzIHRoZSAqdGVzdCosIG5vdCB0aGUga2VybmVsLiBJIG5lZWQgdG8gZG91YmxlLWNoZWNrIHRoYXQgdGhlcmUgYXJlICpubyoga2VybmVsIGNoYW5nZXMuXG5cbkxldCBtZSBjb25maXJtLi4uIFllcCwgdGhlIGRpZmYgKm9ubHkqIGltcGFjdHMgdGhhdCBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vYCBkaXJlY3RvcnkuIFRoZXJlZm9yZSwgbm8gZGlyZWN0IG1vZGlmaWNhdGlvbiBvZiB0aGUga2VybmVsLiBUaGlzIG1lYW5zLCBhY2NvcmRpbmcgdG8gdGhlIGluc3RydWN0aW9ucywgdGhhdCBXb3J0aEZ1enppbmcgc2hvdWxkIGJlIGZhbHNlLlxuXG5MZXQgbWUgcmUtcmVhZCB0aGUgcHJvbXB0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4gSXQgc3BlY2lmaWVzOiBcIklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcy4uLlwiLiBTaW5jZSB0aGlzIHBhdGNoICpkb2Vzbid0KiB0b3VjaCBjb3JlIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB0aGF0IGNvbmZpcm1zIG15IGluaXRpYWwgYXNzZXNzbWVudC5cblxuSSdtIGNvbmZpZGVudCBpbiBteSBjb25jbHVzaW9uLiBUaGUgcGF0Y2ggc29sZWx5IGltcGFjdHMgdXNlci1zcGFjZSBzZWxmdGVzdHM7IGl0IGRvZXNuJ3QgaW50cm9kdWNlIGFueSBmdW5jdGlvbmFsIGFsdGVyYXRpb25zIHRvIGtlcm5lbCBjb2RlLlxuXG5KdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZSwgbGV0J3MgcmV2aWV3IHRoZSBmaWxlcyBpbXBhY3RlZDpcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXktaGVscGVycy5oYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcGtleS1wb3dlcnBjLmhgXG4tIGB0b29scy90ZXN0aW5nL3NlbGZ0ZXN0cy9tbS9wa2V5X3NpZ2hhbmRsZXJfdGVzdHMuY2Bcbi0gYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL3BrZXlfdXRpbC5jYFxuLSBgdG9vbHMvdGVzdGluZy9zZWxmdGVzdHMvbW0vcHJvdGVjdGlvbl9rZXlzLmNgXG5cbll1cCwgYWxsIHdpdGhpbiB0aGUgYHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tL2Agc3VidHJlZS5cblxuVGhlcmVmb3JlLCBXb3J0aEZ1enppbmcgaXMgZGVmaW5pdGl2ZWx5IGZhbHNlLiBJIHdpbGwgc2V0IHRoZSByZXN1bHRzIGFjY29yZGluZ2x5LlxuXG5cbiIsIklucHV0VG9rZW5zIjo4MTIwLCJPdXRwdXRUb2tlbnMiOjY2LCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6NjIwLCJUb29sQ2FsbHMiOm51bGx9LHsiU3RhcnRlZCI6IjIwMjYtMDYtMjlUMTA6NTg6NDguMzYwNDkwMTJaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjYyMDgwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIG9ubHkgbW9kaWZpZXMgdXNlci1zcGFjZSBzZWxmdGVzdHMgKHRvb2xzL3Rlc3Rpbmcvc2VsZnRlc3RzL21tLyopIGFuZCBkb2VzIG5vdCBtYWtlIGFueSBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCBjb2RlIGl0c2VsZi5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfV07CgkJCWlmICghcmF3RGF0YSB8fCByYXdEYXRhLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSk7CgkJCWRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCQlkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1N1bW1hcnlUYWJsZXMocmF3RGF0YSkgewoJCQljb25zdCBzdGF0cyA9IHsKCQkJCWxsbTogeyBjb3VudDogMCwgdG9rZW5zOiAwLCBkdXJhdGlvbjogMCB9LAoJCQkJdG9vbDogeyBjb3VudDogMCwgZHVyYXRpb246IDAgfQoJCQl9OwoKCQkJcmF3RGF0YS5mb3JFYWNoKHMgPT4gewoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7IAoJCQkJaWYgKHMuVHlwZSA9PT0gImxsbSIpIHsKCQkJCQlzdGF0cy5sbG0uY291bnQrKzsKCQkJCQlzdGF0cy5sbG0udG9rZW5zICs9IChzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zKTsKCQkJCQlzdGF0cy5sbG0uZHVyYXRpb24gKz0gZHVyOwoJCQkJfSBlbHNlIGlmIChzLlR5cGUgPT09ICJ0b29sIikgewoJCQkJCXN0YXRzLnRvb2wuY291bnQrKzsKCQkJCQlzdGF0cy50b29sLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0KCQkJfSk7CgoJCQljb25zdCBhdmdMbG1EdXIgPSBzdGF0cy5sbG0uY291bnQgPiAwID8gKHN0YXRzLmxsbS5kdXJhdGlvbiAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z0xsbVRva2VuID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0udG9rZW5zIC8gc3RhdHMubGxtLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCQkJY29uc3QgYXZnVG9vbER1ciA9IHN0YXRzLnRvb2wuY291bnQgPiAwID8gKHN0YXRzLnRvb2wuZHVyYXRpb24gLyBzdGF0cy50b29sLmNvdW50KS50b0ZpeGVkKDIpIDogMDsKCgkJCWNvbnN0IGxsbVN1bWFyeUNlbGxzID0gW3N0YXRzLmxsbS5jb3VudCwgc3RhdHMubGxtLnRva2VucywgYXZnTGxtVG9rZW4sIHN0YXRzLmxsbS5kdXJhdGlvbiwgYXZnTGxtRHVyXTsKCQkJY29uc3QgdG9vbFN1bW1hcnlDZWxscyA9IFtzdGF0cy50b29sLmNvdW50LCBzdGF0cy50b29sLmR1cmF0aW9uLCBhdmdUb29sRHVyXTsKCgkJCWNvbnN0IGxsbVN1bW1hcnlCb2R5ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2xsbV9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJbGxtU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IGxsbVRyID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHInKTsKCQkJbGxtU3VtYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCWxsbVRyLmFwcGVuZENoaWxkKHRkKTsKCQkJfSk7CgkJCWxsbVN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKGxsbVRyKTsKCgkJCWNvbnN0IHRvb2xTdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b29sX3N1bW1hcnlfc3RhdHNfYm9keScpOwoJCQl0b29sU3VtbWFyeUJvZHkuaW5uZXJIVE1MID0gIiI7CgkJCWNvbnN0IHRvb2xUciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCXRvb2xTdW1tYXJ5Q2VsbHMuZm9yRWFjaChjZWxsID0+IHsKCQkJCWNvbnN0IHRkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndGQnKTsKCQkJCXRkLnRleHRDb250ZW50ID0gY2VsbDsKCQkJCXRvb2xUci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQl0b29sU3VtbWFyeUJvZHkuYXBwZW5kQ2hpbGQodG9vbFRyKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdEdXJhdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgZmlsdGVyZWRTdGVwcyA9IHJhd0RhdGEuZmlsdGVyKGQgPT4gWyJsbG0iLCAidG9vbCJdLmluY2x1ZGVzKGQuVHlwZSkpOwoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdEdXJhdGlvbicpOwoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOyAKCgkJCWZpbHRlcmVkU3RlcHMuZm9yRWFjaChzID0+IHsKCQkJCQoJCQkJY29uc3QgZHVyID0gcy5EdXJhdGlvbiAvIDEwMDAwMDAwMDA7CgkJCQlsZXQgdG9vbHRpcCA9IHMuTmFtZTsKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iICYmIHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCQkJCWRhdGEuYWRkUm93KFtgJHtzLlNlcX1gLCBkdXIsIHRvb2x0aXBdKTsKCQkJfSk7CgoJCQljb25zdCBvcHRpb25zID0gewoJCQkJdGl0bGU6ICdUaW1lIENvbnN1bXB0aW9uIG9mIExMTS9Ub29sIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0vVG9vbCBTdGVwcycsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdTZWNvbmRzJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdkdXJhdGlvbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoKCQlmdW5jdGlvbiBkcmF3VG9rZW5Db25zdW1wdGlvbkNoYXJ0KHJhd0RhdGEpIHsKCQkJY29uc3QgbGxtU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IGQuVHlwZSA9PT0gImxsbSIpOwoJCQlpZiAobGxtU3RlcHMubGVuZ3RoID09PSAwKSByZXR1cm47CgoJCQljb25zdCBkYXRhID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkRhdGFUYWJsZSgpOwoJCQlkYXRhLmFkZENvbHVtbignc3RyaW5nJywgJ1N0ZXAnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oJ251bWJlcicsICdUb2tlbnMnKTsJCQkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAnc3R5bGUnfSk7CQoJCQlkYXRhLmFkZENvbHVtbih7dHlwZTogJ3N0cmluZycsIHJvbGU6ICd0b29sdGlwJ30pOwkKCgkJCWNvbnN0IGFnZW50Q29sb3JzID0ge307CgkJCWNvbnN0IHBhbGV0dGUgPSBbJyM0Mjg1RjQnLCAnI0RCNDQzNycsICcjRjRCNDAwJywgJyMwRjlENTgnLCAnI0FCNDdCQycsICcjMDBBQ0MxJ107CgkJCWxldCBjb2xvcklkeCA9IDA7CgkJCWNvbnN0IGFnZW50TExNQ291bnRzID0ge307CgkJCWxsbVN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQlpZiAoIWFnZW50Q29sb3JzW3MuTmFtZV0pIHsKCQkJCQlhZ2VudENvbG9yc1tzLk5hbWVdID0gcGFsZXR0ZVtjb2xvcklkeCAlIHBhbGV0dGUubGVuZ3RoXTsKCQkJCQljb2xvcklkeCsrOwoJCQkJfQoKCQkJCWFnZW50TExNQ291bnRzW3MuTmFtZV0gPSAoYWdlbnRMTE1Db3VudHNbcy5OYW1lXSB8fCAwKSArIDE7CgkJCQljb25zdCBsYWJlbCA9IGAke3MuTmFtZX0tJHthZ2VudExMTUNvdW50c1tzLk5hbWVdfWA7CgkJCQljb25zdCB0b3RhbFRva2VucyA9IHMuSW5wdXRUb2tlbnMgKyBzLk91dHB1dFRva2VucyArIHMuT3V0cHV0VGhvdWdodHNUb2tlbnM7CgkJCQljb25zdCBzdHlsZSA9IGBjb2xvcjogJHthZ2VudENvbG9yc1tzLk5hbWVdfWA7CgkJCQlsZXQgdG9vbHRpcCA9IGBUb3RhbCBUb2tlbnM6ICR7dG90YWxUb2tlbnN9XG4oSW46ICR7cy5JbnB1dFRva2Vuc30sIE91dDogJHtzLk91dHB1dFRva2Vuc30sIFRob3VnaHRzOiAke3MuT3V0cHV0VGhvdWdodHNUb2tlbnN9KWA7CgkJCQlpZiAocy5Ub29sQ2FsbHMgJiYgcy5Ub29sQ2FsbHMubGVuZ3RoID4gMCkgewoJCQkJCXRvb2x0aXAgKz0gYFxuVG9vbHM6ICR7cy5Ub29sQ2FsbHMuam9pbignLCAnKX1gOwoJCQkJfQoKCQkJCWRhdGEuYWRkUm93KFtsYWJlbCwgdG90YWxUb2tlbnMsIHN0eWxlLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVG9rZW4gQ29uc3VtcHRpb24gYnkgTExNIENhbGxzJywKCQkJCWhBeGlzOiB7CgkJCQkJdGl0bGU6ICdMTE0gQ2FsbCBTZXF1ZW5jZScsCgkJCQl9LAoJCQkJdkF4aXM6IHsgdGl0bGU6ICdDb25zdW1lZCBUb2tlbnMnIH0sCgkJCQlsZWdlbmQ6IHsgcG9zaXRpb246ICdub25lJyB9LAoJCQkJYmFyOiB7IGdyb3VwV2lkdGg6ICc3NSUnIH0sCgkJCQljaGFydEFyZWE6IHsgd2lkdGg6ICc4NSUnLCBoZWlnaHQ6ICc3MCUnIH0sCgkJCQloZWlnaHQ6IDQwMAoJCQl9OwoKCQkJY29uc3QgY2hhcnQgPSBuZXcgZ29vZ2xlLnZpc3VhbGl6YXRpb24uQ29sdW1uQ2hhcnQoZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ3Rva2VuX2NoYXJ0X2RpdicpKTsKCQkJY2hhcnQuZHJhdyhkYXRhLCBvcHRpb25zKTsKCQl9CgkJbGV0IGFsbEV4cGFuZGVkID0gZmFsc2U7CgkJZnVuY3Rpb24gdG9nZ2xlQWxsRGV0YWlscygpIHsKCQkJYWxsRXhwYW5kZWQgPSAhYWxsRXhwYW5kZWQ7CgkJCWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3JBbGwoJ2RldGFpbHMnKS5mb3JFYWNoKGQgPT4gewoJCQkJaWYgKGFsbEV4cGFuZGVkKSBkLnNldEF0dHJpYnV0ZSgnb3BlbicsICcnKTsKCQkJCWVsc2UgZC5yZW1vdmVBdHRyaWJ1dGUoJ29wZW4nKTsKCQkJfSk7CgkJfQoJPC9zY3JpcHQ+CgoKPC9ib2R5Pgo8L2h0bWw+Cg==" },ValueFrom:&ValueFrom{Path:/output/result.json,JSONPath:,JQFilter:,Parameter:,Default:nil,Supplied:nil,Event:,Expression:,ConfigMapKeyRef:nil,},GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},Result:nil,ExitCode:*0,} --------- Name: series-workflowdvqt2[1] Phase: Running StartedAt: 2026-06-29 10:59:00 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowdvqt2[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-06-29 10:59:00 +0000 UTC FinishedAt: 2026-06-29 10:59:08 +0000 UTC Input: &Inputs{Parameters:[]Parameter{Parameter{Name:code,Default:nil,Value:*1,ValueFrom:nil,GlobalName:,Enum:[],Description:nil,},},Artifacts:[]Artifact{},} Output: &Outputs{Parameters:[]Parameter{},Artifacts:[]Artifact{},Result:nil,ExitCode:*1,}