Name: series-workflowvxfbg Phase: Failed StartedAt: 2026-08-07 12:29:28 +0000 UTC FinishedAt: 2026-08-07 12:47:10 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvxfbg[0] Phase: Succeeded StartedAt: 2026-08-07 12:29:28 +0000 UTC FinishedAt: 2026-08-07 12:46:49 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvxfbg[0].run-triage Phase: Succeeded StartedAt: 2026-08-07 12:29:28 +0000 UTC FinishedAt: 2026-08-07 12:46:49 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6NDU6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9rZXhlYy5jIGIvZHJpdmVycy9vZi9rZXhlYy5jXG5pbmRleCAwMjk5MDNiOTg2Y2JkLi4zNjYzNWY2Y2I5MDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL2tleGVjLmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQFxuIFxuIC8qXG4gICogQWRkaXRpb25hbCBzcGFjZSBuZWVkZWQgZm9yIHRoZSBGRFQgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGFkZCBpbml0cmQsXG4tICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci5cbiYjNDM7ICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2FibGUtbWVtb3J5LXJhbmdlIGFuZCBlbGZjb3JlaGRyLlxuICAqL1xuICNkZWZpbmUgRkRUX0VYVFJBX1NQQUNFIDB4MTAwMFxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcbmluZGV4IGJjMDg3MTI0Y2Q3OGUuLjVjNzIwN2MwYmJhMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saW5rYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGZjb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gc3RydWN0IGtpbWFnZTtcbiBcbkBAIC0zNCw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfcHJvdGVjdF9jcmFzaGtyZXModm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfdW5wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmbmRlZiBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZykgeyB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG5pbmRleCBiYjk3YmQzZTVhZjRmLi5mZjA5NDRjZTM2OGY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcbkBAIC0xMjIsNiAmIzQzOzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xuIFx0LyogY2xlYXIgdGhlIGRhdGEgZnJvbSBhIGtleSAob3B0aW9uYWwpICovXG4gXHR2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTtcbiBcbiYjNDM7XHQvKiBzY3J1YiB0aGUga2V5IG1hdGVyaWFsIHdpdGhvdXQgZnJlZSYjMzk7aW5nIChvcHRpb25hbClcbiYjNDM7XHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxuJiM0MztcdCAqICAgY3Jhc2ggZHVtcHNcbiYjNDM7XHQgKiAtIGNhbGxlZCBmcm9tIHRoZSBwYW5pYyBwYXRoIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZCBwcmVlbXB0aW9uXG4mIzQzO1x0ICogICBkaXNhYmxlZFxuJiM0MztcdCAqIC0gbXVzdCBub3Qgc2xlZXAsIGFsbG9jYXRlLCBmcmVlIG9yIHRha2UgbG9ja3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcbiYjNDM7XG4gXHQvKiBkZXNjcmliZSBhIGtleSAqL1xuIFx0dm9pZCAoKmRlc2NyaWJlKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBzZXFfZmlsZSAqcCk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcua2V4ZWMgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xuaW5kZXggMTU2MzIzNThiY2Y3MS4uOTJhYjBhNjljOGVjNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9LY29uZmlnLmtleGVjXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xuQEAgLTE3OSw0ICYjNDM7MTc5LDEyIEBAIGNvbmZpZyBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU1xuIFx0ICB0aGUgY29tcHV0YXRpb24gYmVoaW5kIHRoZSB2YWx1ZSBwcm92aWRlZCB0aHJvdWdoIHRoZVxuIFx0ICAvc3lzL2tlcm5lbC9jcmFzaF9lbGZjb3JlaGRyX3NpemUgYXR0cmlidXRlLlxuIFxuJiM0Mztjb25maWcgQ1JBU0hfWkVST0laRVxuJiM0MztcdGJvb2wgXCYjMzQ7WmVyb2l6ZSBzZWNyZXRzIG9uIHBhbmljXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBDUkFTSF9EVU1QXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29ianRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYW5pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVrZWVwaW5nLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbkBAIC0zMyw2ICYjNDM7MzQsMjIgQEBcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xuIG5vdGVfYnVmX3QgX19wZXJjcHUgKmNyYXNoX25vdGVzO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcbiYjNDM7QVRPTUlDX05PVElGSUVSX0hFQUQoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNyYXNoX3plcm9pemUodm9pZClcbiYjNDM7e1xuJiM0MztcdGt0aW1lX3QgemVyb2l6ZV9zdGFydCA9IGt0aW1lX2dldCgpO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1dpcGluZyBzZW5zaXRpdmUgc2VjcmV0cy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCAwLCBOVUxMKTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0RvbmUgaW4gJWxsZCB1c1xcblwmIzM0Oywga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXG4mIzQzO1xuIC8qIHRpbWUgdG8gd2FpdCBmb3IgcG9zc2libGUgRE1BIHRvIGZpbmlzaCBiZWZvcmUgc3RhcnRpbmcgdGhlIGtkdW1wIGtlcm5lbFxuICAqIHdoZW4gYSBDTUEgcmVzZXJ2YXRpb24gaXMgdXNlZFxuICAqL1xuQEAgLTE0Miw2ICYjNDM7MTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuIFx0XHRcdGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSgpO1xuJiM0MztcdFx0XHRjcmFzaF96ZXJvaXplKCk7XG4gXHRcdFx0bWFjaGluZV9rZXhlYyhrZXhlY19jcmFzaF9pbWFnZSk7XG4gXHRcdH1cbiBcdFx0a2V4ZWNfdW5sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvbW0vc2VjcmV0bWVtLmMgYi9tbS9zZWNyZXRtZW0uY1xuaW5kZXggZDI5ODY1MDc1YjZlYS4uNTNmNjI5ZDY2MzNjMSAxMDA2NDRcbi0tLSBhL21tL3NlY3JldG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zZWNyZXRtZW0uY1xuQEAgLTEzLDkgJiM0MzsxMywxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3JldG1lbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG5AQCAtMTg3LDYgJiM0MzsxODksNTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNlY3JldG1lbV9pb3BzID0ge1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNlY3JldG1lbV9tbnQ7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuJiM0MzsvKiBDYWxsZWQgZmFyIGludG8gdnBhbmljIGZyb20gY3Jhc2hfY29yZS5jIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZFxuJiM0MzsgKiBwcmVlbXB0aW9uIGRpc2FibGVkXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmdcbiYjNDM7XHRcdGFjdGlvbiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzZWNyZXRtZW1fbW50KVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdHNiID0gc2VjcmV0bWVtX21udC1cdTAwM2VtbnRfc2I7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJiMzOTtlZCwgaXQgbWlnaHQgYmVcbiYjNDM7XHQgKiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCB3b3VsZCBiZSB1bnNhZmUgdG8gaXRlcmF0ZS4gSWYgd2UgY2FuJiMzOTt0XG4mIzQzO1x0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0JiMzOTtzIGFsbCB3ZSBjYW4gZG8gaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcbiYjNDM7XHRcdHByX2NyaXQoXCYjMzQ7Y3Jhc2hfemVyb2l6ZTogY2FuJiMzOTt0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cXG5cJiMzNDtcbiYjNDM7XHRcdFx0IFwmIzM0O2NyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiYjNDM7XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWlfcGFnZXMsIDApO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XG4mIzQzO1x0XHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSYjMzk7cmUgYnVybmluZyBkb3duIHRoZSBob3VzZSA6KSAqL1xuJiM0MztcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZm9saW8sIFVMT05HX01BWCkge1xuJiM0MztcdFx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBvZmYgdG8ga2V4ZWMoKSEgKi9cbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZVxuJiM0Mzt9O1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBmaWxlICpzZWNyZXRtZW1fZmlsZV9jcmVhdGUodW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbkBAIC0yNjMsNiAmIzQzOzMwOSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBzZWNyZXRtZW1faW5pdCh2b2lkKVxuIFx0aWYgKElTX0VSUihzZWNyZXRtZW1fbW50KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoc2VjcmV0bWVtX21udCk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuJiM0MztcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QsIFx1MDAyNnNlY3JldG1lbV96ZXJvaXplX25iKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5pbmRleCAyNjhmNzAyZGYzODBlLi5hZDg1MzdkZGE3MGZhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5AQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGJpZ19rZXlfcGF5bG9hZCB7XG4gICovXG4gI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSAmIzQzOyBzaXplb2Yoc3RydWN0IGRlbnRyeSkpXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuJiM0MztcbiAvKlxuICAqIGJpZ19rZXkgZGVmaW5lZCBrZXlzIHRha2UgYW4gYXJiaXRyYXJ5IHN0cmluZyBhcyB0aGUgZGVzY3JpcHRpb24gYW5kIGFuXG4gICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZFxuQEAgLTQ2LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9iaWdfa2V5ID0ge1xuIFx0Lmluc3RhbnRpYXRlXHRcdD0gZ2VuZXJpY19rZXlfaW5zdGFudGlhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSBiaWdfa2V5X3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gYmlnX2tleV9kZXN0cm95LFxuJiM0MztcdC56ZXJvaXplXHRcdD0gYmlnX2tleV96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gYmlnX2tleV9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSBiaWdfa2V5X3JlYWQsXG4gXHQudXBkYXRlXHRcdFx0PSBiaWdfa2V5X3VwZGF0ZSxcbkBAIC0yNzksNiAmIzQzOzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBiaWdfa2V5X3plcm9pemUoc3RydWN0IGtleSAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpZ19rZXlfcGF5bG9hZCAqcGF5bG9hZCA9IHRvX2JpZ19rZXlfcGF5bG9hZChrZXktXHUwMDNlcGF5bG9hZCk7XG4mIzQzO1xuJiM0MztcdGlmIChwYXlsb2FkLVx1MDAzZWRhdGEpIHtcbiYjNDM7XHRcdGlmIChwYXlsb2FkLVx1MDAzZWxlbmd0aCBcdTAwM2UgQklHX0tFWV9GSUxFX1RIUkVTSE9MRClcbiYjNDM7XHRcdFx0bWVtemVyb19leHBsaWNpdChwYXlsb2FkLVx1MDAzZWRhdGEsIENIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkUpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtZW16ZXJvX2V4cGxpY2l0KHBheWxvYWQtXHUwMDNlZGF0YSwgcGF5bG9hZC1cdTAwM2VsZW5ndGgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlZ2lzdGVyIGtleSB0eXBlXG4gICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbmluZGV4IDU5Y2I3N2IyMzdiMzYuLjlmNTZmYTliNGFhZjQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXG5AQCAtOTcwLDExICYjNDM7OTcwLDIzIEBAIHN0YXRpYyB2b2lkIGVuY3J5cHRlZF9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiBcdGtmcmVlX3NlbnNpdGl2ZShrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmNyeXB0ZWRfa2V5X3BheWxvYWQgKmVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcGF5bG9hZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWVtemVyb19leHBsaWNpdChlcGF5bG9hZC1cdTAwM2VwYXlsb2FkX2RhdGEsXG4mIzQzO1x0XHRcdCBlcGF5bG9hZC1cdTAwM2VwYXlsb2FkX2RhdGFsZW4gJiM0MzsgZXBheWxvYWQtXHUwMDNlZGF0YWJsb2JfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZW5jcnlwdGVkID0ge1xuIFx0Lm5hbWUgPSBcJiMzNDtlbmNyeXB0ZWRcJiMzNDssXG4gXHQuaW5zdGFudGlhdGUgPSBlbmNyeXB0ZWRfaW5zdGFudGlhdGUsXG4gXHQudXBkYXRlID0gZW5jcnlwdGVkX3VwZGF0ZSxcbiBcdC5kZXN0cm95ID0gZW5jcnlwdGVkX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemUgPSBlbmNyeXB0ZWRfemVyb2l6ZSxcbiBcdC5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsXG4gXHQucmVhZCA9IGVuY3J5cHRlZF9yZWFkLFxuIH07XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmNcbmluZGV4IGIzNGE2NGQ4MWQ0N2EuLjU2NzNkY2M4YzVkMjMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL2tleS5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZG9tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbkBAIC0xMjY4LDYgJiM0MzsxMjY5LDQ0IEBAIHZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcbiYjNDM7LyogQ2FsbGVkIGZhciBpbnRvIHZwYW5pYyBmcm9tIGNyYXNoX2NvcmUuYyB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmRcbiYjNDM7ICogcHJlZW1wdGlvbiBkaXNhYmxlZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBrZXlfY3Jhc2hfemVyb2l6ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbiYjNDM7XHRcdHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UgY2FuJiMzOTt0IGFjcXVpcmUgdGhlIGxvY2ssIHRoZSByYnRyZWUgbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50XG4mIzQzO1x0ICogc3RhdGUuIFRoYXQmIzM5O3MgYWxsIHdlIGNhbiBkbyB0aGVuLCBhcyB0aGVyZSYjMzk7cyBubyBwb2ludCB0byB3YWl0aW5nXG4mIzQzO1x0ICogYXQgdGhpcyBzdGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZrZXlfc2VyaWFsX2xvY2spKSB7XG4mIzQzO1x0XHRwcl9jcml0KFwmIzM0O2NyYXNoX3plcm9pemU6IGNhbiYjMzk7dCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAobm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmtleV9zZXJpYWxfdHJlZSk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGtleS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX2tleXJpbmcgfHxcbiYjNDM7XHRcdCAgICBrZXktXHUwMDNlc3RhdGUgPT0gS0VZX0lTX1VOSU5TVEFOVElBVEVEKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBjdXN0b20gemVyb2l6ZSBzaW5jZSBmcmVlJiMzOTtpbmcgaXNuJiMzOTt0IHNhZmUgYXQgdGhpcyBwb2ludCAqL1xuJiM0MztcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG4mIzQzO1x0XHRcdGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUoa2V5KTtcbiYjNDM7XHR9XG4mIzQzO1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGtleV9jcmFzaF96ZXJvaXplX25iID0ge1xuJiM0MztcdC5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemVcbiYjNDM7fTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXG4mIzQzO1xuIC8qXG4gICogSW5pdGlhbGlzZSB0aGUga2V5IG1hbmFnZW1lbnQgc3RhdGUuXG4gICovXG5AQCAtMTI5MCw0ICYjNDM7MTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXG4gXG4gXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2cm9vdF9rZXlfdXNlci5ub2RlLFxuIFx0XHRcdFx1MDAyNmtleV91c2VyX3RyZWUpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4mIzQzO1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCxcbiYjNDM7XHRcdFx0XHUwMDI2a2V5X2NyYXNoX3plcm9pemVfbmIpO1xuJiM0MzsjZW5kaWZcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuQEAgLTMyNSwxMSAmIzQzOzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuIFx0a2ZyZWVfc2Vuc2l0aXZlKGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHJ1c3RlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0cnVzdGVkX2tleV9wYXlsb2FkICpwID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNla2V5LCBzaXplb2YocC1cdTAwM2VrZXkpKTtcbiYjNDM7XHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNlYmxvYiwgc2l6ZW9mKHAtXHUwMDNlYmxvYikpO1xuJiM0MztcdHAtXHUwMDNla2V5X2xlbiA9IDA7XG4mIzQzO1x0cC1cdTAwM2VibG9iX2xlbiA9IDA7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX3RydXN0ZWQgPSB7XG4gXHQubmFtZSA9IFwmIzM0O3RydXN0ZWRcJiMzNDssXG4gXHQuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLFxuIFx0LnVwZGF0ZSA9IHRydXN0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemUgPSB0cnVzdGVkX3plcm9pemUsXG4gXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWQgPSB0cnVzdGVkX3JlYWQsXG4gfTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuaW5kZXggNmY4OGI1MDdmOTI3OS4uYWRlOTVkYzI0ODFkZiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTtcbiYjNDM7c3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSk7XG4gXG4gLypcbiAgKiB1c2VyIGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhblxuQEAgLTI4LDYgJiM0MzsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuJiM0MztcdC56ZXJvaXplXHRcdD0gdXNlcl96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gdXNlcl9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSB1c2VyX3JlYWQsXG4gfTtcbkBAIC00OCw2ICYjNDM7NTAsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb24gPSB7XG4gXHQudXBkYXRlXHRcdFx0PSB1c2VyX3VwZGF0ZSxcbiBcdC5yZXZva2VcdFx0XHQ9IHVzZXJfcmV2b2tlLFxuIFx0LmRlc3Ryb3lcdFx0PSB1c2VyX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnZldF9kZXNjcmlwdGlvblx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXG4gfTtcbkBAIC0xNTIsNiAmIzQzOzE1NSwxNCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1xuJiM0MztcdGlmICh1cGF5bG9hZClcbiYjNDM7XHRcdG1lbXplcm9fZXhwbGljaXQodXBheWxvYWQtXHUwMDNlZGF0YSwgdXBheWxvYWQtXHUwMDNlZGF0YWxlbik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXlcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6NDU6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmMKaW5kZXggMDI5OTAzYjk4NmNiZC4uMzY2MzVmNmNiOTAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yva2V4ZWMuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAKIAogLyoKICAqIEFkZGl0aW9uYWwgc3BhY2UgbmVlZGVkIGZvciB0aGUgRkRUIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBhZGQgaW5pdHJkLAotICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci4KJiM0MzsgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuCiAgKi8KICNkZWZpbmUgRkRUX0VYVFJBX1NQQUNFIDB4MTAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCmluZGV4IGJjMDg3MTI0Y2Q3OGUuLjVjNzIwN2MwYmJhMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9saW5rYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZWxmY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogCiBzdHJ1Y3Qga2ltYWdlOwogCkBAIC0zNCw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfcHJvdGVjdF9jcmFzaGtyZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY191bnByb3RlY3RfY3Jhc2hrcmVzKHZvaWQpIHsgfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkUKJiM0MztleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdDsKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZykgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaCBiL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaAppbmRleCBiYjk3YmQzZTVhZjRmLi5mZjA5NDRjZTM2OGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oCkBAIC0xMjIsNiAmIzQzOzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUgewogCS8qIGNsZWFyIHRoZSBkYXRhIGZyb20gYSBrZXkgKG9wdGlvbmFsKSAqLwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3Qga2V5ICprZXkpOwogCiYjNDM7CS8qIHNjcnViIHRoZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBmcmVlJiMzOTtpbmcgKG9wdGlvbmFsKQomIzQzOwkgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZgomIzQzOwkgKiAgIGNyYXNoIGR1bXBzCiYjNDM7CSAqIC0gY2FsbGVkIGZyb20gdGhlIHBhbmljIHBhdGggd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kIHByZWVtcHRpb24KJiM0MzsJICogICBkaXNhYmxlZAomIzQzOwkgKiAtIG11c3Qgbm90IHNsZWVwLCBhbGxvY2F0ZSwgZnJlZSBvciB0YWtlIGxvY2tzCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTsKJiM0MzsKIAkvKiBkZXNjcmliZSBhIGtleSAqLwogCXZvaWQgKCpkZXNjcmliZSkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvS2NvbmZpZy5rZXhlYyBiL2tlcm5lbC9LY29uZmlnLmtleGVjCmluZGV4IDE1NjMyMzU4YmNmNzEuLjkyYWIwYTY5YzhlYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9LY29uZmlnLmtleGVjCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9LY29uZmlnLmtleGVjCkBAIC0xNzksNCAmIzQzOzE3OSwxMiBAQCBjb25maWcgQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVMKIAkgIHRoZSBjb21wdXRhdGlvbiBiZWhpbmQgdGhlIHZhbHVlIHByb3ZpZGVkIHRocm91Z2ggdGhlCiAJICAvc3lzL2tlcm5lbC9jcmFzaF9lbGZjb3JlaGRyX3NpemUgYXR0cmlidXRlLgogCiYjNDM7Y29uZmlnIENSQVNIX1pFUk9JWkUKJiM0MzsJYm9vbCAmIzM0O1plcm9pemUgc2VjcmV0cyBvbiBwYW5pYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ1JBU0hfRFVNUAomIzQzOwloZWxwCiYjNDM7CSAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBlbmRtZW51CmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwppbmRleCAyYjM2YWE5ZmFkZTA2Li5kM2E3NzYzZTI3NTk5IDEwMDY0NAotLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2JqdG9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFuaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZWtlZXBpbmcuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzQsMjIgQEAKIC8qIFBlciBjcHUgbWVtb3J5IGZvciBzdG9yaW5nIGNwdSBzdGF0ZXMgaW4gY2FzZSBvZiBzeXN0ZW0gY3Jhc2guICovCiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlczsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRQomIzQzO0FUT01JQ19OT1RJRklFUl9IRUFEKGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpCiYjNDM7ewomIzQzOwlrdGltZV90IHplcm9pemVfc3RhcnQgPSBrdGltZV9nZXQoKTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1dpcGluZyBzZW5zaXRpdmUgc2VjcmV0cy4uLlxuJiMzNDspOwomIzQzOwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgMCwgTlVMTCk7CiYjNDM7CXByX2luZm8oJiMzNDtEb25lIGluICVsbGQgdXNcbiYjMzQ7LCBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgemVyb2l6ZV9zdGFydCkpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfWkVST0laRSAqLwomIzQzOwogLyogdGltZSB0byB3YWl0IGZvciBwb3NzaWJsZSBETUEgdG8gZmluaXNoIGJlZm9yZSBzdGFydGluZyB0aGUga2R1bXAga2VybmVsCiAgKiB3aGVuIGEgQ01BIHJlc2VydmF0aW9uIGlzIHVzZWQKICAqLwpAQCAtMTQyLDYgJiM0MzsxNTksNyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQkJY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKCk7CiAJCQltYWNoaW5lX2NyYXNoX3NodXRkb3duKCZhbXA7Zml4ZWRfcmVncyk7CiAJCQljcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEoKTsKJiM0MzsJCQljcmFzaF96ZXJvaXplKCk7CiAJCQltYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTsKIAkJfQogCQlrZXhlY191bmxvY2soKTsKZGlmZiAtLWdpdCBhL21tL3NlY3JldG1lbS5jIGIvbW0vc2VjcmV0bWVtLmMKaW5kZXggZDI5ODY1MDc1YjZlYS4uNTNmNjI5ZDY2MzNjMSAxMDA2NDQKLS0tIGEvbW0vc2VjcmV0bWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2VjcmV0bWVtLmMKQEAgLTEzLDkgJiM0MzsxMywxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzZXVkb19mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3JldG1lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jcmFzaF9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCkBAIC0xODcsNiAmIzQzOzE4OSw1MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2VjcmV0bWVtX2lvcHMgPSB7CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNlY3JldG1lbV9tbnQ7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkUKJiM0MzsvKiBDYWxsZWQgZmFyIGludG8gdnBhbmljIGZyb20gY3Jhc2hfY29yZS5jIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZAomIzQzOyAqIHByZWVtcHRpb24gZGlzYWJsZWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcKJiM0MzsJCWFjdGlvbiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CWlmICghc2VjcmV0bWVtX21udCkKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJc2IgPSBzZWNyZXRtZW1fbW50LSZndDttbnRfc2I7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJiMzOTtlZCwgaXQgbWlnaHQgYmUKJiM0MzsJICogaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgd291bGQgYmUgdW5zYWZlIHRvIGl0ZXJhdGUuIElmIHdlIGNhbiYjMzk7dAomIzQzOwkgKiBnZXQgdGhlIGxvY2ssIHRvbyBiYWQsIHRoYXQmIzM5O3MgYWxsIHdlIGNhbiBkbyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzcGluX3RyeWxvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spKSB7CiYjNDM7CQlwcl9jcml0KCYjMzQ7Y3Jhc2hfemVyb2l6ZTogY2FuJiMzOTt0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cbiYjMzQ7CiYjNDM7CQkJICYjMzQ7Y3Jhc2hfemVyb2l6ZTogc2tpcHBpbmcgemVyb2l6aW5nIHNlY3JldG1lbS5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmYW1wO3NiLSZndDtzX2lub2RlcywgaV9zYl9saXN0KSB7CiYjNDM7CQlYQV9TVEFURSh4YXMsICZhbXA7aW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7aV9wYWdlcywgMCk7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJLyogbm8gbmVlZCBmb3IgbG9ja3MgaWYgd2UmIzM5O3JlIGJ1cm5pbmcgZG93biB0aGUgaG91c2UgOikgKi8KJiM0MzsJCXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZm9saW8sIFVMT05HX01BWCkgewomIzQzOwkJCWlmICh4YXNfcmV0cnkoJmFtcDt4YXMsIGZvbGlvKSB8fCB4YV9pc192YWx1ZShmb2xpbykpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzLSZndDtmcmVlX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkvKiBvZmYgdG8ga2V4ZWMoKSEgKi8KJiM0MzsJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNlY3JldG1lbV96ZXJvaXplX25iID0gewomIzQzOwkubm90aWZpZXJfY2FsbCA9IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplCiYjNDM7fTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi8KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqc2VjcmV0bWVtX2ZpbGVfY3JlYXRlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGU7CkBAIC0yNjMsNiAmIzQzOzMwOSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBzZWNyZXRtZW1faW5pdCh2b2lkKQogCWlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpCiAJCXJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFCiYjNDM7CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgJmFtcDtzZWNyZXRtZW1femVyb2l6ZV9uYik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBmc19pbml0Y2FsbChzZWNyZXRtZW1faW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCmluZGV4IDI2OGY3MDJkZjM4MGUuLmFkODUzN2RkYTcwZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkIHsKICAqLwogI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSAmIzQzOyBzaXplb2Yoc3RydWN0IGRlbnRyeSkpCiAKJiM0MztzdGF0aWMgdm9pZCBiaWdfa2V5X3plcm9pemUoc3RydWN0IGtleSAqa2V5KTsKJiM0MzsKIC8qCiAgKiBiaWdfa2V5IGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbgogICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZApAQCAtNDYsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2JpZ19rZXkgPSB7CiAJLmluc3RhbnRpYXRlCQk9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLAogCS5yZXZva2UJCQk9IGJpZ19rZXlfcmV2b2tlLAogCS5kZXN0cm95CQk9IGJpZ19rZXlfZGVzdHJveSwKJiM0MzsJLnplcm9pemUJCT0gYmlnX2tleV96ZXJvaXplLAogCS5kZXNjcmliZQkJPSBiaWdfa2V5X2Rlc2NyaWJlLAogCS5yZWFkCQkJPSBiaWdfa2V5X3JlYWQsCiAJLnVwZGF0ZQkJCT0gYmlnX2tleV91cGRhdGUsCkBAIC0yNzksNiAmIzQzOzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaWdfa2V5X3BheWxvYWQgKnBheWxvYWQgPSB0b19iaWdfa2V5X3BheWxvYWQoa2V5LSZndDtwYXlsb2FkKTsKJiM0MzsKJiM0MzsJaWYgKHBheWxvYWQtJmd0O2RhdGEpIHsKJiM0MzsJCWlmIChwYXlsb2FkLSZndDtsZW5ndGggJmd0OyBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEKQomIzQzOwkJCW1lbXplcm9fZXhwbGljaXQocGF5bG9hZC0mZ3Q7ZGF0YSwgQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtemVyb19leHBsaWNpdChwYXlsb2FkLSZndDtkYXRhLCBwYXlsb2FkLSZndDtsZW5ndGgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIFJlZ2lzdGVyIGtleSB0eXBlCiAgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jCmluZGV4IDU5Y2I3N2IyMzdiMzYuLjlmNTZmYTliNGFhZjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYwpAQCAtOTcwLDExICYjNDM7OTcwLDIzIEBAIHN0YXRpYyB2b2lkIGVuY3J5cHRlZF9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKIAlrZnJlZV9zZW5zaXRpdmUoa2V5LSZndDtwYXlsb2FkLmRhdGFbMF0pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZW5jcnlwdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KQomIzQzO3sKJiM0MzsJc3RydWN0IGVuY3J5cHRlZF9rZXlfcGF5bG9hZCAqZXBheWxvYWQgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKCFlcGF5bG9hZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWVtemVyb19leHBsaWNpdChlcGF5bG9hZC0mZ3Q7cGF5bG9hZF9kYXRhLAomIzQzOwkJCSBlcGF5bG9hZC0mZ3Q7cGF5bG9hZF9kYXRhbGVuICYjNDM7IGVwYXlsb2FkLSZndDtkYXRhYmxvYl9sZW4pOwomIzQzO30KJiM0MzsKIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9lbmNyeXB0ZWQgPSB7CiAJLm5hbWUgPSAmIzM0O2VuY3J5cHRlZCYjMzQ7LAogCS5pbnN0YW50aWF0ZSA9IGVuY3J5cHRlZF9pbnN0YW50aWF0ZSwKIAkudXBkYXRlID0gZW5jcnlwdGVkX3VwZGF0ZSwKIAkuZGVzdHJveSA9IGVuY3J5cHRlZF9kZXN0cm95LAomIzQzOwkuemVyb2l6ZSA9IGVuY3J5cHRlZF96ZXJvaXplLAogCS5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsCiAJLnJlYWQgPSBlbmNyeXB0ZWRfcmVhZCwKIH07CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBiMzRhNjRkODFkNDdhLi41NjczZGNjOGM1ZDIzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5kb20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CkBAIC0xMjY4LDYgJiM0MzsxMjY5LDQ0IEBAIHZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlKQogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2tleV90eXBlKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRQomIzQzOy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kCiYjNDM7ICogcHJlZW1wdGlvbiBkaXNhYmxlZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiYjNDM7CQl2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGNhbiYjMzk7dCBhY3F1aXJlIHRoZSBsb2NrLCB0aGUgcmJ0cmVlIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudAomIzQzOwkgKiBzdGF0ZS4gVGhhdCYjMzk7cyBhbGwgd2UgY2FuIGRvIHRoZW4sIGFzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIHdhaXRpbmcKJiM0MzsJICogYXQgdGhpcyBzdGFnZS4KJiM0MzsJICovCiYjNDM7CWlmICghc3Bpbl90cnlsb2NrKCZhbXA7a2V5X3NlcmlhbF9sb2NrKSkgewomIzQzOwkJcHJfY3JpdCgmIzM0O2NyYXNoX3plcm9pemU6IGNhbiYjMzk7dCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChub2RlID0gcmJfZmlyc3QoJmFtcDtrZXlfc2VyaWFsX3RyZWUpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkgewomIzQzOwkJc3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpOwomIzQzOwomIzQzOwkJaWYgKGtleS0mZ3Q7dHlwZSA9PSAmYW1wO2tleV90eXBlX2tleXJpbmcgfHwKJiM0MzsJCSAgICBrZXktJmd0O3N0YXRlID09IEtFWV9JU19VTklOU1RBTlRJQVRFRCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGN1c3RvbSB6ZXJvaXplIHNpbmNlIGZyZWUmIzM5O2luZyBpc24mIzM5O3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovCiYjNDM7CQlpZiAoa2V5LSZndDt0eXBlLSZndDt6ZXJvaXplKQomIzQzOwkJCWtleS0mZ3Q7dHlwZS0mZ3Q7emVyb2l6ZShrZXkpOwomIzQzOwl9CiYjNDM7CS8qIG9mZiB0byBrZXhlYygpISAqLwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemUKJiM0Mzt9OwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfWkVST0laRSAqLwomIzQzOwogLyoKICAqIEluaXRpYWxpc2UgdGhlIGtleSBtYW5hZ2VtZW50IHN0YXRlLgogICovCkBAIC0xMjkwLDQgJiM0MzsxMzI5LDkgQEAgdm9pZCBfX2luaXQga2V5X2luaXQodm9pZCkKIAogCXJiX2luc2VydF9jb2xvcigmYW1wO3Jvb3Rfa2V5X3VzZXIubm9kZSwKIAkJCSZhbXA7a2V5X3VzZXJfdHJlZSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFCiYjNDM7CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwKJiM0MzsJCQkmYW1wO2tleV9jcmFzaF96ZXJvaXplX25iKTsKJiM0MzsjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKQEAgLTMyNSwxMSAmIzQzOzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KQogCWtmcmVlX3NlbnNpdGl2ZShrZXktJmd0O3BheWxvYWQuZGF0YVswXSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0cnVzdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KQomIzQzO3sKJiM0MzsJc3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKnAgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKCFwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltZW16ZXJvX2V4cGxpY2l0KHAtJmd0O2tleSwgc2l6ZW9mKHAtJmd0O2tleSkpOwomIzQzOwltZW16ZXJvX2V4cGxpY2l0KHAtJmd0O2Jsb2IsIHNpemVvZihwLSZndDtibG9iKSk7CiYjNDM7CXAtJmd0O2tleV9sZW4gPSAwOwomIzQzOwlwLSZndDtibG9iX2xlbiA9IDA7CiYjNDM7fQomIzQzOwogc3RydWN0IGtleV90eXBlIGtleV90eXBlX3RydXN0ZWQgPSB7CiAJLm5hbWUgPSAmIzM0O3RydXN0ZWQmIzM0OywKIAkuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLAogCS51cGRhdGUgPSB0cnVzdGVkX3VwZGF0ZSwKIAkuZGVzdHJveSA9IHRydXN0ZWRfZGVzdHJveSwKJiM0MzsJLnplcm9pemUgPSB0cnVzdGVkX3plcm9pemUsCiAJLmRlc2NyaWJlID0gdXNlcl9kZXNjcmliZSwKIAkucmVhZCA9IHRydXN0ZWRfcmVhZCwKIH07CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwppbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTsKJiM0MztzdGF0aWMgdm9pZCB1c2VyX3plcm9pemUoc3RydWN0IGtleSAqa2V5KTsKIAogLyoKICAqIHVzZXIgZGVmaW5lZCBrZXlzIHRha2UgYW4gYXJiaXRyYXJ5IHN0cmluZyBhcyB0aGUgZGVzY3JpcHRpb24gYW5kIGFuCkBAIC0yOCw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdXNlciA9IHsKIAkudXBkYXRlCQkJPSB1c2VyX3VwZGF0ZSwKIAkucmV2b2tlCQkJPSB1c2VyX3Jldm9rZSwKIAkuZGVzdHJveQkJPSB1c2VyX2Rlc3Ryb3ksCiYjNDM7CS56ZXJvaXplCQk9IHVzZXJfemVyb2l6ZSwKIAkuZGVzY3JpYmUJCT0gdXNlcl9kZXNjcmliZSwKIAkucmVhZAkJCT0gdXNlcl9yZWFkLAogfTsKQEAgLTQ4LDYgJiM0Mzs1MCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9sb2dvbiA9IHsKIAkudXBkYXRlCQkJPSB1c2VyX3VwZGF0ZSwKIAkucmV2b2tlCQkJPSB1c2VyX3Jldm9rZSwKIAkuZGVzdHJveQkJPSB1c2VyX2Rlc3Ryb3ksCiYjNDM7CS56ZXJvaXplCQk9IHVzZXJfemVyb2l6ZSwKIAkuZGVzY3JpYmUJCT0gdXNlcl9kZXNjcmliZSwKIAkudmV0X2Rlc2NyaXB0aW9uCT0gbG9nb25fdmV0X2Rlc2NyaXB0aW9uLAogfTsKQEAgLTE1Miw2ICYjNDM7MTU1LDE0IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKIAogRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTsKIAomIzQzO3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKHVwYXlsb2FkKQomIzQzOwkJbWVtemVyb19leHBsaWNpdCh1cGF5bG9hZC0mZ3Q7ZGF0YSwgdXBheWxvYWQtJmd0O2RhdGFsZW4pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXkKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBQYW5pYyBIYW5kbGVyPyBBIFF1aWNrIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55dGhpbmcgbmV3IHdlIHNob3VsZCBiZSBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGlzIGBDT05GSUdfQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgd2hpY2ggYWRkcyBhIHplcm9pemUgY2FsbGJhY2sgdG8gYHN0cnVjdCBrZXlfdHlwZWAgYW5kIGltcGxlbWVudHMgaXQgZm9yIHNldmVyYWwga2V5IHR5cGVzLiBJdCBhbHNvIGhhbmRsZXMgdGhlIHplcm9pemF0aW9uIG9mIGBzZWNyZXRtZW1gIHBhZ2VzLgoKQnV0IGhvbGQgb24uLi4gdGhpcyBjb2RlLCBgX19jcmFzaF9rZXhlY2AsIG9ubHkgZXhlY3V0ZXMgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGlzIHVzdWFsbHkgbm90IHRoZSB0YXJnZXQgb2YgZnV6emluZy4gRnV6emVycyBhaW0gZm9yIHJlYWNoYWJsZSBjb2RlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIG9yIGVycm9yIGhhbmRsaW5nLiBDYW4gYSBmdXp6ZXIgKnRyaWdnZXIqIHRoaXMgY29kZT8gV2VsbCwgeWVzLCBieSBjYXVzaW5nIGEgcGFuaWMuIEJ1dCB0aGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBmdXp6ZXIgaXMgdG8gZmluZCBwYW5pY3MsIG5vdCB0byBleGFtaW5lIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIGEgcGFuaWMuCgpJZiB0aGUgZnV6emVyIGRvZXMgdHJpZ2dlciBhIHBhbmljLCBhbmQga2R1bXAgaXMgY29uZmlndXJlZCwgdGhlbiBgX19jcmFzaF9rZXhlY2Agd2lsbCBydW4uIEJ1dCBpcyBpdCBldmVuIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB0aGUgemVyb2l6ZSBmdW5jdGlvbnMgdGhlbXNlbHZlcz8gVGhleSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYGJpZ19rZXlfemVyb2l6ZWAsIGBlbmNyeXB0ZWRfemVyb2l6ZWAsIGB0cnVzdGVkX3plcm9pemVgLCBgdXNlcl96ZXJvaXplYCwgYHNlY3JldG1lbV9jcmFzaF96ZXJvaXplYCwgYW5kIGBrZXlfY3Jhc2hfemVyb2l6ZWAsIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSBgY3Jhc2hfemVyb2l6ZSgpYCBjYWxsZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYC4KClNvLCBgX19jcmFzaF9rZXhlY2AgKmlzKiByZWFjaGFibGUg4oCTIG9uIHBhbmljLiBBcmUgdGhlc2UgemVyb2l6ZSBmdW5jdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBhcmUgYWN0dWFsbHkgcXVpdGUgc2ltcGxlLCBsaWtlIHRoaXMgYHVzZXJfemVyb2l6ZWAgZXhhbXBsZS4gQW5kIGluIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGl0IGNhbGxzIGBmcmVlX2ZvbGlvYC4gSXMgaXQgc2FmZSB0byBjYWxsIGBmcmVlX2ZvbGlvYCBkdXJpbmcgYSBwYW5pYz8gVGhlIGNvbW1lbnQgc2F5cyAmIzM0O25vIG5lZWQgZm9yIGxvY2tzIGlmIHdlJiMzOTtyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopJiMzNDsuIFRoaXMgbWFrZXMgbWUgbmVydm91cyB0aG91Z2guIElmIGl0IGNyYXNoZXMgZHVyaW5nIGBmcmVlX2ZvbGlvYCwgY291bGQgd2UgZ2V0IGEgZG91YmxlIGZhdWx0LCBvciB3b3JzZT8KCklzIHRoaXMgc29tZXRoaW5nIHN5emthbGxlciBzaG91bGQgZXZlbiBiZSBsb29raW5nIGF0PyBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIHBvc3QtcGFuaWMgY29kZSBiZWNhdXNlIGEgY3Jhc2ggdHlwaWNhbGx5IGVuZHMgdGhlIGZ1enppbmcgcnVuIGFuZCBpdCBkb2VzbiYjMzk7dCBjb250aW51ZSBvbiB0byBmaW5kaW5nIGJ1Z3MgaW4gdGhlIHBhbmljIGhhbmRsZXIsIHVubGVzcyBpdCBjYXVzZXMgYSBzZWNvbmRhcnkgcGFuaWMgd2hpY2ggY291bGQgY29ycnVwdCB0aGUgY3Jhc2ggbG9nLiBBY3R1YWxseSwgd2FpdCEgU3l6a2FsbGVyICpkb2VzKiBwYXJzZSBjcmFzaCBsb2dzLCBzbyBhIGNvcnJ1cHRlZCBsb2cgZHVlIHRvIGEgcGFuaWMgaGFuZGxlciBidWcgKmlzKiBhIHJlbGV2YW50IGJ1ZyB0byBjYXRjaC4KCkJ1dCwgY2FuIHRoZXNlIHplcm9pemUgZnVuY3Rpb25zIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2U/IE5vLCB0aGV5IGFyZSByZWdpc3RlcmVkIHRvIGEgbm90aWZpZXIgbGlzdCB0aGF0IG9ubHkgdHJpZ2dlcnMgb24gY3Jhc2ggZnVuY3Rpb25zLgoKV2FpdCwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGJ5IGBfX2NyYXNoX2tleGVjYCBhbmQgYGNyYXNoX3plcm9pemVgLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgYSByZWFsIHBhbmljPyBObywgYF9fY3Jhc2hfa2V4ZWNgIGlzIGNhbGxlZCBmcm9tIGBwYW5pYygpYCwgYGNyYXNoX2tleGVjKClgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4gV2UgbmVlZCBhIHBhbmljIHRvIHJlYWNoIGl0LCB3aGljaCBpcyB0aGUgKmVuZCogb2YgYSBmdXp6aW5nIHJ1bi4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYWxyZWFkeSBkZWFkLCBzbyBhIGZ1enplciBjYW4mIzM5O3QgbWVhbmluZ2Z1bGx5IGV4cGxvcmUgaXQuIFdhaXQsIHlvdSAqY2FuKiB0cmlnZ2VyIGBjcmFzaF9rZXhlY2AgdmlhIGBzeXNycS1jYCDigJMgd2hpY2ggY2F1c2VzIGEgcGFuaWMuIEJ1dCB0aGF0JiMzOTtzIHN0aWxsIGEgcGFuaWMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVyZSYjMzk7cyBhIGNoYW5nZSBpbiB0aGUgYGtleV90eXBlYCBzdHJ1Y3Qgc2l6ZSBhbmQgbm90aWZpZXIgcmVnaXN0cmF0aW9uLgoKT2theSwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgZ3VpZGVsaW5lcyBzYXkgdG8gc2tpcCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBhbmQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzJiMzNDsuIEl0IGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgbWVudGlvbiAmIzM0O3Bvc3QtcGFuaWMgY29kZSwmIzM0OyBidXQgZnV6emluZyBwb3N0LXBhbmljIGNvZGUgaXMgZ2VuZXJhbGx5IGluZWZmZWN0aXZlIGJlY2F1c2UgdGhlIGZ1enplciBzdG9wcyBhdCB0aGUgZmlyc3QgcGFuaWMuIEhvbGQgb24sIHdoYXQgYWJvdXQgZHVyaW5nIGEgbm9ybWFsIGtleGVjPyBObywgYGNyYXNoX3plcm9pemVgIGlzIGNhbGxlZCBmcm9tIGBfX2NyYXNoX2tleGVjYCwgbm90IGBrZXJuZWxfa2V4ZWNgLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgYF9fY3Jhc2hfa2V4ZWNgLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NyYXNoX2tleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jPTEyNz1zdGF0aWMgdm9pZCBfX25vcmV0dXJuIGh2X2NyYXNoX2hhbmRsZSh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jLTEzMi1cdC8qIHdlIGFyZSBub3cgZnVsbHkgaW4gZGV2aXJ0dWFsaXplZCBub3JtYWwga2VybmVsIG1vZGUgKi9cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jOjEzMzpcdF9fY3Jhc2hfa2V4ZWMoTlVMTCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0xMzQtXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmM9MzMyPXN0YXRpYyBpbnQgaHZfY3Jhc2hfbm1pX2xvY2FsKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jLTM2MS0gKlx0QlNQIDogTk1JIGNhbGxiYWNrIC1cdTAwM2UgRGlzYWJsZUh2IC1cdTAwM2UgaHZfY3Jhc2hfYXNtMzIgLVx1MDAzZSBodl9jcmFzaF9jX2VudHJ5XG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzozNjI6ICpcdFx0ICAtXHUwMDNlIF9fY3Jhc2hfa2V4ZWMgLVx1MDAzZSBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93blxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmMtMzYzLSAqXHRcdCAgLVx1MDAzZSBjcmFzaF9zbXBfc2VuZF9zdG9wIC1cdTAwM2Ugc21wX29wcy5jcmFzaF9zdG9wX290aGVyX2NwdXNcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaD03Mj1zdHJ1Y3Qga2V4ZWNfc2VnbWVudDtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaC04MC1cbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oOjgxOmV4dGVybiB2b2lkIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODItZXh0ZXJuIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oPTk3PXN0cnVjdCBraW1hZ2U7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaC05OS1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWMuaD01Mzg9c3RydWN0IGtpbWFnZTtcbmluY2x1ZGUvbGludXgva2V4ZWMuaDo1Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlYy5oLTU0MC1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmtlcm5lbC9jcmFzaF9jb3JlLmM9MTMxPXN0YXRpYyB2b2lkIGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSh2b2lkKVxuLS1cbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQzLSAqL1xua2VybmVsL2NyYXNoX2NvcmUuYzoxNDQ6dm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQ1LXtcbi0tXG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2Ny19XG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE2ODpTVEFDS19GUkFNRV9OT05fU1RBTkRBUkQoX19jcmFzaF9rZXhlYyk7XG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2OS1cbmtlcm5lbC9jcmFzaF9jb3JlLmM9MTcwPV9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2NyYXNoX2NvcmUuYy0xNzMtXHRcdC8qIFRoaXMgaXMgdGhlIDFzdCBDUFUgd2hpY2ggY29tZXMgaGVyZSwgc28gZ28gYWhlYWQuICovXG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE3NDpcdFx0X19jcmFzaF9rZXhlYyhyZWdzKTtcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTc1LVxuLS1cbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oPTE1PWludCBraW1hZ2VfaXNfZGVzdGluYXRpb25fcmFuZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXG4tLVxua2VybmVsL2tleGVjX2ludGVybmFsLmgtMTktICogV2hhdGV2ZXIgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gdGhlIGtleGVjX2NyYXNoX2ltYWdlIG5lZWRzIHRvIGJlXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDoyMDogKiBOTUkgc2FmZSwgYXMgX19jcmFzaF9rZXhlYygpIGNhbiBoYXBwZW4gZHVyaW5nIG5taV9wYW5pYygpLCBzbyBoZXJlIHdlIHVzZSBhXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC0yMS0gKiBcJiMzNDtzaW1wbGVcJiMzNDsgYXRvbWljIHZhcmlhYmxlIHRoYXQgaXMgYWNxdWlyZWQgd2l0aCBhIGNtcHhjaGcoKS5cbi0tXG5rZXJuZWwvcGFuaWMuYz01Nzc9dm9pZCB2cGFuaWMoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXG4tLVxua2VybmVsL3BhbmljLmMtNjY3LVx0ICpcbmtlcm5lbC9wYW5pYy5jOjY2ODpcdCAqIEJ5cGFzcyB0aGUgcGFuaWNfY3B1IGNoZWNrIGFuZCBjYWxsIF9fY3Jhc2hfa2V4ZWMgZGlyZWN0bHkuXG5rZXJuZWwvcGFuaWMuYy02NjktXHQgKi9cbmtlcm5lbC9wYW5pYy5jLTY3MC1cdGlmICghX2NyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzKVxua2VybmVsL3BhbmljLmM6NjcxOlx0XHRfX2NyYXNoX2tleGVjKE5VTEwpO1xua2VybmVsL3BhbmljLmMtNjcyLVxuLS1cbmtlcm5lbC9wYW5pYy5jLTY5My1cdCAqXG5rZXJuZWwvcGFuaWMuYzo2OTQ6XHQgKiBCeXBhc3MgdGhlIHBhbmljX2NwdSBjaGVjayBhbmQgY2FsbCBfX2NyYXNoX2tleGVjIGRpcmVjdGx5Llxua2VybmVsL3BhbmljLmMtNjk1LVx0ICovXG5rZXJuZWwvcGFuaWMuYy02OTYtXHRpZiAoX2NyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzKVxua2VybmVsL3BhbmljLmM6Njk3Olx0XHRfX2NyYXNoX2tleGVjKE5VTEwpO1xua2VybmVsL3BhbmljLmMtNjk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3OTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2l6ZSBGdW5jdGlvbiBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBgX19jcmFzaF9rZXhlY2AgaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGEga2VybmVsIHBhbmljIG9yIGEgY3Jhc2guIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gaXMsIGZ1enppbmcgdGhpcyBkaXJlY3RseSBpcyBjb21wbGV0ZWx5IGltcHJhY3RpY2FsLiBBIGZ1enplciYjMzk7cyB3aG9sZSBwdXJwb3NlIGlzIHRvIGZpbmQgcGFuaWNzIOKAkyB0aGUgbW9tZW50IGl0ICpkb2VzKiBmaW5kIG9uZSwgaXQmIzM5O3MgZG9uZSBpdHMgam9iIGFuZCByZWJvb3RzIHRoZSB2aXJ0dWFsIG1hY2hpbmUgdG8gY29sbGVjdCB0aGUgY3Jhc2ggbG9nLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0JiMzOTtzIGV4ZWN1dGVkICphZnRlciogdGhlIHBhbmljLCBiZWNhdXNlIHRoZSBwYW5pYyBpdHNlbGYgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZ1enppbmcgcnVuLgoKV2FpdCBhIHNlY29uZOKApiBjb3VsZCBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHBvdGVudGlhbGx5IHRyaWdnZXIgYGNyYXNoX2tleGVjYD8gTGV0JiMzOTtzIHNlZeKApiBBaCwgeWVzLCB0aGVyZSBpdCBpczogYF9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpYC4gSW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGV2ZW4gaWYgQlBGICpjb3VsZCogY2FsbCBgY3Jhc2hfa2V4ZWNgLCB0aGUgb3V0Y29tZSBpcyBwcmVkaWN0YWJsZS4gSXQgd291bGQgZWl0aGVyIGNyYXNoIHRoZSBzeXN0ZW0gb3V0cmlnaHQgKGlmIGtkdW1wIGlzIGxvYWRlZCksIG9yIGl0IHdvdWxkIGRvIG5vdGhpbmcgKGlmIGtkdW1wIGlzbiYjMzk7dCBsb2FkZWQpLiBFaXRoZXIgd2F5LCBpdCBlbmRzIHRoZSBmdXp6aW5nIHJ1biBpbW1lZGlhdGVseSwgYmVjYXVzZSBhIGNyYXNoIGlzIGp1c3QgY29uc2lkZXJlZCBhIGJ1ZyBhbmQgaXMgaW1tZWRpYXRlbHkgcmVwb3J0ZWQuCgpTbywgcmVhbGlzdGljYWxseSwgYSBmdXp6ZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZXhwbG9yZSB0aGUgYHplcm9pemVgIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgYnVncyB3aXRoaW4gdGhlbSwgYmVjYXVzZSBhbnkgZXhlY3V0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gYSBzeXN0ZW0gY3Jhc2guIFRoZSBmdXp6aW5nIHByb2Nlc3MgdGVybWluYXRlcyBiZWZvcmUgaXQgY2FuIGV4cGxvcmUgdGhlIHBvc3QtY3Jhc2ggYmVoYXZpb3VyLgoKTm93LCBob2xkIG9uLi4uIElzIHRoZXJlICphbnkqIG90aGVyIHBhdGggdG8gdHJpZ2dlciB0aGUgYHplcm9pemVgIGZ1bmN0aW9uPyBMZXQmIzM5O3MgY2hlY2suLi4gT2theSwgYGtleS0mZ3Q7dHlwZS0mZ3Q7emVyb2l6ZShrZXkpYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBrZXlfY3Jhc2hfemVyb2l6ZWAsIHdoaWNoIGlzLCBpbiB0dXJuLCByZWdpc3RlcmVkIHRvIHRoZSBgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0YC4gQW5kIGBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3RgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGNyYXNoX3plcm9pemUoKWAuIEZpbmFsbHksIGBjcmFzaF96ZXJvaXplKClgIGlzIG9ubHkgY2FsbGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAuCgpHb3QgaXQuIFNvIHRoaXMgZW50aXJlIGZlYXR1cmUgaXMgc3RyaWN0bHkgcG9zdC1wYW5pYy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcnVuICphZnRlciogYSBjcmFzaCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjb25maXJtcyB0aGF0IGEgZnV6emVyIGlzIG5vdCBhIHVzZWZ1bCB0b29sIGhlcmUuIEEgZnV6emVyIGNvbnNpZGVycyBhIHBhbmljIHRvIGJlIGFuIGVycm9yIGFuZCBpbW1lZGlhdGVseSBoYWx0cyB0aGUgZXhlY3V0aW9uLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gdHJ5IHRvIG1heGltaXplIGNvZGUgY292ZXJhZ2UgKmFmdGVyKiBhIGNyYXNoIGhhcyBoYXBwZW5lZC4KClRoZXJlZm9yZSwgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIGFtZW5hYmxlIHRvIGZ1enppbmcuIEl0JiMzOTtzIHB1cmVseSByZWxhdGVkIHRvIHBvc3QtcGFuaWMgY2xlYW51cCBhbmQgaXMgaW5oZXJlbnRseSBvdXRzaWRlIHRoZSBzY29wZSBvZiBlZmZlY3RpdmUgZnV6emluZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V6ZXJvaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2tleXMva2V5LmM9MTI3Nj1zdGF0aWMgaW50IGtleV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLFxuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtMTI5Ny1cdFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSYjMzk7aW5nIGlzbiYjMzk7dCBzYWZlIGF0IHRoaXMgcG9pbnQgKi9cbnNlY3VyaXR5L2tleXMva2V5LmM6MTI5ODpcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG5zZWN1cml0eS9rZXlzL2tleS5jOjEyOTk6XHRcdFx0a2V5LVx1MDAzZXR5cGUtXHUwMDNlemVyb2l6ZShrZXkpO1xuc2VjdXJpdHkva2V5cy9rZXkuYy0xMzAwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTIzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBDcmFzaCBaZXJvaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzICpzb2xlbHkqIGNvbmNlcm5lZCB3aXRoIHplcm9pemluZyBzZWNyZXRzLCBzcGVjaWZpY2FsbHkga2V5cyBhbmQgbWVtb3J5LCB1cG9uIGEga2VybmVsIHBhbmljLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGtleV9jcmFzaF96ZXJvaXplYCwgYW5kIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAgaXMgYWxzbyByZWdpc3RlcmVkLCBzbyB0aGF0JiMzOTtzIHRoZSBleHRlbnQgb2YgdGhlIGluaXRpYWwgY2hhbmdlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IGEgYnVuY2ggb2YgYHplcm9pemVgIGNhbGxiYWNrIGltcGxlbWVudGF0aW9ucyB0aGF0IHN1cHBvcnQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhpczogKnRoaXMgY29kZSBpcyBvbmx5IGV2ZXIgcmVhY2hhYmxlIGFmdGVyIGEgcGFuaWMgb2NjdXJzLiogRnV6emVycywgYnkgZGVmaW5pdGlvbiwgdHJlYXQgcGFuaWNzIGFzIHRlcm1pbmFsIGV2ZW50cy4gVGhleSBoYWx0IGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB0byBjYXB0dXJlIHRoZSBjcmFzaCBzdGF0ZSBhbmQgZ2VuZXJhdGUgbG9ncy4gVGhleSBhcmVuJiMzOTt0IGRlc2lnbmVkIHRvIGNvbnRpbnVlIGV4cGxvcmluZyBjb2RlIHBhdGhzICphZnRlciogYSBjcmFzaC4gVHJ5aW5nIHRvIGZ1enogcG9zdC1wYW5pYyBjb2RlIGlzIGdvaW5nIHRvIGJlIHBvaW50bGVzcy4gVGhlcmUmIzM5O3Mgc2ltcGx5IG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUgdGhhdCBhIGZ1enplciBjYW4gbWVhbmluZ2Z1bGx5IGV4ZXJjaXNlLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgYWxsIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL29mL2tleGVjLmNgLCBgaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhgLCBgaW5jbHVkZS9saW51eC9rZXktdHlwZS5oYCwgYGtlcm5lbC9LY29uZmlnLmtleGVjYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBgbW0vc2VjcmV0bWVtLmNgLCBhbmQgdGhlIHNlY3VyaXR5IGtleSBmaWxlcy4gVGhleSBhbGwgc2VlbSB0byBiZSB0aWdodGx5IGNvdXBsZWQgdG8gdGhpcyBwYW5pYyB6ZXJvaXphdGlvbiBmdW5jdGlvbmFsaXR5LCB0aGUgYENSQVNIX1pFUk9JWkVgIGZlYXR1cmUsIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBwYW5pYyBhbmQgbm90IGVhcmxpZXIuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIHRyeWluZyB0byBmdXp6IHRoZXNlIGNoYW5nZXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHplcm9pemUgc2VjcmV0cyAoa2V5cyBhbmQgc2VjcmV0bWVtKSBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAgYWZ0ZXIgYSBwYW5pYyBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gRnV6emVycyB0cmVhdCBwYW5pY3MgYXMgYnVncyBhbmQgaGFsdCBleGVjdXRpb24gdG8gY29sbGVjdCBjcmFzaCBsb2dzLCBtZWFuaW5nIHRoZXkgY2Fubm90IGVmZmVjdGl2ZWx5IGV4cGxvcmUgb3IgZmluZCBidWdzIGluIHBvc3QtcGFuaWMgY29kZSBwYXRocy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBjYW4gYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gemVyb2l6ZSBzZWNyZXRzIChrZXlzIGFuZCBzZWNyZXRtZW0pIGR1cmluZyBhIGtlcm5lbCBjcmFzaCBvciBwYW5pYy4gVGhpcyBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYCBhZnRlciBhIHBhbmljIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBGdXp6ZXJzIHRyZWF0IHBhbmljcyBhcyBidWdzIGFuZCBoYWx0IGV4ZWN1dGlvbiB0byBjb2xsZWN0IGNyYXNoIGxvZ3MsIG1lYW5pbmcgdGhleSBjYW5ub3QgZWZmZWN0aXZlbHkgZXhwbG9yZSBvciBmaW5kIGJ1Z3MgaW4gcG9zdC1wYW5pYyBjb2RlIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgZG8gbm90IGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6NDU6NTMuODkzMDAzMDAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjI5NjI5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHplcm9pemUgc2VjcmV0cyAoa2V5cyBhbmQgc2VjcmV0bWVtKSBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAgYWZ0ZXIgYSBwYW5pYyBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gRnV6emVycyB0cmVhdCBwYW5pY3MgYXMgYnVncyBhbmQgaGFsdCBleGVjdXRpb24gdG8gY29sbGVjdCBjcmFzaCBsb2dzLCBtZWFuaW5nIHRoZXkgY2Fubm90IGVmZmVjdGl2ZWx5IGV4cGxvcmUgb3IgZmluZCBidWdzIGluIHBvc3QtcGFuaWMgY29kZSBwYXRocy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBjYW4gYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ1OjUzLjg5MzAwODQ3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNjYzMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjQ1OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xcbmluZGV4IDAyOTkwM2I5ODZjYmQuLjM2NjM1ZjZjYjkwMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXFxuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXFxuQEAgLTI0LDcgKzI0LDcgQEBcXG4gXFxuIC8qXFxuICAqIEFkZGl0aW9uYWwgc3BhY2UgbmVlZGVkIGZvciB0aGUgRkRUIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBhZGQgaW5pdHJkLFxcbi0gKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzZWFibGUtbWVtb3J5LXJhbmdlIGFuZCBlbGZjb3JlaGRyLlxcbisgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuXFxuICAqL1xcbiAjZGVmaW5lIEZEVF9FWFRSQV9TUEFDRSAweDEwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcXG5pbmRleCBiYzA4NzEyNGNkNzhlLi41YzcyMDdjMGJiYTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbmthZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZmNvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBraW1hZ2U7XFxuIFxcbkBAIC0zNCw2ICszNSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY19wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfdW5wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcXG4rZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3Q7XFxuKyNlbmRpZlxcbitcXG4gI2lmbmRlZiBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpIHsgfVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXFxuaW5kZXggYmI5N2JkM2U1YWY0Zi4uZmYwOTQ0Y2UzNjhmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcXG5AQCAtMTIyLDYgKzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xcbiBcXHQvKiBjbGVhciB0aGUgZGF0YSBmcm9tIGEga2V5IChvcHRpb25hbCkgKi9cXG4gXFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBrZXkgKmtleSk7XFxuIFxcbitcXHQvKiBzY3J1YiB0aGUga2V5IG1hdGVyaWFsIHdpdGhvdXQgZnJlZSdpbmcgKG9wdGlvbmFsKVxcbitcXHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxcbitcXHQgKiAgIGNyYXNoIGR1bXBzXFxuK1xcdCAqIC0gY2FsbGVkIGZyb20gdGhlIHBhbmljIHBhdGggd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kIHByZWVtcHRpb25cXG4rXFx0ICogICBkaXNhYmxlZFxcbitcXHQgKiAtIG11c3Qgbm90IHNsZWVwLCBhbGxvY2F0ZSwgZnJlZSBvciB0YWtlIGxvY2tzXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcXG4rXFxuIFxcdC8qIGRlc2NyaWJlIGEga2V5ICovXFxuIFxcdHZvaWQgKCpkZXNjcmliZSkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcua2V4ZWMgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xcbmluZGV4IDE1NjMyMzU4YmNmNzEuLjkyYWIwYTY5YzhlYzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL0tjb25maWcua2V4ZWNcXG4rKysgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xcbkBAIC0xNzksNCArMTc5LDEyIEBAIGNvbmZpZyBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU1xcbiBcXHQgIHRoZSBjb21wdXRhdGlvbiBiZWhpbmQgdGhlIHZhbHVlIHByb3ZpZGVkIHRocm91Z2ggdGhlXFxuIFxcdCAgL3N5cy9rZXJuZWwvY3Jhc2hfZWxmY29yZWhkcl9zaXplIGF0dHJpYnV0ZS5cXG4gXFxuK2NvbmZpZyBDUkFTSF9aRVJPSVpFXFxuK1xcdGJvb2wgXFxcIlplcm9pemUgc2VjcmV0cyBvbiBwYW5pY1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBDUkFTSF9EVU1QXFxuK1xcdGhlbHBcXG4rXFx0ICBXaXBlIHNlY3JldHMgKGUuZy4ga2VybmVsIGtleXJpbmcgYW5kIG1lbWZkX3NlY3JldCBwYWdlcykgb24gY3Jhc2ggb3IgcGFuaWMuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmFzaF9jb3JlLmMgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuKysrIGIva2VybmVsL2NyYXNoX2NvcmUuY1xcbkBAIC0yMyw2ICsyMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vYmp0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFuaWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVrZWVwaW5nLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZWN0aW9ucy5oXFx1MDAzZVxcbkBAIC0zMyw2ICszNCwyMiBAQFxcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xcbiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlcztcXG4gXFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxcbitBVE9NSUNfTk9USUZJRVJfSEVBRChjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QpO1xcbitFWFBPUlRfU1lNQk9MX0dQTChjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QpO1xcbitcXG4rc3RhdGljIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKVxcbit7XFxuK1xcdGt0aW1lX3QgemVyb2l6ZV9zdGFydCA9IGt0aW1lX2dldCgpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiV2lwaW5nIHNlbnNpdGl2ZSBzZWNyZXRzLi4uXFxcXG5cXFwiKTtcXG4rXFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgMCwgTlVMTCk7XFxuK1xcdHByX2luZm8oXFxcIkRvbmUgaW4gJWxsZCB1c1xcXFxuXFxcIiwga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiAvKiB0aW1lIHRvIHdhaXQgZm9yIHBvc3NpYmxlIERNQSB0byBmaW5pc2ggYmVmb3JlIHN0YXJ0aW5nIHRoZSBrZHVtcCBrZXJuZWxcXG4gICogd2hlbiBhIENNQSByZXNlcnZhdGlvbiBpcyB1c2VkXFxuICAqL1xcbkBAIC0xNDIsNiArMTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0XFx0Y3Jhc2hfc2F2ZV92bWNvcmVpbmZvKCk7XFxuIFxcdFxcdFxcdG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oXFx1MDAyNmZpeGVkX3JlZ3MpO1xcbiBcXHRcXHRcXHRjcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEoKTtcXG4rXFx0XFx0XFx0Y3Jhc2hfemVyb2l6ZSgpO1xcbiBcXHRcXHRcXHRtYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRrZXhlY191bmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2VjcmV0bWVtLmMgYi9tbS9zZWNyZXRtZW0uY1xcbmluZGV4IGQyOTg2NTA3NWI2ZWEuLjUzZjYyOWQ2NjMzYzEgMTAwNjQ0XFxuLS0tIGEvbW0vc2VjcmV0bWVtLmNcXG4rKysgYi9tbS9zZWNyZXRtZW0uY1xcbkBAIC0xMyw5ICsxMywxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNldWRvX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWNyZXRtZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2NvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiBcXG5AQCAtMTg3LDYgKzE4OSw1MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2VjcmV0bWVtX2lvcHMgPSB7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzZWNyZXRtZW1fbW50O1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXFxuKyAqIHByZWVtcHRpb24gZGlzYWJsZWRcXG4rICovXFxuK3N0YXRpYyBpbnQgc2VjcmV0bWVtX2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZ1xcbitcXHRcXHRhY3Rpb24sIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdGlmICghc2VjcmV0bWVtX21udClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHRzYiA9IHNlY3JldG1lbV9tbnQtXFx1MDAzZW1udF9zYjtcXG4rXFxuK1xcdC8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJ2VkLCBpdCBtaWdodCBiZVxcbitcXHQgKiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCB3b3VsZCBiZSB1bnNhZmUgdG8gaXRlcmF0ZS4gSWYgd2UgY2FuJ3RcXG4rXFx0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0J3MgYWxsIHdlIGNhbiBkbyBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcGluX3RyeWxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcXG4rXFx0XFx0cHJfY3JpdChcXFwiY3Jhc2hfemVyb2l6ZTogY2FuJ3QgYWNxdWlyZSBzZWNyZXRtZW0gc3VwZXJibG9jayBsb2NrLlxcXFxuXFxcIlxcbitcXHRcXHRcXHQgXFxcImNyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG4rXFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9wYWdlcywgMCk7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcbitcXHRcXHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSdyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopICovXFxuK1xcdFxcdHhhc19mb3JfZWFjaChcXHUwMDI2eGFzLCBmb2xpbywgVUxPTkdfTUFYKSB7XFxuK1xcdFxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdC8qIG9mZiB0byBrZXhlYygpISAqL1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gc2VjcmV0bWVtX2NyYXNoX3plcm9pemVcXG4rfTtcXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiBzdGF0aWMgc3RydWN0IGZpbGUgKnNlY3JldG1lbV9maWxlX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbkBAIC0yNjMsNiArMzA5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IHNlY3JldG1lbV9pbml0KHZvaWQpXFxuIFxcdGlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuK1xcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCBcXHUwMDI2c2VjcmV0bWVtX3plcm9pemVfbmIpO1xcbisjZW5kaWZcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmMgYi9zZWN1cml0eS9rZXlzL2JpZ19rZXkuY1xcbmluZGV4IDI2OGY3MDJkZjM4MGUuLmFkODUzN2RkYTcwZmEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcXG4rKysgYi9zZWN1cml0eS9rZXlzL2JpZ19rZXkuY1xcbkBAIC0zNSw2ICszNSw4IEBAIHN0cnVjdCBiaWdfa2V5X3BheWxvYWQge1xcbiAgKi9cXG4gI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSArIHNpemVvZihzdHJ1Y3QgZGVudHJ5KSlcXG4gXFxuK3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xcbitcXG4gLypcXG4gICogYmlnX2tleSBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cXG4gICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZFxcbkBAIC00Niw2ICs0OCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9iaWdfa2V5ID0ge1xcbiBcXHQuaW5zdGFudGlhdGVcXHRcXHQ9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLFxcbiBcXHQucmV2b2tlXFx0XFx0XFx0PSBiaWdfa2V5X3Jldm9rZSxcXG4gXFx0LmRlc3Ryb3lcXHRcXHQ9IGJpZ19rZXlfZGVzdHJveSxcXG4rXFx0Lnplcm9pemVcXHRcXHQ9IGJpZ19rZXlfemVyb2l6ZSxcXG4gXFx0LmRlc2NyaWJlXFx0XFx0PSBiaWdfa2V5X2Rlc2NyaWJlLFxcbiBcXHQucmVhZFxcdFxcdFxcdD0gYmlnX2tleV9yZWFkLFxcbiBcXHQudXBkYXRlXFx0XFx0XFx0PSBiaWdfa2V5X3VwZGF0ZSxcXG5AQCAtMjc5LDYgKzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkICpwYXlsb2FkID0gdG9fYmlnX2tleV9wYXlsb2FkKGtleS1cXHUwMDNlcGF5bG9hZCk7XFxuK1xcbitcXHRpZiAocGF5bG9hZC1cXHUwMDNlZGF0YSkge1xcbitcXHRcXHRpZiAocGF5bG9hZC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2UgQklHX0tFWV9GSUxFX1RIUkVTSE9MRClcXG4rXFx0XFx0XFx0bWVtemVyb19leHBsaWNpdChwYXlsb2FkLVxcdTAwM2VkYXRhLCBDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtZW16ZXJvX2V4cGxpY2l0KHBheWxvYWQtXFx1MDAzZWRhdGEsIHBheWxvYWQtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIga2V5IHR5cGVcXG4gICovXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXFxuaW5kZXggNTljYjc3YjIzN2IzNi4uOWY1NmZhOWI0YWFmNCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXFxuKysrIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuY1xcbkBAIC05NzAsMTEgKzk3MCwyMyBAQCBzdGF0aWMgdm9pZCBlbmNyeXB0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcXG4re1xcbitcXHRzdHJ1Y3QgZW5jcnlwdGVkX2tleV9wYXlsb2FkICplcGF5bG9hZCA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbitcXG4rXFx0aWYgKCFlcGF5bG9hZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWVtemVyb19leHBsaWNpdChlcGF5bG9hZC1cXHUwMDNlcGF5bG9hZF9kYXRhLFxcbitcXHRcXHRcXHQgZXBheWxvYWQtXFx1MDAzZXBheWxvYWRfZGF0YWxlbiArIGVwYXlsb2FkLVxcdTAwM2VkYXRhYmxvYl9sZW4pO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZW5jcnlwdGVkID0ge1xcbiBcXHQubmFtZSA9IFxcXCJlbmNyeXB0ZWRcXFwiLFxcbiBcXHQuaW5zdGFudGlhdGUgPSBlbmNyeXB0ZWRfaW5zdGFudGlhdGUsXFxuIFxcdC51cGRhdGUgPSBlbmNyeXB0ZWRfdXBkYXRlLFxcbiBcXHQuZGVzdHJveSA9IGVuY3J5cHRlZF9kZXN0cm95LFxcbitcXHQuemVyb2l6ZSA9IGVuY3J5cHRlZF96ZXJvaXplLFxcbiBcXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQucmVhZCA9IGVuY3J5cHRlZF9yZWFkLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuY1xcbmluZGV4IGIzNGE2NGQ4MWQ0N2EuLjU2NzNkY2M4YzVkMjMgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuQEAgLTEyNjgsNiArMTI2OSw0NCBAQCB2b2lkIHVucmVnaXN0ZXJfa2V5X3R5cGUoc3RydWN0IGtleV90eXBlICprdHlwZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXFxuKyAqIHByZWVtcHRpb24gZGlzYWJsZWRcXG4rICovXFxuK3N0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuK1xcdFxcdHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuK1xcbitcXHQvKiBJZiB3ZSBjYW4ndCBhY3F1aXJlIHRoZSBsb2NrLCB0aGUgcmJ0cmVlIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudFxcbitcXHQgKiBzdGF0ZS4gVGhhdCdzIGFsbCB3ZSBjYW4gZG8gdGhlbiwgYXMgdGhlcmUncyBubyBwb2ludCB0byB3YWl0aW5nXFxuK1xcdCAqIGF0IHRoaXMgc3RhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNwaW5fdHJ5bG9jayhcXHUwMDI2a2V5X3NlcmlhbF9sb2NrKSkge1xcbitcXHRcXHRwcl9jcml0KFxcXCJjcmFzaF96ZXJvaXplOiBjYW4ndCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2a2V5X3NlcmlhbF90cmVlKTsgbm9kZTsgbm9kZSA9IHJiX25leHQobm9kZSkpIHtcXG4rXFx0XFx0c3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpO1xcbitcXG4rXFx0XFx0aWYgKGtleS1cXHUwMDNldHlwZSA9PSBcXHUwMDI2a2V5X3R5cGVfa2V5cmluZyB8fFxcbitcXHRcXHQgICAga2V5LVxcdTAwM2VzdGF0ZSA9PSBLRVlfSVNfVU5JTlNUQU5USUFURUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSdpbmcgaXNuJ3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovXFxuK1xcdFxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXplcm9pemUpXFxuK1xcdFxcdFxcdGtleS1cXHUwMDNldHlwZS1cXHUwMDNlemVyb2l6ZShrZXkpO1xcbitcXHR9XFxuK1xcdC8qIG9mZiB0byBrZXhlYygpISAqL1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemVcXG4rfTtcXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXNlIHRoZSBrZXkgbWFuYWdlbWVudCBzdGF0ZS5cXG4gICovXFxuQEAgLTEyOTAsNCArMTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXFxuIFxcbiBcXHRyYl9pbnNlcnRfY29sb3IoXFx1MDAyNnJvb3Rfa2V5X3VzZXIubm9kZSxcXG4gXFx0XFx0XFx0XFx1MDAyNmtleV91c2VyX3RyZWUpO1xcbitcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuK1xcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LFxcbitcXHRcXHRcXHRcXHUwMDI2a2V5X2NyYXNoX3plcm9pemVfbmIpO1xcbisjZW5kaWZcXG4gfVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuYyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXFxuaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXFxuQEAgLTMyNSwxMSArMzI1LDI1IEBAIHN0YXRpYyB2b2lkIHRydXN0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRydXN0ZWRfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXFxuK3tcXG4rXFx0c3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKnAgPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4rXFxuK1xcdGlmICghcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWVtemVyb19leHBsaWNpdChwLVxcdTAwM2VrZXksIHNpemVvZihwLVxcdTAwM2VrZXkpKTtcXG4rXFx0bWVtemVyb19leHBsaWNpdChwLVxcdTAwM2VibG9iLCBzaXplb2YocC1cXHUwMDNlYmxvYikpO1xcbitcXHRwLVxcdTAwM2VrZXlfbGVuID0gMDtcXG4rXFx0cC1cXHUwMDNlYmxvYl9sZW4gPSAwO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdHJ1c3RlZCA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwidHJ1c3RlZFxcXCIsXFxuIFxcdC5pbnN0YW50aWF0ZSA9IHRydXN0ZWRfaW5zdGFudGlhdGUsXFxuIFxcdC51cGRhdGUgPSB0cnVzdGVkX3VwZGF0ZSxcXG4gXFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXFxuK1xcdC56ZXJvaXplID0gdHJ1c3RlZF96ZXJvaXplLFxcbiBcXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQucmVhZCA9IHRydXN0ZWRfcmVhZCxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG4rKysgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTtcXG4rc3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSk7XFxuIFxcbiAvKlxcbiAgKiB1c2VyIGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhblxcbkBAIC0yOCw2ICsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xcbiBcXHQudXBkYXRlXFx0XFx0XFx0PSB1c2VyX3VwZGF0ZSxcXG4gXFx0LnJldm9rZVxcdFxcdFxcdD0gdXNlcl9yZXZva2UsXFxuIFxcdC5kZXN0cm95XFx0XFx0PSB1c2VyX2Rlc3Ryb3ksXFxuK1xcdC56ZXJvaXplXFx0XFx0PSB1c2VyX3plcm9pemUsXFxuIFxcdC5kZXNjcmliZVxcdFxcdD0gdXNlcl9kZXNjcmliZSxcXG4gXFx0LnJlYWRcXHRcXHRcXHQ9IHVzZXJfcmVhZCxcXG4gfTtcXG5AQCAtNDgsNiArNTAsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb24gPSB7XFxuIFxcdC51cGRhdGVcXHRcXHRcXHQ9IHVzZXJfdXBkYXRlLFxcbiBcXHQucmV2b2tlXFx0XFx0XFx0PSB1c2VyX3Jldm9rZSxcXG4gXFx0LmRlc3Ryb3lcXHRcXHQ9IHVzZXJfZGVzdHJveSxcXG4rXFx0Lnplcm9pemVcXHRcXHQ9IHVzZXJfemVyb2l6ZSxcXG4gXFx0LmRlc2NyaWJlXFx0XFx0PSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQudmV0X2Rlc2NyaXB0aW9uXFx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXFxuIH07XFxuQEAgLTE1Miw2ICsxNTUsMTQgQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxcbiBcXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXFxuK3tcXG4rXFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcbitcXHRpZiAodXBheWxvYWQpXFxuK1xcdFxcdG1lbXplcm9fZXhwbGljaXQodXBheWxvYWQtXFx1MDAzZWRhdGEsIHVwYXlsb2FkLVxcdTAwM2VkYXRhbGVuKTtcXG4rfVxcbitcXG4gLypcXG4gICogZGVzY3JpYmUgdGhlIHVzZXIga2V5XFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NTo1NC40NzUyNzM2NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzI0MDY3MDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjBjODA0MGU3ZWI4MDQxNTBmYjA4MDA1OTVjOTA2MDc2NDlkZjMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjo0NTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuaW5kZXggMDI5OTAzYjk4NmNiZC4uMzY2MzVmNmNiOTAwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2Yva2V4ZWMuY1xuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXG5AQCAtMjQsNyArMjQsNyBAQFxuIFxuIC8qXG4gICogQWRkaXRpb25hbCBzcGFjZSBuZWVkZWQgZm9yIHRoZSBGRFQgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGFkZCBpbml0cmQsXG4tICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci5cbisgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuXG4gICovXG4gI2RlZmluZSBGRFRfRVhUUkFfU1BBQ0UgMHgxMDAwXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuaW5kZXggYmMwODcxMjRjZDc4ZS4uNWM3MjA3YzBiYmExNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuQEAgLTUsNiArNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlua2FnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gc3RydWN0IGtpbWFnZTtcbiBcbkBAIC0zNCw2ICszNSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY19wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY191bnByb3RlY3RfY3Jhc2hrcmVzKHZvaWQpIHsgfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0O1xuKyNlbmRpZlxuK1xuICNpZm5kZWYgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpIHsgfVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaCBiL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaFxuaW5kZXggYmI5N2JkM2U1YWY0Zi4uZmYwOTQ0Y2UzNjhmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG5AQCAtMTIyLDYgKzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xuIFx0LyogY2xlYXIgdGhlIGRhdGEgZnJvbSBhIGtleSAob3B0aW9uYWwpICovXG4gXHR2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTtcbiBcbitcdC8qIHNjcnViIHRoZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBmcmVlJ2luZyAob3B0aW9uYWwpXG4rXHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxuK1x0ICogICBjcmFzaCBkdW1wc1xuK1x0ICogLSBjYWxsZWQgZnJvbSB0aGUgcGFuaWMgcGF0aCB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmQgcHJlZW1wdGlvblxuK1x0ICogICBkaXNhYmxlZFxuK1x0ICogLSBtdXN0IG5vdCBzbGVlcCwgYWxsb2NhdGUsIGZyZWUgb3IgdGFrZSBsb2Nrc1xuK1x0ICovXG4rXHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcbitcbiBcdC8qIGRlc2NyaWJlIGEga2V5ICovXG4gXHR2b2lkICgqZGVzY3JpYmUpKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IHNlcV9maWxlICpwKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvS2NvbmZpZy5rZXhlYyBiL2tlcm5lbC9LY29uZmlnLmtleGVjXG5pbmRleCAxNTYzMjM1OGJjZjcxLi45MmFiMGE2OWM4ZWM2IDEwMDY0NFxuLS0tIGEva2VybmVsL0tjb25maWcua2V4ZWNcbisrKyBiL2tlcm5lbC9LY29uZmlnLmtleGVjXG5AQCAtMTc5LDQgKzE3OSwxMiBAQCBjb25maWcgQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVNcbiBcdCAgdGhlIGNvbXB1dGF0aW9uIGJlaGluZCB0aGUgdmFsdWUgcHJvdmlkZWQgdGhyb3VnaCB0aGVcbiBcdCAgL3N5cy9rZXJuZWwvY3Jhc2hfZWxmY29yZWhkcl9zaXplIGF0dHJpYnV0ZS5cbiBcbitjb25maWcgQ1JBU0hfWkVST0laRVxuK1x0Ym9vbCBcIlplcm9pemUgc2VjcmV0cyBvbiBwYW5pY1wiXG4rXHRkZXBlbmRzIG9uIENSQVNIX0RVTVBcbitcdGhlbHBcbitcdCAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbisrKyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0yMyw2ICsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2JqdG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhbmljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1la2VlcGluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG5AQCAtMzMsNiArMzQsMjIgQEBcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xuIG5vdGVfYnVmX3QgX19wZXJjcHUgKmNyYXNoX25vdGVzO1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK0FUT01JQ19OT1RJRklFUl9IRUFEKGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCk7XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbitcbitzdGF0aWMgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpXG4re1xuK1x0a3RpbWVfdCB6ZXJvaXplX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7XG4rXG4rXHRwcl9pbmZvKFwiV2lwaW5nIHNlbnNpdGl2ZSBzZWNyZXRzLi4uXFxuXCIpO1xuK1x0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCAwLCBOVUxMKTtcbitcdHByX2luZm8oXCJEb25lIGluICVsbGQgdXNcXG5cIiwga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiAvKiB0aW1lIHRvIHdhaXQgZm9yIHBvc3NpYmxlIERNQSB0byBmaW5pc2ggYmVmb3JlIHN0YXJ0aW5nIHRoZSBrZHVtcCBrZXJuZWxcbiAgKiB3aGVuIGEgQ01BIHJlc2VydmF0aW9uIGlzIHVzZWRcbiAgKi9cbkBAIC0xNDIsNiArMTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuIFx0XHRcdGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSgpO1xuK1x0XHRcdGNyYXNoX3plcm9pemUoKTtcbiBcdFx0XHRtYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTtcbiBcdFx0fVxuIFx0XHRrZXhlY191bmxvY2soKTtcbmRpZmYgLS1naXQgYS9tbS9zZWNyZXRtZW0uYyBiL21tL3NlY3JldG1lbS5jXG5pbmRleCBkMjk4NjUwNzViNmVhLi41M2Y2MjlkNjYzM2MxIDEwMDY0NFxuLS0tIGEvbW0vc2VjcmV0bWVtLmNcbisrKyBiL21tL3NlY3JldG1lbS5jXG5AQCAtMTMsOSArMTMsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3JldG1lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiBcbkBAIC0xODcsNiArMTg5LDUwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzZWNyZXRtZW1faW9wcyA9IHtcbiBcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzZWNyZXRtZW1fbW50O1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXG4rICogcHJlZW1wdGlvbiBkaXNhYmxlZFxuKyAqL1xuK3N0YXRpYyBpbnQgc2VjcmV0bWVtX2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZ1xuK1x0XHRhY3Rpb24sIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXG4rXHRpZiAoIXNlY3JldG1lbV9tbnQpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdHNiID0gc2VjcmV0bWVtX21udC1cdTAwM2VtbnRfc2I7XG4rXG4rXHQvKiBJZiB0aGUgbGlzdCB3YXMgbW9kaWZpZWQgaW4gdGhlIGV4YWN0IG1vbWVudCB3ZSBwYW5pYydlZCwgaXQgbWlnaHQgYmVcbitcdCAqIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IHdvdWxkIGJlIHVuc2FmZSB0byBpdGVyYXRlLiBJZiB3ZSBjYW4ndFxuK1x0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0J3MgYWxsIHdlIGNhbiBkbyBoZXJlLlxuK1x0ICovXG4rXHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcbitcdFx0cHJfY3JpdChcImNyYXNoX3plcm9pemU6IGNhbid0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cXG5cIlxuK1x0XHRcdCBcImNyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxuXCIpO1xuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHR9XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG4rXHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWlfcGFnZXMsIDApO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSdyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopICovXG4rXHRcdHhhc19mb3JfZWFjaChcdTAwMjZ4YXMsIGZvbGlvLCBVTE9OR19NQVgpIHtcbitcdFx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvKGZvbGlvKTtcbitcdFx0fVxuK1x0fVxuK1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiBzdGF0aWMgc3RydWN0IGZpbGUgKnNlY3JldG1lbV9maWxlX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuQEAgLTI2Myw2ICszMDksMTAgQEAgc3RhdGljIGludCBfX2luaXQgc2VjcmV0bWVtX2luaXQodm9pZClcbiBcdGlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpO1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgXHUwMDI2c2VjcmV0bWVtX3plcm9pemVfbmIpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5pbmRleCAyNjhmNzAyZGYzODBlLi5hZDg1MzdkZGE3MGZhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcbisrKyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkIHtcbiAgKi9cbiAjZGVmaW5lIEJJR19LRVlfRklMRV9USFJFU0hPTEQgKHNpemVvZihzdHJ1Y3QgaW5vZGUpICsgc2l6ZW9mKHN0cnVjdCBkZW50cnkpKVxuIFxuK3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuK1xuIC8qXG4gICogYmlnX2tleSBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cbiAgKiBhcmJpdHJhcnkgYmxvYiBvZiBkYXRhIGFzIHRoZSBwYXlsb2FkXG5AQCAtNDYsNiArNDgsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfYmlnX2tleSA9IHtcbiBcdC5pbnN0YW50aWF0ZVx0XHQ9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLFxuIFx0LnJldm9rZVx0XHRcdD0gYmlnX2tleV9yZXZva2UsXG4gXHQuZGVzdHJveVx0XHQ9IGJpZ19rZXlfZGVzdHJveSxcbitcdC56ZXJvaXplXHRcdD0gYmlnX2tleV96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gYmlnX2tleV9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSBiaWdfa2V5X3JlYWQsXG4gXHQudXBkYXRlXHRcdFx0PSBiaWdfa2V5X3VwZGF0ZSxcbkBAIC0yNzksNiArMjgyLDE4IEBAIGxvbmcgYmlnX2tleV9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHRzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkICpwYXlsb2FkID0gdG9fYmlnX2tleV9wYXlsb2FkKGtleS1cdTAwM2VwYXlsb2FkKTtcbitcbitcdGlmIChwYXlsb2FkLVx1MDAzZWRhdGEpIHtcbitcdFx0aWYgKHBheWxvYWQtXHUwMDNlbGVuZ3RoIFx1MDAzZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEKVxuK1x0XHRcdG1lbXplcm9fZXhwbGljaXQocGF5bG9hZC1cdTAwM2VkYXRhLCBDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1lbXplcm9fZXhwbGljaXQocGF5bG9hZC1cdTAwM2VkYXRhLCBwYXlsb2FkLVx1MDAzZWxlbmd0aCk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogUmVnaXN0ZXIga2V5IHR5cGVcbiAgKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuY1xuaW5kZXggNTljYjc3YjIzN2IzNi4uOWY1NmZhOWI0YWFmNCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbisrKyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbkBAIC05NzAsMTEgKzk3MCwyMyBAQCBzdGF0aWMgdm9pZCBlbmNyeXB0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4gXHRrZnJlZV9zZW5zaXRpdmUoa2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHRzdHJ1Y3QgZW5jcnlwdGVkX2tleV9wYXlsb2FkICplcGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4rXG4rXHRpZiAoIWVwYXlsb2FkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtZW16ZXJvX2V4cGxpY2l0KGVwYXlsb2FkLVx1MDAzZXBheWxvYWRfZGF0YSxcbitcdFx0XHQgZXBheWxvYWQtXHUwMDNlcGF5bG9hZF9kYXRhbGVuICsgZXBheWxvYWQtXHUwMDNlZGF0YWJsb2JfbGVuKTtcbit9XG4rXG4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX2VuY3J5cHRlZCA9IHtcbiBcdC5uYW1lID0gXCJlbmNyeXB0ZWRcIixcbiBcdC5pbnN0YW50aWF0ZSA9IGVuY3J5cHRlZF9pbnN0YW50aWF0ZSxcbiBcdC51cGRhdGUgPSBlbmNyeXB0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSBlbmNyeXB0ZWRfZGVzdHJveSxcbitcdC56ZXJvaXplID0gZW5jcnlwdGVkX3plcm9pemUsXG4gXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWQgPSBlbmNyeXB0ZWRfcmVhZCxcbiB9O1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jXG5pbmRleCBiMzRhNjRkODFkNDdhLi41NjczZGNjOGM1ZDIzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuY1xuKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbkBAIC0xMjY4LDYgKzEyNjksNDQgQEAgdm9pZCB1bnJlZ2lzdGVyX2tleV90eXBlKHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUpXG4gfVxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9rZXlfdHlwZSk7XG4gXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4rLyogQ2FsbGVkIGZhciBpbnRvIHZwYW5pYyBmcm9tIGNyYXNoX2NvcmUuYyB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmRcbisgKiBwcmVlbXB0aW9uIGRpc2FibGVkXG4rICovXG4rc3RhdGljIGludCBrZXlfY3Jhc2hfemVyb2l6ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbitcdFx0dm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbitcbitcdC8qIElmIHdlIGNhbid0IGFjcXVpcmUgdGhlIGxvY2ssIHRoZSByYnRyZWUgbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50XG4rXHQgKiBzdGF0ZS4gVGhhdCdzIGFsbCB3ZSBjYW4gZG8gdGhlbiwgYXMgdGhlcmUncyBubyBwb2ludCB0byB3YWl0aW5nXG4rXHQgKiBhdCB0aGlzIHN0YWdlLlxuK1x0ICovXG4rXHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZrZXlfc2VyaWFsX2xvY2spKSB7XG4rXHRcdHByX2NyaXQoXCJjcmFzaF96ZXJvaXplOiBjYW4ndCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxuXCIpO1xuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHR9XG4rXG4rXHRmb3IgKG5vZGUgPSByYl9maXJzdChcdTAwMjZrZXlfc2VyaWFsX3RyZWUpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xuK1x0XHRzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7XG4rXG4rXHRcdGlmIChrZXktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV9rZXlyaW5nIHx8XG4rXHRcdCAgICBrZXktXHUwMDNlc3RhdGUgPT0gS0VZX0lTX1VOSU5TVEFOVElBVEVEKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBjdXN0b20gemVyb2l6ZSBzaW5jZSBmcmVlJ2luZyBpc24ndCBzYWZlIGF0IHRoaXMgcG9pbnQgKi9cbitcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG4rXHRcdFx0a2V5LVx1MDAzZXR5cGUtXHUwMDNlemVyb2l6ZShrZXkpO1xuK1x0fVxuK1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IGtleV9jcmFzaF96ZXJvaXplXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiAvKlxuICAqIEluaXRpYWxpc2UgdGhlIGtleSBtYW5hZ2VtZW50IHN0YXRlLlxuICAqL1xuQEAgLTEyOTAsNCArMTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXG4gXG4gXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2cm9vdF9rZXlfdXNlci5ub2RlLFxuIFx0XHRcdFx1MDAyNmtleV91c2VyX3RyZWUpO1xuK1xuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCxcbitcdFx0XHRcdTAwMjZrZXlfY3Jhc2hfemVyb2l6ZV9uYik7XG4rI2VuZGlmXG4gfVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmNcbmluZGV4IDA1MDlkOTk1NWYyYTYuLmYxNTlmYWVhZmUyM2EgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuKysrIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmNcbkBAIC0zMjUsMTEgKzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuIFx0a2ZyZWVfc2Vuc2l0aXZlKGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0cnVzdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KVxuK3tcbitcdHN0cnVjdCB0cnVzdGVkX2tleV9wYXlsb2FkICpwID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbitcbitcdGlmICghcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWVtemVyb19leHBsaWNpdChwLVx1MDAzZWtleSwgc2l6ZW9mKHAtXHUwMDNla2V5KSk7XG4rXHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNlYmxvYiwgc2l6ZW9mKHAtXHUwMDNlYmxvYikpO1xuK1x0cC1cdTAwM2VrZXlfbGVuID0gMDtcbitcdHAtXHUwMDNlYmxvYl9sZW4gPSAwO1xuK31cbitcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdHJ1c3RlZCA9IHtcbiBcdC5uYW1lID0gXCJ0cnVzdGVkXCIsXG4gXHQuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLFxuIFx0LnVwZGF0ZSA9IHRydXN0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXG4rXHQuemVyb2l6ZSA9IHRydXN0ZWRfemVyb2l6ZSxcbiBcdC5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsXG4gXHQucmVhZCA9IHRydXN0ZWRfcmVhZCxcbiB9O1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBpbnQgbG9nb25fdmV0X2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmRlc2MpO1xuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuIFxuIC8qXG4gICogdXNlciBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cbkBAIC0yOCw2ICsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuK1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWRcdFx0XHQ9IHVzZXJfcmVhZCxcbiB9O1xuQEAgLTQ4LDYgKzUwLDcgQEAgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2xvZ29uID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuK1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnZldF9kZXNjcmlwdGlvblx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXG4gfTtcbkBAIC0xNTIsNiArMTU1LDE0IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiBcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXG4re1xuK1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbitcbitcdGlmICh1cGF5bG9hZClcbitcdFx0bWVtemVyb19leHBsaWNpdCh1cGF5bG9hZC1cdTAwM2VkYXRhLCB1cGF5bG9hZC1cdTAwM2VkYXRhbGVuKTtcbit9XG4rXG4gLypcbiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXlcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ1OjU0LjQ3NTI3NDcyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg0NTkzNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFBhbmljIEhhbmRsZXI/IEEgUXVpY2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55dGhpbmcgbmV3IHdlIHNob3VsZCBiZSBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGlzIGBDT05GSUdfQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgd2hpY2ggYWRkcyBhIHplcm9pemUgY2FsbGJhY2sgdG8gYHN0cnVjdCBrZXlfdHlwZWAgYW5kIGltcGxlbWVudHMgaXQgZm9yIHNldmVyYWwga2V5IHR5cGVzLiBJdCBhbHNvIGhhbmRsZXMgdGhlIHplcm9pemF0aW9uIG9mIGBzZWNyZXRtZW1gIHBhZ2VzLlxuXG5CdXQgaG9sZCBvbi4uLiB0aGlzIGNvZGUsIGBfX2NyYXNoX2tleGVjYCwgb25seSBleGVjdXRlcyBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgaXMgdXN1YWxseSBub3QgdGhlIHRhcmdldCBvZiBmdXp6aW5nLiBGdXp6ZXJzIGFpbSBmb3IgcmVhY2hhYmxlIGNvZGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IgZXJyb3IgaGFuZGxpbmcuIENhbiBhIGZ1enplciAqdHJpZ2dlciogdGhpcyBjb2RlPyBXZWxsLCB5ZXMsIGJ5IGNhdXNpbmcgYSBwYW5pYy4gQnV0IHRoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGZ1enplciBpcyB0byBmaW5kIHBhbmljcywgbm90IHRvIGV4YW1pbmUgd2hhdCBoYXBwZW5zICphZnRlciogYSBwYW5pYy5cblxuSWYgdGhlIGZ1enplciBkb2VzIHRyaWdnZXIgYSBwYW5pYywgYW5kIGtkdW1wIGlzIGNvbmZpZ3VyZWQsIHRoZW4gYF9fY3Jhc2hfa2V4ZWNgIHdpbGwgcnVuLiBCdXQgaXMgaXQgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcgdGhlIHplcm9pemUgZnVuY3Rpb25zIHRoZW1zZWx2ZXM/IFRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBiaWdfa2V5X3plcm9pemVgLCBgZW5jcnlwdGVkX3plcm9pemVgLCBgdHJ1c3RlZF96ZXJvaXplYCwgYHVzZXJfemVyb2l6ZWAsIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGFuZCBga2V5X2NyYXNoX3plcm9pemVgLCB3aGljaCBhcmUgY2FsbGVkIGZyb20gYGNyYXNoX3plcm9pemUoKWAgY2FsbGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAuXG5cblNvLCBgX19jcmFzaF9rZXhlY2AgKmlzKiByZWFjaGFibGUg4oCTIG9uIHBhbmljLiBBcmUgdGhlc2UgemVyb2l6ZSBmdW5jdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBhcmUgYWN0dWFsbHkgcXVpdGUgc2ltcGxlLCBsaWtlIHRoaXMgYHVzZXJfemVyb2l6ZWAgZXhhbXBsZS4gQW5kIGluIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGl0IGNhbGxzIGBmcmVlX2ZvbGlvYC4gSXMgaXQgc2FmZSB0byBjYWxsIGBmcmVlX2ZvbGlvYCBkdXJpbmcgYSBwYW5pYz8gVGhlIGNvbW1lbnQgc2F5cyBcIm5vIG5lZWQgZm9yIGxvY2tzIGlmIHdlJ3JlIGJ1cm5pbmcgZG93biB0aGUgaG91c2UgOilcIi4gVGhpcyBtYWtlcyBtZSBuZXJ2b3VzIHRob3VnaC4gSWYgaXQgY3Jhc2hlcyBkdXJpbmcgYGZyZWVfZm9saW9gLCBjb3VsZCB3ZSBnZXQgYSBkb3VibGUgZmF1bHQsIG9yIHdvcnNlP1xuXG5JcyB0aGlzIHNvbWV0aGluZyBzeXprYWxsZXIgc2hvdWxkIGV2ZW4gYmUgbG9va2luZyBhdD8gU3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGZvY3VzIG9uIHBvc3QtcGFuaWMgY29kZSBiZWNhdXNlIGEgY3Jhc2ggdHlwaWNhbGx5IGVuZHMgdGhlIGZ1enppbmcgcnVuIGFuZCBpdCBkb2Vzbid0IGNvbnRpbnVlIG9uIHRvIGZpbmRpbmcgYnVncyBpbiB0aGUgcGFuaWMgaGFuZGxlciwgdW5sZXNzIGl0IGNhdXNlcyBhIHNlY29uZGFyeSBwYW5pYyB3aGljaCBjb3VsZCBjb3JydXB0IHRoZSBjcmFzaCBsb2cuIEFjdHVhbGx5LCB3YWl0ISBTeXprYWxsZXIgKmRvZXMqIHBhcnNlIGNyYXNoIGxvZ3MsIHNvIGEgY29ycnVwdGVkIGxvZyBkdWUgdG8gYSBwYW5pYyBoYW5kbGVyIGJ1ZyAqaXMqIGEgcmVsZXZhbnQgYnVnIHRvIGNhdGNoLlxuXG5CdXQsIGNhbiB0aGVzZSB6ZXJvaXplIGZ1bmN0aW9ucyBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlPyBObywgdGhleSBhcmUgcmVnaXN0ZXJlZCB0byBhIG5vdGlmaWVyIGxpc3QgdGhhdCBvbmx5IHRyaWdnZXJzIG9uIGNyYXNoIGZ1bmN0aW9ucy5cblxuV2FpdCwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGJ5IGBfX2NyYXNoX2tleGVjYCBhbmQgYGNyYXNoX3plcm9pemVgLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgYSByZWFsIHBhbmljPyBObywgYF9fY3Jhc2hfa2V4ZWNgIGlzIGNhbGxlZCBmcm9tIGBwYW5pYygpYCwgYGNyYXNoX2tleGVjKClgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4gV2UgbmVlZCBhIHBhbmljIHRvIHJlYWNoIGl0LCB3aGljaCBpcyB0aGUgKmVuZCogb2YgYSBmdXp6aW5nIHJ1bi4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYWxyZWFkeSBkZWFkLCBzbyBhIGZ1enplciBjYW4ndCBtZWFuaW5nZnVsbHkgZXhwbG9yZSBpdC4gV2FpdCwgeW91ICpjYW4qIHRyaWdnZXIgYGNyYXNoX2tleGVjYCB2aWEgYHN5c3JxLWNgIOKAkyB3aGljaCBjYXVzZXMgYSBwYW5pYy4gQnV0IHRoYXQncyBzdGlsbCBhIHBhbmljLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVyZSdzIGEgY2hhbmdlIGluIHRoZSBga2V5X3R5cGVgIHN0cnVjdCBzaXplIGFuZCBub3RpZmllciByZWdpc3RyYXRpb24uXG5cbk9rYXksIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGd1aWRlbGluZXMgc2F5IHRvIHNraXAgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgYW5kIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiLiBJdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBcInBvc3QtcGFuaWMgY29kZSxcIiBidXQgZnV6emluZyBwb3N0LXBhbmljIGNvZGUgaXMgZ2VuZXJhbGx5IGluZWZmZWN0aXZlIGJlY2F1c2UgdGhlIGZ1enplciBzdG9wcyBhdCB0aGUgZmlyc3QgcGFuaWMuIEhvbGQgb24sIHdoYXQgYWJvdXQgZHVyaW5nIGEgbm9ybWFsIGtleGVjPyBObywgYGNyYXNoX3plcm9pemVgIGlzIGNhbGxlZCBmcm9tIGBfX2NyYXNoX2tleGVjYCwgbm90IGBrZXJuZWxfa2V4ZWNgLiBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayBgX19jcmFzaF9rZXhlY2AuXG5cbkknbSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoxMi40NTk4NzMwNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjY2Mzc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NyYXNoX2tleGVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jPTEyNz1zdGF0aWMgdm9pZCBfX25vcmV0dXJuIGh2X2NyYXNoX2hhbmRsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmMtMTMyLVxcdC8qIHdlIGFyZSBub3cgZnVsbHkgaW4gZGV2aXJ0dWFsaXplZCBub3JtYWwga2VybmVsIG1vZGUgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzoxMzM6XFx0X19jcmFzaF9rZXhlYyhOVUxMKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0xMzQtXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYz0zMzI9c3RhdGljIGludCBodl9jcmFzaF9ubWlfbG9jYWwodW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0zNjEtICpcXHRCU1AgOiBOTUkgY2FsbGJhY2sgLVxcdTAwM2UgRGlzYWJsZUh2IC1cXHUwMDNlIGh2X2NyYXNoX2FzbTMyIC1cXHUwMDNlIGh2X2NyYXNoX2NfZW50cnlcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzozNjI6ICpcXHRcXHQgIC1cXHUwMDNlIF9fY3Jhc2hfa2V4ZWMgLVxcdTAwM2UgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd25cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0zNjMtICpcXHRcXHQgIC1cXHUwMDNlIGNyYXNoX3NtcF9zZW5kX3N0b3AgLVxcdTAwM2Ugc21wX29wcy5jcmFzaF9zdG9wX290aGVyX2NwdXNcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oPTcyPXN0cnVjdCBrZXhlY19zZWdtZW50O1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODAtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmg6ODE6ZXh0ZXJuIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODItZXh0ZXJuIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmg9OTc9c3RydWN0IGtpbWFnZTtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtOTktc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWMuaD01Mzg9c3RydWN0IGtpbWFnZTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjLmg6NTM5OnN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjLmgtNTQwLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuLS1cXG5rZXJuZWwvY3Jhc2hfY29yZS5jPTEzMT1zdGF0aWMgdm9pZCBjcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEodm9pZClcXG4tLVxcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQzLSAqL1xcbmtlcm5lbC9jcmFzaF9jb3JlLmM6MTQ0OnZvaWQgX19ub2Nsb25lIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNDUte1xcbi0tXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNjctfVxcbmtlcm5lbC9jcmFzaF9jb3JlLmM6MTY4OlNUQUNLX0ZSQU1FX05PTl9TVEFOREFSRChfX2NyYXNoX2tleGVjKTtcXG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2OS1cXG5rZXJuZWwvY3Jhc2hfY29yZS5jPTE3MD1fX2JwZl9rZnVuYyB2b2lkIGNyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNzMtXFx0XFx0LyogVGhpcyBpcyB0aGUgMXN0IENQVSB3aGljaCBjb21lcyBoZXJlLCBzbyBnbyBhaGVhZC4gKi9cXG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE3NDpcXHRcXHRfX2NyYXNoX2tleGVjKHJlZ3MpO1xcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTc1LVxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9MTU9aW50IGtpbWFnZV9pc19kZXN0aW5hdGlvbl9yYW5nZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcXG4tLVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTE5LSAqIFdoYXRldmVyIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIHRoZSBrZXhlY19jcmFzaF9pbWFnZSBuZWVkcyB0byBiZVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjIwOiAqIE5NSSBzYWZlLCBhcyBfX2NyYXNoX2tleGVjKCkgY2FuIGhhcHBlbiBkdXJpbmcgbm1pX3BhbmljKCksIHNvIGhlcmUgd2UgdXNlIGFcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC0yMS0gKiBcXFwic2ltcGxlXFxcIiBhdG9taWMgdmFyaWFibGUgdGhhdCBpcyBhY3F1aXJlZCB3aXRoIGEgY21weGNoZygpLlxcbi0tXFxua2VybmVsL3BhbmljLmM9NTc3PXZvaWQgdnBhbmljKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKVxcbi0tXFxua2VybmVsL3BhbmljLmMtNjY3LVxcdCAqXFxua2VybmVsL3BhbmljLmM6NjY4OlxcdCAqIEJ5cGFzcyB0aGUgcGFuaWNfY3B1IGNoZWNrIGFuZCBjYWxsIF9fY3Jhc2hfa2V4ZWMgZGlyZWN0bHkuXFxua2VybmVsL3BhbmljLmMtNjY5LVxcdCAqL1xcbmtlcm5lbC9wYW5pYy5jLTY3MC1cXHRpZiAoIV9jcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycylcXG5rZXJuZWwvcGFuaWMuYzo2NzE6XFx0XFx0X19jcmFzaF9rZXhlYyhOVUxMKTtcXG5rZXJuZWwvcGFuaWMuYy02NzItXFxuLS1cXG5rZXJuZWwvcGFuaWMuYy02OTMtXFx0ICpcXG5rZXJuZWwvcGFuaWMuYzo2OTQ6XFx0ICogQnlwYXNzIHRoZSBwYW5pY19jcHUgY2hlY2sgYW5kIGNhbGwgX19jcmFzaF9rZXhlYyBkaXJlY3RseS5cXG5rZXJuZWwvcGFuaWMuYy02OTUtXFx0ICovXFxua2VybmVsL3BhbmljLmMtNjk2LVxcdGlmIChfY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMpXFxua2VybmVsL3BhbmljLmM6Njk3OlxcdFxcdF9fY3Jhc2hfa2V4ZWMoTlVMTCk7XFxua2VybmVsL3BhbmljLmMtNjk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoxNC44MzI1NDI0MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA4MDc5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFplcm9pemUgRnVuY3Rpb24gYW5kIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBgX19jcmFzaF9rZXhlY2AgaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGEga2VybmVsIHBhbmljIG9yIGEgY3Jhc2guIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gaXMsIGZ1enppbmcgdGhpcyBkaXJlY3RseSBpcyBjb21wbGV0ZWx5IGltcHJhY3RpY2FsLiBBIGZ1enplcidzIHdob2xlIHB1cnBvc2UgaXMgdG8gZmluZCBwYW5pY3Mg4oCTIHRoZSBtb21lbnQgaXQgKmRvZXMqIGZpbmQgb25lLCBpdCdzIGRvbmUgaXRzIGpvYiBhbmQgcmVib290cyB0aGUgdmlydHVhbCBtYWNoaW5lIHRvIGNvbGxlY3QgdGhlIGNyYXNoIGxvZy4gSXQncyBub3QgZGVzaWduZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0J3MgZXhlY3V0ZWQgKmFmdGVyKiB0aGUgcGFuaWMsIGJlY2F1c2UgdGhlIHBhbmljIGl0c2VsZiBzaWduYWxzIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnV6emluZyBydW4uXG5cbldhaXQgYSBzZWNvbmTigKYgY291bGQgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBwb3RlbnRpYWxseSB0cmlnZ2VyIGBjcmFzaF9rZXhlY2A/IExldCdzIHNlZeKApiBBaCwgeWVzLCB0aGVyZSBpdCBpczogYF9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpYC4gSW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGV2ZW4gaWYgQlBGICpjb3VsZCogY2FsbCBgY3Jhc2hfa2V4ZWNgLCB0aGUgb3V0Y29tZSBpcyBwcmVkaWN0YWJsZS4gSXQgd291bGQgZWl0aGVyIGNyYXNoIHRoZSBzeXN0ZW0gb3V0cmlnaHQgKGlmIGtkdW1wIGlzIGxvYWRlZCksIG9yIGl0IHdvdWxkIGRvIG5vdGhpbmcgKGlmIGtkdW1wIGlzbid0IGxvYWRlZCkuIEVpdGhlciB3YXksIGl0IGVuZHMgdGhlIGZ1enppbmcgcnVuIGltbWVkaWF0ZWx5LCBiZWNhdXNlIGEgY3Jhc2ggaXMganVzdCBjb25zaWRlcmVkIGEgYnVnIGFuZCBpcyBpbW1lZGlhdGVseSByZXBvcnRlZC5cblxuU28sIHJlYWxpc3RpY2FsbHksIGEgZnV6emVyIHdvbid0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZXhwbG9yZSB0aGUgYHplcm9pemVgIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgYnVncyB3aXRoaW4gdGhlbSwgYmVjYXVzZSBhbnkgZXhlY3V0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gYSBzeXN0ZW0gY3Jhc2guIFRoZSBmdXp6aW5nIHByb2Nlc3MgdGVybWluYXRlcyBiZWZvcmUgaXQgY2FuIGV4cGxvcmUgdGhlIHBvc3QtY3Jhc2ggYmVoYXZpb3VyLlxuXG5Ob3csIGhvbGQgb24uLi4gSXMgdGhlcmUgKmFueSogb3RoZXIgcGF0aCB0byB0cmlnZ2VyIHRoZSBgemVyb2l6ZWAgZnVuY3Rpb24/IExldCdzIGNoZWNrLi4uIE9rYXksIGBrZXktXHUwMDNldHlwZS1cdTAwM2V6ZXJvaXplKGtleSlgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtleV9jcmFzaF96ZXJvaXplYCwgd2hpY2ggaXMsIGluIHR1cm4sIHJlZ2lzdGVyZWQgdG8gdGhlIGBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3RgLiBBbmQgYGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdGAgaXMgb25seSBjYWxsZWQgZnJvbSBgY3Jhc2hfemVyb2l6ZSgpYC4gRmluYWxseSwgYGNyYXNoX3plcm9pemUoKWAgaXMgb25seSBjYWxsZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYC5cblxuR290IGl0LiBTbyB0aGlzIGVudGlyZSBmZWF0dXJlIGlzIHN0cmljdGx5IHBvc3QtcGFuaWMuIEl0J3MgZGVzaWduZWQgdG8gcnVuICphZnRlciogYSBjcmFzaCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjb25maXJtcyB0aGF0IGEgZnV6emVyIGlzIG5vdCBhIHVzZWZ1bCB0b29sIGhlcmUuIEEgZnV6emVyIGNvbnNpZGVycyBhIHBhbmljIHRvIGJlIGFuIGVycm9yIGFuZCBpbW1lZGlhdGVseSBoYWx0cyB0aGUgZXhlY3V0aW9uLiBJdCdzIG5vdCBkZXNpZ25lZCB0byB0cnkgdG8gbWF4aW1pemUgY29kZSBjb3ZlcmFnZSAqYWZ0ZXIqIGEgY3Jhc2ggaGFzIGhhcHBlbmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGFydGljdWxhciBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIGFtZW5hYmxlIHRvIGZ1enppbmcuIEl0J3MgcHVyZWx5IHJlbGF0ZWQgdG8gcG9zdC1wYW5pYyBjbGVhbnVwIGFuZCBpcyBpbmhlcmVudGx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5NiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoyMy45NDA2MjU4NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzU2Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZXplcm9pemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkva2V5cy9rZXkuYz0xMjc2PXN0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTEyOTctXFx0XFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSdpbmcgaXNuJ3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovXFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMjk4OlxcdFxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXplcm9pemUpXFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMjk5OlxcdFxcdFxcdGtleS1cXHUwMDNldHlwZS1cXHUwMDNlemVyb2l6ZShrZXkpO1xcbnNlY3VyaXR5L2tleXMva2V5LmMtMTMwMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ2OjI2LjI4NDE5NDQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDMxNzAyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IENyYXNoIFplcm9pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBjb25jZXJuZWQgd2l0aCB6ZXJvaXppbmcgc2VjcmV0cywgc3BlY2lmaWNhbGx5IGtleXMgYW5kIG1lbW9yeSwgdXBvbiBhIGtlcm5lbCBwYW5pYy4gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGtleV9jcmFzaF96ZXJvaXplYCwgYW5kIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAgaXMgYWxzbyByZWdpc3RlcmVkLCBzbyB0aGF0J3MgdGhlIGV4dGVudCBvZiB0aGUgaW5pdGlhbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkganVzdCBhIGJ1bmNoIG9mIGB6ZXJvaXplYCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhpczogKnRoaXMgY29kZSBpcyBvbmx5IGV2ZXIgcmVhY2hhYmxlIGFmdGVyIGEgcGFuaWMgb2NjdXJzLiogRnV6emVycywgYnkgZGVmaW5pdGlvbiwgdHJlYXQgcGFuaWNzIGFzIHRlcm1pbmFsIGV2ZW50cy4gVGhleSBoYWx0IGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB0byBjYXB0dXJlIHRoZSBjcmFzaCBzdGF0ZSBhbmQgZ2VuZXJhdGUgbG9ncy4gVGhleSBhcmVuJ3QgZGVzaWduZWQgdG8gY29udGludWUgZXhwbG9yaW5nIGNvZGUgcGF0aHMgKmFmdGVyKiBhIGNyYXNoLiBUcnlpbmcgdG8gZnV6eiBwb3N0LXBhbmljIGNvZGUgaXMgZ29pbmcgdG8gYmUgcG9pbnRsZXNzLiBUaGVyZSdzIHNpbXBseSBubyBmdW5jdGlvbmFsIGltcGFjdCBoZXJlIHRoYXQgYSBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSBleGVyY2lzZS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaGAsIGBpbmNsdWRlL2xpbnV4L2tleS10eXBlLmhgLCBga2VybmVsL0tjb25maWcua2V4ZWNgLCBga2VybmVsL2NyYXNoX2NvcmUuY2AsIGBtbS9zZWNyZXRtZW0uY2AsIGFuZCB0aGUgc2VjdXJpdHkga2V5IGZpbGVzLiBUaGV5IGFsbCBzZWVtIHRvIGJlIHRpZ2h0bHkgY291cGxlZCB0byB0aGlzIHBhbmljIHplcm9pemF0aW9uIGZ1bmN0aW9uYWxpdHksIHRoZSBgQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgdGhhdCBpcyBjYWxsZWQgZHVyaW5nIHBhbmljIGFuZCBub3QgZWFybGllci5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGVyZSdzIG5vIHZhbHVlIGluIHRyeWluZyB0byBmdXp6IHRoZXNlIGNoYW5nZXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTIzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjozNy43MTU5MDA5MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gemVyb2l6ZSBzZWNyZXRzIChrZXlzIGFuZCBzZWNyZXRtZW0pIGR1cmluZyBhIGtlcm5lbCBjcmFzaCBvciBwYW5pYy4gVGhpcyBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYCBhZnRlciBhIHBhbmljIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBGdXp6ZXJzIHRyZWF0IHBhbmljcyBhcyBidWdzIGFuZCBoYWx0IGV4ZWN1dGlvbiB0byBjb2xsZWN0IGNyYXNoIGxvZ3MsIG1lYW5pbmcgdGhleSBjYW5ub3QgZWZmZWN0aXZlbHkgZXhwbG9yZSBvciBmaW5kIGJ1Z3MgaW4gcG9zdC1wYW5pYyBjb2RlIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgZG8gbm90IGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjozNy43MTU5NDY1MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvxfbg[0].run-triage(0) Phase: Succeeded StartedAt: 2026-08-07 12:29:28 +0000 UTC FinishedAt: 2026-08-07 12:46:39 +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+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ1PC90ZD4KCQkJPHRkPmZsb3c8L3RkPgoJCQk8dGQ+cGF0Y2gtdHJpYWdlPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPkFyZ3M6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7S01TQU5SZWFzb25pbmcmIzM0OzogJiMzNDsmIzM0OywKICAmIzM0O05lZWRzS01TQU4mIzM0OzogZmFsc2UsCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjEvMTwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ1PC90ZD4KCQkJPHRkPmFjdGlvbjwvdGQ+CgkJCTx0ZD5yZWFkLXBhdGNoLWRpZmY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtQYXRjaERpZmYmIzM0OzogJiMzNDtjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzM1xuQXV0aG9yOiBzeXotY2x1c3RlciBcdTAwM2N0cmlhZ2VAc3l6a2FsbGVyLmNvbVx1MDAzZVxuRGF0ZTogICBGcmkgQXVnIDcgMTI6NDU6NTIgMjAyNiAmIzQzOzAwMDBcblxuICAgIHN5ei1jbHVzdGVyOiBhcHBsaWVkIHBhdGNoIHVuZGVyIHJldmlld1xuXG5kaWZmIC0tZ2l0IGEvZHJpdmVycy9vZi9rZXhlYy5jIGIvZHJpdmVycy9vZi9rZXhlYy5jXG5pbmRleCAwMjk5MDNiOTg2Y2JkLi4zNjYzNWY2Y2I5MDA5IDEwMDY0NFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXG4mIzQzOyYjNDM7JiM0MzsgYi9kcml2ZXJzL29mL2tleGVjLmNcbkBAIC0yNCw3ICYjNDM7MjQsNyBAQFxuIFxuIC8qXG4gICogQWRkaXRpb25hbCBzcGFjZSBuZWVkZWQgZm9yIHRoZSBGRFQgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGFkZCBpbml0cmQsXG4tICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci5cbiYjNDM7ICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2FibGUtbWVtb3J5LXJhbmdlIGFuZCBlbGZjb3JlaGRyLlxuICAqL1xuICNkZWZpbmUgRkRUX0VYVFJBX1NQQUNFIDB4MTAwMFxuIFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcbmluZGV4IGJjMDg3MTI0Y2Q3OGUuLjVjNzIwN2MwYmJhMTQgMTAwNjQ0XG4tLS0gYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcbkBAIC01LDYgJiM0Mzs1LDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9saW5rYWdlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGZjb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lbGYuaFx1MDAzZVxuJiM0MzsjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gc3RydWN0IGtpbWFnZTtcbiBcbkBAIC0zNCw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfcHJvdGVjdF9jcmFzaGtyZXModm9pZCkgeyB9XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfdW5wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cbiAjZW5kaWZcbiBcbiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4mIzQzO2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0O1xuJiM0MzsjZW5kaWZcbiYjNDM7XG4gI2lmbmRlZiBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50XG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZykgeyB9XG4gI2VuZGlmXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG5pbmRleCBiYjk3YmQzZTVhZjRmLi5mZjA5NDRjZTM2OGY5IDEwMDY0NFxuLS0tIGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG4mIzQzOyYjNDM7JiM0MzsgYi9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcbkBAIC0xMjIsNiAmIzQzOzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xuIFx0LyogY2xlYXIgdGhlIGRhdGEgZnJvbSBhIGtleSAob3B0aW9uYWwpICovXG4gXHR2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTtcbiBcbiYjNDM7XHQvKiBzY3J1YiB0aGUga2V5IG1hdGVyaWFsIHdpdGhvdXQgZnJlZSYjMzk7aW5nIChvcHRpb25hbClcbiYjNDM7XHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxuJiM0MztcdCAqICAgY3Jhc2ggZHVtcHNcbiYjNDM7XHQgKiAtIGNhbGxlZCBmcm9tIHRoZSBwYW5pYyBwYXRoIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZCBwcmVlbXB0aW9uXG4mIzQzO1x0ICogICBkaXNhYmxlZFxuJiM0MztcdCAqIC0gbXVzdCBub3Qgc2xlZXAsIGFsbG9jYXRlLCBmcmVlIG9yIHRha2UgbG9ja3NcbiYjNDM7XHQgKi9cbiYjNDM7XHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcbiYjNDM7XG4gXHQvKiBkZXNjcmliZSBhIGtleSAqL1xuIFx0dm9pZCAoKmRlc2NyaWJlKShjb25zdCBzdHJ1Y3Qga2V5ICprZXksIHN0cnVjdCBzZXFfZmlsZSAqcCk7XG4gXG5kaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcua2V4ZWMgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xuaW5kZXggMTU2MzIzNThiY2Y3MS4uOTJhYjBhNjljOGVjNiAxMDA2NDRcbi0tLSBhL2tlcm5lbC9LY29uZmlnLmtleGVjXG4mIzQzOyYjNDM7JiM0MzsgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xuQEAgLTE3OSw0ICYjNDM7MTc5LDEyIEBAIGNvbmZpZyBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU1xuIFx0ICB0aGUgY29tcHV0YXRpb24gYmVoaW5kIHRoZSB2YWx1ZSBwcm92aWRlZCB0aHJvdWdoIHRoZVxuIFx0ICAvc3lzL2tlcm5lbC9jcmFzaF9lbGZjb3JlaGRyX3NpemUgYXR0cmlidXRlLlxuIFxuJiM0Mztjb25maWcgQ1JBU0hfWkVST0laRVxuJiM0MztcdGJvb2wgXCYjMzQ7WmVyb2l6ZSBzZWNyZXRzIG9uIHBhbmljXCYjMzQ7XG4mIzQzO1x0ZGVwZW5kcyBvbiBDUkFTSF9EVU1QXG4mIzQzO1x0aGVscFxuJiM0MztcdCAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLlxuJiM0MztcbiYjNDM7XHQgIElmIHVuc3VyZSwgc2F5IE4uXG4mIzQzO1xuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0yMyw2ICYjNDM7MjMsNyBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L29ianRvb2wuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2RlbGF5LmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYW5pYy5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L3RpbWVrZWVwaW5nLmhcdTAwM2VcbiBcbiAjaW5jbHVkZSBcdTAwM2Nhc20vcGFnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3NlY3Rpb25zLmhcdTAwM2VcbkBAIC0zMyw2ICYjNDM7MzQsMjIgQEBcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xuIG5vdGVfYnVmX3QgX19wZXJjcHUgKmNyYXNoX25vdGVzO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcbiYjNDM7QVRPTUlDX05PVElGSUVSX0hFQUQoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbiYjNDM7XG4mIzQzO3N0YXRpYyB2b2lkIGNyYXNoX3plcm9pemUodm9pZClcbiYjNDM7e1xuJiM0MztcdGt0aW1lX3QgemVyb2l6ZV9zdGFydCA9IGt0aW1lX2dldCgpO1xuJiM0MztcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O1dpcGluZyBzZW5zaXRpdmUgc2VjcmV0cy4uLlxcblwmIzM0Oyk7XG4mIzQzO1x0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCAwLCBOVUxMKTtcbiYjNDM7XHRwcl9pbmZvKFwmIzM0O0RvbmUgaW4gJWxsZCB1c1xcblwmIzM0Oywga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcbiYjNDM7fVxuJiM0MzsjZWxzZVxuJiM0MztzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXG4mIzQzO1xuIC8qIHRpbWUgdG8gd2FpdCBmb3IgcG9zc2libGUgRE1BIHRvIGZpbmlzaCBiZWZvcmUgc3RhcnRpbmcgdGhlIGtkdW1wIGtlcm5lbFxuICAqIHdoZW4gYSBDTUEgcmVzZXJ2YXRpb24gaXMgdXNlZFxuICAqL1xuQEAgLTE0Miw2ICYjNDM7MTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuIFx0XHRcdGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSgpO1xuJiM0MztcdFx0XHRjcmFzaF96ZXJvaXplKCk7XG4gXHRcdFx0bWFjaGluZV9rZXhlYyhrZXhlY19jcmFzaF9pbWFnZSk7XG4gXHRcdH1cbiBcdFx0a2V4ZWNfdW5sb2NrKCk7XG5kaWZmIC0tZ2l0IGEvbW0vc2VjcmV0bWVtLmMgYi9tbS9zZWNyZXRtZW0uY1xuaW5kZXggZDI5ODY1MDc1YjZlYS4uNTNmNjI5ZDY2MzNjMSAxMDA2NDRcbi0tLSBhL21tL3NlY3JldG1lbS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9tbS9zZWNyZXRtZW0uY1xuQEAgLTEzLDkgJiM0MzsxMywxMSBAQFxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2JpdG9wcy5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcHJpbnRrLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wYWdlbWFwLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3JldG1lbS5oXHUwMDNlXG4mIzQzOyNpbmNsdWRlIFx1MDAzY2xpbnV4L2NyYXNoX2NvcmUuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXHUwMDNlXG4gXG5AQCAtMTg3LDYgJiM0MzsxODksNTAgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBpbm9kZV9vcGVyYXRpb25zIHNlY3JldG1lbV9pb3BzID0ge1xuIFxuIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNlY3JldG1lbV9tbnQ7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuJiM0MzsvKiBDYWxsZWQgZmFyIGludG8gdnBhbmljIGZyb20gY3Jhc2hfY29yZS5jIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZFxuJiM0MzsgKiBwcmVlbXB0aW9uIGRpc2FibGVkXG4mIzQzOyAqL1xuJiM0MztzdGF0aWMgaW50IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmdcbiYjNDM7XHRcdGFjdGlvbiwgdm9pZCAqZGF0YSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBzdXBlcl9ibG9jayAqc2I7XG4mIzQzO1x0c3RydWN0IGlub2RlICppbm9kZTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFzZWNyZXRtZW1fbW50KVxuJiM0MztcdFx0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0MztcdHNiID0gc2VjcmV0bWVtX21udC1cdTAwM2VtbnRfc2I7XG4mIzQzO1xuJiM0MztcdC8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJiMzOTtlZCwgaXQgbWlnaHQgYmVcbiYjNDM7XHQgKiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCB3b3VsZCBiZSB1bnNhZmUgdG8gaXRlcmF0ZS4gSWYgd2UgY2FuJiMzOTt0XG4mIzQzO1x0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0JiMzOTtzIGFsbCB3ZSBjYW4gZG8gaGVyZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcbiYjNDM7XHRcdHByX2NyaXQoXCYjMzQ7Y3Jhc2hfemVyb2l6ZTogY2FuJiMzOTt0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cXG5cJiMzNDtcbiYjNDM7XHRcdFx0IFwmIzM0O2NyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGxpc3RfZm9yX2VhY2hfZW50cnkoaW5vZGUsIFx1MDAyNnNiLVx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcbiYjNDM7XHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWlfcGFnZXMsIDApO1xuJiM0MztcdFx0c3RydWN0IGZvbGlvICpmb2xpbztcbiYjNDM7XG4mIzQzO1x0XHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSYjMzk7cmUgYnVybmluZyBkb3duIHRoZSBob3VzZSA6KSAqL1xuJiM0MztcdFx0eGFzX2Zvcl9lYWNoKFx1MDAyNnhhcywgZm9saW8sIFVMT05HX01BWCkge1xuJiM0MztcdFx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcbiYjNDM7XHRcdFx0XHRjb250aW51ZTtcbiYjNDM7XHRcdFx0aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWFfb3BzLVx1MDAzZWZyZWVfZm9saW8oZm9saW8pO1xuJiM0MztcdFx0fVxuJiM0MztcdH1cbiYjNDM7XHQvKiBvZmYgdG8ga2V4ZWMoKSEgKi9cbiYjNDM7XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4mIzQzO31cbiYjNDM7XG4mIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XG4mIzQzO1x0Lm5vdGlmaWVyX2NhbGwgPSBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZVxuJiM0Mzt9O1xuJiM0MzsjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbiYjNDM7XG4gc3RhdGljIHN0cnVjdCBmaWxlICpzZWNyZXRtZW1fZmlsZV9jcmVhdGUodW5zaWduZWQgbG9uZyBmbGFncylcbiB7XG4gXHRzdHJ1Y3QgZmlsZSAqZmlsZTtcbkBAIC0yNjMsNiAmIzQzOzMwOSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBzZWNyZXRtZW1faW5pdCh2b2lkKVxuIFx0aWYgKElTX0VSUihzZWNyZXRtZW1fbW50KSlcbiBcdFx0cmV0dXJuIFBUUl9FUlIoc2VjcmV0bWVtX21udCk7XG4gXG4mIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuJiM0MztcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcdTAwMjZjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QsIFx1MDAyNnNlY3JldG1lbV96ZXJvaXplX25iKTtcbiYjNDM7I2VuZGlmXG4mIzQzO1xuIFx0cmV0dXJuIDA7XG4gfVxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5pbmRleCAyNjhmNzAyZGYzODBlLi5hZDg1MzdkZGE3MGZhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5AQCAtMzUsNiAmIzQzOzM1LDggQEAgc3RydWN0IGJpZ19rZXlfcGF5bG9hZCB7XG4gICovXG4gI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSAmIzQzOyBzaXplb2Yoc3RydWN0IGRlbnRyeSkpXG4gXG4mIzQzO3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuJiM0MztcbiAvKlxuICAqIGJpZ19rZXkgZGVmaW5lZCBrZXlzIHRha2UgYW4gYXJiaXRyYXJ5IHN0cmluZyBhcyB0aGUgZGVzY3JpcHRpb24gYW5kIGFuXG4gICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZFxuQEAgLTQ2LDYgJiM0Mzs0OCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9iaWdfa2V5ID0ge1xuIFx0Lmluc3RhbnRpYXRlXHRcdD0gZ2VuZXJpY19rZXlfaW5zdGFudGlhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSBiaWdfa2V5X3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gYmlnX2tleV9kZXN0cm95LFxuJiM0MztcdC56ZXJvaXplXHRcdD0gYmlnX2tleV96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gYmlnX2tleV9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSBiaWdfa2V5X3JlYWQsXG4gXHQudXBkYXRlXHRcdFx0PSBiaWdfa2V5X3VwZGF0ZSxcbkBAIC0yNzksNiAmIzQzOzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcbiBcdHJldHVybiByZXQ7XG4gfVxuIFxuJiM0MztzdGF0aWMgdm9pZCBiaWdfa2V5X3plcm9pemUoc3RydWN0IGtleSAqa2V5KVxuJiM0Mzt7XG4mIzQzO1x0c3RydWN0IGJpZ19rZXlfcGF5bG9hZCAqcGF5bG9hZCA9IHRvX2JpZ19rZXlfcGF5bG9hZChrZXktXHUwMDNlcGF5bG9hZCk7XG4mIzQzO1xuJiM0MztcdGlmIChwYXlsb2FkLVx1MDAzZWRhdGEpIHtcbiYjNDM7XHRcdGlmIChwYXlsb2FkLVx1MDAzZWxlbmd0aCBcdTAwM2UgQklHX0tFWV9GSUxFX1RIUkVTSE9MRClcbiYjNDM7XHRcdFx0bWVtemVyb19leHBsaWNpdChwYXlsb2FkLVx1MDAzZWRhdGEsIENIQUNIQTIwUE9MWTEzMDVfS0VZX1NJWkUpO1xuJiM0MztcdFx0ZWxzZVxuJiM0MztcdFx0XHRtZW16ZXJvX2V4cGxpY2l0KHBheWxvYWQtXHUwMDNlZGF0YSwgcGF5bG9hZC1cdTAwM2VsZW5ndGgpO1xuJiM0MztcdH1cbiYjNDM7fVxuJiM0MztcbiAvKlxuICAqIFJlZ2lzdGVyIGtleSB0eXBlXG4gICovXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbmluZGV4IDU5Y2I3N2IyMzdiMzYuLjlmNTZmYTliNGFhZjQgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXG5AQCAtOTcwLDExICYjNDM7OTcwLDIzIEBAIHN0YXRpYyB2b2lkIGVuY3J5cHRlZF9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiBcdGtmcmVlX3NlbnNpdGl2ZShrZXktXHUwMDNlcGF5bG9hZC5kYXRhWzBdKTtcbiB9XG4gXG4mIzQzO3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCBlbmNyeXB0ZWRfa2V5X3BheWxvYWQgKmVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFlcGF5bG9hZClcbiYjNDM7XHRcdHJldHVybjtcbiYjNDM7XG4mIzQzO1x0bWVtemVyb19leHBsaWNpdChlcGF5bG9hZC1cdTAwM2VwYXlsb2FkX2RhdGEsXG4mIzQzO1x0XHRcdCBlcGF5bG9hZC1cdTAwM2VwYXlsb2FkX2RhdGFsZW4gJiM0MzsgZXBheWxvYWQtXHUwMDNlZGF0YWJsb2JfbGVuKTtcbiYjNDM7fVxuJiM0MztcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZW5jcnlwdGVkID0ge1xuIFx0Lm5hbWUgPSBcJiMzNDtlbmNyeXB0ZWRcJiMzNDssXG4gXHQuaW5zdGFudGlhdGUgPSBlbmNyeXB0ZWRfaW5zdGFudGlhdGUsXG4gXHQudXBkYXRlID0gZW5jcnlwdGVkX3VwZGF0ZSxcbiBcdC5kZXN0cm95ID0gZW5jcnlwdGVkX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemUgPSBlbmNyeXB0ZWRfemVyb2l6ZSxcbiBcdC5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsXG4gXHQucmVhZCA9IGVuY3J5cHRlZF9yZWFkLFxuIH07XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9rZXkuYyBiL3NlY3VyaXR5L2tleXMva2V5LmNcbmluZGV4IGIzNGE2NGQ4MWQ0N2EuLjU2NzNkY2M4YzVkMjMgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL2tleS5jXG5AQCAtMTIsNiAmIzQzOzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbiYjNDM7I2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcmFuZG9tLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9lcnIuaFx1MDAzZVxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbkBAIC0xMjY4LDYgJiM0MzsxMjY5LDQ0IEBAIHZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlKVxuIH1cbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpO1xuIFxuJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcbiYjNDM7LyogQ2FsbGVkIGZhciBpbnRvIHZwYW5pYyBmcm9tIGNyYXNoX2NvcmUuYyB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmRcbiYjNDM7ICogcHJlZW1wdGlvbiBkaXNhYmxlZFxuJiM0MzsgKi9cbiYjNDM7c3RhdGljIGludCBrZXlfY3Jhc2hfemVyb2l6ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbiYjNDM7XHRcdHZvaWQgKmRhdGEpXG4mIzQzO3tcbiYjNDM7XHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbiYjNDM7XG4mIzQzO1x0LyogSWYgd2UgY2FuJiMzOTt0IGFjcXVpcmUgdGhlIGxvY2ssIHRoZSByYnRyZWUgbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50XG4mIzQzO1x0ICogc3RhdGUuIFRoYXQmIzM5O3MgYWxsIHdlIGNhbiBkbyB0aGVuLCBhcyB0aGVyZSYjMzk7cyBubyBwb2ludCB0byB3YWl0aW5nXG4mIzQzO1x0ICogYXQgdGhpcyBzdGFnZS5cbiYjNDM7XHQgKi9cbiYjNDM7XHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZrZXlfc2VyaWFsX2xvY2spKSB7XG4mIzQzO1x0XHRwcl9jcml0KFwmIzM0O2NyYXNoX3plcm9pemU6IGNhbiYjMzk7dCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxuXCYjMzQ7KTtcbiYjNDM7XHRcdHJldHVybiBOT1RJRllfRE9ORTtcbiYjNDM7XHR9XG4mIzQzO1xuJiM0MztcdGZvciAobm9kZSA9IHJiX2ZpcnN0KFx1MDAyNmtleV9zZXJpYWxfdHJlZSk7IG5vZGU7IG5vZGUgPSByYl9uZXh0KG5vZGUpKSB7XG4mIzQzO1x0XHRzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7XG4mIzQzO1xuJiM0MztcdFx0aWYgKGtleS1cdTAwM2V0eXBlID09IFx1MDAyNmtleV90eXBlX2tleXJpbmcgfHxcbiYjNDM7XHRcdCAgICBrZXktXHUwMDNlc3RhdGUgPT0gS0VZX0lTX1VOSU5TVEFOVElBVEVEKVxuJiM0MztcdFx0XHRjb250aW51ZTtcbiYjNDM7XG4mIzQzO1x0XHQvKiBjdXN0b20gemVyb2l6ZSBzaW5jZSBmcmVlJiMzOTtpbmcgaXNuJiMzOTt0IHNhZmUgYXQgdGhpcyBwb2ludCAqL1xuJiM0MztcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG4mIzQzO1x0XHRcdGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUoa2V5KTtcbiYjNDM7XHR9XG4mIzQzO1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4mIzQzO1x0cmV0dXJuIE5PVElGWV9ET05FO1xuJiM0Mzt9XG4mIzQzO1xuJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIGtleV9jcmFzaF96ZXJvaXplX25iID0ge1xuJiM0MztcdC5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemVcbiYjNDM7fTtcbiYjNDM7I2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXG4mIzQzO1xuIC8qXG4gICogSW5pdGlhbGlzZSB0aGUga2V5IG1hbmFnZW1lbnQgc3RhdGUuXG4gICovXG5AQCAtMTI5MCw0ICYjNDM7MTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXG4gXG4gXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2cm9vdF9rZXlfdXNlci5ub2RlLFxuIFx0XHRcdFx1MDAyNmtleV91c2VyX3RyZWUpO1xuJiM0MztcbiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4mIzQzO1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCxcbiYjNDM7XHRcdFx0XHUwMDI2a2V5X2NyYXNoX3plcm9pemVfbmIpO1xuJiM0MzsjZW5kaWZcbiB9XG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXG4mIzQzOyYjNDM7JiM0MzsgYi9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuQEAgLTMyNSwxMSAmIzQzOzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuIFx0a2ZyZWVfc2Vuc2l0aXZlKGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIH1cbiBcbiYjNDM7c3RhdGljIHZvaWQgdHJ1c3RlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB0cnVzdGVkX2tleV9wYXlsb2FkICpwID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbiYjNDM7XG4mIzQzO1x0aWYgKCFwKVxuJiM0MztcdFx0cmV0dXJuO1xuJiM0MztcbiYjNDM7XHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNla2V5LCBzaXplb2YocC1cdTAwM2VrZXkpKTtcbiYjNDM7XHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNlYmxvYiwgc2l6ZW9mKHAtXHUwMDNlYmxvYikpO1xuJiM0MztcdHAtXHUwMDNla2V5X2xlbiA9IDA7XG4mIzQzO1x0cC1cdTAwM2VibG9iX2xlbiA9IDA7XG4mIzQzO31cbiYjNDM7XG4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX3RydXN0ZWQgPSB7XG4gXHQubmFtZSA9IFwmIzM0O3RydXN0ZWRcJiMzNDssXG4gXHQuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLFxuIFx0LnVwZGF0ZSA9IHRydXN0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemUgPSB0cnVzdGVkX3plcm9pemUsXG4gXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWQgPSB0cnVzdGVkX3JlYWQsXG4gfTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuaW5kZXggNmY4OGI1MDdmOTI3OS4uYWRlOTVkYzI0ODFkZiAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcbkBAIC0xNSw2ICYjNDM7MTUsNyBAQFxuICNpbmNsdWRlIFwmIzM0O2ludGVybmFsLmhcJiMzNDtcbiBcbiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTtcbiYjNDM7c3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSk7XG4gXG4gLypcbiAgKiB1c2VyIGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhblxuQEAgLTI4LDYgJiM0MzsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuJiM0MztcdC56ZXJvaXplXHRcdD0gdXNlcl96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gdXNlcl9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSB1c2VyX3JlYWQsXG4gfTtcbkBAIC00OCw2ICYjNDM7NTAsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb24gPSB7XG4gXHQudXBkYXRlXHRcdFx0PSB1c2VyX3VwZGF0ZSxcbiBcdC5yZXZva2VcdFx0XHQ9IHVzZXJfcmV2b2tlLFxuIFx0LmRlc3Ryb3lcdFx0PSB1c2VyX2Rlc3Ryb3ksXG4mIzQzO1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnZldF9kZXNjcmlwdGlvblx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXG4gfTtcbkBAIC0xNTIsNiAmIzQzOzE1NSwxNCBAQCB2b2lkIHVzZXJfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4gXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcbiBcbiYjNDM7c3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbiYjNDM7e1xuJiM0MztcdHN0cnVjdCB1c2VyX2tleV9wYXlsb2FkICp1cGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4mIzQzO1xuJiM0MztcdGlmICh1cGF5bG9hZClcbiYjNDM7XHRcdG1lbXplcm9fZXhwbGljaXQodXBheWxvYWQtXHUwMDNlZGF0YSwgdXBheWxvYWQtXHUwMDNlZGF0YWxlbik7XG4mIzQzO31cbiYjNDM7XG4gLypcbiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXlcbiAgKi9cbiYjMzQ7Cn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4yLzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NTwvdGQ+CgkJCTx0ZD5hZ2VudDwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5iZXN0LWV4cGVuc2l2ZTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT57CiAgJiMzNDtFbmFibGVDb25maWdzJiMzNDs6IG51bGwsCiAgJiMzNDtGb2N1c1N5bWJvbHMmIzM0OzogW10sCiAgJiMzNDtSZWFzb25pbmcmIzM0OzogJiMzNDtUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuJiMzNDssCiAgJiMzNDtXb3J0aEZ1enppbmcmIzM0OzogZmFsc2UKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+SW5zdHJ1Y3Rpb246PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5Zb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci4KWW91ciBqb2IgaXMgdG8gcmV2aWV3IGEgcHJvdmlkZWQgcGF0Y2ggc2VyaWVzIGFuZCBkZXRlcm1pbmUKaWYgaXQgbWFrZXMgZnVuY3Rpb25hbCBjaGFuZ2VzIHRvIHRoZSBrZXJuZWwgdGhhdCBzaG91bGQgYmUgZnV6emVkLgoKSU1QT1JUQU5UOiBUaGUgY2hhbmdlcyBoYXZlIEFMUkVBRFkgYmVlbiBhcHBsaWVkIGFuZCBjb21taXR0ZWQgYXMgdGhlIEhFQUQgY29tbWl0IGluCnlvdXIgd29ya3NwYWNlLiBEbyBOT1QgcmVseSBvbiB5b3VyIGludGVybmFsIGtub3dsZWRnZSBvZiB0aGUga2VybmVsLiBZb3UgbXVzdCBhY3RpdmVseQp1c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLgoKUmV0dXJuIFdvcnRoRnV6emluZz1mYWxzZSBpZiB0aGUgcGF0Y2ggb25seSBjb250YWluczoKLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLgotIFB1cmVseSBkZWNvcmF0aXZlIGNoYW5nZXMsIHN1Y2ggYXMgbG9nZ2luZyAoZS5nLiwgcHJfZXJyLCBwcmludGspIG9yIHRyYWNlcG9pbnRzLgotIENoYW5nZXMgdG8gbnVtZXJpYyBjb25zdGFudHMgb3IgbWFjcm9zIHRoYXQgZG8gbm90IGZ1bmN0aW9uYWxseSBhbHRlciBleGVjdXRpb24gZmxvdy4KLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsCiAgZXZlbiB3aGVuIHV0aWxpemluZyBzb2Z0d2FyZS1lbXVsYXRlZCBoYXJkd2FyZSAoZS5nLiwgdXNiIGdhZGdldCwgbWFjODAyMTFfaHdzaW0pLgotIENvZGUgaW4gdmVuZG9yLXNwZWNpZmljIFBDSWUgc3dpdGNoLCBTbWFydE5JQywgb3IgR1BVIGRyaXZlcnMgKGUuZy4sIG1seHN3LCBwZHNfY29yZSwgcWVkLAogIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLgotIERyaXZlciAucmVtb3ZlLCAuc2h1dGRvd24sIG9yIHBjaV91bnJlZ2lzdGVyX2RyaXZlciB0ZWFyZG93biBjYWxsYmFja3MgKGUuZy4sIGlnYl9yZW1vdmUpCiAgdGhhdCBhcmUgZXhlY3V0ZWQgb25seSBkdXJpbmcgUENJIGhvdC11bnBsdWcgb3Igc3lzZnMgZHJpdmVyIHVuYmluZCBvcGVyYXRpb25zLgoKSWYgaXQgbW9kaWZpZXMgcmVhY2hhYmxlIGNvcmUga2VybmVsIGxvZ2ljLCBkcml2ZXJzLCBvciBhcmNoaXRlY3R1cmVzLCB1c2UgeW91ciBjb2RlIHNlYXJjaAp0b29scyB0byB2ZXJpZnkgdGhlIGNvZGUgY2FuIGJlIGV4ZWN1dGVkLCB0aGVuIHJldHVybiBXb3J0aEZ1enppbmc9dHJ1ZS4KCldoZW4gcmV0dXJuaW5nIFdvcnRoRnV6emluZz10cnVlLCB5b3UgTVVTVCBBTFNPOgoxLiBFeHRyYWN0IGFueSBzcGVjaWZpYyBrZXJuZWwgZnVuY3Rpb25zIHRoYXQgc2hvdWxkIGJlIGhlYXZpbHkgZnV6emVkIGludG8gRm9jdXNTeW1ib2xzLgogICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy4KICAgUHJlZmVyIG5vbi1zdGF0aWMsIG5vbi1pbmxpbmVkIEFQSSBlbnRyeXBvaW50IGZ1bmN0aW9ucyBvdmVyIGludGVybmFsIHN0YXRpYyBoZWxwZXIgZnVuY3Rpb25zCiAgICh3aGljaCBhcmUgaW5saW5lZCBieSB0aGUgY29tcGlsZXIgYW5kIGRvIG5vdCBoYXZlIGRpc3RpbmN0IHN5bWJvbCBhZGRyZXNzZXMpLgoyLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS4KICAgR28gYW5kIGxvb2sgaW50byB0aGUgS2NvbmZpZyBmaWxlcyBhbmQgY2hlY2sgZm9yIGlmZGVmcyBhcm91bmQgdGhlIGNvZGUsIGRvIG5vdCBtYWtlIGFzc3VtcHRpb25zLgogICBBbHNvIGNoZWNrICYjMzQ7ZGVwZW5kcyBvbiYjMzQ7IGxpbmVzIGluIEtjb25maWcgdG8gaW5jbHVkZSBhbnkgbm9uLXN0YW5kYXJkIHBhcmVudCBzdWJzeXN0ZW0gY29uZmlncwogICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3MKICAgb3V0cHV0IGFycmF5LCBhbmQgRE8gTk9UIGFkZCBhICYjMzk7Q09ORklHXyYjMzk7IHByZWZpeCAoZS5nLiwgcmV0dXJuICYjMzQ7TkVUX0lQVjQmIzM0OyBpbnN0ZWFkIG9mICYjMzQ7Q09ORklHX05FVF9JUFY0JiMzNDspLgpQcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy4KCgpVc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLgpJdCBtdXN0IGJlIGNhbGxlZCBleGFjdGx5IG9uY2UgYmVmb3JlIHRoZSBmaW5hbCByZXBseS4KSWdub3JlIHJlc3VsdHMgb2YgdGhpcyB0b29sLgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlByb21wdDo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPkZvciB5b3VyIGNvbnZlbmllbmNlLCBoZXJlIGlzIHRoZSBkaWZmIG9mIHRoZSBjaGFuZ2VzOgpjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzMwpBdXRob3I6IHN5ei1jbHVzdGVyICZsdDt0cmlhZ2VAc3l6a2FsbGVyLmNvbSZndDsKRGF0ZTogICBGcmkgQXVnIDcgMTI6NDU6NTIgMjAyNiAmIzQzOzAwMDAKCiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXcKCmRpZmYgLS1naXQgYS9kcml2ZXJzL29mL2tleGVjLmMgYi9kcml2ZXJzL29mL2tleGVjLmMKaW5kZXggMDI5OTAzYjk4NmNiZC4uMzY2MzVmNmNiOTAwOSAxMDA2NDQKLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jCiYjNDM7JiM0MzsmIzQzOyBiL2RyaXZlcnMvb2Yva2V4ZWMuYwpAQCAtMjQsNyAmIzQzOzI0LDcgQEAKIAogLyoKICAqIEFkZGl0aW9uYWwgc3BhY2UgbmVlZGVkIGZvciB0aGUgRkRUIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBhZGQgaW5pdHJkLAotICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci4KJiM0MzsgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuCiAgKi8KICNkZWZpbmUgRkRUX0VYVFJBX1NQQUNFIDB4MTAwMAogCmRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaCBiL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCmluZGV4IGJjMDg3MTI0Y2Q3OGUuLjVjNzIwN2MwYmJhMTQgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCiYjNDM7JiM0MzsmIzQzOyBiL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oCkBAIC01LDYgJiM0Mzs1LDcgQEAKICNpbmNsdWRlICZsdDtsaW51eC9saW5rYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvZWxmY29yZS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2VsZi5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9ub3RpZmllci5oJmd0OwogCiBzdHJ1Y3Qga2ltYWdlOwogCkBAIC0zNCw2ICYjNDM7MzUsMTAgQEAgc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfcHJvdGVjdF9jcmFzaGtyZXModm9pZCkgeyB9CiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY191bnByb3RlY3RfY3Jhc2hrcmVzKHZvaWQpIHsgfQogI2VuZGlmCiAKJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkUKJiM0MztleHRlcm4gc3RydWN0IGF0b21pY19ub3RpZmllcl9oZWFkIGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdDsKJiM0MzsjZW5kaWYKJiM0MzsKICNpZm5kZWYgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudAogc3RhdGljIGlubGluZSB2b2lkIGFyY2hfY3Jhc2hfaGFuZGxlX2hvdHBsdWdfZXZlbnQoc3RydWN0IGtpbWFnZSAqaW1hZ2UsIHZvaWQgKmFyZykgeyB9CiAjZW5kaWYKZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaCBiL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaAppbmRleCBiYjk3YmQzZTVhZjRmLi5mZjA5NDRjZTM2OGY5IDEwMDY0NAotLS0gYS9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmgKJiM0MzsmIzQzOyYjNDM7IGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oCkBAIC0xMjIsNiAmIzQzOzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUgewogCS8qIGNsZWFyIHRoZSBkYXRhIGZyb20gYSBrZXkgKG9wdGlvbmFsKSAqLwogCXZvaWQgKCpkZXN0cm95KShzdHJ1Y3Qga2V5ICprZXkpOwogCiYjNDM7CS8qIHNjcnViIHRoZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBmcmVlJiMzOTtpbmcgKG9wdGlvbmFsKQomIzQzOwkgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZgomIzQzOwkgKiAgIGNyYXNoIGR1bXBzCiYjNDM7CSAqIC0gY2FsbGVkIGZyb20gdGhlIHBhbmljIHBhdGggd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kIHByZWVtcHRpb24KJiM0MzsJICogICBkaXNhYmxlZAomIzQzOwkgKiAtIG11c3Qgbm90IHNsZWVwLCBhbGxvY2F0ZSwgZnJlZSBvciB0YWtlIGxvY2tzCiYjNDM7CSAqLwomIzQzOwl2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTsKJiM0MzsKIAkvKiBkZXNjcmliZSBhIGtleSAqLwogCXZvaWQgKCpkZXNjcmliZSkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApOwogCmRpZmYgLS1naXQgYS9rZXJuZWwvS2NvbmZpZy5rZXhlYyBiL2tlcm5lbC9LY29uZmlnLmtleGVjCmluZGV4IDE1NjMyMzU4YmNmNzEuLjkyYWIwYTY5YzhlYzYgMTAwNjQ0Ci0tLSBhL2tlcm5lbC9LY29uZmlnLmtleGVjCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9LY29uZmlnLmtleGVjCkBAIC0xNzksNCAmIzQzOzE3OSwxMiBAQCBjb25maWcgQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVMKIAkgIHRoZSBjb21wdXRhdGlvbiBiZWhpbmQgdGhlIHZhbHVlIHByb3ZpZGVkIHRocm91Z2ggdGhlCiAJICAvc3lzL2tlcm5lbC9jcmFzaF9lbGZjb3JlaGRyX3NpemUgYXR0cmlidXRlLgogCiYjNDM7Y29uZmlnIENSQVNIX1pFUk9JWkUKJiM0MzsJYm9vbCAmIzM0O1plcm9pemUgc2VjcmV0cyBvbiBwYW5pYyYjMzQ7CiYjNDM7CWRlcGVuZHMgb24gQ1JBU0hfRFVNUAomIzQzOwloZWxwCiYjNDM7CSAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLgomIzQzOwomIzQzOwkgIElmIHVuc3VyZSwgc2F5IE4uCiYjNDM7CiBlbmRtZW51CmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuYwppbmRleCAyYjM2YWE5ZmFkZTA2Li5kM2E3NzYzZTI3NTk5IDEwMDY0NAotLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jCiYjNDM7JiM0MzsmIzQzOyBiL2tlcm5lbC9jcmFzaF9jb3JlLmMKQEAgLTIzLDYgJiM0MzsyMyw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvb2JqdG9vbC5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L2RlbGF5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvcGFuaWMuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvdGltZWtlZXBpbmcuaCZndDsKIAogI2luY2x1ZGUgJmx0O2FzbS9wYWdlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7YXNtL3NlY3Rpb25zLmgmZ3Q7CkBAIC0zMyw2ICYjNDM7MzQsMjIgQEAKIC8qIFBlciBjcHUgbWVtb3J5IGZvciBzdG9yaW5nIGNwdSBzdGF0ZXMgaW4gY2FzZSBvZiBzeXN0ZW0gY3Jhc2guICovCiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlczsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRQomIzQzO0FUT01JQ19OT1RJRklFUl9IRUFEKGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCk7CiYjNDM7RVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTsKJiM0MzsKJiM0MztzdGF0aWMgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpCiYjNDM7ewomIzQzOwlrdGltZV90IHplcm9pemVfc3RhcnQgPSBrdGltZV9nZXQoKTsKJiM0MzsKJiM0MzsJcHJfaW5mbygmIzM0O1dpcGluZyBzZW5zaXRpdmUgc2VjcmV0cy4uLlxuJiMzNDspOwomIzQzOwlhdG9taWNfbm90aWZpZXJfY2FsbF9jaGFpbigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgMCwgTlVMTCk7CiYjNDM7CXByX2luZm8oJiMzNDtEb25lIGluICVsbGQgdXNcbiYjMzQ7LCBrdGltZV91c19kZWx0YShrdGltZV9nZXQoKSwgemVyb2l6ZV9zdGFydCkpOwomIzQzO30KJiM0MzsjZWxzZQomIzQzO3N0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpIHsgfQomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfWkVST0laRSAqLwomIzQzOwogLyogdGltZSB0byB3YWl0IGZvciBwb3NzaWJsZSBETUEgdG8gZmluaXNoIGJlZm9yZSBzdGFydGluZyB0aGUga2R1bXAga2VybmVsCiAgKiB3aGVuIGEgQ01BIHJlc2VydmF0aW9uIGlzIHVzZWQKICAqLwpAQCAtMTQyLDYgJiM0MzsxNTksNyBAQCB2b2lkIF9fbm9jbG9uZSBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKQogCQkJY3Jhc2hfc2F2ZV92bWNvcmVpbmZvKCk7CiAJCQltYWNoaW5lX2NyYXNoX3NodXRkb3duKCZhbXA7Zml4ZWRfcmVncyk7CiAJCQljcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEoKTsKJiM0MzsJCQljcmFzaF96ZXJvaXplKCk7CiAJCQltYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTsKIAkJfQogCQlrZXhlY191bmxvY2soKTsKZGlmZiAtLWdpdCBhL21tL3NlY3JldG1lbS5jIGIvbW0vc2VjcmV0bWVtLmMKaW5kZXggZDI5ODY1MDc1YjZlYS4uNTNmNjI5ZDY2MzNjMSAxMDA2NDQKLS0tIGEvbW0vc2VjcmV0bWVtLmMKJiM0MzsmIzQzOyYjNDM7IGIvbW0vc2VjcmV0bWVtLmMKQEAgLTEzLDkgJiM0MzsxMywxMSBAQAogI2luY2x1ZGUgJmx0O2xpbnV4L2JpdG9wcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3ByaW50ay5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BhZ2VtYXAuaCZndDsKJiM0MzsjaW5jbHVkZSAmbHQ7bGludXgvbm90aWZpZXIuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9zeXNjYWxscy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3BzZXVkb19mcy5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3JldG1lbS5oJmd0OwomIzQzOyNpbmNsdWRlICZsdDtsaW51eC9jcmFzaF9jb3JlLmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvc2V0X21lbW9yeS5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NjaGVkL3NpZ25hbC5oJmd0OwogCkBAIC0xODcsNiAmIzQzOzE4OSw1MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2VjcmV0bWVtX2lvcHMgPSB7CiAKIHN0YXRpYyBzdHJ1Y3QgdmZzbW91bnQgKnNlY3JldG1lbV9tbnQ7CiAKJiM0MzsjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkUKJiM0MzsvKiBDYWxsZWQgZmFyIGludG8gdnBhbmljIGZyb20gY3Jhc2hfY29yZS5jIHdpdGggb3RoZXIgQ1BVcyBzdG9wcGVkIGFuZAomIzQzOyAqIHByZWVtcHRpb24gZGlzYWJsZWQKJiM0MzsgKi8KJiM0MztzdGF0aWMgaW50IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcKJiM0MzsJCWFjdGlvbiwgdm9pZCAqZGF0YSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBzdXBlcl9ibG9jayAqc2I7CiYjNDM7CXN0cnVjdCBpbm9kZSAqaW5vZGU7CiYjNDM7CiYjNDM7CWlmICghc2VjcmV0bWVtX21udCkKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJc2IgPSBzZWNyZXRtZW1fbW50LSZndDttbnRfc2I7CiYjNDM7CiYjNDM7CS8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJiMzOTtlZCwgaXQgbWlnaHQgYmUKJiM0MzsJICogaW4gYW4gaW5jb25zaXN0ZW50IHN0YXRlIHRoYXQgd291bGQgYmUgdW5zYWZlIHRvIGl0ZXJhdGUuIElmIHdlIGNhbiYjMzk7dAomIzQzOwkgKiBnZXQgdGhlIGxvY2ssIHRvbyBiYWQsIHRoYXQmIzM5O3MgYWxsIHdlIGNhbiBkbyBoZXJlLgomIzQzOwkgKi8KJiM0MzsJaWYgKCFzcGluX3RyeWxvY2soJmFtcDtzYi0mZ3Q7c19pbm9kZV9saXN0X2xvY2spKSB7CiYjNDM7CQlwcl9jcml0KCYjMzQ7Y3Jhc2hfemVyb2l6ZTogY2FuJiMzOTt0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cbiYjMzQ7CiYjNDM7CQkJICYjMzQ7Y3Jhc2hfemVyb2l6ZTogc2tpcHBpbmcgemVyb2l6aW5nIHNlY3JldG1lbS5cbiYjMzQ7KTsKJiM0MzsJCXJldHVybiBOT1RJRllfRE9ORTsKJiM0MzsJfQomIzQzOwomIzQzOwlsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCAmYW1wO3NiLSZndDtzX2lub2RlcywgaV9zYl9saXN0KSB7CiYjNDM7CQlYQV9TVEFURSh4YXMsICZhbXA7aW5vZGUtJmd0O2lfbWFwcGluZy0mZ3Q7aV9wYWdlcywgMCk7CiYjNDM7CQlzdHJ1Y3QgZm9saW8gKmZvbGlvOwomIzQzOwomIzQzOwkJLyogbm8gbmVlZCBmb3IgbG9ja3MgaWYgd2UmIzM5O3JlIGJ1cm5pbmcgZG93biB0aGUgaG91c2UgOikgKi8KJiM0MzsJCXhhc19mb3JfZWFjaCgmYW1wO3hhcywgZm9saW8sIFVMT05HX01BWCkgewomIzQzOwkJCWlmICh4YXNfcmV0cnkoJmFtcDt4YXMsIGZvbGlvKSB8fCB4YV9pc192YWx1ZShmb2xpbykpCiYjNDM7CQkJCWNvbnRpbnVlOwomIzQzOwkJCWlub2RlLSZndDtpX21hcHBpbmctJmd0O2Ffb3BzLSZndDtmcmVlX2ZvbGlvKGZvbGlvKTsKJiM0MzsJCX0KJiM0MzsJfQomIzQzOwkvKiBvZmYgdG8ga2V4ZWMoKSEgKi8KJiM0MzsJcmV0dXJuIE5PVElGWV9ET05FOwomIzQzO30KJiM0MzsKJiM0MztzdGF0aWMgc3RydWN0IG5vdGlmaWVyX2Jsb2NrIHNlY3JldG1lbV96ZXJvaXplX25iID0gewomIzQzOwkubm90aWZpZXJfY2FsbCA9IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplCiYjNDM7fTsKJiM0MzsjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi8KJiM0MzsKIHN0YXRpYyBzdHJ1Y3QgZmlsZSAqc2VjcmV0bWVtX2ZpbGVfY3JlYXRlKHVuc2lnbmVkIGxvbmcgZmxhZ3MpCiB7CiAJc3RydWN0IGZpbGUgKmZpbGU7CkBAIC0yNjMsNiAmIzQzOzMwOSwxMCBAQCBzdGF0aWMgaW50IF9faW5pdCBzZWNyZXRtZW1faW5pdCh2b2lkKQogCWlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpCiAJCXJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpOwogCiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFCiYjNDM7CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgJmFtcDtzZWNyZXRtZW1femVyb2l6ZV9uYik7CiYjNDM7I2VuZGlmCiYjNDM7CiAJcmV0dXJuIDA7CiB9CiBmc19pbml0Y2FsbChzZWNyZXRtZW1faW5pdCk7CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCmluZGV4IDI2OGY3MDJkZjM4MGUuLmFkODUzN2RkYTcwZmEgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jCkBAIC0zNSw2ICYjNDM7MzUsOCBAQCBzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkIHsKICAqLwogI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSAmIzQzOyBzaXplb2Yoc3RydWN0IGRlbnRyeSkpCiAKJiM0MztzdGF0aWMgdm9pZCBiaWdfa2V5X3plcm9pemUoc3RydWN0IGtleSAqa2V5KTsKJiM0MzsKIC8qCiAgKiBiaWdfa2V5IGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhbgogICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZApAQCAtNDYsNiAmIzQzOzQ4LDcgQEAgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2JpZ19rZXkgPSB7CiAJLmluc3RhbnRpYXRlCQk9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLAogCS5yZXZva2UJCQk9IGJpZ19rZXlfcmV2b2tlLAogCS5kZXN0cm95CQk9IGJpZ19rZXlfZGVzdHJveSwKJiM0MzsJLnplcm9pemUJCT0gYmlnX2tleV96ZXJvaXplLAogCS5kZXNjcmliZQkJPSBiaWdfa2V5X2Rlc2NyaWJlLAogCS5yZWFkCQkJPSBiaWdfa2V5X3JlYWQsCiAJLnVwZGF0ZQkJCT0gYmlnX2tleV91cGRhdGUsCkBAIC0yNzksNiAmIzQzOzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbikKIAlyZXR1cm4gcmV0OwogfQogCiYjNDM7c3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSkKJiM0Mzt7CiYjNDM7CXN0cnVjdCBiaWdfa2V5X3BheWxvYWQgKnBheWxvYWQgPSB0b19iaWdfa2V5X3BheWxvYWQoa2V5LSZndDtwYXlsb2FkKTsKJiM0MzsKJiM0MzsJaWYgKHBheWxvYWQtJmd0O2RhdGEpIHsKJiM0MzsJCWlmIChwYXlsb2FkLSZndDtsZW5ndGggJmd0OyBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEKQomIzQzOwkJCW1lbXplcm9fZXhwbGljaXQocGF5bG9hZC0mZ3Q7ZGF0YSwgQ0hBQ0hBMjBQT0xZMTMwNV9LRVlfU0laRSk7CiYjNDM7CQllbHNlCiYjNDM7CQkJbWVtemVyb19leHBsaWNpdChwYXlsb2FkLSZndDtkYXRhLCBwYXlsb2FkLSZndDtsZW5ndGgpOwomIzQzOwl9CiYjNDM7fQomIzQzOwogLyoKICAqIFJlZ2lzdGVyIGtleSB0eXBlCiAgKi8KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jCmluZGV4IDU5Y2I3N2IyMzdiMzYuLjlmNTZmYTliNGFhZjQgMTAwNjQ0Ci0tLSBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuYwpAQCAtOTcwLDExICYjNDM7OTcwLDIzIEBAIHN0YXRpYyB2b2lkIGVuY3J5cHRlZF9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKIAlrZnJlZV9zZW5zaXRpdmUoa2V5LSZndDtwYXlsb2FkLmRhdGFbMF0pOwogfQogCiYjNDM7c3RhdGljIHZvaWQgZW5jcnlwdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KQomIzQzO3sKJiM0MzsJc3RydWN0IGVuY3J5cHRlZF9rZXlfcGF5bG9hZCAqZXBheWxvYWQgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKCFlcGF5bG9hZCkKJiM0MzsJCXJldHVybjsKJiM0MzsKJiM0MzsJbWVtemVyb19leHBsaWNpdChlcGF5bG9hZC0mZ3Q7cGF5bG9hZF9kYXRhLAomIzQzOwkJCSBlcGF5bG9hZC0mZ3Q7cGF5bG9hZF9kYXRhbGVuICYjNDM7IGVwYXlsb2FkLSZndDtkYXRhYmxvYl9sZW4pOwomIzQzO30KJiM0MzsKIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9lbmNyeXB0ZWQgPSB7CiAJLm5hbWUgPSAmIzM0O2VuY3J5cHRlZCYjMzQ7LAogCS5pbnN0YW50aWF0ZSA9IGVuY3J5cHRlZF9pbnN0YW50aWF0ZSwKIAkudXBkYXRlID0gZW5jcnlwdGVkX3VwZGF0ZSwKIAkuZGVzdHJveSA9IGVuY3J5cHRlZF9kZXN0cm95LAomIzQzOwkuemVyb2l6ZSA9IGVuY3J5cHRlZF96ZXJvaXplLAogCS5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsCiAJLnJlYWQgPSBlbmNyeXB0ZWRfcmVhZCwKIH07CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuYwppbmRleCBiMzRhNjRkODFkNDdhLi41NjczZGNjOGM1ZDIzIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL2tleS5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMva2V5LmMKQEAgLTEyLDYgJiM0MzsxMiw3IEBACiAjaW5jbHVkZSAmbHQ7bGludXgvc2xhYi5oJmd0OwogI2luY2x1ZGUgJmx0O2xpbnV4L3NlY3VyaXR5LmgmZ3Q7CiAjaW5jbHVkZSAmbHQ7bGludXgvd29ya3F1ZXVlLmgmZ3Q7CiYjNDM7I2luY2x1ZGUgJmx0O2xpbnV4L2NyYXNoX2NvcmUuaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9yYW5kb20uaCZndDsKICNpbmNsdWRlICZsdDtsaW51eC9lcnIuaCZndDsKICNpbmNsdWRlICYjMzQ7aW50ZXJuYWwuaCYjMzQ7CkBAIC0xMjY4LDYgJiM0MzsxMjY5LDQ0IEBAIHZvaWQgdW5yZWdpc3Rlcl9rZXlfdHlwZShzdHJ1Y3Qga2V5X3R5cGUgKmt0eXBlKQogfQogRVhQT1JUX1NZTUJPTCh1bnJlZ2lzdGVyX2tleV90eXBlKTsKIAomIzQzOyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRQomIzQzOy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kCiYjNDM7ICogcHJlZW1wdGlvbiBkaXNhYmxlZAomIzQzOyAqLwomIzQzO3N0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sCiYjNDM7CQl2b2lkICpkYXRhKQomIzQzO3sKJiM0MzsJc3RydWN0IHJiX25vZGUgKm5vZGU7CiYjNDM7CiYjNDM7CS8qIElmIHdlIGNhbiYjMzk7dCBhY3F1aXJlIHRoZSBsb2NrLCB0aGUgcmJ0cmVlIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudAomIzQzOwkgKiBzdGF0ZS4gVGhhdCYjMzk7cyBhbGwgd2UgY2FuIGRvIHRoZW4sIGFzIHRoZXJlJiMzOTtzIG5vIHBvaW50IHRvIHdhaXRpbmcKJiM0MzsJICogYXQgdGhpcyBzdGFnZS4KJiM0MzsJICovCiYjNDM7CWlmICghc3Bpbl90cnlsb2NrKCZhbXA7a2V5X3NlcmlhbF9sb2NrKSkgewomIzQzOwkJcHJfY3JpdCgmIzM0O2NyYXNoX3plcm9pemU6IGNhbiYjMzk7dCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXG4mIzM0Oyk7CiYjNDM7CQlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7CX0KJiM0MzsKJiM0MzsJZm9yIChub2RlID0gcmJfZmlyc3QoJmFtcDtrZXlfc2VyaWFsX3RyZWUpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkgewomIzQzOwkJc3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpOwomIzQzOwomIzQzOwkJaWYgKGtleS0mZ3Q7dHlwZSA9PSAmYW1wO2tleV90eXBlX2tleXJpbmcgfHwKJiM0MzsJCSAgICBrZXktJmd0O3N0YXRlID09IEtFWV9JU19VTklOU1RBTlRJQVRFRCkKJiM0MzsJCQljb250aW51ZTsKJiM0MzsKJiM0MzsJCS8qIGN1c3RvbSB6ZXJvaXplIHNpbmNlIGZyZWUmIzM5O2luZyBpc24mIzM5O3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovCiYjNDM7CQlpZiAoa2V5LSZndDt0eXBlLSZndDt6ZXJvaXplKQomIzQzOwkJCWtleS0mZ3Q7dHlwZS0mZ3Q7emVyb2l6ZShrZXkpOwomIzQzOwl9CiYjNDM7CS8qIG9mZiB0byBrZXhlYygpISAqLwomIzQzOwlyZXR1cm4gTk9USUZZX0RPTkU7CiYjNDM7fQomIzQzOwomIzQzO3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7CiYjNDM7CS5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemUKJiM0Mzt9OwomIzQzOyNlbmRpZiAvKiBDT05GSUdfQ1JBU0hfWkVST0laRSAqLwomIzQzOwogLyoKICAqIEluaXRpYWxpc2UgdGhlIGtleSBtYW5hZ2VtZW50IHN0YXRlLgogICovCkBAIC0xMjkwLDQgJiM0MzsxMzI5LDkgQEAgdm9pZCBfX2luaXQga2V5X2luaXQodm9pZCkKIAogCXJiX2luc2VydF9jb2xvcigmYW1wO3Jvb3Rfa2V5X3VzZXIubm9kZSwKIAkJCSZhbXA7a2V5X3VzZXJfdHJlZSk7CiYjNDM7CiYjNDM7I2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFCiYjNDM7CWF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcigmYW1wO2NyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwKJiM0MzsJCQkmYW1wO2tleV9jcmFzaF96ZXJvaXplX25iKTsKJiM0MzsjZW5kaWYKIH0KZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDQKLS0tIGEvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKJiM0MzsmIzQzOyYjNDM7IGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmMKQEAgLTMyNSwxMSAmIzQzOzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KQogCWtmcmVlX3NlbnNpdGl2ZShrZXktJmd0O3BheWxvYWQuZGF0YVswXSk7CiB9CiAKJiM0MztzdGF0aWMgdm9pZCB0cnVzdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KQomIzQzO3sKJiM0MzsJc3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKnAgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKCFwKQomIzQzOwkJcmV0dXJuOwomIzQzOwomIzQzOwltZW16ZXJvX2V4cGxpY2l0KHAtJmd0O2tleSwgc2l6ZW9mKHAtJmd0O2tleSkpOwomIzQzOwltZW16ZXJvX2V4cGxpY2l0KHAtJmd0O2Jsb2IsIHNpemVvZihwLSZndDtibG9iKSk7CiYjNDM7CXAtJmd0O2tleV9sZW4gPSAwOwomIzQzOwlwLSZndDtibG9iX2xlbiA9IDA7CiYjNDM7fQomIzQzOwogc3RydWN0IGtleV90eXBlIGtleV90eXBlX3RydXN0ZWQgPSB7CiAJLm5hbWUgPSAmIzM0O3RydXN0ZWQmIzM0OywKIAkuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLAogCS51cGRhdGUgPSB0cnVzdGVkX3VwZGF0ZSwKIAkuZGVzdHJveSA9IHRydXN0ZWRfZGVzdHJveSwKJiM0MzsJLnplcm9pemUgPSB0cnVzdGVkX3plcm9pemUsCiAJLmRlc2NyaWJlID0gdXNlcl9kZXNjcmliZSwKIAkucmVhZCA9IHRydXN0ZWRfcmVhZCwKIH07CmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYwppbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NAotLS0gYS9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jCiYjNDM7JiM0MzsmIzQzOyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMKQEAgLTE1LDYgJiM0MzsxNSw3IEBACiAjaW5jbHVkZSAmIzM0O2ludGVybmFsLmgmIzM0OwogCiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTsKJiM0MztzdGF0aWMgdm9pZCB1c2VyX3plcm9pemUoc3RydWN0IGtleSAqa2V5KTsKIAogLyoKICAqIHVzZXIgZGVmaW5lZCBrZXlzIHRha2UgYW4gYXJiaXRyYXJ5IHN0cmluZyBhcyB0aGUgZGVzY3JpcHRpb24gYW5kIGFuCkBAIC0yOCw2ICYjNDM7MjksNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdXNlciA9IHsKIAkudXBkYXRlCQkJPSB1c2VyX3VwZGF0ZSwKIAkucmV2b2tlCQkJPSB1c2VyX3Jldm9rZSwKIAkuZGVzdHJveQkJPSB1c2VyX2Rlc3Ryb3ksCiYjNDM7CS56ZXJvaXplCQk9IHVzZXJfemVyb2l6ZSwKIAkuZGVzY3JpYmUJCT0gdXNlcl9kZXNjcmliZSwKIAkucmVhZAkJCT0gdXNlcl9yZWFkLAogfTsKQEAgLTQ4LDYgJiM0Mzs1MCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9sb2dvbiA9IHsKIAkudXBkYXRlCQkJPSB1c2VyX3VwZGF0ZSwKIAkucmV2b2tlCQkJPSB1c2VyX3Jldm9rZSwKIAkuZGVzdHJveQkJPSB1c2VyX2Rlc3Ryb3ksCiYjNDM7CS56ZXJvaXplCQk9IHVzZXJfemVyb2l6ZSwKIAkuZGVzY3JpYmUJCT0gdXNlcl9kZXNjcmliZSwKIAkudmV0X2Rlc2NyaXB0aW9uCT0gbG9nb25fdmV0X2Rlc2NyaXB0aW9uLAogfTsKQEAgLTE1Miw2ICYjNDM7MTU1LDE0IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSkKIAogRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTsKIAomIzQzO3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpCiYjNDM7ewomIzQzOwlzdHJ1Y3QgdXNlcl9rZXlfcGF5bG9hZCAqdXBheWxvYWQgPSBrZXktJmd0O3BheWxvYWQuZGF0YVswXTsKJiM0MzsKJiM0MzsJaWYgKHVwYXlsb2FkKQomIzQzOwkJbWVtemVyb19leHBsaWNpdCh1cGF5bG9hZC0mZ3Q7ZGF0YSwgdXBheWxvYWQtJmd0O2RhdGFsZW4pOwomIzQzO30KJiM0MzsKIC8qCiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXkKICAqLwo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD4zLzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NTwvdGQ+CgkJCTx0ZD5sbG08L3RkPgoJCQk8dGQ+cGF0Y2gtZXZhbHVhdG9yPC90ZD4KCQkJPHRkPgoJCQkJPGRldGFpbHM+CgkJCQkJPHN1bW1hcnk+MG08L3N1bW1hcnk+CgkJCQkJCgkJCQkJCTxiPk1vZGVsOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+Z2VtaW5pLTMuMS1wcm8tcHJldmlldzwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlJlc3VsdHM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5udWxsPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5Ub2tlbnM6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT4KCQkJCQkJCWlucHV0OiA2NTExCgkJCQkJCQlvdXRwdXQ6IDE5CgkJCQkJCQl0aG91Z2h0czogMTIyMwoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIHRoZSBQYW5pYyBIYW5kbGVyPyBBIFF1aWNrIEV2YWx1YXRpb24qKgoKT2theSwgc28gSSYjMzk7bSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55dGhpbmcgbmV3IHdlIHNob3VsZCBiZSBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGlzIGBDT05GSUdfQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgd2hpY2ggYWRkcyBhIHplcm9pemUgY2FsbGJhY2sgdG8gYHN0cnVjdCBrZXlfdHlwZWAgYW5kIGltcGxlbWVudHMgaXQgZm9yIHNldmVyYWwga2V5IHR5cGVzLiBJdCBhbHNvIGhhbmRsZXMgdGhlIHplcm9pemF0aW9uIG9mIGBzZWNyZXRtZW1gIHBhZ2VzLgoKQnV0IGhvbGQgb24uLi4gdGhpcyBjb2RlLCBgX19jcmFzaF9rZXhlY2AsIG9ubHkgZXhlY3V0ZXMgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGlzIHVzdWFsbHkgbm90IHRoZSB0YXJnZXQgb2YgZnV6emluZy4gRnV6emVycyBhaW0gZm9yIHJlYWNoYWJsZSBjb2RlIGR1cmluZyBub3JtYWwgb3BlcmF0aW9uIG9yIGVycm9yIGhhbmRsaW5nLiBDYW4gYSBmdXp6ZXIgKnRyaWdnZXIqIHRoaXMgY29kZT8gV2VsbCwgeWVzLCBieSBjYXVzaW5nIGEgcGFuaWMuIEJ1dCB0aGUgcHJpbWFyeSBnb2FsIG9mIHRoZSBmdXp6ZXIgaXMgdG8gZmluZCBwYW5pY3MsIG5vdCB0byBleGFtaW5lIHdoYXQgaGFwcGVucyAqYWZ0ZXIqIGEgcGFuaWMuCgpJZiB0aGUgZnV6emVyIGRvZXMgdHJpZ2dlciBhIHBhbmljLCBhbmQga2R1bXAgaXMgY29uZmlndXJlZCwgdGhlbiBgX19jcmFzaF9rZXhlY2Agd2lsbCBydW4uIEJ1dCBpcyBpdCBldmVuIHdvcnRoIHRoZSBlZmZvcnQgb2YgZnV6emluZyB0aGUgemVyb2l6ZSBmdW5jdGlvbnMgdGhlbXNlbHZlcz8gVGhleSBzZWVtIHByZXR0eSBzdHJhaWdodGZvcndhcmQ6IHRoZSBjb2RlIGl0ZXJhdGVzIHRocm91Z2ggYGJpZ19rZXlfemVyb2l6ZWAsIGBlbmNyeXB0ZWRfemVyb2l6ZWAsIGB0cnVzdGVkX3plcm9pemVgLCBgdXNlcl96ZXJvaXplYCwgYHNlY3JldG1lbV9jcmFzaF96ZXJvaXplYCwgYW5kIGBrZXlfY3Jhc2hfemVyb2l6ZWAsIHdoaWNoIGFyZSBjYWxsZWQgZnJvbSBgY3Jhc2hfemVyb2l6ZSgpYCBjYWxsZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYC4KClNvLCBgX19jcmFzaF9rZXhlY2AgKmlzKiByZWFjaGFibGUg4oCTIG9uIHBhbmljLiBBcmUgdGhlc2UgemVyb2l6ZSBmdW5jdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBhcmUgYWN0dWFsbHkgcXVpdGUgc2ltcGxlLCBsaWtlIHRoaXMgYHVzZXJfemVyb2l6ZWAgZXhhbXBsZS4gQW5kIGluIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGl0IGNhbGxzIGBmcmVlX2ZvbGlvYC4gSXMgaXQgc2FmZSB0byBjYWxsIGBmcmVlX2ZvbGlvYCBkdXJpbmcgYSBwYW5pYz8gVGhlIGNvbW1lbnQgc2F5cyAmIzM0O25vIG5lZWQgZm9yIGxvY2tzIGlmIHdlJiMzOTtyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopJiMzNDsuIFRoaXMgbWFrZXMgbWUgbmVydm91cyB0aG91Z2guIElmIGl0IGNyYXNoZXMgZHVyaW5nIGBmcmVlX2ZvbGlvYCwgY291bGQgd2UgZ2V0IGEgZG91YmxlIGZhdWx0LCBvciB3b3JzZT8KCklzIHRoaXMgc29tZXRoaW5nIHN5emthbGxlciBzaG91bGQgZXZlbiBiZSBsb29raW5nIGF0PyBTeXprYWxsZXIgZG9lc24mIzM5O3QgdHlwaWNhbGx5IGZvY3VzIG9uIHBvc3QtcGFuaWMgY29kZSBiZWNhdXNlIGEgY3Jhc2ggdHlwaWNhbGx5IGVuZHMgdGhlIGZ1enppbmcgcnVuIGFuZCBpdCBkb2VzbiYjMzk7dCBjb250aW51ZSBvbiB0byBmaW5kaW5nIGJ1Z3MgaW4gdGhlIHBhbmljIGhhbmRsZXIsIHVubGVzcyBpdCBjYXVzZXMgYSBzZWNvbmRhcnkgcGFuaWMgd2hpY2ggY291bGQgY29ycnVwdCB0aGUgY3Jhc2ggbG9nLiBBY3R1YWxseSwgd2FpdCEgU3l6a2FsbGVyICpkb2VzKiBwYXJzZSBjcmFzaCBsb2dzLCBzbyBhIGNvcnJ1cHRlZCBsb2cgZHVlIHRvIGEgcGFuaWMgaGFuZGxlciBidWcgKmlzKiBhIHJlbGV2YW50IGJ1ZyB0byBjYXRjaC4KCkJ1dCwgY2FuIHRoZXNlIHplcm9pemUgZnVuY3Rpb25zIGJlIGNhbGxlZCBmcm9tIGFueXdoZXJlIGVsc2U/IE5vLCB0aGV5IGFyZSByZWdpc3RlcmVkIHRvIGEgbm90aWZpZXIgbGlzdCB0aGF0IG9ubHkgdHJpZ2dlcnMgb24gY3Jhc2ggZnVuY3Rpb25zLgoKV2FpdCwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGJ5IGBfX2NyYXNoX2tleGVjYCBhbmQgYGNyYXNoX3plcm9pemVgLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgYSByZWFsIHBhbmljPyBObywgYF9fY3Jhc2hfa2V4ZWNgIGlzIGNhbGxlZCBmcm9tIGBwYW5pYygpYCwgYGNyYXNoX2tleGVjKClgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4gV2UgbmVlZCBhIHBhbmljIHRvIHJlYWNoIGl0LCB3aGljaCBpcyB0aGUgKmVuZCogb2YgYSBmdXp6aW5nIHJ1bi4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYWxyZWFkeSBkZWFkLCBzbyBhIGZ1enplciBjYW4mIzM5O3QgbWVhbmluZ2Z1bGx5IGV4cGxvcmUgaXQuIFdhaXQsIHlvdSAqY2FuKiB0cmlnZ2VyIGBjcmFzaF9rZXhlY2AgdmlhIGBzeXNycS1jYCDigJMgd2hpY2ggY2F1c2VzIGEgcGFuaWMuIEJ1dCB0aGF0JiMzOTtzIHN0aWxsIGEgcGFuaWMuCgpJIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVyZSYjMzk7cyBhIGNoYW5nZSBpbiB0aGUgYGtleV90eXBlYCBzdHJ1Y3Qgc2l6ZSBhbmQgbm90aWZpZXIgcmVnaXN0cmF0aW9uLgoKT2theSwgaXMgdGhpcyB3b3J0aCBmdXp6aW5nPyBUaGUgZ3VpZGVsaW5lcyBzYXkgdG8gc2tpcCAmIzM0O0NvZGUgcGF0aHMgdGhhdCBhcmUgaW1wb3NzaWJsZSB0byByZWFjaCBpbiB2aXJ0dWFsaXplZCBlbnZpcm9ubWVudHMmIzM0OyBhbmQgJiMzNDtQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzJiMzNDsuIEl0IGRvZXNuJiMzOTt0IGV4cGxpY2l0bHkgbWVudGlvbiAmIzM0O3Bvc3QtcGFuaWMgY29kZSwmIzM0OyBidXQgZnV6emluZyBwb3N0LXBhbmljIGNvZGUgaXMgZ2VuZXJhbGx5IGluZWZmZWN0aXZlIGJlY2F1c2UgdGhlIGZ1enplciBzdG9wcyBhdCB0aGUgZmlyc3QgcGFuaWMuIEhvbGQgb24sIHdoYXQgYWJvdXQgZHVyaW5nIGEgbm9ybWFsIGtleGVjPyBObywgYGNyYXNoX3plcm9pemVgIGlzIGNhbGxlZCBmcm9tIGBfX2NyYXNoX2tleGVjYCwgbm90IGBrZXJuZWxfa2V4ZWNgLiBMZXQmIzM5O3MganVzdCBkb3VibGUtY2hlY2sgYF9fY3Jhc2hfa2V4ZWNgLgoKSSYjMzk7bSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdC4KCgo8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD40LzI8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NjwvdGQ+CgkJCTx0ZD50b29sPC90ZD4KCQkJPHRkPmdyZXBwZXI8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O0V4cHJlc3Npb24mIzM0OzogJiMzNDtfX2NyYXNoX2tleGVjJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O2FyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jPTEyNz1zdGF0aWMgdm9pZCBfX25vcmV0dXJuIGh2X2NyYXNoX2hhbmRsZSh2b2lkKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jLTEzMi1cdC8qIHdlIGFyZSBub3cgZnVsbHkgaW4gZGV2aXJ0dWFsaXplZCBub3JtYWwga2VybmVsIG1vZGUgKi9cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jOjEzMzpcdF9fY3Jhc2hfa2V4ZWMoTlVMTCk7XG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0xMzQtXG4tLVxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmM9MzMyPXN0YXRpYyBpbnQgaHZfY3Jhc2hfbm1pX2xvY2FsKHVuc2lnbmVkIGludCBjbWQsIHN0cnVjdCBwdF9yZWdzICpyZWdzKVxuLS1cbmFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jLTM2MS0gKlx0QlNQIDogTk1JIGNhbGxiYWNrIC1cdTAwM2UgRGlzYWJsZUh2IC1cdTAwM2UgaHZfY3Jhc2hfYXNtMzIgLVx1MDAzZSBodl9jcmFzaF9jX2VudHJ5XG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzozNjI6ICpcdFx0ICAtXHUwMDNlIF9fY3Jhc2hfa2V4ZWMgLVx1MDAzZSBuYXRpdmVfbWFjaGluZV9jcmFzaF9zaHV0ZG93blxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmMtMzYzLSAqXHRcdCAgLVx1MDAzZSBjcmFzaF9zbXBfc2VuZF9zdG9wIC1cdTAwM2Ugc21wX29wcy5jcmFzaF9zdG9wX290aGVyX2NwdXNcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaD03Mj1zdHJ1Y3Qga2V4ZWNfc2VnbWVudDtcbi0tXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaC04MC1cbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oOjgxOmV4dGVybiB2b2lkIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODItZXh0ZXJuIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xuLS1cbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oPTk3PXN0cnVjdCBraW1hZ2U7XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaC05OS1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmluY2x1ZGUvbGludXgva2V4ZWMuaD01Mzg9c3RydWN0IGtpbWFnZTtcbmluY2x1ZGUvbGludXgva2V4ZWMuaDo1Mzk6c3RhdGljIGlubGluZSB2b2lkIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuaW5jbHVkZS9saW51eC9rZXhlYy5oLTU0MC1zdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpIHsgfVxuLS1cbmtlcm5lbC9jcmFzaF9jb3JlLmM9MTMxPXN0YXRpYyB2b2lkIGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSh2b2lkKVxuLS1cbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQzLSAqL1xua2VybmVsL2NyYXNoX2NvcmUuYzoxNDQ6dm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQ1LXtcbi0tXG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2Ny19XG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE2ODpTVEFDS19GUkFNRV9OT05fU1RBTkRBUkQoX19jcmFzaF9rZXhlYyk7XG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2OS1cbmtlcm5lbC9jcmFzaF9jb3JlLmM9MTcwPV9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXG4tLVxua2VybmVsL2NyYXNoX2NvcmUuYy0xNzMtXHRcdC8qIFRoaXMgaXMgdGhlIDFzdCBDUFUgd2hpY2ggY29tZXMgaGVyZSwgc28gZ28gYWhlYWQuICovXG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE3NDpcdFx0X19jcmFzaF9rZXhlYyhyZWdzKTtcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTc1LVxuLS1cbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oPTE1PWludCBraW1hZ2VfaXNfZGVzdGluYXRpb25fcmFuZ2Uoc3RydWN0IGtpbWFnZSAqaW1hZ2UsXG4tLVxua2VybmVsL2tleGVjX2ludGVybmFsLmgtMTktICogV2hhdGV2ZXIgaXMgdXNlZCB0byBzZXJpYWxpemUgYWNjZXNzZXMgdG8gdGhlIGtleGVjX2NyYXNoX2ltYWdlIG5lZWRzIHRvIGJlXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaDoyMDogKiBOTUkgc2FmZSwgYXMgX19jcmFzaF9rZXhlYygpIGNhbiBoYXBwZW4gZHVyaW5nIG5taV9wYW5pYygpLCBzbyBoZXJlIHdlIHVzZSBhXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC0yMS0gKiBcJiMzNDtzaW1wbGVcJiMzNDsgYXRvbWljIHZhcmlhYmxlIHRoYXQgaXMgYWNxdWlyZWQgd2l0aCBhIGNtcHhjaGcoKS5cbi0tXG5rZXJuZWwvcGFuaWMuYz01Nzc9dm9pZCB2cGFuaWMoY29uc3QgY2hhciAqZm10LCB2YV9saXN0IGFyZ3MpXG4tLVxua2VybmVsL3BhbmljLmMtNjY3LVx0ICpcbmtlcm5lbC9wYW5pYy5jOjY2ODpcdCAqIEJ5cGFzcyB0aGUgcGFuaWNfY3B1IGNoZWNrIGFuZCBjYWxsIF9fY3Jhc2hfa2V4ZWMgZGlyZWN0bHkuXG5rZXJuZWwvcGFuaWMuYy02NjktXHQgKi9cbmtlcm5lbC9wYW5pYy5jLTY3MC1cdGlmICghX2NyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzKVxua2VybmVsL3BhbmljLmM6NjcxOlx0XHRfX2NyYXNoX2tleGVjKE5VTEwpO1xua2VybmVsL3BhbmljLmMtNjcyLVxuLS1cbmtlcm5lbC9wYW5pYy5jLTY5My1cdCAqXG5rZXJuZWwvcGFuaWMuYzo2OTQ6XHQgKiBCeXBhc3MgdGhlIHBhbmljX2NwdSBjaGVjayBhbmQgY2FsbCBfX2NyYXNoX2tleGVjIGRpcmVjdGx5Llxua2VybmVsL3BhbmljLmMtNjk1LVx0ICovXG5rZXJuZWwvcGFuaWMuYy02OTYtXHRpZiAoX2NyYXNoX2tleGVjX3Bvc3Rfbm90aWZpZXJzKVxua2VybmVsL3BhbmljLmM6Njk3Olx0XHRfX2NyYXNoX2tleGVjKE5VTEwpO1xua2VybmVsL3BhbmljLmMtNjk4LVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjUvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDk3OTYKCQkJCQkJCW91dHB1dDogMTcKCQkJCQkJCXRob3VnaHRzOiAzOTkKCQkJCQkJPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5UaG91Z2h0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPioqTXkgQXNzZXNzbWVudCBvZiB0aGUgWmVyb2l6ZSBGdW5jdGlvbiBhbmQgRnV6emluZyBGZWFzaWJpbGl0eSoqCgpPa2F5LCBzbyBgX19jcmFzaF9rZXhlY2AgaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGEga2VybmVsIHBhbmljIG9yIGEgY3Jhc2guIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gaXMsIGZ1enppbmcgdGhpcyBkaXJlY3RseSBpcyBjb21wbGV0ZWx5IGltcHJhY3RpY2FsLiBBIGZ1enplciYjMzk7cyB3aG9sZSBwdXJwb3NlIGlzIHRvIGZpbmQgcGFuaWNzIOKAkyB0aGUgbW9tZW50IGl0ICpkb2VzKiBmaW5kIG9uZSwgaXQmIzM5O3MgZG9uZSBpdHMgam9iIGFuZCByZWJvb3RzIHRoZSB2aXJ0dWFsIG1hY2hpbmUgdG8gY29sbGVjdCB0aGUgY3Jhc2ggbG9nLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0JiMzOTtzIGV4ZWN1dGVkICphZnRlciogdGhlIHBhbmljLCBiZWNhdXNlIHRoZSBwYW5pYyBpdHNlbGYgc2lnbmFscyB0aGUgZW5kIG9mIHRoZSBjdXJyZW50IGZ1enppbmcgcnVuLgoKV2FpdCBhIHNlY29uZOKApiBjb3VsZCBCUEYgKEJlcmtlbGV5IFBhY2tldCBGaWx0ZXIpIHBvdGVudGlhbGx5IHRyaWdnZXIgYGNyYXNoX2tleGVjYD8gTGV0JiMzOTtzIHNlZeKApiBBaCwgeWVzLCB0aGVyZSBpdCBpczogYF9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpYC4gSW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGV2ZW4gaWYgQlBGICpjb3VsZCogY2FsbCBgY3Jhc2hfa2V4ZWNgLCB0aGUgb3V0Y29tZSBpcyBwcmVkaWN0YWJsZS4gSXQgd291bGQgZWl0aGVyIGNyYXNoIHRoZSBzeXN0ZW0gb3V0cmlnaHQgKGlmIGtkdW1wIGlzIGxvYWRlZCksIG9yIGl0IHdvdWxkIGRvIG5vdGhpbmcgKGlmIGtkdW1wIGlzbiYjMzk7dCBsb2FkZWQpLiBFaXRoZXIgd2F5LCBpdCBlbmRzIHRoZSBmdXp6aW5nIHJ1biBpbW1lZGlhdGVseSwgYmVjYXVzZSBhIGNyYXNoIGlzIGp1c3QgY29uc2lkZXJlZCBhIGJ1ZyBhbmQgaXMgaW1tZWRpYXRlbHkgcmVwb3J0ZWQuCgpTbywgcmVhbGlzdGljYWxseSwgYSBmdXp6ZXIgd29uJiMzOTt0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZXhwbG9yZSB0aGUgYHplcm9pemVgIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgYnVncyB3aXRoaW4gdGhlbSwgYmVjYXVzZSBhbnkgZXhlY3V0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gYSBzeXN0ZW0gY3Jhc2guIFRoZSBmdXp6aW5nIHByb2Nlc3MgdGVybWluYXRlcyBiZWZvcmUgaXQgY2FuIGV4cGxvcmUgdGhlIHBvc3QtY3Jhc2ggYmVoYXZpb3VyLgoKTm93LCBob2xkIG9uLi4uIElzIHRoZXJlICphbnkqIG90aGVyIHBhdGggdG8gdHJpZ2dlciB0aGUgYHplcm9pemVgIGZ1bmN0aW9uPyBMZXQmIzM5O3MgY2hlY2suLi4gT2theSwgYGtleS0mZ3Q7dHlwZS0mZ3Q7emVyb2l6ZShrZXkpYCBpcyBvbmx5IGNhbGxlZCBmcm9tIGBrZXlfY3Jhc2hfemVyb2l6ZWAsIHdoaWNoIGlzLCBpbiB0dXJuLCByZWdpc3RlcmVkIHRvIHRoZSBgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0YC4gQW5kIGBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3RgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGNyYXNoX3plcm9pemUoKWAuIEZpbmFsbHksIGBjcmFzaF96ZXJvaXplKClgIGlzIG9ubHkgY2FsbGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAuCgpHb3QgaXQuIFNvIHRoaXMgZW50aXJlIGZlYXR1cmUgaXMgc3RyaWN0bHkgcG9zdC1wYW5pYy4gSXQmIzM5O3MgZGVzaWduZWQgdG8gcnVuICphZnRlciogYSBjcmFzaCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjb25maXJtcyB0aGF0IGEgZnV6emVyIGlzIG5vdCBhIHVzZWZ1bCB0b29sIGhlcmUuIEEgZnV6emVyIGNvbnNpZGVycyBhIHBhbmljIHRvIGJlIGFuIGVycm9yIGFuZCBpbW1lZGlhdGVseSBoYWx0cyB0aGUgZXhlY3V0aW9uLiBJdCYjMzk7cyBub3QgZGVzaWduZWQgdG8gdHJ5IHRvIG1heGltaXplIGNvZGUgY292ZXJhZ2UgKmFmdGVyKiBhIGNyYXNoIGhhcyBoYXBwZW5lZC4KClRoZXJlZm9yZSwgdGhpcyBwYXJ0aWN1bGFyIHBhdGNoIGRvZXNuJiMzOTt0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIGFtZW5hYmxlIHRvIGZ1enppbmcuIEl0JiMzOTtzIHB1cmVseSByZWxhdGVkIHRvIHBvc3QtcGFuaWMgY2xlYW51cCBhbmQgaXMgaW5oZXJlbnRseSBvdXRzaWRlIHRoZSBzY29wZSBvZiBlZmZlY3RpdmUgZnV6emluZy4KCkxldCBtZSBqdXN0IGRvdWJsZS1jaGVjayBvbmUgbW9yZSB0aW1lLCBqdXN0IHRvIGJlIGFic29sdXRlbHkgc3VyZS4uLgoKCjwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjYvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPnRvb2w8L3RkPgoJCQk8dGQ+Z3JlcHBlcjwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RXhwcmVzc2lvbiYjMzQ7OiAmIzM0Oy1cdTAwM2V6ZXJvaXplJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O091dHB1dCYjMzQ7OiAmIzM0O3NlY3VyaXR5L2tleXMva2V5LmM9MTI3Nj1zdGF0aWMgaW50IGtleV9jcmFzaF96ZXJvaXplKHN0cnVjdCBub3RpZmllcl9ibG9jayAqbmIsIHVuc2lnbmVkIGxvbmcgYWN0aW9uLFxuLS1cbnNlY3VyaXR5L2tleXMva2V5LmMtMTI5Ny1cdFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSYjMzk7aW5nIGlzbiYjMzk7dCBzYWZlIGF0IHRoaXMgcG9pbnQgKi9cbnNlY3VyaXR5L2tleXMva2V5LmM6MTI5ODpcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG5zZWN1cml0eS9rZXlzL2tleS5jOjEyOTk6XHRcdFx0a2V5LVx1MDAzZXR5cGUtXHUwMDNlemVyb2l6ZShrZXkpO1xuc2VjdXJpdHkva2V5cy9rZXkuYy0xMzAwLVx0fVxuJiMzNDsKfTwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTx0cj4KCQkJPHRkPjcvMjwvdGQ+CgkJCTx0ZD4yMDI2LzA4LzA3IDEyOjQ2PC90ZD4KCQkJPHRkPmxsbTwvdGQ+CgkJCTx0ZD5wYXRjaC1ldmFsdWF0b3I8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkJPGI+TW9kZWw6PC9iPiA8ZGl2IGlkPSJhaV9kZXRhaWxzX2RpdiI+PHByZT5nZW1pbmktMy4xLXByby1wcmV2aWV3PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkJPGI+UmVzdWx0czo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPm51bGw8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRva2Vuczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPgoJCQkJCQkJaW5wdXQ6IDEwOTIzCgkJCQkJCQlvdXRwdXQ6IDEyMgoJCQkJCQkJdGhvdWdodHM6IDU0NAoJCQkJCQk8L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCTxiPlRob3VnaHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+KipGdXp6aW5nIEFuYWx5c2lzOiBDcmFzaCBaZXJvaXphdGlvbiBQYXRjaCoqCgpPa2F5LCBzbyB0aGlzIHBhdGNoIGlzICpzb2xlbHkqIGNvbmNlcm5lZCB3aXRoIHplcm9pemluZyBzZWNyZXRzLCBzcGVjaWZpY2FsbHkga2V5cyBhbmQgbWVtb3J5LCB1cG9uIGEga2VybmVsIHBhbmljLiBJJiMzOTt2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGtleV9jcmFzaF96ZXJvaXplYCwgYW5kIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAgaXMgYWxzbyByZWdpc3RlcmVkLCBzbyB0aGF0JiMzOTtzIHRoZSBleHRlbnQgb2YgdGhlIGluaXRpYWwgY2hhbmdlLiBJdCYjMzk7cyBlc3NlbnRpYWxseSBqdXN0IGEgYnVuY2ggb2YgYHplcm9pemVgIGNhbGxiYWNrIGltcGxlbWVudGF0aW9ucyB0aGF0IHN1cHBvcnQgdGhlIHNhbWUgZnVuY3Rpb25hbGl0eS4KCk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhpczogKnRoaXMgY29kZSBpcyBvbmx5IGV2ZXIgcmVhY2hhYmxlIGFmdGVyIGEgcGFuaWMgb2NjdXJzLiogRnV6emVycywgYnkgZGVmaW5pdGlvbiwgdHJlYXQgcGFuaWNzIGFzIHRlcm1pbmFsIGV2ZW50cy4gVGhleSBoYWx0IGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB0byBjYXB0dXJlIHRoZSBjcmFzaCBzdGF0ZSBhbmQgZ2VuZXJhdGUgbG9ncy4gVGhleSBhcmVuJiMzOTt0IGRlc2lnbmVkIHRvIGNvbnRpbnVlIGV4cGxvcmluZyBjb2RlIHBhdGhzICphZnRlciogYSBjcmFzaC4gVHJ5aW5nIHRvIGZ1enogcG9zdC1wYW5pYyBjb2RlIGlzIGdvaW5nIHRvIGJlIHBvaW50bGVzcy4gVGhlcmUmIzM5O3Mgc2ltcGx5IG5vIGZ1bmN0aW9uYWwgaW1wYWN0IGhlcmUgdGhhdCBhIGZ1enplciBjYW4gbWVhbmluZ2Z1bGx5IGV4ZXJjaXNlLgoKSSYjMzk7dmUgZG91YmxlLWNoZWNrZWQgYWxsIHRoZSBjaGFuZ2VzIGluIGBkcml2ZXJzL29mL2tleGVjLmNgLCBgaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhgLCBgaW5jbHVkZS9saW51eC9rZXktdHlwZS5oYCwgYGtlcm5lbC9LY29uZmlnLmtleGVjYCwgYGtlcm5lbC9jcmFzaF9jb3JlLmNgLCBgbW0vc2VjcmV0bWVtLmNgLCBhbmQgdGhlIHNlY3VyaXR5IGtleSBmaWxlcy4gVGhleSBhbGwgc2VlbSB0byBiZSB0aWdodGx5IGNvdXBsZWQgdG8gdGhpcyBwYW5pYyB6ZXJvaXphdGlvbiBmdW5jdGlvbmFsaXR5LCB0aGUgYENSQVNIX1pFUk9JWkVgIGZlYXR1cmUsIHRoYXQgaXMgY2FsbGVkIGR1cmluZyBwYW5pYyBhbmQgbm90IGVhcmxpZXIuCgpUaGVyZWZvcmUsIG15IGNvbmNsdXNpb24gaXMgY2xlYXIuIFRoZXJlJiMzOTtzIG5vIHZhbHVlIGluIHRyeWluZyB0byBmdXp6IHRoZXNlIGNoYW5nZXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuCgoKPC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJPC9kZXRhaWxzPgoJCQk8L3RkPgoJCTwvdHI+CgkJCgkJPHRyPgoJCQk8dGQ+OC8yPC90ZD4KCQkJPHRkPjIwMjYvMDgvMDcgMTI6NDY8L3RkPgoJCQk8dGQ+dG9vbDwvdGQ+CgkJCTx0ZD5zZXQtcmVzdWx0czwvdGQ+CgkJCTx0ZD4KCQkJCTxkZXRhaWxzPgoJCQkJCTxzdW1tYXJ5PjBtPC9zdW1tYXJ5PgoJCQkJCQoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5BcmdzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBbXSwKICAmIzM0O0ZvY3VzU3ltYm9scyYjMzQ7OiBbXSwKICAmIzM0O1JlYXNvbmluZyYjMzQ7OiAmIzM0O1RoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHplcm9pemUgc2VjcmV0cyAoa2V5cyBhbmQgc2VjcmV0bWVtKSBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAgYWZ0ZXIgYSBwYW5pYyBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gRnV6emVycyB0cmVhdCBwYW5pY3MgYXMgYnVncyBhbmQgaGFsdCBleGVjdXRpb24gdG8gY29sbGVjdCBjcmFzaCBsb2dzLCBtZWFuaW5nIHRoZXkgY2Fubm90IGVmZmVjdGl2ZWx5IGV4cGxvcmUgb3IgZmluZCBidWdzIGluIHBvc3QtcGFuaWMgY29kZSBwYXRocy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBjYW4gYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC4mIzM0OywKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+ewogICYjMzQ7RW5hYmxlQ29uZmlncyYjMzQ7OiBudWxsLAogICYjMzQ7Rm9jdXNTeW1ib2xzJiMzNDs6IFtdLAogICYjMzQ7UmVhc29uaW5nJiMzNDs6ICYjMzQ7VGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gemVyb2l6ZSBzZWNyZXRzIChrZXlzIGFuZCBzZWNyZXRtZW0pIGR1cmluZyBhIGtlcm5lbCBjcmFzaCBvciBwYW5pYy4gVGhpcyBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYCBhZnRlciBhIHBhbmljIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBGdXp6ZXJzIHRyZWF0IHBhbmljcyBhcyBidWdzIGFuZCBoYWx0IGV4ZWN1dGlvbiB0byBjb2xsZWN0IGNyYXNoIGxvZ3MsIG1lYW5pbmcgdGhleSBjYW5ub3QgZWZmZWN0aXZlbHkgZXhwbG9yZSBvciBmaW5kIGJ1Z3MgaW4gcG9zdC1wYW5pYyBjb2RlIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgZG8gbm90IGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLiYjMzQ7LAogICYjMzQ7V29ydGhGdXp6aW5nJiMzNDs6IGZhbHNlCn08L3ByZT48L2Rpdj48YnI+CgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQkJCgkJCQk8L2RldGFpbHM+CgkJCTwvdGQ+CgkJPC90cj4KCQkKCQk8dHI+CgkJCTx0ZD45LzE8L3RkPgoJCQk8dGQ+MjAyNi8wOC8wNyAxMjo0NjwvdGQ+CgkJCTx0ZD5hY3Rpb248L3RkPgoJCQk8dGQ+SWY8L3RkPgoJCQk8dGQ+CgkJCQk8ZGV0YWlscz4KCQkJCQk8c3VtbWFyeT4wbTwvc3VtbWFyeT4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkJPGI+QXJnczo8L2I+IDxkaXYgaWQ9ImFpX2RldGFpbHNfZGl2Ij48cHJlPnsKICAmIzM0O1dvcnRoRnV6emluZyYjMzQ7OiBmYWxzZQp9PC9wcmU+PC9kaXY+PGJyPgoJCQkJCQoJCQkJCQoJCQkJCQk8Yj5SZXN1bHRzOjwvYj4gPGRpdiBpZD0iYWlfZGV0YWlsc19kaXYiPjxwcmU+bnVsbDwvcHJlPjwvZGl2Pjxicj4KCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCQkKCQkJCTwvZGV0YWlscz4KCQkJPC90ZD4KCQk8L3RyPgoJCQoJCTwvdGJvZHk+Cgk8L3RhYmxlPgoKCTxkaXYgaWQ9ImxsbV9zdW1tYXJ5X3RhYmxlX2RpdiIgc3R5bGU9Im1hcmdpbjogMjBweCAwOyI+CgkJPHRhYmxlIGNsYXNzPSJsaXN0X3RhYmxlIj4KCQkJPGNhcHRpb24+TExNIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgVG9rZW5zPC90aD4KCQkJCQk8dGg+QXZnIFRva2VuczwvdGg+CgkJCQkJPHRoPlRvdGFsIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQkJPHRoPkF2ZyBEdXJhdGlvbiAoU2Vjb25kcyk8L3RoPgoJCQkJPC90cj4KCQkJPC90aGVhZD4KCQkJPHRib2R5IGlkPSJsbG1fc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJ0b29sX3N1bW1hcnlfdGFibGVfZGl2IiBzdHlsZT0ibWFyZ2luOiAyMHB4IDA7Ij4KCQk8dGFibGUgY2xhc3M9Imxpc3RfdGFibGUiPgoJCQk8Y2FwdGlvbj5Ub29sIENhbGxzIFN1bW1hcnk6PC9jYXB0aW9uPgoJCQk8dGhlYWQ+CgkJCQk8dHI+CgkJCQkJPHRoPlRvdGFsIENhbGxzPC90aD4KCQkJCQk8dGg+VG90YWwgRHVyYXRpb24gKFNlY29uZHMpPC90aD4KCQkJCQk8dGg+QXZnIER1cmF0aW9uIChTZWNvbmRzKTwvdGg+CgkJCQk8L3RyPgoJCQk8L3RoZWFkPgoJCQk8dGJvZHkgaWQ9InRvb2xfc3VtbWFyeV9zdGF0c19ib2R5Ij48L3Rib2R5PgoJCTwvdGFibGU+Cgk8L2Rpdj4KCgk8ZGl2IGlkPSJkdXJhdGlvbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+Cgk8ZGl2IGlkPSJ0b2tlbl9jaGFydF9kaXYiIHN0eWxlPSJ3aWR0aDogMTAwJTsgbWFyZ2luOiAyMHB4IDA7IGJvcmRlcjogMXB4OyI+PC9kaXY+CgoJPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iaHR0cHM6Ly93d3cuZ29vZ2xlLmNvbS9qc2FwaSI+PC9zY3JpcHQ+Cgk8c2NyaXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCI+CgkJZ29vZ2xlLmxvYWQoInZpc3VhbGl6YXRpb24iLCAiMSIsIHtwYWNrYWdlczpbImNvcmVjaGFydCJdfSk7CgkJZ29vZ2xlLnNldE9uTG9hZENhbGxiYWNrKGRyYXdDaGFydHMpOwoKCQlmdW5jdGlvbiBkcmF3Q2hhcnRzKCkgewoJCQljb25zdCByYXdEYXRhID0gW3siU3RhcnRlZCI6IjIwMjYtMDgtMDdUMTI6NDU6NTMuODkzMDAzMDAyWiIsIlNlcSI6MCwiTmVzdGluZyI6MCwiVHlwZSI6ImZsb3ciLCJOYW1lIjoicGF0Y2gtdHJpYWdlIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NDM4MjI5NjI5MjMsIkVycm9yIjoiIiwiQXJncyI6Im51bGwiLCJSZXN1bHRzIjoie1xuICBcIkVuYWJsZUNvbmZpZ3NcIjogbnVsbCxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiS01TQU5SZWFzb25pbmdcIjogXCJcIixcbiAgXCJOZWVkc0tNU0FOXCI6IGZhbHNlLFxuICBcIlJlYXNvbmluZ1wiOiBcIlRoZSBwYXRjaCBpbnRyb2R1Y2VzIGEgbWVjaGFuaXNtIHRvIHplcm9pemUgc2VjcmV0cyAoa2V5cyBhbmQgc2VjcmV0bWVtKSBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgY29kZSBpcyBvbmx5IGV4ZWN1dGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAgYWZ0ZXIgYSBwYW5pYyBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gRnV6emVycyB0cmVhdCBwYW5pY3MgYXMgYnVncyBhbmQgaGFsdCBleGVjdXRpb24gdG8gY29sbGVjdCBjcmFzaCBsb2dzLCBtZWFuaW5nIHRoZXkgY2Fubm90IGVmZmVjdGl2ZWx5IGV4cGxvcmUgb3IgZmluZCBidWdzIGluIHBvc3QtcGFuaWMgY29kZSBwYXRocy4gVGhlcmVmb3JlLCB0aGVzZSBjaGFuZ2VzIGRvIG5vdCBoYXZlIGEgZnVuY3Rpb25hbCBpbXBhY3QgdGhhdCBjYW4gYmUgbWVhbmluZ2Z1bGx5IGZ1enplZC5cIixcbiAgXCJXb3J0aEZ1enppbmdcIjogZmFsc2Vcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ1OjUzLjg5MzAwODQ3MVoiLCJTZXEiOjEsIk5lc3RpbmciOjEsIlR5cGUiOiJhY3Rpb24iLCJOYW1lIjoicmVhZC1wYXRjaC1kaWZmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6NTgxNjYzMzkyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6IntcbiAgXCJQYXRjaERpZmZcIjogXCJjb21taXQgNzYwYzgwNDBlN2ViODA0MTUwZmIwODAwNTk1YzkwNjA3NjQ5ZGYzM1xcbkF1dGhvcjogc3l6LWNsdXN0ZXIgXFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXFx1MDAzZVxcbkRhdGU6ICAgRnJpIEF1ZyA3IDEyOjQ1OjUyIDIwMjYgKzAwMDBcXG5cXG4gICAgc3l6LWNsdXN0ZXI6IGFwcGxpZWQgcGF0Y2ggdW5kZXIgcmV2aWV3XFxuXFxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xcbmluZGV4IDAyOTkwM2I5ODZjYmQuLjM2NjM1ZjZjYjkwMDkgMTAwNjQ0XFxuLS0tIGEvZHJpdmVycy9vZi9rZXhlYy5jXFxuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXFxuQEAgLTI0LDcgKzI0LDcgQEBcXG4gXFxuIC8qXFxuICAqIEFkZGl0aW9uYWwgc3BhY2UgbmVlZGVkIGZvciB0aGUgRkRUIGJ1ZmZlciBzbyB0aGF0IHdlIGNhbiBhZGQgaW5pdHJkLFxcbi0gKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzZWFibGUtbWVtb3J5LXJhbmdlIGFuZCBlbGZjb3JlaGRyLlxcbisgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuXFxuICAqL1xcbiAjZGVmaW5lIEZEVF9FWFRSQV9TUEFDRSAweDEwMDBcXG4gXFxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcXG5pbmRleCBiYzA4NzEyNGNkNzhlLi41YzcyMDdjMGJiYTE0IDEwMDY0NFxcbi0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oXFxuKysrIGIvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmhcXG5AQCAtNSw2ICs1LDcgQEBcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2xpbmthZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZmNvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2VsZi5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvbm90aWZpZXIuaFxcdTAwM2VcXG4gXFxuIHN0cnVjdCBraW1hZ2U7XFxuIFxcbkBAIC0zNCw2ICszNSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY19wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cXG4gc3RhdGljIGlubGluZSB2b2lkIGFyY2hfa2V4ZWNfdW5wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cXG4gI2VuZGlmXFxuIFxcbisjaWZkZWYgQ09ORklHX0NSQVNIX1pFUk9JWkVcXG4rZXh0ZXJuIHN0cnVjdCBhdG9taWNfbm90aWZpZXJfaGVhZCBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3Q7XFxuKyNlbmRpZlxcbitcXG4gI2lmbmRlZiBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50XFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpIHsgfVxcbiAjZW5kaWZcXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXFxuaW5kZXggYmI5N2JkM2U1YWY0Zi4uZmYwOTQ0Y2UzNjhmOSAxMDA2NDRcXG4tLS0gYS9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcXG4rKysgYi9pbmNsdWRlL2xpbnV4L2tleS10eXBlLmhcXG5AQCAtMTIyLDYgKzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xcbiBcXHQvKiBjbGVhciB0aGUgZGF0YSBmcm9tIGEga2V5IChvcHRpb25hbCkgKi9cXG4gXFx0dm9pZCAoKmRlc3Ryb3kpKHN0cnVjdCBrZXkgKmtleSk7XFxuIFxcbitcXHQvKiBzY3J1YiB0aGUga2V5IG1hdGVyaWFsIHdpdGhvdXQgZnJlZSdpbmcgKG9wdGlvbmFsKVxcbitcXHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxcbitcXHQgKiAgIGNyYXNoIGR1bXBzXFxuK1xcdCAqIC0gY2FsbGVkIGZyb20gdGhlIHBhbmljIHBhdGggd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kIHByZWVtcHRpb25cXG4rXFx0ICogICBkaXNhYmxlZFxcbitcXHQgKiAtIG11c3Qgbm90IHNsZWVwLCBhbGxvY2F0ZSwgZnJlZSBvciB0YWtlIGxvY2tzXFxuK1xcdCAqL1xcbitcXHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcXG4rXFxuIFxcdC8qIGRlc2NyaWJlIGEga2V5ICovXFxuIFxcdHZvaWQgKCpkZXNjcmliZSkoY29uc3Qgc3RydWN0IGtleSAqa2V5LCBzdHJ1Y3Qgc2VxX2ZpbGUgKnApO1xcbiBcXG5kaWZmIC0tZ2l0IGEva2VybmVsL0tjb25maWcua2V4ZWMgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xcbmluZGV4IDE1NjMyMzU4YmNmNzEuLjkyYWIwYTY5YzhlYzYgMTAwNjQ0XFxuLS0tIGEva2VybmVsL0tjb25maWcua2V4ZWNcXG4rKysgYi9rZXJuZWwvS2NvbmZpZy5rZXhlY1xcbkBAIC0xNzksNCArMTc5LDEyIEBAIGNvbmZpZyBDUkFTSF9NQVhfTUVNT1JZX1JBTkdFU1xcbiBcXHQgIHRoZSBjb21wdXRhdGlvbiBiZWhpbmQgdGhlIHZhbHVlIHByb3ZpZGVkIHRocm91Z2ggdGhlXFxuIFxcdCAgL3N5cy9rZXJuZWwvY3Jhc2hfZWxmY29yZWhkcl9zaXplIGF0dHJpYnV0ZS5cXG4gXFxuK2NvbmZpZyBDUkFTSF9aRVJPSVpFXFxuK1xcdGJvb2wgXFxcIlplcm9pemUgc2VjcmV0cyBvbiBwYW5pY1xcXCJcXG4rXFx0ZGVwZW5kcyBvbiBDUkFTSF9EVU1QXFxuK1xcdGhlbHBcXG4rXFx0ICBXaXBlIHNlY3JldHMgKGUuZy4ga2VybmVsIGtleXJpbmcgYW5kIG1lbWZkX3NlY3JldCBwYWdlcykgb24gY3Jhc2ggb3IgcGFuaWMuXFxuK1xcbitcXHQgIElmIHVuc3VyZSwgc2F5IE4uXFxuK1xcbiBlbmRtZW51XFxuZGlmZiAtLWdpdCBhL2tlcm5lbC9jcmFzaF9jb3JlLmMgYi9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcXG4tLS0gYS9rZXJuZWwvY3Jhc2hfY29yZS5jXFxuKysrIGIva2VybmVsL2NyYXNoX2NvcmUuY1xcbkBAIC0yMyw2ICsyMyw3IEBAXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9vYmp0b29sLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9kZWxheS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcGFuaWMuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3RpbWVrZWVwaW5nLmhcXHUwMDNlXFxuIFxcbiAjaW5jbHVkZSBcXHUwMDNjYXNtL3BhZ2UuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2FzbS9zZWN0aW9ucy5oXFx1MDAzZVxcbkBAIC0zMyw2ICszNCwyMiBAQFxcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xcbiBub3RlX2J1Zl90IF9fcGVyY3B1ICpjcmFzaF9ub3RlcztcXG4gXFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxcbitBVE9NSUNfTk9USUZJRVJfSEVBRChjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QpO1xcbitFWFBPUlRfU1lNQk9MX0dQTChjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3QpO1xcbitcXG4rc3RhdGljIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKVxcbit7XFxuK1xcdGt0aW1lX3QgemVyb2l6ZV9zdGFydCA9IGt0aW1lX2dldCgpO1xcbitcXG4rXFx0cHJfaW5mbyhcXFwiV2lwaW5nIHNlbnNpdGl2ZSBzZWNyZXRzLi4uXFxcXG5cXFwiKTtcXG4rXFx0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgMCwgTlVMTCk7XFxuK1xcdHByX2luZm8oXFxcIkRvbmUgaW4gJWxsZCB1c1xcXFxuXFxcIiwga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcXG4rfVxcbisjZWxzZVxcbitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiAvKiB0aW1lIHRvIHdhaXQgZm9yIHBvc3NpYmxlIERNQSB0byBmaW5pc2ggYmVmb3JlIHN0YXJ0aW5nIHRoZSBrZHVtcCBrZXJuZWxcXG4gICogd2hlbiBhIENNQSByZXNlcnZhdGlvbiBpcyB1c2VkXFxuICAqL1xcbkBAIC0xNDIsNiArMTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcXG4gXFx0XFx0XFx0Y3Jhc2hfc2F2ZV92bWNvcmVpbmZvKCk7XFxuIFxcdFxcdFxcdG1hY2hpbmVfY3Jhc2hfc2h1dGRvd24oXFx1MDAyNmZpeGVkX3JlZ3MpO1xcbiBcXHRcXHRcXHRjcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEoKTtcXG4rXFx0XFx0XFx0Y3Jhc2hfemVyb2l6ZSgpO1xcbiBcXHRcXHRcXHRtYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTtcXG4gXFx0XFx0fVxcbiBcXHRcXHRrZXhlY191bmxvY2soKTtcXG5kaWZmIC0tZ2l0IGEvbW0vc2VjcmV0bWVtLmMgYi9tbS9zZWNyZXRtZW0uY1xcbmluZGV4IGQyOTg2NTA3NWI2ZWEuLjUzZjYyOWQ2NjMzYzEgMTAwNjQ0XFxuLS0tIGEvbW0vc2VjcmV0bWVtLmNcXG4rKysgYi9tbS9zZWNyZXRtZW0uY1xcbkBAIC0xMyw5ICsxMywxMSBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvYml0b3BzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9wcmludGsuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3BhZ2VtYXAuaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L25vdGlmaWVyLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zeXNjYWxscy5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcHNldWRvX2ZzLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9zZWNyZXRtZW0uaFxcdTAwM2VcXG4rI2luY2x1ZGUgXFx1MDAzY2xpbnV4L2NyYXNoX2NvcmUuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NldF9tZW1vcnkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3NjaGVkL3NpZ25hbC5oXFx1MDAzZVxcbiBcXG5AQCAtMTg3LDYgKzE4OSw1MCBAQCBzdGF0aWMgY29uc3Qgc3RydWN0IGlub2RlX29wZXJhdGlvbnMgc2VjcmV0bWVtX2lvcHMgPSB7XFxuIFxcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzZWNyZXRtZW1fbW50O1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXFxuKyAqIHByZWVtcHRpb24gZGlzYWJsZWRcXG4rICovXFxuK3N0YXRpYyBpbnQgc2VjcmV0bWVtX2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZ1xcbitcXHRcXHRhY3Rpb24sIHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcXG4rXFx0c3RydWN0IGlub2RlICppbm9kZTtcXG4rXFxuK1xcdGlmICghc2VjcmV0bWVtX21udClcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHRzYiA9IHNlY3JldG1lbV9tbnQtXFx1MDAzZW1udF9zYjtcXG4rXFxuK1xcdC8qIElmIHRoZSBsaXN0IHdhcyBtb2RpZmllZCBpbiB0aGUgZXhhY3QgbW9tZW50IHdlIHBhbmljJ2VkLCBpdCBtaWdodCBiZVxcbitcXHQgKiBpbiBhbiBpbmNvbnNpc3RlbnQgc3RhdGUgdGhhdCB3b3VsZCBiZSB1bnNhZmUgdG8gaXRlcmF0ZS4gSWYgd2UgY2FuJ3RcXG4rXFx0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0J3MgYWxsIHdlIGNhbiBkbyBoZXJlLlxcbitcXHQgKi9cXG4rXFx0aWYgKCFzcGluX3RyeWxvY2soXFx1MDAyNnNiLVxcdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcXG4rXFx0XFx0cHJfY3JpdChcXFwiY3Jhc2hfemVyb2l6ZTogY2FuJ3QgYWNxdWlyZSBzZWNyZXRtZW0gc3VwZXJibG9jayBsb2NrLlxcXFxuXFxcIlxcbitcXHRcXHRcXHQgXFxcImNyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHR9XFxuK1xcbitcXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcXHUwMDI2c2ItXFx1MDAzZXNfaW5vZGVzLCBpX3NiX2xpc3QpIHtcXG4rXFx0XFx0WEFfU1RBVEUoeGFzLCBcXHUwMDI2aW5vZGUtXFx1MDAzZWlfbWFwcGluZy1cXHUwMDNlaV9wYWdlcywgMCk7XFxuK1xcdFxcdHN0cnVjdCBmb2xpbyAqZm9saW87XFxuK1xcbitcXHRcXHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSdyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopICovXFxuK1xcdFxcdHhhc19mb3JfZWFjaChcXHUwMDI2eGFzLCBmb2xpbywgVUxPTkdfTUFYKSB7XFxuK1xcdFxcdFxcdGlmICh4YXNfcmV0cnkoXFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcXG4rXFx0XFx0XFx0XFx0Y29udGludWU7XFxuK1xcdFxcdFxcdGlub2RlLVxcdTAwM2VpX21hcHBpbmctXFx1MDAzZWFfb3BzLVxcdTAwM2VmcmVlX2ZvbGlvKGZvbGlvKTtcXG4rXFx0XFx0fVxcbitcXHR9XFxuK1xcdC8qIG9mZiB0byBrZXhlYygpISAqL1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0gc2VjcmV0bWVtX2NyYXNoX3plcm9pemVcXG4rfTtcXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiBzdGF0aWMgc3RydWN0IGZpbGUgKnNlY3JldG1lbV9maWxlX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGZsYWdzKVxcbiB7XFxuIFxcdHN0cnVjdCBmaWxlICpmaWxlO1xcbkBAIC0yNjMsNiArMzA5LDEwIEBAIHN0YXRpYyBpbnQgX19pbml0IHNlY3JldG1lbV9pbml0KHZvaWQpXFxuIFxcdGlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpXFxuIFxcdFxcdHJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuK1xcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCBcXHUwMDI2c2VjcmV0bWVtX3plcm9pemVfbmIpO1xcbisjZW5kaWZcXG4rXFxuIFxcdHJldHVybiAwO1xcbiB9XFxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmMgYi9zZWN1cml0eS9rZXlzL2JpZ19rZXkuY1xcbmluZGV4IDI2OGY3MDJkZjM4MGUuLmFkODUzN2RkYTcwZmEgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcXG4rKysgYi9zZWN1cml0eS9rZXlzL2JpZ19rZXkuY1xcbkBAIC0zNSw2ICszNSw4IEBAIHN0cnVjdCBiaWdfa2V5X3BheWxvYWQge1xcbiAgKi9cXG4gI2RlZmluZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEIChzaXplb2Yoc3RydWN0IGlub2RlKSArIHNpemVvZihzdHJ1Y3QgZGVudHJ5KSlcXG4gXFxuK3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xcbitcXG4gLypcXG4gICogYmlnX2tleSBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cXG4gICogYXJiaXRyYXJ5IGJsb2Igb2YgZGF0YSBhcyB0aGUgcGF5bG9hZFxcbkBAIC00Niw2ICs0OCw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV9iaWdfa2V5ID0ge1xcbiBcXHQuaW5zdGFudGlhdGVcXHRcXHQ9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLFxcbiBcXHQucmV2b2tlXFx0XFx0XFx0PSBiaWdfa2V5X3Jldm9rZSxcXG4gXFx0LmRlc3Ryb3lcXHRcXHQ9IGJpZ19rZXlfZGVzdHJveSxcXG4rXFx0Lnplcm9pemVcXHRcXHQ9IGJpZ19rZXlfemVyb2l6ZSxcXG4gXFx0LmRlc2NyaWJlXFx0XFx0PSBiaWdfa2V5X2Rlc2NyaWJlLFxcbiBcXHQucmVhZFxcdFxcdFxcdD0gYmlnX2tleV9yZWFkLFxcbiBcXHQudXBkYXRlXFx0XFx0XFx0PSBiaWdfa2V5X3VwZGF0ZSxcXG5AQCAtMjc5LDYgKzI4MiwxOCBAQCBsb25nIGJpZ19rZXlfcmVhZChjb25zdCBzdHJ1Y3Qga2V5ICprZXksIGNoYXIgKmJ1ZmZlciwgc2l6ZV90IGJ1ZmxlbilcXG4gXFx0cmV0dXJuIHJldDtcXG4gfVxcbiBcXG4rc3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcXG4re1xcbitcXHRzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkICpwYXlsb2FkID0gdG9fYmlnX2tleV9wYXlsb2FkKGtleS1cXHUwMDNlcGF5bG9hZCk7XFxuK1xcbitcXHRpZiAocGF5bG9hZC1cXHUwMDNlZGF0YSkge1xcbitcXHRcXHRpZiAocGF5bG9hZC1cXHUwMDNlbGVuZ3RoIFxcdTAwM2UgQklHX0tFWV9GSUxFX1RIUkVTSE9MRClcXG4rXFx0XFx0XFx0bWVtemVyb19leHBsaWNpdChwYXlsb2FkLVxcdTAwM2VkYXRhLCBDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFKTtcXG4rXFx0XFx0ZWxzZVxcbitcXHRcXHRcXHRtZW16ZXJvX2V4cGxpY2l0KHBheWxvYWQtXFx1MDAzZWRhdGEsIHBheWxvYWQtXFx1MDAzZWxlbmd0aCk7XFxuK1xcdH1cXG4rfVxcbitcXG4gLypcXG4gICogUmVnaXN0ZXIga2V5IHR5cGVcXG4gICovXFxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmMgYi9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXFxuaW5kZXggNTljYjc3YjIzN2IzNi4uOWY1NmZhOWI0YWFmNCAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jXFxuKysrIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuY1xcbkBAIC05NzAsMTEgKzk3MCwyMyBAQCBzdGF0aWMgdm9pZCBlbmNyeXB0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcXG4re1xcbitcXHRzdHJ1Y3QgZW5jcnlwdGVkX2tleV9wYXlsb2FkICplcGF5bG9hZCA9IGtleS1cXHUwMDNlcGF5bG9hZC5kYXRhWzBdO1xcbitcXG4rXFx0aWYgKCFlcGF5bG9hZClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWVtemVyb19leHBsaWNpdChlcGF5bG9hZC1cXHUwMDNlcGF5bG9hZF9kYXRhLFxcbitcXHRcXHRcXHQgZXBheWxvYWQtXFx1MDAzZXBheWxvYWRfZGF0YWxlbiArIGVwYXlsb2FkLVxcdTAwM2VkYXRhYmxvYl9sZW4pO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfZW5jcnlwdGVkID0ge1xcbiBcXHQubmFtZSA9IFxcXCJlbmNyeXB0ZWRcXFwiLFxcbiBcXHQuaW5zdGFudGlhdGUgPSBlbmNyeXB0ZWRfaW5zdGFudGlhdGUsXFxuIFxcdC51cGRhdGUgPSBlbmNyeXB0ZWRfdXBkYXRlLFxcbiBcXHQuZGVzdHJveSA9IGVuY3J5cHRlZF9kZXN0cm95LFxcbitcXHQuemVyb2l6ZSA9IGVuY3J5cHRlZF96ZXJvaXplLFxcbiBcXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQucmVhZCA9IGVuY3J5cHRlZF9yZWFkLFxcbiB9O1xcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2tleS5jIGIvc2VjdXJpdHkva2V5cy9rZXkuY1xcbmluZGV4IGIzNGE2NGQ4MWQ0N2EuLjU2NzNkY2M4YzVkMjMgMTAwNjQ0XFxuLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMva2V5LmNcXG5AQCAtMTIsNiArMTIsNyBAQFxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2xhYi5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvc2VjdXJpdHkuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFx1MDAzY2xpbnV4L3dvcmtxdWV1ZS5oXFx1MDAzZVxcbisjaW5jbHVkZSBcXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXFx1MDAzZVxcbiAjaW5jbHVkZSBcXHUwMDNjbGludXgvcmFuZG9tLmhcXHUwMDNlXFxuICNpbmNsdWRlIFxcdTAwM2NsaW51eC9lcnIuaFxcdTAwM2VcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuQEAgLTEyNjgsNiArMTI2OSw0NCBAQCB2b2lkIHVucmVnaXN0ZXJfa2V5X3R5cGUoc3RydWN0IGtleV90eXBlICprdHlwZSlcXG4gfVxcbiBFWFBPUlRfU1lNQk9MKHVucmVnaXN0ZXJfa2V5X3R5cGUpO1xcbiBcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXFxuKyAqIHByZWVtcHRpb24gZGlzYWJsZWRcXG4rICovXFxuK3N0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuK1xcdFxcdHZvaWQgKmRhdGEpXFxuK3tcXG4rXFx0c3RydWN0IHJiX25vZGUgKm5vZGU7XFxuK1xcbitcXHQvKiBJZiB3ZSBjYW4ndCBhY3F1aXJlIHRoZSBsb2NrLCB0aGUgcmJ0cmVlIG1pZ2h0IGJlIGluIGFuIGluY29uc2lzdGVudFxcbitcXHQgKiBzdGF0ZS4gVGhhdCdzIGFsbCB3ZSBjYW4gZG8gdGhlbiwgYXMgdGhlcmUncyBubyBwb2ludCB0byB3YWl0aW5nXFxuK1xcdCAqIGF0IHRoaXMgc3RhZ2UuXFxuK1xcdCAqL1xcbitcXHRpZiAoIXNwaW5fdHJ5bG9jayhcXHUwMDI2a2V5X3NlcmlhbF9sb2NrKSkge1xcbitcXHRcXHRwcl9jcml0KFxcXCJjcmFzaF96ZXJvaXplOiBjYW4ndCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxcXG5cXFwiKTtcXG4rXFx0XFx0cmV0dXJuIE5PVElGWV9ET05FO1xcbitcXHR9XFxuK1xcbitcXHRmb3IgKG5vZGUgPSByYl9maXJzdChcXHUwMDI2a2V5X3NlcmlhbF90cmVlKTsgbm9kZTsgbm9kZSA9IHJiX25leHQobm9kZSkpIHtcXG4rXFx0XFx0c3RydWN0IGtleSAqa2V5ID0gcmJfZW50cnkobm9kZSwgc3RydWN0IGtleSwgc2VyaWFsX25vZGUpO1xcbitcXG4rXFx0XFx0aWYgKGtleS1cXHUwMDNldHlwZSA9PSBcXHUwMDI2a2V5X3R5cGVfa2V5cmluZyB8fFxcbitcXHRcXHQgICAga2V5LVxcdTAwM2VzdGF0ZSA9PSBLRVlfSVNfVU5JTlNUQU5USUFURUQpXFxuK1xcdFxcdFxcdGNvbnRpbnVlO1xcbitcXG4rXFx0XFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSdpbmcgaXNuJ3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovXFxuK1xcdFxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXplcm9pemUpXFxuK1xcdFxcdFxcdGtleS1cXHUwMDNldHlwZS1cXHUwMDNlemVyb2l6ZShrZXkpO1xcbitcXHR9XFxuK1xcdC8qIG9mZiB0byBrZXhlYygpISAqL1xcbitcXHRyZXR1cm4gTk9USUZZX0RPTkU7XFxuK31cXG4rXFxuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7XFxuK1xcdC5ub3RpZmllcl9jYWxsID0ga2V5X2NyYXNoX3plcm9pemVcXG4rfTtcXG4rI2VuZGlmIC8qIENPTkZJR19DUkFTSF9aRVJPSVpFICovXFxuK1xcbiAvKlxcbiAgKiBJbml0aWFsaXNlIHRoZSBrZXkgbWFuYWdlbWVudCBzdGF0ZS5cXG4gICovXFxuQEAgLTEyOTAsNCArMTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXFxuIFxcbiBcXHRyYl9pbnNlcnRfY29sb3IoXFx1MDAyNnJvb3Rfa2V5X3VzZXIubm9kZSxcXG4gXFx0XFx0XFx0XFx1MDAyNmtleV91c2VyX3RyZWUpO1xcbitcXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXFxuK1xcdGF0b21pY19ub3RpZmllcl9jaGFpbl9yZWdpc3RlcihcXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LFxcbitcXHRcXHRcXHRcXHUwMDI2a2V5X2NyYXNoX3plcm9pemVfbmIpO1xcbisjZW5kaWZcXG4gfVxcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuYyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXFxuaW5kZXggMDUwOWQ5OTU1ZjJhNi4uZjE1OWZhZWFmZTIzYSAxMDA2NDRcXG4tLS0gYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xcbisrKyBiL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jXFxuQEAgLTMyNSwxMSArMzI1LDI1IEBAIHN0YXRpYyB2b2lkIHRydXN0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXFxuIFxcdGtmcmVlX3NlbnNpdGl2ZShrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXSk7XFxuIH1cXG4gXFxuK3N0YXRpYyB2b2lkIHRydXN0ZWRfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXFxuK3tcXG4rXFx0c3RydWN0IHRydXN0ZWRfa2V5X3BheWxvYWQgKnAgPSBrZXktXFx1MDAzZXBheWxvYWQuZGF0YVswXTtcXG4rXFxuK1xcdGlmICghcClcXG4rXFx0XFx0cmV0dXJuO1xcbitcXG4rXFx0bWVtemVyb19leHBsaWNpdChwLVxcdTAwM2VrZXksIHNpemVvZihwLVxcdTAwM2VrZXkpKTtcXG4rXFx0bWVtemVyb19leHBsaWNpdChwLVxcdTAwM2VibG9iLCBzaXplb2YocC1cXHUwMDNlYmxvYikpO1xcbitcXHRwLVxcdTAwM2VrZXlfbGVuID0gMDtcXG4rXFx0cC1cXHUwMDNlYmxvYl9sZW4gPSAwO1xcbit9XFxuK1xcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdHJ1c3RlZCA9IHtcXG4gXFx0Lm5hbWUgPSBcXFwidHJ1c3RlZFxcXCIsXFxuIFxcdC5pbnN0YW50aWF0ZSA9IHRydXN0ZWRfaW5zdGFudGlhdGUsXFxuIFxcdC51cGRhdGUgPSB0cnVzdGVkX3VwZGF0ZSxcXG4gXFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXFxuK1xcdC56ZXJvaXplID0gdHJ1c3RlZF96ZXJvaXplLFxcbiBcXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQucmVhZCA9IHRydXN0ZWRfcmVhZCxcXG4gfTtcXG5kaWZmIC0tZ2l0IGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuYyBiL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NFxcbi0tLSBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmNcXG4rKysgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXFxuQEAgLTE1LDYgKzE1LDcgQEBcXG4gI2luY2x1ZGUgXFxcImludGVybmFsLmhcXFwiXFxuIFxcbiBzdGF0aWMgaW50IGxvZ29uX3ZldF9kZXNjcmlwdGlvbihjb25zdCBjaGFyICpkZXNjKTtcXG4rc3RhdGljIHZvaWQgdXNlcl96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSk7XFxuIFxcbiAvKlxcbiAgKiB1c2VyIGRlZmluZWQga2V5cyB0YWtlIGFuIGFyYml0cmFyeSBzdHJpbmcgYXMgdGhlIGRlc2NyaXB0aW9uIGFuZCBhblxcbkBAIC0yOCw2ICsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xcbiBcXHQudXBkYXRlXFx0XFx0XFx0PSB1c2VyX3VwZGF0ZSxcXG4gXFx0LnJldm9rZVxcdFxcdFxcdD0gdXNlcl9yZXZva2UsXFxuIFxcdC5kZXN0cm95XFx0XFx0PSB1c2VyX2Rlc3Ryb3ksXFxuK1xcdC56ZXJvaXplXFx0XFx0PSB1c2VyX3plcm9pemUsXFxuIFxcdC5kZXNjcmliZVxcdFxcdD0gdXNlcl9kZXNjcmliZSxcXG4gXFx0LnJlYWRcXHRcXHRcXHQ9IHVzZXJfcmVhZCxcXG4gfTtcXG5AQCAtNDgsNiArNTAsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfbG9nb24gPSB7XFxuIFxcdC51cGRhdGVcXHRcXHRcXHQ9IHVzZXJfdXBkYXRlLFxcbiBcXHQucmV2b2tlXFx0XFx0XFx0PSB1c2VyX3Jldm9rZSxcXG4gXFx0LmRlc3Ryb3lcXHRcXHQ9IHVzZXJfZGVzdHJveSxcXG4rXFx0Lnplcm9pemVcXHRcXHQ9IHVzZXJfemVyb2l6ZSxcXG4gXFx0LmRlc2NyaWJlXFx0XFx0PSB1c2VyX2Rlc2NyaWJlLFxcbiBcXHQudmV0X2Rlc2NyaXB0aW9uXFx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXFxuIH07XFxuQEAgLTE1Miw2ICsxNTUsMTQgQEAgdm9pZCB1c2VyX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxcbiBcXG4gRVhQT1JUX1NZTUJPTF9HUEwodXNlcl9kZXN0cm95KTtcXG4gXFxuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXFxuK3tcXG4rXFx0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVxcdTAwM2VwYXlsb2FkLmRhdGFbMF07XFxuK1xcbitcXHRpZiAodXBheWxvYWQpXFxuK1xcdFxcdG1lbXplcm9fZXhwbGljaXQodXBheWxvYWQtXFx1MDAzZWRhdGEsIHVwYXlsb2FkLVxcdTAwM2VkYXRhbGVuKTtcXG4rfVxcbitcXG4gLypcXG4gICogZGVzY3JpYmUgdGhlIHVzZXIga2V5XFxuICAqL1xcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NTo1NC40NzUyNzM2NTRaIiwiU2VxIjoyLCJOZXN0aW5nIjoxLCJUeXBlIjoiYWdlbnQiLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJiZXN0LWV4cGVuc2l2ZSIsIkR1cmF0aW9uIjo0MzI0MDY3MDMyMSwiRXJyb3IiOiIiLCJBcmdzIjoibnVsbCIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiJZb3UgYXJlIGFuIGV4cGVydCBMaW51eCBrZXJuZWwgbWFpbnRhaW5lci5cbllvdXIgam9iIGlzIHRvIHJldmlldyBhIHByb3ZpZGVkIHBhdGNoIHNlcmllcyBhbmQgZGV0ZXJtaW5lXG5pZiBpdCBtYWtlcyBmdW5jdGlvbmFsIGNoYW5nZXMgdG8gdGhlIGtlcm5lbCB0aGF0IHNob3VsZCBiZSBmdXp6ZWQuXG5cbklNUE9SVEFOVDogVGhlIGNoYW5nZXMgaGF2ZSBBTFJFQURZIGJlZW4gYXBwbGllZCBhbmQgY29tbWl0dGVkIGFzIHRoZSBIRUFEIGNvbW1pdCBpblxueW91ciB3b3Jrc3BhY2UuIERvIE5PVCByZWx5IG9uIHlvdXIgaW50ZXJuYWwga25vd2xlZGdlIG9mIHRoZSBrZXJuZWwuIFlvdSBtdXN0IGFjdGl2ZWx5XG51c2UgeW91ciBjb2RlIGFjY2VzcyB0b29scyB0byBleGFtaW5lIHRoZSBhY3R1YWwgc291cmNlIGNvZGUgYW5kIGNvbmZpcm0gYW55IGFzc3VtcHRpb25zLlxuXG5SZXR1cm4gV29ydGhGdXp6aW5nPWZhbHNlIGlmIHRoZSBwYXRjaCBvbmx5IGNvbnRhaW5zOlxuLSBNb2RpZmljYXRpb25zIHRvIERvY3VtZW50YXRpb24vLCBLY29uZmlnIGZpbGVzLCBvciBjb2RlIGNvbW1lbnRzLlxuLSBQdXJlbHkgZGVjb3JhdGl2ZSBjaGFuZ2VzLCBzdWNoIGFzIGxvZ2dpbmcgKGUuZy4sIHByX2VyciwgcHJpbnRrKSBvciB0cmFjZXBvaW50cy5cbi0gQ2hhbmdlcyB0byBudW1lcmljIGNvbnN0YW50cyBvciBtYWNyb3MgdGhhdCBkbyBub3QgZnVuY3Rpb25hbGx5IGFsdGVyIGV4ZWN1dGlvbiBmbG93LlxuLSBDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzIGxpa2UgR0NFIG9yIFFFTVUsXG4gIGV2ZW4gd2hlbiB1dGlsaXppbmcgc29mdHdhcmUtZW11bGF0ZWQgaGFyZHdhcmUgKGUuZy4sIHVzYiBnYWRnZXQsIG1hYzgwMjExX2h3c2ltKS5cbi0gQ29kZSBpbiB2ZW5kb3Itc3BlY2lmaWMgUENJZSBzd2l0Y2gsIFNtYXJ0TklDLCBvciBHUFUgZHJpdmVycyAoZS5nLiwgbWx4c3csIHBkc19jb3JlLCBxZWQsXG4gIGlvbmljLCBhbWRncHUpIHRoYXQgcmVxdWlyZSBwaHlzaWNhbCBQQ0llIGhhcmR3YXJlIGNhcmRzIG5vdCBlbXVsYXRlZCBpbiBzdGFuZGFyZCBRRU1VLlxuLSBEcml2ZXIgLnJlbW92ZSwgLnNodXRkb3duLCBvciBwY2lfdW5yZWdpc3Rlcl9kcml2ZXIgdGVhcmRvd24gY2FsbGJhY2tzIChlLmcuLCBpZ2JfcmVtb3ZlKVxuICB0aGF0IGFyZSBleGVjdXRlZCBvbmx5IGR1cmluZyBQQ0kgaG90LXVucGx1ZyBvciBzeXNmcyBkcml2ZXIgdW5iaW5kIG9wZXJhdGlvbnMuXG5cbklmIGl0IG1vZGlmaWVzIHJlYWNoYWJsZSBjb3JlIGtlcm5lbCBsb2dpYywgZHJpdmVycywgb3IgYXJjaGl0ZWN0dXJlcywgdXNlIHlvdXIgY29kZSBzZWFyY2hcbnRvb2xzIHRvIHZlcmlmeSB0aGUgY29kZSBjYW4gYmUgZXhlY3V0ZWQsIHRoZW4gcmV0dXJuIFdvcnRoRnV6emluZz10cnVlLlxuXG5XaGVuIHJldHVybmluZyBXb3J0aEZ1enppbmc9dHJ1ZSwgeW91IE1VU1QgQUxTTzpcbjEuIEV4dHJhY3QgYW55IHNwZWNpZmljIGtlcm5lbCBmdW5jdGlvbnMgdGhhdCBzaG91bGQgYmUgaGVhdmlseSBmdXp6ZWQgaW50byBGb2N1c1N5bWJvbHMuXG4gICBBdm9pZCBsaXN0aW5nIGdlbmVyaWMgaG90LXBhdGggZnVuY3Rpb25zIHRvIHByZXZlbnQgc2tld2VkIHRlc3QgZGlzdHJpYnV0aW9ucy5cbiAgIFByZWZlciBub24tc3RhdGljLCBub24taW5saW5lZCBBUEkgZW50cnlwb2ludCBmdW5jdGlvbnMgb3ZlciBpbnRlcm5hbCBzdGF0aWMgaGVscGVyIGZ1bmN0aW9uc1xuICAgKHdoaWNoIGFyZSBpbmxpbmVkIGJ5IHRoZSBjb21waWxlciBhbmQgZG8gbm90IGhhdmUgZGlzdGluY3Qgc3ltYm9sIGFkZHJlc3NlcykuXG4yLiBJZGVudGlmeSBhbnkgc3BlY2lmaWMgQ09ORklHXyBvcHRpb25zIHJlcXVpcmVkIHRvIHByb3Blcmx5IHRlc3QgdGhpcyBuZXcvbW9kaWZpZWQgZmVhdHVyZS5cbiAgIEdvIGFuZCBsb29rIGludG8gdGhlIEtjb25maWcgZmlsZXMgYW5kIGNoZWNrIGZvciBpZmRlZnMgYXJvdW5kIHRoZSBjb2RlLCBkbyBub3QgbWFrZSBhc3N1bXB0aW9ucy5cbiAgIEFsc28gY2hlY2sgXCJkZXBlbmRzIG9uXCIgbGluZXMgaW4gS2NvbmZpZyB0byBpbmNsdWRlIGFueSBub24tc3RhbmRhcmQgcGFyZW50IHN1YnN5c3RlbSBjb25maWdzXG4gICBuZWVkZWQgZm9yIEtidWlsZCB0byBjb21waWxlIHRoZSBjb2RlIHN0YXRpY2FsbHkgaW50byB2bWxpbnV4LiBMaXN0IHRoZW0gaW4gdGhlIEVuYWJsZUNvbmZpZ3NcbiAgIG91dHB1dCBhcnJheSwgYW5kIERPIE5PVCBhZGQgYSAnQ09ORklHXycgcHJlZml4IChlLmcuLCByZXR1cm4gXCJORVRfSVBWNFwiIGluc3RlYWQgb2YgXCJDT05GSUdfTkVUX0lQVjRcIikuXG5QcmVmZXIgY2FsbGluZyBzZXZlcmFsIHRvb2xzIGF0IHRoZSBzYW1lIHRpbWUgdG8gc2F2ZSByb3VuZC10cmlwcy5cblxuXG5Vc2Ugc2V0LXJlc3VsdHMgdG9vbCB0byBwcm92aWRlIHJlc3VsdHMgb2YgdGhlIGFuYWx5c2lzLlxuSXQgbXVzdCBiZSBjYWxsZWQgZXhhY3RseSBvbmNlIGJlZm9yZSB0aGUgZmluYWwgcmVwbHkuXG5JZ25vcmUgcmVzdWx0cyBvZiB0aGlzIHRvb2wuXG4iLCJQcm9tcHQiOiJGb3IgeW91ciBjb252ZW5pZW5jZSwgaGVyZSBpcyB0aGUgZGlmZiBvZiB0aGUgY2hhbmdlczpcbmNvbW1pdCA3NjBjODA0MGU3ZWI4MDQxNTBmYjA4MDA1OTVjOTA2MDc2NDlkZjMzXG5BdXRob3I6IHN5ei1jbHVzdGVyIFx1MDAzY3RyaWFnZUBzeXprYWxsZXIuY29tXHUwMDNlXG5EYXRlOiAgIEZyaSBBdWcgNyAxMjo0NTo1MiAyMDI2ICswMDAwXG5cbiAgICBzeXotY2x1c3RlcjogYXBwbGllZCBwYXRjaCB1bmRlciByZXZpZXdcblxuZGlmZiAtLWdpdCBhL2RyaXZlcnMvb2Yva2V4ZWMuYyBiL2RyaXZlcnMvb2Yva2V4ZWMuY1xuaW5kZXggMDI5OTAzYjk4NmNiZC4uMzY2MzVmNmNiOTAwOSAxMDA2NDRcbi0tLSBhL2RyaXZlcnMvb2Yva2V4ZWMuY1xuKysrIGIvZHJpdmVycy9vZi9rZXhlYy5jXG5AQCAtMjQsNyArMjQsNyBAQFxuIFxuIC8qXG4gICogQWRkaXRpb25hbCBzcGFjZSBuZWVkZWQgZm9yIHRoZSBGRFQgYnVmZmVyIHNvIHRoYXQgd2UgY2FuIGFkZCBpbml0cmQsXG4tICogYm9vdGFyZ3MsIGthc2xyLXNlZWQsIHJuZy1zZWVkLCB1c2VhYmxlLW1lbW9yeS1yYW5nZSBhbmQgZWxmY29yZWhkci5cbisgKiBib290YXJncywga2FzbHItc2VlZCwgcm5nLXNlZWQsIHVzYWJsZS1tZW1vcnktcmFuZ2UgYW5kIGVsZmNvcmVoZHIuXG4gICovXG4gI2RlZmluZSBGRFRfRVhUUkFfU1BBQ0UgMHgxMDAwXG4gXG5kaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmggYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuaW5kZXggYmMwODcxMjRjZDc4ZS4uNWM3MjA3YzBiYmExNCAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oXG4rKysgYi9pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaFxuQEAgLTUsNiArNSw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvbGlua2FnZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZWxmLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9ub3RpZmllci5oXHUwMDNlXG4gXG4gc3RydWN0IGtpbWFnZTtcbiBcbkBAIC0zNCw2ICszNSwxMCBAQCBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY19wcm90ZWN0X2NyYXNoa3Jlcyh2b2lkKSB7IH1cbiBzdGF0aWMgaW5saW5lIHZvaWQgYXJjaF9rZXhlY191bnByb3RlY3RfY3Jhc2hrcmVzKHZvaWQpIHsgfVxuICNlbmRpZlxuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK2V4dGVybiBzdHJ1Y3QgYXRvbWljX25vdGlmaWVyX2hlYWQgY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0O1xuKyNlbmRpZlxuK1xuICNpZm5kZWYgYXJjaF9jcmFzaF9oYW5kbGVfaG90cGx1Z19ldmVudFxuIHN0YXRpYyBpbmxpbmUgdm9pZCBhcmNoX2NyYXNoX2hhbmRsZV9ob3RwbHVnX2V2ZW50KHN0cnVjdCBraW1hZ2UgKmltYWdlLCB2b2lkICphcmcpIHsgfVxuICNlbmRpZlxuZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaCBiL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaFxuaW5kZXggYmI5N2JkM2U1YWY0Zi4uZmYwOTQ0Y2UzNjhmOSAxMDA2NDRcbi0tLSBhL2luY2x1ZGUvbGludXgva2V5LXR5cGUuaFxuKysrIGIvaW5jbHVkZS9saW51eC9rZXktdHlwZS5oXG5AQCAtMTIyLDYgKzEyMiwxNSBAQCBzdHJ1Y3Qga2V5X3R5cGUge1xuIFx0LyogY2xlYXIgdGhlIGRhdGEgZnJvbSBhIGtleSAob3B0aW9uYWwpICovXG4gXHR2b2lkICgqZGVzdHJveSkoc3RydWN0IGtleSAqa2V5KTtcbiBcbitcdC8qIHNjcnViIHRoZSBrZXkgbWF0ZXJpYWwgd2l0aG91dCBmcmVlJ2luZyAob3B0aW9uYWwpXG4rXHQgKiAtIHVzZWQgZnJvbSBDT05GSUdfQ1JBU0hfWkVST0laRSBkdXJpbmcgcGFuaWMgdG8ga2VlcCBrZXlzIG91dCBvZlxuK1x0ICogICBjcmFzaCBkdW1wc1xuK1x0ICogLSBjYWxsZWQgZnJvbSB0aGUgcGFuaWMgcGF0aCB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmQgcHJlZW1wdGlvblxuK1x0ICogICBkaXNhYmxlZFxuK1x0ICogLSBtdXN0IG5vdCBzbGVlcCwgYWxsb2NhdGUsIGZyZWUgb3IgdGFrZSBsb2Nrc1xuK1x0ICovXG4rXHR2b2lkICgqemVyb2l6ZSkoc3RydWN0IGtleSAqa2V5KTtcbitcbiBcdC8qIGRlc2NyaWJlIGEga2V5ICovXG4gXHR2b2lkICgqZGVzY3JpYmUpKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgc3RydWN0IHNlcV9maWxlICpwKTtcbiBcbmRpZmYgLS1naXQgYS9rZXJuZWwvS2NvbmZpZy5rZXhlYyBiL2tlcm5lbC9LY29uZmlnLmtleGVjXG5pbmRleCAxNTYzMjM1OGJjZjcxLi45MmFiMGE2OWM4ZWM2IDEwMDY0NFxuLS0tIGEva2VybmVsL0tjb25maWcua2V4ZWNcbisrKyBiL2tlcm5lbC9LY29uZmlnLmtleGVjXG5AQCAtMTc5LDQgKzE3OSwxMiBAQCBjb25maWcgQ1JBU0hfTUFYX01FTU9SWV9SQU5HRVNcbiBcdCAgdGhlIGNvbXB1dGF0aW9uIGJlaGluZCB0aGUgdmFsdWUgcHJvdmlkZWQgdGhyb3VnaCB0aGVcbiBcdCAgL3N5cy9rZXJuZWwvY3Jhc2hfZWxmY29yZWhkcl9zaXplIGF0dHJpYnV0ZS5cbiBcbitjb25maWcgQ1JBU0hfWkVST0laRVxuK1x0Ym9vbCBcIlplcm9pemUgc2VjcmV0cyBvbiBwYW5pY1wiXG4rXHRkZXBlbmRzIG9uIENSQVNIX0RVTVBcbitcdGhlbHBcbitcdCAgV2lwZSBzZWNyZXRzIChlLmcuIGtlcm5lbCBrZXlyaW5nIGFuZCBtZW1mZF9zZWNyZXQgcGFnZXMpIG9uIGNyYXNoIG9yIHBhbmljLlxuK1xuK1x0ICBJZiB1bnN1cmUsIHNheSBOLlxuK1xuIGVuZG1lbnVcbmRpZmYgLS1naXQgYS9rZXJuZWwvY3Jhc2hfY29yZS5jIGIva2VybmVsL2NyYXNoX2NvcmUuY1xuaW5kZXggMmIzNmFhOWZhZGUwNi4uZDNhNzc2M2UyNzU5OSAxMDA2NDRcbi0tLSBhL2tlcm5lbC9jcmFzaF9jb3JlLmNcbisrKyBiL2tlcm5lbC9jcmFzaF9jb3JlLmNcbkBAIC0yMyw2ICsyMyw3IEBAXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvb2JqdG9vbC5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvZGVsYXkuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3BhbmljLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC90aW1la2VlcGluZy5oXHUwMDNlXG4gXG4gI2luY2x1ZGUgXHUwMDNjYXNtL3BhZ2UuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2FzbS9zZWN0aW9ucy5oXHUwMDNlXG5AQCAtMzMsNiArMzQsMjIgQEBcbiAvKiBQZXIgY3B1IG1lbW9yeSBmb3Igc3RvcmluZyBjcHUgc3RhdGVzIGluIGNhc2Ugb2Ygc3lzdGVtIGNyYXNoLiAqL1xuIG5vdGVfYnVmX3QgX19wZXJjcHUgKmNyYXNoX25vdGVzO1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK0FUT01JQ19OT1RJRklFUl9IRUFEKGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCk7XG4rRVhQT1JUX1NZTUJPTF9HUEwoY3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0KTtcbitcbitzdGF0aWMgdm9pZCBjcmFzaF96ZXJvaXplKHZvaWQpXG4re1xuK1x0a3RpbWVfdCB6ZXJvaXplX3N0YXJ0ID0ga3RpbWVfZ2V0KCk7XG4rXG4rXHRwcl9pbmZvKFwiV2lwaW5nIHNlbnNpdGl2ZSBzZWNyZXRzLi4uXFxuXCIpO1xuK1x0YXRvbWljX25vdGlmaWVyX2NhbGxfY2hhaW4oXHUwMDI2Y3Jhc2hfemVyb2l6ZV9ub3RpZmllcl9saXN0LCAwLCBOVUxMKTtcbitcdHByX2luZm8oXCJEb25lIGluICVsbGQgdXNcXG5cIiwga3RpbWVfdXNfZGVsdGEoa3RpbWVfZ2V0KCksIHplcm9pemVfc3RhcnQpKTtcbit9XG4rI2Vsc2VcbitzdGF0aWMgaW5saW5lIHZvaWQgY3Jhc2hfemVyb2l6ZSh2b2lkKSB7IH1cbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiAvKiB0aW1lIHRvIHdhaXQgZm9yIHBvc3NpYmxlIERNQSB0byBmaW5pc2ggYmVmb3JlIHN0YXJ0aW5nIHRoZSBrZHVtcCBrZXJuZWxcbiAgKiB3aGVuIGEgQ01BIHJlc2VydmF0aW9uIGlzIHVzZWRcbiAgKi9cbkBAIC0xNDIsNiArMTU5LDcgQEAgdm9pZCBfX25vY2xvbmUgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncylcbiBcdFx0XHRjcmFzaF9zYXZlX3ZtY29yZWluZm8oKTtcbiBcdFx0XHRtYWNoaW5lX2NyYXNoX3NodXRkb3duKFx1MDAyNmZpeGVkX3JlZ3MpO1xuIFx0XHRcdGNyYXNoX2NtYV9jbGVhcl9wZW5kaW5nX2RtYSgpO1xuK1x0XHRcdGNyYXNoX3plcm9pemUoKTtcbiBcdFx0XHRtYWNoaW5lX2tleGVjKGtleGVjX2NyYXNoX2ltYWdlKTtcbiBcdFx0fVxuIFx0XHRrZXhlY191bmxvY2soKTtcbmRpZmYgLS1naXQgYS9tbS9zZWNyZXRtZW0uYyBiL21tL3NlY3JldG1lbS5jXG5pbmRleCBkMjk4NjUwNzViNmVhLi41M2Y2MjlkNjYzM2MxIDEwMDY0NFxuLS0tIGEvbW0vc2VjcmV0bWVtLmNcbisrKyBiL21tL3NlY3JldG1lbS5jXG5AQCAtMTMsOSArMTMsMTEgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9iaXRvcHMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3ByaW50ay5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvcGFnZW1hcC5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvbm90aWZpZXIuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3N5c2NhbGxzLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9wc2V1ZG9fZnMuaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L3NlY3JldG1lbS5oXHUwMDNlXG4rI2luY2x1ZGUgXHUwMDNjbGludXgvY3Jhc2hfY29yZS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2V0X21lbW9yeS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvc2NoZWQvc2lnbmFsLmhcdTAwM2VcbiBcbkBAIC0xODcsNiArMTg5LDUwIEBAIHN0YXRpYyBjb25zdCBzdHJ1Y3QgaW5vZGVfb3BlcmF0aW9ucyBzZWNyZXRtZW1faW9wcyA9IHtcbiBcbiBzdGF0aWMgc3RydWN0IHZmc21vdW50ICpzZWNyZXRtZW1fbW50O1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuKy8qIENhbGxlZCBmYXIgaW50byB2cGFuaWMgZnJvbSBjcmFzaF9jb3JlLmMgd2l0aCBvdGhlciBDUFVzIHN0b3BwZWQgYW5kXG4rICogcHJlZW1wdGlvbiBkaXNhYmxlZFxuKyAqL1xuK3N0YXRpYyBpbnQgc2VjcmV0bWVtX2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZ1xuK1x0XHRhY3Rpb24sIHZvaWQgKmRhdGEpXG4re1xuK1x0c3RydWN0IHN1cGVyX2Jsb2NrICpzYjtcbitcdHN0cnVjdCBpbm9kZSAqaW5vZGU7XG4rXG4rXHRpZiAoIXNlY3JldG1lbV9tbnQpXG4rXHRcdHJldHVybiBOT1RJRllfRE9ORTtcbitcdHNiID0gc2VjcmV0bWVtX21udC1cdTAwM2VtbnRfc2I7XG4rXG4rXHQvKiBJZiB0aGUgbGlzdCB3YXMgbW9kaWZpZWQgaW4gdGhlIGV4YWN0IG1vbWVudCB3ZSBwYW5pYydlZCwgaXQgbWlnaHQgYmVcbitcdCAqIGluIGFuIGluY29uc2lzdGVudCBzdGF0ZSB0aGF0IHdvdWxkIGJlIHVuc2FmZSB0byBpdGVyYXRlLiBJZiB3ZSBjYW4ndFxuK1x0ICogZ2V0IHRoZSBsb2NrLCB0b28gYmFkLCB0aGF0J3MgYWxsIHdlIGNhbiBkbyBoZXJlLlxuK1x0ICovXG4rXHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZzYi1cdTAwM2VzX2lub2RlX2xpc3RfbG9jaykpIHtcbitcdFx0cHJfY3JpdChcImNyYXNoX3plcm9pemU6IGNhbid0IGFjcXVpcmUgc2VjcmV0bWVtIHN1cGVyYmxvY2sgbG9jay5cXG5cIlxuK1x0XHRcdCBcImNyYXNoX3plcm9pemU6IHNraXBwaW5nIHplcm9pemluZyBzZWNyZXRtZW0uXFxuXCIpO1xuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHR9XG4rXG4rXHRsaXN0X2Zvcl9lYWNoX2VudHJ5KGlub2RlLCBcdTAwMjZzYi1cdTAwM2VzX2lub2RlcywgaV9zYl9saXN0KSB7XG4rXHRcdFhBX1NUQVRFKHhhcywgXHUwMDI2aW5vZGUtXHUwMDNlaV9tYXBwaW5nLVx1MDAzZWlfcGFnZXMsIDApO1xuK1x0XHRzdHJ1Y3QgZm9saW8gKmZvbGlvO1xuK1xuK1x0XHQvKiBubyBuZWVkIGZvciBsb2NrcyBpZiB3ZSdyZSBidXJuaW5nIGRvd24gdGhlIGhvdXNlIDopICovXG4rXHRcdHhhc19mb3JfZWFjaChcdTAwMjZ4YXMsIGZvbGlvLCBVTE9OR19NQVgpIHtcbitcdFx0XHRpZiAoeGFzX3JldHJ5KFx1MDAyNnhhcywgZm9saW8pIHx8IHhhX2lzX3ZhbHVlKGZvbGlvKSlcbitcdFx0XHRcdGNvbnRpbnVlO1xuK1x0XHRcdGlub2RlLVx1MDAzZWlfbWFwcGluZy1cdTAwM2VhX29wcy1cdTAwM2VmcmVlX2ZvbGlvKGZvbGlvKTtcbitcdFx0fVxuK1x0fVxuK1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgc2VjcmV0bWVtX3plcm9pemVfbmIgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IHNlY3JldG1lbV9jcmFzaF96ZXJvaXplXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiBzdGF0aWMgc3RydWN0IGZpbGUgKnNlY3JldG1lbV9maWxlX2NyZWF0ZSh1bnNpZ25lZCBsb25nIGZsYWdzKVxuIHtcbiBcdHN0cnVjdCBmaWxlICpmaWxlO1xuQEAgLTI2Myw2ICszMDksMTAgQEAgc3RhdGljIGludCBfX2luaXQgc2VjcmV0bWVtX2luaXQodm9pZClcbiBcdGlmIChJU19FUlIoc2VjcmV0bWVtX21udCkpXG4gXHRcdHJldHVybiBQVFJfRVJSKHNlY3JldG1lbV9tbnQpO1xuIFxuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCwgXHUwMDI2c2VjcmV0bWVtX3plcm9pemVfbmIpO1xuKyNlbmRpZlxuK1xuIFx0cmV0dXJuIDA7XG4gfVxuIGZzX2luaXRjYWxsKHNlY3JldG1lbV9pbml0KTtcbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2JpZ19rZXkuYyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5pbmRleCAyNjhmNzAyZGYzODBlLi5hZDg1MzdkZGE3MGZhIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9iaWdfa2V5LmNcbisrKyBiL3NlY3VyaXR5L2tleXMvYmlnX2tleS5jXG5AQCAtMzUsNiArMzUsOCBAQCBzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkIHtcbiAgKi9cbiAjZGVmaW5lIEJJR19LRVlfRklMRV9USFJFU0hPTEQgKHNpemVvZihzdHJ1Y3QgaW5vZGUpICsgc2l6ZW9mKHN0cnVjdCBkZW50cnkpKVxuIFxuK3N0YXRpYyB2b2lkIGJpZ19rZXlfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuK1xuIC8qXG4gICogYmlnX2tleSBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cbiAgKiBhcmJpdHJhcnkgYmxvYiBvZiBkYXRhIGFzIHRoZSBwYXlsb2FkXG5AQCAtNDYsNiArNDgsNyBAQCBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfYmlnX2tleSA9IHtcbiBcdC5pbnN0YW50aWF0ZVx0XHQ9IGdlbmVyaWNfa2V5X2luc3RhbnRpYXRlLFxuIFx0LnJldm9rZVx0XHRcdD0gYmlnX2tleV9yZXZva2UsXG4gXHQuZGVzdHJveVx0XHQ9IGJpZ19rZXlfZGVzdHJveSxcbitcdC56ZXJvaXplXHRcdD0gYmlnX2tleV96ZXJvaXplLFxuIFx0LmRlc2NyaWJlXHRcdD0gYmlnX2tleV9kZXNjcmliZSxcbiBcdC5yZWFkXHRcdFx0PSBiaWdfa2V5X3JlYWQsXG4gXHQudXBkYXRlXHRcdFx0PSBiaWdfa2V5X3VwZGF0ZSxcbkBAIC0yNzksNiArMjgyLDE4IEBAIGxvbmcgYmlnX2tleV9yZWFkKGNvbnN0IHN0cnVjdCBrZXkgKmtleSwgY2hhciAqYnVmZmVyLCBzaXplX3QgYnVmbGVuKVxuIFx0cmV0dXJuIHJldDtcbiB9XG4gXG4rc3RhdGljIHZvaWQgYmlnX2tleV96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHRzdHJ1Y3QgYmlnX2tleV9wYXlsb2FkICpwYXlsb2FkID0gdG9fYmlnX2tleV9wYXlsb2FkKGtleS1cdTAwM2VwYXlsb2FkKTtcbitcbitcdGlmIChwYXlsb2FkLVx1MDAzZWRhdGEpIHtcbitcdFx0aWYgKHBheWxvYWQtXHUwMDNlbGVuZ3RoIFx1MDAzZSBCSUdfS0VZX0ZJTEVfVEhSRVNIT0xEKVxuK1x0XHRcdG1lbXplcm9fZXhwbGljaXQocGF5bG9hZC1cdTAwM2VkYXRhLCBDSEFDSEEyMFBPTFkxMzA1X0tFWV9TSVpFKTtcbitcdFx0ZWxzZVxuK1x0XHRcdG1lbXplcm9fZXhwbGljaXQocGF5bG9hZC1cdTAwM2VkYXRhLCBwYXlsb2FkLVx1MDAzZWxlbmd0aCk7XG4rXHR9XG4rfVxuK1xuIC8qXG4gICogUmVnaXN0ZXIga2V5IHR5cGVcbiAgKi9cbmRpZmYgLS1naXQgYS9zZWN1cml0eS9rZXlzL2VuY3J5cHRlZC1rZXlzL2VuY3J5cHRlZC5jIGIvc2VjdXJpdHkva2V5cy9lbmNyeXB0ZWQta2V5cy9lbmNyeXB0ZWQuY1xuaW5kZXggNTljYjc3YjIzN2IzNi4uOWY1NmZhOWI0YWFmNCAxMDA2NDRcbi0tLSBhL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbisrKyBiL3NlY3VyaXR5L2tleXMvZW5jcnlwdGVkLWtleXMvZW5jcnlwdGVkLmNcbkBAIC05NzAsMTEgKzk3MCwyMyBAQCBzdGF0aWMgdm9pZCBlbmNyeXB0ZWRfZGVzdHJveShzdHJ1Y3Qga2V5ICprZXkpXG4gXHRrZnJlZV9zZW5zaXRpdmUoa2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXSk7XG4gfVxuIFxuK3N0YXRpYyB2b2lkIGVuY3J5cHRlZF96ZXJvaXplKHN0cnVjdCBrZXkgKmtleSlcbit7XG4rXHRzdHJ1Y3QgZW5jcnlwdGVkX2tleV9wYXlsb2FkICplcGF5bG9hZCA9IGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF07XG4rXG4rXHRpZiAoIWVwYXlsb2FkKVxuK1x0XHRyZXR1cm47XG4rXG4rXHRtZW16ZXJvX2V4cGxpY2l0KGVwYXlsb2FkLVx1MDAzZXBheWxvYWRfZGF0YSxcbitcdFx0XHQgZXBheWxvYWQtXHUwMDNlcGF5bG9hZF9kYXRhbGVuICsgZXBheWxvYWQtXHUwMDNlZGF0YWJsb2JfbGVuKTtcbit9XG4rXG4gc3RydWN0IGtleV90eXBlIGtleV90eXBlX2VuY3J5cHRlZCA9IHtcbiBcdC5uYW1lID0gXCJlbmNyeXB0ZWRcIixcbiBcdC5pbnN0YW50aWF0ZSA9IGVuY3J5cHRlZF9pbnN0YW50aWF0ZSxcbiBcdC51cGRhdGUgPSBlbmNyeXB0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSBlbmNyeXB0ZWRfZGVzdHJveSxcbitcdC56ZXJvaXplID0gZW5jcnlwdGVkX3plcm9pemUsXG4gXHQuZGVzY3JpYmUgPSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWQgPSBlbmNyeXB0ZWRfcmVhZCxcbiB9O1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMva2V5LmMgYi9zZWN1cml0eS9rZXlzL2tleS5jXG5pbmRleCBiMzRhNjRkODFkNDdhLi41NjczZGNjOGM1ZDIzIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy9rZXkuY1xuKysrIGIvc2VjdXJpdHkva2V5cy9rZXkuY1xuQEAgLTEyLDYgKzEyLDcgQEBcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zbGFiLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9zZWN1cml0eS5oXHUwMDNlXG4gI2luY2x1ZGUgXHUwMDNjbGludXgvd29ya3F1ZXVlLmhcdTAwM2VcbisjaW5jbHVkZSBcdTAwM2NsaW51eC9jcmFzaF9jb3JlLmhcdTAwM2VcbiAjaW5jbHVkZSBcdTAwM2NsaW51eC9yYW5kb20uaFx1MDAzZVxuICNpbmNsdWRlIFx1MDAzY2xpbnV4L2Vyci5oXHUwMDNlXG4gI2luY2x1ZGUgXCJpbnRlcm5hbC5oXCJcbkBAIC0xMjY4LDYgKzEyNjksNDQgQEAgdm9pZCB1bnJlZ2lzdGVyX2tleV90eXBlKHN0cnVjdCBrZXlfdHlwZSAqa3R5cGUpXG4gfVxuIEVYUE9SVF9TWU1CT0wodW5yZWdpc3Rlcl9rZXlfdHlwZSk7XG4gXG4rI2lmZGVmIENPTkZJR19DUkFTSF9aRVJPSVpFXG4rLyogQ2FsbGVkIGZhciBpbnRvIHZwYW5pYyBmcm9tIGNyYXNoX2NvcmUuYyB3aXRoIG90aGVyIENQVXMgc3RvcHBlZCBhbmRcbisgKiBwcmVlbXB0aW9uIGRpc2FibGVkXG4rICovXG4rc3RhdGljIGludCBrZXlfY3Jhc2hfemVyb2l6ZShzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sgKm5iLCB1bnNpZ25lZCBsb25nIGFjdGlvbixcbitcdFx0dm9pZCAqZGF0YSlcbit7XG4rXHRzdHJ1Y3QgcmJfbm9kZSAqbm9kZTtcbitcbitcdC8qIElmIHdlIGNhbid0IGFjcXVpcmUgdGhlIGxvY2ssIHRoZSByYnRyZWUgbWlnaHQgYmUgaW4gYW4gaW5jb25zaXN0ZW50XG4rXHQgKiBzdGF0ZS4gVGhhdCdzIGFsbCB3ZSBjYW4gZG8gdGhlbiwgYXMgdGhlcmUncyBubyBwb2ludCB0byB3YWl0aW5nXG4rXHQgKiBhdCB0aGlzIHN0YWdlLlxuK1x0ICovXG4rXHRpZiAoIXNwaW5fdHJ5bG9jayhcdTAwMjZrZXlfc2VyaWFsX2xvY2spKSB7XG4rXHRcdHByX2NyaXQoXCJjcmFzaF96ZXJvaXplOiBjYW4ndCBhY3F1aXJlIGtleV9zZXJpYWxfbG9jay4gc2tpcHBpbmcga2V5cmluZ3MuXFxuXCIpO1xuK1x0XHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rXHR9XG4rXG4rXHRmb3IgKG5vZGUgPSByYl9maXJzdChcdTAwMjZrZXlfc2VyaWFsX3RyZWUpOyBub2RlOyBub2RlID0gcmJfbmV4dChub2RlKSkge1xuK1x0XHRzdHJ1Y3Qga2V5ICprZXkgPSByYl9lbnRyeShub2RlLCBzdHJ1Y3Qga2V5LCBzZXJpYWxfbm9kZSk7XG4rXG4rXHRcdGlmIChrZXktXHUwMDNldHlwZSA9PSBcdTAwMjZrZXlfdHlwZV9rZXlyaW5nIHx8XG4rXHRcdCAgICBrZXktXHUwMDNlc3RhdGUgPT0gS0VZX0lTX1VOSU5TVEFOVElBVEVEKVxuK1x0XHRcdGNvbnRpbnVlO1xuK1xuK1x0XHQvKiBjdXN0b20gemVyb2l6ZSBzaW5jZSBmcmVlJ2luZyBpc24ndCBzYWZlIGF0IHRoaXMgcG9pbnQgKi9cbitcdFx0aWYgKGtleS1cdTAwM2V0eXBlLVx1MDAzZXplcm9pemUpXG4rXHRcdFx0a2V5LVx1MDAzZXR5cGUtXHUwMDNlemVyb2l6ZShrZXkpO1xuK1x0fVxuK1x0Lyogb2ZmIHRvIGtleGVjKCkhICovXG4rXHRyZXR1cm4gTk9USUZZX0RPTkU7XG4rfVxuK1xuK3N0YXRpYyBzdHJ1Y3Qgbm90aWZpZXJfYmxvY2sga2V5X2NyYXNoX3plcm9pemVfbmIgPSB7XG4rXHQubm90aWZpZXJfY2FsbCA9IGtleV9jcmFzaF96ZXJvaXplXG4rfTtcbisjZW5kaWYgLyogQ09ORklHX0NSQVNIX1pFUk9JWkUgKi9cbitcbiAvKlxuICAqIEluaXRpYWxpc2UgdGhlIGtleSBtYW5hZ2VtZW50IHN0YXRlLlxuICAqL1xuQEAgLTEyOTAsNCArMTMyOSw5IEBAIHZvaWQgX19pbml0IGtleV9pbml0KHZvaWQpXG4gXG4gXHRyYl9pbnNlcnRfY29sb3IoXHUwMDI2cm9vdF9rZXlfdXNlci5ub2RlLFxuIFx0XHRcdFx1MDAyNmtleV91c2VyX3RyZWUpO1xuK1xuKyNpZmRlZiBDT05GSUdfQ1JBU0hfWkVST0laRVxuK1x0YXRvbWljX25vdGlmaWVyX2NoYWluX3JlZ2lzdGVyKFx1MDAyNmNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdCxcbitcdFx0XHRcdTAwMjZrZXlfY3Jhc2hfemVyb2l6ZV9uYik7XG4rI2VuZGlmXG4gfVxuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdHJ1c3RlZC1rZXlzL3RydXN0ZWRfY29yZS5jIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmNcbmluZGV4IDA1MDlkOTk1NWYyYTYuLmYxNTlmYWVhZmUyM2EgMTAwNjQ0XG4tLS0gYS9zZWN1cml0eS9rZXlzL3RydXN0ZWQta2V5cy90cnVzdGVkX2NvcmUuY1xuKysrIGIvc2VjdXJpdHkva2V5cy90cnVzdGVkLWtleXMvdHJ1c3RlZF9jb3JlLmNcbkBAIC0zMjUsMTEgKzMyNSwyNSBAQCBzdGF0aWMgdm9pZCB0cnVzdGVkX2Rlc3Ryb3koc3RydWN0IGtleSAqa2V5KVxuIFx0a2ZyZWVfc2Vuc2l0aXZlKGtleS1cdTAwM2VwYXlsb2FkLmRhdGFbMF0pO1xuIH1cbiBcbitzdGF0aWMgdm9pZCB0cnVzdGVkX3plcm9pemUoc3RydWN0IGtleSAqa2V5KVxuK3tcbitcdHN0cnVjdCB0cnVzdGVkX2tleV9wYXlsb2FkICpwID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbitcbitcdGlmICghcClcbitcdFx0cmV0dXJuO1xuK1xuK1x0bWVtemVyb19leHBsaWNpdChwLVx1MDAzZWtleSwgc2l6ZW9mKHAtXHUwMDNla2V5KSk7XG4rXHRtZW16ZXJvX2V4cGxpY2l0KHAtXHUwMDNlYmxvYiwgc2l6ZW9mKHAtXHUwMDNlYmxvYikpO1xuK1x0cC1cdTAwM2VrZXlfbGVuID0gMDtcbitcdHAtXHUwMDNlYmxvYl9sZW4gPSAwO1xuK31cbitcbiBzdHJ1Y3Qga2V5X3R5cGUga2V5X3R5cGVfdHJ1c3RlZCA9IHtcbiBcdC5uYW1lID0gXCJ0cnVzdGVkXCIsXG4gXHQuaW5zdGFudGlhdGUgPSB0cnVzdGVkX2luc3RhbnRpYXRlLFxuIFx0LnVwZGF0ZSA9IHRydXN0ZWRfdXBkYXRlLFxuIFx0LmRlc3Ryb3kgPSB0cnVzdGVkX2Rlc3Ryb3ksXG4rXHQuemVyb2l6ZSA9IHRydXN0ZWRfemVyb2l6ZSxcbiBcdC5kZXNjcmliZSA9IHVzZXJfZGVzY3JpYmUsXG4gXHQucmVhZCA9IHRydXN0ZWRfcmVhZCxcbiB9O1xuZGlmZiAtLWdpdCBhL3NlY3VyaXR5L2tleXMvdXNlcl9kZWZpbmVkLmMgYi9zZWN1cml0eS9rZXlzL3VzZXJfZGVmaW5lZC5jXG5pbmRleCA2Zjg4YjUwN2Y5Mjc5Li5hZGU5NWRjMjQ4MWRmIDEwMDY0NFxuLS0tIGEvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuKysrIGIvc2VjdXJpdHkva2V5cy91c2VyX2RlZmluZWQuY1xuQEAgLTE1LDYgKzE1LDcgQEBcbiAjaW5jbHVkZSBcImludGVybmFsLmhcIlxuIFxuIHN0YXRpYyBpbnQgbG9nb25fdmV0X2Rlc2NyaXB0aW9uKGNvbnN0IGNoYXIgKmRlc2MpO1xuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpO1xuIFxuIC8qXG4gICogdXNlciBkZWZpbmVkIGtleXMgdGFrZSBhbiBhcmJpdHJhcnkgc3RyaW5nIGFzIHRoZSBkZXNjcmlwdGlvbiBhbmQgYW5cbkBAIC0yOCw2ICsyOSw3IEBAIHN0cnVjdCBrZXlfdHlwZSBrZXlfdHlwZV91c2VyID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuK1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnJlYWRcdFx0XHQ9IHVzZXJfcmVhZCxcbiB9O1xuQEAgLTQ4LDYgKzUwLDcgQEAgc3RydWN0IGtleV90eXBlIGtleV90eXBlX2xvZ29uID0ge1xuIFx0LnVwZGF0ZVx0XHRcdD0gdXNlcl91cGRhdGUsXG4gXHQucmV2b2tlXHRcdFx0PSB1c2VyX3Jldm9rZSxcbiBcdC5kZXN0cm95XHRcdD0gdXNlcl9kZXN0cm95LFxuK1x0Lnplcm9pemVcdFx0PSB1c2VyX3plcm9pemUsXG4gXHQuZGVzY3JpYmVcdFx0PSB1c2VyX2Rlc2NyaWJlLFxuIFx0LnZldF9kZXNjcmlwdGlvblx0PSBsb2dvbl92ZXRfZGVzY3JpcHRpb24sXG4gfTtcbkBAIC0xNTIsNiArMTU1LDE0IEBAIHZvaWQgdXNlcl9kZXN0cm95KHN0cnVjdCBrZXkgKmtleSlcbiBcbiBFWFBPUlRfU1lNQk9MX0dQTCh1c2VyX2Rlc3Ryb3kpO1xuIFxuK3N0YXRpYyB2b2lkIHVzZXJfemVyb2l6ZShzdHJ1Y3Qga2V5ICprZXkpXG4re1xuK1x0c3RydWN0IHVzZXJfa2V5X3BheWxvYWQgKnVwYXlsb2FkID0ga2V5LVx1MDAzZXBheWxvYWQuZGF0YVswXTtcbitcbitcdGlmICh1cGF5bG9hZClcbitcdFx0bWVtemVyb19leHBsaWNpdCh1cGF5bG9hZC1cdTAwM2VkYXRhLCB1cGF5bG9hZC1cdTAwM2VkYXRhbGVuKTtcbit9XG4rXG4gLypcbiAgKiBkZXNjcmliZSB0aGUgdXNlciBrZXlcbiAgKi9cbiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ1OjU0LjQ3NTI3NDcyNFoiLCJTZXEiOjMsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjE3OTg0NTkzNDQxLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgdGhlIFBhbmljIEhhbmRsZXI/IEEgUXVpY2sgRXZhbHVhdGlvbioqXG5cbk9rYXksIHNvIEknbSBsb29raW5nIGF0IHRoaXMgcGF0Y2ggc2VyaWVzIGFuZCBteSBpbml0aWFsIHRob3VnaHQgaXM6IGRvZXMgdGhpcyBpbnRyb2R1Y2UgYW55dGhpbmcgbmV3IHdlIHNob3VsZCBiZSBmdXp6aW5nPyBJdCBsb29rcyBsaWtlIHRoZSBtYWluIGNoYW5nZSBpcyB0aGlzIGBDT05GSUdfQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgd2hpY2ggYWRkcyBhIHplcm9pemUgY2FsbGJhY2sgdG8gYHN0cnVjdCBrZXlfdHlwZWAgYW5kIGltcGxlbWVudHMgaXQgZm9yIHNldmVyYWwga2V5IHR5cGVzLiBJdCBhbHNvIGhhbmRsZXMgdGhlIHplcm9pemF0aW9uIG9mIGBzZWNyZXRtZW1gIHBhZ2VzLlxuXG5CdXQgaG9sZCBvbi4uLiB0aGlzIGNvZGUsIGBfX2NyYXNoX2tleGVjYCwgb25seSBleGVjdXRlcyBkdXJpbmcgYSBrZXJuZWwgY3Jhc2ggb3IgcGFuaWMuIFRoaXMgaXMgdXN1YWxseSBub3QgdGhlIHRhcmdldCBvZiBmdXp6aW5nLiBGdXp6ZXJzIGFpbSBmb3IgcmVhY2hhYmxlIGNvZGUgZHVyaW5nIG5vcm1hbCBvcGVyYXRpb24gb3IgZXJyb3IgaGFuZGxpbmcuIENhbiBhIGZ1enplciAqdHJpZ2dlciogdGhpcyBjb2RlPyBXZWxsLCB5ZXMsIGJ5IGNhdXNpbmcgYSBwYW5pYy4gQnV0IHRoZSBwcmltYXJ5IGdvYWwgb2YgdGhlIGZ1enplciBpcyB0byBmaW5kIHBhbmljcywgbm90IHRvIGV4YW1pbmUgd2hhdCBoYXBwZW5zICphZnRlciogYSBwYW5pYy5cblxuSWYgdGhlIGZ1enplciBkb2VzIHRyaWdnZXIgYSBwYW5pYywgYW5kIGtkdW1wIGlzIGNvbmZpZ3VyZWQsIHRoZW4gYF9fY3Jhc2hfa2V4ZWNgIHdpbGwgcnVuLiBCdXQgaXMgaXQgZXZlbiB3b3J0aCB0aGUgZWZmb3J0IG9mIGZ1enppbmcgdGhlIHplcm9pemUgZnVuY3Rpb25zIHRoZW1zZWx2ZXM/IFRoZXkgc2VlbSBwcmV0dHkgc3RyYWlnaHRmb3J3YXJkOiB0aGUgY29kZSBpdGVyYXRlcyB0aHJvdWdoIGBiaWdfa2V5X3plcm9pemVgLCBgZW5jcnlwdGVkX3plcm9pemVgLCBgdHJ1c3RlZF96ZXJvaXplYCwgYHVzZXJfemVyb2l6ZWAsIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGFuZCBga2V5X2NyYXNoX3plcm9pemVgLCB3aGljaCBhcmUgY2FsbGVkIGZyb20gYGNyYXNoX3plcm9pemUoKWAgY2FsbGVkIGZyb20gYF9fY3Jhc2hfa2V4ZWMoKWAuXG5cblNvLCBgX19jcmFzaF9rZXhlY2AgKmlzKiByZWFjaGFibGUg4oCTIG9uIHBhbmljLiBBcmUgdGhlc2UgemVyb2l6ZSBmdW5jdGlvbnMgd29ydGggdGhlIGVmZm9ydD8gVGhleSBhcmUgYWN0dWFsbHkgcXVpdGUgc2ltcGxlLCBsaWtlIHRoaXMgYHVzZXJfemVyb2l6ZWAgZXhhbXBsZS4gQW5kIGluIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAsIGl0IGNhbGxzIGBmcmVlX2ZvbGlvYC4gSXMgaXQgc2FmZSB0byBjYWxsIGBmcmVlX2ZvbGlvYCBkdXJpbmcgYSBwYW5pYz8gVGhlIGNvbW1lbnQgc2F5cyBcIm5vIG5lZWQgZm9yIGxvY2tzIGlmIHdlJ3JlIGJ1cm5pbmcgZG93biB0aGUgaG91c2UgOilcIi4gVGhpcyBtYWtlcyBtZSBuZXJ2b3VzIHRob3VnaC4gSWYgaXQgY3Jhc2hlcyBkdXJpbmcgYGZyZWVfZm9saW9gLCBjb3VsZCB3ZSBnZXQgYSBkb3VibGUgZmF1bHQsIG9yIHdvcnNlP1xuXG5JcyB0aGlzIHNvbWV0aGluZyBzeXprYWxsZXIgc2hvdWxkIGV2ZW4gYmUgbG9va2luZyBhdD8gU3l6a2FsbGVyIGRvZXNuJ3QgdHlwaWNhbGx5IGZvY3VzIG9uIHBvc3QtcGFuaWMgY29kZSBiZWNhdXNlIGEgY3Jhc2ggdHlwaWNhbGx5IGVuZHMgdGhlIGZ1enppbmcgcnVuIGFuZCBpdCBkb2Vzbid0IGNvbnRpbnVlIG9uIHRvIGZpbmRpbmcgYnVncyBpbiB0aGUgcGFuaWMgaGFuZGxlciwgdW5sZXNzIGl0IGNhdXNlcyBhIHNlY29uZGFyeSBwYW5pYyB3aGljaCBjb3VsZCBjb3JydXB0IHRoZSBjcmFzaCBsb2cuIEFjdHVhbGx5LCB3YWl0ISBTeXprYWxsZXIgKmRvZXMqIHBhcnNlIGNyYXNoIGxvZ3MsIHNvIGEgY29ycnVwdGVkIGxvZyBkdWUgdG8gYSBwYW5pYyBoYW5kbGVyIGJ1ZyAqaXMqIGEgcmVsZXZhbnQgYnVnIHRvIGNhdGNoLlxuXG5CdXQsIGNhbiB0aGVzZSB6ZXJvaXplIGZ1bmN0aW9ucyBiZSBjYWxsZWQgZnJvbSBhbnl3aGVyZSBlbHNlPyBObywgdGhleSBhcmUgcmVnaXN0ZXJlZCB0byBhIG5vdGlmaWVyIGxpc3QgdGhhdCBvbmx5IHRyaWdnZXJzIG9uIGNyYXNoIGZ1bmN0aW9ucy5cblxuV2FpdCwgdGhlIGNvZGUgaW4gcXVlc3Rpb24gaXMgY2FsbGVkIGJ5IGBfX2NyYXNoX2tleGVjYCBhbmQgYGNyYXNoX3plcm9pemVgLiBJcyB0aGVyZSBhbnkgd2F5IHRvIHRyaWdnZXIgdGhpcyBjb2RlIHdpdGhvdXQgYSByZWFsIHBhbmljPyBObywgYF9fY3Jhc2hfa2V4ZWNgIGlzIGNhbGxlZCBmcm9tIGBwYW5pYygpYCwgYGNyYXNoX2tleGVjKClgLCBvciBzaW1pbGFyIGZ1bmN0aW9ucy4gV2UgbmVlZCBhIHBhbmljIHRvIHJlYWNoIGl0LCB3aGljaCBpcyB0aGUgKmVuZCogb2YgYSBmdXp6aW5nIHJ1bi4gVGhpcyBjb2RlIGlzIG9ubHkgcmVhY2hlZCB3aGVuIHRoZSBzeXN0ZW0gaXMgYWxyZWFkeSBkZWFkLCBzbyBhIGZ1enplciBjYW4ndCBtZWFuaW5nZnVsbHkgZXhwbG9yZSBpdC4gV2FpdCwgeW91ICpjYW4qIHRyaWdnZXIgYGNyYXNoX2tleGVjYCB2aWEgYHN5c3JxLWNgIOKAkyB3aGljaCBjYXVzZXMgYSBwYW5pYy4gQnV0IHRoYXQncyBzdGlsbCBhIHBhbmljLlxuXG5JIHNob3VsZCBhbHNvIGNoZWNrIGlmIHRoZXJlIGFyZSBhbnkgb3RoZXIgZnVuY3Rpb25hbCBjaGFuZ2VzLiBUaGVyZSdzIGEgY2hhbmdlIGluIHRoZSBga2V5X3R5cGVgIHN0cnVjdCBzaXplIGFuZCBub3RpZmllciByZWdpc3RyYXRpb24uXG5cbk9rYXksIGlzIHRoaXMgd29ydGggZnV6emluZz8gVGhlIGd1aWRlbGluZXMgc2F5IHRvIHNraXAgXCJDb2RlIHBhdGhzIHRoYXQgYXJlIGltcG9zc2libGUgdG8gcmVhY2ggaW4gdmlydHVhbGl6ZWQgZW52aXJvbm1lbnRzXCIgYW5kIFwiUHVyZWx5IGRlY29yYXRpdmUgY2hhbmdlc1wiLiBJdCBkb2Vzbid0IGV4cGxpY2l0bHkgbWVudGlvbiBcInBvc3QtcGFuaWMgY29kZSxcIiBidXQgZnV6emluZyBwb3N0LXBhbmljIGNvZGUgaXMgZ2VuZXJhbGx5IGluZWZmZWN0aXZlIGJlY2F1c2UgdGhlIGZ1enplciBzdG9wcyBhdCB0aGUgZmlyc3QgcGFuaWMuIEhvbGQgb24sIHdoYXQgYWJvdXQgZHVyaW5nIGEgbm9ybWFsIGtleGVjPyBObywgYGNyYXNoX3plcm9pemVgIGlzIGNhbGxlZCBmcm9tIGBfX2NyYXNoX2tleGVjYCwgbm90IGBrZXJuZWxfa2V4ZWNgLiBMZXQncyBqdXN0IGRvdWJsZS1jaGVjayBgX19jcmFzaF9rZXhlY2AuXG5cbkknbSB0aGlua2luZyB0aGlzIGlzIHByb2JhYmx5IG5vdCB3b3J0aCBpdC5cblxuXG4iLCJJbnB1dFRva2VucyI6NjUxMSwiT3V0cHV0VG9rZW5zIjoxOSwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjEyMjMsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoxMi40NTk4NzMwNjRaIiwiU2VxIjo0LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM3MjY2Mzc0NywiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCJfX2NyYXNoX2tleGVjXCJcbn0iLCJSZXN1bHRzIjoie1xuICBcIk91dHB1dFwiOiBcImFyY2gveDg2L2h5cGVydi9odl9jcmFzaC5jPTEyNz1zdGF0aWMgdm9pZCBfX25vcmV0dXJuIGh2X2NyYXNoX2hhbmRsZSh2b2lkKVxcbi0tXFxuYXJjaC94ODYvaHlwZXJ2L2h2X2NyYXNoLmMtMTMyLVxcdC8qIHdlIGFyZSBub3cgZnVsbHkgaW4gZGV2aXJ0dWFsaXplZCBub3JtYWwga2VybmVsIG1vZGUgKi9cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzoxMzM6XFx0X19jcmFzaF9rZXhlYyhOVUxMKTtcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0xMzQtXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYz0zMzI9c3RhdGljIGludCBodl9jcmFzaF9ubWlfbG9jYWwodW5zaWduZWQgaW50IGNtZCwgc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxuLS1cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0zNjEtICpcXHRCU1AgOiBOTUkgY2FsbGJhY2sgLVxcdTAwM2UgRGlzYWJsZUh2IC1cXHUwMDNlIGh2X2NyYXNoX2FzbTMyIC1cXHUwMDNlIGh2X2NyYXNoX2NfZW50cnlcXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYzozNjI6ICpcXHRcXHQgIC1cXHUwMDNlIF9fY3Jhc2hfa2V4ZWMgLVxcdTAwM2UgbmF0aXZlX21hY2hpbmVfY3Jhc2hfc2h1dGRvd25cXG5hcmNoL3g4Ni9oeXBlcnYvaHZfY3Jhc2guYy0zNjMtICpcXHRcXHQgIC1cXHUwMDNlIGNyYXNoX3NtcF9zZW5kX3N0b3AgLVxcdTAwM2Ugc21wX29wcy5jcmFzaF9zdG9wX290aGVyX2NwdXNcXG4tLVxcbmluY2x1ZGUvbGludXgvY3Jhc2hfY29yZS5oPTcyPXN0cnVjdCBrZXhlY19zZWdtZW50O1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODAtXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmg6ODE6ZXh0ZXJuIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncyk7XFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtODItZXh0ZXJuIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpO1xcbi0tXFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmg9OTc9c3RydWN0IGtpbWFnZTtcXG5pbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaDo5ODpzdGF0aWMgaW5saW5lIHZvaWQgX19jcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuaW5jbHVkZS9saW51eC9jcmFzaF9jb3JlLmgtOTktc3RhdGljIGlubGluZSB2b2lkIGNyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH1cXG4tLVxcbmluY2x1ZGUvbGludXgva2V4ZWMuaD01Mzg9c3RydWN0IGtpbWFnZTtcXG5pbmNsdWRlL2xpbnV4L2tleGVjLmg6NTM5OnN0YXRpYyBpbmxpbmUgdm9pZCBfX2NyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKSB7IH1cXG5pbmNsdWRlL2xpbnV4L2tleGVjLmgtNTQwLXN0YXRpYyBpbmxpbmUgdm9pZCBjcmFzaF9rZXhlYyhzdHJ1Y3QgcHRfcmVncyAqcmVncykgeyB9XFxuLS1cXG5rZXJuZWwvY3Jhc2hfY29yZS5jPTEzMT1zdGF0aWMgdm9pZCBjcmFzaF9jbWFfY2xlYXJfcGVuZGluZ19kbWEodm9pZClcXG4tLVxcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTQzLSAqL1xcbmtlcm5lbC9jcmFzaF9jb3JlLmM6MTQ0OnZvaWQgX19ub2Nsb25lIF9fY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNDUte1xcbi0tXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNjctfVxcbmtlcm5lbC9jcmFzaF9jb3JlLmM6MTY4OlNUQUNLX0ZSQU1FX05PTl9TVEFOREFSRChfX2NyYXNoX2tleGVjKTtcXG5rZXJuZWwvY3Jhc2hfY29yZS5jLTE2OS1cXG5rZXJuZWwvY3Jhc2hfY29yZS5jPTE3MD1fX2JwZl9rZnVuYyB2b2lkIGNyYXNoX2tleGVjKHN0cnVjdCBwdF9yZWdzICpyZWdzKVxcbi0tXFxua2VybmVsL2NyYXNoX2NvcmUuYy0xNzMtXFx0XFx0LyogVGhpcyBpcyB0aGUgMXN0IENQVSB3aGljaCBjb21lcyBoZXJlLCBzbyBnbyBhaGVhZC4gKi9cXG5rZXJuZWwvY3Jhc2hfY29yZS5jOjE3NDpcXHRcXHRfX2NyYXNoX2tleGVjKHJlZ3MpO1xcbmtlcm5lbC9jcmFzaF9jb3JlLmMtMTc1LVxcbi0tXFxua2VybmVsL2tleGVjX2ludGVybmFsLmg9MTU9aW50IGtpbWFnZV9pc19kZXN0aW5hdGlvbl9yYW5nZShzdHJ1Y3Qga2ltYWdlICppbWFnZSxcXG4tLVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oLTE5LSAqIFdoYXRldmVyIGlzIHVzZWQgdG8gc2VyaWFsaXplIGFjY2Vzc2VzIHRvIHRoZSBrZXhlY19jcmFzaF9pbWFnZSBuZWVkcyB0byBiZVxcbmtlcm5lbC9rZXhlY19pbnRlcm5hbC5oOjIwOiAqIE5NSSBzYWZlLCBhcyBfX2NyYXNoX2tleGVjKCkgY2FuIGhhcHBlbiBkdXJpbmcgbm1pX3BhbmljKCksIHNvIGhlcmUgd2UgdXNlIGFcXG5rZXJuZWwva2V4ZWNfaW50ZXJuYWwuaC0yMS0gKiBcXFwic2ltcGxlXFxcIiBhdG9taWMgdmFyaWFibGUgdGhhdCBpcyBhY3F1aXJlZCB3aXRoIGEgY21weGNoZygpLlxcbi0tXFxua2VybmVsL3BhbmljLmM9NTc3PXZvaWQgdnBhbmljKGNvbnN0IGNoYXIgKmZtdCwgdmFfbGlzdCBhcmdzKVxcbi0tXFxua2VybmVsL3BhbmljLmMtNjY3LVxcdCAqXFxua2VybmVsL3BhbmljLmM6NjY4OlxcdCAqIEJ5cGFzcyB0aGUgcGFuaWNfY3B1IGNoZWNrIGFuZCBjYWxsIF9fY3Jhc2hfa2V4ZWMgZGlyZWN0bHkuXFxua2VybmVsL3BhbmljLmMtNjY5LVxcdCAqL1xcbmtlcm5lbC9wYW5pYy5jLTY3MC1cXHRpZiAoIV9jcmFzaF9rZXhlY19wb3N0X25vdGlmaWVycylcXG5rZXJuZWwvcGFuaWMuYzo2NzE6XFx0XFx0X19jcmFzaF9rZXhlYyhOVUxMKTtcXG5rZXJuZWwvcGFuaWMuYy02NzItXFxuLS1cXG5rZXJuZWwvcGFuaWMuYy02OTMtXFx0ICpcXG5rZXJuZWwvcGFuaWMuYzo2OTQ6XFx0ICogQnlwYXNzIHRoZSBwYW5pY19jcHUgY2hlY2sgYW5kIGNhbGwgX19jcmFzaF9rZXhlYyBkaXJlY3RseS5cXG5rZXJuZWwvcGFuaWMuYy02OTUtXFx0ICovXFxua2VybmVsL3BhbmljLmMtNjk2LVxcdGlmIChfY3Jhc2hfa2V4ZWNfcG9zdF9ub3RpZmllcnMpXFxua2VybmVsL3BhbmljLmM6Njk3OlxcdFxcdF9fY3Jhc2hfa2V4ZWMoTlVMTCk7XFxua2VybmVsL3BhbmljLmMtNjk4LVxcblwiXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoxNC44MzI1NDI0MDJaIiwiU2VxIjo1LCJOZXN0aW5nIjoyLCJUeXBlIjoibGxtIiwiTmFtZSI6InBhdGNoLWV2YWx1YXRvciIsIk1vZGVsIjoiZ2VtaW5pLTMuMS1wcm8tcHJldmlldyIsIkR1cmF0aW9uIjo5MTA4MDc5OTIyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKk15IEFzc2Vzc21lbnQgb2YgdGhlIFplcm9pemUgRnVuY3Rpb24gYW5kIEZ1enppbmcgRmVhc2liaWxpdHkqKlxuXG5Pa2F5LCBzbyBgX19jcmFzaF9rZXhlY2AgaXMgb25seSB0cmlnZ2VyZWQgZHVyaW5nIGEga2VybmVsIHBhbmljIG9yIGEgY3Jhc2guIFRoYXQgbXVjaCBpcyBjbGVhci4gVGhlIHByb2JsZW0gaXMsIGZ1enppbmcgdGhpcyBkaXJlY3RseSBpcyBjb21wbGV0ZWx5IGltcHJhY3RpY2FsLiBBIGZ1enplcidzIHdob2xlIHB1cnBvc2UgaXMgdG8gZmluZCBwYW5pY3Mg4oCTIHRoZSBtb21lbnQgaXQgKmRvZXMqIGZpbmQgb25lLCBpdCdzIGRvbmUgaXRzIGpvYiBhbmQgcmVib290cyB0aGUgdmlydHVhbCBtYWNoaW5lIHRvIGNvbGxlY3QgdGhlIGNyYXNoIGxvZy4gSXQncyBub3QgZGVzaWduZWQgdG8gZGVsdmUgaW50byB0aGUgY29kZSB0aGF0J3MgZXhlY3V0ZWQgKmFmdGVyKiB0aGUgcGFuaWMsIGJlY2F1c2UgdGhlIHBhbmljIGl0c2VsZiBzaWduYWxzIHRoZSBlbmQgb2YgdGhlIGN1cnJlbnQgZnV6emluZyBydW4uXG5cbldhaXQgYSBzZWNvbmTigKYgY291bGQgQlBGIChCZXJrZWxleSBQYWNrZXQgRmlsdGVyKSBwb3RlbnRpYWxseSB0cmlnZ2VyIGBjcmFzaF9rZXhlY2A/IExldCdzIHNlZeKApiBBaCwgeWVzLCB0aGVyZSBpdCBpczogYF9fYnBmX2tmdW5jIHZvaWQgY3Jhc2hfa2V4ZWMoc3RydWN0IHB0X3JlZ3MgKnJlZ3MpYC4gSW50ZXJlc3RpbmcuIEhvd2V2ZXIsIGV2ZW4gaWYgQlBGICpjb3VsZCogY2FsbCBgY3Jhc2hfa2V4ZWNgLCB0aGUgb3V0Y29tZSBpcyBwcmVkaWN0YWJsZS4gSXQgd291bGQgZWl0aGVyIGNyYXNoIHRoZSBzeXN0ZW0gb3V0cmlnaHQgKGlmIGtkdW1wIGlzIGxvYWRlZCksIG9yIGl0IHdvdWxkIGRvIG5vdGhpbmcgKGlmIGtkdW1wIGlzbid0IGxvYWRlZCkuIEVpdGhlciB3YXksIGl0IGVuZHMgdGhlIGZ1enppbmcgcnVuIGltbWVkaWF0ZWx5LCBiZWNhdXNlIGEgY3Jhc2ggaXMganVzdCBjb25zaWRlcmVkIGEgYnVnIGFuZCBpcyBpbW1lZGlhdGVseSByZXBvcnRlZC5cblxuU28sIHJlYWxpc3RpY2FsbHksIGEgZnV6emVyIHdvbid0IGJlIGFibGUgdG8gZWZmZWN0aXZlbHkgZXhwbG9yZSB0aGUgYHplcm9pemVgIGZ1bmN0aW9ucyBhbmQgaWRlbnRpZnkgYnVncyB3aXRoaW4gdGhlbSwgYmVjYXVzZSBhbnkgZXhlY3V0aW9uIG9mIHRoZXNlIGZ1bmN0aW9ucyBpcyBpbmhlcmVudGx5IHRpZWQgdG8gYSBzeXN0ZW0gY3Jhc2guIFRoZSBmdXp6aW5nIHByb2Nlc3MgdGVybWluYXRlcyBiZWZvcmUgaXQgY2FuIGV4cGxvcmUgdGhlIHBvc3QtY3Jhc2ggYmVoYXZpb3VyLlxuXG5Ob3csIGhvbGQgb24uLi4gSXMgdGhlcmUgKmFueSogb3RoZXIgcGF0aCB0byB0cmlnZ2VyIHRoZSBgemVyb2l6ZWAgZnVuY3Rpb24/IExldCdzIGNoZWNrLi4uIE9rYXksIGBrZXktXHUwMDNldHlwZS1cdTAwM2V6ZXJvaXplKGtleSlgIGlzIG9ubHkgY2FsbGVkIGZyb20gYGtleV9jcmFzaF96ZXJvaXplYCwgd2hpY2ggaXMsIGluIHR1cm4sIHJlZ2lzdGVyZWQgdG8gdGhlIGBjcmFzaF96ZXJvaXplX25vdGlmaWVyX2xpc3RgLiBBbmQgYGNyYXNoX3plcm9pemVfbm90aWZpZXJfbGlzdGAgaXMgb25seSBjYWxsZWQgZnJvbSBgY3Jhc2hfemVyb2l6ZSgpYC4gRmluYWxseSwgYGNyYXNoX3plcm9pemUoKWAgaXMgb25seSBjYWxsZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYC5cblxuR290IGl0LiBTbyB0aGlzIGVudGlyZSBmZWF0dXJlIGlzIHN0cmljdGx5IHBvc3QtcGFuaWMuIEl0J3MgZGVzaWduZWQgdG8gcnVuICphZnRlciogYSBjcmFzaCBoYXMgYWxyZWFkeSBvY2N1cnJlZC4gVGhpcyBjb25maXJtcyB0aGF0IGEgZnV6emVyIGlzIG5vdCBhIHVzZWZ1bCB0b29sIGhlcmUuIEEgZnV6emVyIGNvbnNpZGVycyBhIHBhbmljIHRvIGJlIGFuIGVycm9yIGFuZCBpbW1lZGlhdGVseSBoYWx0cyB0aGUgZXhlY3V0aW9uLiBJdCdzIG5vdCBkZXNpZ25lZCB0byB0cnkgdG8gbWF4aW1pemUgY29kZSBjb3ZlcmFnZSAqYWZ0ZXIqIGEgY3Jhc2ggaGFzIGhhcHBlbmVkLlxuXG5UaGVyZWZvcmUsIHRoaXMgcGFydGljdWxhciBwYXRjaCBkb2Vzbid0IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2VzIHRoYXQgYXJlIGFtZW5hYmxlIHRvIGZ1enppbmcuIEl0J3MgcHVyZWx5IHJlbGF0ZWQgdG8gcG9zdC1wYW5pYyBjbGVhbnVwIGFuZCBpcyBpbmhlcmVudGx5IG91dHNpZGUgdGhlIHNjb3BlIG9mIGVmZmVjdGl2ZSBmdXp6aW5nLlxuXG5MZXQgbWUganVzdCBkb3VibGUtY2hlY2sgb25lIG1vcmUgdGltZSwganVzdCB0byBiZSBhYnNvbHV0ZWx5IHN1cmUuLi5cblxuXG4iLCJJbnB1dFRva2VucyI6OTc5NiwiT3V0cHV0VG9rZW5zIjoxNywiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjM5OSwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjoyMy45NDA2MjU4NjRaIiwiU2VxIjo2LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJncmVwcGVyIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6MjM0MzU2Mzk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIkV4cHJlc3Npb25cIjogXCItXFx1MDAzZXplcm9pemVcIlxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiT3V0cHV0XCI6IFwic2VjdXJpdHkva2V5cy9rZXkuYz0xMjc2PXN0YXRpYyBpbnQga2V5X2NyYXNoX3plcm9pemUoc3RydWN0IG5vdGlmaWVyX2Jsb2NrICpuYiwgdW5zaWduZWQgbG9uZyBhY3Rpb24sXFxuLS1cXG5zZWN1cml0eS9rZXlzL2tleS5jLTEyOTctXFx0XFx0LyogY3VzdG9tIHplcm9pemUgc2luY2UgZnJlZSdpbmcgaXNuJ3Qgc2FmZSBhdCB0aGlzIHBvaW50ICovXFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMjk4OlxcdFxcdGlmIChrZXktXFx1MDAzZXR5cGUtXFx1MDAzZXplcm9pemUpXFxuc2VjdXJpdHkva2V5cy9rZXkuYzoxMjk5OlxcdFxcdFxcdGtleS1cXHUwMDNldHlwZS1cXHUwMDNlemVyb2l6ZShrZXkpO1xcbnNlY3VyaXR5L2tleXMva2V5LmMtMTMwMC1cXHR9XFxuXCJcbn0iLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIiLCJJbnB1dFRva2VucyI6MCwiT3V0cHV0VG9rZW5zIjowLCJPdXRwdXRUaG91Z2h0c1Rva2VucyI6MCwiVG9vbENhbGxzIjpudWxsfSx7IlN0YXJ0ZWQiOiIyMDI2LTA4LTA3VDEyOjQ2OjI2LjI4NDE5NDQ0M1oiLCJTZXEiOjcsIk5lc3RpbmciOjIsIlR5cGUiOiJsbG0iLCJOYW1lIjoicGF0Y2gtZXZhbHVhdG9yIiwiTW9kZWwiOiJnZW1pbmktMy4xLXByby1wcmV2aWV3IiwiRHVyYXRpb24iOjExNDMxNzAyNTMyLCJFcnJvciI6IiIsIkFyZ3MiOiJudWxsIiwiUmVzdWx0cyI6Im51bGwiLCJJbnN0cnVjdGlvbiI6IiIsIlByb21wdCI6IiIsIlJlcGx5IjoiIiwiVGhvdWdodHMiOiIqKkZ1enppbmcgQW5hbHlzaXM6IENyYXNoIFplcm9pemF0aW9uIFBhdGNoKipcblxuT2theSwgc28gdGhpcyBwYXRjaCBpcyAqc29sZWx5KiBjb25jZXJuZWQgd2l0aCB6ZXJvaXppbmcgc2VjcmV0cywgc3BlY2lmaWNhbGx5IGtleXMgYW5kIG1lbW9yeSwgdXBvbiBhIGtlcm5lbCBwYW5pYy4gSSd2ZSBjb25maXJtZWQgdGhhdCB0aGUgY3JpdGljYWwgZnVuY3Rpb24gaXMgYGtleV9jcmFzaF96ZXJvaXplYCwgYW5kIGBzZWNyZXRtZW1fY3Jhc2hfemVyb2l6ZWAgaXMgYWxzbyByZWdpc3RlcmVkLCBzbyB0aGF0J3MgdGhlIGV4dGVudCBvZiB0aGUgaW5pdGlhbCBjaGFuZ2UuIEl0J3MgZXNzZW50aWFsbHkganVzdCBhIGJ1bmNoIG9mIGB6ZXJvaXplYCBjYWxsYmFjayBpbXBsZW1lbnRhdGlvbnMgdGhhdCBzdXBwb3J0IHRoZSBzYW1lIGZ1bmN0aW9uYWxpdHkuXG5cbk15IGFuYWx5c2lzIGJvaWxzIGRvd24gdG8gdGhpczogKnRoaXMgY29kZSBpcyBvbmx5IGV2ZXIgcmVhY2hhYmxlIGFmdGVyIGEgcGFuaWMgb2NjdXJzLiogRnV6emVycywgYnkgZGVmaW5pdGlvbiwgdHJlYXQgcGFuaWNzIGFzIHRlcm1pbmFsIGV2ZW50cy4gVGhleSBoYWx0IGV4ZWN1dGlvbiBpbW1lZGlhdGVseSB0byBjYXB0dXJlIHRoZSBjcmFzaCBzdGF0ZSBhbmQgZ2VuZXJhdGUgbG9ncy4gVGhleSBhcmVuJ3QgZGVzaWduZWQgdG8gY29udGludWUgZXhwbG9yaW5nIGNvZGUgcGF0aHMgKmFmdGVyKiBhIGNyYXNoLiBUcnlpbmcgdG8gZnV6eiBwb3N0LXBhbmljIGNvZGUgaXMgZ29pbmcgdG8gYmUgcG9pbnRsZXNzLiBUaGVyZSdzIHNpbXBseSBubyBmdW5jdGlvbmFsIGltcGFjdCBoZXJlIHRoYXQgYSBmdXp6ZXIgY2FuIG1lYW5pbmdmdWxseSBleGVyY2lzZS5cblxuSSd2ZSBkb3VibGUtY2hlY2tlZCBhbGwgdGhlIGNoYW5nZXMgaW4gYGRyaXZlcnMvb2Yva2V4ZWMuY2AsIGBpbmNsdWRlL2xpbnV4L2NyYXNoX2NvcmUuaGAsIGBpbmNsdWRlL2xpbnV4L2tleS10eXBlLmhgLCBga2VybmVsL0tjb25maWcua2V4ZWNgLCBga2VybmVsL2NyYXNoX2NvcmUuY2AsIGBtbS9zZWNyZXRtZW0uY2AsIGFuZCB0aGUgc2VjdXJpdHkga2V5IGZpbGVzLiBUaGV5IGFsbCBzZWVtIHRvIGJlIHRpZ2h0bHkgY291cGxlZCB0byB0aGlzIHBhbmljIHplcm9pemF0aW9uIGZ1bmN0aW9uYWxpdHksIHRoZSBgQ1JBU0hfWkVST0laRWAgZmVhdHVyZSwgdGhhdCBpcyBjYWxsZWQgZHVyaW5nIHBhbmljIGFuZCBub3QgZWFybGllci5cblxuVGhlcmVmb3JlLCBteSBjb25jbHVzaW9uIGlzIGNsZWFyLiBUaGVyZSdzIG5vIHZhbHVlIGluIHRyeWluZyB0byBmdXp6IHRoZXNlIGNoYW5nZXMuIFRoZSBgV29ydGhGdXp6aW5nYCBmbGFnIHdpbGwgYmUgc2V0IHRvIGBmYWxzZWAuXG5cblxuIiwiSW5wdXRUb2tlbnMiOjEwOTIzLCJPdXRwdXRUb2tlbnMiOjEyMiwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjU0NCwiVG9vbENhbGxzIjpbImdyZXBwZXIiXX0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjozNy43MTU5MDA5MDVaIiwiU2VxIjo4LCJOZXN0aW5nIjoyLCJUeXBlIjoidG9vbCIsIk5hbWUiOiJzZXQtcmVzdWx0cyIsIk1vZGVsIjoiIiwiRHVyYXRpb24iOjQxMTQwLCJFcnJvciI6IiIsIkFyZ3MiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBbXSxcbiAgXCJGb2N1c1N5bWJvbHNcIjogW10sXG4gIFwiUmVhc29uaW5nXCI6IFwiVGhlIHBhdGNoIGludHJvZHVjZXMgYSBtZWNoYW5pc20gdG8gemVyb2l6ZSBzZWNyZXRzIChrZXlzIGFuZCBzZWNyZXRtZW0pIGR1cmluZyBhIGtlcm5lbCBjcmFzaCBvciBwYW5pYy4gVGhpcyBjb2RlIGlzIG9ubHkgZXhlY3V0ZWQgZnJvbSBgX19jcmFzaF9rZXhlYygpYCBhZnRlciBhIHBhbmljIGhhcyBhbHJlYWR5IG9jY3VycmVkLiBGdXp6ZXJzIHRyZWF0IHBhbmljcyBhcyBidWdzIGFuZCBoYWx0IGV4ZWN1dGlvbiB0byBjb2xsZWN0IGNyYXNoIGxvZ3MsIG1lYW5pbmcgdGhleSBjYW5ub3QgZWZmZWN0aXZlbHkgZXhwbG9yZSBvciBmaW5kIGJ1Z3MgaW4gcG9zdC1wYW5pYyBjb2RlIHBhdGhzLiBUaGVyZWZvcmUsIHRoZXNlIGNoYW5nZXMgZG8gbm90IGhhdmUgYSBmdW5jdGlvbmFsIGltcGFjdCB0aGF0IGNhbiBiZSBtZWFuaW5nZnVsbHkgZnV6emVkLlwiLFxuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJ7XG4gIFwiRW5hYmxlQ29uZmlnc1wiOiBudWxsLFxuICBcIkZvY3VzU3ltYm9sc1wiOiBbXSxcbiAgXCJSZWFzb25pbmdcIjogXCJUaGUgcGF0Y2ggaW50cm9kdWNlcyBhIG1lY2hhbmlzbSB0byB6ZXJvaXplIHNlY3JldHMgKGtleXMgYW5kIHNlY3JldG1lbSkgZHVyaW5nIGEga2VybmVsIGNyYXNoIG9yIHBhbmljLiBUaGlzIGNvZGUgaXMgb25seSBleGVjdXRlZCBmcm9tIGBfX2NyYXNoX2tleGVjKClgIGFmdGVyIGEgcGFuaWMgaGFzIGFscmVhZHkgb2NjdXJyZWQuIEZ1enplcnMgdHJlYXQgcGFuaWNzIGFzIGJ1Z3MgYW5kIGhhbHQgZXhlY3V0aW9uIHRvIGNvbGxlY3QgY3Jhc2ggbG9ncywgbWVhbmluZyB0aGV5IGNhbm5vdCBlZmZlY3RpdmVseSBleHBsb3JlIG9yIGZpbmQgYnVncyBpbiBwb3N0LXBhbmljIGNvZGUgcGF0aHMuIFRoZXJlZm9yZSwgdGhlc2UgY2hhbmdlcyBkbyBub3QgaGF2ZSBhIGZ1bmN0aW9uYWwgaW1wYWN0IHRoYXQgY2FuIGJlIG1lYW5pbmdmdWxseSBmdXp6ZWQuXCIsXG4gIFwiV29ydGhGdXp6aW5nXCI6IGZhbHNlXG59IiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH0seyJTdGFydGVkIjoiMjAyNi0wOC0wN1QxMjo0NjozNy43MTU5NDY1MTRaIiwiU2VxIjo5LCJOZXN0aW5nIjoxLCJUeXBlIjoiYWN0aW9uIiwiTmFtZSI6IklmIiwiTW9kZWwiOiIiLCJEdXJhdGlvbiI6Mjk4OSwiRXJyb3IiOiIiLCJBcmdzIjoie1xuICBcIldvcnRoRnV6emluZ1wiOiBmYWxzZVxufSIsIlJlc3VsdHMiOiJudWxsIiwiSW5zdHJ1Y3Rpb24iOiIiLCJQcm9tcHQiOiIiLCJSZXBseSI6IiIsIlRob3VnaHRzIjoiIiwiSW5wdXRUb2tlbnMiOjAsIk91dHB1dFRva2VucyI6MCwiT3V0cHV0VGhvdWdodHNUb2tlbnMiOjAsIlRvb2xDYWxscyI6bnVsbH1dOwoJCQlpZiAoIXJhd0RhdGEgfHwgcmF3RGF0YS5sZW5ndGggPT09IDApIHJldHVybjsKCgkJCWRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpOwoJCQlkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKTsKCQkJZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKTsKCQl9CgoJCWZ1bmN0aW9uIGRyYXdTdW1tYXJ5VGFibGVzKHJhd0RhdGEpIHsKCQkJY29uc3Qgc3RhdHMgPSB7CgkJCQlsbG06IHsgY291bnQ6IDAsIHRva2VuczogMCwgZHVyYXRpb246IDAgfSwKCQkJCXRvb2w6IHsgY291bnQ6IDAsIGR1cmF0aW9uOiAwIH0KCQkJfTsKCgkJCXJhd0RhdGEuZm9yRWFjaChzID0+IHsKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOyAKCQkJCWlmIChzLlR5cGUgPT09ICJsbG0iKSB7CgkJCQkJc3RhdHMubGxtLmNvdW50Kys7CgkJCQkJc3RhdHMubGxtLnRva2VucyArPSAocy5JbnB1dFRva2VucyArIHMuT3V0cHV0VG9rZW5zICsgcy5PdXRwdXRUaG91Z2h0c1Rva2Vucyk7CgkJCQkJc3RhdHMubGxtLmR1cmF0aW9uICs9IGR1cjsKCQkJCX0gZWxzZSBpZiAocy5UeXBlID09PSAidG9vbCIpIHsKCQkJCQlzdGF0cy50b29sLmNvdW50Kys7CgkJCQkJc3RhdHMudG9vbC5kdXJhdGlvbiArPSBkdXI7CgkJCQl9CgkJCX0pOwoKCQkJY29uc3QgYXZnTGxtRHVyID0gc3RhdHMubGxtLmNvdW50ID4gMCA/IChzdGF0cy5sbG0uZHVyYXRpb24gLyBzdGF0cy5sbG0uY291bnQpLnRvRml4ZWQoMikgOiAwOwoJCQljb25zdCBhdmdMbG1Ub2tlbiA9IHN0YXRzLmxsbS5jb3VudCA+IDAgPyAoc3RhdHMubGxtLnRva2VucyAvIHN0YXRzLmxsbS5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgkJCWNvbnN0IGF2Z1Rvb2xEdXIgPSBzdGF0cy50b29sLmNvdW50ID4gMCA/IChzdGF0cy50b29sLmR1cmF0aW9uIC8gc3RhdHMudG9vbC5jb3VudCkudG9GaXhlZCgyKSA6IDA7CgoJCQljb25zdCBsbG1TdW1hcnlDZWxscyA9IFtzdGF0cy5sbG0uY291bnQsIHN0YXRzLmxsbS50b2tlbnMsIGF2Z0xsbVRva2VuLCBzdGF0cy5sbG0uZHVyYXRpb24sIGF2Z0xsbUR1cl07CgkJCWNvbnN0IHRvb2xTdW1tYXJ5Q2VsbHMgPSBbc3RhdHMudG9vbC5jb3VudCwgc3RhdHMudG9vbC5kdXJhdGlvbiwgYXZnVG9vbER1cl07CgoJCQljb25zdCBsbG1TdW1tYXJ5Qm9keSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCdsbG1fc3VtbWFyeV9zdGF0c19ib2R5Jyk7CgkJCWxsbVN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCBsbG1UciA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RyJyk7CgkJCWxsbVN1bWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQlsbG1Uci5hcHBlbmRDaGlsZCh0ZCk7CgkJCX0pOwoJCQlsbG1TdW1tYXJ5Qm9keS5hcHBlbmRDaGlsZChsbG1Ucik7CgoJCQljb25zdCB0b29sU3VtbWFyeUJvZHkgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgndG9vbF9zdW1tYXJ5X3N0YXRzX2JvZHknKTsKCQkJdG9vbFN1bW1hcnlCb2R5LmlubmVySFRNTCA9ICIiOwoJCQljb25zdCB0b29sVHIgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cicpOwoJCQl0b29sU3VtbWFyeUNlbGxzLmZvckVhY2goY2VsbCA9PiB7CgkJCQljb25zdCB0ZCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ3RkJyk7CgkJCQl0ZC50ZXh0Q29udGVudCA9IGNlbGw7CgkJCQl0b29sVHIuYXBwZW5kQ2hpbGQodGQpOwoJCQl9KTsKCQkJdG9vbFN1bW1hcnlCb2R5LmFwcGVuZENoaWxkKHRvb2xUcik7CgkJfQoKCQlmdW5jdGlvbiBkcmF3RHVyYXRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGZpbHRlcmVkU3RlcHMgPSByYXdEYXRhLmZpbHRlcihkID0+IFsibGxtIiwgInRvb2wiXS5pbmNsdWRlcyhkLlR5cGUpKTsKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnRHVyYXRpb24nKTsKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsgCgoJCQlmaWx0ZXJlZFN0ZXBzLmZvckVhY2gocyA9PiB7CgkJCQkKCQkJCWNvbnN0IGR1ciA9IHMuRHVyYXRpb24gLyAxMDAwMDAwMDAwOwoJCQkJbGV0IHRvb2x0aXAgPSBzLk5hbWU7CgkJCQlpZiAocy5UeXBlID09PSAibGxtIiAmJiBzLlRvb2xDYWxscyAmJiBzLlRvb2xDYWxscy5sZW5ndGggPiAwKSB7CgkJCQkJdG9vbHRpcCArPSBgXG5Ub29sczogJHtzLlRvb2xDYWxscy5qb2luKCcsICcpfWA7CgkJCQl9CgkJCQlkYXRhLmFkZFJvdyhbYCR7cy5TZXF9YCwgZHVyLCB0b29sdGlwXSk7CgkJCX0pOwoKCQkJY29uc3Qgb3B0aW9ucyA9IHsKCQkJCXRpdGxlOiAnVGltZSBDb25zdW1wdGlvbiBvZiBMTE0vVG9vbCBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNL1Rvb2wgU3RlcHMnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnU2Vjb25kcycgfSwKCQkJCWxlZ2VuZDogeyBwb3NpdGlvbjogJ25vbmUnIH0sCgkJCQliYXI6IHsgZ3JvdXBXaWR0aDogJzc1JScgfSwKCQkJCWNoYXJ0QXJlYTogeyB3aWR0aDogJzg1JScsIGhlaWdodDogJzcwJScgfSwKCQkJCWhlaWdodDogNDAwCgkJCX07CgoJCQljb25zdCBjaGFydCA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5Db2x1bW5DaGFydChkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnZHVyYXRpb25fY2hhcnRfZGl2JykpOwoJCQljaGFydC5kcmF3KGRhdGEsIG9wdGlvbnMpOwoJCX0KCgkJZnVuY3Rpb24gZHJhd1Rva2VuQ29uc3VtcHRpb25DaGFydChyYXdEYXRhKSB7CgkJCWNvbnN0IGxsbVN0ZXBzID0gcmF3RGF0YS5maWx0ZXIoZCA9PiBkLlR5cGUgPT09ICJsbG0iKTsKCQkJaWYgKGxsbVN0ZXBzLmxlbmd0aCA9PT0gMCkgcmV0dXJuOwoKCQkJY29uc3QgZGF0YSA9IG5ldyBnb29nbGUudmlzdWFsaXphdGlvbi5EYXRhVGFibGUoKTsKCQkJZGF0YS5hZGRDb2x1bW4oJ3N0cmluZycsICdTdGVwJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKCdudW1iZXInLCAnVG9rZW5zJyk7CQkJCgkJCWRhdGEuYWRkQ29sdW1uKHt0eXBlOiAnc3RyaW5nJywgcm9sZTogJ3N0eWxlJ30pOwkKCQkJZGF0YS5hZGRDb2x1bW4oe3R5cGU6ICdzdHJpbmcnLCByb2xlOiAndG9vbHRpcCd9KTsJCgoJCQljb25zdCBhZ2VudENvbG9ycyA9IHt9OwoJCQljb25zdCBwYWxldHRlID0gWycjNDI4NUY0JywgJyNEQjQ0MzcnLCAnI0Y0QjQwMCcsICcjMEY5RDU4JywgJyNBQjQ3QkMnLCAnIzAwQUNDMSddOwoJCQlsZXQgY29sb3JJZHggPSAwOwoJCQljb25zdCBhZ2VudExMTUNvdW50cyA9IHt9OwoJCQlsbG1TdGVwcy5mb3JFYWNoKHMgPT4gewoJCQkJaWYgKCFhZ2VudENvbG9yc1tzLk5hbWVdKSB7CgkJCQkJYWdlbnRDb2xvcnNbcy5OYW1lXSA9IHBhbGV0dGVbY29sb3JJZHggJSBwYWxldHRlLmxlbmd0aF07CgkJCQkJY29sb3JJZHgrKzsKCQkJCX0KCgkJCQlhZ2VudExMTUNvdW50c1tzLk5hbWVdID0gKGFnZW50TExNQ291bnRzW3MuTmFtZV0gfHwgMCkgKyAxOwoJCQkJY29uc3QgbGFiZWwgPSBgJHtzLk5hbWV9LSR7YWdlbnRMTE1Db3VudHNbcy5OYW1lXX1gOwoJCQkJY29uc3QgdG90YWxUb2tlbnMgPSBzLklucHV0VG9rZW5zICsgcy5PdXRwdXRUb2tlbnMgKyBzLk91dHB1dFRob3VnaHRzVG9rZW5zOwoJCQkJY29uc3Qgc3R5bGUgPSBgY29sb3I6ICR7YWdlbnRDb2xvcnNbcy5OYW1lXX1gOwoJCQkJbGV0IHRvb2x0aXAgPSBgVG90YWwgVG9rZW5zOiAke3RvdGFsVG9rZW5zfVxuKEluOiAke3MuSW5wdXRUb2tlbnN9LCBPdXQ6ICR7cy5PdXRwdXRUb2tlbnN9LCBUaG91Z2h0czogJHtzLk91dHB1dFRob3VnaHRzVG9rZW5zfSlgOwoJCQkJaWYgKHMuVG9vbENhbGxzICYmIHMuVG9vbENhbGxzLmxlbmd0aCA+IDApIHsKCQkJCQl0b29sdGlwICs9IGBcblRvb2xzOiAke3MuVG9vbENhbGxzLmpvaW4oJywgJyl9YDsKCQkJCX0KCgkJCQlkYXRhLmFkZFJvdyhbbGFiZWwsIHRvdGFsVG9rZW5zLCBzdHlsZSwgdG9vbHRpcF0pOwoJCQl9KTsKCgkJCWNvbnN0IG9wdGlvbnMgPSB7CgkJCQl0aXRsZTogJ1Rva2VuIENvbnN1bXB0aW9uIGJ5IExMTSBDYWxscycsCgkJCQloQXhpczogewoJCQkJCXRpdGxlOiAnTExNIENhbGwgU2VxdWVuY2UnLAoJCQkJfSwKCQkJCXZBeGlzOiB7IHRpdGxlOiAnQ29uc3VtZWQgVG9rZW5zJyB9LAoJCQkJbGVnZW5kOiB7IHBvc2l0aW9uOiAnbm9uZScgfSwKCQkJCWJhcjogeyBncm91cFdpZHRoOiAnNzUlJyB9LAoJCQkJY2hhcnRBcmVhOiB7IHdpZHRoOiAnODUlJywgaGVpZ2h0OiAnNzAlJyB9LAoJCQkJaGVpZ2h0OiA0MDAKCQkJfTsKCgkJCWNvbnN0IGNoYXJ0ID0gbmV3IGdvb2dsZS52aXN1YWxpemF0aW9uLkNvbHVtbkNoYXJ0KGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCd0b2tlbl9jaGFydF9kaXYnKSk7CgkJCWNoYXJ0LmRyYXcoZGF0YSwgb3B0aW9ucyk7CgkJfQoJCWxldCBhbGxFeHBhbmRlZCA9IGZhbHNlOwoJCWZ1bmN0aW9uIHRvZ2dsZUFsbERldGFpbHMoKSB7CgkJCWFsbEV4cGFuZGVkID0gIWFsbEV4cGFuZGVkOwoJCQlkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCdkZXRhaWxzJykuZm9yRWFjaChkID0+IHsKCQkJCWlmIChhbGxFeHBhbmRlZCkgZC5zZXRBdHRyaWJ1dGUoJ29wZW4nLCAnJyk7CgkJCQllbHNlIGQucmVtb3ZlQXR0cmlidXRlKCdvcGVuJyk7CgkJCX0pOwoJCX0KCTwvc2NyaXB0PgoKCjwvYm9keT4KPC9odG1sPgo=" },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-workflowvxfbg[1] Phase: Running StartedAt: 2026-08-07 12:46:49 +0000 UTC FinishedAt: 0001-01-01 00:00:00 +0000 UTC Input: nil Output: nil --------- Name: series-workflowvxfbg[1].abort-on-skip-outcome Phase: Failed StartedAt: 2026-08-07 12:46:49 +0000 UTC FinishedAt: 2026-08-07 12:46:55 +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,}